This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

c++/343: gcc reports internal compiler error #98



>Number:         343
>Category:       c++
>Synopsis:       gcc reports internal compiler error #98
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Jun 22 08:06:01 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator:     green@rhythm.com
>Release:        unknown-1.0
>Organization:
>Environment:
c++ -v
Reading specs from /usr/lib/gcc-lib/alpha-redhat-linux/egcs-2.91.66/specs
gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)
>Description:
The following command line:

c++ -v -save-files -O2 -ftemplate-depth-1024 -c
-DSYSV -DMOTIF -DXT_CODE -Ih -Iui -I../h
-I/software/thalia/h -I/usr/X11R6/include
-o obj/linux6-alpha-std/NRHY_Access.o nrhy/NRHY_Access.c

Produces the following messages:

Reading specs from /usr/lib/gcc-lib/alpha-redhat-linux/egcs-2.91.66/specs
c++: unrecognized option `-save-files'
gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)
 /usr/lib/gcc-lib/alpha-redhat-linux/egcs-2.91.66/cpp -lang-c++ -v -Ih -Iui -I../h -I/software/thalia/h -I/usr/X11R6/include -undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus -D__GNUC_MINOR__=91 -Dlinux -Dunix -D_LONGLONG -D__alpha__ -D__ELF__ -D__linux__ -D__unix__ -D_LONGLONG -D__alpha__ -D__ELF__ -D__linux -D__unix -Asystem(linux) -D__EXCEPTIONS -D__OPTIMIZE__ -D__LANGUAGE_C__ -D__LANGUAGE_C -DLANGUAGE_C -Acpu(alpha) -Amachine(alpha) -D__alpha -D__alpha__ -D__alpha_ev4__ -Acpu(ev4) -DSYSV -DMOTIF -DXT_CODE nrhy/NRHY_Access.c /tmp/ccCLiGbx.ii
GNU CPP version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release) (Alpha GNU/Linux for ELF)
#include "..." search starts here:
#include <...> search starts here:
 h
 ui
 ../h
 /software/thalia/h
 /usr/X11R6/include
 /usr/include/g++-2
 /usr/local/include
 /usr/alpha-redhat-linux/include
 /usr/lib/gcc-lib/alpha-redhat-linux/egcs-2.91.66/include
 /usr/include
End of search list.
 /usr/lib/gcc-lib/alpha-redhat-linux/egcs-2.91.66/cc1plus /tmp/ccCLiGbx.ii -quiet -dumpbase NRHY_Access.cc -O2 -version -ftemplate-depth-1024 -o /tmp/cc8wR72A.s
GNU C++ version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release) (alpha-redhat-linux) compiled by GNU C version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).
nrhy/NRHY_Access.c: In method `void Chordump::DoCamera()':
nrhy/NRHY_Access.c:612: warning: name lookup of `i' changed for new ANSI `for' scoping
nrhy/NRHY_Access.c:607: warning:   using obsolete binding at `i'
nrhy/NRHY_Access.c: In method `void Chordump::DoStereo(short int, short int)':
nrhy/NRHY_Access.c:635: warning: name lookup of `i' changed for new ANSI `for' scoping
nrhy/NRHY_Access.c:627: warning:   using obsolete binding at `i'
h/nrhy_templateFind.h: In method `class NRHY_classMuscle * NRHY_find<NRHY_classMuscle>::FastFind<NRHY_classMuscle>()':
h/nrhy_templateFind.h:145:   instantiated from `NRHY_find<NRHY_classMuscle>::findItemForRead<NRHY_classMuscle>()'
h/nrhy_templateFind.h:120:   instantiated from `NRHY_find<NRHY_classMuscle>::findItem<NRHY_classMuscle>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classMuscle>::FindItem<NRHY_classMuscle>(bool, bool, bool)'
h/nrhy_templateFind.h:73:   instantiated from `NRHY_find<NRHY_classMuscle>::FindItemAsThing<NRHY_classMuscle>(bool, bool, bool)'
h/nrhy_templateMatch.c:2306:   instantiated from `NRHY_match<NRHY_classLayer>::matchAllOfOneClass<NRHY_classLayer>(const char *)'
h/nrhy_templateMatch.c:598:   instantiated from `NRHY_match<NRHY_classLayer>::Matchem<NRHY_classLayer>(const char *)'
h/nrhy_templateFind.h:132:   instantiated from `NRHY_find<NRHY_classLayer>::findItem<NRHY_classLayer>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classLayer>::FindItem<NRHY_classLayer>(bool, bool, bool)'
h/nrhy_templateFind.h:73:   instantiated from `NRHY_find<NRHY_classLayer>::FindItemAsThing<NRHY_classLayer>(bool, bool, bool)'
h/nrhy_templateMatch.c:2304:   instantiated from `NRHY_match<NRHY_classFur>::matchAllOfOneClass<NRHY_classFur>(const char *)'
h/nrhy_templateMatch.c:598:   instantiated from `NRHY_match<NRHY_classFur>::Matchem<NRHY_classFur>(const char *)'
h/nrhy_templateFind.h:132:   instantiated from `NRHY_find<NRHY_classFur>::findItem<NRHY_classFur>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classFur>::FindItem<NRHY_classFur>(bool, bool, bool)'
h/nrhy_templateFind.h:73:   instantiated from `NRHY_find<NRHY_classFur>::FindItemAsThing<NRHY_classFur>(bool, bool, bool)'
h/nrhy_templateMatch.c:2302:   instantiated from `NRHY_match<NRHY_classKlist>::matchAllOfOneClass<NRHY_classKlist>(const char *)'
h/nrhy_templateMatch.c:598:   instantiated from `NRHY_match<NRHY_classKlist>::Matchem<NRHY_classKlist>(const char *)'
h/nrhy_templateFind.h:132:   instantiated from `NRHY_find<NRHY_classKlist>::findItem<NRHY_classKlist>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classKlist>::FindItem<NRHY_classKlist>(bool, bool, bool)'
h/nrhy_templateFind.h:73:   instantiated from `NRHY_find<NRHY_classKlist>::FindItemAsThing<NRHY_classKlist>(bool, bool, bool)'
h/nrhy_templateMatch.c:2300:   instantiated from `NRHY_match<NRHY_classRoot>::matchAllOfOneClass<NRHY_classRoot>(const char *)'
h/nrhy_templateMatch.c:598:   instantiated from `NRHY_match<NRHY_classRoot>::Matchem<NRHY_classRoot>(const char *)'
h/nrhy_templateFind.h:132:   instantiated from `NRHY_find<NRHY_classRoot>::findItem<NRHY_classRoot>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classRoot>::FindItem<NRHY_classRoot>(bool, bool, bool)'
h/nrhy_templateFind.h:73:   instantiated from `NRHY_find<NRHY_classRoot>::FindItemAsThing<NRHY_classRoot>(bool, bool, bool)'
h/nrhy_templateMatch.c:2298:   instantiated from `NRHY_match<NRHY_classApparition>::matchAllOfOneClass<NRHY_classApparition>(const char *)'
h/nrhy_templateMatch.c:598:   instantiated from `NRHY_match<NRHY_classApparition>::Matchem<NRHY_classApparition>(const char *)'
h/nrhy_templateFind.h:132:   instantiated from `NRHY_find<NRHY_classApparition>::findItem<NRHY_classApparition>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classApparition>::FindItem<NRHY_classApparition>(bool, bool, bool)'
h/nrhy_templateFind.h:73:   instantiated from `NRHY_find<NRHY_classApparition>::FindItemAsThing<NRHY_classApparition>(bool, bool, bool)'
h/nrhy_templateMatch.c:2296:   instantiated from `NRHY_match<NRHY_classTrack>::matchAllOfOneClass<NRHY_classTrack>(const char *)'
h/nrhy_templateMatch.c:598:   instantiated from `NRHY_match<NRHY_classTrack>::Matchem<NRHY_classTrack>(const char *)'
h/nrhy_templateFind.h:132:   instantiated from `NRHY_find<NRHY_classTrack>::findItem<NRHY_classTrack>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classTrack>::FindItem<NRHY_classTrack>(bool, bool, bool)'
h/nrhy_templateFind.h:73:   instantiated from `NRHY_find<NRHY_classTrack>::FindItemAsThing<NRHY_classTrack>(bool, bool, bool)'
h/nrhy_templateMatch.c:2294:   instantiated from `NRHY_match<NRHY_classScaffold>::matchAllOfOneClass<NRHY_classScaffold>(const char *)'
h/nrhy_templateMatch.c:598:   instantiated from `NRHY_match<NRHY_classScaffold>::Matchem<NRHY_classScaffold>(const char *)'
h/nrhy_templateFind.h:132:   instantiated from `NRHY_find<NRHY_classScaffold>::findItem<NRHY_classScaffold>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classScaffold>::FindItem<NRHY_classScaffold>(bool, bool, bool)'
h/nrhy_templateFind.h:73:   instantiated from `NRHY_find<NRHY_classScaffold>::FindItemAsThing<NRHY_classScaffold>(bool, bool, bool)'
h/nrhy_templateMatch.c:2292:   instantiated from `NRHY_match<NRHY_classInky>::matchAllOfOneClass<NRHY_classInky>(const char *)'
h/nrhy_templateMatch.c:598:   instantiated from `NRHY_match<NRHY_classInky>::Matchem<NRHY_classInky>(const char *)'
h/nrhy_templateFind.h:132:   instantiated from `NRHY_find<NRHY_classInky>::findItem<NRHY_classInky>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classInky>::FindItem<NRHY_classInky>(bool, bool, bool)'
h/nrhy_templateFind.h:73:   instantiated from `NRHY_find<NRHY_classInky>::FindItemAsThing<NRHY_classInky>(bool, bool, bool)'
h/nrhy_templateMatch.c:2290:   instantiated from `NRHY_match<NRHY_classCollision>::matchAllOfOneClass<NRHY_classCollision>(const char *)'
h/nrhy_templateMatch.c:598:   instantiated from `NRHY_match<NRHY_classCollision>::Matchem<NRHY_classCollision>(const char *)'
h/nrhy_templateFind.h:132:   instantiated from `NRHY_find<NRHY_classCollision>::findItem<NRHY_classCollision>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classCollision>::FindItem<NRHY_classCollision>(bool, bool, bool)'
h/nrhy_templateFind.h:73:   instantiated from `NRHY_find<NRHY_classCollision>::FindItemAsThing<NRHY_classCollision>(bool, bool, bool)'
h/nrhy_templateMatch.c:2288:   instantiated from `NRHY_match<NRHY_classGenerator>::matchAllOfOneClass<NRHY_classGenerator>(const char *)'
h/nrhy_templateMatch.c:598:   instantiated from `NRHY_match<NRHY_classGenerator>::Matchem<NRHY_classGenerator>(const char *)'
h/nrhy_templateFind.h:132:   instantiated from `NRHY_find<NRHY_classGenerator>::findItem<NRHY_classGenerator>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classGenerator>::FindItem<NRHY_classGenerator>(bool, bool, bool)'
h/nrhy_templateFind.h:73:   instantiated from `NRHY_find<NRHY_classGenerator>::FindItemAsThing<NRHY_classGenerator>(bool, bool, bool)'
h/nrhy_templateMatch.c:2286:   instantiated from `NRHY_match<NRHY_classForce>::matchAllOfOneClass<NRHY_classForce>(const char *)'
h/nrhy_templateMatch.c:598:   instantiated from `NRHY_match<NRHY_classForce>::Matchem<NRHY_classForce>(const char *)'
h/nrhy_templateFind.h:132:   instantiated from `NRHY_find<NRHY_classForce>::findItem<NRHY_classForce>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classForce>::FindItem<NRHY_classForce>(bool, bool, bool)'
h/nrhy_templateFind.h:73:   instantiated from `NRHY_find<NRHY_classForce>::FindItemAsThing<NRHY_classForce>(bool, bool, bool)'
h/nrhy_templateMatch.c:2284:   instantiated from `NRHY_match<NRHY_classDynamics>::matchAllOfOneClass<NRHY_classDynamics>(const char *)'
h/nrhy_templateMatch.c:598:   instantiated from `NRHY_match<NRHY_classDynamics>::Matchem<NRHY_classDynamics>(const char *)'
h/nrhy_templateFind.h:132:   instantiated from `NRHY_find<NRHY_classDynamics>::findItem<NRHY_classDynamics>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classDynamics>::FindItem<NRHY_classDynamics>(bool, bool, bool)'
h/nrhy_templateFind.h:73:   instantiated from `NRHY_find<NRHY_classDynamics>::FindItemAsThing<NRHY_classDynamics>(bool, bool, bool)'
h/nrhy_templateMatch.c:2282:   instantiated from `NRHY_match<NRHY_classSound>::matchAllOfOneClass<NRHY_classSound>(const char *)'
h/nrhy_templateMatch.c:598:   instantiated from `NRHY_match<NRHY_classSound>::Matchem<NRHY_classSound>(const char *)'
h/nrhy_templateFind.h:132:   instantiated from `NRHY_find<NRHY_classSound>::findItem<NRHY_classSound>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classSound>::FindItem<NRHY_classSound>(bool, bool, bool)'
h/nrhy_templateFind.h:73:   instantiated from `NRHY_find<NRHY_classSound>::FindItemAsThing<NRHY_classSound>(bool, bool, bool)'
h/nrhy_templateMatch.c:2280:   instantiated from `NRHY_match<NRHY_classUseMap>::matchAllOfOneClass<NRHY_classUseMap>(const char *)'
h/nrhy_templateMatch.c:598:   instantiated from `NRHY_match<NRHY_classUseMap>::Matchem<NRHY_classUseMap>(const char *)'
h/nrhy_templateFind.h:132:   instantiated from `NRHY_find<NRHY_classUseMap>::findItem<NRHY_classUseMap>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classUseMap>::FindItem<NRHY_classUseMap>(bool, bool, bool)'
h/nrhy_templateFind.h:73:   instantiated from `NRHY_find<NRHY_classUseMap>::FindItemAsThing<NRHY_classUseMap>(bool, bool, bool)'
h/nrhy_templateMatch.c:2278:   instantiated from `NRHY_match<NRHY_classMap>::matchAllOfOneClass<NRHY_classMap>(const char *)'
h/nrhy_templateMatch.c:598:   instantiated from `NRHY_match<NRHY_classMap>::Matchem<NRHY_classMap>(const char *)'
h/nrhy_templateFind.h:132:   instantiated from `NRHY_find<NRHY_classMap>::findItem<NRHY_classMap>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classMap>::FindItem<NRHY_classMap>(bool, bool, bool)'
h/nrhy_templateFind.h:73:   instantiated from `NRHY_find<NRHY_classMap>::FindItemAsThing<NRHY_classMap>(bool, bool, bool)'
h/nrhy_templateMatch.c:2276:   instantiated from `NRHY_match<NRHY_classMaterial>::matchAllOfOneClass<NRHY_classMaterial>(const char *)'
h/nrhy_templateMatch.c:598:   instantiated from `NRHY_match<NRHY_classMaterial>::Matchem<NRHY_classMaterial>(const char *)'
h/nrhy_templateFind.h:132:   instantiated from `NRHY_find<NRHY_classMaterial>::findItem<NRHY_classMaterial>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classMaterial>::FindItem<NRHY_classMaterial>(bool, bool, bool)'
h/nrhy_templateFind.h:73:   instantiated from `NRHY_find<NRHY_classMaterial>::FindItemAsThing<NRHY_classMaterial>(bool, bool, bool)'
h/nrhy_templateMatch.c:2274:   instantiated from `NRHY_match<NRHY_classTex>::matchAllOfOneClass<NRHY_classTex>(const char *)'
h/nrhy_templateMatch.c:598:   instantiated from `NRHY_match<NRHY_classTex>::Matchem<NRHY_classTex>(const char *)'
h/nrhy_templateFind.h:132:   instantiated from `NRHY_find<NRHY_classTex>::findItem<NRHY_classTex>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classTex>::FindItem<NRHY_classTex>(bool, bool, bool)'
h/nrhy_templateFind.h:73:   instantiated from `NRHY_find<NRHY_classTex>::FindItemAsThing<NRHY_classTex>(bool, bool, bool)'
h/nrhy_templateMatch.c:2272:   instantiated from `NRHY_match<NRHY_classRoto>::matchAllOfOneClass<NRHY_classRoto>(const char *)'
h/nrhy_templateMatch.c:598:   instantiated from `NRHY_match<NRHY_classRoto>::Matchem<NRHY_classRoto>(const char *)'
h/nrhy_templateFind.h:132:   instantiated from `NRHY_find<NRHY_classRoto>::findItem<NRHY_classRoto>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classRoto>::FindItem<NRHY_classRoto>(bool, bool, bool)'
h/nrhy_templateFind.h:73:   instantiated from `NRHY_find<NRHY_classRoto>::FindItemAsThing<NRHY_classRoto>(bool, bool, bool)'
h/nrhy_templateMatch.c:2270:   instantiated from `NRHY_match<NRHY_classHome>::matchAllOfOneClass<NRHY_classHome>(const char *)'
h/nrhy_templateMatch.c:598:   instantiated from `NRHY_match<NRHY_classHome>::Matchem<NRHY_classHome>(const char *)'
h/nrhy_templateFind.h:132:   instantiated from `NRHY_find<NRHY_classHome>::findItem<NRHY_classHome>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classHome>::FindItem<NRHY_classHome>(bool, bool, bool)'
h/nrhy_templateFind.h:73:   instantiated from `NRHY_find<NRHY_classHome>::FindItemAsThing<NRHY_classHome>(bool, bool, bool)'
h/nrhy_templateMatch.c:2268:   instantiated from `NRHY_match<NRHY_classModel>::matchAllOfOneClass<NRHY_classModel>(const char *)'
h/nrhy_templateMatch.c:598:   instantiated from `NRHY_match<NRHY_classModel>::Matchem<NRHY_classModel>(const char *)'
h/nrhy_templateFind.h:132:   instantiated from `NRHY_find<NRHY_classModel>::findItem<NRHY_classModel>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classModel>::FindItem<NRHY_classModel>(bool, bool, bool)'
h/nrhy_templateFind.h:73:   instantiated from `NRHY_find<NRHY_classModel>::FindItemAsThing<NRHY_classModel>(bool, bool, bool)'
h/nrhy_templateMatch.c:2266:   instantiated from `NRHY_match<NRHY_classLight>::matchAllOfOneClass<NRHY_classLight>(const char *)'
h/nrhy_templateMatch.c:598:   instantiated from `NRHY_match<NRHY_classLight>::Matchem<NRHY_classLight>(const char *)'
h/nrhy_templateFind.h:132:   instantiated from `NRHY_find<NRHY_classLight>::findItem<NRHY_classLight>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classLight>::FindItem<NRHY_classLight>(bool, bool, bool)'
h/nrhy_templateFind.h:73:   instantiated from `NRHY_find<NRHY_classLight>::FindItemAsThing<NRHY_classLight>(bool, bool, bool)'
h/nrhy_templateMatch.c:2264:   instantiated from `NRHY_match<NRHY_classCamera>::matchAllOfOneClass<NRHY_classCamera>(const char *)'
h/nrhy_templateMatch.c:598:   instantiated from `NRHY_match<NRHY_classCamera>::Matchem<NRHY_classCamera>(const char *)'
h/nrhy_templateFind.h:132:   instantiated from `NRHY_find<NRHY_classCamera>::findItem<NRHY_classCamera>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classCamera>::FindItem<NRHY_classCamera>(bool, bool, bool)'
h/nrhy_templateFind.h:73:   instantiated from `NRHY_find<NRHY_classCamera>::FindItemAsThing<NRHY_classCamera>(bool, bool, bool)'
h/nrhy_templateMatch.c:2262:   instantiated from `NRHY_match<NRHY_classObject>::matchAllOfOneClass<NRHY_classObject>(const char *)'
h/nrhy_templateMatch.c:598:   instantiated from `NRHY_match<NRHY_classObject>::Matchem<NRHY_classObject>(const char *)'
h/nrhy_templateFind.h:132:   instantiated from `NRHY_find<NRHY_classObject>::findItem<NRHY_classObject>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classObject>::FindItem<NRHY_classObject>(bool, bool, bool)'
h/nrhy_templateFind.h:73:   instantiated from `NRHY_find<NRHY_classObject>::FindItemAsThing<NRHY_classObject>(bool, bool, bool)'
h/nrhy_templateMatch.c:2260:   instantiated from `NRHY_match<NRHY_classThing>::matchAllOfOneClass<NRHY_classThing>(const char *)'
h/nrhy_templateMatch.c:598:   instantiated from `NRHY_match<NRHY_classThing>::Matchem<NRHY_classThing>(const char *)'
h/nrhy_templateFind.h:132:   instantiated from `NRHY_find<NRHY_classThing>::findItem<NRHY_classThing>()'
h/nrhy_templateFind.h:63:   instantiated from `NRHY_find<NRHY_classThing>::FindItem<NRHY_classThing>(bool, bool, bool)'
nrhy/NRHY_Access.c:238:   instantiated from here
h/nrhy_templateFind.h:102: Internal compiler error 98.
h/nrhy_templateFind.h:102: Please submit a full bug report to `egcs-bugs@egcs.cygnus.com'.
h/nrhy_templateFind.h:102: See <URL:http://egcs.cygnus.com/faq.html#bugreport> for details. 
>How-To-Repeat:
c++ -O2 -ftemplate-depth-1024 -o NRHY_Access.o NRHY_Access.ii

>Fix:
Unknown.  We may need to rewrite this code ( probably
a good thing ) to avoid this error.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="NRHY_Access.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="NRHY_Access.ii"

IyAxICJucmh5L05SSFlfQWNjZXNzLmMiCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9zb2Z0
d2FyZS90aGFsaWEvaC9zdGR0eXBlcy5oIiAxCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAojIDEg
Ii91c3IvaW5jbHVkZS9tYXRoLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIyAx
ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog
CgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKCgogCgoKCgoKCgogCiMgMTM3ICIvdXNyL2lu
Y2x1ZGUvZmVhdHVyZXMuaCIgMwoKCiAKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIyAxOTUgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAKCgoKCgoKCgogCgoKCgogCgojIDEgIi91c3Iv
aW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgogCgoK
CgoKIAoKCgoKCgoKCiAKCgoKCiMgNzEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMwoKCiAK
CgoKCgoKCiAKCgoKIyAxMDMgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMwoKCgogCgoKCgoK
CgoKIAoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgoKCgoKIAoKCgoK
CgoKIyAyNDkgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKCgogCgoKCgoKCgoKIAoKCgoK
CiAKCiAKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzCiAKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKIyAyNzcgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKCgoK
CiMgMjcgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCmV4dGVybiAiQyIgeyAKCiAKCiMgMSAi
L3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgoKCgojIDUyICIvdXNyL2luY2x1ZGUvYml0cy9odWdlX3ZhbC5oIiAzCgoKCiAK
CiMgODcgIi91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDMKCiMgMzMgIi91c3IvaW5jbHVk
ZS9tYXRoLmgiIDIgMwoKCiAKCgoKIAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIg
MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiMgNzQgIi91c3IvaW5jbHVkZS9iaXRzL21h
dGhkZWYuaCIgMwoKCgogCgoKCiMgNDAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCgogCgoK
CgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMK
IAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCiAK
ZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGFjb3MgICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7
IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fYWNvcyAgICAgICAgICAoZG91YmxlICBfX3gpICAg
ICAgOwogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBhc2luICAgICAgICAgIChkb3VibGUgIF9f
eCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2FzaW4gICAgICAgICAgKGRvdWJsZSAg
X194KSAgICAgIDsKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgYXRhbiAgICAgICAgICAoZG91
YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19hdGFuICAgICAgICAgIChk
b3VibGUgIF9feCkgICAgICA7CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGF0YW4yICAgICAg
ICAgIChkb3VibGUgIF9feSwgZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAg
ICAgX19hdGFuMiAgICAgICAgICAoZG91YmxlICBfX3ksIGRvdWJsZSAgX194KSAgICAgIDsKCiAK
ZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGNvcyAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsg
ZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19jb3MgICAgICAgICAgKGRvdWJsZSAgX194KSAgICAg
IDsKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgc2luICAgICAgICAgIChkb3VibGUgIF9feCkg
ICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX3NpbiAgICAgICAgICAoZG91YmxlICBfX3gp
ICAgICAgOwogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICB0YW4gICAgICAgICAgKGRvdWJsZSAg
X194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fdGFuICAgICAgICAgIChkb3VibGUg
IF9feCkgICAgICA7CgoKCgoKCgogCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBjb3NoICAg
ICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2Nvc2gg
ICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKIApleHRlcm4gICBkb3VibGUgICAgICAgICAg
c2luaCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAg
X19zaW5oICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CiAKZXh0ZXJuICAgZG91YmxlICAg
ICAgICAgIHRhbmggICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAg
ICAgICAgIF9fdGFuaCAgICAgICAgICAoZG91YmxlICBfX3gpICAgICAgOwoKCiAKZXh0ZXJuICAg
ZG91YmxlICAgICAgICAgIGFjb3NoICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4g
ICBkb3VibGUgICAgICAgICBfX2Fjb3NoICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CiAK
ZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGFzaW5oICAgICAgICAgIChkb3VibGUgIF9feCkgICAg
OyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2FzaW5oICAgICAgICAgIChkb3VibGUgIF9feCkg
ICAgICA7CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGF0YW5oICAgICAgICAgIChkb3VibGUg
IF9feCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2F0YW5oICAgICAgICAgIChkb3Vi
bGUgIF9feCkgICAgICA7CgoKIAoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgZXhwICAgICAg
ICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2V4cCAgICAg
ICAgICAoZG91YmxlICBfX3gpICAgICAgOwoKCgoKCgoKCiAKZXh0ZXJuICAgZG91YmxlICAgICAg
ICAgIGZyZXhwICAgICAgICAgIChkb3VibGUgIF9feCwgaW50ICpfX2V4cG9uZW50KSAgICA7IGV4
dGVybiAgIGRvdWJsZSAgICAgICAgIF9fZnJleHAgICAgICAgICAgKGRvdWJsZSAgX194LCBpbnQg
Kl9fZXhwb25lbnQpICAgICAgOwoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgbGRleHAgICAg
ICAgICAgKGRvdWJsZSAgX194LCBpbnQgX19leHBvbmVudCkgICAgOyBleHRlcm4gICBkb3VibGUg
ICAgICAgICBfX2xkZXhwICAgICAgICAgIChkb3VibGUgIF9feCwgaW50IF9fZXhwb25lbnQpICAg
ICAgOwoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgbG9nICAgICAgICAgIChkb3VibGUgIF9f
eCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2xvZyAgICAgICAgICAoZG91YmxlICBf
X3gpICAgICAgOwoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgbG9nMTAgICAgICAgICAgKGRv
dWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fbG9nMTAgICAgICAgICAg
KGRvdWJsZSAgX194KSAgICAgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIG1vZGYgICAg
ICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgICpfX2lwdHIpICAgIDsgZXh0ZXJuICAgZG91Ymxl
ICAgICAgICAgX19tb2RmICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICAqX19pcHRyKSAg
ICAgIDsKCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBleHBtMSAgICAgICAgICAoZG91Ymxl
ICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19leHBtMSAgICAgICAgICAoZG91
YmxlICBfX3gpICAgICAgOwoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgbG9nMXAgICAgICAg
ICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fbG9nMXAgICAg
ICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGxv
Z2IgICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9f
bG9nYiAgICAgICAgICAoZG91YmxlICBfX3gpICAgICAgOwoKCgoKCgoKCgoKCiAKCiAKZXh0ZXJu
ICAgZG91YmxlICAgICAgICAgIHBvdyAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195
KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fcG93ICAgICAgICAgIChkb3VibGUgIF9f
eCwgZG91YmxlICBfX3kpICAgICAgOwoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgc3FydCAg
ICAgICAgICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19zcXJ0
ICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CgoKIApleHRlcm4gICBkb3VibGUgICAgICAg
ICAgaHlwb3QgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgOyBleHRlcm4g
ICBkb3VibGUgICAgICAgICBfX2h5cG90ICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBf
X3kpICAgICAgOwoKCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBjYnJ0ICAgICAgICAgIChk
b3VibGUgIF9feCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2NicnQgICAgICAgICAg
KGRvdWJsZSAgX194KSAgICAgIDsKCgoKIAoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgY2Vp
bCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19j
ZWlsICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CgogCmV4dGVybiAgIGRvdWJsZSAgICAg
ICAgICBmYWJzICAgICAgICAgIChkb3VibGUgIF9feCkgICAgIF9fYXR0cmlidXRlX18gKCAgICAo
X19jb25zdF9fKSAgKTsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19mYWJzICAgICAgICAgIChk
b3VibGUgIF9feCkgICAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKSAgOwoKIApl
eHRlcm4gICBkb3VibGUgICAgICAgICAgZmxvb3IgICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7
IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fZmxvb3IgICAgICAgICAgKGRvdWJsZSAgX194KSAg
ICAgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGZtb2QgICAgICAgICAgKGRvdWJsZSAg
X194LCBkb3VibGUgIF9feSkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2Ztb2QgICAg
ICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgICA7CgoKIAoKZXh0ZXJuICBpbnQg
ICAgIF9faXNpbmYgICAgICAoZG91YmxlICBfX3ZhbHVlKSAgIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCiAKZXh0ZXJuICBpbnQgICAgIF9fZmluaXRlICAgICAgKGRvdWJsZSAgX192YWx1
ZSkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKIAoKZXh0ZXJuICBpbnQgICAgIGlz
aW5mICAgICAgKGRvdWJsZSAgX192YWx1ZSkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgogCmV4dGVybiAgaW50ICAgICBmaW5pdGUgICAgICAoZG91YmxlICBfX3ZhbHVlKSAgIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiAKCgoKCgpleHRlcm4gICBkb3VibGUgICAgICAgICAg
aW5mbmFuICAgICAgICAgIChpbnQgX19lcnJvcikgICAgIF9fYXR0cmlidXRlX18gKCAgICAoX19j
b25zdF9fKSAgKTsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19pbmZuYW4gICAgICAgICAgKGlu
dCBfX2Vycm9yKSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgogCmV4
dGVybiAgIGRvdWJsZSAgICAgICAgICBkcmVtICAgICAgICAgIChkb3VibGUgIF9feCwgZG91Ymxl
ICBfX3kpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19kcmVtICAgICAgICAgIChkb3Vi
bGUgIF9feCwgZG91YmxlICBfX3kpICAgICAgOwoKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAg
IHNpZ25pZmljYW5kICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4gICBkb3VibGUg
ICAgICAgICBfX3NpZ25pZmljYW5kICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CgoKCiAK
ZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGNvcHlzaWduICAgICAgICAgIChkb3VibGUgIF9feCwg
ZG91YmxlICBfX3kpICAgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICk7IGV4dGVy
biAgIGRvdWJsZSAgICAgICAgIF9fY29weXNpZ24gICAgICAgICAgKGRvdWJsZSAgX194LCBkb3Vi
bGUgIF9feSkgICAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKSAgOwoKCgoKCgoK
CiAKZXh0ZXJuICBpbnQgICAgIF9faXNuYW4gICAgICAoZG91YmxlICBfX3ZhbHVlKSAgIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgogCmV4dGVybiAgaW50ICAgICBpc25hbiAgICAgIChk
b3VibGUgIF9fdmFsdWUpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIApleHRlcm4g
ICBkb3VibGUgICAgICAgICAgajAgICAgICAgICAgKGRvdWJsZSApICAgIDsgZXh0ZXJuICAgZG91
YmxlICAgICAgICAgX19qMCAgICAgICAgICAoZG91YmxlICkgICAgICA7CmV4dGVybiAgIGRvdWJs
ZSAgICAgICAgICBqMSAgICAgICAgICAoZG91YmxlICkgICAgOyBleHRlcm4gICBkb3VibGUgICAg
ICAgICBfX2oxICAgICAgICAgIChkb3VibGUgKSAgICAgIDsKZXh0ZXJuICAgZG91YmxlICAgICAg
ICAgIGpuICAgICAgICAgIChpbnQsIGRvdWJsZSApICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAg
ICAgX19qbiAgICAgICAgICAoaW50LCBkb3VibGUgKSAgICAgIDsKZXh0ZXJuICAgZG91YmxlICAg
ICAgICAgIHkwICAgICAgICAgIChkb3VibGUgKSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAg
IF9feTAgICAgICAgICAgKGRvdWJsZSApICAgICAgOwpleHRlcm4gICBkb3VibGUgICAgICAgICAg
eTEgICAgICAgICAgKGRvdWJsZSApICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX195MSAg
ICAgICAgICAoZG91YmxlICkgICAgICA7CmV4dGVybiAgIGRvdWJsZSAgICAgICAgICB5biAgICAg
ICAgICAoaW50LCBkb3VibGUgKSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9feW4gICAg
ICAgICAgKGludCwgZG91YmxlICkgICAgICA7CgoKCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAg
ICBlcmYgICAgICAgICAgKGRvdWJsZSApICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19l
cmYgICAgICAgICAgKGRvdWJsZSApICAgICAgOwpleHRlcm4gICBkb3VibGUgICAgICAgICAgZXJm
YyAgICAgICAgICAoZG91YmxlICkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2VyZmMg
ICAgICAgICAgKGRvdWJsZSApICAgICAgOwpleHRlcm4gICBkb3VibGUgICAgICAgICAgbGdhbW1h
ICAgICAgICAgIChkb3VibGUgKSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fbGdhbW1h
ICAgICAgICAgIChkb3VibGUgKSAgICAgIDsKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIHRnYW1t
YSAgICAgICAgICAoZG91YmxlICkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX3RnYW1t
YSAgICAgICAgICAoZG91YmxlICkgICAgICA7CgoKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAg
IGdhbW1hICAgICAgICAgIChkb3VibGUgKSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9f
Z2FtbWEgICAgICAgICAgKGRvdWJsZSApICAgICAgOwoKCgogCgoKZXh0ZXJuICAgZG91YmxlICAg
ICAgICAgIGxnYW1tYV9yICAgICAgICAgICAgICAoZG91YmxlICwgaW50ICpfX3NpZ25nYW1wKSAg
ICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fbGdhbW1hX3IgICAgICAgICAgICAgIChkb3Vi
bGUgLCBpbnQgKl9fc2lnbmdhbXApICAgICAgOwoKCgoKIAoKZXh0ZXJuICAgZG91YmxlICAgICAg
ICAgIHJpbnQgICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAg
ICAgIF9fcmludCAgICAgICAgICAoZG91YmxlICBfX3gpICAgICAgOwoKIApleHRlcm4gICBkb3Vi
bGUgICAgICAgICAgbmV4dGFmdGVyICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX3kp
ICAgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICk7IGV4dGVybiAgIGRvdWJsZSAg
ICAgICAgIF9fbmV4dGFmdGVyICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX3kpICAg
ICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICkgIDsKCgoKCiAKZXh0ZXJuICAgZG91
YmxlICAgICAgICAgIHJlbWFpbmRlciAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195
KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fcmVtYWluZGVyICAgICAgICAgIChkb3Vi
bGUgIF9feCwgZG91YmxlICBfX3kpICAgICAgOwoKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAg
IHNjYWxiICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX24pICAgIDsgZXh0ZXJuICAg
ZG91YmxlICAgICAgICAgX19zY2FsYiAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX19u
KSAgICAgIDsKCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBzY2FsYm4gICAgICAgICAgKGRv
dWJsZSAgX194LCBpbnQgX19uKSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fc2NhbGJu
ICAgICAgICAgIChkb3VibGUgIF9feCwgaW50IF9fbikgICAgICA7CgogCmV4dGVybiAgIGludCAg
ICAgICAgaWxvZ2IgICAgICAgIChkb3VibGUgIF9feCkgICA7IGV4dGVybiAgIGludCAgICAgICAg
X19pbG9nYiAgICAgICAgKGRvdWJsZSAgX194KSAgICA7CgoKIyAzMzYgIi91c3IvaW5jbHVkZS9i
aXRzL21hdGhjYWxscy5oIiAzCgojIDYzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgoKCgoK
CiAKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIAoK
CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCiAKZXh0
ZXJuICAgZmxvYXQgICAgICAgICAgYWNvc2YgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0
ZXJuICAgZmxvYXQgICAgICAgICBfX2Fjb3NmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsK
IApleHRlcm4gICBmbG9hdCAgICAgICAgICBhc2luZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAg
OyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fYXNpbmYgICAgICAgICAoZmxvYXQgICBfX3gpICAg
ICAgOwogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGF0YW5mICAgICAgICAgKGZsb2F0ICAgX194
KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19hdGFuZiAgICAgICAgIChmbG9hdCAgIF9f
eCkgICAgICA7CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgYXRhbjJmICAgICAgICAgKGZsb2F0
ICAgX195LCBmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fYXRhbjJm
ICAgICAgICAgKGZsb2F0ICAgX195LCBmbG9hdCAgIF9feCkgICAgICA7CgogCmV4dGVybiAgIGZs
b2F0ICAgICAgICAgIGNvc2YgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxv
YXQgICAgICAgICBfX2Nvc2YgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAgOwogCmV4dGVybiAg
IGZsb2F0ICAgICAgICAgIHNpbmYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAg
ZmxvYXQgICAgICAgICBfX3NpbmYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAgOwogCmV4dGVy
biAgIGZsb2F0ICAgICAgICAgIHRhbmYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJu
ICAgZmxvYXQgICAgICAgICBfX3RhbmYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAgOwoKCgoK
CgoKIAoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBjb3NoZiAgICAgICAgIChmbG9hdCAgIF9f
eCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fY29zaGYgICAgICAgICAoZmxvYXQgICBf
X3gpICAgICAgOwogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHNpbmhmICAgICAgICAgKGZsb2F0
ICAgX194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19zaW5oZiAgICAgICAgIChmbG9h
dCAgIF9feCkgICAgICA7CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgdGFuaGYgICAgICAgICAo
ZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3RhbmhmICAgICAgICAg
KGZsb2F0ICAgX194KSAgICAgIDsKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGFjb3NoZiAg
ICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fYWNvc2hm
ICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBh
c2luaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBf
X2FzaW5oZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CiAKZXh0ZXJuICAgZmxvYXQgICAg
ICAgICAgYXRhbmhmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAg
ICAgICAgX19hdGFuaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAgOwoKCiAKCiAKZXh0ZXJu
ICAgZmxvYXQgICAgICAgICAgZXhwZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4g
ICBmbG9hdCAgICAgICAgIF9fZXhwZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CgoKCgoK
CgoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBmcmV4cGYgICAgICAgICAoZmxvYXQgICBfX3gs
IGludCAqX19leHBvbmVudCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fZnJleHBmICAg
ICAgICAgKGZsb2F0ICAgX194LCBpbnQgKl9fZXhwb25lbnQpICAgICAgOwoKIApleHRlcm4gICBm
bG9hdCAgICAgICAgICBsZGV4cGYgICAgICAgICAoZmxvYXQgICBfX3gsIGludCBfX2V4cG9uZW50
KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19sZGV4cGYgICAgICAgICAoZmxvYXQgICBf
X3gsIGludCBfX2V4cG9uZW50KSAgICAgIDsKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgbG9n
ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbG9n
ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAg
IGxvZzEwZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAg
IF9fbG9nMTBmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKCiAKZXh0ZXJuICAgZmxvYXQg
ICAgICAgICAgbW9kZmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgKl9faXB0cikgICAg
OyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbW9kZmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZs
b2F0ICAgKl9faXB0cikgICAgICA7CgoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBleHBtMWYg
ICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2V4cG0x
ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAg
IGxvZzFwZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAg
IF9fbG9nMXBmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKCiAKZXh0ZXJuICAgZmxvYXQg
ICAgICAgICAgbG9nYmYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQg
ICAgICAgICBfX2xvZ2JmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKCgoKCgoKCgoKCgog
CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHBvd2YgICAgICAgICAoZmxvYXQgICBfX3gsIGZs
b2F0ICAgX195KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19wb3dmICAgICAgICAgKGZs
b2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAg
IHNxcnRmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAg
X19zcXJ0ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CgoKIApleHRlcm4gICBmbG9hdCAg
ICAgICAgICBoeXBvdGYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICA7IGV4
dGVybiAgIGZsb2F0ICAgICAgICAgX19oeXBvdGYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0
ICAgX195KSAgICAgIDsKCgoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBjYnJ0ZiAgICAgICAg
IChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fY2JydGYgICAgICAg
ICAoZmxvYXQgICBfX3gpICAgICAgOwoKCgogCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGNl
aWxmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19j
ZWlsZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAg
ICAgIGZhYnNmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChf
X2NvbnN0X18pICApOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fZmFic2YgICAgICAgICAoZmxv
YXQgICBfX3gpICAgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICkgIDsKCiAKZXh0
ZXJuICAgZmxvYXQgICAgICAgICAgZmxvb3JmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4
dGVybiAgIGZsb2F0ICAgICAgICAgX19mbG9vcmYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAg
OwoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBmbW9kZiAgICAgICAgIChmbG9hdCAgIF9feCwg
ZmxvYXQgICBfX3kpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2Ztb2RmICAgICAgICAg
KGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgICA7CgoKIAoKZXh0ZXJuICBpbnQgICAgX19p
c2luZmYgICAgIChmbG9hdCAgIF9fdmFsdWUpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKIApleHRlcm4gIGludCAgICBfX2Zpbml0ZWYgICAgIChmbG9hdCAgIF9fdmFsdWUpICAgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCiAKCmV4dGVybiAgaW50ICAgIGlzaW5mZiAgICAg
KGZsb2F0ICAgX192YWx1ZSkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgogCmV4dGVy
biAgaW50ICAgIGZpbml0ZWYgICAgIChmbG9hdCAgIF9fdmFsdWUpICAgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKIAoKCgoKCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGluZm5hbmYgICAg
ICAgICAoaW50IF9fZXJyb3IpICAgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICk7
IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19pbmZuYW5mICAgICAgICAgKGludCBfX2Vycm9yKSAg
ICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgogCmV4dGVybiAgIGZsb2F0
ICAgICAgICAgIGRyZW1mICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgOyBl
eHRlcm4gICBmbG9hdCAgICAgICAgIF9fZHJlbWYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0
ICAgX195KSAgICAgIDsKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHNpZ25pZmljYW5kZiAg
ICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fc2lnbmlm
aWNhbmRmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKCgoKIApleHRlcm4gICBmbG9hdCAg
ICAgICAgICBjb3B5c2lnbmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICAg
X19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApOyBleHRlcm4gICBmbG9hdCAgICAgICAg
IF9fY29weXNpZ25mICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgIF9fYXR0
cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKSAgOwoKCgoKCgoKCiAKZXh0ZXJuICBpbnQgICAg
X19pc25hbmYgICAgIChmbG9hdCAgIF9fdmFsdWUpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKCiAKZXh0ZXJuICBpbnQgICAgaXNuYW5mICAgICAoZmxvYXQgICBfX3ZhbHVlKSAgIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgajBm
ICAgICAgICAgKGZsb2F0ICApICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2owZiAgICAg
ICAgIChmbG9hdCAgKSAgICAgIDsKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgajFmICAgICAgICAg
KGZsb2F0ICApICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2oxZiAgICAgICAgIChmbG9h
dCAgKSAgICAgIDsKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgam5mICAgICAgICAgKGludCwgZmxv
YXQgICkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fam5mICAgICAgICAgKGludCwgZmxv
YXQgICkgICAgICA7CmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHkwZiAgICAgICAgIChmbG9hdCAg
KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX195MGYgICAgICAgICAoZmxvYXQgICkgICAg
ICA7CmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHkxZiAgICAgICAgIChmbG9hdCAgKSAgICA7IGV4
dGVybiAgIGZsb2F0ICAgICAgICAgX195MWYgICAgICAgICAoZmxvYXQgICkgICAgICA7CmV4dGVy
biAgIGZsb2F0ICAgICAgICAgIHluZiAgICAgICAgIChpbnQsIGZsb2F0ICApICAgIDsgZXh0ZXJu
ICAgZmxvYXQgICAgICAgICBfX3luZiAgICAgICAgIChpbnQsIGZsb2F0ICApICAgICAgOwoKCgoK
IApleHRlcm4gICBmbG9hdCAgICAgICAgICBlcmZmICAgICAgICAgKGZsb2F0ICApICAgIDsgZXh0
ZXJuICAgZmxvYXQgICAgICAgICBfX2VyZmYgICAgICAgICAoZmxvYXQgICkgICAgICA7CmV4dGVy
biAgIGZsb2F0ICAgICAgICAgIGVyZmNmICAgICAgICAgKGZsb2F0ICApICAgIDsgZXh0ZXJuICAg
ZmxvYXQgICAgICAgICBfX2VyZmNmICAgICAgICAgKGZsb2F0ICApICAgICAgOwpleHRlcm4gICBm
bG9hdCAgICAgICAgICBsZ2FtbWFmICAgICAgICAgKGZsb2F0ICApICAgIDsgZXh0ZXJuICAgZmxv
YXQgICAgICAgICBfX2xnYW1tYWYgICAgICAgICAoZmxvYXQgICkgICAgICA7CmV4dGVybiAgIGZs
b2F0ICAgICAgICAgIHRnYW1tYWYgICAgICAgICAoZmxvYXQgICkgICAgOyBleHRlcm4gICBmbG9h
dCAgICAgICAgIF9fdGdhbW1hZiAgICAgICAgIChmbG9hdCAgKSAgICAgIDsKCgoKIApleHRlcm4g
ICBmbG9hdCAgICAgICAgICBnYW1tYWYgICAgICAgICAoZmxvYXQgICkgICAgOyBleHRlcm4gICBm
bG9hdCAgICAgICAgIF9fZ2FtbWFmICAgICAgICAgKGZsb2F0ICApICAgICAgOwoKCgogCgoKZXh0
ZXJuICAgZmxvYXQgICAgICAgICAgbGdhbW1hZl9yICAgICAgICAgICAgKGZsb2F0ICAsIGludCAq
X19zaWduZ2FtcCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbGdhbW1hZl9yICAgICAg
ICAgICAgKGZsb2F0ICAsIGludCAqX19zaWduZ2FtcCkgICAgICA7CgoKCgogCgpleHRlcm4gICBm
bG9hdCAgICAgICAgICByaW50ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBm
bG9hdCAgICAgICAgIF9fcmludGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAgOwoKIApleHRl
cm4gICBmbG9hdCAgICAgICAgICBuZXh0YWZ0ZXJmICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9h
dCAgIF9feSkgICAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKTsgZXh0ZXJuICAg
ZmxvYXQgICAgICAgICBfX25leHRhZnRlcmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAg
X195KSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgoKCgogCmV4dGVy
biAgIGZsb2F0ICAgICAgICAgIHJlbWFpbmRlcmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0
ICAgX195KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19yZW1haW5kZXJmICAgICAgICAg
KGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgICA7CgoKIApleHRlcm4gICBmbG9hdCAgICAg
ICAgICBzY2FsYmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX19uKSAgICA7IGV4dGVy
biAgIGZsb2F0ICAgICAgICAgX19zY2FsYmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAg
X19uKSAgICAgIDsKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHNjYWxibmYgICAgICAgICAo
ZmxvYXQgICBfX3gsIGludCBfX24pICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3NjYWxi
bmYgICAgICAgICAoZmxvYXQgICBfX3gsIGludCBfX24pICAgICAgOwoKIApleHRlcm4gICBpbnQg
ICAgICAgaWxvZ2JmICAgICAgIChmbG9hdCAgIF9feCkgICA7IGV4dGVybiAgIGludCAgICAgICBf
X2lsb2diZiAgICAgICAoZmxvYXQgICBfX3gpICAgIDsKCgojIDMzNiAiL3Vzci9pbmNsdWRlL2Jp
dHMvbWF0aGNhbGxzLmgiIDMKCiMgODIgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCgoKIyAx
MDMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKCgoKCgoKCgoKIApleHRlcm4gaW50IHNpZ25nYW07
CgoKCiAKIyAyMzIgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKCgoKIAp0eXBlZGVmIGVudW0Kewog
IF9JRUVFXyA9IC0xLAkgCiAgX1NWSURfLAkgCiAgX1hPUEVOXywJIAogIF9QT1NJWF8sCiAgX0lT
T0NfCSAKfSBfTElCX1ZFUlNJT05fVFlQRTsKCiAKCgpleHRlcm4gX0xJQl9WRVJTSU9OX1RZUEUg
X0xJQl9WRVJTSU9OOwoKCgoKIAoKCgoKCnN0cnVjdCBfX2V4Y2VwdGlvbgoKCgogIHsKICAgIGlu
dCB0eXBlOwogICAgY2hhciAqbmFtZTsKICAgIGRvdWJsZSBhcmcxOwogICAgZG91YmxlIGFyZzI7
CiAgICBkb3VibGUgcmV0dmFsOwogIH07CgoKZXh0ZXJuIGludCBtYXRoZXJyICAoc3RydWN0IF9f
ZXhjZXB0aW9uICpfX2V4YykgIHRocm93ICgpICA7CgoKCgoKCiAKCgoKCgoKCiAKCiMgMSAiL3Vz
ci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvZmxv
YXQuaCIgMSAzCiAKCgogCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAK
CgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCgogICAgCgoKICAgIAoKCiAgICAK
CgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgoKICAgIAoKCiAgICAK
CgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKCgojIDI4
OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKIyAyOTkgIi91c3IvaW5jbHVkZS9tYXRoLmgi
IDMKCgoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCiMgMzM2ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAz
CgoKCiAKCgoKCgoKIAoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDEgMwog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA1OSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0
aGlubGluZS5oIiAzCgoKCgoKCgoKCgoKX19pbmxpbmUgICAgZmxvYXQgCSBfX2NvcHlzaWduZiAg
KCAgZmxvYXQgIF9feCwgICBmbG9hdCAgX195KQl7CSAgZmxvYXQgIF9fejsJX19hc20gKCJjcHlz
ICUxLCAlMiwgJTAiIDogIj1mIiAoX196KSA6ICJmIiAoX195KSwgImYiIChfX3gpKTsJcmV0dXJu
IF9fejsJfSAKX19pbmxpbmUgICAgZmxvYXQgCSBjb3B5c2lnbmYgICggIGZsb2F0ICBfX3gsICAg
ZmxvYXQgIF9feSkJewkgIGZsb2F0ICBfX3o7CV9fYXNtICgiY3B5cyAlMSwgJTIsICUwIiA6ICI9
ZiIgKF9feikgOiAiZiIgKF9feSksICJmIiAoX194KSk7CXJldHVybiBfX3o7CX0gCl9faW5saW5l
ICAgIGRvdWJsZSAJIF9fY29weXNpZ24gICggIGRvdWJsZSAgX194LCAgIGRvdWJsZSAgX195KQl7
CSAgZG91YmxlICBfX3o7CV9fYXNtICgiY3B5cyAlMSwgJTIsICUwIiA6ICI9ZiIgKF9feikgOiAi
ZiIgKF9feSksICJmIiAoX194KSk7CXJldHVybiBfX3o7CX0gCl9faW5saW5lICAgIGRvdWJsZSAJ
IGNvcHlzaWduICAoICBkb3VibGUgIF9feCwgICBkb3VibGUgIF9feSkJewkgIGRvdWJsZSAgX196
OwlfX2FzbSAoImNweXMgJTEsICUyLCAlMCIgOiAiPWYiIChfX3opIDogImYiIChfX3kpLCAiZiIg
KF9feCkpOwlyZXR1cm4gX196Owl9IAoKCgoKCl9faW5saW5lICBmbG9hdCBfX2ZhYnNmIChmbG9h
dCBfX3gpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZiAoX194KTsgfQpfX2lubGluZSAgZmxvYXQg
ZmFic2YgKGZsb2F0IF9feCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnNmIChfX3gpOyB9Cl9faW5s
aW5lICBkb3VibGUgX19mYWJzIChkb3VibGUgX194KSB7IHJldHVybiBfX2J1aWx0aW5fZmFicyAo
X194KTsgfQpfX2lubGluZSAgZG91YmxlIGZhYnMgKGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9fYnVp
bHRpbl9mYWJzIChfX3gpOyB9CiMgOTkgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIg
MwoKCgogCgoKCl9faW5saW5lICBmbG9hdApfX2Zsb29yZiAoZmxvYXQgX194KQp7CiAgIAogIGlm
IChfX3ggIT0gMCAmJiBmYWJzZiAoX194KSA8IDE2Nzc3MjE2LjBmKSAgIAogICAgewogICAgICAg
CgoKCgogICAgICBmbG9hdCBfX3RtcDEsIF9fdG1wMjsKCiAgICAgIF9fYXNtICgiY3Z0c3QvcyAl
MywlMlxuXHQiCgoKCgkgICAgICJjdnR0cS9zdm0gJTIsJTFcblx0IgoKCSAgICAgImN2dHF0L20g
JTEsJTBcblx0IgoJICAgICA6ICI9ZiIoX194KSwgIj0mZiIoX190bXAxKSwgIj0mZiIoX190bXAy
KQoJICAgICA6ICJmIihfX3gpKTsKICAgIH0KICByZXR1cm4gX194Owp9CgpfX2lubGluZSAgZG91
YmxlCl9fZmxvb3IgKGRvdWJsZSBfX3gpCnsKICBpZiAoX194ICE9IDAgJiYgZmFicyAoX194KSA8
IDkwMDcxOTkyNTQ3NDA5OTIuMCkgICAKICAgIHsKICAgICAgZG91YmxlIF9fdG1wMTsKICAgICAg
X19hc20gKAoKCgoJICAgICAiY3Z0dHEvc3ZtICUyLCUxXG5cdCIKCgkgICAgICJjdnRxdC9tICUx
LCUwXG5cdCIKCSAgICAgOiAiPWYiKF9feCksICI9JmYiKF9fdG1wMSkKCSAgICAgOiAiZiIoX194
KSk7CiAgICB9CiAgcmV0dXJuIF9feDsKfQoKX19pbmxpbmUgIGZsb2F0IGZsb29yZiAoZmxvYXQg
X194KSB7IHJldHVybiBfX2Zsb29yZihfX3gpOyB9Cl9faW5saW5lICBkb3VibGUgZmxvb3IgKGRv
dWJsZSBfX3gpIHsgcmV0dXJuIF9fZmxvb3IoX194KTsgfQoKCl9faW5saW5lICBmbG9hdCBfX2Zk
aW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkKewogIHJldHVybiBfX3ggPCBfX3kgPyAwLjBmIDog
X194IC0gX195Owp9CgpfX2lubGluZSAgZmxvYXQgZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195
KQp7CiAgcmV0dXJuIF9feCA8IF9feSA/IDAuMGYgOiBfX3ggLSBfX3k7Cn0KCl9faW5saW5lICBk
b3VibGUgX19mZGltIChkb3VibGUgX194LCBkb3VibGUgX195KQp7CiAgcmV0dXJuIF9feCA8IF9f
eSA/IDAuMCA6IF9feCAtIF9feTsKfQoKX19pbmxpbmUgIGRvdWJsZSBmZGltIChkb3VibGUgX194
LCBkb3VibGUgX195KQp7CiAgcmV0dXJuIF9feCA8IF9feSA/IDAuMCA6IF9feCAtIF9feTsKfQoj
IDM0OCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKCgojIDQwNyAiL3Vzci9pbmNsdWRlL21h
dGguaCIgMwoKCn0gCgoKCiMgMjQgIi9zb2Z0d2FyZS90aGFsaWEvaC9zdGR0eXBlcy5oIiAyCgoj
IDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK
CgogCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIu
OTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2Mt
bGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoK
CgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51
eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoK
CgoKCgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQt
bGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIGxvbmcgdW5zaWduZWQgaW50IHNpemVfdDsK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyODMgIi91
c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0
ZGRlZi5oIiAzCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxp
bnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiMgMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKZXh0ZXJuICJDIiB7IAoK
CgoKIAp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwkJCSAKICAgIGludCByZW07CQkJ
IAogIH0gZGl2X3Q7CgogCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CQkg
CiAgICBsb25nIGludCByZW07CQkgCiAgfSBsZGl2X3Q7CgoKCiMgNjUgIi91c3IvaW5jbHVkZS9z
dGRsaWIuaCIgMwoKCgogCgoKCiAKCgoKCgogCgpleHRlcm4gc2l6ZV90IF9fY3R5cGVfZ2V0X21i
X2N1cl9tYXggICh2b2lkKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiBkb3VibGUgYXRvZiAgKF9f
Y29uc3QgY2hhciAqX19ucHRyKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gaW50IGF0b2kgIChfX2Nv
bnN0IGNoYXIgKl9fbnB0cikgIHRocm93ICgpICA7CiAKZXh0ZXJuIGxvbmcgaW50IGF0b2wgIChf
X2NvbnN0IGNoYXIgKl9fbnB0cikgIHRocm93ICgpICA7CgoKIApfX2V4dGVuc2lvbl9fIGV4dGVy
biBsb25nIGxvbmcgaW50IGF0b2xsICAoX19jb25zdCBjaGFyICpfX25wdHIpICB0aHJvdyAoKSAg
OwoKCiAKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgIChfX2NvbnN0IGNoYXIgKiAgIF9fbnB0ciwKCQkJ
ICAgY2hhciAqKiAgIF9fZW5kcHRyKSAgdGhyb3cgKCkgIDsKCgoKCgoKCgoKCiAKZXh0ZXJuIGxv
bmcgaW50IHN0cnRvbCAgKF9fY29uc3QgY2hhciAqICAgX19ucHRyLAoJCQkgICAgIGNoYXIgKiog
ICBfX2VuZHB0ciwgaW50IF9fYmFzZSkgIHRocm93ICgpICA7CiAKZXh0ZXJuIHVuc2lnbmVkIGxv
bmcgaW50IHN0cnRvdWwgIChfX2NvbnN0IGNoYXIgKiAgIF9fbnB0ciwKCQkJCSAgICAgICBjaGFy
ICoqICAgX19lbmRwdHIsCgkJCQkgICAgICAgaW50IF9fYmFzZSkgIHRocm93ICgpICA7CgoKIApf
X2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAgKF9fY29uc3QgY2hhciAq
ICAgX19ucHRyLAoJCQkJICBjaGFyICoqICAgX19lbmRwdHIsIGludCBfX2Jhc2UpICB0aHJvdyAo
KSAgOwogCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91
cSAgKF9fY29uc3QgY2hhciAqICAgX19ucHRyLAoJCQkJCSAgICBjaGFyICoqICAgX19lbmRwdHIs
CgkJCQkJICAgIGludCBfX2Jhc2UpICB0aHJvdyAoKSAgOwoKCgogCgogCl9fZXh0ZW5zaW9uX18K
ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAgKF9fY29uc3QgY2hhciAqICAgX19ucHRyLAoJ
CQkJICAgY2hhciAqKiAgIF9fZW5kcHRyLCBpbnQgX19iYXNlKSAgdGhyb3cgKCkgIDsKIApfX2V4
dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsICAoX19jb25z
dCBjaGFyICogICBfX25wdHIsCgkJCQkJICAgICBjaGFyICoqICAgX19lbmRwdHIsCgkJCQkJICAg
ICBpbnQgX19iYXNlKSAgdGhyb3cgKCkgIDsKCgoKIyAxOTAgIi91c3IvaW5jbHVkZS9zdGRsaWIu
aCIgMwoKCgogCgoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9pbnRlcm5hbCAgKF9fY29uc3QgY2hh
ciAqICAgX19ucHRyLAoJCQkJICAgICAgY2hhciAqKiAgIF9fZW5kcHRyLAoJCQkJICAgICAgaW50
IF9fZ3JvdXApICB0aHJvdyAoKSAgOwpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgIChf
X2NvbnN0IGNoYXIgKiAgIF9fbnB0ciwKCQkJCSAgICAgY2hhciAqKiAgIF9fZW5kcHRyLCBpbnQg
X19ncm91cCkgIHRocm93ICgpICA7CmV4dGVybiBsb25nIGRvdWJsZSAgX19zdHJ0b2xkX2ludGVy
bmFsICAoX19jb25zdCBjaGFyICoKCQkJCQkJICBfX25wdHIsCgkJCQkJCWNoYXIgKiogICBfX2Vu
ZHB0ciwKCQkJCQkJaW50IF9fZ3JvdXApICB0aHJvdyAoKSAgOwoKZXh0ZXJuIGxvbmcgaW50IF9f
c3RydG9sX2ludGVybmFsICAoX19jb25zdCBjaGFyICogICBfX25wdHIsCgkJCQkJY2hhciAqKiAg
IF9fZW5kcHRyLAoJCQkJCWludCBfX2Jhc2UsIGludCBfX2dyb3VwKSAgdGhyb3cgKCkgIDsKCgoK
ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9pbnRlcm5hbCAgKF9fY29uc3QgY2hh
ciAqCgkJCQkJCSAgICBfX25wdHIsCgkJCQkJCSAgY2hhciAqKiAgIF9fZW5kcHRyLAoJCQkJCQkg
IGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSAgdGhyb3cgKCkgIDsKCgoKCl9fZXh0ZW5zaW9uX18K
ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2ludGVybmFsICAoX19jb25zdCBjaGFyICog
ICBfX25wdHIsCgkJCQkJICAgICAgY2hhciAqKiAgIF9fZW5kcHRyLAoJCQkJCSAgICAgIGludCBf
X2Jhc2UsIGludCBfX2dyb3VwKSAgdGhyb3cgKCkgIDsKCgoKX19leHRlbnNpb25fXwpleHRlcm4g
dW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsICAoX19jb25zdCBjaGFy
ICoKCQkJCQkJCSAgX19ucHRyLAoJCQkJCQkJY2hhciAqKgoJCQkJCQkJICBfX2VuZHB0ciwKCQkJ
CQkJCWludCBfX2Jhc2UsCgkJCQkJCQlpbnQgX19ncm91cCkgIHRocm93ICgpICA7CgoKCgoKCiAK
CmV4dGVybiBfX2lubGluZSBkb3VibGUKc3RydG9kIChfX2NvbnN0IGNoYXIgKiAgIF9fbnB0ciwg
Y2hhciAqKiAgIF9fZW5kcHRyKSB0aHJvdyAoKSAKewogIHJldHVybiBfX3N0cnRvZF9pbnRlcm5h
bCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CnN0cnRv
bCAoX19jb25zdCBjaGFyICogICBfX25wdHIsIGNoYXIgKiogICBfX2VuZHB0ciwKCWludCBfX2Jh
c2UpIHRocm93ICgpIAp7CiAgcmV0dXJuIF9fc3RydG9sX2ludGVybmFsIChfX25wdHIsIF9fZW5k
cHRyLCBfX2Jhc2UsIDApOwp9CmV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGludApzdHJ0
b3VsIChfX2NvbnN0IGNoYXIgKiAgIF9fbnB0ciwgY2hhciAqKiAgIF9fZW5kcHRyLAoJIGludCBf
X2Jhc2UpIHRocm93ICgpIAp7CiAgcmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBf
X2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKIyAyNzEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoK
CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19j
b25zdCBjaGFyICogICBfX25wdHIsIGNoYXIgKiogICBfX2VuZHB0ciwKCWludCBfX2Jhc2UpIHRo
cm93ICgpIAp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwg
X19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25n
IGxvbmcgaW50CnN0cnRvdXEgKF9fY29uc3QgY2hhciAqICAgX19ucHRyLCBjaGFyICoqICAgX19l
bmRwdHIsCgkgaW50IF9fYmFzZSkgdGhyb3cgKCkgCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRl
cm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCgpfX2V4dGVuc2lvbl9fIGV4
dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvbGwgKF9fY29uc3QgY2hhciAqICAgX19u
cHRyLCBjaGFyICoqICAgX19lbmRwdHIsCgkgaW50IF9fYmFzZSkgdGhyb3cgKCkgCnsKICByZXR1
cm4gX19zdHJ0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9f
ZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91
bGwgKF9fY29uc3QgY2hhciAqICAgX19ucHRyLCBjaGFyICoqICAgX19lbmRwdHIsCgkgIGludCBf
X2Jhc2UpIHRocm93ICgpIAp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwg
X19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgpleHRlcm4gX19pbmxpbmUgZG91YmxlCmF0b2YgKF9f
Y29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSAKewogIHJldHVybiBzdHJ0b2QgKF9fbnB0ciwg
KGNoYXIgKiopIF9fbnVsbCApOwp9CmV4dGVybiBfX2lubGluZSBpbnQKYXRvaSAoX19jb25zdCBj
aGFyICpfX25wdHIpIHRocm93ICgpIAp7CiAgcmV0dXJuIChpbnQpIHN0cnRvbCAoX19ucHRyLCAo
Y2hhciAqKikgX19udWxsICwgMTApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludAphdG9sIChf
X2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgCnsKICByZXR1cm4gc3RydG9sIChfX25wdHIs
IChjaGFyICoqKSBfX251bGwgLCAxMCk7Cn0KCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGlu
ZSBsb25nIGxvbmcgaW50CmF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgCnsK
ICByZXR1cm4gc3RydG9sbCAoX19ucHRyLCAoY2hhciAqKikgX19udWxsICwgMTApOwp9CgoKCgoK
IAoKCmV4dGVybiBjaGFyICpsNjRhICAobG9uZyBpbnQgX19uKSAgdGhyb3cgKCkgIDsKCiAKZXh0
ZXJuIGxvbmcgaW50IGE2NGwgIChfX2NvbnN0IGNoYXIgKl9fcykgIHRocm93ICgpICA7CgoKIyAx
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CgoKCmV4dGVybiAiQyIgeyAKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiAK
CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1y
ZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoK
IyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2lu
Y2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxp
Yi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgog
CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91c3IvbGliL2dj
Yy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2Nz
LTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCiMgMjcxICIvdXNyL2xp
Yi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYu
aCIgMwoKCiMgMjgzICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIu
OTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGli
L2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAy
IDMKCgogCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBz
aG9ydCBpbnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVm
IHVuc2lnbmVkIGxvbmcgaW50IF9fdV9sb25nOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9f
dV9xdWFkX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19xdWFkX3Q7CnR5cGVkZWYgc2lnbmVkIGNoYXIg
X19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVk
IHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2
X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9f
dWludDMyX3Q7CnR5cGVkZWYgc2lnbmVkIGxvbmcgaW50IF9faW50NjRfdDsKdHlwZWRlZiB1bnNp
Z25lZCBsb25nIGludCBfX3VpbnQ2NF90Owp0eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0
eXBlZGVmIF9fdWludDY0X3QgX19kZXZfdDsJCSAKdHlwZWRlZiBfX3VpbnQzMl90IF9fdWlkX3Q7
CQkgCnR5cGVkZWYgX191aW50MzJfdCBfX2dpZF90OwkJIAp0eXBlZGVmIF9fdWludDMyX3QgX19p
bm9fdDsJCSAKdHlwZWRlZiBfX3VpbnQ2NF90IF9faW5vNjRfdDsJCSAKdHlwZWRlZiBfX3VpbnQz
Ml90IF9fbW9kZV90OwkJIAp0eXBlZGVmIF9fdWludDMyX3QgX19ubGlua190OyAJCSAKdHlwZWRl
ZiBfX2ludDY0X3QgIF9fb2ZmX3Q7CQkgCnR5cGVkZWYgX19pbnQ2NF90ICBfX29mZjY0X3Q7CQkg
CnR5cGVkZWYgX19pbnQ2NF90ICBfX2xvZmZfdDsJCSAKdHlwZWRlZiBfX2ludDMyX3QgIF9fcGlk
X3Q7CQkgCnR5cGVkZWYgX19pbnQ2NF90ICBfX3NzaXplX3Q7CQkgCnR5cGVkZWYgX19pbnQ2NF90
ICBfX3JsaW1fdDsJCSAKdHlwZWRlZiBfX2ludDY0X3QgIF9fcmxpbTY0X3Q7CQkgCnR5cGVkZWYg
X191aW50MzJfdCAgX19ibGtjbnRfdDsJCSAKdHlwZWRlZiBfX3VpbnQ2NF90ICBfX2Jsa2NudDY0
X3Q7CSAKdHlwZWRlZiBfX2ludDMyX3QgX19mc2Jsa2NudF90OwkJIAp0eXBlZGVmIF9faW50NjRf
dCBfX2ZzYmxrY250NjRfdDsJIAp0eXBlZGVmIF9fdWludDMyX3QgX19mc2ZpbGNudF90OwkgCnR5
cGVkZWYgX191aW50NjRfdCBfX2ZzZmlsY250NjRfdDsJIAp0eXBlZGVmIF9fdWludDMyX3QgX19p
ZF90OwkJIAoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRf
dDsJCQkJIAoKIAp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CQkJIAp0eXBlZGVmIGNoYXIgKl9fY2Fk
ZHJfdDsJCSAKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3
YmxrX3Q7CQkgCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190Owp0eXBlZGVmIGludCBfX2tleV90
OwkJCSAKCiAKdHlwZWRlZiBpbnQgX19pcGNfcGlkX3Q7CgogCnR5cGVkZWYgdW5zaWduZWQgbG9u
ZyBpbnQgX19mZF9tYXNrOwoKIAoKCgoKIAoKCiAKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QKICB7CiAg
ICAgCgoKCgoKICAgIF9fZmRfbWFzayBfX2Zkc19iaXRzWzEwMjQgIC8gKDggKiBzaXplb2YgKF9f
ZmRfbWFzaykpIF07CgoKICB9IF9fZmRfc2V0OwoKIAp0eXBlZGVmIGludCBfX3Rfc2NhbGFyX3Q7
CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdF91c2NhbGFyX3Q7CgogCnR5cGVkZWYgbG9uZyBpbnQg
X19pbnRwdHJfdDsKCgogCgoKCgoKIyAzMCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMK
CgoKdHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5
cGVkZWYgX191X2ludCB1X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19x
dWFkX3QgcXVhZF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lk
X3QgZnNpZF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3Qg
aW5vX3Q7CgoKCgoKCgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVmIF9fZ2lk
X3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYgX19ubGlu
a190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRlZiBfX29m
Zl90IG9mZl90OwoKCgoKCgoKCgoKCnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCnR5cGVkZWYg
X19pZF90IGlkX3Q7CgoKCnR5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7CgoKCgp0eXBlZGVmIF9f
ZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgp0eXBlZGVmIF9f
a2V5X3Qga2V5X3Q7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiAKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIyA1MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoK
CgojIDYyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCgoKCgoKIAp0eXBlZGVmIF9fdGltZV90
IHRpbWVfdDsKCgoKCgojIDg5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCgojIDI3OSAiL3Vz
ci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDEyMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAy
IDMKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEu
NjYvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGli
L2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgog
CgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9l
Z2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGlu
dXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKIyAxODggIi91c3Iv
bGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRl
Zi5oIiAzCgoKCgoKIAoKCgoKIAoKIyAyNzEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0
LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIyAyODMgIi91c3IvbGli
L2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5o
IiAzCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2Vn
Y3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CiMgMTI0ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgogCnR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKCgogCgojIDE1OCAiL3Vzci9pbmNsdWRlL3N5cy90eXBl
cy5oIiAzCgoKIAoKCgoKCgoKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21v
ZGVfXyAoICBfX1FJX18gKSkpIDsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgo
X19tb2RlX18gKCAgX19ISV9fICkpKSA7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVf
XyAoKF9fbW9kZV9fICggIF9fU0lfXyApKSkgOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmli
dXRlX18gKChfX21vZGVfXyAoICBfX0RJX18gKSkpIDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1
X2ludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19RSV9fICkpKSA7CnR5cGVkZWYg
dW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19ISV9f
ICkpKSA7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19t
b2RlX18gKCAgX19TSV9fICkpKSA7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0
dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19ESV9fICkpKSA7Cgp0eXBlZGVmIGludCByZWdpc3Rl
cl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7CgoKIAoKCgoKCgogCiMg
MSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCgoKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZW5kaWFuLmgiIDEgMwogCgoKCgoKCiMg
MzUgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCgoKIAoKCgoKCgoKCgoKCgoKIyAxOTAgIi91
c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIAojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2Vs
ZWN0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCiAKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK
CgoKCgojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgogCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYg
aW50IF9fc2lnX2F0b21pY190OwoKIAoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQg
bG9uZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSkg
XTsKICB9IF9fc2lnc2V0X3Q7CgoKCgogCgoKCgoKIyAxMjUgIi91c3IvaW5jbHVkZS9iaXRzL3Np
Z3NldC5oIiAzCgojIDM0ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgogCgojIDEg
Ii91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoK
CgoKCiMgNTEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyA2MiAiL3Vzci9pbmNsdWRlL3Rp
bWUuaCIgMwoKCgojIDczICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCgoKCgoKIAoKc3RydWN0
IHRpbWVzcGVjCiAgewogICAgbG9uZyBpbnQgdHZfc2VjOwkJIAogICAgbG9uZyBpbnQgdHZfbnNl
YzsJCSAKICB9OwoKCgoKCiMgMjc5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgMzggIi91
c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCmV4dGVybiAiQyIgeyAKCiAKCgoKc3RydWN0
IHRpbWV2YWw7Cgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwoKIAp0eXBlZGVmIF9fZmRfc2V0
IGZkX3NldDsKCiAKCgoKIAoKCgoKIAoKCgoKCgogCgoKCgpleHRlcm4gaW50IF9fc2VsZWN0ICAo
aW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywKCQkJICBfX2ZkX3NldCAqX193cml0ZWZk
cywgX19mZF9zZXQgKl9fZXhjZXB0ZmRzLAoJCQkgIHN0cnVjdCB0aW1ldmFsICpfX3RpbWVvdXQp
ICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHNlbGVjdCAgKGludCBfX25mZHMsIF9fZmRfc2V0ICpf
X3JlYWRmZHMsCgkJCV9fZmRfc2V0ICpfX3dyaXRlZmRzLCBfX2ZkX3NldCAqX19leGNlcHRmZHMs
CgkJCXN0cnVjdCB0aW1ldmFsICpfX3RpbWVvdXQpICB0aHJvdyAoKSAgOwoKIyA5MSAiL3Vzci9p
bmNsdWRlL3N5cy9zZWxlY3QuaCIgMwoKCn0gCgoKIyAxOTMgIi91c3IvaW5jbHVkZS9zeXMvdHlw
ZXMuaCIgMiAzCgoKIAojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIyAxOTYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMiAzCgoKCgogCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CSAgCnR5cGVkZWYgX19m
c2Jsa2NudF90IGZzYmxrY250X3Q7ICAKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsg
IAoKCgoKCgoKCgoKCgp9IAoKCiMgMzM5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCiAK
CgoKIApleHRlcm4gaW50MzJfdCByYW5kb20gICh2b2lkKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJu
IHZvaWQgc3JhbmRvbSAgKHVuc2lnbmVkIGludCBfX3NlZWQpICB0aHJvdyAoKSAgOwoKIAoKCgpl
eHRlcm4gdm9pZCAqICBpbml0c3RhdGUgICh1bnNpZ25lZCBpbnQgX19zZWVkLCB2b2lkICogIF9f
c3RhdGVidWYsCgkJCSAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgIHRocm93ICgpICA7CgogCgpl
eHRlcm4gdm9pZCAqICBzZXRzdGF0ZSAgKHZvaWQgKiAgX19zdGF0ZWJ1ZikgIHRocm93ICgpICA7
CgoKCiAKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsJCSAKICAg
IGludDMyX3QgKnJwdHI7CQkgCiAgICBpbnQzMl90ICpzdGF0ZTsJCSAKICAgIGludCByYW5kX3R5
cGU7CQkgCiAgICBpbnQgcmFuZF9kZWc7CQkgCiAgICBpbnQgcmFuZF9zZXA7CQkgCiAgICBpbnQz
Ml90ICplbmRfcHRyOwkJIAogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yICAoc3RydWN0IHJhbmRv
bV9kYXRhICogICBfX2J1ZiwKCQkJICBpbnQzMl90ICogICBfX3Jlc3VsdCkgIHRocm93ICgpICA7
CgpleHRlcm4gaW50IHNyYW5kb21fciAgKHVuc2lnbmVkIGludCBfX3NlZWQsIHN0cnVjdCByYW5k
b21fZGF0YSAqX19idWYpICB0aHJvdyAoKSAgOwoKZXh0ZXJuIGludCBpbml0c3RhdGVfciAgKHVu
c2lnbmVkIGludCBfX3NlZWQsCgkJCSAgICAgdm9pZCAqICAgIF9fc3RhdGVidWYsCgkJCSAgICAg
c2l6ZV90IF9fc3RhdGVsZW4sCgkJCSAgICAgc3RydWN0IHJhbmRvbV9kYXRhICogICBfX2J1Zikg
IHRocm93ICgpICA7CgpleHRlcm4gaW50IHNldHN0YXRlX3IgICh2b2lkICogICAgX19zdGF0ZWJ1
ZiwKCQkJICAgIHN0cnVjdCByYW5kb21fZGF0YSAqICAgX19idWYpICB0aHJvdyAoKSAgOwoKCgoK
IApleHRlcm4gaW50IHJhbmQgICh2b2lkKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gdm9pZCBzcmFu
ZCAgKHVuc2lnbmVkIGludCBfX3NlZWQpICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGludCByYW5k
X3IgICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkgIHRocm93ICgpICA7CgoKCgogCgogCmV4dGVybiBk
b3VibGUgZHJhbmQ0OCAgKHZvaWQpICB0aHJvdyAoKSAgOwpleHRlcm4gZG91YmxlIGVyYW5kNDgg
ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgIHRocm93ICgpICA7CgogCmV4dGVybiBs
b25nIGludCBscmFuZDQ4ICAodm9pZCkgIHRocm93ICgpICA7CmV4dGVybiBsb25nIGludCBucmFu
ZDQ4ICAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pICB0aHJvdyAoKSAgOwoKIApleHRl
cm4gbG9uZyBpbnQgbXJhbmQ0OCAgKHZvaWQpICB0aHJvdyAoKSAgOwpleHRlcm4gbG9uZyBpbnQg
anJhbmQ0OCAgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSAgdGhyb3cgKCkgIDsKCiAK
ZXh0ZXJuIHZvaWQgc3JhbmQ0OCAgKGxvbmcgaW50IF9fc2VlZHZhbCkgIHRocm93ICgpICA7CmV4
dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAgKHVuc2lnbmVkIHNob3J0IGludCBfX3Nl
ZWQxNnZbM10pICB0aHJvdyAoKSAgOwpleHRlcm4gdm9pZCBsY29uZzQ4ICAodW5zaWduZWQgc2hv
cnQgaW50IF9fcGFyYW1bN10pICB0aHJvdyAoKSAgOwoKIApzdHJ1Y3QgZHJhbmQ0OF9kYXRhCiAg
ewogICAgdW5zaWduZWQgc2hvcnQgaW50IHhbM107CSAKICAgIHVuc2lnbmVkIHNob3J0IGludCBh
WzNdOwkgCiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgYzsJIAogICAgdW5zaWduZWQgc2hvcnQgaW50
IG9sZF94WzNdOyAgCiAgICBpbnQgaW5pdDsJCQkgCiAgfTsKCgogCmV4dGVybiBpbnQgZHJhbmQ0
OF9yICAoc3RydWN0IGRyYW5kNDhfZGF0YSAqICAgX19idWZmZXIsCgkJCSAgIGRvdWJsZSAqICAg
X19yZXN1bHQpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IGVyYW5kNDhfciAgKHVuc2lnbmVkIHNo
b3J0IGludCBfX3hzdWJpWzNdLAoJCQkgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICogICBfX2J1ZmZl
ciwKCQkJICAgZG91YmxlICogICBfX3Jlc3VsdCkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQg
bHJhbmQ0OF9yICAoc3RydWN0IGRyYW5kNDhfZGF0YSAqICAgX19idWZmZXIsCgkJCSAgIGxvbmcg
aW50ICogICBfX3Jlc3VsdCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICAodW5z
aWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCgkJCSAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKiAg
IF9fYnVmZmVyLAoJCQkgICBsb25nIGludCAqICAgX19yZXN1bHQpICB0aHJvdyAoKSAgOwoKIApl
eHRlcm4gaW50IG1yYW5kNDhfciAgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKiAgIF9fYnVmZmVyLAoJ
CQkgICBsb25nIGludCAqICAgX19yZXN1bHQpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IGpyYW5k
NDhfciAgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAoJCQkgICBzdHJ1Y3QgZHJhbmQ0
OF9kYXRhICogICBfX2J1ZmZlciwKCQkJICAgbG9uZyBpbnQgKiAgIF9fcmVzdWx0KSAgdGhyb3cg
KCkgIDsKCiAKZXh0ZXJuIGludCBzcmFuZDQ4X3IgIChsb25nIGludCBfX3NlZWR2YWwsIHN0cnVj
dCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSAgdGhyb3cgKCkgIDsKCmV4dGVybiBpbnQgc2VlZDQ4
X3IgICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAoJCQkgIHN0cnVjdCBkcmFuZDQ4
X2RhdGEgKl9fYnVmZmVyKSAgdGhyb3cgKCkgIDsKCmV4dGVybiBpbnQgbGNvbmc0OF9yICAodW5z
aWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCgkJCSAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f
YnVmZmVyKSAgdGhyb3cgKCkgIDsKCgoKCgoKCiAKZXh0ZXJuIHZvaWQgKiAgbWFsbG9jICAoc2l6
ZV90IF9fc2l6ZSkgIHRocm93ICgpICA7CiAKZXh0ZXJuIHZvaWQgKiAgY2FsbG9jICAoc2l6ZV90
IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpICB0aHJvdyAoKSAgOwoKCgogCgpleHRlcm4gdm9pZCAq
ICByZWFsbG9jICAodm9pZCAqICBfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgIHRocm93ICgpICA7CiAK
ZXh0ZXJuIHZvaWQgZnJlZSAgKHZvaWQgKiAgX19wdHIpICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJu
IHZvaWQgY2ZyZWUgICh2b2lkICogIF9fcHRyKSAgdGhyb3cgKCkgIDsKCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvYWxsb2NhLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xp
Yi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51
eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYx
ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVk
ZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgoj
IDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2lu
Y2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIvYWxwaGEt
cmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoK
IAoKIyAyNzEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42
Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIyAyODMgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVk
aGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAzMTcg
Ii91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRl
L3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjUgIi91c3IvaW5jbHVk
ZS9hbGxvY2EuaCIgMiAzCgoKZXh0ZXJuICJDIiB7IAoKIAoKCiAKZXh0ZXJuIHZvaWQgKiAgYWxs
b2NhICAoc2l6ZV90IF9fc2l6ZSkgIHRocm93ICgpICA7CgoKCgoKfSAKCgojIDQ5MiAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCiAKZXh0ZXJuIHZvaWQgKiAgdmFsbG9jICAoc2l6ZV90
IF9fc2l6ZSkgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJuIHZvaWQgYWJvcnQgICh2b2lkKSAgdGhy
b3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKIApleHRlcm4gaW50IGF0
ZXhpdCAgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkgIHRocm93ICgpICA7CgoKIAoKZXh0ZXJuIGlu
dCBfX29uX2V4aXQgICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICogIF9fYXJn
KSwKCQkJICAgdm9pZCAqICBfX2FyZykgIHRocm93ICgpICA7CmV4dGVybiBpbnQgb25fZXhpdCAg
KHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKiAgX19hcmcpLAoJCQkgdm9pZCAq
ICBfX2FyZykgIHRocm93ICgpICA7CgoKIAoKCmV4dGVybiB2b2lkIGV4aXQgIChpbnQgX19zdGF0
dXMpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCgoKCgog
CmV4dGVybiBjaGFyICpnZXRlbnYgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgIHRocm93ICgpICA7
CgogCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52ICAoX19jb25zdCBjaGFyICpfX25hbWUp
ICB0aHJvdyAoKSAgOwoKCiAKIAoKZXh0ZXJuIGludCBwdXRlbnYgIChfX2NvbnN0IGNoYXIgKl9f
c3RyaW5nKSAgdGhyb3cgKCkgIDsKCgoKIAoKZXh0ZXJuIGludCBzZXRlbnYgIChfX2NvbnN0IGNo
YXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLAoJCQlpbnQgX19yZXBsYWNlKSAgdGhy
b3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgdW5zZXRlbnYgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkg
IHRocm93ICgpICA7CgoKCiAKCgpleHRlcm4gaW50IGNsZWFyZW52ICAodm9pZCkgIHRocm93ICgp
ICA7CgoKCgogCgoKCmV4dGVybiBjaGFyICpta3RlbXAgIChjaGFyICpfX3RlbXBsYXRlKSAgdGhy
b3cgKCkgIDsKCiAKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAgKGNoYXIgKl9fdGVtcGxhdGUpICB0
aHJvdyAoKSAgOwoKCgogCmV4dGVybiBpbnQgc3lzdGVtICAoX19jb25zdCBjaGFyICpfX2NvbW1h
bmQpICB0aHJvdyAoKSAgOwoKCgoKCgoKCgoKIAoKCgoKCmV4dGVybiBjaGFyICpyZWFscGF0aCAg
KF9fY29uc3QgY2hhciAqICAgX19uYW1lLAoJCQkgICAgY2hhciAqICAgX19yZXNvbHZlZCkgIHRo
cm93ICgpICA7CgoKCiAKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpICAoX19jb25zdCB2
b2lkICogLCBfX2NvbnN0IHZvaWQgKiApICA7CgoKCgoKCiAKCmV4dGVybiB2b2lkICogIGJzZWFy
Y2ggIChfX2NvbnN0IHZvaWQgKiAgX19rZXksIF9fY29uc3Qgdm9pZCAqICBfX2Jhc2UsCgkJCSAg
ICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwKCQkJICAgICAgIF9fY29tcGFyX2Zu
X3QgX19jb21wYXIpICA7CgogCgpleHRlcm4gdm9pZCBxc29ydCAgKHZvaWQgKiAgX19iYXNlLCBz
aXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwKCQkJICBfX2NvbXBhcl9mbl90IF9fY29tcGFy
KSAgOwoKCiAKZXh0ZXJuIGludCBhYnMgIChpbnQgX194KSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzICAobG9uZyBpbnQgX194KSAg
dGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCiAKCiAKZXh0ZXJu
IGRpdl90IGRpdiAgKGludCBfX251bWVyLCBpbnQgX19kZW5vbSkgIHRocm93ICgpICAgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbGRpdl90IGxkaXYgIChsb25nIGludCBfX251
bWVyLCBsb25nIGludCBfX2Rlbm9tKSAgdGhyb3cgKCkgIAogICAgIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgoKCgoKCgogCgoKIAoKCmV4dGVybiBjaGFyICplY3Z0ICAoZG91YmxlIF9f
dmFsdWUsIGludCBfX25kaWdpdCwgaW50ICogICBfX2RlY3B0LAoJCQlpbnQgKiAgIF9fc2lnbikg
IHRocm93ICgpICA7CgogCgoKZXh0ZXJuIGNoYXIgKmZjdnQgIChkb3VibGUgX192YWx1ZSwgaW50
IF9fbmRpZ2l0LCBpbnQgKiAgIF9fZGVjcHQsCgkJCWludCAqICAgX19zaWduKSAgdGhyb3cgKCkg
IDsKCiAKCgpleHRlcm4gY2hhciAqZ2N2dCAgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs
IGNoYXIgKl9fYnVmKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGNoYXIgKnFlY3Z0ICAobG9uZyBk
b3VibGUgIF9fdmFsdWUsIGludCBfX25kaWdpdCwKCQkJIGludCAqICAgX19kZWNwdCwgaW50ICog
ICBfX3NpZ24pICB0aHJvdyAoKSAgOwpleHRlcm4gY2hhciAqcWZjdnQgIChsb25nIGRvdWJsZSAg
X192YWx1ZSwgaW50IF9fbmRpZ2l0LAoJCQkgaW50ICogICBfX2RlY3B0LCBpbnQgKiAgIF9fc2ln
bikgIHRocm93ICgpICA7CmV4dGVybiBjaGFyICpxZ2N2dCAgKGxvbmcgZG91YmxlICBfX3ZhbHVl
LCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSAgdGhyb3cgKCkgIDsKCgoKIAoKZXh0ZXJuIGlu
dCBlY3Z0X3IgIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKiAgIF9fZGVjcHQs
CgkJCWludCAqICAgX19zaWduLCBjaGFyICogICBfX2J1ZiwKCQkJc2l6ZV90IF9fbGVuKSAgdGhy
b3cgKCkgIDsKZXh0ZXJuIGludCBmY3Z0X3IgIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0
LCBpbnQgKiAgIF9fZGVjcHQsCgkJCWludCAqICAgX19zaWduLCBjaGFyICogICBfX2J1ZiwKCQkJ
c2l6ZV90IF9fbGVuKSAgdGhyb3cgKCkgIDsKCmV4dGVybiBpbnQgcWVjdnRfciAgKGxvbmcgZG91
YmxlICBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCgkJCSBpbnQgKiAgIF9fZGVjcHQsIGludCAqICAg
X19zaWduLAoJCQkgY2hhciAqICAgX19idWYsIHNpemVfdCBfX2xlbikgIHRocm93ICgpICA7CmV4
dGVybiBpbnQgcWZjdnRfciAgKGxvbmcgZG91YmxlICBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCgkJ
CSBpbnQgKiAgIF9fZGVjcHQsIGludCAqICAgX19zaWduLAoJCQkgY2hhciAqICAgX19idWYsIHNp
emVfdCBfX2xlbikgIHRocm93ICgpICA7CgoKCgogCgpleHRlcm4gaW50IG1ibGVuICAoX19jb25z
dCBjaGFyICpfX3MsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwogCgpleHRlcm4gaW50IG1idG93
YyAgKHdjaGFyX3QgKiAgIF9fcHdjLAoJCQlfX2NvbnN0IGNoYXIgKiAgIF9fcywgc2l6ZV90IF9f
bikgIHRocm93ICgpICA7CiAKCmV4dGVybiBpbnQgd2N0b21iICAoY2hhciAqX19zLCB3Y2hhcl90
IF9fd2NoYXIpICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAgKHdjaGFy
X3QgKiAgICBfX3B3Y3MsCgkJCSAgICAgX19jb25zdCBjaGFyICogICBfX3MsIHNpemVfdCBfX24p
ICB0aHJvdyAoKSAgOwogCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgIChjaGFyICogICBfX3MsCgkJ
CSAgICAgX19jb25zdCB3Y2hhcl90ICogICBfX3B3Y3MsIHNpemVfdCBfX24pICB0aHJvdyAoKSAg
OwoKCgogCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAgKF9fY29uc3QgY2hhciAqX19yZXNwb25zZSkg
IHRocm93ICgpICA7CgoKCiMgNzMyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgoKIyA3NTYg
Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCiMgNzY2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi
IDMKCgoKCgp9IAoKCiMgMjUgIi9zb2Z0d2FyZS90aGFsaWEvaC9zdGR0eXBlcy5oIiAyCgojIDEg
Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK
ZXh0ZXJuICJDIiB7IAoKIAoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGlu
dXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vz
ci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3Rk
ZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1y
ZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoK
CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91c3IvbGliL2djYy1saWIvYWxw
aGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoK
CiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYv
aW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCiMgMjcxICIvdXNyL2xpYi9nY2MtbGli
L2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiMg
MjgzICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5j
bHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJl
ZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoK
CgoKCgoKCgoKCgoKCgojIDMzICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgogCmV4dGVy
biB2b2lkICogIG1lbWNweSAgKHZvaWQgKiAgICBfX2Rlc3QsCgkJCSAgICBfX2NvbnN0IHZvaWQg
KiAgICBfX3NyYywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CiAKCmV4dGVybiB2b2lkICogIG1l
bW1vdmUgICh2b2lkICogIF9fZGVzdCwgX19jb25zdCB2b2lkICogIF9fc3JjLAoJCQkgICAgIHNp
emVfdCBfX24pICB0aHJvdyAoKSAgOwoKIAoKCgpleHRlcm4gdm9pZCAqICBtZW1jY3B5ICAodm9p
ZCAqICBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqICBfX3NyYywKCQkJICAgICBpbnQgX19jLCBzaXpl
X3QgX19uKSAgdGhyb3cgKCkgIDsKCgoKIApleHRlcm4gdm9pZCAqICBtZW1zZXQgICh2b2lkICog
IF9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgbWVt
Y21wICAoX19jb25zdCB2b2lkICogIF9fczEsIF9fY29uc3Qgdm9pZCAqICBfX3MyLAoJCQlzaXpl
X3QgX19uKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgKiAgbWVtY2hyICAoX19jb25zdCB2
b2lkICogIF9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgoKCgoKCgoKIApl
eHRlcm4gY2hhciAqc3RyY3B5ICAoY2hhciAqICAgX19kZXN0LAoJCQkgIF9fY29uc3QgY2hhciAq
ICAgX19zcmMpICB0aHJvdyAoKSAgOwogCmV4dGVybiBjaGFyICpzdHJuY3B5ICAoY2hhciAqICAg
X19kZXN0LAoJCQkgICBfX2NvbnN0IGNoYXIgKiAgIF9fc3JjLCBzaXplX3QgX19uKSAgdGhyb3cg
KCkgIDsKCiAKZXh0ZXJuIGNoYXIgKnN0cmNhdCAgKGNoYXIgKiAgIF9fZGVzdCwKCQkJICBfX2Nv
bnN0IGNoYXIgKiAgIF9fc3JjKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gY2hhciAqc3RybmNhdCAg
KGNoYXIgKiAgIF9fZGVzdCwKCQkJICAgX19jb25zdCBjaGFyICogICBfX3NyYywgc2l6ZV90IF9f
bikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgc3RyY21wICAoX19jb25zdCBjaGFyICpfX3Mx
LCBfX2NvbnN0IGNoYXIgKl9fczIpICB0aHJvdyAoKSAgOwogCmV4dGVybiBpbnQgc3RybmNtcCAg
KF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKSAgdGhy
b3cgKCkgIDsKCiAKZXh0ZXJuIGludCBzdHJjb2xsICAoX19jb25zdCBjaGFyICpfX3MxLCBfX2Nv
bnN0IGNoYXIgKl9fczIpICB0aHJvdyAoKSAgOwogCmV4dGVybiBzaXplX3Qgc3RyeGZybSAgKGNo
YXIgKiAgIF9fZGVzdCwKCQkJICAgIF9fY29uc3QgY2hhciAqICAgX19zcmMsIHNpemVfdCBfX24p
ICB0aHJvdyAoKSAgOwoKIyAxMDcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgogCmV4dGVy
biBjaGFyICpfX3N0cmR1cCAgKF9fY29uc3QgY2hhciAqX19zKSAgdGhyb3cgKCkgIDsKZXh0ZXJu
IGNoYXIgKnN0cmR1cCAgKF9fY29uc3QgY2hhciAqX19zKSAgdGhyb3cgKCkgIDsKCgogCgoKCgoK
CiMgMTQzICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgogCmV4dGVybiBjaGFyICpzdHJjaHIg
IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgIHRocm93ICgpICA7CiAKZXh0ZXJuIGNoYXIg
KnN0cnJjaHIgIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgIHRocm93ICgpICA7CgoKCgoK
CgogCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBj
aGFyICpfX3JlamVjdCkgIHRocm93ICgpICA7CiAKCmV4dGVybiBzaXplX3Qgc3Ryc3BuICAoX19j
b25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpICB0aHJvdyAoKSAgOwogCmV4
dGVybiBjaGFyICpzdHJwYnJrICAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19h
Y2NlcHQpICB0aHJvdyAoKSAgOwogCmV4dGVybiBjaGFyICpzdHJzdHIgIChfX2NvbnN0IGNoYXIg
Kl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpICB0aHJvdyAoKSAgOwoKCgoKCgoK
CgogCmV4dGVybiBjaGFyICpzdHJ0b2sgIChjaGFyICogICBfX3MsCgkJCSAgX19jb25zdCBjaGFy
ICogICBfX2RlbGltKSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiBjaGFyICpfX3N0cnRva19yICAo
Y2hhciAqICAgX19zLAoJCQkgICAgICBfX2NvbnN0IGNoYXIgKiAgIF9fZGVsaW0sCgkJCSAgICAg
IGNoYXIgKiogICBfX3NhdmVfcHRyKSAgdGhyb3cgKCkgIDsKCmV4dGVybiBjaGFyICpzdHJ0b2tf
ciAgKGNoYXIgKiAgIF9fcywKCQkJICAgIF9fY29uc3QgY2hhciAqICAgX19kZWxpbSwKCQkJICAg
IGNoYXIgKiogICBfX3NhdmVfcHRyKSAgdGhyb3cgKCkgIDsKCgojIDIwMyAiL3Vzci9pbmNsdWRl
L3N0cmluZy5oIiAzCgoKCiAKZXh0ZXJuIHNpemVfdCBzdHJsZW4gIChfX2NvbnN0IGNoYXIgKl9f
cykgIHRocm93ICgpICA7CgoKCgoKCgoKIApleHRlcm4gY2hhciAqc3RyZXJyb3IgIChpbnQgX19l
cnJudW0pICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIGNoYXIgKl9fc3RyZXJyb3JfciAgKGludCBf
X2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgIHRocm93ICgpICA7CmV4dGVy
biBjaGFyICpzdHJlcnJvcl9yICAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9f
YnVmbGVuKSAgdGhyb3cgKCkgIDsKCgogCgpleHRlcm4gdm9pZCBfX2J6ZXJvICAodm9pZCAqICBf
X3MsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIHZvaWQgYmNvcHkgIChfX2Nv
bnN0IHZvaWQgKiAgX19zcmMsIHZvaWQgKiAgX19kZXN0LCBzaXplX3QgX19uKSAgdGhyb3cgKCkg
IDsKCiAKZXh0ZXJuIHZvaWQgYnplcm8gICh2b2lkICogIF9fcywgc2l6ZV90IF9fbikgIHRocm93
ICgpICA7CgogCmV4dGVybiBpbnQgYmNtcCAgKF9fY29uc3Qgdm9pZCAqICBfX3MxLCBfX2NvbnN0
IHZvaWQgKiAgX19zMiwgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgogCmV4dGVybiBjaGFyICpp
bmRleCAgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJu
IGNoYXIgKnJpbmRleCAgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSAgdGhyb3cgKCkgIDsK
CiAKCmV4dGVybiBpbnQgX19mZnMgIChpbnQgX19pKSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9f
ICgoY29uc3QpKTsKZXh0ZXJuIGludCBmZnMgIChpbnQgX19pKSAgdGhyb3cgKCkgICBfX2F0dHJp
YnV0ZV9fICgoY29uc3QpKTsKCiAKCgoKCgoKCgoKIApleHRlcm4gaW50IF9fc3RyY2FzZWNtcCAg
KF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKSAgdGhyb3cgKCkgIDsKZXh0
ZXJuIGludCBzdHJjYXNlY21wICAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f
czIpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHN0cm5jYXNlY21wICAoX19jb25zdCBjaGFy
ICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCgkJCSAgICAgc2l6ZV90IF9fbikgIHRocm93ICgp
ICA7CgoKIyAyNzcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgogCgpleHRlcm4gY2hhciAq
c3Ryc2VwICAoY2hhciAqKiAgIF9fc3RyaW5ncCwKCQkJICBfX2NvbnN0IGNoYXIgKiAgIF9fZGVs
aW0pICB0aHJvdyAoKSAgOwoKCiMgMzE5ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgoKCiMg
MzQ3ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgoKfSAKCgojIDI2ICIvc29mdHdhcmUvdGhh
bGlhL2gvc3RkdHlwZXMuaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5ncy5oIiAxIDMKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1s
aW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIv
dXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9z
dGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2FscGhh
LXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgog
CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9h
bHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgog
CgoKIyAxODggIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42
Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKIyAyNzEgIi91c3IvbGliL2djYy1s
aWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK
IyAyODMgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9p
bmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvYWxwaGEt
cmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiMgMjQgIi91c3IvaW5jbHVkZS9zdHJpbmdzLmgiIDIgMwoKCmV4dGVy
biAiQyIgeyAKCiAKZXh0ZXJuIGludCBiY21wICAoX19jb25zdCB2b2lkICogIF9fczEsIF9fY29u
c3Qgdm9pZCAqICBfX3MyLCBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQg
YmNvcHkgIChfX2NvbnN0IHZvaWQgKiAgX19zcmMsIHZvaWQgKiAgX19kZXN0LCBzaXplX3QgX19u
KSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgYnplcm8gICh2b2lkICogIF9fcywgc2l6ZV90
IF9fbikgIHRocm93ICgpICA7CgogCgpleHRlcm4gaW50IGZmcyAgKGludCBfX2kpICB0aHJvdyAo
KSAgOwoKIApleHRlcm4gY2hhciAqaW5kZXggIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykg
IHRocm93ICgpICA7CgogCmV4dGVybiBjaGFyICpyaW5kZXggIChfX2NvbnN0IGNoYXIgKl9fcywg
aW50IF9fYykgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgc3RyY2FzZWNtcCAgKF9fY29uc3Qg
Y2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGlu
dCBzdHJuY2FzZWNtcCAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAoJ
CQkgICAgIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKfSAKCgojIDI3ICIvc29mdHdhcmUvdGhh
bGlhL2gvc3RkdHlwZXMuaCIgMgoKCgoKCgoKIAoKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg
MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCmV4dGVybiAiQyIgeyAKCgoKIyAxICIv
dXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9z
dGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhh
dC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAK
CgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYv
aW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgog
CgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkx
LjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIv
YWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoK
IAoKCgoKIAoKIyAyNzEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3Mt
Mi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIyAyODMgIi91c3IvbGliL2djYy1saWIvYWxw
aGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoK
IyAzMTcgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9p
bmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMzMgIi91c3Iv
aW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVk
aGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhh
dC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS92YS1hbHBoYS5oIiAxIDMKIAoKIAoKCgoKIAoK
CgoKIAoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICBjaGFyICpfX2Jhc2U7CQkJIAogIGludCBfX29m
ZnNldDsJCQkgCn0gX19nbnVjX3ZhX2xpc3Q7CgoKCgogCgoKIyAxMjggIi91c3IvbGliL2djYy1s
aWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3ZhLWFscGhhLmgiIDMK
CiMgMzYgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9p
bmNsdWRlL3N0ZGFyZy5oIiAyIDMKCiMgMTI2ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhh
dC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRhcmcuaCIgMwoKCgoKCgoKCgojIDIwMiAi
L3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUv
c3RkYXJnLmgiIDMKCgoKCiMgMzggIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCgoKCgoK
IAp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRl
L2xpYmlvLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5j
bHVkZS9fR19jb25maWcuaCIgMSAzCiAKCgoKCgogCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxp
Yi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoK
CgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0y
LjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9s
aWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVm
LmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91
c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0
ZGRlZi5oIiAzCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1s
aW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCgojIDI2
OSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1
ZGUvc3RkZGVmLmgiIDMKCgoKCgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCAgd2ludF90OwoK
CgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3Mt
Mi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMg
MTQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5
cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7
CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18p
KSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21v
ZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJp
YnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKIAoKCgoKCgoKCgoKCgoKCiMgMzAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKCgoKCgoK
CgoKCgoKCgoKCiAKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdj
cy0yLjkxLjY2L2luY2x1ZGUvc3RkYXJnLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3Mt
Mi45MS42Ni9pbmNsdWRlL3ZhLWFscGhhLmgiIDEgMwogCgogCgoKCgogCgojIDI1ICIvdXNyL2xp
Yi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS92YS1hbHBo
YS5oIiAzCgoKIAoKCiMgMTI4ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9l
Z2NzLTIuOTEuNjYvaW5jbHVkZS92YS1hbHBoYS5oIiAzCgojIDM2ICIvdXNyL2xpYi9nY2MtbGli
L2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRhcmcuaCIgMiAzCgoj
IDEyNiAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2lu
Y2x1ZGUvc3RkYXJnLmgiIDMKCgoKCgoKCgoKIyAyMDIgIi91c3IvbGliL2djYy1saWIvYWxwaGEt
cmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGFyZy5oIiAzCgoKCgojIDQ4ICIv
dXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCgoKCgoKCgojIDY3ICIvdXNyL2luY2x1ZGUvbGliaW8u
aCIgMwoKCiAKCgoKCgoKCgoKCgoKCgoKCgojIDk4ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwoK
CgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
c3RydWN0IF9JT19qdW1wX3Q7ICBzdHJ1Y3QgX0lPX0ZJTEU7CgogCgoKCgoKCgp0eXBlZGVmIHZv
aWQgX0lPX2xvY2tfdDsKCgoKIAoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFy
a2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwogICAKCiAgIAogIGludCBfcG9z
OwojIDE4NiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKCn07CgpzdHJ1Y3QgX0lPX0ZJTEUgewog
IGludCBfZmxhZ3M7CQkgCgoKICAgCiAgIAogIGNoYXIqIF9JT19yZWFkX3B0cjsJIAogIGNoYXIq
IF9JT19yZWFkX2VuZDsJIAogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CSAKICBjaGFyKiBfSU9fd3Jp
dGVfYmFzZTsJIAogIGNoYXIqIF9JT193cml0ZV9wdHI7CSAKICBjaGFyKiBfSU9fd3JpdGVfZW5k
OwkgCiAgY2hhciogX0lPX2J1Zl9iYXNlOwkgCiAgY2hhciogX0lPX2J1Zl9lbmQ7CSAKICAgCiAg
Y2hhciAqX0lPX3NhdmVfYmFzZTsgIAogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsgICAKICBjaGFy
ICpfSU9fc2F2ZV9lbmQ7ICAKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1
Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwogIF9f
b2ZmX3QgICBfb2xkX29mZnNldDsgIAoKCiAgIAogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1u
OwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKICAg
CgogIF9JT19sb2NrX3QgKl9sb2NrOwoKCgoKCgoKCiAgX19vZmY2NF90ICAgX29mZnNldDsKICAg
CiAgaW50IF91bnVzZWQyWzE2XTsKCn07CgoKCgoKc3RydWN0IF9JT19GSUxFX3BsdXM7CmV4dGVy
biBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9f
RklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9J
T18yXzFfc3RkZXJyXzsKCgoKCgoKCgoKCgogCgogCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3Jl
YWRfZm4gICh2b2lkICogIF9fY29va2llLCBjaGFyICpfX2J1ZiwKCQkJCSAgICAgICBzaXplX3Qg
X19uYnl0ZXMpICA7CgogCgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAgKHZv
aWQgKiAgX19jb29raWUsIF9fY29uc3QgY2hhciAqX19idWYsCgkJCQkgICAgICBzaXplX3QgX19u
KSAgOwoKIAoKCgoKCnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAgKHZvaWQgKiAgX19jb29raWUs
IF9fb2ZmX3QgICBfX3BvcywgaW50IF9fdykgIDsKCiAKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9m
biAgKHZvaWQgKiAgX19jb29raWUpICA7CgoKIyAzMTEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAz
CgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93ICAoX0lPX0ZJTEUgKikg
IHRocm93ICgpICA7CmV4dGVybiBpbnQgX191ZmxvdyAgKF9JT19GSUxFICopICB0aHJvdyAoKSAg
OwpleHRlcm4gaW50IF9fb3ZlcmZsb3cgIChfSU9fRklMRSAqLCBpbnQpICB0aHJvdyAoKSAgOwoK
CgoKCgoKCgoKCgoKCgoKZXh0ZXJuIGludCBfSU9fZ2V0YyAgKF9JT19GSUxFICpfX2ZwKSAgdGhy
b3cgKCkgIDsKZXh0ZXJuIGludCBfSU9fcHV0YyAgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSAg
dGhyb3cgKCkgIDsKZXh0ZXJuIGludCBfSU9fZmVvZiAgKF9JT19GSUxFICpfX2ZwKSAgdGhyb3cg
KCkgIDsKZXh0ZXJuIGludCBfSU9fZmVycm9yICAoX0lPX0ZJTEUgKl9fZnApICB0aHJvdyAoKSAg
OwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkICAoX0lPX0ZJTEUgKl9fZnApICB0aHJvdyAo
KSAgOwoKIAoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIHRocm93
ICgpICA7CmV4dGVybiB2b2lkIF9JT19mdW5sb2NrZmlsZSAgKF9JT19GSUxFICopICB0aHJvdyAo
KSAgOwpleHRlcm4gaW50IF9JT19mdHJ5bG9ja2ZpbGUgIChfSU9fRklMRSAqKSAgdGhyb3cgKCkg
IDsKCgoKCgoKCgoKCgoKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAgKF9JT19GSUxFICogICwgY29u
c3QgY2hhciAqICAsCgkJCSAgICAgX19nbnVjX3ZhX2xpc3QgLCBpbnQgKiAgKSAgdGhyb3cgKCkg
IDsKZXh0ZXJuIGludCBfSU9fdmZwcmludGYgIChfSU9fRklMRSAqICAsIGNvbnN0IGNoYXIgKiAg
LAoJCQkgICAgICBfX2dudWNfdmFfbGlzdCApICB0aHJvdyAoKSAgOwpleHRlcm4gX19zc2l6ZV90
ICAgX0lPX3BhZG4gIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCAgKSAgdGhyb3cgKCkgIDsK
ZXh0ZXJuIHNpemVfdCAgIF9JT19zZ2V0biAgKF9JT19GSUxFICosIHZvaWQgKiwgc2l6ZV90ICAp
ICB0aHJvdyAoKSAgOwoKZXh0ZXJuIF9fb2ZmNjRfdCAgIF9JT19zZWVrb2ZmICAoX0lPX0ZJTEUg
KiwgX19vZmY2NF90ICAsIGludCwgaW50KSAgdGhyb3cgKCkgIDsKZXh0ZXJuIF9fb2ZmNjRfdCAg
IF9JT19zZWVrcG9zICAoX0lPX0ZJTEUgKiwgX19vZmY2NF90ICAsIGludCkgIHRocm93ICgpICA7
CgpleHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAgKF9JT19GSUxFICopICB0aHJvdyAo
KSAgOwoKCn0KCgoKIyA1NyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCiAKCnR5cGVkZWYg
X19vZmZfdCAgZnBvc190OwoKCgoKCgoKIAoKCgoKCiAKCgoKCgogCgoKCgoKCiAKCgoKCgoKCiAK
CgoKCiAKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDExMCAiL3Vzci9pbmNsdWRlL3N0
ZGlvLmgiIDIgMwoKCgogCmV4dGVybiBGSUxFICpzdGRpbjsJCSAKZXh0ZXJuIEZJTEUgKnN0ZG91
dDsJCSAKZXh0ZXJuIEZJTEUgKnN0ZGVycjsJCSAKCgogCmV4dGVybiBpbnQgcmVtb3ZlICAoX19j
b25zdCBjaGFyICpfX2ZpbGVuYW1lKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gaW50IHJlbmFtZSAg
KF9fY29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hhciAqX19uZXcpICB0aHJvdyAoKSAgOwoK
CiAKCmV4dGVybiBGSUxFICp0bXBmaWxlICAodm9pZCkgIHRocm93ICgpICA7CgoKCgoKCgoKCgog
CmV4dGVybiBjaGFyICp0bXBuYW0gIChjaGFyICpfX3MpICB0aHJvdyAoKSAgOwoKCiAKCmV4dGVy
biBjaGFyICp0bXBuYW1fciAgKGNoYXIgKl9fcykgIHRocm93ICgpICA7CgoKCgogCgoKCgoKCmV4
dGVybiBjaGFyICp0ZW1wbmFtICAoX19jb25zdCBjaGFyICpfX2RpciwgX19jb25zdCBjaGFyICpf
X3BmeCkgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJuIGludCBmY2xvc2UgIChGSUxFICpfX3N0cmVh
bSkgIHRocm93ICgpICA7CiAKZXh0ZXJuIGludCBmZmx1c2ggIChGSUxFICpfX3N0cmVhbSkgIHRo
cm93ICgpICA7CgoKIApleHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAgKEZJTEUgKl9fc3RyZWFt
KSAgdGhyb3cgKCkgIDsKCgoKCgoKCgoKIApleHRlcm4gRklMRSAqZm9wZW4gIChfX2NvbnN0IGNo
YXIgKiAgIF9fZmlsZW5hbWUsCgkJCSBfX2NvbnN0IGNoYXIgKiAgIF9fbW9kZXMpICB0aHJvdyAo
KSAgOwogCmV4dGVybiBGSUxFICpmcmVvcGVuICAoX19jb25zdCBjaGFyICogICBfX2ZpbGVuYW1l
LAoJCQkgICBfX2NvbnN0IGNoYXIgKiAgIF9fbW9kZXMsCgkJCSAgIEZJTEUgKiAgIF9fc3RyZWFt
KSAgdGhyb3cgKCkgIDsKIyAxOTcgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCgoKCgoKCgoKCgog
CmV4dGVybiBGSUxFICpmZG9wZW4gIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSAg
dGhyb3cgKCkgIDsKCgojIDIyMyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKIAoKZXh0ZXJu
IHZvaWQgc2V0YnVmICAoRklMRSAqICAgX19zdHJlYW0sIGNoYXIgKiAgIF9fYnVmKSAgdGhyb3cg
KCkgIDsKIAoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAgKEZJTEUgKiAgIF9fc3RyZWFtLCBjaGFyICog
ICBfX2J1ZiwKCQkJIGludCBfX21vZGVzLCBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsKCgogCgpl
eHRlcm4gdm9pZCBzZXRidWZmZXIgIChGSUxFICogICBfX3N0cmVhbSwgY2hhciAqICAgX19idWYs
CgkJCSAgICBzaXplX3QgX19zaXplKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgc2V0bGlu
ZWJ1ZiAgKEZJTEUgKl9fc3RyZWFtKSAgdGhyb3cgKCkgIDsKCgoKIApleHRlcm4gaW50IGZwcmlu
dGYgIChGSUxFICogICBfX3N0cmVhbSwKCQkJIF9fY29uc3QgY2hhciAqICAgX19mb3JtYXQsIC4u
LikgIHRocm93ICgpICA7CiAKZXh0ZXJuIGludCBwcmludGYgIChfX2NvbnN0IGNoYXIgKiAgIF9f
Zm9ybWF0LCAuLi4pICB0aHJvdyAoKSAgOwogCmV4dGVybiBpbnQgc3ByaW50ZiAgKGNoYXIgKiAg
IF9fcywKCQkJIF9fY29uc3QgY2hhciAqICAgX19mb3JtYXQsIC4uLikgIHRocm93ICgpICA7Cgog
CmV4dGVybiBpbnQgdmZwcmludGYgIChGSUxFICogICBfX3MsCgkJCSAgX19jb25zdCBjaGFyICog
ICBfX2Zvcm1hdCwKCQkJICBfX2dudWNfdmFfbGlzdCAgX19hcmcpICB0aHJvdyAoKSAgOwogCmV4
dGVybiBpbnQgdnByaW50ZiAgKF9fY29uc3QgY2hhciAqICAgX19mb3JtYXQsCgkJCSBfX2dudWNf
dmFfbGlzdCAgX19hcmcpICB0aHJvdyAoKSAgOwogCmV4dGVybiBpbnQgdnNwcmludGYgIChjaGFy
ICogICBfX3MsCgkJCSAgX19jb25zdCBjaGFyICogICBfX2Zvcm1hdCwKCQkJICBfX2dudWNfdmFf
bGlzdCAgX19hcmcpICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGludCBzbnByaW50ZiAgKGNoYXIg
KiAgIF9fcywgc2l6ZV90IF9fbWF4bGVuLAoJCQkgIF9fY29uc3QgY2hhciAqICAgX19mb3JtYXQs
IC4uLikgIHRocm93ICgpICAKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmlu
dGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgX192c25wcmludGYgIChjaGFyICogICBfX3MsIHNp
emVfdCBfX21heGxlbiwKCQkJICAgICBfX2NvbnN0IGNoYXIgKiAgIF9fZm9ybWF0LAoJCQkgICAg
IF9fZ251Y192YV9saXN0ICBfX2FyZykgIHRocm93ICgpICAKICAgICBfX2F0dHJpYnV0ZV9fICgo
X19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKZXh0ZXJuIGludCB2c25wcmludGYgIChj
aGFyICogICBfX3MsIHNpemVfdCBfX21heGxlbiwKCQkJICAgX19jb25zdCBjaGFyICogICBfX2Zv
cm1hdCwKCQkJICAgX19nbnVjX3ZhX2xpc3QgIF9fYXJnKSAgdGhyb3cgKCkgIAogICAgIF9fYXR0
cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOwoKCiMgMzAyICIvdXNy
L2luY2x1ZGUvc3RkaW8uaCIgMwoKCgogCmV4dGVybiBpbnQgZnNjYW5mICAoRklMRSAqICAgX19z
dHJlYW0sCgkJCV9fY29uc3QgY2hhciAqICAgX19mb3JtYXQsIC4uLikgIHRocm93ICgpICA7CiAK
ZXh0ZXJuIGludCBzY2FuZiAgKF9fY29uc3QgY2hhciAqICAgX19mb3JtYXQsIC4uLikgIHRocm93
ICgpICA7CiAKZXh0ZXJuIGludCBzc2NhbmYgIChfX2NvbnN0IGNoYXIgKiAgIF9fcywKCQkJX19j
b25zdCBjaGFyICogICBfX2Zvcm1hdCwgLi4uKSAgdGhyb3cgKCkgIDsKCiMgMzMwICIvdXNyL2lu
Y2x1ZGUvc3RkaW8uaCIgMwoKCgogCmV4dGVybiBpbnQgZmdldGMgIChGSUxFICpfX3N0cmVhbSkg
IHRocm93ICgpICA7CmV4dGVybiBpbnQgZ2V0YyAgKEZJTEUgKl9fc3RyZWFtKSAgdGhyb3cgKCkg
IDsKCiAKZXh0ZXJuIGludCBnZXRjaGFyICAodm9pZCkgIHRocm93ICgpICA7CgogCgoKCgogCmV4
dGVybiBpbnQgZ2V0Y191bmxvY2tlZCAgKEZJTEUgKl9fc3RyZWFtKSAgdGhyb3cgKCkgIDsKZXh0
ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkICAodm9pZCkgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJu
IGludCBmZ2V0Y191bmxvY2tlZCAgKEZJTEUgKl9fc3RyZWFtKSAgdGhyb3cgKCkgIDsKCgoKIApl
eHRlcm4gaW50IGZwdXRjICAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwpl
eHRlcm4gaW50IHB1dGMgIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgIHRocm93ICgpICA7Cgog
CmV4dGVybiBpbnQgcHV0Y2hhciAgKGludCBfX2MpICB0aHJvdyAoKSAgOwoKIAoKCgoKIApleHRl
cm4gaW50IGZwdXRjX3VubG9ja2VkICAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pICB0aHJvdyAo
KSAgOwoKCgogCmV4dGVybiBpbnQgcHV0Y191bmxvY2tlZCAgKGludCBfX2MsIEZJTEUgKl9fc3Ry
ZWFtKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkICAoaW50IF9fYykg
IHRocm93ICgpICA7CgoKCgogCmV4dGVybiBpbnQgZ2V0dyAgKEZJTEUgKl9fc3RyZWFtKSAgdGhy
b3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdXR3ICAoaW50IF9fdywgRklMRSAqX19zdHJlYW0pICB0
aHJvdyAoKSAgOwoKCgogCmV4dGVybiBjaGFyICpmZ2V0cyAgKGNoYXIgKiAgIF9fcywgaW50IF9f
biwKCQkJIEZJTEUgKiAgIF9fc3RyZWFtKSAgdGhyb3cgKCkgIDsKCgoKCgoKCiAKCmV4dGVybiBj
aGFyICpnZXRzICAoY2hhciAqX19zKSAgdGhyb3cgKCkgIDsKCgojIDQyMCAiL3Vzci9pbmNsdWRl
L3N0ZGlvLmgiIDMKCgoKIApleHRlcm4gaW50IGZwdXRzICAoX19jb25zdCBjaGFyICogICBfX3Ms
CgkJICAgICAgIEZJTEUgKiAgIF9fc3RyZWFtKSAgdGhyb3cgKCkgIDsKCgoKCgoKCiAKZXh0ZXJu
IGludCBwdXRzICAoX19jb25zdCBjaGFyICpfX3MpICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGlu
dCB1bmdldGMgIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgIHRocm93ICgpICA7CgoKIApleHRl
cm4gc2l6ZV90IGZyZWFkICAodm9pZCAqICAgX19wdHIsIHNpemVfdCBfX3NpemUsCgkJCSAgc2l6
ZV90IF9fbiwgRklMRSAqICAgX19zdHJlYW0pICB0aHJvdyAoKSAgOwogCmV4dGVybiBzaXplX3Qg
ZndyaXRlICAoX19jb25zdCB2b2lkICogICBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKCQkJICAgc2l6
ZV90IF9fbiwgRklMRSAqICAgX19zKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiBzaXplX3QgZnJl
YWRfdW5sb2NrZWQgICh2b2lkICogICBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKCQkJCSAgIHNpemVf
dCBfX24sIEZJTEUgKiAgIF9fc3RyZWFtKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIHNpemVfdCBmd3Jp
dGVfdW5sb2NrZWQgIChfX2NvbnN0IHZvaWQgKiAgIF9fcHRyLAoJCQkJICAgIHNpemVfdCBfX3Np
emUsIHNpemVfdCBfX24sCgkJCQkgICAgRklMRSAqICAgX19zdHJlYW0pICB0aHJvdyAoKSAgOwoK
CgogCmV4dGVybiBpbnQgZnNlZWsgIChGSUxFICpfX3N0cmVhbSwgbG9uZyBpbnQgX19vZmYsIGlu
dCBfX3doZW5jZSkgIHRocm93ICgpICA7CiAKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsICAoRklMRSAq
X19zdHJlYW0pICB0aHJvdyAoKSAgOwogCmV4dGVybiB2b2lkIHJld2luZCAgKEZJTEUgKl9fc3Ry
ZWFtKSAgdGhyb3cgKCkgIDsKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCmV4dGVy
biBpbnQgZmdldHBvcyAgKEZJTEUgKiAgIF9fc3RyZWFtLAoJCQkgZnBvc190ICogICBfX3Bvcykg
IHRocm93ICgpICA7CiAKZXh0ZXJuIGludCBmc2V0cG9zICAoRklMRSAqX19zdHJlYW0sIF9fY29u
c3QgZnBvc190ICpfX3BvcykgIHRocm93ICgpICA7CiMgNTE5ICIvdXNyL2luY2x1ZGUvc3RkaW8u
aCIgMwoKCiMgNTI5ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKCiAKZXh0ZXJuIHZvaWQgY2xl
YXJlcnIgIChGSUxFICpfX3N0cmVhbSkgIHRocm93ICgpICA7CiAKZXh0ZXJuIGludCBmZW9mICAo
RklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwogCmV4dGVybiBpbnQgZmVycm9yICAoRklMRSAq
X19zdHJlYW0pICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQg
IChGSUxFICpfX3N0cmVhbSkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAg
KEZJTEUgKl9fc3RyZWFtKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQg
IChGSUxFICpfX3N0cmVhbSkgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJuIHZvaWQgcGVycm9yICAo
X19jb25zdCBjaGFyICpfX3MpICB0aHJvdyAoKSAgOwoKIAoKCmV4dGVybiBpbnQgc3lzX25lcnI7
CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgoKCgoKCgogCmV4
dGVybiBpbnQgZmlsZW5vICAoRklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwoKCgogCmV4dGVy
biBpbnQgZmlsZW5vX3VubG9ja2VkICAoRklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwoKCgoK
CiAKZXh0ZXJuIEZJTEUgKnBvcGVuICAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQsIF9fY29uc3Qg
Y2hhciAqX19tb2RlcykgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgcGNsb3NlICAoRklMRSAq
X19zdHJlYW0pICB0aHJvdyAoKSAgOwoKCgoKIApleHRlcm4gY2hhciAqY3Rlcm1pZCAgKGNoYXIg
Kl9fcykgIHRocm93ICgpICA7CgoKCgoKCgoKCiMgNjAzICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg
MwoKCgoKIAoKIApleHRlcm4gdm9pZCBmbG9ja2ZpbGUgIChGSUxFICpfX3N0cmVhbSkgIHRocm93
ICgpICA7CgogCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAgKEZJTEUgKl9fc3RyZWFtKSAgdGhy
b3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUgIChGSUxFICpfX3N0cmVhbSkgIHRo
cm93ICgpICA7CgoKCgoKCgoKCgogCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAx
IDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKaW5saW5lICBpbnQKdnByaW50ZiAo
X19jb25zdCBjaGFyICogICBfX2ZtdCwgX19nbnVjX3ZhX2xpc3QgIF9fYXJnKSB0aHJvdyAoKSAK
ewogIHJldHVybiB2ZnByaW50ZiAoc3Rkb3V0LCBfX2ZtdCwgX19hcmcpOwp9CgogCmlubGluZSAg
aW50CmdldGNoYXIgKHZvaWQpIHRocm93ICgpIAp7CiAgcmV0dXJuIF9JT19nZXRjIChzdGRpbik7
Cn0KCgoKIAppbmxpbmUgIGludApnZXRjX3VubG9ja2VkIChGSUxFICpfX2ZwKSB0aHJvdyAoKSAK
ewogIHJldHVybiAoKCBfX2ZwICktPl9JT19yZWFkX3B0ciA+PSAoIF9fZnAgKS0+X0lPX3JlYWRf
ZW5kID8gX191ZmxvdyAoIF9fZnAgKSA6ICoodW5zaWduZWQgY2hhciAqKSAoIF9fZnAgKS0+X0lP
X3JlYWRfcHRyKyspIDsKfQoKIAppbmxpbmUgIGludApnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0
aHJvdyAoKSAKewogIHJldHVybiAoKCBzdGRpbiApLT5fSU9fcmVhZF9wdHIgPj0gKCBzdGRpbiAp
LT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93ICggc3RkaW4gKSA6ICoodW5zaWduZWQgY2hhciAqKSAo
IHN0ZGluICktPl9JT19yZWFkX3B0cisrKSA7Cn0KCgoKIAppbmxpbmUgIGludApwdXRjaGFyIChp
bnQgX19jKSB0aHJvdyAoKSAKewogIHJldHVybiBfSU9fcHV0YyAoX19jLCBzdGRvdXQpOwp9CgoK
CiAKaW5saW5lICBpbnQKZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKSAKewogIHJldHVybiAoKCggIF9fc3RyZWFtICktPl9JT193cml0ZV9wdHIgPj0gKCAg
X19zdHJlYW0gKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93ICggIF9fc3RyZWFtICwgKHVu
c2lnbmVkIGNoYXIpICggX19jICkpIDogKHVuc2lnbmVkIGNoYXIpICgqKCAgX19zdHJlYW0gKS0+
X0lPX3dyaXRlX3B0cisrID0gKCBfX2MgKSkpIDsKfQoKCgoKIAppbmxpbmUgIGludApwdXRjX3Vu
bG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgCnsKICByZXR1cm4gKCgo
ICBfX3N0cmVhbSApLT5fSU9fd3JpdGVfcHRyID49ICggIF9fc3RyZWFtICktPl9JT193cml0ZV9l
bmQpID8gX19vdmVyZmxvdyAoICBfX3N0cmVhbSAsICh1bnNpZ25lZCBjaGFyKSAoIF9fYyApKSA6
ICh1bnNpZ25lZCBjaGFyKSAoKiggIF9fc3RyZWFtICktPl9JT193cml0ZV9wdHIrKyA9ICggX19j
ICkpKSA7Cn0KCiAKaW5saW5lICBpbnQKcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cg
KCkgCnsKICByZXR1cm4gKCgoICBzdGRvdXQgKS0+X0lPX3dyaXRlX3B0ciA+PSAoICBzdGRvdXQg
KS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93ICggIHN0ZG91dCAsICh1bnNpZ25lZCBjaGFy
KSAoIF9fYyApKSA6ICh1bnNpZ25lZCBjaGFyKSAoKiggIHN0ZG91dCApLT5fSU9fd3JpdGVfcHRy
KysgPSAoIF9fYyApKSkgOwp9CgoKCgoKCgoKCgoKCgoKIAppbmxpbmUgIGludApmZW9mX3VubG9j
a2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgCnsKICByZXR1cm4gKCgoIF9fc3RyZWFtICkt
Pl9mbGFncyAmIDB4MTAgKSAhPSAwKSA7Cn0KCiAKaW5saW5lICBpbnQKZmVycm9yX3VubG9ja2Vk
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgCnsKICByZXR1cm4gKCgoIF9fc3RyZWFtICktPl9m
bGFncyAmIDB4MjAgKSAhPSAwKSA7Cn0KCgoKCgoKIAoKIyAxNDkgIi91c3IvaW5jbHVkZS9iaXRz
L3N0ZGlvLmgiIDMKCgojIDE2NSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMwoKCiAKCiMg
NjMxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCn0gCgoKCgojIDM2ICIvc29mdHdhcmUv
dGhhbGlhL2gvc3RkdHlwZXMuaCIgMgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCnR5cGVkZWYgc2hv
cnQgICBTSE9SVDsKdHlwZWRlZiBsb25nICAgIExPTkc7CnR5cGVkZWYgaW50ICAgICBJTlQ7Cgp0
eXBlZGVmIGZsb2F0ICAgRkxPQVQ7CiAKCgoKCgoKdHlwZWRlZiBkb3VibGUgIERPVUJMRTsKCgoK
CnR5cGVkZWYgRkxPQVQgICBSRUFMOwoKCnR5cGVkZWYgZmxvYXQgICBNQVRIOyAgCgoKCgogCgoK
CgoKIAoKCgoKCiAKCgoKdHlwZWRlZiBzaG9ydCAgIEJPT0xFQU47CnR5cGVkZWYgdm9pZCAqICBQ
VFI7CnR5cGVkZWYgY2hhciAqICBDVExfRkxBRzsKdHlwZWRlZiBjaGFyICAgIENIQVI7CgogCgoK
IAoKCgoKCgoKIAoKIAoKCgoKCgoKIAoKIAoKCgoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgIFVf
U0hPUlQ7CiAKCiAKCgoKdHlwZWRlZiBpbnQgSU5ERVg7CnR5cGVkZWYgY2hhciBOQU1FWzQwXTsK
IAoKCiAKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBVX0NIQVI7CgoKdHlwZWRlZiB2b2lkICAg
ICgqRlVOQykoIHZvaWQpOwp0eXBlZGVmIGNoYXIgICAgU1RSSU5HWzI1Nl07CgoKCnR5cGVkZWYg
c3RydWN0IF9WRUNUT1IKewogICBSRUFMIHgsIHksIHo7Cn0gVkVDVE9SOwoKdHlwZWRlZiBWRUNU
T1IgIFBPSU5UOwp0eXBlZGVmIFZFQ1RPUiBWRVJURVg7CgojIDE2MyAiL3NvZnR3YXJlL3RoYWxp
YS9oL3N0ZHR5cGVzLmgiCgoKdHlwZWRlZiBzdHJ1Y3QgX1ZFQ1Q0RAp7CiAgIFJFQUwgeCwgeSwg
eiwgdzsKfSBWRUNUNEQ7Cgp0eXBlZGVmIHN0cnVjdCBfVkVSVDJECnsKICAgIFJFQUwgdSx2Owp9
IFZFUlQyRDsKCnR5cGVkZWYgc3RydWN0IF9QT0lOVDJECnsKICAgIFJFQUwgeCwgeTsKfSBQT0lO
VDJEOwoKdHlwZWRlZiBSRUFMIE1BVFJJWFs0XVs0XTsKICAgIAoKIAoKCgp0eXBlZGVmIHVuaW9u
IHsKICAgIFJFQUwgICAgYWxsWzE2XTsKICAgIFJFQUwgICAgZWxlbVs0XVs0XTsKfSBUUkFOU0ZP
Uk07CgoKIAoKCmlubGluZSBjb25zdCBjaGFyICpjbGFzc05hbWUoIFZFQ1RPUiApIHsgcmV0dXJu
ICJWRUNUT1IiOyB9Owp9OwppbmxpbmUgY29uc3QgY2hhciAqY2xhc3NOYW1lKCBjb25zdCBQT0lO
VDJEICYgKSB7IHJldHVybiAiUE9JTlQyRCI7IH07CgoKIyAxICIvc29mdHdhcmUvdGhhbGlhL2gv
c3lzcHJvdG9zLnAiIDEKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5j
bHVkZS9zeXMvdGltZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvdGltZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCmV4dGVybiAi
QyIgeyAKCgoKCiAKCgojIDEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2Vn
Y3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGli
L2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5o
IiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0
LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJl
ZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCgojIDE4
OCAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1
ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgojIDI3MSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBo
YS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgojIDI4MyAi
L3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUv
c3RkZGVmLmgiIDMKCgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQt
bGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKIyAzOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKIAoKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiAKCgog
CgoKCgoKIAoKCgoKCgoKIyA1OSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAzCgojIDQyICIv
dXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgogCgoKCgoKCgoKCgoKCgoKIAp0eXBlZGVmIF9fY2xv
Y2tfdCBjbG9ja190OwoKCgoKIyA3MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoKIyA4OSAi
L3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoKCiAKc3RydWN0IHRtCnsKICBpbnQgdG1fc2VjOwkJ
CSAKICBpbnQgdG1fbWluOwkJCSAKICBpbnQgdG1faG91cjsJCQkgCiAgaW50IHRtX21kYXk7CQkJ
IAogIGludCB0bV9tb247CQkJIAogIGludCB0bV95ZWFyOwkJCSAKICBpbnQgdG1fd2RheTsJCQkg
CiAgaW50IHRtX3lkYXk7CQkJIAogIGludCB0bV9pc2RzdDsJCQkgCgoKICBsb25nIGludCB0bV9n
bXRvZmY7CQkgCiAgX19jb25zdCBjaGFyICp0bV96b25lOwkgCgoKCgp9OwoKCiAKCmV4dGVybiBj
bG9ja190IGNsb2NrICAodm9pZCkgIHRocm93ICgpICA7CgogCmV4dGVybiB0aW1lX3QgdGltZSAg
KHRpbWVfdCAqX190aW1lcikgIHRocm93ICgpICA7CgogCmV4dGVybiBkb3VibGUgZGlmZnRpbWUg
ICh0aW1lX3QgX190aW1lMSwgdGltZV90IF9fdGltZTApICB0aHJvdyAoKSAgCiAgICAgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIApleHRlcm4gdGltZV90IG1rdGltZSAgKHN0cnVjdCB0
bSAqX190cCkgIHRocm93ICgpICA7CgoKIAoKCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUgIChjaGFy
ICogICBfX3MsIHNpemVfdCBfX21heHNpemUsCgkJCSAgICAgX19jb25zdCBjaGFyICogICBfX2Zv
cm1hdCwKCQkJICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqICAgX190cCkgIHRocm93ICgpICA7CgoK
CgoKCgoKCiAKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZSAgKF9fY29uc3QgdGltZV90ICpfX3Rp
bWVyKSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZSAgKF9fY29u
c3QgdGltZV90ICpfX3RpbWVyKSAgdGhyb3cgKCkgIDsKCgogCgpleHRlcm4gc3RydWN0IHRtICpf
X2dtdGltZV9yICAoX19jb25zdCB0aW1lX3QgKiAgIF9fdGltZXIsCgkJCQkgICBzdHJ1Y3QgdG0g
KiAgIF9fdHApICB0aHJvdyAoKSAgOwpleHRlcm4gc3RydWN0IHRtICpnbXRpbWVfciAgKF9fY29u
c3QgdGltZV90ICogICBfX3RpbWVyLAoJCQkJIHN0cnVjdCB0bSAqICAgX190cCkgIHRocm93ICgp
ICA7CgogCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWVfciAgKF9fY29uc3QgdGltZV90ICog
ICBfX3RpbWVyLAoJCQkJICAgIHN0cnVjdCB0bSAqICAgX190cCkgIHRocm93ICgpICA7CgoKIAoK
ZXh0ZXJuIGNoYXIgKmFzY3RpbWUgIChfX2NvbnN0IHN0cnVjdCB0bSAqX190cCkgIHRocm93ICgp
ICA7CgogCmV4dGVybiBjaGFyICpjdGltZSAgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSAgdGhy
b3cgKCkgIDsKCgogCgogCgpleHRlcm4gY2hhciAqYXNjdGltZV9yICAoX19jb25zdCBzdHJ1Y3Qg
dG0gKiAgIF9fdHAsCgkJCSAgICAgY2hhciAqICAgX19idWYpICB0aHJvdyAoKSAgOwoKIApleHRl
cm4gY2hhciAqY3RpbWVfciAgKF9fY29uc3QgdGltZV90ICogICBfX3RpbWVyLAoJCQkgICBjaGFy
ICogICBfX2J1ZikgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJuIGNoYXIgKl9fdHpuYW1lWzJdOwkg
CmV4dGVybiBpbnQgX19kYXlsaWdodDsJCSAKZXh0ZXJuIGxvbmcgaW50IF9fdGltZXpvbmU7CSAK
CgoKIApleHRlcm4gY2hhciAqdHpuYW1lWzJdOwoKIAoKZXh0ZXJuIHZvaWQgdHpzZXQgICh2b2lk
KSAgdGhyb3cgKCkgIDsKCgoKZXh0ZXJuIGludCBkYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IHRp
bWV6b25lOwoKCgogCgpleHRlcm4gaW50IHN0aW1lICAoX19jb25zdCB0aW1lX3QgKl9fd2hlbikg
IHRocm93ICgpICA7CgoKCiAKCgoKCgoKIAoKCiAKZXh0ZXJuIHRpbWVfdCB0aW1lZ20gIChzdHJ1
Y3QgdG0gKl9fdHApICB0aHJvdyAoKSAgOwoKIApleHRlcm4gdGltZV90IHRpbWVsb2NhbCAgKHN0
cnVjdCB0bSAqX190cCkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgZHlzaXplICAoaW50IF9f
eWVhcikgIHRocm93ICgpICA7CgoKCgogCmV4dGVybiBpbnQgbmFub3NsZWVwICAoX19jb25zdCBz
dHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3RpbWUsCgkJCSAgIHN0cnVjdCB0aW1lc3BlYyAq
X19yZW1haW5pbmcpICB0aHJvdyAoKSAgOwoKCgojIDI2NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg
MwoKCiMgMjc0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCn0gCgoKCgojIDI0ICIvdXNyL2lu
Y2x1ZGUvc3lzL3RpbWUuaCIgMiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIg
MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgojIDQzICIvdXNyL2luY2x1ZGUvYml0cy90aW1l
LmgiIDMKCgoKCgoKCgogCgpzdHJ1Y3QgdGltZXZhbAogIHsKICAgIF9fdGltZV90IHR2X3NlYzsJ
CSAKICAgIF9fdGltZV90IHR2X3VzZWM7CQkgCiAgfTsKCgojIDI4ICIvdXNyL2luY2x1ZGUvc3lz
L3RpbWUuaCIgMiAzCgoKCmV4dGVybiAiQyIgeyAKCiAKCgoKCgoKCgoKCiAKCnN0cnVjdCB0aW1l
em9uZQogIHsKICAgIGludCB0el9taW51dGVzd2VzdDsJCSAKICAgIGludCB0el9kc3R0aW1lOwkJ
IAogIH07CgogCgoKCgpleHRlcm4gaW50IGdldHRpbWVvZmRheSAgKHN0cnVjdCB0aW1ldmFsICpf
X3R2LAoJCQkgICAgICBzdHJ1Y3QgdGltZXpvbmUgKl9fdHopICB0aHJvdyAoKSAgOwoKIAoKZXh0
ZXJuIGludCBzZXR0aW1lb2ZkYXkgIChfX2NvbnN0IHN0cnVjdCB0aW1ldmFsICpfX3R2LAoJCQkg
ICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lem9uZSAqX190eikgIHRocm93ICgpICA7CgogCgoKCmV4
dGVybiBpbnQgYWRqdGltZSAgKF9fY29uc3Qgc3RydWN0IHRpbWV2YWwgKl9fZGVsdGEsCgkJCSBz
dHJ1Y3QgdGltZXZhbCAqX19vbGRkZWx0YSkgIHRocm93ICgpICA7CgoKIAplbnVtIF9faXRpbWVy
X3doaWNoCiAgewogICAgIAogICAgSVRJTUVSX1JFQUwgPSAwLAoKICAgICAKICAgIElUSU1FUl9W
SVJUVUFMID0gMSwKCiAgICAgCgogICAgSVRJTUVSX1BST0YgPSAyCgogIH07CgogCgpzdHJ1Y3Qg
aXRpbWVydmFsCiAgewogICAgIAogICAgc3RydWN0IHRpbWV2YWwgaXRfaW50ZXJ2YWw7CiAgICAg
CiAgICBzdHJ1Y3QgdGltZXZhbCBpdF92YWx1ZTsKICB9OwoKIAoKZXh0ZXJuIGludCBnZXRpdGlt
ZXIgIChlbnVtIF9faXRpbWVyX3doaWNoIF9fd2hpY2gsCgkJCSAgIHN0cnVjdCBpdGltZXJ2YWwg
Kl9fdmFsdWUpICB0aHJvdyAoKSAgOwoKIAoKCmV4dGVybiBpbnQgc2V0aXRpbWVyICAoZW51bSBf
X2l0aW1lcl93aGljaCBfX3doaWNoLAoJCQkgICBfX2NvbnN0IHN0cnVjdCBpdGltZXJ2YWwgKl9f
bmV3LAoJCQkgICBzdHJ1Y3QgaXRpbWVydmFsICpfX29sZCkgIHRocm93ICgpICA7CgogCgpleHRl
cm4gaW50IHV0aW1lcyAgKF9fY29uc3QgY2hhciAqX19maWxlLCBzdHJ1Y3QgdGltZXZhbCBfX3R2
cFsyXSkgIHRocm93ICgpICA7CgoKIAoKCgoKCgoKCiMgMTMzICIvdXNyL2luY2x1ZGUvc3lzL3Rp
bWUuaCIgMwoKIyAxNDIgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzCgp9IAoKCiMgNzAgIi9z
b2Z0d2FyZS90aGFsaWEvaC9zeXNwcm90b3MucCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvdW5pc3Rk
LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCmV4dGVybiAiQyIgeyAKCiAKCgog
CgoKCiAKCgogCgoKIAoKCiAKCgoKIAoKCgogCgoKCiAKCgoKIAoKCgoKCgogCgoKIAoKCgoKIAoK
CiAKCgogCgoKCiAKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNs
dWRlL2JpdHMvcG9zaXhfb3B0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgogCgoK
IAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgoKIAoKCiAKCgogCgoK
IAoKCiAKCgogCgoKCiAKCgogCgoKIAoKCiAKIAoKIAoKCiAKCiAKCgogCgoKIAoKCgoKCiMgMTc1
ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCiAKCgoKCiAKCgoKCgogCgoKCgoKCgoKCgoj
IDEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNs
dWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1saWIvYWxwaGEt
cmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoK
CgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45
MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCiAKCiAKCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2Nz
LTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCgojIDE4OCAiL3Vzci9saWIvZ2Nj
LWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMK
CgoKCgogCgoKCgogCgojIDI3MSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgv
ZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgojIDI4MyAiL3Vzci9saWIvZ2NjLWxp
Yi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgog
CgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkx
LjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxOTkg
Ii91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoKIyAyMzEgIi91c3IvaW5jbHVkZS91bmlzdGQu
aCIgMwoKCgoKCgoKCgogCgoKCgoKCiAKZXh0ZXJuIGludCBhY2Nlc3MgIChfX2NvbnN0IGNoYXIg
Kl9fbmFtZSwgaW50IF9fdHlwZSkgIHRocm93ICgpICA7CgoKCgoKCgoKIAoKCgoKCgoKIAoKCgoK
CgogCgoKCgpleHRlcm4gX19vZmZfdCBfX2xzZWVrICAoaW50IF9fZmQsIF9fb2ZmX3QgX19vZmZz
ZXQsIGludCBfX3doZW5jZSkgIHRocm93ICgpICA7CgpleHRlcm4gX19vZmZfdCBsc2VlayAgKGlu
dCBfX2ZkLCBfX29mZl90IF9fb2Zmc2V0LCBpbnQgX193aGVuY2UpICB0aHJvdyAoKSAgOwojIDI4
OSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCgoKCgoKIApleHRlcm4gaW50IF9fY2xvc2UgIChp
bnQgX19mZCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgY2xvc2UgIChpbnQgX19mZCkgIHRocm93
ICgpICA7CgogCgpleHRlcm4gc3NpemVfdCAgX19yZWFkICAoaW50IF9fZmQsIHZvaWQgKiAgX19i
dWYsIHNpemVfdCBfX25ieXRlcykgIHRocm93ICgpICA7CmV4dGVybiBzc2l6ZV90ICByZWFkICAo
aW50IF9fZmQsIHZvaWQgKiAgX19idWYsIHNpemVfdCBfX25ieXRlcykgIHRocm93ICgpICA7Cgog
CmV4dGVybiBzc2l6ZV90ICBfX3dyaXRlICAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqICBfX2J1
Ziwgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CmV4dGVybiBzc2l6ZV90ICB3cml0ZSAgKGludCBf
X2ZkLCBfX2NvbnN0IHZvaWQgKiAgX19idWYsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKIyAz
NDMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwoKCiAKCgoKZXh0ZXJuIGludCBwaXBlICAoaW50
IF9fcGlwZWRlc1syXSkgIHRocm93ICgpICA7CgogCgoKCgoKCmV4dGVybiB1bnNpZ25lZCBpbnQg
YWxhcm0gICh1bnNpZ25lZCBpbnQgX19zZWNvbmRzKSAgdGhyb3cgKCkgIDsKCiAKCgoKCgoKZXh0
ZXJuIHVuc2lnbmVkIGludCBzbGVlcCAgKHVuc2lnbmVkIGludCBfX3NlY29uZHMpICB0aHJvdyAo
KSAgOwoKCiAKCgoKZXh0ZXJuIHVuc2lnbmVkIGludCB1YWxhcm0gICh1bnNpZ25lZCBpbnQgX192
YWx1ZSwKCQkJCSB1bnNpZ25lZCBpbnQgX19pbnRlcnZhbCkgIHRocm93ICgpICA7CgogCgpleHRl
cm4gdm9pZCB1c2xlZXAgICh1bnNpZ25lZCBpbnQgX191c2Vjb25kcykgIHRocm93ICgpICA7CgoK
CiAKCmV4dGVybiBpbnQgcGF1c2UgICh2b2lkKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiBpbnQg
Y2hvd24gIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVyLAoJCSAgICAgICBf
X2dpZF90IF9fZ3JvdXApICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGludCBmY2hvd24gIChpbnQg
X19mZCwgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3JvdXApICB0aHJvdyAoKSAgOwoKCiAK
CmV4dGVybiBpbnQgbGNob3duICAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fdWlkX3QgX19vd25l
ciwKCQkJX19naWRfdCBfX2dyb3VwKSAgdGhyb3cgKCkgIDsKCgoKIApleHRlcm4gaW50IGNoZGly
ICAoX19jb25zdCBjaGFyICpfX3BhdGgpICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGludCBmY2hk
aXIgIChpbnQgX19mZCkgIHRocm93ICgpICA7CgoKIAoKCgoKCgpleHRlcm4gY2hhciAqZ2V0Y3dk
ICAoY2hhciAqX19idWYsIHNpemVfdCBfX3NpemUpICB0aHJvdyAoKSAgOwoKCgoKCgoKCgogCgoK
ZXh0ZXJuIGNoYXIgKmdldHdkICAoY2hhciAqX19idWYpICB0aHJvdyAoKSAgOwoKCgogCmV4dGVy
biBpbnQgZHVwICAoaW50IF9fZmQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IGR1cDIgIChp
bnQgX19mZCwgaW50IF9fZmQyKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGNoYXIgKipfX2Vudmly
b247CgoKCgoKIAoKZXh0ZXJuIGludCBleGVjdmUgIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hh
ciAqX19jb25zdCBfX2FyZ3ZbXSwKCQkJY2hhciAqX19jb25zdCBfX2VudnBbXSkgIHRocm93ICgp
ICA7CgoKCgoKCgoKCgogCmV4dGVybiBpbnQgZXhlY3YgIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwg
Y2hhciAqX19jb25zdCBfX2FyZ3ZbXSkgIHRocm93ICgpICA7CgogCgpleHRlcm4gaW50IGV4ZWNs
ZSAgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAuLi4pICB0aHJv
dyAoKSAgOwoKIAoKZXh0ZXJuIGludCBleGVjbCAgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2Nv
bnN0IGNoYXIgKl9fYXJnLCAuLi4pICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIGludCBleGVjdnAg
IChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSkgIHRocm93ICgp
ICA7CgogCgoKZXh0ZXJuIGludCBleGVjbHAgIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19jb25z
dCBjaGFyICpfX2FyZywgLi4uKSAgdGhyb3cgKCkgIDsKCgoKIApleHRlcm4gaW50IG5pY2UgIChp
bnQgX19pbmMpICB0aHJvdyAoKSAgOwoKCgogCmV4dGVybiB2b2lkIF9leGl0ICAoaW50IF9fc3Rh
dHVzKSAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy9jb25mbmFtZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAplbnVt
CiAgewogICAgX1BDX0xJTktfTUFYLAoKICAgIF9QQ19NQVhfQ0FOT04sCgogICAgX1BDX01BWF9J
TlBVVCwKCiAgICBfUENfTkFNRV9NQVgsCgogICAgX1BDX1BBVEhfTUFYLAoKICAgIF9QQ19QSVBF
X0JVRiwKCiAgICBfUENfQ0hPV05fUkVTVFJJQ1RFRCwKCiAgICBfUENfTk9fVFJVTkMsCgogICAg
X1BDX1ZESVNBQkxFLAoKICAgIF9QQ19TWU5DX0lPLAoKICAgIF9QQ19BU1lOQ19JTywKCiAgICBf
UENfUFJJT19JTywKCiAgICBfUENfU09DS19NQVhCVUYsCgogICAgX1BDX0ZJTEVTSVpFQklUUwoK
ICB9OwoKIAplbnVtCiAgewogICAgX1NDX0FSR19NQVgsCgogICAgX1NDX0NISUxEX01BWCwKCiAg
ICBfU0NfQ0xLX1RDSywKCiAgICBfU0NfTkdST1VQU19NQVgsCgogICAgX1NDX09QRU5fTUFYLAoK
ICAgIF9TQ19TVFJFQU1fTUFYLAoKICAgIF9TQ19UWk5BTUVfTUFYLAoKICAgIF9TQ19KT0JfQ09O
VFJPTCwKCiAgICBfU0NfU0FWRURfSURTLAoKICAgIF9TQ19SRUFMVElNRV9TSUdOQUxTLAoKICAg
IF9TQ19QUklPUklUWV9TQ0hFRFVMSU5HLAoKICAgIF9TQ19USU1FUlMsCgogICAgX1NDX0FTWU5D
SFJPTk9VU19JTywKCiAgICBfU0NfUFJJT1JJVElaRURfSU8sCgogICAgX1NDX1NZTkNIUk9OSVpF
RF9JTywKCiAgICBfU0NfRlNZTkMsCgogICAgX1NDX01BUFBFRF9GSUxFUywKCiAgICBfU0NfTUVN
TE9DSywKCiAgICBfU0NfTUVNTE9DS19SQU5HRSwKCiAgICBfU0NfTUVNT1JZX1BST1RFQ1RJT04s
CgogICAgX1NDX01FU1NBR0VfUEFTU0lORywKCiAgICBfU0NfU0VNQVBIT1JFUywKCiAgICBfU0Nf
U0hBUkVEX01FTU9SWV9PQkpFQ1RTLAoKICAgIF9TQ19BSU9fTElTVElPX01BWCwKCiAgICBfU0Nf
QUlPX01BWCwKCiAgICBfU0NfQUlPX1BSSU9fREVMVEFfTUFYLAoKICAgIF9TQ19ERUxBWVRJTUVS
X01BWCwKCiAgICBfU0NfTVFfT1BFTl9NQVgsCgogICAgX1NDX01RX1BSSU9fTUFYLAoKICAgIF9T
Q19WRVJTSU9OLAoKICAgIF9TQ19QQUdFU0laRSwKCgogICAgX1NDX1JUU0lHX01BWCwKCiAgICBf
U0NfU0VNX05TRU1TX01BWCwKCiAgICBfU0NfU0VNX1ZBTFVFX01BWCwKCiAgICBfU0NfU0lHUVVF
VUVfTUFYLAoKICAgIF9TQ19USU1FUl9NQVgsCgoKICAgICAKCiAgICBfU0NfQkNfQkFTRV9NQVgs
CgogICAgX1NDX0JDX0RJTV9NQVgsCgogICAgX1NDX0JDX1NDQUxFX01BWCwKCiAgICBfU0NfQkNf
U1RSSU5HX01BWCwKCiAgICBfU0NfQ09MTF9XRUlHSFRTX01BWCwKCiAgICBfU0NfRVFVSVZfQ0xB
U1NfTUFYLAoKICAgIF9TQ19FWFBSX05FU1RfTUFYLAoKICAgIF9TQ19MSU5FX01BWCwKCiAgICBf
U0NfUkVfRFVQX01BWCwKCiAgICBfU0NfQ0hBUkNMQVNTX05BTUVfTUFYLAoKCiAgICBfU0NfMl9W
RVJTSU9OLAoKICAgIF9TQ18yX0NfQklORCwKCiAgICBfU0NfMl9DX0RFViwKCiAgICBfU0NfMl9G
T1JUX0RFViwKCiAgICBfU0NfMl9GT1JUX1JVTiwKCiAgICBfU0NfMl9TV19ERVYsCgogICAgX1ND
XzJfTE9DQUxFREVGLAoKCiAgICBfU0NfUElJLAoKICAgIF9TQ19QSUlfWFRJLAoKICAgIF9TQ19Q
SUlfU09DS0VULAoKICAgIF9TQ19QSUlfSU5URVJORVQsCgogICAgX1NDX1BJSV9PU0ksCgogICAg
X1NDX1BPTEwsCgogICAgX1NDX1NFTEVDVCwKCiAgICBfU0NfVUlPX01BWElPViwKCiAgICBfU0Nf
UElJX0lOVEVSTkVUX1NUUkVBTSwKCiAgICBfU0NfUElJX0lOVEVSTkVUX0RHUkFNLAoKICAgIF9T
Q19QSUlfT1NJX0NPVFMsCgogICAgX1NDX1BJSV9PU0lfQ0xUUywKCiAgICBfU0NfUElJX09TSV9N
LAoKICAgIF9TQ19UX0lPVl9NQVgsCgoKICAgICAKICAgIF9TQ19USFJFQURTLAoKICAgIF9TQ19U
SFJFQURfU0FGRV9GVU5DVElPTlMsCgogICAgX1NDX0dFVEdSX1JfU0laRV9NQVgsCgogICAgX1ND
X0dFVFBXX1JfU0laRV9NQVgsCgogICAgX1NDX0xPR0lOX05BTUVfTUFYLAoKICAgIF9TQ19UVFlf
TkFNRV9NQVgsCgogICAgX1NDX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMsCgogICAgX1ND
X1RIUkVBRF9LRVlTX01BWCwKCiAgICBfU0NfVEhSRUFEX1NUQUNLX01JTiwKCiAgICBfU0NfVEhS
RUFEX1RIUkVBRFNfTUFYLAoKICAgIF9TQ19USFJFQURfQVRUUl9TVEFDS0FERFIsCgogICAgX1ND
X1RIUkVBRF9BVFRSX1NUQUNLU0laRSwKCiAgICBfU0NfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJ
TkcsCgogICAgX1NDX1RIUkVBRF9QUklPX0lOSEVSSVQsCgogICAgX1NDX1RIUkVBRF9QUklPX1BS
T1RFQ1QsCgogICAgX1NDX1RIUkVBRF9QUk9DRVNTX1NIQVJFRCwKCgogICAgX1NDX05QUk9DRVNT
T1JTX0NPTkYsCgogICAgX1NDX05QUk9DRVNTT1JTX09OTE4sCgogICAgX1NDX1BIWVNfUEFHRVMs
CgogICAgX1NDX0FWUEhZU19QQUdFUywKCiAgICBfU0NfQVRFWElUX01BWCwKCiAgICBfU0NfUEFT
U19NQVgsCgoKICAgIF9TQ19YT1BFTl9WRVJTSU9OLAoKICAgIF9TQ19YT1BFTl9YQ1VfVkVSU0lP
TiwKCiAgICBfU0NfWE9QRU5fVU5JWCwKCiAgICBfU0NfWE9QRU5fQ1JZUFQsCgogICAgX1NDX1hP
UEVOX0VOSF9JMThOLAoKICAgIF9TQ19YT1BFTl9TSE0sCgoKICAgIF9TQ18yX0NIQVJfVEVSTSwK
CiAgICBfU0NfMl9DX1ZFUlNJT04sCgogICAgX1NDXzJfVVBFLAoKCiAgICBfU0NfWE9QRU5fWFBH
MiwKCiAgICBfU0NfWE9QRU5fWFBHMywKCiAgICBfU0NfWE9QRU5fWFBHNCwKCgogICAgX1NDX0NI
QVJfQklULAoKICAgIF9TQ19DSEFSX01BWCwKCiAgICBfU0NfQ0hBUl9NSU4sCgogICAgX1NDX0lO
VF9NQVgsCgogICAgX1NDX0lOVF9NSU4sCgogICAgX1NDX0xPTkdfQklULAoKICAgIF9TQ19XT1JE
X0JJVCwKCiAgICBfU0NfTUJfTEVOX01BWCwKCiAgICBfU0NfTlpFUk8sCgogICAgX1NDX1NTSVpF
X01BWCwKCiAgICBfU0NfU0NIQVJfTUFYLAoKICAgIF9TQ19TQ0hBUl9NSU4sCgogICAgX1NDX1NI
UlRfTUFYLAoKICAgIF9TQ19TSFJUX01JTiwKCiAgICBfU0NfVUNIQVJfTUFYLAoKICAgIF9TQ19V
SU5UX01BWCwKCiAgICBfU0NfVUxPTkdfTUFYLAoKICAgIF9TQ19VU0hSVF9NQVgsCgoKICAgIF9T
Q19OTF9BUkdNQVgsCgogICAgX1NDX05MX0xBTkdNQVgsCgogICAgX1NDX05MX01TR01BWCwKCiAg
ICBfU0NfTkxfTk1BWCwKCiAgICBfU0NfTkxfU0VUTUFYLAoKICAgIF9TQ19OTF9URVhUTUFYLAoK
CiAgICBfU0NfWEJTNV9JTFAzMl9PRkYzMiwKCiAgICBfU0NfWEJTNV9JTFAzMl9PRkZCSUcsCgog
ICAgX1NDX1hCUzVfTFA2NF9PRkY2NCwKCiAgICBfU0NfWEJTNV9MUEJJR19PRkZCSUcsCgoKICAg
IF9TQ19YT1BFTl9MRUdBQ1ksCgogICAgX1NDX1hPUEVOX1JFQUxUSU1FLAoKICAgIF9TQ19YT1BF
Tl9SRUFMVElNRV9USFJFQURTCgogIH07CgoKCgogCmVudW0KICB7CiAgICBfQ1NfUEFUSAkJCSAK
CgojIDM3MCAiL3Vzci9pbmNsdWRlL2JpdHMvY29uZm5hbWUuaCIgMwoKCiMgNDA2ICIvdXNyL2lu
Y2x1ZGUvYml0cy9jb25mbmFtZS5oIiAzCgogIH07CgojIDQ5NyAiL3Vzci9pbmNsdWRlL3VuaXN0
ZC5oIiAyIDMKCgogCmV4dGVybiBsb25nIGludCBwYXRoY29uZiAgKF9fY29uc3QgY2hhciAqX19w
YXRoLCBpbnQgX19uYW1lKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGxvbmcgaW50IGZwYXRoY29u
ZiAgKGludCBfX2ZkLCBpbnQgX19uYW1lKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGxvbmcgaW50
IHN5c2NvbmYgIChpbnQgX19uYW1lKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiBzaXplX3QgY29u
ZnN0ciAgKGludCBfX25hbWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19sZW4pICB0aHJvdyAoKSAg
OwoKCgogCmV4dGVybiBfX3BpZF90IF9fZ2V0cGlkICAodm9pZCkgIHRocm93ICgpICA7CmV4dGVy
biBfX3BpZF90IGdldHBpZCAgKHZvaWQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gX19waWRfdCBn
ZXRwcGlkICAodm9pZCkgIHRocm93ICgpICA7CgogCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGdycCAg
KHZvaWQpICB0aHJvdyAoKSAgOwoKCgoKCgoKCiAKZXh0ZXJuIF9fcGlkX3QgX19nZXRwZ2lkICAo
X19waWRfdCBfX3BpZCkgIHRocm93ICgpICA7CgoKCgoKIAoKCmV4dGVybiBpbnQgX19zZXRwZ2lk
ICAoX19waWRfdCBfX3BpZCwgX19waWRfdCBfX3BnaWQpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50
IHNldHBnaWQgIChfX3BpZF90IF9fcGlkLCBfX3BpZF90IF9fcGdpZCkgIHRocm93ICgpICA7CgoK
IAoKCgoKCgoKCgoKCiAKCmV4dGVybiBpbnQgc2V0cGdycCAgKHZvaWQpICB0aHJvdyAoKSAgOwoK
IyA1NzMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwoKCgogCgoKZXh0ZXJuIF9fcGlkX3Qgc2V0
c2lkICAodm9pZCkgIHRocm93ICgpICA7CgoKCgoKCiAKZXh0ZXJuIF9fdWlkX3QgZ2V0dWlkICAo
dm9pZCkgIHRocm93ICgpICA7CgogCmV4dGVybiBfX3VpZF90IGdldGV1aWQgICh2b2lkKSAgdGhy
b3cgKCkgIDsKCiAKZXh0ZXJuIF9fZ2lkX3QgZ2V0Z2lkICAodm9pZCkgIHRocm93ICgpICA7Cgog
CmV4dGVybiBfX2dpZF90IGdldGVnaWQgICh2b2lkKSAgdGhyb3cgKCkgIDsKCiAKCgpleHRlcm4g
aW50IGdldGdyb3VwcyAgKGludCBfX3NpemUsIF9fZ2lkX3QgX19saXN0W10pICB0aHJvdyAoKSAg
OwoKCgoKCgogCgoKCmV4dGVybiBpbnQgc2V0dWlkICAoX191aWRfdCBfX3VpZCkgIHRocm93ICgp
ICA7CgoKIAoKZXh0ZXJuIGludCBzZXRyZXVpZCAgKF9fdWlkX3QgX19ydWlkLCBfX3VpZF90IF9f
ZXVpZCkgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJuIGludCBzZXRldWlkICAoX191aWRfdCBfX3Vp
ZCkgIHRocm93ICgpICA7CgoKIAoKCgpleHRlcm4gaW50IHNldGdpZCAgKF9fZ2lkX3QgX19naWQp
ICB0aHJvdyAoKSAgOwoKCiAKCmV4dGVybiBpbnQgc2V0cmVnaWQgIChfX2dpZF90IF9fcmdpZCwg
X19naWRfdCBfX2VnaWQpICB0aHJvdyAoKSAgOwoKCgogCmV4dGVybiBpbnQgc2V0ZWdpZCAgKF9f
Z2lkX3QgX19naWQpICB0aHJvdyAoKSAgOwoKCgogCgoKZXh0ZXJuIF9fcGlkX3QgX19mb3JrICAo
dm9pZCkgIHRocm93ICgpICA7CmV4dGVybiBfX3BpZF90IGZvcmsgICh2b2lkKSAgdGhyb3cgKCkg
IDsKCgogCgoKCmV4dGVybiBfX3BpZF90IHZmb3JrICAodm9pZCkgIHRocm93ICgpICA7CgoKCiAK
CmV4dGVybiBjaGFyICp0dHluYW1lICAoaW50IF9fZmQpICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJu
IGludCB0dHluYW1lX3IgIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1Zmxlbikg
IHRocm93ICgpICA7CgogCgpleHRlcm4gaW50IGlzYXR0eSAgKGludCBfX2ZkKSAgdGhyb3cgKCkg
IDsKCgogCgpleHRlcm4gaW50IHR0eXNsb3QgICh2b2lkKSAgdGhyb3cgKCkgIDsKCgoKIApleHRl
cm4gaW50IGxpbmsgIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19jb25zdCBjaGFyICpfX3RvKSAg
dGhyb3cgKCkgIDsKCgogCmV4dGVybiBpbnQgc3ltbGluayAgKF9fY29uc3QgY2hhciAqX19mcm9t
LCBfX2NvbnN0IGNoYXIgKl9fdG8pICB0aHJvdyAoKSAgOwoKIAoKCmV4dGVybiBpbnQgcmVhZGxp
bmsgIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikgIHRo
cm93ICgpICA7CgoKIApleHRlcm4gaW50IHVubGluayAgKF9fY29uc3QgY2hhciAqX19uYW1lKSAg
dGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBybWRpciAgKF9fY29uc3QgY2hhciAqX19wYXRoKSAg
dGhyb3cgKCkgIDsKCgogCmV4dGVybiBfX3BpZF90IHRjZ2V0cGdycCAgKGludCBfX2ZkKSAgdGhy
b3cgKCkgIDsKCiAKZXh0ZXJuIGludCB0Y3NldHBncnAgIChpbnQgX19mZCwgX19waWRfdCBfX3Bn
cnBfaWQpICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGNoYXIgKmdldGxvZ2luICAodm9pZCkgIHRo
cm93ICgpICA7CgoKCgoKCgoKIApleHRlcm4gaW50IHNldGxvZ2luICAoX19jb25zdCBjaGFyICpf
X25hbWUpICB0aHJvdyAoKSAgOwoKCgoKIAoKCgojIDEgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIg
MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCiAKCgoKCgpleHRl
cm4gY2hhciAqb3B0YXJnOwoKIAoKCgoKCgoKCgoKCmV4dGVybiBpbnQgb3B0aW5kOwoKIAoKCmV4
dGVybiBpbnQgb3B0ZXJyOwoKIAoKZXh0ZXJuIGludCBvcHRvcHQ7CgojIDEwMiAiL3Vzci9pbmNs
dWRlL2dldG9wdC5oIiAzCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgpleHRlcm4g
aW50IGdldG9wdCAoaW50IF9fYXJnYywgY2hhciAqY29uc3QgKl9fYXJndiwgY29uc3QgY2hhciAq
X19zaG9ydG9wdHMpOwoKCgoKIyAxNTEgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMwoKIyAxNjAg
Ii91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMwoKCgp9CgoKIAoKCgojIDcyNCAiL3Vzci9pbmNsdWRl
L3VuaXN0ZC5oIiAyIDMKCgoKCgoKIAoKCmV4dGVybiBpbnQgZ2V0aG9zdG5hbWUgIChjaGFyICpf
X25hbWUsIHNpemVfdCBfX2xlbikgIHRocm93ICgpICA7CgogCgpleHRlcm4gaW50IHNldGhvc3Ru
YW1lICAoX19jb25zdCBjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgIHRocm93ICgpICA7Cgog
CgpleHRlcm4gaW50IHNldGhvc3RpZCAgKGxvbmcgaW50IF9faWQpICB0aHJvdyAoKSAgOwoKCiAK
CgpleHRlcm4gaW50IGdldGRvbWFpbm5hbWUgIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikg
IHRocm93ICgpICA7CmV4dGVybiBpbnQgc2V0ZG9tYWlubmFtZSAgKF9fY29uc3QgY2hhciAqX19u
YW1lLCBzaXplX3QgX19sZW4pICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGludCBmc3luYyAgKGlu
dCBfX2ZkKSAgdGhyb3cgKCkgIDsKCgogCgoKZXh0ZXJuIGludCB2aGFuZ3VwICAodm9pZCkgIHRo
cm93ICgpICA7CgogCmV4dGVybiBpbnQgcmV2b2tlICAoX19jb25zdCBjaGFyICpfX2ZpbGUpICB0
aHJvdyAoKSAgOwoKCiAKCgoKCmV4dGVybiBpbnQgcHJvZmlsICAodW5zaWduZWQgc2hvcnQgaW50
ICpfX3NhbXBsZV9idWZmZXIsIHNpemVfdCBfX3NpemUsCgkJCXNpemVfdCBfX29mZnNldCwgdW5z
aWduZWQgaW50IF9fc2NhbGUpICB0aHJvdyAoKSAgOwoKCiAKCgpleHRlcm4gaW50IGFjY3QgIChf
X2NvbnN0IGNoYXIgKl9fbmFtZSkgIHRocm93ICgpICA7CgogCgpleHRlcm4gaW50IGNocm9vdCAg
KF9fY29uc3QgY2hhciAqX19wYXRoKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiBjaGFyICpnZXR1
c2Vyc2hlbGwgICh2b2lkKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIHZvaWQgZW5kdXNlcnNoZWxsICAo
dm9pZCkgIHRocm93ICgpICA7ICAKZXh0ZXJuIHZvaWQgc2V0dXNlcnNoZWxsICAodm9pZCkgIHRo
cm93ICgpICA7ICAKCgogCgpleHRlcm4gY2hhciAqZ2V0cGFzcyAgKF9fY29uc3QgY2hhciAqX19w
cm9tcHQpICB0aHJvdyAoKSAgOwoKIAoKCmV4dGVybiBpbnQgZGFlbW9uICAoaW50IF9fbm9jaGRp
ciwgaW50IF9fbm9jbG9zZSkgIHRocm93ICgpICA7CgoKCgoKCiAKZXh0ZXJuIGxvbmcgaW50IGdl
dGhvc3RpZCAgKHZvaWQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHN5bmMgICh2b2lkKSAg
dGhyb3cgKCkgIDsKCgogCgpleHRlcm4gaW50IF9fZ2V0cGFnZXNpemUgICh2b2lkKSAgdGhyb3cg
KCkgIDsKZXh0ZXJuIGludCBnZXRwYWdlc2l6ZSAgKHZvaWQpICB0aHJvdyAoKSAgOwoKCiAKCmV4
dGVybiBpbnQgdHJ1bmNhdGUgIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19vZmZfdCBfX2xlbmd0
aCkgIHRocm93ICgpICA7CiMgODI3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKCgoKCgogCmV4
dGVybiBpbnQgX19mdHJ1bmNhdGUgIChpbnQgX19mZCwgX19vZmZfdCBfX2xlbmd0aCkgIHRocm93
ICgpICA7CgpleHRlcm4gaW50IGZ0cnVuY2F0ZSAgKGludCBfX2ZkLCBfX29mZl90IF9fbGVuZ3Ro
KSAgdGhyb3cgKCkgIDsKCgoKCgoKCgoKCgoKCiAKCmV4dGVybiBpbnQgZ2V0ZHRhYmxlc2l6ZSAg
KHZvaWQpICB0aHJvdyAoKSAgOwoKCgoKCgogCgpleHRlcm4gaW50IGJyayAgKHZvaWQgKiAgX19h
ZGRyKSAgdGhyb3cgKCkgIDsKCgojIDEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxp
bnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91
c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0
ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvYWxwaGEt
cmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRl
ZiBsb25nIGludCBwdHJkaWZmX3Q7CgoKCgoKCgoKCiAKCgoKCiAKCiAKCiMgMTkwICIvdXNyL2xp
Yi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYu
aCIgMwoKCgogCgoKCgogCgojIDI3MSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGlu
dXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgojIDI4MyAiL3Vzci9saWIvZ2Nj
LWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMK
CgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0y
LjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA4
NjMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoKIAoKCgpleHRlcm4gdm9pZCAqICBfX3Ni
cmsgIChwdHJkaWZmX3QgX19kZWx0YSkgIHRocm93ICgpICA7CmV4dGVybiB2b2lkICogIHNicmsg
IChwdHJkaWZmX3QgX19kZWx0YSkgIHRocm93ICgpICA7CgoKCgogCgoKCgoKCgoKCmV4dGVybiBs
b25nIGludCBzeXNjYWxsICAobG9uZyBpbnQgX19zeXNubywgLi4uKSAgdGhyb3cgKCkgIDsKCgoK
CgogCgoKCiAKCgoKCgoKCgoKZXh0ZXJuIGludCBsb2NrZiAgKGludCBfX2ZkLCBpbnQgX19jbWQs
IF9fb2ZmX3QgX19sZW4pICB0aHJvdyAoKSAgOwoKCgoKCgoKCgoKCgoKCiMgOTQwICIvdXNyL2lu
Y2x1ZGUvdW5pc3RkLmgiIDMKCgoKIAoKZXh0ZXJuIGludCBmZGF0YXN5bmMgIChpbnQgX19maWxk
ZXMpICB0aHJvdyAoKSAgOwoKCgogCgojIDk2OCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCgoK
CiAKCiMgOTgzICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKCgoKCiAKCiAKCgoKCgoKCgoKZXh0
ZXJuIGludCBwdGhyZWFkX2F0Zm9yayAgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwKCQkJCXZv
aWQgKCpfX3BhcmVudCkgKHZvaWQpLAoJCQkJdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgIHRocm93
ICgpICA7CgoKfSAKCgojIDcxICIvc29mdHdhcmUvdGhhbGlhL2gvc3lzcHJvdG9zLnAiIDIKCgp2
b2lkIF9jbGVhbnVwICh2b2lkKTsKIAoKIAoKCmludCBmbG9jayhpbnQsIGludCk7CgogCmludCBC
U0RnZXRwZ3JwKGludCBwaWQpOwoKCn07CgoKIyAyMDEgIi9zb2Z0d2FyZS90aGFsaWEvaC9zdGR0
eXBlcy5oIiAyCgoKCgoKCgoKCgoKCgoKCgojIDIyICJucmh5L05SSFlfQWNjZXNzLmMiIDIKCiMg
MSAiaC9QbHVnaW5UZW1wbGF0ZS5oIiAxCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAK
IAoKY2xhc3MgUGx1Z2luQ2xhc3MgewpwdWJsaWM6CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgICpH
ZXROYW1lICAgICgpID0gMDsgIAogICAgdmlydHVhbCBjb25zdCBjaGFyICAqR2V0QWxpYXNlcyAo
KSB7IHJldHVybiAiIjsgfQogICAgdmlydHVhbCB+UGx1Z2luQ2xhc3MgICAgICAgICAgICAoKSB7
fTsKfTsKCiAKdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFBsdWdpbkVudHJ5OwoKIAogCiAKIAoK
IAogCiAKIAogCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgUGx1Z2luVGFibGUgewog
ICAgZnJpZW5kIGNsYXNzIFBsdWdpbkVudHJ5PFQ+Owpwcml2YXRlOgogICAgCiAgICBzdGF0aWMg
VCAqKnRhYmxlOwogICAgc3RhdGljIGludCBtYXhFbnRyaWVzOwogICAgc3RhdGljIGludCBuZXh0
RW50cnk7CiAgICBzdGF0aWMgaW50IG51bUVudHJpZXM7CiAgICBzdGF0aWMgQk9PTEVBTiBjaGVj
a1RhYmxlU2l6ZSAgICAgICAoKTsKCnB1YmxpYzoKICAgIAogICAgc3RhdGljIGludCBHZXRGaXJz
dEluZGV4ICAgICAgICAgICAgKCkgeyByZXR1cm4gR2V0TmV4dEluZGV4ICgwKTsgfQogICAgc3Rh
dGljIGludCBHZXROZXh0SW5kZXggICAgICAgICAgICAgKGludCk7CiAgICBzdGF0aWMgaW50IEdl
dE51bUFjdGl2ZUVudHJpZXMgICAgICAoKTsKICAgIHN0YXRpYyBpbnQgR2V0TmV4dEluZGV4ICAg
ICAgICAgICAgIChjb25zdCBjaGFyICosIGludCk7CiAgICBzdGF0aWMgaW50IEdldEluZGV4ICAg
ICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKTsKICAgIHN0YXRpYyBpbnQgR2V0RXhhY3RJbmRl
eCAgICAgICAgICAgIChjb25zdCBjaGFyICpuYW1lKTsKICAgIHN0YXRpYyBUICpHZXRFbnRyeSAg
ICAgICAgICAgICAgICAgIChpbnQpOwogICAgc3RhdGljIFQgKkdldEVudHJ5ICAgICAgICAgICAg
ICAgICAgKGNvbnN0IGNoYXIgKik7CiAgICBzdGF0aWMgVCAqR2V0RXhhY3RFbnRyeSAgICAgICAg
ICAgICAoY29uc3QgY2hhciAqKTsKICAgIHN0YXRpYyBjb25zdCBjaGFyICpDaGVja0FsaWFzICAg
ICAgIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICphbGlhc2VzKTsKICAgIHN0YXRpYyBp
bnQgR2V0TnVtRW50cmllcyAgICAgICAgICAgICgpIHsgcmV0dXJuIChudW1FbnRyaWVzKTsgfQog
ICAgc3RhdGljIGludCBHZXRUb3RhbFNpemUgICAgICAgICAgICAgKCkgeyByZXR1cm4gKG5leHRF
bnRyeSk7IH0KCiAgICBzdGF0aWMgY2hhciAqR2V0QWxsTWF0Y2hlcyAgICAgICAgICAoY29uc3Qg
Y2hhciAqbmFtZSk7CiAgICBzdGF0aWMgaW50IEdldEFsaWFzSW5kZXggICAgICAgICAgICAoY29u
c3QgY2hhciAqKTsKCiAgICAKICAgIFQgJm9wZXJhdG9yIFtdICAgICAgICAgICAgICAgICAgICAg
IChjb25zdCBjaGFyICpuYW1lKTsKICAgIFQgJm9wZXJhdG9yIFtdICAgICAgICAgICAgICAgICAg
ICAgIChpbnQgaW5kZXgpOwp9OyAgCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgUGx1Z2luRW50
cnkgewpwdWJsaWM6CiAgICAKICAgIGNvbnN0IGludCBJbmRleDsKCiAgICAKICAgIAogICAgUGx1
Z2luRW50cnkgKFQgKik7CiAgICB+UGx1Z2luRW50cnkgKCk7CgogICAgCiAgICBUICZvcGVyYXRv
ciAqKCkgIHsgcmV0dXJuICgqKFBsdWdpblRhYmxlPFQ+Ojp0YWJsZVtJbmRleF0pKTsgfQogICAg
VCAqb3BlcmF0b3IgLT4oKSB7IHJldHVybiAoUGx1Z2luVGFibGU8VD46OnRhYmxlW0luZGV4XSk7
IH0KICAgIG9wZXJhdG9yIGludCgpICAgeyByZXR1cm4gSW5kZXg7IH0KfTsgIAoKCiMgMSAiaC9Q
bHVnaW5UZW1wbGF0ZS5jIiAxCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICJoL1BsdWdpblRl
bXBsYXRlLmgiIDEKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTA5ICJoL1BsdWdpblRlbXBsYXRl
LmgiCgojIDIzICJoL1BsdWdpblRlbXBsYXRlLmMiIDIKCiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9o
L3V0aWwuaCIgMQoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3NvZnR3YXJlL3Ro
YWxpYS9oL3N0ZHR5cGVzLmgiIDEKCiAKCgoKCgoKCgoKCgoKCgoKCgojIDIwMyAiL3NvZnR3YXJl
L3RoYWxpYS9oL3N0ZHR5cGVzLmgiCgoKCgoKCgoKCgoKCgoKIyAyOSAiL3NvZnR3YXJlL3RoYWxp
YS9oL3V0aWwuaCIgMgoKIyAxICIvc29mdHdhcmUvdGhhbGlhL2gvbWFjaGluZS5oIiAxCgogCgoK
CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgogCgoKCiAKCgoKCgoKCgoK
CgoKCgoKIyAzMCAiL3NvZnR3YXJlL3RoYWxpYS9oL3V0aWwuaCIgMgoKCiMgMSAiL3NvZnR3YXJl
L3RoYWxpYS9oL21lbW0uaCIgMQogCgoKCgoKCgojIDEgIi9zb2Z0d2FyZS90aGFsaWEvaC9zdGR0
eXBlcy5oIiAxCgogCgoKCgoKCgoKCgoKCgoKCgoKIyAyMDMgIi9zb2Z0d2FyZS90aGFsaWEvaC9z
dGR0eXBlcy5oIgoKCgoKCgoKCgoKCgoKCiMgOSAiL3NvZnR3YXJlL3RoYWxpYS9oL21lbW0uaCIg
MgoKCgp0eXBlZGVmIHN0cnVjdAogICAgewogICAgSU5UICAgICBvcGNvZGU7CiAgICBJTlQgICAg
IGtleTsKICAgIElOVCAgICAgdXNlcjsKICAgIElOVCAgICAgam9iOwogICAgSU5UICAgICBzaXpl
OwogICAgTE9ORyAgICBjdGltZTsKICAgIFNUUklORyAgZGF0YUZpbGU7CiAgICBTVFJJTkcgIGZp
bGU7CiAgICBTVFJJTkcgIHR5cGU7CiAgICB9ICBNRU1NX0lURU07CgoKCgogCgoKCgoKCgogCgoK
CgoKCgoKIAoKCiAKCgogCgoKIAoKCiAKCgoKCgoKCgoKIAoKCiMgMzIgIi9zb2Z0d2FyZS90aGFs
aWEvaC91dGlsLmgiIDIKCiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9oL2Rpc2tjLmgiIDEKIAoKCgoK
CiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9oL3N0ZHR5cGVzLmgiIDEKCiAKCgoKCgoKCgoKCgoKCgoK
CgojIDIwMyAiL3NvZnR3YXJlL3RoYWxpYS9oL3N0ZHR5cGVzLmgiCgoKCgoKCgoKCgoKCgoKIyA3
ICIvc29mdHdhcmUvdGhhbGlhL2gvZGlza2MuaCIgMgoKCgp0eXBlZGVmIHN0cnVjdAogICAgewog
ICAgSU5UICAgICBvcGNvZGU7CiAgICBJTlQgICAgIGtleTsKICAgIElOVCAgICAgdXNlcjsKICAg
IElOVCAgICAgam9iOwogICAgSU5UICAgICBzaXplOwogICAgTE9ORyAgICBjdGltZTsKICAgIExP
TkcgICAgYWNjZXNzVGltZTsKICAgIFNUUklORyAgY2FjaGVkRmlsZTsKICAgIFNUUklORyAgZGF0
YUZpbGU7CiAgICBTVFJJTkcgIGZpbGU7CiAgICB9ICBESVNLQ19GSUxFOwoKCgogCgoKCgogCgoK
CgoKCgoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgoKIyAzMyAiL3Nv
ZnR3YXJlL3RoYWxpYS9oL3V0aWwuaCIgMgoKCiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9oL3BhcnNl
LmgiIDEKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgT19M
SVNUCiAgICB7IAogICAgY2hhciAgICAqZmxhZzsKICAgIGludCAgICAgbWluaW11bTsKICAgIGlu
dCAgICAgbWF4aW11bTsKICAgIGludCAgICAgdHlwZTsKICAgIGNoYXIgICAgKmRlc3RpbmF0aW9u
OwogICAgaW50ICAgICBjb3VudDsKICAgIGludCAgICAgaGl0Q291bnQ7CiAgICBjaGFyICAgICoq
cHJvbXB0czsKICAgIH0gT19MSVNUOwoKCiMgMzUgIi9zb2Z0d2FyZS90aGFsaWEvaC91dGlsLmgi
IDIKCiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9oL25ldGZpbGUuaCIgMQoKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIyAxICIvc29mdHdhcmUvdGhhbGlhL2gvc3RkdHlwZXMuaCIgMQoKIAoKCgoK
CgoKCgoKCgoKCgoKCiMgMjAzICIvc29mdHdhcmUvdGhhbGlhL2gvc3RkdHlwZXMuaCIKCgoKCgoK
CgoKCgoKCgojIDI4ICIvc29mdHdhcmUvdGhhbGlhL2gvbmV0ZmlsZS5oIiAyCgoKCgogCnR5cGVk
ZWYgc3RydWN0IE5FVEZJTEVfQ09NTUFORAp7CgogICAgX19pbnQzMl90ICAgICAgIG9wY29kZTsK
ICAgIGNoYXIgICAgICAgICAgICBmaWxlbmFtZVsyNTZdOwogICAgdm9pZCAgICAgICAgICAgICpm
cDsgICAgCiAgICBjaGFyICAgICAgICAgICAgY1BhcmFtWzhdOwogICAgX19pbnQzMl90ICAgICAg
IGlQYXJhbTE7CiAgICBfX2ludDMyX3QgICAgICAgaVBhcmFtMjsKCn0gIE5FVEZJTEVfQ09NTUFO
RDsKCgogCgoKc3RydWN0IF9uZXRmaWxlX2ZpbGUKewoKICAgIEZJTEUgICAgKmZwOyAgICAgICAg
ICAgICAgICAgCiAgICBpbnQgICAgIHNvY2s7ICAgICAgICAgICAgICAgIAogICAgaW50ICAgICBj
aHVua1NpemU7ICAgICAgICAgICAKICAgIGludCAgICAgYnVmZmVyU2l6ZTsgICAgICAgICAgCiAg
ICBpbnQgICAgIGN1cnJlbnRCdWZMb2M7ICAgICAgIAogICAgaW50ICAgICBmaWxlQmFzZUxvYzsg
ICAgICAgICAKICAgIGNoYXIgICAgYWNjZXNzWzhdOyAgICAgICAgICAgCiAgICBjaGFyICAgICpi
dWZmZXI7ICAgICAgICAgICAgIAoKfTsKdHlwZWRlZiBzdHJ1Y3QgX25ldGZpbGVfZmlsZSBORVRG
SUxFX0ZJTEU7CgoKCgogCgoKCgoKCgoKCiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9oL25ldGZpbGUu
cCIgMQogCgoKCgoKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgogCgp2b2lkICAgIE5FVEZJTEVfRW5h
YmxlKAogICAgICAgIHZvaWQKCSk7Cgp2b2lkICAgIE5FVEZJTEVfRGlzYWJsZSgKICAgICAgICB2
b2lkCgkpOwoKTkVURklMRV9GSUxFICAgICpORVRGSUxFX0ZvcGVuKAogICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAgKmZpbGVuYW1lLAogICAgICAgICAgICAgICAgY29uc3QgY2hhciAgKmFjY2Vz
cwoJKTsKCmludCAgICAgTkVURklMRV9GcmVhZCgKICAgICAgICB2b2lkICAgICAgICAgICAgKnB0
ciwKICAgICAgICBzaXplX3QgICAgICAgICAgc2l6ZSwKICAgICAgICBzaXplX3QgICAgICAgICAg
bml0ZW1zLAogICAgICAgIE5FVEZJTEVfRklMRSAgICAqbmZwCgkpOwoKaW50ICAgICBORVRGSUxF
X0Z3cml0ZSgKICAgICAgICBjb25zdCB2b2lkICAgICAgKnB0ciwKICAgICAgICBzaXplX3QgICAg
ICAgICAgc2l6ZSwKICAgICAgICBzaXplX3QgICAgICAgICAgbml0ZW1zLAogICAgICAgIE5FVEZJ
TEVfRklMRSAgICAqbmZwCgkpOwoKaW50ICAgICBORVRGSUxFX0ZwdXRjKAogICAgICAgIGludCAg
ICAgICAgICAgICB0aGVDaGFyLAogICAgICAgIE5FVEZJTEVfRklMRSAgICAqbmZwCgkpOwoKY2hh
ciAgICAgICAgKk5FVEZJTEVfRmdldHMoCiAgICAgICAgY2hhciAgICAgICAgICAgICpzdHJpbmcs
CiAgICAgICAgaW50ICAgICAgICAgICAgIG1heCwKICAgICAgICBORVRGSUxFX0ZJTEUgICAgKm5m
cAoJKTsKCmludCAgICAgTkVURklMRV9GcHV0cygKICAgICAgICBjb25zdCBjaGFyICAgICAgICAg
ICpzdHJpbmcsCiAgICAgICAgTkVURklMRV9GSUxFICAgICpuZnAKCSk7CgppbnQgICAgIE5FVEZJ
TEVfRnNlZWsoCiAgICAgICAgTkVURklMRV9GSUxFICAgICpuZnAsCiAgICAgICAgaW50ICAgICAg
ICAgICAgIG9mZnNldCwKICAgICAgICBpbnQgICAgICAgICAgICAgd2hlbmNlCgkpOwoKaW50ICAg
ICBORVRGSUxFX0Z0ZWxsKAogICAgICAgIE5FVEZJTEVfRklMRSAgICAqbmZwCgkpOwoKaW50ICAg
ICBORVRGSUxFX0ZmbHVzaCgKICAgICAgICBORVRGSUxFX0ZJTEUgICAgKm5mcAoJKTsKCmludCAg
ICAgTkVURklMRV9GY2xvc2UoIAogICAgICAgIE5FVEZJTEVfRklMRSAgICAqbmZwCgkpOwoKdm9p
ZCAgICBORVRGSUxFX0luaXRpYXRlQ29uY3VycmVudCggCiAgICAgICAgY29uc3QgY2hhciAgKm5h
bWUKCSk7Cgp2b2lkICAgIE5FVEZJTEVfVGVybWluYXRlQ29uY3VycmVudCggCiAgICAgICAgdm9p
ZAoJKTsKCnNob3J0IE5FVEZJTEVfR2V0RG9OZXRGaWxlc0ZsYWcgKAogICAgdm9pZAoJKTsKCmlu
dCBORVRGSUxFX0dldFNhdmVkRXJybm8gKAogICAgdm9pZAoJKTsKCgogCgpORVRGSUxFX0ZJTEUg
Kk5FVEZJTEVfRm9wZW5SZWN5Y2xlICgKICAgIGNvbnN0IGNoYXIgICpmaWxlbmFtZSwKICAgIGNv
bnN0IGNoYXIgICphY2Nlc3NDb2RlCgkpOwoKaW50IE5FVEZJTEVfRmNsb3NlUmVjeWNsZSAoCiAg
ICBORVRGSUxFX0ZJTEUgICAgKm5mcAoJKTsKCgp9CgoKCgoKIyA3NyAiL3NvZnR3YXJlL3RoYWxp
YS9oL25ldGZpbGUuaCIgMgoKCgojIDM2ICIvc29mdHdhcmUvdGhhbGlhL2gvdXRpbC5oIiAyCgoK
dHlwZWRlZiBzdHJ1Y3QgU1REX0ZJTEVfSEVBREVSCiAgICB7CiAgICBpbnQgIGhlYWRTaXplOyAg
ICAgICAKICAgIHNob3J0IG1hY2hpbmU7ICAgICAgIAogICAgc2hvcnQgZmlsZVR5cGU7ICAgICAg
CiAgICBzaG9ydCB2ZXJzaW9uOyAgICAgICAKICAgIHNob3J0IGhlYWRWZXJzaW9uOwogICAgaW50
ICBkYXRlOyAgICAgICAgICAgCiAgICBjaGFyIHByb2dyYW1bNDhdOwogICAgfSBTVERfRklMRV9I
RUFERVI7CgoKIAoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgogCgoKCgogCgoKIAoKCgogCgoK
CgogCiAKdHlwZWRlZiBzdHJ1Y3QgRlJBTkdFCiAgICB7CiAgICBmbG9hdCAgICAgICBiZWdpbjsK
ICAgIGZsb2F0ICAgICAgIGVuZDsKICAgIGZsb2F0ICAgICAgIGluYzsKICAgIH0gRlJBTkdFOwoK
CmlubGluZSBjb25zdCBjaGFyICpjbGFzc05hbWUoIEZSQU5HRSApIHsgcmV0dXJuICJGUkFOR0Ui
OyB9OwoKCiAKCgoKCiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9oL3V0aWwuZSIgMQoKIAoKCgoKCgog
CgoKIyAxICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42
Ni9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIAoKCiAKCgoKCgogCiMgMSAiL3Vzci9saWIvZ2NjLWxp
Yi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3lzbGltaXRzLmgiIDEg
MwogCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIu
OTEuNjYvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiAKCgogCgojIDExNCAiL3Vzci9saWIvZ2NjLWxp
Yi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvbGltaXRzLmgiIDMKCgoK
IyAxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CgoKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMKIAoKCgoKCgoK
CgoKCgoKCgoKCiAKCgoKCgoKCgoKIAoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgoK
IAoKCiAKCgogCgoKIAoKCiAKCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoK
IAoKCiAKCgogCgoKCiAKCgogCgoKIAoKCiAKCgogCgoKCiAKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9sb2NhbF9saW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKIyAxICIvdXNy
L2luY2x1ZGUvbGludXgvbGltaXRzLmgiIDEgMwoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyNyAiL3Vz
ci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDIgMwoKCiAKCgoKCgogCgogCgoKIAoKIAoKCiAK
CiAKCgogCgoKCiAKCiMgMTI2ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMwoK
CgoKCgoKCiAKCgoKCgoKCiMgMzAgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCgojIDEg
Ii91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgog
CgoKCgoKCgogCgoKIAoKCiAKCgogCgoKIAoKCgoKIAoKCgoKIAoKCgogCgoKIAoKCgogCgoKCgog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMzQgIi91c3IvaW5jbHVkZS9s
aW1pdHMuaCIgMiAzCgoKCgoKCgoKIAoKCgoKCiAKCiMgMTIxICIvdXNyL2luY2x1ZGUvbGltaXRz
LmgiIDMKCgoKCiAgCgoKCgoKCgoKIyAxMTcgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0
LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKCiMgNyAiL3Vzci9s
aWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3lzbGlt
aXRzLmgiIDIgMwoKCiMgMTEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2Vn
Y3MtMi45MS42Ni9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKCgogCgoKCiAKCgoKIAoKCgoKIAoK
CgoKCiAKCgoKIAoKCgoKCgoKCgoKCgogCgogCgoKCgogCgoKCiAKCgoKCgoKCgogCgoKCiAKCgoK
CgoKCgoKCgoKCiAKCgoKIyAxMDcgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4
L2VnY3MtMi45MS42Ni9pbmNsdWRlL2xpbWl0cy5oIiAzCgoKCgogCgoKCgoKCgoKCiMgMjMgIi91
c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW50Lmgi
IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9h
bHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoK
CgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkx
LjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIv
Z2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgi
IDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91c3Iv
bGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRl
Zi5oIiAzCgoKIAoKIAoKIyAxOTAgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4
L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgoKCiAKCgojIDI2OSAiL3Vz
ci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3Rk
ZGVmLmgiIDMKCgoKCiMgMjgzICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9l
Z2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9n
Y2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIg
MwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDI4ICIvdXNyL2luY2x1ZGUvc3RkaW50Lmgi
IDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIAoKCgoKCgoKCgoK
CgoKCgoKCgojIDI5ICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDIgMwoKCiAKCiAKCiAKIyA0NyAi
L3Vzci9pbmNsdWRlL3N0ZGludC5oIiAzCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGNoYXIJCXVpbnQ4
X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50CXVpbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVk
IGludAkJdWludDMyX3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50CXVpbnQ2NF90OwoKCgoK
CgogCgogCnR5cGVkZWYgc2lnbmVkIGNoYXIJCWludF9sZWFzdDhfdDsKdHlwZWRlZiBzaG9ydCBp
bnQJCWludF9sZWFzdDE2X3Q7CnR5cGVkZWYgaW50CQkJaW50X2xlYXN0MzJfdDsKCnR5cGVkZWYg
bG9uZyBpbnQJCWludF9sZWFzdDY0X3Q7CgoKCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGNoYXIJCXVp
bnRfbGVhc3Q4X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50CXVpbnRfbGVhc3QxNl90Owp0
eXBlZGVmIHVuc2lnbmVkIGludAkJdWludF9sZWFzdDMyX3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgaW50CXVpbnRfbGVhc3Q2NF90OwoKCgoKCgogCgogCnR5cGVkZWYgc2lnbmVkIGNoYXIJCWlu
dF9mYXN0OF90OwoKdHlwZWRlZiBsb25nIGludAkJaW50X2Zhc3QxNl90Owp0eXBlZGVmIGxvbmcg
aW50CQlpbnRfZmFzdDMyX3Q7CnR5cGVkZWYgbG9uZyBpbnQJCWludF9mYXN0NjRfdDsKCgoKCgoK
CiAKdHlwZWRlZiB1bnNpZ25lZCBjaGFyCQl1aW50X2Zhc3Q4X3Q7Cgp0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgaW50CXVpbnRfZmFzdDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQJdWludF9m
YXN0MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludAl1aW50X2Zhc3Q2NF90OwoKCgoKCgoK
CiAKCgp0eXBlZGVmIGxvbmcgaW50CQlpbnRwdHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
aW50CXVpbnRwdHJfdDsKCgoKCgoKCgoKIAoKdHlwZWRlZiBsb25nIGludAkJaW50bWF4X3Q7CnR5
cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQJdWludG1heF90OwoKCgoKCgoKCiAKCiMgMjgwICIvdXNy
L2luY2x1ZGUvc3RkaW50LmgiIDMKCgoKIAoKIyAzMTYgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIg
MwoKCgojIDI0ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAyIDMKCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy9zb2NrZXQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAx
ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVk
ZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJl
ZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoK
CiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEu
NjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
CgogCgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0y
LjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1s
aWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK
CgoKIAoKCgoKIAoKIyAyNzEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2Vn
Y3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIyAyODMgIi91c3IvbGliL2djYy1saWIv
YWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoK
IAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42
Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjkgIi91
c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAyIDMKCgojIDEgIi91c3IvbGliL2djYy1saWIvYWxw
aGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIAoKCiAK
CiMgMTE0ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYv
aW5jbHVkZS9saW1pdHMuaCIgMwoKCgoKCgoKIyAzMSAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0
LmgiIDIgMwoKCgogCnR5cGVkZWYgdW5zaWduZWQgaW50IHNvY2tsZW5fdDsKCiAKZW51bSBfX3Nv
Y2tldF90eXBlCnsKICBTT0NLX1NUUkVBTSA9IDEsCQkgCgoKICBTT0NLX0RHUkFNID0gMiwJCSAK
CgogIFNPQ0tfUkFXID0gMywJCQkgCgogIFNPQ0tfUkRNID0gNCwJCQkgCgogIFNPQ0tfU0VRUEFD
S0VUID0gNSwJCSAKCgogIFNPQ0tfUEFDS0VUID0gMTAJCSAKCgoKfTsKCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK
CgogCgoKIAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2thZGRyLmgiIDEgMwogCgoKCgoKCgoK
CgoKCgoKCgoKCiAKCgoKCgoKCiAKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgc2FfZmFtaWx5
X3Q7CgogCgoKCgoKCgoKIAoKZXh0ZXJuIGludCBfX2xpYmNfc2FfbGVuICAoc2FfZmFtaWx5X3Qg
X19hZikgIHRocm93ICgpICA7CgoKIyAxMzMgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAy
IDMKCgogCnN0cnVjdCBzb2NrYWRkcgogIHsKICAgIHNhX2ZhbWlseV90ICBzYV9mYW1pbHkgOwkg
CiAgICBjaGFyIHNhX2RhdGFbMTRdOwkJIAogIH07CgoKIAoKCgoKCgoKCgpzdHJ1Y3Qgc29ja2Fk
ZHJfc3RvcmFnZQogIHsKICAgIHNhX2ZhbWlseV90ICBfX3NzX2ZhbWlseSA7CSAKICAgIF9fdWlu
dDY0X3QgIF9fc3NfYWxpZ247CSAKICAgIGNoYXIgX19zc19wYWRkaW5nWygxMjggIC0gKDIgKiBz
aXplb2YgKF9fdWludDY0X3QgKSkpIF07CiAgfTsKCgogCmVudW0KICB7CiAgICBNU0dfT09CCQk9
IDB4MDEsCSAKCiAgICBNU0dfUEVFSwkJPSAweDAyLAkgCgogICAgTVNHX0RPTlRST1VURQk9IDB4
MDQsCSAKCgoKCgoKICAgIE1TR19DVFJVTkMJCT0gMHgwOCwJIAoKICAgIE1TR19QUk9YWQkJPSAw
eDEwLAkgCgogICAgTVNHX1RSVU5DCQk9IDB4MjAsCgogICAgTVNHX0RPTlRXQUlUCT0gMHg0MCwg
IAoKICAgIE1TR19FT1IJCT0gMHg4MCwgIAoKICAgIE1TR19XQUlUQUxMCQk9IDB4MTAwLCAgCgog
ICAgTVNHX0ZJTgkJPSAweDIwMCwKCiAgICBNU0dfU1lOCQk9IDB4NDAwLAoKICAgIE1TR19VUkcJ
CT0gMHg4MDAsCgogICAgTVNHX1JTVAkJPSAweDEwMDAsCgogICAgTVNHX0VSUlFVRVVFCT0gMHgy
MDAwLCAgCgogICAgTVNHX05PU0lHTkFMCT0gMHg0MDAwICAgCgogIH07CgoKIAoKc3RydWN0IG1z
Z2hkcgogIHsKICAgIHZvaWQgKiAgbXNnX25hbWU7CQkgCiAgICBzb2NrbGVuX3QgbXNnX25hbWVs
ZW47CSAKCiAgICBzdHJ1Y3QgaW92ZWMgKm1zZ19pb3Y7CSAKICAgIHNpemVfdCBtc2dfaW92bGVu
OwkJIAoKICAgIHZvaWQgKiAgbXNnX2NvbnRyb2w7CSAKICAgIHNpemVfdCBtc2dfY29udHJvbGxl
bjsJIAoKICAgIGludCBtc2dfZmxhZ3M7CQkgCiAgfTsKCiAKc3RydWN0IGNtc2doZHIKICB7CiAg
ICBzaXplX3QgY21zZ19sZW47CQkgCgogICAgaW50IGNtc2dfbGV2ZWw7CQkgCiAgICBpbnQgY21z
Z190eXBlOwkJIAoKICAgIHVuc2lnbmVkIGNoYXIgX19jbXNnX2RhdGFbMF07ICAKICAgICAKCiAg
fTsKCiAKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIHN0cnVjdCBjbXNnaGRyICpfX2Ntc2dfbnh0aGRy
ICAoc3RydWN0IG1zZ2hkciAqX19taGRyLAoJCQkJCSAgIHN0cnVjdCBjbXNnaGRyICpfX2Ntc2cp
ICB0aHJvdyAoKSAgOwoKCgoKZXh0ZXJuIF9faW5saW5lICBzdHJ1Y3QgY21zZ2hkciAqCl9fY21z
Z19ueHRoZHIgKHN0cnVjdCBtc2doZHIgKl9fbWhkciwgc3RydWN0IGNtc2doZHIgKl9fY21zZykg
dGhyb3cgKCkgCnsKICBpZiAoKHNpemVfdCkgX19jbXNnLT5jbXNnX2xlbiA8IHNpemVvZiAoc3Ry
dWN0IGNtc2doZHIpKQogICAgIAogICAgcmV0dXJuIDA7CgogIF9fY21zZyA9IChzdHJ1Y3QgY21z
Z2hkciAqKSAoKHVuc2lnbmVkIGNoYXIgKikgX19jbXNnCgkJCSAgICAgICArICgoKCBfX2Ntc2ct
PmNtc2dfbGVuICkgKyBzaXplb2YgKHNpemVfdCkgLSAxKSAmIH4oc2l6ZW9mIChzaXplX3QpIC0g
MSkpICk7CiAgaWYgKCh1bnNpZ25lZCBjaGFyICopIChfX2Ntc2cgKyAxKSA+PSAoKHVuc2lnbmVk
IGNoYXIgKikgX19taGRyLT5tc2dfY29udHJvbAoJCQkJCSArIF9fbWhkci0+bXNnX2NvbnRyb2xs
ZW4pCiAgICAgIHx8ICgodW5zaWduZWQgY2hhciAqKSBfX2Ntc2cgKyAoKCggX19jbXNnLT5jbXNn
X2xlbiApICsgc2l6ZW9mIChzaXplX3QpIC0gMSkgJiB+KHNpemVvZiAoc2l6ZV90KSAtIDEpKSAK
CSAgPj0gKCh1bnNpZ25lZCBjaGFyICopIF9fbWhkci0+bXNnX2NvbnRyb2wgKyBfX21oZHItPm1z
Z19jb250cm9sbGVuKSkpCiAgICAgCiAgICByZXR1cm4gMDsKICByZXR1cm4gX19jbXNnOwp9CgoK
IAoKZW51bQogIHsKICAgIFNDTV9SSUdIVFMgPSAweDAxLAkJIAoKCiAgICBTQ01fQ1JFREVOVElB
TFMgPSAweDAyLCAgICAgIAoKCiAgICBfX1NDTV9DT05ORUNUID0gMHgwMwkgCiAgfTsKCiAKCnN0
cnVjdCB1Y3JlZAp7CiAgcGlkX3QgIHBpZDsJCQkgCiAgdWlkX3QgIHVpZDsJCQkgCiAgZ2lkX3Qg
IGdpZDsJCQkgCn07CgogCiMgMSAiL3Vzci9pbmNsdWRlL2FzbS9zb2NrZXQuaCIgMSAzCgoKCiMg
MSAiL3Vzci9pbmNsdWRlL2FzbS9zb2NraW9zLmgiIDEgMwoKCgogCgoKCgoKCgoKCgoKIyA0ICIv
dXNyL2luY2x1ZGUvYXNtL3NvY2tldC5oIiAyIDMKCgogCiAKCgoKCgoKCgoKCgoKCgogCgoKCgoK
CgoKCgogCgoKCgoKCgoKIAoKCgogCgoKCgoKIyAyOTUgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tl
dC5oIiAyIDMKCgoKIApzdHJ1Y3QgbGluZ2VyCiAgewogICAgaW50IGxfb25vZmY7CQkgCiAgICBp
bnQgbF9saW5nZXI7CQkgCiAgfTsKCgojIDI3ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAy
IDMKCgoKZXh0ZXJuICJDIiB7IAoKIAplbnVtCiAgewogICAgSVBQUk9UT19JUCA9IDAsCSAgICAK
ICAgIElQUFJPVE9fSE9QT1BUUyA9IDAsICAgIAogICAgSVBQUk9UT19JQ01QID0gMSwJICAgIAog
ICAgSVBQUk9UT19JR01QID0gMiwJICAgIAogICAgSVBQUk9UT19JUElQID0gNCwJICAgIAogICAg
SVBQUk9UT19UQ1AgPSA2LAkgICAgCiAgICBJUFBST1RPX0VHUCA9IDgsCSAgICAKICAgIElQUFJP
VE9fUFVQID0gMTIsCSAgICAKICAgIElQUFJPVE9fVURQID0gMTcsCSAgICAKICAgIElQUFJPVE9f
SURQID0gMjIsCSAgICAKICAgIElQUFJPVE9fVFAgPSAyOSwJICAgIAogICAgSVBQUk9UT19JUFY2
ID0gNDEsICAgICAgCiAgICBJUFBST1RPX1JPVVRJTkcgPSA0MywgICAKICAgIElQUFJPVE9fRlJB
R01FTlQgPSA0NCwgIAogICAgSVBQUk9UT19SU1ZQID0gNDYsCSAgICAKICAgIElQUFJPVE9fR1JF
ID0gNDcsCSAgICAKICAgIElQUFJPVE9fRVNQID0gNTAsICAgICAgIAogICAgSVBQUk9UT19BSCA9
IDUxLCAgICAgICAgCiAgICBJUFBST1RPX0lDTVBWNiA9IDU4LCAgICAKICAgIElQUFJPVE9fTk9O
RSA9IDU5LCAgICAgIAogICAgSVBQUk9UT19EU1RPUFRTID0gNjAsICAgCiAgICBJUFBST1RPX01U
UCA9IDkyLAkgICAgCiAgICBJUFBST1RPX0VOQ0FQID0gOTgsCSAgICAKICAgIElQUFJPVE9fUElN
ID0gMTAzLAkgICAgCiAgICBJUFBST1RPX0NPTVAgPSAxMDgsCSAgICAKICAgIElQUFJPVE9fUkFX
ID0gMjU1LAkgICAgCiAgICBJUFBST1RPX01BWAogIH07CgogCmVudW0KICB7CiAgICBJUFBPUlRf
RUNITyA9IDcsCQkgCiAgICBJUFBPUlRfRElTQ0FSRCA9IDksCQkgCiAgICBJUFBPUlRfU1lTVEFU
ID0gMTEsCQkgCiAgICBJUFBPUlRfREFZVElNRSA9IDEzLAkgCiAgICBJUFBPUlRfTkVUU1RBVCA9
IDE1LAkgCiAgICBJUFBPUlRfRlRQID0gMjEsCQkgCiAgICBJUFBPUlRfVEVMTkVUID0gMjMsCQkg
CiAgICBJUFBPUlRfU01UUCA9IDI1LAkJIAogICAgSVBQT1JUX1RJTUVTRVJWRVIgPSAzNywJIAog
ICAgSVBQT1JUX05BTUVTRVJWRVIgPSA0MiwJIAogICAgSVBQT1JUX1dIT0lTID0gNDMsCQkgCiAg
ICBJUFBPUlRfTVRQID0gNTcsCgogICAgSVBQT1JUX1RGVFAgPSA2OSwJCSAKICAgIElQUE9SVF9S
SkUgPSA3NywKICAgIElQUE9SVF9GSU5HRVIgPSA3OSwJCSAKICAgIElQUE9SVF9UVFlMSU5LID0g
ODcsCiAgICBJUFBPUlRfU1VQRFVQID0gOTUsCQkgCgoKICAgIElQUE9SVF9FWEVDU0VSVkVSID0g
NTEyLAkgCiAgICBJUFBPUlRfTE9HSU5TRVJWRVIgPSA1MTMsCSAKICAgIElQUE9SVF9DTURTRVJW
RVIgPSA1MTQsCiAgICBJUFBPUlRfRUZTU0VSVkVSID0gNTIwLAoKICAgICAKICAgIElQUE9SVF9C
SUZGVURQID0gNTEyLAogICAgSVBQT1JUX1dIT1NFUlZFUiA9IDUxMywKICAgIElQUE9SVF9ST1VU
RVNFUlZFUiA9IDUyMCwKCiAgICAgCiAgICBJUFBPUlRfUkVTRVJWRUQgPSAxMDI0LAoKICAgICAK
ICAgIElQUE9SVF9VU0VSUkVTRVJWRUQgPSA1MDAwCiAgfTsKCgogCnN0cnVjdCBpbl9hZGRyCiAg
ewogICAgdWludDMyX3Qgc19hZGRyOwogIH07CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgogCgogCgogCgoKIAoKIAoKCgoKIAoKCgoKCgogCnN0cnVjdCBpbjZfYWRkcgogIHsKICAgIHVu
aW9uCiAgICAgIHsKCXVpbnQ4X3QJCXU2X2FkZHI4WzE2XTsKCXVpbnQxNl90CXU2X2FkZHIxNls4
XTsKCXVpbnQzMl90CXU2X2FkZHIzMls0XTsKCgl1aW50NjRfdAl1Nl9hZGRyNjRbMl07CgogICAg
ICB9IGluNl91OwoKCgoKICB9OwoKZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRy
X2FueTsgICAgICAgICAKZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2xvb3Bi
YWNrOyAgICAKCgoKCgoKIAoKCgogCnN0cnVjdCBzb2NrYWRkcl9pbgogIHsKICAgIHNhX2ZhbWls
eV90ICBzaW5fZmFtaWx5IDsKICAgIHVpbnQxNl90IHNpbl9wb3J0OwkJCSAKICAgIHN0cnVjdCBp
bl9hZGRyIHNpbl9hZGRyOwkJIAoKICAgICAKICAgIHVuc2lnbmVkIGNoYXIgc2luX3plcm9bc2l6
ZW9mIChzdHJ1Y3Qgc29ja2FkZHIpIC0KCQkJICAgKHNpemVvZiAodW5zaWduZWQgc2hvcnQgaW50
KSkgIC0KCQkJICAgc2l6ZW9mICh1aW50MTZfdCkgLQoJCQkgICBzaXplb2YgKHN0cnVjdCBpbl9h
ZGRyKV07CiAgfTsKCiAKc3RydWN0IHNvY2thZGRyX2luNgogIHsKICAgIHNhX2ZhbWlseV90ICBz
aW42X2ZhbWlseSA7CiAgICB1aW50MTZfdCBzaW42X3BvcnQ7CQkgCiAgICB1aW50MzJfdCBzaW42
X2Zsb3dpbmZvOwkgCiAgICBzdHJ1Y3QgaW42X2FkZHIgc2luNl9hZGRyOwkgCiAgfTsKCiAKc3Ry
dWN0IGlwdjZfbXJlcQogIHsKICAgICAKICAgIHN0cnVjdCBpbjZfYWRkciBpcHY2bXJfbXVsdGlh
ZGRyOwoKICAgICAKICAgIHVuc2lnbmVkIGludCBpcHY2bXJfaW50ZXJmYWNlOwogIH07CgogCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvaW4uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAKCgoKCiAKCgoKCgoKIAoKCnN0cnVjdCBpcF9v
cHRzCiAgewogICAgc3RydWN0IGluX2FkZHIgaXBfZHN0OwkgCiAgICBjaGFyIGlwX29wdHNbNDBd
OwkJIAogIH07CgogCnN0cnVjdCBpcF9tcmVxCiAgewogICAgc3RydWN0IGluX2FkZHIgaW1yX211
bHRpYWRkcjsJIAogICAgc3RydWN0IGluX2FkZHIgaW1yX2ludGVyZmFjZTsJIAogIH07CgogCnN0
cnVjdCBpcF9tcmVxbgogIHsKICAgIHN0cnVjdCBpbl9hZGRyIGltcl9tdWx0aWFkZHI7CSAKICAg
IHN0cnVjdCBpbl9hZGRyIGltcl9hZGRyZXNzOwkJIAogICAgaW50CWltcl9pZmluZGV4OwkJCSAK
ICB9OwoKIApzdHJ1Y3QgaW5fcGt0aW5mbwogIHsKICAgIGludCBpcGlfaWZpbmRleDsJCQkgCiAg
ICBzdHJ1Y3QgaW5fYWRkciBpcGlfc3BlY19kc3Q7CSAKICAgIHN0cnVjdCBpbl9hZGRyIGlwaV9h
ZGRyOwkJIAogIH07CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgogCgoKIyAyMjUg
Ii91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDIgMwoKCiAKCgoKCgoKZXh0ZXJuIHVpbnQzMl90
IG50b2hsICAodWludDMyX3QgX19uZXRsb25nKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIHVpbnQxNl90
IG50b2hzICAodWludDE2X3QgX19uZXRzaG9ydCkgIHRocm93ICgpICA7CmV4dGVybiB1aW50MzJf
dCBodG9ubCAgKHVpbnQzMl90IF9faG9zdGxvbmcpICB0aHJvdyAoKSAgOwpleHRlcm4gdWludDE2
X3QgaHRvbnMgICh1aW50MTZfdCBfX2hvc3RzaG9ydCkgIHRocm93ICgpICA7CgoKCiAKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy9ieXRlc3dhcC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgojIDI0MiAiL3Vzci9p
bmNsdWRlL25ldGluZXQvaW4uaCIgMiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiAKZXh0ZXJuIGludCBiaW5kcmVzdnBvcnQgIChpbnQgX19zb2NrZmQs
IHN0cnVjdCBzb2NrYWRkcl9pbiAqX19zb2NrX2luKSAgdGhyb3cgKCkgIDsKCgoKCgoKCgoKCgoK
CgoKCgoKIApzdHJ1Y3QgaW42X3BrdGluZm8KICB7CiAgICBzdHJ1Y3QgaW42X2FkZHIJaXBpNl9h
ZGRyOyAgICAgCiAgICB1bnNpZ25lZCBpbnQJaXBpNl9pZmluZGV4OyAgCiAgfTsKCn0gCgoKIyAx
MiAiL3NvZnR3YXJlL3RoYWxpYS9oL3V0aWwuZSIgMgoKIyAxICIvc29mdHdhcmUvdGhhbGlhL2gv
dXRpbC5wIiAxCiAKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCiAKCkZJTEUgKlVfU3RkQmlu
T3BlblJlYWQoCiAgICAgICAgY2hhciAqZmlsZSwKICAgICAgICBjaGFyICp0eXBlLCAgICAgIAog
ICAgICAgIFNURF9GSUxFX0hFQURFUiAqaGVhZAogKTsKCmludCBVX1N0ZEJpbk9wZW5SZWFkRmQo
CiAgICAgICAgY2hhciAqZmlsZSwKICAgICAgICBjaGFyICp0eXBlLCAgICAgIAogICAgICAgIFNU
RF9GSUxFX0hFQURFUiAqaGVhZAogKTsKCkZJTEUgKlVfU3RkQmluT3BlbldyaXRlKAogICAgICAg
IGNvbnN0IGNoYXIgKmZpbGUsCiAgICAgICAgY29uc3QgY2hhciAqdHlwZSwgICAgICAgIAogICAg
ICAgIGNoYXIgdmVyc2lvbiwKICAgICAgICBjaGFyICpwcm9ncmFtCiApOwoKaW50IFVfU3RkQmlu
T3BlbldyaXRlRmQoCiAgICAgICAgY2hhciAqZmlsZSwKICAgICAgICBjaGFyICp0eXBlLCAgICAg
IAogICAgICAgIGNoYXIgdmVyc2lvbiwKICAgICAgICBjaGFyICpwcm9ncmFtCiApOwoKSU5UIFVf
U3RkRmluZFR5cGUoCiAgICAgICAgY29uc3QgY2hhciAqdHlwZQogKTsKCklOVCBVX1N0ZE91dHB1
dElCaW5GbG9hdHMoCiAgICAgICAgRklMRSAgKmZwdHIsCiAgICAgICAgRkxPQVQgKmZsb2F0cywK
ICAgICAgICBJTlQgICBudW1iCiApOwoKSU5UIFVfU3RkSW5wdXRJQmluRmxvYXRzKAogICAgICAg
IEZJTEUgICpmcHRyLAogICAgICAgIEZMT0FUICpmbG9hdHMsCiAgICAgICAgSU5UICAgbnVtYgog
KTsKCnZvaWQgVV9TdGREdW1wSGVhZGVyKAogICAgICAgIGNoYXIgKmZpbGUKICk7CgpJTlQgVV9T
dGRGaW5kRmlsZSgKICAgICAgICBjb25zdCBjaGFyICppbkZpbGUsCiAgICAgICAgY2hhciAqcHJl
ZmVycmVkW10sCiAgICAgICAgSU5UIG51bWIsCiAgICAgICAgY2hhciAqb3V0RmlsZSwKICAgICAg
ICBJTlQgKmluZGV4LAogICAgICAgIGNvbnN0IGNoYXIgKnVEaXJzCiApOwoKdm9pZCBVX1N0cmlw
RmlsZVBhdGgoIAogICAgY2hhciogZmlsZVBhdGgKICk7CgpJTlQgVV9Db3B5RmlsZSgKICAgICAg
ICBjb25zdCBjaGFyICAqaW4sCiAgICAgICAgY29uc3QgY2hhciAgKm91dAogKTsKCklOVCBVX0Fw
cGVuZEZpbGUoCiAgICAgICAgQ0hBUiAgICAqaW4sCiAgICAgICAgQ0hBUiAgICAqb3V0CiApOwoK
SU5UIFVfRXhpc3RzKAogICAgICAgIGNoYXIgKmZpbGUKICk7CgpJTlQgVV9GaW5kRXhlY3V0YWJs
ZSgKICAgICAgICBDSEFSICAgICppbmZpbGUsCiAgICAgICAgQ0hBUiAgICAqb3V0ZmlsZSwKICAg
ICAgICBDSEFSICAgICp1RGlycwogKTsKCnZvaWQgVV9HZXRCYWNrdXBOYW1lKAogICAgICAgIGNo
YXIgKmZpbGUsCiAgICAgICAgY2hhciAqYmFjawogKTsKCklOVCBVX0ZpbGVUeXBlKAogICAgICAg
IENIQVIgICAgKm5hbWUKICk7Cgp2b2lkIFVfU3RyY2F0KAogICAgICAgIGNoYXIgKmEsCiAgICAg
ICAgY2hhciAqYgogKTsKCgogCgp2b2lkICBCSUxJTkVBUl9CaWxpbmVhckludGVycG9sYXRpb24o
CiAgICBQT0lOVCAgICpwb2ludCwKICAgIFBPSU5UICAgKnN0YXJ0MCwKICAgIFBPSU5UICAgKnN0
YXJ0MSwKICAgIFBPSU5UICAgKmVuZDAsCiAgICBQT0lOVCAgICplbmQxLAogICAgRkxPQVQgICB0
b2xlcmFuY2UsCiAgICBGTE9BVCAgICp3ZWlnaHQwLAogICAgRkxPQVQgICAqd2VpZ2h0MSwKICAg
IEZMT0FUICAgKndlaWdodFN0YXJ0LAogICAgRkxPQVQgICAqd2VpZ2h0RW5kCiApOwoKCiAKCklO
VCBDSE9SRF9Eb1JlbW90ZUNvbW1hbmQoCiAgICBJTlQgICAgICAgICBjb3VudCwKICAgIGNvbnN0
IENIQVIgICoqYXIsCiAgICBDSEFSICAgICAgICAqKmVyciwKICAgIENIQVIgICAgICAgICoqb3V0
CiApOwoKCiAKCklOVCBVX0Vhc2VJbigKICAgICAgICBSRUFMICAgIHkwLAogICAgICAgIFJFQUwg
ICAgdjAsCiAgICAgICAgUkVBTCAgICB5MSwKICAgICAgICBSRUFMICAgIHYxLAogICAgICAgIFJF
QUwgICAgZXhwLAogICAgICAgIElOVCAgICAgbiwKICAgICAgICBSRUFMICAgICpidWYsCiAgICAg
ICAgSU5UICAgICBrZXkKICk7CgpJTlQgVV9FYXNlT3V0KAogICAgICAgIFJFQUwgICAgeTAsCiAg
ICAgICAgUkVBTCAgICB2MCwKICAgICAgICBSRUFMICAgIHkxLAogICAgICAgIFJFQUwgICAgdjEs
CiAgICAgICAgUkVBTCAgICBleHAsCiAgICAgICAgSU5UICAgICBuLAogICAgICAgIFJFQUwgICAg
KmJ1ZiwKICAgICAgICBJTlQgICAgIGtleQogKTsKCklOVCBVX0Vhc2VJbkxpbmVhcigKICAgICAg
ICBSRUFMICAgIHkwLAogICAgICAgIFJFQUwgICAgdjAsCiAgICAgICAgUkVBTCAgICB5MSwKICAg
ICAgICBSRUFMICAgIHYxLAogICAgICAgIElOVCAgICAgbiwKICAgICAgICBJTlQgICAgIG0sCiAg
ICAgICAgUkVBTCAgICAqYnVmCiApOwoKSU5UIFVfRWFzZUluT3V0KAogICAgICAgIFJFQUwgICAg
eTAsCiAgICAgICAgUkVBTCAgICB2MCwKICAgICAgICBSRUFMICAgIHkxLAogICAgICAgIFJFQUwg
ICAgdjEsCiAgICAgICAgUkVBTCAgICBleHAsCiAgICAgICAgSU5UICAgICBuLAogICAgICAgIFJF
QUwgICAgKmJ1ZiwKICAgICAgICBSRUFMICAgIHdlaWdodAogKTsKCklOVCBVX0Vhc2VJbk91dF9F
eHBlcmltZW50YWwgKAogICAgICAgIFJFQUwgICAgeTAsCiAgICAgICAgUkVBTCAgICB2MCwKICAg
ICAgICBSRUFMICAgIHkxLAogICAgICAgIFJFQUwgICAgdjEsCiAgICAgICAgUkVBTCAgICBleHAs
CiAgICAgICAgSU5UICAgICBuLAogICAgICAgIFJFQUwgICAgKmJ1ZiwKICAgICAgICBSRUFMICAg
IHdlaWdodAogKTsKCgogCgpJTlQgVV9QYXJzZURhdGUoCiAgICAgICAgQ0hBUiAgICAqZGF0ZVN0
cgogKTsKCklOVCBVX0RhdGVJZGVudGlmeSgKICAgICAgICBDSEFSICAgICp0b2tlbgogKTsKCklO
VCBVX1NwcmludERhdGUoCiAgICAgICAgQ0hBUiAgICAqcywKICAgICAgICBJTlQgICAgIHRoZURh
dGUsCiAgICAgICAgSU5UICAgICBzdHlsZQogKTsKCklOVCBVX0dldE1vbnRoSW50RnJvbUFzY2lp
KAogICAgICAgIGNoYXIgICAgKm1vbnRoU3RyaW5nCiApOwoKdm9pZCBVX0dldE1vbnRoQXNjaWlG
cm9tSW50KAogICAgICAgIGNoYXIgICAgKm1vbnRoU3RyaW5nLAogICAgICAgIElOVCAgICAgbW9u
dGhJbnQKICk7CgpJTlQgVV9HZXREYXlzSW5Nb250aEFzY2lpKAogICAgICAgIGNoYXIgICAgKm1v
bnRoU3RyaW5nCiApOwoKSU5UIFVfR2V0RGF5c0luTW9udGhJbnQoCiAgICAgICAgSU5UIG1vbnRo
SW50CiApOwoKSU5UIFVfU3VidHJhY3RGcm9tRGF0ZSgKICAgICAgICBJTlQgKm1vbnRoLCAKICAg
ICAgICBJTlQgKmRheSwgCiAgICAgICAgSU5UICp5ZWFyLAogICAgICAgIElOVCBtb250aEFkanVz
dCwgCiAgICAgICAgSU5UIGRheUFkanVzdCwgCiAgICAgICAgSU5UIHllYXJBZGp1c3QKICk7CgpJ
TlQgVV9BZGRUb0RhdGUoCiAgICAgICAgSU5UICptb250aCwgCiAgICAgICAgSU5UICpkYXksIAog
ICAgICAgIElOVCAqeWVhciwKICAgICAgICBJTlQgbW9udGhBZGp1c3QsIAogICAgICAgIElOVCBk
YXlBZGp1c3QsIAogICAgICAgIElOVCB5ZWFyQWRqdXN0CiApOwoKSU5UIFVfR2V0Q29ycmVjdERh
eXNJbk1vbnRoKAogICAgICAgIElOVCBtb250aCwgCiAgICAgICAgSU5UIHllYXIKICk7CgpJTlQg
VV9Db21wYXJlRGF0ZXMoCiAgICAgICAgSU5UIG1vbnRoMSwgCiAgICAgICAgSU5UIGRheTEsIAog
ICAgICAgIElOVCB5ZWFyMSwKICAgICAgICBJTlQgbW9udGgyLCAKICAgICAgICBJTlQgZGF5Miwg
CiAgICAgICAgSU5UIHllYXIyCiApOwoKCiAKCklOVCBVSV9QYXJzZVRoZURhdGUoCiAgICAgICAg
Y2hhciAgICBkYXRlW10sCiAgICAgICAgSU5UICAgICAqbW9udGhOdW1iZXIsIAogICAgICAgIElO
VCAgICAgKmRheU51bWJlciwgCiAgICAgICAgSU5UICAgICAqeWVhck51bWJlcgogKTsKCgogCgpG
TE9BVCBNQVRIX0Rlc2NyZXRpemUoCiAgICAgICAgRkxPQVQgdmFsCiApOwoKRkxPQVQgTUFUSF9B
cmJEZXNjcmV0aXplKAogICAgICAgIEZMT0FUICAgdmFsLAogICAgICAgIElOVCAgICAgbnVtYiwg
ICAgCiAgICAgICAgRkxPQVQgICAqbWFwICAgICAKICk7CgoKIAoKSU5UIERJU0tDX0RlbGV0ZU9s
ZCgKICAgICAgICBJTlQgICAgIGxpZmVTcGFuCiApOwoKdm9pZCAgRElTS0NfUHVyZ2UoCiAgICB2
b2lkIAogKTsKCklOVCBESVNLQ19SZWFkSW5mbygKICAgICAgICBJTlQgICAgICpsaWZlc3Bhbgog
KTsKCklOVCBESVNLQ19Xcml0ZUluZm8oCiAgICAgICAgSU5UICAgICBsaWZlc3BhbgogKTsKCnZv
aWQgIERJU0tDX1JlYWRGaWxlcygKICAgIHZvaWQgCiApOwoKSU5UIERJU0tDX1JlYWRGaWxlbmFt
ZXMoCiAgICBDSEFSICAgICpwcmVmaXgKICk7CgpJTlQgRElTS0NfRGVsZXRlQWxsKAogICAgICAg
ICAgICB2b2lkIAogKTsKCklOVCBESVNLQ19EZWxldGVBbGxVc2VyRGF0YSgKICAgICAgICBJTlQg
ICAgIHVpZAogKTsKCklOVCBESVNLQ19EZWxldGVLZXkoCiAgICAgICAgSU5UICAgICBrZXkKICk7
CgpJTlQgRElTS0NfVGFsaygKICAgICAgICBESVNLQ19GSUxFICAgKmNtZGJ1ZgogKTsKCklOVCAg
ICAgRElTS0NfVXNlRmlsZSgKICAgIENIQVIgICAgKmZpbGVuYW1lLAogICAgQ0hBUiAgICAqZXh0
ZW5zaW9uc1tdLAogICAgSU5UICAgICBudW1FeHRlbnNpb25zLAogICAgQ0hBUiAgICAqdXNlRmls
ZSwKICAgIElOVCAgICAgdmVyYm9zZQogKTsKCgogCgpJTlQgRkZUX1JlYWwxZCgKICAgICAgICBG
TE9BVCAgICpkYXRhLAogICAgICAgIElOVCAgICAgbiwKICAgICAgICBJTlQgICAgIGlzaWduCiAp
OwoKSU5UIEZGVF9SZWFsMmQoCiAgICAgICAgRkxPQVQgICAqZGF0YSwKICAgICAgICBJTlQgICAg
IHhkaW0sCiAgICAgICAgSU5UICAgICB5ZGltLAogICAgICAgIElOVCAgICAgaHNpemUsCiAgICAg
ICAgSU5UICAgICBpc2lnbgogKTsKCgogCgpJTlQgVV9GaW5kRmlsZU1hY2hpbmUoCiAgICAgICAg
Y29uc3QgY2hhciAgKmZpbGVuYW1lLAogICAgICAgIENIQVIgICAgICAgICptYWNoaW5lCiApOwoK
CiAKCnZvaWQgICAgRlBFX0Rpc2FibGVVbmRlcmZsb3coCiAgICAgICAgdm9pZAogKTsKCgogCgpj
b25zdCBjaGFyICpVX1BhcnNlQUZyYW5nZSgKICAgICAgICBjb25zdCBjaGFyICAqcHRyLAogICAg
ICAgIEZSQU5HRSAgICAgICp0aGVGcmFuZ2UsCiAgICAgICAgZmxvYXQgICAgICAgZGVmYXVsdElu
YwogKTsKCmNvbnN0IGNoYXIgKlVfUGFyc2VBRmxvYXQoCiAgICAgICAgY29uc3QgY2hhciAgKnB0
cgogKTsKCmludCBVX1BhcnNlRnJhbmdlKAogICAgICAgIGNvbnN0IGNoYXIgICpmVG9rZW4sCiAg
ICAgICAgRlJBTkdFICAqKmZyYW5nZXMKICk7CgppbnQgVV9Jc0FGcmFtZSgKICAgICAgICBjaGFy
ICAgICp0b2tlbgogKTsKCnZvaWQgICAgIFVfU3ByaW50RnJhbmdlKAogICAgICAgIGNoYXIgICAg
KnN0ciwKICAgICAgICBpbnQgICAgIG51bSwKICAgICAgICBjb25zdCBGUkFOR0UgICAgKmZyYW5n
ZXMKICk7Cgp2b2lkICAgICBVX1NwcmludE5GcmFuZ2UoCiAgICAgICAgY2hhciAgICAqc3RyLAog
ICAgICAgIGludCAgICAgbnVtLAogICAgICAgIGNvbnN0IEZSQU5HRSAgICAqZnJhbmdlcywKICAg
ICAgICBpbnQgICAgIG1heGxlbgogKTsKCnZvaWQgICAgIFVfU3ByaW50TldGRnJhbmdlKAogICAg
ICAgIGNoYXIgICAgICAgICAgICAqc3RyLAogICAgICAgIGludCAgICAgICAgICAgICBudW0sCiAg
ICAgICAgY29uc3QgRlJBTkdFICAgICpmcmFuZ2VzLAogICAgICAgIGludCAgICAgICAgICAgICBt
YXhsZW4sCiAgICAgICAgQk9PTEVBTiAgICAgICAgIHVzZVdmTnVtcwogKTsKCmludCBVX0ZyYW1l
SW5GcmFuZ2UoCiAgICAgICAgaW50ICAgICBmcmFtZSwKICAgICAgICBpbnQgICAgIG51bSwKICAg
ICAgICBGUkFOR0UgICpmcmFuZ2VzCiApOwoKaW50IFVfSXNBRnJhbmdlKAogICAgICAgIGNvbnN0
IGNoYXIgICp0b2tlbgogKTsKCmludCBVX0lzQUZyYW5nZTIoCiAgICAgICAgY29uc3QgY2hhciAg
KnRva2VuCiApOwoKCiAKCnZvaWQgTUVNX0NoZWNrQXZhaWwoCiAgICBpbnQgKmZyZWVtZW0sCiAg
ICBpbnQgKmZyZWVzd3AKICk7CgoKIAoKdm9pZCAgICAgVV9HZXRFeHRlbigKICAgICAgICAgICAg
Q0hBUiAqZmlsZSwgICAgICAKICAgICAgICAgICAgQ0hBUiAqb3V0ZmlsZSwgICAgICAgCiAgICAg
ICAgICAgIGNvbnN0IENIQVIgKmV4dGVuICAgIAogKTsKCklOVCAgICAgVV9FeHRyYWN0RXh0ZW4o
CiAgICAgICAgICAgIGNvbnN0IENIQVIgKmZpbGUsICAgICAgICAKICAgICAgICAgICAgQ0hBUiAq
ZXh0ZW4gIAogKTsKCnZvaWQgICAgIFVfU3RyaXBFeHRlbigKICAgICAgICAgICAgY29uc3QgQ0hB
UiAqZmlsZSwgICAgICAgIAogICAgICAgICAgICBDSEFSICpvdXRmaWxlLCAgICAgICAKICAgICAg
ICAgICAgQ0hBUiAqZXh0ZW4gIAogKTsKCnZvaWQgICAgIFVfQnVpbGRGaWxlTmFtZSgKICAgICAg
ICAgICAgQ0hBUiAgICAqb3JpZywKICAgICAgICAgICAgQ0hBUiAgICAqb3V0LAogICAgICAgICAg
ICBJTlQgICAgIGZyYW1lCiApOwoKdm9pZCAgICAgVV9TcGxpdEZpbGVOYW1lKAogICAgICAgICAg
ICBDSEFSICAgICppbiwKICAgICAgICAgICAgQ0hBUiAgICAqYmFzZSwKICAgICAgICAgICAgSU5U
ICAgICAqZnJhbWUsCiAgICAgICAgICAgIENIQVIgICAgKmV4dG4KICk7Cgp2b2lkICAgICBVX1Nw
bGl0RG90RmlsZU5hbWUoCiAgICAgICAgICAgIENIQVIgICAgKmluLAogICAgICAgICAgICBDSEFS
ICAgICpiYXNlLAogICAgICAgICAgICBJTlQgICAgICpmcmFtZSwKICAgICAgICAgICAgQ0hBUiAg
ICAqZXh0bgogKTsKCnZvaWQgICAgIFVfU3BsaXRGaWxlTmFtZTIoCiAgICAgICAgICAgIENIQVIg
ICAgKmluLAogICAgICAgICAgICBDSEFSICAgICpiYXNlLAogICAgICAgICAgICBJTlQgICAgICpm
cmFtZSwKICAgICAgICAgICAgQ0hBUiAgICAqZXh0bgogKTsKCgogCgpjaGFyICpVX0dldExpbmUo
CiAgICAgICAgRklMRSAgICAqZnB0ciAgICAKICk7CgpSRUFMICpVX1JlYWRWYWx1ZXMoCiAgICAg
ICAgRklMRSAqZnB0ciwKICAgICAgICBJTlQgICpudW1iCiApOwoKCiAKCnZvaWQgTElOS19EZWJ1
ZygKICAgICAgICBpbnQgZmxhZwogKTsKCnZvaWQgKkxJTktfQWxsb2MoCiAgICAgICAgSU5UIHNp
emUsICAgIAogICAgICAgIElOVCBleHRyYSAgICAKICk7Cgp2b2lkIExJTktfRnJlZSgKICAgICAg
ICB2b2lkICpidWYsICAgICAgIAogICAgICAgIHZvaWQgKnB0ciAgICAgICAgCiApOwoKdm9pZCBM
SU5LX0ZyZWVBbGwoCiAgICAgICAgdm9pZCAqYnVmICAgICAgICAKICk7Cgp2b2lkICpMSU5LX0dl
dE5leHRGcmVlKAogICAgICAgIHZvaWQgKmJ1ZgogKTsKCnZvaWQgKkxJTktfSW5kZXgoCiAgICAg
ICAgdm9pZCAqYnVmLAogICAgICAgIGludCBpbmRleAogKTsKCgogCgpJTlQgVV9TZXRMb2NrKAog
ICAgICAgIENIQVIgICAgKmRldmljZSwKICAgICAgICBDSEFSICAgICptZXNzYWdlCiApOwoKSU5U
IFVfQ2xlYXJMb2NrKAogICAgICAgIENIQVIgICAgKmRldmljZQogKTsKCklOVCBVX05ldFNldExv
Y2soCiAgICAgICAgY29uc3QgQ0hBUiAgKmRldmljZSwKICAgICAgICBjb25zdCBDSEFSICAqbWVz
c2FnZQogKTsKCklOVCBVX05ldENsZWFyTG9jaygKICAgICAgICBjb25zdCBDSEFSICAqZGV2aWNl
CiApOwoKCiAKCklOVCBVX0xvZygKICAgICAgICBJTlQgICAgIGpvYiwKICAgICAgICBDSEFSICAg
IG9wZXIsCiAgICAgICAgSU5UICAgICBmcmFtZSwKICAgICAgICBJTlQgICAgIGNwdVNlYywKICAg
ICAgICBjb25zdCBDSEFSICAqZGVzYywKICAgICAgICBjb25zdCBDSEFSICAqbG9nZmlsZQogKTsK
CgogCgp2b2lkIE1BVEhfSW5pdFJhbmQoCiAgICAgICAgaW50IHNlZWQKICk7CgpTSE9SVCBNQVRI
X1Nob3J0UmFuZCgKICAgICAgICB2b2lkCiApOwoKSU5UIE1BVEhfUmFuZG9taXplKAogICAgICAg
IHZvaWQKICk7Cgp2b2lkIE1BVEhfU2VlZCgKICAgICAgICBJTlQgc2VlZAogKTsKCnZvaWQgTUFU
SF9HZXRQbGFuZUVxKAogICAgICAgIFZFUlRFWCAgKnZlcnRzLAogICAgICAgIElOVCAgICAgbnVt
YlZlcnRzLAogICAgICAgIFZFQ1Q0RCAgKnBsZXEKICk7Cgp2b2lkIE1BVEhfR2V0UGxhbmVFcURv
dWJsZSgKICAgICAgICBWRVJURVggICp2ZXJ0cywKICAgICAgICBJTlQgICAgIG51bWJWZXJ0cywK
ICAgICAgICBWRUNUNEQgICpwbGVxCiApOwoKRE9VQkxFIE1BVEhfVHJhc2hSZWdpZVplcm8gKAog
ICAgICAgIHZvaWQKICk7Cgp2b2lkIE1BVEhfR2V0Tm9ybWFsKAogICAgICAgIFZFUlRFWCAgKnZl
cnRzLAogICAgICAgIElOVCAgICAgbnVtYlZlcnRzLAogICAgICAgIFZFUlRFWCAgKm5vcm1hbAog
KTsKCklOVCBNQVRIX0ludGVyc2VjdExpbmUyZCgKICAgICAgICBGTE9BVCB4MWEsCiAgICAgICAg
RkxPQVQgeTFhLAogICAgICAgIEZMT0FUIHgxYiwKICAgICAgICBGTE9BVCB5MWIsCiAgICAgICAg
RkxPQVQgeDJhLAogICAgICAgIEZMT0FUIHkyYSwKICAgICAgICBGTE9BVCB4MmIsCiAgICAgICAg
RkxPQVQgeTJiLAogICAgICAgIEZMT0FUICp4LAogICAgICAgIEZMT0FUICp5CiApOwoKZmxvYXQg
TUFUSF9BdG9mICgKICAgIGNoYXIgICAgKmFzY2lpCiApOwoKdm9pZCBNQVRIX0ZQcmludEZsb2F0
KAogICAgICAgIEZJTEUgKmZwdHIsCiAgICAgICAgZmxvYXQgdmFsdWUKICk7CgpJTlQgTUFUSF9J
bnRlcnNlY3RQbGFuZUxpbmUoCiAgICAgICAgVkVDVDREICAqcGxhbmUsCiAgICAgICAgVkVSVEVY
ICAqcG50MSwKICAgICAgICBWRVJURVggICpwbnQyLAogICAgICAgIFZFUlRFWCAgKm91dAogKTsK
CklOVCBNQVRIX0VsZW1JbnNpZGUyZCgKICAgICAgICBWRVJURVggICpjb29yZHMsCiAgICAgICAg
SU5UICAgICBudW1iLAogICAgICAgIFJFQUwgICAgKnZlcnQsCiAgICAgICAgVkVDVDREICAqcGxh
bmVBcmcKICk7CgpJTlQgSW5zaWRlUG9seTJEKAogICAgICAgIFZFUlRFWCAgKmNvb3JkcywKICAg
ICAgICBJTlQgICAgIG51bWIsCiAgICAgICAgUkVBTCAgICAqdmVydCwKICAgICAgICBJTlQgICAg
IHcgICAgCiApOwoKSU5UIE1BVEhfSW50ZXJzZWN0U2VnMmQoCiAgICAgICAgRkxPQVQgeDFhLAog
ICAgICAgIEZMT0FUIHkxYSwKICAgICAgICBGTE9BVCB4MWIsCiAgICAgICAgRkxPQVQgeTFiLAog
ICAgICAgIEZMT0FUIHgyYSwKICAgICAgICBGTE9BVCB5MmEsCiAgICAgICAgRkxPQVQgeDJiLAog
ICAgICAgIEZMT0FUIHkyYiwKICAgICAgICBGTE9BVCAqeCwKICAgICAgICBGTE9BVCAqeQogKTsK
CklOVCBNQVRIX0ludGVyc2VjdExpbmVTZWcyZCgKICAgICAgICBGTE9BVCB4MWEsCiAgICAgICAg
RkxPQVQgeTFhLAogICAgICAgIEZMT0FUIHgxYiwKICAgICAgICBGTE9BVCB5MWIsCiAgICAgICAg
RkxPQVQgeDJhLAogICAgICAgIEZMT0FUIHkyYSwKICAgICAgICBGTE9BVCB4MmIsCiAgICAgICAg
RkxPQVQgeTJiLAogICAgICAgIEZMT0FUICp4LAogICAgICAgIEZMT0FUICp5CiApOwoKSU5UIE1B
VEhfQ2xpcFNlZ1RvUG9seSgKICAgICAgICBWRVJURVggICp2MEFyZywKICAgICAgICBWRVJURVgg
ICp2MUFyZywKICAgICAgICBWRVJURVggICp2ZXJ0cywKICAgICAgICBJTlQgICAgIG51bVZlcnRz
CiApOwoKSU5UIE1BVEhfQ2xpcExpbmVUb1BvbHkoCiAgICAgICAgVkVSVEVYICAqdjBBcmcsCiAg
ICAgICAgVkVSVEVYICAqdjFBcmcsCiAgICAgICAgVkVSVEVYICAqdmVydHMsCiAgICAgICAgSU5U
ICAgICBudW1WZXJ0cwogKTsKCnZvaWQgTUFUSF9HZXRQbGFuZUNvZGUoCiAgICAgICAgVkVDVDRE
ICAqcGxlcUFyZywKICAgICAgICBJTlQgICAgICp1LCAKICAgICAgICBJTlQgICAgICp2LCAKICAg
ICAgICBJTlQgICAgICp3CiApOwoKdm9pZCBNQVRIX01ha2VUaGlyZENvb3JkKAogICAgICAgIFZF
UlRFWCAgKnZlcnRzQXJnLAogICAgICAgIElOVCAgICAgbnVtVmVydHMsCiAgICAgICAgVkVDVDRE
ICAqcGxlcUFyZwogKTsKCklOVCBNQVRIX01ha2VXQ29vcmQoCiAgICAgICAgVkVSVEVYICAqdmVy
dHNBcmcsCiAgICAgICAgSU5UICAgICBudW1WZXJ0cywKICAgICAgICBWRUNUNEQgICpwbGVxQXJn
LAogICAgICAgIElOVCAgICAgdwogKTsKCnZvaWQgTUFUSF9NYWtlSW50ZXJzZWN0VygKICAgICAg
ICBWRVJURVggKnBudDFBcmcsCiAgICAgICAgVkVSVEVYICpwbnQyQXJnLAogICAgICAgIFZFUlRF
WCAqaW50ZXJBcmcsCiAgICAgICAgSU5UICAgIHcKICk7CgpJTlQgTUFUSF9JbnRlcnNlY3RQbGFu
ZXMoCiAgICAgICAgVkVDVDREICAqcGxlcTEsIAogICAgICAgIFZFQ1Q0RCAgKnBsZXEyLAogICAg
ICAgIFZFUlRFWCAgKnYxLCAKICAgICAgICBWRVJURVggICp2MgogKTsKCklOVCBNQVRIX0ludGVy
c2VjdFBvbHlzKAogICAgICAgIFZFUlRFWCAgKnAxVmVydHMsCiAgICAgICAgSU5UICAgICBudW0x
VmVydHMsCiAgICAgICAgVkVSVEVYICAqcDJWZXJ0cywKICAgICAgICBJTlQgICAgIG51bTJWZXJ0
cywKICAgICAgICBWRVJURVggICp2MSwgCiAgICAgICAgVkVSVEVYICAqdjIKICk7CgpJTlQgTUFU
SF9JbnNpZGVQb2x5M0QoCiAgICAgICAgVkVSVEVYICAqdmVydHMsICAgICAgCiAgICAgICAgaW50
ICAgICBOdW1PZlZlcnRzLAogICAgICAgIFZFQ1Q0RCAgKnBsYW5lLCAgICAgIAogICAgICAgIFZF
UlRFWCAgKmludGVyc2VjdCAgIAogKTsKCklOVCBNQVRIX0luc2lkZVBvbHkyRCgKICAgICAgICBW
RVJURVggICp2ZXJ0cywgICAgICAKICAgICAgICBpbnQgICAgIE51bU9mVmVydHMsCiAgICAgICAg
VkVSVEVYICAqaW50ZXJzZWN0LCAgCiAgICAgICAgSU5UICAgICB3ICAgICAgICAgICAgCiApOwoK
dm9pZCBNQVRIX0ZpbmRTcGhlcmVDb29yZCgKICAgICAgICBWRVJURVggICpvcmlnaW4sCiAgICAg
ICAgVkVSVEVYICAqcG50MiwKICAgICAgICBGTE9BVCAgICp6QW5nbGUsCiAgICAgICAgRkxPQVQg
ICAqeVJvdCwKICAgICAgICBGTE9BVCAgICpyYWRpdXMKICk7Cgp2b2lkIE1BVEhfVmVydGV4QXZl
KAogICAgICAgIFZFUlRFWCAgKnZlcnRzLAogICAgICAgIElOVCAgICAgbnVtYiwKICAgICAgICBS
RUFMICAgICp4LAogICAgICAgIFJFQUwgICAgKnksCiAgICAgICAgUkVBTCAgICAqegogKTsKCklO
VCBNQVRIX1BvaW50T25TZWczRCgKICAgICAgICBWRVJURVggICp2ZXJ0MSwKICAgICAgICBWRVJU
RVggICp2ZXJ0MiwKICAgICAgICBWRVJURVggICpwb2ludCwKICAgICAgICBSRUFMICAgIHRvbAog
KTsKCnZvaWQgTUFUSF9WZXJ0ZXhSZXZlcnNlKAogICAgICAgIFZFUlRFWCAqY29vcmRzLAogICAg
ICAgIElOVCBsZW5nCiApOwoKdm9pZCBNQVRIX0ZhY3RvckFsb25nU2VnbWVudCgKICAgICAgICBW
RVJURVggKnN0YXJ0LCAgIAogICAgICAgIFZFUlRFWCAqZW5kLCAgICAgCiAgICAgICAgVkVSVEVY
ICpwb2ludCwgICAKICAgICAgICBSRUFMICAgKmZhY3RvcgogKTsKClJFQUwgTUFUSF9GYXN0UG93
KAogICAgICAgIFJFQUwgICAgYmFzZSwKICAgICAgICBSRUFMICAgIGV4cG8KICk7CgpSRUFMIE1B
VEhfSVBvdygKICAgICAgICBSRUFMIG51bSwKICAgICAgICBJTlQgZXhwbwogKTsKCklOVCBNQVRI
X1F1YWRyYXRpY0VxdWF0aW9uKAogICAgRkxPQVQgICBBLAogICAgRkxPQVQgICBCLAogICAgRkxP
QVQgICBDLAogICAgRkxPQVQgICAqc29sMSwKICAgIEZMT0FUICAgKnNvbDIsCiAgICBGTE9BVCAg
ICpjaGVjazEsCiAgICBGTE9BVCAgICpjaGVjazIKICk7CgpCT09MRUFOIE1BVEhfUG9seWdvbjJE
Q2xvY2t3aXNlKAogICAgVkVSVDJEICAgICAgKmNvb3JkLAogICAgSU5UICAgICAgICAgbnVtYmVy
Q29vcmRzCiApOwoKQk9PTEVBTiBNQVRIX1BvaW50SW5Qb2x5Z29uMkQoCiAgICBWRVJUMkQgICAg
ICAqcG9pbnQsCiAgICBWRVJUMkQgICAgICAqY29vcmQsCiAgICBJTlQgICAgICAgICBudW1iZXJD
b29yZHMKICk7CgpjaGFyICpNQVRIX0Z0b2EgKAogICAgUkVBTCAgICB2YWx1ZQogKTsKCkJPT0xF
QU4gTUFUSF9TZXRNYXRoRnRvYVZlcmJvc2UgKAogICAgQk9PTEVBTiBzdGF0dXMKICk7CgpCT09M
RUFOIE1BVEhfR2V0TWF0aEZ0b2FWZXJib3NlICgKICAgIHZvaWQgCiApOwoKCiAKCnZvaWQgIE1B
VEhFUlJPUl9Jbml0ICgKICAgIHZvaWQgCiApOwoKSU5UIE1BVEhFUlJPUl9SZXBvcnQgKAogICAg
dm9pZCAKICk7CgoKIAoKdm9pZCBNQVRfSGFyZHdhcmVNdWx0KAogICAgICAgIElOVCBvbl9vZmYK
ICk7Cgp2b2lkIE1BVF9JZGVudGl0eSgKICAgICAgICBNQVRSSVggIG1hdHJpeEFyZwogKTsKCnZv
aWQgTUFUX0NvcHkgKAogICAgICAgIE1BVFJJWCAgZGVzdGluQXJnLCAKICAgICAgICBNQVRSSVgg
IHNvdXJjZUFyZwogKTsKCnZvaWQgTUFUX1dpbmRvdygKICAgICAgICBSRUFMICAgIHdsLCAKICAg
ICAgICBSRUFMICAgIHdyLCAKICAgICAgICBSRUFMICAgIHdiLCAKICAgICAgICBSRUFMICAgIHd0
LAogICAgICAgIFJFQUwgICAgd2gsIAogICAgICAgIFJFQUwgICAgd3ksIAogICAgICAgIFJFQUwg
ICAgd2UsCiAgICAgICAgUkVBTCAgICB3aW5kWzRdWzRdCiApOwoKSU5UIE1BVF9JbnZlcnNlKAog
ICAgICAgIGludCBkLCAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgTUFUUklYICBvcmdN
YXQsCiAgICAgICAgTUFUUklYICBpbnZNYXQKICk7Cgp2b2lkIE1BVF9UcmFuc2xhdGUoCiAgICAg
ICAgUkVBTCAgICB4LCAgICAgICAgICAgIAogICAgICAgIFJFQUwgICAgeSwgCiAgICAgICAgUkVB
TCAgICB6LAogICAgICAgIE1BVFJJWCAgbWF0cml4QXJnICAgIAogKTsKCnZvaWQgTUFUX1JvdGF0
ZSgKICAgICAgICBSRUFMICAgIGFuZ2xlLCAgICAgICAKICAgICAgICBpbnQgICAgIGF4aXMsICAg
ICAgICAKICAgICAgICBNQVRSSVggIG1hdHJpeEFyZyAgICAKICk7Cgp2b2lkIE1BVF9TY2FsZSgK
ICAgICAgICBSRUFMICAgIHgsIAogICAgICAgIFJFQUwgICAgeSwgCiAgICAgICAgUkVBTCAgICB6
LCAgICAgICAgICAgCiAgICAgICAgTUFUUklYICBtYXRyaXhBcmcgICAgCiApOwoKdm9pZCBNQVRf
U2tldygKICAgICAgICBSRUFMICAgIGZhY3RvcjEsIAogICAgICAgIFJFQUwgICAgZmFjdG9yMiwg
ICAgICAgICAKICAgICAgICBJTlQgICAgIGF4aXMsICAgICAgICAgICAgCiAgICAgICAgTUFUUklY
ICBtYXRyaXhBcmcgICAgICAgIAogKTsKCnZvaWQgTUFUX0RvdCgKICAgICAgICBWRUNUT1IgICpp
biwgICAgICAgICAgICAgCiAgICAgICAgUkVBTCAgICAqb3V0LCAgICAgICAgICAgIAogICAgICAg
IElOVCAgICAgbiwgICAgICAgICAgICAgICAKICAgICAgICBWRUNUT1IgICptICAgICAgICAgICAg
ICAgCiApOwoKdm9pZCBNQVRfUG9pbnRUcmFuc2Zvcm0oCiAgICAgICAgVkVDVE9SICAqaW4sICAg
ICAgICAgICAgIAogICAgICAgIFZFQ1RPUiAgKm91dCwgICAgICAgICAgICAKICAgICAgICBJTlQg
ICAgIG4sICAgICAgICAgICAgICAgCiAgICAgICAgTUFUUklYICBtICAgICAgICAgICAgICAgIAog
KTsKCnZvaWQgIE1BVF9Qb2ludFRyYW5zZm9ybSAoCiAgICBWRUNUT1IgICppbiwgICAgIAogICAg
VkVDVE9SICAqb3V0LCAgICAKICAgIElOVCAgICAgbiwgICAgICAgCiAgICBNQVRSSVggIG0gICAg
ICAgIAogKTsKCnZvaWQgIE1BVF9PbmVQb2ludFRyYW5zZm9ybSAoCiAgICAgICAgVkVDVE9SICAq
aW4sICAgICAKICAgICAgICBWRUNUT1IgICpvdXQsICAgIAogICAgICAgIE1BVFJJWCAgbSAgICAg
ICAgCiApOwoKdm9pZCBNQVRfVmVjdG9yVHJhbnNmb3JtKAogICAgICAgIFZFQ1Q0RCAqaW4sICAg
ICAgICAgICAgIAogICAgICAgIFZFQ1Q0RCAqb3V0LCAgICAgICAgICAgIAogICAgICAgIE1BVFJJ
WCBtICAgICAgICAgICAgICAgIAogKTsKCnZvaWQgIE1BVF9WZWN0b3JUcmFuc2Zvcm1Qb3N0TXVs
dCgKICAgICAgICBWRUNUNEQgKmluLCAgICAgICAgICAgICAKICAgICAgICBWRUNUNEQgKm91dCwg
ICAgICAgICAgICAKICAgICAgICBNQVRSSVggbSAgICAgICAgICAgICAgICAKICk7Cgp2b2lkIE1B
VF9BcmJSb3QoCiAgICAgICAgVkVDVE9SICAqcDEsICAgICAgICAgIAogICAgICAgIFZFQ1RPUiAg
KnAyLCAgICAgICAgICAKICAgICAgICBSRUFMICAgIGRlZ3JlZSwgICAgICAgCiAgICAgICAgTUFU
UklYICBtYXRyICAgICAgICAgIAogKTsKCnZvaWQgTUFUX0F4aXNSb3QoCiAgICAgICAgVkVDVE9S
ICpheGlzLCAgICAgICAKICAgICAgICBSRUFMICAgZGVncmVlLCAgICAgIAogICAgICAgIE1BVFJJ
WCBtYXQgICAgICAgICAgCiApOwoKdm9pZCBNQVRfUHJpbnQoCiAgICAgICAgTUFUUklYICBtYXQK
ICk7Cgp2b2lkIE1BVF9GcHJpbnQoCiAgICAgICAgRklMRSAgICAqZnB0ciwKICAgICAgICBNQVRS
SVggIG1hdAogKTsKCnZvaWQgTUFUX0ZwcmludFdpdGhJbmRlbnQoCiAgICAgICAgRklMRSAgICAq
ZnB0ciwKICAgICAgICBJTlQgICAgIGluZGVudCwKICAgICAgICBNQVRSSVggIG1hdAogKTsKCnZv
aWQgTUFUX0VwcmludFdpdGhJbmRlbnQoCiAgICAgICAgRklMRSAgICAqZnB0ciwKICAgICAgICBJ
TlQgICAgIGluZGVudCwKICAgICAgICBNQVRSSVggIG1hdAogKTsKCnZvaWQgTUFUX1Byb2plY3Qo
CiAgICAgICAgUE9JTlQgICAqcG9pbnQsCiAgICAgICAgVkVDVDREICAqcGxhbmUsCiAgICAgICAg
TUFUUklYICBtYXQKICk7Cgp2b2lkIE1BVF9PcnRob1Byb2plY3QoCiAgICAgICAgUE9JTlQgICAq
cG9pbnQsCiAgICAgICAgVkVDVDREICAqcGxhbmUsCiAgICAgICAgTUFUUklYICBtYXQKICk7Cgp2
b2lkIE1BVF9SZWZsZWN0KAogICAgICAgIFZFQ1Q0RCAgKnBsYW5lLAogICAgICAgIE1BVFJJWCAg
bWF0CiApOwoKdm9pZCBNQVRfTWFrZVhmb3JtKAogICAgICAgIElOVCAgICAgZ2ltYmxlWzNdLAog
ICAgICAgIEZMT0FUICAgdHgsCiAgICAgICAgRkxPQVQgICB0eSwKICAgICAgICBGTE9BVCAgIHR6
LAogICAgICAgIEZMT0FUICAgcngsCiAgICAgICAgRkxPQVQgICByeSwKICAgICAgICBGTE9BVCAg
IHJ6LAogICAgICAgIEZMT0FUICAgc3gsCiAgICAgICAgRkxPQVQgICBzeSwKICAgICAgICBGTE9B
VCAgIHN6LAogICAgICAgIE1BVFJJWCAgbWF0CiApOwoKdm9pZCBNQVRfTWFrZUxvY2FsKAogICAg
ICAgIFZFUlRFWCAqY2VudGVyLAogICAgICAgIFZFUlRFWCAqYXhpcywKICAgICAgICBNQVRSSVgg
bWF0CiApOwoKSU5UIE1BVF9QZXJzcGVjdGl2ZSgKICAgICAgICBGTE9BVCAgIHdpZHRoLCAgICAg
CiAgICAgICAgRkxPQVQgICBhc3BlY3QsICAgIAoKICAgICAgICBGTE9BVCAgIGhpdGhlciwgICAg
CgogICAgICAgIEZMT0FUICAgeW9uLCAgICAgICAKICAgICAgICBNQVRSSVggIG1hdCAgICAgICAg
CiApOwoKdm9pZCBNQVRfVmlld3BvcnQoCiAgICAgICAgRkxPQVQgICAgICBsZWZ0LAogICAgICAg
IEZMT0FUICAgICAgcmlnaHQsCiAgICAgICAgRkxPQVQgICAgICBib3R0b20sCiAgICAgICAgRkxP
QVQgICAgICB0b3AsCiAgICAgICAgTUFUUklYICAgICBtYXQKICk7Cgp2b2lkIE1BVF9DYW1lcmEo
CiAgICAgICAgRkxPQVQgZm9jYWxMZW4sCiAgICAgICAgRkxPQVQgYXBlcnR1cmUsCiAgICAgICAg
RkxPQVQgYXNwZWN0LAogICAgICAgIEZMT0FUIGhpdGhlciwKICAgICAgICBGTE9BVCB5b24sCiAg
ICAgICAgTUFUUklYIG1hdAogKTsKCklOVCBNQVRfVmVjdFJvdGF0ZSgKICAgICAgICBWRVJURVgg
ICp0YXJnVmVjdCwKICAgICAgICBWRVJURVggICpjdXJWZWN0LAogICAgICAgIE1BVFJJWCAgbWF0
CiApOwoKSU5UIE1BVF9WZWN0Um90YXRlQWRqdXN0YWJsZSgKICAgICAgICBWRVJURVggICp0YXJn
VmVjdCwKICAgICAgICBWRVJURVggICpjdXJWZWN0LAogICAgICAgIFJFQUwgICAgYW1vdW50LCAg
ICAgIAogICAgICAgIE1BVFJJWCAgbWF0CiApOwoKdm9pZCBNQVRfQ29uY2F0KAogICAgICAgIE1B
VFJJWCBtYXQxLAogICAgICAgIE1BVFJJWCBtYXQyLAogICAgICAgIE1BVFJJWCBtYXQzCiApOwoK
dm9pZCBNQVRfQ29uY2F0KAogICAgICAgIE1BVFJJWCAgbWF0MUFyZywKICAgICAgICBNQVRSSVgg
IG1hdDJBcmcsCiAgICAgICAgTUFUUklYICBtYXQzQXJnCiApOwoKdm9pZCAgTUFUX0F0b01hdCgK
ICAgIGNvbnN0IENIQVIgICoqYXJndiwKICAgIE1BVFJJWCAgbWF0CiApOwoKdm9pZCAgTUFUX1Nw
cmludE1hdCgKICAgIENIQVIgICAgKnN0ciwKICAgIE1BVFJJWCAgbWF0CiApOwoKSU5UIE1BVF9D
b21wYXJlKAogICAgICAgIE1BVFJJWCAgbWF0MSwgCiAgICAgICAgTUFUUklYICBtYXQyCiApOwoK
SU5UIE1BVF9Db21wYXJlSXNDbG9zZSAoCiAgICBNQVRSSVggIG1hdDEsIAogICAgTUFUUklYICBt
YXQyCiApOwoKdm9pZCBNQVRfVHJhbnNwb3NlKAogICAgICAgIE1BVFJJWCAgbWF0MSwKICAgICAg
ICBNQVRSSVggIG1hdDIKICk7Cgp2b2lkIE1BVF9QaXZvdFRocmVlUm90cygKICAgICAgICBSRUFM
ICAgIHhvZmYsIAogICAgICAgIFJFQUwgICAgeW9mZiwgCiAgICAgICAgUkVBTCAgICB6b2ZmLAog
ICAgICAgIFJFQUwgICAgYW5nbGUxLAogICAgICAgIElOVCAgICAgYXhpczEsCiAgICAgICAgUkVB
TCAgICBhbmdsZTIsCiAgICAgICAgSU5UICAgICBheGlzMiwKICAgICAgICBSRUFMICAgIGFuZ2xl
MywKICAgICAgICBJTlQgICAgIGF4aXMzLAogICAgICAgIE1BVFJJWCAgbWF0CiApOwoKdm9pZCBN
QVRfUGl2b3RPbmVSb3QoCiAgICAgICAgUkVBTCAgICB4b2ZmLCAKICAgICAgICBSRUFMICAgIHlv
ZmYsIAogICAgICAgIFJFQUwgICAgem9mZiwKICAgICAgICBSRUFMICAgIGFuZ2xlLAogICAgICAg
IElOVCAgICAgYXhpcywKICAgICAgICBNQVRSSVggIG1hdAogKTsKCklOVCBNQVRfRmluZFJvdHMo
CiAgICAgICAgTUFUUklYICBtLAogICAgICAgIFJFQUwgICAgKnhSb3QsCiAgICAgICAgUkVBTCAg
ICAqeVJvdCwKICAgICAgICBSRUFMICAgICp6Um90CiApOwoKSU5UIE1BVF9GaW5kR2ltYmFsUm90
cygKICAgICAgICBNQVRSSVggIG0sCiAgICAgICAgUkVBTCAgICAqcm90cywKICAgICAgICBJTlQg
ICAgICpnaW1iYWwKICk7CgpSRUFMIE1BVF9EZXRlcm1pbmFudDMzb2Y0NCgKICAgICAgICAgICAg
ICAgIE1BVFJJWCBtCiApOwoKCiAKCnZvaWQgIFRSU01BVF9Db25jYXRYVHJhblRvTWF0ICgKICAg
IE1BVFJJWCAgaW5NYXQsCiAgICBSRUFMICAgIHZhbHVlLAogICAgTUFUUklYICBvdXRNYXQKICk7
Cgp2b2lkICBUUlNNQVRfQ29uY2F0WVRyYW5Ub01hdCAoCiAgICBNQVRSSVggIGluTWF0LAogICAg
UkVBTCAgICB2YWx1ZSwKICAgIE1BVFJJWCAgb3V0TWF0CiApOwoKdm9pZCAgVFJTTUFUX0NvbmNh
dFpUcmFuVG9NYXQgKAogICAgTUFUUklYICBpbk1hdCwKICAgIFJFQUwgICAgdmFsdWUsCiAgICBN
QVRSSVggIG91dE1hdAogKTsKCnZvaWQgIFRSU01BVF9Db25jYXRYU2NhbGVUb01hdCAoCiAgICBN
QVRSSVggIGluTWF0LAogICAgUkVBTCAgICB2YWx1ZSwKICAgIE1BVFJJWCAgb3V0TWF0CiApOwoK
dm9pZCAgVFJTTUFUX0NvbmNhdFlTY2FsZVRvTWF0ICgKICAgIE1BVFJJWCAgaW5NYXQsCiAgICBS
RUFMICAgIHZhbHVlLAogICAgTUFUUklYICBvdXRNYXQKICk7Cgp2b2lkICBUUlNNQVRfQ29uY2F0
WlNjYWxlVG9NYXQgKAogICAgTUFUUklYICBpbk1hdCwKICAgIFJFQUwgICAgdmFsdWUsCiAgICBN
QVRSSVggIG91dE1hdAogKTsKCnZvaWQgIFRSU01BVF9Db25jYXRBU2NhbGVUb01hdCAoCiAgICBN
QVRSSVggIGluTWF0LAogICAgUkVBTCAgICB2YWx1ZSwKICAgIE1BVFJJWCAgb3V0TWF0CiApOwoK
dm9pZCAgVFJTTUFUX0NvbmNhdFhSb3RUb01hdCAoCiAgICBNQVRSSVggIGluTWF0LAogICAgUkVB
TCAgICByYWRpYW5zLAogICAgTUFUUklYICBvdXRNYXQKICk7Cgp2b2lkICBUUlNNQVRfQ29uY2F0
WVJvdFRvTWF0ICgKICAgIE1BVFJJWCAgaW5NYXQsCiAgICBSRUFMICAgIHJhZGlhbnMsCiAgICBN
QVRSSVggIG91dE1hdAogKTsKCnZvaWQgIFRSU01BVF9Db25jYXRaUm90VG9NYXQgKAogICAgTUFU
UklYICBpbk1hdCwKICAgIFJFQUwgICAgcmFkaWFucywKICAgIE1BVFJJWCAgb3V0TWF0CiApOwoK
dm9pZCAgVFJTTUFUX1RyYW5zZm9ybU9uZVZlcnQgKAogICAgVkVSVEVYICAqaW4sCiAgICBWRVJU
RVggICpvdXQsCiAgICBNQVRSSVggIG1hdAogKTsKCnZvaWQgIFRSU01BVF9Qb2ludFRyYW5zZm9y
bSAoCiAgICBWRVJURVggICppbiwKICAgIFZFUlRFWCAgKm91dCwKICAgIElOVCAgICAgbnVtYmVy
LAogICAgTUFUUklYICBtYXQKICk7Cgp2b2lkICBUUlNNQVRfSWRlbnRpdHkgKAogICAgTUFUUklY
ICBtYXRyaXgKICk7CgpCT09MRUFOIFRSU01BVF9DaGVhcFZlcnRYUm90UmFkaWFuICgKICAgIFJF
QUwgICAgcmFkaWFucywKICAgIFZFUlRFWCAgKnZlcnQKICk7CgpCT09MRUFOIFRSU01BVF9DaGVh
cFZlcnRZUm90UmFkaWFuICgKICAgIFJFQUwgICAgcmFkaWFucywKICAgIFZFUlRFWCAgKnZlcnQK
ICk7CgpCT09MRUFOIFRSU01BVF9DaGVhcFZlcnRaUm90UmFkaWFuICgKICAgIFJFQUwgICAgcmFk
aWFucywKICAgIFZFUlRFWCAgKnZlcnQKICk7CgpCT09MRUFOIFRSU01BVF9DaGVhcFZlcnRYUm90
RGVncmVlICgKICAgIFJFQUwgICAgZGVncmVlcywKICAgIFZFUlRFWCAgKnZlcnQKICk7CgpCT09M
RUFOIFRSU01BVF9DaGVhcFZlcnRZUm90RGVncmVlICgKICAgIFJFQUwgICAgZGVncmVlcywKICAg
IFZFUlRFWCAgKnZlcnQKICk7CgpCT09MRUFOIFRSU01BVF9DaGVhcFZlcnRaUm90RGVncmVlICgK
ICAgIFJFQUwgICAgZGVncmVlcywKICAgIFZFUlRFWCAgKnZlcnQKICk7CgpCT09MRUFOIFRSU01B
VF9DaGVhcFZlcnRYUm90RGVncmVlMiAoCiAgICBSRUFMICAgIGRlZ3JlZXMsCiAgICBWRVJURVgg
ICp2ZXJ0SW4sCiAgICBWRVJURVggICp2ZXJ0T3V0CiApOwoKQk9PTEVBTiBUUlNNQVRfQ2hlYXBW
ZXJ0WVJvdERlZ3JlZTIgKAogICAgUkVBTCAgICBkZWdyZWVzLAogICAgVkVSVEVYICAqdmVydElu
LAogICAgVkVSVEVYICAqdmVydE91dAogKTsKCkJPT0xFQU4gVFJTTUFUX0NoZWFwVmVydFpSb3RE
ZWdyZWUyICgKICAgIFJFQUwgICAgZGVncmVlcywKICAgIFZFUlRFWCAgKnZlcnRJbiwKICAgIFZF
UlRFWCAgKnZlcnRPdXQKICk7Cgp2b2lkICBUUlNNQVRfQ29uY2F0ICgKICAgIE1BVFJJWCAgbWF0
MUFyZywKICAgIE1BVFJJWCAgbWF0MkFyZywKICAgIE1BVFJJWCAgbWF0M0FyZwogKTsKCnZvaWQg
IFJPVE1BVF9UcmFuc2Zvcm1PbmVWZXJ0ICgKICAgIFZFUlRFWCAgKmluLAogICAgVkVSVEVYICAq
b3V0LAogICAgTUFUUklYICBtYXQKICk7CgoKIAoKZmxvYXQgVV9DYWxjdWxhdGVTbGljZVRpbWUg
KAogICAgaW50IHdoaWNoU2VnbWVudCwKICAgIGludCB0b3RhbFNsaWNlcywKICAgIGZsb2F0IHNo
dXR0ZXJTdGFydCwKICAgIGZsb2F0IHNodXR0ZXJFbmQKICk7CgoKIAoKdm9pZCBNRU1fSW5pdCgK
ICAgICAgICBJTlQgICAgIGNvbnN0YW50Q2hlY2tpbmcgICAgCiApOwoKdm9pZCBNRU1fS2VlcFN0
YXRzKAogICAgICAgIHZvaWQKICk7Cgp2b2lkIE1FTV9DbG9zZVN0YXRzICgKICAgIHZvaWQKICk7
Cgp2b2lkIE1FTV9NYXJrU3RhdHMoCiAgICAgICAgY2hhciAqbWVzc2FnZQogKTsKCkZJTEUgKk1F
TV9HZXRNZW1GaWxlRnAgKAogICAgICAgIHZvaWQKICk7Cgp2b2lkICpNRU1fQWxsb2MoCiAgICAg
ICAgSU5UIG51bWIsICAgIAogICAgICAgIElOVCBzaXplLCAgICAKICAgICAgICBJTlQgZXh0cmEg
ICAgCiApOwoKSU5UIE1FTV9WZXJpZnkoIAogICAgICAgIHZvaWQgICAgICAgICAgICAqYnVmLAog
ICAgICAgIHJlZ2lzdGVyIGNoYXIgICAqbWVzc2FnZSAgICAgCiApOwoKdm9pZCAqTUVNX0NhbGxv
YygKICAgICAgICBJTlQgbnVtYiwgICAgCiAgICAgICAgSU5UIHNpemUsICAgIAogICAgICAgIElO
VCBleHRyYSAgICAKICk7Cgp2b2lkICpNRU1fQXBwZW5kKCAKICAgICAgICB2b2lkICpidWYsICAg
ICAgICAgICAKICAgICAgICBjb25zdCB2b2lkICphcnJheSwgICAKICAgICAgICBJTlQgbnVtYiAg
ICAgICAgICAgICAKICk7Cgp2b2lkICpNRU1fQ29weSgKICAgICAgICB2b2lkICpvdXQsICAgICAg
IAogICAgICAgIHZvaWQgKmluICAgICAgICAgCiApOwoKdm9pZCAqTUVNX1Jlc2l6ZSgKICAgICAg
ICB2b2lkICpidWYsICAgICAgIAogICAgICAgIElOVCAgbnVtYiAgICAgICAgCiApOwoKdm9pZCAq
TUVNX1RvdGFsU2l6ZSggCiAgICAgICAgdm9pZCAqYnVmLCAgICAgICAKICAgICAgICBJTlQgbnVt
YiAgICAgICAgIAogKTsKCnZvaWQgTUVNX1VzZVVwKCAKICAgICAgICB2b2lkICpidWYsICAgICAg
IAogICAgICAgIElOVCBudW1iICAgICAgICAgCiApOwoKdm9pZCBNRU1fRnJlZSggCiAgICAgICAg
dm9pZCAgICAqYnVmICAgICAgICAgCiApOwoKSU5UIE1FTV9GcmVlX1goIAogICAgICAgIHZvaWQg
ICAgKmJ1ZiwgICAKICAgICAgICBjaGFyICAgICptZXNzYWdlCiApOwoKdm9pZCBNRU1fR2V0TnVt
YiggCiAgICAgICAgdm9pZCAqYnVmLCAgICAgICAKICAgICAgICBJTlQgKm51bWIgICAgICAgIAog
KTsKCnZvaWQgTUVNX0dldFNpemUoIAogICAgICAgIHZvaWQgKmJ1ZiwgIAogICAgICAgIElOVCAq
c2l6ZQogKTsKCnZvaWQgTUVNX0dldE51bWJUaW1lc1NpemUoIAogICAgICAgIHZvaWQgKmJ1ZiwK
ICAgICAgICBJTlQgKnRvdGFsCiApOwoKdm9pZCBNRU1fR2V0VG90YWxCdWZmZXJNZW1vcnlVc2Fn
ZSgKICAgICAgICB2b2lkICAgICpidWYsICAgIAogICAgICAgIElOVCAgICAgKnRvdGFsICAgCiAp
OwoKdm9pZCBNRU1fR2V0TnVtYkV4dHJhKCAKICAgICAgICB2b2lkICpidWYsICAgICAgIAogICAg
ICAgIElOVCAqZXh0cmEgICAgICAgCiApOwoKdm9pZCBNRU1fU2V0TnVtYkV4dHJhKCAKICAgICAg
ICB2b2lkICpidWYsICAgICAgIAogICAgICAgIElOVCBleHRyYSAgICAgICAgCiApOwoKdm9pZCBN
RU1fR2V0SGVhZGVyKCAKICAgICAgICB2b2lkICpidWYsICAgICAgIAogICAgICAgIElOVCAqbnVt
YiwgICAgICAgCiAgICAgICAgSU5UICpzaXplLCAgICAgICAKICAgICAgICBJTlQgKmV4dHJhLCAg
ICAgIAogICAgICAgIElOVCAqYXZhaWwgICAgICAgCiApOwoKdm9pZCAqTUVNX1RtcCgKICAgICAg
ICBJTlQgbnVtYiwgICAgICAgIAogICAgICAgIElOVCBzaXplICAgICAgICAgCiApOwoKdm9pZCAq
TUVNX1RtcENhbGxvYyggCiAgICAgICAgSU5UIG51bWIsICAgCiAgICAgICAgSU5UIHNpemUgCiAp
OwoKdm9pZCBNRU1fRGVsZXRlKCAKICAgICAgICB2b2lkICpidWYKICk7CgpJTlQgTUVNX0RlbGV0
ZVNlZygKICAgICAgICB2b2lkICpidWYsICAgICAgIAogICAgICAgIElOVCBzdGFydCwgICAgICAg
CiAgICAgICAgSU5UIG51bWIgICAgICAgICAKICk7Cgp2b2lkICpNRU1fSW5zZXJ0KCAKICAgICAg
ICB2b2lkICpidWYsICAgICAgCiAgICAgICAgdm9pZCAqYXJyYXksICAgICAKICAgICAgICBJTlQg
c3RhcnQsICAgICAgIAogICAgICAgIElOVCBudW1iICAgICAgICAgCiApOwoKdm9pZCAqTUVNX1Nl
dE51bWIoCiAgICAgICAgdm9pZCAqYnVmLCAgICAgICAKICAgICAgICBJTlQgbnVtYiAgICAgICAg
IAogKTsKCnZvaWQgTUVNX0JyZWFrUG9pbnQoCiAgICAgICAgdm9pZAogKTsKCnZvaWQgTUVNX0No
ZWNrQWxsKAogICAgICAgIHZvaWQKICk7Cgp2b2lkIE1FTV9EZWJ1Z051bWIoCiAgICAgICAgY2hh
ciAqbWVzc2FnZQogKTsKCklOVCBNRU1fR2V0VG90YWwgKAogICAgICAgIHZvaWQKICk7Cgp2b2lk
IE1FTV9QcmludEFsbCgKICAgICAgICBGSUxFICAgICpmcHRyCiApOwoKSU5UIE1FTV9EZWJ1Z1By
aW50b3V0ICgKICAgICAgICB2b2lkICAgICAgICAgICAgKmJ1ZiwKICAgICAgICByZWdpc3RlciBj
aGFyICAgKm1lc3NhZ2UgICAgIAogKTsKCkJPT0xFQU4gTUVNX1NldFZlcmlmeU1lc3NhZ2VTdGF0
dXMgKAogICAgQk9PTEVBTiBzdGF0dXMKICk7CgpCT09MRUFOIE1FTV9HZXRWZXJpZnlNZXNzYWdl
U3RhdHVzICgKICAgIHZvaWQgCiApOwoKQk9PTEVBTiBNRU1fU2V0VmVyaWZ5TWVzc2FnZSAoCiAg
ICBjaGFyICAgICptZXNzYWdlUHRyCiApOwoKdm9pZCAgTUVNX0luaXRWZXJpZnlNZXNzYWdlICgK
ICAgIHZvaWQgCiApOwoKdm9pZCAgTUVNX0NvbmN1cnJlbnQgKAogICAgICAgIElOVCAgICAgZmxh
ZwogKTsKCgogCgpJTlQgICAgIE1OR1JfUmVnaXN0ZXJUYXNrKAogICAgICAgIENIQVIgICAgICAg
ICpwcm9nLAogICAgICAgIElOVCAgICAgICAgIGJlZ2luLAogICAgICAgIElOVCAgICAgICAgIGVu
ZCwKICAgICAgICBJTlQgICAgICAgICBpbmMsCiAgICAgICAgSU5UICAgICAgICAgZnJhbWUsCiAg
ICAgICAgSU5UICAgICAgICAgbXBQcm9jcwogKTsKCgogCgp2b2lkIFVUSUxQQVJTRV9EZWJsYW5r
KAogICAgICAgIGNoYXIgICAgKm9wZXJhbmQKICk7Cgp2b2lkIFVUSUxQQVJTRV9TdHJpcF9YX1do
aXRlc3BhY2UoCiAgICAgICAgY2hhciAgICAqbGluZQogKTsKCnZvaWQgVVRJTFBBUlNFX0RldGFi
KAogICAgICAgIGNoYXIgICAgKmxpbmUKICk7Cgp2b2lkIFVUSUxQQVJTRV9EZWJsYW5rKAogICAg
ICAgIGNoYXIgICAgKm9wZXJhbmQKICk7CgoKIAoKdm9pZCAgUFRSX0Fzc2lnbkFyYml0cmFyeSgg
CiAgICAgICAgdm9pZCAgKmZyb20sIAogICAgICAgIHZvaWQgICp0bwogKTsKCgogCgp2b2lkICBV
X0ZpbmRSb3QoCiAgICBWRVJURVggICpwbnQxLAogICAgVkVSVEVYICAqcG50MiwKICAgIEZMT0FU
ICAgKnpyb3QsCiAgICBGTE9BVCAgICp5cm90CiApOwoKdm9pZCAgVV9VblJvdGF0ZSAoCiAgICBN
QVRSSVggIG1hdHJvdCwKICAgIGZsb2F0ICAgcHJlZlJvbGwsCiAgICBmbG9hdCAgICp5YXcsCiAg
ICBmbG9hdCAgICpwaXRjaCwKICAgIGZsb2F0ICAgKnJvbGwKICk7CgoKIAoKdm9pZCAgTUFUSF9S
b3RhdGVUb1hZUGxhbmUoCiAgICAgICAgVkVSVEVYICpub3JtLAogICAgICAgIFJFQUwgKnhSb3Qs
CiAgICAgICAgUkVBTCAqeVJvdCAKICk7Cgp2b2lkICBNQVRIX1JvdGF0ZVRvWVpQbGFuZSgKICAg
ICAgICBWRVJURVggKm5vcm0sCiAgICAgICAgUkVBTCAqeVJvdCwKICAgICAgICBSRUFMICp6Um90
IAogKTsKCnZvaWQgIE1BVEhfUm90YXRlVG9YWlBsYW5lKAogICAgICAgIFZFUlRFWCAqbm9ybSwK
ICAgICAgICBSRUFMICp4Um90LAogICAgICAgIFJFQUwgKnpSb3QgCiApOwoKCiAKCnZvaWQgTUFU
SF9SdW5nZUt1dHRhNCgKICAgICAgICBSRUFMICAgICpjdXJyZW50U3RhdGUsIAogICAgICAgIFJF
QUwgICAgKm5ld1N0YXRlLCAKICAgICAgICBSRUFMICAgICpkZXJpdnMsCiAgICAgICAgSU5UICAg
ICBudW1iSXRlbXMsIAogICAgICAgIElOVCAgICAgaXRlbVNpemUsCiAgICAgICAgUkVBTCAgICB0
aW1lU2xpY2UsCiAgICAgICAgdm9pZCAgICAgKCpHZXREZXJpdnMpKAogICAgICAgICAgICAgICAg
ICAgIFJFQUwgICAgKmN1cnJlbnRTdGF0ZSwKICAgICAgICAgICAgICAgICAgICBSRUFMICAgICp0
bXBEZXJpdnMsCiAgICAgICAgICAgICAgICAgICAgSU5UICAgICBudW1iSXRlbXMsCiAgICAgICAg
ICAgICAgICAgICAgUFRSICAgICBleHRyYVB0cgogICAgICAgICAgICAgICAgKSwKICAgICAgICBQ
VFIgICAgIGV4dHJhUHRyCiApOwoKdm9pZCBNQVRIX1J1bmdlS3V0dGE0Q2xlYXJEZXJpdnMoCiAg
ICAgICAgUkVBTCAqZGVyaXZzLAogICAgICAgIElOVCAgbnVtYkl0ZW1zLCAKICAgICAgICBJTlQg
IGl0ZW1TaXplCiApOwoKdm9pZCBNQVRIX1J1bmdlS3V0dGE0QXBwbHlEZXJpdnMoCiAgICAgICAg
UkVBTCAqY3VycmVudFN0YXRlLCAKICAgICAgICBSRUFMICpuZXdTdGF0ZSwgCiAgICAgICAgUkVB
TCAqZGVyaXZzLAogICAgICAgIElOVCAgbnVtYkl0ZW1zLCAKICAgICAgICBJTlQgIGl0ZW1TaXpl
LAogICAgICAgIFJFQUwgdGltZVNsaWNlCiApOwoKdm9pZCBNQVRIX1J1bmdlS3V0dGE0Q29tYmlu
ZURlcml2cygKICAgICAgICBSRUFMICpkZXJpdnMsIAogICAgICAgIFJFQUwgKnRtcERlcml2cywK
ICAgICAgICBJTlQgIG51bWJJdGVtcywgCiAgICAgICAgSU5UICBpdGVtU2l6ZSwKICAgICAgICBS
RUFMICBmcmFjdAogKTsKCnZvaWQgTUFUSF9SdW5nZUt1dHRhNENvcHlEZXJpdnMoCiAgICAgICAg
UkVBTCAqZGVyaXZzLCAKICAgICAgICBSRUFMICp0bXBEZXJpdnMsCiAgICAgICAgSU5UICBudW1i
SXRlbXMsIAogICAgICAgIElOVCAgaXRlbVNpemUKICk7CgoKIAoKCiAKCnZvaWQgICAgICpNRU1N
X0dldFNoYXJlZEl0ZW0oCiAgICAgICAgQ0hBUiAgICAqZmlsZW5hbWUsCiAgICAgICAgQ0hBUiAg
ICAqdHlwZSwKICAgICAgICBJTlQgICAgICplcnJvciwKICAgICAgICBJTlQgICAgICptZW1Vc2Fn
ZSwKICAgICAgICBCT09MRUFOIGxvYWRJdGVtLAogICAgICAgIENIQVIgICAgKmxvYWRJdGVtSWQK
ICk7CgpJTlQgTUVNTV9NYWtlU2hhcmVkSXRlbSgKICAgICAgICBDSEFSICAgICpmaWxlbmFtZSwK
ICAgICAgICBDSEFSICAgICp0eXBlLAogICAgICAgIHZvaWQgICAgICpieXRlcywKICAgICAgICBJ
TlQgICAgIHNpemUsCiAgICAgICAgdm9pZCAgICAgKipyZXR1cm5Mb2MsCiAgICAgICAgQk9PTEVB
TiByZXR1cm5Mb2NhdGlvbiwKICAgICAgICBDSEFSICAgICpsb2FkSXRlbUlkLAogICAgICAgIElO
VCAgICAgdmVyYm9zZQogKTsKCklOVCBNRU1NX01ha2VTaGFyZWRJdGVtTm9Db3B5KAogICAgICAg
IENIQVIgICAgKmZpbGVuYW1lLAogICAgICAgIENIQVIgICAgKnR5cGUsCiAgICAgICAgSU5UICAg
ICBzaXplLAogICAgICAgIHZvaWQgICAgICoqcmV0dXJuTG9jLAogICAgICAgIENIQVIgICAgKmxv
YWRJdGVtSWQsCiAgICAgICAgSU5UICAgICB2ZXJib3NlCiApOwoKdm9pZCAgTUVNTV9SZWFkSXRl
bXMoCiAgICAgICAgICAgIHZvaWQgCiApOwoKSU5UIE1FTU1fRGVsZXRlT2xkKAogICAgICAgIElO
VCAgICAgbGlmZVNwYW4KICk7Cgp2b2lkICBNRU1NX1B1cmdlKAogICAgICAgICAgICB2b2lkIAog
KTsKCklOVCBNRU1NX1JlYWRJbmZvKAogICAgICAgIElOVCAgICAgKm1lbSwKICAgICAgICBJTlQg
ICAgICpsaWZlc3BhbgogKTsKCklOVCBNRU1NX1dyaXRlSW5mbygKICAgICAgICBJTlQgICAgIG1l
bSwKICAgICAgICBJTlQgICAgIGxpZmVzcGFuCiApOwoKSU5UIE1FTU1fRGVsZXRlS2V5KAogICAg
ICAgIElOVCAgICAga2V5CiApOwoKSU5UIE1FTU1fRGVsZXRlQWxsVXNlckRhdGEoCiAgICAgICAg
SU5UICAgICB1aWQKICk7CgpJTlQgTUVNTV9EZWxldGVBbGwoCiAgICAgICAgICAgIHZvaWQgCiAp
OwoKSU5UIE1FTU1fTWVtVXNlZCgKICAgICAgICAgICAgdm9pZCAKICk7Cgp2b2lkICAqTUVNTV9H
ZXRTaGFyZWRJdGVtKAogICAgICAgIENIQVIgICAgKmZpbGVuYW1lLAogICAgICAgIENIQVIgICAg
KnR5cGUsCiAgICAgICAgSU5UICAgICAqZXJyb3IsCiAgICAgICAgSU5UICAgICAqbWVtVXNhZ2Us
CiAgICAgICAgQk9PTEVBTiBsb2FkSXRlbSwKICAgICAgICBDSEFSICAgICpsb2FkSXRlbUlkCiAp
OwoKSU5UIE1FTU1fTWFrZVNoYXJlZEl0ZW0oCiAgICAgICAgQ0hBUiAgICAqZmlsZW5hbWUsCiAg
ICAgICAgQ0hBUiAgICAqdHlwZSwKICAgICAgICB2b2lkICAgICAqYnl0ZXMsCiAgICAgICAgSU5U
ICAgICBzaXplLAogICAgICAgIHZvaWQgICAgICoqbG9jLAogICAgICAgIEJPT0xFQU4gcmV0dXJu
TG9jYXRpb24sCiAgICAgICAgQ0hBUiAgICAqbG9hZEl0ZW1JZCwKICAgICAgICBJTlQgICAgIHZl
cmJvc2UKICk7CgpJTlQgTUVNTV9UYWxrKAogICAgICAgIE1FTU1fSVRFTSAgICpjbWRidWYKICk7
CgoKIAoKdm9pZCAgTUFUSF9HZXRTbmFrZU1hdHJpeCgKICAgICAgICBWRVJURVggKnBhdGgsCiAg
ICAgICAgSU5UIGN1ckluZGV4LAogICAgICAgIElOVCBjbG9zZWQsCiAgICAgICAgSU5UIHNlZywK
ICAgICAgICBJTlQgc3RhcnQsCiAgICAgICAgSU5UIGVuZCwKICAgICAgICBJTlQgdW5yb2xsLAog
ICAgICAgIE1BVFJJWCBtYXQgCiApOwoKdm9pZCAgTUFUSF9HZXRSYWlsTWF0cml4KAogICAgICAg
IFZFUlRFWCAgKnJhaWwxLAogICAgICAgIFZFUlRFWCAgKnJhaWwyLAogICAgICAgIElOVCAgICAg
cmFpbExlbmd0aCwgCiAgICAgICAgSU5UICAgICBpbmRleCwKICAgICAgICBWRVJURVggICp1cFZl
Y3QsCiAgICAgICAgVkVSVEVYICAqdmVydDEsCiAgICAgICAgVkVSVEVYICAqdmVydDIsCiAgICAg
ICAgSU5UICAgICBoZWlnaHRSZWxhdGl2ZSwKICAgICAgICBNQVRSSVggIG1hdCAsCiAgICAgICAg
Qk9PTEVBTiBub1NjYWxlCiApOwoKCiAKCnZvaWQgIFNPQ0tfUmVhcGVyKAogICAgICAgIHZvaWQg
CiApOwoKSU5UIFNPQ0tfUmVhZEJ1ZigKICAgICAgICBJTlQgICAgIGZkLAogICAgICAgIHZvaWQg
ICAgICpidWYsCiAgICAgICAgSU5UICAgICBsZW4gCiApOwoKSU5UIFNPQ0tfV3JpdGVCdWYoCiAg
ICAgICAgSU5UICAgICBmZCwKICAgICAgICBjb25zdCB2b2lkICAgKmJ1ZiwKICAgICAgICBJTlQg
ICAgIGxlbiAKICk7CgpJTlQgU09DS19PcGVuKAogICAgICAgIENIQVIgICAgKnNlcnZpY2UgCiAp
OwoKSU5UIFNPQ0tfQ29ubmVjdCgKICAgICAgICBjb25zdCBDSEFSICAqaG9zdCwKICAgICAgICBj
b25zdCBDSEFSICAqc2VydmljZSwKICAgICAgICBJTlQgICAgICplcnJvciAKICk7Cgp2b2lkICBT
T0NLX1NldFRpbWVvdXQoCiAgICAgICAgSU5UICAgICBsZW5ndGggCiApOwoKSU5UICAgICBTT0NL
X1VEUE9wZW4oCiAgICAgICAgQ0hBUiAgKnNlcnZpY2UKICk7CgpJTlQgICAgIFNPQ0tfU2VuZEJ1
ZigKICAgICAgICBJTlQgICAgICAgICAgICAgc29jaywKICAgICAgICBDSEFSICAgICAgICAgICAg
KmJ1ZiwKICAgICAgICBJTlQgICAgICAgICAgICAgbGVuLAogICAgICAgIHN0cnVjdCBpbl9hZGRy
ICAqYWRkciwKICAgICAgICBDSEFSICAgICAgICAgICAgKnNlcnZpY2UKICk7CgpJTlQgICAgIFNP
Q0tfU2VuZFBvcnRCdWYoCiAgICAgICAgSU5UICAgICAgICAgICAgIHNvY2ssCiAgICAgICAgQ0hB
UiAgICAgICAgICAgICpidWYsCiAgICAgICAgSU5UICAgICAgICAgICAgIGxlbiwKICAgICAgICBz
dHJ1Y3QgaW5fYWRkciAgKmFkZHIsCiAgICAgICAgSU5UICAgICAgICAgICAgIHBvcnQKICk7CgpJ
TlQgICAgIFNPQ0tfUmVjdkJ1ZigKICAgICAgICBJTlQgICAgICAgICAgICAgc29jaywKICAgICAg
ICBDSEFSICAgICAgICAgICAgKmJ1ZiwKICAgICAgICBJTlQgICAgICAgICAgICAgbGVuLAogICAg
ICAgIHN0cnVjdCBpbl9hZGRyICAqYWRkciwKICAgICAgICBJTlQgICAgICAgICAgICAgKnBvcnQK
ICk7CgoKIAoKdm9pZCBNQVRfU3RhY2tJbml0KAogICAgICAgIHZvaWQKICk7CgpJTlQgTUFUX1N0
YWNrQ2xlYXIoCiAgICAgICAgdm9pZAogKTsKCklOVCBNQVRfUHVzaCgKICAgICAgICBNQVRSSVgg
ICAgIG1hdAogKTsKCklOVCBNQVRfUHVzaFN0YWNrICgKICAgICAgICB2b2lkCiApOwoKSU5UIE1B
VF9Qb3AgKAogICAgICAgIHZvaWQKICk7CgpJTlQgTUFUX0NvbmNhdE9uU3RhY2soCiAgICAgICAg
TUFUUklYICAgICAgICAgbWF0CiApOwoKSU5UIE1BVF9Db25jYXRBbGwoCiAgICAgICAgTUFUUklY
ICAgICBtYXQKICk7CgpJTlQgTUFUX0dldExhc3RNYXQoCiAgICAgICAgTUFUUklYICBtYXQKICk7
CgpJTlQgTUFUX0xvYWQoCiAgICAgICAgTUFUUklYICAgICBtYXQKICk7CgoKIAoKY2hhciAqU1RS
X0ZuZCgKICAgICAgICBjaGFyICpzLAogICAgICAgIGNoYXIgKnQKICk7CgoKIAoKY2hhciAqVV9H
ZXRUb2tlbigKICAgICAgICBjaGFyICAgICpidWYsICAgICAgICAKICAgICAgICBjaGFyICAgICp0
b2tlbiwgICAgICAKICAgICAgICBpbnQgICAgICpsZW5ndGggICAgICAKICk7Cgp2b2lkIFVfR2V0
MkludHMoCiAgICAgICAgY2hhciAgICAqdG9rZW4sICAgICAgCiAgICAgICAgaW50ICAgICAqZmly
c3QsICAgICAgCiAgICAgICAgaW50ICAgICAqc2Vjb25kLCAgICAgCiAgICAgICAgaW50ICAgICAq
bnVtYmVyICAgICAgCiApOwoKY2hhciAqVV9GYXN0R2V0VG9rZW4oCiAgICAgICAgY29uc3QgY2hh
ciAgKmJ1ZiwgICAgICAgIAogICAgICAgIGNoYXIgICAgKnRva2VuLCAgICAgIAogICAgICAgIGlu
dCAgICAgKmxlbmd0aCAgICAgIAogKTsKCmNoYXIgKlVfR2V0V29yZCgKICAgICAgICBjb25zdCBj
aGFyICAqYnVmLCAgICAgICAgCiAgICAgICAgY2hhciAgICAqdG9rZW4sICAgICAgCiAgICAgICAg
aW50ICAgICAqbGVuZ3RoICAgICAgCiApOwoKSU5UIFVfTG9va3VwVG9rZW4oCiAgICAgICAgQ0hB
UiAgICAqdG9rZW4sCiAgICAgICAgQ0hBUiAgICAqKnRhYmxlLAogICAgICAgIElOVCAgICAgbnVt
LAogICAgICAgIEJPT0xFQU4gKmV4YWN0CiApOwoKSU5UIFVfTG9va3VwRXhhY3RUb2tlbigKICAg
ICAgICBDSEFSICAgICp0b2tlbiwKICAgICAgICBDSEFSICAgICoqdGFibGUsCiAgICAgICAgSU5U
ICAgICBudW0KICk7CgpDSEFSICAgICpVX0dldEFyYlRva2VuKAogICAgICAgIGNvbnN0IENIQVIg
ICpidWYsCiAgICAgICAgQ0hBUiAgICAqdG9rZW4sCiAgICAgICAgSU5UICAgICAqbGVuZ3RoLAog
ICAgICAgIENIQVIgICAgKmRlbGltaXRlcnMsCiAgICAgICAgQ0hBUiAgICAqZGVsY2hhcgogKTsK
CkNIQVIgICAgKlVfR2V0QXJiVG9rZW5BbGwoCiAgICAgICAgQ0hBUiAgICAqYnVmLAogICAgICAg
IENIQVIgICAgKnRva2VuLAogICAgICAgIElOVCAgICAgKmxlbmd0aCwKICAgICAgICBDSEFSICAg
ICpkZWxpbWl0ZXJzLAogICAgICAgIENIQVIgICAgKmRlbGNoYXIKICk7CgpDSEFSICAgICpVX0dl
dEFyYlRva2VuUGFyZW4oCiAgICAgICAgQ0hBUiAgICAqYnVmLAogICAgICAgIENIQVIgICAgKnRv
a2VuLAogICAgICAgIElOVCAgICAgKmxlbmd0aCwKICAgICAgICBDSEFSICAgICpkZWxpbWl0ZXJz
LAogICAgICAgIENIQVIgICAgKmRlbGNoYXIKICk7CgpDSEFSICAgICpVX0dldEFyYlRva2VuUGFy
ZW5BbGwoCiAgICAgICAgQ0hBUiAgICAqYnVmLAogICAgICAgIENIQVIgICAgKnRva2VuLAogICAg
ICAgIElOVCAgICAgKmxlbmd0aCwKICAgICAgICBDSEFSICAgICpkZWxpbWl0ZXJzLAogICAgICAg
IENIQVIgICAgKmRlbGNoYXIKICk7CgpJTlQgVV9XaWxkbWF0KAogICAgICAgIGNoYXIgICAgICAg
KnMsCiAgICAgICAgY2hhciAgICAgICAqcAogKTsKCgogCgp2b2lkIEFsbG9jTG9ja0FyZW5hKCAK
ICAgICAgICBjb25zdCBjaGFyICAqcHJvZ3JhbU5hbWUKICk7Cgp2b2lkICpJbml0TG9jayggCiAg
ICAgICAgdm9pZAogKTsKCnZvaWQgU2V0TG9jayggCiAgICAgICAgdm9pZCAqaGFuZGxlCiApOwoK
dm9pZCBVbnNldExvY2soIAogICAgICAgIHZvaWQqIGhhbmRsZQogKTsKCnZvaWQgRnJlZUxvY2so
CiAgICAgICAgdm9pZCogbG9jawogKTsKCnZvaWQgRnJlZUxvY2tBcmVuYSggCiAgICAgICAgdm9p
ZAogKTsKCgogCgp2b2lkIFVfVW5peFBhcnNlSU8oCiAgICAgICAgdm9pZCAoICpHZXRzICkoIGNo
YXIgKmdldHNCdWYgKSwKICAgICAgICB2b2lkICggKmVycm9yICkoCiAgICAgICAgICAgIGNvbnN0
IGNoYXIgKmJ1ZiwKICAgICAgICAgICAgaW50IHNpemUKICAgICAgICAgICAgKSwKICAgICAgICBG
SUxFICogKCAqcGFnZXJPcGVuICkoIHZvaWQgKSwKICAgICAgICB2b2lkICggKnBhZ2VyQ2xvc2Ug
KSggdm9pZCApCiApOwoKQ0hBUiAqVV9Vbml4UGFyc2UoCiAgICAgICAgSU5UICAgICBhcmdjLAog
ICAgICAgIGNvbnN0IENIQVIgICAgKiphcmd2LAogICAgICAgIE9fTElTVCAgKmZsYWdMaXN0LAog
ICAgICAgIElOVCAgICAgbnVtRmxhZ3MsCiAgICAgICAgSU5UICAgICAqKm9yZGVyLAogICAgICAg
IElOVCAgICAgKm9yZGVyQ291bnQKICk7CgpJTlQgVV9TcGxpdExpbmUoCiAgICAgICAgQ0hBUiAg
ICAqcywKICAgICAgICBDSEFSICAgICoqdgogKTsKCnZvaWQgVV9QcmludFVzYWdlKAogICAgICAg
IGNvbnN0IGNoYXIgICAgKmNvbW1hbmQsCiAgICAgICAgT19MSVNUICAqcGFybSwKICAgICAgICBJ
TlQgICAgIGxlbmcKICk7CgpJTlQgVV9DaGVja0hlbHAoCiAgICAgICAgSU5UICAgICAgICAgICBh
cmdjLAogICAgICAgIGNvbnN0IENIQVIgICAgKiphcmd2LAogICAgICAgIGNvbnN0IENIQVIgICAg
KmNvbW1hbmQsCiAgICAgICAgT19MSVNUICAgICAgICAqZmxhZ0xpc3QsCiAgICAgICAgSU5UICAg
ICAgICAgICBudW1GbGFncywKICAgICAgICBjb25zdCBDSEFSICAgICoqaGVscExpc3QKICk7CgpJ
TlQgVV9HZXRDb3VudCgKICAgICAgICBDSEFSICAgICpmbGFnLAogICAgICAgIE9fTElTVCAgKmZs
YWdMaXN0CiApOwoKSU5UIFVfR2V0SGl0Q291bnQoCiAgICAgICAgQ0hBUiAgICAqZmxhZywKICAg
ICAgICBPX0xJU1QgICpmbGFnTGlzdAogKTsKCnZvaWQgVV9QYXJzZVByb21wdCgKICAgICAgICBp
bnQgb25PZmYKICk7Cgp2b2lkIFVfUmVzZXRVbml4UGFyc2VMZXZlbCAoCiAgICAgICAgdm9pZAog
KTsKCnZvaWQgVV9DbGVhckhpdEFuZENvdW50KAogICAgICAgIE9fTElTVCAgKmZsYWdMaXN0LAog
ICAgICAgIElOVCAgICAgbnVtRmxhZ3MKICk7Cgp2b2lkIFVfRm9yY2VIaXRDb3VudCAoCiAgICBj
b25zdCBDSEFSICAqZmxhZywKICAgIE9fTElTVCAgICAgICpmbGFnTGlzdCwKICAgIElOVCAgICAg
ICAgIG5ld0NvdW50CiApOwoKdm9pZCBVX0luaXRUeXBlQXJyYXlMaXN0ICgKICAgICAgICB2b2lk
CiApOwoKSU5UIFVfTG9hZFR5cGVBcnJheUxpc3QoCiAgICAgICAgY2hhciAgICAqb3B0aW9uLAog
ICAgICAgIElOVCAgICAgbnVtYmVyLAogICAgICAgIElOVCAgICAgKmxpc3RJbnQKICk7CgpJTlQg
VV9Mb2FkVHlwZUFycmF5QXNjaWlMaXN0KAogICAgICAgIGNoYXIgICAgKm9wdGlvbiwKICAgICAg
ICBJTlQgICAgIG51bWJlciwKICAgICAgICBjaGFyICAgICpsaXN0QXNjaWkKICk7CgpJTlQgVV9G
aW5kVW5peFBhcnNlVHlwZSgKICAgICAgICBPX0xJU1QgICp3aGljaCwKICAgICAgICBJTlQgICAg
IGNvdW50CiApOwoKSU5UIFVfTG9hZFVuaXhQYXJzZURlc3RBZHIoCiAgICAgICAgY29uc3QgY2hh
ciAgICAqdG9CZUxvYWRlZCwKICAgICAgICBPX0xJU1QgICp3aGljaCwKICAgICAgICBJTlQgICAg
IHR5cGUKICk7CgpjaGFyICpVX1VuTG9hZFVuaXhQYXJzZURlc3RDb250ZW50cygKICAgICAgICBP
X0xJU1QgICp3aGljaCwKICAgICAgICBJTlQgICAgIHR5cGUsIAogICAgICAgIElOVCAgICAgaXRl
bQogKTsKCkJPT0xFQU4gVV9HZXRBbHBoYWJldGl6YXRpb25GbGFnICgKICAgIHZvaWQgCiApOwoK
Qk9PTEVBTiBVX1NldEFscGhhYmV0aXphdGlvbkZsYWcgKAogICAgQk9PTEVBTiBzdGF0dXMKICk7
CgoKIAoKQ0hBUiAgICAqVV9HZXRQcm9nbmFtZSgKICAgICAgICBDSEFSICAgICoqYXJndgogKTsK
CnZvaWQgVV9CYWlsKAogICAgICAgIENIQVIgKm1lc3NhZ2UKICk7CgpJTlQgVV9QZXJyb3IoCiAg
ICAgICAgQ0hBUiAqbWVzc2FnZQogKTsKCklOVCBVX1N5c3RlbSgKICAgICAgICBjb25zdCBDSEFS
ICAqY29tbWFuZAogKTsKCkNIQVIgKlVfR2V0VmFyaWFibGUoCiAgICAgICAgY29uc3QgQ0hBUiAg
KnZhcmlhYmxlCiApOwoKU1RSSU5HICAqVV9GaW5kVmFyaWFibGUoCiAgICAgICAgY29uc3QgQ0hB
UiAgKm5hbWUKICk7CgpjaGFyICpVX0ZpbmRWYXJpYWJsZVB0cigKICAgIENIQVIgICAgKm5hbWUK
ICk7CgpJTlQgVV9TZXRWYXJpYWJsZSgKICAgICAgICBjb25zdCBDSEFSICAqdmFyaWFibGUsCiAg
ICAgICAgY29uc3QgQ0hBUiAgKmRlZmluaXRpb24KICk7CgpJTlQgVV9HZXROdW1iZXJWYXJpYWJs
ZXMgKAogICAgICAgIHZvaWQKICk7CgpjaGFyICpVX0dldFZhcmlhYmxlTmFtZSgKICAgICAgICBJ
TlQgd2hpY2gKICk7CgpjaGFyICpVX0dldFZhcmlhYmxlRGVmaW5pdGlvbigKICAgICAgICBJTlQg
d2hpY2gKICk7CgpDSEFSICpVX0dldEpvYk5hbWUoCiAgICAgICAgSU5UICAgICBqb2JudW0KICk7
Cgp2b2lkIFVfUHJpbnRDb3B5cmlnaHQoCiAgICAgICAgdm9pZAogKTsKCklOVCBVX0NhdGNoU2ln
bmFscygKICAgICAgICB2b2lkICAgICgqc2lnRnVuYykoKQogKTsKCkNIQVIgKlVfTWtUZW1wKAog
ICAgICAgIENIQVIgICAgKmFzCiApOwoKQ0hBUiAqVV9Na1RlbXBBbnl3aGVyZSgKICAgICAgICBD
SEFSICAgICphcywKICAgICAgICBDSEFSICAgICpsYXN0WAogKTsKCklOVCBVX01rU3RlbXAoCiAg
ICAgICAgQ0hBUiAgICAqYXMKICk7CgoKIAoKSU5UIFdJTERfTWF0Y2goCiAgICAgICAgY29uc3Qg
Q0hBUiAgKndpbGRDYXJkLAogICAgICAgIGNvbnN0IENIQVIgICpuYW1lLAogICAgICAgIElOVCAg
ICAgICAgIGNhc2VJbnNlbnNpdGl2ZQogKTsKCkJPT0xFQU4gV0lMRF9DYXNlSW5kZXBlbmRlbnRN
YXRjaCgKICAgICAgICBjb25zdCBjaGFyICAqcGF0dGVybiwKICAgICAgICBjb25zdCBjaGFyICAq
bmFtZQogKTsKCkJPT0xFQU4gV0lMRF9DYXNlRGVwZW5kZW50TWF0Y2goCiAgICAgICAgY29uc3Qg
Y2hhciAgKnBhdHRlcm4sCiAgICAgICAgY29uc3QgY2hhciAgKnRva2VuCiApOwoKCn0KCgoKCgoj
IDEzICIvc29mdHdhcmUvdGhhbGlhL2gvdXRpbC5lIiAyCgoKZXh0ZXJuIGNoYXIgICAgICpGaWxl
VHlwZXNbXTsgICAgICAgICAgICAgICAgCmV4dGVybiBJTlQgICAgICBVX0JpdHNbXTsgICAgICAg
ICAgICAgICAgICAgIAoKIyAxMTEgIi9zb2Z0d2FyZS90aGFsaWEvaC91dGlsLmgiIDIKCgojIDI0
ICJoL1BsdWdpblRlbXBsYXRlLmMiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMwog
CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgpleHRlcm4gIkMiIHsgCgoKIAoKCgoKCgoKCgoK
CgoKCmVudW0KewogIF9JU3VwcGVyID0gKCggMCApIDwgOCA/ICgoMSA8PCAoIDAgKSkgPDwgOCkg
OiAoKDEgPDwgKCAwICkpID4+IDgpKSAsCSAKICBfSVNsb3dlciA9ICgoIDEgKSA8IDggPyAoKDEg
PDwgKCAxICkpIDw8IDgpIDogKCgxIDw8ICggMSApKSA+PiA4KSkgLAkgCiAgX0lTYWxwaGEgPSAo
KCAyICkgPCA4ID8gKCgxIDw8ICggMiApKSA8PCA4KSA6ICgoMSA8PCAoIDIgKSkgPj4gOCkpICwJ
IAogIF9JU2RpZ2l0ID0gKCggMyApIDwgOCA/ICgoMSA8PCAoIDMgKSkgPDwgOCkgOiAoKDEgPDwg
KCAzICkpID4+IDgpKSAsCSAKICBfSVN4ZGlnaXQgPSAoKCA0ICkgPCA4ID8gKCgxIDw8ICggNCAp
KSA8PCA4KSA6ICgoMSA8PCAoIDQgKSkgPj4gOCkpICwJIAogIF9JU3NwYWNlID0gKCggNSApIDwg
OCA/ICgoMSA8PCAoIDUgKSkgPDwgOCkgOiAoKDEgPDwgKCA1ICkpID4+IDgpKSAsCSAKICBfSVNw
cmludCA9ICgoIDYgKSA8IDggPyAoKDEgPDwgKCA2ICkpIDw8IDgpIDogKCgxIDw8ICggNiApKSA+
PiA4KSkgLAkgCiAgX0lTZ3JhcGggPSAoKCA3ICkgPCA4ID8gKCgxIDw8ICggNyApKSA8PCA4KSA6
ICgoMSA8PCAoIDcgKSkgPj4gOCkpICwJIAogIF9JU2JsYW5rID0gKCggOCApIDwgOCA/ICgoMSA8
PCAoIDggKSkgPDwgOCkgOiAoKDEgPDwgKCA4ICkpID4+IDgpKSAsCSAKICBfSVNjbnRybCA9ICgo
IDkgKSA8IDggPyAoKDEgPDwgKCA5ICkpIDw8IDgpIDogKCgxIDw8ICggOSApKSA+PiA4KSkgLAkg
CiAgX0lTcHVuY3QgPSAoKCAxMCApIDwgOCA/ICgoMSA8PCAoIDEwICkpIDw8IDgpIDogKCgxIDw8
ICggMTAgKSkgPj4gOCkpICwJIAogIF9JU2FsbnVtID0gKCggMTEgKSA8IDggPyAoKDEgPDwgKCAx
MSApKSA8PCA4KSA6ICgoMSA8PCAoIDExICkpID4+IDgpKSAJIAp9OwoKCiAKCgoKCgoKCgoKCmV4
dGVybiBfX2NvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwkgCmV4dGVybiBfX2Nv
bnN0IF9faW50MzJfdCAqX19jdHlwZV90b2xvd2VyOyAgCmV4dGVybiBfX2NvbnN0IF9faW50MzJf
dCAqX19jdHlwZV90b3VwcGVyOyAgCgoKCgoKCgoKCiAKCgoKZXh0ZXJuIGludCAgaXNhbG51bSAg
IChpbnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgaXNhbHBoYSAgIChpbnQpICB0aHJvdyAo
KSAgIDsKZXh0ZXJuIGludCAgaXNjbnRybCAgIChpbnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGlu
dCAgaXNkaWdpdCAgIChpbnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgaXNsb3dlciAgIChp
bnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgaXNncmFwaCAgIChpbnQpICB0aHJvdyAoKSAg
IDsKZXh0ZXJuIGludCAgaXNwcmludCAgIChpbnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAg
aXNwdW5jdCAgIChpbnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgaXNzcGFjZSAgIChpbnQp
ICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgaXN1cHBlciAgIChpbnQpICB0aHJvdyAoKSAgIDsK
ZXh0ZXJuIGludCAgaXN4ZGlnaXQgICAoaW50KSAgdGhyb3cgKCkgICA7CgoKCgoKCiAKZXh0ZXJu
IGludCB0b2xvd2VyICAoaW50IF9fYykgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgdG91cHBl
ciAgKGludCBfX2MpICB0aHJvdyAoKSAgOwoKCgoKIAoKZXh0ZXJuIGludCBpc2FzY2lpICAoaW50
IF9fYykgIHRocm93ICgpICA7CgogCgpleHRlcm4gaW50IHRvYXNjaWkgIChpbnQgX19jKSAgdGhy
b3cgKCkgIDsKCgoKCiAKCmV4dGVybiBpbnQgIF90b3VwcGVyICAgKGludCkgIHRocm93ICgpICAg
OwpleHRlcm4gaW50ICBfdG9sb3dlciAgIChpbnQpICB0aHJvdyAoKSAgIDsKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKZXh0ZXJuIF9faW5saW5lIGludAp0b2xvd2VyIChpbnQgX19jKSB0aHJvdyAoKSAK
ewogIHJldHVybiBfX2MgPj0gLTEyOCAmJiBfX2MgPCAyNTYgPyBfX2N0eXBlX3RvbG93ZXJbX19j
XSA6IF9fYzsKfQoKZXh0ZXJuIF9faW5saW5lIGludAp0b3VwcGVyIChpbnQgX19jKSB0aHJvdyAo
KSAKewogIHJldHVybiBfX2MgPj0gLTEyOCAmJiBfX2MgPCAyNTYgPyBfX2N0eXBlX3RvdXBwZXJb
X19jXSA6IF9fYzsKfQoKCiMgMTg2ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwoKCgoKCgoKCgoK
CgoKIyAyNzMgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCgoKfSAKCgojIDI1ICJoL1BsdWdpblRl
bXBsYXRlLmMiIDIKCgogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIFQ+IFBsdWdpbkVudHJ5PFQ+OjpQ
bHVnaW5FbnRyeSAoVCAqeGYpIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IElu
ZGV4IChQbHVnaW5UYWJsZTxUPjo6bmV4dEVudHJ5KQp7CiAgICAKICAgIAogICAgaWYgKHhmICE9
IF9fbnVsbCApIHsKICAgICAgICBmb3IgKGludCBpPTA7IGk8UGx1Z2luVGFibGU8VD46Om5leHRF
bnRyeTsgaSsrKSB7CgogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKFBsdWdpblRhYmxlPFQ+
Ojp0YWJsZVtpXSAhPSBfX251bGwgICYmIAogICAgICAgICAgICAgICAgICAgc3RyY2FzZWNtcCAo
UGx1Z2luVGFibGU8VD46OnRhYmxlW2ldLT5HZXROYW1lKCksIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGYtPkdldE5hbWUoKSkgPT0g
MCkgewogICAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiUFJPR1JBTU1FUiBFUlJPUiAt
IFBsdWdpbkVudHJ5PHR5cGU+IgogICAgICAgICAgICAgICAgICAgICAgICAgIjo6UGx1Z2luRW50
cnkoKSIKICAgICAgICAgICAgICAgICAgICAgICAgICJlbnRyeSAlcyBpcyBhbWJpZ3VvdXMgd2l0
aCAlcyIsIHhmLT5HZXROYW1lICgpLCAKICAgICAgICAgICAgICAgICAgICAgICAgIFBsdWdpblRh
YmxlPFQ+Ojp0YWJsZVtpXS0+R2V0TmFtZSAoKSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgoKICAgIAogICAgaWYgKFBsdWdpblRhYmxlPFQ+
OjpjaGVja1RhYmxlU2l6ZSgpKSB7CiAgICAgICAgUGx1Z2luVGFibGU8VD46OnRhYmxlW0luZGV4
XSA9IHhmOwogICAgICAgIFBsdWdpblRhYmxlPFQ+OjpuZXh0RW50cnkgICsrOwogICAgICAgIFBs
dWdpblRhYmxlPFQ+OjpudW1FbnRyaWVzICsrOwogICAgfQp9CgoKdGVtcGxhdGUgPGNsYXNzIFQ+
IFBsdWdpbkVudHJ5PFQ+Ojp+UGx1Z2luRW50cnkgKCkKewogICAgCiAgICBpZiAodGhpcy0+SW5k
ZXggPj0gMCAmJiBQbHVnaW5UYWJsZTxUPjo6dGFibGUgIT0gX19udWxsICAmJiAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbHVnaW5UYWJsZTxUPjo6dGFibGVb
dGhpcy0+SW5kZXhdICE9IF9fbnVsbCApIHsKICAgICAgICBkZWxldGUgUGx1Z2luVGFibGU8VD46
OnRhYmxlW3RoaXMtPkluZGV4XTsKICAgICAgICBQbHVnaW5UYWJsZTxUPjo6dGFibGVbdGhpcy0+
SW5kZXhdID0gX19udWxsIDsKICAgICAgICBQbHVnaW5UYWJsZTxUPjo6bnVtRW50cmllcyAtLTsK
ICAgIH0KCiAgICAKICAgIGlmIChQbHVnaW5UYWJsZTxUPjo6bnVtRW50cmllcyA9PSAwKSB7CiAg
ICAgICAgZnJlZSAoUGx1Z2luVGFibGU8VD46OnRhYmxlKTsKICAgICAgICBQbHVnaW5UYWJsZTxU
Pjo6dGFibGUgPSBfX251bGwgOwogICAgfQp9CgogCiAKIAogCiAKCiAKIAogCnRlbXBsYXRlIDxj
bGFzcyBUPiBUICoqUGx1Z2luVGFibGU8VD46OnRhYmxlICAgICAgPSBfX251bGwgOwp0ZW1wbGF0
ZSA8Y2xhc3MgVD4gaW50IFBsdWdpblRhYmxlPFQ+OjptYXhFbnRyaWVzID0gMDsKdGVtcGxhdGUg
PGNsYXNzIFQ+IGludCBQbHVnaW5UYWJsZTxUPjo6bmV4dEVudHJ5ICA9IDA7CnRlbXBsYXRlIDxj
bGFzcyBUPiBpbnQgUGx1Z2luVGFibGU8VD46Om51bUVudHJpZXMgPSAwOwoKIAoKCgogCiAKIAoK
dGVtcGxhdGUgPGNsYXNzIFQ+IGludCBQbHVnaW5UYWJsZTxUPjo6R2V0TmV4dEluZGV4ICgKICAg
IGludCBzdGFydGluZ0luZGV4CiAgICApCnsKICAgIAogICAgZm9yIChpbnQgaT1zdGFydGluZ0lu
ZGV4OyBpPG5leHRFbnRyeTsgaSsrKSB7CiAgICAgICAgaWYgKHRhYmxlW2ldICE9IF9fbnVsbCAp
CiAgICAgICAgICAgIHJldHVybiBpOwogICAgfQoKICAgIAogICAgcmV0dXJuIC0xIDsKfQoKIAog
CiAKCnRlbXBsYXRlIDxjbGFzcyBUPiBpbnQgUGx1Z2luVGFibGU8VD46OkdldE51bUFjdGl2ZUVu
dHJpZXMgKCkKewogICAgaW50IGNvdW50ID0gMDsKICAgIAogICAgZm9yIChpbnQgaT0wOyBpPG5l
eHRFbnRyeTsgaSsrKSB7CiAgICAgICAgaWYgKHRhYmxlW2ldICE9IF9fbnVsbCApCiAgICAgICAg
ICAgIGNvdW50ICsrOwogICAgfQogICAgcmV0dXJuIGNvdW50Owp9CgogCiAKIAogCiAKIAogCiAK
IAoKdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0IGNoYXIgKlBsdWdpblRhYmxlPFQ+OjpDaGVja0Fs
aWFzICgKICAgIGNvbnN0IGNoYXIgKm5hbWUsIAogICAgY29uc3QgY2hhciAqYWxpYXNlcwogICAg
KQp7CiAgICAKICAgIGNvbnN0IGNoYXIgKmFsaWFzID0gYWxpYXNlczsKICAgIHdoaWxlICgqbmFt
ZSAmJiAqYWxpYXMgJiYgdG9sb3dlcigqbmFtZSkgPT0gdG9sb3dlcigqYWxpYXMpKSB7CiAgICAg
ICAgKm5hbWUgKys7CiAgICAgICAgKmFsaWFzICsrOwogICAgfQoKICAgIAogICAgaWYgKCpuYW1l
ID09ICdcMCcgJiYgKCphbGlhcyA9PSAnICcgfHwgKmFsaWFzID09ICdcMCcpKQogICAgICAgIHJl
dHVybiBfX251bGwgOwogICAgZWxzZSB7CiAgICAgICAgCiAgICAgICAgd2hpbGUgKCphbGlhcyAh
PSAnXDAnICYmICphbGlhcyAhPSAnICcpCiAgICAgICAgICAgIGFsaWFzICsrOwogICAgICAgIHdo
aWxlICgqYWxpYXMgIT0gJ1wwJyAmJiAqYWxpYXMgPT0gJyAnKQogICAgICAgICAgICBhbGlhcyAr
KzsKICAgICAgICByZXR1cm4gYWxpYXM7CiAgICB9Cn0KCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFz
cyBUPiBpbnQgUGx1Z2luVGFibGU8VD46OkdldE5leHRJbmRleCAoCiAgICBjb25zdCBDSEFSICpu
YW1lLCAKICAgIGludCBzdGFydGluZ0luZGV4CiAgICApCnsKICAgIGludCBpLCBmb3VuZFdpbGRD
YXJkID0gMDsKICAgIGNvbnN0IGNoYXIgKndjU2VhcmNoID0gbmFtZTsKICAgIAogICAgCiAgICBm
b3IoIDsgKndjU2VhcmNoIDsgKyt3Y1NlYXJjaCApCiAgICAgICAgaWYgKCAqd2NTZWFyY2ggPT0g
JyonIHx8ICp3Y1NlYXJjaCA9PSAnPycgKSB7CiAgICAgICAgICAgIGZvdW5kV2lsZENhcmQgPSAx
OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgCiAgICAKICAgIGZvciAoaT1z
dGFydGluZ0luZGV4OyBpPG5leHRFbnRyeTsgaSsrKSB7CiAgICAgICAgCiAgICAgICAgaWYgKHRh
YmxlW2ldID09IF9fbnVsbCApCiAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICBpZiAoIGZv
dW5kV2lsZENhcmQgKSB7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoIG5hbWVbMF0gPT0g
JyonICYmIG5hbWVbMV0gPT0gMCApIHsKICAgICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAg
ICAgICB9CiAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChXSUxEX0Nhc2VJbmRlcGVu
ZGVudE1hdGNoIChuYW1lLCB0YWJsZVtpXS0+R2V0TmFtZSgpKSkgewogICAgICAgICAgICAgICAg
cmV0dXJuIGk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGVsc2UgewogICAgICAg
ICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRhYmxlTmFtZSA9IHRh
YmxlW2ldLT5HZXROYW1lKCk7CiAgICAgICAgICAgIGlmICggdG9sb3dlciggKm5hbWUgKSA9PSB0
b2xvd2VyKCAqdGFibGVOYW1lICkgJiYKICAgICAgICAgICAgICAgICAhc3RyY2FzZWNtcCggbmFt
ZSwgdGFibGVOYW1lICkgKQogICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgfQoKICAg
IH0KCiAgICAKICAgIHJldHVybiAtMSA7Cn0KCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW50
IFBsdWdpblRhYmxlPFQ+OjpHZXRJbmRleCAoY29uc3QgQ0hBUiAqbmFtZSkKewogICAgCiAgICBp
bnQgcmV0dXJuVmFsdWUgPSBHZXRFeGFjdEluZGV4IChuYW1lKTsKICAgIGlmIChyZXR1cm5WYWx1
ZSA+PSAwKQogICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKCiAgICAKICAgIHJldHVyblZhbHVl
ID0gR2V0TmV4dEluZGV4IChuYW1lLCAwKTsKCiAgICAKICAgIGlmIChyZXR1cm5WYWx1ZSA9PSAt
MSApCiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwoKICAgIAogICAgaWYgKEdldE5leHRJbmRl
eCAobmFtZSwgcmV0dXJuVmFsdWUgKyAxKSAhPSAtMSApCiAgICAgICAgcmV0dXJuIC0yIDsKCiAg
ICAKICAgIHJldHVybiByZXR1cm5WYWx1ZTsKfQoKCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4g
aW50IFBsdWdpblRhYmxlPFQ+OjpHZXRBbGlhc0luZGV4IChjb25zdCBDSEFSICpuYW1lKQp7CiAg
ICAKICAgIGZvciAoaW50IGk9MDsgaTxuZXh0RW50cnk7IGkrKykgewogICAgICAgIGNvbnN0IGNo
YXIgKmFsaWFzZXMgPSB0YWJsZVtpXS0+R2V0QWxpYXNlcygpOwogICAgICAgIHdoaWxlIChhbGlh
c2VzICYmICphbGlhc2VzICE9ICdcMCcpIHsKICAgICAgICAgICAgYWxpYXNlcyA9IENoZWNrQWxp
YXMgKG5hbWUsIGFsaWFzZXMpOwogICAgICAgICAgICBpZiAoYWxpYXNlcyA9PSBfX251bGwgKQog
ICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgfQogICAgfQoKICAgIAogICAgcmV0dXJu
IC0xIDsKfQoKIAogCiAKdGVtcGxhdGUgPGNsYXNzIFQ+IGludCBQbHVnaW5UYWJsZTxUPjo6R2V0
RXhhY3RJbmRleCAoY29uc3QgQ0hBUiAqbmFtZSkKewogICAgCiAgICBmb3IgKGludCBpPTA7IGk8
bmV4dEVudHJ5OyBpKyspIHsKICAgICAgICBpZiAodGFibGVbaV0gIT0gX19udWxsICAmJiBXSUxE
X0Nhc2VJbmRlcGVuZGVudE1hdGNoIChuYW1lLCB0YWJsZVtpXS0+R2V0TmFtZSgpKSkgewogICAg
ICAgICAgICByZXR1cm4gaTsKICAgICAgICB9CiAgICB9CgogICAgCiAgICByZXR1cm4gLTEgOwp9
CgogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIFQ+IENIQVIgKlBsdWdpblRhYmxlPFQ+OjpHZXRBbGxN
YXRjaGVzIChjb25zdCBDSEFSICpuYW1lKQp7CiAgICBzdGF0aWMgQ0hBUiBhbGxOYW1lc1sxMDI0
XTsKICAgIENIQVIgKnB0ciA9IGFsbE5hbWVzOwoKICAgIAogICAgKnB0ciA9ICdcMCc7CgogICAg
aW50IGkgPSAtMTsKICAgIHdoaWxlICgxICkKICAgICAgICB7CiAgICAgICAgaSA9IEdldE5leHRJ
bmRleCAobmFtZSwgaSsxKTsKICAgICAgICBpZiAoaSA8IDApCiAgICAgICAgICAgIGJyZWFrOwoK
ICAgICAgICAKICAgICAgICBzdHJjcHkgKHB0ciwgR2V0RW50cnkoaSktPkdldE5hbWUoKSk7CiAg
ICAgICAgc3RyY2F0IChwdHIsICIsICIpOwogICAgICAgIHB0ciA9IHN0cmNociAocHRyLCAnXDAn
KTsKICAgICAgICB9CgogICAgCiAgICAqKHB0ci0yKSA9ICdcMCc7IAoKICAgIHJldHVybiBhbGxO
YW1lczsKfQoKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBUPiBUICpQbHVnaW5UYWJsZTxUPjo6R2V0
RW50cnkgKGludCBpKQp7CiAgICAKICAgIGlmIChpIDwgMCB8fCBpID49IG5leHRFbnRyeSkKICAg
ICAgICByZXR1cm4gX19udWxsIDsKCiAgICAKICAgIHJldHVybiAodGFibGVbaV0pOwp9CgogCiAK
IAoKdGVtcGxhdGUgPGNsYXNzIFQ+IFQgKlBsdWdpblRhYmxlPFQ+OjpHZXRFbnRyeSAoY29uc3Qg
Q0hBUiAqbmFtZSkKewogICAgaW50IGkgPSBHZXRJbmRleCAobmFtZSk7CgogICAgaWYgKGkgPCAw
KSAKICAgICAgICByZXR1cm4gX19udWxsIDsKICAgIGVsc2UKICAgICAgICByZXR1cm4gKHRhYmxl
W2ldKTsKfQoKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBUPiBUICpQbHVnaW5UYWJsZTxUPjo6R2V0
RXhhY3RFbnRyeSAoY29uc3QgQ0hBUiAqbmFtZSkKewogICAgaW50IGkgPSBHZXRFeGFjdEluZGV4
IChuYW1lKTsKCiAgICBpZiAoaSA8IDApIAogICAgICAgIHJldHVybiBfX251bGwgOwogICAgZWxz
ZQogICAgICAgIHJldHVybiAodGFibGVbaV0pOwp9CgogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIFQ+
IFQgJlBsdWdpblRhYmxlPFQ+OjpvcGVyYXRvciBbXSAoCiAgICBpbnQgaQogICAgKQp7CiAgICBy
ZXR1cm4gKCpHZXRFbnRyeSAoaSkpOwp9CgogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIFQ+IFQgJlBs
dWdpblRhYmxlPFQ+OjpvcGVyYXRvciBbXSAoCiAgICBjb25zdCBDSEFSICpuYW1lCiAgICApCnsK
ICAgIGludCBpID0gR2V0RXhhY3RJbmRleCAobmFtZSk7CgogICAgaWYgKGkgPCAwKSAKICAgICAg
ICBmcHJpbnRmIChzdGRlcnIsICJQUk9HUkFNTUVSIEVSUk9SIC0gUGx1Z2luVGFibGU8dHlwZT5b
XCIlc1wiXSIKICAgICAgICAgICAgICAgICAgICAgICAgICJkb2VzIG5vdCBleGlzdFxuIiwgbmFt
ZSk7CiAgICByZXR1cm4gKCoodGFibGVbaV0pKTsKfQoKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNz
IFQ+IEJPT0xFQU4gUGx1Z2luVGFibGU8VD46OmNoZWNrVGFibGVTaXplICgpCnsKICAgIAogICAg
aWYgKG5leHRFbnRyeSA+PSBtYXhFbnRyaWVzKSB7CgogICAgICAgIAogICAgICAgIAogICAgICAg
IAogICAgICAgIGlmICh0YWJsZSA9PSBfX251bGwgKSAKICAgICAgICB7CiAgICAgICAgICAgIHRh
YmxlID0gKFQgKiopIG1hbGxvYyAoMTAwICAqIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoUGx1Z2luQ2xhc3MgKikpOwogICAgICAg
ICAgICBtYXhFbnRyaWVzID0gMTAwIDsKICAgICAgICB9CiAgICAgICAgZWxzZSAKICAgICAgICB7
CiAgICAgICAgICAgIHRhYmxlID0gKFQgKiopIHJlYWxsb2MgKCh2b2lkICopdGFibGUsIChtYXhF
bnRyaWVzICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MCApICogc2l6ZW9m
IChQbHVnaW5DbGFzcyAqKSk7CiAgICAgICAgICAgIG1heEVudHJpZXMgKz0gNTAgOwogICAgICAg
IH0KICAgIH0KCiAgICAKICAgIGlmICh0YWJsZSA9PSBfX251bGwgKSB7CiAgICAgICAgZnByaW50
ZiAoc3RkZXJyLCAiUFJPR1JBTU1FUiBFUlJPUiAtIFBsdWdpblRhYmxlPHR5cGU+OjoiCiAgICAg
ICAgICAgICAgICAgICAgICAgICAidGFibGUgZGlkIG5vdCBnZXQgYWxsb2NhdGVkLiIpOwogICAg
ICAgIHJldHVybiAwIDsKICAgIH0KCiAgICByZXR1cm4gMSA7Cn0KIyAxMDYgImgvUGx1Z2luVGVt
cGxhdGUuaCIgMgoKCgoKIyAyMyAibnJoeS9OUkhZX0FjY2Vzcy5jIiAyCgojIDEgIi9zb2Z0d2Fy
ZS90aGFsaWEvaC90eHQuaCIgMQogCgoKCgoKCgoKCgoKCgogCiMgMSAiL3Vzci9saWIvZ2NjLWxp
Yi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkYXJnLmgiIDEgMwog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIv
YWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3ZhLWFscGhhLmgiIDEgMwog
CgogCgoKCgogCgojIDI1ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2Nz
LTIuOTEuNjYvaW5jbHVkZS92YS1hbHBoYS5oIiAzCgoKIAoKCgoKCgoKCnR5cGVkZWYgX19nbnVj
X3ZhX2xpc3QgdmFfbGlzdDsKCiMgNDkgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxp
bnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3ZhLWFscGhhLmgiIDMKCgogCgogCgoKCgoKCgoKCgoK
CgoKCgogCgplbnVtIHsKICBfX25vX3R5cGVfY2xhc3MgPSAtMSwKICBfX3ZvaWRfdHlwZV9jbGFz
cywKICBfX2ludGVnZXJfdHlwZV9jbGFzcywKICBfX2NoYXJfdHlwZV9jbGFzcywKICBfX2VudW1l
cmFsX3R5cGVfY2xhc3MsCiAgX19ib29sZWFuX3R5cGVfY2xhc3MsCiAgX19wb2ludGVyX3R5cGVf
Y2xhc3MsCiAgX19yZWZlcmVuY2VfdHlwZV9jbGFzcywKICBfX29mZnNldF90eXBlX2NsYXNzLAog
IF9fcmVhbF90eXBlX2NsYXNzLAogIF9fY29tcGxleF90eXBlX2NsYXNzLAogIF9fZnVuY3Rpb25f
dHlwZV9jbGFzcywKICBfX21ldGhvZF90eXBlX2NsYXNzLAogIF9fcmVjb3JkX3R5cGVfY2xhc3Ms
CiAgX191bmlvbl90eXBlX2NsYXNzLAogIF9fYXJyYXlfdHlwZV9jbGFzcywKICBfX3N0cmluZ190
eXBlX2NsYXNzLAogIF9fc2V0X3R5cGVfY2xhc3MsCiAgX19maWxlX3R5cGVfY2xhc3MsCiAgX19s
YW5nX3R5cGVfY2xhc3MKfTsKCiAKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
IyAzNiAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2lu
Y2x1ZGUvc3RkYXJnLmgiIDIgMwoKIyAxMjYgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0
LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGFyZy5oIiAzCgoKCgoKCgoKCgogCiAKCgoK
CgoKCgoKCgoKCiMgMTY4ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2Nz
LTIuOTEuNjYvaW5jbHVkZS9zdGRhcmcuaCIgMwoKCiAKCgoKIyAxOTggIi91c3IvbGliL2djYy1s
aWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGFyZy5oIiAzCgoK
CgoKCgoKIyAxNiAiL3NvZnR3YXJlL3RoYWxpYS9oL3R4dC5oIiAyCgoKIyAxICIvc29mdHdhcmUv
dGhhbGlhL2gvc3RkdHlwZXMuaCIgMQoKIAoKCgoKCgoKCgoKCgoKCgoKCiMgMjAzICIvc29mdHdh
cmUvdGhhbGlhL2gvc3RkdHlwZXMuaCIKCgoKCgoKCgoKCgoKCgojIDE4ICIvc29mdHdhcmUvdGhh
bGlhL2gvdHh0LmgiIDIKCgogCgoKIAogCiAKIAogCgplbnVtIFNldmVyaXR5IHsKICAgIFNFVl9C
QVNFICAgICAgICA9ICAwLAogICAgU0VWX05PVEUgICAgICAgID0gIDEsCiAgICBTRVZfQ0FVVElP
TiAgICAgPSAgMiwKICAgIFNFVl9XQVJOSU5HICAgICA9ICAzLAogICAgU0VWX0VSUk9SICAgICAg
ID0gIDUsCiAgICBTRVZfUFJPR19FUlJPUiAgPSAgNiwKICAgIFNFVl9TRVJJT1VTICAgICA9ICA3
LAogICAgU0VWX0ZBVEFMICAgICAgID0gIDksCiAgICBTRVZFUklUWV8wICAgICAgPSAgMCwKICAg
IFNFVkVSSVRZXzEgICAgICA9ICAxLAogICAgU0VWRVJJVFlfMiAgICAgID0gIDIsCiAgICBTRVZF
UklUWV8zICAgICAgPSAgMywKICAgIFNFVkVSSVRZXzQgICAgICA9ICA0LAogICAgU0VWRVJJVFlf
NSAgICAgID0gIDUsCiAgICBTRVZFUklUWV82ICAgICAgPSAgNiwKICAgIFNFVkVSSVRZXzcgICAg
ICA9ICA3LAogICAgU0VWRVJJVFlfOCAgICAgID0gIDgsCiAgICBTRVZFUklUWV85ICAgICAgPSAg
OSwKICAgIFNFVl9JTkZPUk1BVElPTiA9IDEwLAogICAgU0VWX0hFTFAgICAgICAgID0gMTEsCiAg
ICBTRVZfUVVFU1RJT04gICAgPSAxMiwKICAgIFNFVl9VU0FHRSAgICAgICA9IDEzLAogICAgU0VW
X0hJTlQgICAgICAgID0gMTQsCiAgICBTRVZfRElBR05PU1RJQyAgPSAxNSwKICAgIFNFVl9EQVRB
ICAgICAgICA9IDE2LAogICAgU0VWX1NUQVRVUyAgICAgID0gMTcsCiAgICBTRVZfVU5LTk9XTiAg
ICAgPSAxOCwKICAgIFNFVl9NT0RBTCAgICAgICA9IDI1NiAgCn07CgogCiAKCnR5cGVkZWYgdm9p
ZCAoKlRYVF9PdXRwdXRDYWxsYmFjaykgICAgIChjb25zdCBjaGFyICosIHZvaWQgKik7CnR5cGVk
ZWYgdm9pZCAoKlRYVF9GaWxlT3V0cHV0Q2FsbGJhY2spIChGSUxFICosIGNvbnN0IGNoYXIgKiwg
dm9pZCAqKTsKdHlwZWRlZiBjaGFyICooKlRYVF9IZWFkZXJDYWxsYmFjaykgICAgKGNvbnN0IGNo
YXIgKik7CgogCmV4dGVybiBjb25zdCBjaGFyICpUWFRfU3JjRnVuYzsKZXh0ZXJuIGNvbnN0IGNo
YXIgKlRYVF9TcmNGaWxlOwpleHRlcm4gaW50ICAgVFhUX1NyY0xpbmU7CmV4dGVybiBpbnQgICBU
WFRfQXNzZXJ0Qm9vbDsKZXh0ZXJuIGNoYXIgKlRYVF9Bc3NlcnRTdHI7CmlubGluZSB2b2lkIFRY
VF9TZXRGdW5jIChjaGFyICpmKSB7IFRYVF9TcmNGdW5jID0gKGYpOyB9CgogCiMgMSAiL3NvZnR3
YXJlL3RoYWxpYS9oL3R4dC5wIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKY2hhciAqVFhUX0dl
dE1lc3NhZ2UgKAogICAgICAgIGNvbnN0IGNoYXIgKmxhYmVsLCAKICAgICAgICAuLi4KCSk7CgpC
T09MRUFOIFRYVF9Bc3NlcnRDb25kICgKICAgICAgICBCT09MRUFOIGNvbmQsIAogICAgICAgIEJP
T0xFQU4gc2hvdWxkQmUsIAogICAgICAgIGNvbnN0IGNoYXIgKmNvbmRTdHJpbmcsCiAgICAgICAg
Y29uc3QgY2hhciAqZmlsZSwKICAgICAgICBpbnQgbGluZQoJKTsKCkJPT0xFQU4gVFhUX0Fzc2Vy
dENvbmQgKAogICAgICAgIEJPT0xFQU4gY29uZCwgCiAgICAgICAgQk9PTEVBTiBzaG91bGRCZSwg
CiAgICAgICAgY29uc3QgY2hhciAqY29uZFN0cmluZwoJKTsKCkJPT0xFQU4gVFhUX0Fzc2VydE91
dHB1dGYgKAogICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgCiAgICAgICAgLi4uCgkpOwoKQk9P
TEVBTiBUWFRfQ2hlY2tOZXN0aW5nICgKICAgICAgICBpbnQgZXhwZWN0ZWRMZXZlbAoJKTsKCnZv
aWQgVFhUX091dHB1dCAoCiAgICAgICAgY29uc3QgY2hhciAqbGFiZWwsIAogICAgICAgIC4uLgoJ
KTsKCnZvaWQgVFhUX091dHB1dCAoCiAgICAgICAgRklMRSAqZnAsIAogICAgICAgIGNvbnN0IGNo
YXIgKmxhYmVsLCAKICAgICAgICAuLi4KCSk7Cgp2b2lkIFRYVF9PdXRwdXRmICgKICAgICAgICBj
b25zdCBjaGFyICpmb3JtYXQsIAogICAgICAgIC4uLgoJKTsKCnZvaWQgVFhUX091dHB1dGYgKAog
ICAgICAgIEZJTEUgKmZwLCAKICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIAogICAgICAgIC4u
LgoJKTsKCnZvaWQgVFhUX091dHB1dGYgKAogICAgICAgIFNldmVyaXR5IHNldiwgCiAgICAgICAg
Y29uc3QgY2hhciAqZm9ybWF0LCAKICAgICAgICAuLi4KCSk7Cgp2b2lkIFRYVF9PdXRwdXRmICgK
ICAgICAgICBGSUxFICpmcCwgCiAgICAgICAgU2V2ZXJpdHkgc2V2LCAKICAgICAgICBjb25zdCBj
aGFyICpmb3JtYXQsIAogICAgICAgIC4uLgoJKTsKCnZvaWQgVFhUX091dHB1dERpYWdmICgKICAg
ICAgICBjb25zdCBjaGFyICpmb3JtYXQsIAogICAgICAgIC4uLgoJKTsKCnZvaWQgVFhUX091dHB1
dERpYWdmICgKICAgICAgICBGSUxFICpmcCwgCiAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAK
ICAgICAgICAuLi4KCSk7Cgp2b2lkIFRYVF9TZXREZWJ1ZyAoCiAgICAgICAgQk9PTEVBTiBmCgkp
OwoKQk9PTEVBTiBUWFRfR2V0RGVidWcgKCk7Cgp2b2lkIFRYVF9CZWdpbiAoKSAgICAgICAgICAg
ICAgICAgICAgIDsKCnZvaWQgVFhUX0VuZCAoKSAgICAgICAgICAgICAgICAgICA7Cgp2b2lkIFRY
VF9TZXRNaW5TZXZlcml0eSAoCiAgICAgICAgU2V2ZXJpdHkgc2V2CgkpOwoKU2V2ZXJpdHkgVFhU
X0dldE1pblNldmVyaXR5ICgpOwoKdm9pZCBUWFRfU2V0VmVyYm9zZSAoCiAgICAgICAgQk9PTEVB
TiBiCgkpOwoKQk9PTEVBTiBUWFRfR2V0VmVyYm9zZSAoKTsKCnZvaWQgVFhUX1NldERpYWcgKAog
ICAgICAgIEJPT0xFQU4gYgoJKTsKCmludCBUWFRfR2V0RGlhZyAoKTsKCnZvaWQgVFhUX1VzZVN0
eWxlICgKICAgICAgICBCT09MRUFOIGIKCSk7CgppbnQgVFhUX0dldFN0eWxlICgpOwoKdm9pZCBU
WFRfVXNlTGFiZWxzICgKICAgICAgICBCT09MRUFOIGIKCSk7CgpCT09MRUFOIFRYVF9HZXRMYWJl
bHMgKCk7Cgp2b2lkIFRYVF9XcmFwICgKICAgICAgICBCT09MRUFOIGIKCSk7CgpCT09MRUFOIFRY
VF9HZXRXcmFwICgpOwoKdm9pZCBUWFRfSW5kZW50ICgKICAgICAgICBpbnQgaQoJKTsKCmludCBU
WFRfR2V0SW5kZW50ICgpOwoKdm9pZCBUWFRfQXV0b2luZGVudCAoCiAgICAgICAgQk9PTEVBTiBi
CgkpOwoKQk9PTEVBTiBUWFRfR2V0QXV0b2luZGVudCAoKTsKCnZvaWQgVFhUX1NldFdpZHRoICgK
ICAgICAgICBpbnQgdwoJKTsKCmludCBUWFRfR2V0V2lkdGggKCk7Cgp2b2lkIFRYVF9TZXRUcmFj
ZSAoCiAgICAgICAgQk9PTEVBTiBiCgkpOwoKQk9PTEVBTiBUWFRfR2V0VHJhY2UgKCk7Cgp2b2lk
IFRYVF9TZXRQcmVmaXggKAogICAgICAgIGNvbnN0IGNoYXIgKnN0cgoJKTsKCmNvbnN0IGNoYXIg
KlRYVF9HZXRQcmVmaXggKCk7Cgp2b2lkIFRYVF9BZGRSZWZEaXIgKAogICAgICAgIGNvbnN0IGNo
YXIgKmRpcgoJKTsKCnZvaWQgVFhUX1JlZkZpbGUgKAogICAgICAgIGNvbnN0IGNoYXIgKmZpbGUK
CSk7Cgp2b2lkIFRYVF9SZWdpc3RlckluZm9DYWxsYmFjayAoCiAgICAgICAgVFhUX091dHB1dENh
bGxiYWNrIGYsCiAgICAgICAgdm9pZCAqZGF0YQoJKTsKCnZvaWQgVFhUX1JlZ2lzdGVyRXJyb3JD
YWxsYmFjayAoCiAgICAgICAgVFhUX091dHB1dENhbGxiYWNrIGYsCiAgICAgICAgdm9pZCAqZGF0
YQoJKTsKCnZvaWQgVFhUX1JlZ2lzdGVyT3V0cHV0Q2FsbGJhY2sgKAogICAgICAgIFNldmVyaXR5
IHNldiwKICAgICAgICBUWFRfT3V0cHV0Q2FsbGJhY2sgZiwKICAgICAgICB2b2lkICpkYXRhCgkp
OwoKdm9pZCBUWFRfUmVnaXN0ZXJEaWFnQ2FsbGJhY2sgKAogICAgICAgIFRYVF9PdXRwdXRDYWxs
YmFjayBmLAogICAgICAgIHZvaWQgKmRhdGEKCSk7Cgp2b2lkIFRYVF9SZWdpc3RlckZpbGVDYWxs
YmFjayAoCiAgICAgICAgVFhUX0ZpbGVPdXRwdXRDYWxsYmFjayBmLAogICAgICAgIHZvaWQgKmRh
dGEKCSk7Cgp2b2lkIFRYVF9SZWdpc3RlckhlYWRlckNhbGxiYWNrICgKICAgICAgICBjaGFyICoo
KmYpKGNvbnN0IGNoYXIgKikKCSk7CgpjaGFyICpUWFRfRGVmYXVsdE91dHB1dEZvcm1hdCAoCiAg
ICAgICAgY29uc3QgY2hhciAqc3RyCgkpOwoKVFhUX091dHB1dENhbGxiYWNrIFRYVF9HZXRPdXRw
dXRDYWxsYmFjayAoCiAgICAgICAgU2V2ZXJpdHkgc2V2CgkpOwoKdm9pZCAqVFhUX0dldE91dHB1
dERhdGEgKAogICAgICAgIFNldmVyaXR5IHNldgoJKTsKClRYVF9GaWxlT3V0cHV0Q2FsbGJhY2sg
VFhUX0dldEZpbGVPdXRwdXRDYWxsYmFjayAoKTsKCnZvaWQgKlRYVF9HZXRGaWxlT3V0cHV0RGF0
YSAoKTsKClRYVF9IZWFkZXJDYWxsYmFjayBUWFRfR2V0SGVhZGVyQ2FsbGJhY2sgKCk7Cgp2b2lk
IFRYVF9WZlByaW50ICgKICAgICAgICBGSUxFICpmcCwgCiAgICAgICAgY29uc3QgY2hhciAqbGFi
ZWwsIAogICAgICAgIHZhX2xpc3QgYXJncwoJKTsKCnZvaWQgVFhUX1ZmUHJpbnRmICgKICAgICAg
ICBGSUxFICpmcCwgCiAgICAgICAgU2V2ZXJpdHkgc2V2LCAKICAgICAgICBjb25zdCBjaGFyICpm
b3JtYXQsIAogICAgICAgIHZhX2xpc3QgYXJncwoJKTsKCgogCgoKIAoKCiAKCnZvaWQgVFhUX0Zh
dGFsRXJyb3JEaWFsb2cgKAogICAgICAgIGNvbnN0IGNoYXIgKm1zZywgCiAgICAgICAgdm9pZCAq
CgkpOwoKdm9pZCBUWFRfRXJyb3JEaWFsb2cgKAogICAgICAgIGNvbnN0IGNoYXIgKm1zZywgCiAg
ICAgICAgdm9pZCAqCgkpOwoKdm9pZCBUWFRfV2FybmluZ0RpYWxvZyAoCiAgICAgICAgY29uc3Qg
Y2hhciAqbXNnLCAKICAgICAgICB2b2lkICoKCSk7Cgp2b2lkIFRYVF9JbmZvRGlhbG9nICgKICAg
ICAgICBjb25zdCBjaGFyICptc2csIAogICAgICAgIHZvaWQgKgoJKTsKCnZvaWQgVFhUX1F1ZXN0
aW9uRGlhbG9nICgKICAgICAgICBjb25zdCBjaGFyICptc2csIAogICAgICAgIHZvaWQgKgoJKTsK
CmNoYXIgKlRYVF9EaWFsb2dIZWFkZXJDYWxsYmFjayAoCiAgICAgICAgY29uc3QgY2hhciAqc3Ry
CgkpOwoKdm9pZCBUWFRfU2V0VmtEZWZhdWx0cyAoKTsKCgogCgoKCgoKIyA3NiAiL3NvZnR3YXJl
L3RoYWxpYS9oL3R4dC5oIiAyCgoKIAoKY2xhc3MgVFhUX1JlZkRpciB7CnB1YmxpYzoKICAgIFRY
VF9SZWZEaXIoY29uc3QgY2hhciAqZGlyKSB7IFRYVF9BZGRSZWZEaXIgKGRpcik7IH0KfTsKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyNCAibnJoeS9OUkhZX0FjY2Vz
cy5jIiAyCgojIDEgIi9zb2Z0d2FyZS90aGFsaWEvaC9odS5oIiAxCgoKCiAKCgoKIyAxICIvc29m
dHdhcmUvdGhhbGlhL2gvVFdJTkUuaCIgMQoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgp0ZW1wbGF0ZSA8Y2xh
c3MgVHlwZT4gY2xhc3MgTGlzdDsKCmNsYXNzIFR3aW5lIHsKICAgIGNoYXIgICAgICAqc3RyOwog
ICAgaW50ICAgICAgIHNpemU7CgpwdWJsaWM6CiAKCgoKICAgIFR3aW5lKGNvbnN0IFR3aW5lICZz
KTsKICAgIFR3aW5lKGNvbnN0IGNoYXIgKnMpOwogICAgVHdpbmUoY2hhciBjKTsKICAgIFR3aW5l
KCB2b2lkICk7CgogCgoKCiAgICBpbmxpbmUgflR3aW5lKCkgeyBmcmVlKCB0aGlzLT5zdHIgKTsg
fTsKCiAKCgoKICAgIFR3aW5lICAgJm9wZXJhdG9yPShjb25zdCBUd2luZSAmcyk7CiAgICBUd2lu
ZSAgICZvcGVyYXRvcj0oY29uc3QgY2hhciAqcyk7CiAgICBUd2luZSAgICZvcGVyYXRvcj0oY2hh
ciBjKTsKCiAgICBvcGVyYXRvciBjb25zdCBjaGFyKigpIGNvbnN0OwoKICAgIGNoYXIgJm9wZXJh
dG9yW10oaW50IGkpOwogICAgY2hhciBvcGVyYXRvcltdKGludCBpKSBjb25zdDsKCiAKCgoKICAg
IFR3aW5lIG9wZXJhdG9yKyhjb25zdCBUd2luZSAmcykgY29uc3Q7CiAgICBUd2luZSBvcGVyYXRv
cisoY29uc3QgY2hhciAqcykgY29uc3Q7CiAgICBUd2luZSBvcGVyYXRvcisoY2hhciBjKSBjb25z
dDsKCiAgICBmcmllbmQgVHdpbmUgb3BlcmF0b3IrKCBjb25zdCBjaGFyICpzLCBjb25zdCBUd2lu
ZSAmIHQpOwogICAgZnJpZW5kIFR3aW5lIG9wZXJhdG9yKyggY2hhciBjLCBjb25zdCBUd2luZSAm
IHQpOwoKICAgIFR3aW5lICZvcGVyYXRvcis9KGNvbnN0IFR3aW5lICZzKTsKICAgIFR3aW5lICZv
cGVyYXRvcis9KGNvbnN0IGNoYXIgKnMpOwogICAgVHdpbmUgJm9wZXJhdG9yKz0oY2hhciBjKTsK
CgogCgoKCgogICAgaW50IG9wZXJhdG9yPT0oY29uc3QgVHdpbmUgJnMpIGNvbnN0OwogICAgaW50
IG9wZXJhdG9yPT0oY29uc3QgY2hhciAqIHMpIGNvbnN0OwogICAgaW50IG9wZXJhdG9yPT0oY2hh
ciAgYykgY29uc3Q7CiAgICBpbnQgb3BlcmF0b3IhPShjb25zdCBUd2luZSAmcykgY29uc3Q7CiAg
ICBpbnQgb3BlcmF0b3IhPShjb25zdCBjaGFyICpzKSBjb25zdDsKICAgIGludCBvcGVyYXRvciE9
KGNoYXIgYykgY29uc3Q7CiAgICBpbnQgb3BlcmF0b3I8PShjb25zdCBUd2luZSAmcykgY29uc3Q7
CiAgICBpbnQgb3BlcmF0b3I8PShjb25zdCBjaGFyICpzKSBjb25zdDsKICAgIGludCBvcGVyYXRv
cjw9KGNoYXIgYykgY29uc3Q7CiAgICBpbnQgb3BlcmF0b3I+PShjb25zdCBUd2luZSAmcykgY29u
c3Q7CiAgICBpbnQgb3BlcmF0b3I+PShjb25zdCBjaGFyICpzKSBjb25zdDsKICAgIGludCBvcGVy
YXRvcj49KGNoYXIgYykgY29uc3Q7CiAgICBpbnQgb3BlcmF0b3I8KGNvbnN0IFR3aW5lICZzKSBj
b25zdDsKICAgIGludCBvcGVyYXRvcjwoY29uc3QgY2hhciAqcykgY29uc3Q7CiAgICBpbnQgb3Bl
cmF0b3I8KGNoYXIgYykgY29uc3Q7CiAgICBpbnQgb3BlcmF0b3I+KGNvbnN0IFR3aW5lICZzKSBj
b25zdDsKICAgIGludCBvcGVyYXRvcj4oY29uc3QgY2hhciAqcykgY29uc3Q7CiAgICBpbnQgb3Bl
cmF0b3I+KGNoYXIgYykgY29uc3Q7CgoKIAoKCgogICAgaW50IGxlbmd0aCggdm9pZCkgY29uc3Q7
CiAgICBpbnQgd2lsZG1hdGNoKCBjb25zdCBUd2luZSAmKSBjb25zdDsKICAgIGludCB3aWxkbWF0
Y2goIGNvbnN0IGNoYXIgKikgY29uc3Q7CgoKIAoKCgogICAgaW50IFdyaXRlQmluYXJ5KCBORVRG
SUxFX0ZJTEUgKmZwKSBjb25zdDsKICAgIGludCBSZWFkQmluYXJ5KCBORVRGSUxFX0ZJTEUgKmZw
KTsKCgojIDEgIi9zb2Z0d2FyZS90aGFsaWEvaC9UV0lORS5wIiAxCiAKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCmZyaWVuZCBj
aGFyICppbmRleCggVHdpbmUgJiwgaW50ICk7CmZyaWVuZCBjaGFyICpyaW5kZXgoIFR3aW5lICYs
IGludCApOwpmcmllbmQgY2hhciAqc3RyY2hyKCBUd2luZSAmLCBpbnQgKTsKZnJpZW5kIGNoYXIg
KnN0cnJjaHIoIFR3aW5lICYsIGludCApOwpmcmllbmQgY29uc3QgY2hhciAqaW5kZXgoIGNvbnN0
IFR3aW5lICYsIGludCApOwpmcmllbmQgY29uc3QgY2hhciAqcmluZGV4KCBjb25zdCBUd2luZSAm
LCBpbnQgKTsKZnJpZW5kIGNvbnN0IGNoYXIgKnN0cmNociggY29uc3QgVHdpbmUgJiwgaW50ICk7
CmZyaWVuZCBjb25zdCBjaGFyICpzdHJyY2hyKCBjb25zdCBUd2luZSAmLCBpbnQgKTsKCmZyaWVu
ZCBjb25zdCBjaGFyICpmZ2V0cyggVHdpbmUgJiwgRklMRSAqICk7CmZyaWVuZCBjb25zdCBjaGFy
ICpmZ2V0cyggVHdpbmUgJiwgTkVURklMRV9GSUxFICogKTsKZnJpZW5kIGNvbnN0IGNoYXIgKmdl
dHMoIFR3aW5lICYgKTsKZnJpZW5kIExpc3Q8VHdpbmU+OwoKZnJpZW5kIHN0cnVjdCBGUkFOR0Ug
YXRvRlJBTkdFKCBjb25zdCBjaGFyICogKTsKZnJpZW5kIFR3aW5lIEZSQU5HRXRvYSggY29uc3Qg
RlJBTkdFICYsIGZsb2F0ID0gMS4wICk7CmZyaWVuZCBUd2luZSBmdG9hKCBmbG9hdCApOwojIDE2
NyAiL3NvZnR3YXJlL3RoYWxpYS9oL1RXSU5FLmgiIDIKCn07CmlubGluZSBjb25zdCBjaGFyICpj
bGFzc05hbWUoIGNvbnN0IFR3aW5lICYgKSAKICAgIHsKICAgICAgICByZXR1cm4oICJUd2luZSIp
OwogICAgfTsKCmlubGluZSBpbnQgbGVuZ3RoKCBjb25zdCBUd2luZSAmZm9vICkgewogICAgcmV0
dXJuIGZvby5sZW5ndGgoKTsKICAgIH07CgppbnQgZnJlYWQoIFR3aW5lICYsIE5FVEZJTEVfRklM
RSAqZnApOwppbnQgbXJlYWQoIFR3aW5lICYsIGNvbnN0IHZvaWQgKmlvQnVmZmVyKTsKaW50IGZ3
cml0ZSggY29uc3QgVHdpbmUgJiwgTkVURklMRV9GSUxFICpmcCk7CgpjaGFyKiBVX1VuaXhQYXJz
ZSggY29uc3QgTGlzdDxUd2luZT4gYXJndiwgT19MSVNUICpmbGFnTGlzdCwgaW50IG51bUZsYWdz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqKm9yZGVy
LCBpbnQgKm9yZGVyQ291bnQpOwoKCgojIDggIi9zb2Z0d2FyZS90aGFsaWEvaC9odS5oIiAyCgoj
IDEgIi9zb2Z0d2FyZS90aGFsaWEvaC9MaXN0VGVtcGxhdGUuaCIgMQoKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KY2xhc3MgTGlzdCB7CnByb3RlY3RlZDoK
ICAgIFR5cGUgKmRhdGE7CiAgICBpbnQgc3o7CiAgICBpbnQgbWF4c2l6ZTsKCiAgICB2b2lkIGlu
Y3JlYXNlTWF4c2l6ZSgpOwoKcHVibGljOgogICAgTGlzdCgpOwogICAgfkxpc3QoKTsKICAgIExp
c3QoIGNvbnN0IExpc3QgJiApOwogICAgTGlzdCggY29uc3QgVHlwZSAmICk7CgogICAgTGlzdCAm
ICAgICAgICAgIG9wZXJhdG9yPSggY29uc3QgTGlzdCAmICk7CiAgICBUeXBlICYgICAgICAgICAg
bGFzdCgpOwogICAgY29uc3QgVHlwZSAmICAgIGxhc3QoKSBjb25zdDsKCiAgICBMaXN0ICYgYXBw
ZW5kKCBjb25zdCBUeXBlICYgKTsKICAgIExpc3QgJiBhcHBlbmQoIGNvbnN0IExpc3QgJiApOwog
ICAgTGlzdCAmIHJlbW92ZSggaW50ICk7CiAgICBMaXN0ICYgcmVtb3ZlTGFzdCgpOwogICAgTGlz
dCAmIHJlbW92ZUFsbCgpOyAgICAgICAgICAgICAgICAgIAogICAgTGlzdCAmIGluc2VydCggY29u
c3QgVHlwZSAmLCBpbnQgKTsKICAgIExpc3QgJiBzZXRTaXplKCBpbnQgKTsKCiAgICBpbmxpbmUg
aW50IHNpemUoKSBjb25zdCB7IHJldHVybiBzejsgfTsKICAgIGlubGluZSBUeXBlICYgb3BlcmF0
b3JbXSggaW50IHdoaWNoICkgewogICAgICAgIGlmICggd2hpY2ggPCAwIHx8IHdoaWNoID49IHN6
ICkgewogICAgICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJjb25zdCBMaXN0W106IGFycmF5IHJl
ZmVyZW5jZSBvdXQgb2YgcmFuZ2UuXG4iICk7CiAgICAgICAgICAgIHJldHVybiBkYXRhWzBdOwog
ICAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRhdGFbd2hpY2hdOwogICAgICAgIH0KCiAgICBp
bmxpbmUgY29uc3QgVHlwZSAmIG9wZXJhdG9yW10oIGludCB3aGljaCApIGNvbnN0IHsKICAgICAg
ICBpZiAoIHdoaWNoIDwgMCB8fCB3aGljaCA+PSBzeiApIHsKICAgICAgICAgICAgZnByaW50Zigg
c3RkZXJyLCAiY29uc3QgTGlzdFtdOiBhcnJheSByZWZlcmVuY2Ugb3V0IG9mIHJhbmdlLlxuIiAp
OwogICAgICAgICAgICByZXR1cm4gZGF0YVswXTsKICAgICAgICAgICAgfQogICAgICAgIHJldHVy
biBkYXRhW3doaWNoXTsKICAgICAgICB9CgogICAgaW5saW5lIFR5cGUgJiBvcGVyYXRvcigpKCBp
bnQgd2hpY2ggKSB7CiAgICAgICAgcmV0dXJuIGRhdGFbd2hpY2hdOwogICAgICAgIH0KCiAgICBp
bmxpbmUgY29uc3QgVHlwZSAmIG9wZXJhdG9yKCkoIGludCB3aGljaCApIGNvbnN0IHsKICAgICAg
ICByZXR1cm4gZGF0YVt3aGljaF07CiAgICAgICAgfQoKICAgIH07CgppbmxpbmUgY29uc3QgY2hh
ciAqY2xhc3NOYW1lKCBpbnQgKSB7IHJldHVybiAiaW50IjsgfTsKaW5saW5lIGNvbnN0IGNoYXIg
KmNsYXNzTmFtZSggdW5zaWduZWQgaW50ICkgeyByZXR1cm4gInVuc2lnbmVkIGludCI7IH07Cmlu
bGluZSBjb25zdCBjaGFyICpjbGFzc05hbWUoIGNoYXIgKSB7IHJldHVybiAiY2hhciI7IH07Cmlu
bGluZSBjb25zdCBjaGFyICpjbGFzc05hbWUoIHVuc2lnbmVkIGNoYXIgKSB7IHJldHVybiAidW5z
aWduZWQgY2hhciI7IH07CmlubGluZSBjb25zdCBjaGFyICpjbGFzc05hbWUoIGxvbmcgKSB7IHJl
dHVybiAibG9uZyI7IH07CmlubGluZSBjb25zdCBjaGFyICpjbGFzc05hbWUoIHVuc2lnbmVkIGxv
bmcgKSB7IHJldHVybiAidW5zaWduZWQgbG9uZyI7IH07CmlubGluZSBjb25zdCBjaGFyICpjbGFz
c05hbWUoIHNob3J0ICkgeyByZXR1cm4gInNob3J0IjsgfTsKaW5saW5lIGNvbnN0IGNoYXIgKmNs
YXNzTmFtZSggdW5zaWduZWQgc2hvcnQgKSB7IHJldHVybiAidW5zaWduZWQgc2hvcnQiOyB9Owpp
bmxpbmUgY29uc3QgY2hhciAqY2xhc3NOYW1lKCBmbG9hdCApIHsgcmV0dXJuICJmbG9hdCI7IH07
CmlubGluZSBjb25zdCBjaGFyICpjbGFzc05hbWUoIGRvdWJsZSApIHsgcmV0dXJuICJkb3VibGUi
OyB9OwppbmxpbmUgY29uc3QgY2hhciAqY2xhc3NOYW1lKCB2b2lkICogKSB7IHJldHVybiAidm9p
ZCAqIjsgfTsKaW5saW5lIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSggY29uc3QgY2hhciAqICkgeyBy
ZXR1cm4gImNvbnN0IGNoYXIgKiI7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KaW50IGxpc3RD
b21wYXJlKCBjb25zdCBUeXBlICplMSwgY29uc3QgVHlwZSAqZTIpOwoKdGVtcGxhdGUgPGNsYXNz
IFR5cGU+CnZvaWQgcXNvcnQoIExpc3Q8VHlwZT4mIGxpc3QpOwoKdGVtcGxhdGUgPGNsYXNzIFR5
cGU+ClR5cGUgKmJzZWFyY2goIGNvbnN0IFR5cGUgKmtleSwgTGlzdDxUeXBlPiYgbGlzdCk7Cgp0
ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KY29uc3QgY2hhciAqY2xhc3NOYW1lKCBjb25zdCBMaXN0PFR5
cGU+ICYgKTsKCgojIDEgIi9zb2Z0d2FyZS90aGFsaWEvaC9MaXN0VGVtcGxhdGUuYyIgMQoKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9oL0xpc3RUZW1wbGF0
ZS5oIiAxCgogCgoKCgoKCgoKCgoKCgoKCgoKCgojIDExMCAiL3NvZnR3YXJlL3RoYWxpYS9oL0xp
c3RUZW1wbGF0ZS5oIgoKIyAyNiAiL3NvZnR3YXJlL3RoYWxpYS9oL0xpc3RUZW1wbGF0ZS5jIiAy
CgoKCgoMCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KTGlzdDxU
eXBlPjo6TGlzdCgpIAp7CiAgICBkYXRhID0gMDsKICAgIG1heHNpemUgPSBzeiA9IDA7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBUeXBlPgpMaXN0PFR5cGU+Ojp+TGlzdCgpIAp7CiAgICBpZiAoIGRhdGEg
KSAKICAgICAgICBkZWxldGUgW10gZGF0YTsKfQoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+Ckxpc3Q8
VHlwZT46Okxpc3QoIGNvbnN0IExpc3Q8VHlwZT4mIG9sZCkgCnsKICAgIGludCBpOwoKICAgIGlm
ICggb2xkLm1heHNpemUgKSB7CiAgICAgICAgaWYgKCAoIGRhdGEgPSBuZXcgVHlwZVsgb2xkLm1h
eHNpemUgXSApID09IDAgKSB7CiAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTGlzdDw+OiBv
dXQgb2YgbWVtb3J5IGluIGNvbnN0IGNvbnN0cnVjdG9yLlxuIiApOwogICAgICAgICAgICBzeiA9
IDA7CiAgICAgICAgICAgIG1heHNpemUgPSAwOyAgICAKICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgZWxzZSAKICAgICAgICBkYXRhID0gMDsKCiAgICBtYXhz
aXplID0gb2xkLm1heHNpemU7CiAgICBzeiA9IG9sZC5zejsKCiAgICBmb3IoIGkgPSAwIDsgaSA8
IHN6IDsgaSsrKQogICAgICAgIGRhdGFbaV0gPSBvbGQuZGF0YVtpXTsKfQoKdGVtcGxhdGUgPGNs
YXNzIFR5cGU+Ckxpc3Q8VHlwZT4mIExpc3Q8VHlwZT46Om9wZXJhdG9yPSggY29uc3QgTGlzdDxU
eXBlPiAmIG9sZCApIAp7CiAgICBpbnQgaTsKCiAgICBpZiAoZGF0YSkgZGVsZXRlIFtdIGRhdGE7
CgogICAgaWYgKG9sZC5tYXhzaXplKSB7CiAgICAgICAgaWYgKCAoIGRhdGEgPSBuZXcgVHlwZVtv
bGQubWF4c2l6ZV0gKSA9PSAwICkgewogICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiTGlzdDw+
Ojo9IDogY2FuJ3QgYWxsb2NhdGUgbWVtb3J5LlxuIiApOwogICAgICAgICAgICBzeiA9IDA7CiAg
ICAgICAgICAgIG1heHNpemUgPSAwOwogICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICBlbHNlIAogICAgICAgIGRhdGEgPSAwOwoKICAgIG1heHNpemUg
PSBvbGQubWF4c2l6ZTsKICAgIHN6ID0gb2xkLnN6OwoKICAgIGZvciggaSA9IDAgOyBpIDwgc3og
OyBpKyspCiAgICAgICAgZGF0YVtpXSA9IG9sZC5kYXRhW2ldOwogICAgCiAgICByZXR1cm4gKnRo
aXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgpjb25zdCBUeXBlICYgTGlzdDxUeXBlPjo6bGFz
dCgpIGNvbnN0IAp7CiAgICByZXR1cm4gZGF0YVsgc3ogLSAxIF07Cn0KCnRlbXBsYXRlIDxjbGFz
cyBUeXBlPgpUeXBlICYgTGlzdDxUeXBlPjo6bGFzdCgpIAp7CiAgICByZXR1cm4gZGF0YVsgc3og
LSAxIF07Cn0KCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgpMaXN0PFR5cGU+ICYgTGlzdDxUeXBlPjo6
c2V0U2l6ZSggaW50IG5ld1NpemUgKQp7CiAgICBpZiAoIG1heHNpemUgPCBuZXdTaXplICkgewog
ICAgICAgIGludCBvbGRfbWF4c2l6ZSA9IG1heHNpemU7CiAgICAgICAgd2hpbGUoIG1heHNpemUg
PCBuZXdTaXplICkKICAgICAgICAgICAgaW5jcmVhc2VNYXhzaXplKCk7CgogICAgICAgIFR5cGUg
Km5ld0RhdGEgPSBuZXcgVHlwZVsgbWF4c2l6ZSBdOwoKICAgICAgICBpZiAoIG5ld0RhdGEgPT0g
MCApIHsKICAgICAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiTGlzdDw+OjpzZXRTaXplKCVkKTog
Y2FuJ3QgYWxsb2NhdGUgbWVtb3J5LlxuIiwKICAgICAgICAgICAgICAgIG5ld1NpemUgKTsKICAg
ICAgICAgICAgbWF4c2l6ZSA9IG9sZF9tYXhzaXplOwogICAgICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICAgICAgICAgIH0KCiAgICAgICAgZm9yKCBpbnQgaSA9IDAgOyBpIDwgc3ogOyBpKysgKSAK
ICAgICAgICAgICAgbmV3RGF0YVtpXSA9IGRhdGFbaV07CgogICAgICAgIGlmICggZGF0YSApIGRl
bGV0ZSBbXSBkYXRhOwogICAgICAgIGRhdGEgPSBuZXdEYXRhOwogICAgICAgIH0KCiAgICBzeiA9
IG5ld1NpemU7CiAgICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgpMaXN0
PFR5cGU+JiBMaXN0PFR5cGU+OjphcHBlbmQoIGNvbnN0IFR5cGUgJiBhICkgCnsKICAgIGludCBp
OwogICAgaW50IG9sZF9tYXhzaXplID0gbWF4c2l6ZTsKICAgIFR5cGUgKm9sZERhdGEgPSAwOwoK
ICAgIGlmIChzeiA9PSBtYXhzaXplKSB7CiAgICAgICAgaW5jcmVhc2VNYXhzaXplKCk7CgogICAg
ICAgIFR5cGUgKm5ld0RhdGEgPSBuZXcgVHlwZVsgbWF4c2l6ZSBdOwoKICAgICAgICBpZiAobmV3
RGF0YSA9PSAwKSB7CiAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJMaXN0PD46OmFwcGVuZCgp
OiBjYW4ndCBhbGxvY2F0ZSBtZW1vcnkuXG4iICk7CiAgICAgICAgICAgIG1heHNpemUgPSBvbGRf
bWF4c2l6ZTsKICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICAgICB9CgogICAgICAg
IGZvciggaSA9IDAgOyBpIDwgc3ogOyBpKyspCiAgICAgICAgICAgIG5ld0RhdGFbaV0gPSBkYXRh
W2ldOwoKICAgICAgICBpZiAoZGF0YSkgCiAgICAgICAgICAgIG9sZERhdGEgPSBkYXRhOwogICAg
ICAgIGRhdGEgPSBuZXdEYXRhOwogICAgICAgIH0gCgogICAgZGF0YVsgc3orKyBdID0gYTsgCgog
ICAgaWYgKCBvbGREYXRhICkgCiAgICAgICAgZGVsZXRlIFtdIG9sZERhdGE7CgogICAgcmV0dXJu
ICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KTGlzdDxUeXBlPjo6TGlzdCggY29uc3Qg
VHlwZSAmIGEgKSAKewogICAgbWF4c2l6ZSA9IDE7CiAgICBkYXRhID0gbmV3IFR5cGVbIG1heHNp
emUgXTsKCiAgICBpZiAoIGRhdGEgPT0gMCApIHsKICAgICAgICBmcHJpbnRmKHN0ZGVyciwiTGlz
dDw+KCk6IGNhbid0IGFsbG9jYXRlIG1lbW9yeS5cbiIgKTsKICAgICAgICBzeiA9IDA7CiAgICAg
ICAgcmV0dXJuOwogICAgICAgIH0KCiAgICBkYXRhWzBdID0gYTsKICAgIHN6ID0gMTsKfQoKdGVt
cGxhdGUgPGNsYXNzIFR5cGU+CnZvaWQgTGlzdDxUeXBlPjo6aW5jcmVhc2VNYXhzaXplKCkgCnsK
ICAgIGlmIChtYXhzaXplID09IDApICAgICAgICAgICBtYXhzaXplID0gMTsKICAgIGVsc2UgaWYg
KG1heHNpemUgPT0gMSkgICAgICBtYXhzaXplID0gMjsKICAgIGVsc2UgaWYgKG1heHNpemUgPCA4
KSAgICAgICBtYXhzaXplID0gODsKICAgIGVsc2UgaWYgKG1heHNpemUgPCA2NTUzNikgICBtYXhz
aXplICo9IDI7CiAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgbWF4c2l6ZSArPSA2NTUz
NjsKfQoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+Ckxpc3Q8VHlwZT4mIExpc3Q8VHlwZT46OmFwcGVu
ZCggY29uc3QgTGlzdDxUeXBlPiAmIGEgKSAKewogICAgaW50IGk7CiAgICBpbnQgb2xkX21heHNp
emUgPSBtYXhzaXplOwoKICAgIGlmICggbWF4c2l6ZSA8PSBzeiArIGEuc3ogKSB7CiAgICAgICAg
d2hpbGUoIG1heHNpemUgPCBzeiArIGEuc3ogKSAKICAgICAgICAgICAgaW5jcmVhc2VNYXhzaXpl
KCk7CgogICAgICAgIFR5cGUgKm5ld0RhdGEgPSBuZXcgVHlwZVsgbWF4c2l6ZSBdOwoKICAgICAg
ICBpZiAoIG5ld0RhdGEgPT0gMCApIHsKICAgICAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiTGlz
dDw+OjphcHBlbmQoKTogY2FuJ3QgYWxsb2NhdGUgbWVtb3J5LlxuIiApOwogICAgICAgICAgICBt
YXhzaXplID0gb2xkX21heHNpemU7CiAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAg
ICAgfQoKICAgICAgICBmb3IoIGkgPSAwIDsgaSA8IHN6IDsgaSsrKQogICAgICAgICAgICBuZXdE
YXRhW2ldID0gZGF0YVtpXTsKICAgICAgICBpZiAoZGF0YSkgZGVsZXRlIFtdIGRhdGE7CiAgICAg
ICAgZGF0YSA9IG5ld0RhdGE7CiAgICAgICAgfQoKICAgIGZvciggaSA9IDAgOyBpIDwgYS5zeiA7
IGkrKykKICAgICAgICBkYXRhW3N6ICsgaV0gPSBhLmRhdGFbaV07CiAgICBzeiArPSBhLnN6OwoK
ICAgIHJldHVybiAqdGhpczsKfQoKDAogCgoKCgoKCgoKCgoKCgoKCgoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgVHlwZT4KTGlzdDxUeXBlPiYgTGlzdDxUeXBlPjo6cmVtb3ZlKCBpbnQgd2hpY2ggKSAKewog
ICAgaW50IGk7CgogICAgaWYgKHdoaWNoIDwgMCB8fCB3aGljaCA+PSBzeikgewogICAgICAgIGZw
cmludGYoc3RkZXJyLCJMaXN0PD46OnJlbW92ZSgpOiBjYW4ndCBkZWxldGUgb2ZmIHRoZSBlbmQu
XG4iICk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICBmb3IoIGkgPSB3aGlj
aCA7IGkgPCBzei0xIDsgaSsrKQogICAgICAgIGRhdGFbaV0gPSBkYXRhW2krMV07CgogICAgc3ot
LTsKICAgIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+Ckxpc3Q8VHlwZT4m
IExpc3Q8VHlwZT46OnJlbW92ZUxhc3QoKSAKewogICAgaWYgKCBzeiApIHsKICAgICAgICBzei0t
OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgogICAgZnByaW50Ziggc3RkZXJyLCAi
TGlzdDw+OjpyZW1vdmVMYXN0KCk6IGxpc3QgaXMgZW1wdHkuXG4iICk7CgogICAgcmV0dXJuICp0
aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KTGlzdDxUeXBlPiYgTGlzdDxUeXBlPjo6cmVt
b3ZlQWxsKCkgCnsKICAgIHN6ID0gMDsKICAgIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNs
YXNzIFR5cGU+Ckxpc3Q8VHlwZT4mIExpc3Q8VHlwZT46Omluc2VydCggY29uc3QgVHlwZSAmdmFs
LCBpbnQgd2hpY2ggKSAKewogICAgaW50IGk7CgogICAgaWYgKCB3aGljaCA8IDAgfHwgd2hpY2gg
PiBzeikgewogICAgICAgIGZwcmludGYoc3RkZXJyLCAiTGlzdDw+OjppbnNlcnQoKSBjYW4ndCBp
bnNlcnQgb2ZmIHRoZSBlbmQuXG4iICk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0K
CiAgICBzZXRTaXplKCBzeiArIDEgKTsKCiAgICBmb3IoIGkgPSBzeiAtIDIgOyBpID49IHdoaWNo
IDsgaS0tICkKICAgICAgICBkYXRhWyBpICsgMSBdID0gZGF0YVsgaSBdOwoKICAgIGRhdGFbIHdo
aWNoIF0gPSB2YWw7CiAgICByZXR1cm4gKnRoaXM7Cn0KCgwKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4Kdm9pZCBxc29ydCggTGlzdDxUeXBlPiAmIGxpc3QgKSAK
ewogICAgIAogICAgaW50ICgqbXlDb21wYXJlKSggY29uc3QgVHlwZSAqLCBjb25zdCBUeXBlICop
ID0gbGlzdENvbXBhcmU7CgogICAgaWYgKCBsaXN0LnNpemUoKSA+IDEgKQogICAgICAgIHFzb3J0
KCAmKGxpc3RbMF0pLCBsaXN0LnNpemUoKSwgc2l6ZW9mKCBUeXBlICksIAogICAgICAgICAgICAo
aW50ICgqKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpIG15Q29tcGFyZSApOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgVHlwZT4KVHlwZSAqYnNlYXJjaCggY29uc3QgVHlwZSAqa2V5LCBMaXN0PFR5
cGU+ICYgbGlzdCApIAp7CiAgICAgCiAgICBpbnQgKCpteUNvbXBhcmUpKCBjb25zdCBUeXBlICos
IGNvbnN0IFR5cGUgKikgPSBsaXN0Q29tcGFyZTsKCiAgICBpZiAoIGxpc3Quc2l6ZSgpID09IDAg
KQogICAgICAgIHJldHVybiAwOwoKICAgIHJldHVybiAoVHlwZSAqKSA6OmJzZWFyY2goIGtleSwg
JihsaXN0WzBdKSwgbGlzdC5zaXplKCksIHNpemVvZiggVHlwZSApLCAKICAgICAgICAgICAgKGlu
dCAoKikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKSBteUNvbXBhcmUgKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIFR5cGU+CmludCBsaXN0Q29tcGFyZSggY29uc3QgVHlwZSAqdGUxLCBjb25zdCBU
eXBlICp0ZTIgKSAKewogICAgaWYgKCAqdGUxIDwgKnRlMiApCiAgICAgICAgcmV0dXJuIC0xOwog
ICAgZWxzZSBpZiAoICp0ZTEgPiAqdGUyICkKICAgICAgICByZXR1cm4gMTsKICAgIGVsc2UKICAg
ICAgICByZXR1cm4gMDsKfQoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+CmNvbnN0IGNoYXIgKmNsYXNz
TmFtZSggY29uc3QgTGlzdDxUeXBlPiAmICkgCnsKICAgIGNoYXIgKmJ1ZiA9IG5ldyBjaGFyWzEw
MDBdOyAgICAgIAogICAgVHlwZSAqZm9vID0gbmV3IFR5cGU7CiAgICBzcHJpbnRmKCBidWYsICJM
aXN0PCVzPiIsIGNsYXNzTmFtZSggKmZvbyApICk7IGRlbGV0ZSBmb287CiAgICByZXR1cm4gYnVm
Owp9CgojIDEwNyAiL3NvZnR3YXJlL3RoYWxpYS9oL0xpc3RUZW1wbGF0ZS5oIiAyCgoKCgojIDkg
Ii9zb2Z0d2FyZS90aGFsaWEvaC9odS5oIiAyCgojIDEgIi91c3IvbGliL2djYy1saWIvYWxwaGEt
cmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIAoKCiAKCiMg
MTE0ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5j
bHVkZS9saW1pdHMuaCIgMwoKCgoKCgoKIyAxMCAiL3NvZnR3YXJlL3RoYWxpYS9oL2h1LmgiIDIK
CgoKdHlwZWRlZiBzdHJ1Y3QgT19jbGFzcyBPX0NMQVNTOwp0eXBlZGVmIHN0cnVjdCBPX0xJU1Qg
T19MSVNUOwoKY2xhc3MgRk9fTUVTU0FHRV9JRDsKY2xhc3MgVmVydGV4OwpjbGFzcyBDb2xvcjsK
Y2xhc3MgTWF0cml4NDsKY2xhc3MgRk9fT0JKRUNUOwpjbGFzcyBNX01hdHJpeDsKY2xhc3MgTV9W
ZWN0b3I7CnR5cGVkZWYgc2hvcnQgQk9PTEVBTjsKdHlwZWRlZiBjaGFyIFNUUklOR1syNTZdOwoK
IAoKCmNsYXNzIENhc3RlciB7CnB1YmxpYzoKICAgIHVuaW9uIHsKICAgICAgICBpbnQgICAgICAg
ICAgICAgKmFzSW50OwogICAgICAgIGZsb2F0ICAgICAgICAgICAqYXNGbG9hdDsKICAgICAgICBk
b3VibGUgICAgICAgICAgKmFzRG91YmxlOwogICAgICAgIGNoYXIgICAgICAgICAgICAqYXNDaGFy
OwogICAgICAgIHVuc2lnbmVkIGNoYXIgICAqYXNVQ2hhcjsKICAgICAgICBjb25zdCBjaGFyICog
ICAgKmFzQ1BjaGFyOwogICAgICAgIEZPX09CSkVDVCAqICAgICAqYXNQRk9fT0JKRUNUOwogICAg
ICAgIGZsb2F0ICogICAgICAgICAqYXNQZmxvYXQ7CiAgICAgICAgaW50ICogICAgICAgICAgICph
c1BpbnQ7CiAgICAgICAgVmVydGV4ICAgICAgICAgICphc1ZlcnRleDsKICAgICAgICBDb2xvciAg
ICAgICAgICAgKmFzQ29sb3I7CiAgICAgICAgQk9PTEVBTiAgICAgICAgICphc0JPT0xFQU47CiAg
ICAgICAgQk9PTEVBTiAqICAgICAgICphc1BCT09MRUFOOwogICAgICAgIFR3aW5lICAgICAgICAg
ICAqYXNUd2luZTsKICAgICAgICBUd2luZSAqICAgICAgICAgKmFzUFR3aW5lOwogICAgICAgIFNU
UklORyAgICAgICAgICAqYXNTVFJJTkc7CiAgICAgICAgaW50ICoqKiAgICAgICAgICphc1BQUGlu
dDsKICAgICAgICBNYXRyaXg0ICAgICAgICAgKmFzTWF0cml4NDsKICAgICAgICB9IHU7CiAgICBl
bnVtIHsgX3NjcmV3ZWRfdXAsCiAgICAgICAgX2ludCwgX2Zsb2F0LCBfZG91YmxlLCBfY2hhciwK
ICAgICAgICBfQ1BjaGFyLCBfRk9fT0JKRUNULCBfUGZsb2F0LCBfUGludCwKICAgICAgICBfVmVy
dGV4LCBfQ29sb3IsIF9CT09MRUFOLCBfUEJPT0xFQU4sCiAgICAgICAgX1R3aW5lLCBfUFR3aW5l
LCBfU1RSSU5HLCBfUFBQaW50LCBfdWNoYXIsIF9NYXRyaXg0IH0gdHlwZTsKCiAgICBDYXN0ZXIo
KTsKICAgIENhc3RlciggaW50ICphICk7CiAgICBDYXN0ZXIoIGZsb2F0ICphICk7CiAgICBDYXN0
ZXIoIGRvdWJsZSAqYSApOwogICAgQ2FzdGVyKCBjaGFyICphICk7CiAgICBDYXN0ZXIoIHVuc2ln
bmVkIGNoYXIgKmEgKTsKICAgIENhc3RlciggY29uc3QgY2hhciAqKmEgKTsKICAgIENhc3Rlcigg
Rk9fT0JKRUNUICoqYSApOwogICAgQ2FzdGVyKCBmbG9hdCAqKmEgKTsKICAgIENhc3RlciggaW50
ICoqYSApOwogICAgQ2FzdGVyKCBWZXJ0ZXggKmEgKTsKICAgIENhc3RlciggQ29sb3IgKmEgKTsK
ICAgIENhc3RlciggQk9PTEVBTiAqYSApOwogICAgQ2FzdGVyKCBCT09MRUFOICoqYSk7CiAgICBD
YXN0ZXIoIFR3aW5lICphICk7CiAgICBDYXN0ZXIoIFR3aW5lICoqYSApOwogICAgQ2FzdGVyKCBT
VFJJTkcgKmEgKTsKICAgIENhc3RlciggaW50ICoqKiphICk7CiAgICBDYXN0ZXIoIE1hdHJpeDQg
KmEgKTsKICAgIH07CgppbmxpbmUgY29uc3QgY2hhciAqY2xhc3NOYW1lKCBDYXN0ZXIgKSB7IHJl
dHVybiAiQ2FzdGVyIjsgfTsKCnN0cnVjdCBIVV9QYXJzZXJTdGF0ZUV4dHJhIHsKICAgIHZvaWQg
ICAgICAgICprZXk7CiAgICB2b2lkICAgICAgICAqdmFsdWU7CiAgICB9OwppbmxpbmUgY29uc3Qg
Y2hhciAqY2xhc3NOYW1lKCBIVV9QYXJzZXJTdGF0ZUV4dHJhICkgeyAKICAgICAgICAgICAgcmV0
dXJuICJIVV9QYXJzZXJTdGF0ZUV4dHJhIjsgfTsKCnN0cnVjdCBIVV9QYXJzZXJTdGF0ZSB7CiAg
ICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudERlcHRoOwogICAgZW51bSB7IE5v
cm1hbCwgRm91bmRCcmFjZSwgRXhwZWN0aW5nQnJhY2UgfSBicmFjZVN0YXRlOwogICAgaW50ICAg
ICAgICAgICAgICAgICAgICAgICAgIGFsbG93VW5kZWZpbmVkRnVuY3M7CiAgICBUd2luZSAgICAg
ICAgICAgICAgICAgICAgICAgZmlyc3RXb3JkOwogICAgVHdpbmUgICAgICAgICAgICAgICAgICAg
ICAgIHNlY29uZFdvcmQ7CiAgICBmbG9hdCAgICAgICAgICAgICAgICAgICAgICAgZnJhbWU7CiAg
ICBMaXN0PEZSQU5HRT4gICAgICAgICAgICAgICAgZnJhbmdlczsKICAgIGludCAgICAgICAgICAg
ICAgICAgICAgICAgICBmcmFuZ2VJc0ZpbHRlcjsKICAgIExpc3Q8SFVfUGFyc2VyU3RhdGVFeHRy
YT4gICBleHRyYTsgICAgICAgICAgIAoKICAgIEhVX1BhcnNlclN0YXRlKCk7CiAgICB9OwoKZXh0
ZXJuIEhVX1BhcnNlclN0YXRlIEhVX0RlZmF1bHRTdGF0ZTsKCnN0cnVjdCBIVV9WYWx1ZUd1dHM7
CgpzdHJ1Y3QgSFVfQ2hhblNwZWMgewogICAgVHdpbmUgICAgICAgICAgIG5hbWU7CiAgICBMaXN0
PHZvaWQgKj4gICAgbG9va3VwOwogICAgSFVfUGFyc2VyU3RhdGUgIHN0YXRlOwogICAgfTsKCnN0
cnVjdCBIVV9WYWx1ZSB7CiAgICBIVV9WYWx1ZUd1dHMgICAgICAgICpkYXRhOwoKICAgIEhVX1Zh
bHVlKCk7CiAgICBIVV9WYWx1ZSggY29uc3QgSFVfVmFsdWUgJiBvbGQgKTsKICAgIH5IVV9WYWx1
ZSgpOwogICAgSFVfVmFsdWUgJiBvcGVyYXRvcj0oIGNvbnN0IEhVX1ZhbHVlICYgb2xkICk7Cgog
ICAgb3BlcmF0b3IgZmxvYXQgKCk7CiAgICBvcGVyYXRvciBpbnQgKCk7CiAgICBvcGVyYXRvciBU
d2luZSAoKTsKICAgIG9wZXJhdG9yIE1fVmVjdG9yICgpOwogICAgb3BlcmF0b3IgTV9NYXRyaXgg
KCk7CiAgICBvcGVyYXRvciBIVV9DaGFuU3BlYyAoKTsKICAgIG9wZXJhdG9yIFR3aW5lICgpIGNv
bnN0OwoKICAgIEhVX1ZhbHVlKCBmbG9hdCApOwogICAgSFVfVmFsdWUoIGNvbnN0IFR3aW5lICYg
KTsKICAgIEhVX1ZhbHVlKCBjb25zdCBjaGFyICogKTsgICAgICAgICAgICAKICAgIEhVX1ZhbHVl
KCBjb25zdCBNX1ZlY3RvciAmICk7CiAgICBIVV9WYWx1ZSggY29uc3QgTV9NYXRyaXggJiApOwog
ICAgSFVfVmFsdWUoIGNvbnN0IEhVX0NoYW5TcGVjICYgKTsKCiAgICBpbnQgaXNGbG9hdCgpIGNv
bnN0OwogICAgaW50IGlzVHdpbmUoKSBjb25zdDsKICAgIGludCBpc01fVmVjdG9yKCkgY29uc3Q7
CiAgICBpbnQgaXNNX01hdHJpeCgpIGNvbnN0OwogICAgaW50IGlzSFVfQ2hhblNwZWMoKSBjb25z
dDsKCiAgICB2b2lkIFNldFBhcnNlclN0YXRlKCBIVV9QYXJzZXJTdGF0ZSAmICk7CiAgICB9OwoK
IAppbmxpbmUgVHdpbmUgJiBvcGVyYXRvcis9KCBUd2luZSAmdCwgY29uc3QgSFVfVmFsdWUgJnYg
KSAKICAgIHsgcmV0dXJuIHQgKz0gKFR3aW5lKSh2KTsgfQoKc3RydWN0IEhVX09iamVjdENoYW5u
ZWxOYW1lIHsKICAgIFR3aW5lICAgb2JqZWN0OwogICAgVHdpbmUgICBjaGFubmVsOwoKICAgIGlu
dCBvcGVyYXRvcj09KCBjb25zdCBIVV9PYmplY3RDaGFubmVsTmFtZSAmICkgY29uc3Q7CiAgICBp
bnQgb3BlcmF0b3IhPSggY29uc3QgSFVfT2JqZWN0Q2hhbm5lbE5hbWUgJiApIGNvbnN0OwogICAg
aW50IG9wZXJhdG9yPD0oIGNvbnN0IEhVX09iamVjdENoYW5uZWxOYW1lICYgKSBjb25zdDsKICAg
IGludCBvcGVyYXRvcj49KCBjb25zdCBIVV9PYmplY3RDaGFubmVsTmFtZSAmICkgY29uc3Q7CiAg
ICBpbnQgb3BlcmF0b3I8KCBjb25zdCBIVV9PYmplY3RDaGFubmVsTmFtZSAmICkgY29uc3Q7CiAg
ICBpbnQgb3BlcmF0b3I+KCBjb25zdCBIVV9PYmplY3RDaGFubmVsTmFtZSAmICkgY29uc3Q7CiAg
ICB9OwppbmxpbmUgY29uc3QgY2hhciAqY2xhc3NOYW1lKCBIVV9PYmplY3RDaGFubmVsTmFtZSAp
IAogICAgeyByZXR1cm4gIkhVX09iamVjdENoYW5uZWxOYW1lIjsgfTsKCnN0cnVjdCBIVV9FeHBy
ZXNzaW9uR3V0czsKCnN0cnVjdCBIVV9FeHByZXNzaW9uIHsKICAgICAKICAgIEhVX0V4cHJlc3Np
b25HdXRzICAgICAgICpkYXRhOwoKcHVibGljOgogICAgSFVfRXhwcmVzc2lvbigpOwogICAgfkhV
X0V4cHJlc3Npb24oKTsKICAgIEhVX0V4cHJlc3Npb24oIGNvbnN0IEhVX0V4cHJlc3Npb24gJiAp
OwogICAgSFVfRXhwcmVzc2lvbiAmIG9wZXJhdG9yPSggY29uc3QgSFVfRXhwcmVzc2lvbiAmICk7
CiAgICBIVV9FeHByZXNzaW9uKCBIVV9FeHByZXNzaW9uR3V0cyAqICk7CgogICAgSFVfVmFsdWUg
RXZhbHVhdGUoIEhVX1BhcnNlclN0YXRlICYgPSBIVV9EZWZhdWx0U3RhdGUgKTsKCiAgICBUd2lu
ZSBHZXRPcmlnaW5hbFRleHQoKTsKICAgIFR3aW5lIEdldE9yaWdpbmFsVGV4dCgpIGNvbnN0OwoK
ICAgIGNvbnN0IFR3aW5lICYgVHlwZSgpOwogICAgY29uc3QgVHdpbmUgJiBUeXBlKCkgY29uc3Q7
CgogICAgaW50IENvbnRhaW5zT2JqZWN0KCBjb25zdCBjaGFyICogb2JqZWN0ICk7CiAgICBpbnQg
Q29udGFpbnNPYmplY3QoIGNvbnN0IGNoYXIgKiBvYmplY3QgKSBjb25zdDsKCiAgICBpbnQgQ29u
dGFpbnNPYmplY3RDaGFubmVsKCBjb25zdCBjaGFyICogb2JqZWN0LCBjb25zdCBjaGFyICogY2hh
bm5lbCApOwogICAgaW50IENvbnRhaW5zT2JqZWN0Q2hhbm5lbCggY29uc3QgY2hhciAqIG9iamVj
dCwgY29uc3QgY2hhciAqIGNoYW5uZWwgKWNvbnN0OwoKICAgIHZvaWQgUmVuYW1lT2JqZWN0KCBj
b25zdCBjaGFyICogb2xkT2JqLCBjb25zdCBjaGFyICogbmV3T2JqLAogICAgICAgIEhVX1BhcnNl
clN0YXRlICYgZ2VuZXJpYyA9IEhVX0RlZmF1bHRTdGF0ZSApOwogICAgdm9pZCBSZW5hbWVPYmpl
Y3RDaGFubmVsKCBjb25zdCBjaGFyICogb2xkT2JqLCBjb25zdCBjaGFyICogb2xkQ2hhbiwKICAg
ICAgICBjb25zdCBjaGFyICogbmV3T2JqLCBjb25zdCBjaGFyICogbmV3Q2hhbiwKICAgICAgICBI
VV9QYXJzZXJTdGF0ZSAmIGdlbmVyaWMgPSBIVV9EZWZhdWx0U3RhdGUgKTsKCiAgICBMaXN0PFR3
aW5lPiAgICAgICAgICAgICAgICAgR2V0T2JqZWN0TGlzdCgpOwogICAgTGlzdDxUd2luZT4gICAg
ICAgICAgICAgICAgIEdldE9iamVjdExpc3QoKSBjb25zdDsKCiAgICBMaXN0PEhVX09iamVjdENo
YW5uZWxOYW1lPiAgR2V0T2JqZWN0Q2hhbm5lbExpc3QoKTsKICAgIExpc3Q8SFVfT2JqZWN0Q2hh
bm5lbE5hbWU+ICBHZXRPYmplY3RDaGFubmVsTGlzdCgpIGNvbnN0OwogICAgfTsKCmlubGluZSBj
b25zdCBjaGFyICpjbGFzc05hbWUoIEhVX0V4cHJlc3Npb24gKSB7IHJldHVybiAiSFVfRXhwcmVz
c2lvbiI7IH07CgpjbGFzcyBIVV9BdWRpdFN0cmVhbSB7CiAgICBpbnQgICAgICAgICAgICAgdG9w
T25seTsKICAgIGludCAgICAgICAgICAgICBpZ25vcmVFcnJvcnM7CiAgICBMaXN0PFR3aW5lPiAg
ICAgcXVldWU7CiAgICBpbnQgICAgICAgICAgICAgaXNBdWQyOwogICAgRklMRSAgICAgICAgICAg
ICpmaWxlOwogICAgaW50ICAgICAgICAgICAgIHByZXZpb3VzbHlPcGVuOwogICAgaW50ICAgICAg
ICAgICAgIGlnbm9yZVByb21wdDsKICAgIGNoYXIgICAgICAgICAgICAqZmlsZW5hbWU7CgpwdWJs
aWM6CiAgICBIVV9BdWRpdFN0cmVhbSggaW50IGF1ZFR5cGUgKTsKICAgIH5IVV9BdWRpdFN0cmVh
bSgpOwoKICAgIGludCBHZXRUb3BPbmx5KCk7CiAgICB2b2lkIFNldFRvcE9ubHkoIGludCApOwoK
ICAgIGludCBHZXRJZ25vcmVFcnJvcnMoKTsKICAgIHZvaWQgU2V0SWdub3JlRXJyb3JzKCBpbnQg
KTsKCiAgICBpbnQgR2V0SWdub3JlUHJvbXB0KCk7CiAgICB2b2lkIFNldElnbm9yZVByb21wdCgg
aW50ICk7CgogICAgdm9pZCBQcmludFF1ZXVlKCk7CiAgICB2b2lkIEVtcHR5UXVldWUoKTsKCiAg
ICBUd2luZSBHZXRUZXh0U3RhdHVzKCk7CgogICAgdm9pZCBvcGVyYXRvcigpKCBjb25zdCBMaXN0
PFR3aW5lPiAmIGFyZ3YgKTsKICAgIHZvaWQgb3BlcmF0b3IoKSggY29uc3QgVHdpbmUgJiB0aGVM
aW5lICk7CiAgICB2b2lkIG9wZXJhdG9yKCkoIGNvbnN0IGNoYXIgKiB0aGVMaW5lICk7CgogICAg
RklMRSAqT3BlbigpOwogICAgaW50IENsb3NlKCk7CgogICAgaW50IElzT3BlbigpOwoKICAgIHZv
aWQgU2V0RmlsZW5hbWUoIGNvbnN0IGNoYXIgKm5ld05hbWUgKTsKICAgIFR3aW5lIEdldEZpbGVu
YW1lKCk7CiAgICB9OwoKIyAxICIvc29mdHdhcmUvdGhhbGlhL2gvaHUucCIgMQogCgoKCgoKCgoK
CgoKCgoKCgoKCiAKCgogCgoKIAoKdm9pZCBIVV9WYUF1ZGl0ICgKCQljb25zdCBjaGFyICpzdHIK
CQkuLi4KICk7CgoKIAoKdm9pZCBIVV9BZGRCaW5hcnlPcGVyYXRvciAoCiAgICAgICAgY29uc3Qg
Y2hhciAqICAgIG5hbWUsCiAgICAgICAgaW50ICAgICAgICAgICAgIHByaW9yaXR5LAogICAgICAg
IEhVX1ZhbHVlICAgICAgICAoICpldmFsRm4gKSggSFVfRXhwcmVzc2lvbiwgSFVfRXhwcmVzc2lv
biwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICosIEhVX1BhcnNlclN0YXRlICYgKQogKTsKCgogCgoKIAoKdm9pZCBIVV9Jbml0U2ln
bmFscyAoCiAgICB2b2lkCiApOwoKdm9pZCBIVV9Gcm9tQ2JyZWFrICgKICAgIHZvaWQKICk7Cgpp
bnQgSFVfVG9DYnJlYWsgKAogICAgdm9pZAogKTsKCgogCgoKIAoKCiAKCnZvaWQgSFVfQWRkQ2xh
c3MgKCAKICAgICAgICAgICAgICAgICAgICBPX0NMQVNTICpuZXdDbGFzcyAKICk7CgoKIAoKCiAK
CgogCgoKIAoKdm9pZCBIVV9Eb1Jlc2l6ZSAoKTsKCgogCgoKIAoKCiAKCnZvaWQgSFVfRXJyb3Ig
KCAKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptc2cgCiApOwoKdm9pZCBIVV9TeXNF
cnJvciAoIAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1zZyAKICk7Cgp2b2lkIEhV
X1dhcm4gKCAKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptc2cgCiApOwoKCiAKCnZv
aWQgSFVfQWRkTWFpbiAoIAoJCWNvbnN0IGNoYXIqIGNtZCwgCgkJaW50ICgqZnVuYykoIGNoYXIq
LCBjaGFyKiosIGludCApLAoJCWNvbnN0IGNoYXIqIGhlbHAgCiApOwoKdm9pZCBIVV9BZGRNYWlu
ICggCgkJY29uc3QgY2hhciogY21kLCAKCQlpbnQgKCpmdW5jKSggY29uc3QgY2hhciosIExpc3Q8
IGNvbnN0IGNoYXIqID4gKSwKCQljb25zdCBjaGFyKiBoZWxwIAogKTsKCnZvaWQgSFVfQWRkTWFp
biAoIAoJCWNvbnN0IGNoYXIqIGNtZCwgCgkJaW50ICgqZnVuYykoIGNvbnN0IGNoYXIqLCBMaXN0
PCBjb25zdCBjaGFyICogPiwgdm9pZCAqICksCgkJY29uc3QgY2hhciogaGVscCwKCQl2b2lkKiBj
bGllbnREYXRhCiApOwoKdm9pZCBIVV9BZGRNYWluICggCgkJY29uc3QgY2hhciogY21kLCAKCQlp
bnQgKCpmdW5jKSggdm9pZCogKSwKCQljb25zdCBjaGFyKiBoZWxwLAoJCXZvaWQqIGNsaWVudERh
dGEKICk7Cgp2b2lkIEhVX0FkZE1haW4gKCAKCQljb25zdCBjaGFyKiBjbWQsIAoJCWludCAoKmZ1
bmMpKCBjb25zdCBMaXN0PFR3aW5lPiAmLCB2b2lkICogKSwKCQljb25zdCBjaGFyKiBoZWxwICwK
CQl2b2lkKiBjbGllbnREYXRhCiApOwoKdm9pZCBIVV9BZGRNYWluICggCgkJY29uc3QgY2hhciog
Y21kLCAKCQlpbnQgKCpmdW5jKSgpLAoJCWNvbnN0IGNoYXIqIGhlbHAgCiApOwoKdm9pZCBIVV9B
ZGRNYWluICggCgkJY29uc3QgY2hhciogY21kLCAKCQlpbnQgKCpmdW5jKSggY29uc3QgTGlzdDwg
VHdpbmUgPiYgKSwKCQljb25zdCBjaGFyKiBoZWxwIAogKTsKCnZvaWQgSFVfQWRkTWFpbiAoIAoJ
CWNvbnN0IGNoYXIqIGNtZCwgCgkJaW50ICgqZnVuYykoIExpc3Q8IEhVX0V4cHJlc3Npb24gPiAp
LAoJCWNvbnN0IGNoYXIqIGhlbHAgCiApOwoKdm9pZCBIVV9BZGRNYWluICggCgkJY29uc3QgY2hh
ciogY21kLCAKCQlpbnQgKCpmdW5jKSggTGlzdDwgSFVfRXhwcmVzc2lvbiA+LCB2b2lkKiApLAoJ
CWNvbnN0IGNoYXIqIGhlbHAsCgkJdm9pZCogY2xpZW50RGF0YQogKTsKCkJPT0xFQU4gSFVfRmlu
ZE1haW4gKAoJCSAgICBjb25zdCBjaGFyKiBhcmcKICk7Cgp2b2lkIEhVX1JlbW92ZU1haW4gKAoJ
CSAgIGNvbnN0IGNoYXIqIGNtZAogKTsKCnZvaWQgSFVfQWRkRGVmYXVsdCAoIAoJCSAgIGludCAo
KmZ1bmMpKCBjb25zdCBMaXN0PCBUd2luZSA+JiApIAogKTsKCnZvaWQgSFVfQWRkRGVmYXVsdCAo
CgkJICAgaW50ICgqZnVuYykoIExpc3Q8IEhVX0V4cHJlc3Npb24gPiApCiApOwoKTGlzdDxUd2lu
ZT4gSFVfRXZhbHVhdGUgKAoJCQlMaXN0PCBIVV9FeHByZXNzaW9uID4gZXhwcnMsCgkJCUhVX1Bh
cnNlclN0YXRlJiBnZW5lcmljU3RhdGUKICk7Cgp2b2lkIEhVX0V4ZWN1dGUgKAoJCUxpc3Q8SFVf
RXhwcmVzc2lvbj4gZXhwcnMsCgkJSFVfUGFyc2VyU3RhdGUmIGdlbmVyaWNTdGF0ZQogKTsKCgog
CgoKIAoKTGlzdDxIVV9FeHByZXNzaW9uPiBIVV9FeHBhbmQgKCAKICAgICAgICBjb25zdCBUd2lu
ZSAmIHRoZUxpbmUsCiAgICAgICAgSFVfUGFyc2VyU3RhdGUgICYgZ2VuZXJpY1N0YXRlCiApOwoK
TGlzdDxIVV9FeHByZXNzaW9uPiBIVV9FeHBhbmRNYXRoICgKICAgICAgICBjb25zdCBUd2luZSAm
IHRoZUxpbmUsCiAgICAgICAgSFVfUGFyc2VyU3RhdGUgICYgZ2VuZXJpY1N0YXRlCiApOwoKTGlz
dDxIVV9FeHByZXNzaW9uPiBIVV9FeHBhbmRWYWx1ZSAoCiAgICAgICAgY29uc3QgVHdpbmUgJiB0
aGVMaW5lLAogICAgICAgIEhVX1BhcnNlclN0YXRlICAmIGdlbmVyaWNTdGF0ZQogKTsKCgogCgp2
b2lkIEhVX0FkZE9iamVjdENoYW5uZWxGdW5jdGlvbnMgKAogICAgICAgIExpc3Q8dm9pZCAqPiAo
Kmxvb2t1cEZuKSggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIEhVX1BhcnNlclN0YXRlICYp
LAogICAgICAgIEhVX1ZhbHVlICAoKmV2YWxGbikoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq
LCBjb25zdCBMaXN0PHZvaWQgKj4gJiAsIEhVX1BhcnNlclN0YXRlICYgKSwKICAgICAgICBpbnQg
ICAgICgqcGFyc2VGbikoIFR3aW5lICYsIFR3aW5lICYgKQogKTsKCnZvaWQgSFVfQWRkT2JqZWN0
Q2hhbm5lbEZ1bmN0aW9ucyAoCiAgICAgICAgTGlzdDx2b2lkICo+ICgqbG9va3VwRm4pKCBjb25z
dCBjaGFyICosIGNvbnN0IGNoYXIgKiwgSFVfUGFyc2VyU3RhdGUgJiksCiAgICAgICAgSFVfVmFs
dWUgICgqZXZhbEZuKSggY29uc3QgTGlzdDx2b2lkICo+ICYgLCBIVV9QYXJzZXJTdGF0ZSAmICks
CiAgICAgICAgaW50ICAgICAoKnBhcnNlRm4pKCBUd2luZSAmLCBUd2luZSAmICkKICk7Cgp2b2lk
IEhVX0ZsdXNoT2JqZWN0Q2hhbm5lbENhY2hlICgKICAgICAgICB2b2lkCiApOwoKdm9pZCBIVV9H
bG9iYWxSZW5hbWVPYmplY3RDaGFubmVsICgKICAgICAgICBjb25zdCBjaGFyICpvbGROYW1lLAog
ICAgICAgIGNvbnN0IGNoYXIgKm9sZENoYW4sCiAgICAgICAgY29uc3QgY2hhciAqbmV3TmFtZSwK
ICAgICAgICBjb25zdCBjaGFyICpuZXdDaGFuCiApOwoKdm9pZCBIVV9BZGRPYmplY3RGdW5jdGlv
bnMgKAogICAgICAgIExpc3Q8dm9pZCAqPiAoKmxvb2t1cEZuKSggY29uc3QgY2hhciAqLCBIVV9Q
YXJzZXJTdGF0ZSAmKSwKICAgICAgICBIVV9WYWx1ZSAgKCpldmFsRm4pKCBjb25zdCBjaGFyICos
IGNvbnN0IExpc3Q8dm9pZCAqPiAmICwgSFVfUGFyc2VyU3RhdGUgJiApLAogICAgICAgIGludCAg
ICAgKCpwYXJzZUZuKSggVHdpbmUgJiApCiApOwoKdm9pZCBIVV9BZGRPYmplY3RGdW5jdGlvbnMg
KAogICAgICAgIExpc3Q8dm9pZCAqPiAoKmxvb2t1cEZuKSggY29uc3QgY2hhciAqLCBIVV9QYXJz
ZXJTdGF0ZSAmKSwKICAgICAgICBIVV9WYWx1ZSAgKCpldmFsRm4pKCBjb25zdCBMaXN0PHZvaWQg
Kj4gJiAsIEhVX1BhcnNlclN0YXRlICYgKSwKICAgICAgICBpbnQgICAgICgqcGFyc2VGbikoIFR3
aW5lICYgKQogKTsKCnZvaWQgSFVfR2xvYmFsUmVuYW1lT2JqZWN0ICgKICAgICAgICBjb25zdCBj
aGFyICpvbGROYW1lLAogICAgICAgIGNvbnN0IGNoYXIgKm5ld05hbWUKICk7Cgp2b2lkIEhVX0Zs
dXNoT2JqZWN0Q2FjaGUgKAogICAgICAgIHZvaWQKICk7Cgp2b2lkIEhVX0FkZFBvc3RGaXhPcGVy
YXRvciAoCiAgICAgICAgY29uc3QgY2hhciAqICAgIG5hbWUsCiAgICAgICAgaW50ICAgICAgICAg
ICAgIG5BcmdzLAogICAgICAgIEhVX1ZhbHVlICAgICAgICAoICpldmFsRm4gKSggSFVfRXhwcmVz
c2lvbiwgTGlzdDxIVV9FeHByZXNzaW9uPiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICosIEhVX1BhcnNlclN0YXRlICYgKQogKTsKCnZvaWQgSFVfQWRkQ2hh
blNwZWNGdW5jdGlvbnMgKAogICAgICAgIExpc3Q8dm9pZCAqPiAoKmxvb2t1cEZuKSggY29uc3Qg
Y2hhciAqLCBIVV9QYXJzZXJTdGF0ZSAmKSwKICAgICAgICBIVV9WYWx1ZSAoKmV2YWxGbikoY29u
c3QgY2hhciAqLGNvbnN0IExpc3Q8dm9pZCAqPiAmLCBIVV9QYXJzZXJTdGF0ZSAmKSwKICAgICAg
ICBpbnQgICAgICgqcGFyc2VGbikoIFR3aW5lICYgKQogKTsKCnZvaWQgSFVfQWRkQ2hhblNwZWNG
dW5jdGlvbnMgKAogICAgICAgIExpc3Q8dm9pZCAqPiAoKmxvb2t1cEZuKSggY29uc3QgY2hhciAq
LCBIVV9QYXJzZXJTdGF0ZSAmKSwKICAgICAgICBIVV9WYWx1ZSAoKmV2YWxGbikoY29uc3QgY2hh
ciAqLGNvbnN0IExpc3Q8dm9pZCAqPiAmLCBIVV9QYXJzZXJTdGF0ZSAmKSwKICAgICAgICBpbnQg
ICAgICgqcGFyc2VGbikoIFR3aW5lICYgKSwKICAgICAgICBpbnQgICAgICgqcGFyc2VBc0FyZ0Zu
KSggVHdpbmUgJiwgY29uc3QgY2hhciAqLCBpbnQgKQogKTsKCnZvaWQgSFVfRmx1c2hDaGFuU3Bl
Y0NhY2hlICgKICAgICAgICB2b2lkCiApOwoKCiAKCgogCgp2b2lkIEhVX0FkZE1ldGhvZCAoIAog
ICAgICAgICAgICAgICAgICAgIEZPX09CSkVDVCAqdGhlQ2xhc3MsIAogICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKm1ldGhvZE5hbWUsCiAgICAgICAgY29uc3QgY2hhciAqaGVscCwgCiAg
ICAgICAgICAgICAgICAgICAgRk9fTUVTU0FHRV9JRCBtZXNzYWdlSUQgCiApOwoKdm9pZCBIVV9B
ZGRNZXRob2QgKCAKICAgICAgICAgICAgICAgICAgICBGT19PQkpFQ1QgKnRoZUNsYXNzLCAKICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZXRob2ROYW1lLAogICAgICAgIGNvbnN0IGNo
YXIgKmhlbHAsIAogICAgICAgICAgICAgICAgICAgIEZPX01FU1NBR0VfSUQgbWVzc2FnZUlELCAK
ICAgICAgICAgICAgICAgICAgICB2b2lkICphcmdCYXNlLAogICAgICAgIENhc3RlciBhcmcxIAog
KTsKCnZvaWQgSFVfQWRkTWV0aG9kICggCiAgICAgICAgICAgICAgICAgICAgRk9fT0JKRUNUICp0
aGVDbGFzcywgCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0aG9kTmFtZSwKICAg
ICAgICBjb25zdCBjaGFyICpoZWxwLCAKICAgICAgICAgICAgICAgICAgICBGT19NRVNTQUdFX0lE
IG1lc3NhZ2VJRCwgCiAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnQmFzZSwKICAgICAgICBD
YXN0ZXIgYXJnMSwgCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzIgCiApOwoKdm9pZCBI
VV9BZGRNZXRob2QgKCAKICAgICAgICAgICAgICAgICAgICBGT19PQkpFQ1QgKnRoZUNsYXNzLCAK
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZXRob2ROYW1lLAogICAgICAgIGNvbnN0
IGNoYXIgKmhlbHAsIAogICAgICAgICAgICAgICAgICAgIEZPX01FU1NBR0VfSUQgbWVzc2FnZUlE
LCAKICAgICAgICAgICAgICAgICAgICB2b2lkICphcmdCYXNlLAogICAgICAgIENhc3RlciBhcmcx
LCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJnMiwgCiAgICAgICAgICAgICAgICAgICAg
Q2FzdGVyIGFyZzMgCiApOwoKdm9pZCBIVV9BZGRNZXRob2QgKCAKICAgICAgICAgICAgICAgICAg
ICBGT19PQkpFQ1QgKnRoZUNsYXNzLCAKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpt
ZXRob2ROYW1lLAogICAgICAgIGNvbnN0IGNoYXIgKmhlbHAsIAogICAgICAgICAgICAgICAgICAg
IEZPX01FU1NBR0VfSUQgbWVzc2FnZUlELCAKICAgICAgICAgICAgICAgICAgICB2b2lkICphcmdC
YXNlLAogICAgICAgIENhc3RlciBhcmcxLCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJn
MiwgCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzMsIAogICAgICAgICAgICAgICAgICAg
IENhc3RlciBhcmc0IAogKTsKCnZvaWQgSFVfQWRkTWV0aG9kICggCiAgICAgICAgICAgICAgICAg
ICAgRk9fT0JKRUNUICp0aGVDbGFzcywgCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
bWV0aG9kTmFtZSwKICAgICAgICBjb25zdCBjaGFyICpoZWxwLCAKICAgICAgICAgICAgICAgICAg
ICBGT19NRVNTQUdFX0lEIG1lc3NhZ2VJRCwgCiAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJn
QmFzZSwKICAgICAgICBDYXN0ZXIgYXJnMSwgCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFy
ZzIsIAogICAgICAgICAgICAgICAgICAgIENhc3RlciBhcmczLCAKICAgICAgICAgICAgICAgICAg
ICBDYXN0ZXIgYXJnNCwKICAgICAgICBDYXN0ZXIgYXJnNSAKICk7Cgp2b2lkIEhVX0FkZE1ldGhv
ZCAoIAogICAgICAgICAgICAgICAgICAgIEZPX09CSkVDVCAqdGhlQ2xhc3MsIAogICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKm1ldGhvZE5hbWUsCiAgICAgICAgY29uc3QgY2hhciAqaGVs
cCwgCiAgICAgICAgICAgICAgICAgICAgRk9fTUVTU0FHRV9JRCBtZXNzYWdlSUQsIAogICAgICAg
ICAgICAgICAgICAgIHZvaWQgKmFyZ0Jhc2UsCiAgICAgICAgQ2FzdGVyIGFyZzEsIAogICAgICAg
ICAgICAgICAgICAgIENhc3RlciBhcmcyLCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJn
MywgCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzQsCiAgICAgICAgQ2FzdGVyIGFyZzUs
IAogICAgICAgICAgICAgICAgICAgIENhc3RlciBhcmc2IAogKTsKCnZvaWQgSFVfQWRkTWV0aG9k
ICggCiAgICAgICAgICAgICAgICAgICAgRk9fT0JKRUNUICp0aGVDbGFzcywgCiAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqbWV0aG9kTmFtZSwKICAgICAgICBjb25zdCBjaGFyICpoZWxw
LCAKICAgICAgICAgICAgICAgICAgICBGT19NRVNTQUdFX0lEIG1lc3NhZ2VJRCwgCiAgICAgICAg
ICAgICAgICAgICAgdm9pZCAqYXJnQmFzZSwKICAgICAgICBDYXN0ZXIgYXJnMSwgCiAgICAgICAg
ICAgICAgICAgICAgQ2FzdGVyIGFyZzIsIAogICAgICAgICAgICAgICAgICAgIENhc3RlciBhcmcz
LCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJnNCwKICAgICAgICBDYXN0ZXIgYXJnNSwg
CiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzYsIAogICAgICAgICAgICAgICAgICAgIENh
c3RlciBhcmc3IAogKTsKCnZvaWQgSFVfQWRkTWV0aG9kICggCiAgICAgICAgICAgICAgICAgICAg
Rk9fT0JKRUNUICp0aGVDbGFzcywgCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0
aG9kTmFtZSwKICAgICAgICBjb25zdCBjaGFyICpoZWxwLCAKICAgICAgICAgICAgICAgICAgICBG
T19NRVNTQUdFX0lEIG1lc3NhZ2VJRCwgCiAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnQmFz
ZSwKICAgICAgICBDYXN0ZXIgYXJnMSwgCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzIs
IAogICAgICAgICAgICAgICAgICAgIENhc3RlciBhcmczLCAKICAgICAgICAgICAgICAgICAgICBD
YXN0ZXIgYXJnNCwKICAgICAgICBDYXN0ZXIgYXJnNSwgCiAgICAgICAgICAgICAgICAgICAgQ2Fz
dGVyIGFyZzYsIAogICAgICAgICAgICAgICAgICAgIENhc3RlciBhcmc3LCAKICAgICAgICAgICAg
ICAgICAgICBDYXN0ZXIgYXJnOCAKICk7Cgp2b2lkIEhVX0FkZE1ldGhvZCAoIAogICAgICAgICAg
ICAgICAgICAgIEZPX09CSkVDVCAqdGhlQ2xhc3MsIAogICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKm1ldGhvZE5hbWUsCiAgICAgICAgY29uc3QgY2hhciAqaGVscCwgCiAgICAgICAgICAg
ICAgICAgICAgRk9fTUVTU0FHRV9JRCBtZXNzYWdlSUQsIAogICAgICAgICAgICAgICAgICAgIHZv
aWQgKmFyZ0Jhc2UsCiAgICAgICAgQ2FzdGVyIGFyZzEsIAogICAgICAgICAgICAgICAgICAgIENh
c3RlciBhcmcyLCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJnMywgCiAgICAgICAgICAg
ICAgICAgICAgQ2FzdGVyIGFyZzQsCiAgICAgICAgQ2FzdGVyIGFyZzUsIAogICAgICAgICAgICAg
ICAgICAgIENhc3RlciBhcmc2LCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJnNywgCiAg
ICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzgsCiAgICAgICAgQ2FzdGVyIGFyZzkgCiApOwoK
dm9pZCBIVV9BZGRNZXRob2QgKCAKICAgICAgICAgICAgICAgICAgICBGT19PQkpFQ1QgKnRoZUNs
YXNzLCAKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZXRob2ROYW1lLAogICAgICAg
IGNvbnN0IGNoYXIgKmhlbHAsIAogICAgICAgICAgICAgICAgICAgIEZPX01FU1NBR0VfSUQgbWVz
c2FnZUlELCAKICAgICAgICAgICAgICAgICAgICB2b2lkICphcmdCYXNlLAogICAgICAgIENhc3Rl
ciBhcmcxLCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJnMiwgCiAgICAgICAgICAgICAg
ICAgICAgQ2FzdGVyIGFyZzMsIAogICAgICAgICAgICAgICAgICAgIENhc3RlciBhcmc0LAogICAg
ICAgIENhc3RlciBhcmc1LCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJnNiwgCiAgICAg
ICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzcsIAogICAgICAgICAgICAgICAgICAgIENhc3RlciBh
cmc4LAogICAgICAgIENhc3RlciBhcmc5LCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJn
MTAgCiApOwoKdm9pZCBIVV9BZGRNZXRob2QgKCAKICAgICAgICAgICAgICAgICAgICBGT19PQkpF
Q1QgKnRoZUNsYXNzLCAKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZXRob2ROYW1l
LAogICAgICAgIGNvbnN0IGNoYXIgKmhlbHAsIAogICAgICAgICAgICAgICAgICAgIEZPX01FU1NB
R0VfSUQgbWVzc2FnZUlELCAKICAgICAgICAgICAgICAgICAgICB2b2lkICphcmdCYXNlLAogICAg
ICAgIENhc3RlciBhcmcxLCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJnMiwgCiAgICAg
ICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzMsIAogICAgICAgICAgICAgICAgICAgIENhc3RlciBh
cmc0LAogICAgICAgIENhc3RlciBhcmc1LCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJn
NiwgCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzcsIAogICAgICAgICAgICAgICAgICAg
IENhc3RlciBhcmc4LAogICAgICAgIENhc3RlciBhcmc5LCAKICAgICAgICAgICAgICAgICAgICBD
YXN0ZXIgYXJnMTAsCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzExIAogKTsKCnZvaWQg
SFVfQWRkTWV0aG9kICggCiAgICAgICAgICAgICAgICAgICAgRk9fT0JKRUNUICp0aGVDbGFzcywg
CiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0aG9kTmFtZSwKICAgICAgICBjb25z
dCBjaGFyICpoZWxwLCAKICAgICAgICAgICAgICAgICAgICBGT19NRVNTQUdFX0lEIG1lc3NhZ2VJ
RCwgCiAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnQmFzZSwKICAgICAgICBDYXN0ZXIgYXJn
MSwgCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzIsIAogICAgICAgICAgICAgICAgICAg
IENhc3RlciBhcmczLCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJnNCwKICAgICAgICBD
YXN0ZXIgYXJnNSwgCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzYsIAogICAgICAgICAg
ICAgICAgICAgIENhc3RlciBhcmc3LCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJnOCwK
ICAgICAgICBDYXN0ZXIgYXJnOSwgCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzEwLAog
ICAgICAgICAgICAgICAgICAgIENhc3RlciBhcmcxMSwKICAgICAgICAgICAgICAgICAgICBDYXN0
ZXIgYXJnMTIgCiApOwoKdm9pZCBIVV9BZGRNZXRob2QgKCAKICAgICAgICAgICAgICAgICAgICBG
T19PQkpFQ1QgKnRoZUNsYXNzLCAKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZXRo
b2ROYW1lLAogICAgICAgIGNvbnN0IGNoYXIgKmhlbHAsIAogICAgICAgICAgICAgICAgICAgIEZP
X01FU1NBR0VfSUQgbWVzc2FnZUlELCAKICAgICAgICAgICAgICAgICAgICB2b2lkICphcmdCYXNl
LAogICAgICAgIENhc3RlciBhcmcxLCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJnMiwg
CiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzMsIAogICAgICAgICAgICAgICAgICAgIENh
c3RlciBhcmc0LAogICAgICAgIENhc3RlciBhcmc1LCAKICAgICAgICAgICAgICAgICAgICBDYXN0
ZXIgYXJnNiwgCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzcsIAogICAgICAgICAgICAg
ICAgICAgIENhc3RlciBhcmc4LAogICAgICAgIENhc3RlciBhcmc5LCAKICAgICAgICAgICAgICAg
ICAgICBDYXN0ZXIgYXJnMTAsCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzExLAogICAg
ICAgICAgICAgICAgICAgIENhc3RlciBhcmcxMiwKICAgICAgICBDYXN0ZXIgYXJnMTMgCiApOwoK
dm9pZCBIVV9BZGRNZXRob2QgKCAKICAgICAgICAgICAgICAgICAgICBGT19PQkpFQ1QgKnRoZUNs
YXNzLCAKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZXRob2ROYW1lLAogICAgICAg
IGNvbnN0IGNoYXIgKmhlbHAsIAogICAgICAgICAgICAgICAgICAgIEZPX01FU1NBR0VfSUQgbWVz
c2FnZUlELCAKICAgICAgICAgICAgICAgICAgICB2b2lkICphcmdCYXNlLAogICAgICAgIENhc3Rl
ciBhcmcxLCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJnMiwgCiAgICAgICAgICAgICAg
ICAgICAgQ2FzdGVyIGFyZzMsIAogICAgICAgICAgICAgICAgICAgIENhc3RlciBhcmc0LAogICAg
ICAgIENhc3RlciBhcmc1LCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJnNiwgCiAgICAg
ICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzcsIAogICAgICAgICAgICAgICAgICAgIENhc3RlciBh
cmc4LAogICAgICAgIENhc3RlciBhcmc5LCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJn
MTAsCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzExLAogICAgICAgICAgICAgICAgICAg
IENhc3RlciBhcmcxMiwKICAgICAgICBDYXN0ZXIgYXJnMTMsCiAgICAgICAgICAgICAgICAgICAg
Q2FzdGVyIGFyZzE0IAogKTsKCnZvaWQgSFVfQWRkTWV0aG9kICggCiAgICAgICAgICAgICAgICAg
ICAgRk9fT0JKRUNUICp0aGVDbGFzcywgCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
bWV0aG9kTmFtZSwKICAgICAgICBjb25zdCBjaGFyICpoZWxwLCAKICAgICAgICAgICAgICAgICAg
ICBGT19NRVNTQUdFX0lEIG1lc3NhZ2VJRCwgCiAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJn
QmFzZSwKICAgICAgICBDYXN0ZXIgYXJnMSwgCiAgICAgICAgQ2FzdGVyIGFyZzIsIAogICAgICAg
IENhc3RlciBhcmczLCAKICAgICAgICBDYXN0ZXIgYXJnNCwgCiAgICAgICAgQ2FzdGVyIGFyZzUs
IAogICAgICAgIENhc3RlciBhcmc2LCAKICAgICAgICBDYXN0ZXIgYXJnNywgCiAgICAgICAgQ2Fz
dGVyIGFyZzgsIAogICAgICAgIENhc3RlciBhcmc5LCAKICAgICAgICBDYXN0ZXIgYXJnMTAsCiAg
ICAgICAgQ2FzdGVyIGFyZzExLCAKICAgICAgICBDYXN0ZXIgYXJnMTIsIAogICAgICAgIENhc3Rl
ciBhcmcxMywgCiAgICAgICAgQ2FzdGVyIGFyZzE0LCAKICAgICAgICBDYXN0ZXIgYXJnMTUKICk7
Cgp2b2lkIEhVX0FkZE1ldGhvZCAoIAogICAgICAgICAgICAgICAgICAgIEZPX09CSkVDVCAqdGhl
Q2xhc3MsIAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1ldGhvZE5hbWUsCiAgICAg
ICAgY29uc3QgY2hhciAqaGVscCwgCiAgICAgICAgICAgICAgICAgICAgRk9fTUVTU0FHRV9JRCBt
ZXNzYWdlSUQsIAogICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZ0Jhc2UsCiAgICAgICAgQ2Fz
dGVyIGFyZzEsIAogICAgICAgIENhc3RlciBhcmcyLCAKICAgICAgICBDYXN0ZXIgYXJnMywgCiAg
ICAgICAgQ2FzdGVyIGFyZzQsIAogICAgICAgIENhc3RlciBhcmc1LCAKICAgICAgICBDYXN0ZXIg
YXJnNiwgCiAgICAgICAgQ2FzdGVyIGFyZzcsIAogICAgICAgIENhc3RlciBhcmc4LCAKICAgICAg
ICBDYXN0ZXIgYXJnOSwgCiAgICAgICAgQ2FzdGVyIGFyZzEwLAogICAgICAgIENhc3RlciBhcmcx
MSwgCiAgICAgICAgQ2FzdGVyIGFyZzEyLCAKICAgICAgICBDYXN0ZXIgYXJnMTMsIAogICAgICAg
IENhc3RlciBhcmcxNCwgCiAgICAgICAgQ2FzdGVyIGFyZzE1LAogICAgICAgIENhc3RlciBhcmcx
NgogKTsKCnZvaWQgSFVfQWRkTWV0aG9kICggCiAgICAgICAgICAgICAgICAgICAgRk9fT0JKRUNU
ICp0aGVDbGFzcywgCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0aG9kTmFtZSwK
ICAgICAgICBjb25zdCBjaGFyICpoZWxwLCAKICAgICAgICAgICAgICAgICAgICBGT19NRVNTQUdF
X0lEIG1lc3NhZ2VJRCwgCiAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnQmFzZSwKICAgICAg
ICBDYXN0ZXIgYXJnMSwgCiAgICAgICAgQ2FzdGVyIGFyZzIsIAogICAgICAgIENhc3RlciBhcmcz
LCAKICAgICAgICBDYXN0ZXIgYXJnNCwgCiAgICAgICAgQ2FzdGVyIGFyZzUsIAogICAgICAgIENh
c3RlciBhcmc2LCAKICAgICAgICBDYXN0ZXIgYXJnNywgCiAgICAgICAgQ2FzdGVyIGFyZzgsIAog
ICAgICAgIENhc3RlciBhcmc5LCAKICAgICAgICBDYXN0ZXIgYXJnMTAsCiAgICAgICAgQ2FzdGVy
IGFyZzExLCAKICAgICAgICBDYXN0ZXIgYXJnMTIsIAogICAgICAgIENhc3RlciBhcmcxMywgCiAg
ICAgICAgQ2FzdGVyIGFyZzE0LCAKICAgICAgICBDYXN0ZXIgYXJnMTUsCiAgICAgICAgQ2FzdGVy
IGFyZzE2LCAKICAgICAgICBDYXN0ZXIgYXJnMTcKICk7Cgp2b2lkIEhVX0FkZE1ldGhvZCAoIAog
ICAgICAgICAgICAgICAgICAgIEZPX09CSkVDVCAqdGhlQ2xhc3MsIAogICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKm1ldGhvZE5hbWUsCiAgICAgICAgY29uc3QgY2hhciAqaGVscCwgCiAg
ICAgICAgICAgICAgICAgICAgRk9fTUVTU0FHRV9JRCBtZXNzYWdlSUQsIAogICAgICAgICAgICAg
ICAgICAgIHZvaWQgKmFyZ0Jhc2UsCiAgICAgICAgQ2FzdGVyIGFyZzEsIAogICAgICAgIENhc3Rl
ciBhcmcyLCAKICAgICAgICBDYXN0ZXIgYXJnMywgCiAgICAgICAgQ2FzdGVyIGFyZzQsIAogICAg
ICAgIENhc3RlciBhcmc1LCAKICAgICAgICBDYXN0ZXIgYXJnNiwgCiAgICAgICAgQ2FzdGVyIGFy
ZzcsIAogICAgICAgIENhc3RlciBhcmc4LCAKICAgICAgICBDYXN0ZXIgYXJnOSwgCiAgICAgICAg
Q2FzdGVyIGFyZzEwLAogICAgICAgIENhc3RlciBhcmcxMSwgCiAgICAgICAgQ2FzdGVyIGFyZzEy
LCAKICAgICAgICBDYXN0ZXIgYXJnMTMsIAogICAgICAgIENhc3RlciBhcmcxNCwgCiAgICAgICAg
Q2FzdGVyIGFyZzE1LAogICAgICAgIENhc3RlciBhcmcxNiwgCiAgICAgICAgQ2FzdGVyIGFyZzE3
LCAKICAgICAgICBDYXN0ZXIgYXJnMTgKICk7Cgp2b2lkIEhVX0FkZE1ldGhvZCAoIAogICAgICAg
ICAgICAgICAgICAgIEZPX09CSkVDVCAqdGhlQ2xhc3MsIAogICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgKm1ldGhvZE5hbWUsCiAgICAgICAgY29uc3QgY2hhciAqaGVscCwgCiAgICAgICAg
ICAgICAgICAgICAgRk9fTUVTU0FHRV9JRCBtZXNzYWdlSUQsIAogICAgICAgICAgICAgICAgICAg
IHZvaWQgKmFyZ0Jhc2UsCiAgICAgICAgQ2FzdGVyIGFyZzEsIAogICAgICAgIENhc3RlciBhcmcy
LCAKICAgICAgICBDYXN0ZXIgYXJnMywgCiAgICAgICAgQ2FzdGVyIGFyZzQsIAogICAgICAgIENh
c3RlciBhcmc1LCAKICAgICAgICBDYXN0ZXIgYXJnNiwgCiAgICAgICAgQ2FzdGVyIGFyZzcsIAog
ICAgICAgIENhc3RlciBhcmc4LCAKICAgICAgICBDYXN0ZXIgYXJnOSwgCiAgICAgICAgQ2FzdGVy
IGFyZzEwLAogICAgICAgIENhc3RlciBhcmcxMSwgCiAgICAgICAgQ2FzdGVyIGFyZzEyLCAKICAg
ICAgICBDYXN0ZXIgYXJnMTMsIAogICAgICAgIENhc3RlciBhcmcxNCwgCiAgICAgICAgQ2FzdGVy
IGFyZzE1LAogICAgICAgIENhc3RlciBhcmcxNiwgCiAgICAgICAgQ2FzdGVyIGFyZzE3LCAKICAg
ICAgICBDYXN0ZXIgYXJnMTgsIAogICAgICAgIENhc3RlciBhcmcxOQogKTsKCnZvaWQgSFVfQWRk
TWV0aG9kICggCiAgICAgICAgICAgICAgICAgICAgRk9fT0JKRUNUICp0aGVDbGFzcywgCiAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0aG9kTmFtZSwKICAgICAgICBjb25zdCBjaGFy
ICpoZWxwLCAKICAgICAgICAgICAgICAgICAgICBGT19NRVNTQUdFX0lEIG1lc3NhZ2VJRCwgCiAg
ICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnQmFzZSwKICAgICAgICBDYXN0ZXIgYXJnMSwgCiAg
ICAgICAgQ2FzdGVyIGFyZzIsIAogICAgICAgIENhc3RlciBhcmczLCAKICAgICAgICBDYXN0ZXIg
YXJnNCwgCiAgICAgICAgQ2FzdGVyIGFyZzUsIAogICAgICAgIENhc3RlciBhcmc2LCAKICAgICAg
ICBDYXN0ZXIgYXJnNywgCiAgICAgICAgQ2FzdGVyIGFyZzgsIAogICAgICAgIENhc3RlciBhcmc5
LCAKICAgICAgICBDYXN0ZXIgYXJnMTAsCiAgICAgICAgQ2FzdGVyIGFyZzExLCAKICAgICAgICBD
YXN0ZXIgYXJnMTIsIAogICAgICAgIENhc3RlciBhcmcxMywgCiAgICAgICAgQ2FzdGVyIGFyZzE0
LCAKICAgICAgICBDYXN0ZXIgYXJnMTUsCiAgICAgICAgQ2FzdGVyIGFyZzE2LCAKICAgICAgICBD
YXN0ZXIgYXJnMTcsIAogICAgICAgIENhc3RlciBhcmcxOCwgCiAgICAgICAgQ2FzdGVyIGFyZzE5
LCAKICAgICAgICBDYXN0ZXIgYXJnMjAKICk7Cgp2b2lkIEhVX0FkZE1ldGhvZCAoIAogICAgICAg
ICAgICAgICAgICAgIEZPX09CSkVDVCAqdGhlQ2xhc3MsIAogICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgKm1ldGhvZE5hbWUsCiAgICAgICAgY29uc3QgY2hhciAqaGVscCwgCiAgICAgICAg
ICAgICAgICAgICAgRk9fTUVTU0FHRV9JRCBtZXNzYWdlSUQsIAogICAgICAgICAgICAgICAgICAg
IHZvaWQgKmFyZ0Jhc2UsCiAgICAgICAgQ2FzdGVyIGFyZzEsIAogICAgICAgIENhc3RlciBhcmcy
LCAKICAgICAgICBDYXN0ZXIgYXJnMywgCiAgICAgICAgQ2FzdGVyIGFyZzQsIAogICAgICAgIENh
c3RlciBhcmc1LCAKICAgICAgICBDYXN0ZXIgYXJnNiwgCiAgICAgICAgQ2FzdGVyIGFyZzcsIAog
ICAgICAgIENhc3RlciBhcmc4LCAKICAgICAgICBDYXN0ZXIgYXJnOSwgCiAgICAgICAgQ2FzdGVy
IGFyZzEwLAogICAgICAgIENhc3RlciBhcmcxMSwgCiAgICAgICAgQ2FzdGVyIGFyZzEyLCAKICAg
ICAgICBDYXN0ZXIgYXJnMTMsIAogICAgICAgIENhc3RlciBhcmcxNCwgCiAgICAgICAgQ2FzdGVy
IGFyZzE1LAogICAgICAgIENhc3RlciBhcmcxNiwgCiAgICAgICAgQ2FzdGVyIGFyZzE3LCAKICAg
ICAgICBDYXN0ZXIgYXJnMTgsIAogICAgICAgIENhc3RlciBhcmcxOSwgCiAgICAgICAgQ2FzdGVy
IGFyZzIwLAogICAgICAgIENhc3RlciBhcmcyMQogKTsKCnZvaWQgSFVfQWRkTWV0aG9kICggCiAg
ICAgICAgICAgICAgICAgICAgRk9fT0JKRUNUICp0aGVDbGFzcywgCiAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqbWV0aG9kTmFtZSwKICAgICAgICBjb25zdCBjaGFyICpoZWxwLCAKICAg
ICAgICAgICAgICAgICAgICBGT19NRVNTQUdFX0lEIG1lc3NhZ2VJRCwgCiAgICAgICAgICAgICAg
ICAgICAgdm9pZCAqYXJnQmFzZSwKICAgICAgICBDYXN0ZXIgYXJnMSwgCiAgICAgICAgQ2FzdGVy
IGFyZzIsIAogICAgICAgIENhc3RlciBhcmczLCAKICAgICAgICBDYXN0ZXIgYXJnNCwgCiAgICAg
ICAgQ2FzdGVyIGFyZzUsIAogICAgICAgIENhc3RlciBhcmc2LCAKICAgICAgICBDYXN0ZXIgYXJn
NywgCiAgICAgICAgQ2FzdGVyIGFyZzgsIAogICAgICAgIENhc3RlciBhcmc5LCAKICAgICAgICBD
YXN0ZXIgYXJnMTAsCiAgICAgICAgQ2FzdGVyIGFyZzExLCAKICAgICAgICBDYXN0ZXIgYXJnMTIs
IAogICAgICAgIENhc3RlciBhcmcxMywgCiAgICAgICAgQ2FzdGVyIGFyZzE0LCAKICAgICAgICBD
YXN0ZXIgYXJnMTUsCiAgICAgICAgQ2FzdGVyIGFyZzE2LCAKICAgICAgICBDYXN0ZXIgYXJnMTcs
IAogICAgICAgIENhc3RlciBhcmcxOCwgCiAgICAgICAgQ2FzdGVyIGFyZzE5LCAKICAgICAgICBD
YXN0ZXIgYXJnMjAsCiAgICAgICAgQ2FzdGVyIGFyZzIxLCAKICAgICAgICBDYXN0ZXIgYXJnMjIK
ICk7Cgp2b2lkIEhVX0FkZE1ldGhvZCAoIAogICAgICAgICAgICAgICAgICAgIEZPX09CSkVDVCAq
dGhlQ2xhc3MsIAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1ldGhvZE5hbWUsCiAg
ICAgICAgY29uc3QgY2hhciAqaGVscCwgCiAgICAgICAgICAgICAgICAgICAgRk9fTUVTU0FHRV9J
RCBtZXNzYWdlSUQsIAogICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZ0Jhc2UsCiAgICAgICAg
Q2FzdGVyIGFyZzEsIAogICAgICAgIENhc3RlciBhcmcyLCAKICAgICAgICBDYXN0ZXIgYXJnMywg
CiAgICAgICAgQ2FzdGVyIGFyZzQsIAogICAgICAgIENhc3RlciBhcmc1LCAKICAgICAgICBDYXN0
ZXIgYXJnNiwgCiAgICAgICAgQ2FzdGVyIGFyZzcsIAogICAgICAgIENhc3RlciBhcmc4LCAKICAg
ICAgICBDYXN0ZXIgYXJnOSwgCiAgICAgICAgQ2FzdGVyIGFyZzEwLAogICAgICAgIENhc3RlciBh
cmcxMSwgCiAgICAgICAgQ2FzdGVyIGFyZzEyLCAKICAgICAgICBDYXN0ZXIgYXJnMTMsIAogICAg
ICAgIENhc3RlciBhcmcxNCwgCiAgICAgICAgQ2FzdGVyIGFyZzE1LAogICAgICAgIENhc3RlciBh
cmcxNiwgCiAgICAgICAgQ2FzdGVyIGFyZzE3LCAKICAgICAgICBDYXN0ZXIgYXJnMTgsIAogICAg
ICAgIENhc3RlciBhcmcxOSwgCiAgICAgICAgQ2FzdGVyIGFyZzIwLAogICAgICAgIENhc3RlciBh
cmcyMSwgCiAgICAgICAgQ2FzdGVyIGFyZzIyLCAKICAgICAgICBDYXN0ZXIgYXJnMjMKICk7Cgp2
b2lkIEhVX0FkZE1ldGhvZCAoIAogICAgICAgICAgICAgICAgICAgIEZPX09CSkVDVCAqdGhlQ2xh
c3MsIAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1ldGhvZE5hbWUsCiAgICAgICAg
Y29uc3QgY2hhciAqaGVscCwgCiAgICAgICAgICAgICAgICAgICAgRk9fTUVTU0FHRV9JRCBtZXNz
YWdlSUQsIAogICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZ0Jhc2UsCiAgICAgICAgQ2FzdGVy
IGFyZzEsIAogICAgICAgIENhc3RlciBhcmcyLCAKICAgICAgICBDYXN0ZXIgYXJnMywgCiAgICAg
ICAgQ2FzdGVyIGFyZzQsIAogICAgICAgIENhc3RlciBhcmc1LCAKICAgICAgICBDYXN0ZXIgYXJn
NiwgCiAgICAgICAgQ2FzdGVyIGFyZzcsIAogICAgICAgIENhc3RlciBhcmc4LCAKICAgICAgICBD
YXN0ZXIgYXJnOSwgCiAgICAgICAgQ2FzdGVyIGFyZzEwLAogICAgICAgIENhc3RlciBhcmcxMSwg
CiAgICAgICAgQ2FzdGVyIGFyZzEyLCAKICAgICAgICBDYXN0ZXIgYXJnMTMsIAogICAgICAgIENh
c3RlciBhcmcxNCwgCiAgICAgICAgQ2FzdGVyIGFyZzE1LAogICAgICAgIENhc3RlciBhcmcxNiwg
CiAgICAgICAgQ2FzdGVyIGFyZzE3LCAKICAgICAgICBDYXN0ZXIgYXJnMTgsIAogICAgICAgIENh
c3RlciBhcmcxOSwgCiAgICAgICAgQ2FzdGVyIGFyZzIwLAogICAgICAgIENhc3RlciBhcmcyMSwg
CiAgICAgICAgQ2FzdGVyIGFyZzIyLCAKICAgICAgICBDYXN0ZXIgYXJnMjMsIAogICAgICAgIENh
c3RlciBhcmcyNAogKTsKCnZvaWQgSFVfQWRkTWV0aG9kICggCiAgICAgICAgICAgICAgICAgICAg
Rk9fT0JKRUNUICp0aGVDbGFzcywgCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0
aG9kTmFtZSwKICAgICAgICBjb25zdCBjaGFyICpoZWxwLCAKICAgICAgICAgICAgICAgICAgICBG
T19NRVNTQUdFX0lEIG1lc3NhZ2VJRCwgCiAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnQmFz
ZSwKICAgICAgICBDYXN0ZXIgYXJnMSwgCiAgICAgICAgQ2FzdGVyIGFyZzIsIAogICAgICAgIENh
c3RlciBhcmczLCAKICAgICAgICBDYXN0ZXIgYXJnNCwgCiAgICAgICAgQ2FzdGVyIGFyZzUsIAog
ICAgICAgIENhc3RlciBhcmc2LCAKICAgICAgICBDYXN0ZXIgYXJnNywgCiAgICAgICAgQ2FzdGVy
IGFyZzgsIAogICAgICAgIENhc3RlciBhcmc5LCAKICAgICAgICBDYXN0ZXIgYXJnMTAsCiAgICAg
ICAgQ2FzdGVyIGFyZzExLCAKICAgICAgICBDYXN0ZXIgYXJnMTIsIAogICAgICAgIENhc3RlciBh
cmcxMywgCiAgICAgICAgQ2FzdGVyIGFyZzE0LCAKICAgICAgICBDYXN0ZXIgYXJnMTUsCiAgICAg
ICAgQ2FzdGVyIGFyZzE2LCAKICAgICAgICBDYXN0ZXIgYXJnMTcsIAogICAgICAgIENhc3RlciBh
cmcxOCwgCiAgICAgICAgQ2FzdGVyIGFyZzE5LCAKICAgICAgICBDYXN0ZXIgYXJnMjAsCiAgICAg
ICAgQ2FzdGVyIGFyZzIxLCAKICAgICAgICBDYXN0ZXIgYXJnMjIsIAogICAgICAgIENhc3RlciBh
cmcyMywgCiAgICAgICAgQ2FzdGVyIGFyZzI0LCAKICAgICAgICBDYXN0ZXIgYXJnMjUKICk7Cgp2
b2lkIEhVX0FkZE1ldGhvZCAoIAogICAgICAgICAgICAgICAgICAgIEZPX09CSkVDVCAqdGhlQ2xh
c3MsIAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1ldGhvZE5hbWUsCiAgICAgICAg
Y29uc3QgY2hhciAqaGVscCwgCiAgICAgICAgICAgICAgICAgICAgRk9fTUVTU0FHRV9JRCBtZXNz
YWdlSUQsIAogICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZ0Jhc2UsCiAgICAgICAgQ2FzdGVy
IGFyZzEsIAogICAgICAgIENhc3RlciBhcmcyLCAKICAgICAgICBDYXN0ZXIgYXJnMywgCiAgICAg
ICAgQ2FzdGVyIGFyZzQsIAogICAgICAgIENhc3RlciBhcmc1LCAKICAgICAgICBDYXN0ZXIgYXJn
NiwgCiAgICAgICAgQ2FzdGVyIGFyZzcsIAogICAgICAgIENhc3RlciBhcmc4LCAKICAgICAgICBD
YXN0ZXIgYXJnOSwgCiAgICAgICAgQ2FzdGVyIGFyZzEwLAogICAgICAgIENhc3RlciBhcmcxMSwg
CiAgICAgICAgQ2FzdGVyIGFyZzEyLCAKICAgICAgICBDYXN0ZXIgYXJnMTMsIAogICAgICAgIENh
c3RlciBhcmcxNCwgCiAgICAgICAgQ2FzdGVyIGFyZzE1LAogICAgICAgIENhc3RlciBhcmcxNiwg
CiAgICAgICAgQ2FzdGVyIGFyZzE3LCAKICAgICAgICBDYXN0ZXIgYXJnMTgsIAogICAgICAgIENh
c3RlciBhcmcxOSwgCiAgICAgICAgQ2FzdGVyIGFyZzIwLAogICAgICAgIENhc3RlciBhcmcyMSwg
CiAgICAgICAgQ2FzdGVyIGFyZzIyLCAKICAgICAgICBDYXN0ZXIgYXJnMjMsIAogICAgICAgIENh
c3RlciBhcmcyNCwgCiAgICAgICAgQ2FzdGVyIGFyZzI1LAogICAgICAgIENhc3RlciBhcmcyNgog
KTsKCnZvaWQgSFVfQWRkTWV0aG9kICggCiAgICAgICAgICAgICAgICAgICAgRk9fT0JKRUNUICp0
aGVDbGFzcywgCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0aG9kTmFtZSwKICAg
ICAgICBjb25zdCBjaGFyICpoZWxwLCAKICAgICAgICAgICAgICAgICAgICBGT19NRVNTQUdFX0lE
IG1lc3NhZ2VJRCwgCiAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnQmFzZSwKICAgICAgICBD
YXN0ZXIgYXJnMSwgCiAgICAgICAgQ2FzdGVyIGFyZzIsIAogICAgICAgIENhc3RlciBhcmczLCAK
ICAgICAgICBDYXN0ZXIgYXJnNCwgCiAgICAgICAgQ2FzdGVyIGFyZzUsIAogICAgICAgIENhc3Rl
ciBhcmc2LCAKICAgICAgICBDYXN0ZXIgYXJnNywgCiAgICAgICAgQ2FzdGVyIGFyZzgsIAogICAg
ICAgIENhc3RlciBhcmc5LCAKICAgICAgICBDYXN0ZXIgYXJnMTAsCiAgICAgICAgQ2FzdGVyIGFy
ZzExLCAKICAgICAgICBDYXN0ZXIgYXJnMTIsIAogICAgICAgIENhc3RlciBhcmcxMywgCiAgICAg
ICAgQ2FzdGVyIGFyZzE0LCAKICAgICAgICBDYXN0ZXIgYXJnMTUsCiAgICAgICAgQ2FzdGVyIGFy
ZzE2LCAKICAgICAgICBDYXN0ZXIgYXJnMTcsIAogICAgICAgIENhc3RlciBhcmcxOCwgCiAgICAg
ICAgQ2FzdGVyIGFyZzE5LCAKICAgICAgICBDYXN0ZXIgYXJnMjAsCiAgICAgICAgQ2FzdGVyIGFy
ZzIxLCAKICAgICAgICBDYXN0ZXIgYXJnMjIsIAogICAgICAgIENhc3RlciBhcmcyMywgCiAgICAg
ICAgQ2FzdGVyIGFyZzI0LCAKICAgICAgICBDYXN0ZXIgYXJnMjUsCiAgICAgICAgQ2FzdGVyIGFy
ZzI2LCAKICAgICAgICBDYXN0ZXIgYXJnMjcKICk7Cgp2b2lkIEhVX0FkZE1ldGhvZCAoIAogICAg
ICAgICAgICAgICAgICAgIEZPX09CSkVDVCAqdGhlQ2xhc3MsIAogICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKm1ldGhvZE5hbWUsCiAgICAgICAgY29uc3QgY2hhciAqaGVscCwgCiAgICAg
ICAgICAgICAgICAgICAgRk9fTUVTU0FHRV9JRCBtZXNzYWdlSUQsIAogICAgICAgICAgICAgICAg
ICAgIHZvaWQgKmFyZ0Jhc2UsCiAgICAgICAgQ2FzdGVyIGFyZzEsIAogICAgICAgIENhc3RlciBh
cmcyLCAKICAgICAgICBDYXN0ZXIgYXJnMywgCiAgICAgICAgQ2FzdGVyIGFyZzQsIAogICAgICAg
IENhc3RlciBhcmc1LCAKICAgICAgICBDYXN0ZXIgYXJnNiwgCiAgICAgICAgQ2FzdGVyIGFyZzcs
IAogICAgICAgIENhc3RlciBhcmc4LCAKICAgICAgICBDYXN0ZXIgYXJnOSwgCiAgICAgICAgQ2Fz
dGVyIGFyZzEwLAogICAgICAgIENhc3RlciBhcmcxMSwgCiAgICAgICAgQ2FzdGVyIGFyZzEyLCAK
ICAgICAgICBDYXN0ZXIgYXJnMTMsIAogICAgICAgIENhc3RlciBhcmcxNCwgCiAgICAgICAgQ2Fz
dGVyIGFyZzE1LAogICAgICAgIENhc3RlciBhcmcxNiwgCiAgICAgICAgQ2FzdGVyIGFyZzE3LCAK
ICAgICAgICBDYXN0ZXIgYXJnMTgsIAogICAgICAgIENhc3RlciBhcmcxOSwgCiAgICAgICAgQ2Fz
dGVyIGFyZzIwLAogICAgICAgIENhc3RlciBhcmcyMSwgCiAgICAgICAgQ2FzdGVyIGFyZzIyLCAK
ICAgICAgICBDYXN0ZXIgYXJnMjMsIAogICAgICAgIENhc3RlciBhcmcyNCwgCiAgICAgICAgQ2Fz
dGVyIGFyZzI1LAogICAgICAgIENhc3RlciBhcmcyNiwgCiAgICAgICAgQ2FzdGVyIGFyZzI3LCAK
ICAgICAgICBDYXN0ZXIgYXJnMjgKICk7Cgp2b2lkIEhVX0FkZE1ldGhvZCAoIAogICAgICAgICAg
ICAgICAgICAgIEZPX09CSkVDVCAqdGhlQ2xhc3MsIAogICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKm1ldGhvZE5hbWUsCiAgICAgICAgY29uc3QgY2hhciAqaGVscCwgCiAgICAgICAgICAg
ICAgICAgICAgRk9fTUVTU0FHRV9JRCBtZXNzYWdlSUQsIAogICAgICAgICAgICAgICAgICAgIHZv
aWQgKmFyZ0Jhc2UsCiAgICAgICAgQ2FzdGVyIGFyZzEsIAogICAgICAgIENhc3RlciBhcmcyLCAK
ICAgICAgICBDYXN0ZXIgYXJnMywgCiAgICAgICAgQ2FzdGVyIGFyZzQsIAogICAgICAgIENhc3Rl
ciBhcmc1LCAKICAgICAgICBDYXN0ZXIgYXJnNiwgCiAgICAgICAgQ2FzdGVyIGFyZzcsIAogICAg
ICAgIENhc3RlciBhcmc4LCAKICAgICAgICBDYXN0ZXIgYXJnOSwgCiAgICAgICAgQ2FzdGVyIGFy
ZzEwLAogICAgICAgIENhc3RlciBhcmcxMSwgCiAgICAgICAgQ2FzdGVyIGFyZzEyLCAKICAgICAg
ICBDYXN0ZXIgYXJnMTMsIAogICAgICAgIENhc3RlciBhcmcxNCwgCiAgICAgICAgQ2FzdGVyIGFy
ZzE1LAogICAgICAgIENhc3RlciBhcmcxNiwgCiAgICAgICAgQ2FzdGVyIGFyZzE3LCAKICAgICAg
ICBDYXN0ZXIgYXJnMTgsIAogICAgICAgIENhc3RlciBhcmcxOSwgCiAgICAgICAgQ2FzdGVyIGFy
ZzIwLAogICAgICAgIENhc3RlciBhcmcyMSwgCiAgICAgICAgQ2FzdGVyIGFyZzIyLCAKICAgICAg
ICBDYXN0ZXIgYXJnMjMsIAogICAgICAgIENhc3RlciBhcmcyNCwgCiAgICAgICAgQ2FzdGVyIGFy
ZzI1LAogICAgICAgIENhc3RlciBhcmcyNiwgCiAgICAgICAgQ2FzdGVyIGFyZzI3LCAKICAgICAg
ICBDYXN0ZXIgYXJnMjgsIAogICAgICAgIENhc3RlciBhcmcyOQogKTsKCnZvaWQgSFVfQWRkTWV0
aG9kICggCiAgICAgICAgICAgICAgICAgICAgRk9fT0JKRUNUICp0aGVDbGFzcywgCiAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0aG9kTmFtZSwKICAgICAgICBjb25zdCBjaGFyICpo
ZWxwLCAKICAgICAgICAgICAgICAgICAgICBGT19NRVNTQUdFX0lEIG1lc3NhZ2VJRCwgCiAgICAg
ICAgICAgICAgICAgICAgdm9pZCAqYXJnQmFzZSwKICAgICAgICBDYXN0ZXIgYXJnMSwgCiAgICAg
ICAgQ2FzdGVyIGFyZzIsIAogICAgICAgIENhc3RlciBhcmczLCAKICAgICAgICBDYXN0ZXIgYXJn
NCwgCiAgICAgICAgQ2FzdGVyIGFyZzUsIAogICAgICAgIENhc3RlciBhcmc2LCAKICAgICAgICBD
YXN0ZXIgYXJnNywgCiAgICAgICAgQ2FzdGVyIGFyZzgsIAogICAgICAgIENhc3RlciBhcmc5LCAK
ICAgICAgICBDYXN0ZXIgYXJnMTAsCiAgICAgICAgQ2FzdGVyIGFyZzExLCAKICAgICAgICBDYXN0
ZXIgYXJnMTIsIAogICAgICAgIENhc3RlciBhcmcxMywgCiAgICAgICAgQ2FzdGVyIGFyZzE0LCAK
ICAgICAgICBDYXN0ZXIgYXJnMTUsCiAgICAgICAgQ2FzdGVyIGFyZzE2LCAKICAgICAgICBDYXN0
ZXIgYXJnMTcsIAogICAgICAgIENhc3RlciBhcmcxOCwgCiAgICAgICAgQ2FzdGVyIGFyZzE5LCAK
ICAgICAgICBDYXN0ZXIgYXJnMjAsCiAgICAgICAgQ2FzdGVyIGFyZzIxLCAKICAgICAgICBDYXN0
ZXIgYXJnMjIsIAogICAgICAgIENhc3RlciBhcmcyMywgCiAgICAgICAgQ2FzdGVyIGFyZzI0LCAK
ICAgICAgICBDYXN0ZXIgYXJnMjUsCiAgICAgICAgQ2FzdGVyIGFyZzI2LCAKICAgICAgICBDYXN0
ZXIgYXJnMjcsIAogICAgICAgIENhc3RlciBhcmcyOCwgCiAgICAgICAgQ2FzdGVyIGFyZzI5LCAK
ICAgICAgICBDYXN0ZXIgYXJnMzAKICk7Cgp2b2lkIEhVX0FkZE1ldGhvZCAoIAogICAgICAgICAg
ICAgICAgICAgIEZPX09CSkVDVCAqdGhlQ2xhc3MsIAogICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKm1ldGhvZE5hbWUsCiAgICAgICAgaW50ICgqZnVuYykoIEZPX09CSkVDVCAqLCBPX0xJ
U1QgKiApLCAKICAgICAgICAgICAgICAgICAgICBPX0xJU1QgKm9MaXN0LCAKICAgICAgICAgICAg
ICAgICAgICBpbnQgb0xpc3RTaXplLAogICAgICAgIGNvbnN0IGNoYXIgKipoZWxwIAogKTsKCgog
CgpMaXN0PEZSQU5HRT4gSFVfUGFyc2VGcmFuZ2VzICggCiAgICAgICAgY29uc3QgVHdpbmUgJmZv
byAKICk7CgoKIAoKCiAKCnZvaWQgSFVfQWRkRnVuY3Rpb24gKCAKICAgICAgICBjb25zdCBUd2lu
ZSAmIGZ1bmNOYW1lLCAKICAgICAgICBUd2luZSAoKmZ1bmMpKCBMaXN0PFR3aW5lPiAmLCBIVV9Q
YXJzZXJTdGF0ZSAmICksCiAgICAgICAgY29uc3QgVHdpbmUgJiBoZWxwU3RyaW5nIAogKTsKCnZv
aWQgSFVfQWRkRnVuY3Rpb24gKCAKICAgICAgICBjb25zdCBUd2luZSAmIGZ1bmNOYW1lLCAKICAg
ICAgICBIVV9WYWx1ZSAoKmZ1bmMpKCBMaXN0PEhVX1ZhbHVlPiwgSFVfUGFyc2VyU3RhdGUgJiAp
LAogICAgICAgIGNvbnN0IFR3aW5lICYgaGVscFN0cmluZyAKICk7Cgp2b2lkIEhVX0FkZEZ1bmN0
aW9uT2ZDaGFuU3BlYyAoIAogICAgICAgIGNvbnN0IFR3aW5lICYgZnVuY05hbWUsIAogICAgICAg
IFR3aW5lICgqZnVuYykoIExpc3Q8VHdpbmU+ICYsIEhVX1BhcnNlclN0YXRlICYgKSwKICAgICAg
ICBjb25zdCBUd2luZSAmIGhlbHBTdHJpbmcgCiApOwoKdm9pZCBIVV9BZGRGdW5jdGlvbiAoIAog
ICAgICAgIGNvbnN0IFR3aW5lICYgZnVuY05hbWUsIAogICAgICAgIEhVX1ZhbHVlICgqZnVuYyko
IEhVX1ZhbHVlLCBIVV9QYXJzZXJTdGF0ZSAmICksCiAgICAgICAgY29uc3QgVHdpbmUgJiBoZWxw
U3RyaW5nIAogKTsKCkJPT0xFQU4gSFVfRmluZEZ1bmN0aW9uICgKICAgICAgICAgIGNvbnN0IGNo
YXIqIGFyZwogKTsKCgogCgoKIAoKCiAKCnZvaWQgSFVfQWRkSGVscCAoIAogICAgICAgICAgICAg
ICAgICAgIGludCAoKmZ1bmMpKCBjb25zdCBjaGFyICosIEZJTEUgKiApIAogKTsKCgogCgoKIAoK
Y2hhciAqSFVfQ2hlY2tGb3JTY3JpcHQgKCAKCQkJY29uc3QgY2hhciAqbmFtZSwgCgkJCWludCAm
IGFyZ2MsIAoJCQljaGFyICoqYXJndiAKICk7Cgp2b2lkIEhVX0luaXQgKCAKCSAgICAgaW50IGFy
Z2MsIAoJICAgICBjb25zdCBjaGFyICogY29uc3QgKmFyZ3YgCiApOwoKdm9pZCBIVV9Jbml0ICgg
CgkgICAgIGNvbnN0IGNoYXIgKiBwcm9ncmFtIAogKTsKCgogCgpUd2luZSBIVV9DdXJyZW50SW5w
dXROYW1lICgpOwoKCiAKCnZvaWQgSFVfVW5SZWFkQ2hhciAoIAogICAgICAgICAgICAgICAgICAg
IGNoYXIgYyAKICk7Cgp2b2lkIEhVX1Byb2Nlc3NLZXlFdmVudCAoCiAgICAgICAgICAgIHNob3J0
IGV2ZW50LAogICAgICAgICAgICBzaG9ydCB2YWx1ZQogKTsKClR3aW5lIEhVX0dldEludGVyYWN0
aXZlTGluZSAoCiAgICAgICAgSFVfUGFyc2VyU3RhdGUgJiBnZW5lcmljU3RhdGUKICk7CgoKIAoK
CiAKCmludCBIVV9Qb2xsICgKICAgICAgICB2b2lkCiApOwoKVHdpbmUgSFVfR2V0QUxpbmUgKAog
ICAgICAgIEhVX1BhcnNlclN0YXRlICYgdGhlU3RhdGUKICk7CgpUd2luZSBIVV9NYWluTG9vcCAo
CiAgICAgICAgdm9pZAogKTsKClR3aW5lIEhVX1NvdXJjZUZpbGUgKCAKICAgICAgICBjb25zdCBj
aGFyICAgICAgKmZpbGVOYW1lLAogICAgICAgIEhVX1BhcnNlclN0YXRlICAmIHRoZVN0YXRlCiAp
OwoKCiAKCgogCgoKIAoKCiAKCnZvaWQgSFVfUHJvY2Vzc1hLZXlFdmVudCAoCiAgICAgICAgdm9p
ZCAgICAgICAgKnhldmVudAogKTsKCgogCgoKIAoKdm9pZCBIVV9DbG9zZVBhZ2VyICgpIDsKCkZJ
TEUgKkhVX09wZW5QYWdlciAoKSA7CgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgp2b2lkIEhVX0J1
aWxkU0RDb25uZWN0aW9uICgKICAgICAgICBUd2luZSAgICAgICAgICAgKCpnZXRfbmFtZV9vZl9j
bGFzcykoIHZvaWQgKmNsYXNzUHRyICksCiAgICAgICAgVHdpbmUgICAgICAgICAgICgqZ2V0X25h
bWVfb2Zfb2JqZWN0KSggdm9pZCAqb2JqUHRyICksCiAgICAgICAgaW50ICAgICAgICAgICAgICgq
Y3JlYXRlX29iamVjdCkoIHZvaWQgKmNsYXNzUHRyLCBjb25zdCBjaGFyICpuYW1lICksCiAgICAg
ICAgTGlzdDx2b2lkICo+ICAgICgqZ2V0X29iamVjdHMpKCB2b2lkICpjbGFzc1B0ciwgY29uc3Qg
Y2hhciAqbmFtZSApLAogICAgICAgIGludCAgICAgICAgICAgICAoKmRlc3Ryb3lfb2JqZWN0KSgg
dm9pZCAqb2JqUHRyICksCiAgICAgICAgTGlzdDx2b2lkICo+ICAgICgqZ2V0X2NsYXNzX3BhcmVu
dHMpKCB2b2lkICpjbGFzc1B0ciApLAogICAgICAgIHZvaWQgKiAgICAgICAgICAoKmdldF9jYWxs
YWJsZV9vYmplY3QpKCB2b2lkICpvYmpQdHIsIHZvaWQgKmNsYXNzUHRyICkKICk7Cgp2b2lkIEhV
X0FkZFNETWVzc2FnZSAoCiAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICp0aGVD
bGFzcywKICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgKm5hbWUsCiAgICAgICAg
Y29uc3QgY2hhciAgICAgICAgICAgICAgICAgICpoZWxwLAogICAgICAgIHZvaWQgICAgICAgICAg
ICAgICAgICAgICAgICAqKCpmdW5jKSggdm9pZCAqLCAuLi4gKSwKICAgICAgICBjb25zdCBMaXN0
PHN0cnVjdCBTdHJ1Y3R1cmVEZXNjcmlwdGlvbkVudHJ5PiAgICAmc2QKICk7Cgp2b2lkIEhVX0Fk
ZFNETWVzc2FnZSAoCiAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICp0aGVDbGFz
cywKICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgKm5hbWUsCiAgICAgICAgY29u
c3QgY2hhciAgICAgICAgICAgICAgICAgICpoZWxwLAogICAgICAgIHZvaWQgICAgICAgICAgICAg
ICAgICAgICAgICAqKCpmdW5jKSggdm9pZCAqLCAuLi4gKSwKICAgICAgICBjb25zdCBMaXN0PHN0
cnVjdCBOYW1lZENvbnZlcnRlcj4gICAmc2QKICk7Cgp2b2lkIEhVX0FkZFNETWVzc2FnZSAoCiAg
ICAgICAgdm9pZCAgICAgICAgICAgICp0aGVDbGFzcywKICAgICAgICBjb25zdCBjaGFyICAgICAg
Km5hbWUsCiAgICAgICAgaW50ICAgICAgICAgICAgICgqcGFyc2UpKCB2b2lkICpvYmpQdHIsIE9f
TElTVCAqbGlzdCApLAogICAgICAgIE9fTElTVCAgICAgICAgICAqbGlzdCwKICAgICAgICBpbnQg
ICAgICAgICAgICAgbGlzdFNpemUsCiAgICAgICAgY29uc3QgY2hhciAgICAgICoqaGVscAogKTsK
CgogCgoKIAoKdm9pZCBIVV9BdHRhY2hUb1RleHRXaWRnZXQgKAogICAgICAgIHZvaWQgKnZfYXBw
X2NvbnRleHQsCiAgICAgICAgdm9pZCAqdl93aWRnZXQKICk7CgoKIAoKCiAKCgogCgoKIAoKdm9p
ZCBIVV9QdXNoU2NvcGUgKAoJCSAgdm9pZAogKTsKCnZvaWQgSFVfUG9wU2NvcGUgKAoJCSB2b2lk
CiApOwoKdm9pZCBIVV9BZGRWYXJpYWJsZSAoIAogICAgICAgICAgICAgICAgICAgIGNvbnN0IFR3
aW5lICYgbmFtZSwgCiAgICAgICAgICAgICAgICAgICAgZG91YmxlICYgaVZhbCAKICk7Cgp2b2lk
IEhVX0FkZFZhcmlhYmxlICggCiAgICAgICAgICAgICAgICAgICAgY29uc3QgVHdpbmUgJiBuYW1l
LCAKICAgICAgICAgICAgICAgICAgICBmbG9hdCAmIGlWYWwgCiApOwoKdm9pZCBIVV9BZGRWYXJp
YWJsZSAoIAogICAgICAgICAgICAgICAgICAgIGNvbnN0IFR3aW5lICYgbmFtZSwgCiAgICAgICAg
ICAgICAgICAgICAgaW50ICYgaVZhbCAKICk7Cgp2b2lkIEhVX0FkZFZhcmlhYmxlICggCiAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVHdpbmUgJiBuYW1lLCAKICAgICAgICAgICAgICAgICAgICBj
aGFyICogY29uc3QgY1ZhbCAKICk7Cgp2b2lkIEhVX0FkZFZhcmlhYmxlICggCiAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVHdpbmUgJiBuYW1lLCAKICAgICAgICAgICAgICAgICAgICBUd2luZSAm
IGNWYWwgCiApOwoKdm9pZCBIVV9TZXRWYXJpYWJsZSAoIAoJCSAgICBjb25zdCBUd2luZSAmIG5h
bWUsIAoJCSAgICBjb25zdCBUd2luZSAmIHZhbHVlIAogKTsKCnZvaWQgSFVfU2V0VmFyaWFibGUg
KAoJCSAgICBjb25zdCBjaGFyICAgICAgKm5hbWUsCgkJICAgIGNvbnN0IGNoYXIgICAgICAqdmFs
dWUsCgkJICAgIGNvbnN0IExpc3Q8aW50PiAmYXJncwogKTsKCnZvaWQgSFVfVW5zZXRHbG9iYWxW
YXJpYWJsZSAoCgkJCSAgICBUd2luZSBuYW1lCiApOwoKdm9pZCBIVV9VbnNldFZhcmlhYmxlICgg
CgkJICAgICAgVHdpbmUgbmFtZSAKICk7Cgpjb25zdCBjaGFyICpIVV9GaW5kVmFyaWFibGUgKCAK
CQkJICAgIGNvbnN0IFR3aW5lICYgbmFtZSAKICk7CgoKCgoKIyAyNDQgIi9zb2Z0d2FyZS90aGFs
aWEvaC9odS5oIiAyCgojIDEgIi9zb2Z0d2FyZS90aGFsaWEvaC9odS5lIiAxCiAKCgoKZXh0ZXJu
IGludCAgICAgICAgICBIVV9Eb250RXhwYW5kU2VxdWVuY2VzOwoKIAoKCgoKCmNvbnN0IGludCBI
VV9Ob01lc3NhZ2VQYXNzZWQgPSAtMTIzNDU2NzsKCmV4dGVybiBpbnQgSFVfRXJyb3JDb3VudCwg
SFVfV2FybmluZ0NvdW50OwoKZXh0ZXJuIGNoYXIgSFVfUHJlY2lzaW9uU3RyaW5nWzI1Nl07Cgpl
eHRlcm4gdm9pZCAoICpIVV9PdXRwdXRGdW5jdGlvbiApKCBjb25zdCBjaGFyICpkYXRhLCBpbnQg
c2l6ZSApOwpleHRlcm4gdm9pZCAoICpIVV9FcnJvckZ1bmN0aW9uICkoIGNvbnN0IGNoYXIgKmRh
dGEsIGludCBzaXplICk7CmV4dGVybiBjaGFyICggKkhVX0lucHV0RnVuY3Rpb24gKSggdm9pZCAp
OwoKZXh0ZXJuIEhVX1BhcnNlclN0YXRlIEhVX0RlZmF1bHRTdGF0ZTsKCmV4dGVybiBpbnQgKCAq
SFVfSXNFdmVudEZhc3QgKSggdm9pZCAqZGlzcGxheSwgdm9pZCAqZXZlbnQsIHZvaWQgKndpbmRv
dyApOwoKZXh0ZXJuIEhVX0F1ZGl0U3RyZWFtIEhVX0F1ZGl0LCBIVV9BdWRpdDI7CgpleHRlcm4g
dm9pZCAoKkhVX1N0aWxsRXhlY3V0aW5nKSgpOwoKZXh0ZXJuIHZvaWQgKkhVX2RlZmF1bHRNaW5W
YWx1ZVRhZywgKkhVX2RlZmF1bHRNYXhWYWx1ZVRhZzsKIyAyNDUgIi9zb2Z0d2FyZS90aGFsaWEv
aC9odS5oIiAyCgoKIApleHRlcm4gVHdpbmUgSFVfU291cmNlRmlsZSggY29uc3QgY2hhciAqLCBI
VV9QYXJzZXJTdGF0ZSAmID0gSFVfRGVmYXVsdFN0YXRlICk7CmV4dGVybiBMaXN0PEhVX0V4cHJl
c3Npb24+IEhVX0V4cGFuZCggY29uc3QgVHdpbmUgJiwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSFVfUGFyc2VyU3RhdGUgJiA9IEhVX0RlZmF1bHRTdGF0ZSApOwpleHRlcm4gTGlz
dDxIVV9FeHByZXNzaW9uPiBIVV9FeHBhbmRNYXRoKCBjb25zdCBUd2luZSAmLCAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBIVV9QYXJzZXJTdGF0ZSAmID0gSFVfRGVmYXVsdFN0YXRl
ICk7CmV4dGVybiBMaXN0PEhVX0V4cHJlc3Npb24+IEhVX0V4cGFuZFZhbHVlKCBjb25zdCBUd2lu
ZSAmLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVV9QYXJzZXJTdGF0ZSAmID0g
SFVfRGVmYXVsdFN0YXRlICk7CmV4dGVybiBMaXN0PFR3aW5lPiBIVV9FdmFsdWF0ZSggTGlzdDxI
VV9FeHByZXNzaW9uPiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFVfUGFyc2Vy
U3RhdGUgJiA9IEhVX0RlZmF1bHRTdGF0ZSApOwpleHRlcm4gdm9pZCBIVV9FeGVjdXRlKCBMaXN0
PEhVX0V4cHJlc3Npb24+LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVV9QYXJz
ZXJTdGF0ZSAmID0gSFVfRGVmYXVsdFN0YXRlICk7CmV4dGVybiB2b2lkIEhVX1JlQXR0YWNoVG9E
cmF3aW5nQXJlYVdpZGdldCggdm9pZCogdl9hcHBfY29udGV4dCwKCQkJCQkgICAgdm9pZCogdl93
aWRnZXQsCgkJCQkJICAgIGJvb2wgaW5zdGFsbEZvY3VzSGFuZGxpbmcgPSBmYWxzZQoJCQkJCSAg
ICApOwoKZXh0ZXJuIHZvaWQgSFVfQXR0YWNoVG9EcmF3aW5nQXJlYVdpZGdldCggdm9pZCogdl9h
cHBfY29udGV4dCwKCQkJCQkgIHZvaWQqIHZfd2lkZ2V0LAoJCQkJCSAgYm9vbCBpbnN0YWxsRm9j
dXNIYW5kbGluZyA9IGZhbHNlCgkJCQkJICApOwoKIyAyNSAibnJoeS9OUkhZX0FjY2Vzcy5jIiAy
CgoKIyAxICJoL05SSFkuaCIgMQoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoMCiAKCgoKIyAxICJo
L25yaHlwcml2YXRlLmgiIDEKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLTIvdmVjdG9yIiAxIDMK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLTIvc3Rs
X2FsZ29iYXNlLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIyAx
ICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX2NvbmZpZy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCgoKCiMgMTAzICIvdXNy
L2luY2x1ZGUvZysrLTIvc3RsX2NvbmZpZy5oIiAzCgoKCgoKCgoKCgoKCgoKICAgICAKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgojIDE2MCAiL3Vzci9pbmNsdWRlL2crKy0yL3N0bF9jb25maWcuaCIg
MwoKCiMgMTc0ICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX2NvbmZpZy5oIiAzCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKIAogCiMgMjEzICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX2NvbmZp
Zy5oIiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIyAzNiAiL3Vz
ci9pbmNsdWRlL2crKy0yL3N0bF9hbGdvYmFzZS5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUv
ZysrLTIvc3RsX3JlbG9wcy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUJiB4
LCBjb25zdCBUJiB5KSB7CiAgcmV0dXJuICEoeCA9PSB5KTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+
CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBUJiB4LCBjb25zdCBUJiB5KSB7CiAgcmV0dXJu
IHkgPCB4Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25z
dCBUJiB4LCBjb25zdCBUJiB5KSB7CiAgcmV0dXJuICEoeSA8IHgpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgVD4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBUJiB4LCBjb25zdCBUJiB5KSB7CiAg
cmV0dXJuICEoeCA8IHkpOwp9CgogCgoKCiAKIAogCiMgMzkgIi91c3IvaW5jbHVkZS9nKystMi9z
dGxfYWxnb2Jhc2UuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0yL3N0bF9wYWlyLmgi
IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCnRlbXBsYXRlIDxjbGFz
cyBUMSwgY2xhc3MgVDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIFQxIGZpcnN0X3R5cGU7CiAg
dHlwZWRlZiBUMiBzZWNvbmRfdHlwZTsKCiAgVDEgZmlyc3Q7CiAgVDIgc2Vjb25kOwogIHBhaXIo
KSA6IGZpcnN0KFQxKCkpLCBzZWNvbmQoVDIoKSkge30KICBwYWlyKGNvbnN0IFQxJiBhLCBjb25z
dCBUMiYgYikgOiBmaXJzdChhKSwgc2Vjb25kKGIpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgVTEs
IGNsYXNzIFUyPgogIHBhaXIoY29uc3QgcGFpcjxVMSwgVTI+JiBwKSA6IGZpcnN0KHAuZmlyc3Qp
LCBzZWNvbmQocC5zZWNvbmQpIHt9Cgp9OwoKdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4K
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYWlyPFQxLCBUMj4mIHgsIGNvbnN0IHBhaXI8
VDEsIFQyPiYgeSkgeyAKICByZXR1cm4geC5maXJzdCA9PSB5LmZpcnN0ICYmIHguc2Vjb25kID09
IHkuc2Vjb25kOyAKfQoKdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KaW5saW5lIGJvb2wg
b3BlcmF0b3I8KGNvbnN0IHBhaXI8VDEsIFQyPiYgeCwgY29uc3QgcGFpcjxUMSwgVDI+JiB5KSB7
IAogIHJldHVybiB4LmZpcnN0IDwgeS5maXJzdCB8fCAoISh5LmZpcnN0IDwgeC5maXJzdCkgJiYg
eC5zZWNvbmQgPCB5LnNlY29uZCk7IAp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPgpp
bmxpbmUgcGFpcjxUMSwgVDI+IG1ha2VfcGFpcihjb25zdCBUMSYgeCwgY29uc3QgVDImIHkpIHsK
ICByZXR1cm4gcGFpcjxUMSwgVDI+KHgsIHkpOwp9CgogCgoKCiAKIAogCiMgNDIgIi91c3IvaW5j
bHVkZS9nKystMi9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0y
L3R5cGVfdHJhaXRzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0IF9fdHJ1ZV90eXBlIHsKfTsKCnN0cnVjdCBfX2ZhbHNl
X3R5cGUgewp9OwoKdGVtcGxhdGUgPGNsYXNzIHR5cGU+CnN0cnVjdCBfX3R5cGVfdHJhaXRzIHsg
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgIHRoaXNfZHVtbXlfbWVtYmVyX211c3RfYmVfZmly
c3Q7CiAgICAgICAgICAgICAgICAgICAgCgoKCgoKICAgIAoKCgoKCgoKCiAKCiAgIHR5cGVkZWYg
X19mYWxzZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX19mYWxzZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX19mYWxzZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5
cGVkZWYgX19mYWxzZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg
X19mYWxzZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgogCiAKIAoKdGVtcGxhdGU8PiAgc3Ry
dWN0IF9fdHlwZV90cmFpdHM8Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190
cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz
X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf
dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh
c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5
cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaWduZWQgY2hhcj4gewog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3Qg
X190eXBlX3RyYWl0czx1bnNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAg
ICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg
IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
ICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19Q
T0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBf
X3R5cGVfdHJhaXRzPHVuc2lnbmVkIHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAg
ICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg
IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
ICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19Q
T0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGludD4gewogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190
eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf
dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh
c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo
YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90
eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZz4gewogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBl
X3RyYWl0czx1bnNpZ25lZCBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf
dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190
cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz
X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlw
ZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGZsb2F0PiB7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVf
dHJhaXRzPGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rl
ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxf
Y29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs
X2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0
ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGRvdWJsZT4gewogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBUPgpzdHJ1Y3Qg
X190eXBlX3RyYWl0czxUKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs
X2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07
CgojIDIyNiAiL3Vzci9pbmNsdWRlL2crKy0yL3R5cGVfdHJhaXRzLmgiIDMKCgoKCgogCiAKIAoj
IDQ1ICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCgoKIyAxICIvdXNy
L2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9saW1p
dHMuaCIgMSAzCiAKCgogCgojIDExNCAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGlu
dXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvbGltaXRzLmgiIDMKCgoKCgoKCiMgNDkgIi91c3IvaW5j
bHVkZS9nKystMi9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2Fs
cGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoK
CiAKCgoKCgoKCiAKCiAKCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIv
YWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoK
CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL3Vzci9saWIvZ2Nj
LWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMK
CgogCgoKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4
L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKCiMgMjY5ICIv
dXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9z
dGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIv
YWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgog
CgoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDUxICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX2FsZ29i
YXNlLmgiIDIgMwoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2Nz
LTIuOTEuNjYvaW5jbHVkZS9uZXcuaCIgMSAzCiAKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9h
bHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvbmV3IiAxIDMKIAogCgoKCgoj
cHJhZ21hIGludGVyZmFjZSAibmV3IgojIDEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0
LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNDIgIi91c3IvbGli
L2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5o
IiAzCgojIDggIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42
Ni9pbmNsdWRlL25ldyIgMiAzCgojIDEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxp
bnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL2V4Y2VwdGlvbiIgMSAzCiAKIAoKCgoKI3ByYWdtYSBp
bnRlcmZhY2UgImV4Y2VwdGlvbiIKCmV4dGVybiAiQysrIiB7CgoKCgoKY2xhc3MgZXhjZXB0aW9u
IHsKcHVibGljOgogIGV4Y2VwdGlvbiAoKSB7IH0KICB2aXJ0dWFsIH5leGNlcHRpb24gKCkgeyB9
CiAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0ICgpIGNvbnN0Owp9OwoKY2xhc3MgYmFkX2V4Y2Vw
dGlvbiA6IHB1YmxpYyBleGNlcHRpb24gewpwdWJsaWM6CiAgYmFkX2V4Y2VwdGlvbiAoKSB7IH0K
ICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uICgpIHsgfQp9OwoKdHlwZWRlZiB2b2lkICgqdGVybWlu
YXRlX2hhbmRsZXIpICgpOwp0eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoK
dGVybWluYXRlX2hhbmRsZXIgc2V0X3Rlcm1pbmF0ZSAodGVybWluYXRlX2hhbmRsZXIpOwp2b2lk
IHRlcm1pbmF0ZSAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CnVuZXhwZWN0ZWRf
aGFuZGxlciBzZXRfdW5leHBlY3RlZCAodW5leHBlY3RlZF9oYW5kbGVyKTsKdm9pZCB1bmV4cGVj
dGVkICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKYm9vbCB1bmNhdWdodF9leGNl
cHRpb24gKCk7CgoKCgoKfSAgCgoKIyA5ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1s
aW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9uZXciIDIgMwoKCmV4dGVybiAiQysrIiB7CgoKCgoK
ICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uIHsKICBwdWJsaWM6CiAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuICJiYWRfYWxsb2Mi
OyB9CiAgfTsKCiAgc3RydWN0IG5vdGhyb3dfdCB7fTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190
IG5vdGhyb3c7CiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CiAgbmV3X2hhbmRsZXIg
c2V0X25ld19oYW5kbGVyIChuZXdfaGFuZGxlcik7CgoKCgoKIAp2b2lkICpvcGVyYXRvciBuZXcg
KHNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCAqb3BlcmF0b3IgbmV3W10gKHNp
emVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCBvcGVyYXRvciBkZWxldGUgKHZvaWQg
KikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSAodm9pZCAqKSB0aHJvdygpOwp2b2lk
ICpvcGVyYXRvciBuZXcgKHNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2
b2lkICpvcGVyYXRvciBuZXdbXSAoc2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93
KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJvd190Jikg
dGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSAodm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhy
b3dfdCYpIHRocm93KCk7CgogCmlubGluZSB2b2lkICpvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lk
ICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQppbmxpbmUgdm9pZCAqb3BlcmF0b3Ig
bmV3W10oc2l6ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQp9ICAK
CgojIDYgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9p
bmNsdWRlL25ldy5oIiAyIDMKCgoKCgoKCgojIDUyICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX2Fs
Z29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLTIvaW9zdHJlYW0uaCIgMSAzCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCiMgMSAiL3Vzci9p
bmNsdWRlL2crKy0yL3N0cmVhbWJ1Zi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CiNwcmFnbWEgaW50ZXJmYWNlCgoKICAgCgoKCmV4dGVybiAiQyIgewoKfQogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKZXh0ZXJuICJDKysiIHsKY2xhc3MgaXN0cmVhbTsgIApjbGFzcyBvc3Ry
ZWFtOyBjbGFzcyBzdHJlYW1idWY7CgogCgoKCgp0eXBlZGVmIF9fb2ZmNjRfdCAgIHN0cmVhbW9m
ZjsKdHlwZWRlZiBfX29mZjY0X3QgICBzdHJlYW1wb3M7CgoKCgp0eXBlZGVmIF9fc3NpemVfdCAg
IHN0cmVhbXNpemU7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX19mbXRmbGFnczsKdHlwZWRlZiB1
bnNpZ25lZCBjaGFyIF9faW9zdGF0ZTsKCnN0cnVjdCBfaW9zX2ZpZWxkcwp7ICAKICAgIHN0cmVh
bWJ1ZiAqX3N0cmJ1ZjsKICAgIG9zdHJlYW0qIF90aWU7CiAgICBpbnQgX3dpZHRoOwogICAgX19m
bXRmbGFncyBfZmxhZ3M7CiAgICB3Y2hhcl90ICAgX2ZpbGw7CiAgICBfX2lvc3RhdGUgX3N0YXRl
OwogICAgX19pb3N0YXRlIF9leGNlcHRpb25zOwogICAgaW50IF9wcmVjaXNpb247CgogICAgdm9p
ZCAqX2FycmF5czsgIAp9OwoKCgoKCgoKCgoKCgoKCgojIDEyNCAiL3Vzci9pbmNsdWRlL2crKy0y
L3N0cmVhbWJ1Zi5oIiAzCgoKY2xhc3MgaW9zIDogcHVibGljIF9pb3NfZmllbGRzIHsKICBpb3Mm
IG9wZXJhdG9yPShpb3MmKTsgICAKICBpb3MgKGNvbnN0IGlvcyYpOyAgCiAgcHVibGljOgogICAg
dHlwZWRlZiBfX2ZtdGZsYWdzIGZtdGZsYWdzOwogICAgdHlwZWRlZiBpbnQgaW9zdGF0ZTsKICAg
IHR5cGVkZWYgaW50IG9wZW5tb2RlOwogICAgdHlwZWRlZiBpbnQgc3RyZWFtc2l6ZTsKICAgIGVu
dW0gaW9fc3RhdGUgewoJZ29vZGJpdCA9IDAgLAoJZW9mYml0ID0gMSAsCglmYWlsYml0ID0gMiAs
CgliYWRiaXQgPSA0ICB9OwogICAgZW51bSBvcGVuX21vZGUgewoJaW4gPSAxICwKCW91dCA9IDIg
LAoJYXRlID0gNCAsCglhcHAgPSA4ICwKCXRydW5jID0gMTYgLAoJbm9jcmVhdGUgPSAzMiAsCglu
b3JlcGxhY2UgPSA2NCAsCgliaW4gPSAxMjggLCAgCgliaW5hcnkgPSAxMjggIH07CiAgICBlbnVt
IHNlZWtfZGlyIHsgYmVnLCBjdXIsIGVuZH07CiAgICB0eXBlZGVmIGVudW0gc2Vla19kaXIgc2Vl
a2RpcjsKICAgICAKICAgIGVudW0geyBza2lwd3M9IDAxICwKCSAgIGxlZnQ9IDAyICwgcmlnaHQ9
IDA0ICwgaW50ZXJuYWw9IDAxMCAsCgkgICBkZWM9IDAyMCAsIG9jdD0gMDQwICwgaGV4PSAwMTAw
ICwKCSAgIHNob3diYXNlPSAwMjAwICwgc2hvd3BvaW50PSAwNDAwICwKCSAgIHVwcGVyY2FzZT0g
MDEwMDAgLCBzaG93cG9zPSAwMjAwMCAsCgkgICBzY2llbnRpZmljPSAwNDAwMCAsIGZpeGVkPSAw
MTAwMDAgLAoJICAgdW5pdGJ1Zj0gMDIwMDAwICwgc3RkaW89IDA0MDAwMCAKCgoKCSAgIH07CiAg
ICBlbnVtIHsgIAoJYmFzZWZpZWxkPWRlYytvY3QraGV4LAoJZmxvYXRmaWVsZCA9IHNjaWVudGlm
aWMrZml4ZWQsCglhZGp1c3RmaWVsZCA9IGxlZnQrcmlnaHQraW50ZXJuYWwKICAgIH07CgojIDE3
NyAiL3Vzci9pbmNsdWRlL2crKy0yL3N0cmVhbWJ1Zi5oIiAzCgoKICAgIG9zdHJlYW0qIHRpZSgp
IGNvbnN0IHsgcmV0dXJuIF90aWU7IH0KICAgIG9zdHJlYW0qIHRpZShvc3RyZWFtKiB2YWwpIHsg
b3N0cmVhbSogc2F2ZT1fdGllOyBfdGllPXZhbDsgcmV0dXJuIHNhdmU7IH0KCiAgICAgCiAgICB3
Y2hhcl90ICAgZmlsbCgpIGNvbnN0IHsgcmV0dXJuIF9maWxsOyB9CiAgICB3Y2hhcl90ICAgZmls
bCh3Y2hhcl90ICAgbmV3ZikKCXt3Y2hhcl90ICAgb2xkZiA9IF9maWxsOyBfZmlsbCA9IG5ld2Y7
IHJldHVybiBvbGRmO30KICAgIGZtdGZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gX2ZsYWdz
OyB9CiAgICBmbXRmbGFncyBmbGFncyhmbXRmbGFncyBuZXdfdmFsKSB7CglmbXRmbGFncyBvbGRf
dmFsID0gX2ZsYWdzOyBfZmxhZ3MgPSBuZXdfdmFsOyByZXR1cm4gb2xkX3ZhbDsgfQogICAgaW50
IHByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIF9wcmVjaXNpb247IH0KICAgIGludCBwcmVjaXNp
b24oaW50IG5ld3ApIHsKCXVuc2lnbmVkIHNob3J0IG9sZHAgPSBfcHJlY2lzaW9uOyBfcHJlY2lz
aW9uID0gKHVuc2lnbmVkIHNob3J0KW5ld3A7CglyZXR1cm4gb2xkcDsgfQogICAgZm10ZmxhZ3Mg
c2V0ZihmbXRmbGFncyB2YWwpIHsKCWZtdGZsYWdzIG9sZGJpdHMgPSBfZmxhZ3M7CglfZmxhZ3Mg
fD0gdmFsOyByZXR1cm4gb2xkYml0czsgfQogICAgZm10ZmxhZ3Mgc2V0ZihmbXRmbGFncyB2YWws
IGZtdGZsYWdzIG1hc2spIHsKCWZtdGZsYWdzIG9sZGJpdHMgPSBfZmxhZ3M7CglfZmxhZ3MgPSAo
X2ZsYWdzICYgfm1hc2spIHwgKHZhbCAmIG1hc2spOyByZXR1cm4gb2xkYml0czsgfQogICAgZm10
ZmxhZ3MgdW5zZXRmKGZtdGZsYWdzIG1hc2spIHsKCWZtdGZsYWdzIG9sZGJpdHMgPSBfZmxhZ3M7
CglfZmxhZ3MgJj0gfm1hc2s7IHJldHVybiBvbGRiaXRzOyB9CiAgICBpbnQgd2lkdGgoKSBjb25z
dCB7IHJldHVybiBfd2lkdGg7IH0KICAgIGludCB3aWR0aChpbnQgdmFsKSB7IGludCBzYXZlID0g
X3dpZHRoOyBfd2lkdGggPSB2YWw7IHJldHVybiBzYXZlOyB9CgoKCgogICAgdm9pZCBfdGhyb3df
ZmFpbHVyZSgpIGNvbnN0IHsgfQoKICAgIHZvaWQgY2xlYXIoaW9zdGF0ZSBzdGF0ZSA9IDApIHsK
CV9zdGF0ZSA9IF9zdHJidWYgPyBzdGF0ZSA6IHN0YXRlfGJhZGJpdDsKCWlmIChfc3RhdGUgJiBf
ZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAgdm9pZCBzZXQoaW9zdGF0ZSBmbGFn
KSB7IF9zdGF0ZSB8PSBmbGFnOwoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFp
bHVyZSgpOyB9CiAgICB2b2lkIHNldHN0YXRlKGlvc3RhdGUgZmxhZykgeyBfc3RhdGUgfD0gZmxh
ZzsgIAoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICBp
bnQgZ29vZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSA9PSAwOyB9CiAgICBpbnQgZW9mKCkgY29u
c3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjplb2ZiaXQ7IH0KICAgIGludCBmYWlsKCkgY29uc3Qg
eyByZXR1cm4gX3N0YXRlICYgKGlvczo6YmFkYml0fGlvczo6ZmFpbGJpdCk7IH0KICAgIGludCBi
YWQoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmJhZGJpdDsgfQogICAgaW9zdGF0ZSBy
ZHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlOyB9CiAgICBvcGVyYXRvciB2b2lkKigpIGNv
bnN0IHsgcmV0dXJuIGZhaWwoKSA/ICh2b2lkKikwIDogKHZvaWQqKSgtMSk7IH0KICAgIGludCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBmYWlsKCk7IH0KICAgIGlvc3RhdGUgZXhjZXB0aW9u
cygpIGNvbnN0IHsgcmV0dXJuIF9leGNlcHRpb25zOyB9CiAgICB2b2lkIGV4Y2VwdGlvbnMoaW9z
dGF0ZSBlbmFibGUpIHsKCV9leGNlcHRpb25zID0gZW5hYmxlOwoJaWYgKF9zdGF0ZSAmIF9leGNl
cHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CgogICAgc3RyZWFtYnVmKiByZGJ1ZigpIGNvbnN0
IHsgcmV0dXJuIF9zdHJidWY7IH0KICAgIHN0cmVhbWJ1ZiogcmRidWYoc3RyZWFtYnVmICpfcykg
ewogICAgICBzdHJlYW1idWYgKl9vbGQgPSBfc3RyYnVmOyBfc3RyYnVmID0gX3M7IGNsZWFyICgp
OyByZXR1cm4gX29sZDsgfQoKICAgIHN0YXRpYyBpbnQgc3luY193aXRoX3N0ZGlvKGludCBvbik7
CiAgICBzdGF0aWMgdm9pZCBzeW5jX3dpdGhfc3RkaW8oKSB7IHN5bmNfd2l0aF9zdGRpbygxKTsg
fQogICAgc3RhdGljIGZtdGZsYWdzIGJpdGFsbG9jKCk7CiAgICBzdGF0aWMgaW50IHhhbGxvYygp
OwogICAgdm9pZComIHB3b3JkKGludCk7CiAgICB2b2lkKiBwd29yZChpbnQpIGNvbnN0OwogICAg
bG9uZyYgaXdvcmQoaW50KTsKICAgIGxvbmcgaXdvcmQoaW50KSBjb25zdDsKCgoKCgoKCgoKICAg
ICAKICAgIGNsYXNzIEluaXQgewogICAgcHVibGljOgogICAgICBJbml0ICgpIHsgfQogICAgfTsK
CiAgcHJvdGVjdGVkOgogICAgaW5saW5lIGlvcyhzdHJlYW1idWYqIHNiID0gMCwgb3N0cmVhbSog
dGllX3RvID0gMCk7CiAgICBpbmxpbmUgdmlydHVhbCB+aW9zKCk7CiAgICBpbmxpbmUgdm9pZCBp
bml0KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZSA9IDApOwp9OwoKCgoKdHlwZWRlZiBpb3M6
OnNlZWtfZGlyIF9zZWVrX2RpcjsKCgogCiAKIAogCiAKCiAKIApjbGFzcyBzdHJlYW1tYXJrZXIg
OiBwcml2YXRlIF9JT19tYXJrZXIgewogICAgZnJpZW5kIGNsYXNzIHN0cmVhbWJ1ZjsKICAgIHZv
aWQgc2V0X29mZnNldChpbnQgb2Zmc2V0KSB7IF9wb3MgPSBvZmZzZXQ7IH0KICBwdWJsaWM6CiAg
ICBzdHJlYW1tYXJrZXIoc3RyZWFtYnVmICpzYik7CiAgICB+c3RyZWFtbWFya2VyKCk7CiAgICBp
bnQgc2F2aW5nKCkgeyByZXR1cm4gIDE7IH0KICAgIGludCBkZWx0YShzdHJlYW1tYXJrZXImKTsK
ICAgIGludCBkZWx0YSgpOwp9OwoKc3RydWN0IHN0cmVhbWJ1ZiA6IHB1YmxpYyBfSU9fRklMRSB7
ICAKICAgIGZyaWVuZCBjbGFzcyBpb3M7CiAgICBmcmllbmQgY2xhc3MgaXN0cmVhbTsKICAgIGZy
aWVuZCBjbGFzcyBvc3RyZWFtOwogICAgZnJpZW5kIGNsYXNzIHN0cmVhbW1hcmtlcjsKICAgIGNv
bnN0IHZvaWQgKiZfdnRhYmxlKCkgeyByZXR1cm4gKihjb25zdCB2b2lkKiopKChfSU9fRklMRSop
dGhpcyArIDEpOyB9CiAgcHJvdGVjdGVkOgogICAgc3RhdGljIHN0cmVhbWJ1ZiogX2xpc3RfYWxs
OyAgCiAgICBfSU9fRklMRSomIHhjaGFpbigpIHsgcmV0dXJuIF9jaGFpbjsgfQogICAgdm9pZCBf
dW5fbGluaygpOwogICAgdm9pZCBfbGlua19pbigpOwogICAgY2hhciogZ3B0cigpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRf
cHRyOyB9CiAgICBjaGFyKiBwcHRyKCkgY29uc3QgeyByZXR1cm4gX0lPX3dyaXRlX3B0cjsgfQog
ICAgY2hhciogZWdwdHIoKSBjb25zdAogICAgICB7IHJldHVybiBfZmxhZ3MgICYgMHgxMDAgID8g
X0lPX3NhdmVfZW5kIDogX0lPX3JlYWRfZW5kOyB9CiAgICBjaGFyKiBlcHB0cigpIGNvbnN0IHsg
cmV0dXJuIF9JT193cml0ZV9lbmQ7IH0KICAgIGNoYXIqIHBiYXNlKCkgY29uc3QgeyByZXR1cm4g
X0lPX3dyaXRlX2Jhc2U7IH0KICAgIGNoYXIqIGViYWNrKCkgY29uc3QKICAgICAgeyByZXR1cm4g
X2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9iYXNlO30KICAgIGNo
YXIqIGJhc2UoKSBjb25zdCB7IHJldHVybiBfSU9fYnVmX2Jhc2U7IH0KICAgIGNoYXIqIGVidWYo
KSBjb25zdCB7IHJldHVybiBfSU9fYnVmX2VuZDsgfQogICAgaW50IGJsZW4oKSBjb25zdCB7IHJl
dHVybiBfSU9fYnVmX2VuZCAtIF9JT19idWZfYmFzZTsgfQogICAgdm9pZCB4cHV0X2NoYXIoY2hh
ciBjKSB7ICpfSU9fd3JpdGVfcHRyKysgPSBjOyB9CiAgICBpbnQgeGZsYWdzKCkgeyByZXR1cm4g
X2ZsYWdzIDsgfQogICAgaW50IHhmbGFncyhpbnQgZikge2ludCBmbCA9IF9mbGFncyA7IF9mbGFn
cyAgPSBmOyByZXR1cm4gZmw7fQogICAgdm9pZCB4c2V0ZmxhZ3MoaW50IGYpIHsgX2ZsYWdzICB8
PSBmOyB9CiAgICB2b2lkIHhzZXRmbGFncyhpbnQgZiwgaW50IG1hc2spCiAgICAgIHsgX2ZsYWdz
ICA9IChfZmxhZ3MgICYgfm1hc2spIHwgKGYgJiBtYXNrKTsgfQogICAgdm9pZCBnYnVtcChpbnQg
bikKICAgICAgeyBfZmxhZ3MgICYgMHgxMDAgID8gKF9JT19zYXZlX2Jhc2UrPW4pOihfSU9fcmVh
ZF9wdHIrPW4pO30KICAgIHZvaWQgcGJ1bXAoaW50IG4pIHsgX0lPX3dyaXRlX3B0ciArPSBuOyB9
CiAgICB2b2lkIHNldGIoY2hhciogYiwgY2hhciogZWIsIGludCBhPTApOwogICAgdm9pZCBzZXRw
KGNoYXIqIHAsIGNoYXIqIGVwKQogICAgICB7IF9JT193cml0ZV9iYXNlPV9JT193cml0ZV9wdHI9
cDsgX0lPX3dyaXRlX2VuZD1lcDsgfQogICAgdm9pZCBzZXRnKGNoYXIqIGViLCBjaGFyKiBnLCBj
aGFyICplZykgewogICAgICBpZiAoX2ZsYWdzICAmIDB4MTAwICkgX0lPX2ZyZWVfYmFja3VwX2Fy
ZWEodGhpcyk7IAogICAgICBfSU9fcmVhZF9iYXNlID0gZWI7IF9JT19yZWFkX3B0ciA9IGc7IF9J
T19yZWFkX2VuZCA9IGVnOyB9CiAgICBjaGFyICpzaG9ydGJ1ZigpIHsgcmV0dXJuIF9zaG9ydGJ1
ZjsgfQoKICAgIGludCBpbl9iYWNrdXAoKSB7IHJldHVybiBfZmxhZ3MgJiAweDEwMCA7IH0KICAg
ICAKICAgIGNoYXIgKkdiYXNlKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fc2F2ZV9iYXNl
IDogX0lPX3JlYWRfYmFzZTsgfQogICAgIAogICAgY2hhciAqZUdwdHIoKSB7IHJldHVybiBpbl9i
YWNrdXAoKSA/IF9JT19zYXZlX2VuZCA6IF9JT19yZWFkX2VuZDsgfQogICAgIAogICAgY2hhciAq
QmJhc2UoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2Jhc2UgOiBfSU9fc2F2ZV9i
YXNlOyB9CiAgICBjaGFyICpCcHRyKCkgeyByZXR1cm4gX0lPX2JhY2t1cF9iYXNlOyB9CiAgICAg
CiAgICBjaGFyICplQnB0cigpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3JlYWRfZW5kIDog
X0lPX3NhdmVfZW5kOyB9CiAgICBjaGFyICpOYmFzZSgpIHsgcmV0dXJuIF9JT19zYXZlX2Jhc2U7
IH0KICAgIGNoYXIgKmVOcHRyKCkgeyByZXR1cm4gX0lPX3NhdmVfZW5kOyB9CiAgICBpbnQgaGF2
ZV9iYWNrdXAoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlICE9IF9fbnVsbCA7IH0KICAgIGludCBo
YXZlX21hcmtlcnMoKSB7IHJldHVybiBfbWFya2VycyAhPSBfX251bGwgOyB9CiAgICB2b2lkIGZy
ZWVfYmFja3VwX2FyZWEoKTsKICAgIHZvaWQgdW5zYXZlX21hcmtlcnMoKTsgIAogICAgaW50IHB1
dF9tb2RlKCkgeyByZXR1cm4gX2ZsYWdzICYgMHg4MDAgOyB9CiAgICBpbnQgc3dpdGNoX3RvX2dl
dF9tb2RlKCk7CiAgICAKICAgIHN0cmVhbWJ1ZihpbnQgZmxhZ3M9MCk7CiAgcHVibGljOgogICAg
c3RhdGljIGludCBmbHVzaF9hbGwoKTsKICAgIHN0YXRpYyB2b2lkIGZsdXNoX2FsbF9saW5lYnVm
ZmVyZWQoKTsgIAogICAgdmlydHVhbCB+c3RyZWFtYnVmKCk7CiAgICB2aXJ0dWFsIGludCBvdmVy
ZmxvdyhpbnQgYyA9ICgtMSkgKTsgIAogICAgdmlydHVhbCBpbnQgdW5kZXJmbG93KCk7ICAKICAg
IHZpcnR1YWwgaW50IHVmbG93KCk7ICAKICAgIHZpcnR1YWwgaW50IHBiYWNrZmFpbChpbnQgYyk7
CiAKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSB4c3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6
ZSBuKTsKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSB4c2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBu
KTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIsIGlu
dCBtb2RlPWlvczo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla3Bvcyhz
dHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOwoKICAgIHN0cmVhbXBv
cyBwdWJzZWVrb2ZmKHN0cmVhbW9mZiBvLCBfc2Vla19kaXIgZCwgaW50IG1vZGU9aW9zOjppbnxp
b3M6Om91dCkKICAgICAgeyByZXR1cm4gX0lPX3NlZWtvZmYgKHRoaXMsIG8sIGQsIG1vZGUpOyB9
CiAgICBzdHJlYW1wb3MgcHVic2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6
aW58aW9zOjpvdXQpCiAgICAgIHsgcmV0dXJuIF9JT19zZWVrcG9zICh0aGlzLCBwb3MsIG1vZGUp
OyB9CiAgICBzdHJlYW1wb3Mgc3NlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIsIGludCBtb2Rl
PWlvczo6aW58aW9zOjpvdXQpOwogICAgc3RyZWFtcG9zIHNzZWVrcG9zKHN0cmVhbXBvcyBwb3Ms
IGludCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCk7CiAgICB2aXJ0dWFsIHN0cmVhbWJ1Ziogc2V0
YnVmKGNoYXIqIHAsIGludCBsZW4pOwogICAgdmlydHVhbCBpbnQgc3luYygpOwogICAgdmlydHVh
bCBpbnQgZG9hbGxvY2F0ZSgpOwoKICAgIGludCBzZWVrbWFyayhzdHJlYW1tYXJrZXImIG1hcmss
IGludCBkZWx0YSA9IDApOwogICAgaW50IHNwdXRiYWNrYyhjaGFyIGMpOwogICAgaW50IHN1bmdl
dGMoKTsKICAgIGludCB1bmJ1ZmZlcmVkKCkgeyByZXR1cm4gX2ZsYWdzICYgMiAgPyAxIDogMDsg
fQogICAgaW50IGxpbmVidWZmZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDB4MjAwICA/IDEgOiAw
OyB9CiAgICB2b2lkIHVuYnVmZmVyZWQoaW50IGkpCgl7IGlmIChpKSBfZmxhZ3MgfD0gMiA7IGVs
c2UgX2ZsYWdzICY9IH4yIDsgfQogICAgdm9pZCBsaW5lYnVmZmVyZWQoaW50IGkpCgl7IGlmIChp
KSBfZmxhZ3MgfD0gMHgyMDAgOyBlbHNlIF9mbGFncyAmPSB+MHgyMDAgOyB9CiAgICBpbnQgYWxs
b2NhdGUoKSB7ICAKCWlmIChiYXNlKCkgfHwgdW5idWZmZXJlZCgpKSByZXR1cm4gMDsKCWVsc2Ug
cmV0dXJuIGRvYWxsb2NhdGUoKTsgfQogICAgIAogICAgdm9pZCBhbGxvY2J1ZigpIHsgaWYgKGJh
c2UoKSA9PSBfX251bGwgKSBkb2FsbG9jYnVmKCk7IH0KICAgIHZvaWQgZG9hbGxvY2J1ZigpOwog
ICAgaW50IGluX2F2YWlsKCkgeyByZXR1cm4gX0lPX3JlYWRfZW5kIC0gX0lPX3JlYWRfcHRyOyB9
CiAgICBpbnQgb3V0X3dhaXRpbmcoKSB7IHJldHVybiBfSU9fd3JpdGVfcHRyIC0gX0lPX3dyaXRl
X2Jhc2U7IH0KICAgIHN0cmVhbXNpemUgc3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBu
KSB7IHJldHVybiB4c3B1dG4ocywgbik7IH0KICAgIHN0cmVhbXNpemUgcGFkbihjaGFyIHBhZCwg
c3RyZWFtc2l6ZSBuKSB7IHJldHVybiBfSU9fcGFkbih0aGlzLCBwYWQsIG4pOyB9CiAgICBzdHJl
YW1zaXplIHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4gX0lPX3NnZXRuKHRo
aXMsIHMsIG4pOyB9CiAgICBpbnQgaWdub3JlKGludCk7CiAgICBpbnQgZ2V0X2NvbHVtbigpOwog
ICAgaW50IHNldF9jb2x1bW4oaW50KTsKICAgIGxvbmcgc2dldGxpbmUoY2hhciogYnVmLCBzaXpl
X3QgICBuLCBjaGFyIGRlbGltLCBpbnQgcHV0YmFja19kZWxpbSk7CiAgICBpbnQgc3B1dGMoaW50
IGMpIHsgcmV0dXJuIF9JT19wdXRjKGMsIHRoaXMpOyB9CiAgICBpbnQgc2J1bXBjKCkgeyByZXR1
cm4gX0lPX2dldGModGhpcyk7IH0KICAgIGludCBzZ2V0YygpIHsgcmV0dXJuICgoICB0aGlzICAp
LT5fSU9fcmVhZF9wdHIgPj0gKCAgdGhpcyAgKS0+X0lPX3JlYWRfZW5kICYmIF9fdW5kZXJmbG93
ICggIHRoaXMgICkgPT0gKC0xKSAgPyAoLTEpICA6ICoodW5zaWduZWQgY2hhciAqKSAoICB0aGlz
ICApLT5fSU9fcmVhZF9wdHIpICA7IH0KICAgIGludCBzbmV4dGMoKSB7CglpZiAoX0lPX3JlYWRf
cHRyID49IF9JT19yZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyh0aGlzKSA9PSAoLTEpICkKCSAgcmV0
dXJuICgtMSkgOwoJZWxzZSByZXR1cm4gX0lPX3JlYWRfcHRyKyssIHNnZXRjKCk7IH0KICAgIHZv
aWQgc3Rvc3NjKCkgeyBpZiAoX0lPX3JlYWRfcHRyIDwgX0lPX3JlYWRfZW5kKSBfSU9fcmVhZF9w
dHIrKzsgfQogICAgaW50IHZzY2FuKGNoYXIgY29uc3QgKmZtdDAsIF9fZ251Y192YV9saXN0ICBh
cCwgaW9zKiBzdHJlYW0gPSBfX251bGwgKTsKICAgIGludCBzY2FuKGNoYXIgY29uc3QgKmZtdDAg
Li4uKTsKICAgIGludCB2Zm9ybShjaGFyIGNvbnN0ICpmbXQwLCBfX2dudWNfdmFfbGlzdCAgYXAp
OwogICAgaW50IGZvcm0oY2hhciBjb25zdCAqZm10MCAuLi4pOwoKCgoKICAgIHZpcnR1YWwgc3Ry
ZWFtc2l6ZSBzeXNfcmVhZChjaGFyKiBidWYsIHN0cmVhbXNpemUgc2l6ZSk7CiAgICB2aXJ0dWFs
IHN0cmVhbXNpemUgc3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJlYW1zaXplKTsKICAgIHZpcnR1
YWwgc3RyZWFtcG9zIHN5c19zZWVrKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHZpcnR1YWwg
aW50IHN5c19jbG9zZSgpOwogICAgdmlydHVhbCBpbnQgc3lzX3N0YXQodm9pZCopOyAgCgogICAg
dmlydHVhbCBpbnQgc2hvd21hbnljKCk7CiAgICB2aXJ0dWFsIHZvaWQgaW1idWUodm9pZCAqKTsK
Cn07CgogCiAKCmNsYXNzIGZpbGVidWYgOiBwdWJsaWMgc3RyZWFtYnVmIHsKICBwcm90ZWN0ZWQ6
CiAgICB2b2lkIGluaXQoKTsKICBwdWJsaWM6CiAgICBzdGF0aWMgY29uc3QgaW50IG9wZW5wcm90
OyAgCiAgICBmaWxlYnVmKCk7CiAgICBmaWxlYnVmKGludCBmZCk7CiAgICBmaWxlYnVmKGludCBm
ZCwgY2hhciogcCwgaW50IGxlbik7CgoKCiAgICB+ZmlsZWJ1ZigpOwogICAgZmlsZWJ1ZiogYXR0
YWNoKGludCBmZCk7CiAgICBmaWxlYnVmKiBvcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25z
dCBjaGFyICptb2RlKTsKICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGlv
czo6b3Blbm1vZGUgbW9kZSwgaW50IHByb3QgPSAwNjY0KTsKICAgIHZpcnR1YWwgaW50IHVuZGVy
ZmxvdygpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMgPSAoLTEpICk7CiAgICBpbnQg
aXNfb3BlbigpIGNvbnN0IHsgcmV0dXJuIF9maWxlbm8gPj0gMDsgfQogICAgaW50IGZkKCkgY29u
c3QgeyByZXR1cm4gaXNfb3BlbigpID8gX2ZpbGVubyA6ICgtMSkgOyB9CiAgICBmaWxlYnVmKiBj
bG9zZSgpOwogICAgdmlydHVhbCBpbnQgZG9hbGxvY2F0ZSgpOwogICAgdmlydHVhbCBzdHJlYW1w
b3Mgc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91
dCk7CiAgICB2aXJ0dWFsIHN0cmVhbWJ1Ziogc2V0YnVmKGNoYXIqIHAsIGludCBsZW4pOwogICAg
c3RyZWFtc2l6ZSB4c3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHN0cmVh
bXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIGludCBzeW5j
KCk7CiAgcHJvdGVjdGVkOiAgCiAKICAgIGludCBpc19yZWFkaW5nKCkgeyByZXR1cm4gZWJhY2so
KSAhPSBlZ3B0cigpOyB9CiAgICBjaGFyKiBjdXJfcHRyKCkgeyByZXR1cm4gaXNfcmVhZGluZygp
ID8gIGdwdHIoKSA6IHBwdHIoKTsgfQogICAgIAogICAgY2hhciogZmlsZV9wdHIoKSB7IHJldHVy
biBlR3B0cigpOyB9CiAgICAgCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3JlYWQoY2hhciog
YnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc3lzX3NlZWsoc3Ry
ZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c193cml0ZShjb25z
dCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIGludCBzeXNfc3RhdCh2b2lkKik7ICAK
ICAgIHZpcnR1YWwgaW50IHN5c19jbG9zZSgpOwoKCgoKfTsKCmlubGluZSB2b2lkIGlvczo6aW5p
dChzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsKCQlfc3RhdGUgPSBzYiA/IGlvczo6
Z29vZGJpdCA6IGlvczo6YmFkYml0OyBfZXhjZXB0aW9ucz0wOwoJCV9zdHJidWY9c2I7IF90aWUg
PSB0aWVfdG87IF93aWR0aD0wOyBfZmlsbD0nICc7CgoJCV9mbGFncz1pb3M6OnNraXB3c3xpb3M6
OmRlYzsKCgoKCQlfcHJlY2lzaW9uPTY7IF9hcnJheXMgPSAwOyB9CgppbmxpbmUgaW9zOjppb3Mo
c3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllX3RvKSB7IGluaXQoc2IsIHRpZV90byk7IH0KCmlu
bGluZSBpb3M6On5pb3MoKSB7CgoKCiAgICBpZiAoX2FycmF5cykgZGVsZXRlIFtdIF9hcnJheXM7
Cn0KfSAgCgojIDMxICIvdXNyL2luY2x1ZGUvZysrLTIvaW9zdHJlYW0uaCIgMiAzCgoKZXh0ZXJu
ICJDKysiIHsKY2xhc3MgaXN0cmVhbTsgY2xhc3Mgb3N0cmVhbTsKdHlwZWRlZiBpb3MmICgqX19t
YW5pcCkoaW9zJik7CnR5cGVkZWYgaXN0cmVhbSYgKCpfX2ltYW5pcCkoaXN0cmVhbSYpOwp0eXBl
ZGVmIG9zdHJlYW0mICgqX19vbWFuaXApKG9zdHJlYW0mKTsKCmV4dGVybiBpc3RyZWFtJiB3cyhp
c3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYgb3V0cyk7CmV4dGVy
biBvc3RyZWFtJiBlbmRsKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kcyhvc3Ry
ZWFtJiBvdXRzKTsKCmNsYXNzIG9zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MKewogICAgIAog
ICAgdm9pZCBkb19vc2Z4KCk7CiAgcHVibGljOgogICAgb3N0cmVhbSgpIHsgfQogICAgb3N0cmVh
bShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVkPSBfX251bGwgKTsKICAgIGludCBvcGZ4KCkg
ewoJaWYgKCFnb29kKCkpIHJldHVybiAwOwoJZWxzZSB7IGlmIChfdGllKSBfdGllLT5mbHVzaCgp
OyAgOyByZXR1cm4gMTt9IH0KICAgIHZvaWQgb3NmeCgpIHsgIDsKCQkgIGlmIChmbGFncygpICYg
KGlvczo6dW5pdGJ1Znxpb3M6OnN0ZGlvKSkKCQkgICAgICBkb19vc2Z4KCk7IH0KICAgIG9zdHJl
YW0mIGZsdXNoKCk7CiAgICBvc3RyZWFtJiBwdXQoY2hhciBjKSB7IF9zdHJidWYtPnNwdXRjKGMp
OyByZXR1cm4gKnRoaXM7IH0KCgoKCgogICAgb3N0cmVhbSYgd3JpdGUoY29uc3QgY2hhciAqcywg
c3RyZWFtc2l6ZSBuKTsKICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMs
IHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMsIG4pO30K
ICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHNpZ25lZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pCiAg
ICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiB3cml0
ZShjb25zdCB2b2lkICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25z
dCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiBzZWVrcChzdHJlYW1wb3MpOwogICAgb3N0cmVh
bSYgc2Vla3Aoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgc3RyZWFtcG9zIHRlbGxwKCk7CiAg
ICBvc3RyZWFtJiBmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOwogICAgb3N0cmVhbSYgdmZv
cm0oY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFfbGlzdCAgYXJncyk7CgogICAgb3N0cmVh
bSYgb3BlcmF0b3I8PChjaGFyIGMpOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBj
aGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQogICAgb3N0cmVhbSYgb3BlcmF0
b3I8PChzaWduZWQgY2hhciBjKSB7IHJldHVybiAoKnRoaXMpIDw8IChjaGFyKWM7IH0KICAgIG9z
dHJlYW0mIG9wZXJhdG9yPDwoY29uc3QgY2hhciAqcyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8
KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMpCgl7IHJldHVybiAoKnRoaXMpIDw8IChjb25zdCBjaGFy
KilzOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHNpZ25lZCBjaGFyICpzKQoJeyBy
ZXR1cm4gKCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8
PChjb25zdCB2b2lkICpwKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoaW50IG4pOwogICAgb3N0
cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBpbnQgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8
KGxvbmcgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbik7CgogICAg
X19leHRlbnNpb25fXyBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgbG9uZyBuKTsKICAgIF9fZXh0
ZW5zaW9uX18gb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgbik7CgogICAg
b3N0cmVhbSYgb3BlcmF0b3I8PChzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKGludCluKTt9
CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0
b3I8PCgodW5zaWduZWQgaW50KW4pO30KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGJvb2wgYikg
eyByZXR1cm4gb3BlcmF0b3I8PCgoaW50KWIpOyB9CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChk
b3VibGUgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGZsb2F0IG4pIHsgcmV0dXJuIG9wZXJh
dG9yPDwoKGRvdWJsZSluKTsgfQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBkb3VibGUg
bik7CgoKCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KF9fb21hbmlwIGZ1bmMpIHsgcmV0dXJuICgq
ZnVuYykoKnRoaXMpOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KF9fbWFuaXAgZnVuYykgeygq
ZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzdHJl
YW1idWYqKTsKCgoKfTsKCmNsYXNzIGlzdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MKewogICAg
IApwcm90ZWN0ZWQ6CiAgICBzaXplX3QgICBfZ2NvdW50OwoKICAgIGludCBfc2tpcF93cygpOwog
IHB1YmxpYzoKICAgIGlzdHJlYW0oKTogX2djb3VudCAoMCkgeyB9CiAgICBpc3RyZWFtKHN0cmVh
bWJ1Ziogc2IsIG9zdHJlYW0qdGllZD0gX19udWxsICk7CiAgICBpc3RyZWFtJiBnZXQoY2hhciog
cHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAgICBpc3RyZWFtJiBnZXQodW5zaWdu
ZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJykKCXsgcmV0dXJuIGdldCgo
Y2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgZ2V0KGNoYXImIGMpOwogICAg
aXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXImIGMpIHsgcmV0dXJuIGdldCgoY2hhciYpYyk7IH0K
ICAgIGlzdHJlYW0mIGdldGxpbmUoY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xu
Jyk7CiAgICBpc3RyZWFtJiBnZXRsaW5lKHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hh
ciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXRsaW5lKChjaGFyKilwdHIsIGxlbiwgZGVsaW0p
OyB9CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVkIGNoYXImIGMpICB7IHJldHVybiBnZXQoKGNoYXIm
KWMpOyB9CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBk
ZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAg
IGlzdHJlYW0mIGdldGxpbmUoc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9
ICdcbicpCgl7IHJldHVybiBnZXRsaW5lKChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBp
c3RyZWFtJiByZWFkKGNoYXIgKnB0ciwgc3RyZWFtc2l6ZSBuKTsKICAgIGlzdHJlYW0mIHJlYWQo
dW5zaWduZWQgY2hhciAqcHRyLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHJlYWQoKGNo
YXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIHJlYWQoc2lnbmVkIGNoYXIgKnB0ciwgc3RyZWFt
c2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFt
JiByZWFkKHZvaWQgKnB0ciwgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChjaGFy
KilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiBnZXQoc3RyZWFtYnVmJiBzYiwgY2hhciBkZWxpbSA9
ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0cyhjaGFyICoqcywgY2hhciBkZWxpbSA9ICdcbicpOwog
ICAgaW50IGlwZngoaW50IG5lZWQgPSAwKSB7CglpZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWls
Yml0KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAgOwoJICBpZiAoX3RpZSAmJiAobmVlZCA9PSAw
IHx8IHJkYnVmKCktPmluX2F2YWlsKCkgPCBuZWVkKSkgX3RpZS0+Zmx1c2goKTsKCSAgaWYgKCFu
ZWVkICYmIChmbGFncygpICYgaW9zOjpza2lwd3MpKSByZXR1cm4gX3NraXBfd3MoKTsKCSAgZWxz
ZSByZXR1cm4gMTsKCX0KICAgIH0KICAgIGludCBpcGZ4MCgpIHsgIAoJaWYgKCFnb29kKCkpIHsg
c2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUp
IF90aWUtPmZsdXNoKCk7CgkgIGlmIChmbGFncygpICYgaW9zOjpza2lwd3MpIHJldHVybiBfc2tp
cF93cygpOwoJICBlbHNlIHJldHVybiAxOwoJfQogICAgfQogICAgaW50IGlwZngxKCkgeyAgCglp
ZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAg
OwoJICBpZiAoX3RpZSAmJiByZGJ1ZigpLT5pbl9hdmFpbCgpID09IDApIF90aWUtPmZsdXNoKCk7
CgkgIHJldHVybiAxOwoJfQogICAgfQogICAgdm9pZCBpc2Z4KCkgeyAgOyB9CiAgICBpbnQgZ2V0
KCkgeyBpZiAoIWlwZngxKCkpIHJldHVybiAoLTEpIDsKCQllbHNlIHsgaW50IGNoID0gX3N0cmJ1
Zi0+c2J1bXBjKCk7CgkJICAgICAgIGlmIChjaCA9PSAoLTEpICkgc2V0KGlvczo6ZW9mYml0KTsK
CQkgICAgICAgcmV0dXJuIGNoOwoJCSAgICAgfSB9CiAgICBpbnQgcGVlaygpOwogICAgc2l6ZV90
ICAgZ2NvdW50KCkgeyByZXR1cm4gX2djb3VudDsgfQogICAgaXN0cmVhbSYgaWdub3JlKGludCBu
PTEsIGludCBkZWxpbSA9ICgtMSkgKTsKICAgIGludCBzeW5jICgpOwogICAgaXN0cmVhbSYgc2Vl
a2coc3RyZWFtcG9zKTsKICAgIGlzdHJlYW0mIHNlZWtnKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsK
ICAgIHN0cmVhbXBvcyB0ZWxsZygpOwogICAgaXN0cmVhbSYgcHV0YmFjayhjaGFyIGNoKSB7Cglp
ZiAoZ29vZCgpICYmIF9zdHJidWYtPnNwdXRiYWNrYyhjaCkgPT0gKC0xKSApIGNsZWFyKGlvczo6
YmFkYml0KTsKCXJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiB1bmdldCgpIHsKCWlmIChnb29k
KCkgJiYgX3N0cmJ1Zi0+c3VuZ2V0YygpID09ICgtMSkgKSBjbGVhcihpb3M6OmJhZGJpdCk7Cgly
ZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgc2Nhbihjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsK
ICAgIGlzdHJlYW0mIHZzY2FuKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgIGFy
Z3MpOwoKCgoKCgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyKik7CiAgICBpc3RyZWFtJiBv
cGVyYXRvcj4+KHVuc2lnbmVkIGNoYXIqIHApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXAp
OyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyKnApIHsgcmV0dXJuIG9wZXJh
dG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXImIGMpOwogICAg
aXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9wZXJhdG9yPj4o
KGNoYXImKWMpO30KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXImIGMpIHtyZXR1
cm4gb3BlcmF0b3I+PigoY2hhciYpYyk7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihpbnQmKTsK
ICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyYpOwoKICAgIF9fZXh0ZW5zaW9uX18gaXN0cmVh
bSYgb3BlcmF0b3I+Pihsb25nIGxvbmcmKTsKICAgIF9fZXh0ZW5zaW9uX18gaXN0cmVhbSYgb3Bl
cmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmKTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNo
b3J0Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYpOwogICAgaXN0cmVh
bSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVu
c2lnbmVkIHNob3J0Jik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihib29sJik7CgogICAgaXN0
cmVhbSYgb3BlcmF0b3I+PihmbG9hdCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihkb3VibGUm
KTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyBkb3VibGUmKTsKICAgIGlzdHJlYW0mIG9w
ZXJhdG9yPj4oIF9fbWFuaXAgZnVuYykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7fQog
ICAgaXN0cmVhbSYgb3BlcmF0b3I+PihfX2ltYW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0
aGlzKTsgfQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzdHJlYW1idWYqKTsKfTsKCmNsYXNzIGlv
c3RyZWFtIDogcHVibGljIGlzdHJlYW0sIHB1YmxpYyBvc3RyZWFtCnsKICBwdWJsaWM6CiAgICBp
b3N0cmVhbSgpIHsgfQogICAgaW9zdHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSp0aWVkPSBf
X251bGwgKTsKfTsKCmNsYXNzIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24gOiBwdWJsaWMgaXN0cmVh
bSB7CnB1YmxpYzoKICBfSU9faXN0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oaXN0cmVhbSYp
OwogIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShfSU9faXN0cmVhbV93aXRoYXNz
aWduJiByaHMpCiAgICB7IHJldHVybiBvcGVyYXRvcj0gKHN0YXRpY19jYXN0PGlzdHJlYW0mPiAo
cmhzKSk7IH0KfTsKCmNsYXNzIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24gOiBwdWJsaWMgb3N0cmVh
bSB7CnB1YmxpYzoKICBfSU9fb3N0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0ob3N0cmVhbSYp
OwogIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShfSU9fb3N0cmVhbV93aXRoYXNz
aWduJiByaHMpCiAgICB7IHJldHVybiBvcGVyYXRvcj0gKHN0YXRpY19jYXN0PG9zdHJlYW0mPiAo
cmhzKSk7IH0KfTsKCmV4dGVybiBfSU9faXN0cmVhbV93aXRoYXNzaWduIGNpbjsKIApleHRlcm4g
X0lPX29zdHJlYW1fd2l0aGFzc2lnbiBjb3V0LCBjZXJyOwoKZXh0ZXJuIF9JT19vc3RyZWFtX3dp
dGhhc3NpZ24gY2xvZwoKCgo7CgpleHRlcm4gaXN0cmVhbSYgbG9jayhpc3RyZWFtJiBpbnMpOwpl
eHRlcm4gaXN0cmVhbSYgdW5sb2NrKGlzdHJlYW0mIGlucyk7CmV4dGVybiBvc3RyZWFtJiBsb2Nr
KG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgdW5sb2NrKG9zdHJlYW0mIG91dHMpOwoK
c3RydWN0IElvc3RyZWFtX2luaXQgeyB9IDsgICAKCmlubGluZSBpb3MmIGRlYyhpb3MmIGkpCnsg
aS5zZXRmKGlvczo6ZGVjLCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9
CmlubGluZSBpb3MmIGhleChpb3MmIGkpCnsgaS5zZXRmKGlvczo6aGV4LCBpb3M6OmRlY3xpb3M6
OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9CmlubGluZSBpb3MmIG9jdChpb3MmIGkpCnsgaS5z
ZXRmKGlvczo6b2N0LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9Cn0g
IAoKCiMgNTMgIi91c3IvaW5jbHVkZS9nKystMi9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCiMgMSAi
L3Vzci9pbmNsdWRlL2crKy0yL3N0bF9pdGVyYXRvci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKIAoKCgoKCgogCgpzdHJ1Y3QgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3Qg
b3V0cHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVi
bGljIGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf
dGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3QgcmFuZG9tX2FjY2Vz
c19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcge307Cgp0
ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRGlzdGFuY2U+IHN0cnVjdCBpbnB1dF9pdGVyYXRvciB7
CiAgdHlwZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRl
ZiBUICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIERpc3RhbmNlICAgICAg
ICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBUKiAgICAgICAgICAgICAgICAgcG9pbnRl
cjsKICB0eXBlZGVmIFQmICAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07CgpzdHJ1Y3Qgb3V0
cHV0X2l0ZXJhdG9yIHsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0
ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRl
ZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAg
ICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJl
bmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIERpc3RhbmNlPiBzdHJ1Y3QgZm9yd2Fy
ZF9pdGVyYXRvciB7CiAgdHlwZWRlZiBmb3J3YXJkX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRl
Z29yeTsKICB0eXBlZGVmIFQgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRl
ZiBEaXN0YW5jZSAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBUKiAgICAg
ICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgVCYgICAgICAgICAgICAgICAgICAgcmVm
ZXJlbmNlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBEaXN0YW5jZT4gc3RydWN0IGJp
ZGlyZWN0aW9uYWxfaXRlcmF0b3IgewogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90
YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBUICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgRGlzdGFuY2UgICAgICAgICAgICAgICAgICAgZGlmZmVy
ZW5jZV90eXBlOwogIHR5cGVkZWYgVCogICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsK
ICB0eXBlZGVmIFQmICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnRlbXBs
YXRlIDxjbGFzcyBULCBjbGFzcyBEaXN0YW5jZT4gc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0
b3IgewogIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdv
cnk7CiAgdHlwZWRlZiBUICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5
cGVkZWYgRGlzdGFuY2UgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk
ZWYgVCogICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIFQmICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCiMgOTMgIi91c3IvaW5jbHVkZS9nKyst
Mi9zdGxfaXRlcmF0b3IuaCIgMwoKCgoKdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yPgpzdHJ1Y3Qg
aXRlcmF0b3JfdHJhaXRzIHsKICB0eXBlZGVmIHR5cGVuYW1lIEl0ZXJhdG9yOjppdGVyYXRvcl9j
YXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIEl0ZXJhdG9yOjp2
YWx1ZV90eXBlICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgSXRlcmF0b3I6
OmRpZmZlcmVuY2VfdHlwZSAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIEl0
ZXJhdG9yOjpwb2ludGVyICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgSXRl
cmF0b3I6OnJlZmVyZW5jZSAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBU
PgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPFQqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0
ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIFQgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgICAgICAgICAgICAgICAg
ICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBUKiAgICAgICAgICAgICAgICAgICAgICAgICBw
b2ludGVyOwogIHR5cGVkZWYgVCYgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8Y29uc3QgVCo+IHsK
ICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog
IHR5cGVkZWYgVCAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVm
IHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNv
bnN0IFQqICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBUJiAgICAg
ICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3I+Cmlu
bGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29y
eQppdGVyYXRvcl9jYXRlZ29yeShjb25zdCBJdGVyYXRvciYpIHsKICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5IGNhdGVnb3J5Owog
IHJldHVybiBjYXRlZ29yeSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3I+CmlubGluZSB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUqCmRpc3Rh
bmNlX3R5cGUoY29uc3QgSXRlcmF0b3ImKSB7CiAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSo+KDApOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgSXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8SXRl
cmF0b3I+Ojp2YWx1ZV90eXBlKgp2YWx1ZV90eXBlKGNvbnN0IEl0ZXJhdG9yJikgewogIHJldHVy
biBzdGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8SXRlcmF0b3I+Ojp2YWx1ZV90
eXBlKj4oMCk7Cn0KCiMgMjI2ICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX2l0ZXJhdG9yLmgiIDMK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgRGlzdGFuY2U+CmlubGluZSB2
b2lkIF9fZGlzdGFuY2UoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0LCBE
aXN0YW5jZSYgbiwgCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7
CiAgd2hpbGUgKGZpcnN0ICE9IGxhc3QpIHsgKytmaXJzdDsgKytuOyB9Cn0KCnRlbXBsYXRlIDxj
bGFzcyBSYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgRGlzdGFuY2U+CmlubGluZSB2b2lkIF9f
ZGlzdGFuY2UoUmFuZG9tQWNjZXNzSXRlcmF0b3IgZmlyc3QsIFJhbmRvbUFjY2Vzc0l0ZXJhdG9y
IGxhc3QsIAogICAgICAgICAgICAgICAgICAgICAgIERpc3RhbmNlJiBuLCByYW5kb21fYWNjZXNz
X2l0ZXJhdG9yX3RhZykgewogIG4gKz0gbGFzdCAtIGZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
SW5wdXRJdGVyYXRvciwgY2xhc3MgRGlzdGFuY2U+CmlubGluZSB2b2lkIGRpc3RhbmNlKElucHV0
SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCwgRGlzdGFuY2UmIG4pIHsKICBfX2Rp
c3RhbmNlKGZpcnN0LCBsYXN0LCBuLCBpdGVyYXRvcl9jYXRlZ29yeShmaXJzdCkpOwp9CgoKCnRl
bXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yPgppbmxpbmUgaXRlcmF0b3JfdHJhaXRzPElucHV0
SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5jZShJbnB1dEl0ZXJhdG9yIGZpcnN0
LCBJbnB1dEl0ZXJhdG9yIGxhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykgewogIGl0ZXJhdG9yX3Ry
YWl0czxJbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIG4gPSAwOwogIHdoaWxlIChmaXJz
dCAhPSBsYXN0KSB7CiAgICArK2ZpcnN0OyArK247CiAgfQogIHJldHVybiBuOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgUmFuZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSBpdGVyYXRvcl90cmFpdHM8UmFu
ZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5jZShSYW5kb21BY2Nl
c3NJdGVyYXRvciBmaXJzdCwgUmFuZG9tQWNjZXNzSXRlcmF0b3IgbGFzdCwKICAgICAgICAgICBy
YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIHJldHVybiBsYXN0IC0gZmlyc3Q7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yPgppbmxpbmUgaXRlcmF0b3JfdHJhaXRzPElucHV0
SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKZGlzdGFuY2UoSW5wdXRJdGVyYXRvciBmaXJzdCwg
SW5wdXRJdGVyYXRvciBsYXN0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
SW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5IGNhdGVnb3J5OwogIHJldHVybiBfX2Rp
c3RhbmNlKGZpcnN0LCBsYXN0LCBjYXRlZ29yeSgpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgSW5w
dXRJdGVyYXRvciwgY2xhc3MgRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShJbnB1dEl0
ZXJhdG9yJiBpLCBEaXN0YW5jZSBuLCBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICB3aGlsZSAobi0t
KSArK2k7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBjbGFz
cyBEaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKEJpZGlyZWN0aW9uYWxJdGVyYXRvciYg
aSwgRGlzdGFuY2UgbiwgCiAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZykgewogIGlmIChuID49IDApCiAgICB3aGlsZSAobi0tKSArK2k7CiAgZWxzZQogICAg
d2hpbGUgKG4rKykgLS1pOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIFJhbmRvbUFjY2Vzc0l0ZXJh
dG9yLCBjbGFzcyBEaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKFJhbmRvbUFjY2Vzc0l0
ZXJhdG9yJiBpLCBEaXN0YW5jZSBuLCAKICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nl
c3NfaXRlcmF0b3JfdGFnKSB7CiAgaSArPSBuOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVy
YXRvciwgY2xhc3MgRGlzdGFuY2U+CmlubGluZSB2b2lkIGFkdmFuY2UoSW5wdXRJdGVyYXRvciYg
aSwgRGlzdGFuY2UgbikgewogIF9fYWR2YW5jZShpLCBuLCBpdGVyYXRvcl9jYXRlZ29yeShpKSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBDb250YWluZXI+CmNsYXNzIGJhY2tfaW5zZXJ0X2l0ZXJhdG9y
IHsKcHJvdGVjdGVkOgogIENvbnRhaW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBv
dXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAg
ICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZm
ZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlw
ZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKCiAgZXhwbGljaXQgYmFja19pbnNl
cnRfaXRlcmF0b3IoQ29udGFpbmVyJiB4KSA6IGNvbnRhaW5lcigmeCkge30KICBiYWNrX2luc2Vy
dF9pdGVyYXRvcjxDb250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBDb250YWlu
ZXI6OnZhbHVlX3R5cGUmIHZhbHVlKSB7IAogICAgY29udGFpbmVyLT5wdXNoX2JhY2sodmFsdWUp
OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxDb250YWluZXI+
JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPENv
bnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0
ZXJhdG9yPENvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9OwoK
IyAzMzcgIi91c3IvaW5jbHVkZS9nKystMi9zdGxfaXRlcmF0b3IuaCIgMwoKCnRlbXBsYXRlIDxj
bGFzcyBDb250YWluZXI+CmlubGluZSBiYWNrX2luc2VydF9pdGVyYXRvcjxDb250YWluZXI+IGJh
Y2tfaW5zZXJ0ZXIoQ29udGFpbmVyJiB4KSB7CiAgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9y
PENvbnRhaW5lcj4oeCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBDb250YWluZXI+CmNsYXNzIGZyb250
X2luc2VydF9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBDb250YWluZXIqIGNvbnRhaW5lcjsKcHVi
bGljOgogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0
eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAg
ICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAg
ICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7CgogIGV4
cGxpY2l0IGZyb250X2luc2VydF9pdGVyYXRvcihDb250YWluZXImIHgpIDogY29udGFpbmVyKCZ4
KSB7fQogIGZyb250X2luc2VydF9pdGVyYXRvcjxDb250YWluZXI+JgogIG9wZXJhdG9yPShjb25z
dCB0eXBlbmFtZSBDb250YWluZXI6OnZhbHVlX3R5cGUmIHZhbHVlKSB7IAogICAgY29udGFpbmVy
LT5wdXNoX2Zyb250KHZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgZnJvbnRfaW5zZXJ0
X2l0ZXJhdG9yPENvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgZnJv
bnRfaW5zZXJ0X2l0ZXJhdG9yPENvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhp
czsgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxDb250YWluZXI+JiBvcGVyYXRvcisrKGludCkg
eyByZXR1cm4gKnRoaXM7IH0KfTsKCiMgMzc1ICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX2l0ZXJh
dG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ29udGFpbmVyPgppbmxpbmUgZnJvbnRfaW5zZXJ0
X2l0ZXJhdG9yPENvbnRhaW5lcj4gZnJvbnRfaW5zZXJ0ZXIoQ29udGFpbmVyJiB4KSB7CiAgcmV0
dXJuIGZyb250X2luc2VydF9pdGVyYXRvcjxDb250YWluZXI+KHgpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgQ29udGFpbmVyPgpjbGFzcyBpbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgQ29udGFp
bmVyKiBjb250YWluZXI7CiAgdHlwZW5hbWUgQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOwpwdWJs
aWM6CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5
cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAg
ICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAg
IHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKCiAgaW5z
ZXJ0X2l0ZXJhdG9yKENvbnRhaW5lciYgeCwgdHlwZW5hbWUgQ29udGFpbmVyOjppdGVyYXRvciBp
KSAKICAgIDogY29udGFpbmVyKCZ4KSwgaXRlcihpKSB7fQogIGluc2VydF9pdGVyYXRvcjxDb250
YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBDb250YWluZXI6OnZhbHVlX3R5cGUm
IHZhbHVlKSB7IAogICAgaXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIHZhbHVlKTsKICAg
ICsraXRlcjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5zZXJ0X2l0ZXJhdG9yPENvbnRhaW5l
cj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0X2l0ZXJhdG9yPENvbnRh
aW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGluc2VydF9pdGVyYXRvcjxD
b250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCiMgNDE2ICIv
dXNyL2luY2x1ZGUvZysrLTIvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ29u
dGFpbmVyLCBjbGFzcyBJdGVyYXRvcj4KaW5saW5lIGluc2VydF9pdGVyYXRvcjxDb250YWluZXI+
IGluc2VydGVyKENvbnRhaW5lciYgeCwgSXRlcmF0b3IgaSkgewogIHR5cGVkZWYgdHlwZW5hbWUg
Q29udGFpbmVyOjppdGVyYXRvciBpdGVyOwogIHJldHVybiBpbnNlcnRfaXRlcmF0b3I8Q29udGFp
bmVyPih4LCBpdGVyKGkpKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBCaWRpcmVjdGlvbmFsSXRlcmF0
b3IsIGNsYXNzIFQsIGNsYXNzIFJlZmVyZW5jZSA9IFQmLCAKICAgICAgICAgIGNsYXNzIERpc3Rh
bmNlID0gcHRyZGlmZl90PiAKCgoKCmNsYXNzIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRv
ciB7CiAgdHlwZWRlZiByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8QmlkaXJlY3Rpb25h
bEl0ZXJhdG9yLCBULCBSZWZlcmVuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRGlzdGFuY2U+IHNlbGY7CnByb3RlY3RlZDoKICBCaWRpcmVjdGlvbmFsSXRlcmF0
b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcg
aXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBUICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZV90eXBlOwogIHR5cGVkZWYgRGlzdGFuY2UgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5j
ZV90eXBlOwogIHR5cGVkZWYgVCogICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0
eXBlZGVmIFJlZmVyZW5jZSAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKCiAgcmV2ZXJzZV9i
aWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2JpZGlyZWN0aW9u
YWxfaXRlcmF0b3IoQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIHgpCiAgICA6IGN1cnJlbnQoeCkge30K
ICBCaWRpcmVjdGlvbmFsSXRlcmF0b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0K
ICBSZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgQmlkaXJlY3Rpb25hbEl0ZXJhdG9y
IHRtcCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tdG1wOwogIH0KCiAgcG9pbnRlciBvcGVyYXRv
ci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgc2VsZiYgb3BlcmF0b3Ir
KygpIHsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgc2VsZiBvcGVyYXRv
cisrKGludCkgewogICAgc2VsZiB0bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJldHVy
biB0bXA7CiAgfQogIHNlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1
cm4gKnRoaXM7CiAgfQogIHNlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIHNlbGYgdG1wID0gKnRo
aXM7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gdG1wOwogIH0KfTsKCiMgNTAxICIvdXNyL2lu
Y2x1ZGUvZysrLTIvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgQmlkaXJlY3Rp
b25hbEl0ZXJhdG9yLCBjbGFzcyBULCBjbGFzcyBSZWZlcmVuY2UsCiAgICAgICAgICBjbGFzcyBE
aXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PSgKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJl
Y3Rpb25hbF9pdGVyYXRvcjxCaWRpcmVjdGlvbmFsSXRlcmF0b3IsIFQsIFJlZmVyZW5jZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXN0YW5jZT4mIHgsIAogICAg
Y29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPEJpZGlyZWN0aW9uYWxJdGVyYXRv
ciwgVCwgUmVmZXJlbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IERpc3RhbmNlPiYgeSkgewogIHJldHVybiB4LmJhc2UoKSA9PSB5LmJhc2UoKTsKfQoKCgogCiAK
IAogCiAKCnRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcj4KY2xhc3MgcmV2ZXJzZV9pdGVyYXRvciAK
ewpwcm90ZWN0ZWQ6CiAgSXRlcmF0b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgICAgICAg
IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPEl0
ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAg
ZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPEl0ZXJh
dG9yPjo6cG9pbnRlcgogICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxJdGVyYXRvcj46OnJlZmVyZW5jZQogICAgICAgICAgcmVmZXJlbmNlOwoKICB0
eXBlZGVmIEl0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9y
PEl0ZXJhdG9yPiBzZWxmOwoKcHVibGljOgogIHJldmVyc2VfaXRlcmF0b3IoKSB7fQogIGV4cGxp
Y2l0IHJldmVyc2VfaXRlcmF0b3IoaXRlcmF0b3JfdHlwZSB4KSA6IGN1cnJlbnQoeCkge30KCiAg
cmV2ZXJzZV9pdGVyYXRvcihjb25zdCBzZWxmJiB4KSA6IGN1cnJlbnQoeC5jdXJyZW50KSB7fQoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgSXRlcj4KICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2Vf
aXRlcmF0b3I8SXRlcj4mIHgpIDogY3VycmVudCh4LmN1cnJlbnQpIHt9CgogICAgCiAgaXRlcmF0
b3JfdHlwZSBiYXNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVudDsgfQogIHJlZmVyZW5jZSBvcGVy
YXRvciooKSBjb25zdCB7CiAgICBJdGVyYXRvciB0bXAgPSBjdXJyZW50OwogICAgcmV0dXJuICot
LXRtcDsKICB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0
b3IqKCkpOyB9CgoKICBzZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAgcmV0
dXJuICp0aGlzOwogIH0KICBzZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBzZWxmIHRtcCA9ICp0
aGlzOwogICAgLS1jdXJyZW50OwogICAgcmV0dXJuIHRtcDsKICB9CiAgc2VsZiYgb3BlcmF0b3It
LSgpIHsKICAgICsrY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgc2VsZiBvcGVyYXRv
ci0tKGludCkgewogICAgc2VsZiB0bXAgPSAqdGhpczsKICAgICsrY3VycmVudDsKICAgIHJldHVy
biB0bXA7CiAgfQoKICBzZWxmIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgbikgY29uc3Qgewog
ICAgcmV0dXJuIHNlbGYoY3VycmVudCAtIG4pOwogIH0KICBzZWxmJiBvcGVyYXRvcis9KGRpZmZl
cmVuY2VfdHlwZSBuKSB7CiAgICBjdXJyZW50IC09IG47CiAgICByZXR1cm4gKnRoaXM7CiAgfQog
IHNlbGYgb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBuKSBjb25zdCB7CiAgICByZXR1cm4gc2Vs
ZihjdXJyZW50ICsgbik7CiAgfQogIHNlbGYmIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIG4p
IHsKICAgIGN1cnJlbnQgKz0gbjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgcmVmZXJlbmNlIG9w
ZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIG4pIGNvbnN0IHsgcmV0dXJuICooKnRoaXMgKyBuKTsg
fSAgCn07IAogCnRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPEl0ZXJhdG9yPiYgeCwgCiAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxJdGVyYXRvcj4mIHkpIHsKICByZXR1cm4geC5i
YXNlKCkgPT0geS5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcj4KaW5saW5lIGJv
b2wgb3BlcmF0b3I8KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8SXRlcmF0b3I+JiB4LCAKICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8SXRlcmF0b3I+JiB5KSB7CiAg
cmV0dXJuIHkuYmFzZSgpIDwgeC5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcj4K
aW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5
cGUKb3BlcmF0b3ItKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8SXRlcmF0b3I+JiB4LCAKICAgICAg
ICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8SXRlcmF0b3I+JiB5KSB7CiAgcmV0dXJuIHkuYmFz
ZSgpIC0geC5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcj4KaW5saW5lIHJldmVy
c2VfaXRlcmF0b3I8SXRlcmF0b3I+IApvcGVyYXRvcisocmV2ZXJzZV9pdGVyYXRvcjxJdGVyYXRv
cj46OmRpZmZlcmVuY2VfdHlwZSBuLAogICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxJ
dGVyYXRvcj4mIHgpIHsKICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxJdGVyYXRvcj4oeC5iYXNl
KCkgLSBuKTsKfQoKIyA3MzggIi91c3IvaW5jbHVkZS9nKystMi9zdGxfaXRlcmF0b3IuaCIgMwoK
CnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBEaXN0YW5jZSA9IHB0cmRpZmZfdD4gCmNsYXNzIGlz
dHJlYW1faXRlcmF0b3IgewogIGZyaWVuZCBib29sCiAgb3BlcmF0b3I9PSA8PiAgKGNvbnN0IGlz
dHJlYW1faXRlcmF0b3I8VCwgRGlzdGFuY2U+JiB4LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8VCwgRGlzdGFuY2U+JiB5KTsKcHJvdGVj
dGVkOgogIGlzdHJlYW0qIHN0cmVhbTsKICBUIHZhbHVlOwogIGJvb2wgZW5kX21hcmtlcjsKICB2
b2lkIHJlYWQoKSB7CiAgICBlbmRfbWFya2VyID0gKCpzdHJlYW0pID8gdHJ1ZSA6IGZhbHNlOwog
ICAgaWYgKGVuZF9tYXJrZXIpICpzdHJlYW0gPj4gdmFsdWU7CiAgICBlbmRfbWFya2VyID0gKCpz
dHJlYW0pID8gdHJ1ZSA6IGZhbHNlOwogIH0KcHVibGljOgogIHR5cGVkZWYgaW5wdXRfaXRlcmF0
b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgVCAgICAgICAgICAgICAgICAgIHZh
bHVlX3R5cGU7CiAgdHlwZWRlZiBEaXN0YW5jZSAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwog
IHR5cGVkZWYgY29uc3QgVCogICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBUJiAg
ICAgICAgICAgcmVmZXJlbmNlOwoKICBpc3RyZWFtX2l0ZXJhdG9yKCkgOiBzdHJlYW0oJmNpbiks
IGVuZF9tYXJrZXIoZmFsc2UpIHt9CiAgaXN0cmVhbV9pdGVyYXRvcihpc3RyZWFtJiBzKSA6IHN0
cmVhbSgmcykgeyByZWFkKCk7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1
cm4gdmFsdWU7IH0KCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVy
YXRvciooKSk7IH0KCiAgaXN0cmVhbV9pdGVyYXRvcjxULCBEaXN0YW5jZT4mIG9wZXJhdG9yKyso
KSB7IAogICAgcmVhZCgpOyAKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXN0cmVhbV9pdGVyYXRv
cjxULCBEaXN0YW5jZT4gb3BlcmF0b3IrKyhpbnQpICB7CiAgICBpc3RyZWFtX2l0ZXJhdG9yPFQs
IERpc3RhbmNlPiB0bXAgPSAqdGhpczsKICAgIHJlYWQoKTsKICAgIHJldHVybiB0bXA7CiAgfQp9
OwoKIyA3OTQgIi91c3IvaW5jbHVkZS9nKystMi9zdGxfaXRlcmF0b3IuaCIgMwoKCnRlbXBsYXRl
IDxjbGFzcyBULCBjbGFzcyBEaXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBp
c3RyZWFtX2l0ZXJhdG9yPFQsIERpc3RhbmNlPiYgeCwKICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBpc3RyZWFtX2l0ZXJhdG9yPFQsIERpc3RhbmNlPiYgeSkgewogIHJldHVybiB4LnN0cmVh
bSA9PSB5LnN0cmVhbSAmJiB4LmVuZF9tYXJrZXIgPT0geS5lbmRfbWFya2VyIHx8CiAgICAgICAg
IHguZW5kX21hcmtlciA9PSBmYWxzZSAmJiB5LmVuZF9tYXJrZXIgPT0gZmFsc2U7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBUPgpjbGFzcyBvc3RyZWFtX2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIG9zdHJl
YW0qIHN0cmVhbTsKICBjb25zdCBjaGFyKiBzdHJpbmc7CnB1YmxpYzoKICB0eXBlZGVmIG91dHB1
dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAgICAgICAg
ICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVu
Y2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVm
IHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJl
YW0mIHMpIDogc3RyZWFtKCZzKSwgc3RyaW5nKDApIHt9CiAgb3N0cmVhbV9pdGVyYXRvcihvc3Ry
ZWFtJiBzLCBjb25zdCBjaGFyKiBjKSA6IHN0cmVhbSgmcyksIHN0cmluZyhjKSAge30KICBvc3Ry
ZWFtX2l0ZXJhdG9yPFQ+JiBvcGVyYXRvcj0oY29uc3QgVCYgdmFsdWUpIHsgCiAgICAqc3RyZWFt
IDw8IHZhbHVlOwogICAgaWYgKHN0cmluZykgKnN0cmVhbSA8PCBzdHJpbmc7CiAgICByZXR1cm4g
KnRoaXM7CiAgfQogIG9zdHJlYW1faXRlcmF0b3I8VD4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0
aGlzOyB9CiAgb3N0cmVhbV9pdGVyYXRvcjxUPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlz
OyB9IAogIG9zdHJlYW1faXRlcmF0b3I8VD4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhp
czsgfSAKfTsKCiMgODM1ICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX2l0ZXJhdG9yLmgiIDMKCgog
CgoKCiAKIAogCiMgNTYgIi91c3IvaW5jbHVkZS9nKystMi9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoK
CiAKCnRlbXBsYXRlIDxjbGFzcyBGb3J3YXJkSXRlcmF0b3IxLCBjbGFzcyBGb3J3YXJkSXRlcmF0
b3IyLCBjbGFzcyBUPgppbmxpbmUgdm9pZCBfX2l0ZXJfc3dhcChGb3J3YXJkSXRlcmF0b3IxIGEs
IEZvcndhcmRJdGVyYXRvcjIgYiwgVCopIHsKICBUIHRtcCA9ICphOwogICphID0gKmI7CiAgKmIg
PSB0bXA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBGb3J3YXJkSXRlcmF0b3IxLCBjbGFzcyBGb3J3YXJk
SXRlcmF0b3IyPgppbmxpbmUgdm9pZCBpdGVyX3N3YXAoRm9yd2FyZEl0ZXJhdG9yMSBhLCBGb3J3
YXJkSXRlcmF0b3IyIGIpIHsKICBfX2l0ZXJfc3dhcChhLCBiLCB2YWx1ZV90eXBlKGEpKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZSB2b2lkIHN3YXAoVCYgYSwgVCYgYikgewogIFQgdG1w
ID0gYTsKICBhID0gYjsKICBiID0gdG1wOwp9CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxp
bmUgY29uc3QgVCYgbWluKGNvbnN0IFQmIGEsIGNvbnN0IFQmIGIpIHsKICByZXR1cm4gYiA8IGEg
PyBiIDogYTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZSBjb25zdCBUJiBtYXgoY29uc3Qg
VCYgYSwgY29uc3QgVCYgYikgewogIHJldHVybiAgYSA8IGIgPyBiIDogYTsKfQoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgVCwgY2xhc3MgQ29tcGFyZT4KaW5saW5lIGNvbnN0IFQmIG1pbihjb25zdCBUJiBh
LCBjb25zdCBUJiBiLCBDb21wYXJlIGNvbXApIHsKICByZXR1cm4gY29tcChiLCBhKSA/IGIgOiBh
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgQ29tcGFyZT4KaW5saW5lIGNvbnN0IFQmIG1h
eChjb25zdCBUJiBhLCBjb25zdCBUJiBiLCBDb21wYXJlIGNvbXApIHsKICByZXR1cm4gY29tcChh
LCBiKSA/IGIgOiBhOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgT3V0
cHV0SXRlcmF0b3I+CmlubGluZSBPdXRwdXRJdGVyYXRvciBfX2NvcHkoSW5wdXRJdGVyYXRvciBm
aXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91
dHB1dEl0ZXJhdG9yIHJlc3VsdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgZm9yICggOyBmaXJz
dCAhPSBsYXN0OyArK3Jlc3VsdCwgKytmaXJzdCkKICAgICpyZXN1bHQgPSAqZmlyc3Q7CiAgcmV0
dXJuIHJlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIFJhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFz
cyBPdXRwdXRJdGVyYXRvciwgY2xhc3MgRGlzdGFuY2U+CmlubGluZSBPdXRwdXRJdGVyYXRvcgpf
X2NvcHlfZChSYW5kb21BY2Nlc3NJdGVyYXRvciBmaXJzdCwgUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
bGFzdCwKICAgICAgICAgT3V0cHV0SXRlcmF0b3IgcmVzdWx0LCBEaXN0YW5jZSopCnsKICBmb3Ig
KERpc3RhbmNlIG4gPSBsYXN0IC0gZmlyc3Q7IG4gPiAwOyAtLW4sICsrcmVzdWx0LCArK2ZpcnN0
KSAKICAgICpyZXN1bHQgPSAqZmlyc3Q7CiAgcmV0dXJuIHJlc3VsdDsKfQoKdGVtcGxhdGUgPGNs
YXNzIFJhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBPdXRwdXRJdGVyYXRvcj4KaW5saW5lIE91
dHB1dEl0ZXJhdG9yIApfX2NvcHkoUmFuZG9tQWNjZXNzSXRlcmF0b3IgZmlyc3QsIFJhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIGxhc3QsCiAgICAgICBPdXRwdXRJdGVyYXRvciByZXN1bHQsIHJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnKQp7CiAgcmV0dXJuIF9fY29weV9kKGZpcnN0LCBsYXN0LCByZXN1
bHQsIGRpc3RhbmNlX3R5cGUoZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0
b3IsIGNsYXNzIE91dHB1dEl0ZXJhdG9yPgpzdHJ1Y3QgX19jb3B5X2Rpc3BhdGNoCnsKICBPdXRw
dXRJdGVyYXRvciBvcGVyYXRvcigpKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3Ig
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dEl0ZXJhdG9yIHJlc3VsdCkg
ewogICAgcmV0dXJuIF9fY29weShmaXJzdCwgbGFzdCwgcmVzdWx0LCBpdGVyYXRvcl9jYXRlZ29y
eShmaXJzdCkpOwogIH0KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZSBUKiBfX2NvcHlf
dChjb25zdCBUKiBmaXJzdCwgY29uc3QgVCogbGFzdCwgVCogcmVzdWx0LCBfX3RydWVfdHlwZSkg
ewogIG1lbW1vdmUocmVzdWx0LCBmaXJzdCwgc2l6ZW9mKFQpICogKGxhc3QgLSBmaXJzdCkpOwog
IHJldHVybiByZXN1bHQgKyAobGFzdCAtIGZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+Cmlu
bGluZSBUKiBfX2NvcHlfdChjb25zdCBUKiBmaXJzdCwgY29uc3QgVCogbGFzdCwgVCogcmVzdWx0
LCBfX2ZhbHNlX3R5cGUpIHsKICByZXR1cm4gX19jb3B5X2QoZmlyc3QsIGxhc3QsIHJlc3VsdCwg
KHB0cmRpZmZfdCopIDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4Kc3RydWN0IF9fY29weV9kaXNw
YXRjaDxUKiwgVCo+CnsKICBUKiBvcGVyYXRvcigpKFQqIGZpcnN0LCBUKiBsYXN0LCBUKiByZXN1
bHQpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxUPjo6aGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvciB0OyAKICAgIHJldHVybiBfX2NvcHlfdChmaXJzdCwgbGFzdCwg
cmVzdWx0LCB0KCkpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgpzdHJ1Y3QgX19jb3B5X2Rp
c3BhdGNoPGNvbnN0IFQqLCBUKj4KewogIFQqIG9wZXJhdG9yKCkoY29uc3QgVCogZmlyc3QsIGNv
bnN0IFQqIGxhc3QsIFQqIHJlc3VsdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh
aXRzPFQ+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yIHQ7IAogICAgcmV0dXJuIF9f
Y29weV90KGZpcnN0LCBsYXN0LCByZXN1bHQsIHQoKSk7CiAgfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgT3V0cHV0SXRlcmF0b3I+CmlubGluZSBPdXRwdXRJdGVy
YXRvciBjb3B5KElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0SXRlcmF0b3IgcmVzdWx0KQp7CiAgcmV0dXJuIF9f
Y29weV9kaXNwYXRjaDxJbnB1dEl0ZXJhdG9yLE91dHB1dEl0ZXJhdG9yPigpKGZpcnN0LCBsYXN0
LCByZXN1bHQpOwp9CgppbmxpbmUgY2hhciogY29weShjb25zdCBjaGFyKiBmaXJzdCwgY29uc3Qg
Y2hhciogbGFzdCwgY2hhciogcmVzdWx0KSB7CiAgbWVtbW92ZShyZXN1bHQsIGZpcnN0LCBsYXN0
IC0gZmlyc3QpOwogIHJldHVybiByZXN1bHQgKyAobGFzdCAtIGZpcnN0KTsKfQoKaW5saW5lIHdj
aGFyX3QqIGNvcHkoY29uc3Qgd2NoYXJfdCogZmlyc3QsIGNvbnN0IHdjaGFyX3QqIGxhc3QsCiAg
ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QqIHJlc3VsdCkgewogIG1lbW1vdmUocmVzdWx0LCBm
aXJzdCwgc2l6ZW9mKHdjaGFyX3QpICogKGxhc3QgLSBmaXJzdCkpOwogIHJldHVybiByZXN1bHQg
KyAobGFzdCAtIGZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIEJpZGlyZWN0aW9uYWxJdGVyYXRv
cjEsIGNsYXNzIEJpZGlyZWN0aW9uYWxJdGVyYXRvcjI+CmlubGluZSBCaWRpcmVjdGlvbmFsSXRl
cmF0b3IyIF9fY29weV9iYWNrd2FyZChCaWRpcmVjdGlvbmFsSXRlcmF0b3IxIGZpcnN0LCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZGlyZWN0aW9uYWxJ
dGVyYXRvcjEgbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBCaWRpcmVjdGlvbmFsSXRlcmF0b3IyIHJlc3VsdCkgewogIHdoaWxlIChmaXJzdCAhPSBs
YXN0KSAqLS1yZXN1bHQgPSAqLS1sYXN0OwogIHJldHVybiByZXN1bHQ7Cn0KCgp0ZW1wbGF0ZSA8
Y2xhc3MgQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMSwgY2xhc3MgQmlkaXJlY3Rpb25hbEl0ZXJhdG9y
Mj4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaAp7CiAgQmlkaXJlY3Rpb25hbEl0ZXJh
dG9yMiBvcGVyYXRvcigpKEJpZGlyZWN0aW9uYWxJdGVyYXRvcjEgZmlyc3QsIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCaWRpcmVjdGlvbmFsSXRlcmF0b3IxIGxhc3QsIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWRpcmVjdGlvbmFsSXRlcmF0b3Iy
IHJlc3VsdCkgewogICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZChmaXJzdCwgbGFzdCwgcmVzdWx0
KTsKICB9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUgVCogX19jb3B5X2JhY2t3YXJk
X3QoY29uc3QgVCogZmlyc3QsIGNvbnN0IFQqIGxhc3QsIFQqIHJlc3VsdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKSB7CiAgY29uc3QgcHRyZGlmZl90IE4gPSBsYXN0
IC0gZmlyc3Q7CiAgbWVtbW92ZShyZXN1bHQgLSBOLCBmaXJzdCwgc2l6ZW9mKFQpICogTik7CiAg
cmV0dXJuIHJlc3VsdCAtIE47Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUgVCogX19jb3B5
X2JhY2t3YXJkX3QoY29uc3QgVCogZmlyc3QsIGNvbnN0IFQqIGxhc3QsIFQqIHJlc3VsdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogIHJldHVybiBfX2NvcHlf
YmFja3dhcmQoZmlyc3QsIGxhc3QsIHJlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgpzdHJ1
Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPFQqLCBUKj4KewogIFQqIG9wZXJhdG9yKCkoVCog
Zmlyc3QsIFQqIGxhc3QsIFQqIHJlc3VsdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVf
dHJhaXRzPFQ+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yIHQ7IAogICAgcmV0dXJu
IF9fY29weV9iYWNrd2FyZF90KGZpcnN0LCBsYXN0LCByZXN1bHQsIHQoKSk7CiAgfQp9OwoKdGVt
cGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8Y29uc3QgVCos
IFQqPgp7CiAgVCogb3BlcmF0b3IoKShjb25zdCBUKiBmaXJzdCwgY29uc3QgVCogbGFzdCwgVCog
cmVzdWx0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8VD46Omhhc190cml2
aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IgdDsgCiAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX3Qo
Zmlyc3QsIGxhc3QsIHJlc3VsdCwgdCgpKTsKICB9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBCaWRp
cmVjdGlvbmFsSXRlcmF0b3IxLCBjbGFzcyBCaWRpcmVjdGlvbmFsSXRlcmF0b3IyPgppbmxpbmUg
QmlkaXJlY3Rpb25hbEl0ZXJhdG9yMiBjb3B5X2JhY2t3YXJkKEJpZGlyZWN0aW9uYWxJdGVyYXRv
cjEgZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJp
ZGlyZWN0aW9uYWxJdGVyYXRvcjEgbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMiByZXN1bHQpIHsKICByZXR1cm4g
X19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPEJpZGlyZWN0aW9uYWxJdGVyYXRvcjEsIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMj4oKShmaXJz
dCwgbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yLCBj
bGFzcyBTaXplLCBjbGFzcyBPdXRwdXRJdGVyYXRvcj4KcGFpcjxJbnB1dEl0ZXJhdG9yLCBPdXRw
dXRJdGVyYXRvcj4gX19jb3B5X24oSW5wdXRJdGVyYXRvciBmaXJzdCwgU2l6ZSBjb3VudCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0SXRlcmF0b3Ig
cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1
dF9pdGVyYXRvcl90YWcpIHsKICBmb3IgKCA7IGNvdW50ID4gMDsgLS1jb3VudCwgKytmaXJzdCwg
KytyZXN1bHQpCiAgICAqcmVzdWx0ID0gKmZpcnN0OwogIHJldHVybiBwYWlyPElucHV0SXRlcmF0
b3IsIE91dHB1dEl0ZXJhdG9yPihmaXJzdCwgcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIFJh
bmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBTaXplLCBjbGFzcyBPdXRwdXRJdGVyYXRvcj4KaW5s
aW5lIHBhaXI8UmFuZG9tQWNjZXNzSXRlcmF0b3IsIE91dHB1dEl0ZXJhdG9yPgpfX2NvcHlfbihS
YW5kb21BY2Nlc3NJdGVyYXRvciBmaXJzdCwgU2l6ZSBjb3VudCwKICAgICAgICAgT3V0cHV0SXRl
cmF0b3IgcmVzdWx0LAogICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIFJh
bmRvbUFjY2Vzc0l0ZXJhdG9yIGxhc3QgPSBmaXJzdCArIGNvdW50OwogIHJldHVybiBwYWlyPFJh
bmRvbUFjY2Vzc0l0ZXJhdG9yLCBPdXRwdXRJdGVyYXRvcj4obGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkoZmlyc3QsIGxhc3QsIHJl
c3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgU2l6ZSwgY2xh
c3MgT3V0cHV0SXRlcmF0b3I+CmlubGluZSBwYWlyPElucHV0SXRlcmF0b3IsIE91dHB1dEl0ZXJh
dG9yPgpjb3B5X24oSW5wdXRJdGVyYXRvciBmaXJzdCwgU2l6ZSBjb3VudCwKICAgICAgIE91dHB1
dEl0ZXJhdG9yIHJlc3VsdCkgewogIHJldHVybiBfX2NvcHlfbihmaXJzdCwgY291bnQsIHJlc3Vs
dCwgaXRlcmF0b3JfY2F0ZWdvcnkoZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEZvcndhcmRJ
dGVyYXRvciwgY2xhc3MgVD4Kdm9pZCBmaWxsKEZvcndhcmRJdGVyYXRvciBmaXJzdCwgRm9yd2Fy
ZEl0ZXJhdG9yIGxhc3QsIGNvbnN0IFQmIHZhbHVlKSB7CiAgZm9yICggOyBmaXJzdCAhPSBsYXN0
OyArK2ZpcnN0KQogICAgKmZpcnN0ID0gdmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBPdXRwdXRJ
dGVyYXRvciwgY2xhc3MgU2l6ZSwgY2xhc3MgVD4KT3V0cHV0SXRlcmF0b3IgZmlsbF9uKE91dHB1
dEl0ZXJhdG9yIGZpcnN0LCBTaXplIG4sIGNvbnN0IFQmIHZhbHVlKSB7CiAgZm9yICggOyBuID4g
MDsgLS1uLCArK2ZpcnN0KQogICAgKmZpcnN0ID0gdmFsdWU7CiAgcmV0dXJuIGZpcnN0Owp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcjEsIGNsYXNzIElucHV0SXRlcmF0b3IyPgpwYWly
PElucHV0SXRlcmF0b3IxLCBJbnB1dEl0ZXJhdG9yMj4gbWlzbWF0Y2goSW5wdXRJdGVyYXRvcjEg
Zmlyc3QxLAoJCQkJCSAgICAgIElucHV0SXRlcmF0b3IxIGxhc3QxLAoJCQkJCSAgICAgIElucHV0
SXRlcmF0b3IyIGZpcnN0MikgewogIHdoaWxlIChmaXJzdDEgIT0gbGFzdDEgJiYgKmZpcnN0MSA9
PSAqZmlyc3QyKSB7CiAgICArK2ZpcnN0MTsKICAgICsrZmlyc3QyOwogIH0KICByZXR1cm4gcGFp
cjxJbnB1dEl0ZXJhdG9yMSwgSW5wdXRJdGVyYXRvcjI+KGZpcnN0MSwgZmlyc3QyKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3IxLCBjbGFzcyBJbnB1dEl0ZXJhdG9yMiwgY2xhc3Mg
QmluYXJ5UHJlZGljYXRlPgpwYWlyPElucHV0SXRlcmF0b3IxLCBJbnB1dEl0ZXJhdG9yMj4gbWlz
bWF0Y2goSW5wdXRJdGVyYXRvcjEgZmlyc3QxLAoJCQkJCSAgICAgIElucHV0SXRlcmF0b3IxIGxh
c3QxLAoJCQkJCSAgICAgIElucHV0SXRlcmF0b3IyIGZpcnN0MiwKCQkJCQkgICAgICBCaW5hcnlQ
cmVkaWNhdGUgYmluYXJ5X3ByZWQpIHsKICB3aGlsZSAoZmlyc3QxICE9IGxhc3QxICYmIGJpbmFy
eV9wcmVkKCpmaXJzdDEsICpmaXJzdDIpKSB7CiAgICArK2ZpcnN0MTsKICAgICsrZmlyc3QyOwog
IH0KICByZXR1cm4gcGFpcjxJbnB1dEl0ZXJhdG9yMSwgSW5wdXRJdGVyYXRvcjI+KGZpcnN0MSwg
Zmlyc3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3IxLCBjbGFzcyBJbnB1dEl0
ZXJhdG9yMj4KaW5saW5lIGJvb2wgZXF1YWwoSW5wdXRJdGVyYXRvcjEgZmlyc3QxLCBJbnB1dEl0
ZXJhdG9yMSBsYXN0MSwKCQkgIElucHV0SXRlcmF0b3IyIGZpcnN0MikgewogIGZvciAoIDsgZmly
c3QxICE9IGxhc3QxOyArK2ZpcnN0MSwgKytmaXJzdDIpCiAgICBpZiAoKmZpcnN0MSAhPSAqZmly
c3QyKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBJbnB1dEl0ZXJhdG9yMSwgY2xhc3MgSW5wdXRJdGVyYXRvcjIsIGNsYXNzIEJpbmFyeVByZWRp
Y2F0ZT4KaW5saW5lIGJvb2wgZXF1YWwoSW5wdXRJdGVyYXRvcjEgZmlyc3QxLCBJbnB1dEl0ZXJh
dG9yMSBsYXN0MSwKCQkgIElucHV0SXRlcmF0b3IyIGZpcnN0MiwgQmluYXJ5UHJlZGljYXRlIGJp
bmFyeV9wcmVkKSB7CiAgZm9yICggOyBmaXJzdDEgIT0gbGFzdDE7ICsrZmlyc3QxLCArK2ZpcnN0
MikKICAgIGlmICghYmluYXJ5X3ByZWQoKmZpcnN0MSwgKmZpcnN0MikpCiAgICAgIHJldHVybiBm
YWxzZTsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3IxLCBj
bGFzcyBJbnB1dEl0ZXJhdG9yMj4KYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShJbnB1dEl0
ZXJhdG9yMSBmaXJzdDEsIElucHV0SXRlcmF0b3IxIGxhc3QxLAoJCQkgICAgIElucHV0SXRlcmF0
b3IyIGZpcnN0MiwgSW5wdXRJdGVyYXRvcjIgbGFzdDIpIHsKICBmb3IgKCA7IGZpcnN0MSAhPSBs
YXN0MSAmJiBmaXJzdDIgIT0gbGFzdDI7ICsrZmlyc3QxLCArK2ZpcnN0MikgewogICAgaWYgKCpm
aXJzdDEgPCAqZmlyc3QyKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmICgqZmlyc3QyIDwgKmZp
cnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gZmlyc3QxID09IGxhc3QxICYm
IGZpcnN0MiAhPSBsYXN0MjsKfQoKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3IxLCBjbGFz
cyBJbnB1dEl0ZXJhdG9yMiwgY2xhc3MgQ29tcGFyZT4KYm9vbCBsZXhpY29ncmFwaGljYWxfY29t
cGFyZShJbnB1dEl0ZXJhdG9yMSBmaXJzdDEsIElucHV0SXRlcmF0b3IxIGxhc3QxLAoJCQkgICAg
IElucHV0SXRlcmF0b3IyIGZpcnN0MiwgSW5wdXRJdGVyYXRvcjIgbGFzdDIsCgkJCSAgICAgQ29t
cGFyZSBjb21wKSB7CiAgZm9yICggOyBmaXJzdDEgIT0gbGFzdDEgJiYgZmlyc3QyICE9IGxhc3Qy
OyArK2ZpcnN0MSwgKytmaXJzdDIpIHsKICAgIGlmIChjb21wKCpmaXJzdDEsICpmaXJzdDIpKQog
ICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChjb21wKCpmaXJzdDIsICpmaXJzdDEpKQogICAgICBy
ZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBmaXJzdDEgPT0gbGFzdDEgJiYgZmlyc3QyICE9IGxh
c3QyOwp9CgppbmxpbmUgYm9vbCAKbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgdW5zaWdu
ZWQgY2hhciogZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBj
aGFyKiBsYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciog
Zmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBsYXN0
MikKewogIGNvbnN0IHNpemVfdCBsZW4xID0gbGFzdDEgLSBmaXJzdDE7CiAgY29uc3Qgc2l6ZV90
IGxlbjIgPSBsYXN0MiAtIGZpcnN0MjsKICBjb25zdCBpbnQgcmVzdWx0ID0gbWVtY21wKGZpcnN0
MSwgZmlyc3QyLCBtaW4obGVuMSwgbGVuMikpOwogIHJldHVybiByZXN1bHQgIT0gMCA/IHJlc3Vs
dCA8IDAgOiBsZW4xIDwgbGVuMjsKfQoKaW5saW5lIGJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBh
cmUoY29uc3QgY2hhciogZmlyc3QxLCBjb25zdCBjaGFyKiBsYXN0MSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZmlyc3QyLCBjb25zdCBjaGFyKiBsYXN0
MikKewoKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKGNvbnN0IHNpZ25lZCBjaGFy
KikgZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVk
IGNoYXIqKSBsYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNp
Z25lZCBjaGFyKikgZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29u
c3Qgc2lnbmVkIGNoYXIqKSBsYXN0Mik7CgoKCgoKCn0KCnRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0
ZXJhdG9yMSwgY2xhc3MgSW5wdXRJdGVyYXRvcjI+CmludCBsZXhpY29ncmFwaGljYWxfY29tcGFy
ZV8zd2F5KElucHV0SXRlcmF0b3IxIGZpcnN0MSwgSW5wdXRJdGVyYXRvcjEgbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0SXRlcmF0b3IyIGZpcnN0MiwgSW5wdXRJ
dGVyYXRvcjIgbGFzdDIpCnsKICB3aGlsZSAoZmlyc3QxICE9IGxhc3QxICYmIGZpcnN0MiAhPSBs
YXN0MikgewogICAgaWYgKCpmaXJzdDEgPCAqZmlyc3QyKSByZXR1cm4gLTE7CiAgICBpZiAoKmZp
cnN0MiA8ICpmaXJzdDEpIHJldHVybiAxOwogICAgKytmaXJzdDE7ICsrZmlyc3QyOwogIH0KICBp
ZiAoZmlyc3QyID09IGxhc3QyKSB7CiAgICByZXR1cm4gIShmaXJzdDEgPT0gbGFzdDEpOwogIH0g
ZWxzZSB7CiAgICByZXR1cm4gLTE7CiAgfQp9CgppbmxpbmUgaW50CmxleGljb2dyYXBoaWNhbF9j
b21wYXJlXzN3YXkoY29uc3QgdW5zaWduZWQgY2hhciogZmlyc3QxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGxhc3QxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGZpcnN0MiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBsYXN0MikKewogIGNvbnN0IHB0cmRp
ZmZfdCBsZW4xID0gbGFzdDEgLSBmaXJzdDE7CiAgY29uc3QgcHRyZGlmZl90IGxlbjIgPSBsYXN0
MiAtIGZpcnN0MjsKICBjb25zdCBpbnQgcmVzdWx0ID0gbWVtY21wKGZpcnN0MSwgZmlyc3QyLCBt
aW4obGVuMSwgbGVuMikpOwogIHJldHVybiByZXN1bHQgIT0gMCA/IHJlc3VsdCA6IChsZW4xID09
IGxlbjIgPyAwIDogKGxlbjEgPCBsZW4yID8gLTEgOiAxKSk7Cn0KCmlubGluZSBpbnQgbGV4aWNv
Z3JhcGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCBjaGFyKiBmaXJzdDEsIGNvbnN0IGNoYXIqIGxh
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
Zmlyc3QyLCBjb25zdCBjaGFyKiBsYXN0MikKewoKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2Nv
bXBhcmVfM3dheSgKCQkJCShjb25zdCBzaWduZWQgY2hhciopIGZpcnN0MSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBsYXN0MSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBmaXJzdDIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgbGFzdDIpOwoK
CgoKCgp9CgogCgoKCiAKIAogCiMgMzAgIi91c3IvaW5jbHVkZS9nKystMi92ZWN0b3IiIDIgMwoK
IyAxICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX2FsbG9jLmgiIDEgMwogCgoKCgoKCgoKCgoKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCiAKIAogCiAKIAogCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3Iv
bGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRl
Zi5oIiAxIDMKIyAzNDIgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3Mt
Mi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgojIDU2ICIvdXNyL2luY2x1ZGUvZysrLTIvc3Rs
X2FsbG9jLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMSAzCiAKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCiMgMzIgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwoKCgoKCiAKCgoK
CiMgNTYgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwoKCmV4dGVybiAiQyIgeyAKCiAKZXh0ZXJu
IHZvaWQgX19hc3NlcnRfZmFpbCAgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sCgkJCQlfX2Nv
bnN0IGNoYXIgKl9fZmlsZSwKCQkJCXVuc2lnbmVkIGludCBfX2xpbmUsCgkJCQlfX2NvbnN0IGNo
YXIgKl9fZnVuY3Rpb24pICB0aHJvdyAoKSAgCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1
cm5fXykpOwoKIApleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAgKGludCBfX2Vycm51
bSwKCQkJCSAgICAgICBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKCQkJCSAgICAgICB1bnNpZ25lZCBp
bnQgX19saW5lLAoJCQkJICAgICAgIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikgIHRocm93ICgp
ICAKICAgICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7Cgp9IAoKCgoKCgoKCgoKCgoK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDU5ICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX2FsbG9j
LmgiIDIgMwoKCgoKCgoKCgoKCiAgICAgCiAgICAgCiAgICAgCiMgMSAiL3Vzci9pbmNsdWRlL3B0
aHJlYWQuaCIgMSAzCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCgoKCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvc2NoZWQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAojIDEg
Ii91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKIAoKCgoKCiAKCgoKCgoKCgoKCgogCnN0cnVjdCBzY2hlZF9wYXJhbQogIHsKICAgIGludCBz
Y2hlZF9wcmlvcml0eTsKICB9OwoKZXh0ZXJuICJDIiB7IAoKIAoKZXh0ZXJuIGludCBjbG9uZSAg
KGludCAoKl9fZm4pICh2b2lkICpfX2FyZyksIHZvaWQgKl9fY2hpbGRfc3RhY2ssCgkJICAgICAg
IGludCBfX2ZsYWdzLCB2b2lkICpfX2FyZykgIHRocm93ICgpICA7CgoKfSAKCgoKCgoKIApzdHJ1
Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBzY2hlZF9wcmlvcml0eTsKICB9OwoKCiMgMzIg
Ii91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCgpleHRlcm4gIkMiIHsgCgogCmV4dGVybiBpbnQg
X19zY2hlZF9zZXRwYXJhbSAgKF9fcGlkX3QgX19waWQsCgkJCQkgIF9fY29uc3Qgc3RydWN0IHNj
aGVkX3BhcmFtICpfX3BhcmFtKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBzY2hlZF9zZXRwYXJh
bSAgKF9fcGlkX3QgX19waWQsCgkJCQlfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJh
bSkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgX19zY2hlZF9nZXRwYXJhbSAgKF9fcGlkX3Qg
X19waWQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIHRocm93ICgpICA7CmV4dGVybiBp
bnQgc2NoZWRfZ2V0cGFyYW0gIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9f
cGFyYW0pICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IF9fc2NoZWRfc2V0c2NoZWR1bGVyICAo
X19waWRfdCBfX3BpZCwgaW50IF9fcG9saWN5LAoJCQkJICAgICAgX19jb25zdCBzdHJ1Y3Qgc2No
ZWRfcGFyYW0gKl9fcGFyYW0pICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHNjaGVkX3NldHNjaGVk
dWxlciAgKF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwKCQkJCSAgICBfX2NvbnN0IHN0cnVj
dCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgX19zY2hl
ZF9nZXRzY2hlZHVsZXIgIChfX3BpZF90IF9fcGlkKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBz
Y2hlZF9nZXRzY2hlZHVsZXIgIChfX3BpZF90IF9fcGlkKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJu
IGludCBfX3NjaGVkX3lpZWxkICAodm9pZCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgc2NoZWRf
eWllbGQgICh2b2lkKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBfX3NjaGVkX2dldF9wcmlv
cml0eV9tYXggIChpbnQgX19hbGdvcml0aG0pICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHNjaGVk
X2dldF9wcmlvcml0eV9tYXggIChpbnQgX19hbGdvcml0aG0pICB0aHJvdyAoKSAgOwoKIApleHRl
cm4gaW50IF9fc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgKGludCBfX2FsZ29yaXRobSkgIHRocm93
ICgpICA7CmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgKGludCBfX2FsZ29yaXRo
bSkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgX19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgIChf
X3BpZF90IF9fcGlkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdCkgIHRocm93ICgpICA7CmV4dGVybiBp
bnQgc2NoZWRfcnJfZ2V0X2ludGVydmFsICAoX19waWRfdCBfX3BpZCwgc3RydWN0IHRpbWVzcGVj
ICpfX3QpICB0aHJvdyAoKSAgOwoKfSAKCgojIDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAy
IDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCgoKCgpleHRlcm4gIkMiIHsgCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3Nl
dC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgojIDMzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdz
ZXQuaCIgMwoKCgogCgoKCgoKIyAxMjUgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzCgoj
IDMzICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMwoKCiAKCgoKCgoKCgoKCgoKCnR5cGVkZWYg
X19zaWdzZXRfdCBzaWdzZXRfdDsKCgoKIyAzNTIgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwoK
Cn0gCgoKIyAyNCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCgoK
CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoK
CgoKCgojIDYyICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAzCgoKIyA3MyAiL3Vzci9pbmNs
dWRlL2JpdHMvc2NoZWQuaCIgMwoKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVz
LmgiIDIgMwoKCiAKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1
czsgICAgICAgICAgICAgCiAgaW50IF9fc3BpbmxvY2s7ICAgICAgICAgICAgICAgIAp9OwoKCiAK
dHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoK
CiAKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9s
aWN5OwogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0
c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNr
YWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0
aHJlYWRfYXR0cl90OwoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0
bG9jayBfX2NfbG9jazsgIAogIF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOyAgICAgICAgIAp9
IHB0aHJlYWRfY29uZF90OwoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0
aHJlYWRfY29uZGF0dHJfdDsKCiAKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsK
CgogCiAKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOyAgICAgICAgICAgICAg
ICAKICBpbnQgX19tX2NvdW50OyAgICAgICAgICAgICAgICAgICAKICBfcHRocmVhZF9kZXNjciBf
X21fb3duZXI7ICAgICAgICAKICBpbnQgX19tX2tpbmQ7ICAgICAgICAgICAgICAgICAgICAKICBz
dHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7ICAKfSBwdGhyZWFkX211dGV4X3Q7CgoK
IAp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRy
X3Q7CgoKIAp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgojIDExNiAiL3Vzci9pbmNsdWRl
L2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0
aHJlYWRfdDsKCgojIDI1ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCgoKZXh0ZXJuICJD
IiB7IAoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKZW51bQp7CiAgUFRIUkVBRF9DUkVBVEVfSk9JTkFC
TEUsCgogIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9JTkhF
UklUX1NDSEVELAoKICBQVEhSRUFEX0VYUExJQ0lUX1NDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVB
RF9TQ09QRV9TWVNURU0sCgogIFBUSFJFQURfU0NPUEVfUFJPQ0VTUwoKfTsKCmVudW0KewogIFBU
SFJFQURfTVVURVhfRkFTVF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhS
RUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAKCgoKCgoKCn07CgplbnVtCnsKICBQVEhSRUFEX1BST0NF
U1NfUFJJVkFURSwKCiAgUFRIUkVBRF9QUk9DRVNTX1NIQVJFRAoKfTsKCgoKCgoKCgoKCgoKIAoK
c3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyCnsKICB2b2lkICgqX19yb3V0aW5lKSAgKHZv
aWQgKikgIDsJICAgCiAgdm9pZCAqX19hcmc7CQkJCSAgIAogIGludCBfX2NhbmNlbHR5cGU7CQkJ
ICAgCiAgc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX3ByZXY7ICAKfTsKCiAKCmVu
dW0KewogIFBUSFJFQURfQ0FOQ0VMX0VOQUJMRSwKCiAgUFRIUkVBRF9DQU5DRUxfRElTQUJMRQoK
fTsKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfREVGRVJSRUQsCgogIFBUSFJFQURfQ0FOQ0VMX0FT
WU5DSFJPTk9VUwoKfTsKCgoKIAoKIAoKCmV4dGVybiBpbnQgcHRocmVhZF9jcmVhdGUgIChwdGhy
ZWFkX3QgKl9fdGhyZWFkLAoJCQkJX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAoJCQkJ
dm9pZCAqKCpfX3N0YXJ0X3JvdXRpbmUpICh2b2lkICopLAoJCQkJdm9pZCAqX19hcmcpICB0aHJv
dyAoKSAgOwoKIApleHRlcm4gcHRocmVhZF90IHB0aHJlYWRfc2VsZiAgKHZvaWQpICB0aHJvdyAo
KSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfZXF1YWwgIChwdGhyZWFkX3QgX190aHJlYWQxLCBw
dGhyZWFkX3QgX190aHJlYWQyKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgcHRocmVhZF9l
eGl0ICAodm9pZCAqX19yZXR2YWwpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0
dXJuX18pKTsKCiAKCgpleHRlcm4gaW50IHB0aHJlYWRfam9pbiAgKHB0aHJlYWRfdCBfX3RoLCB2
b2lkICoqX190aHJlYWRfcmV0dXJuKSAgdGhyb3cgKCkgIDsKCiAKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX2RldGFjaCAgKHB0aHJlYWRfdCBfX3RoKSAgdGhyb3cgKCkgIDsKCgogCgogCgoKZXh0ZXJu
IGludCBwdGhyZWFkX2F0dHJfaW5pdCAgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpICB0aHJvdyAo
KSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9kZXN0cm95ICAocHRocmVhZF9hdHRyX3Qg
Kl9fYXR0cikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGRldGFj
aHN0YXRlICAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKCQkJCQkgICAgIGludCBfX2RldGFjaHN0
YXRlKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3Rh
dGUgIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCgkJCQkJICAgICBpbnQgKl9fZGV0
YWNoc3RhdGUpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hl
ZHBhcmFtICAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKCQkJCSAgICAgICAgX19jb25zdCBzdHJ1
Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJl
YWRfYXR0cl9nZXRzY2hlZHBhcmFtICAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAoJ
CQkJCSAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pICB0aHJvdyAoKSAgOwoKIApleHRl
cm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeSAgKHB0aHJlYWRfYXR0cl90ICpfX2F0
dHIsCgkJCQkJICAgICBpbnQgX19wb2xpY3kpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0
aHJlYWRfYXR0cl9nZXRzY2hlZHBvbGljeSAgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0
ciwKCQkJCQkgICAgIGludCAqX19wb2xpY3kpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0
aHJlYWRfYXR0cl9zZXRpbmhlcml0c2NoZWQgIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAoJCQkJ
CSAgICAgIGludCBfX2luaGVyaXQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRf
YXR0cl9nZXRpbmhlcml0c2NoZWQgIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCgkJ
CQkJICAgICAgaW50ICpfX2luaGVyaXQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJl
YWRfYXR0cl9zZXRzY29wZSAgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBfX3Njb3BlKSAg
dGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUgIChfX2NvbnN0
IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCgkJCQkgICAgICAgaW50ICpfX3Njb3BlKSAgdGhyb3cg
KCkgIDsKCiMgMjIzICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCgoKIAoKCgpleHRlcm4gaW50
IHB0aHJlYWRfYXR0cl9zZXRzdGFja2FkZHIgIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAoJCQkJ
CSAgIHZvaWQgKl9fc3RhY2thZGRyKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFk
X2F0dHJfZ2V0c3RhY2thZGRyICAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAoJCQkJ
CSAgIHZvaWQgKipfX3N0YWNrYWRkcikgIHRocm93ICgpICA7CgogCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX2F0dHJfc2V0c3RhY2tzaXplICAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKCQkJCQkgICBz
aXplX3QgX19zdGFja3NpemUpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfYXR0
cl9nZXRzdGFja3NpemUgIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCgkJCQkJICAg
c2l6ZV90ICpfX3N0YWNrc2l6ZSkgIHRocm93ICgpICA7CgogCgogCgpleHRlcm4gaW50IHB0aHJl
YWRfc2V0c2NoZWRwYXJhbSAgKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsIGludCBfX3BvbGlj
eSwKCQkJCSAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIHRocm93
ICgpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9nZXRzY2hlZHBhcmFtICAocHRocmVhZF90IF9f
dGFyZ2V0X3RocmVhZCwKCQkJCSAgICAgICBpbnQgKl9fcG9saWN5LAoJCQkJICAgICAgIHN0cnVj
dCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIHRocm93ICgpICA7CgoKCgoKCgoKCiAKCiAKCmV4dGVy
biBpbnQgX19wdGhyZWFkX211dGV4X2luaXQgIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgsCgkJ
CQkgICBfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fbXV0ZXhfYXR0cikgIHRocm93ICgp
ICA7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9pbml0ICAocHRocmVhZF9tdXRleF90ICpfX211
dGV4LAoJCQkJICAgX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX211dGV4X2F0dHIpICB0
aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF9kZXN0cm95ICAocHRocmVh
ZF9tdXRleF90ICpfX211dGV4KSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4
X2Rlc3Ryb3kgIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpICB0aHJvdyAoKSAgOwoKIApleHRl
cm4gaW50IF9fcHRocmVhZF9tdXRleF90cnlsb2NrICAocHRocmVhZF9tdXRleF90ICpfX211dGV4
KSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3RyeWxvY2sgIChwdGhyZWFk
X211dGV4X3QgKl9fbXV0ZXgpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IF9fcHRocmVhZF9t
dXRleF9sb2NrICAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSAgdGhyb3cgKCkgIDsKZXh0ZXJu
IGludCBwdGhyZWFkX211dGV4X2xvY2sgIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpICB0aHJv
dyAoKSAgOwoKIApleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF91bmxvY2sgIChwdGhyZWFkX211
dGV4X3QgKl9fbXV0ZXgpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdW5s
b2NrICAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSAgdGhyb3cgKCkgIDsKCgogCgogCgpleHRl
cm4gaW50IF9fcHRocmVhZF9tdXRleGF0dHJfaW5pdCAgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9f
YXR0cikgIHRocm93ICgpICA7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfaW5pdCAgKHB0
aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgX19w
dGhyZWFkX211dGV4YXR0cl9kZXN0cm95ICAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSAg
dGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95ICAocHRocmVh
ZF9tdXRleGF0dHJfdCAqX19hdHRyKSAgdGhyb3cgKCkgIDsKCiMgMzE1ICIvdXNyL2luY2x1ZGUv
cHRocmVhZC5oIiAzCgoKCiAKCiAKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2luaXQgIChwdGhy
ZWFkX2NvbmRfdCAqX19jb25kLAoJCQkJICAgX19jb25zdCBwdGhyZWFkX2NvbmRhdHRyX3QgKl9f
Y29uZF9hdHRyKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfZGVzdHJv
eSAgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0
aHJlYWRfY29uZF9zaWduYWwgIChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSAgdGhyb3cgKCkgIDsK
CiAKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0ICAocHRocmVhZF9jb25kX3QgKl9f
Y29uZCkgIHRocm93ICgpICA7CgogCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF93YWl0ICAocHRo
cmVhZF9jb25kX3QgKl9fY29uZCwKCQkJCSAgIHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgIHRo
cm93ICgpICA7CgogCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCAgKHB0aHJl
YWRfY29uZF90ICpfX2NvbmQsCgkJCQkJcHRocmVhZF9tdXRleF90ICpfX211dGV4LAoJCQkJCV9f
Y29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX2Fic3RpbWUpICB0aHJvdyAoKSAgOwoKIAoKIApleHRl
cm4gaW50IHB0aHJlYWRfY29uZGF0dHJfaW5pdCAgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRy
KSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2Rlc3Ryb3kgIChw
dGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikgIHRocm93ICgpICA7CgoKIyA0MDggIi91c3IvaW5j
bHVkZS9wdGhyZWFkLmgiIDMKCgoKIAoKIAoKCgoKCmV4dGVybiBpbnQgX19wdGhyZWFkX2tleV9j
cmVhdGUgIChwdGhyZWFkX2tleV90ICpfX2tleSwKCQkJCSAgICAgIHZvaWQgKCpfX2Rlc3RyX2Z1
bmN0aW9uKSAodm9pZCAqKSkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgcHRocmVhZF9rZXlfY3Jl
YXRlICAocHRocmVhZF9rZXlfdCAqX19rZXksCgkJCQkgICAgdm9pZCAoKl9fZGVzdHJfZnVuY3Rp
b24pICh2b2lkICopKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9kZWxl
dGUgIChwdGhyZWFkX2tleV90IF9fa2V5KSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBfX3B0
aHJlYWRfc2V0c3BlY2lmaWMgIChwdGhyZWFkX2tleV90IF9fa2V5LAoJCQkJICAgICAgIF9fY29u
c3Qgdm9pZCAqX19wb2ludGVyKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNw
ZWNpZmljICAocHRocmVhZF9rZXlfdCBfX2tleSwKCQkJCSAgICAgX19jb25zdCB2b2lkICpfX3Bv
aW50ZXIpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gdm9pZCAqX19wdGhyZWFkX2dldHNwZWNpZmlj
ICAocHRocmVhZF9rZXlfdCBfX2tleSkgIHRocm93ICgpICA7CmV4dGVybiB2b2lkICpwdGhyZWFk
X2dldHNwZWNpZmljICAocHRocmVhZF9rZXlfdCBfX2tleSkgIHRocm93ICgpICA7CgoKIAoKIAoK
CgpleHRlcm4gaW50IF9fcHRocmVhZF9vbmNlICAocHRocmVhZF9vbmNlX3QgKl9fb25jZV9jb250
cm9sLAoJCQkJdm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkpICB0aHJvdyAoKSAgOwpleHRl
cm4gaW50IHB0aHJlYWRfb25jZSAgKHB0aHJlYWRfb25jZV90ICpfX29uY2VfY29udHJvbCwKCQkJ
ICAgICAgdm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkpICB0aHJvdyAoKSAgOwoKCiAKCiAK
CmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWxzdGF0ZSAgKGludCBfX3N0YXRlLCBpbnQgKl9f
b2xkc3RhdGUpICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHR5
cGUgIChpbnQgX190eXBlLCBpbnQgKl9fb2xkdHlwZSkgIHRocm93ICgpICA7CgogCmV4dGVybiBp
bnQgcHRocmVhZF9jYW5jZWwgIChwdGhyZWFkX3QgX190aHJlYWQpICB0aHJvdyAoKSAgOwoKIAoK
CmV4dGVybiB2b2lkIHB0aHJlYWRfdGVzdGNhbmNlbCAgKHZvaWQpICB0aHJvdyAoKSAgOwoKCiAK
CgoKCgoKCgoKCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVzaCAgKHN0cnVjdCBfcHRo
cmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCgkJCQkJdm9pZCAoKl9fcm91dGluZSkgKHZv
aWQgKiksCgkJCQkJdm9pZCAqX19hcmcpICB0aHJvdyAoKSAgOwoKIAoKCgoKCmV4dGVybiB2b2lk
IF9wdGhyZWFkX2NsZWFudXBfcG9wICAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpf
X2J1ZmZlciwKCQkJCSAgICAgICBpbnQgX19leGVjdXRlKSAgdGhyb3cgKCkgIDsKCiAKCgojIDUx
NCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwoKCiAKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9z
aWd0aHJlYWQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCmV4dGVybiBp
bnQgcHRocmVhZF9zaWdtYXNrICAoaW50IF9faG93LCBfX2NvbnN0IF9fc2lnc2V0X3QgKl9fbmV3
bWFzaywKCQkJCSBfX3NpZ3NldF90ICpfX29sZG1hc2spICB0aHJvdyAoKSAgOwoKIApleHRlcm4g
aW50IHB0aHJlYWRfa2lsbCAgKHB0aHJlYWRfdCBfX3RocmVhZCwgaW50IF9fc2lnbm8pICB0aHJv
dyAoKSAgOwoKCiMgNTE3ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCgoKIAoKIAoKCgoK
CgoKCgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfYXRmb3JrICAodm9pZCAoKl9fcHJlcGFyZSkgKHZv
aWQpLAoJCQkJICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKCQkJCSAgdm9pZCAoKl9fY2hpbGQp
ICh2b2lkKSkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgcHRocmVhZF9hdGZvcmsgICh2b2lkICgq
X19wcmVwYXJlKSAodm9pZCksCgkJCQl2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKCQkJCXZvaWQg
KCpfX2NoaWxkKSAodm9pZCkpICB0aHJvdyAoKSAgOwoKIAoKCmV4dGVybiB2b2lkIHB0aHJlYWRf
a2lsbF9vdGhlcl90aHJlYWRzX25wICAodm9pZCkgIHRocm93ICgpICA7CgoKIApleHRlcm4gdm9p
ZCBfX3B0aHJlYWRfaW5pdGlhbGl6ZSAgKHZvaWQpICB0aHJvdyAoKSAgOwoKfSAKCgojIDczICIv
dXNyL2luY2x1ZGUvZysrLTIvc3RsX2FsbG9jLmgiIDIgMwoKCgoKCgoKCiMgOTAgIi91c3IvaW5j
bHVkZS9nKystMi9zdGxfYWxsb2MuaCIgMwoKIyAxMDggIi91c3IvaW5jbHVkZS9nKystMi9zdGxf
YWxsb2MuaCIgMwoKCgoKCgoKCgogCgoKCgoKIAogCgoKCgoKCgoKCnRlbXBsYXRlIDxpbnQgaW5z
dD4KY2xhc3MgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGUgewoKcHJpdmF0ZToKCnN0YXRpYyB2b2lk
ICpvb21fbWFsbG9jKHNpemVfdCk7CgpzdGF0aWMgdm9pZCAqb29tX3JlYWxsb2Modm9pZCAqLCBz
aXplX3QpOwoKCiAgICBzdGF0aWMgdm9pZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFuZGxlciko
KTsKCgpwdWJsaWM6CgpzdGF0aWMgdm9pZCAqIGFsbG9jYXRlKHNpemVfdCBuKQp7CiAgICB2b2lk
ICpyZXN1bHQgPSBtYWxsb2Mobik7CiAgICBpZiAoMCA9PSByZXN1bHQpIHJlc3VsdCA9IG9vbV9t
YWxsb2Mobik7CiAgICByZXR1cm4gcmVzdWx0Owp9CgpzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZv
aWQgKnAsIHNpemVfdCAgKQp7CiAgICBmcmVlKHApOwp9CgpzdGF0aWMgdm9pZCAqIHJlYWxsb2Nh
dGUodm9pZCAqcCwgc2l6ZV90ICAsIHNpemVfdCBuZXdfc3opCnsKICAgIHZvaWQgKiByZXN1bHQg
PSByZWFsbG9jKHAsIG5ld19zeik7CiAgICBpZiAoMCA9PSByZXN1bHQpIHJlc3VsdCA9IG9vbV9y
ZWFsbG9jKHAsIG5ld19zeik7CiAgICByZXR1cm4gcmVzdWx0Owp9CgpzdGF0aWMgdm9pZCAoKiBz
ZXRfbWFsbG9jX2hhbmRsZXIodm9pZCAoKmYpKCkpKSgpCnsKICAgIHZvaWQgKCogb2xkKSgpID0g
X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICBfX21hbGxvY19hbGxvY19vb21faGFuZGxl
ciA9IGY7CiAgICByZXR1cm4ob2xkKTsKfQoKfTsKCiAKCgp0ZW1wbGF0ZSA8aW50IGluc3Q+CnZv
aWQgKCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5zdD46Ol9fbWFsbG9jX2FsbG9jX29vbV9o
YW5kbGVyKSgpID0gMDsKCgp0ZW1wbGF0ZSA8aW50IGluc3Q+CnZvaWQgKiBfX21hbGxvY19hbGxv
Y190ZW1wbGF0ZTxpbnN0Pjo6b29tX21hbGxvYyhzaXplX3QgbikKewogICAgdm9pZCAoKiBteV9t
YWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQgKnJlc3VsdDsKCiAgICBmb3IgKDs7KSB7CiAgICAg
ICAgbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAg
ICBpZiAoMCA9PSBteV9tYWxsb2NfaGFuZGxlcikgeyBjZXJyIDw8ICJvdXQgb2YgbWVtb3J5IiA8
PCBlbmRsOyBleGl0KDEpIDsgfQogICAgICAgICgqbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAg
ICAgcmVzdWx0ID0gbWFsbG9jKG4pOwogICAgICAgIGlmIChyZXN1bHQpIHJldHVybihyZXN1bHQp
OwogICAgfQp9Cgp0ZW1wbGF0ZSA8aW50IGluc3Q+CnZvaWQgKiBfX21hbGxvY19hbGxvY190ZW1w
bGF0ZTxpbnN0Pjo6b29tX3JlYWxsb2Modm9pZCAqcCwgc2l6ZV90IG4pCnsKICAgIHZvaWQgKCog
bXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICB2b2lkICpyZXN1bHQ7CgogICAgZm9yICg7Oykgewog
ICAgICAgIG15X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAg
ICAgICAgaWYgKDAgPT0gbXlfbWFsbG9jX2hhbmRsZXIpIHsgY2VyciA8PCAib3V0IG9mIG1lbW9y
eSIgPDwgZW5kbDsgZXhpdCgxKSA7IH0KICAgICAgICAoKm15X21hbGxvY19oYW5kbGVyKSgpOwog
ICAgICAgIHJlc3VsdCA9IHJlYWxsb2MocCwgbik7CiAgICAgICAgaWYgKHJlc3VsdCkgcmV0dXJu
KHJlc3VsdCk7CiAgICB9Cn0KCnR5cGVkZWYgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8MD4gbWFs
bG9jX2FsbG9jOwoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgQWxsb2M+CmNsYXNzIHNpbXBsZV9h
bGxvYyB7CgpwdWJsaWM6CiAgICBzdGF0aWMgVCAqYWxsb2NhdGUoc2l6ZV90IG4pCiAgICAgICAg
ICAgICAgICB7IHJldHVybiAwID09IG4/IDAgOiAoVCopIEFsbG9jOjphbGxvY2F0ZShuICogc2l6
ZW9mIChUKSk7IH0KICAgIHN0YXRpYyBUICphbGxvY2F0ZSh2b2lkKQogICAgICAgICAgICAgICAg
eyByZXR1cm4gKFQqKSBBbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChUKSk7IH0KICAgIHN0YXRpYyB2
b2lkIGRlYWxsb2NhdGUoVCAqcCwgc2l6ZV90IG4pCiAgICAgICAgICAgICAgICB7IGlmICgwICE9
IG4pIEFsbG9jOjpkZWFsbG9jYXRlKHAsIG4gKiBzaXplb2YgKFQpKTsgfQogICAgc3RhdGljIHZv
aWQgZGVhbGxvY2F0ZShUICpwKQogICAgICAgICAgICAgICAgeyBBbGxvYzo6ZGVhbGxvY2F0ZShw
LCBzaXplb2YgKFQpKTsgfQp9OwoKIAogCiAKIAogCnRlbXBsYXRlIDxjbGFzcyBBbGxvYz4KY2xh
c3MgZGVidWdfYWxsb2MgewoKcHJpdmF0ZToKCmVudW0ge2V4dHJhID0gOH07ICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgCgpwdWJsaWM6
CgpzdGF0aWMgdm9pZCAqIGFsbG9jYXRlKHNpemVfdCBuKQp7CiAgICBjaGFyICpyZXN1bHQgPSAo
Y2hhciAqKUFsbG9jOjphbGxvY2F0ZShuICsgZXh0cmEpOwogICAgKihzaXplX3QgKilyZXN1bHQg
PSBuOwogICAgcmV0dXJuIHJlc3VsdCArIGV4dHJhOwp9CgpzdGF0aWMgdm9pZCBkZWFsbG9jYXRl
KHZvaWQgKnAsIHNpemVfdCBuKQp7CiAgICBjaGFyICogcmVhbF9wID0gKGNoYXIgKilwIC0gZXh0
cmE7CiAgICAoKHZvaWQpICgoICooc2l6ZV90ICopcmVhbF9wID09IG4gKSA/IDAgOgkoX19hc3Nl
cnRfZmFpbCAoIiooc2l6ZV90ICopcmVhbF9wID09IG4iICwJIi91c3IvaW5jbHVkZS9nKystMi9z
dGxfYWxsb2MuaCIsIDI1NiwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKICAgIEFsbG9j
OjpkZWFsbG9jYXRlKHJlYWxfcCwgbiArIGV4dHJhKTsKfQoKc3RhdGljIHZvaWQgKiByZWFsbG9j
YXRlKHZvaWQgKnAsIHNpemVfdCBvbGRfc3osIHNpemVfdCBuZXdfc3opCnsKICAgIGNoYXIgKiBy
ZWFsX3AgPSAoY2hhciAqKXAgLSBleHRyYTsKICAgICgodm9pZCkgKCggKihzaXplX3QgKilyZWFs
X3AgPT0gb2xkX3N6ICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCAqKXJlYWxfcCA9
PSBvbGRfc3oiICwJIi91c3IvaW5jbHVkZS9nKystMi9zdGxfYWxsb2MuaCIsIDI2MywgX19QUkVU
VFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKICAgIGNoYXIgKiByZXN1bHQgPSAoY2hhciAqKQogICAg
ICAgICAgICAgICAgICBBbGxvYzo6cmVhbGxvY2F0ZShyZWFsX3AsIG9sZF9zeiArIGV4dHJhLCBu
ZXdfc3ogKyBleHRyYSk7CiAgICAqKHNpemVfdCAqKXJlc3VsdCA9IG5ld19zejsKICAgIHJldHVy
biByZXN1bHQgKyBleHRyYTsKfQoKCn07CgoKCgoKCgoKCgogCiAKIAogCiAKIAogCiAKIAogCiAK
IAogCiAKCiAKIAogCiAKIAogCiAKIAogCgoKCgoKCgp0ZW1wbGF0ZSA8Ym9vbCB0aHJlYWRzLCBp
bnQgaW5zdD4KY2xhc3MgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlIHsKCnByaXZhdGU6CiAgIAog
ICAKCiAgICBlbnVtIHtfX0FMSUdOID0gOH07CiAgICBlbnVtIHtfX01BWF9CWVRFUyA9IDEyOH07
CiAgICBlbnVtIHtfX05GUkVFTElTVFMgPSBfX01BWF9CWVRFUy9fX0FMSUdOfTsKCiAgc3RhdGlj
IHNpemVfdCBST1VORF9VUChzaXplX3QgYnl0ZXMpIHsKICAgICAgICByZXR1cm4gKCgoYnl0ZXMp
ICsgX19BTElHTi0xKSAmIH4oX19BTElHTiAtIDEpKTsKICB9CnByaXZhdGUgOgogIHVuaW9uIG9i
aiB7CiAgICAgICAgdW5pb24gb2JqICogZnJlZV9saXN0X2xpbms7CiAgICAgICAgY2hhciBjbGll
bnRfZGF0YVsxXTsgICAgIAogIH07CnByaXZhdGU6CgoKCgogICAgc3RhdGljIG9iaiAqIHZvbGF0
aWxlICBmcmVlX2xpc3RbX19ORlJFRUxJU1RTXTsgCgogIHN0YXRpYyAgc2l6ZV90IEZSRUVMSVNU
X0lOREVYKHNpemVfdCBieXRlcykgewogICAgICAgIHJldHVybiAoKChieXRlcykgKyBfX0FMSUdO
LTEpL19fQUxJR04gLSAxKTsKICB9CgogICAKICBzdGF0aWMgdm9pZCAqcmVmaWxsKHNpemVfdCBu
KTsKICAgCiAgIAogIHN0YXRpYyBjaGFyICpjaHVua19hbGxvYyhzaXplX3Qgc2l6ZSwgaW50ICZu
b2Jqcyk7CgogICAKICBzdGF0aWMgY2hhciAqc3RhcnRfZnJlZTsKICBzdGF0aWMgY2hhciAqZW5k
X2ZyZWU7CiAgc3RhdGljIHNpemVfdCBoZWFwX3NpemU7CgoKCgoKCgoKICAgIHN0YXRpYyBwdGhy
ZWFkX211dGV4X3QgX19ub2RlX2FsbG9jYXRvcl9sb2NrOwoKCiMgMzc4ICIvdXNyL2luY2x1ZGUv
ZysrLTIvc3RsX2FsbG9jLmgiIDMKCgogICAgY2xhc3MgbG9jayB7CiAgICAgICAgcHVibGljOgog
ICAgICAgICAgICBsb2NrKCkgeyBpZiAodGhyZWFkcykgcHRocmVhZF9tdXRleF9sb2NrKCZfX25v
ZGVfYWxsb2NhdG9yX2xvY2spIDsgfQogICAgICAgICAgICB+bG9jaygpIHsgaWYgKHRocmVhZHMp
IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfX25vZGVfYWxsb2NhdG9yX2xvY2spIDsgfQogICAgfTsK
ICAgIGZyaWVuZCBjbGFzcyBsb2NrOwoKcHVibGljOgoKICAgCiAgc3RhdGljIHZvaWQgKiBhbGxv
Y2F0ZShzaXplX3QgbikKICB7CiAgICBvYmogKiB2b2xhdGlsZSAgKiBteV9mcmVlX2xpc3Q7CiAg
ICBvYmogKiAgIHJlc3VsdDsKCiAgICBpZiAobiA+IChzaXplX3QpIF9fTUFYX0JZVEVTKSB7CiAg
ICAgICAgcmV0dXJuKG1hbGxvY19hbGxvYzo6YWxsb2NhdGUobikpOwogICAgfQogICAgbXlfZnJl
ZV9saXN0ID0gZnJlZV9saXN0ICsgRlJFRUxJU1RfSU5ERVgobik7CiAgICAgCiAgICAgCiAgICAg
CgogICAgICAgICAKICAgICAgICBsb2NrIGxvY2tfaW5zdGFuY2U7CgogICAgcmVzdWx0ID0gKm15
X2ZyZWVfbGlzdDsKICAgIGlmIChyZXN1bHQgPT0gMCkgewogICAgICAgIHZvaWQgKnIgPSByZWZp
bGwoUk9VTkRfVVAobikpOwogICAgICAgIHJldHVybiByOwogICAgfQogICAgKm15X2ZyZWVfbGlz
dCA9IHJlc3VsdCAtPiBmcmVlX2xpc3RfbGluazsKICAgIHJldHVybiAocmVzdWx0KTsKICB9OwoK
ICAgCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkICpwLCBzaXplX3QgbikKICB7CiAgICBv
YmogKnEgPSAob2JqICopcDsKICAgIG9iaiAqIHZvbGF0aWxlICAqIG15X2ZyZWVfbGlzdDsKCiAg
ICBpZiAobiA+IChzaXplX3QpIF9fTUFYX0JZVEVTKSB7CiAgICAgICAgbWFsbG9jX2FsbG9jOjpk
ZWFsbG9jYXRlKHAsIG4pOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIG15X2ZyZWVfbGlzdCA9
IGZyZWVfbGlzdCArIEZSRUVMSVNUX0lOREVYKG4pOwogICAgIAoKICAgICAgICAgCiAgICAgICAg
bG9jayBsb2NrX2luc3RhbmNlOwoKICAgIHEgLT4gZnJlZV9saXN0X2xpbmsgPSAqbXlfZnJlZV9s
aXN0OwogICAgKm15X2ZyZWVfbGlzdCA9IHE7CiAgICAgCiAgfQoKICBzdGF0aWMgdm9pZCAqIHJl
YWxsb2NhdGUodm9pZCAqcCwgc2l6ZV90IG9sZF9zeiwgc2l6ZV90IG5ld19zeik7Cgp9IDsKCnR5
cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPCB0cnVlICwgMD4gYWxsb2M7CnR5cGVkZWYg
X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPGZhbHNlLCAwPiBzaW5nbGVfY2xpZW50X2FsbG9jOwoK
CgogCiAKIAogCnRlbXBsYXRlIDxib29sIHRocmVhZHMsIGludCBpbnN0PgpjaGFyKgpfX2RlZmF1
bHRfYWxsb2NfdGVtcGxhdGU8dGhyZWFkcywgaW5zdD46OmNodW5rX2FsbG9jKHNpemVfdCBzaXpl
LCBpbnQmIG5vYmpzKQp7CiAgICBjaGFyICogcmVzdWx0OwogICAgc2l6ZV90IHRvdGFsX2J5dGVz
ID0gc2l6ZSAqIG5vYmpzOwogICAgc2l6ZV90IGJ5dGVzX2xlZnQgPSBlbmRfZnJlZSAtIHN0YXJ0
X2ZyZWU7CgogICAgaWYgKGJ5dGVzX2xlZnQgPj0gdG90YWxfYnl0ZXMpIHsKICAgICAgICByZXN1
bHQgPSBzdGFydF9mcmVlOwogICAgICAgIHN0YXJ0X2ZyZWUgKz0gdG90YWxfYnl0ZXM7CiAgICAg
ICAgcmV0dXJuKHJlc3VsdCk7CiAgICB9IGVsc2UgaWYgKGJ5dGVzX2xlZnQgPj0gc2l6ZSkgewog
ICAgICAgIG5vYmpzID0gYnl0ZXNfbGVmdC9zaXplOwogICAgICAgIHRvdGFsX2J5dGVzID0gc2l6
ZSAqIG5vYmpzOwogICAgICAgIHJlc3VsdCA9IHN0YXJ0X2ZyZWU7CiAgICAgICAgc3RhcnRfZnJl
ZSArPSB0b3RhbF9ieXRlczsKICAgICAgICByZXR1cm4ocmVzdWx0KTsKICAgIH0gZWxzZSB7CiAg
ICAgICAgc2l6ZV90IGJ5dGVzX3RvX2dldCA9IDIgKiB0b3RhbF9ieXRlcyArIFJPVU5EX1VQKGhl
YXBfc2l6ZSA+PiA0KTsKICAgICAgICAgCiAgICAgICAgaWYgKGJ5dGVzX2xlZnQgPiAwKSB7CiAg
ICAgICAgICAgIG9iaiAqIHZvbGF0aWxlICAqIG15X2ZyZWVfbGlzdCA9CiAgICAgICAgICAgICAg
ICAgICAgICAgIGZyZWVfbGlzdCArIEZSRUVMSVNUX0lOREVYKGJ5dGVzX2xlZnQpOwoKICAgICAg
ICAgICAgKChvYmogKilzdGFydF9mcmVlKSAtPiBmcmVlX2xpc3RfbGluayA9ICpteV9mcmVlX2xp
c3Q7CiAgICAgICAgICAgICpteV9mcmVlX2xpc3QgPSAob2JqICopc3RhcnRfZnJlZTsKICAgICAg
ICB9CiAgICAgICAgc3RhcnRfZnJlZSA9IChjaGFyICopbWFsbG9jKGJ5dGVzX3RvX2dldCk7CiAg
ICAgICAgaWYgKDAgPT0gc3RhcnRfZnJlZSkgewogICAgICAgICAgICBpbnQgaTsKICAgICAgICAg
ICAgb2JqICogdm9sYXRpbGUgICogbXlfZnJlZV9saXN0LCAqcDsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgZm9yIChpID0gc2l6ZTsgaSA8PSBf
X01BWF9CWVRFUzsgaSArPSBfX0FMSUdOKSB7CiAgICAgICAgICAgICAgICBteV9mcmVlX2xpc3Qg
PSBmcmVlX2xpc3QgKyBGUkVFTElTVF9JTkRFWChpKTsKICAgICAgICAgICAgICAgIHAgPSAqbXlf
ZnJlZV9saXN0OwogICAgICAgICAgICAgICAgaWYgKDAgIT0gcCkgewogICAgICAgICAgICAgICAg
ICAgICpteV9mcmVlX2xpc3QgPSBwIC0+IGZyZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgICAg
ICAgIHN0YXJ0X2ZyZWUgPSAoY2hhciAqKXA7CiAgICAgICAgICAgICAgICAgICAgZW5kX2ZyZWUg
PSBzdGFydF9mcmVlICsgaTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4oY2h1bmtfYWxsb2Mo
c2l6ZSwgbm9ianMpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgkgICAgZW5kX2ZyZWUgPSAwOwkgCiAg
ICAgICAgICAgIHN0YXJ0X2ZyZWUgPSAoY2hhciAqKW1hbGxvY19hbGxvYzo6YWxsb2NhdGUoYnl0
ZXNfdG9fZ2V0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAg
ICAgICB9CiAgICAgICAgaGVhcF9zaXplICs9IGJ5dGVzX3RvX2dldDsKICAgICAgICBlbmRfZnJl
ZSA9IHN0YXJ0X2ZyZWUgKyBieXRlc190b19nZXQ7CiAgICAgICAgcmV0dXJuKGNodW5rX2FsbG9j
KHNpemUsIG5vYmpzKSk7CiAgICB9Cn0KCgogCiAKIAp0ZW1wbGF0ZSA8Ym9vbCB0aHJlYWRzLCBp
bnQgaW5zdD4Kdm9pZCogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVhZHMsIGluc3Q+Ojpy
ZWZpbGwoc2l6ZV90IG4pCnsKICAgIGludCBub2JqcyA9IDIwOwogICAgY2hhciAqIGNodW5rID0g
Y2h1bmtfYWxsb2Mobiwgbm9ianMpOwogICAgb2JqICogdm9sYXRpbGUgICogbXlfZnJlZV9saXN0
OwogICAgb2JqICogcmVzdWx0OwogICAgb2JqICogY3VycmVudF9vYmosICogbmV4dF9vYmo7CiAg
ICBpbnQgaTsKCiAgICBpZiAoMSA9PSBub2JqcykgcmV0dXJuKGNodW5rKTsKICAgIG15X2ZyZWVf
bGlzdCA9IGZyZWVfbGlzdCArIEZSRUVMSVNUX0lOREVYKG4pOwoKICAgICAKICAgICAgcmVzdWx0
ID0gKG9iaiAqKWNodW5rOwogICAgICAqbXlfZnJlZV9saXN0ID0gbmV4dF9vYmogPSAob2JqICop
KGNodW5rICsgbik7CiAgICAgIGZvciAoaSA9IDE7IDsgaSsrKSB7CiAgICAgICAgY3VycmVudF9v
YmogPSBuZXh0X29iajsKICAgICAgICBuZXh0X29iaiA9IChvYmogKikoKGNoYXIgKiluZXh0X29i
aiArIG4pOwogICAgICAgIGlmIChub2JqcyAtIDEgPT0gaSkgewogICAgICAgICAgICBjdXJyZW50
X29iaiAtPiBmcmVlX2xpc3RfbGluayA9IDA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgIGN1cnJlbnRfb2JqIC0+IGZyZWVfbGlzdF9saW5rID0gbmV4dF9v
Ymo7CiAgICAgICAgfQogICAgICB9CiAgICByZXR1cm4ocmVzdWx0KTsKfQoKdGVtcGxhdGUgPGJv
b2wgdGhyZWFkcywgaW50IGluc3Q+CnZvaWQqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0aHJl
YWRzLCBpbnN0Pjo6cmVhbGxvY2F0ZSh2b2lkICpwLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9sZF9zeiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuZXdfc3opCnsKICAg
IHZvaWQgKiByZXN1bHQ7CiAgICBzaXplX3QgY29weV9zejsKCiAgICBpZiAob2xkX3N6ID4gKHNp
emVfdCkgX19NQVhfQllURVMgJiYgbmV3X3N6ID4gKHNpemVfdCkgX19NQVhfQllURVMpIHsKICAg
ICAgICByZXR1cm4ocmVhbGxvYyhwLCBuZXdfc3opKTsKICAgIH0KICAgIGlmIChST1VORF9VUChv
bGRfc3opID09IFJPVU5EX1VQKG5ld19zeikpIHJldHVybihwKTsKICAgIHJlc3VsdCA9IGFsbG9j
YXRlKG5ld19zeik7CiAgICBjb3B5X3N6ID0gbmV3X3N6ID4gb2xkX3N6PyBvbGRfc3ogOiBuZXdf
c3o7CiAgICBtZW1jcHkocmVzdWx0LCBwLCBjb3B5X3N6KTsKICAgIGRlYWxsb2NhdGUocCwgb2xk
X3N6KTsKICAgIHJldHVybihyZXN1bHQpOwp9CgoKICAgIHRlbXBsYXRlIDxib29sIHRocmVhZHMs
IGludCBpbnN0PgogICAgcHRocmVhZF9tdXRleF90CiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8dGhyZWFkcywgaW5zdD46Ol9fbm9kZV9hbGxvY2F0b3JfbG9jawogICAgICAgID0gezAsIDAs
IDAsIFBUSFJFQURfTVVURVhfRkFTVF9OUCwgezAsIDB9fSA7CgoKCgoKCgoKCgoKIyA2NTMgIi91
c3IvaW5jbHVkZS9nKystMi9zdGxfYWxsb2MuaCIgMwoKCnRlbXBsYXRlIDxib29sIHRocmVhZHMs
IGludCBpbnN0PgpjaGFyICpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dGhyZWFkcywgaW5zdD46
OnN0YXJ0X2ZyZWUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CmNoYXIg
Kl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6ZW5kX2ZyZWUgPSAwOwoK
dGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CnNpemVfdCBfX2RlZmF1bHRfYWxsb2Nf
dGVtcGxhdGU8dGhyZWFkcywgaW5zdD46OmhlYXBfc2l6ZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCB0
aHJlYWRzLCBpbnQgaW5zdD4KX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVhZHMsIGluc3Q+
OjpvYmogKiB2b2xhdGlsZSAKX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVhZHMsIGluc3Q+
IDo6ZnJlZV9saXN0WwoKCgogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVhZHMsIGlu
c3Q+OjpfX05GUkVFTElTVFMKCl0gPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgfTsKIAogCiAKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAogCiAKIyAzMSAi
L3Vzci9pbmNsdWRlL2crKy0yL3ZlY3RvciIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKystMi9z
dGxfY29uc3RydWN0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK
IAoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZSB2b2lkIGRlc3Ryb3koVCogcG9pbnRlcikgewog
ICAgcG9pbnRlci0+flQoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KaW5saW5l
IHZvaWQgY29uc3RydWN0KFQxKiBwLCBjb25zdCBUMiYgdmFsdWUpIHsKICBuZXcgKHApIFQxKHZh
bHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQKX19k
ZXN0cm95X2F1eChGb3J3YXJkSXRlcmF0b3IgZmlyc3QsIEZvcndhcmRJdGVyYXRvciBsYXN0LCBf
X2ZhbHNlX3R5cGUpIHsKICBmb3IgKCA7IGZpcnN0IDwgbGFzdDsgKytmaXJzdCkKICAgIGRlc3Ry
b3koJipmaXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBGb3J3YXJkSXRlcmF0b3I+IAppbmxpbmUg
dm9pZCBfX2Rlc3Ryb3lfYXV4KEZvcndhcmRJdGVyYXRvciwgRm9yd2FyZEl0ZXJhdG9yLCBfX3Ry
dWVfdHlwZSkge30KCnRlbXBsYXRlIDxjbGFzcyBGb3J3YXJkSXRlcmF0b3IsIGNsYXNzIFQ+Cmlu
bGluZSB2b2lkIF9fZGVzdHJveShGb3J3YXJkSXRlcmF0b3IgZmlyc3QsIEZvcndhcmRJdGVyYXRv
ciBsYXN0LCBUKikgewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxUPjo6aGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvciB0cml2aWFsX2Rlc3RydWN0b3I7CiAgX19kZXN0cm95X2F1eChmaXJz
dCwgbGFzdCwgdHJpdmlhbF9kZXN0cnVjdG9yKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRm9yd2Fy
ZEl0ZXJhdG9yPgppbmxpbmUgdm9pZCBkZXN0cm95KEZvcndhcmRJdGVyYXRvciBmaXJzdCwgRm9y
d2FyZEl0ZXJhdG9yIGxhc3QpIHsKICBfX2Rlc3Ryb3koZmlyc3QsIGxhc3QsIHZhbHVlX3R5cGUo
Zmlyc3QpKTsKfQoKaW5saW5lIHZvaWQgZGVzdHJveShjaGFyKiwgY2hhciopIHt9CmlubGluZSB2
b2lkIGRlc3Ryb3kod2NoYXJfdCosIHdjaGFyX3QqKSB7fQoKIAoKCgogCiAKIAojIDMyICIvdXNy
L2luY2x1ZGUvZysrLTIvdmVjdG9yIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0yL3N0bF91
bmluaXRpYWxpemVkLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAK
CiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgRm9yd2FyZEl0ZXJhdG9y
PgppbmxpbmUgRm9yd2FyZEl0ZXJhdG9yIApfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoSW5wdXRJ
dGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgRm9yd2FyZEl0ZXJhdG9yIHJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1
ZV90eXBlKSB7CiAgcmV0dXJuIGNvcHkoZmlyc3QsIGxhc3QsIHJlc3VsdCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBJbnB1dEl0ZXJhdG9yLCBjbGFzcyBGb3J3YXJkSXRlcmF0b3I+CkZvcndhcmRJdGVy
YXRvciAKX191bmluaXRpYWxpemVkX2NvcHlfYXV4KElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0
SXRlcmF0b3IgbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIEZvcndhcmRJdGVyYXRvciBy
ZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICBGb3J3YXJk
SXRlcmF0b3IgY3VyID0gcmVzdWx0OwogIHRyeSAgewogICAgZm9yICggOyBmaXJzdCAhPSBsYXN0
OyArK2ZpcnN0LCArK2N1cikKICAgICAgY29uc3RydWN0KCYqY3VyLCAqZmlyc3QpOwogICAgcmV0
dXJuIGN1cjsKICB9CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KHJlc3VsdCwgY3VyKSA7IHRocm93
OyB9IDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yLCBjbGFzcyBGb3J3YXJkSXRl
cmF0b3IsIGNsYXNzIFQ+CmlubGluZSBGb3J3YXJkSXRlcmF0b3IKX191bmluaXRpYWxpemVkX2Nv
cHkoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0LAogICAgICAgICAgICAg
ICAgICAgICBGb3J3YXJkSXRlcmF0b3IgcmVzdWx0LCBUKikgewogIHR5cGVkZWYgdHlwZW5hbWUg
X190eXBlX3RyYWl0czxUPjo6aXNfUE9EX3R5cGUgaXNfUE9EOwogIHJldHVybiBfX3VuaW5pdGlh
bGl6ZWRfY29weV9hdXgoZmlyc3QsIGxhc3QsIHJlc3VsdCwgaXNfUE9EKCkpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgRm9y
d2FyZEl0ZXJhdG9yCiAgdW5pbml0aWFsaXplZF9jb3B5KElucHV0SXRlcmF0b3IgZmlyc3QsIElu
cHV0SXRlcmF0b3IgbGFzdCwKICAgICAgICAgICAgICAgICAgICAgRm9yd2FyZEl0ZXJhdG9yIHJl
c3VsdCkgewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weShmaXJzdCwgbGFzdCwgcmVzdWx0
LCB2YWx1ZV90eXBlKHJlc3VsdCkpOwp9CgppbmxpbmUgY2hhciogdW5pbml0aWFsaXplZF9jb3B5
KGNvbnN0IGNoYXIqIGZpcnN0LCBjb25zdCBjaGFyKiBsYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIqIHJlc3VsdCkgewogIG1lbW1vdmUocmVzdWx0LCBmaXJzdCwgbGFz
dCAtIGZpcnN0KTsKICByZXR1cm4gcmVzdWx0ICsgKGxhc3QgLSBmaXJzdCk7Cn0KCmlubGluZSB3
Y2hhcl90KiB1bmluaXRpYWxpemVkX2NvcHkoY29uc3Qgd2NoYXJfdCogZmlyc3QsIGNvbnN0IHdj
aGFyX3QqIGxhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCog
cmVzdWx0KSB7CiAgbWVtbW92ZShyZXN1bHQsIGZpcnN0LCBzaXplb2Yod2NoYXJfdCkgKiAobGFz
dCAtIGZpcnN0KSk7CiAgcmV0dXJuIHJlc3VsdCArIChsYXN0IC0gZmlyc3QpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgU2l6ZSwgY2xhc3MgRm9yd2FyZEl0ZXJhdG9y
PgpwYWlyPElucHV0SXRlcmF0b3IsIEZvcndhcmRJdGVyYXRvcj4KX191bmluaXRpYWxpemVkX2Nv
cHlfbihJbnB1dEl0ZXJhdG9yIGZpcnN0LCBTaXplIGNvdW50LAogICAgICAgICAgICAgICAgICAg
ICAgIEZvcndhcmRJdGVyYXRvciByZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRf
aXRlcmF0b3JfdGFnKSB7CiAgRm9yd2FyZEl0ZXJhdG9yIGN1ciA9IHJlc3VsdDsKICB0cnkgIHsK
ICAgIGZvciAoIDsgY291bnQgPiAwIDsgLS1jb3VudCwgKytmaXJzdCwgKytjdXIpIAogICAgICBj
b25zdHJ1Y3QoJipjdXIsICpmaXJzdCk7CiAgICByZXR1cm4gcGFpcjxJbnB1dEl0ZXJhdG9yLCBG
b3J3YXJkSXRlcmF0b3I+KGZpcnN0LCBjdXIpOwogIH0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3ko
cmVzdWx0LCBjdXIpIDsgdGhyb3c7IH0gOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgUmFuZG9tQWNjZXNz
SXRlcmF0b3IsIGNsYXNzIFNpemUsIGNsYXNzIEZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHBhaXI8
UmFuZG9tQWNjZXNzSXRlcmF0b3IsIEZvcndhcmRJdGVyYXRvcj4KX191bmluaXRpYWxpemVkX2Nv
cHlfbihSYW5kb21BY2Nlc3NJdGVyYXRvciBmaXJzdCwgU2l6ZSBjb3VudCwKICAgICAgICAgICAg
ICAgICAgICAgICBGb3J3YXJkSXRlcmF0b3IgcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgUmFuZG9tQWNjZXNzSXRlcmF0b3IgbGFz
dCA9IGZpcnN0ICsgY291bnQ7CiAgcmV0dXJuIG1ha2VfcGFpcihsYXN0LCB1bmluaXRpYWxpemVk
X2NvcHkoZmlyc3QsIGxhc3QsIHJlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVy
YXRvciwgY2xhc3MgU2l6ZSwgY2xhc3MgRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgcGFpcjxJbnB1
dEl0ZXJhdG9yLCBGb3J3YXJkSXRlcmF0b3I+CnVuaW5pdGlhbGl6ZWRfY29weV9uKElucHV0SXRl
cmF0b3IgZmlyc3QsIFNpemUgY291bnQsCiAgICAgICAgICAgICAgICAgICAgIEZvcndhcmRJdGVy
YXRvciByZXN1bHQpIHsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHlfbihmaXJzdCwgY291
bnQsIHJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcl9jYXRl
Z29yeShmaXJzdCkpOwp9CgogCiAKdGVtcGxhdGUgPGNsYXNzIEZvcndhcmRJdGVyYXRvciwgY2xh
c3MgVD4KaW5saW5lIHZvaWQKX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KEZvcndhcmRJdGVyYXRv
ciBmaXJzdCwgRm9yd2FyZEl0ZXJhdG9yIGxhc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVCYgeCwgX190cnVlX3R5cGUpCnsKICBmaWxsKGZpcnN0LCBsYXN0LCB4KTsKfQoKdGVt
cGxhdGUgPGNsYXNzIEZvcndhcmRJdGVyYXRvciwgY2xhc3MgVD4Kdm9pZApfX3VuaW5pdGlhbGl6
ZWRfZmlsbF9hdXgoRm9yd2FyZEl0ZXJhdG9yIGZpcnN0LCBGb3J3YXJkSXRlcmF0b3IgbGFzdCwg
CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUJiB4LCBfX2ZhbHNlX3R5cGUpCnsKICBG
b3J3YXJkSXRlcmF0b3IgY3VyID0gZmlyc3Q7CiAgdHJ5ICB7CiAgICBmb3IgKCA7IGN1ciAhPSBs
YXN0OyArK2N1cikKICAgICAgY29uc3RydWN0KCYqY3VyLCB4KTsKICB9CiAgY2F0Y2goLi4uKSB7
ICBkZXN0cm95KGZpcnN0LCBjdXIpIDsgdGhyb3c7IH0gOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRm9y
d2FyZEl0ZXJhdG9yLCBjbGFzcyBULCBjbGFzcyBUMT4KaW5saW5lIHZvaWQgX191bmluaXRpYWxp
emVkX2ZpbGwoRm9yd2FyZEl0ZXJhdG9yIGZpcnN0LCBGb3J3YXJkSXRlcmF0b3IgbGFzdCwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQmIHgsIFQxKikgewogIHR5cGVk
ZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxUMT46OmlzX1BPRF90eXBlIGlzX1BPRDsKICBfX3Vu
aW5pdGlhbGl6ZWRfZmlsbF9hdXgoZmlyc3QsIGxhc3QsIHgsIGlzX1BPRCgpKTsKICAgICAgICAg
ICAgICAgICAgIAp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBUPgpp
bmxpbmUgdm9pZCB1bmluaXRpYWxpemVkX2ZpbGwoRm9yd2FyZEl0ZXJhdG9yIGZpcnN0LCBGb3J3
YXJkSXRlcmF0b3IgbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
JiB4KSB7CiAgX191bmluaXRpYWxpemVkX2ZpbGwoZmlyc3QsIGxhc3QsIHgsIHZhbHVlX3R5cGUo
Zmlyc3QpKTsKfQoKIAogCnRlbXBsYXRlIDxjbGFzcyBGb3J3YXJkSXRlcmF0b3IsIGNsYXNzIFNp
emUsIGNsYXNzIFQ+CmlubGluZSBGb3J3YXJkSXRlcmF0b3IKX191bmluaXRpYWxpemVkX2ZpbGxf
bl9hdXgoRm9yd2FyZEl0ZXJhdG9yIGZpcnN0LCBTaXplIG4sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFQmIHgsIF9fdHJ1ZV90eXBlKSB7CiAgcmV0dXJuIGZpbGxfbihmaXJzdCwg
biwgeCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBGb3J3YXJkSXRlcmF0b3IsIGNsYXNzIFNpemUsIGNs
YXNzIFQ+CkZvcndhcmRJdGVyYXRvcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChGb3J3YXJk
SXRlcmF0b3IgZmlyc3QsIFNpemUgbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VCYgeCwgX19mYWxzZV90eXBlKSB7CiAgRm9yd2FyZEl0ZXJhdG9yIGN1ciA9IGZpcnN0OwogIHRy
eSAgewogICAgZm9yICggOyBuID4gMDsgLS1uLCArK2N1cikKICAgICAgY29uc3RydWN0KCYqY3Vy
LCB4KTsKICAgIHJldHVybiBjdXI7CiAgfQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShmaXJzdCwg
Y3VyKSA7IHRocm93OyB9IDsKfQoKdGVtcGxhdGUgPGNsYXNzIEZvcndhcmRJdGVyYXRvciwgY2xh
c3MgU2l6ZSwgY2xhc3MgVCwgY2xhc3MgVDE+CmlubGluZSBGb3J3YXJkSXRlcmF0b3IgX191bmlu
aXRpYWxpemVkX2ZpbGxfbihGb3J3YXJkSXRlcmF0b3IgZmlyc3QsIFNpemUgbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQmIHgsIFQxKikgewog
IHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxUMT46OmlzX1BPRF90eXBlIGlzX1BPRDsK
ICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoZmlyc3QsIG4sIHgsIGlzX1BPRCgp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCn0KCnRlbXBsYXRlIDxjbGFz
cyBGb3J3YXJkSXRlcmF0b3IsIGNsYXNzIFNpemUsIGNsYXNzIFQ+CmlubGluZSBGb3J3YXJkSXRl
cmF0b3IgdW5pbml0aWFsaXplZF9maWxsX24oRm9yd2FyZEl0ZXJhdG9yIGZpcnN0LCBTaXplIG4s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVCYgeCkg
ewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKGZpcnN0LCBuLCB4LCB2YWx1ZV90eXBl
KGZpcnN0KSk7Cn0KCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcjEsIGNsYXNz
IElucHV0SXRlcmF0b3IyLCBjbGFzcyBGb3J3YXJkSXRlcmF0b3I+CmlubGluZSBGb3J3YXJkSXRl
cmF0b3IKX191bmluaXRpYWxpemVkX2NvcHlfY29weShJbnB1dEl0ZXJhdG9yMSBmaXJzdDEsIElu
cHV0SXRlcmF0b3IxIGxhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0SXRlcmF0
b3IyIGZpcnN0MiwgSW5wdXRJdGVyYXRvcjIgbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgRm9yd2FyZEl0ZXJhdG9yIHJlc3VsdCkgewogIEZvcndhcmRJdGVyYXRvciBtaWQgPSB1bmlu
aXRpYWxpemVkX2NvcHkoZmlyc3QxLCBsYXN0MSwgcmVzdWx0KTsKICB0cnkgIHsKICAgIHJldHVy
biB1bmluaXRpYWxpemVkX2NvcHkoZmlyc3QyLCBsYXN0MiwgbWlkKTsKICB9CiAgY2F0Y2goLi4u
KSB7ICBkZXN0cm95KHJlc3VsdCwgbWlkKSA7IHRocm93OyB9IDsKfQoKIAogCnRlbXBsYXRlIDxj
bGFzcyBGb3J3YXJkSXRlcmF0b3IsIGNsYXNzIFQsIGNsYXNzIElucHV0SXRlcmF0b3I+CmlubGlu
ZSBGb3J3YXJkSXRlcmF0b3IgCl9fdW5pbml0aWFsaXplZF9maWxsX2NvcHkoRm9yd2FyZEl0ZXJh
dG9yIHJlc3VsdCwgRm9yd2FyZEl0ZXJhdG9yIG1pZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUJiB4LAogICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0SXRlcmF0b3IgZmly
c3QsIElucHV0SXRlcmF0b3IgbGFzdCkgewogIHVuaW5pdGlhbGl6ZWRfZmlsbChyZXN1bHQsIG1p
ZCwgeCk7CiAgdHJ5ICB7CiAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KGZpcnN0LCBsYXN0
LCBtaWQpOwogIH0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3kocmVzdWx0LCBtaWQpIDsgdGhyb3c7
IH0gOwp9CgogCiAKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3IsIGNsYXNzIEZvcndhcmRJ
dGVyYXRvciwgY2xhc3MgVD4KaW5saW5lIHZvaWQKX191bmluaXRpYWxpemVkX2NvcHlfZmlsbChJ
bnB1dEl0ZXJhdG9yIGZpcnN0MSwgSW5wdXRJdGVyYXRvciBsYXN0MSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBGb3J3YXJkSXRlcmF0b3IgZmlyc3QyLCBGb3J3YXJkSXRlcmF0b3IgbGFzdDIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVCYgeCkgewogIEZvcndhcmRJdGVyYXRv
ciBtaWQyID0gdW5pbml0aWFsaXplZF9jb3B5KGZpcnN0MSwgbGFzdDEsIGZpcnN0Mik7CiAgdHJ5
ICB7CiAgICB1bmluaXRpYWxpemVkX2ZpbGwobWlkMiwgbGFzdDIsIHgpOwogIH0KICBjYXRjaCgu
Li4pIHsgIGRlc3Ryb3koZmlyc3QyLCBtaWQyKSA7IHRocm93OyB9IDsKfQoKIAoKCgogCiAKIAoj
IDMzICIvdXNyL2luY2x1ZGUvZysrLTIvdmVjdG9yIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2cr
Ky0yL3N0bF92ZWN0b3IuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK
ICAKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgQWxsb2MgPSBhbGxvYz4KY2xhc3MgdmVj
dG9yIHsKcHVibGljOgogIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdmFsdWVfdHlw
ZSogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7CiAg
dHlwZWRlZiB2YWx1ZV90eXBlKiBpdGVyYXRvcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUq
IGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogIHR5cGVk
ZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgc2l6ZV90IHNp
emVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgoKICB0eXBlZGVm
IHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7
CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoK
CgoKCgpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8dmFsdWVfdHlwZSwgQWxsb2M+
IGRhdGFfYWxsb2NhdG9yOwogIGl0ZXJhdG9yIHN0YXJ0OwogIGl0ZXJhdG9yIGZpbmlzaDsKICBp
dGVyYXRvciBlbmRfb2Zfc3RvcmFnZTsKICB2b2lkIGluc2VydF9hdXgoaXRlcmF0b3IgcG9zaXRp
b24sIGNvbnN0IFQmIHgpOwogIHZvaWQgZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChzdGFydCkgZGF0
YV9hbGxvY2F0b3I6OmRlYWxsb2NhdGUoc3RhcnQsIGVuZF9vZl9zdG9yYWdlIC0gc3RhcnQpOwog
IH0KCiAgdm9pZCBmaWxsX2luaXRpYWxpemUoc2l6ZV90eXBlIG4sIGNvbnN0IFQmIHZhbHVlKSB7
CiAgICBzdGFydCA9IGFsbG9jYXRlX2FuZF9maWxsKG4sIHZhbHVlKTsKICAgIGZpbmlzaCA9IHN0
YXJ0ICsgbjsKICAgIGVuZF9vZl9zdG9yYWdlID0gZmluaXNoOwogIH0KcHVibGljOgogIGl0ZXJh
dG9yIGJlZ2luKCkgeyByZXR1cm4gc3RhcnQ7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIHN0YXJ0OyB9CiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gZmluaXNoOyB9
CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gZmluaXNoOyB9CiAgcmV2ZXJz
ZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQog
IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyAKICAgIHJldHVybiBjb25z
dF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgCiAgfQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgp
IHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yIHJlbmQoKSBjb25zdCB7IAogICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Io
YmVnaW4oKSk7IAogIH0KICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlw
ZShlbmQoKSAtIGJlZ2luKCkpOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1
cm4gc2l6ZV90eXBlKC0xKSAvIHNpemVvZihUKTsgfQogIHNpemVfdHlwZSBjYXBhY2l0eSgpIGNv
bnN0IHsgcmV0dXJuIHNpemVfdHlwZShlbmRfb2Zfc3RvcmFnZSAtIGJlZ2luKCkpOyB9CiAgYm9v
bCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0KICByZWZlcmVuY2Ug
b3BlcmF0b3JbXShzaXplX3R5cGUgbikgeyByZXR1cm4gKihiZWdpbigpICsgbik7IH0KICBjb25z
dF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgbikgY29uc3QgeyByZXR1cm4gKihiZWdp
bigpICsgbik7IH0KCiAgdmVjdG9yKCkgOiBzdGFydCgwKSwgZmluaXNoKDApLCBlbmRfb2Zfc3Rv
cmFnZSgwKSB7fQogIHZlY3RvcihzaXplX3R5cGUgbiwgY29uc3QgVCYgdmFsdWUpIHsgZmlsbF9p
bml0aWFsaXplKG4sIHZhbHVlKTsgfQogIHZlY3RvcihpbnQgbiwgY29uc3QgVCYgdmFsdWUpIHsg
ZmlsbF9pbml0aWFsaXplKG4sIHZhbHVlKTsgfQogIHZlY3Rvcihsb25nIG4sIGNvbnN0IFQmIHZh
bHVlKSB7IGZpbGxfaW5pdGlhbGl6ZShuLCB2YWx1ZSk7IH0KICBleHBsaWNpdCB2ZWN0b3Ioc2l6
ZV90eXBlIG4pIHsgZmlsbF9pbml0aWFsaXplKG4sIFQoKSk7IH0KCiAgdmVjdG9yKGNvbnN0IHZl
Y3RvcjxULCBBbGxvYz4mIHgpIHsKICAgIHN0YXJ0ID0gYWxsb2NhdGVfYW5kX2NvcHkoeC5lbmQo
KSAtIHguYmVnaW4oKSwgeC5iZWdpbigpLCB4LmVuZCgpKTsKICAgIGZpbmlzaCA9IHN0YXJ0ICsg
KHguZW5kKCkgLSB4LmJlZ2luKCkpOwogICAgZW5kX29mX3N0b3JhZ2UgPSBmaW5pc2g7CiAgfQoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICB2ZWN0b3IoSW5wdXRJdGVyYXRvciBm
aXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KSA6CiAgICBzdGFydCgwKSwgZmluaXNoKDApLCBlbmRf
b2Zfc3RvcmFnZSgwKQogIHsKICAgIHJhbmdlX2luaXRpYWxpemUoZmlyc3QsIGxhc3QsIGl0ZXJh
dG9yX2NhdGVnb3J5KGZpcnN0KSk7CiAgfQojIDEyMyAiL3Vzci9pbmNsdWRlL2crKy0yL3N0bF92
ZWN0b3IuaCIgMwoKICB+dmVjdG9yKCkgeyAKICAgIGRlc3Ryb3koc3RhcnQsIGZpbmlzaCk7CiAg
ICBkZWFsbG9jYXRlKCk7CiAgfQogIHZlY3RvcjxULCBBbGxvYz4mIG9wZXJhdG9yPShjb25zdCB2
ZWN0b3I8VCwgQWxsb2M+JiB4KTsKICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIG4pIHsKICAgIGlm
IChjYXBhY2l0eSgpIDwgbikgewogICAgICBjb25zdCBzaXplX3R5cGUgb2xkX3NpemUgPSBzaXpl
KCk7CiAgICAgIGl0ZXJhdG9yIHRtcCA9IGFsbG9jYXRlX2FuZF9jb3B5KG4sIHN0YXJ0LCBmaW5p
c2gpOwogICAgICBkZXN0cm95KHN0YXJ0LCBmaW5pc2gpOwogICAgICBkZWFsbG9jYXRlKCk7CiAg
ICAgIHN0YXJ0ID0gdG1wOwogICAgICBmaW5pc2ggPSB0bXAgKyBvbGRfc2l6ZTsKICAgICAgZW5k
X29mX3N0b3JhZ2UgPSBzdGFydCArIG47CiAgICB9CiAgfQogIHJlZmVyZW5jZSBmcm9udCgpIHsg
cmV0dXJuICpiZWdpbigpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1
cm4gKmJlZ2luKCk7IH0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsg
fQogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9
CiAgdm9pZCBwdXNoX2JhY2soY29uc3QgVCYgeCkgewogICAgaWYgKGZpbmlzaCAhPSBlbmRfb2Zf
c3RvcmFnZSkgewogICAgICBjb25zdHJ1Y3QoZmluaXNoLCB4KTsKICAgICAgKytmaW5pc2g7CiAg
ICB9CiAgICBlbHNlCiAgICAgIGluc2VydF9hdXgoZW5kKCksIHgpOwogIH0KICB2b2lkIHN3YXAo
dmVjdG9yPFQsIEFsbG9jPiYgeCkgewogICAgIDo6c3dhcChzdGFydCwgeC5zdGFydCk7CiAgICAg
Ojpzd2FwKGZpbmlzaCwgeC5maW5pc2gpOwogICAgIDo6c3dhcChlbmRfb2Zfc3RvcmFnZSwgeC5l
bmRfb2Zfc3RvcmFnZSk7CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBwb3NpdGlvbiwg
Y29uc3QgVCYgeCkgewogICAgc2l6ZV90eXBlIG4gPSBwb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBp
ZiAoZmluaXNoICE9IGVuZF9vZl9zdG9yYWdlICYmIHBvc2l0aW9uID09IGVuZCgpKSB7CiAgICAg
IGNvbnN0cnVjdChmaW5pc2gsIHgpOwogICAgICArK2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAg
ICAgaW5zZXJ0X2F1eChwb3NpdGlvbiwgeCk7CiAgICByZXR1cm4gYmVnaW4oKSArIG47CiAgfQog
IGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBwb3NpdGlvbikgeyByZXR1cm4gaW5zZXJ0KHBvc2l0
aW9uLCBUKCkpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5z
ZXJ0KGl0ZXJhdG9yIHBvc2l0aW9uLCBJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9y
IGxhc3QpIHsKICAgIHJhbmdlX2luc2VydChwb3NpdGlvbiwgZmlyc3QsIGxhc3QsIGl0ZXJhdG9y
X2NhdGVnb3J5KGZpcnN0KSk7CiAgfQoKCgoKCiAgdm9pZCBpbnNlcnQgKGl0ZXJhdG9yIHBvcywg
c2l6ZV90eXBlIG4sIGNvbnN0IFQmIHgpOwogIHZvaWQgaW5zZXJ0IChpdGVyYXRvciBwb3MsIGlu
dCBuLCBjb25zdCBUJiB4KSB7CiAgICBpbnNlcnQocG9zLCAoc2l6ZV90eXBlKSBuLCB4KTsKICB9
CiAgdm9pZCBpbnNlcnQgKGl0ZXJhdG9yIHBvcywgbG9uZyBuLCBjb25zdCBUJiB4KSB7CiAgICBp
bnNlcnQocG9zLCAoc2l6ZV90eXBlKSBuLCB4KTsKICB9CgogIHZvaWQgcG9wX2JhY2soKSB7CiAg
ICAtLWZpbmlzaDsKICAgIGRlc3Ryb3koZmluaXNoKTsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRl
cmF0b3IgcG9zaXRpb24pIHsKICAgIGlmIChwb3NpdGlvbiArIDEgIT0gZW5kKCkpCiAgICAgIGNv
cHkocG9zaXRpb24gKyAxLCBmaW5pc2gsIHBvc2l0aW9uKTsKICAgIC0tZmluaXNoOwogICAgZGVz
dHJveShmaW5pc2gpOwogICAgcmV0dXJuIHBvc2l0aW9uOwogIH0KICBpdGVyYXRvciBlcmFzZShp
dGVyYXRvciBmaXJzdCwgaXRlcmF0b3IgbGFzdCkgewogICAgaXRlcmF0b3IgaSA9IGNvcHkobGFz
dCwgZmluaXNoLCBmaXJzdCk7CiAgICBkZXN0cm95KGksIGZpbmlzaCk7CiAgICBmaW5pc2ggPSBm
aW5pc2ggLSAobGFzdCAtIGZpcnN0KTsKICAgIHJldHVybiBmaXJzdDsKICB9CiAgdm9pZCByZXNp
emUoc2l6ZV90eXBlIG5ld19zaXplLCBjb25zdCBUJiB4KSB7CiAgICBpZiAobmV3X3NpemUgPCBz
aXplKCkpIAogICAgICBlcmFzZShiZWdpbigpICsgbmV3X3NpemUsIGVuZCgpKTsKICAgIGVsc2UK
ICAgICAgaW5zZXJ0KGVuZCgpLCBuZXdfc2l6ZSAtIHNpemUoKSwgeCk7CiAgfQogIHZvaWQgcmVz
aXplKHNpemVfdHlwZSBuZXdfc2l6ZSkgeyByZXNpemUobmV3X3NpemUsIFQoKSk7IH0KICB2b2lk
IGNsZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KCnByb3RlY3RlZDoKICBpdGVyYXRv
ciBhbGxvY2F0ZV9hbmRfZmlsbChzaXplX3R5cGUgbiwgY29uc3QgVCYgeCkgewogICAgaXRlcmF0
b3IgcmVzdWx0ID0gZGF0YV9hbGxvY2F0b3I6OmFsbG9jYXRlKG4pOwogICAgdHJ5ICB7CiAgICAg
IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKHJlc3VsdCwgbiwgeCk7CiAgICAgIHJldHVybiByZXN1bHQ7
CiAgICB9CiAgICBjYXRjaCguLi4pIHsgIGRhdGFfYWxsb2NhdG9yOjpkZWFsbG9jYXRlKHJlc3Vs
dCwgbikgOyB0aHJvdzsgfSA7CiAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIEZvcndhcmRJdGVyYXRv
cj4KICBpdGVyYXRvciBhbGxvY2F0ZV9hbmRfY29weShzaXplX3R5cGUgbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGb3J3YXJkSXRlcmF0b3IgZmlyc3QsIEZvcndhcmRJdGVyYXRvciBs
YXN0KSB7CiAgICBpdGVyYXRvciByZXN1bHQgPSBkYXRhX2FsbG9jYXRvcjo6YWxsb2NhdGUobik7
CiAgICB0cnkgIHsKICAgICAgdW5pbml0aWFsaXplZF9jb3B5KGZpcnN0LCBsYXN0LCByZXN1bHQp
OwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgY2F0Y2goLi4uKSB7ICBkYXRhX2FsbG9j
YXRvcjo6ZGVhbGxvY2F0ZShyZXN1bHQsIG4pIDsgdGhyb3c7IH0gOwogIH0KIyAyNDMgIi91c3Iv
aW5jbHVkZS9nKystMi9zdGxfdmVjdG9yLmgiIDMKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIElucHV0
SXRlcmF0b3I+CiAgdm9pZCByYW5nZV9pbml0aWFsaXplKElucHV0SXRlcmF0b3IgZmlyc3QsIElu
cHV0SXRlcmF0b3IgbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3Jf
dGFnKSB7CiAgICBmb3IgKCA7IGZpcnN0ICE9IGxhc3Q7ICsrZmlyc3QpCiAgICAgIHB1c2hfYmFj
aygqZmlyc3QpOwogIH0KCiAgIAogICAKICB0ZW1wbGF0ZSA8Y2xhc3MgRm9yd2FyZEl0ZXJhdG9y
PgogIHZvaWQgcmFuZ2VfaW5pdGlhbGl6ZShGb3J3YXJkSXRlcmF0b3IgZmlyc3QsIEZvcndhcmRJ
dGVyYXRvciBsYXN0LAogICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh
ZykgewogICAgc2l6ZV90eXBlIG4gPSAwOwogICAgZGlzdGFuY2UoZmlyc3QsIGxhc3QsIG4pOwog
ICAgc3RhcnQgPSBhbGxvY2F0ZV9hbmRfY29weShuLCBmaXJzdCwgbGFzdCk7CiAgICBmaW5pc2gg
PSBzdGFydCArIG47CiAgICBlbmRfb2Zfc3RvcmFnZSA9IGZpbmlzaDsKICB9CgogIHRlbXBsYXRl
IDxjbGFzcyBJbnB1dEl0ZXJhdG9yPgogIHZvaWQgcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIHBvcywK
ICAgICAgICAgICAgICAgICAgICBJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxh
c3QsCiAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUg
PGNsYXNzIEZvcndhcmRJdGVyYXRvcj4KICB2b2lkIHJhbmdlX2luc2VydChpdGVyYXRvciBwb3Ms
CiAgICAgICAgICAgICAgICAgICAgRm9yd2FyZEl0ZXJhdG9yIGZpcnN0LCBGb3J3YXJkSXRlcmF0
b3IgbGFzdCwKICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgoKfTsK
CnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBBbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCB2ZWN0b3I8VCwgQWxsb2M+JiB4LCBjb25zdCB2ZWN0b3I8VCwgQWxsb2M+JiB5KSB7CiAg
cmV0dXJuIHguc2l6ZSgpID09IHkuc2l6ZSgpICYmIGVxdWFsKHguYmVnaW4oKSwgeC5lbmQoKSwg
eS5iZWdpbigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEFsbG9jPgppbmxpbmUgYm9v
bCBvcGVyYXRvcjwoY29uc3QgdmVjdG9yPFQsIEFsbG9jPiYgeCwgY29uc3QgdmVjdG9yPFQsIEFs
bG9jPiYgeSkgewogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZSh4LmJlZ2luKCksIHgu
ZW5kKCksIHkuYmVnaW4oKSwgeS5lbmQoKSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNz
IEFsbG9jPgppbmxpbmUgdm9pZCBzd2FwKHZlY3RvcjxULCBBbGxvYz4mIHgsIHZlY3RvcjxULCBB
bGxvYz4mIHkpIHsKICB4LnN3YXAoeSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEFs
bG9jPgp2ZWN0b3I8VCwgQWxsb2M+JiB2ZWN0b3I8VCwgQWxsb2M+OjpvcGVyYXRvcj0oY29uc3Qg
dmVjdG9yPFQsIEFsbG9jPiYgeCkgewogIGlmICgmeCAhPSB0aGlzKSB7CiAgICBpZiAoeC5zaXpl
KCkgPiBjYXBhY2l0eSgpKSB7CiAgICAgIGl0ZXJhdG9yIHRtcCA9IGFsbG9jYXRlX2FuZF9jb3B5
KHguZW5kKCkgLSB4LmJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHguYmVnaW4oKSwgeC5lbmQoKSk7CiAgICAgIGRlc3Ryb3koc3RhcnQsIGZpbmlzaCk7CiAg
ICAgIGRlYWxsb2NhdGUoKTsKICAgICAgc3RhcnQgPSB0bXA7CiAgICAgIGVuZF9vZl9zdG9yYWdl
ID0gc3RhcnQgKyAoeC5lbmQoKSAtIHguYmVnaW4oKSk7CiAgICB9CiAgICBlbHNlIGlmIChzaXpl
KCkgPj0geC5zaXplKCkpIHsKICAgICAgaXRlcmF0b3IgaSA9IGNvcHkoeC5iZWdpbigpLCB4LmVu
ZCgpLCBiZWdpbigpKTsKICAgICAgZGVzdHJveShpLCBmaW5pc2gpOwogICAgfQogICAgZWxzZSB7
CiAgICAgIGNvcHkoeC5iZWdpbigpLCB4LmJlZ2luKCkgKyBzaXplKCksIHN0YXJ0KTsKICAgICAg
dW5pbml0aWFsaXplZF9jb3B5KHguYmVnaW4oKSArIHNpemUoKSwgeC5lbmQoKSwgZmluaXNoKTsK
ICAgIH0KICAgIGZpbmlzaCA9IHN0YXJ0ICsgeC5zaXplKCk7CiAgfQogIHJldHVybiAqdGhpczsK
fQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEFsbG9jPgp2b2lkIHZlY3RvcjxULCBBbGxvYz46
Omluc2VydF9hdXgoaXRlcmF0b3IgcG9zaXRpb24sIGNvbnN0IFQmIHgpIHsKICBpZiAoZmluaXNo
ICE9IGVuZF9vZl9zdG9yYWdlKSB7CiAgICBjb25zdHJ1Y3QoZmluaXNoLCAqKGZpbmlzaCAtIDEp
KTsKICAgICsrZmluaXNoOwogICAgVCB4X2NvcHkgPSB4OwogICAgY29weV9iYWNrd2FyZChwb3Np
dGlvbiwgZmluaXNoIC0gMiwgZmluaXNoIC0gMSk7CiAgICAqcG9zaXRpb24gPSB4X2NvcHk7CiAg
fQogIGVsc2UgewogICAgY29uc3Qgc2l6ZV90eXBlIG9sZF9zaXplID0gc2l6ZSgpOwogICAgY29u
c3Qgc2l6ZV90eXBlIGxlbiA9IG9sZF9zaXplICE9IDAgPyAyICogb2xkX3NpemUgOiAxOwogICAg
aXRlcmF0b3IgbmV3X3N0YXJ0ID0gZGF0YV9hbGxvY2F0b3I6OmFsbG9jYXRlKGxlbik7CiAgICBp
dGVyYXRvciBuZXdfZmluaXNoID0gbmV3X3N0YXJ0OwogICAgdHJ5ICB7CiAgICAgIG5ld19maW5p
c2ggPSB1bmluaXRpYWxpemVkX2NvcHkoc3RhcnQsIHBvc2l0aW9uLCBuZXdfc3RhcnQpOwogICAg
ICBjb25zdHJ1Y3QobmV3X2ZpbmlzaCwgeCk7CiAgICAgICsrbmV3X2ZpbmlzaDsKICAgICAgbmV3
X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShwb3NpdGlvbiwgZmluaXNoLCBuZXdfZmluaXNo
KTsKICAgIH0KCgogICAgY2F0Y2goLi4uKSB7CiAgICAgIGRlc3Ryb3kobmV3X3N0YXJ0LCBuZXdf
ZmluaXNoKTsgCiAgICAgIGRhdGFfYWxsb2NhdG9yOjpkZWFsbG9jYXRlKG5ld19zdGFydCwgbGVu
KTsKICAgICAgdGhyb3c7CiAgICB9CgogICAgZGVzdHJveShiZWdpbigpLCBlbmQoKSk7CiAgICBk
ZWFsbG9jYXRlKCk7CiAgICBzdGFydCA9IG5ld19zdGFydDsKICAgIGZpbmlzaCA9IG5ld19maW5p
c2g7CiAgICBlbmRfb2Zfc3RvcmFnZSA9IG5ld19zdGFydCArIGxlbjsKICB9Cn0KCnRlbXBsYXRl
IDxjbGFzcyBULCBjbGFzcyBBbGxvYz4Kdm9pZCB2ZWN0b3I8VCwgQWxsb2M+OjppbnNlcnQoaXRl
cmF0b3IgcG9zaXRpb24sIHNpemVfdHlwZSBuLCBjb25zdCBUJiB4KSB7CiAgaWYgKG4gIT0gMCkg
ewogICAgaWYgKHNpemVfdHlwZShlbmRfb2Zfc3RvcmFnZSAtIGZpbmlzaCkgPj0gbikgewogICAg
ICBUIHhfY29weSA9IHg7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBlbGVtc19hZnRlciA9IGZpbmlz
aCAtIHBvc2l0aW9uOwogICAgICBpdGVyYXRvciBvbGRfZmluaXNoID0gZmluaXNoOwogICAgICBp
ZiAoZWxlbXNfYWZ0ZXIgPiBuKSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KGZpbmlzaCAt
IG4sIGZpbmlzaCwgZmluaXNoKTsKICAgICAgICBmaW5pc2ggKz0gbjsKICAgICAgICBjb3B5X2Jh
Y2t3YXJkKHBvc2l0aW9uLCBvbGRfZmluaXNoIC0gbiwgb2xkX2ZpbmlzaCk7CiAgICAgICAgZmls
bChwb3NpdGlvbiwgcG9zaXRpb24gKyBuLCB4X2NvcHkpOwogICAgICB9CiAgICAgIGVsc2Ugewog
ICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKGZpbmlzaCwgbiAtIGVsZW1zX2FmdGVyLCB4X2Nv
cHkpOwogICAgICAgIGZpbmlzaCArPSBuIC0gZWxlbXNfYWZ0ZXI7CiAgICAgICAgdW5pbml0aWFs
aXplZF9jb3B5KHBvc2l0aW9uLCBvbGRfZmluaXNoLCBmaW5pc2gpOwogICAgICAgIGZpbmlzaCAr
PSBlbGVtc19hZnRlcjsKICAgICAgICBmaWxsKHBvc2l0aW9uLCBvbGRfZmluaXNoLCB4X2NvcHkp
OwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIG9sZF9zaXpl
ID0gc2l6ZSgpOyAgICAgICAgCiAgICAgIGNvbnN0IHNpemVfdHlwZSBsZW4gPSBvbGRfc2l6ZSAr
IG1heChvbGRfc2l6ZSwgbik7CiAgICAgIGl0ZXJhdG9yIG5ld19zdGFydCA9IGRhdGFfYWxsb2Nh
dG9yOjphbGxvY2F0ZShsZW4pOwogICAgICBpdGVyYXRvciBuZXdfZmluaXNoID0gbmV3X3N0YXJ0
OwogICAgICB0cnkgIHsKICAgICAgICBuZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KHN0
YXJ0LCBwb3NpdGlvbiwgbmV3X3N0YXJ0KTsKICAgICAgICBuZXdfZmluaXNoID0gdW5pbml0aWFs
aXplZF9maWxsX24obmV3X2ZpbmlzaCwgbiwgeCk7CiAgICAgICAgbmV3X2ZpbmlzaCA9IHVuaW5p
dGlhbGl6ZWRfY29weShwb3NpdGlvbiwgZmluaXNoLCBuZXdfZmluaXNoKTsKICAgICAgfQoKICAg
ICAgY2F0Y2goLi4uKSB7CiAgICAgICAgZGVzdHJveShuZXdfc3RhcnQsIG5ld19maW5pc2gpOwog
ICAgICAgIGRhdGFfYWxsb2NhdG9yOjpkZWFsbG9jYXRlKG5ld19zdGFydCwgbGVuKTsKICAgICAg
ICB0aHJvdzsKICAgICAgfQoKICAgICAgZGVzdHJveShzdGFydCwgZmluaXNoKTsKICAgICAgZGVh
bGxvY2F0ZSgpOwogICAgICBzdGFydCA9IG5ld19zdGFydDsKICAgICAgZmluaXNoID0gbmV3X2Zp
bmlzaDsKICAgICAgZW5kX29mX3N0b3JhZ2UgPSBuZXdfc3RhcnQgKyBsZW47CiAgICB9CiAgfQp9
CgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBBbGxvYz4gdGVtcGxhdGUgPGNsYXNzIElucHV0
SXRlcmF0b3I+CnZvaWQgdmVjdG9yPFQsIEFsbG9jPjo6cmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIHBv
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRJdGVyYXRvciBmaXJz
dCwgSW5wdXRJdGVyYXRvciBsYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICBmb3IgKCA7IGZpcnN0ICE9IGxhc3Q7ICsrZmlyc3Qp
IHsKICAgIHBvcyA9IGluc2VydChwb3MsICpmaXJzdCk7CiAgICArK3BvczsKICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBULCBjbGFzcyBBbGxvYz4gdGVtcGxhdGUgPGNsYXNzIEZvcndhcmRJdGVyYXRv
cj4Kdm9pZCB2ZWN0b3I8VCwgQWxsb2M+OjpyYW5nZV9pbnNlcnQoaXRlcmF0b3IgcG9zaXRpb24s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcndhcmRJdGVyYXRvciBmaXJz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yd2FyZEl0ZXJhdG9yIGxh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3Jf
dGFnKSB7CiAgaWYgKGZpcnN0ICE9IGxhc3QpIHsKICAgIHNpemVfdHlwZSBuID0gMDsKICAgIGRp
c3RhbmNlKGZpcnN0LCBsYXN0LCBuKTsKICAgIGlmIChzaXplX3R5cGUoZW5kX29mX3N0b3JhZ2Ug
LSBmaW5pc2gpID49IG4pIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIGVsZW1zX2FmdGVyID0gZmlu
aXNoIC0gcG9zaXRpb247CiAgICAgIGl0ZXJhdG9yIG9sZF9maW5pc2ggPSBmaW5pc2g7CiAgICAg
IGlmIChlbGVtc19hZnRlciA+IG4pIHsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoZmluaXNo
IC0gbiwgZmluaXNoLCBmaW5pc2gpOwogICAgICAgIGZpbmlzaCArPSBuOwogICAgICAgIGNvcHlf
YmFja3dhcmQocG9zaXRpb24sIG9sZF9maW5pc2ggLSBuLCBvbGRfZmluaXNoKTsKICAgICAgICBj
b3B5KGZpcnN0LCBsYXN0LCBwb3NpdGlvbik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAg
Rm9yd2FyZEl0ZXJhdG9yIG1pZCA9IGZpcnN0OwogICAgICAgIGFkdmFuY2UobWlkLCBlbGVtc19h
ZnRlcik7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KG1pZCwgbGFzdCwgZmluaXNoKTsKICAg
ICAgICBmaW5pc2ggKz0gbiAtIGVsZW1zX2FmdGVyOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29w
eShwb3NpdGlvbiwgb2xkX2ZpbmlzaCwgZmluaXNoKTsKICAgICAgICBmaW5pc2ggKz0gZWxlbXNf
YWZ0ZXI7CiAgICAgICAgY29weShmaXJzdCwgbWlkLCBwb3NpdGlvbik7CiAgICAgIH0KICAgIH0K
ICAgIGVsc2UgewogICAgICBjb25zdCBzaXplX3R5cGUgb2xkX3NpemUgPSBzaXplKCk7CiAgICAg
IGNvbnN0IHNpemVfdHlwZSBsZW4gPSBvbGRfc2l6ZSArIG1heChvbGRfc2l6ZSwgbik7CiAgICAg
IGl0ZXJhdG9yIG5ld19zdGFydCA9IGRhdGFfYWxsb2NhdG9yOjphbGxvY2F0ZShsZW4pOwogICAg
ICBpdGVyYXRvciBuZXdfZmluaXNoID0gbmV3X3N0YXJ0OwogICAgICB0cnkgIHsKICAgICAgICBu
ZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KHN0YXJ0LCBwb3NpdGlvbiwgbmV3X3N0YXJ0
KTsKICAgICAgICBuZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGZpcnN0LCBsYXN0LCBu
ZXdfZmluaXNoKTsKICAgICAgICBuZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KHBvc2l0
aW9uLCBmaW5pc2gsIG5ld19maW5pc2gpOwogICAgICB9CgogICAgICBjYXRjaCguLi4pIHsKICAg
ICAgICBkZXN0cm95KG5ld19zdGFydCwgbmV3X2ZpbmlzaCk7CiAgICAgICAgZGF0YV9hbGxvY2F0
b3I6OmRlYWxsb2NhdGUobmV3X3N0YXJ0LCBsZW4pOwogICAgICAgIHRocm93OwogICAgICB9Cgog
ICAgICBkZXN0cm95KHN0YXJ0LCBmaW5pc2gpOwogICAgICBkZWFsbG9jYXRlKCk7CiAgICAgIHN0
YXJ0ID0gbmV3X3N0YXJ0OwogICAgICBmaW5pc2ggPSBuZXdfZmluaXNoOwogICAgICBlbmRfb2Zf
c3RvcmFnZSA9IG5ld19zdGFydCArIGxlbjsKICAgIH0KICB9Cn0KCiMgNTIyICIvdXNyL2luY2x1
ZGUvZysrLTIvc3RsX3ZlY3Rvci5oIiAzCgoKCgoKCiAgCgoKCiAKIAogCiMgMzQgIi91c3IvaW5j
bHVkZS9nKystMi92ZWN0b3IiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX2J2ZWN0
b3IuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKICAKCnN0YXRpYyBj
b25zdCBpbnQgX19XT1JEX0JJVCA9IGludCg4ICpzaXplb2YodW5zaWduZWQgaW50KSk7CgoKCgoK
c3RydWN0IF9fYml0X3JlZmVyZW5jZSB7CiAgdW5zaWduZWQgaW50KiBwOwogIHVuc2lnbmVkIGlu
dCBtYXNrOwogIF9fYml0X3JlZmVyZW5jZSh1bnNpZ25lZCBpbnQqIHgsIHVuc2lnbmVkIGludCB5
KSA6IHAoeCksIG1hc2soeSkge30KCnB1YmxpYzoKICBfX2JpdF9yZWZlcmVuY2UoKSA6IHAoMCks
IG1hc2soMCkge30KICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISghKCpwICYgbWFz
aykpOyB9CiAgX19iaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oYm9vbCB4KSB7CiAgICBpZiAoeCkg
ICAgICAKICAgICAgKnAgfD0gbWFzazsKICAgIGVsc2UgCiAgICAgICpwICY9IH5tYXNrOwogICAg
cmV0dXJuICp0aGlzOwogIH0KICBfX2JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShjb25zdCBfX2Jp
dF9yZWZlcmVuY2UmIHgpIHsgcmV0dXJuICp0aGlzID0gYm9vbCh4KTsgfQogIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBfX2JpdF9yZWZlcmVuY2UmIHgpIGNvbnN0IHsKICAgIHJldHVybiBib29sKCp0
aGlzKSA9PSBib29sKHgpOwogIH0KICBib29sIG9wZXJhdG9yPChjb25zdCBfX2JpdF9yZWZlcmVu
Y2UmIHgpIGNvbnN0IHsKICAgIHJldHVybiBib29sKCp0aGlzKSA8IGJvb2woeCk7CiAgfQogIHZv
aWQgZmxpcCgpIHsgKnAgXj0gbWFzazsgfQp9OwoKaW5saW5lIHZvaWQgc3dhcChfX2JpdF9yZWZl
cmVuY2UgeCwgX19iaXRfcmVmZXJlbmNlIHkpIHsKICBib29sIHRtcCA9IHg7CiAgeCA9IHk7CiAg
eSA9IHRtcDsKfQoKc3RydWN0IF9fYml0X2l0ZXJhdG9yIDogcHVibGljIHJhbmRvbV9hY2Nlc3Nf
aXRlcmF0b3I8Ym9vbCwgcHRyZGlmZl90PiB7CiAgdHlwZWRlZiBfX2JpdF9yZWZlcmVuY2UgIHJl
ZmVyZW5jZTsKICB0eXBlZGVmIF9fYml0X3JlZmVyZW5jZSogcG9pbnRlcjsKICB0eXBlZGVmIF9f
Yml0X2l0ZXJhdG9yIGl0ZXJhdG9yOwoKICB1bnNpZ25lZCBpbnQqIHA7CiAgdW5zaWduZWQgaW50
IG9mZnNldDsKICB2b2lkIGJ1bXBfdXAoKSB7CiAgICBpZiAob2Zmc2V0KysgPT0gX19XT1JEX0JJ
VCAtIDEpIHsKICAgICAgb2Zmc2V0ID0gMDsKICAgICAgKytwOwogICAgfQogIH0KICB2b2lkIGJ1
bXBfZG93bigpIHsKICAgIGlmIChvZmZzZXQtLSA9PSAwKSB7CiAgICAgIG9mZnNldCA9IF9fV09S
RF9CSVQgLSAxOwogICAgICAtLXA7CiAgICB9CiAgfQoKICBfX2JpdF9pdGVyYXRvcigpIDogcCgw
KSwgb2Zmc2V0KDApIHt9CiAgX19iaXRfaXRlcmF0b3IodW5zaWduZWQgaW50KiB4LCB1bnNpZ25l
ZCBpbnQgeSkgOiBwKHgpLCBvZmZzZXQoeSkge30KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29u
c3QgeyByZXR1cm4gcmVmZXJlbmNlKHAsIDFVIDw8IG9mZnNldCk7IH0KICBpdGVyYXRvciYgb3Bl
cmF0b3IrKygpIHsKICAgIGJ1bXBfdXAoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0
b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGl0ZXJhdG9yIHRtcCA9ICp0aGlzOwogICAgYnVtcF91
cCgpOwogICAgcmV0dXJuIHRtcDsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7CiAgICBi
dW1wX2Rvd24oKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItLShp
bnQpIHsKICAgIGl0ZXJhdG9yIHRtcCA9ICp0aGlzOwogICAgYnVtcF9kb3duKCk7CiAgICByZXR1
cm4gdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgaSkgewog
ICAgZGlmZmVyZW5jZV90eXBlIG4gPSBpICsgb2Zmc2V0OwogICAgcCArPSBuIC8gX19XT1JEX0JJ
VDsKICAgIG4gPSBuICUgX19XT1JEX0JJVDsKICAgIGlmIChuIDwgMCkgewogICAgICBvZmZzZXQg
PSAodW5zaWduZWQgaW50KSBuICsgX19XT1JEX0JJVDsKICAgICAgLS1wOwogICAgfSBlbHNlCiAg
ICAgIG9mZnNldCA9ICh1bnNpZ25lZCBpbnQpIG47CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0
ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBpKSB7CiAgICAqdGhpcyArPSAtaTsK
ICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlw
ZSBpKSBjb25zdCB7CiAgICBpdGVyYXRvciB0bXAgPSAqdGhpczsKICAgIHJldHVybiB0bXAgKz0g
aTsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBpKSBjb25zdCB7CiAg
ICBpdGVyYXRvciB0bXAgPSAqdGhpczsKICAgIHJldHVybiB0bXAgLT0gaTsKICB9CiAgZGlmZmVy
ZW5jZV90eXBlIG9wZXJhdG9yLShpdGVyYXRvciB4KSBjb25zdCB7CiAgICByZXR1cm4gX19XT1JE
X0JJVCAqIChwIC0geC5wKSArIG9mZnNldCAtIHgub2Zmc2V0OwogIH0KICByZWZlcmVuY2Ugb3Bl
cmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgaSkgeyByZXR1cm4gKigqdGhpcyArIGkpOyB9CiAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiB4KSBjb25zdCB7CiAgICByZXR1cm4gcCA9PSB4
LnAgJiYgb2Zmc2V0ID09IHgub2Zmc2V0OwogIH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRl
cmF0b3ImIHgpIGNvbnN0IHsKICAgIHJldHVybiBwICE9IHgucCB8fCBvZmZzZXQgIT0geC5vZmZz
ZXQ7CiAgfQogIGJvb2wgb3BlcmF0b3I8KGl0ZXJhdG9yIHgpIGNvbnN0IHsKICAgIHJldHVybiBw
IDwgeC5wIHx8IChwID09IHgucCAmJiBvZmZzZXQgPCB4Lm9mZnNldCk7CiAgfQp9OwoKc3RydWN0
IF9fYml0X2NvbnN0X2l0ZXJhdG9yCiAgOiBwdWJsaWMgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcjxi
b29sLCBwdHJkaWZmX3Q+CnsKICB0eXBlZGVmIGJvb2wgICAgICAgICAgICAgICAgIHJlZmVyZW5j
ZTsKICB0eXBlZGVmIGJvb2wgICAgICAgICAgICAgICAgIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBl
ZGVmIGNvbnN0IGJvb2wqICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfX2JpdF9jb25zdF9p
dGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgdW5zaWduZWQgaW50KiBwOwogIHVuc2lnbmVkIGlu
dCBvZmZzZXQ7CiAgdm9pZCBidW1wX3VwKCkgewogICAgaWYgKG9mZnNldCsrID09IF9fV09SRF9C
SVQgLSAxKSB7CiAgICAgIG9mZnNldCA9IDA7CiAgICAgICsrcDsKICAgIH0KICB9CiAgdm9pZCBi
dW1wX2Rvd24oKSB7CiAgICBpZiAob2Zmc2V0LS0gPT0gMCkgewogICAgICBvZmZzZXQgPSBfX1dP
UkRfQklUIC0gMTsKICAgICAgLS1wOwogICAgfQogIH0KCiAgX19iaXRfY29uc3RfaXRlcmF0b3Io
KSA6IHAoMCksIG9mZnNldCgwKSB7fQogIF9fYml0X2NvbnN0X2l0ZXJhdG9yKHVuc2lnbmVkIGlu
dCogeCwgdW5zaWduZWQgaW50IHkpIDogcCh4KSwgb2Zmc2V0KHkpIHt9CiAgX19iaXRfY29uc3Rf
aXRlcmF0b3IoY29uc3QgX19iaXRfaXRlcmF0b3ImIHgpIDogcCh4LnApLCBvZmZzZXQoeC5vZmZz
ZXQpIHt9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIHJldHVybiBf
X2JpdF9yZWZlcmVuY2UocCwgMVUgPDwgb2Zmc2V0KTsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9w
ZXJhdG9yKysoKSB7CiAgICBidW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0
X2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBjb25zdF9pdGVyYXRvciB0bXAgPSAqdGhp
czsKICAgIGJ1bXBfdXAoKTsKICAgIHJldHVybiB0bXA7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBv
cGVyYXRvci0tKCkgewogICAgYnVtcF9kb3duKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNv
bnN0X2l0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBjb25zdF9pdGVyYXRvciB0bXAgPSAq
dGhpczsKICAgIGJ1bXBfZG93bigpOwogICAgcmV0dXJuIHRtcDsKICB9CiAgY29uc3RfaXRlcmF0
b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIGkpIHsKICAgIGRpZmZlcmVuY2VfdHlwZSBu
ID0gaSArIG9mZnNldDsKICAgIHAgKz0gbiAvIF9fV09SRF9CSVQ7CiAgICBuID0gbiAlIF9fV09S
RF9CSVQ7CiAgICBpZiAobiA8IDApIHsKICAgICAgb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgbiAr
IF9fV09SRF9CSVQ7CiAgICAgIC0tcDsKICAgIH0gZWxzZQogICAgICBvZmZzZXQgPSAodW5zaWdu
ZWQgaW50KSBuOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0
b3ItPShkaWZmZXJlbmNlX3R5cGUgaSkgewogICAgKnRoaXMgKz0gLWk7CiAgICByZXR1cm4gKnRo
aXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgaSkgY29u
c3QgewogICAgY29uc3RfaXRlcmF0b3IgdG1wID0gKnRoaXM7CiAgICByZXR1cm4gdG1wICs9IGk7
CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgaSkgY29uc3Qg
ewogICAgY29uc3RfaXRlcmF0b3IgdG1wID0gKnRoaXM7CiAgICByZXR1cm4gdG1wIC09IGk7CiAg
fQogIGRpZmZlcmVuY2VfdHlwZSBvcGVyYXRvci0oY29uc3RfaXRlcmF0b3IgeCkgY29uc3Qgewog
ICAgcmV0dXJuIF9fV09SRF9CSVQgKiAocCAtIHgucCkgKyBvZmZzZXQgLSB4Lm9mZnNldDsKICB9
CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIGkpIHsgCiAgICBy
ZXR1cm4gKigqdGhpcyArIGkpOyAKICB9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0
ZXJhdG9yJiB4KSBjb25zdCB7CiAgICByZXR1cm4gcCA9PSB4LnAgJiYgb2Zmc2V0ID09IHgub2Zm
c2V0OwogIH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIHgpIGNvbnN0
IHsKICAgIHJldHVybiBwICE9IHgucCB8fCBvZmZzZXQgIT0geC5vZmZzZXQ7CiAgfQogIGJvb2wg
b3BlcmF0b3I8KGNvbnN0X2l0ZXJhdG9yIHgpIGNvbnN0IHsKICAgIHJldHVybiBwIDwgeC5wIHx8
IChwID09IHgucCAmJiBvZmZzZXQgPCB4Lm9mZnNldCk7CiAgfQp9OwoKIAogCiAKIAogCgoKCgoK
CgoKCgogICAgICAgIAoKICAgICAgICAKdGVtcGxhdGU8Y2xhc3MgQWxsb2M+IGNsYXNzIHZlY3Rv
cjxib29sLCBBbGxvYz4KCgoKewoKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzx1bnNpZ25lZCBpbnQs
IEFsbG9jPiBkYXRhX2FsbG9jYXRvcjsKCgoKcHVibGljOgogIHR5cGVkZWYgYm9vbCB2YWx1ZV90
eXBlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZm
ZXJlbmNlX3R5cGU7IAogIHR5cGVkZWYgX19iaXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBl
ZGVmIGJvb2wgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX19iaXRfcmVmZXJlbmNlKiBwb2lu
dGVyOwogIHR5cGVkZWYgY29uc3QgYm9vbCogY29uc3RfcG9pbnRlcjsKCiAgdHlwZWRlZiBfX2Jp
dF9pdGVyYXRvciAgICAgICAgICAgICAgICBpdGVyYXRvcjsKICB0eXBlZGVmIF9fYml0X2NvbnN0
X2l0ZXJhdG9yICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOwoKCiAgdHlwZWRlZiByZXZlcnNlX2l0
ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYg
cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCgoKCgoKCnByb3Rl
Y3RlZDoKICBpdGVyYXRvciBzdGFydDsKICBpdGVyYXRvciBmaW5pc2g7CiAgdW5zaWduZWQgaW50
KiBlbmRfb2Zfc3RvcmFnZTsKICB1bnNpZ25lZCBpbnQqIGJpdF9hbGxvYyhzaXplX3R5cGUgbikg
ewogICAgcmV0dXJuIGRhdGFfYWxsb2NhdG9yOjphbGxvY2F0ZSgobiArIF9fV09SRF9CSVQgLSAx
KS9fX1dPUkRfQklUKTsKICB9CiAgdm9pZCBkZWFsbG9jYXRlKCkgewogICAgaWYgKHN0YXJ0LnAp
CiAgICAgIGRhdGFfYWxsb2NhdG9yOjpkZWFsbG9jYXRlKHN0YXJ0LnAsIGVuZF9vZl9zdG9yYWdl
IC0gc3RhcnQucCk7CiAgfQogIHZvaWQgaW5pdGlhbGl6ZShzaXplX3R5cGUgbikgewogICAgdW5z
aWduZWQgaW50KiBxID0gYml0X2FsbG9jKG4pOwogICAgZW5kX29mX3N0b3JhZ2UgPSBxICsgKG4g
KyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgIHN0YXJ0ID0gaXRlcmF0b3IocSwgMCk7
CiAgICBmaW5pc2ggPSBzdGFydCArIGRpZmZlcmVuY2VfdHlwZShuKTsKICB9CiAgdm9pZCBpbnNl
cnRfYXV4KGl0ZXJhdG9yIHBvc2l0aW9uLCBib29sIHgpIHsKICAgIGlmIChmaW5pc2gucCAhPSBl
bmRfb2Zfc3RvcmFnZSkgewogICAgICBjb3B5X2JhY2t3YXJkKHBvc2l0aW9uLCBmaW5pc2gsIGZp
bmlzaCArIDEpOwogICAgICAqcG9zaXRpb24gPSB4OwogICAgICArK2ZpbmlzaDsKICAgIH0KICAg
IGVsc2UgewogICAgICBzaXplX3R5cGUgbGVuID0gc2l6ZSgpID8gMiAqIHNpemUoKSA6IF9fV09S
RF9CSVQ7CiAgICAgIHVuc2lnbmVkIGludCogcSA9IGJpdF9hbGxvYyhsZW4pOwogICAgICBpdGVy
YXRvciBpID0gY29weShiZWdpbigpLCBwb3NpdGlvbiwgaXRlcmF0b3IocSwgMCkpOwogICAgICAq
aSsrID0geDsKICAgICAgZmluaXNoID0gY29weShwb3NpdGlvbiwgZW5kKCksIGkpOwogICAgICBk
ZWFsbG9jYXRlKCk7CiAgICAgIGVuZF9vZl9zdG9yYWdlID0gcSArIChsZW4gKyBfX1dPUkRfQklU
IC0gMSkvX19XT1JEX0JJVDsKICAgICAgc3RhcnQgPSBpdGVyYXRvcihxLCAwKTsKICAgIH0KICB9
CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluaXRpYWxpemVfcmFu
Z2UoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgIHN0YXJ0ID0gaXRlcmF0b3IoKTsK
ICAgIGZpbmlzaCA9IGl0ZXJhdG9yKCk7CiAgICBlbmRfb2Zfc3RvcmFnZSA9IDA7CiAgICBmb3Ig
KCA7IGZpcnN0ICE9IGxhc3Q7ICsrZmlyc3QpIAogICAgICBwdXNoX2JhY2soKmZpcnN0KTsKICB9
CgogIHRlbXBsYXRlIDxjbGFzcyBGb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBpbml0aWFsaXplX3Jh
bmdlKEZvcndhcmRJdGVyYXRvciBmaXJzdCwgRm9yd2FyZEl0ZXJhdG9yIGxhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICBzaXplX3R5cGUgbiA9
IDA7CiAgICBkaXN0YW5jZShmaXJzdCwgbGFzdCwgbik7CiAgICBpbml0aWFsaXplKG4pOwogICAg
Y29weShmaXJzdCwgbGFzdCwgc3RhcnQpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIElucHV0SXRl
cmF0b3I+CiAgdm9pZCBpbnNlcnRfcmFuZ2UoaXRlcmF0b3IgcG9zLAogICAgICAgICAgICAgICAg
ICAgIElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCwKICAgICAgICAgICAg
ICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgIGZvciAoIDsgZmlyc3QgIT0gbGFzdDsg
KytmaXJzdCkgewogICAgICBwb3MgPSBpbnNlcnQocG9zLCAqZmlyc3QpOwogICAgICArK3BvczsK
ICAgIH0KICB9CgogIHRlbXBsYXRlIDxjbGFzcyBGb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBpbnNl
cnRfcmFuZ2UoaXRlcmF0b3IgcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgRm9yd2FyZEl0
ZXJhdG9yIGZpcnN0LCBGb3J3YXJkSXRlcmF0b3IgbGFzdCwKICAgICAgICAgICAgICAgICAgICBm
b3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgaWYgKGZpcnN0ICE9IGxhc3QpIHsKICAgICAgc2l6
ZV90eXBlIG4gPSAwOwogICAgICBkaXN0YW5jZShmaXJzdCwgbGFzdCwgbik7CiAgICAgIGlmIChj
YXBhY2l0eSgpIC0gc2l6ZSgpID49IG4pIHsKICAgICAgICBjb3B5X2JhY2t3YXJkKHBvc2l0aW9u
LCBlbmQoKSwgZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKG4pKTsKICAgICAgICBjb3B5KGZpcnN0
LCBsYXN0LCBwb3NpdGlvbik7CiAgICAgICAgZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShuKTsK
ICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzaXplX3R5cGUgbGVuID0gc2l6ZSgpICsgbWF4
KHNpemUoKSwgbik7CiAgICAgICAgdW5zaWduZWQgaW50KiBxID0gYml0X2FsbG9jKGxlbik7CiAg
ICAgICAgaXRlcmF0b3IgaSA9IGNvcHkoYmVnaW4oKSwgcG9zaXRpb24sIGl0ZXJhdG9yKHEsIDAp
KTsKICAgICAgICBpID0gY29weShmaXJzdCwgbGFzdCwgaSk7CiAgICAgICAgZmluaXNoID0gY29w
eShwb3NpdGlvbiwgZW5kKCksIGkpOwogICAgICAgIGRlYWxsb2NhdGUoKTsKICAgICAgICBlbmRf
b2Zfc3RvcmFnZSA9IHEgKyAobGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAg
ICAgc3RhcnQgPSBpdGVyYXRvcihxLCAwKTsKICAgICAgfQogICAgfQogIH0gICAgICAKCgoKcHVi
bGljOgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gc3RhcnQ7IH0KICBjb25zdF9pdGVyYXRv
ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIHN0YXJ0OyB9CiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1
cm4gZmluaXNoOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gZmluaXNo
OyB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRv
cihlbmQoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsgCiAg
ICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IAogIH0KICByZXZlcnNlX2l0
ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAgY29u
c3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyAKICAgIHJldHVybiBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyAKICB9CgogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUo
KSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CiAgc2l6ZV90eXBlIGNhcGFjaXR5KCkg
Y29uc3QgewogICAgcmV0dXJuIHNpemVfdHlwZShjb25zdF9pdGVyYXRvcihlbmRfb2Zfc3RvcmFn
ZSwgMCkgLSBiZWdpbigpKTsKICB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJlZ2lu
KCkgPT0gZW5kKCk7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgbikgewogICAg
cmV0dXJuICooYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShuKSk7CiAgfQogIGNvbnN0X3JlZmVy
ZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBuKSBjb25zdCB7CiAgICByZXR1cm4gKihiZWdpbigp
ICsgZGlmZmVyZW5jZV90eXBlKG4pKTsKICB9CiAgdmVjdG9yICgpIDogc3RhcnQoaXRlcmF0b3Io
KSksIGZpbmlzaChpdGVyYXRvcigpKSwgZW5kX29mX3N0b3JhZ2UoMCkge30KICB2ZWN0b3IgKHNp
emVfdHlwZSBuLCBib29sIHZhbHVlKSB7CiAgICBpbml0aWFsaXplKG4pOwogICAgZmlsbChzdGFy
dC5wLCBlbmRfb2Zfc3RvcmFnZSwgdmFsdWUgPyB+MCA6IDApOwogIH0KICB2ZWN0b3IgKGludCBu
LCBib29sIHZhbHVlKSB7CiAgICBpbml0aWFsaXplKG4pOwogICAgZmlsbChzdGFydC5wLCBlbmRf
b2Zfc3RvcmFnZSwgdmFsdWUgPyB+MCA6IDApOwogIH0KICB2ZWN0b3IgKGxvbmcgbiwgYm9vbCB2
YWx1ZSkgewogICAgaW5pdGlhbGl6ZShuKTsKICAgIGZpbGwoc3RhcnQucCwgZW5kX29mX3N0b3Jh
Z2UsIHZhbHVlID8gfjAgOiAwKTsKICB9CiAgZXhwbGljaXQgdmVjdG9yIChzaXplX3R5cGUgbikg
ewogICAgaW5pdGlhbGl6ZShuKTsKICAgIGZpbGwoc3RhcnQucCwgZW5kX29mX3N0b3JhZ2UsIDAp
OwogIH0KICB2ZWN0b3IgKGNvbnN0IHZlY3RvciAmIHgpIHsKICAgIGluaXRpYWxpemUoeC5zaXpl
KCkpOwogICAgY29weSh4LmJlZ2luKCksIHguZW5kKCksIHN0YXJ0KTsKICB9CgoKICB0ZW1wbGF0
ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICB2ZWN0b3IgKElucHV0SXRlcmF0b3IgZmlyc3QsIElu
cHV0SXRlcmF0b3IgbGFzdCkgewogICAgaW5pdGlhbGl6ZV9yYW5nZShmaXJzdCwgbGFzdCwgaXRl
cmF0b3JfY2F0ZWdvcnkoZmlyc3QpKTsKICB9CiMgNDQ4ICIvdXNyL2luY2x1ZGUvZysrLTIvc3Rs
X2J2ZWN0b3IuaCIgMwoKCiAgfnZlY3RvciAoKSB7IGRlYWxsb2NhdGUoKTsgfQogIHZlY3RvciAm
IG9wZXJhdG9yPShjb25zdCB2ZWN0b3IgJiB4KSB7CiAgICBpZiAoJnggPT0gdGhpcykgcmV0dXJu
ICp0aGlzOwogICAgaWYgKHguc2l6ZSgpID4gY2FwYWNpdHkoKSkgewogICAgICBkZWFsbG9jYXRl
KCk7CiAgICAgIGluaXRpYWxpemUoeC5zaXplKCkpOwogICAgfQogICAgY29weSh4LmJlZ2luKCks
IHguZW5kKCksIGJlZ2luKCkpOwogICAgZmluaXNoID0gYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlw
ZSh4LnNpemUoKSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIHZvaWQgcmVzZXJ2ZShzaXplX3R5
cGUgbikgewogICAgaWYgKGNhcGFjaXR5KCkgPCBuKSB7CiAgICAgIHVuc2lnbmVkIGludCogcSA9
IGJpdF9hbGxvYyhuKTsKICAgICAgZmluaXNoID0gY29weShiZWdpbigpLCBlbmQoKSwgaXRlcmF0
b3IocSwgMCkpOwogICAgICBkZWFsbG9jYXRlKCk7CiAgICAgIHN0YXJ0ID0gaXRlcmF0b3IocSwg
MCk7CiAgICAgIGVuZF9vZl9zdG9yYWdlID0gcSArIChuICsgX19XT1JEX0JJVCAtIDEpL19fV09S
RF9CSVQ7CiAgICB9CiAgfQogIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9
CiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KICBy
ZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQogIGNvbnN0X3JlZmVyZW5j
ZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgdm9pZCBwdXNoX2JhY2so
Ym9vbCB4KSB7CiAgICBpZiAoZmluaXNoLnAgIT0gZW5kX29mX3N0b3JhZ2UpCiAgICAgICpmaW5p
c2grKyA9IHg7CiAgICBlbHNlCiAgICAgIGluc2VydF9hdXgoZW5kKCksIHgpOwogIH0KICB2b2lk
IHN3YXAodmVjdG9yICYgeCkgewogICAgIDo6c3dhcChzdGFydCwgeC5zdGFydCk7CiAgICAgOjpz
d2FwKGZpbmlzaCwgeC5maW5pc2gpOwogICAgIDo6c3dhcChlbmRfb2Zfc3RvcmFnZSwgeC5lbmRf
b2Zfc3RvcmFnZSk7CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBwb3NpdGlvbiwgYm9v
bCB4ID0gYm9vbCgpKSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgbiA9IHBvc2l0aW9uIC0gYmVnaW4o
KTsKICAgIGlmIChmaW5pc2gucCAhPSBlbmRfb2Zfc3RvcmFnZSAmJiBwb3NpdGlvbiA9PSBlbmQo
KSkKICAgICAgKmZpbmlzaCsrID0geDsKICAgIGVsc2UKICAgICAgaW5zZXJ0X2F1eChwb3NpdGlv
biwgeCk7CiAgICByZXR1cm4gYmVnaW4oKSArIG47CiAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIElu
cHV0SXRlcmF0b3I+IHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIHBvc2l0aW9uLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnB1dEl0ZXJhdG9yIGZpcnN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnB1dEl0ZXJhdG9yIGxh
c3QpIHsKICAgIGluc2VydF9yYW5nZShwb3NpdGlvbiwgZmlyc3QsIGxhc3QsIGl0ZXJhdG9yX2Nh
dGVnb3J5KGZpcnN0KSk7CiAgfQojIDU0MyAiL3Vzci9pbmNsdWRlL2crKy0yL3N0bF9idmVjdG9y
LmgiIDMKCiAgCiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgcG9zaXRpb24sIHNpemVfdHlwZSBuLCBi
b29sIHgpIHsKICAgIGlmIChuID09IDApIHJldHVybjsKICAgIGlmIChjYXBhY2l0eSgpIC0gc2l6
ZSgpID49IG4pIHsKICAgICAgY29weV9iYWNrd2FyZChwb3NpdGlvbiwgZW5kKCksIGZpbmlzaCAr
IGRpZmZlcmVuY2VfdHlwZShuKSk7CiAgICAgIGZpbGwocG9zaXRpb24sIHBvc2l0aW9uICsgZGlm
ZmVyZW5jZV90eXBlKG4pLCB4KTsKICAgICAgZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShuKTsK
ICAgIH0KICAgIGVsc2UgewogICAgICBzaXplX3R5cGUgbGVuID0gc2l6ZSgpICsgbWF4KHNpemUo
KSwgbik7CiAgICAgIHVuc2lnbmVkIGludCogcSA9IGJpdF9hbGxvYyhsZW4pOwogICAgICBpdGVy
YXRvciBpID0gY29weShiZWdpbigpLCBwb3NpdGlvbiwgaXRlcmF0b3IocSwgMCkpOwogICAgICBm
aWxsX24oaSwgbiwgeCk7CiAgICAgIGZpbmlzaCA9IGNvcHkocG9zaXRpb24sIGVuZCgpLCBpICsg
ZGlmZmVyZW5jZV90eXBlKG4pKTsKICAgICAgZGVhbGxvY2F0ZSgpOwogICAgICBlbmRfb2Zfc3Rv
cmFnZSA9IHEgKyAobGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgIHN0YXJ0
ID0gaXRlcmF0b3IocSwgMCk7CiAgICB9CiAgfQoKICB2b2lkIGluc2VydChpdGVyYXRvciBwb3Ms
IGludCBuLCBib29sIHgpICB7IGluc2VydChwb3MsIChzaXplX3R5cGUpbiwgeCk7IH0KICB2b2lk
IGluc2VydChpdGVyYXRvciBwb3MsIGxvbmcgbiwgYm9vbCB4KSB7IGluc2VydChwb3MsIChzaXpl
X3R5cGUpbiwgeCk7IH0KCiAgdm9pZCBwb3BfYmFjaygpIHsgLS1maW5pc2g7IH0KICBpdGVyYXRv
ciBlcmFzZShpdGVyYXRvciBwb3NpdGlvbikgewogICAgaWYgKHBvc2l0aW9uICsgMSAhPSBlbmQo
KSkKICAgICAgY29weShwb3NpdGlvbiArIDEsIGVuZCgpLCBwb3NpdGlvbik7CiAgICAtLWZpbmlz
aDsKICAgIHJldHVybiBwb3NpdGlvbjsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgZmly
c3QsIGl0ZXJhdG9yIGxhc3QpIHsKICAgIGZpbmlzaCA9IGNvcHkobGFzdCwgZW5kKCksIGZpcnN0
KTsKICAgIHJldHVybiBmaXJzdDsKICB9CiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIG5ld19zaXpl
LCBib29sIHggPSBib29sKCkpIHsKICAgIGlmIChuZXdfc2l6ZSA8IHNpemUoKSkgCiAgICAgIGVy
YXNlKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUobmV3X3NpemUpLCBlbmQoKSk7CiAgICBlbHNl
CiAgICAgIGluc2VydChlbmQoKSwgbmV3X3NpemUgLSBzaXplKCksIHgpOwogIH0KICB2b2lkIGNs
ZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KfTsKCgoKdHlwZWRlZiB2ZWN0b3I8Ym9v
bCwgYWxsb2M+IGJpdF92ZWN0b3I7CgojIDYwMSAiL3Vzci9pbmNsdWRlL2crKy0yL3N0bF9idmVj
dG9yLmgiIDMKCgoKCgoKCgoKICAKCgoKIAogCiAKIyAzNSAiL3Vzci9pbmNsdWRlL2crKy0yL3Zl
Y3RvciIgMiAzCgoKCgogCiAKIAojIDQgImgvbnJoeXByaXZhdGUuaCIgMgoKdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKCmNsYXNzIE5SSFlfY2xhc3NBcHBhcml0aW9uOwpjbGFzcyBOUkhZX2NsYXNzQ2Ft
ZXJhOwpjbGFzcyBOUkhZX2NsYXNzQ29sbGlzaW9uOwpjbGFzcyBOUkhZX2NsYXNzRHluYW1pY3M7
CmNsYXNzIE5SSFlfY2xhc3NGb3JjZTsKY2xhc3MgTlJIWV9jbGFzc0Z1cjsKY2xhc3MgTlJIWV9j
bGFzc011c2NsZTsKY2xhc3MgTlJIWV9jbGFzc0dlbmVyYXRvcjsKY2xhc3MgTlJIWV9jbGFzc0hv
bWU7CmNsYXNzIE5SSFlfY2xhc3NJazsKY2xhc3MgTlJIWV9jbGFzc0lrQ2hhaW47CmNsYXNzIE5S
SFlfY2xhc3NJbmt5OwpjbGFzcyBOUkhZX2NsYXNzS2xpc3Q7CmNsYXNzIE5SSFlfY2xhc3NMYXll
cjsKY2xhc3MgTlJIWV9jbGFzc0xpZ2h0OwpjbGFzcyBOUkhZX2NsYXNzTWFwOwpjbGFzcyBOUkhZ
X2NsYXNzTWF0ZXJpYWw7CmNsYXNzIE5SSFlfY2xhc3NNb2RlbDsKY2xhc3MgTlJIWV9jbGFzc09i
amVjdDsKY2xhc3MgTlJIWV9jbGFzc1Jvb3Q7CmNsYXNzIE5SSFlfY2xhc3NSb3RvOwpjbGFzcyBO
UkhZX2NsYXNzU2NhZmZvbGQ7CmNsYXNzIE5SSFlfY2xhc3NTb3VuZDsKY2xhc3MgTlJIWV9jbGFz
c1RleDsKY2xhc3MgTlJIWV9jbGFzc1RoaW5nOwpjbGFzcyBOUkhZX2NsYXNzVGltZTsKY2xhc3Mg
TlJIWV9jbGFzc1RyYWNrOwpjbGFzcyBOUkhZX2NsYXNzVXNlTWFwOwoKY2xhc3MgSFVfRXhwcmVz
c2lvbjsKY2xhc3MgTlJIWV9JTlRfRlJBTkdFOwpjbGFzcyBOUkhZX0ZSQU5HRTsKY2xhc3MgTlJI
WV9SRUFMX0ZSQU5HRTsKCmNsYXNzIEZyYW5nZUNhY2hlTG9yZDsKY2xhc3MgTlJIWV9jbGFzc0No
YW5uZWw7CmNsYXNzIE5SSFlfY2xhc3NDb21tYW5kOwpjbGFzcyBOUkhZX1dvcmxkOwpjbGFzcyBY
Rk9STV9CYXNlOwoKIyAxICJoL05SSFlfU3RkLmgiIDEKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgwKIAoKCgogCgoKCgoKCgoKIAoKIAoKIyAxICIvc29mdHdhcmUvdGhhbGlhL2gvc3RkdHlwZXMu
aCIgMQoKIAoKCgoKCgoKCgoKCgoKCgoKCiMgMjAzICIvc29mdHdhcmUvdGhhbGlhL2gvc3RkdHlw
ZXMuaCIKCgoKCgoKCgoKCgoKCgojIDQzICJoL05SSFlfU3RkLmgiIDIKCiMgMSAiL3NvZnR3YXJl
L3RoYWxpYS9oL3N0ZGRlZnMuaCIgMQogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9zb2Z0
d2FyZS90aGFsaWEvaC9zdGR0eXBlcy5oIiAxCgogCgoKCgoKCgoKCgoKCgoKCgoKIyAyMDMgIi9z
b2Z0d2FyZS90aGFsaWEvaC9zdGR0eXBlcy5oIgoKCgoKCgoKCgoKCgoKCiMgMjMgIi9zb2Z0d2Fy
ZS90aGFsaWEvaC9zdGRkZWZzLmgiIDIKCgogCiAKCgoKICAKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
IAoKCgoKCgoKCiMgNDQgImgvTlJIWV9TdGQuaCIgMgoKIyAxICIvc29mdHdhcmUvdGhhbGlhL2gv
c3RkbWFjcm9zLmgiIDEKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiAKCiAK
CgoKCgogCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKCiAKCgoKCgoKCgoK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIyAxNDEgIi9zb2Z0d2FyZS90aGFsaWEvaC9z
dGRtYWNyb3MuaCIKICAgICAgICAgICAgICAgICAgICAgICAgIAoKCgoKIyA0NSAiaC9OUkhZX1N0
ZC5oIiAyCgoKIAoKCiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9oL3R4dC5oIiAxCiAKCgoKCgoKCgoK
CiMgMTIxICIvc29mdHdhcmUvdGhhbGlhL2gvdHh0LmgiCgojIDUwICJoL05SSFlfU3RkLmgiIDIK
CiAKCiAKCgoKIAoKCgoKIAoKIyAxICIvc29mdHdhcmUvdGhhbGlhL2gvc3RkbWF0aC5oIiAxCgog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgogCgoKCnR5cGVk
ZWYgZmxvYXQgTV9GTE9BVDsKCiAKc3RydWN0IE1fVmVjdG9yOwpzdHJ1Y3QgTV9WZWN0b3I0Owpz
dHJ1Y3QgTV9WZWN0b3IyOwpzdHJ1Y3QgTV9WZWN0b3JOOwoKc3RydWN0IE1fTWF0cml4OwpzdHJ1
Y3QgTV9NYXRyaXgyMjsKc3RydWN0IE1fTWF0cml4TU47CgppbmxpbmUgY29uc3QgY2hhciAqIGNs
YXNzTmFtZSggY29uc3QgTV9WZWN0b3IgJiApICAgeyByZXR1cm4gIk1fVmVjdG9yIjsgfQppbmxp
bmUgY29uc3QgY2hhciAqIGNsYXNzTmFtZSggY29uc3QgTV9WZWN0b3I0ICYgKSAgeyByZXR1cm4g
Ik1fVmVjdG9yNCI7IH07CmlubGluZSBjb25zdCBjaGFyICogY2xhc3NOYW1lKCBjb25zdCBNX1Zl
Y3RvcjIgJiApICB7IHJldHVybiAiTV9WZWN0b3IyIjsgfTsKaW5saW5lIGNvbnN0IGNoYXIgKiBj
bGFzc05hbWUoIGNvbnN0IE1fVmVjdG9yTiAmICkgIHsgcmV0dXJuICJNX1ZlY3Rvck4iOyB9OwoK
aW5saW5lIGNvbnN0IGNoYXIgKiBjbGFzc05hbWUoIGNvbnN0IE1fTWF0cml4ICYgKSAgIHsgcmV0
dXJuICJNX01hdHJpeCI7IH07CmlubGluZSBjb25zdCBjaGFyICogY2xhc3NOYW1lKCBjb25zdCBN
X01hdHJpeDIyICYgKSB7IHJldHVybiAiTV9NYXRyaXgyMiI7IH07CmlubGluZSBjb25zdCBjaGFy
ICogY2xhc3NOYW1lKCBjb25zdCBNX01hdHJpeE1OICYgKSB7IHJldHVybiAiTV9NYXRyaXhNTiI7
IH07CgogCnN0cnVjdCBWZXJ0ZXg7CnN0cnVjdCBNYXRyaXg0OwpzdHJ1Y3QgX1ZFQ1RPUjsKc3Ry
dWN0IF9WRUNUNEQ7CnN0cnVjdCBfVkVSVDJEOwpzdHJ1Y3QgX1BPSU5UMkQ7CnR5cGVkZWYgZmxv
YXQgTUFUUklYWzRdWzRdOwoKIAp0eXBlZGVmIHN0cnVjdCBfbmV0ZmlsZV9maWxlIE5FVEZJTEVf
RklMRTsKCgogCgoKCnN0cnVjdCBNX1ZlY3RvciB7CiAgICBNX0ZMT0FUICAgICB4LCB5LCB6OwoK
ICAgIE1fVmVjdG9yKCk7CiAgICBNX1ZlY3RvciggTV9GTE9BVCwgTV9GTE9BVCwgTV9GTE9BVCAp
OwogICAgTV9WZWN0b3IoIGNvbnN0IE1fVmVjdG9yICYgKTsKCiAgICBNX0ZMT0FUICAgICBvcGVy
YXRvcltdKCBpbnQgKSBjb25zdDsKICAgIE1fRkxPQVQgJiAgIG9wZXJhdG9yW10oIGludCApOwoK
ICAgICAKICAgIE1fVmVjdG9yKCBjb25zdCBWZXJ0ZXggJiApOwogICAgTV9WZWN0b3IoIGNvbnN0
IF9WRUNUT1IgJiApOyAgICAgICAgIAoKICAgIG9wZXJhdG9yIGNvbnN0IFZlcnRleCAmICgpIGNv
bnN0OwogICAgb3BlcmF0b3IgVmVydGV4ICYgKCk7CiAgICBvcGVyYXRvciBjb25zdCBfVkVDVE9S
ICYgKCkgY29uc3Q7CiAgICBvcGVyYXRvciBfVkVDVE9SICYgKCk7CiAgICB9OwoKc3RydWN0IE1f
VmVjdG9yNCB7CiAgICBNX0ZMT0FUICAgICB4LCB5LCB6LCB3OwoKICAgIE1fVmVjdG9yNCgpOwog
ICAgTV9WZWN0b3I0KCBNX0ZMT0FULCBNX0ZMT0FULCBNX0ZMT0FULCBNX0ZMT0FUICk7CiAgICBN
X1ZlY3RvcjQoIGNvbnN0IE1fVmVjdG9yICYsIE1fRkxPQVQgKTsKICAgIE1fVmVjdG9yNCggY29u
c3QgTV9WZWN0b3I0ICYgKTsKCiAgICBNX0ZMT0FUICAgICBvcGVyYXRvcltdKCBpbnQgKSBjb25z
dDsKICAgIE1fRkxPQVQgJiAgIG9wZXJhdG9yW10oIGludCApOwoKICAgICAKICAgIE1fVmVjdG9y
NCggY29uc3QgX1ZFQ1Q0RCAmICk7CgogICAgb3BlcmF0b3IgY29uc3QgX1ZFQ1Q0RCAmICgpIGNv
bnN0OwogICAgb3BlcmF0b3IgX1ZFQ1Q0RCAmICgpOwogICAgfTsKCnN0cnVjdCBNX1ZlY3RvcjIg
ewogICAgdW5pb24gewogICAgICAgIE1fRkxPQVQgICAgIHU7CiAgICAgICAgTV9GTE9BVCAgICAg
eDsKICAgICAgICB9OwogICAgdW5pb24gewogICAgICAgIE1fRkxPQVQgICAgIHY7CiAgICAgICAg
TV9GTE9BVCAgICAgeTsKICAgICAgICB9OwoKICAgIE1fVmVjdG9yMigpOwogICAgTV9WZWN0b3Iy
KCBNX0ZMT0FULCBNX0ZMT0FUICk7CiAgICBNX1ZlY3RvcjIoIGNvbnN0IE1fVmVjdG9yMiAmICk7
CgogICAgTV9GTE9BVCAgICAgb3BlcmF0b3JbXSggaW50ICkgY29uc3Q7CiAgICBNX0ZMT0FUICYg
ICBvcGVyYXRvcltdKCBpbnQgKTsKCiAgICAgCiAgICBNX1ZlY3RvcjIoIGNvbnN0IF9WRVJUMkQg
JiApOwogICAgTV9WZWN0b3IyKCBjb25zdCBfUE9JTlQyRCAmICk7CgogICAgb3BlcmF0b3IgY29u
c3QgX1ZFUlQyRCAmICgpIGNvbnN0OwogICAgb3BlcmF0b3IgX1ZFUlQyRCAmICgpOwogICAgb3Bl
cmF0b3IgY29uc3QgX1BPSU5UMkQgJiAoKSBjb25zdDsKICAgIG9wZXJhdG9yIF9QT0lOVDJEICYg
KCk7CiAgICB9OwoKY2xhc3MgTV9WZWN0b3JOIHsKICAgIGludCAgICAgICAgIHN6OwogICAgTV9G
TE9BVCAgICAgKmRhdGE7CgpwdWJsaWM6CiAgICBNX1ZlY3Rvck4oKTsKICAgIH5NX1ZlY3Rvck4o
KTsKICAgIE1fVmVjdG9yTiggaW50ICk7CiAgICBNX1ZlY3Rvck4oIGNvbnN0IE1fVmVjdG9yTiAm
ICk7CgogICAgTV9WZWN0b3JOICYgICAgIG9wZXJhdG9yPSggY29uc3QgTV9WZWN0b3JOICYgKTsK
ICAgIE1fRkxPQVQgICAgICAgICBvcGVyYXRvcltdKCBpbnQgKSBjb25zdDsKICAgIE1fRkxPQVQg
JiAgICAgICBvcGVyYXRvcltdKCBpbnQgKTsKICAgIGludCBuKCkgY29uc3QgeyByZXR1cm4gc3o7
IH0KCiAgICAgCiAgICBNX1ZlY3Rvck4oIGNvbnN0IE1fVmVjdG9yICYgKTsKICAgIE1fVmVjdG9y
TiggY29uc3QgTV9WZWN0b3I0ICYgKTsKICAgIE1fVmVjdG9yTiggY29uc3QgTV9WZWN0b3IyICYg
KTsKCiAgICBvcGVyYXRvciBNX1ZlY3RvcigpIGNvbnN0OwogICAgb3BlcmF0b3IgTV9WZWN0b3I0
KCkgY29uc3Q7CiAgICBvcGVyYXRvciBNX1ZlY3RvcjIoKSBjb25zdDsKCiAgICBmcmllbmQgTV9W
ZWN0b3JOIG9wZXJhdG9yKyggY29uc3QgTV9WZWN0b3JOICYsIGNvbnN0IE1fVmVjdG9yTiAmICk7
CiAgICBmcmllbmQgTV9WZWN0b3JOICYgb3BlcmF0b3IrPSggTV9WZWN0b3JOICYsIGNvbnN0IE1f
VmVjdG9yTiAmICk7CiAgICBmcmllbmQgTV9WZWN0b3JOIG9wZXJhdG9yLSggY29uc3QgTV9WZWN0
b3JOICYgKTsKICAgIGZyaWVuZCBNX1ZlY3Rvck4gb3BlcmF0b3ItKCBjb25zdCBNX1ZlY3Rvck4g
JiwgY29uc3QgTV9WZWN0b3JOICYgKTsKICAgIGZyaWVuZCBNX1ZlY3Rvck4gJiBvcGVyYXRvci09
KCBNX1ZlY3Rvck4gJiwgY29uc3QgTV9WZWN0b3JOICYgKTsKICAgIGZyaWVuZCBNX0ZMT0FUIG9w
ZXJhdG9yKiggY29uc3QgTV9WZWN0b3JOICYsIGNvbnN0IE1fVmVjdG9yTiAmICk7CiAgICBmcmll
bmQgTV9NYXRyaXhNTiBvcGVyYXRvciooIGNvbnN0IE1fTWF0cml4TU4gJiwgY29uc3QgTV9NYXRy
aXhNTiAmICk7CiAgICB9OwoKc3RydWN0IE1fTWF0cml4IHsKICAgIE1fRkxPQVQgICAgIHJvd1s0
XVs0XTsKCiAgICBNX01hdHJpeCgpOwogICAgTV9NYXRyaXgoIE1fRkxPQVQsIE1fRkxPQVQsIE1f
RkxPQVQsIE1fRkxPQVQsCiAgICAgICAgICAgICAgTV9GTE9BVCwgTV9GTE9BVCwgTV9GTE9BVCwg
TV9GTE9BVCwKICAgICAgICAgICAgICBNX0ZMT0FULCBNX0ZMT0FULCBNX0ZMT0FULCBNX0ZMT0FU
LAogICAgICAgICAgICAgIE1fRkxPQVQsIE1fRkxPQVQsIE1fRkxPQVQsIE1fRkxPQVQgKTsKICAg
IE1fTWF0cml4KCBjb25zdCBNX01hdHJpeCAmICk7CgogICAgY29uc3QgTV9WZWN0b3I0ICYgICBv
cGVyYXRvcltdKCBpbnQgKSBjb25zdDsKICAgIE1fVmVjdG9yNCAmICAgICAgICAgb3BlcmF0b3Jb
XSggaW50ICk7CgogICAgIAogICAgTV9NYXRyaXgoIGNvbnN0IE1BVFJJWCApOwogICAgTV9NYXRy
aXgoIGNvbnN0IE1hdHJpeDQgJiApOwoKICAgIG9wZXJhdG9yIE1BVFJJWCAmICgpOwogICAgb3Bl
cmF0b3IgY29uc3QgTWF0cml4NCAmICgpIGNvbnN0OwogICAgb3BlcmF0b3IgTWF0cml4NCAmICgp
OwogICAgfTsKCnN0cnVjdCBNX01hdHJpeDIyIHsKICAgIE1fVmVjdG9yMiAgIHJvd1syXTsKCiAg
ICBNX01hdHJpeDIyKCk7CiAgICBNX01hdHJpeDIyKCBNX0ZMT0FULCBNX0ZMT0FULCBNX0ZMT0FU
LCBNX0ZMT0FUICk7CiAgICBNX01hdHJpeDIyKCBjb25zdCBNX01hdHJpeDIyICYgKTsKCiAgICBj
b25zdCBNX1ZlY3RvcjIgJiAgIG9wZXJhdG9yW10oIGludCApIGNvbnN0OwogICAgTV9WZWN0b3Iy
ICYgICAgICAgICBvcGVyYXRvcltdKCBpbnQgKTsKICAgIH07CgpjbGFzcyBNX01hdHJpeE1OIHsK
ICAgIGludCAgICAgICAgIHN6OwogICAgTV9WZWN0b3JOICAgKmRhdGE7CgpwdWJsaWM6CiAgICBN
X01hdHJpeE1OKCk7CiAgICB+TV9NYXRyaXhNTigpOwogICAgTV9NYXRyaXhNTiggaW50LCBpbnQg
KTsKICAgIE1fTWF0cml4TU4oIGNvbnN0IE1fTWF0cml4TU4gJiApOwoKICAgIE1fTWF0cml4TU4g
JiAgICAgICAgb3BlcmF0b3I9KCBjb25zdCBNX01hdHJpeE1OICYgKTsKICAgIGNvbnN0IE1fVmVj
dG9yTiAmICAgb3BlcmF0b3JbXSggaW50ICkgY29uc3Q7CiAgICBNX1ZlY3Rvck4gJiAgICAgICAg
IG9wZXJhdG9yW10oIGludCApOwogICAgaW50IG0oKSBjb25zdCB7IHJldHVybiBzejsgfQoKICAg
ICAKICAgIE1fTWF0cml4TU4oIGNvbnN0IE1fTWF0cml4ICYgKTsKICAgIE1fTWF0cml4TU4oIGNv
bnN0IE1fTWF0cml4MjIgJiApOwoKICAgIG9wZXJhdG9yIE1fTWF0cml4KCkgY29uc3Q7CiAgICBv
cGVyYXRvciBNX01hdHJpeDIyKCkgY29uc3Q7CgogICAgZnJpZW5kIE1fTWF0cml4TU4gb3BlcmF0
b3IrKCBjb25zdCBNX01hdHJpeE1OICYsIGNvbnN0IE1fTWF0cml4TU4gJiApOwogICAgZnJpZW5k
IE1fTWF0cml4TU4gJiBvcGVyYXRvcis9KCBNX01hdHJpeE1OICYsIGNvbnN0IE1fTWF0cml4TU4g
JiApOwogICAgZnJpZW5kIE1fTWF0cml4TU4gb3BlcmF0b3ItKCBjb25zdCBNX01hdHJpeE1OICYg
KTsKICAgIGZyaWVuZCBNX01hdHJpeE1OIG9wZXJhdG9yLSggY29uc3QgTV9NYXRyaXhNTiAmLCBj
b25zdCBNX01hdHJpeE1OICYgKTsKICAgIGZyaWVuZCBNX01hdHJpeE1OICYgb3BlcmF0b3ItPSgg
TV9NYXRyaXhNTiAmLCBjb25zdCBNX01hdHJpeE1OICYgKTsKICAgIGZyaWVuZCBNX01hdHJpeE1O
IG9wZXJhdG9yKiggY29uc3QgTV9NYXRyaXhNTiAmLCBjb25zdCBNX01hdHJpeE1OICYgKTsKICAg
IH07CgojIDEgIi9zb2Z0d2FyZS90aGFsaWEvaC9zdGRtYXRoLnAiIDEKIAoKCgoKCgoKCgoKCgoK
CgoKCgogCgoKIAoKTV9GTE9BVCBmYWJzICgKICAgICAgICBjb25zdCBNX1ZlY3RvciAmIHYKCSk7
CgpNX1ZlY3RvciAgICAgICAgb3BlcmF0b3IqICgKICAgICAgICBjb25zdCBNX1ZlY3RvciAmIHYs
CiAgICAgICAgTV9GTE9BVCBmCgkpOwoKTV9GTE9BVCBmYWJzICgKICAgICAgICBjb25zdCBNX1Zl
Y3RvcjIgJiB2CgkpOwoKTV9GTE9BVCBmYWJzICgKICAgICAgICBjb25zdCBNX1ZlY3RvcjQgJiB2
CgkpOwoKTV9GTE9BVCBmYWJzICgKICAgICAgICBjb25zdCBNX1ZlY3Rvck4gJiB2CgkpOwoKTV9W
ZWN0b3IyICAgICAgIG9wZXJhdG9yKiAoCiAgICAgICAgY29uc3QgTV9WZWN0b3IyICYgdiwKICAg
ICAgICBNX0ZMT0FUIGYKCSk7CgpNX01hdHJpeCAgICAgICAgb3BlcmF0b3IqICgKICAgICAgICBj
b25zdCBNX01hdHJpeCAmbSwKICAgICAgICBNX0ZMT0FUIGYKCSk7CgpNX1ZlY3RvcjQgICAgICAg
b3BlcmF0b3IqICgKICAgICAgICBjb25zdCBNX1ZlY3RvcjQgJiByLAogICAgICAgIE1fRkxPQVQg
ZgoJKTsKCk1fVmVjdG9yICAgICAgICBvcGVyYXRvciogKAogICAgICAgIE1fRkxPQVQgZiwKICAg
ICAgICBjb25zdCBNX1ZlY3RvciAmIHYKCSk7CgpNX1ZlY3RvcjIgICAgICAgb3BlcmF0b3IqICgK
ICAgICAgICBNX0ZMT0FUIGYsCiAgICAgICAgY29uc3QgTV9WZWN0b3IyICYgdgoJKTsKCk1fTWF0
cml4ICAgICAgICBvcGVyYXRvciogKAogICAgICAgIE1fRkxPQVQgZiwKICAgICAgICBjb25zdCBN
X01hdHJpeCAmIG0KCSk7CgpNX1ZlY3RvcjQgICAgICAgb3BlcmF0b3IqICgKICAgICAgICBNX0ZM
T0FUIGYsCiAgICAgICAgY29uc3QgTV9WZWN0b3I0ICYgcgoJKTsKCk1fVmVjdG9yICYgICAgICBv
cGVyYXRvcio9ICgKICAgICAgICBNX1ZlY3RvciAmIHYsCiAgICAgICAgTV9GTE9BVCBmCgkpOwoK
TV9WZWN0b3IyICYgICAgIG9wZXJhdG9yKj0gKAogICAgICAgIE1fVmVjdG9yMiAmIHYsCiAgICAg
ICAgTV9GTE9BVCBmCgkpOwoKTV9NYXRyaXggJiAgICAgIG9wZXJhdG9yKj0gKCAKICAgICAgICBN
X01hdHJpeCAmIG0sCiAgICAgICAgTV9GTE9BVCBmCgkpOwoKTV9WZWN0b3I0ICYgICAgIG9wZXJh
dG9yKj0gKAogICAgICAgIE1fVmVjdG9yNCAmIHIsCiAgICAgICAgTV9GTE9BVCBmCgkpOwoKTV9W
ZWN0b3IgICAgICAgIG9wZXJhdG9yLyAoCiAgICAgICAgY29uc3QgTV9WZWN0b3IgJiB2LAogICAg
ICAgIGludCBmCgkpOwoKTV9WZWN0b3IgICAgICAgIG9wZXJhdG9yLyAoCiAgICAgICAgY29uc3Qg
TV9WZWN0b3IgJiB2LAogICAgICAgIE1fRkxPQVQgZgoJKTsKCk1fVmVjdG9yMiAgICAgICBvcGVy
YXRvci8gKAogICAgICAgIGNvbnN0IE1fVmVjdG9yMiAmIHYsCiAgICAgICAgTV9GTE9BVCBmCgkp
OwoKTV9NYXRyaXggICAgICAgIG9wZXJhdG9yLyAoCiAgICAgICAgY29uc3QgTV9NYXRyaXggJiBt
LAogICAgICAgIE1fRkxPQVQgZgoJKTsKCk1fVmVjdG9yNCAgICAgICBvcGVyYXRvci8gKAogICAg
ICAgIGNvbnN0IE1fVmVjdG9yNCAmIHIsCiAgICAgICAgTV9GTE9BVCBmCgkpOwoKTV9WZWN0b3Ig
JiAgICAgIG9wZXJhdG9yLz0gKAogICAgICAgIE1fVmVjdG9yICYgdiwKICAgICAgICBNX0ZMT0FU
IGYKCSk7CgpNX1ZlY3RvcjIgJiAgICAgb3BlcmF0b3IvPSAoCiAgICAgICAgTV9WZWN0b3IyICYg
diwKICAgICAgICBNX0ZMT0FUIGYKCSk7CgpNX01hdHJpeCAmICAgICAgb3BlcmF0b3IvPSAoCiAg
ICAgICAgTV9NYXRyaXggJiBtLAogICAgICAgIE1fRkxPQVQgZgoJKTsKCk1fVmVjdG9yNCAmICAg
ICBvcGVyYXRvci89ICgKICAgICAgICBNX1ZlY3RvcjQgJiByLAogICAgICAgIE1fRkxPQVQgZgoJ
KTsKCk1fVmVjdG9yICAgICAgICBvcGVyYXRvciogKAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYg
diwKICAgICAgICBkb3VibGUgZgoJKTsKCk1fTWF0cml4ICAgICAgICBvcGVyYXRvciogKAogICAg
ICAgIGNvbnN0IE1fTWF0cml4ICZtLAogICAgICAgIGRvdWJsZSBmCgkpOwoKTV9WZWN0b3I0ICAg
ICAgIG9wZXJhdG9yKiAoCiAgICAgICAgY29uc3QgTV9WZWN0b3I0ICYgciwKICAgICAgICBkb3Vi
bGUgZgoJKTsKCk1fVmVjdG9yICAgICAgICBvcGVyYXRvciogKAogICAgICAgIGRvdWJsZSBmLAog
ICAgICAgIGNvbnN0IE1fVmVjdG9yICYgdgoJKTsKCk1fTWF0cml4ICAgICAgICBvcGVyYXRvciog
KAogICAgICAgIGRvdWJsZSBmLAogICAgICAgIGNvbnN0IE1fTWF0cml4ICYgbQoJKTsKCk1fVmVj
dG9yNCAgICAgICBvcGVyYXRvciogKAogICAgICAgIGRvdWJsZSBmLAogICAgICAgIGNvbnN0IE1f
VmVjdG9yNCAmIHIKCSk7CgpNX1ZlY3RvciAmICAgICAgb3BlcmF0b3IqPSAoCiAgICAgICAgTV9W
ZWN0b3IgJiB2LAogICAgICAgIGRvdWJsZSBmCgkpOwoKTV9NYXRyaXggJiAgICAgIG9wZXJhdG9y
Kj0gKCAKICAgICAgICBNX01hdHJpeCAmIG0sCiAgICAgICAgZG91YmxlIGYKCSk7CgpNX1ZlY3Rv
cjQgJiAgICAgb3BlcmF0b3IqPSAoCiAgICAgICAgTV9WZWN0b3I0ICYgciwKICAgICAgICBkb3Vi
bGUgZgoJKTsKCk1fVmVjdG9yICAgICAgICBvcGVyYXRvci8gKAogICAgICAgIGNvbnN0IE1fVmVj
dG9yICYgdiwKICAgICAgICBkb3VibGUgZgoJKTsKCk1fTWF0cml4ICAgICAgICBvcGVyYXRvci8g
KAogICAgICAgIGNvbnN0IE1fTWF0cml4ICYgbSwKICAgICAgICBkb3VibGUgZgoJKTsKCk1fVmVj
dG9yNCAgICAgICBvcGVyYXRvci8gKAogICAgICAgIGNvbnN0IE1fVmVjdG9yNCAmIHIsCiAgICAg
ICAgZG91YmxlIGYKCSk7CgpNX1ZlY3RvciAmICAgICAgb3BlcmF0b3IvPSAoCiAgICAgICAgTV9W
ZWN0b3IgJiB2LAogICAgICAgIGRvdWJsZSBmCgkpOwoKTV9NYXRyaXggJiAgICAgIG9wZXJhdG9y
Lz0gKAogICAgICAgIE1fTWF0cml4ICYgbSwKICAgICAgICBkb3VibGUgZgoJKTsKCk1fVmVjdG9y
NCAmICAgICBvcGVyYXRvci89ICgKICAgICAgICBNX1ZlY3RvcjQgJiByLAogICAgICAgIGRvdWJs
ZSBmCgkpOwoKCiAKCk1fVmVjdG9yIE1fQ2xvc2VzdFBvaW50T25MaW5lVG9Qb2ludCAoCiAgICAg
ICAgY29uc3QgTV9WZWN0b3IgJiBsaW5lMCwKICAgICAgICBjb25zdCBNX1ZlY3RvciAmIGxpbmUx
LAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYgcG9pbnQKCSk7CgpNX1ZlY3RvcjIgTV9DbG9zZXN0
UG9pbnRPbkxpbmVUb1BvaW50ICgKICAgICAgICBjb25zdCBNX1ZlY3RvcjIgJiBsaW5lMCwKICAg
ICAgICBjb25zdCBNX1ZlY3RvcjIgJiBsaW5lMSwKICAgICAgICBjb25zdCBNX1ZlY3RvcjIgJiBw
b2ludAoJKTsKCk1fVmVjdG9yIE1fQ3Jvc3NQcm9kdWN0ICgKICAgICAgICBjb25zdCBNX1ZlY3Rv
ciAmIGEsCiAgICAgICAgY29uc3QgTV9WZWN0b3IgJiBiCgkpOwoKTV9WZWN0b3I0IE1fUGxhbmVG
cm9tVGhyZWVQb2ludHMgKAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYgcDAsCiAgICAgICAgY29u
c3QgTV9WZWN0b3IgJiBwMSwKICAgICAgICBjb25zdCBNX1ZlY3RvciAmIHAyCgkpOwoKdm9pZCBN
X1Jlbm9ybWFsaXplVFBvaW50cyAoCiAgICAgICAgTGlzdDxNX1ZlY3RvcjI+ICYgdXZzCgkpOwoK
dm9pZCBNX1Jlbm9ybWFsaXplVFBvaW50cyAoCiAgICAgICAgTV9WZWN0b3IyICAgKnV2cywKICAg
ICAgICBpbnQgICAgICAgICBjb3VudAoJKTsKCnZvaWQgTV9SZW5vcm1hbGl6ZVRQb2ludHMgKAog
ICAgICAgIE1fVmVjdG9yMiAgICYgYSwKICAgICAgICBNX1ZlY3RvcjIgICAmIGIKCSk7CgpNX1Zl
Y3RvciBNX0dldE5vcm1hbCAoCiAgICAgICAgY29uc3QgTGlzdDxNX1ZlY3Rvcj4gJiB2ZXJ0cwoJ
KTsKCk1fVmVjdG9yNCBNX0dldFBsYW5lRXEgKAogICAgICAgIGNvbnN0IExpc3Q8TV9WZWN0b3I+
ICYgdmVydHMKCSk7CgpNX1ZlY3RvciBNX1ZlcnRleEF2ZSAoCiAgICAgICAgY29uc3QgTGlzdDxN
X1ZlY3Rvcj4gJiB2ZXJ0cwoJKTsKCk1fTWF0cml4IE1fVmVjdFJvdGF0ZSAoCiAgICAgICAgY29u
c3QgTV9WZWN0b3IgJiB0YXJnVmVjdCwKICAgICAgICBjb25zdCBNX1ZlY3RvciAmIGN1clZlY3Qs
CiAgICAgICAgTV9GTE9BVCAgICAgICAgICBhbmdsZQoJKTsKCk1fTWF0cml4IE1fVmVjdFJvdGF0
ZSAoCiAgICAgICAgY29uc3QgTV9WZWN0b3IgJiB0YXJnVmVjdCwKICAgICAgICBjb25zdCBNX1Zl
Y3RvciAmIGN1clZlY3QKCSk7CgpNX01hdHJpeCBNX0F4aXNSb3QgKAogICAgICAgIGNvbnN0IE1f
VmVjdG9yICYgYXhpcywKICAgICAgICBNX0ZMT0FUICAgICAgICAgIGRlZ3JlZQoJKTsKCmludCBN
X1BvaW50T25TZWczRCAoCiAgICAgICAgY29uc3QgTV9WZWN0b3IgICYgdmVydDEsCiAgICAgICAg
Y29uc3QgTV9WZWN0b3IgICYgdmVydDIsCiAgICAgICAgY29uc3QgTV9WZWN0b3IgICYgcG9pbnQs
CiAgICAgICAgTV9GTE9BVCAgICAgICAgIHRvbAoJKTsKCmludCBNX1BvaW50T25TZWcyRCAoCiAg
ICAgICAgY29uc3QgTV9WZWN0b3IyICYgdmVydDEsCiAgICAgICAgY29uc3QgTV9WZWN0b3IyICYg
dmVydDIsCiAgICAgICAgY29uc3QgTV9WZWN0b3IyICYgcG9pbnQsCiAgICAgICAgTV9GTE9BVCAg
ICAgICAgIHRvbAoJKTsKCnZvaWQgTV9Sb3RhdGVUb1hZUGxhbmUgKAogICAgICAgIGNvbnN0IE1f
VmVjdG9yICAmIG5vcm0sCiAgICAgICAgTV9GTE9BVCAgICAgICAgICp4Um90LAogICAgICAgIE1f
RkxPQVQgICAgICAgICAqeVJvdAoJKTsKCnZvaWQgTV9Sb3RhdGVUb1lYUGxhbmUgKAogICAgICAg
IGNvbnN0IE1fVmVjdG9yICAmIG5vcm0sCiAgICAgICAgTV9GTE9BVCAgICAgICAgICp4Um90LAog
ICAgICAgIE1fRkxPQVQgICAgICAgICAqeVJvdAoJKTsKCnZvaWQgTV9Sb3RhdGVUb1haUGxhbmUg
KAogICAgICAgIGNvbnN0IE1fVmVjdG9yICAmIG5vcm0sCiAgICAgICAgTV9GTE9BVCAgICAgICAg
ICp4Um90LAogICAgICAgIE1fRkxPQVQgICAgICAgICAqelJvdAoJKTsKCmludCBNX0luc2lkZVBv
bHkyRCAoCiAgICAgICAgY29uc3QgTGlzdDxNX1ZlY3Rvcj4gICAgJiB2ZXJ0cywKICAgICAgICBj
b25zdCBNX1ZlY3RvciAgICAgICAgICAmIGludGVyc2VjdCwKICAgICAgICBpbnQgICAgICAgICAg
ICAgICAgICAgICB3aGljaAoJKTsKCmludCBNX0luc2lkZVBvbHkyRCAoCiAgICAgICAgTGlzdDxN
X1ZlY3RvcjI+IHZlcnRzLAogICAgICAgIGNvbnN0IE1fVmVjdG9yMiAmIGludGVyc2VjdCwKICAg
ICAgICBmbG9hdCAgICAgICAgICAgZXBzCgkpOwoKaW50IE1fSW50ZXJzZWN0TGluZTJkICgKICAg
ICAgICBNX1ZlY3RvcjIgICBhMSwKICAgICAgICBNX1ZlY3RvcjIgICBhMiwKICAgICAgICBNX1Zl
Y3RvcjIgICBiMSwKICAgICAgICBNX1ZlY3RvcjIgICBiMiwKICAgICAgICBNX1ZlY3RvcjIgICAq
YW5zd2VyCgkpOwoKaW50IE1fSW50ZXJzZWN0U2VnMmQgKAogICAgICAgIE1fVmVjdG9yMiAgIGEx
LAogICAgICAgIE1fVmVjdG9yMiAgIGEyLAogICAgICAgIE1fVmVjdG9yMiAgIGIxLAogICAgICAg
IE1fVmVjdG9yMiAgIGIyLAogICAgICAgIE1fVmVjdG9yMiAgICphbnN3ZXIKCSk7CgppbnQgTV9J
bnRlcnNlY3RTZWcyZFBhcmFtICgKICAgICAgICBNX1ZlY3RvcjIgICBhMSwKICAgICAgICBNX1Zl
Y3RvcjIgICBhMiwKICAgICAgICBNX1ZlY3RvcjIgICBiMSwKICAgICAgICBNX1ZlY3RvcjIgICBi
MiwKICAgICAgICBNX1ZlY3RvcjIgICAqYW5zd2VyLAogICAgICAgIGZsb2F0ICAgICAgICpzLAog
ICAgICAgIGZsb2F0ICAgICAgICp0CgkpOwoKaW50IE1fRGVnZW5lcmF0ZVRyaWFuZ2xlICgKICAg
ICAgICBjb25zdCBNX1ZlY3RvciAgJiB2MCwKICAgICAgICBjb25zdCBNX1ZlY3RvciAgJiB2MSwK
ICAgICAgICBjb25zdCBNX1ZlY3RvciAgJiB2MgoJKTsKCkxpc3Q8TV9WZWN0b3I+IE1fSW50ZXJz
ZWN0UG9seXMgKAogICAgICAgIGNvbnN0IExpc3Q8TV9WZWN0b3I+ICAgICYgcDFWZXJ0cywKICAg
ICAgICBjb25zdCBMaXN0PE1fVmVjdG9yPiAgICAmIHAyVmVydHMKCSk7CgpMaXN0PE1fVmVjdG9y
PiBNX0ludGVyc2VjdFBsYW5lcyAoCiAgICAgICAgY29uc3QgTV9WZWN0b3I0ICYgcGxlcTEsCiAg
ICAgICAgY29uc3QgTV9WZWN0b3I0ICYgcGxlcTIKCSk7CgppbnQgTV9DbGlwTGluZVRvUG9seSAo
CiAgICAgICAgTV9WZWN0b3IgICAgICAgICAgICAqIHYwLAogICAgICAgIE1fVmVjdG9yICAgICAg
ICAgICAgKiB2MSwKICAgICAgICBjb25zdCBMaXN0PE1fVmVjdG9yPiAmdmVydHMKCSk7CgppbnQg
TV9DbGlwU2VnVG9Qb2x5ICgKICAgICAgICBNX1ZlY3RvciAgKnYwLAogICAgICAgIE1fVmVjdG9y
ICAqdjEsCiAgICAgICAgY29uc3QgTGlzdDxNX1ZlY3Rvcj4gICZ2ZXJ0cwoJKTsKCnZvaWQgTV9H
ZXRQbGFuZUNvZGUgKAogICAgICAgIGNvbnN0IE1fVmVjdG9yNCAmcGxlcSwKICAgICAgICBpbnQg
ICAgICp1LAogICAgICAgIGludCAgICAgKnYsCiAgICAgICAgaW50ICAgICAqdwoJKTsKCmludCBN
X0ludGVyc2VjdExpbmVTZWcyZCAoCiAgICAgICAgTV9WZWN0b3IyICAgYTEsCiAgICAgICAgTV9W
ZWN0b3IyICAgYjEsCiAgICAgICAgTV9WZWN0b3IyICAgYTIsCiAgICAgICAgTV9WZWN0b3IyICAg
YjIsCiAgICAgICAgTV9WZWN0b3IyICAgKnh5CgkpOwoKdm9pZCBNX01ha2VUaGlyZENvb3JkICgK
ICAgICAgICBMaXN0PE1fVmVjdG9yPiAgJnZlcnRzLAogICAgICAgIGNvbnN0IE1fVmVjdG9yNCAm
cGxlcQoJKTsKCmludCBNX0VsZW1JbnNpZGUyZCAoCiAgICAgICAgY29uc3QgTGlzdDxNX1ZlY3Rv
cj4gICZjb29yZHMsCiAgICAgICAgY29uc3QgTV9WZWN0b3IgICAgICAmdmVydCwKICAgICAgICBj
b25zdCBNX1ZlY3RvcjQgICZwbGFuZQoJKTsKCmludCBNX0ludGVyc2VjdFBsYW5lTGluZSAoCiAg
ICAgICAgY29uc3QgTV9WZWN0b3I0ICAmcGxhbmUsCiAgICAgICAgY29uc3QgTV9WZWN0b3IgICAm
cG50MSwKICAgICAgICBjb25zdCBNX1ZlY3RvciAgICZwbnQyLAogICAgICAgIE1fVmVjdG9yICAq
b3V0CgkpOwoKaW50IE1fSW5zaWRlUG9seTNEICgKICAgICAgICBjb25zdCBMaXN0PE1fVmVjdG9y
PiAgICAmdmVydHMsCiAgICAgICAgY29uc3QgTV9WZWN0b3I0ICAmcGxhbmUsCiAgICAgICAgY29u
c3QgTV9WZWN0b3IgICZpbnRlcnNlY3QgCgkpOwoKTV9NYXRyaXggTV9BcmJSb3QgKAogICAgICAg
IGNvbnN0IE1fVmVjdG9yICAmcDEsCiAgICAgICAgY29uc3QgTV9WZWN0b3IgICZwMiwKICAgICAg
ICBmbG9hdCAgICBkZWdyZWUKCSk7CgoKIAoKdm9pZCBsb2FkbWF0cml4ICggCiAgICAgICAgY29u
c3QgTV9NYXRyaXggJiB0aGVNYXQKCSk7Cgp2b2lkIG11bHRtYXRyaXggKCAKICAgICAgICBjb25z
dCBNX01hdHJpeCAmIHRoZU1hdAoJKTsKCnZvaWQgZ2V0bWF0cml4ICggCiAgICAgICAgTV9NYXRy
aXggJiB0aGVNYXQKCSk7Cgp2b2lkIHYzZiAoCiAgICAgICAgY29uc3QgTV9WZWN0b3IgJiB2ZWMK
CSk7CgoKIAoKTV9WZWN0b3IgICAgICAgIG9wZXJhdG9yLSAoCiAgICAgICAgY29uc3QgTV9WZWN0
b3IgJiB2CgkpOwoKTV9WZWN0b3IyICAgICAgIG9wZXJhdG9yLSAoCiAgICAgICAgY29uc3QgTV9W
ZWN0b3IyICYgdgoJKTsKCk1fVmVjdG9yNCBvcGVyYXRvci0gKAogICAgICAgIGNvbnN0IE1fVmVj
dG9yNCAmIHYKCSk7CgpNX1ZlY3RvciAgICAgICAgb3BlcmF0b3ItICgKICAgICAgICBjb25zdCBN
X1ZlY3RvciAmIHYwLAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYgdjEKCSk7CgpNX1ZlY3RvcjIg
ICAgICAgb3BlcmF0b3ItICgKICAgICAgICBjb25zdCBNX1ZlY3RvcjIgJiB2MCwKICAgICAgICBj
b25zdCBNX1ZlY3RvcjIgJiB2MQoJKTsKCk1fTWF0cml4ICAgICAgICBvcGVyYXRvci0gKAogICAg
ICAgIGNvbnN0IE1fTWF0cml4ICYgbTAsCiAgICAgICAgY29uc3QgTV9NYXRyaXggJiBtMQoJKTsK
Ck1fTWF0cml4IG9wZXJhdG9yIC0gKAogICAgICAgIGNvbnN0IE1fTWF0cml4ICYgbQoJKTsKCk1f
VmVjdG9yNCAgICAgICBvcGVyYXRvci0gKAogICAgICAgIGNvbnN0IE1fVmVjdG9yNCAmIHIwLAog
ICAgICAgIGNvbnN0IE1fVmVjdG9yNCAmIHIxCgkpOwoKTV9WZWN0b3IgJiAgICAgIG9wZXJhdG9y
LT0gKAogICAgICAgIE1fVmVjdG9yICYgdjAsCiAgICAgICAgY29uc3QgTV9WZWN0b3IgJiB2MQoJ
KTsKCk1fVmVjdG9yMiAmICAgICBvcGVyYXRvci09ICgKICAgICAgICBNX1ZlY3RvcjIgJiB2MCwK
ICAgICAgICBjb25zdCBNX1ZlY3RvcjIgJiB2MQoJKTsKCk1fTWF0cml4ICYgICAgICBvcGVyYXRv
ci09ICgKICAgICAgICBNX01hdHJpeCAmIG0wLAogICAgICAgIGNvbnN0IE1fTWF0cml4ICYgbTEK
CSk7CgpNX1ZlY3RvcjQgJiAgICAgb3BlcmF0b3ItPSAoCiAgICAgICAgTV9WZWN0b3I0ICYgcjAs
CiAgICAgICAgY29uc3QgTV9WZWN0b3I0ICYgcjEKCSk7CgpNX1ZlY3Rvck4gb3BlcmF0b3IgLSAo
CiAgICAgICAgY29uc3QgTV9WZWN0b3JOICYgYQoJKTsKCk1fVmVjdG9yTiBvcGVyYXRvciAtICgK
ICAgICAgICBjb25zdCBNX1ZlY3Rvck4gJiBhLAogICAgICAgIGNvbnN0IE1fVmVjdG9yTiAmIGIK
CSk7CgpNX1ZlY3Rvck4gJiBvcGVyYXRvci09ICgKICAgICAgICBNX1ZlY3Rvck4gJiBhbnN3ZXIs
CiAgICAgICAgY29uc3QgTV9WZWN0b3JOICYgYgoJKTsKCk1fTWF0cml4MjIgb3BlcmF0b3IgLSAo
CiAgICAgICAgY29uc3QgTV9NYXRyaXgyMiAmIGEKCSk7CgpNX01hdHJpeDIyIG9wZXJhdG9yIC0g
KAogICAgICAgIGNvbnN0IE1fTWF0cml4MjIgJiBhLAogICAgICAgIGNvbnN0IE1fTWF0cml4MjIg
JiBiCgkpOwoKTV9NYXRyaXgyMiAmIG9wZXJhdG9yIC09ICgKICAgICAgICBNX01hdHJpeDIyICYg
YW5zd2VyLAogICAgICAgIGNvbnN0IE1fTWF0cml4MjIgJiBiCgkpOwoKTV9NYXRyaXhNTiBvcGVy
YXRvciAtICgKICAgICAgICBjb25zdCBNX01hdHJpeE1OICYgYQoJKTsKCk1fTWF0cml4TU4gb3Bl
cmF0b3IgLSAoCiAgICAgICAgY29uc3QgTV9NYXRyaXhNTiAmIGEsCiAgICAgICAgY29uc3QgTV9N
YXRyaXhNTiAmIGIKCSk7CgpNX01hdHJpeE1OICYgb3BlcmF0b3ItPSAoCiAgICAgICAgTV9NYXRy
aXhNTiAmIGFuc3dlciwKICAgICAgICBjb25zdCBNX01hdHJpeE1OICYgYgoJKTsKCgogCgoKIAoK
dm9pZCBnbExvYWRNYXRyaXhmICggCiAgICAgICAgY29uc3QgTV9NYXRyaXggJiB0aGVNYXQKCSk7
Cgp2b2lkIGdsTXVsdE1hdHJpeGYgKCAKICAgICAgICBjb25zdCBNX01hdHJpeCAmIHRoZU1hdAoJ
KTsKCnZvaWQgZ2xWZXJ0ZXgzZnYgKAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYgdmVjCgkpOwoK
CiAKCk1fVmVjdG9yICAgICAgICBvcGVyYXRvcisgKCAgCiAgICAgICAgY29uc3QgTV9WZWN0b3Ig
JiB2MCwKICAgICAgICBjb25zdCBNX1ZlY3RvciAmIHYxIAoJKTsKCk1fVmVjdG9yMiAgICAgICBv
cGVyYXRvcisgKCAgCiAgICAgICAgY29uc3QgTV9WZWN0b3IyICYgdjAsCiAgICAgICAgY29uc3Qg
TV9WZWN0b3IyICYgdjEgCgkpOwoKTV9NYXRyaXggICAgICAgIG9wZXJhdG9yKyAoCiAgICAgICAg
Y29uc3QgTV9NYXRyaXggJiBtMCwKICAgICAgICBjb25zdCBNX01hdHJpeCAmIG0xCgkpOwoKTV9W
ZWN0b3I0ICAgICAgIG9wZXJhdG9yKyAoCiAgICAgICAgY29uc3QgTV9WZWN0b3I0ICYgcjAsCiAg
ICAgICAgY29uc3QgTV9WZWN0b3I0ICYgcjEKCSk7CgpNX1ZlY3RvciAmICAgICAgb3BlcmF0b3Ir
PSAoCiAgICAgICAgTV9WZWN0b3IgJiB2LAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYgdjEKCSk7
CgpNX1ZlY3RvcjIgJiAgICAgb3BlcmF0b3IrPSAoCiAgICAgICAgTV9WZWN0b3IyICYgdiwKICAg
ICAgICBjb25zdCBNX1ZlY3RvcjIgJiB2MQoJKTsKCk1fTWF0cml4ICYgICAgICBvcGVyYXRvcis9
ICgKICAgICAgICBNX01hdHJpeCAmIG0sCiAgICAgICAgY29uc3QgTV9NYXRyaXggJiBtMQoJKTsK
Ck1fVmVjdG9yNCAmICAgICBvcGVyYXRvcis9ICgKICAgICAgICBNX1ZlY3RvcjQgJiByLAogICAg
ICAgIGNvbnN0IE1fVmVjdG9yNCAmIHIxCgkpOwoKTV9WZWN0b3JOIG9wZXJhdG9yICsgKAogICAg
ICAgIGNvbnN0IE1fVmVjdG9yTiAmIGEsCiAgICAgICAgY29uc3QgTV9WZWN0b3JOICYgYgoJKTsK
Ck1fVmVjdG9yTiAmIG9wZXJhdG9yKz0gKAogICAgICAgIE1fVmVjdG9yTiAmIGFuc3dlciwKICAg
ICAgICBjb25zdCBNX1ZlY3Rvck4gJiBiCgkpOwoKTV9NYXRyaXgyMiBvcGVyYXRvciArICgKICAg
ICAgICBjb25zdCBNX01hdHJpeDIyICYgYSwKICAgICAgICBjb25zdCBNX01hdHJpeDIyICYgYgoJ
KTsKCk1fTWF0cml4MjIgJiBvcGVyYXRvciArPSAoCiAgICAgICAgTV9NYXRyaXgyMiAmIGFuc3dl
ciwKICAgICAgICBjb25zdCBNX01hdHJpeDIyICYgYgoJKTsKCk1fTWF0cml4TU4gb3BlcmF0b3Ig
KyAoCiAgICAgICAgY29uc3QgTV9NYXRyaXhNTiAmIGEsCiAgICAgICAgY29uc3QgTV9NYXRyaXhN
TiAmIGIKCSk7CgpNX01hdHJpeE1OICYgb3BlcmF0b3IrPSAoCiAgICAgICAgTV9NYXRyaXhNTiAm
IGFuc3dlciwKICAgICAgICBjb25zdCBNX01hdHJpeE1OICYgYgoJKTsKCgogCgpNX0ZMT0FUICAg
ICAgICAgb3BlcmF0b3IqICgKICAgICAgICBjb25zdCBNX1ZlY3RvciAmIHYwLAogICAgICAgIGNv
bnN0IE1fVmVjdG9yICYgdjEKCSk7CgpNX0ZMT0FUICAgICAgICAgb3BlcmF0b3IqICgKICAgICAg
ICBjb25zdCBNX1ZlY3RvcjQgJiB2MCwKICAgICAgICBjb25zdCBNX1ZlY3RvcjQgJiB2MQoJKTsK
Ck1fRkxPQVQgICAgICAgICBvcGVyYXRvciogKAogICAgICAgIGNvbnN0IE1fVmVjdG9yMiAmIHYw
LAogICAgICAgIGNvbnN0IE1fVmVjdG9yMiAmIHYxCgkpOwoKTV9GTE9BVCBvcGVyYXRvciogKAog
ICAgICAgIGNvbnN0IE1fVmVjdG9yTiAmIGEsCiAgICAgICAgY29uc3QgTV9WZWN0b3JOICYgYgoJ
KTsKCk1fVmVjdG9yICAgICAgICBvcGVyYXRvciogKAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYg
diwKICAgICAgICBjb25zdCBNX01hdHJpeCAmIG0KCSk7CgpNX1ZlY3RvciAgICAgICAgb3BlcmF0
b3IqICgKICAgICAgICBjb25zdCBNX01hdHJpeCAmIG0sCiAgICAgICAgY29uc3QgTV9WZWN0b3Ig
JiB2CgkpOwoKTV9NYXRyaXggICAgICAgIG9wZXJhdG9yKiAoCiAgICAgICAgY29uc3QgTV9NYXRy
aXggJiBtMCwKICAgICAgICBjb25zdCBNX01hdHJpeCAmIG0xCgkpOwoKTV9WZWN0b3I0ICAgICAg
IG9wZXJhdG9yKiAoCiAgICAgICAgY29uc3QgTV9WZWN0b3I0ICYgciwKICAgICAgICBjb25zdCBN
X01hdHJpeCAmIG0KCSk7CgpNX1ZlY3RvciAmICAgICAgb3BlcmF0b3IqPSAoCiAgICAgICAgTV9W
ZWN0b3IgJiB2LAogICAgICAgIGNvbnN0IE1fTWF0cml4ICYgbSAKCSk7CgpNX01hdHJpeCAmICAg
ICAgb3BlcmF0b3IqPSAoCiAgICAgICAgTV9NYXRyaXggJiBtLAogICAgICAgIGNvbnN0IE1fTWF0
cml4ICYgbTEKCSk7CgpNX01hdHJpeDIyICYgICAgICAgIG9wZXJhdG9yKj0gKAogICAgICAgIE1f
TWF0cml4MjIgJiBtLAogICAgICAgIGNvbnN0IE1fTWF0cml4MjIgJiBtMQoJKTsKCk1fTWF0cml4
TU4gJiAgICAgICAgb3BlcmF0b3IqPSAoCiAgICAgICAgTV9NYXRyaXhNTiAmIG0sCiAgICAgICAg
Y29uc3QgTV9NYXRyaXhNTiAmIG0xCgkpOwoKTV9WZWN0b3I0ICYgICAgIG9wZXJhdG9yKj0gKAog
ICAgICAgIE1fVmVjdG9yNCAmIHIsCiAgICAgICAgY29uc3QgTV9NYXRyaXggJiBtCgkpOwoKTV9N
YXRyaXgyMiAgICAgIG9wZXJhdG9yKiAoCiAgICAgICAgY29uc3QgTV9NYXRyaXgyMiAmIG0wLAog
ICAgICAgIGNvbnN0IE1fTWF0cml4MjIgJiBtMQoJKTsKCk1fTWF0cml4TU4gb3BlcmF0b3IqICgK
ICAgICAgICBjb25zdCBNX01hdHJpeE1OICYgYSwKICAgICAgICBjb25zdCBNX01hdHJpeE1OICYg
YgoJKTsKCgogCgpNX01hdHJpeCBNX1RyYW5zcG9zZSAoCiAgICAgICAgY29uc3QgTV9NYXRyaXgg
JiBvcmdNYXQKCSk7CgpNX01hdHJpeCBNX0ludmVyc2UgKAogICAgICAgIGNvbnN0IE1fTWF0cml4
ICYgb3JnTWF0CgkpOwoKTV9WZWN0b3JOIE1fR2F1c3NFbGltICgKICAgIGNvbnN0IE1fTWF0cml4
TU4gJmluX21hdCwKICAgIGNvbnN0IE1fVmVjdG9yTiAmaW5feQoJKTsKCk1fTWF0cml4IE1fUm90
YXRlWCAoCiAgICAgICAgTV9GTE9BVCBkZWcKCSk7CgpNX01hdHJpeCBNX1JvdGF0ZVkgKAogICAg
ICAgIE1fRkxPQVQgZGVnCgkpOwoKTV9NYXRyaXggTV9Sb3RhdGVaICgKICAgICAgICBNX0ZMT0FU
IGRlZwoJKTsKCk1fTWF0cml4IE1fUm90YXRlICgKICAgICAgICBNX0ZMT0FUIHhyb3QsCiAgICAg
ICAgTV9GTE9BVCB5cm90LAogICAgICAgIE1fRkxPQVQgenJvdAoJKTsKCk1fTWF0cml4IE1fUm90
YXRlICgKICAgICAgICBNX0ZMT0FUICogcm90cwoJKTsKCk1fTWF0cml4IE1fUm90YXRlICgKICAg
ICAgICBjb25zdCBNX1ZlY3RvciAmIHJvdHMKCSk7CgpNX01hdHJpeCBNX1RyYW5zbGF0ZSAoCiAg
ICAgICAgTV9GTE9BVCB4LAogICAgICAgIE1fRkxPQVQgeSwKICAgICAgICBNX0ZMT0FUIHoKCSk7
CgpNX01hdHJpeCBNX1RyYW5zbGF0ZSAoCiAgICAgICAgTV9GTE9BVCAqIHRyYW5zCgkpOwoKTV9N
YXRyaXggTV9UcmFuc2xhdGUgKAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYgdHJhbnMKCSk7CgpN
X01hdHJpeCBNX1NjYWxlICgKICAgICAgICBNX0ZMT0FUIHgsCiAgICAgICAgTV9GTE9BVCB5LAog
ICAgICAgIE1fRkxPQVQgegoJKTsKCk1fTWF0cml4IE1fU2NhbGUgKAogICAgICAgIE1fRkxPQVQg
KnNjYWxlCgkpOwoKTV9NYXRyaXggTV9TY2FsZSAoCiAgICAgICAgY29uc3QgTV9WZWN0b3IgJiBz
Y2FsZQoJKTsKCk1fTWF0cml4IE1fU2NhbGVBbGwgKAogICAgICAgIE1fRkxPQVQgdmFsdWUKCSk7
CgpNX01hdHJpeCBNX1NoZWFyWFkgKAogICAgICAgIE1fRkxPQVQgeHkKCSk7CgpNX01hdHJpeCBN
X1NoZWFyWFogKAogICAgICAgIE1fRkxPQVQgeHoKCSk7CgpNX01hdHJpeCBNX1NoZWFyWVogKAog
ICAgICAgIE1fRkxPQVQgeXoKCSk7CgpNX01hdHJpeCBNX1NoZWFyICgKICAgICAgICBNX0ZMT0FU
IHh5LAogICAgICAgIE1fRkxPQVQgeHosCiAgICAgICAgTV9GTE9BVCB5egoJKTsKCk1fTWF0cml4
IE1fU2hlYXIgKAogICAgICAgIE1fRkxPQVQgKiBzaGVhcgoJKTsKCk1fTWF0cml4IE1fU2hlYXIg
KAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYgc2hlYXIKCSk7CgpNX01hdHJpeCBNX01ha2VYZm9y
bSAoCiAgICAgICAgaW50ICAgICAqIGdpbWJhbCwKICAgICAgICBNX0ZMT0FUIHR4LAogICAgICAg
IE1fRkxPQVQgdHksCiAgICAgICAgTV9GTE9BVCB0eiwKICAgICAgICBNX0ZMT0FUIHJ4LAogICAg
ICAgIE1fRkxPQVQgcnksCiAgICAgICAgTV9GTE9BVCByeiwKICAgICAgICBNX0ZMT0FUIHN4LAog
ICAgICAgIE1fRkxPQVQgc3ksCiAgICAgICAgTV9GTE9BVCBzegoJKTsKCk1fTWF0cml4IE1fTWFr
ZVhmb3JtICgKICAgICAgICBpbnQgICAgICogZ2ltYmFsLAogICAgICAgIE1fRkxPQVQgKiB0LAog
ICAgICAgIE1fRkxPQVQgKiByLAogICAgICAgIE1fRkxPQVQgKiBzCgkpOwoKTV9NYXRyaXggTV9N
YWtlWGZvcm0gKAogICAgICAgIGludCAgICAgKiBnaW1iYWwsCiAgICAgICAgY29uc3QgTV9WZWN0
b3IgJiB0LAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYgciwKICAgICAgICBjb25zdCBNX1ZlY3Rv
ciAmIHMKCSk7Cgp2b2lkIE1fTm9ybWFsaXplICgKICAgICAgICBNX1ZlY3RvciAmICB2ZWMKCSk7
CgpNX01hdHJpeCBNX0NvbXBvc2UgKAogICAgICAgIE1fRkxPQVQgc2NhbGVYLAogICAgICAgIE1f
RkxPQVQgc2NhbGVZLAogICAgICAgIE1fRkxPQVQgc2NhbGVaLAogICAgICAgIE1fRkxPQVQgc2hl
YXJYWSwKICAgICAgICBNX0ZMT0FUIHNoZWFyWFosCiAgICAgICAgTV9GTE9BVCBzaGVhcllaLAog
ICAgICAgIE1fRkxPQVQgcm90c1gsCiAgICAgICAgTV9GTE9BVCByb3RzWSwKICAgICAgICBNX0ZM
T0FUIHJvdHNaLAogICAgICAgIE1fRkxPQVQgdHJhbnNYLAogICAgICAgIE1fRkxPQVQgdHJhbnNZ
LAogICAgICAgIE1fRkxPQVQgdHJhbnNaCgkpOwoKTV9NYXRyaXggTV9Db21wb3NlICgKICAgICAg
ICBNX0ZMT0FUICogc2NhbGUsCiAgICAgICAgTV9GTE9BVCAqIHNoZWFyLAogICAgICAgIE1fRkxP
QVQgKiByb3RzLAogICAgICAgIE1fRkxPQVQgKiB0cmFucwoJKTsKCk1fTWF0cml4IE1fQ29tcG9z
ZSAoCiAgICAgICAgY29uc3QgTV9WZWN0b3IgJiBzY2FsZSwKICAgICAgICBjb25zdCBNX1ZlY3Rv
ciAmIHNoZWFyLAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYgcm90cywKICAgICAgICBjb25zdCBN
X1ZlY3RvciAmIHRyYW5zCgkpOwoKTV9NYXRyaXggTV9Db21wb3NlICgKICAgICAgICBNX0ZMT0FU
IHNjYWxlWCwKICAgICAgICBNX0ZMT0FUIHNjYWxlWSwKICAgICAgICBNX0ZMT0FUIHNjYWxlWiwK
ICAgICAgICBNX0ZMT0FUIHJvdHNYLAogICAgICAgIE1fRkxPQVQgcm90c1ksCiAgICAgICAgTV9G
TE9BVCByb3RzWiwKICAgICAgICBNX0ZMT0FUIHRyYW5zWCwKICAgICAgICBNX0ZMT0FUIHRyYW5z
WSwKICAgICAgICBNX0ZMT0FUIHRyYW5zWgoJKTsKCk1fTWF0cml4IE1fQ29tcG9zZSAoCiAgICAg
ICAgTV9GTE9BVCAqIHNjYWxlLAogICAgICAgIE1fRkxPQVQgKiByb3RzLAogICAgICAgIE1fRkxP
QVQgKiB0cmFucwoJKTsKCk1fTWF0cml4IE1fQ29tcG9zZSAoCiAgICAgICAgY29uc3QgTV9WZWN0
b3IgJiBzY2FsZSwKICAgICAgICBjb25zdCBNX1ZlY3RvciAmIHJvdHMsCiAgICAgICAgY29uc3Qg
TV9WZWN0b3IgJiB0cmFucwoJKTsKCk1fTWF0cml4IE1fQ29tcG9zZSAoCiAgICAgICAgaW50ICAg
ICAqIG9yZGVyLAogICAgICAgIE1fRkxPQVQgc2NhbGVYLAogICAgICAgIE1fRkxPQVQgc2NhbGVZ
LAogICAgICAgIE1fRkxPQVQgc2NhbGVaLAogICAgICAgIE1fRkxPQVQgcm90c1gsCiAgICAgICAg
TV9GTE9BVCByb3RzWSwKICAgICAgICBNX0ZMT0FUIHJvdHNaLAogICAgICAgIE1fRkxPQVQgdHJh
bnNYLAogICAgICAgIE1fRkxPQVQgdHJhbnNZLAogICAgICAgIE1fRkxPQVQgdHJhbnNaCgkpOwoK
TV9NYXRyaXggTV9Db21wb3NlICgKICAgICAgICBpbnQgICAgICogb3JkZXIsCiAgICAgICAgTV9G
TE9BVCAqIHNjYWxlLAogICAgICAgIE1fRkxPQVQgKiByb3RzLAogICAgICAgIE1fRkxPQVQgKiB0
cmFucwoJKTsKCk1fTWF0cml4IE1fQ29tcG9zZSAoCiAgICAgICAgaW50ICAgICAqIG9yZGVyLAog
ICAgICAgIGNvbnN0IE1fVmVjdG9yICYgc2NhbGUsCiAgICAgICAgY29uc3QgTV9WZWN0b3IgJiBy
b3RzLAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYgdHJhbnMKCSk7CgppbnQgTV9EZWNvbXBvc2Ug
KAogICAgICAgIGNvbnN0IE1fTWF0cml4ICYgbWF0LAogICAgICAgIE1fRkxPQVQgKiBzY2FsZSwK
ICAgICAgICBNX0ZMT0FUICogc2hlYXIsCiAgICAgICAgTV9GTE9BVCAqIHJvdHMsCiAgICAgICAg
TV9GTE9BVCAqIHRyYW5zLAogICAgICAgIE1fRkxPQVQgKiBwZXJzcAoJKTsKCmludCBNX0RlY29t
cG9zZSAoCiAgICAgICAgY29uc3QgTV9NYXRyaXggJiBtYXQsCiAgICAgICAgTV9WZWN0b3IgICYg
c2NhbGUsCiAgICAgICAgTV9WZWN0b3IgICYgc2hlYXIsCiAgICAgICAgTV9WZWN0b3IgICYgcm90
cywKICAgICAgICBNX1ZlY3RvciAgJiB0cmFucywKICAgICAgICBNX1ZlY3RvcjQgJiBwZXJzcAoJ
KTsKCmludCBNX0RlY29tcG9zZSAoCiAgICAgICAgY29uc3QgTV9NYXRyaXggJiBtYXQsCiAgICAg
ICAgaW50ICAgICAqIG9yZGVyLAogICAgICAgIE1fRkxPQVQgKiBzY2FsZSwKICAgICAgICBNX0ZM
T0FUICogcm90cywKICAgICAgICBNX0ZMT0FUICogdHJhbnMsCiAgICAgICAgTV9GTE9BVCAqIHBl
cnNwCgkpOwoKaW50IE1fRGVjb21wb3NlICgKICAgICAgICBjb25zdCBNX01hdHJpeCAmIG1hdCwK
ICAgICAgICBpbnQgICAgICogb3JkZXIsCiAgICAgICAgTV9WZWN0b3IgICYgc2NhbGUsCiAgICAg
ICAgTV9WZWN0b3IgICYgcm90cywKICAgICAgICBNX1ZlY3RvciAgJiB0cmFucywKICAgICAgICBN
X1ZlY3RvcjQgJiBwZXJzcAoJKTsKCmludCBNX0RlY29tcG9zZU1hdCAoCiAgICAgICAgY29uc3Qg
TV9NYXRyaXggJiBtYXQsCiAgICAgICAgTV9GTE9BVCAqIHRyYW5zLAogICAgICAgIE1fRkxPQVQg
KiByb3RzLAogICAgICAgIE1fRkxPQVQgKiBzaGVhciwKICAgICAgICBNX0ZMT0FUICogc2NhbGUs
CiAgICAgICAgTV9GTE9BVCAqIHBlcnNwCgkpOwoKTV9GTE9BVCBNX0RldDR4NCAoCiAgICAgICAg
Y29uc3QgTV9NYXRyaXggJiBtCgkpOwoKTV9NYXRyaXggTV9NYWtlTG9jYWwgKAogICAgICAgIGNv
bnN0IE1fVmVjdG9yICYgY2VudGVyLAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYgYXhpcwoJKTsK
Ck1fVmVjdG9yIE1fRmluZEdpbWJhbFJvdHMgKAogICAgICAgIGNvbnN0IE1fTWF0cml4ICYgbSwK
ICAgICAgICBpbnQgKmdpbWJhbAoJKTsKCnZvaWQgTV9GaW5kR2ltYmFsUm90cyAoCiAgICAgICAg
Y29uc3QgTV9NYXRyaXggJiBtLAogICAgICAgIE1fRkxPQVQgKnJvdHMsCiAgICAgICAgaW50ICpn
aW1iYWwKCSk7CgpNX01hdHJpeCBNX09ydGhvbm9ybWFsaXplICgKICAgIGNvbnN0IE1fTWF0cml4
ICZtCgkpOwoKCgoKCiMgMjUxICIvc29mdHdhcmUvdGhhbGlhL2gvc3RkbWF0aC5oIiAyCgoKZXh0
ZXJuIGNvbnN0IE1fVmVjdG9yIE1fT3JpZ2luOwpleHRlcm4gY29uc3QgTV9NYXRyaXggTV9JZGVu
dGl0eTsKCgojIDY0ICJoL05SSFlfU3RkLmgiIDIKCgogCgp0eXBlZGVmIGludCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBPTElTSDsKdHlwZWRlZiBzaG9ydCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBaT09MRUFOOwoKIAp0eXBlZGVmIHN0cnVjdCBscmJ0IHsKICAgIGZs
b2F0ICAgIGxlZnQ7CiAgICBmbG9hdCAgICByaWdodDsKICAgIGZsb2F0ICAgIGJvdHRvbTsKICAg
IGZsb2F0ICAgIHRvcDsKfSBMUkJUOwoKdHlwZWRlZiBzdHJ1Y3QgcmdiIHsKICAgIGZsb2F0ICAg
IHI7ICAgICAgICAgICAKICAgIGZsb2F0ICAgIGc7ICAgICAgICAgICAKICAgIGZsb2F0ICAgIGI7
ICAgICAgICAgICAKfSBOUkhZX1JHQjsKCnR5cGVkZWYgc3RydWN0IHJnYmkgewogICAgZmxvYXQg
ICAgcjsgICAgICAgICAgIAogICAgZmxvYXQgICAgZzsgICAgICAgICAgIAogICAgZmxvYXQgICAg
YjsgICAgICAgICAgIAogICAgZmxvYXQgICAgaTsgICAgICAgICAgIAp9IE5SSFlfUkdCSTsKCnR5
cGVkZWYgc3RydWN0IHJnYmlvIHsKICAgIGZsb2F0ICAgIHI7ICAgICAgICAgICAKICAgIGZsb2F0
ICAgIGc7ICAgICAgICAgICAKICAgIGZsb2F0ICAgIGI7ICAgICAgICAgICAKICAgIGZsb2F0ICAg
IGk7ICAgICAgICAgICAKICAgIGZsb2F0ICAgIG87ICAgICAgICAgICAKfSBOUkhZX1JHQklPOwoK
IAoKCiAKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIExpc3Q7CnRlbXBsYXRlIDxjbGFzcyBU
PiBjbGFzcyBQbHVnaW5FbnRyeTsKdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFBsdWdpblRhYmxl
Owp0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgTlJIWV9hbHBoYWxpc3Q7CnRlbXBsYXRlIDxjbGFz
cyBUPiBjbGFzcyBOUkhZX2J1bmNoOwp0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgTlJIWV9jdXJy
ZW50Owp0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgTlJIWV9maW5kOwp0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gY2xhc3MgTlJIWV9tYXRjaDsKCiAKCiMgNDcgImgvbnJoeXByaXZhdGUuaCIgMgoKIyAxICJo
L25yaHlwcml2YXRlLnAiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgpGcmFuZ2VDYWNoZUxvcmQg
Kk5SSFlfZ2V0RnJhbmdlQ2FjaGVMb3JkICgpOwoKRnJhbmdlQ2FjaGVMb3JkICpOUkhZX2dldElt
YWdlQ2FjaGVMb3JkICgpOwoKCiAKCnZvaWQgTlJIWV9hZGRUb1RoaW5nQWxwaGEgKAogICAgTlJI
WV9jbGFzc1RoaW5nICp0eXBlUHRyLAogICAgaW50IHR5cGUKCSk7Cgp2b2lkIE5SSFlfYWRkVG9B
cHBhcml0aW9uQWxwaGEgKAogICAgTlJIWV9jbGFzc1RoaW5nICp0eXBlUHRyLAogICAgaW50IHR5
cGUKCSk7Cgp2b2lkIE5SSFlfYWRkVG9PYmplY3RBbHBoYSAoCiAgICBOUkhZX2NsYXNzVGhpbmcg
KnR5cGVQdHIsCiAgICBpbnQgdHlwZQoJKTsKCnZvaWQgTlJIWV9yZW1vdmVGcm9tVGhpbmdBbHBo
YSAoCiAgICBOUkhZX2NsYXNzVGhpbmcgKnR5cGVQdHIKCSk7Cgp2b2lkIE5SSFlfcmVtb3ZlRnJv
bUFwcGFyaXRpb25BbHBoYSAoCiAgICBOUkhZX2NsYXNzVGhpbmcgKnR5cGVQdHIKCSk7Cgp2b2lk
IE5SSFlfcmVtb3ZlRnJvbU9iamVjdEFscGhhICgKICAgIE5SSFlfY2xhc3NUaGluZyAqdHlwZVB0
cgoJKTsKCgogCgp2b2lkICBOUkhZX2J1bmNoRnVuY0luaXRDaGFuQnVmZmVyICgKICAgIHZvaWQg
CgkpOwoKTlJIWV9jbGFzc0NoYW5uZWwgKipOUkhZX2J1bmNoRnVuY0dldENoYW5CdWZmZXIgKAog
ICAgdm9pZCAKCSk7CgpJTlQgTlJIWV9idW5jaEZ1bmNHZXRTaXplQ2hhbkJ1ZmZlciAoCiAgICB2
b2lkIAoJKTsKCnZvaWQgIE5SSFlfYnVuY2hGdW5jUmVzaXplQ2hhbkJ1ZmZlciAoCiAgICBJTlQg
bmV3U2l6ZQoJKTsKCnZvaWQgIE5SSFlfY2xlYW51cEJ1bmNoU3R1ZmYgKAogICAgdm9pZCAKCSk7
CgoKIAoKCgoKCgoKCiAKCgogCgoKIAoKCgoKCgogCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCgoKCgpaT09MRUFOIE5SSFlfZ2V0RG9WYWx1ZUNoYW5naW5nVGVzdCAoCiAg
ICB2b2lkIAoJKTsKClpPT0xFQU4gTlJIWV9zZXREb1ZhbHVlQ2hhbmdpbmdUZXN0ICgKICAgIFpP
T0xFQU4gbmV3U3RhdHVzCgkpOwoKCiAKCmNoYXIgKk5SSFlfdG9VVUUgKCAKICAgICAgICBjaGFy
ICpvUHRyLCAKICAgICAgICB2b2lkICpwdHIsIAogICAgICAgIGludCBwaGFzZSAKCSk7CgoKIAoK
CgoKCgogCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKIAoKCiAKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKCgoKIAoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIAoKTlJIWV9jbGFzc0NoYW5uZWwgKiBOUkhZ
X2dldElrQ2hhbm5lbCAoCiAgICBOUkhZX2NsYXNzVGhpbmcgKiB0aGluZwoJKTsKCgoKCgoKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKIAoKCgoK
CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCgoKCgogCgoKCgoKCiAKCgogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCgoKCiAKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKIAoKCiAKCgogCgoK
IAoKCiAKCgogCgoKIAoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA3ODAgImgvbnJoeXByaXZh
dGUucCIKCgoKCgoKCiAKClpPT0xFQU4gTlJIWV9yZXNvbHZlQ2xvbmVMaW5rYWdlcyAoCiAgICBO
UkhZX2J1bmNoIDxOUkhZX2NsYXNzVGhpbmc+ICAgICpidW5jaF9vcmlnaW5hbFRoaW5nUHRycywK
ICAgIE5SSFlfYnVuY2ggPE5SSFlfY2xhc3NUaGluZz4gICAgKmJ1bmNoX2Nsb25lZFRoaW5nUHRy
cwoJKTsKCgoKCgoKIAoKSU5UIE5SSFlfY0NvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIK
CSk7CgpJTlQgTlJIWV9jQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAog
ICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCgoKCgogCgpJTlQgTlJIWV9jaGFubmVs
Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX2NoYW5uZWxDb21t
YW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFS
ICo+IGxpbmUKCSk7CgoKIAoKSU5UIE5SSFlfY2FsY0NvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAg
Km9wZXIKCSk7CgpJTlQgTlJIWV9jYWxjQ29tbWFuZCAoCiAgICAgICAgTGlzdDxIVV9FeHByZXNz
aW9uPiBleHBycwoJKTsKCgoKCgoKCgoKCgoKCgoKCgoKIAoKSU5UIE5SSFlfY2FtZXJhQ29tbWFu
ZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX2NhbWVyYUNvbW1hbmQgKAog
ICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGlu
ZQoJKTsKCgoKCgoKCgoKCgoKCgoKCiAKCmludCBOUkhZX2NjdXJ2ZUNvbW1hbmQgKAoJCSAgICAg
ICBjb25zdCBjaGFyKiBvcGVyCgkpOwoKaW50IE5SSFlfY2N1cnZlQ29tbWFuZCAoCgkJICAgICAg
IGNvbnN0IGNoYXIqIG9wZXIsCgkJICAgICAgIExpc3Q8IGNvbnN0IGNoYXIqID4gbGluZQoJKTsK
CgogCgpJTlQgTlJIWV9jbG9uZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJ
TlQgTlJIWV9jbG9uZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAg
IExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgoKCgoKCgogCgpJTlQgTlJIWV9jb2xsaXNp
b25Db21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfY29sbGlzaW9u
Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3Qg
Q0hBUiAqPiBsaW5lCgkpOwoKCgoKCgoKCgoKIAoKSU5UIE5SSFlfY29sbGlzaW9uQ2hhbkNvbW1h
bmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV9jb2xsaXNpb25DaGFuQ29t
bWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3QgQ0hB
UiAqPiBsaW5lCgkpOwoKCiAKCklOVCBOUkhZX2NvcHlDb21tYW5kICgKICAgIGNvbnN0IENIQVIg
ICpvcGVyCgkpOwoKSU5UIE5SSFlfY29weUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAg
ICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgogCgpJTlQgTlJIWV9j
cmVhdGVDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfY3JlYXRl
Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3Qg
Q0hBUiAqPiBsaW5lCgkpOwoKCgojIDk3NSAiaC9ucmh5cHJpdmF0ZS5wIgoKCgoKCgoKIAoKCgoK
CklOVCBOUkhZX2RlYnVnQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBO
UkhZX2RlYnVnQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlz
dCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKdm9pZCBOUkhZX3NldERlYnVnQ2FjaGVTdGF0ZSAo
CiAgICBCT09MRUFOIHN0YXRlCgkpOwoKQk9PTEVBTiBOUkhZX2dldERlYnVnQ2FjaGVTdGF0ZSAo
CiAgICB2b2lkCgkpOwoKdm9pZCBOUkhZX3NldERlYnVnTm9ybWFsaXplU3RhdGUgKAogICAgQk9P
TEVBTiBzdGF0ZQoJKTsKCkJPT0xFQU4gTlJIWV9nZXREZWJ1Z05vcm1hbGl6ZVN0YXRlICgKICAg
IHZvaWQKCSk7CgoKIAoKSU5UIE5SSFlfZGVwZW5kQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAq
b3BlcgoJKTsKCklOVCBOUkhZX2RlcGVuZENvbW1hbmQgKAogICAgICAgIExpc3Q8SFVfRXhwcmVz
c2lvbj4gZXhwcnMKCSk7CgoKIAoKSU5UIE5SSFlfZGVmaW5lQnV0dG9uQ29tbWFuZCAoCiAgICBj
b25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX2RlZmluZUJ1dHRvbkNvbW1hbmQgKAogICAg
Y29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJ
KTsKCgogCgpJTlQgTlJIWV9kZWxldGVDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkp
OwoKSU5UIE5SSFlfZGVsZXRlQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVy
LAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCiAKCklOVCBOUkhZX2R1bXBvYmpD
b21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfZHVtcG9iakNvbW1h
bmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIg
Kj4gbGluZQoJKTsKCgoKCgoKIAoKSU5UIE5SSFlfZHVtcHN0cmVhbUNvbW1hbmQgKAogICAgY29u
c3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV9kdW1wc3RyZWFtQ29tbWFuZCAoCiAgICBjb25z
dCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoK
CgoKCgogCgpJTlQgTlJIWV9keW5hbWljc0NvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIK
CSk7CgpJTlQgTlJIWV9keW5hbWljc0NvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAq
b3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgogCgpJTlQgTlJIWV9keW5D
aGFuQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX2R5bkNoYW5D
b21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBD
SEFSICo+IGxpbmUKCSk7CgoKCgoKCiAKCklOVCBOUkhZX2VDb21tYW5kICgKICAgIGNvbnN0IENI
QVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAg
ICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgoKCgoKCgoKCgoKCgoK
CgoKIAoKSU5UIE5SSFlfZWFzZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJ
TlQgTlJIWV9lYXNlQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAg
TGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCiAKCklOVCBOUkhZX2ZvcmNlQ2hhbkNvbW1h
bmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV9mb3JjZUNoYW5Db21tYW5k
ICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+
IGxpbmUKCSk7CgoKIAoKSU5UIE5SSFlfZm9yY2VDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpv
cGVyCgkpOwoKSU5UIE5SSFlfZm9yY2VDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAg
Km9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKCgoKCiAKCmludCBOUkhZ
X2Z1ckNvbW1hbmQgKAogICAgY29uc3QgY2hhciAqb3BlcgoJKTsKCmludCBOUkhZX2Z1ckNvbW1h
bmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIg
Kj4gbGluZQoJKTsKCgogCgppbnQgTlJIWV9tdXNjbGVDb21tYW5kICgKICAgIGNvbnN0IGNoYXIg
Km9wZXIKCSk7CgppbnQgTlJIWV9tdXNjbGVDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAg
ICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKIAoKSU5UIE5SSFlf
ZnJhbWVDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfZnJhbWVD
b21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBD
SEFSICo+IGxpbmUKCSk7CgoKCgoKCiAKCklOVCBOUkhZX2dlbmVyYXRvckNvbW1hbmQgKAogICAg
Y29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV9nZW5lcmF0b3JDb21tYW5kICgKICAgIGNv
bnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7
CgoKCgoKCiAKClR3aW5lIGZUb1R3aW5lICggCiAgICAgICAgZmxvYXQgICAgICAgdmFsCgkpOwoK
SU5UIE5SSFlfZ2VvbVRvSGllckNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJ
TlQgTlJIWV9nZW9tVG9IaWVyQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVy
LAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCgoKCgogCgpJTlQgTlJIWV9nZW5l
cmF0b3JDaGFuQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX2dl
bmVyYXRvckNoYW5Db21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBM
aXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKIAoKSU5UIE5SSFlfZ2hvc3RDb21tYW5kICgK
ICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfZ2hvc3RDb21tYW5kICgKICAgIGNv
bnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7
CgoKIAoKSU5UIE5SSFlfZ2x1ZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7Cgpp
bnQgTlJIWV9nbHVlQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAg
TGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCiAKCklOVCBOUkhZX2hlbHBDb21tYW5kICgK
ICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfaGVscENvbW1hbmQgKAogICAgY29u
c3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsK
CgogCgoKCgoKSU5UIE5SSFlfaG9tZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7
CgpJTlQgTlJIWV9ob21lQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAog
ICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCklO
VCBOUkhZX2luY2x1ZGVDb21tYW5kICgKICAgICAgICBjb25zdCBjaGFyICpvcGVyCgkpOwoKSU5U
IE5SSFlfaW5jbHVkZUNvbW1hbmQgKAogICAgICAgIGNvbnN0IGNoYXIgKm9wZXIsCiAgICAgICAg
TGlzdCA8Y29uc3QgY2hhciAqPiBsaW5lCgkpOwoKCiAKCgoKCgpJTlQgTlJIWV9pbmZvQ29tbWFu
ZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX2luZm9Db21tYW5kICgKICAg
IGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUK
CSk7CgoKCgoKCiAKCklOVCBOUkhZX2luaXRDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVy
CgkpOwoKSU5UIE5SSFlfaW5pdENvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3Bl
ciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgogCgpJTlQgTlJIWV9pa0NvbW1h
bmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV9pa0NvbW1hbmQgKAogICAg
Y29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJ
KTsKCgoKCgoKCgogCgpJTlQgTlJIWV9pbmt5Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3Bl
cgoJKTsKCklOVCBOUkhZX2lua3lDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9w
ZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKCgoKCiAKCklOVCBOUkhZX3Nj
YWZmb2xkQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX3NjYWZm
b2xkQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29u
c3QgQ0hBUiAqPiBsaW5lCgkpOwoKCgoKCgogCgpJTlQgTlJIWV9zY2FmZm9sZGNoYW5Db21tYW5k
ICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKaW50IE5SSFlfc2NhZmZvbGRjaGFuQ29tbWFu
ZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3QgQ0hBUiAq
PiBsaW5lCgkpOwoKCiAKCklOVCBOUkhZX2lua3lOb2RlQ29tbWFuZCAoCiAgICBjb25zdCBDSEFS
ICAqb3BlcgoJKTsKCklOVCBOUkhZX2lua3lOb2RlQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAg
ICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCgoKCgogCgpJ
TlQgTlJIWV9rZXlDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlf
a2V5Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29u
c3QgQ0hBUiAqPiBsaW5lCgkpOwoKCgoKCgogCgpJTlQgTlJIWV9rbGlzdENvbW1hbmQgKAogICAg
Y29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV9rbGlzdENvbW1hbmQgKAogICAgY29uc3Qg
Q0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgoK
CgoKCgoKCgoKIAoKSU5UIE5SSFlfa21hZ25ldENvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9w
ZXIKCSk7CgpJTlQgTlJIWV9rbWFnbmV0Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAg
ICpvcGVyLAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCiAKCklOVCBOUkhZX2xh
c3RDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfbGFzdENvbW1h
bmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIg
Kj4gbGluZQoJKTsKCgogCgppbnQgTlJIWV9sYXllckNvbW1hbmQgKAogICAgY29uc3QgY2hhciAq
b3BlcgoJKTsKCmludCBOUkhZX2xheWVyQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAg
ICpvcGVyLAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCiAKCklOVCBOUkhZX2xh
eW91dENvbW1hbmQgKAoJCSAgICAgICBjb25zdCBjaGFyKgoJKTsKCklOVCBOUkhZX2xheW91dENv
bW1hbmQgKAoJCSAgICAgICBjb25zdCBDSEFSKiBvcGVyLAoJCSAgICAgICBMaXN0PCBjb25zdCBD
SEFSKiA+CgkpOwoKCiAKCklOVCBOUkhZX2xheW91dEFkbWluQ29tbWFuZCAoCgkJCSAgICBjb25z
dCBjaGFyKgoJKTsKCklOVCBOUkhZX2xheW91dEFkbWluQ29tbWFuZCAoCgkJCSAgICBjb25zdCBD
SEFSKiwKCQkJICAgIExpc3Q8IGNvbnN0IENIQVIqID4KCSk7CgoKIAoKSU5UIE5SSFlfbGlnaHRD
b21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfbGlnaHRDb21tYW5k
ICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+
IGxpbmUKCSk7CgoKCgoKCgoKCgoKCiAKCgoKCgpJTlQgTlJIWV9sc0NvbW1hbmQgKAogICAgY29u
c3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV9sc0NvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAg
ICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgogCgpJTlQg
TlJIWV9tYXBDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfbWFw
Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3Qg
Q0hBUiAqPiBsaW5lCgkpOwoKCgoKCgoKCiAKCklOVCBOUkhZX21hZ25ldENvbW1hbmQgKAogICAg
Y29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV9tYWduZXRDb21tYW5kICgKICAgIGNvbnN0
IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoK
IAoKCgoKCklOVCBOUkhZX21hbmlwdWxhdGVDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVy
CgkpOwoKSU5UIE5SSFlfbWFuaXB1bGF0ZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAg
ICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgoKCgoKIAoKSU5UIE5S
SFlfbWF0ZXJpYWxDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlf
bWF0ZXJpYWxDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0
IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKSU5UIE5SSFlf
bWV0YW1vcnBoQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX21l
dGFtb3JwaENvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3Qg
PGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgoKCgoKIAoKSU5UIE5SSFlfbW9ycGhDb21tYW5kICgK
ICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKaW50IE5SSFlfbW9ycGhDb21tYW5kICgKICAgIGNv
bnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7
CgoKIAoKSU5UIE5SSFlfbW9ycGhGaWxlQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJ
KTsKCmludCBOUkhZX21vcnBoRmlsZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAq
b3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgogCgpJTlQgTlJIWV9tZW51
Q29tbWFuZCAoCgkJICAgICAgIGNvbnN0IGNoYXIqIG9wZXIKCSk7CgpJTlQgTlJIWV9tZW51Q29t
bWFuZCAoCgkJICAgICAgIGNvbnN0IENIQVIqIG9wZXIsCgkJICAgICAgIExpc3Q8IGNvbnN0IENI
QVIqID4gbGluZQoJKTsKCgogCgpJTlQgTlJIWV9tZW51QWN0aW9uQ29tbWFuZCAoCgkJICAgICAg
IGNvbnN0IGNoYXIqIG9wZXIKCSk7CgpJTlQgTlJIWV9tZW51QWN0aW9uQ29tbWFuZCAoCgkJICAg
ICAgIGNvbnN0IENIQVIqIG9wZXIsCgkJICAgICAgIExpc3Q8IGNvbnN0IENIQVIqID4gbGluZQoJ
KTsKCgogCgpJTlQgTlJIWV9tYXJibGVDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkp
OwoKSU5UIE5SSFlfbWFyYmxlQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVy
LAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCiAKCklOVCBOUkhZX25leHRDb21t
YW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfbmV4dENvbW1hbmQgKAog
ICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGlu
ZQoJKTsKCgogCgpJTlQgTlJIWV9ub2lzZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIK
CSk7CgpJTlQgTlJIWV9ub2lzZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3Bl
ciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgoKCgoKIAoKCgoKCklOVCBOUkhZ
X29iamVjdENvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV9vYmpl
Y3RDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25z
dCBDSEFSICo+IGxpbmUKCSk7CgoKIAoKSU5UIE5SSFlfcGFyc2VDb21tYW5kICgKICAgIGNvbnN0
IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfcGFyc2VDb21tYW5kICgKICAgIGNvbnN0IENIQVIg
ICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKIAoKSU5U
IE5SSFlfcGFydml6Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCmludCBOUkhZ
X3BhcnZpekNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3Qg
PGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgoKCgoKIAoKSU5UIE5SSFlfcGlja0NvbW1hbmQgKAog
ICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV9waWNrQ29tbWFuZCAoCiAgICBjb25z
dCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoK
CiAKCklOVCBOUkhZX3BvaW50YXRDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoK
SU5UIE5SSFlfcG9pbnRhdENvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwK
ICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgogCgpJTlQgTlJIWV9yQ29tbWFuZCAo
CiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX3JDb21tYW5kICgKICAgIGNvbnN0
IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoK
CgoKCgoKCgoKCgoKCgoKCiAKCklOVCBOUkhZX3JhZGlhdGVDb21tYW5kICgKICAgIGNvbnN0IENI
QVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfcmFkaWF0ZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAg
ICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgogCgpJTlQg
TlJIWV9yZWFkQ29tbWFuZCAoCiAgICBjb25zdCBjaGFyICAqb3BlcgoJKTsKCklOVCBOUkhZX3Jl
YWRDb21tYW5kICgKICAgIGNvbnN0IGNoYXIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25z
dCBjaGFyICo+IGxpbmUKCSk7CgoKCgoKCgoKCgogCgpJTlQgTlJIWV9yZWRyYXdDb21tYW5kICgK
ICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfcmVkcmF3Q29tbWFuZCAoCiAgICBj
b25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkp
OwoKCiAKCklOVCBOUkhZX3JlbGF4Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsK
CmludCBOUkhZX3JlbGF4Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAog
ICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCiAKCklOVCBOUkhZX3JlcG9zQ29tbWFu
ZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX3JlcG9zQ29tbWFuZCAoCiAg
ICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5l
CgkpOwoKCiAKCklOVCBOUkhZX3JlbmFtZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIK
CSk7CgpJTlQgTlJIWV9yZW5hbWVDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9w
ZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKCgoKCgoKCgoKCgoKIAoKSU5U
IE5SSFlfcmVzZXRDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlf
cmVzZXRDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxj
b25zdCBDSEFSICo+IGxpbmUKCSk7CgoKIAoKSU5UIE5SSFlfcm90YXRlQ29tbWFuZCAoCiAgICBj
b25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX3JvdGF0ZUNvbW1hbmQgKAogICAgY29uc3Qg
Q0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgog
CgpJTlQgTlJIWV9yb3RvQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBO
UkhZX3JvdG9Db21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0
IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKCgoKCgoKCgoKCiAKCklOVCBOUkhZX3NhdmVDb21t
YW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfc2F2ZUNvbW1hbmQgKAog
ICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGlu
ZQoJKTsKCgoKCgoKCgoKCiAKCklOVCBOUkhZX3NldENvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAg
Km9wZXIKCSk7CgpJTlQgTlJIWV9zZXRDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAg
Km9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKCgoKCiAKCklOVCBOUkhZ
X3NoZWxmQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX3NoZWxm
Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3Qg
Q0hBUiAqPiBsaW5lCgkpOwoKCiAKCklOVCBOUkhZX3NoZWxmQnV0dG9uQ29tbWFuZCAoCiAgICBj
b25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX3NoZWxmQnV0dG9uQ29tbWFuZCAoCiAgICBj
b25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkp
OwoKCiAKCklOVCBOUkhZX3NoaWZ0Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsK
CklOVCBOUkhZX3NoaWZ0Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAog
ICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCiAKCgoKCgpJTlQgTlJIWV9zaG9vdENv
bW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV9zaG9vdENvbW1hbmQg
KAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4g
bGluZQoJKTsKCgogCgpJTlQgTlJIWV9zaW53YXZlQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAq
b3BlcgoJKTsKCklOVCBOUkhZX3NpbndhdmVDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAg
ICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKIAoKVHdpbmUgZFRv
VHdpbmUgKCAKICAgICAgICBpbnQgICAgICAgICB2YWwKCSk7CgppbnQgcmVjdXJzaXZlU2tlbGV0
b24gKAogICAgICAgIE5SSFlfY2xhc3NUaGluZyAgICAgKm5vZGUsCiAgICAgICAgTlJIWV9jbGFz
c1RoaW5nICAgICAqYmVuZHksCiAgICAgICAgaW50ICAgICAgICAgICAgICAgICBjaGFuTnVtCgkp
OwoKSU5UIE5SSFlfc2tlbGV0b25Db21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoK
SU5UIE5SSFlfc2tlbGV0b25Db21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIs
CiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKIAoKaW50IE5SSFlfc2tpbkNvbW1h
bmQgKAoJCSAgICAgIGNvbnN0IGNoYXIqIG9wZXIKCSk7CgppbnQgTlJIWV9za2luQ29tbWFuZCAo
CgkJICAgICAgY29uc3QgY2hhciogb3BlciwKCQkgICAgICBMaXN0PCBjb25zdCBjaGFyKiA+IGxp
bmUKCSk7CgoKIAoKSU5UIE5SSFlfc2xpZ2h0Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3Bl
cgoJKTsKCklOVCBOUkhZX3NsaWdodENvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAq
b3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgogCgpJTlQgTlJIWV9zb3Vu
ZENvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV9zb3VuZENvbW1h
bmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIg
Kj4gbGluZQoJKTsKCgoKCgoKCgoKCgoKIAoKSU5UIE5SSFlfc3RlcHBhcmVudENvbW1hbmQgKAog
ICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgppbnQgTlJIWV9zdGVwcGFyZW50Q29tbWFuZCAoCiAg
ICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5l
CgkpOwoKCiAKCklOVCBOUkhZX3N0ZXJlb0NvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIK
CSk7CgpJTlQgTlJIWV9zdGVyZW9Db21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9w
ZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKIAoKSU5UIE5SSFlfdGV4Q29t
bWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX3RleENvbW1hbmQgKAog
ICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGlu
ZQoJKTsKCgoKCgoKCgoKCgoKIAoKSU5UIE5SSFlfdGV4Y2hhbkNvbW1hbmQgKAogICAgY29uc3Qg
Q0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV90ZXhjaGFuQ29tbWFuZCAoCiAgICBjb25zdCBDSEFS
ICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCiAKCklO
VCBOUkhZX3RpbWVjaGFuQ29tbWFuZCAoCiAgICAgICAgY29uc3QgQ0hBUiAgICAgICpvcGVyCgkp
OwoKSU5UIE5SSFlfdGltZWNoYW5Db21tYW5kICgKICAgICAgICBjb25zdCBDSEFSICAgICAgICAg
ICAgICAgICAgICAgICpvcGVyLAogICAgICAgIExpc3QgPGNvbnN0IENIQVIgKj4gICAgIGxpbmUK
CSk7CgoKIAoKSU5UIE5SSFlfdG90ZXhDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkp
OwoKaW50IE5SSFlfdG90ZXhDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIs
CiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKIAoKSU5UIE5SSFlfc2hhZG93Q29t
bWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX3NoYWRvd0NvbW1hbmQg
KAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4g
bGluZQoJKTsKCgoKCgoKIAoKSU5UIE5SSFlfc3RyZWFtQ29tbWFuZCAoCiAgICBjb25zdCBDSEFS
ICAqb3BlcgoJKTsKCmludCBOUkhZX3N0cmVhbUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAg
ICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgogCgpJTlQgTlJI
WV9zdHJlYW1TaGFwZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgppbnQgTlJI
WV9zdHJlYW1TaGFwZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAg
IExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgogCgpJTlQgTlJIWV90cmFja0NvbW1hbmQg
KAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV90cmFja0NvbW1hbmQgKAogICAg
Y29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJ
KTsKCgoKCgoKCgoKCgoKCgoKCiAKCklOVCBOUkhZX3RyYWNrU2hhcGVDb21tYW5kICgKICAgIGNv
bnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfdHJhY2tTaGFwZUNvbW1hbmQgKAogICAgY29u
c3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsK
CgoKCgoKIAoKSU5UIE5SSFlfdHJhY2szZENvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIK
CSk7CgpJTlQgTlJIWV90cmFjazNkQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpv
cGVyLAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCgoKCgogCgpJTlQgTlJIWV90
cmF2ZWxDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfdHJhdmVs
Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3Qg
Q0hBUiAqPiBsaW5lCgkpOwoKCiAKCklOVCBOUkhZX3R3ZWx2ZWZsZENvbW1hbmQgKAogICAgY29u
c3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV90d2VsdmVmbGRDb21tYW5kICgKICAgIGNvbnN0
IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoK
IAoKSU5UIE5SSFlfdW5kb0NvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQg
TlJIWV91bmRvQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlz
dCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKdm9pZCAgTlJIWV9saXN0VW5kb1N0YWNrICgKICAg
IGNvbnN0IExpc3Q8VHdpbmU+ICZsaXN0CgkpOwoKCiAKCklOVCBOUkhZX3VzZW1hcENvbW1hbmQg
KAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV91c2VtYXBDb21tYW5kICgKICAg
IGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUK
CSk7CgoKCgoKCgoKIAoKSU5UIE5SSFlfd3JpdGVDb21tYW5kICgKICAgIGNvbnN0IGNoYXIgICpv
cGVyCgkpOwoKSU5UIE5SSFlfd3JpdGVDb21tYW5kICgKICAgIGNvbnN0IGNoYXIgICAgICAgICAg
Km9wZXIsCiAgICBMaXN0IDxjb25zdCBjaGFyICo+IGxpbmUKCSk7CgoKCgoKCiAKClBPTElTSCBO
UkhZX2NyZWF0ZUZyb21PcGVyICgKICAgIGNvbnN0IENIQVIgICpvcGVyLAogICAgY29uc3QgSU5U
ICAgdHlwZQoJKTsKClBPTElTSCBOUkhZX2NyZWF0ZUZyb21PcGVyICgKICAgIGNvbnN0IENIQVIg
ICpvcGVyLAogICAgaW50IHR5cGUsCiAgICBpbnQgY3JlYXRlQ2hhbkFzU3RhdGljLAogICAgaW50
IGNyZWF0ZUNoYW5Bc0R5bmFtaWMKCSk7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK
CgogCgpjbGFzcyBOUkhZX2NsYXNzQ2hhbm5lbExpc3QgJk5SSFlfR2V0Q3VycmVudENoYW5uZWxM
aXN0ICgpOwoKCgoKCgogCgoKIAoKWk9PTEVBTiBOUkhZX2RlbGV0ZUZyb21PcGVyICgKICAgIGNv
bnN0IENIQVIgICAgICAqb3BlciwKICAgIGNvbnN0IElOVCAgICAgICB0eXBlLAogICAgY29uc3Qg
Wk9PTEVBTiAgIHJlY3Vyc2l2ZUZsYWcKCSk7CgoKCgoKCiAKCgoKCgoKCgogCgppbnQgTlJIWV9k
dW1wb2JqICgKICAgIFR3aW5lIG91dGZpbGVOYW1lLAogICAgZmxvYXQgcmVmRnJhbWUsCiAgICBp
bnQgbW90aW9uYmx1ciwKICAgIGZsb2F0IHN0YXJ0LAogICAgZmxvYXQgZW5kLAogICAgTlJIWV9j
bGFzc1RoaW5nICpsb2NhbE9iamVjdCwKICAgIE5SSFlfY2xhc3NDYW1lcmEgKmNhbWVyYU9iamVj
dCwKICAgIExpc3Q8TlJIWV9jbGFzc01vZGVsICo+IG1vZGVscywKICAgIGJvb2wgZHVtcF91diwK
ICAgIHZvaWQgKmNhY2hlCgkpOwoKaW50IE5SSFlfZHVtcGZ1ciAoCiAgICBUd2luZSBvdXRmaWxl
TmFtZSwKICAgIGZsb2F0IGZyYW1lLAogICAgTlJIWV9jbGFzc1RoaW5nICpsb2NhbE9iamVjdCwK
ICAgIE5SSFlfY2xhc3NDYW1lcmEgKmNhbWVyYU9iamVjdCwKICAgIGZsb2F0IGRlbnNpdHksCiAg
ICBOUkhZX2NsYXNzRnVyICpmdXJNb2RlbAoJKTsKCgogCgpOUkhZX2J1bmNoPE5SSFlfY2xhc3ND
YW1lcmE+ICpOUkhZX2ZpbmRDYW1lcmEgKAogICAgY29uc3QgY2hhciAqbmFtZQoJKTsKCk5SSFlf
Y2xhc3NUaGluZyAqTlJIWV9maW5kVGhpbmcgKAogICAgY29uc3QgY2hhciAqbmFtZSwKICAgIGNv
bnN0IGludCB0eXBlLAogICAgY29uc3QgYm9vbCBjcmVhdGUKCSk7Cgp2b2lkICAqTlJIWV9hZGRU
aGluZyAoCiAgICBjb25zdCBDSEFSICAqbmFtZSwKICAgIGNvbnN0IElOVCAgIHR5cGUsCiAgICBj
b25zdCBJTlQgICByZXR1cm5BcwoJKTsKCgoKCgoKCmJvb2wgTlJIWV9zZXRVbmV4cGFuZGVkRmlu
ZCAoCiAgICBib29sIHN0YXRlCgkpOwoKYm9vbCBOUkhZX2dldFVuZXhwYW5kZWRGaW5kICgKCSk7
CgoKIAoKSU5UIE5SSFlfZ2V0TWF4aW11bVBhcm1zICgKICAgIHZvaWQgCgkpOwoKSU5UIE5SSFlf
c2V0TWF4aW11bVBhcm1zICgKICAgIGNvbnN0IElOVCAgIG51bWJlcgoJKTsKCnZvaWQgIE5SSFlf
ZnJlZUluaXRPcHRpb25QYXJtc01lbW9yeSAoCiAgICB2b2lkIAoJKTsKClpPT0xFQU4gTlJIWV9p
bml0T3B0aW9uUGFybXMgKAogICAgY29uc3QgQ0hBUiAgICAgKmNtZCwKICAgIGNsYXNzIE5SSFlf
b3B0aW9ucyAqcGFybSwKICAgIGNvbnN0IElOVCAgICAgIG51bWJlcgoJKTsKCgoKCgoKCgogCgpa
T09MRUFOIE5SSFlfbGlzdENoYW5uZWxzICgKICAgIEZJTEUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKmZwLAogICAgTlJIWV9idW5jaCA8TlJIWV9jbGFzc1RoaW5nPiAgICAqYnVuY2hfdGhp
bmdQdHJzCgkpOwoKdm9pZCAgTlJIWV9saXN0Q2hpbGRyZW4gKAogICAgRklMRSAgICAgICAgICAg
ICpmcCwKICAgIE5SSFlfY2xhc3NUaGluZyAqdGhpbmdQdHIKCSk7Cgp2b2lkIE5SSFlfbGlzdENh
bWVyYSAoCiAgICBGSUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkqZnAsCiAgICBjb25z
dCBMaXN0PE5SSFlfY2xhc3NDYW1lcmEgKj4gICAgICAmY2FtZXJhTGlzdCwKICAgIGNvbnN0IExp
c3Q8VHdpbmU+IAkJCSZscwoJKTsKCnZvaWQgTlJIWV9saXN0TGlnaHQgKAogICAgRklMRSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAJKmZwLAogICAgY29uc3QgTGlzdDxOUkhZX2NsYXNzTGln
aHQgKj4gICAgICAmbGlnaHRMaXN0LAogICAgY29uc3QgTGlzdDxUd2luZT4gCQkJJmxzCgkpOwoK
dm9pZCBOUkhZX2xpc3RIb21lICgKICAgIEZJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CSpmcCwKICAgIGNvbnN0IExpc3Q8TlJIWV9jbGFzc0hvbWUgKj4gICAgICAmaG9tZUxpc3QsCiAg
ICBjb25zdCBMaXN0PFR3aW5lPiAJCQkmbHMKCSk7Cgp2b2lkIE5SSFlfbGlzdE9iamVjdCAoCiAg
ICBGSUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkqZnAsCiAgICBjb25zdCBMaXN0PE5S
SFlfY2xhc3NPYmplY3QgKj4gICAgICAgJm9iamVjdExpc3QsCiAgICBjb25zdCBMaXN0PFR3aW5l
PiAJCQkmbHMKCSk7Cgp2b2lkICBOUkhZX2xpc3RNYXAgKAogICAgRklMRSAgICAgICAgICAgICAg
ICAgICAgICAgICpmcCwKICAgIExpc3QgPE5SSFlfY2xhc3NNYXAqPiAgIGxpc3Rfb19tYXBzLAog
ICAgY29uc3QgTGlzdDxUd2luZT4gJmxzCgkpOwoKdm9pZCAgTlJIWV9saXN0TWF0ZXJpYWwgKAog
ICAgRklMRSAgICAgICAgICAgICAgICAgICAgICAgICpmcCwKICAgIExpc3QgPE5SSFlfY2xhc3NN
YXRlcmlhbCo+ICBsaXN0X29fbWF0ZXJpYWxzLAogICAgY29uc3QgTGlzdDxUd2luZT4gJmxzCgkp
OwoKdm9pZCBOUkhZX2xpc3RGdXIgKAogICAgRklMRSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAJKmZwLAogICAgY29uc3QgTGlzdDxOUkhZX2NsYXNzRnVyICo+ICAgICAgICZmdXJMaXN0LAog
ICAgY29uc3QgTGlzdDxUd2luZT4gCQkJJmxzCgkpOwoKdm9pZCBOUkhZX2xpc3RNdXNjbGUgKAog
ICAgRklMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAJKmZwLAogICAgY29uc3QgTGlzdDxO
UkhZX2NsYXNzTXVzY2xlICo+ICAgICAgJm11c2NsZUxpc3QsCiAgICBjb25zdCBMaXN0PFR3aW5l
PiAJCQkmbHMKCSk7Cgp2b2lkIE5SSFlfbGlzdExheWVyICgKICAgIEZJTEUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCSpmcCwKICAgIGNvbnN0IExpc3Q8TlJIWV9jbGFzc0xheWVyICo+ICAg
ICAgICZsYXllckxpc3QsCiAgICBjb25zdCBMaXN0PFR3aW5lPiAJCQkmbHMKCSk7Cgp2b2lkIE5S
SFlfbGlzdER5bmFtaWNzICgKICAgIEZJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSpm
cCwKICAgIGNvbnN0IExpc3Q8TlJIWV9jbGFzc0R5bmFtaWNzICo+ICAgJmR5bmFtaWNzTGlzdCwK
ICAgIGNvbnN0IExpc3Q8VHdpbmU+IAkJCSZscwoJKTsKCnZvaWQgTlJIWV9saXN0Q29sbGlzaW9u
ICgKICAgIEZJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSpmcCwKICAgIGNvbnN0IExp
c3Q8TlJIWV9jbGFzc0NvbGxpc2lvbiAqPiAgICZjb2xsaXNpb25MaXN0LAogICAgY29uc3QgTGlz
dDxUd2luZT4gCQkJJmxzCgkpOwoKdm9pZCBOUkhZX2xpc3RGb3JjZSAoCiAgICBGSUxFICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAkqZnAsCiAgICBjb25zdCBMaXN0PE5SSFlfY2xhc3NGb3Jj
ZSAqPiAgICZmb3JjZUxpc3QsCiAgICBjb25zdCBMaXN0PFR3aW5lPiAJCQkmbHMKCSk7Cgp2b2lk
IE5SSFlfbGlzdEdlbmVyYXRvciAoCiAgICBGSUxFICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAkqZnAsCiAgICBjb25zdCBMaXN0PE5SSFlfY2xhc3NHZW5lcmF0b3IgKj4gICAmZ2VuZXJhdG9y
TGlzdCwKICAgIGNvbnN0IExpc3Q8VHdpbmU+IAkJCSZscwoJKTsKCnZvaWQgTlJIWV9saXN0Um90
byAoCiAgICBGSUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkqZnAsCiAgICBjb25zdCBM
aXN0PE5SSFlfY2xhc3NSb3RvICo+ICAgJmxzTGlzdCwKICAgIGNvbnN0IExpc3Q8VHdpbmU+IAkJ
CSZscwoJKTsKCnZvaWQgTlJIWV9saXN0U291bmQgKAogICAgRklMRSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAJKmZwLAogICAgY29uc3QgTGlzdDxOUkhZX2NsYXNzU291bmQgKj4gICAmbHNM
aXN0LAogICAgY29uc3QgTGlzdDxUd2luZT4gCQkJJmxzCgkpOwoKdm9pZCBOUkhZX2xpc3RJbmt5
ICgKICAgIEZJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSpmcCwKICAgIGNvbnN0IExp
c3Q8TlJIWV9jbGFzc0lua3kgKj4gICAmbHNMaXN0LAogICAgY29uc3QgTGlzdDxUd2luZT4gCQkJ
JmxzCgkpOwoKdm9pZCBOUkhZX2xpc3RTY2FmZm9sZCAoCiAgICBGSUxFICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAkqZnAsCiAgICBjb25zdCBMaXN0PE5SSFlfY2xhc3NTY2FmZm9sZCAqPiAg
ICZsc0xpc3QsCiAgICBjb25zdCBMaXN0PFR3aW5lPiAJCQkmbHMKCSk7Cgp2b2lkIE5SSFlfbGlz
dEtsaXN0ICgKICAgIEZJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSpmcCwKICAgIGNv
bnN0IExpc3Q8TlJIWV9jbGFzc0tsaXN0ICo+ICAgJmxzTGlzdCwKICAgIGNvbnN0IExpc3Q8VHdp
bmU+IAkJCSZscwoJKTsKCnZvaWQgTlJIWV9saXN0VHJhY2sgKAogICAgRklMRSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAJKmZwLAogICAgY29uc3QgTGlzdDxOUkhZX2NsYXNzVHJhY2sgKj4g
ICAmbHNMaXN0LAogICAgY29uc3QgTGlzdDxUd2luZT4gCQkJJmxzCgkpOwoKdm9pZCBOUkhZX2xp
c3RVc2VNYXAgKAogICAgRklMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAJKmZwLAogICAg
Y29uc3QgTGlzdDxOUkhZX2NsYXNzVXNlTWFwICo+ICAgJmxzTGlzdCwKICAgIGNvbnN0IExpc3Q8
VHdpbmU+IAkJCSZscwoJKTsKCnZvaWQgTlJIWV9saXN0VGV4ICgKICAgIEZJTEUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCSpmcCwKICAgIGNvbnN0IExpc3Q8TlJIWV9jbGFzc1RleCAqPiAg
ICZsc0xpc3QsCiAgICBjb25zdCBMaXN0PFR3aW5lPiAJCQkmbHMKCSk7Cgp2b2lkICBOUkhZX2xp
c3RDICgKICAgIEZJTEUgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZnAsCiAgICBOUkhZX2J1
bmNoIDxOUkhZX2NsYXNzVGhpbmc+ICAgICpidW5jaF90aGluZ1B0cnMKCSk7Cgp2b2lkICBOUkhZ
X2xpc3RPICgKICAgIEZJTEUgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZnAsCiAgICBOUkhZ
X2J1bmNoIDxOUkhZX2NsYXNzVGhpbmc+ICAgICpidW5jaF90aGluZ1B0cnMKCSk7Cgp2b2lkICBO
UkhZX2xpc3RQYXJlbnQgKAogICAgRklMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZnAs
CiAgICBOUkhZX2J1bmNoIDxOUkhZX2NsYXNzVGhpbmc+ICAgICpidW5jaF90aGluZ1B0cnMKCSk7
Cgp2b2lkICBOUkhZX2xpc3RDaGFubmVsVmFsdWVzICgKICAgIEZJTEUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKmZwLAogICAgTlJIWV9JTlRfRlJBTkdFICAgICAgICAgICAgICAgICAqZnJh
bmdlLAogICAgTlJIWV9idW5jaCA8TlJIWV9jbGFzc1RoaW5nPiAgICAqYnVuY2hfdGhpbmdQdHJz
CgkpOwoKdm9pZCAgTlJIWV9saXN0Q2hhbm5lbEtleVZhbHVlcyAoCiAgICBGSUxFICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICpmcCwKICAgIE5SSFlfSU5UX0ZSQU5HRSAgICAgICAgICAgICAg
ICAgKmZyYW5nZSwKICAgIE5SSFlfYnVuY2ggPE5SSFlfY2xhc3NUaGluZz4gICAgKmJ1bmNoX3Ro
aW5nUHRycwoJKTsKCnZvaWQgIE5SSFlfbGlzdFNsaWdodCAoCiAgICBGSUxFICpmcCwgCiAgICBj
b25zdCBMaXN0IDxUd2luZT4gJmxzCgkpOwoKIyAyODA1ICJoL25yaHlwcml2YXRlLnAiCgoKCiAK
CnZvaWQgIE5SSFlfbWF0Y2hGdW5jQWRkQ2hpbGRyZW4gKAogICAgTlJIWV9jbGFzc1RoaW5nICAg
ICAgICAgKnBhcmVudCwKICAgIExpc3QgPE5SSFlfY2xhc3NUaGluZyo+ICpjaGlsZHJlbgoJKTsK
CnZvaWQgIE5SSFlfbWF0Y2hGdW5jQWRkUGFyZW50cyAoCiAgICBOUkhZX2NsYXNzVGhpbmcgICAg
ICAgICAqY2hpbGQsCiAgICBMaXN0IDxOUkhZX2NsYXNzVGhpbmcqPiAqcGFyZW50cwoJKTsKCgog
Cgp2b2lkICBxdWF0ZXJuaW9uTGluZWFySW50ZXJwICgKTlJIWV9jbGFzc0NoYW5uZWwgKnhSb3Qs
Ck5SSFlfY2xhc3NDaGFubmVsICp5Um90LApOUkhZX2NsYXNzQ2hhbm5lbCAqelJvdCwKZmxvYXQg
ICAgICAgZnJhbmdlU3RhcnQsCmZsb2F0ICAgICAgICAgZnJhbmdlRW5kLApMaXN0IDxmbG9hdD4g
ICAga2V5TGlzdAoJKTsKCnZvaWQgIHF1YXRlcm5pb25TcGxpbmVJbnRlcnAgKApOUkhZX2NsYXNz
Q2hhbm5lbCAqeFJvdCwKTlJIWV9jbGFzc0NoYW5uZWwgKnlSb3QsCk5SSFlfY2xhc3NDaGFubmVs
ICp6Um90LApmbG9hdCAgICAgICBmcmFuZ2VTdGFydCwKZmxvYXQgICAgICAgICBmcmFuZ2VFbmQs
CkJPT0xFQU4gICAgICAgICAgIG1hdGNoLApMaXN0IDxmbG9hdD4gICAga2V5TGlzdAoJKTsKCgoK
CgoKCgoKCiAKCgogCgpOUkhZX2NsYXNzVGhpbmcgKk5SSFlfZ2V0SGllclJvb3RBc1RoaW5nICgK
ICAgIHZvaWQKCSk7Cgp2b2lkICBOUkhZX2xpc3RHZW5lYWxvZ3kgKAogICAgRklMRSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqZnAsCiAgICBOUkhZX2J1bmNoIDxOUkhZX2NsYXNzVGhpbmc+
ICAgICpzb3VyY2UsCiAgICBOUkhZX2J1bmNoIDxOUkhZX2NsYXNzVGhpbmc+ICAgICpob3dSZWxh
dGVkCgkpOwoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgpJTlQgTlJIWV9nZXRQYXJzZURpcmVjdGlvbk1vZGUgKAogICAg
dm9pZCAKCSk7CgpJTlQgTlJIWV9zZXRQYXJzZURpcmVjdGlvbk1vZGUgKAogICAgSU5UIHdoaWNo
CgkpOwoKWk9PTEVBTiBOUkhZX2dldERlYnVnUHJpbnRFYWNoVG9rZW4gKAogICAgdm9pZCAKCSk7
CgpaT09MRUFOIE5SSFlfc2V0RGVidWdQcmludEVhY2hUb2tlbiAoCiAgICBJTlQgc3RhdHVzCgkp
OwoKSU5UIE5SSFlfZ2V0RGVmYXVsdE5hbWVTcGFjZU1vZGUgKAogICAgdm9pZCAKCSk7CgpJTlQg
TlJIWV9zZXREZWZhdWx0TmFtZVNwYWNlTW9kZSAoCiAgICBJTlQgd2hpY2gKCSk7CgpJTlQgTlJI
WV9nZXRVc2VPbmVBc01vZGUgKAogICAgdm9pZCAKCSk7CgpJTlQgTlJIWV9zZXRVc2VPbmVBc01v
ZGUgKAogICAgSU5UIHdoaWNoCgkpOwoKTlJIWV9idW5jaCA8TlJIWV9jbGFzc1RoaW5nPiAqTlJI
WV9wYXJzZUludG9EZWZhdWx0TmFtZVNwYWNlICgKICAgIGNvbnN0IENIQVIgICAgICAqbmFtZSwK
ICAgIGNvbnN0IFpPT0xFQU4gICByZWN1cnNpdmVGbGFnLAogICAgY29uc3QgWk9PTEVBTiAgIHBh
cmVudEZsYWcKCSk7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKClBPTElTSCBOUkhZX2R1bWJtYXRjaCAo
CiAgICBjb25zdCBDSEFSICAqZGVzaXJlZFRva2VuLAogICAgY29uc3QgQ0hBUiAgKnRvTWF0Y2hB
Z2FpbnN0VG9rZW4KCSk7CgoKCgoKCgoKCgoKCgoKCgoKCgpaT09MRUFOIE5SSFlfZXhhbWluZVJh
bmdlICgKICAgIENIQVIgICAgKnJhbmdlUHRyLAogICAgWk9PTEVBTiAqaXNOdW1lcmljLAogICAg
Q0hBUiAgICAqKnN0YXJ0UHRyLAogICAgQ0hBUiAgICAqKmh5cGhlblB0ciwKICAgIENIQVIgICAg
KiplbmRQdHIsCiAgICBDSEFSICAgICoqaW5jUHRyLAogICAgSU5UICAgICAqaW5jcmVtZW50Cgkp
OwoKdm9pZCAgTlJIWV9jbGVhbnVwSW50ZXJuYWxQYXJzZVN0dWZmICgKICAgIHZvaWQgCgkpOwoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdm9pZCBOUkhZX3BhcnNl
SW50b0NoYW5uZWxzICgKICAgIGNvbnN0IGNoYXIgKiBvcGVyLAogICAgQk9PTEVBTiByZWN1cnNp
dmUsCiAgICBMaXN0IDxOUkhZX2NsYXNzQ2hhbm5lbCAqPiAmY2hhbm5lbHMKCSk7CgoKCgoKCiAK
CnZvaWQgTlJIWV9wdHNMb2FkRm9ybWF0ICgKICAgIGNvbnN0IGNsYXNzIFBUU19JdGVtU3BlYyAm
aXRlbSwKICAgIGludCAmd2lkdGgsCiAgICBpbnQgJmhlaWdodAoJKTsKCgogCgp0ZW1wbGF0ZTxj
bGFzcyBUPiB2b2lkIE5SSFlfbG9hZEl0ZW1MaXN0QWRkcmVzcyAoCiAgICB2ZWN0b3I8VCAqPiAq
JnYKCSk7Cgp0ZW1wbGF0ZTw+IHZvaWQgTlJIWV9sb2FkSXRlbUxpc3RBZGRyZXNzICgKICAgIHZl
Y3RvcjxOUkhZX2NsYXNzVGhpbmcgKj4gKiZ2CgkpOwoKdGVtcGxhdGU8PiB2b2lkIE5SSFlfbG9h
ZEl0ZW1MaXN0QWRkcmVzcyAoCiAgICB2ZWN0b3I8TlJIWV9jbGFzc09iamVjdCAqPiAqJnYKCSk7
Cgp0ZW1wbGF0ZTw+IHZvaWQgTlJIWV9sb2FkSXRlbUxpc3RBZGRyZXNzICgKICAgIHZlY3RvcjxO
UkhZX2NsYXNzQ2FtZXJhICo+IComdgoJKTsKCnRlbXBsYXRlPD4gdm9pZCBOUkhZX2xvYWRJdGVt
TGlzdEFkZHJlc3MgKAogICAgdmVjdG9yPE5SSFlfY2xhc3NMaWdodCAqPiAqJnYKCSk7Cgp0ZW1w
bGF0ZTw+IHZvaWQgTlJIWV9sb2FkSXRlbUxpc3RBZGRyZXNzICgKICAgIHZlY3RvcjxOUkhZX2Ns
YXNzTW9kZWwgKj4gKiZ2CgkpOwoKdGVtcGxhdGU8PiB2b2lkIE5SSFlfbG9hZEl0ZW1MaXN0QWRk
cmVzcyAoCiAgICB2ZWN0b3I8TlJIWV9jbGFzc1RyYWNrICo+IComdgoJKTsKCnRlbXBsYXRlPD4g
dm9pZCBOUkhZX2xvYWRJdGVtTGlzdEFkZHJlc3MgKAogICAgdmVjdG9yPE5SSFlfY2xhc3NIb21l
ICo+IComdgoJKTsKCnRlbXBsYXRlPD4gdm9pZCBOUkhZX2xvYWRJdGVtTGlzdEFkZHJlc3MgKAog
ICAgdmVjdG9yPE5SSFlfY2xhc3NSb3RvICo+IComdgoJKTsKCnRlbXBsYXRlPD4gdm9pZCBOUkhZ
X2xvYWRJdGVtTGlzdEFkZHJlc3MgKAogICAgdmVjdG9yPE5SSFlfY2xhc3NUZXggKj4gKiZ2Cgkp
OwoKdGVtcGxhdGU8PiB2b2lkIE5SSFlfbG9hZEl0ZW1MaXN0QWRkcmVzcyAoCiAgICB2ZWN0b3I8
TlJIWV9jbGFzc01hdGVyaWFsICo+IComdgoJKTsKCnRlbXBsYXRlPD4gdm9pZCBOUkhZX2xvYWRJ
dGVtTGlzdEFkZHJlc3MgKAogICAgdmVjdG9yPE5SSFlfY2xhc3NNYXAgKj4gKiZ2CgkpOwoKdGVt
cGxhdGU8PiB2b2lkIE5SSFlfbG9hZEl0ZW1MaXN0QWRkcmVzcyAoCiAgICB2ZWN0b3I8TlJIWV9j
bGFzc1VzZU1hcCAqPiAqJnYKCSk7Cgp0ZW1wbGF0ZTw+IHZvaWQgTlJIWV9sb2FkSXRlbUxpc3RB
ZGRyZXNzICgKICAgIHZlY3RvcjxOUkhZX2NsYXNzU291bmQgKj4gKiZ2CgkpOwoKdGVtcGxhdGU8
PiB2b2lkIE5SSFlfbG9hZEl0ZW1MaXN0QWRkcmVzcyAoCiAgICB2ZWN0b3I8TlJIWV9jbGFzc0R5
bmFtaWNzICo+IComdgoJKTsKCnRlbXBsYXRlPD4gdm9pZCBOUkhZX2xvYWRJdGVtTGlzdEFkZHJl
c3MgKAogICAgdmVjdG9yPE5SSFlfY2xhc3NGb3JjZSAqPiAqJnYKCSk7Cgp0ZW1wbGF0ZTw+IHZv
aWQgTlJIWV9sb2FkSXRlbUxpc3RBZGRyZXNzICgKICAgIHZlY3RvcjxOUkhZX2NsYXNzR2VuZXJh
dG9yICo+IComdgoJKTsKCnRlbXBsYXRlPD4gdm9pZCBOUkhZX2xvYWRJdGVtTGlzdEFkZHJlc3Mg
KAogICAgdmVjdG9yPE5SSFlfY2xhc3NDb2xsaXNpb24gKj4gKiZ2CgkpOwoKdGVtcGxhdGU8PiB2
b2lkIE5SSFlfbG9hZEl0ZW1MaXN0QWRkcmVzcyAoCiAgICB2ZWN0b3I8TlJIWV9jbGFzc0lua3kg
Kj4gKiZ2CgkpOwoKdGVtcGxhdGU8PiB2b2lkIE5SSFlfbG9hZEl0ZW1MaXN0QWRkcmVzcyAoCiAg
ICB2ZWN0b3I8TlJIWV9jbGFzc1NjYWZmb2xkICo+IComdgoJKTsKCnRlbXBsYXRlPD4gdm9pZCBO
UkhZX2xvYWRJdGVtTGlzdEFkZHJlc3MgKAogICAgdmVjdG9yPE5SSFlfY2xhc3NBcHBhcml0aW9u
ICo+IComdgoJKTsKCnRlbXBsYXRlPD4gdm9pZCBOUkhZX2xvYWRJdGVtTGlzdEFkZHJlc3MgKAog
ICAgdmVjdG9yPE5SSFlfY2xhc3NSb290ICo+IComdgoJKTsKCnRlbXBsYXRlPD4gdm9pZCBOUkhZ
X2xvYWRJdGVtTGlzdEFkZHJlc3MgKAogICAgdmVjdG9yPE5SSFlfY2xhc3NLbGlzdCAqPiAqJnYK
CSk7Cgp0ZW1wbGF0ZTw+IHZvaWQgTlJIWV9sb2FkSXRlbUxpc3RBZGRyZXNzICgKICAgIHZlY3Rv
cjxOUkhZX2NsYXNzRnVyICo+IComdgoJKTsKCnRlbXBsYXRlPD4gdm9pZCBOUkhZX2xvYWRJdGVt
TGlzdEFkZHJlc3MgKAogICAgdmVjdG9yPE5SSFlfY2xhc3NNdXNjbGUgKj4gKiZ2CgkpOwoKdGVt
cGxhdGU8PiB2b2lkIE5SSFlfbG9hZEl0ZW1MaXN0QWRkcmVzcyAoCiAgICB2ZWN0b3I8TlJIWV9j
bGFzc0xheWVyICo+IComdgoJKTsKCgogCgpOUkhZX2NsYXNzVGltZSAqTlJIWV9nZXRUaW1lTG9y
ZCAoCiAgICB2b2lkIAoJKTsKCkxpc3QgPE5SSFlfRlJBTkdFPiBOUkhZX3BhcnNlRnJhbmdlICgK
ICAgIGNvbnN0IENIQVIgICphc2NpaQoJKTsKCgoKCgoKCgoKCiAKCmNvbnN0IENIQVIgKk5SSFlf
cHJpbnRab29sZWFuICgKICAgIGNvbnN0IFpPT0xFQU4gICBzdGF0dXMKCSk7CgpJTlQgTlJIWV9w
YXJzZVpvb2xlYW4gKAogICAgY29uc3QgQ0hBUiAgKmFzY2lpCgkpOwoKY29uc3QgQ0hBUiAqTlJI
WV9wcmludFBvbGlzaCAoCiAgICBjb25zdCBQT0xJU0ggICAgc3RhdHVzCgkpOwoKSU5UIE5SSFlf
cGFyc2VQb2xpc2ggKAogICAgY29uc3QgQ0hBUiAgKmFzY2lpCgkpOwoKY29uc3QgY2hhciAqTlJI
WV9wcmludE9wdGlvblR5cGUgKAogICAgaW50IHR5cGUKCSk7Cgpjb25zdCBjaGFyICpOUkhZX3By
aW50VGhpbmdUeXBlICgKICAgIGludCB0eXBlCgkpOwoKY29uc3QgQ0hBUiAqTlJIWV9wcmludE9w
dGlvblBhcnNlRXJyb3IgKAogICAgY29uc3QgSU5UICAgY29kZQoJKTsKCmNvbnN0IENIQVIgKk5S
SFlfcHJpbnRPcGVyYW5kUGFyc2VFcnJvciAoCiAgICBjb25zdCBJTlQgICBjb2RlCgkpOwoKY29u
c3QgQ0hBUiAqTlJIWV9wcmludFJlYWwgKAogICAgUkVBTCAgICBudW1iZXIKCSk7Cgpjb25zdCBD
SEFSICpOUkhZX3ByaW50UmVhbEZyYW5nZSAoCiAgICBSRUFMICAgIHN0YXJ0CgkpOwoKY29uc3Qg
Q0hBUiAqTlJIWV9wcmludFJlYWxGcmFuZ2UgKAogICAgUkVBTCAgICBzdGFydCwKICAgIFJFQUwg
ICAgZW5kCgkpOwoKY29uc3QgQ0hBUiAqTlJIWV9wcmludFJlYWxGcmFuZ2UgKAogICAgY29uc3Qg
TlJIWV9SRUFMX0ZSQU5HRSAgJmZyYW5nZQoJKTsKCmNvbnN0IENIQVIgKk5SSFlfcHJpbnRSZWFs
RnJhbmdlICgKICAgIFJFQUwgICAgc3RhcnQsCiAgICBSRUFMICAgIGVuZCwKICAgIFJFQUwgICAg
aW5jCgkpOwoKdm9pZCAgTlJIWV9wcmludE1hdHJpeCAoCiAgICBGSUxFICAgICAgICAqZnAsCiAg
ICBJTlQgICAgICAgICBpbmRlbnQsCiAgICBaT09MRUFOICAgICBkb0JlZ2luRW5kLAogICAgTV9N
YXRyaXggICAgbWF0CgkpOwoKdm9pZCAgTlJIWV9wcmludE1hdHJpeCAoCiAgICBGSUxFICAgICAg
ICAqZnAsCiAgICBJTlQgICAgICAgICBpbmRlbnQsCiAgICBaT09MRUFOICAgICBkb0JlZ2luRW5k
LAogICAgZmxvYXQgICAgICAgbWF0WzRdWzRdCgkpOwoKQk9PTEVBTiBOUkhZX21hdHJpeElkZW50
aXR5ICgKICAgIGNvbnN0IE1fTWF0cml4ICZtCgkpOwoKQk9PTEVBTiBOUkhZX21hdHJpeElkZW50
aXR5ICgKICAgIGNvbnN0IE1fTWF0cml4ICZtLAogICAgZmxvYXQgdG9sZXJhbmNlCgkpOwoKQk9P
TEVBTiBOUkhZX21hdHJpY2VzRXF1YWwgKAogICAgY29uc3QgTV9NYXRyaXggJm0xLAogICAgY29u
c3QgTV9NYXRyaXggJm0yCgkpOwoKQk9PTEVBTiBOUkhZX21hdHJpY2VzQ2xvc2UgKAogICAgY29u
c3QgTV9NYXRyaXggJm0xLAogICAgY29uc3QgTV9NYXRyaXggJm0yLAogICAgZmxvYXQgdG9sZXJh
bmNlCgkpOwoKTV9NYXRyaXggTlJIWV9vcnRob05vcm1hbGl6ZSAoCiAgICBjb25zdCBjaGFyICp0
eXBlLAogICAgY29uc3QgTV9WZWN0b3IgJm9yaWdpbiwKICAgIE1fVmVjdG9yIHYxLAogICAgTV9W
ZWN0b3IgdjIKCSk7CgpNX1ZlY3RvciBOUkhZX3JvdFNtb290aENoZWNrICgKICAgTV9WZWN0b3Ig
cm90cywgCiAgIE1fVmVjdG9yIHByZXZSb3QKCSk7Cgp2b2lkICBOUl9zdmRjbXAgKApkb3VibGUg
KiphLCAKaW50IG0sIAppbnQgbiwgCmRvdWJsZSAqdywgCmRvdWJsZSAqKnYKCSk7Cgp2b2lkICBO
Ul9zdmJrc2IgKApkb3VibGUgKip1LCAKZG91YmxlICp3LCAKZG91YmxlICoqdiwgCmludCBtLCAK
aW50IG4sIApkb3VibGUgKmIsCmRvdWJsZSAqeAoJKTsKCmRvdWJsZSAqTlJfZHZlY3RvciAoCmlu
dCBubCwKaW50IG5oCgkpOwoKdm9pZCBOUl9mcmVlX2R2ZWN0b3IgKApkb3VibGUgKnYsIAppbnQg
bmwsIAppbnQgbmgKCSk7Cgpkb3VibGUgKipOUl9kbWF0cml4ICgKaW50IG5ybCwgCmludCBucmgs
IAppbnQgbmNsLCAKaW50IG5jaAoJKTsKCmZsb2F0ICoqTlJfZm1hdHJpeCAoCmludCBucmwsIApp
bnQgbnJoLCAKaW50IG5jbCwgCmludCBuY2gKCSk7Cgp2b2lkICBOUl9mcmVlX2RtYXRyaXggKAog
IGRvdWJsZSAqKm0sIAogIGludCBucmwsIAogIGludCBucmgsIAogIGludCBuY2wsIAogIGludCBu
Y2gKCSk7CgpmbG9hdCAqTlJfdmVjdG9yICgKICAgIGludCBubCwKICAgIGludCBuaAoJKTsKCnZv
aWQgTlJfZnJlZV92ZWN0b3IgKAogICAgZmxvYXQgKnYsCiAgICBpbnQgbmwsCiAgICBpbnQgbmgK
CSk7CgpCT09MRUFOIE5SX2Nob2xkYyAoCiAgICBkb3VibGUgKiphLCAKICAgIGludCBuLCAKICAg
IGRvdWJsZSAqcAoJKTsKCnZvaWQgTlJfbHVkY21wICgKICAgIGludCBuLAogICAgaW50ICppbmR4
LAogICAgZG91YmxlICoqYSwKICAgIGZsb2F0ICpkCgkpOwoKTV9NYXRyaXggTlJIWV9zcGVjdWxh
ciAoCiAgICBOUkhZX2NsYXNzT2JqZWN0ICpsaWdodCwKICAgIGNvbnN0IE1fTWF0cml4ICZyZWZs
ZWN0b3JNYXQsCiAgICBOUkhZX2NsYXNzT2JqZWN0ICpmcm9tCgkpOwoKTV9NYXRyaXggTlJIWV9u
b3JtYWwgKAogICAgTlJIWV9jbGFzc09iamVjdCAqbGlnaHQsCiAgICBjb25zdCBNX01hdHJpeCAm
cmVmbGVjdG9yTWF0CgkpOwoKTV9NYXRyaXggTlJIWV9ncm91cE1hdHJpeCAoCiAgICBjbGFzcyBT
aGFwZSAqc2hhcGUsCiAgICBjb25zdCBUd2luZSAmZ3JvdXAKCSk7CgoKIAoKCiAKCgoKCgoKCgoK
CgojIDQ4ICJoL25yaHlwcml2YXRlLmgiIDIKCgoKIyAyOSAiaC9OUkhZLmgiIDIKCgogCgoKCiAK
CiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9oL3N0ZHR5cGVzLmgiIDEKCiAKCgoKCgoKCgoKCgoKCgoK
CgojIDIwMyAiL3NvZnR3YXJlL3RoYWxpYS9oL3N0ZHR5cGVzLmgiCgoKCgoKCgoKCgoKCgoKIyAz
NyAiaC9OUkhZLmgiIDIKCgogCgoKIAoKCgoKCgoKIAoKCgoKCgoKCgogCgoKCiAKCgogCnN0cnVj
dCBOUkhZX0NPTU1BTkQgCiAgICB7CiAgICBjb25zdCBjaGFyICAgICAgKm5hbWU7ICAgICAgICAg
ICAKICAgIGNvbnN0IGNoYXIgICAgICAqYWthOyAgICAgICAgICAgIAogICAgSU5UICAgICAgICAg
ICAgIHVzZUZvckFjY2VzczsgICAgCgogICAgIAogICAgdW5pb24gewogICAgICAgIGludCAgICAg
KCpmdW5jT2ZXb3JkcykoY29uc3QgY2hhciAqLCBMaXN0PGNvbnN0IGNoYXIgKj4pOwogICAgICAg
IGludCAgICAgKCpmdW5jT2ZFeHBycykoTGlzdDxIVV9FeHByZXNzaW9uPik7CgogICAgICAgIH0g
eDsKCgoKCgoKICAgICAKICAgIElOVCAgICAgICAgICAgICAoKmluaXRpYWxpemVGdW5jKShjb25z
dCBjaGFyICopOwogICAgY29uc3QgY2hhciAgICAgICpvcGVyOyAgICAgICAgICAgCiAgICBjb25z
dCBjaGFyICAgICAgKmhlbHA7ICAgICAgICAgICAKCiAgICBlbnVtIHsgV09SRFMsIEVYUFJTIH0g
dHlwZTsgICAgICAKICAgIH07CiAKCiAKCgp0eXBlZGVmIHN0cnVjdCBBc2NpaU9iakNoYW4gewog
ICAgVHdpbmUgICB0aGluZzsKICAgIFR3aW5lICAgY2hhbm5lbDsKICAgIH0gQVNDSUlfT0JKX0NI
QU47CmlubGluZSBjb25zdCBjaGFyICpjbGFzc05hbWUgKEFTQ0lJX09CSl9DSEFOKSB7IHJldHVy
biAoIkFTQ0lJX09CSl9DSEFOIik7IH07CgogCgoKCgoKCiAKCiAKCgoKCgoKCgoKCiAKCgoKIAog
CmNvbnN0IGludCBOUkhZX1dPUkxEU1RBVFVTX0RPX05PVEhJTkcgICAgICAgID0gMHgwOwpjb25z
dCBpbnQgTlJIWV9XT1JMRFNUQVRVU19NVVNUX1JFTUFLRV9XT1JMRCA9ICgxPDwwKTsKY29uc3Qg
aW50IE5SSFlfV09STERTVEFUVVNfTVVTVF9SRURSQVdfV09STEQgPSAoMTw8MSk7CmNvbnN0IGlu
dCBOUkhZX1dPUkxEU1RBVFVTX01VU1RfTUFTSyAgICAgICAgID0gKAogICAgTlJIWV9XT1JMRFNU
QVRVU19NVVNUX1JFTUFLRV9XT1JMRCB8CiAgICBOUkhZX1dPUkxEU1RBVFVTX01VU1RfUkVEUkFX
X1dPUkxEKTsKY29uc3QgaW50IE5SSFlfV09STERTVEFUVVNfTVVTVF9ET19FVkVSWVRISU5HPSBO
UkhZX1dPUkxEU1RBVFVTX01VU1RfTUFTSzsKCiAKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKIyAxICJoL05SSFkucCIgMQogCgoKCgoK
CgoKCgoKCgoKCgoKCiAKCgoKCgpjbGFzcyBOUkhZX1dvcmxkICpOUkhZQUNDRVNTX1JlYWQgKAog
ICAgY29uc3QgQ0hBUiAgKmluY29taW5nRmlsZW5hbWUKICk7Cgp2b2lkIE5SSFlBQ0NFU1NfRnJl
ZURhdGEgKAogICAgTlJIWV9Xb3JsZCAqd29ybGQKICk7CgpCT09MRUFOIE5SSFlBQ0NFU1NfQ2hv
cmNoYW4gKAogICAgY2xhc3MgTlJIWV9Xb3JsZCAqIHdvcmxkUHRyLAogICAgZmxvYXQgZnJhbWUs
CiAgICBmbG9hdCByZWZGcmFtZSwKICAgIGNvbnN0IFR3aW5lICYgdGFyZ2V0CiApOwoKQk9PTEVB
TiBOUkhZQUNDRVNTX0Nob3JDYW1lcmEgKAogICAgY2xhc3MgTlJIWV9Xb3JsZCAqIHdvcmxkUHRy
LAogICAgZmxvYXQgZnJhbWUsCiAgICBmbG9hdCByZWZGcmFtZSwKICAgIGNvbnN0IFR3aW5lICYg
dGFyZ2V0CiApOwoKaW50IE5SSFlBQ0NFU1NfQ2hvck9iamVjdCAoCiAgICBOUkhZX1dvcmxkICog
d29ybGRQdHIsCiAgICBmbG9hdCBmcmFtZSwKICAgIGNvbnN0IFR3aW5lICYgb2JqTmFtZSwKICAg
IGludCBtb3Rpb25ibHVyLAogICAgZmxvYXQgc2h1dHRlclN0YXJ0LAogICAgZmxvYXQgc2h1dHRl
ckVuZCwKICAgIGNvbnN0IFR3aW5lICYgZ2VvbSwKICAgIGNvbnN0IFR3aW5lICYgbmV4dEdlb20s
CiAgICBjb25zdCBUd2luZSAmIGdyb3VwLAogICAgY29uc3QgVHdpbmUgJiByZXNvbHV0aW9uLAog
ICAgY29uc3QgVHdpbmUgJiBzaGFwZUZpbGUKICk7CgoKCgoKQk9PTEVBTiBOUkhZQUNDRVNTX0No
b3JkdW1wICgKICAgIE5SSFlfV29ybGQgKndvcmxkUHRyLAogICAgY29uc3QgVHdpbmUgJmZpbGVu
YW1lLAogICAgZmxvYXQgZnJhbWUsCiAgICBjb25zdCBUd2luZSAmY2FtTmFtZSwKICAgIEZJTEUg
KmZwLAogICAgaW50IG9iamRpc3AsCiAgICBpbnQgbW90aW9uYmx1ciwKICAgIGZsb2F0IHNodXR0
ZXJTdGFydCwKICAgIGZsb2F0IHNodXR0ZXJFbmQsCiAgICBCT09MRUFOIGxlZnRleWUsCiAgICBC
T09MRUFOIHJpZ2h0ZXllLAogICAgQk9PTEVBTiBtYXRlcmlhbHMsCiAgICBCT09MRUFOIG1hcHMs
CiAgICBCT09MRUFOIGxpZ2h0c09ubHksCiAgICBCT09MRUFOIG9iamVjdHNPbmx5LAogICAgY29u
c3QgTGlzdDxUd2luZT4gJmRlZm9ybWluZ09iamVjdHMKICk7CgpCT09MRUFOIE5SSFlBQ0NFU1Nf
VmNtZCAoCiAgICBOUkhZX1dvcmxkICp3b3JsZFB0ciwKICAgIGZsb2F0IGZyYW1lLAogICAgY29u
c3QgVHdpbmUgJmNvbW1hbmQsCiAgICBjb25zdCBUd2luZSAmYXJncwogKTsKCgogCgp2b2lkICAg
IE5SSFlfU2F2ZUNoYW5uZWwgKAogICAgICAgICAgICBzdHJ1Y3QgTlJIWV9jbGFzc0NoYW5uZWwg
KmNoYW4sCiAgICAgICAgICAgIEJPT0xFQU4gbWFrZUtleQogKTsKCnZvaWQgICAgTlJIWV9TYXZl
Q2hhbm5lbHMgKAogICAgICAgICAgICBjb25zdCBMaXN0PGNsYXNzIE5SSFlfY2xhc3NDaGFubmVs
ICo+ICZjaGFubmVscywKICAgICAgICAgICAgQk9PTEVBTiBtYWtlS2V5CiApOwoKdm9pZCAgICBO
UkhZX1Jlc2V0Q2hhbm5lbCAoCiAgICAgICAgICAgIHN0cnVjdCBOUkhZX2NsYXNzQ2hhbm5lbCAq
Y2hhbgogKTsKCnZvaWQgICAgTlJIWV9SZXNldENoYW5uZWxzICgKICAgICAgICAgICAgY29uc3Qg
TGlzdDxjbGFzcyBOUkhZX2NsYXNzQ2hhbm5lbCAqPiAmY2hhbm5lbHMKICk7CgoKIAoKCiAKCgoK
CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgp2b2lkIE5SSFlfQ29tcHV0ZVRvRG8gKAogICAgTlJI
WV9jbGFzc1RoaW5nICp0aGluZ1B0ciwKICAgIGNvbnN0IFR3aW5lICZvbmx5LAogICAgY29uc3Qg
VHdpbmUgJm5vdCwKICAgIGNvbnN0IFR3aW5lICZmdWxsLAogICAgTGlzdDxzaG9ydD4gJnRvRG9M
aXN0CiApOwoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCnZvaWQgIE5SSFlfQ2xlYW51cEF0RXhpdCAo
CiAgICB2b2lkIAogKTsKCgoKCgoKIAoKCgoKCk5SSFlfQ09NTUFORCAqTlJIWV9HZXRBbmRJbml0
Q29tbWFuZFRhYmxlICgKICAgIHZvaWQgCiApOwoKTlJIWV9DT01NQU5EICpOUkhZX0dldENvbW1h
bmRUYWJsZSAoCiAgICB2b2lkIAogKTsKCk5SSFlfQ09NTUFORCAqTlJIWV9Mb2FkT3V0c2lkZUNv
bW1hbmRUYWJsZSAoCiAgICBOUkhZX0NPTU1BTkQgICAgKmNtZFB0cgogKTsKCmludCBOUkhZX0lu
aXRpYWxpemVDbWRQYXJtcyAoCiAgICBjb25zdCBjaGFyICAqY2FsbGluZ0Z1bmMsCiAgICBjb25z
dCBjaGFyICAqb3BlciwKICAgIGNsYXNzIE5SSFlfb3B0aW9ucyAqcGFybSwKICAgIGludCAgICAg
ICAgIHBhcm1MZW4KICk7CgpJTlQgTlJIWV9QYXJzZU9wZXJhbmQgKAogICAgRklMRSAgICAgICAg
ICAgICAgICAqZnAsCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29u
c3QgQ0hBUio+ICBsaW5lLAogICAgTlJIWV9jbGFzc0NvbW1hbmQgICAqQ21kCiApOwoKSU5UIE5S
SFlfUGFyc2VPcHRpb25zICgKICAgIEZJTEUgICAgICAgICAgICAgICAgKmZwLAogICAgY29uc3Qg
Q0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIqPiAgbGluZSwKICAgIGNs
YXNzIE5SSFlfY2xhc3NDb21tYW5kICogQ21kCiApOwoKY29uc3QgQ0hBUiAqTlJIWV9QcmludENv
bW1hbmRDbGFzc1JldHVybiAoCiAgICBjb25zdCBJTlQgICBzdGF0dXMKICk7Cgp2b2lkICAqTlJI
WV9DcmVhdGVUaGVDb21tYW5kRnJvbU91dHNpZGUgKAogICAgQ0hBUiAgICAqYXNjaWksCiAgICBJ
TlQgICAgIHRha2VPcGVyYW5kcywKICAgIElOVCAgICAgdGFrZU9wdGlvbnMsCiAgICBJTlQgICAg
IHRha2VFeHByZXNzaW9uLAogICAgQ0hBUiAgICAqY21kTmFtZSwKICAgIHZvaWQgICAgICpwYXJt
cywKICAgIElOVCAgICAgbnVtYmVyUGFybXMKICk7Cgp2b2lkICBOUkhZX01vZGlmeUNvbW1hbmRU
YWJsZUZvckFjY2VzcyAoCiAgICB2b2lkIAogKTsKCk5SSFlfQ09NTUFORCAqTlJIWV9GaW5kQ29t
bWFuZCAoCiAgICBjb25zdCBDSEFSICAqdG9CZUZvdW5kCiApOwoKSU5UIE5SSFlfR2V0RmluZENv
bW1hbmRBbWJpZ3VvdXNFcnJvciAoCiAgICB2b2lkIAogKTsKCnZvaWQgIE5SSFlfUHJpbnRGaW5k
Q29tbWFuZEFtYmlndW91c0Vycm9yICgKICAgIEZJTEUgICAgICAgICpmcCwKICAgIElOVCAgICAg
ICAgIGluZGVudCwKICAgIGNvbnN0IENIQVIgICp0b0JlRm91bmQKICk7CgoKIAoKSU5UIE5SSFlf
UHJvZ3JhbW1pbmdFcnJvckNoZWNrICgKICAgIHZvaWQgCiApOwoKSU5UIE5SSFlfQ2hlY2tPcHRp
b25QYXJzZUVycm9yUHJpbnRpbmdTdGF0ZW1lbnQgKAogICAgdm9pZCAKICk7CgpJTlQgTlJIWV9D
aGVja09wZXJhbmRQYXJzZUVycm9yUHJpbnRpbmdTdGF0ZW1lbnQgKAogICAgdm9pZCAKICk7CgoK
IAoKSFVfVmFsdWUgTlJIWV9TaGlmdEZ1bmN0aW9uICgKICAgIExpc3Q8SFVfVmFsdWU+ICAgICAg
ICAgICAgICAgICAgICBhcmcsCiAgICBIVV9QYXJzZXJTdGF0ZSAgICAgICAmZ2VuZXJpY1N0YXRl
CiApOwoKSFVfVmFsdWUgTlJIWV9TaGlmdFhGdW5jdGlvbiAoCiAgICBMaXN0PEhVX1ZhbHVlPiAg
ICAgICAgICAgICAgICBhcmcsCiAgICBIVV9QYXJzZXJTdGF0ZSAgJiBnZW5lcmljU3RhdGUKICk7
CgpIVV9WYWx1ZSBOUkhZX0NoYW5WYWxGdW5jdGlvbiAoCiAgICBMaXN0PEhVX1ZhbHVlPiAgICAg
ICAgICAgICAgICBhcmcsCiAgICBIVV9QYXJzZXJTdGF0ZSAgICAgICYgZ2VuZXJpY1N0YXRlCiAp
OwoKSFVfVmFsdWUgTlJIWV9DaGFuVmFsWEZ1bmN0aW9uICgKICAgIExpc3Q8SFVfVmFsdWU+ICAg
ICAgICAgICAgICAgYXJnLAogICAgSFVfUGFyc2VyU3RhdGUgICYgZ2VuZXJpY1N0YXRlCiApOwoK
SFVfVmFsdWUgTlJIWV9DYnJ0RnVuY3Rpb24gKAogICAgTGlzdDxIVV9WYWx1ZT4gICAgICAgICAg
ICAgICAgYXJnLAogICAgSFVfUGFyc2VyU3RhdGUgICYgZ2VuZXJpY1N0YXRlCiApOwoKSFVfVmFs
dWUgTlJIWV9TaWduRnVuY3Rpb24gKAogICAgTGlzdDxIVV9WYWx1ZT4gICAgICAgICAgICAgICAg
YXJnLAogICAgSFVfUGFyc2VyU3RhdGUgICYgZ2VuZXJpY1N0YXRlCiApOwoKSFVfVmFsdWUgTlJI
WV9Ob3JtUm90RnVuY3Rpb24gKAogICAgTGlzdDxIVV9WYWx1ZT4gICAgICAgICAgICAgICAgYXJn
LAogICAgSFVfUGFyc2VyU3RhdGUgICYgZ2VuZXJpY1N0YXRlCiApOwoKSFVfVmFsdWUgTlJIWV9T
bW9vdGhSb3RGdW5jdGlvbiAoCiAgICBMaXN0PEhVX1ZhbHVlPiAgICAgICAgICAgICAgICBhcmcs
CiAgICBIVV9QYXJzZXJTdGF0ZSAgJiBnZW5lcmljU3RhdGUKICk7CgpIVV9WYWx1ZSBOUkhZX05v
cm1GdW5jdGlvbiAoCiAgICBMaXN0PEhVX1ZhbHVlPiAgICAgICAgICAgICAgIGFyZywKICAgIEhV
X1BhcnNlclN0YXRlICAmIGdlbmVyaWNTdGF0ZQogKTsKCkhVX1ZhbHVlIE5SSFlfQXZlckZyYW5n
ZUZ1bmN0aW9uICgKICAgIExpc3Q8SFVfVmFsdWU+ICAgICAgICAgICAgICAgIGFyZywKICAgIEhV
X1BhcnNlclN0YXRlICAmIGdlbmVyaWNTdGF0ZQogKTsKCkhVX1ZhbHVlIE5SSFlfQXZlck1pbk1h
eEZ1bmN0aW9uICgKICAgIExpc3Q8SFVfVmFsdWU+ICAgICAgICAgICAgICAgIGFyZywKICAgIEhV
X1BhcnNlclN0YXRlICAmIGdlbmVyaWNTdGF0ZQogKTsKCkhVX1ZhbHVlIE5SSFlfQ2hhblZlbEZ1
bmN0aW9uICgKICAgIExpc3Q8SFVfVmFsdWU+ICAgICAgICAgICAgICAgICBhcmcsCiAgICBIVV9Q
YXJzZXJTdGF0ZSAgJiBnZW5lcmljU3RhdGUKICk7CgpIVV9WYWx1ZSBOUkhZX0NoYW5BY2NlbEZ1
bmN0aW9uICgKICAgIExpc3Q8SFVfVmFsdWU+ICAgICAgICAgICAgICAgIGFyZywKICAgIEhVX1Bh
cnNlclN0YXRlICAmIGdlbmVyaWNTdGF0ZQogKTsKCkhVX1ZhbHVlIE5SSFlfUG9zaXRpb254RnVu
Y3Rpb24gKAogICAgTGlzdDxIVV9WYWx1ZT4gICAgICAgICAgICAgICAgICAgICBhcmcsCiAgICBI
VV9QYXJzZXJTdGF0ZSAgJiBnZW5lcmljU3RhdGUKICk7CgpIVV9WYWx1ZSBOUkhZX1Bvc2l0aW9u
eUZ1bmN0aW9uICgKICAgIExpc3Q8SFVfVmFsdWU+ICAgICAgICAgICAgIGFyZywKICAgIEhVX1Bh
cnNlclN0YXRlICAmIGdlbmVyaWNTdGF0ZQogKTsKCkhVX1ZhbHVlIE5SSFlfUG9zaXRpb256RnVu
Y3Rpb24gKAogICAgTGlzdDxIVV9WYWx1ZT4gICAgICAgICAgICAgYXJnLAogICAgSFVfUGFyc2Vy
U3RhdGUgICYgZ2VuZXJpY1N0YXRlCiApOwoKSFVfVmFsdWUgTlJIWV9HZXRNYXRyaXhGdW5jdGlv
biAoCiAgICBMaXN0PEhVX1ZhbHVlPiAgICAgICAgICAgICAgICAgICAgIGFyZywKICAgIEhVX1Bh
cnNlclN0YXRlICAgICAgICZnZW5lcmljU3RhdGUKICk7CgoKCgoKSFVfVmFsdWUgTlJIWV9EaXN0
YW5jZUZ1bmN0aW9uICgKICAgIExpc3Q8SFVfVmFsdWU+ICAgICAgICAgICAgICAgICAgICAgYXJn
LAogICAgSFVfUGFyc2VyU3RhdGUgICAgICAgJmdlbmVyaWNTdGF0ZQogKTsKCkhVX1ZhbHVlIE5S
SFlfUmVsYXRpdmVGdW5jdGlvbiAoCiAgICBMaXN0PEhVX1ZhbHVlPiAgICAgICAgICAgICAgICAg
ICAgIGFyZywKICAgIEhVX1BhcnNlclN0YXRlICAgICAgICZnZW5lcmljU3RhdGUKICk7CgoKCgoK
SFVfVmFsdWUgTlJIWV9Db2xsaXNpb25GdW5jdGlvbiAoCiAgICBMaXN0PEhVX1ZhbHVlPiAgICAg
ICAgICAgICBhcmcsCiAgICBIVV9QYXJzZXJTdGF0ZSAgJiBnZW5lcmljU3RhdGUKICk7CgpUd2lu
ZSBOUkhZX1ZjaG9yRXhpc3RzRnVuY3Rpb24gKAogICAgTGlzdDxUd2luZT4gICAgICAgICAgICAg
JiBhcmcsCiAgICBIVV9QYXJzZXJTdGF0ZSAgJiBnZW5lcmljU3RhdGUKICk7CgpUd2luZSBOUkhZ
X1ZjaG9yT2JqZWN0TGlzdEZ1bmN0aW9uICgKICAgIExpc3Q8VHdpbmU+ICAgICAgICAgICAgICYg
YXJnLAogICAgSFVfUGFyc2VyU3RhdGUgICYgZ2VuZXJpY1N0YXRlCiApOwoKVHdpbmUgTlJIWV9W
Y2hvckNoYW5uZWxzRnVuY3Rpb24gKAogICAgTGlzdDxUd2luZT4gICAgICAgICAgICAgJiBhcmcs
CiAgICBIVV9QYXJzZXJTdGF0ZSAgJiBnZW5lcmljU3RhdGUKICk7CgpUd2luZSBOUkhZX1ZjaG9y
UGFyZW50RnVuY3Rpb24gKAogICAgTGlzdDxUd2luZT4gICAgICAgICAgICAgJiBhcmcsCiAgICBI
VV9QYXJzZXJTdGF0ZSAgJiBnZW5lcmljU3RhdGUKICk7CgpIVV9WYWx1ZSBOUkhZX0dldE5EQ0Z1
bmN0aW9uICgKICAgIExpc3Q8SFVfVmFsdWU+IGFyZywKICAgIEhVX1BhcnNlclN0YXRlICZnZW5l
cmljU3RhdGUKICk7CgoKIAoKCgoKCkJPT0xFQU4gTlJIWV9TZXREZWJ1Z0Zyb21Wb29kb28gKAog
ICAgY29uc3QgQk9PTEVBTiAgIHN0YXR1cwogKTsKCkJPT0xFQU4gTlJIWV9HZXREZWJ1Z0Zyb21W
b29kb28gKAogICAgdm9pZAogKTsKCkJPT0xFQU4gTlJIWV9TZXRUZXN0RnJvbVZvb2RvbyAoCiAg
ICBjb25zdCBCT09MRUFOICAgc3RhdHVzCiApOwoKQk9PTEVBTiBOUkhZX0dldFRlc3RGcm9tVm9v
ZG9vICgKICAgIHZvaWQKICk7CgpCT09MRUFOIE5SSFlfU2V0RGlzcGxheUZyb21Wb29kb28gKAog
ICAgY29uc3QgQk9PTEVBTiAgIHN0YXR1cwogKTsKCkJPT0xFQU4gTlJIWV9HZXREaXNwbGF5RnJv
bVZvb2RvbyAoCiAgICB2b2lkCiApOwoKdm9pZCBOUkhZX0dldE1heFNjcmVlbkluUGl4ZWxzICgK
ICAgIGludCAqeCwKICAgIGludCAqeQogKTsKCnZvaWQgTlJIWV9TZXRNYXhTY3JlZW5JblBpeGVs
cyAoCiAgICBjb25zdCBpbnQgICB4LAogICAgY29uc3QgaW50ICAgeQogKTsKCnZvaWQgTlJIWV9T
ZXRVcGRhdGVXb3JsZEZsYWcgKAogICAgYm9vbCBzdGF0dXMKICk7Cgpib29sIE5SSFlfR2V0VXBk
YXRlV29ybGRGbGFnICgKICAgIHZvaWQKICk7Cgp2b2lkIE5SSFlfU2V0UmVkcmF3V29ybGRGbGFn
ICgKICAgIGJvb2wgc3RhdHVzCiApOwoKYm9vbCBOUkhZX0dldFJlZHJhd1dvcmxkRmxhZyAoCiAg
ICB2b2lkCiApOwoKdm9pZCBOUkhZX1VwZGF0ZVdvcmxkU3RhdHVzRmxhZ3MgKAogICAgaW50IGZs
YWdzCiApOwoKdm9pZCBOUkhZX1NldEluQmV0YUZsYWcgKAogICAgYm9vbCBpbkJldGEKICk7Cgpi
b29sIE5SSFlfR2V0SW5CZXRhRmxhZyAoKTsKCnZvaWQgTlJIWV9TZXRQcm9ncmFtVmVyc2lvbiAo
CiAgICAgICAgY29uc3QgVHdpbmUgJnZlcnNpb24KICk7Cgpjb25zdCBjaGFyICpOUkhZX0dldFBy
b2dyYW1WZXJzaW9uICgpOwoKTGlzdDxUd2luZT4gTlJIWV9HZXRGaWxlTGlzdCAoCiAgICAgICAg
dm9pZAogKTsKCkxpc3Q8VHdpbmU+IE5SSFlfU2V0RmlsZUxpc3QgKAogICAgICAgIGNvbnN0IExp
c3Q8VHdpbmU+ICYgbmV3RmlsZUxpc3QKICk7CgpUd2luZSBOUkhZX1NldEFsbE5yaHlBbmROZWVk
bGVDb21tYW5kcyAoCiAgICBUd2luZSAgIENvbW1hbmRzVHdpbmUKICk7CgpUd2luZSBOUkhZX0dl
dEFsbE5yaHlBbmROZWVkbGVDb21tYW5kcyAoCiAgICB2b2lkCiApOwoKdm9pZCAgICBOUkhZX1Nl
dFZvb2Rvb0RhdGFDaGFuZ2VkICAgKAogICAgICAgIEJPT0xFQU4gbmV3U3RhdGUKICk7CgpCT09M
RUFOIE5SSFlfR2V0Vm9vZG9vRGF0YUNoYW5nZWQgICAoCiAgICAgICAgdm9pZAogKTsKCnZvaWQg
TlJIWV9TZXROcmh5SW5pdGlhbGl6ZWQgKAogICAgdm9pZAogKTsKCkJPT0xFQU4gTlJIWV9HZXRO
cmh5SW5pdGlhbGl6ZWQgKAogICAgdm9pZAogKTsKCnZvaWQgKk5SSFlfR2V0VHJhY2tpbmdXaXRo
RGlzcGxheUZ1bmN0aW9uICgKICAgIHZvaWQKICk7Cgp2b2lkICpOUkhZX1NldFRyYWNraW5nV2l0
aERpc3BsYXlGdW5jdGlvbiAoCiAgICB2b2lkICAgICgqdGhlRnVuYykoKQogKTsKCkJPT0xFQU4g
TlJIWV9DYWxsVHJhY2tpbmdXaXRoRGlzcGxheUZ1bmN0aW9uICgKICAgIHZvaWQKICk7Cgp2b2lk
ICpOUkhZX0dldEludGVyZmFjZUZ1bmN0aW9uICgKICAgIHZvaWQKICk7Cgp2b2lkICpOUkhZX1Nl
dEludGVyZmFjZUZ1bmN0aW9uICgKICAgIEJPT0xFQU4gKCp0aGVGdW5jKSgpCiApOwoKQk9PTEVB
TiBOUkhZX0NhbGxJbnRlcmZhY2VGdW5jdGlvbiAoCiAgICB2b2lkCiApOwoKdm9pZCAqTlJIWV9H
ZXRQcm9jZXNzVUlGdW5jdGlvbiAoCiAgICB2b2lkCiApOwoKdm9pZCAqTlJIWV9TZXRQcm9jZXNz
VUlGdW5jdGlvbiAoCiAgICBCT09MRUFOICgqdGhlRnVuYykoKQogKTsKCkJPT0xFQU4gTlJIWV9D
YWxsUHJvY2Vzc1VJRnVuY3Rpb24gKAogICAgdm9pZAogKTsKCnZvaWQgKk5SSFlfR2V0U3VzcGVu
ZEZ1bmN0aW9uICgKICAgIHZvaWQKICk7Cgp2b2lkICpOUkhZX1NldFN1c3BlbmRGdW5jdGlvbiAo
CiAgICBCT09MRUFOICgqdGhlRnVuYykoQk9PTEVBTikKICk7CgpCT09MRUFOIE5SSFlfQ2FsbFN1
c3BlbmRGdW5jdGlvbiAoCiAgICBCT09MRUFOIHN1c3BlbmRGbGFnCiApOwoKdm9pZCBOUkhZX1Nl
dFRyYWNrSW50ZXJmYWNlQnVzeUZ1bmN0aW9uICgKICAgIEJPT0xFQU4gICAgKCp0aGVGdW5jKShp
bnQsIGZsb2F0LCBjb25zdCBjaGFyICosIGNsYXNzIE5SSFlfY2xhc3NUcmFjayAqKQogKTsKCkJP
T0xFQU4gTlJIWV9DYWxsVHJhY2tJbnRlcmZhY2VCdXN5RnVuY3Rpb24gKAogICAgaW50IHBhcm0s
CiAgICBmbG9hdCB2LCAKICAgIGNvbnN0IGNoYXIgKm1zZywKICAgIGNsYXNzIE5SSFlfY2xhc3NU
cmFjayogdHJhY2sKICk7Cgp2b2lkIE5SSFlfU2V0VHJhY2tSZWRyYXdXb3JsZCAoCiAgICBCT09M
RUFOICAgICgqdGhlRnVuYykodm9pZCkKICk7Cgp2b2lkIE5SSFlfQ2FsbFRyYWNrUmVkcmF3V29y
bGQgKAogICAgdm9pZAogKTsKCnZvaWQgKk5SSFlfR2V0SW50ZXJmYWNlQnVzeUZ1bmN0aW9uICgK
ICAgIHZvaWQKICk7Cgp2b2lkICpOUkhZX1NldEludGVyZmFjZUJ1c3lGdW5jdGlvbiAoCiAgICB2
b2lkICAgICgqdGhlRnVuYykoaW50LCBjb25zdCBjaGFyICopCiApOwoKdm9pZCBOUkhZX0NhbGxJ
bnRlcmZhY2VCdXN5RnVuY3Rpb24gKAogICAgaW50IHBhcm0sCiAgICBjb25zdCBjaGFyICptc2cK
ICk7Cgp2b2lkICpOUkhZX0dldEN0cmxDSGFuZGxlciAoCiAgICB2b2lkCiApOwoKdm9pZCAqTlJI
WV9TZXRDdHJsQ0hhbmRsZXIgKAogICAgdm9pZCAgICAoKnRoZUhhbmRsZXIpKHZvaWQpCiApOwoK
dm9pZCBOUkhZX0NhbGxDdHJsQ0hhbmRsZXIgKAogICAgdm9pZAogKTsKCnZvaWQgTlJIWV9DbGVh
clVzZXJJbnRlcmZhY2VGbGFncyAoCiAgICB2b2lkCiApOwoKdm9pZCBOUkhZX1NldFVzZXJJbnRl
cmZhY2VGbGFnICgKICAgIHVuc2lnbmVkIG5ld0ZsYWdzCiApOwoKdm9pZCBOUkhZX1Jlc2V0VXNl
ckludGVyZmFjZUZsYWcgKAogICAgdW5zaWduZWQgb2Jzb2xldGVGbGFncwogKTsKCnVuc2lnbmVk
IE5SSFlfR2V0VXNlckludGVyZmFjZUZsYWcgKAogICAgdm9pZAogKTsKCnZvaWQgTlJIWV9TZXRT
dGFnZUNvdW50ICgKICAgIGludCBudW1TdGFnZXMKICk7Cgp2b2lkIE5SSFlfQWRkU3RhZ2VDb3Vu
dCAoCiAgICBpbnQgbnVtU3RhZ2VzCiApOwoKQk9PTEVBTiBOUkhZX0NoZWNrU3RhZ2VMaW1pdCAo
CiAgICBpbnQgZGVsdGEKICk7Cgp2b2lkICAgIE5SSFlfU2V0VHdlbHZlRmxkU3RhdGUgICgKICAg
ICAgICBCT09MRUFOIG5ld1N0YXRlCiApOwoKdm9pZCAgICBOUkhZX1NldFR3ZWx2ZUZsZEluT3Zl
cmxheSAgKAogICAgICAgIEJPT0xFQU4gZmxhZwogKTsKCkJPT0xFQU4gICAgTlJIWV9TZXRUd2Vs
dmVGbGRTdHlsZSAgICgKICAgICAgICBjb25zdCBUd2luZSAmbmV3U3R5bGUKICk7CgpCT09MRUFO
ICAgIE5SSFlfU2V0VHdlbHZlRmxkRmlsZW5hbWUgICAgKAogICAgICAgIGNvbnN0IFR3aW5lICZm
aWxlbmFtZQogKTsKCnZvaWQgICAgTlJIWV9TZXRUd2VsdmVGbGRDb2xvciAgKAogICAgICAgIGZs
b2F0ICpuZXdDb2xvcgogKTsKCkJPT0xFQU4gTlJIWV9HZXRUd2VsdmVGbGRTdGF0ZSAgKAogICAg
ICAgIHZvaWQKICk7CgpCT09MRUFOIE5SSFlfR2V0VHdlbHZlRmxkSW5PdmVybGF5ICAoCiAgICAg
ICAgdm9pZAogKTsKClR3aW5lICAgTlJIWV9HZXRUd2VsdmVGbGRTdHlsZSAgKAogICAgICAgIHZv
aWQKICk7CgpUd2luZSAgIE5SSFlfR2V0VHdlbHZlRmxkRmlsZW5hbWUgICAoCiAgICAgICAgdm9p
ZAogKTsKCmZsb2F0ICpOUkhZX0dldFR3ZWx2ZUZsZENvbG9yICgpOwoKdm9pZCAgTlJIWV9EZXNj
cmliZVR3ZWx2ZWZsZCAoCiAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJmRlc2MK
ICk7CgpCT09MRUFOIE5SSFlfTG9hZFR3ZWx2ZUZsZFNoYXBlICgKICAgICAgICAgICAgY29uc3Qg
VHdpbmUgJmZpbGVuYW1lCiApOwoKY2xhc3MgU2hhcGUgKk5SSFlfR2V0VHdlbHZlRmxkU2hhcGUg
KCk7Cgp2b2lkICAgIE5SSFlfU2V0R3JvdW5kU3RhdGUgICAgICgKICAgICAgICBCT09MRUFOIG5l
d1N0YXRlCiApOwoKQk9PTEVBTiAgICBOUkhZX0dldEdyb3VuZFN0YXRlICAoCiAgICAgICAgdm9p
ZAogKTsKCnZvaWQgTlJIWV9TZXRBdXRvS2V5U3RhdGUgKAoJCQkgIEJPT0xFQU4gbmV3U3RhdGUK
ICk7CgpCT09MRUFOIE5SSFlfR2V0QXV0b0tleVN0YXRlICgKCQkJICAgICB2b2lkCiApOwoKdm9p
ZCAgICBOUkhZX1NldENhY2hlSW1hZ2VzU3RhdGUgICAgKAogICAgICAgIEJPT0xFQU4gbmV3U3Rh
dGUKICk7CgpCT09MRUFOICAgIE5SSFlfR2V0Q2FjaGVJbWFnZXNTdGF0ZSAgICAgKAogICAgICAg
IHZvaWQKICk7Cgp2b2lkICAgIE5SSFlfU2V0Q2FsY0R5bmFtaWNzU3RhdGUgICAgKAogICAgICAg
IEJPT0xFQU4gbmV3U3RhdGUKICk7CgpCT09MRUFOICAgIE5SSFlfR2V0Q2FsY0R5bmFtaWNzU3Rh
dGUgICAgICgKICAgICAgICB2b2lkCiApOwoKdm9pZCAgICBOUkhZX1NldEdob3N0U3RhdGUgICgK
ICAgICAgICBCT09MRUFOIG5ld1N0YXRlCiApOwoKdm9pZCAgICBOUkhZX1RvdWNoR2hvc3RTdGF0
ZSAgKCk7CgpCT09MRUFOIE5SSFlfR2V0R2hvc3RTdGF0ZSAgKAogICAgICAgIHZvaWQKICk7Cgp2
b2lkICAgIE5SSFlfU2V0R2hvc3RJbk92ZXJsYXkgICgKICAgICAgICBCT09MRUFOIGluT3Zlcmxh
eQogKTsKCkJPT0xFQU4gTlJIWV9HZXRHaG9zdEluT3ZlcmxheSAgKAogICAgICAgIHZvaWQKICk7
Cgp2b2lkICAgIE5SSFlfU2V0R2hvc3RDb2xvciAgICAgICgKICAgICAgICBmbG9hdCBuZXdSZWQs
CiAgICAgICAgZmxvYXQgbmV3R3JlZW4sCiAgICAgICAgZmxvYXQgbmV3Qmx1ZSwKICAgICAgICBm
bG9hdCBuZXdJbnRlbnMKICk7CgpmbG9hdCAgICAqTlJIWV9HZXRHaG9zdENvbG9yICAgICgKICAg
ICAgICB2b2lkCiApOwoKdm9pZCAgICBOUkhZX1NldFdyaXRlRmlsZW5hbWUgKAogICAgICAgIGNv
bnN0IGNoYXIgKmZpbGVuYW1lCiApOwoKdm9pZCAgICBOUkhZX1NldFdyaXRlT3B0aW9uICAgICAg
KAogICAgICAgIGNvbnN0IFR3aW5lICZuZXdPcHRpb24KICk7Cgp2b2lkICAgIE5SSFlfU2V0Rmls
ZVdyaXRlU3VjY2VzcyAoCiAgICAgICAgQk9PTEVBTiBzdWNjZXNzCiApOwoKdm9pZCAgICBOUkhZ
X1NldEluVHJhY2tDb21tYW5kICgKICAgICAgICBCT09MRUFOIHN0YXR1cwogKTsKCnZvaWQgICAg
TlJIWV9TZXRJblJlYWRDb21tYW5kICgKICAgICAgICBCT09MRUFOIHN0YXR1cwogKTsKCnZvaWQg
ICAgTlJIWV9TZXRJbldyaXRlQ29tbWFuZCAoCiAgICAgICAgQk9PTEVBTiBzdGF0dXMKICk7Cgpj
aGFyICpOUkhZX0dldFdyaXRlRmlsZW5hbWUgKAogICAgICAgIHZvaWQKICk7CgpUd2luZSAgIE5S
SFlfR2V0V3JpdGVPcHRpb24gICAgICAgICAgKAogICAgICAgIHZvaWQKICk7CgpCT09MRUFOIE5S
SFlfR2V0RmlsZVdyaXRlU3VjY2VzcyAoCiAgICAgICAgdm9pZAogKTsKCkJPT0xFQU4gTlJIWV9J
c0luVHJhY2tDb21tYW5kICgKICAgICAgICB2b2lkCiApOwoKQk9PTEVBTiBOUkhZX0lzSW5SZWFk
Q29tbWFuZCAoCiAgICAgICAgdm9pZAogKTsKCkJPT0xFQU4gTlJIWV9Jc0luV3JpdGVDb21tYW5k
ICgKICAgICAgICB2b2lkCiApOwoKVHdpbmUgTlJIWV9HZXRMYXN0UmVhZEZpbGVOYW1lICgKICk7
CgppbnQgTlJIWV9UZXh0Q29tbWFuZCAoCiAgICAgICAgY29uc3QgVHdpbmUgJmNvbW1hbmQKICk7
Cgp2b2lkIE5SSFlfVGV4dENvbW1hbmRTdHJlYW0gKAogICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2Ny
aWJlU3RyZWFtICZzCiApOwoKSU5UIE5SSFlfR2V0TWF4VXNlckRlZmluZUJ1dHRvbnMgKAogICAg
dm9pZAogKTsKCnZvaWQgICAgTlJIWV9TZXRVc2VyQnV0dG9uICAgICAgICAoCiAgICAgICAgaW50
IGluZGV4LCAKICAgICAgICBjb25zdCBUd2luZSAmbGFiZWwsIAogICAgICAgIGNvbnN0IFR3aW5l
ICZjb21tYW5kCiApOwoKdm9pZCAgICBOUkhZX1NldFVzZXJCdXR0b25MYWJlbCAoCiAgICAgICAg
aW50IGluZGV4LCAKICAgICAgICBjb25zdCBUd2luZSAmbGFiZWwKICk7Cgp2b2lkICAgIE5SSFlf
U2V0VXNlckJ1dHRvbkNvbW1hbmQgICgKICAgICAgICBpbnQgaW5kZXgsIAogICAgICAgIGNvbnN0
IFR3aW5lICZjb21tYW5kCiApOwoKdm9pZCAgICBOUkhZX1NldFVzZXJCdXR0b25Db2xvciAgKAog
ICAgICAgIGludCBpbmRleCwgCiAgICAgICAgZmxvYXQgciwgCiAgICAgICAgZmxvYXQgZywgCiAg
ICAgICAgZmxvYXQgYiwKICAgICAgICBmbG9hdCBpbnRlbnMKICk7Cgp2b2lkIE5SSFlfUmVzZXRV
c2VyQnV0dG9uICgKICAgIGludCBpbmRleAogKTsKCkJPT0xFQU4gTlJIWV9Jc1VzZXJCdXR0b25E
ZWZpbmVkICAoCiAgICAgICAgaW50IGluZGV4CiApOwoKVHdpbmUgICBOUkhZX0dldFVzZXJCdXR0
b25MYWJlbCAgICgKICAgICAgICBpbnQgaW5kZXgKICk7CgpUd2luZSAgIE5SSFlfR2V0VXNlckJ1
dHRvbkNvbW1hbmQgKAogICAgICAgIGludCBpbmRleAogKTsKCnZvaWQgICAgTlJIWV9HZXRVc2Vy
QnV0dG9uQ29sb3IgICgKICAgICAgICBpbnQgaW5kZXgsIAogICAgICAgIGZsb2F0ICpyLCAKICAg
ICAgICBmbG9hdCAqZywgCiAgICAgICAgZmxvYXQgKmIsCiAgICAgICAgZmxvYXQgKmludGVucwog
KTsKCnZvaWQgICAgTlJIWV9TZXRVc2VyQnV0dG9uV2lsbENhbGwgKAogICAgICAgIGludCBpbmRl
eAogKTsKCmludCAgICAgTlJIWV9HZXRVc2VyQnV0dG9uV2lsbENhbGwgKCk7Cgp2b2lkICAgIE5S
SFlfRXhlY3V0ZVVzZXJCdXR0b25XaWxsQ2FsbCAoCiApOwoKaW50IE5SSFlfR2V0U2hlbGZJbmRl
eCAoCiAgICAgICAgY29uc3QgVHdpbmUgJmxhYmVsCiApOwoKQk9PTEVBTiBOUkhZX0NyZWF0ZVNo
ZWxmICgKICAgICAgICAgICAgY29uc3QgVHdpbmUgJmxhYmVsCiApOwoKaW50IE5SSFlfRGVsZXRl
U2hlbGYgKAogICAgICAgICAgICBjb25zdCBUd2luZSAmbGFiZWwKICk7CgpCT09MRUFOIE5SSFlf
U2V0Q3VycmVudFNoZWxmICgKICAgICAgICAgICAgY29uc3QgVHdpbmUgJmxhYmVsCiApOwoKY29u
c3QgVHdpbmUgJk5SSFlfR2V0Q3VycmVudFNoZWxmICgpOwoKaW50IE5SSFlfR2V0TnVtYmVyU2hl
bHZlcyAoKTsKCmNvbnN0IFR3aW5lICZOUkhZX0dldFNoZWxmTGFiZWwgKAogICAgICAgICAgICBp
bnQgc2hlbGZJbmRleAogKTsKCmludCBOUkhZX0dldE1heFNoZWxmQnV0dG9ucyAoKTsKCmludCBO
UkhZX0ZpbmRTaGVsZkJ1dHRvbiAoCiAgICAgICAgaW50IHNoZWxmSW5kZXgsCiAgICAgICAgY29u
c3QgVHdpbmUgJmxhYmVsCiApOwoKaW50IE5SSFlfQ3JlYXRlU2hlbGZCdXR0b25MYWJlbCAoCiAg
ICAgICAgaW50IHNoZWxmSW5kZXgsCiAgICAgICAgaW50IGJ1dHRvbkluZGV4LAogICAgICAgIGNv
bnN0IFR3aW5lICZsYWJlbAogKTsKCmNvbnN0IFR3aW5lICZOUkhZX0dldFNoZWxmQnV0dG9uTGFi
ZWwgKAogICAgICAgIGludCBzaGVsZkluZGV4LAogICAgICAgIGludCBidXR0b25JbmRleAogKTsK
CkJPT0xFQU4gTlJIWV9TZXRTaGVsZkJ1dHRvbkNvbW1hbmQgKAogICAgICAgIGludCBzaGVsZklu
ZGV4LAogICAgICAgIGludCBidXR0b25JbmRleCwKICAgICAgICBjb25zdCBUd2luZSAmY29tbWFu
ZAogKTsKCmNvbnN0IFR3aW5lICZOUkhZX0dldFNoZWxmQnV0dG9uQ29tbWFuZCAoCiAgICAgICAg
aW50IHNoZWxmSW5kZXgsCiAgICAgICAgaW50IGJ1dHRvbkluZGV4CiApOwoKQk9PTEVBTiBOUkhZ
X0NsZWFyU2hlbGZCdXR0b24gKAogICAgICAgIGludCBzaGVsZkluZGV4LAogICAgICAgIGludCBi
dXR0b25JbmRleAogKTsKCnZvaWQgICAgTlJIWV9TZXRTaGVsZkJ1dHRvbldpbGxDYWxsICgKICAg
ICAgICBjb25zdCBUd2luZSAmY29tbWFuZAogKTsKCmNvbnN0IFR3aW5lICZOUkhZX0dldFNoZWxm
QnV0dG9uV2lsbENhbGwgKCk7Cgp2b2lkICAgIE5SSFlfRXhlY3V0ZVNoZWxmQnV0dG9uV2lsbENh
bGwgKCk7Cgp2b2lkIE5SSFlfU2V0TG9vcFN0YXR1cyAoCiAgICAgICAgQk9PTEVBTiBzdGF0dXMK
ICk7CgpCT09MRUFOIE5SSFlfR2V0TG9vcFN0YXR1cyAoCiAgICAgICAgdm9pZAogKTsKCnZvaWQg
TlJIWV9TZXRJbWFnZUNhY2hlTGltaXQgKAogICAgICAgIGludCBsaW1pdAogKTsKCmludCBOUkhZ
X0dldEltYWdlQ2FjaGVMaW1pdCAoCiAgICAgICAgdm9pZAogKTsKCnZvaWQgTlJIWV9TZXRMb29w
RGVjb3VwbGVTd2FwYnVmICgKICAgICAgICBCT09MRUFOIHN0YXR1cwogKTsKCkJPT0xFQU4gTlJI
WV9HZXRMb29wRGVjb3VwbGVTd2FwYnVmICgKICAgICAgICB2b2lkCiApOwoKaW50IE5SSFlfU2V0
U2xpY2VzICgKICAgICAgICBpbnQgc2xpY2VzCiApOwoKaW50IE5SSFlfR2V0U2xpY2VzICgKCXZv
aWQKICk7CgpjaGFyIE5SSFlfU2V0U2h1dHRlciAoCiAgICAgICAgZmxvYXQgbWluLAogICAgICAg
IGZsb2F0IG1heAogKTsKCnZvaWQgTlJIWV9HZXRTaHV0dGVyICgKICAgICAgICBmbG9hdCAmbWlu
LAogICAgICAgIGZsb2F0ICZtYXgKICk7Cgp2b2lkIE5SSFlfR2V0TW90aW9uQmx1clBhcm1zICgK
ICAgICAgICBmbG9hdCAmbWluLAogICAgICAgIGZsb2F0ICZtYXgsCiAgICAgICAgaW50ICAgJm5z
bGljZXMKICk7Cgp2b2lkIE5SSFlfU2V0RnVsbEV4aXQgKAogICAgICAgIEJPT0xFQU4gc3RhdHVz
CiApOwoKQk9PTEVBTiBOUkhZX0dldEZ1bGxFeGl0ICgKICAgICAgICB2b2lkCiApOwoKZmxvYXQg
TlJIWV9HZXRUcmFja0ljb25JbnRlbnNpdHkgKAogKTsKCnZvaWQgIE5SSFlfU2V0VHJhY2tJY29u
SW50ZW5zaXR5ICgKICAgIGZsb2F0IGljb25JbnRlbnNpdHkKICk7CgpCT09MRUFOIE5SSFlfR2V0
VHJhY2tTaG93UGF0aHMgKAogKTsKCnZvaWQgIE5SSFlfU2V0VHJhY2tTaG93UGF0aHMgKAogICAg
Qk9PTEVBTiBzaG93UGF0aHMKICk7Cgp2b2lkICBOUkhZX1NldFRyYWNrU2hvd0FsbFBhdGhzICgK
ICAgIEJPT0xFQU4gc2hvd0FsbFBhdGhzCiApOwoKQk9PTEVBTiBOUkhZX0dldFRyYWNrU2hvd0Fs
bFBhdGhzICgKICk7Cgp2b2lkICBOUkhZX1NldFRyYWNrU2hvd0xhYmVscyAoCiAgICBCT09MRUFO
IHNob3dMYWJlbHMKICk7CgpCT09MRUFOIE5SSFlfR2V0VHJhY2tTaG93TGFiZWxzICgKICk7Cgp2
b2lkICBOUkhZX1NldFRyYWNrQ2VudGVyICgKICAgIEJPT0xFQU4gY2VudGVyCiApOwoKQk9PTEVB
TiBOUkhZX0dldFRyYWNrQ2VudGVyICgKICk7Cgp2b2lkICBOUkhZX1NldFRyYWNrQ3JvcE1hcCAo
CiAgICBCT09MRUFOIGNyb3BNYXAKICk7CgpCT09MRUFOIE5SSFlfR2V0VHJhY2tDcm9wTWFwICgK
ICk7Cgp2b2lkICBOUkhZX1NldFRyYWNrQ3VycmVudCAoCiAgICBUd2luZSYgdHJhY2tDdXJyZW50
CiApOwoKVHdpbmUgTlJIWV9HZXRUcmFja0N1cnJlbnQgKAogKTsKCkJPT0xFQU4gTlJIWV9HZXRI
YXJkd2FyZUlEICgKICAgICAgICB2b2lkCiApOwoKdm9pZCBOUkhZX1NldEhhcmR3YXJlSUQgKAog
ICAgdm9pZAogKTsKCgoKCgp2b2lkICAgICpOUkhZX0dldEN1cnJlbnRDb250ZXh0ICgKICAgICAg
ICB2b2lkCiApOwoKdm9pZCAgICBOUkhZX1NldEN1cnJlbnRDb250ZXh0ICgKICAgIHZvaWQgICAg
KmNvbnRleHQKICk7CgpCT09MRUFOIE5SSFlfU2V0U3RlcmVvRmxpcEZsYWcgKAogICAgQk9PTEVB
TiBzdGF0dXMKICk7CgpCT09MRUFOIE5SSFlfR2V0U3RlcmVvRmxpcEZsYWcgKAogICAgdm9pZAog
KTsKCklOVCBOUkhZX1NldFN0ZXJlb1NwbGl0RmxhZyAoCiAgICBpbnQgc3RhdHVzCiApOwoKSU5U
IE5SSFlfR2V0U3RlcmVvU3BsaXRGbGFnICgKICAgIHZvaWQKICk7CgpmbG9hdCBOUkhZX1NldFN0
ZXJlb0hvckJsYW5raW5nICgKICAgIGZsb2F0ICAgIHZhbHVlCiApOwoKZmxvYXQgTlJIWV9HZXRT
dGVyZW9Ib3JCbGFua2luZyAoCiAgICB2b2lkCiApOwoKZmxvYXQgTlJIWV9HZXRTdGVyZW9Ib3JC
bGFua2luZ0RlZmF1bHQgKAogICAgdm9pZAogKTsKCmZsb2F0IE5SSFlfU2V0U3RlcmVvVmVyQmxh
bmtpbmcgKAogICAgZmxvYXQgICAgdmFsdWUKICk7CgpmbG9hdCBOUkhZX0dldFN0ZXJlb1ZlckJs
YW5raW5nICgKICAgIHZvaWQKICk7CgpmbG9hdCBOUkhZX0dldFN0ZXJlb1ZlckJsYW5raW5nRGVm
YXVsdCAoCiAgICB2b2lkCiApOwoKQk9PTEVBTiBOUkhZX1NldFN0ZXJlb1VzZU9uZVR3ZW50eUN5
Y2xlICgKICAgIEJPT0xFQU4gc3RhdHVzCiApOwoKQk9PTEVBTiBOUkhZX0dldFN0ZXJlb1VzZU9u
ZVR3ZW50eUN5Y2xlICgKICAgIHZvaWQKICk7CgpCT09MRUFOIE5SSFlfU2V0U3RlcmVvTW90aWZX
aW5kb3dCb3JkZXIgKAogICAgQk9PTEVBTiBzdGF0dXMKICk7CgpCT09MRUFOIE5SSFlfR2V0U3Rl
cmVvTW90aWZXaW5kb3dCb3JkZXIgKAogICAgdm9pZAogKTsKCkJPT0xFQU4gTlJIWV9TZXRTdGVy
ZW9TaG93TFJMYWJlbHMgKAogICAgQk9PTEVBTiBzdGF0dXMKICk7CgpCT09MRUFOIE5SSFlfR2V0
U3RlcmVvU2hvd0xSTGFiZWxzICgKICAgIHZvaWQKICk7CgpCT09MRUFOIE5SSFlfR2V0QWxwaGFi
ZXRpemVVc2FnZSAoCiAgICB2b2lkCiApOwoKQk9PTEVBTiBOUkhZX1NldEFscGhhYmV0aXplVXNh
Z2UgKAogICAgQk9PTEVBTiAgICAgc3RhdHVzCiApOwoKQk9PTEVBTiBOUkhZX0dldFNwb3RMaXRl
RGlzcGxheUFzU29saWQgKAogICAgdm9pZAogKTsKCkJPT0xFQU4gTlJIWV9TZXRTcG90TGl0ZURp
c3BsYXlBc1NvbGlkICgKICAgIEJPT0xFQU4gICAgIHN0YXR1cwogKTsKCkJPT0xFQU4gTlJIWV9H
ZXRTcG90TGl0ZUZvY3VzVXNlTWF4ICgKICAgIHZvaWQKICk7CgpCT09MRUFOIE5SSFlfU2V0U3Bv
dExpdGVGb2N1c1VzZU1heCAoCiAgICBCT09MRUFOICAgICBzdGF0dXMKICk7CgpCT09MRUFOIE5S
SFlfR2V0TG9ja2VkRm9yUmVhZCAoCiAgICB2b2lkCiApOwoKQk9PTEVBTiBOUkhZX1NldExvY2tl
ZEZvclJlYWQgKAogICAgQk9PTEVBTiBzdGF0dXMKICk7CgpCT09MRUFOIE5SSFlfR2V0U2hvd0lu
dGVybmFsT25seU9wdGlvbnMgKAogICAgdm9pZAogKTsKCkJPT0xFQU4gTlJIWV9TZXRTaG93SW50
ZXJuYWxPbmx5T3B0aW9ucyAoCiAgICBCT09MRUFOICAgICBzdGF0dXMKICk7Cgp2b2lkIE5SSFlf
U2V0RW52QyAoCiAgICBjb25zdCBUd2luZSAmY2hhbm5lbAogKTsKClR3aW5lIE5SSFlfR2V0RW52
QyAoCiAgICB2b2lkCiApOwoKdm9pZCBOUkhZX1NldEVudkYgKAogICAgZmxvYXQgZgogKTsKCmZs
b2F0IE5SSFlfR2V0RW52RiAoCiAgICB2b2lkCiApOwoKdm9pZCBOUkhZX1NldEVudkZzICgKICAg
IGZsb2F0IGZzCiApOwoKZmxvYXQgTlJIWV9HZXRFbnZGcyAoCiAgICB2b2lkCiApOwoKdm9pZCBO
UkhZX1NldEVudkZlICgKICAgIGZsb2F0IGZlCiApOwoKZmxvYXQgTlJIWV9HZXRFbnZGZSAoCiAg
ICB2b2lkCiApOwoKdm9pZCBOUkhZX1NldEVudkZpbmMgKAogICAgZmxvYXQgZmluYwogKTsKCmZs
b2F0IE5SSFlfR2V0RW52RmluYyAoCiAgICB2b2lkCiApOwoKdm9pZCBOUkhZX1NldEVudkZtaW4g
KAogICAgZmxvYXQgZm1pbgogKTsKCmZsb2F0IE5SSFlfR2V0RW52Rm1pbiAoCiAgICB2b2lkCiAp
OwoKdm9pZCBOUkhZX1NldEVudkZtYXggKAogICAgZmxvYXQgZm1heAogKTsKCmZsb2F0IE5SSFlf
R2V0RW52Rm1heCAoCiAgICB2b2lkCiApOwoKdm9pZCBOUkhZX1NldEVudk1mcyAoCiAgICBmbG9h
dCBtZnMKICk7CgpmbG9hdCBOUkhZX0dldEVudk1mcyAoCiAgICB2b2lkCiApOwoKdm9pZCBOUkhZ
X1NldEVudk1mZSAoCiAgICBmbG9hdCBtZmUKICk7CgpmbG9hdCBOUkhZX0dldEVudk1mZSAoCiAg
ICB2b2lkCiApOwoKdm9pZCBOUkhZX1NldEVudkxhc3RGaWxlUmVhZCAoCiAgICBjb25zdCBUd2lu
ZSAmbGFzdEZpbGVSZWFkCiApOwoKVHdpbmUgTlJIWV9HZXRFbnZMYXN0RmlsZVJlYWQgKAogICAg
dm9pZAogKTsKCnZvaWQgTlJIWV9TZXRPblNvdW5kSW50ZXJmYWNlRnVuY3Rpb24gKAogICAgQk9P
TEVBTiAoKnRoZUZ1bmMpKHZvaWQgKnNvdW5kKQogKTsKCkJPT0xFQU4gTlJIWV9DYWxsT25Tb3Vu
ZEludGVyZmFjZUZ1bmN0aW9uICgKICAgIHZvaWQgKnNvdW5kCiApOwoKdm9pZCBOUkhZX1NldE9m
ZlNvdW5kSW50ZXJmYWNlRnVuY3Rpb24gKAogICAgQk9PTEVBTiAoKnRoZUZ1bmMpKHZvaWQgKnNv
dW5kKQogKTsKCkJPT0xFQU4gTlJIWV9DYWxsT2ZmU291bmRJbnRlcmZhY2VGdW5jdGlvbiAoCiAg
ICB2b2lkICpzb3VuZAogKTsKCnZvaWQgTlJIWV9TZXRBdGV4aXRTb3VuZEludGVyZmFjZUZ1bmN0
aW9uICgKICAgIEJPT0xFQU4gKCp0aGVGdW5jKSh2b2lkICpzb3VuZCkKICk7CgpCT09MRUFOIE5S
SFlfQ2FsbEF0ZXhpdFNvdW5kSW50ZXJmYWNlRnVuY3Rpb24gKAogICAgdm9pZCAqc291bmQKICk7
Cgp2b2lkIE5SSFlfU2V0RGVzdHJ1Y3RvclNvdW5kSW50ZXJmYWNlRnVuY3Rpb24gKAogICAgQk9P
TEVBTiAoKnRoZUZ1bmMpKHZvaWQgKnNvdW5kKQogKTsKCkJPT0xFQU4gTlJIWV9DYWxsRGVzdHJ1
Y3RvclNvdW5kSW50ZXJmYWNlRnVuY3Rpb24gKAogICAgdm9pZCAqc291bmQKICk7Cgp2b2lkIE5S
SFlfSW52YWxpZGF0ZUZyYW5nZSAoCiAgICBmbG9hdCBmc3RhcnQsCiAgICBmbG9hdCBmZW5kLAog
ICAgZmxvYXQgZmluYwogKTsKCnZvaWQgTlJIWV9JbnZhbGlkYXRlRnJhbmdlICgKICAgIHZvaWQg
KnBvcnQsCiAgICBmbG9hdCBmc3RhcnQsCiAgICBmbG9hdCBmZW5kLAogICAgZmxvYXQgZmluYwog
KTsKCkJPT0xFQU4gTlJIWV9Jc0ludmFsaWRhdGVkRnJhbmdlICgpOwoKQk9PTEVBTiBOUkhZX0dl
dEludmFsaWRhdGVkRnJhbmdlICgKICAgIHZvaWQgICoqY3VyUG9ydCwKICAgIGZsb2F0ICpmc3Rh
cnQsIAogICAgZmxvYXQgKmZlbmQsCiAgICBmbG9hdCAqZmluYwogKTsKCmNoYXIgKipOUkhZX0dl
dFZhbGlkRXh0ZW5zaW9ucyAoCiAgICAgICAgdm9pZCAKICk7CgppbnQgTlJIWV9HZXROdW1iZXJF
eHRlbnNpb25zICgKICAgICAgICB2b2lkIAogKTsKCnZvaWQgTlJIWV9TZXRNYW5pcHVsYXRvclNt
b290aG5lc3MgKAogICAgICAgIGZsb2F0IGYKICk7CgpmbG9hdCBOUkhZX0dldE1hbmlwdWxhdG9y
U21vb3RobmVzcyAoKTsKCnZvaWQgICAgIE5SSFlfU3BsaXREb3RGaWxlTmFtZSAoCiAgICAgICAg
ICAgIENIQVIgICAgKmluLAogICAgICAgICAgICBDSEFSICAgICpiYXNlLAogICAgICAgICAgICBJ
TlQgICAgICpmcmFtZSwKICAgICAgICAgICAgQ0hBUiAgICAqZXh0bgogKTsKCkJPT0xFQU4gTlJI
WV9HZXRTbGlkZXIgKAogICAgdm9pZAogKTsKCnZvaWQgTlJIWV9TZXRTbGlkZXIgKAogICAgQk9P
TEVBTiBzdGF0ZQogKTsKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgp2b2lkICBOUkhZX0Vz
dGFibGlzaFBvcnRHcmFwaGljcyAoCgkJCQkgQk9PTEVBTiBmbGFnLAoJCQkJIGNvbnN0IGNoYXIq
IG5hbWUKICk7Cgp2b2lkIE5SSFlfRXN0YWJsaXNoQ2FtZXJhR3JhcGhpY3MgKAogICAgTlJIWV9j
bGFzc0NhbWVyYSAqY2FtZXJhCiApOwoKdm9pZCBOUkhZX1NldE1hdGVyaWFsICgKICAgIE5SSFlf
Y2xhc3NNYXRlcmlhbCAqbXRsUHRyLAogICAgZmxvYXQgb3BhY2l0eQogKTsKCgoKCgoKCgoKdm9p
ZCBOUkhZX0dMSW5mb01hdHJpeCAoCiAgICB2b2lkIAogKTsKCgoKCgppbnQgTlJIWV9HZXRNb25p
dG9yICgpOwoKdm9pZCBOUkhZX1NldE1vbml0b3IgKAogICAgaW50IGZyYW1lUmF0ZQogKTsKCgoK
Cgp2b2lkIE5SSFlfU2V0SW52ZXJzZUNhbWVyYU1hdHJpeCAoCiAgICBjb25zdCBNX01hdHJpeCAm
bWF0CiApOwoKY29uc3QgTV9NYXRyaXggJk5SSFlfR2V0SW52ZXJzZUNhbWVyYU1hdHJpeCAoCiAg
ICB2b2lkCiApOwoKCgoKCgogCgoKCgoKCgoKCgogCgoKIAoKaW50IE5SSFlfSW5pdGlhbGl6ZSAo
CiAgICB2b2lkCiApOwoKdm9pZCAgTlJIWV9Jbml0aWFsaXplQ2hhbkZ1bmN0aW9ucyAoKTsKCnZv
aWQgIE5SSFlfSW5pdGlhbGl6ZVZjaG9yRnVuY3Rpb25zICgpOwoKCiAKCgoKCgoKCkJPT0xFQU4g
TlJIWV9SZWFkV3Jlbk10bCAoCiAgICBORVRGSUxFX0ZJTEUgICAgKmZwdHIsCiAgICBUd2luZSAg
ICAgICAgICAgZmlsZW5hbWUKICk7CgoKIAoKQk9PTEVBTiBOUkhZX1JlYWRXcmVuTWFwICgKICAg
IE5FVEZJTEVfRklMRSAgICAqZnB0ciwKICAgIFR3aW5lICAgICAgICAgICBmaWxlbmFtZQogKTsK
CgogCgp2b2lkICBOUkhZX0xpc3RIaWVyYXJjaHkgKAogICAgRklMRSAgICAgICAgICAgICpmcCwK
ICAgIHZvaWQgICAgICAgICAgICAgKipnZW5lcmljUHRycywKICAgIElOVCAgICAgICAgICAgICBu
dW1iZXJHZW5lcmljUHRycywKICAgIElOVCAgICAgICAgICAgICBhbGxGbGFnLAogICAgSU5UICAg
ICAgICAgICAgIGNoYW5GbGFnLAogICAgSU5UICAgICAgICAgICAgIGRlYnVnRmxhZwogKTsKCgog
CgpJTlQgTlJIWV9SZWFkVmRhICgKICAgIE5FVEZJTEVfRklMRSAgICAgICAgICAgICAgICAgICAg
KiBmaWxlLAogICAgVHdpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZGFGaWxlTmFtZSwK
ICAgIGNvbnN0IExpc3QgPE5SSFlfSU5UX0ZSQU5HRT4gICAgJiByZW1hcEZyYW5nZUxpc3QKICk7
CgpUd2luZSBOUkhZX0dldFZkYUZpbGVuYW1lICgKICAgIGNvbnN0IENIQVIgICppbmNvbWluZ0Zp
bGVOYW1lCiApOwoKTkVURklMRV9GSUxFICpOUkhZX09wZW5GaWxlICgKICAgIFR3aW5lICAgZmls
ZU5hbWUKICk7CgpCT09MRUFOIE5SSFlfQ2xvc2VGaWxlICgKICAgIE5FVEZJTEVfRklMRSAgICAq
IGZpbGUsCiAgICBUd2luZSAgICAgICAgICAgZmlsZU5hbWUKICk7CgoKCgoKSU5UIE5SSFlfUmVh
ZENoYW5Bc2NpaSAoCiAgICBORVRGSUxFX0ZJTEUgICAgKmZpbGUsCiAgICBUd2luZSAgICAgICAg
ICAgYXNjRmlsZU5hbWUsCiAgICBjb25zdCBMaXN0IDxjbGFzcyBOUkhZX2NsYXNzQ2hhbm5lbCAq
PiAmY2hhbkxpc3QsCiAgICBjb25zdCBzdHJ1Y3QgTlJIWV9JTlRfRlJBTkdFICAgICAgICAgICAm
ZnJhbmdlCiApOwoKSU5UIE5SSFlfUmVhZE9ialRvQ2hhbiAoCiAgICBORVRGSUxFX0ZJTEUgICAg
KmZpbGUsCiAgICBUd2luZSAgICAgICAgICAgb2JqVG9DaGFuRmlsZW5hbWUKICk7CgppbnQgTlJI
WV9SZWFkTXRuICgKICAgIE5FVEZJTEVfRklMRSAqIGZpbGUsCiAgICBMaXN0IDxOUkhZX2NsYXNz
Q2hhbm5lbCAqPiBkZXN0aW5hdGlvbiwKICAgIExpc3QgPE5SSFlfY2xhc3NDaGFubmVsICo+IG9u
bHksCiAgICBCT09MRUFOIHN0YXJ0U3BlY2lmaWVkLAogICAgaW50IHN0YXJ0RnJhbWUsCiAgICBj
b25zdCBMaXN0IDxOUkhZX0lOVF9GUkFOR0U+ICZmcmFuZ2VMaXN0CiApOwoKaW50IE5SSFlfUmVh
ZENoZWQgKAoJCSAgTkVURklMRV9GSUxFKiBmaWxlLAoJCSAgTGlzdDwgTlJIWV9jbGFzc0NoYW5u
ZWwqID4gZGVzdGluYXRpb24sCgkJICBMaXN0PCBOUkhZX2NsYXNzQ2hhbm5lbCogPiBvbmx5LAoJ
CSAgQk9PTEVBTiBzdGFydFNwZWNpZmllZCwKCQkgIGludCBzdGFydEZyYW1lLAoJCSAgY29uc3Qg
TGlzdDwgTlJIWV9JTlRfRlJBTkdFID4mIGZyYW5nZUxpc3QKICk7CgoKIAoKCiAKCgoKCgoKCgoK
VHdpbmUgTlJIWV9EZWNvZGVPcGVuR0xCbGVuZEludCAoCiAgICBJTlQgaW5jb21pbmdJbnQKICk7
CgoKCgoKCiAKCkJPT0xFQU4gTlJIWV9TZXRTaW5nbGVTdGF0dXMgKAogICAgQk9PTEVBTiBmbGFn
CiApOwoKQk9PTEVBTiBOUkhZX0dldFNpbmdsZVN0YXR1cyAoCiAgICB2b2lkCiApOwoKdm9pZCBO
UkhZX1NldE5vVXBkYXRlU3RhdHVzICgKICAgIEJPT0xFQU4gbmV3U3RhdGUKICk7CgpCT09MRUFO
IE5SSFlfR2V0Tm9VcGRhdGVTdGF0dXMgKAogICAgdm9pZAogKTsKCkJPT0xFQU4gTlJIWV9HZXRO
b1VwZGF0ZVN0YXR1cyAoCiAgICBjbGFzcyBOUkhZX2NsYXNzQ2hhbm5lbCAqY2hhbgogKTsKCgog
Cgp2b2lkICBOUkhZX0xpc3RGcmFtZUluZm8gKAogICAgdm9pZCAKICk7Cgp2b2lkICBOUkhZX0dl
dEN1cnJlbnRGcmFuZ2UgKAogICAgUkVBTCAgICAqc3RhcnQsCiAgICBSRUFMICAgICplbmQsCiAg
ICBSRUFMICAgICppbmMKICk7CgpmbG9hdCBOUkhZX0dldEN1cnJlbnRGcmFtZSAoCiAgICB2b2lk
CiApOwoKQk9PTEVBTiBOUkhZX1NldEN1cnJlbnRGcmFtZSAoCiAgICBmbG9hdCBmcmFtZQogKTsK
CkJPT0xFQU4gTlJIWV9HZXRBbGxvd091dE9mUmFuZ2VDdXJyZW50RnJhbWUgKAogICAgdm9pZAog
KTsKCkJPT0xFQU4gTlJIWV9TZXRBbGxvd091dE9mUmFuZ2VDdXJyZW50RnJhbWUgKAogICAgQk9P
TEVBTiBuZXdTdGF0ZQogKTsKCklOVCBOUkhZX0dldEZyYW1lT2Zmc2V0ICgKICAgIHZvaWQgCiAp
OwoKaW50IE5SSFlfR2V0VXNlclRvdGFsRnJhbWVzU3RhcnQgKCk7CgppbnQgTlJIWV9HZXRVc2Vy
VG90YWxGcmFtZXNFbmQgKCk7CgoKIAoKSU5UIE5SSFlfR2V0VmVyYm9zaXR5ICgKICAgIHZvaWQg
CiApOwoKSU5UIE5SSFlfU2V0VmVyYm9zaXR5ICgKICAgIGNvbnN0IElOVCAgIHN0YXR1cwogKTsK
CgogCgpmbG9hdCBOUkhZX0dldExhc3RUcmF2ZXJzZWRGcmFtZSAoKTsKCmludCBOUkhZX1VwZGF0
ZVRyYXZlcnNlICgKICAgIGZsb2F0IGZyYW1lCiApOwoKdm9pZCBOUkhZX1NldERpcnR5V29ybGRG
bGFnICgKICAgIHZvaWQKICk7Cgp2b2lkIE5SSFlfVXBkYXRlVHJhdmVyc2VUaGluZyAoCiAgICBm
bG9hdCBmcmFtZSwKICAgIE5SSFlfY2xhc3NUaGluZyAqdGhpbmdQdHIKICk7CgoKIAoKQk9PTEVB
TiBOUkhZX1NhdmVVbmRvICgKICAgICAgICBCT09MRUFOIGNvbmQKICk7Cgp2b2lkICBOUkhZX1Vu
ZG9QdXNoU3RhcnRCZWFkICgKICAgICAgICAgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24KICk7
Cgp2b2lkICBOUkhZX1VuZG9QdXNoRW5kQmVhZCAoCiAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRl
c2NyaXB0aW9uCiApOwoKdm9pZCBOUkhZX1VuZG9QdXJnZSAoKTsKCnZvaWQgTlJIWV9Qcm9jZXNz
VW5kb1B1cmdlICgpOwoKdm9pZCBOUkhZX1B1c2hVbmRvU3RhdHVzICgKICAgICAgICBCT09MRUFO
IGlzT24KICk7Cgp2b2lkIE5SSFlfUG9wVW5kb1N0YXR1cyAoKTsKCnZvaWQgIE5SSFlfU2V0VW5k
byAoCiAgICAgICAgQk9PTEVBTiBzZXRPbgogKTsKCnZvaWQgIE5SSFlfU2V0VW5kb0Z1bGwgKAog
ICAgICAgIEJPT0xFQU4gc2V0T24KICk7CgpCT09MRUFOIE5SSFlfR2V0VW5kb1N0YXR1cyAoKTsK
CkJPT0xFQU4gTlJIWV9HZXRVbmRvRnVsbCAoKTsKCgogCgpCT09MRUFOIE5SSFlfRGlzcGxheVRy
YXZlcnNlICgKICAgIElOVCBkaXNwbGF5TW9kZSwKICAgIEJPT0xFQU4gbGFiZWxPYmplY3RzLAog
ICAgY29uc3QgY2hhciAqbGFiZWxQcmVmaXgsCiAgICBjb25zdCBjaGFyICpsYWJlbFN1ZmZpeAog
KTsKCgogCgoKCgoKCgoKCgoKIyAxOTYgImgvTlJIWS5oIiAyCgoKIAoKIyAyNyAibnJoeS9OUkhZ
X0FjY2Vzcy5jIiAyCgojIDEgImgvbnJoeS5oIiAxCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
Y2xhc3MgT2JzZXJ2ZXI7CgogCgoKCiAKCgogCgoKCgogCgoKCiAKCgoKCgogCgoKCiAKCgoKCiAK
Y29uc3QgaW50IFRISU5HX1RZUEVfQU5ZVEhJTkcgICA9IC00OwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAKY29uc3QgaW50IFRISU5HX1RZUEVfVEhJTkcgICAg
ICA9IC0zOwpjb25zdCBpbnQgVEhJTkdfVFlQRV9BUFBBUklUSU9OID0gLTI7CmNvbnN0IGludCBU
SElOR19UWVBFX09CSkVDVCAgICAgPSAtMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKIAplbnVtIE5SSFlfVGhpbmdUeXBlIHsKICAgICAKICAgIFRISU5HX1RZUEVfVU5LTk9XTiwK
CiAgICAgCiAgICBUSElOR19UWVBFX0NBTUVSQSwKICAgIFRISU5HX1RZUEVfQ09MTElTSU9OLAog
ICAgVEhJTkdfVFlQRV9EVU1NWSwKICAgIFRISU5HX1RZUEVfRFlOQU1JQ1MsCiAgICBUSElOR19U
WVBFX0ZJTFRFUiwKICAgIFRISU5HX1RZUEVfRk9SQ0UsCiAgICBUSElOR19UWVBFX0ZVUiwKICAg
IFRISU5HX1RZUEVfTVVTQ0xFLAogICAgVEhJTkdfVFlQRV9HRU5FUkFUT1IsCiAgICBUSElOR19U
WVBFX0hPTUUsCiAgICBUSElOR19UWVBFX0lOS1ksCiAgICBUSElOR19UWVBFX0tMSVNULAogICAg
VEhJTkdfVFlQRV9MQVlFUiwKICAgIFRISU5HX1RZUEVfTElHSFQsCiAgICBUSElOR19UWVBFX01B
UCwKICAgIFRISU5HX1RZUEVfTUFURVJJQUwsCiAgICBUSElOR19UWVBFX01PREVMLAogICAgVEhJ
TkdfVFlQRV9ST09ULAogICAgVEhJTkdfVFlQRV9ST1RPLAogICAgVEhJTkdfVFlQRV9TQ0FGRk9M
RCwKICAgIFRISU5HX1RZUEVfU09VTkQsCiAgICBUSElOR19UWVBFX1RFWCwKICAgIFRISU5HX1RZ
UEVfVFJBQ0ssCiAgICBUSElOR19UWVBFX1VTRU1BUCwKCiAgICAgCiAgICBUSElOR19UWVBFX0VO
RAp9OwoKY29uc3QgaW50IFRZUEVfVEhJTkdDSEFOTkVMID0gVEhJTkdfVFlQRV9FTkQgKyAxOwoK
IApleHRlcm4gY29uc3QgY2hhciAqKm5yaHlfaXRlbU5hbWVzOwoKIAoKCiMgMSAiaC9ucmh5LnAi
IDEKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKIAoKCiAKCgogCgoKCgoKCgpJTlQgTlJIWV9Jc0Fz
Y2lpQU1lbWJlck9mQ2hhbm5lbExpc3QgKAogICAgY29uc3QgQ0hBUiAgKmFzY2lpLAogICAgSU5U
ICAgICAgICAgdHlwZQoJKTsKCklOVCAqTlJIWV9HZXRBbGxBc2NpaU1hdGNoZXNJbkNoYW5uZWxM
aXN0ICgKICAgIGNvbnN0IENIQVIgICphc2NpaSwKICAgIElOVCAgICAgICAgIHR5cGUsCiAgICBJ
TlQgICAgICAgICAqbnVtYmVyTWF0Y2hlcwoJKTsKCklOVCBOUkhZX0dldFR5cGVfX05vdEFDaGFu
X18gKAogICAgdm9pZCAKCSk7CgpaT09MRUFOIE5SSFlfQ2hlY2tBbmRGaXhOYU5DaGFubmVscyAo
CiAgICBOUkhZX2J1bmNoIDxOUkhZX2NsYXNzVGhpbmc+ICAgICpidW5jaF90aGluZ1B0cnMsCiAg
ICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIGZpeEZsYWcKCSk7CgoKIAoKdm9pZCAg
ICBOUkhZX1NhdmVDaGFubmVsICgKICAgICAgICAgICAgc3RydWN0IE5SSFlfY2xhc3NDaGFubmVs
ICpjaGFuLAogICAgICAgICAgICBCT09MRUFOIG1ha2VLZXkKCSk7Cgp2b2lkICAgIE5SSFlfU2F2
ZUNoYW5uZWxzICgKICAgICAgICAgICAgY29uc3QgTGlzdDxjbGFzcyBOUkhZX2NsYXNzQ2hhbm5l
bCAqPiAmY2hhbm5lbHMsCiAgICAgICAgICAgIEJPT0xFQU4gbWFrZUtleQoJKTsKCnZvaWQgICAg
TlJIWV9SZXNldENoYW5uZWwgKAogICAgICAgICAgICBzdHJ1Y3QgTlJIWV9jbGFzc0NoYW5uZWwg
KmNoYW4KCSk7Cgp2b2lkICAgIE5SSFlfUmVzZXRDaGFubmVscyAoCiAgICAgICAgICAgIGNvbnN0
IExpc3Q8Y2xhc3MgTlJIWV9jbGFzc0NoYW5uZWwgKj4gJmNoYW5uZWxzCgkpOwoKCiAKCgogCgoK
CgoKCiAKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCkxpc3Q8dm9p
ZCAqPiBOUkhZX0xvb2t1cENoYW5TcGVjRm9yUGFyc2xleSAoCgkJCQkJICAgY29uc3QgY2hhciog
b2JqZWN0LAoJCQkJCSAgIEhVX1BhcnNlclN0YXRlJiBzdGF0ZQoJKTsKCkhVX1ZhbHVlIE5SSFlf
RXZhbHVhdGVDaGFuU3BlY0ZvclBhcnNsZXkgKAoJCQkJCSBjb25zdCBjaGFyKiBvYmplY3QsCgkJ
CQkJIGNvbnN0IExpc3Q8IHZvaWQqID4mIGxvb2t1cCwKCQkJCQkgSFVfUGFyc2VyU3RhdGUmIGdl
bmVyaWNTdGF0ZQoJKTsKCmludCBOUkhZX1BhcnNlQ2hhblNwZWNGb3JQYXJzbGV5ICgKCQkJCSBU
d2luZSYgb2JqZWN0CgkpOwoKaW50IE5SSFlfUGFyc2VDaGFuU3BlY0ZvclBhcnNsZXkgKAoJCQkJ
IFR3aW5lJiBvYmplY3QsCgkJCQkgY29uc3QgY2hhciogZnVuY05hbWUsCgkJCQkgaW50IGFyZwoJ
KTsKCgogCgoKIAoKCgoKCgogCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKIyAy
MDggImgvbnJoeS5wIgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAKCgoKCgoKCgoKCiAKCgoK
CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoK
CgoKIAoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgogCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog
CgoKCgoKCgoKCgoKCgoKCgoKdm9pZCBOUkhZX1BsYXlTb3VuZHMgKAoJKTsKCgoKCgoKIAoKCiAK
CgogCgoKIAoKTlJIWV9jbGFzc09iamVjdCAqTlJIWV9HZXRNYW5pcHVsYXRpb25PYmplY3QgKCk7
CgppbnQgTlJIWV9HZXRNYW5pcHVsYXRpb25TcGFjZSAoKTsKCnZvaWQgIE5SSFlfU2V0TWFuaXB1
bGF0aW9uU3BhY2UgKAoJCQkgICAgICAgaW50IHNwYWNlCgkpOwoKdm9pZCAgTlJIWV9TZXRNYW5p
cHVsYXRpb25TZWxlY3Rpb25Nb2RlICgKCQkJCSAgICAgICBaT09MRUFOIG1vZGUKCSk7CgpaT09M
RUFOIE5SSFlfR2V0TWFuaXB1bGF0aW9uU2VsZWN0aW9uTW9kZSAoKTsKClpPT0xFQU4gTlJIWV9H
ZXRNYW5pcHVsYXRpb25FeHRyYU1vZGUgKCk7CgpmbG9hdCBOUkhZX0dldE1hbmlwdWxhdG9ySWNv
bkludGVuc2l0eSAoKTsKCnZvaWQgICBOUkhZX1NldE1hbmlwdWxhdG9ySWNvbkludGVuc2l0eSAo
CgkJCQkgICAgICAgZmxvYXQgaW50ZW5zaXR5CgkpOwoKdm9pZCAgKk5SSFlfR2V0T2JqZWN0TWFu
aXB1bGF0b3IgKCk7CgpCT09MRUFOIE5SSFlfRGVzdHJveU9iamVjdE1hbmlwdWxhdG9yICgpOwoK
dm9pZCAgTlJIWV9TZXRNYW5pcHVsYXRpbmdGbGFnICgKCQkJICAgICAgQk9PTEVBTiBmbGFnCgkp
OwoKQk9PTEVBTiBOUkhZX0dldE1hbmlwdWxhdGluZ0ZsYWcgKCk7CgoKIAoKCiAKCgogCgoKCgoK
CiAKCgoKCgoKIAoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKIAoKCgoKCgoKCiAK
ClpPT0xFQU4gTlJIWV9TZXRMZWdhbE5ld1RoaW5nICgKICAgIFpPT0xFQU4gICAgIHN0YXR1cywK
ICAgIGNvbnN0IENIQVIgICpuYW1lCgkpOwoKdm9pZCAgTlJIWV9TZXRMZWdhbE5ld1RoaW5nRm9y
UmVhZCAoCiAgICBaT09MRUFOICAgICBzdGF0dXMKCSk7CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKCgoKCiAKCgogCgpNX01hdHJpeCBTaGFwZV9SZWdpc3RlclBvaW50cyAoCiAgTGlzdCA8TV9W
ZWN0b3I+ICAgICAgIHAzLAogIExpc3QgPE1fVmVjdG9yPiAgICAgICBjMywKICBMaXN0IDxmbG9h
dD4gICAgIHdlaWdodHMsCiAgQk9PTEVBTiAgICAgICAgIHVzZUNoYW5zCgkpOwoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCiMgODMzICJoL25yaHkucCIKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgogCgoKIAoK
CgoKCgoKCgoKCgoKCgoKCkJPT0xFQU4gTlJIWV9Jc0luQ2FsY0hhY2sgKAogICAgdm9pZAoJKTsK
CkJPT0xFQU4gTlJIWV9TZXRJc0luQ2FsY0hhY2sgKAogICAgQk9PTEVBTiBuZXdTdGF0ZQoJKTsK
CgogCgoKCgoKCgoKCgoKCgoKCgogCgoKIAoKCgoKCgoKCiAKCgoKCgoKCgoKCiAKCgogCgoKIAoK
CgojIDk0MiAiaC9ucmh5LnAiCgoKCgoKCgogCgoKCgoKdm9pZCAgTlJIWV9EZXNjcmliZURlYnVn
ICgKICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmZGVzYwoJKTsKCgogCgoKIAoK
CiAKCgogCgoKCgoKCiAKCgoKCgoKIAoKCiAKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoK
IAoKCiAKCgoKCgoKIAoKCiAKCgogCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgogCgoKIAoKCiAKCgog
CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKIAoKCgoKCgoKCgoKIAoKCiAKCgoKCgoK
CgogCgoKCgoKCiAKCgoKCgoKIAoKCiAKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgoKCgoKCiAKCgog
CgoKIAoKCiAKCgogCgoKIAoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCgogCgoKIAoKCgoK
CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKWk9PTEVBTiBOUkhZX1NldENvbW1hbmRDYWNoaW5n
ICgKICAgIFpPT0xFQU4gc3RhdHVzCgkpOwoKCiAKCgoKCgoKIAoKCiAKCgogCgoKIAoKCiAKCgog
CgoKIAoKCgoKCgogCgoKCgoKCiAKCgogCgoKCgoKCiAKCgogCgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgogCgoKIAoKCgoKCgoKCgoKIAoKCiAKCgogCgoKIAoKCgoKCgoKCgoKCgoKCiAKCgogCgoKIAoK
CgoKCgoKCgoKCgogCgoKCgoKCgoKCgogCgp2b2lkICBOUkhZX0Rlc2NyaWJlU2V0dGluZ3MgKAog
ICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICZkZXNjCgkpOwoKCgoKCgogCgoKIAoK
CiAKCgogCgoKCgoKCiAKCgogCgoKIAoKCiAKCgogCgoKCgoKCgoKCgoKCiAKCgogCgp2b2lkICBO
UkhZX0Rlc2NyaWJlU3RlcmVvICgKICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAm
ZGVzYwoJKTsKCgogCgoKCgoKCgoKCgoKCiAKCgogCgoKIAoKCiAKCgoKCgoKIAoKCiAKCgogCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKIAoKCiAKCgogCgpaT09MRUFOIE5SSFlfR2V0
RGVidWdVbmRvRnVuY1RyYWNraW5nICgKICAgIHZvaWQgCgkpOwoKWk9PTEVBTiBOUkhZX1NldERl
YnVnVW5kb0Z1bmNUcmFja2luZyAoCiAgICBaT09MRUFOIHN0YXR1cwoJKTsKCnZvaWQgIE5SSFlf
VW5kb0luaXQgKAogICAgICAgIHZvaWQgCgkpOwoKCiAKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKQk9PTEVBTiBOUkhZX0NvbGxpc2lvbl9QYWlyICgK
ICAgIE5SSFlfY2xhc3NPYmplY3QgKm9iakEsCiAgICBOUkhZX2NsYXNzT2JqZWN0ICpvYmpCLAog
ICAgaW50IGZyYW1lCgkpOwoKCiAKCkJPT0xFQU4gTlJIWV9VcGRhdGVUaGluZ0Zyb21DaGFuQ0Ig
KAogICAgICAgIGNsYXNzIE5SSFlfY2xhc3NDaGFubmVsICpjaGFuLAogICAgICAgIHZvaWQgKndp
ZAoJKTsKCkJPT0xFQU4gTlJIWV9QdXJnZUN1cnJlbnRDaGFubmVscyAoKTsKCkJPT0xFQU4gTlJI
WV9TZXRDaGFubmVsc1RvQ3VycmVudCAoCiAgICAgICAgY29uc3QgTGlzdCA8Y2xhc3MgTlJIWV9j
bGFzc0NoYW5uZWwgKj4gJmNoYW5MaXN0CgkpOwoKQk9PTEVBTiBOUkhZX0FkZENoYW5uZWxUb0N1
cnJlbnQgKAogICAgICAgIGNsYXNzIE5SSFlfY2xhc3NDaGFubmVsICpjaGFuCgkpOwoKQk9PTEVB
TiBOUkhZX1JlbW92ZUNoYW5uZWxGcm9tQ3VycmVudCAoCiAgICAgICAgY2xhc3MgTlJIWV9jbGFz
c0NoYW5uZWwgKmNoYW4KCSk7CgpCT09MRUFOIE5SSFlfSXNDaGFubmVsQ3VycmVudCAoCiAgICAg
ICAgY2xhc3MgTlJIWV9jbGFzc0NoYW5uZWwgKmNoYW4KCSk7CgpCT09MRUFOIE5SSFlfTWFrZUNo
YW5uZWxUaGVDdXJyZW50ICgKICAgICAgICBjbGFzcyBOUkhZX2NsYXNzQ2hhbm5lbCAqY2hhbgoJ
KTsKCk5SSFlfY2xhc3NDaGFubmVsICpOUkhZX0dldFRoZUN1cnJlbnQgKCk7CgpMaXN0PE5SSFlf
Y2xhc3NDaGFubmVsICo+IE5SSFlfR2V0Q3VycmVudENoYW5uZWxzICgpOwoKTGlzdDxOUkhZX2Ns
YXNzQ2hhbm5lbCAqPiBOUkhZX0dldFVuc29ydGVkQ3VycmVudENoYW5uZWxzICgpOwoKdm9pZCBO
UkhZX0xpc3RDdXJyZW50Q2hhbm5lbHMgKCk7Cgp2b2lkIE5SSFlfQ3JlYXRlQ3VycmVudEVkaXRv
ciAoCiAgICAgICAgaW50IHR5cGUKCSk7Cgp2b2lkIE5SSFlfRGVzdHJveUN1cnJlbnRFZGl0b3Ig
KAogICAgICAgIGludCB0eXBlCgkpOwoKdm9pZCBOUkhZX0RlbGF5ZWRVcGRhdGVDdXJyZW50RWRp
dG9yICgKICAgICAgICB1bnNpZ25lZCBmbGFncwoJKTsKCnZvaWQgTlJIWV9VcGRhdGVDdXJyZW50
RWRpdG9yICgKICAgICAgICB1bnNpZ25lZCBmbGFncwoJKTsKCnZvaWQgTlJIWV9TdWJzY3JpYmVU
b0N1cnJlbnRDaGFubmVsTGlzdCAoCiAgICAgICAgT2JzZXJ2ZXIgKm9ic2VydmVyCgkpOwoKdm9p
ZCBOUkhZX1Vuc3Vic2NyaWJlRnJvbUN1cnJlbnRDaGFubmVsTGlzdCAoCiAgICAgICAgT2JzZXJ2
ZXIgKm9ic2VydmVyCgkpOwoKZmxvYXQgKk5SSFlfR2V0Q3VycmVudENoYW5uZWxDb2xvciAoCiAg
ICAgICAgY2xhc3MgTlJIWV9jbGFzc0NoYW5uZWwgKmNoYW4KCSk7Cgp2b2lkIE5SSFlfRGVzY3Jp
YmVDdXJyZW50Q2hhbm5lbHMgKAogICAgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICZkZXNjCgkp
OwoKdm9pZCBOUkhZX0Rlc2NyaWJlVGhlQ3VycmVudENoYW5uZWwgKAogICAgTlJIWV9DbGFzc0Rl
c2NyaWJlU3RyZWFtICZkZXNjCgkpOwoKdm9pZCBOUkhZX0Rlc2NyaWJlQ29uZFRoZUN1cnJlbnRD
aGFubmVsICgKICAgIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmZGVzYywKICAgIGNsYXNzIE5S
SFlfY2xhc3NDaGFubmVsICpjaGFuCgkpOwoKdm9pZCBOUkhZX0Rlc2NyaWJlQWxsQ3VycmVudEN1
cnZlcyAoCiAgICBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJmRlc2MKCSk7CgoKCgoKCiAKCgog
CgoKCgoKCiAKCgoKCgoKCgogCgoKIAoKCgoKCgoKCiAKCnZvaWQgIE5SSFlfQ2xlYW51cE9wdGlv
blBhcm1zICgKICAgIHZvaWQgCgkpOwoKCgoKCgoKCiAKCgoKCgoKIAoKCiAKCgoKCgoKCgoKCiAK
CmludCBNX0RlY29tcG9zZSAoCiAgICAgICAgY29uc3QgTV9NYXRyaXggJiBtYXQsCiAgICAgICAg
TV9GTE9BVCAqIHNjYWxlLAogICAgICAgIE1fRkxPQVQgKiBzaGVhciwKICAgICAgICBjbGFzcyBN
X1F1YXQgKnF1YXQsCiAgICAgICAgTV9GTE9BVCAqIHRyYW5zLAogICAgICAgIE1fRkxPQVQgKiBw
ZXJzcAoJKTsKCmludCBNX0RlY29tcG9zZSAoCiAgICAgICAgY29uc3QgTV9NYXRyaXggJiBtYXQs
CiAgICAgICAgTV9WZWN0b3IgJnNjYWxlLAogICAgICAgIE1fVmVjdG9yICZzaGVhciwKICAgICAg
ICBjbGFzcyBNX1F1YXQgJnF1YXQsCiAgICAgICAgTV9WZWN0b3IgJnRyYW5zLAogICAgICAgIE1f
VmVjdG9yNCAmcGVyc3AKCSk7CgoKIAoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpMaXN0IDxBU0NJSV9PQkpfQ0hBTj4g
TlJIWV9QYXJzZU9yaWdUb2tlbiAoCiAgICBjb25zdCBDSEFSICAgICAgKm9yaWdUb2tlbgoJKTsK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCkxpc3QgPEFTQ0lJX09CSl9DSEFOPiBOUkhZX1BhcnNlQ2hhbkluZm9JblRva2VuICgKICAg
IGNvbnN0IENIQVIgICp0aGluZ05hbWUsCiAgICBjb25zdCBDSEFSICAqY2hhbk5hbWUKCSk7CgpM
aXN0IDxBU0NJSV9PQkpfQ0hBTj4gTlJIWV9QYXJzZUNoYW5JbmZvSW5Ub2tlbiAoCiAgICBUd2lu
ZSAgICZ0b2tlbgoJKTsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKWk9PTEVB
TiBOUkhZX0lzTmFtZUxlZ2FsICgKICAgIGNvbnN0IENIQVIgICpuYW1lSW5RdWVzdGlvbgoJKTsK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKVHdpbmUg
TlJIWV9QdHNGaW5kRmlsZXNldCAoCiAgICBjb25zdCBUd2luZSAmIGZpbGVzZXQKCSk7CgpUd2lu
ZSBOUkhZX1B0c0NyZWF0ZUZpbGVzZXQgKAogICAgY29uc3QgVHdpbmUgJiBmaWxlc2V0LAogICAg
Y29uc3QgVHdpbmUgJiBkZmx0RmlsZXR5cGUKCSk7CgoKIAoKCiAKCk5SSFlfYnVuY2ggPE5SSFlf
SU5UX0ZSQU5HRT4gKk5SSFlfcGFyc2VJbnRGcmFuZ2VJbnRvQnVuY2ggKAogICAgY29uc3QgQ0hB
UiAgKmFzY2lpCgkpOwoKCgoKCk5SSFlfYnVuY2ggPE5SSFlfUkVBTF9GUkFOR0U+ICpOUkhZX3Bh
cnNlUmVhbEZyYW5nZUludG9CdW5jaCAoCiAgICBjb25zdCBjaGFyKiBhc2NpaQoJKTsKClpPT0xF
QU4gTlJIWV9Jc0ZyYW5nZVdpdGhpblVzZXJUb3RhbEZyYW1lcyAoCiAgICBOUkhZX1JFQUxfRlJB
TkdFICAgIGZyYW5nZQoJKTsKClpPT0xFQU4gTlJIWV9Jc0ZyYW5nZVdpdGhpblVzZXJUb3RhbEZy
YW1lcyAoCiAgICBOUkhZX0lOVF9GUkFOR0UgZnJhbmdlCgkpOwoKWk9PTEVBTiBOUkhZX0lzRnJh
bmdlV2l0aGluVXNlclRvdGFsRnJhbWVzICgKICAgIFJFQUwgICAgICAgICAgICBzdGFydCwKICAg
IFJFQUwgICAgICAgICAgICBlbmQKCSk7CgpaT09MRUFOIE5SSFlfSXNGcmFuZ2VXaXRoaW5Vc2Vy
VG90YWxGcmFtZXMgKAogICAgSU5UICAgICAgICAgICAgIHN0YXJ0LAogICAgSU5UICAgICAgICAg
ICAgIGVuZAoJKTsKCgoKCgoKIAoKVHdpbmUgTlJIWV9Gb3JtYXQgKCAKICAgIGNvbnN0IENIQVIg
ICpmb3JtYXQsCiAgICAuLi4KCSk7Cgp2b2lkICBOUkhZX1ByaW50VmVjdCAoCmNvbnN0IGNoYXIg
Km5hbWUsIApNX1ZlY3RvciB2ZWN0CgkpOwoKdm9pZCAgTlJIWV9QcmludE1hdCAoCmNvbnN0IGNo
YXIgKm5hbWUsIApNX01hdHJpeCBtYXQKCSk7CgpmbG9hdCBOUkhZX0ludGVyc2VjdFJheXMgKApN
X1ZlY3RvciAgICBPMSwKTV9WZWN0b3IgICAgTzIsCk1fVmVjdG9yICByYXkxLApNX1ZlY3RvciAg
cmF5MiwKTV9WZWN0b3IgICAgKnB0CgkpOwoKCiAKCnZvaWQgTlJIWV9Jbml0aWFsaXplV29ybGQg
KCk7CgpJTlQgTlJIWV9HZXRGcHMgKAogICAgdm9pZCAKCSk7CgpJTlQgTlJIWV9TZXRGcHMgKAog
ICAgSU5UICAgICBuZXdfZnBzCgkpOwoKSU5UIE5SSFlfR2V0UGxheUZwcyAoCiAgICB2b2lkIAoJ
KTsKCklOVCBOUkhZX1NldFBsYXlGcHMgKAogICAgSU5UICAgICBuZXdfcGxheWZwcwoJKTsKClJF
QUwgTlJIWV9HZXRGYXN0Rm9yd2FyZCAoCiAgICB2b2lkIAoJKTsKClJFQUwgTlJIWV9TZXRGYXN0
Rm9yd2FyZCAoCiAgICBSRUFMICAgICAgICBuZXdfZmFzdEZvcndhcmQKCSk7CgpSRUFMIE5SSFlf
R2V0T3JpZ2luU2l6ZSAoKTsKClJFQUwgTlJIWV9TZXRPcmlnaW5TaXplICgKICAgIFJFQUwgbmV3
T3JpZ2luU2l6ZQoJKTsKCkJPT0xFQU4gTlJIWV9HZXRPcmlnaW5EaXNwbGF5ICgpOwoKQk9PTEVB
TiBOUkhZX1NldE9yaWdpbkRpc3BsYXkgKAogICAgQk9PTEVBTiBuZXdPcmlnaW5EaXNwbGF5Cgkp
OwoKUkVBTCBOUkhZX0dldEZpcnN0UmVwZWF0ICgpOwoKdm9pZCBOUkhZX1NldEZpcnN0UmVwZWF0
ICgKICAgIFJFQUwgZGVsYXkKCSk7CgpCT09MRUFOIE5SSFlfU2V0U2NuU2VjdGlvbiAoCiAgICBj
b25zdCBMaXN0IDxOUkhZX0lOVF9GUkFOR0UgKj4gJiBmcmFuZ2VQdHJzCgkpOwoKTlJIWV9JTlRf
RlJBTkdFIE5SSFlfR2V0U2VjdGlvbkZyYW5nZSAoCiAgICBmbG9hdCBmcmFtZQoJKTsKCklOVCBO
UkhZX0dldFNvdW5kQWN0aW9uICgKICAgIHZvaWQgCgkpOwoKSU5UIE5SSFlfU2V0U291bmRBY3Rp
b24gKAogICAgSU5UICAgICBzb3VuZF9hY3Rpb24KCSk7CgoKIAoKCgoKCgoKCgoKCiMgMTEwICJo
L25yaHkuaCIgMgoKCiAKCiMgMjggIm5yaHkvTlJIWV9BY2Nlc3MuYyIgMgoKIyAxICJoL05SSFlw
cml2YXRlLnAiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgogCgoKIAoKCiAKCgoK
CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKdm9pZCAgcHJpbnRWYWxpZEZyYW1l
cyAoCiAgICBjb25zdCBMaXN0IDxSRUFMPiAmIGZyYW1lTGlzdAogKTsKCgoKCgoKCgoKCiAKCgoK
CgoKIAoKSU5UIGRvTm90aGluZ0Z1bmNPZldvcmRzICgKICAgIGNvbnN0IGNoYXIgKiwKICAgIExp
c3Q8Y29uc3QgY2hhciAqPgogKTsKCklOVCBkb05vdGhpbmdJbml0aWFsaXplRnVuYyAoCiAgICBj
b25zdCBjaGFyICoKICk7CgoKCgoKCiAKCgogCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgogCgoKCgoKdm9pZCAgTlJIWV9nbFB1c2hBdHRyaWIgKAogICAgdm9pZCAKICk7Cgp2b2lk
ICBOUkhZX2dsUG9wQXR0cmliICgKICAgIHZvaWQgCiApOwoKdm9pZCAgTlJIWV9nbEVuYWJsZSAo
CiAgICB1bnNpZ25lZCAgICBzdGF0ZQogKTsKCgoKCgp2b2lkICBOUkhZX2dsRGlzYWJsZSAoCiAg
ICB1bnNpZ25lZCAgICBzdGF0ZQogKTsKCgoKCgp2b2lkICBOUkhZX2dsTGlnaHRzT2ZmICgKICAg
IHZvaWQgCiApOwoKdm9pZCAgTlJIWV9nbEluaXRBdHRyaWJTdGFjayAoCiAgICB2b2lkIAogKTsK
CnZvaWQgTlJIWV9nbExpZ2h0c09uICgKICAgIHZvaWQKICk7CgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgogCgoKCgoKCgoKCgogCgoKIAoKCiAKCgoKCgoKCgogCgoKIAoKCiAKCgoKCgppbnQgbnJoeV9w
YXJzZUludG9Xb3JkcyAoCiAgICBjb25zdCBUd2luZSAmaW5wdXRMaW5lLAogICAgTGlzdDxUd2lu
ZT4gJndvcmRzCiApOwoKCiAKCgogCgoKCgoKCgoKCgoKCgoKIAoKCiAKCgogCgoKIAoKCiAKCgog
Cgpjb25zdCBMaXN0PE5SSFlfY2xhc3NUaGluZyo+ICZOUkhZX2dldFBpY2tlZE9iamVjdHMgKCk7
CgoKIAoKCgoKCgoKCgoKCiMgMjkgIm5yaHkvTlJIWV9BY2Nlc3MuYyIgMgoKIyAxICJoL25yaHlf
d29ybGQuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgwKIAoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysr
LTIvc3RyaW5nIiAxIDMKIAoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLTIvc3RkL2Jhc3RyaW5n
LmgiIDEgMwogCiAKCiAKIAogCiAKIAoKIAogCiAKIAoKIAogCiAKCiAKIAogCiAKIAoKIAogCgoK
CgoKI3ByYWdtYSBpbnRlcmZhY2UKCgojIDEgIi91c3IvaW5jbHVkZS9nKystMi9jc3RkZGVmIiAx
IDMKIAogCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0y
LjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0MiAiL3Vzci9saWIvZ2NjLWxpYi9hbHBo
YS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCiMgNiAiL3Vz
ci9pbmNsdWRlL2crKy0yL2NzdGRkZWYiIDIgMwoKCiMgMzUgIi91c3IvaW5jbHVkZS9nKystMi9z
dGQvYmFzdHJpbmcuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKystMi9zdGQvc3RyYWl0cy5o
IiAxIDMKIAogCgogCiAKIAogCiAKCiAKIAogCiAKCiAKIAogCgogCiAKIAogCiAKCiAKIAoKCgoK
CiAKI3ByYWdtYSBpbnRlcmZhY2UgInN0ZC9zdHJhaXRzLmgiCgoKCgpleHRlcm4gIkMrKyIgewp0
ZW1wbGF0ZSA8Y2xhc3MgY2hhclQ+CnN0cnVjdCBzdHJpbmdfY2hhcl90cmFpdHMgewogIHR5cGVk
ZWYgY2hhclQgY2hhcl90eXBlOyAgCgogICAKCiAgc3RhdGljIHZvaWQgYXNzaWduIChjaGFyX3R5
cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyBjMSA9IGMyOyB9CiAgc3RhdGljIGJv
b2wgZXEgKGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJl
dHVybiAoYzEgPT0gYzIpOyB9CiAgc3RhdGljIGJvb2wgbmUgKGNvbnN0IGNoYXJfdHlwZSYgYzEs
IGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAhKGMxID09IGMyKTsgfQogIHN0YXRp
YyBib29sIGx0IChjb25zdCBjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAg
eyByZXR1cm4gKGMxIDwgYzIpOyB9CiAgc3RhdGljIGNoYXJfdHlwZSBlb3MgKCkgeyByZXR1cm4g
Y2hhcl90eXBlKCk7IH0gIAogIHN0YXRpYyBib29sIGlzX2RlbChjaGFyX3R5cGUgYSkgeyByZXR1
cm4gMDsgfQogICAKICAKICAgCgogIHN0YXRpYyBpbnQgY29tcGFyZSAoY29uc3QgY2hhcl90eXBl
KiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7CiAgICAgIHNpemVfdCBp
OwogICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQoJaWYgKG5lIChzMVtpXSwgczJbaV0pKQoJ
ICByZXR1cm4gbHQgKHMxW2ldLCBzMltpXSkgPyAtMSA6IDE7CgogICAgICByZXR1cm4gMDsKICAg
IH0KICAgIAogIHN0YXRpYyBzaXplX3QgbGVuZ3RoIChjb25zdCBjaGFyX3R5cGUqIHMpCiAgICB7
CiAgICAgIHNpemVfdCBsID0gMDsKICAgICAgd2hpbGUgKG5lICgqcysrLCBlb3MgKCkpKQoJKyts
OwogICAgICByZXR1cm4gbDsKICAgIH0KCiAgc3RhdGljIGNoYXJfdHlwZSogY29weSAoY2hhcl90
eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7CiAgICAgIGZvciAo
OyBuLS07ICkKCWFzc2lnbiAoczFbbl0sIHMyW25dKTsKICAgICAgcmV0dXJuIHMxOwogICAgfQoK
ICBzdGF0aWMgY2hhcl90eXBlKiBtb3ZlIChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUq
IHMyLCBzaXplX3QgbikKICAgIHsKICAgICAgY2hhcl90eXBlIGFbbl07CiAgICAgIHNpemVfdCBp
OwogICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQoJYXNzaWduIChhW2ldLCBzMltpXSk7CiAg
ICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCglhc3NpZ24gKHMxW2ldLCBhW2ldKTsKICAgICAg
cmV0dXJuIHMxOwogICAgfQoKICBzdGF0aWMgY2hhcl90eXBlKiBzZXQgKGNoYXJfdHlwZSogczEs
IGNvbnN0IGNoYXJfdHlwZSYgYywgc2l6ZV90IG4pCiAgICB7CiAgICAgIGZvciAoOyBuLS07ICkK
CWFzc2lnbiAoczFbbl0sIGMpOwogICAgICByZXR1cm4gczE7CiAgICB9Cn07CgpjbGFzcyBpc3Ry
ZWFtOwpjbGFzcyBvc3RyZWFtOwojIDEgIi91c3IvaW5jbHVkZS9nKystMi9jY3R5cGUiIDEgMwog
CiAKCgoKCgojIDEwNSAiL3Vzci9pbmNsdWRlL2crKy0yL3N0ZC9zdHJhaXRzLmgiIDIgMwoKIyAx
ICIvdXNyL2luY2x1ZGUvZysrLTIvY3N0cmluZyIgMSAzCiAKIAoKCgoKCgojIDk0ICIvdXNyL2lu
Y2x1ZGUvZysrLTIvY3N0cmluZyIgMwoKCgojIDEwNiAiL3Vzci9pbmNsdWRlL2crKy0yL3N0ZC9z
dHJhaXRzLmgiIDIgMwoKCnN0cnVjdCBzdHJpbmdfY2hhcl90cmFpdHMgPGNoYXI+IHsKICB0eXBl
ZGVmIGNoYXIgY2hhcl90eXBlOwoKICBzdGF0aWMgdm9pZCBhc3NpZ24gKGNoYXJfdHlwZSYgYzEs
IGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IGMxID0gYzI7IH0KICBzdGF0aWMgYm9vbCBlcSAo
Y29uc3QgY2hhcl90eXBlICYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAo
YzEgPT0gYzIpOyB9CiAgc3RhdGljIGJvb2wgbmUgKGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0
IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAoYzEgIT0gYzIpOyB9CiAgc3RhdGljIGJvb2wg
bHQgKGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVy
biAoYzEgPCBjMik7IH0KICBzdGF0aWMgY2hhcl90eXBlIGVvcyAoKSB7IHJldHVybiAwOyB9CiAg
c3RhdGljIGJvb2wgaXNfZGVsKGNoYXJfdHlwZSBhKSB7IHJldHVybiAoX19jdHlwZV9iWyhpbnQp
ICggKCBhICkgKV0gJiAodW5zaWduZWQgc2hvcnQgaW50KSAgIF9JU3NwYWNlICkgIDsgfQoKICBz
dGF0aWMgaW50IGNvbXBhcmUgKGNvbnN0IGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSog
czIsIHNpemVfdCBuKQogICAgeyByZXR1cm4gbWVtY21wIChzMSwgczIsIG4pOyB9CiAgc3RhdGlj
IHNpemVfdCBsZW5ndGggKGNvbnN0IGNoYXJfdHlwZSogcykKICAgIHsgcmV0dXJuIHN0cmxlbiAo
cyk7IH0KICBzdGF0aWMgY2hhcl90eXBlKiBjb3B5IChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFy
X3R5cGUqIHMyLCBzaXplX3QgbikKICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1jcHkgKHMx
LCBzMiwgbik7IH0KICBzdGF0aWMgY2hhcl90eXBlKiBtb3ZlIChjaGFyX3R5cGUqIHMxLCBjb25z
dCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbikKICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1t
b3ZlIChzMSwgczIsIG4pOyB9CiAgc3RhdGljIGNoYXJfdHlwZSogc2V0IChjaGFyX3R5cGUqIHMx
LCBjb25zdCBjaGFyX3R5cGUmIGMsIHNpemVfdCBuKQogICAgeyByZXR1cm4gKGNoYXJfdHlwZSop
IG1lbXNldCAoczEsIGMsIG4pOyB9Cn07CgojIDE1OSAiL3Vzci9pbmNsdWRlL2crKy0yL3N0ZC9z
dHJhaXRzLmgiIDMKCn0gIAoKIyAzNiAiL3Vzci9pbmNsdWRlL2crKy0yL3N0ZC9iYXN0cmluZy5o
IiAyIDMKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0yL2FsbG9jLmgiIDEgMwogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgojIDM4ICIvdXNyL2luY2x1ZGUvZysrLTIvYWxsb2MuaCIgMwoKCgoKIAog
CiAKIyAzOSAiL3Vzci9pbmNsdWRlL2crKy0yL3N0ZC9iYXN0cmluZy5oIiAyIDMKCgpleHRlcm4g
IkMrKyIgewpjbGFzcyBpc3RyZWFtOyBjbGFzcyBvc3RyZWFtOwoKIyAxICIvdXNyL2luY2x1ZGUv
ZysrLTIvaXRlcmF0b3IiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAi
L3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUv
c3RkZGVmLmgiIDEgMwojIDM0MiAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgv
ZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCiMgMzIgIi91c3IvaW5jbHVkZS9nKyst
Mi9pdGVyYXRvciIgMiAzCgoKCgoKCiAKIAogCiMgNDQgIi91c3IvaW5jbHVkZS9nKystMi9zdGQv
YmFzdHJpbmcuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCBfX291dF9vZl9yYW5nZSAoY29uc3QgY2hh
ciAqKTsKZXh0ZXJuIHZvaWQgX19sZW5ndGhfZXJyb3IgKGNvbnN0IGNoYXIgKik7CgoKCgoKCgoK
CgoKCgoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMgPSBzdHJpbmdfY2hhcl90
cmFpdHM8Y2hhclQ+LAoJICBjbGFzcyBBbGxvY2F0b3IgPSBhbGxvYyA+CmNsYXNzIGJhc2ljX3N0
cmluZwp7CnByaXZhdGU6CiAgc3RydWN0IFJlcCB7CiAgICBzaXplX3QgbGVuLCByZXMsIHJlZjsK
ICAgIGJvb2wgc2VsZmlzaDsKCiAgICBjaGFyVCogZGF0YSAoKSB7IHJldHVybiByZWludGVycHJl
dF9jYXN0PGNoYXJUICo+KHRoaXMgKyAxKTsgfQogICAgY2hhclQmIG9wZXJhdG9yW10gKHNpemVf
dCBzKSB7IHJldHVybiBkYXRhICgpIFtzXTsgfQogICAgY2hhclQqIGdyYWIgKCkgeyBpZiAoc2Vs
ZmlzaCkgcmV0dXJuIGNsb25lICgpOyArK3JlZjsgcmV0dXJuIGRhdGEgKCk7IH0KICAgIHZvaWQg
cmVsZWFzZSAoKSB7IGlmICgtLXJlZiA9PSAwKSBkZWxldGUgdGhpczsgfQoKICAgIGlubGluZSBz
dGF0aWMgdm9pZCAqIG9wZXJhdG9yIG5ldyAoc2l6ZV90LCBzaXplX3QpOwogICAgaW5saW5lIHN0
YXRpYyB2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqKTsKICAgIGlubGluZSBzdGF0aWMgUmVw
KiBjcmVhdGUgKHNpemVfdCk7CiAgICBjaGFyVCogY2xvbmUgKCk7CgogICAgaW5saW5lIHZvaWQg
Y29weSAoc2l6ZV90LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQgbW92
ZSAoc2l6ZV90LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQgc2V0ICAo
c2l6ZV90LCBjb25zdCBjaGFyVCwgICBzaXplX3QpOwoKICAgIGlubGluZSBzdGF0aWMgYm9vbCBl
eGNlc3Nfc2xvcCAoc2l6ZV90LCBzaXplX3QpOwogICAgaW5saW5lIHN0YXRpYyBzaXplX3QgZnJv
Yl9zaXplIChzaXplX3QpOwoKICBwcml2YXRlOgogICAgUmVwICZvcGVyYXRvcj0gKGNvbnN0IFJl
cCAmKTsKICB9OwoKcHVibGljOgogCiAgdHlwZWRlZgkgICB0cmFpdHMJCXRyYWl0c190eXBlOwog
IHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzOjpjaGFyX3R5cGUJdmFsdWVfdHlwZTsKICB0eXBlZGVm
CSAgIEFsbG9jYXRvcgkJYWxsb2NhdG9yX3R5cGU7CgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlw
ZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjaGFyVCYg
cmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgY2hhclQmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBl
ZGVmIGNoYXJUKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgY2hhclQqIGNvbnN0X3BvaW50ZXI7
CiAgdHlwZWRlZiBwb2ludGVyIGl0ZXJhdG9yOwogIHR5cGVkZWYgY29uc3RfcG9pbnRlciBjb25z
dF9pdGVyYXRvcjsKICB0eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJz
ZV9pdGVyYXRvcjsKICB0eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4g
Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBz
dGF0aWNfY2FzdDxzaXplX3R5cGU+KC0xKTsKCnByaXZhdGU6CiAgUmVwICpyZXAgKCkgY29uc3Qg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSZXAgKj4oZGF0KSAtIDE7IH0KICB2b2lkIHJlcHVw
IChSZXAgKnApIHsgcmVwICgpLT5yZWxlYXNlICgpOyBkYXQgPSBwLT5kYXRhICgpOyB9CgpwdWJs
aWM6CiAgY29uc3QgY2hhclQqIGRhdGEgKCkgY29uc3QKICAgIHsgcmV0dXJuIHJlcCAoKS0+ZGF0
YSgpOyB9CiAgc2l6ZV90eXBlIGxlbmd0aCAoKSBjb25zdAogICAgeyByZXR1cm4gcmVwICgpLT5s
ZW47IH0KICBzaXplX3R5cGUgc2l6ZSAoKSBjb25zdAogICAgeyByZXR1cm4gcmVwICgpLT5sZW47
IH0KICBzaXplX3R5cGUgY2FwYWNpdHkgKCkgY29uc3QKICAgIHsgcmV0dXJuIHJlcCAoKS0+cmVz
OyB9CiAgc2l6ZV90eXBlIG1heF9zaXplICgpIGNvbnN0CiAgICB7IHJldHVybiAobnBvcyAtIDEp
L3NpemVvZiAoY2hhclQpOyB9CQkgCiAgYm9vbCBlbXB0eSAoKSBjb25zdAogICAgeyByZXR1cm4g
c2l6ZSAoKSA9PSAwOyB9CgogCiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcj0gKGNvbnN0IGJhc2lj
X3N0cmluZyYgc3RyKQogICAgewogICAgICBpZiAoJnN0ciAhPSB0aGlzKSB7IHJlcCAoKS0+cmVs
ZWFzZSAoKTsgZGF0ID0gc3RyLnJlcCAoKS0+Z3JhYiAoKTsgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIGV4cGxpY2l0IGJhc2ljX3N0cmluZyAoKTogZGF0IChuaWxSZXAuZ3JhYiAoKSkg
eyB9CiAgYmFzaWNfc3RyaW5nIChjb25zdCBiYXNpY19zdHJpbmcmIHN0cik6IGRhdCAoc3RyLnJl
cCAoKS0+Z3JhYiAoKSkgeyB9CiAgYmFzaWNfc3RyaW5nIChjb25zdCBiYXNpY19zdHJpbmcmIHN0
ciwgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4gPSBucG9zKQogICAgOiBkYXQgKG5pbFJlcC5n
cmFiICgpKSB7IGFzc2lnbiAoc3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNfc3RyaW5nIChjb25zdCBj
aGFyVCogcywgc2l6ZV90eXBlIG4pCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWdu
IChzLCBuKTsgfQogIGJhc2ljX3N0cmluZyAoY29uc3QgY2hhclQqIHMpCiAgICA6IGRhdCAobmls
UmVwLmdyYWIgKCkpIHsgYXNzaWduIChzKTsgfQogIGJhc2ljX3N0cmluZyAoc2l6ZV90eXBlIG4s
IGNoYXJUIGMpCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChuLCBjKTsgfQoK
ICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9yPgogICAgYmFzaWNfc3RyaW5nKElucHV0SXRl
cmF0b3IgYmVnaW4sIElucHV0SXRlcmF0b3IgZW5kKQoKCgogICAgOiBkYXQgKG5pbFJlcC5ncmFi
ICgpKSB7IGFzc2lnbiAoYmVnaW4sIGVuZCk7IH0KCiAgfmJhc2ljX3N0cmluZyAoKQogICAgeyBy
ZXAgKCktPnJlbGVhc2UgKCk7IH0KCiAgdm9pZCBzd2FwIChiYXNpY19zdHJpbmcgJnMpIHsgY2hh
clQgKmQgPSBkYXQ7IGRhdCA9IHMuZGF0OyBzLmRhdCA9IGQ7IH0KCiAgYmFzaWNfc3RyaW5nJiBh
cHBlbmQgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCwKCQkJc2l6
ZV90eXBlIG4gPSBucG9zKQogICAgeyByZXR1cm4gcmVwbGFjZSAobGVuZ3RoICgpLCAwLCBzdHIs
IHBvcywgbik7IH0KICBiYXNpY19zdHJpbmcmIGFwcGVuZCAoY29uc3QgY2hhclQqIHMsIHNpemVf
dHlwZSBuKQogICAgeyByZXR1cm4gcmVwbGFjZSAobGVuZ3RoICgpLCAwLCBzLCBuKTsgfQogIGJh
c2ljX3N0cmluZyYgYXBwZW5kIChjb25zdCBjaGFyVCogcykKICAgIHsgcmV0dXJuIGFwcGVuZCAo
cywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIGJhc2ljX3N0cmluZyYgYXBwZW5kIChzaXplX3R5
cGUgbiwgY2hhclQgYykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGxlbmd0aCAoKSwgMCwgbiwgYyk7
IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICAgIGJhc2ljX3N0cmluZyYgYXBw
ZW5kKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCkKCgoKICAgIHsgcmV0
dXJuIHJlcGxhY2UgKGllbmQgKCksIGllbmQgKCksIGZpcnN0LCBsYXN0KTsgfQoKICBiYXNpY19z
dHJpbmcmIGFzc2lnbiAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAw
LAoJCQlzaXplX3R5cGUgbiA9IG5wb3MpCiAgICB7IHJldHVybiByZXBsYWNlICgwLCBucG9zLCBz
dHIsIHBvcywgbik7IH0KICBiYXNpY19zdHJpbmcmIGFzc2lnbiAoY29uc3QgY2hhclQqIHMsIHNp
emVfdHlwZSBuKQogICAgeyByZXR1cm4gcmVwbGFjZSAoMCwgbnBvcywgcywgbik7IH0KICBiYXNp
Y19zdHJpbmcmIGFzc2lnbiAoY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiBhc3NpZ24gKHMs
IHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBiYXNpY19zdHJpbmcmIGFzc2lnbiAoc2l6ZV90eXBl
IG4sIGNoYXJUIGMpCiAgICB7IHJldHVybiByZXBsYWNlICgwLCBucG9zLCBuLCBjKTsgfQoKICB0
ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9yPgogICAgYmFzaWNfc3RyaW5nJiBhc3NpZ24oSW5w
dXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KQoKCgogICAgeyByZXR1cm4gcmVw
bGFjZSAoaWJlZ2luICgpLCBpZW5kICgpLCBmaXJzdCwgbGFzdCk7IH0KCiAgYmFzaWNfc3RyaW5n
JiBvcGVyYXRvcj0gKGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gYXNzaWduIChzKTsgfQog
IGJhc2ljX3N0cmluZyYgb3BlcmF0b3I9IChjaGFyVCBjKQogICAgeyByZXR1cm4gYXNzaWduICgx
LCBjKTsgfQoKICBiYXNpY19zdHJpbmcmIG9wZXJhdG9yKz0gKGNvbnN0IGJhc2ljX3N0cmluZyYg
cmhzKQogICAgeyByZXR1cm4gYXBwZW5kIChyaHMpOyB9CiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRv
cis9IChjb25zdCBjaGFyVCogcykKICAgIHsgcmV0dXJuIGFwcGVuZCAocyk7IH0KICBiYXNpY19z
dHJpbmcmIG9wZXJhdG9yKz0gKGNoYXJUIGMpCiAgICB7IHJldHVybiBhcHBlbmQgKDEsIGMpOyB9
CgogIGJhc2ljX3N0cmluZyYgaW5zZXJ0IChzaXplX3R5cGUgcG9zMSwgY29uc3QgYmFzaWNfc3Ry
aW5nJiBzdHIsCgkJCXNpemVfdHlwZSBwb3MyID0gMCwgc2l6ZV90eXBlIG4gPSBucG9zKQogICAg
eyByZXR1cm4gcmVwbGFjZSAocG9zMSwgMCwgc3RyLCBwb3MyLCBuKTsgfQogIGJhc2ljX3N0cmlu
ZyYgaW5zZXJ0IChzaXplX3R5cGUgcG9zLCBjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4pCiAg
ICB7IHJldHVybiByZXBsYWNlIChwb3MsIDAsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBpbnNl
cnQgKHNpemVfdHlwZSBwb3MsIGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gaW5zZXJ0IChw
b3MsIHMsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBiYXNpY19zdHJpbmcmIGluc2VydCAoc2l6
ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7IHJldHVybiByZXBsYWNlIChw
b3MsIDAsIG4sIGMpOyB9CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIHAsIGNoYXJUIGMpCiAg
ICB7IHNpemVfdHlwZSBfX28gPSBwIC0gaWJlZ2luICgpOwogICAgICBpbnNlcnQgKHAgLSBpYmVn
aW4gKCksIDEsIGMpOyBzZWxmaXNoICgpOwogICAgICByZXR1cm4gaWJlZ2luICgpICsgX19vOyB9
CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIHAsIHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAg
eyBzaXplX3R5cGUgX19vID0gcCAtIGliZWdpbiAoKTsKICAgICAgaW5zZXJ0IChwIC0gaWJlZ2lu
ICgpLCBuLCBjKTsgc2VsZmlzaCAoKTsKICAgICAgcmV0dXJuIGliZWdpbiAoKSArIF9fbzsgfQoK
ICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBpbnNlcnQoaXRlcmF0b3Ig
cCwgSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KQoKCgogICAgeyByZXBs
YWNlIChwLCBwLCBmaXJzdCwgbGFzdCk7IH0KCiAgYmFzaWNfc3RyaW5nJiBlcmFzZSAoc2l6ZV90
eXBlIHBvcyA9IDAsIHNpemVfdHlwZSBuID0gbnBvcykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKHBv
cywgbiwgKHNpemVfdHlwZSkwLCAoY2hhclQpMCk7IH0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRv
ciBwKQogICAgeyBzaXplX3R5cGUgX19vID0gcCAtIGJlZ2luKCk7CiAgICAgIHJlcGxhY2UgKF9f
bywgMSwgKHNpemVfdHlwZSkwLCAoY2hhclQpMCk7IHNlbGZpc2ggKCk7CiAgICAgIHJldHVybiBp
YmVnaW4oKSArIF9fbzsgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIGYsIGl0ZXJhdG9yIGwp
CiAgICB7IHNpemVfdHlwZSBfX28gPSBmIC0gaWJlZ2luKCk7CiAgICAgIHJlcGxhY2UgKF9fbywg
bC1mLCAoc2l6ZV90eXBlKTAsIChjaGFyVCkwKTtzZWxmaXNoICgpOwogICAgICByZXR1cm4gaWJl
Z2luKCkgKyBfX287IH0KCiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5cGUgcG9zMSwg
c2l6ZV90eXBlIG4xLCBjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwKCQkJIHNpemVfdHlwZSBwb3My
ID0gMCwgc2l6ZV90eXBlIG4yID0gbnBvcyk7CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXpl
X3R5cGUgcG9zLCBzaXplX3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzLAoJCQkgc2l6ZV90eXBlIG4y
KTsKICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSwg
Y29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIG4xLCBzLCB0cmFpdHM6
Omxlbmd0aCAocykpOyB9CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5cGUgcG9zLCBz
aXplX3R5cGUgbjEsIHNpemVfdHlwZSBuMiwgY2hhclQgYyk7CiAgYmFzaWNfc3RyaW5nJiByZXBs
YWNlIChzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIHsgcmV0dXJuIHJl
cGxhY2UgKHBvcywgbiwgMSwgYyk7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9y
IGkxLCBpdGVyYXRvciBpMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIpCiAgICB7IHJldHVybiBy
ZXBsYWNlIChpMSAtIGliZWdpbiAoKSwgaTIgLSBpMSwgc3RyKTsgfQogIGJhc2ljX3N0cmluZyYg
cmVwbGFjZSAoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGkyLCBjb25zdCBjaGFyVCogcywgc2l6ZV90
eXBlIG4pCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGliZWdpbiAoKSwgaTIgLSBpMSwgcywg
bik7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBpMiwg
Y29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGliZWdpbiAoKSwgaTIg
LSBpMSwgcyk7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRv
ciBpMiwgc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGli
ZWdpbiAoKSwgaTIgLSBpMSwgbiwgYyk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRv
cj4KICAgIGJhc2ljX3N0cmluZyYgcmVwbGFjZShpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsCgkJ
CSAgSW5wdXRJdGVyYXRvciBqMSwgSW5wdXRJdGVyYXRvciBqMik7CgoKCgoKcHJpdmF0ZToKICBz
dGF0aWMgY2hhclQgZW9zICgpIHsgcmV0dXJuIHRyYWl0czo6ZW9zICgpOyB9CiAgdm9pZCB1bmlx
dWUgKCkgeyBpZiAocmVwICgpLT5yZWYgPiAxKSBhbGxvYyAobGVuZ3RoICgpLCB0cnVlKTsgfQog
IHZvaWQgc2VsZmlzaCAoKSB7IHVuaXF1ZSAoKTsgcmVwICgpLT5zZWxmaXNoID0gdHJ1ZTsgfQoK
cHVibGljOgogIGNoYXJUIG9wZXJhdG9yW10gKHNpemVfdHlwZSBwb3MpIGNvbnN0CiAgICB7CiAg
ICAgIGlmIChwb3MgPT0gbGVuZ3RoICgpKQoJcmV0dXJuIGVvcyAoKTsKICAgICAgcmV0dXJuIGRh
dGEgKClbcG9zXTsKICAgIH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10gKHNpemVfdHlwZSBwb3Mp
CiAgICB7IHNlbGZpc2ggKCk7IHJldHVybiAoKnJlcCAoKSlbcG9zXTsgfQoKICByZWZlcmVuY2Ug
YXQgKHNpemVfdHlwZSBwb3MpCiAgICB7CiAgICAgIGRvIHsgaWYgKCBwb3MgPj0gbGVuZ3RoICgp
ICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MgPj0gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDApIDsKICAg
ICAgcmV0dXJuICgqdGhpcylbcG9zXTsKICAgIH0KICBjb25zdF9yZWZlcmVuY2UgYXQgKHNpemVf
dHlwZSBwb3MpIGNvbnN0CiAgICB7CiAgICAgIGRvIHsgaWYgKCBwb3MgPj0gbGVuZ3RoICgpICkg
X19vdXRfb2ZfcmFuZ2UgKCJwb3MgPj0gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDApIDsKICAgICAg
cmV0dXJuIGRhdGEgKClbcG9zXTsKICAgIH0KCnByaXZhdGU6CiAgdm9pZCB0ZXJtaW5hdGUgKCkg
Y29uc3QKICAgIHsgdHJhaXRzOjphc3NpZ24gKCgqcmVwICgpKVtsZW5ndGggKCldLCBlb3MgKCkp
OyB9CgpwdWJsaWM6CiAgY29uc3QgY2hhclQqIGNfc3RyICgpIGNvbnN0CiAgICB7IGlmIChsZW5n
dGggKCkgPT0gMCkgcmV0dXJuICIiOyB0ZXJtaW5hdGUgKCk7IHJldHVybiBkYXRhICgpOyB9CiAg
dm9pZCByZXNpemUgKHNpemVfdHlwZSBuLCBjaGFyVCBjKTsKICB2b2lkIHJlc2l6ZSAoc2l6ZV90
eXBlIG4pCiAgICB7IHJlc2l6ZSAobiwgZW9zICgpKTsgfQogIHZvaWQgcmVzZXJ2ZSAoc2l6ZV90
eXBlKSB7IH0KCiAgc2l6ZV90eXBlIGNvcHkgKGNoYXJUKiBzLCBzaXplX3R5cGUgbiwgc2l6ZV90
eXBlIHBvcyA9IDApIGNvbnN0OwoKICBzaXplX3R5cGUgZmluZCAoY29uc3QgYmFzaWNfc3RyaW5n
JiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZCAoc3RyLmRh
dGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90eXBlIGZpbmQgKGNvbnN0IGNoYXJU
KiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBlIGZpbmQg
KGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZp
bmQgKHMsIHBvcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSBmaW5kIChjaGFy
VCBjLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3Q7CgogIHNpemVfdHlwZSByZmluZCAoY29uc3Qg
YmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1
cm4gcmZpbmQgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBy
ZmluZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsK
ICBzaXplX3R5cGUgcmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gbnBvcykg
Y29uc3QKICAgIHsgcmV0dXJuIHJmaW5kIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0K
ICBzaXplX3R5cGUgcmZpbmQgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdDsK
CiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfb2YgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXpl
X3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfZmlyc3Rfb2YgKHN0ci5kYXRh
KCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X29mIChjb25z
dCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlw
ZSBmaW5kX2ZpcnN0X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0
CiAgICB7IHJldHVybiBmaW5kX2ZpcnN0X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7
IH0KICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IDAp
IGNvbnN0CiAgICB7IHJldHVybiBmaW5kIChjLCBwb3MpOyB9CgogIHNpemVfdHlwZSBmaW5kX2xh
c3Rfb2YgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29u
c3QKICAgIHsgcmV0dXJuIGZpbmRfbGFzdF9vZiAoc3RyLmRhdGEoKSwgcG9zLCBzdHIubGVuZ3Ro
KCkpOyB9CiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlw
ZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjb25z
dCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiBmaW5k
X2xhc3Rfb2YgKHMsIHBvcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSBmaW5k
X2xhc3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1
cm4gcmZpbmQgKGMsIHBvcyk7IH0KCiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfbm90X29mIChjb25z
dCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVy
biBmaW5kX2ZpcnN0X25vdF9vZiAoc3RyLmRhdGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAg
c2l6ZV90eXBlIGZpbmRfZmlyc3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBv
cywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X25vdF9vZiAoY29u
c3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9m
aXJzdF9ub3Rfb2YgKHMsIHBvcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSBm
aW5kX2ZpcnN0X25vdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0OwoKICBz
aXplX3R5cGUgZmluZF9sYXN0X25vdF9vZiAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVf
dHlwZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9sYXN0X25vdF9vZiAoc3Ry
LmRhdGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9ub3Rf
b2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAg
c2l6ZV90eXBlIGZpbmRfbGFzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9z
ID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfbGFzdF9ub3Rfb2YgKHMsIHBvcywgdHJh
aXRzOjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSBmaW5kX2xhc3Rfbm90X29mIChjaGFyVCBj
LCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3Q7CgogIGJhc2ljX3N0cmluZyBzdWJzdHIgKHNp
emVfdHlwZSBwb3MgPSAwLCBzaXplX3R5cGUgbiA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiBi
YXNpY19zdHJpbmcgKCp0aGlzLCBwb3MsIG4pOyB9CgogIGludCBjb21wYXJlIChjb25zdCBiYXNp
Y19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAsIHNpemVfdHlwZSBuID0gbnBvcykgY29u
c3Q7CiAgIAogIGludCBjb21wYXJlIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6
ZV90eXBlIG4pIGNvbnN0OwogIGludCBjb21wYXJlIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBl
IHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBjb21wYXJlIChzLCBwb3MsIHRyYWl0czo6bGVu
Z3RoIChzKSk7IH0KCiAgaXRlcmF0b3IgYmVnaW4gKCkgeyBzZWxmaXNoICgpOyByZXR1cm4gJigq
dGhpcylbMF07IH0KICBpdGVyYXRvciBlbmQgKCkgeyBzZWxmaXNoICgpOyByZXR1cm4gJigqdGhp
cylbbGVuZ3RoICgpXTsgfQoKcHJpdmF0ZToKICBpdGVyYXRvciBpYmVnaW4gKCkgY29uc3QgeyBy
ZXR1cm4gJigqcmVwICgpKVswXTsgfQogIGl0ZXJhdG9yIGllbmQgKCkgY29uc3QgeyByZXR1cm4g
JigqcmVwICgpKVtsZW5ndGggKCldOyB9CgpwdWJsaWM6CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4g
KCkgY29uc3QgeyByZXR1cm4gaWJlZ2luICgpOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kICgpIGNv
bnN0IHsgcmV0dXJuIGllbmQgKCk7IH0KCiAgcmV2ZXJzZV9pdGVyYXRvciAgICAgICByYmVnaW4o
KSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yIChlbmQgKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9p
dGVyYXRvciByYmVnaW4oKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRv
ciAoZW5kICgpKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgICAgICAgcmVuZCgpIHsgcmV0dXJuIHJl
dmVyc2VfaXRlcmF0b3IgKGJlZ2luICgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVu
ZCgpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIChiZWdpbiAoKSk7
IH0KCnByaXZhdGU6CiAgdm9pZCBhbGxvYyAoc2l6ZV90eXBlIHNpemUsIGJvb2wgc2F2ZSk7CiAg
c3RhdGljIHNpemVfdHlwZSBfZmluZCAoY29uc3QgY2hhclQqIHB0ciwgY2hhclQgYywgc2l6ZV90
eXBlIHhwb3MsIHNpemVfdHlwZSBsZW4pOwogIGlubGluZSBib29sIGNoZWNrX3JlYWxsb2MgKHNp
emVfdHlwZSBzKSBjb25zdDsKCiAgc3RhdGljIFJlcCBuaWxSZXA7CiAgY2hhclQgKmRhdDsKfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPiB0
ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+JiBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Ogpy
ZXBsYWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIElucHV0SXRlcmF0b3IgajEsIElucHV0
SXRlcmF0b3IgajIpCgoKCgoKewogIGNvbnN0IHNpemVfdHlwZSBsZW4gPSBsZW5ndGggKCk7CiAg
c2l6ZV90eXBlIHBvcyA9IGkxIC0gaWJlZ2luICgpOwogIHNpemVfdHlwZSBuMSA9IGkyIC0gaTE7
CiAgc2l6ZV90eXBlIG4yID0gajIgLSBqMTsKCiAgZG8geyBpZiAoIHBvcyA+IGxlbiApIF9fb3V0
X29mX3JhbmdlICgicG9zID4gbGVuIik7IH0gd2hpbGUgKDApIDsKICBpZiAobjEgPiBsZW4gLSBw
b3MpCiAgICBuMSA9IGxlbiAtIHBvczsKICBkbyB7IGlmICggbGVuIC0gbjEgPiBtYXhfc2l6ZSAo
KSAtIG4yICkgX19sZW5ndGhfZXJyb3IgKCJsZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIiKTsg
fSB3aGlsZSAoMCkgOwogIHNpemVfdCBuZXdsZW4gPSBsZW4gLSBuMSArIG4yOwoKICBpZiAoY2hl
Y2tfcmVhbGxvYyAobmV3bGVuKSkKICAgIHsKICAgICAgUmVwICpwID0gUmVwOjpjcmVhdGUgKG5l
d2xlbik7CiAgICAgIHAtPmNvcHkgKDAsIGRhdGEgKCksIHBvcyk7CiAgICAgIHAtPmNvcHkgKHBv
cyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICBmb3Ig
KDsgajEgIT0gajI7ICsrajEsICsrcG9zKQoJdHJhaXRzOjphc3NpZ24gKCgqcClbcG9zXSwgKmox
KTsKICAgICAgcmVwdXAgKHApOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgcmVwICgpLT5tb3Zl
IChwb3MgKyBuMiwgZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAg
Zm9yICg7IGoxICE9IGoyOyArK2oxLCArK3BvcykKCXRyYWl0czo6YXNzaWduICgoKnJlcCAoKSlb
cG9zXSwgKmoxKTsKICAgIH0KICByZXAgKCktPmxlbiA9IG5ld2xlbjsKCiAgcmV0dXJuICp0aGlz
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y
PgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Cm9wZXJhdG9y
KyAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsCgkg
ICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewog
IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiBzdHIgKGxocyk7CiAgc3Ry
LmFwcGVuZCAocmhzKTsKICByZXR1cm4gc3RyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs
YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwg
dHJhaXRzLCBBbGxvY2F0b3I+Cm9wZXJhdG9yKyAoY29uc3QgY2hhclQqIGxocywgY29uc3QgYmFz
aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICBiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gc3RyIChsaHMpOwogIHN0ci5hcHBlbmQgKHJo
cyk7CiAgcmV0dXJuIHN0cjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs
IGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPgpvcGVyYXRvcisgKGNoYXJUIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwg
dHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj4gc3RyICgxLCBsaHMpOwogIHN0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIHN0
cjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv
cj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPgpvcGVyYXRv
cisgKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBj
b25zdCBjaGFyVCogcmhzKQp7CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+IHN0ciAobGhzKTsKICBzdHIuYXBwZW5kIChyaHMpOwogIHJldHVybiBzdHI7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4Kb3BlcmF0b3IrIChjb25zdCBi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY2hhclQgcmhzKQp7
CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAobGhzKTsKICBz
dHIuYXBwZW5kICgxLCByaHMpOwogIHJldHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFy
VCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPT0g
KGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAoJICAg
IGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAg
cmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA9PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJU
LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PSAo
Y29uc3QgY2hhclQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxv
Y2F0b3I+JiByaHMpCnsKICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpID09IDApOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUg
Ym9vbApvcGVyYXRvcj09IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJo
cykgPT0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB
bGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yIT0gKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0
IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJu
IChyaHMuY29tcGFyZSAobGhzKSAhPSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFz
cyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPSAoY29uc3Qg
YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJU
KiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpICE9IDApOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApv
cGVyYXRvcjwgKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYg
bGhzLAoJICAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYg
cmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA8IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVy
YXRvcjwgKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0
cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSA+IDApOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpp
bmxpbmUgYm9vbApvcGVyYXRvcjwgKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFy
ZSAocmhzKSA8IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xh
c3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj4gKGNvbnN0IGNoYXJUKiBsaHMsIGNv
bnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0
dXJuIChyaHMuY29tcGFyZSAobGhzKSA8IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs
YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj4gKGNvbnN0
IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFy
VCogcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA+IDApOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApv
cGVyYXRvcjw9IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgPj0g
MCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0
b3I+CmlubGluZSBib29sCm9wZXJhdG9yPD0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMu
Y29tcGFyZSAocmhzKSA8PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp
dHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PSAoY29uc3QgY2hhclQq
IGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMp
CnsKICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpIDw9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
Y2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRv
cj49IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywg
Y29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPj0gMCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+Cmlu
bGluZSBib29sCm9wZXJhdG9yIT0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPiYgbGhzLAoJICAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSAhPSAwKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5s
aW5lIGJvb2wKb3BlcmF0b3I+IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs
bG9jYXRvcj4mIGxocywKCSAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA+IDApOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUg
Ym9vbApvcGVyYXRvcjw9IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPD0gMCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBi
b29sCm9wZXJhdG9yPj0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh
dG9yPiYgbGhzLAoJICAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh
dG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA+PSAwKTsKfQoKY2xhc3Mg
aXN0cmVhbTsgY2xhc3Mgb3N0cmVhbTsKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp
dHMsIGNsYXNzIEFsbG9jYXRvcj4gaXN0cmVhbSYKb3BlcmF0b3I+PiAoaXN0cmVhbSYsIGJhc2lj
X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYpOwp0ZW1wbGF0ZSA8Y2xhc3MgY2hh
clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPiBvc3RyZWFtJgpvcGVyYXRvcjw8IChv
c3RyZWFtJiwgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Jik7
CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+IGlz
dHJlYW0mCmdldGxpbmUgKGlzdHJlYW0mLCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs
bG9jYXRvcj4mLCBjaGFyVCBkZWxpbSA9ICdcbicpOwoKfSAgCgojIDEgIi91c3IvaW5jbHVkZS9n
KystMi9zdGQvYmFzdHJpbmcuY2MiIDEgMwogCiAKCiAKIAogCiAKIAoKIAogCiAKIAoKIAogCiAK
CiAKIAogCiAKIAoKIAogCgpleHRlcm4gIkMrKyIgewp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs
YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9pZCAqIGJhc2ljX3N0cmluZyA8
Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKb3BlcmF0b3IgbmV3IChzaXplX3Qgcywg
c2l6ZV90IGV4dHJhKQp7CiAgcmV0dXJuIEFsbG9jYXRvcjo6YWxsb2NhdGUocyArIGV4dHJhICog
c2l6ZW9mIChjaGFyVCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywg
Y2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9pZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj46OlJlcDo6Cm9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqIHB0cikKewogIEFsbG9j
YXRvcjo6ZGVhbGxvY2F0ZShwdHIsIHNpemVvZihSZXApICsKCQkJcmVpbnRlcnByZXRfY2FzdDxS
ZXAgKj4ocHRyKS0+cmVzICoKCQkJc2l6ZW9mIChjaGFyVCkpOyAKfQoKdGVtcGxhdGUgPGNsYXNz
IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHNpemVfdCBiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CmZyb2Jfc2l6ZSAoc2l6
ZV90IHMpCnsKICBzaXplX3QgaSA9IDE2OwogIHdoaWxlIChpIDwgcykgaSAqPSAyOwogIHJldHVy
biBpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXAg
KgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CmNyZWF0ZSAo
c2l6ZV90IGV4dHJhKQp7CiAgZXh0cmEgPSBmcm9iX3NpemUgKGV4dHJhICsgMSk7CiAgUmVwICpw
ID0gbmV3IChleHRyYSkgUmVwOwogIHAtPnJlcyA9IGV4dHJhOwogIHAtPnJlZiA9IDE7CiAgcC0+
c2VsZmlzaCA9IGZhbHNlOwogIHJldHVybiBwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs
YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpjaGFyVCAqIGJhc2ljX3N0cmluZyA8Y2hhclQs
IHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKY2xvbmUgKCkKewogIFJlcCAqcCA9IFJlcDo6Y3Jl
YXRlIChsZW4pOwogIHAtPmNvcHkgKDAsIGRhdGEgKCksIGxlbik7CiAgcC0+bGVuID0gbGVuOwog
IHJldHVybiBwLT5kYXRhICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0
cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp
dHMsIEFsbG9jYXRvcj46OlJlcDo6CmV4Y2Vzc19zbG9wIChzaXplX3Qgcywgc2l6ZV90IHIpCnsK
ICByZXR1cm4gMiAqIChzIDw9IDE2ID8gMTYgOiBzKSA8IHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBj
aGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sIGJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmNoZWNrX3JlYWxsb2MgKGJhc2ljX3N0
cmluZzo6c2l6ZV90eXBlIHMpIGNvbnN0CnsKICBzICs9IHNpemVvZiAoY2hhclQpOwogIHJlcCAo
KS0+c2VsZmlzaCA9IGZhbHNlOwogIHJldHVybiAocmVwICgpLT5yZWYgPiAxCgkgIHx8IHMgPiBj
YXBhY2l0eSAoKQoJICB8fCBSZXA6OmV4Y2Vzc19zbG9wIChzLCBjYXBhY2l0eSAoKSkpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgp2b2lk
IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmFsbG9jIChiYXNpY19z
dHJpbmc6OnNpemVfdHlwZSBzaXplLCBib29sIHNhdmUpCnsKICBpZiAoISBjaGVja19yZWFsbG9j
IChzaXplKSkKICAgIHJldHVybjsKCiAgUmVwICpwID0gUmVwOjpjcmVhdGUgKHNpemUpOwoKICBp
ZiAoc2F2ZSkKICAgIHsKICAgICAgcC0+Y29weSAoMCwgZGF0YSAoKSwgbGVuZ3RoICgpKTsKICAg
ICAgcC0+bGVuID0gbGVuZ3RoICgpOwogICAgfQogIGVsc2UKICAgIHAtPmxlbiA9IDA7CgogIHJl
cHVwIChwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs
bG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JgpiYXNpY19z
dHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZXBsYWNlIChzaXplX3R5cGUgcG9z
MSwgc2l6ZV90eXBlIG4xLAoJIGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9z
Miwgc2l6ZV90eXBlIG4yKQp7CiAgY29uc3Qgc2l6ZV90IGxlbjIgPSBzdHIubGVuZ3RoICgpOwoK
ICBpZiAocG9zMSA9PSAwICYmIG4xID49IGxlbmd0aCAoKSAmJiBwb3MyID09IDAgJiYgbjIgPj0g
bGVuMikKICAgIHJldHVybiBvcGVyYXRvcj0gKHN0cik7CgogIGRvIHsgaWYgKCBwb3MyID4gbGVu
MiApIF9fb3V0X29mX3JhbmdlICgicG9zMiA+IGxlbjIiKTsgfSB3aGlsZSAoMCkgOwoKICBpZiAo
bjIgPiBsZW4yIC0gcG9zMikKICAgIG4yID0gbGVuMiAtIHBvczI7CgogIHJldHVybiByZXBsYWNl
IChwb3MxLCBuMSwgc3RyLmRhdGEgKCkgKyBwb3MyLCBuMik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBj
aGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSB2b2lkIGJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKY29weSAoc2l6ZV90IHBvcywg
Y29uc3QgY2hhclQgKnMsIHNpemVfdCBuKQp7CiAgaWYgKG4pCiAgICB0cmFpdHM6OmNvcHkgKGRh
dGEgKCkgKyBwb3MsIHMsIG4pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0
cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9pZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp
dHMsIEFsbG9jYXRvcj46OlJlcDo6Cm1vdmUgKHNpemVfdCBwb3MsIGNvbnN0IGNoYXJUICpzLCBz
aXplX3QgbikKewogIGlmIChuKQogICAgdHJhaXRzOjptb3ZlIChkYXRhICgpICsgcG9zLCBzLCBu
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv
cj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JgpiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZXBsYWNlIChzaXplX3R5cGUgcG9zLCBzaXpl
X3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbjIpCnsKICBjb25zdCBzaXplX3R5
cGUgbGVuID0gbGVuZ3RoICgpOwogIGRvIHsgaWYgKCBwb3MgPiBsZW4gKSBfX291dF9vZl9yYW5n
ZSAoInBvcyA+IGxlbiIpOyB9IHdoaWxlICgwKSA7CiAgaWYgKG4xID4gbGVuIC0gcG9zKQogICAg
bjEgPSBsZW4gLSBwb3M7CiAgZG8geyBpZiAoIGxlbiAtIG4xID4gbWF4X3NpemUgKCkgLSBuMiAp
IF9fbGVuZ3RoX2Vycm9yICgibGVuIC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yIik7IH0gd2hpbGUg
KDApIDsKICBzaXplX3QgbmV3bGVuID0gbGVuIC0gbjEgKyBuMjsKCiAgaWYgKGNoZWNrX3JlYWxs
b2MgKG5ld2xlbikpCiAgICB7CiAgICAgIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChuZXdsZW4pOwog
ICAgICBwLT5jb3B5ICgwLCBkYXRhICgpLCBwb3MpOwogICAgICBwLT5jb3B5IChwb3MgKyBuMiwg
ZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAgcC0+Y29weSAocG9z
LCBzLCBuMik7CiAgICAgIHJlcHVwIChwKTsKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIHJlcCAo
KS0+bW92ZSAocG9zICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7
CiAgICAgIHJlcCAoKS0+Y29weSAocG9zLCBzLCBuMik7CiAgICB9CiAgcmVwICgpLT5sZW4gPSBu
ZXdsZW47CgogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0
cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwg
dHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6OgpzZXQgKHNpemVfdCBwb3MsIGNvbnN0IGNoYXJUIGMs
IHNpemVfdCBuKQp7CiAgdHJhaXRzOjpzZXQgIChkYXRhICgpICsgcG9zLCBjLCBuKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNf
c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj46OgpyZXBsYWNlIChzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbjEs
IHNpemVfdHlwZSBuMiwgY2hhclQgYykKewogIGNvbnN0IHNpemVfdCBsZW4gPSBsZW5ndGggKCk7
CiAgZG8geyBpZiAoIHBvcyA+IGxlbiApIF9fb3V0X29mX3JhbmdlICgicG9zID4gbGVuIik7IH0g
d2hpbGUgKDApIDsKICBpZiAobjEgPiBsZW4gLSBwb3MpCiAgICBuMSA9IGxlbiAtIHBvczsKICBk
byB7IGlmICggbGVuIC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yICkgX19sZW5ndGhfZXJyb3IgKCJs
ZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIiKTsgfSB3aGlsZSAoMCkgOwogIHNpemVfdCBuZXds
ZW4gPSBsZW4gLSBuMSArIG4yOwoKICBpZiAoY2hlY2tfcmVhbGxvYyAobmV3bGVuKSkKICAgIHsK
ICAgICAgUmVwICpwID0gUmVwOjpjcmVhdGUgKG5ld2xlbik7CiAgICAgIHAtPmNvcHkgKDAsIGRh
dGEgKCksIHBvcyk7CiAgICAgIHAtPmNvcHkgKHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEs
IGxlbiAtIChwb3MgKyBuMSkpOwogICAgICBwLT5zZXQgIChwb3MsIGMsIG4yKTsKICAgICAgcmVw
dXAgKHApOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgcmVwICgpLT5tb3ZlIChwb3MgKyBuMiwg
ZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAgcmVwICgpLT5zZXQg
IChwb3MsIGMsIG4yKTsKICAgIH0KICByZXAgKCktPmxlbiA9IG5ld2xlbjsKCiAgcmV0dXJuICp0
aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgp2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJlc2l6
ZSAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpCnsKICBkbyB7IGlmICggbiA+IG1heF9zaXplICgpICkg
X19sZW5ndGhfZXJyb3IgKCJuID4gbWF4X3NpemUgKCkiKTsgfSB3aGlsZSAoMCkgOwoKICBpZiAo
biA+IGxlbmd0aCAoKSkKICAgIGFwcGVuZCAobiAtIGxlbmd0aCAoKSwgYyk7CiAgZWxzZQogICAg
ZXJhc2UgKG4pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg
QWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVf
dHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Ogpjb3B5IChjaGFy
VCogcywgc2l6ZV90eXBlIG4sIHNpemVfdHlwZSBwb3MpIGNvbnN0CnsKICBkbyB7IGlmICggcG9z
ID4gbGVuZ3RoICgpICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MgPiBsZW5ndGggKCkiKTsgfSB3aGls
ZSAoMCkgOwoKICBpZiAobiA+IGxlbmd0aCAoKSAtIHBvcykKICAgIG4gPSBsZW5ndGggKCkgLSBw
b3M7CgogIHRyYWl0czo6Y29weSAocywgZGF0YSAoKSArIHBvcywgbik7CiAgcmV0dXJuIG47Cn0K
CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBz
aXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIHNpemVfdCB4cG9zID0gcG9zOwog
IGZvciAoOyB4cG9zICsgbiA8PSBsZW5ndGggKCk7ICsreHBvcykKICAgIGlmICh0cmFpdHM6OmVx
IChkYXRhICgpIFt4cG9zXSwgKnMpCgkmJiB0cmFpdHM6OmNvbXBhcmUgKGRhdGEgKCkgKyB4cG9z
LCBzLCBuKSA9PSAwKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxh
dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6Cl9maW5kIChjb25zdCBjaGFyVCogcHRy
LCBjaGFyVCBjLCBzaXplX3R5cGUgeHBvcywgc2l6ZV90eXBlIGxlbikKewogIGZvciAoOyB4cG9z
IDwgbGVuOyArK3hwb3MpCiAgICBpZiAodHJhaXRzOjplcSAocHRyIFt4cG9zXSwgYykpCiAgICAg
IHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs
YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj46OgpmaW5kIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zKSBjb25zdAp7CiAgcmV0dXJuIF9m
aW5kIChkYXRhICgpLCBjLCBwb3MsIGxlbmd0aCAoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFy
VCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPjo6CnJmaW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90
eXBlIG4pIGNvbnN0CnsKICBpZiAobiA+IGxlbmd0aCAoKSkKICAgIHJldHVybiBucG9zOwoKICBz
aXplX3QgeHBvcyA9IGxlbmd0aCAoKSAtIG47CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0g
cG9zOwoKICBmb3IgKCsreHBvczsgeHBvcy0tID4gMDsgKQogICAgaWYgKHRyYWl0czo6ZXEgKGRh
dGEgKCkgW3hwb3NdLCAqcykKCSYmIHRyYWl0czo6Y29tcGFyZSAoZGF0YSAoKSArIHhwb3MsIHMs
IG4pID09IDApCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZmluZCAoY2hhclQgYywgc2l6ZV90eXBlIHBvcykgY29u
c3QKewogIGlmICgxID4gbGVuZ3RoICgpKQogICAgcmV0dXJuIG5wb3M7CgogIHNpemVfdCB4cG9z
ID0gbGVuZ3RoICgpIC0gMTsKICBpZiAoeHBvcyA+IHBvcykKICAgIHhwb3MgPSBwb3M7CgogIGZv
ciAoKyt4cG9zOyB4cG9zLS0gPiAwOyApCiAgICBpZiAodHJhaXRzOjplcSAoZGF0YSAoKSBbeHBv
c10sIGMpKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNs
YXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwg
dHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9maXJzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVf
dHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgc2l6ZV90IHhwb3MgPSBwb3M7CiAgZm9y
ICg7IHhwb3MgPCBsZW5ndGggKCk7ICsreHBvcykKICAgIGlmIChfZmluZCAocywgZGF0YSAoKSBb
eHBvc10sIDAsIG4pICE9IG5wb3MpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19z
dHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2xhc3Rfb2YgKGNvbnN0IGNo
YXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIGlmIChsZW5ndGgo
KSA9PSAwKQogICAgcmV0dXJuIG5wb3M7CiAgc2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSAxOwog
IGlmICh4cG9zID4gcG9zKQogICAgeHBvcyA9IHBvczsKICBmb3IgKCsreHBvczsgeHBvcy0tID4g
MDspCiAgICBpZiAoX2ZpbmQgKHMsIGRhdGEgKCkgW3hwb3NdLCAwLCBuKSAhPSBucG9zKQogICAg
ICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBj
bGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxv
Y2F0b3I+OjoKZmluZF9maXJzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9z
LCBzaXplX3R5cGUgbikgY29uc3QKewogIHNpemVfdCB4cG9zID0gcG9zOwogIGZvciAoOyB4cG9z
IDwgbGVuZ3RoICgpOyArK3hwb3MpCiAgICBpZiAoX2ZpbmQgKHMsIGRhdGEgKCkgW3hwb3NdLCAw
LCBuKSA9PSBucG9zKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxh
dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9maXJzdF9ub3Rfb2YgKGNoYXJUIGMsIHNp
emVfdHlwZSBwb3MpIGNvbnN0CnsKICBzaXplX3QgeHBvcyA9IHBvczsKICBmb3IgKDsgeHBvcyA8
IGxlbmd0aCAoKTsgKyt4cG9zKQogICAgaWYgKHRyYWl0czo6bmUgKGRhdGEgKCkgW3hwb3NdLCBj
KSkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBj
aGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQs
IHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0
cywgQWxsb2NhdG9yPjo6CmZpbmRfbGFzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5
cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIGlmIChsZW5ndGgoKSA9PSAwKQogICAgcmV0
dXJuIG5wb3M7CiAgc2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSAxOwogIGlmICh4cG9zID4gcG9z
KQogICAgeHBvcyA9IHBvczsKICBmb3IgKCsreHBvczsgeHBvcy0tID4gMDspCiAgICBpZiAoX2Zp
bmQgKHMsIGRhdGEgKCkgW3hwb3NdLCAwLCBuKSA9PSBucG9zKQogICAgICByZXR1cm4geHBvczsK
ICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs
YXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Ojpz
aXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9s
YXN0X25vdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcykgY29uc3QKewogIGlmIChsZW5ndGgo
KSA9PSAwKQogICAgcmV0dXJuIG5wb3M7CiAgc2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSAxOwog
IGlmICh4cG9zID4gcG9zKQogICAgeHBvcyA9IHBvczsKICBmb3IgKCsreHBvczsgeHBvcy0tID4g
MDspCiAgICBpZiAodHJhaXRzOjpuZSAoZGF0YSAoKSBbeHBvc10sIGMpKQogICAgICByZXR1cm4g
eHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp
dHMsIGNsYXNzIEFsbG9jYXRvcj4KaW50IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPjo6CmNvbXBhcmUgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9z
LCBzaXplX3R5cGUgbikgY29uc3QKewogIGRvIHsgaWYgKCBwb3MgPiBsZW5ndGggKCkgKSBfX291
dF9vZl9yYW5nZSAoInBvcyA+IGxlbmd0aCAoKSIpOyB9IHdoaWxlICgwKSA7CgogIHNpemVfdCBy
bGVuID0gbGVuZ3RoICgpIC0gcG9zOwogIGlmIChybGVuID4gbikKICAgIHJsZW4gPSBuOwogIGlm
IChybGVuID4gc3RyLmxlbmd0aCAoKSkKICAgIHJsZW4gPSBzdHIubGVuZ3RoICgpOwogIGludCBy
ID0gdHJhaXRzOjpjb21wYXJlIChkYXRhICgpICsgcG9zLCBzdHIuZGF0YSAoKSwgcmxlbik7CiAg
aWYgKHIgIT0gMCkKICAgIHJldHVybiByOwogIGlmIChybGVuID09IG4pCiAgICByZXR1cm4gMDsK
ICByZXR1cm4gKGxlbmd0aCAoKSAtIHBvcykgLSBzdHIubGVuZ3RoICgpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbnQgYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKY29tcGFyZSAoY29uc3QgY2hhclQqIHMs
IHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgZG8geyBpZiAoIHBvcyA+IGxl
bmd0aCAoKSApIF9fb3V0X29mX3JhbmdlICgicG9zID4gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDAp
IDsKCiAgc2l6ZV90IHJsZW4gPSBsZW5ndGggKCkgLSBwb3M7CiAgaWYgKHJsZW4gPiBuKQogICAg
cmxlbiA9IG47CiAgaW50IHIgPSB0cmFpdHM6OmNvbXBhcmUgKGRhdGEgKCkgKyBwb3MsIHMsIHJs
ZW4pOwogIGlmIChyICE9IDApCiAgICByZXR1cm4gcjsKICByZXR1cm4gKGxlbmd0aCAoKSAtIHBv
cykgLSBuOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB
bGxvY2F0b3I+CmlzdHJlYW0gJgpvcGVyYXRvcj4+IChpc3RyZWFtICZpcywgYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+ICZzKQp7CiAgaW50IHcgPSBpcy53aWR0aCAoMCk7
CiAgaWYgKGlzLmlwZngwICgpKQogICAgewogICAgICByZWdpc3RlciBzdHJlYW1idWYgKnNiID0g
aXMucmRidWYgKCk7CiAgICAgIHMucmVzaXplICgwKTsKICAgICAgd2hpbGUgKDEpCgl7CgkgIGlu
dCBjaCA9IHNiLT5zYnVtcGMgKCk7CgkgIGlmIChjaCA9PSAoLTEpICkKCSAgICB7CgkgICAgICBp
cy5zZXRzdGF0ZSAoaW9zOjplb2ZiaXQpOwoJICAgICAgYnJlYWs7CgkgICAgfQoJICBlbHNlIGlm
ICh0cmFpdHM6OmlzX2RlbCAoY2gpKQoJICAgIHsKCSAgICAgIHNiLT5zdW5nZXRjICgpOwoJICAg
ICAgYnJlYWs7CgkgICAgfQoJICBzICs9IGNoOwoJICBpZiAoLS13ID09IDEpCgkgICAgYnJlYWs7
Cgl9CiAgICB9CgogIGlzLmlzZnggKCk7CiAgaWYgKHMubGVuZ3RoICgpID09IDApCiAgICBpcy5z
ZXRzdGF0ZSAoaW9zOjpmYWlsYml0KTsKCiAgcmV0dXJuIGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
Y2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpvc3RyZWFtICYKb3BlcmF0b3I8
PCAob3N0cmVhbSAmbywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+JiBzKQp7CiAgcmV0dXJuIG8ud3JpdGUgKHMuZGF0YSAoKSwgcy5sZW5ndGggKCkpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppc3Ry
ZWFtJgpnZXRsaW5lIChpc3RyZWFtICZpcywgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+JiBzLCBjaGFyVCBkZWxpbSkKewogIGlmIChpcy5pcGZ4MSAoKSkKICAgIHsKICAg
ICAgc2l6ZV90ICAgY291bnQgPSAwOwogICAgICBzdHJlYW1idWYgKnNiID0gaXMucmRidWYgKCk7
CiAgICAgIHMucmVzaXplICgwKTsKCiAgICAgIHdoaWxlICgxKQoJewoJICBpbnQgY2ggPSBzYi0+
c2J1bXBjICgpOwoJICBpZiAoY2ggPT0gKC0xKSApCgkgICAgewoJICAgICAgaXMuc2V0c3RhdGUg
KGNvdW50ID09IDAKCQkJICAgPyAoaW9zOjpmYWlsYml0fGlvczo6ZW9mYml0KQoJCQkgICA6IGlv
czo6ZW9mYml0KTsKCSAgICAgIGJyZWFrOwoJICAgIH0KCgkgICsrY291bnQ7CgoJICBpZiAoY2gg
PT0gZGVsaW0pCgkgICAgYnJlYWs7CgoJICBzICs9IGNoOwoKCSAgaWYgKHMubGVuZ3RoICgpID09
IHMubnBvcyAtIDEpCgkgICAgewoJICAgICAgaXMuc2V0c3RhdGUgKGlvczo6ZmFpbGJpdCk7Cgkg
ICAgICBicmVhazsKCSAgICB9Cgl9CiAgICB9CgogICAKICAgCiAgaXMuaXNmeCAoKTsKCiAgcmV0
dXJuIGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxs
b2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcApiYXNp
Y19zdHJpbmc8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6bmlsUmVwID0geyAwLCAwLCAxLCBm
YWxzZSB9OwoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j
YXRvcj4KY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXpl
X3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpucG9zOwoKfSAg
CiMgNjE4ICIvdXNyL2luY2x1ZGUvZysrLTIvc3RkL2Jhc3RyaW5nLmgiIDIgMwoKCgojIDYgIi91
c3IvaW5jbHVkZS9nKystMi9zdHJpbmciIDIgMwoKCmV4dGVybiAiQysrIiB7CnR5cGVkZWYgYmFz
aWNfc3RyaW5nIDxjaGFyPiBzdHJpbmc7CiAKfSAgCgoKIyAyMyAiaC9ucmh5X3dvcmxkLmgiIDIK
CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIAogCiAKCiMgMSAiaC9ucmh5X2NsYXNzVGltZS5oIiAx
CiAKCgoKCgoKCgoKCgoKCgoKCgoMCiAKCgoKIAoKCnN0cnVjdCBOUkhZX0lOVF9GUkFOR0Ugewpw
dWJsaWMgOgogICAgSU5UICAgICAgICAgICAgICAgICBzdGFydDsKICAgIElOVCAgICAgICAgICAg
ICAgICAgZW5kOwogICAgSU5UICAgICAgICAgICAgICAgICBpbmM7CgogICAgIAogICAgVHdpbmUg
ICAgICAgICAgICAgICBHZXROYW1lRm9yQnVuY2goKTsKCiAgICBOUkhZX0lOVF9GUkFOR0UgKAog
ICAgICAgIHZvaWQgCiAgICApIHsgc3RhcnQgPSAwOyBlbmQgPSAwOyBpbmMgPSAwOyB9CgogICAg
IAoKICAgIHN0YXRpYyB2b2lkICAgICAgICAgICpGaW5kICgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IENIQVIgICpuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAg
c3RhdGljIGNvbnN0IENIQVIgICAqUHJpbnRTZWxmQ2xhc3NuYW1lICgKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1cm4gKCJO
UkhZX0lOVF9GUkFOR0UiKTsgfQoKICAgIHZvaWQgICAgICAgICAgICAgICAgIFByaW50U2VsZiAo
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAg
ICApIHsgVFhUX1NyY0ZpbGUgICA9ICJoL25yaHlfY2xhc3NUaW1lLmgiLCBUWFRfU3JjTGluZSAg
ID0gNTIsIFRYVF9PdXRwdXRmICAoc3RkZXJyLCAiJWQtJWQ6JWRcbiIsIHN0YXJ0LCBlbmQsIGlu
Yyk7IH0KfTsKaW5saW5lIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSggTlJIWV9JTlRfRlJBTkdFICkg
eyByZXR1cm4gIk5SSFlfSU5UX0ZSQU5HRSI7IH07CgpzdHJ1Y3QgTlJIWV9SRUFMX0ZSQU5HRSB7
CnB1YmxpYyA6CiAgICBSRUFMICAgICAgICAgICAgICAgIHN0YXJ0OwogICAgUkVBTCAgICAgICAg
ICAgICAgICBlbmQ7CiAgICBSRUFMICAgICAgICAgICAgICAgIGluYzsKCiAgICAgCiAgICBUd2lu
ZSAgICAgICAgICAgICAgIEdldE5hbWVGb3JCdW5jaCgpOwoKICAgIE5SSFlfUkVBTF9GUkFOR0Ug
KAogICAgICAgIHZvaWQgCiAgICApIHsgc3RhcnQgPSAoUkVBTCkwLjA7IGVuZCA9IChSRUFMKTAu
MDsgaW5jID0gKFJFQUwpMC4wOyB9CgogICAgfk5SSFlfUkVBTF9GUkFOR0UgKAogICAgICAgIHZv
aWQgCiAgICApIHsgc3RhcnQgPSAoUkVBTCkwLjA7IGVuZCA9IChSRUFMKTAuMDsgaW5jID0gKFJF
QUwpMC4wOyB9CgogICAgIAoKICAgIHN0YXRpYyB2b2lkICAgICAgICAgICpGaW5kICgKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIgICpuYW1lCiAgICAgICAgICAgICAgICAg
ICAgICAgICk7CgogICAgc3RhdGljIGNvbnN0IENIQVIgICAqUHJpbnRTZWxmQ2xhc3NuYW1lICgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAg
ICkgeyByZXR1cm4gKCJOUkhZX1JFQUxfRlJBTkdFIik7IH0KCgoKCgoKCgoKICAgIHZvaWQgICAg
ICAgICAgICAgICAgIFByaW50U2VsZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
IAogICAgICAgICAgICAgICAgICAgICAgICApIHsgVFhUX1NyY0ZpbGUgICA9ICJoL25yaHlfY2xh
c3NUaW1lLmgiLCBUWFRfU3JjTGluZSAgID0gOTMsIFRYVF9PdXRwdXRmICAoc3RkZXJyLCAiJWYt
JWY6JWZcbiIsIHN0YXJ0LCBlbmQsIGluYyk7IH0KfTsKCgoKCiAKCgoKCgoKCgoKCgoKCmNsYXNz
IE5SSFlfRlJBTkdFIHsKcHVibGljOgogICAgIAogICAgSU5UICAgICAgICAgICAgICAgICBmbGFn
czsKCiAgICAgCiAgICBOUkhZX1JFQUxfRlJBTkdFICAgIHJlYWxGcmFuZ2U7CiAgICBOUkhZX0lO
VF9GUkFOR0UgICAgIGludEZyYW5nZTsKCiAgICBOUkhZX0ZSQU5HRSAoCiAgICAgICAgdm9pZCAK
ICAgICkgeyBmbGFncyA9ICgweDAwMDAwMDAwKSA7IH0KCiAgICB+TlJIWV9GUkFOR0UgKAogICAg
ICAgIHZvaWQgCiAgICApIHsgZmxhZ3MgPSAoMHgwMDAwMDAwMCkgOyB9CgogICAgc3RhdGljIGNv
bnN0IENIQVIgICAqUHJpbnRTZWxmQ2xhc3NuYW1lICgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1cm4gKCJOUkhZX0ZSQU5H
RSIpOyB9CgoKCgoKCgoKCn07CmlubGluZSBjb25zdCBjaGFyICpjbGFzc05hbWUoIE5SSFlfRlJB
TkdFICkgeyByZXR1cm4gIk5SSFlfRlJBTkdFIjsgfTsKCgogCiAKCiAKIAoKY2xhc3MgRnJhbmdl
U3Vic2NyaWJlciB7CnB1YmxpYzoKICAgIHZpcnR1YWwgdm9pZCBTZXRUb3RhbEZyYW5nZSAoZmxv
YXQgc3RhcnQsIGZsb2F0IGVuZCkgeyB9OwogICAgdmlydHVhbCB2b2lkIFNldEZyYW5nZSAgICAg
IChmbG9hdCBzdGFydCwgZmxvYXQgZW5kKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgU2V0RnJhbWUg
ICAgICAgKGZsb2F0IG5ld0ZyYW1lKSB7IH07CiAgICB2aXJ0dWFsIHZvaWQgU2V0RmluYyAgICAg
ICAgKGZsb2F0IGZpbmMpICAgICB7IH07CiAgICB2aXJ0dWFsIHZvaWQgU2hpZnRGcmFtZXMgICAg
KGZsb2F0IHN0YXJ0LCBmbG9hdCBzaXplLCBmbG9hdCBkZWx0YSkgeyB9Owp9OwoKIAoKCgpjbGFz
cyBOUkhZX2NsYXNzVGltZSB7CgogICAgIAogICAgZnJpZW5kIGNsYXNzIE5SSFlfY2xhc3NDaGFu
bmVsOwogICAgTGlzdCA8RnJhbmdlU3Vic2NyaWJlciAqPiBfY3VycmVudEZyYW5nZVN1YnNjcmli
ZXJzOwogICAgdm9pZCBwdWJsaXNoVG90YWxGcmFuZ2UgICAoKTsKICAgIHZvaWQgcHVibGlzaEN1
cnJlbnRGcmFuZ2UgKCk7CiAgICB2b2lkIHB1Ymxpc2hDdXJyZW50RnJhbWUgICgpOwogICAgdm9p
ZCBwdWJsaXNoQ3VycmVudEZpbmMgICAoKTsKICAgIHZvaWQgcHVibGlzaFNoaWZ0RnJhbWVzICAg
KGZsb2F0LCBmbG9hdCwgZmxvYXQpOwogICAgIAoKICAgICAKCgogICAgSU5UICAgICAgICAgICAg
IHRvdGFsRnJhbWVzOwoKICAgICAKCiAgICBJTlQgICAgICAgICAgICAgb2Zmc2V0OwoKICAgICAK
ICAgIFJFQUwgICAgICAgICAgICBjdXJyZW50RnJhbWU7CgogICAgIAogICAgTlJIWV9GUkFOR0Ug
ICAgIGN1cnJlbnRGcmFuZ2U7CgogICAgIAoKCiAgICBaT09MRUFOICAgICAgICAgYWxsb3dPdXRP
ZlJhbmdlQ3VycmVudEZyYW1lOwoKICAgICAKCiAgICBaT09MRUFOICAgICAgICAgc2VjdGlvbkFj
dGl2ZTsKICAgIFJFQUwgICAgICAgICAgICBzZWN0aW9uU3RhcnQ7CiAgICBSRUFMICAgICAgICAg
ICAgc2VjdGlvbkVuZDsKCiAgICAgCgogICAgQk9PTEVBTiBfY3JlYXRlZEZsYWc7CgogICAgIAoK
CiAgICAgCgogICAgSU5UICAgICAgICAgICAgIGdldEZyYW1lSW5kZXggKAogICAgICAgICAgICAg
ICAgICAgICAgICBJTlQgICAgIHRpbWUKICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuICh0
aW1lIC0gb2Zmc2V0KTsgfQoKcHVibGljOgoKICAgIE5SSFlfY2xhc3NUaW1lICgpOwoKICAgICAK
ICAgIFpPT0xFQU4gICAgICAgICBTZXRPZmZzZXQgKAogICAgICAgICAgICAgICAgICAgICAgICBJ
TlQgICAgIG9mZnNldAogICAgICAgICAgICAgICAgICAgICk7CiAgICBJTlQgICAgICAgICAgICAg
R2V0T2Zmc2V0ICgKICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAg
ICAgICApIHsgcmV0dXJuIChvZmZzZXQpOyB9CgogICAgIAogICAgdm9pZCAgICAgICAgICAgICBT
ZXRGcmFtZVZhcmlhYmxlcyAoKTsKCiAgICAgCgogICAgSU5UICAgICAgICAgICAgIEdldFVzZXJU
b3RhbEZyYW1lc1N0YXJ0ICgKICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAg
ICAgICAgICAgICApIHsgcmV0dXJuICgxICsgb2Zmc2V0KTsgfQogICAgSU5UICAgICAgICAgICAg
IEdldFVzZXJUb3RhbEZyYW1lc0VuZCAoCiAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAg
ICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAodG90YWxGcmFtZXMgKyBvZmZzZXQpOyB9CiAg
ICB2b2lkICAgICAgICAgICAgIEdldFVzZXJUb3RhbEZyYW5nZSAoCiAgICAgICAgICAgICAgICAg
ICAgICAgIElOVCAgICAgKnN0YXJ0LAogICAgICAgICAgICAgICAgICAgICAgICBJTlQgICAgICpl
bmQKICAgICAgICAgICAgICAgICAgICApIHsgKnN0YXJ0ID0gKDEgKyBvZmZzZXQpOwogICAgICAg
ICAgICAgICAgICAgICAgICAqZW5kID0gKHRvdGFsRnJhbWVzICsgb2Zmc2V0KTsKICAgICAgICAg
ICAgICAgICAgICAgIH0KCiAgICAgCgogICAgWk9PTEVBTiAgICAgICAgIEFkZEZyYW1lcyAoCiAg
ICAgICAgICAgICAgICAgICAgICAgIElOVCAgICAgYW1vdW50LAogICAgICAgICAgICAgICAgICAg
ICAgICBJTlQgICAgIGluc2VydEFmdGVyCiAgICAgICAgICAgICAgICAgICAgKTsKICAgIFpPT0xF
QU4gICAgICAgICBTdWJGcmFtZXMgKAogICAgICAgICAgICAgICAgICAgICAgICBJTlQgICAgIGFt
b3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgSU5UICAgICByZW1vdmVBZnRlcgogICAgICAg
ICAgICAgICAgICAgICk7CgogICAgIAoKCgogICAgWk9PTEVBTiAgICAgICAgIFNldEFsbG93T3V0
T2ZSYW5nZUN1cnJlbnRGcmFtZSAoCiAgICAgICAgICAgICAgICAgICAgICAgIFpPT0xFQU4gc3Rh
dGUKICAgICAgICAgICAgICAgICAgICApOwogICAgWk9PTEVBTiAgICAgICAgIEdldEFsbG93T3V0
T2ZSYW5nZUN1cnJlbnRGcmFtZSAoCiAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAg
ICAgICAgICAgICAgICAgKSB7IHJldHVybiAoYWxsb3dPdXRPZlJhbmdlQ3VycmVudEZyYW1lKTsg
fQoKICAgIFpPT0xFQU4gICAgICAgICBTZXRTZWN0aW9uQWN0aXZlICgKICAgICAgICAgICAgICAg
ICAgICAgICAgWk9PTEVBTiBuZXdTdGF0dXMKICAgICAgICAgICAgICAgICAgICApIHsgWk9PTEVB
TiAgICAgb2xkOwogICAgICAgICAgICAgICAgICAgICAgICBvbGQgPSBzZWN0aW9uQWN0aXZlOwog
ICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uQWN0aXZlID0gbmV3U3RhdHVzOwogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gKG9sZCk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICBaT09MRUFOICAgICAgICAgR2V0U2VjdGlvbkFjdGl2ZSAoCiAgICAgICAgICAgICAgICAgICAg
ICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAoc2VjdGlvbkFjdGl2ZSk7
IH0KICAgIFpPT0xFQU4gICAgICAgICBTZXRTZWN0aW9uUmFuZ2UgKAogICAgICAgICAgICAgICAg
ICAgICAgICBSRUFMICAgIHN0YXJ0LAogICAgICAgICAgICAgICAgICAgICAgICBSRUFMICAgIGVu
ZAogICAgICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgIEdldFNlY3Rpb25S
YW5nZSAoCiAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgICAgKnN0YXJ0LAogICAgICAgICAg
ICAgICAgICAgICAgICBSRUFMICAgICplbmQKICAgICAgICAgICAgICAgICAgICApIHsgKnN0YXJ0
ID0gc2VjdGlvblN0YXJ0OwogICAgICAgICAgICAgICAgICAgICAgICAqZW5kID0gc2VjdGlvbkVu
ZDsKICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgCiAgICBaT09MRUFOICAgICAgICAgU2V0
Q3VycmVudEZyYW5nZSAoCiAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgICAgbmV3U3RhcnQs
CiAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgICAgbmV3RW5kLAogICAgICAgICAgICAgICAg
ICAgICAgICBSRUFMICAgIG5ld0luYwogICAgICAgICAgICAgICAgICAgICk7CgogICAgdm9pZCAg
ICAgICAgICAgICBHZXRDdXJyZW50RnJhbmdlICgKICAgICAgICAgICAgICAgICAgICAgICAgUkVB
TCAgICAqc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgICAgKmVuZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgUkVBTCAgICAqaW5jCiAgICAgICAgICAgICAgICAgICAgKSB7ICpz
dGFydCA9IGN1cnJlbnRGcmFuZ2UucmVhbEZyYW5nZS5zdGFydDsKICAgICAgICAgICAgICAgICAg
ICAgICAgKmVuZCA9IGN1cnJlbnRGcmFuZ2UucmVhbEZyYW5nZS5lbmQ7CiAgICAgICAgICAgICAg
ICAgICAgICAgICppbmMgPSBjdXJyZW50RnJhbmdlLnJlYWxGcmFuZ2UuaW5jOwogICAgICAgICAg
ICAgICAgICAgICAgfQoKICAgIHZvaWQgICAgICAgICAgICAgR2V0Q3VycmVudEZyYW5nZSAoCiAg
ICAgICAgICAgICAgICAgICAgICAgIE5SSFlfUkVBTF9GUkFOR0UgICAgKmZyYW5nZQogICAgICAg
ICAgICAgICAgICAgICkgeyBmcmFuZ2UtPnN0YXJ0ID0gY3VycmVudEZyYW5nZS5yZWFsRnJhbmdl
LnN0YXJ0OwogICAgICAgICAgICAgICAgICAgICAgICBmcmFuZ2UtPmVuZCA9IGN1cnJlbnRGcmFu
Z2UucmVhbEZyYW5nZS5lbmQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW5nZS0+aW5jID0g
Y3VycmVudEZyYW5nZS5yZWFsRnJhbmdlLmluYzsKICAgICAgICAgICAgICAgICAgICAgIH0KCiAg
ICB2b2lkICAgICAgICAgICAgIEdldEN1cnJlbnRGcmFuZ2UgKAogICAgICAgICAgICAgICAgICAg
ICAgICBJTlQgICAgICpzdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgSU5UICAgICAqZW5k
LAogICAgICAgICAgICAgICAgICAgICAgICBJTlQgICAgICppbmMKICAgICAgICAgICAgICAgICAg
ICApIHsgKnN0YXJ0ID0gY3VycmVudEZyYW5nZS5pbnRGcmFuZ2Uuc3RhcnQ7CiAgICAgICAgICAg
ICAgICAgICAgICAgICplbmQgPSBjdXJyZW50RnJhbmdlLmludEZyYW5nZS5lbmQ7CiAgICAgICAg
ICAgICAgICAgICAgICAgICppbmMgPSBjdXJyZW50RnJhbmdlLmludEZyYW5nZS5pbmM7CiAgICAg
ICAgICAgICAgICAgICAgICB9CgogICAgdm9pZCAgICAgICAgICAgICBHZXRDdXJyZW50RnJhbmdl
ICgKICAgICAgICAgICAgICAgICAgICAgICAgTlJIWV9JTlRfRlJBTkdFICAgICAqZnJhbmdlCiAg
ICAgICAgICAgICAgICAgICAgKSB7IGZyYW5nZS0+c3RhcnQgPSBjdXJyZW50RnJhbmdlLmludEZy
YW5nZS5zdGFydDsKICAgICAgICAgICAgICAgICAgICAgICAgZnJhbmdlLT5lbmQgPSBjdXJyZW50
RnJhbmdlLmludEZyYW5nZS5lbmQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW5nZS0+aW5j
ID0gY3VycmVudEZyYW5nZS5pbnRGcmFuZ2UuaW5jOwogICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAKICAgIFpPT0xFQU4gICAgICAgICBTZXRDdXJyZW50RnJhbWUoZmxvYXQgbmV3RnJhbWUp
OwogICAgZmxvYXQgICAgICAgICAgIEdldEN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIGN1cnJlbnRG
cmFtZTsgfQoKICAgICAKICAgIHZvaWQgICAgICAgICAgICBTZXRVbmRvRm9yRnJhbmdlQ2hhbmdl
IChjb25zdCBOUkhZX1JFQUxfRlJBTkdFICZuZXdGcmFuZ2UpOwogICAgIAogICAgdm9pZCAgICAg
ICAgICAgIERlc2NyaWJlQ3JlYXRlICgKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJI
WV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYgICAgCiAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZv
aWQgICAgICAgICAgICBEZXNjcmliZUZ1bGxTdGF0ZSAoCiAgICAgICAgICAgICAgICAgICAgICAg
IGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgKTsK
ICAgIHZvaWQgICAgICAgICAgICBEZXNjcmliZUZ1bGxTdGF0ZVBhY2tlZCAoCiAgICAgICAgICAg
ICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAg
ICAgICAgICAgKTsKCiAgICB2b2lkICAgICAgICAgICAgRGVzY3JpYmVDcmVhdGUgKAogICAgICAg
ICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJiwgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgTlJIWV9JTlRfRlJBTkdFICAgICAgICAgIGZyYW5nZQogICAg
ICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgRGVzY3JpYmVGdWxsU3RhdGUg
KAogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0g
JiwKICAgICAgICAgICAgICAgICAgICAgICAgTlJIWV9JTlRfRlJBTkdFICAgICAgICAgIGZyYW5n
ZQogICAgICAgICAgICAgICAgICAgICk7CgoKCiAgICBCT09MRUFOIEdldENyZWF0ZWRGbGFnICgp
IHsgcmV0dXJuIChfY3JlYXRlZEZsYWcpOyB9CiAgICB2b2lkIFNldENyZWF0ZWRGbGFnICgpIHsg
X2NyZWF0ZWRGbGFnID0gMSA7IH0KICAgIHZvaWQgQ2xlYXJDcmVhdGVkRmxhZygpIHsgX2NyZWF0
ZWRGbGFnID0gMCA7IH0KICAgIHZvaWQgQXR0YWNoQ3VycmVudEZyYW5nZVN1YnNjcmliZXIgKEZy
YW5nZVN1YnNjcmliZXIgKiBzdWJzY3JpYmVyKTsKICAgIHZvaWQgRGV0YWNoQ3VycmVudEZyYW5n
ZVN1YnNjcmliZXIgKEZyYW5nZVN1YnNjcmliZXIgKiBzdWJzY3JpYmVyKTsKICAgIGludCBHZXRU
b3RhbEZyYW1lcyAoKSB7IHJldHVybiAodG90YWxGcmFtZXMpOyB9Cn07CgogCgogCgojIDMwICJo
L25yaHlfd29ybGQuaCIgMgoKCgogCiAKCmNsYXNzIE5SSFlfY2xhc3NBcHBhcml0aW9uOwpjbGFz
cyBOUkhZX2NsYXNzQ2FtZXJhOwpjbGFzcyBOUkhZX2NsYXNzQ29sbGlzaW9uOwpjbGFzcyBOUkhZ
X2NsYXNzRHluYW1pY3M7CmNsYXNzIE5SSFlfY2xhc3NGb3JjZTsKY2xhc3MgTlJIWV9jbGFzc0dl
bmVyYXRvcjsKY2xhc3MgTlJIWV9jbGFzc0hvbWU7CmNsYXNzIE5SSFlfY2xhc3NJbmt5OwpjbGFz
cyBOUkhZX2NsYXNzS2xpc3Q7CmNsYXNzIE5SSFlfY2xhc3NGdXI7CmNsYXNzIE5SSFlfY2xhc3NN
dXNjbGU7CmNsYXNzIE5SSFlfY2xhc3NMYXllcjsKY2xhc3MgTlJIWV9jbGFzc0xpZ2h0OwpjbGFz
cyBOUkhZX2NsYXNzTWFwOwpjbGFzcyBOUkhZX2NsYXNzTWF0ZXJpYWw7CmNsYXNzIE5SSFlfY2xh
c3NNb2RlbDsKY2xhc3MgTlJIWV9jbGFzc09iamVjdDsKY2xhc3MgTlJIWV9jbGFzc1Jvb3Q7CmNs
YXNzIE5SSFlfY2xhc3NSb3RvOwpjbGFzcyBOUkhZX2NsYXNzU2NhZmZvbGQ7CmNsYXNzIE5SSFlf
Y2xhc3NTb3VuZDsKY2xhc3MgTlJIWV9jbGFzc1RleDsKY2xhc3MgTlJIWV9jbGFzc1RoaW5nOwpj
bGFzcyBOUkhZX2NsYXNzVGltZTsKY2xhc3MgTlJIWV9jbGFzc1RyYWNrOwpjbGFzcyBOUkhZX2Ns
YXNzVXNlTWFwOwoKY2xhc3MgRnJhbmdlQ2FjaGVMb3JkOwpjbGFzcyBOUkhZX1RyYXZlcnNlOwoK
IAoKY2xhc3MgTlJIWV9Xb3JsZCB7CgogICAgc3RhdGljIHZlY3RvcjxOUkhZX1dvcmxkICo+ICpf
d29ybGRzOwogICAgdmVjdG9yPE5SSFlfSU5UX0ZSQU5HRT4gX3NjblNlY3Rpb25zOwoKICAgIHZl
Y3RvcjxOUkhZX2NsYXNzVGhpbmcgKj4gICAgICAgX2FsbFRoaW5nczsKICAgIHZlY3RvcjxOUkhZ
X2NsYXNzT2JqZWN0ICo+ICAgICAgX2FsbE9iamVjdHM7CiAgICB2ZWN0b3I8TlJIWV9jbGFzc0Nh
bWVyYSAqPiAgICAgIF9hbGxDYW1lcmFzOwogICAgdmVjdG9yPE5SSFlfY2xhc3NMaWdodCAqPiAg
ICAgICBfYWxsTGlnaHRzOwogICAgdmVjdG9yPE5SSFlfY2xhc3NNb2RlbCAqPiAgICAgICBfYWxs
TW9kZWxzOwogICAgdmVjdG9yPE5SSFlfY2xhc3NUcmFjayAqPiAgICAgICBfYWxsVHJhY2tzOwog
ICAgdmVjdG9yPE5SSFlfY2xhc3NIb21lICo+ICAgICAgICBfYWxsSG9tZXM7CiAgICB2ZWN0b3I8
TlJIWV9jbGFzc01hcCAqPiAgICAgICAgIF9hbGxNYXBzOwogICAgdmVjdG9yPE5SSFlfY2xhc3NV
c2VNYXAgKj4gICAgICBfYWxsVXNlTWFwczsKICAgIHZlY3RvcjxOUkhZX2NsYXNzU291bmQgKj4g
ICAgICAgX2FsbFNvdW5kczsKICAgIHZlY3RvcjxOUkhZX2NsYXNzRHluYW1pY3MgKj4gICAgX2Fs
bER5bmFtaWNzczsKICAgIHZlY3RvcjxOUkhZX2NsYXNzRm9yY2UgKj4gICAgICAgX2FsbEZvcmNl
czsKICAgIHZlY3RvcjxOUkhZX2NsYXNzR2VuZXJhdG9yICo+ICAgX2FsbEdlbmVyYXRvcnM7CiAg
ICB2ZWN0b3I8TlJIWV9jbGFzc0NvbGxpc2lvbiAqPiAgIF9hbGxDb2xsaXNpb25zOwogICAgdmVj
dG9yPE5SSFlfY2xhc3NJbmt5ICo+ICAgICAgICBfYWxsSW5reXM7CiAgICB2ZWN0b3I8TlJIWV9j
bGFzc1NjYWZmb2xkICo+ICAgIF9hbGxTY2FmZm9sZHM7CiAgICB2ZWN0b3I8TlJIWV9jbGFzc0Fw
cGFyaXRpb24gKj4gIF9hbGxBcHBhcml0aW9uczsKICAgIHZlY3RvcjxOUkhZX2NsYXNzUm90byAq
PiAgICAgICAgX2FsbFJvdG9zOwogICAgdmVjdG9yPE5SSFlfY2xhc3NUZXggKj4gICAgICAgICBf
YWxsVGV4czsKICAgIHZlY3RvcjxOUkhZX2NsYXNzTWF0ZXJpYWwgKj4gICAgX2FsbE1hdGVyaWFs
czsKICAgIHZlY3RvcjxOUkhZX2NsYXNzUm9vdCAqPiAgICAgICAgX2FsbFJvb3RzOwogICAgdmVj
dG9yPE5SSFlfY2xhc3NLbGlzdCAqPiAgICAgICBfYWxsS2xpc3RzOwogICAgdmVjdG9yPE5SSFlf
Y2xhc3NGdXIgKj4gICAgICAgICBfYWxsRnVyczsKICAgIHZlY3RvcjxOUkhZX2NsYXNzTXVzY2xl
ICo+ICAgICAgX2FsbE11c2NsZXM7CiAgICB2ZWN0b3I8TlJIWV9jbGFzc0xheWVyICo+ICAgICAg
IF9hbGxMYXllcnM7CgogICAgTlJIWV9jbGFzc1RoaW5nICpfaGllclJvb3Q7ICAKcHVibGljOgoK
ICAgIE5SSFlfY2xhc3NUaGluZyAqaGllclJvb3QoKSB7IHJldHVybiBfaGllclJvb3Q7IH0KCiAg
ICBGcmFuZ2VDYWNoZUxvcmQgKmltYWdlQ2FjaGVMb3JkOwogICAgRnJhbmdlQ2FjaGVMb3JkICpm
cmFuZ2VDYWNoZUxvcmQ7CiAgICBOUkhZX2NsYXNzVGltZSAqVGltZUxvcmQ7CiAgICBOUkhZX1Ry
YXZlcnNlICpUcmF2ZXJzZTsKCiAgICAgCiAgICAgCiAgICAgCgogICAgaW50IE5SSFlfRnBzOwog
ICAgaW50IE5SSFlfUGxheUZwczsKICAgIGZsb2F0IE5SSFlfRmFzdEZvcndhcmQ7CiAgICBmbG9h
dCBOUkhZX09yaWdpblNpemU7CiAgICBmbG9hdCBOUkhZX0ZpcnN0UmVwZWF0OwogICAgQk9PTEVB
TiBOUkhZX09yaWdpbkRpc3BsYXk7CiAgICBpbnQgTlJIWV9Tb3VuZEFjdGlvbjsKCiAgICAgCgog
ICAgTlJIWV9Xb3JsZCAoKTsKICAgIH5OUkhZX1dvcmxkICgpOwoKICAgICAKCiAgICB2b2lkIElu
aXRpYWxpemVGb3JBY2Nlc3MgKCk7CiAgICB2b2lkIEF0dGFjaFRvV29ybGQgKGZsb2F0IGZyYW1l
KTsKICAgIHZvaWQgQXR0YWNoVG9Xb3JsZCAoZmxvYXQgZnJhbWUsIGZsb2F0IHJlZkZyYW1lKTsK
CiAgICAgCgogICAgQk9PTEVBTiBTZXRXb3JsZCAoaW50IHdvcmxkKTsKICAgIHZvaWQgTmV3V29y
bGQgKCk7CgogICAgdm9pZCBzZXRTY25TZWN0aW9ucyhjb25zdCB2ZWN0b3I8TlJIWV9JTlRfRlJB
TkdFPiAmc2VjdGlvbnMpIHsKICAgICAgICBfc2NuU2VjdGlvbnMgPSBzZWN0aW9uczsgfQogICAg
TlJIWV9JTlRfRlJBTkdFIEdldFNlY3Rpb25GcmFuZ2UgKGZsb2F0IGZyYW1lKTsKICAgIHN0cmlu
ZyBHZXRTY25TZWN0aW9uU3RyaW5nKCk7CgogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NUaGlu
ZyAqPiAmYWxsVGhpbmdzKCkgeyByZXR1cm4gX2FsbFRoaW5nczsgfQogICAgY29uc3QgdmVjdG9y
PE5SSFlfY2xhc3NPYmplY3QgKj4gJmFsbE9iamVjdHMoKSB7IHJldHVybiBfYWxsT2JqZWN0czsg
fQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NDYW1lcmEgKj4gJmFsbENhbWVyYXMoKSB7IHJl
dHVybiBfYWxsQ2FtZXJhczsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NMaWdodCAqPiAm
YWxsTGlnaHRzKCkgeyByZXR1cm4gX2FsbExpZ2h0czsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlf
Y2xhc3NNb2RlbCAqPiAmYWxsTW9kZWxzKCkgeyByZXR1cm4gX2FsbE1vZGVsczsgfQogICAgY29u
c3QgdmVjdG9yPE5SSFlfY2xhc3NUcmFjayAqPiAmYWxsVHJhY2tzKCkgeyByZXR1cm4gX2FsbFRy
YWNrczsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NIb21lICo+ICZhbGxIb21lcygpIHsg
cmV0dXJuIF9hbGxIb21lczsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NNYXAgKj4gJmFs
bE1hcHMoKSB7IHJldHVybiBfYWxsTWFwczsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NV
c2VNYXAgKj4gJmFsbFVzZU1hcHMoKSB7IHJldHVybiBfYWxsVXNlTWFwczsgfQogICAgY29uc3Qg
dmVjdG9yPE5SSFlfY2xhc3NTb3VuZCAqPiAmYWxsU291bmRzKCkgeyByZXR1cm4gX2FsbFNvdW5k
czsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NEeW5hbWljcyAqPiAmYWxsRHluYW1pY3Nz
KCkgeyByZXR1cm4gX2FsbER5bmFtaWNzczsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NG
b3JjZSAqPiAmYWxsRm9yY2VzKCkgeyByZXR1cm4gX2FsbEZvcmNlczsgfQogICAgY29uc3QgdmVj
dG9yPE5SSFlfY2xhc3NHZW5lcmF0b3IgKj4gJmFsbEdlbmVyYXRvcnMoKSB7IHJldHVybiBfYWxs
R2VuZXJhdG9yczsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NDb2xsaXNpb24gKj4gJmFs
bENvbGxpc2lvbnMoKSB7IHJldHVybiBfYWxsQ29sbGlzaW9uczsgfQogICAgY29uc3QgdmVjdG9y
PE5SSFlfY2xhc3NJbmt5ICo+ICZhbGxJbmt5cygpIHsgcmV0dXJuIF9hbGxJbmt5czsgfQogICAg
Y29uc3QgdmVjdG9yPE5SSFlfY2xhc3NTY2FmZm9sZCAqPiAmYWxsU2NhZmZvbGRzKCkgeyByZXR1
cm4gX2FsbFNjYWZmb2xkczsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NBcHBhcml0aW9u
ICo+ICZhbGxBcHBhcml0aW9ucygpIHsgcmV0dXJuIF9hbGxBcHBhcml0aW9uczsgfQogICAgY29u
c3QgdmVjdG9yPE5SSFlfY2xhc3NSb3RvICo+ICZhbGxSb3RvcygpIHsgcmV0dXJuIF9hbGxSb3Rv
czsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NUZXggKj4gJmFsbFRleHMoKSB7IHJldHVy
biBfYWxsVGV4czsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NNYXRlcmlhbCAqPiAmYWxs
TWF0ZXJpYWxzKCkgeyByZXR1cm4gX2FsbE1hdGVyaWFsczsgfQogICAgY29uc3QgdmVjdG9yPE5S
SFlfY2xhc3NSb290ICo+ICZhbGxSb290cygpIHsgcmV0dXJuIF9hbGxSb290czsgfQogICAgY29u
c3QgdmVjdG9yPE5SSFlfY2xhc3NLbGlzdCAqPiAmYWxsS2xpc3RzKCkgeyByZXR1cm4gX2FsbEts
aXN0czsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NGdXIgKj4gJmFsbEZ1cnMoKSB7IHJl
dHVybiBfYWxsRnVyczsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NNdXNjbGUgKj4gJmFs
bE11c2NsZXMoKSB7IHJldHVybiBfYWxsTXVzY2xlczsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlf
Y2xhc3NMYXllciAqPiAmYWxsTGF5ZXJzKCkgeyByZXR1cm4gX2FsbExheWVyczsgfQp9OwoKZXh0
ZXJuIE5SSFlfV29ybGQgKldvcmxkOwogCgojIDMwICJucmh5L05SSFlfQWNjZXNzLmMiIDIKCgoj
IDEgImgvbnJoeV9jbGFzc0NhbWVyYS5oIiAxCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoMCiAK
CgoKIAoKCiAKCgoKCgogCiMgMSAiaC9ucmh5X2NsYXNzT2JqZWN0LmgiIDEKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKDAogCgoKCiAKCgogCgoKCgoKIAojIDEgImgvbnJoeV9jbGFzc0FwcGFyaXRp
b24uaCIgMQoKIAoKCgoKCgoKCgoKCgoKCgoKCgwKIAoKCgogCgoKIAoKCgoKCiAKIyAxICJoL25y
aHlfY2xhc3NUaGluZy5oIiAxCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoMCiAKCgoKIAoKCiAKCgoK
CgogCgoKIyAxICIvc29mdHdhcmUvdGhhbGlhL2gvT2JzZXJ2ZXIuaCIgMQoKCgoKCiAKIAogCiAK
CgoKCgoKCgoKCgogCiAKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKY2xhc3MgU3ViamVj
dDsKCmNsYXNzIE9ic2VydmVyIHsKcHJvdGVjdGVkOgogICAgZnJpZW5kIGNsYXNzIFN1YmplY3Q7
CiAgICBTdWJqZWN0ICpfc3ViamVjdDsKCnB1YmxpYzoKICAgIE9ic2VydmVyIChTdWJqZWN0ICpz
dWIpOwogICAgdmlydHVhbCB+T2JzZXJ2ZXIgKCk7CgogICAgdmlydHVhbCB2b2lkIFJlZnJlc2hP
YnNlcnZlciAoU3ViamVjdCAqKSAgeyB9OwogICAgdmlydHVhbCBpbnQgIEdldE9ic2VydmVyVHlw
ZSAoKSAgICAgICAgICAgeyByZXR1cm4gMHgwMDAwMDA4MCA7IH07CiAgICB2aXJ0dWFsIGludCAg
QWxsb3dEZXN0cnVjdEJ5U3ViamVjdCAoKSAgICB7IHJldHVybiAwOyB9OwoKICAgIFN1YmplY3Qg
KnN1YmplY3QoKSAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIF9zdWJqZWN0OyB9Owp9
OwoKY2xhc3MgU3ViamVjdCB7CnByaXZhdGU6CiAgICBzdGF0aWMgTGlzdDxTdWJqZWN0ICo+IF90
b1VwZGF0ZTsKcHJvdGVjdGVkOgogICAgTGlzdDxPYnNlcnZlciAqPiAgICAgICBfb2JzZXJ2ZXJz
OwogICAgdW5zaWduZWQgICAgICAgICAgICAgICBfdXBkYXRlRmxhZ3M7CgpwdWJsaWM6CiAgICBT
dWJqZWN0ICgpIDogX3VwZGF0ZUZsYWdzICgwKSAgICAgICAgICB7IH07CiAgICBTdWJqZWN0IChj
b25zdCBTdWJqZWN0ICYpOwogICAgU3ViamVjdCAmb3BlcmF0b3IgPSAoY29uc3QgU3ViamVjdCAm
KTsKICAgIHZpcnR1YWwgflN1YmplY3QgKCk7CiAgICB1bnNpZ25lZCBJc1VwZGF0ZVNldCAodW5z
aWduZWQgZmxhZ3MpICB7IHJldHVybiAoX3VwZGF0ZUZsYWdzICYgZmxhZ3MpOyB9OwogICAgdW5z
aWduZWQgR2V0VXBkYXRlRmxhZ3MgKCkgICAgICAgICAgICAgeyByZXR1cm4gKF91cGRhdGVGbGFn
cyk7IH07CiAgICB2b2lkIERlbGF5ZWRVcGRhdGUgKHVuc2lnbmVkIGZsYWdzKSAgICB7CiAgICAg
ICAgaWYgKCEgX3VwZGF0ZUZsYWdzICYmIGZsYWdzKQogICAgICAgICAgICBfdG9VcGRhdGUuYXBw
ZW5kICh0aGlzKTsKICAgICAgICBfdXBkYXRlRmxhZ3MgfD0gZmxhZ3M7CiAgICB9OwogICAgaW50
IE5lZWRzVXBkYXRlICgpICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gKF91cGRhdGVGbGFn
cyAhPSAwKTsgfTsKICAgIHN0YXRpYyB2b2lkIFVwZGF0ZUFsbE9ic2VydmVycyAoKTsKCiAgICB2
aXJ0dWFsIHZvaWQgQ3JlYXRlT2JzZXJ2ZXIgIChpbnQgdHlwZSkgeyB9OwogICAgdmlydHVhbCB2
b2lkIERlc3Ryb3lPYnNlcnZlciAoaW50IHR5cGUpOwoKICAgIGludCBJc0N1cnJlbnQgKCkgICAg
ICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIChfb2JzZXJ2ZXJzLnNpemUoKSA+IDApOyB9Owog
ICAgdm9pZCBTdWJzY3JpYmUgICAgICAgKE9ic2VydmVyICpvYnMpOwogICAgdm9pZCBVbnN1YnNj
cmliZSAgICAgKE9ic2VydmVyICpvYnMpOwogICAgdm9pZCBVcGRhdGVPYnNlcnZlcnMgKHVuc2ln
bmVkIGZsYWdzID0gMCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgT2JzZXJ2ZXJGYWN0
b3J5IHsKcHJvdGVjdGVkOgogICAgc3RhdGljIHZvaWQgZG9DcmVhdGVPYnNlcnZlciAgICAgICAg
ICAgICAoU3ViamVjdCAqc3ViaiwgaW50IHR5cGUpOwogICAgc3RhdGljIExpc3Q8IHZvaWQgKCop
IChTdWJqZWN0ICosIGludCkgPiAgX29ic2VydmVyQ3JlYXRlRnVuYzsKcHVibGljOgogICAgc3Rh
dGljIHZvaWQgQWRkQ3JlYXRlT2JzZXJ2ZXJDYWxsYmFjayAgICAodm9pZCAoKmZjbikoU3ViamVj
dCAqLCBpbnQgdHlwZSkpOwogICAgc3RhdGljIHZvaWQgUmVtb3ZlQ3JlYXRlT2JzZXJ2ZXJDYWxs
YmFjayAodm9pZCAoKmZjbikoU3ViamVjdCAqLCBpbnQgdHlwZSkpOwp9OwoKCiMgMSAiL3NvZnR3
YXJlL3RoYWxpYS9oL09ic2VydmVyLmMiIDEKdGVtcGxhdGUgPGNsYXNzIFQ+CnZvaWQgT2JzZXJ2
ZXJGYWN0b3J5PFQ+OjpBZGRDcmVhdGVPYnNlcnZlckNhbGxiYWNrICgKICAgICAgICB2b2lkICgq
ZmNuKSAoU3ViamVjdCAqLCBpbnQgdHlwZSkKICAgICAgICApIAp7CiAgICAgICAgX29ic2VydmVy
Q3JlYXRlRnVuYy5hcHBlbmQgKGZjbik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgp2b2lkIE9ic2Vy
dmVyRmFjdG9yeTxUPjo6UmVtb3ZlQ3JlYXRlT2JzZXJ2ZXJDYWxsYmFjayAoCiAgICAgICAgdm9p
ZCAoKmZjbikgKFN1YmplY3QgKiwgaW50IHR5cGUpCiAgICAgICAgKSAKewogICAgZm9yIChpbnQg
aT0wOyBpPF9vYnNlcnZlckNyZWF0ZUZ1bmMuc2l6ZSgpOyBpKyspCiAgICAgICAgaWYgKF9vYnNl
cnZlckNyZWF0ZUZ1bmNbaV0gPT0gZmNuKSB7CiAgICAgICAgICAgIF9vYnNlcnZlckNyZWF0ZUZ1
bmMucmVtb3ZlIChpKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgVD4Kdm9pZCBPYnNlcnZlckZhY3Rvcnk8VD46OmRvQ3JlYXRlT2JzZXJ2ZXIgKAogICAg
ICAgIFN1YmplY3QgKnN1YmosIAogICAgICAgIGludCB0eXBlCiAgICAgICAgKSAKewogICAgZm9y
IChpbnQgaT0wOyBpPF9vYnNlcnZlckNyZWF0ZUZ1bmMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAo
Kl9vYnNlcnZlckNyZWF0ZUZ1bmNbaV0pKHN1YmosIHR5cGUpOwogICAgfQp9CiMgMTExICIvc29m
dHdhcmUvdGhhbGlhL2gvT2JzZXJ2ZXIuaCIgMgoKCgoKIyAzOSAiaC9ucmh5X2NsYXNzVGhpbmcu
aCIgMgoKIyAxICJoL25yaHlfZGVwZW5kLmgiIDEKCgoKCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoK
Y2xhc3MgTlJIWV9kZXBlbmRNYXN0ZXI7CmNsYXNzIE5SSFlfZGVwZW5kQ2xpZW50OwpjbGFzcyBO
UkhZX2RlcGVuZERhdGE7CmNsYXNzIE5SSFlfZGVwZW5kVHlwZTsKCmNsYXNzIE5SSFlfZGVwZW5k
Q2xpZW50IHsKICAgIGZyaWVuZCBOUkhZX2RlcGVuZE1hc3RlcjsKICAgIGZyaWVuZCBOUkhZX2Rl
cGVuZERhdGE7CiAgICB2ZWN0b3I8TlJIWV9kZXBlbmREYXRhICo+IF9tYXN0ZXJzOwogICAgc3Rh
dGljIHZlY3Rvcjxib29sPiBfdmVyYm9zZTsKcHJvdGVjdGVkOgogICAgdmlydHVhbCB2b2lkIGRl
dGFjaChOUkhZX2RlcGVuZERhdGEgKmRhdGEpOwogICAgdmlydHVhbCB2b2lkIG1ha2VEaXJ0eShO
UkhZX2RlcGVuZERhdGEgKmRhdGEpOwogICAgdmlydHVhbCBzdHJpbmcgY2xpZW50TmFtZSgpID0g
MDsKcHVibGljOgogICAgTlJIWV9kZXBlbmRDbGllbnQoKSB7fQogICAgTlJIWV9kZXBlbmRDbGll
bnQoY29uc3QgTlJIWV9kZXBlbmRDbGllbnQgJikge30KICAgIH5OUkhZX2RlcGVuZENsaWVudCgp
OwogICAgTlJIWV9kZXBlbmREYXRhICZBZGRNYXN0ZXIoTlJIWV9kZXBlbmRNYXN0ZXIgKm1hc3Rl
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5SSFlfZGVwZW5kVHlwZSAqZGVwZW5k
VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudERhdGEpOwog
ICAgdm9pZCBSZW1vdmVNYXN0ZXIoTlJIWV9kZXBlbmRUeXBlICpkZXBlbmRUeXBlLCB2b2lkICpj
bGllbnREYXRhKTsKICAgIGludCBSZW1vdmVNYXN0ZXJzKE5SSFlfZGVwZW5kVHlwZSAqZGVwZW5k
VHlwZSwgdm9pZCAqY2xpZW50RGF0YSk7CiAgICBpbnQgUmVtb3ZlTWFzdGVycyhOUkhZX2RlcGVu
ZFR5cGUgKmRlcGVuZFR5cGUpOwogICAgaW50IENvbXB1dGUoZmxvYXQgZnJhbWUpOwogICAgc3Rh
dGljIHZvaWQgUHVzaFZlcmJvc2UoYm9vbCB2ZXJib3NlKTsKICAgIHN0YXRpYyBib29sIFBvcFZl
cmJvc2UoKTsKICAgIHN0YXRpYyBib29sIEdldFZlcmJvc2UoKTsKfTsKCmNsYXNzIE5SSFlfZGVw
ZW5kTWFzdGVyIHsKICAgIGZyaWVuZCBOUkhZX2RlcGVuZENsaWVudDsKICAgIGZyaWVuZCBOUkhZ
X2RlcGVuZERhdGE7CiAgICB2ZWN0b3I8TlJIWV9kZXBlbmREYXRhICo+IF9jbGllbnRzOwogICAg
dmlydHVhbCBpbnQgY29tcHV0ZShmbG9hdCBmcmFtZSwgTlJIWV9kZXBlbmRUeXBlICpkZXBlbmRU
eXBlKSA9IDA7CnB1YmxpYzoKICAgIE5SSFlfZGVwZW5kTWFzdGVyKCkge30KICAgIE5SSFlfZGVw
ZW5kTWFzdGVyKGNvbnN0IE5SSFlfZGVwZW5kTWFzdGVyICYpIHt9CiAgICB+TlJIWV9kZXBlbmRN
YXN0ZXIoKTsKICAgIHZvaWQgTWFrZURpcnR5KE5SSFlfZGVwZW5kVHlwZSAqZGVwZW5kVHlwZSk7
CiAgICB2b2lkIE1ha2VEaXJ0eSgpOwogICAgYm9vbCBIYXNEZXBlbmRUeXBlKE5SSFlfZGVwZW5k
VHlwZSAqZGVwZW5kVHlwZSk7Cn07CgpjbGFzcyBOUkhZX2RlcGVuZERhdGEgewogICAgZnJpZW5k
IE5SSFlfZGVwZW5kTWFzdGVyOwogICAgZnJpZW5kIE5SSFlfZGVwZW5kQ2xpZW50OwogICAgTlJI
WV9kZXBlbmRNYXN0ZXIgKl9tYXN0ZXI7CiAgICBOUkhZX2RlcGVuZENsaWVudCAqX2NsaWVudDsK
ICAgIE5SSFlfZGVwZW5kVHlwZSAqX2RlcGVuZFR5cGU7CiAgICB2b2lkICpfY2xpZW50RGF0YTsK
ICAgIE5SSFlfZGVwZW5kRGF0YShOUkhZX2RlcGVuZE1hc3RlciAqbWFzdGVyLCBOUkhZX2RlcGVu
ZFR5cGUgKl9kZXBlbmRUeXBlLAogICAgICAgICAgICAgICAgICAgIE5SSFlfZGVwZW5kQ2xpZW50
ICpjbGllbnQsIHZvaWQgKmNsaWVudERhdGEpOwogICAgfk5SSFlfZGVwZW5kRGF0YSgpOwpwdWJs
aWM6CiAgICBOUkhZX2RlcGVuZFR5cGUgKmRlcGVuZFR5cGUoKSB7IHJldHVybiBfZGVwZW5kVHlw
ZTsgfQogICAgdm9pZCAqY2xpZW50RGF0YSgpIHsgcmV0dXJuIF9jbGllbnREYXRhOyB9Cn07Cgpj
bGFzcyBOUkhZX2RlcGVuZFR5cGUge307CgoKIyA0MCAiaC9ucmh5X2NsYXNzVGhpbmcuaCIgMgoK
CiAKCgoKCgpzdHJ1Y3QgVEhJTkdfSUQgewogICAgSU5UICAgICAgICAgdHlwZTsKCiAgICAgCiAg
ICBJTlQgICAgICAgICAqYmFzZVR5cGVzOwogICAgSU5UICAgICAgICAgU2l6ZUJhc2VUeXBlczsK
ICAgIElOVCAgICAgICAgIG51bWJlckJhc2VUeXBlczsKfTsKCiAKIAogCgogCmNsYXNzIE5SSFlf
Q2xhc3NWaWV3T2JqZWN0OwpjbGFzcyBOUkhZX2NsYXNzQ2hhbm5lbDsKdHlwZWRlZiB2ZWN0b3I8
TlJIWV9jbGFzc0NoYW5uZWwgKj4gTlJIWV9jaGFubmVsczsKCiAKdGVtcGxhdGUgPGNsYXNzIFR5
cGU+IGNsYXNzIE5SSFlfbWF0Y2g7CnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBjbGFzcyBOUkhZX2Fs
cGhhbGlzdDsKCiAKY2xhc3MgTlJIWV9JbmNsdWRlSGlzdG9yeTsKY2xhc3MgTlJIWV9UcmF2ZXJz
ZTsKCmV4dGVybiBOUkhZX2RlcGVuZFR5cGUgKk5SSFlfZGVwZW5kVGhpbmdXb3JsZDsKZXh0ZXJu
IE5SSFlfZGVwZW5kVHlwZSAqTlJIWV9kZXBlbmRUaGluZ0xvY2FsOwpleHRlcm4gTlJIWV9kZXBl
bmRUeXBlICpOUkhZX2RlcGVuZFRoaW5nU2hhcGU7CgogCnN0cnVjdCBOUkhZX2NsYXNzVGhpbmcg
OgogICAgcHVibGljIFN1YmplY3QsCiAgICBwdWJsaWMgTlJIWV9kZXBlbmRDbGllbnQsCiAgICBw
dWJsaWMgTlJIWV9kZXBlbmRNYXN0ZXIKewogICAgdHlwZWRlZiBOUkhZX2FscGhhbGlzdDxOUkhZ
X2NsYXNzVGhpbmc+IGFscGhhbGlzdDsKICAgIGZyaWVuZCBOUkhZX21hdGNoIDxOUkhZX2NsYXNz
VGhpbmc+OwogICAgZnJpZW5kIE5SSFlfYWxwaGFsaXN0PE5SSFlfY2xhc3NUaGluZz47Cgpwcml2
YXRlOgogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z1RoaW5nQWN0aW9u
OwogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z1RoaW5nQ2xhc3M7CiAg
ICBUSElOR19JRCAgICAgICAgICAgICAgICAgICAgICAgICppZDsgICAgIAoKICAgICAKICAgICAK
ICAgICAKCiAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIF9ub2RhbERpc3BsYXks
IF9ub2RhbE9uRmxhZzsKCiAgICAgCiAgICBzaG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9sb2NhbFRyYXZlcnNlQ29va2llOwogICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAg
ICBfbG9jYWxUcmF2ZXJzaW5nOwogICAgc2hvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICBf
d29ybGRUcmF2ZXJzZUNvb2tpZTsKICAgIHNob3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAg
X3Zpc2libGVDb29raWU7CiAgICBzaG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9vbkNv
b2tpZTsKICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgX3Zpc2libGVTdGF0ZTsK
ICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgX29uU3RhdGU7CgogICAgTV9NYXRy
aXggICAgICAgICAgICAgICAgICAgICAgICAqX2xvY2FsSG9tZWxlc3NNYXRyaXg7CiAgICBNX01h
dHJpeCAgICAgICAgICAgICAgICAgICAgICAgICpfbG9jYWxEcmF3aW5nTWF0cml4OwogICAgTV9N
YXRyaXggICAgICAgICAgICAgICAgICAgICAgICAqX3dvcmxkRHJhd2luZ01hdHJpeDsKICAgIE1f
TWF0cml4ICAgICAgICAgICAgICAgICAgICAgICAgKl93b3JsZEhvbWVsZXNzTWF0cml4OwogICAg
TV9NYXRyaXggICAgICAgICAgICAgICAgICAgICAgICAqX2ludmVyc2VMb2NhbEhvbWVsZXNzTWF0
cml4OwogICAgTV9NYXRyaXggICAgICAgICAgICAgICAgICAgICAgICAqX2ludmVyc2VXb3JsZEhv
bWVsZXNzTWF0cml4OwoKICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgX3N5bmNE
cmF3aW5nVG9Ib21lbGVzczsKCiAgICAgCiAgICB2b2lkIGluaXRpYWxpemUoKTsKCnByb3RlY3Rl
ZDoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRJRCAoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgdHlwZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApOwogICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bmxvYWRJRCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIElOVCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcG9wSUQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK
CiAgICBOUkhZX2NoYW5uZWxzIF9jaGFubmVsczsKICAgIE5SSFlfY2hhbm5lbHMgX2xpbmVhckNo
YW5uZWxzOwogICAgTlJIWV9jaGFubmVscyBfbm9uTGluZWFyQ2hhbm5lbHM7CiAgICB2b2lkIGV4
dHJhY3RDaGFubmVsKE5SSFlfY2xhc3NDaGFubmVsICopOwogICAgdm9pZCBwdXNoQ2hhbm5lbChO
UkhZX2NsYXNzQ2hhbm5lbCAqKTsKCiAgICAgCgogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAg
ICAgICAgICBmaW5kQ2hhbm5lbHMgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ0hBUiAgICAgICAgICAgICAgICAqYXNjaWksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOUkhZX2NsYXNzQ2hhbm5lbCAgICoqb3V0Q2hhbm5lbHMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgICAgICAgICAgICAgICAgICpv
dXROdW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgCgog
ICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzeW5jQ2hpbGRyZW4gKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlJIWV9jbGFzc1RoaW5nICpwYXJl
bnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBaT09MRUFOICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUNoYW5uZWwgKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTlJIWV9jbGFzc0NoYW5uZWwgICAqY2hhblB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpPT0xFQU4gICAgICAgICAgICAgcHJl
c2VydmVJbXBsaWNpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAg
IFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmVGcm9tICgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5SSFlfY2xhc3NUaGluZyAqY2xvbmVGcm9tCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgIAogICAgIAogICAgIAog
ICAgIAogICAgdmlydHVhbCB2b2lkIHByZVRyYXZlcnNlKGZsb2F0IGZyYW1lKTsKICAgIHZpcnR1
YWwgdm9pZCBwb3N0V29ybGRUcmF2ZXJzZSgpIHt9CiAgICB2aXJ0dWFsIHZvaWQgcG9zdExvY2Fs
VHJhdmVyc2UoKTsKICAgIHZpcnR1YWwgdm9pZCBib3VuY2UoY29uc3QgY2hhciAqcmVhc29uKTsK
CiAgICAgCiAgICB2b2lkIGRpcnR5Tm9kZShzaG9ydCBnb29kQ29va2llLCBzaG9ydCBiYWRDb29r
aWUpOwogICAgdm9pZCBtYWtlRGlydHkoTlJIWV9kZXBlbmREYXRhICpkZXBlbmREYXRhKTsKICAg
IHN0cmluZyBjbGllbnROYW1lKCk7CgogICAgIAogICAgaW50IGNvbXB1dGUoZmxvYXQgZnJhbWUs
IE5SSFlfZGVwZW5kVHlwZSAqZGVwZW5kVHlwZSk7CgpwdWJsaWM6CgogICAgTlJIWV9jbGFzc1Ro
aW5nICAgICAgICAgICAgICAgICAqIE9yaWdpbjsKICAgIFR3aW5lICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTmFtZTsKCiAgICAgCiAgICBOUkhZX2NsYXNzVGhpbmcgICAgICAgICAgICAgICAg
ICpQYXJlbnQ7CiAgICBOUkhZX2NsYXNzVGhpbmcgICAgICAgICAgICAgICAgICoqQ2hpbGRyZW47
CiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpemVDaGlsZHJlbjsKICAgIElO
VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyQ2hpbGRyZW47CgogICAgIAogICAg
TlJIWV9DbGFzc1ZpZXdPYmplY3QgICAgICAgICAgICAqVmlld09iamVjdDsKCiAgICAgCiAgICBO
UkhZX0luY2x1ZGVIaXN0b3J5ICAgICAgICAgICAgICpJbmNsdWRlSGlzdG9yeTsKCiAgICAgCiAg
ICBOUkhZX2NsYXNzVGhpbmcgKAogICAgICAgIGNvbnN0IENIQVIgICpuYW1lLAogICAgICAgIGNv
bnN0IElOVCAgIGNoaWxkVHlwZQogICAgICAgICk7CiAgICBOUkhZX2NsYXNzVGhpbmcgKAogICAg
ICAgIGNvbnN0IENIQVIgICAgICAqbmFtZSwKICAgICAgICBOUkhZX2NsYXNzVGhpbmcgKmNsb25l
RnJvbQogICAgICAgICk7CgogICAgTlJIWV9jbGFzc1RoaW5nICgpOwogICAgdmlydHVhbCB+TlJI
WV9jbGFzc1RoaW5nICgpOwoKICAgICAKICAgIHN0YXRpYyBjb25zdCBDSEFSICAgICAgICAgICAg
ICAgKlByaW50U2VsZkNsYXNzbmFtZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0
dXJuICgiTlJIWV9jbGFzc1RoaW5nIik7IH0KCiAgICAgCgogICAgc3RhdGljIElOVCAgICAgICAg
ICAgICAgICAgICAgICBHZXRTZWxmQ2xhc3NUeXBlICgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICkgeyByZXR1cm4gKFRISU5HX1RZUEVfVEhJTkcpOyB9CgogICAgdm9pZCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRGVidWdQcmludFRoaW5nU2VsZiAoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGSUxFICAgICAgICAqZnAsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSICAqbWVzc2FnZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApOwoKICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR2V0SWRfdHlwZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIElOVCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR2V0TnVtYmVyQmFzZVR5cGVzICgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICkgeyByZXR1cm4gKGlkLT5udW1iZXJCYXNlVHlwZXMpOyB9CiAgICBJTlQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldEJhc2VUeXBlQnlJbmRleCAoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgICAgIGkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKSB7IGlmICgoaSA8IDApfHwoaSA+IGlkLT5udW1iZXJCYXNl
VHlwZXMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFRISU5HX1RZ
UEVfVU5LTk9XTik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGlkLT5iYXNlVHlwZXNbaV0pOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAg
ICAgIElzQUJhc2VUeXBlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElOVCB0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgc3Rh
dGljIE5SSFlfYnVuY2g8TlJIWV9jbGFzc1RoaW5nPiAqRmluZCAoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSICAqbmFtZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApOwoKICAgIHZpcnR1YWwgdm9pZCAgICAgICAgICAgICAgICAg
ICAgIFJlbmFtZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBDSEFSICpuZXdOYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPSAw
OwogICAgdmlydHVhbCBOUkhZX2NsYXNzVGhpbmcgICAgICAgICAqQ2xvbmUgKGNvbnN0IGNoYXIg
Km5hbWUpID0gMDsKICAgIHZpcnR1YWwgY29uc3QgQ0hBUiAgICAgICAgICAgICAgKlByaW50RGVy
aXZlZENsYXNzT2ZTZWxmVHlwZU5hbWUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA9IDA7
CiAgICB2aXJ0dWFsIElOVCAgICAgICAgICAgICAgICAgICAgIEdldERlcml2ZWRDbGFzc09mU2Vs
ZlR5cGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA9IDA7CgogICAgIAoKCiAgICB2b2lk
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYXZlTWVGb3JVbmRvICgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpPT0xFQU4gZnJvbUNoaWxkID0gMCAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgRGVzY3Jp
YmVDcmVhdGUgKCBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJiBkZXNjICkgPSAwOwogICAgdmly
dHVhbCB2b2lkIERlc2NyaWJlQ3JlYXRlQ2hhbm5lbHMgKE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVh
bSAmLCBpbnQgZGVuc2UgKTsKICAgIHZpcnR1YWwgdm9pZCBEZXNjcmliZUZ1bGxTdGF0ZSAoTlJI
WV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYgZGVzYykgewogICAgICAgIHJldHVybjsKICAgIH0KICAg
IHZpcnR1YWwgdm9pZCBEZXNjcmliZUZ1bGxTdGF0ZVBhY2tlZCAoTlJIWV9DbGFzc0Rlc2NyaWJl
U3RyZWFtICYgZGVzYykgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIHZvaWQgRGVzY3JpYmVV
bmRvUmVuYW1lIChOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJiwgY29uc3QgVHdpbmUgJm5ld05h
bWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgCgoKICAgIE5SSFlfY2xhc3ND
aGFubmVsICAgICAgICAgICAgICAgKkFkZEltcGxpY2l0Q2hhbm5lbCAoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJTlQgICAgICAgICAgIHR5cGUKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIE5SSFlfY2xhc3NDaGFubmVsICAg
ICAgICAgICAgICAgKkFkZENoYW5uZWwgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgSU5UICAgICAgICAgICB0eXBlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSU5UICAgICAgICAgICBpbnN0YW5jZQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIE5SSFlfY2xhc3NDaGFubmVsICAgICAg
ICAgICAgICAgKkFkZENoYW5uZWwgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSU5UICAgICAgICAgICB0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICkge3JldHVybiBBZGRDaGFubmVsKHR5cGUsMCk7fQoKICAgICAKCiAgICBOUkhZ
X2NsYXNzQ2hhbm5lbCAgICAgICAgICAgICAgICpGaW5kUG9zc2libGVJbXBsaWNpdENoYW5uZWwg
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSU5UICAgICAg
ICAgICB0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgIAoK
ICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0SW1wbGljaXRDaGFubmVsVmFs
dWVXVW5kbyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJ
TlQgICAgICAgICAgIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCAgICAgICAgICAgICAgIG5ld1ZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICk7CgogICAgIAoKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAg
U2V0SW1wbGljaXRDaGFubmVsVmFsdWVzV1VuZG8gKAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmxvYXQgICAgICAgICAgICAgICAqbmV3VmFsdWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgIG51bSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElOVCAgICAgICAgICAg
dHlwZTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJTlQg
ICAgICAgICAgIHR5cGUyPS0xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgSU5UICAgICAgICAgICB0eXBlMz0tMSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IElOVCAgICAgICAgICAgdHlwZTQ9LTEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJTlQgICAgICAgICAgIHR5cGU1PS0x
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgIAogICAgWk9PTEVB
TiAgICAgICAgICAgICAgICAgICAgICAgICBTZXRJbXBsaWNpdENoYW5uZWxWYWx1ZSAoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJTlQgICAgICAgICAgIHR5
cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAgICAgICAg
ICAgICAgIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAg
IAogICAgZmxvYXQgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRJbXBsaWNpdENoYW5uZWxW
YWx1ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJTlQg
ICAgICAgICAgIHR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAg
ICAgCgoKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRlQ2hhbm5lbCAo
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUkhZX2NsYXNzQ2hhbm5l
bCAgICpjaGFuUHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1
cm4gZGVsZXRlQ2hhbm5lbCAoY2hhblB0ciwgMSApOyB9CiAgICBaT09MRUFOICAgICAgICAgICAg
ICAgICAgICAgICAgIFJlYWxseURlbGV0ZUNoYW5uZWwgKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTlJIWV9jbGFzc0NoYW5uZWwgICAqY2hhblB0cgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuIGRlbGV0ZUNoYW5uZWwgKGNoYW5Q
dHIsIDAgKTsgfQoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdENoYW5u
ZWxzKEZJTEUgKmZwLCBCT09MRUFOIHZlcmJvc2UgPSAwICk7CgogICAgIAoKCgoKCiAgICBOUkhZ
X2NsYXNzQ2hhbm5lbCAgICAgICAgICAgICAgICpGaW5kTGluZWFyQ2hhbm5lbCAoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJTlQgICAgICAgICAgIHR5cGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJTlQgICAgICAg
ICAgIGluc3RhbmNlT25lQmFzZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KTsKICAgIE5SSFlfY2xhc3NDaGFubmVsICAgICAgICAgICAgICAgKkZpbmROb25MaW5lYXJDaGFu
bmVsICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElOVCAg
ICAgICAgICAgdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAg
IE5SSFlfY2xhc3NDaGFubmVsICAgICAgICAgICAgICAgKkZpbmRDaGFubmVsICgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElOVCAgICAgICAgICAgdHlwZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElOVCAgICAgICAg
ICAgaW5zdGFuY2VPbmVCYXNlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
OwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmluZENoYW5uZWxzICgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIgICAgICAgICAg
KmFzY2lpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlJIWV9jbGFz
c0NoYW5uZWwgICAqKm91dENoYW5uZWxzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSU5UICAgICAgICAgICAgICAgICAqb3V0TnVtYmVyCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICk7CiAgICAgCgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRmluZENoYW5uZWxzICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IENIQVIgICAgICAgICAgKmFzY2lpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgKipvdXRDaGFubmVscywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCAgICAgICAgICAgICAgICAg
Km91dE51bWJlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIGNv
bnN0IE5SSFlfY2hhbm5lbHMgJmNoYW5uZWxzKCkgeyByZXR1cm4gX2NoYW5uZWxzOyB9CiAgICBj
b25zdCBOUkhZX2NoYW5uZWxzICZsaW5lYXJDaGFubmVscygpIHsgcmV0dXJuIF9saW5lYXJDaGFu
bmVsczsgfQogICAgY29uc3QgTlJIWV9jaGFubmVscyAmbm9uTGluZWFyQ2hhbm5lbHMoKSB7IHJl
dHVybiBfbm9uTGluZWFyQ2hhbm5lbHM7IH0KCiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdldE51bWJlckhpZGRlbkNoYW5uZWxzICgpOwogICAgSU5UICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHZXROdW1iZXJJbXBsaWNpdENoYW5uZWxzICgpOwoKICAgICAKCiAgICBa
T09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VJbXBsaWNpdENoYW5uZWxFeHBsaWNp
dCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUkhZX2NsYXNzQ2hh
bm5lbCAgICpjaGFuUHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cgog
ICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBSZW9yZGVyQ2hhbm5lbHMgKGNvbnN0
IFR3aW5lICZuZXdPcmRlcik7CgogICAgIAogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAg
ICAgICBTZXRQYXJlbnQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TlJIWV9jbGFzc1RoaW5nICpuZXdQYXJlbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKTsKCiAgICAgCiAgICBUd2luZSAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW50
UGFyZW50ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgIAogICAgUE9MSVNIICAg
ICAgICAgICAgICAgICAgICAgICAgICBHZXRHZW5lYWxvZ3kgKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTlJIWV9jbGFzc1RoaW5nICpob3dSZWxhdGVkLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UICAgICAgICAgICAgICAgICAgICAg
KnJlbGF0aW9uc2hpcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAg
IAogICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRDaGFubmVsVmFsdWVCeVR5
cGUgKCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIg
ICp0eXBlTmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgCiAg
ICBSRUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldENoYW5uZWxWYWx1ZUJ5VHlwZSAo
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSU5UICAgdHlw
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIAogICAgQk9PTEVB
TiAgICAgICAgICAgICAgICAgICAgICAgICBTZXRDaGFubmVsVmFsdWVCeVR5cGUoIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UICAgICAgICAgIGluZGV4LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCAgICAgICAgIHZhbHVlCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgCiAgICBCT09MRUFOICAg
ICAgICAgICAgICAgICAgICAgICAgIFNldENoYW5uZWxWYWx1ZUJ5VHlwZSggCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSICogdHlwZU5hbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMICAgICAgICAgdmFsdWUKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgCiAgICAgCiAgICAgCiAg
ICAgCiAgICAgCgogICAgY29uc3QgTV9NYXRyaXggJkdldExvY2FsSG9tZWxlc3NNYXRyaXgoKTsK
ICAgIGNvbnN0IE1fTWF0cml4ICZHZXRMb2NhbERyYXdpbmdNYXRyaXggKCk7CiAgICBjb25zdCBN
X01hdHJpeCAmR2V0V29ybGRIb21lbGVzc01hdHJpeCAoKTsKICAgIGNvbnN0IE1fTWF0cml4ICZH
ZXRXb3JsZERyYXdpbmdNYXRyaXggKCk7CiAgICBjb25zdCBNX01hdHJpeCAmR2V0T3JpZ2luTWF0
cml4KCk7CiAgICBjb25zdCBNX01hdHJpeCAmR2V0SW52ZXJzZU9yaWdpbk1hdHJpeCgpOwogICAg
ICAgICAgICAgICAgICAgCiAgICBNX01hdHJpeCAgICAgICBHZXRDaGFubmVsSG9tZWxlc3NNYXRy
aXggKCk7CiAgICBNX01hdHJpeCAgICAgICBHZXRDdXJyZW50TG9jYWxIb21lbGVzc01hdHJpeCgp
OwogICAgTV9NYXRyaXggICAgICAgR2V0Q3VycmVudExvY2FsRHJhd2luZ01hdHJpeCgpOwogICAg
TV9NYXRyaXggICAgICAgR2V0Q3VycmVudFdvcmxkSG9tZWxlc3NNYXRyaXgoKTsKICAgIE1fTWF0
cml4ICAgICAgIEdldEN1cnJlbnRXb3JsZERyYXdpbmdNYXRyaXgoKTsKICAgIE1fTWF0cml4ICAg
ICAgIEdldEN1cnJlbnRDaGFubmVsSG9tZWxlc3NNYXRyaXggKCk7CiAgICBNX01hdHJpeCAgICAg
ICBHZXRDdXJyZW50SW52ZXJzZVdvcmxkSG9tZWxlc3NNYXRyaXgoKTsKICAgIE1fTWF0cml4ICAg
ICAgIEdldEN1cnJlbnRJbnZlcnNlTG9jYWxIb21lbGVzc01hdHJpeCgpOwogICAgICAgICAgICAg
ICAgICAgCiAgICBjb25zdCBNX01hdHJpeCAmR2V0SW52ZXJzZUxvY2FsSG9tZWxlc3NNYXRyaXgo
KTsKICAgIGNvbnN0IE1fTWF0cml4ICZHZXRJbnZlcnNlV29ybGRIb21lbGVzc01hdHJpeCgpOwog
ICAgY29uc3QgTV9NYXRyaXggKkdldEludGVybmFsTG9jYWxEcmF3aW5nTWF0cml4KCk7CiAgICB2
b2lkICAgICAgICAgICBMb2NhbE11bHQoY29uc3QgTV9NYXRyaXggJm1hdCk7CiAgICB2b2lkICAg
ICAgICAgICBTZXRJc0RlZm9ybWVkKCk7CiAgICAgCiAgICB2b2lkICAgICAgICAgICBTZXRXb3Js
ZE1hdHJpeChjb25zdCBNX01hdHJpeCAmbWF0KTsKICAgICAgICAgICAgICAgICAgIAogICAgIAog
ICAgY29uc3QgQ0hBUiAgICAgICAgICAgICAgICAgICAgICAqR2V0Vm9pZENoYW5uZWxUeXBlTmFt
ZUFuZEluc3RhbmNlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgICAgICp0bXBWb2lkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cgog
ICAgIAoKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tSZWN1cnNpdmVs
eUZvckNsYXNzVHlwZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
TlQgICAgICAgICB3aGF0VHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
OwoKICAgICAKICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgIFNldE5vZGFsRGlzcGxheShCT09M
RUFOIHN0YXR1cyk7CiAgICB2aXJ0dWFsIEJPT0xFQU4gICAgICAgICBTZXROb2RhbE9uRmxhZyhC
T09MRUFOIHN0YXR1cyk7CgogICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgR2V0Tm9kYWxEaXNw
bGF5KCkgeyByZXR1cm4gX25vZGFsRGlzcGxheTsgfQogICAgQk9PTEVBTiAgICAgICAgICAgICAg
ICAgR2V0Tm9kYWxPbkZsYWcoKSB7IHJldHVybiBfbm9kYWxPbkZsYWc7IH0KICAgIEJPT0xFQU4g
ICAgICAgICAgICAgICAgIEdldFZpc2libGVTdGF0ZSgpOwogICAgdmlydHVhbCBCT09MRUFOICAg
ICAgICAgR2V0VmlzaWJsZVN0YXRlKGZsb2F0IGZyYW1lKTsKICAgIHZpcnR1YWwgQk9PTEVBTiAg
ICAgICAgIEdldE9uU3RhdGUoZmxvYXQgZnJhbWUpOwoKICAgICAKCiAgICBCT09MRUFOICAgICAg
ICAgICAgICAgICBHZXRTYXZlZElzVmlzaWJsZSgpOwogICAgQk9PTEVBTiAgICAgICAgICAgICAg
ICAgR2V0U2F2ZWRJc1Zpc2libGUoZmxvYXQgZnJhbWUpOwogICAgQk9PTEVBTiAgICAgICAgICAg
ICAgICAgR2V0U2F2ZWRPblN0YXRlKGZsb2F0IGZyYW1lKTsKCiAgICBCT09MRUFOICAgICAgICAg
ICAgICAgICBJc0RlZm9ybWluZyAoKTsKCiAgICAgCiAgICBpbmxpbmUgVHdpbmUgICAgICAgICAg
ICBHZXROYW1lRm9yQnVuY2goKSB7IHJldHVybiBOYW1lOyB9CgogICAgdm9pZCAgICAgICAgICAg
ICAgICAgICAgRGVsYXllZFVwZGF0ZUFsbENoYW5uZWxzICh1bnNpZ25lZCBmbGFncyk7CiAgICBp
bnQgICAgICAgICAgICAgICAgICAgICBUcmF2ZXJzZUxvY2FsKGZsb2F0IGZyYW1lKTsKICAgIGlu
dCAgICAgICAgICAgICAgICAgICAgIFRyYXZlcnNlV29ybGQoZmxvYXQgZnJhbWUpOwogICAgQk9P
TEVBTiAgICAgICAgICAgICAgICAgR2V0TG9jYWxUcmF2ZXJzZWQoKTsKICAgIEJPT0xFQU4gICAg
ICAgICAgICAgICAgIEdldExvY2FsVHJhdmVyc2luZygpIHsgcmV0dXJuIF9sb2NhbFRyYXZlcnNp
bmc7IH0KICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgIEdldFdvcmxkVHJhdmVyc2VkKCk7CiAg
ICB2b2lkICAgICAgICAgICAgICAgICAgICBTZXRMb2NhbFRyYXZlcnNlZCgpOwogICAgdm9pZCAg
ICAgICAgICAgICAgICAgICAgU2V0V29ybGRUcmF2ZXJzZWQoKTsKICAgIHZvaWQgICAgICAgICAg
ICAgICAgICAgIFNldExvY2FsVHJhdmVyc2luZygpIHsgX2xvY2FsVHJhdmVyc2luZyA9IDEgOyB9
CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICBEaXJ0eU5vZGUoKTsKICAgIHZpcnR1YWwgTlJI
WV9jbGFzc09iamVjdCAqR2V0T2JqZWN0UHRyKCkgeyByZXR1cm4gX19udWxsIDsgfQogICAgIAog
ICAgaW50IFRyYXZlcnNlSGllcihmbG9hdCBmcmFtZSk7CiAgICB2aXJ0dWFsIHZvaWQJICAgIEdl
dFNoYXBlKFJFQUwgZnJhbWUpOwp9OwoKIApjbGFzcyBOUkhZX2NsYXNzVGhpbmdPYnNlcnZlciA6
IAogICAgcHVibGljIE9ic2VydmVyCnsKcHJpdmF0ZToKICAgIHZvaWQgUmVmcmVzaE9ic2VydmVy
IChTdWJqZWN0ICp0aGluZykgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBSZWZy
ZXNoVGhpbmcgKHRoaW5nKTsgfTsKICAgIGludCAgR2V0T2JzZXJ2ZXJUeXBlICgpICAgICB7IHJl
dHVybiBHZXRUeXBlVGhpbmcoKTsgICB9OwogICAgaW50ICBBbGxvd0Rlc3RydWN0QnlTdWJqZWN0
ICgpIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIEFsbG93RGVzdHJ1
Y3RCeVN1YmplY3RUaGluZygpOyB9OwpwdWJsaWM6CiAgICB2aXJ0dWFsIHZvaWQgUmVmcmVzaFRo
aW5nIChTdWJqZWN0ICpzdWJqKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBP
YnNlcnZlcjo6UmVmcmVzaE9ic2VydmVyIChzdWJqKTsgfTsKICAgIHZpcnR1YWwgaW50ICBHZXRU
eXBlVGhpbmcgKCkgeyByZXR1cm4gT2JzZXJ2ZXI6OkdldE9ic2VydmVyVHlwZSgpOyB9OwogICAg
dmlydHVhbCBpbnQgIEFsbG93RGVzdHJ1Y3RCeVN1YmplY3RUaGluZyAoKSAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gT2JzZXJ2ZXI6OkFsbG93RGVzdHJ1Y3RCeVN1
YmplY3QoKTsgfTsKCiAgICBOUkhZX2NsYXNzVGhpbmdPYnNlcnZlciAoTlJIWV9jbGFzc1RoaW5n
ICp0aGluZykgOiBPYnNlcnZlciAodGhpbmcpIHsgfTsKfTsKCiAKCiAKCiMgMzUgImgvbnJoeV9j
bGFzc0FwcGFyaXRpb24uaCIgMgoKCiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9oL0NPTE9SLmgiIDEK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0IENvbG9yIHsKICAgIHB1YmxpYzoK
CiAgICBmbG9hdCAgIHI7CiAgICBmbG9hdCAgIGc7CiAgICBmbG9hdCAgIGI7CgoKICAgIHByaXZh
dGU6CiAgICAgICAgCiAgICBmbG9hdCB2YWx1ZSggZmxvYXQgbjEsIGZsb2F0IG4yLCBmbG9hdCBo
dWUpOwoKICAgIAogICAgcHVibGljOgoKICAgIENvbG9yKCB2b2lkKTsKICAgIENvbG9yKCBmbG9h
dCByLCBmbG9hdCBnLCBmbG9hdCBiKTsKICAgIENvbG9yKCBjb25zdCBDb2xvciAmIHRoYXQgKSB7
CiAgICAgICAgKnRoaXMgPSB0aGF0OwogICAgICAgIH07CgogICAgdm9pZCBTZXRSR0IoIGZsb2F0
IHIsIGZsb2F0IGcsIGZsb2F0IGIpOwogICAgdm9pZCBTZXRITFMoIGZsb2F0IGgsIGZsb2F0IGws
IGZsb2F0IHMpOwogICAgdm9pZCBTZXRIU1YoIGZsb2F0IGgsIGZsb2F0IHMsIGZsb2F0IHYpOwog
ICAgdm9pZCBTZXRQYWNrZWQoIHVuc2lnbmVkIGxvbmcgYyk7CgogICAgdm9pZCBHZXRSR0IoIGZs
b2F0ICpyLCBmbG9hdCAqZywgZmxvYXQgKmIpOwogICAgdm9pZCBHZXRITFMoIGZsb2F0ICpoLCBm
bG9hdCAqbCwgZmxvYXQgKnMpOwogICAgdm9pZCBHZXRIU1YoIGZsb2F0ICpoLCBmbG9hdCAqcywg
ZmxvYXQgKnYpOwogICAgdm9pZCBHZXRQYWNrZWQoIHVuc2lnbmVkIGxvbmcgKmMpOwoKICAgIGlu
dCAgUmVhZEJpbmFyeSggTkVURklMRV9GSUxFICpmcCk7CiAgICBpbnQgIFdyaXRlQmluYXJ5KCBO
RVRGSUxFX0ZJTEUgKmZwKTsKCiAgICBpbnQgb3BlcmF0b3IgPT0gKGNvbnN0IENvbG9yICZjb2xv
cikgY29uc3QgCiAgICAgICAgewogICAgICAgIHJldHVybigodGhpcy0+ciA9PSBjb2xvci5yKSAm
JiAodGhpcy0+ZyA9PSBjb2xvci5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmJiAodGhpcy0+YiA9PSBjb2xvci5iKSk7CiAgICAgICAgfTsKCiAgICBpbnQgb3BlcmF0b3Ig
IT0gKGNvbnN0IENvbG9yICZjb2xvcikgY29uc3QgCiAgICAgICAgewogICAgICAgIHJldHVybigo
dGhpcy0+ciAhPSBjb2xvci5yKSB8fCAodGhpcy0+ZyAhPSBjb2xvci5nKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8fCAodGhpcy0+YiAhPSBjb2xvci5iKSk7CiAgICAgICAg
fTsKCiAgICBDb2xvciBvcGVyYXRvciooZmxvYXQgZikgY29uc3QKICAgIHsKICAgICAgICBDb2xv
ciAgIHRtcDsKCgogICAgICAgIHRtcC5yID0gdGhpcy0+ciAqIGY7CiAgICAgICAgdG1wLmcgPSB0
aGlzLT5nICogZjsKICAgICAgICB0bXAuYiA9IHRoaXMtPmIgKiBmOwoKICAgICAgICByZXR1cm4o
IHRtcCk7CiAgICB9CgogICAgQ29sb3Igb3BlcmF0b3IqKGRvdWJsZSBmKSBjb25zdAogICAgewog
ICAgICAgIENvbG9yICAgdG1wOwoKCiAgICAgICAgdG1wLnIgPSB0aGlzLT5yICogZjsKICAgICAg
ICB0bXAuZyA9IHRoaXMtPmcgKiBmOwogICAgICAgIHRtcC5iID0gdGhpcy0+YiAqIGY7CgogICAg
ICAgIHJldHVybiggdG1wKTsKICAgIH0KCiAgICBmcmllbmQgaW5saW5lIENvbG9yIG9wZXJhdG9y
ICooZmxvYXQgZiwgY29uc3QgQ29sb3IgJnYpCiAgICB7CiAgICBDb2xvciAgIHRtcDsKCiAgICAg
ICAgdG1wLnIgPSB2LnIgKiBmOwogICAgICAgIHRtcC5nID0gdi5nICogZjsKICAgICAgICB0bXAu
YiA9IHYuYiAqIGY7CgogICAgICAgIHJldHVybiggdG1wKTsKICAgIH0KCiAgICBmcmllbmQgaW5s
aW5lIENvbG9yIG9wZXJhdG9yICooZG91YmxlIGYsIGNvbnN0IENvbG9yICZ2KQogICAgewogICAg
Q29sb3IgICB0bXA7CgogICAgICAgIHRtcC5yID0gdi5yICogZjsKICAgICAgICB0bXAuZyA9IHYu
ZyAqIGY7CiAgICAgICAgdG1wLmIgPSB2LmIgKiBmOwoKICAgICAgICByZXR1cm4oIHRtcCk7CiAg
ICB9CgogICAgQ29sb3Igb3BlcmF0b3IvKGZsb2F0IGYpIGNvbnN0CiAgICB7CiAgICAgICAgQ29s
b3IgICB0bXA7CgoKICAgICAgICB0bXAuciA9IHRoaXMtPnIgLyBmOwogICAgICAgIHRtcC5nID0g
dGhpcy0+ZyAvIGY7CiAgICAgICAgdG1wLmIgPSB0aGlzLT5iIC8gZjsKCiAgICAgICAgcmV0dXJu
KCB0bXApOwogICAgfQoKICAgIENvbG9yIG9wZXJhdG9yKyhjb25zdCBDb2xvciAmdikgY29uc3QK
ICAgIHsKICAgIENvbG9yICAgdG1wOwoKICAgICAgICAKICAgICAgICB0bXAuciA9IHRoaXMtPnIg
KyB2LnI7CiAgICAgICAgdG1wLmcgPSB0aGlzLT5nICsgdi5nOwogICAgICAgIHRtcC5iID0gdGhp
cy0+YiArIHYuYjsKCiAgICAgICAgcmV0dXJuKCB0bXApOwogICAgfTsKCiAgICBDb2xvciBvcGVy
YXRvci0oY29uc3QgQ29sb3IgJnYpIGNvbnN0CiAgICB7CiAgICBDb2xvciAgIHRtcDsKCiAgICAg
ICAgCiAgICAgICAgdG1wLnIgPSB0aGlzLT5yIC0gdi5yOwogICAgICAgIHRtcC5nID0gdGhpcy0+
ZyAtIHYuZzsKICAgICAgICB0bXAuYiA9IHRoaXMtPmIgLSB2LmI7CgogICAgICAgIHJldHVybigg
dG1wKTsKICAgIH07Cn07CgppbmxpbmUgY29uc3QgY2hhciAqY2xhc3NOYW1lKCBDb2xvciApIHsg
cmV0dXJuICJDb2xvciI7IH07CgoKIyAzNyAiaC9ucmh5X2NsYXNzQXBwYXJpdGlvbi5oIiAyCgoK
IAogCiAKCiAKdGVtcGxhdGUgPGNsYXNzIFR5cGU+IGNsYXNzIE5SSFlfbWF0Y2g7CnRlbXBsYXRl
IDxjbGFzcyBUeXBlPiBjbGFzcyBOUkhZX2FscGhhbGlzdDsKCnN0cnVjdCBOUkhZX2NsYXNzQXBw
YXJpdGlvbjpwdWJsaWMgTlJIWV9jbGFzc1RoaW5nIHsKcHJpdmF0ZToKICAgIHR5cGVkZWYgTlJI
WV9jbGFzc1RoaW5nIGluaGVyaXRlZDsKICAgIHR5cGVkZWYgTlJIWV9hbHBoYWxpc3Q8TlJIWV9j
bGFzc0FwcGFyaXRpb24+IGFscGhhbGlzdDsKICAgIGZyaWVuZCBOUkhZX21hdGNoIDxOUkhZX2Ns
YXNzQXBwYXJpdGlvbj47CiAgICBmcmllbmQgTlJIWV9hbHBoYWxpc3Q8TlJIWV9jbGFzc0FwcGFy
aXRpb24+OwoKcHJvdGVjdGVkOgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5pdGlhbGl6ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKcHVibGljOgogICAgTlJI
WV9jbGFzc0FwcGFyaXRpb24gKAogICAgICAgIGNvbnN0IENIQVIgICAgICAgICAgICAgICpuYW1l
LAogICAgICAgIGNvbnN0IElOVCAgICAgICAgICAgICAgIGNoaWxkVHlwZQogICAgICAgICk7CiAg
ICBOUkhZX2NsYXNzQXBwYXJpdGlvbiAoCiAgICAgICAgY29uc3QgQ0hBUiAgICAgICAgICAgICAg
Km5hbWUsCiAgICAgICAgTlJIWV9jbGFzc0FwcGFyaXRpb24gICAgKmNsb25lRnJvbQogICAgICAg
ICk7CiAgICBOUkhZX2NsYXNzQXBwYXJpdGlvbiAoCiAgICAgICAgdm9pZCAKICAgICAgICApOwoK
ICAgIH5OUkhZX2NsYXNzQXBwYXJpdGlvbiAoCiAgICAgICAgdm9pZCAKICAgICAgICApOwoKICAg
ICAKICAgICAKICAgIHN0YXRpYyBjb25zdCBDSEFSICAgICAgICAgICAgICAgKlByaW50U2VsZkNs
YXNzbmFtZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuICgiTlJIWV9jbGFz
c0FwcGFyaXRpb24iKTsgfQoKICAgICAKCiAgICBzdGF0aWMgSU5UICAgICAgICAgICAgICAgICAg
ICAgIEdldFNlbGZDbGFzc1R5cGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVy
biAoVEhJTkdfVFlQRV9BUFBBUklUSU9OKTsgfQoKICAgIHN0YXRpYyBOUkhZX2J1bmNoPE5SSFlf
Y2xhc3NBcHBhcml0aW9uPiAqRmluZCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBDSEFSICAqbmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICApOwoKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0QXBwYXJpdGlv
blBhcmVudCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUkhZX2J1
bmNoIDxOUkhZX2NsYXNzQXBwYXJpdGlvbj4gKnBhcmVudAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApOwoKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0
Q29sb3IgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVB
TCAgICAgICpuZXdDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElOVCAgICAgICAgICAgICBudW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKTsKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0Q29sb3JSZWQgKAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5l
d0NvbG9yUmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09M
RUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNldENvbG9yR3JlZW4gKAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld0NvbG9yR3JlZW4K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFpPT0xFQU4gICAgICAg
ICAgICAgICAgICAgICAgICAgU2V0Q29sb3JCbHVlICgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBuZXdDb2xvckJsdWUKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAg
ICAgICAgU2V0Q29sb3JJbnRlbnMgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUkVBTCAgICAgIG5ld0NvbG9ySW50ZW5zCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNl
dE9wYWNpdHkgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UkVBTCAgICAgIG5ld09wYWNpdHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KTsKCiAgICAgCiAKICAgIFJFQUwgKkdldENvbG9yICgpOwoKICAgICAKCiAgICB2b2lkICAgR2V0
UmVjdXJzaXZlQ29sb3IgKENvbG9yICYsIGZsb2F0ICopOwoKICAgIHN0YXRpYyBaT09MRUFOICAg
ICAgICAgICAgICAgICAgQ2hlY2tQb3NzaWJsZUFwcGFyaXRpb25QYXJlbnQgKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlJIWV9idW5jaCA8TlJIWV9jbGFzc0FwcGFy
aXRpb24+ICpwYXJlbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAg
IHN0YXRpYyBaT09MRUFOICAgICAgICAgICAgICAgICAgQ2hlY2tQb3NzaWJsZUNvbG9yICgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgICAgICAgICpuZXdDb2xv
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCAgICAgICAgIG51
bWJlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIHZvaWQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVGdWxsU3RhdGUgKAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFt
ICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVGdWxsU3RhdGVQYWNrZWQgKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3Ry
ZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVub2RhbE9uRmxhZyAoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJl
YW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZU5vZGFsRGlzcGxheSAoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJl
YW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUFwcGFyaXRpb25QYXJlbnQgKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJl
U3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVDb2xvciAoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0g
JgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgVHdpbmUgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHZXRDb2xvck9wdGlvbiggaW50IGlnbm9yZURlZmF1bHQgKTsK
CiAgICAgCiAgICAgCiAgICAgCgogICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBT
ZXROb2RhbE9uRmxhZyAoQk9PTEVBTiBzdGF0dXMpOwoKICAgICAKCiAgICB2b2lkICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTZXROZWVkc1JlY2FsYyAoKTsKfTsKCiAKCiAKCiMgMzkgImgv
bnJoeV9jbGFzc09iamVjdC5oIiAyCgoKCiAKY2xhc3MgTlJIWV9jbGFzc09iamVjdE1hbmlwdWxh
dG9yOwoKIAp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4gY2xhc3MgTlJIWV9tYXRjaDsKdGVtcGxhdGUg
PGNsYXNzIFR5cGU+IGNsYXNzIE5SSFlfYWxwaGFsaXN0OwpjbGFzcyBOUkhZX29iamVjdEZpbGVE
YXRhOwpjbGFzcyBOUkhZX2NsYXNzVHJhY2s7CgpjbGFzcyBOUkhZX2NsYXNzT2JqZWN0IDogCiAg
ICBwdWJsaWMgTlJIWV9jbGFzc0FwcGFyaXRpb24sCiAgICBwdWJsaWMgT2JzZXJ2ZXJGYWN0b3J5
IDxOUkhZX2NsYXNzT2JqZWN0Pgp7CnByaXZhdGU6CiAgICB0eXBlZGVmIE5SSFlfY2xhc3NBcHBh
cml0aW9uIGluaGVyaXRlZDsKICAgIHR5cGVkZWYgTlJIWV9hbHBoYWxpc3Q8TlJIWV9jbGFzc09i
amVjdD4gYWxwaGFsaXN0OwogICAgZnJpZW5kIE5SSFlfbWF0Y2ggPE5SSFlfY2xhc3NPYmplY3Q+
OwogICAgZnJpZW5kIE5SSFlfYWxwaGFsaXN0PE5SSFlfY2xhc3NPYmplY3Q+OwoKICAgICAKICAg
IFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgb2JqU3RhdGljOwoKICAgIE5SSFlfb2Jq
ZWN0RmlsZURhdGEgICAgICAgICAgICAgKiBfZmlsZURhdGE7CgogICAgIAogICAgYm9vbCByZXBv
c2l0aW9uU2F2ZUNoYW5zKCBjb25zdCBNX01hdHJpeCYsIHZlY3RvcjwgTlJIWV9jbGFzc0NoYW5u
ZWwqID4mLAoJCQkgICAgICB2ZWN0b3I8IE5SSFlfY2xhc3NDaGFubmVsKiA+JiwKCQkJICAgICAg
dmVjdG9yPCBOUkhZX2NsYXNzQ2hhbm5lbCogPiYsCgkJCSAgICAgIGludCBmcmFtZSwgYm9vbCwg
Ym9vbCwgYm9vbCwgYm9vbCApOwoKICAgIApwcm90ZWN0ZWQ6CiAgICBOUkhZX2NsYXNzT2JqZWN0
TWFuaXB1bGF0b3IgICAgICptYW5pcHVsYXRvcjsKICAgCiAgIAogICAgWk9PTEVBTiAgICAgICAg
ICAgICAgICAgICAgICAgICBleHRyYU1vZGU7CiAgICBOUkhZX2NsYXNzT2JqZWN0ICAgICAgICAg
ICAgICAgICpvcmJpdE9iamVjdDsKCiAgICBOUkhZX2NsYXNzVHJhY2sgICAgICAgICAgICAgICAg
ICpwcmltYXJ5Q29uc3RyYWludDsKICAgIE5SSFlfY2xhc3NUcmFjayAgICAgICAgICAgICAgICpz
ZWNvbmRhcnlDb25zdHJhaW50OwogICAgTlJIWV9jbGFzc09iamVjdCAgICAgICAgICAgICAgICpj
b25zdHJhaW50R2VvbWV0cnk7CgogICAKCgoKIAoKCgoKCgoKCgogICAgdm9pZCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
OwogICAgdm9pZCBkZXRhY2goTlJIWV9kZXBlbmREYXRhICopOwoKcHVibGljOgogICAgIAogICAg
TlJIWV9jbGFzc09iamVjdCAoCiAgICAgICAgY29uc3QgQ0hBUiAgICAgICAgICAqbmFtZSwKICAg
ICAgICBjb25zdCBJTlQgICAgICAgICAgIGNoaWxkVHlwZQogICAgICAgICk7CiAgICBOUkhZX2Ns
YXNzT2JqZWN0ICgKICAgICAgICBjb25zdCBDSEFSICAgICAgICAgICpuYW1lLAogICAgICAgIE5S
SFlfY2xhc3NPYmplY3QgICAgKmNsb25lRnJvbQogICAgICAgICk7CiAgICBOUkhZX2NsYXNzT2Jq
ZWN0ICgKICAgICAgICB2b2lkIAogICAgICAgICk7CgogICAgfk5SSFlfY2xhc3NPYmplY3QgKAog
ICAgICAgIHZvaWQgCiAgICAgICAgKTsKCiAgICAgCiAgICBzdGF0aWMgY29uc3QgQ0hBUiAgICAg
ICAgICAgICAgICpQcmludFNlbGZDbGFzc25hbWUgKAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KSB7IHJldHVybiAoIk5SSFlfY2xhc3NPYmplY3QiKTsgfQoKICAgICAKCiAgICBzdGF0aWMgSU5U
ICAgICAgICAgICAgICAgICAgICAgIEdldFNlbGZDbGFzc1R5cGUgKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKSB7IHJldHVybiAoVEhJTkdfVFlQRV9PQkpFQ1QpOyB9CgogICAgTGlzdCA8VHdp
bmU+ICAgICAgICAgICAgICAgICAgICBMaXN0T2ZDaGFubmVscyAoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtYmVyCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICk7CgogICAgc3RhdGljIE5SSFlfYnVuY2g8TlJIWV9jbGFzc09iamVjdD4g
KkZpbmQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hB
UiAgKm5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgCgoK
ICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VXb3JsZEhvbWVsZXNzUG9z
aXRpb25NYXRyaXggKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgCgogICAgc3Rh
dGljIFpPT0xFQU4gICAgICAgICAgICAgICAgICBDaGVja1Bvc3NpYmxlT2JqZWN0T3JpZ2luICgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5SSFlfYnVuY2ggPE5SSFlf
Y2xhc3NPYmplY3Q+ICpvcmlnaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KTsKCiAgICB2aXJ0dWFsIHZvaWQgQ3JlYXRlT2JzZXJ2ZXIgKGludCB0eXBlKSB7IGRvQ3JlYXRl
T2JzZXJ2ZXIgKHRoaXMsIHR5cGUpOyB9OwoKICAgICAKCgogICAgdm9pZCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEZXNjcmliZUNyZWF0ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEZXNjcmliZUZ1bGxTdGF0ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEZXNjcmliZUZ1bGxTdGF0ZVBhY2tlZCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEZXNjcmliZURlbGV0ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBEZXNjcmliZUZpbGVIZXJvICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICk7CiAgICBUd2luZSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdl
dEZpbGVIZXJvT3B0aW9uKCBpbnQgaWdub3JlRGVmYXVsdCApOwogICAgdm9pZCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBEZXNjcmliZUZpbGVTaW1wICgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBUd2luZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdldEZpbGVTaW1wT3B0aW9uKCBpbnQgaWdub3JlRGVmYXVsdCApOwogICAg
dm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUZpbGVHcm91cCAoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3Jp
YmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgVHdp
bmUgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRGaWxlR3JvdXBPcHRpb24oIGludCBpZ25v
cmVEZWZhdWx0ICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJl
VXNlSGVyb0ZsYWcgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xh
c3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKTsKICAgIFR3aW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0VXNlSGVy
b0ZsYWdPcHRpb24oIGludCBpZ25vcmVEZWZhdWx0ICk7CgogICAgdm9pZCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEZXNjcmliZUlzQW5pbWF0aW5nICgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIERlc2NyaWJlQW5pbUVuYWJsZWQgKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRGVzY3JpYmVPYmplY3RPcmlnaW4gKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFR3aW5lICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR2V0T2JqZWN0T3JpZ2luT3B0aW9uKCBpbnQgaWdub3JlRGVmYXVsdCApOwoK
ICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdE9iamVjdChGSUxFICpmcCwg
Y29uc3QgTGlzdDxUd2luZT4gJmxzKTsKCiAgICAgCiAgICAgCiAgICAgCiAgICBOUkhZX2NsYXNz
T2JqZWN0TWFuaXB1bGF0b3IqIEdldE1hbmlwdWxhdG9yKCkgeyByZXR1cm4gKG1hbmlwdWxhdG9y
KTsgfQogICAgQk9PTEVBTiBDcmVhdGVNYW5pcHVsYXRvcigpOyAKICAgIHZvaWQgRGVzdHJveU1h
bmlwdWxhdG9yKCk7CiAgICB2b2lkIFJlcG9zaXRpb25DaGFucyggdmVjdG9yPCBOUkhZX2NsYXNz
Q2hhbm5lbCogPiYsCgkJCSAgdmVjdG9yPCBOUkhZX2NsYXNzQ2hhbm5lbCogPiYsCgkJCSAgdmVj
dG9yPCBOUkhZX2NsYXNzQ2hhbm5lbCogPiYgKTsKICAgIHZvaWQgUmVwb3NpdGlvbkNoYW5zKCBj
bGFzcyBOUkhZX2NsYXNzQ2hhbm5lbExpc3QmICk7CiAgICBNX01hdHJpeCBSZXBvc2l0aW9uTWF0
cml4KCBjb25zdCBNX01hdHJpeCYsIGludCwKCQkJICAgICAgIHZlY3RvcjwgTlJIWV9jbGFzc0No
YW5uZWwqID4mLAoJCQkgICAgICAgdmVjdG9yPCBOUkhZX2NsYXNzQ2hhbm5lbCogPiYsCgkJCSAg
ICAgICB2ZWN0b3I8IE5SSFlfY2xhc3NDaGFubmVsKiA+JiApOwogICAgaW50IFJlcG9zaXRpb24o
IGNvbnN0IE1fTWF0cml4JiBuZXdQb3MsIGludCBmcmFtZSwgYm9vbCBzY2FsZSA9IGZhbHNlLAoJ
CSAgICBib29sIHJvdCA9IHRydWUsIGJvb2wgdHJhbiA9IHRydWUsIGJvb2wgc2F2ZSA9IHRydWUg
KTsKICAgIGludCBSZXBvc2l0aW9uKCBOUkhZX2NsYXNzVGhpbmcqIHRhcmdldCwgaW50IGZyYW1l
LAoJCSAgICBib29sIHNjYWxlID0gZmFsc2UsIGJvb2wgcm90ID0gdHJ1ZSwgYm9vbCB0cmFuID0g
dHJ1ZSwKCQkgICAgYm9vbCBzYXZlID0gdHJ1ZSApOwoKICAgIHZvaWQgU2V0SWdub3JlRXh0cmFD
aGFubmVsTW9kZSggWk9PTEVBTiBzdGF0ZSApIHsgZXh0cmFNb2RlID0gc3RhdGU7IH0KICAgIFpP
T0xFQU4gR2V0SWdub3JlRXh0cmFDaGFubmVsTW9kZSgpIHsgcmV0dXJuKGV4dHJhTW9kZSk7IH0K
ICAgIHZvaWQgU2V0T3JiaXRPYmplY3QoIE5SSFlfY2xhc3NPYmplY3QqIG9iaiApIHsgdGhpcy0+
b3JiaXRPYmplY3Q9b2JqOyB9CiAgICBOUkhZX2NsYXNzT2JqZWN0KiBHZXRPcmJpdE9iamVjdCgp
OwogICAgTV9WZWN0b3IgR2V0UmF5SW50ZXJzZWN0aW9uKCBNX1ZlY3RvciBvcmlnaW4sIE1fVmVj
dG9yIHJheSApOwogICAgQk9PTEVBTiBTZXRQcmltYXJ5Q29uc3RyYWludCggTlJIWV9jbGFzc1Ry
YWNrKiB0cmsgKSB7Cgl0aGlzLT5wcmltYXJ5Q29uc3RyYWludD10cms7IAoJcmV0dXJuIDEgOwog
ICAgfQogICAgTlJIWV9jbGFzc1RyYWNrKiBHZXRQcmltYXJ5Q29uc3RyYWludCgpIHsKCXJldHVy
biB0aGlzLT5wcmltYXJ5Q29uc3RyYWludDsKICAgIH0KICAgIEJPT0xFQU4gU2V0U2Vjb25kYXJ5
Q29uc3RyYWludCggTlJIWV9jbGFzc1RyYWNrKiB0cmsgKSB7Cgl0aGlzLT5zZWNvbmRhcnlDb25z
dHJhaW50PXRyazsKCXJldHVybiAxIDsKICAgIH0KICAgIE5SSFlfY2xhc3NUcmFjayogR2V0U2Vj
b25kYXJ5Q29uc3RyYWludCgpIHsKCXJldHVybiB0aGlzLT5zZWNvbmRhcnlDb25zdHJhaW50Owog
ICAgfQogICAgQk9PTEVBTiBTZXRDb25zdHJhaW50R2VvbWV0cnkoIE5SSFlfY2xhc3NPYmplY3Qq
IG9iamVjdCApIHsKCXRoaXMtPmNvbnN0cmFpbnRHZW9tZXRyeT1vYmplY3Q7IAoJcmV0dXJuIDEg
OwogICAgfQogICAgTlJIWV9jbGFzc09iamVjdCogR2V0Q29uc3RyYWludEdlb21ldHJ5KCkgewoJ
cmV0dXJuIHRoaXMtPmNvbnN0cmFpbnRHZW9tZXRyeTsKICAgIH0KCgoKICAgICAKICAgIEJPT0xF
QU4gICAgICAgICAgICAgICAgICAgICBTZXRGaWxlSGVybyAoY29uc3QgVHdpbmUgJiBuZXdGaWxl
SGVybyk7CiAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgU2V0RmlsZVNpbXAgKGNvbnN0
IFR3aW5lICYgbmV3RmlsZVNpbXApOwogICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgIFNl
dEZpbGVHcm91cCAoY29uc3QgVHdpbmUgJiBuZXdGaWxlR3JvdXApOwogICAgQk9PTEVBTiAgICAg
ICAgICAgICAgICAgICAgIFNldFVzZUhlcm9GbGFnIChCT09MRUFOIG5ld1N0YXR1cyk7CiAgICBC
T09MRUFOICAgICAgICAgICAgICAgICAgICAgR2V0VXNlSGVyb0ZsYWcgKCk7CiAgICBCT09MRUFO
ICAgICAgICAgICAgICAgICAgICAgU2V0VXNlRmlsZUNoYW5uZWwgKEJPT0xFQU4gbmV3U3RhdHVz
KTsKICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICBHZXRVc2VGaWxlQ2hhbm5lbCAoKTsK
CiAgICBjb25zdCBUd2luZSAmICAgICAgICAgICAgICAgR2V0RmlsZUhlcm8gKCk7CiAgICBjb25z
dCBUd2luZSAmICAgICAgICAgICAgICAgR2V0RmlsZVNpbXAgKCk7CiAgICBjb25zdCBUd2luZSAm
ICAgICAgICAgICAgICAgR2V0RmlsZUdyb3VwICgpOwoKICAgIGNvbnN0IFR3aW5lICYgICAgICAg
ICAgICAgICBHZXRPcmlnRmlsZUhlcm8gKCk7CiAgICBjb25zdCBUd2luZSAmICAgICAgICAgICAg
ICAgR2V0T3JpZ0ZpbGVTaW1wICgpOwoKICAgIGNvbnN0IExpc3QgPFR3aW5lPiAmICAgICAgICBH
ZXRGaWxlbmFtZXMgKGZsb2F0IHRpbWUpOwogICAgY29uc3QgVHdpbmUgJiAgICAgICAgICAgICAg
IEdldEZpbGVHcm91cEFuZE92ZXJyaWRlICgpOwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAg
ICAgICBPdmVycmlkZUZpbGUgKGNvbnN0IFR3aW5lICYgbmV3RmlsZSk7CiAgICB2b2lkICAgICAg
ICAgICAgICAgICAgICAgICAgT3ZlcnJpZGVOZXh0ZmlsZSAoY29uc3QgVHdpbmUgJiBuZXdOZXh0
ZmlsZSk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgT3ZlcnJpZGVHcm91cCAoY29u
c3QgVHdpbmUgJiBuZXdHcm91cCk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgUmVz
ZXRPdmVycmlkZSAoKTsKCiAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgU2V0T2JqZWN0
T3JpZ2luKE5SSFlfY2xhc3NUaGluZyAqb3JpZ2luKTsKICAgIE5SSFlfY2xhc3NPYmplY3QgKkdl
dE9iamVjdFB0cigpIHsgcmV0dXJuIHRoaXM7IH0KfTsKCiAKCiAKCiMgNDAgImgvbnJoeV9jbGFz
c0NhbWVyYS5oIiAyCgojIDEgImgvbnJoeV9jbGFzc1ZpZXdNYW5pcHVsYXRvci5oIiAxCiAKCgoK
CgoKCgoKCgoKCgoKCmNsYXNzIE5SSFlfY2xhc3NPYmplY3Q7CmNsYXNzIE5SSFlfY2xhc3NUaGlu
ZzsKY2xhc3MgTlJIWV9jbGFzc0NhbWVyYTsKIyAxICJoL25yaHlfY2xhc3NPYnNlcnZlci5oIiAx
CgoKCiAKCgoKIAogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyMSAiaC9ucmh5X2NsYXNz
Vmlld01hbmlwdWxhdG9yLmgiIDIKCiMgMSAiaC9ucmh5X2NsYXNzQ2hhbm5lbExpc3QuaCIgMQog
CiAKIAogCiAKCgoKCgoKIyAxICIvc29mdHdhcmUvdGhhbGlhL2gvc3RkdHlwZXMuaCIgMQoKIAoK
CgoKCgoKCgoKCgoKCgoKCiMgMjAzICIvc29mdHdhcmUvdGhhbGlhL2gvc3RkdHlwZXMuaCIKCgoK
CgoKCgoKCgoKCgojIDEyICJoL25yaHlfY2xhc3NDaGFubmVsTGlzdC5oIiAyCgpjbGFzcyBOUkhZ
X2NsYXNzQ2hhbm5lbDsKCiAKIAoKY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtOwoKIAoK
Y2xhc3MgTlJIWV9jbGFzc0NoYW5uZWxMaXN0IDogCiAgICAgICAgcHVibGljIFN1YmplY3QsCiAg
ICAgICAgcHVibGljIE9ic2VydmVyLCAgCiAgICAgICAgcHVibGljIE9ic2VydmVyRmFjdG9yeTxO
UkhZX2NsYXNzQ2hhbm5lbExpc3Q+CnsKICAgIEJPT0xFQU4gY2hlY2tDaGFubmVsQ3VycmVuY3kg
KE5SSFlfY2xhc3NDaGFubmVsICpjaGFuKTsKICAgIEJPT0xFQU4gX21hZGVDdXJyZW50Owpwcm90
ZWN0ZWQ6CiAgICBMaXN0IDxjbGFzcyBOUkhZX2NsYXNzQ2hhbm5lbCAqPiBfY2hhbm5lbHM7CiAg
ICBMaXN0IDxjbGFzcyBOUkhZX2NsYXNzVGhpbmcgICAqPiBfdGhpbmdzOwogICAgQk9PTEVBTiBf
bmVlZHNTb3J0aW5nOwogICAgQk9PTEVBTiBfaXNTb3J0YWJsZTsKICAgIGludCAgQWxsb3dEZXN0
cnVjdEJ5U3ViamVjdCAoKSB7IHJldHVybiAwIDsgfTsKICAgIHZvaWQgc29ydCAoKTsKcHVibGlj
OgogICAgTlJIWV9jbGFzc0NoYW5uZWxMaXN0IChCT09MRUFOIG1ha2VDdXJyZW50ID0gMSApOwog
ICB+TlJIWV9jbGFzc0NoYW5uZWxMaXN0ICgpOwogICAgdm9pZCAgICBTb3J0ICgpIHsgaWYgKF9u
ZWVkc1NvcnRpbmcpIHNvcnQoKTsgfQogICAgdm9pZCAgICBSZW1vdmVBbGwgICgpOwogICAgdm9p
ZCAgICBTZXRDdXJyZW50IChjb25zdCBMaXN0IDxjbGFzcyBOUkhZX2NsYXNzQ2hhbm5lbCAqPiAm
KTsKICAgIEJPT0xFQU4gQWRkICAgICAoTlJIWV9jbGFzc0NoYW5uZWwgKik7CiAgICBCT09MRUFO
IFJlbW92ZSAgKE5SSFlfY2xhc3NDaGFubmVsICopOwogICAgQk9PTEVBTiBTYXZlICAgICgpOwog
ICAgQk9PTEVBTiBSZXNldCAgICgpOwogICAgdm9pZCAgICBSZWZyZXNoT2JzZXJ2ZXIgKFN1Ympl
Y3QgKik7CiAgICB2b2lkIENyZWF0ZU9ic2VydmVyIChpbnQgdHlwZSkgeyBkb0NyZWF0ZU9ic2Vy
dmVyICh0aGlzLCB0eXBlKTsgfTsKICAgIGludCAgICAgc2l6ZSAgICAoKSB7IHJldHVybiBfY2hh
bm5lbHMuc2l6ZSgpOyB9OwogICAgdm9pZCAgICBTZXRJc1NvcnRhYmxlIChCT09MRUFOIGY9IDEg
KSB7IF9pc1NvcnRhYmxlID0gZjsgfTsKICAgIE5SSFlfY2xhc3NDaGFubmVsICpvcGVyYXRvciBb
XSAoaW50IGkpIAogICAgICAgICAgICAgICAgeyBTb3J0ICgpOyByZXR1cm4gX2NoYW5uZWxzW2ld
OyB9OwogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBOUkhZX2NsYXNzQ2hhbm5lbExpc3QmICk7
CiAgICBMaXN0IDxOUkhZX2NsYXNzQ2hhbm5lbCAqPiAmR2V0Q2hhbm5lbHMgKCkgCiAgICAgICAg
ICAgICAgICB7IFNvcnQgKCk7IHJldHVybiBfY2hhbm5lbHM7IH07CiAgICBMaXN0IDxOUkhZX2Ns
YXNzQ2hhbm5lbCAqPiAmR2V0VW5zb3J0ZWRDaGFubmVscyAoKSAKICAgICAgICAgICAgICAgIHsg
cmV0dXJuIF9jaGFubmVsczsgfTsKICAgIExpc3QgPE5SSFlfY2xhc3NDaGFubmVsICo+IEdldENo
YW5uZWxzQWRkZWQgKE5SSFlfY2xhc3NDaGFubmVsTGlzdCAmKTsKICAgIExpc3QgPE5SSFlfY2xh
c3NDaGFubmVsICo+IEdldENoYW5uZWxzUmVtb3ZlZCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoTlJIWV9jbGFzc0NoYW5uZWxMaXN0ICZjaGFuTGlzdCkgCiAgICAgICAgICAgICAg
ICB7IHJldHVybiBjaGFuTGlzdC5HZXRDaGFubmVsc0FkZGVkICgqdGhpcyk7IH07CiAgICBMaXN0
IDxOUkhZX2NsYXNzQ2hhbm5lbCAqPiBHZXRDaGFubmVsc0ZvclRoaW5nIChOUkhZX2NsYXNzVGhp
bmcgKik7CiAgICBMaXN0IDxOUkhZX2NsYXNzVGhpbmcgKj4gIEdldFRoaW5ncyAoKTsKICAgIExp
c3QgPE5SSFlfY2xhc3NUaGluZyAqPiAgR2V0VGhpbmdzQ2hhbmdlZCAoTlJIWV9jbGFzc0NoYW5u
ZWxMaXN0ICYpOwogICAgTGlzdCA8TlJIWV9jbGFzc1RoaW5nICo+ICBHZXRUaGluZ3NBZGRlZCAg
IChOUkhZX2NsYXNzQ2hhbm5lbExpc3QgJik7CiAgICBMaXN0IDxOUkhZX2NsYXNzVGhpbmcgKj4g
IEdldFRoaW5nc1JlbW92ZWQgKE5SSFlfY2xhc3NDaGFubmVsTGlzdCAmY2hhbkxpc3QpCiAgICAg
ICAgICAgICAgICB7IHJldHVybiBjaGFuTGlzdC5HZXRUaGluZ3NBZGRlZCAoKnRoaXMpOyB9Owog
ICAgaW50IEdldE9ic2VydmVyVHlwZSgpIHsgcmV0dXJuIDB4MDAwMDAwODAgOyB9OwoKICAgIHZv
aWQgRGVzY3JpYmVDdXJ2ZXMoIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSYgKTsKCn07CgogCmNs
YXNzIE5SSFlfY2xhc3NDaGFubmVsTGlzdE9ic2VydmVyIDogCiAgICBwdWJsaWMgT2JzZXJ2ZXIg
IAp7CnByaXZhdGU6CiAgICB2b2lkIFJlZnJlc2hPYnNlcnZlciAoU3ViamVjdCAqY2hhbkxpc3Qp
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUmVmcmVzaENoYW5uZWxMaXN0IChj
aGFuTGlzdCk7IH07CiAgICBpbnQgIEdldFR5cGUgKCkgICAgICAgICAgICAgeyByZXR1cm4gR2V0
VHlwZUNoYW5uZWxMaXN0KCk7ICAgfTsKICAgIGludCAgQWxsb3dEZXN0cnVjdEJ5U3ViamVjdCAo
KSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBBbGxvd0Rlc3RydWN0
QnlTdWJqZWN0Q2hhbm5lbExpc3QoKTsgfTsKcHVibGljOgogICAgdmlydHVhbCB2b2lkIFJlZnJl
c2hDaGFubmVsTGlzdCAoU3ViamVjdCAqKSA9IDA7CiAgICB2aXJ0dWFsIGludCAgR2V0VHlwZUNo
YW5uZWxMaXN0ICgpID0gMDsKICAgIHZpcnR1YWwgaW50ICBBbGxvd0Rlc3RydWN0QnlTdWJqZWN0
Q2hhbm5lbExpc3QgKCkgPSAwOwoKICAgIE5SSFlfY2xhc3NDaGFubmVsTGlzdE9ic2VydmVyIChO
UkhZX2NsYXNzQ2hhbm5lbExpc3QgKmNoYW5MaXN0KSA6CiAgICAgICAgT2JzZXJ2ZXIgKGNoYW5M
aXN0KSB7IH07Cn07CgoKCiMgMjIgImgvbnJoeV9jbGFzc1ZpZXdNYW5pcHVsYXRvci5oIiAyCgoj
IDEgImgvVmlld01hbmlwdWxhdG9yLmgiIDEKCgoKIyAxICJoL01hbmlwdWxhdG9yLmgiIDEKCgoK
IyAxICIvc29mdHdhcmUvdGhhbGlhL2gvT3BlblN0YWdlLmgiIDEKCgoKIyAxICIvdXNyL1gxMVI2
L2luY2x1ZGUvWG0vWG0uaCIgMQogCgoKIAogCgogCiAKIAoKCgoKCgoKCgoKCgoKIyAxICIvdXNy
L1gxMVI2L2luY2x1ZGUvWDExL0ludHJpbnNpYy5oIiAxCiAKIAoKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9YMTFSNi9pbmNs
dWRlL1gxMS9YbGliLmgiIDEKIAogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvWDExUjYvaW5jbHVkZS9YMTEvWC5oIiAxCiAK
CgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKIAoKIAoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYSUQ7CnR5cGVkZWYgdW5zaWduZWQg
bG9uZyBNYXNrOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgQXRvbTsKdHlwZWRlZiB1bnNpZ25lZCBs
b25nIFZpc3VhbElEOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVGltZTsKCgoKCgoKCgoKdHlwZWRl
ZiBYSUQgV2luZG93Owp0eXBlZGVmIFhJRCBEcmF3YWJsZTsKdHlwZWRlZiBYSUQgRm9udDsKdHlw
ZWRlZiBYSUQgUGl4bWFwOwp0eXBlZGVmIFhJRCBDdXJzb3I7CnR5cGVkZWYgWElEIENvbG9ybWFw
Owp0eXBlZGVmIFhJRCBHQ29udGV4dDsKdHlwZWRlZiBYSUQgS2V5U3ltOwoKdHlwZWRlZiB1bnNp
Z25lZCBjaGFyIEtleUNvZGU7CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiAK
CgoKCgoKCgoKIAoKCgoKCgoKCQkgICAgICAgCiAKCgoKCgoKCgoKCiAKCgoKCgogCgoKCgogCgoK
CgoKIAoKCgoKIAoKCgoKIAoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoK
CgoKCgoKCgojIDM0NSAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9YLmgiCgoKCgoKCgoKCgoKIAoK
CgogCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgog
CgoKCiAKCgoKCgogCgoKCgoKIAoKCgoKIAoKCgoKCiAKCgoKCgoKCiAKCgoKCiAKCgoKCgogCgoK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoKIAoKCgoKCiAKCgoKCgoKIAoKCgoK
IAoKCgoKIAoKCgoKCgogCgoKCgogCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgogCgoKCiAKCgoKCgoKIAoKCgogCgoKCgoKIAoKCgogCgoKCgoKIAoKCgoKCiAKCgoKIAoK
CgoKCiAKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCiAKCgoK
CiAKCgoKIAoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCiAKCgoKCgojIDU2ICIvdXNyL1gxMVI2L2lu
Y2x1ZGUvWDExL1hsaWIuaCIgMgoKCiAKIyAxICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL1hmdW5j
cHJvdG8uaCIgMQogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA1OSAiL3Vzci9Y
MTFSNi9pbmNsdWRlL1gxMS9YbGliLmgiIDIKCiMgMSAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9Y
b3NkZWZzLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAgCgoKCgoKCgojIDk0ICIvdXNyL1gxMVI2
L2luY2x1ZGUvWDExL1hvc2RlZnMuaCIKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoj
IDYwICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL1hsaWIuaCIgMgoKCgoKCgoKCgoKCgoKIyAxICIv
dXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9z
dGRkZWYuaCIgMSAzCiMgMzQyICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9l
Z2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKIyA3MyAiL3Vzci9YMTFSNi9pbmNsdWRl
L1gxMS9YbGliLmgiIDIKCiMgODYgIi91c3IvWDExUjYvaW5jbHVkZS9YMTEvWGxpYi5oIgoKCgoK
CgoKCgoKdHlwZWRlZiBjaGFyICpYUG9pbnRlcjsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCnR5cGVkZWYgc3Ry
dWN0IF9YRXh0RGF0YSB7CglpbnQgbnVtYmVyOwkJIAoJc3RydWN0IF9YRXh0RGF0YSAqbmV4dDsJ
IAoJaW50ICgqZnJlZV9wcml2YXRlKSgJIAoKCXN0cnVjdCBfWEV4dERhdGEgKmV4dGVuc2lvbgoK
CSk7CglYUG9pbnRlciBwcml2YXRlX2RhdGE7CSAKfSBYRXh0RGF0YTsKCiAKCgp0eXBlZGVmIHN0
cnVjdCB7CQkgCglpbnQgZXh0ZW5zaW9uOwkJIAoJaW50IG1ham9yX29wY29kZTsJIAoJaW50IGZp
cnN0X2V2ZW50OwkgCglpbnQgZmlyc3RfZXJyb3I7CSAKfSBYRXh0Q29kZXM7CgogCgoKCnR5cGVk
ZWYgc3RydWN0IHsKICAgIGludCBkZXB0aDsKICAgIGludCBiaXRzX3Blcl9waXhlbDsKICAgIGlu
dCBzY2FubGluZV9wYWQ7Cn0gWFBpeG1hcEZvcm1hdFZhbHVlczsKCgogCgoKdHlwZWRlZiBzdHJ1
Y3QgewoJaW50IGZ1bmN0aW9uOwkJIAoJdW5zaWduZWQgbG9uZyBwbGFuZV9tYXNrOyAKCXVuc2ln
bmVkIGxvbmcgZm9yZWdyb3VuZDsgCgl1bnNpZ25lZCBsb25nIGJhY2tncm91bmQ7IAoJaW50IGxp
bmVfd2lkdGg7CQkgCglpbnQgbGluZV9zdHlsZTsJIAkgCglpbnQgY2FwX3N0eWxlOwkgIAkgCgoJ
aW50IGpvaW5fc3R5bGU7CSAJIAoJaW50IGZpbGxfc3R5bGU7CSAJIAoKCWludCBmaWxsX3J1bGU7
CSAgCSAKCWludCBhcmNfbW9kZTsJCSAKCVBpeG1hcCB0aWxlOwkJIAoJUGl4bWFwIHN0aXBwbGU7
CQkgCglpbnQgdHNfeF9vcmlnaW47CSAKCWludCB0c195X29yaWdpbjsKICAgICAgICBGb250IGZv
bnQ7CSAgICAgICAgIAoJaW50IHN1YndpbmRvd19tb2RlOyAgICAgIAoJaW50ICBncmFwaGljc19l
eHBvc3VyZXM7IAoJaW50IGNsaXBfeF9vcmlnaW47CSAKCWludCBjbGlwX3lfb3JpZ2luOwoJUGl4
bWFwIGNsaXBfbWFzazsJIAoJaW50IGRhc2hfb2Zmc2V0OwkgCgljaGFyIGRhc2hlczsKfSBYR0NW
YWx1ZXM7CgogCgoKCgp0eXBlZGVmIHN0cnVjdCBfWEdDCgoKCgoKCgoqR0M7CgogCgoKdHlwZWRl
ZiBzdHJ1Y3QgewoJWEV4dERhdGEgKmV4dF9kYXRhOwkgCglWaXN1YWxJRCB2aXN1YWxpZDsJIAoK
CWludCBjX2NsYXNzOwkJIAoKCgoJdW5zaWduZWQgbG9uZyByZWRfbWFzaywgZ3JlZW5fbWFzaywg
Ymx1ZV9tYXNrOwkgCglpbnQgYml0c19wZXJfcmdiOwkgCglpbnQgbWFwX2VudHJpZXM7CSAKfSBW
aXN1YWw7CgogCgoJCnR5cGVkZWYgc3RydWN0IHsKCWludCBkZXB0aDsJCSAKCWludCBudmlzdWFs
czsJCSAKCVZpc3VhbCAqdmlzdWFsczsJIAp9IERlcHRoOwoKIAoKCgoKCnN0cnVjdCBfWERpc3Bs
YXk7CQkgCgp0eXBlZGVmIHN0cnVjdCB7CglYRXh0RGF0YSAqZXh0X2RhdGE7CSAKCXN0cnVjdCBf
WERpc3BsYXkgKmRpc3BsYXk7IAoJV2luZG93IHJvb3Q7CQkgCglpbnQgd2lkdGgsIGhlaWdodDsJ
IAoJaW50IG13aWR0aCwgbWhlaWdodDsJIAoJaW50IG5kZXB0aHM7CQkgCglEZXB0aCAqZGVwdGhz
OwkJIAoJaW50IHJvb3RfZGVwdGg7CQkgCglWaXN1YWwgKnJvb3RfdmlzdWFsOwkgCglHQyBkZWZh
dWx0X2djOwkJIAoJQ29sb3JtYXAgY21hcDsJCSAKCXVuc2lnbmVkIGxvbmcgd2hpdGVfcGl4ZWw7
Cgl1bnNpZ25lZCBsb25nIGJsYWNrX3BpeGVsOwkgCglpbnQgbWF4X21hcHMsIG1pbl9tYXBzOwkg
CglpbnQgYmFja2luZ19zdG9yZTsJIAoJaW50ICBzYXZlX3VuZGVyczsJCglsb25nIHJvb3RfaW5w
dXRfbWFzazsJIAp9IFNjcmVlbjsKCiAKCgp0eXBlZGVmIHN0cnVjdCB7CglYRXh0RGF0YSAqZXh0
X2RhdGE7CSAKCWludCBkZXB0aDsJCSAKCWludCBiaXRzX3Blcl9waXhlbDsJIAoJaW50IHNjYW5s
aW5lX3BhZDsJIAp9IFNjcmVlbkZvcm1hdDsKCiAKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBQaXht
YXAgYmFja2dyb3VuZF9waXhtYXA7CSAKICAgIHVuc2lnbmVkIGxvbmcgYmFja2dyb3VuZF9waXhl
bDsJIAogICAgUGl4bWFwIGJvcmRlcl9waXhtYXA7CSAKICAgIHVuc2lnbmVkIGxvbmcgYm9yZGVy
X3BpeGVsOwkgCiAgICBpbnQgYml0X2dyYXZpdHk7CQkgCiAgICBpbnQgd2luX2dyYXZpdHk7CQkg
CiAgICBpbnQgYmFja2luZ19zdG9yZTsJCSAKICAgIHVuc2lnbmVkIGxvbmcgYmFja2luZ19wbGFu
ZXM7IAogICAgdW5zaWduZWQgbG9uZyBiYWNraW5nX3BpeGVsOyAKICAgIGludCAgc2F2ZV91bmRl
cjsJCSAKICAgIGxvbmcgZXZlbnRfbWFzazsJCSAKICAgIGxvbmcgZG9fbm90X3Byb3BhZ2F0ZV9t
YXNrOwkgCiAgICBpbnQgIG92ZXJyaWRlX3JlZGlyZWN0OwkgCiAgICBDb2xvcm1hcCBjb2xvcm1h
cDsJCSAKICAgIEN1cnNvciBjdXJzb3I7CQkgCn0gWFNldFdpbmRvd0F0dHJpYnV0ZXM7Cgp0eXBl
ZGVmIHN0cnVjdCB7CiAgICBpbnQgeCwgeTsJCQkgCiAgICBpbnQgd2lkdGgsIGhlaWdodDsJCSAK
ICAgIGludCBib3JkZXJfd2lkdGg7CQkgCiAgICBpbnQgZGVwdGg7ICAgICAgICAgIAkgCiAgICBW
aXN1YWwgKnZpc3VhbDsJCSAKICAgIFdpbmRvdyByb290OyAgICAgICAgCSAKCiAgICBpbnQgY19j
bGFzczsJCSAKCgoKICAgIGludCBiaXRfZ3Jhdml0eTsJCSAKICAgIGludCB3aW5fZ3Jhdml0eTsJ
CSAKICAgIGludCBiYWNraW5nX3N0b3JlOwkJIAogICAgdW5zaWduZWQgbG9uZyBiYWNraW5nX3Bs
YW5lczsgCiAgICB1bnNpZ25lZCBsb25nIGJhY2tpbmdfcGl4ZWw7IAogICAgaW50ICBzYXZlX3Vu
ZGVyOwkJIAogICAgQ29sb3JtYXAgY29sb3JtYXA7CQkgCiAgICBpbnQgIG1hcF9pbnN0YWxsZWQ7
CQkgCiAgICBpbnQgbWFwX3N0YXRlOwkJIAogICAgbG9uZyBhbGxfZXZlbnRfbWFza3M7CSAKICAg
IGxvbmcgeW91cl9ldmVudF9tYXNrOwkgCiAgICBsb25nIGRvX25vdF9wcm9wYWdhdGVfbWFzazsg
IAogICAgaW50ICBvdmVycmlkZV9yZWRpcmVjdDsJIAogICAgU2NyZWVuICpzY3JlZW47CQkgCn0g
WFdpbmRvd0F0dHJpYnV0ZXM7CgogCgoKCgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgZmFtaWx5OwkJ
IAoJaW50IGxlbmd0aDsJCSAKCWNoYXIgKmFkZHJlc3M7CQkgCn0gWEhvc3RBZGRyZXNzOwoKIAoK
CnR5cGVkZWYgc3RydWN0IF9YSW1hZ2UgewogICAgaW50IHdpZHRoLCBoZWlnaHQ7CQkgCiAgICBp
bnQgeG9mZnNldDsJCSAKICAgIGludCBmb3JtYXQ7CQkJIAogICAgY2hhciAqZGF0YTsJCQkgCiAg
ICBpbnQgYnl0ZV9vcmRlcjsJCSAKICAgIGludCBiaXRtYXBfdW5pdDsJCSAKICAgIGludCBiaXRt
YXBfYml0X29yZGVyOwkgCiAgICBpbnQgYml0bWFwX3BhZDsJCSAKICAgIGludCBkZXB0aDsJCQkg
CiAgICBpbnQgYnl0ZXNfcGVyX2xpbmU7CQkgCiAgICBpbnQgYml0c19wZXJfcGl4ZWw7CQkgCiAg
ICB1bnNpZ25lZCBsb25nIHJlZF9tYXNrOwkgCiAgICB1bnNpZ25lZCBsb25nIGdyZWVuX21hc2s7
CiAgICB1bnNpZ25lZCBsb25nIGJsdWVfbWFzazsKICAgIFhQb2ludGVyIG9iZGF0YTsJCSAKICAg
IHN0cnVjdCBmdW5jcyB7CQkgCgoJc3RydWN0IF9YSW1hZ2UgKigqY3JlYXRlX2ltYWdlKSgKCQlz
dHJ1Y3QgX1hEaXNwbGF5KiAgLAoJCVZpc3VhbCoJCSAsCgkJdW5zaWduZWQgaW50CSAsCgkJaW50
CQkgLAoJCWludAkJICwKCQljaGFyKgkJICwKCQl1bnNpZ25lZCBpbnQJICwKCQl1bnNpZ25lZCBp
bnQJICwKCQlpbnQJCSAsCgkJaW50CQkgKTsKCWludCAoKmRlc3Ryb3lfaW1hZ2UpICAgICAgICAo
c3RydWN0IF9YSW1hZ2UgKik7Cgl1bnNpZ25lZCBsb25nICgqZ2V0X3BpeGVsKSAgKHN0cnVjdCBf
WEltYWdlICosIGludCwgaW50KTsKCWludCAoKnB1dF9waXhlbCkgICAgICAgICAgICAoc3RydWN0
IF9YSW1hZ2UgKiwgaW50LCBpbnQsIHVuc2lnbmVkIGxvbmcpOwoJc3RydWN0IF9YSW1hZ2UgKigq
c3ViX2ltYWdlKShzdHJ1Y3QgX1hJbWFnZSAqLCBpbnQsIGludCwgdW5zaWduZWQgaW50LCB1bnNp
Z25lZCBpbnQpOwoJaW50ICgqYWRkX3BpeGVsKSAgICAgICAgICAgIChzdHJ1Y3QgX1hJbWFnZSAq
LCBsb25nKTsKCgoKCgoKCgoJfSBmOwp9IFhJbWFnZTsKCiAKCgp0eXBlZGVmIHN0cnVjdCB7CiAg
ICBpbnQgeCwgeTsKICAgIGludCB3aWR0aCwgaGVpZ2h0OwogICAgaW50IGJvcmRlcl93aWR0aDsK
ICAgIFdpbmRvdyBzaWJsaW5nOwogICAgaW50IHN0YWNrX21vZGU7Cn0gWFdpbmRvd0NoYW5nZXM7
CgogCgoKdHlwZWRlZiBzdHJ1Y3QgewoJdW5zaWduZWQgbG9uZyBwaXhlbDsKCXVuc2lnbmVkIHNo
b3J0IHJlZCwgZ3JlZW4sIGJsdWU7CgljaGFyIGZsYWdzOyAgIAoJY2hhciBwYWQ7Cn0gWENvbG9y
OwoKIAoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgc2hvcnQgeDEsIHkxLCB4MiwgeTI7Cn0gWFNl
Z21lbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBzaG9ydCB4LCB5Owp9IFhQb2ludDsKICAgIAp0
eXBlZGVmIHN0cnVjdCB7CiAgICBzaG9ydCB4LCB5OwogICAgdW5zaWduZWQgc2hvcnQgd2lkdGgs
IGhlaWdodDsKfSBYUmVjdGFuZ2xlOwogICAgCnR5cGVkZWYgc3RydWN0IHsKICAgIHNob3J0IHgs
IHk7CiAgICB1bnNpZ25lZCBzaG9ydCB3aWR0aCwgaGVpZ2h0OwogICAgc2hvcnQgYW5nbGUxLCBh
bmdsZTI7Cn0gWEFyYzsKCgogCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IGtleV9jbGlj
a19wZXJjZW50OwogICAgICAgIGludCBiZWxsX3BlcmNlbnQ7CiAgICAgICAgaW50IGJlbGxfcGl0
Y2g7CiAgICAgICAgaW50IGJlbGxfZHVyYXRpb247CiAgICAgICAgaW50IGxlZDsKICAgICAgICBp
bnQgbGVkX21vZGU7CiAgICAgICAgaW50IGtleTsKICAgICAgICBpbnQgYXV0b19yZXBlYXRfbW9k
ZTsgICAgCn0gWEtleWJvYXJkQ29udHJvbDsKCiAKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBp
bnQga2V5X2NsaWNrX3BlcmNlbnQ7CglpbnQgYmVsbF9wZXJjZW50OwoJdW5zaWduZWQgaW50IGJl
bGxfcGl0Y2gsIGJlbGxfZHVyYXRpb247Cgl1bnNpZ25lZCBsb25nIGxlZF9tYXNrOwoJaW50IGds
b2JhbF9hdXRvX3JlcGVhdDsKCWNoYXIgYXV0b19yZXBlYXRzWzMyXTsKfSBYS2V5Ym9hcmRTdGF0
ZTsKCiAKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBUaW1lIHRpbWU7CglzaG9ydCB4LCB5Owp9
IFhUaW1lQ29vcmQ7CgogCgp0eXBlZGVmIHN0cnVjdCB7CiAJaW50IG1heF9rZXlwZXJtb2Q7CSAK
IAlLZXlDb2RlICptb2RpZmllcm1hcDsJIAp9IFhNb2RpZmllcktleW1hcDsKCgogCgoKCgoKdHlw
ZWRlZiBzdHJ1Y3QgX1hEaXNwbGF5IERpc3BsYXk7CgoKc3RydWN0IF9YUHJpdmF0ZTsJCSAKc3Ry
dWN0IF9Ycm1IYXNoQnVja2V0UmVjOwoKdHlwZWRlZiBzdHJ1Y3QgCgoKCnsKCVhFeHREYXRhICpl
eHRfZGF0YTsJIAoJc3RydWN0IF9YUHJpdmF0ZSAqcHJpdmF0ZTE7CglpbnQgZmQ7CQkJIAoJaW50
IHByaXZhdGUyOwoJaW50IHByb3RvX21ham9yX3ZlcnNpb247IAoJaW50IHByb3RvX21pbm9yX3Zl
cnNpb247IAoJY2hhciAqdmVuZG9yOwkJIAogICAgICAgIFhJRCBwcml2YXRlMzsKCVhJRCBwcml2
YXRlNDsKCVhJRCBwcml2YXRlNTsKCWludCBwcml2YXRlNjsKCVhJRCAoKnJlc291cmNlX2FsbG9j
KSgJIAoKCQlzdHJ1Y3QgX1hEaXNwbGF5KgoKCSk7CglpbnQgYnl0ZV9vcmRlcjsJCSAKCWludCBi
aXRtYXBfdW5pdDsJIAoJaW50IGJpdG1hcF9wYWQ7CQkgCglpbnQgYml0bWFwX2JpdF9vcmRlcjsJ
IAoJaW50IG5mb3JtYXRzOwkJIAoJU2NyZWVuRm9ybWF0ICpwaXhtYXBfZm9ybWF0OwkgCglpbnQg
cHJpdmF0ZTg7CglpbnQgcmVsZWFzZTsJCSAKCXN0cnVjdCBfWFByaXZhdGUgKnByaXZhdGU5LCAq
cHJpdmF0ZTEwOwoJaW50IHFsZW47CQkgCgl1bnNpZ25lZCBsb25nIGxhc3RfcmVxdWVzdF9yZWFk
OyAgCgl1bnNpZ25lZCBsb25nIHJlcXVlc3Q7CSAKCVhQb2ludGVyIHByaXZhdGUxMTsKCVhQb2lu
dGVyIHByaXZhdGUxMjsKCVhQb2ludGVyIHByaXZhdGUxMzsKCVhQb2ludGVyIHByaXZhdGUxNDsK
CXVuc2lnbmVkIG1heF9yZXF1ZXN0X3NpemU7ICAKCXN0cnVjdCBfWHJtSGFzaEJ1Y2tldFJlYyAq
ZGI7CglpbnQgKCpwcml2YXRlMTUpKAoKCQlzdHJ1Y3QgX1hEaXNwbGF5KgoKCQkpOwoJY2hhciAq
ZGlzcGxheV9uYW1lOwkgCglpbnQgZGVmYXVsdF9zY3JlZW47CSAKCWludCBuc2NyZWVuczsJCSAK
CVNjcmVlbiAqc2NyZWVuczsJIAoJdW5zaWduZWQgbG9uZyBtb3Rpb25fYnVmZmVyOwkgCgl1bnNp
Z25lZCBsb25nIHByaXZhdGUxNjsKCWludCBtaW5fa2V5Y29kZTsJIAoJaW50IG1heF9rZXljb2Rl
OwkgCglYUG9pbnRlciBwcml2YXRlMTc7CglYUG9pbnRlciBwcml2YXRlMTg7CglpbnQgcHJpdmF0
ZTE5OwoJY2hhciAqeGRlZmF1bHRzOwkgCgkgCn0KCgoKKl9YUHJpdkRpc3BsYXk7CgoKCgoKIAoK
CnR5cGVkZWYgc3RydWN0IHsKCWludCB0eXBlOwkJIAoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAK
CWludCAgc2VuZF9ldmVudDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93IHdpbmRvdzsJ
ICAgICAgICAgCglXaW5kb3cgcm9vdDsJICAgICAgICAgCglXaW5kb3cgc3Vid2luZG93OwkgCglU
aW1lIHRpbWU7CQkgCglpbnQgeCwgeTsJCSAKCWludCB4X3Jvb3QsIHlfcm9vdDsJIAoJdW5zaWdu
ZWQgaW50IHN0YXRlOwkgCgl1bnNpZ25lZCBpbnQga2V5Y29kZTsJIAoJaW50ICBzYW1lX3NjcmVl
bjsJIAp9IFhLZXlFdmVudDsKdHlwZWRlZiBYS2V5RXZlbnQgWEtleVByZXNzZWRFdmVudDsKdHlw
ZWRlZiBYS2V5RXZlbnQgWEtleVJlbGVhc2VkRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQg
dHlwZTsJCSAKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURp
c3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRvdyB3aW5kb3c7CSAgICAgICAgIAoJV2luZG93IHJvb3Q7
CSAgICAgICAgIAoJV2luZG93IHN1YndpbmRvdzsJIAoJVGltZSB0aW1lOwkJIAoJaW50IHgsIHk7
CQkgCglpbnQgeF9yb290LCB5X3Jvb3Q7CSAKCXVuc2lnbmVkIGludCBzdGF0ZTsJIAoJdW5zaWdu
ZWQgaW50IGJ1dHRvbjsJIAoJaW50ICBzYW1lX3NjcmVlbjsJIAp9IFhCdXR0b25FdmVudDsKdHlw
ZWRlZiBYQnV0dG9uRXZlbnQgWEJ1dHRvblByZXNzZWRFdmVudDsKdHlwZWRlZiBYQnV0dG9uRXZl
bnQgWEJ1dHRvblJlbGVhc2VkRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsJCSAK
CXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRp
c3BsYXk7CSAKCVdpbmRvdyB3aW5kb3c7CSAgICAgICAgIAoJV2luZG93IHJvb3Q7CSAgICAgICAg
IAoJV2luZG93IHN1YndpbmRvdzsJIAoJVGltZSB0aW1lOwkJIAoJaW50IHgsIHk7CQkgCglpbnQg
eF9yb290LCB5X3Jvb3Q7CSAKCXVuc2lnbmVkIGludCBzdGF0ZTsJIAoJY2hhciBpc19oaW50OwkJ
IAoJaW50ICBzYW1lX3NjcmVlbjsJIAp9IFhNb3Rpb25FdmVudDsKdHlwZWRlZiBYTW90aW9uRXZl
bnQgWFBvaW50ZXJNb3ZlZEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7CQkgCgl1
bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5ICpkaXNw
bGF5OwkgCglXaW5kb3cgd2luZG93OwkgICAgICAgICAKCVdpbmRvdyByb290OwkgICAgICAgICAK
CVdpbmRvdyBzdWJ3aW5kb3c7CSAKCVRpbWUgdGltZTsJCSAKCWludCB4LCB5OwkJIAoJaW50IHhf
cm9vdCwgeV9yb290OwkgCglpbnQgbW9kZTsJCSAKCWludCBkZXRhaWw7CgkgCgoKCglpbnQgIHNh
bWVfc2NyZWVuOwkgCglpbnQgIGZvY3VzOwkJIAoJdW5zaWduZWQgaW50IHN0YXRlOwkgCn0gWENy
b3NzaW5nRXZlbnQ7CnR5cGVkZWYgWENyb3NzaW5nRXZlbnQgWEVudGVyV2luZG93RXZlbnQ7CnR5
cGVkZWYgWENyb3NzaW5nRXZlbnQgWExlYXZlV2luZG93RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7
CglpbnQgdHlwZTsJCSAKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7
CSAKCURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRvdyB3aW5kb3c7CQkgCglpbnQgbW9kZTsJCSAK
CWludCBkZXRhaWw7CgkgCgoKCgp9IFhGb2N1c0NoYW5nZUV2ZW50Owp0eXBlZGVmIFhGb2N1c0No
YW5nZUV2ZW50IFhGb2N1c0luRXZlbnQ7CnR5cGVkZWYgWEZvY3VzQ2hhbmdlRXZlbnQgWEZvY3Vz
T3V0RXZlbnQ7CgogCnR5cGVkZWYgc3RydWN0IHsKCWludCB0eXBlOwoJdW5zaWduZWQgbG9uZyBz
ZXJpYWw7CSAKCWludCAgc2VuZF9ldmVudDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93
IHdpbmRvdzsKCWNoYXIga2V5X3ZlY3RvclszMl07Cn0gWEtleW1hcEV2ZW50OwkKCnR5cGVkZWYg
c3RydWN0IHsKCWludCB0eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAgc2VuZF9l
dmVudDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93IHdpbmRvdzsKCWludCB4LCB5OwoJ
aW50IHdpZHRoLCBoZWlnaHQ7CglpbnQgY291bnQ7CQkgCn0gWEV4cG9zZUV2ZW50OwoKdHlwZWRl
ZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5k
X2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglEcmF3YWJsZSBkcmF3YWJsZTsKCWludCB4
LCB5OwoJaW50IHdpZHRoLCBoZWlnaHQ7CglpbnQgY291bnQ7CQkgCglpbnQgbWFqb3JfY29kZTsJ
CSAKCWludCBtaW5vcl9jb2RlOwkJIAp9IFhHcmFwaGljc0V4cG9zZUV2ZW50OwoKdHlwZWRlZiBz
dHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2
ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglEcmF3YWJsZSBkcmF3YWJsZTsKCWludCBtYWpv
cl9jb2RlOwkJIAoJaW50IG1pbm9yX2NvZGU7CQkgCn0gWE5vRXhwb3NlRXZlbnQ7Cgp0eXBlZGVm
IHN0cnVjdCB7CglpbnQgdHlwZTsKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRf
ZXZlbnQ7CSAKCURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRvdyB3aW5kb3c7CglpbnQgc3RhdGU7
CQkgCn0gWFZpc2liaWxpdHlFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKCWludCB0eXBlOwoJdW5z
aWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAgc2VuZF9ldmVudDsJIAoJRGlzcGxheSAqZGlzcGxh
eTsJIAoJV2luZG93IHBhcmVudDsJCSAKCVdpbmRvdyB3aW5kb3c7CQkgCglpbnQgeCwgeTsJCSAK
CWludCB3aWR0aCwgaGVpZ2h0OwkgCglpbnQgYm9yZGVyX3dpZHRoOwkgCglpbnQgIG92ZXJyaWRl
X3JlZGlyZWN0OwkgCn0gWENyZWF0ZVdpbmRvd0V2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50
IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNw
bGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgZXZlbnQ7CglXaW5kb3cgd2luZG93Owp9IFhEZXN0cm95
V2luZG93RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsKCXVuc2lnbmVkIGxvbmcg
c2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRv
dyBldmVudDsKCVdpbmRvdyB3aW5kb3c7CglpbnQgIGZyb21fY29uZmlndXJlOwp9IFhVbm1hcEV2
ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJ
IAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgZXZlbnQ7
CglXaW5kb3cgd2luZG93OwoJaW50ICBvdmVycmlkZV9yZWRpcmVjdDsJIAp9IFhNYXBFdmVudDsK
CnR5cGVkZWYgc3RydWN0IHsKCWludCB0eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWlu
dCAgc2VuZF9ldmVudDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93IHBhcmVudDsKCVdp
bmRvdyB3aW5kb3c7Cn0gWE1hcFJlcXVlc3RFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKCWludCB0
eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAgc2VuZF9ldmVudDsJIAoJRGlzcGxh
eSAqZGlzcGxheTsJIAoJV2luZG93IGV2ZW50OwoJV2luZG93IHdpbmRvdzsKCVdpbmRvdyBwYXJl
bnQ7CglpbnQgeCwgeTsKCWludCAgb3ZlcnJpZGVfcmVkaXJlY3Q7Cn0gWFJlcGFyZW50RXZlbnQ7
Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglp
bnQgIHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRvdyBldmVudDsKCVdp
bmRvdyB3aW5kb3c7CglpbnQgeCwgeTsKCWludCB3aWR0aCwgaGVpZ2h0OwoJaW50IGJvcmRlcl93
aWR0aDsKCVdpbmRvdyBhYm92ZTsKCWludCAgb3ZlcnJpZGVfcmVkaXJlY3Q7Cn0gWENvbmZpZ3Vy
ZUV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlh
bDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgZXZl
bnQ7CglXaW5kb3cgd2luZG93OwoJaW50IHgsIHk7Cn0gWEdyYXZpdHlFdmVudDsKCnR5cGVkZWYg
c3RydWN0IHsKCWludCB0eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAgc2VuZF9l
dmVudDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93IHdpbmRvdzsKCWludCB3aWR0aCwg
aGVpZ2h0Owp9IFhSZXNpemVSZXF1ZXN0RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlw
ZTsKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkg
KmRpc3BsYXk7CSAKCVdpbmRvdyBwYXJlbnQ7CglXaW5kb3cgd2luZG93OwoJaW50IHgsIHk7Cglp
bnQgd2lkdGgsIGhlaWdodDsKCWludCBib3JkZXJfd2lkdGg7CglXaW5kb3cgYWJvdmU7CglpbnQg
ZGV0YWlsOwkJIAoJdW5zaWduZWQgbG9uZyB2YWx1ZV9tYXNrOwp9IFhDb25maWd1cmVSZXF1ZXN0
RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsKCXVuc2lnbmVkIGxvbmcgc2VyaWFs
OwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRvdyBldmVu
dDsKCVdpbmRvdyB3aW5kb3c7CglpbnQgcGxhY2U7CQkgCn0gWENpcmN1bGF0ZUV2ZW50OwoKdHlw
ZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBz
ZW5kX2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgcGFyZW50OwoJV2luZG93
IHdpbmRvdzsKCWludCBwbGFjZTsJCSAKfSBYQ2lyY3VsYXRlUmVxdWVzdEV2ZW50OwoKdHlwZWRl
ZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5k
X2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgd2luZG93OwoJQXRvbSBhdG9t
OwoJVGltZSB0aW1lOwoJaW50IHN0YXRlOwkJIAp9IFhQcm9wZXJ0eUV2ZW50OwoKdHlwZWRlZiBz
dHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2
ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgd2luZG93OwoJQXRvbSBzZWxlY3Rp
b247CglUaW1lIHRpbWU7Cn0gWFNlbGVjdGlvbkNsZWFyRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7
CglpbnQgdHlwZTsKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAK
CURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRvdyBvd25lcjsKCVdpbmRvdyByZXF1ZXN0b3I7CglB
dG9tIHNlbGVjdGlvbjsKCUF0b20gdGFyZ2V0OwoJQXRvbSBwcm9wZXJ0eTsKCVRpbWUgdGltZTsK
fSBYU2VsZWN0aW9uUmVxdWVzdEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1
bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5ICpkaXNw
bGF5OwkgCglXaW5kb3cgcmVxdWVzdG9yOwoJQXRvbSBzZWxlY3Rpb247CglBdG9tIHRhcmdldDsK
CUF0b20gcHJvcGVydHk7CQkgCglUaW1lIHRpbWU7Cn0gWFNlbGVjdGlvbkV2ZW50OwoKdHlwZWRl
ZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5k
X2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgd2luZG93OwoJQ29sb3JtYXAg
Y29sb3JtYXA7CSAKCglpbnQgIGNfbmV3OwkJIAoKCgoJaW50IHN0YXRlOwkJIAp9IFhDb2xvcm1h
cEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlh
bDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgd2lu
ZG93OwoJQXRvbSBtZXNzYWdlX3R5cGU7CglpbnQgZm9ybWF0OwoJdW5pb24gewoJCWNoYXIgYlsy
MF07CgkJc2hvcnQgc1sxMF07CgkJbG9uZyBsWzVdOwoJCX0gZGF0YTsKfSBYQ2xpZW50TWVzc2Fn
ZUV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlh
bDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgd2lu
ZG93OwkJIAoJaW50IHJlcXVlc3Q7CQkgCgoJaW50IGZpcnN0X2tleWNvZGU7CSAKCWludCBjb3Vu
dDsJCSAKfSBYTWFwcGluZ0V2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7CglEaXNw
bGF5ICpkaXNwbGF5OwkgCglYSUQgcmVzb3VyY2VpZDsJCSAKCXVuc2lnbmVkIGxvbmcgc2VyaWFs
OwkgCgl1bnNpZ25lZCBjaGFyIGVycm9yX2NvZGU7CSAKCXVuc2lnbmVkIGNoYXIgcmVxdWVzdF9j
b2RlOwkgCgl1bnNpZ25lZCBjaGFyIG1pbm9yX2NvZGU7CSAKfSBYRXJyb3JFdmVudDsKCnR5cGVk
ZWYgc3RydWN0IHsKCWludCB0eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAgc2Vu
ZF9ldmVudDsJIAoJRGlzcGxheSAqZGlzcGxheTsgCglXaW5kb3cgd2luZG93OwkgCn0gWEFueUV2
ZW50OwoKIAoKCgp0eXBlZGVmIHVuaW9uIF9YRXZlbnQgewogICAgICAgIGludCB0eXBlOwkJIAoJ
WEFueUV2ZW50IHhhbnk7CglYS2V5RXZlbnQgeGtleTsKCVhCdXR0b25FdmVudCB4YnV0dG9uOwoJ
WE1vdGlvbkV2ZW50IHhtb3Rpb247CglYQ3Jvc3NpbmdFdmVudCB4Y3Jvc3Npbmc7CglYRm9jdXND
aGFuZ2VFdmVudCB4Zm9jdXM7CglYRXhwb3NlRXZlbnQgeGV4cG9zZTsKCVhHcmFwaGljc0V4cG9z
ZUV2ZW50IHhncmFwaGljc2V4cG9zZTsKCVhOb0V4cG9zZUV2ZW50IHhub2V4cG9zZTsKCVhWaXNp
YmlsaXR5RXZlbnQgeHZpc2liaWxpdHk7CglYQ3JlYXRlV2luZG93RXZlbnQgeGNyZWF0ZXdpbmRv
dzsKCVhEZXN0cm95V2luZG93RXZlbnQgeGRlc3Ryb3l3aW5kb3c7CglYVW5tYXBFdmVudCB4dW5t
YXA7CglYTWFwRXZlbnQgeG1hcDsKCVhNYXBSZXF1ZXN0RXZlbnQgeG1hcHJlcXVlc3Q7CglYUmVw
YXJlbnRFdmVudCB4cmVwYXJlbnQ7CglYQ29uZmlndXJlRXZlbnQgeGNvbmZpZ3VyZTsKCVhHcmF2
aXR5RXZlbnQgeGdyYXZpdHk7CglYUmVzaXplUmVxdWVzdEV2ZW50IHhyZXNpemVyZXF1ZXN0OwoJ
WENvbmZpZ3VyZVJlcXVlc3RFdmVudCB4Y29uZmlndXJlcmVxdWVzdDsKCVhDaXJjdWxhdGVFdmVu
dCB4Y2lyY3VsYXRlOwoJWENpcmN1bGF0ZVJlcXVlc3RFdmVudCB4Y2lyY3VsYXRlcmVxdWVzdDsK
CVhQcm9wZXJ0eUV2ZW50IHhwcm9wZXJ0eTsKCVhTZWxlY3Rpb25DbGVhckV2ZW50IHhzZWxlY3Rp
b25jbGVhcjsKCVhTZWxlY3Rpb25SZXF1ZXN0RXZlbnQgeHNlbGVjdGlvbnJlcXVlc3Q7CglYU2Vs
ZWN0aW9uRXZlbnQgeHNlbGVjdGlvbjsKCVhDb2xvcm1hcEV2ZW50IHhjb2xvcm1hcDsKCVhDbGll
bnRNZXNzYWdlRXZlbnQgeGNsaWVudDsKCVhNYXBwaW5nRXZlbnQgeG1hcHBpbmc7CglYRXJyb3JF
dmVudCB4ZXJyb3I7CglYS2V5bWFwRXZlbnQgeGtleW1hcDsKCWxvbmcgcGFkWzI0XTsKfSBYRXZl
bnQ7CgoKCgogCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgc2hvcnQJbGJlYXJpbmc7CSAKICAgIHNo
b3J0CXJiZWFyaW5nOwkgCiAgICBzaG9ydAl3aWR0aDsJCSAKICAgIHNob3J0CWFzY2VudDsJCSAK
ICAgIHNob3J0CWRlc2NlbnQ7CSAKICAgIHVuc2lnbmVkIHNob3J0IGF0dHJpYnV0ZXM7CSAKfSBY
Q2hhclN0cnVjdDsKCiAKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQXRvbSBuYW1lOwogICAgdW5z
aWduZWQgbG9uZyBjYXJkMzI7Cn0gWEZvbnRQcm9wOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgWEV4
dERhdGEJKmV4dF9kYXRhOwkgCiAgICBGb250ICAgICAgICBmaWQ7ICAgICAgICAgICAgIAogICAg
dW5zaWduZWQJZGlyZWN0aW9uOwkgCiAgICB1bnNpZ25lZAltaW5fY2hhcl9vcl9ieXRlMjsgCiAg
ICB1bnNpZ25lZAltYXhfY2hhcl9vcl9ieXRlMjsgCiAgICB1bnNpZ25lZAltaW5fYnl0ZTE7CSAK
ICAgIHVuc2lnbmVkCW1heF9ieXRlMTsJIAogICAgaW50IAlhbGxfY2hhcnNfZXhpc3Q7IAogICAg
dW5zaWduZWQJZGVmYXVsdF9jaGFyOwkgCiAgICBpbnQgICAgICAgICBuX3Byb3BlcnRpZXM7ICAg
IAogICAgWEZvbnRQcm9wCSpwcm9wZXJ0aWVzOwkgCiAgICBYQ2hhclN0cnVjdAltaW5fYm91bmRz
OwkgCiAgICBYQ2hhclN0cnVjdAltYXhfYm91bmRzOwkgCiAgICBYQ2hhclN0cnVjdAkqcGVyX2No
YXI7CSAKICAgIGludAkJYXNjZW50OwkJIAogICAgaW50CQlkZXNjZW50OwkgCn0gWEZvbnRTdHJ1
Y3Q7CgogCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciAqY2hhcnM7CQkgCiAgICBpbnQgbmNo
YXJzOwkJCSAKICAgIGludCBkZWx0YTsJCQkgCiAgICBGb250IGZvbnQ7CQkJIAp9IFhUZXh0SXRl
bTsKCnR5cGVkZWYgc3RydWN0IHsJCSAKICAgIHVuc2lnbmVkIGNoYXIgYnl0ZTE7CiAgICB1bnNp
Z25lZCBjaGFyIGJ5dGUyOwp9IFhDaGFyMmI7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYQ2hhcjJi
ICpjaGFyczsJCSAKICAgIGludCBuY2hhcnM7CQkJIAogICAgaW50IGRlbHRhOwkJCSAKICAgIEZv
bnQgZm9udDsJCQkgCn0gWFRleHRJdGVtMTY7CgoKdHlwZWRlZiB1bmlvbiB7IERpc3BsYXkgKmRp
c3BsYXk7CgkJR0MgZ2M7CgkJVmlzdWFsICp2aXN1YWw7CgkJU2NyZWVuICpzY3JlZW47CgkJU2Ny
ZWVuRm9ybWF0ICpwaXhtYXBfZm9ybWF0OwoJCVhGb250U3RydWN0ICpmb250OyB9IFhFRGF0YU9i
amVjdDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFhSZWN0YW5nbGUgICAgICBtYXhfaW5rX2V4dGVu
dDsKICAgIFhSZWN0YW5nbGUgICAgICBtYXhfbG9naWNhbF9leHRlbnQ7Cn0gWEZvbnRTZXRFeHRl
bnRzOwoKIAoKCgp0eXBlZGVmIHN0cnVjdCBfWE9NICpYT007CnR5cGVkZWYgc3RydWN0IF9YT0Mg
KlhPQywgKlhGb250U2V0OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciAgICAgICAgICAgKmNo
YXJzOwogICAgaW50ICAgICAgICAgICAgIG5jaGFyczsKICAgIGludCAgICAgICAgICAgICBkZWx0
YTsKICAgIFhGb250U2V0ICAgICAgICBmb250X3NldDsKfSBYbWJUZXh0SXRlbTsKCnR5cGVkZWYg
c3RydWN0IHsKICAgIHdjaGFyX3QgICAgICAgICpjaGFyczsKICAgIGludCAgICAgICAgICAgICBu
Y2hhcnM7CiAgICBpbnQgICAgICAgICAgICAgZGVsdGE7CiAgICBYRm9udFNldCAgICAgICAgZm9u
dF9zZXQ7Cn0gWHdjVGV4dEl0ZW07CgoKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIGlu
dCBjaGFyc2V0X2NvdW50OwogICAgY2hhciAqKmNoYXJzZXRfbGlzdDsKfSBYT01DaGFyU2V0TGlz
dDsKCnR5cGVkZWYgZW51bSB7CiAgICBYT01PcmllbnRhdGlvbl9MVFJfVFRCLAogICAgWE9NT3Jp
ZW50YXRpb25fUlRMX1RUQiwKICAgIFhPTU9yaWVudGF0aW9uX1RUQl9MVFIsCiAgICBYT01Pcmll
bnRhdGlvbl9UVEJfUlRMLAogICAgWE9NT3JpZW50YXRpb25fQ29udGV4dAp9IFhPcmllbnRhdGlv
bjsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGludCBudW1fb3JpZW50YXRpb247CiAgICBYT3JpZW50
YXRpb24gKm9yaWVudGF0aW9uOwkgCn0gWE9NT3JpZW50YXRpb247Cgp0eXBlZGVmIHN0cnVjdCB7
CiAgICBpbnQgbnVtX2ZvbnQ7CiAgICBYRm9udFN0cnVjdCAqKmZvbnRfc3RydWN0X2xpc3Q7CiAg
ICBjaGFyICoqZm9udF9uYW1lX2xpc3Q7Cn0gWE9NRm9udEluZm87Cgp0eXBlZGVmIHN0cnVjdCBf
WElNICpYSU07CnR5cGVkZWYgc3RydWN0IF9YSUMgKlhJQzsKCnR5cGVkZWYgdm9pZCAoKlhJTVBy
b2MpKAoKICAgIFhJTSwKICAgIFhQb2ludGVyLAogICAgWFBvaW50ZXIKCik7Cgp0eXBlZGVmIGlu
dCAgKCpYSUNQcm9jKSgKCiAgICBYSUMsCiAgICBYUG9pbnRlciwKICAgIFhQb2ludGVyCgopOwoK
dHlwZWRlZiB2b2lkICgqWElEUHJvYykoCgogICAgRGlzcGxheSosCiAgICBYUG9pbnRlciwKICAg
IFhQb2ludGVyCgopOwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFhJTVN0eWxlOwoKdHlwZWRlZiBz
dHJ1Y3QgewogICAgdW5zaWduZWQgc2hvcnQgY291bnRfc3R5bGVzOwogICAgWElNU3R5bGUgKnN1
cHBvcnRlZF9zdHlsZXM7Cn0gWElNU3R5bGVzOwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgdm9pZCAqWFZhTmVzdGVk
TGlzdDsKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIFhQb2ludGVyIGNsaWVudF9kYXRhOwogICAg
WElNUHJvYyBjYWxsYmFjazsKfSBYSU1DYWxsYmFjazsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFhQ
b2ludGVyIGNsaWVudF9kYXRhOwogICAgWElDUHJvYyBjYWxsYmFjazsKfSBYSUNDYWxsYmFjazsK
CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYSU1GZWVkYmFjazsKCgoKCgoKCgoKCgp0eXBlZGVmIHN0
cnVjdCBfWElNVGV4dCB7CiAgICB1bnNpZ25lZCBzaG9ydCBsZW5ndGg7CiAgICBYSU1GZWVkYmFj
ayAqZmVlZGJhY2s7CiAgICBpbnQgIGVuY29kaW5nX2lzX3djaGFyOyAKICAgIHVuaW9uIHsKCWNo
YXIgKm11bHRpX2J5dGU7Cgl3Y2hhcl90ICp3aWRlX2NoYXI7CiAgICB9IHN0cmluZzsgCn0gWElN
VGV4dDsKCnR5cGVkZWYJdW5zaWduZWQgbG9uZwkgWElNUHJlZWRpdFN0YXRlOwoKCgoKCnR5cGVk
ZWYJc3RydWN0CV9YSU1QcmVlZGl0U3RhdGVOb3RpZnlDYWxsYmFja1N0cnVjdCB7CiAgICBYSU1Q
cmVlZGl0U3RhdGUgc3RhdGU7Cn0gWElNUHJlZWRpdFN0YXRlTm90aWZ5Q2FsbGJhY2tTdHJ1Y3Q7
Cgp0eXBlZGVmCXVuc2lnbmVkIGxvbmcJIFhJTVJlc2V0U3RhdGU7CgoKCgp0eXBlZGVmIHVuc2ln
bmVkIGxvbmcgWElNU3RyaW5nQ29udmVyc2lvbkZlZWRiYWNrOwoKCgoKCgoKCnR5cGVkZWYgc3Ry
dWN0IF9YSU1TdHJpbmdDb252ZXJzaW9uVGV4dCB7CiAgICB1bnNpZ25lZCBzaG9ydCBsZW5ndGg7
CiAgICBYSU1TdHJpbmdDb252ZXJzaW9uRmVlZGJhY2sgKmZlZWRiYWNrOwogICAgaW50ICBlbmNv
ZGluZ19pc193Y2hhcjsgCiAgICB1bmlvbiB7CgljaGFyICptYnM7Cgl3Y2hhcl90ICp3Y3M7CiAg
ICB9IHN0cmluZzsgCn0gWElNU3RyaW5nQ29udmVyc2lvblRleHQ7Cgp0eXBlZGVmCXVuc2lnbmVk
IHNob3J0CVhJTVN0cmluZ0NvbnZlcnNpb25Qb3NpdGlvbjsKCnR5cGVkZWYJdW5zaWduZWQgc2hv
cnQJWElNU3RyaW5nQ29udmVyc2lvblR5cGU7CgoKCgoKCnR5cGVkZWYJdW5zaWduZWQgc2hvcnQJ
WElNU3RyaW5nQ29udmVyc2lvbk9wZXJhdGlvbjsKCgoKIAoKCgoKCgp0eXBlZGVmIGVudW0gewog
ICAgWElNRm9yd2FyZENoYXIsIFhJTUJhY2t3YXJkQ2hhciwKICAgIFhJTUZvcndhcmRXb3JkLCBY
SU1CYWNrd2FyZFdvcmQsCiAgICBYSU1DYXJldFVwLCBYSU1DYXJldERvd24sCiAgICBYSU1OZXh0
TGluZSwgWElNUHJldmlvdXNMaW5lLAogICAgWElNTGluZVN0YXJ0LCBYSU1MaW5lRW5kLCAKICAg
IFhJTUFic29sdXRlUG9zaXRpb24sCiAgICBYSU1Eb250Q2hhbmdlCn0gWElNQ2FyZXREaXJlY3Rp
b247Cgp0eXBlZGVmIHN0cnVjdCBfWElNU3RyaW5nQ29udmVyc2lvbkNhbGxiYWNrU3RydWN0IHsK
ICAgIFhJTVN0cmluZ0NvbnZlcnNpb25Qb3NpdGlvbiBwb3NpdGlvbjsKICAgIFhJTUNhcmV0RGly
ZWN0aW9uIGRpcmVjdGlvbjsKICAgIFhJTVN0cmluZ0NvbnZlcnNpb25PcGVyYXRpb24gb3BlcmF0
aW9uOwogICAgdW5zaWduZWQgc2hvcnQgZmFjdG9yOwogICAgWElNU3RyaW5nQ29udmVyc2lvblRl
eHQgKnRleHQ7Cn0gWElNU3RyaW5nQ29udmVyc2lvbkNhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiBz
dHJ1Y3QgX1hJTVByZWVkaXREcmF3Q2FsbGJhY2tTdHJ1Y3QgewogICAgaW50IGNhcmV0OwkJIAog
ICAgaW50IGNoZ19maXJzdDsJIAogICAgaW50IGNoZ19sZW5ndGg7CSAKICAgIFhJTVRleHQgKnRl
eHQ7Cn0gWElNUHJlZWRpdERyYXdDYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgZW51bSB7CiAgICBY
SU1Jc0ludmlzaWJsZSwJICAKICAgIFhJTUlzUHJpbWFyeSwJIAogICAgWElNSXNTZWNvbmRhcnkJ
IAp9IFhJTUNhcmV0U3R5bGU7Cgp0eXBlZGVmIHN0cnVjdCBfWElNUHJlZWRpdENhcmV0Q2FsbGJh
Y2tTdHJ1Y3QgewogICAgaW50IHBvc2l0aW9uOwkJICAKICAgIFhJTUNhcmV0RGlyZWN0aW9uIGRp
cmVjdGlvbjsgIAogICAgWElNQ2FyZXRTdHlsZSBzdHlsZTsJICAKfSBYSU1QcmVlZGl0Q2FyZXRD
YWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgZW51bSB7CiAgICBYSU1UZXh0VHlwZSwKICAgIFhJTUJp
dG1hcFR5cGUKfSBYSU1TdGF0dXNEYXRhVHlwZTsKCQp0eXBlZGVmIHN0cnVjdCBfWElNU3RhdHVz
RHJhd0NhbGxiYWNrU3RydWN0IHsKICAgIFhJTVN0YXR1c0RhdGFUeXBlIHR5cGU7CiAgICB1bmlv
biB7CglYSU1UZXh0ICp0ZXh0OwoJUGl4bWFwICBiaXRtYXA7CiAgICB9IGRhdGE7Cn0gWElNU3Rh
dHVzRHJhd0NhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QgX1hJTUhvdEtleVRyaWdnZXIg
ewogICAgS2V5U3ltCSBrZXlzeW07CiAgICBpbnQJCSBtb2RpZmllcjsKICAgIGludAkJIG1vZGlm
aWVyX21hc2s7Cn0gWElNSG90S2V5VHJpZ2dlcjsKCnR5cGVkZWYgc3RydWN0IF9YSU1Ib3RLZXlU
cmlnZ2VycyB7CiAgICBpbnQJCQkgbnVtX2hvdF9rZXk7CiAgICBYSU1Ib3RLZXlUcmlnZ2VyCSpr
ZXk7Cn0gWElNSG90S2V5VHJpZ2dlcnM7Cgp0eXBlZGVmCXVuc2lnbmVkIGxvbmcJIFhJTUhvdEtl
eVN0YXRlOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgdW5zaWduZWQgc2hvcnQgY291bnRfdmFs
dWVzOwogICAgY2hhciAqKnN1cHBvcnRlZF92YWx1ZXM7Cn0gWElNVmFsdWVzTGlzdDsKCmV4dGVy
biAiQyIgeyAKCgoKCgpleHRlcm4gaW50IF9YZGVidWc7CgpleHRlcm4gWEZvbnRTdHJ1Y3QgKlhM
b2FkUXVlcnlGb250KAoKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIqCSAKCik7Cgpl
eHRlcm4gWEZvbnRTdHJ1Y3QgKlhRdWVyeUZvbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBYSUQJ
CQkgCgopOwoKCmV4dGVybiBYVGltZUNvb3JkICpYR2V0TW90aW9uRXZlbnRzKAoKICAgIERpc3Bs
YXkqCQkgLAogICAgV2luZG93CQkgLAogICAgVGltZQkJICwKICAgIFRpbWUJCSAsCiAgICBpbnQq
CQkgCgopOwoKZXh0ZXJuIFhNb2RpZmllcktleW1hcCAqWERlbGV0ZU1vZGlmaWVybWFwRW50cnko
CgogICAgWE1vZGlmaWVyS2V5bWFwKgkgLAoKICAgIHVuc2lnbmVkIGludAkgLAoKCgogICAgaW50
CQkJIAoKKTsKCmV4dGVybiBYTW9kaWZpZXJLZXltYXAJKlhHZXRNb2RpZmllck1hcHBpbmcoCgog
ICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gWE1vZGlmaWVyS2V5bWFwCSpYSW5zZXJ0TW9kaWZp
ZXJtYXBFbnRyeSgKCiAgICBYTW9kaWZpZXJLZXltYXAqCSAsCgogICAgdW5zaWduZWQgaW50CSAs
CgoKCiAgICBpbnQJCQkgICAgIAoKKTsKCmV4dGVybiBYTW9kaWZpZXJLZXltYXAgKlhOZXdNb2Rp
Zmllcm1hcCgKCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIFhJbWFnZSAqWENyZWF0ZUltYWdlKAoK
ICAgIERpc3BsYXkqCQkgLAogICAgVmlzdWFsKgkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAg
aW50CQkJICwKICAgIGludAkJCSAsCiAgICBjaGFyKgkJICwKICAgIHVuc2lnbmVkIGludAkgLAog
ICAgdW5zaWduZWQgaW50CSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIGlu
dCAgWEluaXRJbWFnZSgKCiAgICBYSW1hZ2UqCQkgCgopOwpleHRlcm4gWEltYWdlICpYR2V0SW1h
Z2UoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIGludAkJCSAsCiAgICBp
bnQJCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2ln
bmVkIGxvbmcJICwKICAgIGludAkJCSAKCik7CmV4dGVybiBYSW1hZ2UgKlhHZXRTdWJJbWFnZSgK
CiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgaW50CQkJICwKICAgIGludAkJ
CSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQg
bG9uZwkgLAogICAgaW50CQkJICwKICAgIFhJbWFnZSoJCSAsCiAgICBpbnQJCQkgLAogICAgaW50
CQkJIAoKKTsKCiAKCgpleHRlcm4gRGlzcGxheSAqWE9wZW5EaXNwbGF5KAoKICAgIGNvbnN0ICBj
aGFyKgkgCgopOwoKZXh0ZXJuIHZvaWQgWHJtSW5pdGlhbGl6ZSgKCiAgICB2b2lkCgopOwoKZXh0
ZXJuIGNoYXIgKlhGZXRjaEJ5dGVzKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50KgkJIAoKKTsK
ZXh0ZXJuIGNoYXIgKlhGZXRjaEJ1ZmZlcigKCiAgICBEaXNwbGF5KgkJICwKICAgIGludCoJCSAs
CiAgICBpbnQJCQkgCgopOwpleHRlcm4gY2hhciAqWEdldEF0b21OYW1lKAoKICAgIERpc3BsYXkq
CQkgLAogICAgQXRvbQkJIAoKKTsKZXh0ZXJuIGludCAgWEdldEF0b21OYW1lcygKCiAgICBEaXNw
bGF5KgkJICwKICAgIEF0b20qCQkgLAogICAgaW50CQkJICwKICAgIGNoYXIqKgkJIAoKKTsKZXh0
ZXJuIGNoYXIgKlhHZXREZWZhdWx0KAoKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIq
CSAsCiAgICBjb25zdCAgY2hhcioJIAkJICAKCik7CmV4dGVybiBjaGFyICpYRGlzcGxheU5hbWUo
CgogICAgY29uc3QgIGNoYXIqCSAKCik7CmV4dGVybiBjaGFyICpYS2V5c3ltVG9TdHJpbmcoCgog
ICAgS2V5U3ltCQkgCgopOwoKZXh0ZXJuIGludCAoKlhTeW5jaHJvbml6ZSgKCiAgICBEaXNwbGF5
KgkJICwKICAgIGludCAJCSAKCikpKAoKICAgIERpc3BsYXkqCQkgCgopOwpleHRlcm4gaW50ICgq
WFNldEFmdGVyRnVuY3Rpb24oCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQgKCopICgKCgkgICAg
IERpc3BsYXkqCSAKCiAgICAgICAgICAgICkJCSAKCikpKAoKICAgIERpc3BsYXkqCQkgCgopOwpl
eHRlcm4gQXRvbSBYSW50ZXJuQXRvbSgKCiAgICBEaXNwbGF5KgkJICwKICAgIGNvbnN0ICBjaGFy
KgkgLAogICAgaW50IAkJIAkJIAoKKTsKZXh0ZXJuIGludCAgWEludGVybkF0b21zKAoKICAgIERp
c3BsYXkqCQkgLAogICAgY2hhcioqCQkgLAogICAgaW50CQkJICwKICAgIGludCAJCSAsCiAgICBB
dG9tKgkJIAoKKTsKZXh0ZXJuIENvbG9ybWFwIFhDb3B5Q29sb3JtYXBBbmRGcmVlKAoKICAgIERp
c3BsYXkqCQkgLAogICAgQ29sb3JtYXAJCSAKCik7CmV4dGVybiBDb2xvcm1hcCBYQ3JlYXRlQ29s
b3JtYXAoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBWaXN1YWwqCQkgLAog
ICAgaW50CQkJIAkJCSAKCik7CmV4dGVybiBDdXJzb3IgWENyZWF0ZVBpeG1hcEN1cnNvcigKCiAg
ICBEaXNwbGF5KgkJICwKICAgIFBpeG1hcAkJICwKICAgIFBpeG1hcAkJICwKICAgIFhDb2xvcioJ
CSAsCiAgICBYQ29sb3IqCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJ
IAkJCSAgIAoKKTsKZXh0ZXJuIEN1cnNvciBYQ3JlYXRlR2x5cGhDdXJzb3IoCgogICAgRGlzcGxh
eSoJCSAsCiAgICBGb250CQkgLAogICAgRm9udAkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAg
dW5zaWduZWQgaW50CSAsCiAgICBYQ29sb3IqCQkgLAogICAgWENvbG9yKgkJIAoKKTsKZXh0ZXJu
IEN1cnNvciBYQ3JlYXRlRm9udEN1cnNvcigKCiAgICBEaXNwbGF5KgkJICwKICAgIHVuc2lnbmVk
IGludAkgCgopOwpleHRlcm4gRm9udCBYTG9hZEZvbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBj
b25zdCAgY2hhcioJIAoKKTsKZXh0ZXJuIEdDIFhDcmVhdGVHQygKCiAgICBEaXNwbGF5KgkJICwK
ICAgIERyYXdhYmxlCQkgLAogICAgdW5zaWduZWQgbG9uZwkgLAogICAgWEdDVmFsdWVzKgkJIAoK
KTsKZXh0ZXJuIEdDb250ZXh0IFhHQ29udGV4dEZyb21HQygKCiAgICBHQwkJCSAKCik7CmV4dGVy
biB2b2lkIFhGbHVzaEdDKAoKICAgIERpc3BsYXkqCQkgLAogICAgR0MJCQkgCgopOwpleHRlcm4g
UGl4bWFwIFhDcmVhdGVQaXhtYXAoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwK
ICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJ
IAkJICAgICAgICAKCik7CmV4dGVybiBQaXhtYXAgWENyZWF0ZUJpdG1hcEZyb21EYXRhKAoKICAg
IERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIHVu
c2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAKCik7CmV4dGVybiBQaXhtYXAgWENyZWF0
ZVBpeG1hcEZyb21CaXRtYXBEYXRhKAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAs
CiAgICBjaGFyKgkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAg
ICB1bnNpZ25lZCBsb25nCSAsCiAgICB1bnNpZ25lZCBsb25nCSAsCiAgICB1bnNpZ25lZCBpbnQJ
IAoKKTsKZXh0ZXJuIFdpbmRvdyBYQ3JlYXRlU2ltcGxlV2luZG93KAoKICAgIERpc3BsYXkqCQkg
LAogICAgV2luZG93CQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBp
bnQJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25l
ZCBsb25nCSAsCiAgICB1bnNpZ25lZCBsb25nCSAKCik7CmV4dGVybiBXaW5kb3cgWEdldFNlbGVj
dGlvbk93bmVyKAoKICAgIERpc3BsYXkqCQkgLAogICAgQXRvbQkJIAoKKTsKZXh0ZXJuIFdpbmRv
dyBYQ3JlYXRlV2luZG93KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50
CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludAkg
LAogICAgdW5zaWduZWQgaW50CSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAg
ICBWaXN1YWwqCQkgLAogICAgdW5zaWduZWQgbG9uZwkgLAogICAgWFNldFdpbmRvd0F0dHJpYnV0
ZXMqCSAKCik7IApleHRlcm4gQ29sb3JtYXAgKlhMaXN0SW5zdGFsbGVkQ29sb3JtYXBzKAoKICAg
IERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50KgkJIAoKKTsKZXh0ZXJuIGNoYXIg
KipYTGlzdEZvbnRzKAoKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBp
bnQJCQkgLAogICAgaW50KgkJIAoKKTsKZXh0ZXJuIGNoYXIgKipYTGlzdEZvbnRzV2l0aEluZm8o
CgogICAgRGlzcGxheSoJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGludAkJCSAsCiAgICBp
bnQqCQkgLAogICAgWEZvbnRTdHJ1Y3QqKgkgCgopOwpleHRlcm4gY2hhciAqKlhHZXRGb250UGF0
aCgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludCoJCSAKCik7CmV4dGVybiBjaGFyICoqWExpc3RF
eHRlbnNpb25zKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50KgkJIAoKKTsKZXh0ZXJuIEF0b20g
KlhMaXN0UHJvcGVydGllcygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIGlu
dCoJCSAKCik7CmV4dGVybiBYSG9zdEFkZHJlc3MgKlhMaXN0SG9zdHMoCgogICAgRGlzcGxheSoJ
CSAsCiAgICBpbnQqCQkgLAogICAgaW50ICoJCSAKCik7CmV4dGVybiBLZXlTeW0gWEtleWNvZGVU
b0tleXN5bSgKCiAgICBEaXNwbGF5KgkJICwKCiAgICB1bnNpZ25lZCBpbnQJICwKCgoKICAgIGlu
dAkJCSAKCik7CmV4dGVybiBLZXlTeW0gWExvb2t1cEtleXN5bSgKCiAgICBYS2V5RXZlbnQqCQkg
LAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIEtleVN5bSAqWEdldEtleWJvYXJkTWFwcGluZygKCiAg
ICBEaXNwbGF5KgkJICwKCiAgICB1bnNpZ25lZCBpbnQJICwKCgoKICAgIGludAkJCSAsCiAgICBp
bnQqCQkgCgopOwpleHRlcm4gS2V5U3ltIFhTdHJpbmdUb0tleXN5bSgKCiAgICBjb25zdCAgY2hh
cioJIAoKKTsKZXh0ZXJuIGxvbmcgWE1heFJlcXVlc3RTaXplKAoKICAgIERpc3BsYXkqCQkgCgop
OwpleHRlcm4gbG9uZyBYRXh0ZW5kZWRNYXhSZXF1ZXN0U2l6ZSgKCiAgICBEaXNwbGF5KgkJIAoK
KTsKZXh0ZXJuIGNoYXIgKlhSZXNvdXJjZU1hbmFnZXJTdHJpbmcoCgogICAgRGlzcGxheSoJCSAK
Cik7CmV4dGVybiBjaGFyICpYU2NyZWVuUmVzb3VyY2VTdHJpbmcoCgoJU2NyZWVuKgkJIAoKKTsK
ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWERpc3BsYXlNb3Rpb25CdWZmZXJTaXplKAoKICAgIERpc3Bs
YXkqCQkgCgopOwpleHRlcm4gVmlzdWFsSUQgWFZpc3VhbElERnJvbVZpc3VhbCgKCiAgICBWaXN1
YWwqCQkgCgopOwoKIAoKZXh0ZXJuIGludCAgWEluaXRUaHJlYWRzKAoKICAgIHZvaWQKCik7Cgpl
eHRlcm4gdm9pZCBYTG9ja0Rpc3BsYXkoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gdm9p
ZCBYVW5sb2NrRGlzcGxheSgKCiAgICBEaXNwbGF5KgkJIAoKKTsKCiAKCmV4dGVybiBYRXh0Q29k
ZXMgKlhJbml0RXh0ZW5zaW9uKAoKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIqCSAK
Cik7CgpleHRlcm4gWEV4dENvZGVzICpYQWRkRXh0ZW5zaW9uKAoKICAgIERpc3BsYXkqCQkgCgop
OwpleHRlcm4gWEV4dERhdGEgKlhGaW5kT25FeHRlbnNpb25MaXN0KAoKICAgIFhFeHREYXRhKioJ
CSAsCiAgICBpbnQJCQkgCgopOwpleHRlcm4gWEV4dERhdGEgKipYRUhlYWRPZkV4dGVuc2lvbkxp
c3QoCgogICAgWEVEYXRhT2JqZWN0CSAKCik7CgogCmV4dGVybiBXaW5kb3cgWFJvb3RXaW5kb3co
CgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkgCgopOwpleHRlcm4gV2luZG93IFhEZWZhdWx0
Um9vdFdpbmRvdygKCiAgICBEaXNwbGF5KgkJIAoKKTsKZXh0ZXJuIFdpbmRvdyBYUm9vdFdpbmRv
d09mU2NyZWVuKAoKICAgIFNjcmVlbioJCSAKCik7CmV4dGVybiBWaXN1YWwgKlhEZWZhdWx0Vmlz
dWFsKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIFZpc3VhbCAqWERl
ZmF1bHRWaXN1YWxPZlNjcmVlbigKCiAgICBTY3JlZW4qCQkgCgopOwpleHRlcm4gR0MgWERlZmF1
bHRHQygKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CmV4dGVybiBHQyBYRGVmYXVs
dEdDT2ZTY3JlZW4oCgogICAgU2NyZWVuKgkJIAoKKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWEJs
YWNrUGl4ZWwoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkgCgopOwpleHRlcm4gdW5zaWdu
ZWQgbG9uZyBYV2hpdGVQaXhlbCgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CmV4
dGVybiB1bnNpZ25lZCBsb25nIFhBbGxQbGFuZXMoCgogICAgdm9pZAoKKTsKZXh0ZXJuIHVuc2ln
bmVkIGxvbmcgWEJsYWNrUGl4ZWxPZlNjcmVlbigKCiAgICBTY3JlZW4qCQkgCgopOwpleHRlcm4g
dW5zaWduZWQgbG9uZyBYV2hpdGVQaXhlbE9mU2NyZWVuKAoKICAgIFNjcmVlbioJCSAKCik7CmV4
dGVybiB1bnNpZ25lZCBsb25nIFhOZXh0UmVxdWVzdCgKCiAgICBEaXNwbGF5KgkJIAoKKTsKZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgWExhc3RLbm93blJlcXVlc3RQcm9jZXNzZWQoCgogICAgRGlzcGxh
eSoJCSAKCik7CmV4dGVybiBjaGFyICpYU2VydmVyVmVuZG9yKAoKICAgIERpc3BsYXkqCQkgCgop
OwpleHRlcm4gY2hhciAqWERpc3BsYXlTdHJpbmcoCgogICAgRGlzcGxheSoJCSAKCik7CmV4dGVy
biBDb2xvcm1hcCBYRGVmYXVsdENvbG9ybWFwKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJ
IAoKKTsKZXh0ZXJuIENvbG9ybWFwIFhEZWZhdWx0Q29sb3JtYXBPZlNjcmVlbigKCiAgICBTY3Jl
ZW4qCQkgCgopOwpleHRlcm4gRGlzcGxheSAqWERpc3BsYXlPZlNjcmVlbigKCiAgICBTY3JlZW4q
CQkgCgopOwpleHRlcm4gU2NyZWVuICpYU2NyZWVuT2ZEaXNwbGF5KAoKICAgIERpc3BsYXkqCQkg
LAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIFNjcmVlbiAqWERlZmF1bHRTY3JlZW5PZkRpc3BsYXko
CgogICAgRGlzcGxheSoJCSAKCik7CmV4dGVybiBsb25nIFhFdmVudE1hc2tPZlNjcmVlbigKCiAg
ICBTY3JlZW4qCQkgCgopOwoKZXh0ZXJuIGludCBYU2NyZWVuTnVtYmVyT2ZTY3JlZW4oCgogICAg
U2NyZWVuKgkJIAoKKTsKCnR5cGVkZWYgaW50ICgqWEVycm9ySGFuZGxlcikgKAkgICAgIAoKICAg
IERpc3BsYXkqCQkgLAogICAgWEVycm9yRXZlbnQqCSAKCik7CgpleHRlcm4gWEVycm9ySGFuZGxl
ciBYU2V0RXJyb3JIYW5kbGVyICgKCiAgICBYRXJyb3JIYW5kbGVyCSAKCik7CgoKdHlwZWRlZiBp
bnQgKCpYSU9FcnJvckhhbmRsZXIpICggICAgIAoKICAgIERpc3BsYXkqCQkgCgopOwoKZXh0ZXJu
IFhJT0Vycm9ySGFuZGxlciBYU2V0SU9FcnJvckhhbmRsZXIgKAoKICAgIFhJT0Vycm9ySGFuZGxl
cgkgCgopOwoKCmV4dGVybiBYUGl4bWFwRm9ybWF0VmFsdWVzICpYTGlzdFBpeG1hcEZvcm1hdHMo
CgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQqCQkgCgopOwpleHRlcm4gaW50ICpYTGlzdERlcHRo
cygKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAsCiAgICBpbnQqCQkgCgopOwoKIAogCmV4
dGVybiBpbnQgIFhSZWNvbmZpZ3VyZVdNV2luZG93KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2lu
ZG93CQkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgWFdpbmRvd0NoYW5n
ZXMqCSAKCik7CgpleHRlcm4gaW50ICBYR2V0V01Qcm90b2NvbHMoCgogICAgRGlzcGxheSoJCSAs
CiAgICBXaW5kb3cJCSAsCiAgICBBdG9tKioJCSAsCiAgICBpbnQqCQkgCgopOwpleHRlcm4gaW50
ICBYU2V0V01Qcm90b2NvbHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBB
dG9tKgkJICwKICAgIGludAkJCSAKCik7CmV4dGVybiBpbnQgIFhJY29uaWZ5V2luZG93KAoKICAg
IERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIGludCAg
WFdpdGhkcmF3V2luZG93KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50
CQkJIAoKKTsKZXh0ZXJuIGludCAgWEdldENvbW1hbmQoCgogICAgRGlzcGxheSoJCSAsCiAgICBX
aW5kb3cJCSAsCiAgICBjaGFyKioqCQkgLAogICAgaW50KgkJIAoKKTsKZXh0ZXJuIGludCAgWEdl
dFdNQ29sb3JtYXBXaW5kb3dzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAg
V2luZG93KioJCSAsCiAgICBpbnQqCQkgCgopOwpleHRlcm4gaW50ICBYU2V0V01Db2xvcm1hcFdp
bmRvd3MoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBXaW5kb3cqCQkgLAog
ICAgaW50CQkJIAoKKTsKZXh0ZXJuIHZvaWQgWEZyZWVTdHJpbmdMaXN0KAoKICAgIGNoYXIqKgkJ
IAoKKTsKZXh0ZXJuIGludCBYU2V0VHJhbnNpZW50Rm9ySGludCgKCiAgICBEaXNwbGF5KgkJICwK
ICAgIFdpbmRvdwkJICwKICAgIFdpbmRvdwkJIAoKKTsKCiAKCmV4dGVybiBpbnQgWEFjdGl2YXRl
U2NyZWVuU2F2ZXIoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50IFhBZGRIb3N0KAoK
ICAgIERpc3BsYXkqCQkgLAogICAgWEhvc3RBZGRyZXNzKgkgCgopOwoKZXh0ZXJuIGludCBYQWRk
SG9zdHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBYSG9zdEFkZHJlc3MqCSAsCiAgICBpbnQJCQkg
ICAgIAoKKTsKCmV4dGVybiBpbnQgWEFkZFRvRXh0ZW5zaW9uTGlzdCgKCiAgICBzdHJ1Y3QgX1hF
eHREYXRhKioJICwKICAgIFhFeHREYXRhKgkJIAoKKTsKCmV4dGVybiBpbnQgWEFkZFRvU2F2ZVNl
dCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJIAoKKTsKCmV4dGVybiBpbnQgIFhBbGxv
Y0NvbG9yKAoKICAgIERpc3BsYXkqCQkgLAogICAgQ29sb3JtYXAJCSAsCiAgICBYQ29sb3IqCQkg
CgopOwoKZXh0ZXJuIGludCAgWEFsbG9jQ29sb3JDZWxscygKCiAgICBEaXNwbGF5KgkJICwKICAg
IENvbG9ybWFwCQkgLAogICAgaW50IAkgICAgICAgICAsCiAgICB1bnNpZ25lZCBsb25nKgkgLAog
ICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBsb25nKgkgLAogICAgdW5zaWduZWQgaW50
IAkgCgopOwoKZXh0ZXJuIGludCAgWEFsbG9jQ29sb3JQbGFuZXMoCgogICAgRGlzcGxheSoJCSAs
CiAgICBDb2xvcm1hcAkJICwKICAgIGludCAJCSAsCiAgICB1bnNpZ25lZCBsb25nKgkgLAogICAg
aW50CQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIHVuc2ln
bmVkIGxvbmcqCSAsCiAgICB1bnNpZ25lZCBsb25nKgkgLAogICAgdW5zaWduZWQgbG9uZyoJIAoK
KTsKCmV4dGVybiBpbnQgIFhBbGxvY05hbWVkQ29sb3IoCgogICAgRGlzcGxheSoJCSAsCiAgICBD
b2xvcm1hcAkJICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgWENvbG9yKgkJICwKICAgIFhDb2xv
cioJCSAKCik7CgpleHRlcm4gaW50IFhBbGxvd0V2ZW50cygKCiAgICBEaXNwbGF5KgkJICwKICAg
IGludAkJCSAsCiAgICBUaW1lCQkgCgopOwoKZXh0ZXJuIGludCBYQXV0b1JlcGVhdE9mZigKCiAg
ICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQgWEF1dG9SZXBlYXRPbigKCiAgICBEaXNwbGF5
KgkJIAoKKTsKCmV4dGVybiBpbnQgWEJlbGwoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkg
CgopOwoKZXh0ZXJuIGludCBYQml0bWFwQml0T3JkZXIoCgogICAgRGlzcGxheSoJCSAKCik7Cgpl
eHRlcm4gaW50IFhCaXRtYXBQYWQoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50IFhC
aXRtYXBVbml0KAoKICAgIERpc3BsYXkqCQkgCgopOwoKZXh0ZXJuIGludCBYQ2VsbHNPZlNjcmVl
bigKCiAgICBTY3JlZW4qCQkgCgopOwoKZXh0ZXJuIGludCBYQ2hhbmdlQWN0aXZlUG9pbnRlckdy
YWIoCgogICAgRGlzcGxheSoJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIEN1cnNvcgkJICwK
ICAgIFRpbWUJCSAKCik7CgpleHRlcm4gaW50IFhDaGFuZ2VHQygKCiAgICBEaXNwbGF5KgkJICwK
ICAgIEdDCQkJICwKICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIFhHQ1ZhbHVlcyoJCSAKCik7Cgpl
eHRlcm4gaW50IFhDaGFuZ2VLZXlib2FyZENvbnRyb2woCgogICAgRGlzcGxheSoJCSAsCiAgICB1
bnNpZ25lZCBsb25nCSAsCiAgICBYS2V5Ym9hcmRDb250cm9sKgkgCgopOwoKZXh0ZXJuIGludCBY
Q2hhbmdlS2V5Ym9hcmRNYXBwaW5nKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJICwKICAg
IGludAkJCSAsCiAgICBLZXlTeW0qCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWENo
YW5nZVBvaW50ZXJDb250cm9sKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50IAkJICwKICAgIGlu
dCAJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4g
aW50IFhDaGFuZ2VQcm9wZXJ0eSgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAg
IEF0b20JCSAsCiAgICBBdG9tCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBjb25z
dCAgdW5zaWduZWQgY2hhcioJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhDaGFuZ2VT
YXZlU2V0KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50CQkJIAoKKTsK
CmV4dGVybiBpbnQgWENoYW5nZVdpbmRvd0F0dHJpYnV0ZXMoCgogICAgRGlzcGxheSoJCSAsCiAg
ICBXaW5kb3cJCSAsCiAgICB1bnNpZ25lZCBsb25nCSAsCiAgICBYU2V0V2luZG93QXR0cmlidXRl
cyogIAoKKTsKCmV4dGVybiBpbnQgIFhDaGVja0lmRXZlbnQoCgogICAgRGlzcGxheSoJCSAsCiAg
ICBYRXZlbnQqCQkgLAogICAgaW50ICAoKikgKAoKCSAgICAgICBEaXNwbGF5KgkJCSAsCiAgICAg
ICAgICAgICAgIFhFdmVudCoJCQkgLAogICAgICAgICAgICAgICBYUG9pbnRlcgkJCSAKCiAgICAg
ICAgICAgICApCQkgLAogICAgWFBvaW50ZXIJCSAKCik7CgpleHRlcm4gaW50ICBYQ2hlY2tNYXNr
RXZlbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBsb25nCQkgLAogICAgWEV2ZW50KgkJIAoKKTsK
CmV4dGVybiBpbnQgIFhDaGVja1R5cGVkRXZlbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJ
CQkgLAogICAgWEV2ZW50KgkJIAoKKTsKCmV4dGVybiBpbnQgIFhDaGVja1R5cGVkV2luZG93RXZl
bnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBpbnQJCQkgLAogICAgWEV2
ZW50KgkJIAoKKTsKCmV4dGVybiBpbnQgIFhDaGVja1dpbmRvd0V2ZW50KAoKICAgIERpc3BsYXkq
CQkgLAogICAgV2luZG93CQkgLAogICAgbG9uZwkJICwKICAgIFhFdmVudCoJCSAKCik7CgpleHRl
cm4gaW50IFhDaXJjdWxhdGVTdWJ3aW5kb3dzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93
CQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWENpcmN1bGF0ZVN1YndpbmRvd3NEb3du
KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgCgopOwoKZXh0ZXJuIGludCBYQ2lyY3Vs
YXRlU3Vid2luZG93c1VwKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgCgopOwoKZXh0
ZXJuIGludCBYQ2xlYXJBcmVhKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAg
aW50CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGlu
dAkgLAogICAgaW50IAkJIAoKKTsKCmV4dGVybiBpbnQgWENsZWFyV2luZG93KAoKICAgIERpc3Bs
YXkqCQkgLAogICAgV2luZG93CQkgCgopOwoKZXh0ZXJuIGludCBYQ2xvc2VEaXNwbGF5KAoKICAg
IERpc3BsYXkqCQkgCgopOwoKZXh0ZXJuIGludCBYQ29uZmlndXJlV2luZG93KAoKICAgIERpc3Bs
YXkqCQkgLAogICAgV2luZG93CQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBYV2luZG93Q2hh
bmdlcyoJIAkJIAoKKTsKCmV4dGVybiBpbnQgWENvbm5lY3Rpb25OdW1iZXIoCgogICAgRGlzcGxh
eSoJCSAKCik7CgpleHRlcm4gaW50IFhDb252ZXJ0U2VsZWN0aW9uKAoKICAgIERpc3BsYXkqCQkg
LAogICAgQXRvbQkJICwKICAgIEF0b20gCQkgLAogICAgQXRvbQkJICwKICAgIFdpbmRvdwkJICwK
ICAgIFRpbWUJCSAKCik7CgpleHRlcm4gaW50IFhDb3B5QXJlYSgKCiAgICBEaXNwbGF5KgkJICwK
ICAgIERyYXdhYmxlCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkg
LAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAg
ICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWENvcHlHQygKCiAgICBEaXNw
bGF5KgkJICwKICAgIEdDCQkJICwKICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIEdDCQkJIAoKKTsK
CmV4dGVybiBpbnQgWENvcHlQbGFuZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkg
LAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwK
ICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBpbnQJCQkgLAogICAg
aW50CQkJICwKICAgIHVuc2lnbmVkIGxvbmcJIAoKKTsKCmV4dGVybiBpbnQgWERlZmF1bHREZXB0
aCgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhEZWZhdWx0
RGVwdGhPZlNjcmVlbigKCiAgICBTY3JlZW4qCQkgCgopOwoKZXh0ZXJuIGludCBYRGVmYXVsdFNj
cmVlbigKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQgWERlZmluZUN1cnNvcigKCiAg
ICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIEN1cnNvcgkJIAoKKTsKCmV4dGVybiBp
bnQgWERlbGV0ZVByb3BlcnR5KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAg
QXRvbQkJIAoKKTsKCmV4dGVybiBpbnQgWERlc3Ryb3lXaW5kb3coCgogICAgRGlzcGxheSoJCSAs
CiAgICBXaW5kb3cJCSAKCik7CgpleHRlcm4gaW50IFhEZXN0cm95U3Vid2luZG93cygKCiAgICBE
aXNwbGF5KgkJICwKICAgIFdpbmRvdwkJIAoKKTsKCmV4dGVybiBpbnQgWERvZXNCYWNraW5nU3Rv
cmUoCgogICAgU2NyZWVuKgkJICAgICAKCik7CgpleHRlcm4gaW50ICBYRG9lc1NhdmVVbmRlcnMo
CgogICAgU2NyZWVuKgkJIAoKKTsKCmV4dGVybiBpbnQgWERpc2FibGVBY2Nlc3NDb250cm9sKAoK
ICAgIERpc3BsYXkqCQkgCgopOwoKCmV4dGVybiBpbnQgWERpc3BsYXlDZWxscygKCiAgICBEaXNw
bGF5KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhEaXNwbGF5SGVpZ2h0KAoKICAg
IERpc3BsYXkqCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWERpc3BsYXlIZWlnaHRN
TSgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhEaXNwbGF5
S2V5Y29kZXMoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJIAoKKTsK
CmV4dGVybiBpbnQgWERpc3BsYXlQbGFuZXMoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkg
CgopOwoKZXh0ZXJuIGludCBYRGlzcGxheVdpZHRoKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50
CQkJIAoKKTsKCmV4dGVybiBpbnQgWERpc3BsYXlXaWR0aE1NKAoKICAgIERpc3BsYXkqCQkgLAog
ICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWERyYXdBcmMoCgogICAgRGlzcGxheSoJCSAsCiAg
ICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAg
dW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIGludAkJCSAsCiAgICBpbnQJ
CQkgCgopOwoKZXh0ZXJuIGludCBYRHJhd0FyY3MoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3
YWJsZQkJICwKICAgIEdDCQkJICwKICAgIFhBcmMqCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVy
biBpbnQgWERyYXdJbWFnZVN0cmluZygKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkg
LAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBjb25zdCAgY2hhcioJ
ICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhEcmF3SW1hZ2VTdHJpbmcxNigKCiAgICBE
aXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAg
IGludAkJCSAsCiAgICBjb25zdCAgWENoYXIyYioJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4g
aW50IFhEcmF3TGluZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgR0MJ
CQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoK
KTsKCmV4dGVybiBpbnQgWERyYXdMaW5lcygKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxl
CQkgLAogICAgR0MJCQkgLAogICAgWFBvaW50KgkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkg
CgopOwoKZXh0ZXJuIGludCBYRHJhd1BvaW50KAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2Fi
bGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBp
bnQgWERyYXdQb2ludHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIEdD
CQkJICwKICAgIFhQb2ludCoJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVy
biBpbnQgWERyYXdSZWN0YW5nbGUoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwK
ICAgIEdDCQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWduZWQgaW50CSAs
CiAgICB1bnNpZ25lZCBpbnQJIAoKKTsKCmV4dGVybiBpbnQgWERyYXdSZWN0YW5nbGVzKAoKICAg
IERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBYUmVjdGFuZ2xl
KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhEcmF3U2VnbWVudHMoCgogICAgRGlz
cGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwKICAgIFhTZWdtZW50KgkJICwK
ICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhEcmF3U3RyaW5nKAoKICAgIERpc3BsYXkqCQkg
LAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwK
ICAgIGNvbnN0ICBjaGFyKgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWERyYXdTdHJp
bmcxNigKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgR0MJCQkgLAogICAg
aW50CQkJICwKICAgIGludAkJCSAsCiAgICBjb25zdCAgWENoYXIyYioJICwKICAgIGludAkJCSAK
Cik7CgpleHRlcm4gaW50IFhEcmF3VGV4dCgKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxl
CQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBYVGV4dEl0ZW0q
CQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWERyYXdUZXh0MTYoCgogICAgRGlzcGxh
eSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJ
CQkgLAogICAgWFRleHRJdGVtMTYqCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYRW5h
YmxlQWNjZXNzQ29udHJvbCgKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQgWEV2ZW50
c1F1ZXVlZCgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50ICBY
RmV0Y2hOYW1lKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgY2hhcioqCQkg
CgopOwoKZXh0ZXJuIGludCBYRmlsbEFyYygKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxl
CQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBp
bnQJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAKCik7Cgpl
eHRlcm4gaW50IFhGaWxsQXJjcygKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAog
ICAgR0MJCQkgLAogICAgWEFyYyoJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYRmls
bFBvbHlnb24oCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwK
ICAgIFhQb2ludCoJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAKCik7
CgpleHRlcm4gaW50IFhGaWxsUmVjdGFuZ2xlKAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2Fi
bGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVk
IGludAkgLAogICAgdW5zaWduZWQgaW50CSAKCik7CgpleHRlcm4gaW50IFhGaWxsUmVjdGFuZ2xl
cygKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgR0MJCQkgLAogICAgWFJl
Y3RhbmdsZSoJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYRmx1c2goCgogICAgRGlz
cGxheSoJCSAKCik7CgpleHRlcm4gaW50IFhGb3JjZVNjcmVlblNhdmVyKAoKICAgIERpc3BsYXkq
CQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWEZyZWUoCgogICAgdm9pZCoJCSAKCik7
CgpleHRlcm4gaW50IFhGcmVlQ29sb3JtYXAoCgogICAgRGlzcGxheSoJCSAsCiAgICBDb2xvcm1h
cAkJIAoKKTsKCmV4dGVybiBpbnQgWEZyZWVDb2xvcnMoCgogICAgRGlzcGxheSoJCSAsCiAgICBD
b2xvcm1hcAkJICwKICAgIHVuc2lnbmVkIGxvbmcqCSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWdu
ZWQgbG9uZwkgCgopOwoKZXh0ZXJuIGludCBYRnJlZUN1cnNvcigKCiAgICBEaXNwbGF5KgkJICwK
ICAgIEN1cnNvcgkJIAoKKTsKCmV4dGVybiBpbnQgWEZyZWVFeHRlbnNpb25MaXN0KAoKICAgIGNo
YXIqKgkJICAgICAKCik7CgpleHRlcm4gaW50IFhGcmVlRm9udCgKCiAgICBEaXNwbGF5KgkJICwK
ICAgIFhGb250U3RydWN0KgkgCgopOwoKZXh0ZXJuIGludCBYRnJlZUZvbnRJbmZvKAoKICAgIGNo
YXIqKgkJICwKICAgIFhGb250U3RydWN0KgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQg
WEZyZWVGb250TmFtZXMoCgogICAgY2hhcioqCQkgCgopOwoKZXh0ZXJuIGludCBYRnJlZUZvbnRQ
YXRoKAoKICAgIGNoYXIqKgkJIAoKKTsKCmV4dGVybiBpbnQgWEZyZWVHQygKCiAgICBEaXNwbGF5
KgkJICwKICAgIEdDCQkJIAoKKTsKCmV4dGVybiBpbnQgWEZyZWVNb2RpZmllcm1hcCgKCiAgICBY
TW9kaWZpZXJLZXltYXAqCSAKCik7CgpleHRlcm4gaW50IFhGcmVlUGl4bWFwKAoKICAgIERpc3Bs
YXkqCQkgLAogICAgUGl4bWFwCQkgCgopOwoKZXh0ZXJuIGludCBYR2VvbWV0cnkoCgogICAgRGlz
cGxheSoJCSAsCiAgICBpbnQJCQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBjb25zdCAgY2hh
cioJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25l
ZCBpbnQJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50KgkJICwKICAgIGludCoJ
CSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWEdldEVycm9yRGF0
YWJhc2VUZXh0KAoKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBjb25z
dCAgY2hhcioJICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgY2hhcioJCSAsCiAgICBpbnQJCQkg
CgopOwoKZXh0ZXJuIGludCBYR2V0RXJyb3JUZXh0KAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50
CQkJICwKICAgIGNoYXIqCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgIFhHZXRGb250
UHJvcGVydHkoCgogICAgWEZvbnRTdHJ1Y3QqCSAsCiAgICBBdG9tCQkgLAogICAgdW5zaWduZWQg
bG9uZyoJIAoKKTsKCmV4dGVybiBpbnQgIFhHZXRHQ1ZhbHVlcygKCiAgICBEaXNwbGF5KgkJICwK
ICAgIEdDCQkJICwKICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIFhHQ1ZhbHVlcyoJCSAKCik7Cgpl
eHRlcm4gaW50ICBYR2V0R2VvbWV0cnkoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJ
ICwKICAgIFdpbmRvdyoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJICwKICAgIHVuc2lnbmVk
IGludCoJICwKICAgIHVuc2lnbmVkIGludCoJICwKICAgIHVuc2lnbmVkIGludCoJICwKICAgIHVu
c2lnbmVkIGludCoJIAoKKTsKCmV4dGVybiBpbnQgIFhHZXRJY29uTmFtZSgKCiAgICBEaXNwbGF5
KgkJICwKICAgIFdpbmRvdwkJICwKICAgIGNoYXIqKgkJIAoKKTsKCmV4dGVybiBpbnQgWEdldElu
cHV0Rm9jdXMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cqCQkgLAogICAgaW50KgkJIAoK
KTsKCmV4dGVybiBpbnQgWEdldEtleWJvYXJkQ29udHJvbCgKCiAgICBEaXNwbGF5KgkJICwKICAg
IFhLZXlib2FyZFN0YXRlKgkgCgopOwoKZXh0ZXJuIGludCBYR2V0UG9pbnRlckNvbnRyb2woCgog
ICAgRGlzcGxheSoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAKCik7
CgpleHRlcm4gaW50IFhHZXRQb2ludGVyTWFwcGluZygKCiAgICBEaXNwbGF5KgkJICwKICAgIHVu
c2lnbmVkIGNoYXIqCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYR2V0U2NyZWVuU2F2
ZXIoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJICwKICAgIGludCoJ
CSAsCiAgICBpbnQqCQkgCgopOwoKZXh0ZXJuIGludCAgWEdldFRyYW5zaWVudEZvckhpbnQoCgog
ICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBXaW5kb3cqCQkgCgopOwoKZXh0ZXJu
IGludCBYR2V0V2luZG93UHJvcGVydHkoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAs
CiAgICBBdG9tCQkgLAogICAgbG9uZwkJICwKICAgIGxvbmcJCSAsCiAgICBpbnQgCQkgLAogICAg
QXRvbQkJICwKICAgIEF0b20qCQkgLAogICAgaW50KgkJICwKICAgIHVuc2lnbmVkIGxvbmcqCSAs
CiAgICB1bnNpZ25lZCBsb25nKgkgLAogICAgdW5zaWduZWQgY2hhcioqCSAKCik7CgpleHRlcm4g
aW50ICBYR2V0V2luZG93QXR0cmlidXRlcygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJ
ICwKICAgIFhXaW5kb3dBdHRyaWJ1dGVzKgkgCgopOwoKZXh0ZXJuIGludCBYR3JhYkJ1dHRvbigK
CiAgICBEaXNwbGF5KgkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAs
CiAgICBXaW5kb3cJCSAsCiAgICBpbnQgCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBpbnQJ
CQkgLAogICAgaW50CQkJICwKICAgIFdpbmRvdwkJICwKICAgIEN1cnNvcgkJIAoKKTsKCmV4dGVy
biBpbnQgWEdyYWJLZXkoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWdu
ZWQgaW50CSAsCiAgICBXaW5kb3cJCSAsCiAgICBpbnQgCQkgLAogICAgaW50CQkJICwKICAgIGlu
dAkJCSAKCik7CgpleHRlcm4gaW50IFhHcmFiS2V5Ym9hcmQoCgogICAgRGlzcGxheSoJCSAsCiAg
ICBXaW5kb3cJCSAsCiAgICBpbnQgCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBU
aW1lCQkgCgopOwoKZXh0ZXJuIGludCBYR3JhYlBvaW50ZXIoCgogICAgRGlzcGxheSoJCSAsCiAg
ICBXaW5kb3cJCSAsCiAgICBpbnQgCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBpbnQJCQkg
LAogICAgaW50CQkJICwKICAgIFdpbmRvdwkJICwKICAgIEN1cnNvcgkJICwKICAgIFRpbWUJCSAK
Cik7CgpleHRlcm4gaW50IFhHcmFiU2VydmVyKAoKICAgIERpc3BsYXkqCQkgCgopOwoKZXh0ZXJu
IGludCBYSGVpZ2h0TU1PZlNjcmVlbigKCiAgICBTY3JlZW4qCQkgCgopOwoKZXh0ZXJuIGludCBY
SGVpZ2h0T2ZTY3JlZW4oCgogICAgU2NyZWVuKgkJIAoKKTsKCmV4dGVybiBpbnQgWElmRXZlbnQo
CgogICAgRGlzcGxheSoJCSAsCiAgICBYRXZlbnQqCQkgLAogICAgaW50ICAoKikgKAoKCSAgICAg
ICBEaXNwbGF5KgkJCSAsCiAgICAgICAgICAgICAgIFhFdmVudCoJCQkgLAogICAgICAgICAgICAg
ICBYUG9pbnRlcgkJCSAKCiAgICAgICAgICAgICApCQkgLAogICAgWFBvaW50ZXIJCSAKCik7Cgpl
eHRlcm4gaW50IFhJbWFnZUJ5dGVPcmRlcigKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBp
bnQgWEluc3RhbGxDb2xvcm1hcCgKCiAgICBEaXNwbGF5KgkJICwKICAgIENvbG9ybWFwCQkgCgop
OwoKZXh0ZXJuIEtleUNvZGUgWEtleXN5bVRvS2V5Y29kZSgKCiAgICBEaXNwbGF5KgkJICwKICAg
IEtleVN5bQkJIAoKKTsKCmV4dGVybiBpbnQgWEtpbGxDbGllbnQoCgogICAgRGlzcGxheSoJCSAs
CiAgICBYSUQJCQkgCgopOwoKZXh0ZXJuIGludCAgWExvb2t1cENvbG9yKAoKICAgIERpc3BsYXkq
CQkgLAogICAgQ29sb3JtYXAJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIFhDb2xvcioJCSAs
CiAgICBYQ29sb3IqCQkgCgopOwoKZXh0ZXJuIGludCBYTG93ZXJXaW5kb3coCgogICAgRGlzcGxh
eSoJCSAsCiAgICBXaW5kb3cJCSAKCik7CgpleHRlcm4gaW50IFhNYXBSYWlzZWQoCgogICAgRGlz
cGxheSoJCSAsCiAgICBXaW5kb3cJCSAKCik7CgpleHRlcm4gaW50IFhNYXBTdWJ3aW5kb3dzKAoK
ICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgCgopOwoKZXh0ZXJuIGludCBYTWFwV2luZG93
KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgCgopOwoKZXh0ZXJuIGludCBYTWFza0V2
ZW50KAoKICAgIERpc3BsYXkqCQkgLAogICAgbG9uZwkJICwKICAgIFhFdmVudCoJCSAKCik7Cgpl
eHRlcm4gaW50IFhNYXhDbWFwc09mU2NyZWVuKAoKICAgIFNjcmVlbioJCSAKCik7CgpleHRlcm4g
aW50IFhNaW5DbWFwc09mU2NyZWVuKAoKICAgIFNjcmVlbioJCSAKCik7CgpleHRlcm4gaW50IFhN
b3ZlUmVzaXplV2luZG93KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50
CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludAkg
CgopOwoKZXh0ZXJuIGludCBYTW92ZVdpbmRvdygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRv
dwkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYTmV4dEV2ZW50
KAoKICAgIERpc3BsYXkqCQkgLAogICAgWEV2ZW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWE5vT3Ao
CgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50ICBYUGFyc2VDb2xvcigKCiAgICBEaXNw
bGF5KgkJICwKICAgIENvbG9ybWFwCQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBYQ29sb3Iq
CQkgCgopOwoKZXh0ZXJuIGludCBYUGFyc2VHZW9tZXRyeSgKCiAgICBjb25zdCAgY2hhcioJICwK
ICAgIGludCoJCSAsCiAgICBpbnQqCQkgLAogICAgdW5zaWduZWQgaW50KgkgLAogICAgdW5zaWdu
ZWQgaW50KgkgCgopOwoKZXh0ZXJuIGludCBYUGVla0V2ZW50KAoKICAgIERpc3BsYXkqCQkgLAog
ICAgWEV2ZW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWFBlZWtJZkV2ZW50KAoKICAgIERpc3BsYXkq
CQkgLAogICAgWEV2ZW50KgkJICwKICAgIGludCAgKCopICgKCgkgICAgICAgRGlzcGxheSoJCSAs
CiAgICAgICAgICAgICAgIFhFdmVudCoJCSAsCiAgICAgICAgICAgICAgIFhQb2ludGVyCQkgCgog
ICAgICAgICAgICAgKQkJICwKICAgIFhQb2ludGVyCQkgCgopOwoKZXh0ZXJuIGludCBYUGVuZGlu
ZygKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQgWFBsYW5lc09mU2NyZWVuKAoKICAg
IFNjcmVlbioJCSAKICAgIAoKKTsKCmV4dGVybiBpbnQgWFByb3RvY29sUmV2aXNpb24oCgogICAg
RGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50IFhQcm90b2NvbFZlcnNpb24oCgogICAgRGlzcGxh
eSoJCSAKCik7CgoKZXh0ZXJuIGludCBYUHV0QmFja0V2ZW50KAoKICAgIERpc3BsYXkqCQkgLAog
ICAgWEV2ZW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWFB1dEltYWdlKAoKICAgIERpc3BsYXkqCQkg
LAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBYSW1hZ2UqCQkgLAogICAgaW50CQkJ
ICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGlu
dAkgLAogICAgdW5zaWduZWQgaW50CSAJICAKCik7CgpleHRlcm4gaW50IFhRTGVuZ3RoKAoKICAg
IERpc3BsYXkqCQkgCgopOwoKZXh0ZXJuIGludCAgWFF1ZXJ5QmVzdEN1cnNvcigKCiAgICBEaXNw
bGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgdW5zaWduZWQgaW50ICAgICAgICAgLAogICAg
dW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQqCSAsCiAgICB1bnNpZ25lZCBpbnQqCSAK
Cik7CgpleHRlcm4gaW50ICBYUXVlcnlCZXN0U2l6ZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIGlu
dAkJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQg
aW50CSAsCiAgICB1bnNpZ25lZCBpbnQqCSAsCiAgICB1bnNpZ25lZCBpbnQqCSAKCik7CgpleHRl
cm4gaW50ICBYUXVlcnlCZXN0U3RpcHBsZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxl
CQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVk
IGludCoJICwKICAgIHVuc2lnbmVkIGludCoJIAoKKTsKCmV4dGVybiBpbnQgIFhRdWVyeUJlc3RU
aWxlKAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICB1bnNpZ25lZCBpbnQJ
ICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50KgkgLAogICAgdW5zaWduZWQg
aW50KgkgCgopOwoKZXh0ZXJuIGludCBYUXVlcnlDb2xvcigKCiAgICBEaXNwbGF5KgkJICwKICAg
IENvbG9ybWFwCQkgLAogICAgWENvbG9yKgkJIAoKKTsKCmV4dGVybiBpbnQgWFF1ZXJ5Q29sb3Jz
KAoKICAgIERpc3BsYXkqCQkgLAogICAgQ29sb3JtYXAJCSAsCiAgICBYQ29sb3IqCQkgLAogICAg
aW50CQkJIAoKKTsKCmV4dGVybiBpbnQgIFhRdWVyeUV4dGVuc2lvbigKCiAgICBEaXNwbGF5KgkJ
ICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAsCiAgICBpbnQq
CQkgCgopOwoKZXh0ZXJuIGludCBYUXVlcnlLZXltYXAoCgogICAgRGlzcGxheSoJCSAsCiAgICBj
aGFyIFszMl0JCSAKCik7CgpleHRlcm4gaW50ICBYUXVlcnlQb2ludGVyKAoKICAgIERpc3BsYXkq
CQkgLAogICAgV2luZG93CQkgLAogICAgV2luZG93KgkJICwKICAgIFdpbmRvdyoJCSAsCiAgICBp
bnQqCQkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAsCiAgICBpbnQqCQkgLAogICAgdW5zaWdu
ZWQgaW50KiAgICAgICAgCgopOwoKZXh0ZXJuIGludCBYUXVlcnlUZXh0RXh0ZW50cygKCiAgICBE
aXNwbGF5KgkJICwKICAgIFhJRAkJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGludAkJCSAs
CiAgICBpbnQqCQkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAsCiAgICBYQ2hhclN0cnVjdCoJ
ICAgICAKCik7CgpleHRlcm4gaW50IFhRdWVyeVRleHRFeHRlbnRzMTYoCgogICAgRGlzcGxheSoJ
CSAsCiAgICBYSUQJCQkgLAogICAgY29uc3QgIFhDaGFyMmIqCSAsCiAgICBpbnQJCQkgLAogICAg
aW50KgkJICwKICAgIGludCoJCSAsCiAgICBpbnQqCQkgLAogICAgWENoYXJTdHJ1Y3QqCSAKCik7
CgpleHRlcm4gaW50ICBYUXVlcnlUcmVlKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkg
LAogICAgV2luZG93KgkJICwKICAgIFdpbmRvdyoJCSAsCiAgICBXaW5kb3cqKgkJICwKICAgIHVu
c2lnbmVkIGludCoJIAoKKTsKCmV4dGVybiBpbnQgWFJhaXNlV2luZG93KAoKICAgIERpc3BsYXkq
CQkgLAogICAgV2luZG93CQkgCgopOwoKZXh0ZXJuIGludCBYUmVhZEJpdG1hcEZpbGUoCgogICAg
RGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZSAJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIHVu
c2lnbmVkIGludCoJICwKICAgIHVuc2lnbmVkIGludCoJICwKICAgIFBpeG1hcCoJCSAsCiAgICBp
bnQqCQkgLAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWFJlYWRCaXRtYXBGaWxlRGF0YSgK
CiAgICBjb25zdCAgY2hhcioJICwKICAgIHVuc2lnbmVkIGludCoJICwKICAgIHVuc2lnbmVkIGlu
dCoJICwKICAgIHVuc2lnbmVkIGNoYXIqKgkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAKCik7
CgpleHRlcm4gaW50IFhSZWJpbmRLZXlzeW0oCgogICAgRGlzcGxheSoJCSAsCiAgICBLZXlTeW0J
CSAsCiAgICBLZXlTeW0qCQkgLAogICAgaW50CQkJICwKICAgIGNvbnN0ICB1bnNpZ25lZCBjaGFy
KgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWFJlY29sb3JDdXJzb3IoCgogICAgRGlz
cGxheSoJCSAsCiAgICBDdXJzb3IJCSAsCiAgICBYQ29sb3IqCQkgLAogICAgWENvbG9yKgkJIAoK
KTsKCmV4dGVybiBpbnQgWFJlZnJlc2hLZXlib2FyZE1hcHBpbmcoCgogICAgWE1hcHBpbmdFdmVu
dCoJICAgICAKCik7CgpleHRlcm4gaW50IFhSZW1vdmVGcm9tU2F2ZVNldCgKCiAgICBEaXNwbGF5
KgkJICwKICAgIFdpbmRvdwkJIAoKKTsKCmV4dGVybiBpbnQgWFJlbW92ZUhvc3QoCgogICAgRGlz
cGxheSoJCSAsCiAgICBYSG9zdEFkZHJlc3MqCSAKCik7CgpleHRlcm4gaW50IFhSZW1vdmVIb3N0
cygKCiAgICBEaXNwbGF5KgkJICwKICAgIFhIb3N0QWRkcmVzcyoJICwKICAgIGludAkJCSAKCik7
CgpleHRlcm4gaW50IFhSZXBhcmVudFdpbmRvdygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRv
dwkJICwKICAgIFdpbmRvdwkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJu
IGludCBYUmVzZXRTY3JlZW5TYXZlcigKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQg
WFJlc2l6ZVdpbmRvdygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIHVuc2ln
bmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAKCik7CgpleHRlcm4gaW50IFhSZXN0YWNrV2lu
ZG93cygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdyoJCSAsCiAgICBpbnQJCQkgCgopOwoK
ZXh0ZXJuIGludCBYUm90YXRlQnVmZmVycygKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAK
Cik7CgpleHRlcm4gaW50IFhSb3RhdGVXaW5kb3dQcm9wZXJ0aWVzKAoKICAgIERpc3BsYXkqCQkg
LAogICAgV2luZG93CQkgLAogICAgQXRvbSoJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoK
KTsKCmV4dGVybiBpbnQgWFNjcmVlbkNvdW50KAoKICAgIERpc3BsYXkqCQkgCgopOwoKZXh0ZXJu
IGludCBYU2VsZWN0SW5wdXQoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBs
b25nCQkgCgopOwoKZXh0ZXJuIGludCAgWFNlbmRFdmVudCgKCiAgICBEaXNwbGF5KgkJICwKICAg
IFdpbmRvdwkJICwKICAgIGludCAJCSAsCiAgICBsb25nCQkgLAogICAgWEV2ZW50KgkJIAoKKTsK
CmV4dGVybiBpbnQgWFNldEFjY2Vzc0NvbnRyb2woCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJ
CQkgCgopOwoKZXh0ZXJuIGludCBYU2V0QXJjTW9kZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIEdD
CQkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTZXRCYWNrZ3JvdW5kKAoKICAgIERp
c3BsYXkqCQkgLAogICAgR0MJCQkgLAogICAgdW5zaWduZWQgbG9uZwkgCgopOwoKZXh0ZXJuIGlu
dCBYU2V0Q2xpcE1hc2soCgogICAgRGlzcGxheSoJCSAsCiAgICBHQwkJCSAsCiAgICBQaXhtYXAJ
CSAKCik7CgpleHRlcm4gaW50IFhTZXRDbGlwT3JpZ2luKAoKICAgIERpc3BsYXkqCQkgLAogICAg
R0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTZXRDbGlw
UmVjdGFuZ2xlcygKCiAgICBEaXNwbGF5KgkJICwKICAgIEdDCQkJICwKICAgIGludAkJCSAsCiAg
ICBpbnQJCQkgLAogICAgWFJlY3RhbmdsZSoJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoK
KTsKCmV4dGVybiBpbnQgWFNldENsb3NlRG93bk1vZGUoCgogICAgRGlzcGxheSoJCSAsCiAgICBp
bnQJCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0Q29tbWFuZCgKCiAgICBEaXNwbGF5KgkJICwKICAg
IFdpbmRvdwkJICwKICAgIGNoYXIqKgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhT
ZXREYXNoZXMoCgogICAgRGlzcGxheSoJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAg
Y29uc3QgIGNoYXIqCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0RmlsbFJ1bGUo
CgogICAgRGlzcGxheSoJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGlu
dCBYU2V0RmlsbFN0eWxlKAoKICAgIERpc3BsYXkqCQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJ
IAoKKTsKCmV4dGVybiBpbnQgWFNldEZvbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBHQwkJCSAs
CiAgICBGb250CQkgCgopOwoKZXh0ZXJuIGludCBYU2V0Rm9udFBhdGgoCgogICAgRGlzcGxheSoJ
CSAsCiAgICBjaGFyKioJCSAsCiAgICBpbnQJCQkgCSAgICAgCgopOwoKZXh0ZXJuIGludCBYU2V0
Rm9yZWdyb3VuZCgKCiAgICBEaXNwbGF5KgkJICwKICAgIEdDCQkJICwKICAgIHVuc2lnbmVkIGxv
bmcJIAoKKTsKCmV4dGVybiBpbnQgWFNldEZ1bmN0aW9uKAoKICAgIERpc3BsYXkqCQkgLAogICAg
R0MJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWFNldEdyYXBoaWNzRXhwb3N1cmVz
KAoKICAgIERpc3BsYXkqCQkgLAogICAgR0MJCQkgLAogICAgaW50IAkJIAoKKTsKCmV4dGVybiBp
bnQgWFNldEljb25OYW1lKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgY29u
c3QgIGNoYXIqCSAKCik7CgpleHRlcm4gaW50IFhTZXRJbnB1dEZvY3VzKAoKICAgIERpc3BsYXkq
CQkgLAogICAgV2luZG93CQkgLAogICAgaW50CQkJICwKICAgIFRpbWUJCSAKCik7CgpleHRlcm4g
aW50IFhTZXRMaW5lQXR0cmlidXRlcygKCiAgICBEaXNwbGF5KgkJICwKICAgIEdDCQkJICwKICAg
IHVuc2lnbmVkIGludAkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgCgop
OwoKZXh0ZXJuIGludCBYU2V0TW9kaWZpZXJNYXBwaW5nKAoKICAgIERpc3BsYXkqCQkgLAogICAg
WE1vZGlmaWVyS2V5bWFwKgkgCgopOwoKZXh0ZXJuIGludCBYU2V0UGxhbmVNYXNrKAoKICAgIERp
c3BsYXkqCQkgLAogICAgR0MJCQkgLAogICAgdW5zaWduZWQgbG9uZwkgCgopOwoKZXh0ZXJuIGlu
dCBYU2V0UG9pbnRlck1hcHBpbmcoCgogICAgRGlzcGxheSoJCSAsCiAgICBjb25zdCAgdW5zaWdu
ZWQgY2hhcioJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTZXRTY3JlZW5TYXZlcigK
CiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwK
ICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTZXRTZWxlY3Rpb25Pd25lcigKCiAgICBEaXNw
bGF5KgkJICwKICAgIEF0b20JICAgICAgICAgLAogICAgV2luZG93CQkgLAogICAgVGltZQkJIAoK
KTsKCmV4dGVybiBpbnQgWFNldFN0YXRlKAoKICAgIERpc3BsYXkqCQkgLAogICAgR0MJCQkgLAog
ICAgdW5zaWduZWQgbG9uZyAJICwKICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIGludAkJCSAsCiAg
ICB1bnNpZ25lZCBsb25nCSAKCik7CgpleHRlcm4gaW50IFhTZXRTdGlwcGxlKAoKICAgIERpc3Bs
YXkqCQkgLAogICAgR0MJCQkgLAogICAgUGl4bWFwCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0U3Vi
d2luZG93TW9kZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIEdDCQkJICwKICAgIGludAkJCSAKCik7
CgpleHRlcm4gaW50IFhTZXRUU09yaWdpbigKCiAgICBEaXNwbGF5KgkJICwKICAgIEdDCQkJICwK
ICAgIGludAkJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0VGlsZSgKCiAgICBE
aXNwbGF5KgkJICwKICAgIEdDCQkJICwKICAgIFBpeG1hcAkJIAoKKTsKCmV4dGVybiBpbnQgWFNl
dFdpbmRvd0JhY2tncm91bmQoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICB1
bnNpZ25lZCBsb25nCSAKCik7CgpleHRlcm4gaW50IFhTZXRXaW5kb3dCYWNrZ3JvdW5kUGl4bWFw
KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgUGl4bWFwCQkgCgopOwoKZXh0
ZXJuIGludCBYU2V0V2luZG93Qm9yZGVyKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkg
LAogICAgdW5zaWduZWQgbG9uZwkgCgopOwoKZXh0ZXJuIGludCBYU2V0V2luZG93Qm9yZGVyUGl4
bWFwKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgUGl4bWFwCQkgCgopOwoK
ZXh0ZXJuIGludCBYU2V0V2luZG93Qm9yZGVyV2lkdGgoCgogICAgRGlzcGxheSoJCSAsCiAgICBX
aW5kb3cJCSAsCiAgICB1bnNpZ25lZCBpbnQJIAoKKTsKCmV4dGVybiBpbnQgWFNldFdpbmRvd0Nv
bG9ybWFwKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgQ29sb3JtYXAJCSAK
Cik7CgpleHRlcm4gaW50IFhTdG9yZUJ1ZmZlcigKCiAgICBEaXNwbGF5KgkJICwKICAgIGNvbnN0
ICBjaGFyKgkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTdG9y
ZUJ5dGVzKAoKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBpbnQJCQkg
CgopOwoKZXh0ZXJuIGludCBYU3RvcmVDb2xvcigKCiAgICBEaXNwbGF5KgkJICwKICAgIENvbG9y
bWFwCQkgLAogICAgWENvbG9yKgkJIAoKKTsKCmV4dGVybiBpbnQgWFN0b3JlQ29sb3JzKAoKICAg
IERpc3BsYXkqCQkgLAogICAgQ29sb3JtYXAJCSAsCiAgICBYQ29sb3IqCQkgLAogICAgaW50CQkJ
IAoKKTsKCmV4dGVybiBpbnQgWFN0b3JlTmFtZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRv
dwkJICwKICAgIGNvbnN0ICBjaGFyKgkgCgopOwoKZXh0ZXJuIGludCBYU3RvcmVOYW1lZENvbG9y
KAoKICAgIERpc3BsYXkqCQkgLAogICAgQ29sb3JtYXAJCSAsCiAgICBjb25zdCAgY2hhcioJICwK
ICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTeW5jKAoK
ICAgIERpc3BsYXkqCQkgLAogICAgaW50IAkJIAoKKTsKCmV4dGVybiBpbnQgWFRleHRFeHRlbnRz
KAoKICAgIFhGb250U3RydWN0KgkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBpbnQJCQkgLAog
ICAgaW50KgkJICwKICAgIGludCoJCSAsCiAgICBpbnQqCQkgLAogICAgWENoYXJTdHJ1Y3QqCSAK
Cik7CgpleHRlcm4gaW50IFhUZXh0RXh0ZW50czE2KAoKICAgIFhGb250U3RydWN0KgkgLAogICAg
Y29uc3QgIFhDaGFyMmIqCSAsCiAgICBpbnQJCQkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAs
CiAgICBpbnQqCQkgLAogICAgWENoYXJTdHJ1Y3QqCSAKCik7CgpleHRlcm4gaW50IFhUZXh0V2lk
dGgoCgogICAgWEZvbnRTdHJ1Y3QqCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGludAkJCSAK
Cik7CgpleHRlcm4gaW50IFhUZXh0V2lkdGgxNigKCiAgICBYRm9udFN0cnVjdCoJICwKICAgIGNv
bnN0ICBYQ2hhcjJiKgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgIFhUcmFuc2xhdGVD
b29yZGluYXRlcygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFdpbmRvdwkJ
ICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAsCiAg
ICBXaW5kb3cqCQkgCgopOwoKZXh0ZXJuIGludCBYVW5kZWZpbmVDdXJzb3IoCgogICAgRGlzcGxh
eSoJCSAsCiAgICBXaW5kb3cJCSAKCik7CgpleHRlcm4gaW50IFhVbmdyYWJCdXR0b24oCgogICAg
RGlzcGxheSoJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAg
V2luZG93CQkgCgopOwoKZXh0ZXJuIGludCBYVW5ncmFiS2V5KAoKICAgIERpc3BsYXkqCQkgLAog
ICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgV2luZG93CQkgCgopOwoKZXh0ZXJu
IGludCBYVW5ncmFiS2V5Ym9hcmQoCgogICAgRGlzcGxheSoJCSAsCiAgICBUaW1lCQkgCgopOwoK
ZXh0ZXJuIGludCBYVW5ncmFiUG9pbnRlcigKCiAgICBEaXNwbGF5KgkJICwKICAgIFRpbWUJCSAK
Cik7CgpleHRlcm4gaW50IFhVbmdyYWJTZXJ2ZXIoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRl
cm4gaW50IFhVbmluc3RhbGxDb2xvcm1hcCgKCiAgICBEaXNwbGF5KgkJICwKICAgIENvbG9ybWFw
CQkgCgopOwoKZXh0ZXJuIGludCBYVW5sb2FkRm9udCgKCiAgICBEaXNwbGF5KgkJICwKICAgIEZv
bnQJCSAKCik7CgpleHRlcm4gaW50IFhVbm1hcFN1YndpbmRvd3MoCgogICAgRGlzcGxheSoJCSAs
CiAgICBXaW5kb3cJCSAKCik7CgpleHRlcm4gaW50IFhVbm1hcFdpbmRvdygKCiAgICBEaXNwbGF5
KgkJICwKICAgIFdpbmRvdwkJIAoKKTsKCmV4dGVybiBpbnQgWFZlbmRvclJlbGVhc2UoCgogICAg
RGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50IFhXYXJwUG9pbnRlcigKCiAgICBEaXNwbGF5KgkJ
ICwKICAgIFdpbmRvdwkJICwKICAgIFdpbmRvdwkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkg
LAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIGludAkJCSAsCiAg
ICBpbnQJCQkgCSAgICAgCgopOwoKZXh0ZXJuIGludCBYV2lkdGhNTU9mU2NyZWVuKAoKICAgIFNj
cmVlbioJCSAKCik7CgpleHRlcm4gaW50IFhXaWR0aE9mU2NyZWVuKAoKICAgIFNjcmVlbioJCSAK
Cik7CgpleHRlcm4gaW50IFhXaW5kb3dFdmVudCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRv
dwkJICwKICAgIGxvbmcJCSAsCiAgICBYRXZlbnQqCQkgCgopOwoKZXh0ZXJuIGludCBYV3JpdGVC
aXRtYXBGaWxlKAoKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBQaXht
YXAJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgaW50CQkJ
ICwKICAgIGludAkJCSAJCSAgICAgCgopOwoKZXh0ZXJuIGludCAgWFN1cHBvcnRzTG9jYWxlKAoK
ICAgIHZvaWQKCik7CgpleHRlcm4gY2hhciAqWFNldExvY2FsZU1vZGlmaWVycygKCiAgICBjb25z
dCAgY2hhcioJIAoKKTsKCmV4dGVybiBYT00gWE9wZW5PTSgKCiAgICBEaXNwbGF5KgkJCSAsCiAg
ICBzdHJ1Y3QgX1hybUhhc2hCdWNrZXRSZWMqCSAsCiAgICBjb25zdCAgY2hhcioJCSAsCiAgICBj
b25zdCAgY2hhcioJCSAKCik7CgpleHRlcm4gaW50ICBYQ2xvc2VPTSgKCiAgICBYT00JCQkgCgop
OwoKZXh0ZXJuIGNoYXIgKlhTZXRPTVZhbHVlcygKCiAgICBYT00JCQkgLAogICAgLi4uCgopOwoK
ZXh0ZXJuIGNoYXIgKlhHZXRPTVZhbHVlcygKCiAgICBYT00JCQkgLAogICAgLi4uCgopOwoKZXh0
ZXJuIERpc3BsYXkgKlhEaXNwbGF5T2ZPTSgKCiAgICBYT00JCQkgCgopOwoKZXh0ZXJuIGNoYXIg
KlhMb2NhbGVPZk9NKAoKICAgIFhPTQkJCSAKCik7CgpleHRlcm4gWE9DIFhDcmVhdGVPQygKCiAg
ICBYT00JCQkgLAogICAgLi4uCgopOwoKZXh0ZXJuIHZvaWQgWERlc3Ryb3lPQygKCiAgICBYT0MJ
CQkgCgopOwoKZXh0ZXJuIFhPTSBYT01PZk9DKAoKICAgIFhPQwkJCSAKCik7CgpleHRlcm4gY2hh
ciAqWFNldE9DVmFsdWVzKAoKICAgIFhPQwkJCSAsCiAgICAuLi4KCik7CgpleHRlcm4gY2hhciAq
WEdldE9DVmFsdWVzKAoKICAgIFhPQwkJCSAsCiAgICAuLi4KCik7CgpleHRlcm4gWEZvbnRTZXQg
WENyZWF0ZUZvbnRTZXQoCgogICAgRGlzcGxheSoJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAg
IGNoYXIqKioJCSAsCiAgICBpbnQqCQkgLAogICAgY2hhcioqCQkgCgopOwoKZXh0ZXJuIHZvaWQg
WEZyZWVGb250U2V0KAoKICAgIERpc3BsYXkqCQkgLAogICAgWEZvbnRTZXQJCSAKCik7CgpleHRl
cm4gaW50IFhGb250c09mRm9udFNldCgKCiAgICBYRm9udFNldAkJICwKICAgIFhGb250U3RydWN0
KioqCSAsCiAgICBjaGFyKioqCQkgCgopOwoKZXh0ZXJuIGNoYXIgKlhCYXNlRm9udE5hbWVMaXN0
T2ZGb250U2V0KAoKICAgIFhGb250U2V0CQkgCgopOwoKZXh0ZXJuIGNoYXIgKlhMb2NhbGVPZkZv
bnRTZXQoCgogICAgWEZvbnRTZXQJCSAKCik7CgpleHRlcm4gaW50ICBYQ29udGV4dERlcGVuZGVu
dERyYXdpbmcoCgogICAgWEZvbnRTZXQJCSAKCik7CgpleHRlcm4gaW50ICBYRGlyZWN0aW9uYWxE
ZXBlbmRlbnREcmF3aW5nKAoKICAgIFhGb250U2V0CQkgCgopOwoKZXh0ZXJuIGludCAgWENvbnRl
eHR1YWxEcmF3aW5nKAoKICAgIFhGb250U2V0CQkgCgopOwoKZXh0ZXJuIFhGb250U2V0RXh0ZW50
cyAqWEV4dGVudHNPZkZvbnRTZXQoCgogICAgWEZvbnRTZXQJCSAKCik7CgpleHRlcm4gaW50IFht
YlRleHRFc2NhcGVtZW50KAoKICAgIFhGb250U2V0CQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAg
ICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYd2NUZXh0RXNjYXBlbWVudCgKCiAgICBYRm9udFNl
dAkJICwKICAgIGNvbnN0ICB3Y2hhcl90KgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQg
WG1iVGV4dEV4dGVudHMoCgogICAgWEZvbnRTZXQJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAg
IGludAkJCSAsCiAgICBYUmVjdGFuZ2xlKgkJICwKICAgIFhSZWN0YW5nbGUqCQkgCgopOwoKZXh0
ZXJuIGludCBYd2NUZXh0RXh0ZW50cygKCiAgICBYRm9udFNldAkJICwKICAgIGNvbnN0ICB3Y2hh
cl90KgkgLAogICAgaW50CQkJICwKICAgIFhSZWN0YW5nbGUqCQkgLAogICAgWFJlY3RhbmdsZSoJ
CSAKCik7CgpleHRlcm4gaW50ICBYbWJUZXh0UGVyQ2hhckV4dGVudHMoCgogICAgWEZvbnRTZXQJ
CSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGludAkJCSAsCiAgICBYUmVjdGFuZ2xlKgkJICwK
ICAgIFhSZWN0YW5nbGUqCQkgLAogICAgaW50CQkJICwKICAgIGludCoJCSAsCiAgICBYUmVjdGFu
Z2xlKgkJICwKICAgIFhSZWN0YW5nbGUqCQkgCgopOwoKZXh0ZXJuIGludCAgWHdjVGV4dFBlckNo
YXJFeHRlbnRzKAoKICAgIFhGb250U2V0CQkgLAogICAgY29uc3QgIHdjaGFyX3QqCSAsCiAgICBp
bnQJCQkgLAogICAgWFJlY3RhbmdsZSoJCSAsCiAgICBYUmVjdGFuZ2xlKgkJICwKICAgIGludAkJ
CSAsCiAgICBpbnQqCQkgLAogICAgWFJlY3RhbmdsZSoJCSAsCiAgICBYUmVjdGFuZ2xlKgkJIAoK
KTsKCmV4dGVybiB2b2lkIFhtYkRyYXdUZXh0KAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2Fi
bGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIFhtYlRleHRJ
dGVtKgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiB2b2lkIFh3Y0RyYXdUZXh0KAoKICAgIERp
c3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAg
aW50CQkJICwKICAgIFh3Y1RleHRJdGVtKgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiB2b2lk
IFhtYkRyYXdTdHJpbmcoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIFhG
b250U2V0CQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBjb25z
dCAgY2hhcioJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gdm9pZCBYd2NEcmF3U3RyaW5nKAoK
ICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBYRm9udFNldAkJICwKICAgIEdD
CQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgY29uc3QgIHdjaGFyX3QqCSAsCiAg
ICBpbnQJCQkgCgopOwoKZXh0ZXJuIHZvaWQgWG1iRHJhd0ltYWdlU3RyaW5nKAoKICAgIERpc3Bs
YXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBYRm9udFNldAkJICwKICAgIEdDCQkJICwKICAg
IGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBpbnQJCQkgCgop
OwoKZXh0ZXJuIHZvaWQgWHdjRHJhd0ltYWdlU3RyaW5nKAoKICAgIERpc3BsYXkqCQkgLAogICAg
RHJhd2FibGUJCSAsCiAgICBYRm9udFNldAkJICwKICAgIEdDCQkJICwKICAgIGludAkJCSAsCiAg
ICBpbnQJCQkgLAogICAgY29uc3QgIHdjaGFyX3QqCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJu
IFhJTSBYT3BlbklNKAoKICAgIERpc3BsYXkqCQkJICwKICAgIHN0cnVjdCBfWHJtSGFzaEJ1Y2tl
dFJlYyoJICwKICAgIGNoYXIqCQkJICwKICAgIGNoYXIqCQkJIAoKKTsKCmV4dGVybiBpbnQgIFhD
bG9zZUlNKAoKICAgIFhJTSAgCgopOwoKZXh0ZXJuIGNoYXIgKlhHZXRJTVZhbHVlcygKCiAgICBY
SU0gICwgLi4uCgopOwoKZXh0ZXJuIGNoYXIgKlhTZXRJTVZhbHVlcygKCiAgICBYSU0gICwgLi4u
CgopOwoKZXh0ZXJuIERpc3BsYXkgKlhEaXNwbGF5T2ZJTSgKCiAgICBYSU0gIAoKKTsKCmV4dGVy
biBjaGFyICpYTG9jYWxlT2ZJTSgKCiAgICBYSU0gIAoKKTsKCmV4dGVybiBYSUMgWENyZWF0ZUlD
KAoKICAgIFhJTSAgLCAuLi4KCik7CgpleHRlcm4gdm9pZCBYRGVzdHJveUlDKAoKICAgIFhJQyAg
CgopOwoKZXh0ZXJuIHZvaWQgWFNldElDRm9jdXMoCgogICAgWElDICAKCik7CgpleHRlcm4gdm9p
ZCBYVW5zZXRJQ0ZvY3VzKAoKICAgIFhJQyAgCgopOwoKZXh0ZXJuIHdjaGFyX3QgKlh3Y1Jlc2V0
SUMoCgogICAgWElDICAKCik7CgpleHRlcm4gY2hhciAqWG1iUmVzZXRJQygKCiAgICBYSUMgIAoK
KTsKCmV4dGVybiBjaGFyICpYU2V0SUNWYWx1ZXMoCgogICAgWElDICAsIC4uLgoKKTsKCmV4dGVy
biBjaGFyICpYR2V0SUNWYWx1ZXMoCgogICAgWElDICAsIC4uLgoKKTsKCmV4dGVybiBYSU0gWElN
T2ZJQygKCiAgICBYSUMgIAoKKTsKCmV4dGVybiBpbnQgIFhGaWx0ZXJFdmVudCgKCiAgICBYRXZl
bnQqCSAsCiAgICBXaW5kb3cJIAoKKTsKCmV4dGVybiBpbnQgWG1iTG9va3VwU3RyaW5nKAoKICAg
IFhJQwkJCSAsCiAgICBYS2V5UHJlc3NlZEV2ZW50KgkgLAogICAgY2hhcioJCSAsCiAgICBpbnQJ
CQkgLAogICAgS2V5U3ltKgkJICwKICAgIGludCAqCQkgCgopOwoKZXh0ZXJuIGludCBYd2NMb29r
dXBTdHJpbmcoCgogICAgWElDCQkJICwKICAgIFhLZXlQcmVzc2VkRXZlbnQqCSAsCiAgICB3Y2hh
cl90KgkJICwKICAgIGludAkJCSAsCiAgICBLZXlTeW0qCQkgLAogICAgaW50ICoJCSAKCik7Cgpl
eHRlcm4gWFZhTmVzdGVkTGlzdCBYVmFDcmVhdGVOZXN0ZWRMaXN0KAoKICAgIGludCAgLCAuLi4K
Cik7CgogCgpleHRlcm4gaW50ICBYUmVnaXN0ZXJJTUluc3RhbnRpYXRlQ2FsbGJhY2soCgogICAg
RGlzcGxheSoJCQkgLAogICAgc3RydWN0IF9Ycm1IYXNoQnVja2V0UmVjKgkgLAogICAgY2hhcioJ
CQkgLAogICAgY2hhcioJCQkgLAogICAgWElEUHJvYwkJCSAsCiAgICBYUG9pbnRlcgkJCSAKCik7
CgpleHRlcm4gaW50ICBYVW5yZWdpc3RlcklNSW5zdGFudGlhdGVDYWxsYmFjaygKCiAgICBEaXNw
bGF5KgkJCSAsCiAgICBzdHJ1Y3QgX1hybUhhc2hCdWNrZXRSZWMqCSAsCiAgICBjaGFyKgkJCSAs
CiAgICBjaGFyKgkJCSAsCiAgICBYSURQcm9jCQkJICwKICAgIFhQb2ludGVyCQkJIAoKKTsKCnR5
cGVkZWYgdm9pZCAoKlhDb25uZWN0aW9uV2F0Y2hQcm9jKSgKCiAgICBEaXNwbGF5KgkJCSAsCiAg
ICBYUG9pbnRlcgkJCSAsCiAgICBpbnQJCQkJICwKICAgIGludCAJCQkgLAkgIAogICAgWFBvaW50
ZXIqCQkJICAgCgopOwogICAgCgpleHRlcm4gaW50ICBYSW50ZXJuYWxDb25uZWN0aW9uTnVtYmVy
cygKCiAgICBEaXNwbGF5KgkJCSAsCiAgICBpbnQqKgkJCSAsCiAgICBpbnQqCQkJIAoKKTsKCmV4
dGVybiB2b2lkIFhQcm9jZXNzSW50ZXJuYWxDb25uZWN0aW9uKAoKICAgIERpc3BsYXkqCQkJICwK
ICAgIGludAkJCQkgCgopOwoKZXh0ZXJuIGludCAgWEFkZENvbm5lY3Rpb25XYXRjaCgKCiAgICBE
aXNwbGF5KgkJCSAsCiAgICBYQ29ubmVjdGlvbldhdGNoUHJvYwkgLAogICAgWFBvaW50ZXIJCQkg
CgopOwoKZXh0ZXJuIHZvaWQgWFJlbW92ZUNvbm5lY3Rpb25XYXRjaCgKCiAgICBEaXNwbGF5KgkJ
CSAsCiAgICBYQ29ubmVjdGlvbldhdGNoUHJvYwkgLAogICAgWFBvaW50ZXIJCQkgCgopOwoKfSAK
CgojIDU3ICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL0ludHJpbnNpYy5oIiAyCgojIDEgIi91c3Iv
WDExUjYvaW5jbHVkZS9YMTEvWHV0aWwuaCIgMQogCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgogCgoKCgoKCgoKCgoKCiAKCgoKdHlwZWRl
ZiBzdHJ1Y3QgewogICAgCWxvbmcgZmxhZ3M7CSAKCWludCB4LCB5OwkJIAoJaW50IHdpZHRoLCBo
ZWlnaHQ7CSAKCWludCBtaW5fd2lkdGgsIG1pbl9oZWlnaHQ7CglpbnQgbWF4X3dpZHRoLCBtYXhf
aGVpZ2h0OwogICAgCWludCB3aWR0aF9pbmMsIGhlaWdodF9pbmM7CglzdHJ1Y3QgewoJCWludCB4
OwkgCgkJaW50IHk7CSAKCX0gbWluX2FzcGVjdCwgbWF4X2FzcGVjdDsKCWludCBiYXNlX3dpZHRo
LCBiYXNlX2hlaWdodDsJCSAKCWludCB3aW5fZ3Jhdml0eTsJCQkgCn0gWFNpemVIaW50czsKCiAK
CgoKCiAKCgoKCgoKCgoKCgoKIAoKCgoKdHlwZWRlZiBzdHJ1Y3QgewoJbG9uZyBmbGFnczsJIAoJ
aW50ICBpbnB1dDsJIAoKCWludCBpbml0aWFsX3N0YXRlOwkgCglQaXhtYXAgaWNvbl9waXhtYXA7
CSAKCVdpbmRvdyBpY29uX3dpbmRvdzsgCSAKCWludCBpY29uX3gsIGljb25feTsgCSAKCVBpeG1h
cCBpY29uX21hc2s7CSAKCVhJRCB3aW5kb3dfZ3JvdXA7CSAKCSAKfSBYV01IaW50czsKCiAKCgoK
CgoKCgoKCgoKIAoKCgoKIAoKCgoKCgkJCSAKCgogCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIHVu
c2lnbmVkIGNoYXIgKnZhbHVlOwkJIAogICAgQXRvbSBlbmNvZGluZzsJCQkgCiAgICBpbnQgZm9y
bWF0OwkJCQkgCiAgICB1bnNpZ25lZCBsb25nIG5pdGVtczsJCSAKfSBYVGV4dFByb3BlcnR5OwoK
CgoKCnR5cGVkZWYgZW51bSB7CiAgICBYU3RyaW5nU3R5bGUsCQkgCiAgICBYQ29tcG91bmRUZXh0
U3R5bGUsCQkgCiAgICBYVGV4dFN0eWxlLAkJCSAKICAgIFhTdGRJQ0NUZXh0U3R5bGUJCSAKfSBY
SUNDRW5jb2RpbmdTdHlsZTsKCnR5cGVkZWYgc3RydWN0IHsKCWludCBtaW5fd2lkdGgsIG1pbl9o
ZWlnaHQ7CglpbnQgbWF4X3dpZHRoLCBtYXhfaGVpZ2h0OwoJaW50IHdpZHRoX2luYywgaGVpZ2h0
X2luYzsKfSBYSWNvblNpemU7Cgp0eXBlZGVmIHN0cnVjdCB7CgljaGFyICpyZXNfbmFtZTsKCWNo
YXIgKnJlc19jbGFzczsKfSBYQ2xhc3NIaW50OwoKIAoKCgoKCgoKCgoKCgoKCiAKCgp0eXBlZGVm
IHN0cnVjdCBfWENvbXBvc2VTdGF0dXMgewogICAgWFBvaW50ZXIgY29tcG9zZV9wdHI7CSAKICAg
IGludCBjaGFyc19tYXRjaGVkOwkJIAp9IFhDb21wb3NlU3RhdHVzOwoKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKdHlwZWRlZiBzdHJ1Y3QgX1hSZWdpb24gKlJlZ2lvbjsgCgogCiAKCgoK
IAoKIAoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogIFZpc3VhbCAqdmlzdWFsOwogIFZpc3VhbElEIHZp
c3VhbGlkOwogIGludCBzY3JlZW47CiAgaW50IGRlcHRoOwoKICBpbnQgY19jbGFzczsJCQkJCSAK
CgoKICB1bnNpZ25lZCBsb25nIHJlZF9tYXNrOwogIHVuc2lnbmVkIGxvbmcgZ3JlZW5fbWFzazsK
ICB1bnNpZ25lZCBsb25nIGJsdWVfbWFzazsKICBpbnQgY29sb3JtYXBfc2l6ZTsKICBpbnQgYml0
c19wZXJfcmdiOwp9IFhWaXN1YWxJbmZvOwoKCgoKCgoKCgoKCgoKIAoKCgp0eXBlZGVmIHN0cnVj
dCB7CglDb2xvcm1hcCBjb2xvcm1hcDsKCXVuc2lnbmVkIGxvbmcgcmVkX21heDsKCXVuc2lnbmVk
IGxvbmcgcmVkX211bHQ7Cgl1bnNpZ25lZCBsb25nIGdyZWVuX21heDsKCXVuc2lnbmVkIGxvbmcg
Z3JlZW5fbXVsdDsKCXVuc2lnbmVkIGxvbmcgYmx1ZV9tYXg7Cgl1bnNpZ25lZCBsb25nIGJsdWVf
bXVsdDsKCXVuc2lnbmVkIGxvbmcgYmFzZV9waXhlbDsKCVZpc3VhbElEIHZpc3VhbGlkOwkJIAoJ
WElEIGtpbGxpZDsJCQkgCn0gWFN0YW5kYXJkQ29sb3JtYXA7CgoKCgogCgoKCgoKCgogCgoKCgoK
CiAKCgoKCgp0eXBlZGVmIGludCBYQ29udGV4dDsKCgoKCmV4dGVybiAiQyIgeyAKCiAKCmV4dGVy
biBYQ2xhc3NIaW50ICpYQWxsb2NDbGFzc0hpbnQgKAoKICAgIHZvaWQKCik7CgpleHRlcm4gWElj
b25TaXplICpYQWxsb2NJY29uU2l6ZSAoCgogICAgdm9pZAoKKTsKCmV4dGVybiBYU2l6ZUhpbnRz
ICpYQWxsb2NTaXplSGludHMgKAoKICAgIHZvaWQKCik7CgpleHRlcm4gWFN0YW5kYXJkQ29sb3Jt
YXAgKlhBbGxvY1N0YW5kYXJkQ29sb3JtYXAgKAoKICAgIHZvaWQKCik7CgpleHRlcm4gWFdNSGlu
dHMgKlhBbGxvY1dNSGludHMgKAoKICAgIHZvaWQKCik7CgpleHRlcm4gaW50IFhDbGlwQm94KAoK
ICAgIFJlZ2lvbgkJICwKICAgIFhSZWN0YW5nbGUqCQkgCgopOwoKZXh0ZXJuIFJlZ2lvbiBYQ3Jl
YXRlUmVnaW9uKAoKICAgIHZvaWQKCik7CgpleHRlcm4gY2hhciAqWERlZmF1bHRTdHJpbmcoCgog
ICAgdm9pZAoKKTsKCmV4dGVybiBpbnQgWERlbGV0ZUNvbnRleHQoCgogICAgRGlzcGxheSoJCSAs
CiAgICBYSUQJCQkgLAogICAgWENvbnRleHQJCSAKCik7CgpleHRlcm4gaW50IFhEZXN0cm95UmVn
aW9uKAoKICAgIFJlZ2lvbgkJIAoKKTsKCmV4dGVybiBpbnQgWEVtcHR5UmVnaW9uKAoKICAgIFJl
Z2lvbgkJIAoKKTsKCmV4dGVybiBpbnQgWEVxdWFsUmVnaW9uKAoKICAgIFJlZ2lvbgkJICwKICAg
IFJlZ2lvbgkJIAoKKTsKCmV4dGVybiBpbnQgWEZpbmRDb250ZXh0KAoKICAgIERpc3BsYXkqCQkg
LAogICAgWElECQkJICwKICAgIFhDb250ZXh0CQkgLAogICAgWFBvaW50ZXIqCQkgCgopOwoKZXh0
ZXJuIGludCAgWEdldENsYXNzSGludCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwK
ICAgIFhDbGFzc0hpbnQqCQkgCgopOwoKZXh0ZXJuIGludCAgWEdldEljb25TaXplcygKCiAgICBE
aXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFhJY29uU2l6ZSoqCQkgLAogICAgaW50KgkJ
IAoKKTsKCmV4dGVybiBpbnQgIFhHZXROb3JtYWxIaW50cygKCiAgICBEaXNwbGF5KgkJICwKICAg
IFdpbmRvdwkJICwKICAgIFhTaXplSGludHMqCQkgCgopOwoKZXh0ZXJuIGludCAgWEdldFJHQkNv
bG9ybWFwcygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFhTdGFuZGFyZENv
bG9ybWFwKiogICwKICAgIGludCoJCSAsCiAgICBBdG9tCQkgCgopOwoKZXh0ZXJuIGludCAgWEdl
dFNpemVIaW50cygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFhTaXplSGlu
dHMqCQkgLAogICAgQXRvbQkJIAoKKTsKCmV4dGVybiBpbnQgIFhHZXRTdGFuZGFyZENvbG9ybWFw
KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgWFN0YW5kYXJkQ29sb3JtYXAq
CSAsCiAgICBBdG9tCQkgCQkJICAgIAoKKTsKCmV4dGVybiBpbnQgIFhHZXRUZXh0UHJvcGVydHko
CgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYVGV4dFByb3BlcnR5KgkgLAog
ICAgQXRvbQkJIAoKKTsKCmV4dGVybiBYVmlzdWFsSW5mbyAqWEdldFZpc3VhbEluZm8oCgogICAg
RGlzcGxheSoJCSAsCiAgICBsb25nCQkgLAogICAgWFZpc3VhbEluZm8qCSAsCiAgICBpbnQqCQkg
CgopOwoKZXh0ZXJuIGludCAgWEdldFdNQ2xpZW50TWFjaGluZSgKCiAgICBEaXNwbGF5KgkJICwK
ICAgIFdpbmRvdwkJICwKICAgIFhUZXh0UHJvcGVydHkqCSAKCik7CgpleHRlcm4gWFdNSGludHMg
KlhHZXRXTUhpbnRzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgCQkgICAgICAKCik7
CgpleHRlcm4gaW50ICBYR2V0V01JY29uTmFtZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRv
dwkJICwKICAgIFhUZXh0UHJvcGVydHkqCSAKCik7CgpleHRlcm4gaW50ICBYR2V0V01OYW1lKAoK
ICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgWFRleHRQcm9wZXJ0eSoJIAoKKTsK
CmV4dGVybiBpbnQgIFhHZXRXTU5vcm1hbEhpbnRzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2lu
ZG93CQkgLAogICAgWFNpemVIaW50cyoJCSAsCiAgICBsb25nKgkJICAKCik7CgpleHRlcm4gaW50
ICBYR2V0V01TaXplSGludHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBY
U2l6ZUhpbnRzKgkJICwKICAgIGxvbmcqCQkgLAogICAgQXRvbQkJIAoKKTsKCmV4dGVybiBpbnQg
IFhHZXRab29tSGludHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYU2l6
ZUhpbnRzKgkJIAoKKTsKCmV4dGVybiBpbnQgWEludGVyc2VjdFJlZ2lvbigKCiAgICBSZWdpb24J
CSAsCiAgICBSZWdpb24JCSAsCiAgICBSZWdpb24JCSAKCik7CgpleHRlcm4gdm9pZCBYQ29udmVy
dENhc2UoCgogICAgS2V5U3ltCQkgLAogICAgS2V5U3ltKgkJICwKICAgIEtleVN5bSoJCSAKCik7
CgpleHRlcm4gaW50IFhMb29rdXBTdHJpbmcoCgogICAgWEtleUV2ZW50KgkJICwKICAgIGNoYXIq
CQkgLAogICAgaW50CQkJICwKICAgIEtleVN5bSoJCSAsCiAgICBYQ29tcG9zZVN0YXR1cyoJIAoK
KTsKCmV4dGVybiBpbnQgIFhNYXRjaFZpc3VhbEluZm8oCgogICAgRGlzcGxheSoJCSAsCiAgICBp
bnQJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBYVmlzdWFsSW5mbyoJIAoKKTsK
CmV4dGVybiBpbnQgWE9mZnNldFJlZ2lvbigKCiAgICBSZWdpb24JCSAsCiAgICBpbnQJCQkgLAog
ICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgIFhQb2ludEluUmVnaW9uKAoKICAgIFJlZ2lvbgkJ
ICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIFJlZ2lvbiBYUG9seWdvblJl
Z2lvbigKCiAgICBYUG9pbnQqCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAKCik7CgpleHRl
cm4gaW50IFhSZWN0SW5SZWdpb24oCgogICAgUmVnaW9uCQkgLAogICAgaW50CQkJICwKICAgIGlu
dAkJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludAkgCgopOwoKZXh0ZXJu
IGludCBYU2F2ZUNvbnRleHQoCgogICAgRGlzcGxheSoJCSAsCiAgICBYSUQJCQkgLAogICAgWENv
bnRleHQJCSAsCiAgICBjb25zdCAgY2hhcioJIAoKKTsKCmV4dGVybiBpbnQgWFNldENsYXNzSGlu
dCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFhDbGFzc0hpbnQqCQkgCgop
OwoKZXh0ZXJuIGludCBYU2V0SWNvblNpemVzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93
CQkgLAogICAgWEljb25TaXplKgkJICwKICAgIGludAkJCSAgICAgCgopOwoKZXh0ZXJuIGludCBY
U2V0Tm9ybWFsSGludHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYU2l6
ZUhpbnRzKgkJIAoKKTsKCmV4dGVybiB2b2lkIFhTZXRSR0JDb2xvcm1hcHMoCgogICAgRGlzcGxh
eSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYU3RhbmRhcmRDb2xvcm1hcCoJICwKICAgIGludAkJ
CSAsCiAgICBBdG9tCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0U2l6ZUhpbnRzKAoKICAgIERpc3Bs
YXkqCQkgLAogICAgV2luZG93CQkgLAogICAgWFNpemVIaW50cyoJCSAsCiAgICBBdG9tCQkgCgop
OwoKZXh0ZXJuIGludCBYU2V0U3RhbmRhcmRQcm9wZXJ0aWVzKAoKICAgIERpc3BsYXkqCQkgLAog
ICAgV2luZG93CQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAg
IFBpeG1hcAkJICwKICAgIGNoYXIqKgkJICwKICAgIGludAkJCSAsCiAgICBYU2l6ZUhpbnRzKgkJ
IAoKKTsKCmV4dGVybiB2b2lkIFhTZXRUZXh0UHJvcGVydHkoCgogICAgRGlzcGxheSoJCSAsCiAg
ICBXaW5kb3cJCSAsCiAgICBYVGV4dFByb3BlcnR5KgkgLAogICAgQXRvbQkJIAoKKTsKCmV4dGVy
biB2b2lkIFhTZXRXTUNsaWVudE1hY2hpbmUoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJ
CSAsCiAgICBYVGV4dFByb3BlcnR5KgkgCgopOwoKZXh0ZXJuIGludCBYU2V0V01IaW50cygKCiAg
ICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFhXTUhpbnRzKgkJIAoKKTsKCmV4dGVy
biB2b2lkIFhTZXRXTUljb25OYW1lKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAog
ICAgWFRleHRQcm9wZXJ0eSoJIAoKKTsKCmV4dGVybiB2b2lkIFhTZXRXTU5hbWUoCgogICAgRGlz
cGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYVGV4dFByb3BlcnR5KgkgCgopOwoKZXh0ZXJu
IHZvaWQgWFNldFdNTm9ybWFsSGludHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAs
CiAgICBYU2l6ZUhpbnRzKgkJIAoKKTsKCmV4dGVybiB2b2lkIFhTZXRXTVByb3BlcnRpZXMoCgog
ICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYVGV4dFByb3BlcnR5KgkgLAogICAg
WFRleHRQcm9wZXJ0eSoJICwKICAgIGNoYXIqKgkJICwKICAgIGludAkJCSAsCiAgICBYU2l6ZUhp
bnRzKgkJICwKICAgIFhXTUhpbnRzKgkJICwKICAgIFhDbGFzc0hpbnQqCQkgCgopOwoKZXh0ZXJu
IHZvaWQgWG1iU2V0V01Qcm9wZXJ0aWVzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkg
LAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGNoYXIqKgkJICwK
ICAgIGludAkJCSAsCiAgICBYU2l6ZUhpbnRzKgkJICwKICAgIFhXTUhpbnRzKgkJICwKICAgIFhD
bGFzc0hpbnQqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWFNldFdNU2l6ZUhpbnRzKAoKICAgIERpc3Bs
YXkqCQkgLAogICAgV2luZG93CQkgLAogICAgWFNpemVIaW50cyoJCSAsCiAgICBBdG9tCQkgCgop
OwoKZXh0ZXJuIGludCBYU2V0UmVnaW9uKAoKICAgIERpc3BsYXkqCQkgLAogICAgR0MJCQkgLAog
ICAgUmVnaW9uCQkgCgopOwoKZXh0ZXJuIHZvaWQgWFNldFN0YW5kYXJkQ29sb3JtYXAoCgogICAg
RGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYU3RhbmRhcmRDb2xvcm1hcCoJICwKICAg
IEF0b20JCSAKCik7CgpleHRlcm4gaW50IFhTZXRab29tSGludHMoCgogICAgRGlzcGxheSoJCSAs
CiAgICBXaW5kb3cJCSAsCiAgICBYU2l6ZUhpbnRzKgkJIAoKKTsKCmV4dGVybiBpbnQgWFNocmlu
a1JlZ2lvbigKCiAgICBSZWdpb24JCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4
dGVybiBpbnQgIFhTdHJpbmdMaXN0VG9UZXh0UHJvcGVydHkoCgogICAgY2hhcioqCQkgLAogICAg
aW50CQkJICwKICAgIFhUZXh0UHJvcGVydHkqCSAKCik7CgpleHRlcm4gaW50IFhTdWJ0cmFjdFJl
Z2lvbigKCiAgICBSZWdpb24JCSAsCiAgICBSZWdpb24JCSAsCiAgICBSZWdpb24JCSAKCik7Cgpl
eHRlcm4gaW50IFhtYlRleHRMaXN0VG9UZXh0UHJvcGVydHkoCgogICAgRGlzcGxheSoJCSAsCiAg
ICBjaGFyKioJCSAsCiAgICBpbnQJCQkgLAogICAgWElDQ0VuY29kaW5nU3R5bGUJICwKICAgIFhU
ZXh0UHJvcGVydHkqCSAKCik7CgpleHRlcm4gaW50IFh3Y1RleHRMaXN0VG9UZXh0UHJvcGVydHko
CgogICAgRGlzcGxheSoJCSAsCiAgICB3Y2hhcl90KioJCSAsCiAgICBpbnQJCQkgLAogICAgWElD
Q0VuY29kaW5nU3R5bGUJICwKICAgIFhUZXh0UHJvcGVydHkqCSAKCik7CgpleHRlcm4gdm9pZCBY
d2NGcmVlU3RyaW5nTGlzdCgKCiAgICB3Y2hhcl90KioJCSAKCik7CgpleHRlcm4gaW50ICBYVGV4
dFByb3BlcnR5VG9TdHJpbmdMaXN0KAoKICAgIFhUZXh0UHJvcGVydHkqCSAsCiAgICBjaGFyKioq
CQkgLAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWG1iVGV4dFByb3BlcnR5VG9UZXh0TGlz
dCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFhUZXh0UHJvcGVydHkqCSAsCiAgICBjaGFyKioqCQkg
LAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWHdjVGV4dFByb3BlcnR5VG9UZXh0TGlzdCgK
CiAgICBEaXNwbGF5KgkJICwKICAgIFhUZXh0UHJvcGVydHkqCSAsCiAgICB3Y2hhcl90KioqCQkg
LAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWFVuaW9uUmVjdFdpdGhSZWdpb24oCgogICAg
WFJlY3RhbmdsZSoJCSAsCiAgICBSZWdpb24JCSAsCiAgICBSZWdpb24JCSAKCik7CgpleHRlcm4g
aW50IFhVbmlvblJlZ2lvbigKCiAgICBSZWdpb24JCSAsCiAgICBSZWdpb24JCSAsCiAgICBSZWdp
b24JCSAKCik7CgpleHRlcm4gaW50IFhXTUdlb21ldHJ5KAoKICAgIERpc3BsYXkqCQkgLAogICAg
aW50CQkJICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICB1bnNp
Z25lZCBpbnQJICwKICAgIFhTaXplSGludHMqCQkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAs
CiAgICBpbnQqCQkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAKCik7CgpleHRlcm4gaW50IFhY
b3JSZWdpb24oCgogICAgUmVnaW9uCQkgLAogICAgUmVnaW9uCQkgLAogICAgUmVnaW9uCQkgCgop
OwoKfSAKCgojIDU4ICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL0ludHJpbnNpYy5oIiAyCgojIDEg
Ii91c3IvWDExUjYvaW5jbHVkZS9YMTEvWHJlc291cmNlLmgiIDEKIAogCgogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKCgoKCgoKCgpleHRl
cm4gIkMiIHsgCgogCgoKCgoKZXh0ZXJuIGNoYXIgKlhwZXJtYWxsb2MoCgogICAgdW5zaWduZWQg
aW50CSAKCik7CgogCgoKCgoKdHlwZWRlZiBpbnQgICAgIFhybVF1YXJrLCAqWHJtUXVhcmtMaXN0
OwoKCnR5cGVkZWYgY2hhciAqWHJtU3RyaW5nOwoKCiAKZXh0ZXJuIFhybVF1YXJrIFhybVN0cmlu
Z1RvUXVhcmsoCgogICAgY29uc3QgIGNoYXIqIAkgCgopOwoKZXh0ZXJuIFhybVF1YXJrIFhybVBl
cm1TdHJpbmdUb1F1YXJrKAoKICAgIGNvbnN0ICBjaGFyKiAJIAoKKTsKCiAKZXh0ZXJuIFhybVN0
cmluZyBYcm1RdWFya1RvU3RyaW5nKAoKICAgIFhybVF1YXJrIAkJIAoKKTsKCmV4dGVybiBYcm1R
dWFyayBYcm1VbmlxdWVRdWFyaygKCiAgICB2b2lkCgopOwoKCgoKIAoKCgoKCnR5cGVkZWYgZW51
bSB7WHJtQmluZFRpZ2h0bHksIFhybUJpbmRMb29zZWx5fSBYcm1CaW5kaW5nLCAqWHJtQmluZGlu
Z0xpc3Q7CgpleHRlcm4gdm9pZCBYcm1TdHJpbmdUb1F1YXJrTGlzdCgKCiAgICBjb25zdCAgY2hh
cioJICwKICAgIFhybVF1YXJrTGlzdAkgCgopOwoKZXh0ZXJuIHZvaWQgWHJtU3RyaW5nVG9CaW5k
aW5nUXVhcmtMaXN0KAoKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgWHJtQmluZGluZ0xpc3QJICwK
ICAgIFhybVF1YXJrTGlzdAkgCgopOwoKIAoKCgoKCnR5cGVkZWYgWHJtUXVhcmsgICAgIFhybU5h
bWU7CnR5cGVkZWYgWHJtUXVhcmtMaXN0IFhybU5hbWVMaXN0OwoKCgoKdHlwZWRlZiBYcm1RdWFy
ayAgICAgWHJtQ2xhc3M7CnR5cGVkZWYgWHJtUXVhcmtMaXN0IFhybUNsYXNzTGlzdDsKCgoKCgoK
IAoKCgoKCnR5cGVkZWYgWHJtUXVhcmsgICAgIFhybVJlcHJlc2VudGF0aW9uOwoKCgp0eXBlZGVm
IHN0cnVjdCB7CiAgICB1bnNpZ25lZCBpbnQgICAgc2l6ZTsKICAgIFhQb2ludGVyCSAgICBhZGRy
Owp9IFhybVZhbHVlLCAqWHJtVmFsdWVQdHI7CgoKIAoKCgoKCnR5cGVkZWYgc3RydWN0IF9Ycm1I
YXNoQnVja2V0UmVjICpYcm1IYXNoQnVja2V0Owp0eXBlZGVmIFhybUhhc2hCdWNrZXQgKlhybUhh
c2hUYWJsZTsKdHlwZWRlZiBYcm1IYXNoVGFibGUgWHJtU2VhcmNoTGlzdFtdOwp0eXBlZGVmIHN0
cnVjdCBfWHJtSGFzaEJ1Y2tldFJlYyAqWHJtRGF0YWJhc2U7CgoKZXh0ZXJuIHZvaWQgWHJtRGVz
dHJveURhdGFiYXNlKAoKICAgIFhybURhdGFiYXNlCQkgICAgIAoKKTsKCmV4dGVybiB2b2lkIFhy
bVFQdXRSZXNvdXJjZSgKCiAgICBYcm1EYXRhYmFzZSoJICwKICAgIFhybUJpbmRpbmdMaXN0CSAs
CiAgICBYcm1RdWFya0xpc3QJICwKICAgIFhybVJlcHJlc2VudGF0aW9uCSAsCiAgICBYcm1WYWx1
ZSoJCSAKCik7CgpleHRlcm4gdm9pZCBYcm1QdXRSZXNvdXJjZSgKCiAgICBYcm1EYXRhYmFzZSoJ
ICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBYcm1WYWx1ZSoJ
CSAKCik7CgpleHRlcm4gdm9pZCBYcm1RUHV0U3RyaW5nUmVzb3VyY2UoCgogICAgWHJtRGF0YWJh
c2UqCSAsCiAgICBYcm1CaW5kaW5nTGlzdCAgICAgICAsCiAgICBYcm1RdWFya0xpc3QJICwKICAg
IGNvbnN0ICBjaGFyKgkgCgopOwoKZXh0ZXJuIHZvaWQgWHJtUHV0U3RyaW5nUmVzb3VyY2UoCgog
ICAgWHJtRGF0YWJhc2UqCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGNvbnN0ICBjaGFyKgkg
CgopOwoKZXh0ZXJuIHZvaWQgWHJtUHV0TGluZVJlc291cmNlKAoKICAgIFhybURhdGFiYXNlKgkg
LAogICAgY29uc3QgIGNoYXIqCSAKCik7CgpleHRlcm4gaW50ICBYcm1RR2V0UmVzb3VyY2UoCgog
ICAgWHJtRGF0YWJhc2UJCSAsCiAgICBYcm1OYW1lTGlzdAkJICwKICAgIFhybUNsYXNzTGlzdAkg
LAogICAgWHJtUmVwcmVzZW50YXRpb24qCSAsCiAgICBYcm1WYWx1ZSoJCSAKCik7CgpleHRlcm4g
aW50ICBYcm1HZXRSZXNvdXJjZSgKCiAgICBYcm1EYXRhYmFzZQkJICwKICAgIGNvbnN0ICBjaGFy
KgkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBjaGFyKioJCSAsCiAgICBYcm1WYWx1ZSoJCSAK
Cik7CgpleHRlcm4gaW50ICBYcm1RR2V0U2VhcmNoTGlzdCgKCiAgICBYcm1EYXRhYmFzZQkJICwK
ICAgIFhybU5hbWVMaXN0CQkgLAogICAgWHJtQ2xhc3NMaXN0CSAsCiAgICBYcm1TZWFyY2hMaXN0
CSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCAgWHJtUUdldFNlYXJjaFJlc291cmNlKAoK
ICAgIFhybVNlYXJjaExpc3QJICwKICAgIFhybU5hbWUJCSAsCiAgICBYcm1DbGFzcwkJICwKICAg
IFhybVJlcHJlc2VudGF0aW9uKgkgLAogICAgWHJtVmFsdWUqCQkgCgopOwoKIAoKCgoKCmV4dGVy
biB2b2lkIFhybVNldERhdGFiYXNlKAoKICAgIERpc3BsYXkqCQkgLAogICAgWHJtRGF0YWJhc2UJ
CSAKCik7CgpleHRlcm4gWHJtRGF0YWJhc2UgWHJtR2V0RGF0YWJhc2UoCgogICAgRGlzcGxheSoJ
CSAKCik7CgpleHRlcm4gWHJtRGF0YWJhc2UgWHJtR2V0RmlsZURhdGFiYXNlKAoKICAgIGNvbnN0
ICBjaGFyKgkgCgopOwoKZXh0ZXJuIGludCAgWHJtQ29tYmluZUZpbGVEYXRhYmFzZSgKCiAgICBj
b25zdCAgY2hhciogCSAsCiAgICBYcm1EYXRhYmFzZSoJICwKICAgIGludCAJCSAKCik7CgpleHRl
cm4gWHJtRGF0YWJhc2UgWHJtR2V0U3RyaW5nRGF0YWJhc2UoCgogICAgY29uc3QgIGNoYXIqCSAg
ICAKCik7CgpleHRlcm4gdm9pZCBYcm1QdXRGaWxlRGF0YWJhc2UoCgogICAgWHJtRGF0YWJhc2UJ
CSAsCiAgICBjb25zdCAgY2hhcioJIAoKKTsKCmV4dGVybiB2b2lkIFhybU1lcmdlRGF0YWJhc2Vz
KAoKICAgIFhybURhdGFiYXNlCQkgLAogICAgWHJtRGF0YWJhc2UqCSAKCik7CgpleHRlcm4gdm9p
ZCBYcm1Db21iaW5lRGF0YWJhc2UoCgogICAgWHJtRGF0YWJhc2UJCSAsCiAgICBYcm1EYXRhYmFz
ZSoJICwKICAgIGludCAJCSAKCik7CgoKCgpleHRlcm4gaW50ICBYcm1FbnVtZXJhdGVEYXRhYmFz
ZSgKCiAgICBYcm1EYXRhYmFzZQkJICwKICAgIFhybU5hbWVMaXN0CQkgLAogICAgWHJtQ2xhc3NM
aXN0CSAsCiAgICBpbnQJCQkgLAogICAgaW50ICAoKikoCgoJICAgICBYcm1EYXRhYmFzZSoJICwK
CSAgICAgWHJtQmluZGluZ0xpc3QJICwKCSAgICAgWHJtUXVhcmtMaXN0CSAsCgkgICAgIFhybVJl
cHJlc2VudGF0aW9uKgkgLAoJICAgICBYcm1WYWx1ZSoJCSAsCgkgICAgIFhQb2ludGVyCQkgCgoJ
ICAgICApCQkgLAogICAgWFBvaW50ZXIJCSAKCik7CgpleHRlcm4gY2hhciAqWHJtTG9jYWxlT2ZE
YXRhYmFzZSgKCiAgICBYcm1EYXRhYmFzZSAJIAoKKTsKCgogCgoKCgoKdHlwZWRlZiBlbnVtIHsK
ICAgIFhybW9wdGlvbk5vQXJnLAkgCiAgICBYcm1vcHRpb25Jc0FyZywgICAgICAKICAgIFhybW9w
dGlvblN0aWNreUFyZywgIAogICAgWHJtb3B0aW9uU2VwQXJnLCAgICAgCiAgICBYcm1vcHRpb25S
ZXNBcmcsCSAKICAgIFhybW9wdGlvblNraXBBcmcsICAgIAogICAgWHJtb3B0aW9uU2tpcExpbmUs
ICAgCiAgICBYcm1vcHRpb25Ta2lwTkFyZ3MJIAoKfSBYcm1PcHRpb25LaW5kOwoKdHlwZWRlZiBz
dHJ1Y3QgewogICAgY2hhcgkgICAgKm9wdGlvbjsJICAgICAKICAgIGNoYXIJICAgICpzcGVjaWZp
ZXI7ICAgICAgCiAgICBYcm1PcHRpb25LaW5kICAgYXJnS2luZDsJICAgICAKICAgIFhQb2ludGVy
CSAgICB2YWx1ZTsJICAgICAKfSBYcm1PcHRpb25EZXNjUmVjLCAqWHJtT3B0aW9uRGVzY0xpc3Q7
CgoKZXh0ZXJuIHZvaWQgWHJtUGFyc2VDb21tYW5kKAoKICAgIFhybURhdGFiYXNlKgkgLAogICAg
WHJtT3B0aW9uRGVzY0xpc3QJICwKICAgIGludAkJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAg
IGludCoJCSAsCiAgICBjaGFyKioJCSAJCSAgICAgCgopOwoKfSAKCgogCiMgNTkgIi91c3IvWDEx
UjYvaW5jbHVkZS9YMTEvSW50cmluc2ljLmgiIDIKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYg
Y2hhciAqU3RyaW5nOwoKCgogCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgp0eXBlZGVmIHN0cnVjdCBfV2lkZ2V0UmVjICpXaWRnZXQ7CnR5cGVkZWYgV2lkZ2V0ICpX
aWRnZXRMaXN0Owp0eXBlZGVmIHN0cnVjdCBfV2lkZ2V0Q2xhc3NSZWMgKldpZGdldENsYXNzOwp0
eXBlZGVmIHN0cnVjdCBfQ29tcG9zaXRlUmVjICpDb21wb3NpdGVXaWRnZXQ7CnR5cGVkZWYgc3Ry
dWN0IF9YdEFjdGlvbnNSZWMgKlh0QWN0aW9uTGlzdDsKdHlwZWRlZiBzdHJ1Y3QgX1h0RXZlbnRS
ZWMgKlh0RXZlbnRUYWJsZTsKCnR5cGVkZWYgc3RydWN0IF9YdEFwcFN0cnVjdCAqWHRBcHBDb250
ZXh0Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcJWHRWYWx1ZU1hc2s7CnR5cGVkZWYgdW5zaWduZWQg
bG9uZwlYdEludGVydmFsSWQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZwlYdElucHV0SWQ7CnR5cGVk
ZWYgdW5zaWduZWQgbG9uZwlYdFdvcmtQcm9jSWQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZwlYdFNp
Z25hbElkOwp0eXBlZGVmIHVuc2lnbmVkIGludAlYdEdlb21ldHJ5TWFzazsKdHlwZWRlZiB1bnNp
Z25lZCBsb25nCVh0R0NNYXNrOyAgICAKdHlwZWRlZiB1bnNpZ25lZCBsb25nCVBpeGVsOwkgICAg
IAp0eXBlZGVmIGludAkJWHRDYWNoZVR5cGU7CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKdHlwZWRlZiBjaGFyCQlCb29sZWFuOwp0eXBlZGVmIGxvbmcJCVh0QXJnVmFsOwp0eXBlZGVm
IHVuc2lnbmVkIGNoYXIJWHRFbnVtOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50CUNhcmRpbmFsOwp0
eXBlZGVmIHVuc2lnbmVkIHNob3J0CURpbWVuc2lvbjsgICAKdHlwZWRlZiBzaG9ydAkJUG9zaXRp
b247ICAgIAoKCnR5cGVkZWYgdm9pZCoJCVh0UG9pbnRlcjsKCgoKCiAKIAp0eXBlZGVmIFh0UG9p
bnRlcglPcGFxdWU7CgojIDEgIi91c3IvWDExUjYvaW5jbHVkZS9YMTEvQ29yZS5oIiAxCiAKCgoK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBl
ZGVmIHN0cnVjdCBfV2lkZ2V0Q2xhc3NSZWMgKkNvcmVXaWRnZXRDbGFzczsKdHlwZWRlZiBzdHJ1
Y3QgX1dpZGdldFJlYyAqQ29yZVdpZGdldDsKZXh0ZXJuICBXaWRnZXRDbGFzcyBjb3JlV2lkZ2V0
Q2xhc3M7CgoKZXh0ZXJuICBXaWRnZXRDbGFzcyB3aWRnZXRDbGFzczsKCgoKCiAKIyAxOTIgIi91
c3IvWDExUjYvaW5jbHVkZS9YMTEvSW50cmluc2ljLmgiIDIKCiMgMSAiL3Vzci9YMTFSNi9pbmNs
dWRlL1gxMS9Db21wb3NpdGUuaCIgMQogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0NvbXBvc2l0ZUNsYXNzUmVjICpD
b21wb3NpdGVXaWRnZXRDbGFzczsKCnR5cGVkZWYgQ2FyZGluYWwgKCpYdE9yZGVyUHJvYykoCgog
ICAgV2lkZ2V0IAkgCgopOwoKZXh0ZXJuICJDIiB7IAoKZXh0ZXJuIHZvaWQgWHRNYW5hZ2VDaGls
ZHJlbigKCiAgICBXaWRnZXRMaXN0IAkJICwKICAgIENhcmRpbmFsIAkJIAoKKTsKCmV4dGVybiB2
b2lkIFh0TWFuYWdlQ2hpbGQoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0VW5t
YW5hZ2VDaGlsZHJlbigKCiAgICBXaWRnZXRMaXN0IAkJICwKICAgIENhcmRpbmFsIAkJIAoKKTsK
CmV4dGVybiB2b2lkIFh0VW5tYW5hZ2VDaGlsZCgKCiAgICBXaWRnZXQgCQkgCgopOwoKdHlwZWRl
ZiB2b2lkICgqWHREb0NoYW5nZVByb2MpKAoKICAgIFdpZGdldAkJICwKICAgIFdpZGdldExpc3QJ
CSAsCiAgICBDYXJkaW5hbCAqCQkgLAogICAgV2lkZ2V0TGlzdAkJICwKICAgIENhcmRpbmFsICoJ
CSAsCiAgICBYdFBvaW50ZXIJCSAKCik7CgpleHRlcm4gdm9pZCBYdENoYW5nZU1hbmFnZWRTZXQo
CgogICAgV2lkZ2V0TGlzdAkJICwKICAgIENhcmRpbmFsCQkgLAogICAgWHREb0NoYW5nZVByb2MJ
ICwKICAgIFh0UG9pbnRlcgkJICwKICAgIFdpZGdldExpc3QJCSAsCiAgICBDYXJkaW5hbAkJIAoK
KTsKCn0gCgoKZXh0ZXJuICBXaWRnZXRDbGFzcyBjb21wb3NpdGVXaWRnZXRDbGFzczsKCgoKIAoj
IDE5MyAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9JbnRyaW5zaWMuaCIgMgoKIyAxICIvdXNyL1gx
MVI2L2luY2x1ZGUvWDExL0NvbnN0cmFpbnQuaCIgMQogCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9Db25zdHJhaW50
Q2xhc3NSZWMgKkNvbnN0cmFpbnRXaWRnZXRDbGFzczsKCgpleHRlcm4gIFdpZGdldENsYXNzIGNv
bnN0cmFpbnRXaWRnZXRDbGFzczsKCgoKIAojIDE5NCAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9J
bnRyaW5zaWMuaCIgMgoKIyAxICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL09iamVjdC5oIiAxCiAK
IAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlw
ZWRlZiBzdHJ1Y3QgX09iamVjdFJlYyAqT2JqZWN0Owp0eXBlZGVmIHN0cnVjdCBfT2JqZWN0Q2xh
c3NSZWMgKk9iamVjdENsYXNzOwoKCmV4dGVybiAgV2lkZ2V0Q2xhc3Mgb2JqZWN0Q2xhc3M7CgoK
IAojIDE5NSAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9JbnRyaW5zaWMuaCIgMgoKIyAxICIvdXNy
L1gxMVI2L2luY2x1ZGUvWDExL1JlY3RPYmouaCIgMQogCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9SZWN0T2JqUmVj
ICpSZWN0T2JqOwp0eXBlZGVmIHN0cnVjdCBfUmVjdE9iakNsYXNzUmVjICpSZWN0T2JqQ2xhc3M7
CgoKZXh0ZXJuICBXaWRnZXRDbGFzcyByZWN0T2JqQ2xhc3M7CgoKIAojIDE5NiAiL3Vzci9YMTFS
Ni9pbmNsdWRlL1gxMS9JbnRyaW5zaWMuaCIgMgoKCnR5cGVkZWYgc3RydWN0IF9UcmFuc2xhdGlv
bkRhdGEgKlh0VHJhbnNsYXRpb25zOwp0eXBlZGVmIHN0cnVjdCBfVHJhbnNsYXRpb25EYXRhICpY
dEFjY2VsZXJhdG9yczsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgTW9kaWZpZXJzOwoKdHlwZWRlZiB2
b2lkICgqWHRBY3Rpb25Qcm9jKSgKCiAgICBXaWRnZXQgCQkgLAogICAgWEV2ZW50KgkJICwKICAg
IFN0cmluZyoJCSAsCiAgICBDYXJkaW5hbCoJCSAKCik7Cgp0eXBlZGVmIFh0QWN0aW9uUHJvYyog
WHRCb3VuZEFjdGlvbnM7Cgp0eXBlZGVmIHN0cnVjdCBfWHRBY3Rpb25zUmVjewogICAgU3RyaW5n
CSBzdHJpbmc7CiAgICBYdEFjdGlvblByb2MgcHJvYzsKfSBYdEFjdGlvbnNSZWM7Cgp0eXBlZGVm
IGVudW0gewogCiAKICAgIFh0QWRkcmVzcywJCSAKICAgIFh0QmFzZU9mZnNldCwJIAogICAgWHRJ
bW1lZGlhdGUsCSAKICAgIFh0UmVzb3VyY2VTdHJpbmcsCSAKICAgIFh0UmVzb3VyY2VRdWFyaywJ
IAogICAgWHRXaWRnZXRCYXNlT2Zmc2V0LAkgCiAgICBYdFByb2NlZHVyZUFyZwkgCn0gWHRBZGRy
ZXNzTW9kZTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFh0QWRkcmVzc01vZGUgICBhZGRyZXNzX21v
ZGU7CiAgICBYdFBvaW50ZXIJICAgIGFkZHJlc3NfaWQ7CiAgICBDYXJkaW5hbAkgICAgc2l6ZTsK
fSBYdENvbnZlcnRBcmdSZWMsICpYdENvbnZlcnRBcmdMaXN0OwoKdHlwZWRlZiB2b2lkICgqWHRD
b252ZXJ0QXJnUHJvYykoCgogICAgV2lkZ2V0IAkJICwKICAgIENhcmRpbmFsKgkJICwKICAgIFhy
bVZhbHVlKgkJIAoKKTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFh0R2VvbWV0cnlNYXNrIHJlcXVl
c3RfbW9kZTsKICAgIFBvc2l0aW9uIHgsIHk7CiAgICBEaW1lbnNpb24gd2lkdGgsIGhlaWdodCwg
Ym9yZGVyX3dpZHRoOwogICAgV2lkZ2V0IHNpYmxpbmc7CiAgICBpbnQgc3RhY2tfbW9kZTsgICAg
Cn0gWHRXaWRnZXRHZW9tZXRyeTsKCiAKCgogCgoKdHlwZWRlZiB2b2lkICgqWHRDb252ZXJ0ZXIp
KCAgCgogICAgWHJtVmFsdWUqCQkgLAogICAgQ2FyZGluYWwqCQkgLAogICAgWHJtVmFsdWUqCQkg
LAogICAgWHJtVmFsdWUqCQkgCgopOwoKdHlwZWRlZiBCb29sZWFuICgqWHRUeXBlQ29udmVydGVy
KSgKCiAgICBEaXNwbGF5KgkJICwKICAgIFhybVZhbHVlKgkJICwKICAgIENhcmRpbmFsKgkJICwK
ICAgIFhybVZhbHVlKgkJICwKICAgIFhybVZhbHVlKgkJICwKICAgIFh0UG9pbnRlcioJCSAKCik7
Cgp0eXBlZGVmIHZvaWQgKCpYdERlc3RydWN0b3IpKAoKICAgIFh0QXBwQ29udGV4dAkgLAogICAg
WHJtVmFsdWUqCQkgLAogICAgWHRQb2ludGVyIAkJICwKICAgIFhybVZhbHVlKgkJICwKICAgIENh
cmRpbmFsKgkJIAoKKTsKCnR5cGVkZWYgT3BhcXVlIFh0Q2FjaGVSZWY7Cgp0eXBlZGVmIE9wYXF1
ZSBYdEFjdGlvbkhvb2tJZDsKCnR5cGVkZWYgdm9pZCAoKlh0QWN0aW9uSG9va1Byb2MpKAoKICAg
IFdpZGdldAkJICwKICAgIFh0UG9pbnRlcgkJICwKICAgIFN0cmluZwkJICwKICAgIFhFdmVudCoJ
CSAsCiAgICBTdHJpbmcqCQkgLAogICAgQ2FyZGluYWwqCQkgCgopOwoKdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIFh0QmxvY2tIb29rSWQ7Cgp0eXBlZGVmIHZvaWQgKCpYdEJsb2NrSG9va1Byb2MpKAoK
ICAgIFh0UG9pbnRlcgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlh0S2V5UHJvYykoCgogICAgRGlz
cGxheSoJCSAsCiAgICB1bnNpZ25lZCBpbnQgIAkJICwKICAgIE1vZGlmaWVycwkJICwKICAgIE1v
ZGlmaWVycyoJCSAsCiAgICBLZXlTeW0qCQkgCgopOwoKdHlwZWRlZiB2b2lkICgqWHRDYXNlUHJv
YykoCgogICAgRGlzcGxheSoJCSAsCiAgICBLZXlTeW0JCSAsCiAgICBLZXlTeW0qCQkgLAogICAg
S2V5U3ltKgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlh0RXZlbnRIYW5kbGVyKSgKCiAgICBXaWRn
ZXQgCQkgLAogICAgWHRQb2ludGVyIAkJICwKICAgIFhFdmVudCoJCSAsCiAgICBCb29sZWFuKgkJ
IAoKKTsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIEV2ZW50TWFzazsKCnR5cGVkZWYgZW51bSB7WHRM
aXN0SGVhZCwgWHRMaXN0VGFpbCB9IFh0TGlzdFBvc2l0aW9uOwoKdHlwZWRlZiB1bnNpZ25lZCBs
b25nCVh0SW5wdXRNYXNrOwoKCgoKCnR5cGVkZWYgdm9pZCAoKlh0VGltZXJDYWxsYmFja1Byb2Mp
KAoKICAgIFh0UG9pbnRlciAJCSAsCiAgICBYdEludGVydmFsSWQqCSAKCik7Cgp0eXBlZGVmIHZv
aWQgKCpYdElucHV0Q2FsbGJhY2tQcm9jKSgKCiAgICBYdFBvaW50ZXIgCQkgLAogICAgaW50KgkJ
ICwKICAgIFh0SW5wdXRJZCoJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdFNpZ25hbENhbGxiYWNr
UHJvYykoCgogICAgWHRQb2ludGVyCQkgLAogICAgWHRTaWduYWxJZCoJCSAKCik7Cgp0eXBlZGVm
IHN0cnVjdCB7CiAgICBTdHJpbmcJbmFtZTsKICAgIFh0QXJnVmFsCXZhbHVlOwp9IEFyZywgKkFy
Z0xpc3Q7Cgp0eXBlZGVmIFh0UG9pbnRlcglYdFZhckFyZ3NMaXN0OwoKdHlwZWRlZiB2b2lkICgq
WHRDYWxsYmFja1Byb2MpKAoKICAgIFdpZGdldCAJCSAsCiAgICBYdFBvaW50ZXIgCQkgLAkgCiAg
ICBYdFBvaW50ZXIgCQkgCSAKCik7Cgp0eXBlZGVmIHN0cnVjdCBfWHRDYWxsYmFja1JlYyB7CiAg
ICBYdENhbGxiYWNrUHJvYyAgY2FsbGJhY2s7CiAgICBYdFBvaW50ZXIJICAgIGNsb3N1cmU7Cn0g
WHRDYWxsYmFja1JlYywgKlh0Q2FsbGJhY2tMaXN0OwoKdHlwZWRlZiBlbnVtIHsKCVh0Q2FsbGJh
Y2tOb0xpc3QsCglYdENhbGxiYWNrSGFzTm9uZSwKCVh0Q2FsbGJhY2tIYXNTb21lCn0gWHRDYWxs
YmFja1N0YXR1czsKCnR5cGVkZWYgZW51bSAgewogICAgWHRHZW9tZXRyeVllcywJICAgCiAgICBY
dEdlb21ldHJ5Tm8sCSAgIAogICAgWHRHZW9tZXRyeUFsbW9zdCwJICAgCiAgICBYdEdlb21ldHJ5
RG9uZQkgICAKfSBYdEdlb21ldHJ5UmVzdWx0OwoKdHlwZWRlZiBlbnVtIHtYdEdyYWJOb25lLCBY
dEdyYWJOb25leGNsdXNpdmUsIFh0R3JhYkV4Y2x1c2l2ZX0gWHRHcmFiS2luZDsKCnR5cGVkZWYg
c3RydWN0IHsKICAgIFdpZGdldCAgc2hlbGxfd2lkZ2V0OwogICAgV2lkZ2V0ICBlbmFibGVfd2lk
Z2V0Owp9IFh0UG9wZG93bklEUmVjLCAqWHRQb3Bkb3duSUQ7Cgp0eXBlZGVmIHN0cnVjdCBfWHRS
ZXNvdXJjZSB7CiAgICBTdHJpbmcJcmVzb3VyY2VfbmFtZTsJIAogICAgU3RyaW5nCXJlc291cmNl
X2NsYXNzOwkgCiAgICBTdHJpbmcJcmVzb3VyY2VfdHlwZTsJIAogICAgQ2FyZGluYWwJcmVzb3Vy
Y2Vfc2l6ZTsJIAogICAgQ2FyZGluYWwJcmVzb3VyY2Vfb2Zmc2V0OyAKICAgIFN0cmluZwlkZWZh
dWx0X3R5cGU7CSAKICAgIFh0UG9pbnRlcglkZWZhdWx0X2FkZHI7CSAKfSBYdFJlc291cmNlLCAq
WHRSZXNvdXJjZUxpc3Q7Cgp0eXBlZGVmIHZvaWQgKCpYdFJlc291cmNlRGVmYXVsdFByb2MpKAoK
ICAgIFdpZGdldAkgLAogICAgaW50CQkgLAogICAgWHJtVmFsdWUqCSAKCik7Cgp0eXBlZGVmIFN0
cmluZyAoKlh0TGFuZ3VhZ2VQcm9jKSgKCiAgICBEaXNwbGF5KgkgLAogICAgU3RyaW5nCSAsCiAg
ICBYdFBvaW50ZXIJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlh0RXJyb3JNc2dIYW5kbGVyKSgKCiAg
ICBTdHJpbmcgCQkgLAogICAgU3RyaW5nCQkgLAogICAgU3RyaW5nCQkgLAogICAgU3RyaW5nCQkg
LAogICAgU3RyaW5nKgkJICwKICAgIENhcmRpbmFsKgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlh0
RXJyb3JIYW5kbGVyKSgKCiAgU3RyaW5nCQkgCgopOwoKdHlwZWRlZiB2b2lkICgqWHRDcmVhdGVQ
b3B1cENoaWxkUHJvYykoCgogICAgV2lkZ2V0CSAKCik7Cgp0eXBlZGVmIEJvb2xlYW4gKCpYdFdv
cmtQcm9jKSgKCiAgICBYdFBvaW50ZXIgCQkgCSAKCik7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBj
aGFyIG1hdGNoOwogICAgU3RyaW5nIHN1YnN0aXR1dGlvbjsKfSBTdWJzdGl0dXRpb25SZWMsICpT
dWJzdGl0dXRpb247Cgp0eXBlZGVmIEJvb2xlYW4gKCpYdEZpbGVQcmVkaWNhdGUpKAoKICAgU3Ry
aW5nICAKCik7Cgp0eXBlZGVmIFh0UG9pbnRlciBYdFJlcXVlc3RJZDsKCnR5cGVkZWYgQm9vbGVh
biAoKlh0Q29udmVydFNlbGVjdGlvblByb2MpKAoKICAgIFdpZGdldCAJCSAsCiAgICBBdG9tKgkJ
ICwKICAgIEF0b20qCQkgLAogICAgQXRvbSoJCSAsCiAgICBYdFBvaW50ZXIqCQkgLAogICAgdW5z
aWduZWQgbG9uZyoJICwKICAgIGludCoJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdExvc2VTZWxl
Y3Rpb25Qcm9jKSgKCiAgICBXaWRnZXQgCQkgLAogICAgQXRvbSoJCSAKCik7Cgp0eXBlZGVmIHZv
aWQgKCpYdFNlbGVjdGlvbkRvbmVQcm9jKSgKCiAgICBXaWRnZXQgCQkgLAogICAgQXRvbSoJCSAs
CiAgICBBdG9tKgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlh0U2VsZWN0aW9uQ2FsbGJhY2tQcm9j
KSgKCiAgICBXaWRnZXQgCQkgLAogICAgWHRQb2ludGVyIAkJICwKICAgIEF0b20qCQkgLAogICAg
QXRvbSoJCSAsCiAgICBYdFBvaW50ZXIgCQkgLAogICAgdW5zaWduZWQgbG9uZyoJICwKICAgIGlu
dCoJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdExvc2VTZWxlY3Rpb25JbmNyUHJvYykoCgogICAg
V2lkZ2V0IAkJICwKICAgIEF0b20qCQkgLAogICAgWHRQb2ludGVyIAkJIAoKKTsKCnR5cGVkZWYg
dm9pZCAoKlh0U2VsZWN0aW9uRG9uZUluY3JQcm9jKSgKCiAgICBXaWRnZXQgCQkgLAogICAgQXRv
bSoJCSAsCiAgICBBdG9tKgkJICwKICAgIFh0UmVxdWVzdElkKgkgLAogICAgWHRQb2ludGVyIAkJ
IAoKKTsKCnR5cGVkZWYgQm9vbGVhbiAoKlh0Q29udmVydFNlbGVjdGlvbkluY3JQcm9jKSgKCiAg
ICBXaWRnZXQgCQkgLAogICAgQXRvbSoJCSAsCiAgICBBdG9tKgkJICwKICAgIEF0b20qCQkgLAog
ICAgWHRQb2ludGVyKgkJICwKICAgIHVuc2lnbmVkIGxvbmcqCSAsCiAgICBpbnQqCQkgLAogICAg
dW5zaWduZWQgbG9uZyoJICwKICAgIFh0UG9pbnRlciAJCSAsCiAgICBYdFJlcXVlc3RJZCoJIAoK
KTsKCnR5cGVkZWYgdm9pZCAoKlh0Q2FuY2VsQ29udmVydFNlbGVjdGlvblByb2MpKAoKICAgIFdp
ZGdldCAJCSAsCiAgICBBdG9tKgkJICwKICAgIEF0b20qCQkgLAogICAgWHRSZXF1ZXN0SWQqCSAs
CiAgICBYdFBvaW50ZXIgCQkgCgopOwoKdHlwZWRlZiBCb29sZWFuICgqWHRFdmVudERpc3BhdGNo
UHJvYykoCgogICAgWEV2ZW50KgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlh0RXh0ZW5zaW9uU2Vs
ZWN0UHJvYykoCgogICAgV2lkZ2V0CQkgLAogICAgaW50KgkJICwKICAgIFh0UG9pbnRlcioJCSAs
CiAgICBpbnQJCQkgLAogICAgWHRQb2ludGVyCQkgCgopOwoKIAoKCgoKCmV4dGVybiAiQyIgeyAK
CmV4dGVybiBCb29sZWFuIFh0Q29udmVydEFuZFN0b3JlKAoKICAgIFdpZGdldCAJCSAsCiAgICBj
b25zdCAgY2hhciogIAkgLAogICAgWHJtVmFsdWUqCQkgLAogICAgY29uc3QgIGNoYXIqICAJICwK
ICAgIFhybVZhbHVlKgkJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q2FsbENvbnZlcnRlcigKCiAg
ICBEaXNwbGF5KgkJICwKICAgIFh0VHlwZUNvbnZlcnRlciAJICwKICAgIFhybVZhbHVlUHRyIAkg
LAogICAgQ2FyZGluYWwgCQkgLAogICAgWHJtVmFsdWVQdHIgCSAsCiAgICBYcm1WYWx1ZSoJCSAs
CiAgICBYdENhY2hlUmVmKgkJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0RGlzcGF0Y2hFdmVudCgK
CiAgICBYRXZlbnQqIAkJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q2FsbEFjY2VwdEZvY3VzKAoK
ICAgIFdpZGdldCAJCSAsCiAgICBUaW1lKgkJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0UGVla0V2
ZW50KCAgCgogICAgWEV2ZW50KgkJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0QXBwUGVla0V2ZW50
KAoKICAgIFh0QXBwQ29udGV4dCAJICwKICAgIFhFdmVudCoJCSAKCik7CgpleHRlcm4gQm9vbGVh
biBYdElzU3ViY2xhc3MoCgogICAgV2lkZ2V0IAkJICwKICAgIFdpZGdldENsYXNzIAkgCgopOwoK
ZXh0ZXJuIEJvb2xlYW4gWHRJc09iamVjdCgKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIEJv
b2xlYW4gX1h0Q2hlY2tTdWJjbGFzc0ZsYWcoICAKCiAgICBXaWRnZXQJCSAsCiAgICB1bnNpZ25l
ZCBpbnQgCQkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gX1h0SXNTdWJjbGFzc09mKCAgCgogICAgV2lk
Z2V0CQkgLAogICAgV2lkZ2V0Q2xhc3MJCSAsCiAgICBXaWRnZXRDbGFzcwkJICwKICAgIHVuc2ln
bmVkIGludCAJCSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdElzTWFuYWdlZCgKCiAgICBXaWRnZXQg
CQkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRJc1JlYWxpemVkKAoKICAgIFdpZGdldCAJCSAKCik7
CgpleHRlcm4gQm9vbGVhbiBYdElzU2Vuc2l0aXZlKAoKICAgIFdpZGdldCAJCSAKCik7CgpleHRl
cm4gQm9vbGVhbiBYdE93blNlbGVjdGlvbigKCiAgICBXaWRnZXQgCQkgLAogICAgQXRvbSAJCSAs
CiAgICBUaW1lIAkJICwKICAgIFh0Q29udmVydFNlbGVjdGlvblByb2MgICwKICAgIFh0TG9zZVNl
bGVjdGlvblByb2MJICwKICAgIFh0U2VsZWN0aW9uRG9uZVByb2MgIAoKKTsKCmV4dGVybiBCb29s
ZWFuIFh0T3duU2VsZWN0aW9uSW5jcmVtZW50YWwoCgogICAgV2lkZ2V0IAkJICwKICAgIEF0b20g
CQkgLAogICAgVGltZSAJCSAsCiAgICBYdENvbnZlcnRTZWxlY3Rpb25JbmNyUHJvYwkgLAogICAg
WHRMb3NlU2VsZWN0aW9uSW5jclByb2MJICwKICAgIFh0U2VsZWN0aW9uRG9uZUluY3JQcm9jCSAs
CiAgICBYdENhbmNlbENvbnZlcnRTZWxlY3Rpb25Qcm9jICAsCiAgICBYdFBvaW50ZXIgCQkgCgop
OwoKZXh0ZXJuIFh0R2VvbWV0cnlSZXN1bHQgWHRNYWtlUmVzaXplUmVxdWVzdCgKCiAgICBXaWRn
ZXQgCQkgLAogICAgdW5zaWduZWQgaW50IAkgLAogICAgdW5zaWduZWQgaW50IAkgLAogICAgRGlt
ZW5zaW9uKgkJICwKICAgIERpbWVuc2lvbioJCSAKCik7CgpleHRlcm4gdm9pZCBYdFRyYW5zbGF0
ZUNvb3JkcygKCiAgICBXaWRnZXQgCQkgLAogICAgaW50IAkJICwKICAgIGludCAJCSAsCiAgICBQ
b3NpdGlvbioJCSAsCiAgICBQb3NpdGlvbioJCSAKCik7CgpleHRlcm4gS2V5U3ltKiBYdEdldEtl
eXN5bVRhYmxlKAoKICAgIERpc3BsYXkqCQkgLAogICAgS2V5Q29kZSoJCSAsCiAgICBpbnQqCQkg
CgopOwoKZXh0ZXJuIHZvaWQgWHRLZXlzeW1Ub0tleWNvZGVMaXN0KAoKICAgIERpc3BsYXkqCQkg
LAogICAgS2V5U3ltIAkJICwKICAgIEtleUNvZGUqKgkJICwKICAgIENhcmRpbmFsKgkJIAoKKTsK
CmV4dGVybiB2b2lkIFh0U3RyaW5nQ29udmVyc2lvbldhcm5pbmcoICAKCiAgICBjb25zdCAgY2hh
ciogCSAsCiAgICBjb25zdCAgY2hhciogCSAKCik7CgpleHRlcm4gdm9pZCBYdERpc3BsYXlTdHJp
bmdDb252ZXJzaW9uV2FybmluZygKCiAgICBEaXNwbGF5KgkgCSAsCiAgICBjb25zdCAgY2hhciog
CSAsCiAgICBjb25zdCAgY2hhciogCSAKCik7CgoKZXh0ZXJuICBYdENvbnZlcnRBcmdSZWMgY29u
c3QgY29sb3JDb252ZXJ0QXJnc1tdOwpleHRlcm4gIFh0Q29udmVydEFyZ1JlYyBjb25zdCBzY3Jl
ZW5Db252ZXJ0QXJnW107CgoKCgoKZXh0ZXJuIHZvaWQgWHRBcHBBZGRDb252ZXJ0ZXIoICAKCiAg
ICBYdEFwcENvbnRleHQJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIGNvbnN0ICBjaGFyKiAJ
ICwKICAgIFh0Q29udmVydGVyIAkgLAogICAgWHRDb252ZXJ0QXJnTGlzdAkgLAogICAgQ2FyZGlu
YWwgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRBZGRDb252ZXJ0ZXIoICAKCiAgICBjb25zdCAgY2hh
ciogCSAsCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgWHRDb252ZXJ0ZXIgCSAsCiAgICBYdENv
bnZlcnRBcmdMaXN0IAkgLAogICAgQ2FyZGluYWwgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRU
eXBlQ29udmVydGVyKAoKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBjb25zdCAgY2hhciogIAkg
LAogICAgWHRUeXBlQ29udmVydGVyIAkgLAogICAgWHRDb252ZXJ0QXJnTGlzdCAJICwKICAgIENh
cmRpbmFsIAkJICwKICAgIFh0Q2FjaGVUeXBlIAkgLAogICAgWHREZXN0cnVjdG9yIAkgCgopOwoK
ZXh0ZXJuIHZvaWQgWHRBcHBTZXRUeXBlQ29udmVydGVyKAoKICAgIFh0QXBwQ29udGV4dCAJICwK
ICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgWHRUeXBlQ29u
dmVydGVyIAkgLAogICAgWHRDb252ZXJ0QXJnTGlzdCAJICwKICAgIENhcmRpbmFsIAkJICwKICAg
IFh0Q2FjaGVUeXBlIAkgLAogICAgWHREZXN0cnVjdG9yIAkgCgopOwoKZXh0ZXJuIHZvaWQgWHRD
b252ZXJ0KCAgCgogICAgV2lkZ2V0IAkJICwKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBYcm1W
YWx1ZSoJCSAsCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgWHJtVmFsdWUqCQkgCgopOwoKZXh0
ZXJuIHZvaWQgWHREaXJlY3RDb252ZXJ0KCAgCgogICAgWHRDb252ZXJ0ZXIgCSAsCiAgICBYcm1W
YWx1ZVB0ciAJICwKICAgIENhcmRpbmFsIAkJICwKICAgIFhybVZhbHVlUHRyIAkgLAogICAgWHJt
VmFsdWUqCQkgCgopOwoKIAoKCgoKCmV4dGVybiBYdFRyYW5zbGF0aW9ucyBYdFBhcnNlVHJhbnNs
YXRpb25UYWJsZSgKCiAgICBjb25zdCAgY2hhciogCSAKCik7CgpleHRlcm4gWHRBY2NlbGVyYXRv
cnMgWHRQYXJzZUFjY2VsZXJhdG9yVGFibGUoCgogICAgY29uc3QgIGNoYXIqIAkgCgopOwoKZXh0
ZXJuIHZvaWQgWHRPdmVycmlkZVRyYW5zbGF0aW9ucygKCiAgICBXaWRnZXQgCQkgLAogICAgWHRU
cmFuc2xhdGlvbnMgCSAKCik7CgpleHRlcm4gdm9pZCBYdEF1Z21lbnRUcmFuc2xhdGlvbnMoCgog
ICAgV2lkZ2V0IAkJICwKICAgIFh0VHJhbnNsYXRpb25zIAkgCgopOwoKZXh0ZXJuIHZvaWQgWHRJ
bnN0YWxsQWNjZWxlcmF0b3JzKAoKICAgIFdpZGdldCAJCSAsCiAgICBXaWRnZXQJCSAKCik7Cgpl
eHRlcm4gdm9pZCBYdEluc3RhbGxBbGxBY2NlbGVyYXRvcnMoCgogICAgV2lkZ2V0IAkJICwKICAg
IFdpZGdldAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0VW5pbnN0YWxsVHJhbnNsYXRpb25zKAoKICAg
IFdpZGdldCAJCSAKCik7CgpleHRlcm4gdm9pZCBYdEFwcEFkZEFjdGlvbnMoCgogICAgWHRBcHBD
b250ZXh0IAkgLAogICAgWHRBY3Rpb25MaXN0IAkgLAogICAgQ2FyZGluYWwgCQkgCgopOwoKZXh0
ZXJuIHZvaWQgWHRBZGRBY3Rpb25zKCAgCgogICAgWHRBY3Rpb25MaXN0IAkgLAogICAgQ2FyZGlu
YWwgCQkgCgopOwoKZXh0ZXJuIFh0QWN0aW9uSG9va0lkIFh0QXBwQWRkQWN0aW9uSG9vaygKCiAg
ICBYdEFwcENvbnRleHQgCSAsCiAgICBYdEFjdGlvbkhvb2tQcm9jIAkgLAogICAgWHRQb2ludGVy
IAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlQWN0aW9uSG9vaygKCiAgICBYdEFjdGlvbkhv
b2tJZCAJIAoKKTsKCmV4dGVybiB2b2lkIFh0R2V0QWN0aW9uTGlzdCgKCiAgICBXaWRnZXRDbGFz
cwkJICwKICAgIFh0QWN0aW9uTGlzdCoJICwKICAgIENhcmRpbmFsKgkJIAoKKTsKCmV4dGVybiB2
b2lkIFh0Q2FsbEFjdGlvblByb2MoCgogICAgV2lkZ2V0CQkgLAogICAgY29uc3QgIGNoYXIqIAkg
LAogICAgWEV2ZW50KgkJICwKICAgIFN0cmluZyoJCSAsCiAgICBDYXJkaW5hbAkJIAoKKTsKCmV4
dGVybiB2b2lkIFh0UmVnaXN0ZXJHcmFiQWN0aW9uKAoKICAgIFh0QWN0aW9uUHJvYyAJICwKICAg
IGludCAgCQkgLAogICAgdW5zaWduZWQgaW50IAkgLAogICAgaW50CQkJICwKICAgIGludAkgCQkg
CgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRNdWx0aUNsaWNrVGltZSgKCiAgICBEaXNwbGF5KgkJICwK
ICAgIGludCAJCSAKCik7CgpleHRlcm4gaW50IFh0R2V0TXVsdGlDbGlja1RpbWUoCgogICAgRGlz
cGxheSoJCSAKCik7CgpleHRlcm4gS2V5U3ltIFh0R2V0QWN0aW9uS2V5c3ltKAoKICAgIFhFdmVu
dCoJCSAsCiAgICBNb2RpZmllcnMqCQkgCgopOwoKIAoKCgoKCmV4dGVybiB2b2lkIFh0VHJhbnNs
YXRlS2V5Y29kZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIHVuc2lnbmVkIGludCAgCQkgLAogICAg
TW9kaWZpZXJzIAkJICwKICAgIE1vZGlmaWVycyoJCSAsCiAgICBLZXlTeW0qCQkgCgopOwoKZXh0
ZXJuIHZvaWQgWHRUcmFuc2xhdGVLZXkoCgogICAgRGlzcGxheSoJCSAsCiAgICB1bnNpZ25lZCBp
bnQgCQkgLAogICAgTW9kaWZpZXJzCQkgLAogICAgTW9kaWZpZXJzKgkJICwKICAgIEtleVN5bSoJ
CSAKCik7CgpleHRlcm4gdm9pZCBYdFNldEtleVRyYW5zbGF0b3IoCgogICAgRGlzcGxheSoJCSAs
CiAgICBYdEtleVByb2MgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRSZWdpc3RlckNhc2VDb252ZXJ0
ZXIoCgogICAgRGlzcGxheSoJCSAsCiAgICBYdENhc2VQcm9jIAkJICwKICAgIEtleVN5bSAJCSAs
CiAgICBLZXlTeW0gCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRDb252ZXJ0Q2FzZSgKCiAgICBEaXNw
bGF5KgkJICwKICAgIEtleVN5bSAJCSAsCiAgICBLZXlTeW0qCQkgLAogICAgS2V5U3ltKgkJIAoK
KTsKCiAKCgoKCgogCgoKCgpleHRlcm4gdm9pZCBYdEFkZEV2ZW50SGFuZGxlcigKCiAgICBXaWRn
ZXQgCQkgLAogICAgRXZlbnRNYXNrIAkJICwKICAgIGludCAgCQkgLAogICAgWHRFdmVudEhhbmRs
ZXIgCSAsCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRSZW1vdmVFdmVudEhh
bmRsZXIoCgogICAgV2lkZ2V0IAkJICwKICAgIEV2ZW50TWFzayAJCSAsCiAgICBpbnQgIAkJICwK
ICAgIFh0RXZlbnRIYW5kbGVyIAkgLAogICAgWHRQb2ludGVyIAkJIAoKKTsKCmV4dGVybiB2b2lk
IFh0QWRkUmF3RXZlbnRIYW5kbGVyKAoKICAgIFdpZGdldCAJCSAsCiAgICBFdmVudE1hc2sgCQkg
LAogICAgaW50ICAJCSAsCiAgICBYdEV2ZW50SGFuZGxlciAJICwKICAgIFh0UG9pbnRlciAJCSAK
Cik7CgpleHRlcm4gdm9pZCBYdFJlbW92ZVJhd0V2ZW50SGFuZGxlcigKCiAgICBXaWRnZXQgCQkg
LAogICAgRXZlbnRNYXNrIAkJICwKICAgIGludCAgCQkgLAogICAgWHRFdmVudEhhbmRsZXIgCSAs
CiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRJbnNlcnRFdmVudEhhbmRsZXIo
CgogICAgV2lkZ2V0IAkJICwKICAgIEV2ZW50TWFzayAJCSAsCiAgICBpbnQgIAkJICwKICAgIFh0
RXZlbnRIYW5kbGVyIAkgLAogICAgWHRQb2ludGVyIAkJICwKICAgIFh0TGlzdFBvc2l0aW9uIAkg
CgopOwoKZXh0ZXJuIHZvaWQgWHRJbnNlcnRSYXdFdmVudEhhbmRsZXIoCgogICAgV2lkZ2V0IAkJ
ICwKICAgIEV2ZW50TWFzayAJCSAsCiAgICBpbnQgIAkJICwKICAgIFh0RXZlbnRIYW5kbGVyIAkg
LAogICAgWHRQb2ludGVyIAkJICwKICAgIFh0TGlzdFBvc2l0aW9uIAkgCgopOwoKZXh0ZXJuIFh0
RXZlbnREaXNwYXRjaFByb2MgWHRTZXRFdmVudERpc3BhdGNoZXIoCgogICAgRGlzcGxheSoJCSAs
CiAgICBpbnQJCQkgLAogICAgWHRFdmVudERpc3BhdGNoUHJvYwkgCgopOwoKZXh0ZXJuIEJvb2xl
YW4gWHREaXNwYXRjaEV2ZW50VG9XaWRnZXQoCgogICAgV2lkZ2V0CQkgLAogICAgWEV2ZW50KgkJ
IAoKKTsKCmV4dGVybiB2b2lkIFh0SW5zZXJ0RXZlbnRUeXBlSGFuZGxlcigKCiAgICBXaWRnZXQJ
CSAsCiAgICBpbnQJCQkgLAogICAgWHRQb2ludGVyCQkgLAogICAgWHRFdmVudEhhbmRsZXIJICwK
ICAgIFh0UG9pbnRlcgkJICwKICAgIFh0TGlzdFBvc2l0aW9uCSAKCik7CgpleHRlcm4gdm9pZCBY
dFJlbW92ZUV2ZW50VHlwZUhhbmRsZXIoCgogICAgV2lkZ2V0CQkgLAogICAgaW50CQkJICwKICAg
IFh0UG9pbnRlcgkJICwKICAgIFh0RXZlbnRIYW5kbGVyCSAsCiAgICBYdFBvaW50ZXIJCSAKCik7
CgpleHRlcm4gRXZlbnRNYXNrIFh0QnVpbGRFdmVudE1hc2soCgogICAgV2lkZ2V0IAkJIAoKKTsK
CmV4dGVybiB2b2lkIFh0UmVnaXN0ZXJFeHRlbnNpb25TZWxlY3RvcigKCiAgICBEaXNwbGF5KgkJ
ICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgWHRFeHRlbnNpb25TZWxlY3RQcm9jICAs
CiAgICBYdFBvaW50ZXIJCSAKCik7CgpleHRlcm4gdm9pZCBYdEFkZEdyYWIoCgogICAgV2lkZ2V0
IAkJICwKICAgIGludCAgCQkgLAogICAgaW50ICAJCSAKCik7CgpleHRlcm4gdm9pZCBYdFJlbW92
ZUdyYWIoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0UHJvY2Vzc0V2ZW50KCAg
CgogICAgWHRJbnB1dE1hc2sgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRBcHBQcm9jZXNzRXZlbnQo
CgogICAgWHRBcHBDb250ZXh0IAkJICwKICAgIFh0SW5wdXRNYXNrIAkJIAoKKTsKCmV4dGVybiB2
b2lkIFh0TWFpbkxvb3AoICAKCiAgICB2b2lkCgopOwoKZXh0ZXJuIHZvaWQgWHRBcHBNYWluTG9v
cCgKCiAgICBYdEFwcENvbnRleHQgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRBZGRFeHBvc3VyZVRv
UmVnaW9uKAoKICAgIFhFdmVudCoJCSAsCiAgICBSZWdpb24gCQkgCgopOwoKZXh0ZXJuIHZvaWQg
WHRTZXRLZXlib2FyZEZvY3VzKAoKICAgIFdpZGdldAkJICwKICAgIFdpZGdldCAJCSAKCik7Cgpl
eHRlcm4gV2lkZ2V0IFh0R2V0S2V5Ym9hcmRGb2N1c1dpZGdldCgKCiAgICBXaWRnZXQJCSAKCik7
CgpleHRlcm4gWEV2ZW50KiBYdExhc3RFdmVudFByb2Nlc3NlZCgKCiAgICBEaXNwbGF5KgkJIAoK
KTsKCmV4dGVybiBUaW1lIFh0TGFzdFRpbWVzdGFtcFByb2Nlc3NlZCgKCiAgICBEaXNwbGF5KgkJ
IAoKKTsKCiAKCgoKCgpleHRlcm4gWHRJbnRlcnZhbElkIFh0QWRkVGltZU91dCggIAoKICAgIHVu
c2lnbmVkIGxvbmcgCSAsCiAgICBYdFRpbWVyQ2FsbGJhY2tQcm9jICAsCiAgICBYdFBvaW50ZXIg
CQkgCgopOwoKZXh0ZXJuIFh0SW50ZXJ2YWxJZCBYdEFwcEFkZFRpbWVPdXQoCgogICAgWHRBcHBD
b250ZXh0IAkgLAogICAgdW5zaWduZWQgbG9uZyAJICwKICAgIFh0VGltZXJDYWxsYmFja1Byb2Mg
ICwKICAgIFh0UG9pbnRlciAJCSAKCik7CgpleHRlcm4gdm9pZCBYdFJlbW92ZVRpbWVPdXQoCgog
ICAgWHRJbnRlcnZhbElkIAkgCgopOwoKZXh0ZXJuIFh0SW5wdXRJZCBYdEFkZElucHV0KCAgCgog
ICAgaW50IAkJICwKICAgIFh0UG9pbnRlciAJCSAsCiAgICBYdElucHV0Q2FsbGJhY2tQcm9jICAs
CiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIFh0SW5wdXRJZCBYdEFwcEFkZElucHV0KAoK
ICAgIFh0QXBwQ29udGV4dCAgICAgICAJICwKICAgIGludCAJCSAsCiAgICBYdFBvaW50ZXIgCQkg
LAogICAgWHRJbnB1dENhbGxiYWNrUHJvYyAgLAogICAgWHRQb2ludGVyIAkJIAoKKTsKCmV4dGVy
biB2b2lkIFh0UmVtb3ZlSW5wdXQoCgogICAgWHRJbnB1dElkIAkJIAoKKTsKCmV4dGVybiBYdFNp
Z25hbElkIFh0QXBwQWRkU2lnbmFsKAoKICAgIFh0QXBwQ29udGV4dCAgICAgICAJICwKICAgIFh0
U2lnbmFsQ2FsbGJhY2tQcm9jICAsCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQg
WHRSZW1vdmVTaWduYWwoCgogICAgWHRTaWduYWxJZCAJCSAKCik7CgpleHRlcm4gdm9pZCBYdE5v
dGljZVNpZ25hbCgKCiAgICBYdFNpZ25hbElkCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHROZXh0RXZl
bnQoICAKCiAgICBYRXZlbnQqIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0QXBwTmV4dEV2ZW50KAoK
ICAgIFh0QXBwQ29udGV4dCAJICwKICAgIFhFdmVudCoJCSAKCik7CgoKCgoKCgpleHRlcm4gWHRJ
bnB1dE1hc2sgWHRQZW5kaW5nKCAgCgogICAgdm9pZAoKKTsKCmV4dGVybiBYdElucHV0TWFzayBY
dEFwcFBlbmRpbmcoCgogICAgWHRBcHBDb250ZXh0IAkgCgopOwoKZXh0ZXJuIFh0QmxvY2tIb29r
SWQgWHRBcHBBZGRCbG9ja0hvb2soCgogICAgWHRBcHBDb250ZXh0IAkgLAogICAgWHRCbG9ja0hv
b2tQcm9jIAkgLAogICAgWHRQb2ludGVyIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlQmxv
Y2tIb29rKAoKICAgIFh0QmxvY2tIb29rSWQgCSAKCik7CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgpleHRlcm4gdm9pZCBYdFJlYWxpemVXaWRnZXQoCgogICAgV2lkZ2V0IAkJIAoKKTsK
CnZvaWQgWHRVbnJlYWxpemVXaWRnZXQoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiB2b2lk
IFh0RGVzdHJveVdpZGdldCgKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRT
ZW5zaXRpdmUoCgogICAgV2lkZ2V0IAkJICwKICAgIGludCAgCQkgCgopOwoKZXh0ZXJuIHZvaWQg
WHRTZXRNYXBwZWRXaGVuTWFuYWdlZCgKCiAgICBXaWRnZXQgCQkgLAogICAgaW50ICAJCSAKCik7
CgpleHRlcm4gV2lkZ2V0IFh0TmFtZVRvV2lkZ2V0KAoKICAgIFdpZGdldCAJCSAsCiAgICBjb25z
dCAgY2hhciogCSAKCik7CgpleHRlcm4gV2lkZ2V0IFh0V2luZG93VG9XaWRnZXQoCgogICAgRGlz
cGxheSoJCSAsCiAgICBXaW5kb3cgCQkgCgopOwoKZXh0ZXJuIFh0UG9pbnRlciBYdEdldENsYXNz
RXh0ZW5zaW9uKAoKICAgIFdpZGdldENsYXNzCQkgLAogICAgQ2FyZGluYWwJCSAsCiAgICBYcm1R
dWFyawkJICwKICAgIGxvbmcJCSAsCiAgICBDYXJkaW5hbAkJIAoKKTsKCiAKCgoKCgoKCgoKZXh0
ZXJuIEFyZ0xpc3QgWHRNZXJnZUFyZ0xpc3RzKAoKICAgIEFyZ0xpc3QgCQkgLAogICAgQ2FyZGlu
YWwgCQkgLAogICAgQXJnTGlzdCAJCSAsCiAgICBDYXJkaW5hbCAJCSAKCik7CgogCgoKCgoKCgoK
ZXh0ZXJuIFh0VmFyQXJnc0xpc3QgWHRWYUNyZWF0ZUFyZ3NMaXN0KAoKICAgIFh0UG9pbnRlcgkJ
ICwgLi4uCgopOwoKIAoKCgoKCgoKIAoKZXh0ZXJuIERpc3BsYXkgKlh0RGlzcGxheSgKCiAgICBX
aWRnZXQgCQkgCgopOwoKZXh0ZXJuIERpc3BsYXkgKlh0RGlzcGxheU9mT2JqZWN0KAoKICAgIFdp
ZGdldCAJCSAKCik7CgpleHRlcm4gU2NyZWVuICpYdFNjcmVlbigKCiAgICBXaWRnZXQgCQkgCgop
OwoKZXh0ZXJuIFNjcmVlbiAqWHRTY3JlZW5PZk9iamVjdCgKCiAgICBXaWRnZXQgCQkgCgopOwoK
ZXh0ZXJuIFdpbmRvdyBYdFdpbmRvdygKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIFdpbmRv
dyBYdFdpbmRvd09mT2JqZWN0KAoKICAgIFdpZGdldCAJCSAKCik7CgpleHRlcm4gU3RyaW5nIFh0
TmFtZSgKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIFdpZGdldENsYXNzIFh0U3VwZXJjbGFz
cygKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIFdpZGdldENsYXNzIFh0Q2xhc3MoCgogICAg
V2lkZ2V0IAkJIAoKKTsKCmV4dGVybiBXaWRnZXQgWHRQYXJlbnQoCgogICAgV2lkZ2V0IAkJIAoK
KTsKCgoKCgoKCmV4dGVybiB2b2lkIFh0QWRkQ2FsbGJhY2soCgogICAgV2lkZ2V0IAkJICwKICAg
IGNvbnN0ICBjaGFyKiAgCSAsCiAgICBYdENhbGxiYWNrUHJvYyAJICwKICAgIFh0UG9pbnRlciAJ
CSAKCik7CgpleHRlcm4gdm9pZCBYdFJlbW92ZUNhbGxiYWNrKAoKICAgIFdpZGdldCAJCSAsCiAg
ICBjb25zdCAgY2hhciogIAkgLAogICAgWHRDYWxsYmFja1Byb2MgCSAsCiAgICBYdFBvaW50ZXIg
CQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRBZGRDYWxsYmFja3MoCgogICAgV2lkZ2V0IAkJICwKICAg
IGNvbnN0ICBjaGFyKiAJICwKICAgIFh0Q2FsbGJhY2tMaXN0IAkgCgopOwoKZXh0ZXJuIHZvaWQg
WHRSZW1vdmVDYWxsYmFja3MoCgogICAgV2lkZ2V0IAkJICwKICAgIGNvbnN0ICBjaGFyKiAgCSAs
CiAgICBYdENhbGxiYWNrTGlzdCAJIAoKKTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlQWxsQ2FsbGJh
Y2tzKAoKICAgIFdpZGdldCAJCSAsCiAgICBjb25zdCAgY2hhciogIAkgCgopOwoKCmV4dGVybiB2
b2lkIFh0Q2FsbENhbGxiYWNrcygKCiAgICBXaWRnZXQgCQkgLAogICAgY29uc3QgIGNoYXIqICAJ
ICwKICAgIFh0UG9pbnRlciAJCSAKCik7CgpleHRlcm4gdm9pZCBYdENhbGxDYWxsYmFja0xpc3Qo
CgogICAgV2lkZ2V0CQkgLAogICAgWHRDYWxsYmFja0xpc3QgCSAsCiAgICBYdFBvaW50ZXIgCQkg
CgopOwoKZXh0ZXJuIFh0Q2FsbGJhY2tTdGF0dXMgWHRIYXNDYWxsYmFja3MoCgogICAgV2lkZ2V0
IAkJICwKICAgIGNvbnN0ICBjaGFyKiAgCSAKCik7CgogCgoKCgoKCmV4dGVybiBYdEdlb21ldHJ5
UmVzdWx0IFh0TWFrZUdlb21ldHJ5UmVxdWVzdCgKCiAgICBXaWRnZXQgCQkgLAogICAgWHRXaWRn
ZXRHZW9tZXRyeSoJICwKICAgIFh0V2lkZ2V0R2VvbWV0cnkqCSAKCik7CgpleHRlcm4gWHRHZW9t
ZXRyeVJlc3VsdCBYdFF1ZXJ5R2VvbWV0cnkoCgogICAgV2lkZ2V0IAkJICwKICAgIFh0V2lkZ2V0
R2VvbWV0cnkqCSAsCiAgICBYdFdpZGdldEdlb21ldHJ5KgkgCgopOwoKZXh0ZXJuIFdpZGdldCBY
dENyZWF0ZVBvcHVwU2hlbGwoCgogICAgY29uc3QgIGNoYXIqIAkgLAogICAgV2lkZ2V0Q2xhc3Mg
CSAsCiAgICBXaWRnZXQgCQkgLAogICAgQXJnTGlzdCAJCSAsCiAgICBDYXJkaW5hbCAJCSAKCik7
CgpleHRlcm4gV2lkZ2V0IFh0VmFDcmVhdGVQb3B1cFNoZWxsKAoKICAgIGNvbnN0ICBjaGFyKiAJ
ICwKICAgIFdpZGdldENsYXNzCQkgLAogICAgV2lkZ2V0CQkgLAogICAgLi4uCgopOwoKZXh0ZXJu
IHZvaWQgWHRQb3B1cCgKCiAgICBXaWRnZXQgCQkgLAogICAgWHRHcmFiS2luZCAJCSAKCik7Cgpl
eHRlcm4gdm9pZCBYdFBvcHVwU3ByaW5nTG9hZGVkKAoKICAgIFdpZGdldCAJCSAKCik7CgpleHRl
cm4gdm9pZCBYdENhbGxiYWNrTm9uZSgKCiAgICBXaWRnZXQgCQkgLAogICAgWHRQb2ludGVyIAkJ
ICwKICAgIFh0UG9pbnRlciAJCSAKCik7CgpleHRlcm4gdm9pZCBYdENhbGxiYWNrTm9uZXhjbHVz
aXZlKAoKICAgIFdpZGdldCAJCSAsCiAgICBYdFBvaW50ZXIgCQkgLAogICAgWHRQb2ludGVyIAkJ
IAoKKTsKCmV4dGVybiB2b2lkIFh0Q2FsbGJhY2tFeGNsdXNpdmUoCgogICAgV2lkZ2V0IAkJICwK
ICAgIFh0UG9pbnRlciAJCSAsCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRQ
b3Bkb3duKAoKICAgIFdpZGdldCAJCSAKCik7CgpleHRlcm4gdm9pZCBYdENhbGxiYWNrUG9wZG93
bigKCiAgICBXaWRnZXQgCQkgLAogICAgWHRQb2ludGVyIAkJICwKICAgIFh0UG9pbnRlciAJCSAK
Cik7CgpleHRlcm4gdm9pZCBYdE1lbnVQb3B1cEFjdGlvbigKCiAgICBXaWRnZXQgCQkgLAogICAg
WEV2ZW50KgkJICwKICAgIFN0cmluZyoJCSAsCiAgICBDYXJkaW5hbCoJCSAKCik7CgpleHRlcm4g
V2lkZ2V0IFh0Q3JlYXRlV2lkZ2V0KAoKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBXaWRnZXRD
bGFzcyAJICwKICAgIFdpZGdldCAJCSAsCiAgICBBcmdMaXN0IAkJICwKICAgIENhcmRpbmFsIAkJ
IAoKKTsKCmV4dGVybiBXaWRnZXQgWHRDcmVhdGVNYW5hZ2VkV2lkZ2V0KAoKICAgIGNvbnN0ICBj
aGFyKiAgCSAsCiAgICBXaWRnZXRDbGFzcyAJICwKICAgIFdpZGdldCAJCSAsCiAgICBBcmdMaXN0
IAkJICwKICAgIENhcmRpbmFsIAkJIAoKKTsKCmV4dGVybiBXaWRnZXQgWHRWYUNyZWF0ZVdpZGdl
dCgKCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBXaWRnZXRDbGFzcwkJICwKICAgIFdpZGdldAkJ
ICwKICAgIC4uLgoKKTsKCmV4dGVybiBXaWRnZXQgWHRWYUNyZWF0ZU1hbmFnZWRXaWRnZXQoCgog
ICAgY29uc3QgIGNoYXIqIAkgLAogICAgV2lkZ2V0Q2xhc3MJCSAsCiAgICBXaWRnZXQJCSAsCiAg
ICAuLi4KCik7CgpleHRlcm4gV2lkZ2V0IFh0Q3JlYXRlQXBwbGljYXRpb25TaGVsbCggIAoKICAg
IGNvbnN0ICBjaGFyKiAgCSAsCiAgICBXaWRnZXRDbGFzcyAJICwKICAgIEFyZ0xpc3QgCQkgLAog
ICAgQ2FyZGluYWwgCQkgCgopOwoKZXh0ZXJuIFdpZGdldCBYdEFwcENyZWF0ZVNoZWxsKAoKICAg
IGNvbnN0ICBjaGFyKiAJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIFdpZGdldENsYXNzIAkg
LAogICAgRGlzcGxheSoJCSAsCiAgICBBcmdMaXN0IAkJICwKICAgIENhcmRpbmFsIAkJIAoKKTsK
CmV4dGVybiBXaWRnZXQgWHRWYUFwcENyZWF0ZVNoZWxsKAoKICAgIGNvbnN0ICBjaGFyKiAJICwK
ICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIFdpZGdldENsYXNzCQkgLAogICAgRGlzcGxheSoJCSAs
CiAgICAuLi4KCik7CgogCgoKCgoKZXh0ZXJuIHZvaWQgWHRUb29sa2l0SW5pdGlhbGl6ZSgKCiAg
ICB2b2lkCgopOwoKZXh0ZXJuIFh0TGFuZ3VhZ2VQcm9jIFh0U2V0TGFuZ3VhZ2VQcm9jKAoKICAg
IFh0QXBwQ29udGV4dAkgLAogICAgWHRMYW5ndWFnZVByb2MJICwKICAgIFh0UG9pbnRlcgkJIAoK
KTsKCmV4dGVybiB2b2lkIFh0RGlzcGxheUluaXRpYWxpemUoCgogICAgWHRBcHBDb250ZXh0IAkg
LAogICAgRGlzcGxheSoJCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciog
CSAsCiAgICBYcm1PcHRpb25EZXNjUmVjKiAJICwKICAgIENhcmRpbmFsIAkJICwKICAgIGludCoJ
CSAsCiAgICBjaGFyKioJCSAKCik7CgpleHRlcm4gV2lkZ2V0IFh0T3BlbkFwcGxpY2F0aW9uKAoK
ICAgIFh0QXBwQ29udGV4dCoJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIFhybU9wdGlvbkRl
c2NMaXN0IAkgLAogICAgQ2FyZGluYWwgCQkgLAogICAgaW50KgkJICwKICAgIFN0cmluZyoJCSAs
CiAgICBTdHJpbmcqCQkgLAogICAgV2lkZ2V0Q2xhc3MJCSAsCiAgICBBcmdMaXN0IAkJICwKICAg
IENhcmRpbmFsIAkJIAoKKTsKCmV4dGVybiBXaWRnZXQgWHRWYU9wZW5BcHBsaWNhdGlvbigKCiAg
ICBYdEFwcENvbnRleHQqCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBYcm1PcHRpb25EZXNj
TGlzdAkgLAogICAgQ2FyZGluYWwJCSAsCiAgICBpbnQqCQkgLAogICAgU3RyaW5nKgkJICwKICAg
IFN0cmluZyoJCSAsCiAgICBXaWRnZXRDbGFzcwkJICwKICAgIC4uLgoKKTsKCmV4dGVybiBXaWRn
ZXQgWHRBcHBJbml0aWFsaXplKCAgCgogICAgWHRBcHBDb250ZXh0KgkgLAogICAgY29uc3QgIGNo
YXIqIAkgLAogICAgWHJtT3B0aW9uRGVzY0xpc3QgCSAsCiAgICBDYXJkaW5hbCAJCSAsCiAgICBp
bnQqCQkgLAogICAgU3RyaW5nKgkJICwKICAgIFN0cmluZyoJCSAsCiAgICBBcmdMaXN0IAkJICwK
ICAgIENhcmRpbmFsIAkJIAoKKTsKCmV4dGVybiBXaWRnZXQgWHRWYUFwcEluaXRpYWxpemUoICAK
CiAgICBYdEFwcENvbnRleHQqCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBYcm1PcHRpb25E
ZXNjTGlzdAkgLAogICAgQ2FyZGluYWwJCSAsCiAgICBpbnQqCQkgLAogICAgU3RyaW5nKgkJICwK
ICAgIFN0cmluZyoJCSAsCiAgICAuLi4KCik7CgpleHRlcm4gV2lkZ2V0IFh0SW5pdGlhbGl6ZSgg
IAoKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgWHJtT3B0
aW9uRGVzY1JlYyogCSAsCiAgICBDYXJkaW5hbCAJCSAsCiAgICBpbnQqCQkgLAogICAgY2hhcioq
CQkgCgopOwoKZXh0ZXJuIERpc3BsYXkgKlh0T3BlbkRpc3BsYXkoCgogICAgWHRBcHBDb250ZXh0
IAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3Qg
IGNoYXIqIAkgLAogICAgWHJtT3B0aW9uRGVzY1JlYyoJICwKICAgIENhcmRpbmFsIAkJICwKICAg
IGludCoJCSAsCiAgICBjaGFyKioJCSAKCik7CgpleHRlcm4gWHRBcHBDb250ZXh0IFh0Q3JlYXRl
QXBwbGljYXRpb25Db250ZXh0KAoKICAgIHZvaWQKCik7CgpleHRlcm4gdm9pZCBYdEFwcFNldEZh
bGxiYWNrUmVzb3VyY2VzKAoKICAgIFh0QXBwQ29udGV4dCAJICwKICAgIFN0cmluZyoJCSAKCik7
CgpleHRlcm4gdm9pZCBYdERlc3Ryb3lBcHBsaWNhdGlvbkNvbnRleHQoCgogICAgWHRBcHBDb250
ZXh0IAkgCgopOwoKZXh0ZXJuIHZvaWQgWHRJbml0aWFsaXplV2lkZ2V0Q2xhc3MoCgogICAgV2lk
Z2V0Q2xhc3MgCSAKCik7CgpleHRlcm4gWHRBcHBDb250ZXh0IFh0V2lkZ2V0VG9BcHBsaWNhdGlv
bkNvbnRleHQoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiBYdEFwcENvbnRleHQgWHREaXNw
bGF5VG9BcHBsaWNhdGlvbkNvbnRleHQoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gWHJt
RGF0YWJhc2UgWHREYXRhYmFzZSgKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBYcm1EYXRh
YmFzZSBYdFNjcmVlbkRhdGFiYXNlKAoKICAgIFNjcmVlbioJCSAKCik7CgpleHRlcm4gdm9pZCBY
dENsb3NlRGlzcGxheSgKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiB2b2lkIFh0R2V0QXBw
bGljYXRpb25SZXNvdXJjZXMoCgogICAgV2lkZ2V0IAkJICwKICAgIFh0UG9pbnRlciAJCSAsCiAg
ICBYdFJlc291cmNlTGlzdCAJICwKICAgIENhcmRpbmFsIAkJICwKICAgIEFyZ0xpc3QgCQkgLAog
ICAgQ2FyZGluYWwgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRWYUdldEFwcGxpY2F0aW9uUmVzb3Vy
Y2VzKAoKICAgIFdpZGdldAkJICwKICAgIFh0UG9pbnRlcgkJICwKICAgIFh0UmVzb3VyY2VMaXN0
CSAsCiAgICBDYXJkaW5hbAkJICwKICAgIC4uLgoKKTsKCmV4dGVybiB2b2lkIFh0R2V0U3VicmVz
b3VyY2VzKAoKICAgIFdpZGdldCAJCSAsCiAgICBYdFBvaW50ZXIgCQkgLAogICAgY29uc3QgIGNo
YXIqICAJICwKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBYdFJlc291cmNlTGlzdCAJICwKICAg
IENhcmRpbmFsIAkJICwKICAgIEFyZ0xpc3QgCQkgLAogICAgQ2FyZGluYWwgCQkgCgopOwoKZXh0
ZXJuIHZvaWQgWHRWYUdldFN1YnJlc291cmNlcygKCiAgICBXaWRnZXQJCSAsCiAgICBYdFBvaW50
ZXIJCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBYdFJl
c291cmNlTGlzdAkgLAogICAgQ2FyZGluYWwJCSAsCiAgICAuLi4KCik7CgpleHRlcm4gdm9pZCBY
dFNldFZhbHVlcygKCiAgICBXaWRnZXQgCQkgLAogICAgQXJnTGlzdCAJCSAsCiAgICBDYXJkaW5h
bCAJCSAKCik7CgpleHRlcm4gdm9pZCBYdFZhU2V0VmFsdWVzKAoKICAgIFdpZGdldAkJICwKICAg
IC4uLgoKKTsKCmV4dGVybiB2b2lkIFh0R2V0VmFsdWVzKAoKICAgIFdpZGdldCAJCSAsCiAgICBB
cmdMaXN0IAkJICwKICAgIENhcmRpbmFsIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0VmFHZXRWYWx1
ZXMoCgogICAgV2lkZ2V0CQkgLAogICAgLi4uCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRTdWJ2YWx1
ZXMoCgogICAgWHRQb2ludGVyIAkJICwKICAgIFh0UmVzb3VyY2VMaXN0IAkgLAogICAgQ2FyZGlu
YWwgCQkgLAogICAgQXJnTGlzdCAJCSAsCiAgICBDYXJkaW5hbCAJCSAKCik7CgpleHRlcm4gdm9p
ZCBYdFZhU2V0U3VidmFsdWVzKAoKICAgIFh0UG9pbnRlcgkJICwKICAgIFh0UmVzb3VyY2VMaXN0
CSAsCiAgICBDYXJkaW5hbAkJICwKICAgIC4uLgoKKTsKCmV4dGVybiB2b2lkIFh0R2V0U3VidmFs
dWVzKAoKICAgIFh0UG9pbnRlciAJCSAsCiAgICBYdFJlc291cmNlTGlzdCAJICwKICAgIENhcmRp
bmFsIAkJICwKICAgIEFyZ0xpc3QgCQkgLAogICAgQ2FyZGluYWwgCQkgCgopOwoKZXh0ZXJuIHZv
aWQgWHRWYUdldFN1YnZhbHVlcygKCiAgICBYdFBvaW50ZXIJCSAsCiAgICBYdFJlc291cmNlTGlz
dAkgLAogICAgQ2FyZGluYWwJCSAsCiAgICAuLi4KCik7CgpleHRlcm4gdm9pZCBYdEdldFJlc291
cmNlTGlzdCgKCiAgICBXaWRnZXRDbGFzcyAJICwKICAgIFh0UmVzb3VyY2VMaXN0KgkgLAogICAg
Q2FyZGluYWwqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRHZXRDb25zdHJhaW50UmVzb3VyY2VMaXN0
KAoKICAgIFdpZGdldENsYXNzIAkgLAogICAgWHRSZXNvdXJjZUxpc3QqCSAsCiAgICBDYXJkaW5h
bCoJCSAKCik7CgoKCgoKCgoKCgoKIyAyMDc2ICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL0ludHJp
bnNpYy5oIgoKCgoKCgoKCgoKCgoKIAoKCgoKCnR5cGVkZWYgc3RydWN0IF9YdENoZWNrcG9pbnRU
b2tlblJlYyB7CiAgICBpbnQJCXNhdmVfdHlwZTsKICAgIGludAkJaW50ZXJhY3Rfc3R5bGU7CiAg
ICBCb29sZWFuCXNodXRkb3duOwogICAgQm9vbGVhbglmYXN0OwogICAgQm9vbGVhbgljYW5jZWxf
c2h1dGRvd247CiAgICBpbnQJCXBoYXNlOwogICAgaW50CQlpbnRlcmFjdF9kaWFsb2dfdHlwZTsJ
IAogICAgQm9vbGVhbglyZXF1ZXN0X2NhbmNlbDsJCSAKICAgIEJvb2xlYW4JcmVxdWVzdF9uZXh0
X3BoYXNlOwkgCiAgICBCb29sZWFuCXNhdmVfc3VjY2VzczsJCSAKICAgIGludAkJdHlwZTsJCSAK
ICAgIFdpZGdldAl3aWRnZXQ7CQkgCn0gWHRDaGVja3BvaW50VG9rZW5SZWMsICpYdENoZWNrcG9p
bnRUb2tlbjsKClh0Q2hlY2twb2ludFRva2VuIFh0U2Vzc2lvbkdldFRva2VuKAoKICAgIFdpZGdl
dAkJIAoKKTsKCnZvaWQgWHRTZXNzaW9uUmV0dXJuVG9rZW4oCgogICAgWHRDaGVja3BvaW50VG9r
ZW4JIAoKKTsKCiAKCgoKCgpleHRlcm4gWHRFcnJvck1zZ0hhbmRsZXIgWHRBcHBTZXRFcnJvck1z
Z0hhbmRsZXIoCgogICAgWHRBcHBDb250ZXh0IAkgLAogICAgWHRFcnJvck1zZ0hhbmRsZXIgCSAK
Cik7CgpleHRlcm4gdm9pZCBYdFNldEVycm9yTXNnSGFuZGxlciggIAoKICAgIFh0RXJyb3JNc2dI
YW5kbGVyIAkgCgopOwoKZXh0ZXJuIFh0RXJyb3JNc2dIYW5kbGVyIFh0QXBwU2V0V2FybmluZ01z
Z0hhbmRsZXIoCgogICAgWHRBcHBDb250ZXh0IAkgLAogICAgWHRFcnJvck1zZ0hhbmRsZXIgCSAK
Cik7CgpleHRlcm4gdm9pZCBYdFNldFdhcm5pbmdNc2dIYW5kbGVyKCAgCgogICAgWHRFcnJvck1z
Z0hhbmRsZXIgCSAKCik7CgpleHRlcm4gdm9pZCBYdEFwcEVycm9yTXNnKAoKICAgIFh0QXBwQ29u
dGV4dCAJICwKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBj
b25zdCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBTdHJpbmcqCQkgLAogICAg
Q2FyZGluYWwqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRFcnJvck1zZyggIAoKICAgIGNvbnN0ICBj
aGFyKiAgCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBj
b25zdCAgY2hhciogCSAsCiAgICBTdHJpbmcqCQkgLAogICAgQ2FyZGluYWwqCQkgCgopOwoKZXh0
ZXJuIHZvaWQgWHRBcHBXYXJuaW5nTXNnKAoKICAgIFh0QXBwQ29udGV4dCAJICwKICAgIGNvbnN0
ICBjaGFyKiAgCSAsCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgY29uc3QgIGNoYXIqICAJICwK
ICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBTdHJpbmcqCQkgLAogICAgQ2FyZGluYWwqCQkgCgop
OwoKZXh0ZXJuIHZvaWQgWHRXYXJuaW5nTXNnKCAgCgogICAgY29uc3QgIGNoYXIqIAkgLAogICAg
Y29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIqIAkg
LAogICAgU3RyaW5nKgkJICwKICAgIENhcmRpbmFsKgkJIAoKKTsKCmV4dGVybiBYdEVycm9ySGFu
ZGxlciBYdEFwcFNldEVycm9ySGFuZGxlcigKCiAgICBYdEFwcENvbnRleHQgCSAsCiAgICBYdEVy
cm9ySGFuZGxlciAJIAoKKTsKCmV4dGVybiB2b2lkIFh0U2V0RXJyb3JIYW5kbGVyKCAgCgogICAg
WHRFcnJvckhhbmRsZXIgCSAKCik7CgpleHRlcm4gWHRFcnJvckhhbmRsZXIgWHRBcHBTZXRXYXJu
aW5nSGFuZGxlcigKCiAgICBYdEFwcENvbnRleHQgCSAsCiAgICBYdEVycm9ySGFuZGxlciAJIAoK
KTsKCmV4dGVybiB2b2lkIFh0U2V0V2FybmluZ0hhbmRsZXIoICAKCiAgICBYdEVycm9ySGFuZGxl
ciAJIAoKKTsKCmV4dGVybiB2b2lkIFh0QXBwRXJyb3IoCgogICAgWHRBcHBDb250ZXh0IAkgLAog
ICAgY29uc3QgIGNoYXIqIAkgCgopOwoKZXh0ZXJuIHZvaWQgWHRFcnJvciggIAoKICAgIGNvbnN0
ICBjaGFyKiAJIAoKKTsKCmV4dGVybiB2b2lkIFh0QXBwV2FybmluZygKCiAgICBYdEFwcENvbnRl
eHQgCSAsCiAgICBjb25zdCAgY2hhciogCSAKCik7CgpleHRlcm4gdm9pZCBYdFdhcm5pbmcoICAK
CiAgICBjb25zdCAgY2hhciogCSAKCik7CgpleHRlcm4gWHJtRGF0YWJhc2UgKlh0QXBwR2V0RXJy
b3JEYXRhYmFzZSgKCiAgICBYdEFwcENvbnRleHQgCSAKCik7CgpleHRlcm4gWHJtRGF0YWJhc2Ug
Klh0R2V0RXJyb3JEYXRhYmFzZSggIAoKICAgIHZvaWQKCik7CgpleHRlcm4gdm9pZCBYdEFwcEdl
dEVycm9yRGF0YWJhc2VUZXh0KAoKICAgIFh0QXBwQ29udGV4dCAJICwKICAgIGNvbnN0ICBjaGFy
KiAJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIGNvbnN0
ICBjaGFyKiAgCSAsCiAgICBTdHJpbmcgCQkgLAogICAgaW50IAkJICwKICAgIFhybURhdGFiYXNl
IAkgCgopOwoKZXh0ZXJuIHZvaWQgWHRHZXRFcnJvckRhdGFiYXNlVGV4dCggIAoKICAgIGNvbnN0
ICBjaGFyKiAJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAg
IGNvbnN0ICBjaGFyKiAgCSAsCiAgICBTdHJpbmcgCQkgLAogICAgaW50IAkJIAoKKTsKCiAKCgoK
CgpleHRlcm4gY2hhciAqWHRNYWxsb2MoCgogICAgQ2FyZGluYWwgCQkgCgopOwoKZXh0ZXJuIGNo
YXIgKlh0Q2FsbG9jKAoKICAgIENhcmRpbmFsCQkgLAogICAgQ2FyZGluYWwgCQkgCgopOwoKZXh0
ZXJuIGNoYXIgKlh0UmVhbGxvYygKCiAgICBjaGFyKiAJCSAsCiAgICBDYXJkaW5hbCAJCSAKCik7
CgpleHRlcm4gdm9pZCBYdEZyZWUoCgogICAgY2hhcioJCSAKCik7CgojIDIzNTkgIi91c3IvWDEx
UjYvaW5jbHVkZS9YMTEvSW50cmluc2ljLmgiCgoKCgoKCiAKCgoKCgpleHRlcm4gWHRXb3JrUHJv
Y0lkIFh0QWRkV29ya1Byb2MoICAKCiAgICBYdFdvcmtQcm9jIAkJICwKICAgIFh0UG9pbnRlciAJ
CSAKCik7CgpleHRlcm4gWHRXb3JrUHJvY0lkIFh0QXBwQWRkV29ya1Byb2MoCgogICAgWHRBcHBD
b250ZXh0IAkgLAogICAgWHRXb3JrUHJvYyAJCSAsCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0
ZXJuIHZvaWQgIFh0UmVtb3ZlV29ya1Byb2MoCgogICAgWHRXb3JrUHJvY0lkIAkgCgopOwoKCiAK
CgoKCmV4dGVybiBHQyBYdEdldEdDKAoKICAgIFdpZGdldCAJCSAsCiAgICBYdEdDTWFzayAJCSAs
CiAgICBYR0NWYWx1ZXMqIAkJIAoKKTsKCmV4dGVybiBHQyBYdEFsbG9jYXRlR0MoCgogICAgV2lk
Z2V0IAkJICwKICAgIENhcmRpbmFsCQkgLAogICAgWHRHQ01hc2sgCQkgLAogICAgWEdDVmFsdWVz
KiAJCSAsCiAgICBYdEdDTWFzawkJICwKICAgIFh0R0NNYXNrCQkgCgopOwoKIAoKCgpleHRlcm4g
dm9pZCBYdERlc3Ryb3lHQyggIAoKICAgIEdDIAkJCSAKCik7CgpleHRlcm4gdm9pZCBYdFJlbGVh
c2VHQygKCiAgICBXaWRnZXQgCQkgLAogICAgR0MgCQkJIAoKKTsKCgoKZXh0ZXJuIHZvaWQgWHRB
cHBSZWxlYXNlQ2FjaGVSZWZzKAoKICAgIFh0QXBwQ29udGV4dAkgLAogICAgWHRDYWNoZVJlZioJ
CSAKCik7CgpleHRlcm4gdm9pZCBYdENhbGxiYWNrUmVsZWFzZUNhY2hlUmVmKAoKICAgIFdpZGdl
dCAJCSAsCiAgICBYdFBvaW50ZXIgCQkgLAkgCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJu
IHZvaWQgWHRDYWxsYmFja1JlbGVhc2VDYWNoZVJlZkxpc3QoCgogICAgV2lkZ2V0IAkJICwKICAg
IFh0UG9pbnRlciAJCSAsCSAKICAgIFh0UG9pbnRlciAJCSAKCik7CgpleHRlcm4gdm9pZCBYdFNl
dFdNQ29sb3JtYXBXaW5kb3dzKAoKICAgIFdpZGdldCAJCSAsCiAgICBXaWRnZXQqCQkgLAogICAg
Q2FyZGluYWwJCSAKCik7CgpleHRlcm4gU3RyaW5nIFh0RmluZEZpbGUoCgogICAgY29uc3QgIGNo
YXIqIAkgLAogICAgU3Vic3RpdHV0aW9uCSAsCiAgICBDYXJkaW5hbCAJCSAsCiAgICBYdEZpbGVQ
cmVkaWNhdGUJIAoKKTsKCmV4dGVybiBTdHJpbmcgWHRSZXNvbHZlUGF0aG5hbWUoCgogICAgRGlz
cGxheSoJCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBj
b25zdCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBTdWJzdGl0dXRpb24JICwK
ICAgIENhcmRpbmFsCQkgLAogICAgWHRGaWxlUHJlZGljYXRlIAkgCgopOwoKIAoKCgoKCgogICAg
CmV4dGVybiB2b2lkIFh0RGlzb3duU2VsZWN0aW9uKAoKICAgIFdpZGdldCAJCSAsCiAgICBBdG9t
IAkJICwKICAgIFRpbWUgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRHZXRTZWxlY3Rpb25WYWx1ZSgK
CiAgICBXaWRnZXQgCQkgLAogICAgQXRvbSAJCSAsCiAgICBBdG9tIAkJICwKICAgIFh0U2VsZWN0
aW9uQ2FsbGJhY2tQcm9jICAsCiAgICBYdFBvaW50ZXIgCQkgLAogICAgVGltZSAJCSAKCik7Cgpl
eHRlcm4gdm9pZCBYdEdldFNlbGVjdGlvblZhbHVlcygKCiAgICBXaWRnZXQgCQkgLAogICAgQXRv
bSAJCSAsCiAgICBBdG9tKgkJICwKICAgIGludCAJCSAsCiAgICBYdFNlbGVjdGlvbkNhbGxiYWNr
UHJvYyAgLAogICAgWHRQb2ludGVyKgkJICwKICAgIFRpbWUgCQkgCgopOwoKZXh0ZXJuIHZvaWQg
WHRBcHBTZXRTZWxlY3Rpb25UaW1lb3V0KAoKICAgIFh0QXBwQ29udGV4dCAJICwKICAgIHVuc2ln
bmVkIGxvbmcgCSAKCik7CgpleHRlcm4gdm9pZCBYdFNldFNlbGVjdGlvblRpbWVvdXQoICAKCiAg
ICB1bnNpZ25lZCBsb25nIAkgCgopOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWHRBcHBHZXRTZWxl
Y3Rpb25UaW1lb3V0KAoKICAgIFh0QXBwQ29udGV4dCAJIAoKKTsKCmV4dGVybiB1bnNpZ25lZCBs
b25nIFh0R2V0U2VsZWN0aW9uVGltZW91dCggIAoKICAgIHZvaWQKCik7CgpleHRlcm4gWFNlbGVj
dGlvblJlcXVlc3RFdmVudCAqWHRHZXRTZWxlY3Rpb25SZXF1ZXN0KAoKICAgIFdpZGdldCAJCSAs
CiAgICBBdG9tIAkJICwKICAgIFh0UmVxdWVzdElkIAkgCgopOwoKZXh0ZXJuIHZvaWQgWHRHZXRT
ZWxlY3Rpb25WYWx1ZUluY3JlbWVudGFsKAoKICAgIFdpZGdldCAJCSAsCiAgICBBdG9tIAkJICwK
ICAgIEF0b20gCQkgLAogICAgWHRTZWxlY3Rpb25DYWxsYmFja1Byb2MgICwKICAgIFh0UG9pbnRl
ciAJCSAsCiAgICBUaW1lIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0R2V0U2VsZWN0aW9uVmFsdWVz
SW5jcmVtZW50YWwoCgogICAgV2lkZ2V0IAkJICwKICAgIEF0b20gCQkgLAogICAgQXRvbSoJCSAs
CiAgICBpbnQgCQkgLAogICAgWHRTZWxlY3Rpb25DYWxsYmFja1Byb2MgICwKICAgIFh0UG9pbnRl
cioJCSAsCiAgICBUaW1lIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0U2V0U2VsZWN0aW9uUGFyYW1l
dGVycygKCiAgICBXaWRnZXQJCSAsCiAgICBBdG9tCQkgLAogICAgQXRvbQkJICwKICAgIFh0UG9p
bnRlcgkJICwKICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gdm9p
ZCBYdEdldFNlbGVjdGlvblBhcmFtZXRlcnMoCgogICAgV2lkZ2V0CQkgLAogICAgQXRvbQkJICwK
ICAgIFh0UmVxdWVzdElkCQkgLAogICAgQXRvbSoJCSAsCiAgICBYdFBvaW50ZXIqCQkgLAogICAg
dW5zaWduZWQgbG9uZyoJICwKICAgIGludCoJCSAKCik7CgpleHRlcm4gdm9pZCBYdENyZWF0ZVNl
bGVjdGlvblJlcXVlc3QoCgogICAgV2lkZ2V0CQkgLAogICAgQXRvbQkJIAoKKTsKCmV4dGVybiB2
b2lkIFh0U2VuZFNlbGVjdGlvblJlcXVlc3QoCgogICAgV2lkZ2V0CQkgLAogICAgQXRvbQkJICwK
ICAgIFRpbWUJCSAKCik7CgpleHRlcm4gdm9pZCBYdENhbmNlbFNlbGVjdGlvblJlcXVlc3QoCgog
ICAgV2lkZ2V0CQkgLAogICAgQXRvbQkJIAoKKTsKCmV4dGVybiBBdG9tIFh0UmVzZXJ2ZVByb3Bl
cnR5QXRvbSgKCiAgICBXaWRnZXQJCSAKCik7CgpleHRlcm4gdm9pZCBYdFJlbGVhc2VQcm9wZXJ0
eUF0b20oCgogICAgV2lkZ2V0CQkgLAogICAgQXRvbQkJIAoKKTsKCmV4dGVybiB2b2lkIFh0R3Jh
YktleSgKCiAgICBXaWRnZXQgCQkgLAogICAgdW5zaWduZWQgaW50ICAJCSAsCiAgICBNb2RpZmll
cnMJIAkgLAogICAgaW50ICAJCSAsCiAgICBpbnQgCQkgLAogICAgaW50IAkJIAoKKTsKCmV4dGVy
biB2b2lkIFh0VW5ncmFiS2V5KAoKICAgIFdpZGdldCAJCSAsCiAgICB1bnNpZ25lZCBpbnQgIAkJ
ICwKICAgIE1vZGlmaWVycwkgCSAKCik7CgpleHRlcm4gaW50IFh0R3JhYktleWJvYXJkKAoKICAg
IFdpZGdldCAJCSAsCiAgICBpbnQgIAkJICwKICAgIGludCAJCSAsCiAgICBpbnQgCQkgLAogICAg
VGltZSAJCSAKCik7CgpleHRlcm4gdm9pZCBYdFVuZ3JhYktleWJvYXJkKAoKICAgIFdpZGdldCAJ
CSAsCiAgICBUaW1lIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0R3JhYkJ1dHRvbigKCiAgICBXaWRn
ZXQgCQkgLAogICAgaW50IAkJICwKICAgIE1vZGlmaWVycwkgCSAsCiAgICBpbnQgIAkJICwKICAg
IHVuc2lnbmVkIGludAkgLAogICAgaW50IAkJICwKICAgIGludCAJCSAsCiAgICBXaW5kb3cgCQkg
LAogICAgQ3Vyc29yIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0VW5ncmFiQnV0dG9uKAoKICAgIFdp
ZGdldCAJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIE1vZGlmaWVycwkgCSAKCik7CgpleHRl
cm4gaW50IFh0R3JhYlBvaW50ZXIoCgogICAgV2lkZ2V0IAkJICwKICAgIGludCAgCQkgLAogICAg
dW5zaWduZWQgaW50CSAsCiAgICBpbnQgCQkgLAogICAgaW50IAkJICwKICAgIFdpbmRvdyAJCSAs
CiAgICBDdXJzb3IgCQkgLAogICAgVGltZSAJCSAKCik7CgpleHRlcm4gdm9pZCBYdFVuZ3JhYlBv
aW50ZXIoCgogICAgV2lkZ2V0IAkJICwKICAgIFRpbWUgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRH
ZXRBcHBsaWNhdGlvbk5hbWVBbmRDbGFzcygKCiAgICBEaXNwbGF5KgkJICwKICAgIFN0cmluZyoJ
CSAsCiAgICBTdHJpbmcqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRSZWdpc3RlckRyYXdhYmxlKAoK
ICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBXaWRnZXQJCSAKCik7CgpleHRl
cm4gdm9pZCBYdFVucmVnaXN0ZXJEcmF3YWJsZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdh
YmxlCQkgCgopOwoKZXh0ZXJuIFdpZGdldCBYdEhvb2tzT2ZEaXNwbGF5KAoKICAgIERpc3BsYXkq
CQkgCgopOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgU3RyaW5nIHR5cGU7CiAgICBXaWRnZXQgd2lk
Z2V0OwogICAgQXJnTGlzdCBhcmdzOwogICAgQ2FyZGluYWwgbnVtX2FyZ3M7Cn0gWHRDcmVhdGVI
b29rRGF0YVJlYywgKlh0Q3JlYXRlSG9va0RhdGE7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBTdHJp
bmcgdHlwZTsKICAgIFdpZGdldCB3aWRnZXQ7CiAgICBYdFBvaW50ZXIgZXZlbnRfZGF0YTsKICAg
IENhcmRpbmFsIG51bV9ldmVudF9kYXRhOwp9IFh0Q2hhbmdlSG9va0RhdGFSZWMsICpYdENoYW5n
ZUhvb2tEYXRhOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgV2lkZ2V0IG9sZCwgcmVxOwogICAgQXJn
TGlzdCBhcmdzOwogICAgQ2FyZGluYWwgbnVtX2FyZ3M7Cn0gWHRDaGFuZ2VIb29rU2V0VmFsdWVz
RGF0YVJlYywgKlh0Q2hhbmdlSG9va1NldFZhbHVlc0RhdGE7Cgp0eXBlZGVmIHN0cnVjdCB7CiAg
ICBTdHJpbmcgdHlwZTsKICAgIFdpZGdldCB3aWRnZXQ7CiAgICBYdEdlb21ldHJ5TWFzayBjaGFu
Z2VNYXNrOwogICAgWFdpbmRvd0NoYW5nZXMgY2hhbmdlczsKfSBYdENvbmZpZ3VyZUhvb2tEYXRh
UmVjLCAqWHRDb25maWd1cmVIb29rRGF0YTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFN0cmluZyB0
eXBlOwogICAgV2lkZ2V0IHdpZGdldDsKICAgIFh0V2lkZ2V0R2VvbWV0cnkqIHJlcXVlc3Q7CiAg
ICBYdFdpZGdldEdlb21ldHJ5KiByZXBseTsKICAgIFh0R2VvbWV0cnlSZXN1bHQgcmVzdWx0Owp9
IFh0R2VvbWV0cnlIb29rRGF0YVJlYywgKlh0R2VvbWV0cnlIb29rRGF0YTsKCnR5cGVkZWYgc3Ry
dWN0IHsKICAgIFN0cmluZyB0eXBlOwogICAgV2lkZ2V0IHdpZGdldDsKfSBYdERlc3Ryb3lIb29r
RGF0YVJlYywgKlh0RGVzdHJveUhvb2tEYXRhOwoKZXh0ZXJuIHZvaWQgWHRHZXREaXNwbGF5cygK
CiAgICBYdEFwcENvbnRleHQJICwKICAgIERpc3BsYXkqKioJCSAsCiAgICBDYXJkaW5hbCoJCSAK
Cik7CgpleHRlcm4gQm9vbGVhbiBYdFRvb2xraXRUaHJlYWRJbml0aWFsaXplKAoKICAgIHZvaWQK
Cik7CgpleHRlcm4gdm9pZCBYdEFwcFNldEV4aXRGbGFnKAoKICAgIFh0QXBwQ29udGV4dAkgCgop
OwoKZXh0ZXJuIEJvb2xlYW4gWHRBcHBHZXRFeGl0RmxhZygKCiAgICBYdEFwcENvbnRleHQJIAoK
KTsKCmV4dGVybiB2b2lkIFh0QXBwTG9jaygKCiAgICBYdEFwcENvbnRleHQJIAoKKTsKCmV4dGVy
biB2b2lkIFh0QXBwVW5sb2NrKAoKICAgIFh0QXBwQ29udGV4dAkgCgopOwoKIAoKCgoKIAoKZXh0
ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0FjY2VsZXJhdG9yVGFibGUoCgogICAgRGlzcGxheSoJ
ICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQ
dHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgpleHRlcm4gQm9v
bGVhbiBYdEN2dFN0cmluZ1RvQXRvbSgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIg
ICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQ
dHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9C
b29sKAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCog
ICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVy
KgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0Jvb2xlYW4oCgogICAgRGlzcGxh
eSoJICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFs
dWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgpleHRlcm4g
Qm9vbGVhbiBYdEN2dFN0cmluZ1RvQ29tbWFuZEFyZ0FycmF5KAoKICAgIERpc3BsYXkqCSAsCiAg
ICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAs
CiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4g
WHRDdnRTdHJpbmdUb0N1cnNvcigKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJ
IAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJ
ICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9EaW1l
bnNpb24oCgogICAgRGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFs
KiAgICAsCQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50
ZXIqCSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvRGlyZWN0b3J5U3RyaW5nKAoK
ICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkK
ICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgop
OwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0Rpc3BsYXkoCgogICAgRGlzcGxheSoJICwK
ICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQdHIJ
ICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgpleHRlcm4gQm9vbGVh
biBYdEN2dFN0cmluZ1RvRmlsZSgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJ
IAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJ
ICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9GbG9h
dCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAg
ICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJ
IAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9Gb250KAoKICAgIERpc3BsYXkqCSAs
CiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRy
CSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xl
YW4gWHRDdnRTdHJpbmdUb0ZvbnRTZXQoCgogICAgRGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRy
ICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVl
UHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1Rv
Rm9udFN0cnVjdCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2Fy
ZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0
UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9HcmF2aXR5KAoKICAg
IERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAogICAgQ2FyZGluYWwqICAgICwJCiAgICBY
cm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4
dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9Jbml0aWFsU3RhdGUoCgogICAgRGlzcGxheSoJICwK
ICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQdHIJ
ICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgpleHRlcm4gQm9vbGVh
biBYdEN2dFN0cmluZ1RvSW50KAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkg
CiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkg
LAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb1BpeGVs
KAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAg
LAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkg
CgopOwoKCgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvUmVzdGFydFN0eWxlKAoKICAgIERp
c3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhy
bVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0
ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb1Nob3J0KAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1W
YWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBY
cm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRT
dHJpbmdUb1RyYW5zbGF0aW9uVGFibGUoCgogICAgRGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRy
ICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVl
UHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1Rv
VW5zaWduZWRDaGFyKAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBD
YXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAg
WHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb1Zpc3VhbCgKCiAg
ICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAg
ICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsK
CiAKCmV4dGVybiBCb29sZWFuIFh0Q3Z0SW50VG9Cb29sKAoKICAgIERpc3BsYXkqCSAsCiAgICBY
cm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAg
ICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRD
dnRJbnRUb0Jvb2xlYW4oCgogICAgRGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAg
IENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAg
ICBYdFBvaW50ZXIqCSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dEludFRvQ29sb3IoCgogICAg
RGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAg
WHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgoK
CmV4dGVybiBCb29sZWFuIFh0Q3Z0SW50VG9GbG9hdCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJt
VmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAg
WHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0
SW50VG9Gb250KAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJk
aW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQ
b2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRJbnRUb1BpeGVsKAoKICAgIERpc3Bs
YXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZh
bHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJu
IEJvb2xlYW4gWHRDdnRJbnRUb1BpeG1hcCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQ
dHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFs
dWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCgoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRJbnRU
b1Nob3J0KAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5h
bCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2lu
dGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRJbnRUb1Vuc2lnbmVkQ2hhcigKCiAgICBE
aXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBY
cm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCiAK
CmV4dGVybiBCb29sZWFuIFh0Q3Z0Q29sb3JUb1BpeGVsKAoKICAgIERpc3BsYXkqCSAsCiAgICBY
cm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAg
ICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKIAoKCgoKfSAKCgogCiMgMjMg
Ii91c3IvWDExUjYvaW5jbHVkZS9YbS9YbS5oIiAyCgojIDEgIi91c3IvWDExUjYvaW5jbHVkZS9Y
MTEvU2hlbGwuaCIgMQogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIyAxICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL1NNL1NNbGliLmgiIDEKIAoK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIyAxICIvdXNyL1gxMVI2L2luY2x1
ZGUvWDExL1NNL1NNLmgiIDEKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK
IAoKCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKCiAKCgoKCgoK
CgoKCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMzcgIi91c3Iv
WDExUjYvaW5jbHVkZS9YMTEvU00vU01saWIuaCIgMgoKIyAxICIvdXNyL1gxMVI2L2luY2x1ZGUv
WDExL0lDRS9JQ0VsaWIuaCIgMQogCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IyAxICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL0lDRS9JQ0UuaCIgMQogCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCgogCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgojIDM1ICIvdXNyL1gxMVI2L2lu
Y2x1ZGUvWDExL0lDRS9JQ0VsaWIuaCIgMgoKCgoKCgoKCgp0eXBlZGVmIHZvaWQgKkljZVBvaW50
ZXI7CgoKCgp0eXBlZGVmIGVudW0gewogICAgSWNlUG9BdXRoSGF2ZVJlcGx5LAogICAgSWNlUG9B
dXRoUmVqZWN0ZWQsCiAgICBJY2VQb0F1dGhGYWlsZWQsCiAgICBJY2VQb0F1dGhEb25lQ2xlYW51
cAp9IEljZVBvQXV0aFN0YXR1czsKCnR5cGVkZWYgZW51bSB7CiAgICBJY2VQYUF1dGhDb250aW51
ZSwKICAgIEljZVBhQXV0aEFjY2VwdGVkLAogICAgSWNlUGFBdXRoUmVqZWN0ZWQsCiAgICBJY2VQ
YUF1dGhGYWlsZWQKfSBJY2VQYUF1dGhTdGF0dXM7Cgp0eXBlZGVmIGVudW0gewogICAgSWNlQ29u
bmVjdFBlbmRpbmcsCiAgICBJY2VDb25uZWN0QWNjZXB0ZWQsCiAgICBJY2VDb25uZWN0UmVqZWN0
ZWQsCiAgICBJY2VDb25uZWN0SU9FcnJvcgp9IEljZUNvbm5lY3RTdGF0dXM7Cgp0eXBlZGVmIGVu
dW0gewogICAgSWNlUHJvdG9jb2xTZXR1cFN1Y2Nlc3MsCiAgICBJY2VQcm90b2NvbFNldHVwRmFp
bHVyZSwKICAgIEljZVByb3RvY29sU2V0dXBJT0Vycm9yLAogICAgSWNlUHJvdG9jb2xBbHJlYWR5
QWN0aXZlCn0gSWNlUHJvdG9jb2xTZXR1cFN0YXR1czsKCnR5cGVkZWYgZW51bSB7CiAgICBJY2VB
Y2NlcHRTdWNjZXNzLAogICAgSWNlQWNjZXB0RmFpbHVyZSwKICAgIEljZUFjY2VwdEJhZE1hbGxv
Ywp9IEljZUFjY2VwdFN0YXR1czsKCnR5cGVkZWYgZW51bSB7CiAgICBJY2VDbG9zZWROb3csCiAg
ICBJY2VDbG9zZWRBU0FQLAogICAgSWNlQ29ubmVjdGlvbkluVXNlLAogICAgSWNlU3RhcnRlZFNo
dXRkb3duTmVnb3RpYXRpb24KfSBJY2VDbG9zZVN0YXR1czsKCnR5cGVkZWYgZW51bSB7CiAgICBJ
Y2VQcm9jZXNzTWVzc2FnZXNTdWNjZXNzLAogICAgSWNlUHJvY2Vzc01lc3NhZ2VzSU9FcnJvciwK
ICAgIEljZVByb2Nlc3NNZXNzYWdlc0Nvbm5lY3Rpb25DbG9zZWQKfSBJY2VQcm9jZXNzTWVzc2Fn
ZXNTdGF0dXM7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICB1bnNpZ25lZCBsb25nCXNlcXVlbmNlX29m
X3JlcXVlc3Q7CiAgICBpbnQJCQltYWpvcl9vcGNvZGVfb2ZfcmVxdWVzdDsKICAgIGludAkJCW1p
bm9yX29wY29kZV9vZl9yZXF1ZXN0OwogICAgSWNlUG9pbnRlcgkJcmVwbHk7Cn0gSWNlUmVwbHlX
YWl0SW5mbzsKCnR5cGVkZWYgc3RydWN0IF9JY2VDb25uICpJY2VDb25uOwp0eXBlZGVmIHN0cnVj
dCBfSWNlTGlzdGVuT2JqICpJY2VMaXN0ZW5PYmo7Cgp0eXBlZGVmIHZvaWQgKCpJY2VXYXRjaFBy
b2MpICgKCiAgICBJY2VDb25uCQkgLAogICAgSWNlUG9pbnRlcgkJICwKICAgIGludCAJCSAsCiAg
ICBJY2VQb2ludGVyICoJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKkljZVBvUHJvY2Vzc01zZ1Byb2Mp
ICgKCiAgICBJY2VDb25uIAkJICwKICAgIEljZVBvaW50ZXIJCSAsCiAgICBpbnQJCQkgLAogICAg
dW5zaWduZWQgbG9uZwkgLAogICAgaW50IAkJICwKICAgIEljZVJlcGx5V2FpdEluZm8gKiAgICwK
ICAgIGludCAgKgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKkljZVBhUHJvY2Vzc01zZ1Byb2MpICgK
CiAgICBJY2VDb25uIAkJICwKICAgIEljZVBvaW50ZXIJCSAsCiAgICBpbnQJCQkgLAogICAgdW5z
aWduZWQgbG9uZwkgLAogICAgaW50IAkJIAoKKTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGludAkJ
CSBtYWpvcl92ZXJzaW9uOwogICAgaW50CQkJIG1pbm9yX3ZlcnNpb247CiAgICBJY2VQb1Byb2Nl
c3NNc2dQcm9jICBwcm9jZXNzX21zZ19wcm9jOwp9IEljZVBvVmVyc2lvblJlYzsKCnR5cGVkZWYg
c3RydWN0IHsKICAgIGludAkJCSBtYWpvcl92ZXJzaW9uOwogICAgaW50CQkJIG1pbm9yX3ZlcnNp
b247CiAgICBJY2VQYVByb2Nlc3NNc2dQcm9jICBwcm9jZXNzX21zZ19wcm9jOwp9IEljZVBhVmVy
c2lvblJlYzsKCnR5cGVkZWYgSWNlUG9BdXRoU3RhdHVzICgqSWNlUG9BdXRoUHJvYykgKAoKICAg
IEljZUNvbm4JCSAsCiAgICBJY2VQb2ludGVyICoJICwKICAgIGludCAJCSAsCiAgICBpbnQgCQkg
LAogICAgaW50CQkJICwKICAgIEljZVBvaW50ZXIJCSAsCiAgICBpbnQgKgkJICwKICAgIEljZVBv
aW50ZXIgKgkgLAogICAgY2hhciAqKgkJIAoKKTsKCnR5cGVkZWYgSWNlUGFBdXRoU3RhdHVzICgq
SWNlUGFBdXRoUHJvYykgKAoKICAgIEljZUNvbm4JCSAsCiAgICBJY2VQb2ludGVyICoJICwKICAg
IGludCAJCSAsCiAgICBpbnQJCQkgLAogICAgSWNlUG9pbnRlcgkJICwKICAgIGludCAqCQkgLAog
ICAgSWNlUG9pbnRlciAqCSAsCiAgICBjaGFyICoqCQkgCgopOwoKdHlwZWRlZiBpbnQgICgqSWNl
SG9zdEJhc2VkQXV0aFByb2MpICgKCiAgICBjaGFyICoJCSAKCik7Cgp0eXBlZGVmIGludCAgKCpJ
Y2VQcm90b2NvbFNldHVwUHJvYykgKAoKICAgIEljZUNvbm4gCQkgLAogICAgaW50CQkJICwKICAg
IGludAkJCSAsCiAgICBjaGFyICoJCSAsCiAgICBjaGFyICoJCSAsCiAgICBJY2VQb2ludGVyICoJ
ICwKICAgIGNoYXIgKioJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpJY2VQcm90b2NvbEFjdGl2YXRl
UHJvYykgKAoKICAgIEljZUNvbm4gCQkgLAogICAgSWNlUG9pbnRlcgkJIAoKKTsKCnR5cGVkZWYg
dm9pZCAoKkljZUlPRXJyb3JQcm9jKSAoCgogICAgSWNlQ29ubiAJCSAKCik7Cgp0eXBlZGVmIHZv
aWQgKCpJY2VQaW5nUmVwbHlQcm9jKSAoCgogICAgSWNlQ29ubiAJCSAsCiAgICBJY2VQb2ludGVy
CQkgCgopOwoKdHlwZWRlZiB2b2lkICgqSWNlRXJyb3JIYW5kbGVyKSAoCgogICAgSWNlQ29ubiAJ
CSAsCiAgICBpbnQgCQkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGxvbmcgCSAsCiAgICBp
bnQgCQkgLAogICAgaW50CQkJICwKICAgIEljZVBvaW50ZXIJCSAKCik7Cgp0eXBlZGVmIHZvaWQg
KCpJY2VJT0Vycm9ySGFuZGxlcikgKAoKICAgIEljZUNvbm4gCQkgCgopOwoKCiAKCgoKZXh0ZXJu
ICJDIiB7IAoKZXh0ZXJuIGludCBJY2VSZWdpc3RlckZvclByb3RvY29sU2V0dXAgKAoKICAgIGNo
YXIgKgkJCSAsCiAgICBjaGFyICoJCQkgLAogICAgY2hhciAqCQkJICwKICAgIGludAkJCQkgLAog
ICAgSWNlUG9WZXJzaW9uUmVjICoJCSAsCiAgICBpbnQJCQkJICwKICAgIGNoYXIgKioJCQkgLAog
ICAgSWNlUG9BdXRoUHJvYyAqCQkgLAogICAgSWNlSU9FcnJvclByb2MJCSAKCik7CgpleHRlcm4g
aW50IEljZVJlZ2lzdGVyRm9yUHJvdG9jb2xSZXBseSAoCgogICAgY2hhciAqCQkJICwKICAgIGNo
YXIgKgkJCSAsCiAgICBjaGFyICoJCQkgLAogICAgaW50CQkJCSAsCiAgICBJY2VQYVZlcnNpb25S
ZWMgKgkJICwKICAgIGludAkJCQkgLAogICAgY2hhciAqKgkJCSAsCiAgICBJY2VQYUF1dGhQcm9j
ICoJCSAsCiAgICBJY2VIb3N0QmFzZWRBdXRoUHJvYwkgLAogICAgSWNlUHJvdG9jb2xTZXR1cFBy
b2MJICwKICAgIEljZVByb3RvY29sQWN0aXZhdGVQcm9jCSAsCiAgICBJY2VJT0Vycm9yUHJvYwkJ
IAoKKTsKCmV4dGVybiBJY2VDb25uIEljZU9wZW5Db25uZWN0aW9uICgKCiAgICBjaGFyICoJCSAs
CiAgICBJY2VQb2ludGVyCQkgLAogICAgaW50IAkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkg
LAogICAgY2hhciAqCQkgCgopOwoKZXh0ZXJuIEljZVBvaW50ZXIgSWNlR2V0Q29ubmVjdGlvbkNv
bnRleHQgKAoKICAgIEljZUNvbm4JCSAKCik7CgpleHRlcm4gaW50ICBJY2VMaXN0ZW5Gb3JDb25u
ZWN0aW9ucyAoCgogICAgaW50ICoJCSAsCiAgICBJY2VMaXN0ZW5PYmogKioJICwKICAgIGludAkJ
CSAsCiAgICBjaGFyICoJCSAKCik7CgpleHRlcm4gaW50ICBJY2VMaXN0ZW5Gb3JXZWxsS25vd25D
b25uZWN0aW9ucyAoCgogICAgY2hhciAqCQkgLAogICAgaW50ICoJCSAsCiAgICBJY2VMaXN0ZW5P
YmogKioJICwKICAgIGludAkJCSAsCiAgICBjaGFyICoJCSAKCik7CgpleHRlcm4gaW50IEljZUdl
dExpc3RlbkNvbm5lY3Rpb25OdW1iZXIgKAoKICAgIEljZUxpc3Rlbk9iagkgCgopOwoKZXh0ZXJu
IGNoYXIgKkljZUdldExpc3RlbkNvbm5lY3Rpb25TdHJpbmcgKAoKICAgIEljZUxpc3Rlbk9iagkg
CgopOwoKZXh0ZXJuIGNoYXIgKkljZUNvbXBvc2VOZXR3b3JrSWRMaXN0ICgKCiAgICBpbnQJCQkg
LAogICAgSWNlTGlzdGVuT2JqICoJIAoKKTsKCmV4dGVybiB2b2lkIEljZUZyZWVMaXN0ZW5PYmpz
ICgKCiAgICBpbnQJCQkgLAogICAgSWNlTGlzdGVuT2JqICoJIAoKKTsKCmV4dGVybiB2b2lkIElj
ZVNldEhvc3RCYXNlZEF1dGhQcm9jICgKCiAgICBJY2VMaXN0ZW5PYmoJCSAsCiAgICBJY2VIb3N0
QmFzZWRBdXRoUHJvYyAgIAkgCgopOwoKZXh0ZXJuIEljZUNvbm4gSWNlQWNjZXB0Q29ubmVjdGlv
biAoCgogICAgSWNlTGlzdGVuT2JqCSAsCiAgICBJY2VBY2NlcHRTdGF0dXMgKgkgCgopOwoKZXh0
ZXJuIHZvaWQgSWNlU2V0U2h1dGRvd25OZWdvdGlhdGlvbiAoCgogICAgSWNlQ29ubgkJICwKICAg
IGludCAJCSAKCik7CgpleHRlcm4gaW50ICBJY2VDaGVja1NodXRkb3duTmVnb3RpYXRpb24gKAoK
ICAgIEljZUNvbm4JCSAKCik7CgpleHRlcm4gSWNlQ2xvc2VTdGF0dXMgSWNlQ2xvc2VDb25uZWN0
aW9uICgKCiAgICBJY2VDb25uCQkgCgopOwoKZXh0ZXJuIGludCAgSWNlQWRkQ29ubmVjdGlvbldh
dGNoICgKCiAgICBJY2VXYXRjaFByb2MJCSAsCiAgICBJY2VQb2ludGVyCQkJIAoKKTsKCmV4dGVy
biB2b2lkIEljZVJlbW92ZUNvbm5lY3Rpb25XYXRjaCAoCgogICAgSWNlV2F0Y2hQcm9jCQkgLAog
ICAgSWNlUG9pbnRlcgkJCSAKCik7CgpleHRlcm4gSWNlUHJvdG9jb2xTZXR1cFN0YXR1cyBJY2VQ
cm90b2NvbFNldHVwICgKCiAgICBJY2VDb25uCQkgLAogICAgaW50IAkJICwKICAgIEljZVBvaW50
ZXIJCSAsCiAgICBpbnQgCQkgLAogICAgaW50CSoJCSAsCiAgICBpbnQJKgkJICwKICAgIGNoYXIg
KioJCSAsCiAgICBjaGFyICoqCQkgLAogICAgaW50CQkJICwKICAgIGNoYXIgKgkJIAoKKTsKCmV4
dGVybiBpbnQgIEljZVByb3RvY29sU2h1dGRvd24gKAoKICAgIEljZUNvbm4JCSAsCiAgICBpbnQJ
CQkgCgopOwoKZXh0ZXJuIEljZVByb2Nlc3NNZXNzYWdlc1N0YXR1cyBJY2VQcm9jZXNzTWVzc2Fn
ZXMgKAoKICAgIEljZUNvbm4JCSAsCiAgICBJY2VSZXBseVdhaXRJbmZvICoJICwKICAgIGludCAg
KgkJIAoKKTsKCmV4dGVybiBpbnQgIEljZVBpbmcgKAoKICAgSWNlQ29ubgkJICwKICAgSWNlUGlu
Z1JlcGx5UHJvYwkgLAogICBJY2VQb2ludGVyCQkgCgopOwoKZXh0ZXJuIGNoYXIgKkljZUFsbG9j
U2NyYXRjaCAoCgogICBJY2VDb25uCQkgLAogICB1bnNpZ25lZCBsb25nCSAKCik7CgpleHRlcm4g
aW50IEljZUZsdXNoICgKCiAgIEljZUNvbm4JCSAKCik7CgpleHRlcm4gaW50IEljZUdldE91dEJ1
ZlNpemUgKAoKICAgSWNlQ29ubgkJIAoKKTsKCmV4dGVybiBpbnQgSWNlR2V0SW5CdWZTaXplICgK
CiAgIEljZUNvbm4JCSAKCik7CgpleHRlcm4gSWNlQ29ubmVjdFN0YXR1cyBJY2VDb25uZWN0aW9u
U3RhdHVzICgKCiAgICBJY2VDb25uCQkgCgopOwoKZXh0ZXJuIGNoYXIgKkljZVZlbmRvciAoCgog
ICAgSWNlQ29ubgkJIAoKKTsKCmV4dGVybiBjaGFyICpJY2VSZWxlYXNlICgKCiAgICBJY2VDb25u
CQkgCgopOwoKZXh0ZXJuIGludCBJY2VQcm90b2NvbFZlcnNpb24gKAoKICAgIEljZUNvbm4JCSAK
Cik7CgpleHRlcm4gaW50IEljZVByb3RvY29sUmV2aXNpb24gKAoKICAgIEljZUNvbm4JCSAKCik7
CgpleHRlcm4gaW50IEljZUNvbm5lY3Rpb25OdW1iZXIgKAoKICAgIEljZUNvbm4JCSAKCik7Cgpl
eHRlcm4gY2hhciAqSWNlQ29ubmVjdGlvblN0cmluZyAoCgogICAgSWNlQ29ubgkJIAoKKTsKCmV4
dGVybiB1bnNpZ25lZCBsb25nIEljZUxhc3RTZW50U2VxdWVuY2VOdW1iZXIgKAoKICAgIEljZUNv
bm4JCSAKCik7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBJY2VMYXN0UmVjZWl2ZWRTZXF1ZW5jZU51
bWJlciAoCgogICAgSWNlQ29ubgkJIAoKKTsKCmV4dGVybiBpbnQgIEljZVN3YXBwaW5nICgKCiAg
ICBJY2VDb25uCQkgCgopOwoKZXh0ZXJuIEljZUVycm9ySGFuZGxlciBJY2VTZXRFcnJvckhhbmRs
ZXIgKAoKICAgIEljZUVycm9ySGFuZGxlciAJIAoKKTsKCmV4dGVybiBJY2VJT0Vycm9ySGFuZGxl
ciBJY2VTZXRJT0Vycm9ySGFuZGxlciAoCgogICAgSWNlSU9FcnJvckhhbmRsZXIgCSAKCik7CgoK
IAoKCgpleHRlcm4gaW50ICBJY2VJbml0VGhyZWFkcyAoCgogICAgdm9pZAoKKTsKCmV4dGVybiB2
b2lkIEljZUFwcExvY2tDb25uICgKCiAgICBJY2VDb25uCQkgCgopOwoKZXh0ZXJuIHZvaWQgSWNl
QXBwVW5sb2NrQ29ubiAoCgogICAgSWNlQ29ubgkJIAoKKTsKCn0gCgoKIyAzOCAiL3Vzci9YMTFS
Ni9pbmNsdWRlL1gxMS9TTS9TTWxpYi5oIiAyCgoKCiAKCgoKdHlwZWRlZiBJY2VQb2ludGVyIFNt
UG9pbnRlcjsKCgogCgoKCnR5cGVkZWYgc3RydWN0IF9TbWNDb25uICpTbWNDb25uOwp0eXBlZGVm
IHN0cnVjdCBfU21zQ29ubiAqU21zQ29ubjsKCgogCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIGlu
dAkJbGVuZ3RoOwkJIAogICAgU21Qb2ludGVyICAgdmFsdWU7CQkgCn0gU21Qcm9wVmFsdWU7Cgp0
eXBlZGVmIHN0cnVjdCB7CiAgICBjaGFyCSpuYW1lOwkJIAogICAgY2hhcgkqdHlwZTsJCSAKICAg
IGludAkJbnVtX3ZhbHM7CSAKICAgIFNtUHJvcFZhbHVlICp2YWxzOwkJIAp9IFNtUHJvcDsKCgoM
CiAKCgoKdHlwZWRlZiBlbnVtIHsKICAgIFNtY0Nsb3NlZE5vdywKICAgIFNtY0Nsb3NlZEFTQVAs
CiAgICBTbWNDb25uZWN0aW9uSW5Vc2UKfSBTbWNDbG9zZVN0YXR1czsKCgoMCiAKCgoKdHlwZWRl
ZiB2b2lkICgqU21jU2F2ZVlvdXJzZWxmUHJvYykgKAoKICAgIFNtY0Nvbm4JCSAsCiAgICBTbVBv
aW50ZXIJCSAsCiAgICBpbnQgIAkJICwKICAgIGludCAJCSAsCiAgICBpbnQJCQkgLAogICAgaW50
IAkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlNtY1NhdmVZb3Vyc2VsZlBoYXNlMlByb2MpICgKCiAg
ICBTbWNDb25uCQkgLAogICAgU21Qb2ludGVyCQkgCgopOwoKdHlwZWRlZiB2b2lkICgqU21jSW50
ZXJhY3RQcm9jKSAoCgogICAgU21jQ29ubgkJICwKICAgIFNtUG9pbnRlcgkJIAoKKTsKCnR5cGVk
ZWYgdm9pZCAoKlNtY0RpZVByb2MpICgKCiAgICBTbWNDb25uCQkgLAogICAgU21Qb2ludGVyCQkg
CgopOwoKdHlwZWRlZiB2b2lkICgqU21jU2h1dGRvd25DYW5jZWxsZWRQcm9jKSAoCgogICAgU21j
Q29ubgkJICwKICAgIFNtUG9pbnRlcgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlNtY1NhdmVDb21w
bGV0ZVByb2MpICgKCiAgICBTbWNDb25uCQkgLAogICAgU21Qb2ludGVyCQkgCgopOwoKdHlwZWRl
ZiB2b2lkICgqU21jUHJvcFJlcGx5UHJvYykgKAoKICAgIFNtY0Nvbm4JCSAsCiAgICBTbVBvaW50
ZXIJCSAsCiAgICBpbnQJCQkgLAogICAgU21Qcm9wICoqCQkgCgopOwoKCiAKCgoKdHlwZWRlZiBz
dHJ1Y3QgewoKICAgIHN0cnVjdCB7CglTbWNTYXZlWW91cnNlbGZQcm9jCSBjYWxsYmFjazsKCVNt
UG9pbnRlcgkJIGNsaWVudF9kYXRhOwogICAgfSBzYXZlX3lvdXJzZWxmOwoKICAgIHN0cnVjdCB7
CglTbWNEaWVQcm9jCQkgY2FsbGJhY2s7CglTbVBvaW50ZXIJCSBjbGllbnRfZGF0YTsKICAgIH0g
ZGllOwoKICAgIHN0cnVjdCB7CglTbWNTYXZlQ29tcGxldGVQcm9jCSBjYWxsYmFjazsKCVNtUG9p
bnRlcgkJIGNsaWVudF9kYXRhOwogICAgfSBzYXZlX2NvbXBsZXRlOwoKICAgIHN0cnVjdCB7CglT
bWNTaHV0ZG93bkNhbmNlbGxlZFByb2MgY2FsbGJhY2s7CglTbVBvaW50ZXIJCSBjbGllbnRfZGF0
YTsKICAgIH0gc2h1dGRvd25fY2FuY2VsbGVkOwoKfSBTbWNDYWxsYmFja3M7CgoKCgoKCgoMCiAK
CgoKdHlwZWRlZiBpbnQgICgqU21zUmVnaXN0ZXJDbGllbnRQcm9jKSAoCgogICAgU21zQ29ubiAJ
CSAsCiAgICBTbVBvaW50ZXIJCSAsCiAgICBjaGFyICoJCSAJCQkJICAgICAKCik7Cgp0eXBlZGVm
IHZvaWQgKCpTbXNJbnRlcmFjdFJlcXVlc3RQcm9jKSAoCgogICAgU21zQ29ubgkJICwKICAgIFNt
UG9pbnRlcgkJICwKICAgIGludAkJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpTbXNJbnRlcmFjdERv
bmVQcm9jKSAoCgogICAgU21zQ29ubgkJICwKICAgIFNtUG9pbnRlcgkJICwKICAgIGludCAJCSAK
Cik7Cgp0eXBlZGVmIHZvaWQgKCpTbXNTYXZlWW91cnNlbGZSZXF1ZXN0UHJvYykgKAoKICAgIFNt
c0Nvbm4JCSAsCiAgICBTbVBvaW50ZXIJCSAsCiAgICBpbnQgIAkJICwKICAgIGludCAJCSAsCiAg
ICBpbnQJCQkgLAogICAgaW50IAkJICwKICAgIGludCAJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpT
bXNTYXZlWW91cnNlbGZQaGFzZTJSZXF1ZXN0UHJvYykgKAoKICAgIFNtc0Nvbm4JCSAsCiAgICBT
bVBvaW50ZXIJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpTbXNTYXZlWW91cnNlbGZEb25lUHJvYykg
KAoKICAgIFNtc0Nvbm4JCSAsCiAgICBTbVBvaW50ZXIJCSAsCiAgICBpbnQgCQkgCgopOwoKdHlw
ZWRlZiB2b2lkICgqU21zQ2xvc2VDb25uZWN0aW9uUHJvYykgKAoKICAgIFNtc0Nvbm4JCSAsCiAg
ICBTbVBvaW50ZXIJCSAsCiAgICBpbnQJCQkgLAogICAgY2hhciAqKgkJIAoKKTsKCnR5cGVkZWYg
dm9pZCAoKlNtc1NldFByb3BlcnRpZXNQcm9jKSAoCgogICAgU21zQ29ubgkJICwKICAgIFNtUG9p
bnRlcgkJICwKICAgIGludAkJCSAsCiAgICBTbVByb3AgKioJCSAKCik7Cgp0eXBlZGVmIHZvaWQg
KCpTbXNEZWxldGVQcm9wZXJ0aWVzUHJvYykgKAoKICAgIFNtc0Nvbm4JCSAsCiAgICBTbVBvaW50
ZXIJCSAsCiAgICBpbnQJCQkgLAogICAgY2hhciAqKgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlNt
c0dldFByb3BlcnRpZXNQcm9jKSAoCgogICAgU21zQ29ubgkJICwKICAgIFNtUG9pbnRlcgkJIAoK
KTsKCgogCgoKCnR5cGVkZWYgc3RydWN0IHsKCiAgICBzdHJ1Y3QgewoJU21zUmVnaXN0ZXJDbGll
bnRQcm9jCWNhbGxiYWNrOwoJU21Qb2ludGVyCQltYW5hZ2VyX2RhdGE7CiAgICB9IHJlZ2lzdGVy
X2NsaWVudDsKCiAgICBzdHJ1Y3QgewoJU21zSW50ZXJhY3RSZXF1ZXN0UHJvYwljYWxsYmFjazsK
CVNtUG9pbnRlcgkJbWFuYWdlcl9kYXRhOwogICAgfSBpbnRlcmFjdF9yZXF1ZXN0OwoKICAgIHN0
cnVjdCB7CglTbXNJbnRlcmFjdERvbmVQcm9jCWNhbGxiYWNrOwoJU21Qb2ludGVyCQltYW5hZ2Vy
X2RhdGE7CiAgICB9IGludGVyYWN0X2RvbmU7CgogICAgc3RydWN0IHsKCVNtc1NhdmVZb3Vyc2Vs
ZlJlcXVlc3RQcm9jCWNhbGxiYWNrOwoJU21Qb2ludGVyCQkJbWFuYWdlcl9kYXRhOwogICAgfSBz
YXZlX3lvdXJzZWxmX3JlcXVlc3Q7CgogICAgc3RydWN0IHsKCVNtc1NhdmVZb3Vyc2VsZlBoYXNl
MlJlcXVlc3RQcm9jCWNhbGxiYWNrOwoJU21Qb2ludGVyCQkJCW1hbmFnZXJfZGF0YTsKICAgIH0g
c2F2ZV95b3Vyc2VsZl9waGFzZTJfcmVxdWVzdDsKCiAgICBzdHJ1Y3QgewoJU21zU2F2ZVlvdXJz
ZWxmRG9uZVByb2MJY2FsbGJhY2s7CglTbVBvaW50ZXIJCW1hbmFnZXJfZGF0YTsKICAgIH0gc2F2
ZV95b3Vyc2VsZl9kb25lOwoKICAgIHN0cnVjdCB7CglTbXNDbG9zZUNvbm5lY3Rpb25Qcm9jCWNh
bGxiYWNrOwoJU21Qb2ludGVyCQltYW5hZ2VyX2RhdGE7CiAgICB9IGNsb3NlX2Nvbm5lY3Rpb247
CgogICAgc3RydWN0IHsKCVNtc1NldFByb3BlcnRpZXNQcm9jCWNhbGxiYWNrOwoJU21Qb2ludGVy
CQltYW5hZ2VyX2RhdGE7CiAgICB9IHNldF9wcm9wZXJ0aWVzOwoKICAgIHN0cnVjdCB7CglTbXNE
ZWxldGVQcm9wZXJ0aWVzUHJvYwljYWxsYmFjazsKCVNtUG9pbnRlcgkJbWFuYWdlcl9kYXRhOwog
ICAgfSBkZWxldGVfcHJvcGVydGllczsKCiAgICBzdHJ1Y3QgewoJU21zR2V0UHJvcGVydGllc1By
b2MJY2FsbGJhY2s7CglTbVBvaW50ZXIJCW1hbmFnZXJfZGF0YTsKICAgIH0gZ2V0X3Byb3BlcnRp
ZXM7Cgp9IFNtc0NhbGxiYWNrczsKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBpbnQgICgqU21zTmV3
Q2xpZW50UHJvYykgKAoKICAgIFNtc0Nvbm4gCQkgLAogICAgU21Qb2ludGVyCQkgLAogICAgdW5z
aWduZWQgbG9uZyAqCSAsCiAgICBTbXNDYWxsYmFja3MgKgkgLAogICAgY2hhciAqKgkJIAoKKTsK
CgoMCiAKCgoKdHlwZWRlZiB2b2lkICgqU21jRXJyb3JIYW5kbGVyKSAoCgogICAgU21jQ29ubgkJ
ICwKICAgIGludCAJCSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWduZWQgbG9uZyAJICwKICAgIGlu
dCAJCSAsCiAgICBpbnQJCQkgLAogICAgU21Qb2ludGVyCQkgCgopOwoKdHlwZWRlZiB2b2lkICgq
U21zRXJyb3JIYW5kbGVyKSAoCgogICAgU21zQ29ubgkJICwKICAgIGludCAJCSAsCiAgICBpbnQJ
CQkgLAogICAgdW5zaWduZWQgbG9uZyAJICwKICAgIGludCAJCSAsCiAgICBpbnQJCQkgLAogICAg
U21Qb2ludGVyCQkgCgopOwoKCgwKIAoKCgpleHRlcm4gIkMiIHsgCgpleHRlcm4gU21jQ29ubiBT
bWNPcGVuQ29ubmVjdGlvbiAoCgogICAgY2hhciAqCQkgLAogICAgU21Qb2ludGVyCQkgLAogICAg
aW50CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBsb25nCSAsCiAgICBTbWNDYWxsYmFj
a3MgKgkgLAogICAgY2hhciAqCQkgLAogICAgY2hhciAqKgkJICwKICAgIGludAkJCSAsCiAgICBj
aGFyICoJCSAKCik7CgpleHRlcm4gU21jQ2xvc2VTdGF0dXMgU21jQ2xvc2VDb25uZWN0aW9uICgK
CiAgICBTbWNDb25uCQkgLAogICAgaW50CQkJICwKICAgIGNoYXIgKioJCSAKCik7CgpleHRlcm4g
dm9pZCBTbWNNb2RpZnlDYWxsYmFja3MgKAoKICAgIFNtY0Nvbm4JCSAsCiAgICB1bnNpZ25lZCBs
b25nCSAsCiAgICBTbWNDYWxsYmFja3MgKgkgCgopOwoKZXh0ZXJuIHZvaWQgU21jU2V0UHJvcGVy
dGllcyAoCgogICAgU21jQ29ubgkJICwKICAgIGludCAgICAgIAkgICAgICAgICAsCiAgICBTbVBy
b3AgKioJCSAKCik7CgpleHRlcm4gdm9pZCBTbWNEZWxldGVQcm9wZXJ0aWVzICgKCiAgICBTbWND
b25uCQkgLAogICAgaW50ICAgICAgCSAgICAgICAgICwKICAgIGNoYXIgKioJCSAKCik7CgpleHRl
cm4gaW50ICBTbWNHZXRQcm9wZXJ0aWVzICgKCiAgICBTbWNDb25uCQkgLAogICAgU21jUHJvcFJl
cGx5UHJvYwkgLAogICAgU21Qb2ludGVyCQkgCgopOwoKZXh0ZXJuIGludCAgU21jSW50ZXJhY3RS
ZXF1ZXN0ICgKCiAgICBTbWNDb25uCQkgLAogICAgaW50CQkJICwKICAgIFNtY0ludGVyYWN0UHJv
YwkgLAogICAgU21Qb2ludGVyCQkgCgopOwoKZXh0ZXJuIHZvaWQgU21jSW50ZXJhY3REb25lICgK
CiAgICBTbWNDb25uCQkgLAogICAgaW50ICAJCSAKCik7CgpleHRlcm4gdm9pZCBTbWNSZXF1ZXN0
U2F2ZVlvdXJzZWxmICgKCiAgICBTbWNDb25uCQkgLAogICAgaW50CQkJICwKICAgIGludCAgCQkg
LAogICAgaW50CQkJICwKICAgIGludCAJCSAsCiAgICBpbnQgCQkgCgopOwoKZXh0ZXJuIGludCAg
U21jUmVxdWVzdFNhdmVZb3Vyc2VsZlBoYXNlMiAoCgogICAgU21jQ29ubgkJCSAsCiAgICBTbWNT
YXZlWW91cnNlbGZQaGFzZTJQcm9jCSAsCiAgICBTbVBvaW50ZXIJCQkgCgopOwoKZXh0ZXJuIHZv
aWQgU21jU2F2ZVlvdXJzZWxmRG9uZSAoCgogICAgU21jQ29ubgkJICwKICAgIGludCAJCSAKCik7
CgpleHRlcm4gaW50IFNtY1Byb3RvY29sVmVyc2lvbiAoCgogICAgU21jQ29ubgkJIAoKKTsKCmV4
dGVybiBpbnQgU21jUHJvdG9jb2xSZXZpc2lvbiAoCgogICAgU21jQ29ubgkJIAoKKTsKCmV4dGVy
biBjaGFyICpTbWNWZW5kb3IgKAoKICAgIFNtY0Nvbm4JCSAKCik7CgpleHRlcm4gY2hhciAqU21j
UmVsZWFzZSAoCgogICAgU21jQ29ubgkJIAoKKTsKCmV4dGVybiBjaGFyICpTbWNDbGllbnRJRCAo
CgogICAgU21jQ29ubgkJIAoKKTsKCmV4dGVybiBJY2VDb25uIFNtY0dldEljZUNvbm5lY3Rpb24g
KAoKICAgIFNtY0Nvbm4JCSAKCik7CgpleHRlcm4gaW50ICBTbXNJbml0aWFsaXplICgKCiAgICBj
aGFyICoJCQkgLAogICAgY2hhciAqCQkJICwKICAgIFNtc05ld0NsaWVudFByb2MJCSAsCiAgICBT
bVBvaW50ZXIJCQkgLAogICAgSWNlSG9zdEJhc2VkQXV0aFByb2MJICwKICAgIGludAkJCQkgLAog
ICAgY2hhciAqCQkJIAoKKTsKCmV4dGVybiBjaGFyICpTbXNDbGllbnRIb3N0TmFtZSAoCgogICAg
U21zQ29ubgkJIAoKKTsKCmV4dGVybiBjaGFyICpTbXNHZW5lcmF0ZUNsaWVudElEICgKCiAgICBT
bXNDb25uCQkgCgopOwoKZXh0ZXJuIGludCAgU21zUmVnaXN0ZXJDbGllbnRSZXBseSAoCgogICAg
U21zQ29ubgkJICwKICAgIGNoYXIgKgkJIAoKKTsKCmV4dGVybiB2b2lkIFNtc1NhdmVZb3Vyc2Vs
ZiAoCgogICAgU21zQ29ubgkJICwKICAgIGludAkJCSAsCiAgICBpbnQgIAkJICwKICAgIGludAkJ
CSAsCiAgICBpbnQgCQkgCgopOwoKZXh0ZXJuIHZvaWQgU21zU2F2ZVlvdXJzZWxmUGhhc2UyICgK
CiAgICBTbXNDb25uCQkgCgopOwoKZXh0ZXJuIHZvaWQgU21zSW50ZXJhY3QgKAoKICAgIFNtc0Nv
bm4JCSAKCik7CgpleHRlcm4gdm9pZCBTbXNEaWUgKAoKICAgIFNtc0Nvbm4JCSAKCik7CgpleHRl
cm4gdm9pZCBTbXNTYXZlQ29tcGxldGUgKAoKICAgIFNtc0Nvbm4JCSAKCik7CgpleHRlcm4gdm9p
ZCBTbXNTaHV0ZG93bkNhbmNlbGxlZCAoCgogICAgU21zQ29ubgkJIAoKKTsKCmV4dGVybiB2b2lk
IFNtc1JldHVyblByb3BlcnRpZXMgKAoKICAgIFNtc0Nvbm4JCSAsCiAgICBpbnQJCQkgLAogICAg
U21Qcm9wICoqCQkgCgopOwoKZXh0ZXJuIHZvaWQgU21zQ2xlYW5VcCAoCgogICAgU21zQ29ubgkJ
IAoKKTsKCmV4dGVybiBpbnQgU21zUHJvdG9jb2xWZXJzaW9uICgKCiAgICBTbXNDb25uCQkgCgop
OwoKZXh0ZXJuIGludCBTbXNQcm90b2NvbFJldmlzaW9uICgKCiAgICBTbXNDb25uCQkgCgopOwoK
ZXh0ZXJuIGNoYXIgKlNtc0NsaWVudElEICgKCiAgICBTbXNDb25uCQkgCgopOwoKZXh0ZXJuIElj
ZUNvbm4gU21zR2V0SWNlQ29ubmVjdGlvbiAoCgogICAgU21zQ29ubgkJIAoKKTsKCmV4dGVybiBT
bWNFcnJvckhhbmRsZXIgU21jU2V0RXJyb3JIYW5kbGVyICgKCiAgICBTbWNFcnJvckhhbmRsZXIg
CSAKCik7CgpleHRlcm4gU21zRXJyb3JIYW5kbGVyIFNtc1NldEVycm9ySGFuZGxlciAoCgogICAg
U21zRXJyb3JIYW5kbGVyIAkgCgopOwoKZXh0ZXJuIHZvaWQgU21GcmVlUHJvcGVydHkgKAoKICAg
IFNtUHJvcCAqCQkgCgopOwoKZXh0ZXJuIHZvaWQgU21GcmVlUmVhc29ucyAoCgogICAgaW50CQkJ
ICwKICAgIGNoYXIgKioJCSAKCik7Cgp9IAoKCiMgNTQgIi91c3IvWDExUjYvaW5jbHVkZS9YMTEv
U2hlbGwuaCIgMgoKCiAKCgoKCiAKCgoKCgoKCgoKCgogCiAKIAogCgojIDE5NiAiL3Vzci9YMTFS
Ni9pbmNsdWRlL1gxMS9TaGVsbC5oIgoKZXh0ZXJuIGNvbnN0ICBjaGFyIFh0U2hlbGxTdHJpbmdz
W107CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCiAKCnR5cGVkZWYgc3RydWN0IF9TaGVsbENsYXNzUmVjICpTaGVsbFdpZGdl
dENsYXNzOwp0eXBlZGVmIHN0cnVjdCBfT3ZlcnJpZGVTaGVsbENsYXNzUmVjICpPdmVycmlkZVNo
ZWxsV2lkZ2V0Q2xhc3M7CnR5cGVkZWYgc3RydWN0IF9XTVNoZWxsQ2xhc3NSZWMgKldNU2hlbGxX
aWRnZXRDbGFzczsKdHlwZWRlZiBzdHJ1Y3QgX1RyYW5zaWVudFNoZWxsQ2xhc3NSZWMgKlRyYW5z
aWVudFNoZWxsV2lkZ2V0Q2xhc3M7CnR5cGVkZWYgc3RydWN0IF9Ub3BMZXZlbFNoZWxsQ2xhc3NS
ZWMgKlRvcExldmVsU2hlbGxXaWRnZXRDbGFzczsKdHlwZWRlZiBzdHJ1Y3QgX0FwcGxpY2F0aW9u
U2hlbGxDbGFzc1JlYyAqQXBwbGljYXRpb25TaGVsbFdpZGdldENsYXNzOwp0eXBlZGVmIHN0cnVj
dCBfU2Vzc2lvblNoZWxsQ2xhc3NSZWMgKlNlc3Npb25TaGVsbFdpZGdldENsYXNzOwoKCmV4dGVy
biAgV2lkZ2V0Q2xhc3Mgc2hlbGxXaWRnZXRDbGFzczsKZXh0ZXJuICBXaWRnZXRDbGFzcyBvdmVy
cmlkZVNoZWxsV2lkZ2V0Q2xhc3M7CmV4dGVybiAgV2lkZ2V0Q2xhc3Mgd21TaGVsbFdpZGdldENs
YXNzOwpleHRlcm4gIFdpZGdldENsYXNzIHRyYW5zaWVudFNoZWxsV2lkZ2V0Q2xhc3M7CmV4dGVy
biAgV2lkZ2V0Q2xhc3MgdG9wTGV2ZWxTaGVsbFdpZGdldENsYXNzOwpleHRlcm4gIFdpZGdldENs
YXNzIGFwcGxpY2F0aW9uU2hlbGxXaWRnZXRDbGFzczsKZXh0ZXJuICBXaWRnZXRDbGFzcyBzZXNz
aW9uU2hlbGxXaWRnZXRDbGFzczsKCgoKIAojIDI0ICIvdXNyL1gxMVI2L2luY2x1ZGUvWG0vWG0u
aCIgMgoKIyAxICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL1hhdG9tLmgiIDEKCgoKIAoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgojIDI1ICIvdXNyL1gxMVI2L2luY2x1ZGUvWG0vWG0uaCIgMgoKIyAxICIvdXNy
L1gxMVI2L2luY2x1ZGUvWG0vWG1TdHJEZWZzLmgiIDEKIAoKCiAKIAoKIAogCiAKCiAKCiAKIAoK
CgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCiAKCiMgODk3ICIvdXNyL1gxMVI2L2luY2x1ZGUv
WG0vWG1TdHJEZWZzLmgiCgoKCgoKZXh0ZXJuICAgIGNoYXIgX1htU3RyaW5nc1tdOwoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCn0gICAKCgojIDEgIi91c3IvWDExUjYvaW5jbHVk
ZS9YMTEvU3RyaW5nRGVmcy5oIiAxCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAogCiAKCiMgMzI0ICIvdXNyL1gxMVI2L2lu
Y2x1ZGUvWDExL1N0cmluZ0RlZnMuaCIKCmV4dGVybiBjb25zdCAgY2hhciBYdFN0cmluZ3NbXTsK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMzUwNiAiL3Vzci9YMTFSNi9pbmNsdWRlL1ht
L1htU3RyRGVmcy5oIiAyCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKfSAgIAoKCgoj
IDI2ICIvdXNyL1gxMVI2L2luY2x1ZGUvWG0vWG0uaCIgMgoKIyAxICIvdXNyL1gxMVI2L2luY2x1
ZGUvWG0vVmlydEtleXMuaCIgMQogCgoKIAogCgogCiAKIAoKCgoKIyAxICIvdXNyL1gxMVI2L2lu
Y2x1ZGUvWG0vWG0uaCIgMQogCgoKIAogCgogCiAKIAoKCiMgMTQzOSAiL3Vzci9YMTFSNi9pbmNs
dWRlL1htL1htLmgiCgogIAojIDE0ICIvdXNyL1gxMVI2L2luY2x1ZGUvWG0vVmlydEtleXMuaCIg
MgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgoKZXh0ZXJuIHZvaWQgWG1UcmFuc2xhdGVLZXkoIAogICAgICAgICAgICAgICAg
ICAgICAgICBEaXNwbGF5ICpkcHksCgogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQga2V5Y29kZSwKCgoKICAgICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZXJzIG1vZGlmaWVy
cywKICAgICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZXJzICptb2RpZmllcnNfcmV0dXJuLAog
ICAgICAgICAgICAgICAgICAgICAgICBLZXlTeW0gKmtleXN5bV9yZXR1cm4pIDsKCgogCgoKCn0g
ICAKCgoKIyAyNyAiL3Vzci9YMTFSNi9pbmNsdWRlL1htL1htLmgiIDIKCgoKZXh0ZXJuICJDIiB7
CgoKCgoKCgoKCmV4dGVybiAgaW50IHhtVXNlVmVyc2lvbjsKCgogCgoKCiAKCgoKCgoKCgoKCgoK
CgoKCgpleHRlcm4gICBjaGFyICAgIF9YbVNERUZBVUxUX0ZPTlRbXTsgICAgICAgICAgICAgCmV4
dGVybiAgIGNoYXIgICAgX1htU0RFRkFVTFRfQkFDS0dST1VORFtdOyAgICAgICAKCiAKCgoKCgp0
eXBlZGVmIGVudW17IFhtRk9OVF9JU19GT05ULCBYbUZPTlRfSVNfRk9OVFNFVCB9IFhtRm9udFR5
cGU7CgplbnVtIHsgWG1TVFJJTkdfRElSRUNUSU9OX0xfVE9fUiwJWG1TVFJJTkdfRElSRUNUSU9O
X1JfVE9fTCwKICAgICAgIFhtU1RSSU5HX0RJUkVDVElPTl9ERUZBVUxUID0gMjU1CiAgICAgfTsK
CnR5cGVkZWYgdW5zaWduZWQgY2hhciBYbVN0cmluZ0RpcmVjdGlvbjsgICAgICAKdHlwZWRlZiB1
bnNpZ25lZCBjaGFyICoJWG1TdHJpbmc7CQkgCnR5cGVkZWYgWG1TdHJpbmcgKglYbVN0cmluZ1Rh
YmxlOwkJIAp0eXBlZGVmIGNoYXIgKgkJWG1TdHJpbmdDaGFyU2V0OwkgCnR5cGVkZWYgdW5zaWdu
ZWQgY2hhcglYbVN0cmluZ0NvbXBvbmVudFR5cGU7CSAKCnR5cGVkZWYgc3RydWN0IF9YbUZvbnRM
aXN0UmVjICAgICAgICpYbUZvbnRMaXN0RW50cnk7ICAgCnR5cGVkZWYgc3RydWN0IF9YbUZvbnRM
aXN0UmVjICAgICAgICpYbUZvbnRMaXN0OyAgICAgICAgCnR5cGVkZWYgc3RydWN0IF9fWG1TdHJp
bmdDb250ZXh0UmVjICpfWG1TdHJpbmdDb250ZXh0OyAgCnR5cGVkZWYgc3RydWN0IF9fWG1TdHJp
bmdSZWMgICAgICAgICpfWG1TdHJpbmc7ICAgICAgICAgCnR5cGVkZWYgc3RydWN0IF9YbXRTdHJp
bmdDb250ZXh0UmVjICpYbVN0cmluZ0NvbnRleHQ7ICAgCnR5cGVkZWYgc3RydWN0IF9YbUZvbnRM
aXN0Q29udGV4dFJlYyAqWG1Gb250Q29udGV4dDsgICAgCgplbnVtewlYbVNUUklOR19DT01QT05F
TlRfVU5LTk9XTiwJWG1TVFJJTkdfQ09NUE9ORU5UX0NIQVJTRVQsCglYbVNUUklOR19DT01QT05F
TlRfVEVYVCwJWG1TVFJJTkdfQ09NUE9ORU5UX0RJUkVDVElPTiwKICAgICAgICBYbVNUUklOR19D
T01QT05FTlRfU0VQQVJBVE9SLCAgIFhtU1RSSU5HX0NPTVBPTkVOVF9MT0NBTEVfVEVYVAoJIAoJ
fSA7CgoKCgoJCQkgCgoKIAoKCgoKCgoKCiAKCgpleHRlcm4gIFdpZGdldENsYXNzIHhtUHJpbWl0
aXZlV2lkZ2V0Q2xhc3M7CgoKdHlwZWRlZiBzdHJ1Y3QgX1htUHJpbWl0aXZlQ2xhc3NSZWMgKiBY
bVByaW1pdGl2ZVdpZGdldENsYXNzOwp0eXBlZGVmIHN0cnVjdCBfWG1QcmltaXRpdmVSZWMgICAg
ICAqIFhtUHJpbWl0aXZlV2lkZ2V0OwoKCiAKCgpleHRlcm4gIFdpZGdldENsYXNzIHhtR2FkZ2V0
Q2xhc3M7CgoKdHlwZWRlZiBzdHJ1Y3QgX1htR2FkZ2V0Q2xhc3NSZWMgKiBYbUdhZGdldENsYXNz
Owp0eXBlZGVmIHN0cnVjdCBfWG1HYWRnZXRSZWMgICAgICAqIFhtR2FkZ2V0OwoKCiAKCgoKZXh0
ZXJuICBXaWRnZXRDbGFzcyB4bU1hbmFnZXJXaWRnZXRDbGFzczsKCgp0eXBlZGVmIHN0cnVjdCBf
WG1NYW5hZ2VyQ2xhc3NSZWMgKiBYbU1hbmFnZXJXaWRnZXRDbGFzczsKdHlwZWRlZiBzdHJ1Y3Qg
X1htTWFuYWdlclJlYyAgICAgICogWG1NYW5hZ2VyV2lkZ2V0OwoKCiAKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKIAoKZW51bXsJWG1DSEFOR0VfQUxMLAkJCVhtQ0hBTkdFX05PTkUsCglYbUNIQU5HRV9X
SURUSCwJCQlYbUNIQU5HRV9IRUlHSFQKCX0gOwoKIAoKZW51bXsJWG1QSVhFTFMsCQkJWG0xMDBU
SF9NSUxMSU1FVEVSUywKCVhtMTAwMFRIX0lOQ0hFUywJCVhtMTAwVEhfUE9JTlRTLAoJWG0xMDBU
SF9GT05UX1VOSVRTCgl9IDsKCiAKCmVudW17CVhtREVTVFJPWSwJCQlYbVVOTUFQLAoJWG1ET19O
T1RISU5HCgl9IDsKZW51bXsJWG1FWFBMSUNJVCwJCQlYbVBPSU5URVIKCX0gOwogCgoKCmVudW17
CVhtTk9ORSwJCQkJWG1UQUJfR1JPVVAsCglYbVNUSUNLWV9UQUJfR1JPVVAsCQlYbUVYQ0xVU0lW
RV9UQUJfR1JPVVAKCX0gOwoKCgogCgoKCmVudW17CSAJCQlYbUJFTEwgPSAxCgl9IDsKCiAKCgoK
ZW51bXsJWG1OT19PUklFTlRBVElPTiwJCVhtVkVSVElDQUwsCglYbUhPUklaT05UQUwKCX0gOwpl
bnVtewlYbVdPUktfQVJFQSwJCQlYbU1FTlVfQkFSLAoJWG1NRU5VX1BVTExET1dOLAkJWG1NRU5V
X1BPUFVQLAoJWG1NRU5VX09QVElPTgoJfSA7CmVudW17CVhtTk9fUEFDS0lORywJCQlYbVBBQ0tf
VElHSFQsCglYbVBBQ0tfQ09MVU1OLAkJCVhtUEFDS19OT05FCgl9IDsKZW51bXsgCglYbUFMSUdO
TUVOVF9DT05URU5UU19UT1AgPSAzLAoJWG1BTElHTk1FTlRfQ09OVEVOVFNfQk9UVE9NCgl9IDsK
ZW51bXsJWG1URUFSX09GRl9FTkFCTEVELAkJWG1URUFSX09GRl9ESVNBQkxFRAoJfSA7CmVudW17
CVhtVU5QT1NULAkJIAlYbVVOUE9TVF9BTkRfUkVQTEFZCgl9IDsKZW51bXsgICBYbUxBU1RfUE9T
SVRJT04gPSAtMSwgICAgICAgICAgIFhtRklSU1RfUE9TSVRJT04KCX0gOwogCgoKCmVudW17CVht
QUxJR05NRU5UX0JFR0lOTklORywJCVhtQUxJR05NRU5UX0NFTlRFUiwKCVhtQUxJR05NRU5UX0VO
RAoJfSA7CmVudW17ICAgWG1BTElHTk1FTlRfQkFTRUxJTkVfVE9QLCAgICAgCglYbUFMSUdOTUVO
VF9CQVNFTElORV9CT1RUT00gPSAyLCBYbUFMSUdOTUVOVF9XSURHRVRfVE9QLAoJWG1BTElHTk1F
TlRfV0lER0VUX0JPVFRPTQogICAJfSA7CiAKCgoKZW51bXsJWG1GUkFNRV9HRU5FUklDX0NISUxE
LCAgICAgICAgICBYbUZSQU1FX1dPUktBUkVBX0NISUxELAogICAgICAgIFhtRlJBTUVfVElUTEVf
Q0hJTEQKCX0gOwogCgoKCmVudW17CVhtTl9PRl9NQU5ZID0gMSwJCVhtT05FX09GX01BTlkKCX0g
OwogCgoKCmVudW17CVhtQVRUQUNIX05PTkUsCQkJWG1BVFRBQ0hfRk9STSwKCVhtQVRUQUNIX09Q
UE9TSVRFX0ZPUk0sCQlYbUFUVEFDSF9XSURHRVQsCglYbUFUVEFDSF9PUFBPU0lURV9XSURHRVQs
CVhtQVRUQUNIX1BPU0lUSU9OLAoJWG1BVFRBQ0hfU0VMRgoJfSA7CmVudW17CVhtUkVTSVpFX05P
TkUsCQkJWG1SRVNJWkVfR1JPVywKCVhtUkVTSVpFX0FOWQoJfSA7CiAKCgoKZW51bXsJWG1DUl9O
T05FLAkJCVhtQ1JfSEVMUCwKCVhtQ1JfVkFMVUVfQ0hBTkdFRCwJCVhtQ1JfSU5DUkVNRU5ULAoJ
WG1DUl9ERUNSRU1FTlQsCQkJWG1DUl9QQUdFX0lOQ1JFTUVOVCwKCVhtQ1JfUEFHRV9ERUNSRU1F
TlQsCQlYbUNSX1RPX1RPUCwKCVhtQ1JfVE9fQk9UVE9NLAkJCVhtQ1JfRFJBRywKCVhtQ1JfQUNU
SVZBVEUsCQkJWG1DUl9BUk0sCglYbUNSX0RJU0FSTSwJCQlYbUNSX01BUCA9IDE2LAoJWG1DUl9V
Tk1BUCwJCQlYbUNSX0ZPQ1VTLAoJWG1DUl9MT1NJTkdfRk9DVVMsCQlYbUNSX01PRElGWUlOR19U
RVhUX1ZBTFVFLAoJWG1DUl9NT1ZJTkdfSU5TRVJUX0NVUlNPUiwJWG1DUl9FWEVDVVRFLAoJWG1D
Ul9TSU5HTEVfU0VMRUNULAkJWG1DUl9NVUxUSVBMRV9TRUxFQ1QsCglYbUNSX0VYVEVOREVEX1NF
TEVDVCwJCVhtQ1JfQlJPV1NFX1NFTEVDVCwKCVhtQ1JfREVGQVVMVF9BQ1RJT04sCQlYbUNSX0NM
SVBCT0FSRF9EQVRBX1JFUVVFU1QsCglYbUNSX0NMSVBCT0FSRF9EQVRBX0RFTEVURSwJWG1DUl9D
QVNDQURJTkcsCglYbUNSX09LLAkJCVhtQ1JfQ0FOQ0VMLAoJWG1DUl9BUFBMWSA9IDM0LAkJWG1D
Ul9OT19NQVRDSCwKCVhtQ1JfQ09NTUFORF9FTlRFUkVELAkJWG1DUl9DT01NQU5EX0NIQU5HRUQs
CglYbUNSX0VYUE9TRSwJCQlYbUNSX1JFU0laRSwKCVhtQ1JfSU5QVVQsCQkJWG1DUl9HQUlOX1BS
SU1BUlksCglYbUNSX0xPU0VfUFJJTUFSWSwJCVhtQ1JfQ1JFQVRFLAoJWG1DUl9URUFSX09GRl9B
Q1RJVkFURSwJCVhtQ1JfVEVBUl9PRkZfREVBQ1RJVkFURSwKCVhtQ1JfT0JTQ1VSRURfVFJBVkVS
U0FMLAlYbUNSX1BST1RPQ09MUwoJIAoJfSA7CiAKCgoKdHlwZWRlZiBzdHJ1Y3QKewogICAgaW50
ICAgICByZWFzb247CiAgICBYRXZlbnQgICpldmVudDsKfSBYbUFueUNhbGxiYWNrU3RydWN0OwoK
dHlwZWRlZiBzdHJ1Y3QKewogICAgaW50ICAgICByZWFzb247CiAgICBYRXZlbnQgICpldmVudDsK
ICAgIGludAkgICAgY2xpY2tfY291bnQ7Cn0gWG1BcnJvd0J1dHRvbkNhbGxiYWNrU3RydWN0OwoK
dHlwZWRlZiBzdHJ1Y3QKewogICAgaW50ICAgICByZWFzb247CiAgICBYRXZlbnQgICpldmVudDsK
ICAgIFdpbmRvdyAgd2luZG93Owp9IFhtRHJhd2luZ0FyZWFDYWxsYmFja1N0cnVjdDsKCnR5cGVk
ZWYgc3RydWN0CnsKICAgIGludCAgICAgcmVhc29uOwogICAgWEV2ZW50ICAqZXZlbnQ7CiAgICBX
aW5kb3cgIHdpbmRvdzsKICAgIGludAkgICAgY2xpY2tfY291bnQ7Cn0gWG1EcmF3bkJ1dHRvbkNh
bGxiYWNrU3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgaW50ICAgICByZWFzb247CiAgICBY
RXZlbnQgICpldmVudDsKICAgIGludAkgICAgY2xpY2tfY291bnQ7Cn0gWG1QdXNoQnV0dG9uQ2Fs
bGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICBpbnQgICAgIHJlYXNvbjsKICAgIFhF
dmVudCAgKmV2ZW50OwogICAgV2lkZ2V0ICB3aWRnZXQ7CiAgICBjaGFyICAgICpkYXRhOwogICAg
Y2hhciAgICAqY2FsbGJhY2tzdHJ1Y3Q7Cn0gWG1Sb3dDb2x1bW5DYWxsYmFja1N0cnVjdDsKCnR5
cGVkZWYgc3RydWN0CnsKICAgaW50IHJlYXNvbjsKICAgWEV2ZW50ICogZXZlbnQ7CiAgIGludCB2
YWx1ZTsKICAgaW50IHBpeGVsOwp9IFhtU2Nyb2xsQmFyQ2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVm
IHN0cnVjdAp7CiAgIGludCByZWFzb247CiAgIFhFdmVudCAqIGV2ZW50OwogICBpbnQgc2V0Owp9
IFhtVG9nZ2xlQnV0dG9uQ2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgIGludCAJ
ICAgICByZWFzb247CiAgIFhFdmVudCAgICAqZXZlbnQ7CiAgIFhtU3RyaW5nICBpdGVtOwogICBp
bnQgICAgICAgaXRlbV9sZW5ndGg7CiAgIGludCAgICAgICBpdGVtX3Bvc2l0aW9uOwogICBYbVN0
cmluZyAgKnNlbGVjdGVkX2l0ZW1zOwogICBpbnQgICAgICAgc2VsZWN0ZWRfaXRlbV9jb3VudDsK
ICAgaW50ICAgICAgICpzZWxlY3RlZF9pdGVtX3Bvc2l0aW9uczsKICAgY2hhciAgICAgIHNlbGVj
dGlvbl90eXBlOwp9IFhtTGlzdENhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QKewogICAg
aW50IHJlYXNvbjsKICAgIFhFdmVudAkqZXZlbnQ7CiAgICBYbVN0cmluZwl2YWx1ZTsKICAgIGlu
dAkJbGVuZ3RoOwp9IFhtU2VsZWN0aW9uQm94Q2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVj
dAp7CiAgICBpbnQgcmVhc29uOwogICAgWEV2ZW50CSpldmVudDsKICAgIFhtU3RyaW5nCXZhbHVl
OwogICAgaW50CQlsZW5ndGg7Cn0gWG1Db21tYW5kQ2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0
cnVjdAp7CiAgICBpbnQgCXJlYXNvbjsKICAgIFhFdmVudAkqZXZlbnQ7CiAgICBYbVN0cmluZwl2
YWx1ZTsKICAgIGludAkJbGVuZ3RoOwogICAgWG1TdHJpbmcJbWFzazsKICAgIGludAkJbWFza19s
ZW5ndGg7CiAgICBYbVN0cmluZwlkaXIgOwogICAgaW50CQlkaXJfbGVuZ3RoIDsKICAgIFhtU3Ry
aW5nICAgIHBhdHRlcm4gOwogICAgaW50CQlwYXR0ZXJuX2xlbmd0aCA7Cn0gWG1GaWxlU2VsZWN0
aW9uQm94Q2FsbGJhY2tTdHJ1Y3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgCnsKICAgaW50IHJlYXNvbjsK
ICAgWEV2ZW50ICogZXZlbnQ7CiAgIGludCB2YWx1ZTsKfSBYbVNjYWxlQ2FsbGJhY2tTdHJ1Y3Q7
CgoKIAoKCgplbnVtewlYbU1VTFRJQ0xJQ0tfRElTQ0FSRCwJCVhtTVVMVElDTElDS19LRUVQCgl9
IDsKIAoKCgplbnVtewlYbVNIQURPV19JTiA9IDcsCQlYbVNIQURPV19PVVQKCX0gOwogCgoKCmVu
dW17CVhtQVJST1dfVVAsCQkJWG1BUlJPV19ET1dOLAoJWG1BUlJPV19MRUZULAkJCVhtQVJST1df
UklHSFQKCX0gOwogCgoKCgplbnVtewlYbU5PX0xJTkUsCQkJWG1TSU5HTEVfTElORSwKCVhtRE9V
QkxFX0xJTkUsCQkJWG1TSU5HTEVfREFTSEVEX0xJTkUsCglYbURPVUJMRV9EQVNIRURfTElORSwJ
CVhtU0hBRE9XX0VUQ0hFRF9JTiwKCVhtU0hBRE9XX0VUQ0hFRF9PVVQsCQlYbVNIQURPV19FVENI
RURfSU5fREFTSCwKCVhtU0hBRE9XX0VUQ0hFRF9PVVRfREFTSCwJWG1JTlZBTElEX1NFUEFSQVRP
Ul9UWVBFCgl9IDsKCmVudW17CVhtUElYTUFQID0gMSwJCQlYbVNUUklORwoJfSA7CgogCgoKCmVu
dW17CVhtV0lORE9XLAkJICAgICAgCglYbUNVUlNPUiA9IDIKCX0gOwoKIAoKCgplbnVtewlYbU1B
WF9PTl9UT1AsCQkJWG1NQVhfT05fQk9UVE9NLAoJWG1NQVhfT05fTEVGVCwJCQlYbU1BWF9PTl9S
SUdIVAoJfSA7CiAKCgoKCgplbnVtewlYbVNJTkdMRV9TRUxFQ1QsCQlYbU1VTFRJUExFX1NFTEVD
VCwKCVhtRVhURU5ERURfU0VMRUNULAkJWG1CUk9XU0VfU0VMRUNUCgl9IDsKZW51bXsJWG1TVEFU
SUMsCQkJWG1EWU5BTUlDCgl9IDsKIAoKCgoKCmVudW17CVhtVkFSSUFCTEUsCQkJWG1DT05TVEFO
VCwKCVhtUkVTSVpFX0lGX1BPU1NJQkxFCgl9IDsKZW51bXsJWG1BVVRPTUFUSUMsCQkJWG1BUFBM
SUNBVElPTl9ERUZJTkVECgl9IDsKZW51bXsJIAkJCVhtQVNfTkVFREVEID0gMQoJfSA7CgoKCgoK
CgoKCgoKIAoKCgoKCmVudW17CVhtQ09NTUFORF9BQk9WRV9XT1JLU1BBQ0UsCVhtQ09NTUFORF9C
RUxPV19XT1JLU1BBQ0UKCX0gOwogCgoKCgoKZW51bXsJWG1NVUxUSV9MSU5FX0VESVQsCQlYbVNJ
TkdMRV9MSU5FX0VESVQKCX0gOwoKdHlwZWRlZiBlbnVtewoJWG1URVhUX0ZPUldBUkQsCglYbVRF
WFRfQkFDS1dBUkQKCX0gWG1UZXh0RGlyZWN0aW9uOwoKdHlwZWRlZiBsb25nIFhtVGV4dFBvc2l0
aW9uOwp0eXBlZGVmIEF0b20gWG1UZXh0Rm9ybWF0OwoKCgoKCgoKdHlwZWRlZiBlbnVtewoJWG1T
RUxFQ1RfUE9TSVRJT04sCQlYbVNFTEVDVF9XSElURVNQQUNFLAoJWG1TRUxFQ1RfV09SRCwJCQlY
bVNFTEVDVF9MSU5FLAoJWG1TRUxFQ1RfQUxMLAkJCVhtU0VMRUNUX1BBUkFHUkFQSAoJfSBYbVRl
eHRTY2FuVHlwZSA7Cgp0eXBlZGVmIGVudW17CglYbUhJR0hMSUdIVF9OT1JNQUwsCQlYbUhJR0hM
SUdIVF9TRUxFQ1RFRCwKCVhtSElHSExJR0hUX1NFQ09OREFSWV9TRUxFQ1RFRAoJfSBYbUhpZ2hs
aWdodE1vZGUgOwoKIAoKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciAqcHRyOyAgICAgICAgICAg
ICAgICAgICAKICAgIGludCBsZW5ndGg7ICAgICAgICAgICAgICAgICAgCiAgICBYbVRleHRGb3Jt
YXQgZm9ybWF0OyAgICAgICAgCn0gWG1UZXh0QmxvY2tSZWMsICpYbVRleHRCbG9jazsKCnR5cGVk
ZWYgc3RydWN0CnsKICAgIGludCByZWFzb247CiAgICBYRXZlbnQgICpldmVudDsKICAgIEJvb2xl
YW4gZG9pdDsKICAgIGxvbmcgY3Vyckluc2VydCwgbmV3SW5zZXJ0OwogICAgbG9uZyBzdGFydFBv
cywgZW5kUG9zOwogICAgWG1UZXh0QmxvY2sgdGV4dDsKfSBYbVRleHRWZXJpZnlDYWxsYmFja1N0
cnVjdCwgKlhtVGV4dFZlcmlmeVB0cjsKCiAKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICB3Y2hhcl90
ICp3Y3NwdHI7ICAgICAgICAgICAgIAogICAgaW50IGxlbmd0aDsgICAgICAgICAgICAgICAgICAK
fSBYbVRleHRCbG9ja1JlY1djcywgKlhtVGV4dEJsb2NrV2NzOwoKdHlwZWRlZiBzdHJ1Y3QKewog
ICAgaW50IHJlYXNvbjsKICAgIFhFdmVudCAgKmV2ZW50OwogICAgQm9vbGVhbiBkb2l0OwogICAg
bG9uZyBjdXJySW5zZXJ0LCBuZXdJbnNlcnQ7CiAgICBsb25nIHN0YXJ0UG9zLCBlbmRQb3M7CiAg
ICBYbVRleHRCbG9ja1djcyB0ZXh0Owp9IFhtVGV4dFZlcmlmeUNhbGxiYWNrU3RydWN0V2NzLCAq
WG1UZXh0VmVyaWZ5UHRyV2NzOwoKIAoKCgoKCgoKIAoKCgoKCgogCgplbnVtewlYbURJQUxPR19O
T05FLAkJCVhtRElBTE9HX0FQUExZX0JVVFRPTiwKCVhtRElBTE9HX0NBTkNFTF9CVVRUT04sCQlY
bURJQUxPR19ERUZBVUxUX0JVVFRPTiwKCVhtRElBTE9HX09LX0JVVFRPTiwJCVhtRElBTE9HX0ZJ
TFRFUl9MQUJFTCwKCVhtRElBTE9HX0ZJTFRFUl9URVhULAkJWG1ESUFMT0dfSEVMUF9CVVRUT04s
CglYbURJQUxPR19MSVNULAkJCVhtRElBTE9HX0xJU1RfTEFCRUwsCglYbURJQUxPR19NRVNTQUdF
X0xBQkVMLAkJWG1ESUFMT0dfU0VMRUNUSU9OX0xBQkVMLAoJWG1ESUFMT0dfU1lNQk9MX0xBQkVM
LAkJWG1ESUFMT0dfVEVYVCwKCVhtRElBTE9HX1NFUEFSQVRPUiwJCVhtRElBTE9HX0RJUl9MSVNU
LAoJWG1ESUFMT0dfRElSX0xJU1RfTEFCRUwKCX0gOwoKCgoKCgoKCiAKCmVudW17CVhtRElBTE9H
X01PREVMRVNTLAkJWG1ESUFMT0dfUFJJTUFSWV9BUFBMSUNBVElPTl9NT0RBTCwKCVhtRElBTE9H
X0ZVTExfQVBQTElDQVRJT05fTU9EQUwsWG1ESUFMT0dfU1lTVEVNX01PREFMCgl9IDsKCiAKCgoK
IAoKCgogCgplbnVtewlYbVBMQUNFX1RPUCwJCQlYbVBMQUNFX0FCT1ZFX1NFTEVDVElPTiwKCVht
UExBQ0VfQkVMT1dfU0VMRUNUSU9OCgl9IDsKCiAKCgoKCgogCgplbnVtewlYbURJQUxPR19XT1JL
X0FSRUEsCQlYbURJQUxPR19QUk9NUFQsCglYbURJQUxPR19TRUxFQ1RJT04sCQlYbURJQUxPR19D
T01NQU5ELAoJWG1ESUFMT0dfRklMRV9TRUxFQ1RJT04KCX0gOwoKIAoKCgogCgplbnVtewlYbURJ
QUxPR19URU1QTEFURSwJCVhtRElBTE9HX0VSUk9SLAoJWG1ESUFMT0dfSU5GT1JNQVRJT04sCQlY
bURJQUxPR19NRVNTQUdFLAoJWG1ESUFMT0dfUVVFU1RJT04sCQlYbURJQUxPR19XQVJOSU5HLAoJ
WG1ESUFMT0dfV09SS0lORwoJfSA7CgogCgp0eXBlZGVmIGVudW17CglYbVZJU0lCSUxJVFlfVU5P
QlNDVVJFRCwJWG1WSVNJQklMSVRZX1BBUlRJQUxMWV9PQlNDVVJFRCwKCVhtVklTSUJJTElUWV9G
VUxMWV9PQlNDVVJFRAoJfSBYbVZpc2liaWxpdHkgOwoKCnR5cGVkZWYgZW51bXsKCVhtVFJBVkVS
U0VfQ1VSUkVOVCwJCVhtVFJBVkVSU0VfTkVYVCwKCVhtVFJBVkVSU0VfUFJFViwJCVhtVFJBVkVS
U0VfSE9NRSwKCVhtVFJBVkVSU0VfTkVYVF9UQUJfR1JPVVAsCVhtVFJBVkVSU0VfUFJFVl9UQUJf
R1JPVVAsCglYbVRSQVZFUlNFX1VQLAkJCVhtVFJBVkVSU0VfRE9XTiwKCVhtVFJBVkVSU0VfTEVG
VCwJCVhtVFJBVkVSU0VfUklHSFQKCX0gWG1UcmF2ZXJzYWxEaXJlY3Rpb24gOwoKdHlwZWRlZiBz
dHJ1Y3QgX1htVHJhdmVyc2VPYnNjdXJlZENhbGxiYWNrU3RydWN0CnsJaW50CQkJcmVhc29uIDsK
CVhFdmVudCAqCQlldmVudCA7CglXaWRnZXQJCQl0cmF2ZXJzYWxfZGVzdGluYXRpb24gOwoJWG1U
cmF2ZXJzYWxEaXJlY3Rpb24JZGlyZWN0aW9uIDsKCX0gWG1UcmF2ZXJzZU9ic2N1cmVkQ2FsbGJh
Y2tTdHJ1Y3QgOwoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgWG1OYXZpZ2F0aW9uVHlwZTsKCgog
CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFhtQnV0dG9uVHlwZTsKdHlwZWRlZiBYbUJ1dHRv
blR5cGUgKiBYbUJ1dHRvblR5cGVUYWJsZTsKdHlwZWRlZiBLZXlTeW0gKiBYbUtleVN5bVRhYmxl
Owp0eXBlZGVmIFhtU3RyaW5nQ2hhclNldCAqIFhtU3RyaW5nQ2hhclNldFRhYmxlOwoKZW51bXsJ
WG1QVVNIQlVUVE9OID0gMSwJCVhtVE9HR0xFQlVUVE9OLAoJWG1SQURJT0JVVFRPTiwJCQlYbUNB
U0NBREVCVVRUT04sCglYbVNFUEFSQVRPUiwJCQlYbURPVUJMRV9TRVBBUkFUT1IsCglYbVRJVExF
Cgl9IDsKCgoKIAoKCgp0eXBlZGVmIFh0UG9pbnRlcgkoKlhtUmVzb3VyY2VCYXNlUHJvYykoIFdp
ZGdldCwgWHRQb2ludGVyKSA7CgoKdHlwZWRlZiBzdHJ1Y3QgX1htU2Vjb25kYXJ5UmVzb3VyY2VE
YXRhUmVjewogICAgWG1SZXNvdXJjZUJhc2VQcm9jCWJhc2VfcHJvYzsKICAgIFh0UG9pbnRlcgkJ
Y2xpZW50X2RhdGE7CiAgICBTdHJpbmcJCW5hbWU7CiAgICBTdHJpbmcJCXJlc19jbGFzczsKICAg
IFh0UmVzb3VyY2VMaXN0CXJlc291cmNlczsKICAgIENhcmRpbmFsCQludW1fcmVzb3VyY2VzOwp9
WG1TZWNvbmRhcnlSZXNvdXJjZURhdGFSZWMsICpYbVNlY29uZGFyeVJlc291cmNlRGF0YTsKCiAK
CgoKCgoKZXh0ZXJuIENhcmRpbmFsIFhtR2V0U2Vjb25kYXJ5UmVzb3VyY2VEYXRhKCAKICAgICAg
ICAgICAgICAgICAgICAgICAgV2lkZ2V0Q2xhc3Mgd19jbGFzcywKICAgICAgICAgICAgICAgICAg
ICAgICAgWG1TZWNvbmRhcnlSZXNvdXJjZURhdGEgKipzZWNvbmRhcnlEYXRhUnRuKSA7CgoKIAoK
IAojIDczMiAiL3Vzci9YMTFSNi9pbmNsdWRlL1htL1htLmgiCgoKZXh0ZXJuIEJvb2xlYW4gWG1J
bnN0YWxsSW1hZ2UoIAogICAgICAgICAgICAgICAgICAgICAgICBYSW1hZ2UgKmltYWdlLAogICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICppbWFnZV9uYW1lKSA7CmV4dGVybiBCb29sZWFuIFht
VW5pbnN0YWxsSW1hZ2UoIAogICAgICAgICAgICAgICAgICAgICAgICBYSW1hZ2UgKmltYWdlKSA7
CmV4dGVybiBQaXhtYXAgWG1HZXRQaXhtYXAoIAogICAgICAgICAgICAgICAgICAgICAgICBTY3Jl
ZW4gKnNjcmVlbiwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaW1hZ2VfbmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgUGl4ZWwgZm9yZWdyb3VuZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgUGl4ZWwgYmFja2dyb3VuZCkgOwpleHRlcm4gUGl4bWFwIFhtR2V0UGl4bWFwQnlEZXB0
aCggCiAgICAgICAgICAgICAgICAgICAgICAgIFNjcmVlbiAqc2NyZWVuLAogICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICppbWFnZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBQaXhl
bCBmb3JlZ3JvdW5kLAogICAgICAgICAgICAgICAgICAgICAgICBQaXhlbCBiYWNrZ3JvdW5kLAoJ
CQlpbnQgZGVwdGgpIDsKZXh0ZXJuIEJvb2xlYW4gWG1EZXN0cm95UGl4bWFwKCAKICAgICAgICAg
ICAgICAgICAgICAgICAgU2NyZWVuICpzY3JlZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIFBp
eG1hcCBwaXhtYXApIDsKCgogCgogCgoKCgoKCmV4dGVybiB2b2lkIFhtVXBkYXRlRGlzcGxheSgg
CiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCB3KSA7CgoKIAoKIAoKdHlwZWRlZiBsb25n
IFhtT2Zmc2V0Owp0eXBlZGVmIFhtT2Zmc2V0ICpYbU9mZnNldFB0cjsKCiAKCgoKCgoKCgpleHRl
cm4gdm9pZCBYbVJlc29sdmVQYXJ0T2Zmc2V0cyggCiAgICAgICAgICAgICAgICAgICAgICAgIFdp
ZGdldENsYXNzIHdfY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgIFhtT2Zmc2V0UHRyICpv
ZmZzZXQpIDsKZXh0ZXJuIHZvaWQgWG1SZXNvbHZlQWxsUGFydE9mZnNldHMoIAogICAgICAgICAg
ICAgICAgICAgICAgICBXaWRnZXRDbGFzcyB3X2NsYXNzLAogICAgICAgICAgICAgICAgICAgICAg
ICBYbU9mZnNldFB0ciAqb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICBYbU9mZnNldFB0
ciAqY29uc3RyYWludF9vZmZzZXQpIDsKZXh0ZXJuIEJvb2xlYW4gWG1XaWRnZXRHZXRCYXNlbGlu
ZXMoCiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCB3aWQsCiAgICAgICAgICAgICAgICAg
ICAgICAgIERpbWVuc2lvbiAqKmJhc2VsaW5lcywKICAgICAgICAgICAgICAgICAgICAgICAgaW50
ICpsaW5lX2NvdW50KTsKZXh0ZXJuIEJvb2xlYW4gWG1XaWRnZXRHZXREaXNwbGF5UmVjdCgKICAg
ICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHdpZCwKICAgICAgICAgICAgICAgICAgICAgICAg
WFJlY3RhbmdsZSAqZGlzcGxheXJlY3QpOwoKCiAKCiAKIyA4MTQgIi91c3IvWDExUjYvaW5jbHVk
ZS9YbS9YbS5oIgoKCmV4dGVybiB2b2lkIFhtUmVnaXN0ZXJDb252ZXJ0ZXJzKCB2b2lkICkgOwpl
eHRlcm4gdm9pZCBYbUN2dFN0cmluZ1RvVW5pdFR5cGUoIAogICAgICAgICAgICAgICAgICAgICAg
ICBYcm1WYWx1ZVB0ciBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCAqbnVt
X2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgIFhybVZhbHVlICpmcm9tX3ZhbCwKICAgICAg
ICAgICAgICAgICAgICAgICAgWHJtVmFsdWUgKnRvX3ZhbCkgOwpleHRlcm4gY2hhciAqIFhtUmVn
aXN0ZXJTZWdtZW50RW5jb2RpbmcoIAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmb250
bGlzdF90YWcsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmN0X2VuY29kaW5nKSA7CmV4
dGVybiBjaGFyICogWG1NYXBTZWdtZW50RW5jb2RpbmcoIAogICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICpmb250bGlzdF90YWcpIDsKZXh0ZXJuIFhtU3RyaW5nIFhtQ3Z0Q1RUb1htU3RyaW5n
KCAKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdGV4dCkgOwpleHRlcm4gQm9vbGVhbiBY
bUN2dFRleHRUb1htU3RyaW5nKCAKICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxheSAqZGlz
cGxheSwKICAgICAgICAgICAgICAgICAgICAgICAgWHJtVmFsdWVQdHIgYXJncywKICAgICAgICAg
ICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9hcmdzLAogICAgICAgICAgICAgICAgICAgICAg
ICBYcm1WYWx1ZSAqZnJvbV92YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIFhybVZhbHVlICp0
b192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciAqY29udmVydGVyX2RhdGEp
IDsKZXh0ZXJuIGNoYXIgKiBYbUN2dFhtU3RyaW5nVG9DVCggCiAgICAgICAgICAgICAgICAgICAg
ICAgIFhtU3RyaW5nIHN0cmluZykgOwpleHRlcm4gQm9vbGVhbiBYbUN2dFhtU3RyaW5nVG9UZXh0
KCAKICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxheSAqZGlzcGxheSwKICAgICAgICAgICAg
ICAgICAgICAgICAgWHJtVmFsdWVQdHIgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgQ2Fy
ZGluYWwgKm51bV9hcmdzLAogICAgICAgICAgICAgICAgICAgICAgICBYcm1WYWx1ZSAqZnJvbV92
YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIFhybVZhbHVlICp0b192YWwsCiAgICAgICAgICAg
ICAgICAgICAgICAgIFh0UG9pbnRlciAqY29udmVydGVyX2RhdGEpIDsKCgogCgogCiMgODYwICIv
dXNyL1gxMVI2L2luY2x1ZGUvWG0vWG0uaCIKCgpleHRlcm4gaW50IFhtQ29udmVydFVuaXRzKCAK
ICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGRpbWVuc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50
IGZyb21fdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IGZyb21fdmFs
LAogICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBpbnQgdG9fdHlwZSkgOwpleHRlcm4g
aW50IFhtQ3Z0VG9Ib3Jpem9udGFsUGl4ZWxzKCAKICAgICAgICAgICAgICAgICAgICAgICAgU2Ny
ZWVuICpzY3JlZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBmcm9tX3Zh
bCwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IGZyb21fdHlwZSkgOwpleHRl
cm4gaW50IFhtQ3Z0VG9WZXJ0aWNhbFBpeGVscyggCiAgICAgICAgICAgICAgICAgICAgICAgIFNj
cmVlbiAqc2NyZWVuLAogICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBpbnQgZnJvbV92
YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBmcm9tX3R5cGUpIDsKZXh0
ZXJuIGludCBYbUN2dEZyb21Ib3Jpem9udGFsUGl4ZWxzKCAKICAgICAgICAgICAgICAgICAgICAg
ICAgU2NyZWVuICpzY3JlZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBm
cm9tX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHRvX3R5cGUpIDsK
ZXh0ZXJuIGludCBYbUN2dEZyb21WZXJ0aWNhbFBpeGVscyggCiAgICAgICAgICAgICAgICAgICAg
ICAgIFNjcmVlbiAqc2NyZWVuLAogICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBpbnQg
ZnJvbV92YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCB0b190eXBlKSA7
CmV4dGVybiB2b2lkIFhtU2V0Rm9udFVuaXRzKCAKICAgICAgICAgICAgICAgICAgICAgICAgRGlz
cGxheSAqZGlzcGxheSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhfdmFsdWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGludCB2X3ZhbHVlKSA7CmV4dGVybiB2b2lkIFhtU2V0Rm9udFVu
aXQoIAogICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5ICpkaXNwbGF5LAogICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgdmFsdWUpIDsKCgogCgogCgoKCgoKCgpleHRlcm4gdm9pZCBYbVNl
dE1lbnVDdXJzb3IoIAogICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5ICpkaXNwbGF5LAog
ICAgICAgICAgICAgICAgICAgICAgICBDdXJzb3IgY3Vyc29ySWQpIDsKZXh0ZXJuIEN1cnNvciBY
bUdldE1lbnVDdXJzb3IoIAogICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5ICpkaXNwbGF5
KSA7CgoKIAoKIAojIDkyMiAiL3Vzci9YMTFSNi9pbmNsdWRlL1htL1htLmgiCgoKZXh0ZXJuIFdp
ZGdldCBYbUNyZWF0ZVNpbXBsZU1lbnVCYXIoIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRn
ZXQgcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICBDYXJk
aW5hbCBhcmdfY291bnQpIDsKZXh0ZXJuIFdpZGdldCBYbUNyZWF0ZVNpbXBsZVBvcHVwTWVudSgg
CiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCBwYXJlbnQsCiAgICAgICAgICAgICAgICAg
ICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBBcmdMaXN0IGFyZ3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgIENhcmRpbmFsIGFyZ19jb3VudCkgOwpleHRlcm4gV2lk
Z2V0IFhtQ3JlYXRlU2ltcGxlUHVsbGRvd25NZW51KCAKICAgICAgICAgICAgICAgICAgICAgICAg
V2lkZ2V0IHBhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgIEFyZ0xpc3QgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAg
Q2FyZGluYWwgYXJnX2NvdW50KSA7CmV4dGVybiBXaWRnZXQgWG1DcmVhdGVTaW1wbGVPcHRpb25N
ZW51KCAKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHBhcmVudCwKICAgICAgICAgICAg
ICAgICAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIEFyZ0xpc3Qg
YXJncywKICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgYXJnX2NvdW50KSA7CmV4dGVy
biBXaWRnZXQgWG1DcmVhdGVTaW1wbGVSYWRpb0JveCggCiAgICAgICAgICAgICAgICAgICAgICAg
IFdpZGdldCBwYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lLAogICAg
ICAgICAgICAgICAgICAgICAgICBBcmdMaXN0IGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAg
IENhcmRpbmFsIGFyZ19jb3VudCkgOwpleHRlcm4gV2lkZ2V0IFhtQ3JlYXRlU2ltcGxlQ2hlY2tC
b3goIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgcGFyZW50LAogICAgICAgICAgICAg
ICAgICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBh
cmdzLAogICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCBhcmdfY291bnQpIDsKCgogCgog
CgoKCgoKCgoKZXh0ZXJuIFdpZGdldCBYbVZhQ3JlYXRlU2ltcGxlTWVudUJhciggCgkJCVdpZGdl
dCBwYXJlbnQsCgkJCVN0cmluZyBuYW1lLAoJCQkuLi4pIDsKZXh0ZXJuIFdpZGdldCBYbVZhQ3Jl
YXRlU2ltcGxlUG9wdXBNZW51KAoJCQlXaWRnZXQgcGFyZW50LAoJCQlTdHJpbmcgbmFtZSwKCQkJ
WHRDYWxsYmFja1Byb2MgY2FsbGJhY2ssCgkJCS4uLikgOwpleHRlcm4gV2lkZ2V0IFhtVmFDcmVh
dGVTaW1wbGVQdWxsZG93bk1lbnUoIAoJCQlXaWRnZXQgcGFyZW50LAoJCQlTdHJpbmcgbmFtZSwK
CQkJaW50IHBvc3RfZnJvbV9idXR0b24sCgkJCVh0Q2FsbGJhY2tQcm9jIGNhbGxiYWNrLAoJCQku
Li4pIDsKZXh0ZXJuIFdpZGdldCBYbVZhQ3JlYXRlU2ltcGxlT3B0aW9uTWVudSgKCQkJV2lkZ2V0
IHBhcmVudCwKCQkJU3RyaW5nIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5n
IG9wdGlvbl9sYWJlbCwKICAgICAgICAgICAgICAgICAgICAgICAgS2V5U3ltIG9wdGlvbl9tbmVt
b25pYywKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1dHRvbl9zZXQsCiAgICAgICAgICAg
ICAgICAgICAgICAgIFh0Q2FsbGJhY2tQcm9jIGNhbGxiYWNrLAoJCQkuLi4pIDsKZXh0ZXJuIFdp
ZGdldCBYbVZhQ3JlYXRlU2ltcGxlUmFkaW9Cb3goIAoJCQlXaWRnZXQgcGFyZW50LAoJCQlTdHJp
bmcgbmFtZSwKCQkJaW50IGJ1dHRvbl9zZXQsCgkJCVh0Q2FsbGJhY2tQcm9jIGNhbGxiYWNrLAoJ
CQkuLi4pIDsKZXh0ZXJuIFdpZGdldCBYbVZhQ3JlYXRlU2ltcGxlQ2hlY2tCb3goIAoJCQlXaWRn
ZXQgcGFyZW50LAoJCQlTdHJpbmcgbmFtZSwKCQkJWHRDYWxsYmFja1Byb2MgY2FsbGJhY2ssCgkJ
CS4uLikgOwoKIAoKIAoKCgoKCgoKZXh0ZXJuIFdpZGdldCBYbVRyYWNraW5nRXZlbnQoIAogICAg
ICAgICAgICAgICAgICAgICAgICBXaWRnZXQgd2lkZ2V0LAogICAgICAgICAgICAgICAgICAgICAg
ICBDdXJzb3IgY3Vyc29yLAoKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbmZpbmVUbywK
CgoKICAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpwZXYpIDsKZXh0ZXJuIFdpZGdldCBY
bVRyYWNraW5nTG9jYXRlKCAKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHdpZGdldCwK
ICAgICAgICAgICAgICAgICAgICAgICAgQ3Vyc29yIGN1cnNvciwKCiAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBjb25maW5lVG8pIDsKCgoKCgogCgogCgoKCnR5cGVkZWYgdm9pZCAoKlhtQ29s
b3JQcm9jKSAoWENvbG9yICpiZ19jb2xvciwgWENvbG9yICpmZ19jb2xvciwKCVhDb2xvciAqc2Vs
X2NvbG9yLCBYQ29sb3IgKnRzX2NvbG9yLCBYQ29sb3IgKmJzX2NvbG9yKTsKCgogCgoKCgoKCgoK
CmV4dGVybiBYbUNvbG9yUHJvYyBYbVNldENvbG9yQ2FsY3VsYXRpb24oIAogICAgICAgICAgICAg
ICAgICAgICAgICBYbUNvbG9yUHJvYyBwcm9jKSA7CmV4dGVybiBYbUNvbG9yUHJvYyBYbUdldENv
bG9yQ2FsY3VsYXRpb24oIHZvaWQgKSA7CmV4dGVybiB2b2lkIFhtR2V0Q29sb3JzKCAKICAgICAg
ICAgICAgICAgICAgICAgICAgU2NyZWVuICpzY3JlZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
IENvbG9ybWFwIGNvbG9yX21hcCwKICAgICAgICAgICAgICAgICAgICAgICAgUGl4ZWwgYmFja2dy
b3VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgUGl4ZWwgKmZvcmVncm91bmRfcmV0LAogICAg
ICAgICAgICAgICAgICAgICAgICBQaXhlbCAqdG9wX3NoYWRvd19yZXQsCiAgICAgICAgICAgICAg
ICAgICAgICAgIFBpeGVsICpib3R0b21fc2hhZG93X3JldCwKICAgICAgICAgICAgICAgICAgICAg
ICAgUGl4ZWwgKnNlbGVjdF9yZXQpIDsKZXh0ZXJuIHZvaWQgWG1DaGFuZ2VDb2xvcigKICAgICAg
ICAgICAgICAgICAgICAgICAgV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAgICAgICAgICAgICAg
UGl4ZWwgYmFja2dyb3VuZCkgOwoKCiAKCiAKIyAxMTIxICIvdXNyL1gxMVI2L2luY2x1ZGUvWG0v
WG0uaCIKCgpleHRlcm4gWG1TdHJpbmcgWG1TdHJpbmdDcmVhdGUoIAogICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICp0ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZ0NoYXJT
ZXQgY2hhcnNldCkgOwpleHRlcm4gWG1TdHJpbmcgWG1TdHJpbmdDcmVhdGVTaW1wbGUoIAogICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICp0ZXh0KSA7CmV4dGVybiBYbVN0cmluZyBYbVN0cmlu
Z0NyZWF0ZUxvY2FsaXplZCggCiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0ZXh0KSA7
CmV4dGVybiBYbVN0cmluZyBYbVN0cmluZ0RpcmVjdGlvbkNyZWF0ZSggCgogICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZGlyZWN0aW9uKSA7CgoKCmV4dGVybiBYbVN0cmluZyBYbVN0cmluZ1Nl
cGFyYXRvckNyZWF0ZSggdm9pZCApIDsKZXh0ZXJuIFhtU3RyaW5nIFhtU3RyaW5nU2VnbWVudENy
ZWF0ZSggCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgIFhtU3RyaW5nQ2hhclNldCBjaGFyc2V0LAoKICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGRpcmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNlcGFyYXRvcikg
OwoKCgoKZXh0ZXJuIFhtU3RyaW5nIFhtU3RyaW5nTHRvUkNyZWF0ZSggCiAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nQ2hh
clNldCBjaGFyc2V0KSA7CmV4dGVybiBYbVN0cmluZyBYbVN0cmluZ0NyZWF0ZUx0b1IoIAogICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICp0ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBY
bVN0cmluZ0NoYXJTZXQgY2hhcnNldCkgOwpleHRlcm4gQm9vbGVhbiBYbVN0cmluZ0luaXRDb250
ZXh0KCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmdDb250ZXh0ICpjb250ZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZyBzdHJpbmcpIDsKZXh0ZXJuIHZvaWQgWG1T
dHJpbmdGcmVlQ29udGV4dCggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nQ29udGV4
dCBjb250ZXh0KSA7CmV4dGVybiBYbVN0cmluZ0NvbXBvbmVudFR5cGUgWG1TdHJpbmdHZXROZXh0
Q29tcG9uZW50KCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmdDb250ZXh0IGNvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKip0ZXh0LAogICAgICAgICAgICAgICAg
ICAgICAgICBYbVN0cmluZ0NoYXJTZXQgKmNoYXJzZXQsCiAgICAgICAgICAgICAgICAgICAgICAg
IFhtU3RyaW5nRGlyZWN0aW9uICpkaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgIFht
U3RyaW5nQ29tcG9uZW50VHlwZSAqdW5rbm93bl90YWcsCiAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHNob3J0ICp1bmtub3duX2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgY2hhciAqKnVua25vd25fdmFsdWUpIDsKZXh0ZXJuIFhtU3RyaW5nQ29tcG9uZW50
VHlwZSBYbVN0cmluZ1BlZWtOZXh0Q29tcG9uZW50KCAKICAgICAgICAgICAgICAgICAgICAgICAg
WG1TdHJpbmdDb250ZXh0IGNvbnRleHQpIDsKZXh0ZXJuIEJvb2xlYW4gWG1TdHJpbmdHZXROZXh0
U2VnbWVudCggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nQ29udGV4dCBjb250ZXh0
LAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqdGV4dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgWG1TdHJpbmdDaGFyU2V0ICpjaGFyc2V0LAogICAgICAgICAgICAgICAgICAgICAgICBY
bVN0cmluZ0RpcmVjdGlvbiAqZGlyZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBCb29s
ZWFuICpzZXBhcmF0b3IpIDsKZXh0ZXJuIEJvb2xlYW4gWG1TdHJpbmdHZXRMdG9SKCAKICAgICAg
ICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAg
ICBYbVN0cmluZ0NoYXJTZXQgY2hhcnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq
KnRleHQpIDsKZXh0ZXJuIFhtRm9udExpc3RFbnRyeSBYbUZvbnRMaXN0RW50cnlDcmVhdGUoIAog
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp0YWcsCiAgICAgICAgICAgICAgICAgICAgICAg
IFhtRm9udFR5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIGZvbnQp
IDsKZXh0ZXJuIHZvaWQgWG1Gb250TGlzdEVudHJ5RnJlZSggCiAgICAgICAgICAgICAgICAgICAg
ICAgIFhtRm9udExpc3RFbnRyeSAqZW50cnkpIDsKZXh0ZXJuIFh0UG9pbnRlciBYbUZvbnRMaXN0
RW50cnlHZXRGb250KCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1Gb250TGlzdEVudHJ5IGVu
dHJ5LAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRUeXBlICp0eXBlUmV0dXJuKSA7CmV4
dGVybiBjaGFyICogWG1Gb250TGlzdEVudHJ5R2V0VGFnKCAKICAgICAgICAgICAgICAgICAgICAg
ICAgWG1Gb250TGlzdEVudHJ5IGVudHJ5KSA7CmV4dGVybiBYbUZvbnRMaXN0IFhtRm9udExpc3RB
cHBlbmRFbnRyeSggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtRm9udExpc3Qgb2xkLAogICAg
ICAgICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0RW50cnkgZW50cnkpIDsKZXh0ZXJuIFhtRm9u
dExpc3RFbnRyeSBYbUZvbnRMaXN0TmV4dEVudHJ5KCAKICAgICAgICAgICAgICAgICAgICAgICAg
WG1Gb250Q29udGV4dCBjb250ZXh0KSA7CmV4dGVybiBYbUZvbnRMaXN0IFhtRm9udExpc3RSZW1v
dmVFbnRyeSggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtRm9udExpc3Qgb2xkLAogICAgICAg
ICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0RW50cnkgZW50cnkpIDsKZXh0ZXJuIFhtRm9udExp
c3RFbnRyeSBYbUZvbnRMaXN0RW50cnlMb2FkKCAKICAgICAgICAgICAgICAgICAgICAgICAgRGlz
cGxheSAqZGlzcGxheSwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9udE5hbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgIFhtRm9udFR5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqdGFnKSA7CmV4dGVybiBYbUZvbnRMaXN0IFhtRm9udExpc3RDcmVhdGUoIAog
ICAgICAgICAgICAgICAgICAgICAgICBYRm9udFN0cnVjdCAqZm9udCwKICAgICAgICAgICAgICAg
ICAgICAgICAgWG1TdHJpbmdDaGFyU2V0IGNoYXJzZXQpIDsKZXh0ZXJuIFhtRm9udExpc3QgWG1T
dHJpbmdDcmVhdGVGb250TGlzdCggCiAgICAgICAgICAgICAgICAgICAgICAgIFhGb250U3RydWN0
ICpmb250LAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZ0NoYXJTZXQgY2hhcnNldCkg
OwpleHRlcm4gdm9pZCBYbUZvbnRMaXN0RnJlZSggCiAgICAgICAgICAgICAgICAgICAgICAgIFht
Rm9udExpc3QgZm9udGxpc3QpIDsKZXh0ZXJuIFhtRm9udExpc3QgWG1Gb250TGlzdEFkZCggCiAg
ICAgICAgICAgICAgICAgICAgICAgIFhtRm9udExpc3Qgb2xkLAogICAgICAgICAgICAgICAgICAg
ICAgICBYRm9udFN0cnVjdCAqZm9udCwKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmdD
aGFyU2V0IGNoYXJzZXQpIDsKZXh0ZXJuIFhtRm9udExpc3QgWG1Gb250TGlzdENvcHkoIAogICAg
ICAgICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0IGZvbnRsaXN0KSA7CmV4dGVybiBCb29sZWFu
IFhtRm9udExpc3RJbml0Rm9udENvbnRleHQoIAogICAgICAgICAgICAgICAgICAgICAgICBYbUZv
bnRDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0IGZv
bnRsaXN0KSA7CmV4dGVybiBCb29sZWFuIFhtRm9udExpc3RHZXROZXh0Rm9udCggCiAgICAgICAg
ICAgICAgICAgICAgICAgIFhtRm9udENvbnRleHQgY29udGV4dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgWG1TdHJpbmdDaGFyU2V0ICpjaGFyc2V0LAogICAgICAgICAgICAgICAgICAgICAgICBY
Rm9udFN0cnVjdCAqKmZvbnQpIDsKZXh0ZXJuIHZvaWQgWG1Gb250TGlzdEZyZWVGb250Q29udGV4
dCggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtRm9udENvbnRleHQgY29udGV4dCkgOwpleHRl
cm4gWG1TdHJpbmcgWG1TdHJpbmdDb25jYXQoIAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0
cmluZyBhLAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZyBiKSA7CmV4dGVybiBYbVN0
cmluZyBYbVN0cmluZ05Db25jYXQoIAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZyBm
aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc2Vjb25kLAogICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgbikgOwpleHRlcm4gWG1TdHJpbmcgWG1TdHJpbmdDb3B5KCAKICAg
ICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3RyaW5nKSA7CmV4dGVybiBYbVN0cmluZyBY
bVN0cmluZ05Db3B5KCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3RyLAogICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgbikgOwpleHRlcm4gQm9vbGVhbiBYbVN0cmluZ0J5dGVD
b21wYXJlKCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgYTEsCiAgICAgICAgICAg
ICAgICAgICAgICAgIFhtU3RyaW5nIGIxKSA7CmV4dGVybiBCb29sZWFuIFhtU3RyaW5nQ29tcGFy
ZSggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIGEsCiAgICAgICAgICAgICAgICAg
ICAgICAgIFhtU3RyaW5nIGIpIDsKZXh0ZXJuIGludCBYbVN0cmluZ0xlbmd0aCggCiAgICAgICAg
ICAgICAgICAgICAgICAgIFhtU3RyaW5nIHN0cmluZykgOwpleHRlcm4gQm9vbGVhbiBYbVN0cmlu
Z0VtcHR5KCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3RyaW5nKSA7CmV4dGVy
biBCb29sZWFuIFhtU3RyaW5nSGFzU3Vic3RyaW5nKCAKICAgICAgICAgICAgICAgICAgICAgICAg
WG1TdHJpbmcgc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZyBzdWJzdHJp
bmcpIDsKZXh0ZXJuIHZvaWQgWG1TdHJpbmdGcmVlKCAKICAgICAgICAgICAgICAgICAgICAgICAg
WG1TdHJpbmcgc3RyaW5nKSA7CmV4dGVybiBEaW1lbnNpb24gWG1TdHJpbmdCYXNlbGluZSggCiAg
ICAgICAgICAgICAgICAgICAgICAgIFhtRm9udExpc3QgZm9udGxpc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgIFhtU3RyaW5nIHN0cmluZykgOwpleHRlcm4gRGltZW5zaW9uIFhtU3RyaW5nV2lk
dGgoIAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0IGZvbnRsaXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICBYbVN0cmluZyBzdHJpbmcpIDsKZXh0ZXJuIERpbWVuc2lvbiBYbVN0
cmluZ0hlaWdodCggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtRm9udExpc3QgZm9udGxpc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIHN0cmluZykgOwpleHRlcm4gdm9pZCBY
bVN0cmluZ0V4dGVudCggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtRm9udExpc3QgZm9udGxp
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIHN0cmluZywKICAgICAgICAgICAg
ICAgICAgICAgICAgRGltZW5zaW9uICp3aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgRGlt
ZW5zaW9uICpoZWlnaHQpIDsKZXh0ZXJuIGludCBYbVN0cmluZ0xpbmVDb3VudCggCiAgICAgICAg
ICAgICAgICAgICAgICAgIFhtU3RyaW5nIHN0cmluZykgOwpleHRlcm4gdm9pZCBYbVN0cmluZ0Ry
YXcoIAogICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5ICpkLAogICAgICAgICAgICAgICAg
ICAgICAgICBXaW5kb3cgdywKICAgICAgICAgICAgICAgICAgICAgICAgWG1Gb250TGlzdCBmb250
bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3RyaW5nLAogICAgICAgICAg
ICAgICAgICAgICAgICBHQyBnYywKCiAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LAogICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgeSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdp
ZHRoLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYWxpZ24sCiAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsYXlfZGlyLAoKCgoKCgoKICAgICAgICAgICAg
ICAgICAgICAgICAgWFJlY3RhbmdsZSAqY2xpcCkgOwpleHRlcm4gdm9pZCBYbVN0cmluZ0RyYXdJ
bWFnZSggCiAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkgKmQsCiAgICAgICAgICAgICAg
ICAgICAgICAgIFdpbmRvdyB3LAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0IGZv
bnRsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZyBzdHJpbmcsCiAgICAgICAg
ICAgICAgICAgICAgICAgIEdDIGdjLAoKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGludCB5LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQg
d2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhbGlnbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxheV9kaXIsCgoKCgoKCgogICAgICAgICAg
ICAgICAgICAgICAgICBYUmVjdGFuZ2xlICpjbGlwKSA7CmV4dGVybiB2b2lkIFhtU3RyaW5nRHJh
d1VuZGVybGluZSggCiAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkgKmQsCiAgICAgICAg
ICAgICAgICAgICAgICAgIFdpbmRvdyB3LAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRM
aXN0IGZudGxzdCwKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3RyLAogICAgICAg
ICAgICAgICAgICAgICAgICBHQyBnYywKCiAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LAog
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgeSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50
IHdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYWxpZ24sCiAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsYXlfZGlyLAoKCgoKCgoKICAgICAgICAg
ICAgICAgICAgICAgICAgWFJlY3RhbmdsZSAqY2xpcCwKICAgICAgICAgICAgICAgICAgICAgICAg
WG1TdHJpbmcgdW5kZXIpIDsKCgogCgogCgoKCgoKCmV4dGVybiBXaWRnZXQgWG1HZXREZXN0aW5h
dGlvbiggCiAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkgKmRpc3BsYXkpIDsKCgogCgog
CiMgMTM1NyAiL3Vzci9YMTFSNi9pbmNsdWRlL1htL1htLmgiCgoKZXh0ZXJuIEJvb2xlYW4gWG1J
c1RyYXZlcnNhYmxlKCAKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHdpZCkgOwpleHRl
cm4gWG1WaXNpYmlsaXR5IFhtR2V0VmlzaWJpbGl0eSggCiAgICAgICAgICAgICAgICAgICAgICAg
IFdpZGdldCB3aWQpIDsKZXh0ZXJuIFdpZGdldCBYbUdldFRhYkdyb3VwKCAKICAgICAgICAgICAg
ICAgICAgICAgICAgV2lkZ2V0IHdpZCkgOwpleHRlcm4gV2lkZ2V0IFhtR2V0Rm9jdXNXaWRnZXQo
IAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgd2lkKSA7CmV4dGVybiBCb29sZWFuIFht
UHJvY2Vzc1RyYXZlcnNhbCggCiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCB3LAogICAg
ICAgICAgICAgICAgICAgICAgICBYbVRyYXZlcnNhbERpcmVjdGlvbiBkaXIpIDsKZXh0ZXJuIHZv
aWQgWG1BZGRUYWJHcm91cCggCiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCB0YWJHcm91
cCkgOwpleHRlcm4gdm9pZCBYbVJlbW92ZVRhYkdyb3VwKCAKICAgICAgICAgICAgICAgICAgICAg
ICAgV2lkZ2V0IHcpIDsKCgogCgoKIAojIDEzOTIgIi91c3IvWDExUjYvaW5jbHVkZS9YbS9YbS5o
IgoKCmV4dGVybiB2b2lkIFhtSW1SZWdpc3RlciggCiAgICAgICAgICAgICAgICAgICAgICAgIFdp
ZGdldCB3LAoJCQl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQpIDsKZXh0ZXJuIHZvaWQgWG1JbVVucmVn
aXN0ZXIoIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgdykgOwpleHRlcm4gdm9pZCBY
bUltU2V0Rm9jdXNWYWx1ZXMoIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgdywKICAg
ICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAgICAgICAgICAgICAgICAg
ICBDYXJkaW5hbCBudW1fYXJncykgOwpleHRlcm4gdm9pZCBYbUltU2V0VmFsdWVzKCAKICAgICAg
ICAgICAgICAgICAgICAgICAgV2lkZ2V0IHcsCiAgICAgICAgICAgICAgICAgICAgICAgIEFyZ0xp
c3QgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgbnVtX2FyZ3MpIDsKZXh0
ZXJuIHZvaWQgWG1JbVVuc2V0Rm9jdXMoIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQg
dykgOwpleHRlcm4gWElNIFhtSW1HZXRYSU0oIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRn
ZXQgdykgOwpleHRlcm4gaW50IFhtSW1NYkxvb2t1cFN0cmluZyggCiAgICAgICAgICAgICAgICAg
ICAgICAgIFdpZGdldCB3LAogICAgICAgICAgICAgICAgICAgICAgICBYS2V5UHJlc3NlZEV2ZW50
ICpldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLAogICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICBLZXlTeW0gKmtl
eXN5bSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzdGF0dXMpIDsKZXh0ZXJuIHZvaWQg
WG1JbVZhU2V0Rm9jdXNWYWx1ZXMoIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgdywK
ICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSA7CmV4dGVybiB2b2lkIFhtSW1WYVNldFZhbHVl
cyggCiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCB3LAogICAgICAgICAgICAgICAgICAg
ICAgICAuLi4pIDsKCgogCgogCgoKfSAgIAoKCiAKCgojIDEgIi91c3IvWDExUjYvaW5jbHVkZS9Y
bS9WZW5kb3JTLmgiIDEKIAoKCiAKIAoKIAogCiAKCiAKCiAKCiAKCgoKCiMgMSAiL3Vzci9YMTFS
Ni9pbmNsdWRlL1htL1htLmgiIDEKIAoKCiAKIAoKIAogCiAKCgojIDE0MzkgIi91c3IvWDExUjYv
aW5jbHVkZS9YbS9YbS5oIgoKICAKIyAyMCAiL3Vzci9YMTFSNi9pbmNsdWRlL1htL1ZlbmRvclMu
aCIgMgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9YbVZlbmRvclNoZWxs
UmVjICpYbVZlbmRvclNoZWxsV2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCBfWG1WZW5kb3JTaGVsbENs
YXNzUmVjICpYbVZlbmRvclNoZWxsV2lkZ2V0Q2xhc3M7CmV4dGVybiAgV2lkZ2V0Q2xhc3MgdmVu
ZG9yU2hlbGxXaWRnZXRDbGFzczsKCgogCgoKCgoKCmV4dGVybiBCb29sZWFuIFhtSXNNb3RpZldN
UnVubmluZyggCiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCBzaGVsbCkgOwoKCiAKCgoK
fSAgIAoKCgogCiMgMTQzNyAiL3Vzci9YMTFSNi9pbmNsdWRlL1htL1htLmgiIDIKCgoKICAKIyA0
ICIvc29mdHdhcmUvdGhhbGlhL2gvT3BlblN0YWdlLmgiIDIKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QgX09wZW5T
dGFnZUNsYXNzUmVjICAgKk9wZW5TdGFnZVdpZGdldENsYXNzOwp0eXBlZGVmIHN0cnVjdCBfT3Bl
blN0YWdlUmVjICAgICAgICAqT3BlblN0YWdlV2lkZ2V0OwoKZXh0ZXJuIFdpZGdldENsYXNzIG9w
ZW5TdGFnZVdpZGdldENsYXNzOwoKZW51bSBPcGVuU3RhZ2VQbGFuZXMgewogICAgT3BlblN0YWdl
RW1wdHksCiAgICBPcGVuU3RhZ2VOb3JtYWwsCiAgICBPcGVuU3RhZ2VPdmVybGF5LAogICAgT3Bl
blN0YWdlUG9wdXAKICAgIH07CgogCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gdm9pZCBPcGVuU3Rh
Z2VSZXF1ZXN0UmVkcmF3KCBXaWRnZXQgc3RhZ2UgKTsKZXh0ZXJuIHZvaWQgT3BlblN0YWdlUmVx
dWVzdE92ZXJsYXlSZWRyYXcoIFdpZGdldCBzdGFnZSApOwpleHRlcm4gdm9pZCBPcGVuU3RhZ2VS
ZXF1ZXN0UG9wdXBSZWRyYXcoIFdpZGdldCBzdGFnZSApOwoKCn0KCgogCgoKCgoKCgoKCnR5cGVk
ZWYgc3RydWN0CnsKICAgIGludCAgICAgICAgICAgICByZWFzb247ICAgICAgICAgIAogICAgWEV2
ZW50ICAgICAgICAgICpldmVudDsgICAgICAgICAgCiAgICBpbnQgICAgICAgICAgICAgeCwgeTsg
ICAgICAgICAgICAKICAgIGludCAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0OyAgIAogICAgdW5z
aWduZWQgaW50ICAgIHN0YXRlOyAgICAgICAgICAgCiAgICBpbnQgICAgICAgICAgICAgYnV0dG9u
OyAgICAgICAgICAKICAgIH0gT3BlblN0YWdlQ2FsbGJhY2tTdHJ1Y3Q7CgoKIyA0ICJoL01hbmlw
dWxhdG9yLmgiIDIKCiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9oL3N0ZHR5cGVzLmgiIDEKCiAKCgoK
CgoKCgoKCgoKCgoKCgojIDIwMyAiL3NvZnR3YXJlL3RoYWxpYS9oL3N0ZHR5cGVzLmgiCgoKCgoK
CgoKCgoKCgoKIyA1ICJoL01hbmlwdWxhdG9yLmgiIDIKCgoKIyAxICIvdXNyL1gxMVI2L2luY2x1
ZGUvWDExL2N1cnNvcmZvbnQuaCIgMQogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgojIDggImgvTWFuaXB1bGF0b3IuaCIgMgoKCgpjbGFzcyBNYW5p
cHVsYXRvcgp7CnByb3RlY3RlZDoKICAgIHZvaWQqIF9pbnRlcmVzdDsKICAgIHVpbnQgX2N1cnNv
cjsKICAgIGZsb2F0IF9pbnRlbnNpdHk7CgpwdWJsaWM6CiAgICAgCiAgICBlbnVtIHsgSElULCBN
SVNTLCBESVNBQkxFRCB9OwoKICAgIE1hbmlwdWxhdG9yKHZvaWQqKTsKICAgIHZpcnR1YWwgfk1h
bmlwdWxhdG9yKCk7CiAgICB2aXJ0dWFsIGludCAgR2V0TWFuQ3Vyc29yKCkgeyByZXR1cm4oX2N1
cnNvcik7IH0KCiAgICB2aXJ0dWFsIGludCBTdGFydE1hbmlwdWxhdGlvbiggT3BlblN0YWdlQ2Fs
bGJhY2tTdHJ1Y3QqIGNiLAoJCQkJICAgdm9pZCogY2FtUHRyLCBpbnQgcG9ydFdpZHRoLAoJCQkJ
ICAgaW50IHBvcnRIZWlnaHQsIHZvaWQqIHVEYXRhID0gX19udWxsICkgPSAwOwogICAgdmlydHVh
bCBib29sIE1vdmUoIE9wZW5TdGFnZUNhbGxiYWNrU3RydWN0KiApID0gMDsKICAgIHZpcnR1YWwg
Ym9vbCBGaW5pc2hNYW5pcHVsYXRpb24oIE9wZW5TdGFnZUNhbGxiYWNrU3RydWN0KiApID0gMDsK
ICAgIHZpcnR1YWwgaW50IFN0YXJ0RmVlZGJhY2soKSA9IDA7CiAgICB2aXJ0dWFsIGJvb2wgTW90
aW9uRmVlZGJhY2soKSA9IDA7CiAgICB2aXJ0dWFsIGJvb2wgRmluaXNoRmVlZGJhY2soKSA9IDA7
CiAgICB2aXJ0dWFsIHZvaWQgUmVmcmVzaCgpID0gMDsKICAgIHZpcnR1YWwgaW50IENoZWNrSG90
U3BvdHMoIE9wZW5TdGFnZUNhbGxiYWNrU3RydWN0KiApID0gMDsKICAgIHZpcnR1YWwgdm9pZCBD
YWxjSG90U3BvdHMoIGludCwgaW50ICkgPSAwOwogICAgdmlydHVhbCB2b2lkIERyYXdpbmdSb3V0
aW5lKCB2b2lkKiApID0gMDsKCn07CgpjbGFzcyBPYmplY3RNYW5pcHVsYXRvcjogcHVibGljIE1h
bmlwdWxhdG9yCnsKcHJvdGVjdGVkOgogICAgdmlydHVhbCB2b2lkIFNlbGVjdE1hbmlwQXhpcygp
OwoKICAgICAKICAgICAKICAgICAKICAgIHZpcnR1YWwgdm9pZCAgICAgIFNldENhbWVyYSh2b2lk
ICopID0gMDsKICAgIHZpcnR1YWwgZmxvYXQgICAgIEdldENhbWVyYU9ydGhvU2NhbGUodm9pZCAq
KSA9IDA7CiAgICB2aXJ0dWFsIGZsb2F0ICAgICBHZXRDYW1lcmFGb2NhbExlbmd0aCh2b2lkICop
ID0gMDsKICAgIHZpcnR1YWwgZmxvYXQgICAgIEdldENhbWVyYVpvb20odm9pZCAqKSA9IDA7CiAg
ICB2aXJ0dWFsIE1fTWF0cml4ICBHZXRDYW1lcmFNYXRyaXgodm9pZCAqKSA9IDA7CiAgICB2aXJ0
dWFsIE1fTWF0cml4ICBHZXRDYW1lcmFJbnZlcnNlTWF0cml4KHZvaWQgKikgPSAwOwogICAgdmly
dHVhbCBib29sICAgaXNPcnRob0NhbWVyYSh2b2lkICopID0gMDsKICAgIE1fVmVjdG9yNCAgICAg
ICAgIE1ha2VTY3JlZW5QbGFuZShNX1ZlY3RvcjIgJiwgTV9WZWN0b3IyICYpOwogICAgdmlydHVh
bCBpbnQgICAgICAgR2V0TWFuaXB1bGF0aW9uU3BhY2UoKTsKCiAgICAgCiAgICBNX1ZlY3RvcjIg
ICAgICAgICAgICBfaG90WCxfaG90WSxfaG90WixfaG90TzsKICAgIE1fVmVjdG9yMiAgICAgIF9o
b3RYVmVjdCxfaG90WVZlY3QsX2hvdFpWZWN0OwogICAgZmxvYXQgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfaG90WFZlY3RMZW47CiAgICBmbG9hdCAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9ob3RZVmVjdExlbjsKICAgIGZsb2F0ICAgICAgICAgICAgICAgICAgICAgICAgICAgX2hvdFpW
ZWN0TGVuOwoKICAgIHVpbnQgICAgIF9zcGFjZSwgX2F4aXMsIF9kaW0sIF90eXBlLCBfYWNjZXNz
OwogICAgTV9WZWN0b3IyICAgICAgICAgICAgICAgICBfaG90UHQsIF9ob3REaXJWZWM7CiAgICBm
bG9hdCAgICAgICAgICAgICAgICAgICAgICAgICAgX2hvdERpclZlY0xlbjsKICAgIE1fVmVjdG9y
ICAgICAgICAgICAgICAgICAgICAgICAgX3dvcmxkRGlyVmVjOwogICAgaW50ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfaWNvbk1vZGU7CgogICAgTV9NYXRyaXggICAgICAgICAgICBf
b3JpZW50YXRpb247CiAgICBNX01hdHJpeCAgICAgICAgICAgIF9uZXdPcmllbnRhdGlvbjsKICAg
ICAKICAgIHVpbnQgICAgICAgICAgICAgICAgX3N0YXJ0WCwgX3N0YXJ0WTsKICAgIHVpbnQgICAg
ICAgICAgICAgICAgX2xhc3RYLCAgX2xhc3RZOwogIAogICAgIAogICAgIAogICAgZmxvYXQgICAg
ICAgICAgICAgICBfdHJhblNlbnMsIF9yb3RTZW5zOwogICAgZmxvYXQgICAgICAgICAgICAgICBf
bWFuU2l6ZTsKCiAgICAgCiAgICAgCiAgICAgCiAgICB1aW50ICAgICAgICAgICAgICAgIF9wV2lk
dGgsIF9wSGVpZ2h0OwogICAgTV9NYXRyaXggICAgICAgICAgICBfY2FtTWF0LCBfaW52Q2FtTWF0
LCBfcHJvak1hdDsKICAgIGZsb2F0ICAgICAgICAgICAgICAgX2ZvY2FsLCBfaGl0aGVyLCBfYXNw
ZWN0LCBfYXBlcnR1cmUsIF96b29tOwogICAgZmxvYXQgICAgICAgICAgICAgICBfeE9mZnNldCwg
X3lPZmZzZXQsIF9pc09ydGhvLCBfb3J0aG9TY2FsZTsKCiAgICAgCiAgICAgCiAgICAgCiAgICBm
bG9hdCAgICAgICAgICAgICAgIF9yZWFsT3J0aG9TY2FsZTsKCnB1YmxpYzoKICAgIGVudW0geyBB
WElTX1gsIEFYSVNfWSwgQVhJU19aLCBBWElTX1pTLCBBWElTX1pDLCBBWElTX1hZLCBBWElTX05P
TkUgfTsKICAgIGVudW0geyBESU1fMUQsIERJTV8yRCB9OwogICAgZW51bSB7IEFDQ0VTU19IT1RL
RVksIEFDQ0VTU19JQ09OIH07CiAgICBlbnVtIHsgVFlQRV9UUkFOLCBUWVBFX1JPVCwgVFlQRV9T
Q0FMRSB9OwogICAgZW51bSB7IENPT1JEX05PTkUsIENPT1JEX09GRiwgQ09PUkRfTE9DQUwsIENP
T1JEX1dPUkxELCBDT09SRF9TQ1JFRU4sCgkgICBDT09SRF9NQU5JUFVMQVRPUiwgQ09PUkRfQ09O
U1RSQUlORUQsIENPT1JEX0NPTlNUUkFJTkVEMiB9OwogICAgZW51bSB7IElDT05fTk9ORSAgICAg
PSAwLCAKCSAgIElDT05fVFJBTlggICAgPSAxLCAKCSAgIElDT05fVFJBTlkgICAgPSAyLAoJICAg
SUNPTl9UUkFOWiAgICA9IDQsCgkgICBJQ09OX1JPVFggICAgID0gOCwKCSAgIElDT05fUk9UWSAg
ICAgPSAxNiwKCSAgIElDT05fUk9UWiAgICAgPSAzMiwKCSAgIElDT05fT1JJR0lOICAgPSA2NCwK
CSAgIElDT05fRElTQUJMRUQgPSAxMjggfTsKCiAgICBPYmplY3RNYW5pcHVsYXRvcih2b2lkICop
OwogICAgdmlydHVhbCB+T2JqZWN0TWFuaXB1bGF0b3IoKTsKCiAgICAgCiAgICB2aXJ0dWFsIGlu
dCAgICAgU3RhcnRNYW5pcHVsYXRpb24oT3BlblN0YWdlQ2FsbGJhY2tTdHJ1Y3QgKmNiLAoJCQkJ
ICAgICAgdm9pZCAqY2FtUHRyLAoJCQkJICAgICAgaW50IHBvcnRXaWR0aCwgaW50IHBvcnRIZWln
aHQsCgkJCQkgICAgICB2b2lkICp1RGF0YSA9IF9fbnVsbCApOwogICAgdmlydHVhbCBib29sIE1v
dmUoT3BlblN0YWdlQ2FsbGJhY2tTdHJ1Y3QgKmNiKTsKICAgIHZpcnR1YWwgYm9vbCBGaW5pc2hN
YW5pcHVsYXRpb24oT3BlblN0YWdlQ2FsbGJhY2tTdHJ1Y3QgKmNiKTsKCiAgICAgCiAgICB2aXJ0
dWFsIHZvaWQgRHJhd2luZ1JvdXRpbmUodm9pZCAqKTsKICAgIHZpcnR1YWwgaW50ICBDaGVja0hv
dFNwb3RzKE9wZW5TdGFnZUNhbGxiYWNrU3RydWN0ICpjYik7CiAgICB2aXJ0dWFsIHZvaWQgQ2Fs
Y0hvdFNwb3RzKGludCBwb3J0V2lkdGgsCgkJCSAgICAgIGludCBwb3J0SGVpZ2h0KTsKICAgIHZp
cnR1YWwgTV9NYXRyaXggR2V0TWFuQmFzaXMoY29uc3QgTV9NYXRyaXggJmNhbU1hdCkgPSAwOwoK
ICAgICAKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBUUkFOX0lDT05fV0lEVEg7CiAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgVFJBTl9JQ09OX0hFSUdIVDsKICAgIHN0YXRpYyBjb25zdCBpbnQg
VFJBTl9JQ09OX0hPVF9YOwogICAgc3RhdGljIGNvbnN0IGludCBUUkFOX0lDT05fSE9UX1k7CiAg
ICBzdGF0aWMgY29uc3QgY2hhciBUUkFOX0lDT05fQklUU1tdOwogICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFJPVF9JQ09OX1dJRFRIOwogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFJPVF9JQ09O
X0hFSUdIVDsKICAgIHN0YXRpYyBjb25zdCBpbnQgUk9UX0lDT05fSE9UX1g7CiAgICBzdGF0aWMg
Y29uc3QgaW50IFJPVF9JQ09OX0hPVF9ZOwogICAgc3RhdGljIGNvbnN0IGNoYXIgUk9UX0lDT05f
QklUU1tdOwoKfTsKCgojIDQgImgvVmlld01hbmlwdWxhdG9yLmgiIDIKCgpjbGFzcyBWaWV3TWFu
aXB1bGF0b3I6IHB1YmxpYyBNYW5pcHVsYXRvcgp7CnByb3RlY3RlZDoKICAKICAgIE1fVmVjdG9y
IF9vcmJpdEF4aXNYLCBfb3JiaXRBeGlzWSwgX29yYml0QXhpc1o7CiAgICBNX01hdHJpeCBfb3Ji
aXRNYXQ7CiAgICBNX01hdHJpeCBfb3JpZW50YXRpb247CiAgICBNX01hdHJpeCBfbmV3T3JpZW50
YXRpb247CiAgICB1aW50ICBfbW9kZTsKICAgIGZsb2F0IF9zdGFydFgsIF9zdGFydFk7CiAgICBm
bG9hdCBfbGFzdFgsICBfbGFzdFk7CiAgICB1aW50IF9wV2lkdGgsIF9wSGVpZ2h0OwogICAgYm9v
bCBfaXNPcnRob0NhbWVyYTsKICAgIGZsb2F0IF9vcnRob1NjYWxlOwoKcHVibGljOgogICAgIAog
ICAgZW51bSB7IFJPVFhZLCBST1RaLCBUUkFOWFksIFRSQU5aLCBOT09QIH07CgogICAgVmlld01h
bmlwdWxhdG9yKHZvaWQgKik7CiAgICB2aXJ0dWFsIH5WaWV3TWFuaXB1bGF0b3IoKTsKCiAgICB2
aXJ0dWFsIGludCBTdGFydE1hbmlwdWxhdGlvbiggT3BlblN0YWdlQ2FsbGJhY2tTdHJ1Y3QqIGNi
LAoJCQkJICAgdm9pZCogY2FtUHRyLAoJCQkJICAgaW50IHBvcnRXaWR0aCwgaW50IHBvcnRIZWln
aHQsCgkJCQkgICB2b2lkICp1RGF0YSA9IF9fbnVsbCAgKTsKICAgIHZpcnR1YWwgYm9vbCBNb3Zl
KE9wZW5TdGFnZUNhbGxiYWNrU3RydWN0ICpjYik7CiAgICB2aXJ0dWFsIGJvb2wgRmluaXNoTWFu
aXB1bGF0aW9uKE9wZW5TdGFnZUNhbGxiYWNrU3RydWN0ICpjYik7CiAgICB2aXJ0dWFsIGludCBD
aGVja0hvdFNwb3RzKE9wZW5TdGFnZUNhbGxiYWNrU3RydWN0ICpjYik7CiAgICB2aXJ0dWFsIHZv
aWQgQ2FsY0hvdFNwb3RzKCBpbnQgcG9ydFdpZHRoLCBpbnQgcG9ydEhlaWdodCApOwogICAgdmly
dHVhbCB2b2lkIERyYXdpbmdSb3V0aW5lKHZvaWQgKik7CgogICAgIAogICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIENBTV9JQ09OX1dJRFRIOwogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIENBTV9J
Q09OX0hFSUdIVDsKICAgIHN0YXRpYyBjb25zdCBpbnQgQ0FNX0lDT05fSE9UX1g7CiAgICBzdGF0
aWMgY29uc3QgaW50IENBTV9JQ09OX0hPVF9ZOwogICAgc3RhdGljIGNvbnN0IGNoYXIgQ0FNX0lD
T05fQklUU1tdOwp9OwoKCgoKIyAyMyAiaC9ucmh5X2NsYXNzVmlld01hbmlwdWxhdG9yLmgiIDIK
Cgp1c2luZyBzdGQ6OnZlY3RvcjsKCmNsYXNzIE5SSFlfQ2hhbm5lbE1hbmlwdWxhdG9yCnsKCnBy
b3RlY3RlZDoKICAgIE5SSFlfY2xhc3NDaGFubmVsTGlzdCBfY2hhbkxpc3Q7CiAgICB2aXJ0dWFs
IHZvaWQgZ2V0Q2hhbkxpc3QoIE5SSFlfY2xhc3NDaGFubmVsTGlzdCogY0xpc3QgPSBfX251bGwg
ICkgPSAwOwoKcHVibGljOgogICAgTlJIWV9DaGFubmVsTWFuaXB1bGF0b3IoKXt9CiAgICB2aXJ0
dWFsIH5OUkhZX0NoYW5uZWxNYW5pcHVsYXRvcigpe30KCiAgICAgCiAgICB2b2lkIFNhdmVDaGFu
bmVscygpOwogICAgdm9pZCBSZXNldENoYW5uZWxzKCk7CiAgICB2b2lkIEF1ZGl0Q2hhbm5lbHMo
KTsKICAgIHZvaWQgU2V0VW5kb0NoYW5uZWxzKCk7CgogICAgIAogICAgc3RhdGljIE5SSFlfQ2hh
bm5lbE1hbmlwdWxhdG9yKiBnZXQoIE1hbmlwdWxhdG9yKiApOwp9OwoKY2xhc3MgTlJIWV9DYW1l
cmFNYW5pcHVsYXRvcjoKICAgIHB1YmxpYyBOUkhZX0NoYW5uZWxNYW5pcHVsYXRvciwKICAgIHB1
YmxpYyBWaWV3TWFuaXB1bGF0b3IsCiAgICBwdWJsaWMgT2JzZXJ2ZXIKewoKICAgIGNsYXNzIE5S
SFlfY2xhc3NDYW1lcmEqIF9jYW1lcmE7Cgpwcm90ZWN0ZWQ6CiAgICAgCiAgICB2b2lkIGdldENo
YW5MaXN0KCBOUkhZX2NsYXNzQ2hhbm5lbExpc3QqIGNMaXN0ID0gX19udWxsICApOwoKcHVibGlj
OgogICAgTlJIWV9DYW1lcmFNYW5pcHVsYXRvciggTlJIWV9jbGFzc0NhbWVyYSogKTsKICAgIH5O
UkhZX0NhbWVyYU1hbmlwdWxhdG9yKCk7CgogICAgIAogICAgaW50ICBHZXRPYnNlcnZlclR5cGUo
KSB7IHJldHVybiAweDAwMDAwMDA0IDsgfTsKICAgIHZvaWQgUmVmcmVzaE9ic2VydmVyIChTdWJq
ZWN0ICopOwogICAgaW50ICBBbGxvd0Rlc3RydWN0QnlTdWJqZWN0ICgpIHsgcmV0dXJuIDAgOyB9
OwoKICAgICAKICAgIHZvaWQgUmVmcmVzaCgpOwogICAgaW50IFN0YXJ0RmVlZGJhY2soKTsKICAg
IGJvb2wgTW90aW9uRmVlZGJhY2soKTsKICAgIGJvb2wgRmluaXNoRmVlZGJhY2soKTsKICAgIGJv
b2wgTW92ZSggT3BlblN0YWdlQ2FsbGJhY2tTdHJ1Y3QqICk7Cgp9OwoKY2xhc3MgTlJIWV9DYW1l
cmFSaWdNYW5pcHVsYXRvcjoKICAgIHB1YmxpYyBOUkhZX0NoYW5uZWxNYW5pcHVsYXRvciwKICAg
IHB1YmxpYyBWaWV3TWFuaXB1bGF0b3IsCiAgICBwdWJsaWMgT2JzZXJ2ZXIKewogICAgTlJIWV9j
bGFzc09iamVjdCogX3BhcmVudDsKICAgIE5SSFlfY2xhc3NDYW1lcmEqIF9jYW1lcmE7Cgpwcm90
ZWN0ZWQ6CiAgICAgCiAgICB2b2lkIGdldENoYW5MaXN0KCBOUkhZX2NsYXNzQ2hhbm5lbExpc3Qq
IGNMaXN0ID0gX19udWxsICApOwoKcHVibGljOgogICAgTlJIWV9DYW1lcmFSaWdNYW5pcHVsYXRv
ciggTlJIWV9jbGFzc0NhbWVyYSogKTsKICAgIH5OUkhZX0NhbWVyYVJpZ01hbmlwdWxhdG9yKCk7
CgogICAgIAogICAgaW50IEdldE9ic2VydmVyVHlwZSgpIHsgcmV0dXJuIDB4MDAwMDAwMDQgOyB9
CiAgICB2b2lkIFJlZnJlc2hPYnNlcnZlciggU3ViamVjdCogKTsKICAgIGludCBBbGxvd0Rlc3Ry
dWN0QnlTdWJqZWN0KCkgeyByZXR1cm4gMCA7IH0KCiAgICAgCiAgICB2b2lkIFJlZnJlc2goKTsK
ICAgIGludCBTdGFydEZlZWRiYWNrKCk7CiAgICBib29sIE1vdGlvbkZlZWRiYWNrKCk7CiAgICBi
b29sIEZpbmlzaEZlZWRiYWNrKCk7Cgp9OwoKCiMgNDEgImgvbnJoeV9jbGFzc0NhbWVyYS5oIiAy
CgoKY2xhc3MgTlJIWV9jbGFzc1RyYWNrM2Q7CgogCiAKIAoKCiAKdGVtcGxhdGUgPGNsYXNzIFR5
cGU+IGNsYXNzIE5SSFlfbWF0Y2g7CnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBjbGFzcyBOUkhZX2Fs
cGhhbGlzdDsKY2xhc3MgTlJIWV9jbGFzc1JvdG87CmNsYXNzIE5SSFlfY2xhc3NDaGFubmVsOwoK
IAoKc3RydWN0IE5SSFlfY2xhc3NDYW1lcmE6CiAgICBwdWJsaWMgTlJIWV9jbGFzc09iamVjdCwK
ICAgIHB1YmxpYyBPYnNlcnZlckZhY3RvcnkgPE5SSFlfY2xhc3NDYW1lcmE+CnsKcHJpdmF0ZToK
ICAgIHR5cGVkZWYgTlJIWV9jbGFzc09iamVjdCBpbmhlcml0ZWQ7CiAgICB0eXBlZGVmIE5SSFlf
YWxwaGFsaXN0PE5SSFlfY2xhc3NDYW1lcmE+IGFscGhhbGlzdDsKICAgIGZyaWVuZCBOUkhZX21h
dGNoIDxOUkhZX2NsYXNzQ2FtZXJhPjsKICAgIGZyaWVuZCBOUkhZX2FscGhhbGlzdDxOUkhZX2Ns
YXNzQ2FtZXJhPjsKCiAgICBUd2luZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25OYW1l
X2hlcm87CiAgICBUd2luZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25OYW1lX3NpbXA7
CiAgICBMaXN0PE5SSFlfY2xhc3NSb3RvKj4gICAgICAgICAgIHJvdG9zOwoKICAgIFpPT0xFQU4g
ICAgICAgICAgICAgICAgICAgICAgICAgb3J0aG9BY3RpdmU7CgogICAgIAoKICAgIE1fTWF0cml4
ICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJhUHJvamVjdGlvbk1hdHJpeDsKICAgIE1fTWF0
cml4ICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJhT3J0aG9NYXRyaXg7CgogICAgIAoKICAg
IE1fTWF0cml4ICAgICAgICAgICAgICAgICAgICAgICAgc3RlcmVvTGVmdE1hdHJpeDsKICAgIE1f
TWF0cml4ICAgICAgICAgICAgICAgICAgICAgICAgc3RlcmVvUmlnaHRNYXRyaXg7CiAgICBNX01h
dHJpeCAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXJlb0xlZnRQcm9qZWN0aW9uTWF0cml4Owog
ICAgTV9NYXRyaXggICAgICAgICAgICAgICAgICAgICAgICBzdGVyZW9SaWdodFByb2plY3Rpb25N
YXRyaXg7CgogICAgIAoKICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcmVv
TW9kZTsKCiAgICAgCiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VNYXRy
aXggKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICB2b2lkIGRldGFjaChOUkhZX2Rl
cGVuZERhdGEgKik7CgogICAgIAogICAgTGlzdCA8TV9WZWN0b3IyPiAgICAgICAgICAgICAgICBz
a2V0Y2hQaXhlbHM7CiAgICBOUkhZX2NsYXNzT2JqZWN0KiBnZXRQb3NPYmplY3QoKTsKCnByb3Rl
Y3RlZDoKICAgIE5SSFlfY2xhc3NUcmFjazNkICAgICAgICAgICAgICAgKnRyYWNrM2RSZWNvcmQ7
CiAgICBWaWV3TWFuaXB1bGF0b3IqIGNhbWVyYU1hbmlwdWxhdG9yOwogICAgYm9vbCBkaXJ0eUNh
bWVyYU1hbmlwdWxhdG9yOwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
aXRpYWxpemUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE9MSVNI
ICBvcnRob0ZsYWcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAK
ICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdFdvcmxkVHJhdmVyc2UoKTsK
CnB1YmxpYzoKICAgICAKICAgIE5SSFlfY2xhc3NDYW1lcmEgKAogICAgICAgIGNvbnN0IENIQVIg
ICpuYW1lCiAgICAgICAgKTsKICAgIE5SSFlfY2xhc3NDYW1lcmEgKAogICAgICAgIGNvbnN0IENI
QVIgICAgICAgICAgKm5hbWUsCiAgICAgICAgTlJIWV9jbGFzc0NhbWVyYSAgICAqY2xvbmVGcm9t
CiAgICAgICAgKTsKICAgIE5SSFlfY2xhc3NDYW1lcmEgKAogICAgICAgIHZvaWQgCiAgICAgICAg
KTsKCiAgICB+TlJIWV9jbGFzc0NhbWVyYSAoCiAgICAgICAgdm9pZCAKICAgICAgICApOwoKICAg
ICAKICAgIHN0YXRpYyBjb25zdCBDSEFSICAgICAgICAgICAgICAgKlByaW50U2VsZkNsYXNzbmFt
ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuICgiTlJIWV9jbGFzc0NhbWVy
YSIpOyB9CgogICAgIAoKICAgIHN0YXRpYyBJTlQgICAgICAgICAgICAgICAgICAgICAgR2V0U2Vs
ZkNsYXNzVHlwZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuIChUSElOR19U
WVBFX0NBTUVSQSk7IH0KCgogICAgZW51bSB7IFJFUE9TSVRJT05fTk9ORSwgUkVQT1NJVElPTl9P
QkpFQ1QsIFJFUE9TSVRJT05fUklHIH07CiAgICBpbnQgUmVwb3NpdGlvblR5cGUoKTsKICAgIFZp
ZXdNYW5pcHVsYXRvciogR2V0Q2FtZXJhTWFuaXB1bGF0b3IoKTsKICAgIGJvb2wgQ3JlYXRlQ2Ft
ZXJhTWFuaXB1bGF0b3IoKTsgCiAgICB2b2lkIERlc3Ryb3lDYW1lcmFNYW5pcHVsYXRvcigpOwog
ICAgdm9pZCBEaXJ0eUNhbWVyYU1hbmlwdWxhdG9yKCk7CiAgICBpbnQgTG9va0F0T3JiaXRPYmpl
Y3QoKTsKICAgIGludCBQb2ludEF0T3JiaXRPYmplY3QoKTsKCiAgICBzdGF0aWMgTlJIWV9idW5j
aDxOUkhZX2NsYXNzQ2FtZXJhPiAgICAgKkZpbmQgKAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgQ0hBUiAgKm5hbWUKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKTsKCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5h
bWUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUiAg
Km5ld05hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBOUkhZ
X2NsYXNzVGhpbmcgICAgICAgICAgICAgICAgICpDbG9uZSAoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSICAqbmV3TmFtZQoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBjb25zdCBDSEFSICAgICAgICAgICAgICAgICAg
ICAgICpQcmludERlcml2ZWRDbGFzc09mU2VsZlR5cGVOYW1lICgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICkgeyByZXR1cm4gKCJjYW1lcmEiKTsgfQogICAgSU5UICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHZXREZXJpdmVkQ2xhc3NPZlNlbGZUeXBlICgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICkgeyByZXR1cm4gKFRISU5HX1RZUEVfQ0FNRVJBKTsgfQoKICAgIHN0YXRpYyBaT09M
RUFOICAgICAgICAgICAgICAgICAgQ2hlY2tQb3NzaWJsZUZvY2FsICgKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBmb2NhbAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgc3RhdGljIFpPT0xFQU4gICAgICAgICAg
ICAgICAgICBDaGVja1Bvc3NpYmxlQXNwZWN0ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBhc3BlY3QKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKICAgIHN0YXRpYyBaT09MRUFOICAgICAgICAgICAgICAgICAgQ2hl
Y2tQb3NzaWJsZUFwZXJ0dXJlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFJFQUwgICAgICBhcGVydHVyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICApOwogICAgc3RhdGljIFpPT0xFQU4gICAgICAgICAgICAgICAgICBDaGVja1Bvc3Np
YmxlSGl0aGVyICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFJFQUwgICAgICBoaXRoZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK
ICAgIHN0YXRpYyBaT09MRUFOICAgICAgICAgICAgICAgICAgQ2hlY2tQb3NzaWJsZVlvbiAoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSRUFMICAgICAgeW9u
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBzdGF0aWMgWk9PTEVB
TiAgICAgICAgICAgICAgICAgIENoZWNrUG9zc2libGVGYWRlciAoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSRUFMICAgICAgZmFkZXIKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHN0YXRpYyBaT09MRUFOICAgICAgICAgICAg
ICAgICAgQ2hlY2tQb3NzaWJsZU9ydGhvU2NhbGUgKAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG9ydGhvU2NhbGUKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgCgogICAgIAogICAgWk9PTEVBTiAgICAgICAg
ICAgICAgICAgICAgICAgICBTZXRSb3RvICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIExpc3Q8TlJIWV9jbGFzc1JvdG8qPiAgICAgICAmbmV3Um90b0xpc3QKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBJTlQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFkZFJvdG8gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTlJIWV9jbGFzc1JvdG8gICAgICAgICAgICAgICpuZXdSb3RvCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSZW1vdmVSb3RvICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5SSFlfY2xhc3NSb3RvICAgICAgICAgICAgICAqUm90bwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApOwoKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0
Rm9jYWxJbk1NICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFJFQUwgICAgICBuZXdGb2NhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
OwogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXRBc3BlY3QgKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld0FzcGVj
dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgWk9PTEVBTiAgICAg
ICAgICAgICAgICAgICAgICAgICBTZXRBcGVydHVyZSAoCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBSRUFMICAgICAgbmV3QXBlcnR1cmUKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAg
ICAgICAgU2V0SGl0aGVyICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFJFQUwgICAgICBuZXdIaXRoZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKTsKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0WW9uICgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBuZXdZ
b24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFpPT0xFQU4gICAg
ICAgICAgICAgICAgICAgICAgICAgU2V0RmFkZXIgKAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld0ZhZGVyCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAg
IFNldEljb25zY2FsZSAoZmxvYXQgbmV3SWNvbnNjYWxlKTsKICAgIFpPT0xFQU4gICAgICAgICAg
ICAgICAgICAgICAgICAgU2V0T3J0aG9BY3RpdmUgKAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgWk9PTEVBTiAgIG5ld09ydGhvQWN0aXZlCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAg
ICAgICAgIFNldE9ydGhvU2NhbGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUkVBTCAgICAgIG5ld09ydGhvU2NhbGUKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKCiAgICAgCiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAg
ICAgIFNldFNvbGlkICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFJFQUwgICAgICBuZXdTb2xpZFZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICkgeyByZXR1cm4gKDAgKTsgfQogICAgIAogICAgWk9PTEVBTiAgICAgICAgICAgICAg
ICAgICAgICAgICBTZXRTdGVyZW9MZWZ0RXllQWN0aXZlICgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFpPT0xFQU4gICBzdGF0dXMKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAg
ICAgIFNldFN0ZXJlb1JpZ2h0RXllQWN0aXZlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFpPT0xFQU4gICBzdGF0dXMKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKCiAgICAgCgoKICAgICAKICAgICAKICAgIExpc3Q8TlJIWV9jbGFz
c1JvdG8qPiAgICAgICAgICAgJkdldFJvdG9zICgpIHsgcmV0dXJuIHRoaXMtPnJvdG9zOyB9Cgog
ICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRGb2NhbEluTU0gKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKTsKICAgIFJFQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R2V0QXNwZWN0ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBSRUFMICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdldEFwZXJ0dXJlICgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICk7CiAgICBSRUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldEhpdGhlciAoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApOwogICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHZXRZb24gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFJFQUwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR2V0RmFkZXIgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK
CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIEdldE9ydGhvQWN0aXZlICgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1cm4gKG9ydGhvQWN0aXZlKTsgfSAgCiAgICBS
RUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldE9ydGhvU2NhbGUgKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKCgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R2V0Q2FtZXJhTWF0cml4ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE1fTWF0cml4ICAgICZtYXRyaXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldENhbWVyYVByb2plY3Rp
b25NYXRyaXggKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTV9NYXRy
aXggICAgJm1hdHJpeAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAg
dm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0Q2FtZXJhSW52ZXJzZVdvcmxkTWF0
cml4ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1fTWF0cml4ICAg
ICZtYXRyaXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFJFQUwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0Q2FtZXJhRmFkZXJWYWx1ZSAoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApOwogICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
ZXRDYW1lcmFTdGVyZW9BY3RpdmVGbGFnICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAg
ICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRDYW1lcmFTdGVyZW9MZWZ0TWF0
cml4ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1fTWF0cml4ICAg
ICZtYXRyaXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldENhbWVyYVN0ZXJlb1JpZ2h0TWF0cml4ICgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1fTWF0cml4ICAgICZtYXRy
aXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdldENhbWVyYVN0ZXJlb0xlZnRQcm9qZWN0aW9uTWF0cml4
ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1fTWF0cml4ICAgICZt
YXRyaXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdldENhbWVyYVN0ZXJlb1JpZ2h0UHJvamVjdGlvbk1h
dHJpeCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNX01hdHJpeCAg
ICAmbWF0cml4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgIAog
ICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRTb2xpZCAoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApIHsgcmV0dXJuICgoUkVBTCkwLjApOyB9CiAgICAgCiAgICBaT09MRUFO
ICAgICAgICAgICAgICAgICAgICAgICAgIEdldFN0ZXJlb0xlZnRFeWVBY3RpdmUgKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKTsKCiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAg
IEdldFN0ZXJlb1JpZ2h0RXllQWN0aXZlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cgog
ICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRTdGVyZW9Nb2RlICgKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICk7CgogICAgdm9pZCBDcmVhdGVPYnNlcnZlciAoaW50IHR5cGUp
IHsgCglPYnNlcnZlckZhY3Rvcnk8TlJIWV9jbGFzc0NhbWVyYT46OmRvQ3JlYXRlT2JzZXJ2ZXIg
KHRoaXMsIHR5cGUpOyB9OwoKICAgICAKCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIERlc2NyaWJlQ3JlYXRlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIHZvaWQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVGdWxsU3RhdGUgKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3Ry
ZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICB2b2lkICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlRnVsbFN0YXRlUGFja2VkICgKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmli
ZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RGVzY3JpYmVEZWxldGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgdm9pZCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUZvY2FsSW5NTSAoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0g
JgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIHZvaWQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVBc3BlY3QgKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICB2b2lkICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIERlc2NyaWJlQXBlcnR1cmUgKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICB2b2lkICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIERlc2NyaWJlSGl0aGVyICgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEZXNjcmliZVlvbiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApOwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RGVzY3JpYmVGYWRlciAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
bGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICApOwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3Jp
YmVPcnRob0FjdGl2ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
bGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICApOwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3Jp
YmVPcnRob1NjYWxlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs
YXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICk7CiAgICAgCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERl
c2NyaWJlUm90byAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFz
cyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICApOwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVU
cmFjazNkUmVjb3JkICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs
YXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICk7CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmli
ZUljb25zY2FsZShOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJik7CiAgICB2b2lkIAkJCSAgICBM
aXN0Q2FtZXJhKEZJTEUgKmZwLCBjb25zdCBMaXN0PFR3aW5lPiAmbHMpOwoKICAgIEJPT0xFQU4g
ICAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRyYWNrM2RSZWNvcmQgKCk7CgogICAgQk9P
TEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRlVHJhY2szZFJlY29yZCAoKTsKCiAg
ICBOUkhZX2NsYXNzVHJhY2szZCAgICAgICAgICAgICAgICAqR2V0VHJhY2szZFJlY29yZCAoKTsK
CgogICAgIAogICAgdm9pZCBhZGRTa2V0Y2hQaXhlbCggTV9WZWN0b3IyJiApOwogICAgdm9pZCBl
cmFzZVNrZXRjaFBpeGVscyggTV9WZWN0b3IyJiwgZmxvYXQgKTsKICAgIHZvaWQgd2lwZVNrZXRj
aCgpOwogICAgTV9WZWN0b3IyIHNrZXRjaFBpeGVsKCB1bnNpZ25lZCApOwogICAgdW5zaWduZWQg
blNrZXRjaFBpeGVscygpOwogICAgCgp9OwoKIAoKIAoKIyAzMiAibnJoeS9OUkhZX0FjY2Vzcy5j
IiAyCgojIDEgImgvbnJoeV9jbGFzc0xpZ2h0LmgiIDEKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgwKIAoKCgogCgoKIAoKCgoKCiAKCgoKY2xhc3MgTlJIWV9jbGFzc1VzZU1hcDsKCiAKIAogCgog
CnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBjbGFzcyBOUkhZX21hdGNoOwp0ZW1wbGF0ZSA8Y2xhc3Mg
VHlwZT4gY2xhc3MgTlJIWV9hbHBoYWxpc3Q7CgogCgpzdHJ1Y3QgTlJIWV9jbGFzc0xpZ2h0IDog
CiAgICBwdWJsaWMgTlJIWV9jbGFzc09iamVjdCwKICAgIHB1YmxpYyBPYnNlcnZlckZhY3Rvcnkg
PE5SSFlfY2xhc3NMaWdodD4Kewpwcml2YXRlOgogICAgdHlwZWRlZiBOUkhZX2NsYXNzT2JqZWN0
IGluaGVyaXRlZDsKICAgIHR5cGVkZWYgTlJIWV9hbHBoYWxpc3Q8TlJIWV9jbGFzc0xpZ2h0PiBh
bHBoYWxpc3Q7CiAgICBmcmllbmQgTlJIWV9tYXRjaCA8TlJIWV9jbGFzc0xpZ2h0PjsKICAgIGZy
aWVuZCBOUkhZX2FscGhhbGlzdDxOUkhZX2NsYXNzTGlnaHQ+OwoKICAgIFR3aW5lICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWNvbk5hbWVfaGVybzsKICAgIFR3aW5lICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWNvbk5hbWVfc2ltcDsKCiAgICAgCiAgICBaT09MRUFOICAgICAgICAgICAg
ICAgICAgICAgICAgIHNwb3RsaWdodFN0YXR1czsKCiAgICAgCiAgICBaT09MRUFOICAgICAgICAg
ICAgICAgICAgICAgICAgIHNwb3RsaWdodEljb25TdGF0dXM7CgogICAgIAogICAgWk9PTEVBTiAg
ICAgICAgICAgICAgICAgICAgICAgICBzcG90bGlnaHRCZWFtU3RhdHVzOwoKICAgIHZvaWQgZGV0
YWNoKE5SSFlfZGVwZW5kRGF0YSAqKTsKCiAgICBib29sIF9zaGFkb3dGbGFnOwoKcHJvdGVjdGVk
OgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZSAoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIApwdWJsaWM6CiAgICAgCiAgICBOUkhZX2NsYXNzTGlnaHQg
KAogICAgICAgIGNvbnN0IENIQVIgICpuYW1lCiAgICAgICAgKTsKICAgIE5SSFlfY2xhc3NMaWdo
dCAoCiAgICAgICAgY29uc3QgQ0hBUiAgICAgICpuYW1lLAogICAgICAgIE5SSFlfY2xhc3NMaWdo
dCAqY2xvbmVGcm9tCiAgICAgICAgKTsKICAgIE5SSFlfY2xhc3NMaWdodCAoCiAgICAgICAgdm9p
ZCAKICAgICAgICApOwoKICAgIH5OUkhZX2NsYXNzTGlnaHQgKAogICAgICAgIHZvaWQgCiAgICAg
ICAgKTsKCiAgICAgCiAgICBzdGF0aWMgY29uc3QgQ0hBUiAgICAgICAgICAgICAgICpQcmludFNl
bGZDbGFzc25hbWUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAoIk5SSFlf
Y2xhc3NMaWdodCIpOyB9CgogICAgIAoKICAgIHN0YXRpYyBJTlQgICAgICAgICAgICAgICAgICAg
ICAgR2V0U2VsZkNsYXNzVHlwZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJu
IChUSElOR19UWVBFX0xJR0hUKTsgfQoKICAgIHN0YXRpYyBOUkhZX2J1bmNoPE5SSFlfY2xhc3NM
aWdodD4gKkZpbmQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQ0hBUiAgKm5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAg
ICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5hbWUgKAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUiAgKm5ld05hbWUKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBOUkhZX2NsYXNzVGhpbmcgICAgICAg
ICAgICAgICAgICpDbG9uZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBDSEFSICAqbmV3TmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICApOwoKICAgICAKCiAgICBjb25zdCBDSEFSICAgICAgICAgICAgICAgICAgICAgICpQcmludERl
cml2ZWRDbGFzc09mU2VsZlR5cGVOYW1lICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgeyBy
ZXR1cm4gKCJsaWdodCIpOyB9CiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdl
dERlcml2ZWRDbGFzc09mU2VsZlR5cGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJl
dHVybiAoVEhJTkdfVFlQRV9MSUdIVCk7IH0KCiAgICAgCiAgICBzdGF0aWMgWk9PTEVBTiAgICAg
ICAgICAgICAgICAgIENoZWNrUG9zc2libGVGb2N1cyAoCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSRUFMICAgICAgICAqbmV3Rm9jdXMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJTlQgICBudW1iZXIKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHN0YXRpYyBaT09MRUFOICAgICAgICAgICAgICAg
ICAgQ2hlY2tQb3NzaWJsZUF0dGVuICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJFQUwgICAgICAgICpuZXdBdHRlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IElOVCAgIG51bWJlcgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICApOwoKICAgICAKCiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAg
IFNldExndENvbG9yICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFJFQUwgICAgICAqbmV3TGd0Q29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBJTlQgICAgICAgbnVtYmVyCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNldExn
dERpZmYgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVB
TCAgICAgICpuZXdMZ3REaWZmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgSU5UICAgICAgIG51bWJlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICApOwogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXRMZ3RTcGVjICgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICAq
bmV3TGd0U3BlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IElOVCAgICAgICBudW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK
CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNldExndFNwZWNSZWQgKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld0xn
dFNwZWNSZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFpPT0xF
QU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0TGd0U3BlY0dyZWVuICgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBuZXdMZ3RTcGVjR3Jl
ZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFpPT0xFQU4gICAg
ICAgICAgICAgICAgICAgICAgICAgU2V0TGd0U3BlY0JsdWUgKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld0xndFNwZWNCbHVlCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgWk9PTEVBTiAgICAgICAgICAg
ICAgICAgICAgICAgICBTZXRMZ3REaWZmUmVkICgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBuZXdMZ3REaWZmUmVkCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAg
ICAgIFNldExndERpZmZHcmVlbiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBSRUFMICAgICAgbmV3TGd0RGlmZkdyZWVuCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNl
dExndERpZmZCbHVlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFJFQUwgICAgICBuZXdMZ3REaWZmQmx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICApOwoKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0TGd0SW50
ZW5zICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwg
ICAgICBuZXdMZ3RJbnRlbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK
ICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0TGd0U3BlY0ludGVucyAoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSRUFMICAgICAgbmV3
TGd0SW50ZW5zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09M
RUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNldExndERpZmZJbnRlbnMgKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld0xndEludGVu
cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIFpPT0xFQU4gICAg
ICAgICAgICAgICAgICAgICAgICAgU2V0TGd0U3BvdExpZ2h0SWNvblN0YXR1cyAoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBaT09MRUFOICAgbmV3TGd0U3Bv
dExpZ2h0SWNvblN0YXR1cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwog
ICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXRMZ3RTcG90TGlnaHRCZWFtU3Rh
dHVzICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFpPT0xF
QU4gICBuZXdMZ3RTcG90TGlnaHRCZWFtU3RhdHVzCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNldExndFNw
b3RMaWdodFN0YXR1cyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBaT09MRUFOICAgbmV3TGd0U3BvdExpZ2h0U3RhdHVzCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNl
dEZvY3VzICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJF
QUwgICAgICAqbmV3Rm9jdXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBJTlQgICAgICAgbnVtYmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNldEZvY3VzTWluICgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBu
ZXdGb2N1c01pbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgWk9P
TEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXRGb2N1c01heCAoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSRUFMICAgICAgbmV3Rm9jdXNNYXgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFpPT0xFQU4gICAgICAgICAg
ICAgICAgICAgICAgICAgU2V0Rm9jdXNFeHAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld0ZvY3VzRXhwCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAg
IFNldEF0dGVuICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFJFQUwgICAgICAqbmV3QXR0ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJTlQgICAgICAgbnVtYmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNldEF0dGVuU3Rh
cnQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVBTCAg
ICAgIG5ld0F0dGVuU3RhcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK
ICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0QXR0ZW5FbmQgKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld0F0dGVu
RW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAg
ICAgICAgICAgICAgICAgICAgICAgIFNldEF0dGVuRXhwICgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBuZXdBdHRlbkV4cAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAKICAgIFpPT0xFQU4gICAgICAgICAg
ICAgICAgICAgICAgICAgU2V0U29saWQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld1NvbGlkVmFsdWUKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAoMCApOyB9CiAgICBaT09MRUFOICAgICAgICAg
ICAgICAgICAgICAgICAgIFNldEljb25zY2FsZShmbG9hdCBuZXdJY29uc2NhbGUpOwogICAgUkVB
TCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRMZ3REaWZmUmVkICgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICk7CiAgICBSRUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldExn
dERpZmZHcmVlbiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgUkVBTCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHZXRMZ3REaWZmQmx1ZSAoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICApOwogICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRMZ3REaWZmSW50
ZW5zICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgUkVBTCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHZXRMZ3RTcGVjUmVkICgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7
CiAgICBSRUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldExndFNwZWNHcmVlbiAoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICApOwogICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHZXRMZ3RTcGVjQmx1ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgUkVB
TCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRMZ3RTcGVjSW50ZW5zICgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICk7CgoKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAg
R2V0TGd0U3BvdExpZ2h0SWNvblN0YXR1cyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsg
cmV0dXJuIChzcG90bGlnaHRJY29uU3RhdHVzKTsgfQogICAgWk9PTEVBTiAgICAgICAgICAgICAg
ICAgICAgICAgICBHZXRMZ3RTcG90TGlnaHRCZWFtU3RhdHVzICgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICkgeyByZXR1cm4gKHNwb3RsaWdodEJlYW1TdGF0dXMpOyB9CiAgICBaT09MRUFOICAg
ICAgICAgICAgICAgICAgICAgICAgIEdldExndFNwb3RMaWdodFN0YXR1cyAoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApIHsgcmV0dXJuIChzcG90bGlnaHRTdGF0dXMpOyB9CiAgICBSRUFMICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdldExndFNwb3RFeHAgKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKTsKICAgIFJFQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0TGd0U3Bv
dEFuZ2xlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBSRUFMICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICpHZXRGb2N1cyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwog
ICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRGb2N1c01pbiAoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApOwogICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
ZXRGb2N1c01heCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgUkVBTCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHZXRGb2N1c0V4cCAoCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICApOwogICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqR2V0QXR0ZW4gKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFJFQUwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR2V0QXR0ZW5TdGFydCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgUkVBTCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRBdHRlbkVuZCAoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICApOwogICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRBdHRlbkV4
cCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAKICAgIFJFQUwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR2V0U29saWQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7
IHJldHVybiAoKFJFQUwpMC4wKTsgfQogICAgCiAgICB2b2lkIENyZWF0ZU9ic2VydmVyIChpbnQg
dHlwZSkgewoJT2JzZXJ2ZXJGYWN0b3J5PE5SSFlfY2xhc3NMaWdodD46OmRvQ3JlYXRlT2JzZXJ2
ZXIgKHRoaXMsIHR5cGUpOyB9CiAgICAKICAgICAKCiAgICB2b2lkICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIERlc2NyaWJlQ3JlYXRlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIERlc2NyaWJlRnVsbFN0YXRlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAg
IERlc2NyaWJlRnVsbFN0YXRlUGFja2VkICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIERlc2NyaWJlV3JlbkZ1bGxTdGF0ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEZXNjcmliZURlbGV0ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
ZXNjcmliZUxndENvbG9yICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2Ny
aWJlTGd0SW50ZW5zICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs
YXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJl
TGd0U3BvdExpZ2h0U3RhdHVzICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERl
c2NyaWJlTGd0U3BvdExpZ2h0SWNvblN0YXR1cyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEZXNjcmliZUxndFNwb3RFeHAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRGVzY3JpYmVMZ3RTcG90QW5nbGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRGVzY3JpYmVGb2N1cyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
ZXNjcmliZUF0dGVuICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs
YXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJl
RGlmZnVzZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBO
UkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZVNwZWN1
bGFyICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlf
Q2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICk7CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZVRleHR1cmUg
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFz
c0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK
ICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVJY29uc2NhbGUoTlJI
WV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYpOwogICAgdm9pZCAJCQkgICAgU2V0VXNlTWFwc0xpc3Qg
KAogICAgCQkJCQlOUkhZX2J1bmNoIDxOUkhZX2NsYXNzVXNlTWFwPiAgKm5ld1VzZU1hcHMKCQkJ
CSAgICApOwogICAgdm9pZCAJCQkgICAgUmVtb3ZlVXNlTWFwc0xpc3QgKAogICAgCQkJCQlOUkhZ
X2J1bmNoIDxOUkhZX2NsYXNzVXNlTWFwPiAgKm5ld1VzZU1hcHMKCQkJCSAgICApOwoKICAgIHZv
aWQgCQkJICAgIEVyYXNlVXNlTWFwc0xpc3QgKAogICAgCQkJCQl2b2lkCgkJCQkgICAgKTsKICAg
IHZvaWQgCQkJICAgIExpc3RMaWdodChGSUxFICpmcCwgY29uc3QgTGlzdDxUd2luZT4gJmxzKTsK
CiAgICBib29sCUdldFNoYWRvd0ZsYWcodm9pZCkgeyByZXR1cm4gX3NoYWRvd0ZsYWc7IH0KCiAg
ICB2b2lkCVNldFNoYWRvd0ZsYWcoYm9vbCBmbGFnKSB7IF9zaGFkb3dGbGFnID0gZmxhZzsgfQoK
CiAgICBMaXN0PE5SSFlfY2xhc3NVc2VNYXAgICo+IAlfdXNlbWFwc0xpc3Q7CiAgIAogICAgc3Rh
dGljIGludAkJCV9tYXhMaWdodHM7Cgpwcm90ZWN0ZWQ6CiAgICAgCiAgICB2b2lkIHBvc3RXb3Js
ZFRyYXZlcnNlICgpOwp9OwoKIAoKIAoKIyAzMyAibnJoeS9OUkhZX0FjY2Vzcy5jIiAyCgojIDEg
ImgvbnJoeV9jbGFzc01hcC5oIiAxCgogCgoKCgoKCgoKCgoKCgoKCgwKIAoKCgogCgoKIAoKCgoK
CiAKCgojIDEgImgvbnJoeV9jbGFzc1JvdG9EYXRhLmgiIDEKCgoKCiMgMSAiL3NvZnR3YXJlL3Ro
YWxpYS9oL3N0ZHR5cGVzLmgiIDEKCiAKCgoKCgoKCgoKCgoKCgoKCgojIDIwMyAiL3NvZnR3YXJl
L3RoYWxpYS9oL3N0ZHR5cGVzLmgiCgoKCgoKCgoKCgoKCgoKIyA1ICJoL25yaHlfY2xhc3NSb3Rv
RGF0YS5oIiAyCgoKCgoKCgoKCmNsYXNzIE5SSFlfY2xhc3NNYXA7CmNsYXNzIE5SSFlfY2xhc3NS
b3RvOwoKY2xhc3MgICBOUkhZX2NsYXNzUm90b0RhdGEgewoKcHVibGljOgoKICAgIE5SSFlfY2xh
c3NSb3RvRGF0YSggdm9pZCApIHt9OwogICAgTlJIWV9jbGFzc1JvdG9EYXRhKCBJTlQgaW54LCBU
d2luZSBuYW1lLCBJTlQgZGVwdGgsIE5SSFlfY2xhc3NNYXAgKk1hcCk7CiAgICBOUkhZX2NsYXNz
Um90b0RhdGEoIE5SSFlfY2xhc3NSb3RvRGF0YSAqY2xvbmVGcm9tLCBOUkhZX2NsYXNzTWFwICpN
YXApOwogICAgfk5SSFlfY2xhc3NSb3RvRGF0YSggdm9pZCApOwoKICAgIHZvaWQgICAgIFJlYWRJ
bWFnZSgpOwogICAgdm9pZCAgICAgUmVhZENyb3BEYXRhUHJlY2lzZSggdm9pZCApOwogICAgdm9p
ZCAgICAgV3JpdGVDcm9wRGF0YVByZWNpc2UoIE5SSFlfY2xhc3NSb3RvICosIElOVCAqLAoJCQkJ
ICB1bnNpZ25lZCB3ID0gMCwgdW5zaWduZWQgaCA9IDAKCQkJCSAgKTsKICAgIHZvaWQgICAgIFZp
c2libGVDcm9wUGFyYW1ldGVyc1ByZWNpc2UoICAJUkVBTCAgICBwb3J0Wm9vbSwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJUkVBTCAgICBwb3J0WG9mZnNldCwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJUkVBTCAgICBwb3J0WW9mZnNl
dCApOwogICAgSU5UICAgICBHZXRXaWR0aCAoIHZvaWQgKSB7IHJldHVybiggdGhpcy0+d2lkdGgp
O30KICAgIElOVCAgICAgR2V0SGVpZ2h0ICggdm9pZCApIHsgcmV0dXJuKCB0aGlzLT5oZWlnaHQp
O30KICAgIHZvaWQgICAgIFJlc2V0Q2xlYW4gKHZvaWQgKSB7IHRoaXMtPmNsZWFuID0gMCA7fQog
ICAgdm9pZCAgICAgQ2xlYXIgKHZvaWQgKTsKCiAgICB2b2lkIFNldE5hbWUgKFR3aW5lICZuYW1l
KSB7IGZpbGVuYW1lID0gbmFtZTsgfQogICAgc2hvcnQgR2V0Q29va2llICgpIHsgcmV0dXJuIF9t
YXBDb29raWU7IH0KICAgIHZvaWQgU2V0Q29va2llIChzaG9ydCBjKSB7IF9tYXBDb29raWUgPSBj
OyB9CgogICAgSU5UICAgICAgICAgICAgICAgICBpbmRleDsgICAgICAgICAgIAogICAgSU5UICAg
ICAgICAgICAgICAgICB3aWR0aDsgICAgICAgICAgIAogICAgSU5UICAgICAgICAgICAgICAgICBo
ZWlnaHQ7ICAgICAgICAgCiAgICAgCiAgICBSRUFMICAgICAgICAgICAgICAgIG9yaWdXaWR0aDsg
ICAgICAgCiAgICBSRUFMICAgICAgICAgICAgICAgIG9yaWdIZWlnaHQ7ICAgICAKICAgIFJFQUwg
ICAgICAgICAgICAgICAgeE9yaWdpbjsgICAgICAgICAKICAgIFJFQUwgICAgICAgICAgICAgICAg
eU9yaWdpbjsgICAgICAgICAKICAgIFJFQUwgICAgICAgICAgICAgICAgZGVjaW1hdGU7ICAgICAg
ICAKCiAgICBJTlQgICAgICAgICAgICAgICAgIGltYWdlV2lkdGg7ICAgICAgCiAgICBJTlQgICAg
ICAgICAgICAgICAgIGltYWdlSGVpZ2h0OwogICAgSU5UICAgICAgICAgICAgICAgICBwb3J0V2lk
dGg7ICAgICAgIAogICAgSU5UICAgICAgICAgICAgICAgICBwb3J0SGVpZ2h0OwogICAgICAgIAog
ICAgUkVBTCAgICAgICAgICAgICAgICB2aXNpYmxlQ3JvcFdpZHRoOwkgCiAgICBSRUFMICAgICAg
ICAgICAgICAgIHZpc2libGVDcm9wSGVpZ2h0OwogICAgUkVBTCAgICAgICAgICAgICAgICB2aXNp
YmxlQ3JvcFhvZmZzZXQ7ICAKICAgIFJFQUwgICAgICAgICAgICAgICAgdmlzaWJsZUNyb3BZb2Zm
c2V0OyAgCgogICAgUkVBTCAgICAgICAgICAgICAgICB3YXJyYXlXaWR0aDsJIAogICAgUkVBTCAg
ICAgICAgICAgICAgICB3YXJyYXlIZWlnaHQ7CiAgICBSRUFMICAgICAgICAgICAgICAgIHdhcnJh
eVhvZmZzZXQ7ICAgICAgIAogICAgUkVBTCAgICAgICAgICAgICAgICB3YXJyYXlZb2Zmc2V0OyAg
ICAgICAKCiAgICBSRUFMICAgICAgICAgICAgICAgIHBvcnRab29tOyAgICAgICAgCiAgICBSRUFM
ICAgICAgICAgICAgICAgIHBvcnRYb2Zmc2V0OyAgICAgCiAgICBSRUFMICAgICAgICAgICAgICAg
IHBvcnRZb2Zmc2V0OwoKICAgIFJFQUwgICAgICAgICAgICAgICAgcmVjdFpvb207ICAgICAgICAK
CiAgICBSRUFMICAgICAgICAgICAgICAgIHJlZFdlaWdodDsgICAgICAgCiAgICBSRUFMICAgICAg
ICAgICAgICAgIGdyZWVuV2VpZ2h0OwogICAgUkVBTCAgICAgICAgICAgICAgICBibHVlV2VpZ2h0
OwoKICAgIEJPT0xFQU4gICAgICAgICAgICAgZmlsbU1vZGU7ICAgICAgICAKCiAgICBCT09MRUFO
ICAgICAgICAgICAgIGZpdDsgICAgICAgICAgICAgCiAgICAgCiAgICB1bnNpZ25lZCBjaGFyICAg
ICAgIGRlcHRoOyAgICAgICAgICAgCiAgICB1bnNpZ25lZCBsb25nICAgICAgICpyYXJyYXk7ICAg
ICAgICAgCiAgICBVX0NIQVIgICAgICAgICAgICAgICpjYXJyYXk7ICAgICAgICAgCiAgICBUd2lu
ZSAgICAgICAgICAgICAgIGZpbGVuYW1lOyAgICAgICAgCiAgICBOUkhZX2NsYXNzTWFwICAgICAg
ICpNYXA7ICAgICAgICAgICAgCgogICAgIAogICAgc3RhdGljICB1bnNpZ25lZCBsb25nICAgICAg
ICAgICAqYnl0ZTJsb25nTFVUOwoKICAgIEJPT0xFQU4gICAgICAgICAgICAgY2xlYW47ICAgICAg
IAogICAgQk9PTEVBTiAgICAgICAgICAgICByZWFkV2hvbGVJbWFnZTsgIAoKcHJpdmF0ZToKCQog
ICAgc2hvcnQgX21hcENvb2tpZTsKCQp9OwoKaW5saW5lIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgg
TlJIWV9jbGFzc1JvdG9EYXRhICkgeyByZXR1cm4gIk5SSFlfY2xhc3NSb3RvRGF0YSI7IH07CgpJ
TlQgR2V0QXZhaWxhYmxlTWVtb3J5KHZvaWQpOwoKCiMgMzUgImgvbnJoeV9jbGFzc01hcC5oIiAy
CgojIDEgImgvTlJIWV9Db29raWUuaCIgMQoKCgpjbGFzcyBOUkhZX0Nvb2tpZSB7CiAgICBzaG9y
dCBfY29va2llOwpwdWJsaWM6CiAgICBOUkhZX0Nvb2tpZSgpIDogX2Nvb2tpZSgxKSB7fQogICAg
dm9pZCBVcGRhdGVDb29raWUoKSB7IF9jb29raWUrKzsgfQogICAgc2hvcnQgR2V0QmFkQ29va2ll
KCkgeyByZXR1cm4gX2Nvb2tpZSAtIDE7IH0KICAgIHNob3J0IEdldENvb2tpZSgpIHsgcmV0dXJu
IF9jb29raWU7IH0KfTsKCgojIDM2ICJoL25yaHlfY2xhc3NNYXAuaCIgMgoKCmVudW0gZXhjZXB0
aW9uVVYgeyBCTEVFRCwgTk9STUFMIH07CgogCiAKIAoKIAp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4g
Y2xhc3MgTlJIWV9tYXRjaDsKdGVtcGxhdGUgPGNsYXNzIFR5cGU+IGNsYXNzIE5SSFlfYWxwaGFs
aXN0OwoKc3RydWN0IE5SSFlfY2xhc3NNYXA6cHVibGljIE5SSFlfY2xhc3NUaGluZyB7CnByaXZh
dGU6CiAgICB0eXBlZGVmIE5SSFlfY2xhc3NUaGluZyBpbmhlcml0ZWQ7CiAgICB0eXBlZGVmIE5S
SFlfYWxwaGFsaXN0PE5SSFlfY2xhc3NNYXA+IGFscGhhbGlzdDsKICAgIGZyaWVuZCBOUkhZX21h
dGNoIDxOUkhZX2NsYXNzTWFwPjsKICAgIGZyaWVuZCBOUkhZX2FscGhhbGlzdDxOUkhZX2NsYXNz
TWFwPjsKCiAgICAgCiAgICAgICAgSU5UICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQ7Cgpwcm90
ZWN0ZWQ6CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZSAo
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAKCiAgICBJTlQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlcHRoOwoKICAgICAKICAgICAKICAgICAKCiAgICBUd2luZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZEZpbGVuYW1lOwoKICAgIExpc3Q8TlJIWV9jbGFz
c1JvdG9EYXRhICo+ICAgICAgbWFwRGF0YTsKICAgIE5SSFlfY2xhc3NSb3RvRGF0YSAgICAgICAg
ICAgICAgKmN1cnJlbnRNYXA7CgogICAgIAoKICAgIHVuc2lnbmVkIGxvbmcgICAgICAgICAgICAg
ICAgICAgKnJhcnJheTsgICAgICAgIAoKICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW1hZ2VXaWR0aDsgICAgICAKICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW1hZ2VIZWlnaHQ7CiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyb3BXaWR0
aDsKICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3JvcEhlaWdodDsKICAgIElO
VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3JvcFhvcmlnaW47CiAgICBJTlQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENyb3BZb3JpZ2luOwogICAgRkxPQVQgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDcm9wRGVjaW1hdGU7ICAgCiAgICB2b2lkIHBvc3RXb3JsZFRyYXZlcnNl
ICgpOwoKcHVibGljOgoKICAgIExpc3Q8VHdpbmU+CSAgICBfd3Jlbk9wdHM7CiAgICBCT09MRUFO
ICAgICAgICAgX2NyZWF0ZURwdDsKCgogICAgVHdpbmUgICAgICAgICAgIGZpbGVOYW1lOwogICAg
ZXhjZXB0aW9uVVYgICAgIG91dFVWYXJlYTsgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgIFR3aW5lICAgICAgICAgICBtb3N0UmVjZW50bHlSZWFkRmlsZTsK
ICAgIAogICAgQk9PTEVBTiAgICAgICAgIGZpbG1Nb2RlOyAgICAgICAgCiAgICBCT09MRUFOICAg
ICAgICAgcmVhZFdob2xlSW1hZ2U7ICAKCiAgICBOUkhZX0Nvb2tpZSAgICAgX01hcENvb2tpZTsK
CiAgICAgCiAgICBOUkhZX2NsYXNzTWFwICgKICAgICAgICBjb25zdCBDSEFSICAqbmFtZQogICAg
ICAgICk7CiAgICBOUkhZX2NsYXNzTWFwICgKICAgICAgICBjb25zdCBDSEFSICAgICAgKm5hbWUs
CiAgICAgICAgTlJIWV9jbGFzc01hcCAgICpjbG9uZUZyb20KICAgICAgICApOwogICAgTlJIWV9j
bGFzc01hcCAoCiAgICAgICAgdm9pZCAKICAgICAgICApOwoKICAgIH5OUkhZX2NsYXNzTWFwICgK
ICAgICAgICB2b2lkIAogICAgICAgICk7CgogICAgIAogICAgc3RhdGljIGNvbnN0IENIQVIgICAg
ICAgICAgICAgICAqUHJpbnRTZWxmQ2xhc3NuYW1lICgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICkgeyByZXR1cm4gKCJOUkhZX2NsYXNzTWFwIik7IH0KCiAgICAgCgogICAgc3RhdGljIElOVCAg
ICAgICAgICAgICAgICAgICAgICBHZXRTZWxmQ2xhc3NUeXBlICgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICkgeyByZXR1cm4gKFRISU5HX1RZUEVfTUFQKTsgfQoKICAgIHN0YXRpYyBOUkhZX2J1
bmNoPE5SSFlfY2xhc3NNYXA+ICpGaW5kICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IENIQVIgICpuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICk7CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuYW1lICgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIgICpuZXdO
YW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgTlJIWV9jbGFz
c1RoaW5nICAgICAgICAgICAgICAgICAqQ2xvbmUgKAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgQ0hBUiAgKm5ld05hbWUKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKCiAgICBjb25zdCBDSEFSICAgICAgICAgICAgICAgICAgICAgICpQ
cmludERlcml2ZWRDbGFzc09mU2VsZlR5cGVOYW1lICgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICkgeyByZXR1cm4gKCJtYXAiKTsgfQogICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHZXREZXJpdmVkQ2xhc3NPZlNlbGZUeXBlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkg
eyByZXR1cm4gKFRISU5HX1RZUEVfTUFQKTsgfQoKCiAgICAgCgoKICAgIHZvaWQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRGVzY3JpYmVDcmVhdGUgKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRGVzY3JpYmVGdWxsU3RhdGUgKAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRGVzY3JpYmVGdWxsU3RhdGVQYWNrZWQgKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRGVzY3JpYmVXcmVuRnVsbFN0YXRlICgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIERlc2NyaWJlRGVsZXRlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIERlc2NyaWJlRmlsZU5hbWUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRGVzY3JpYmVEZXB0aCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNj
cmliZU1hcE9uICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNz
IE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIHZvaWQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRGVzY3JpYmVGaWxtTW9kZSAoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlQ3JvcCAo
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNz
RGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIERlc2NyaWJlV3Jlbk9wdHMgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICB2b2lkIAkJCSAgICBMaXN0TWFwKEZJTEUgKmZw
LCBjb25zdCBMaXN0PFR3aW5lPiAmbHMpOwoKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAg
ICAgICAgU2V0RmlsZU5hbWUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgQ0hBUiAgICAgICpuZXdGaWxlTmFtZQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICApOwogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXREZXB0
aCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJTlQgICAg
ICAgbmV3RGVwdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFR3
aW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0RmlsZU5hbWUgKAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKSB7IHJldHVybiAodGhpcy0+cGFyc2VkRmlsZW5hbWUpOyB9CiAgICB2b2lk
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJzZUZpbGVOYW1lICgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICk7CiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldERl
cHRoICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1cm4gKGRlcHRoKTsgfQoKICAg
IEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0Q3VycmVudE1hcCggSU5UIHZhbHVl
KTsKICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0Q3VycmVudE1hcCggdm9p
ZCApOwogICAgTlJIWV9jbGFzc1JvdG9EYXRhICAgICAgICAgICAgICAqR2V0Q3VycmVudE1hcCgp
OwogICAgTlJIWV9jbGFzc1JvdG9EYXRhICAgICAgICAgICAgICAqR2V0Q3VycmVudE1hcCggSU5U
IHZhbHVlKTsKCiAgICAgCiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldElt
YWdlV2lkdGgodm9pZCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
IHJldHVybiAodGhpcy0+SW1hZ2VXaWR0aCk7IH0gICAgICAgCiAgICBJTlQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdldEltYWdlSGVpZ2h0KHZvaWQgKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gKHRoaXMtPkltYWdlSGVpZ2h0KTsgfQoKICAg
IEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0Q3JvcFByZURlY2ltV2lkdGgodm9p
ZCApOwogICAgRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRDcm9wUHJlRGVjaW1I
ZWlnaHQodm9pZCApOwogICAgRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRDcm9w
WG9yaWdpbih2b2lkICk7CiAgICBGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldENy
b3BZb3JpZ2luKHZvaWQgKTsKICAgIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0
RGVjaW1hdGUodm9pZCApOwoKICAgIHVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgICAgICAgKkdl
dEltYWdlRGF0YVJlYWRQdHIodm9pZCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7IHJldHVybiAodGhpcy0+cmFycmF5KTsgfSAgICAgICAKCiAgICB2b2lkICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSZWFkSW1hZ2UoVHdpbmUpOwogICAgWk9PTEVBTiAgICAg
ICAgICAgICAgICAgICAgICAgICBDaGVja01lbW9yeSAoY29uc3QgY2hhciAqbmFtZSk7CiAgICBl
eGNlcHRpb25VViAgICAgICAgICAgICAgICAgICAgIEdldEV4Y2VwdGlvblR5cGUoIHZvaWQgKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gKHRoaXMtPm91
dFVWYXJlYSk7IH0KICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1cmdlRnJh
bmdlKE5SSFlfSU5UX0ZSQU5HRSAqcmFuZ2UpOwogICAgVHdpbmUgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDb25zdHJ1Y3RNYXBOYW1lKElOVCB2YWx1ZSk7CgogICAgdm9pZCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmVsb2FkKHZvaWQgKTsKCiAgICB2b2lkICAgICAgICAgICAgICAg
ICAgICAgVXBkYXRlV3Jlbk9wdHMoIAogCQkJCVR3aW5lICAgICAgICAgICZ0CiAgICApOwogICAg
dm9pZCAgICAgICAgICAgICAgICAgICAgIFJlbW92ZVdyZW5PcHRzKCAKIAkJCQlUd2luZSAgICAg
ICAgICAmdAogICAgKTsKCn07CgogCgogCgojIDM0ICJucmh5L05SSFlfQWNjZXNzLmMiIDIKCiMg
MSAiaC9ucmh5X2NsYXNzTWF0ZXJpYWwuaCIgMQoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKDAog
CgoKCiAKCgogCgoKCgoKIAoKCgpjbGFzcyBOUkhZX2NsYXNzVXNlTWFwOwoKIAogCiAKCiAKdGVt
cGxhdGUgPGNsYXNzIFR5cGU+IGNsYXNzIE5SSFlfbWF0Y2g7CnRlbXBsYXRlIDxjbGFzcyBUeXBl
PiBjbGFzcyBOUkhZX2FscGhhbGlzdDsKCiAKCnN0cnVjdCBOUkhZX2NsYXNzTWF0ZXJpYWwgOgog
ICAgcHVibGljIE5SSFlfY2xhc3NUaGluZywKICAgIHB1YmxpYyBPYnNlcnZlckZhY3RvcnkgPE5S
SFlfY2xhc3NNYXRlcmlhbD4KewogICAgdHlwZWRlZiBOUkhZX2NsYXNzVGhpbmcgaW5oZXJpdGVk
OwogICAgdHlwZWRlZiBOUkhZX2FscGhhbGlzdDxOUkhZX2NsYXNzTWF0ZXJpYWw+IGFscGhhbGlz
dDsKICAgIGZyaWVuZCBOUkhZX21hdGNoIDxOUkhZX2NsYXNzTWF0ZXJpYWw+OwogICAgZnJpZW5k
IE5SSFlfYWxwaGFsaXN0PE5SSFlfY2xhc3NNYXRlcmlhbD47CgogICAgdm9pZCBkZXRhY2goTlJI
WV9kZXBlbmREYXRhICopOwoKICAgIHNob3J0IAlfdXNlbWFwQ29va2llOwoKcHJvdGVjdGVkOgog
ICAgVHdpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICBfYWN0aXZlVXNlbWFwOwoKICAgIHZv
aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemUgKAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKTsKCnB1YmxpYzoKICAgICAKICAgIE5SSFlfY2xhc3NNYXRlcmlhbCAoCiAg
ICAgICAgY29uc3QgQ0hBUiAgKm5hbWUKICAgICAgICApOwogICAgTlJIWV9jbGFzc01hdGVyaWFs
ICgKICAgICAgICBjb25zdCBDSEFSICAgICAgICAgICpuYW1lLAogICAgICAgIE5SSFlfY2xhc3NN
YXRlcmlhbCAgKmNsb25lRnJvbQogICAgICAgICk7CiAgICBOUkhZX2NsYXNzTWF0ZXJpYWwgKAog
ICAgICAgIHZvaWQgCiAgICAgICAgKTsKCiAgICB+TlJIWV9jbGFzc01hdGVyaWFsICgKICAgICAg
ICB2b2lkIAogICAgICAgICk7CgogICAgIAogICAgc3RhdGljIGNvbnN0IENIQVIgICAgICAgICAg
ICAgICAqUHJpbnRTZWxmQ2xhc3NuYW1lICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgeyBy
ZXR1cm4gKCJOUkhZX2NsYXNzTWF0ZXJpYWwiKTsgfQoKICAgICAKCiAgICBzdGF0aWMgSU5UICAg
ICAgICAgICAgICAgICAgICAgIEdldFNlbGZDbGFzc1R5cGUgKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKSB7IHJldHVybiAoVEhJTkdfVFlQRV9NQVRFUklBTCk7IH0KCiAgICBzdGF0aWMgTlJI
WV9idW5jaDxOUkhZX2NsYXNzTWF0ZXJpYWw+ICpGaW5kICgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIgICpuYW1lCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICk7CiAKCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSZW5hbWUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Q0hBUiAgKm5ld05hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAg
ICBOUkhZX2NsYXNzVGhpbmcgICAgICAgICAgICAgICAgICpDbG9uZSAoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSICAqbmV3TmFtZQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAKCgogICAgY29uc3QgQ0hBUiAgICAg
ICAgICAgICAgICAgICAgICAqUHJpbnREZXJpdmVkQ2xhc3NPZlNlbGZUeXBlTmFtZSAoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuICgibWF0ZXJpYWwiKTsgfQogICAgSU5UICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHZXREZXJpdmVkQ2xhc3NPZlNlbGZUeXBlICgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1cm4gKFRISU5HX1RZUEVfTUFURVJJQUwpOyB9
CgogICAgIAogICAgc3RhdGljIFpPT0xFQU4gICAgICAgICAgICAgICAgICBDaGVja1Bvc3NpYmxl
QW1iaWVudCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMICAg
ICAgICAqbmV3QW1iaWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IElOVCAgIG51bWJlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
OwogICAgc3RhdGljIFpPT0xFQU4gICAgICAgICAgICAgICAgICBDaGVja1Bvc3NpYmxlRGlmZnVz
ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMICAgICAgICAq
bmV3RGlmZnVzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IElOVCAgIG51bWJlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAg
c3RhdGljIFpPT0xFQU4gICAgICAgICAgICAgICAgICBDaGVja1Bvc3NpYmxlU3BlY3VsYXIgKAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCAgICAgICAgKm5ld1Nw
ZWN1bGFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSU5U
ICAgbnVtYmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBzdGF0
aWMgWk9PTEVBTiAgICAgICAgICAgICAgICAgIENoZWNrUG9zc2libGVTcGVjdWxhckV4cG9uZW50
ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwgIG5l
d1NwZWN1bGFyRXhwb25lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK
ICAgIHN0YXRpYyBaT09MRUFOICAgICAgICAgICAgICAgICAgQ2hlY2tQb3NzaWJsZU9wYWNpdHkg
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCAgICAgICAgKm5l
d09wYWNpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJ
TlQgICBudW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHN0
YXRpYyBaT09MRUFOICAgICAgICAgICAgICAgICAgQ2hlY2tQb3NzaWJsZVJlZmxlY3RpdmUgKAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCAgICAgICAgKm5ld1Jl
ZmxlY3RpdmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJ
TlQgICBudW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHN0
YXRpYyBaT09MRUFOICAgICAgICAgICAgICAgICAgQ2hlY2tQb3NzaWJsZUlsbHVtICgKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElOVCAgICAgICBuZXdJbGx1
bQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAKCiAgICBaT09M
RUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNldEFtYmllbnQgKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgICpuZXdBbWJpZW50LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSU5UICAgICAgIG51bWJl
cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgWk9PTEVBTiAgICAg
ICAgICAgICAgICAgICAgICAgICBTZXRBbWJpZW50UmVkICgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBuZXdBbWJpZW50UmVkCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAg
ICAgICAgICAgIFNldEFtYmllbnRHcmVlbiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBSRUFMICAgICAgbmV3QW1iaWVudEdyZWVuCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAg
ICAgIFNldEFtYmllbnRCbHVlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFJFQUwgICAgICBuZXdBbWJpZW50Qmx1ZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApOwogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXRB
bWJpZW50SW50ZW5zICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFJFQUwgICAgICBuZXdBbWJpZW50SW50ZW5zCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICk7CgogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXREaWZm
dXNlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwg
ICAgICAqbmV3RGlmZnVzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IElOVCAgICAgICBudW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKTsKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0RGlmZnVzZVJlZCAo
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSRUFMICAgICAg
bmV3RGlmZnVzZVJlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAg
Wk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXREaWZmdXNlR3JlZW4gKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld0RpZmZ1
c2VHcmVlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgWk9PTEVB
TiAgICAgICAgICAgICAgICAgICAgICAgICBTZXREaWZmdXNlQmx1ZSAoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSRUFMICAgICAgbmV3RGlmZnVzZUJsdWUK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFpPT0xFQU4gICAgICAg
ICAgICAgICAgICAgICAgICAgU2V0RGlmZnVzZUludGVucyAoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBSRUFMICAgICAgbmV3RGlmZnVzZUludGVucwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIFpPT0xFQU4gICAgICAgICAg
ICAgICAgICAgICAgICAgU2V0U3BlY3VsYXIgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgICpuZXdTcGVjdWxhciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElOVCAgICAgICBudW1iZXIKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAg
ICAgICAgICAgU2V0U3BlY3VsYXJSZWQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld1NwZWN1bGFyUmVkCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAg
IFNldFNwZWN1bGFyR3JlZW4gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUkVBTCAgICAgIG5ld1NwZWN1bGFyR3JlZW4KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0
U3BlY3VsYXJCbHVlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFJFQUwgICAgICBuZXdTcGVjdWxhckJsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKTsKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0U3BlY3Vs
YXJJbnRlbnMgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UkVBTCAgICAgIG5ld1NwZWN1bGFySW50ZW5zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICk7CgogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXRTcGVjdWxh
ckV4cG9uZW50ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFJFQUwgICAgICBuZXdTcGVjdWxhckV4cG9uZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICk7CgogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXRPcGFj
aXR5ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwg
ICAgICAqbmV3T3BhY2l0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IElOVCAgICAgICBudW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKTsKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0T3BhY2l0eU1pbiAo
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSRUFMICAgICAg
bmV3T3BhY2l0eU1pbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAg
Wk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXRPcGFjaXR5TWF4ICgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBuZXdPcGFjaXR5
TWF4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAg
ICAgICAgICAgICAgICAgICAgICAgIFNldE9wYWNpdHlFeHAgKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld09wYWNpdHlFeHAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBaT09MRUFOICAgICAgICAgICAg
ICAgICAgICAgICAgIFNldFJlZmxlY3RpdmUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgICpuZXdSZWZsZWN0aXZlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSU5UICAgICAgIG51bWJlcgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgWk9PTEVBTiAgICAgICAgICAgICAg
ICAgICAgICAgICBTZXRSZWZsZWN0aXZlUmVkICgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBuZXdSZWZsZWN0aXZlUmVkCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAg
ICAgICAgIFNldFJlZmxlY3RpdmVHcmVlbiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBSRUFMICAgICAgbmV3UmVmbGVjdGl2ZUdyZWVuCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAg
ICAgICAgIFNldFJlZmxlY3RpdmVCbHVlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBuZXdSZWZsZWN0aXZlQmx1ZQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICApOwogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAg
ICAgICBTZXRSZWZsZWN0aXZlSW50ZW5zICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBuZXdSZWZsZWN0aXZlSW50ZW5zCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAg
ICAgICAgICBTZXRJbGx1bSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBJTlQgICAgICAgbmV3SWxsdW0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKTsKCiAgICAgCiAgICBSRUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICpHZXRB
bWJpZW50ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBSRUFMICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdldEFtYmllbnRSZWQgKAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KTsKICAgIFJFQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0QW1iaWVudEdyZWVuICgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBSRUFMICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdldEFtYmllbnRCbHVlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBS
RUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldEFtYmllbnRJbnRlbnMgKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKTsKCiAgICBSRUFMICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICpHZXREaWZmdXNlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBSRUFMICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdldERpZmZ1c2VSZWQgKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKTsKICAgIFJFQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0RGlmZnVzZUdy
ZWVuICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBSRUFMICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdldERpZmZ1c2VCbHVlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7
CiAgICBSRUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldERpZmZ1c2VJbnRlbnMgKAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBSRUFMICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICpHZXRTcGVjdWxhciAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgUkVB
TCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRTcGVjdWxhclJlZCAoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApOwogICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRT
cGVjdWxhckdyZWVuICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBSRUFMICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdldFNwZWN1bGFyQmx1ZSAoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICApOwogICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRTcGVjdWxh
ckludGVucyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIFJFQUwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR2V0U3BlY3VsYXJFeHBvbmVudCAoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICApOwoKICAgIFJFQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkdldE9wYWNp
dHkgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFJFQUwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR2V0T3BhY2l0eU1pbiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwog
ICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRPcGFjaXR5TWF4ICgKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICk7CiAgICBSRUFMICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdldE9wYWNpdHlFeHAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBSRUFMICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICpHZXRSZWZsZWN0aXZlICgKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICk7CiAgICBSRUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFJlZmxl
Y3RpdmVSZWQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFJFQUwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR2V0UmVmbGVjdGl2ZUdyZWVuICgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICk7CiAgICBSRUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFJlZmxlY3Rp
dmVCbHVlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBSRUFMICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdldFJlZmxlY3RpdmVJbnRlbnMgKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKTsKCiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldElsbHVtICgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBUd2luZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdldElsbHVtQXNjaWkgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAg
CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUNyZWF0ZSAoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVz
Y3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIERlc2NyaWJlRnVsbFN0YXRlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIHZv
aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVGdWxsU3RhdGVQYWNrZWQgKAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rl
c2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEZXNjcmliZVdyZW5GdWxsU3RhdGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZURlbGV0ZSAoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3Jp
YmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAg
IERlc2NyaWJlTWF0ZXJpYWxPbiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApOwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RGVzY3JpYmVBbWJpZW50ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICk7CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNj
cmliZURpZmZ1c2UgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xh
c3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVT
cGVjdWxhciAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBO
UkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICApOwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVTcGVj
dWxhckV4cG9uZW50ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs
YXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICk7CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmli
ZU9wYWNpdHkgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Mg
TlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKTsKCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlUmVm
bGVjdGl2ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBO
UkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICApOwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVJbGx1
bSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0Ns
YXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
OwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVUZXh0dXJlICgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NE
ZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cgog
ICAgdm9pZCAJCQkgICAgTGlzdE1hdGVyaWFsKEZJTEUgKmZwLCBjb25zdCBMaXN0PFR3aW5lPiAm
bHMpOwoKICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0VXNlTWFwICgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5SSFlfYnVuY2ggPE5SSFlfY2xh
c3NVc2VNYXA+ICAgKm5ld1VzZU1hcFB0cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICApOwogICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXRVc2VNYXAgKAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlJIWV9jbGFzc1VzZU1hcCAg
ICAqbmV3VXNlTWFwUHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAg
ICBOUkhZX2NsYXNzVXNlTWFwICAgICAgICAgICAgICAgICpHZXRVc2VNYXAoIHZvaWQgKSB7cmV0
dXJuIHVzZW1hcDt9CgogICAgdm9pZCAJCQkgICAgU2V0VXNlTWFwc0xpc3QgKAogICAgCQkJCQlO
UkhZX2J1bmNoIDxOUkhZX2NsYXNzVXNlTWFwPiAgKm5ld1VzZU1hcHMKCQkJCSAgICApOwoKICAg
IHZvaWQgCQkJICAgIFJlbW92ZVVzZU1hcHNMaXN0ICgKICAgIAkJCQkJTlJIWV9idW5jaCA8TlJI
WV9jbGFzc1VzZU1hcD4gICpuZXdVc2VNYXBzCgkJCQkgICAgKTsKCiAgICB2b2lkIAkJCSAgICBF
cmFzZVVzZU1hcHNMaXN0ICgKICAgIAkJCQkJdm9pZAoJCQkJICAgICk7CgogICAgdm9pZAkJCSAg
ICBTZXRBY3RpdmVVc2VtYXBOYW1lIChUd2luZSBuYW1lKXsKCQkJCQlfYWN0aXZlVXNlbWFwID0g
bmFtZTsKCQkJCQlTZXRBY3RpdmVVc2VtYXAoKTsKCQkJCSAgICB9OwoKICAgIHZvaWQJCQkgICAg
U2V0QWN0aXZlVXNlbWFwKHZvaWQpOwoKICAgIFR3aW5lCQkJICAgIEdldEFjdGl2ZVVzZW1hcE5h
bWUgKHZvaWQpewoJCQkJCXJldHVybiBfYWN0aXZlVXNlbWFwOwoJCQkJICAgIH07CgogICAgTlJI
WV9jbGFzc1VzZU1hcCAgICAgICAgICAgICAgICAqdXNlbWFwOwogICAgTGlzdDxOUkhZX2NsYXNz
VXNlTWFwICAqPiAgICAgICBfdXNlbWFwc0xpc3Q7CgogICAgVHdpbmUgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXBUd2luZTsKICAgIFR3aW5lICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWFwdHlwZVR3aW5lOwogICAgVHdpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICB1dnRhZ1R3
aW5lOwoKICAgIHZvaWQgQ3JlYXRlT2JzZXJ2ZXIgKGludCB0eXBlKSB7IGRvQ3JlYXRlT2JzZXJ2
ZXIgKHRoaXMsIHR5cGUpOyB9Owp9OwoKIAoKIAoKIyAzNSAibnJoeS9OUkhZX0FjY2Vzcy5jIiAy
CgojIDEgImgvbnJoeV9jbGFzc01vZGVsLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKIAoKCiAKCgoKCgogCgoKCiAKY2xhc3MgTlJIWV9jbGFzc1RyYWNrU2hhcGU7CgoKIAoKCgoK
CgogCgoKCiAKCiAKIAogCgogCnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBjbGFzcyBOUkhZX21hdGNo
Owp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4gY2xhc3MgTlJIWV9hbHBoYWxpc3Q7CgogCgpzdHJ1Y3Qg
TlJIWV9jbGFzc01vZGVsOgogICAgcHVibGljIE5SSFlfY2xhc3NPYmplY3QsCiAgICBwdWJsaWMg
T2JzZXJ2ZXJGYWN0b3J5IDxOUkhZX2NsYXNzTW9kZWw+CnsKcHJpdmF0ZToKICAgIHR5cGVkZWYg
TlJIWV9jbGFzc09iamVjdCBpbmhlcml0ZWQ7CiAgICB0eXBlZGVmIE5SSFlfYWxwaGFsaXN0PE5S
SFlfY2xhc3NNb2RlbD4gYWxwaGFsaXN0OwogICAgZnJpZW5kIE5SSFlfbWF0Y2ggPE5SSFlfY2xh
c3NNb2RlbD47CiAgICBmcmllbmQgTlJIWV9hbHBoYWxpc3Q8TlJIWV9jbGFzc01vZGVsPjsKCnBy
aXZhdGU6CgogCgoKCgogICAgIAogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBk
b05vdExpZ2h0OwogCgogICAgIAoKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAg
Ym91bmRpbmc7Cgpwcm90ZWN0ZWQ6CiAgICBOUkhZX2NsYXNzVHJhY2tTaGFwZSAgICAgICAgICAg
ICp0cmFja1NoYXBlSW5mbzsgICAgCgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5pdGlhbGl6ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKcHVibGljOgogICAg
IAogICAgTlJIWV9jbGFzc01vZGVsICgKICAgICAgICBjb25zdCBDSEFSICAqbmFtZQogICAgICAg
ICk7CiAgICBOUkhZX2NsYXNzTW9kZWwgKAogICAgICAgIGNvbnN0IENIQVIgICAgICAqbmFtZSwK
ICAgICAgICBOUkhZX2NsYXNzTW9kZWwgKmNsb25lRnJvbQogICAgICAgICk7CgogICAgTlJIWV9j
bGFzc01vZGVsICgKICAgICAgICB2b2lkIAogICAgICAgICk7CgogICAgfk5SSFlfY2xhc3NNb2Rl
bCAoCiAgICAgICAgdm9pZCAKICAgICAgICApOwoKICAgICAKICAgIHN0YXRpYyBjb25zdCBDSEFS
ICAgICAgICAgICAgICAgKlByaW50U2VsZkNsYXNzbmFtZSAoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICApIHsgcmV0dXJuICgiTlJIWV9jbGFzc01vZGVsIik7IH0KCiAgICAgCgogICAgc3RhdGlj
IElOVCAgICAgICAgICAgICAgICAgICAgICBHZXRTZWxmQ2xhc3NUeXBlICgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICkgeyByZXR1cm4gKFRISU5HX1RZUEVfTU9ERUwpOyB9CgogICAgc3RhdGlj
IE5SSFlfYnVuY2g8TlJIWV9jbGFzc01vZGVsPiAqRmluZCAoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSICAqbmFtZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApOwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFJlbmFtZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBD
SEFSICAqbmV3TmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAg
IE5SSFlfY2xhc3NUaGluZyAgICAgICAgICAgICAgICAgKkNsb25lICgKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIgICpuZXdOYW1lCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgIAoKICAgIHZvaWQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRGVzY3JpYmVDcmVhdGUgKAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUZ1bGxTdGF0ZSAo
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNz
RGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIERlc2NyaWJlRnVsbFN0YXRlUGFja2VkICgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVEZWxldGUgKAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rl
c2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAK
CgoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVEb05vdExpZ2h0
ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xh
c3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7
CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlU29saWQgKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2Ny
aWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZv
aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVQcmltYXJ5Q29uc3RyYWludCAo
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNz
RGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwog
ICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZVNlY29uZGFyeUNvbnN0
cmFpbnQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJI
WV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVDb25zdHJh
aW50R2VvbWV0cnkgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xh
c3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKTsKCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJl
VHJhY2tTaGFwZUluZm8gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKTsKCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2Ny
aWJlVHJhY2tTaGFwZUluZm9QYWNrZWQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIERlc2NyaWJlRXh0cmFDaGFubmVsTW9kZSgKCQkJCQljbGFzcyBOUkhZX0NsYXNzRGVzY3Jp
YmVTdHJlYW0gJgoJCQkJICAgICk7CgogCgogICAgY29uc3QgQ0hBUiAgICAgICAgICAgICAgICAg
ICAgICAqUHJpbnREZXJpdmVkQ2xhc3NPZlNlbGZUeXBlTmFtZSAoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICApIHsgcmV0dXJuICgibW9kZWwiKTsgfQogICAgSU5UICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHZXREZXJpdmVkQ2xhc3NPZlNlbGZUeXBlICgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICkgeyByZXR1cm4gKFRISU5HX1RZUEVfTU9ERUwpOyB9CgogCgoKCiAgICBaT09MRUFO
ICAgICAgICAgICAgICAgICAgICAgICAgIFNldERvTm90TGlnaHQgKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWk9PTEVBTiAgICAgbmV3U3RhdHVzCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAg
ICAgICAgIEdldERvTm90TGlnaHQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVy
biAoZG9Ob3RMaWdodCk7IH0KIAoKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAg
U2V0U29saWQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UkVBTCAgICAgIG5ld1NvbGlkVmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKTsKICAgIFJFQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0U29saWQgKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAg
ICAgIFNldEJvdW5kaW5nICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFpPT0xFQU4gICBuZXdCb3VuZGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICApOwogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBHZXRCb3VuZGlu
ZyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKCiAKCgoKCiAgICB2b2lkIENyZWF0ZU9i
c2VydmVyIChpbnQgdHlwZSkgewoJT2JzZXJ2ZXJGYWN0b3J5PE5SSFlfY2xhc3NNb2RlbD46OmRv
Q3JlYXRlT2JzZXJ2ZXIgKHRoaXMsIHR5cGUpOyB9OwoKIAoKICAgIEJPT0xFQU4gICAgICAgICAg
ICAgICAgICAgICAgICAgIENyZWF0ZVRyYWNrU2hhcGVJbmZvICgpOwoKICAgIEJPT0xFQU4gICAg
ICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZVRyYWNrU2hhcGVJbmZvICgpOwoKICAgIE5SSFlf
Y2xhc3NUcmFja1NoYXBlICAgICAgICAgICAgICpHZXRUcmFja1NoYXBlSW5mbyAoKTsKfTsKCiAK
CiAKCgoKIyAzNiAibnJoeS9OUkhZX0FjY2Vzcy5jIiAyCgojIDEgImgvbnJoeV9jbGFzc1VzZU1h
cC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKDAoKIAoKCgojIDEgIi91c3IvaW5jbHVkZS9HTC9nbC5o
IiAxIDMKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgojIDEzNyAiL3Vzci9pbmNsdWRlL0dML2dsLmgiIDMKCgoKCgoKCgpleHRlcm4g
IkMiIHsKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiAKCgoKCgp0eXBlZGVmIGVudW0gewoJIAoJ
R0xfRkFMU0UJCQk9IDAsCglHTF9UUlVFCQkJCT0gMSwKCgkgCglHTF9CWVRFCQkJCT0gMHgxNDAw
LAoJR0xfVU5TSUdORURfQllURQkJPSAweDE0MDEsCglHTF9TSE9SVAkJCT0gMHgxNDAyLAoJR0xf
VU5TSUdORURfU0hPUlQJCT0gMHgxNDAzLAoJR0xfSU5UCQkJCT0gMHgxNDA0LAoJR0xfVU5TSUdO
RURfSU5UCQkJPSAweDE0MDUsCglHTF9GTE9BVAkJCT0gMHgxNDA2LAoJR0xfRE9VQkxFCQkJPSAw
eDE0MEEsCglHTF8yX0JZVEVTCQkJPSAweDE0MDcsCglHTF8zX0JZVEVTCQkJPSAweDE0MDgsCglH
TF80X0JZVEVTCQkJPSAweDE0MDksCgoJIAoJR0xfTElORVMJCQk9IDB4MDAwMSwKCUdMX1BPSU5U
UwkJCT0gMHgwMDAwLAoJR0xfTElORV9TVFJJUAkJCT0gMHgwMDAzLAoJR0xfTElORV9MT09QCQkJ
PSAweDAwMDIsCglHTF9UUklBTkdMRVMJCQk9IDB4MDAwNCwKCUdMX1RSSUFOR0xFX1NUUklQCQk9
IDB4MDAwNSwKCUdMX1RSSUFOR0xFX0ZBTgkJCT0gMHgwMDA2LAoJR0xfUVVBRFMJCQk9IDB4MDAw
NywKCUdMX1FVQURfU1RSSVAJCQk9IDB4MDAwOCwKCUdMX1BPTFlHT04JCQk9IDB4MDAwOSwKCUdM
X0VER0VfRkxBRwkJCT0gMHgwQjQzLAoKCSAKCUdMX1ZFUlRFWF9BUlJBWQkJCT0gMHg4MDc0LAoJ
R0xfTk9STUFMX0FSUkFZCQkJPSAweDgwNzUsCglHTF9DT0xPUl9BUlJBWQkJCT0gMHg4MDc2LAoJ
R0xfSU5ERVhfQVJSQVkJCQk9IDB4ODA3NywKCUdMX1RFWFRVUkVfQ09PUkRfQVJSQVkJCT0gMHg4
MDc4LAoJR0xfRURHRV9GTEFHX0FSUkFZCQk9IDB4ODA3OSwKCUdMX1ZFUlRFWF9BUlJBWV9TSVpF
CQk9IDB4ODA3QSwKCUdMX1ZFUlRFWF9BUlJBWV9UWVBFCQk9IDB4ODA3QiwKCUdMX1ZFUlRFWF9B
UlJBWV9TVFJJREUJCT0gMHg4MDdDLAoJR0xfTk9STUFMX0FSUkFZX1RZUEUJCT0gMHg4MDdFLAoJ
R0xfTk9STUFMX0FSUkFZX1NUUklERQkJPSAweDgwN0YsCglHTF9DT0xPUl9BUlJBWV9TSVpFCQk9
IDB4ODA4MSwKCUdMX0NPTE9SX0FSUkFZX1RZUEUJCT0gMHg4MDgyLAoJR0xfQ09MT1JfQVJSQVlf
U1RSSURFCQk9IDB4ODA4MywKCUdMX0lOREVYX0FSUkFZX1RZUEUJCT0gMHg4MDg1LAoJR0xfSU5E
RVhfQVJSQVlfU1RSSURFCQk9IDB4ODA4NiwKCUdMX1RFWFRVUkVfQ09PUkRfQVJSQVlfU0laRQk9
IDB4ODA4OCwKCUdMX1RFWFRVUkVfQ09PUkRfQVJSQVlfVFlQRQk9IDB4ODA4OSwKCUdMX1RFWFRV
UkVfQ09PUkRfQVJSQVlfU1RSSURFCT0gMHg4MDhBLAoJR0xfRURHRV9GTEFHX0FSUkFZX1NUUklE
RQk9IDB4ODA4QywKCUdMX1ZFUlRFWF9BUlJBWV9QT0lOVEVSCQk9IDB4ODA4RSwKCUdMX05PUk1B
TF9BUlJBWV9QT0lOVEVSCQk9IDB4ODA4RiwKCUdMX0NPTE9SX0FSUkFZX1BPSU5URVIJCT0gMHg4
MDkwLAoJR0xfSU5ERVhfQVJSQVlfUE9JTlRFUgkJPSAweDgwOTEsCglHTF9URVhUVVJFX0NPT1JE
X0FSUkFZX1BPSU5URVIJPSAweDgwOTIsCglHTF9FREdFX0ZMQUdfQVJSQVlfUE9JTlRFUgk9IDB4
ODA5MywKICAgICAgICBHTF9WMkYJCQkJPSAweDJBMjAsCglHTF9WM0YJCQkJPSAweDJBMjEsCglH
TF9DNFVCX1YyRgkJCT0gMHgyQTIyLAoJR0xfQzRVQl9WM0YJCQk9IDB4MkEyMywKCUdMX0MzRl9W
M0YJCQk9IDB4MkEyNCwKCUdMX04zRl9WM0YJCQk9IDB4MkEyNSwKCUdMX0M0Rl9OM0ZfVjNGCQkJ
PSAweDJBMjYsCglHTF9UMkZfVjNGCQkJPSAweDJBMjcsCglHTF9UNEZfVjRGCQkJPSAweDJBMjgs
CglHTF9UMkZfQzRVQl9WM0YJCQk9IDB4MkEyOSwKCUdMX1QyRl9DM0ZfVjNGCQkJPSAweDJBMkEs
CglHTF9UMkZfTjNGX1YzRgkJCT0gMHgyQTJCLAoJR0xfVDJGX0M0Rl9OM0ZfVjNGCQk9IDB4MkEy
QywKCUdMX1Q0Rl9DNEZfTjNGX1Y0RgkJPSAweDJBMkQsCgoJIAoJR0xfTUFUUklYX01PREUJCQk9
IDB4MEJBMCwKCUdMX01PREVMVklFVwkJCT0gMHgxNzAwLAoJR0xfUFJPSkVDVElPTgkJCT0gMHgx
NzAxLAoJR0xfVEVYVFVSRQkJCT0gMHgxNzAyLAoKCSAKCUdMX1BPSU5UX1NNT09USAkJCT0gMHgw
QjEwLAoJR0xfUE9JTlRfU0laRQkJCT0gMHgwQjExLAoJR0xfUE9JTlRfU0laRV9HUkFOVUxBUklU
WSAJPSAweDBCMTMsCglHTF9QT0lOVF9TSVpFX1JBTkdFCQk9IDB4MEIxMiwKCgkgCglHTF9MSU5F
X1NNT09USAkJCT0gMHgwQjIwLAoJR0xfTElORV9TVElQUExFCQkJPSAweDBCMjQsCglHTF9MSU5F
X1NUSVBQTEVfUEFUVEVSTgkJPSAweDBCMjUsCglHTF9MSU5FX1NUSVBQTEVfUkVQRUFUCQk9IDB4
MEIyNiwKCUdMX0xJTkVfV0lEVEgJCQk9IDB4MEIyMSwKCUdMX0xJTkVfV0lEVEhfR1JBTlVMQVJJ
VFkJPSAweDBCMjMsCglHTF9MSU5FX1dJRFRIX1JBTkdFCQk9IDB4MEIyMiwKCgkgCglHTF9QT0lO
VAkJCT0gMHgxQjAwLAoJR0xfTElORQkJCQk9IDB4MUIwMSwKCUdMX0ZJTEwJCQkJPSAweDFCMDIs
CglHTF9DQ1cJCQkJPSAweDA5MDEsCglHTF9DVwkJCQk9IDB4MDkwMCwKCUdMX0ZST05UCQkJPSAw
eDA0MDQsCglHTF9CQUNLCQkJCT0gMHgwNDA1LAoJR0xfQ1VMTF9GQUNFCQkJPSAweDBCNDQsCglH
TF9DVUxMX0ZBQ0VfTU9ERQkJPSAweDBCNDUsCglHTF9QT0xZR09OX1NNT09USAkJPSAweDBCNDEs
CglHTF9QT0xZR09OX1NUSVBQTEUJCT0gMHgwQjQyLAoJR0xfRlJPTlRfRkFDRQkJCT0gMHgwQjQ2
LAoJR0xfUE9MWUdPTl9NT0RFCQkJPSAweDBCNDAsCglHTF9QT0xZR09OX09GRlNFVF9GQUNUT1IJ
PSAweDgwMzgsCglHTF9QT0xZR09OX09GRlNFVF9VTklUUwkJPSAweDJBMDAsCglHTF9QT0xZR09O
X09GRlNFVF9QT0lOVAkJPSAweDJBMDEsCglHTF9QT0xZR09OX09GRlNFVF9MSU5FCQk9IDB4MkEw
MiwKCUdMX1BPTFlHT05fT0ZGU0VUX0ZJTEwJCT0gMHg4MDM3LAoKCSAKCUdMX0NPTVBJTEUJCQk9
IDB4MTMwMCwKCUdMX0NPTVBJTEVfQU5EX0VYRUNVVEUJCT0gMHgxMzAxLAoJR0xfTElTVF9CQVNF
CQkJPSAweDBCMzIsCglHTF9MSVNUX0lOREVYCQkJPSAweDBCMzMsCglHTF9MSVNUX01PREUJCQk9
IDB4MEIzMCwKCgkgCglHTF9ORVZFUgkJCT0gMHgwMjAwLAoJR0xfTEVTUwkJCQk9IDB4MDIwMSwK
CUdMX0dFUVVBTAkJCT0gMHgwMjA2LAoJR0xfTEVRVUFMCQkJPSAweDAyMDMsCglHTF9HUkVBVEVS
CQkJPSAweDAyMDQsCglHTF9OT1RFUVVBTAkJCT0gMHgwMjA1LAoJR0xfRVFVQUwJCQk9IDB4MDIw
MiwKCUdMX0FMV0FZUwkJCT0gMHgwMjA3LAoJR0xfREVQVEhfVEVTVAkJCT0gMHgwQjcxLAoJR0xf
REVQVEhfQklUUwkJCT0gMHgwRDU2LAoJR0xfREVQVEhfQ0xFQVJfVkFMVUUJCT0gMHgwQjczLAoJ
R0xfREVQVEhfRlVOQwkJCT0gMHgwQjc0LAoJR0xfREVQVEhfUkFOR0UJCQk9IDB4MEI3MCwKCUdM
X0RFUFRIX1dSSVRFTUFTSwkJPSAweDBCNzIsCglHTF9ERVBUSF9DT01QT05FTlQJCT0gMHgxOTAy
LAoKCSAKCUdMX0xJR0hUSU5HCQkJPSAweDBCNTAsCglHTF9MSUdIVDAJCQk9IDB4NDAwMCwKCUdM
X0xJR0hUMQkJCT0gMHg0MDAxLAoJR0xfTElHSFQyCQkJPSAweDQwMDIsCglHTF9MSUdIVDMJCQk9
IDB4NDAwMywKCUdMX0xJR0hUNAkJCT0gMHg0MDA0LAoJR0xfTElHSFQ1CQkJPSAweDQwMDUsCglH
TF9MSUdIVDYJCQk9IDB4NDAwNiwKCUdMX0xJR0hUNwkJCT0gMHg0MDA3LAoJR0xfU1BPVF9FWFBP
TkVOVAkJPSAweDEyMDUsCglHTF9TUE9UX0NVVE9GRgkJCT0gMHgxMjA2LAoJR0xfQ09OU1RBTlRf
QVRURU5VQVRJT04JCT0gMHgxMjA3LAoJR0xfTElORUFSX0FUVEVOVUFUSU9OCQk9IDB4MTIwOCwK
CUdMX1FVQURSQVRJQ19BVFRFTlVBVElPTgk9IDB4MTIwOSwKCUdMX0FNQklFTlQJCQk9IDB4MTIw
MCwKCUdMX0RJRkZVU0UJCQk9IDB4MTIwMSwKCUdMX1NQRUNVTEFSCQkJPSAweDEyMDIsCglHTF9T
SElOSU5FU1MJCQk9IDB4MTYwMSwKCUdMX0VNSVNTSU9OCQkJPSAweDE2MDAsCglHTF9QT1NJVElP
TgkJCT0gMHgxMjAzLAoJR0xfU1BPVF9ESVJFQ1RJT04JCT0gMHgxMjA0LAoJR0xfQU1CSUVOVF9B
TkRfRElGRlVTRQkJPSAweDE2MDIsCglHTF9DT0xPUl9JTkRFWEVTCQk9IDB4MTYwMywKCUdMX0xJ
R0hUX01PREVMX1RXT19TSURFCQk9IDB4MEI1MiwKCUdMX0xJR0hUX01PREVMX0xPQ0FMX1ZJRVdF
Ugk9IDB4MEI1MSwKCUdMX0xJR0hUX01PREVMX0FNQklFTlQJCT0gMHgwQjUzLAoJR0xfRlJPTlRf
QU5EX0JBQ0sJCT0gMHgwNDA4LAoJR0xfU0hBREVfTU9ERUwJCQk9IDB4MEI1NCwKCUdMX0ZMQVQJ
CQkJPSAweDFEMDAsCglHTF9TTU9PVEgJCQk9IDB4MUQwMSwKCUdMX0NPTE9SX01BVEVSSUFMCQk9
IDB4MEI1NywKCUdMX0NPTE9SX01BVEVSSUFMX0ZBQ0UJCT0gMHgwQjU1LAoJR0xfQ09MT1JfTUFU
RVJJQUxfUEFSQU1FVEVSCT0gMHgwQjU2LAoJR0xfTk9STUFMSVpFCQkJPSAweDBCQTEsCgoJIAoJ
R0xfQ0xJUF9QTEFORTAJCQk9IDB4MzAwMCwKCUdMX0NMSVBfUExBTkUxCQkJPSAweDMwMDEsCglH
TF9DTElQX1BMQU5FMgkJCT0gMHgzMDAyLAoJR0xfQ0xJUF9QTEFORTMJCQk9IDB4MzAwMywKCUdM
X0NMSVBfUExBTkU0CQkJPSAweDMwMDQsCglHTF9DTElQX1BMQU5FNQkJCT0gMHgzMDA1LAoKCSAK
CUdMX0FDQ1VNX1JFRF9CSVRTCQk9IDB4MEQ1OCwKCUdMX0FDQ1VNX0dSRUVOX0JJVFMJCT0gMHgw
RDU5LAoJR0xfQUNDVU1fQkxVRV9CSVRTCQk9IDB4MEQ1QSwKCUdMX0FDQ1VNX0FMUEhBX0JJVFMJ
CT0gMHgwRDVCLAoJR0xfQUNDVU1fQ0xFQVJfVkFMVUUJCT0gMHgwQjgwLAoJR0xfQUNDVU0JCQk9
IDB4MDEwMCwKCUdMX0FERAkJCQk9IDB4MDEwNCwKCUdMX0xPQUQJCQkJPSAweDAxMDEsCglHTF9N
VUxUCQkJCT0gMHgwMTAzLAoJR0xfUkVUVVJOCQkJPSAweDAxMDIsCgoJIAoJR0xfQUxQSEFfVEVT
VAkJCT0gMHgwQkMwLAoJR0xfQUxQSEFfVEVTVF9SRUYJCT0gMHgwQkMyLAoJR0xfQUxQSEFfVEVT
VF9GVU5DCQk9IDB4MEJDMSwKCgkgCglHTF9CTEVORAkJCT0gMHgwQkUyLAoJR0xfQkxFTkRfU1JD
CQkJPSAweDBCRTEsCglHTF9CTEVORF9EU1QJCQk9IDB4MEJFMCwKCUdMX1pFUk8JCQkJPSAwLAoJ
R0xfT05FCQkJCT0gMSwKCUdMX1NSQ19DT0xPUgkJCT0gMHgwMzAwLAoJR0xfT05FX01JTlVTX1NS
Q19DT0xPUgkJPSAweDAzMDEsCglHTF9EU1RfQ09MT1IJCQk9IDB4MDMwNiwKCUdMX09ORV9NSU5V
U19EU1RfQ09MT1IJCT0gMHgwMzA3LAoJR0xfU1JDX0FMUEhBCQkJPSAweDAzMDIsCglHTF9PTkVf
TUlOVVNfU1JDX0FMUEhBCQk9IDB4MDMwMywKCUdMX0RTVF9BTFBIQQkJCT0gMHgwMzA0LAoJR0xf
T05FX01JTlVTX0RTVF9BTFBIQQkJPSAweDAzMDUsCglHTF9TUkNfQUxQSEFfU0FUVVJBVEUJCT0g
MHgwMzA4LAoJR0xfQ09OU1RBTlRfQ09MT1IJCT0gMHg4MDAxLAoJR0xfT05FX01JTlVTX0NPTlNU
QU5UX0NPTE9SCT0gMHg4MDAyLAoJR0xfQ09OU1RBTlRfQUxQSEEJCT0gMHg4MDAzLAoJR0xfT05F
X01JTlVTX0NPTlNUQU5UX0FMUEhBCT0gMHg4MDA0LAoKCSAKCUdMX0ZFRURCQUNLCQkJPSAweDFD
MDEsCglHTF9SRU5ERVIJCQk9IDB4MUMwMCwKCUdMX1NFTEVDVAkJCT0gMHgxQzAyLAoKCSAKCUdM
XzJECQkJCT0gMHgwNjAwLAoJR0xfM0QJCQkJPSAweDA2MDEsCglHTF8zRF9DT0xPUgkJCT0gMHgw
NjAyLAoJR0xfM0RfQ09MT1JfVEVYVFVSRQkJPSAweDA2MDMsCglHTF80RF9DT0xPUl9URVhUVVJF
CQk9IDB4MDYwNCwKCUdMX1BPSU5UX1RPS0VOCQkJPSAweDA3MDEsCglHTF9MSU5FX1RPS0VOCQkJ
PSAweDA3MDIsCglHTF9MSU5FX1JFU0VUX1RPS0VOCQk9IDB4MDcwNywKCUdMX1BPTFlHT05fVE9L
RU4JCT0gMHgwNzAzLAoJR0xfQklUTUFQX1RPS0VOCQkJPSAweDA3MDQsCglHTF9EUkFXX1BJWEVM
X1RPS0VOCQk9IDB4MDcwNSwKCUdMX0NPUFlfUElYRUxfVE9LRU4JCT0gMHgwNzA2LAoJR0xfUEFT
U19USFJPVUdIX1RPS0VOCQk9IDB4MDcwMCwKCUdMX0ZFRURCQUNLX0JVRkZFUl9QT0lOVEVSCT0g
MHgwREYwLAoJR0xfRkVFREJBQ0tfQlVGRkVSX1NJWkUJCT0gMHgwREYxLAoJR0xfRkVFREJBQ0tf
QlVGRkVSX1RZUEUJCT0gMHgwREYyLAoKCgkgCglHTF9GT0cJCQkJPSAweDBCNjAsCglHTF9GT0df
TU9ERQkJCT0gMHgwQjY1LAoJR0xfRk9HX0RFTlNJVFkJCQk9IDB4MEI2MiwKCUdMX0ZPR19DT0xP
UgkJCT0gMHgwQjY2LAoJR0xfRk9HX0lOREVYCQkJPSAweDBCNjEsCglHTF9GT0dfU1RBUlQJCQk9
IDB4MEI2MywKCUdMX0ZPR19FTkQJCQk9IDB4MEI2NCwKCUdMX0xJTkVBUgkJCT0gMHgyNjAxLAoJ
R0xfRVhQCQkJCT0gMHgwODAwLAoJR0xfRVhQMgkJCQk9IDB4MDgwMSwKCgkgCglHTF9MT0dJQ19P
UAkJCT0gMHgwQkYxLAoJR0xfSU5ERVhfTE9HSUNfT1AJCT0gMHgwQkYxLAoJR0xfQ09MT1JfTE9H
SUNfT1AJCT0gMHgwQkYyLAoJR0xfTE9HSUNfT1BfTU9ERQkJPSAweDBCRjAsCglHTF9DTEVBUgkJ
CT0gMHgxNTAwLAoJR0xfU0VUCQkJCT0gMHgxNTBGLAoJR0xfQ09QWQkJCQk9IDB4MTUwMywKCUdM
X0NPUFlfSU5WRVJURUQJCT0gMHgxNTBDLAoJR0xfTk9PUAkJCQk9IDB4MTUwNSwKCUdMX0lOVkVS
VAkJCT0gMHgxNTBBLAoJR0xfQU5ECQkJCT0gMHgxNTAxLAoJR0xfTkFORAkJCQk9IDB4MTUwRSwK
CUdMX09SCQkJCT0gMHgxNTA3LAoJR0xfTk9SCQkJCT0gMHgxNTA4LAoJR0xfWE9SCQkJCT0gMHgx
NTA2LAoJR0xfRVFVSVYJCQk9IDB4MTUwOSwKCUdMX0FORF9SRVZFUlNFCQkJPSAweDE1MDIsCglH
TF9BTkRfSU5WRVJURUQJCQk9IDB4MTUwNCwKCUdMX09SX1JFVkVSU0UJCQk9IDB4MTUwQiwKCUdM
X09SX0lOVkVSVEVECQkJPSAweDE1MEQsCgoJIAoJR0xfU1RFTkNJTF9URVNUCQkJPSAweDBCOTAs
CglHTF9TVEVOQ0lMX1dSSVRFTUFTSwkJPSAweDBCOTgsCglHTF9TVEVOQ0lMX0JJVFMJCQk9IDB4
MEQ1NywKCUdMX1NURU5DSUxfRlVOQwkJCT0gMHgwQjkyLAoJR0xfU1RFTkNJTF9WQUxVRV9NQVNL
CQk9IDB4MEI5MywKCUdMX1NURU5DSUxfUkVGCQkJPSAweDBCOTcsCglHTF9TVEVOQ0lMX0ZBSUwJ
CQk9IDB4MEI5NCwKCUdMX1NURU5DSUxfUEFTU19ERVBUSF9QQVNTCT0gMHgwQjk2LAoJR0xfU1RF
TkNJTF9QQVNTX0RFUFRIX0ZBSUwJPSAweDBCOTUsCglHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFCQk9
IDB4MEI5MSwKCUdMX1NURU5DSUxfSU5ERVgJCT0gMHgxOTAxLAoJR0xfS0VFUAkJCQk9IDB4MUUw
MCwKCUdMX1JFUExBQ0UJCQk9IDB4MUUwMSwKCUdMX0lOQ1IJCQkJPSAweDFFMDIsCglHTF9ERUNS
CQkJCT0gMHgxRTAzLAoKCSAKCUdMX05PTkUJCQkJPSAwLAoJR0xfTEVGVAkJCQk9IDB4MDQwNiwK
CUdMX1JJR0hUCQkJPSAweDA0MDcsCgkgCgkgCgkgCglHTF9GUk9OVF9MRUZUCQkJPSAweDA0MDAs
CglHTF9GUk9OVF9SSUdIVAkJCT0gMHgwNDAxLAoJR0xfQkFDS19MRUZUCQkJPSAweDA0MDIsCglH
TF9CQUNLX1JJR0hUCQkJPSAweDA0MDMsCglHTF9BVVgwCQkJCT0gMHgwNDA5LAoJR0xfQVVYMQkJ
CQk9IDB4MDQwQSwKCUdMX0FVWDIJCQkJPSAweDA0MEIsCglHTF9BVVgzCQkJCT0gMHgwNDBDLAoJ
R0xfQ09MT1JfSU5ERVgJCQk9IDB4MTkwMCwKCUdMX1JFRAkJCQk9IDB4MTkwMywKCUdMX0dSRUVO
CQkJPSAweDE5MDQsCglHTF9CTFVFCQkJCT0gMHgxOTA1LAoJR0xfQUxQSEEJCQk9IDB4MTkwNiwK
CUdMX0xVTUlOQU5DRQkJCT0gMHgxOTA5LAoJR0xfTFVNSU5BTkNFX0FMUEhBCQk9IDB4MTkwQSwK
CUdMX0FMUEhBX0JJVFMJCQk9IDB4MEQ1NSwKCUdMX1JFRF9CSVRTCQkJPSAweDBENTIsCglHTF9H
UkVFTl9CSVRTCQkJPSAweDBENTMsCglHTF9CTFVFX0JJVFMJCQk9IDB4MEQ1NCwKCUdMX0lOREVY
X0JJVFMJCQk9IDB4MEQ1MSwKCUdMX1NVQlBJWEVMX0JJVFMJCT0gMHgwRDUwLAoJR0xfQVVYX0JV
RkZFUlMJCQk9IDB4MEMwMCwKCUdMX1JFQURfQlVGRkVSCQkJPSAweDBDMDIsCglHTF9EUkFXX0JV
RkZFUgkJCT0gMHgwQzAxLAoJR0xfRE9VQkxFQlVGRkVSCQkJPSAweDBDMzIsCglHTF9TVEVSRU8J
CQk9IDB4MEMzMywKCUdMX0JJVE1BUAkJCT0gMHgxQTAwLAoJR0xfQ09MT1IJCQk9IDB4MTgwMCwK
CUdMX0RFUFRICQkJPSAweDE4MDEsCglHTF9TVEVOQ0lMCQkJPSAweDE4MDIsCglHTF9ESVRIRVIJ
CQk9IDB4MEJEMCwKCUdMX1JHQgkJCQk9IDB4MTkwNywKCUdMX1JHQkEJCQkJPSAweDE5MDgsCgoJ
IAoJR0xfTUFYX0xJU1RfTkVTVElORwkJPSAweDBCMzEsCglHTF9NQVhfQVRUUklCX1NUQUNLX0RF
UFRICT0gMHgwRDM1LAoJR0xfTUFYX01PREVMVklFV19TVEFDS19ERVBUSAk9IDB4MEQzNiwKCUdM
X01BWF9OQU1FX1NUQUNLX0RFUFRICQk9IDB4MEQzNywKCUdMX01BWF9QUk9KRUNUSU9OX1NUQUNL
X0RFUFRICT0gMHgwRDM4LAoJR0xfTUFYX1RFWFRVUkVfU1RBQ0tfREVQVEgJPSAweDBEMzksCglH
TF9NQVhfRVZBTF9PUkRFUgkJPSAweDBEMzAsCglHTF9NQVhfTElHSFRTCQkJPSAweDBEMzEsCglH
TF9NQVhfQ0xJUF9QTEFORVMJCT0gMHgwRDMyLAoJR0xfTUFYX1RFWFRVUkVfU0laRQkJPSAweDBE
MzMsCglHTF9NQVhfUElYRUxfTUFQX1RBQkxFCQk9IDB4MEQzNCwKCUdMX01BWF9WSUVXUE9SVF9E
SU1TCQk9IDB4MEQzQSwKCUdMX01BWF9DTElFTlRfQVRUUklCX1NUQUNLX0RFUFRIPSAweDBEM0Is
CgoJIAoJR0xfQVRUUklCX1NUQUNLX0RFUFRICQk9IDB4MEJCMCwKCUdMX0NMSUVOVF9BVFRSSUJf
U1RBQ0tfREVQVEgJPSAweDBCQjEsCglHTF9DT0xPUl9DTEVBUl9WQUxVRQkJPSAweDBDMjIsCglH
TF9DT0xPUl9XUklURU1BU0sJCT0gMHgwQzIzLAoJR0xfQ1VSUkVOVF9JTkRFWAkJPSAweDBCMDEs
CglHTF9DVVJSRU5UX0NPTE9SCQk9IDB4MEIwMCwKCUdMX0NVUlJFTlRfTk9STUFMCQk9IDB4MEIw
MiwKCUdMX0NVUlJFTlRfUkFTVEVSX0NPTE9SCQk9IDB4MEIwNCwKCUdMX0NVUlJFTlRfUkFTVEVS
X0RJU1RBTkNFCT0gMHgwQjA5LAoJR0xfQ1VSUkVOVF9SQVNURVJfSU5ERVgJCT0gMHgwQjA1LAoJ
R0xfQ1VSUkVOVF9SQVNURVJfUE9TSVRJT04JPSAweDBCMDcsCglHTF9DVVJSRU5UX1JBU1RFUl9U
RVhUVVJFX0NPT1JEUyA9IDB4MEIwNiwKCUdMX0NVUlJFTlRfUkFTVEVSX1BPU0lUSU9OX1ZBTElE
ID0gMHgwQjA4LAoJR0xfQ1VSUkVOVF9URVhUVVJFX0NPT1JEUwk9IDB4MEIwMywKCUdMX0lOREVY
X0NMRUFSX1ZBTFVFCQk9IDB4MEMyMCwKCUdMX0lOREVYX01PREUJCQk9IDB4MEMzMCwKCUdMX0lO
REVYX1dSSVRFTUFTSwkJPSAweDBDMjEsCglHTF9NT0RFTFZJRVdfTUFUUklYCQk9IDB4MEJBNiwK
CUdMX01PREVMVklFV19TVEFDS19ERVBUSAk9IDB4MEJBMywKCUdMX05BTUVfU1RBQ0tfREVQVEgJ
CT0gMHgwRDcwLAoJR0xfUFJPSkVDVElPTl9NQVRSSVgJCT0gMHgwQkE3LAoJR0xfUFJPSkVDVElP
Tl9TVEFDS19ERVBUSAk9IDB4MEJBNCwKCUdMX1JFTkRFUl9NT0RFCQkJPSAweDBDNDAsCglHTF9S
R0JBX01PREUJCQk9IDB4MEMzMSwKCUdMX1RFWFRVUkVfTUFUUklYCQk9IDB4MEJBOCwKCUdMX1RF
WFRVUkVfU1RBQ0tfREVQVEgJCT0gMHgwQkE1LAoJR0xfVklFV1BPUlQJCQk9IDB4MEJBMiwKCgoJ
IAoJR0xfQVVUT19OT1JNQUwJCQk9IDB4MEQ4MCwKCUdMX01BUDFfQ09MT1JfNAkJCT0gMHgwRDkw
LAoJR0xfTUFQMV9HUklEX0RPTUFJTgkJPSAweDBERDAsCglHTF9NQVAxX0dSSURfU0VHTUVOVFMJ
CT0gMHgwREQxLAoJR0xfTUFQMV9JTkRFWAkJCT0gMHgwRDkxLAoJR0xfTUFQMV9OT1JNQUwJCQk9
IDB4MEQ5MiwKCUdMX01BUDFfVEVYVFVSRV9DT09SRF8xCQk9IDB4MEQ5MywKCUdMX01BUDFfVEVY
VFVSRV9DT09SRF8yCQk9IDB4MEQ5NCwKCUdMX01BUDFfVEVYVFVSRV9DT09SRF8zCQk9IDB4MEQ5
NSwKCUdMX01BUDFfVEVYVFVSRV9DT09SRF80CQk9IDB4MEQ5NiwKCUdMX01BUDFfVkVSVEVYXzMJ
CT0gMHgwRDk3LAoJR0xfTUFQMV9WRVJURVhfNAkJPSAweDBEOTgsCglHTF9NQVAyX0NPTE9SXzQJ
CQk9IDB4MERCMCwKCUdMX01BUDJfR1JJRF9ET01BSU4JCT0gMHgwREQyLAoJR0xfTUFQMl9HUklE
X1NFR01FTlRTCQk9IDB4MEREMywKCUdMX01BUDJfSU5ERVgJCQk9IDB4MERCMSwKCUdMX01BUDJf
Tk9STUFMCQkJPSAweDBEQjIsCglHTF9NQVAyX1RFWFRVUkVfQ09PUkRfMQkJPSAweDBEQjMsCglH
TF9NQVAyX1RFWFRVUkVfQ09PUkRfMgkJPSAweDBEQjQsCglHTF9NQVAyX1RFWFRVUkVfQ09PUkRf
MwkJPSAweDBEQjUsCglHTF9NQVAyX1RFWFRVUkVfQ09PUkRfNAkJPSAweDBEQjYsCglHTF9NQVAy
X1ZFUlRFWF8zCQk9IDB4MERCNywKCUdMX01BUDJfVkVSVEVYXzQJCT0gMHgwREI4LAoJR0xfQ09F
RkYJCQk9IDB4MEEwMCwKCUdMX0RPTUFJTgkJCT0gMHgwQTAyLAoJR0xfT1JERVIJCQk9IDB4MEEw
MSwKCgkgCglHTF9GT0dfSElOVAkJCT0gMHgwQzU0LAoJR0xfTElORV9TTU9PVEhfSElOVAkJPSAw
eDBDNTIsCglHTF9QRVJTUEVDVElWRV9DT1JSRUNUSU9OX0hJTlQJPSAweDBDNTAsCglHTF9QT0lO
VF9TTU9PVEhfSElOVAkJPSAweDBDNTEsCglHTF9QT0xZR09OX1NNT09USF9ISU5UCQk9IDB4MEM1
MywKCUdMX0RPTlRfQ0FSRQkJCT0gMHgxMTAwLAoJR0xfRkFTVEVTVAkJCT0gMHgxMTAxLAoJR0xf
TklDRVNUCQkJPSAweDExMDIsCgoJIAoJR0xfU0NJU1NPUl9URVNUCQkJPSAweDBDMTEsCglHTF9T
Q0lTU09SX0JPWAkJCT0gMHgwQzEwLAoKCSAKCUdMX01BUF9DT0xPUgkJCT0gMHgwRDEwLAoJR0xf
TUFQX1NURU5DSUwJCQk9IDB4MEQxMSwKCUdMX0lOREVYX1NISUZUCQkJPSAweDBEMTIsCglHTF9J
TkRFWF9PRkZTRVQJCQk9IDB4MEQxMywKCUdMX1JFRF9TQ0FMRQkJCT0gMHgwRDE0LAoJR0xfUkVE
X0JJQVMJCQk9IDB4MEQxNSwKCUdMX0dSRUVOX1NDQUxFCQkJPSAweDBEMTgsCglHTF9HUkVFTl9C
SUFTCQkJPSAweDBEMTksCglHTF9CTFVFX1NDQUxFCQkJPSAweDBEMUEsCglHTF9CTFVFX0JJQVMJ
CQk9IDB4MEQxQiwKCUdMX0FMUEhBX1NDQUxFCQkJPSAweDBEMUMsCglHTF9BTFBIQV9CSUFTCQkJ
PSAweDBEMUQsCglHTF9ERVBUSF9TQ0FMRQkJCT0gMHgwRDFFLAoJR0xfREVQVEhfQklBUwkJCT0g
MHgwRDFGLAoJR0xfUElYRUxfTUFQX1NfVE9fU19TSVpFCT0gMHgwQ0IxLAoJR0xfUElYRUxfTUFQ
X0lfVE9fSV9TSVpFCT0gMHgwQ0IwLAoJR0xfUElYRUxfTUFQX0lfVE9fUl9TSVpFCT0gMHgwQ0Iy
LAoJR0xfUElYRUxfTUFQX0lfVE9fR19TSVpFCT0gMHgwQ0IzLAoJR0xfUElYRUxfTUFQX0lfVE9f
Ql9TSVpFCT0gMHgwQ0I0LAoJR0xfUElYRUxfTUFQX0lfVE9fQV9TSVpFCT0gMHgwQ0I1LAoJR0xf
UElYRUxfTUFQX1JfVE9fUl9TSVpFCT0gMHgwQ0I2LAoJR0xfUElYRUxfTUFQX0dfVE9fR19TSVpF
CT0gMHgwQ0I3LAoJR0xfUElYRUxfTUFQX0JfVE9fQl9TSVpFCT0gMHgwQ0I4LAoJR0xfUElYRUxf
TUFQX0FfVE9fQV9TSVpFCT0gMHgwQ0I5LAoJR0xfUElYRUxfTUFQX1NfVE9fUwkJPSAweDBDNzEs
CglHTF9QSVhFTF9NQVBfSV9UT19JCQk9IDB4MEM3MCwKCUdMX1BJWEVMX01BUF9JX1RPX1IJCT0g
MHgwQzcyLAoJR0xfUElYRUxfTUFQX0lfVE9fRwkJPSAweDBDNzMsCglHTF9QSVhFTF9NQVBfSV9U
T19CCQk9IDB4MEM3NCwKCUdMX1BJWEVMX01BUF9JX1RPX0EJCT0gMHgwQzc1LAoJR0xfUElYRUxf
TUFQX1JfVE9fUgkJPSAweDBDNzYsCglHTF9QSVhFTF9NQVBfR19UT19HCQk9IDB4MEM3NywKCUdM
X1BJWEVMX01BUF9CX1RPX0IJCT0gMHgwQzc4LAoJR0xfUElYRUxfTUFQX0FfVE9fQQkJPSAweDBD
NzksCglHTF9QQUNLX0FMSUdOTUVOVAkJPSAweDBEMDUsCglHTF9QQUNLX0xTQl9GSVJTVAkJPSAw
eDBEMDEsCglHTF9QQUNLX1JPV19MRU5HVEgJCT0gMHgwRDAyLAoJR0xfUEFDS19TS0lQX1BJWEVM
UwkJPSAweDBEMDQsCglHTF9QQUNLX1NLSVBfUk9XUwkJPSAweDBEMDMsCglHTF9QQUNLX1NXQVBf
QllURVMJCT0gMHgwRDAwLAoJR0xfVU5QQUNLX0FMSUdOTUVOVAkJPSAweDBDRjUsCglHTF9VTlBB
Q0tfTFNCX0ZJUlNUCQk9IDB4MENGMSwKCUdMX1VOUEFDS19ST1dfTEVOR1RICQk9IDB4MENGMiwK
CUdMX1VOUEFDS19TS0lQX1BJWEVMUwkJPSAweDBDRjQsCglHTF9VTlBBQ0tfU0tJUF9ST1dTCQk9
IDB4MENGMywKCUdMX1VOUEFDS19TV0FQX0JZVEVTCQk9IDB4MENGMCwKCUdMX1pPT01fWAkJCT0g
MHgwRDE2LAoJR0xfWk9PTV9ZCQkJPSAweDBEMTcsCgoJIAoJR0xfVEVYVFVSRV9FTlYJCQk9IDB4
MjMwMCwKCUdMX1RFWFRVUkVfRU5WX01PREUJCT0gMHgyMjAwLAoJR0xfVEVYVFVSRV8xRAkJCT0g
MHgwREUwLAoJR0xfVEVYVFVSRV8yRAkJCT0gMHgwREUxLAoJR0xfVEVYVFVSRV9XUkFQX1MJCT0g
MHgyODAyLAoJR0xfVEVYVFVSRV9XUkFQX1QJCT0gMHgyODAzLAoJR0xfVEVYVFVSRV9NQUdfRklM
VEVSCQk9IDB4MjgwMCwKCUdMX1RFWFRVUkVfTUlOX0ZJTFRFUgkJPSAweDI4MDEsCglHTF9URVhU
VVJFX0VOVl9DT0xPUgkJPSAweDIyMDEsCglHTF9URVhUVVJFX0dFTl9TCQk9IDB4MEM2MCwKCUdM
X1RFWFRVUkVfR0VOX1QJCT0gMHgwQzYxLAoJR0xfVEVYVFVSRV9HRU5fTU9ERQkJPSAweDI1MDAs
CglHTF9URVhUVVJFX0JPUkRFUl9DT0xPUgkJPSAweDEwMDQsCglHTF9URVhUVVJFX1dJRFRICQk9
IDB4MTAwMCwKCUdMX1RFWFRVUkVfSEVJR0hUCQk9IDB4MTAwMSwKCUdMX1RFWFRVUkVfQk9SREVS
CQk9IDB4MTAwNSwKCUdMX1RFWFRVUkVfQ09NUE9ORU5UUwkJPSAweDEwMDMsCglHTF9URVhUVVJF
X1JFRF9TSVpFCQk9IDB4ODA1QywKCUdMX1RFWFRVUkVfR1JFRU5fU0laRQkJPSAweDgwNUQsCglH
TF9URVhUVVJFX0JMVUVfU0laRQkJPSAweDgwNUUsCglHTF9URVhUVVJFX0FMUEhBX1NJWkUJCT0g
MHg4MDVGLAoJR0xfVEVYVFVSRV9MVU1JTkFOQ0VfU0laRQk9IDB4ODA2MCwKCUdMX1RFWFRVUkVf
SU5URU5TSVRZX1NJWkUJPSAweDgwNjEsCglHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUCT0gMHgy
NzAwLAoJR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSCT0gMHgyNzAyLAoJR0xfTElORUFSX01JUE1B
UF9ORUFSRVNUCT0gMHgyNzAxLAoJR0xfTElORUFSX01JUE1BUF9MSU5FQVIJCT0gMHgyNzAzLAoJ
R0xfT0JKRUNUX0xJTkVBUgkJPSAweDI0MDEsCglHTF9PQkpFQ1RfUExBTkUJCQk9IDB4MjUwMSwK
CUdMX0VZRV9MSU5FQVIJCQk9IDB4MjQwMCwKCUdMX0VZRV9QTEFORQkJCT0gMHgyNTAyLAoJR0xf
U1BIRVJFX01BUAkJCT0gMHgyNDAyLAoJR0xfREVDQUwJCQk9IDB4MjEwMSwKCUdMX01PRFVMQVRF
CQkJPSAweDIxMDAsCglHTF9ORUFSRVNUCQkJPSAweDI2MDAsCglHTF9SRVBFQVQJCQk9IDB4Mjkw
MSwKCUdMX0NMQU1QCQkJPSAweDI5MDAsCglHTF9TCQkJCT0gMHgyMDAwLAoJR0xfVAkJCQk9IDB4
MjAwMSwKCUdMX1IJCQkJPSAweDIwMDIsCglHTF9RCQkJCT0gMHgyMDAzLAoJR0xfVEVYVFVSRV9H
RU5fUgkJPSAweDBDNjIsCglHTF9URVhUVVJFX0dFTl9RCQk9IDB4MEM2MywKCglHTF9QUk9YWV9U
RVhUVVJFXzFECQk9IDB4ODA2MywKCUdMX1BST1hZX1RFWFRVUkVfMkQJCT0gMHg4MDY0LAoJR0xf
VEVYVFVSRV9QUklPUklUWQkJPSAweDgwNjYsCglHTF9URVhUVVJFX1JFU0lERU5UCQk9IDB4ODA2
NywKCUdMX1RFWFRVUkVfQklORElOR18xRAkJPSAweDgwNjgsCglHTF9URVhUVVJFX0JJTkRJTkdf
MkQJCT0gMHg4MDY5LAoKCSAKCUdMX0FMUEhBNAkJCT0gMHg4MDNCLAoJR0xfQUxQSEE4CQkJPSAw
eDgwM0MsCglHTF9BTFBIQTEyCQkJPSAweDgwM0QsCglHTF9BTFBIQTE2CQkJPSAweDgwM0UsCglH
TF9MVU1JTkFOQ0U0CQkJPSAweDgwM0YsCglHTF9MVU1JTkFOQ0U4CQkJPSAweDgwNDAsCglHTF9M
VU1JTkFOQ0UxMgkJCT0gMHg4MDQxLAoJR0xfTFVNSU5BTkNFMTYJCQk9IDB4ODA0MiwKCUdMX0xV
TUlOQU5DRTRfQUxQSEE0CQk9IDB4ODA0MywKCUdMX0xVTUlOQU5DRTZfQUxQSEEyCQk9IDB4ODA0
NCwKCUdMX0xVTUlOQU5DRThfQUxQSEE4CQk9IDB4ODA0NSwKCUdMX0xVTUlOQU5DRTEyX0FMUEhB
NAkJPSAweDgwNDYsCglHTF9MVU1JTkFOQ0UxMl9BTFBIQTEyCQk9IDB4ODA0NywKCUdMX0xVTUlO
QU5DRTE2X0FMUEhBMTYJCT0gMHg4MDQ4LAoJR0xfSU5URU5TSVRZCQkJPSAweDgwNDksCglHTF9J
TlRFTlNJVFk0CQkJPSAweDgwNEEsCglHTF9JTlRFTlNJVFk4CQkJPSAweDgwNEIsCglHTF9JTlRF
TlNJVFkxMgkJCT0gMHg4MDRDLAoJR0xfSU5URU5TSVRZMTYJCQk9IDB4ODA0RCwKCUdMX1IzX0cz
X0IyCQkJPSAweDJBMTAsCglHTF9SR0I0CQkJCT0gMHg4MDRGLAoJR0xfUkdCNQkJCQk9IDB4ODA1
MCwKCUdMX1JHQjgJCQkJPSAweDgwNTEsCglHTF9SR0IxMAkJCT0gMHg4MDUyLAoJR0xfUkdCMTIJ
CQk9IDB4ODA1MywKCUdMX1JHQjE2CQkJPSAweDgwNTQsCglHTF9SR0JBMgkJCT0gMHg4MDU1LAoJ
R0xfUkdCQTQJCQk9IDB4ODA1NiwKCUdMX1JHQjVfQTEJCQk9IDB4ODA1NywKCUdMX1JHQkE4CQkJ
PSAweDgwNTgsCglHTF9SR0IxMF9BMgkJCT0gMHg4MDU5LAoJR0xfUkdCQTEyCQkJPSAweDgwNUEs
CglHTF9SR0JBMTYJCQk9IDB4ODA1QiwKCgkgCglHTF9WRU5ET1IJCQk9IDB4MUYwMCwKCUdMX1JF
TkRFUkVSCQkJPSAweDFGMDEsCglHTF9WRVJTSU9OCQkJPSAweDFGMDIsCglHTF9FWFRFTlNJT05T
CQkJPSAweDFGMDMsCgoJIAoJR0xfSU5WQUxJRF9WQUxVRQkJPSAweDA1MDEsCglHTF9JTlZBTElE
X0VOVU0JCQk9IDB4MDUwMCwKCUdMX0lOVkFMSURfT1BFUkFUSU9OCQk9IDB4MDUwMiwKCUdMX1NU
QUNLX09WRVJGTE9XCQk9IDB4MDUwMywKCUdMX1NUQUNLX1VOREVSRkxPVwkJPSAweDA1MDQsCglH
TF9PVVRfT0ZfTUVNT1JZCQk9IDB4MDUwNSwKCgkgCgoKICAgICAgICAgCglHTF9DT05TVEFOVF9D
T0xPUl9FWFQJCT0gMHg4MDAxLAoJR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SX0VYVAk9IDB4
ODAwMiwKCUdMX0NPTlNUQU5UX0FMUEhBX0VYVAkJPSAweDgwMDMsCglHTF9PTkVfTUlOVVNfQ09O
U1RBTlRfQUxQSEFfRVhUCT0gMHg4MDA0LAoJR0xfQkxFTkRfRVFVQVRJT05fRVhUCQk9IDB4ODAw
OSwKCUdMX01JTl9FWFQJCQk9IDB4ODAwNywKCUdMX01BWF9FWFQJCQk9IDB4ODAwOCwKCUdMX0ZV
TkNfQUREX0VYVAkJCT0gMHg4MDA2LAoJR0xfRlVOQ19TVUJUUkFDVF9FWFQJCT0gMHg4MDBBLAoJ
R0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUX0VYVAk9IDB4ODAwQiwKCUdMX0JMRU5EX0NPTE9SX0VY
VAkJPSAweDgwMDUsCgoJIAogICAgICAgIEdMX1BPTFlHT05fT0ZGU0VUX0VYVCAgICAgICAgICAg
PSAweDgwMzcsCiAgICAgICAgR0xfUE9MWUdPTl9PRkZTRVRfRkFDVE9SX0VYVCAgICA9IDB4ODAz
OCwKICAgICAgICBHTF9QT0xZR09OX09GRlNFVF9CSUFTX0VYVCAgICAgID0gMHg4MDM5LAoKCSAK
CUdMX1ZFUlRFWF9BUlJBWV9FWFQJCQk9IDB4ODA3NCwKCUdMX05PUk1BTF9BUlJBWV9FWFQJCQk9
IDB4ODA3NSwKCUdMX0NPTE9SX0FSUkFZX0VYVAkJCT0gMHg4MDc2LAoJR0xfSU5ERVhfQVJSQVlf
RVhUCQkJPSAweDgwNzcsCglHTF9URVhUVVJFX0NPT1JEX0FSUkFZX0VYVAkJPSAweDgwNzgsCglH
TF9FREdFX0ZMQUdfQVJSQVlfRVhUCQkJPSAweDgwNzksCglHTF9WRVJURVhfQVJSQVlfU0laRV9F
WFQJCT0gMHg4MDdBLAoJR0xfVkVSVEVYX0FSUkFZX1RZUEVfRVhUCQk9IDB4ODA3QiwKCUdMX1ZF
UlRFWF9BUlJBWV9TVFJJREVfRVhUCQk9IDB4ODA3QywKCUdMX1ZFUlRFWF9BUlJBWV9DT1VOVF9F
WFQJCT0gMHg4MDdELAoJR0xfTk9STUFMX0FSUkFZX1RZUEVfRVhUCQk9IDB4ODA3RSwKCUdMX05P
Uk1BTF9BUlJBWV9TVFJJREVfRVhUCQk9IDB4ODA3RiwKCUdMX05PUk1BTF9BUlJBWV9DT1VOVF9F
WFQJCT0gMHg4MDgwLAoJR0xfQ09MT1JfQVJSQVlfU0laRV9FWFQJCQk9IDB4ODA4MSwKCUdMX0NP
TE9SX0FSUkFZX1RZUEVfRVhUCQkJPSAweDgwODIsCglHTF9DT0xPUl9BUlJBWV9TVFJJREVfRVhU
CQk9IDB4ODA4MywKCUdMX0NPTE9SX0FSUkFZX0NPVU5UX0VYVAkJPSAweDgwODQsCglHTF9JTkRF
WF9BUlJBWV9UWVBFX0VYVAkJCT0gMHg4MDg1LAoJR0xfSU5ERVhfQVJSQVlfU1RSSURFX0VYVAkJ
PSAweDgwODYsCglHTF9JTkRFWF9BUlJBWV9DT1VOVF9FWFQJCT0gMHg4MDg3LAoJR0xfVEVYVFVS
RV9DT09SRF9BUlJBWV9TSVpFX0VYVAkJPSAweDgwODgsCglHTF9URVhUVVJFX0NPT1JEX0FSUkFZ
X1RZUEVfRVhUCQk9IDB4ODA4OSwKCUdMX1RFWFRVUkVfQ09PUkRfQVJSQVlfU1RSSURFX0VYVAk9
IDB4ODA4QSwKCUdMX1RFWFRVUkVfQ09PUkRfQVJSQVlfQ09VTlRfRVhUCT0gMHg4MDhCLAoJR0xf
RURHRV9GTEFHX0FSUkFZX1NUUklERV9FWFQJCT0gMHg4MDhDLAoJR0xfRURHRV9GTEFHX0FSUkFZ
X0NPVU5UX0VYVAkJPSAweDgwOEQsCglHTF9WRVJURVhfQVJSQVlfUE9JTlRFUl9FWFQJCT0gMHg4
MDhFLAoJR0xfTk9STUFMX0FSUkFZX1BPSU5URVJfRVhUCQk9IDB4ODA4RiwKCUdMX0NPTE9SX0FS
UkFZX1BPSU5URVJfRVhUCQk9IDB4ODA5MCwKCUdMX0lOREVYX0FSUkFZX1BPSU5URVJfRVhUCQk9
IDB4ODA5MSwKCUdMX1RFWFRVUkVfQ09PUkRfQVJSQVlfUE9JTlRFUl9FWFQJPSAweDgwOTIsCglH
TF9FREdFX0ZMQUdfQVJSQVlfUE9JTlRFUl9FWFQJCT0gMHg4MDkzLAoKCSAKCUdMX1RFWFRVUkVf
UFJJT1JJVFlfRVhUCQk9IDB4ODA2NiwKCUdMX1RFWFRVUkVfUkVTSURFTlRfRVhUCQk9IDB4ODA2
NywKCUdMX1RFWFRVUkVfMURfQklORElOR19FWFQJPSAweDgwNjgsCglHTF9URVhUVVJFXzJEX0JJ
TkRJTkdfRVhUCT0gMHg4MDY5LAoKCSAKCUdMX1BBQ0tfU0tJUF9JTUFHRVNfRVhUCQk9IDB4ODA2
QiwKCUdMX1BBQ0tfSU1BR0VfSEVJR0hUX0VYVAk9IDB4ODA2QywKCUdMX1VOUEFDS19TS0lQX0lN
QUdFU19FWFQJPSAweDgwNkQsCglHTF9VTlBBQ0tfSU1BR0VfSEVJR0hUX0VYVAk9IDB4ODA2RSwK
CUdMX1RFWFRVUkVfM0RfRVhUCQk9IDB4ODA2RiwKCUdMX1BST1hZX1RFWFRVUkVfM0RfRVhUCQk9
IDB4ODA3MCwKCUdMX1RFWFRVUkVfREVQVEhfRVhUCQk9IDB4ODA3MSwKCUdMX1RFWFRVUkVfV1JB
UF9SX0VYVAkJPSAweDgwNzIsCglHTF9NQVhfM0RfVEVYVFVSRV9TSVpFX0VYVAk9IDB4ODA3MywK
CUdMX1RFWFRVUkVfM0RfQklORElOR19FWFQJPSAweDgwNkEsCgogICAgICAgICAKCUdMX1RBQkxF
X1RPT19MQVJHRV9FWFQJCQk9IDB4ODAzMSwKCUdMX0NPTE9SX1RBQkxFX0ZPUk1BVF9FWFQJCT0g
MHg4MEQ4LAoJR0xfQ09MT1JfVEFCTEVfV0lEVEhfRVhUCQk9IDB4ODBEOSwKCUdMX0NPTE9SX1RB
QkxFX1JFRF9TSVpFX0VYVAkJPSAweDgwREEsCglHTF9DT0xPUl9UQUJMRV9HUkVFTl9TSVpFX0VY
VAkJPSAweDgwREIsCglHTF9DT0xPUl9UQUJMRV9CTFVFX1NJWkVfRVhUCQk9IDB4ODBEQywKCUdM
X0NPTE9SX1RBQkxFX0FMUEhBX1NJWkVfRVhUCSAJPSAweDgwREQsCglHTF9DT0xPUl9UQUJMRV9M
VU1JTkFOQ0VfU0laRV9FWFQJPSAweDgwREUsCglHTF9DT0xPUl9UQUJMRV9JTlRFTlNJVFlfU0la
RV9FWFQJPSAweDgwREYsCglHTF9URVhUVVJFX0lOREVYX1NJWkVfRVhUCQk9IDB4ODBFMSwgIAoJ
R0xfQ09MT1JfSU5ERVgxX0VYVAkJCT0gMHg4MEUyLAoJR0xfQ09MT1JfSU5ERVgyX0VYVAkJCT0g
MHg4MEUzLAoJR0xfQ09MT1JfSU5ERVg0X0VYVAkJCT0gMHg4MEU0LAoJR0xfQ09MT1JfSU5ERVg4
X0VYVAkJCT0gMHg4MEU1LAoJR0xfQ09MT1JfSU5ERVgxMl9FWFQJCQk9IDB4ODBFNiwKCUdMX0NP
TE9SX0lOREVYMTZfRVhUCQkJPSAweDgwRTcsCgoJIAoJR0xfU0hBUkVEX1RFWFRVUkVfUEFMRVRU
RV9FWFQJCT0gMHg4MUZCLAoKCgoKCgoKCgoJIAoJR0xfUE9JTlRfU0laRV9NSU5fRVhUCQkJPSAw
eDgxMjYsCglHTF9QT0lOVF9TSVpFX01BWF9FWFQJCQk9IDB4ODEyNywKCUdMX1BPSU5UX0ZBREVf
VEhSRVNIT0xEX1NJWkVfRVhUCT0gMHg4MTI4LAoJR0xfRElTVEFOQ0VfQVRURU5VQVRJT05fRVhU
CQk9IDB4ODEyOQp9CgoKCgoKICAgCiAgR0xlbnVtOwoKCgogCgoKCgplbnVtIHsKCUdMX0NVUlJF
TlRfQklUCQk9IDB4MDAwMDAwMDEsCglHTF9QT0lOVF9CSVQJCT0gMHgwMDAwMDAwMiwKCUdMX0xJ
TkVfQklUCQk9IDB4MDAwMDAwMDQsCglHTF9QT0xZR09OX0JJVAkJPSAweDAwMDAwMDA4LAoJR0xf
UE9MWUdPTl9TVElQUExFX0JJVAk9IDB4MDAwMDAwMTAsCglHTF9QSVhFTF9NT0RFX0JJVAk9IDB4
MDAwMDAwMjAsCglHTF9MSUdIVElOR19CSVQJCT0gMHgwMDAwMDA0MCwKCUdMX0ZPR19CSVQJCT0g
MHgwMDAwMDA4MCwKCUdMX0RFUFRIX0JVRkZFUl9CSVQJPSAweDAwMDAwMTAwLAoJR0xfQUNDVU1f
QlVGRkVSX0JJVAk9IDB4MDAwMDAyMDAsCglHTF9TVEVOQ0lMX0JVRkZFUl9CSVQJPSAweDAwMDAw
NDAwLAoJR0xfVklFV1BPUlRfQklUCQk9IDB4MDAwMDA4MDAsCglHTF9UUkFOU0ZPUk1fQklUCT0g
MHgwMDAwMTAwMCwKCUdMX0VOQUJMRV9CSVQJCT0gMHgwMDAwMjAwMCwKCUdMX0NPTE9SX0JVRkZF
Ul9CSVQJPSAweDAwMDA0MDAwLAoJR0xfSElOVF9CSVQJCT0gMHgwMDAwODAwMCwKCUdMX0VWQUxf
QklUCQk9IDB4MDAwMTAwMDAsCglHTF9MSVNUX0JJVAkJPSAweDAwMDIwMDAwLAoJR0xfVEVYVFVS
RV9CSVQJCT0gMHgwMDA0MDAwMCwKCUdMX1NDSVNTT1JfQklUCQk9IDB4MDAwODAwMDAsCglHTF9B
TExfQVRUUklCX0JJVFMJPSAweDAwMGZmZmZmCn07CgoKZW51bSB7CglHTF9DTElFTlRfUElYRUxf
U1RPUkVfQklUCT0gMHgwMDAwMDAwMSwKCUdMX0NMSUVOVF9WRVJURVhfQVJSQVlfQklUCT0gMHgw
MDAwMDAwMiwKCUdMX0NMSUVOVF9BTExfQVRUUklCX0JJVFMJPSAweDAwMDBGRkZGCn07CgoKCnR5
cGVkZWYgdW5zaWduZWQgaW50IEdMYml0ZmllbGQ7CgoKCgoKCgogCgoKCgoKIAogCnR5cGVkZWYg
dm9pZAkJR0x2b2lkOwp0eXBlZGVmIHVuc2lnbmVkIGNoYXIJR0xib29sZWFuOwp0eXBlZGVmIHNp
Z25lZCBjaGFyCUdMYnl0ZTsJCSAKdHlwZWRlZiBzaG9ydAkJR0xzaG9ydDsJIAp0eXBlZGVmIGlu
dAkJR0xpbnQ7CQkgCnR5cGVkZWYgdW5zaWduZWQgY2hhcglHTHVieXRlOwkgCnR5cGVkZWYgdW5z
aWduZWQgc2hvcnQJR0x1c2hvcnQ7CSAKdHlwZWRlZiB1bnNpZ25lZCBpbnQJR0x1aW50OwkJIAp0
eXBlZGVmIGludAkJR0xzaXplaTsJIAp0eXBlZGVmIGZsb2F0CQlHTGZsb2F0OwkgCnR5cGVkZWYg
ZmxvYXQJCUdMY2xhbXBmOwkgCnR5cGVkZWYgZG91YmxlCQlHTGRvdWJsZTsJIAp0eXBlZGVmIGRv
dWJsZQkJR0xjbGFtcGQ7CSAKCgoKCgoKCgogCgoKCmV4dGVybiAgdm9pZCAgIGdsQ2xlYXJJbmRl
eCggR0xmbG9hdCBjICk7CgpleHRlcm4gIHZvaWQgICBnbENsZWFyQ29sb3IoIEdMY2xhbXBmIHJl
ZCwKCQkJICBHTGNsYW1wZiBncmVlbiwKCQkJICBHTGNsYW1wZiBibHVlLAoJCQkgIEdMY2xhbXBm
IGFscGhhICk7CgpleHRlcm4gIHZvaWQgICBnbENsZWFyKCBHTGJpdGZpZWxkIG1hc2sgKTsKCmV4
dGVybiAgdm9pZCAgIGdsSW5kZXhNYXNrKCBHTHVpbnQgbWFzayApOwoKZXh0ZXJuICB2b2lkICAg
Z2xDb2xvck1hc2soIEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwKCQkJIEdMYm9vbGVh
biBibHVlLCBHTGJvb2xlYW4gYWxwaGEgKTsKCmV4dGVybiAgdm9pZCAgIGdsQWxwaGFGdW5jKCBH
TGVudW0gZnVuYywgR0xjbGFtcGYgcmVmICk7CgpleHRlcm4gIHZvaWQgICBnbEJsZW5kRnVuYygg
R0xlbnVtIHNmYWN0b3IsIEdMZW51bSBkZmFjdG9yICk7CgpleHRlcm4gIHZvaWQgICBnbExvZ2lj
T3AoIEdMZW51bSBvcGNvZGUgKTsKCmV4dGVybiAgdm9pZCAgIGdsQ3VsbEZhY2UoIEdMZW51bSBt
b2RlICk7CgpleHRlcm4gIHZvaWQgICBnbEZyb250RmFjZSggR0xlbnVtIG1vZGUgKTsKCmV4dGVy
biAgdm9pZCAgIGdsUG9pbnRTaXplKCBHTGZsb2F0IHNpemUgKTsKCmV4dGVybiAgdm9pZCAgIGds
TGluZVdpZHRoKCBHTGZsb2F0IHdpZHRoICk7CgpleHRlcm4gIHZvaWQgICBnbExpbmVTdGlwcGxl
KCBHTGludCBmYWN0b3IsIEdMdXNob3J0IHBhdHRlcm4gKTsKCmV4dGVybiAgdm9pZCAgIGdsUG9s
eWdvbk1vZGUoIEdMZW51bSBmYWNlLCBHTGVudW0gbW9kZSApOwoKZXh0ZXJuICB2b2lkICAgZ2xQ
b2x5Z29uT2Zmc2V0KCBHTGZsb2F0IGZhY3RvciwgR0xmbG9hdCB1bml0cyApOwoKZXh0ZXJuICB2
b2lkICAgZ2xQb2x5Z29uU3RpcHBsZSggY29uc3QgR0x1Ynl0ZSAqbWFzayApOwoKZXh0ZXJuICB2
b2lkICAgZ2xHZXRQb2x5Z29uU3RpcHBsZSggR0x1Ynl0ZSAqbWFzayApOwoKZXh0ZXJuICB2b2lk
ICAgZ2xFZGdlRmxhZyggR0xib29sZWFuIGZsYWcgKTsKCmV4dGVybiAgdm9pZCAgIGdsRWRnZUZs
YWd2KCBjb25zdCBHTGJvb2xlYW4gKmZsYWcgKTsKCmV4dGVybiAgdm9pZCAgIGdsU2Npc3Nvcigg
R0xpbnQgeCwgR0xpbnQgeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CgpleHRlcm4gIHZvaWQgICBnbENsaXBQbGFuZSgg
R0xlbnVtIHBsYW5lLCBjb25zdCBHTGRvdWJsZSAqZXF1YXRpb24gKTsKCmV4dGVybiAgdm9pZCAg
IGdsR2V0Q2xpcFBsYW5lKCBHTGVudW0gcGxhbmUsIEdMZG91YmxlICplcXVhdGlvbiApOwoKZXh0
ZXJuICB2b2lkICAgZ2xEcmF3QnVmZmVyKCBHTGVudW0gbW9kZSApOwoKZXh0ZXJuICB2b2lkICAg
Z2xSZWFkQnVmZmVyKCBHTGVudW0gbW9kZSApOwoKZXh0ZXJuICB2b2lkICAgZ2xFbmFibGUoIEdM
ZW51bSBjYXAgKTsKCmV4dGVybiAgdm9pZCAgIGdsRGlzYWJsZSggR0xlbnVtIGNhcCApOwoKZXh0
ZXJuICBHTGJvb2xlYW4gICBnbElzRW5hYmxlZCggR0xlbnVtIGNhcCApOwoKCmV4dGVybiAgdm9p
ZCAgIGdsRW5hYmxlQ2xpZW50U3RhdGUoIEdMZW51bSBjYXAgKTsgICAKCmV4dGVybiAgdm9pZCAg
IGdsRGlzYWJsZUNsaWVudFN0YXRlKCBHTGVudW0gY2FwICk7ICAgCgoKZXh0ZXJuICB2b2lkICAg
Z2xHZXRCb29sZWFudiggR0xlbnVtIHBuYW1lLCBHTGJvb2xlYW4gKnBhcmFtcyApOwoKZXh0ZXJu
ICB2b2lkICAgZ2xHZXREb3VibGV2KCBHTGVudW0gcG5hbWUsIEdMZG91YmxlICpwYXJhbXMgKTsK
CmV4dGVybiAgdm9pZCAgIGdsR2V0RmxvYXR2KCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgKnBhcmFt
cyApOwoKZXh0ZXJuICB2b2lkICAgZ2xHZXRJbnRlZ2VydiggR0xlbnVtIHBuYW1lLCBHTGludCAq
cGFyYW1zICk7CgoKZXh0ZXJuICB2b2lkICAgZ2xQdXNoQXR0cmliKCBHTGJpdGZpZWxkIG1hc2sg
KTsKCmV4dGVybiAgdm9pZCAgIGdsUG9wQXR0cmliKCB2b2lkICk7CgoKZXh0ZXJuICB2b2lkICAg
Z2xQdXNoQ2xpZW50QXR0cmliKCBHTGJpdGZpZWxkIG1hc2sgKTsKCmV4dGVybiAgdm9pZCAgIGds
UG9wQ2xpZW50QXR0cmliKCB2b2lkICk7CgoKZXh0ZXJuICBHTGludCAgIGdsUmVuZGVyTW9kZSgg
R0xlbnVtIG1vZGUgKTsKCmV4dGVybiAgR0xlbnVtICAgZ2xHZXRFcnJvciggdm9pZCApOwoKZXh0
ZXJuICBjb25zdCBHTHVieXRlKiAgIGdsR2V0U3RyaW5nKCBHTGVudW0gbmFtZSApOwoKZXh0ZXJu
ICB2b2lkICAgZ2xGaW5pc2goIHZvaWQgKTsKCmV4dGVybiAgdm9pZCAgIGdsRmx1c2goIHZvaWQg
KTsKCmV4dGVybiAgdm9pZCAgIGdsSGludCggR0xlbnVtIHRhcmdldCwgR0xlbnVtIG1vZGUgKTsK
CgoKIAoKCgpleHRlcm4gIHZvaWQgICBnbENsZWFyRGVwdGgoIEdMY2xhbXBkIGRlcHRoICk7Cgpl
eHRlcm4gIHZvaWQgICBnbERlcHRoRnVuYyggR0xlbnVtIGZ1bmMgKTsKCmV4dGVybiAgdm9pZCAg
IGdsRGVwdGhNYXNrKCBHTGJvb2xlYW4gZmxhZyApOwoKZXh0ZXJuICB2b2lkICAgZ2xEZXB0aFJh
bmdlKCBHTGNsYW1wZCBuZWFyX3ZhbCwgR0xjbGFtcGQgZmFyX3ZhbCApOwoKCiAKCgoKZXh0ZXJu
ICB2b2lkICAgZ2xDbGVhckFjY3VtKCBHTGZsb2F0IHJlZCwgR0xmbG9hdCBncmVlbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGZsb2F0IGJsdWUsIEdMZmxvYXQgYWxw
aGEgKTsKCmV4dGVybiAgdm9pZCAgIGdsQWNjdW0oIEdMZW51bSBvcCwgR0xmbG9hdCB2YWx1ZSAp
OwoKCgogCgoKCmV4dGVybiAgdm9pZCAgIGdsTWF0cml4TW9kZSggR0xlbnVtIG1vZGUgKTsKCmV4
dGVybiAgdm9pZCAgIGdsT3J0aG8oIEdMZG91YmxlIGxlZnQsIEdMZG91YmxlIHJpZ2h0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGRvdWJsZSBib3R0b20sIEdMZG91YmxlIHRv
cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xkb3VibGUgbmVhcl92YWwsIEdM
ZG91YmxlIGZhcl92YWwgKTsKCmV4dGVybiAgdm9pZCAgIGdsRnJ1c3R1bSggR0xkb3VibGUgbGVm
dCwgR0xkb3VibGUgcmlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xk
b3VibGUgYm90dG9tLCBHTGRvdWJsZSB0b3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xkb3VibGUgbmVhcl92YWwsIEdMZG91YmxlIGZhcl92YWwgKTsKCmV4dGVybiAgdm9p
ZCAgIGdsVmlld3BvcnQoIEdMaW50IHgsIEdMaW50IHksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0ICk7CgpleHRlcm4gIHZv
aWQgICBnbFB1c2hNYXRyaXgoIHZvaWQgKTsKCmV4dGVybiAgdm9pZCAgIGdsUG9wTWF0cml4KCB2
b2lkICk7CgpleHRlcm4gIHZvaWQgICBnbExvYWRJZGVudGl0eSggdm9pZCApOwoKZXh0ZXJuICB2
b2lkICAgZ2xMb2FkTWF0cml4ZCggY29uc3QgR0xkb3VibGUgKm0gKTsKZXh0ZXJuICB2b2lkICAg
Z2xMb2FkTWF0cml4ZiggY29uc3QgR0xmbG9hdCAqbSApOwoKZXh0ZXJuICB2b2lkICAgZ2xNdWx0
TWF0cml4ZCggY29uc3QgR0xkb3VibGUgKm0gKTsKZXh0ZXJuICB2b2lkICAgZ2xNdWx0TWF0cml4
ZiggY29uc3QgR0xmbG9hdCAqbSApOwoKZXh0ZXJuICB2b2lkICAgZ2xSb3RhdGVkKCBHTGRvdWJs
ZSBhbmdsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGRvdWJsZSB4LCBH
TGRvdWJsZSB5LCBHTGRvdWJsZSB6ICk7CmV4dGVybiAgdm9pZCAgIGdsUm90YXRlZiggR0xmbG9h
dCBhbmdsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGZsb2F0IHgsIEdM
ZmxvYXQgeSwgR0xmbG9hdCB6ICk7CgpleHRlcm4gIHZvaWQgICBnbFNjYWxlZCggR0xkb3VibGUg
eCwgR0xkb3VibGUgeSwgR0xkb3VibGUgeiApOwpleHRlcm4gIHZvaWQgICBnbFNjYWxlZiggR0xm
bG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiApOwoKZXh0ZXJuICB2b2lkICAgZ2xUcmFuc2xh
dGVkKCBHTGRvdWJsZSB4LCBHTGRvdWJsZSB5LCBHTGRvdWJsZSB6ICk7CmV4dGVybiAgdm9pZCAg
IGdsVHJhbnNsYXRlZiggR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiApOwoKCgogCgoK
CmV4dGVybiAgR0xib29sZWFuICAgZ2xJc0xpc3QoIEdMdWludCBsaXN0ICk7CgpleHRlcm4gIHZv
aWQgICBnbERlbGV0ZUxpc3RzKCBHTHVpbnQgbGlzdCwgR0xzaXplaSByYW5nZSApOwoKZXh0ZXJu
ICBHTHVpbnQgICBnbEdlbkxpc3RzKCBHTHNpemVpIHJhbmdlICk7CgpleHRlcm4gIHZvaWQgICBn
bE5ld0xpc3QoIEdMdWludCBsaXN0LCBHTGVudW0gbW9kZSApOwoKZXh0ZXJuICB2b2lkICAgZ2xF
bmRMaXN0KCB2b2lkICk7CgpleHRlcm4gIHZvaWQgICBnbENhbGxMaXN0KCBHTHVpbnQgbGlzdCAp
OwoKZXh0ZXJuICB2b2lkICAgZ2xDYWxsTGlzdHMoIEdMc2l6ZWkgbiwgR0xlbnVtIHR5cGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHTHZvaWQgKmxpc3RzICk7
CgpleHRlcm4gIHZvaWQgICBnbExpc3RCYXNlKCBHTHVpbnQgYmFzZSApOwoKCgogCgoKCmV4dGVy
biAgdm9pZCAgIGdsQmVnaW4oIEdMZW51bSBtb2RlICk7CgpleHRlcm4gIHZvaWQgICBnbEVuZCgg
dm9pZCApOwoKCmV4dGVybiAgdm9pZCAgIGdsVmVydGV4MmQoIEdMZG91YmxlIHgsIEdMZG91Ymxl
IHkgKTsKZXh0ZXJuICB2b2lkICAgZ2xWZXJ0ZXgyZiggR0xmbG9hdCB4LCBHTGZsb2F0IHkgKTsK
ZXh0ZXJuICB2b2lkICAgZ2xWZXJ0ZXgyaSggR0xpbnQgeCwgR0xpbnQgeSApOwpleHRlcm4gIHZv
aWQgICBnbFZlcnRleDJzKCBHTHNob3J0IHgsIEdMc2hvcnQgeSApOwoKZXh0ZXJuICB2b2lkICAg
Z2xWZXJ0ZXgzZCggR0xkb3VibGUgeCwgR0xkb3VibGUgeSwgR0xkb3VibGUgeiApOwpleHRlcm4g
IHZvaWQgICBnbFZlcnRleDNmKCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6ICk7CmV4
dGVybiAgdm9pZCAgIGdsVmVydGV4M2koIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHogKTsKZXh0
ZXJuICB2b2lkICAgZ2xWZXJ0ZXgzcyggR0xzaG9ydCB4LCBHTHNob3J0IHksIEdMc2hvcnQgeiAp
OwoKZXh0ZXJuICB2b2lkICAgZ2xWZXJ0ZXg0ZCggR0xkb3VibGUgeCwgR0xkb3VibGUgeSwgR0xk
b3VibGUgeiwgR0xkb3VibGUgdyApOwpleHRlcm4gIHZvaWQgICBnbFZlcnRleDRmKCBHTGZsb2F0
IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcgKTsKZXh0ZXJuICB2b2lkICAgZ2xW
ZXJ0ZXg0aSggR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeiwgR0xpbnQgdyApOwpleHRlcm4gIHZv
aWQgICBnbFZlcnRleDRzKCBHTHNob3J0IHgsIEdMc2hvcnQgeSwgR0xzaG9ydCB6LCBHTHNob3J0
IHcgKTsKCmV4dGVybiAgdm9pZCAgIGdsVmVydGV4MmR2KCBjb25zdCBHTGRvdWJsZSAqdiApOwpl
eHRlcm4gIHZvaWQgICBnbFZlcnRleDJmdiggY29uc3QgR0xmbG9hdCAqdiApOwpleHRlcm4gIHZv
aWQgICBnbFZlcnRleDJpdiggY29uc3QgR0xpbnQgKnYgKTsKZXh0ZXJuICB2b2lkICAgZ2xWZXJ0
ZXgyc3YoIGNvbnN0IEdMc2hvcnQgKnYgKTsKCmV4dGVybiAgdm9pZCAgIGdsVmVydGV4M2R2KCBj
b25zdCBHTGRvdWJsZSAqdiApOwpleHRlcm4gIHZvaWQgICBnbFZlcnRleDNmdiggY29uc3QgR0xm
bG9hdCAqdiApOwpleHRlcm4gIHZvaWQgICBnbFZlcnRleDNpdiggY29uc3QgR0xpbnQgKnYgKTsK
ZXh0ZXJuICB2b2lkICAgZ2xWZXJ0ZXgzc3YoIGNvbnN0IEdMc2hvcnQgKnYgKTsKCmV4dGVybiAg
dm9pZCAgIGdsVmVydGV4NGR2KCBjb25zdCBHTGRvdWJsZSAqdiApOwpleHRlcm4gIHZvaWQgICBn
bFZlcnRleDRmdiggY29uc3QgR0xmbG9hdCAqdiApOwpleHRlcm4gIHZvaWQgICBnbFZlcnRleDRp
diggY29uc3QgR0xpbnQgKnYgKTsKZXh0ZXJuICB2b2lkICAgZ2xWZXJ0ZXg0c3YoIGNvbnN0IEdM
c2hvcnQgKnYgKTsKCgpleHRlcm4gIHZvaWQgICBnbE5vcm1hbDNiKCBHTGJ5dGUgbngsIEdMYnl0
ZSBueSwgR0xieXRlIG56ICk7CmV4dGVybiAgdm9pZCAgIGdsTm9ybWFsM2QoIEdMZG91YmxlIG54
LCBHTGRvdWJsZSBueSwgR0xkb3VibGUgbnogKTsKZXh0ZXJuICB2b2lkICAgZ2xOb3JtYWwzZigg
R0xmbG9hdCBueCwgR0xmbG9hdCBueSwgR0xmbG9hdCBueiApOwpleHRlcm4gIHZvaWQgICBnbE5v
cm1hbDNpKCBHTGludCBueCwgR0xpbnQgbnksIEdMaW50IG56ICk7CmV4dGVybiAgdm9pZCAgIGds
Tm9ybWFsM3MoIEdMc2hvcnQgbngsIEdMc2hvcnQgbnksIEdMc2hvcnQgbnogKTsKCmV4dGVybiAg
dm9pZCAgIGdsTm9ybWFsM2J2KCBjb25zdCBHTGJ5dGUgKnYgKTsKZXh0ZXJuICB2b2lkICAgZ2xO
b3JtYWwzZHYoIGNvbnN0IEdMZG91YmxlICp2ICk7CmV4dGVybiAgdm9pZCAgIGdsTm9ybWFsM2Z2
KCBjb25zdCBHTGZsb2F0ICp2ICk7CmV4dGVybiAgdm9pZCAgIGdsTm9ybWFsM2l2KCBjb25zdCBH
TGludCAqdiApOwpleHRlcm4gIHZvaWQgICBnbE5vcm1hbDNzdiggY29uc3QgR0xzaG9ydCAqdiAp
OwoKCmV4dGVybiAgdm9pZCAgIGdsSW5kZXhkKCBHTGRvdWJsZSBjICk7CmV4dGVybiAgdm9pZCAg
IGdsSW5kZXhmKCBHTGZsb2F0IGMgKTsKZXh0ZXJuICB2b2lkICAgZ2xJbmRleGkoIEdMaW50IGMg
KTsKZXh0ZXJuICB2b2lkICAgZ2xJbmRleHMoIEdMc2hvcnQgYyApOwpleHRlcm4gIHZvaWQgICBn
bEluZGV4dWIoIEdMdWJ5dGUgYyApOyAgIAoKZXh0ZXJuICB2b2lkICAgZ2xJbmRleGR2KCBjb25z
dCBHTGRvdWJsZSAqYyApOwpleHRlcm4gIHZvaWQgICBnbEluZGV4ZnYoIGNvbnN0IEdMZmxvYXQg
KmMgKTsKZXh0ZXJuICB2b2lkICAgZ2xJbmRleGl2KCBjb25zdCBHTGludCAqYyApOwpleHRlcm4g
IHZvaWQgICBnbEluZGV4c3YoIGNvbnN0IEdMc2hvcnQgKmMgKTsKZXh0ZXJuICB2b2lkICAgZ2xJ
bmRleHVidiggY29uc3QgR0x1Ynl0ZSAqYyApOyAgIAoKZXh0ZXJuICB2b2lkICAgZ2xDb2xvcjNi
KCBHTGJ5dGUgcmVkLCBHTGJ5dGUgZ3JlZW4sIEdMYnl0ZSBibHVlICk7CmV4dGVybiAgdm9pZCAg
IGdsQ29sb3IzZCggR0xkb3VibGUgcmVkLCBHTGRvdWJsZSBncmVlbiwgR0xkb3VibGUgYmx1ZSAp
OwpleHRlcm4gIHZvaWQgICBnbENvbG9yM2YoIEdMZmxvYXQgcmVkLCBHTGZsb2F0IGdyZWVuLCBH
TGZsb2F0IGJsdWUgKTsKZXh0ZXJuICB2b2lkICAgZ2xDb2xvcjNpKCBHTGludCByZWQsIEdMaW50
IGdyZWVuLCBHTGludCBibHVlICk7CmV4dGVybiAgdm9pZCAgIGdsQ29sb3IzcyggR0xzaG9ydCBy
ZWQsIEdMc2hvcnQgZ3JlZW4sIEdMc2hvcnQgYmx1ZSApOwpleHRlcm4gIHZvaWQgICBnbENvbG9y
M3ViKCBHTHVieXRlIHJlZCwgR0x1Ynl0ZSBncmVlbiwgR0x1Ynl0ZSBibHVlICk7CmV4dGVybiAg
dm9pZCAgIGdsQ29sb3IzdWkoIEdMdWludCByZWQsIEdMdWludCBncmVlbiwgR0x1aW50IGJsdWUg
KTsKZXh0ZXJuICB2b2lkICAgZ2xDb2xvcjN1cyggR0x1c2hvcnQgcmVkLCBHTHVzaG9ydCBncmVl
biwgR0x1c2hvcnQgYmx1ZSApOwoKZXh0ZXJuICB2b2lkICAgZ2xDb2xvcjRiKCBHTGJ5dGUgcmVk
LCBHTGJ5dGUgZ3JlZW4sIEdMYnl0ZSBibHVlLCBHTGJ5dGUgYWxwaGEgKTsKZXh0ZXJuICB2b2lk
ICAgZ2xDb2xvcjRkKCBHTGRvdWJsZSByZWQsIEdMZG91YmxlIGdyZWVuLAoJCSAgICAgICBHTGRv
dWJsZSBibHVlLCBHTGRvdWJsZSBhbHBoYSApOwpleHRlcm4gIHZvaWQgICBnbENvbG9yNGYoIEdM
ZmxvYXQgcmVkLCBHTGZsb2F0IGdyZWVuLAoJCSAgICAgICBHTGZsb2F0IGJsdWUsIEdMZmxvYXQg
YWxwaGEgKTsKZXh0ZXJuICB2b2lkICAgZ2xDb2xvcjRpKCBHTGludCByZWQsIEdMaW50IGdyZWVu
LCBHTGludCBibHVlLCBHTGludCBhbHBoYSApOwpleHRlcm4gIHZvaWQgICBnbENvbG9yNHMoIEdM
c2hvcnQgcmVkLCBHTHNob3J0IGdyZWVuLAoJCSAgICAgICBHTHNob3J0IGJsdWUsIEdMc2hvcnQg
YWxwaGEgKTsKZXh0ZXJuICB2b2lkICAgZ2xDb2xvcjR1YiggR0x1Ynl0ZSByZWQsIEdMdWJ5dGUg
Z3JlZW4sCgkJCUdMdWJ5dGUgYmx1ZSwgR0x1Ynl0ZSBhbHBoYSApOwpleHRlcm4gIHZvaWQgICBn
bENvbG9yNHVpKCBHTHVpbnQgcmVkLCBHTHVpbnQgZ3JlZW4sIEdMdWludCBibHVlLCBHTHVpbnQg
YWxwaGEgKTsKZXh0ZXJuICB2b2lkICAgZ2xDb2xvcjR1cyggR0x1c2hvcnQgcmVkLCBHTHVzaG9y
dCBncmVlbiwKCQkJR0x1c2hvcnQgYmx1ZSwgR0x1c2hvcnQgYWxwaGEgKTsKCgpleHRlcm4gIHZv
aWQgICBnbENvbG9yM2J2KCBjb25zdCBHTGJ5dGUgKnYgKTsKZXh0ZXJuICB2b2lkICAgZ2xDb2xv
cjNkdiggY29uc3QgR0xkb3VibGUgKnYgKTsKZXh0ZXJuICB2b2lkICAgZ2xDb2xvcjNmdiggY29u
c3QgR0xmbG9hdCAqdiApOwpleHRlcm4gIHZvaWQgICBnbENvbG9yM2l2KCBjb25zdCBHTGludCAq
diApOwpleHRlcm4gIHZvaWQgICBnbENvbG9yM3N2KCBjb25zdCBHTHNob3J0ICp2ICk7CmV4dGVy
biAgdm9pZCAgIGdsQ29sb3IzdWJ2KCBjb25zdCBHTHVieXRlICp2ICk7CmV4dGVybiAgdm9pZCAg
IGdsQ29sb3IzdWl2KCBjb25zdCBHTHVpbnQgKnYgKTsKZXh0ZXJuICB2b2lkICAgZ2xDb2xvcjN1
c3YoIGNvbnN0IEdMdXNob3J0ICp2ICk7CgpleHRlcm4gIHZvaWQgICBnbENvbG9yNGJ2KCBjb25z
dCBHTGJ5dGUgKnYgKTsKZXh0ZXJuICB2b2lkICAgZ2xDb2xvcjRkdiggY29uc3QgR0xkb3VibGUg
KnYgKTsKZXh0ZXJuICB2b2lkICAgZ2xDb2xvcjRmdiggY29uc3QgR0xmbG9hdCAqdiApOwpleHRl
cm4gIHZvaWQgICBnbENvbG9yNGl2KCBjb25zdCBHTGludCAqdiApOwpleHRlcm4gIHZvaWQgICBn
bENvbG9yNHN2KCBjb25zdCBHTHNob3J0ICp2ICk7CmV4dGVybiAgdm9pZCAgIGdsQ29sb3I0dWJ2
KCBjb25zdCBHTHVieXRlICp2ICk7CmV4dGVybiAgdm9pZCAgIGdsQ29sb3I0dWl2KCBjb25zdCBH
THVpbnQgKnYgKTsKZXh0ZXJuICB2b2lkICAgZ2xDb2xvcjR1c3YoIGNvbnN0IEdMdXNob3J0ICp2
ICk7CgoKZXh0ZXJuICB2b2lkICAgZ2xUZXhDb29yZDFkKCBHTGRvdWJsZSBzICk7CmV4dGVybiAg
dm9pZCAgIGdsVGV4Q29vcmQxZiggR0xmbG9hdCBzICk7CmV4dGVybiAgdm9pZCAgIGdsVGV4Q29v
cmQxaSggR0xpbnQgcyApOwpleHRlcm4gIHZvaWQgICBnbFRleENvb3JkMXMoIEdMc2hvcnQgcyAp
OwoKZXh0ZXJuICB2b2lkICAgZ2xUZXhDb29yZDJkKCBHTGRvdWJsZSBzLCBHTGRvdWJsZSB0ICk7
CmV4dGVybiAgdm9pZCAgIGdsVGV4Q29vcmQyZiggR0xmbG9hdCBzLCBHTGZsb2F0IHQgKTsKZXh0
ZXJuICB2b2lkICAgZ2xUZXhDb29yZDJpKCBHTGludCBzLCBHTGludCB0ICk7CmV4dGVybiAgdm9p
ZCAgIGdsVGV4Q29vcmQycyggR0xzaG9ydCBzLCBHTHNob3J0IHQgKTsKCmV4dGVybiAgdm9pZCAg
IGdsVGV4Q29vcmQzZCggR0xkb3VibGUgcywgR0xkb3VibGUgdCwgR0xkb3VibGUgciApOwpleHRl
cm4gIHZvaWQgICBnbFRleENvb3JkM2YoIEdMZmxvYXQgcywgR0xmbG9hdCB0LCBHTGZsb2F0IHIg
KTsKZXh0ZXJuICB2b2lkICAgZ2xUZXhDb29yZDNpKCBHTGludCBzLCBHTGludCB0LCBHTGludCBy
ICk7CmV4dGVybiAgdm9pZCAgIGdsVGV4Q29vcmQzcyggR0xzaG9ydCBzLCBHTHNob3J0IHQsIEdM
c2hvcnQgciApOwoKZXh0ZXJuICB2b2lkICAgZ2xUZXhDb29yZDRkKCBHTGRvdWJsZSBzLCBHTGRv
dWJsZSB0LCBHTGRvdWJsZSByLCBHTGRvdWJsZSBxICk7CmV4dGVybiAgdm9pZCAgIGdsVGV4Q29v
cmQ0ZiggR0xmbG9hdCBzLCBHTGZsb2F0IHQsIEdMZmxvYXQgciwgR0xmbG9hdCBxICk7CmV4dGVy
biAgdm9pZCAgIGdsVGV4Q29vcmQ0aSggR0xpbnQgcywgR0xpbnQgdCwgR0xpbnQgciwgR0xpbnQg
cSApOwpleHRlcm4gIHZvaWQgICBnbFRleENvb3JkNHMoIEdMc2hvcnQgcywgR0xzaG9ydCB0LCBH
THNob3J0IHIsIEdMc2hvcnQgcSApOwoKZXh0ZXJuICB2b2lkICAgZ2xUZXhDb29yZDFkdiggY29u
c3QgR0xkb3VibGUgKnYgKTsKZXh0ZXJuICB2b2lkICAgZ2xUZXhDb29yZDFmdiggY29uc3QgR0xm
bG9hdCAqdiApOwpleHRlcm4gIHZvaWQgICBnbFRleENvb3JkMWl2KCBjb25zdCBHTGludCAqdiAp
OwpleHRlcm4gIHZvaWQgICBnbFRleENvb3JkMXN2KCBjb25zdCBHTHNob3J0ICp2ICk7CgpleHRl
cm4gIHZvaWQgICBnbFRleENvb3JkMmR2KCBjb25zdCBHTGRvdWJsZSAqdiApOwpleHRlcm4gIHZv
aWQgICBnbFRleENvb3JkMmZ2KCBjb25zdCBHTGZsb2F0ICp2ICk7CmV4dGVybiAgdm9pZCAgIGds
VGV4Q29vcmQyaXYoIGNvbnN0IEdMaW50ICp2ICk7CmV4dGVybiAgdm9pZCAgIGdsVGV4Q29vcmQy
c3YoIGNvbnN0IEdMc2hvcnQgKnYgKTsKCmV4dGVybiAgdm9pZCAgIGdsVGV4Q29vcmQzZHYoIGNv
bnN0IEdMZG91YmxlICp2ICk7CmV4dGVybiAgdm9pZCAgIGdsVGV4Q29vcmQzZnYoIGNvbnN0IEdM
ZmxvYXQgKnYgKTsKZXh0ZXJuICB2b2lkICAgZ2xUZXhDb29yZDNpdiggY29uc3QgR0xpbnQgKnYg
KTsKZXh0ZXJuICB2b2lkICAgZ2xUZXhDb29yZDNzdiggY29uc3QgR0xzaG9ydCAqdiApOwoKZXh0
ZXJuICB2b2lkICAgZ2xUZXhDb29yZDRkdiggY29uc3QgR0xkb3VibGUgKnYgKTsKZXh0ZXJuICB2
b2lkICAgZ2xUZXhDb29yZDRmdiggY29uc3QgR0xmbG9hdCAqdiApOwpleHRlcm4gIHZvaWQgICBn
bFRleENvb3JkNGl2KCBjb25zdCBHTGludCAqdiApOwpleHRlcm4gIHZvaWQgICBnbFRleENvb3Jk
NHN2KCBjb25zdCBHTHNob3J0ICp2ICk7CgoKZXh0ZXJuICB2b2lkICAgZ2xSYXN0ZXJQb3MyZCgg
R0xkb3VibGUgeCwgR0xkb3VibGUgeSApOwpleHRlcm4gIHZvaWQgICBnbFJhc3RlclBvczJmKCBH
TGZsb2F0IHgsIEdMZmxvYXQgeSApOwpleHRlcm4gIHZvaWQgICBnbFJhc3RlclBvczJpKCBHTGlu
dCB4LCBHTGludCB5ICk7CmV4dGVybiAgdm9pZCAgIGdsUmFzdGVyUG9zMnMoIEdMc2hvcnQgeCwg
R0xzaG9ydCB5ICk7CgpleHRlcm4gIHZvaWQgICBnbFJhc3RlclBvczNkKCBHTGRvdWJsZSB4LCBH
TGRvdWJsZSB5LCBHTGRvdWJsZSB6ICk7CmV4dGVybiAgdm9pZCAgIGdsUmFzdGVyUG9zM2YoIEdM
ZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHogKTsKZXh0ZXJuICB2b2lkICAgZ2xSYXN0ZXJQ
b3MzaSggR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeiApOwpleHRlcm4gIHZvaWQgICBnbFJhc3Rl
clBvczNzKCBHTHNob3J0IHgsIEdMc2hvcnQgeSwgR0xzaG9ydCB6ICk7CgpleHRlcm4gIHZvaWQg
ICBnbFJhc3RlclBvczRkKCBHTGRvdWJsZSB4LCBHTGRvdWJsZSB5LCBHTGRvdWJsZSB6LCBHTGRv
dWJsZSB3ICk7CmV4dGVybiAgdm9pZCAgIGdsUmFzdGVyUG9zNGYoIEdMZmxvYXQgeCwgR0xmbG9h
dCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdyApOwpleHRlcm4gIHZvaWQgICBnbFJhc3RlclBvczRp
KCBHTGludCB4LCBHTGludCB5LCBHTGludCB6LCBHTGludCB3ICk7CmV4dGVybiAgdm9pZCAgIGds
UmFzdGVyUG9zNHMoIEdMc2hvcnQgeCwgR0xzaG9ydCB5LCBHTHNob3J0IHosIEdMc2hvcnQgdyAp
OwoKZXh0ZXJuICB2b2lkICAgZ2xSYXN0ZXJQb3MyZHYoIGNvbnN0IEdMZG91YmxlICp2ICk7CmV4
dGVybiAgdm9pZCAgIGdsUmFzdGVyUG9zMmZ2KCBjb25zdCBHTGZsb2F0ICp2ICk7CmV4dGVybiAg
dm9pZCAgIGdsUmFzdGVyUG9zMml2KCBjb25zdCBHTGludCAqdiApOwpleHRlcm4gIHZvaWQgICBn
bFJhc3RlclBvczJzdiggY29uc3QgR0xzaG9ydCAqdiApOwoKZXh0ZXJuICB2b2lkICAgZ2xSYXN0
ZXJQb3MzZHYoIGNvbnN0IEdMZG91YmxlICp2ICk7CmV4dGVybiAgdm9pZCAgIGdsUmFzdGVyUG9z
M2Z2KCBjb25zdCBHTGZsb2F0ICp2ICk7CmV4dGVybiAgdm9pZCAgIGdsUmFzdGVyUG9zM2l2KCBj
b25zdCBHTGludCAqdiApOwpleHRlcm4gIHZvaWQgICBnbFJhc3RlclBvczNzdiggY29uc3QgR0xz
aG9ydCAqdiApOwoKZXh0ZXJuICB2b2lkICAgZ2xSYXN0ZXJQb3M0ZHYoIGNvbnN0IEdMZG91Ymxl
ICp2ICk7CmV4dGVybiAgdm9pZCAgIGdsUmFzdGVyUG9zNGZ2KCBjb25zdCBHTGZsb2F0ICp2ICk7
CmV4dGVybiAgdm9pZCAgIGdsUmFzdGVyUG9zNGl2KCBjb25zdCBHTGludCAqdiApOwpleHRlcm4g
IHZvaWQgICBnbFJhc3RlclBvczRzdiggY29uc3QgR0xzaG9ydCAqdiApOwoKCmV4dGVybiAgdm9p
ZCAgIGdsUmVjdGQoIEdMZG91YmxlIHgxLCBHTGRvdWJsZSB5MSwgR0xkb3VibGUgeDIsIEdMZG91
YmxlIHkyICk7CmV4dGVybiAgdm9pZCAgIGdsUmVjdGYoIEdMZmxvYXQgeDEsIEdMZmxvYXQgeTEs
IEdMZmxvYXQgeDIsIEdMZmxvYXQgeTIgKTsKZXh0ZXJuICB2b2lkICAgZ2xSZWN0aSggR0xpbnQg
eDEsIEdMaW50IHkxLCBHTGludCB4MiwgR0xpbnQgeTIgKTsKZXh0ZXJuICB2b2lkICAgZ2xSZWN0
cyggR0xzaG9ydCB4MSwgR0xzaG9ydCB5MSwgR0xzaG9ydCB4MiwgR0xzaG9ydCB5MiApOwoKCmV4
dGVybiAgdm9pZCAgIGdsUmVjdGR2KCBjb25zdCBHTGRvdWJsZSAqdjEsIGNvbnN0IEdMZG91Ymxl
ICp2MiApOwpleHRlcm4gIHZvaWQgICBnbFJlY3RmdiggY29uc3QgR0xmbG9hdCAqdjEsIGNvbnN0
IEdMZmxvYXQgKnYyICk7CmV4dGVybiAgdm9pZCAgIGdsUmVjdGl2KCBjb25zdCBHTGludCAqdjEs
IGNvbnN0IEdMaW50ICp2MiApOwpleHRlcm4gIHZvaWQgICBnbFJlY3RzdiggY29uc3QgR0xzaG9y
dCAqdjEsIGNvbnN0IEdMc2hvcnQgKnYyICk7CgoKCiAKCgoKZXh0ZXJuICB2b2lkICAgZ2xWZXJ0
ZXhQb2ludGVyKCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgR0xzaXplaSBzdHJpZGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0x2b2lkICpwdHIgKTsKCmV4dGVybiAgdm9p
ZCAgIGdsTm9ybWFsUG9pbnRlciggR0xlbnVtIHR5cGUsIEdMc2l6ZWkgc3RyaWRlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdMdm9pZCAqcHRyICk7CgpleHRlcm4gIHZvaWQg
ICBnbENvbG9yUG9pbnRlciggR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgc3RyaWRl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0x2b2lkICpwdHIgKTsKCmV4dGVy
biAgdm9pZCAgIGdsSW5kZXhQb2ludGVyKCBHTGVudW0gdHlwZSwgR0xzaXplaSBzdHJpZGUsIGNv
bnN0IEdMdm9pZCAqcHRyICk7CgpleHRlcm4gIHZvaWQgICBnbFRleENvb3JkUG9pbnRlciggR0xp
bnQgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgc3RyaWRlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgR0x2b2lkICpwdHIgKTsKCmV4dGVybiAgdm9pZCAgIGdsRWRnZUZs
YWdQb2ludGVyKCBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0xib29sZWFuICpwdHIgKTsKCmV4dGVy
biAgdm9pZCAgIGdsR2V0UG9pbnRlcnYoIEdMZW51bSBwbmFtZSwgdm9pZCAqKnBhcmFtcyApOwoK
ZXh0ZXJuICB2b2lkICAgZ2xBcnJheUVsZW1lbnQoIEdMaW50IGkgKTsKCmV4dGVybiAgdm9pZCAg
IGdsRHJhd0FycmF5cyggR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50ICk7
CgpleHRlcm4gIHZvaWQgICBnbERyYXdFbGVtZW50cyggR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lk
ICppbmRpY2VzICk7CgpleHRlcm4gIHZvaWQgICBnbEludGVybGVhdmVkQXJyYXlzKCBHTGVudW0g
Zm9ybWF0LCBHTHNpemVpIHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgR0x2b2lkICpwb2ludGVyICk7CgoKIAoKCgpleHRlcm4gIHZvaWQgICBnbFNoYWRlTW9k
ZWwoIEdMZW51bSBtb2RlICk7CgpleHRlcm4gIHZvaWQgICBnbExpZ2h0ZiggR0xlbnVtIGxpZ2h0
LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0gKTsKZXh0ZXJuICB2b2lkICAgZ2xMaWdodGko
IEdMZW51bSBsaWdodCwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSApOwpleHRlcm4gIHZvaWQg
ICBnbExpZ2h0ZnYoIEdMZW51bSBsaWdodCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGZsb2F0ICpw
YXJhbXMgKTsKZXh0ZXJuICB2b2lkICAgZ2xMaWdodGl2KCBHTGVudW0gbGlnaHQsIEdMZW51bSBw
bmFtZSwgY29uc3QgR0xpbnQgKnBhcmFtcyApOwoKZXh0ZXJuICB2b2lkICAgZ2xHZXRMaWdodGZ2
KCBHTGVudW0gbGlnaHQsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCAqcGFyYW1zICk7CmV4dGVybiAg
dm9pZCAgIGdsR2V0TGlnaHRpdiggR0xlbnVtIGxpZ2h0LCBHTGVudW0gcG5hbWUsIEdMaW50ICpw
YXJhbXMgKTsKCmV4dGVybiAgdm9pZCAgIGdsTGlnaHRNb2RlbGYoIEdMZW51bSBwbmFtZSwgR0xm
bG9hdCBwYXJhbSApOwpleHRlcm4gIHZvaWQgICBnbExpZ2h0TW9kZWxpKCBHTGVudW0gcG5hbWUs
IEdMaW50IHBhcmFtICk7CmV4dGVybiAgdm9pZCAgIGdsTGlnaHRNb2RlbGZ2KCBHTGVudW0gcG5h
bWUsIGNvbnN0IEdMZmxvYXQgKnBhcmFtcyApOwpleHRlcm4gIHZvaWQgICBnbExpZ2h0TW9kZWxp
diggR0xlbnVtIHBuYW1lLCBjb25zdCBHTGludCAqcGFyYW1zICk7CgpleHRlcm4gIHZvaWQgICBn
bE1hdGVyaWFsZiggR0xlbnVtIGZhY2UsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCBwYXJhbSApOwpl
eHRlcm4gIHZvaWQgICBnbE1hdGVyaWFsaSggR0xlbnVtIGZhY2UsIEdMZW51bSBwbmFtZSwgR0xp
bnQgcGFyYW0gKTsKZXh0ZXJuICB2b2lkICAgZ2xNYXRlcmlhbGZ2KCBHTGVudW0gZmFjZSwgR0xl
bnVtIHBuYW1lLCBjb25zdCBHTGZsb2F0ICpwYXJhbXMgKTsKZXh0ZXJuICB2b2lkICAgZ2xNYXRl
cmlhbGl2KCBHTGVudW0gZmFjZSwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGludCAqcGFyYW1zICk7
CgpleHRlcm4gIHZvaWQgICBnbEdldE1hdGVyaWFsZnYoIEdMZW51bSBmYWNlLCBHTGVudW0gcG5h
bWUsIEdMZmxvYXQgKnBhcmFtcyApOwpleHRlcm4gIHZvaWQgICBnbEdldE1hdGVyaWFsaXYoIEdM
ZW51bSBmYWNlLCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMgKTsKCmV4dGVybiAgdm9pZCAg
IGdsQ29sb3JNYXRlcmlhbCggR0xlbnVtIGZhY2UsIEdMZW51bSBtb2RlICk7CgoKCgogCgoKCmV4
dGVybiAgdm9pZCAgIGdsUGl4ZWxab29tKCBHTGZsb2F0IHhmYWN0b3IsIEdMZmxvYXQgeWZhY3Rv
ciApOwoKZXh0ZXJuICB2b2lkICAgZ2xQaXhlbFN0b3JlZiggR0xlbnVtIHBuYW1lLCBHTGZsb2F0
IHBhcmFtICk7CmV4dGVybiAgdm9pZCAgIGdsUGl4ZWxTdG9yZWkoIEdMZW51bSBwbmFtZSwgR0xp
bnQgcGFyYW0gKTsKCmV4dGVybiAgdm9pZCAgIGdsUGl4ZWxUcmFuc2ZlcmYoIEdMZW51bSBwbmFt
ZSwgR0xmbG9hdCBwYXJhbSApOwpleHRlcm4gIHZvaWQgICBnbFBpeGVsVHJhbnNmZXJpKCBHTGVu
dW0gcG5hbWUsIEdMaW50IHBhcmFtICk7CgpleHRlcm4gIHZvaWQgICBnbFBpeGVsTWFwZnYoIEdM
ZW51bSBtYXAsIEdMaW50IG1hcHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgR0xmbG9hdCAqdmFsdWVzICk7CmV4dGVybiAgdm9pZCAgIGdsUGl4ZWxNYXB1
aXYoIEdMZW51bSBtYXAsIEdMaW50IG1hcHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEdMdWludCAqdmFsdWVzICk7CmV4dGVybiAgdm9pZCAgIGdsUGl4
ZWxNYXB1c3YoIEdMZW51bSBtYXAsIEdMaW50IG1hcHNpemUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEdMdXNob3J0ICp2YWx1ZXMgKTsKCmV4dGVybiAgdm9p
ZCAgIGdsR2V0UGl4ZWxNYXBmdiggR0xlbnVtIG1hcCwgR0xmbG9hdCAqdmFsdWVzICk7CmV4dGVy
biAgdm9pZCAgIGdsR2V0UGl4ZWxNYXB1aXYoIEdMZW51bSBtYXAsIEdMdWludCAqdmFsdWVzICk7
CmV4dGVybiAgdm9pZCAgIGdsR2V0UGl4ZWxNYXB1c3YoIEdMZW51bSBtYXAsIEdMdXNob3J0ICp2
YWx1ZXMgKTsKCmV4dGVybiAgdm9pZCAgIGdsQml0bWFwKCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgeG9yaWcs
IEdMZmxvYXQgeW9yaWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGZsb2F0
IHhtb3ZlLCBHTGZsb2F0IHltb3ZlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgR0x1Ynl0ZSAqYml0bWFwICk7CgpleHRlcm4gIHZvaWQgICBnbFJlYWRQaXhlbHMoIEdM
aW50IHgsIEdMaW50IHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0x2b2lkICpwaXhlbHMgKTsKCmV4dGVybiAgdm9pZCAgIGdsRHJh
d1BpeGVscyggR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0x2b2lkICpwaXhlbHMgKTsKCmV4
dGVybiAgdm9pZCAgIGdsQ29weVBpeGVscyggR0xpbnQgeCwgR0xpbnQgeSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHlwZSApOwoKCgog
CgoKCmV4dGVybiAgdm9pZCAgIGdsU3RlbmNpbEZ1bmMoIEdMZW51bSBmdW5jLCBHTGludCByZWYs
IEdMdWludCBtYXNrICk7CgpleHRlcm4gIHZvaWQgICBnbFN0ZW5jaWxNYXNrKCBHTHVpbnQgbWFz
ayApOwoKZXh0ZXJuICB2b2lkICAgZ2xTdGVuY2lsT3AoIEdMZW51bSBmYWlsLCBHTGVudW0gemZh
aWwsIEdMZW51bSB6cGFzcyApOwoKZXh0ZXJuICB2b2lkICAgZ2xDbGVhclN0ZW5jaWwoIEdMaW50
IHMgKTsKCgoKIAoKCgpleHRlcm4gIHZvaWQgICBnbFRleEdlbmQoIEdMZW51bSBjb29yZCwgR0xl
bnVtIHBuYW1lLCBHTGRvdWJsZSBwYXJhbSApOwpleHRlcm4gIHZvaWQgICBnbFRleEdlbmYoIEdM
ZW51bSBjb29yZCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtICk7CmV4dGVybiAgdm9pZCAg
IGdsVGV4R2VuaSggR0xlbnVtIGNvb3JkLCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtICk7Cgpl
eHRlcm4gIHZvaWQgICBnbFRleEdlbmR2KCBHTGVudW0gY29vcmQsIEdMZW51bSBwbmFtZSwgY29u
c3QgR0xkb3VibGUgKnBhcmFtcyApOwpleHRlcm4gIHZvaWQgICBnbFRleEdlbmZ2KCBHTGVudW0g
Y29vcmQsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xmbG9hdCAqcGFyYW1zICk7CmV4dGVybiAgdm9p
ZCAgIGdsVGV4R2VuaXYoIEdMZW51bSBjb29yZCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGludCAq
cGFyYW1zICk7CgpleHRlcm4gIHZvaWQgICBnbEdldFRleEdlbmR2KCBHTGVudW0gY29vcmQsIEdM
ZW51bSBwbmFtZSwgR0xkb3VibGUgKnBhcmFtcyApOwpleHRlcm4gIHZvaWQgICBnbEdldFRleEdl
bmZ2KCBHTGVudW0gY29vcmQsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCAqcGFyYW1zICk7CmV4dGVy
biAgdm9pZCAgIGdsR2V0VGV4R2VuaXYoIEdMZW51bSBjb29yZCwgR0xlbnVtIHBuYW1lLCBHTGlu
dCAqcGFyYW1zICk7CgoKZXh0ZXJuICB2b2lkICAgZ2xUZXhFbnZmKCBHTGVudW0gdGFyZ2V0LCBH
TGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0gKTsKZXh0ZXJuICB2b2lkICAgZ2xUZXhFbnZpKCBH
TGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtICk7CgpleHRlcm4gIHZvaWQg
ICBnbFRleEVudmZ2KCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMZmxvYXQg
KnBhcmFtcyApOwpleHRlcm4gIHZvaWQgICBnbFRleEVudml2KCBHTGVudW0gdGFyZ2V0LCBHTGVu
dW0gcG5hbWUsIGNvbnN0IEdMaW50ICpwYXJhbXMgKTsKCmV4dGVybiAgdm9pZCAgIGdsR2V0VGV4
RW52ZnYoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCAqcGFyYW1zICk7CmV4
dGVybiAgdm9pZCAgIGdsR2V0VGV4RW52aXYoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwg
R0xpbnQgKnBhcmFtcyApOwoKCmV4dGVybiAgdm9pZCAgIGdsVGV4UGFyYW1ldGVyZiggR0xlbnVt
IHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtICk7CmV4dGVybiAgdm9pZCAgIGds
VGV4UGFyYW1ldGVyaSggR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSAp
OwoKZXh0ZXJuICB2b2lkICAgZ2xUZXhQYXJhbWV0ZXJmdiggR0xlbnVtIHRhcmdldCwgR0xlbnVt
IHBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBH
TGZsb2F0ICpwYXJhbXMgKTsKZXh0ZXJuICB2b2lkICAgZ2xUZXhQYXJhbWV0ZXJpdiggR0xlbnVt
IHRhcmdldCwgR0xlbnVtIHBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBHTGludCAqcGFyYW1zICk7CgpleHRlcm4gIHZvaWQgICBnbEdldFRleFBh
cmFtZXRlcmZ2KCBHTGVudW0gdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGVudW0gcG5hbWUsIEdMZmxvYXQgKnBhcmFtcyk7CmV4dGVybiAgdm9p
ZCAgIGdsR2V0VGV4UGFyYW1ldGVyaXYoIEdMZW51bSB0YXJnZXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyAp
OwoKZXh0ZXJuICB2b2lkICAgZ2xHZXRUZXhMZXZlbFBhcmFtZXRlcmZ2KCBHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGVudW0gcG5hbWUsIEdMZmxvYXQgKnBhcmFtcyApOwpleHRlcm4gIHZvaWQgICBn
bEdldFRleExldmVsUGFyYW1ldGVyaXYoIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBwbmFt
ZSwgR0xpbnQgKnBhcmFtcyApOwoKCmV4dGVybiAgdm9pZCAgIGdsVGV4SW1hZ2UxRCggR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgaW50ZXJuYWxGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xzaXplaSB3aWR0aCwgR0xpbnQgYm9yZGVyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdMdm9pZCAqcGl4ZWxzICk7CgpleHRlcm4g
IHZvaWQgICBnbFRleEltYWdlMkQoIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGludGVybmFsRm9ybWF0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJvcmRl
ciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgR0x2b2lkICpwaXhlbHMgKTsKCmV4dGVybiAgdm9pZCAgIGdsR2V0
VGV4SW1hZ2UoIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0x2b2lkICpwaXhlbHMgKTsKCgoKIAoKZXh0
ZXJuICB2b2lkICAgZ2xHZW5UZXh0dXJlcyggR0xzaXplaSBuLCBHTHVpbnQgKnRleHR1cmVzICk7
CgpleHRlcm4gIHZvaWQgICBnbERlbGV0ZVRleHR1cmVzKCBHTHNpemVpIG4sIGNvbnN0IEdMdWlu
dCAqdGV4dHVyZXMpOwoKZXh0ZXJuICB2b2lkICAgZ2xCaW5kVGV4dHVyZSggR0xlbnVtIHRhcmdl
dCwgR0x1aW50IHRleHR1cmUgKTsKCmV4dGVybiAgdm9pZCAgIGdsUHJpb3JpdGl6ZVRleHR1cmVz
KCBHTHNpemVpIG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBHTHVpbnQgKnRleHR1cmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgR0xjbGFtcGYgKnByaW9yaXRpZXMgKTsKCmV4dGVybiAgR0xi
b29sZWFuICAgZ2xBcmVUZXh0dXJlc1Jlc2lkZW50KCBHTHNpemVpIG4sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHTHVpbnQgKnRleHR1
cmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xib29sZWFuICpyZXNpZGVuY2VzICk7CgpleHRlcm4gIEdMYm9vbGVhbiAgIGdsSXNUZXh0dXJl
KCBHTHVpbnQgdGV4dHVyZSApOwoKCmV4dGVybiAgdm9pZCAgIGdsVGV4U3ViSW1hZ2UxRCggR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xpbnQgeG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKnBpeGVscyAp
OwoKCmV4dGVybiAgdm9pZCAgIGdsVGV4U3ViSW1hZ2UyRCggR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHTHZvaWQgKnBpeGVscyApOwoK
CmV4dGVybiAgdm9pZCAgIGdsQ29weVRleEltYWdlMUQoIEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IHgsIEdMaW50IHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMc2l6ZWkgd2lkdGgsIEdMaW50IGJvcmRlciApOwoKCmV4dGVybiAgdm9pZCAgIGdsQ29weVRl
eEltYWdlMkQoIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHgsIEdMaW50IHksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBi
b3JkZXIgKTsKCgpleHRlcm4gIHZvaWQgICBnbENvcHlUZXhTdWJJbWFnZTFEKCBHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCApOwoKCmV4dGVybiAgdm9p
ZCAgIGdsQ29weVRleFN1YkltYWdlMkQoIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTGludCB4LCBHTGludCB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCApOwoKCgoKIAoKCgpleHRlcm4g
IHZvaWQgICBnbE1hcDFkKCBHTGVudW0gdGFyZ2V0LCBHTGRvdWJsZSB1MSwgR0xkb3VibGUgdTIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHN0cmlkZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgb3JkZXIsIGNvbnN0IEdMZG91YmxlICpwb2lu
dHMgKTsKZXh0ZXJuICB2b2lkICAgZ2xNYXAxZiggR0xlbnVtIHRhcmdldCwgR0xmbG9hdCB1MSwg
R0xmbG9hdCB1MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc3RyaWRl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBvcmRlciwgY29uc3QgR0xm
bG9hdCAqcG9pbnRzICk7CgpleHRlcm4gIHZvaWQgICBnbE1hcDJkKCBHTGVudW0gdGFyZ2V0LAoJ
CSAgICAgR0xkb3VibGUgdTEsIEdMZG91YmxlIHUyLCBHTGludCB1c3RyaWRlLCBHTGludCB1b3Jk
ZXIsCgkJICAgICBHTGRvdWJsZSB2MSwgR0xkb3VibGUgdjIsIEdMaW50IHZzdHJpZGUsIEdMaW50
IHZvcmRlciwKCQkgICAgIGNvbnN0IEdMZG91YmxlICpwb2ludHMgKTsKZXh0ZXJuICB2b2lkICAg
Z2xNYXAyZiggR0xlbnVtIHRhcmdldCwKCQkgICAgIEdMZmxvYXQgdTEsIEdMZmxvYXQgdTIsIEdM
aW50IHVzdHJpZGUsIEdMaW50IHVvcmRlciwKCQkgICAgIEdMZmxvYXQgdjEsIEdMZmxvYXQgdjIs
IEdMaW50IHZzdHJpZGUsIEdMaW50IHZvcmRlciwKCQkgICAgIGNvbnN0IEdMZmxvYXQgKnBvaW50
cyApOwoKZXh0ZXJuICB2b2lkICAgZ2xHZXRNYXBkdiggR0xlbnVtIHRhcmdldCwgR0xlbnVtIHF1
ZXJ5LCBHTGRvdWJsZSAqdiApOwpleHRlcm4gIHZvaWQgICBnbEdldE1hcGZ2KCBHTGVudW0gdGFy
Z2V0LCBHTGVudW0gcXVlcnksIEdMZmxvYXQgKnYgKTsKZXh0ZXJuICB2b2lkICAgZ2xHZXRNYXBp
diggR0xlbnVtIHRhcmdldCwgR0xlbnVtIHF1ZXJ5LCBHTGludCAqdiApOwoKZXh0ZXJuICB2b2lk
ICAgZ2xFdmFsQ29vcmQxZCggR0xkb3VibGUgdSApOwpleHRlcm4gIHZvaWQgICBnbEV2YWxDb29y
ZDFmKCBHTGZsb2F0IHUgKTsKCmV4dGVybiAgdm9pZCAgIGdsRXZhbENvb3JkMWR2KCBjb25zdCBH
TGRvdWJsZSAqdSApOwpleHRlcm4gIHZvaWQgICBnbEV2YWxDb29yZDFmdiggY29uc3QgR0xmbG9h
dCAqdSApOwoKZXh0ZXJuICB2b2lkICAgZ2xFdmFsQ29vcmQyZCggR0xkb3VibGUgdSwgR0xkb3Vi
bGUgdiApOwpleHRlcm4gIHZvaWQgICBnbEV2YWxDb29yZDJmKCBHTGZsb2F0IHUsIEdMZmxvYXQg
diApOwoKZXh0ZXJuICB2b2lkICAgZ2xFdmFsQ29vcmQyZHYoIGNvbnN0IEdMZG91YmxlICp1ICk7
CmV4dGVybiAgdm9pZCAgIGdsRXZhbENvb3JkMmZ2KCBjb25zdCBHTGZsb2F0ICp1ICk7CgpleHRl
cm4gIHZvaWQgICBnbE1hcEdyaWQxZCggR0xpbnQgdW4sIEdMZG91YmxlIHUxLCBHTGRvdWJsZSB1
MiApOwpleHRlcm4gIHZvaWQgICBnbE1hcEdyaWQxZiggR0xpbnQgdW4sIEdMZmxvYXQgdTEsIEdM
ZmxvYXQgdTIgKTsKCmV4dGVybiAgdm9pZCAgIGdsTWFwR3JpZDJkKCBHTGludCB1biwgR0xkb3Vi
bGUgdTEsIEdMZG91YmxlIHUyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xpbnQgdm4sIEdMZG91YmxlIHYxLCBHTGRvdWJsZSB2MiApOwpleHRlcm4gIHZvaWQgICBnbE1h
cEdyaWQyZiggR0xpbnQgdW4sIEdMZmxvYXQgdTEsIEdMZmxvYXQgdTIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCB2biwgR0xmbG9hdCB2MSwgR0xmbG9hdCB2MiAp
OwoKZXh0ZXJuICB2b2lkICAgZ2xFdmFsUG9pbnQxKCBHTGludCBpICk7CgpleHRlcm4gIHZvaWQg
ICBnbEV2YWxQb2ludDIoIEdMaW50IGksIEdMaW50IGogKTsKCmV4dGVybiAgdm9pZCAgIGdsRXZh
bE1lc2gxKCBHTGVudW0gbW9kZSwgR0xpbnQgaTEsIEdMaW50IGkyICk7CgpleHRlcm4gIHZvaWQg
ICBnbEV2YWxNZXNoMiggR0xlbnVtIG1vZGUsIEdMaW50IGkxLCBHTGludCBpMiwgR0xpbnQgajEs
IEdMaW50IGoyICk7CgoKCiAKCgoKZXh0ZXJuICB2b2lkICAgZ2xGb2dmKCBHTGVudW0gcG5hbWUs
IEdMZmxvYXQgcGFyYW0gKTsKCmV4dGVybiAgdm9pZCAgIGdsRm9naSggR0xlbnVtIHBuYW1lLCBH
TGludCBwYXJhbSApOwoKZXh0ZXJuICB2b2lkICAgZ2xGb2dmdiggR0xlbnVtIHBuYW1lLCBjb25z
dCBHTGZsb2F0ICpwYXJhbXMgKTsKCmV4dGVybiAgdm9pZCAgIGdsRm9naXYoIEdMZW51bSBwbmFt
ZSwgY29uc3QgR0xpbnQgKnBhcmFtcyApOwoKCgogCgoKCmV4dGVybiAgdm9pZCAgIGdsRmVlZGJh
Y2tCdWZmZXIoIEdMc2l6ZWkgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMZmxvYXQgKmJ1ZmZlciApOwoK
ZXh0ZXJuICB2b2lkICAgZ2xQYXNzVGhyb3VnaCggR0xmbG9hdCB0b2tlbiApOwoKZXh0ZXJuICB2
b2lkICAgZ2xTZWxlY3RCdWZmZXIoIEdMc2l6ZWkgc2l6ZSwgR0x1aW50ICpidWZmZXIgKTsKCmV4
dGVybiAgdm9pZCAgIGdsSW5pdE5hbWVzKCB2b2lkICk7CgpleHRlcm4gIHZvaWQgICBnbExvYWRO
YW1lKCBHTHVpbnQgbmFtZSApOwoKZXh0ZXJuICB2b2lkICAgZ2xQdXNoTmFtZSggR0x1aW50IG5h
bWUgKTsKCmV4dGVybiAgdm9pZCAgIGdsUG9wTmFtZSggdm9pZCApOwoKCgogCgoKCiAKZXh0ZXJu
ICB2b2lkICAgZ2xCbGVuZEVxdWF0aW9uRVhUKCBHTGVudW0gbW9kZSApOwoKCgogCmV4dGVybiAg
dm9pZCAgIGdsQmxlbmRDb2xvckVYVCggR0xjbGFtcGYgcmVkLCBHTGNsYW1wZiBncmVlbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGNsYW1wZiBibHVlLCBHTGNs
YW1wZiBhbHBoYSApOwoKCgogCmV4dGVybiAgdm9pZCAgIGdsUG9seWdvbk9mZnNldEVYVCggR0xm
bG9hdCBmYWN0b3IsIEdMZmxvYXQgYmlhcyApOwoKCgogCgpleHRlcm4gIHZvaWQgICBnbFZlcnRl
eFBvaW50ZXJFWFQoIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgc3RyaWRlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdm9pZCAq
cHRyICk7CgpleHRlcm4gIHZvaWQgICBnbE5vcm1hbFBvaW50ZXJFWFQoIEdMZW51bSB0eXBlLCBH
THNpemVpIHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTHNpemVpIGNvdW50LCBjb25zdCBHTHZvaWQgKnB0ciApOwoKZXh0ZXJuICB2b2lkICAgZ2xD
b2xvclBvaW50ZXJFWFQoIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBzdHJpZGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGNvdW50LCBjb25zdCBHTHZvaWQg
KnB0ciApOwoKZXh0ZXJuICB2b2lkICAgZ2xJbmRleFBvaW50ZXJFWFQoIEdMZW51bSB0eXBlLCBH
THNpemVpIHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdm9pZCAqcHRyICk7CgpleHRlcm4gIHZvaWQgICBnbFRl
eENvb3JkUG9pbnRlckVYVCggR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHN0cmlkZSwgR0xzaXplaSBj
b3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEdMdm9pZCAqcHRyICk7CgpleHRlcm4gIHZvaWQgICBnbEVkZ2VGbGFnUG9pbnRlckVYVCggR0xz
aXplaSBzdHJpZGUsIEdMc2l6ZWkgY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBHTGJvb2xlYW4gKnB0ciApOwoKZXh0ZXJuICB2b2lkICAg
Z2xHZXRQb2ludGVydkVYVCggR0xlbnVtIHBuYW1lLCB2b2lkICoqcGFyYW1zICk7CgpleHRlcm4g
IHZvaWQgICBnbEFycmF5RWxlbWVudEVYVCggR0xpbnQgaSApOwoKZXh0ZXJuICB2b2lkICAgZ2xE
cmF3QXJyYXlzRVhUKCBHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3VudCApOwoKCgogCgpleHRlcm4gIHZv
aWQgICBnbEdlblRleHR1cmVzRVhUKCBHTHNpemVpIG4sIEdMdWludCAqdGV4dHVyZXMgKTsKCmV4
dGVybiAgdm9pZCAgIGdsRGVsZXRlVGV4dHVyZXNFWFQoIEdMc2l6ZWkgbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0x1aW50ICp0ZXh0dXJlcyk7
CgpleHRlcm4gIHZvaWQgICBnbEJpbmRUZXh0dXJlRVhUKCBHTGVudW0gdGFyZ2V0LCBHTHVpbnQg
dGV4dHVyZSApOwoKZXh0ZXJuICB2b2lkICAgZ2xQcmlvcml0aXplVGV4dHVyZXNFWFQoIEdMc2l6
ZWkgbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEdMdWludCAqdGV4dHVyZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBHTGNsYW1wZiAqcHJpb3JpdGllcyApOwoKZXh0ZXJuICBHTGJv
b2xlYW4gICBnbEFyZVRleHR1cmVzUmVzaWRlbnRFWFQoIEdMc2l6ZWkgbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdMdWludCAq
dGV4dHVyZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGJvb2xlYW4gKnJlc2lkZW5jZXMgKTsKCmV4dGVybiAgR0xib29sZWFuICAgZ2xJ
c1RleHR1cmVFWFQoIEdMdWludCB0ZXh0dXJlICk7CgoKCiAKCmV4dGVybiAgdm9pZCAgIGdsVGV4
SW1hZ2UzREVYVCggR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGludGVybmFsRm9ybWF0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgZGVw
dGgsIEdMaW50IGJvcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgR0x2b2lkICpwaXhlbHMgKTsKIApleHRlcm4gIHZvaWQgICBn
bFRleFN1YkltYWdlM0RFWFQoIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQg
em9mZnNldCwgR0xzaXplaSB3aWR0aCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lk
ICpwaXhlbHMpOwoKZXh0ZXJuICB2b2lkICAgZ2xDb3B5VGV4U3ViSW1hZ2UzREVYVCggR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHpvZmZzZXQsIEdMaW50IHgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTHNpemVpIGhlaWdodCApOwoKCgogCgpleHRlcm4gIHZvaWQgICBnbENvbG9yVGFi
bGVFWFQoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBlLCBj
b25zdCBHTHZvaWQgKnRhYmxlICk7CgpleHRlcm4gIHZvaWQgICBnbENvbG9yU3ViVGFibGVFWFQo
IEdMZW51bSB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xzaXplaSBzdGFydCwgR0xzaXplaSBjb3VudCwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0x2b2lkICpkYXRhICk7
CgpleHRlcm4gIHZvaWQgICBnbEdldENvbG9yVGFibGVFWFQoIEdMZW51bSB0YXJnZXQsIEdMZW51
bSBmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xl
bnVtIHR5cGUsIEdMdm9pZCAqdGFibGUgKTsKCmV4dGVybiAgdm9pZCAgIGdsR2V0Q29sb3JUYWJs
ZVBhcmFtZXRlcmZ2RVhUKCBHTGVudW0gdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHBuYW1lLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xmbG9hdCAqcGFyYW1z
ICk7CgpleHRlcm4gIHZvaWQgICBnbEdldENvbG9yVGFibGVQYXJhbWV0ZXJpdkVYVCggR0xlbnVt
IHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMZW51bSBwbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMaW50ICpwYXJhbXMgKTsKCgoKIApleHRlcm4gIHZvaWQgICBn
bFBvaW50UGFyYW1ldGVyZkVYVCggR0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtICk7CmV4dGVy
biAgdm9pZCAgIGdsUG9pbnRQYXJhbWV0ZXJmdkVYVCggR0xlbnVtIHBuYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdMZmxvYXQgKnBhcmFt
cyApOwoKCgogCgpleHRlcm4gIHZvaWQgICBnbFdpbmRvd1BvczJpTUVTQSggR0xpbnQgeCwgR0xp
bnQgeSApOwpleHRlcm4gIHZvaWQgICBnbFdpbmRvd1BvczJzTUVTQSggR0xzaG9ydCB4LCBHTHNo
b3J0IHkgKTsKZXh0ZXJuICB2b2lkICAgZ2xXaW5kb3dQb3MyZk1FU0EoIEdMZmxvYXQgeCwgR0xm
bG9hdCB5ICk7CmV4dGVybiAgdm9pZCAgIGdsV2luZG93UG9zMmRNRVNBKCBHTGRvdWJsZSB4LCBH
TGRvdWJsZSB5ICk7CgpleHRlcm4gIHZvaWQgICBnbFdpbmRvd1BvczJpdk1FU0EoIGNvbnN0IEdM
aW50ICpwICk7CmV4dGVybiAgdm9pZCAgIGdsV2luZG93UG9zMnN2TUVTQSggY29uc3QgR0xzaG9y
dCAqcCApOwpleHRlcm4gIHZvaWQgICBnbFdpbmRvd1BvczJmdk1FU0EoIGNvbnN0IEdMZmxvYXQg
KnAgKTsKZXh0ZXJuICB2b2lkICAgZ2xXaW5kb3dQb3MyZHZNRVNBKCBjb25zdCBHTGRvdWJsZSAq
cCApOwoKZXh0ZXJuICB2b2lkICAgZ2xXaW5kb3dQb3MzaU1FU0EoIEdMaW50IHgsIEdMaW50IHks
IEdMaW50IHogKTsKZXh0ZXJuICB2b2lkICAgZ2xXaW5kb3dQb3Mzc01FU0EoIEdMc2hvcnQgeCwg
R0xzaG9ydCB5LCBHTHNob3J0IHogKTsKZXh0ZXJuICB2b2lkICAgZ2xXaW5kb3dQb3MzZk1FU0Eo
IEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHogKTsKZXh0ZXJuICB2b2lkICAgZ2xXaW5k
b3dQb3MzZE1FU0EoIEdMZG91YmxlIHgsIEdMZG91YmxlIHksIEdMZG91YmxlIHogKTsKCmV4dGVy
biAgdm9pZCAgIGdsV2luZG93UG9zM2l2TUVTQSggY29uc3QgR0xpbnQgKnAgKTsKZXh0ZXJuICB2
b2lkICAgZ2xXaW5kb3dQb3Mzc3ZNRVNBKCBjb25zdCBHTHNob3J0ICpwICk7CmV4dGVybiAgdm9p
ZCAgIGdsV2luZG93UG9zM2Z2TUVTQSggY29uc3QgR0xmbG9hdCAqcCApOwpleHRlcm4gIHZvaWQg
ICBnbFdpbmRvd1BvczNkdk1FU0EoIGNvbnN0IEdMZG91YmxlICpwICk7CgpleHRlcm4gIHZvaWQg
ICBnbFdpbmRvd1BvczRpTUVTQSggR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeiwgR0xpbnQgdyAp
OwpleHRlcm4gIHZvaWQgICBnbFdpbmRvd1BvczRzTUVTQSggR0xzaG9ydCB4LCBHTHNob3J0IHks
IEdMc2hvcnQgeiwgR0xzaG9ydCB3ICk7CmV4dGVybiAgdm9pZCAgIGdsV2luZG93UG9zNGZNRVNB
KCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcgKTsKZXh0ZXJuICB2
b2lkICAgZ2xXaW5kb3dQb3M0ZE1FU0EoIEdMZG91YmxlIHgsIEdMZG91YmxlIHksIEdMZG91Ymxl
IHosIEdMZG91YmxlIHcpOwoKZXh0ZXJuICB2b2lkICAgZ2xXaW5kb3dQb3M0aXZNRVNBKCBjb25z
dCBHTGludCAqcCApOwpleHRlcm4gIHZvaWQgICBnbFdpbmRvd1BvczRzdk1FU0EoIGNvbnN0IEdM
c2hvcnQgKnAgKTsKZXh0ZXJuICB2b2lkICAgZ2xXaW5kb3dQb3M0ZnZNRVNBKCBjb25zdCBHTGZs
b2F0ICpwICk7CmV4dGVybiAgdm9pZCAgIGdsV2luZG93UG9zNGR2TUVTQSggY29uc3QgR0xkb3Vi
bGUgKnAgKTsKCgogCgpleHRlcm4gIHZvaWQgICBnbFJlc2l6ZUJ1ZmZlcnNNRVNBKCk7CgoKCgoK
CgoKIAoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKfQoKCgojIDIzICJoL25yaHlfY2xhc3NV
c2VNYXAuaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvR0wvZ2x1LmgiIDEgMwogCgogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4
dGVybiAiQyIgewoKCgoKCgoKCgoKCgoKCgoKCgoKCgplbnVtIHsKCSAKCUdMVV9TTU9PVEgJPSAx
MDAwMDAsCglHTFVfRkxBVAk9IDEwMDAwMSwKCUdMVV9OT05FCT0gMTAwMDAyLAoKCSAKCUdMVV9Q
T0lOVAk9IDEwMDAxMCwKCUdMVV9MSU5FCT0gMTAwMDExLAoJR0xVX0ZJTEwJPSAxMDAwMTIsCglH
TFVfU0lMSE9VRVRURQk9IDEwMDAxMywKCgkgCglHTFVfT1VUU0lERQk9IDEwMDAyMCwKCUdMVV9J
TlNJREUJPSAxMDAwMjEsCgoJIAoJR0xVX0JFR0lOCT0gMTAwMTAwLAoJR0xVX1ZFUlRFWAk9IDEw
MDEwMSwKCUdMVV9FTkQJCT0gMTAwMTAyLAoJR0xVX0VSUk9SCT0gMTAwMTAzLAoJR0xVX0VER0Vf
RkxBRwk9IDEwMDEwNCwKCgkgCglHTFVfQ1cJCT0gMTAwMTIwLAoJR0xVX0NDVwkJPSAxMDAxMjEs
CglHTFVfSU5URVJJT1IJPSAxMDAxMjIsCglHTFVfRVhURVJJT1IJPSAxMDAxMjMsCglHTFVfVU5L
Tk9XTgk9IDEwMDEyNCwKCgkgCglHTFVfVEVTU19FUlJPUjEJPSAxMDAxNTEsICAgCglHTFVfVEVT
U19FUlJPUjIgPSAxMDAxNTIsICAgCglHTFVfVEVTU19FUlJPUjMgPSAxMDAxNTMsICAgCglHTFVf
VEVTU19FUlJPUjQgPSAxMDAxNTQsICAgCglHTFVfVEVTU19FUlJPUjUgPSAxMDAxNTUsICAgCglH
TFVfVEVTU19FUlJPUjYgPSAxMDAxNTYsICAgCglHTFVfVEVTU19FUlJPUjcgPSAxMDAxNTcsICAg
CglHTFVfVEVTU19FUlJPUjggPSAxMDAxNTgsICAgCglHTFVfVEVTU19FUlJPUjkgPSAxMDAxNTks
ICAgCgoJIAoJR0xVX0FVVE9fTE9BRF9NQVRSSVgJPSAxMDAyMDAsCglHTFVfQ1VMTElORwkJPSAx
MDAyMDEsCglHTFVfUEFSQU1FVFJJQ19UT0xFUkFOQ0U9IDEwMDIwMiwKCUdMVV9TQU1QTElOR19U
T0xFUkFOQ0UJPSAxMDAyMDMsCglHTFVfRElTUExBWV9NT0RFCT0gMTAwMjA0LAoJR0xVX1NBTVBM
SU5HX01FVEhPRAk9IDEwMDIwNSwKCUdMVV9VX1NURVAJCT0gMTAwMjA2LAoJR0xVX1ZfU1RFUAkJ
PSAxMDAyMDcsCgoJR0xVX1BBVEhfTEVOR1RICQk9IDEwMDIxNSwKCUdMVV9QQVJBTUVUUklDX0VS
Uk9SCT0gMTAwMjE2LAoJR0xVX0RPTUFJTl9ESVNUQU5DRQk9IDEwMDIxNywKCglHTFVfTUFQMV9U
UklNXzIJCT0gMTAwMjEwLAoJR0xVX01BUDFfVFJJTV8zCQk9IDEwMDIxMSwKCglHTFVfT1VUTElO
RV9QT0xZR09OCT0gMTAwMjQwLAoJR0xVX09VVExJTkVfUEFUQ0gJPSAxMDAyNDEsCgoJR0xVX05V
UkJTX0VSUk9SMSAgPSAxMDAyNTEsICAgIAoJR0xVX05VUkJTX0VSUk9SMiAgPSAxMDAyNTIsICAg
IAoJR0xVX05VUkJTX0VSUk9SMyAgPSAxMDAyNTMsICAgIAoJR0xVX05VUkJTX0VSUk9SNCAgPSAx
MDAyNTQsICAgIAoJR0xVX05VUkJTX0VSUk9SNSAgPSAxMDAyNTUsICAgIAoJR0xVX05VUkJTX0VS
Uk9SNiAgPSAxMDAyNTYsICAgIAoJR0xVX05VUkJTX0VSUk9SNyAgPSAxMDAyNTcsICAgIAoJR0xV
X05VUkJTX0VSUk9SOCAgPSAxMDAyNTgsICAgIAoJR0xVX05VUkJTX0VSUk9SOSAgPSAxMDAyNTks
ICAgIAoJR0xVX05VUkJTX0VSUk9SMTAgPSAxMDAyNjAsICAgIAoJR0xVX05VUkJTX0VSUk9SMTEg
PSAxMDAyNjEsICAgIAoJR0xVX05VUkJTX0VSUk9SMTIgPSAxMDAyNjIsICAgIAoJR0xVX05VUkJT
X0VSUk9SMTMgPSAxMDAyNjMsICAgIAoJR0xVX05VUkJTX0VSUk9SMTQgPSAxMDAyNjQsICAgIAoJ
R0xVX05VUkJTX0VSUk9SMTUgPSAxMDAyNjUsICAgIAoJR0xVX05VUkJTX0VSUk9SMTYgPSAxMDAy
NjYsICAgIAoJR0xVX05VUkJTX0VSUk9SMTcgPSAxMDAyNjcsICAgIAoJR0xVX05VUkJTX0VSUk9S
MTggPSAxMDAyNjgsICAgIAoJR0xVX05VUkJTX0VSUk9SMTkgPSAxMDAyNjksICAgIAoJR0xVX05V
UkJTX0VSUk9SMjAgPSAxMDAyNzAsICAgIAoJR0xVX05VUkJTX0VSUk9SMjEgPSAxMDAyNzEsICAg
IAoJR0xVX05VUkJTX0VSUk9SMjIgPSAxMDAyNzIsICAgIAoJR0xVX05VUkJTX0VSUk9SMjMgPSAx
MDAyNzMsICAgIAoJR0xVX05VUkJTX0VSUk9SMjQgPSAxMDAyNzQsICAgIAoJR0xVX05VUkJTX0VS
Uk9SMjUgPSAxMDAyNzUsICAgIAoJR0xVX05VUkJTX0VSUk9SMjYgPSAxMDAyNzYsICAgIAoJR0xV
X05VUkJTX0VSUk9SMjcgPSAxMDAyNzcsICAgIAoJR0xVX05VUkJTX0VSUk9SMjggPSAxMDAyNzgs
ICAgIAoJR0xVX05VUkJTX0VSUk9SMjkgPSAxMDAyNzksICAgIAoJR0xVX05VUkJTX0VSUk9SMzAg
PSAxMDAyODAsICAgIAoJR0xVX05VUkJTX0VSUk9SMzEgPSAxMDAyODEsICAgIAoJR0xVX05VUkJT
X0VSUk9SMzIgPSAxMDAyODIsICAgIAoJR0xVX05VUkJTX0VSUk9SMzMgPSAxMDAyODMsICAgIAoJ
R0xVX05VUkJTX0VSUk9SMzQgPSAxMDAyODQsICAgIAoJR0xVX05VUkJTX0VSUk9SMzUgPSAxMDAy
ODUsICAgIAoJR0xVX05VUkJTX0VSUk9SMzYgPSAxMDAyODYsICAgIAoJR0xVX05VUkJTX0VSUk9S
MzcgPSAxMDAyODcsICAgIAoKCSAKCUdMVV9JTlZBTElEX0VOVU0JCT0gMTAwOTAwLAoJR0xVX0lO
VkFMSURfVkFMVUUJCT0gMTAwOTAxLAoJR0xVX09VVF9PRl9NRU1PUlkJCT0gMTAwOTAyLAoJR0xV
X0lOQ09NUEFUSUJMRV9HTF9WRVJTSU9OCT0gMTAwOTAzLAoKCSAKCUdMVV9WRVJTSU9OCT0gMTAw
ODAwLAoJR0xVX0VYVEVOU0lPTlMJPSAxMDA4MDEKfTsKCgogCgoKdHlwZWRlZiBzdHJ1Y3QgR0xV
cXVhZHJpY09iaiBHTFVxdWFkcmljT2JqOwoKdHlwZWRlZiBzdHJ1Y3QgR0xVdHJpYW5ndWxhdG9y
T2JqIEdMVXRyaWFuZ3VsYXRvck9iajsKCnR5cGVkZWYgc3RydWN0IEdMVW51cmJzT2JqIEdMVW51
cmJzT2JqOwoKCgoKCgoKCiAKCgoKCgpleHRlcm4gdm9pZCAgIGdsdUxvb2tBdCggR0xkb3VibGUg
ZXlleCwgR0xkb3VibGUgZXlleSwgR0xkb3VibGUgZXlleiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGRvdWJsZSBjZW50ZXJ4LCBHTGRvdWJsZSBjZW50ZXJ5LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMZG91YmxlIGNlbnRlcnosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xkb3VibGUgdXB4LCBHTGRvdWJsZSB1cHksIEdMZG91YmxlIHVweiAp
OwoKCmV4dGVybiB2b2lkICAgZ2x1T3J0aG8yRCggR0xkb3VibGUgbGVmdCwgR0xkb3VibGUgcmln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZG91YmxlIGJvdHRvbSwgR0xk
b3VibGUgdG9wICk7CgoKZXh0ZXJuIHZvaWQgICBnbHVQZXJzcGVjdGl2ZSggR0xkb3VibGUgZm92
eSwgR0xkb3VibGUgYXNwZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xkb3VibGUgek5lYXIsIEdMZG91YmxlIHpGYXIgKTsKCgpleHRlcm4gdm9pZCAgIGdsdVBpY2tN
YXRyaXgoIEdMZG91YmxlIHgsIEdMZG91YmxlIHksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMZG91YmxlIHdpZHRoLCBHTGRvdWJsZSBoZWlnaHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdMaW50IHZpZXdwb3J0WzRdICk7CgpleHRlcm4g
R0xpbnQgICBnbHVQcm9qZWN0KCBHTGRvdWJsZSBvYmp4LCBHTGRvdWJsZSBvYmp5LCBHTGRvdWJs
ZSBvYmp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0xkb3VibGUg
bW9kZWxNYXRyaXhbMTZdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
R0xkb3VibGUgcHJvak1hdHJpeFsxNl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBHTGludCB2aWV3cG9ydFs0XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMZG91YmxlICp3aW54LCBHTGRvdWJsZSAqd2lueSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMZG91YmxlICp3aW56ICk7CgpleHRlcm4gR0xpbnQgICBnbHVVblByb2pl
Y3QoIEdMZG91YmxlIHdpbngsIEdMZG91YmxlIHdpbnksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMZG91YmxlIHdpbnosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEdMZG91YmxlIG1vZGVsTWF0cml4WzE2XSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgR0xkb3VibGUgcHJvak1hdHJpeFsxNl0sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdMaW50IHZpZXdwb3J0WzRdLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGRvdWJsZSAqb2JqeCwgR0xkb3VibGUg
Km9ianksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZG91YmxlICpvYmp6
ICk7CgpleHRlcm4gY29uc3QgR0x1Ynl0ZSogICBnbHVFcnJvclN0cmluZyggR0xlbnVtIGVycm9y
Q29kZSApOwoKCgogCgoKCgoKZXh0ZXJuIEdMaW50ICAgZ2x1U2NhbGVJbWFnZSggR0xlbnVtIGZv
cm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHdpZHRoaW4s
IEdMaW50IGhlaWdodGluLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xl
bnVtIHR5cGVpbiwgY29uc3Qgdm9pZCAqZGF0YWluLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgd2lkdGhvdXQsIEdMaW50IGhlaWdodG91dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBlb3V0LCB2b2lkICpkYXRhb3V0ICk7
CgpleHRlcm4gR0xpbnQgICBnbHVCdWlsZDFETWlwbWFwcyggR0xlbnVtIHRhcmdldCwgR0xpbnQg
Y29tcG9uZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlu
dCB3aWR0aCwgR0xlbnVtIGZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqZGF0YSApOwoKZXh0ZXJuIEdMaW50ICAg
Z2x1QnVpbGQyRE1pcG1hcHMoIEdMZW51bSB0YXJnZXQsIEdMaW50IGNvbXBvbmVudHMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgd2lkdGgsIEdMaW50IGhl
aWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9y
bWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBl
LCBjb25zdCB2b2lkICpkYXRhICk7CgoKCiAKCgoKCgpleHRlcm4gR0xVcXVhZHJpY09iaiogICBn
bHVOZXdRdWFkcmljKCB2b2lkICk7CgpleHRlcm4gdm9pZCAgIGdsdURlbGV0ZVF1YWRyaWMoIEdM
VXF1YWRyaWNPYmogKnN0YXRlICk7CgpleHRlcm4gdm9pZCAgIGdsdVF1YWRyaWNEcmF3U3R5bGUo
IEdMVXF1YWRyaWNPYmogKnF1YWRPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMZW51bSBkcmF3U3R5bGUgKTsKCmV4dGVybiB2b2lkICAgZ2x1UXVhZHJp
Y09yaWVudGF0aW9uKCBHTFVxdWFkcmljT2JqICpxdWFkT2JqZWN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBvcmllbnRhdGlvbiApOwoKZXh0ZXJu
IHZvaWQgICBnbHVRdWFkcmljTm9ybWFscyggR0xVcXVhZHJpY09iaiAqcXVhZE9iamVjdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBub3JtYWxzICk7Cgpl
eHRlcm4gdm9pZCAgIGdsdVF1YWRyaWNUZXh0dXJlKCBHTFVxdWFkcmljT2JqICpxdWFkT2JqZWN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xib29sZWFuIHRleHR1
cmVDb29yZHMgKTsKCmV4dGVybiB2b2lkICAgZ2x1UXVhZHJpY0NhbGxiYWNrKCBHTFVxdWFkcmlj
T2JqICpxb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51
bSB3aGljaCwgdm9pZCAoICAqZm4pKCkgKTsKCmV4dGVybiB2b2lkICAgZ2x1Q3lsaW5kZXIoIEdM
VXF1YWRyaWNPYmogKnFvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGRv
dWJsZSBiYXNlUmFkaXVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xkb3Vi
bGUgdG9wUmFkaXVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xkb3VibGUg
aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc2xpY2VzLCBH
TGludCBzdGFja3MgKTsKCmV4dGVybiB2b2lkICAgZ2x1U3BoZXJlKCBHTFVxdWFkcmljT2JqICpx
b2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZG91YmxlIHJhZGl1cywgR0xp
bnQgc2xpY2VzLCBHTGludCBzdGFja3MgKTsKCmV4dGVybiB2b2lkICAgZ2x1RGlzayggR0xVcXVh
ZHJpY09iaiAqcW9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xkb3VibGUgaW5u
ZXJSYWRpdXMsIEdMZG91YmxlIG91dGVyUmFkaXVzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTGludCBzbGljZXMsIEdMaW50IGxvb3BzICk7CgpleHRlcm4gdm9pZCAgIGdsdVBhcnRp
YWxEaXNrKCBHTFVxdWFkcmljT2JqICpxb2JqLCBHTGRvdWJsZSBpbm5lclJhZGl1cywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZG91YmxlIG91dGVyUmFkaXVzLCBHTGlu
dCBzbGljZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBsb29w
cywgR0xkb3VibGUgc3RhcnRBbmdsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMZG91YmxlIHN3ZWVwQW5nbGUgKTsKCgoKIAoKCgoKCmV4dGVybiBHTFVudXJic09iaiog
ICBnbHVOZXdOdXJic1JlbmRlcmVyKCB2b2lkICk7CgpleHRlcm4gdm9pZCAgIGdsdURlbGV0ZU51
cmJzUmVuZGVyZXIoIEdMVW51cmJzT2JqICpub2JqICk7CgpleHRlcm4gdm9pZCAgIGdsdUxvYWRT
YW1wbGluZ01hdHJpY2VzKCBHTFVudXJic09iaiAqbm9iaiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdMZmxvYXQgbW9kZWxNYXRyaXhbMTZdLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0xmbG9h
dCBwcm9qTWF0cml4WzE2XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEdMaW50IHZpZXdwb3J0WzRdICk7CgpleHRlcm4gdm9pZCAgIGdsdU51cmJz
UHJvcGVydHkoIEdMVW51cmJzT2JqICpub2JqLCBHTGVudW0gcHJvcGVydHksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgdmFsdWUgKTsKCmV4dGVybiB2b2lk
ICAgZ2x1R2V0TnVyYnNQcm9wZXJ0eSggR0xVbnVyYnNPYmogKm5vYmosIEdMZW51bSBwcm9wZXJ0
eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xmbG9hdCAqdmFs
dWUgKTsKCmV4dGVybiB2b2lkICAgZ2x1QmVnaW5DdXJ2ZSggR0xVbnVyYnNPYmogKm5vYmogKTsK
CmV4dGVybiB2b2lkICAgZ2x1RW5kQ3VydmUoIEdMVW51cmJzT2JqICogbm9iaiApOwoKZXh0ZXJu
IHZvaWQgICBnbHVOdXJic0N1cnZlKCBHTFVudXJic09iaiAqbm9iaiwgR0xpbnQgbmtub3RzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGZsb2F0ICprbm90LCBHTGludCBz
dHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmN0bGFy
cmF5LCBHTGludCBvcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xl
bnVtIHR5cGUgKTsKCmV4dGVybiB2b2lkICAgZ2x1QmVnaW5TdXJmYWNlKCBHTFVudXJic09iaiAq
bm9iaiApOwoKZXh0ZXJuIHZvaWQgICBnbHVFbmRTdXJmYWNlKCBHTFVudXJic09iaiAqIG5vYmog
KTsKCmV4dGVybiB2b2lkICAgZ2x1TnVyYnNTdXJmYWNlKCBHTFVudXJic09iaiAqbm9iaiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBza25vdF9jb3VudCwgR0xm
bG9hdCAqc2tub3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQg
dGtub3RfY291bnQsIEdMZmxvYXQgKnRrbm90LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMaW50IHNfc3RyaWRlLCBHTGludCB0X3N0cmlkZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGZsb2F0ICpjdGxhcnJheSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCBzb3JkZXIsIEdMaW50IHRvcmRlciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHlwZSApOwoKZXh0ZXJuIHZv
aWQgICBnbHVCZWdpblRyaW0oIEdMVW51cmJzT2JqICpub2JqICk7CgpleHRlcm4gdm9pZCAgIGds
dUVuZFRyaW0oIEdMVW51cmJzT2JqICpub2JqICk7CgpleHRlcm4gdm9pZCAgIGdsdVB3bEN1cnZl
KCBHTFVudXJic09iaiAqbm9iaiwgR0xpbnQgY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGZsb2F0ICphcnJheSwgR0xpbnQgc3RyaWRlLCBHTGVudW0gdHlwZSApOwoK
ZXh0ZXJuIHZvaWQgICBnbHVOdXJic0NhbGxiYWNrKCBHTFVudXJic09iaiAqbm9iaiwgR0xlbnVt
IHdoaWNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICggICpm
bikoKSApOwoKCgogCgoKCgoKZXh0ZXJuIEdMVXRyaWFuZ3VsYXRvck9iaiogICBnbHVOZXdUZXNz
KCB2b2lkICk7CgpleHRlcm4gdm9pZCAgIGdsdVRlc3NDYWxsYmFjayggR0xVdHJpYW5ndWxhdG9y
T2JqICp0b2JqLCBHTGVudW0gd2hpY2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAoICAqZm4pKCkgKTsKCmV4dGVybiB2b2lkICAgZ2x1RGVsZXRlVGVzcyggR0xV
dHJpYW5ndWxhdG9yT2JqICp0b2JqICk7CgpleHRlcm4gdm9pZCAgIGdsdUJlZ2luUG9seWdvbigg
R0xVdHJpYW5ndWxhdG9yT2JqICp0b2JqICk7CgpleHRlcm4gdm9pZCAgIGdsdUVuZFBvbHlnb24o
IEdMVXRyaWFuZ3VsYXRvck9iaiAqdG9iaiApOwoKZXh0ZXJuIHZvaWQgICBnbHVOZXh0Q29udG91
ciggR0xVdHJpYW5ndWxhdG9yT2JqICp0b2JqLCBHTGVudW0gdHlwZSApOwoKZXh0ZXJuIHZvaWQg
ICBnbHVUZXNzVmVydGV4KCBHTFV0cmlhbmd1bGF0b3JPYmogKnRvYmosIEdMZG91YmxlIHZbM10s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEgKTsKCgoKIAoK
CgoKCmV4dGVybiBjb25zdCBHTHVieXRlKiAgIGdsdUdldFN0cmluZyggR0xlbnVtIG5hbWUgKTsK
CgoKCgoKCgoKCgoKCgoKCn0KCgoKCiMgMjQgImgvbnJoeV9jbGFzc1VzZU1hcC5oIiAyCgojIDEg
Ii91c3IvaW5jbHVkZS9HTC9nbHguaCIgMSAzCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRl
L0dML3htZXNhLmgiIDEgMwogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAK
CgoKCgoKCnR5cGVkZWYgc3RydWN0IHhtZXNhX2NvbnRleHQgKlhNZXNhQ29udGV4dDsKCnR5cGVk
ZWYgc3RydWN0IHhtZXNhX3Zpc3VhbCAqWE1lc2FWaXN1YWw7Cgp0eXBlZGVmIHN0cnVjdCB4bWVz
YV9idWZmZXIgKlhNZXNhQnVmZmVyOwoKCgoKIAoKCgoKCgoKCgoKCgoKCgpleHRlcm4gWE1lc2FW
aXN1YWwgWE1lc2FDcmVhdGVWaXN1YWwoIERpc3BsYXkgKmRpc3BsYXksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWFZpc3VhbEluZm8gKnZpc2luZm8sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xib29sZWFuIHJnYl9mbGFnLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiBhbHBoYV9mbGFnLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiBkYl9mbGFnLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiB4aW1hZ2VfZmxhZywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBkZXB0aF9zaXplLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHN0ZW5jaWxfc2l6ZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBhY2N1bV9zaXplLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGxldmVsICk7CgogCgoKZXh0
ZXJuIHZvaWQgWE1lc2FEZXN0cm95VmlzdWFsKCBYTWVzYVZpc3VhbCB2ICk7CgoKCiAKCgoKCgoK
CmV4dGVybiBYTWVzYUNvbnRleHQgWE1lc2FDcmVhdGVDb250ZXh0KCBYTWVzYVZpc3VhbCB2aXN1
YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTWVzYUNvbnRleHQg
c2hhcmVfbGlzdCApOwoKCiAKCgpleHRlcm4gdm9pZCBYTWVzYURlc3Ryb3lDb250ZXh0KCBYTWVz
YUNvbnRleHQgYyApOwoKCiAKCgpleHRlcm4gWE1lc2FCdWZmZXIgWE1lc2FDcmVhdGVXaW5kb3dC
dWZmZXIoIFhNZXNhVmlzdWFsIHYsIFdpbmRvdyB3ICk7CgoKIAoKCmV4dGVybiBYTWVzYUJ1ZmZl
ciBYTWVzYUNyZWF0ZVBpeG1hcEJ1ZmZlciggWE1lc2FWaXN1YWwgdiwgUGl4bWFwIHAsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JtYXAgYyApOwoKCiAK
CgpleHRlcm4gdm9pZCBYTWVzYURlc3Ryb3lCdWZmZXIoIFhNZXNhQnVmZmVyIGIgKTsKCgogCgoK
CgpleHRlcm4gWE1lc2FCdWZmZXIgWE1lc2FGaW5kQnVmZmVyKCBEaXNwbGF5ICpkcHksIERyYXdh
YmxlIGQgKTsKCgoKIAoKCmV4dGVybiBHTGJvb2xlYW4gWE1lc2FNYWtlQ3VycmVudCggWE1lc2FD
b250ZXh0IGMsIFhNZXNhQnVmZmVyIGIgKTsKCgogCgoKZXh0ZXJuIFhNZXNhQ29udGV4dCBYTWVz
YUdldEN1cnJlbnRDb250ZXh0KCB2b2lkICk7CgoKIAoKCmV4dGVybiBYTWVzYUJ1ZmZlciBYTWVz
YUdldEN1cnJlbnRCdWZmZXIoIHZvaWQgKTsKCgogCgoKCmV4dGVybiB2b2lkIFhNZXNhU3dhcEJ1
ZmZlcnMoIFhNZXNhQnVmZmVyIGIgKTsKCgogCgoKCgpleHRlcm4gdm9pZCBYTWVzYUNvcHlTdWJC
dWZmZXIoIFhNZXNhQnVmZmVyIGIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQgKTsKCgogCgoKCgoKCgoKCmV4dGVybiBH
TGJvb2xlYW4gWE1lc2FHZXRCYWNrQnVmZmVyKCBYTWVzYUJ1ZmZlciBiLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUGl4bWFwICpwaXhtYXAsIFhJbWFnZSAqKnhpbWFnZSAp
OwoKCgogCgoKCgoKCgoKCmV4dGVybiBHTGJvb2xlYW4gWE1lc2FHZXREZXB0aEJ1ZmZlciggWE1l
c2FCdWZmZXIgYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCAq
d2lkdGgsIEdMaW50ICpoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgKmJ5dGVzUGVyVmFsdWUsIHZvaWQgKipidWZmZXIgKTsKCgoKIAoKCmV4dGVybiB2
b2lkIFhNZXNhRmx1c2goIFhNZXNhQ29udGV4dCBjICk7CgoKCiAKCgoKZXh0ZXJuIGNvbnN0IGNo
YXIgKlhNZXNhR2V0U3RyaW5nKCBYTWVzYUNvbnRleHQgYywgaW50IG5hbWUgKTsKCgoKIAoKCgoK
CmV4dGVybiB2b2lkIFhNZXNhR2FyYmFnZUNvbGxlY3QoIHZvaWQgKTsKCgoKIAoKCgoKCgoKCmV4
dGVybiB1bnNpZ25lZCBsb25nIFhNZXNhRGl0aGVyQ29sb3IoIFhNZXNhQ29udGV4dCBjLCBHTGlu
dCB4LCBHTGludCB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGZs
b2F0IHJlZCwgR0xmbG9hdCBncmVlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xmbG9hdCBibHVlLCBHTGZsb2F0IGFscGhhICk7CgoKCiAKCgoKCgoKCgoKZXh0ZXJu
IEdMYm9vbGVhbiBYTWVzYVNldEZYbW9kZSggR0xpbnQgbW9kZSApOwoKCgoKfQoKCgoKIyA2NiAi
L3Vzci9pbmNsdWRlL0dML2dseC5oIiAyIDMKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgoKCgog
CgoKZW51bSBfR0xYX0NPTkZJR1MgewoJR0xYX1VTRV9HTAkJPSAxLAoJR0xYX0JVRkZFUl9TSVpF
CQk9IDIsCglHTFhfTEVWRUwJCT0gMywKCUdMWF9SR0JBCQk9IDQsCglHTFhfRE9VQkxFQlVGRkVS
CT0gNSwgCglHTFhfU1RFUkVPCQk9IDYsCglHTFhfQVVYX0JVRkZFUlMJCT0gNywKCUdMWF9SRURf
U0laRQkJPSA4LAoJR0xYX0dSRUVOX1NJWkUJCT0gOSwKCUdMWF9CTFVFX1NJWkUJCT0gMTAsCglH
TFhfQUxQSEFfU0laRQkJPSAxMSwKCUdMWF9ERVBUSF9TSVpFCQk9IDEyLAoJR0xYX1NURU5DSUxf
U0laRQk9IDEzLAoJR0xYX0FDQ1VNX1JFRF9TSVpFCT0gMTQsCglHTFhfQUNDVU1fR1JFRU5fU0la
RQk9IDE1LAoJR0xYX0FDQ1VNX0JMVUVfU0laRQk9IDE2LAoJR0xYX0FDQ1VNX0FMUEhBX1NJWkUJ
PSAxNywKCgkgCglHTFhfWF9WSVNVQUxfVFlQRV9FWFQJCT0gMHgyMiwKCUdMWF9UUkFOU1BBUkVO
VF9UWVBFX0VYVAk9IDB4MjMsCglHTFhfVFJBTlNQQVJFTlRfSU5ERVhfVkFMVUVfRVhUCT0gMHgy
NCwKCUdMWF9UUkFOU1BBUkVOVF9SRURfVkFMVUVfRVhUCT0gMHgyNSwKCUdMWF9UUkFOU1BBUkVO
VF9HUkVFTl9WQUxVRV9FWFQJPSAweDI2LAoJR0xYX1RSQU5TUEFSRU5UX0JMVUVfVkFMVUVfRVhU
CT0gMHgyNywKCUdMWF9UUkFOU1BBUkVOVF9BTFBIQV9WQUxVRV9FWFQJPSAweDI4Cn07CgoKIAoK
CgoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKICAgdHlwZWRl
ZiBYTWVzYUNvbnRleHQgR0xYQ29udGV4dDsKICAgdHlwZWRlZiBQaXhtYXAgR0xYUGl4bWFwOwog
ICB0eXBlZGVmIERyYXdhYmxlIEdMWERyYXdhYmxlOwoKCgoKCnR5cGVkZWYgWElEIEdMWENvbnRl
eHRJRDsKCgoKZXh0ZXJuIFhWaXN1YWxJbmZvKiBnbFhDaG9vc2VWaXN1YWwoIERpc3BsYXkgKmRw
eSwgaW50IHNjcmVlbiwKCQkJCSAgICAgaW50ICphdHRyaWJMaXN0ICk7CgpleHRlcm4gR0xYQ29u
dGV4dCBnbFhDcmVhdGVDb250ZXh0KCBEaXNwbGF5ICpkcHksIFhWaXN1YWxJbmZvICp2aXMsCgkJ
CQkgICAgR0xYQ29udGV4dCBzaGFyZUxpc3QsIGludCAgZGlyZWN0ICk7CgpleHRlcm4gdm9pZCBn
bFhEZXN0cm95Q29udGV4dCggRGlzcGxheSAqZHB5LCBHTFhDb250ZXh0IGN0eCApOwoKZXh0ZXJu
IGludCAgZ2xYTWFrZUN1cnJlbnQoIERpc3BsYXkgKmRweSwgR0xYRHJhd2FibGUgZHJhd2FibGUs
CgkJCSAgICBHTFhDb250ZXh0IGN0eCk7CgpleHRlcm4gdm9pZCBnbFhDb3B5Q29udGV4dCggRGlz
cGxheSAqZHB5LCBHTFhDb250ZXh0IHNyYywgR0xYQ29udGV4dCBkc3QsCgkJCSAgICBHTHVpbnQg
bWFzayApOwoKZXh0ZXJuIHZvaWQgZ2xYU3dhcEJ1ZmZlcnMoIERpc3BsYXkgKmRweSwgR0xYRHJh
d2FibGUgZHJhd2FibGUgKTsKCmV4dGVybiBHTFhQaXhtYXAgZ2xYQ3JlYXRlR0xYUGl4bWFwKCBE
aXNwbGF5ICpkcHksIFhWaXN1YWxJbmZvICp2aXN1YWwsCgkJCQkgICAgIFBpeG1hcCBwaXhtYXAg
KTsKCmV4dGVybiB2b2lkIGdsWERlc3Ryb3lHTFhQaXhtYXAoIERpc3BsYXkgKmRweSwgR0xYUGl4
bWFwIHBpeG1hcCApOwoKZXh0ZXJuIGludCAgZ2xYUXVlcnlFeHRlbnNpb24oIERpc3BsYXkgKmRw
eSwgaW50ICplcnJvcmIsIGludCAqZXZlbnQgKTsKCmV4dGVybiBpbnQgIGdsWFF1ZXJ5VmVyc2lv
biggRGlzcGxheSAqZHB5LCBpbnQgKm1haiwgaW50ICptaW4gKTsKCmV4dGVybiBpbnQgIGdsWElz
RGlyZWN0KCBEaXNwbGF5ICpkcHksIEdMWENvbnRleHQgY3R4ICk7CgpleHRlcm4gaW50IGdsWEdl
dENvbmZpZyggRGlzcGxheSAqZHB5LCBYVmlzdWFsSW5mbyAqdmlzdWFsLAoJCQkgaW50IGF0dHJp
YiwgaW50ICp2YWx1ZSApOwoKZXh0ZXJuIEdMWENvbnRleHQgZ2xYR2V0Q3VycmVudENvbnRleHQo
IHZvaWQgKTsKCmV4dGVybiBHTFhEcmF3YWJsZSBnbFhHZXRDdXJyZW50RHJhd2FibGUoIHZvaWQg
KTsKCmV4dGVybiB2b2lkIGdsWFdhaXRHTCggdm9pZCApOwoKZXh0ZXJuIHZvaWQgZ2xYV2FpdFgo
IHZvaWQgKTsKCmV4dGVybiB2b2lkIGdsWFVzZVhGb250KCBGb250IGZvbnQsIGludCBmaXJzdCwg
aW50IGNvdW50LCBpbnQgbGlzdCApOwoKCgogCmV4dGVybiBjb25zdCBjaGFyICpnbFhRdWVyeUV4
dGVuc2lvbnNTdHJpbmcoIERpc3BsYXkgKmRweSwgaW50IHNjcmVlbiApOwoKZXh0ZXJuIGNvbnN0
IGNoYXIgKmdsWFF1ZXJ5U2VydmVyU3RyaW5nKCBEaXNwbGF5ICpkcHksIGludCBzY3JlZW4sIGlu
dCBuYW1lICk7CgpleHRlcm4gY29uc3QgY2hhciAqZ2xYR2V0Q2xpZW50U3RyaW5nKCBEaXNwbGF5
ICpkcHksIGludCBuYW1lICk7CgoKCiAKCgoKCmV4dGVybiBHTFhQaXhtYXAgZ2xYQ3JlYXRlR0xY
UGl4bWFwTUVTQSggRGlzcGxheSAqZHB5LCBYVmlzdWFsSW5mbyAqdmlzdWFsLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpeG1hcCBwaXhtYXAsIENvbG9ybWFwIGNt
YXAgKTsKCgoKZXh0ZXJuIGludCAgZ2xYUmVsZWFzZUJ1ZmZlcnNNRVNBKCBEaXNwbGF5ICpkcHks
IEdMWERyYXdhYmxlIGQgKTsKCgoKZXh0ZXJuIHZvaWQgZ2xYQ29weVN1YkJ1ZmZlck1FU0EoIERp
c3BsYXkgKmRweSwgR0xYRHJhd2FibGUgZHJhd2FibGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCApOwoKCgoKfQoK
CgojIDI1ICJoL25yaHlfY2xhc3NVc2VNYXAuaCIgMgoKCiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9o
L3NoYXBlLmgiIDEKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9o
L3NoYXBlRWxlbS5oIiAxCgoKCiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9oL3R4dC5oIiAxCiAKCgoK
CgoKCgoKCiMgMTIxICIvc29mdHdhcmUvdGhhbGlhL2gvdHh0LmgiCgojIDQgIi9zb2Z0d2FyZS90
aGFsaWEvaC9zaGFwZUVsZW0uaCIgMgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCnN0cnVjdCBTX1dyaXRlQnVmZmVyOwoKY2xhc3MgU19Hcm91cFRhZyB7CiAgICBpbnQgICAg
ICAgICAgICAgICAgIG5EYXRhOwogICAgaW50ICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU7
CiAgICB1bnNpZ25lZCBpbnQgICAgICAgICpkYXRhOwoKCgoKcHVibGljOgogICAgU19Hcm91cFRh
ZygpOwogICAgU19Hcm91cFRhZyggY29uc3QgU19Hcm91cFRhZyAmICk7CiAgICB+U19Hcm91cFRh
ZygpOwoKICAgIFNfR3JvdXBUYWcgJiBzZXREZWZhdWx0KCBpbnQgKTsKICAgIFNfR3JvdXBUYWcg
JiBzZXQoIGludCApOwogICAgU19Hcm91cFRhZyAmIGNsZWFyKCBpbnQgKTsKICAgIGludCBvcGVy
YXRvcltdKCBpbnQgKSBjb25zdDsKCiAgICBTX0dyb3VwVGFnICYgc2V0KCBjb25zdCBTX0dyb3Vw
VGFnICYgKTsKICAgIFNfR3JvdXBUYWcgJiBjbGVhciggY29uc3QgU19Hcm91cFRhZyAmICk7Cgog
ICAgIAogICAgIAogICAgaW50IGltcGxpZXMoIGNvbnN0IFNfR3JvdXBUYWcgJiB0aGF0ICkgY29u
c3Q7CgogICAgIAogICAgaW50IGludGVyc2VjdHMoIGNvbnN0IFNfR3JvdXBUYWcgJiB0aGF0ICkg
Y29uc3Q7CgogICAgIAogICAgU19Hcm91cFRhZyBvcGVyYXRvciB+ICgpIGNvbnN0OwoKICAgICAK
ICAgIGZyaWVuZCBTX0dyb3VwVGFnIG9wZXJhdG9yXiggY29uc3QgU19Hcm91cFRhZyAmLCBjb25z
dCBTX0dyb3VwVGFnICYgKTsKICAgIGZyaWVuZCBTX0dyb3VwVGFnIG9wZXJhdG9yJiggY29uc3Qg
U19Hcm91cFRhZyAmLCBjb25zdCBTX0dyb3VwVGFnICYgKTsKICAgIGZyaWVuZCBTX0dyb3VwVGFn
IG9wZXJhdG9yfCggY29uc3QgU19Hcm91cFRhZyAmLCBjb25zdCBTX0dyb3VwVGFnICYgKTsKCiAg
ICBTX0dyb3VwVGFnICYgb3BlcmF0b3I9KCBjb25zdCBTX0dyb3VwVGFnICYgKTsKICAgIFNfR3Jv
dXBUYWcgJiBvcGVyYXRvcl49KCBjb25zdCBTX0dyb3VwVGFnICYgKTsKICAgIFNfR3JvdXBUYWcg
JiBvcGVyYXRvciY9KCBjb25zdCBTX0dyb3VwVGFnICYgKTsKICAgIFNfR3JvdXBUYWcgJiBvcGVy
YXRvcnw9KCBjb25zdCBTX0dyb3VwVGFnICYgKTsKCiAgICB2b2lkIHJlbW92ZSggaW50ICk7Cgog
ICAgZnJpZW5kIGludCBvcGVyYXRvciE9KCBjb25zdCBTX0dyb3VwVGFnICYsIGNvbnN0IFNfR3Jv
dXBUYWcgJiApOwogICAgZnJpZW5kIGludCBvcGVyYXRvcj09KCBjb25zdCBTX0dyb3VwVGFnICYs
IGNvbnN0IFNfR3JvdXBUYWcgJiApOwoKICAgIGZyaWVuZCBpbnQgZndyaXRlKCBjb25zdCBTX0dy
b3VwVGFnICYsIE5FVEZJTEVfRklMRSAqICk7CiAgICBmcmllbmQgaW50IGZ3cml0ZSggY29uc3Qg
U19Hcm91cFRhZyAmLCBTX1dyaXRlQnVmZmVyICYgKTsKICAgIGZyaWVuZCBpbnQgZnJlYWQoIFNf
R3JvdXBUYWcgJiwgTkVURklMRV9GSUxFICogKTsKCiAgICBmcmllbmQgVHdpbmUgU19Hcm91cFRh
Z3RvYSggY29uc3QgU19Hcm91cFRhZyAmICk7CgogICAgIAogICAgZnJpZW5kIHN0cnVjdCBTaGFw
ZTsKICAgIH07CgppbmxpbmUgY29uc3QgY2hhciAqIGNsYXNzTmFtZSggY29uc3QgU19Hcm91cFRh
ZyAmICkgeyByZXR1cm4gIlNfR3JvdXBUYWciOyB9OwoKY2xhc3MgU19Qcm9wZXJ0eUlEOwoKIApj
bGFzcyBTaGFwZUludFB0ciB7CnByb3RlY3RlZDoKICAgIGludCAgICAgICAgICAgICAgICAgICAg
ICAgICAqZGF0YTsKCgoKCgogICAgaW5saW5lIFNoYXBlSW50UHRyICYgb3BlcmF0b3I9KCBpbnQg
KiBuZXdEYXRhICkgewogICAgICAgIGRhdGEgPSBuZXdEYXRhOwogICAgICAgIHJldHVybiAqdGhp
czsKICAgICAgICB9OwoKcHVibGljOgogICAgZnJpZW5kIFNoYXBlOwogICAgZnJpZW5kIHN0cnVj
dCBTX0VsZW07CiAgICBmcmllbmQgc3RydWN0IFNfRWxlbVJlZjsKCiAgICBpbmxpbmUgb3BlcmF0
b3IgaW50ICogKCkgeyByZXR1cm4gZGF0YTsgfTsKICAgIGlubGluZSBvcGVyYXRvciBjb25zdCBp
bnQgKiAoKSBjb25zdCB7IHJldHVybiBkYXRhOyB9OwogICAgfTsKCiAKCgoKCgpjbGFzcyBTX0Vs
ZW0gewogICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1SZWZDb3VudDsgICAgICAg
IAogICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTaXplOwoKICAgICAKCgoKcHVi
bGljOgogICAgU2hhcGVJbnRQdHIgICAgICAgICAgICAgICAgIHBvczsgICAgICAgICAgICAgCgpw
cml2YXRlOgogICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIG52OyAgICAgICAgICAgICAg
CgpwdWJsaWM6CiAgICBpbmxpbmUgaW50ICAgICAgICAgICAgICAgICAgblZlcnRzKCkgY29uc3Qg
eyByZXR1cm4gbnY7IH07CiAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTsKICAg
IGludCAgICAgICAgICAgICAgICAgICAgICAgICBzbW9vdGg7CiAgICBpbnQgICAgICAgICAgICAg
ICAgICAgICAgICAgbXRsOwogICAgU19Hcm91cFRhZyAgICAgICAgICAgICAgICAgIGdyb3VwOwoK
ICAgIFNfRWxlbSgpOwogICAgflNfRWxlbSgpOwogICAgU19FbGVtKCBjb25zdCBTX0VsZW0gJiAp
OwogICAgU19FbGVtICYgb3BlcmF0b3I9KCBjb25zdCBTX0VsZW0gJiApOwoKICAgICAKICAgIHZv
aWQgb3BlcmF0b3IgZGVsZXRlKCB2b2lkICogKTsKCiAgICAgCiAgICB2b2lkICpvcGVyYXRvciBu
ZXcoIHNpemVfdCApOwoKICAgIGZyaWVuZCBTX0VsZW1SZWY7CiAgICBmcmllbmQgc3RydWN0IFNf
RWxlbUNoYWluOwogICAgZnJpZW5kIHN0cnVjdCBTX0VsZW1DaGFpbkVudHJ5OwogICAgZnJpZW5k
IFNoYXBlOwoKICAgIHZvaWQgKiBvcGVyYXRvcltdKCBjb25zdCBTX1Byb3BlcnR5SUQgJiBmb28g
KTsKICAgIH07CgoKIApzdHJ1Y3QgU19FbGVtQ2hhaW5FbnRyeSB7CiAgICBTX0VsZW0gICAgICAg
ICAgICAgICplbGVtOwogICAgU19FbGVtQ2hhaW5FbnRyeSAgICAqbmV4dDsKICAgIFNfRWxlbUNo
YWluRW50cnkgICAgKnByZXY7CiAgICBpbnQgICAgICAgICAgICAgICAgIHJlZkNvdW50OyAgICAg
ICAgICAgICAgICAKCiAgICBTX0VsZW1DaGFpbkVudHJ5KCk7CiAgICBTX0VsZW1DaGFpbkVudHJ5
KCBjb25zdCBTX0VsZW1DaGFpbkVudHJ5ICYgKTsKICAgIH5TX0VsZW1DaGFpbkVudHJ5KCk7CiAg
ICBTX0VsZW1DaGFpbkVudHJ5ICYgb3BlcmF0b3I9KCBjb25zdCBTX0VsZW1DaGFpbkVudHJ5ICYg
KTsKICAgIH07CgpjbGFzcyBTX0VsZW1SZWY7CgogCmNsYXNzIFNfRWxlbUNoYWluIHsKICAgIFNf
RWxlbUNoYWluRW50cnkgICAgKmZpcnN0OwogICAgU19FbGVtQ2hhaW5FbnRyeSAgICAqbGFzdDsK
CnB1YmxpYzoKICAgIFNfRWxlbUNoYWluKCk7CiAgICB+U19FbGVtQ2hhaW4oKTsKICAgIFNfRWxl
bUNoYWluKCBjb25zdCBTX0VsZW1DaGFpbiAmICk7CiAgICBTX0VsZW1DaGFpbiAmIG9wZXJhdG9y
PSggY29uc3QgU19FbGVtQ2hhaW4gJiApOwoKICAgICAKCgogICAgdm9pZCBDb3B5RWxlbXNFeGNl
cHRGb3IoIGNvbnN0IFNfRWxlbUNoYWluICYsIFNfR3JvdXBUYWcgKTsKCiAgICAgCiAgICBTX0Vs
ZW1SZWYgb3BlcmF0b3JbXSggaW50ICk7CgogICAgU19FbGVtUmVmIHN0YXJ0KCk7CiAgICBTX0Vs
ZW1SZWYgZW5kKCk7CgogICAgaW50IG51bWJFbGVtKCkgY29uc3Q7CgogICAgZnJpZW5kIFNfRWxl
bVJlZjsKICAgIGZyaWVuZCB2b2lkIFNfdW53aW5kQ2hhaW4oIExpc3Q8U19FbGVtQ2hhaW5FbnRy
eSAqPiAmICk7CiAgICBmcmllbmQgdm9pZCBTX3Vud2luZENoYWluKCBTX0VsZW1DaGFpbkVudHJ5
ICogKTsKICAgIH07CgoKIApjbGFzcyBTX0VsZW1SZWYgewogICAgU19FbGVtQ2hhaW4gICAgICAg
ICAqY2hhaW47CiAgICBTX0VsZW1DaGFpbkVudHJ5ICAgICpjdXJyZW50OwoKICAgICAKICAgIHZv
aWQgQXBwZW5kRWxlbWVudCggU19FbGVtICogKTsKCnB1YmxpYzoKICAgIFNfRWxlbVJlZigpOwog
ICAgflNfRWxlbVJlZigpOwoKICAgIFNfRWxlbVJlZiggY29uc3QgU19FbGVtUmVmICYgKTsKICAg
IFNfRWxlbVJlZiggY29uc3QgU19FbGVtQ2hhaW4gJiApOwoKICAgIFNfRWxlbVJlZiAmIG9wZXJh
dG9yPSggY29uc3QgU19FbGVtUmVmICYgKTsKICAgIFNfRWxlbVJlZiAmIG9wZXJhdG9yPSggY29u
c3QgU19FbGVtQ2hhaW4gJiApOwoKICAgICAKICAgIFNfRWxlbVJlZiAmIG9wZXJhdG9yKysoKTsg
ICAgICAgICAgICAKICAgIFNfRWxlbVJlZiAmIG9wZXJhdG9yLS0oKTsgICAgICAgICAgICAKICAg
IFNfRWxlbVJlZiBvcGVyYXRvcisrKCBpbnQgKTsgICAgICAgICAKICAgIFNfRWxlbVJlZiBvcGVy
YXRvci0tKCBpbnQgKTsgICAgICAgICAKICAgIFNfRWxlbVJlZiAmIG9wZXJhdG9yKz0oIGludCAp
OwogICAgU19FbGVtUmVmICYgb3BlcmF0b3ItPSggaW50ICk7CiAgICBTX0VsZW1SZWYgb3BlcmF0
b3IrKCBpbnQgKSBjb25zdDsKICAgIFNfRWxlbVJlZiBvcGVyYXRvci0oIGludCApIGNvbnN0OwoK
ICAgIGlubGluZSBTX0VsZW0gJiBvcGVyYXRvcltdKCBpbnQgd2hpY2ggKSBjb25zdCB7CiAgICAg
ICAgcmV0dXJuICooKCgqdGhpcykgKyB3aGljaCkuY3VycmVudC0+ZWxlbSk7CiAgICAgICAgfTsK
CiAgICAgCiAgICBTX0VsZW1SZWYgJiBnb3RvU3RhcnQoKTsKICAgIFNfRWxlbVJlZiAmIGdvdG9F
bmQoKTsKCiAgICAgCiAgICBvcGVyYXRvciBTX0VsZW0gKigpOwoKICAgIGlubGluZSBTX0VsZW0g
KiBvcGVyYXRvci0+KCkgewogICAgICAgIGlmICggY3VycmVudCAmJiBjdXJyZW50LT5lbGVtICkK
ICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQtPmVsZW07CgogICAgICAgIFRYVF9TcmNGaWxlICAg
PSAiL3NvZnR3YXJlL3RoYWxpYS9oL3NoYXBlRWxlbS5oIiwgVFhUX1NyY0xpbmUgICA9IDI2MSwg
VFhUX091dHB1dCAoICJzaGFwZTpTX0VMRU1SRUZfTlVMTF9FTEVNRU5UIiwgIlNfRWxlbSAqIFNf
RWxlbVJlZjo6LT4iICk7CiAgICAgICAgcmV0dXJuIG5ldyBTX0VsZW07CiAgICAgICAgfTsKCiAg
ICBTX0VsZW0gJiBvcGVyYXRvciAqKCk7CgogICAgb3BlcmF0b3IgY29uc3QgU19FbGVtICooKSBj
b25zdDsKCiAgICBjb25zdCBTX0VsZW0gKiBvcGVyYXRvci0+KCkgY29uc3Q7CiAgICBjb25zdCBT
X0VsZW0gJiBvcGVyYXRvciAqKCkgY29uc3Q7CgogICAgIAogICAgU19FbGVtUmVmIEFwcGVuZEVs
ZW1lbnQoKTsKICAgIFNfRWxlbVJlZiBQcmVwZW5kRWxlbWVudCgpOwoKICAgICAKICAgIHZvaWQg
RGV0YWNoU2VsZigpOwoKICAgICAKCgogICAgdm9pZCBJc29sYXRlU2VsZigpOwoKICAgICAKICAg
IHZvaWQgKiBvcGVyYXRvcltdKCBjb25zdCBTX1Byb3BlcnR5SUQgJiBmb28gKTsKCiAgICBmcmll
bmQgU19FbGVtQ2hhaW47CiAgICBmcmllbmQgU2hhcGU7CiAgICBmcmllbmQgaW50IGZ3cml0ZSgg
Y29uc3QgU19FbGVtUmVmICYsIE5FVEZJTEVfRklMRSAqICk7CiAgICBmcmllbmQgaW50IGZyZWFk
KCBTX0VsZW1SZWYgJiwgTkVURklMRV9GSUxFICogKTsKICAgIH07CgoKCiMgMjIgIi9zb2Z0d2Fy
ZS90aGFsaWEvaC9zaGFwZS5oIiAyCgojIDEgIi9zb2Z0d2FyZS90aGFsaWEvaC9zaGFwZU11bmdl
LmgiIDEKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9zb2Z0d2FyZS90aGFsaWEvaC9zaGFw
ZVR5cGVzLmgiIDEKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0IFNfQkJveDsKc3RydWN0
IFNfUXVhdGVybmlvbjsKCmlubGluZSBjb25zdCBjaGFyICogY2xhc3NOYW1lKCBjb25zdCBTX0JC
b3ggJiApIHsgcmV0dXJuICJTX0JCb3giOyB9OwppbmxpbmUgY29uc3QgY2hhciAqIGNsYXNzTmFt
ZSggY29uc3QgU19RdWF0ZXJuaW9uICYgKSB7IHJldHVybiAiU19RdWF0ZXJuaW9uIjt9OwoKIAoK
CnR5cGVkZWYgc3RydWN0IF9uZXRmaWxlX2ZpbGUgTkVURklMRV9GSUxFOwppbnQgZndyaXRlKCBj
b25zdCBTX0JCb3ggJiwgTkVURklMRV9GSUxFICogKTsKaW50IGZ3cml0ZSggY29uc3QgU19RdWF0
ZXJuaW9uICYsIE5FVEZJTEVfRklMRSAqICk7CmludCBmcmVhZCggU19CQm94ICYsIE5FVEZJTEVf
RklMRSAqICk7CmludCBmcmVhZCggU19RdWF0ZXJuaW9uICYsIE5FVEZJTEVfRklMRSAqICk7Cgpz
dHJ1Y3QgU19CQm94IHsKICAgIFNfQkJveCggY29uc3QgTV9WZWN0b3IgJiwgY29uc3QgTV9WZWN0
b3IgJiApOwogICAgU19CQm94KCBjb25zdCBTX0JCb3ggJiApOwogICAgU19CQm94KCk7CgogICAg
TV9WZWN0b3IgbWluLCBtYXg7CgogICAgZmxvYXQgdm9sdW1lKCkgY29uc3Q7CiAgICB9OwoKc3Ry
dWN0IFNfUXVhdGVybmlvbiB7CiAgICBmbG9hdCB3LCB4LCB5LCB6OwoKICAgIFNfUXVhdGVybmlv
bigpOwogICAgU19RdWF0ZXJuaW9uKCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCApOwogICAg
U19RdWF0ZXJuaW9uKCBjb25zdCBTX1F1YXRlcm5pb24gJiApOwoKICAgIGZsb2F0IG9wZXJhdG9y
W10oIGludCApIGNvbnN0OwogICAgZmxvYXQgJiBvcGVyYXRvcltdKCBpbnQgKTsKICAgIH07Cgpl
bnVtIFNfRmlsZVR5cGUgewogICAgb2JqLCBvYm4sIHNocCwgc3RtLCBzaHA5CiAgICB9OwoKCiMg
MjMgIi9zb2Z0d2FyZS90aGFsaWEvaC9zaGFwZU11bmdlLmgiIDIKCgoKCgoKc3RydWN0IFdpbmdF
ZGdlOwoKc3RydWN0IFdpbmdQb2x5IHsKICAgV2luZ0VkZ2UgKmZpcnN0RWRnZTsKICAgV2luZ1Bv
bHkgKm5leHRQb2x5OwogICBXaW5nUG9seSAqcHJldlBvbHk7CiAgIGludCAgICAgIGVsZW1JbmRl
eDsKICAgaW50ICAgICAgZmxhZ3M7Cn07CgpzdHJ1Y3QgV2luZ0VkZ2UgewogICBpbnQgICAgICAg
cG50MTsKICAgaW50ICAgICAgIHBudDI7CiAgIFdpbmdQb2x5ICppbnNpZGU7CiAgIFdpbmdQb2x5
ICpvdXRzaWRlOwogICBXaW5nRWRnZSAqbmV4dExlZnQ7CiAgIFdpbmdFZGdlICpwcmV2TGVmdDsK
ICAgV2luZ0VkZ2UgKm5leHRSaWdodDsKICAgV2luZ0VkZ2UgKnByZXZSaWdodDsKICAgV2luZ0Vk
Z2UgKm5leHRFZGdlOwogICBXaW5nRWRnZSAqcHJldkVkZ2U7CiAgIFdpbmdFZGdlICpyZXZlcnNl
RWRnZTsKICAgdm9pZCAgICAgKmRhdGE7Cn07CgoKIyAyMyAiL3NvZnR3YXJlL3RoYWxpYS9oL3No
YXBlLmgiIDIKCgoKIyAxICIvc29mdHdhcmUvdGhhbGlhL2gvc2hhcGVFbGVtRGlzcFByb3AuaCIg
MQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmNsYXNzIFNfRWxlbURpc3BQcm9wCnsKICAgIE1fVmVj
dG9yIF9jb2xvcjsKCnByb3RlY3RlZDoKCnB1YmxpYzoKICAgIFNfRWxlbURpc3BQcm9wKCk7CiAg
ICBTX0VsZW1EaXNwUHJvcCggY29uc3QgU19FbGVtRGlzcFByb3AgJmVkUHJvcCk7CiAgICBTX0Vs
ZW1EaXNwUHJvcCAmIG9wZXJhdG9yPSggY29uc3QgU19FbGVtRGlzcFByb3AgJm9sZCk7CiAgICB+
U19FbGVtRGlzcFByb3AoKTsKCiAgICAgCiAgICAgCiAgICAgCiAgICB2b2lkIHNldENvbG9yKGZs
b2F0LCBmbG9hdCwgZmxvYXQpOwogICAgdm9pZCBzZXRDb2xvciggY29uc3QgTV9WZWN0b3IgJik7
CiAgICBNX1ZlY3RvciBnZXRDb2xvcigpIGNvbnN0OwoKICAgICAKICAgICAKICAgICAKICAgIGlu
dCByZWFkRWxlbURpc3BQcm9wKCBORVRGSUxFX0ZJTEUgKiApOwogICAgaW50IHdyaXRlRWxlbURp
c3BQcm9wKCBORVRGSUxFX0ZJTEUgKiApIGNvbnN0Owp9OwoKCgojIDI2ICIvc29mdHdhcmUvdGhh
bGlhL2gvc2hhcGUuaCIgMgoKIyAxICIvc29mdHdhcmUvdGhhbGlhL2gvc2hhcGVHcm91cFByb3Au
aCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpjbGFzcyBTaGFwZTsKCmNsYXNzIFNfR3JvdXBQ
cm9wCnsKICAgIE1fVmVjdG9yICAgICAgICAgX2NvbG9yOwogICAgVHdpbmUgICAgICAgICAgICBf
Z3JvdXBOYW1lOwoKcHJvdGVjdGVkOgoKcHVibGljOgogICAgaW50ICAgICAgICAgICAgICBfdmlz
aWJsZTsKICAgIFNfR3JvdXBQcm9wKCk7CiAgICBTX0dyb3VwUHJvcChjb25zdCBjaGFyICopOwog
ICAgflNfR3JvdXBQcm9wKCk7CgogICAgU19Hcm91cFByb3AgJiBvcGVyYXRvcj0oIGNvbnN0IFNf
R3JvdXBQcm9wICYpOwoKICAgICAKICAgIHZvaWQgc2V0Q29sb3IoZmxvYXQsIGZsb2F0LCBmbG9h
dCk7CiAgICB2b2lkIHNldENvbG9yKCBNX1ZlY3RvciBuZXdDb2xvcik7CiAgICB2b2lkIHNldFZp
c2libGUoU2hhcGUgJiwgaW50KTsKICAgIHZvaWQgc2V0R3JvdXBOYW1lKGNvbnN0IGNoYXIgKiAp
OwoKICAgIE1fVmVjdG9yICBnZXRDb2xvcigpOwogICAgaW50ICAgICAgIGdldFZpc2libGUoKTsK
ICAgIFR3aW5lICAgICBnZXRHcm91cE5hbWUoKTsKCiAgICAgCiAgICBpbnQgcmVhZEdyb3VwUHJv
cCggTkVURklMRV9GSUxFICpmaWxlKTsKICAgIGludCB3cml0ZUdyb3VwUHJvcCggTkVURklMRV9G
SUxFICpmaWxlKSBjb25zdDsKCn07CgoKIyAyNyAiL3NvZnR3YXJlL3RoYWxpYS9oL3NoYXBlLmgi
IDIKCgojIDEgIi9zb2Z0d2FyZS90aGFsaWEvaC90eHQuaCIgMQogCgoKCgoKCgoKCgojIDEyMSAi
L3NvZnR3YXJlL3RoYWxpYS9oL3R4dC5oIgoKIyAyOSAiL3NvZnR3YXJlL3RoYWxpYS9oL3NoYXBl
LmgiIDIKCgp0eXBlZGVmIHN0cnVjdCBfbmV0ZmlsZV9maWxlIE5FVEZJTEVfRklMRTsKdHlwZWRl
ZiBzdHJ1Y3QgR0VPTV9CSU5fSEVBREVSIEdFT01fQklOX0hFQURFUjsKCmVudW0gU0NfVmVnIHsg
dmVydGV4LCBlbGVtZW50LCBnbG9iYWwgfTsKCiAKCgoKCgoKCgojIDY0ICIvc29mdHdhcmUvdGhh
bGlhL2gvc2hhcGUuaCIKCgp0eXBlZGVmIGZwb3NfdCBzaGFwZV9mcG9zX3Q7CgoKCiMgMSAiL3Nv
ZnR3YXJlL3RoYWxpYS9oL3NoYXBlSGFpci5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCnVzaW5n
IHN0ZDo6dmVjdG9yOwoKY2xhc3MgSGFpclR5cGUKewogICAgVHdpbmUgICBfbmFtZTsKICAgIGlu
dCAgICAgX251bUNWOwoKICBwdWJsaWM6CiAgICBIYWlyVHlwZSgpOwogICAgSGFpclR5cGUoIFR3
aW5lICYsIGludCApOwogICAgSGFpclR5cGUoIGNvbnN0IGNoYXIgKiwgaW50ICk7CiAgICBIYWly
VHlwZSggY29uc3QgSGFpclR5cGUgJiApOwoKICAgIHZvaWQgICBzZXROYW1lKCBUd2luZSBuZXdO
YW1lICkgeyBfbmFtZSA9IG5ld05hbWU7IH0KICAgIGNvbnN0IFR3aW5lICZnZXROYW1lKCkgY29u
c3QgeyByZXR1cm4gX25hbWU7IH0KICAgICAgIAogICAgdm9pZCAgc2V0TnVtQ1YoIGludCBuZXdO
dW0gKSB7IF9udW1DViA9IG5ld051bTsgfQogICAgaW50ICAgZ2V0TnVtQ1YoKSBjb25zdCB7IHJl
dHVybiBfbnVtQ1Y7IH0KCiAgICBpbnQgb3BlcmF0b3IgPSggY29uc3QgSGFpclR5cGUgJnR5cGUg
KSAKICAgICAgICB7IF9uYW1lID0gdHlwZS5fbmFtZTsgX251bUNWID0gdHlwZS5fbnVtQ1Y7IHJl
dHVybiAwO30KCiAgICBpbnQgZmlsZVJlYWQoIE5FVEZJTEVfRklMRSAqICk7CiAgICBpbnQgZmls
ZVdyaXRlKCBORVRGSUxFX0ZJTEUgKiApOwp9OwoKIApjbGFzcyBIYWlyOwoKY2xhc3MgSGFpclBh
dGNoCnsKICAgIFNfR3JvdXBUYWcgICAgICBfZ3JvdXA7CiAgICBmbG9hdCAgICAgICAgICAgX2Jv
dW5kaW5nQm94WzZdOwogICAgc2hhcGVfZnBvc190ICAgIF9oYWlyRmlsZVBvczsKICAgIGludCAg
ICAgICAgICAgICBfaGFpclN0YXJ0SW5kZXg7CiAgICBpbnQgICAgICAgICAgICAgX251bUhhaXJz
OwoKICBwdWJsaWM6CiAgICBIYWlyUGF0Y2goKTsKICAgIEhhaXJQYXRjaCggY29uc3QgU19Hcm91
cFRhZyAmLCBmbG9hdFs2XSwgaW50LCBpbnQgKTsKICAgIEhhaXJQYXRjaCggY29uc3QgSGFpclBh
dGNoICYgKTsKCiAgICBzaGFwZV9mcG9zX3QgICAgICAJZ2V0SGFpclN0YXJ0RmlsZVBvcygpIHsg
cmV0dXJuIF9oYWlyRmlsZVBvczsgfQogICAgdm9pZCAgICAgICAgCXNldEhhaXJTdGFydEZpbGVQ
b3MoaW50IHZhbHVlKSB7IF9oYWlyRmlsZVBvcyA9IHZhbHVlOyB9CgogICAgaW50ICAgICAgICAg
Z2V0SGFpclN0YXJ0SW5kZXgoKSB7IHJldHVybiBfaGFpclN0YXJ0SW5kZXg7IH0KICAgIHZvaWQg
ICAgICAgIHNldEhhaXJTdGFydEluZGV4KGludCB2YWx1ZSkgeyBfaGFpclN0YXJ0SW5kZXggPSB2
YWx1ZTsgfQoKICAgIGludCAgICAgICAgIGdldE51bUhhaXJzKCkgeyByZXR1cm4gX251bUhhaXJz
OyB9CiAgICB2b2lkICAgICAgICBzZXROdW1IYWlycyhpbnQgdmFsdWUpIHsgX251bUhhaXJzID0g
dmFsdWU7IH0KCiAgICBzaGFwZV9mcG9zX3QgICAgIAlnZXRIYWlyQ3ZEYXRhT2Zmc2V0KCkgeyAg
cmV0dXJuIChfaGFpckZpbGVQb3MgLSBfaGFpclN0YXJ0SW5kZXggKiAoc2l6ZW9mKGludCkgKyBz
aXplb2YoZmxvYXQpICogMikpOyB9CiAgICBzaGFwZV9mcG9zX3QgICAgIAlnZXRIYWlyQ3ZEYXRh
T2Zmc2V0TmV4dChzaGFwZV9mcG9zX3QgbmV4dEZpbGVQb3MpIHsgIHJldHVybiAobmV4dEZpbGVQ
b3MgLSAoX2hhaXJTdGFydEluZGV4ICsgX251bUhhaXJzKSAqIChzaXplb2YoaW50KSArIHNpemVv
ZihmbG9hdCkgKiAyKSk7IH0KICAgIGludCAgICAgIAkJZ2V0SGFpckN2U3RhcnRJbmRleCgpIHsg
IHJldHVybiAoZ2V0SGFpckN2RGF0YU9mZnNldCgpLygzICogc2l6ZW9mKGZsb2F0KSkpOyB9CiAg
ICBpbnQgICAgICAJCWdldEhhaXJDdlN0YXJ0SW5kZXhOZXh0KHNoYXBlX2Zwb3NfdCBuZXh0Rmls
ZVBvcykgeyAgcmV0dXJuIChnZXRIYWlyQ3ZEYXRhT2Zmc2V0TmV4dChuZXh0RmlsZVBvcykvKDMg
KiBzaXplb2YoZmxvYXQpKSk7IH0KCiAgICBTX0dyb3VwVGFnICZncm91cCgpIHsgcmV0dXJuIF9n
cm91cDsgfQogICAgdm9pZCAgICAgICAgc2V0R3JvdXAoIFNfR3JvdXBUYWcgJmd0ICkgeyBfZ3Jv
dXAgPSBndDsgfQogICAgY29uc3QgZmxvYXQgKmdldEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1
cm4gJl9ib3VuZGluZ0JveFswXTsgfQogICAgdm9pZCAgICAgICAgc2V0Qm91bmRpbmdCb3goIGNv
bnN0IGZsb2F0ICpiYm94ICkgCiAgICAgICAgeyAgIGZvciAoIGludCBpPTA7IGk8NjsgaSsrICkg
X2JvdW5kaW5nQm94W2ldID0gYmJveFtpXTsgfQoKICAgIGludCBvcGVyYXRvciA9KCBjb25zdCBI
YWlyUGF0Y2ggJnBhdGNoICkgCiAgICAgICAgeyAgIF9ncm91cCA9IHBhdGNoLl9ncm91cDsgCiAg
ICAgICAgICAgIGZvciAoaW50IGk9MDsgaTw2OyBpKysgKSBfYm91bmRpbmdCb3hbaV0gPSBwYXRj
aC5fYm91bmRpbmdCb3hbaV07CiAgICAgICAgICAgIF9oYWlyU3RhcnRJbmRleCA9IHBhdGNoLl9o
YWlyU3RhcnRJbmRleDsgX251bUhhaXJzID0gcGF0Y2guX251bUhhaXJzOyByZXR1cm4gMDt9Cgog
ICAgaW50IGZpbGVSZWFkKCBORVRGSUxFX0ZJTEUgKiApOwogICAgaW50IGZpbGVXcml0ZSggTkVU
RklMRV9GSUxFICogKTsKCiAgICB2b2lkICBhZGRIYWlyKCBjb25zdCBIYWlyICYgKTsKfTsKCmNs
YXNzIEhhaXIKewogICAgaW50ICAgICAgICAgICAgIF9oYWlyVHlwZTsKICAgIGludCAgICAgICAg
ICAgICBfcGF0Y2g7CiAgICBpbnQgICAgICAgICAgICAgX251bUNWOwogICAgTV9WZWN0b3IyICAg
ICAgIF91djsKICAgIE1fVmVjdG9yKiAgICAgICBfY3Y7CiAgICBNX1ZlY3RvciogICAgICAgX25v
cm1hbDsKCnB1YmxpYzoKCiAgICBIYWlyKHZvaWQpOwogICAgSGFpciggaW50LCBpbnQsIE1fVmVj
dG9yMiwgaW50LCBNX1ZlY3RvciAqLCBNX1ZlY3RvciAqKTsKICAgIEhhaXIoIGNvbnN0IEhhaXIg
JiApOwogICAgfkhhaXIoKTsKCiAgICB2b2lkICAgICAgICBzZXRUeXBlIChpbnQgdHlwZSkgeyBf
aGFpclR5cGUgPSB0eXBlOyB9IAogICAgaW50ICAgICAgICAgZ2V0VHlwZSAoKSB7IHJldHVybiBf
aGFpclR5cGU7IH0KCiAgICB2b2lkICAgICAgICBzZXRQYXRjaCggaW50IG5ld1BhdGNoICkgeyBf
cGF0Y2ggPSBuZXdQYXRjaDsgfQogICAgaW50ICAgICAgICAgZ2V0UGF0Y2goKSB7IHJldHVybiBf
cGF0Y2g7IH0KCiAgICB2b2lkICAgICAgICBzZXRVViggTV9WZWN0b3IyICZuZXdVViApIHsgX3V2
ID0gbmV3VVY7IH0KICAgIGNvbnN0IE1fVmVjdG9yMiYgIGdldFVWKCkgY29uc3QgeyByZXR1cm4g
X3V2OyB9CgogICAgdm9pZCAgICAgICAgc2V0Q1YoIGNvbnN0IHZlY3RvcjxNX1ZlY3Rvcj4gJm5l
d0NWICk7CiAgICB2b2lkICAgICAgICBzZXROb3JtYWwoIGNvbnN0IHZlY3RvcjxNX1ZlY3Rvcj4g
Jm5ld05vcm0gKTsKCiAgICB2b2lkICAgICAgICBzZXRDViggaW50IG51bUNWLCBjb25zdCBNX1Zl
Y3RvciAqbmV3Q1YgKTsKICAgIHZvaWQgICAgICAgIHNldENWKCBpbnQgaW5kZXgsIE1fVmVjdG9y
JiBuZXdWYWwgKSB7IF9jdltpbmRleF0gPSBuZXdWYWw7IH0KICAgIHZvaWQgCXNldENWKCBpbnQg
aWR4LCBjb25zdCBNX1ZlY3RvciAmbmV3Q1YgKSB7IF9jdltpZHhdID0gbmV3Q1Y7IH0KCiAgICB2
b2lkIAlyZXNpemVNQiggaW50IG5zbGljZXMgKTsKCiAgICBpbnQgICAgICAgICBnZXROdW1DVigp
IGNvbnN0IHsgcmV0dXJuIF9udW1DVjsgfTsKICAgIGNvbnN0IE1fVmVjdG9yJiAgZ2V0Q1YoIGlu
dCBpbmRleCApIGNvbnN0IHsgcmV0dXJuIF9jdltpbmRleF07IH0KICAgIGNvbnN0IE1fVmVjdG9y
KiAgZ2V0Q1YoKSBjb25zdCB7cmV0dXJuIF9jdjt9CgogICAgdm9pZCAgICAgICAgc2V0Tm9ybWFs
KCBpbnQgbnVtQ1YsIGNvbnN0IE1fVmVjdG9yICpuZXdOb3JtICk7CiAgICB2b2lkICAgICAgICBz
ZXROb3JtYWwoIGludCBpbmRleCwgTV9WZWN0b3ImIG5ld1ZhbCApIHsgX25vcm1hbFtpbmRleF0g
PSBuZXdWYWw7IH0KICAgIHZvaWQgCXNldE5vcm1hbCggaW50IGlkeCwgY29uc3QgTV9WZWN0b3Ig
Jm5ld05vcm0gKSB7IF9ub3JtYWxbaWR4XSA9IG5ld05vcm07IH0KCiAgICBjb25zdCBNX1ZlY3Rv
ciYgIGdldE5vcm1hbCggaW50IGluZGV4ICkgY29uc3QgeyByZXR1cm4gX25vcm1hbFtpbmRleF07
IH0KICAgIGNvbnN0IE1fVmVjdG9yKiAgZ2V0Tm9ybWFsKCkgY29uc3Qge3JldHVybiBfbm9ybWFs
O30KCgogICAgaW50IG9wZXJhdG9yID0oIGNvbnN0IEhhaXIgJmhhaXIgKSAKICAgIHsgICAKICAg
ICAgICBfaGFpclR5cGUgPSBoYWlyLl9oYWlyVHlwZTsgCiAgICAgICAgX3BhdGNoID0gaGFpci5f
cGF0Y2g7ICAgIAogICAgICAgIF9udW1DViA9IGhhaXIuX251bUNWOwogICAgICAgIF91diA9IGhh
aXIuX3V2OwogICAgICAgIF9jdiA9IG5ldyBNX1ZlY3RvclsgX251bUNWIF07CiAgICAgICAgX25v
cm1hbCA9IG5ldyBNX1ZlY3RvclsgX251bUNWIF07CiAgICAgICAgZm9yIChpbnQgaT0wOyBpPF9u
dW1DVjsgaSsrICkgCiAgICAgICAgewogICAgICAgICAgICBfY3ZbaV0gPSBoYWlyLl9jdltpXTsK
ICAgICAgICAgICAgX25vcm1hbFtpXSA9IGhhaXIuX25vcm1hbFtpXTsKICAgICAgICB9CiAgICAg
ICAgcmV0dXJuIDA7CiAgICB9CgogICAgaW50IGZpbGVSZWFkKCBORVRGSUxFX0ZJTEUgKiwgY29u
c3QgdmVjdG9yPCBIYWlyVHlwZSA+ICYgKTsKICAgIGludCBmaWxlV3JpdGUoIE5FVEZJTEVfRklM
RSAqLCBjb25zdCB2ZWN0b3I8IEhhaXJUeXBlID4gJiApOwp9OwoKdGVtcGxhdGUgPCBjbGFzcyBU
eXBlID4KaW50IGZyZWFkKCB2ZWN0b3I8IFR5cGUgPiAgJmRhdGEsIE5FVEZJTEVfRklMRSAqZmls
ZSApCnsKICAgIGludCBpLCBzaXplLCB0b3RhbDsKICAgIFR5cGUgbmV4dDsKICAgIAogICAgdG90
YWwgPSBmcmVhZCggc2l6ZSwgZmlsZSApOwogICAgCiAgICBkYXRhLmNsZWFyKCk7CgogICAgZm9y
ICggaT0wOyBpPHNpemU7IGkrKyApCiAgICB7CiAgICAgICAgdG90YWwgKz0gZnJlYWQoIG5leHQs
IGZpbGUgKTsKICAgICAgICBkYXRhLnB1c2hfYmFjayggbmV4dCApOwogICAgfQoKICAgIHJldHVy
biB0b3RhbDsKfTsKCnRlbXBsYXRlIDwgY2xhc3MgVHlwZSA+CmludCBmd3JpdGUoIGNvbnN0IHZl
Y3RvcjwgVHlwZSA+ICZkYXRhLCBORVRGSUxFX0ZJTEUgKmZpbGUgKQp7CiAgICBpbnQgaSwgdG90
YWw7CiAgICAKICAgIHRvdGFsID0gZndyaXRlKCAoaW50KSBkYXRhLnNpemUoKSwgZmlsZSApOwoK
ICAgIGZvciAoIGk9MDsgaTxkYXRhLnNpemUoKTsgaSsrICkKICAgIHsKICAgICAgICBpbnQgdGhp
c09uZSA9IGZ3cml0ZSggZGF0YVtpXSwgZmlsZSApOwogICAgICAgIGlmICggdGhpc09uZSA8IDAg
KSByZXR1cm4gLTE7CiAgICAgICAgdG90YWwgKz0gdGhpc09uZTsKICAgIH0KCiAgICByZXR1cm4g
dG90YWw7Cn07CgoKIyA3MCAiL3NvZnR3YXJlL3RoYWxpYS9oL3NoYXBlLmgiIDIKCgppbnQgZnJl
YWQoIFNDX1ZlZyAmLCBORVRGSUxFX0ZJTEUgKiApOwppbnQgZndyaXRlKCBjb25zdCBTQ19WZWcg
JiwgTkVURklMRV9GSUxFICogKTsKCiAKc3RydWN0IFNDX1Byb3BlcnR5Q2xhc3MgewogICAgVHdp
bmUgICAgICAgbmFtZTsgICAgICAgICAgICAKICAgIFNDX1ZlZyAgICAgIHZlZzsgICAgICAgICAg
ICAgCgogICAgdm9pZCAgICAgICAgKnZhbHVlOyAgICAgICAgICAKICAgIGludCAgICAgICAgIHNp
emU7ICAgICAgICAgICAgCgogICAgIAogICAgdm9pZCAqICAgICAgKCpjb3B5KSggY29uc3Qgdm9p
ZCAqLCB2b2lkICogKTsKICAgIHZvaWQgKiAgICAgICgqcmVhZCkoIE5FVEZJTEVfRklMRSAqLCB2
b2lkICogKTsKICAgIGludCAgICAgICAgICgqd3JpdGUpKCBjb25zdCB2b2lkICosIE5FVEZJTEVf
RklMRSAqLCB2b2lkICogKTsKICAgIHZvaWQgICAgICAgICgqZnJlZSkoIHZvaWQgKiwgdm9pZCAq
ICk7CgogICAgU0NfUHJvcGVydHlDbGFzcyAgICAqbmV4dDsgICAgICAgCiAgICBzdGF0aWMgU0Nf
UHJvcGVydHlDbGFzcyAqZmlyc3Q7ICAKICAgIH07CgppbmxpbmUgY29uc3QgY2hhciAqY2xhc3NO
YW1lKCBTQ19Qcm9wZXJ0eUNsYXNzICkgeyByZXR1cm4gIlNDX1Byb3BlcnR5Q2xhc3MiOyB9OwoK
ZXh0ZXJuIHZvaWQgU0NfRGVzdHJveVByb3BlcnR5Q2xhc3Nlcyggdm9pZCApOwoKZXh0ZXJuIHZv
aWQgU0NfRGVmaW5lUHJvcGVydHlDbGFzcygKICAgICAgICBUd2luZSAgICAgICBuYW1lLCAgICAg
ICAgCiAgICAgICAgU0NfVmVnICAgICAgdmVnLCAgICAgICAgIAogICAgICAgIGNvbnN0IHZvaWQg
ICp2YWx1ZSwgICAgICAKICAgICAgICBpbnQgICAgICAgICBzaXplLCAgICAgICAgCiAgICAgICAg
dm9pZCAqICAgICAgKCpjb3B5KSggY29uc3Qgdm9pZCAqLCB2b2lkICogKSwKICAgICAgICB2b2lk
ICogICAgICAoKnJlYWQpKCBORVRGSUxFX0ZJTEUgKiwgdm9pZCAqICksCiAgICAgICAgaW50ICAg
ICAgICAgKCp3cml0ZSkoIGNvbnN0IHZvaWQgKiwgTkVURklMRV9GSUxFICosIHZvaWQgKiApLAog
ICAgICAgIHZvaWQgICAgICAgICgqZnJlZSkoIHZvaWQgKiwgdm9pZCAqICkKICAgICk7CgpzdHJ1
Y3QgU0NfUHJvcGVydHkgewogICAgdm9pZCAgICAgICAgICAgICAgICAqZ2xvYmFsOyAgICAgCiAg
ICBTQ19Qcm9wZXJ0eUNsYXNzICAgICpwQ2xhc3M7ICAgICAKICAgIFR3aW5lICAgICAgICAgICAg
ICAgbmFtZTsgICAgICAgIAogICAgc2hhcGVfZnBvc190ICAgICAgICBmaWxlUG9zOyAgICAgCiAg
ICBzaGFwZV9mcG9zX3QgICAgICAgIHByb3BTaXplOyAgICAKCiAgICBpbnQgICAgICAgICAgICAg
ICAgIGVsZW1PZmZzZXQ7ICAKICAgIGludCAgICAgICAgICAgICAgICAgdmVydE9mZnNldDsgIAog
ICAgfTsKCmlubGluZSBjb25zdCBjaGFyICpjbGFzc05hbWUoIFNDX1Byb3BlcnR5ICkgeyByZXR1
cm4gIlNDX1Byb3BlcnR5IjsgfTsKCmNsYXNzIFNfUHJvcGVydHlJRCB7CiAgICBTQ19Qcm9wZXJ0
eSAgICAgKnB0cjsgICAgCgpwdWJsaWM6CiAgICBTX1Byb3BlcnR5SUQoKTsgICAgICAgICAgCgog
ICAgaW50ICAgICBleGlzdHMoKSBjb25zdDsKICAgIFR3aW5lICAgbmFtZSgpICBjb25zdDsKICAg
IFR3aW5lICAgY2xhc3NOYW1lKCkgY29uc3Q7CiAgICAKICAgIHNoYXBlX2Zwb3NfdCAgZmlsZVBv
cygpIHsgcmV0dXJuIChwdHIgPyBwdHItPmZpbGVQb3MgOiAwKTsgfQogICAgc2hhcGVfZnBvc190
ICBwcm9wU2l6ZSgpIHsgcmV0dXJuIChwdHIgPyBwdHItPnByb3BTaXplIDogMCk7IH0KCiAgICBm
cmllbmQgU2hhcGU7CiAgICBmcmllbmQgU19FbGVtOwogICAgZnJpZW5kIFNfRWxlbVJlZjsKICAg
IH07CgppbmxpbmUgY29uc3QgY2hhciAqY2xhc3NOYW1lKCBjb25zdCBTX1Byb3BlcnR5SUQgJiAp
IHsgcmV0dXJuICJTX1Byb3BlcnR5SUQiOyB9OwoKCmNsYXNzIFNfQm91bmRpbmdCb3gKewogICAg
Qk9PTEVBTiAgCV91c2VkOwkgCiAgICBmbG9hdCAgCV9ib3hbNl07CgogcHVibGljOgoJCQlTX0Jv
dW5kaW5nQm94KHZvaWQpIHsgX3VzZWQgPSAwIDsgX2JveFswXSA9IDAuMDsgX2JveFsxXSA9IDAu
MDsgX2JveFsyXSA9IDAuMDsgX2JveFszXSA9IDAuMDsgX2JveFs0XSA9IDAuMDsgX2JveFs1XSA9
IDAuMDsgfQoKICAgIHZvaWQgCQlTZXQoZmxvYXQgeG1pbiwgZmxvYXQgeW1pbiwgZmxvYXQgem1p
biwgZmxvYXQgeG1heCwgZmxvYXQgeW1heCwgZmxvYXQgem1heCkgeyBfYm94WzBdID0geG1pbjsg
X2JveFsxXSA9IHltaW47IF9ib3hbMl0gPSB6bWluOyBfYm94WzNdID0geG1heDsgX2JveFs0XSA9
IHltYXg7IF9ib3hbNV0gPSB6bWF4OyBfdXNlZCA9IDEgOyB9CiAgICB2b2lkIAkJU2V0KGNvbnN0
IGZsb2F0ICpiKSB7IF9ib3hbMF0gPSBiWzBdOyBfYm94WzFdID0gYlsxXTsgX2JveFsyXSA9IGJb
Ml07IF9ib3hbM10gPSBiWzNdOyBfYm94WzRdID0gYls0XTsgX2JveFs1XSA9IGJbNV07IF91c2Vk
ID0gMSA7IH0KICAgIHZvaWQgCQlTZXQoY29uc3QgTV9WZWN0b3IgJm1pbiwgY29uc3QgTV9WZWN0
b3IgJm1heCkgeyBfYm94WzBdID0gbWluLng7IF9ib3hbMV0gPSBtaW4ueTsgX2JveFsyXSA9IG1p
bi56OyBfYm94WzNdID0gbWF4Lng7IF9ib3hbNF0gPSBtYXgueTsgX2JveFs1XSA9IG1heC56OyBf
dXNlZCA9IDEgOyB9CgogICAgY29uc3QgZmxvYXQgCSpHZXRCb3godm9pZCkgeyByZXR1cm4gX2Jv
eDsgfSAKICAgIE1fVmVjdG9yIAkJR2V0TWluKHZvaWQpIHsgcmV0dXJuIE1fVmVjdG9yKF9ib3hb
MF0sX2JveFsxXSxfYm94WzJdKTsgfQogICAgTV9WZWN0b3IgCQlHZXRNYXgodm9pZCkgeyByZXR1
cm4gTV9WZWN0b3IoX2JveFszXSxfYm94WzRdLF9ib3hbNV0pOyB9CgogICAgQk9PTEVBTgkJR2V0
VXNlZCh2b2lkKSB7IHJldHVybiBfdXNlZDsgfQogICAgdm9pZCAJCUFkanVzdChjb25zdCBNX1Zl
Y3RvciAmdik7Cn07CgogCgoKCgojIDEgIi9zb2Z0d2FyZS90aGFsaWEvaC9zaGFwZUxpc3QuaCIg
MQoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfbmV0ZmlsZV9maWxlIE5F
VEZJTEVfRklMRTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgpjbGFzcyBTdHJpY3RTaGFwZUxp
c3Qgewpwcm90ZWN0ZWQ6CgogICAgVHlwZSAqZGF0YTsKICAgIGludCBzejsKICAgIGludCBtYXhz
aXplOwoKICAgIHZvaWQgaW5jcmVhc2VNYXhzaXplKCk7CgogICAgU3RyaWN0U2hhcGVMaXN0KCk7
CiAgICB+U3RyaWN0U2hhcGVMaXN0KCk7CiAgICBTdHJpY3RTaGFwZUxpc3QoIGNvbnN0IFN0cmlj
dFNoYXBlTGlzdCAmICk7CiAgICBTdHJpY3RTaGFwZUxpc3QoIGNvbnN0IFR5cGUgJiApOwoKICAg
IFN0cmljdFNoYXBlTGlzdCYgb3BlcmF0b3I9KCBjb25zdCBTdHJpY3RTaGFwZUxpc3QmICk7Cgog
ICAgaW5saW5lIFR5cGUgJiBzdWIoIGludCB3aGljaCApIHsgcmV0dXJuIGRhdGFbd2hpY2hdOyB9
OwogICAgVHlwZSAmIExhc3QoKTsKCiAgICBTdHJpY3RTaGFwZUxpc3QmIGFwcGVuZCggY29uc3Qg
VHlwZSAmICk7CiAgICBTdHJpY3RTaGFwZUxpc3QmIGFwcGVuZCggY29uc3QgU3RyaWN0U2hhcGVM
aXN0ICYgKTsKICAgIFN0cmljdFNoYXBlTGlzdCYgcmVtb3ZlKCBpbnQgKTsKICAgIFN0cmljdFNo
YXBlTGlzdCYgcmVtb3ZlTGFzdCgpOwogICAgU3RyaWN0U2hhcGVMaXN0JiByZW1vdmVBbGwoKTsg
ICAgICAgICAgICAgICAgICAgIAogICAgU3RyaWN0U2hhcGVMaXN0JiBpbnNlcnQoIGNvbnN0IFR5
cGUgJiwgaW50ICk7CnB1YmxpYzoKCgogICAgZnJpZW5kIGludCBmd3JpdGU8PigKICAgICAgICBj
b25zdCBTdHJpY3RTaGFwZUxpc3Q8VHlwZT4gICAgICYgZGF0YSwgTkVURklMRV9GSUxFICogZnAp
OwoKICAgIGZyaWVuZCBpbnQgZnJlYWQ8PigKICAgICAgICBTdHJpY3RTaGFwZUxpc3Q8VHlwZT4g
ICAgICAgICAgICYgZGF0YSwgTkVURklMRV9GSUxFICogZnAKICAgICk7CgoKCgoKCgoKCiAgICBj
b25zdCBUeXBlICYgb3BlcmF0b3JbXSggaW50ICkgY29uc3Q7CiAgICBjb25zdCBUeXBlICYgbGFz
dCgpIGNvbnN0OwoKICAgIGludCBzaXplKCkgY29uc3Qge3JldHVybiBzejsgfTsKCiAgICBjb25z
dCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBMaXN0PFR5cGU+
ICYgKCkgY29uc3Q7ICAgICAgICAgICAgCgogICAgZnJpZW5kIGNsYXNzIFNoYXBlOwogICAgfTsK
CnRlbXBsYXRlIDxjbGFzcyBUeXBlPgpjbGFzcyBTaGFwZUxpc3QgOiBwdWJsaWMgU3RyaWN0U2hh
cGVMaXN0PFR5cGU+IHsKcHVibGljOgogICAgaW5saW5lIFR5cGUgJiBvcGVyYXRvcltdKCBpbnQg
d2hpY2ggKSB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnN1Yiggd2hpY2ggKTsKICAgICAgICB9OwoK
ICAgIGlubGluZSBUeXBlICYgbGFzdCgpIHsKICAgICAgICByZXR1cm4gdGhpcy0+TGFzdCgpOwog
ICAgICAgIH07CiAgICB9OwogICAgCgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KaW50IGxpc3RDb21w
YXJlKCBjb25zdCBTdHJpY3RTaGFwZUxpc3Q8VHlwZT4gKmUxLCBjb25zdCBTdHJpY3RTaGFwZUxp
c3Q8VHlwZT4gKmUyKTsKCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgp2b2lkIHFzb3J0KCBTdHJpY3RT
aGFwZUxpc3Q8VHlwZT4mIGxpc3QpOwoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+ClR5cGUgKmJzZWFy
Y2goIGNvbnN0IFR5cGUgKmtleSwgU3RyaWN0U2hhcGVMaXN0PFR5cGU+JiBsaXN0KTsKCgp0ZW1w
bGF0ZSA8Y2xhc3MgVHlwZT4KY29uc3QgY2hhciAqY2xhc3NOYW1lKCBjb25zdCBTdHJpY3RTaGFw
ZUxpc3Q8VHlwZT4gJiApOwoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+CiAgICBpbnQgZndyaXRlKAog
ICAgICAgIGNvbnN0IFN0cmljdFNoYXBlTGlzdDxUeXBlPiAgICAgJiBkYXRhLAogICAgICAgIE5F
VEZJTEVfRklMRSAgICAgICAgICAgICAgICAgICAgKiBmcAogICAgKTsKCnRlbXBsYXRlIDxjbGFz
cyBUeXBlPgogICAgaW50IGZyZWFkKAogICAgICAgIFN0cmljdFNoYXBlTGlzdDxUeXBlPiAgICAg
ICAgICAgJiBkYXRhLAogICAgICAgIE5FVEZJTEVfRklMRSAgICAgICAgICAgICAgICAgICAgKiBm
cAogICAgKTsKCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgogICAgaW50IGZ3cml0ZSgKICAgICAgICBj
b25zdCBMaXN0PFR5cGU+CSAgICAgJiBkYXRhLAogICAgICAgIE5FVEZJTEVfRklMRSAgICAgICAg
ICAgICAgICAgICAgKiBmcAogICAgKTsKCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgogICAgaW50IGZy
ZWFkKAogICAgICAgIExpc3Q8VHlwZT4JICAgICAgICAgICAmIGRhdGEsCiAgICAgICAgTkVURklM
RV9GSUxFICAgICAgICAgICAgICAgICAgICAqIGZwCiAgICApOwoKCiMgMSAiL3NvZnR3YXJlL3Ro
YWxpYS9oL3NoYXBlTGlzdC5jIiAxCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvc29m
dHdhcmUvdGhhbGlhL2gvc2hhcGVMaXN0LmgiIDEKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIyAxMzkg
Ii9zb2Z0d2FyZS90aGFsaWEvaC9zaGFwZUxpc3QuaCIKCiMgMjYgIi9zb2Z0d2FyZS90aGFsaWEv
aC9zaGFwZUxpc3QuYyIgMgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KU3RyaWN0U2hhcGVMaXN0
PFR5cGU+OjpTdHJpY3RTaGFwZUxpc3QoKSB7CiAgICBkYXRhID0gX19udWxsIDsKICAgIG1heHNp
emUgPSBzeiA9IDA7CiAgICB9CgoMCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdGVtcGxhdGUgPGNs
YXNzIFR5cGU+CmNvbnN0IGNoYXIgKiBTdHJpY3RTaGFwZUxpc3Q8VHlwZT46OmNsYXNzTmFtZSgp
IGNvbnN0IHsKICAgIHN0YXRpYyBjaGFyICpuYW1lID0gMDsKCiAgICBpZiAobmFtZSA9PSAwKSB7
CiAgICAgICAgbmFtZSA9IG5ldyBjaGFyWyBzdHJsZW4oIDo6Y2xhc3NOYW1lKGRhdGFbMF0pICkg
KyAyM107CiAgICAgICAgc3ByaW50ZiggbmFtZSwgIlN0cmljdFNoYXBlTGlzdDwlcz4iLCA6OmNs
YXNzTmFtZShkYXRhWzBdKSApOwogICAgICAgIH0KCiAgICByZXR1cm4gbmFtZTsKICAgIH0KCnRl
bXBsYXRlIDxjbGFzcyBUeXBlPgpTdHJpY3RTaGFwZUxpc3Q8VHlwZT46On5TdHJpY3RTaGFwZUxp
c3QoKSB7CiAgICBpZiAoZGF0YSkgZGVsZXRlIFtdIGRhdGE7CiAgICB9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgVHlwZT4KU3RyaWN0U2hhcGVMaXN0PFR5cGU+OjpTdHJpY3RTaGFwZUxpc3QoIGNvbnN0IFN0
cmljdFNoYXBlTGlzdDxUeXBlPiYgb2xkKSB7CiAgICBpbnQgaTsKCiAgICBpZiAob2xkLm1heHNp
emUpIHsKICAgICAgICBpZiAoKGRhdGEgPSBuZXcgVHlwZVtvbGQubWF4c2l6ZV0pID09IF9fbnVs
bCApIHsKICAgICAgICAgICAgVFhUX1NyY0ZpbGUgICA9ICIvc29mdHdhcmUvdGhhbGlhL2gvc2hh
cGVMaXN0LmMiLCBUWFRfU3JjTGluZSAgID0gODEsIFRYVF9PdXRwdXQgKCAic2hhcGU6U1RSSUNU
U0hBUEVMSVNUX09VVCIsCiAgICAgICAgICAgICJTdHJpY3RTaGFwZUxpc3Q8IiwgOjpjbGFzc05h
bWUoZGF0YVswXSksICI+IiApOwogICAgICAgICAgICBzeiA9IDA7CiAgICAgICAgICAgIG1heHNp
emUgPSAwOyAgICAKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgZWxzZSBkYXRhID0gX19udWxsIDsKCiAgICBtYXhzaXplID0gb2xkLm1heHNpemU7CiAgICBz
eiA9IG9sZC5zejsKICAgIGZvciggaSA9IDAgOyBpIDwgc3ogOyBpKyspCiAgICAgICAgZGF0YVtp
XSA9IG9sZC5kYXRhW2ldOwogICAgfQoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+ClN0cmljdFNoYXBl
TGlzdDxUeXBlPiYgU3RyaWN0U2hhcGVMaXN0PFR5cGU+OjpvcGVyYXRvcj0oIGNvbnN0IFN0cmlj
dFNoYXBlTGlzdDxUeXBlPiYgb2xkKSB7CiAgICBpbnQgaTsKCiAgICBpZiAoZGF0YSkgZGVsZXRl
IFtdIGRhdGE7CgogICAgaWYgKG9sZC5tYXhzaXplKSB7CiAgICAgICAgaWYgKChkYXRhID0gbmV3
IFR5cGVbb2xkLm1heHNpemVdKSA9PSBfX251bGwgKSB7CiAgICAgICAgICAgIFRYVF9TcmNGaWxl
ICAgPSAiL3NvZnR3YXJlL3RoYWxpYS9oL3NoYXBlTGlzdC5jIiwgVFhUX1NyY0xpbmUgICA9IDEw
NCwgVFhUX091dHB1dCAoICJzaGFwZTpTVFJJQ1RTSEFQRUxJU1RfQ0FOJ1QiCiAgICAgICAgICAg
ICAgICAiU3RyaWN0U2hhcGVMaXN0PCIsIDo6Y2xhc3NOYW1lKGRhdGFbMF0pLCAiPjo6PSIgKTsK
ICAgICAgICAgICAgc3ogPSAwOwogICAgICAgICAgICBtYXhzaXplID0gMDsKICAgICAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgZWxzZSBkYXRhID0gX19u
dWxsIDsKCiAgICBtYXhzaXplID0gb2xkLm1heHNpemU7CiAgICBzeiA9IG9sZC5zejsKICAgIGZv
ciggaSA9IDAgOyBpIDwgc3ogOyBpKyspCiAgICAgICAgZGF0YVtpXSA9IG9sZC5kYXRhW2ldOwog
ICAgCiAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KY29uc3Qg
VHlwZSAmIFN0cmljdFNoYXBlTGlzdDxUeXBlPjo6b3BlcmF0b3JbXSggaW50IHdoaWNoKSBjb25z
dCB7CiAgICBpZiAod2hpY2ggPCAwIHx8IHdoaWNoID49IHN6KSByZXR1cm4gZGF0YVswXTsKCiAg
ICByZXR1cm4gZGF0YVt3aGljaF07CiAgICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KY29uc3Qg
VHlwZSAmIFN0cmljdFNoYXBlTGlzdDxUeXBlPjo6bGFzdCgpIGNvbnN0IHsKICAgIHJldHVybiBk
YXRhW3N6LTFdOwogICAgfQoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+ClR5cGUgJiBTdHJpY3RTaGFw
ZUxpc3Q8VHlwZT46Okxhc3QoKSB7CiAgICByZXR1cm4gZGF0YVtzei0xXTsKICAgIH0KCgwKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+ClN0cmljdFNoYXBlTGlz
dDxUeXBlPiYgU3RyaWN0U2hhcGVMaXN0PFR5cGU+OjphcHBlbmQoIGNvbnN0IFR5cGUmIGEpIHsK
ICAgIGludCBpOwogICAgaW50IG9sZF9tYXhzaXplID0gbWF4c2l6ZTsKICAgIFR5cGUgKm9sZERh
dGEgPSAwOwogICAgaWYgKHN6ID09IG1heHNpemUpIHsKICAgICAgICBpbmNyZWFzZU1heHNpemUo
KTsKCiAgICAgICAgVHlwZSAqbmV3RGF0YSA9IG5ldyBUeXBlWyBtYXhzaXplXTsKCiAgICAgICAg
aWYgKG5ld0RhdGEgPT0gX19udWxsICkgewogICAgICAgICAgICBUWFRfU3JjRmlsZSAgID0gIi9z
b2Z0d2FyZS90aGFsaWEvaC9zaGFwZUxpc3QuYyIsIFRYVF9TcmNMaW5lICAgPSAxNzMsIFRYVF9P
dXRwdXQgKCAic2hhcGU6U1RSSUNUU0hBUEVMSVNUX0NBTidUIiwKICAgICAgICAgICAgICAgICJT
dHJpY3RTaGFwZUxpc3Q8IiwgOjpjbGFzc05hbWUoZGF0YVswXSksICI+OjphcHBlbmQiICk7CiAg
ICAgICAgICAgIG1heHNpemUgPSBvbGRfbWF4c2l6ZTsKICAgICAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgICAgICAgICB9CiAgICAgICAgZm9yKCBpID0gMCA7IGkgPCBzeiA7IGkrKykKICAgICAg
ICAgICAgbmV3RGF0YVtpXSA9IGRhdGFbaV07CiAgICAgICAgaWYgKGRhdGEpIG9sZERhdGEgPSBk
YXRhOwogICAgICAgIGRhdGEgPSBuZXdEYXRhOwogICAgICAgIH0gZGF0YVtzel0gPSBhOyBzeisr
OwogICAgaWYgKCBvbGREYXRhICkgZGVsZXRlIFtdIG9sZERhdGE7CiAgICByZXR1cm4gKnRoaXM7
CiAgICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KU3RyaWN0U2hhcGVMaXN0PFR5cGU+OjpTdHJp
Y3RTaGFwZUxpc3QoIGNvbnN0IFR5cGUmIGEpIHsKICAgIG1heHNpemUgPSAxOwogICAgZGF0YSA9
IG5ldyBUeXBlWyBtYXhzaXplXTsKCiAgICBpZiAoZGF0YSA9PSBfX251bGwgKSB7CiAgICAgICAg
VFhUX1NyY0ZpbGUgICA9ICIvc29mdHdhcmUvdGhhbGlhL2gvc2hhcGVMaXN0LmMiLCBUWFRfU3Jj
TGluZSAgID0gMTkzLCBUWFRfT3V0cHV0ICggInNoYXBlOlNUUklDVFNIQVBFTElTVF9DQU4nVF9B
RERSRVNTIiwKICAgICAgICAgICAgIlN0cmljdFNoYXBlTGlzdDwiLCA6OmNsYXNzTmFtZShkYXRh
WzBdKSwKICAgICAgICAgICAgIj4oIGNvbnN0ICIsIDo6Y2xhc3NOYW1lKGRhdGFbMF0pLCAiICYg
KSIgKTsKICAgICAgICBzeiA9IDA7CiAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIGRhdGFb
MF0gPSBhOwogICAgc3ogPSAxOwogICAgfQoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+CnZvaWQgU3Ry
aWN0U2hhcGVMaXN0PFR5cGU+OjppbmNyZWFzZU1heHNpemUoKSB7CiAgICBpZiAobWF4c2l6ZSA9
PSAwKSAgICAgICAgICAgbWF4c2l6ZSA9IDE7CiAgICBlbHNlIGlmIChtYXhzaXplID09IDEpICAg
ICAgbWF4c2l6ZSA9IDI7CiAgICBlbHNlIGlmIChtYXhzaXplIDwgOCkgICAgICAgbWF4c2l6ZSA9
IDg7CiAgICBlbHNlIGlmIChtYXhzaXplIDwgNjU1MzYpICAgbWF4c2l6ZSAqPSAyOwogICAgZWxz
ZSAgICAgICAgICAgICAgICAgICAgICAgIG1heHNpemUgKz0gNjU1MzY7CiAgICB9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgVHlwZT4KU3RyaWN0U2hhcGVMaXN0PFR5cGU+JiBTdHJpY3RTaGFwZUxpc3Q8VHlw
ZT46OmFwcGVuZCggY29uc3QgU3RyaWN0U2hhcGVMaXN0PFR5cGU+ICYgYSkgewogICAgaW50IGk7
CiAgICBpbnQgb2xkX21heHNpemUgPSBtYXhzaXplOwoKICAgIGlmIChtYXhzaXplIDw9ICggc3og
KyBhLnN6KSkgewogICAgICAgIHdoaWxlKCBtYXhzaXplIDwgKHN6ICsgYS5zeikpIGluY3JlYXNl
TWF4c2l6ZSgpOwoKICAgICAgICBUeXBlICpuZXdEYXRhID0gbmV3IFR5cGVbIG1heHNpemVdOwoK
ICAgICAgICBpZiAobmV3RGF0YSA9PSBfX251bGwgKSB7CiAgICAgICAgICAgIFRYVF9TcmNGaWxl
ICAgPSAiL3NvZnR3YXJlL3RoYWxpYS9oL3NoYXBlTGlzdC5jIiwgVFhUX1NyY0xpbmUgICA9IDIy
MywgVFhUX091dHB1dCAoICJzaGFwZTpTVFJJQ1RTSEFQRUxJU1RfQ0FOJ1QiLCAKICAgICAgICAg
ICAgICAgICJTdHJpY3RTaGFwZUxpc3Q8IiwgOjpjbGFzc05hbWUoZGF0YVswXSksICI+OjphcHBl
bmQoKSIgKTsKICAgICAgICAgICAgbWF4c2l6ZSA9IG9sZF9tYXhzaXplOwogICAgICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICAgICAgICAgIH0KICAgICAgICBmb3IoIGkgPSAwIDsgaSA8IHN6IDsg
aSsrKQogICAgICAgICAgICBuZXdEYXRhW2ldID0gZGF0YVtpXTsKICAgICAgICBpZiAoZGF0YSkg
ZGVsZXRlIFtdIGRhdGE7CiAgICAgICAgZGF0YSA9IG5ld0RhdGE7CiAgICAgICAgfQoKICAgIGZv
ciggaSA9IDAgOyBpIDwgYS5zeiA7IGkrKykKICAgICAgICBkYXRhW3N6ICsgaV0gPSBhLmRhdGFb
aV07CiAgICBzeiArPSBhLnN6OwoKICAgIHJldHVybiAqdGhpczsKICAgIH0KCgwKIAoKCgoKCgoK
CgoKCgoKCgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KU3RyaWN0U2hhcGVMaXN0PFR5cGU+
JiBTdHJpY3RTaGFwZUxpc3Q8VHlwZT46OnJlbW92ZSggaW50IHdoaWNoKSB7CiAgICBpbnQgaTsK
CiAgICBpZiAod2hpY2ggPCAwIHx8IHdoaWNoID49IHN6KSB7CiAgICAgICAgVFhUX1NyY0ZpbGUg
ICA9ICIvc29mdHdhcmUvdGhhbGlhL2gvc2hhcGVMaXN0LmMiLCBUWFRfU3JjTGluZSAgID0gMjY5
LCBUWFRfT3V0cHV0ICggInNoYXBlOlNUUklDVFNIQVBFTElTVF9ERUxFVEVfRU5EIiwKICAgICAg
ICAgICAgIlN0cmljdFNoYXBlTGlzdDwiLCA6OmNsYXNzTmFtZShkYXRhWzBdKSwgIj46OnJlbW92
ZSgpIiApOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgogICAgZm9yKCBpID0gd2hp
Y2ggOyBpIDwgc3otMSA7IGkrKykKICAgICAgICBkYXRhW2ldID0gZGF0YVtpKzFdOwoKICAgIHN6
LS07CiAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KU3RyaWN0
U2hhcGVMaXN0PFR5cGU+JiBTdHJpY3RTaGFwZUxpc3Q8VHlwZT46OnJlbW92ZUxhc3QoKSB7CiAg
ICBpZiAoIHN6ICkgewogICAgICAgIHN6LS07CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAg
IH0KCiAgICBUWFRfU3JjRmlsZSAgID0gIi9zb2Z0d2FyZS90aGFsaWEvaC9zaGFwZUxpc3QuYyIs
IFRYVF9TcmNMaW5lICAgPSAyODgsIFRYVF9PdXRwdXQgKCAic2hhcGU6U1RSSUNUU0hBUEVMSVNU
X0VNUFRZIiwKICAgICAgICAiU3RyaWN0U2hhcGVMaXN0PCIsIDo6Y2xhc3NOYW1lKCBkYXRhWzBd
ICksICI+OjpyZW1vdmVMYXN0KCkiICk7CgogICAgcmV0dXJuICp0aGlzOwogICAgfQoKdGVtcGxh
dGUgPGNsYXNzIFR5cGU+ClN0cmljdFNoYXBlTGlzdDxUeXBlPiYgU3RyaWN0U2hhcGVMaXN0PFR5
cGU+OjpyZW1vdmVBbGwoKSB7CiAgICBzeiA9IDA7CiAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KU3RyaWN0U2hhcGVMaXN0PFR5cGU+JiBTdHJpY3RTaGFwZUxp
c3Q8VHlwZT46Omluc2VydCggY29uc3QgVHlwZSAmdmFsLCBpbnQgd2hpY2ggKSB7CiAgICBpbnQg
aTsKCiAgICBpZiAoIHdoaWNoIDwgMCB8fCB3aGljaCA+IHN6KSB7CiAgICAgICAgVFhUX1NyY0Zp
bGUgICA9ICIvc29mdHdhcmUvdGhhbGlhL2gvc2hhcGVMaXN0LmMiLCBUWFRfU3JjTGluZSAgID0g
MzA1LCBUWFRfT3V0cHV0ICggInNoYXBlOlNUUklDVFNIQVBFTElTVF9BRERfRU5EIiwKICAgICAg
ICAgICAgIlN0cmljdFNoYXBlTGlzdDwiLCA6OmNsYXNzTmFtZSggZGF0YVswXSApLCAiPjo6aW5z
ZXJ0KCkiICk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICB0aGlzLT5hcHBl
bmQoIHZhbCApOyAgICAgCgoKICAgIGZvciggaSA9IHN6IC0gMiA7IGkgPj0gd2hpY2ggOyBpLS0g
KQogICAgICAgIGRhdGFbIGkgKyAxIF0gPSBkYXRhWyBpIF07CgogICAgZGF0YVsgd2hpY2ggXSA9
IHZhbDsKICAgIHJldHVybiAqdGhpczsKICAgIH0KCgwKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4Kdm9pZCBxc29ydCggU3RyaWN0U2hhcGVMaXN0PFR5cGU+ICZs
aXN0KSB7CiAgICBpbnQgbGlzdENvbXBhcmUoIGNvbnN0IFN0cmljdFNoYXBlTGlzdDxUeXBlPiAq
ZTEsIGNvbnN0IFN0cmljdFNoYXBlTGlzdDxUeXBlPiAqZTIpOwoKICAgIHFzb3J0KCAodm9pZCAq
KSAmKGxpc3RbMF0pLCBsaXN0LnNpemUoKSwgc2l6ZW9mKCBUeXBlKSwgCiAgICAgICAgICAgKGlu
dCAoKikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKSBsaXN0Q29tcGFyZSk7CgogICAgfQoK
dGVtcGxhdGUgPGNsYXNzIFR5cGU+ClR5cGUgKmJzZWFyY2goIGNvbnN0IFR5cGUgKmtleSwgU3Ry
aWN0U2hhcGVMaXN0PFR5cGU+ICZsaXN0KSB7CiAgICBpbnQgbGlzdENvbXBhcmUoIGNvbnN0IFN0
cmljdFNoYXBlTGlzdDxUeXBlPiAqZTEsIGNvbnN0IFN0cmljdFNoYXBlTGlzdDxUeXBlPiAqZTIp
OwoKICAgIGlmICggbGlzdC5zaXplKCkgPT0gMCApCiAgICAgICAgcmV0dXJuKCBfX251bGwgKTsK
CiAgICByZXR1cm4oIChUeXBlICopCiAgICAgICAgICAgIDo6YnNlYXJjaCggKGNvbnN0IHZvaWQg
Kikga2V5LCAoY29uc3Qgdm9pZCAqKSAmKGxpc3RbMF0pLCAKICAgICAgICAgICAgICAgICAgICAg
ICBsaXN0LnNpemUoKSwgc2l6ZW9mKCBUeXBlKSwgCiAgICAgICAgICAgICAgICAgICAgICAgKGlu
dCAoKikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKSBsaXN0Q29tcGFyZSkgKTsKICAgIH0K
CnRlbXBsYXRlIDxjbGFzcyBUeXBlPgppbnQgbGlzdENvbXBhcmUoIGNvbnN0IFN0cmljdFNoYXBl
TGlzdDxUeXBlPiAqZTEsIGNvbnN0IFN0cmljdFNoYXBlTGlzdDxUeXBlPiAqZTIpIHsKICAgICAg
ICBUeXBlICAgICp0ZTEsICp0ZTI7CgogICAgICAgIHRlMSA9IChUeXBlICopIGUxOwogICAgICAg
IHRlMiA9IChUeXBlICopIGUyOwoKICAgICAgICBpZiAoICp0ZTEgPCAqdGUyICkKICAgICAgICAg
ICAgcmV0dXJuIC0xOwogICAgICAgIGVsc2UgaWYgKCAqdGUxID4gKnRlMiApCiAgICAgICAgICAg
IHJldHVybiAxOwogICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICB9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgVHlwZT4KY29uc3QgY2hhciAqY2xhc3NOYW1lKCBjb25zdCBTdHJpY3RTaGFw
ZUxpc3Q8VHlwZT4gJiApIHsKICAgIGNoYXIgKmJ1ZiA9IG5ldyBjaGFyWzEwMDBdOyAgICAgIAog
ICAgVHlwZSBmb287CiAgICBzcHJpbnRmKCBidWYsICJTdHJpY3RTaGFwZUxpc3Q8JXM+IiwgY2xh
c3NOYW1lKCBmb28gKSApOwogICAgcmV0dXJuIGJ1ZjsKICAgIH07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
VHlwZT4KaW50IGZ3cml0ZSgKICAgICAgICBjb25zdCBTdHJpY3RTaGFwZUxpc3Q8VHlwZT4gICAg
JmRhdGEsCiAgICAgICAgTkVURklMRV9GSUxFICAgICAgICAqZnAKICAgICkKewogICAgaW50ICAg
ICBpLCB0b3RhbDsKCiAgICB0b3RhbCA9IGZ3cml0ZSggZGF0YS5zaXplKCksIGZwKTsKCiAgICBm
b3IgKCBpID0gMDsgaSA8IGRhdGEuc2l6ZSgpOyBpKysgKSB7CiAgICAgICAgaW50IHRoaXNPbmUg
PSBmd3JpdGUoIGRhdGFbaV0sIGZwICk7CiAgICAgICAgaWYgKCB0aGlzT25lIDwgMCApIHJldHVy
biAtMTsKICAgICAgICB0b3RhbCArPSB0aGlzT25lOwogICAgICAgIH0KCiAgICByZXR1cm4oIHRv
dGFsKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+CmludCBmcmVhZCgKICAgICAgICBTdHJpY3RT
aGFwZUxpc3Q8VHlwZT4gICAgICAmZGF0YSwKICAgICAgICBORVRGSUxFX0ZJTEUgICAgKmZpbGUK
ICAgICkKewppbnQgICAgIGksIHNpemUsIHRvdGFsOwpUeXBlICAgIG5leHQ7CgogICAgdG90YWwg
PSBmcmVhZCggc2l6ZSwgZmlsZSk7CgogICAgZGF0YS5yZW1vdmVBbGwoKTsKICAgIGZvciAoIGkg
PSAwOyBpIDwgc2l6ZTsgaSsrICkgewogICAgICAgIHRvdGFsICs9IGZyZWFkKCBuZXh0LCBmaWxl
ICk7CiAgICAgICAgZGF0YS5hcHBlbmQoIG5leHQpOwogICAgICAgIH0KCiAgICByZXR1cm4gdG90
YWw7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgpTdHJpY3RTaGFwZUxpc3Q8VHlwZT46Om9wZXJh
dG9yIGNvbnN0IExpc3Q8VHlwZT4gJiAoCiAgICAgICAgdm9pZAogICAgKSBjb25zdAp7CiAgICAg
CiAgICByZXR1cm4gKihMaXN0PFR5cGU+KikgdGhpczsKICAgIH0KIyAxMzYgIi9zb2Z0d2FyZS90
aGFsaWEvaC9zaGFwZUxpc3QuaCIgMgoKCgoKIyAxNjcgIi9zb2Z0d2FyZS90aGFsaWEvaC9zaGFw
ZS5oIiAyCgoKIAoKCmNsYXNzIFNoYXBlIHsKICAgIGludCAgICAgICAgICAgICAgICAgdmVyc2lv
bjsKICAgIFNfRWxlbUNoYWluICAgICAgICAgZWxlbXM7CiAgICBMaXN0PFNDX1Byb3BlcnR5ICo+
IGNvcmVQcm9wczsKICAgIExpc3Q8U0NfUHJvcGVydHkgKj4gZGVsZXRlZFByb3BzOwogICAgTGlz
dDxTX0dyb3VwUHJvcCAgPiBncm91cFByb3A7CgogICAgU19FbGVtICAgICAgICAgICAgICBkZWZh
dWx0RWxlbTsKCiAgICBpbnQgICAgICAgICAgICAgICAgIG5leHRFbGVtT2Zmc2V0OwogICAgaW50
ICAgICAgICAgICAgICAgICBuZXh0VmVydE9mZnNldDsKCiAgICBpbnQgICAgICAgICAgICAgICAg
IGdldENvcmVQcm9wSW5kZXgoIGNvbnN0IFR3aW5lICYsIGNvbnN0IFR3aW5lICYgKTsKICAgIE5F
VEZJTEVfRklMRSAgICAgICAqZmlsZVB0cjsgICAgIAogICAgc2hhcGVfZnBvc190ICAgICAgICBm
aWxlUHRyU3RhcnQ7CgogICAgIAoKCiAgICBpbnQgICAgICAgICByZWFkQXNTaHAoIE5FVEZJTEVf
RklMRSAqICk7CiAgICBpbnQgICAgICAgICB3cml0ZUFzU2hwKCBORVRGSUxFX0ZJTEUgKiApOwoK
ICAgIGludCAgICAgICAgIHJlYWRBc1NocCggTkVURklMRV9GSUxFICosIGludCApOwogICAgaW50
ICAgICAgICAgd3JpdGVBc1NocCggTkVURklMRV9GSUxFICosIGludCApOwogICAgdm9pZCAgICAg
ICAgd3JpdGVFbGVtZW50cyggTkVURklMRV9GSUxFICosIGNvbnN0IHNoYXBlX2Zwb3NfdCAmICk7
CgogICAgIAogICAgaW50ICAgICAgICAgcmVhZEFzT2JqKCBORVRGSUxFX0ZJTEUgKiApOwogICAg
aW50ICAgICAgICAgcmVhZEFzT2JuKCBORVRGSUxFX0ZJTEUgKiwgY29uc3QgR0VPTV9CSU5fSEVB
REVSICYgKTsKICAgIGludCAgICAgICAgIHdyaXRlQXNPYmooIE5FVEZJTEVfRklMRSAqICk7CiAg
ICBpbnQgICAgICAgICB3cml0ZUFzT2JuKCBORVRGSUxFX0ZJTEUgKiApOwoKICAgIGludCAgICAg
ICAgIHJlYWRIZWFkZXIoIE5FVEZJTEVfRklMRSAqLCBTVERfRklMRV9IRUFERVIgJiwgR0VPTV9C
SU5fSEVBREVSICYgKTsKICAgIGludCAgICAgICAgIHdyaXRlSGVhZGVyKCBORVRGSUxFX0ZJTEUg
KiwgU1REX0ZJTEVfSEVBREVSICYsIEdFT01fQklOX0hFQURFUiAmLCAKICAgICAgICAgICAgICAg
ICAgICBpbnQgdmVyc2lvbiA9IDkgKTsKCiAgICAgCiAgICBzaGFwZV9mcG9zX3QgZ2V0SGFpclBy
b3BTaXplRmlsZVBvcygpOwogICAgc2hhcGVfZnBvc190IGdldEZpcnN0SGFpckZpbGVQb3MoKTsK
ICAgIHNoYXBlX2Zwb3NfdCBnZXRUd2luZVNpemUoY29uc3QgY2hhciAqKTsKICAgIGludCAgICAg
ICAgIHN5bmNIYWlyKCk7CiAgICBpbnQgICAgICAgICBzeW5jSGFpckluZGljZXMoKTsKICAgIGlu
dCAgICAgICAgIHN5bmNIYWlyR3JvdXAoIGNvbnN0IFR3aW5lICYgKTsKICAgIGludCAgICAgICAg
IHJlYWRBbGxIYWlyKCBORVRGSUxFX0ZJTEUgKik7CiAgICBpbnQgICAgICAgICB3cml0ZUFsbEhh
aXIoIE5FVEZJTEVfRklMRSAqKTsKICAgIGludCAgICAgICAgIHJlYWRIYWlyR3JvdXAoIE5FVEZJ
TEVfRklMRSAqLCBjb25zdCBUd2luZSAmICk7CiAgICB2b2lkICogICAgICByZWFkSGFpclBhdGNo
ZXNGcm9tR3JvdXAoIE5FVEZJTEVfRklMRSAqLCBpbnQgKTsKICAgIHZvaWQgKiAgICAgIHJlYWRI
YWlyc0Zyb21QYXRjaGVzKCAKICAgICAgICAgICAgICAgICAgICBORVRGSUxFX0ZJTEUgKiwgdmVj
dG9yPCBIYWlyVHlwZSA+ICosCiAgICAgICAgICAgICAgICAgICAgdmVjdG9yPCBIYWlyUGF0Y2gg
PiAqICk7CiAgICBpbnQgICAgICAgICB3cml0ZUhhaXJHcm91cCggTkVURklMRV9GSUxFICosIGNv
bnN0IFR3aW5lICYgKTsKICAgIGludCAgICAgICAgIHdyaXRlSGFpcnNGcm9tUGF0Y2hlcyggCiAg
ICAgICAgICAgICAgICAgICAgdmVjdG9yPCBIYWlyVHlwZSA+ICosIHZlY3RvcjwgSGFpclBhdGNo
ID4gKiwgCiAgICAgICAgICAgICAgICAgICAgdmVjdG9yPCBIYWlyID4gKiwgdmVjdG9yPCBpbnQg
PiAmLCBORVRGSUxFX0ZJTEUgKiwgaW50ICk7CiAgICBpbnQgICAgICAgICB3cml0ZUhhaXJQYXRj
aGVzRnJvbUdyb3VwKCAKICAgICAgICAgICAgICAgICAgICB2ZWN0b3I8IEhhaXJQYXRjaCA+ICos
IHZlY3RvcjwgaW50ID4gJiwgTkVURklMRV9GSUxFICosIGludCApOwogICAgaW50ICAgICAgICAg
cmVhZEhhaXJQYXRjaCggTkVURklMRV9GSUxFICosIGludCApOwogICAgaW50ICAgICAgICAgd3Jp
dGVIYWlyUGF0Y2goIE5FVEZJTEVfRklMRSAqLCBpbnQgKTsKCiAgICAgCiAgICAgCiAgICAgCiAg
ICBORVRGSUxFX0ZJTEUgCSpvcGVuRmlsZVJlYWQoY29uc3QgVHdpbmUgJiBmaWxlTmFtZSwgVHdp
bmUgJnJlYWxOYW1lKTsKICAgIGludAkJCWNsb3NlRmlsZSh2b2lkKTsKCnB1YmxpYzoKICAgICAK
ICAgIFNoYXBlKCk7CiAgICB+U2hhcGUoKTsKICAgIFNoYXBlKCBjb25zdCBTaGFwZSAmICk7CiAg
ICBTaGFwZSAmIG9wZXJhdG9yPSggY29uc3QgU2hhcGUgJiApOwoKICAgICAKICAgICAKICAgICAK
ICAgIHZvaWQga2x1ZGdlKCk7CgogICAgIAoKCiAgICB2b2lkICAgICAgICAgICAgQ29weVNoYXBl
RXhjZXB0Rm9yKCBTaGFwZSAmLCBTX0dyb3VwVGFnICk7CgogICAgIAogICAgc3RhdGljIFNfRmls
ZVR5cGUgICAgICAgICAgIGRlZmF1bHRGaWxlVHlwZTsKCiAgICAgCiAgICBUd2luZSAgICAgICAg
ICAgbGFzdEZpbGVOYW1lOwoKICAgICAKICAgIFNoYXBlTGlzdDxNX1ZlY3Rvcj4gICAgICAgICB2
ZXJ0OyAgICAgICAgICAgIAoKICAgICAKICAgIFN0cmljdFNoYXBlTGlzdDxUd2luZT4gICAgICB0
eXBlTmFtZTsKICAgIFN0cmljdFNoYXBlTGlzdDxUd2luZT4gICAgICBncm91cE5hbWU7CiAgICBT
dHJpY3RTaGFwZUxpc3Q8VHdpbmU+ICAgICAgbXRsTmFtZTsKCiAgICAgCiAgICBTX1Byb3BlcnR5
SUQgICAgQWRkUHJvcGVydHkoIAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICog
Q2xhc3MsIAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogT2JqZWN0CiAgICAg
ICAgICAgICAgICAgICAgICAgICk7CiAgICBTX1Byb3BlcnR5SUQgICAgRmluZFByb3BlcnR5KCBj
b25zdCBjaGFyICogQ2xhc3MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqIE9iamVjdCApIGNvbnN0OwogICAgTGlzdDxTX1Byb3BlcnR5SUQ+IEZpbmRQcm9w
ZXJ0aWVzQnlDbGFzcyggY29uc3QgY2hhciAqIENsYXNzICkgY29uc3Q7CgogICAgdm9pZCAgICAg
ICAgICAgIERlbGV0ZVByb3BlcnR5KCBTX1Byb3BlcnR5SUQgKTsKCiAgICB2b2lkICogICAgICAg
ICAgR2V0R2xvYmFsRGF0YSggU19Qcm9wZXJ0eUlEICkgY29uc3Q7CiAgICB2b2lkICAgICAgICAg
ICAgU2V0R2xvYmFsRGF0YSggU19Qcm9wZXJ0eUlELCB2b2lkICogKTsKCiAgICBTQ19WZWcgICAg
ICAgICAgVmVnKCBjb25zdCBTX1Byb3BlcnR5SUQgJiApOwoKICAgIExpc3Q8VHdpbmU+ICAgICBQ
cm9wZXJ0eU5hbWVzKCkgY29uc3Q7CiAgICBMaXN0PFR3aW5lPiAgICAgUHJvcGVydHlOYW1lQ2xh
c3NlcygpIGNvbnN0OwoKICAgICAKICAgIFNfUHJvcGVydHlJRCAgICBDb3B5UHJvcGVydHkoIGNv
bnN0IFNfUHJvcGVydHlJRCAmICk7CgogICAgVHdpbmUgICAgICAgICAgIFJlbmFtZVByb3BlcnR5
KCBjb25zdCBTX1Byb3BlcnR5SUQgJiwgY29uc3QgY2hhciAqIG5hbWUgKTsKCiAgICAgCiAgICBT
X0VsZW1SZWYgICAgICAgQWRkRWxlbWVudCgpOwogICAgU19FbGVtUmVmICAgICAgIEFkZEVsZW1l
bnQoU19FbGVtUmVmICYpOwogICAgdm9pZCAgICAgICAgICAgIEFkZFZlcnRleCggU19FbGVtUmVm
ICk7CiAgICB2b2lkICAgICAgICAgICAgQWRkVmVydGljZXMoIFNfRWxlbVJlZiwgaW50ICk7CiAg
ICB2b2lkICAgICAgICAgICAgSW5zZXJ0VmVydGV4QWZ0ZXIoIFNfRWxlbVJlZiwgaW50ICk7CiAg
ICB2b2lkICAgICAgICAgICAgU3ViZGl2aWRlU2VnbWVudEFmdGVyKCBTX0VsZW1SZWYsIGludCwg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMaXN0PGZs
b2F0PiAmICk7CgogICAgdm9pZCAgICAgICAgICAgIENvcHlWZXJ0ZXgoIFNfRWxlbVJlZiBmcm9t
LCBpbnQsIFNfRWxlbVJlZiB0bywgaW50ICk7CgogICAgdm9pZCAgICAgICAgICAgIERlbGV0ZUVs
ZW1lbnQoIFNfRWxlbVJlZiApOwogICAgdm9pZCAgICAgICAgICAgIERlbGV0ZVZlcnRleCggU19F
bGVtUmVmLCBpbnQgKTsKCiAgICB2b2lkICAgICAgICAgICAgUmV2ZXJzZUVsZW1lbnQoIFNfRWxl
bVJlZiApOwogICAgdm9pZCAgICAgICAgICAgIFJlb3JkZXJWZXJ0cyggU19FbGVtUmVmLCBjb25z
dCBMaXN0PGludD4gJiApOwoKICAgICAKICAgIHZvaWQgICAgICAgICAgICBEdXBsaWNhdGVWZXJ0
ZXgoIGludCApOwoKICAgIHZvaWQgICAgICAgICAgICBBZGRWZXJ0ZXgoIGNvbnN0IE1fVmVjdG9y
ICYgKTsKICAgIHZvaWQgICAgICAgICAgICBEZWxldGVVbnVzZWRWZXJ0aWNlcygpOwoKICAgICAK
ICAgIFNfRWxlbVJlZiAgICAgICBTdGFydCgpOwogICAgU19FbGVtUmVmICAgICAgIEVuZCgpOwoK
ICAgIHZvaWQgICAgICAgICAgICBTZXRWZXJzaW9uKCBpbnQgKTsKICAgIGludCAgICAgICAgICAg
ICBHZXRWZXJzaW9uKCkgY29uc3Q7CgogICAgIAogICAgU2hhcGUgJiAgICAgICAgIEFwcGVuZCgg
U2hhcGUgJiApOwoKICAgIGludCAgICAgICAgICAgICBOdW1iRWxlbSgpIGNvbnN0OwoKICAgICAK
ICAgIGludCAgICAgICAgICAgICBSZWFkQWxsSGFpciggY29uc3QgVHdpbmUgJiApOwogICAgaW50
ICAgICAgICAgICAgIFdyaXRlQWxsSGFpciggY29uc3QgVHdpbmUgJiApOwogICAgaW50ICAgICAg
ICAgICAgIFJlYWRIYWlyR3JvdXAoIGNvbnN0IFR3aW5lICYsIGNvbnN0IFR3aW5lICYgKTsKICAg
IGludCAgICAgICAgICAgICBXcml0ZUhhaXJHcm91cCggY29uc3QgVHdpbmUgJiwgY29uc3QgVHdp
bmUgJiApOwogICAgaW50ICAgICAgICAgICAgIFJlYWRIYWlyUGF0Y2goIGNvbnN0IFR3aW5lICYs
IGludCApOwogICAgaW50ICAgICAgICAgICAgIFdyaXRlSGFpclBhdGNoKCBjb25zdCBUd2luZSAm
LCBpbnQgKTsKICAgIGludCAgICAgICAgICAgICBXcml0ZUhhaXJPcGVuKCBjb25zdCBUd2luZSAm
ICk7CiAgICBpbnQgCSAgICBXcml0ZUhhaXJPcGVuKCBORVRGSUxFX0ZJTEUgKiApOwogICAgaW50
ICAgICAgICAgICAgIFdyaXRlQXBwZW5kSGFpciggSGFpciAmICk7CiAgICBpbnQgICAgICAgICAg
ICAgV3JpdGVIYWlyQ2xvc2UoKTsKICAgIGludAkJICAgIFdyaXRlSGFpckZpbmlzaCgpOwoKICAg
IGludCAgICAgICAgICAgICBSZWFkQWxsKCBORVRGSUxFX0ZJTEUgKiApOwogICAgaW50ICAgICAg
ICAgICAgIFJlYWRBbGwoIGNvbnN0IFR3aW5lICYgKTsKICAgIHZvaWQgKiAgICAgICAgICBSZWFk
T2JqR2xvYmFsRGF0YSggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiAp
OwogICAgCiAgICBpbnQgICAgICAgICAgICAgV3JpdGVBbGwoIE5FVEZJTEVfRklMRSAqICk7CiAg
ICBpbnQgICAgICAgICAgICAgV3JpdGVBbGwoIGNvbnN0IFR3aW5lICYgKTsKICAgIGludCAgICAg
ICAgICAgICBXcml0ZUFsbCggY29uc3QgVHdpbmUgJiwgY29uc3QgU19GaWxlVHlwZSAmICk7Cgog
ICAgIAogICAgaW50ICAgICAgICAgICAgIFJlYWRQcm9wT3BlbiggY29uc3QgVHdpbmUgJiApOwog
ICAgaW50IAkgICAgUmVhZFByb3BPcGVuKCBORVRGSUxFX0ZJTEUgKiApOwogICAgaW50IAkgICAg
UmVhZFByb3BDbG9zZSh2b2lkKSB7IHJldHVybiBjbG9zZUZpbGUoKTsgfQogICAgaW50ICAgICAg
ICAgICAgIFJlYWRQcm9wKCBjb25zdCBUd2luZSAmLCBjb25zdCBUd2luZSAmICk7CiAgICBpbnQg
ICAgICAgICAgICAgUmVhZEhhaXJQYXRjaCggaW50LCB2ZWN0b3I8SGFpcj4gJiApOwoKICAgICAK
ICAgIGludCAgICAgICAgICAgICBEcmF3T3V0bGluZSgpOwogICAgaW50ICAgICAgICAgICAgIERy
YXdDb2xvck91dGxpbmUoIFNfUHJvcGVydHlJRCB2YyApOwogICAgaW50ICAgICAgICAgICAgIGds
RHJhd091dGxpbmUoKTsKICAgIGludCAgICAgICAgICAgICBnbERyYXdDb2xvck91dGxpbmUoIFNf
UHJvcGVydHlJRCB2YyApOwoKICAgICAKICAgIGludCAgICAgICAgICAgICBBZGRNYXRlcmlhbCgg
Y29uc3QgY2hhciAqIG10bCApOwogICAgdm9pZCAgICAgICAgICAgIEFkZE1hdGVyaWFscyggY29u
c3QgTGlzdDxUd2luZT4gJiBtdGwgKTsKICAgIHZvaWQgICAgICAgICAgICBDbGVhck1hdGVyaWFs
cygpOwogICAgdm9pZCAgICAgICAgICAgIERlbGV0ZU1hdGVyaWFsKCBjb25zdCBjaGFyICogbXRs
ICk7CiAgICB2b2lkICAgICAgICAgICAgRGVsZXRlTWF0ZXJpYWxzKCBjb25zdCBMaXN0PFR3aW5l
PiAmIG10bCApOwogICAgdm9pZCAgICAgICAgICAgIERlbGV0ZVVudXNlZE1hdGVyaWFscygpOwog
ICAgdm9pZCAgICAgICAgICAgIFJlbmFtZU1hdGVyaWFsKCBpbnQsIGNvbnN0IGNoYXIgKiApOwoK
ICAgICAKICAgIGludCAgICAgICAgICAgICBBZGRHcm91cCggY29uc3QgY2hhciAqIGdycCApOwog
ICAgdm9pZCAgICAgICAgICAgIEFkZEdyb3VwcyggY29uc3QgTGlzdDxUd2luZT4gJiBncnAgKTsK
ICAgIHZvaWQgICAgICAgICAgICBDbGVhckdyb3VwcygpOwogICAgdm9pZCAgICAgICAgICAgIERl
bGV0ZUdyb3VwKCBjb25zdCBjaGFyICogKTsKICAgIHZvaWQgICAgICAgICAgICBEZWxldGVHcm91
cHMoIGNvbnN0IExpc3Q8VHdpbmU+ICYgZ3JwICk7CiAgICB2b2lkICAgICAgICAgICAgRGVsZXRl
VW51c2VkR3JvdXBzKCk7CiAgICB2b2lkICAgICAgICAgICAgUmVuYW1lR3JvdXAoIGludCwgY29u
c3QgY2hhciAqICk7CgogICAgIAogICAgTV9WZWN0b3IgICAgICAgIEdldEdyb3VwQ29sb3IoIGlu
dCApOwogICAgdm9pZCAgICAgICAgICAgIFNldEdyb3VwQ29sb3IoIGludCwgTV9WZWN0b3IgKTsK
ICAgIGludCAgICAgICAgICAgICBHZXRHcm91cFZpc2libGUoIGludCApOwogICAgdm9pZCAgICAg
ICAgICAgIFNldEdyb3VwVmlzaWJsZSggaW50LCBpbnQpOwoKICAgICAKICAgIE1fVmVjdG9yICAg
ICAgICBHZXRFbGVtQ29sb3IoIFNfRWxlbVJlZiApOwoKICAgICAKICAgIGludCAgICAgICAgICAg
ICBBZGRUeXBlKCBjb25zdCBjaGFyICogdHlwZSApOwogICAgdm9pZCAgICAgICAgICAgIEFkZFR5
cGVzKCBjb25zdCBMaXN0PFR3aW5lPiAmIHR5cGUgKTsKICAgIHZvaWQgICAgICAgICAgICBDbGVh
clR5cGVzKCk7CiAgICB2b2lkICAgICAgICAgICAgRGVsZXRlVHlwZSggY29uc3QgY2hhciAqICk7
CiAgICB2b2lkICAgICAgICAgICAgRGVsZXRlVHlwZXMoIGNvbnN0IExpc3Q8VHdpbmU+ICYgdHlw
ZSApOwogICAgdm9pZCAgICAgICAgICAgIERlbGV0ZVVudXNlZFR5cGVzKCk7CiAgICB2b2lkICAg
ICAgICAgICAgUmVuYW1lVHlwZSggaW50LCBjb25zdCBjaGFyICogKTsKICAgIH07CgppbmxpbmUg
Y29uc3QgY2hhciAqY2xhc3NOYW1lKCBTaGFwZSApIHsgcmV0dXJuICJTaGFwZSI7IH07CgojIDEg
Ii9zb2Z0d2FyZS90aGFsaWEvaC9zaGFwZS5wIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAK
CgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoK
CiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCnZvaWQgU0NfRGVzdHJveVBy
b3BlcnR5Q2xhc3NlcyAoCiAgICAgICAgdm9pZAoJKTsKCnZvaWQgU0NfRGVmaW5lUHJvcGVydHlD
bGFzcyAoCiAgICAgICAgVHdpbmUgICAgICAgbmFtZSwgICAgICAgIAogICAgICAgIFNDX1ZlZyAg
ICAgIHZlZywgICAgICAgICAKICAgICAgICBjb25zdCB2b2lkICAqdmFsdWUsICAgICAgCiAgICAg
ICAgaW50ICAgICAgICAgc2l6ZSwgICAgICAgIAogICAgICAgIHZvaWQgKiAgICAgICgqY29weSko
IGNvbnN0IHZvaWQgKiwgdm9pZCAqICksCiAgICAgICAgdm9pZCAqICAgICAgKCpyZWFkKSggTkVU
RklMRV9GSUxFICosIHZvaWQgKiApLAogICAgICAgIGludCAgICAgICAgICgqd3JpdGUpKCBjb25z
dCB2b2lkICosIE5FVEZJTEVfRklMRSAqLCB2b2lkICogKSwKICAgICAgICB2b2lkICAgICAgICAo
KmZyZWUpKCB2b2lkICosIHZvaWQgKiApCgkpOwoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAK
CgogCgoKIAoKCiAKCgogCgpUd2luZSBTX0dyb3VwVGFndG9hICggCiAgICAgICAgY29uc3QgU19H
cm91cFRhZyAmIHRhZwoJKTsKCgogCgp2b2lkIFNfR2VvbVRyYW5zZm9ybSAoCiAgICAgICAgU2hh
cGUgICAgICAgICAgICYgc2hhcGUsCiAgICAgICAgY29uc3QgTV9NYXRyaXggICYgbWF0CgkpOwoK
dm9pZCBTX0dlb21UcmFuc2Zvcm1Db29yZFJhbmdlICgKICAgICAgICBTaGFwZSAgICAgICAgICAg
JiBzaGFwZSwKICAgICAgICBjb25zdCBNX01hdHJpeCAgJiBtYXQsCiAgICAgICAgY29uc3QgaW50
ICAgICAgICYgYmVnLAogICAgICAgIGNvbnN0IGludCAgICAgICAmIGVuZAoJKTsKCmludCBTX0dl
b21HZXRNYXhTbW9vdGggKAogICAgICAgIFNoYXBlICYgZ2VvbQoJKTsKCnZvaWQgU19HZW9tUHVy
Z2VNYXRlcmlhbHMgKAogICAgICAgIFNoYXBlICYgZ2VvbQoJKTsKCnZvaWQgU19HZW9tU2NhbiAo
CiAgICAgICAgU2hhcGUgJiBnZW9tLAogICAgICAgIGZsb2F0ICAgKnhNaW4sCiAgICAgICAgZmxv
YXQgICAqeU1pbiwKICAgICAgICBmbG9hdCAgICp6TWluLAogICAgICAgIGZsb2F0ICAgKnhNYXgs
CiAgICAgICAgZmxvYXQgICAqeU1heCwKICAgICAgICBmbG9hdCAgICp6TWF4LAogICAgICAgIGZs
b2F0ICAgKnhDZW50ZXIsCiAgICAgICAgZmxvYXQgICAqeUNlbnRlciwKICAgICAgICBmbG9hdCAg
ICp6Q2VudGVyCgkpOwoKdm9pZCBTX0dlb21TY2FuICgKICAgICAgICBTaGFwZSAgICAgICAmIGdl
b20sCiAgICAgICAgTV9WZWN0b3IgICAgKiBtaW4sCiAgICAgICAgTV9WZWN0b3IgICAgKiBtYXgs
CiAgICAgICAgTV9WZWN0b3IgICAgKiBjZW50ZXIKCSk7Cgp2b2lkIFNfR2VvbUNsZWFudXAgKAog
ICAgICAgIFNoYXBlICAgJiBnZW9tCgkpOwoKdm9pZCBTX0dlb21DbGVhbnVwVmVydGV4R3JvdXBz
ICgKICAgICAgICBTaGFwZSAgICYgZ2VvbQoJKTsKCnZvaWQgU19HZW9tQ2xlYW51cFZlcnRleE5v
cm1hbHMgKAogICAgICAgIFNoYXBlICAgJiBnZW9tCgkpOwoKdm9pZCBTX0dlb21EZWxldGVHcm91
cCAoCiAgICAgICAgU2hhcGUgICAgICAgJmdlb20sCiAgICAgICAgY29uc3QgY2hhciAgKmdyb3Vw
CgkpOwoKTGlzdDxNX1ZlY3Rvcj4gU19HZW9tR2V0Q29vcmRzICgKICAgICAgICBTaGFwZSAgICAg
ICAmZ2VvbSwKICAgICAgICBTX0VsZW1SZWYgICBlbGVtCgkpOwoKTGlzdDxNX1ZlY3Rvcj4gU19H
ZW9tR2V0Q29vcmRSYW5nZSAoCiAgICAgICAgU2hhcGUgICAgICAgICAgICYgc2hhcGUsCiAgICAg
ICAgY29uc3QgaW50ICAgICAgICYgYmVnLAogICAgICAgIGNvbnN0IGludCAgICAgICAmIGVuZAoJ
KTsKCnZvaWQgU19HZW9tUmVwbGFjZUNvb3JkcyAoCiAgICAgICAgU2hhcGUgICAgICAgICAgICAg
ICAgICAgJnNoYXBlLAogICAgICAgIFNfRWxlbVJlZiAgICAgICAgICAgICAgIGVsZW0sCiAgICAg
ICAgY29uc3QgTGlzdDxNX1ZlY3Rvcj4gICAgJmNvb3JkcwoJKTsKClNoYXBlIFNfR2VvbUdldEdy
b3VwICgKICAgICAgICBTaGFwZSAgICAgICAmZ2VvbSwKICAgICAgICBjb25zdCBjaGFyICAqZ3Jv
dXAKCSk7CgpTaGFwZSAmIFNfR2VvbUFwcGVuZCAoCiAgICAgICAgU2hhcGUgICAgICAgJnRhcmdl
dEdlb20sCiAgICAgICAgU2hhcGUgICAgICAgJnN0dWZmVG9BcHBlbmQKCSk7Cgp2b2lkIFNfR2Vv
bUFkZENvb3JkcyAoCiAgICAgICAgU2hhcGUgICAgICAgICAgICAgICAgICAgJnNoYXBlLAogICAg
ICAgIGNvbnN0IExpc3Q8TV9WZWN0b3I+ICAgICZjb29yZHMsCiAgICAgICAgY29uc3QgY2hhciAg
ICAgICAgICAgICAgKnR5cGUKCSk7Cgp2b2lkIFNfR2VvbUFkZEVsZW1TaGFyZSAoCiAgICAgICAg
U2hhcGUgICAgICAgICAgICYgc2hhcGUsCiAgICAgICAgY29uc3QgTGlzdDxpbnQ+ICYgc2V0Cgkp
OwoKaW50IFNfR2VvbUFkZE1hdGVyaWFsICgKICAgICAgICBTaGFwZSAgICAgICAmc2hhcGUsCiAg
ICAgICAgY29uc3QgY2hhciAgKm1hdGVyaWFsCgkpOwoKdm9pZCBTX0dlb21EZWxldGVUeXBlICgK
ICAgICAgICBTaGFwZSAgICAgICAmc2hhcGUsCiAgICAgICAgY29uc3QgY2hhciAgKnR5cGVOYW1l
CgkpOwoKdm9pZCBTX0dlb21EZWxldGVHcm91cFR5cGUgKAogICAgICAgIFNoYXBlICAgICAgICZz
aGFwZSwKICAgICAgICBjb25zdCBjaGFyICAqZ3JvdXBOYW1lLAogICAgICAgIGNvbnN0IGNoYXIg
ICp0eXBlTmFtZQoJKTsKCnZvaWQgU19HZW9tU2hhcmVTbW9vdGggKAogICAgICAgIFNoYXBlICAg
JnNoYXBlLAogICAgICAgIGZsb2F0ICAgdG9sCgkpOwoKdm9pZCBTX0dlb21VbndlbGRTbW9vdGgg
KAogICAgICAgIFNoYXBlICYgZ2VvbQoJKTsKCkxpc3Q8TGlzdDwgU19FbGVtUmVmID4gPiBTX0dl
b21HZXRTaGFyZUxpc3QgKAogICAgICAgIFNoYXBlICYgZ2VvbQoJKTsKCnZvaWQgU19HZW9tVW5T
aGFyZSAoCiAgICAgICAgU2hhcGUgICAmIGdlb20KCSk7Cgp2b2lkIFNfR2VvbVRyYW5zbGF0ZSAo
CiAgICAgICAgU2hhcGUgICAgICAgICAgICYgZ2VvbSwKICAgICAgICBjb25zdCBNX1ZlY3RvciAg
JiB2CgkpOwoKdm9pZCBTX0dlb21JbnRlcm5hbFByaW50ICgKICAgICAgICBTaGFwZSAgICYgZ2Vv
bSwKICAgICAgICBGSUxFICAgICogZnB0ciwKICAgICAgICBpbnQgICAgIGdlb21Pbmx5LAogICAg
ICAgIGludCAgICAgdFZlcnRPbmx5CgkpOwoKdm9pZCBTX0dlb21TY2FuUHJpbnQgKAogICAgICAg
IFNoYXBlICAgJmdlb20sCiAgICAgICAgRklMRSAgICAqZnB0ciwKICAgICAgICBpbnQgICAgIGJy
aWVmCgkpOwoKdm9pZCBTX0dlb21QcmludCAoCiAgICAgICAgU2hhcGUgICAmZ2VvbSwKICAgICAg
ICBGSUxFICAgICpmcHRyLAogICAgICAgIGludCAgICAgZ2VvbU9ubHksCiAgICAgICAgaW50ICAg
ICBicmllZgoJKTsKCnZvaWQgU19HZW9tU2hhcmUgKAogICAgICAgIFNoYXBlICAgJiBzaGFwZSwK
ICAgICAgICBmbG9hdCAgIHRvbAoJKTsKCnZvaWQgU19HZW9tU2hhcmVDbGVhbiAoCiAgICAgICAg
U2hhcGUgICAmIGdlb20sCiAgICAgICAgZmxvYXQgICB0b2wsCiAgICAgICAgaW50ICAgICBjbGVh
bnVwCgkpOwoKdm9pZCBTX0dlb21EZWxSZWR1bmRhbnQgKAogICAgICAgIFNoYXBlICAgJiBzaGFw
ZSwKICAgICAgICBmbG9hdCAgIHRvbAoJKTsKCmludCBTX0dlb21BZGRNYXAgKAogICAgICAgIFNo
YXBlICAgICAgICYgc2hhcGUsCiAgICAgICAgY29uc3QgY2hhciAgKiBtYXBOYW1lCgkpOwoKaW50
IFNfR2VvbUNoZWNrICgKICAgICAgICBTaGFwZSAgICYgZ2VvbSwKICAgICAgICBGSUxFICAgICog
ZnB0ciwKICAgICAgICBpbnQgICAgIGZpeCwKICAgICAgICBpbnQgICAgIGJhZGdycCwKICAgICAg
ICBpbnQgICAgIGxvdWQsCiAgICAgICAgaW50ICAgICB3ZWxkQ29weSwKICAgICAgICBmbG9hdCAg
IHRvbGVyLAogICAgICAgIGZsb2F0ICAgZmxhdFRvbCwKICAgICAgICBpbnQgICAgIGRvQWxsLAog
ICAgICAgIGludCAgICAgZHVwcywKICAgICAgICBpbnQgICAgIG5vbnBsYW5hciwKICAgICAgICBp
bnQgICAgIGNvbmNhdmUsCiAgICAgICAgaW50ICAgICBzaGFyZUVkZ2UsCiAgICAgICAgaW50ICAg
ICBjb2xpbmVhciwKICAgICAgICBmbG9hdCAgIGNvbFRvbAoJKTsKCmludCBTX0dlb21DaGVja0Vs
ZW1zICgKICAgICAgICBTaGFwZSAgICYgZ2VvbSwKICAgICAgICBpbnQgICAgIGxvdWQsCiAgICAg
ICAgRklMRSAgICAqIGZwdHIsCiAgICAgICAgaW50ICAgICBmaXgsCiAgICAgICAgZmxvYXQgICB0
b2xlciwKICAgICAgICBpbnQgICAgIGJhZGdycAoJKTsKCmludCBTX0dlb21Db21wYXJlSW5kZXgg
KAogICAgICAgIGNvbnN0IHZvaWQgKmdlbmVyaWNQdHIxLAogICAgICAgIGNvbnN0IHZvaWQgKmdl
bmVyaWNQdHIyCgkpOwoKaW50IFNfR2VvbUNvbXBhcmVJbmRleEFuZFNtb290aCAoCiAgICAgICAg
Y29uc3Qgdm9pZCAqZ2VuZXJpY1B0cjEsCiAgICAgICAgY29uc3Qgdm9pZCAqZ2VuZXJpY1B0cjIK
CSk7CgppbnQgU19HZW9tRmluZER1cHMgKAogICAgICAgIFNoYXBlICAgJiBnZW9tLAogICAgICAg
IGludCAgICAgbG91ZCwKICAgICAgICBpbnQgICAgIGJhZGdycCwKICAgICAgICBpbnQgICAgIGZp
eCwKICAgICAgICBGSUxFICAgICogZnB0ciwKICAgICAgICBpbnQgICAgIHdlbGRDb3B5LAogICAg
ICAgIGZsb2F0ICAgdG9sZXIKCSk7Cgp2b2lkIFNfR2VvbUZpbmRTaGFyZSAoCiAgICAgICAgU2hh
cGUgICAmIGdlb20sCiAgICAgICAgaW50ICAgICBsb3VkLAogICAgICAgIGludCAgICAgYmFkZ3Jw
LAogICAgICAgIEZJTEUgICAgKiBmcHRyCgkpOwoKdm9pZCBTX0dlb21HZXRCeUJveCAoCiAgICAg
ICAgU2hhcGUgICAgICAgJiBnZW9tLAogICAgICAgIFNoYXBlICAgICAgICogaW5Cb3gsCiAgICAg
ICAgU2hhcGUgICAgICAgKiBvdXRCb3gsCiAgICAgICAgTV9WZWN0b3IgICAgbWluLAogICAgICAg
IE1fVmVjdG9yICAgIG1heAoJKTsKCmludCBTX0dlb21EZWxldGVBbGxCdXRGcm9tICgKICAgICAg
ICBTaGFwZSAgICAgICAmIGdlb20sCiAgICAgICAgY29uc3QgY2hhciAgKiBpbkxpc3QKCSk7Cgpp
bnQgU19HZW9tRGVsZXRlQWxsTXRsQnV0RnJvbSAoCiAgICAgICAgU2hhcGUgICAgICAgJiBnZW9t
LAogICAgICAgIGNvbnN0IGNoYXIgICogaW5MaXN0CgkpOwoKdm9pZCBTX0dlb21QdXJnZU1hcHMg
KAogICAgICAgIFNoYXBlICAgJiBzaGFwZQoJKTsKCkxpc3Q8TV9WZWN0b3I+IFNfR2VvbUNhbGNF
bGVtZW50Tm9ybWFscyAoCiAgICAgICAgU2hhcGUgICAgICAgJiBzaGFwZQoJKTsKCnZvaWQgU19H
ZW9tUmVwbGFjZUVsZW0gKAogICAgICAgIFNoYXBlICAgICAgICYgb2xkLAogICAgICAgIFNfRWxl
bVJlZiAgIG9sZEVsZW0sCiAgICAgICAgU2hhcGUgICAgICAgJiBpbiwKICAgICAgICBTX0VsZW1S
ZWYgICBpbkVsZW0KCSk7CgpTaGFwZSBTX0dlb21NYWtlU2VjdGlvbiAoCiAgICAgICAgU2hhcGUg
ICAgICAgICAgICAgICAgICAgJiBnZW9tLAogICAgICAgIGNvbnN0IExpc3Q8TV9WZWN0b3I+ICAg
ICYgY29vcmRzCgkpOwoKaW50IFNfR2VvbURlbGV0ZUFsbEdyb3Vwc0J1dEZyb20gKAogICAgICAg
IFNoYXBlICAgICAgICYgZ2VvbSwKICAgICAgICBjb25zdCBjaGFyICAqIGluTGlzdAoJKTsKCmlu
dCBTX0dlb21NYXJrQWxsR3JvdXBzQnV0RnJvbSAoCiAgICAgICAgU2hhcGUgICAgICAgJiBnZW9t
LAogICAgICAgIGNvbnN0IGNoYXIgICogaW5MaXN0LAogICAgICAgIGNvbnN0IGNoYXIgICogbWFy
a2VkTmFtZQoJKTsKCmludCBTX0dlb21DaGVja0ZvckJvdW5kaW5nQm94ICgKICAgICAgICBjb25z
dCBjaGFyICAqZmlsZW5hbWUsCiAgICAgICAgTV9WZWN0b3IgICAgJm1pbiwKICAgICAgICBNX1Zl
Y3RvciAgICAmbWF4LAogICAgICAgIFNoYXBlICAgICAgICoqY2FjaGUKCSk7CgppbnQgU19HZW9t
Q2hlY2tGb3JBbmltYXRpbmdCb3VuZGluZ0JveCAoCiAgICAgICAgY29uc3QgY2hhciAgKmZpbGVu
YW1lLAogICAgICAgIGZsb2F0ICAgICAgIGZyYW1lLAogICAgICAgIE1fVmVjdG9yICAgICZtaW4s
CiAgICAgICAgTV9WZWN0b3IgICAgJm1heCwKICAgICAgICBTaGFwZSAgICAgICAqKmNhY2hlCgkp
OwoKdm9pZCBTX0dlb21LbHVkZ2UgKAogICAgICAgIFNoYXBlICAgICAgICZnZW9tCgkpOwoKaW50
IFNfR2VvbUludGVycG9sYXRlVmVydHMgKAogICAgU2hhcGUgJnNoYXBlMSwKICAgIFNoYXBlICZz
aGFwZTIsCiAgICBmbG9hdCBsZXJwCgkpOwoKaW50IFNfR2VvbUludGVyc2VjdFBhcnRpY2xlcyAo
CiAgICBTaGFwZSAmc2hhcGUxLAogICAgU2hhcGUgJnNoYXBlMgoJKTsKCgogCgpJTlQgU19HZW9t
TmVpZ2hib3IgKAogICAgICAgIFNoYXBlICAgICAgICZnZW9tLAogICAgICAgIFNfRWxlbVJlZiAg
IHRoZUVsZW0KCSk7CgoKIAoKdm9pZCBTX0dyb3VwQ29udmV4ICgKICAgICAgICBTaGFwZSAgICAg
ICAmIGdlb20sCiAgICAgICAgY29uc3QgY2hhciAgKiBncm91cCAKCSk7CgppbnQgU19FbGVtSXND
b252ZXggKAogICAgICAgIFNoYXBlICAgICAgICYgZ2VvbSwKICAgICAgICBTX0VsZW1SZWYgICBl
bGVtCgkpOwoKdm9pZCBTX0VsZW1Db252ZXggKAogICAgICAgIFNoYXBlICAgICAgICYgZ2VvbSwK
ICAgICAgICBTX0VsZW1SZWYgICBlbGVtCgkpOwoKdm9pZCBTX0dyb3VwQ29udmV4Q29saW5lYXIg
KAogICAgICAgIFNoYXBlICAgICAgICYgZ2VvbSwKICAgICAgICBjb25zdCBjaGFyICAqIGdyb3Vw
LAogICAgICAgIGNvbnN0IGZsb2F0ICYgY29saW5lYXJUb2wKCSk7Cgp2b2lkIFNfRWxlbUNvbnZl
eENvbGluZWFyICgKICAgICAgICBTaGFwZSAgICAgICAmIGdlb20sCiAgICAgICAgU19FbGVtUmVm
ICAgZWxlbSwKICAgICAgICBjb25zdCBmbG9hdCAmIGNvbGluZWFyVG9sCgkpOwoKdm9pZCBTX0dy
b3VwQ29udmV4Tm9ucGxhbmFyICgKICAgICAgICBTaGFwZSAgICAgICAmIGdlb20sCiAgICAgICAg
Y29uc3QgY2hhciAgKiBncm91cCwKICAgICAgICBjb25zdCBmbG9hdCAmIGNvbGluZWFyVG9sCgkp
OwoKdm9pZCBTX0VsZW1Db252ZXhOb25wbGFuYXIgKAogICAgICAgIFNoYXBlICAgICAgICYgZ2Vv
bSwKICAgICAgICBTX0VsZW1SZWYgICBlbGVtLAogICAgICAgIGNvbnN0IGZsb2F0ICYgY29saW5l
YXJUb2wKCSk7CgpMaXN0PE1fVmVjdG9yMj4gU19FbGVtQ29udmV4R2V0QmVzdDJkQ29vcmRzICgK
ICAgICAgICBTaGFwZSAgICAgICAmIGdlb20sCiAgICAgICAgU19FbGVtUmVmICAgZWxlbQoJKTsK
CmludCBTX0VsZW1Db2xpbmVhclZlcnRUZXN0ICgKICAgICAgICBTaGFwZSAgICAgICAmIGdlb20s
CiAgICAgICAgU19FbGVtUmVmICAgZWxlbSwKICAgICAgICBpbnQgICAgICAgICBpbmRleCwKICAg
ICAgICBjb25zdCBmbG9hdCAmIGNvbGluZWFyVG9sCgkpOwoKU19FbGVtUmVmIFNfRWxlbUNvbnZl
eEJlc3RTcGxpdCAoCiAgICAgICAgU2hhcGUgICAgICAgJiBnZW9tLAogICAgICAgIFNfRWxlbVJl
ZiAgIGVsZW0sCiAgICAgICAgTGlzdDxNX1ZlY3Rvcj4gY29vcmRzLAogICAgICAgIExpc3Q8TV9W
ZWN0b3IyPiBjb29yZHMyZCwKICAgICAgICBMaXN0PGludD4gICBpbnNpZGUKCSk7CgoKIAoKdm9p
ZCBTX0dyb3VwU3RlcFNwbGluZSAoCiAgICAgICAgU2hhcGUgICAgICAgJiBnZW9tLAogICAgICAg
IGNvbnN0IGNoYXIgICogZ3JvdXAsCiAgICAgICAgZmxvYXQgICAgICAgdGVuc2lvbiwKICAgICAg
ICBpbnQgICAgICAgICBudW1iLAogICAgICAgIGludCAgICAgICAgIGNsb3NlZCwKICAgICAgICBj
b25zdCBUd2luZSAmIHR5cGUsCiAgICAgICAgZmxvYXQgICAgICAgZW5kRmFjdCwKICAgICAgICBp
bnQgICAgICAgICBhbGxvd0R1cHMKCSk7Cgp2b2lkIFNfR3JvdXBQYXJ0aWFsU3BsaW5lICgKICAg
ICAgICBTaGFwZSAgICAgICAmIGdlb20sCiAgICAgICAgY29uc3QgY2hhciAgKiBncm91cCwKICAg
ICAgICBpbnQgICAgICAgICBzVmVydCwKICAgICAgICBpbnQgICAgICAgICBlVmVydCwKICAgICAg
ICBmbG9hdCAgICAgICB0ZW5zaW9uLAogICAgICAgIGludCAgICAgICAgIG51bWIsCiAgICAgICAg
aW50ICAgICAgICAgY2xvc2VkLAogICAgICAgIGNvbnN0IFR3aW5lICYgdHlwZSwKICAgICAgICBm
bG9hdCAgICAgICBlbmRGYWN0CgkpOwoKdm9pZCBTX0VsZW1TdGVwU3BsaW5lICgKICAgICAgICBT
aGFwZSAgICAgICAmIGdlb20sCiAgICAgICAgU19FbGVtUmVmICAgZWxlbSwKICAgICAgICBmbG9h
dCAgICAgICB0ZW5zaW9uLAogICAgICAgIGludCAgICAgICAgIG51bWIsCiAgICAgICAgaW50ICAg
ICAgICAgY2xvc2VkLAogICAgICAgIGNvbnN0IFR3aW5lICYgdHlwZSwKICAgICAgICBmbG9hdCAg
ICAgICBlbmRGYWN0LAogICAgICAgIGludCAgICAgICAgIGFsbG93RHVwcwoJKTsKCnZvaWQgU19F
bGVtUGFydGlhbFNwbGluZSAoCiAgICAgICAgU2hhcGUgICAgICAgJiBnZW9tLAogICAgICAgIFNf
RWxlbVJlZiAgIGVsZW0sCiAgICAgICAgaW50ICAgICAgICAgc1ZlcnQsCiAgICAgICAgaW50ICAg
ICAgICAgZVZlcnQsCiAgICAgICAgZmxvYXQgICAgICAgdGVuc2lvbiwKICAgICAgICBpbnQgICAg
ICAgICBudW1iLAogICAgICAgIGludCAgICAgICAgIGNsb3NlZCwKICAgICAgICBjb25zdCBUd2lu
ZSAmIHR5cGUsCiAgICAgICAgZmxvYXQgICAgICAgZW5kRmFjdAoJKTsKCgogCgp2b2lkIFNfR3Jv
dXBDbGVhciAoCiAgICAgICAgU2hhcGUgJmdlb20KCSk7Cgp2b2lkIFNfR3JvdXBBZGRBbGwgKAog
ICAgICAgIFNoYXBlICAgICAgICZnZW9tLAogICAgICAgIGNvbnN0IGNoYXIgICpncm91cAoJKTsK
CnZvaWQgU19Hcm91cERlbGV0ZVVudXNlZCAoCiAgICAgICAgU2hhcGUgICAgICAgJmdlb20KCSk7
Cgp2b2lkIFNfR3JvdXBEZWxldGVHcm91cCAoCiAgICAgICAgU2hhcGUgICAgICAgJmdlb20sCiAg
ICAgICAgY29uc3QgY2hhciAgKmZyb21OYW1lLAogICAgICAgIGNvbnN0IGNoYXIgICp0aGlzTmFt
ZQoJKTsKCnZvaWQgU19Hcm91cERlbGV0ZU5hbWUgKAogICAgICAgIFNoYXBlICAgICAgICZzaGFw
ZSwKICAgICAgICBjb25zdCBjaGFyICAqbmFtZQoJKTsKCnZvaWQgU19Hcm91cEFwcGVuZCAoCiAg
ICAgICAgU2hhcGUgICAgICAgJnNoYXBlLAogICAgICAgIGNvbnN0IGNoYXIgICpncm91cCwKICAg
ICAgICBTaGFwZSAgICAgICAmb3V0U2hhcGUKCSk7CgppbnQgU19Hcm91cEdldEluZGV4ICgKICAg
ICAgICBTaGFwZSAgICAgICAmc2hhcGUsCiAgICAgICAgY29uc3QgY2hhciAgKm5hbWUKCSk7CgpT
X0dyb3VwVGFnIFNfR3JvdXBQdXNoICgKICAgICAgICBTaGFwZSAgICAgICAmc2hhcGUsCiAgICAg
ICAgY29uc3QgY2hhciAgKm5hbWUKCSk7CgpTX0dyb3VwVGFnIFNfR3JvdXBHZXRCaXQgKAogICAg
ICAgIFNoYXBlICAgICAgICYgc2hhcGUsCiAgICAgICAgY29uc3QgY2hhciAgKiBuYW1lCgkpOwoK
dm9pZCBTX0dyb3VwQWRkR3JvdXAgKAogICAgICAgIFNoYXBlICAgICAgICZzaGFwZSwKICAgICAg
ICBjb25zdCBjaGFyICAqb3V0LAogICAgICAgIGNvbnN0IGNoYXIgICppbgoJKTsKCnZvaWQgU19H
cm91cERlbGV0ZUFsbCAoCiAgICAgICAgU2hhcGUgICAgICAgJnNoYXBlLAogICAgICAgIGNvbnN0
IGNoYXIgICpncm91cAoJKTsKCnZvaWQgU19Hcm91cFRyYW5zZm9ybSAoCiAgICAgICAgU2hhcGUg
ICAgICAgICAgICZzaGFwZSwKICAgICAgICBjb25zdCBjaGFyICAgICAgKm5hbWUsCiAgICAgICAg
Y29uc3QgTV9NYXRyaXggICZtYXQKCSk7Cgp2b2lkIFNfR3JvdXBTY2FuICgKICAgICAgICBTaGFw
ZSAgICAgICAmc2hhcGUsCiAgICAgICAgY29uc3QgY2hhciAgKm5hbWUsCiAgICAgICAgTV9WZWN0
b3IgICAgKm1pbiwKICAgICAgICBNX1ZlY3RvciAgICAqbWF4LAogICAgICAgIE1fVmVjdG9yICAg
ICpjZW50ZXIKCSk7Cgp2b2lkIFNfR3JvdXBDbGlwICgKICAgICAgICBTaGFwZSAgICAgICAgICAg
ICAgICAgICAmZ2VvbSwKICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAqZ3JvdXAsCiAg
ICAgICAgY29uc3QgTGlzdDxNX1ZlY3Rvcj4gICAgJnZlcnRzCgkpOwoKdm9pZCBTX0dyb3VwQ2xp
cCAoCiAgICAgICAgU2hhcGUgICAgICAgICAgICAgICAgICAgJiBnZW9tLAogICAgICAgIGNvbnN0
IGNoYXIgICAgICAgICAgICAgICogZ3JvdXAsCiAgICAgICAgU19FbGVtUmVmICAgICAgICAgICAg
ICAgZWxlbQoJKTsKCnZvaWQgU19Hcm91cENsaXAgKAogICAgICAgIFNoYXBlICAgICAgICAgICAg
ICAgICAgICYgZ2VvbSwKICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAqIGdyb3VwLAog
ICAgICAgIE1fVmVjdG9yNCAgICAgICAgICAgICAgIHBsYW5lCgkpOwoKdm9pZCBTX0dyb3VwQWRk
RWxlbSAoCiAgICAgICAgU2hhcGUgICAgICAgJmdlb20sCiAgICAgICAgY29uc3QgY2hhciAgKm5h
bWUsCiAgICAgICAgU19FbGVtUmVmICAgZWxlbQoJKTsKCnZvaWQgU19Hcm91cERlbGV0ZUVsZW0g
KAogICAgICAgIFNoYXBlICAgICAgICZnZW9tLAogICAgICAgIGNvbnN0IGNoYXIgICpuYW1lLAog
ICAgICAgIFNfRWxlbVJlZiAgIGVsZW0KCSk7Cgp2b2lkIFNfR3JvdXBEZWxldGUgKAogICAgICAg
IFNoYXBlICAgICAgICZnZW9tLAogICAgICAgIGNvbnN0IGNoYXIgICpuYW1lCgkpOwoKdm9pZCBT
X0dyb3VwQWRkR3JvdXBGZmFjaW5nICgKICAgICAgICBTaGFwZSAgICAgICAmZ2VvbSwKICAgICAg
ICBjb25zdCBjaGFyICAqb3V0LAogICAgICAgIGNvbnN0IGNoYXIgICppbiwKICAgICAgICBmbG9h
dCAgICAgICB0b2xlcmFuY2UKCSk7Cgp2b2lkIFNfR3JvdXBBZGRHcm91cEJmYWNpbmcgKAogICAg
ICAgIFNoYXBlICAgICAgICZnZW9tLAogICAgICAgIGNvbnN0IGNoYXIgICpvdXQsCiAgICAgICAg
Y29uc3QgY2hhciAgKmluLAogICAgICAgIGZsb2F0ICAgICAgIHRvbGVyYW5jZQoJKTsKCnZvaWQg
U19Hcm91cEFkZEFsbEZmYWNpbmcgKAogICAgICAgIFNoYXBlICAgICAgICZnZW9tLAogICAgICAg
IGNvbnN0IGNoYXIgICpvdXQsCiAgICAgICAgZmxvYXQgICAgICAgdG9sZXJhbmNlCgkpOwoKdm9p
ZCBTX0dyb3VwQWRkQWxsQmZhY2luZyAoCiAgICAgICAgU2hhcGUgICAgICAgJmdlb20sCiAgICAg
ICAgY29uc3QgY2hhciAgKm91dCwKICAgICAgICBmbG9hdCAgICAgICB0b2xlcmFuY2UKCSk7Cgp2
b2lkIFNfR3JvdXBTZXRNYXRlcmlhbCAoCiAgICAgICAgU2hhcGUgICAgICAgJmdlb20sCiAgICAg
ICAgY29uc3QgY2hhciAgKmdyb3VwLAogICAgICAgIGNvbnN0IGNoYXIgICptYXRlcmlhbAoJKTsK
CnZvaWQgU19Hcm91cEFkZFZlcnQgKAogICAgICAgIFNoYXBlICAgICAgICZnZW9tLAogICAgICAg
IGNvbnN0IGNoYXIgICpuYW1lLAogICAgICAgIGludCAgICAgICAgIHZJbmRleAoJKTsKCnZvaWQg
U19Hcm91cERlbGV0ZUdyb3VwRmZhY2luZyAoCiAgICAgICAgU2hhcGUgICAgICAgJmdlb20sCiAg
ICAgICAgY29uc3QgY2hhciAgKm91dCwKICAgICAgICBjb25zdCBjaGFyICAqaW4sCiAgICAgICAg
ZmxvYXQgICAgICAgdG9sZXJhbmNlCgkpOwoKdm9pZCBTX0dyb3VwRGVsZXRlR3JvdXBCZmFjaW5n
ICgKICAgICAgICBTaGFwZSAgICAgICAmZ2VvbSwKICAgICAgICBjb25zdCBjaGFyICAqb3V0LAog
ICAgICAgIGNvbnN0IGNoYXIgICppbiwKICAgICAgICBmbG9hdCAgICAgICB0b2xlcmFuY2UKCSk7
Cgp2b2lkIFNfR3JvdXBEZWxldGVBbGxGZmFjaW5nICgKICAgICAgICBTaGFwZSAgICAgICAmZ2Vv
bSwKICAgICAgICBjb25zdCBjaGFyICAqb3V0LAogICAgICAgIGZsb2F0ICAgICAgIHRvbGVyYW5j
ZQoJKTsKCnZvaWQgU19Hcm91cERlbGV0ZUFsbEJmYWNpbmcgKAogICAgICAgIFNoYXBlICAgICAg
ICZnZW9tLAogICAgICAgIGNvbnN0IGNoYXIgICpvdXQsCiAgICAgICAgZmxvYXQgICAgICAgdG9s
ZXJhbmNlCgkpOwoKdm9pZCBTX0dyb3VwRGVsZXRlVmVydCAoCiAgICAgICAgU2hhcGUgICAgICAg
Jmdlb20sCiAgICAgICAgY29uc3QgY2hhciAgKm5hbWUsCiAgICAgICAgaW50ICAgICAgICAgdklu
ZGV4CgkpOwoKdm9pZCBTX0dyb3VwU3dhcCAoCiAgICAgICAgU2hhcGUgICAgICAgJmdlb20sCiAg
ICAgICAgY29uc3QgY2hhciAgKmdyb3VwCgkpOwoKdm9pZCBTX0dyb3VwU3dhcEVsZW1zICgKICAg
ICAgICBTaGFwZSAgICAgICAmZ2VvbSwKICAgICAgICBjb25zdCBjaGFyICAqZ3JvdXAKCSk7Cgp2
b2lkIFNfR3JvdXBDb3B5ICgKICAgICAgICBTaGFwZSAgICAgICAmZ2VvbSwKICAgICAgICBjb25z
dCBjaGFyICAqc3JjLAogICAgICAgIGNvbnN0IGNoYXIgICpkZXN0CgkpOwoKdm9pZCBTX0dyb3Vw
RGVsZXRlQ29saW5lYXJUcmlhbmdsZXMgKAogICAgICAgIFNoYXBlICAgICAgICZnZW9tLAogICAg
ICAgIGNvbnN0IGNoYXIgICpncm91cAoJKTsKCnZvaWQgU19Hcm91cERlbGV0ZUNvbGluZWFyVmVy
dCAoCiAgICAgICAgU2hhcGUgICAgICAgJmdlb20sCiAgICAgICAgY29uc3QgY2hhciAgKmdyb3Vw
LAogICAgICAgIGZsb2F0ICAgICAgICB0b2xlcgoJKTsKCnZvaWQgU19Hcm91cERlbGV0ZVJhbmRv
bUVsZW0gKAogICAgICAgIFNoYXBlICAgICAgICZnZW9tLAogICAgICAgIGNvbnN0IGNoYXIgICpn
cm91cCwKICAgICAgICBmbG9hdCAgICAgICAgcGVyY2VudGFnZQoJKTsKCnZvaWQgU19Hcm91cERl
bGV0ZVJlZHVuZGFudEVsZW0gKAogICAgICAgIFNoYXBlICAgICAgICYgc2hhcGUsCiAgICAgICAg
Y29uc3QgY2hhciAgKiBncm91cAoJKTsKCnZvaWQgU19Hcm91cFJldmVyc2UgKAogICAgICAgIFNo
YXBlICAgICAgICZzaGFwZSwKICAgICAgICBjb25zdCBjaGFyICAqbmFtZQoJKTsKCnZvaWQgU19H
cm91cFBvaW50VG9MaW5lICgKICAgICAgICBTaGFwZSAgICAgICAmc2hhcGUsCiAgICAgICAgY29u
c3QgY2hhciAgKmdyb3VwLAogICAgICAgIGZsb2F0ICAgICAgIHRvbAoJKTsKCnZvaWQgU19Hcm91
cFNoYXJlICgKICAgICAgICBTaGFwZSAgICAgICAmZ2VvbSwKICAgICAgICBjb25zdCBjaGFyICAq
bmFtZSwKICAgICAgICBmbG9hdCAgICAgICB0b2wKCSk7Cgp2b2lkIFNfR3JvdXBTaGFyZU5vQ29s
bGFwc2UgKAogICAgICAgIFNoYXBlICAgICAgICZnZW9tLAogICAgICAgIGNvbnN0IGNoYXIgICpu
YW1lLAogICAgICAgIGZsb2F0ICAgICAgIHRvbAoJKTsKCnZvaWQgU19Hcm91cFVuc2hhcmUgKAog
ICAgICAgIFNoYXBlICAgICAgICZnZW9tLAogICAgICAgIGNvbnN0IGNoYXIgICpncm91cAoJKTsK
CmludCBTX0dyb3VwQ291bnRFbGVtICgKICAgICAgICBTaGFwZSAgICAgICAmc2hhcGUsCiAgICAg
ICAgY29uc3QgY2hhciAgKmdyb3VwCgkpOwoKdm9pZCBTX0dyb3VwQXZlUGxhbmUgKAogICAgICAg
IFNoYXBlICAgICAgICZzaGFwZSwKICAgICAgICBjb25zdCBjaGFyICAqbmFtZSwKICAgICAgICBN
X1ZlY3RvciAgICAqYXZlLAogICAgICAgIE1fVmVjdG9yNCAgICpwbGFuZQoJKTsKCnZvaWQgU19H
cm91cFRyYW5zbGF0ZSAoCiAgICAgICAgU2hhcGUgICAgICAgICAgICYgc2hhcGUsCiAgICAgICAg
Y29uc3QgY2hhciAgICAgICogbmFtZSwKICAgICAgICBjb25zdCBNX1ZlY3RvciAgJiB2CgkpOwoK
dm9pZCBTX0dyb3VwSW50ZXJuYWxQcmludCAoCiAgICAgICAgU2hhcGUgICAgICAgJmdlb20sCiAg
ICAgICAgRklMRSAgICAgICAgKmZwdHIsCiAgICAgICAgY29uc3QgY2hhciAgKm5hbWUsCiAgICAg
ICAgaW50ICAgICAgICAgZ2VvbU9ubHksCiAgICAgICAgaW50ICAgICAgICAgdHZlcnRPbmx5Cgkp
OwoKaW50IFNfR3JvdXBDb3VudEVsZW1zICgKICAgICAgICBTaGFwZSAgICAgICAmIGdlb20sCiAg
ICAgICAgY29uc3QgY2hhciAgKiBuYW1lCgkpOwoKaW50IFNfR3JvdXBDb3VudFZlcnRzICgKICAg
ICAgICBTaGFwZSAgICAgICAmIGdlb20sCiAgICAgICAgY29uc3QgY2hhciAgKiBuYW1lCgkpOwoK
dm9pZCBTX0dyb3VwU2NhblByaW50ICgKICAgICAgICBTaGFwZSAgICAgICAmIGdlb20sCiAgICAg
ICAgRklMRSAgICAgICAgKiBmcHRyLAogICAgICAgIGNvbnN0IGNoYXIgICogbmFtZSwKICAgICAg
ICBpbnQgICAgICAgICBicmllZgoJKTsKCnZvaWQgU19Hcm91cFByaW50ICgKICAgICAgICBTaGFw
ZSAgICAgICAmIGdlb20sCiAgICAgICAgRklMRSAgICAgICAgKiBmcHRyLAogICAgICAgIGNvbnN0
IGNoYXIgICogbmFtZSwKICAgICAgICBpbnQgICAgICAgICBicmllZgoJKTsKCnZvaWQgU19Hcm91
cFJlcGVhdCAoCiAgICAgICAgU2hhcGUgICAgICAgJiBnZW9tLAogICAgICAgIGNvbnN0IGNoYXIg
ICogbmFtZSwKICAgICAgICBmbG9hdCAgICAgICBzeCwKICAgICAgICBmbG9hdCAgICAgICBzeSwK
ICAgICAgICBmbG9hdCAgICAgICBzeiwKICAgICAgICBmbG9hdCAgICAgICByeCwKICAgICAgICBm
bG9hdCAgICAgICByeSwKICAgICAgICBmbG9hdCAgICAgICByeiwKICAgICAgICBmbG9hdCAgICAg
ICB0eCwKICAgICAgICBmbG9hdCAgICAgICB0eSwKICAgICAgICBmbG9hdCAgICAgICB0eiwKICAg
ICAgICBpbnQgICAgICAgICAqIG9yZGVyLAogICAgICAgIGludCAgICAgICAgIGJldHdlZW4KCSk7
Cgp2b2lkIFNfR3JvdXBSZXBlYXQgKAogICAgICAgIFNoYXBlICAgICAgICYgZ2VvbSwKICAgICAg
ICBjb25zdCBjaGFyICAqIG5hbWUsCiAgICAgICAgZmxvYXQgICAgICAgKiBzLAogICAgICAgIGZs
b2F0ICAgICAgICogciwKICAgICAgICBmbG9hdCAgICAgICAqIHQsCiAgICAgICAgaW50ICAgICAg
ICAgKiBvcmRlciwKICAgICAgICBpbnQgICAgICAgICBiZXR3ZWVuCgkpOwoKdm9pZCBTX0dyb3Vw
U2V0U21vb3RoICgKICAgICAgICBTaGFwZSAgICAgICAmZ2VvbSwKICAgICAgICBjb25zdCBjaGFy
ICAqZ3JvdXAsCiAgICAgICAgaW50ICAgICAgICAgc21vb3RoCgkpOwoKdm9pZCBTX0dyb3VwU2V0
TWFwICgKICAgICAgICBTaGFwZSAgICAgICAmZ2VvbSwKICAgICAgICBjb25zdCBjaGFyICAqZ3Jv
dXAsCiAgICAgICAgY29uc3QgY2hhciAgKm1hcAoJKTsKCnZvaWQgU19Hcm91cFNldFZlcnRNYXRl
cmlhbCAoCiAgICAgICAgU2hhcGUgICAgICAgJmdlb20sCiAgICAgICAgY29uc3QgY2hhciAgKmdy
b3VwLAogICAgICAgIGNvbnN0IGNoYXIgICptYXRlcmlhbAoJKTsKCnZvaWQgU19Hcm91cENsZWFy
VGV4ICgKICAgICAgICBTaGFwZSAgICAgICAgICAgJiBzaGFwZSwKICAgICAgICBjb25zdCBjaGFy
ICAgICAgKiBnTmFtZSwKICAgICAgICBTX1Byb3BlcnR5SUQgICAgdXZQcm9wCgkpOwoKdm9pZCBT
X0dyb3VwU3dhcFVWICgKICAgICAgICBTaGFwZSAgICAgICAgICAgJiBzaGFwZSwKICAgICAgICBj
b25zdCBjaGFyICAgICAgKiBnTmFtZSwKICAgICAgICBTX1Byb3BlcnR5SUQgICAgdXZQcm9wCgkp
OwoKdm9pZCBTX0dyb3VwUGVyUG9seVRleCAoCiAgICAgICAgU2hhcGUgICAgICAgICAgICYgc2hh
cGUsCiAgICAgICAgY29uc3QgY2hhciAgICAgICogZ05hbWUsCiAgICAgICAgU19Qcm9wZXJ0eUlE
ICAgIHV2UHJvcCwKICAgICAgICBpbnQgICAgICAgICAgICAgcmFuZG9tCgkpOwoKdm9pZCBTX0dy
b3VwQ3V0ICgKICAgICAgICBTaGFwZSAgICAgICAmIGdlb20sCiAgICAgICAgY29uc3QgY2hhciAg
KiBncm91cCwKICAgICAgICBTX0VsZW1SZWYgICBlbGVtCgkpOwoKdm9pZCBTX0dyb3VwUG9seU9y
ZGVyICgKICAgICAgICBTaGFwZSAgICAgICAgICAgJiBnZW9tLAogICAgICAgIGNvbnN0IGNoYXIg
ICAgICAqIGdyb3VwLAogICAgICAgIGNvbnN0IE1fVmVjdG9yICAmIHBvaW50CgkpOwoKdm9pZCBT
X0dyb3VwTmV3UmVwZWF0ICgKICAgICAgICBTaGFwZSAgICAgICAmIGdlb20sCiAgICAgICAgY29u
c3QgY2hhciAgKiBuYW1lLAogICAgICAgIGZsb2F0ICAgICAgICogcywKICAgICAgICBmbG9hdCAg
ICAgICAqIHIsCiAgICAgICAgZmxvYXQgICAgICAgKiB0LAogICAgICAgIGludCAgICAgICAgICog
b3JkZXIsCiAgICAgICAgaW50ICAgICAgICAgYmV0d2VlbiwKICAgICAgICBpbnQgICAgICAgICBn
ZW9tZXRyaWNNb2RlLAogICAgICAgIGludCAgICAgICAgIGluY3JlbWVudGFsTW9kZQoJKTsKCnZv
aWQgU19Hcm91cE5ld1JlcGVhdCAoCiAgICAgICAgU2hhcGUgICAgICAgJiBnZW9tLAogICAgICAg
IGNvbnN0IGNoYXIgICogbmFtZSwKICAgICAgICBmbG9hdCAgICAgICBzeCwKICAgICAgICBmbG9h
dCAgICAgICBzeSwKICAgICAgICBmbG9hdCAgICAgICBzeiwKICAgICAgICBmbG9hdCAgICAgICBy
eCwKICAgICAgICBmbG9hdCAgICAgICByeSwKICAgICAgICBmbG9hdCAgICAgICByeiwKICAgICAg
ICBmbG9hdCAgICAgICB0eCwKICAgICAgICBmbG9hdCAgICAgICB0eSwKICAgICAgICBmbG9hdCAg
ICAgICB0eiwKICAgICAgICBpbnQgICAgICAgICAqIG9yZGVyLAogICAgICAgIGludCAgICAgICAg
IGJldHdlZW4sCiAgICAgICAgaW50ICAgICAgICAgZ2VvbWV0cmljTW9kZSwKICAgICAgICBpbnQg
ICAgICAgICBpbmNyZW1lbnRhbE1vZGUKCSk7Cgp2b2lkIFNfR3JvdXBDbGVhckVsZW0gKAogICAg
ICAgIFNoYXBlICAgICAgICYsCiAgICAgICAgU19FbGVtUmVmICAgZWxlbQoJKTsKCnZvaWQgU19H
cm91cFJlbW92ZVJhbmRvbUVsZW0gKAogICAgICAgIFNoYXBlICAgICAgICZnZW9tLAogICAgICAg
IGNvbnN0IGNoYXIgICpncm91cCwKICAgICAgICBmbG9hdCAgICAgICAgcGVyY2VudGFnZQoJKTsK
CnZvaWQgU19Hcm91cFRyYW5zZmVyICgKICAgICAgICBTaGFwZSAgICAgICAmIGdlb20sCiAgICAg
ICAgY29uc3QgY2hhciAgKiBzcmMsCiAgICAgICAgY29uc3QgY2hhciAgKiBkZXN0CgkpOwoKdm9p
ZCBTX0dyb3VwUmVuYW1lICgKICAgICAgICBTaGFwZSAgICAgICAmIGdlb20sCiAgICAgICAgY29u
c3QgY2hhciAgKiBvbGROYW1lLAogICAgICAgIGNvbnN0IGNoYXIgICogbmV3TmFtZQoJKTsKCkxp
c3Q8TV9WZWN0b3IqPiBTX0dyb3VwR2V0VmVydFB0cnMgKAogICAgICAgIFNoYXBlICAgICAgICYg
c2hhcGUsCiAgICAgICAgY29uc3QgY2hhciAgKiBuYW1lCgkpOwoKaW50IFNfR3JvdXBFbXB0eSAo
CiAgICAgICAgU2hhcGUgICAgICAgJiBnZW9tLAogICAgICAgIGNvbnN0IGNoYXIgICogZ3JvdXAK
CSk7CgppbnQgU19Hcm91cFNldENvbG9yICgKICAgICAgICBTaGFwZSAgICAmZ2VvbSwKICAgICAg
ICBpbnQgICAgICBpbmRleCwKICAgICAgICBNX1ZlY3RvciAmY29sb3IKCSk7CgpNX1ZlY3RvciBT
X0dyb3VwR2V0Q29sb3IgKAogICAgICAgIFNoYXBlICZnZW9tLAogICAgICAgIGludCAgIGluZGV4
CgkpOwoKaW50IFNfR3JvdXBTZXRWaXNpYmxlICgKICAgICAgICBTaGFwZSAmZ2VvbSwKICAgICAg
ICBpbnQgICBpbmRleCwKICAgICAgICBpbnQgICB2aXNpYmxlCgkpOwoKaW50IFNfR3JvdXBTZXRW
aXNpYmxlICgKICAgICAgICBTaGFwZSAmZ2VvbSwKICAgICAgICBjb25zdCBjaGFyICpncm91cCwK
ICAgICAgICBpbnQgICB2aXNpYmxlCgkpOwoKaW50IFNfR3JvdXBHZXRWaXNpYmxlICgKICAgICAg
ICBTaGFwZSAmZ2VvbSwKICAgICAgICBpbnQgICBpbmRleAoJKTsKCmludCBTX0dyb3VwR2V0Vmlz
aWJsZSAoCiAgICAgICAgU2hhcGUgJmdlb20sCiAgICAgICAgY29uc3QgY2hhciAqZ3JvdXAKCSk7
CgpCT09MRUFOICpTX01hcmtWZXJ0c0luR3JvdXAgKAoJU2hhcGUgJnNoYXBlLCAKCVR3aW5lIGdy
b3VwTmFtZQoJKTsKCkxpc3Q8aW50PiBTX1ZlcnRzSW5Hcm91cEJ5RWxlbSAoCglTaGFwZSAmc2hh
cGUsIAoJVHdpbmUgZ3JvdXBOYW1lCgkpOwoKTGlzdDxpbnQ+IFNfVmVydHNJbkdyb3VwICgKCVNo
YXBlICZzaGFwZSwgCglUd2luZSBncm91cE5hbWUKCSk7CgpMaXN0PGludD4gU19VdnNJbkdyb3Vw
QnlFbGVtICgKCVNoYXBlICZzaGFwZSwgCglUd2luZSB1dlRhZywgCglUd2luZSBncm91cE5hbWUK
CSk7CgpMaXN0PGludD4gU19VdnNJbkdyb3VwICgKCVNoYXBlICZzaGFwZSwgCglUd2luZSB1dlRh
ZywgCglUd2luZSBncm91cE5hbWUKCSk7CgoKIAoKdm9pZCBTX0dyb3VwU3BoZXJlVGV4ICgKICAg
ICAgICBTaGFwZSAgICAgICAgICAgJmdlb20sCiAgICAgICAgY29uc3QgY2hhciAgICAgICpnTmFt
ZSwKICAgICAgICBTX1Byb3BlcnR5SUQgICAgdXZQcm9wLAogICAgICAgIGNvbnN0IE1fTWF0cml4
ICAmIG1hdHJpeAoJKTsKCnZvaWQgU19Hcm91cE9ydGhvVGV4ICgKICAgICAgICBTaGFwZSAgICAg
ICAgICAgJmdlb20sCiAgICAgICAgY29uc3QgY2hhciAgICAgICpnTmFtZSwKICAgICAgICBTX1By
b3BlcnR5SUQgICAgdXZQcm9wLAogICAgICAgIGNvbnN0IE1fTWF0cml4ICAmIG1hdHJpeAoJKTsK
CnZvaWQgU19Hcm91cERpc2NUZXggKAogICAgICAgIFNoYXBlICAgICAgICAgICAmZ2VvbSwKICAg
ICAgICBjb25zdCBjaGFyICAgICAgKmdOYW1lLAogICAgICAgIFNfUHJvcGVydHlJRCAgICB1dlBy
b3AsCiAgICAgICAgY29uc3QgTV9NYXRyaXggICYgbWF0cml4CgkpOwoKdm9pZCBTX0dyb3VwUmFk
Y3lsVGV4ICgKICAgICAgICBTaGFwZSAgICAgICAgICAgJmdlb20sCiAgICAgICAgY29uc3QgY2hh
ciAgICAgICpnTmFtZSwKICAgICAgICBTX1Byb3BlcnR5SUQgICAgdXZQcm9wLAogICAgICAgIGNv
bnN0IE1fTWF0cml4ICAmIG1hdHJpeAoJKTsKCnZvaWQgU19Hcm91cEN5bGluZGVyVGV4ICgKICAg
ICAgICBTaGFwZSAgICAgICAgICAgJmdlb20sCiAgICAgICAgY29uc3QgY2hhciAgICAgICpnTmFt
ZSwKICAgICAgICBTX1Byb3BlcnR5SUQgICAgdXZQcm9wLAogICAgICAgIGNvbnN0IE1fTWF0cml4
ICAmIG1hdHJpeAoJKTsKCnZvaWQgU19Hcm91cEN5bGluZGVyT3JEaXNjVGV4ICgKICAgICAgICBT
aGFwZSAgICAgICAgICAgJmdlb20sCiAgICAgICAgY29uc3QgY2hhciAgICAgICpnTmFtZSwKICAg
ICAgICBTX1Byb3BlcnR5SUQgICAgdXZQcm9wLAogICAgICAgIGNvbnN0IE1fTWF0cml4ICAmIG1h
dHJpeCwKICAgICAgICBpbnQgICAgICAgICAgICAgZGlzY0ZsYWcsCiAgICAgICAgaW50ICAgICAg
ICAgICAgIHJhZGN5bEZsYWcgCgkpOwoKdm9pZCBTX0dyb3VwQm94VGV4ICgKICAgICAgICBTaGFw
ZSAgICAgICAgICAgJmdlb20sCiAgICAgICAgY29uc3QgY2hhciAgICAgICpnTmFtZSwKICAgICAg
ICBTX1Byb3BlcnR5SUQgICAgdXZQcm9wLAogICAgICAgIGNvbnN0IE1fTWF0cml4ICAmIG1hdHJp
eAoJKTsKCnZvaWQgU19Hcm91cExpblRleCAoIAogICAgICAgIFNoYXBlICAgICAgICAgICAmZ2Vv
bSwgCiAgICAgICAgY29uc3QgY2hhciAgICAgICpUZXhHcm91cCwgCiAgICAgICAgU19Qcm9wZXJ0
eUlEICAgIHV2UHJvcCwgCiAgICAgICAgaW50ICAgICAgICAgICAgIGxvb3AsIAogICAgICAgIGlu
dCAgICAgICAgICAgICBzY2FsZSAKCSk7CgoKIAoKaW50IFNfUGVyc3BlY3RpdmVUZXggKAogICAg
U2hhcGUgICAgICAgICAgICYgZ2VvbSwKICAgIFNoYXBlICAgICAgICAgICAmIHJlZmVyZW5jZUdl
b20sCiAgICBjb25zdCBNX01hdHJpeCAgJiBjYW10cmFucywKICAgIGNvbnN0IE1fTWF0cml4ICAm
IG9ianRyYW5zLAogICAgZmxvYXQgICAgICAgICAgIGZvY2FsLAogICAgZmxvYXQgICAgICAgICAg
IGFwZXJ0dXJlLAogICAgZmxvYXQgICAgICAgICAgIGFzcGVjdCwKICAgIFNfR3JvdXBUYWcgICAg
ICBncm91cEJpdAoJKTsKCgogCgp2b2lkIFNfVGV4U2hhcmUgKAogICAgICAgIFNoYXBlICAgICAg
ICAgICAmZ2VvbSwKICAgICAgICBTX1Byb3BlcnR5SUQgICAgdXZQcm9wCgkpOwoKdm9pZCBTX1Rl
eENsZWFudXAgKAogICAgICAgIFNoYXBlICAgICAgICZnZW9tLAogICAgICAgIFNfUHJvcGVydHlJ
RCB1dlByb3AKCSk7Cgp2b2lkIFNfVGV4UHJpbnRBbGwgKAogICAgICAgIFNoYXBlICAgICAgICAg
ICAmIGdlb20sCiAgICAgICAgU19Qcm9wZXJ0eUlEICAgIHV2UHJvcCwKICAgICAgICBGSUxFICAg
ICAgICAgICAgKiBmcHRyLAogICAgICAgIGludCAgICAgICAgICAgICBicmllZgoJKTsKCnZvaWQg
U19UZXhSZXBsYWNlTGlzdCAoCiAgICAgICAgU2hhcGUgICAgICAgICAgICYsCiAgICAgICAgU19Q
cm9wZXJ0eUlEICAgIHV2UHJvcCwKICAgICAgICBjb25zdCBMaXN0PGludD4gJiBuZXdMaXN0LAog
ICAgICAgIFNfRWxlbVJlZiAgICAgICBlbGVtCgkpOwoKdm9pZCBTX1RleFJlcGxhY2VDb29yZHMg
KAogICAgICAgIFNoYXBlICAgICAgICAgICAgICAgICAgICYgc2hhcGUsCiAgICAgICAgU19Qcm9w
ZXJ0eUlEICAgICAgICAgICAgdXZQcm9wLAogICAgICAgIGNvbnN0IExpc3Q8TV9WZWN0b3IyPiAg
ICYgbmV3TGlzdCwKICAgICAgICBTX0VsZW1SZWYgICAgICAgICAgICAgICBlbGVtCgkpOwoKdm9p
ZCBTX1RleFB1cmdlICgKICAgICAgICBTaGFwZSAgICAgICAgICAgJiBzaGFwZSwKICAgICAgICBT
X1Byb3BlcnR5SUQgICAgdXZQcm9wCgkpOwoKCiAKClNoYXBlIFNfU2hhcGVMaW5lICgKICAgICAg
ICBpbnQgYXhpcwoJKTsKClNoYXBlIFNfU2hhcGVNZXNoICgKICAgICAgICBpbnQgZHgsCiAgICAg
ICAgaW50IGR5CgkpOwoKU2hhcGUgU19TaGFwZUxhdHRpY2UgKAogICAgICAgIGludCBkeCwKICAg
ICAgICBpbnQgZHksCiAgICAgICAgaW50IGR6CgkpOwoKU2hhcGUgU19TaGFwZUJveCAoCiAgICAg
ICAgdm9pZAoJKTsKClNoYXBlIFNfU2hhcGVQb2x5ICgKICAgICAgICB2b2lkCgkpOwoKU2hhcGUg
U19TaGFwZUFyYyAoCiAgICAgICAgZmxvYXQgICBkZWdyZWUsCiAgICAgICAgaW50ICAgICBudW1i
ZXIKCSk7CgpTaGFwZSBTX1NoYXBlU3BoZXJlICgKICAgICAgICBpbnQgZHosCiAgICAgICAgaW50
IGR5CgkpOwoKU2hhcGUgU19TaGFwZUN5bGluZGVyICgKICAgICAgICBpbnQgbnVtCgkpOwoKU2hh
cGUgU19TaGFwZURpc2MgKAogICAgICAgIGludCBuQ2lyYywKICAgICAgICBpbnQgblJhZAoJKTsK
ClNoYXBlIFNfU2hhcGVQb2ludCAoCiAgICAgICAgY29uc3QgTV9WZWN0b3IgJiB2ZWMKCSk7CgpT
aGFwZSBTX1NoYXBlQW55TGluZSAoCiAgICAgICAgY29uc3QgTV9WZWN0b3IgJiB2MSwKICAgICAg
ICBjb25zdCBNX1ZlY3RvciAmIHYyCgkpOwoKU2hhcGUgU19TaGFwZUJ1bmNoYVBvaW50cyAoCiAg
ICAgICAgY29uc3QgTGlzdDxNX1ZlY3Rvcj4gJiB2ZXJ0cwoJKTsKCgogCgpNX1ZlY3RvciBTX1Zl
cnRHZXQgKAogICAgICAgIFNoYXBlICAgICAgICYgZ2VvbSwKICAgICAgICBTX0VsZW1SZWYgICBl
bGVtLAogICAgICAgIGludCAgICAgICAgIHZJbmRleAoJKTsKCnZvaWQgU19WZXJ0U2V0ICgKICAg
ICAgICBTaGFwZSAgICAgICAgICAgJmdlb20sCiAgICAgICAgU19FbGVtUmVmICAgICAgIGVsZW0s
CiAgICAgICAgaW50ICAgICAgICAgICAgIHZJbmRleCwKICAgICAgICBjb25zdCBNX1ZlY3RvciAg
JiB2ZWMKCSk7Cgp2b2lkIFNfVmVydFNldCAoCiAgICAgICAgU2hhcGUgICAgICAgICAgICZnZW9t
LAogICAgICAgIGludCAgICAgICAgICAgICB2SW5kZXgsCiAgICAgICAgY29uc3QgTV9WZWN0b3Ig
ICYgdmVjCgkpOwoKdm9pZCBTX1ZlcnRUcmFuc2Zvcm0gKAogICAgICAgIFNoYXBlICAgICAgICAg
ICAgICAgJiBnZW9tLAogICAgICAgIFNfRWxlbVJlZiAgICAgICAgICAgZWxlbSwKICAgICAgICBp
bnQgICAgICAgICAgICAgICAgIHZlcnQsCiAgICAgICAgY29uc3QgTV9NYXRyaXggJiAgICBtYXQK
CSk7Cgp2b2lkIFNfVmVydEluc2VydCAoCiAgICAgICAgU2hhcGUgICAgICAgICAgICAgICAmZ2Vv
bSwKICAgICAgICBTX0VsZW1SZWYgICAgICAgICAgIGVsZW0sCiAgICAgICAgaW50ICAgICAgICAg
ICAgICAgICB2SW5kZXgsCiAgICAgICAgY29uc3QgTV9WZWN0b3IgJiAgICB2ZXJ0CgkpOwoKdm9p
ZCBTX1NldEluc2VydCAoCiAgICAgICAgU2hhcGUgICAgICAgICAgICAgICAmZ2VvbSwKICAgICAg
ICBTX0VsZW1SZWYgICAgICAgICAgIGVsZW0sCiAgICAgICAgaW50ICAgICAgICAgICAgICAgICB2
SW5kZXgsCiAgICAgICAgaW50ICAgICAgICAgICAgICAgICBzZXQKCSk7Cgp2b2lkIFNfVmVydFVu
c2hhcmUgKAogICAgICAgIFNoYXBlICAgICAgICZnZW9tLAogICAgICAgIFNfRWxlbVJlZiAgIGVs
ZW0sCiAgICAgICAgaW50ICAgICAgICAgdkluZGV4CgkpOwoKaW50IFNfVmVydElzU2hhcmVkICgK
ICAgICAgICBTaGFwZSAgICAgICAmZ2VvbSwKICAgICAgICBpbnQgICAgICAgICB2SW5kZXgKCSk7
Cgp2b2lkIFNfVmVydFByaW50ICgKICAgICAgICBTaGFwZSAgICAgICAmc2hhcGUsCiAgICAgICAg
U19FbGVtUmVmICAgZWxlbSwKICAgICAgICBpbnQgICAgICAgICB2SW5kZXgsCiAgICAgICAgRklM
RSAgICAgICAgKiBmcHRyLAogICAgICAgIGludCAgICAgICAgIGJyaWVmLAogICAgICAgIGludCAg
ICAgICAgIHNoYXJlZEluZm8sCiAgICAgICAgaW50ICAgICAgICAgdm10bEluZm8KCSk7Cgp2b2lk
IFNfVmVydEFkZCAoCiAgICAgICAgU2hhcGUgICAgICAgICAgICYgZ2VvbSwKICAgICAgICBTX0Vs
ZW1SZWYgICAgICAgZWxlbSwKICAgICAgICBjb25zdCBNX1ZlY3RvciAgJiB2ZXJ0CgkpOwoKdm9p
ZCBTX1ZlcnREZWxldGUgKAogICAgICAgIFNoYXBlICAgICAgICYgZ2VvbSwKICAgICAgICBTX0Vs
ZW1SZWYgICBlbGVtLAogICAgICAgIGludCAgICAgICAgIHZJbmRleCwKICAgICAgICBpbnQgICAg
ICAgICBzaGFyZWQKCSk7Cgp2b2lkIFNfVmVydEdldEdyb3VwQml0cyAoCiAgICAgICAgU2hhcGUg
ICAgICAgJiBnZW9tLAogICAgICAgIFNfR3JvdXBUYWcgICogYml0cwoJKTsKCnZvaWQgU19WZXJ0
TGluayAoCiAgICAgICAgU2hhcGUgICAgICAgJiBnZW9tLAogICAgICAgIFNfRWxlbVJlZiAgIGVs
ZW0xLAogICAgICAgIFNfRWxlbVJlZiAgIGVsZW0yLAogICAgICAgIGludCAgICAgICAgIGUxZiwK
ICAgICAgICBpbnQgICAgICAgICBlMWwsCiAgICAgICAgaW50ICAgICAgICAgZTJmLAogICAgICAg
IGludCAgICAgICAgIGUybCwKICAgICAgICBjb25zdCBjaGFyICAqdHlwZQoJKTsKCgogCgp2b2lk
IFNfV2luZ0dldFJlbFZlcnRJbmRpY2VzICgKICAgICAgICBTaGFwZSAgICAgICAmIGdlb20sCiAg
ICAgICAgV2luZ0VkZ2UgICAgKiBlZGdlLAogICAgICAgIGludCAgICAgICAgICogaWksCiAgICAg
ICAgaW50ICAgICAgICAgKiBqagoJKTsKCldpbmdFZGdlICpTX1dpbmdMaXN0QnVpbGQgKAogICAg
ICAgIFNoYXBlICYgZ2VvbSAKCSk7Cgp2b2lkIFNfV2luZ0xpc3RGcmVlICgKICAgICAgICBXaW5n
RWRnZSAqZWRnZXMgCgkpOwoKCiAKCmludCBTX1dyaXRlRmlsZUFsbCAoCiAgICAgICAgY29uc3Qg
Y2hhciAgKmZpbGUsCiAgICAgICAgU2hhcGUgICAgICAmZ2VvbQoJKTsKCmludCBTX1dyaXRlRmls
ZUdlb20gKAogICAgICAgIGNvbnN0IGNoYXIgICpmaWxlLAogICAgICAgIFNoYXBlICAgICAgJmdl
b20KCSk7CgpUd2luZSBTX0ZpbmRGaWxlICggCiAgICAgICAgY29uc3QgY2hhciAqZmlsZU5hbWUg
CgkpOwoKCiAKCnZvaWQgIFNfV3JhcEN5bCAoCiAgICAgICAgU2hhcGUgJmdlb20sCiAgICAgICAg
Y29uc3QgY2hhciAqc3JjLAogICAgICAgIGNvbnN0IGNoYXIgKmRlc3QgCgkpOwoKdm9pZCAgU19X
cmFwT3J0aG8gKAogICAgICAgIFNoYXBlICZnZW9tLAogICAgICAgIGNvbnN0IGNoYXIgKnNyYywK
ICAgICAgICBjb25zdCBjaGFyICpkZXN0IAoJKTsKCnZvaWQgIFNfV3JhcFJpbmcgKAogICAgICAg
IFNoYXBlICZnZW9tLAogICAgICAgIGNvbnN0IGNoYXIgKnNyYywKICAgICAgICBjb25zdCBjaGFy
ICpkZXN0IAoJKTsKCnZvaWQgIFNfV3JhcFNocmluayAoCiAgICAgICAgU2hhcGUgJmdlb20sCiAg
ICAgICAgY29uc3QgY2hhciAqc3JjLAogICAgICAgIGNvbnN0IGNoYXIgKmRlc3QgCgkpOwoKdm9p
ZCAgU19XcmFwU3BoZXJlICgKICAgICAgICBTaGFwZSAmZ2VvbSwKICAgICAgICBjb25zdCBjaGFy
ICpzcmMsCiAgICAgICAgY29uc3QgY2hhciAqZGVzdCAKCSk7CgoKIAoKdm9pZCBTX0VsZW1BcHBl
bmQgKAogICAgICAgIFNoYXBlICAgICAgICZzaGFwZSwKICAgICAgICBTX0VsZW1SZWYgICBlbGVt
LAogICAgICAgIFNoYXBlICAgICAgICZvdXRTaGFwZQoJKTsKCnZvaWQgU19FbGVtVHJhbnNmb3Jt
ICgKICAgICAgICBTaGFwZSAgICAgICAgICAgICAgICZzaGFwZSwKICAgICAgICBTX0VsZW1SZWYg
ICAgICAgICAgIGVsZW0sCiAgICAgICAgY29uc3QgTV9NYXRyaXggJiAgICBtYXRyaXgKCSk7Cgp2
b2lkIFNfRWxlbVNjYW4gKAogICAgICAgIFNoYXBlICAgICAgICZzaGFwZSwKICAgICAgICBTX0Vs
ZW1SZWYgICBlbGVtLAogICAgICAgIE1fVmVjdG9yICAgICptaW4sCiAgICAgICAgTV9WZWN0b3Ig
ICAgKm1heCwKICAgICAgICBNX1ZlY3RvciAgICAqY2VudGVyCgkpOwoKTV9WZWN0b3IgU19FbGVt
QXZlICgKICAgICAgICBTaGFwZSAgICAgICAmc2hhcGUsCiAgICAgICAgU19FbGVtUmVmICAgZWxl
bQoJKTsKCnZvaWQgU19FbGVtRGVsUmVkdW5kYW50ICgKICAgICAgICBTaGFwZSAgICAgICAmc2hh
cGUsCiAgICAgICAgU19FbGVtUmVmICAgZWxlbSwKICAgICAgICBmbG9hdCAgICAgICB0b2wKCSk7
Cgp2b2lkIFNfRWxlbUFkZExpc3QgKAogICAgICAgIFNoYXBlICAgICAgICZzaGFwZSwKICAgICAg
ICBpbnQgICAgICAgICAqc2V0cywKICAgICAgICBpbnQgICAgICAgICBudW1iLAogICAgICAgIGNv
bnN0IGNoYXIgICp0eXBlLAogICAgICAgIFNfR3JvdXBUYWcgIGdyb3VwCgkpOwoKU19FbGVtUmVm
IFNfRWxlbUNvcHkgKAogICAgICAgIFNoYXBlICAgICAgICZzaGFwZSwKICAgICAgICBTX0VsZW1S
ZWYgICBlbGVtCgkpOwoKdm9pZCBTX0VsZW1SZXZlcnNlICgKICAgICAgICBTaGFwZSAgICAgICAm
c2hhcGUsCiAgICAgICAgU19FbGVtUmVmICAgZWxlbQoJKTsKClNfRWxlbVJlZiBTX0VsZW1TcGxp
dCAoCiAgICAgICAgU2hhcGUgICAgICAgJnNoYXBlLAogICAgICAgIFNfRWxlbVJlZiAgIGVsZW0s
CiAgICAgICAgaW50ICAgICAgICAgcHQxLAogICAgICAgIGludCAgICAgICAgIHB0MgoJKTsKCnZv
aWQgU19FbGVtVW5zaGFyZSAoCiAgICAgICAgU2hhcGUgICAgICAgJnNoYXBlLAogICAgICAgIFNf
RWxlbVJlZiAgIGVsZW0KCSk7Cgp2b2lkIFNfRWxlbUF2ZVBsYW5lICgKICAgICAgICBTaGFwZSAg
ICAgICAmc2hhcGUsCiAgICAgICAgU19FbGVtUmVmICAgZWxlbSwKICAgICAgICBNX1ZlY3RvciAg
ICAqYXZlLAogICAgICAgIE1fVmVjdG9yNCAgICpwbGFuZQoJKTsKCnZvaWQgU19FbGVtVHJhbnNs
YXRlICgKICAgICAgICBTaGFwZSAgICAgICAmc2hhcGUsCiAgICAgICAgU19FbGVtUmVmICAgZWxl
bSwKICAgICAgICBjb25zdCBNX1ZlY3RvciAgJiB2CgkpOwoKdm9pZCBTX0VsZW1JbnRlcm5hbFBy
aW50ICgKICAgICAgICBTaGFwZSAgICAgICAmZ2VvbSwKICAgICAgICBTX0VsZW1SZWYgICBlbGVt
LAogICAgICAgIEZJTEUgICAgICAgICpmcHRyLAogICAgICAgIGludCAgICAgICAgIGdlb21Pbmx5
LAogICAgICAgIGludCAgICAgICAgIHR2ZXJ0T25seQoJKTsKCnZvaWQgU19FbGVtU2NhblByaW50
ICgKICAgICAgICBTaGFwZSAgICAgICAmIHNoYXBlLAogICAgICAgIFNfRWxlbVJlZiAgIGVsZW0s
CiAgICAgICAgRklMRSAgICAgICAgKiBmcHRyLAogICAgICAgIGludCAgICAgICAgIGJyaWVmCgkp
OwoKdm9pZCBTX0VsZW1QcmludCAoCiAgICAgICAgU2hhcGUgICAgICAgJiBzaGFwZSwKICAgICAg
ICBTX0VsZW1SZWYgICBlbGVtLAogICAgICAgIEZJTEUgICAgICAgICogZnB0ciwKICAgICAgICBp
bnQgICAgICAgICBnZW9tT25seSwKICAgICAgICBpbnQgICAgICAgICBicmllZiwKICAgICAgICBp
bnQgICAgICAgICBzaGFyZWRJbmZvLAogICAgICAgIGludCAgICAgICAgIG5vVmVydEluZm8sCiAg
ICAgICAgaW50ICAgICAgICAgdm10bEluZm8KCSk7Cgp2b2lkIFNfRWxlbUxpbmsgKAogICAgICAg
IFNoYXBlICAgICAgICYgZ2VvbSwKICAgICAgICBTX0VsZW1SZWYgICBlMSwKICAgICAgICBTX0Vs
ZW1SZWYgICBlMiwKICAgICAgICBjb25zdCBjaGFyICAqIHR5cGUsCiAgICAgICAgaW50ICAgICAg
ICAgY2xvc2VkLAogICAgICAgIGludCAgICAgICAgIG9mZnNldCwKICAgICAgICBpbnQgICAgICAg
ICB3ZWxkCgkpOwoKdm9pZCBTX0VsZW1TaGlmdCAoCiAgICAgICAgU2hhcGUgICAgICAgJiBzaGFw
ZSwKICAgICAgICBTX0VsZW1SZWYgICBlbGVtLAogICAgICAgIGludCAgICAgICAgIGNvdW50Cgkp
OwoKdm9pZCBTX0VsZW1TdWJkaXZpZGVTZWcgKAogICAgICAgIFNoYXBlICAgICAgICYgZ2VvbSwK
ICAgICAgICBTX0VsZW1SZWYgICBlbGVtLAogICAgICAgIGludCAgICAgICAgIHBudDEsCiAgICAg
ICAgaW50ICAgICAgICAgbnVtYgoJKTsKCnZvaWQgU19FbGVtU3ViZGl2aWRlICgKICAgICAgICBT
aGFwZSAgICAgICAmIHNoYXBlLAogICAgICAgIFNfRWxlbVJlZiAgIGVsZW0sCiAgICAgICAgaW50
ICAgICAgICAgbnVtYlUsCiAgICAgICAgaW50ICAgICAgICAgbnVtYlYKCSk7Cgp2b2lkIFNfRWxl
bUNvcHlJbmZvICgKICAgICAgICBTaGFwZSAgICAgICAmLAogICAgICAgIFNfRWxlbVJlZiAgIGZy
b20sCiAgICAgICAgU19FbGVtUmVmICAgdG8KCSk7Cgp2b2lkIFNfRWxlbUN1dCAoIAogICAgICAg
IFNoYXBlICAgICAgICAgICAgICAgICAgICYgZ2VvbSwKICAgICAgICBTX0VsZW1SZWYgICAgICAg
ICAgICAgICBlbGVtLAogICAgICAgIGNvbnN0IExpc3Q8TV9WZWN0b3I+ICAgICYga25pZmUKCSk7
Cgp2b2lkIFNfRWxlbUN1dFdpdGhTaW1wbGVLbmlmZSAoCiAgICAgICAgU2hhcGUgICAgICAgICAg
ICYgZ2VvbSwKICAgICAgICBTX0VsZW1SZWYgICAgICAgZWxlbSwKICAgICAgICBMaXN0PE1fVmVj
dG9yMj4ga25pZmUsCiAgICAgICAgZmxvYXQgICAgICAgICAgIGVwcwoJKTsKCnZvaWQgU19FbGVt
Q29ubmVjdEFmdGVyQ3V0ICgKICAgICAgICBTaGFwZSAgICAgICAgICAgICAgICAgICAmIGdlb20s
CiAgICAgICAgU19FbGVtUmVmICAgICAgICAgICAgICAgZWxlbSwKICAgICAgICBjb25zdCBMaXN0
PE1fVmVjdG9yMj4gICAmIGtuaWZlLAogICAgICAgIGZsb2F0ICAgICAgICAgICAgICAgICAgIGVw
cwoJKTsKCnZvaWQgU19FbGVtRmluZEJyaWRnZUFmdGVyQ3V0ICgKICAgICAgICBjb25zdCBMaXN0
PE1fVmVjdG9yMj4gICAmIGVsZW0sCiAgICAgICAgY29uc3QgTGlzdDxNX1ZlY3RvcjI+ICAgJiBj
b29yZHMsCiAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgZWxlbUVuZCwKICAgICAgICBp
bnQgICAgICAgICAgICAgICAgICAgICBpbmMsCiAgICAgICAgaW50ICAgICAgICAgICAgICAgICAg
ICAgKmVQb2ludCwKICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAqY29vcmRQb2ludCwK
ICAgICAgICBmbG9hdCAgICAgICAgICAgICAgICAgICBlcHMKCSk7Cgp2b2lkIFNfRWxlbURlbGV0
ZSAoCiAgICAgICAgU2hhcGUgICAgICAgJiBnZW9tLAogICAgICAgIFNfRWxlbVJlZiAgICYgZWxl
bQoJKTsKCmludCBTX0VsZW1BbGxWZXJ0c0hhdmVUZXh0dXJlICgKICAgICAgICBTaGFwZSAgICAg
ICAgICAgJiAsCiAgICAgICAgU19FbGVtUmVmICAgICAgICYgZWxlbSwKICAgICAgICBTX1Byb3Bl
cnR5SUQgICAgdXZQcm9wCgkpOwoKdm9pZCBTX0VsZW1JbnRlcnAgKAogICAgICAgIFNoYXBlICAg
ICAgICYgZ2VvbSwKICAgICAgICBTX0VsZW1SZWYgICBlbGVtMSwKICAgICAgICBTX0VsZW1SZWYg
ICBlbGVtMiwKICAgICAgICBmbG9hdCAgICAgICBwY3QKCSk7Cgp2b2lkIFNfRWxlbUNvbm5lY3Qg
KAogICAgICAgIFNoYXBlICAgICAgICYgZ2VvbSwKICAgICAgICBTX0VsZW1SZWYgICBlbGVtMSwK
ICAgICAgICBpbnQgICAgICAgICB2MSwKICAgICAgICBTX0VsZW1SZWYgICBlbGVtMiwKICAgICAg
ICBpbnQgICAgICAgICB2MgoJKTsKCnZvaWQgU19FbGVtQ2VudGVyVHJpYW5nICgKICAgICAgICBT
aGFwZSAgICAgICAmIHNoYXBlLAogICAgICAgIFNfRWxlbVJlZiAgIGVsZW0KCSk7Cgp2b2lkIFNf
RWxlbVRyaWFuZyAoCiAgICAgICAgU2hhcGUgICAgICAgJiBzaGFwZSwKICAgICAgICBTX0VsZW1S
ZWYgICBlbGVtCgkpOwoKaW50IFNfRWxlbU5laWdoYm9yICgKICAgICAgICBTaGFwZSAgICAgICAm
ICwKICAgICAgICBTX0VsZW1SZWYgICBlbGVtMSwKICAgICAgICBTX0VsZW1SZWYgICBlbGVtMgoJ
KTsKCmludCBTX0VsZW1DbGlwTGluZSAoCiAgICAgICAgU2hhcGUgICAgICAgJmdlb20sCiAgICAg
ICAgU19FbGVtUmVmICAgZWxlbSwKICAgICAgICBjb25zdCBNX1ZlY3RvciAgICAmdjAsCiAgICAg
ICAgY29uc3QgTV9WZWN0b3IgICYgdjEKCSk7Cgp2b2lkIFNfRWxlbU5ld1JlcGVhdCAoCiAgICAg
ICAgU2hhcGUgICAgICAgJiBnZW9tLAogICAgICAgIFNfRWxlbVJlZiAgIGVsZW0sCiAgICAgICAg
ZmxvYXQgICAgICAgKiBzLAogICAgICAgIGZsb2F0ICAgICAgICogciwKICAgICAgICBmbG9hdCAg
ICAgICAqIHQsCiAgICAgICAgaW50ICAgICAgICAgKiBvcmRlciwKICAgICAgICBpbnQgICAgICAg
ICBiZXR3ZWVuLAogICAgICAgIGludCAgICAgICAgIGdlb21ldHJpY01vZGUsCiAgICAgICAgaW50
ICAgICAgICAgaW5jcmVtZW50YWxNb2RlCgkpOwoKdm9pZCBTX0VsZW1OZXdSZXBlYXQgKAogICAg
ICAgIFNoYXBlICAgICAgICYgZ2VvbSwKICAgICAgICBTX0VsZW1SZWYgICBlbGVtLAogICAgICAg
IGZsb2F0ICAgICAgIHN4LAogICAgICAgIGZsb2F0ICAgICAgIHN5LAogICAgICAgIGZsb2F0ICAg
ICAgIHN6LAogICAgICAgIGZsb2F0ICAgICAgIHJ4LAogICAgICAgIGZsb2F0ICAgICAgIHJ5LAog
ICAgICAgIGZsb2F0ICAgICAgIHJ6LAogICAgICAgIGZsb2F0ICAgICAgIHR4LAogICAgICAgIGZs
b2F0ICAgICAgIHR5LAogICAgICAgIGZsb2F0ICAgICAgIHR6LAogICAgICAgIGludCAgICAgICAg
ICogb3JkZXIsCiAgICAgICAgaW50ICAgICAgICAgYmV0d2VlbiwKICAgICAgICBpbnQgICAgICAg
ICBnZW9tZXRyaWNNb2RlLAogICAgICAgIGludCAgICAgICAgIGluY3JlbWVudGFsTW9kZQoJKTsK
CmludCBTX0VsZW1Ub3VjaCAoCiAgICAgICAgU2hhcGUgICAgICAgJiAsCiAgICAgICAgU19FbGVt
UmVmICAgZWxlbTEsCiAgICAgICAgU19FbGVtUmVmICAgZWxlbTIKCSk7Cgp2b2lkIFNfRWxlbUV4
dHJlbWUgKAogICAgICAgIFNoYXBlICAgICAgICYgZ2VvbSwKICAgICAgICBTX0VsZW1SZWYgICBl
bGVtLAogICAgICAgIGludCAgICAgICAgIGF4aXMsCiAgICAgICAgaW50ICAgICAgICAgKiBsZWFz
dCwKICAgICAgICBpbnQgICAgICAgICAqIG1vc3QKCSk7CgppbnQgU19FbGVtR2V0SW5kZXggKAog
ICAgICAgIFNoYXBlICAgICAgICYgc2hhcGUsCiAgICAgICAgU19FbGVtUmVmICAgJiBlbGVtCgkp
OwoKU19FbGVtUmVmIFNfRWxlbU9mZnNldCAoCiAgICAgICAgU2hhcGUgICAgICAgJiBnZW9tLAog
ICAgICAgIFNfRWxlbVJlZiAgIGVsZW0sCiAgICAgICAgY29uc3QgY2hhciAgKm9mZnNldEdyb3Vw
LAogICAgICAgIE1fVmVjdG9yICAgICYgb2Zmc2V0RGlyLAogICAgICAgIGZsb2F0ICAgICAgIG9m
ZnNldERpc3QsCiAgICAgICAgZmxvYXQgICAgICAgYmV2ZWxEaXN0LAogICAgICAgIGZsb2F0ICAg
ICAgIGJldmVsRmFjdAoJKTsKCmludCBTX0VsZW1TZWxmSW50ZXJzZWN0VmVyaWZ5MkQgKAogICAg
ICAgIFNoYXBlICAgICAgICAgICAmIGdlb20sCiAgICAgICAgU19FbGVtUmVmICAgICAgIGVsZW0s
CiAgICAgICAgTV9WZWN0b3IgICAgICAgICYgbm9ybWFsCgkpOwoKaW50IFNfRWxlbVNlbGZJbnRl
cnNlY3RGaXgyRCAoCiAgICAgICAgU2hhcGUgICAgICAgICAgICYgZ2VvbSwKICAgICAgICBTX0Vs
ZW1SZWYgICAgICAgZWxlbSwKICAgICAgICBjb25zdCBjaGFyICAgICAgKmdyb3VwLAogICAgICAg
IGNvbnN0IGNoYXIgICAgICAqb2Zmc2V0R3JvdXAsCiAgICAgICAgTV9WZWN0b3IgICAgICAgICYg
bm9ybWFsLAogICAgICAgIGNvbnN0IGludCAgICAgICBqdW5rLAogICAgICAgIGNvbnN0IGZsb2F0
ICAgICBlbGVtRGlyCgkpOwoKZmxvYXQgU19FbGVtQ29tcHV0ZUVwc2lsb24gKAogICAgICAgIFNo
YXBlICAgICAgICAgICAgICAgICAgICYgZ2VvbSwKICAgICAgICBTX0VsZW1SZWYgICAgICAgICAg
ICAgICBlbGVtCgkpOwoKTV9WZWN0b3IgU19FbGVtR2V0Q29sb3IgKAogICAgICAgIFNoYXBlICAg
ICAgICYgc2hhcGUsCiAgICAgICAgU19FbGVtUmVmICAgJiBlbGVtCgkpOwoKCiAKCnZvaWQgU19D
bGlwUGxhbmUgKAogICAgICAgIFNoYXBlICAgICAgICYgZ2VvbSwKICAgICAgICBNX1ZlY3RvcjQg
ICBwbGVxCgkpOwoKCiAKClNoYXBlIFNfR2VvbUNoaXNlbCAoCiAgICAgICAgU2hhcGUgICAgICAg
JiBzaGFwZSwKICAgICAgICBjb25zdCBjaGFyICAqY2hpc2VsR3JvdXAsCiAgICAgICAgaW50ICAg
ICAgICAgbnVtSXRlcnMsCiAgICAgICAgZmxvYXQgICAgICAgYmV2ZWxEaXN0LAogICAgICAgIGZs
b2F0ICAgICAgIGJldmVsRmFjdAoJKTsKCgogCgppbnQgU19Db2xsZWN0R3JvdXBCeVBhcnQgKAog
ICAgICAgIFNoYXBlICAgICAgICZzaGFwZSwKICAgICAgICBjb25zdCBjaGFyICAqcGFydE5hbWUs
CiAgICAgICAgY29uc3QgY2hhciAgKmdyb3VwTmFtZQoJKTsKCmludCBTX0NvbGxlY3RHcm91cEJ5
TWFwICgKICAgICAgICBTaGFwZSAgICAgICAmc2hhcGUsCiAgICAgICAgY29uc3QgY2hhciAgKm1h
cE5hbWUsCiAgICAgICAgY29uc3QgY2hhciAgKmdyb3VwTmFtZQoJKTsKCmludCBTX0NvbGxlY3RH
cm91cEJ5U21vb3RoICgKICAgICAgICBTaGFwZSAgICAgICAmc2hhcGUsCiAgICAgICAgaW50ICAg
ICAgICAgc21vb3RoTnVtYmVyLAogICAgICAgIGNvbnN0IGNoYXIgICpncm91cE5hbWUKCSk7CgoK
IAoKTGlzdDxNX1ZlY3Rvcj4gU19NYWtlVmVydE5vcm1hbHMgKAogICAgICAgIFNoYXBlICAgJnNo
YXBlCgkpOwoKCiAKCnZvaWQgU19HZW9tT3V0bGluZSAoCiAgICAgICAgU2hhcGUgJiBnZW9tCgkp
OwoKCiAKCmludCBTX1R5cGVQdXNoICgKICAgICAgICBTaGFwZSAgICAgICAmIHNoYXBlLAogICAg
ICAgIGNvbnN0IGNoYXIgICpuYW1lCgkpOwoKCiAKCnZvaWQgIFNfR3JvdXBJbnRlcnNlY3QgKAog
ICAgICAgIFNoYXBlICZnZW9tLAogICAgICAgIGNvbnN0IGNoYXIgKmdyb3VwLAogICAgICAgIGZs
b2F0IHRvbCwKICAgICAgICBpbnQgY3V0ICAgICAgCgkpOwoKCiAKCmludCBTX0dyb3VwQm9yZGVy
ICgKICAgICAgICBTaGFwZSAmZ2VvbSwKICAgICAgICBjb25zdCBjaGFyICpncm91cCwKICAgICAg
ICBpbnQgcG9seSAKCSk7CgoKIAoKdm9pZCBTX1NvcnRWZXJ0cyAoCiAgICAgICAgTGlzdDxNX1Zl
Y3Rvcj4gICZ2ZXJ0cywKICAgICAgICBpbnQgICAgICAgICAgICAgKm15SW5kZXgsCiAgICAgICAg
ZmxvYXQgICAgICAgICAgIHRvbCwKICAgICAgICBpbnQgICAgICAgICAgICAgbXVsdGkKCSk7CgoK
IAoKdm9pZCBTX0Vycm9yICggCiAgICAgICAgY29uc3QgY2hhciAqIHN0cmluZywKICAgICAgICAu
Li4KCSk7Cgp2b2lkIFNfU2V0RXJyb3JGdW5jdGlvbiAoCiAgICAgICAgdm9pZCAoKmZuKSggY29u
c3QgY2hhciAqLCBpbnQgKQoJKTsKCnZvaWQgU19GcHJpbnRmICgKICAgICAgICBGSUxFICogICAg
ICAgICAgZnAsCiAgICAgICAgY29uc3QgY2hhciAqICAgIHN0cmluZywKICAgICAgICAuLi4KCSk7
CgoKIAoKaW50IFNfR3JvdXBPZmZzZXQgKAogICAgICAgIFNoYXBlICAgICAgICYgZ2VvbSwKICAg
ICAgICBjb25zdCBjaGFyICAqZ3JvdXAsCiAgICAgICAgY29uc3QgY2hhciAgKm9mZnNldEdyb3Vw
LAogICAgICAgIE1fVmVjdG9yICAgICYgb2Zmc2V0LAogICAgICAgIGZsb2F0ICAgICAgIG9mZnNl
dERpc3QsCiAgICAgICAgZmxvYXQgICAgICAgYmV2ZWxEaXN0LAogICAgICAgIGZsb2F0ICAgICAg
IGJldmVsRmFjdCwKICAgICAgICBpbnQgKiAgICAgICB2ZXJpZnksCiAgICAgICAgaW50ICogICAg
ICAgZml4LAogICAgICAgIGludCAgICAgICAgIGp1bmsKCSk7CgoKIAoKaW50IFNfRmlsZUxpc3RQ
cm9wZXJ0aWVzICgKICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwKICAgICAgICBMaXN0PFR3
aW5lPiAmIGNsYXNzZXMsCiAgICAgICAgTGlzdDxUd2luZT4gJiBuYW1lcwoJKTsKCnZvaWQgKlNf
RmlsZVJlYWRHbG9iYWxEYXRhICgKICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwKICAgICAg
ICBjb25zdCBjaGFyICpjbGFzc05hbWUsCiAgICAgICAgY29uc3QgY2hhciAqbmFtZQoJKTsKCk5F
VEZJTEVfRklMRSAqU19GaWxlT3BlblNoYXBlICgKICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFt
ZQoJKTsKCmludCBTX0ZpbGVHZXRCb3VuZGluZ0JveCAoCiAgICAgICAgY29uc3QgY2hhciAqZmls
ZW5hbWUsCiAgICAgICAgTV9WZWN0b3IgICAgJiBtaW4sCiAgICAgICAgTV9WZWN0b3IgICAgJiBt
YXgKCSk7CgppbnQgU19GaWxlR2V0QW5pbWF0aW5nQm91bmRpbmdCb3ggKAogICAgICAgIGNvbnN0
IGNoYXIgKmZpbGVuYW1lLAogICAgICAgIGZsb2F0ICAgICAgIGZyYW1lLAogICAgICAgIE1fVmVj
dG9yICAgICYgbWluLAogICAgICAgIE1fVmVjdG9yICAgICYgbWF4CgkpOwoKCiAKCkxpc3Q8Zmxv
YXQ+IFNfQW5pbWF0aW5nSW5GaWxlICggCiAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUKCSk7
Cgp2b2lkICpTX0FuaW1hdGluZ1JlYWRSYXdEYXRhICgKICAgIE5FVEZJTEVfRklMRSAqZmlsZSwK
ICAgIHZvaWQgKmR1bW15CgkpOwoKaW50IFNfQW5pbWF0aW5nUmVhZEZpbGUgKAogICAgICAgIFNo
YXBlICYgICAgIHNoYXBlLAogICAgICAgIGNvbnN0IGNoYXIgICpmaWxlbmFtZSwKICAgICAgICBm
bG9hdCAgICAgICBmcmFtZQoJKTsKCkxpc3Q8ZmxvYXQ+IFNfQW5pbWF0aW5nTGlzdEZyYW1lcyAo
CiAgICAgICAgU2hhcGUgJiBzaGFwZQoJKTsKCnZvaWQgU19BbmltYXRpbmdBZGRGcmFtZSAoCiAg
ICAgICAgU2hhcGUgJiAgICAgICAgIHNoYXBlLAogICAgICAgIGZsb2F0ICAgICAgICAgICBmcmFt
ZSwKICAgICAgICBjb25zdCBMaXN0PE1fVmVjdG9yPiAmIHZlcnRzCgkpOwoKdm9pZCBTX0FuaW1h
dGluZ0RlbGV0ZUZyYW1lICgKICAgICAgICBTaGFwZSAmICAgICAgICAgc2hhcGUsCiAgICAgICAg
ZmxvYXQgICAgICAgICAgIGZyYW1lCgkpOwoKdm9pZCBTX0FuaW1hdGluZ0NvcHlDdXJyZW50VG9G
cmFtZSAoCiAgICAgICAgU2hhcGUgJiAgICAgICAgIHNoYXBlLAogICAgICAgIGZsb2F0ICAgICAg
ICAgICBmcmFtZQoJKTsKCmludCBTX0FuaW1hdGluZ0NvcHlGcmFtZVRvQ3VycmVudCAoCiAgICAg
ICAgU2hhcGUgJiAgICAgICAgIHNoYXBlLAogICAgICAgIGZsb2F0ICAgICAgICAgICBmcmFtZQoJ
KTsKCmludCBTX0FuaW1hdGluZ0NvcHlGcmFtZVRvQ3VycmVudCAoCiAgICAgICAgU2hhcGUgJiAg
ICAgICAgIHNoYXBlLAogICAgICAgIGZsb2F0ICYgICAgICAgICBmcmFtZSwKICAgICAgICBmbG9h
dCAgICAgICAgICAgZnVkZ2VGYWN0b3IKCSk7CgoKIAoKVHdpbmUgU19GaW5kU3RyZWFtRmlsZSAo
IAogICAgICAgIGNvbnN0IGNoYXIgKmZpbGVOYW1lIAoJKTsKCgogCgpMaXN0PGludD4gU19IYWly
UGF0Y2hlc0luR3JvdXBCeUVsZW0gKAoJU2hhcGUgJnNoYXBlLCAKCVR3aW5lIGdyb3VwTmFtZQoJ
KTsKCgogCgoKIAoKCiAKCgogCgoKCgoKIyA0MDAgIi9zb2Z0d2FyZS90aGFsaWEvaC9zaGFwZS5o
IiAyCgoKIyAyNyAiaC9ucmh5X2NsYXNzVXNlTWFwLmgiIDIKCgogCgoKIAoKCgoKCiAKCgoKCiMg
MSAiaC9ucmh5X2NsYXNzVGV4LmgiIDEKCiAKCgoKCgoKCgoKCgoKCgoKDAogCgoKCiAKCgogCgoK
CgoKIAoKCgoKCiAKIAogCgogCnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBjbGFzcyBOUkhZX21hdGNo
Owp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4gY2xhc3MgTlJIWV9hbHBoYWxpc3Q7CgogCgpzdHJ1Y3Qg
TlJIWV9jbGFzc1RleDpwdWJsaWMgTlJIWV9jbGFzc09iamVjdCB7CiAgICB0eXBlZGVmIE5SSFlf
Y2xhc3NPYmplY3QgaW5oZXJpdGVkOwogICAgdHlwZWRlZiBOUkhZX2FscGhhbGlzdDxOUkhZX2Ns
YXNzVGV4PiBhbHBoYWxpc3Q7CiAgICBmcmllbmQgTlJIWV9tYXRjaCA8TlJIWV9jbGFzc1RleD47
CiAgICBmcmllbmQgTlJIWV9hbHBoYWxpc3Q8TlJIWV9jbGFzc1RleD47CgogICAgdm9pZCBkZXRh
Y2goTlJIWV9kZXBlbmREYXRhICopOwpwcm90ZWN0ZWQ6CiAgICB2b2lkICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbml0aWFsaXplICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CnB1
YmxpYzoKCiAgICBOUkhZX2NsYXNzQ2FtZXJhICAgICAgICAgICAgICAgICpjYW1lcmE7CiAgICAK
ICAgIFR3aW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZUYWc7CgogICAgVHdpbmUgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzcmNVdlRhZzsKICAgIFR3aW5lICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZTsKICAgIE5SSFlfY2xhc3NNb2RlbCAgICAgICAgICAgICAgICAgKnNv
dXJjZTsKICAgIFR3aW5lCQkJICAgIGZpbGVuYW1lOwoKICAgICAKICAgIE5SSFlfY2xhc3NUZXgg
KAogICAgICAgIGNvbnN0IENIQVIgICpuYW1lCiAgICAgICAgKTsKICAgIE5SSFlfY2xhc3NUZXgg
KAogICAgICAgIGNvbnN0IENIQVIgICAgICAqbmFtZSwKICAgICAgICBOUkhZX2NsYXNzVGV4ICAg
KmNsb25lRnJvbQogICAgICAgICk7CiAgICBOUkhZX2NsYXNzVGV4ICgKICAgICAgICB2b2lkIAog
ICAgICAgICk7CgogICAgfk5SSFlfY2xhc3NUZXggKAogICAgICAgIHZvaWQgCiAgICAgICAgKTsK
CiAgICAgCiAgICBzdGF0aWMgY29uc3QgQ0hBUiAgICAgICAgICAgICAgICpQcmludFNlbGZDbGFz
c25hbWUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAoIk5SSFlfY2xhc3NU
ZXgiKTsgfQoKICAgICAKCiAgICBzdGF0aWMgSU5UICAgICAgICAgICAgICAgICAgICAgIEdldFNl
bGZDbGFzc1R5cGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAoVEhJTkdf
VFlQRV9URVgpOyB9CgogICAgc3RhdGljIE5SSFlfYnVuY2g8TlJIWV9jbGFzc1RleD4gKkZpbmQg
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUiAgKm5h
bWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICB2b2lkICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSZW5hbWUgKAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgQ0hBUiAgKm5ld05hbWUKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKCiAgICBOUkhZX2NsYXNzVGhpbmcgICAgICAgICAgICAgICAgICpD
bG9uZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFS
ICAqbmV3TmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIGNv
bnN0IENIQVIgICAgICAgICAgICAgICAgICAgICAgKlByaW50RGVyaXZlZENsYXNzT2ZTZWxmVHlw
ZU5hbWUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAoInRleCIpOyB9CiAg
ICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldERlcml2ZWRDbGFzc09mU2VsZlR5
cGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAoVEhJTkdfVFlQRV9URVgp
OyB9CgogICAgIAoKCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJl
Q3JlYXRlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5S
SFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlRnVsbFN0
YXRlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlf
Q2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlRnVsbFN0YXRl
UGFja2VkICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5S
SFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlRGVsZXRl
ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xh
c3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIHZvaWQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRGVzY3JpYmVDYW1lcmEgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
dm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZVRhZyAoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJl
YW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2Ny
aWJlU3JjVGFnICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNz
IE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIHZvaWQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRGVzY3JpYmVUeXBlICgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVTb3VyY2UgKAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rl
c2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEZXNjcmliZUZpbGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgIAoKICAg
IEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0Q2FtZXJhICgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5SSFlfYnVuY2ggPE5SSFlfY2xhc3NDYW1lcmE+
ICAgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIEJPT0xFQU4g
ICAgICAgICAgICAgICAgICAgICAgICAgU2V0Q2FtZXJhICgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5SSFlfY2xhc3NDYW1lcmEgICAgKgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApOwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNldHV2VGFnICggVHdpbmUgbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsgdGhpcy0+dXZUYWcgPSBuYW1lOyAgIH0KCiAgICB2b2lkICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTZXRTcmNVdlRhZyAoIFR3aW5lIG5hbWUpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7IHRoaXMtPnNyY1V2VGFnID0gbmFtZTsgICAgfQoK
ICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldFR5cGUgKCBUd2luZSBuYW1l
KTsKCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXRGaWxlbmFtZSAoIFR3
aW5lIG5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHRoaXMt
PmZpbGVuYW1lID0gbmFtZTsgICAgfQoKICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAg
ICAgU2V0U291cmNlICggTlJIWV9jbGFzc01vZGVsICopOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgCiAgICAgCgogICAgIAoKICAgICAKCiAgICAgCiAgICBa
T09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNldFNvbGlkICgKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBuZXdTb2xpZFZhbHVlCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1cm4gKDAgKTsgfQogICAg
IAogICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRTb2xpZCAoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApIHsgcmV0dXJuICgoUkVBTCkwLjApOyB9CgogICAgQk9PTEVBTiAg
ICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVEcmF3aW5nKCBUd2luZSBuYW1lICk7CiAgICBC
T09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIEFkZERyYXdpbmcoIFR3aW5lIG5hbWUgKTsK
ICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdFRleChGSUxFICpmcCwgY29u
c3QgTGlzdDxUd2luZT4gJmxzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAogfTsKCiAKCiAKCiMgNDMgImgvbnJoeV9jbGFzc1VzZU1hcC5oIiAyCgoKCgplbnVtIHVz
ZW1hcFR5cGUgeyBTVElDS0VSLCBNT0RVTEFURSB9OwoKdHlwZWRlZiBzdHJ1Y3QgewoKICAgIGJv
b2wgICAgICAgICAgICAgICAgICAgIG5lYXJlc3ROb3RTZXQ7CiAgICBCT09MRUFOICAgICAgICAg
ICAgICAgICBtaXBtYXBVcGRhdGVkOwoKICAgIEdMWENvbnRleHQgICAgICAgICAgICAgIGNvbnRl
eHRJRDsKICAgIEdMdWludCAgICAgICAgICAgICAgICAgIHRleHR1cmVJRDsKCn0gdGV4dHVyZVN0
YXRlOwoKCgoKCgoKCgogCiAKIAoKIAp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4gY2xhc3MgTlJIWV9t
YXRjaDsKdGVtcGxhdGUgPGNsYXNzIFR5cGU+IGNsYXNzIE5SSFlfYWxwaGFsaXN0OwoKc3RydWN0
IE5SSFlfY2xhc3NVc2VNYXA6cHVibGljIE5SSFlfY2xhc3NUaGluZyB7Cgpwcml2YXRlOgogICAg
dHlwZWRlZiBOUkhZX2NsYXNzVGhpbmcgaW5oZXJpdGVkOwogICAgdHlwZWRlZiBOUkhZX2FscGhh
bGlzdDxOUkhZX2NsYXNzVXNlTWFwPiBhbHBoYWxpc3Q7CiAgICBmcmllbmQgTlJIWV9tYXRjaCA8
TlJIWV9jbGFzc1VzZU1hcD47CiAgICBmcmllbmQgTlJIWV9hbHBoYWxpc3Q8TlJIWV9jbGFzc1Vz
ZU1hcD47CgogICAgIAoKICAgIHN0YXRpYyBpbnQJbWFwcGVkVGV4dHVyZXNUb3RhbDsKICAgIHN0
YXRpYyBpbnQJbWF4VGV4dHVyZVNpemU7CgogICAgdm9pZCBkZXRhY2goTlJIWV9kZXBlbmREYXRh
ICopOwoKICAgIHNob3J0IAkJX21hcENvb2tpZTsKCiAgICBOUkhZX2RlcGVuZERhdGEgCSpfYWRk
ZWRNYXN0ZXI7CiAgICB1bnNpZ25lZCBjaGFyICAgCSpfc2F2ZWRGb3JSZWZsZWN0aW9uOwogICAg
TlJIWV9jbGFzc1RleCAgICAgICAqX3RleDsKCiAgICBib29sIHJlZmxlY3RNYXBBbGxvYygpOyAK
ICAgIApwcm90ZWN0ZWQ6CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5p
dGlhbGl6ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIE5SSFlfY2xhc3NNYXAg
ICAgICAgICAgICAgICAgICAgKm1hcDsKICAgIE5SSFlfY2xhc3NSb3RvRGF0YSAgICAgICAgICAg
ICAgKm1hcERhdGE7CiAgICAKICAgIHVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgICAgICAgKmFy
cmF5OyAgCiAgICBMaXN0PFVfQ0hBUiAqPiAgICAgICAgICAgICAgICAgIG1pcG1hcDsgIAogICAg
dm9pZCBwb3N0V29ybGRUcmF2ZXJzZSAoKTsKCnB1YmxpYzoKCiAgICBOUkhZX0Nvb2tpZSAJCSAg
ICBfVXNlTWFwQ29va2llOwoKICAgIExpc3Q8dGV4dHVyZVN0YXRlPiAgICAgICAgICAgICAgc3Rh
dGU7CgogICAgU19Qcm9wZXJ0eUlEICAgICAgICAgICAgICAgICAgICB1dlByb3A7CiAgICBMaXN0
PFZFUlQyRD4gICAgICAgICAgICAgICAgICAgICp1dkxpc3Q7CiAgICBJTlQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHV2SW5kZXg7CgogICAgdXNlbWFwVHlwZSAgICAgICAgICAgICAgICAg
ICAgICB0eXBlOyAgICAgICAKICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4
V2lkdGg7CiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleEhlaWdodDsKICAg
IElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlwV2lkdGg7ICAgICAgICAKICAgIElO
VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlwSGVpZ2h0OyAgICAgICAKICAgIFR3aW5l
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTmFtZTsKICAgIFJFQUwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGlsZUZhY3RvclsyXTsKCiAgICBNX01hdHJpeCAgICAgICAgICAgICAg
ICAgICAgICAgIHBpY21hdHJpeDsJIAoJCQkJCQkgCgkJCQkJCSAKCQkJCQkJIAoJCQkJCQkgCiAg
ICBMaXN0PFR3aW5lPgkJCV93cmVuT3B0czsKICAgIExpc3Q8VHdpbmU+CQkJX3dyZW5QYXJhbXM7
CgogICAgTV9NYXRyaXgJCQlfdGV4TWF0cml4OwogICAgTV9NYXRyaXgJCQlfbWF0cml4OwoKICAg
IEJPT0xFQU4JCQlfcmVmbGVjdDsKICAgIEJPT0xFQU4JCQlfdXBkYXRlUmVmbGVjdE1hcDsKCiAg
ICBJTlQJCQkJX2JveDsJCQkgICAgCgogICAgIAogICAgTlJIWV9jbGFzc1VzZU1hcCAoCiAgICAg
ICAgY29uc3QgQ0hBUiAgKm5hbWUKICAgICAgICApOwogICAgTlJIWV9jbGFzc1VzZU1hcCAoCiAg
ICAgICAgY29uc3QgQ0hBUiAgICAgICAgICAqbmFtZSwKICAgICAgICBOUkhZX2NsYXNzVXNlTWFw
ICAgICpjbG9uZUZyb20KICAgICAgICApOwogICAgTlJIWV9jbGFzc1VzZU1hcCAoCiAgICAgICAg
dm9pZCAKICAgICAgICApOwoKICAgIH5OUkhZX2NsYXNzVXNlTWFwICgKICAgICAgICB2b2lkIAog
ICAgICAgICk7CgogICAgIAogICAgc3RhdGljIGNvbnN0IENIQVIgICAgICAgICAgICAgICAqUHJp
bnRTZWxmQ2xhc3NuYW1lICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1cm4gKCJO
UkhZX2NsYXNzVXNlTWFwIik7IH0KCiAgICAgCgogICAgc3RhdGljIElOVCAgICAgICAgICAgICAg
ICAgICAgICBHZXRTZWxmQ2xhc3NUeXBlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgeyBy
ZXR1cm4gKFRISU5HX1RZUEVfVVNFTUFQKTsgfQoKICAgIHN0YXRpYyBOUkhZX2J1bmNoPE5SSFlf
Y2xhc3NVc2VNYXA+ICpGaW5kICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IENIQVIgICpuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICk7CiAKCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5hbWUgKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUiAgKm5ld05hbWUK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBOUkhZX2NsYXNzVGhp
bmcgICAgICAgICAgICAgICAgICpDbG9uZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBDSEFSICAqbmV3TmFtZQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICApOwoKICAgIGNvbnN0IENIQVIgICAgICAgICAgICAgICAgICAgICAgKlByaW50
RGVyaXZlZENsYXNzT2ZTZWxmVHlwZU5hbWUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7
IHJldHVybiAoInVzZW1hcCIpOyB9CiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdldERlcml2ZWRDbGFzc09mU2VsZlR5cGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7
IHJldHVybiAoVEhJTkdfVFlQRV9VU0VNQVApOyB9CgogICAgIAoKCiAgICB2b2lkICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIERlc2NyaWJlUGljbWF0cml4ICgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIERlc2NyaWJlQ3JlYXRlICgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIERlc2NyaWJlRnVsbFN0YXRlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIERlc2NyaWJlRnVsbFN0YXRlUGFja2VkICgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIERlc2NyaWJlRGVsZXRlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIERlc2NyaWJlTWFwICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2Ny
aWJlVHlwZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBO
UkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZVRpbGUg
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFz
c0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK
ICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVUYWcgKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJl
U3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVUZXggKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRGVzY3JpYmVNYXRyaXggKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRGVzY3JpYmVSZWZsZWN0ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIERlc2NyaWJlQm94ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERl
c2NyaWJlVXNlTWFwT24gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3Jp
YmVXcmVuT3B0cyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFz
cyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZVdy
ZW5QYXJhbXMgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Mg
TlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVXcmVu
RnVsbFN0YXRlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNz
IE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCiAgICAgCgogICAgTlJIWV9j
bGFzc01hcCAgICAgICAgICAgKkdldE1hcCgpe3JldHVybiBtYXA7fQogICAgQk9PTEVBTiAgICAg
ICAgICAgICAgICAgU2V0TWFwICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUkhZ
X2J1bmNoIDxOUkhZX2NsYXNzTWFwPiAgKm5ld01hcFB0cgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKTsKICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgIFNldE1hcCAoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTlJIWV9jbGFzc01hcCAgICpuZXdNYXBQdHIKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICk7CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgIFNldFRp
bGUgKFJFQUwgICAqdGlsZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgdGhp
cy0+dGlsZUZhY3RvclswXSA9IHRpbGVbMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMtPnRpbGVGYWN0b3JbMV0gPSB0aWxlWzFdOyB9IAogICAgdm9pZCAgICAgICAg
ICAgICAgICAgICAgIFNldE1hcFR5cGUoIElOVCBtYXBUeXBlKTsKICAgIHZvaWQgICAgICAgICAg
ICAgICAgICAgICBTZXRVVnRhZyAoVHdpbmUgdXZUYWcpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeyAgIHRoaXMtPnRhZ05hbWUgPSB1dlRhZzsgfSAKICAgIHZvaWQgICAgICAgICAg
ICAgICAgICAgICBTZXRVViggIFNfUHJvcGVydHlJRCAgICB1dlByb3AsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBMaXN0PFZFUlQyRD4gICAgKnV2TGlzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UICAgICAgICAgICAgIHV2SW5kZXgpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgIHRoaXMtPnV2UHJvcCA9IHV2UHJvcDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+dXZMaXN0ID0gdXZMaXN0OyAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+dXZJbmRleCA9IHV2SW5k
ZXg7IH0gICAgICAgICAgICAgICAgICAgICAgCiAgICBib29sICAgICAgICAgICAgICAgICAgICBJ
bml0VGV4dHVyZSAoIHZvaWQgKTsgICAgCiAgICBCT09MRUFOICAgICAgICAgICAgICAgICBpbml0
VGV4dHVyZVNldCAoKTsgIAogICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgbWlwbWFwQ2FsYygp
OwogICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgYXJyYXlDYWxjICggdm9pZCApOyAgCiAgICBC
T09MRUFOICAgICAgICAgICAgICAgICB0ZXh0dXJlQXJyYXlDYWxjICggdm9pZCApOyAgIAogICAg
Qk9PTEVBTiAgICAgICAgICAgICAgICAgcmVzaXplTWlwbWFwICggIFVfQ0hBUiAgKmluLCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgICAgIGluV2lkdGgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UICAgICBpbkhl
aWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVX0NIQVIg
ICpvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UICAg
ICBvdXRXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
TlQgICAgIG91dEhlaWdodAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsgIAoKICAgIExp
c3Q8VkVSVDJEPiAgICAgICAgICAgICpHZXR1dkxpc3QoIHZvaWQgKSB7IHJldHVybiAodXZMaXN0
KTsgfQogICAgSU5UICAgICAgICAgICAgICAgICAgICAgR2V0dXZJbmRleCggdm9pZCApIHsgcmV0
dXJuICh1dkluZGV4KTsgfQoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICBjb250ZXh0QWRk
ICggR0xYQ29udGV4dCBjb250ZXh0ICk7CiAgICBHTHVpbnQgICAgICAgICAgICAgICAgICBjb250
ZXh0UmVnaXN0ZXJlZCAoIEdMWENvbnRleHQgY29udGV4dCApOwogICAgdGV4dHVyZVN0YXRlICAg
ICAgICAgICAgKkdldFRleHR1cmVTdGF0ZSggR0xYQ29udGV4dCBjb250ZXh0KTsKICAgIHZvaWQg
ICAgICAgICAgICAgICAgICAgICBEZWxldGVUZXh0dXJlT2JqZWN0KCBHTFhDb250ZXh0IGNvbnRl
eHQpOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgIGZpbmRNYXhUZXh0dXJlKCB2b2lkICk7
CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgIFVwZGF0ZVdyZW5PcHRzKCAKIAkJCQlUd2lu
ZSAgICAgICAgICAmdCwKCQkJCUxpc3Q8VHdpbmU+ICAgICZ3CiAgICApOwogICAgdm9pZCAgICAg
ICAgICAgICAgICAgICAgIFJlbW92ZVdyZW5PcHRzKCAKIAkJCQlUd2luZSAgICAgICAgICAmdAog
ICAgKTsKCiAgICBCT09MRUFOIAkJICAgIFNldFRleCAoCgkJCQlOUkhZX2J1bmNoIDxOUkhZX2Ns
YXNzVGV4PiAgICAgICpuZXdUZXhzCiAgICApOwoKICAgIEJPT0xFQU4gCQkgICAgU2V0VGV4ICgK
ICAgIAkJCQlOUkhZX2NsYXNzVGV4ICAgICAgICpuZXdUZXgKICAgICk7CgogICAgTlJIWV9jbGFz
c1RleCAgICAgICAgICAgKkdldFRleCAodm9pZCkKICAgIAkJCQl7cmV0dXJuIF90ZXg7fQoKICAg
IHZvaWQgIAkJICAgIHJlZmxlY3RNaXBtYXAgKAoJCQkgICAgCXZvaWQKICAgICk7CgogICAgdm9p
ZCAgCQkgICAgcmVmbGVjdEJveE1pcG1hcCAoCgkJCSAgICAJdm9pZAogICAgKTsKCiAgICBCT09M
RUFOIAkJU2V0UmVmbGVjdCAoCiAgICAJCQkJQk9PTEVBTiByZWZsZWN0CiAgICApOwoKICAgIEJP
T0xFQU4gCQlTZXRCb3ggKAogICAgCQkJCWludCBib3gKICAgICk7CgogICAgVHdpbmUgCQlCb3hE
ZXNjcmlwdGlvbiAoCiAgICAJCQkJQk9PTEVBTiBjb21tYQogICAgKTsKCiAgICB2b2lkICAgICAg
ICAgICAgICAgICBNYXJrTWFwRGlydHkoIEdMWENvbnRleHQgY29udGV4dCk7CgogICAgdm9pZCAg
ICAgICAgICAgICAgICBMaXN0VXNlTWFwKEZJTEUgKmZwLCBjb25zdCBMaXN0PFR3aW5lPiAmbHMp
Owp9OwoKIAoKIAoKIyAzNyAibnJoeS9OUkhZX0FjY2Vzcy5jIiAyCgojIDEgImgvbnJoeV9jbGFz
c0Z1ci5oIiAxCgogCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiaC9ucmh5X3RlbXBsYXRlQnVuY2gu
aCIgMQoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgwKIAoKCgpjbGFzcyBOUkhZX2NsYXNzVGhpbmc7
CmNsYXNzIE5SSFlfY2xhc3NDaGFubmVsOwoKIAoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KY2xh
c3MgTlJIWV9idW5jaCB7CnByaXZhdGU6CiAgICAgCgogICAgdm9pZCAgICAgICAgICAgICBjYWxs
b2NQdHJzICgpOwogICAgdm9pZCAgICAgICAgICAgICBmcmVlUHRycyAoKTsKICAgIHZvaWQgICAg
ICAgICAgICAgcmVzZXRQdHJzICgpOwogICAgdm9pZCAgICAgICAgICAgICByZWFsbG9jUHRycyAo
aW50IG5ld1NpemUpOwoKICAgICAKCgogICAgWk9PTEVBTiAgICAgICAgIGZyZWVQdHJDb250ZW50
czsKCnB1YmxpYzoKICAgICAKICAgIFR3aW5lICAgICAgICAgICBUb2tlbjsKCiAgICAgCgoKCgoK
CgoKCgoKCgogIAogICAgVHlwZSAgICAgICAgICAgICoqUHRyczsKICAgIFR3aW5lICAgICAgICAg
ICAqRXh0cmFzOwogICAgTlJIWV9jbGFzc0NoYW5uZWwgKioqQ2hhbm5lbHM7CiAgICBpbnQgICAg
ICAgICAgICAgKk51bWJlckVhY2hDaGFubmVsOwogICAgaW50ICAgICAgICAgICAgIFNpemVQdHJz
OwoKICAgICAKICAgIGludCAgICAgICAgICAgICBOdW1iZXJQdHJzOwoKICAgICAKCiAgICBaT09M
RUFOICAgICAgICAgT2ZmRmxhZzsKCiAgICAgCiAgICBpbnQgICAgICAgICAgICAgRXJyb3JDb2Rl
OwoKICAgICAKCiAgICBOUkhZX2J1bmNoICgKICAgICAgICB2b2lkIAogICAgICAgICk7CiAgICBO
UkhZX2J1bmNoICgKICAgICAgICBUd2luZSAgICAgICAmdG9rZW4KICAgICAgICApOwogICAgTlJI
WV9idW5jaCAoCiAgICAgICAgY29uc3QgY2hhciAgKnRva2VuCiAgICAgICAgKTsKICAgIE5SSFlf
YnVuY2ggKAogICAgICAgIFR3aW5lICAgICAgICZ0b2tlbiwKICAgICAgICBjb25zdCBpbnQgICBz
aXplCiAgICAgICAgKTsKICAgIH5OUkhZX2J1bmNoICgKICAgICAgICB2b2lkIAogICAgICAgICk7
CgogICAgIAogICAgdm9pZCAgICAgICAgIENvcHlUb2tlbiAoCiAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAgICAgICAgICAqdG9CZUNvcGllZAogICAgICAgICAgICAgICAgKSB7IFRva2Vu
ID0gdG9CZUNvcGllZDsgfQoKICAgICAKCgogICAgdm9pZCAgICAgICAgIENvcHlQdHIgKAogICAg
ICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgICAgKnRvQmVDb3BpZWQKICAgICAgICAg
ICAgICAgICk7CiAgICB2b2lkICAgICAgICAgQ29weVB0ciAoCiAgICAgICAgICAgICAgICAgICAg
VHlwZSAgICAgICAgICAgICAgICAqdG9CZUNvcGllZCwKICAgICAgICAgICAgICAgICAgICBUd2lu
ZSAgICAgICAgICAgICAgICZleHRyYQogICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAg
ICBDb3B5UHRycyAoCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgICAqKnRv
QmVDb3BpZWQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ICAgICAgICAgICBudW1iZXJU
b0NvcHkKICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgQ29weVB0cnMgKAogICAg
ICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgICAgKip0b0JlQ29waWVkLAogICAgICAg
ICAgICAgICAgICAgIFR3aW5lICAgICAgICAgICAgICAgKmV4dHJhcywKICAgICAgICAgICAgICAg
ICAgICBjb25zdCBpbnQgICAgICAgICAgIG51bWJlclRvQ29weQogICAgICAgICAgICAgICAgKTsK
CiAgICAgCgogICAgdm9pZCAgICAgICAgIEFwcGVuZFB0ciAoCiAgICAgICAgICAgICAgICAgICAg
VHlwZSAgICAgICAgICAgICAgICAqdG9BcHBlbmQKICAgICAgICAgICAgICAgICk7CiAgICB2b2lk
ICAgICAgICAgQXBwZW5kUHRyICgKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAg
ICAgICp0b0FwcGVuZCwKICAgICAgICAgICAgICAgICAgICBUd2luZSAgICAgICAgICAgICAgICZl
eHRyYQogICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICBBcHBlbmRQdHIgKAogICAg
ICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgICAgKnRvQXBwZW5kLAogICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgKmV4dHJhCiAgICAgICAgICAgICAgICApOwog
ICAgdm9pZCAgICAgICAgIEFwcGVuZFB0cnMgKAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAg
ICAgICAgICAgICAgKip0b0FwcGVuZCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgICAg
ICAgICAgIG51bWJlclRvQXBwZW5kCiAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAg
IEFwcGVuZFB0cnMgKAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgICAgKip0
b0FwcGVuZCwKICAgICAgICAgICAgICAgICAgICBUd2luZSAgICAgICAgICAgICAgICpleHRyYSwK
ICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgICAgICAgICAgIG51bWJlclRvQXBwZW5kCiAg
ICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIAogICAgIAogICAgWk9PTEVBTiAg
ICAgUmVtb3ZlUHRyICgKICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgIGlu
ZGV4CiAgICAgICAgICAgICAgICApOwogICAgCiAgICAgCiAgICB2b2lkICAgICAgICAgQ29weU9m
ZkZsYWcgKAogICAgICAgICAgICAgICAgICAgIGNvbnN0IFpPT0xFQU4gICAgICAgc3RhdHVzCiAg
ICAgICAgICAgICAgICApIHsgT2ZmRmxhZyA9IHN0YXR1czsgfQoKICAgICAKICAgIHZvaWQgICAg
ICAgICBDb3B5RXJyb3JDb2RlICgKICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgICAgICAg
ICAgIHN0YXR1cwogICAgICAgICAgICAgICAgKSB7IEVycm9yQ29kZSA9IHN0YXR1czsgfQoKICAg
ICAKCiAgICB2b2lkICAgICAgICAgQ29weUJ1bmNoICgKICAgICAgICAgICAgICAgICAgICBOUkhZ
X2J1bmNoPFR5cGU+ICAgICpidW5jaAogICAgICAgICAgICAgICAgKTsKCiAgICAgCiAgICB2b2lk
ICAgICAgICAgQXBwZW5kQnVuY2ggKAogICAgICAgICAgICAgICAgICAgIE5SSFlfYnVuY2g8VHlw
ZT4gICAgKmJ1bmNoCiAgICAgICAgICAgICAgICApOwoKICAgIHZvaWQgICAgICAgICBTd2l0Y2hQ
dHJzICgKICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgIGl0ZW1BLAogICAg
ICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgaXRlbUIKICAgICAgICAgICAgICAg
ICk7CgogICAgIAoKICAgIFpPT0xFQU4gICAgIFNldE9mZkZsYWcgKAogICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFpPT0xFQU4gICAgICAgc3RhdHVzCiAgICAgICAgICAgICAgICApIHsgWk9PTEVB
TiBvbGQgPSBPZmZGbGFnOyBPZmZGbGFnID0gc3RhdHVzOyByZXR1cm4gKG9sZCk7IH0KCiAgICAg
CgogICAgaW50ICAgICAgICAgU2V0RXJyb3JDb2RlICgKICAgICAgICAgICAgICAgICAgICBjb25z
dCBpbnQgICAgICAgICAgIHN0YXR1cwogICAgICAgICAgICAgICAgKSB7IGludCBvbGQgPSBFcnJv
ckNvZGU7IEVycm9yQ29kZSA9IHN0YXR1czsgcmV0dXJuIChvbGQpOyB9CgogICAgWk9PTEVBTiAg
ICAgR2V0RnJlZVB0ckNvbnRlbnRzICgKICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAg
ICAgICAgICAgKSB7IHJldHVybiAoZnJlZVB0ckNvbnRlbnRzKTsgfQogICAgWk9PTEVBTiAgICAg
U2V0RnJlZVB0ckNvbnRlbnRzICgKICAgICAgICAgICAgICAgICAgICBjb25zdCBaT09MRUFOICAg
ICAgIHN0YXR1cwogICAgICAgICAgICAgICAgKSB7IFpPT0xFQU4gb2xkID0gZnJlZVB0ckNvbnRl
bnRzOyBmcmVlUHRyQ29udGVudHMgPSBzdGF0dXM7IHJldHVybiAob2xkKTsgfQoKCiAgICBaT09M
RUFOICAgICBQYXJzZVRva2VuICgKICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAg
ICAgICAgKTsKCiAgICBaT09MRUFOICAgICBFeHBhbmRFbXB0eUNoYW5uZWxJbmZvVG9XaWxkU3Bs
YXQgKAogICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICApOwoKICAgIFpP
T0xFQU4gICAgIEV4cGFuZEVtcHR5Q2hhbm5lbEluZm9Ub1dpbGRPZlR5cGUgKAogICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgICpjaGFubmVsVHlwZQogICAgICAgICAgICAgICAgKTsKCiAg
ICBaT09MRUFOICAgICBQYXJzZUNoYW5uZWxJbmZvICgKICAgICAgICAgICAgICAgICAgICB2b2lk
IAogICAgICAgICAgICAgICAgKTsKCiAgICB2b2lkICAgICAgICAgUHVyZ2VDaGFubmVsSW5mbyAo
CiAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICk7CgogICAgdm9pZCAg
ICAgICAgIFJlc2V0U2VsZiAoCiAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAg
ICAgICk7CgogICAgIAoKICAgIHZvaWQgICAgICAgICBSZXNldFNlbGZBbmRDb3B5VG9rZW4gKAog
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgKnRvQmVDb3BpZWQKICAgICAg
ICAgICAgICAgICk7CgogICAgdm9pZCAgICAgICAgIFByaW50U2VsZiAoCiAgICAgICAgICAgICAg
ICAgICAgRklMRSAgICAgICAgICAgICAgICAqZnAsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qg
aW50ICAgICAgICAgICBpbmRlbnQKICAgICAgICAgICAgICAgICk7CgogICAgIAoKICAgIE5SSFlf
YnVuY2g8TlJIWV9jbGFzc1RoaW5nPiAqQ29udmVydFRvVGhpbmcoKTsKICAgIFpPT0xFQU4gICAg
IGdyYWJUZXJtaW5hbE51bWVyaWMgKAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAg
ICAgICAgKml0ZW1OYW1lLAogICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAg
Km51bWVyaWMKICAgICAgICAgICAgICAgICk7Cn07CgoKIyAxICJoL25yaHlfdGVtcGxhdGVCdW5j
aC5jIiAxCiMgMSAiaC9ucmh5X3RlbXBsYXRlQnVuY2guaCIgMQoKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgwKIAojIDI1MSAiaC9ucmh5X3RlbXBsYXRlQnVuY2guaCIKCiMgMSAiaC9ucmh5X3RlbXBs
YXRlQnVuY2guYyIgMgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgp2b2lkICBOUkhZX2J1bmNo
PFR5cGU+OjpjYWxsb2NQdHJzICgKICAgIHZvaWQgCiAgICApCnsKICAgICAKCiAgICAgCiAgICBQ
dHJzID0gbmV3IFR5cGUqWygyKSBdOwogICAgRXh0cmFzID0gbmV3IFR3aW5lWygyKSBdOwogICAg
Q2hhbm5lbHMgPSBuZXcgTlJIWV9jbGFzc0NoYW5uZWwgKipbKDIpIF07CiAgICBOdW1iZXJFYWNo
Q2hhbm5lbCA9IG5ldyBpbnQgWygyKSBdOwoKICAgIFNpemVQdHJzID0gKDIpIDsKCiAgICBmb3Ig
KGludCBpID0gMDsgaSA8IFNpemVQdHJzOyBpKyspCiAgICAgICAgewogICAgICAgIFB0cnNbaV0g
PSBfX251bGwgOwoKICAgICAgICAgCiAgICAgICAgRXh0cmFzW2ldID0gIiI7CgogICAgICAgIENo
YW5uZWxzW2ldID0gX19udWxsIDsKICAgICAgICBOdW1iZXJFYWNoQ2hhbm5lbFtpXSA9IDA7CiAg
ICAgICAgfQoKICAgIE51bWJlclB0cnMgPSAwOwoKICAgICAKCiAgICBmcmVlUHRyQ29udGVudHMg
PSAwIDsKfQoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+CnZvaWQgIE5SSFlfYnVuY2g8VHlwZT46OmZy
ZWVQdHJzICgKICAgIHZvaWQgCiAgICApCnsKCgoKICAgIHN0YXRpYyBUd2luZSAgICAgICAgX2Z1
bmNuYW1lXzsKCiAgICBzdGF0aWMgWk9PTEVBTiAgICAgIGZpcnN0ID0gMSA7CgogICAgaWYgKGZp
cnN0KQogICAgICAgIHsKICAgICAgICAgCgoKICAgICAgICBmaXJzdCA9IDAgOwoKICAgICAgICBf
ZnVuY25hbWVfID0gKFR3aW5lKSJOUkhZX2J1bmNoIDwiICsgVHlwZTo6UHJpbnRTZWxmQ2xhc3Nu
YW1lKCkgKwogICAgICAgICAgICAoVHdpbmUpIj46OmZyZWVQdHJzIjsKICAgICAgICB9CgojIDEw
NiAiaC9ucmh5X3RlbXBsYXRlQnVuY2guYyIKCgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTaXpl
UHRyczsgaSsrKQogICAgICAgIHsKIyAxMjkgImgvbnJoeV90ZW1wbGF0ZUJ1bmNoLmMiCgogICAg
ICAgICAKCiAgICAgICAgaWYgKENoYW5uZWxzW2ldKQogICAgICAgICAgICB7CiAgICAgICAgICAg
IGRlbGV0ZSBbXSBDaGFubmVsc1tpXTsKICAgICAgICAgICAgfQogICAgICAgIENoYW5uZWxzW2ld
ID0gX19udWxsIDsKICAgICAgICB9CgogICAgIAoKICAgIGlmIChmcmVlUHRyQ29udGVudHMpCiAg
ICAgICAgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU2l6ZVB0cnM7IGkrKykKICAgICAg
ICAgICAgewogICAgICAgICAgICBkZWxldGUgUHRyc1tpXTsKICAgICAgICAgICAgUHRyc1tpXSA9
IF9fbnVsbCA7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgIAogICAgZGVsZXRlIFtdIFB0
cnM7CiAgICBQdHJzID0gX19udWxsIDsKCiAgICAgCiAgICBkZWxldGUgW10gRXh0cmFzOwogICAg
RXh0cmFzID0gX19udWxsIDsKCiAgICAgCiAgICBkZWxldGUgW10gQ2hhbm5lbHM7CiAgICBDaGFu
bmVscyA9IF9fbnVsbCA7CgogICAgIAogICAgZGVsZXRlIFtdIE51bWJlckVhY2hDaGFubmVsOwog
ICAgTnVtYmVyRWFjaENoYW5uZWwgPSBfX251bGwgOwoKICAgICAKICAgIFNpemVQdHJzID0gMDsK
ICAgIE51bWJlclB0cnMgPSAwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4Kdm9pZCAgTlJIWV9i
dW5jaDxUeXBlPjo6cmVzZXRQdHJzICgKICAgIHZvaWQgCiAgICApCnsKCgoKICAgIHN0YXRpYyBU
d2luZSAgICAgICAgX2Z1bmNuYW1lXzsKCiAgICBzdGF0aWMgWk9PTEVBTiAgICAgIGZpcnN0ID0g
MSA7CgogICAgaWYgKGZpcnN0KQogICAgICAgIHsKICAgICAgICAgCgoKICAgICAgICBmaXJzdCA9
IDAgOwoKICAgICAgICBfZnVuY25hbWVfID0gKFR3aW5lKSJOUkhZX2J1bmNoIDwiICsgVHlwZTo6
UHJpbnRTZWxmQ2xhc3NuYW1lKCkgKwogICAgICAgICAgICAoVHdpbmUpIj46OnJlc2V0UHRycyI7
CiAgICAgICAgfQoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU2l6ZVB0cnM7IGkrKykKICAgICAg
ICB7CiAgICAgICAgIAoKICAgICAgICBpZiAoZnJlZVB0ckNvbnRlbnRzKQogICAgICAgICAgICB7
CiAgICAgICAgICAgIGRlbGV0ZSBQdHJzW2ldOwogICAgICAgICAgICB9CiAgICAgICAgUHRyc1tp
XSA9IF9fbnVsbCA7CiAgICAgICAgRXh0cmFzW2ldID0gIiI7CgojIDIyNCAiaC9ucmh5X3RlbXBs
YXRlQnVuY2guYyIKCiAgICAgICAgaWYgKENoYW5uZWxzW2ldKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgIGRlbGV0ZSBbXSBDaGFubmVsc1tpXTsKICAgICAgICAgICAgfQogICAgICAgIENoYW5u
ZWxzW2ldID0gX19udWxsIDsKICAgICAgICBOdW1iZXJFYWNoQ2hhbm5lbFtpXSA9IDA7CiAgICAg
ICAgfQoKICAgICAKCiAgICBmcmVlUHRyQ29udGVudHMgPSAwIDsKfQoKdGVtcGxhdGUgPGNsYXNz
IFR5cGU+CnZvaWQgIE5SSFlfYnVuY2g8VHlwZT46OnJlYWxsb2NQdHJzICgKICAgIGludCBuZXdT
aXplCiAgICApCnsKCgoKICAgIHN0YXRpYyBUd2luZSAgICAgICAgX2Z1bmNuYW1lXzsKCiAgICBz
dGF0aWMgWk9PTEVBTiAgICAgIGZpcnN0ID0gMSA7CgogICAgaWYgKGZpcnN0KQogICAgICAgIHsK
ICAgICAgICAgCgoKICAgICAgICBmaXJzdCA9IDAgOwoKICAgICAgICBfZnVuY25hbWVfID0gKFR3
aW5lKSJOUkhZX2J1bmNoIDwiICsgVHlwZTo6UHJpbnRTZWxmQ2xhc3NuYW1lKCkgKwogICAgICAg
ICAgICAoVHdpbmUpIj46OnJlYWxsb2NQdHJzIjsKICAgICAgICB9CgogICAgaW50ICAgICBpLCBp
ZHVtOwogICAgVHlwZSAgICAqKnRtcFB0cnM7CiAgICBUd2luZSAgICp0bXBFeHRyYXM7CiAgICBO
UkhZX2NsYXNzQ2hhbm5lbCAqKip0bXBDaGFubmVsczsKICAgIGludCAgICAgKnRtcE51bWJlckVh
Y2hDaGFubmVsOwogICAgaW50ICAgICB0bXBOdW1iZXJQdHJzOwoKICAgICAKICAgIGlkdW0gPSBT
aXplUHRyczsKCiAgICAgCiAgICB3aGlsZSAobmV3U2l6ZSA+IGlkdW0pCiAgICAgICAgewogICAg
ICAgIGlkdW0gKz0gKDE2KSA7CiAgICAgICAgfQoKICAgICAKICAgIHRtcFB0cnMgPSBuZXcgVHlw
ZSpbaWR1bV07CiAgICB0bXBFeHRyYXMgPSBuZXcgVHdpbmVbaWR1bV07CiAgICB0bXBDaGFubmVs
cyA9IG5ldyBOUkhZX2NsYXNzQ2hhbm5lbCoqW2lkdW1dOwogICAgdG1wTnVtYmVyRWFjaENoYW5u
ZWwgPSBuZXcgaW50IFtpZHVtXTsKCiAgICAgCgogICAgZm9yIChpID0gMDsgaSA8IFNpemVQdHJz
OyBpKyspCiAgICAgICAgewogICAgICAgIHRtcFB0cnNbaV0gPSBQdHJzW2ldOwogICAgICAgIHRt
cEV4dHJhc1tpXSA9IEV4dHJhc1tpXTsKCiAgICAgICAgIAogICAgICAgIHRtcE51bWJlckVhY2hD
aGFubmVsW2ldID0gTnVtYmVyRWFjaENoYW5uZWxbaV07CgojIDMxMiAiaC9ucmh5X3RlbXBsYXRl
QnVuY2guYyIKCiAgICAgICAgaWYgKENoYW5uZWxzW2ldKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgIHRtcENoYW5uZWxzW2ldID0gQ2hhbm5lbHNbaV07CiAgICAgICAgICAgIH0KICAgICAgICBl
bHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgdG1wQ2hhbm5lbHNbaV0gPSBfX251bGwgOwog
ICAgICAgICAgICB9CgogICAgICAgICAKCiAgICAgICAgQ2hhbm5lbHNbaV0gPSBfX251bGwgOwog
ICAgICAgIE51bWJlckVhY2hDaGFubmVsW2ldID0gMDsKICAgICAgICB9CgogICAgIAogICAgZm9y
ICggOyBpIDwgaWR1bTsgaSsrKQogICAgICAgIHsKICAgICAgICB0bXBQdHJzW2ldID0gX19udWxs
IDsKICAgICAgICB0bXBFeHRyYXNbaV0gPSAiIjsKICAgICAgICB0bXBDaGFubmVsc1tpXSA9IF9f
bnVsbCA7CiAgICAgICAgdG1wTnVtYmVyRWFjaENoYW5uZWxbaV0gPSAwOwogICAgICAgIH0KCiAg
ICAgCiAgICB0bXBOdW1iZXJQdHJzID0gTnVtYmVyUHRyczsKCiAgICAgCiAgICAgCgogICAgewog
ICAgICAgIEJPT0xFQU4gc2F2ZUZyZWVQdHJDb250ZW50cyA9IGZyZWVQdHJDb250ZW50czsKCiAg
ICAgICAgZnJlZVB0ckNvbnRlbnRzID0gMCA7CiAgICAgICAgZnJlZVB0cnMgKCk7CiAgICAgICAg
ZnJlZVB0ckNvbnRlbnRzID0gc2F2ZUZyZWVQdHJDb250ZW50czsKICAgIH0KCiAgICAgCiAgICBQ
dHJzID0gdG1wUHRyczsKICAgIEV4dHJhcyA9IHRtcEV4dHJhczsKICAgIENoYW5uZWxzID0gdG1w
Q2hhbm5lbHM7CiAgICBOdW1iZXJFYWNoQ2hhbm5lbCA9IHRtcE51bWJlckVhY2hDaGFubmVsOwoK
ICAgICAKICAgIE51bWJlclB0cnMgPSB0bXBOdW1iZXJQdHJzOwogICAgU2l6ZVB0cnMgPSBpZHVt
Owp9CgogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+Ck5SSFlfYnVuY2g8VHlwZT46Ok5SSFlf
YnVuY2ggKAogICAgdm9pZCAKICAgICkKewogICAgIAogICAgY2FsbG9jUHRycyAoKTsKICAgIAog
ICAgIAogICAgVG9rZW4gPSAiIjsKCiAgICAgCiAgICBPZmZGbGFnID0gMCA7CgogICAgIAogICAg
RXJyb3JDb2RlID0gKGludCkwIDsKfQoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+Ck5SSFlfYnVuY2g8
VHlwZT46Ok5SSFlfYnVuY2ggKAogICAgVHdpbmUgICAgICAgJnRva2VuCiAgICApCnsKICAgICAK
ICAgIGNhbGxvY1B0cnMgKCk7CgogICAgIAogICAgVG9rZW4gPSB0b2tlbjsKCiAgICAgCiAgICBP
ZmZGbGFnID0gMCA7CgogICAgIAogICAgRXJyb3JDb2RlID0gKGludCkwIDsKfQoKdGVtcGxhdGUg
PGNsYXNzIFR5cGU+Ck5SSFlfYnVuY2g8VHlwZT46Ok5SSFlfYnVuY2ggKAogICAgY29uc3QgY2hh
ciAgKnRva2VuCiAgICApCnsKICAgICAKICAgIGNhbGxvY1B0cnMgKCk7CgogICAgIAogICAgVG9r
ZW4gPSB0b2tlbjsKCiAgICAgCiAgICBPZmZGbGFnID0gMCA7CgogICAgIAogICAgRXJyb3JDb2Rl
ID0gKGludCkwIDsKfQoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+Ck5SSFlfYnVuY2g8VHlwZT46Ok5S
SFlfYnVuY2ggKAogICAgVHdpbmUgICAgICAgJnRva2VuLAogICAgY29uc3QgaW50ICAgc2l6ZQog
ICAgKQp7CiAgICAgCiAgICBjYWxsb2NQdHJzICgpOwoKICAgICAKICAgIFRva2VuID0gdG9rZW47
CgogICAgIAogICAgT2ZmRmxhZyA9IDAgOwoKICAgICAKICAgIEVycm9yQ29kZSA9IChpbnQpMCA7
CgogICAgIAoKICAgIGlmIChzaXplID4gU2l6ZVB0cnMpCiAgICAgICAgewogICAgICAgIHJlYWxs
b2NQdHJzIChzaXplKTsKICAgICAgICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgpOUkhZX2J1
bmNoPFR5cGU+Ojp+TlJIWV9idW5jaCAoCiAgICB2b2lkIAogICAgKQp7CiAgICAgCiAgICBmcmVl
UHRycyAoKTsKCiAgICAgCgoKCgoKCgoKfQoKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgp2
b2lkICBOUkhZX2J1bmNoPFR5cGU+OjpDb3B5UHRyICgKICAgIFR5cGUgICAgICAgICp0b0JlQ29w
aWVkCiAgICApCnsKCgoKCgoKCiAgICAgCiAgICByZXNldFB0cnMgKCk7CgogICAgIAoKICAgIFB0
cnNbMF0gPSB0b0JlQ29waWVkOwogICAgRXh0cmFzWzBdID0gIiI7CgogICAgIAogICAgTnVtYmVy
UHRycyA9IDE7CgogICAgIAoKCgoKCn0KCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgp2b2lkICBOUkhZ
X2J1bmNoPFR5cGU+OjpDb3B5UHRyICgKICAgIFR5cGUgICAgICAgICp0b0JlQ29waWVkLAogICAg
VHdpbmUgICAgICAgJmV4dHJhCiAgICApCnsKICAgICAKICAgIHJlc2V0UHRycyAoKTsKCiAgICAg
CgogICAgUHRyc1swXSA9IHRvQmVDb3BpZWQ7CiAgICBFeHRyYXNbMF0gPSBleHRyYTsKCiAgICAg
CiAgICBOdW1iZXJQdHJzID0gMTsKCiAgICAgCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4K
dm9pZCAgTlJIWV9idW5jaDxUeXBlPjo6Q29weVB0cnMgKAogICAgVHlwZSAgICAgICAgKip0b0Jl
Q29waWVkLAogICAgY29uc3QgaW50ICAgbnVtYmVyVG9Db3B5CiAgICApCnsKCgoKCgoKCiAgICBD
b3B5UHRycyAodG9CZUNvcGllZCwgKFR3aW5lKilfX251bGwgLCBudW1iZXJUb0NvcHkpOwoKfQoK
dGVtcGxhdGUgPGNsYXNzIFR5cGU+CnZvaWQgIE5SSFlfYnVuY2g8VHlwZT46OkNvcHlQdHJzICgK
ICAgIFR5cGUgICAgICAgICoqdG9CZUNvcGllZCwKICAgIFR3aW5lICAgICAgICpleHRyYXMsCiAg
ICBjb25zdCBpbnQgICBudW1iZXJUb0NvcHkKICAgICkKewogICAgaW50ICAgICBpOwoKICAgICAK
ICAgIHJlc2V0UHRycyAoKTsKCiAgICAgCiAgICBpZiAobnVtYmVyVG9Db3B5ID4gU2l6ZVB0cnMp
CiAgICAgICAgewogICAgICAgIHJlYWxsb2NQdHJzIChudW1iZXJUb0NvcHkpOwogICAgICAgIH0K
CiAgICAgCiAgICBmb3IgKGkgPSAwOyBpIDwgbnVtYmVyVG9Db3B5OyBpKyspCiAgICAgICAgewog
ICAgICAgIFB0cnNbaV0gPSB0b0JlQ29waWVkW2ldOwogICAgICAgIGlmIChleHRyYXMpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgRXh0cmFzW2ldID0gZXh0cmFzW2ldOwogICAgICAgICAgICB9
CiAgICAgICAgfQoKICAgICAKICAgIE51bWJlclB0cnMgPSBudW1iZXJUb0NvcHk7CgogICAgIAoK
CgoKfQoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+CnZvaWQgIE5SSFlfYnVuY2g8VHlwZT46OkFwcGVu
ZFB0ciAoCiAgICBUeXBlICAgICAgICAqdG9BcHBlbmQKICAgICkKewoKCgoKCgoKICAgIGludCAg
ICAgaWR1bTsKCiAgICAgCiAgICBpZHVtID0gTnVtYmVyUHRycyArIDE7CiAgICBpZiAoaWR1bSA+
IFNpemVQdHJzKQogICAgICAgIHsKICAgICAgICByZWFsbG9jUHRycyAoaWR1bSAqIDIpOwogICAg
ICAgIH0KCiAgICAgCiAgICBQdHJzW051bWJlclB0cnNdID0gdG9BcHBlbmQ7CiAgICBFeHRyYXNb
TnVtYmVyUHRyc10gPSAiIjsKCiAgICAgCiAgICBOdW1iZXJQdHJzICs9IDE7CgogICAgIAoKCgoK
Cn0KCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgp2b2lkICBOUkhZX2J1bmNoPFR5cGU+OjpBcHBlbmRQ
dHIgKAogICAgVHlwZSAgICAgICAgKnRvQXBwZW5kLAogICAgVHdpbmUgICAgICAgJmV4dHJhCiAg
ICApCnsKICAgIGludCAgICAgaWR1bTsKCiAgICAgCiAgICBpZHVtID0gTnVtYmVyUHRycyArIDE7
CiAgICBpZiAoaWR1bSA+IFNpemVQdHJzKQogICAgICAgIHsKICAgICAgICByZWFsbG9jUHRycyAo
aWR1bSAqIDIpOwogICAgICAgIH0KCiAgICAgCiAgICBQdHJzW051bWJlclB0cnNdID0gdG9BcHBl
bmQ7CiAgICBFeHRyYXNbTnVtYmVyUHRyc10gPSBleHRyYTsKCiAgICAgCiAgICBOdW1iZXJQdHJz
ICs9IDE7CgogICAgIAoKCgoKfQoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+CnZvaWQgIE5SSFlfYnVu
Y2g8VHlwZT46OkFwcGVuZFB0ciAoCiAgICBUeXBlICAgICAgICAqdG9BcHBlbmQsCiAgICBjb25z
dCBjaGFyICAqZXh0cmEKICAgICkKewogICAgaW50ICAgICBpZHVtOwoKICAgICAKICAgIGlkdW0g
PSBOdW1iZXJQdHJzICsgMTsKICAgIGlmIChpZHVtID4gU2l6ZVB0cnMpCiAgICAgICAgewogICAg
ICAgIHJlYWxsb2NQdHJzIChpZHVtICogMik7CiAgICAgICAgfQoKICAgICAKICAgIFB0cnNbTnVt
YmVyUHRyc10gPSB0b0FwcGVuZDsKICAgIEV4dHJhc1tOdW1iZXJQdHJzXSA9IGV4dHJhOwoKICAg
ICAKICAgIE51bWJlclB0cnMgKz0gMTsKCiAgICAgCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlw
ZT4Kdm9pZCAgTlJIWV9idW5jaDxUeXBlPjo6QXBwZW5kUHRycyAoCiAgICBUeXBlICAgICAgICAq
KnRvQXBwZW5kLAogICAgY29uc3QgaW50ICAgbnVtYmVyVG9BcHBlbmQKICAgICkKewoKCgoKCgoK
ICAgIEFwcGVuZFB0cnMgKHRvQXBwZW5kLCAoVHdpbmUqKV9fbnVsbCAsIG51bWJlclRvQXBwZW5k
KTsKCn0KCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgp2b2lkICBOUkhZX2J1bmNoPFR5cGU+OjpBcHBl
bmRQdHJzICgKICAgIFR5cGUgICAgICAgICoqdG9BcHBlbmQsCiAgICBUd2luZSAgICAgICAqZXh0
cmFzLAogICAgY29uc3QgaW50ICAgbnVtYmVyVG9BcHBlbmQKICAgICkKewogICAgaW50ICAgICBp
LCBqOwogICAgaW50ICAgICBpZHVtOwoKICAgICAKICAgIGlkdW0gPSBudW1iZXJUb0FwcGVuZCAr
IE51bWJlclB0cnM7CiAgICBpZiAoaWR1bSA+IFNpemVQdHJzKQogICAgICAgIHsKICAgICAgICBy
ZWFsbG9jUHRycyAoaWR1bSAqIDIpOwogICAgICAgIH0KCiAgICAgCiAgICBmb3IgKGkgPSBOdW1i
ZXJQdHJzLCBqID0gMDsgaiA8IG51bWJlclRvQXBwZW5kOyBpKyssIGorKykKICAgICAgICB7CiAg
ICAgICAgUHRyc1tpXSA9IHRvQXBwZW5kW2pdOwoKICAgICAgICAgCiAgICAgICAgaWYgKGV4dHJh
cykKICAgICAgICAgICAgewogICAgICAgICAgICBFeHRyYXNbaV0gPSBFeHRyYXNbal07CiAgICAg
ICAgICAgIH0KICAgICAgICB9CgogICAgIAogICAgTnVtYmVyUHRycyArPSBudW1iZXJUb0FwcGVu
ZDsKCiAgICAgCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KWk9PTEVBTiBOUkhZX2J1bmNo
PFR5cGU+OjpSZW1vdmVQdHIgKAogICAgaW50ICAgICAgICAgaW5kZXgKICAgICkKewoKCgogICAg
c3RhdGljIFR3aW5lICAgIF9mdW5jbmFtZV87CgogICAgc3RhdGljIFpPT0xFQU4gIGZpcnN0ID0g
MSA7CgogICAgaW50ICAgICAgICAgICAgIGk7CiAgICBUeXBlICAgICAgICAgICAgKnRtcFB0cjsK
ICAgIFR3aW5lICAgICAgICAgICB0bXBFeHRyYXM7CiAgICBOUkhZX2NsYXNzQ2hhbm5lbCAqKnRt
cENoYW5uZWxzOwogICAgaW50ICAgICAgICAgICAgIHRtcE51bWJlckVhY2hDaGFubmVsOwoKICAg
IGlmIChmaXJzdCkKICAgICAgICB7CiAgICAgICAgIAoKCiAgICAgICAgZmlyc3QgPSAwIDsKCiAg
ICAgICAgX2Z1bmNuYW1lXyA9ICAoVHdpbmUpIk5SSFlfYnVuY2ggPCIgKyBUeXBlOjpQcmludFNl
bGZDbGFzc25hbWUoKSArCiAgICAgICAgICAgIChUd2luZSkiPjo6UmVtb3ZlUHRyIjsKICAgICAg
ICB9CgogICAgIAogICAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+IE51bWJlclB0cnMpKQog
ICAgICAgIHsKICAgICAgICBUWFRfQmVnaW4gKCk7CiAgICAgICAgVFhUX1dyYXAgKDAgKTsKICAg
ICAgICBUWFRfU3JjRmlsZSAgID0gImgvbnJoeV90ZW1wbGF0ZUJ1bmNoLmMiLCBUWFRfU3JjTGlu
ZSAgID0gNzYzLCBUWFRfT3V0cHV0ZiAgKHN0ZGVyciwgIlBST0dSQU1NRVIgRVJST1I6IGluID4l
czwgISEhXG4iLCAKICAgICAgICAgICAgKGNvbnN0IGNoYXIgKilfZnVuY25hbWVfKTsKICAgICAg
ICBUWFRfU3JjRmlsZSAgID0gImgvbnJoeV90ZW1wbGF0ZUJ1bmNoLmMiLCBUWFRfU3JjTGluZSAg
ID0gNzY1LCBUWFRfT3V0cHV0ZiAgKHN0ZGVyciwgIiAgICBpbmRleCBpcyBpbnZhbGlkOlxuIik7
CiAgICAgICAgVFhUX1NyY0ZpbGUgICA9ICJoL25yaHlfdGVtcGxhdGVCdW5jaC5jIiwgVFhUX1Ny
Y0xpbmUgICA9IDc2NiwgVFhUX091dHB1dGYgIChzdGRlcnIsICIgICAgICAgIHN1Ym1pdHRlZCBp
bmRleCA9ID4lZDxcbiIsIGluZGV4KTsKICAgICAgICBUWFRfU3JjRmlsZSAgID0gImgvbnJoeV90
ZW1wbGF0ZUJ1bmNoLmMiLCBUWFRfU3JjTGluZSAgID0gNzY3LCBUWFRfT3V0cHV0ZiAgKHN0ZGVy
ciwgIiAgICAgICAgTnVtYmVyUHRycyA9ICAgICAgPiVkPFxuIiwgTnVtYmVyUHRycyk7CiAgICAg
ICAgUHJpbnRTZWxmIChzdGRlcnIsIDgpOwogICAgICAgIFRYVF9TcmNGaWxlICAgPSAiaC9ucmh5
X3RlbXBsYXRlQnVuY2guYyIsIFRYVF9TcmNMaW5lICAgPSA3NjksIFRYVF9PdXRwdXRmICAoc3Rk
ZXJyLCAiICAgIHN1Z2dlc3QgeW91IGNvbnRhY3QgVGVjaG5pY2FsIFN1cHBvcnQgYXNhcCAuLi5c
biIpOwogICAgICAgIFRYVF9FbmQgKCk7CiAgICAgICAgcmV0dXJuICgwICk7CiAgICAgICAgfQoK
ICAgICAKCgogICAgdG1wUHRyID0gUHRyc1tpbmRleF07CiAgICB0bXBFeHRyYXMgPSBFeHRyYXNb
aW5kZXhdOwogICAgdG1wQ2hhbm5lbHMgPSBDaGFubmVsc1tpbmRleF07CiAgICB0bXBOdW1iZXJF
YWNoQ2hhbm5lbCA9IE51bWJlckVhY2hDaGFubmVsW2luZGV4XTsKCiAgICBmb3IgKGkgPSBpbmRl
eDsgaSA8IChOdW1iZXJQdHJzIC0gMSk7IGkrKykKICAgICAgICB7CiAgICAgICAgUHRyc1tpXSA9
IFB0cnNbaSsxXTsKICAgICAgICBFeHRyYXNbaV0gPSBFeHRyYXNbaSsxXTsKICAgICAgICBDaGFu
bmVsc1tpXSA9IENoYW5uZWxzW2krMV07CiAgICAgICAgTnVtYmVyRWFjaENoYW5uZWxbaV0gPSBO
dW1iZXJFYWNoQ2hhbm5lbFtpKzFdOwogICAgICAgIH0KCiAgICBQdHJzWyhOdW1iZXJQdHJzIC0g
MSldID0gdG1wUHRyOwogICAgRXh0cmFzWyhOdW1iZXJQdHJzIC0gMSldID0gdG1wRXh0cmFzOwog
ICAgQ2hhbm5lbHNbKE51bWJlclB0cnMgLSAxKV0gPSB0bXBDaGFubmVsczsKICAgIE51bWJlckVh
Y2hDaGFubmVsWyhOdW1iZXJQdHJzIC0gMSldID0gdG1wTnVtYmVyRWFjaENoYW5uZWw7CgogICAg
IAogICAgTnVtYmVyUHRycy0tOwoKICAgIHJldHVybiAoMSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
VHlwZT4Kdm9pZCAgTlJIWV9idW5jaDxUeXBlPjo6Q29weUJ1bmNoICgKICAgIE5SSFlfYnVuY2g8
VHlwZT4gICAgKmJ1bmNoCiAgICApCnsKICAgIENvcHlUb2tlbiAoYnVuY2gtPlRva2VuKTsKICAg
IENvcHlQdHJzIChidW5jaC0+UHRycywgYnVuY2gtPkV4dHJhcywgYnVuY2gtPk51bWJlclB0cnMp
OwogICAgQ29weU9mZkZsYWcgKGJ1bmNoLT5PZmZGbGFnKTsKICAgIENvcHlFcnJvckNvZGUgKGJ1
bmNoLT5FcnJvckNvZGUpOwoKICAgICAKCiAgICBTZXRGcmVlUHRyQ29udGVudHMgKGJ1bmNoLT5H
ZXRGcmVlUHRyQ29udGVudHMgKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4Kdm9pZCAgTlJI
WV9idW5jaDxUeXBlPjo6QXBwZW5kQnVuY2ggKAogICAgTlJIWV9idW5jaDxUeXBlPiAgICAqYnVu
Y2gKICAgICkKewoKCgogICAgc3RhdGljIFR3aW5lICAgICAgICBfZnVuY25hbWVfOwoKICAgIHN0
YXRpYyBaT09MRUFOICAgICAgZmlyc3QgPSAxIDsKCiAgICBUd2luZSAgICAgICAgICAgICAgIG5l
d1Rva2VuOwoKICAgIGlmIChmaXJzdCkKICAgICAgICB7CiAgICAgICAgIAoKCiAgICAgICAgZmly
c3QgPSAwIDsKCiAgICAgICAgX2Z1bmNuYW1lXyA9IChUd2luZSkiTlJIWV9idW5jaCA8IiArIFR5
cGU6OlByaW50U2VsZkNsYXNzbmFtZSgpICsKICAgICAgICAgICAgKFR3aW5lKSI+OjpBcHBlbmRC
dW5jaCI7CiAgICAgICAgfQoKICAgICAKICAgIGlmICgoYnVuY2ggPT0gX19udWxsICkgfHwgKGJ1
bmNoLT5OdW1iZXJQdHJzID09IDApKQogICAgICAgIHsKICAgICAgICByZXR1cm47CiAgICAgICAg
fQoKICAgICAKCiAgICBpZiAoYnVuY2gtPkVycm9yQ29kZSB8fCBFcnJvckNvZGUpCiAgICAgICAg
ewogICAgICAgIFRYVF9CZWdpbiAoKTsKICAgICAgICBUWFRfV3JhcCAoMCApOwogICAgICAgIFRY
VF9TcmNGaWxlICAgPSAiaC9ucmh5X3RlbXBsYXRlQnVuY2guYyIsIFRYVF9TcmNMaW5lICAgPSA4
NTMsIFRYVF9PdXRwdXRmICAoc3RkZXJyLCAiUFJPR1JBTU1FUiBFUlJPUjogaW4gPiVzPCAhISFc
biIsIAogICAgICAgICAgICAoY29uc3QgY2hhciAqKV9mdW5jbmFtZV8pOwogICAgICAgIFRYVF9T
cmNGaWxlICAgPSAiaC9ucmh5X3RlbXBsYXRlQnVuY2guYyIsIFRYVF9TcmNMaW5lICAgPSA4NTUs
IFRYVF9PdXRwdXRmICAoc3RkZXJyLCAiICAgIGNhbid0IGRvIGFuIGFwcGVuZCBpZiBlaXRoZXIg
J2FwcGVuZE9udG8nXG4iKTsKICAgICAgICBUWFRfU3JjRmlsZSAgID0gImgvbnJoeV90ZW1wbGF0
ZUJ1bmNoLmMiLCBUWFRfU3JjTGluZSAgID0gODU2LCBUWFRfT3V0cHV0ZiAgKHN0ZGVyciwgIiAg
ICBvciAndG9CZUFwcGVuZCcgaGFzIHRoZSBlcnJvckNvZGUgc2V0OlxuIik7CiAgICAgICAgVFhU
X1NyY0ZpbGUgICA9ICJoL25yaHlfdGVtcGxhdGVCdW5jaC5jIiwgVFhUX1NyY0xpbmUgICA9IDg1
NywgVFhUX091dHB1dGYgIChzdGRlcnIsCiAgICAgICAgICAgICIgICAgICAgIChpbnQpYXBwZW5k
T250by0+RXJyb3JDb2RlID0gICA+JWQ8IChzaG91bGQgYmUgPiVkPClcbiIsCiAgICAgICAgICAg
IChpbnQpRXJyb3JDb2RlLCAoaW50KTEgKTsKICAgICAgICBUWFRfU3JjRmlsZSAgID0gImgvbnJo
eV90ZW1wbGF0ZUJ1bmNoLmMiLCBUWFRfU3JjTGluZSAgID0gODYwLCBUWFRfT3V0cHV0ZiAgKHN0
ZGVyciwKICAgICAgICAgICAgIiAgICAgICAgKGludCl0b0JlQXBwZW5kZWQtPkVycm9yQ29kZSA9
ID4lZDwgKHNob3VsZCBiZSA+JWQ8KVxuIiwKICAgICAgICAgICAgKGludClidW5jaC0+RXJyb3JD
b2RlLCAoaW50KTEgKTsKICAgICAgICBUWFRfU3JjRmlsZSAgID0gImgvbnJoeV90ZW1wbGF0ZUJ1
bmNoLmMiLCBUWFRfU3JjTGluZSAgID0gODYzLCBUWFRfT3V0cHV0ZiAgKHN0ZGVyciwgIiAgICBj
b25kaXRpb24gc2hvdWxkIGJlIHRlc3RlZCBmb3IgaW4gYWR2YW5jZVxuIik7CiAgICAgICAgVFhU
X1NyY0ZpbGUgICA9ICJoL25yaHlfdGVtcGxhdGVCdW5jaC5jIiwgVFhUX1NyY0xpbmUgICA9IDg2
NCwgVFhUX091dHB1dGYgIChzdGRlcnIsICIgICAgc3VnZ2VzdCB5b3UgY29udGFjdCBUZWNobmlj
YWwgU3VwcG9ydCBhc2FwIC4uLlxuIik7CiAgICAgICAgVFhUX0VuZCAoKTsKICAgICAgICByZXR1
cm47CiAgICAgICAgfQoKICAgICAKCiAgICBpZiAoYnVuY2gtPk9mZkZsYWcgIT0gT2ZmRmxhZykK
ICAgICAgICB7CiAgICAgICAgVFhUX0JlZ2luICgpOwogICAgICAgIFRYVF9XcmFwICgwICk7CiAg
ICAgICAgVFhUX1NyY0ZpbGUgICA9ICJoL25yaHlfdGVtcGxhdGVCdW5jaC5jIiwgVFhUX1NyY0xp
bmUgICA9IDg3NSwgVFhUX091dHB1dGYgIChzdGRlcnIsICJQUk9HUkFNTUVSIEVSUk9SOiBpbiA+
JXM8ICEhIVxuIiwgCiAgICAgICAgICAgIChjb25zdCBjaGFyICopX2Z1bmNuYW1lXyk7CiAgICAg
ICAgVFhUX1NyY0ZpbGUgICA9ICJoL25yaHlfdGVtcGxhdGVCdW5jaC5jIiwgVFhUX1NyY0xpbmUg
ICA9IDg3NywgVFhUX091dHB1dGYgIChzdGRlcnIsCiAgICAgICAgICAgICIgICAgY2FuJ3QgZG8g
YW4gYXBwZW5kIGlmICdPZmZGbGFnJyBvZiAnYXBwZW5kT250bycgYW5kXG4iKTsKICAgICAgICBU
WFRfU3JjRmlsZSAgID0gImgvbnJoeV90ZW1wbGF0ZUJ1bmNoLmMiLCBUWFRfU3JjTGluZSAgID0g
ODc5LCBUWFRfT3V0cHV0ZiAgKHN0ZGVyciwgIiAgICAndG9CZUFwcGVuZCcgYXJlIG5vdCB0aGUg
c2FtZTpcbiIpOwogICAgICAgIFRYVF9TcmNGaWxlICAgPSAiaC9ucmh5X3RlbXBsYXRlQnVuY2gu
YyIsIFRYVF9TcmNMaW5lICAgPSA4ODAsIFRYVF9PdXRwdXRmICAoc3RkZXJyLCAiICAgICAgICAo
aW50KWFwcGVuZE9udG8tPk9mZkZsYWcgPSAgID4lZDxcbiIsCiAgICAgICAgICAgIChpbnQpRXJy
b3JDb2RlKTsKICAgICAgICBUWFRfU3JjRmlsZSAgID0gImgvbnJoeV90ZW1wbGF0ZUJ1bmNoLmMi
LCBUWFRfU3JjTGluZSAgID0gODgyLCBUWFRfT3V0cHV0ZiAgKHN0ZGVyciwgIiAgICAgICAgKGlu
dCl0b0JlQXBwZW5kZWQtPk9mZkZsYWcgPSA+JWQ8XG4iLAogICAgICAgICAgICAoaW50KWJ1bmNo
LT5FcnJvckNvZGUpOwogICAgICAgIFRYVF9TcmNGaWxlICAgPSAiaC9ucmh5X3RlbXBsYXRlQnVu
Y2guYyIsIFRYVF9TcmNMaW5lICAgPSA4ODQsIFRYVF9PdXRwdXRmICAoc3RkZXJyLCAiICAgIGNv
bmRpdGlvbiBzaG91bGQgYmUgdGVzdGVkIGZvciBpbiBhZHZhbmNlXG4iKTsKICAgICAgICBUWFRf
U3JjRmlsZSAgID0gImgvbnJoeV90ZW1wbGF0ZUJ1bmNoLmMiLCBUWFRfU3JjTGluZSAgID0gODg1
LCBUWFRfT3V0cHV0ZiAgKHN0ZGVyciwgIiAgICBzdWdnZXN0IHlvdSBjb250YWN0IFRlY2huaWNh
bCBTdXBwb3J0IGFzYXAgLi4uXG4iKTsKICAgICAgICBUWFRfRW5kICgpOwogICAgICAgIHJldHVy
bjsKICAgICAgICB9CgogICAgIAoKICAgIGlmIChPZmZGbGFnID09IDEgKQogICAgICAgIHsKICAg
ICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAKCgoKCiAgICBuZXdUb2tlbiA9IFRva2VuICsg
IiwiICsgYnVuY2gtPlRva2VuOwogICAgQ29weVRva2VuIChuZXdUb2tlbik7CgogICAgIAogICAg
QXBwZW5kUHRycyAoYnVuY2gtPlB0cnMsIGJ1bmNoLT5FeHRyYXMsIGJ1bmNoLT5OdW1iZXJQdHJz
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+CnZvaWQgIE5SSFlfYnVuY2g8VHlwZT46OlN3aXRj
aFB0cnMgKAogICAgaW50ICAgICAgICAgICAgICAgICBpdGVtQSwKICAgIGludCAgICAgICAgICAg
ICAgICAgaXRlbUIKICAgICkKewogICAgVHlwZSAgICAgICAgICAgICp0bXBQdHI7CiAgICBUd2lu
ZSAgICAgICAgICAgdG1wRXh0cmFzOwogICAgTlJIWV9jbGFzc0NoYW5uZWwgKip0bXBDaGFubmVs
czsKICAgIGludCAgICAgICAgICAgICB0bXBOdW1iZXJFYWNoQ2hhbm5lbDsKCiAgICAgCiAgICB0
bXBQdHIgPSBQdHJzW2l0ZW1BXTsKICAgIHRtcEV4dHJhcyA9IEV4dHJhc1tpdGVtQV07CiAgICB0
bXBDaGFubmVscyA9IENoYW5uZWxzW2l0ZW1BXTsKICAgIHRtcE51bWJlckVhY2hDaGFubmVsID0g
TnVtYmVyRWFjaENoYW5uZWxbaXRlbUFdOwoKICAgICAKICAgIFB0cnNbaXRlbUFdID0gUHRyc1tp
dGVtQl07CiAgICBFeHRyYXNbaXRlbUFdID0gRXh0cmFzW2l0ZW1CXTsKICAgIENoYW5uZWxzW2l0
ZW1BXSA9IENoYW5uZWxzW2l0ZW1CXTsKICAgIE51bWJlckVhY2hDaGFubmVsW2l0ZW1BXSA9IE51
bWJlckVhY2hDaGFubmVsW2l0ZW1CXTsKCiAgICAgCiAgICBQdHJzW2l0ZW1CXSA9IHRtcFB0cjsK
ICAgIEV4dHJhc1tpdGVtQl0gPSB0bXBFeHRyYXM7CiAgICBDaGFubmVsc1tpdGVtQl0gPSB0bXBD
aGFubmVsczsKICAgIE51bWJlckVhY2hDaGFubmVsW2l0ZW1CXSA9IHRtcE51bWJlckVhY2hDaGFu
bmVsOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KWk9PTEVBTiBOUkhZX2J1bmNoIDxUeXBlPjo6
UGFyc2VUb2tlbiAoCiAgICB2b2lkIAogICAgKQp7CgoKCiAgICBzdGF0aWMgVHdpbmUgICAgICAg
IF9mdW5jbmFtZV87CgogICAgc3RhdGljIFpPT0xFQU4gICAgICBmaXJzdCA9IDEgOwoKICAgIE5S
SFlfYnVuY2ggPFR5cGU+ICAgKmJ1bmNoUHRyczsKCiAgICBpZiAoZmlyc3QpCiAgICAgICAgewog
ICAgICAgICAKCgogICAgICAgIGZpcnN0ID0gMCA7CgogICAgICAgIF9mdW5jbmFtZV8gPSAoVHdp
bmUpIk5SSFlfYnVuY2ggPCIgKyBUeXBlOjpQcmludFNlbGZDbGFzc25hbWUoKSArCiAgICAgICAg
ICAgIChUd2luZSkiPjo6UGFyc2VUb2tlbiI7CiAgICAgICAgfQoKICAgICAKICAgIE9mZkZsYWcg
PSAwIDsKICAgIEVycm9yQ29kZSA9IChpbnQpMCA7CiAgICBidW5jaFB0cnMgPSBfX251bGwgOwoK
ICAgICAKCiAgICBpZiAoc3RyY2FzZWNtcCAoIm9mZiIsIFRva2VuKSA9PSAwKQogICAgICAgIHsK
ICAgICAgICBOdW1iZXJQdHJzID0gMDsKICAgICAgICBPZmZGbGFnID0gMSA7CiAgICAgICAgfQog
ICAgZWxzZQogICAgICAgIHsKICAgICAgICAgCiAgICAgICAgYnVuY2hQdHJzID0gKE5SSFlfYnVu
Y2g8VHlwZT4gKilUeXBlOjpGaW5kKFRva2VuKTsKCiAgICAgICAgIAoKCiAgICAgICAgaWYgKCFi
dW5jaFB0cnMgfHwgKGJ1bmNoUHRycy0+TnVtYmVyUHRycyA9PSAwKSB8fAogICAgICAgICAgICAo
YnVuY2hQdHJzLT5FcnJvckNvZGUgIT0gKGludCkwICkpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgTnVtYmVyUHRycyA9IDA7CiAgICAgICAgICAgIEVycm9yQ29kZSA9IChpbnQpMSA7CiAgICAg
ICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgIAoKICAgICAg
ICAgICAgQ29weVB0cnMgKGJ1bmNoUHRycy0+UHRycywgYnVuY2hQdHJzLT5FeHRyYXMsCiAgICAg
ICAgICAgICAgICBidW5jaFB0cnMtPk51bWJlclB0cnMpOwoKICAgICAgICAgICAgIAoKCiAgICAg
ICAgICAgIFNldEZyZWVQdHJDb250ZW50cyAoYnVuY2hQdHJzLT5HZXRGcmVlUHRyQ29udGVudHMg
KCkpOwogICAgICAgICAgICBidW5jaFB0cnMtPlNldEZyZWVQdHJDb250ZW50cyAoMCApOwogICAg
ICAgICAgICB9CgogICAgICAgICAKCiAgICAgICAgaWYgKGJ1bmNoUHRycykKICAgICAgICAgICAg
ewogICAgICAgICAgICBkZWxldGUgYnVuY2hQdHJzOwogICAgICAgICAgICB9CiAgICAgICAgfQoK
ICAgICAKCgogICAgaWYgKEVycm9yQ29kZSkKICAgICAgICB7CiAgICAgICAgcmV0dXJuICgwICk7
CiAgICAgICAgfQogICAgZWxzZQogICAgICAgIHsKICAgICAgICByZXR1cm4gKDEgKTsKICAgICAg
ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgpaT09MRUFOIE5SSFlfYnVuY2ggPFR5cGU+OjpF
eHBhbmRFbXB0eUNoYW5uZWxJbmZvVG9XaWxkU3BsYXQgKAogICAgdm9pZCAKICAgICkKewoKCgog
ICAgc3RhdGljIFR3aW5lICAgICAgICBfZnVuY25hbWVfOwoKICAgIHN0YXRpYyBaT09MRUFOICAg
ICAgZmlyc3QgPSAxIDsKCiAgICBpbnQgICAgICAgICAgICAgICAgIGk7CgogICAgaWYgKGZpcnN0
KQogICAgICAgIHsKICAgICAgICAgCgoKICAgICAgICBmaXJzdCA9IDAgOwoKICAgICAgICAgCiAg
ICAgICAgX2Z1bmNuYW1lXyA9IChUd2luZSkiTlJIWV9idW5jaCA8IiArIFR5cGU6OlByaW50U2Vs
ZkNsYXNzbmFtZSgpICsKICAgICAgICAgICAgKFR3aW5lKSI+OjpFeHBhbmRFbXB0eUNoYW5uZWxJ
bmZvVG9XaWxkU3BsYXQiOwogICAgICAgIH0KCiAgICAgCgogICAgaWYgKChFcnJvckNvZGUgPT0g
KGludCkxICkgfHwgKE9mZkZsYWcgPT0gMSApIHx8ICghRXh0cmFzKSkKICAgICAgICB7CiAgICAg
ICAgVFhUX0JlZ2luICgpOwogICAgICAgIFRYVF9XcmFwICgwICk7CiAgICAgICAgVFhUX1NyY0Zp
bGUgICA9ICJoL25yaHlfdGVtcGxhdGVCdW5jaC5jIiwgVFhUX1NyY0xpbmUgICA9IDEwNTcsIFRY
VF9PdXRwdXRmICAoc3RkZXJyLCAiUFJPR1JBTU1FUiBFUlJPUjogaW4gPiVzPCAhISFcbiIsIAog
ICAgICAgICAgICAoY29uc3QgY2hhciAqKV9mdW5jbmFtZV8pOwogICAgICAgIFRYVF9TcmNGaWxl
ICAgPSAiaC9ucmh5X3RlbXBsYXRlQnVuY2guYyIsIFRYVF9TcmNMaW5lICAgPSAxMDU5LCBUWFRf
T3V0cHV0ZiAgKHN0ZGVyciwgIiAgICBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyBpbmNvcnJlY3Q6
XG4iKTsKICAgICAgICBUWFRfU3JjRmlsZSAgID0gImgvbnJoeV90ZW1wbGF0ZUJ1bmNoLmMiLCBU
WFRfU3JjTGluZSAgID0gMTA2MCwgVFhUX091dHB1dGYgIChzdGRlcnIsCiAgICAgICAgICAgICIg
ICAgICAgIChpbnQpRXJyb3JDb2RlID0gICA+JWQ8IChzaG91bGQgYmUgPiVkPClcbiIsCiAgICAg
ICAgICAgIChpbnQpRXJyb3JDb2RlLCAoaW50KTEgKTsKICAgICAgICBUWFRfU3JjRmlsZSAgID0g
ImgvbnJoeV90ZW1wbGF0ZUJ1bmNoLmMiLCBUWFRfU3JjTGluZSAgID0gMTA2MywgVFhUX091dHB1
dGYgIChzdGRlcnIsCiAgICAgICAgICAgICIgICAgICAgIChaT09MRUFOKU9mZkZsYWcgPSA+JXM8
IChzaG91bGQgYmUgPiVzPClcbiIsCiAgICAgICAgICAgIE5SSFlfcHJpbnRab29sZWFuIChPZmZG
bGFnKSwgTlJIWV9wcmludFpvb2xlYW4gKDEgKSk7CiAgICAgICAgVFhUX1NyY0ZpbGUgICA9ICJo
L25yaHlfdGVtcGxhdGVCdW5jaC5jIiwgVFhUX1NyY0xpbmUgICA9IDEwNjYsIFRYVF9PdXRwdXRm
ICAoc3RkZXJyLAogICAgICAgICAgICAiICAgICAgICAoVHdpbmUqKUV4dHJhcyA9ICAgPiVkPCAo
c2hvdWxkIGJlICE9IE5VTEwpXG4iLCBFeHRyYXMpOwogICAgICAgIFByaW50U2VsZiAoc3RkZXJy
LCA4KTsKICAgICAgICBUWFRfU3JjRmlsZSAgID0gImgvbnJoeV90ZW1wbGF0ZUJ1bmNoLmMiLCBU
WFRfU3JjTGluZSAgID0gMTA2OSwgVFhUX091dHB1dGYgIChzdGRlcnIsICIgICAgc3VnZ2VzdCB5
b3UgY29udGFjdCBUZWNobmljYWwgU3VwcG9ydCBhc2FwIC4uLlxuIik7CiAgICAgICAgVFhUX0Vu
ZCAoKTsKICAgICAgICByZXR1cm4gKDAgKTsKICAgICAgICB9CgogICAgIAogICAgZm9yIChpID0g
MDsgaSA8IE51bWJlclB0cnM7IGkrKykKICAgICAgICB7CiAgICAgICAgaWYgKEV4dHJhc1tpXSA9
PSAiIikKICAgICAgICAgICAgewogICAgICAgICAgICBFeHRyYXNbaV0gPSAiKiI7CiAgICAgICAg
ICAgIH0KCiAgICAgICAgfSAgCgogICAgcmV0dXJuICgxICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBU
eXBlPgpaT09MRUFOIE5SSFlfYnVuY2ggPFR5cGU+OjpFeHBhbmRFbXB0eUNoYW5uZWxJbmZvVG9X
aWxkT2ZUeXBlICgKICAgIGNvbnN0IGNoYXIgICpjaGFubmVsVHlwZQogICAgKQp7CgoKCiAgICBz
dGF0aWMgVHdpbmUgICAgICAgIF9mdW5jbmFtZV87CgogICAgc3RhdGljIFpPT0xFQU4gICAgICBm
aXJzdCA9IDEgOwoKICAgIGludCAgICAgICAgICAgICAgICAgaTsKCiAgICBpZiAoZmlyc3QpCiAg
ICAgICAgewogICAgICAgICAKCgogICAgICAgIGZpcnN0ID0gMCA7CgogICAgICAgICAKICAgICAg
ICBfZnVuY25hbWVfID0gKFR3aW5lKSJOUkhZX2J1bmNoIDwiICsgVHlwZTo6UHJpbnRTZWxmQ2xh
c3NuYW1lKCkgKwogICAgICAgICAgICAoVHdpbmUpIj46OkV4cGFuZEVtcHR5Q2hhbm5lbEluZm9U
b1dpbGRPZlR5cGUiOwogICAgICAgIH0KCiAgICAgCgogICAgaWYgKChFcnJvckNvZGUgPT0gKGlu
dCkxICkgfHwgKE9mZkZsYWcgPT0gMSApIHx8ICghRXh0cmFzKSkKICAgICAgICB7CiAgICAgICAg
VFhUX0JlZ2luICgpOwogICAgICAgIFRYVF9XcmFwICgwICk7CiAgICAgICAgVFhUX1NyY0ZpbGUg
ICA9ICJoL25yaHlfdGVtcGxhdGVCdW5jaC5jIiwgVFhUX1NyY0xpbmUgICA9IDExMTksIFRYVF9P
dXRwdXRmICAoc3RkZXJyLCAiUFJPR1JBTU1FUiBFUlJPUjogaW4gPiVzPCAhISFcbiIsIAogICAg
ICAgICAgICAoY29uc3QgY2hhciAqKV9mdW5jbmFtZV8pOwogICAgICAgIFRYVF9TcmNGaWxlICAg
PSAiaC9ucmh5X3RlbXBsYXRlQnVuY2guYyIsIFRYVF9TcmNMaW5lICAgPSAxMTIxLCBUWFRfT3V0
cHV0ZiAgKHN0ZGVyciwgIiAgICBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyBpbmNvcnJlY3Q6XG4i
KTsKICAgICAgICBUWFRfU3JjRmlsZSAgID0gImgvbnJoeV90ZW1wbGF0ZUJ1bmNoLmMiLCBUWFRf
U3JjTGluZSAgID0gMTEyMiwgVFhUX091dHB1dGYgIChzdGRlcnIsCiAgICAgICAgICAgICIgICAg
ICAgIChpbnQpRXJyb3JDb2RlID0gICA+JWQ8IChzaG91bGQgYmUgPiVkPClcbiIsCiAgICAgICAg
ICAgIChpbnQpRXJyb3JDb2RlLCAoaW50KTEgKTsKICAgICAgICBUWFRfU3JjRmlsZSAgID0gImgv
bnJoeV90ZW1wbGF0ZUJ1bmNoLmMiLCBUWFRfU3JjTGluZSAgID0gMTEyNSwgVFhUX091dHB1dGYg
IChzdGRlcnIsCiAgICAgICAgICAgICIgICAgICAgIChaT09MRUFOKU9mZkZsYWcgPSA+JXM8IChz
aG91bGQgYmUgPiVzPClcbiIsCiAgICAgICAgICAgIE5SSFlfcHJpbnRab29sZWFuIChPZmZGbGFn
KSwgTlJIWV9wcmludFpvb2xlYW4gKDEgKSk7CiAgICAgICAgVFhUX1NyY0ZpbGUgICA9ICJoL25y
aHlfdGVtcGxhdGVCdW5jaC5jIiwgVFhUX1NyY0xpbmUgICA9IDExMjgsIFRYVF9PdXRwdXRmICAo
c3RkZXJyLAogICAgICAgICAgICAiICAgICAgICAoVHdpbmUqKUV4dHJhcyA9ICAgPiVkPCAoc2hv
dWxkIGJlICE9IE5VTEwpXG4iLCBFeHRyYXMpOwogICAgICAgIFByaW50U2VsZiAoc3RkZXJyLCA4
KTsKICAgICAgICBUWFRfU3JjRmlsZSAgID0gImgvbnJoeV90ZW1wbGF0ZUJ1bmNoLmMiLCBUWFRf
U3JjTGluZSAgID0gMTEzMSwgVFhUX091dHB1dGYgIChzdGRlcnIsICIgICAgc3VnZ2VzdCB5b3Ug
Y29udGFjdCBUZWNobmljYWwgU3VwcG9ydCBhc2FwIC4uLlxuIik7CiAgICAgICAgVFhUX0VuZCAo
KTsKICAgICAgICByZXR1cm4gKDAgKTsKICAgICAgICB9CgogICAgIAogICAgZm9yIChpID0gMDsg
aSA8IE51bWJlclB0cnM7IGkrKykKICAgICAgICB7CiAgICAgICAgaWYgKEV4dHJhc1tpXSA9PSAi
IikKICAgICAgICAgICAgewogICAgICAgICAgICBFeHRyYXNbaV0gPSAoVHdpbmUpY2hhbm5lbFR5
cGUgKyAiKiI7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSAgCgogICAgcmV0dXJuICgxICk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBUeXBlPgpaT09MRUFOIE5SSFlfYnVuY2ggPFR5cGU+OjpQYXJzZUNo
YW5uZWxJbmZvICgKICAgIHZvaWQgCiAgICApCnsKCgoKICAgIHN0YXRpYyBUd2luZSAgICAgICAg
X2Z1bmNuYW1lXzsKCiAgICBzdGF0aWMgWk9PTEVBTiAgICAgIGZpcnN0ID0gMSA7CgogICAgaW50
ICAgICAgICAgICAgICAgICBpLCBqLCBpZHVtLCBvdXROdW1iZXI7CiAgICBOUkhZX2NsYXNzQ2hh
bm5lbCAgICoqbG9jYWxfQ2hhbkJ1ZmZlcjsKICAgIGludCAgICAgICAgICAgICAgICAgbG9jYWxf
U2l6ZUNoYW5CdWZmZXI7CgogICAgIAoKCiAgICBpZiAoZmlyc3QpCiAgICAgICAgewogICAgICAg
ICAKCgogICAgICAgIGZpcnN0ID0gMCA7CgogICAgICAgICAKICAgICAgICBfZnVuY25hbWVfID0g
KFR3aW5lKSJOUkhZX2J1bmNoIDwiICsgVHlwZTo6UHJpbnRTZWxmQ2xhc3NuYW1lKCkgKwogICAg
ICAgICAgICAoVHdpbmUpIj46OlBhcnNlQ2hhbm5lbEluZm8iOwoKICAgICAgICAgCiAgICAgICAg
TlJIWV9idW5jaEZ1bmNJbml0Q2hhbkJ1ZmZlciAoKTsKICAgICAgICB9CgogICAgIAoKICAgIGlm
ICgoRXJyb3JDb2RlID09IChpbnQpMSApIHx8IChPZmZGbGFnID09IDEgKSB8fCAoIUV4dHJhcykp
CiAgICAgICAgewogICAgICAgIFRYVF9CZWdpbiAoKTsKICAgICAgICBUWFRfV3JhcCAoMCApOwog
ICAgICAgIFRYVF9TcmNGaWxlICAgPSAiaC9ucmh5X3RlbXBsYXRlQnVuY2guYyIsIFRYVF9TcmNM
aW5lICAgPSAxMTg5LCBUWFRfT3V0cHV0ZiAgKHN0ZGVyciwgIlBST0dSQU1NRVIgRVJST1I6IGlu
ID4lczwgISEhXG4iLCAKICAgICAgICAgICAgKGNvbnN0IGNoYXIgKilfZnVuY25hbWVfKTsKICAg
ICAgICBUWFRfU3JjRmlsZSAgID0gImgvbnJoeV90ZW1wbGF0ZUJ1bmNoLmMiLCBUWFRfU3JjTGlu
ZSAgID0gMTE5MSwgVFhUX091dHB1dGYgIChzdGRlcnIsICIgICAgb25lIG9mIHRoZSBmb2xsb3dp
bmcgaXMgaW5jb3JyZWN0OlxuIik7CiAgICAgICAgVFhUX1NyY0ZpbGUgICA9ICJoL25yaHlfdGVt
cGxhdGVCdW5jaC5jIiwgVFhUX1NyY0xpbmUgICA9IDExOTIsIFRYVF9PdXRwdXRmICAoc3RkZXJy
LAogICAgICAgICAgICAiICAgICAgICAoaW50KUVycm9yQ29kZSA9ICAgPiVkPCAoc2hvdWxkIGJl
ID4lZDwpXG4iLAogICAgICAgICAgICAoaW50KUVycm9yQ29kZSwgKGludCkxICk7CiAgICAgICAg
VFhUX1NyY0ZpbGUgICA9ICJoL25yaHlfdGVtcGxhdGVCdW5jaC5jIiwgVFhUX1NyY0xpbmUgICA9
IDExOTUsIFRYVF9PdXRwdXRmICAoc3RkZXJyLAogICAgICAgICAgICAiICAgICAgICAoWk9PTEVB
TilPZmZGbGFnID0gPiVzPCAoc2hvdWxkIGJlID4lczwpXG4iLAogICAgICAgICAgICBOUkhZX3By
aW50Wm9vbGVhbiAoT2ZmRmxhZyksIE5SSFlfcHJpbnRab29sZWFuICgxICkpOwogICAgICAgIFRY
VF9TcmNGaWxlICAgPSAiaC9ucmh5X3RlbXBsYXRlQnVuY2guYyIsIFRYVF9TcmNMaW5lICAgPSAx
MTk4LCBUWFRfT3V0cHV0ZiAgKHN0ZGVyciwKICAgICAgICAgICAgIiAgICAgICAgKFR3aW5lKilF
eHRyYXMgPSAgID4lZDwgKHNob3VsZCBiZSAhPSBOVUxMKVxuIiwgRXh0cmFzKTsKICAgICAgICBQ
cmludFNlbGYgKHN0ZGVyciwgOCk7CiAgICAgICAgVFhUX1NyY0ZpbGUgICA9ICJoL25yaHlfdGVt
cGxhdGVCdW5jaC5jIiwgVFhUX1NyY0xpbmUgICA9IDEyMDEsIFRYVF9PdXRwdXRmICAoc3RkZXJy
LCAiICAgIHN1Z2dlc3QgeW91IGNvbnRhY3QgVGVjaG5pY2FsIFN1cHBvcnQgYXNhcCAuLi5cbiIp
OwogICAgICAgIFRYVF9FbmQgKCk7CiAgICAgICAgcmV0dXJuICgwICk7CiAgICAgICAgfQoKICAg
ICAKICAgIGxvY2FsX0NoYW5CdWZmZXIgPSBOUkhZX2J1bmNoRnVuY0dldENoYW5CdWZmZXIoKTsK
ICAgIGxvY2FsX1NpemVDaGFuQnVmZmVyID0gTlJIWV9idW5jaEZ1bmNHZXRTaXplQ2hhbkJ1ZmZl
cigpOwoKICAgICAKICAgIGZvciAoaSA9IDA7IGkgPCBOdW1iZXJQdHJzOyBpKyspCiAgICAgICAg
ewogICAgICAgICAKICAgICAgICBpZHVtID0gKFB0cnNbaV0pLT5jaGFubmVscygpLnNpemUoKTsK
ICAgICAgICBpZiAoaWR1bSA+IGxvY2FsX1NpemVDaGFuQnVmZmVyKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgTlJIWV9idW5jaEZ1bmNSZXNpemVDaGFuQnVmZmVyIChp
ZHVtKTsKICAgICAgICAgICAgbG9jYWxfQ2hhbkJ1ZmZlciA9IE5SSFlfYnVuY2hGdW5jR2V0Q2hh
bkJ1ZmZlcigpOwogICAgICAgICAgICBsb2NhbF9TaXplQ2hhbkJ1ZmZlciA9IE5SSFlfYnVuY2hG
dW5jR2V0U2l6ZUNoYW5CdWZmZXIoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgCiAgICAgICAg
KFB0cnNbaV0pLT5GaW5kQ2hhbm5lbHMgKEV4dHJhc1tpXSwgbG9jYWxfQ2hhbkJ1ZmZlciwgJm91
dE51bWJlcik7CgogICAgICAgICAKICAgICAgICBpZiAob3V0TnVtYmVyID09IDApCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgQ2hhbm5lbHNbaV0gPSBfX251bGwgOwogICAgICAgICAgICBOdW1i
ZXJFYWNoQ2hhbm5lbFtpXSA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgZGVsZXRlIFtdIENoYW5uZWxzW2ldOwogICAgICAgICAgICBDaGFu
bmVsc1tpXSA9IG5ldyBOUkhZX2NsYXNzQ2hhbm5lbCAqW291dE51bWJlcl07CiAgICAgICAgICAg
IE51bWJlckVhY2hDaGFubmVsW2ldID0gb3V0TnVtYmVyOwogICAgICAgICAgICBmb3IgKGogPSAw
OyBqIDwgb3V0TnVtYmVyOyBqKyspCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBD
aGFubmVsc1tpXVtqXSA9IGxvY2FsX0NoYW5CdWZmZXJbal07CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0KCiAgICAgICAgfSAgCgogICAgIAogICAgbG9jYWxfQ2hhbkJ1ZmZlciA9IF9f
bnVsbCA7CiAgICBsb2NhbF9TaXplQ2hhbkJ1ZmZlciA9IDA7CgogICAgcmV0dXJuICgxICk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBUeXBlPgp2b2lkICBOUkhZX2J1bmNoIDxUeXBlPjo6UHVyZ2VDaGFu
bmVsSW5mbyAoCiAgICB2b2lkIAogICAgKQp7CiAgICBpbnQgICAgIGksIGo7CgogICAgIAoKCiAg
ICBmb3IgKGkgPSBOdW1iZXJQdHJzOyAtLWkgPiAwOyApCiAgICAgICAgewogICAgICAgICAKICAg
ICAgICBmb3IgKGogPSAoaS0xKTsgLS1qID49IDA7ICkKICAgICAgICAgICAgewogICAgICAgICAg
ICBpZiAoUHRyc1tpXSA9PSBQdHJzW2pdKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICB9ICAKCiAgICAgICAgIAogICAgICAgIGlmIChqID49IDApCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgIAogICAgICAgICAgICBSZW1vdmVQdHIgKGkpOwoKICAgICAgICAgICAgIAogICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgCgoKICAgICAgICBpZiAoQ2hh
bm5lbHNbaV0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgZGVsZXRlIFtdIENoYW5uZWxzW2ld
OwogICAgICAgICAgICB9CiAgICAgICAgQ2hhbm5lbHNbaV0gPSBfX251bGwgOwoKICAgICAgICAg
CiAgICAgICAgRXh0cmFzW2ldID0gIiI7CiAgICAgICAgTnVtYmVyRWFjaENoYW5uZWxbaV0gPSAw
OwoKICAgICAgICB9ICAKfQoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+CnZvaWQgIE5SSFlfYnVuY2gg
PFR5cGU+OjpSZXNldFNlbGYgKAogICAgdm9pZCAKICAgICkKewogICAgIAoKICAgIFRva2VuID0g
IiI7CgogICAgIAogICAgcmVzZXRQdHJzICgpOwoKICAgIE9mZkZsYWcgPSAwIDsKICAgIEVycm9y
Q29kZSA9IChpbnQpMCA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgp2b2lkICBOUkhZX2J1bmNo
IDxUeXBlPjo6UmVzZXRTZWxmQW5kQ29weVRva2VuICgKICAgIGNvbnN0IGNoYXIgICp0b0JlQ29w
aWVkCiAgICApCnsKICAgICAKCiAgICBUb2tlbiA9IHRvQmVDb3BpZWQ7CgogICAgIAoKCiAgICAg
CiAgICByZXNldFB0cnMgKCk7CgogICAgT2ZmRmxhZyA9IDAgOwogICAgRXJyb3JDb2RlID0gKGlu
dCkwIDsKfQoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+Ck5SSFlfYnVuY2g8TlJIWV9jbGFzc1RoaW5n
PiAqTlJIWV9idW5jaCA8VHlwZT46OkNvbnZlcnRUb1RoaW5nICgKICAgIHZvaWQgCiAgICApCnsK
ICAgIE5SSFlfYnVuY2ggPE5SSFlfY2xhc3NUaGluZz4gICAgKmJ1bmNoX3RoaW5nUHRyczsKICAg
IGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgajsKCiAgICAgCgogICAgYnVuY2hf
dGhpbmdQdHJzID0gbmV3IE5SSFlfYnVuY2ggPE5SSFlfY2xhc3NUaGluZz4gKFRva2VuLCBOdW1i
ZXJQdHJzKTsKCiAgICAgCgoKCgoKICAgICAKICAgIGZvciAoaSA9IDA7IGkgPCBOdW1iZXJQdHJz
OyBpKyspCiAgICAgICAgewogICAgICAgIGJ1bmNoX3RoaW5nUHRycy0+UHRyc1tpXSA9IChOUkhZ
X2NsYXNzVGhpbmcqKVB0cnNbaV07CiAgICAgICAgYnVuY2hfdGhpbmdQdHJzLT5FeHRyYXNbaV0g
PSBFeHRyYXNbaV07CiAgICAgICAgYnVuY2hfdGhpbmdQdHJzLT5OdW1iZXJFYWNoQ2hhbm5lbFtp
XSA9IE51bWJlckVhY2hDaGFubmVsW2ldOwoKICAgICAgICAgCiAgICAgICAgaWYgKE51bWJlckVh
Y2hDaGFubmVsW2ldKQogICAgICAgICAgICB7CiAgICAgICAgICAgIGJ1bmNoX3RoaW5nUHRycy0+
Q2hhbm5lbHNbaV0gPSBuZXcgTlJIWV9jbGFzc0NoYW5uZWwqW051bWJlckVhY2hDaGFubmVsW2ld
XTsKICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IE51bWJlckVhY2hDaGFubmVsW2ldOyBqKysp
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBidW5jaF90aGluZ1B0cnMtPkNoYW5u
ZWxzW2ldW2pdID0gQ2hhbm5lbHNbaV1bal07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
IH0KICAgICAgICB9CgogICAgIAogICAgYnVuY2hfdGhpbmdQdHJzLT5OdW1iZXJQdHJzID0gTnVt
YmVyUHRyczsKCiAgICBidW5jaF90aGluZ1B0cnMtPk9mZkZsYWcgPSBPZmZGbGFnOwogICAgYnVu
Y2hfdGhpbmdQdHJzLT5FcnJvckNvZGUgPSBFcnJvckNvZGU7CgogICAgIAoKICAgICgoISggR2V0
RnJlZVB0ckNvbnRlbnRzKCkgPT0gMCAgKSk/ICggVFhUX0Fzc2VydENvbmQgKDAgLCAxICwgIkdl
dEZyZWVQdHJDb250ZW50cygpID09IEZBTFNFIiwgImgvbnJoeV90ZW1wbGF0ZUJ1bmNoLmMiLCAx
MzgwKSkgOiAwICkgOwogICAgYnVuY2hfdGhpbmdQdHJzLT5TZXRGcmVlUHRyQ29udGVudHMgKEdl
dEZyZWVQdHJDb250ZW50cyAoKSk7CiAgICByZXR1cm4gYnVuY2hfdGhpbmdQdHJzOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgVHlwZT4Kdm9pZCAgTlJIWV9idW5jaCA8VHlwZT46OlByaW50U2VsZiAoCiAg
ICBGSUxFICAgICAgICAqZnAsCiAgICBjb25zdCBpbnQgICBpbmRlbnQKICAgICkKewoKCgogICAg
c3RhdGljIFR3aW5lICAgIF9mdW5jbmFtZV87CgogICAgc3RhdGljIFpPT0xFQU4gIGZpcnN0ID0g
MSA7CgogICAgaW50ICAgICAgICAgICAgIGksIGo7CiAgICBUd2luZSAgICAgICAgICAgSW5kZW50
QXNjaWk7CgogICAgaWYgKGZpcnN0KQogICAgICAgIHsKICAgICAgICAgCgoKICAgICAgICBmaXJz
dCA9IDAgOwoKICAgICAgICBfZnVuY25hbWVfID0gIChUd2luZSkiTlJIWV9idW5jaCA8IiArIFR5
cGU6OlByaW50U2VsZkNsYXNzbmFtZSgpICsKICAgICAgICAgICAgKFR3aW5lKSI+OjpQcmludFNl
bGYiOwogICAgICAgIH0KCiAgICAgCiAgICBJbmRlbnRBc2NpaSA9ICIiOwogICAgZm9yIChpID0g
MDsgaSA8IGluZGVudDsgaSsrKQogICAgICAgIHsKICAgICAgICBJbmRlbnRBc2NpaSArPSAnICc7
CiAgICAgICAgfQoKICAgIFRYVF9TcmNGaWxlICAgPSAiaC9ucmh5X3RlbXBsYXRlQnVuY2guYyIs
IFRYVF9TcmNMaW5lICAgPSAxNDE5LCBUWFRfT3V0cHV0ZiAgKGZwLCAiJXNOUkhZX2J1bmNoIDwl
cz46XG4iLAogICAgICAgIChjb25zdCBjaGFyICopSW5kZW50QXNjaWksIChjb25zdCBjaGFyICop
VHlwZTo6UHJpbnRTZWxmQ2xhc3NuYW1lICgpKTsKCiAgICBUWFRfU3JjRmlsZSAgID0gImgvbnJo
eV90ZW1wbGF0ZUJ1bmNoLmMiLCBUWFRfU3JjTGluZSAgID0gMTQyMiwgVFhUX091dHB1dGYgIChm
cCwgIiVzICBwcml2YXRlIG1lbWJlcnM6XG4iLCAoY29uc3QgY2hhciAqKUluZGVudEFzY2lpKTsK
CiAgICBUWFRfU3JjRmlsZSAgID0gImgvbnJoeV90ZW1wbGF0ZUJ1bmNoLmMiLCBUWFRfU3JjTGlu
ZSAgID0gMTQyNCwgVFhUX091dHB1dGYgIChmcCwgIiVzICAgIChaT09MRUFOKWZyZWVQdHJDb250
ZW50cyA9ID4lZDxcbiIsCiAgICAgICAgKGNvbnN0IGNoYXIgKilJbmRlbnRBc2NpaSwgZnJlZVB0
ckNvbnRlbnRzKTsKCiAgICBUWFRfU3JjRmlsZSAgID0gImgvbnJoeV90ZW1wbGF0ZUJ1bmNoLmMi
LCBUWFRfU3JjTGluZSAgID0gMTQyNywgVFhUX091dHB1dGYgIChmcCwgIiVzICBwdWJsaWMgbWVt
YmVyczpcbiIsIChjb25zdCBjaGFyICopSW5kZW50QXNjaWkpOwoKICAgIFRYVF9TcmNGaWxlICAg
PSAiaC9ucmh5X3RlbXBsYXRlQnVuY2guYyIsIFRYVF9TcmNMaW5lICAgPSAxNDI5LCBUWFRfT3V0
cHV0ZiAgKGZwLCAiJXMgICAgKFR3aW5lKVRva2VuID0gICAgICAgICAgICAgPiVzPFxuIiwKICAg
ICAgICAoY29uc3QgY2hhciAqKUluZGVudEFzY2lpLCAoY29uc3QgY2hhciAqKVRva2VuKTsKCiAg
ICBUWFRfU3JjRmlsZSAgID0gImgvbnJoeV90ZW1wbGF0ZUJ1bmNoLmMiLCBUWFRfU3JjTGluZSAg
ID0gMTQzMiwgVFhUX091dHB1dGYgIChmcCwgIiVzICAgICglcyoqKVB0cnMgPSA+JWQ8XG4iLAog
ICAgICAgIChjb25zdCBjaGFyICopSW5kZW50QXNjaWksIChjb25zdCBjaGFyICopVHlwZTo6UHJp
bnRTZWxmQ2xhc3NuYW1lICgpLAogICAgICAgIFB0cnMpOwogICAgVFhUX1NyY0ZpbGUgICA9ICJo
L25yaHlfdGVtcGxhdGVCdW5jaC5jIiwgVFhUX1NyY0xpbmUgICA9IDE0MzUsIFRYVF9PdXRwdXRm
ICAoZnAsICIlcyAgICAoVHdpbmUqKUV4dHJhcyA9ICAgICAgICAgICA+JWQ8XG4iLAogICAgICAg
IChjb25zdCBjaGFyICopSW5kZW50QXNjaWksIEV4dHJhcyk7CiAgICBUWFRfU3JjRmlsZSAgID0g
ImgvbnJoeV90ZW1wbGF0ZUJ1bmNoLmMiLCBUWFRfU3JjTGluZSAgID0gMTQzNywgVFhUX091dHB1
dGYgIChmcCwgIiVzICAgIChWT0lEKioqKUNoYW5uZWxzID0gICAgICAgID4lZDxcbiIsCiAgICAg
ICAgKGNvbnN0IGNoYXIgKilJbmRlbnRBc2NpaSwgQ2hhbm5lbHMpOwogICAgVFhUX1NyY0ZpbGUg
ICA9ICJoL25yaHlfdGVtcGxhdGVCdW5jaC5jIiwgVFhUX1NyY0xpbmUgICA9IDE0MzksIFRYVF9P
dXRwdXRmICAoZnAsICIlcyAgICAoaW50ICopTnVtYmVyRWFjaENoYW5uZWwgPSAgPiVkPFxuIiwK
ICAgICAgICAoY29uc3QgY2hhciAqKUluZGVudEFzY2lpLCBOdW1iZXJFYWNoQ2hhbm5lbCk7Cgog
ICAgVFhUX1NyY0ZpbGUgICA9ICJoL25yaHlfdGVtcGxhdGVCdW5jaC5jIiwgVFhUX1NyY0xpbmUg
ICA9IDE0NDIsIFRYVF9PdXRwdXRmICAoZnAsICIlcyAgICAoaW50KVNpemVQdHJzID0gICAgICAg
ICAgICA+JWQ8XG4iLAogICAgICAgIChjb25zdCBjaGFyICopSW5kZW50QXNjaWksIFNpemVQdHJz
KTsKCiAgICBUWFRfU3JjRmlsZSAgID0gImgvbnJoeV90ZW1wbGF0ZUJ1bmNoLmMiLCBUWFRfU3Jj
TGluZSAgID0gMTQ0NSwgVFhUX091dHB1dGYgIChmcCwgIiVzICAgIChpbnQpTnVtYmVyUHRycyA9
ICAgICAgICAgID4lZDxcbiIsCiAgICAgICAgKGNvbnN0IGNoYXIgKilJbmRlbnRBc2NpaSwgTnVt
YmVyUHRycyk7CgogICAgZm9yIChpID0gMDsgaSA8IE51bWJlclB0cnM7IGkrKykKICAgICAgICB7
CiAgICAgICAgVFhUX1NyY0ZpbGUgICA9ICJoL25yaHlfdGVtcGxhdGVCdW5jaC5jIiwgVFhUX1Ny
Y0xpbmUgICA9IDE0NTAsIFRYVF9PdXRwdXRmICAoZnAsICIlcyAgICAgICAgKCVzKilQdHJbJTAy
ZF0gPSA+JWQ8ICgnTmFtZScgPSA+JXM8KVxuIiwKICAgICAgICAgICAgKGNvbnN0IGNoYXIgKilJ
bmRlbnRBc2NpaSwgKGNvbnN0IGNoYXIgKilUeXBlOjpQcmludFNlbGZDbGFzc25hbWUgKCksCiAg
ICAgICAgICAgIGksIFB0cnNbaV0sIChjb25zdCBjaGFyICopKChQdHJzW2ldKS0+R2V0TmFtZUZv
ckJ1bmNoKCkpKTsKICAgICAgICBUWFRfU3JjRmlsZSAgID0gImgvbnJoeV90ZW1wbGF0ZUJ1bmNo
LmMiLCBUWFRfU3JjTGluZSAgID0gMTQ1MywgVFhUX091dHB1dGYgIChmcCwgIiVzICAgICAgICAo
Q0hBUiopRXh0cmFzWyUwMmRdID0gICAgICAgICAgPiVzPClcbiIsCiAgICAgICAgICAgIChjb25z
dCBjaGFyICopSW5kZW50QXNjaWksIGksIChjb25zdCBjaGFyICopRXh0cmFzW2ldKTsKICAgICAg
ICBUWFRfU3JjRmlsZSAgID0gImgvbnJoeV90ZW1wbGF0ZUJ1bmNoLmMiLCBUWFRfU3JjTGluZSAg
ID0gMTQ1NSwgVFhUX091dHB1dGYgIChmcCwgIiVzICAgICAgICAoVk9JRCoqKUNoYW5uZWxzWyUw
MmRdID0gICAgICAgPiVkPClcbiIsCiAgICAgICAgICAgIChjb25zdCBjaGFyICopSW5kZW50QXNj
aWksIGksIENoYW5uZWxzW2ldKTsKICAgICAgICBUWFRfU3JjRmlsZSAgID0gImgvbnJoeV90ZW1w
bGF0ZUJ1bmNoLmMiLCBUWFRfU3JjTGluZSAgID0gMTQ1NywgVFhUX091dHB1dGYgIChmcCwgIiVz
ICAgICAgICAoaW50KU51bWJlckVhY2hDaGFubmVsWyUwMmRdID0gPiVkPClcbiIsCiAgICAgICAg
ICAgIChjb25zdCBjaGFyICopSW5kZW50QXNjaWksIGksIE51bWJlckVhY2hDaGFubmVsW2ldKTsK
ICAgICAgICBmb3IgKGogPSAwOyBqIDwgTnVtYmVyRWFjaENoYW5uZWxbaV07IGorKykKICAgICAg
ICAgICAgewogICAgICAgICAgICBUWFRfU3JjRmlsZSAgID0gImgvbnJoeV90ZW1wbGF0ZUJ1bmNo
LmMiLCBUWFRfU3JjTGluZSAgID0gMTQ2MSwgVFhUX091dHB1dGYgIChmcCwKICAgICAgICAgICAg
ICAgICIlcyAgICAgICAgICAgIChWT0lEKilDaGFubmVsc1slMDJkXVslMDJkXSA9ID4lZDwpXG4i
LAogICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKilJbmRlbnRBc2NpaSwgaSwgaiwgQ2hhbm5l
bHNbaV1bal0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgIFRYVF9TcmNGaWxlICAgPSAi
aC9ucmh5X3RlbXBsYXRlQnVuY2guYyIsIFRYVF9TcmNMaW5lICAgPSAxNDY3LCBUWFRfT3V0cHV0
ZiAgKGZwLCAiJXMgICAgKFpPT0xFQU4pT2ZmRmxhZyA9ICAgICAgICAgPiVkPFxuIiwKICAgICAg
ICAoY29uc3QgY2hhciAqKUluZGVudEFzY2lpLCBPZmZGbGFnKTsKCiAgICBUWFRfU3JjRmlsZSAg
ID0gImgvbnJoeV90ZW1wbGF0ZUJ1bmNoLmMiLCBUWFRfU3JjTGluZSAgID0gMTQ3MCwgVFhUX091
dHB1dGYgIChmcCwgIiVzICAgIChpbnQpRXJyb3JDb2RlID0gICAgICAgICAgID4lZDxcbiIsCiAg
ICAgICAgKGNvbnN0IGNoYXIgKilJbmRlbnRBc2NpaSwgRXJyb3JDb2RlKTsKfQoKDAogCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4gWk9PTEVB
TiBOUkhZX2J1bmNoPFR5cGU+OjpncmFiVGVybWluYWxOdW1lcmljICgKICAgIGNvbnN0IGNoYXIg
ICppdGVtTmFtZSwKICAgIGludCAgICAgICAgICpudW1lcmljCiAgICApCnsKICAgIGNvbnN0IGNo
YXIgICp0cHRyOwoKICAgICAKCiAgICB0cHRyID0gJihpdGVtTmFtZVtzdHJsZW4gKGl0ZW1OYW1l
KV0pOwogICAgdHB0ci0tOwoKICAgIHdoaWxlICgoKnRwdHIgPj0gJzAnKSAmJiAoKnRwdHIgPD0g
JzknKSkKICAgICAgICB7CiAgICAgICAgdHB0ci0tOwogICAgICAgIH0KICAgIHRwdHIrKzsKCiAg
ICAgCgogICAgaWYgKCp0cHRyID09ICdcMCcpCiAgICAgICAgewogICAgICAgIHJldHVybiAoMCAp
OwogICAgICAgIH0KCiAgICAgCiAgICAqbnVtZXJpYyA9IGF0b2kgKHRwdHIpOwogICAgcmV0dXJu
ICgxICk7Cn0KIyAyNDggImgvbnJoeV90ZW1wbGF0ZUJ1bmNoLmgiIDIKCgoKCiMgMjEgImgvbnJo
eV9jbGFzc0Z1ci5oIiAyCgojIDEgImgvbnJoeV90ZW1wbGF0ZUFscGhhTGlzdC5oIiAxCgogCgoK
CgoKCgoKCgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KY2xhc3MgTlJIWV9hbHBoYWxpc3Qg
ewpwdWJsaWM6CiAgICBib29sIGFkZChUeXBlICp3aG8sIGNvbnN0IGludCB0eXBlKTsKICAgIHZv
aWQgcmVtb3ZlKFR5cGUgKndobyk7CiAgICB2b2lkIHJlbmFtZShUeXBlICp3aG8sIGNvbnN0IGNo
YXIgKm5hbWUpOwogICAgVHlwZSAqY2xvbmUoVHlwZSAqd2hvLCBjb25zdCBjaGFyICpuYW1lKTsK
fTsKCgojIDEgImgvbnJoeV90ZW1wbGF0ZUFscGhhTGlzdC5jIiAxCiAKCgoKCgoKCgoKCgoKCiMg
MSAiaC9ucmh5X3RlbXBsYXRlQWxwaGFMaXN0LmgiIDEKCiAKCgoKCgoKCgoKCgoKCiMgMzIgImgv
bnJoeV90ZW1wbGF0ZUFscGhhTGlzdC5oIgoKIyAxNSAiaC9ucmh5X3RlbXBsYXRlQWxwaGFMaXN0
LmMiIDIKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0yL3ZlY3Rvci5oIiAxIDMKIAoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLTIvYWxnb2Jhc2UuaCIg
MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0y
L3BhaXIuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgogCiAKIAojIDMwICIvdXNyL2luY2x1ZGUvZysrLTIvYWxnb2Jhc2UuaCIgMiAzCgoKCiMg
MSAiL3Vzci9pbmNsdWRlL2crKy0yL2l0ZXJhdG9yLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLTIvZnVuY3Rpb24uaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBo
YS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0MiAi
L3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUv
c3RkZGVmLmgiIDMKCiMgMzYgIi91c3IvaW5jbHVkZS9nKystMi9mdW5jdGlvbi5oIiAyIDMKCgoj
IDEgIi91c3IvaW5jbHVkZS9nKystMi9zdGxfZnVuY3Rpb24uaCIgMSAzCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKdGVtcGxhdGUgPGNsYXNzIEFyZywgY2xhc3MgUmVzdWx0
PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogICAgdHlwZWRlZiBBcmcgYXJndW1lbnRfdHlwZTsK
ICAgIHR5cGVkZWYgUmVzdWx0IHJlc3VsdF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIEFyZzEs
IGNsYXNzIEFyZzIsIGNsYXNzIFJlc3VsdD4Kc3RydWN0IGJpbmFyeV9mdW5jdGlvbiB7CiAgICB0
eXBlZGVmIEFyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsKICAgIHR5cGVkZWYgQXJnMiBzZWNvbmRf
YXJndW1lbnRfdHlwZTsKICAgIHR5cGVkZWYgUmVzdWx0IHJlc3VsdF90eXBlOwp9OyAgICAgIAoK
dGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBwbHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxU
LCBULCBUPiB7CiAgICBUIG9wZXJhdG9yKCkoY29uc3QgVCYgeCwgY29uc3QgVCYgeSkgY29uc3Qg
eyByZXR1cm4geCArIHk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgpzdHJ1Y3QgbWludXMgOiBw
dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPFQsIFQsIFQ+IHsKICAgIFQgb3BlcmF0b3IoKShjb25zdCBU
JiB4LCBjb25zdCBUJiB5KSBjb25zdCB7IHJldHVybiB4IC0geTsgfQp9OwoKdGVtcGxhdGUgPGNs
YXNzIFQ+CnN0cnVjdCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxULCBULCBU
PiB7CiAgICBUIG9wZXJhdG9yKCkoY29uc3QgVCYgeCwgY29uc3QgVCYgeSkgY29uc3QgeyByZXR1
cm4geCAqIHk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgpzdHJ1Y3QgZGl2aWRlcyA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248VCwgVCwgVD4gewogICAgVCBvcGVyYXRvcigpKGNvbnN0IFQmIHgs
IGNvbnN0IFQmIHkpIGNvbnN0IHsgcmV0dXJuIHggLyB5OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gaW5saW5lIFQgaWRlbnRpdHlfZWxlbWVudChwbHVzPFQ+KSB7IHJldHVybiBUKDApOyB9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIFQgaWRlbnRpdHlfZWxlbWVudChtdWx0aXBsaWVzPFQ+
KSB7IHJldHVybiBUKDEpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4Kc3RydWN0IG1vZHVsdXMgOiBw
dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPFQsIFQsIFQ+IHsKICAgIFQgb3BlcmF0b3IoKShjb25zdCBU
JiB4LCBjb25zdCBUJiB5KSBjb25zdCB7IHJldHVybiB4ICUgeTsgfQp9OwoKdGVtcGxhdGUgPGNs
YXNzIFQ+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248VCwgVD4gewogICAg
VCBvcGVyYXRvcigpKGNvbnN0IFQmIHgpIGNvbnN0IHsgcmV0dXJuIC14OyB9Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgVD4Kc3RydWN0IGVxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxULCBU
LCBib29sPiB7CiAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgVCYgeCwgY29uc3QgVCYgeSkgY29u
c3QgeyByZXR1cm4geCA9PSB5OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4Kc3RydWN0IG5vdF9l
cXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248VCwgVCwgYm9vbD4gewogICAgYm9vbCBv
cGVyYXRvcigpKGNvbnN0IFQmIHgsIGNvbnN0IFQmIHkpIGNvbnN0IHsgcmV0dXJuIHggIT0geTsg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBncmVhdGVyIDogcHVibGljIGJpbmFyeV9m
dW5jdGlvbjxULCBULCBib29sPiB7CiAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgVCYgeCwgY29u
c3QgVCYgeSkgY29uc3QgeyByZXR1cm4geCA+IHk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgpz
dHJ1Y3QgbGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248VCwgVCwgYm9vbD4gewogICAgYm9v
bCBvcGVyYXRvcigpKGNvbnN0IFQmIHgsIGNvbnN0IFQmIHkpIGNvbnN0IHsgcmV0dXJuIHggPCB5
OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4Kc3RydWN0IGdyZWF0ZXJfZXF1YWwgOiBwdWJsaWMg
YmluYXJ5X2Z1bmN0aW9uPFQsIFQsIGJvb2w+IHsKICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBU
JiB4LCBjb25zdCBUJiB5KSBjb25zdCB7IHJldHVybiB4ID49IHk7IH0KfTsKCnRlbXBsYXRlIDxj
bGFzcyBUPgpzdHJ1Y3QgbGVzc19lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248VCwgVCwg
Ym9vbD4gewogICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IFQmIHgsIGNvbnN0IFQmIHkpIGNvbnN0
IHsgcmV0dXJuIHggPD0geTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBsb2dpY2Fs
X2FuZCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248VCwgVCwgYm9vbD4gewogICAgYm9vbCBvcGVy
YXRvcigpKGNvbnN0IFQmIHgsIGNvbnN0IFQmIHkpIGNvbnN0IHsgcmV0dXJuIHggJiYgeTsgfQp9
OwoKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBsb2dpY2FsX29yIDogcHVibGljIGJpbmFyeV9m
dW5jdGlvbjxULCBULCBib29sPiB7CiAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgVCYgeCwgY29u
c3QgVCYgeSkgY29uc3QgeyByZXR1cm4geCB8fCB5OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4K
c3RydWN0IGxvZ2ljYWxfbm90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPFQsIGJvb2w+IHsKICAg
IGJvb2wgb3BlcmF0b3IoKShjb25zdCBUJiB4KSBjb25zdCB7IHJldHVybiAheDsgfQp9OwoKdGVt
cGxhdGUgPGNsYXNzIFByZWRpY2F0ZT4KY2xhc3MgdW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgdW5h
cnlfZnVuY3Rpb248dHlwZW5hbWUgUHJlZGljYXRlOjphcmd1bWVudF90eXBlLCBib29sPiB7CnBy
b3RlY3RlZDoKICBQcmVkaWNhdGUgcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IHVuYXJ5X25lZ2F0
ZShjb25zdCBQcmVkaWNhdGUmIHgpIDogcHJlZCh4KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25z
dCB0eXBlbmFtZSBQcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUmIHgpIGNvbnN0IHsKICAgIHJldHVy
biAhcHJlZCh4KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUHJlZGljYXRlPgppbmxpbmUgdW5h
cnlfbmVnYXRlPFByZWRpY2F0ZT4gbm90MShjb25zdCBQcmVkaWNhdGUmIHByZWQpIHsKICByZXR1
cm4gdW5hcnlfbmVnYXRlPFByZWRpY2F0ZT4ocHJlZCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBQcmVk
aWNhdGU+IApjbGFzcyBiaW5hcnlfbmVnYXRlIAogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx0
eXBlbmFtZSBQcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGVuYW1lIFByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2w+IHsKcHJvdGVjdGVkOgogIFByZWRpY2F0ZSBwcmVk
OwpwdWJsaWM6CiAgZXhwbGljaXQgYmluYXJ5X25lZ2F0ZShjb25zdCBQcmVkaWNhdGUmIHgpIDog
cHJlZCh4KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBQcmVkaWNhdGU6OmZp
cnN0X2FyZ3VtZW50X3R5cGUmIHgsIAogICAgICAgICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBQ
cmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlJiB5KSBjb25zdCB7CiAgICByZXR1cm4gIXBy
ZWQoeCwgeSk7IAogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBQcmVkaWNhdGU+CmlubGluZSBiaW5h
cnlfbmVnYXRlPFByZWRpY2F0ZT4gbm90Mihjb25zdCBQcmVkaWNhdGUmIHByZWQpIHsKICByZXR1
cm4gYmluYXJ5X25lZ2F0ZTxQcmVkaWNhdGU+KHByZWQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgT3Bl
cmF0aW9uPiAKY2xhc3MgYmluZGVyMXN0CiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5h
bWUgT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlbmFtZSBPcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBPcGVy
YXRpb24gb3A7CiAgdHlwZW5hbWUgT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIHZhbHVl
OwpwdWJsaWM6CiAgYmluZGVyMXN0KGNvbnN0IE9wZXJhdGlvbiYgeCwKICAgICAgICAgICAgY29u
c3QgdHlwZW5hbWUgT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiB5KQogICAgICA6IG9w
KHgpLCB2YWx1ZSh5KSB7fQogIHR5cGVuYW1lIE9wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVy
YXRvcigpKGNvbnN0IHR5cGVuYW1lIE9wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIHgp
IGNvbnN0IHsKICAgIHJldHVybiBvcCh2YWx1ZSwgeCk7IAogIH0KfTsKCnRlbXBsYXRlIDxjbGFz
cyBPcGVyYXRpb24sIGNsYXNzIFQ+CmlubGluZSBiaW5kZXIxc3Q8T3BlcmF0aW9uPiBiaW5kMXN0
KGNvbnN0IE9wZXJhdGlvbiYgb3AsIGNvbnN0IFQmIHgpIHsKICB0eXBlZGVmIHR5cGVuYW1lIE9w
ZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSBhcmcxX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjFz
dDxPcGVyYXRpb24+KG9wLCBhcmcxX3R5cGUoeCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgT3BlcmF0
aW9uPiAKY2xhc3MgYmluZGVyMm5kCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUg
T3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGVuYW1lIE9wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIE9wZXJhdGlv
biBvcDsKICB0eXBlbmFtZSBPcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIHZhbHVlOwpw
dWJsaWM6CiAgYmluZGVyMm5kKGNvbnN0IE9wZXJhdGlvbiYgeCwKICAgICAgICAgICAgY29uc3Qg
dHlwZW5hbWUgT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgeSkgCiAgICAgIDogb3Ao
eCksIHZhbHVlKHkpIHt9CiAgdHlwZW5hbWUgT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJh
dG9yKCkoY29uc3QgdHlwZW5hbWUgT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiB4KSBj
b25zdCB7CiAgICByZXR1cm4gb3AoeCwgdmFsdWUpOyAKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
T3BlcmF0aW9uLCBjbGFzcyBUPgppbmxpbmUgYmluZGVyMm5kPE9wZXJhdGlvbj4gYmluZDJuZChj
b25zdCBPcGVyYXRpb24mIG9wLCBjb25zdCBUJiB4KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBPcGVy
YXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIGFyZzJfdHlwZTsKICByZXR1cm4gYmluZGVyMm5k
PE9wZXJhdGlvbj4ob3AsIGFyZzJfdHlwZSh4KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBPcGVyYXRp
b24xLCBjbGFzcyBPcGVyYXRpb24yPgpjbGFzcyB1bmFyeV9jb21wb3NlIDogcHVibGljIHVuYXJ5
X2Z1bmN0aW9uPHR5cGVuYW1lIE9wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgT3BlcmF0aW9uMTo6cmVz
dWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIE9wZXJhdGlvbjEgb3AxOwogIE9wZXJhdGlvbjIgb3Ay
OwpwdWJsaWM6CiAgdW5hcnlfY29tcG9zZShjb25zdCBPcGVyYXRpb24xJiB4LCBjb25zdCBPcGVy
YXRpb24yJiB5KSA6IG9wMSh4KSwgb3AyKHkpIHt9CiAgdHlwZW5hbWUgT3BlcmF0aW9uMTo6cmVz
dWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIE9wZXJhdGlvbjI6OmFyZ3VtZW50
X3R5cGUmIHgpIGNvbnN0IHsKICAgIHJldHVybiBvcDEob3AyKHgpKTsKICB9Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgT3BlcmF0aW9uMSwgY2xhc3MgT3BlcmF0aW9uMj4KaW5saW5lIHVuYXJ5X2NvbXBv
c2U8T3BlcmF0aW9uMSwgT3BlcmF0aW9uMj4gY29tcG9zZTEoY29uc3QgT3BlcmF0aW9uMSYgb3Ax
LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgT3BlcmF0aW9uMiYgb3AyKSB7CiAgcmV0dXJuIHVuYXJ5X2NvbXBvc2U8T3BlcmF0aW9u
MSwgT3BlcmF0aW9uMj4ob3AxLCBvcDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgT3BlcmF0aW9uMSwg
Y2xhc3MgT3BlcmF0aW9uMiwgY2xhc3MgT3BlcmF0aW9uMz4KY2xhc3MgYmluYXJ5X2NvbXBvc2UK
ICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBPcGVyYXRpb24yOjphcmd1bWVudF90
eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIE9wZXJhdGlvbjE6OnJlc3Vs
dF90eXBlPiB7CnByb3RlY3RlZDoKICBPcGVyYXRpb24xIG9wMTsKICBPcGVyYXRpb24yIG9wMjsK
ICBPcGVyYXRpb24zIG9wMzsKcHVibGljOgogIGJpbmFyeV9jb21wb3NlKGNvbnN0IE9wZXJhdGlv
bjEmIHgsIGNvbnN0IE9wZXJhdGlvbjImIHksIAogICAgICAgICAgICAgICAgIGNvbnN0IE9wZXJh
dGlvbjMmIHopIDogb3AxKHgpLCBvcDIoeSksIG9wMyh6KSB7IH0KICB0eXBlbmFtZSBPcGVyYXRp
b24xOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgT3BlcmF0aW9uMjo6
YXJndW1lbnRfdHlwZSYgeCkgY29uc3QgewogICAgcmV0dXJuIG9wMShvcDIoeCksIG9wMyh4KSk7
CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIE9wZXJhdGlvbjEsIGNsYXNzIE9wZXJhdGlvbjIsIGNs
YXNzIE9wZXJhdGlvbjM+CmlubGluZSBiaW5hcnlfY29tcG9zZTxPcGVyYXRpb24xLCBPcGVyYXRp
b24yLCBPcGVyYXRpb24zPiAKY29tcG9zZTIoY29uc3QgT3BlcmF0aW9uMSYgb3AxLCBjb25zdCBP
cGVyYXRpb24yJiBvcDIsIGNvbnN0IE9wZXJhdGlvbjMmIG9wMykgewogIHJldHVybiBiaW5hcnlf
Y29tcG9zZTxPcGVyYXRpb24xLCBPcGVyYXRpb24yLCBPcGVyYXRpb24zPihvcDEsIG9wMiwgb3Az
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFyZywgY2xhc3MgUmVzdWx0PgpjbGFzcyBwb2ludGVyX3Rv
X3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPEFyZywgUmVzdWx0PiB7CnBy
b3RlY3RlZDoKICBSZXN1bHQgKCpwdHIpKEFyZyk7CnB1YmxpYzoKICBwb2ludGVyX3RvX3VuYXJ5
X2Z1bmN0aW9uKCkge30KICBleHBsaWNpdCBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKFJlc3Vs
dCAoKngpKEFyZykpIDogcHRyKHgpIHt9CiAgUmVzdWx0IG9wZXJhdG9yKCkoQXJnIHgpIGNvbnN0
IHsgcmV0dXJuIHB0cih4KTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIEFyZywgY2xhc3MgUmVzdWx0
PgppbmxpbmUgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxBcmcsIFJlc3VsdD4gcHRyX2Z1bihS
ZXN1bHQgKCp4KShBcmcpKSB7CiAgcmV0dXJuIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248QXJn
LCBSZXN1bHQ+KHgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQXJnMSwgY2xhc3MgQXJnMiwgY2xhc3Mg
UmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbiA6IHB1YmxpYyBiaW5hcnlf
ZnVuY3Rpb248QXJnMSwgQXJnMiwgUmVzdWx0PiB7CnByb3RlY3RlZDoKICAgIFJlc3VsdCAoKnB0
cikoQXJnMSwgQXJnMik7CnB1YmxpYzoKICAgIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKCkg
e30KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKFJlc3VsdCAoKngpKEFy
ZzEsIEFyZzIpKSA6IHB0cih4KSB7fQogICAgUmVzdWx0IG9wZXJhdG9yKCkoQXJnMSB4LCBBcmcy
IHkpIGNvbnN0IHsgcmV0dXJuIHB0cih4LCB5KTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIEFyZzEs
IGNsYXNzIEFyZzIsIGNsYXNzIFJlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0
aW9uPEFyZzEsIEFyZzIsIFJlc3VsdD4gCnB0cl9mdW4oUmVzdWx0ICgqeCkoQXJnMSwgQXJnMikp
IHsKICByZXR1cm4gcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248QXJnMSwgQXJnMiwgUmVzdWx0
Pih4KTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBpZGVudGl0eSA6IHB1YmxpYyB1bmFy
eV9mdW5jdGlvbjxULCBUPiB7CiAgY29uc3QgVCYgb3BlcmF0b3IoKShjb25zdCBUJiB4KSBjb25z
dCB7IHJldHVybiB4OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUGFpcj4Kc3RydWN0IHNlbGVjdDFz
dCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxQYWlyLCB0eXBlbmFtZSBQYWlyOjpmaXJzdF90eXBl
PiB7CiAgY29uc3QgdHlwZW5hbWUgUGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBQ
YWlyJiB4KSBjb25zdAogIHsKICAgIHJldHVybiB4LmZpcnN0OwogIH0KfTsKCnRlbXBsYXRlIDxj
bGFzcyBQYWlyPgpzdHJ1Y3Qgc2VsZWN0Mm5kIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPFBhaXIs
IHR5cGVuYW1lIFBhaXI6OnNlY29uZF90eXBlPiB7CiAgY29uc3QgdHlwZW5hbWUgUGFpcjo6c2Vj
b25kX3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgUGFpciYgeCkgY29uc3QKICB7CiAgICByZXR1cm4g
eC5zZWNvbmQ7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIEFyZzEsIGNsYXNzIEFyZzI+CnN0cnVj
dCBwcm9qZWN0MXN0IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxBcmcxLCBBcmcyLCBBcmcxPiB7
CiAgQXJnMSBvcGVyYXRvcigpKGNvbnN0IEFyZzEmIHgsIGNvbnN0IEFyZzImKSBjb25zdCB7IHJl
dHVybiB4OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQXJnMSwgY2xhc3MgQXJnMj4Kc3RydWN0IHBy
b2plY3QybmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPEFyZzEsIEFyZzIsIEFyZzI+IHsKICBB
cmcyIG9wZXJhdG9yKCkoY29uc3QgQXJnMSYsIGNvbnN0IEFyZzImIHkpIGNvbnN0IHsgcmV0dXJu
IHk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBSZXN1bHQ+CnN0cnVjdCBjb25zdGFudF92b2lkX2Z1
bgp7CiAgdHlwZWRlZiBSZXN1bHQgcmVzdWx0X3R5cGU7CiAgcmVzdWx0X3R5cGUgdmFsOwogIGNv
bnN0YW50X3ZvaWRfZnVuKGNvbnN0IHJlc3VsdF90eXBlJiB2KSA6IHZhbCh2KSB7fQogIGNvbnN0
IHJlc3VsdF90eXBlJiBvcGVyYXRvcigpKCkgY29uc3QgeyByZXR1cm4gdmFsOyB9Cn07ICAKCgp0
ZW1wbGF0ZSA8Y2xhc3MgUmVzdWx0LCBjbGFzcyBBcmd1bWVudCA9IFJlc3VsdD4KCgoKc3RydWN0
IGNvbnN0YW50X3VuYXJ5X2Z1biA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxBcmd1bWVudCwgUmVz
dWx0PiB7CiAgUmVzdWx0IHZhbDsKICBjb25zdGFudF91bmFyeV9mdW4oY29uc3QgUmVzdWx0JiB2
KSA6IHZhbCh2KSB7fQogIGNvbnN0IFJlc3VsdCYgb3BlcmF0b3IoKShjb25zdCBBcmd1bWVudCYp
IGNvbnN0IHsgcmV0dXJuIHZhbDsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBSZXN1bHQsIGNsYXNz
IEFyZzEgPSBSZXN1bHQsIGNsYXNzIEFyZzIgPSBBcmcxPgoKCgpzdHJ1Y3QgY29uc3RhbnRfYmlu
YXJ5X2Z1biA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248QXJnMSwgQXJnMiwgUmVzdWx0PiB7CiAg
UmVzdWx0IHZhbDsKICBjb25zdGFudF9iaW5hcnlfZnVuKGNvbnN0IFJlc3VsdCYgdikgOiB2YWwo
dikge30KICBjb25zdCBSZXN1bHQmIG9wZXJhdG9yKCkoY29uc3QgQXJnMSYsIGNvbnN0IEFyZzIm
KSBjb25zdCB7CiAgICByZXR1cm4gdmFsOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBSZXN1bHQ+
CmlubGluZSBjb25zdGFudF92b2lkX2Z1bjxSZXN1bHQ+IGNvbnN0YW50MChjb25zdCBSZXN1bHQm
IHZhbCkKewogIHJldHVybiBjb25zdGFudF92b2lkX2Z1bjxSZXN1bHQ+KHZhbCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBSZXN1bHQ+CmlubGluZSBjb25zdGFudF91bmFyeV9mdW48UmVzdWx0LFJlc3Vs
dD4gY29uc3RhbnQxKGNvbnN0IFJlc3VsdCYgdmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X3VuYXJ5
X2Z1bjxSZXN1bHQsUmVzdWx0Pih2YWwpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgUmVzdWx0Pgppbmxp
bmUgY29uc3RhbnRfYmluYXJ5X2Z1bjxSZXN1bHQsUmVzdWx0LFJlc3VsdD4gY29uc3RhbnQyKGNv
bnN0IFJlc3VsdCYgdmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X2JpbmFyeV9mdW48UmVzdWx0LFJl
c3VsdCxSZXN1bHQ+KHZhbCk7Cn0KCiAKY2xhc3Mgc3VidHJhY3RpdmVfcm5nIDogcHVibGljIHVu
YXJ5X2Z1bmN0aW9uPHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50PiB7CnByaXZhdGU6CiAgdW5z
aWduZWQgaW50IHRhYmxlWzU1XTsKICBzaXplX3QgaW5kZXgxOwogIHNpemVfdCBpbmRleDI7CnB1
YmxpYzoKICB1bnNpZ25lZCBpbnQgb3BlcmF0b3IoKSh1bnNpZ25lZCBpbnQgbGltaXQpIHsKICAg
IGluZGV4MSA9IChpbmRleDEgKyAxKSAlIDU1OwogICAgaW5kZXgyID0gKGluZGV4MiArIDEpICUg
NTU7CiAgICB0YWJsZVtpbmRleDFdID0gdGFibGVbaW5kZXgxXSAtIHRhYmxlW2luZGV4Ml07CiAg
ICByZXR1cm4gdGFibGVbaW5kZXgxXSAlIGxpbWl0OwogIH0KCiAgdm9pZCBpbml0aWFsaXplKHVu
c2lnbmVkIGludCBzZWVkKQogIHsKICAgIHVuc2lnbmVkIGludCBrID0gMTsKICAgIHRhYmxlWzU0
XSA9IHNlZWQ7CiAgICBzaXplX3QgaTsKICAgIGZvciAoaSA9IDA7IGkgPCA1NDsgaSsrKSB7CiAg
ICAgICAgc2l6ZV90IGlpID0gKDIxICogKGkgKyAxKSAlIDU1KSAtIDE7CiAgICAgICAgdGFibGVb
aWldID0gazsKICAgICAgICBrID0gc2VlZCAtIGs7CiAgICAgICAgc2VlZCA9IHRhYmxlW2lpXTsK
ICAgIH0KICAgIGZvciAoaW50IGxvb3AgPSAwOyBsb29wIDwgNDsgbG9vcCsrKSB7CiAgICAgICAg
Zm9yIChpID0gMDsgaSA8IDU1OyBpKyspCiAgICAgICAgICAgIHRhYmxlW2ldID0gdGFibGVbaV0g
LSB0YWJsZVsoMSArIGkgKyAzMCkgJSA1NV07CiAgICB9CiAgICBpbmRleDEgPSAwOwogICAgaW5k
ZXgyID0gMzE7CiAgfQoKICBzdWJ0cmFjdGl2ZV9ybmcodW5zaWduZWQgaW50IHNlZWQpIHsgaW5p
dGlhbGl6ZShzZWVkKTsgfQogIHN1YnRyYWN0aXZlX3JuZygpIHsgaW5pdGlhbGl6ZSgxNjE4MDMz
OTh1KTsgfQp9OwoKCiAKCiAKIAogCiAKIAogCiAKCiAKIAogCiAKIAogCiAKIAoKIAogCiAKIAoK
CnRlbXBsYXRlIDxjbGFzcyBTLCBjbGFzcyBUPgpjbGFzcyBtZW1fZnVuX3QgOiBwdWJsaWMgdW5h
cnlfZnVuY3Rpb248VCosIFM+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdChTIChUOjoq
cGYpKCkpIDogZihwZikge30KICBTIG9wZXJhdG9yKCkoVCogcCkgY29uc3QgeyByZXR1cm4gKHAt
PipmKSgpOyB9CnByaXZhdGU6CiAgUyAoVDo6KmYpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUywg
Y2xhc3MgVD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNv
bnN0IFQqLCBTPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3QoUyAoVDo6KnBm
KSgpIGNvbnN0KSA6IGYocGYpIHt9CiAgUyBvcGVyYXRvcigpKGNvbnN0IFQqIHApIGNvbnN0IHsg
cmV0dXJuIChwLT4qZikoKTsgfQpwcml2YXRlOgogIFMgKFQ6OipmKSgpIGNvbnN0Owp9OwoKCnRl
bXBsYXRlIDxjbGFzcyBTLCBjbGFzcyBUPgpjbGFzcyBtZW1fZnVuX3JlZl90IDogcHVibGljIHVu
YXJ5X2Z1bmN0aW9uPFQsIFM+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3QoUyAo
VDo6KnBmKSgpKSA6IGYocGYpIHt9CiAgUyBvcGVyYXRvcigpKFQmIHIpIGNvbnN0IHsgcmV0dXJu
IChyLipmKSgpOyB9CnByaXZhdGU6CiAgUyAoVDo6KmYpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
UywgY2xhc3MgVD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5j
dGlvbjxULCBTPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KFMgKFQ6
OipwZikoKSBjb25zdCkgOiBmKHBmKSB7fQogIFMgb3BlcmF0b3IoKShjb25zdCBUJiByKSBjb25z
dCB7IHJldHVybiAoci4qZikoKTsgfQpwcml2YXRlOgogIFMgKFQ6OipmKSgpIGNvbnN0Owp9OwoK
dGVtcGxhdGUgPGNsYXNzIFMsIGNsYXNzIFQsIGNsYXNzIEE+CmNsYXNzIG1lbV9mdW4xX3QgOiBw
dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPFQqLCBBLCBTPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1f
ZnVuMV90KFMgKFQ6OipwZikoQSkpIDogZihwZikge30KICBTIG9wZXJhdG9yKCkoVCogcCwgQSB4
KSBjb25zdCB7IHJldHVybiAocC0+KmYpKHgpOyB9CnByaXZhdGU6CiAgUyAoVDo6KmYpKEEpOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIFMsIGNsYXNzIFQsIGNsYXNzIEE+CmNsYXNzIGNvbnN0X21lbV9m
dW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IFQqLCBBLCBTPiB7CnB1YmxpYzoK
ICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KFMgKFQ6OipwZikoQSkgY29uc3QpIDogZihwZikg
e30KICBTIG9wZXJhdG9yKCkoY29uc3QgVCogcCwgQSB4KSBjb25zdCB7IHJldHVybiAocC0+KmYp
KHgpOyB9CnByaXZhdGU6CiAgUyAoVDo6KmYpKEEpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNz
IFMsIGNsYXNzIFQsIGNsYXNzIEE+CmNsYXNzIG1lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFy
eV9mdW5jdGlvbjxULCBBLCBTPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdChT
IChUOjoqcGYpKEEpKSA6IGYocGYpIHt9CiAgUyBvcGVyYXRvcigpKFQmIHIsIEEgeCkgY29uc3Qg
eyByZXR1cm4gKHIuKmYpKHgpOyB9CnByaXZhdGU6CiAgUyAoVDo6KmYpKEEpOwp9OwoKdGVtcGxh
dGUgPGNsYXNzIFMsIGNsYXNzIFQsIGNsYXNzIEE+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90
IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxULCBBLCBTPiB7CnB1YmxpYzoKICBleHBsaWNpdCBj
b25zdF9tZW1fZnVuMV9yZWZfdChTIChUOjoqcGYpKEEpIGNvbnN0KSA6IGYocGYpIHt9CiAgUyBv
cGVyYXRvcigpKGNvbnN0IFQmIHIsIEEgeCkgY29uc3QgeyByZXR1cm4gKHIuKmYpKHgpOyB9CnBy
aXZhdGU6CiAgUyAoVDo6KmYpKEEpIGNvbnN0Owp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xh
c3MgbWVtX2Z1bl90PHZvaWQsIFQ+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPFQqLCB2b2lkPiB7
CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3Qodm9pZCAoVDo6KnBmKSgpKSA6IGYocGYpIHt9
CiAgdm9pZCBvcGVyYXRvcigpKFQqIHApIGNvbnN0IHsgKHAtPipmKSgpOyB9CnByaXZhdGU6CiAg
dm9pZCAoVDo6KmYpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgY29uc3RfbWVtX2Z1
bl90PHZvaWQsIFQ+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IFQqLCB2b2lkPiB7CnB1
YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3Qodm9pZCAoVDo6KnBmKSgpIGNvbnN0KSA6
IGYocGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IFQqIHApIGNvbnN0IHsgKHAtPipmKSgp
OyB9CnByaXZhdGU6CiAgdm9pZCAoVDo6KmYpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
VD4KY2xhc3MgbWVtX2Z1bl9yZWZfdDx2b2lkLCBUPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxU
LCB2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KHZvaWQgKFQ6OipwZiko
KSkgOiBmKHBmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShUJiByKSBjb25zdCB7IChyLipmKSgpOyB9
CnByaXZhdGU6CiAgdm9pZCAoVDo6KmYpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3Mg
Y29uc3RfbWVtX2Z1bl9yZWZfdDx2b2lkLCBUPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxULCB2
b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KHZvaWQgKFQ6Oipw
ZikoKSBjb25zdCkgOiBmKHBmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBUJiByKSBjb25z
dCB7IChyLipmKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoVDo6KmYpKCkgY29uc3Q7Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgQT4KY2xhc3MgbWVtX2Z1bjFfdDx2b2lkLCBULCBBPiA6IHB1
YmxpYyBiaW5hcnlfZnVuY3Rpb248VCosIEEsIHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1l
bV9mdW4xX3Qodm9pZCAoVDo6KnBmKShBKSkgOiBmKHBmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShU
KiBwLCBBIHgpIGNvbnN0IHsgKHAtPipmKSh4KTsgfQpwcml2YXRlOgogIHZvaWQgKFQ6OipmKShB
KTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBBPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90
PHZvaWQsIFQsIEE+IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxjb25zdCBUKiwgQSwgdm9pZD4g
ewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfdCh2b2lkIChUOjoqcGYpKEEpIGNv
bnN0KSA6IGYocGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IFQqIHAsIEEgeCkgY29uc3Qg
eyAocC0+KmYpKHgpOyB9CnByaXZhdGU6CiAgdm9pZCAoVDo6KmYpKEEpIGNvbnN0Owp9OwoKdGVt
cGxhdGUgPGNsYXNzIFQsIGNsYXNzIEE+CmNsYXNzIG1lbV9mdW4xX3JlZl90PHZvaWQsIFQsIEE+
IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxULCBBLCB2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNp
dCBtZW1fZnVuMV9yZWZfdCh2b2lkIChUOjoqcGYpKEEpKSA6IGYocGYpIHt9CiAgdm9pZCBvcGVy
YXRvcigpKFQmIHIsIEEgeCkgY29uc3QgeyAoci4qZikoeCk7IH0KcHJpdmF0ZToKICB2b2lkIChU
OjoqZikoQSk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgQT4KY2xhc3MgY29uc3RfbWVt
X2Z1bjFfcmVmX3Q8dm9pZCwgVCwgQT4gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPFQsIEEsIHZv
aWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KHZvaWQgKFQ6Oipw
ZikoQSkgY29uc3QpIDogZihwZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgVCYgciwgQSB4
KSBjb25zdCB7IChyLipmKSh4KTsgfQpwcml2YXRlOgogIHZvaWQgKFQ6OipmKShBKSBjb25zdDsK
fTsKCgoKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgUywgY2xhc3MgVD4KaW5saW5lIG1lbV9mdW5fdDxT
LFQ+IG1lbV9mdW4oUyAoVDo6KmYpKCkpIHsgCiAgcmV0dXJuIG1lbV9mdW5fdDxTLFQ+KGYpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgUywgY2xhc3MgVD4KaW5saW5lIGNvbnN0X21lbV9mdW5fdDxTLFQ+
IG1lbV9mdW4oUyAoVDo6KmYpKCkgY29uc3QpIHsKICByZXR1cm4gY29uc3RfbWVtX2Z1bl90PFMs
VD4oZik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBTLCBjbGFzcyBUPgppbmxpbmUgbWVtX2Z1bl9yZWZf
dDxTLFQ+IG1lbV9mdW5fcmVmKFMgKFQ6OipmKSgpKSB7IAogIHJldHVybiBtZW1fZnVuX3JlZl90
PFMsVD4oZik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBTLCBjbGFzcyBUPgppbmxpbmUgY29uc3RfbWVt
X2Z1bl9yZWZfdDxTLFQ+IG1lbV9mdW5fcmVmKFMgKFQ6OipmKSgpIGNvbnN0KSB7CiAgcmV0dXJu
IGNvbnN0X21lbV9mdW5fcmVmX3Q8UyxUPihmKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFMsIGNsYXNz
IFQsIGNsYXNzIEE+CmlubGluZSBtZW1fZnVuMV90PFMsVCxBPiBtZW1fZnVuMShTIChUOjoqZiko
QSkpIHsgCiAgcmV0dXJuIG1lbV9mdW4xX3Q8UyxULEE+KGYpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
UywgY2xhc3MgVCwgY2xhc3MgQT4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3Q8UyxULEE+IG1lbV9m
dW4xKFMgKFQ6OipmKShBKSBjb25zdCkgewogIHJldHVybiBjb25zdF9tZW1fZnVuMV90PFMsVCxB
PihmKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFMsIGNsYXNzIFQsIGNsYXNzIEE+CmlubGluZSBtZW1f
ZnVuMV9yZWZfdDxTLFQsQT4gbWVtX2Z1bjFfcmVmKFMgKFQ6OipmKShBKSkgeyAKICByZXR1cm4g
bWVtX2Z1bjFfcmVmX3Q8UyxULEE+KGYpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgUywgY2xhc3MgVCwg
Y2xhc3MgQT4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3JlZl90PFMsVCxBPiBtZW1fZnVuMV9yZWYo
UyAoVDo6KmYpKEEpIGNvbnN0KSB7CiAgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PFMsVCxB
PihmKTsKfQoKIAoKCgogCiAKIAojIDM4ICIvdXNyL2luY2x1ZGUvZysrLTIvZnVuY3Rpb24uaCIg
MiAzCgoKCiMgNDkgIi91c3IvaW5jbHVkZS9nKystMi9mdW5jdGlvbi5oIiAzCgoKIyAxMTIgIi91
c3IvaW5jbHVkZS9nKystMi9mdW5jdGlvbi5oIiAzCgoKCgogCiAKIAojIDMxICIvdXNyL2luY2x1
ZGUvZysrLTIvaXRlcmF0b3IuaCIgMiAzCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJl
ZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQyICIvdXNy
L2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRk
ZWYuaCIgMwoKIyAzMyAiL3Vzci9pbmNsdWRlL2crKy0yL2l0ZXJhdG9yLmgiIDIgMwoKCgoKCgoK
CgoKCgojIDEgIi91c3IvaW5jbHVkZS9nKystMi9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oIiAxIDMK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgRm9y
d2FyZEl0ZXJhdG9yLCBjbGFzcyBUPgpjbGFzcyByYXdfc3RvcmFnZV9pdGVyYXRvciB7CnByb3Rl
Y3RlZDoKICBGb3J3YXJkSXRlcmF0b3IgaXRlcjsKcHVibGljOgogIHR5cGVkZWYgb3V0cHV0X2l0
ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAg
ICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90
eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9p
ZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7CgogIGV4cGxpY2l0IHJhd19zdG9yYWdlX2l0ZXJh
dG9yKEZvcndhcmRJdGVyYXRvciB4KSA6IGl0ZXIoeCkge30KICByYXdfc3RvcmFnZV9pdGVyYXRv
cjxGb3J3YXJkSXRlcmF0b3IsIFQ+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIHJh
d19zdG9yYWdlX2l0ZXJhdG9yPEZvcndhcmRJdGVyYXRvciwgVD4mIG9wZXJhdG9yPShjb25zdCBU
JiBlbGVtZW50KSB7CiAgICBjb25zdHJ1Y3QoJippdGVyLCBlbGVtZW50KTsKICAgIHJldHVybiAq
dGhpczsKICB9ICAgICAgICAKICByYXdfc3RvcmFnZV9pdGVyYXRvcjxGb3J3YXJkSXRlcmF0b3Is
IFQ+JiBvcGVyYXRvcisrKCkgewogICAgKytpdGVyOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBy
YXdfc3RvcmFnZV9pdGVyYXRvcjxGb3J3YXJkSXRlcmF0b3IsIFQ+IG9wZXJhdG9yKysoaW50KSB7
CiAgICByYXdfc3RvcmFnZV9pdGVyYXRvcjxGb3J3YXJkSXRlcmF0b3IsIFQ+IHRtcCA9ICp0aGlz
OwogICAgKytpdGVyOwogICAgcmV0dXJuIHRtcDsKICB9Cn07CgojIDczICIvdXNyL2luY2x1ZGUv
ZysrLTIvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIgMwoKCgoKIAoKIAogCiAKIyA0NSAiL3Vzci9p
bmNsdWRlL2crKy0yL2l0ZXJhdG9yLmgiIDIgMwoKCgojIDk4ICIvdXNyL2luY2x1ZGUvZysrLTIv
aXRlcmF0b3IuaCIgMwoKCgoKIAogCiAKIyAzMyAiL3Vzci9pbmNsdWRlL2crKy0yL2FsZ29iYXNl
LmgiIDIgMwoKCgoKCgoKCgojIDY1ICIvdXNyL2luY2x1ZGUvZysrLTIvYWxnb2Jhc2UuaCIgMwoK
CgoKIAogCiAKIyAzMCAiL3Vzci9pbmNsdWRlL2crKy0yL3ZlY3Rvci5oIiAyIDMKCgoKCgoKCgoK
CiAKIAogCiMgMTkgImgvbnJoeV90ZW1wbGF0ZUFscGhhTGlzdC5jIiAyCgoKdGVtcGxhdGUgPGNs
YXNzIFR5cGU+CmJvb2wgTlJIWV9hbHBoYWxpc3Q8VHlwZT46OmFkZChUeXBlICp3aG8sIGNvbnN0
IGludCB0eXBlKQp7CiAgICB2ZWN0b3I8VHlwZSAqPiAqdjsKICAgIE5SSFlfbG9hZEl0ZW1MaXN0
QWRkcmVzcyh2KTsKICAgIGZvciAodmVjdG9yPFR5cGUgKj46Oml0ZXJhdG9yIGl0ZW0gPSB2LT5i
ZWdpbigpOwogICAgICAgICBpdGVtICE9IHYtPmVuZCgpOyArK2l0ZW0pIHsKICAgICAgICBpZiAo
d2hvLT5OYW1lIDwgKCppdGVtKS0+TmFtZSkgewogICAgICAgICAgICB2LT5pbnNlcnQoaXRlbSwg
d2hvKTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIHYtPnB1
c2hfYmFjayh3aG8pOwogICAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgp2
b2lkIE5SSFlfYWxwaGFsaXN0PFR5cGU+OjpyZW1vdmUoVHlwZSAqd2hvKQp7CiAgICB2ZWN0b3I8
VHlwZSAqPiAqdjsKICAgIE5SSFlfbG9hZEl0ZW1MaXN0QWRkcmVzcyh2KTsKICAgIGZvciAodmVj
dG9yPFR5cGUgKj46Oml0ZXJhdG9yIGl0ZW0gPSB2LT5iZWdpbigpOwogICAgICAgICBpdGVtICE9
IHYtPmVuZCgpOyArK2l0ZW0pIHsKICAgICAgICBpZiAoKml0ZW0gPT0gd2hvKSB7CiAgICAgICAg
ICAgIHYtPmVyYXNlKGl0ZW0pOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQog
ICAgKCghKCBmYWxzZSApKT8gKCBUWFRfQXNzZXJ0Q29uZCAoMCAsIDEgLCAiZmFsc2UiLCAiaC9u
cmh5X3RlbXBsYXRlQWxwaGFMaXN0LmMiLCA1MCkpIDogMCApIDsKfQoKdGVtcGxhdGUgPGNsYXNz
IFR5cGU+CnZvaWQgTlJIWV9hbHBoYWxpc3Q8VHlwZT46OnJlbmFtZShUeXBlICp3aG8sIGNvbnN0
IGNoYXIgKm5hbWUpCnsKICAgIExpc3QgPElOVD4gIGhlcml0YWdlOwogICAgSU5UICAgICAgICAg
aSwgdHlwZTsKCiAgICAgCgoKICAgIGZvciAoaSA9IHdoby0+R2V0TnVtYmVyQmFzZVR5cGVzKCk7
IC0taSA+PSAwOyApCiAgICAgICAgewogICAgICAgIGhlcml0YWdlLmFwcGVuZCAod2hvLT5HZXRC
YXNlVHlwZUJ5SW5kZXggKGkpKTsKICAgICAgICB9CgogICAgIAogICAgVHdpbmUgb2xkTmFtZSA9
IHdoby0+TmFtZTsKCiAgICAgCiAgICB0eXBlID0gd2hvLT5HZXRJZF90eXBlKCk7CgogICAgIAog
ICAgcmVtb3ZlKHdobyk7CgogICAgIAogICAgZm9yIChpID0gMDsgaSA8IGhlcml0YWdlLnNpemUo
KTsgaSsrKQogICAgICAgIHsKICAgICAgICBzd2l0Y2ggKGhlcml0YWdlW2ldKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgIGNhc2UgVEhJTkdfVFlQRV9USElORzoKICAgICAgICAgICAgICAgIE5S
SFlfYWxwaGFsaXN0PE5SSFlfY2xhc3NUaGluZz4oKS5yZW1vdmUod2hvKTsKICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIFRISU5HX1RZUEVfQVBQQVJJVElPTjoKICAgICAg
ICAgICAgICAgIE5SSFlfcmVtb3ZlRnJvbUFwcGFyaXRpb25BbHBoYSh3aG8pOwogCiAKICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIFRISU5HX1RZUEVfT0JKRUNUOgogICAg
ICAgICAgICAgICAgTlJIWV9yZW1vdmVGcm9tT2JqZWN0QWxwaGEod2hvKTsKIAogCiAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICB3aG8tPk5hbWUgPSBu
YW1lOwoKICAgICAKICAgIGZvciAoaSA9IGhlcml0YWdlLnNpemUoKTsgLS1pID49IDA7ICkKICAg
ICAgICB7CiAgICAgICAgc3dpdGNoIChoZXJpdGFnZVtpXSkKICAgICAgICAgICAgewogICAgICAg
ICAgICBjYXNlIFRISU5HX1RZUEVfVEhJTkc6CiAgICAgICAgICAgICAgICBOUkhZX2FscGhhbGlz
dDxOUkhZX2NsYXNzVGhpbmc+KCkuYWRkKHdobywgdHlwZSk7CiAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgY2FzZSBUSElOR19UWVBFX0FQUEFSSVRJT046CiAgICAgICAgICAgICAg
ICBOUkhZX2FkZFRvQXBwYXJpdGlvbkFscGhhKHdobywgdHlwZSk7CiAKIAogICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgVEhJTkdfVFlQRV9PQkpFQ1Q6CiAgICAgICAgICAg
ICAgICBOUkhZX2FkZFRvT2JqZWN0QWxwaGEod2hvLCB0eXBlKTsKIAogCiAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgCiAgICBhZGQod2hvLCB0eXBl
KTsKICAgIHdoby0+cmVzeW5jQ2hpbGRyZW4gKHdoby0+UGFyZW50KTsKICAgIHdoby0+RGVsYXll
ZFVwZGF0ZSAoMHgwMDAwMTAwMCApOwogICAgd2hvLT5EZWxheWVkVXBkYXRlQWxsQ2hhbm5lbHMg
KDB4MDAwMDEwMDAgKTsKCiAgICAgCiAgICBIVV9HbG9iYWxSZW5hbWVPYmplY3QgKG9sZE5hbWUs
IG5hbWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KVHlwZSAqTlJIWV9hbHBoYWxpc3Q8VHlw
ZT46OmNsb25lKFR5cGUgKndobywgY29uc3QgY2hhciAqbmFtZSkKewogICAgIAogICAgaWYgKChO
UkhZX1NldExlZ2FsTmV3VGhpbmcgKDEgLCBuYW1lKSkgPT0gMCApCiAgICAgICAgewogICAgICAg
IHJldHVybiAoX19udWxsICk7CiAgICAgICAgfQoKICAgICAKICAgIFR5cGUgKmNsb25lID0gbmV3
IFR5cGUgKG5hbWUsIHdobyk7CgogICAgIAogICAgTlJIWV9TZXRMZWdhbE5ld1RoaW5nICgwICwg
bmFtZSk7CgogICAgIAogICAgcmV0dXJuIGNsb25lOwp9CiMgMjkgImgvbnJoeV90ZW1wbGF0ZUFs
cGhhTGlzdC5oIiAyCgoKCgojIDIyICJoL25yaHlfY2xhc3NGdXIuaCIgMgoKCgoKdGVtcGxhdGUg
PGNsYXNzIFR5cGU+IGNsYXNzIE5SSFlfbWF0Y2g7CnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBjbGFz
cyBOUkhZX2FscGhhbGlzdDsKCmNsYXNzIEZ1cjsKCmNsYXNzIE5SSFlfZnVyQmFzZSB7CiAgICBG
dXIgKl9mdXI7CiAgICBOUkhZX2NsYXNzT2JqZWN0ICpfc2tpbjsKICAgIHNob3J0IF9za2luU2hh
cGVDb29raWU7CiAgICBUd2luZSBfc2tpbkdyb3VwOwogICAgVHdpbmUgX3V2VGFnOwogICAgTlJI
WV9jbGFzc09iamVjdCAqX2d1aWRlTW9kZWw7CiAgICBzaG9ydCBfZ3VpZGVNb2RlbFNoYXBlQ29v
a2llOwogICAgYm9vbCBfZ3VpZGVVbmRlZm9ybWVkOwoKcHVibGljOgogICAgTlJIWV9mdXJCYXNl
KCk7CiAgICBOUkhZX2Z1ckJhc2UoY29uc3QgTlJIWV9mdXJCYXNlJik7CiAgICB2aXJ0dWFsIH5O
UkhZX2Z1ckJhc2UoKTsKCiAgICBGdXIgJmZ1cigpIHsgcmV0dXJuICpfZnVyOyB9CiAgICB2b2lk
IHNldFNraW5Hcm91cChjb25zdCBUd2luZSAmKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRTa2luKE5S
SFlfY2xhc3NPYmplY3QgKnNraW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUd2lu
ZSAmc2tpbkdyb3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVHdpbmUgJnV2VGFn
KTsKICAgIE5SSFlfY2xhc3NPYmplY3QgKnNraW4oKSB7IHJldHVybiBfc2tpbjsgfQogICAgY29u
c3QgVHdpbmUgJnNraW5Hcm91cCgpIHsgcmV0dXJuIF9za2luR3JvdXA7IH0KICAgIGNvbnN0IFR3
aW5lICZ1dlRhZygpIHsgcmV0dXJuIF91dlRhZzsgfQogICAgdmlydHVhbCB2b2lkIHNldEd1aWRl
TW9kZWwoTlJIWV9jbGFzc09iamVjdCAqZ3VpZGVNb2RlbCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgdW5kZWZvcm1lZCk7CiAgICBOUkhZX2NsYXNzT2JqZWN0ICpndWlkZU1v
ZGVsKCkgeyByZXR1cm4gX2d1aWRlTW9kZWw7IH0KICAgIGJvb2wgZ3VpZGVVbmRlZm9ybWVkKCkg
eyByZXR1cm4gX2d1aWRlVW5kZWZvcm1lZDsgfQogICAgdm9pZCBhcHBseSgpOwogICAgdmlydHVh
bCB2b2lkIGRvQ29tbWFuZChjb25zdCBMaXN0PFR3aW5lPiAmYXJncyk7Cn07CgpjbGFzcyBOUkhZ
X2NsYXNzRnVyIDoKICAgIHB1YmxpYyBOUkhZX2NsYXNzT2JqZWN0LAogICAgcHVibGljIE5SSFlf
ZnVyQmFzZSwKICAgIHB1YmxpYyBPYnNlcnZlckZhY3RvcnkgPE5SSFlfY2xhc3NGdXI+CnsKcHJp
dmF0ZToKICAgIHR5cGVkZWYgTlJIWV9jbGFzc09iamVjdCBpbmhlcml0ZWQ7CiAgICB0eXBlZGVm
IE5SSFlfYWxwaGFsaXN0PE5SSFlfY2xhc3NGdXI+IGFscGhhbGlzdDsKICAgIGZyaWVuZCBOUkhZ
X21hdGNoIDxOUkhZX2NsYXNzRnVyPjsKICAgIGZyaWVuZCBOUkhZX2FscGhhbGlzdDxOUkhZX2Ns
YXNzRnVyPjsKCiAgICBOUkhZX2NsYXNzTGlnaHQgKl9saWdodDsKCiAgICB2b2lkIGluaXRpYWxp
emUoKTsKICAgIHZvaWQgZGV0YWNoKE5SSFlfZGVwZW5kRGF0YSAqKTsKICAgIHN0YXRpYyB2b2lk
IGRyYXdGdXJDYWxsYmFjayh2b2lkICptZSwgdm9pZCAqZXh0cmEpOwogICAgdm9pZCBkcmF3RnVy
KCk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIHBvc3RXb3JsZFRyYXZlcnNlKCk7CgpwdWJsaWM6CiAg
ICBOUkhZX2NsYXNzRnVyKGNvbnN0IGNoYXIgKm5hbWUpOwogICAgTlJIWV9jbGFzc0Z1cihjb25z
dCBjaGFyICpuYW1lLCBOUkhZX2NsYXNzRnVyICpjbG9uZUZyb20pOwogICAgTlJIWV9jbGFzc0Z1
cigpOwogICAgfk5SSFlfY2xhc3NGdXIoKTsKCiAgICAgCiAgICBzdGF0aWMgY29uc3QgQ0hBUiAg
ICAgICAgICAgICAgICpQcmludFNlbGZDbGFzc25hbWUgKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKSB7IHJldHVybiAoIk5SSFlfY2xhc3NGdXIiKTsgfQoKICAgICAKCiAgICBzdGF0aWMgSU5U
ICAgICAgICAgICAgICAgICAgICAgIEdldFNlbGZDbGFzc1R5cGUgKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKSB7IHJldHVybiAoVEhJTkdfVFlQRV9GVVIpOyB9CgogICAgc3RhdGljIE5SSFlf
YnVuY2g8TlJIWV9jbGFzc0Z1cj4gKkZpbmQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgQ0hBUiAgKm5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmFtZSAo
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSICAqbmV3
TmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIE5SSFlfY2xh
c3NUaGluZyAgICAgICAgICAgICAgICAgKkNsb25lICgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IENIQVIgICpuZXdOYW1lCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICk7CgogICAgIAoKCgogICAgY29uc3QgQ0hBUiAgICAgICAgICAgICAg
ICAgICAgICAqUHJpbnREZXJpdmVkQ2xhc3NPZlNlbGZUeXBlTmFtZSAoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICApIHsgcmV0dXJuICgiZnVyIik7IH0KCiAgICBJTlQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdldERlcml2ZWRDbGFzc09mU2VsZlR5cGUgKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKSB7IHJldHVybiAoVEhJTkdfVFlQRV9GVVIpOyB9CgoKICAgIHZvaWQgQ3JlYXRl
T2JzZXJ2ZXIgKGludCB0eXBlKSB7CiAgICAgICAgT2JzZXJ2ZXJGYWN0b3J5PE5SSFlfY2xhc3NG
dXI+Ojpkb0NyZWF0ZU9ic2VydmVyICh0aGlzLCB0eXBlKTsgfTsKCiAgICB2b2lkICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIERlc2NyaWJlQ3JlYXRlICgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgdm9pZCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEZXNjcmliZURlbGV0ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRGVzY3JpYmVGdWxsU3RhdGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIERlc2NyaWJlRnVsbFN0YXRlUGFja2VkICgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgdm9pZCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBMaXN0RnVyKEZJTEUgKmZwLCBjb25zdCBMaXN0PFR3aW5lPiAmbHMpOwogICAg
dm9pZCBkb0NvbW1hbmQoY29uc3QgTGlzdDxUd2luZT4gJmFyZ3MpOwogICAgdm9pZCBzZXRTa2lu
KE5SSFlfY2xhc3NPYmplY3QgKnNraW4sCiAgICAgICAgICAgICAgICAgY29uc3QgVHdpbmUgJnNr
aW5Hcm91cCwKICAgICAgICAgICAgICAgICBjb25zdCBUd2luZSAmdXZUYWcpOwogICAgdm9pZCBz
ZXRHdWlkZU1vZGVsKE5SSFlfY2xhc3NPYmplY3QgKmd1aWRlTW9kZWwsIGJvb2wgdW5kZWZvcm1l
ZCk7CiAgICB2b2lkIHNldExpZ2h0KE5SSFlfY2xhc3NMaWdodCAqbGlnaHQpOwp9OwoKIAoKIAoK
IyAzOCAibnJoeS9OUkhZX0FjY2Vzcy5jIiAyCgojIDEgImgvbnJoeV9jbGFzc0xheWVyLmgiIDEK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBjbGFzcyBOUkhZ
X21hdGNoOwp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4gY2xhc3MgTlJIWV9hbHBoYWxpc3Q7CgpjbGFz
cyBOUkhZX2NsYXNzTGF5ZXIgOiBwdWJsaWMgTlJIWV9jbGFzc1RoaW5nIHsKcHJpdmF0ZToKICAg
IHR5cGVkZWYgTlJIWV9jbGFzc1RoaW5nIGluaGVyaXRlZDsKICAgIHR5cGVkZWYgTlJIWV9hbHBo
YWxpc3Q8TlJIWV9jbGFzc0xheWVyPiBhbHBoYWxpc3Q7CiAgICBmcmllbmQgTlJIWV9tYXRjaCA8
TlJIWV9jbGFzc0xheWVyPjsKICAgIGZyaWVuZCBOUkhZX2FscGhhbGlzdDxOUkhZX2NsYXNzTGF5
ZXI+OwoKICAgIGNsYXNzIE5SSFlfbGF5ZXJTZXQJCSpfbGF5ZXJTZXQ7Cgpwcm90ZWN0ZWQ6CiAg
ICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplICgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICk7CiAgICB2b2lkIGRldGFjaChOUkhZX2RlcGVuZERhdGEgKmRhdGEp
OwoKcHVibGljOgoKICAgIE5SSFlfY2xhc3NMYXllciAoCiAgICAgICAgY29uc3QgQ0hBUiAgICAg
ICAgICAqbmFtZQogICAgICAgICk7CiAgICBOUkhZX2NsYXNzTGF5ZXIgKAogICAgICAgIGNvbnN0
IENIQVIgICAgICAgICAgKm5hbWUsCiAgICAgICAgTlJIWV9jbGFzc0xheWVyICAgICpjbG9uZUZy
b20KICAgICAgICApOwogICAgTlJIWV9jbGFzc0xheWVyICgKICAgICAgICB2b2lkIAogICAgICAg
ICk7CgogICAgfk5SSFlfY2xhc3NMYXllciAoCiAgICAgICAgdm9pZCAKICAgICAgICApOwoKICAg
ICAKICAgIHN0YXRpYyBjb25zdCBDSEFSICAgICAgICAgICAgICAgKlByaW50U2VsZkNsYXNzbmFt
ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuICgiTlJIWV9jbGFzc0xheWVy
Iik7IH0KCiAgICBzdGF0aWMgSU5UICAgICAgICAgICAgICAgICAgICAgIEdldFNlbGZDbGFzc1R5
cGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAoVEhJTkdfVFlQRV9MQVlF
Uik7IH0KCiAgICBzdGF0aWMgTlJIWV9idW5jaDxOUkhZX2NsYXNzTGF5ZXI+ICpGaW5kICgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIgICpuYW1lCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgdm9pZCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmVuYW1lICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IENIQVIgICpuZXdOYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICk7CgogICAgTlJIWV9jbGFzc1RoaW5nICAgICAgICAgICAgICAgICAqQ2xvbmUg
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUiAgKm5l
d05hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIGNvbnN0IENI
QVIgICAgICAgICAgICAgICAgICAgICAgKlByaW50RGVyaXZlZENsYXNzT2ZTZWxmVHlwZU5hbWUg
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAoImxheWVyIik7IH0KCiAgICBJ
TlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldERlcml2ZWRDbGFzc09mU2VsZlR5cGUg
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAoVEhJTkdfVFlQRV9MQVlFUik7
IH0KCiAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUNyZWF0ZSAo
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNz
RGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoK
ICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVEZWxldGUgKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2Ny
aWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICB2
b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlT25GbGFnICgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0
cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgdm9pZCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUZ1bGxTdGF0ZSAoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJl
YW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIHZvaWQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVGdWxsU3RhdGVQYWNrZWQgKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJl
U3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICB2b2lk
IExpc3RMYXllcihGSUxFICpmcCwgY29uc3QgTGlzdDxUd2luZT4gJmxzKTsKICAgIEJPT0xFQU4g
QWRkTGF5ZXIoY29uc3QgTGlzdDxOUkhZX2NsYXNzVGhpbmcgKj4gJml0ZW1zKTsKICAgIEJPT0xF
QU4gUmVtb3ZlTGF5ZXIoY29uc3QgTGlzdDxOUkhZX2NsYXNzVGhpbmcgKj4gJml0ZW1zKTsKICAg
IGNvbnN0IExpc3Q8TlJIWV9jbGFzc1RoaW5nICo+ICZHZXRMYXllckxheWVycygpOwogICAgY29u
c3QgTGlzdDxOUkhZX2NsYXNzVGhpbmcgKj4gJkdldExheWVyT2JqZWN0cygpOwogICAgQk9PTEVB
TiBMYXllckNvbnRhaW5zKE5SSFlfY2xhc3NUaGluZyAqdGhpbmcpOwogICAgQk9PTEVBTiBMYXll
clJlY0NvbnRhaW5zKE5SSFlfY2xhc3NUaGluZyAqdGhpbmcpOwp9OwoKIAoKIAoKIyAzOSAibnJo
eS9OUkhZX0FjY2Vzcy5jIiAyCgoKIyAxICJoL25yaHlfdGVtcGxhdGVGaW5kLmgiIDEKCiAKCgoK
CgoKCgoKCgoKDAoKCgoKIyAxICJoL25yaHlfdGVtcGxhdGVNYXRjaC5oIiAxCiAKCgoKCgoKCgoK
CgwKCgoKCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+CmNsYXNz
IE5SSFlfbWF0Y2ggewpwcml2YXRlOgogICAgIAoKICAgIFR3aW5lICAgICAgICAgICAgICAgb3Jp
Z2luYWw7CgogICAgIAogICAgVHdpbmUgICAgICAgICAgICAgICBwcmVmaXg7CiAgICBUd2luZSAg
ICAgICAgICAgICAgIHN1ZmZpeDsKCiAgICAgCgogICAgYm9vbCAgICAgICAgICAgICAgICB2YWxp
ZEFscGhhUmFuZ2U7CiAgICBUd2luZSAgICAgICAgICAgICAgIGFscGhhU3RhcnQ7CiAgICBUd2lu
ZSAgICAgICAgICAgICAgIGFscGhhRW5kOwoKICAgIGJvb2wgICAgICAgICAgICAgICAgdmFsaWRO
dW1lcmljUmFuZ2U7CiAgICBib29sICAgICAgICAgICAgICAgIG51bWVyaWNTdGFydFdpbGQ7CiAg
ICBpbnQgICAgICAgICAgICAgICAgIG51bWVyaWNTdGFydDsKICAgIGJvb2wgICAgICAgICAgICAg
ICAgbnVtZXJpY0VuZFdpbGQ7CiAgICBpbnQgICAgICAgICAgICAgICAgIG51bWVyaWNFbmQ7Cgog
ICAgaW50ICAgICAgICAgICAgICAgICBpbmNyZW1lbnQ7CgogICAgIAoKICAgIGJvb2wgICAgICAg
ICAgICAgICAgZmFzdEJpbmFyeU9ubHk7CgogICAgIAoKICAgIGJvb2wgICAgICAgICAgICAgICAg
dXNlUm9vdDsKICAgICAKCiAgICB2ZWN0b3I8VHlwZSAqPjo6aXRlcmF0b3IgX3Jvb3QsIF9lbmQ7
CgogICAgIAoKCgogICAgdmVjdG9yPFR5cGUgKj46Oml0ZXJhdG9yIF9yb290Rm9yQXBwZW5kOwoK
ICAgICAKCgogICAgYm9vbCAgICAgICAgICAgICAgICBjcmVhdGlvbkZsYWc7CgogICAgIAoKICAg
IGJvb2wgICAgICAgICAgICAgICAgcmVjdXJzaXZlRmxhZzsKCiAgICAgCgogICAgYm9vbCAgICAg
ICAgICAgICAgICBwYXJlbnRGbGFnOwoKICAgICAKICAgIHZvaWQgICAgICAgICAgICAgICAgaW5z
dGFsbFRva2VuRXRBbCAoY29uc3QgY2hhciAqdG9rZW4pOwoKICAgICAKICAgICAKCiAgICBOUkhZ
X2J1bmNoIDxUeXBlPiAgICpyZU1hdGNoZW0gKFR3aW5lICZjdXJUb2tlblB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yPFR5cGUgKj46Oml0ZXJhdG9yIGl0ZW0s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleEludG9JdGVtKTsK
CiAgICAgCiAgICBOUkhZX2J1bmNoIDxUeXBlPiAgICptYXRjaFNvbG9XaWxkIChOUkhZX2J1bmNo
PFR5cGU+ICpleHRhbnRCdW5jaFB0cnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUd2luZSAmY2hhbm5lbEluZm8pOwoKICAgICAKCiAgICBUd2luZSAgICAgICAgICAg
ICAgIG1hdGNoQ3VycmVudE9iamVjdHMgKCk7CiAgICBUd2luZSAgICAgICAgICAgICAgIG1hdGNo
Q3VycmVudENoYW5uZWxzICgpOwoKICAgICAKCiAgICBUd2luZSAgICAgICAgICAgICAgIG1hdGNo
QWxsT2ZPbmVDbGFzcyAoY29uc3QgY2hhciAqd2hhdFR5cGUpOwoKICAgICAKICAgIHZvaWQgICAg
ICAgICAgICAgICAgcmVjdXJzaXZlQXBwZW5kIChOUkhZX2J1bmNoPFR5cGU+ICpidW5jaFB0cnMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yPFR5cGUgKj46
Oml0ZXJhdG9yIGl0ZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VHdpbmUgJmNoYW5uZWxJbmZvKTsKCiAgICAgCiAgICB2b2lkICAgICAgICAgICAgICAgIHBhcmVu
dEFwcGVuZCAoTlJIWV9idW5jaDxUeXBlPiAqYnVuY2hQdHJzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZlY3RvcjxUeXBlICo+OjppdGVyYXRvciBpdGVtLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR3aW5lICZjaGFubmVsSW5mbyk7CgogICAg
IAoKCiAgICB2b2lkICAgICAgICAgICAgICAgIGR1bWJDb3B5SW5mbyAoTlJIWV9tYXRjaDxUeXBl
PiAqbWF0Y2hQdHIpOwoKICAgICAKCgogICAgdmVjdG9yPFR5cGUgKj46Oml0ZXJhdG9yIGZhc3RN
YXRjaGVtKGNvbnN0IGNoYXIgKm1hdGNoKTsKCnB1YmxpYzoKICAgICAKCiAgICBOUkhZX21hdGNo
ICh2ZWN0b3I8VHlwZSAqPjo6aXRlcmF0b3Igcm9vdCwKICAgICAgICAgICAgICAgIHZlY3RvcjxU
eXBlICo+OjppdGVyYXRvciBlbmQpOwogICAgTlJIWV9tYXRjaCAoKTsKCiAgICB2b2lkIFNldEZs
YWdzKGJvb2wgY3JlYXRlLCBib29sIHJlY3Vyc2UsIGJvb2wgcGFyZW50KSB7CiAgICAgICAgY3Jl
YXRpb25GbGFnID0gY3JlYXRlOwogICAgICAgIHJlY3Vyc2l2ZUZsYWcgPSByZWN1cnNlOwogICAg
ICAgIHBhcmVudEZsYWcgPSBwYXJlbnQ7CiAgICB9CiAgICBOUkhZX2J1bmNoIDxUeXBlPiAgICpN
YXRjaGVtIChjb25zdCBjaGFyICpvcmlnVG9rZW4pOwoKICAgICAKCiAgICBUeXBlICAgICAgICAg
ICAgICAgICpGYXN0TWF0Y2hlbSAoY29uc3QgY2hhciAqdG9CZU1hdGNoZWQpOwoKfTsKCgojIDEg
ImgvbnJoeV90ZW1wbGF0ZU1hdGNoLmMiIDEKIyAxICJoL25yaHlfdGVtcGxhdGVNYXRjaC5oIiAx
CiAKCgoKCgoKCgoKCgwKCiMgMTQyICJoL25yaHlfdGVtcGxhdGVNYXRjaC5oIgoKIyAxICJoL25y
aHlfdGVtcGxhdGVNYXRjaC5jIiAyCgoKCgoKCiMgMSAiaC9ucmh5X2NsYXNzSG9tZS5oIiAxCgog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoMCiAKCgoKIAoKCiAKCgoKCgogCgoKCgogCiMgMSAiaC9u
cmh5X2NsYXNzUGFydGljbGUuaCIgMQoKCgoKCgoKCgplbnVtIERZTkFNSUNTX1N0YXR1cyB7CiAg
ICBEWU5BTUlDU19QbGF5ID0gMCwKICAgIERZTkFNSUNTX0luaXRpYWxpemUsCiAgICBEWU5BTUlD
U19Db29raW5nLAp9OyAKCgogCmVudW0gQ09OTkVDVHR5cGUgewoKCUNPTk5fTm9uZSA9IDAsCglD
T05OX0Jhc2UsCglDT05OX1NoZWFyLAoJQ09OTl9CZW5kLAp9OwoKY2xhc3MgTlJIWV9jbGFzc1dl
Yk5vZGUKewogIHB1YmxpYzoKICAgIGludCAJbm9kZUlkOwkKICAgIENPTk5FQ1R0eXBlCWNvbm5l
Y3RUeXBlOwogICAgQk9PTEVBTiAJbmV3Tm9kZTsKfTsKCgpjbGFzcyBOUkhZX2NsYXNzV2ViVGhy
ZWFkCnsJCgogcHVibGljOgogICAgaW50IAkJICAgICBjb25uZWN0RnJvbTsKICAgIExpc3QgPE5S
SFlfY2xhc3NXZWJOb2RlPiBjb25uZWN0VG87CgogICAgfk5SSFlfY2xhc3NXZWJUaHJlYWQodm9p
ZCk7CgoKICAgIEJPT0xFQU4gCUZpbmRDb25uZWN0aW9uKGludCB0bywgaW50ICppbmRleCk7CiAg
ICBCT09MRUFOIAlOZXdDb25uZWN0aW9uKGludCB0bywgQ09OTkVDVHR5cGUgY29ubmVjdFR5cGUp
OwogICAgQk9PTEVBTiAJUmVtb3ZlQ29ubmVjdGlvbihpbnQgdG8pOwogICAgdm9pZCAJQ2xlYW5O
ZXdUYWcodm9pZCk7CiAgICB2b2lkIAlJbmZvKHZvaWQpOwoKfTsKCmNsYXNzIE5SSFlfY2xhc3NX
ZWIKewkKCiBwdWJsaWM6CiAgICBMaXN0IDxOUkhZX2NsYXNzV2ViVGhyZWFkICo+IHdlYjsKCQog
ICAgfk5SSFlfY2xhc3NXZWIodm9pZCk7CgogICAgQk9PTEVBTiAJRmluZEZyb21MaXN0KGludCBm
cm9tLCBpbnQgKmluZGV4KTsKICAgIEJPT0xFQU4gCUZpbmRDb25uZWN0aW9uKGludCBmcm9tLCBp
bnQgdG8pOwogICAgQk9PTEVBTiAJTmV3Q29ubmVjdGlvbihpbnQgZnJvbSwgaW50IHRvLCBDT05O
RUNUdHlwZSBjb25uZWN0VHlwZSk7CiAgICBCT09MRUFOIAlSZW1vdmVDb25uZWN0aW9uKGludCBm
cm9tLCBpbnQgdG8pOwoKICAgIE5SSFlfY2xhc3NXZWJOb2RlICpHZXRDb25uZWN0aW9uKGludCBm
cm9tLCBpbnQgdG8sIGludCAqZnJvbUluZCwgaW50ICp0b0luZCk7CgogICAgaW50IAlNYWtlT3Zl
cmxhcCh2b2lkKTsKICAgIGludAkJQ29uZGVuc2VSZWxhdGlvbnModm9pZCk7CgogICAgdm9pZCAJ
Q2xlYW5OZXdUYWcodm9pZCk7CiAgICB2b2lkIAlJbmZvKHZvaWQpOwoJCQp9OwoKCiAKIAogCmNs
YXNzIE5SSFlfY29sbGlzaW9uUG9pbnQKewogcHVibGljOgogICAgTV9WZWN0b3IJY29sbGlzaW9u
UG9pbnQ7CiAgICBNX1ZlY3Rvcgljb2xsaXNpb25Ob3JtYWw7CiAgICBNX1ZlY3Rvcgljb2xsaXNp
b25Qb2ludFZlbG9jaXR5OwogICAgTV9WZWN0b3IJcmVzcG9uc2VWZWxvY2l0eTsKICAgIEJPT0xF
QU4gCXNsaWRpbmdDb250YWN0OwoKICAgIGZsb2F0CXQ7CiAgICBpbnQgCXBpZDsKCgogICAgTlJI
WV9jb2xsaXNpb25Qb2ludCh2b2lkKSB7IHQgPSAxLjA7IHBpZCA9IC0xOyB9CiAgICB2b2lkIElu
Zm8oaW50IGkpOwp9OwoKCiAKIAogCmNsYXNzIE5SSFlfTWFzc0dyb3VwCiB7CgogIHB1YmxpYzoK
CWRvdWJsZSAgIG1hc3M7CiAgICAgICAgQk9PTEVBTiAgbG9ja2VkOwoJTGlzdDxpbnQ+IHBhcnRp
Y2xlczsKCgogICAgICAgIE5SSFlfTWFzc0dyb3VwKHZvaWQpOwogICAgICAgIH5OUkhZX01hc3NH
cm91cCh2b2lkKTsKCgl2b2lkIFNldE1hc3MoZG91YmxlIG5ld01hc3MpIHsgbWFzcyA9IG5ld01h
c3M7IH0KCXZvaWQgU2V0TG9jayhCT09MRUFOIG5ld0xvY2spIHsgbG9ja2VkID0gbmV3TG9jazsg
fQoJCgl2b2lkIEluZm8oaW50IGksQk9PTEVBTiB2ZXJib3NlKTsKIH07CgoKIAogCiAKY2xhc3Mg
TlJIWV9QYXJ0aWNsZQogewpwdWJsaWM6CglOUkhZX1BhcnRpY2xlKHZvaWQpOwoKCWRvdWJsZSAg
ICAgICAgICAgbTsKCglNX1ZlY3RvciAgICAgICAgIHA7CglNX1ZlY3RvciAgICAgICAgIHY7CglN
X1ZlY3RvciAgICAgICAgIGY7CgoJTV9WZWN0b3IgICAgICAgICBzdGVwVmVsOwoKCUJPT0xFQU4g
ICAgIGxvY2tlZDsJCiB9OwoKdHlwZWRlZiBzdHJ1Y3QgTlJIWV9QYXJ0aWNsZSogTlJIWV9QYXJ0
aWNsZVB0cjsKCiAKY2xhc3MgTlJIWV9QYXJ0aWNsZVN0YXRlCiB7CnB1YmxpYzoKCU1fVmVjdG9y
ICAgICAgICAgcDsKCU1fVmVjdG9yICAgICAgICAgdjsKIH07CgoKIApjbGFzcyBOUkhZX1BhcnRp
Y2xlU3lzdGVtU3RhdGUKIHsKcHVibGljOgogICAgZmxvYXQgCQkgCWZyYW1lOwkKICAgIExpc3Q8
TlJIWV9QYXJ0aWNsZVN0YXRlPgkgcFN0YXRlOwogCiAgICB2b2lkIENvcHlUbyhOUkhZX1BhcnRp
Y2xlU3lzdGVtU3RhdGUgKmRzdCk7CiAgICB2b2lkIENvcHlGcm9tKE5SSFlfUGFydGljbGVTeXN0
ZW1TdGF0ZSAqc3JjKTsKCiAgICB2b2lkIEluZm8oaW50IGkpOwogICAgdm9pZCBXcml0ZShGSUxF
ICpmcCk7CiAgICB2b2lkIFJlYWQoRklMRSAqZnApOwogICAgVHdpbmUgRW5jb2RlKHZvaWQpOwog
ICAgaW50IERlY29kZShjb25zdCBjaGFyICpiaW5hcnkpOwoKIH07CgogCmNsYXNzIE5SSFlfUGFy
dGljbGVTeXN0ZW1TdGF0ZUxpc3QKIHsKcHVibGljOgoJTGlzdDxOUkhZX1BhcnRpY2xlU3lzdGVt
U3RhdGUgKj4gc3RhdGVMaXN0OwoJCQogICAgICAgIEJPT0xFQU4gIAlGaW5kU3RhdGUoZmxvYXQg
ZnJhbWUsIGludCAqaW5kZXgpOwoJQk9PTEVBTiAJR2V0U3Vycm91bmRpbmdTdGF0ZXMoZmxvYXQg
ZnJhbWUsIE5SSFlfUGFydGljbGVTeXN0ZW1TdGF0ZSAqKnMxLCBOUkhZX1BhcnRpY2xlU3lzdGVt
U3RhdGUgKipzMik7CglCT09MRUFOIAlHZXRJbnRlcnBvbGF0ZWRTdGF0ZShOUkhZX1BhcnRpY2xl
U3lzdGVtU3RhdGUgKmRzdCk7Cgl2b2lkIAkJQWRkU3RhdGUoTlJIWV9QYXJ0aWNsZVN5c3RlbVN0
YXRlICpwc3QpOwoJdm9pZCAJCVB1cmdlU3RhdGVzKGZsb2F0IGZzdGFydCwgZmxvYXQgZmVuZCk7
CiAgICAgICAgdm9pZCAJCUluZm8odm9pZCk7CgoJdm9pZAkJV3JpdGUoRklMRSAqZnApOwogICAg
CXZvaWQgCQlSZWFkKEZJTEUgKmZwKTsKIH07CgoKIApjbGFzcyBYRk9STV9GbGV4VHJhbnNmb3Jt
YXRpb247CgogCiAKIApjbGFzcyBOUkhZX1BhcnRpY2xlU3lzdGVtCiB7CnByb3RlY3RlZDoKICAg
IFhGT1JNX0ZsZXhUcmFuc2Zvcm1hdGlvbgkqX1RyYW5zZm9ybWF0aW9uOwogICAgTlJIWV9jbGFz
c1dlYgkJKl9zdGl0Y2hXZWI7CiAgICBMaXN0PEJPT0xFQU4+CSAJX3NhdmVkU3RpdGNoZXM7Cgpw
dWJsaWM6CiAgICBpbnQgblBhcnRpY2xlczsKCiAgICBMaXN0PE5SSFlfUGFydGljbGUgKj4gICAg
IHBhcnRpY2xlczsKICAgIExpc3Q8TV9WZWN0b3I+CSBEZWZvcm1lZFZlcnRzOwogICAgTGlzdDxN
X1ZlY3Rvcj4JIERlZm9ybWVkVmVydHNTdGFydDsKICAgIExpc3Q8TV9WZWN0b3I+CSBEZWZvcm1l
ZFZlcnRzRW5kOwogICAgTGlzdDxNX1ZlY3Rvcj4JIHNhdmVkRm9yY2VzOwogICAgTGlzdDxOUkhZ
X2NvbGxpc2lvblBvaW50ICo+IGNvbGxpc2lvbnM7CgogICAgZmxvYXQJCSBmcmFtZSwgZHQsIHRp
bWU7CgogICAgTlJIWV9QYXJ0aWNsZVN5c3RlbVN0YXRlICAgICBlbmRTdGF0ZTsKICAgIE5SSFlf
UGFydGljbGVTeXN0ZW1TdGF0ZSAgICAgc3RhcnRTdGF0ZTsKICAgIE5SSFlfUGFydGljbGVTeXN0
ZW1TdGF0ZSAgICAgaW5pdGlhbFN0YXRlOwogICAgTlJIWV9QYXJ0aWNsZVN5c3RlbVN0YXRlTGlz
dCBzYXZlZFN0YXRlczsKCgkgICAgIE5SSFlfUGFydGljbGVTeXN0ZW0odm9pZCk7CgkgICAgIH5O
UkhZX1BhcnRpY2xlU3lzdGVtKHZvaWQpOwogCiAgICBpbnQgICAgICBEaW1lbnNpb24oKSB7IHJl
dHVybiA2ICogcGFydGljbGVzLnNpemUoKTsgfQogICAgdm9pZCAgICAgQ2xlYXJGb3JjZXMoKTsK
ICAgIHZvaWQgICAgIENyZWF0ZVBhcnRpY2xlcyhpbnQgbik7ICAKICAgIHZvaWQgICAgIENyZWF0
ZVJlZlZlcnRzKGludCBuKTsgIAogCiAgICB2b2lkICAgICBUYWtlU3RlcChkb3VibGUgZHQpOwog
ICAgdm9pZCAgICAgR2V0U3RhcnRTdGF0ZSh2b2lkKTsKCiAgICB2b2lkICAgICBHZXRTdGF0ZShO
UkhZX1BhcnRpY2xlU3lzdGVtU3RhdGUgKnBzdCk7CiAgICB2b2lkICAgICBTZXRTdGF0ZShOUkhZ
X1BhcnRpY2xlU3lzdGVtU3RhdGUgKnBzdCk7CgogICAgdm9pZCAgICAgSW5mbygpOwogICAgZmxv
YXQgICAgQ2FsY3VsYXRlRXJyb3IoTlJIWV9QYXJ0aWNsZVN5c3RlbVN0YXRlICpwc3QpOwoKICAg
IHZvaWQgICAgIFNhdmVTdGF0ZShmbG9hdCBmcmFtZSk7CiAgICB2b2lkICAgICBQdXJnZVN0YXRl
cyhmbG9hdCBmc3RhcnQsIGZsb2F0IGZlbmQpOwogICAgdm9pZCAgICAgR2V0Rm9yY2VzKExpc3Q8
TV9WZWN0b3I+ICpmb3JjZUxpc3QpOwogICAgdm9pZCAgICAgU2V0Rm9yY2VzKExpc3Q8TV9WZWN0
b3I+ICpmb3JjZUxpc3QpOwoKICAgIHZvaWQgICAgIEdldFNhdmVkU3RpdGNoZXModm9pZCk7CiAg
ICB2b2lkICAgICBTZXRTYXZlZFN0aXRjaGVzKHZvaWQpOwoKICAgIHZvaWQgICAgIEludGVycG9s
YXRlU3RlcChmbG9hdCByKTsKICAgIHZvaWQgICAgIFBvc3RTdGVwKHZvaWQpOwogICAgdm9pZCAg
ICAgUHJlQ29vayh2b2lkKTsKICAgIAogICAgdm9pZCAJCQlTZXRUcmFuc2Zvcm1hdGlvbihYRk9S
TV9GbGV4VHJhbnNmb3JtYXRpb24gKnhmb3JtKSB7IF9UcmFuc2Zvcm1hdGlvbiA9IHhmb3JtOyB9
CiAgICBYRk9STV9GbGV4VHJhbnNmb3JtYXRpb24gCSpHZXRUcmFuc2Zvcm1hdGlvbih2b2lkKSB7
IHJldHVybiBfVHJhbnNmb3JtYXRpb247IH0KCiAgICB2b2lkCVN0aXRjaFBhcnRpY2xlcyh2b2lk
KTsKICAgIHZvaWQgCUNvcHlTdGl0Y2hlcyhOUkhZX2NsYXNzV2ViICp3ZWIpOwogICAgdm9pZCAJ
SW5pdGlhbGl6ZVN0aXRjaGVzKHZvaWQpOwogICAgdm9pZCAJQWN0aXZhdGVTdGl0Y2goaW50IGZy
b20sIGludCB0byk7CgogICAgaW50IAlBZGRDb2xsaXNpb24oaW50IHBpZCwgaW50IGlkeCk7CiAg
ICB2b2lkIAlBcHBseUNvbGxpc2lvbnModm9pZCk7CiAgICB2b2lkIAlDbGVhbkNvbGxpc2lvbnMo
dm9pZCk7Cn07CgoKIyA0NSAiaC9ucmh5X2NsYXNzSG9tZS5oIiAyCgoKCiAKIAogCgogCnRlbXBs
YXRlIDxjbGFzcyBUeXBlPiBjbGFzcyBOUkhZX21hdGNoOwp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4g
Y2xhc3MgTlJIWV9hbHBoYWxpc3Q7CgogCgoKCmNsYXNzIE5SSFlfY2xhc3NIb21lOwpjbGFzcyBE
RUZPUk1fSW5mbHVlbmNlOwpzdHJ1Y3QgTlJIWV9jbGFzc0hvbWVDdXJ2ZTsKc3RydWN0IE5SSFlf
Y2xhc3NPYmplY3Q7CgpjbGFzcyBOUkhZX2NsYXNzRHluYW1pY0hvbWUKewogICAgcHVibGljOgoJ
TV9NYXRyaXggd29ybGRNYXRyaXgsd29ybGRNYXRyaXhTdGFydCx3b3JsZE1hdHJpeEVuZDsKCU1f
TWF0cml4IHdvcmxkSW52ZXJzZU1hdHJpeFN0YXJ0LHdvcmxkSW52ZXJzZU1hdHJpeEVuZDsKCUJP
T0xFQU4gIG1vdmluZzsKfTsKCgogCgoKc3RydWN0IE5SSFlfY2xhc3NIb21lIDoKICAgIHB1Ymxp
YyBOUkhZX2NsYXNzT2JqZWN0LCAKICAgIHB1YmxpYyBPYnNlcnZlckZhY3RvcnkgPE5SSFlfY2xh
c3NIb21lPgp7CnByaXZhdGU6CiAgICB0eXBlZGVmIE5SSFlfY2xhc3NPYmplY3QgaW5oZXJpdGVk
OwogICAgdHlwZWRlZiBOUkhZX2FscGhhbGlzdDxOUkhZX2NsYXNzSG9tZT4gYWxwaGFsaXN0Owog
ICAgZnJpZW5kIE5SSFlfbWF0Y2ggPE5SSFlfY2xhc3NIb21lPjsKICAgIGZyaWVuZCBOUkhZX2Fs
cGhhbGlzdDxOUkhZX2NsYXNzSG9tZT47CgogICAgZnJpZW5kIGNsYXNzIFhGT1JNX0Jhc2U7Cgog
ICAgREVGT1JNX0luZmx1ZW5jZSAgICAgICAgICAgICAgICAqX2luZmx1ZW5jZTsKICAgIFR3aW5l
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbk5hbWU7CiAgICBaT09MRUFOICAgICAgICAg
ICAgICAgICAgICAgICAgIHRlc3RPcmlnVmVydHM7Cgpwcm90ZWN0ZWQ6CiAgICBEWU5BTUlDU19T
dGF0dXMJCQlfRHluU3RhdHVzOwoKICAgICAKICAgICAKICAgICAKICAgIHZvaWQgcHJlVHJhdmVy
c2UoZmxvYXQgZnJhbWUpOwogICAgdm9pZCBwb3N0TG9jYWxUcmF2ZXJzZSAoKTsKICAgIHZvaWQg
IHBvc3RXb3JsZFRyYXZlcnNlKHZvaWQgKTsKCnB1YmxpYzoKICAgIE5SSFlfQ29va2llCQkgCSAg
ICBjaGFuZ2VkQ29va2llOwoKCSAKICAgIE5SSFlfY2xhc3NIb21lICgKICAgICAgICBjb25zdCBD
SEFSICAqbmFtZQogICAgICAgICk7CiAgICBOUkhZX2NsYXNzSG9tZSAoCiAgICAgICAgY29uc3Qg
Q0hBUiAgICAgICpuYW1lLAogICAgICAgIE5SSFlfY2xhc3NIb21lICAqY2xvbmVGcm9tCiAgICAg
ICAgKTsKCiAgICBOUkhZX2NsYXNzSG9tZSAoCiAgICAgICAgdm9pZCAKICAgICAgICApOwoKICAg
IH5OUkhZX2NsYXNzSG9tZSAoCiAgICAgICAgdm9pZCAKICAgICAgICApOwoKICAgICAKCiAgICBC
T09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemUgKGNvbnN0IGNoYXIgKik7
CgogICAgIAogICAgc3RhdGljIGNvbnN0IENIQVIgICAgICAgICAgICAgICAqUHJpbnRTZWxmQ2xh
c3NuYW1lICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1cm4gKCJOUkhZX2NsYXNz
SG9tZSIpOyB9CgogICAgIAoKICAgIHN0YXRpYyBJTlQgICAgICAgICAgICAgICAgICAgICAgR2V0
U2VsZkNsYXNzVHlwZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuIChUSElO
R19UWVBFX0hPTUUpOyB9CgogICAgc3RhdGljIE5SSFlfYnVuY2g8TlJIWV9jbGFzc0hvbWU+ICAg
KkZpbmQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hB
UiAgKm5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICB2b2lk
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5hbWUgKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUiAgKm5ld05hbWUKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBOUkhZX2NsYXNzVGhpbmcgICAgICAgICAgICAg
ICAgICpDbG9uZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBDSEFSICAqbmV3TmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoK
ICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0VHlwZU9mSG9tZSAoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSICpuZXdUeXBlCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgY29uc3QgQ0hBUiAgICAg
ICAgICAgICAgICAgICAgICAqR2V0VHlwZU9mSG9tZSAoCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICApOwoKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0VGVzdE9yaWdWZXJ0
cyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaT09MRUFOICAgICBu
ZXdUZXN0T3JpZ1ZlcnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAg
ICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIEdldFRlc3RPcmlnVmVydHMgKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAodGVzdE9yaWdWZXJ0cyk7IH0KICAgIGNv
bnN0IENIQVIgICAgICAgICAgICAgICAgICAgICAgKlByaW50VGVzdE9yaWdWZXJ0cyAoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApIHsgaWYgKHRlc3RPcmlnVmVydHMpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAoKGNvbnN0IENIQVIqKSJ2ZXJ0czogdGVzdCBvcmln
Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gKChjb25zdCBDSEFSKikidmVydHM6IHRlc3QgY3VyIik7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgCiAgICBaT09MRUFOICAgICAgICAgICAg
ICAgICAgICAgICAgIFNldFNvbGlkICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFJFQUwgICAgICBuZXdTb2xpZFZhbHVlCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICkgeyByZXR1cm4gKDAgKTsgfQogICAgIAogICAgUkVBTCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHZXRTb2xpZCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
IHsgcmV0dXJuICgoUkVBTCkwLjApOyB9CgogICAgdm9pZCBDcmVhdGVPYnNlcnZlciAoaW50IHR5
cGUpIHsKCU9ic2VydmVyRmFjdG9yeTxOUkhZX2NsYXNzSG9tZT46OmRvQ3JlYXRlT2JzZXJ2ZXIg
KHRoaXMsIHR5cGUpOyB9OwoKICAgICAKCgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEZXNjcmliZUNyZWF0ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmli
ZUZ1bGxTdGF0ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUkhZ
X0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUZ1bGxTdGF0
ZVBhY2tlZCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUkhZX0Ns
YXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
OwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZURlbGV0ZSAoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUkhZX0NsYXNzRGVzY3JpYmVT
dHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZVR5cGUgKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRGVzY3JpYmVWZXJ0VGVzdCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBEZXNjcmliZUN1cnZlU3RhcnQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3Jp
YmVDdXJ2ZUVuZCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUkhZ
X0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUN1cnZlTG93
ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5SSFlfQ2xhc3NEZXNj
cmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICB2
b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlQ3VydmVIaWdoICgKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVh
bSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlQ3VydmVTbGFjayAoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEZXNjcmliZUN1cnZlU3RhcnRWZWwgKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRGVzY3JpYmVDdXJ2ZUVuZFZlbCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICBj
b25zdCBDSEFSICAgICAgICAgICAgICAgICAgICAgICpQcmludERlcml2ZWRDbGFzc09mU2VsZlR5
cGVOYW1lICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1cm4gKCJob21lIik7IH0K
ICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0RGVyaXZlZENsYXNzT2ZTZWxm
VHlwZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuIChUSElOR19UWVBFX0hP
TUUpOyB9CgogICAgdm9pZCAJCQkgICAgTGlzdEhvbWUoRklMRSAqZnAsIGNvbnN0IExpc3Q8VHdp
bmU+ICZscyk7CgogICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXIgKAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTV9WZWN0b3IgICAgdmVjCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAKICAgIE5SSFlf
Y2xhc3NIb21lQ3VydmUgICAgICAgICAgICAgKmhvbWVDdXJ2ZTsKCiAgICAgCgogICAgdm9pZCAg
U2V0TmVlZHNSZWNhbGMgKCk7CgogICAgIAogICAgTlJIWV9jbGFzc0R5bmFtaWNIb21lCSpkeW5h
bWljSG9tZUluZm87CiAgICB2b2lkIAkJCVByZVN0ZXAodm9pZCk7CiAgICB2b2lkIAkJCVBvc3RT
dGVwKHZvaWQpOwogICAgdm9pZCAJCQlJbnRlcnBvbGF0ZVN0ZXAoZmxvYXQgcik7CgogICAgdm9p
ZCAJCQlTZXREeW5hbWljc1N0YXR1cyhEWU5BTUlDU19TdGF0dXMgcykgeyBfRHluU3RhdHVzID0g
czsgfQogICAgRFlOQU1JQ1NfU3RhdHVzCQlHZXREeW5hbWljc1N0YXR1cyh2b2lkKSB7IHJldHVy
biBfRHluU3RhdHVzOyB9CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgUHJlcGFyZSgp
OyAgCiAgICBERUZPUk1fSW5mbHVlbmNlICppbmZsdWVuY2UoKTsKfTsKCgojIDcgImgvbnJoeV90
ZW1wbGF0ZU1hdGNoLmMiIDIKCiMgMSAiaC9ucmh5X2NsYXNzQ2hhbm5lbC5oIiAxCiAKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCmNsYXNzIE5SSFlfY2xhc3NDaGFubmVsOwpjbGFzcyBOUkhZX2Ns
YXNzSG9tZTsKY2xhc3MgWEZPUk1fQmFzZTsKY2xhc3MgTlJIWV9DdXJ2ZUR5bmFtaWM7Cgp0eXBl
ZGVmIHZlY3RvcjxOUkhZX2NsYXNzQ2hhbm5lbCAqPiBOUkhZX2NoYW5uZWxzOwpleHRlcm4gTlJI
WV9kZXBlbmRUeXBlKiBOUkhZX2RlcGVuZENoYW5uZWxWYWx1ZTsKCmNsYXNzIE5SSFlfZGVwZW5k
TWFzdGVyQ2hhbm5lbDogcHVibGljIE5SSFlfZGVwZW5kTWFzdGVyCnsKICAgIGZyaWVuZCBOUkhZ
X2NsYXNzQ2hhbm5lbDsKICAgIE5SSFlfY2xhc3NDaGFubmVsKiBfY2hhbm5lbDsgIAogICAgaW50
IGNvbXB1dGUoIGZsb2F0IGZyYW1lLCBOUkhZX2RlcGVuZFR5cGUgKmRlcGVuZFR5cGUgKSB7IHJl
dHVybiAwOyB9CiAgICBOUkhZX2RlcGVuZE1hc3RlckNoYW5uZWwoIE5SSFlfY2xhc3NDaGFubmVs
KiBjaGFubmVsICk6IAoJX2NoYW5uZWwoY2hhbm5lbCkge30KfTsKCmVudW0gTlJIWV9jaGFubmVs
RGF0YU1vZGUgewogICAgTkNETV9TdGF0aWMsCiAgICBOQ0RNX0R5bmFtaWMsCiAgICBOQ0RNX0Rl
cGVuZAp9OwogICAgCgpjbGFzcyBOUkhZX2NsYXNzQ2hhbm5lbFN0YXR1czogcHVibGljIFN1Ympl
Y3QKewoKICAgIHVuc2lnbmVkIHNPbjoxOwogICAgdW5zaWduZWQgc0hpZGRlbjoxOwogICAgdW5z
aWduZWQgc0ltcGxpY2l0OjE7CiAgICB1bnNpZ25lZCBzQ3JlYXRlZDoxOwogICAgdW5zaWduZWQg
c0ljb25pZnk6MTsKICAgIHVuc2lnbmVkIHNYZm9ybU5vbkxpbmVhcjoxOwogICAgdW5zaWduZWQg
c1hmb3JtTGluZWFyOjE7CiAgICB1bnNpZ25lZCBzTG9ja2VkRm9yUmVhZDoxOwogICAgdW5zaWdu
ZWQgc0xvY2tlZDoxOwogICAgdW5zaWduZWQgc1dyaXRlYWJsZToxOwogICAgdW5zaWduZWQgc0N1
cnJlbnQ6MTsKICAgIHVuc2lnbmVkIHNEZXN0cm95ZWQ6MTsKICAgIHVuc2lnbmVkIDo0OyAgCiAg
ICBOUkhZX2NoYW5uZWxEYXRhTW9kZSBtb2RlOjE2OwoKcHVibGljOgogICAgdmlydHVhbCB2b2lk
IFNldERhdGFNb2RlKCBOUkhZX2NoYW5uZWxEYXRhTW9kZSBtICk7CiAgICBOUkhZX2NoYW5uZWxE
YXRhTW9kZSBHZXREYXRhTW9kZSgpIHsgcmV0dXJuIG1vZGU7IH0KCiAgICBaT09MRUFOIFNldFN0
YXR1c09uKCBaT09MRUFOICk7CiAgICB1bnNpZ25lZCBHZXRTdGF0dXNPbigpIHsgcmV0dXJuIHNP
bjsgfQoKICAgIFpPT0xFQU4gU2V0U3RhdHVzSGlkZGVuKCBaT09MRUFOICk7CiAgICB1bnNpZ25l
ZCBHZXRTdGF0dXNIaWRkZW4oKSB7IHJldHVybiBzSGlkZGVuOyB9CgogICAgWk9PTEVBTiBTZXRT
dGF0dXNJbXBsaWNpdCggWk9PTEVBTiApOwogICAgdW5zaWduZWQgR2V0U3RhdHVzSW1wbGljaXQo
KSB7IHJldHVybiBzSW1wbGljaXQ7IH0KCiAgICB2b2lkIFNldFN0YXR1c0NyZWF0ZWQoIHVuc2ln
bmVkIGkgKSB7IHNDcmVhdGVkID0gaTsgfQogICAgdW5zaWduZWQgR2V0U3RhdHVzQ3JlYXRlZCgp
IHsgcmV0dXJuIHNDcmVhdGVkOyB9CgogICAgdmlydHVhbCBaT09MRUFOIFNldFN0YXR1c0xvY2tl
ZCggWk9PTEVBTiApOwogICAgdW5zaWduZWQgR2V0U3RhdHVzTG9ja2VkKCkgeyByZXR1cm4gc0xv
Y2tlZDsgfQoKICAgIHZvaWQgU2V0U3RhdHVzTG9ja2VkRm9yUmVhZCggdW5zaWduZWQgaSApIHsg
c0xvY2tlZEZvclJlYWQgPSBpOyB9CiAgICB1bnNpZ25lZCBHZXRTdGF0dXNMb2NrZWRGb3JSZWFk
KCkgeyByZXR1cm4gc0xvY2tlZEZvclJlYWQ7IH0KCiAgICB2b2lkIFNldFN0YXR1c1hmb3JtTGlu
ZWFyKCB1bnNpZ25lZCBpICkgeyBzWGZvcm1MaW5lYXIgPSBpOyB9CiAgICB1bnNpZ25lZCBHZXRT
dGF0dXNYZm9ybUxpbmVhcigpIHsgcmV0dXJuIHNYZm9ybUxpbmVhcjsgfQoKICAgIHZvaWQgU2V0
U3RhdHVzWGZvcm1Ob25MaW5lYXIoIHVuc2lnbmVkIGkgKSB7IHNYZm9ybU5vbkxpbmVhciA9IGk7
IH0KICAgIHVuc2lnbmVkIEdldFN0YXR1c1hmb3JtTm9uTGluZWFyKCkgeyByZXR1cm4gc1hmb3Jt
Tm9uTGluZWFyOyB9CgogICAgWk9PTEVBTiBTZXRTdGF0dXNJY29uaWZ5KCBaT09MRUFOICk7CiAg
ICB1bnNpZ25lZCBHZXRTdGF0dXNJY29uaWZ5KCkgeyByZXR1cm4gc0ljb25pZnk7IH0KCiAgICB2
b2lkIFNldFN0YXR1c1dyaXRlYWJsZSggdW5zaWduZWQgaSApIHsgc1dyaXRlYWJsZSA9IGk7IH0K
ICAgIHVuc2lnbmVkIEdldFN0YXR1c1dyaXRlYWJsZSgpIHsgcmV0dXJuIHNXcml0ZWFibGU7IH0K
CiAgICB2b2lkIFNldFN0YXR1c0N1cnJlbnQoIHVuc2lnbmVkIGkgKSB7IHNDdXJyZW50ID0gaTsg
fQogICAgdW5zaWduZWQgR2V0U3RhdHVzQ3VycmVudCgpIHsgcmV0dXJuIHNDdXJyZW50OyB9Cgog
ICAgdm9pZCBTZXRTdGF0dXNEZXN0cm95ZWQoIHVuc2lnbmVkIGkgKSB7IHNEZXN0cm95ZWQgPSBp
OyB9CiAgICB1bnNpZ25lZCBHZXRTdGF0dXNEZXN0cm95ZWQgKCkgeyByZXR1cm4gc0Rlc3Ryb3ll
ZDsgfQoKICAgICAKICAgICAKICAgIHZpcnR1YWwgdm9pZCBNb3ZlTG9ja2VkRm9yUmVhZFRvTG9j
a2VkKCk7Cn07CgpjbGFzcyBOUkhZX2NsYXNzQ2hhbm5lbDogCiAgICBwdWJsaWMgTlJIWV9jbGFz
c0NoYW5uZWxTdGF0dXMsCiAgICBwdWJsaWMgT2JzZXJ2ZXJGYWN0b3J5PE5SSFlfY2xhc3NDaGFu
bmVsPiwKICAgIHB1YmxpYyBPYnNlcnZlciwKICAgIHB1YmxpYyBOUkhZX2RlcGVuZENsaWVudAp7
CgogICAgaW50IHR5cGU7CiAgICBpbnQgaW5zdGFuY2U7CiAgICBOUkhZX2NsYXNzVGhpbmcqIGJh
Y2tSZWY7CiAgICB2b2lkIGluaXRpYWxpemUoKTsKICAgIFpPT0xFQU4gc2V0VmFsdWUgKCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgWk9PTEVBTiApOwogICAgWk9PTEVBTiBzZXRWYWx1ZSAo
IGNvbnN0IGZsb2F0KiwgaW50LCBpbnQsIFpPT0xFQU4gKTsKICAgIFpPT0xFQU4gdmFsaWREZWZh
dWx0VmFsdWU7CiAgICBmbG9hdCBkZWZhdWx0VmFsdWU7CiAgICBOUkhZX0N1cnZlRHluYW1pYyog
X2N1cnZlOwogICAgc3RyaW5nIF9kZXBlbmRPZmY7CiAgICBib29sIF9kZXBlbmRPZmZTdGF0dXM7
CiAgICBmbG9hdCBzZW5zaXRpdml0eTsKICAgIFpPT0xFQU4gbWluaW11bVRyYXZlbExpbWl0QWN0
aXZlOwogICAgZmxvYXQgbWluaW11bVRyYXZlbExpbWl0OwogICAgWk9PTEVBTiBtYXhpbXVtVHJh
dmVsTGltaXRBY3RpdmU7CiAgICBmbG9hdCBtYXhpbXVtVHJhdmVsTGltaXQ7CiAgICBaT09MRUFO
IHRyYXZlbExpbWl0Q2xhbXAgKCBaT09MRUFOLCBmbG9hdCwgWk9PTEVBTiwgZmxvYXQgKTsKICAg
IFR3aW5lIF9vbmx5R3JvdXA7CiAgICBUd2luZSBfbm90R3JvdXA7CiAgICBUd2luZSBfZnVsbEdy
b3VwOwogICAgc3RydWN0IE5SSFlfdG9Eb0xpc3QgewogICAgICAgIExpc3Q8IHNob3J0ID4gVG9E
bzsKICAgICAgICBCT09MRUFOIERpcnR5OwogICAgICAgIE5SSFlfdG9Eb0xpc3QgKCkgOiBEaXJ0
eSAoMSApIHt9CiAgICB9OwogICAgTlJIWV90b0RvTGlzdCBfdG9Eb0xpc3Q7CiAgICBaT09MRUFO
IGNyZWF0ZVRvRG9MaXN0ICgpOwogICAgTGlzdDwgTlJIWV9jbGFzc0hvbWUqID4gX2hvbWVzOwog
ICAgdm9pZCBzZXRUcmFuc2Zvcm1hdGlvbkRlZm9ybVN0YXR1cygpOwoKICAgICAKICAgIHZvaWQg
ZGV0YWNoKE5SSFlfZGVwZW5kRGF0YSAqZGF0YSk7CiAgICB2b2lkIG1ha2VEaXJ0eShOUkhZX2Rl
cGVuZERhdGEgKmRhdGEpOwogICAgc3RyaW5nIGNsaWVudE5hbWUoKTsKCiAgICBOUkhZX2RlcGVu
ZE1hc3RlckNoYW5uZWwqIF9kZXBlbmRNYXN0ZXJDaGFubmVsOwogICAgaW50IGFjdGl2YXRlRm9y
bXVsYShjbGFzcyBDSF9Gb3JtdWxhSW50ZXJwb2xhdGlvbiAqKTsKCnB1YmxpYzoKCiAgICBOUkhZ
X2NsYXNzQ2hhbm5lbCggaW50IHR5cGUgKTsKICAgIE5SSFlfY2xhc3NDaGFubmVsKCBjb25zdCBO
UkhZX2NsYXNzQ2hhbm5lbCYgY2xvbmVGcm9tICk7CiAgICB+TlJIWV9jbGFzc0NoYW5uZWwoKTsK
CiAgICAgCiAgICB2b2lkIFNldERhdGFNb2RlKCBOUkhZX2NoYW5uZWxEYXRhTW9kZSBtICk7CiAg
ICBaT09MRUFOIFNldFN0YXR1c0xvY2tlZCggWk9PTEVBTiApOwogICAgYm9vbCBJc0VkaXRhYmxl
KCk7CiAgICB2b2lkIE1vdmVMb2NrZWRGb3JSZWFkVG9Mb2NrZWQoKTsKCiAgICAgCiAgICB2b2lk
IENyZWF0ZU9ic2VydmVyIChpbnQgdHlwZSkgeyBkb0NyZWF0ZU9ic2VydmVyKHRoaXMsIHR5cGUp
OyB9OwoKICAgIFpPT0xFQU4gTW92ZUZyYW1lcyggaW50LCBpbnQgKTsKICAgIFpPT0xFQU4gQWRk
RnJhbWVzKCBpbnQsIGludCApOwogICAgWk9PTEVBTiBTdWJGcmFtZXMoIGludCwgaW50ICk7Cgog
ICAgWk9PTEVBTiBNYWtlU3RhdGljKCBaT09MRUFOIGZvcmNlU3RhdGljID0gMCAgKTsKICAgIFpP
T0xFQU4gTWFrZUR5bmFtaWMoKTsKCiAgICBCT09MRUFOIEdldFJlYWRPbmx5U3RhdHVzICgpOwoK
ICAgICAKICAgIEJPT0xFQU4gU2V0RGVwZW5kT25TdGF0dXMoIEJPT0xFQU4gc3RhdHVzLCBCT09M
RUFOIHBvcHVsYXRlID0gMSAgKTsKICAgIEJPT0xFQU4gU2V0RGVwZW5kKCBjb25zdCBjaGFyKiBl
eHByLCBCT09MRUFOIHN0YXR1cyApOwogICAgdm9pZCBSZW5hbWVEZXBlbmRPYmplY3RzKCBjb25z
dCBMaXN0PCBUd2luZSA+JiwgY29uc3QgTGlzdDwgVHdpbmUgPiYgKTsKICAgIFpPT0xFQU4gTGlz
dERlcGVuZCggTGlzdDwgVHdpbmUgPiApOwoKICAgIE5SSFlfQ3VydmVEeW5hbWljKiBHZXRDdXJ2
ZSgpOwoKICAgIHZvaWQgU2V0RGVmYXVsdFZhbHVlKCBpbnQgKTsKICAgIFpPT0xFQU4gR2V0RGVm
YXVsdFZhbHVlICggZmxvYXQqICk7CgogICAgZmxvYXQgR2V0VmFsdWUoKTsKICAgIGZsb2F0IEdl
dFZhbHVlKCBmbG9hdCApOwoKICAgIFpPT0xFQU4gU2V0VmFsdWUoIGZsb2F0ICk7CiAgICBaT09M
RUFOIFNldEFuZFNhdmVWYWx1ZSggZmxvYXQgKTsKICAgIFpPT0xFQU4gU2V0VmFsdWUoIGZsb2F0
LCBpbnQgKTsKICAgIFpPT0xFQU4gU2V0QW5kU2F2ZVZhbHVlKCBmbG9hdCwgaW50ICk7CiAgICBa
T09MRUFOIFNldFZhbHVlKCBmbG9hdCwgTlJIWV9JTlRfRlJBTkdFKiApOwogICAgWk9PTEVBTiBT
ZXRWYWx1ZSggZmxvYXQsIGludCwgaW50ICk7CiAgICBaT09MRUFOIFNldFZhbHVlKCBmbG9hdCwg
aW50LCBpbnQsIGludCApOwogICAgWk9PTEVBTiBTZXRBbmRTYXZlVmFsdWUoIGZsb2F0IG5ld1Zh
bHVlLCBOUkhZX0lOVF9GUkFOR0UqICk7CiAgICBaT09MRUFOIFNldFZhbHVlKCBmbG9hdCwgZmxv
YXQgKTsKICAgIFpPT0xFQU4gU2V0QW5kU2F2ZVZhbHVlKCBmbG9hdCwgZmxvYXQgKTsKICAgIFpP
T0xFQU4gU2V0VmFsdWUoIGZsb2F0LCBOUkhZX1JFQUxfRlJBTkdFKiApOwogICAgWk9PTEVBTiBT
ZXRBbmRTYXZlVmFsdWUoIGZsb2F0LCBOUkhZX1JFQUxfRlJBTkdFKiApOwogICAgWk9PTEVBTiBT
ZXRBbmRTYXZlVmFsdWUoIGZsb2F0KiwgaW50LCBpbnQgKTsKICAgIFpPT0xFQU4gU2V0QmluYXJ5
KCBjb25zdCBjaGFyICogKTsKCiAgICBmbG9hdCBTYXZlVmFsdWVGcm9tQ3VycmVudCgpOwogICAg
Wk9PTEVBTiBSZXNldFZhbHVlRnJvbUN1cnJlbnQoKTsKCiAgICBmbG9hdCBHZXRTZW5zaXRpdml0
eSgpIHsgcmV0dXJuIHNlbnNpdGl2aXR5OyB9CiAgICBmbG9hdCBTZXRTZW5zaXRpdml0eSggZmxv
YXQgbmV3U2Vuc2l0aXZpdHkgKSB7CglmbG9hdCBvbGQgPSBzZW5zaXRpdml0eTsKCXNlbnNpdGl2
aXR5ID0gbmV3U2Vuc2l0aXZpdHk7CglEZWxheWVkVXBkYXRlKCAoMHgwMDAwMDA4MCkgICk7Cgly
ZXR1cm4gKG9sZCk7CiAgICB9CgoKICAgIGZsb2F0IENsYW1wVmFsdWVBZ2FpbnN0TGltaXRzKCBm
bG9hdCB2YWx1ZSApOwogICAgZmxvYXQgR2V0TWluaW11bVRyYXZlbExpbWl0KCkgeyByZXR1cm4g
bWluaW11bVRyYXZlbExpbWl0OyB9CiAgICBaT09MRUFOIEdldE1pbmltdW1UcmF2ZWxMaW1pdEFj
dGl2ZSgpIHsgCglyZXR1cm4gbWluaW11bVRyYXZlbExpbWl0QWN0aXZlOyAKICAgIH0KICAgICAK
ICAgICAKICAgIFpPT0xFQU4gU2V0TWluaW11bVRyYXZlbExpbWl0KCBmbG9hdCApOwogICAgWk9P
TEVBTiBTZXRNaW5pbXVtVHJhdmVsTGltaXRBY3RpdmUgKCBaT09MRUFOIG5ld1N0YXR1cyApIHsK
CVpPT0xFQU4gb2xkID0gbWluaW11bVRyYXZlbExpbWl0QWN0aXZlOwoJbWluaW11bVRyYXZlbExp
bWl0QWN0aXZlID0gbmV3U3RhdHVzOwoJcmV0dXJuIG9sZDsKICAgIH0KICAgIGZsb2F0IEdldE1h
eGltdW1UcmF2ZWxMaW1pdCgpIHsgcmV0dXJuIG1heGltdW1UcmF2ZWxMaW1pdDsgfQogICAgZmxv
YXQgR2V0TWF4aW11bVRyYXZlbExpbWl0QWN0aXZlKCkgeyByZXR1cm4gbWF4aW11bVRyYXZlbExp
bWl0QWN0aXZlOyB9CiAgICAgCiAgICAgCiAgICBaT09MRUFOIFNldE1heGltdW1UcmF2ZWxMaW1p
dCggZmxvYXQgKTsKICAgIFpPT0xFQU4gU2V0TWF4aW11bVRyYXZlbExpbWl0QWN0aXZlKCBaT09M
RUFOIG5ld1N0YXR1cyApIHsKCVpPT0xFQU4gb2xkID0gbWF4aW11bVRyYXZlbExpbWl0QWN0aXZl
OwoJbWF4aW11bVRyYXZlbExpbWl0QWN0aXZlID0gbmV3U3RhdHVzOwoJcmV0dXJuIG9sZDsKICAg
IH0KCiAgICBpbnQgR2V0VHlwZSgpIHsgcmV0dXJuIHR5cGU7IH0KICAgIGludCBHZXRJbnN0YW5j
ZSgpIHsgcmV0dXJuIGluc3RhbmNlOyB9CiAgICB2b2lkIERlY3JlbWVudEluc3RhbmNlKCk7CiAg
ICB2b2lkIFNldEluc3RhbmNlICggaW50ICk7CiAgICBOUkhZX2NsYXNzVGhpbmcqIEdldEJhY2tS
ZWYoKSB7IHJldHVybiAoYmFja1JlZik7IH0KICAgIHZvaWQgU2V0QmFja1JlZiggTlJIWV9jbGFz
c1RoaW5nKiBuZXdCYWNrUmVmICk7CgogICAgIAogICAgdm9pZCBTZXRIb21lcyggY29uc3QgTGlz
dDwgTlJIWV9jbGFzc0hvbWUqID4gaG9tZXMgKTsKICAgIGNvbnN0IExpc3Q8TlJIWV9jbGFzc0hv
bWUqPiYgR2V0SG9tZXMoKSB7IHJldHVybiBfaG9tZXM7IH0KCiAgICBCT09MRUFOIElzQUtleSgg
ZmxvYXQgKTsKICAgIEJPT0xFQU4gQWRkS2V5KCBmbG9hdCApOwogICAgTGlzdCA8ZmxvYXQ+IEdl
dEtleXMoKTsKICAgIEJPT0xFQU4gQWRkS2V5cyggY29uc3QgTGlzdDxmbG9hdD4mICk7CiAgICBC
T09MRUFOIERlbGV0ZUtleXMoIGNvbnN0IExpc3QgPGZsb2F0PiYgKTsKICAgIEJPT0xFQU4gU2V0
S2V5cyggY29uc3QgTGlzdCA8ZmxvYXQ+JiAgKTsKICAgIEJPT0xFQU4gU2V0S2V5c0luRnJhbmdl
KCBjb25zdCBMaXN0IDxmbG9hdD4mLCBjb25zdCBOUkhZX0lOVF9GUkFOR0UmICk7CiAgICBCT09M
RUFOIFNldEtleXNJbkZyYW5nZSggY29uc3QgTGlzdCA8ZmxvYXQ+JiwgY29uc3QgTlJIWV9SRUFM
X0ZSQU5HRSYgKTsKICAgIGZsb2F0IE5lYXJlc3RLZXlMZXNzVGhhbiggZmxvYXQgKTsKICAgIGZs
b2F0IE5lYXJlc3RLZXlHcmVhdGVyVGhhbiggZmxvYXQgKTsKCiAgICAgCiAgICBaT09MRUFOIFNl
dE9ubHlHcm91cCggVHdpbmUgKTsKICAgIFpPT0xFQU4gU2V0RnVsbEdyb3VwKCBUd2luZSApOwog
ICAgWk9PTEVBTiBTZXROb3RHcm91cCggVHdpbmUgKTsKICAgIGNvbnN0IFR3aW5lICZHZXRPbmx5
R3JvdXAoKSB7IHJldHVybiBfb25seUdyb3VwOyB9CiAgICBjb25zdCBUd2luZSAmR2V0RnVsbEdy
b3VwKCkgeyByZXR1cm4gX2Z1bGxHcm91cDsgfQogICAgY29uc3QgVHdpbmUgJkdldE5vdEdyb3Vw
KCkgeyByZXR1cm4gX25vdEdyb3VwOyB9CiAgICBjb25zdCBMaXN0PHNob3J0PiYgR2V0VG9Eb0xp
c3QoKTsKICAgIHZvaWQgRGlydHlUb0RvTGlzdCgpOwoKICAgIFpPT0xFQU4gQ29weVNlbGYoIE5S
SFlfUkVBTF9GUkFOR0UqLCBmbG9hdCwgZmxvYXQgKTsKICAgIFpPT0xFQU4gU2hpZnRTZWxmKCBO
UkhZX1JFQUxfRlJBTkdFKiwgZmxvYXQgKTsKICAgIFpPT0xFQU4gUm90YXRlU2VsZiggTlJIWV9S
RUFMX0ZSQU5HRSosIGZsb2F0ICk7CiAgICBaT09MRUFOIExpbmVhclNlbGYoIGZsb2F0LCBmbG9h
dCwgaW50ICk7CiAgICBaT09MRUFOIEV4dHJhcG9sYXRlU2VsZiggaW50LCBpbnQsIGludCwgZmxv
YXQgKTsKICAgIFpPT0xFQU4gRXh0cmFwb2xhdGVTZWxmKCBpbnQsIGludCwgZmxvYXQgKTsKICAg
IFpPT0xFQU4gRWFzZUluT3V0U2VsZiggaW50LCBpbnQsIGludCwgZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQgKTsKICAgIFpPT0xFQU4gRWFzZUluT3V0U2VsZiggaW50LCBpbnQsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIGZsb2F0ICk7CiAgICBaT09MRUFOIEVhc2VJblNlbGYoIGludCwgaW50LCBp
bnQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGludCApOwogICAgWk9PTEVBTiBFYXNlSW5TZWxmKCBp
bnQsIGludCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgaW50ICk7CiAgICBaT09MRUFOIEVhc2VPdXRT
ZWxmKCBpbnQsIGludCwgaW50LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBpbnQgKTsKICAgIFpPT0xF
QU4gRWFzZU91dFNlbGYoIGludCwgaW50LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBpbnQgKTsKICAg
IFpPT0xFQU4gVGltZWNoYW5TZWxmKCBmbG9hdCogY29udHJvbCwgTlJIWV9JTlRfRlJBTkdFLCBO
UkhZX0lOVF9GUkFOR0UsCgkJCSAgWk9PTEVBTiwgWk9PTEVBTiwgVHdpbmUsIGZsb2F0ICk7Cgog
ICAgZmxvYXQgR2V0VmVsb2NpdHkoIGZsb2F0LCBmbG9hdCApOwogICAgZmxvYXQgR2V0QXZlcmFn
ZVZlbG9jaXR5KCBmbG9hdCwgZmxvYXQgKTsKICAgIFpPT0xFQU4gQXJlVmFsdWVzQ2hhbmdpbmco
KTsKICAgIHZvaWQgQ2hhbmdpbmdUb0NvbnN0YW50KCk7CiAgICBaT09MRUFOIElzVXNlbGVzcygp
OwogICAgWk9PTEVBTiBJc0Nhbk1ha2VTdGF0aWMoKTsKICAgIFpPT0xFQU4gSXNOYU4oKTsKCiAg
ICAgCiAgICBUd2luZSBHZXROYW1lRm9yRGVzY3JpYmVDcmVhdGUoKTsKICAgIFR3aW5lIEdldE9w
dGlvbkZvckRlc2NyaWJlQ3JlYXRlKCk7CiAgICAKICAgICAKICAgIHZvaWQgU2V0VW5kb0FkZFRv
Q3VycmVudCgpOwogICAgdm9pZCBTZXRVbmRvUmVtb3ZlRnJvbUN1cnJlbnQgKCk7CiAgICB2b2lk
IFNldFVuZG9UeXBlQ2hhbmdlZCggdW5zaWduZWQsIEJPT0xFQU4gb2ZmRmxhZyA9IDAgICk7CiAg
ICB2b2lkIFNldFVuZG9BZGRLZXlzKCBjb25zdCBMaXN0PGZsb2F0PiYga2V5TGlzdCApOwogICAg
dm9pZCBTZXRVbmRvRGVsZXRlS2V5cyggY29uc3QgTGlzdDxmbG9hdD4mIGtleUxpc3QgKTsKICAg
IHZvaWQgU2V0VW5kb0NoYW5nZUN1cnZlKCk7CgogICAgIAogICAgIAogICAgdm9pZCBEZXNjcmli
ZUNyZWF0ZSggY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtJiApOwogICAgdm9pZCBEZXNj
cmliZUZ1bGxTdGF0ZSggY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtJiApOwogICAgdm9p
ZCBEZXNjcmliZUZ1bGxTdGF0ZVNhbnNDdXJyZW5jeSggY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJl
U3RyZWFtJiApOwogICAgdm9pZCBEZXNjcmliZUZ1bGxTdGF0ZVNhbnNDdXJyZW5jeVdpdGhCaW5h
cnlEYXRhKAoJICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0mICk7CiAgICB2b2lk
IERlc2NyaWJlRnVsbFN0YXRlU2Fuc0N1cnJlbmN5QW5kRHluYW1pY0NhbGNzICgKCSAgICBjbGFz
cyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0mICk7CiAgICB2b2lkIERlc2NyaWJlRnVsbFN0YXRl
QWxhRGVzYyggY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtJiApOwogICAgdm9pZCBEZXNj
cmliZUN1cnZlKCBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0mICk7CiAgICB2b2lkIERl
c2NyaWJlQ3VycmVuY3koIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSYgKTsKICAgIHZv
aWQgRGVzY3JpYmVIb21lcyggY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtJiApOwogICAg
dm9pZCBEZXNjcmliZU9uRmxhZyggY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtJiApOwog
ICAgdm9pZCBEZXNjcmliZUltcGxpY2l0RmxhZyggY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3Ry
ZWFtJiApOwogICAgdm9pZCBEZXNjcmliZUxvY2soIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0
cmVhbSYgKTsKICAgIHZvaWQgRGVzY3JpYmVIaWRkZW4oIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmli
ZVN0cmVhbSYgKTsKICAgIHZvaWQgRGVzY3JpYmVPbmx5R3JvdXAoIGNsYXNzIE5SSFlfQ2xhc3NE
ZXNjcmliZVN0cmVhbSYgKTsKICAgIHZvaWQgRGVzY3JpYmVGdWxsR3JvdXAoIGNsYXNzIE5SSFlf
Q2xhc3NEZXNjcmliZVN0cmVhbSYgKTsKICAgIHZvaWQgRGVzY3JpYmVOb3RHcm91cCggY2xhc3Mg
TlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtJiApOwogICAgdm9pZCBEZXNjcmliZVNlbnNpdGl2aXR5
KCBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0mICk7CiAgICB2b2lkIERlc2NyaWJlSWNv
bmlmeSggY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtJiApOwogICAgdm9pZCBEZXNjcmli
ZVRyYXZlbCggY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtJiApOwoKICAgIFR3aW5lIEdl
dEZ1bGxOYW1lKCk7CiAgICBUd2luZSBHZXRUeXBlTmFtZUFuZEluc3RhbmNlKCk7CiAgICBUd2lu
ZSBHZXRBYmJyZXZpYXRlZE5hbWVBbmRJbnN0YW5jZSgpOwogICAgVHdpbmUgR2V0SG9tZXNPcHRp
b24oIGludCBpZ25vcmVEZWZhdWx0cyApOwogICAgVHdpbmUgR2V0T25GbGFnT3B0aW9uKCBpbnQg
aWdub3JlRGVmYXVsdHMgKTsKICAgIFR3aW5lIEdldExvY2tPcHRpb24oIGludCBpZ25vcmVEZWZh
dWx0cyApOwogICAgVHdpbmUgR2V0SGlkZGVuT3B0aW9uKCBpbnQgaWdub3JlRGVmYXVsdHMgKTsK
ICAgIFR3aW5lIEdldE9ubHlHcm91cE9wdGlvbiggaW50IGlnbm9yZURlZmF1bHRzICk7CiAgICBU
d2luZSBHZXRGdWxsR3JvdXBPcHRpb24oIGludCBpZ25vcmVEZWZhdWx0cyApOwogICAgVHdpbmUg
R2V0Tm90R3JvdXBPcHRpb24oIGludCBpZ25vcmVEZWZhdWx0cyApOwogICAgVHdpbmUgR2V0U2Vu
c2l0aXZpdHlPcHRpb24oIGludCBpZ25vcmVEZWZhdWx0cyApOwogICAgVHdpbmUgR2V0SWNvbmlm
eU9wdGlvbiggaW50IGlnbm9yZURlZmF1bHRzICk7CiAgICBUd2luZSBHZXRUcmF2ZWxPcHRpb24o
IGludCBpZ25vcmVEZWZhdWx0cyApOwoKICAgIHZvaWQgTHMoIEZJTEUqICk7CiAgICB2b2lkIExz
KCBGSUxFKiwgY29uc3QgTGlzdDxUd2luZT4mICk7CiAgICBjb25zdCBjaGFyKiBQcmludENoYW5u
ZWxTdGF0dXMoKTsKCiAgICAgCiAgICBYRk9STV9CYXNlKiBUcmFuc2Zvcm1hdGlvbjsKCiAgICAg
CiAgICB2b2lkIERvVXBkYXRlQ3VycmVudENoZWNrKCk7CgogICAgZmxvYXQgU2F2ZVZhbHVlOwog
ICAgYm9vbCBTYXZlSXNLZXk7CiAgICBmbG9hdCBTZXRTYXZlVmFsdWUoZmxvYXQgdmFsKTsKICAg
IGZsb2F0IFNhdmUoKTsKICAgIGZsb2F0IFJlc2V0KCk7CgogICAgQk9PTEVBTiBHZXRTdGF0dXNE
ZXBlbmRPZmYoKTsKICAgIHZvaWQgRGVsZXRlRGVwZW5kKCk7CiAgICB2b2lkIFJlc3RvcmVJbXBs
aWNpdCAoKTsKICAgIE5SSFlfZGVwZW5kTWFzdGVyQ2hhbm5lbCAmR2V0RGVwZW5kTWFzdGVyKCk7
CiAgICB2b2lkIFJlZnJlc2hPYnNlcnZlciggU3ViamVjdCogKTsKICAgIGludCBBY3RpdmF0ZUFs
bEZvcm11bGFzKCk7Cn07CgoKIyA4ICJoL25yaHlfdGVtcGxhdGVNYXRjaC5jIiAyCgoKCgoKIyAx
ICJoL25yaHlfY2xhc3NDb2xsaXNpb24uaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiAKCgoKCiAKCgoKIAoKCiAKIyAxICJoL25yaHlfcXVhdExpYi5oIiAxCgoKCmNsYXNz
IE1fUXVhdCB7IAogcHVibGljOgogICAgZmxvYXQgdywgeCwgeSwgejsKICAgIE1fUXVhdCh2b2lk
KSA6IHcoMS4wZiksIHgoMC4wZiksIHkoMC4wZiksIHooMC4wZikge30KICAgIE1fUXVhdChmbG9h
dCB0dywgZmxvYXQgdHgsIGZsb2F0IHR5LCBmbG9hdCB0eikge3cgPSB0dzsgeCA9IHR4OyB5ID0g
dHk7IHogPSB0ejt9CiAgICBNX1F1YXQoZmxvYXQgdHcsIGNvbnN0IE1fVmVjdG9yICZhKSB7dyA9
IHR3OyB4ID0gYS54OyB5ID0gYS55OyB6ID0gYS56O30KICAgIE1fUXVhdChjb25zdCBNX1F1YXQg
JnEpIHt3ID0gcS53OyB4ID0gcS54OyB5ID0gcS55OyB6ID0gcS56O30KfTsKCk1fRkxPQVQgZmFi
cyhjb25zdCBNX1F1YXQgJnApOwp2b2lkIE1fTm9ybWFsaXplKE1fUXVhdCAmcCk7CgpNX1F1YXQg
CQlNX1F1YXRNdWx0KGNvbnN0IE1fUXVhdCAmcCwgY29uc3QgTV9RdWF0ICZxKTsKTV9WZWN0b3Ig
CU1fUXVhdFJvdGF0ZShjb25zdCBNX1ZlY3RvciAmcCwgY29uc3QgTV9RdWF0ICZxKTsKTV9WZWN0
b3IgCU1fUXVhdFJvdGF0ZShjb25zdCBNX1ZlY3RvciAmcCwgY29uc3QgTV9RdWF0ICZxLCBjb25z
dCBNX1F1YXQgJnFpKTsKTV9RdWF0IAkJTV9RdWF0Tm9ybWFsaXplKGNvbnN0IE1fUXVhdCAmcCk7
CmZsb2F0IAkJTV9RdWF0TWFnKGNvbnN0IE1fUXVhdCAmcCk7Ck1fUXVhdCAJCU1fUXVhdEludmVy
c2UoY29uc3QgTV9RdWF0ICZwKTsKCgpNX1F1YXQgCQlNX1F1YXREb3VibGUoY29uc3QgTV9RdWF0
ICZwLCBjb25zdCBNX1F1YXQgJnEpOwpNX1F1YXQgCQlNX1F1YXRCaXNlY3QoY29uc3QgTV9RdWF0
ICZwLCBjb25zdCBNX1F1YXQgJnEpOwpNX1F1YXQgCQlNX1F1YXRMbihjb25zdCBNX1F1YXQgJnAp
OwpNX1F1YXQgCQlNX1F1YXRFeHAoY29uc3QgTV9RdWF0ICZwKTsKTV9RdWF0IAkJTV9RdWF0Q2hl
Y2tBcmMoY29uc3QgTV9RdWF0ICZwLCBjb25zdCBNX1F1YXQgJnEpOwpNX1F1YXQgCQlNX1F1YXRT
cXVhZChjb25zdCBNX1F1YXQgJnAsIGNvbnN0IE1fUXVhdCAmcSwgY29uc3QgTV9RdWF0ICZhLCBj
b25zdCBNX1F1YXQgJmIsIGZsb2F0IHQpOwoKTV9NYXRyaXggCU1fUXVhdFRvTWF0KGNvbnN0IE1f
UXVhdCAmcXVhdCk7Ck1fTWF0cml4IAlNX1F1YXROb3JtVG9NYXQoY29uc3QgTV9RdWF0ICZxdWF0
KTsKTV9RdWF0IAkJTV9NYXRUb1F1YXQoY29uc3QgTV9NYXRyaXggJm0pOwpNX1F1YXQgCQlNX01h
dFRvUXVhdDIoY29uc3QgTV9NYXRyaXggJm0pOwoKTV9RdWF0IAkJTV9RdWF0U2xlcnAoY29uc3Qg
TV9RdWF0ICZmcm9tLCBjb25zdCBNX1F1YXQgJnRvLCBmbG9hdCB0KTsKTV9RdWF0IAkJTV9RdWF0
TGVycChjb25zdCBNX1F1YXQgJmZyb20sIGNvbnN0IE1fUXVhdCAmdG8sIGZsb2F0IHQpOwoKaW50
IE1fRGVjb21wb3NlKAogICAgICAgIGNvbnN0IE1fTWF0cml4ICYgbWF0LAogICAgICAgIE1fVmVj
dG9yICZzY2FsZSwKICAgICAgICBNX1ZlY3RvciAmc2hlYXIsCiAgICAgICAgY2xhc3MgTV9RdWF0
ICZxdWF0LAogICAgICAgIE1fVmVjdG9yICZ0cmFucywKICAgICAgICBNX1ZlY3RvcjQgJnBlcnNw
CiAgICApOwoKaW50IE1fRGVjb21wb3NlKAogICAgICAgIGNvbnN0IE1fTWF0cml4ICYgbWF0LAog
ICAgICAgIE1fRkxPQVQgKiBzY2FsZSwKICAgICAgICBNX0ZMT0FUICogc2hlYXIsCiAgICAgICAg
Y2xhc3MgTV9RdWF0ICpxdWF0LAogICAgICAgIE1fRkxPQVQgKiB0cmFucywKICAgICAgICBNX0ZM
T0FUICogcGVyc3AKICAgICk7CgpNX1ZlY3RvciBNX1F1YXRUb0V1bGVyKGNvbnN0IE1fUXVhdCAm
cSk7Ck1fVmVjdG9yIE1fUXVhdFRvRXVsZXJSYWQoY29uc3QgTV9RdWF0ICZxKTsKTV9RdWF0IE1f
RXVsZXJUb1F1YXQoY29uc3QgTV9WZWN0b3IgJnIpOwpNX1F1YXQgTV9FdWxlclJhZFRvUXVhdChj
b25zdCBNX1ZlY3RvciAmcik7CgpNX01hdHJpeCBNX0NvbXBvc2VGYXN0KGNvbnN0IE1fVmVjdG9y
ICZzY2FsZSwgY29uc3QgTV9WZWN0b3IgJnJvdCwgY29uc3QgTV9WZWN0b3IgJnRyYW4pOwpNX01h
dHJpeCBNX0NvbXBvc2VGYXN0UmFkKGNvbnN0IE1fVmVjdG9yICZzY2FsZSwgY29uc3QgTV9WZWN0
b3IgJnJvdCwgY29uc3QgTV9WZWN0b3IgJnRyYW4pOwoKTV9WZWN0b3IgTV9GaW5kUm90cyggY29u
c3QgTV9NYXRyaXggJk0gKTsKTV9WZWN0b3IgTV9GaW5kUm90c1JhZCggY29uc3QgTV9NYXRyaXgg
Jk0gKTsKCgoKIyA0OCAiaC9ucmh5X2NsYXNzQ29sbGlzaW9uLmgiIDIKCgplbnVtIENPTExJU0lP
TlR5cGUgewoKCUNPTExJU0lPTl9Ob25lID0gMCwKCglDT0xMSVNJT05fUGxhbmUsCglDT0xMSVNJ
T05fQm94LAoJQ09MTElTSU9OX1NwaGVyZSwKCUNPTExJU0lPTl9DeWxpbmRlciwKCUNPTExJU0lP
Tl9Db252ZXgsCglDT0xMSVNJT05fUG9seSwKCn07CgoKIAogCiAKCiAKdGVtcGxhdGUgPGNsYXNz
IFR5cGU+IGNsYXNzIE5SSFlfbWF0Y2g7CnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBjbGFzcyBOUkhZ
X2FscGhhbGlzdDsKCiAKY2xhc3MgIE5SSFlfY2xhc3NDb2xsaXNpb247CgoKCiAKY2xhc3MgIE5S
SFlfY2xhc3NDb2xsaXNpb25BcHBseQp7CiBwcm90ZWN0ZWQ6CiAgICBNX01hdHJpeCAgX21hdDEs
IF9tYXQyLCBfcm1hdDEsIF9ybWF0MjsKICAgIGRvdWJsZSAgICBfZnJpY3Rpb24sIF9yZXN0aXR1
dGlvbjsKCiAgICBNX01hdHJpeCAgX3N0YXJ0TWF0LCBfZW5kTWF0OwogICAgZG91YmxlICAgIF9z
dGFydEZyaWN0aW9uLCBfZW5kRnJpY3Rpb247CiAgICBkb3VibGUgICAgX3N0YXJ0UmVzdGl0dXRp
b24sIF9lbmRSZXN0aXR1dGlvbjsKCiAgICBNX1F1YXQgCV9xdWF0LCBfcXVhdFN0YXJ0LCBfcXVh
dEVuZDsKICAgIE1fVmVjdG9yIAlfdHJhbiwgX3RyYW5TdGFydCxfdHJhbkVuZDsKICAgIE1fVmVj
dG9yIAlfc2NhbGUsIF9zY2FsZVN0YXJ0LF9zY2FsZUVuZDsKCiAgICBOUkhZX2NsYXNzQ29sbGlz
aW9uCSpfY29sbGlzaW9uOwoKIHB1YmxpYzoKICAgIE5SSFlfY2xhc3NDb2xsaXNpb24JKkdldENv
bGxpc2lvbih2b2lkKSB7IHJldHVybiBfY29sbGlzaW9uOyB9CiAgICB2b2lkIAkJIFNldENvbGxp
c2lvbihOUkhZX2NsYXNzQ29sbGlzaW9uICpjb2xsaXNpb24pIHsgX2NvbGxpc2lvbiA9IGNvbGxp
c2lvbjsgfQoKICAgIE5SSFlfY2xhc3NDb2xsaXNpb25BcHBseSh2b2lkKTsKICAgIHZpcnR1YWwg
dm9pZCBBcHBseShOUkhZX1BhcnRpY2xlU3lzdGVtICpQUywgZmxvYXQgdmFsdWUsIHZvaWQgKmRh
dGEpIHsgfQogICAgdmlydHVhbCB2b2lkIFJlQXBwbHkoTlJIWV9QYXJ0aWNsZVN5c3RlbSAqUFMs
IGZsb2F0IHZhbHVlLCB2b2lkICpkYXRhKSB7IH0KICAgIHZpcnR1YWwgdm9pZCBJbmZvKGludCBp
KSB7IFRYVF9TcmNGaWxlICAgPSAiaC9ucmh5X2NsYXNzQ29sbGlzaW9uLmgiLCBUWFRfU3JjTGlu
ZSAgID0gMTAxLCBUWFRfT3V0cHV0ZiAoc3RkZXJyLCAiR2VuZXJpYyBjb2xsaXNpb24gYXBwbHlc
biIpOyB9CQoKICAgIHZpcnR1YWwgdm9pZCBQcmVTdGVwKHZvaWQpOwogICAgdmlydHVhbCB2b2lk
IFBvc3RTdGVwKHZvaWQpOwogICAgdmlydHVhbCB2b2lkIEludGVycG9sYXRlU3RlcChmbG9hdCBy
KTsKICAgIHZpcnR1YWwgdm9pZCBJbnRlcnBvbGF0ZVN0ZXAoZmxvYXQgcjEsIGZsb2F0IHIyKTsK
CgkgICAgQk9PTEVBTiBCb3VuY2UoTlJIWV9QYXJ0aWNsZVN5c3RlbSAqUFMsIGludCBwaWQsIE1f
VmVjdG9yICZjb2xsaXNpb25Qb2ludCwgTV9WZWN0b3IgJmNvbGxpc2lvbk5vcm1hbCwgZmxvYXQg
dCwgaW50ICpjb2xsaXNpb25JZHgpOwogICAgdmlydHVhbCBNX1ZlY3RvciBOb3JtYWxGcm9tTG9j
YXRpb24oTV9WZWN0b3IgJnApIHsgcmV0dXJuIHA7IH0KCiAgICB2aXJ0dWFsIHZvaWQgRHJhd0lj
b24odm9pZCkgeyB9CiAgICB2aXJ0dWFsIEJPT0xFQU4gSGFzRHJhd0ljb24odm9pZCkgeyByZXR1
cm4gMSA7IH0KfTsKCiAKCnN0cnVjdCBOUkhZX2NsYXNzQ29sbGlzaW9uOnB1YmxpYyBOUkhZX2Ns
YXNzT2JqZWN0IHsKcHJpdmF0ZToKICAgIHR5cGVkZWYgTlJIWV9jbGFzc09iamVjdCBpbmhlcml0
ZWQ7CiAgICB0eXBlZGVmIE5SSFlfYWxwaGFsaXN0PE5SSFlfY2xhc3NDb2xsaXNpb24+IGFscGhh
bGlzdDsKICAgIGZyaWVuZCBOUkhZX21hdGNoIDxOUkhZX2NsYXNzQ29sbGlzaW9uPjsKICAgIGZy
aWVuZCBOUkhZX2FscGhhbGlzdDxOUkhZX2NsYXNzQ29sbGlzaW9uPjsKCgpwcm90ZWN0ZWQ6CiAg
ICBDT0xMSVNJT05UeXBlICAgICAgICAgICAgICAgICAgICAgIF9jb2xsaXNpb25UeXBlOwogICAg
TlJIWV9jbGFzc0NvbGxpc2lvbkFwcGx5CSAgICAgKl9jb2xsaXNpb25BcHBseTsKICAgIERZTkFN
SUNTX1N0YXR1cwkJCSAgIF9EeW5TdGF0dXM7CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5pdGlhbGl6ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIHZv
aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdFdvcmxkVHJhdmVyc2UoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApOwoKcHVibGljOgogICAgIAogICAgTlJIWV9jbGFzc0NvbGxpc2lv
biAoCiAgICAgICAgY29uc3QgQ0hBUiAgICAgICAgICAqbmFtZQogICAgICAgICk7CgogICAgTlJI
WV9jbGFzc0NvbGxpc2lvbiAoCiAgICAgICAgY29uc3QgQ0hBUiAgICAgICAgICAqbmFtZSwKICAg
ICAgICBOUkhZX2NsYXNzQ29sbGlzaW9uICAgICpjbG9uZUZyb20KICAgICAgICApOwoKICAgIE5S
SFlfY2xhc3NDb2xsaXNpb24gKAogICAgICAgIHZvaWQgCiAgICAgICAgKTsKCiAgICB+TlJIWV9j
bGFzc0NvbGxpc2lvbiAoCiAgICAgICAgdm9pZCAKICAgICAgICApOwoKICAgICAKICAgIHN0YXRp
YyBjb25zdCBDSEFSICAgICAgICAgICAgICAgKlByaW50U2VsZkNsYXNzbmFtZSAoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApIHsgcmV0dXJuICgiTlJIWV9jbGFzc0NvbGxpc2lvbiIpOyB9Cgog
ICAgIAoKICAgIHN0YXRpYyBJTlQgICAgICAgICAgICAgICAgICAgICAgR2V0U2VsZkNsYXNzVHlw
ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuIChUSElOR19UWVBFX0NPTExJ
U0lPTik7IH0KCiAgICBzdGF0aWMgTlJIWV9idW5jaDxOUkhZX2NsYXNzQ29sbGlzaW9uPiAqRmlu
ZCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSICAq
bmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAKICAgIHZv
aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmFtZSAoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSICAqbmV3TmFtZQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAKICAgIE5SSFlfY2xhc3NUaGluZyAgICAg
ICAgICAgICAgICAgKkNsb25lICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IENIQVIgICpuZXdOYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICk7CgogICAgIAogICAgIAoKCgogICAgIAogICAgY29uc3QgQ0hBUiAgICAgICAgICAgICAg
ICAgICAgICAqUHJpbnREZXJpdmVkQ2xhc3NPZlNlbGZUeXBlTmFtZSAoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICApIHsgcmV0dXJuICgiY29sbGlzaW9uIik7IH0KCiAgICAgCiAgICBJTlQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdldERlcml2ZWRDbGFzc09mU2VsZlR5cGUgKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAoVEhJTkdfVFlQRV9DT0xMSVNJT04pOyB9
CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUNyZWF0ZSAoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVz
Y3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAg
dm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZURlbGV0ZSAoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVT
dHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZU9uRmxhZyAoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0g
JgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUZ1bGxTdGF0ZSAoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKCiAgICB2b2lkICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIERlc2NyaWJlRnVsbFN0YXRlUGFja2VkICgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVh
bSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgdm9pZCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZVR5cGUgKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICB2b2lkIAkJCSAgICBMaXN0
Q29sbGlzaW9uKEZJTEUgKmZwLCBjb25zdCBMaXN0PFR3aW5lPiAmbHMpOwoKICAgIHZvaWQJCQkg
ICAgU2V0Q29sbGlzaW9uVHlwZSAoQ09MTElTSU9OVHlwZSB0eXBlKTsgCiAgICBDT0xMSVNJT05U
eXBlCQkgICAgR2V0Q29sbGlzaW9uVHlwZSAodm9pZCkgeyByZXR1cm4gX2NvbGxpc2lvblR5cGU7
IH0KICAgIFR3aW5lIAkJCSAgICBHZXRDb2xsaXNpb25UeXBlTmFtZShDT0xMSVNJT05UeXBlIGQp
OwogICAgQ09MTElTSU9OVHlwZSAgIAkJICAgIEdldENvbGxpc2lvblR5cGVGcm9tTmFtZShUd2lu
ZSBuYW1lKTsKCgoKICAgIE5SSFlfY2xhc3NDb2xsaXNpb25BcHBseQkgICAgKkdldENvbGxpc2lv
bkFwcGx5ICh2b2lkKSB7IHJldHVybiBfY29sbGlzaW9uQXBwbHk7IH0KCiAgICB2b2lkIEFwcGx5
KE5SSFlfUGFydGljbGVTeXN0ZW0gKlBTLCBmbG9hdCB2YWx1ZSwgdm9pZCAqZGF0YSk7CiAgICB2
b2lkIFJlQXBwbHkoTlJIWV9QYXJ0aWNsZVN5c3RlbSAqUFMsIGZsb2F0IHZhbHVlLCB2b2lkICpk
YXRhKTsKCiAgICB2b2lkIAlTZXREeW5hbWljc1N0YXR1cyhEWU5BTUlDU19TdGF0dXMgcykgeyBf
RHluU3RhdHVzID0gczsgfQogICAgRFlOQU1JQ1NfU3RhdHVzCUdldER5bmFtaWNzU3RhdHVzKHZv
aWQpIHsgcmV0dXJuIF9EeW5TdGF0dXM7IH0KCiAgICB2b2lkIFByZVN0ZXAodm9pZCk7CiAgICB2
b2lkIFBvc3RTdGVwKHZvaWQpOwogICAgdm9pZCBJbnRlcnBvbGF0ZVN0ZXAoZmxvYXQgcik7CiAg
ICB2b2lkIEludGVycG9sYXRlU3RlcChmbG9hdCByMSwgZmxvYXQgcjIpOwoKICAgIHZvaWQgCURy
YXdJY29uKHZvaWQpOwogICAgQk9PTEVBTiAJSGFzRHJhd0ljb24odm9pZCk7Cgp9OwoKCgoKIApj
bGFzcyAgTlJIWV9jbGFzc1NwaGVyZUNvbGxpc2lvbkFwcGx5OiBwdWJsaWMgTlJIWV9jbGFzc0Nv
bGxpc2lvbkFwcGx5CnsKIHB1YmxpYzoKCXZvaWQgCUFwcGx5KE5SSFlfUGFydGljbGVTeXN0ZW0g
KlBTLCBmbG9hdCB2YWx1ZSwgdm9pZCAqZGF0YSk7Cgl2b2lkIAlEcmF3SWNvbih2b2lkKTsKCU1f
VmVjdG9yIE5vcm1hbEZyb21Mb2NhdGlvbihNX1ZlY3RvciAmcCk7Cn07CgogCmNsYXNzICBOUkhZ
X2NsYXNzQm94Q29sbGlzaW9uQXBwbHk6IHB1YmxpYyBOUkhZX2NsYXNzQ29sbGlzaW9uQXBwbHkK
ewogcHVibGljOgoJdm9pZCAJQXBwbHkoTlJIWV9QYXJ0aWNsZVN5c3RlbSAqUFMsIGZsb2F0IHZh
bHVlLCB2b2lkICpkYXRhKTsKCXZvaWQgCURyYXdJY29uKHZvaWQpOwoJTV9WZWN0b3IgTm9ybWFs
RnJvbUxvY2F0aW9uKE1fVmVjdG9yICZwKTsKfTsKCgoKIApjbGFzcyAgTlJIWV9jbGFzc0N5bGlu
ZGVyQ29sbGlzaW9uQXBwbHk6IHB1YmxpYyBOUkhZX2NsYXNzQ29sbGlzaW9uQXBwbHkKewogcHVi
bGljOgoJdm9pZCAJQXBwbHkoTlJIWV9QYXJ0aWNsZVN5c3RlbSAqUFMsIGZsb2F0IHZhbHVlLCB2
b2lkICpkYXRhKTsKCXZvaWQgCURyYXdJY29uKHZvaWQpOwoJTV9WZWN0b3IgTm9ybWFsRnJvbUxv
Y2F0aW9uKE1fVmVjdG9yICZwKTsKfTsKCgoKIApjbGFzcyAgTlJIWV9jbGFzc1BsYW5lQ29sbGlz
aW9uQXBwbHk6IHB1YmxpYyBOUkhZX2NsYXNzQ29sbGlzaW9uQXBwbHkKewogcHVibGljOgoJdm9p
ZCAJQXBwbHkoTlJIWV9QYXJ0aWNsZVN5c3RlbSAqUFMsIGZsb2F0IHZhbHVlLCB2b2lkICpkYXRh
KTsKCXZvaWQgCVJlQXBwbHkoTlJIWV9QYXJ0aWNsZVN5c3RlbSAqUFMsIGZsb2F0IHZhbHVlLCB2
b2lkICpkYXRhKTsKCXZvaWQgCURyYXdJY29uKHZvaWQpOwoJTV9WZWN0b3IgTm9ybWFsRnJvbUxv
Y2F0aW9uKE1fVmVjdG9yICZwKTsKfTsKCgoKIApjbGFzcyAgTlJIWV9jbGFzc0NvbnZleENvbGxp
c2lvbkFwcGx5OiBwdWJsaWMgTlJIWV9jbGFzc0NvbGxpc2lvbkFwcGx5CnsKIHB1YmxpYzoKCU5S
SFlfY2xhc3NDb252ZXhDb2xsaXNpb25BcHBseSh2b2lkKTsKCXZvaWQgCUFwcGx5KE5SSFlfUGFy
dGljbGVTeXN0ZW0gKlBTLCBmbG9hdCB2YWx1ZSwgdm9pZCAqZGF0YSk7CiB9OwoKCiAKY2xhc3Mg
IE5SSFlfY2xhc3NQb2x5Q29sbGlzaW9uQXBwbHk6IHB1YmxpYyBOUkhZX2NsYXNzQ29sbGlzaW9u
QXBwbHkKewogcHVibGljOgoJTlJIWV9jbGFzc1BvbHlDb2xsaXNpb25BcHBseSh2b2lkKTsKCXZv
aWQgCUFwcGx5KE5SSFlfUGFydGljbGVTeXN0ZW0gKlBTLCBmbG9hdCB2YWx1ZSwgdm9pZCAqZGF0
YSk7Cn07CgoKIAoKIAoKIyAxMyAiaC9ucmh5X3RlbXBsYXRlTWF0Y2guYyIgMgoKIyAxICJoL25y
aHlfY2xhc3NEeW5hbWljcy5oIiAxCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
DAogCgoKCiAKCgoKIAoKCgoKIyAxICJoL25yaHlfY2xhc3NGb3JjZS5oIiAxCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgogCgoKIyAxICJoL25yaHlfcXVhdGVy
bmlvbi5oIiAxCgoKCiAKIAogCiAKCnR5cGVkZWYgc3RydWN0IHsgCiAgZmxvYXQgdywgeCwgeSwg
ejsKfVFVQVQ7CgpRVUFUIFFfRG91YmxlKFFVQVQgcCwgUVVBVCBxKTsKUVVBVCBRX0Jpc2VjdChR
VUFUIHAsIFFVQVQgcSk7ClFVQVQgTWF0VG9RdWF0KE1fTWF0cml4IG0pOwpRVUFUIFF1YXRTbGVy
cChRVUFUIGZyb20sIFFVQVQgdG8sIGZsb2F0IHQpOwpNX01hdHJpeCBRdWF0VG9NYXQoUVVBVCBx
dWF0KTsKZmxvYXQgUV9tYWcoUVVBVCBwKTsKUVVBVCBRX2xuKFFVQVQgcCk7ClFVQVQgUV9leHAo
UVVBVCBwKTsKUVVBVCBRX25vcm1hbGl6ZShRVUFUIHApOwpRVUFUIFFfaW52ZXJzZShRVUFUIHAp
OwpRVUFUIFFfbXVsdChRVUFUIHAsIFFVQVQgcSk7ClFVQVQgUV9jaGVja0FyYyhRVUFUIHAsIFFV
QVQgcSk7ClFVQVQgUV9zcXVhZChRVUFUIHAsIFFVQVQgcSwgUVVBVCBhLCBRVUFUIGIsIGZsb2F0
IHQpOwoKdm9pZCAgcXVhdGVybmlvbkxpbmVhckludGVycCgKICAgIE5SSFlfY2xhc3NDaGFubmVs
ICp4Um90LAogICAgTlJIWV9jbGFzc0NoYW5uZWwgKnlSb3QsCiAgICBOUkhZX2NsYXNzQ2hhbm5l
bCAqelJvdCwKICAgIGZsb2F0ICAgICAgIGZyYW5nZVN0YXJ0LAogICAgZmxvYXQgICAgICAgICBm
cmFuZ2VFbmQsCiAgICBMaXN0IDxmbG9hdD4gICAga2V5TGlzdAogICAgKTsKCnZvaWQgIHF1YXRl
cm5pb25TcGxpbmVJbnRlcnAoCiAgICBOUkhZX2NsYXNzQ2hhbm5lbCAqeFJvdCwKICAgIE5SSFlf
Y2xhc3NDaGFubmVsICp5Um90LAogICAgTlJIWV9jbGFzc0NoYW5uZWwgKnpSb3QsCiAgICBmbG9h
dCAgICAgICBmcmFuZ2VTdGFydCwKICAgIGZsb2F0ICAgICAgICAgZnJhbmdlRW5kLAogICAgQk9P
TEVBTiAgICAgICAgICAgbWF0Y2gsCiAgICBMaXN0IDxmbG9hdD4gICAga2V5TGlzdAogICAgKTsK
CgojIDQ3ICJoL25yaHlfY2xhc3NGb3JjZS5oIiAyCgoKCiAKIAogCgogCnRlbXBsYXRlIDxjbGFz
cyBUeXBlPiBjbGFzcyBOUkhZX21hdGNoOwp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4gY2xhc3MgTlJI
WV9hbHBoYWxpc3Q7CgogCmNsYXNzICBOUkhZX2NsYXNzRm9yY2VBcHBseTsKY2xhc3MgIE5SSFlf
Y2xhc3NGb3JjZTsKCmVudW0gRk9SQ0VUeXBlIHsKCglGT1JDRV9Ob25lID0gMCwKCglGT1JDRV9T
cHJpbmcsCglGT1JDRV9Qb2ludFNwcmluZywKCUZPUkNFX1NoZWFyU3ByaW5nLAoJRk9SQ0VfQmVu
ZFNwcmluZywKCUZPUkNFX1N0aXRjaFNwcmluZywKCUZPUkNFX0hhaXJTcHJpbmcsCglGT1JDRV9T
dXJmYWNlU3ByaW5nLAoJRk9SQ0VfTWVzaEhhaXJTcHJpbmcsCglGT1JDRV9TdHJhbmRTcHJpbmcs
CglGT1JDRV9Qcm94U3ByaW5nLAoKCUZPUkNFX1J1YmJlclNwcmluZywKCUZPUkNFX0F4aXNTcHJp
bmcsCglGT1JDRV9BdHRhY2hTcHJpbmcsCgoJRk9SQ0VfR3Jhdml0eSwKCUZPUkNFX0RyYWcsCglG
T1JDRV9MaW5lYXIsCglGT1JDRV9SYWRpYWwsCglGT1JDRV9Ib2xkLAoJRk9SQ0VfTm9pc2UsCglG
T1JDRV9TaW4sCglGT1JDRV9XYWtlLAoJRk9SQ0VfVm9ydGV4LAp9OwoKIApjbGFzcyAgTlJIWV9j
bGFzc0ZvcmNlQXBwbHkKewogcHJvdGVjdGVkOgogICAgTlJIWV9jbGFzc0ZvcmNlCSpfZm9yY2U7
CgogcHVibGljOgoKICAgIE5SSFlfY2xhc3NGb3JjZQkqR2V0Rm9yY2Uodm9pZCkgeyByZXR1cm4g
X2ZvcmNlOyB9CiAgICB2b2lkIAkJIFNldEZvcmNlKE5SSFlfY2xhc3NGb3JjZSAqZm9yY2UpIHsg
X2ZvcmNlID0gZm9yY2U7IH0KCiAgICBOUkhZX2NsYXNzRm9yY2VBcHBseSh2b2lkKSB7IH0KICAg
IHZpcnR1YWwgdm9pZCBBcHBseShOUkhZX1BhcnRpY2xlU3lzdGVtICpQUywgZmxvYXQgdmFsdWUs
IGNvbnN0IExpc3QgPGZsb2F0PiAmaG9tZUNvZWZmaWNpZW50cywgdm9pZCAqZGF0YSkgeyB9CiAg
ICB2aXJ0dWFsIHZvaWQgSW5mbyhpbnQgaSk7CgogICAgdmlydHVhbCB2b2lkIFByZVN0ZXAodm9p
ZCkgeyB9CiAgICB2aXJ0dWFsIHZvaWQgUG9zdFN0ZXAodm9pZCkgeyB9CiAgICB2aXJ0dWFsIHZv
aWQgSW50ZXJwb2xhdGVTdGVwKGZsb2F0IHIpIHsgfQogICAgdmlydHVhbCB2b2lkIERyYXdJY29u
KHZvaWQpIHsgfQogICAgdmlydHVhbCBCT09MRUFOIEhhc0RyYXdJY29uKHZvaWQpIHsgcmV0dXJu
IDAgOyB9CiAgICB2aXJ0dWFsIFR3aW5lIEdldEFwcGxpY2FibGVDaGFubmVscyh2b2lkKSB7IHJl
dHVybiAiIjsgfQp9OwoKIAoKc3RydWN0IE5SSFlfY2xhc3NGb3JjZTpwdWJsaWMgTlJIWV9jbGFz
c09iamVjdCB7CnByaXZhdGU6CiAgICB0eXBlZGVmIE5SSFlfY2xhc3NPYmplY3QgaW5oZXJpdGVk
OwogICAgdHlwZWRlZiBOUkhZX2FscGhhbGlzdDxOUkhZX2NsYXNzRm9yY2U+IGFscGhhbGlzdDsK
ICAgIGZyaWVuZCBOUkhZX21hdGNoIDxOUkhZX2NsYXNzRm9yY2U+OwogICAgZnJpZW5kIE5SSFlf
YWxwaGFsaXN0PE5SSFlfY2xhc3NGb3JjZT47Cgpwcm90ZWN0ZWQ6CiAgICBGT1JDRVR5cGUJCSAJ
CV9mb3JjZVR5cGU7CiAgICBOUkhZX2NsYXNzRm9yY2VBcHBseQkgICAgICAgICpfZm9yY2VBcHBs
eTsKICAgIERZTkFNSUNTX1N0YXR1cwkJCV9EeW5TdGF0dXM7CgogICAgdm9pZCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
OwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdFdvcmxkVHJhdmVyc2Uo
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKcHVibGljOgogICAgIAogICAgTlJIWV9jbGFz
c0ZvcmNlICgKICAgICAgICBjb25zdCBDSEFSICAgICAgICAgICpuYW1lCiAgICAgICAgKTsKICAg
IE5SSFlfY2xhc3NGb3JjZSAoCiAgICAgICAgY29uc3QgQ0hBUiAgICAgICAgICAqbmFtZSwKICAg
ICAgICBOUkhZX2NsYXNzRm9yY2UgICAgKmNsb25lRnJvbQogICAgICAgICk7CiAgICBOUkhZX2Ns
YXNzRm9yY2UgKAogICAgICAgIHZvaWQgCiAgICAgICAgKTsKCiAgICB+TlJIWV9jbGFzc0ZvcmNl
ICgKICAgICAgICB2b2lkIAogICAgICAgICk7CgogICAgIAogICAgc3RhdGljIGNvbnN0IENIQVIg
ICAgICAgICAgICAgICAqUHJpbnRTZWxmQ2xhc3NuYW1lICgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICkgeyByZXR1cm4gKCJOUkhZX2NsYXNzRm9yY2UiKTsgfQoKICAgICAKCiAgICBzdGF0aWMg
SU5UICAgICAgICAgICAgICAgICAgICAgIEdldFNlbGZDbGFzc1R5cGUgKAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKSB7IHJldHVybiAoVEhJTkdfVFlQRV9GT1JDRSk7IH0KCiAgICBzdGF0aWMg
TlJIWV9idW5jaDxOUkhZX2NsYXNzRm9yY2U+ICpGaW5kICgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIgICpuYW1lCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICk7CgogICAgIAogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUmVuYW1lICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IENIQVIgICpuZXdOYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7
CgogICAgIAogICAgTlJIWV9jbGFzc1RoaW5nICAgICAgICAgICAgICAgICAqQ2xvbmUgKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUiAgKm5ld05hbWUK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgCiAgICAgCgoKCiAg
ICAgCiAgICBjb25zdCBDSEFSICAgICAgICAgICAgICAgICAgICAgICpQcmludERlcml2ZWRDbGFz
c09mU2VsZlR5cGVOYW1lICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1cm4gKCJm
b3JjZSIpOyB9CgogICAgIAogICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRE
ZXJpdmVkQ2xhc3NPZlNlbGZUeXBlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1
cm4gKFRISU5HX1RZUEVfRk9SQ0UpOyB9CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEZXNjcmliZUNyZWF0ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
ZXNjcmliZURlbGV0ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
bGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmli
ZU9uRmxhZyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBO
UkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUZ1bGxT
dGF0ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZ
X0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICApOwoKCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlRnVsbFN0
YXRlUGFja2VkICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNz
IE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICk7CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZVR5
cGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9D
bGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KTsKCiAgICB2b2lkIAkJCSAgICBMaXN0Rm9yY2UoRklMRSAqZnAsIGNvbnN0IExpc3Q8VHdpbmU+
ICZscyk7CiAgICB2b2lkCQkJICAgIFNldEZvcmNlVHlwZSAoRk9SQ0VUeXBlIHR5cGUpOyAKICAg
IEZPUkNFVHlwZQkJCSAgICBHZXRGb3JjZVR5cGUgKHZvaWQpIHsgcmV0dXJuIF9mb3JjZVR5cGU7
IH0KICAgIFR3aW5lIAkJCSAgICBHZXRGb3JjZVR5cGVOYW1lKEZPUkNFVHlwZSBkKTsKICAgIEZP
UkNFVHlwZSAgIAkJICAgIEdldEZvcmNlVHlwZUZyb21OYW1lKFR3aW5lIG5hbWUpOwoKCiAgICBO
UkhZX2NsYXNzRm9yY2VBcHBseQkgICAgKkdldEZvcmNlQXBwbHkgKHZvaWQpIHsgcmV0dXJuIF9m
b3JjZUFwcGx5OyB9CgogICAgdm9pZCAJCQkgICAgQXBwbHkoTlJIWV9QYXJ0aWNsZVN5c3RlbSAq
UFMsIGZsb2F0IHZhbHVlLCBjb25zdCBMaXN0IDxmbG9hdD4gJmhvbWVDb2VmZmljaWVudHMsIHZv
aWQgKmRhdGEpOwogCiAgICB2b2lkIAlQcmVTdGVwKHZvaWQpOwogICAgdm9pZCAJUG9zdFN0ZXAo
dm9pZCk7CiAgICB2b2lkIAlJbnRlcnBvbGF0ZVN0ZXAoZmxvYXQgcik7CiAgICB2b2lkIAlJbmZv
KHZvaWQpOwogICAgdm9pZCAJRHJhd0ljb24odm9pZCk7CiAgICBCT09MRUFOIAlIYXNEcmF3SWNv
bih2b2lkKTsKICAgIFR3aW5lIAlHZXRBcHBsaWNhYmxlQ2hhbm5lbHModm9pZCk7CiAgICBCT09M
RUFOCUlzU3ByaW5nKHZvaWQpOwoKICAgIHZvaWQgCQlTZXREeW5hbWljc1N0YXR1cyhEWU5BTUlD
U19TdGF0dXMgcykgeyBfRHluU3RhdHVzID0gczsgfQogICAgRFlOQU1JQ1NfU3RhdHVzCUdldER5
bmFtaWNzU3RhdHVzKHZvaWQpIHsgcmV0dXJuIF9EeW5TdGF0dXM7IH0KCn07CgoKIApjbGFzcyAg
TlJIWV9jbGFzc0RyYWdGb3JjZUFwcGx5OiBwdWJsaWMgTlJIWV9jbGFzc0ZvcmNlQXBwbHkKIHsK
IAkgCgoJZmxvYXQgIF9kcmFnOwoJZmxvYXQgIF9kcmFnU3RhcnQsIF9kcmFnRW5kOwoKIHB1Ymxp
YzoKCglOUkhZX2NsYXNzRHJhZ0ZvcmNlQXBwbHkodm9pZCk7Cgl2b2lkIAlBcHBseShOUkhZX1Bh
cnRpY2xlU3lzdGVtICpQUywgZmxvYXQgdmFsdWUsIGNvbnN0IExpc3QgPGZsb2F0PiAmaG9tZUNv
ZWZmaWNpZW50cywgdm9pZCAqZGF0YSk7Cgl2b2lkIAlJbmZvKGludCBpKTsKCgl2b2lkIAlQcmVT
dGVwKHZvaWQpOwoJdm9pZCAJUG9zdFN0ZXAodm9pZCk7Cgl2b2lkIAlJbnRlcnBvbGF0ZVN0ZXAo
ZmxvYXQgcik7CglUd2luZSAJR2V0QXBwbGljYWJsZUNoYW5uZWxzKHZvaWQpIHsgcmV0dXJuICJk
cmFnIjsgfQogfTsKCgogCmNsYXNzICBOUkhZX2NsYXNzSG9sZEZvcmNlQXBwbHk6IHB1YmxpYyBO
UkhZX2NsYXNzRm9yY2VBcHBseQogewoJZG91YmxlICAgX2tIb2xkOwoJZG91YmxlIAkgX2tIb2xk
U3RhcnQsX2tIb2xkRW5kOwoKIHB1YmxpYzoKCglOUkhZX2NsYXNzSG9sZEZvcmNlQXBwbHkodm9p
ZCkgeyB9Cgl2b2lkIAlBcHBseShOUkhZX1BhcnRpY2xlU3lzdGVtICpQUywgZmxvYXQgdmFsdWUs
IGNvbnN0IExpc3QgPGZsb2F0PiAmaG9tZUNvZWZmaWNpZW50cywgdm9pZCAqZGF0YSk7CgoJdm9p
ZCAJUHJlU3RlcCh2b2lkKTsKCXZvaWQgCVBvc3RTdGVwKHZvaWQpOwoJdm9pZCAJSW50ZXJwb2xh
dGVTdGVwKGZsb2F0IHIpOwoJVHdpbmUgCUdldEFwcGxpY2FibGVDaGFubmVscyh2b2lkKSB7IHJl
dHVybiAia0hvbGQiOyB9CiB9OwoKIAogCiAKIAogCmNsYXNzICBOUkhZX2NsYXNzTWF0cml4Rm9y
Y2VBcHBseTogcHVibGljIE5SSFlfY2xhc3NGb3JjZUFwcGx5CnsKIHByb3RlY3RlZDoKCWZsb2F0
ICAgIF9rRm9yY2UsIF9rRm9yY2VTdGFydCwgX2tGb3JjZUVuZDsKCU1fVmVjdG9yIF9mb3JjZURp
ciwgX2ZvcmNlRGlyU3RhcnQsIF9mb3JjZURpckVuZDsKCglRVUFUCSBfcXVhdCwgX3F1YXRTdGFy
dCwgX3F1YXRFbmQ7CglNX1ZlY3RvciBfdHJhbiwgX3RyYW5TdGFydCxfdHJhbkVuZDsKCU1fVmVj
dG9yIF9zY2FsZVN0YXJ0LF9zY2FsZUVuZDsKCU1fTWF0cml4IF9GV1N0YXJ0LCBfRldFbmQ7CgoJ
TV9NYXRyaXggX0ZXLCBfV0Y7CgogcHVibGljOgoJdm9pZCAJUHJlU3RlcCh2b2lkKTsKCXZvaWQg
CVBvc3RTdGVwKHZvaWQpOwoJdm9pZCAJSW50ZXJwb2xhdGVTdGVwKGZsb2F0IHIpOwoKCglCT09M
RUFOIEhhc0RyYXdJY29uKHZvaWQpIHsgcmV0dXJuIDEgOyB9CglUd2luZSAJR2V0QXBwbGljYWJs
ZUNoYW5uZWxzKHZvaWQpIHsgcmV0dXJuICJ4cjEseXIxLHpyMSx4dDEseXQxLHp0MSxrRm9yY2Ui
OyB9Cn07CgoKIApjbGFzcyAgTlJIWV9jbGFzc0dyYXZpdHlGb3JjZUFwcGx5OiBwdWJsaWMgTlJI
WV9jbGFzc01hdHJpeEZvcmNlQXBwbHkKewoJdHlwZWRlZiBOUkhZX2NsYXNzTWF0cml4Rm9yY2VB
cHBseSBpbmhlcml0ZWQ7CgogCSAKCU1fVmVjdG9yIF9HZDsKCWZsb2F0ICAgX2FjYzsKCglNX1Zl
Y3RvciBfR2RTdGFydCwgX0dkRW5kOwoJZmxvYXQgICBfYWNjU3RhcnQsIF9hY2NFbmQ7CgogcHVi
bGljOgoKCU5SSFlfY2xhc3NHcmF2aXR5Rm9yY2VBcHBseSh2b2lkKTsKCgl2b2lkIAlBcHBseShO
UkhZX1BhcnRpY2xlU3lzdGVtICpQUywgZmxvYXQgdmFsdWUsIGNvbnN0IExpc3QgPGZsb2F0PiAm
aG9tZUNvZWZmaWNpZW50cywgdm9pZCAqZGF0YSk7Cgl2b2lkIAlJbmZvKGludCBpKTsKCgl2b2lk
IAlQcmVTdGVwKHZvaWQpOwoJdm9pZCAJUG9zdFN0ZXAodm9pZCk7Cgl2b2lkIAlJbnRlcnBvbGF0
ZVN0ZXAoZmxvYXQgcik7CgoJdm9pZCAJRHJhd0ljb24odm9pZCk7CglUd2luZSAJR2V0QXBwbGlj
YWJsZUNoYW5uZWxzKHZvaWQpIHsgcmV0dXJuICJ4cjEseXIxLHpyMSxncmF2aXR5IjsgfQogfTsK
CgogCmNsYXNzICBOUkhZX2NsYXNzTGluZWFyRm9yY2VBcHBseTogcHVibGljIE5SSFlfY2xhc3NN
YXRyaXhGb3JjZUFwcGx5CiB7CiAJIAoJdHlwZWRlZiBOUkhZX2NsYXNzTWF0cml4Rm9yY2VBcHBs
eSBpbmhlcml0ZWQ7CgogcHVibGljOgoKCU5SSFlfY2xhc3NMaW5lYXJGb3JjZUFwcGx5KHZvaWQp
IHsgfQoJdm9pZCAJQXBwbHkoTlJIWV9QYXJ0aWNsZVN5c3RlbSAqUFMsIGZsb2F0IHZhbHVlLCBj
b25zdCBMaXN0IDxmbG9hdD4gJmhvbWVDb2VmZmljaWVudHMsIHZvaWQgKmRhdGEpOwoJdm9pZCAJ
RHJhd0ljb24odm9pZCk7CgogfTsKCiAKY2xhc3MgIE5SSFlfY2xhc3NSYWRpYWxGb3JjZUFwcGx5
OiBwdWJsaWMgTlJIWV9jbGFzc01hdHJpeEZvcmNlQXBwbHkKIHsKCXR5cGVkZWYgTlJIWV9jbGFz
c01hdHJpeEZvcmNlQXBwbHkgaW5oZXJpdGVkOwoKIHB1YmxpYzoKCglOUkhZX2NsYXNzUmFkaWFs
Rm9yY2VBcHBseSh2b2lkKSB7IH0KCXZvaWQgCUFwcGx5KE5SSFlfUGFydGljbGVTeXN0ZW0gKlBT
LCBmbG9hdCB2YWx1ZSwgY29uc3QgTGlzdCA8ZmxvYXQ+ICZob21lQ29lZmZpY2llbnRzLCB2b2lk
ICpkYXRhKTsKCgl2b2lkIAlEcmF3SWNvbih2b2lkKTsKCiB9OwoKIApjbGFzcyAgTlJIWV9jbGFz
c05vaXNlRm9yY2VBcHBseTogcHVibGljIE5SSFlfY2xhc3NNYXRyaXhGb3JjZUFwcGx5CiB7Cgl0
eXBlZGVmIE5SSFlfY2xhc3NNYXRyaXhGb3JjZUFwcGx5IGluaGVyaXRlZDsKCglNX1ZlY3RvciBf
YW1wbGl0dWRlLCBfYW1wbGl0dWRlU3RhcnQsIF9hbXBsaXR1ZGVFbmQ7CglmbG9hdAkgX3dhdmVs
ZW5ndGgsIF93YXZlbGVuZ3RoU3RhcnQsIF93YXZlbGVuZ3RoRW5kOwoKIHB1YmxpYzoKCglOUkhZ
X2NsYXNzTm9pc2VGb3JjZUFwcGx5KHZvaWQpIHsgfQoJdm9pZCAJQXBwbHkoTlJIWV9QYXJ0aWNs
ZVN5c3RlbSAqUFMsIGZsb2F0IHZhbHVlLCBjb25zdCBMaXN0IDxmbG9hdD4gJmhvbWVDb2VmZmlj
aWVudHMsIHZvaWQgKmRhdGEpOwoKCXZvaWQgCVByZVN0ZXAodm9pZCk7Cgl2b2lkIAlQb3N0U3Rl
cCh2b2lkKTsKCXZvaWQgCUludGVycG9sYXRlU3RlcChmbG9hdCByKTsKCgl2b2lkIAlEcmF3SWNv
bih2b2lkKTsKCVR3aW5lIAlHZXRBcHBsaWNhYmxlQ2hhbm5lbHModm9pZCkgeyByZXR1cm4gInhy
MSx5cjEsenIxLHh0MSx5dDEsenQxLGtGb3JjZSxub2lzZVdhdmVsZW5ndGgseEZvcmNlLHlGb3Jj
ZSx6Rm9yY2UiOyB9CiB9OwoKIApjbGFzcyAgTlJIWV9jbGFzc1NpbkZvcmNlQXBwbHk6IHB1Ymxp
YyBOUkhZX2NsYXNzTWF0cml4Rm9yY2VBcHBseQogewoJdHlwZWRlZiBOUkhZX2NsYXNzTWF0cml4
Rm9yY2VBcHBseSBpbmhlcml0ZWQ7CgoJZmxvYXQJIF93YXZlbGVuZ3RoLCBfd2F2ZWxlbmd0aFN0
YXJ0LCBfd2F2ZWxlbmd0aEVuZDsKCWZsb2F0CSBfcGhhc2UsIF9waGFzZVN0YXJ0LCBfcGhhc2VF
bmQ7CgogcHVibGljOgoKCU5SSFlfY2xhc3NTaW5Gb3JjZUFwcGx5KHZvaWQpIHsgfQoJdm9pZCAJ
QXBwbHkoTlJIWV9QYXJ0aWNsZVN5c3RlbSAqUFMsIGZsb2F0IHZhbHVlLCBjb25zdCBMaXN0IDxm
bG9hdD4gJmhvbWVDb2VmZmljaWVudHMsIHZvaWQgKmRhdGEpOwoKCXZvaWQgCVByZVN0ZXAodm9p
ZCk7Cgl2b2lkIAlQb3N0U3RlcCh2b2lkKTsKCXZvaWQgCUludGVycG9sYXRlU3RlcChmbG9hdCBy
KTsKCgl2b2lkIAlEcmF3SWNvbih2b2lkKTsKCVR3aW5lIAlHZXRBcHBsaWNhYmxlQ2hhbm5lbHMo
dm9pZCkgeyByZXR1cm4gInhyMSx5cjEsenIxLHh0MSx5dDEsenQxLGtGb3JjZSxzaW5XYXZlbGVu
Z3RoLHNpblBoYXNlLHhGb3JjZSx5Rm9yY2UsekZvcmNlIjsgfQogfTsKCiAKY2xhc3MgIE5SSFlf
Y2xhc3NXYWtlRm9yY2VBcHBseTogcHVibGljIE5SSFlfY2xhc3NNYXRyaXhGb3JjZUFwcGx5CiB7
Cgl0eXBlZGVmIE5SSFlfY2xhc3NNYXRyaXhGb3JjZUFwcGx5IGluaGVyaXRlZDsKCU1fTWF0cml4
IF9XRlN0YXJ0LCBfV0ZFbmQ7CglmbG9hdAlfd2FrZSwgX3dha2VTdGFydCwgX3dha2VFbmQ7CiBw
dWJsaWM6CgoJTlJIWV9jbGFzc1dha2VGb3JjZUFwcGx5KHZvaWQpIHsgX3dha2UgPSAwOyB9Cgl2
b2lkIAlBcHBseShOUkhZX1BhcnRpY2xlU3lzdGVtICpQUywgZmxvYXQgdmFsdWUsIGNvbnN0IExp
c3QgPGZsb2F0PiAmaG9tZUNvZWZmaWNpZW50cywgdm9pZCAqZGF0YSk7CgoJdm9pZCAJUHJlU3Rl
cCh2b2lkKTsKCXZvaWQgCVBvc3RTdGVwKHZvaWQpOwoJdm9pZCAJSW50ZXJwb2xhdGVTdGVwKGZs
b2F0IHIpOwoKCXZvaWQgCURyYXdJY29uKHZvaWQpOwoJVHdpbmUgCUdldEFwcGxpY2FibGVDaGFu
bmVscyh2b2lkKSB7IHJldHVybiAieHIxLHlyMSx6cjEseHQxLHl0MSx6dDEsd2FrZSI7IH0KIH07
CgogCmNsYXNzICBOUkhZX2NsYXNzVm9ydGV4Rm9yY2VBcHBseTogcHVibGljIE5SSFlfY2xhc3NN
YXRyaXhGb3JjZUFwcGx5CiB7Cgl0eXBlZGVmIE5SSFlfY2xhc3NNYXRyaXhGb3JjZUFwcGx5IGlu
aGVyaXRlZDsKCglNX01hdHJpeCBfV0ZTdGFydCwgX1dGRW5kOwoKIHB1YmxpYzoKCglOUkhZX2Ns
YXNzVm9ydGV4Rm9yY2VBcHBseSh2b2lkKSB7IH0KCXZvaWQgCUFwcGx5KE5SSFlfUGFydGljbGVT
eXN0ZW0gKlBTLCBmbG9hdCB2YWx1ZSwgY29uc3QgTGlzdCA8ZmxvYXQ+ICZob21lQ29lZmZpY2ll
bnRzLCB2b2lkICpkYXRhKTsKCgl2b2lkIAlEcmF3SWNvbih2b2lkKTsKCVR3aW5lIAlHZXRBcHBs
aWNhYmxlQ2hhbm5lbHModm9pZCkgeyByZXR1cm4gInhyMSx5cjEsenIxLHh0MSx5dDEsenQxLGtG
b3JjZSx4Rm9yY2UseUZvcmNlLHpGb3JjZSI7IH0KIH07CgogCiAKIAogCiAKY2xhc3MgIE5SSFlf
Y2xhc3NTcHJpbmdGb3JjZUFwcGx5OiBwdWJsaWMgTlJIWV9jbGFzc0ZvcmNlQXBwbHkKIHsKIHBy
b3RlY3RlZDoKCWRvdWJsZSAgX0tzLCBfcktzVGlwLCBfS2QsIF9SbCwgX2tIb2xkLCBfS2UsIF9L
ZWQsIF9jdXJ2YXR1cmUsIF9idWZEaXN0OwoJZG91YmxlICBfS3NTdGFydCwgX3JLc1RpcFN0YXJ0
ICxfS2RTdGFydCwgX1JsU3RhcnQsIF9rSG9sZFN0YXJ0LCBfS2VTdGFydCwgX0tlZFN0YXJ0LCBf
Y3VydmF0dXJlU3RhcnQsIF9idWZEaXN0U3RhcnQ7Cglkb3VibGUgIF9Lc0VuZCwgX3JLc1RpcEVu
ZCwgX0tkRW5kLCBfUmxFbmQsIF9rSG9sZEVuZCwgX0tlRW5kLCBfS2VkRW5kLCBfY3VydmF0dXJl
RW5kLCBfYnVmRGlzdEVuZDsKCiBwdWJsaWM6CgogCU5SSFlfY2xhc3NTcHJpbmdGb3JjZUFwcGx5
KHZvaWQpOwogICAgCiAgICAJdm9pZCAgICBJbmZvKGludCBpKTsKCXZvaWQgCUFwcGx5KE5SSFlf
UGFydGljbGVTeXN0ZW0gKlBTLCBmbG9hdCB2YWx1ZSwgY29uc3QgTGlzdCA8ZmxvYXQ+ICZob21l
Q29lZmZpY2llbnRzLCB2b2lkICpkYXRhKTsKCgl2b2lkIAlQcmVTdGVwKHZvaWQpOwoJdm9pZCAJ
UG9zdFN0ZXAodm9pZCk7Cgl2b2lkIAlJbnRlcnBvbGF0ZVN0ZXAoZmxvYXQgcik7CglUd2luZSAJ
R2V0QXBwbGljYWJsZUNoYW5uZWxzKHZvaWQpOwogfTsKCiAKY2xhc3MgTlJIWV9jbGFzc0F4aXNT
cHJpbmdGb3JjZUFwcGx5OiBwdWJsaWMgTlJIWV9jbGFzc1NwcmluZ0ZvcmNlQXBwbHkKewogcHVi
bGljOgoJdm9pZCAJQXBwbHkoTlJIWV9QYXJ0aWNsZVN5c3RlbSAqUFMsIGZsb2F0IHZhbHVlLCBj
b25zdCBMaXN0IDxmbG9hdD4gJmhvbWVDb2VmZmljaWVudHMsIHZvaWQgKmRhdGEpOwoJVHdpbmUg
CUdldEFwcGxpY2FibGVDaGFubmVscyh2b2lkKSB7IHJldHVybiAic3ByaW5nS3Msc3ByaW5nS2Qi
OyB9Cn07CgogCmNsYXNzIE5SSFlfY2xhc3NBdHRhY2hTcHJpbmdGb3JjZUFwcGx5OiBwdWJsaWMg
TlJIWV9jbGFzc1NwcmluZ0ZvcmNlQXBwbHkKewogcHVibGljOgoJdm9pZCAJQXBwbHkoTlJIWV9Q
YXJ0aWNsZVN5c3RlbSAqUFMsIGZsb2F0IHZhbHVlLCBjb25zdCBMaXN0IDxmbG9hdD4gJmhvbWVD
b2VmZmljaWVudHMsIHZvaWQgKmRhdGEpOwoJVHdpbmUgCUdldEFwcGxpY2FibGVDaGFubmVscyh2
b2lkKSB7IHJldHVybiAic3ByaW5nS3Msc3ByaW5nS2QiOyB9Cn07CgogCmNsYXNzIE5SSFlfY2xh
c3NSdWJiZXJTcHJpbmdGb3JjZUFwcGx5OiBwdWJsaWMgTlJIWV9jbGFzc1NwcmluZ0ZvcmNlQXBw
bHkKewogcHVibGljOgoJdm9pZCAJQXBwbHkoTlJIWV9QYXJ0aWNsZVN5c3RlbSAqUFMsIGZsb2F0
IHZhbHVlLCBjb25zdCBMaXN0IDxmbG9hdD4gJmhvbWVDb2VmZmljaWVudHMsIHZvaWQgKmRhdGEp
OwoJVHdpbmUgCUdldEFwcGxpY2FibGVDaGFubmVscyh2b2lkKSB7IHJldHVybiAic3ByaW5nS3Ms
c3ByaW5nS2QiOyB9Cn07CgoKIAogCiAKCgpjbGFzcyBOUkhZX1NwcmluZzsKCmNsYXNzIE5SSFlf
U3ByaW5nR3JvdXAKIHsKcHVibGljOgoJTGlzdDxOUkhZX1NwcmluZyAqPiAgICAgICAgc3ByaW5n
czsKCglOUkhZX1NwcmluZ0dyb3VwKHZvaWQpIHsgfQoJfk5SSFlfU3ByaW5nR3JvdXAodm9pZCkg
eyAgc3ByaW5ncy5yZW1vdmVBbGwoKTsgfQoKCXZvaWQgSW5mbyhpbnQgaSxCT09MRUFOIHZlcmJv
c2UpOwogfTsKCmNsYXNzIE5SSFlfU3ByaW5nRGF0YSAKewogIHB1YmxpYzoKICAgIGZsb2F0IEtz
LCBLZCwgUmwsIEtoLCBLZSwgS2VkLCByS3NUaXA7CiAgICBmbG9hdCBjdXJ2YXR1cmUsIGJ1ZkRp
c3Q7CgogICAgTlJIWV9TcHJpbmdEYXRhKHZvaWQpOwogICAgTlJIWV9TcHJpbmdEYXRhKGZsb2F0
IGluS3MsIGZsb2F0IGlucktzVGlwLCBmbG9hdCBpbktkLCBmbG9hdCBpblJsLCBmbG9hdCBpbkhv
bGQsIGZsb2F0IGluS0V4cCwgZmxvYXQgaW5LRXhwRGlzdCwgZmxvYXQgY3VydiwgZmxvYXQgYnVm
RCk7Cn07CgoKY2xhc3MgTlJIWV9TcHJpbmcKIHsKIHB1YmxpYzoKCWRvdWJsZSAgICAgYmFzZUxl
bmd0aDsKCWludAkgICBpZDEsIGlkMjsKCQkKICAgICAgICBOUkhZX1NwcmluZyh2b2lkKTsKICAg
ICAgICBOUkhZX1NwcmluZyhpbnQgcDEsIGludCBwMiwgZmxvYXQgYmFzZWxlbik7CiAgICAgIAoJ
dmlydHVhbCB2b2lkIENhbGNGb3JjZXMoTlJIWV9QYXJ0aWNsZVN5c3RlbSAqUFMsIGNvbnN0IExp
c3QgPGZsb2F0PiAmaG9tZUNvZWZmaWNpZW50cywgTlJIWV9TcHJpbmdEYXRhICpkYXRhKTsKCgl2
aXJ0dWFsIGludCAJR2V0SG9tZUNvZWZmZWNpZW50cyhjb25zdCBMaXN0IDxmbG9hdD4gJmhvbWVD
b2VmZmljaWVudHMsIE5SSFlfU3ByaW5nRGF0YSAqc3ByaW5nRGF0YSwgZmxvYXQgJmhjMSwgZmxv
YXQgJmhjMik7Cgl2aXJ0dWFsIGZsb2F0IAlDYWxjUmVzdExlbmd0aChOUkhZX1BhcnRpY2xlU3lz
dGVtICpQUywgZmxvYXQgcmwpOwoJdmlydHVhbCB2b2lkIAlDYWxjUGFydGljbGVEaWZmKE5SSFlf
UGFydGljbGVTeXN0ZW0gKlBTLCBNX1ZlY3RvciAmcCwgTV9WZWN0b3IgJnYpOwoJdmlydHVhbCB2
b2lkIAlDYWxjTGVuZ3RocyhOUkhZX1BhcnRpY2xlU3lzdGVtICpQUywgTV9WZWN0b3IgJnAsIGZs
b2F0IHJsLCBkb3VibGUgJmN1ckxlbmd0aCwgZG91YmxlICZkaWZMZW5ndGgpOwoJdmlydHVhbCBm
bG9hdCAJQ2FsY0tzKE5SSFlfU3ByaW5nRGF0YSAqc3ByaW5nRGF0YSkgeyByZXR1cm4gc3ByaW5n
RGF0YS0+S3M7IH0KCXZpcnR1YWwgQk9PTEVBTiBVc2VTZWNvbmRQYXJ0aWNsZSh2b2lkKSB7IHJl
dHVybiAxIDsgfQoJdmlydHVhbCB2b2lkCVBvc3RDYWxjKE5SSFlfUGFydGljbGVTeXN0ZW0gKlBT
KSB7IH0KCgl2aXJ0dWFsIHZvaWQgSW5mbyh2b2lkKTsKIH07CgpjbGFzcyBOUkhZX1N0aXRjaFNw
cmluZzpwdWJsaWMgTlJIWV9TcHJpbmcKIHsKIHB1YmxpYzoKCQlOUkhZX1N0aXRjaFNwcmluZyhp
bnQgcDEsIGludCBwMiwgZmxvYXQgYmFzZWxlbik7CgkgICAgCiAgICBpbnQgCUdldEhvbWVDb2Vm
ZmVjaWVudHMoY29uc3QgTGlzdCA8ZmxvYXQ+ICZob21lQ29lZmZpY2llbnRzLCBOUkhZX1Nwcmlu
Z0RhdGEgKnNwcmluZ0RhdGEsIGZsb2F0ICZoYzEsIGZsb2F0ICZoYzIpOwogICAgdm9pZAlQb3N0
Q2FsYyhOUkhZX1BhcnRpY2xlU3lzdGVtICpQUykgeyBQUy0+QWN0aXZhdGVTdGl0Y2goaWQxLGlk
Mik7IH0KIH07CgpjbGFzcyBOUkhZX1BvaW50U3ByaW5nOnB1YmxpYyBOUkhZX1NwcmluZwogewog
cHVibGljOgoJCU5SSFlfUG9pbnRTcHJpbmcodm9pZCkgeyB9CgkJTlJIWV9Qb2ludFNwcmluZyhp
bnQgcDEpOwogICAgQk9PTEVBTiAJVXNlU2Vjb25kUGFydGljbGUodm9pZCkgeyByZXR1cm4gMCA7
IH0KICAgIHZvaWQgCUNhbGNMZW5ndGhzKE5SSFlfUGFydGljbGVTeXN0ZW0gKlBTLCBNX1ZlY3Rv
ciAmcCwgZmxvYXQgcmwsIGRvdWJsZSAmY3VyTGVuZ3RoLCBkb3VibGUgJmRpZkxlbmd0aCk7CiAg
ICBmbG9hdCAJQ2FsY1Jlc3RMZW5ndGgoTlJIWV9QYXJ0aWNsZVN5c3RlbSAqUFMsIGZsb2F0IHJs
KSB7IHJldHVybiAwLjA7IH0KICAgIHZvaWQgCUNhbGNQYXJ0aWNsZURpZmYoTlJIWV9QYXJ0aWNs
ZVN5c3RlbSAqUFMsIE1fVmVjdG9yICZwLCBNX1ZlY3RvciAmdik7CiAgICB2b2lkIAlJbmZvKHZv
aWQpOwogfTsKCmNsYXNzIE5SSFlfSGFpclNwcmluZzpwdWJsaWMgTlJIWV9Qb2ludFNwcmluZwog
ewogcHVibGljOgogICAgZmxvYXQgCXJMZW5ndGg7CgoJCU5SSFlfSGFpclNwcmluZyhpbnQgcDEs
IGZsb2F0IHJsZW4pOwogICAgZmxvYXQgCUNhbGNLcyhOUkhZX1NwcmluZ0RhdGEgKnNwcmluZ0Rh
dGEpIHsgcmV0dXJuIHNwcmluZ0RhdGEtPktzKigxLjAgKyByTGVuZ3RoKihzcHJpbmdEYXRhLT5y
S3NUaXAtMS4wKSk7IH0KIH07CgpjbGFzcyBOUkhZX01lc2hIYWlyU3ByaW5nOnB1YmxpYyBOUkhZ
X1NwcmluZwogewogcHVibGljOgogICAgZmxvYXQgCXJMZW5ndGg7CgoJCU5SSFlfTWVzaEhhaXJT
cHJpbmcoaW50IHAxLCBpbnQgcDIsIGZsb2F0IGJhc2VsZW4sIGZsb2F0IHJsZW4pOwogICAgZmxv
YXQgCUNhbGNLcyhOUkhZX1NwcmluZ0RhdGEgKnNwcmluZ0RhdGEpIHsgcmV0dXJuIHNwcmluZ0Rh
dGEtPktzKigxLjAgKyByTGVuZ3RoKihzcHJpbmdEYXRhLT5yS3NUaXAtMS4wKSk7IH0KIH07Cgpj
bGFzcyBOUkhZX1N0cmFuZFNwcmluZzpwdWJsaWMgTlJIWV9TcHJpbmcKIHsKIHB1YmxpYzoKICAg
IGludAkgICAJaWQzOwoKCQlOUkhZX1N0cmFuZFNwcmluZyhpbnQgcDEsIGludCBwMiwgaW50IHAz
LCBmbG9hdCBiYXNlbGVuKTsKICAgIGZsb2F0IAlDYWxjUmVzdExlbmd0aChOUkhZX1BhcnRpY2xl
U3lzdGVtICpQUywgZmxvYXQgcmwpIHsgcmV0dXJuIDAuMDsgfQogICAgdm9pZCAJQ2FsY0xlbmd0
aHMoTlJIWV9QYXJ0aWNsZVN5c3RlbSAqUFMsIE1fVmVjdG9yICZwLCBmbG9hdCBybCwgZG91Ymxl
ICZjdXJMZW5ndGgsIGRvdWJsZSAmZGlmTGVuZ3RoKTsKICAgIHZvaWQgCUluZm8odm9pZCk7Cgog
fTsKCmNsYXNzIE5SSFlfU3VyZmFjZVNwcmluZzpwdWJsaWMgTlJIWV9TcHJpbmcKIHsKIHB1Ymxp
YzoKICAgIExpc3QgPGludD4JcGlkOwoKCQlOUkhZX1N1cmZhY2VTcHJpbmcoTGlzdCA8aW50PiAm
cGFydElkLCBpbnQgbm9ybWFsSWQpOwogICAgdm9pZCAJQ2FsY0ZvcmNlcyhOUkhZX1BhcnRpY2xl
U3lzdGVtICpQUywgY29uc3QgTGlzdCA8ZmxvYXQ+ICZob21lQ29lZmZpY2llbnRzLCBOUkhZX1Nw
cmluZ0RhdGEgKnNwcmluZ0RhdGEpOwogICAgdm9pZCAJSW5mbyh2b2lkKTsKIH07CgogCgogCgoj
IDQ5ICJoL25yaHlfY2xhc3NEeW5hbWljcy5oIiAyCgojIDEgImgvbnJoeV9jbGFzc0dlbmVyYXRv
ci5oIiAxCiAgCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKIAoK
CgoKIAogCiAKCiAKdGVtcGxhdGUgPGNsYXNzIFR5cGU+IGNsYXNzIE5SSFlfbWF0Y2g7CnRlbXBs
YXRlIDxjbGFzcyBUeXBlPiBjbGFzcyBOUkhZX2FscGhhbGlzdDsKCiAKY2xhc3MgIE5SSFlfY2xh
c3NHZW5lcmF0b3JBcHBseTsKY2xhc3MgIE5SSFlfY2xhc3NHZW5lcmF0b3I7CgoKZW51bSBHRU5F
UkFUT1JUeXBlIHsKCglHRU5fTm9uZSA9IDAsCgoJR0VOX1NlbGYsCglHRU5fQW5jaG9yLAoJR0VO
X1J1YmJlciwKfTsKCmNsYXNzICBOUkhZX2NsYXNzR2VuZXJhdG9yQXBwbHkKewogcHJvdGVjdGVk
OgogICAgTlJIWV9jbGFzc0dlbmVyYXRvcgkqX2dlbmVyYXRvcjsKCiBwdWJsaWM6CgogICAgTlJI
WV9jbGFzc0dlbmVyYXRvcgkqR2V0R2VuZXJhdG9yKHZvaWQpIHsgcmV0dXJuIF9nZW5lcmF0b3I7
IH0KICAgIHZvaWQgCQkgU2V0R2VuZXJhdG9yKE5SSFlfY2xhc3NHZW5lcmF0b3IgKmdlbmVyYXRv
cikgeyBfZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOyB9CgogICAgTlJIWV9jbGFzc0dlbmVyYXRvckFw
cGx5KHZvaWQpIHsgfQogICAgdmlydHVhbCB2b2lkIEFwcGx5KE5SSFlfUGFydGljbGVTeXN0ZW0g
KlBTLCBmbG9hdCB2YWx1ZSwgdm9pZCAqZGF0YSkgIHsgfQogICAgIAogICAgdmlydHVhbCB2b2lk
IEluZm8oaW50IGkpIHsgfQoKICAgIHZpcnR1YWwgdm9pZCBQcmVTdGVwKHZvaWQpIHsgfQogICAg
dmlydHVhbCB2b2lkIFBvc3RTdGVwKHZvaWQpIHsgfQogICAgdmlydHVhbCB2b2lkIEludGVycG9s
YXRlU3RlcChmbG9hdCByKSB7IH0KCQp9OwoKCgpzdHJ1Y3QgTlJIWV9jbGFzc0dlbmVyYXRvcjpw
dWJsaWMgTlJIWV9jbGFzc09iamVjdCB7CnByaXZhdGU6CiAgICB0eXBlZGVmIE5SSFlfY2xhc3NP
YmplY3QgaW5oZXJpdGVkOwogICAgdHlwZWRlZiBOUkhZX2FscGhhbGlzdDxOUkhZX2NsYXNzR2Vu
ZXJhdG9yPiBhbHBoYWxpc3Q7CiAgICBmcmllbmQgTlJIWV9tYXRjaCA8TlJIWV9jbGFzc0dlbmVy
YXRvcj47CiAgICBmcmllbmQgTlJIWV9hbHBoYWxpc3Q8TlJIWV9jbGFzc0dlbmVyYXRvcj47Cgpw
cm90ZWN0ZWQ6CiAgICAgCiAgICBHRU5FUkFUT1JUeXBlCSAgICAgICAgICAgICAgIF9nZW5lcmF0
b3JUeXBlOwogICAgTlJIWV9jbGFzc0dlbmVyYXRvckFwcGx5CSAgICAgKl9nZW5lcmF0b3JBcHBs
eTsKCiAgICBEWU5BTUlDU19TdGF0dXMgCQkJX0R5blN0YXR1czsKCiAgICB2b2lkICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplICgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICk7CgoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdFdvcmxkVHJhdmVy
c2UoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKcHVibGljOgogICAgIAogICAgTlJIWV9j
bGFzc0dlbmVyYXRvciAoCiAgICAgICAgY29uc3QgQ0hBUiAgICAgICAgICAqbmFtZQogICAgICAg
ICk7CiAgICBOUkhZX2NsYXNzR2VuZXJhdG9yICgKICAgICAgICBjb25zdCBDSEFSICAgICAgICAg
ICpuYW1lLAogICAgICAgIE5SSFlfY2xhc3NHZW5lcmF0b3IgICAgKmNsb25lRnJvbQogICAgICAg
ICk7CiAgICBOUkhZX2NsYXNzR2VuZXJhdG9yICgKICAgICAgICB2b2lkIAogICAgICAgICk7Cgog
ICAgfk5SSFlfY2xhc3NHZW5lcmF0b3IgKAogICAgICAgIHZvaWQgCiAgICAgICAgKTsKCiAgICAg
CiAgICBzdGF0aWMgY29uc3QgQ0hBUiAgICAgICAgICAgICAgICpQcmludFNlbGZDbGFzc25hbWUg
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAoIk5SSFlfY2xhc3NHZW5lcmF0
b3IiKTsgfQoKICAgICAKCiAgICBzdGF0aWMgSU5UICAgICAgICAgICAgICAgICAgICAgIEdldFNl
bGZDbGFzc1R5cGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAoVEhJTkdf
VFlQRV9HRU5FUkFUT1IpOyB9CgogICAgc3RhdGljIE5SSFlfYnVuY2g8TlJIWV9jbGFzc0dlbmVy
YXRvcj4gKkZpbmQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQ0hBUiAgKm5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAg
ICAgCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5hbWUgKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUiAgKm5ld05hbWUKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgCiAgICBOUkhZX2NsYXNz
VGhpbmcgICAgICAgICAgICAgICAgICpDbG9uZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBDSEFSICAqbmV3TmFtZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApOwogICAgIAogICAgIAoKCgogICAgIAogICAgY29uc3QgQ0hBUiAgICAg
ICAgICAgICAgICAgICAgICAqUHJpbnREZXJpdmVkQ2xhc3NPZlNlbGZUeXBlTmFtZSAoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuICgiZ2VuZXJhdG9yIik7IH0KCiAgICAgCiAg
ICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldERlcml2ZWRDbGFzc09mU2VsZlR5
cGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAoVEhJTkdfVFlQRV9HRU5F
UkFUT1IpOyB9CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUNy
ZWF0ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZ
X0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZURlbGV0ZSAo
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNz
RGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwog
ICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZU9uRmxhZyAoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3Jp
YmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgdm9p
ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUZ1bGxTdGF0ZSAoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVT
dHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKCiAgICB2b2lk
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlRnVsbFN0YXRlUGFja2VkICgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNj
cmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAg
dm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZVR5cGUgKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3Ry
ZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgCiAgICAg
CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldEdlbmVyYXRvclR5cGUgKEdF
TkVSQVRPUlR5cGUgdHlwZSk7IAogICAgR0VORVJBVE9SVHlwZSAgICAgICAgICAgICAgICAgICBH
ZXRHZW5lcmF0b3JUeXBlICh2b2lkKSB7IHJldHVybiBfZ2VuZXJhdG9yVHlwZTsgfQogICAgVHdp
bmUgCQkJICAgIEdldEdlbmVyYXRvclR5cGVOYW1lKEdFTkVSQVRPUlR5cGUgZCk7CiAgICBHRU5F
UkFUT1JUeXBlICAgCQkgICAgR2V0R2VuZXJhdG9yVHlwZUZyb21OYW1lKFR3aW5lIG5hbWUpOwoK
ICAgIE5SSFlfY2xhc3NHZW5lcmF0b3JBcHBseQkgICAgKkdldEdlbmVyYXRvckFwcGx5ICh2b2lk
KSB7IHJldHVybiBfZ2VuZXJhdG9yQXBwbHk7IH0KICAgIHZvaWQgCQkJICAgIExpc3RHZW5lcmF0
b3IoRklMRSAqZnAsIGNvbnN0IExpc3Q8VHdpbmU+ICZscyk7CgogICAgdm9pZCAJCQkgICAgQXBw
bHkoTlJIWV9QYXJ0aWNsZVN5c3RlbSAqUFMsIGZsb2F0IHZhbHVlLCB2b2lkICpkYXRhKTsKICAg
ICAKCiAgICB2b2lkIAlQcmVTdGVwKHZvaWQpOwogICAgdm9pZCAJUG9zdFN0ZXAodm9pZCk7CiAg
ICB2b2lkIAlJbnRlcnBvbGF0ZVN0ZXAoZmxvYXQgcik7CgogICAgdm9pZCAJCVNldER5bmFtaWNz
U3RhdHVzKERZTkFNSUNTX1N0YXR1cyBzKSB7IF9EeW5TdGF0dXMgPSBzOyB9CiAgICBEWU5BTUlD
U19TdGF0dXMJR2V0RHluYW1pY3NTdGF0dXModm9pZCkgeyByZXR1cm4gX0R5blN0YXR1czsgfQoK
fTsKCgogCmNsYXNzICBOUkhZX2NsYXNzU2VsZkdlbmVyYXRvckFwcGx5OiBwdWJsaWMgTlJIWV9j
bGFzc0dlbmVyYXRvckFwcGx5CiB7CiBwcm90ZWN0ZWQ6CglmbG9hdCAgIF9tYXNzOwoJQk9PTEVB
TiBfbG9ja2VkOwoKCWZsb2F0IF9tYXNzU3RhcnQsX21hc3NFbmQ7CglmbG9hdCBfbG9ja1N0YXJ0
LF9sb2NrRW5kOwoKIHB1YmxpYzoKCglOUkhZX2NsYXNzU2VsZkdlbmVyYXRvckFwcGx5KHZvaWQp
IHsgfQoJdm9pZCBBcHBseShOUkhZX1BhcnRpY2xlU3lzdGVtICpQUywgZmxvYXQgdmFsdWUsIHZv
aWQgKmRhdGEpOwogCSAKCgl2b2lkIAlQcmVTdGVwKHZvaWQpOwoJdm9pZCAJUG9zdFN0ZXAodm9p
ZCk7Cgl2b2lkIAlJbnRlcnBvbGF0ZVN0ZXAoZmxvYXQgcik7CgogfTsKCiAKY2xhc3MgIE5SSFlf
Y2xhc3NBbmNob3JHZW5lcmF0b3JBcHBseTogcHVibGljIE5SSFlfY2xhc3NTZWxmR2VuZXJhdG9y
QXBwbHkKIHsKCiB9OwoKCiAKY2xhc3MgIE5SSFlfY2xhc3NSdWJiZXJHZW5lcmF0b3JBcHBseTog
cHVibGljIE5SSFlfY2xhc3NTZWxmR2VuZXJhdG9yQXBwbHkKIHsKIHB1YmxpYzoKCXZvaWQgQXBw
bHkoTlJIWV9QYXJ0aWNsZVN5c3RlbSAqUFMsIGZsb2F0IHZhbHVlLCB2b2lkICpkYXRhKTsKIH07
CgoKCiAKCiAKCiMgNTAgImgvbnJoeV9jbGFzc0R5bmFtaWNzLmgiIDIKCgoKCiAKIAogCgogCnRl
bXBsYXRlIDxjbGFzcyBUeXBlPiBjbGFzcyBOUkhZX21hdGNoOwp0ZW1wbGF0ZSA8Y2xhc3MgVHlw
ZT4gY2xhc3MgTlJIWV9hbHBoYWxpc3Q7CgogCmVudW0gRFlOdHlwZSB7CiAgICBEWU5fTm9uZSA9
IDAsCiAgICBEWU5fRmxleCwKICAgIERZTl9SdWJiZXJCYW5kLAp9OyAKCiAKY2xhc3MgWEZPUk1f
RHluYW1pY3NCYXNlOwpjbGFzcyBYRk9STV9EeW5DbHVzdGVyOwoKIAoKIAoKc3RydWN0IE5SSFlf
Y2xhc3NEeW5hbWljczpwdWJsaWMgTlJIWV9jbGFzc0FwcGFyaXRpb24gewpwcml2YXRlOgogICAg
dHlwZWRlZiBOUkhZX2NsYXNzQXBwYXJpdGlvbiBpbmhlcml0ZWQ7CiAgICB0eXBlZGVmIE5SSFlf
YWxwaGFsaXN0PE5SSFlfY2xhc3NEeW5hbWljcz4gYWxwaGFsaXN0OwogICAgZnJpZW5kIE5SSFlf
bWF0Y2ggPE5SSFlfY2xhc3NEeW5hbWljcz47CiAgICBmcmllbmQgTlJIWV9hbHBoYWxpc3Q8TlJI
WV9jbGFzc0R5bmFtaWNzPjsKCiAgICAgCiAKIAoKcHJvdGVjdGVkOgogICAgVHdpbmUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfc2V0dXBGaWxlOwogICAgVHdpbmUJCQkJICBfc2V0
dXBGaWxlR3JvdXA7CiAgICAgCiAgICBOUkhZX2NsYXNzV2ViCQkJICAqX3NwcmluZ1dlYjsKICAg
IE5SSFlfY2xhc3NXZWIJCQkgICpfc3RpdGNoV2ViOwoKICAgIHZvaWQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluaXRpYWxpemUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAg
ICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RXb3JsZFRyYXZlcnNlKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBMaXN0IDxmbG9hdD4JX2NoYW5WYWwsX2NoYW5W
YWxTdGFydCxfY2hhblZhbEVuZDsKCiAgICBEWU50eXBlIAkJX2R5bmFtaWNUeXBlOwkgICAgCiAg
ICAgCiAgICBEWU5BTUlDU19TdGF0dXMJX0R5blN0YXR1czsKICAgIEJPT0xFQU4JCV9oYXNCZWVu
SW5pdGlhbGl6ZWQ7CgpwdWJsaWM6CiAgICBTaGFwZSAJCSBzZXR1cFNoYXBlOwogICAgTlJIWV9j
bGFzc1RoaW5nCSAqYmFja3VwU2V0dXBUaGluZzsKICAgICAKCiAgICBMaXN0PE5SSFlfTWFzc0dy
b3VwICo+ICAgIG1hc3NHcm91cHM7CiAgICBMaXN0PE5SSFlfU3ByaW5nR3JvdXAgKj4gIHNwcmlu
Z0dyb3VwczsKCiAgICAgCiAgICBOUkhZX2NsYXNzRHluYW1pY3MgKAogICAgICAgIGNvbnN0IENI
QVIgICAgICAgICAgKm5hbWUKICAgICAgICApOwogICAgTlJIWV9jbGFzc0R5bmFtaWNzICgKICAg
ICAgICBjb25zdCBDSEFSICAgICAgICAgICpuYW1lLAogICAgICAgIE5SSFlfY2xhc3NEeW5hbWlj
cyAgICAqY2xvbmVGcm9tCiAgICAgICAgKTsKICAgIE5SSFlfY2xhc3NEeW5hbWljcyAoCiAgICAg
ICAgdm9pZCAKICAgICAgICApOwoKICAgIH5OUkhZX2NsYXNzRHluYW1pY3MgKAogICAgICAgIHZv
aWQgCiAgICAgICAgKTsKCgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICBTZXRTZXR1
cEZpbGUoVHdpbmUgbmFtZSkgeyBpZiAobmFtZT09Im9mZiIpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc2V0dXBGaWxlPSIiOyAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfc2V0dXBGaWxlPW5hbWU7IH0KICAgIFR3aW5lICAgICAgICAgICAgICAgICAg
ICAgICBHZXRTZXR1cEZpbGUoKSB7IHJldHVybiBfc2V0dXBGaWxlOyB9CiAgICAgICAgIAogICAg
dm9pZCAgICAgICAgICAgICAgICAgICAgICAgICBTZXRTZXR1cEdyb3VwKFR3aW5lIG5hbWUpIHsg
aWYgKG5hbWU9PSJvZmYiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX3NldHVwRmlsZUdyb3VwPSIiOyAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc2V0
dXBGaWxlR3JvdXA9bmFtZTsgfQogICAgVHdpbmUgICAgICAgICAgICAgICAgICAgICAgIEdldFNl
dHVwR3JvdXAoKSB7IHJldHVybiBfc2V0dXBGaWxlR3JvdXA7IH0KICAgICAgICAgCgogICAgIAog
ICAgc3RhdGljIGNvbnN0IENIQVIgICAgICAgICAgICAgICAqUHJpbnRTZWxmQ2xhc3NuYW1lICgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1cm4gKCJOUkhZX2NsYXNzRHluYW1pY3Mi
KTsgfQoKICAgICAKCiAgICBzdGF0aWMgSU5UICAgICAgICAgICAgICAgICAgICAgIEdldFNlbGZD
bGFzc1R5cGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAoVEhJTkdfVFlQ
RV9EWU5BTUlDUyk7IH0KCiAgICBzdGF0aWMgTlJIWV9idW5jaDxOUkhZX2NsYXNzRHluYW1pY3M+
ICpGaW5kICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENI
QVIgICpuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgIAog
ICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuYW1lICgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIgICpuZXdOYW1lCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgIAogICAgTlJIWV9jbGFzc1RoaW5n
ICAgICAgICAgICAgICAgICAqQ2xvbmUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgQ0hBUiAgKm5ld05hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKTsKCiAgICAgCiAgICAgCgoKCiAgICAgCiAgICBjb25zdCBDSEFSICAgICAgICAg
ICAgICAgICAgICAgICpQcmludERlcml2ZWRDbGFzc09mU2VsZlR5cGVOYW1lICgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICkgeyByZXR1cm4gKCJkeW5hbWljcyIpOyB9CgogICAgIAogICAgSU5U
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXREZXJpdmVkQ2xhc3NPZlNlbGZUeXBlICgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1cm4gKFRISU5HX1RZUEVfRFlOQU1JQ1Mp
OyB9CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUNyZWF0ZSAo
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNz
RGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoK
ICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVEZWxldGUgKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2Ny
aWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICB2
b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlT25GbGFnICgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0
cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgdm9pZCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUZ1bGxTdGF0ZSAoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJl
YW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIHZvaWQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVGdWxsU3RhdGVQYWNrZWQgKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJl
U3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICB2b2lk
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlU2V0dXBGaWxlICgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0
cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlU2V0dXBHcm91cCAoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJl
YW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAKICAgICAK
ICAgIHZvaWQJCQkgICBMaXN0RHluYW1pY3MoRklMRSAqZnAsIGNvbnN0IExpc3Q8VHdpbmU+ICZs
cyk7CgogICAgQk9PTEVBTiAJCQkgICBJbml0aWFsaXplTWUodm9pZCk7CiAgICBCT09MRUFOIAkJ
CSAgIEluaXRpYWxpemVTZXR1cFNoYXBlKHZvaWQpOwogICAgdm9pZCAJCQkgICBNYXNzR3JvdXBJ
bml0KEdFTkVSQVRPUlR5cGUgZ3R5cGUsIE5SSFlfTWFzc0dyb3VwICptZywgVHdpbmUgZ3JvdXBO
YW1lLCBpbnQgbkFuY2hvcik7CgogICAgIAogICAgdm9pZCAJCQkgICBTcHJpbmdHcm91cEluaXQo
TlJIWV9jbGFzc0ZvcmNlICpmb3JjZSwgTlJIWV9TcHJpbmdHcm91cCAqc2csIFR3aW5lIGdyb3Vw
TmFtZSk7CiAgICB2b2lkIAkJCSAgIFNwcmluZ0FkZChOUkhZX1NwcmluZ0dyb3VwICpzZywgaW50
IGlkMSwgaW50IGlkMiwgQ09OTkVDVHR5cGUgY29ubmVjdFR5cGUsIGZsb2F0IHJsZW4gPSAtMS4w
KTsKCiAgICB2b2lkCQkJICAgTWFrZVNoZWFyU3ByaW5ncyhOUkhZX1NwcmluZ0dyb3VwICpzZywg
VHdpbmUgZ3JvdXBOYW1lKTsKICAgIHZvaWQJCQkgICBNYWtlQmVuZFNwcmluZ3MoTlJIWV9TcHJp
bmdHcm91cCAqc2csIFR3aW5lIGdyb3VwTmFtZSk7CiAgICB2b2lkIAkJCSAgIE1ha2VTdXJmYWNl
U3ByaW5ncyhOUkhZX1NwcmluZ0dyb3VwICpzZywgVHdpbmUgZ3JvdXBOYW1lKTsKICAgIHZvaWQJ
CQkgICBNYWtlUHJveFNwcmluZ3MoTlJIWV9TcHJpbmdHcm91cCAqc2csIFR3aW5lIGdyb3VwTmFt
ZSk7CiAgICB2b2lkCQkJICAgTWFrZU1lc2hIYWlyU3ByaW5ncyhOUkhZX1NwcmluZ0dyb3VwICpz
ZywgVHdpbmUgZ3JvdXBOYW1lKTsKCiAgICB2b2lkIAkJCSAgIENhbGNQYXJ0aWNsZXMoTlJIWV9Q
YXJ0aWNsZVN5c3RlbSAqUFMpOwogICAgdm9pZCAJCQkgICBDYWxjRm9yY2VzKE5SSFlfUGFydGlj
bGVTeXN0ZW0gKlBTKTsKICAgIHZvaWQgCQkJICAgQ2FsY0NvbGxpc2lvbnMoTlJIWV9QYXJ0aWNs
ZVN5c3RlbSAqUFMpOwoKICAgIFhGT1JNX0R5bkNsdXN0ZXIgCQkgICAqQ2FsY3VsYXRlSG9tZUNv
ZWZmaWNpZW50cyhOUkhZX1BhcnRpY2xlU3lzdGVtICpQUywgTlJIWV9jbGFzc0NoYW5uZWwgKmNo
YW5uZWwpOwogICAgaW50CQkJCSAgIENhbGN1bGF0ZUhvbWVDb2VmZmljaWVudHMoTlJIWV9QYXJ0
aWNsZVN5c3RlbSAqUFMsIE5SSFlfY2xhc3NDaGFubmVsICpjaGFubmVsLCBMaXN0IDxmbG9hdD4g
KmhvbWVDb2VmZmljaWVudHMpOwogICAgdm9pZCAJCQkgICBSZW1vdmVEeW5hbWljc0Jhc2UoWEZP
Uk1fRHluYW1pY3NCYXNlICp4Zm9ybSk7CiAgICAKICAgIExpc3QgPE5SSFlfY2xhc3NGb3JjZSAq
PiAJICAgR2V0Rm9yY2VzKHZvaWQpOwogICAgTGlzdCA8TlJIWV9jbGFzc0dlbmVyYXRvciAqPiAg
IEdldEdlbmVyYXRvcnModm9pZCk7CiAgICBMaXN0IDxOUkhZX2NsYXNzQ29sbGlzaW9uICo+ICAg
R2V0Q29sbGlzaW9ucyh2b2lkKTsKICAgIExpc3QgPE5SSFlfY2xhc3NIb21lICo+IAkgICBHZXRI
b21lcyh2b2lkKTsKCiAgICB2b2lkIAlQcmVDb29rKHZvaWQpOwogICAgdm9pZCAJUG9zdENvb2so
dm9pZCk7CiAgICB2b2lkIAlQcmVTdGVwKHZvaWQpOwogICAgdm9pZCAJUG9zdFN0ZXAodm9pZCk7
CiAgICB2b2lkIAlJbnRlcnBvbGF0ZVN0ZXAoZmxvYXQgcik7CgoKICAgICAKICAgICAKICAgIAog
ICAgdm9pZCAJU2V0RHluYW1pY1R5cGUoRFlOdHlwZSBkKSB7IF9keW5hbWljVHlwZSA9IGQ7IH0K
ICAgIERZTnR5cGUgCUdldER5bmFtaWNUeXBlKHZvaWQpIHsgcmV0dXJuIF9keW5hbWljVHlwZTsg
fQogICAgVHdpbmUgCUdldER5bmFtaWNUeXBlTmFtZShEWU50eXBlIGQpOwogICAgRFlOdHlwZSAg
ICAgR2V0RHluYW1pY1R5cGVGcm9tTmFtZShUd2luZSBuYW1lKTsKCiAgICB2b2lkIAkJU2V0RHlu
YW1pY3NTdGF0dXMoRFlOQU1JQ1NfU3RhdHVzIHMpIHsgX0R5blN0YXR1cyA9IHM7IH0KICAgIERZ
TkFNSUNTX1N0YXR1cwlHZXREeW5hbWljc1N0YXR1cyh2b2lkKSB7IHJldHVybiBfRHluU3RhdHVz
OyB9CiAgICBCT09MRUFOCQlIYXNCZWVuSW5pdGlhbGl6ZWQodm9pZCkgeyByZXR1cm4gX2hhc0Jl
ZW5Jbml0aWFsaXplZDsgfQoKICAgIE5SSFlfY2xhc3NXZWIgCSpHZXRTdGl0Y2hXZWIodm9pZCkg
eyByZXR1cm4gX3N0aXRjaFdlYjsgfQp9OwoKIAoKCgoKCgoKCgoKCgoKCiAKCkxpc3QgPExpc3Qg
PGludD4gPiBTRV9MaW5lc0luR3JvdXAoU2hhcGUgKnNoYXBlLCBUd2luZSBncm91cE5hbWUpOwpC
T09MRUFOICpTRV9NYXJrVmVydHNJbkdyb3VwKFNoYXBlICpzaGFwZSwgVHdpbmUgZ3JvdXBOYW1l
KTsKTGlzdDxpbnQ+IFNFX1ZlcnRzSW5Hcm91cEJ5RWxlbShTaGFwZSAqc2hhcGUsIFR3aW5lIGdy
b3VwTmFtZSk7Ckxpc3Q8aW50PiBTRV9WZXJ0c0luR3JvdXAoU2hhcGUgKnNoYXBlLCBUd2luZSBn
cm91cE5hbWUpOwpMaXN0IDxpbnQ+IFNFX1ZlcnRzSW5WZXJ0R3JvdXAoU2hhcGUgKnNoYXBlLCBU
d2luZSBuYW1lKTsKTGlzdDxpbnQ+IFNFX0ZpcnN0VmVydHNJbkdyb3VwKFNoYXBlICpzaGFwZSwg
VHdpbmUgZ3JvdXBOYW1lLCBpbnQgbkFuY2hvcik7CgoKCgogCiMgMTQgImgvbnJoeV90ZW1wbGF0
ZU1hdGNoLmMiIDIKCgoKCgojIDEgImgvbnJoeV9jbGFzc0lua3kuaCIgMQogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKIAoKIAoKIyAxICJoL05SSFlfY2hhbk9w
LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9nKystMi9tYXAiIDEgMwog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLTIvc3Rs
X3RyZWUuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiAgCgp0eXBlZGVmIGJvb2wgX19yYl90cmVlX2NvbG9yX3R5cGU7
CmNvbnN0IF9fcmJfdHJlZV9jb2xvcl90eXBlIF9fcmJfdHJlZV9yZWQgPSBmYWxzZTsKY29uc3Qg
X19yYl90cmVlX2NvbG9yX3R5cGUgX19yYl90cmVlX2JsYWNrID0gdHJ1ZTsKCnN0cnVjdCBfX3Ji
X3RyZWVfbm9kZV9iYXNlCnsKICB0eXBlZGVmIF9fcmJfdHJlZV9jb2xvcl90eXBlIGNvbG9yX3R5
cGU7CiAgdHlwZWRlZiBfX3JiX3RyZWVfbm9kZV9iYXNlKiBiYXNlX3B0cjsKCiAgY29sb3JfdHlw
ZSBjb2xvcjsgCiAgYmFzZV9wdHIgcGFyZW50OwogIGJhc2VfcHRyIGxlZnQ7CiAgYmFzZV9wdHIg
cmlnaHQ7CgogIHN0YXRpYyBiYXNlX3B0ciBtaW5pbXVtKGJhc2VfcHRyIHgpCiAgewogICAgd2hp
bGUgKHgtPmxlZnQgIT0gMCkgeCA9IHgtPmxlZnQ7CiAgICByZXR1cm4geDsKICB9CgogIHN0YXRp
YyBiYXNlX3B0ciBtYXhpbXVtKGJhc2VfcHRyIHgpCiAgewogICAgd2hpbGUgKHgtPnJpZ2h0ICE9
IDApIHggPSB4LT5yaWdodDsKICAgIHJldHVybiB4OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBW
YWx1ZT4Kc3RydWN0IF9fcmJfdHJlZV9ub2RlIDogcHVibGljIF9fcmJfdHJlZV9ub2RlX2Jhc2UK
ewogIHR5cGVkZWYgX19yYl90cmVlX25vZGU8VmFsdWU+KiBsaW5rX3R5cGU7CiAgVmFsdWUgdmFs
dWVfZmllbGQ7Cn07CgoKc3RydWN0IF9fcmJfdHJlZV9iYXNlX2l0ZXJhdG9yCnsKICB0eXBlZGVm
IF9fcmJfdHJlZV9ub2RlX2Jhc2U6OmJhc2VfcHRyIGJhc2VfcHRyOwogIHR5cGVkZWYgYmlkaXJl
Y3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBwdHJkaWZm
X3QgZGlmZmVyZW5jZV90eXBlOwogIGJhc2VfcHRyIG5vZGU7CgogIHZvaWQgaW5jcmVtZW50KCkK
ICB7CiAgICBpZiAobm9kZS0+cmlnaHQgIT0gMCkgewogICAgICBub2RlID0gbm9kZS0+cmlnaHQ7
CiAgICAgIHdoaWxlIChub2RlLT5sZWZ0ICE9IDApCiAgICAgICAgbm9kZSA9IG5vZGUtPmxlZnQ7
CiAgICB9CiAgICBlbHNlIHsKICAgICAgYmFzZV9wdHIgeSA9IG5vZGUtPnBhcmVudDsKICAgICAg
d2hpbGUgKG5vZGUgPT0geS0+cmlnaHQpIHsKICAgICAgICBub2RlID0geTsKICAgICAgICB5ID0g
eS0+cGFyZW50OwogICAgICB9CiAgICAgIGlmIChub2RlLT5yaWdodCAhPSB5KQogICAgICAgIG5v
ZGUgPSB5OwogICAgfQogIH0KCiAgdm9pZCBkZWNyZW1lbnQoKQogIHsKICAgIGlmIChub2RlLT5j
b2xvciA9PSBfX3JiX3RyZWVfcmVkICYmCiAgICAgICAgbm9kZS0+cGFyZW50LT5wYXJlbnQgPT0g
bm9kZSkKICAgICAgbm9kZSA9IG5vZGUtPnJpZ2h0OwogICAgZWxzZSBpZiAobm9kZS0+bGVmdCAh
PSAwKSB7CiAgICAgIGJhc2VfcHRyIHkgPSBub2RlLT5sZWZ0OwogICAgICB3aGlsZSAoeS0+cmln
aHQgIT0gMCkKICAgICAgICB5ID0geS0+cmlnaHQ7CiAgICAgIG5vZGUgPSB5OwogICAgfQogICAg
ZWxzZSB7CiAgICAgIGJhc2VfcHRyIHkgPSBub2RlLT5wYXJlbnQ7CiAgICAgIHdoaWxlIChub2Rl
ID09IHktPmxlZnQpIHsKICAgICAgICBub2RlID0geTsKICAgICAgICB5ID0geS0+cGFyZW50Owog
ICAgICB9CiAgICAgIG5vZGUgPSB5OwogICAgfQogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBWYWx1
ZSwgY2xhc3MgUmVmLCBjbGFzcyBQdHI+CnN0cnVjdCBfX3JiX3RyZWVfaXRlcmF0b3IgOiBwdWJs
aWMgX19yYl90cmVlX2Jhc2VfaXRlcmF0b3IKewogIHR5cGVkZWYgVmFsdWUgdmFsdWVfdHlwZTsK
ICB0eXBlZGVmIFJlZiByZWZlcmVuY2U7CiAgdHlwZWRlZiBQdHIgcG9pbnRlcjsKICB0eXBlZGVm
IF9fcmJfdHJlZV9pdGVyYXRvcjxWYWx1ZSwgVmFsdWUmLCBWYWx1ZSo+ICAgICAgICAgICAgIGl0
ZXJhdG9yOwogIHR5cGVkZWYgX19yYl90cmVlX2l0ZXJhdG9yPFZhbHVlLCBjb25zdCBWYWx1ZSYs
IGNvbnN0IFZhbHVlKj4gY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiBfX3JiX3RyZWVfaXRlcmF0
b3I8VmFsdWUsIFJlZiwgUHRyPiAgICAgICAgICAgICAgICAgICBzZWxmOwogIHR5cGVkZWYgX19y
Yl90cmVlX25vZGU8VmFsdWU+KiBsaW5rX3R5cGU7CgogIF9fcmJfdHJlZV9pdGVyYXRvcigpIHt9
CiAgX19yYl90cmVlX2l0ZXJhdG9yKGxpbmtfdHlwZSB4KSB7IG5vZGUgPSB4OyB9CiAgX19yYl90
cmVlX2l0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJiBpdCkgeyBub2RlID0gaXQubm9kZTsgfQoKICBy
ZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbGlua190eXBlKG5vZGUpLT52YWx1
ZV9maWVsZDsgfQoKICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJh
dG9yKigpKTsgfQoKCiAgc2VsZiYgb3BlcmF0b3IrKygpIHsgaW5jcmVtZW50KCk7IHJldHVybiAq
dGhpczsgfQogIHNlbGYgb3BlcmF0b3IrKyhpbnQpIHsKICAgIHNlbGYgdG1wID0gKnRoaXM7CiAg
ICBpbmNyZW1lbnQoKTsKICAgIHJldHVybiB0bXA7CiAgfQogICAgCiAgc2VsZiYgb3BlcmF0b3It
LSgpIHsgZGVjcmVtZW50KCk7IHJldHVybiAqdGhpczsgfQogIHNlbGYgb3BlcmF0b3ItLShpbnQp
IHsKICAgIHNlbGYgdG1wID0gKnRoaXM7CiAgICBkZWNyZW1lbnQoKTsKICAgIHJldHVybiB0bXA7
CiAgfQp9OwoKaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX3JiX3RyZWVfYmFzZV9pdGVy
YXRvciYgeCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX3JiX3RyZWVfYmFzZV9pdGVy
YXRvciYgeSkgewogIHJldHVybiB4Lm5vZGUgPT0geS5ub2RlOwp9CgppbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IF9fcmJfdHJlZV9iYXNlX2l0ZXJhdG9yJiB4LAogICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IF9fcmJfdHJlZV9iYXNlX2l0ZXJhdG9yJiB5KSB7CiAgcmV0dXJuIHgubm9k
ZSAhPSB5Lm5vZGU7Cn0KCiMgMjA3ICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX3RyZWUuaCIgMwoK
CmlubGluZSB2b2lkIApfX3JiX3RyZWVfcm90YXRlX2xlZnQoX19yYl90cmVlX25vZGVfYmFzZSog
eCwgX19yYl90cmVlX25vZGVfYmFzZSomIHJvb3QpCnsKICBfX3JiX3RyZWVfbm9kZV9iYXNlKiB5
ID0geC0+cmlnaHQ7CiAgeC0+cmlnaHQgPSB5LT5sZWZ0OwogIGlmICh5LT5sZWZ0ICE9MCkKICAg
IHktPmxlZnQtPnBhcmVudCA9IHg7CiAgeS0+cGFyZW50ID0geC0+cGFyZW50OwoKICBpZiAoeCA9
PSByb290KQogICAgcm9vdCA9IHk7CiAgZWxzZSBpZiAoeCA9PSB4LT5wYXJlbnQtPmxlZnQpCiAg
ICB4LT5wYXJlbnQtPmxlZnQgPSB5OwogIGVsc2UKICAgIHgtPnBhcmVudC0+cmlnaHQgPSB5Owog
IHktPmxlZnQgPSB4OwogIHgtPnBhcmVudCA9IHk7Cn0KCmlubGluZSB2b2lkIApfX3JiX3RyZWVf
cm90YXRlX3JpZ2h0KF9fcmJfdHJlZV9ub2RlX2Jhc2UqIHgsIF9fcmJfdHJlZV9ub2RlX2Jhc2Uq
JiByb290KQp7CiAgX19yYl90cmVlX25vZGVfYmFzZSogeSA9IHgtPmxlZnQ7CiAgeC0+bGVmdCA9
IHktPnJpZ2h0OwogIGlmICh5LT5yaWdodCAhPSAwKQogICAgeS0+cmlnaHQtPnBhcmVudCA9IHg7
CiAgeS0+cGFyZW50ID0geC0+cGFyZW50OwoKICBpZiAoeCA9PSByb290KQogICAgcm9vdCA9IHk7
CiAgZWxzZSBpZiAoeCA9PSB4LT5wYXJlbnQtPnJpZ2h0KQogICAgeC0+cGFyZW50LT5yaWdodCA9
IHk7CiAgZWxzZQogICAgeC0+cGFyZW50LT5sZWZ0ID0geTsKICB5LT5yaWdodCA9IHg7CiAgeC0+
cGFyZW50ID0geTsKfQoKaW5saW5lIHZvaWQgCl9fcmJfdHJlZV9yZWJhbGFuY2UoX19yYl90cmVl
X25vZGVfYmFzZSogeCwgX19yYl90cmVlX25vZGVfYmFzZSomIHJvb3QpCnsKICB4LT5jb2xvciA9
IF9fcmJfdHJlZV9yZWQ7CiAgd2hpbGUgKHggIT0gcm9vdCAmJiB4LT5wYXJlbnQtPmNvbG9yID09
IF9fcmJfdHJlZV9yZWQpIHsKICAgIGlmICh4LT5wYXJlbnQgPT0geC0+cGFyZW50LT5wYXJlbnQt
PmxlZnQpIHsKICAgICAgX19yYl90cmVlX25vZGVfYmFzZSogeSA9IHgtPnBhcmVudC0+cGFyZW50
LT5yaWdodDsKICAgICAgaWYgKHkgJiYgeS0+Y29sb3IgPT0gX19yYl90cmVlX3JlZCkgewogICAg
ICAgIHgtPnBhcmVudC0+Y29sb3IgPSBfX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgeS0+Y29sb3Ig
PSBfX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgeC0+cGFyZW50LT5wYXJlbnQtPmNvbG9yID0gX19y
Yl90cmVlX3JlZDsKICAgICAgICB4ID0geC0+cGFyZW50LT5wYXJlbnQ7CiAgICAgIH0KICAgICAg
ZWxzZSB7CiAgICAgICAgaWYgKHggPT0geC0+cGFyZW50LT5yaWdodCkgewogICAgICAgICAgeCA9
IHgtPnBhcmVudDsKICAgICAgICAgIF9fcmJfdHJlZV9yb3RhdGVfbGVmdCh4LCByb290KTsKICAg
ICAgICB9CiAgICAgICAgeC0+cGFyZW50LT5jb2xvciA9IF9fcmJfdHJlZV9ibGFjazsKICAgICAg
ICB4LT5wYXJlbnQtPnBhcmVudC0+Y29sb3IgPSBfX3JiX3RyZWVfcmVkOwogICAgICAgIF9fcmJf
dHJlZV9yb3RhdGVfcmlnaHQoeC0+cGFyZW50LT5wYXJlbnQsIHJvb3QpOwogICAgICB9CiAgICB9
CiAgICBlbHNlIHsKICAgICAgX19yYl90cmVlX25vZGVfYmFzZSogeSA9IHgtPnBhcmVudC0+cGFy
ZW50LT5sZWZ0OwogICAgICBpZiAoeSAmJiB5LT5jb2xvciA9PSBfX3JiX3RyZWVfcmVkKSB7CiAg
ICAgICAgeC0+cGFyZW50LT5jb2xvciA9IF9fcmJfdHJlZV9ibGFjazsKICAgICAgICB5LT5jb2xv
ciA9IF9fcmJfdHJlZV9ibGFjazsKICAgICAgICB4LT5wYXJlbnQtPnBhcmVudC0+Y29sb3IgPSBf
X3JiX3RyZWVfcmVkOwogICAgICAgIHggPSB4LT5wYXJlbnQtPnBhcmVudDsKICAgICAgfQogICAg
ICBlbHNlIHsKICAgICAgICBpZiAoeCA9PSB4LT5wYXJlbnQtPmxlZnQpIHsKICAgICAgICAgIHgg
PSB4LT5wYXJlbnQ7CiAgICAgICAgICBfX3JiX3RyZWVfcm90YXRlX3JpZ2h0KHgsIHJvb3QpOwog
ICAgICAgIH0KICAgICAgICB4LT5wYXJlbnQtPmNvbG9yID0gX19yYl90cmVlX2JsYWNrOwogICAg
ICAgIHgtPnBhcmVudC0+cGFyZW50LT5jb2xvciA9IF9fcmJfdHJlZV9yZWQ7CiAgICAgICAgX19y
Yl90cmVlX3JvdGF0ZV9sZWZ0KHgtPnBhcmVudC0+cGFyZW50LCByb290KTsKICAgICAgfQogICAg
fQogIH0KICByb290LT5jb2xvciA9IF9fcmJfdHJlZV9ibGFjazsKfQoKaW5saW5lIF9fcmJfdHJl
ZV9ub2RlX2Jhc2UqCl9fcmJfdHJlZV9yZWJhbGFuY2VfZm9yX2VyYXNlKF9fcmJfdHJlZV9ub2Rl
X2Jhc2UqIHosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmJfdHJlZV9ub2RlX2Jh
c2UqJiByb290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3JiX3RyZWVfbm9kZV9i
YXNlKiYgbGVmdG1vc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmJfdHJlZV9u
b2RlX2Jhc2UqJiByaWdodG1vc3QpCnsKICBfX3JiX3RyZWVfbm9kZV9iYXNlKiB5ID0gejsKICBf
X3JiX3RyZWVfbm9kZV9iYXNlKiB4ID0gMDsKICBfX3JiX3RyZWVfbm9kZV9iYXNlKiB4X3BhcmVu
dCA9IDA7CiAgaWYgKHktPmxlZnQgPT0gMCkgICAgICAgICAgICAgIAogICAgeCA9IHktPnJpZ2h0
OyAgICAgICAgICAgICAgICAKICBlbHNlCiAgICBpZiAoeS0+cmlnaHQgPT0gMCkgICAgICAgICAg
IAogICAgICB4ID0geS0+bGVmdDsgICAgICAgICAgICAgICAKICAgIGVsc2UgeyAgICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgIHkgPSB5LT5yaWdodDsgICAgICAgICAgICAgIAogICAgICB3aGls
ZSAoeS0+bGVmdCAhPSAwKQogICAgICAgIHkgPSB5LT5sZWZ0OwogICAgICB4ID0geS0+cmlnaHQ7
CiAgICB9CiAgaWYgKHkgIT0geikgeyAgICAgICAgICAgICAgICAgIAogICAgei0+bGVmdC0+cGFy
ZW50ID0geTsgCiAgICB5LT5sZWZ0ID0gei0+bGVmdDsKICAgIGlmICh5ICE9IHotPnJpZ2h0KSB7
CiAgICAgIHhfcGFyZW50ID0geS0+cGFyZW50OwogICAgICBpZiAoeCkgeC0+cGFyZW50ID0geS0+
cGFyZW50OwogICAgICB5LT5wYXJlbnQtPmxlZnQgPSB4OyAgICAgICAKICAgICAgeS0+cmlnaHQg
PSB6LT5yaWdodDsKICAgICAgei0+cmlnaHQtPnBhcmVudCA9IHk7CiAgICB9CiAgICBlbHNlCiAg
ICAgIHhfcGFyZW50ID0geTsgIAogICAgaWYgKHJvb3QgPT0geikKICAgICAgcm9vdCA9IHk7CiAg
ICBlbHNlIGlmICh6LT5wYXJlbnQtPmxlZnQgPT0geikKICAgICAgei0+cGFyZW50LT5sZWZ0ID0g
eTsKICAgIGVsc2UgCiAgICAgIHotPnBhcmVudC0+cmlnaHQgPSB5OwogICAgeS0+cGFyZW50ID0g
ei0+cGFyZW50OwogICAgIDo6c3dhcCh5LT5jb2xvciwgei0+Y29sb3IpOwogICAgeSA9IHo7CiAg
ICAgCiAgfQogIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIHhfcGFyZW50ID0g
eS0+cGFyZW50OwogICAgaWYgKHgpIHgtPnBhcmVudCA9IHktPnBhcmVudDsgICAKICAgIGlmIChy
b290ID09IHopCiAgICAgIHJvb3QgPSB4OwogICAgZWxzZSAKICAgICAgaWYgKHotPnBhcmVudC0+
bGVmdCA9PSB6KQogICAgICAgIHotPnBhcmVudC0+bGVmdCA9IHg7CiAgICAgIGVsc2UKICAgICAg
ICB6LT5wYXJlbnQtPnJpZ2h0ID0geDsKICAgIGlmIChsZWZ0bW9zdCA9PSB6KSAKICAgICAgaWYg
KHotPnJpZ2h0ID09IDApICAgICAgICAgCiAgICAgICAgbGVmdG1vc3QgPSB6LT5wYXJlbnQ7CiAg
ICAgCiAgICAgIGVsc2UKICAgICAgICBsZWZ0bW9zdCA9IF9fcmJfdHJlZV9ub2RlX2Jhc2U6Om1p
bmltdW0oeCk7CiAgICBpZiAocmlnaHRtb3N0ID09IHopICAKICAgICAgaWYgKHotPmxlZnQgPT0g
MCkgICAgICAgICAgCiAgICAgICAgcmlnaHRtb3N0ID0gei0+cGFyZW50OyAgCiAgICAgCiAgICAg
IGVsc2UgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgIHJpZ2h0bW9zdCA9IF9fcmJfdHJl
ZV9ub2RlX2Jhc2U6Om1heGltdW0oeCk7CiAgfQogIGlmICh5LT5jb2xvciAhPSBfX3JiX3RyZWVf
cmVkKSB7IAogICAgd2hpbGUgKHggIT0gcm9vdCAmJiAoeCA9PSAwIHx8IHgtPmNvbG9yID09IF9f
cmJfdHJlZV9ibGFjaykpCiAgICAgIGlmICh4ID09IHhfcGFyZW50LT5sZWZ0KSB7CiAgICAgICAg
X19yYl90cmVlX25vZGVfYmFzZSogdyA9IHhfcGFyZW50LT5yaWdodDsKICAgICAgICBpZiAody0+
Y29sb3IgPT0gX19yYl90cmVlX3JlZCkgewogICAgICAgICAgdy0+Y29sb3IgPSBfX3JiX3RyZWVf
YmxhY2s7CiAgICAgICAgICB4X3BhcmVudC0+Y29sb3IgPSBfX3JiX3RyZWVfcmVkOwogICAgICAg
ICAgX19yYl90cmVlX3JvdGF0ZV9sZWZ0KHhfcGFyZW50LCByb290KTsKICAgICAgICAgIHcgPSB4
X3BhcmVudC0+cmlnaHQ7CiAgICAgICAgfQogICAgICAgIGlmICgody0+bGVmdCA9PSAwIHx8IHct
PmxlZnQtPmNvbG9yID09IF9fcmJfdHJlZV9ibGFjaykgJiYKICAgICAgICAgICAgKHctPnJpZ2h0
ID09IDAgfHwgdy0+cmlnaHQtPmNvbG9yID09IF9fcmJfdHJlZV9ibGFjaykpIHsKICAgICAgICAg
IHctPmNvbG9yID0gX19yYl90cmVlX3JlZDsKICAgICAgICAgIHggPSB4X3BhcmVudDsKICAgICAg
ICAgIHhfcGFyZW50ID0geF9wYXJlbnQtPnBhcmVudDsKICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgaWYgKHctPnJpZ2h0ID09IDAgfHwgdy0+cmlnaHQtPmNvbG9yID09IF9fcmJfdHJlZV9ibGFj
aykgewogICAgICAgICAgICBpZiAody0+bGVmdCkgdy0+bGVmdC0+Y29sb3IgPSBfX3JiX3RyZWVf
YmxhY2s7CiAgICAgICAgICAgIHctPmNvbG9yID0gX19yYl90cmVlX3JlZDsKICAgICAgICAgICAg
X19yYl90cmVlX3JvdGF0ZV9yaWdodCh3LCByb290KTsKICAgICAgICAgICAgdyA9IHhfcGFyZW50
LT5yaWdodDsKICAgICAgICAgIH0KICAgICAgICAgIHctPmNvbG9yID0geF9wYXJlbnQtPmNvbG9y
OwogICAgICAgICAgeF9wYXJlbnQtPmNvbG9yID0gX19yYl90cmVlX2JsYWNrOwogICAgICAgICAg
aWYgKHctPnJpZ2h0KSB3LT5yaWdodC0+Y29sb3IgPSBfX3JiX3RyZWVfYmxhY2s7CiAgICAgICAg
ICBfX3JiX3RyZWVfcm90YXRlX2xlZnQoeF9wYXJlbnQsIHJvb3QpOwogICAgICAgICAgYnJlYWs7
CiAgICAgICAgfQogICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAKICAgICAgICBfX3Ji
X3RyZWVfbm9kZV9iYXNlKiB3ID0geF9wYXJlbnQtPmxlZnQ7CiAgICAgICAgaWYgKHctPmNvbG9y
ID09IF9fcmJfdHJlZV9yZWQpIHsKICAgICAgICAgIHctPmNvbG9yID0gX19yYl90cmVlX2JsYWNr
OwogICAgICAgICAgeF9wYXJlbnQtPmNvbG9yID0gX19yYl90cmVlX3JlZDsKICAgICAgICAgIF9f
cmJfdHJlZV9yb3RhdGVfcmlnaHQoeF9wYXJlbnQsIHJvb3QpOwogICAgICAgICAgdyA9IHhfcGFy
ZW50LT5sZWZ0OwogICAgICAgIH0KICAgICAgICBpZiAoKHctPnJpZ2h0ID09IDAgfHwgdy0+cmln
aHQtPmNvbG9yID09IF9fcmJfdHJlZV9ibGFjaykgJiYKICAgICAgICAgICAgKHctPmxlZnQgPT0g
MCB8fCB3LT5sZWZ0LT5jb2xvciA9PSBfX3JiX3RyZWVfYmxhY2spKSB7CiAgICAgICAgICB3LT5j
b2xvciA9IF9fcmJfdHJlZV9yZWQ7CiAgICAgICAgICB4ID0geF9wYXJlbnQ7CiAgICAgICAgICB4
X3BhcmVudCA9IHhfcGFyZW50LT5wYXJlbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlm
ICh3LT5sZWZ0ID09IDAgfHwgdy0+bGVmdC0+Y29sb3IgPT0gX19yYl90cmVlX2JsYWNrKSB7CiAg
ICAgICAgICAgIGlmICh3LT5yaWdodCkgdy0+cmlnaHQtPmNvbG9yID0gX19yYl90cmVlX2JsYWNr
OwogICAgICAgICAgICB3LT5jb2xvciA9IF9fcmJfdHJlZV9yZWQ7CiAgICAgICAgICAgIF9fcmJf
dHJlZV9yb3RhdGVfbGVmdCh3LCByb290KTsKICAgICAgICAgICAgdyA9IHhfcGFyZW50LT5sZWZ0
OwogICAgICAgICAgfQogICAgICAgICAgdy0+Y29sb3IgPSB4X3BhcmVudC0+Y29sb3I7CiAgICAg
ICAgICB4X3BhcmVudC0+Y29sb3IgPSBfX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBpZiAody0+
bGVmdCkgdy0+bGVmdC0+Y29sb3IgPSBfX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfX3JiX3Ry
ZWVfcm90YXRlX3JpZ2h0KHhfcGFyZW50LCByb290KTsKICAgICAgICAgIGJyZWFrOwogICAgICAg
IH0KICAgICAgfQogICAgaWYgKHgpIHgtPmNvbG9yID0gX19yYl90cmVlX2JsYWNrOwogIH0KICBy
ZXR1cm4geTsKfQoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVmFsdWUsIGNsYXNzIEtleU9m
VmFsdWUsIGNsYXNzIENvbXBhcmUsCiAgICAgICAgICBjbGFzcyBBbGxvYyA9IGFsbG9jPgpjbGFz
cyByYl90cmVlIHsKcHJvdGVjdGVkOgogIHR5cGVkZWYgdm9pZCogdm9pZF9wb2ludGVyOwogIHR5
cGVkZWYgX19yYl90cmVlX25vZGVfYmFzZSogYmFzZV9wdHI7CiAgdHlwZWRlZiBfX3JiX3RyZWVf
bm9kZTxWYWx1ZT4gcmJfdHJlZV9ub2RlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPHJiX3RyZWVf
bm9kZSwgQWxsb2M+IHJiX3RyZWVfbm9kZV9hbGxvY2F0b3I7CiAgdHlwZWRlZiBfX3JiX3RyZWVf
Y29sb3JfdHlwZSBjb2xvcl90eXBlOwpwdWJsaWM6CiAgdHlwZWRlZiBLZXkga2V5X3R5cGU7CiAg
dHlwZWRlZiBWYWx1ZSB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsK
ICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2YWx1
ZV90eXBlJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZl
cmVuY2U7CiAgdHlwZWRlZiByYl90cmVlX25vZGUqIGxpbmtfdHlwZTsKICB0eXBlZGVmIHNpemVf
dCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwpwcm90ZWN0
ZWQ6CiAgbGlua190eXBlIGdldF9ub2RlKCkgeyByZXR1cm4gcmJfdHJlZV9ub2RlX2FsbG9jYXRv
cjo6YWxsb2NhdGUoKTsgfQogIHZvaWQgcHV0X25vZGUobGlua190eXBlIHApIHsgcmJfdHJlZV9u
b2RlX2FsbG9jYXRvcjo6ZGVhbGxvY2F0ZShwKTsgfQoKICBsaW5rX3R5cGUgY3JlYXRlX25vZGUo
Y29uc3QgdmFsdWVfdHlwZSYgeCkgewogICAgbGlua190eXBlIHRtcCA9IGdldF9ub2RlKCk7CiAg
ICB0cnkgIHsKICAgICAgY29uc3RydWN0KCZ0bXAtPnZhbHVlX2ZpZWxkLCB4KTsKICAgIH0KICAg
IGNhdGNoKC4uLikgeyAgcHV0X25vZGUodG1wKSA7IHRocm93OyB9IDsKICAgIHJldHVybiB0bXA7
CiAgfQoKICBsaW5rX3R5cGUgY2xvbmVfbm9kZShsaW5rX3R5cGUgeCkgewogICAgbGlua190eXBl
IHRtcCA9IGNyZWF0ZV9ub2RlKHgtPnZhbHVlX2ZpZWxkKTsKICAgIHRtcC0+Y29sb3IgPSB4LT5j
b2xvcjsKICAgIHRtcC0+bGVmdCA9IDA7CiAgICB0bXAtPnJpZ2h0ID0gMDsKICAgIHJldHVybiB0
bXA7CiAgfQoKICB2b2lkIGRlc3Ryb3lfbm9kZShsaW5rX3R5cGUgcCkgewogICAgZGVzdHJveSgm
cC0+dmFsdWVfZmllbGQpOwogICAgcHV0X25vZGUocCk7CiAgfQoKcHJvdGVjdGVkOgogIHNpemVf
dHlwZSBub2RlX2NvdW50OyAgCiAgbGlua190eXBlIGhlYWRlcjsgIAogIENvbXBhcmUga2V5X2Nv
bXBhcmU7CgogIGxpbmtfdHlwZSYgcm9vdCgpIGNvbnN0IHsgcmV0dXJuIChsaW5rX3R5cGUmKSBo
ZWFkZXItPnBhcmVudDsgfQogIGxpbmtfdHlwZSYgbGVmdG1vc3QoKSBjb25zdCB7IHJldHVybiAo
bGlua190eXBlJikgaGVhZGVyLT5sZWZ0OyB9CiAgbGlua190eXBlJiByaWdodG1vc3QoKSBjb25z
dCB7IHJldHVybiAobGlua190eXBlJikgaGVhZGVyLT5yaWdodDsgfQoKICBzdGF0aWMgbGlua190
eXBlJiBsZWZ0KGxpbmtfdHlwZSB4KSB7IHJldHVybiAobGlua190eXBlJikoeC0+bGVmdCk7IH0K
ICBzdGF0aWMgbGlua190eXBlJiByaWdodChsaW5rX3R5cGUgeCkgeyByZXR1cm4gKGxpbmtfdHlw
ZSYpKHgtPnJpZ2h0KTsgfQogIHN0YXRpYyBsaW5rX3R5cGUmIHBhcmVudChsaW5rX3R5cGUgeCkg
eyByZXR1cm4gKGxpbmtfdHlwZSYpKHgtPnBhcmVudCk7IH0KICBzdGF0aWMgcmVmZXJlbmNlIHZh
bHVlKGxpbmtfdHlwZSB4KSB7IHJldHVybiB4LT52YWx1ZV9maWVsZDsgfQogIHN0YXRpYyBjb25z
dCBLZXkmIGtleShsaW5rX3R5cGUgeCkgeyByZXR1cm4gS2V5T2ZWYWx1ZSgpKHZhbHVlKHgpKTsg
fQogIHN0YXRpYyBjb2xvcl90eXBlJiBjb2xvcihsaW5rX3R5cGUgeCkgeyByZXR1cm4gKGNvbG9y
X3R5cGUmKSh4LT5jb2xvcik7IH0KCiAgc3RhdGljIGxpbmtfdHlwZSYgbGVmdChiYXNlX3B0ciB4
KSB7IHJldHVybiAobGlua190eXBlJikoeC0+bGVmdCk7IH0KICBzdGF0aWMgbGlua190eXBlJiBy
aWdodChiYXNlX3B0ciB4KSB7IHJldHVybiAobGlua190eXBlJikoeC0+cmlnaHQpOyB9CiAgc3Rh
dGljIGxpbmtfdHlwZSYgcGFyZW50KGJhc2VfcHRyIHgpIHsgcmV0dXJuIChsaW5rX3R5cGUmKSh4
LT5wYXJlbnQpOyB9CiAgc3RhdGljIHJlZmVyZW5jZSB2YWx1ZShiYXNlX3B0ciB4KSB7IHJldHVy
biAoKGxpbmtfdHlwZSl4KS0+dmFsdWVfZmllbGQ7IH0KICBzdGF0aWMgY29uc3QgS2V5JiBrZXko
YmFzZV9wdHIgeCkgeyByZXR1cm4gS2V5T2ZWYWx1ZSgpKHZhbHVlKGxpbmtfdHlwZSh4KSkpO30g
CiAgc3RhdGljIGNvbG9yX3R5cGUmIGNvbG9yKGJhc2VfcHRyIHgpIHsgcmV0dXJuIChjb2xvcl90
eXBlJikobGlua190eXBlKHgpLT5jb2xvcik7IH0KCiAgc3RhdGljIGxpbmtfdHlwZSBtaW5pbXVt
KGxpbmtfdHlwZSB4KSB7IAogICAgcmV0dXJuIChsaW5rX3R5cGUpICBfX3JiX3RyZWVfbm9kZV9i
YXNlOjptaW5pbXVtKHgpOwogIH0KICBzdGF0aWMgbGlua190eXBlIG1heGltdW0obGlua190eXBl
IHgpIHsKICAgIHJldHVybiAobGlua190eXBlKSBfX3JiX3RyZWVfbm9kZV9iYXNlOjptYXhpbXVt
KHgpOwogIH0KCnB1YmxpYzoKICB0eXBlZGVmIF9fcmJfdHJlZV9pdGVyYXRvcjx2YWx1ZV90eXBl
LCByZWZlcmVuY2UsIHBvaW50ZXI+IGl0ZXJhdG9yOwogIHR5cGVkZWYgX19yYl90cmVlX2l0ZXJh
dG9yPHZhbHVlX3R5cGUsIGNvbnN0X3JlZmVyZW5jZSwgY29uc3RfcG9pbnRlcj4gCiAgICAgICAg
ICBjb25zdF9pdGVyYXRvcjsKCgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVy
YXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8
aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgoKCgoKCgogCnByaXZhdGU6CiAgaXRlcmF0b3Ig
X19pbnNlcnQoYmFzZV9wdHIgeCwgYmFzZV9wdHIgeSwgY29uc3QgdmFsdWVfdHlwZSYgdik7CiAg
bGlua190eXBlIF9fY29weShsaW5rX3R5cGUgeCwgbGlua190eXBlIHApOwogIHZvaWQgX19lcmFz
ZShsaW5rX3R5cGUgeCk7CiAgdm9pZCBpbml0KCkgewogICAgaGVhZGVyID0gZ2V0X25vZGUoKTsK
ICAgIGNvbG9yKGhlYWRlcikgPSBfX3JiX3RyZWVfcmVkOyAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAogICAgcm9vdCgpID0gMDsKICAgIGxlZnRtb3N0KCkgPSBoZWFkZXI7
CiAgICByaWdodG1vc3QoKSA9IGhlYWRlcjsKICB9CnB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCiAgcmJfdHJlZShjb25zdCBDb21wYXJlJiBjb21wID0gQ29tcGFyZSgp
KQogICAgOiBub2RlX2NvdW50KDApLCBrZXlfY29tcGFyZShjb21wKSB7IGluaXQoKTsgfQoKICBy
Yl90cmVlKGNvbnN0IHJiX3RyZWU8S2V5LCBWYWx1ZSwgS2V5T2ZWYWx1ZSwgQ29tcGFyZSwgQWxs
b2M+JiB4KSAKICAgIDogbm9kZV9jb3VudCgwKSwga2V5X2NvbXBhcmUoeC5rZXlfY29tcGFyZSkK
ICB7IAogICAgaGVhZGVyID0gZ2V0X25vZGUoKTsKICAgIGNvbG9yKGhlYWRlcikgPSBfX3JiX3Ry
ZWVfcmVkOwogICAgaWYgKHgucm9vdCgpID09IDApIHsKICAgICAgcm9vdCgpID0gMDsKICAgICAg
bGVmdG1vc3QoKSA9IGhlYWRlcjsKICAgICAgcmlnaHRtb3N0KCkgPSBoZWFkZXI7CiAgICB9CiAg
ICBlbHNlIHsKICAgICAgdHJ5ICB7CiAgICAgICAgcm9vdCgpID0gX19jb3B5KHgucm9vdCgpLCBo
ZWFkZXIpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikgeyAgcHV0X25vZGUoaGVhZGVyKSA7IHRo
cm93OyB9IDsKICAgICAgbGVmdG1vc3QoKSA9IG1pbmltdW0ocm9vdCgpKTsKICAgICAgcmlnaHRt
b3N0KCkgPSBtYXhpbXVtKHJvb3QoKSk7CiAgICB9CiAgICBub2RlX2NvdW50ID0geC5ub2RlX2Nv
dW50OwogIH0KICB+cmJfdHJlZSgpIHsKICAgIGNsZWFyKCk7CiAgICBwdXRfbm9kZShoZWFkZXIp
OwogIH0KICByYl90cmVlPEtleSwgVmFsdWUsIEtleU9mVmFsdWUsIENvbXBhcmUsIEFsbG9jPiYg
CiAgb3BlcmF0b3I9KGNvbnN0IHJiX3RyZWU8S2V5LCBWYWx1ZSwgS2V5T2ZWYWx1ZSwgQ29tcGFy
ZSwgQWxsb2M+JiB4KTsKCnB1YmxpYzogICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAogIENvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBrZXlfY29tcGFyZTsgfQog
IGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbGVmdG1vc3QoKTsgfQogIGNvbnN0X2l0ZXJhdG9y
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbGVmdG1vc3QoKTsgfQogIGl0ZXJhdG9yIGVuZCgpIHsg
cmV0dXJuIGhlYWRlcjsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGhl
YWRlcjsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVy
YXRvcihlbmQoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsg
CiAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IAogIH0KICByZXZlcnNl
X2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAg
Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyAKICAgIHJldHVybiBjb25zdF9y
ZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOwogIH0gCiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG5vZGVfY291bnQgPT0gMDsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4g
bm9kZV9jb3VudDsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVf
dHlwZSgtMSk7IH0KCiAgdm9pZCBzd2FwKHJiX3RyZWU8S2V5LCBWYWx1ZSwgS2V5T2ZWYWx1ZSwg
Q29tcGFyZSwgQWxsb2M+JiB0KSB7CiAgICAgOjpzd2FwKGhlYWRlciwgdC5oZWFkZXIpOwogICAg
IDo6c3dhcChub2RlX2NvdW50LCB0Lm5vZGVfY291bnQpOwogICAgIDo6c3dhcChrZXlfY29tcGFy
ZSwgdC5rZXlfY29tcGFyZSk7CiAgfQogICAgCnB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCiAgcGFpcjxpdGVyYXRvcixib29sPiBpbnNlcnRfdW5pcXVlKGNvbnN0IHZh
bHVlX3R5cGUmIHgpOwogIGl0ZXJhdG9yIGluc2VydF9lcXVhbChjb25zdCB2YWx1ZV90eXBlJiB4
KTsKCiAgaXRlcmF0b3IgaW5zZXJ0X3VuaXF1ZShpdGVyYXRvciBwb3NpdGlvbiwgY29uc3QgdmFs
dWVfdHlwZSYgeCk7CiAgaXRlcmF0b3IgaW5zZXJ0X2VxdWFsKGl0ZXJhdG9yIHBvc2l0aW9uLCBj
b25zdCB2YWx1ZV90eXBlJiB4KTsKCgogIHRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yPgog
IHZvaWQgaW5zZXJ0X3VuaXF1ZShJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxh
c3QpOwogIHRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0X2VxdWFs
KElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCk7CgoKCgoKCgogIHZvaWQg
ZXJhc2UoaXRlcmF0b3IgcG9zaXRpb24pOwogIHNpemVfdHlwZSBlcmFzZShjb25zdCBrZXlfdHlw
ZSYgeCk7CiAgdm9pZCBlcmFzZShpdGVyYXRvciBmaXJzdCwgaXRlcmF0b3IgbGFzdCk7CiAgdm9p
ZCBlcmFzZShjb25zdCBrZXlfdHlwZSogZmlyc3QsIGNvbnN0IGtleV90eXBlKiBsYXN0KTsKICB2
b2lkIGNsZWFyKCkgewogICAgaWYgKG5vZGVfY291bnQgIT0gMCkgewogICAgICBfX2VyYXNlKHJv
b3QoKSk7CiAgICAgIGxlZnRtb3N0KCkgPSBoZWFkZXI7CiAgICAgIHJvb3QoKSA9IDA7CiAgICAg
IHJpZ2h0bW9zdCgpID0gaGVhZGVyOwogICAgICBub2RlX2NvdW50ID0gMDsKICAgIH0KICB9ICAg
ICAgCgpwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIGl0ZXJhdG9y
IGZpbmQoY29uc3Qga2V5X3R5cGUmIHgpOwogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qga2V5
X3R5cGUmIHgpIGNvbnN0OwogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgeCkgY29u
c3Q7CiAgaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIHgpOwogIGNvbnN0X2l0
ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiB4KSBjb25zdDsKICBpdGVyYXRvciB1
cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgeCk7CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91
bmQoY29uc3Qga2V5X3R5cGUmIHgpIGNvbnN0OwogIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVx
dWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiB4KTsKICBwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25z
dF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIHgpIGNvbnN0OwoKcHVibGlj
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBib29sIF9fcmJfdmVyaWZ5KCkg
Y29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBWYWx1ZSwgY2xhc3MgS2V5T2ZW
YWx1ZSwgY2xhc3MgQ29tcGFyZSwgY2xhc3MgQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgcmJfdHJlZTxLZXksIFZhbHVlLCBLZXlPZlZhbHVlLCBDb21wYXJlLCBBbGxvYz4mIHgs
IAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJiX3RyZWU8S2V5LCBWYWx1ZSwgS2V5T2ZW
YWx1ZSwgQ29tcGFyZSwgQWxsb2M+JiB5KSB7CiAgcmV0dXJuIHguc2l6ZSgpID09IHkuc2l6ZSgp
ICYmIGVxdWFsKHguYmVnaW4oKSwgeC5lbmQoKSwgeS5iZWdpbigpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIEtleSwgY2xhc3MgVmFsdWUsIGNsYXNzIEtleU9mVmFsdWUsIGNsYXNzIENvbXBhcmUsIGNs
YXNzIEFsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcmJfdHJlZTxLZXksIFZhbHVl
LCBLZXlPZlZhbHVlLCBDb21wYXJlLCBBbGxvYz4mIHgsIAogICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgcmJfdHJlZTxLZXksIFZhbHVlLCBLZXlPZlZhbHVlLCBDb21wYXJlLCBBbGxvYz4mIHkp
IHsKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoeC5iZWdpbigpLCB4LmVuZCgpLCB5
LmJlZ2luKCksIHkuZW5kKCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBLZXksIGNsYXNzIFZhbHVl
LCBjbGFzcyBLZXlPZlZhbHVlLCBjbGFzcyBDb21wYXJlLCBjbGFzcyBBbGxvYz4KaW5saW5lIHZv
aWQgc3dhcChyYl90cmVlPEtleSwgVmFsdWUsIEtleU9mVmFsdWUsIENvbXBhcmUsIEFsbG9jPiYg
eCwgCiAgICAgICAgICAgICAgICAgcmJfdHJlZTxLZXksIFZhbHVlLCBLZXlPZlZhbHVlLCBDb21w
YXJlLCBBbGxvYz4mIHkpIHsKICB4LnN3YXAoeSk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBLZXks
IGNsYXNzIFZhbHVlLCBjbGFzcyBLZXlPZlZhbHVlLCBjbGFzcyBDb21wYXJlLCBjbGFzcyBBbGxv
Yz4KcmJfdHJlZTxLZXksIFZhbHVlLCBLZXlPZlZhbHVlLCBDb21wYXJlLCBBbGxvYz4mIApyYl90
cmVlPEtleSwgVmFsdWUsIEtleU9mVmFsdWUsIENvbXBhcmUsIEFsbG9jPjo6Cm9wZXJhdG9yPShj
b25zdCByYl90cmVlPEtleSwgVmFsdWUsIEtleU9mVmFsdWUsIENvbXBhcmUsIEFsbG9jPiYgeCkg
ewogIGlmICh0aGlzICE9ICZ4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgY2xlYXIoKTsKICAgIG5vZGVfY291bnQgPSAwOwogICAga2V5X2NvbXBhcmUgPSB4LmtleV9j
b21wYXJlOyAgICAgICAgCiAgICBpZiAoeC5yb290KCkgPT0gMCkgewogICAgICByb290KCkgPSAw
OwogICAgICBsZWZ0bW9zdCgpID0gaGVhZGVyOwogICAgICByaWdodG1vc3QoKSA9IGhlYWRlcjsK
ICAgIH0KICAgIGVsc2UgewogICAgICByb290KCkgPSBfX2NvcHkoeC5yb290KCksIGhlYWRlcik7
CiAgICAgIGxlZnRtb3N0KCkgPSBtaW5pbXVtKHJvb3QoKSk7CiAgICAgIHJpZ2h0bW9zdCgpID0g
bWF4aW11bShyb290KCkpOwogICAgICBub2RlX2NvdW50ID0geC5ub2RlX2NvdW50OwogICAgfQog
IH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBLZXksIGNsYXNzIFZhbHVlLCBj
bGFzcyBLZXlPZlZhbHVlLCBjbGFzcyBDb21wYXJlLCBjbGFzcyBBbGxvYz4KdHlwZW5hbWUgcmJf
dHJlZTxLZXksIFZhbHVlLCBLZXlPZlZhbHVlLCBDb21wYXJlLCBBbGxvYz46Oml0ZXJhdG9yCnJi
X3RyZWU8S2V5LCBWYWx1ZSwgS2V5T2ZWYWx1ZSwgQ29tcGFyZSwgQWxsb2M+OjoKX19pbnNlcnQo
YmFzZV9wdHIgeF8sIGJhc2VfcHRyIHlfLCBjb25zdCBWYWx1ZSYgdikgewogIGxpbmtfdHlwZSB4
ID0gKGxpbmtfdHlwZSkgeF87CiAgbGlua190eXBlIHkgPSAobGlua190eXBlKSB5XzsKICBsaW5r
X3R5cGUgejsKCiAgaWYgKHkgPT0gaGVhZGVyIHx8IHggIT0gMCB8fCBrZXlfY29tcGFyZShLZXlP
ZlZhbHVlKCkodiksIGtleSh5KSkpIHsKICAgIHogPSBjcmVhdGVfbm9kZSh2KTsKICAgIGxlZnQo
eSkgPSB6OyAgICAgICAgICAgICAgICAgCiAgICBpZiAoeSA9PSBoZWFkZXIpIHsKICAgICAgcm9v
dCgpID0gejsKICAgICAgcmlnaHRtb3N0KCkgPSB6OwogICAgfQogICAgZWxzZSBpZiAoeSA9PSBs
ZWZ0bW9zdCgpKQogICAgICBsZWZ0bW9zdCgpID0gejsgICAgICAgICAgICAKICB9CiAgZWxzZSB7
CiAgICB6ID0gY3JlYXRlX25vZGUodik7CiAgICByaWdodCh5KSA9IHo7CiAgICBpZiAoeSA9PSBy
aWdodG1vc3QoKSkKICAgICAgcmlnaHRtb3N0KCkgPSB6OyAgICAgICAgICAgCiAgfQogIHBhcmVu
dCh6KSA9IHk7CiAgbGVmdCh6KSA9IDA7CiAgcmlnaHQoeikgPSAwOwogIF9fcmJfdHJlZV9yZWJh
bGFuY2UoeiwgaGVhZGVyLT5wYXJlbnQpOwogICsrbm9kZV9jb3VudDsKICByZXR1cm4gaXRlcmF0
b3Ioeik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBLZXksIGNsYXNzIFZhbHVlLCBjbGFzcyBLZXlPZlZh
bHVlLCBjbGFzcyBDb21wYXJlLCBjbGFzcyBBbGxvYz4KdHlwZW5hbWUgcmJfdHJlZTxLZXksIFZh
bHVlLCBLZXlPZlZhbHVlLCBDb21wYXJlLCBBbGxvYz46Oml0ZXJhdG9yCnJiX3RyZWU8S2V5LCBW
YWx1ZSwgS2V5T2ZWYWx1ZSwgQ29tcGFyZSwgQWxsb2M+OjppbnNlcnRfZXF1YWwoY29uc3QgVmFs
dWUmIHYpCnsKICBsaW5rX3R5cGUgeSA9IGhlYWRlcjsKICBsaW5rX3R5cGUgeCA9IHJvb3QoKTsK
ICB3aGlsZSAoeCAhPSAwKSB7CiAgICB5ID0geDsKICAgIHggPSBrZXlfY29tcGFyZShLZXlPZlZh
bHVlKCkodiksIGtleSh4KSkgPyBsZWZ0KHgpIDogcmlnaHQoeCk7CiAgfQogIHJldHVybiBfX2lu
c2VydCh4LCB5LCB2KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBLZXksIGNsYXNzIFZhbHVlLCBjbGFz
cyBLZXlPZlZhbHVlLCBjbGFzcyBDb21wYXJlLCBjbGFzcyBBbGxvYz4KcGFpcjx0eXBlbmFtZSBy
Yl90cmVlPEtleSwgVmFsdWUsIEtleU9mVmFsdWUsIENvbXBhcmUsIEFsbG9jPjo6aXRlcmF0b3Is
IGJvb2w+CnJiX3RyZWU8S2V5LCBWYWx1ZSwgS2V5T2ZWYWx1ZSwgQ29tcGFyZSwgQWxsb2M+Ojpp
bnNlcnRfdW5pcXVlKGNvbnN0IFZhbHVlJiB2KQp7CiAgbGlua190eXBlIHkgPSBoZWFkZXI7CiAg
bGlua190eXBlIHggPSByb290KCk7CiAgYm9vbCBjb21wID0gdHJ1ZTsKICB3aGlsZSAoeCAhPSAw
KSB7CiAgICB5ID0geDsKICAgIGNvbXAgPSBrZXlfY29tcGFyZShLZXlPZlZhbHVlKCkodiksIGtl
eSh4KSk7CiAgICB4ID0gY29tcCA/IGxlZnQoeCkgOiByaWdodCh4KTsKICB9CiAgaXRlcmF0b3Ig
aiA9IGl0ZXJhdG9yKHkpOyAgIAogIGlmIChjb21wKQogICAgaWYgKGogPT0gYmVnaW4oKSkgICAg
IAogICAgICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihfX2luc2VydCh4LCB5LCB2KSwgdHJ1
ZSk7CiAgICBlbHNlCiAgICAgIC0tajsKICBpZiAoa2V5X2NvbXBhcmUoa2V5KGoubm9kZSksIEtl
eU9mVmFsdWUoKSh2KSkpCiAgICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihfX2luc2VydCh4
LCB5LCB2KSwgdHJ1ZSk7CiAgcmV0dXJuIHBhaXI8aXRlcmF0b3IsYm9vbD4oaiwgZmFsc2UpOwp9
CgoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVmFsLCBjbGFzcyBLZXlPZlZhbHVlLCBjbGFz
cyBDb21wYXJlLCBjbGFzcyBBbGxvYz4KdHlwZW5hbWUgcmJfdHJlZTxLZXksIFZhbCwgS2V5T2ZW
YWx1ZSwgQ29tcGFyZSwgQWxsb2M+OjppdGVyYXRvciAKcmJfdHJlZTxLZXksIFZhbCwgS2V5T2ZW
YWx1ZSwgQ29tcGFyZSwgQWxsb2M+OjppbnNlcnRfdW5pcXVlKGl0ZXJhdG9yIHBvc2l0aW9uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVmFsJiB2KSB7CiAgaWYgKHBvc2l0aW9uLm5vZGUgPT0gaGVhZGVyLT5sZWZ0KSAg
CiAgICBpZiAoc2l6ZSgpID4gMCAmJiBrZXlfY29tcGFyZShLZXlPZlZhbHVlKCkodiksIGtleShw
b3NpdGlvbi5ub2RlKSkpCiAgICAgIHJldHVybiBfX2luc2VydChwb3NpdGlvbi5ub2RlLCBwb3Np
dGlvbi5ub2RlLCB2KTsKICAgCiAgICBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKHYp
LmZpcnN0OwogIGVsc2UgaWYgKHBvc2l0aW9uLm5vZGUgPT0gaGVhZGVyKSAgCiAgICBpZiAoa2V5
X2NvbXBhcmUoa2V5KHJpZ2h0bW9zdCgpKSwgS2V5T2ZWYWx1ZSgpKHYpKSkKICAgICAgcmV0dXJu
IF9faW5zZXJ0KDAsIHJpZ2h0bW9zdCgpLCB2KTsKICAgIGVsc2UKICAgICAgcmV0dXJuIGluc2Vy
dF91bmlxdWUodikuZmlyc3Q7CiAgZWxzZSB7CiAgICBpdGVyYXRvciBiZWZvcmUgPSBwb3NpdGlv
bjsKICAgIC0tYmVmb3JlOwogICAgaWYgKGtleV9jb21wYXJlKGtleShiZWZvcmUubm9kZSksIEtl
eU9mVmFsdWUoKSh2KSkKICAgICAgICAmJiBrZXlfY29tcGFyZShLZXlPZlZhbHVlKCkodiksIGtl
eShwb3NpdGlvbi5ub2RlKSkpCiAgICAgIGlmIChyaWdodChiZWZvcmUubm9kZSkgPT0gMCkKICAg
ICAgICByZXR1cm4gX19pbnNlcnQoMCwgYmVmb3JlLm5vZGUsIHYpOyAKICAgICAgZWxzZQogICAg
ICAgIHJldHVybiBfX2luc2VydChwb3NpdGlvbi5ub2RlLCBwb3NpdGlvbi5ub2RlLCB2KTsKICAg
ICAKICAgIGVsc2UKICAgICAgcmV0dXJuIGluc2VydF91bmlxdWUodikuZmlyc3Q7CiAgfQp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBWYWwsIGNsYXNzIEtleU9mVmFsdWUsIGNsYXNzIENv
bXBhcmUsIGNsYXNzIEFsbG9jPgp0eXBlbmFtZSByYl90cmVlPEtleSwgVmFsLCBLZXlPZlZhbHVl
LCBDb21wYXJlLCBBbGxvYz46Oml0ZXJhdG9yIApyYl90cmVlPEtleSwgVmFsLCBLZXlPZlZhbHVl
LCBDb21wYXJlLCBBbGxvYz46Omluc2VydF9lcXVhbChpdGVyYXRvciBwb3NpdGlvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVmFsJiB2KSB7CiAgaWYgKHBvc2l0aW9uLm5vZGUgPT0gaGVhZGVyLT5sZWZ0KSAgCiAgICBp
ZiAoc2l6ZSgpID4gMCAmJiBrZXlfY29tcGFyZShLZXlPZlZhbHVlKCkodiksIGtleShwb3NpdGlv
bi5ub2RlKSkpCiAgICAgIHJldHVybiBfX2luc2VydChwb3NpdGlvbi5ub2RlLCBwb3NpdGlvbi5u
b2RlLCB2KTsKICAgCiAgICBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwodik7CiAgZWxz
ZSBpZiAocG9zaXRpb24ubm9kZSA9PSBoZWFkZXIpICAKICAgIGlmICgha2V5X2NvbXBhcmUoS2V5
T2ZWYWx1ZSgpKHYpLCBrZXkocmlnaHRtb3N0KCkpKSkKICAgICAgcmV0dXJuIF9faW5zZXJ0KDAs
IHJpZ2h0bW9zdCgpLCB2KTsKICAgIGVsc2UKICAgICAgcmV0dXJuIGluc2VydF9lcXVhbCh2KTsK
ICBlbHNlIHsKICAgIGl0ZXJhdG9yIGJlZm9yZSA9IHBvc2l0aW9uOwogICAgLS1iZWZvcmU7CiAg
ICBpZiAoIWtleV9jb21wYXJlKEtleU9mVmFsdWUoKSh2KSwga2V5KGJlZm9yZS5ub2RlKSkKICAg
ICAgICAmJiAha2V5X2NvbXBhcmUoa2V5KHBvc2l0aW9uLm5vZGUpLCBLZXlPZlZhbHVlKCkodikp
KQogICAgICBpZiAocmlnaHQoYmVmb3JlLm5vZGUpID09IDApCiAgICAgICAgcmV0dXJuIF9faW5z
ZXJ0KDAsIGJlZm9yZS5ub2RlLCB2KTsgCiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gX19pbnNl
cnQocG9zaXRpb24ubm9kZSwgcG9zaXRpb24ubm9kZSwgdik7CiAgICAgCiAgICBlbHNlCiAgICAg
IHJldHVybiBpbnNlcnRfZXF1YWwodik7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBLLCBjbGFz
cyBWLCBjbGFzcyBLb1YsIGNsYXNzIENtcCwgY2xhc3MgQWw+IHRlbXBsYXRlPGNsYXNzIElJPgp2
b2lkIHJiX3RyZWU8SywgViwgS29WLCBDbXAsIEFsPjo6aW5zZXJ0X2VxdWFsKElJIGZpcnN0LCBJ
SSBsYXN0KSB7CiAgZm9yICggOyBmaXJzdCAhPSBsYXN0OyArK2ZpcnN0KQogICAgaW5zZXJ0X2Vx
dWFsKCpmaXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBLLCBjbGFzcyBWLCBjbGFzcyBLb1YsIGNs
YXNzIENtcCwgY2xhc3MgQWw+IHRlbXBsYXRlPGNsYXNzIElJPgp2b2lkIHJiX3RyZWU8SywgViwg
S29WLCBDbXAsIEFsPjo6aW5zZXJ0X3VuaXF1ZShJSSBmaXJzdCwgSUkgbGFzdCkgewogIGZvciAo
IDsgZmlyc3QgIT0gbGFzdDsgKytmaXJzdCkKICAgIGluc2VydF91bmlxdWUoKmZpcnN0KTsKfQoK
IyA4NTIgIi91c3IvaW5jbHVkZS9nKystMi9zdGxfdHJlZS5oIiAzCgogICAgICAgICAKdGVtcGxh
dGUgPGNsYXNzIEtleSwgY2xhc3MgVmFsdWUsIGNsYXNzIEtleU9mVmFsdWUsIGNsYXNzIENvbXBh
cmUsIGNsYXNzIEFsbG9jPgppbmxpbmUgdm9pZApyYl90cmVlPEtleSwgVmFsdWUsIEtleU9mVmFs
dWUsIENvbXBhcmUsIEFsbG9jPjo6ZXJhc2UoaXRlcmF0b3IgcG9zaXRpb24pIHsKICBsaW5rX3R5
cGUgeSA9IChsaW5rX3R5cGUpIF9fcmJfdHJlZV9yZWJhbGFuY2VfZm9yX2VyYXNlKHBvc2l0aW9u
Lm5vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWFkZXItPnBhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci0+bGVmdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci0+cmlnaHQpOwog
IGRlc3Ryb3lfbm9kZSh5KTsKICAtLW5vZGVfY291bnQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBLZXks
IGNsYXNzIFZhbHVlLCBjbGFzcyBLZXlPZlZhbHVlLCBjbGFzcyBDb21wYXJlLCBjbGFzcyBBbGxv
Yz4KdHlwZW5hbWUgcmJfdHJlZTxLZXksIFZhbHVlLCBLZXlPZlZhbHVlLCBDb21wYXJlLCBBbGxv
Yz46OnNpemVfdHlwZSAKcmJfdHJlZTxLZXksIFZhbHVlLCBLZXlPZlZhbHVlLCBDb21wYXJlLCBB
bGxvYz46OmVyYXNlKGNvbnN0IEtleSYgeCkgewogIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IHAg
PSBlcXVhbF9yYW5nZSh4KTsKICBzaXplX3R5cGUgbiA9IDA7CiAgZGlzdGFuY2UocC5maXJzdCwg
cC5zZWNvbmQsIG4pOwogIGVyYXNlKHAuZmlyc3QsIHAuc2Vjb25kKTsKICByZXR1cm4gbjsKfQoK
dGVtcGxhdGUgPGNsYXNzIEssIGNsYXNzIFYsIGNsYXNzIEtleU9mVmFsdWUsIGNsYXNzIENvbXBh
cmUsIGNsYXNzIEFsbG9jPgp0eXBlbmFtZSByYl90cmVlPEssIFYsIEtleU9mVmFsdWUsIENvbXBh
cmUsIEFsbG9jPjo6bGlua190eXBlIApyYl90cmVlPEssIFYsIEtleU9mVmFsdWUsIENvbXBhcmUs
IEFsbG9jPjo6X19jb3B5KGxpbmtfdHlwZSB4LCBsaW5rX3R5cGUgcCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKICBsaW5rX3R5cGUgdG9wID0gY2xvbmVfbm9kZSh4KTsKICB0
b3AtPnBhcmVudCA9IHA7CiAKICB0cnkgIHsKICAgIGlmICh4LT5yaWdodCkKICAgICAgdG9wLT5y
aWdodCA9IF9fY29weShyaWdodCh4KSwgdG9wKTsKICAgIHAgPSB0b3A7CiAgICB4ID0gbGVmdCh4
KTsKCiAgICB3aGlsZSAoeCAhPSAwKSB7CiAgICAgIGxpbmtfdHlwZSB5ID0gY2xvbmVfbm9kZSh4
KTsKICAgICAgcC0+bGVmdCA9IHk7CiAgICAgIHktPnBhcmVudCA9IHA7CiAgICAgIGlmICh4LT5y
aWdodCkKICAgICAgICB5LT5yaWdodCA9IF9fY29weShyaWdodCh4KSwgeSk7CiAgICAgIHAgPSB5
OwogICAgICB4ID0gbGVmdCh4KTsKICAgIH0KICB9CiAgY2F0Y2goLi4uKSB7ICBfX2VyYXNlKHRv
cCkgOyB0aHJvdzsgfSA7CgogIHJldHVybiB0b3A7Cn0KCnRlbXBsYXRlIDxjbGFzcyBLZXksIGNs
YXNzIFZhbHVlLCBjbGFzcyBLZXlPZlZhbHVlLCBjbGFzcyBDb21wYXJlLCBjbGFzcyBBbGxvYz4K
dm9pZCByYl90cmVlPEtleSwgVmFsdWUsIEtleU9mVmFsdWUsIENvbXBhcmUsIEFsbG9jPjo6X19l
cmFzZShsaW5rX3R5cGUgeCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICB3
aGlsZSAoeCAhPSAwKSB7CiAgICBfX2VyYXNlKHJpZ2h0KHgpKTsKICAgIGxpbmtfdHlwZSB5ID0g
bGVmdCh4KTsKICAgIGRlc3Ryb3lfbm9kZSh4KTsKICAgIHggPSB5OwogIH0KfQoKdGVtcGxhdGUg
PGNsYXNzIEtleSwgY2xhc3MgVmFsdWUsIGNsYXNzIEtleU9mVmFsdWUsIGNsYXNzIENvbXBhcmUs
IGNsYXNzIEFsbG9jPgp2b2lkIHJiX3RyZWU8S2V5LCBWYWx1ZSwgS2V5T2ZWYWx1ZSwgQ29tcGFy
ZSwgQWxsb2M+OjplcmFzZShpdGVyYXRvciBmaXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yIGxhc3QpIHsKICBp
ZiAoZmlyc3QgPT0gYmVnaW4oKSAmJiBsYXN0ID09IGVuZCgpKQogICAgY2xlYXIoKTsKICBlbHNl
CiAgICB3aGlsZSAoZmlyc3QgIT0gbGFzdCkgZXJhc2UoZmlyc3QrKyk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBLZXksIGNsYXNzIFZhbHVlLCBjbGFzcyBLZXlPZlZhbHVlLCBjbGFzcyBDb21wYXJlLCBj
bGFzcyBBbGxvYz4Kdm9pZCByYl90cmVlPEtleSwgVmFsdWUsIEtleU9mVmFsdWUsIENvbXBhcmUs
IEFsbG9jPjo6ZXJhc2UoY29uc3QgS2V5KiBmaXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtleSogbGFzdCkgewog
IHdoaWxlIChmaXJzdCAhPSBsYXN0KSBlcmFzZSgqZmlyc3QrKyk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBLZXksIGNsYXNzIFZhbHVlLCBjbGFzcyBLZXlPZlZhbHVlLCBjbGFzcyBDb21wYXJlLCBjbGFz
cyBBbGxvYz4KdHlwZW5hbWUgcmJfdHJlZTxLZXksIFZhbHVlLCBLZXlPZlZhbHVlLCBDb21wYXJl
LCBBbGxvYz46Oml0ZXJhdG9yIApyYl90cmVlPEtleSwgVmFsdWUsIEtleU9mVmFsdWUsIENvbXBh
cmUsIEFsbG9jPjo6ZmluZChjb25zdCBLZXkmIGspIHsKICBsaW5rX3R5cGUgeSA9IGhlYWRlcjsg
ICAgICAgICAKICBsaW5rX3R5cGUgeCA9IHJvb3QoKTsgICAgICAgICAKCiAgd2hpbGUgKHggIT0g
MCkgCiAgICBpZiAoIWtleV9jb21wYXJlKGtleSh4KSwgaykpCiAgICAgIHkgPSB4LCB4ID0gbGVm
dCh4KTsKICAgIGVsc2UKICAgICAgeCA9IHJpZ2h0KHgpOwoKICBpdGVyYXRvciBqID0gaXRlcmF0
b3IoeSk7ICAgCiAgcmV0dXJuIChqID09IGVuZCgpIHx8IGtleV9jb21wYXJlKGssIGtleShqLm5v
ZGUpKSkgPyBlbmQoKSA6IGo7Cn0KCnRlbXBsYXRlIDxjbGFzcyBLZXksIGNsYXNzIFZhbHVlLCBj
bGFzcyBLZXlPZlZhbHVlLCBjbGFzcyBDb21wYXJlLCBjbGFzcyBBbGxvYz4KdHlwZW5hbWUgcmJf
dHJlZTxLZXksIFZhbHVlLCBLZXlPZlZhbHVlLCBDb21wYXJlLCBBbGxvYz46OmNvbnN0X2l0ZXJh
dG9yIApyYl90cmVlPEtleSwgVmFsdWUsIEtleU9mVmFsdWUsIENvbXBhcmUsIEFsbG9jPjo6Zmlu
ZChjb25zdCBLZXkmIGspIGNvbnN0IHsKICBsaW5rX3R5cGUgeSA9IGhlYWRlcjsgIAogIGxpbmtf
dHlwZSB4ID0gcm9vdCgpOyAgCgogIHdoaWxlICh4ICE9IDApIHsKICAgIGlmICgha2V5X2NvbXBh
cmUoa2V5KHgpLCBrKSkKICAgICAgeSA9IHgsIHggPSBsZWZ0KHgpOwogICAgZWxzZQogICAgICB4
ID0gcmlnaHQoeCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIGogPSBjb25zdF9pdGVyYXRvcih5KTsg
ICAKICByZXR1cm4gKGogPT0gZW5kKCkgfHwga2V5X2NvbXBhcmUoaywga2V5KGoubm9kZSkpKSA/
IGVuZCgpIDogajsKfQoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVmFsdWUsIGNsYXNzIEtl
eU9mVmFsdWUsIGNsYXNzIENvbXBhcmUsIGNsYXNzIEFsbG9jPgp0eXBlbmFtZSByYl90cmVlPEtl
eSwgVmFsdWUsIEtleU9mVmFsdWUsIENvbXBhcmUsIEFsbG9jPjo6c2l6ZV90eXBlIApyYl90cmVl
PEtleSwgVmFsdWUsIEtleU9mVmFsdWUsIENvbXBhcmUsIEFsbG9jPjo6Y291bnQoY29uc3QgS2V5
JiBrKSBjb25zdCB7CiAgcGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+IHAgPSBl
cXVhbF9yYW5nZShrKTsKICBzaXplX3R5cGUgbiA9IDA7CiAgZGlzdGFuY2UocC5maXJzdCwgcC5z
ZWNvbmQsIG4pOwogIHJldHVybiBuOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBWYWx1
ZSwgY2xhc3MgS2V5T2ZWYWx1ZSwgY2xhc3MgQ29tcGFyZSwgY2xhc3MgQWxsb2M+CnR5cGVuYW1l
IHJiX3RyZWU8S2V5LCBWYWx1ZSwgS2V5T2ZWYWx1ZSwgQ29tcGFyZSwgQWxsb2M+OjppdGVyYXRv
ciAKcmJfdHJlZTxLZXksIFZhbHVlLCBLZXlPZlZhbHVlLCBDb21wYXJlLCBBbGxvYz46Omxvd2Vy
X2JvdW5kKGNvbnN0IEtleSYgaykgewogIGxpbmtfdHlwZSB5ID0gaGVhZGVyOyAgCiAgbGlua190
eXBlIHggPSByb290KCk7ICAKCiAgd2hpbGUgKHggIT0gMCkgCiAgICBpZiAoIWtleV9jb21wYXJl
KGtleSh4KSwgaykpCiAgICAgIHkgPSB4LCB4ID0gbGVmdCh4KTsKICAgIGVsc2UKICAgICAgeCA9
IHJpZ2h0KHgpOwoKICByZXR1cm4gaXRlcmF0b3IoeSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBLZXks
IGNsYXNzIFZhbHVlLCBjbGFzcyBLZXlPZlZhbHVlLCBjbGFzcyBDb21wYXJlLCBjbGFzcyBBbGxv
Yz4KdHlwZW5hbWUgcmJfdHJlZTxLZXksIFZhbHVlLCBLZXlPZlZhbHVlLCBDb21wYXJlLCBBbGxv
Yz46OmNvbnN0X2l0ZXJhdG9yIApyYl90cmVlPEtleSwgVmFsdWUsIEtleU9mVmFsdWUsIENvbXBh
cmUsIEFsbG9jPjo6bG93ZXJfYm91bmQoY29uc3QgS2V5JiBrKSBjb25zdCB7CiAgbGlua190eXBl
IHkgPSBoZWFkZXI7ICAKICBsaW5rX3R5cGUgeCA9IHJvb3QoKTsgIAoKICB3aGlsZSAoeCAhPSAw
KSAKICAgIGlmICgha2V5X2NvbXBhcmUoa2V5KHgpLCBrKSkKICAgICAgeSA9IHgsIHggPSBsZWZ0
KHgpOwogICAgZWxzZQogICAgICB4ID0gcmlnaHQoeCk7CgogIHJldHVybiBjb25zdF9pdGVyYXRv
cih5KTsKfQoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVmFsdWUsIGNsYXNzIEtleU9mVmFs
dWUsIGNsYXNzIENvbXBhcmUsIGNsYXNzIEFsbG9jPgp0eXBlbmFtZSByYl90cmVlPEtleSwgVmFs
dWUsIEtleU9mVmFsdWUsIENvbXBhcmUsIEFsbG9jPjo6aXRlcmF0b3IgCnJiX3RyZWU8S2V5LCBW
YWx1ZSwgS2V5T2ZWYWx1ZSwgQ29tcGFyZSwgQWxsb2M+Ojp1cHBlcl9ib3VuZChjb25zdCBLZXkm
IGspIHsKICBsaW5rX3R5cGUgeSA9IGhlYWRlcjsgIAogIGxpbmtfdHlwZSB4ID0gcm9vdCgpOyAg
CgogICB3aGlsZSAoeCAhPSAwKSAKICAgICBpZiAoa2V5X2NvbXBhcmUoaywga2V5KHgpKSkKICAg
ICAgIHkgPSB4LCB4ID0gbGVmdCh4KTsKICAgICBlbHNlCiAgICAgICB4ID0gcmlnaHQoeCk7Cgog
ICByZXR1cm4gaXRlcmF0b3IoeSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBLZXksIGNsYXNzIFZhbHVl
LCBjbGFzcyBLZXlPZlZhbHVlLCBjbGFzcyBDb21wYXJlLCBjbGFzcyBBbGxvYz4KdHlwZW5hbWUg
cmJfdHJlZTxLZXksIFZhbHVlLCBLZXlPZlZhbHVlLCBDb21wYXJlLCBBbGxvYz46OmNvbnN0X2l0
ZXJhdG9yIApyYl90cmVlPEtleSwgVmFsdWUsIEtleU9mVmFsdWUsIENvbXBhcmUsIEFsbG9jPjo6
dXBwZXJfYm91bmQoY29uc3QgS2V5JiBrKSBjb25zdCB7CiAgbGlua190eXBlIHkgPSBoZWFkZXI7
ICAKICBsaW5rX3R5cGUgeCA9IHJvb3QoKTsgIAoKICAgd2hpbGUgKHggIT0gMCkgCiAgICAgaWYg
KGtleV9jb21wYXJlKGssIGtleSh4KSkpCiAgICAgICB5ID0geCwgeCA9IGxlZnQoeCk7CiAgICAg
ZWxzZQogICAgICAgeCA9IHJpZ2h0KHgpOwoKICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBWYWx1ZSwgY2xhc3MgS2V5T2ZWYWx1ZSwgY2xh
c3MgQ29tcGFyZSwgY2xhc3MgQWxsb2M+CmlubGluZSBwYWlyPHR5cGVuYW1lIHJiX3RyZWU8S2V5
LCBWYWx1ZSwgS2V5T2ZWYWx1ZSwgQ29tcGFyZSwgQWxsb2M+OjppdGVyYXRvciwKICAgICAgICAg
ICAgdHlwZW5hbWUgcmJfdHJlZTxLZXksIFZhbHVlLCBLZXlPZlZhbHVlLCBDb21wYXJlLCBBbGxv
Yz46Oml0ZXJhdG9yPgpyYl90cmVlPEtleSwgVmFsdWUsIEtleU9mVmFsdWUsIENvbXBhcmUsIEFs
bG9jPjo6ZXF1YWxfcmFuZ2UoY29uc3QgS2V5JiBrKSB7CiAgcmV0dXJuIHBhaXI8aXRlcmF0b3Is
IGl0ZXJhdG9yPihsb3dlcl9ib3VuZChrKSwgdXBwZXJfYm91bmQoaykpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgS2V5LCBjbGFzcyBWYWx1ZSwgY2xhc3MgS29WLCBjbGFzcyBDb21wYXJlLCBjbGFzcyBB
bGxvYz4KaW5saW5lIHBhaXI8dHlwZW5hbWUgcmJfdHJlZTxLZXksIFZhbHVlLCBLb1YsIENvbXBh
cmUsIEFsbG9jPjo6Y29uc3RfaXRlcmF0b3IsCiAgICAgICAgICAgIHR5cGVuYW1lIHJiX3RyZWU8
S2V5LCBWYWx1ZSwgS29WLCBDb21wYXJlLCBBbGxvYz46OmNvbnN0X2l0ZXJhdG9yPgpyYl90cmVl
PEtleSwgVmFsdWUsIEtvViwgQ29tcGFyZSwgQWxsb2M+OjplcXVhbF9yYW5nZShjb25zdCBLZXkm
IGspIGNvbnN0IHsKICByZXR1cm4gcGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4o
bG93ZXJfYm91bmQoayksIHVwcGVyX2JvdW5kKGspKTsKfQoKaW5saW5lIGludCBfX2JsYWNrX2Nv
dW50KF9fcmJfdHJlZV9ub2RlX2Jhc2UqIG5vZGUsIF9fcmJfdHJlZV9ub2RlX2Jhc2UqIHJvb3Qp
CnsKICBpZiAobm9kZSA9PSAwKQogICAgcmV0dXJuIDA7CiAgZWxzZSB7CiAgICBpbnQgYmMgPSBu
b2RlLT5jb2xvciA9PSBfX3JiX3RyZWVfYmxhY2sgPyAxIDogMDsKICAgIGlmIChub2RlID09IHJv
b3QpCiAgICAgIHJldHVybiBiYzsKICAgIGVsc2UKICAgICAgcmV0dXJuIGJjICsgX19ibGFja19j
b3VudChub2RlLT5wYXJlbnQsIHJvb3QpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xh
c3MgVmFsdWUsIGNsYXNzIEtleU9mVmFsdWUsIGNsYXNzIENvbXBhcmUsIGNsYXNzIEFsbG9jPgpi
b29sIApyYl90cmVlPEtleSwgVmFsdWUsIEtleU9mVmFsdWUsIENvbXBhcmUsIEFsbG9jPjo6X19y
Yl92ZXJpZnkoKSBjb25zdAp7CiAgaWYgKG5vZGVfY291bnQgPT0gMCB8fCBiZWdpbigpID09IGVu
ZCgpKQogICAgcmV0dXJuIG5vZGVfY291bnQgPT0gMCAmJiBiZWdpbigpID09IGVuZCgpICYmCiAg
ICAgIGhlYWRlci0+bGVmdCA9PSBoZWFkZXIgJiYgaGVhZGVyLT5yaWdodCA9PSBoZWFkZXI7CiAg
CiAgaW50IGxlbiA9IF9fYmxhY2tfY291bnQobGVmdG1vc3QoKSwgcm9vdCgpKTsKICBmb3IgKGNv
bnN0X2l0ZXJhdG9yIGl0ID0gYmVnaW4oKTsgaXQgIT0gZW5kKCk7ICsraXQpIHsKICAgIGxpbmtf
dHlwZSB4ID0gKGxpbmtfdHlwZSkgaXQubm9kZTsKICAgIGxpbmtfdHlwZSBMID0gbGVmdCh4KTsK
ICAgIGxpbmtfdHlwZSBSID0gcmlnaHQoeCk7CgogICAgaWYgKHgtPmNvbG9yID09IF9fcmJfdHJl
ZV9yZWQpCiAgICAgIGlmICgoTCAmJiBMLT5jb2xvciA9PSBfX3JiX3RyZWVfcmVkKSB8fAogICAg
ICAgICAgKFIgJiYgUi0+Y29sb3IgPT0gX19yYl90cmVlX3JlZCkpCiAgICAgICAgcmV0dXJuIGZh
bHNlOwoKICAgIGlmIChMICYmIGtleV9jb21wYXJlKGtleSh4KSwga2V5KEwpKSkKICAgICAgcmV0
dXJuIGZhbHNlOwogICAgaWYgKFIgJiYga2V5X2NvbXBhcmUoa2V5KFIpLCBrZXkoeCkpKQogICAg
ICByZXR1cm4gZmFsc2U7CgogICAgaWYgKCFMICYmICFSICYmIF9fYmxhY2tfY291bnQoeCwgcm9v
dCgpKSAhPSBsZW4pCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIGlmIChsZWZ0bW9zdCgpICE9
IF9fcmJfdHJlZV9ub2RlX2Jhc2U6Om1pbmltdW0ocm9vdCgpKSkKICAgIHJldHVybiBmYWxzZTsK
ICBpZiAocmlnaHRtb3N0KCkgIT0gX19yYl90cmVlX25vZGVfYmFzZTo6bWF4aW11bShyb290KCkp
KQogICAgcmV0dXJuIGZhbHNlOwoKICByZXR1cm4gdHJ1ZTsKfQoKICAKCgoKIAogCiAKIyAzMSAi
L3Vzci9pbmNsdWRlL2crKy0yL21hcCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLTIvc3Rs
X21hcC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCnRl
bXBsYXRlIDxjbGFzcyBLZXksIGNsYXNzIFQsIGNsYXNzIENvbXBhcmUgPSBsZXNzPEtleT4sIGNs
YXNzIEFsbG9jID0gYWxsb2M+CgoKCmNsYXNzIG1hcCB7CnB1YmxpYzoKCiAKCiAgdHlwZWRlZiBL
ZXkga2V5X3R5cGU7CiAgdHlwZWRlZiBUIGRhdGFfdHlwZTsKICB0eXBlZGVmIFQgbWFwcGVkX3R5
cGU7CiAgdHlwZWRlZiBwYWlyPGNvbnN0IEtleSwgVD4gdmFsdWVfdHlwZTsKICB0eXBlZGVmIENv
bXBhcmUga2V5X2NvbXBhcmU7CiAgICAKICBjbGFzcyB2YWx1ZV9jb21wYXJlCiAgICA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248dmFsdWVfdHlwZSwgdmFsdWVfdHlwZSwgYm9vbD4gewogIGZyaWVu
ZCBjbGFzcyBtYXA8S2V5LCBULCBDb21wYXJlLCBBbGxvYz47CiAgcHJvdGVjdGVkIDoKICAgIENv
bXBhcmUgY29tcDsKICAgIHZhbHVlX2NvbXBhcmUoQ29tcGFyZSBjKSA6IGNvbXAoYykge30KICBw
dWJsaWM6CiAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgdmFsdWVfdHlwZSYgeCwgY29uc3QgdmFs
dWVfdHlwZSYgeSkgY29uc3QgewogICAgICByZXR1cm4gY29tcCh4LmZpcnN0LCB5LmZpcnN0KTsK
ICAgIH0KICB9OwoKcHJpdmF0ZToKICB0eXBlZGVmIHJiX3RyZWU8a2V5X3R5cGUsIHZhbHVlX3R5
cGUsIAogICAgICAgICAgICAgICAgICBzZWxlY3Qxc3Q8dmFsdWVfdHlwZT4sIGtleV9jb21wYXJl
LCBBbGxvYz4gcmVwX3R5cGU7CiAgcmVwX3R5cGUgdDsgICAKcHVibGljOgogIHR5cGVkZWYgdHlw
ZW5hbWUgcmVwX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIHJlcF90
eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSByZXBf
dHlwZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIHJlcF90eXBlOjpj
b25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgcmVwX3R5
cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgcmVwX3R5cGU6OmNvbnN0
X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgcmVwX3R5cGU6OnJl
dmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIHJlcF90
eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlw
ZWRlZiB0eXBlbmFtZSByZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0eXBlZGVmIHR5
cGVuYW1lIHJlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwoKICAgCgog
IG1hcCgpIDogdChDb21wYXJlKCkpIHt9CiAgZXhwbGljaXQgbWFwKGNvbnN0IENvbXBhcmUmIGNv
bXApIDogdChjb21wKSB7fQoKCiAgdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3I+CiAgbWFw
KElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCkKICAgIDogdChDb21wYXJl
KCkpIHsgdC5pbnNlcnRfdW5pcXVlKGZpcnN0LCBsYXN0KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
SW5wdXRJdGVyYXRvcj4KICBtYXAoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBs
YXN0LCBjb25zdCBDb21wYXJlJiBjb21wKQogICAgOiB0KGNvbXApIHsgdC5pbnNlcnRfdW5pcXVl
KGZpcnN0LCBsYXN0KTsgfQojIDEwNyAiL3Vzci9pbmNsdWRlL2crKy0yL3N0bF9tYXAuaCIgMwoK
CiAgbWFwKGNvbnN0IG1hcDxLZXksIFQsIENvbXBhcmUsIEFsbG9jPiYgeCkgOiB0KHgudCkge30K
ICBtYXA8S2V5LCBULCBDb21wYXJlLCBBbGxvYz4mIG9wZXJhdG9yPShjb25zdCBtYXA8S2V5LCBU
LCBDb21wYXJlLCBBbGxvYz4mIHgpCiAgewogICAgdCA9IHgudDsKICAgIHJldHVybiAqdGhpczsg
CiAgfQoKICAgCgogIGtleV9jb21wYXJlIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gdC5rZXlf
Y29tcCgpOyB9CiAgdmFsdWVfY29tcGFyZSB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gdmFs
dWVfY29tcGFyZSh0LmtleV9jb21wKCkpOyB9CiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiB0
LmJlZ2luKCk7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIHQuYmVn
aW4oKTsgfQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIHQuZW5kKCk7IH0KICBjb25zdF9pdGVy
YXRvciBlbmQoKSBjb25zdCB7IHJldHVybiB0LmVuZCgpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciBy
YmVnaW4oKSB7IHJldHVybiB0LnJiZWdpbigpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciBy
YmVnaW4oKSBjb25zdCB7IHJldHVybiB0LnJiZWdpbigpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciBy
ZW5kKCkgeyByZXR1cm4gdC5yZW5kKCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQo
KSBjb25zdCB7IHJldHVybiB0LnJlbmQoKTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVy
biB0LmVtcHR5KCk7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHQuc2l6ZSgp
OyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gdC5tYXhfc2l6ZSgpOyB9
CiAgVCYgb3BlcmF0b3JbXShjb25zdCBrZXlfdHlwZSYgaykgewogICAgcmV0dXJuICgqKChpbnNl
cnQodmFsdWVfdHlwZShrLCBUKCkpKSkuZmlyc3QpKS5zZWNvbmQ7CiAgfQogIHZvaWQgc3dhcCht
YXA8S2V5LCBULCBDb21wYXJlLCBBbGxvYz4mIHgpIHsgdC5zd2FwKHgudCk7IH0KCiAgIAoKICBw
YWlyPGl0ZXJhdG9yLGJvb2w+IGluc2VydChjb25zdCB2YWx1ZV90eXBlJiB4KSB7IHJldHVybiB0
Lmluc2VydF91bmlxdWUoeCk7IH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgcG9zaXRpb24s
IGNvbnN0IHZhbHVlX3R5cGUmIHgpIHsKICAgIHJldHVybiB0Lmluc2VydF91bmlxdWUocG9zaXRp
b24sIHgpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNl
cnQoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KSB7CiAgICB0Lmluc2Vy
dF91bmlxdWUoZmlyc3QsIGxhc3QpOwogIH0KCgoKCgoKCgoKICB2b2lkIGVyYXNlKGl0ZXJhdG9y
IHBvc2l0aW9uKSB7IHQuZXJhc2UocG9zaXRpb24pOyB9CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0
IGtleV90eXBlJiB4KSB7IHJldHVybiB0LmVyYXNlKHgpOyB9CiAgdm9pZCBlcmFzZShpdGVyYXRv
ciBmaXJzdCwgaXRlcmF0b3IgbGFzdCkgeyB0LmVyYXNlKGZpcnN0LCBsYXN0KTsgfQogIHZvaWQg
Y2xlYXIoKSB7IHQuY2xlYXIoKTsgfQoKICAgCgogIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5
cGUmIHgpIHsgcmV0dXJuIHQuZmluZCh4KTsgfQogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qg
a2V5X3R5cGUmIHgpIGNvbnN0IHsgcmV0dXJuIHQuZmluZCh4KTsgfQogIHNpemVfdHlwZSBjb3Vu
dChjb25zdCBrZXlfdHlwZSYgeCkgY29uc3QgeyByZXR1cm4gdC5jb3VudCh4KTsgfQogIGl0ZXJh
dG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiB4KSB7cmV0dXJuIHQubG93ZXJfYm91bmQo
eCk7IH0KICBjb25zdF9pdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgeCkgY29u
c3QgewogICAgcmV0dXJuIHQubG93ZXJfYm91bmQoeCk7IAogIH0KICBpdGVyYXRvciB1cHBlcl9i
b3VuZChjb25zdCBrZXlfdHlwZSYgeCkge3JldHVybiB0LnVwcGVyX2JvdW5kKHgpOyB9CiAgY29u
c3RfaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIHgpIGNvbnN0IHsKICAgIHJl
dHVybiB0LnVwcGVyX2JvdW5kKHgpOyAKICB9CiAgCiAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4g
ZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIHgpIHsKICAgIHJldHVybiB0LmVxdWFsX3Jhbmdl
KHgpOwogIH0KICBwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPiBlcXVhbF9yYW5n
ZShjb25zdCBrZXlfdHlwZSYgeCkgY29uc3QgewogICAgcmV0dXJuIHQuZXF1YWxfcmFuZ2UoeCk7
CiAgfQogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0gPD4gIChjb25zdCBtYXAmLCBjb25zdCBtYXAm
KTsKICBmcmllbmQgYm9vbCBvcGVyYXRvcjwgPD4gIChjb25zdCBtYXAmLCBjb25zdCBtYXAmKTsK
fTsKCnRlbXBsYXRlIDxjbGFzcyBLZXksIGNsYXNzIFQsIGNsYXNzIENvbXBhcmUsIGNsYXNzIEFs
bG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG1hcDxLZXksIFQsIENvbXBhcmUsIEFs
bG9jPiYgeCwgCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPEtleSwgVCwgQ29tcGFy
ZSwgQWxsb2M+JiB5KSB7CiAgcmV0dXJuIHgudCA9PSB5LnQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBL
ZXksIGNsYXNzIFQsIGNsYXNzIENvbXBhcmUsIGNsYXNzIEFsbG9jPgppbmxpbmUgYm9vbCBvcGVy
YXRvcjwoY29uc3QgbWFwPEtleSwgVCwgQ29tcGFyZSwgQWxsb2M+JiB4LCAKICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG1hcDxLZXksIFQsIENvbXBhcmUsIEFsbG9jPiYgeSkgewogIHJldHVy
biB4LnQgPCB5LnQ7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVCwgY2xhc3MgQ29t
cGFyZSwgY2xhc3MgQWxsb2M+CmlubGluZSB2b2lkIHN3YXAobWFwPEtleSwgVCwgQ29tcGFyZSwg
QWxsb2M+JiB4LCAKICAgICAgICAgICAgICAgICBtYXA8S2V5LCBULCBDb21wYXJlLCBBbGxvYz4m
IHkpIHsKICB4LnN3YXAoeSk7Cn0KCgoKCgoKCiAKCgoKIAogCiAKIyAzMyAiL3Vzci9pbmNsdWRl
L2crKy0yL21hcCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKystMi9zdGxfbXVsdGltYXAuaCIg
MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgS2V5LCBjbGFzcyBULCBjbGFzcyBDb21wYXJlID0gbGVzczxLZXk+LCBjbGFzcyBBbGxv
YyA9IGFsbG9jPgoKCgpjbGFzcyBtdWx0aW1hcCB7CnB1YmxpYzoKCiAKCiAgdHlwZWRlZiBLZXkg
a2V5X3R5cGU7CiAgdHlwZWRlZiBUIGRhdGFfdHlwZTsKICB0eXBlZGVmIFQgbWFwcGVkX3R5cGU7
CiAgdHlwZWRlZiBwYWlyPGNvbnN0IEtleSwgVD4gdmFsdWVfdHlwZTsKICB0eXBlZGVmIENvbXBh
cmUga2V5X2NvbXBhcmU7CgogIGNsYXNzIHZhbHVlX2NvbXBhcmUgOiBwdWJsaWMgYmluYXJ5X2Z1
bmN0aW9uPHZhbHVlX3R5cGUsIHZhbHVlX3R5cGUsIGJvb2w+IHsKICBmcmllbmQgY2xhc3MgbXVs
dGltYXA8S2V5LCBULCBDb21wYXJlLCBBbGxvYz47CiAgcHJvdGVjdGVkOgogICAgQ29tcGFyZSBj
b21wOwogICAgdmFsdWVfY29tcGFyZShDb21wYXJlIGMpIDogY29tcChjKSB7fQogIHB1YmxpYzoK
ICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCB2YWx1ZV90eXBlJiB4LCBjb25zdCB2YWx1ZV90eXBl
JiB5KSBjb25zdCB7CiAgICAgIHJldHVybiBjb21wKHguZmlyc3QsIHkuZmlyc3QpOwogICAgfQog
IH07Cgpwcml2YXRlOgogIHR5cGVkZWYgcmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwgCiAg
ICAgICAgICAgICAgICAgIHNlbGVjdDFzdDx2YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIEFsbG9j
PiByZXBfdHlwZTsKICByZXBfdHlwZSB0OyAgIApwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBy
ZXBfdHlwZTo6cG9pbnRlciBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgcmVwX3R5cGU6OmNv
bnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIHJlcF90eXBlOjpy
ZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgcmVwX3R5cGU6OmNvbnN0X3Jl
ZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSByZXBfdHlwZTo6aXRl
cmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSByZXBfdHlwZTo6Y29uc3RfaXRlcmF0
b3IgY29uc3RfaXRlcmF0b3I7IAogIHR5cGVkZWYgdHlwZW5hbWUgcmVwX3R5cGU6OnJldmVyc2Vf
aXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIHJlcF90eXBlOjpj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0
eXBlbmFtZSByZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1l
IHJlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwoKIAoKICBtdWx0aW1h
cCgpIDogdChDb21wYXJlKCkpIHsgfQogIGV4cGxpY2l0IG11bHRpbWFwKGNvbnN0IENvbXBhcmUm
IGNvbXApIDogdChjb21wKSB7IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yPgog
IG11bHRpbWFwKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCkKICAgIDog
dChDb21wYXJlKCkpIHsgdC5pbnNlcnRfZXF1YWwoZmlyc3QsIGxhc3QpOyB9CgogIHRlbXBsYXRl
IDxjbGFzcyBJbnB1dEl0ZXJhdG9yPgogIG11bHRpbWFwKElucHV0SXRlcmF0b3IgZmlyc3QsIElu
cHV0SXRlcmF0b3IgbGFzdCwgY29uc3QgQ29tcGFyZSYgY29tcCkKICAgIDogdChjb21wKSB7IHQu
aW5zZXJ0X2VxdWFsKGZpcnN0LCBsYXN0KTsgfQojIDEwNyAiL3Vzci9pbmNsdWRlL2crKy0yL3N0
bF9tdWx0aW1hcC5oIiAzCgoKICBtdWx0aW1hcChjb25zdCBtdWx0aW1hcDxLZXksIFQsIENvbXBh
cmUsIEFsbG9jPiYgeCkgOiB0KHgudCkgeyB9CiAgbXVsdGltYXA8S2V5LCBULCBDb21wYXJlLCBB
bGxvYz4mCiAgb3BlcmF0b3I9KGNvbnN0IG11bHRpbWFwPEtleSwgVCwgQ29tcGFyZSwgQWxsb2M+
JiB4KSB7CiAgICB0ID0geC50OwogICAgcmV0dXJuICp0aGlzOyAKICB9CgogICAKCiAga2V5X2Nv
bXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiB0LmtleV9jb21wKCk7IH0KICB2YWx1ZV9j
b21wYXJlIHZhbHVlX2NvbXAoKSBjb25zdCB7IHJldHVybiB2YWx1ZV9jb21wYXJlKHQua2V5X2Nv
bXAoKSk7IH0KICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIHQuYmVnaW4oKTsgfQogIGNvbnN0
X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gdC5iZWdpbigpOyB9CiAgaXRlcmF0b3Ig
ZW5kKCkgeyByZXR1cm4gdC5lbmQoKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIHQuZW5kKCk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIHQu
cmJlZ2luKCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIHQucmJlZ2luKCk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiB0LnJl
bmQoKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIHQu
cmVuZCgpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHQuZW1wdHkoKTsgfQogIHNp
emVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gdC5zaXplKCk7IH0KICBzaXplX3R5cGUgbWF4
X3NpemUoKSBjb25zdCB7IHJldHVybiB0Lm1heF9zaXplKCk7IH0KICB2b2lkIHN3YXAobXVsdGlt
YXA8S2V5LCBULCBDb21wYXJlLCBBbGxvYz4mIHgpIHsgdC5zd2FwKHgudCk7IH0KCiAgIAoKICBp
dGVyYXRvciBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgeCkgeyByZXR1cm4gdC5pbnNlcnRfZXF1
YWwoeCk7IH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgcG9zaXRpb24sIGNvbnN0IHZhbHVl
X3R5cGUmIHgpIHsKICAgIHJldHVybiB0Lmluc2VydF9lcXVhbChwb3NpdGlvbiwgeCk7CiAgfQoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChJbnB1dEl0ZXJh
dG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpIHsKICAgIHQuaW5zZXJ0X2VxdWFsKGZpcnN0
LCBsYXN0KTsKICB9CgoKCgoKCgoKICB2b2lkIGVyYXNlKGl0ZXJhdG9yIHBvc2l0aW9uKSB7IHQu
ZXJhc2UocG9zaXRpb24pOyB9CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiB4KSB7
IHJldHVybiB0LmVyYXNlKHgpOyB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBmaXJzdCwgaXRlcmF0
b3IgbGFzdCkgeyB0LmVyYXNlKGZpcnN0LCBsYXN0KTsgfQogIHZvaWQgY2xlYXIoKSB7IHQuY2xl
YXIoKTsgfQoKICAgCgogIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIHgpIHsgcmV0dXJu
IHQuZmluZCh4KTsgfQogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIHgpIGNv
bnN0IHsgcmV0dXJuIHQuZmluZCh4KTsgfQogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlw
ZSYgeCkgY29uc3QgeyByZXR1cm4gdC5jb3VudCh4KTsgfQogIGl0ZXJhdG9yIGxvd2VyX2JvdW5k
KGNvbnN0IGtleV90eXBlJiB4KSB7cmV0dXJuIHQubG93ZXJfYm91bmQoeCk7IH0KICBjb25zdF9p
dGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgeCkgY29uc3QgewogICAgcmV0dXJu
IHQubG93ZXJfYm91bmQoeCk7IAogIH0KICBpdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlf
dHlwZSYgeCkge3JldHVybiB0LnVwcGVyX2JvdW5kKHgpOyB9CiAgY29uc3RfaXRlcmF0b3IgdXBw
ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIHgpIGNvbnN0IHsKICAgIHJldHVybiB0LnVwcGVyX2Jv
dW5kKHgpOyAKICB9CiAgIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0
IGtleV90eXBlJiB4KSB7CiAgICByZXR1cm4gdC5lcXVhbF9yYW5nZSh4KTsKICB9CiAgcGFpcjxj
b25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUm
IHgpIGNvbnN0IHsKICAgIHJldHVybiB0LmVxdWFsX3JhbmdlKHgpOwogIH0KICBmcmllbmQgYm9v
bCBvcGVyYXRvcj09IDw+ICAoY29uc3QgbXVsdGltYXAmLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwJik7CiAgZnJpZW5kIGJvb2wg
b3BlcmF0b3I8IDw+ICAoY29uc3QgbXVsdGltYXAmLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXAmKTsKfTsKCnRlbXBsYXRlIDxjbGFz
cyBLZXksIGNsYXNzIFQsIGNsYXNzIENvbXBhcmUsIGNsYXNzIEFsbG9jPgppbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IG11bHRpbWFwPEtleSwgVCwgQ29tcGFyZSwgQWxsb2M+JiB4LCAKICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxLZXksIFQsIENvbXBhcmUsIEFsbG9j
PiYgeSkgewogIHJldHVybiB4LnQgPT0geS50Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFz
cyBULCBjbGFzcyBDb21wYXJlLCBjbGFzcyBBbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IG11bHRpbWFwPEtleSwgVCwgQ29tcGFyZSwgQWxsb2M+JiB4LCAKICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IG11bHRpbWFwPEtleSwgVCwgQ29tcGFyZSwgQWxsb2M+JiB5KSB7CiAgcmV0
dXJuIHgudCA8IHkudDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBULCBjbGFzcyBD
b21wYXJlLCBjbGFzcyBBbGxvYz4KaW5saW5lIHZvaWQgc3dhcChtdWx0aW1hcDxLZXksIFQsIENv
bXBhcmUsIEFsbG9jPiYgeCwgCiAgICAgICAgICAgICAgICAgbXVsdGltYXA8S2V5LCBULCBDb21w
YXJlLCBBbGxvYz4mIHkpIHsKICB4LnN3YXAoeSk7Cn0KCgoKCgoKCiAKCgoKIAogCiAKIyAzNCAi
L3Vzci9pbmNsdWRlL2crKy0yL21hcCIgMiAzCgoKCgogCiAKIAojIDE3ICJoL05SSFlfY2hhbk9w
LmgiIDIKCiAKIAoKY2xhc3MgTlJIWV9jbGFzc0NoYW5uZWw7CgpjbGFzcyBOUkhZX2NoYW5PcE1v
ZGUgewpwdWJsaWM6CiAgICBlbnVtIFZhbHVlIHsgQVRfS0VZUywgQUREX0tFWVMsIFJBVyB9Owog
ICAgTlJIWV9jaGFuT3BNb2RlKCk7CiAgICBOUkhZX2NoYW5PcE1vZGUoIFZhbHVlICk7CiAgICBO
UkhZX2NoYW5PcE1vZGUoIGNvbnN0IE5SSFlfY2hhbk9wTW9kZSYgKTsKICAgIH5OUkhZX2NoYW5P
cE1vZGUoKSB7fQogICAgTlJIWV9jaGFuT3BNb2RlJiBvcGVyYXRvcj0oIGNvbnN0IE5SSFlfY2hh
bk9wTW9kZSYgKTsKICAgIHZvaWQgc2V0VmFsdWUoIFZhbHVlICk7CiAgICBWYWx1ZSB2YWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIF92YWx1ZTsgfQogICAgc3RhdGljIE5SSFlfY2hhbk9wTW9kZSBwYXJz
ZSggY29uc3QgY2hhciogKTsKICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjX3N0ciggY29uc3QgTlJI
WV9jaGFuT3BNb2RlJiApOwogICAgc3RhdGljIGNoYXIqIHByb21wdFtdOwpwcml2YXRlOgogICAg
VmFsdWUgX3ZhbHVlOwp9OwoKY2xhc3MgTlJIWV9jaGFuT3AgewpwdWJsaWM6CiAgICBOUkhZX2No
YW5PcCgpOwogICAgTlJIWV9jaGFuT3AoIGNvbnN0IE5SSFlfY2hhbk9wJiApOwogICAgdmlydHVh
bCB+TlJIWV9jaGFuT3AoKSB7fQogICAgTlJIWV9jaGFuT3AmIG9wZXJhdG9yPSggY29uc3QgTlJI
WV9jaGFuT3AmICk7CiAgICB2b2lkIHNldENoYW5PcE1vZGUoIGNvbnN0IE5SSFlfY2hhbk9wTW9k
ZSYgKTsKICAgIE5SSFlfY2hhbk9wTW9kZSBjaGFuT3BNb2RlKCk7CiAgICB2b2lkIHNldEF0b21p
YyggYm9vbCApOwogICAgYm9vbCBhdG9taWMoKTsKICAgIHZvaWQgYWRkRnJhbmdlKCBjb25zdCBO
UkhZX1JFQUxfRlJBTkdFJiApOwogICAgdm9pZCBhZGRGcmFuZ2UoIGNvbnN0IHN0ZDo6dmVjdG9y
PCBOUkhZX1JFQUxfRlJBTkdFID4mICk7CiAgICBmbG9hdCBmcmFtZSgpOwogICAgaW50IGV4ZWN1
dGUoKTsKcHJvdGVjdGVkOgogICAgdmlydHVhbCBpbnQgY29tcHV0ZSgpID0gMDsKICAgIHZpcnR1
YWwgc3RkOjpzdHJpbmcgdW5kb0Rlc2NyaXB0aW9uKCkgPSAwOwogICAgc3RkOjptYXA8IE5SSFlf
Y2xhc3NDaGFubmVsKiwgZmxvYXQgPiBfbWFwOwpwcml2YXRlOgogICAgc3RkOjp2ZWN0b3I8IE5S
SFlfUkVBTF9GUkFOR0UgPiBfZnJhbmdlczsKICAgIE5SSFlfY2hhbk9wTW9kZSBfY2hhbk9wTW9k
ZTsKICAgIGZsb2F0IF9mcmFtZTsKICAgIGludCBwcmVleGVjdXRlKCk7CiAgICB2b2lkIHNldFZh
bHVlKCBOUkhZX2NsYXNzQ2hhbm5lbCosIGZsb2F0ICk7CiAgICBib29sIF9hdG9taWM7Cn07CgoK
IyA0OCAiaC9ucmh5X2NsYXNzSW5reS5oIiAyCgoKIAogCiAKCiAKdGVtcGxhdGUgPGNsYXNzIFR5
cGU+IGNsYXNzIE5SSFlfbWF0Y2g7CnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBjbGFzcyBOUkhZX2Fs
cGhhbGlzdDsKCiAKCmVudW0geyAKCUpOVF9aVFJBTiA9IDAsCglKTlRfWVRSQU4sCglKTlRfWFRS
QU4sCglKTlRfWlJPVCwKCUpOVF9ZUk9ULAoJSk5UX1hST1QsCglKTlRfTEFTVAp9OwoKZW51bSB7
IAoJSk5UX1ogPSAwLAoJSk5UX1ksCglKTlRfWAp9OwoKCiAKY2xhc3MgTlJIWV9Jbmt5SmFjb2Jp
YW4KewpwdWJsaWM6CglMaXN0IDxNX1ZlY3Rvck4+IGpvaW50OwoKCXZvaWQgSW5pdChpbnQgZG9m
KTsKCXZvaWQgU2V0Sm9pbnQoaW50IGosIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIsIGZs
b2F0IHYzLCBmbG9hdCB2NCwgZmxvYXQgdjUpOwoJdm9pZCBTZXRKb2ludChpbnQgaiwgTV9WZWN0
b3IgdmVjMSwgTV9WZWN0b3IgdjIpOwoJdm9pZCBJbmZvKHZvaWQpOwp9OwoKIApjbGFzcyBOUkhZ
X2NsYXNzSm9pbnRMaXN0CnsKcHVibGljOgoKCU1fVmVjdG9yTgljdXJyZW50OwoJTV9WZWN0b3JO
CWRlbHRhOwkJIAoJTV9WZWN0b3JOCXNhdmVkRGVsdGE7CSAKCU1fVmVjdG9yTglzdGFydDsJCSAK
CU1fVmVjdG9yTgltaWRTdGFydDsJIAoJTV9WZWN0b3JOCW1pZEVuZDsJCSAKICAgIAlNX1ZlY3Rv
ck4Jc3RpZmZuZXNzOwoKCU5SSFlfY2xhc3NKb2ludExpc3QoaW50IGRvZik7Cn07CgogCmNsYXNz
IE5SSFlfZW5kRWZmZWN0b3IKewogcHVibGljOgoJTV9WZWN0b3IgCXA7CglNX1ZlY3RvciAJYXhp
c1szXTsKCU1fTWF0cml4CUdCOwoJTV9RdWF0CQlxdWF0OwoKCWZsb2F0IAlDYWxjRXJyb3IoIE5S
SFlfZW5kRWZmZWN0b3IgKmVlLCBmbG9hdCB0V2VpZ2h0LCBmbG9hdCByV2VpZ2h0KTsKCXZvaWQg
CUludGVycG9sYXRlKE5SSFlfZW5kRWZmZWN0b3IgKmUxLCBOUkhZX2VuZEVmZmVjdG9yICplMiwg
ZmxvYXQgcik7Cgl2b2lkIAlTZXRPcmllbnRhdGlvbih2b2lkKTsKCXZvaWQgCUNvcHkoTlJIWV9l
bmRFZmZlY3RvciAqZSk7Cgl2b2lkIAlJbmZvKFR3aW5lIG5hbWUpOwp9OwoKIApjbGFzcyBOUkhZ
X0lua3lOb2RlCnsKICAgIGZsb2F0CQlfbWluVmFsdWVbSk5UX0xBU1RdLCBfbWF4VmFsdWVbSk5U
X0xBU1RdOwogICAgQk9PTEVBTgkJX2pvaW50TGltaXRzQWN0aXZlW0pOVF9MQVNUXTsKICAgIGZs
b2F0IAkJX3N0aWZmbmVzc1tKTlRfTEFTVF07CiAgICBCT09MRUFOCQlfam9pbnRGcmVlW0pOVF9M
QVNUXTsKICAgIGludAkJCV9qb2ludElkW0pOVF9MQVNUXTsKCnB1YmxpYzoKCiAgICBOUkhZX2Ns
YXNzVGhpbmcJKm5vZGVPYmplY3Q7CiAgICBNX01hdHJpeAkJaW5pdGlhbE5XOwkgCiAgICBNX01h
dHJpeAkJTlc7CSAKICAgIE1fTWF0cml4CQlOQjsJIAogICAgTV9NYXRyaXgJCUJOOwkgCiAgICBN
X01hdHJpeAkJTE47CSAKCiAgICBNX01hdHJpeAkJTmxvY2FsOwkgCiAgICBNX01hdHJpeAkJTk47
CSAKICAgIE1fTWF0cml4CQlPbG9jYWw7CQogICAgTV9NYXRyaXgJCU9sb2NhbEludjsJCgogICAg
ZmxvYXQJCW5vZGVMZW5ndGg7CSAgCiAgICBmbG9hdAkJZW5kRWZmZWN0b3JEaXN0OyAgCgogICAg
TV9WZWN0b3IJCXJvdDsKICAgIE1fVmVjdG9yCQl0cmFuOwogICAgTV9WZWN0b3IJCXNjYWxlOwoJ
CiAgICAJCU5SSFlfSW5reU5vZGUodm9pZCk7CiAgICBpbnQgCUdldERPRih2b2lkKTsKCiAgICBN
X1ZlY3RvciAJR2V0Q3VycmVudFBvc2l0aW9uKHZvaWQpOwogICAgTV9WZWN0b3IgCUdldFJvdGF0
aW9uQXhpcyhpbnQgYSk7CgogICAgQk9PTEVBTiAJU2V0VHJhbkRvZihCT09MRUFOICpqbnRGcmVl
KTsKICAgIEJPT0xFQU4gCVNldFJvdERvZihCT09MRUFOICpqbnRGcmVlKTsKICAgIEJPT0xFQU4g
CVNldExpbWl0cyhpbnQgYSwgZmxvYXQgbWluLCBmbG9hdCBtYXgpOwogICAgQk9PTEVBTiAJU2V0
VHJhbkxpbWl0cyhmbG9hdCAqbGltaXRzKTsKICAgIEJPT0xFQU4gCVNldFJvdExpbWl0cyhmbG9h
dCAqbGltaXRzKTsKICAgIEJPT0xFQU4gCVNldFRyYW5TdGlmZm5lc3MoZmxvYXQgKnN0aWZmbmVz
cyk7CiAgICBCT09MRUFOIAlTZXRSb3RTdGlmZm5lc3MoZmxvYXQgKnN0aWZmbmVzcyk7CiAgICBC
T09MRUFOIAlTZXRTdGlmZm5lc3MoaW50IGEsIGZsb2F0IHMpOwogICAgdm9pZAlTZXRKb2ludElk
KGludCBhLCBpbnQgaWQpIHsgX2pvaW50SWRbYV0gPSBpZDsgfQoKICAgIEJPT0xFQU4JR2V0Sm9p
bnRMaW1pdHNBY3RpdmUoaW50IGEpIHsgcmV0dXJuIF9qb2ludExpbWl0c0FjdGl2ZVthXTsgfQog
ICAgZmxvYXQJR2V0U3RpZmZuZXNzKGludCBhKSB7IHJldHVybiBfc3RpZmZuZXNzW2FdOyB9CiAg
ICBmbG9hdAlHZXRNaW5MaW1pdChpbnQgYSk7CiAgICBmbG9hdAlHZXRNYXhMaW1pdChpbnQgYSk7
CiAgICBmbG9hdCAJR2V0VmFsdWUoaW50IGEpOwogICAgZmxvYXQJR2V0TWluVmFsdWUoaW50IGEp
IHsgcmV0dXJuIF9taW5WYWx1ZVthXTsgfQogICAgZmxvYXQJR2V0TWF4VmFsdWUoaW50IGEpIHsg
cmV0dXJuIF9tYXhWYWx1ZVthXTsgfQogICAgaW50CQlHZXRKb2ludElkKGludCBhKSB7IHJldHVy
biBfam9pbnRJZFthXTsgfQogICAgQk9PTEVBTglHZXRKb2ludEZyZWUoaW50IGEpIHsgcmV0dXJu
IF9qb2ludEZyZWVbYV07IH0KCiAgICBUd2luZSAJRW5jb2RlRG9mKEJPT0xFQU4gZG9UcmFuKTsK
ICAgIEJPT0xFQU4gCURlY29kZURvZihUd2luZSBkb2YsIEJPT0xFQU4gKmpudEZyZWUpOwoKICAg
IFR3aW5lIAlHZXRKb2ludE5hbWUoaW50IGspOwoKfTsKCgplbnVtIE5SSFlfSW5reVNvbHZlclR5
cGUgewoKCUlOS1lTT0xWRVJfTk9ORSA9IDAsCglJTktZU09MVkVSX0ZXREpBQ09CSUFOLAoJSU5L
WVNPTFZFUl9DWUNMSUNERVNDRU5ULAoJSU5LWVNPTFZFUl9DWUNMSUNERVNDRU5UMiwKCUlOS1lT
T0xWRVJfTEFTVAp9OwoKZW51bSBOUkhZX0lua3lNb2RlVHlwZSB7IAoJSU5LWU1PREVfTk9ORSA9
IDAsCglJTktZTU9ERV9JSywKCUlOS1lNT0RFX0ZLLAoJSU5LWU1PREVfTUlYCn07CgplbnVtIE5S
SFlfSW5reURpc3BsYXlUeXBlIHsKCglJTktZRElTUExBWV9OT05FID0gMCwKCUlOS1lESVNQTEFZ
X05PUk1BTCwKCUlOS1lESVNQTEFZX0xJTkUsCglJTktZRElTUExBWV9GVUxMLAoJSU5LWURJU1BM
QVlfTEFTVAp9OwoKZW51bSBOUkhZX0lua3lQYXJlbnRUeXBlIHsKCglJTktZUEFSRU5UX05PTkUg
PSAwLAoJSU5LWVBBUkVOVF9GVUxMLAoJSU5LWVBBUkVOVF9UUkFOLAoJSU5LWVBBUkVOVF9ST1QK
fTsKCmV4dGVybiBOUkhZX2RlcGVuZFR5cGUgKk5SSFlfZGVwZW5kSW5rZXI7CmNsYXNzIE5SSFlf
aW5rZXI7CgpjbGFzcyBOUkhZX2NsYXNzSW5reTpwdWJsaWMgTlJIWV9jbGFzc09iamVjdCB7CnBy
aXZhdGU6CiAgICBCT09MRUFOIF9wcmVwYXJlZDsKCiAgICB0eXBlZGVmIE5SSFlfY2xhc3NPYmpl
Y3QgaW5oZXJpdGVkOwogICAgdHlwZWRlZiBOUkhZX2FscGhhbGlzdDxOUkhZX2NsYXNzSW5reT4g
YWxwaGFsaXN0OwogICAgZnJpZW5kIE5SSFlfbWF0Y2ggPE5SSFlfY2xhc3NJbmt5PjsKICAgIGZy
aWVuZCBOUkhZX2FscGhhbGlzdDxOUkhZX2NsYXNzSW5reT47Cgpwcm90ZWN0ZWQ6CiAgICB2b2lk
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplICgKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICk7CgogICAgTlJIWV9jbGFzc1RoaW5nCQkqX2Jhc2VOb2RlOwogICAgTlJIWV9j
bGFzc1RoaW5nCQkqX3N0YXJ0Tm9kZTsKICAgIE5SSFlfY2xhc3NUaGluZwkJKl9lbmROb2RlOwoK
ICAgIE1fVmVjdG9yCQkJX3RHb2FsOwkgCiAgICBNX1ZlY3RvcgkJCV9yR29hbDsgIAogICAgTV9W
ZWN0b3IJCQlfdEVuZDsJIAogICAgTV9WZWN0b3IJCQlfckVuZDsgICAKICAgIEJPT0xFQU4JCQlf
dHJhbkRvbmUsIF9yb3REb25lOwoKICAgIE1fTWF0cml4CQkJX0dCOwkgCgogICAgaW50CQkJCV9E
T0Y7CiAgICBOUkhZX0lua3lTb2x2ZXJUeXBlCQlfc29sdmVyOwogICAgTlJIWV9Jbmt5TW9kZVR5
cGUgCQlfaW5reU1vZGU7CiAgICBOUkhZX0lua3lEaXNwbGF5VHlwZQlfZGlzcGxheVR5cGU7CiAg
ICBOUkhZX0lua3lQYXJlbnRUeXBlCQlfcGFyZW50VHlwZTsKICAgIEJPT0xFQU4JCQlfYWN0aXZl
OwoKICAgIExpc3QgPE5SSFlfSW5reU5vZGUgKj4JX25vZGVzOwogICAgTGlzdCA8TlJIWV9Jbmt5
Tm9kZSAqPglfb2xkTm9kZXM7CiAgICBCT09MRUFOCQkJX0RpcnR5Tm9kZXM7CiAgICBCT09MRUFO
CQkJX3Nob3dJY29uOwkgCiAgICBmbG9hdAkJCV90b2xlcmFuY2U7CSAKICAgIGZsb2F0CQkJX3Jv
dFdlaWdodDsJIAogICAgZmxvYXQJCQlfdHJhbldlaWdodDsJIAogICAgZmxvYXQJCQlfaW5reVRy
YW47CSAKICAgIGZsb2F0CQkJX2lua3lSb3Q7CSAKICAgIGZsb2F0CQkJX2NvbnZlcmdlbmNlOwkg
CiAgICBpbnQJCQkJX21heFNvZnRTdGVwczsJIAogICAgaW50CQkJCV9tYXhJdGVyYXRpb25zOwkg
CgogICAgZmxvYXQgCQkJX3JTb2Z0U3RlcDsgIAogICAgZmxvYXQJCQlfYXhpc1dlaWdodE1pbkNs
YW1wLF9heGlzV2VpZ2h0TWF4Q2xhbXAsX2RBeGlzV2VpZ2h0Q2xhbXA7CgogICAgIAogICAgTlJI
WV9Jbmt5SmFjb2JpYW4JCV9KYWNvYmlhbjsKICAgIE5SSFlfY2xhc3NKb2ludExpc3QJCSpfam9p
bnRzOwogICAgaW50IAkJCV9hZGFwdGl2ZVN0ZXA7CiAgICBmbG9hdCAJCQlfYWxsb3dlZEVycm9y
OwogICAgZmxvYXQgCQkJX3N0YXJ0U3RlcFNpemUsX3N0ZXBTaXplOwoKICAgICAKICAgIEJPT0xF
QU4JCQlfdmVyYm9zZSwgX2Z1bGxWZXJib3NlOwogICAgaW50CQkJCV90ZXN0TWF4U3RlcCwgX2N1
cnJlbnRTdGVwOwogICAgTlJIWV9pbmtlciAgICAgICAgICAgICAgICAgICpfaW5rZXI7CgogICAg
dm9pZCBkZXRhY2goTlJIWV9kZXBlbmREYXRhICpkYXRhKTsKCnB1YmxpYzoKCgogICAgIAogICAg
TlJIWV9jbGFzc0lua3kgKAogICAgICAgIGNvbnN0IENIQVIgICAgICAgICAgKm5hbWUKICAgICAg
ICApOwogICAgTlJIWV9jbGFzc0lua3kgKAogICAgICAgIGNvbnN0IENIQVIgICAgICAgICAgKm5h
bWUsCiAgICAgICAgTlJIWV9jbGFzc0lua3kgICAgKmNsb25lRnJvbQogICAgICAgICk7CiAgICBO
UkhZX2NsYXNzSW5reSAoCiAgICAgICAgdm9pZCAKICAgICAgICApOwoKICAgIH5OUkhZX2NsYXNz
SW5reSAoCiAgICAgICAgdm9pZCAKICAgICAgICApOwoKICAgICAKICAgIHN0YXRpYyBjb25zdCBD
SEFSICAgICAgICAgICAgICAgKlByaW50U2VsZkNsYXNzbmFtZSAoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICApIHsgcmV0dXJuICgiTlJIWV9jbGFzc0lua3kiKTsgfQoKICAgICAKCiAgICBzdGF0
aWMgSU5UICAgICAgICAgICAgICAgICAgICAgIEdldFNlbGZDbGFzc1R5cGUgKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKSB7IHJldHVybiAoVEhJTkdfVFlQRV9JTktZKTsgfQoKICAgIHN0YXRp
YyBOUkhZX2J1bmNoPE5SSFlfY2xhc3NJbmt5PiAqRmluZCAoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSICAqbmFtZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApOwoKICAgICAKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlbmFtZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBDSEFSICAqbmV3TmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
OwoKICAgICAKICAgIE5SSFlfY2xhc3NUaGluZyAgICAgICAgICAgICAgICAgKkNsb25lICgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIgICpuZXdOYW1l
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgIAogICAgIAoKCgog
ICAgIAogICAgY29uc3QgQ0hBUiAgICAgICAgICAgICAgICAgICAgICAqUHJpbnREZXJpdmVkQ2xh
c3NPZlNlbGZUeXBlTmFtZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuICgi
aW5reSIpOyB9CgogICAgIAogICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRE
ZXJpdmVkQ2xhc3NPZlNlbGZUeXBlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1
cm4gKFRISU5HX1RZUEVfSU5LWSk7IH0KCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIERlc2NyaWJlQ3JlYXRlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERl
c2NyaWJlRGVsZXRlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs
YXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJl
T25GbGFnICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5S
SFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlRnVsbFN0
YXRlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlf
Q2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICk7CgoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVGdWxsU3Rh
dGVQYWNrZWQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Mg
TlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKTsKICAgIHZvaWQJCQkgICAgRGVzY3JpYmVNZSgKCQkJCSAgICAgICAgY2xhc3MgTlJI
WV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKCQkJCSAgICApOwoKICAgIHZvaWQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTGlzdElua3koRklMRSAqZnAsIGNvbnN0IExpc3Q8VHdpbmU+ICZscyk7
CgogICAgQk9PTEVBTiAgCQlMZWdhbENoYWluQ2hlY2sodm9pZCk7CiAgICBCT09MRUFOIAkJSGll
cmFyY2h5Q2hhbmdlZCh2b2lkKTsKICAgIEJPT0xFQU4gIAkJQnVpbGROb2RlTGlzdChMaXN0IDxO
UkhZX2NsYXNzVGhpbmcgKj4JKm5vZGVzKTsKICAgIEJPT0xFQU4gIAkJQnVpbGROb2RlTGlzdCh2
b2lkKTsKICAgIGludCAJCUJ1aWxkSm9pbnRJZHModm9pZCk7CgogICAgQk9PTEVBTiAJCVNldE5v
ZGVzKExpc3QgPE5SSFlfY2xhc3NUaGluZyAqPiBub2Rlcyk7CiAgICBCT09MRUFOIAkJU2V0U3Rh
cnROb2RlKE5SSFlfY2xhc3NUaGluZyAqc3RhcnQpOwogICAgQk9PTEVBTiAJCVNldEVuZE5vZGUo
TlJIWV9jbGFzc1RoaW5nICplbmQpOwogICAgaW50ICAgICAgICAgICAgICAgICBEZWxldGVQb3Nz
aWJsZU5vZGUodm9pZCAqdGhpbmcpOwogICAgQk9PTEVBTiAJCVNldFRvbGVyYW5jZShmbG9hdCB0
b2wpOwogICAgQk9PTEVBTiAJCVNldFRyYW5XZWlnaHQoZmxvYXQgdyk7CiAgICBCT09MRUFOIAkJ
U2V0Um90V2VpZ2h0KGZsb2F0IHcpOwogICAgQk9PTEVBTiAJCVNldFN0ZXBTaXplKGZsb2F0IHMp
OwogICAgQk9PTEVBTiAJCVNldEFsbG93ZWRFcnJvcihmbG9hdCBhKTsKICAgIEJPT0xFQU4JCVNl
dFNob3dJY29uKEJPT0xFQU4gcyk7CiAgICBCT09MRUFOCQlHZXRTaG93SWNvbih2b2lkKSB7IHJl
dHVybiBfc2hvd0ljb247IH0KICAgIEJPT0xFQU4gIAkJU2V0U29sdmVyKFR3aW5lIG5hbWUpOwog
ICAgQk9PTEVBTiAgCQlTZXREaXNwbGF5VHlwZShUd2luZSBuYW1lKTsKICAgIEJPT0xFQU4JCVNl
dFBhcmVudFR5cGUoVHdpbmUgbmFtZSk7CiAgICBCT09MRUFOCQlTZXRJbmt5TW9kZShUd2luZSBu
YW1lKTsKICAgIEJPT0xFQU4JCVNldENvbnZlcmdlbmNlKGZsb2F0IHQpOwogICAgQk9PTEVBTgkJ
U2V0U29mdFN0ZXBzKGludCBzKTsKICAgIEJPT0xFQU4JCVNldE1heEl0ZXJhdGlvbnMoaW50IG1p
KSB7IF9tYXhJdGVyYXRpb25zID0gbWk7IHJldHVybiAxIDsgfQogICAgdm9pZAkJU2V0QWN0aXZl
KEJPT0xFQU4gYSkgeyBfYWN0aXZlID0gYTsgfQogICAgdm9pZAkJU2V0VmVyYm9zZShCT09MRUFO
IHYpIHsgX3ZlcmJvc2UgPSB2OyB9OwogICAgQk9PTEVBTgkJU2V0QXhpc1dlaWdodENsYW1wKGZs
b2F0IG1pbiwgZmxvYXQgbWF4KTsKICAgIHZvaWQgCQlTZXRUZXN0TWF4U3RlcChmbG9hdCB0KSB7
IF90ZXN0TWF4U3RlcCA9IGludCh0KTsgfQoKICAgIFR3aW5lIAkJCVNvbHZlclR5cGUyTmFtZShO
UkhZX0lua3lTb2x2ZXJUeXBlIHMpOwogICAgTlJIWV9Jbmt5U29sdmVyVHlwZSAJTmFtZTJTb2x2
ZXJUeXBlKFR3aW5lIG5hbWUpOwogICAgVHdpbmUgCQkJRGlzcGxheVR5cGUyTmFtZShOUkhZX0lu
a3lEaXNwbGF5VHlwZSBzKTsKICAgIE5SSFlfSW5reURpc3BsYXlUeXBlCU5hbWUyRGlzcGxheVR5
cGUoVHdpbmUgbmFtZSk7CiAgICBUd2luZSAJCQlNb2RlVHlwZTJOYW1lKE5SSFlfSW5reU1vZGVU
eXBlIHMpOwogICAgTlJIWV9Jbmt5TW9kZVR5cGUJCU5hbWUyTW9kZVR5cGUoVHdpbmUgbmFtZSk7
CiAgICBUd2luZSAJCQlQYXJlbnRUeXBlMk5hbWUoTlJIWV9Jbmt5UGFyZW50VHlwZSBzKTsKICAg
IE5SSFlfSW5reVBhcmVudFR5cGUJCU5hbWUyUGFyZW50VHlwZShUd2luZSBuYW1lKTsKCiAgICBO
UkhZX0lua3lTb2x2ZXJUeXBlCQlHZXRTb2x2ZXJUeXBlKHZvaWQpIHsgcmV0dXJuIF9zb2x2ZXI7
IH0KICAgIE5SSFlfSW5reURpc3BsYXlUeXBlCUdldERpc3BsYXlUeXBlKHZvaWQpIHsgcmV0dXJu
IF9kaXNwbGF5VHlwZTsgfQogICAgTlJIWV9Jbmt5TW9kZVR5cGUJCUdldElua3lNb2RlKHZvaWQp
IHsgcmV0dXJuIF9pbmt5TW9kZTsgfQogICAgTlJIWV9Jbmt5UGFyZW50VHlwZQkJR2V0UGFyZW50
VHlwZSh2b2lkKSB7IHJldHVybiBfcGFyZW50VHlwZTsgfQogICAgQk9PTEVBTgkJCUdldEFjdGl2
ZSh2b2lkKSB7IHJldHVybiBfYWN0aXZlOyB9CgogICAgdm9pZAkJU2V0RGlydHlOb2Rlcyh2b2lk
KSB7IF9EaXJ0eU5vZGVzID0gMSA7IH0KICAgIGNvbnN0IExpc3QgPE5SSFlfSW5reU5vZGUgKj4J
JkdldE5vZGVzKHZvaWQpIHsgcmV0dXJuIF9ub2RlczsgfQoKICAgIE5SSFlfZGVwZW5kTWFzdGVy
ICAgKkdldElua2VyKCk7CgogICAgIAogICAgdm9pZAkJU29sdmVJbmt5KGZsb2F0IHZhbHVlKTsK
CiAgICB2b2lkIAkJSW5pdGlhbGl6ZU5vZGVzKE1fTWF0cml4IFdCKTsKICAgIHZvaWQJCUNhbGNX
b3JsZE5vZGVzKE1fTWF0cml4IFdCKTsKICAgIHZvaWQgCQlDYWxjTm9kZUxlbmd0aCh2b2lkKTsK
CiAgICBNX1ZlY3Rvck4gCQlHZXRKb2ludHModm9pZCk7CiAgICB2b2lkICAJCVNldEpvaW50cyhN
X1ZlY3Rvck4gam9pbnQpOwogICAgdm9pZCAgCQlTZXRKb2ludHMoTV9WZWN0b3JOIGpvaW50LCBp
bnQgZnJvbU5vZGVJZCk7CiAgICBNX1ZlY3RvciAJCUdldEF4aXMoaW50IGZyb21Ob2RlSWQsIGlu
dCBhKTsKCiAgICB2b2lkIAkJQ2FsY0VuZEVmZmVjdG9yKHZvaWQpOwogICAgdm9pZCAJCUNhbGNF
bmRFZmZlY3RvcihOUkhZX2VuZEVmZmVjdG9yICplZSk7CiAgICB2b2lkIAkJQ2FsY0VuZEVmZmVj
dG9yRGVzdChOUkhZX2VuZEVmZmVjdG9yICplRGVzdCwgTlJIWV9lbmRFZmZlY3RvciAqZUN1cik7
CgoKICAgIGludAkJCUdldE5vZGVJbmRleChOUkhZX2NsYXNzVGhpbmcgKm8pOwogICAgTlJIWV9J
bmt5Tm9kZQkqR2V0Tm9kZShOUkhZX2NsYXNzVGhpbmcgKm8pOwogICAgTlJIWV9Jbmt5Tm9kZQkq
R2V0Tm9kZShpbnQgaW5kZXgpIHsgcmV0dXJuIF9ub2RlcyhpbmRleCk7IH0KICAgIE1fTWF0cml4
IAkJR2V0Tm9kZUxvY2FsTWF0cml4KE5SSFlfY2xhc3NUaGluZyAqbyk7CgogICAgQk9PTEVBTiAg
ICAgICAgICAgICBTbmFwSm9pbnRzKCBmbG9hdCBmcmFtZSApOwogICAgQk9PTEVBTiAJCVNuYXBK
b2ludHMoIHZlY3RvcjwgTlJIWV9SRUFMX0ZSQU5HRSA+JiwKCQkJCSAgICBOUkhZX2NoYW5PcE1v
ZGUgY2hhbk9wTW9kZSApOwogICAgQk9PTEVBTiAJCVNuYXBHb2FsKCB2ZWN0b3I8IE5SSFlfUkVB
TF9GUkFOR0UgPiYsCgkJCQkgIE5SSFlfY2hhbk9wTW9kZSBjaGFuT3BNb2RlICk7CgogICAgZmxv
YXQgCQlDYWxjQXhpc1dlaWdodChmbG9hdCB2MSwgZmxvYXQgdjIpOwoKICAgICAKICAgIHZvaWQg
CQlTb2x2ZUN5Y2xpY0Rlc2NlbnQodm9pZCk7CgogICAgQk9PTEVBTiAJCVNvbHZlTm9kZShpbnQg
bmlkLCBNX1ZlY3Rvck4gKmpvaW50cywgTlJIWV9lbmRFZmZlY3RvciAqZUN1ciwgTlJIWV9lbmRF
ZmZlY3RvciAqZURlc3QsIGZsb2F0ICpqbnRFcnJvciwgQk9PTEVBTiBpbml0aWFsU3RlcHBpbmcp
OwogICAgQk9PTEVBTiAJCVNvbHZlTGFzdE5vZGUoaW50IG5pZCwgTV9WZWN0b3JOICpqb2ludHMs
IE5SSFlfZW5kRWZmZWN0b3IgKmVDdXIsIE5SSFlfZW5kRWZmZWN0b3IgKmVEZXN0LCBmbG9hdCAq
am50RXJyb3IsIEJPT0xFQU4gaW5pdGlhbFN0ZXBwaW5nKTsKICAgIGZsb2F0IAkJU29sdmVSb3Rh
dGlvbkpvaW50KGludCBuaWQsIGludCBrLCBOUkhZX2VuZEVmZmVjdG9yICplQ3VyLCBOUkhZX2Vu
ZEVmZmVjdG9yICplRGVzdCk7CiAgICBmbG9hdCAJCVNvbHZlVHJhbnNsYXRpb25Kb2ludChpbnQg
bmlkLCBpbnQgaywgTlJIWV9lbmRFZmZlY3RvciAqZUN1ciwgTlJIWV9lbmRFZmZlY3RvciAqZURl
c3QpOwoKCgogICAgIAogICAgdm9pZCAJCVNvbHZlRm9yd2FyZEphY29iaWFuKHZvaWQpOwogICAg
dm9pZCAJCU1pZFBvaW50U3RlcChmbG9hdCBkdCwgc2hvcnQgc3RlcFR5cGUpOwogICAgQk9PTEVB
TiAJCUNhbGNTdGVwKGZsb2F0IGR0KTsKICAgIHZvaWQgIAkJUmV3aW5kTWlkUG9pbnQodm9pZCk7
CiAgICB2b2lkICAJCVJld2luZFN0ZXAodm9pZCk7CiAgICBmbG9hdCAJCUNhbGN1bGF0ZVN0ZXBF
cnJvcih2b2lkKTsKCiAgICB2b2lkICAJCUNhbGNKYWNvYmlhbih2b2lkKTsKICAgIE1fVmVjdG9y
TiAgCQlNdWx0SmFjb2JpYW4oTV9WZWN0b3JOIGZvcmNlKTsKCiAgICBNX1ZlY3Rvck4gCQlDYWxj
RXJyb3JTdGF0ZShmbG9hdCAqdEVyciwgZmxvYXQgKnJFcnIpOwogICAgTV9WZWN0b3JOIAkJQ2Fs
Y0ZvcmNlKHZvaWQpOwogICAgTV9WZWN0b3JOIAkJQ2FsY0RlbHRhSm9pbnRzKHZvaWQpOwogICAg
dm9pZCBwb3N0V29ybGRUcmF2ZXJzZSgpOwp9OwoKIAoKIAoKIyAxOSAiaC9ucmh5X3RlbXBsYXRl
TWF0Y2guYyIgMgoKIyAxICJoL25yaHlfY2xhc3NLbGlzdC5oIiAxCgogCgoKCgoKCgoKCgoKCgoK
CgoKCgwKIAoKCgogCgoKIAoKCgoKCiAKCgogCiAKIAoKCgogCnRlbXBsYXRlIDxjbGFzcyBUeXBl
PiBjbGFzcyBOUkhZX21hdGNoOwp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4gY2xhc3MgTlJIWV9hbHBo
YWxpc3Q7CgplbnVtIE5SSFlfS2xpc3RUeXBlIHsKICAgIEtMSVNUX0JTUExJTkUsCiAgICBLTElT
VF9MSU5FQVIsCiAgICBLTElTVF9URU5TRURCU1BMSU5FLAogICAgS0xJU1RfQ0FSRElOQUwsCiAg
ICBLTElTVF9UQVUsCiAgICBLTElTVF9CRVRBLAogICAgS0xJU1RfQkVaSUVSLAogICAgS0xJU1Rf
SEVSTUlURQp9OwoKZW51bSBOUkhZX1BhdGhUeXBlIHsKICAgIFBBVEhfT0ZGLAogICAgUEFUSF9C
QVNFLAogICAgUEFUSF9LTk9UCn07CgpjbGFzcyBOUkhZX1NwbGluZU5vZGFsOwpjbGFzcyBOUkhZ
X1NwbGluZVBhdGg7CgpzdHJ1Y3QgTlJIWV9jbGFzc0tsaXN0OnB1YmxpYyBOUkhZX2NsYXNzT2Jq
ZWN0IHsKICAgIHR5cGVkZWYgTlJIWV9jbGFzc09iamVjdCBpbmhlcml0ZWQ7CiAgICB0eXBlZGVm
IE5SSFlfYWxwaGFsaXN0PE5SSFlfY2xhc3NLbGlzdD4gYWxwaGFsaXN0OwogICAgZnJpZW5kIE5S
SFlfbWF0Y2ggPE5SSFlfY2xhc3NLbGlzdD47CiAgICBmcmllbmQgTlJIWV9hbHBoYWxpc3Q8TlJI
WV9jbGFzc0tsaXN0PjsKCiAgICB2b2lkIGRldGFjaChOUkhZX2RlcGVuZERhdGEgKik7CnByb3Rl
Y3RlZDoKICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplICgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICB2b2lkIHByZVRyYXZlcnNlKGZsb2F0IGZy
YW1lKTsKCnB1YmxpYzoKCiAgICAgCiAgICBOUkhZX2NsYXNzS2xpc3QgKAogICAgICAgIGNvbnN0
IENIQVIgICAgICAgICAgKm5hbWUKICAgICAgICApOwogICAgTlJIWV9jbGFzc0tsaXN0ICgKICAg
ICAgICBjb25zdCBDSEFSICAgICAgICAgICpuYW1lLAogICAgICAgIE5SSFlfY2xhc3NLbGlzdCAq
Y2xvbmVGcm9tCiAgICAgICAgKTsKICAgIE5SSFlfY2xhc3NLbGlzdCAoCiAgICAgICAgdm9pZCAK
ICAgICAgICApOwoKICAgIH5OUkhZX2NsYXNzS2xpc3QgKAogICAgICAgIHZvaWQgCiAgICAgICAg
KTsKCiAgICAgCiAgICBzdGF0aWMgY29uc3QgQ0hBUiAgICAgICAgICAgICAgICpQcmludFNlbGZD
bGFzc25hbWUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAoIk5SSFlfY2xh
c3NLbGlzdCIpOyB9CgogICAgIAoKICAgIHN0YXRpYyBJTlQgICAgICAgICAgICAgICAgICAgICAg
R2V0U2VsZkNsYXNzVHlwZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuIChU
SElOR19UWVBFX0tMSVNUKTsgfQoKICAgIHN0YXRpYyBOUkhZX2J1bmNoPE5SSFlfY2xhc3NLbGlz
dD4gKkZpbmQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Q0hBUiAgKm5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICB2
b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5hbWUgKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUiAgKm5ld05hbWUKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBOUkhZX2NsYXNzVGhpbmcgICAgICAgICAg
ICAgICAgICpDbG9uZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBDSEFSICAqbmV3TmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
OwoKICAgICAKICAgIGNvbnN0IENIQVIgICAgICAgICAgICAgICAgICAgICAgKlByaW50RGVyaXZl
ZENsYXNzT2ZTZWxmVHlwZU5hbWUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVy
biAoImtsaXN0Iik7IH0KCiAgICAgCiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdldERlcml2ZWRDbGFzc09mU2VsZlR5cGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7
IHJldHVybiAoVEhJTkdfVFlQRV9LTElTVCk7IH0KCiAgICAgCiAgICAgCgogICAgIAoKICAgICAK
CiAgICAgCiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNldFNvbGlkICgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBuZXdT
b2xpZFZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1cm4g
KDAgKTsgfQogICAgIAogICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRTb2xp
ZCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuICgoUkVBTCkwLjApOyB9CiAg
ICAgCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlQ3JlYXRlICgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NE
ZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cgog
ICAgIAogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZURlbGV0ZSAo
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNz
RGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoK
ICAgICAKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVGdWxsU3Rh
dGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9D
bGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVGdWxsU3RhdGVQ
YWNrZWQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJI
WV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKTsKCiAgICAgCgogICAgTGlzdCA8TlJIWV9jbGFzc1RoaW5nICo+ICAgICAgICBEZWZvcm1T
ZXQ7CiAgICBOUkhZX0tsaXN0VHlwZSAgICAgICAgICAgICAgICAgIEtsaXN0VHlwZTsKICAgIE5S
SFlfU3BsaW5lTm9kYWwgICAgICAgICAgICAgICAgKiBTcGxpbmVOb2RhbDsKICAgIE5SSFlfU3Bs
aW5lUGF0aCAgICAgICAgICAgICAgICAgKiBTcGxpbmVQYXRoOwogICAgUkVBTCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTcGxpbmVCaWFzOwogICAgUkVBTCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTcGxpbmVUZW5zaW9uOwogICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTcGxpbmVMZW5ndGhTdWJkaXZpc2lvbjsKICAgIE5SSFlfUGF0aFR5cGUgICAgICAgICAgICAg
ICAgICAgUGF0aFR5cGU7CiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc29s
dXRpb247CiAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIFVuaWZvcm1Lbm90czsK
CiAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNwbGluZURvTWFwTGVuZ3RoOwog
ICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGxpbmVLTGVuZ3RoUHJlc2VydmU7
CiAgICBSRUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwbGluZUtVTGVuZ3RoUHJlc2Vy
dmU7CiAgICBSRUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwbGluZUtEaXN0cmlidXRl
TGVuZ3RoOwogICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGxpbmVLU3RhcnRW
ZWxvY2l0eTsKICAgIFJFQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BsaW5lS0VuZFZl
bG9jaXR5OwoKICAgIEJPT0xFQU4gUmVtb3ZlRGVmb3JtICgKICAgICAgICBjb25zdCBMaXN0PE5S
SFlfY2xhc3NPYmplY3QgKj4gJm9iamVjdHMsCiAgICAgICAgQk9PTEVBTiBmb3JjZQogICAgICAg
ICk7CiAgICBCT09MRUFOIEFwcGVuZERlZm9ybSAoCiAgICAgICAgY29uc3QgTGlzdDxOUkhZX2Ns
YXNzT2JqZWN0ICo+ICZvYmplY3RzCiAgICAgICAgKTsKICAgIEJPT0xFQU4gSW5zZXJ0QmVmb3Jl
RGVmb3JtICgKICAgICAgICBjb25zdCBMaXN0PE5SSFlfY2xhc3NPYmplY3QgKj4gJmluc2VydHMs
CiAgICAgICAgY29uc3QgTGlzdDxOUkhZX2NsYXNzT2JqZWN0ICo+ICZiZWZvcmVzLAogICAgICAg
IEJPT0xFQU4gZm9yY2UKICAgICAgICApOwogICAgQk9PTEVBTiBJbnNlcnRBZnRlckRlZm9ybSAo
CiAgICAgICAgY29uc3QgTGlzdDxOUkhZX2NsYXNzT2JqZWN0ICo+ICZpbnNlcnRzLAogICAgICAg
IGNvbnN0IExpc3Q8TlJIWV9jbGFzc09iamVjdCAqPiAmYWZ0ZXJzLAogICAgICAgIEJPT0xFQU4g
Zm9yY2UKICAgICAgICApOwogICAgQk9PTEVBTiBTZXRUeXBlICgKICAgICAgICBjb25zdCBUd2lu
ZSAmIHR5cGVUd2luZQogICAgICAgICk7CiAgICBCT09MRUFOIFNldFRlbnNpb24gKAogICAgICAg
IFJFQUwgdGVuc2lvbgogICAgICAgICk7CiAgICBCT09MRUFOIFNldEJpYXMgKAogICAgICAgIFJF
QUwgYmlhcwogICAgICAgICk7CiAgICBCT09MRUFOIFNldExlbmd0aFN1YmRpdmlzaW9uICgKICAg
ICAgICBJTlQgbGVuZ3RoU3ViZGl2aXNpb24KICAgICAgICApOwogICAgQk9PTEVBTiBTZXRQYXRo
VHlwZSAoCiAgICAgICAgY29uc3QgVHdpbmUgJiBwYXRoVHlwZQogICAgICAgICk7CiAgICBUd2lu
ZSBHZXRQYXRoVHlwZSAoKTsKICAgIEJPT0xFQU4gU2V0UmVzb2x1dGlvbiAoCiAgICAgICAgSU5U
IHJlc29sdXRpb24KICAgICAgICApOwogICAgQk9PTEVBTiBTZXRVbmlmb3JtS25vdHMgKAogICAg
ICAgIEJPT0xFQU4gdW5pZm9ybUtub3RzCiAgICAgICAgKTsKICAgIE1fTWF0cml4IERlc3RpbmF0
aW9uTWF0cml4IChSRUFMIHUpOwogICAgdm9pZCAgUmVzZXRTcGxpbmUgKCk7CiAgICBSRUFMIEZp
bmRVIChSRUFMIGluTCk7CiAgICBSRUFMIEZpbmRMIChSRUFMIGluVSk7CiAgICBSRUFMIEdldFNw
bGluZUxlbmd0aCAoKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdEts
aXN0KEZJTEUgKmZwLCBjb25zdCBMaXN0PFR3aW5lPiAmbHMpOwogICAgCn07CgogCgogCgojIDIw
ICJoL25yaHlfdGVtcGxhdGVNYXRjaC5jIiAyCgoKCgoKCiMgMSAiaC9ucmh5X2NsYXNzTXVzY2xl
LmgiIDEKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4gY2xh
c3MgTlJIWV9tYXRjaDsKdGVtcGxhdGUgPGNsYXNzIFR5cGU+IGNsYXNzIE5SSFlfYWxwaGFsaXN0
OwoKY2xhc3MgTlJIWV9NdXNjbGVBcHBseQp7CiBwcm90ZWN0ZWQ6CiAgICBOUkhZX2NsYXNzTXVz
Y2xlIAkqX211c2NsZTsKCiAgICBNX1ZlY3RvciBfb3JpZ2luUG9zOwogICAgTV9WZWN0b3IgX2lu
c2VydFBvczsKICAgIE1fTWF0cml4IF9vcmlnaW5NYXRyaXg7CiAgICBNX01hdHJpeCBfaW52ZXJz
ZU9yaWdpbk1hdHJpeDsKCiBwdWJsaWM6CiAgICAJCU5SSFlfTXVzY2xlQXBwbHkodm9pZCkgeyBf
bXVzY2xlID0gX19udWxsIDt9CiAgICAJCU5SSFlfTXVzY2xlQXBwbHkoTlJIWV9jbGFzc011c2Ns
ZSAqbSkgeyBfbXVzY2xlID0gbTt9CiAgICB2aXJ0dWFsCXZvaWQgCUNhbGNPcmlnaW5BbmRJbnNl
cnRQb3Modm9pZCk7CiAgICB2aXJ0dWFsCXZvaWQgCVVwZGF0ZSh2b2lkKSB7IH07CiAgICB2aXJ0
dWFsCXZvaWQgCURyYXdJY29uKHZvaWQpICB7IH07CgogICAgdm9pZAlTZXRNdXNjbGUoTlJIWV9j
bGFzc011c2NsZSAqbSkgeyBfbXVzY2xlID0gbTsgfQp9OwoKCmNsYXNzIE5SSFlfYmFsbE11c2Ns
ZSA6IHB1YmxpYyBOUkhZX011c2NsZUFwcGx5CnsKICAgIE1fVmVjdG9yIF9iZWxseVBvczsKICAg
IE1fVmVjdG9yIF9iZWxseVNjYWxlOwogICAgTV9NYXRyaXggX2JlbGx5TWF0OwoKIHB1YmxpYzoK
ICAgIAkJTlJIWV9iYWxsTXVzY2xlKHZvaWQpIHsgX211c2NsZSA9IF9fbnVsbCA7fQoKCXZvaWQg
CVVwZGF0ZSh2b2lkKTsKCXZvaWQgCURyYXdJY29uKHZvaWQpOwp9OwoKCmNsYXNzIE5SSFlfbXVz
Y2xlRGlzYwp7CiAgICBNX01hdHJpeCAJX21hdHJpeDsKICAgIE1fVmVjdG9yIAlfcG9zOwoKICAg
IE1fVmVjdG9yMglfZGlzY1NpemU7CgpwdWJsaWM6CgogICAgdm9pZCBTZXRNYXRyaXgoY29uc3Qg
TV9NYXRyaXggJm0pIHsgX21hdHJpeCA9IG07IH0KICAgIE1fTWF0cml4ICZHZXRNYXRyaXgodm9p
ZCkgeyByZXR1cm4gX21hdHJpeDsgfQoKICAgIHZvaWQgU2V0TWF0cml4QW5kRGVjb21wKGNvbnN0
IE1fTWF0cml4ICZtKSB7IF9tYXRyaXggPSBtOyBfcG9zLnggPSBtWzNdWzBdOyBfcG9zLnkgPSBt
WzNdWzFdOyAgX3Bvcy56ID0gbVszXVsyXTsgfQoKICAgIHZvaWQgU2V0UG9zKGNvbnN0IE1fVmVj
dG9yICZwKSB7IF9wb3MgPSBwOyB9CiAgICBNX1ZlY3RvciAmR2V0UG9zKHZvaWQpIHsgcmV0dXJu
IF9wb3M7IH0KCiAgICB2b2lkIFNldERpc2MoY29uc3QgTV9WZWN0b3IyICZkaXNjKSB7IF9kaXNj
U2l6ZSA9IGRpc2M7IH0KICAgIE1fVmVjdG9yMiAmR2V0RGlzYyh2b2lkKSB7IHJldHVybiBfZGlz
Y1NpemU7IH0KfTsKCgoKCgpjbGFzcyBOUkhZX211c2NsZUtub3QKewogICAgTV9NYXRyaXggCV9t
YXRyaXg7CiAgICBNX1ZlY3RvciAJX3BvczsKICAgIE1fUXVhdCAJX3F1YXQ7CgpwdWJsaWM6Cgog
ICAgdm9pZCBTZXRNYXRyaXgoY29uc3QgTV9NYXRyaXggJm0pIHsgX21hdHJpeCA9IG07IH0KICAg
IE1fTWF0cml4ICZHZXRNYXRyaXgodm9pZCkgeyByZXR1cm4gX21hdHJpeDsgfQoKICAgIHZvaWQg
U2V0TWF0cml4QW5kRGVjb21wKGNvbnN0IE1fTWF0cml4ICZtKTsKCiAgICB2b2lkIFNldFBvcyhj
b25zdCBNX1ZlY3RvciAmcCkgeyBfcG9zID0gcDsgfQogICAgTV9WZWN0b3IgJkdldFBvcyh2b2lk
KSB7IHJldHVybiBfcG9zOyB9CgogICAgdm9pZCBTZXRRdWF0KGNvbnN0IE1fUXVhdCAmcSkgeyBf
cXVhdCA9IHE7IH0KICAgIE1fUXVhdCAmR2V0UXVhdCh2b2lkKSB7IHJldHVybiBfcXVhdDsgfQp9
OwoKCgpjbGFzcyBOUkhZX3R1YmVNdXNjbGUgOiBwdWJsaWMgTlJIWV9NdXNjbGVBcHBseQp7CiAg
ICB2ZWN0b3IgPE5SSFlfbXVzY2xlS25vdD4gX2tub3RQb2ludDsKICAgIHZlY3RvciA8TlJIWV9t
dXNjbGVEaXNjPiBfZGlzYzsKCiAgICB2ZWN0b3IgPE1fVmVjdG9yPiBfZHJhd1BvaW50OwogICAg
dmVjdG9yIDxmbG9hdD4gX2xlbmd0aDsKICAgIGZsb2F0CV91U3RlcDsKCiBwdWJsaWM6CgkgICAg
CU5SSFlfdHViZU11c2NsZSh2b2lkKSB7IF9tdXNjbGUgPSBfX251bGwgO30KICAgIHZvaWQgCUNh
bGNPcmlnaW5BbmRJbnNlcnRQb3Modm9pZCk7CiAgICB2b2lkIAlVcGRhdGUodm9pZCk7CiAgICB2
b2lkIAlEcmF3SWNvbih2b2lkKTsKCiAgICB2b2lkIAlDYWxjTGVuZ3RoKHZvaWQpOwogICAgZmxv
YXQgCUZpbmRVKGZsb2F0IHJsKTsKCiAgICB2b2lkIAlHZXRNYXRyaXgoZmxvYXQgcmwsIE1fTWF0
cml4ICZNKTsKICAgIE1fVmVjdG9yIAlHZXRQb3NpdGlvbkZyb21MZW5ndGgoZmxvYXQgcmwpOwog
ICAgTV9WZWN0b3IgCUdldFBvc2l0aW9uKGZsb2F0IHVpKTsKICAgIE1fUXVhdCAJR2V0UXVhdChm
bG9hdCB1aSk7Cgp9OwoKCmVudW0gTVVTQ0xFVHlwZSB7CgoJTVVTQ0xFX05vbmUgPSAwLAoKCU1V
U0NMRV9CYWxsLAoJTVVTQ0xFX011bHRpQmFsbCwKCU1VU0NMRV9UdWJlLAp9OwoKY2xhc3MgTlJI
WV9jbGFzc011c2NsZSA6IHB1YmxpYyBOUkhZX2NsYXNzT2JqZWN0IHsKcHJpdmF0ZToKICAgIHR5
cGVkZWYgTlJIWV9jbGFzc09iamVjdCBpbmhlcml0ZWQ7CiAgICB0eXBlZGVmIE5SSFlfYWxwaGFs
aXN0PE5SSFlfY2xhc3NNdXNjbGU+IGFscGhhbGlzdDsKICAgIGZyaWVuZCBOUkhZX21hdGNoIDxO
UkhZX2NsYXNzTXVzY2xlPjsKICAgIGZyaWVuZCBOUkhZX2FscGhhbGlzdDxOUkhZX2NsYXNzTXVz
Y2xlPjsKCiAgICB2b2lkIGluaXRpYWxpemUoKTsKCnByb3RlY3RlZDoKCiAgICBNVVNDTEVUeXBl
CQlfbXVzY2xlVHlwZTsKICAgIE5SSFlfY2xhc3NUaGluZyAJKl9pbnNlcnRpb247CiAgICB2ZWN0
b3IgPE5SSFlfY2xhc3NUaGluZyAqPiBfa25vdHM7CiAgICBOUkhZX011c2NsZUFwcGx5IAkqX211
c2NsZUFwcGx5OwoKICAgIGZsb2F0IAlfdm9sdW1lOwogICAgTV9WZWN0b3IyIAlfaURpc2MsIF9v
RGlzYzsKICAgIGZsb2F0IAlfcmF0aW87CgogICAgZmxvYXQgCV90ZW5zaW9uQnVsZ2U7CgogICAg
ZmxvYXQJX3RlbmRvbkluc2VydCwgX3RlbmRvbk9yaWdpbjsKCnB1YmxpYzoKCiAgICAgCiAgICAg
CiAgICBOUkhZX2NsYXNzTXVzY2xlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGludCBjaGlsZFR5
cGUpOwoKICAgICAKICAgIE5SSFlfY2xhc3NNdXNjbGUoY29uc3QgY2hhciAqbmFtZSk7CiAgICBO
UkhZX2NsYXNzTXVzY2xlKGNvbnN0IGNoYXIgKm5hbWUsIE5SSFlfY2xhc3NNdXNjbGUgKmNsb25l
RnJvbSk7CiAgICBOUkhZX2NsYXNzTXVzY2xlKCk7CiAgICB+TlJIWV9jbGFzc011c2NsZSgpOwoK
ICAgICAKICAgIHN0YXRpYyBjb25zdCBDSEFSICAgICAgICAgICAgICAgKlByaW50U2VsZkNsYXNz
bmFtZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuICgiTlJIWV9jbGFzc011
c2NsZSIpOyB9CgogICAgIAoKICAgIHN0YXRpYyBJTlQgICAgICAgICAgICAgICAgICAgICAgR2V0
U2VsZkNsYXNzVHlwZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuIChUSElO
R19UWVBFX01VU0NMRSk7IH0KCiAgICBzdGF0aWMgTlJIWV9idW5jaDxOUkhZX2NsYXNzTXVzY2xl
PiAqRmluZCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBD
SEFSICAqbmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgIAog
ICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuYW1lICgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIgICpuZXdOYW1lCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgIAogICAgTlJIWV9jbGFzc1RoaW5n
ICAgICAgICAgICAgICAgICAqQ2xvbmUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgQ0hBUiAgKm5ld05hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKTsKCiAgICAgCiAgICAgCgoKCiAgICAgCiAgICBjb25zdCBDSEFSICAgICAgICAg
ICAgICAgICAgICAgICpQcmludERlcml2ZWRDbGFzc09mU2VsZlR5cGVOYW1lICgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICkgeyByZXR1cm4gKCJtdXNjbGUiKTsgfQoKICAgICAKICAgIElOVCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0RGVyaXZlZENsYXNzT2ZTZWxmVHlwZSAoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuIChUSElOR19UWVBFX01VU0NMRSk7IH0K
CgogICAgIAogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUNyZWF0
ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0Ns
YXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
OwoKICAgICAKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVEZWxl
dGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9D
bGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KTsKCiAgICAgCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlRnVs
bFN0YXRlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5S
SFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICk7CgogICAgIAogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmli
ZUZ1bGxTdGF0ZVBhY2tlZCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApOwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlz
dE11c2NsZShGSUxFICpmcCwgY29uc3QgTGlzdDxUd2luZT4gJmxzKTsKCgogICAgdm9pZCAJcG9z
dFdvcmxkVHJhdmVyc2UgKCk7CgogICAgQk9PTEVBTiAJU2V0SW5zZXJ0aW9uKE5SSFlfY2xhc3NU
aGluZyAqaW5zZXJ0aW9uTm9kZSk7CiAgICBOUkhZX2NsYXNzVGhpbmcgKkdldEluc2VydGlvbih2
b2lkKSB7IHJldHVybiBfaW5zZXJ0aW9uOyB9CgogICAgQk9PTEVBTiAJU2V0S25vdHModmVjdG9y
IDxOUkhZX2NsYXNzVGhpbmcgKj4gJmtub3RzKTsKICAgIHZlY3RvciA8TlJIWV9jbGFzc1RoaW5n
ICo+ICZHZXRLbm90cyh2b2lkKSB7IHJldHVybiBfa25vdHM7IH0KCiAgICB2b2lkIAlTZXRUZW5k
b25JbnNlcnQoZmxvYXQgbGVuZ3RoKSB7IF90ZW5kb25JbnNlcnQgPSBsZW5ndGg7IH0KICAgIHZv
aWQgCVNldFRlbmRvbk9yaWdpbihmbG9hdCBsZW5ndGgpICB7IF90ZW5kb25PcmlnaW4gPSBsZW5n
dGg7IH0KICAgIGZsb2F0IAlHZXRUZW5kb25JbnNlcnQodm9pZCkgeyByZXR1cm4gX3RlbmRvbklu
c2VydDsgfQogICAgZmxvYXQgCUdldFRlbmRvbk9yaWdpbih2b2lkKSAgeyByZXR1cm4gX3RlbmRv
bk9yaWdpbjsgfQoKCiAgICB2b2lkIAlTZXRWb2x1bWUoZmxvYXQgdikgeyBfdm9sdW1lID0gdjsg
fQogICAgdm9pZCAJU2V0UmF0aW8oZmxvYXQgcikgeyBfcmF0aW8gPSByOyB9CiAgICB2b2lkIAlT
ZXRUZW5zaW9uQnVsZ2UoZmxvYXQgdGIpIHsgX3RlbnNpb25CdWxnZSA9IHRiOyB9CiAgICB2b2lk
CVNldE9yaWdpbkRpc2MoY29uc3QgTV9WZWN0b3IyICZkKSB7IF9vRGlzYyA9IGQ7IH0JCiAgICB2
b2lkCVNldEluc2VydERpc2MoY29uc3QgTV9WZWN0b3IyICZkKSB7IF9pRGlzYyA9IGQ7IH0JCgog
ICAgZmxvYXQgCUdldFZvbHVtZSh2b2lkKSB7IHJldHVybiBfdm9sdW1lOyB9CiAgICBmbG9hdCAJ
R2V0UmF0aW8odm9pZCkgeyByZXR1cm4gX3JhdGlvOyB9CiAgICBmbG9hdCAJR2V0VGVuc2lvbkJ1
bGdlKHZvaWQpIHsgcmV0dXJuIF90ZW5zaW9uQnVsZ2U7IH0KICAgIE1fVmVjdG9yMgkmR2V0T3Jp
Z2luRGlzYyh2b2lkKSB7IHJldHVybiBfb0Rpc2M7IH0JCiAgICBNX1ZlY3RvcjIJJkdldEluc2Vy
dERpc2Modm9pZCkgeyByZXR1cm4gX2lEaXNjOyB9CQoKICAgIHZvaWQgIAlEcmF3SWNvbih2b2lk
KSB7IGlmIChfbXVzY2xlQXBwbHkpIF9tdXNjbGVBcHBseS0+RHJhd0ljb24oKTsgfQoKICAgIHZv
aWQJCVNldE11c2NsZVR5cGUgKE1VU0NMRVR5cGUgdHlwZSk7IAogICAgTVVTQ0xFVHlwZQkJR2V0
TXVzY2xlVHlwZSAodm9pZCkgeyByZXR1cm4gX211c2NsZVR5cGU7IH0KICAgIFR3aW5lIAkJR2V0
TXVzY2xlVHlwZU5hbWUoTVVTQ0xFVHlwZSBkKTsKICAgIE1VU0NMRVR5cGUgIAlHZXRNdXNjbGVU
eXBlRnJvbU5hbWUoVHdpbmUgbmFtZSk7CgogICAgTlJIWV9NdXNjbGVBcHBseSAJKkdldE11c2Ns
ZUFwcGx5ICh2b2lkKSB7IHJldHVybiBfbXVzY2xlQXBwbHk7IH0KCn07CgogCgogCgojIDI2ICJo
L25yaHlfdGVtcGxhdGVNYXRjaC5jIiAyCgoKIyAxICJoL25yaHlfY2xhc3NSb290LmgiIDEKCiAK
CgoKCgoKCgoKCgoKCgoKCgoMCiAKCgoKIAoKCiAKCgoKCgogCgoKIAogCiAKCiAKdGVtcGxhdGUg
PGNsYXNzIFR5cGU+IGNsYXNzIE5SSFlfbWF0Y2g7CnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBjbGFz
cyBOUkhZX2FscGhhbGlzdDsKCnN0cnVjdCBOUkhZX2NsYXNzUm9vdDpwdWJsaWMgTlJIWV9jbGFz
c1RoaW5nIHsKcHJpdmF0ZToKICAgIHR5cGVkZWYgTlJIWV9jbGFzc1RoaW5nIGluaGVyaXRlZDsK
ICAgIHR5cGVkZWYgTlJIWV9hbHBoYWxpc3Q8TlJIWV9jbGFzc1Jvb3Q+IGFscGhhbGlzdDsKICAg
IGZyaWVuZCBOUkhZX21hdGNoIDxOUkhZX2NsYXNzUm9vdD47CiAgICBmcmllbmQgTlJIWV9hbHBo
YWxpc3Q8TlJIWV9jbGFzc1Jvb3Q+OwoKcHJvdGVjdGVkOgogICAgdm9pZCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5pdGlhbGl6ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoK
cHVibGljOgoKICAgICAKICAgIE5SSFlfY2xhc3NSb290ICgKICAgICAgICBjb25zdCBDSEFSICAg
ICAgICAgICpuYW1lCiAgICAgICAgKTsKICAgIE5SSFlfY2xhc3NSb290ICgKICAgICAgICBjb25z
dCBDSEFSICAgICAgICAgICpuYW1lLAogICAgICAgIE5SSFlfY2xhc3NSb290ICAgICAgKmNsb25l
RnJvbQogICAgICAgICk7CiAgICBOUkhZX2NsYXNzUm9vdCAoCiAgICAgICAgdm9pZCAKICAgICAg
ICApOwoKICAgIH5OUkhZX2NsYXNzUm9vdCAoCiAgICAgICAgdm9pZCAKICAgICAgICApOwoKICAg
ICAKICAgIHN0YXRpYyBjb25zdCBDSEFSICAgICAgICAgICAgICAgKlByaW50U2VsZkNsYXNzbmFt
ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuICgiTlJIWV9jbGFzc1Jvb3Qi
KTsgfQoKICAgICAKCiAgICBzdGF0aWMgSU5UICAgICAgICAgICAgICAgICAgICAgIEdldFNlbGZD
bGFzc1R5cGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAoVEhJTkdfVFlQ
RV9ST09UKTsgfQoKICAgIHN0YXRpYyBOUkhZX2J1bmNoPE5SSFlfY2xhc3NSb290PiAqRmluZCAo
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSICAqbmFt
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIHZvaWQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFJlbmFtZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBDSEFSICAqbmV3TmFtZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApOwoKICAgIE5SSFlfY2xhc3NUaGluZyAgICAgICAgICAgICAgICAgKkNs
b25lICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIg
ICpuZXdOYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgY29u
c3QgQ0hBUiAgICAgICAgICAgICAgICAgICAgICAqUHJpbnREZXJpdmVkQ2xhc3NPZlNlbGZUeXBl
TmFtZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuICgicm9vdCIpOyB9Cgog
ICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXREZXJpdmVkQ2xhc3NPZlNlbGZU
eXBlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1cm4gKFRISU5HX1RZUEVfUk9P
VCk7IH0KCgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUNyZWF0
ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0Ns
YXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
OwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZURlbGV0ZSAoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVz
Y3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAg
dm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUZ1bGxTdGF0ZSAoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3Jp
YmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgdm9p
ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUZ1bGxTdGF0ZVBhY2tlZCAoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVz
Y3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKfTsK
CiAKCiAKCiMgMjggImgvbnJoeV90ZW1wbGF0ZU1hdGNoLmMiIDIKCiMgMSAiaC9ucmh5X2NsYXNz
Um90by5oIiAxCgogCgoKCgoKCgoKCgoKCgoKCgwKIAoKCgogCgoKIAoKCgoKCiAKCgoKIyAxICJo
L25yaHlfY2xhc3NQYXJyYXkuaCIgMQoKCgoKIyAxICIvc29mdHdhcmUvdGhhbGlhL2gvc3RkdHlw
ZXMuaCIgMQoKIAoKCgoKCgoKCgoKCgoKCgoKCiMgMjAzICIvc29mdHdhcmUvdGhhbGlhL2gvc3Rk
dHlwZXMuaCIKCgoKCgoKCgoKCgoKCgojIDUgImgvbnJoeV9jbGFzc1BhcnJheS5oIiAyCgoKCmNs
YXNzIE5SSFlfY2xhc3NSb3RvOwpjbGFzcyBOUkhZX2NsYXNzUm90b0RhdGE7CgpjbGFzcyAgIE5S
SFlfY2xhc3NQYXJyYXkgewoKICAgIHB1YmxpYzoKCiAgICAgICAgSU5UICAgICAgICAgICAgICAg
ICBpbmRleDsgICAgICAgICAgCgogICAgICAgIFJFQUwgICAgICAgICAgICAgICAgcGFycmF5V2lk
dGg7ICAgICAgICAgCiAgICAgICAgUkVBTCAgICAgICAgICAgICAgICBwYXJyYXlIZWlnaHQ7CiAg
ICAgICAgSU5UICAgICAgICAgICAgICAgICBieXRlRGVwdGg7CgogICAgICAgIFJFQUwgICAgICAg
ICAgICAgICAgcG9ydFpvb207ICAgICAgICAKICAgICAgICBSRUFMICAgICAgICAgICAgICAgIHBv
cnRYb2Zmc2V0OyAgICAKICAgICAgICBSRUFMICAgICAgICAgICAgICAgIHBvcnRZb2Zmc2V0Owog
ICAgICAgIElOVCAgICAgICAgICAgICAgICAgcG9ydFdpZHRoOyAgICAgICAKICAgICAgICBJTlQg
ICAgICAgICAgICAgICAgIHBvcnRIZWlnaHQ7CgogICAgICAgIE5SSFlfY2xhc3NQYXJyYXkoICAg
SU5UIGlueCwgUkVBTCBwYXJyYXlXLCBSRUFMIHBhcnJheUgsIFJFQUwgcG9ydFosCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSRUFMIHBvcnRYLCBSRUFMIHBvcnRZLCBJTlQgcG9ydFcsIElO
VCBwb3J0SCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBieXRlcywgdm9pZCAgKndh
cnJheSk7CiAgICAgICAgfk5SSFlfY2xhc3NQYXJyYXkoIHZvaWQgKTsKCiAgICAgICAgdm9pZCAg
ICAgVXBkYXRlKCBSRUFMIHBhcnJheVcsIFJFQUwgcGFycmF5SCwgUkVBTCBwb3J0WiwKICAgICAg
ICAgICAgICAgICAgICAgICAgUkVBTCBwb3J0WCwgUkVBTCBwb3J0WSwgSU5UIHBvcnRXLCBJTlQg
cG9ydEgsCiAgICAgICAgICAgICAgICAgICAgICAgIElOVCBieXRlcywgdm9pZCAgKndhcnJheSk7
CgogICAgICAgIHZvaWQgICAgIENsZWFyKCB2b2lkICl7ICAgaWYgKHRoaXMtPnBhcnJheSl7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSB0aGlzLT5wYXJyYXk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnBhcnJheSA9IF9fbnVs
bCA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgIHZvaWQgICAgICpHZXRBcnJheSggdm9pZCApIHsgcmV0dXJuICh0
aGlzLT5wYXJyYXkpOyB9IAogICAgICAgIAogICAgICAgIEJPT0xFQU4gRGlkTm90Q2hhbmdlKCBS
RUFMIHBhcnJheVcsIFJFQUwgcGFycmF5SCwgUkVBTCBwb3J0WiwKICAgIAkJUkVBTCBwb3J0WCwg
UkVBTCBwb3J0WSwgSU5UIHBvcnRXLCBJTlQgcG9ydEgsIElOVCBieXRlcyk7CgogICAgcHJpdmF0
ZToKCiAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgKnBhcnJheTsKCn07CgppbmxpbmUgY29u
c3QgY2hhciAqY2xhc3NOYW1lKCBOUkhZX2NsYXNzUGFycmF5ICkgeyByZXR1cm4gIk5SSFlfY2xh
c3NQYXJyYXkiOyB9OwoKCgojIDM2ICJoL25yaHlfY2xhc3NSb3RvLmgiIDIKCiAKCmNsYXNzIE5S
SFlfY2xhc3NDYW1lcmE7CiAKCiAKIAogCgogCnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBjbGFzcyBO
UkhZX21hdGNoOwp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4gY2xhc3MgTlJIWV9hbHBoYWxpc3Q7Cgog
CgpzdHJ1Y3QgTlJIWV9jbGFzc1JvdG86cHVibGljIE5SSFlfY2xhc3NBcHBhcml0aW9uIHsKICAg
IHR5cGVkZWYgTlJIWV9jbGFzc0FwcGFyaXRpb24gaW5oZXJpdGVkOwogICAgdHlwZWRlZiBOUkhZ
X2FscGhhbGlzdDxOUkhZX2NsYXNzUm90bz4gYWxwaGFsaXN0OwogICAgZnJpZW5kIE5SSFlfbWF0
Y2ggPE5SSFlfY2xhc3NSb3RvPjsKICAgIGZyaWVuZCBOUkhZX2FscGhhbGlzdDxOUkhZX2NsYXNz
Um90bz47CgogICAgdm9pZCBkZXRhY2goTlJIWV9kZXBlbmREYXRhICopOwpwcm90ZWN0ZWQ6CiAg
ICAKICAgIE5SSFlfY2xhc3NNYXAgICAgICAgICAgICAgICAgICAgKm1hcDsKICAgIE5SSFlfY2xh
c3NSb3RvRGF0YSAgICAgICAgICAgICAgKmN1cnJlbnRSb3RvOwoKICAgICAKICAgICAKICAgIHZv
aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp3YXJyYXk7CiAgICAKICAgICAKICAgIExp
c3Q8TlJIWV9jbGFzc1BhcnJheSAgICo+ICAgICAgUGFycmF5OyAgICAgCgogICAgIAogICAgQk9P
TEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhbjsKCnB1YmxpYzoKCiAgICBSRUFMICAg
IHdhcnJheVhvZmZzZXQ7CiAgICBSRUFMICAgIHdhcnJheVlvZmZzZXQ7CiAgICBSRUFMICAgIHdh
cnJheVdpZHRoOwogICAgUkVBTCAgICB3YXJyYXlIZWlnaHQ7CgogICAgIAogICAgTlJIWV9jbGFz
c1JvdG8gKAogICAgICAgIGNvbnN0IENIQVIgICpuYW1lCiAgICAgICAgKTsKICAgIE5SSFlfY2xh
c3NSb3RvICgKICAgICAgICBjb25zdCBDSEFSICAgICAgKm5hbWUsCiAgICAgICAgTlJIWV9jbGFz
c1JvdG8gICpjbG9uZUZyb20KICAgICAgICApOwogICAgTlJIWV9jbGFzc1JvdG8gKAogICAgICAg
IHZvaWQgCiAgICAgICAgKTsKCiAgICB+TlJIWV9jbGFzc1JvdG8gKAogICAgICAgIHZvaWQgCiAg
ICAgICAgKTsKCiAgICAgCiAgICBzdGF0aWMgY29uc3QgQ0hBUiAgICAgICAgICAgICAgICpQcmlu
dFNlbGZDbGFzc25hbWUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAoIk5S
SFlfY2xhc3NSb3RvIik7IH0KCiAgICAgCgogICAgc3RhdGljIElOVCAgICAgICAgICAgICAgICAg
ICAgICBHZXRTZWxmQ2xhc3NUeXBlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1
cm4gKFRISU5HX1RZUEVfUk9UTyk7IH0KCiAgICBzdGF0aWMgTlJIWV9idW5jaDxOUkhZX2NsYXNz
Um90bz4gKkZpbmQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQ0hBUiAgKm5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAg
ICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5hbWUgKAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUiAgKm5ld05hbWUKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBOUkhZX2NsYXNzVGhpbmcgICAgICAg
ICAgICAgICAgICpDbG9uZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBDSEFSICAqbmV3TmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICApOwoKICAgIGNvbnN0IENIQVIgICAgICAgICAgICAgICAgICAgICAgKlByaW50RGVyaXZlZENs
YXNzT2ZTZWxmVHlwZU5hbWUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAo
InJvdG8iKTsgfQogICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXREZXJpdmVk
Q2xhc3NPZlNlbGZUeXBlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1cm4gKFRI
SU5HX1RZUEVfUk9UTyk7IH0KCiAgICAgCgoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRGVzY3JpYmVDcmVhdGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RGVzY3JpYmVGdWxsU3RhdGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVz
Y3JpYmVGdWxsU3RhdGVQYWNrZWQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RGVzY3JpYmVEZWxldGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3Jp
YmVNYXAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJI
WV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgIAoKICAgIE5SSFlfY2xhc3ND
YW1lcmEgICAgICAgICAgICAgICAgKkdldENhbWVyYSAoKTsKCiAgICBCT09MRUFOICAgICAgICAg
ICAgICAgICAgICAgICAgIFNldEN1cnJlbnRSb3RvKCBJTlQgdmFsdWUpOwogICAgQk9PTEVBTiAg
ICAgICAgICAgICAgICAgICAgICAgICBTZXRDdXJyZW50Um90byggdm9pZCApOwogICAgTlJIWV9j
bGFzc1JvdG9EYXRhICAgICAgICAgICAgICAqR2V0Q3VycmVudFJvdG8oIHZvaWQgKSB7cmV0dXJu
IGN1cnJlbnRSb3RvO30KCiAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNldE1h
cCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUkhZX2J1bmNoIDxO
UkhZX2NsYXNzTWFwPiAgKm5ld01hcFB0cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICApOwogICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXRNYXAgKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlJIWV9jbGFzc01hcCAgICpuZXdN
YXBQdHIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBOUkhZX2Ns
YXNzTWFwICAgICAgICAgICAgICAgICAgICpHZXRNYXAoIHZvaWQgKSB7cmV0dXJuIG1hcDt9Cgog
ICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xlYXJXYXJyYXkoIHZvaWQgKSAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgaWYgKHRoaXMtPndh
cnJheSkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSBbXSB0aGlzLT53YXJyYXk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy0+d2FycmF5ID0gX19udWxsIDt9CgogICAgQk9PTEVBTiAgICAgICAgICAg
ICAgICAgICAgICAgICBBbGxvY1dhcnJheSAoIE5SSFlfY2xhc3NSb3RvRGF0YSAgICAqKTsKICAg
IHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpHZXRXYXJyYXkgKCB2b2lkICkgeyBy
ZXR1cm4gd2FycmF5O30KCgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xl
YXJQYXJyYXlzICggdm9pZCApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RGVsZXRlUGFycmF5cyAoIHZvaWQgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFwcGVuZFBhcnJheSAoIE5SSFlfY2xhc3NQYXJyYXkgKnB0cikKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsgUGFycmF5LmFwcGVuZChwdHIpOyB9CiAgICBOUkhZ
X2NsYXNzUGFycmF5ICAgICAgICAgICAgICAgICpDaGVja1BhcnJheUV4aXN0KCBJTlQgaW54KTsK
ICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpHZXRQQXJyYXkoIHZvaWQgKTsK
CiAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIEdldENsZWFuKCB2b2lkICkgeyBy
ZXR1cm4gdGhpcy0+Y2xlYW47IH0KICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNldENsZWFuKCBCT09MRUFOIHMpIHsgdGhpcy0+Y2xlYW4gPSBzOyB9CgogICAgdm9pZCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUHVyZ2VGcmFuZ2UoTlJIWV9JTlRfRlJBTkdFICpyYW5n
ZSk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3RSb3RvKEZJTEUgKmZw
LCBjb25zdCBMaXN0PFR3aW5lPiAmbHMpOwp9OwoKIAoKIAoKIyAyOSAiaC9ucmh5X3RlbXBsYXRl
TWF0Y2guYyIgMgoKIyAxICJoL25yaHlfY2xhc3NTY2FmZm9sZC5oIiAxCgogCgoKCgoKCgoKCgoK
CgoKCgoKCgwKIAoKCgogCgoKIAoKCgoKCgogCgoKIAogCiAKCgoKIAogCiAKIAogCgplbnVtIFND
QUZGT0xEVHlwZQp7CglTQ0FGRk9MRF9Ob25lID0gMCwKCVNDQUZGT0xEX0JveCwKCVNDQUZGT0xE
X0N5bCwKCVNDQUZGT0xEX1BvbHksCn07CgpjbGFzcyBOUkhZX2NsYXNzU2NhZmZvbGQ7CmNsYXNz
IE5SSFlfU2NhZmZvbGRBcHBseTsKCgogCmNsYXNzIE5SSFlfU2NhZmZvbGRTdXJmYWNlCnsKICAg
IEJPT0xFQU4JX2RpcnR5OwogICAgTV9WZWN0b3IJKl9jdls0XVs0XTsKICAgIE1fVmVjdG9yCV9i
YXNlWzRdWzRdOwogICAgaW50CQlfc21vb3RobmVzc0xldmVsOwogCnB1YmxpYzoKCiAgICB2b2lk
IAlTZXRDb250cm9sVmVydHMoaW50IGksIGludCBqLCBpbnQgaywgTlJIWV9TY2FmZm9sZEFwcGx5
ICpzY2FmZm9sZEFwcGx5KTsKICAgIHZvaWQgCVNldERpcnR5KHZvaWQpIHsgX2RpcnR5ID0gMSA7
IH0KICAgIEJPT0xFQU4gCUdldERpcnR5KHZvaWQpIHsgcmV0dXJuIF9kaXJ0eTsgfQogICAgdm9p
ZAlDYWxjdWxhdGVCYXNlKGludCBsZXZlbCk7CiAgICB2b2lkCUNhbGN1bGF0ZUJhc2UoY29uc3Qg
TV9NYXRyaXggJnNwbGluZU1hdCwgY29uc3QgTV9NYXRyaXggJnNwbGluZVRyYW5NYXQpOwogICAg
dm9pZCAJQ2FsY1N1cmZhY2VQb2ludChmbG9hdCB1LCBmbG9hdCB2LCBNX1ZlY3RvciAqcmVzdWx0
KTsKCgogICAgdm9pZCAJSW5mbyh2b2lkKTsKICAgIHZvaWQgCUluZm8yKHZvaWQpOwp9OwoKCiAK
Y2xhc3MgTlJIWV9TY2FmZm9sZEFwcGx5CnsKIHByb3RlY3RlZDoKICAgIE5SSFlfY2xhc3NTY2Fm
Zm9sZCAJKl9zY2FmZm9sZDsKICAgIFNoYXBlIAkJX3NoYXBlOwogICAgTGlzdCA8TV9WZWN0b3Ig
Kj4gCV9zaGFwZUN2OwkgCgogICAgTGlzdCA8TV9WZWN0b3I+IF9jdjsKICAgIExpc3QgPE5SSFlf
U2NhZmZvbGRTdXJmYWNlPiBfc3VyZmFjZTsKCiAgICBNX01hdHJpeCAJX2ZpbHRlck1hdDsJCSAK
ICAgIE1fTWF0cml4IAlfQ3ZPYmplY3RNYXQ7CQkgCiAgICBNX01hdHJpeCAJX1NjYWZPYmplY3RN
YXQ7CQkgCgogICAgaW50IAlfbngsIAkJX255LCAJCV9ueiwJCV9ueXo7CiAgICBpbnQgCV9uc2hh
cGV4LCAJX25zaGFwZXksIAlfbnNoYXBleiwgCV9uc2hhcGV5ejsKICAgIGludCAJX3NlZ3gsIAkJ
X3NlZ3ksIAkJX3NlZ3osCQlfbnNlZ3l6OwogICAgZmxvYXQgCV9keCwgCQlfZHksIAkJX2R6OwoK
ICAgIE1fVmVjdG9yCV9zaXplOwogICAgTV9WZWN0b3IJX2RzaXplOwogICAgTV9WZWN0b3IgCV9z
aXplTzsKCiAgICBNX01hdHJpeCAJX2VuZE1hdHJpeDsKICAgIE1fTWF0cml4IAlfc3RhcnRNYXRy
aXg7CiAgICBNX01hdHJpeCAJX3N0YXJ0U2NhZk9iamVjdE1hdDsKICAgIE1fTWF0cml4IAlfZW5k
U2NhZk9iamVjdE1hdDsKICAgIE1fTWF0cml4IAlfc3BsaW5lTWF0LCBfc3BsaW5lVHJhbk1hdDsK
CiAgICBmbG9hdAlfc21vb3RobmVzczsKICAgIGludAkJX3Ntb290aG5lc3NMZXZlbDsKCnB1Ymxp
YzoKICAgIAkJCU5SSFlfU2NhZmZvbGRBcHBseSh2b2lkKTsKCiAgICBOUkhZX2NsYXNzU2NhZmZv
bGQJKkdldFNjYWZmb2xkKHZvaWQpIHsgcmV0dXJuIF9zY2FmZm9sZDsgfQogICAgdm9pZCAJCSBT
ZXRTY2FmZm9sZChOUkhZX2NsYXNzU2NhZmZvbGQgKnNjYWZmb2xkKSB7IF9zY2FmZm9sZCA9IHNj
YWZmb2xkOyB9CgogICAgQk9PTEVBTgkJU2V0U2hhcGUoU2hhcGUgKnNoYXBlKTsKICAgIFNoYXBl
CQkqR2V0U2NhZmZvbGRNb2RlbCh2b2lkKSB7IHJldHVybiAmX3NoYXBlOyB9CgoKICAgIHZvaWQg
CQlQcmVwYXJlKHZvaWQpOwogICAgTV9WZWN0b3IgCQkqR2V0Q3YoaW50IHgsIGludCB5LCBpbnQg
eikgeyByZXR1cm4gJl9jdltHZXRDdkluZGV4KHgseSx6KV07IH0KICAgIE1fVmVjdG9yIAkJR2V0
Q3ZQb3MoaW50IHgsIGludCB5LCBpbnQgeikgeyAgcmV0dXJuIF9jdltHZXRDdkluZGV4KHgseSx6
KV07IH0KICAgIE5SSFlfU2NhZmZvbGRTdXJmYWNlICpHZXRTdXJmYWNlKGludCB4LCBpbnQgeSwg
aW50IHopIHsgcmV0dXJuICZfc3VyZmFjZVtHZXRTdXJmYWNlSW5kZXgoeCx5LHopXTsgfQoKICAg
IHZvaWQgCQlEdW1wQ3ZTaGFwZShUd2luZSBmaWxlTmFtZSk7CiAgICB2b2lkCQlTZXRTbW9vdGhu
ZXNzKGZsb2F0IHMpOwogICAgdm9pZCAJCVNldEZpbHRlck1hdHJpeChjb25zdCBNX01hdHJpeCAm
TSkgeyBfZmlsdGVyTWF0ID0gTTsgfQogICAgdm9pZCAJCVNldE9iamVjdE1hdHJpeChjb25zdCBN
X01hdHJpeCAmQ1ZNLCBjb25zdCBNX01hdHJpeCAmU00pOwoKICAgIHZpcnR1YWwgU0NBRkZPTERU
eXBlIEdldFNjYWZmb2xkVHlwZSAodm9pZCkgeyByZXR1cm4gU0NBRkZPTERfTm9uZTsgfQoKICAg
IHZpcnR1YWwgaW50IAlDcmVhdGUoaW50IG54LCBpbnQgbnksIGludCBueiwgZmxvYXQgZHgsIGZs
b2F0IGR5LCBmbG9hdCBkeikgeyByZXR1cm4gMDsgfQogICAgdmlydHVhbCB2b2lkIAlQcmVwYXJl
Q3JlYXRlKGludCBueCwgaW50IG55LCBpbnQgbnosIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQg
ZHopIHsgIH0KCiAgICB2aXJ0dWFsIE1fVmVjdG9yCURlZm9ybVZlcnQoY29uc3QgTV9WZWN0b3Ig
JnZlYykgeyByZXR1cm4gdmVjOyB9IAkKICAgIHZpcnR1YWwgTV9WZWN0b3IJRGVmb3JtVmVydEVu
ZChjb25zdCBNX1ZlY3RvciAmdmVjKSB7IHJldHVybiB2ZWM7IH0gCQogICAgdmlydHVhbCBNX1Zl
Y3RvcglEZWZvcm1WZXJ0U3RhcnQoY29uc3QgTV9WZWN0b3IgJnZlYykgeyByZXR1cm4gdmVjOyB9
IAkKCiAgICB2aXJ0dWFsIHZvaWQgCUFkanVzdEVkZ2VWZXJ0cyh2b2lkKSAgeyB9OwogICAgdmly
dHVhbCB2b2lkCURlcml2ZUNyZFN5cyh2b2lkKSB7IH07CgogICAgdmlydHVhbCBNX1ZlY3RvcglH
ZXRSZWZMb2NhdGlvbihpbnQgaSwgaW50IGosIGludCBrKSB7IHJldHVybiBNX1ZlY3RvcigwLjAs
MC4wLDAuMCk7IH0KICAgIHZpcnR1YWwgTV9WZWN0b3IgCUdldFNoYXBlUmVmTG9jYXRpb24oaW50
IGksIGludCBqLCBpbnQgaykgeyByZXR1cm4gTV9WZWN0b3IoMC4wLDAuMCwwLjApOyB9CgkKICAg
IHZpcnR1YWwgaW50IAlHZXRDdkluZGV4KGludCB4LCBpbnQgeSwgaW50IHopIHsgcmV0dXJuIDA7
IH0KICAgIHZpcnR1YWwgaW50IAlHZXRTaGFwZUluZGV4KGludCBzaHgsIGludCBzaHksIGludCBz
aHopIHsgcmV0dXJuIDA7IH0KICAgIHZpcnR1YWwgaW50IAlTaGFwZUN2SW5kZXgoaW50IHNoeCwg
aW50IHNoeSwgaW50IHNoeikgeyByZXR1cm4gMDsgfQogICAgdmlydHVhbCBpbnQgCUdldFN1cmZh
Y2VJbmRleChpbnQgeCwgaW50IHksIGludCB6KSB7IHJldHVybiAwOyB9CgogICAgdmlydHVhbCB2
b2lkIAlEcmF3Q3ZTaGFwZShTaGFwZSAqc2hhcGUpIHsgfTsKICAgIHZpcnR1YWwgQk9PTEVBTiAJ
R2V0R3JvdXBDZW50ZXIoVHdpbmUgZ3JvdXBOYW1lLCBNX1ZlY3RvciAmb3JnKTsKCn07CgogCmNs
YXNzIE5SSFlfYm94U2NhZmZvbGQ6cHVibGljIE5SSFlfU2NhZmZvbGRBcHBseQp7CgpwdWJsaWM6
CiAgICBOUkhZX2JveFNjYWZmb2xkKHZvaWQpOwoKICAgIHZpcnR1YWwgU0NBRkZPTERUeXBlIEdl
dFNjYWZmb2xkVHlwZSAodm9pZCkgeyByZXR1cm4gU0NBRkZPTERfQm94OyB9CgogICAgdmlydHVh
bCBpbnQgCUNyZWF0ZShpbnQgbngsIGludCBueSwgaW50IG56LCBmbG9hdCBkeCwgZmxvYXQgZHks
IGZsb2F0IGR6KTsKICAgIHZpcnR1YWwgdm9pZCAJUHJlcGFyZUNyZWF0ZShpbnQgbngsIGludCBu
eSwgaW50IG56LCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGR6KTsKICAgIHZpcnR1YWwgTV9W
ZWN0b3IJRGVmb3JtVmVydChjb25zdCBNX1ZlY3RvciAmdmVjKTsgCiAgICB2aXJ0dWFsIE1fVmVj
dG9yCURlZm9ybVZlcnRFbmQoY29uc3QgTV9WZWN0b3IgJnZlYyk7CiAgICB2aXJ0dWFsIE1fVmVj
dG9yCURlZm9ybVZlcnRTdGFydChjb25zdCBNX1ZlY3RvciAmdmVjKTsKCQogICAgdmlydHVhbCB2
b2lkIAlBZGp1c3RFZGdlVmVydHModm9pZCk7CiAgICB2aXJ0dWFsIHZvaWQJRGVyaXZlQ3JkU3lz
KHZvaWQpOwoKICAgIHZpcnR1YWwgTV9WZWN0b3IJR2V0UmVmTG9jYXRpb24oaW50IGksIGludCBq
LCBpbnQgayk7CiAgICB2aXJ0dWFsIE1fVmVjdG9yIAlHZXRTaGFwZVJlZkxvY2F0aW9uKGludCBp
LCBpbnQgaiwgaW50IGspOwoKICAgIHZpcnR1YWwgaW50IAlHZXRDdkluZGV4KGludCB4LCBpbnQg
eSwgaW50IHopIHsgcmV0dXJuIHgqX255eiArIHkqX256ICsgejsgfQogICAgdmlydHVhbCBpbnQg
CUdldFNoYXBlSW5kZXgoaW50IHNoeCwgaW50IHNoeSwgaW50IHNoeikgeyByZXR1cm4gc2h4Kl9u
c2hhcGV5eiArIHNoeSpfbnNoYXBleiArIHNoejsgfQogICAgdmlydHVhbCBpbnQgCVNoYXBlQ3ZJ
bmRleChpbnQgc2h4LCBpbnQgc2h5LCBpbnQgc2h6KSB7IHJldHVybiBHZXRDdkluZGV4KHNoeCsx
LHNoeSsxLHNoeisxKTsgfQogICAgdmlydHVhbCBpbnQgCUdldFN1cmZhY2VJbmRleChpbnQgeCwg
aW50IHksIGludCB6KSB7IHJldHVybiB4Kl9uc2VneXogKyB5Kl9zZWd6ICsgejsgfQogICAgdmly
dHVhbCB2b2lkIAlEcmF3Q3ZTaGFwZShTaGFwZSAqc2hhcGUpOwogCn07CgoKIApjbGFzcyBOUkhZ
X2N5bFNjYWZmb2xkOnB1YmxpYyBOUkhZX1NjYWZmb2xkQXBwbHkKewoKcHVibGljOgogICAgdmly
dHVhbCBTQ0FGRk9MRFR5cGUgR2V0U2NhZmZvbGRUeXBlICh2b2lkKSB7IHJldHVybiBTQ0FGRk9M
RF9DeWw7IH0KCn07CgoKCgogCnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBjbGFzcyBOUkhZX21hdGNo
Owp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4gY2xhc3MgTlJIWV9hbHBoYWxpc3Q7CgpzdHJ1Y3QgTlJI
WV9jbGFzc1NjYWZmb2xkOnB1YmxpYyBOUkhZX2NsYXNzT2JqZWN0IHsKICAgIHR5cGVkZWYgTlJI
WV9jbGFzc09iamVjdCBpbmhlcml0ZWQ7CiAgICB0eXBlZGVmIE5SSFlfYWxwaGFsaXN0PE5SSFlf
Y2xhc3NTY2FmZm9sZD4gYWxwaGFsaXN0OwogICAgZnJpZW5kIE5SSFlfbWF0Y2ggPE5SSFlfY2xh
c3NTY2FmZm9sZD47CiAgICBmcmllbmQgTlJIWV9hbHBoYWxpc3Q8TlJIWV9jbGFzc1NjYWZmb2xk
PjsKCiAgICB2b2lkIGRldGFjaChOUkhZX2RlcGVuZERhdGEgKik7CnByb3RlY3RlZDoKICAgIHZv
aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemUgKAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKTsKICAgICAKCiAgICAgCiAgICAgCiAgICAgCgogICAgTlJIWV9TY2FmZm9s
ZEFwcGx5ICpfc2NhZmZvbGRBcHBseTsKICAgIGludAkJCV9yZXNvbHV0aW9uWzNdOwogICAgTV9W
ZWN0b3IgCQlfc2l6ZSwgX2RzaXplOwogICAgQk9PTEVBTgkJX2V4dGVuZEVuZCwgX2V4dGVuZFN0
YXJ0OwogICAgQk9PTEVBTgkJX3NjYWZmb2xkRGlydHk7CiAgICBOUkhZX2NsYXNzVGhpbmcJKl9k
cmF3UGFyZW50OwoKcHVibGljOgoKICAgICAKICAgIE5SSFlfY2xhc3NTY2FmZm9sZCAoCiAgICAg
ICAgY29uc3QgQ0hBUiAgICAgICAgICAqbmFtZQogICAgICAgICk7CiAgICBOUkhZX2NsYXNzU2Nh
ZmZvbGQgKAogICAgICAgIGNvbnN0IENIQVIgICAgICAgICAgKm5hbWUsCiAgICAgICAgTlJIWV9j
bGFzc1NjYWZmb2xkICpjbG9uZUZyb20KICAgICAgICApOwogICAgTlJIWV9jbGFzc1NjYWZmb2xk
ICgKICAgICAgICB2b2lkIAogICAgICAgICk7CgogICAgfk5SSFlfY2xhc3NTY2FmZm9sZCAoCiAg
ICAgICAgdm9pZCAKICAgICAgICApOwoKICAgICAKICAgIHN0YXRpYyBjb25zdCBDSEFSICAgICAg
ICAgICAgICAgKlByaW50U2VsZkNsYXNzbmFtZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
IHsgcmV0dXJuICgiTlJIWV9jbGFzc1NjYWZmb2xkIik7IH0KCiAgICAgCgogICAgc3RhdGljIElO
VCAgICAgICAgICAgICAgICAgICAgICBHZXRTZWxmQ2xhc3NUeXBlICgKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICkgeyByZXR1cm4gKFRISU5HX1RZUEVfU0NBRkZPTEQpOyB9CgogICAgc3RhdGlj
IE5SSFlfYnVuY2g8TlJIWV9jbGFzc1NjYWZmb2xkPiAqRmluZCAoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSICAqbmFtZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApOwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJlbmFtZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBDSEFSICAqbmV3TmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoK
ICAgIE5SSFlfY2xhc3NUaGluZyAgICAgICAgICAgICAgICAgKkNsb25lICgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIgICpuZXdOYW1lCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgIAogICAgY29uc3QgQ0hBUiAgICAg
ICAgICAgICAgICAgICAgICAqUHJpbnREZXJpdmVkQ2xhc3NPZlNlbGZUeXBlTmFtZSAoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuICgic2NhZmZvbGQiKTsgfQoKICAgICAKICAg
IElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0RGVyaXZlZENsYXNzT2ZTZWxmVHlw
ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuIChUSElOR19UWVBFX1NDQUZG
T0xEKTsgfQoKICAgICAKICAgICAKCiAgICAgCgogICAgIAoKICAgICAKICAgIFpPT0xFQU4gICAg
ICAgICAgICAgICAgICAgICAgICAgU2V0U29saWQgKAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld1NvbGlkVmFsdWUKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAoMCApOyB9CiAgICAgCiAgICBSRUFM
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFNvbGlkICgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICkgeyByZXR1cm4gKChSRUFMKTAuMCk7IH0KICAgICAKICAgIHZvaWQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRGVzY3JpYmVDcmVhdGUgKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgCiAgICB2b2lkICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIERlc2NyaWJlRGVsZXRlICgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgIAogICAgdm9pZCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUZ1bGxTdGF0ZSAoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBEZXNjcmliZUZ1bGxTdGF0ZVBhY2tlZCAoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0g
JgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZAkJCSAgICBE
ZXNjcmliZU1lKAoJCQkJICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoJCQkKICAgICAKCiAgICB2b2lk
ICAgICAgICAgICAgICAgIExpc3RTY2FmZm9sZChGSUxFICpmcCwgY29uc3QgTGlzdDxUd2luZT4g
JmxzKTsKICAgIHZvaWQgCQlMc0NlbnRlcihUd2luZSk7CgogICAgdm9pZAkJU2V0U2NhZmZvbGRE
aXJ0eSh2b2lkKSB7IF9zY2FmZm9sZERpcnR5ID0gMSA7IH0KICAgIEJPT0xFQU4JCUdldFNjYWZm
b2xkRGlydHkodm9pZCkgeyByZXR1cm4gX3NjYWZmb2xkRGlydHk7IH0KCiAgICBCT09MRUFOCQlT
ZXRSZXNvbHV0aW9uKGludCAqcmVzb2x1dGlvbik7CiAgICBCT09MRUFOCQlTZXRTaXplKE1fVmVj
dG9yIHNpemUpOwogICAgQk9PTEVBTgkJU2V0U2NhZmZvbGRUeXBlIChTQ0FGRk9MRFR5cGUgdHlw
ZSk7IAogICAgU0NBRkZPTERUeXBlCUdldFNjYWZmb2xkVHlwZSAodm9pZCkgeyBpZiAoX3NjYWZm
b2xkQXBwbHkpIHJldHVybiBfc2NhZmZvbGRBcHBseS0+R2V0U2NhZmZvbGRUeXBlKCk7IGVsc2Ug
cmV0dXJuIFNDQUZGT0xEX05vbmU7IH0KCiAgICBUd2luZSAJCUdldFNjYWZmb2xkVHlwZU5hbWUo
U0NBRkZPTERUeXBlIGQpOwogICAgU0NBRkZPTERUeXBlICAgCUdldFNjYWZmb2xkVHlwZUZyb21O
YW1lKFR3aW5lIG5hbWUpOwoKICAgIE5SSFlfU2NhZmZvbGRBcHBseSAqR2V0U2NhZmZvbGRBcHBs
eSAodm9pZCkgeyByZXR1cm4gX3NjYWZmb2xkQXBwbHk7IH0KCiAgICB2b2lkIAlGaWx0ZXJGcm9t
T2JqZWN0KE5SSFlfY2xhc3NUaGluZyAqdGhpbmcpOwogICAgdm9pZAlTZXRGaWx0ZXJNYXRyaXgo
Y29uc3QgTV9NYXRyaXggJk0pOwogICAgdm9pZAlTZXRPYmplY3RNYXRyaXgoY29uc3QgTV9NYXRy
aXggJkNWTSwgY29uc3QgTV9NYXRyaXggJlNNKTsKCiAgICBpbnQgCUNyZWF0ZVNjYWZmb2xkKHZv
aWQpOwogCiAgICBNX1ZlY3RvcglEZWZvcm1WZXJ0KGNvbnN0IE1fVmVjdG9yICZ2ZWMpIHsgcmV0
dXJuIF9zY2FmZm9sZEFwcGx5LT5EZWZvcm1WZXJ0KHZlYyk7IH0gCQogICAgTV9WZWN0b3IJRGVm
b3JtVmVydFN0YXJ0KGNvbnN0IE1fVmVjdG9yICZ2ZWMpIHsgcmV0dXJuIF9zY2FmZm9sZEFwcGx5
LT5EZWZvcm1WZXJ0U3RhcnQodmVjKTsgfSAJCiAgICBNX1ZlY3RvcglEZWZvcm1WZXJ0RW5kKGNv
bnN0IE1fVmVjdG9yICZ2ZWMpIHsgcmV0dXJuIF9zY2FmZm9sZEFwcGx5LT5EZWZvcm1WZXJ0RW5k
KHZlYyk7IH0gCQoKICAgIHZvaWQgCUR1bXBTY2FmZm9sZFNoYXBlKFR3aW5lIGZuYW1lKTsKICAg
IHZvaWQJRHVtcEN2U2hhcGUoVHdpbmUgZm5hbWUpOwogICAgdm9pZCAJRHJhd0N2U2hhcGUodm9p
ZCk7CiAKICAgIHZvaWQgCVNldFNjYWZmb2xkU2hhcGUoVHdpbmUgZk5hbWUpOwogICAgdm9pZAlT
ZXRTbW9vdGhuZXNzKGZsb2F0IHMpOwogICAgQk9PTEVBTglTZXRTaGFwZShTaGFwZSAqc2hhcGUp
OwoKICAgIEJPT0xFQU4JU2V0RXh0ZW5kU3RhcnQoQk9PTEVBTiBleHRlbmQpOwogICAgQk9PTEVB
TglHZXRFeHRlbmRTdGFydCh2b2lkKSB7IHJldHVybiBfZXh0ZW5kU3RhcnQ7IH0KICAgIEJPT0xF
QU4JU2V0RXh0ZW5kRW5kKEJPT0xFQU4gZXh0ZW5kKTsKICAgIEJPT0xFQU4JR2V0RXh0ZW5kRW5k
KHZvaWQpIHsgcmV0dXJuIF9leHRlbmRFbmQ7IH0KCiAgICB2b2lkIAlQcmVwYXJlKHZvaWQpOwoK
ICAgIFNoYXBlCSpHZXRTY2FmZm9sZE1vZGVsKHZvaWQpOwogICAgTV9WZWN0b3IJR2V0U2l6ZSh2
b2lkKSB7IHJldHVybiBfc2l6ZTsgfQogICAgTV9WZWN0b3IJR2V0RFNpemUodm9pZCkgeyByZXR1
cm4gX2RzaXplOyB9CiAgICB2b2lkCUdldFJlc29sdXRpb24oaW50ICpueCwgaW50ICpueSwgaW50
ICpueikgeyAqbnggPSBfcmVzb2x1dGlvblswXTsgKm55ID0gX3Jlc29sdXRpb25bMV07ICpueiA9
IF9yZXNvbHV0aW9uWzJdOyAgfQoKICAgIHZpcnR1YWwgdm9pZCBHZXRTaGFwZShSRUFMIGZyYW1l
KTsKCiAgICBCT09MRUFOIAlTZXREcmF3UGFyZW50KE5SSFlfY2xhc3NUaGluZyAqZHApOyAgIAog
ICAgTlJIWV9jbGFzc1RoaW5nICpHZXREcmF3UGFyZW50KHZvaWQpIHsgcmV0dXJuIF9kcmF3UGFy
ZW50OyB9Cn07CgogCgogCgojIDMwICJoL25yaHlfdGVtcGxhdGVNYXRjaC5jIiAyCgojIDEgImgv
bnJoeV9jbGFzc1NvdW5kLmgiIDEKCiAKCgoKCgoKCgoKCgoKCgoKDAogCgoKCgoKCgoKCiAKCgog
CgoKCgoKCgoKCiAKIAogCgogCnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBjbGFzcyBOUkhZX21hdGNo
Owp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4gY2xhc3MgTlJIWV9hbHBoYWxpc3Q7CgpzdHJ1Y3QgTlJI
WV9jbGFzc1NvdW5kOnB1YmxpYyBOUkhZX2NsYXNzVGhpbmcgewpwcml2YXRlOgogICAgdHlwZWRl
ZiBOUkhZX2NsYXNzVGhpbmcgaW5oZXJpdGVkOwogICAgdHlwZWRlZiBOUkhZX2FscGhhbGlzdDxO
UkhZX2NsYXNzU291bmQ+IGFscGhhbGlzdDsKICAgIGZyaWVuZCBOUkhZX21hdGNoIDxOUkhZX2Ns
YXNzU291bmQ+OwogICAgZnJpZW5kIE5SSFlfYWxwaGFsaXN0PE5SSFlfY2xhc3NTb3VuZD47Cgog
ICAgIAoKCgoKCgpwcm90ZWN0ZWQ6CgogICAgIAogICAgIAogICAgIAoKICAgIFR3aW5lICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHRzRmlsZW5hbWU7CgogICAgdm9pZCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5pdGlhbGl6ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoK
cHVibGljOgoKICAgICAKCiAgICBOUkhZX0lOVF9GUkFOR0UgICAgICAgICAgICAgICAgIHJhbmdl
OwoKCgoKICAgIAogICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZDsgICAgICAg
ICAgCiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ7ICAgICAKCiAg
ICBUd2luZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lOwogICAgaW50ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwaWQ7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAg
ICAgICAgIHByZWluaXRQcm9jZXNzOwogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAg
ICByZWFkeTJwbGF5OwoKICAgIHNob3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGE7
ICAgICAgIAogICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3NpemU7CiAg
ICBzaG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICpzYW1wYnVmOyAgICAKICAgIElOVCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGJ1Zl9zaXplOyAgCgoKCgoKCiAgICBJTlQg
ICAgICAgICAgICAgbm93cGxheWluZzsKICAgIElOVCAgICAgICAgICAgICBwbGF5X29uZV9mcmFt
ZTsKCiAgICBJTlQgICAgICAgICAgICAgY3VycmVudF9mcmFtZTsgICAgICAgCiAgICBJTlQgICAg
ICAgICAgICAgZmlyc3RfZnJhbWU7ICAgICAgICAgCiAgICBJTlQgICAgICAgICAgICAgbGFzdF9m
cmFtZTsgICAgICAgICAgCiAgICBJTlQgICAgICAgICAgICAgdmlkZW9fZmlyc3RfZnJhbWU7ICAg
CiAgICBJTlQgICAgICAgICAgICAgdmlkZW9fbGFzdF9mcmFtZTsgICAgCgogICAgRkxPQVQgICAg
ICAgICAgIG9mZnNldDsgICAgICAgICAgCiAgICBJTlQgICAgICAgICAgICAgZnJhbWVzX29mZnNl
dDsgICAKICAgIElOVCAgICAgICAgICAgICBmaXJzdF9mcmFtZV9vZl9hdWRpb19maWxlOyAgCgkJ
CQkgCiAgICAJCQkJIAoJCQkJIAogICAgRE9VQkxFICAgICAgICAgIHJhdGU7CiAgICBJTlQgICAg
ICAgICAgICAgbmNoYW5uZWxzOwogICAgSU5UICAgICAgICAgICAgIGNoYW5uZWxzX3dpdGhfZGF0
YTsKCiAgICBJTlQgICAgICAgICAgICAgZGF0YV9jaHVuazsgICAgICAKICAgIElOVCAgICAgICAg
ICAgICBkYXRhX2dhcDsgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCgogICAgSU5UICAgICAgICAgICAgIHNvdW5kX2dhcDsgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKCiAgICBJTlQgICAgICAgICAgICAgdG90YWxfbnNhbXBz
Z290OyAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIElOVCAg
ICAgICAgICAgICBmcHM7CgogICAgc2hvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAqc291
bmRzdGFydDsKICAgIHNob3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgKnNvdW5kZW5kOwog
ICAgc2hvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAqc291bmRwdHI7CiAgICBzaG9ydCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICpmcmFuZ2VzdGFydDsKICAgIHNob3J0ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKmZyYW5nZWVuZDsKCiAgICAgCiAgICBOUkhZX2NsYXNzU291bmQg
KAogICAgICAgIGNvbnN0IENIQVIgICpuYW1lCiAgICAgICAgKTsKICAgIE5SSFlfY2xhc3NTb3Vu
ZCAoCiAgICAgICAgY29uc3QgQ0hBUiAgICAgICpuYW1lLAogICAgICAgIE5SSFlfY2xhc3NTb3Vu
ZCAqY2xvbmVGcm9tCiAgICAgICAgKTsKICAgIE5SSFlfY2xhc3NTb3VuZCAoCiAgICAgICAgdm9p
ZCAKICAgICAgICApOwoKICAgIH5OUkhZX2NsYXNzU291bmQgKAogICAgICAgIHZvaWQgCiAgICAg
ICAgKTsKCiAgICAgCiAgICBzdGF0aWMgY29uc3QgQ0hBUiAgICAgICAgICAgICAgICpQcmludFNl
bGZDbGFzc25hbWUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAoIk5SSFlf
Y2xhc3NTb3VuZCIpOyB9CgogICAgIAoKICAgIHN0YXRpYyBJTlQgICAgICAgICAgICAgICAgICAg
ICAgR2V0U2VsZkNsYXNzVHlwZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJu
IChUSElOR19UWVBFX1NPVU5EKTsgfQoKICAgIHN0YXRpYyBOUkhZX2J1bmNoPE5SSFlfY2xhc3NT
b3VuZD4gKkZpbmQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQ0hBUiAgKm5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAg
ICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5hbWUgKAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUiAgKm5ld05hbWUKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBOUkhZX2NsYXNzVGhpbmcgICAgICAg
ICAgICAgICAgICpDbG9uZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBDSEFSICAqbmV3TmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICApOwoKICAgIGNvbnN0IENIQVIgICAgICAgICAgICAgICAgICAgICAgKlByaW50RGVyaXZlZENs
YXNzT2ZTZWxmVHlwZU5hbWUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAo
InNvdW5kIik7IH0KICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0RGVyaXZl
ZENsYXNzT2ZTZWxmVHlwZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuIChU
SElOR19UWVBFX1NPVU5EKTsgfQoKICAgICAKCgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEZXNjcmliZUNyZWF0ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBEZXNjcmliZUZ1bGxTdGF0ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
ZXNjcmliZUZ1bGxTdGF0ZVBhY2tlZCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBEZXNjcmliZVJhbmdlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2Ny
aWJlRmlsZU5hbWUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xh
c3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVT
b3VuZE9mZnNldCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFz
cyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZVNv
dW5kRnJhbWVzT2Zmc2V0ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2Ny
aWJlT25GbGFnICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5SSFlf
Q2xhc3NEZXNjcmliZVN0cmVhbSAmZGVzYwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICBaT09MRUFOICAgICAgICAg
ICAgICAgICAgICAgICAgIFNldFNvdW5kT2Zmc2V0KAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRkxPQVQgICBvZmZzZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKTsKCiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNldFNvdW5k
RnJhbWVzT2Zmc2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5U
ICAgb2Zmc2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgWk9P
TEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXRGaWxlTmFtZSAoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSICAgICAgKm5ld0ZpbGVOYW1lCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgWk9PTEVBTiAgICAgICAg
ICAgICAgICAgICAgICAgICBTZXRSYW5nZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOUkhZX0lOVF9GUkFOR0UgKmZyYW5nZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApOwoKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgSW5p
dGlhbGl6ZUF1ZGlvUHJvY2VzcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgdm9p
ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VuZEF1ZGlvQ29tbWFuZCgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCAgICAgKmNob2ljZQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIFR3aW5lICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR2V0RmlsZU5hbWUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJu
ICh0aGlzLT5wdHNGaWxlbmFtZSk7IH0KCgoKCgoKCgogICAgdm9pZCAJCQkgICAgVmlzdWFsaXpl
U291bmQgKHZvaWQgKTsKCiAgICB2b2lkIAkJCSAgICBwcmVwYXJlVmlzdWFsRGF0YSgKICAgICAg
ICAJCQkJRkxPQVQJKmRhdGEsCgkJCQkJSU5UCWNoYW5uZWwKICAgIAkJCQkgICAgKTsKCiAgICB2
b2lkIAkJCSAgICBHZXRGaWxlTmFtZSAoIAoJCQkJCVR3aW5lICAgICAgCW5ld0ZpbGVOYW1lCgkJ
CQkgICAgKTsKCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3RTb3VuZChG
SUxFICpmcCwgY29uc3QgTGlzdDxUd2luZT4gJmxzKTsKfTsKCiAKCiAKCiMgMzEgImgvbnJoeV90
ZW1wbGF0ZU1hdGNoLmMiIDIKCgojIDEgImgvbnJoeV9jbGFzc1RyYWNrLmgiIDEKCiAKCgoKCgoK
CgoKCgoKCgoMCiAKCgoKIAoKCiAKCgoKCgogCgoKCgoKIyAxICJoL25yaHlfY2xhc3NUcmFja01h
bmlwdWxhdG9yLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKY2xhc3MgTlJIWV9jbGFzc1Ry
YWNrOwoKY2xhc3MgTlJIWV9jbGFzc1RyYWNrTWFuaXB1bGF0b3IgOgogIHB1YmxpYyBNYW5pcHVs
YXRvcgp7CnB1YmxpYzoKICBlbnVtIHsgTk9ORSA9IDAsIERSQUcsIFJFU0laRVJFRiwgUkVTSVpF
U0VBUkNIIH07CgpwdWJsaWM6CiAgTlJIWV9jbGFzc1RyYWNrTWFuaXB1bGF0b3Iodm9pZCAqKTsK
ICB+TlJIWV9jbGFzc1RyYWNrTWFuaXB1bGF0b3IoKTsKCiAgdmlydHVhbCBpbnQgICAgIFN0YXJ0
TWFuaXB1bGF0aW9uKE9wZW5TdGFnZUNhbGxiYWNrU3RydWN0ICpjYiwKCQkJCSAgICB2b2lkICpj
YW1QdHIsIGludCBwb3J0V2lkdGgsIAoJCQkJICAgIGludCBwb3J0SGVpZ2h0LCB2b2lkICopOwog
IHZpcnR1YWwgYm9vbCBNb3ZlKE9wZW5TdGFnZUNhbGxiYWNrU3RydWN0ICpjYik7CiAgdmlydHVh
bCBib29sIEZpbmlzaE1hbmlwdWxhdGlvbihPcGVuU3RhZ2VDYWxsYmFja1N0cnVjdCAqY2IpOwoK
ICB2aXJ0dWFsIGludCAgICAgU3RhcnRGZWVkYmFjaygpOwogIHZpcnR1YWwgYm9vbCBNb3Rpb25G
ZWVkYmFjaygpOwogIHZpcnR1YWwgYm9vbCBGaW5pc2hGZWVkYmFjaygpOwoKICB2aXJ0dWFsIHZv
aWQgICAgUmVmcmVzaCgpOwoKICAgCiAgdmlydHVhbCB2b2lkICAgIERyYXdpbmdSb3V0aW5lKHZv
aWQgKnBvcnQpOwoKICB2aXJ0dWFsIGludCAgQ2hlY2tIb3RTcG90cyhPcGVuU3RhZ2VDYWxsYmFj
a1N0cnVjdCAqY2IpOwogIHZpcnR1YWwgdm9pZCBDYWxjSG90U3BvdHMoaW50IHBvcnRXaWR0aCwK
CQkJICAgIGludCBwb3J0SGVpZ2h0KTsKCnByb3RlY3RlZDoKICBpbnQgX21vZGU7CiAgTlJIWV9j
bGFzc0NhbWVyYSAqX2NhbVB0cjsKICBpbnQgX3BXaWR0aCwgX3BIZWlnaHQ7CiAgTlJIWV9jbGFz
c0NoYW5uZWwgKl94Q2hhbiwgKl95Q2hhbjsKICBmbG9hdCBfeE9mZnNldCwgX3lPZmZzZXQsIF96
b29tOwogIGZsb2F0IF9yZWZyZWN0WzRdLCBfc2VhcmNocmVjdFs0XTsKICBOUkhZX2NsYXNzQ2hh
bm5lbCAqX3NlYXJjaDEsICpfc2l6ZTEsICpfc2l6ZTI7CiAgZmxvYXQgX3NlYXJjaFZhbCwgX3Jl
ZlhWYWwsIF9yZWZZVmFsOwoKfTsKCk5SSFlfY2xhc3NUcmFja01hbmlwdWxhdG9yICoKTlJIWV9B
Y3RpdmF0ZVRyYWNrTWFuaXB1bGF0b3IoY29uc3QgTGlzdDxOUkhZX2NsYXNzVHJhY2sgKj4gJlRy
YWNrcywKCQkJICAgICAgTlJIWV9jbGFzc0NhbWVyYSAqY2FtUHRyLAoJCQkgICAgICBPcGVuU3Rh
Z2VDYWxsYmFja1N0cnVjdCAqY2IsCgkJCSAgICAgIGludCBwb3J0V2lkdGgsIGludCBwb3J0SGVp
Z2h0KTsKCgojIDM3ICJoL25yaHlfY2xhc3NUcmFjay5oIiAyCgoKIAojIDEgIi9zb2Z0d2FyZS90
aGFsaWEvaC90cmFjay5oIiAxCgogCgoKCgoKCgoKCgoKCgoKCgwKIAoKCgojIDEgIi9zb2Z0d2Fy
ZS90aGFsaWEvaC9zdGR0eXBlcy5oIiAxCgogCgoKCgoKCgoKCgoKCgoKCgoKIyAyMDMgIi9zb2Z0
d2FyZS90aGFsaWEvaC9zdGR0eXBlcy5oIgoKCgoKCgoKCgoKCgoKCiMgMjMgIi9zb2Z0d2FyZS90
aGFsaWEvaC90cmFjay5oIiAyCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IHRyX2xyYnQgewogICAg
ZmxvYXQgICAgbGVmdDsKICAgIGZsb2F0ICAgIHJpZ2h0OwogICAgZmxvYXQgICAgYm90dG9tOwog
ICAgZmxvYXQgICAgdG9wOwp9IFRSX0xSQlQ7CgogCgpjbGFzcyBUcmFjayB7Cgpwcml2YXRlOgoK
ICAgIHN0YXRpYyBjaGFyICAgIAkqZXJyb3JNZXNzYWdlW107CgogICAgaW50CQkJX0Vycm9yQ29k
ZTsKCiAgICBpbnQgVHJhY2tTdGVwKAogICAgCWludCAgICAgY3VycmVudEZyYW1lLCAKICAgIAlp
bnQgICAgIG5leHRGcmFtZSwgCiAgICAJQk9PTEVBTiBzZWNvbmRQYXNzCiAgICApOwoKICAgIEJP
T0xFQU4JUmVmU2l6ZUNoYW5nZWQoCglpbnQJY3VycmVudEZyYW1lLAoJaW50CW5leHRGcmFtZQog
ICAgKTsKCiAgICBpbnQgUmVjdHNQYXJhbXMoCiAgICAJVFJfTFJCVCAgICBiUmVjdFJlZiwKICAg
IAlUUl9MUkJUICAgIGJSZWN0TmV4dCwKICAgIAlpbnQgICAgIGZyYW1lCiAgICApOwoKICAgIHZv
aWQgIEludGVycG9sYXRlVHJhY2soCiAgICAJaW50ICAJZnJhbWUKICAgICk7CgogICAgdm9pZCAg
Q2xlYXJCdWZmZXJzKAogICAgCXZvaWQgCiAgICApOwoKICAgIGludCAgRmlsdGVyQnVmZmVycygK
CWZsb2F0ICAgKippblJlZ2lvbiwgCglmbG9hdCAgICoqZmlsdGVyZWQsIAoJSU5UCWZJbkFjcm9z
cywgCglJTlQJZkluRG93bgogICAgKTsKCiAgICBpbnQgIFN0YWJsZSgKCUJPT0xFQU4gcm91Z2hW
U3ByZWNpc2UsCglmbG9hdAkqZGVsdGFYLAoJZmxvYXQJKmRlbHRhWQogICAgKTsKCiAgICBpbnQg
IFN0YWJsZUxvb3AoCglmbG9hdAkqdG90YWxYU2hpZnQsCglmbG9hdAkqdG90YWxZU2hpZnQsCiAJ
aW50CWZyYW1lCiAgICApOwoKICAgIHZvaWQgIFNhdmVSZXN1bHRzKAoJaW50CXRoaXNfZnJhbWUs
CglpbnQJbmV4dF9mcmFtZSwKCUJPT0xFQU4Jc2Vjb25kUGFzcywKCWZsb2F0CWRlbHRhWCwKCWZs
b2F0CWRlbHRhWQogICAgKTsKCiAgICB2b2lkICBUcmFja0VuZExvb3BDbGVhbigKCXZvaWQgCiAg
ICApOwoKICAgIGludCBOZWFyZXN0S2V5TGVzc1RoYW4oCglpbnQgZnJhbWUKICAgICk7CgogICAg
aW50IE5lYXJlc3RLZXlHcmVhdGVyVGhhbigKCWludCBmcmFtZQogICAgKTsKCiAgICBpbnQgTmV4
dEZyYW1lKAoJaW50IGZyYW1lCiAgICApOwoKICAgIGZsb2F0ICAgICAJCV9yb3VuZEVycm9yWDsK
ICAgIGZsb2F0IAkJX3JvdW5kRXJyb3JZOwogICAgZmxvYXQgICAgIAkJX3NlYXJjaENlbnRlclBy
ZXZYOwogICAgZmxvYXQgCQlfc2VhcmNoQ2VudGVyUHJldlk7Cgpwcm90ZWN0ZWQ6CgogICAgZmxv
YXQgICAgICAgICAgICAgICAqZkluUmVnaW9uWzRdLCAqZlJlZlJlZ2lvbls0XSwgKmZJblJlZ2lv
bjJbNF07CiAgICBmbG9hdCAgIAkJKkluUmVnaW9uWzRdLCAqUmVmUmVnaW9uWzRdOwoKICAgIGZs
b2F0ICAgICAgICAgICAgICAgeHNlYXJjaCwgeXNlYXJjaCwgeHJlZiwgeXJlZjsKCiAgICBpbnQJ
CQlpbl9keCwgaW5fZHk7IAkgCiAgICBpbnQJCQlyZWZfZHgsIHJlZl9keTsgIAoKICAgIEJPT0xF
QU4gICAgICAgICAgICAgZHVhbDsKICAgIEJPT0xFQU4gICAgICAgICAgICAgYWRqdXN0S2V5czsK
ICAgIEJPT0xFQU4gICAgICAgICAgICAgdHJhY2tJdDsKICAgIEJPT0xFQU4JCXJlZmlsbFJlZjsJ
CQogICAgQk9PTEVBTgkJcmVmcmVzaE9ubHlLZXlzOwoKICAgIGludCAgICAgICAgICAgICAgICAg
X0ltYWdlV2lkdGgsIF9JbWFnZUhlaWdodCwgX2NoYW5zOwogICAgRlJBTkdFICAgICAJCWZyYW5n
ZTsKCiAgICBUUl9MUkJUICAgICAJX3JSZWN0OyAKICAgIFRSX0xSQlQgICAgICAgICAgICAgX3NS
ZWN0OwogICAgVFJfTFJCVCAgICAgICAgICAgICBfY1JlY3RSZWY7IAogICAgVFJfTFJCVCAgICAg
ICAgICAgICBfY1JlY3ROZXh0OwoKICAgIHZvaWQJCUdldERhdGEoCgkJCSAgICBpbnQgZnJhbWUK
CQkJKTsKCiAgICB2aXJ0dWFsIFRSX0xSQlQgICAgIGdldENyb3AoaW50IGZyYW1lKSA9IDA7Cgog
ICAgdmlydHVhbCBCT09MRUFOICAgICBnZXRLZXlGcmFtZShpbnQgZnJhbWUpID0gMDsKICAgIHZp
cnR1YWwgaW50CQlnZXRUcmFja1RpbWVzKGludCBmcmFtZSk7CQogICAgdmlydHVhbCBmbG9hdAln
ZXRUcmFja1RvbGVyYW5jZShpbnQgZnJhbWUpOwoKICAgIHZpcnR1YWwgdm9pZCAgICAgICAgR2V0
RGF0YShpbnQgZnJhbWUsIFRSX0xSQlQgY29vcmRzLCBmbG9hdCAqKnJlZ2lvbiwgQk9PTEVBTiBm
bGFnKSA9IDA7CgogICAgdmlydHVhbCBmbG9hdCAgICAgICBHZXRUcmFja1NlYXJjaEFyZWEoaW50
IGZyYW1lKTsJCiAgICB2aXJ0dWFsIGZsb2F0CUdldFRyYWNrUmVmV2lkdGgoaW50IGZyYW1lKTsK
ICAgIHZpcnR1YWwgZmxvYXQJR2V0VHJhY2tSZWZIZWlnaHQoaW50IGZyYW1lKTsJCgogICAgdmly
dHVhbCBCT09MRUFOICAgICBQcm9ncmVzcyhmbG9hdCBwcm9ncmVzcykge3JldHVybiAxIDt9Cgog
ICAgdmlydHVhbCB2b2lkIAlTZXRYdHJhbihpbnQgZnJhbWUsIGZsb2F0IHZhbHVlKSA9IDA7CQog
ICAgdmlydHVhbCB2b2lkIAlTZXRZdHJhbihpbnQgZnJhbWUsIGZsb2F0IHZhbHVlKSA9IDA7Cgog
ICAgdmlydHVhbCB2b2lkIAlTZXRYZGlmZihpbnQgZnJhbWUsIGZsb2F0IHZhbHVlKXt9CQogICAg
dmlydHVhbCB2b2lkIAlTZXRZZGlmZihpbnQgZnJhbWUsIGZsb2F0IHZhbHVlKXt9CgpwdWJsaWM6
CgogICAgVHJhY2soKTsKICAgIH5UcmFjayAodm9pZCApOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICB2b2lkCXRyYWNrICh2b2lkICk7CQkgCgogICAgdm9pZAlBZGp1c3RLZXlzIChC
T09MRUFOIHNldCk7CiAgICB2b2lkCVJlZnJlc2hBdEtleXMgKEJPT0xFQU4gc2V0KTsKICAgIHZv
aWQJRHVhbFRyYWNrIChCT09MRUFOIHNldCk7CgogICAgdm9pZCAgICAgICAgU2V0SW1hZ2VEaW1l
bnNpb25zKGludCB3LCBpbnQgaCwgaW50IG5jaGFuKTsKCiAgICB2b2lkICAgICAgICBTZXRGcmFu
Z2UoY29uc3QgRlJBTkdFJiBmKQogICAgICAgICAgICAgICAgICAgIHsgZnJhbmdlID0gZjsgfTsK
ICAgIHZvaWQgICAgICAgIFNldEZyYW5nZShmbG9hdCBmcywgZmxvYXQgZmUsIGZsb2F0IGZpPTEp
CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGZyYW5nZS5iZWdpbiA9
IGZzOwogICAgICAgICAgICAgICAgICAgIGZyYW5nZS5lbmQgICA9IGZlOwogICAgICAgICAgICAg
ICAgICAgIGZyYW5nZS5pbmMgICA9IGZpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICB2aXJ0
dWFsIGZsb2F0IEdldFh0cmFuKGludCBmcmFtZSkgPSAwOwkKICAgIHZpcnR1YWwgZmxvYXQgR2V0
WXRyYW4oaW50IGZyYW1lKSA9IDA7CgogICAgdmlydHVhbCBmbG9hdCBHZXRYZGlmZihpbnQgZnJh
bWUpe3JldHVybiAwLjA7fQkKICAgIHZpcnR1YWwgZmxvYXQgR2V0WWRpZmYoaW50IGZyYW1lKXty
ZXR1cm4gMC4wO30KCiAgICBpbnQJCUdldEVycm9yQ29kZSh2b2lkKTsKICAgIENIQVIJKkdldEVy
cm9yTWVzc2FnZSh2b2lkKTsKCn07CgogCgojIDQwICJoL25yaHlfY2xhc3NUcmFjay5oIiAyCgoj
IDEgIi9zb2Z0d2FyZS90aGFsaWEvaC9idWYuaCIgMQoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IyAxICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK
IAoKCgoKCgpleHRlcm4gIkMiIHsgCgogCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgi
IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvZXJy
bm8uaCIgMSAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2FzbS9lcnJuby5oIiAxIDMKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgojIDQgIi91c3IvaW5jbHVkZS9saW51eC9lcnJuby5oIiAyIDMK
CgojIDE0ICIvdXNyL2luY2x1ZGUvbGludXgvZXJybm8uaCIgMwoKCgojIDI1ICIvdXNyL2luY2x1
ZGUvYml0cy9lcnJuby5oIiAyIDMKCgogCgoKIAoKCgoKIApleHRlcm4gaW50IGVycm5vOwoKIApl
eHRlcm4gaW50ICpfX2Vycm5vX2xvY2F0aW9uICAodm9pZCkgIHRocm93ICgpICAgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKIyAzNiAiL3Vzci9pbmNs
dWRlL2Vycm5vLmgiIDIgMwoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgp9IAoKCgogCgoKCgoKCgoK
CgojIDI1ICIvc29mdHdhcmUvdGhhbGlhL2gvYnVmLmgiIDIKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCgoKIAoKCnR5cGVkZWYgc3RydWN0ICB7CiAgICBJTlQgICAgIG9wY29kZTsgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgIAoKCgogICAgSU5UICAgICBpbnQxOwogICAgSU5U
ICAgICBpbnQyOwogICAgSU5UICAgICBpbnQzOwogICAgSU5UICAgICBjb2RlOwogICAgQ0hBUiAg
ICBzdHIxWzY0IF07CiAgICBDSEFSICAgIHN0cjJbNjQgXTsKICAgIFVfQ0hBUiAgcmVkOwogICAg
VV9DSEFSICBncmVlbjsKICAgIFVfQ0hBUiAgYmx1ZTsKICAgIFVfQ0hBUiAgbWF0dGU7CiAgICAg
ICAgICAgICAgICAgICAgfSBCVUZfUlBBQ0tFVDsKCgogCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKdHlwZWRlZiBjaGFyICAgICAgICAgICAgKlBP
SU5URVI7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgICAgICAgICBsZWZ0LCByaWdodCwgYm90
dG9tLCB0b3A7Cn0gV0lORE9XX0k7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBzaG9ydCAgICAgICBs
ZWZ0LCByaWdodCwgYm90dG9tLCB0b3A7Cn0gV0lORE9XX1M7CgoKdHlwZWRlZiBzdHJ1Y3Qgewog
ICAgZmxvYXQgICAgICAgICAgIHgseSx6Owp9IENPTE9SX1hZWl8zRjsKCgoKIAoKdHlwZWRlZiBz
dHJ1Y3QKICAgIHsKICAgIElOVCAgICAgbWFnaWM7CiAgICBTSE9SVCAgIHZlcnM7CiAgICBDSEFS
ICAgIGxhYmVsWzEyOF07CiAgICBTSE9SVCAgIHN0RnJhbWU7CiAgICBTSE9SVCAgIGVuZEZyYW1l
OwogICAgQ0hBUiAgICBzcGFjZTFbMTZdOwogICAgQ0hBUiAgICBkZXNjWzEyOF07CiAgICBTSE9S
VCAgIGpvYjsKICAgIElOVCAgICAgcGlkOwogICAgQ0hBUiAgICBtYWNoaW5lWzE2XTsKICAgIENI
QVIgICAgdXNlclszMl07CiAgICBDSEFSICAgIGRhdGVbMTZdOwogICAgU0hPUlQgICBhY3RMZWZ0
OwogICAgU0hPUlQgICBhY3RSaWdodDsKICAgIFNIT1JUICAgYWN0Qm90dG9tOwogICAgU0hPUlQg
ICBhY3RUb3A7CiAgICBTSE9SVCAgIHNhbXBsaW5nOwogICAgQ0hBUiAgICBnYW1tYVsxMF07CiAg
ICBDSEFSICAgIHNwYWNlMUV4dFs0NF07CiAgICBTSE9SVCAgIHBpY3RIZWlnaHQ7CiAgICBTSE9S
VCAgIHBpY3RXaWR0aDsKICAgIFNIT1JUICAgdGlsZUhlaWdodDsKICAgIFNIT1JUICAgdGlsZVdp
ZHRoOwogICAgU0hPUlQgICBwaWN0Rm9ybWF0OwogICAgU0hPUlQgICBwaWN0U3RvcmFnZTsKICAg
IFNIT1JUICAgYmxvY2tGb3JtYXQ7CiAgICBTSE9SVCAgIHVudXNlZDsKICAgIFNIT1JUICAgeE9m
ZjsKICAgIFNIT1JUICAgeU9mZjsKICAgIENIQVIgICAgc3BhY2UyWzEyXTsKICAgIElOVCAgICAg
Y01hcFBudHI7CiAgICBDSEFSICAgIGNNYXBOYW1lWzI4XTsKICAgIENIQVIgICAgc3BhY2UzWzMy
XTsKICAgIH0gQUJFTF9JX0hFQUQ7CgoKCiAKCnN0cnVjdCBXRl9JX0hFQUQKICAgIHsKICAgIFdJ
TkRPV19TICAgIHdpbmQ7CiAgICBXSU5ET1dfUyAgICBhY3RXaW5kOwogICAgU0hPUlQgICAgICAg
ZnJhbWU7CiAgICBTSE9SVCAgICAgICBzdG9yYWdlOwogICAgU0hPUlQgICAgICAgaW1hZ2VDaGFu
czsKICAgIFNIT1JUICAgICAgIG1hdHRlQ2hhbnM7CiAgICBTSE9SVCAgICAgICBhdXhDaGFuczsK
ICAgIFNIT1JUICAgICAgIHdhdmVSZXZpc2lvbjsgICAgCiAgICBDSEFSICAgICAgICBnYW1tYVsx
Nl07CiAgICBDSEFSICAgICAgICByZWRQcmlbMjRdOwogICAgQ0hBUiAgICAgICAgZ3JlZW5Qcmlb
MjRdOwogICAgQ0hBUiAgICAgICAgYmx1ZVByaVsyNF07CiAgICBDSEFSICAgICAgICB3aGl0ZVB0
WzI0XTsKICAgIElOVCAgICAgICAgIGpvYk51bTsKICAgIENIQVIgICAgICAgIGZpbGVuYW1lWzEy
OF07CiAgICBDSEFSICAgICAgICBkZXNjcmlwdGlvblsxMjhdOwogICAgQ0hBUiAgICAgICAgcHJv
Z3JhbVs2NF07CiAgICBDSEFSICAgICAgICBtYWNoaW5lWzMyXTsKICAgIENIQVIgICAgICAgIHVz
ZXJbMzJdOwogICAgQ0hBUiAgICAgICAgZGF0ZVsyMF07CiAgICBDSEFSICAgICAgICBhc3BlY3Rb
MjRdOwogICAgQ0hBUiAgICAgICAgYXNwZWN0UmF0aW9bOF07CiAgICBDSEFSICAgICAgICBjaGFu
VHlwZVszMl07CiAgICBDSEFSICAgICAgICBzcGFjZTNbNDZdOyAgCiAgICBTSE9SVCAgICAgICBj
aGFuQml0czsKICAgIFNIT1JUICAgICAgIG1hdHRlVHlwZTsKICAgIFNIT1JUICAgICAgIG1hdHRl
Qml0czsKICAgIENIQVIgICAgICAgIGF1eFByb2dyYW1JZDsKICAgIFVfQ0hBUiAgICAgIGF1eENo
YW5uZWxUeXBlc1szMiBdOwogICAgQ0hBUiAgICAgICAgc3BhY2VbNjkgLSAzMiBdOyAgCiAgICBT
SE9SVCAgICAgICByZXZpc2lvbjsgICAgIAogICAgSU5UICAgICAgICAgbmV4dDsgICAgICAgICAK
ICAgIH07CgoKCgpzdHJ1Y3QgV0ZfSV9GSUxFCiAgICB7CiAgICBXRl9JX0hFQUQgICAgICAgKmhl
YWRlcjsKICAgIElOVCAgICAgICAgICAgICBudW1DaGFuczsgICAgICAgICAgICAKICAgIElOVCAg
ICAgICAgICAgICBhY3Jvc3M7ICAgICAgICAgICAgICAKICAgIElOVCAgICAgICAgICAgICBkb3du
OyAgICAgICAgICAgICAgICAKICAgIElOVCAgICAgICAgICAgICB4T2Zmc2V0OyAgICAgICAgICAg
ICAKICAgIElOVCAgICAgICAgICAgICB5T2Zmc2V0OyAgICAgICAgICAgICAKICAgIElOVCAgICAg
ICAgICAgICByZWFsRG93bjsgICAgICAgICAgICAKICAgIE5FVEZJTEVfRklMRSAgICAqZmlsZVBv
aW50ZXI7ICAgICAgICAKICAgIENIQVIgICAgICAgICAgICBhY2Nlc3M7ICAgICAgICAgICAgICAK
ICAgIEJPT0xFQU4gICAgICAgICBmdWxsOyAgICAgICAgICAgICAgICAKICAgIEJPT0xFQU4gICAg
ICAgICBsb2dEYXRhOyAgICAgICAgICAgICAKICAgIEJPT0xFQU4gICAgICAgICBmbG9hdERhdGE7
ICAgICAgICAgICAKICAgIEJPT0xFQU4gICAgICAgICBkaXRoZXI7ICAgICAgICAgICAgICAKICAg
IElOVCAgICAgICAgICAgICBsaW5lTnVtYmVyOyAgICAgICAgICAKICAgIElOVCAgICAgICAgICAg
ICAqbGluZVN0YXJ0czsgICAgICAgICAKICAgIElOVCAgICAgICAgICAgICBsaW5lU3RydHNMb2M7
ICAgICAgICAgCiAgICBVX0NIQVIgICAgICAgICAgKipidWZQdHI7ICAgICAgICAgICAgCiAgICBS
RUFMICAgICAgICAgICAgKipyQnVmUHRyOyAgICAgICAgICAgCiAgICBJTlQgICAgICAgICAgICAg
eFJlc1Bvc3RnZTsgICAgICAgICAgCiAgICBJTlQgICAgICAgICAgICAgeVJlc1Bvc3RnZTsgICAg
ICAgICAgCiAgICBVX0NIQVIgICAgICAgICAgKipwb3N0Z2VQdHI7ICAgICAgICAgCiAgICBGTE9B
VCAgICAgICAgICAgeEZyYWN0aW9uOyAgICAgICAgICAgCiAgICBGTE9BVCAgICAgICAgICAgeUZy
YWN0aW9uOyAgICAgICAgICAgCiAgICBVX0NIQVIgICAgICAgICAgKnNQdHI7ICAgICAgICAgICAg
ICAgCiAgICBJTlQgICAgICAgICAgICAgdHlwZTsgICAgICAgICAgICAgICAgCiAgICBJTlQgICAg
ICAgICAgICAgY2hhbkJpdHM7ICAgICAgICAgICAgCiAgICB9OwoKCgoKCgogCgoKCgoKCgoKCgog
CgoKCgoKCgoKCgoKCgoKIApleHRlcm4gIElOVCAgICAgSU1fRXJyb3I7CmV4dGVybiAgQ0hBUiAg
ICAqSU1fRVJSX01lc3NhZ2VbXTsKCiAKCgogCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKICAgIHsKICAg
IElOVCAgICAgICAgIHJldmlzaW9uOyAgICAgICAgICAgICAgICAgICAgCiAgICBJTlQgICAgICAg
ICBudW1EZXB0aHM7ICAgICAgICAgICAgICAgICAgIAoKICAgIAogICAgV0lORE9XX1MgICAgd2lu
ZDsKICAgIFdJTkRPV19TICAgIGFjdFdpbmQ7CiAgICBJTlQgICAgICAgICBqb2JOdW07CiAgICBJ
TlQgICAgICAgICBmcmFtZTsKICAgIENIQVIgICAgICAgIGZpbGVuYW1lWzEyOF07CiAgICBDSEFS
ICAgICAgICBkZXNjcmlwdGlvblsxMjhdOwogICAgQ0hBUiAgICAgICAgcHJvZ3JhbVs2NF07CiAg
ICBDSEFSICAgICAgICBtYWNoaW5lWzMyXTsKICAgIENIQVIgICAgICAgIHVzZXJbMzJdOwogICAg
Q0hBUiAgICAgICAgZGF0ZVsyMF07CiAgICBNQVRSSVggICAgICBtYXRyaXg7CiAgICBSRUFMICAg
ICAgICBhc3BlY3Q7CiAgICBSRUFMICAgICAgICB2aWV3VGFuOwogICAgUkVBTCAgICAgICAgek1p
biwgek1heDsKICAgIH0gRFBUX05FV19IRUFEOwoKCiAKc3RydWN0IERQVF9IRUFECiAgICB7CiAg
ICBXSU5ET1dfUyAgICB3aW5kOwogICAgV0lORE9XX1MgICAgYWN0V2luZDsKICAgIElOVCAgICAg
ICAgIGpvYk51bTsKICAgIElOVCAgICAgICAgIGZyYW1lOwogICAgQ0hBUiAgICAgICAgZmlsZW5h
bWVbMTI4XTsKICAgIENIQVIgICAgICAgIGRlc2NyaXB0aW9uWzEyOF07CiAgICBDSEFSICAgICAg
ICBwcm9ncmFtWzY0XTsKICAgIENIQVIgICAgICAgIG1hY2hpbmVbMzJdOwogICAgQ0hBUiAgICAg
ICAgdXNlclszMl07CiAgICBDSEFSICAgICAgICBkYXRlWzIwXTsKICAgIE1BVFJJWCAgICAgIG1h
dHJpeDsKICAgIFJFQUwgICAgICAgIGFzcGVjdDsKICAgIFJFQUwgICAgICAgIHZpZXdUYW47CiAg
ICBSRUFMICAgICAgICB6TWluLCB6TWF4OwogICAgfTsKCgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAg
ICBNQVRSSVggICAgICBtYXRyaXg7CiAgICBSRUFMICAgICAgICBhc3BlY3Q7CiAgICBSRUFMICAg
ICAgICB2aWV3VGFuOwogICAgUkVBTCAgICAgICAgek1pbiwgek1heDsKICAgIH0gRFBUX0xPQ0FM
X0RBVEE7CiAgICAKCgogCnR5cGVkZWYgc3RydWN0CiAgICB7CiAgICBJTlQgICAgICgqb3BlbkZp
bGVGdW5jKSgKICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSICAgICAgICAgICAgICAqZnVs
bEZpbGVOYW1lLAogICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIFdGX0lfSEVBRCAgICAgICpo
ZWFkZXIsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUiAgICAgICAgICAgICAgKmFjY2Vz
cywKICAgICAgICAgICAgICAgICAgICBCT09MRUFOICAgICAgICAgICAgICAgICBmdWxsLAogICAg
ICAgICAgICAgICAgICAgIFdGX0lfRklMRSAgICAgICAgICAgICAgICoqaUZpbGUsCiAgICAgICAg
ICAgICAgICAgICAgSU5UICAgICAgICAgICAgICAgICAgICAgdHlwZSwgCiAgICAgICAgICAgICAg
ICAgICAgSU5UICAgICAgICAgICAgICAgICAgICAgaW1hZ2VOdW0gCiAgICAgICAgICAgICk7Cgog
ICAgSU5UICAgICAoKnJlYWRTY2FuRnVuYykoCiAgICAgICAgICAgICAgICAgICAgV0ZfSV9GSUxF
ICAgKmlGaWxlLAogICAgICAgICAgICAgICAgICAgIElOVCAgICAgICAgIGxpbmUgCiAgICAgICAg
ICAgICk7CgogICAgSU5UICAgICAoKndyaXRlU2NhbkZ1bmMpKAogICAgICAgICAgICAgICAgICAg
IFdGX0lfRklMRSAgICppRmlsZSAKICAgICAgICAgICAgKTsKCiAgICBJTlQgICAgICgqY2xvc2VG
aWxlRnVuYykoCiAgICAgICAgICAgICAgICAgICAgV0ZfSV9GSUxFICAgKmlGaWxlIAogICAgICAg
ICAgICApOwoKICAgIElOVCAgICAgKCpyZWFkTmV4dFNjYW5GdW5jKSgKICAgICAgICAgICAgICAg
ICAgICBXRl9JX0ZJTEUgICAqaUZpbGUsCiAgICAgICAgICAgICAgICAgICAgQk9PTEVBTiAgICAg
dGFpbCAKICAgICAgICAgICAgKTsKCiAgICB9ICBJTV9GSUxFX0xJU1Q7CgoKIAp0eXBlZGVmICAg
ICB2b2lkICAgICAgICAgKCpJTV9TQ0FOX0ZVTkMpKHZvaWQgICosIHZvaWQgICosIElOVCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQsIElOVCwgdm9pZCAg
KiwgV0ZfSV9IRUFEICopOwoKCnR5cGVkZWYgICAgIHZvaWQgICAgICAgICAoKklNX01TQ0FOX0ZV
TkMpKFVfQ0hBUiAqKltdLCBJTlQsIElOVCwgSU5ULCBJTlQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAgKiwgV0ZfSV9IRUFEICopOwoK
IAoKCgoKCnR5cGVkZWYgdW5pb24gewogICAgSU5UIGFzSU5UOwogICAgUkVBTCBhc1JFQUw7CiAg
ICB9IElOVFJFQUw7CgoKIAp0eXBlZGVmIElOVCAgICAgR0lGX0hJU1RPWzMyXVszMl07Cgp0eXBl
ZGVmIHN0cnVjdAogICAgewogICAgSU5UICAgICByMCwgcjE7CiAgICBJTlQgICAgIGcwLCBnMTsK
ICAgIElOVCAgICAgYjAsIGIxOwogICAgfSAgR0lGX0JPWDsKCiAKZXh0ZXJuIENIQVIgICAgKklN
X0V4dG5zW107CmV4dGVybiBJTlQgICAgIElNX051bUV4dG5zOwoKIApleHRlcm4gUkVBTCAgICAg
SU1fVW5HYW1tYTIyTG9va3VwWzI1Nl07CmV4dGVybiBSRUFMICAgICBJTV9VblNHYW1tYTIyTG9v
a3VwWzY1NTM2XTsKZXh0ZXJuIFVfQ0hBUiAgIElNX0xpblRvTG9nVGFibGVbMjU2XTsKZXh0ZXJu
IFVfQ0hBUiAgIElNX0xvZ1RvTGluVGFibGVbMjU2XTsKZXh0ZXJuIFVfQ0hBUiAgIElNX0dhbW1h
MjJUb0xvZ1RhYmxlWzI1Nl07CmV4dGVybiBVX0NIQVIgICBJTV9Mb2dUb0dhbW1hMjJUYWJsZVsy
NTZdOwpleHRlcm4gUkVBTCAgICAgUkxBX0xpbmVhckxvb2t1cFsyNTZdOwpleHRlcm4gUkVBTCAg
ICAgUkxMX0xvZ0xvb2t1cFsyNTZdOwpleHRlcm4gVV9DSEFSICAgSU1fTG9nVG9GaWxtTG9va3Vw
WzNdWzI1Nl07CmV4dGVybiBVX0NIQVIgICBJTV9HYW1tYTIyVG9GaWxtTG9va3VwWzNdWzI1Nl07
CmV4dGVybiBSRUFMICAgICBJTV9VbkZpbG04Yml0TG9va3VwWzI1Nl07CmV4dGVybiBSRUFMICAg
ICBJTV9PbGRVbkZpbG04Yml0TG9va3VwWzI1Nl07CmV4dGVybiBSRUFMICAgICBJTV9VbkZpbG0x
NmJpdExvb2t1cFs2NTUzNl07CmV4dGVybiBSRUFMICAgICBJTV9PbGRVbkZpbG0xNmJpdExvb2t1
cFs2NTUzNl07CgogCgoKCgoKCmV4dGVybiBVX0NIQVIgICBJTV9HYW1tYTIyTG9va3VwWzE2MjU0
ICAtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzNzE3ICArIDFdOwoKCgpleHRl
cm4gVV9TSE9SVCBJTV9TR2FtbWEyMkxvb2t1cFsxNjI1NSAtCgkJCQkxMTc0MyAgKzFdOwoKCgpl
eHRlcm4gVV9TSE9SVCAgSU1fVW5HYW1tYTIyU2hvcnRMb29rdXBbMjM2OTggIC0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg1MDcgICsgMV07CgoKCmV4dGVybiBVX1NI
T1JUICBSTExfU2hvcnRzVG8xMkJpdFsxNjc2NyAgLQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMTQ3MjEgICsgMV07CgoKCmV4dGVybiBVX1NIT1JUICBJTV9GaWxtUkxMTG9va1Vw
WzI1MzhdOwoKCgpleHRlcm4gVV9TSE9SVCAgSU1fVW5maWxtUkxMTG9va1VwWyA5MjYgXTsKCgoK
ZXh0ZXJuIFVfU0hPUlQgIFJMTF9PbGQyQ2luZW9uMTBCaXRbMTY1ODEgIC0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDE1MTMzICArIDFdOwoKCgpleHRlcm4gVV9TSE9SVCAgUkxM
XzJDaW5lb24xMEJpdFsxNjcyNiAgLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MTUyNzUgICsgMV07CgoKCmV4dGVybiBVX1NIT1JUIFJMTF9TaG9ydHNUb0ZpbG1bMTYyNTQgIC0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzcxNyAgKyAxXTsKCgoKCmV4dGVybiBV
X1NIT1JUIFJMTF9TaG9ydHNUb1ZpZGVvWzE3MDk2ICAtIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAxMzcwMiAgKyAxXTsKCiAKCgoKCgoKCgoKZXh0ZXJuIFVfQ0hBUiBJTV9PbGRG
aWxtOGJpdExvb2t1cFsxNjU4MSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ2NTYgICsx
XTsKZXh0ZXJuIFVfU0hPUlQgSU1fT2xkRmlsbTE2Yml0TG9va3VwWzE2NTgxIC0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAxNDY1NiAgKzFdOwoKCgoKZXh0ZXJuIFVfQ0hBUiBJTV9GaWxtOGJp
dExvb2t1cFsxNjcyNiAtCiAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ4NjIgICsxXTsKZXh0
ZXJuIFVfU0hPUlQgSU1fRmlsbTE2Yml0TG9va3VwWzE2NzI2IC0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAxNDg2MiAgKzFdOwoKIAoKCgoKCgoKCgoKIyAxICIvc29mdHdhcmUvdGhhbGlhL2gv
YnVmLnAiIDEKIAoKCgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKIAoKSU5UIElNX0NvbXB1dGVB
Y3RpdmVXaW5kb3coCiAgICBjb25zdCBDSEFSICAqZmlsZW5hbWUKCSk7CgoKIAoKSU5UICAgICBC
VUZfT3BlbigKICAgICAgICAgICAgQ0hBUiAqYnVmZmVyCgkpOwoKSU5UICAgICBCVUZfSW5mbygK
ICAgICAgICAgICAgUkVBTCAgICAqZ2FtbWEsCiAgICAgICAgICAgIElOVCAgICAgKmFjcm9zcywK
ICAgICAgICAgICAgSU5UICAgICAqZG93biwKICAgICAgICAgICAgSU5UICAgICAqdHlwZSwKICAg
ICAgICAgICAgQ0hBUiAgICAqZGV2aWNlCgkpOwoKSU5UICAgICBCVUZfV3JpdGUoCiAgICAgICAg
ICAgIFVfQ0hBUiAgKnIsCiAgICAgICAgICAgIFVfQ0hBUiAgKmcsCiAgICAgICAgICAgIFVfQ0hB
UiAgKmIsCiAgICAgICAgICAgIFVfQ0hBUiAgKm0sCiAgICAgICAgICAgIElOVCAgICAgbnVtLAog
ICAgICAgICAgICBJTlQgICAgIHgsCiAgICAgICAgICAgIElOVCAgICAgeQoJKTsKCklOVCAgICAg
QlVGX1JlYWQoCiAgICAgICAgICAgIFVfQ0hBUiAgKnIsCiAgICAgICAgICAgIFVfQ0hBUiAgKmcs
CiAgICAgICAgICAgIFVfQ0hBUiAgKmIsCiAgICAgICAgICAgIFVfQ0hBUiAgKm0sCiAgICAgICAg
ICAgIElOVCAgICAgbnVtLAogICAgICAgICAgICBJTlQgICAgIHgsCiAgICAgICAgICAgIElOVCAg
ICAgeQoJKTsKCklOVCAgICAgQlVGX1NldEdhbW1hKAogICAgICAgICAgICBSRUFMICAgIGdhbW1h
CgkpOwoKSU5UICAgICBCVUZfRmlsbCgKICAgICAgICAgICAgVV9DSEFSICByLAogICAgICAgICAg
ICBVX0NIQVIgIGcsCiAgICAgICAgICAgIFVfQ0hBUiAgYiwKICAgICAgICAgICAgVV9DSEFSICBt
CgkpOwoKSU5UICAgICBCVUZfQ2xlYXIoCiAgICAgICAgICAgIHZvaWQgCgkpOwoKSU5UICAgICBC
VUZfQ2xvc2UoCiAgICAgICAgICAgIHZvaWQgCgkpOwoKSU5UICAgICBCVUZfVGFibGUoCiAgICAg
ICAgICAgIEJPT0xFQU4gdXNlLAogICAgICAgICAgICBSRUFMICAgIHRhYmxlW11bMjU2XQoJKTsK
CklOVCAgICAgQlVGX1pvb20oCiAgICAgICAgICAgIFJFQUwgICAgeFpvb20sCiAgICAgICAgICAg
IFJFQUwgICAgeVpvb20KCSk7CgpJTlQgICAgIEJVRl9TZXRPcmlnaW4oCiAgICAgICAgICAgIElO
VCAgICAgeCwKICAgICAgICAgICAgSU5UICAgICB5CgkpOwoKSU5UICAgICBCVUZfRmx1c2goCiAg
ICAgICAgICAgIHZvaWQgCgkpOwoKSU5UICAgICBCVUZfTW9kZSgKICAgICAgICAgICAgSU5UICAg
ICBtb2RlCgkpOwoKSU5UICAgICBCVUZfSGVhZGVyKAogICAgICAgICAgICBXRl9JX0hFQUQgICAq
aGVhZGVyCgkpOwoKCiAKCgogCgoKIAoKCiAKCnZvaWQgICBTbG93RmlsbVJHQlJlYWxzVG9DaGFy
cygKICAgICAgICBSRUFMICAgICAgICAgICAgckluLAogICAgICAgIFJFQUwgICAgICAgICAgICBn
SW4sCiAgICAgICAgUkVBTCAgICAgICAgICAgIGJJbiwKICAgICAgICBVX0NIQVIgICAgICAgICAg
KnJPdXQsCiAgICAgICAgVV9DSEFSICAgICAgICAgICpnT3V0LAogICAgICAgIFVfQ0hBUiAgICAg
ICAgICAqYk91dCwKICAgICAgICBVX0NIQVIgICAgICAgICAgKk9PUkhpT3V0LAogICAgICAgIFVf
Q0hBUiAgICAgICAgICAqT09STG9PdXQKCSk7Cgp2b2lkICAgU2xvd0ZpbG1SR0JSZWFsc1RvUmVh
bHMoCiAgICAgICAgY29uc3QgUkVBTCAgICAgICpySW4sCiAgICAgICAgY29uc3QgUkVBTCAgICAg
ICpnSW4sCiAgICAgICAgY29uc3QgUkVBTCAgICAgICpiSW4sCiAgICAgICAgUkVBTCAgICAgICAg
ICAgICpyT3V0LAogICAgICAgIFJFQUwgICAgICAgICAgICAqZ091dCwKICAgICAgICBSRUFMICAg
ICAgICAgICAgKmJPdXQsCiAgICAgICAgSU5UICAgICAgICAgICAgIHNwYW4KCSk7Cgp2b2lkICAg
SW52ZXJzZVF1aWNrRmlsbVJlYWxUb1JlYWwoCiAgICAgICAgY29uc3QgUkVBTCAgICAgICppbiwK
ICAgICAgICBSRUFMICAgICAgICAgICAgKm91dCwKICAgICAgICBJTlQgICAgICAgICAgICAgY291
bnQKCSk7CgpVX1NIT1JUIFF1aWNrRmlsbVJlYWxUb1Nob3J0KAogICAgICAgIFJFQUwgICAgICBp
bgoJKTsKCnZvaWQgUXVpY2tGaWxtUmVhbFRvUmVhbCgKICAgICAgICBjb25zdCBSRUFMICAgICAg
KmluLAogICAgICAgIFJFQUwgICAgICAgICAgICAqb3V0LAogICAgICAgIGludCAgICAgICAgICAg
ICBjb3VudAoJKTsKClJFQUwgUXVpY2tGaWxtU2hvcnRUb1JlYWwoCiAgICAgICAgVV9TSE9SVCAg
ICAgICAgIGluCgkpOwoKVV9DSEFSIFF1aWNrRmlsbVJlYWxUb0NoYXIoCiAgICAgICAgUkVBTCAg
ICAgICAgICAgIGluCgkpOwoKUkVBTCBRdWlja0ZpbG1DaGFyVG9SZWFsKAogICAgICAgIFVfQ0hB
UiAgICAgICAgICBpbgoJKTsKCgogCgoKIAoKSU5UICAgICBJTV9BYmVsUmVhZEhlYWRlcigKICAg
ICAgICAgICAgRklMRSAgICAgICAgICAgICpmcCwKICAgICAgICAgICAgQUJFTF9JX0hFQUQgICAg
ICpoZWFkZXIgCgkpOwoKSU5UICAgICBJTV9BYmVsUmVhZFNjYW4oCiAgICAgICAgICAgIEZJTEUg
ICAgKmZwLAogICAgICAgICAgICBJTlQgICAgICp5LAogICAgICAgICAgICBJTlQgICAgICp4LAog
ICAgICAgICAgICBDSEFSICAgICpzY2FubGluZSAKCSk7CgpJTlQgICAgIElNX1JlYWRTY2FuKAog
ICAgICAgICAgICBXRl9JX0ZJTEUgICAqaUZpbGUsCiAgICAgICAgICAgIElOVCAgICAgICAgIGxp
bmUgCgkpOwoKSU5UICAgICBJTV9Xcml0ZVNjYW4oCiAgICAgICAgICAgIFdGX0lfRklMRSAgICpp
RmlsZSAKCSk7CgpJTlQgSU1fV3JpdGVTY2FuQXQoCiAgICAgICAgV0ZfSV9GSUxFICppRmlsZSwK
ICAgICAgICBJTlQgbGluZU51bWJlcgoJKTsKCklOVCAgICAgSU1fRmx1c2hTY2FuKAogICAgICAg
ICAgICBXRl9JX0ZJTEUgICAqaUZpbGUKCSk7CgpXRl9JX0ZJTEUgKklNX09wZW5SYXdGaWxlKAog
ICAgICAgICAgICBjb25zdCBDSEFSICAgICAgKmZpbGVOYW1lLAogICAgICAgICAgICBXRl9JX0hF
QUQgICAgICAgKmhlYWRlciwKICAgICAgICAgICAgY29uc3QgQ0hBUiAgICAgICphY2Nlc3MsCiAg
ICAgICAgICAgIEJPT0xFQU4gICAgICAgICBmdWxsIAoJKTsKCldGX0lfRklMRSAqSU1fT3BlbkZp
bGUoCiAgICAgICAgICAgIGNvbnN0IENIQVIgICAgICAqZmlsZU5hbWUsCiAgICAgICAgICAgIFdG
X0lfSEVBRCAgICAgICAqaGVhZGVyLAogICAgICAgICAgICBjb25zdCBDSEFSICAgICAgKmFjY2Vz
cywKICAgICAgICAgICAgQk9PTEVBTiAgICAgICAgIGZ1bGwgCgkpOwoKV0ZfSV9GSUxFICpJTV9P
cGVuRkZpbGUoCiAgICAgICAgICAgIGNvbnN0IENIQVIgICpmaWxlTmFtZSwKICAgICAgICAgICAg
V0ZfSV9IRUFEICAgKmhlYWRlciwKICAgICAgICAgICAgY29uc3QgQ0hBUiAgKmFjY2VzcywKICAg
ICAgICAgICAgQk9PTEVBTiAgICAgZnVsbCAKCSk7CgpXRl9JX0ZJTEUgKklNX09wZW5Mb2dGaWxl
KAogICAgICAgICAgICBjb25zdCBDSEFSICAgICAgKmZpbGVOYW1lLAogICAgICAgICAgICBXRl9J
X0hFQUQgICAqaGVhZGVyLAogICAgICAgICAgICBjb25zdCBDSEFSICAgICAgKmFjY2VzcywKICAg
ICAgICAgICAgQk9PTEVBTiAgICAgZnVsbCAKCSk7CgpXRl9JX0ZJTEUgKklNX09wZW5Mb2dGaWxl
SW1hZ2UoCiAgICAgICAgICAgIGNvbnN0IENIQVIgICAgICAqZmlsZU5hbWUsCiAgICAgICAgICAg
IFdGX0lfSEVBRCAgICpoZWFkZXIsCiAgICAgICAgICAgIGNvbnN0IENIQVIgICAgICAqYWNjZXNz
LAogICAgICAgICAgICBCT09MRUFOICAgICBmdWxsLAogICAgICAgICAgICBJTlQgICAgICAgICBp
bWFnZU51bQoJKTsKCldGX0lfRklMRSAqSU1fT3BlbkZpbGVJbWFnZSgKICAgICAgICAgICAgY29u
c3QgQ0hBUiAgICAgICpmaWxlTmFtZSwKICAgICAgICAgICAgV0ZfSV9IRUFEICAgICAgICpoZWFk
ZXIsCiAgICAgICAgICAgIGNvbnN0IENIQVIgICAgICAqYWNjZXNzLAogICAgICAgICAgICBCT09M
RUFOICAgICAgICAgZnVsbCwgCiAgICAgICAgICAgIElOVCAgICAgICAgICAgICBpbWFnZU51bSAK
CSk7CgpJTlQgICAgIElNX0Nsb3NlRmlsZSgKICAgICAgICAgICAgV0ZfSV9GSUxFICAgKmlGaWxl
IAoJKTsKCklOVCAgICAgSU1fSW5PdXQoCiAgICAgICAgICAgIENIQVIgICAgICAgICAgICAqaW5G
aWxlLAogICAgICAgICAgICBDSEFSICAgICAgICAgICAgKm91dEZpbGUsCiAgICAgICAgICAgIElN
X1NDQU5fRlVOQyAgICBzY2FuRnVuYywKICAgICAgICAgICAgdm9pZCAgICAgICAgICAgICAqZGF0
YSwKICAgICAgICAgICAgQk9PTEVBTiAgICAgICAgIGZ1bGwgCgkpOwoKSU5UICAgICBJTV9GSW5P
dXQoCiAgICAgICAgICAgIENIQVIgICAgICAgICAgICAqaW5GaWxlLAogICAgICAgICAgICBDSEFS
ICAgICAgICAgICAgKm91dEZpbGUsCiAgICAgICAgICAgIElNX1NDQU5fRlVOQyAgICBzY2FuRnVu
YywKICAgICAgICAgICAgdm9pZCAgICAgICAgICAgICAqZGF0YSwKICAgICAgICAgICAgQk9PTEVB
TiAgICAgICAgIGZ1bGwKCSk7CgpJTlQgICAgIElNX011bHRpSW5PdXQoCiAgICAgICAgICAgIENI
QVIgICAgICAgICAgICAqZmlsZXNbXSwKICAgICAgICAgICAgSU5UICAgICAgICAgICAgIG51bUZp
bGVzLAogICAgICAgICAgICBJTV9NU0NBTl9GVU5DICAgc2NhbkZ1bmMsCiAgICAgICAgICAgIHZv
aWQgICAgICAgICAgICAgKmRhdGEsCiAgICAgICAgICAgIEJPT0xFQU4gICAgICAgICBmdWxsIAoJ
KTsKCklOVCAgICAgSU1fU3R1ZmZIZWFkZXIoCiAgICAgICAgICAgIFdGX0lfSEVBRCAgICpoZWFk
LAogICAgICAgICAgICBjb25zdCBDSEFSICAgICAgKmZvcm1hdCwKICAgICAgICAgICAgY29uc3Qg
Q0hBUiAgICAgICpwcm9nLAogICAgICAgICAgICBjb25zdCBDSEFSICAgICAgKmRlc2MgCgkpOwoK
VV9DSEFSICAqSU1fUmVhZFdob2xlRmlsZSgKICAgICAgICAgICAgQ0hBUiAgICAgICAgKmZpbGVO
YW1lLAogICAgICAgICAgICBXRl9JX0hFQUQgICAqaGVhZCwKICAgICAgICAgICAgQk9PTEVBTiAg
ICAgZnVsbCAKCSk7CgpVX0NIQVIgICpJTV9SZWFkV2hvbGVMb2dGaWxlKAogICAgICAgICAgICBD
SEFSICAgICAgICAqZmlsZU5hbWUsCiAgICAgICAgICAgIFdGX0lfSEVBRCAgICpoZWFkLAogICAg
ICAgICAgICBCT09MRUFOICAgICBmdWxsIAoJKTsKClVfQ0hBUiAgKklNX1JlYWRXaG9sZUZpbGVD
YigKICAgICAgICAgICAgQ0hBUiAgICAgICAgKmZpbGVOYW1lLAogICAgICAgICAgICBXRl9JX0hF
QUQgICAqaGVhZCwKICAgICAgICAgICAgQk9PTEVBTiAgICAgZnVsbCwgCiAgICAgICAgICAgIEJP
T0xFQU4gICAgIGxvZywKICAgICAgICAgICAgdm9pZCAgICAgICAgICgqc3RhdHVzQ2FsbGJhY2sp
KElOVCwgSU5ULCB2b2lkICopLAogICAgICAgICAgICB2b2lkICogICAgICAgY2xpZW50RGF0YQoJ
KTsKClJFQUwgICAgKklNX1JlYWRXaG9sZUZGaWxlKAogICAgICAgICAgICBDSEFSICAgICAgICAq
ZmlsZU5hbWUsCiAgICAgICAgICAgIFdGX0lfSEVBRCAgICpoZWFkLAogICAgICAgICAgICBCT09M
RUFOICAgICBmdWxsIAoJKTsKCklOVCAgICAgSU1fV3JpdGVXaG9sZUZpbGUoCiAgICAgICAgICAg
IENIQVIgICAgICAgICpmaWxlTmFtZSwKICAgICAgICAgICAgV0ZfSV9IRUFEICAgKmhlYWQsCiAg
ICAgICAgICAgIFVfQ0hBUiAgICAgICpkYXRhCgkpOwoKSU5UICAgICBJTV9Xcml0ZVdob2xlTG9n
RmlsZSgKICAgICAgICAgICAgQ0hBUiAgICAgICAgKmZpbGVOYW1lLAogICAgICAgICAgICBXRl9J
X0hFQUQgICAqaGVhZCwKICAgICAgICAgICAgVV9DSEFSICAgICAgKmRhdGEKCSk7CgpJTlQgICAg
IElNX1dyaXRlV2hvbGVGRmlsZSgKICAgICAgICAgICAgQ0hBUiAgICAgICAgKmZpbGVOYW1lLAog
ICAgICAgICAgICBXRl9JX0hFQUQgICAqaGVhZCwKICAgICAgICAgICAgUkVBTCAgICAgICAgKmRh
dGEgCgkpOwoKdm9pZCAgICAgSU1fQnVpbGRGaWxlTmFtZSgKICAgICAgICAgICAgQ0hBUiAgICAq
b3JpZywKICAgICAgICAgICAgQ0hBUiAgICAqb3V0LAogICAgICAgICAgICBJTlQgICAgIGZyYW1l
IAoJKTsKCklOVCAgICAgSU1fU3R1ZmZEcHRIZWFkZXIoCiAgICAgICAgICAgIERQVF9IRUFEICAg
ICpoZWFkLAogICAgICAgICAgICBjb25zdCBDSEFSICAqZm9ybWF0LAogICAgICAgICAgICBjb25z
dCBDSEFSICAqcHJvZywKICAgICAgICAgICAgY29uc3QgQ0hBUiAgKmRlc2MgCgkpOwoKSU5UICAg
ICBJTV9SZWFkTmV4dFNjYW4oCiAgICAgICAgICAgIFdGX0lfRklMRSAgICppRmlsZSwKICAgICAg
ICAgICAgQk9PTEVBTiAgICAgdGFpbCAKCSk7Cgp2b2lkICAgICBJTV9CeXRlc1RvUmVhbHMoCiAg
ICAgICAgICAgIFVfQ0hBUiAgKnVjLAogICAgICAgICAgICBSRUFMICAgICpyLAogICAgICAgICAg
ICBJTlQgICAgIG51bSwKICAgICAgICAgICAgQk9PTEVBTiBsb2dNb2RlIAoJKTsKCnZvaWQgICAg
IElNX1JlYWxzVG9CeXRlcygKICAgICAgICAgICAgUkVBTCAgICAqciwKICAgICAgICAgICAgVV9D
SEFSICAqdWMsCiAgICAgICAgICAgIElOVCAgICAgbnVtLAogICAgICAgICAgICBCT09MRUFOIGRp
dGhlciwKICAgICAgICAgICAgQk9PTEVBTiBsb2dNb2RlIAoJKTsKCnZvaWQgICAgIElNX0J0b1Io
CiAgICAgICAgICAgIFdGX0lfRklMRSAgICppRmlsZSAKCSk7Cgp2b2lkICAgICBJTV9SdG9CKAog
ICAgICAgICAgICBXRl9JX0ZJTEUgICAqaUZpbGUgCgkpOwoKdm9pZCAgICAgICAgIElNX0Vycm9y
TXNnKAogICAgICAgICAgICBDSEFSICpzdHJpbmcKCSk7CgpJTlQgSU1fR2V0RnVsbEZpbGVuYW1l
KAogICAgY29uc3QgQ0hBUiAgKmZpbGVOYW1lLAogICAgQ0hBUiAgICAgICAgKmZ1bGxOYW1lLAog
ICAgSU5UICAgICAgICAgKmluZGV4CgkpOwoKdm9pZCAgICAgSU1fUmVhbHNUb0J5dGVzMjIoCiAg
ICAgICAgICAgIFJFQUwgICAgKnIsCiAgICAgICAgICAgIFVfQ0hBUiAgKnVjLAogICAgICAgICAg
ICBJTlQgICAgIG51bSwKICAgICAgICAgICAgQk9PTEVBTiBkaXRoZXIgCgkpOwoKdm9pZCAgICAg
SU1fQnl0ZXMyMlRvUmVhbHMoCiAgICAgICAgICAgIFVfQ0hBUiAgKnVjLAogICAgICAgICAgICBS
RUFMICAgICpyLAogICAgICAgICAgICBJTlQgICAgIG51bSAKCSk7Cgp1bnNpZ25lZCBsb25nICAg
KklNX1JlYWRXaG9sZUZpbGVJbnRvUGFja2VkQXJyYXkoCiAgICAgICAgICAgIENIQVIgICAgKmZp
bGVOYW1lLAogICAgICAgICAgICBJTlQgICAgICp3aWR0aCwKICAgICAgICAgICAgSU5UICAgICAq
aGVpZ2h0LAogICAgICAgICAgICBCT09MRUFOIHVzZUZ1bGwKCSk7Cgp1bnNpZ25lZCBsb25nICAg
KklNX09wZW5HTFJlYWRXaG9sZUZpbGVJbnRvUGFja2VkQXJyYXkoCiAgICAgICAgICAgIENIQVIg
ICAgKmZpbGVOYW1lLAogICAgICAgICAgICBJTlQgICAgICp3aWR0aCwKICAgICAgICAgICAgSU5U
ICAgICAqaGVpZ2h0LAogICAgICAgICAgICBCT09MRUFOIHVzZUZ1bGwKCSk7Cgp1bnNpZ25lZCBs
b25nICAgKklNX1JlYWRDcm9wSW50b1BhY2tlZEFycmF5KAogICAgICAgICAgICBDSEFSICAgICpm
aWxlTmFtZSwKICAgICAgICAgICAgRkxPQVQgICBjaGFubmVsX3hfb3JpZ2luLAogICAgICAgICAg
ICBGTE9BVCAgIGNoYW5uZWxfeV9vcmlnaW4sCiAgICAgICAgICAgIEZMT0FUICAgY2hhbm5lbF93
aWR0aCwKICAgICAgICAgICAgRkxPQVQgICBjaGFubmVsX2hlaWdodCwKICAgICAgICAgICAgSU5U
ICAgICAqd2lkdGgsCiAgICAgICAgICAgIElOVCAgICAgKmhlaWdodCwKICAgICAgICAgICAgQk9P
TEVBTiB1c2VGdWxsCgkpOwoKdW5zaWduZWQgbG9uZyAgICpJTV9PcGVuR0xSZWFkQ3JvcEludG9Q
YWNrZWRBcnJheSgKICAgICAgICAgICAgQ0hBUiAgICAqZmlsZU5hbWUsCiAgICAgICAgICAgIEZM
T0FUICAgY2hhbm5lbF94X29yaWdpbiwKICAgICAgICAgICAgRkxPQVQgICBjaGFubmVsX3lfb3Jp
Z2luLAogICAgICAgICAgICBGTE9BVCAgIGNoYW5uZWxfd2lkdGgsCiAgICAgICAgICAgIEZMT0FU
ICAgY2hhbm5lbF9oZWlnaHQsCiAgICAgICAgICAgIElOVCAgICAgKndpZHRoLAogICAgICAgICAg
ICBJTlQgICAgICpoZWlnaHQsCiAgICAgICAgICAgIEJPT0xFQU4gdXNlRnVsbAoJKTsKClVfQ0hB
UiAgKklNX1JlYWRDcm9wRmlsZSgKICAgICAgICAgICAgQ0hBUiAgICAgICAgKmZpbGVOYW1lLAog
ICAgICAgICAgICBXRl9JX0hFQUQgICAqaGVhZCwKICAgICAgICAgICAgQk9PTEVBTiAgICAgZnVs
bCwgCiAgICAgICAgICAgIEZMT0FUICAgICAgIGNoYW5uZWxfeV9vcmlnaW4sIAogICAgICAgICAg
ICBGTE9BVCAgICAgICBjaGFubmVsX2hlaWdodAoJKTsKCnZvaWQgICAgIElNX1JlYWxzVG9GaWxt
KAogICAgICAgICAgICBjb25zdCBSRUFMICAqaW4sCiAgICAgICAgICAgIFJFQUwgICAgICAgICpv
dXQsCiAgICAgICAgICAgIElOVCAgICAgICAgIG51bQoJKTsKCnZvaWQgICAgIElNX1JlYWxzVG9W
aWRlbygKICAgICAgICAgICAgY29uc3QgUkVBTCAgKmluLAogICAgICAgICAgICBSRUFMICAgICAg
ICAqb3V0LAogICAgICAgICAgICBJTlQgICAgICAgICBudW0KCSk7CgpCT09MRUFOIElNX0lzSW1h
Z2VGaWxlKAogICAgY29uc3QgY2hhciogZmlsZU5hbWUKCSk7Cgp2b2lkIElNX0RvVG9GaWxtQ29u
dmVyc2lvbiggCiAgICBGTE9BVCAqIHRoZUZsb2F0QnVmZmVyLCAKICAgIElOVCBhY3Jvc3MKCSk7
Cgp2b2lkIElNX0RvVW5GaWxtQ29udmVyc2lvbiggCiAgICBGTE9BVCAqIHRoZUZsb2F0QnVmZmVy
LCAKICAgIElOVCBhY3Jvc3MKCSk7Cgpjb25zdCBjaGFyICogY29uc3QgKiBJTV9HZXRBdXhDaGFu
bmVsTmFtZXMoCiAgICAgICAgY29uc3QgV0ZfSV9IRUFEICpoZWFkZXIKCSk7CgpJTlQgICAgIElN
X1NldEF1eENoYW5uZWxJZHMoCiAgICAgICAgV0ZfSV9IRUFEICAgICAgICAgICAqaGVhZGVyLAog
ICAgICAgIGludCAgICAgICAgICAgICAgICAgbnVtQXV4Q2hhbnMsCiAgICAgICAgY29uc3QgY2hh
ciAqIGNvbnN0ICAqY2hhbk5hbWVzCgkpOwoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKdm9pZCAg
QlVGX1ByaW50X3dmX2lfZmlsZSgKICAgIFdGX0lfRklMRSAgICpmaWxlLAogICAgY29uc3QgQ0hB
UiAgKm5hbWUKCSk7Cgp2b2lkICBCVUZfUHJpbnRfd2ZfaV9oZWFkKAogICAgV0ZfSV9IRUFEICAg
KmhlYWQsCiAgICBjb25zdCBDSEFSICAqbmFtZQoJKTsKCnZvaWQgIEJVRl9QcmludF9kcHRfaGVh
ZCgKICAgIERQVF9IRUFEICAgICpoZWFkLAogICAgY29uc3QgQ0hBUiAgKm5hbWUKCSk7Cgp2b2lk
ICBCVUZfUHJpbnRfd2luZG93X3MoCiAgICBXSU5ET1dfUyAgICAqd2luLAogICAgY29uc3QgQ0hB
UiAgKm5hbWUKCSk7CgoKIAoKCiAKCklOVCAgICAgUkxBX0RlY29kZVNjYW4oCiAgICAgICAgICAg
IENIQVIgICAgKmluLAogICAgICAgICAgICBJTlQgICAgIGxlbmd0aCwKICAgICAgICAgICAgQ0hB
UiAgICAqb3V0IAoJKTsKCklOVCAgICAgUkxBX0VuY29kZVNjYW4oCiAgICAgICAgICAgIENIQVIg
ICAgKmluLAogICAgICAgICAgICBJTlQgICAgIGxlbmd0aCwKICAgICAgICAgICAgQ0hBUiAgICAq
b3V0IAoJKTsKCnZvaWQgICAgIFJMQV9SZWFsc1RvQnl0ZXMoCiAgICAgICAgICAgIFJFQUwgICAg
KnIsCiAgICAgICAgICAgIFVfQ0hBUiAgKnVjLAogICAgICAgICAgICBJTlQgICAgIG51bSwKICAg
ICAgICAgICAgQk9PTEVBTiBkaXRoZXIgCgkpOwoKdm9pZCAgICAgUkxBX0J5dGVzVG9SZWFscygK
ICAgICAgICAgICAgVV9DSEFSICAqdWMsCiAgICAgICAgICAgIFJFQUwgICAgKnIsCiAgICAgICAg
ICAgIElOVCAgICAgbnVtIAoJKTsKCgogCgp2b2lkICAgICBSTEZfRGVjb2RlU2NhbigKICAgICAg
ICAgICAgSU5UUkVBTCAqaW4sCiAgICAgICAgICAgIFNIT1JUICAgbGVuZ3RoLAogICAgICAgICAg
ICBSRUFMICAgICpvdXQgCgkpOwoKSU5UICAgICBSTEZfRW5jb2RlU2NhbigKICAgICAgICAgICAg
UkVBTCAgICAqaW4sCiAgICAgICAgICAgIFNIT1JUICAgbGVuZ3RoLAogICAgICAgICAgICBJTlRS
RUFMICpvdXQKCSk7Cgp2b2lkICAgICBSTEZfUnRvQigKICAgICAgICAgICAgV0ZfSV9GSUxFICAg
KmlGaWxlCgkpOwoKCiAKCklOVCAgICAgUkxMX0RlY29kZVNjYW4oCiAgICAgICAgICAgIFdGX0lf
RklMRSAgICppRmlsZSwKICAgICAgICAgICAgSU5UICAgICAgICAgbGVuZ3RoLAogICAgICAgICAg
ICBJTlQgICAgICAgICBvZmZzZXQKCSk7CgpJTlQgICAgIFJMTF9FbmNvZGVTY2FuKAogICAgICAg
ICAgICBXRl9JX0ZJTEUgICAqaUZpbGUKCSk7Cgp2b2lkICAgICBSTExfQnl0ZXNUb1JlYWxzKAog
ICAgICAgICAgICBVX0NIQVIgICp1YywKICAgICAgICAgICAgUkVBTCAgICAqciwKICAgICAgICAg
ICAgSU5UICAgICBudW0KCSk7Cgp2b2lkICAgICBSTExfUmVhbHNUb0J5dGVzKAogICAgICAgICAg
ICBSRUFMICAgICpyLAogICAgICAgICAgICBVX0NIQVIgICp1YywKICAgICAgICAgICAgSU5UICAg
ICBudW0sCiAgICAgICAgICAgIEJPT0xFQU4gZGl0aGVyCgkpOwoKCiAKCgogCgoKIAoKCiAKCgog
CgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAK
CgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoK
CiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoK
IAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgog
CgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAK
CgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgp9CgoKCgoKIyA1MjYgIi9zb2Z0
d2FyZS90aGFsaWEvaC9idWYuaCIgMgoKCgojIDQxICJoL25yaHlfY2xhc3NUcmFjay5oIiAyCgoK
IAoKIAogCiAKIAoKIAogCiAKCiAKdGVtcGxhdGUgPGNsYXNzIFR5cGU+IGNsYXNzIE5SSFlfbWF0
Y2g7CnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBjbGFzcyBOUkhZX2FscGhhbGlzdDsKCiAKCnN0cnVj
dCBOUkhZX2NsYXNzVHJhY2s6CXB1YmxpYyBOUkhZX2NsYXNzQXBwYXJpdGlvbiwgCgkJCXB1Ymxp
YyBUcmFjaywKCQkJcHVibGljIE9ic2VydmVyRmFjdG9yeSA8TlJIWV9jbGFzc1RyYWNrPgoKewog
ICAgdHlwZWRlZiBOUkhZX2NsYXNzQXBwYXJpdGlvbiBpbmhlcml0ZWQ7CiAgICB0eXBlZGVmIE5S
SFlfYWxwaGFsaXN0PE5SSFlfY2xhc3NUcmFjaz4gYWxwaGFsaXN0OwogICAgZnJpZW5kIE5SSFlf
bWF0Y2ggPE5SSFlfY2xhc3NUcmFjaz47CiAgICBmcmllbmQgTlJIWV9hbHBoYWxpc3Q8TlJIWV9j
bGFzc1RyYWNrPjsKCiAgICBmbG9hdAkJCSpfaW5SZWdpb25QdHI7CSAKICAgIGZsb2F0CQkJKl9y
ZWZSZWdpb25QdHI7CSAKICAgIEJPT0xFQU4JCQljYW1lcmFTZXQ7CSAKICAgIFdGX0lfSEVBRCAg
IAkJX2luSGVhZGVyOwkgCgkJCQkJCSAKICAgIFdGX0lfRklMRSAgIAkJKl9pbkZpbGU7CiAgICBO
UkhZX2NsYXNzVHJhY2tNYW5pcHVsYXRvciAJKnRyYWNrTWFuaXB1bGF0b3I7CiAgICBOUkhZX2Ns
YXNzQ2FtZXJhICAgIAkqY2FtZXJhUHRyOwogICAgZmxvYXQgICAgICAgICAgICAgICAgICAgICAg
IF9jdXJyZW50RnJhbWU7CiAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgX3VpSW1hZ2VX
aWR0aCwgX3VpSW1hZ2VIZWlnaHQsIF91aU5jaGFuczsKCiAgICBib29sCQkJX2RpZmZQcmVzZW50
OwogICAgZmxvYXQJCQkqX3Zpc3VhbERhdGE7CgogICAgIAogICAgdm9pZCAJaW5pdGlhbGl6ZSAo
dm9pZCApOwoKICAgIHZvaWQgCWRldGFjaChOUkhZX2RlcGVuZERhdGEgKik7CiAgICB2b2lkIAlw
b3N0V29ybGRUcmF2ZXJzZSAoKTsKCiAgICB2b2lkIAlwcmludEVycm9yKHZvaWQpOwogICAgQk9P
TEVBTgljaGVja1RyYWNrUGFybXModm9pZCk7CiAgICBJTlQgIAl0cmFja0NyZWF0ZUZpbGVuYW1l
KElOVCBGcmFtZSwgVHdpbmUgKmZpbGVuYW1lX291dCk7CgogICAgZmxvYXQgCUdldFh0cmFuKGlu
dCBmcmFtZSk7CiAgICBmbG9hdCAJR2V0WXRyYW4oaW50IGZyYW1lKTsJCiAgICB2b2lkIAlTZXRY
dHJhbihpbnQgZnJhbWUsIGZsb2F0IHZhbHVlKTsJCiAgICB2b2lkIAlTZXRZdHJhbihpbnQgZnJh
bWUsIGZsb2F0IHZhbHVlKTsKCiAgICBmbG9hdCAJR2V0WGRpZmYoaW50IGZyYW1lKTsKICAgIGZs
b2F0IAlHZXRZZGlmZihpbnQgZnJhbWUpOwkKICAgIHZvaWQgCVNldFhkaWZmKGludCBmcmFtZSwg
ZmxvYXQgdmFsdWUpOwkKICAgIHZvaWQgCVNldFlkaWZmKGludCBmcmFtZSwgZmxvYXQgdmFsdWUp
OwoKICAgIHZvaWQgICAgICAgIEdldERhdGEoaW50IGZyYW1lLCBUUl9MUkJUIGNvb3JkcywgZmxv
YXQgKipyZWdpb24sIEJPT0xFQU4gZmxhZyk7CiAgICBCT09MRUFOICAgICBnZXRLZXlGcmFtZShp
bnQgZnJhbWUpOwogICAgVFJfTFJCVCAgICAgZ2V0Q3JvcChpbnQgZnJhbWUpOwogICAgZmxvYXQg
ICAgICAgR2V0VHJhY2tTZWFyY2hBcmVhKGludCBmcmFtZSk7CQogICAgZmxvYXQJR2V0VHJhY2tS
ZWZXaWR0aChpbnQgZnJhbWUpOwogICAgZmxvYXQJR2V0VHJhY2tSZWZIZWlnaHQoaW50IGZyYW1l
KTsJCiAgICBpbnQJCWdldFRyYWNrVGltZXMoaW50IGZyYW1lKTsJCiAgICBmbG9hdAlnZXRUcmFj
a1RvbGVyYW5jZShpbnQgZnJhbWUpOwoKCiAgICBmbG9hdCAgICAgICBHZXRTZWFyY2hTaXplKCB2
b2lkICk7CiAgICBmbG9hdCAgICAgICBHZXRQYXRXaWR0aCggdm9pZCApOwogICAgZmxvYXQgICAg
ICAgR2V0UGF0SGVpZ2h0KCB2b2lkICk7CiAgICBpbnQgICAgICAgICBHZXRNYXhJdGVycyggdm9p
ZCApOwogICAgVHdpbmUgICAgICAgR2V0RmlsZW5hbWUoIHZvaWQgKTsKICAgIGZsb2F0ICAgICAg
IEdldFRvbGVyYW5jZSggdm9pZCApOwogICAgZmxvYXQgICAgICAgR2V0WE9mZnNldCggdm9pZCAp
OwogICAgZmxvYXQgICAgICAgR2V0WU9mZnNldCggdm9pZCApOwogICAgQk9PTEVBTiAgICAgICAg
R2V0SW1hZ2VEaW1lbnNpb25zKCBpbnQqLCBpbnQqLCBpbnQqICk7CiAgICBmbG9hdCAgICAgICBH
ZXRDdXJyZW50RnJhbWUoIHZvaWQgKSB7IHJldHVybiBfY3VycmVudEZyYW1lOyB9CiAgICBCT09M
RUFOICAgICBBdEJlZ2luRnJhbWUoIHZvaWQgKSB7IHJldHVybiBfY3VycmVudEZyYW1lID09IGZy
YW5nZS5iZWdpbjsgfQoKICAgIEJPT0xFQU4gICAgIFNldFNlYXJjaFNpemUoZmxvYXQgbmV3U2Vh
cmNoU2l6ZSk7CiAgICBCT09MRUFOICAgICBTZXRQYXRXaWR0aChmbG9hdCBuZXdQYXRXaWR0aCk7
CiAgICBCT09MRUFOICAgICBTZXRQYXRIZWlnaHQoZmxvYXQgbmV3UGF0SGVpZ2h0KTsKICAgIEJP
T0xFQU4gICAgIFNldE1heEl0ZXJzKGludCBuZXdNYXhJdGVycyk7CiAgICBCT09MRUFOICAgICBT
ZXRUb2xlcmFuY2UoZmxvYXQgbmV3VG9sKTsKICAgIEJPT0xFQU4gICAgIFNldFhPZmZzZXQoIGZs
b2F0IG5ld1hPZmZzZXQgKTsKICAgIEJPT0xFQU4gICAgIFNldFlPZmZzZXQoIGZsb2F0IG5ld1lP
ZmZzZXQgKTsKCiAgICBCT09MRUFOICAgICBQcm9ncmVzcyhmbG9hdCBwcm9ncmVzcyk7CiAgICBC
T09MRUFOICAgICBPcGVuRmlsZShpbnQgZnJhbWUpOwoKcHVibGljOgoKICAgICAKICAgIE5SSFlf
Y2xhc3NUcmFjayAoY29uc3QgQ0hBUiAqbmFtZSk7CiAgICBOUkhZX2NsYXNzVHJhY2sgKGNvbnN0
IENIQVIgKm5hbWUsIE5SSFlfY2xhc3NUcmFjayAqY2xvbmVGcm9tKTsKICAgIE5SSFlfY2xhc3NU
cmFjayAodm9pZCApOwogICAgfk5SSFlfY2xhc3NUcmFjayAodm9pZCApOwoKICAgICAKICAgIHN0
YXRpYyBjb25zdCBDSEFSICpQcmludFNlbGZDbGFzc25hbWUgKHZvaWQgKSB7IHJldHVybiAoIk5S
SFlfY2xhc3NUcmFjayIpOyB9CgogICAgc3RhdGljIElOVCAJCUdldFNlbGZDbGFzc1R5cGUgKHZv
aWQgKSB7IHJldHVybiAoVEhJTkdfVFlQRV9UUkFDSyk7IH0KICAgIHN0YXRpYyBOUkhZX2J1bmNo
PE5SSFlfY2xhc3NUcmFjaz4gKkZpbmQgKGNvbnN0IENIQVIgICpuYW1lKTsKICAgIHZvaWQgICAg
ICAgICAgICAgICAgIFJlbmFtZSAoY29uc3QgQ0hBUiAgKm5ld05hbWUpOwogICAgTlJIWV9jbGFz
c1RoaW5nICAgICAqQ2xvbmUgKGNvbnN0IENIQVIgICpuZXdOYW1lKTsKCiAgICB2b2lkIENyZWF0
ZU9ic2VydmVyIChpbnQgdHlwZSkgeyAKCU9ic2VydmVyRmFjdG9yeTxOUkhZX2NsYXNzVHJhY2s+
Ojpkb0NyZWF0ZU9ic2VydmVyICh0aGlzLCB0eXBlKTsgfTsKCiAgICB2b2lkICAgICAgICAgICAg
ICAgIERlc2NyaWJlQ3JlYXRlIChjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJik7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgdm9pZCAgICAgICAgICAgICAgICBEZXNjcmli
ZURlbGV0ZSAoY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgIHZvaWQgICAgICAgICAgICAgICAgRGVzY3JpYmVEdWFsIChjbGFz
cyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJik7ICAgICAgICAgICAgICAgICAgICAgICAgICAK
ICAgIHZvaWQgICAgICAgICAgICAgICAgRGVzY3JpYmVBZGp1c3QgKGNsYXNzIE5SSFlfQ2xhc3NE
ZXNjcmliZVN0cmVhbSAmKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIHZvaWQgICAg
ICAgICAgICAgICAgRGVzY3JpYmVSZWZyZXNoT25seUtleXMgKGNsYXNzIE5SSFlfQ2xhc3NEZXNj
cmliZVN0cmVhbSAmKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIHZvaWQgICAgICAg
ICAgICAgICAgRGVzY3JpYmVSYW5nZSAoY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICB2b2lkICAgICAgICAgICAgICAgIERlc2Ny
aWJlTWFwIChjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJik7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgdm9pZCAgICAgICAgICAgICAgICBEZXNjcmliZUZpbGVOYW1lIChj
bGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJik7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAogICAgdm9pZCAgICAgICAgICAgICAgICBEZXNjcmliZUNhbWVyYSAoY2xhc3MgTlJIWV9D
bGFzc0Rlc2NyaWJlU3RyZWFtICYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIHZv
aWQgICAgICAgICAgICAgICAgRGVzY3JpYmVDb2xvciAoY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJl
U3RyZWFtICYpOwogICAgdm9pZCAgICAgICAgICAgICAgICBEZXNjcmliZUZ1bGxTdGF0ZSAoY2xh
c3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYpOwogICAgdm9pZCAgICAgICAgICAgICAgICBE
ZXNjcmliZUZ1bGxTdGF0ZVBhY2tlZCAoY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICBjb25zdCBDSEFSICAgICAgICAgICpQ
cmludERlcml2ZWRDbGFzc09mU2VsZlR5cGVOYW1lICh2b2lkICkgeyByZXR1cm4gKCJ0cmFjayIp
OyB9CiAgICBJTlQgICAgICAgICAgICAgICAgIEdldERlcml2ZWRDbGFzc09mU2VsZlR5cGUgKHZv
aWQgKSB7IHJldHVybiAoVEhJTkdfVFlQRV9UUkFDSyk7IH0KCiAgICAgCgogICAgVHdpbmUgICAg
ICAgICAgICAgICAJICAgIGZpbGVuYW1lOwogICAgTlJIWV9jbGFzc01hcCAgICAgICAJICAgICpt
YXAydHJhY2s7CiAgICBUd2luZSAgICAgICAgICAgICAgIAkgICAgbWFwMnRyYWNrTmFtZTsKICAg
IEJPT0xFQU4JCQkgICAgaGlnaGxpZ2h0OwoKICAgICAKICAgIHZvaWQgCQkJICAgIFNlYXJjaFJl
ZlJlY3QoCgkJCQkJZmxvYXQgICAqcmVmcmVjdCwKCQkJCQlmbG9hdCAgICpzZWFyY2hyZWN0LAog
ICAgCQkJCQlJTlQgICAgIGZyYW1lCgkJCQkgICAgKTsKICAgIE5SSFlfY2xhc3NUcmFja01hbmlw
dWxhdG9yICAgICAgKkdldFRyYWNrTWFuaXB1bGF0b3IoKTsKICAgIHZvaWQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIERyYXdpbmdSb3V0aW5lICgpOwogICAgdm9pZCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU2V0SGlnaGxpZ2h0ICh2b2lkICl7dGhpcy0+aGlnaGxpZ2h0ID0gMSA7
fQogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXRIaWdobGlnaHQgKHZv
aWQgKXt0aGlzLT5oaWdobGlnaHQgPSAwIDt9CiAgICBCT09MRUFOICAgICAgICAgICAgICAgICAg
ICAgICAgIEdldEhpZ2hsaWdodCAodm9pZCApe3JldHVybiAodGhpcy0+aGlnaGxpZ2h0KTt9Cgog
ICAgIAogICAgQk9PTEVBTgkJCSAgICBTZXRGcmFuZ2UoZmxvYXQsIGZsb2F0LCBmbG9hdCk7CiAg
ICBGUkFOR0UJCQkgICAgR2V0RnJhbmdlKHZvaWQgKXtyZXR1cm4gKHRoaXMtPmZyYW5nZSk7fQog
ICAgQk9PTEVBTgkJCSAgICBTZXRBZGp1c3QgKEJPT0xFQU4gc3RhdGUpOwogICAgQk9PTEVBTgkJ
CSAgICBHZXRBZGp1c3QgKHZvaWQpIHtyZXR1cm4oYWRqdXN0S2V5cyk7fQogICAgQk9PTEVBTiAg
ICAgICAgICAgICAgICAgICAgICAgICBTZXREdWFsIChCT09MRUFOIHN0YXRlKTsKICAgIEJPT0xF
QU4JCQkgICAgR2V0RHVhbCAodm9pZCkge3JldHVybihkdWFsKTt9CiAgICBCT09MRUFOCQkJICAg
IFNldFJlZnJlc2ggKEJPT0xFQU4gc3RhdGUpOwogICAgQk9PTEVBTgkJCSAgICBHZXRSZWZyZXNo
ICh2b2lkKSB7cmV0dXJuKHJlZnJlc2hPbmx5S2V5cyk7fQogICAgTlJIWV9jbGFzc0NhbWVyYSAg
ICAgICAgICAgICAgICAqR2V0Q2FtZXJhICh2b2lkICk7CiAgICBaT09MRUFOICAgICAgICAgICAg
ICAgICAgICAgICAgIFNldENhbWVyYSAoTlJIWV9idW5jaCA8TlJIWV9jbGFzc0NhbWVyYT4gKm5l
d0NhbWVyYVB0cik7CgogICAgZmxvYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAqR2V0Vmlz
dWFsRGF0YSAoaW50ICpjaGFucywKCQkJCQkJICAgIGludCAqZHgsIGludCAqZHksCgkJCQkJCSAg
ICBmbG9hdCAqY3gsIGZsb2F0ICpjeSk7CgogICAgdm9pZAkJCSAgICBUcmFjayAoaW50IGZyYW1l
KTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdFRyYWNrKEZJTEUgKmZw
LCBjb25zdCBMaXN0PFR3aW5lPiAmbHMpOwp9OwoKIAoKIAoKIyAzMyAiaC9ucmh5X3RlbXBsYXRl
TWF0Y2guYyIgMgoKCgoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+Ck5SSFlfbWF0Y2g8VHlwZT46Ok5S
SFlfbWF0Y2ggKAogICAgdmVjdG9yPFR5cGUgKj46Oml0ZXJhdG9yIHJvb3QsCiAgICB2ZWN0b3I8
VHlwZSAqPjo6aXRlcmF0b3IgZW5kCiAgICApCnsKICAgICAKCiAgICBmYXN0QmluYXJ5T25seSA9
IDAgOwoKICAgICAKCiAgICBvcmlnaW5hbCA9IChUd2luZSkiIjsKCiAgICBwcmVmaXggPSAoVHdp
bmUpIiI7CiAgICBzdWZmaXggPSAoVHdpbmUpIiI7CgogICAgdmFsaWRBbHBoYVJhbmdlID0gMCA7
CiAgICBhbHBoYVN0YXJ0ID0gKFR3aW5lKSIiOwogICAgYWxwaGFFbmQgPSAoVHdpbmUpIiI7Cgog
ICAgdmFsaWROdW1lcmljUmFuZ2UgPSAwIDsKICAgIG51bWVyaWNTdGFydFdpbGQgPSAwIDsKICAg
IG51bWVyaWNTdGFydCA9IDA7CiAgICBudW1lcmljRW5kV2lsZCA9IDAgOwogICAgbnVtZXJpY0Vu
ZCA9IDA7CgogICAgIAogICAgaW5jcmVtZW50ID0gMTsKCiAgICB1c2VSb290ID0gMSA7CiAgICBf
cm9vdCA9IHJvb3Q7CiAgICBfZW5kID0gZW5kOwogICAgX3Jvb3RGb3JBcHBlbmQgPSByb290OwoK
ICAgIGNyZWF0aW9uRmxhZyA9IDAgOwogICAgcmVjdXJzaXZlRmxhZyA9IDAgOwogICAgcGFyZW50
RmxhZyA9IDAgOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KTlJIWV9tYXRjaDxUeXBlPjo6TlJI
WV9tYXRjaCAoCiAgICB2b2lkIAogICAgKQp7CiAgICAgCgogICAgZmFzdEJpbmFyeU9ubHkgPSAx
IDsKCiAgICAgCgogICAgb3JpZ2luYWwgPSAoVHdpbmUpIiI7CgogICAgcHJlZml4ID0gKFR3aW5l
KSIiOwogICAgc3VmZml4ID0gKFR3aW5lKSIiOwoKICAgIHZhbGlkQWxwaGFSYW5nZSA9IDAgOwog
ICAgYWxwaGFTdGFydCA9IChUd2luZSkiIjsKICAgIGFscGhhRW5kID0gKFR3aW5lKSIiOwoKICAg
IHZhbGlkTnVtZXJpY1JhbmdlID0gMCA7CiAgICBudW1lcmljU3RhcnRXaWxkID0gMCA7CiAgICBu
dW1lcmljU3RhcnQgPSAwOwogICAgbnVtZXJpY0VuZFdpbGQgPSAwIDsKICAgIG51bWVyaWNFbmQg
PSAwOwoKICAgICAKICAgIGluY3JlbWVudCA9IDE7CgogICAgdXNlUm9vdCA9IDEgOwogICAgX3Jv
b3QgPSBfX251bGwgOwogICAgX2VuZCA9IF9fbnVsbCA7CgogICAgIAogICAgX3Jvb3RGb3JBcHBl
bmQgPSBfX251bGwgOwoKICAgIGNyZWF0aW9uRmxhZyA9IDAgOwogICAgcmVjdXJzaXZlRmxhZyA9
IDAgOwogICAgcGFyZW50RmxhZyA9IDAgOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4Kdm9pZCAg
TlJIWV9tYXRjaDxUeXBlPjo6ZHVtYkNvcHlJbmZvICgKICAgIE5SSFlfbWF0Y2ggPFR5cGU+ICAg
Km1hdGNoUHRyCiAgICApCnsKICAgICAKICAgIGlmIChmYXN0QmluYXJ5T25seSkgewogICAgICAg
ICgoISggMCAgKSk/ICggVFhUX0Fzc2VydENvbmQgKDAgLCAxICwgIkZBTFNFIiwgImgvbnJoeV90
ZW1wbGF0ZU1hdGNoLmMiLCAxMjUpKSA6IDAgKSA7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAg
IGlmIChtYXRjaFB0cikKICAgICAgICB7CiAgICAgICAgb3JpZ2luYWwgPSAoVHdpbmUpbWF0Y2hQ
dHItPm9yaWdpbmFsOwoKICAgICAgICBwcmVmaXggPSAoVHdpbmUpbWF0Y2hQdHItPnByZWZpeDsK
ICAgICAgICBzdWZmaXggPSAoVHdpbmUpbWF0Y2hQdHItPnN1ZmZpeDsKCiAgICAgICAgdmFsaWRB
bHBoYVJhbmdlID0gbWF0Y2hQdHItPnZhbGlkQWxwaGFSYW5nZTsKICAgICAgICBhbHBoYVN0YXJ0
ID0gKFR3aW5lKW1hdGNoUHRyLT5hbHBoYVN0YXJ0OwogICAgICAgIGFscGhhRW5kID0gKFR3aW5l
KW1hdGNoUHRyLT5hbHBoYUVuZDsKICAgIAogICAgICAgIHZhbGlkTnVtZXJpY1JhbmdlID0gbWF0
Y2hQdHItPnZhbGlkTnVtZXJpY1JhbmdlOwogICAgICAgIG51bWVyaWNTdGFydFdpbGQgPSBtYXRj
aFB0ci0+bnVtZXJpY1N0YXJ0V2lsZDsKICAgICAgICBudW1lcmljU3RhcnQgPSBtYXRjaFB0ci0+
bnVtZXJpY1N0YXJ0OwogICAgICAgIG51bWVyaWNFbmRXaWxkID0gbWF0Y2hQdHItPm51bWVyaWNF
bmRXaWxkOwogICAgICAgIG51bWVyaWNFbmQgPSBtYXRjaFB0ci0+bnVtZXJpY0VuZDsKCiAgICAg
ICAgaW5jcmVtZW50ID0gbWF0Y2hQdHItPmluY3JlbWVudDsKCiAgICAgICAgdXNlUm9vdCA9IG1h
dGNoUHRyLT51c2VSb290OwogICAgICAgIF9yb290ID0gbWF0Y2hQdHItPl9yb290OwogICAgICAg
IF9lbmQgPSBtYXRjaFB0ci0+X2VuZDsKCiAgICAgICAgX3Jvb3RGb3JBcHBlbmQgPSBtYXRjaFB0
ci0+X3Jvb3RGb3JBcHBlbmQ7CgogICAgICAgIGNyZWF0aW9uRmxhZyA9IG1hdGNoUHRyLT5jcmVh
dGlvbkZsYWc7CiAgICAgICAgcmVjdXJzaXZlRmxhZyA9IG1hdGNoUHRyLT5yZWN1cnNpdmVGbGFn
OwogICAgICAgIHBhcmVudEZsYWcgPSBtYXRjaFB0ci0+cGFyZW50RmxhZzsKICAgICAgICB9CiAg
ICBlbHNlCiAgICAgICAgewogICAgICAgIG9yaWdpbmFsID0gKFR3aW5lKSIiOwoKICAgICAgICBw
cmVmaXggPSAoVHdpbmUpIiI7CiAgICAgICAgc3VmZml4ID0gKFR3aW5lKSIiOwoKICAgICAgICB2
YWxpZEFscGhhUmFuZ2UgPSAwIDsKICAgICAgICBhbHBoYVN0YXJ0ID0gKFR3aW5lKSIiOwogICAg
ICAgIGFscGhhRW5kID0gKFR3aW5lKSIiOwogICAgCiAgICAgICAgdmFsaWROdW1lcmljUmFuZ2Ug
PSAwIDsKICAgICAgICBudW1lcmljU3RhcnRXaWxkID0gMCA7CiAgICAgICAgbnVtZXJpY1N0YXJ0
ID0gMDsKICAgICAgICBudW1lcmljRW5kV2lsZCA9IDAgOwogICAgICAgIG51bWVyaWNFbmQgPSAw
OwoKICAgICAgICAgCiAgICAgICAgaW5jcmVtZW50ID0gMTsKCiAgICAgICAgdXNlUm9vdCA9IDAg
OwogICAgICAgICAKICAgICAgICBfcm9vdCA9IHZlY3RvcjxUeXBlICo+OjppdGVyYXRvcigpOwog
ICAgICAgIF9lbmQgPSBfcm9vdDsKICAgICAgICBfcm9vdEZvckFwcGVuZCA9IF9yb290OwoKICAg
ICAgICBjcmVhdGlvbkZsYWcgPSAwIDsKICAgICAgICByZWN1cnNpdmVGbGFnID0gMCA7CiAgICAg
ICAgcGFyZW50RmxhZyA9IDAgOwogICAgICAgIH0KfQoKDAogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+CnZvaWQgIE5SSFlfbWF0Y2g8VHlwZT46
Omluc3RhbGxUb2tlbkV0QWwgKAogICAgY29uc3QgQ0hBUiAgKnRva2VuCiAgICApCnsKICAgICAK
ICAgIGlmIChmYXN0QmluYXJ5T25seSkgewogICAgICAgICgoISggMCAgKSk/ICggVFhUX0Fzc2Vy
dENvbmQgKDAgLCAxICwgIkZBTFNFIiwgImgvbnJoeV90ZW1wbGF0ZU1hdGNoLmMiLCAyMzEpKSA6
IDAgKSA7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICAKICAgIG9yaWdpbmFsID0gKFR3aW5l
KXRva2VuOwoKICAgICAKICAgIHByZWZpeCA9IChUd2luZSkiIjsKICAgIHN1ZmZpeCA9IChUd2lu
ZSkiIjsKICAgIGFscGhhU3RhcnQgPSAoVHdpbmUpIiI7CiAgICBhbHBoYUVuZCA9IChUd2luZSki
IjsKfQoKDAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnRlbXBsYXRlIDxjbGFz
cyBUeXBlPgpOUkhZX2J1bmNoIDxUeXBlPiAqTlJIWV9tYXRjaDxUeXBlPjo6TWF0Y2hlbSAoCiAg
ICBjb25zdCBDSEFSICAqb3JpZ1Rva2VuCiAgICApCnsKICAgIElOVCAgICAgICAgICAgICAgICAg
ICAgIGksIGosIGNvdW50LCB0bXBfY291bnQ7CiAgICBOUkhZX2J1bmNoIDxUeXBlPiAgICAgICAq
YnVuY2hQdHJzLCAqdG1wQnVuY2hQdHJzOwogICAgTGlzdCA8QVNDSUlfT0JKX0NIQU4+ICAgdG9r
ZW5zOwogICAgQ0hBUiAgICAgICAgICAgICAgICAgICAgKmN1cnJlbnRUb2tlbjsKICAgIElOVCAg
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUb2tlbkxlbmd0aCwgaWR1bSwgbGVuZ3RoQ3VycmVu
dFRva2VuOwogICAgQ0hBUiAgICAgICAgICAgICAgICAgICAgKmN1cnRva1B0ciwgKnB0ciwgKnRw
dHI7CiAgICBDSEFSICAgICAgICAgICAgICAgICAgICAqaXRlbW5hbWVQdHI7CiAgICBDSEFSICAg
ICAgICAgICAgICAgICAgICAqaXRlbW5hbWU7CiAgICBUd2luZSAgICAgICAgICAgICAgICAgICBj
aGFubmVsSW5mbzsKICAgIFR3aW5lICAgICAgICAgICAgICAgICAgIHRtcFR3aW5lOwogICAgWk9P
TEVBTiAgICAgICAgICAgICAgICAgaXRlbU9uZTsKICAgIGNvbnN0IENIQVIgICAgICAgICAgICAg
ICpjb25zdF9wdHI7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICBza2lwRmFzdE1hdGNoZW07
CgogICAgIAogICAgaWYgKGZhc3RCaW5hcnlPbmx5KSB7CiAgICAgICAgKCghKCAwICApKT8gKCBU
WFRfQXNzZXJ0Q29uZCAoMCAsIDEgLCAiRkFMU0UiLCAiaC9ucmh5X3RlbXBsYXRlTWF0Y2guYyIs
IDMwMSkpIDogMCApIDsKICAgICAgICByZXR1cm4gX19udWxsIDsKICAgIH0KCiAgICAgCgogICAg
aWYgKGNyZWF0aW9uRmxhZyA9PSAwICAmJgogICAgICAgIChfcm9vdCA9PSB2ZWN0b3I8VHlwZSAq
Pjo6aXRlcmF0b3IoKSAmJgogICAgICAgICBfZW5kID09IF9yb290KSkgewogICAgICAgICgoISgg
ZmFsc2UgKSk/ICggVFhUX0Fzc2VydENvbmQgKDAgLCAxICwgImZhbHNlIiwgImgvbnJoeV90ZW1w
bGF0ZU1hdGNoLmMiLCAzMTApKSA6IDAgKSA7CiAgICAgICAgcmV0dXJuIF9fbnVsbCA7CiAgICB9
CgogICAgIAoKCgoKICAgIGlmICgodG9rZW5zID0gTlJIWV9QYXJzZU9yaWdUb2tlbiAob3JpZ1Rv
a2VuKSkuc2l6ZSgpID09IDApCiAgICAgICAgewogICAgICAgIHJldHVybiAoX19udWxsICk7CiAg
ICAgICAgfQoKICAgICAKICAgIGluc3RhbGxUb2tlbkV0QWwgKG9yaWdUb2tlbik7CgogICAgIAoK
ICAgIGJ1bmNoUHRycyA9IF9fbnVsbCA7CgogICAgIAogICAgY3VycmVudFRva2VuID0gX19udWxs
IDsKICAgIGN1cnJlbnRUb2tlbkxlbmd0aCA9IDA7CiAgICBjaGFubmVsSW5mbyA9IChUd2luZSki
IjsKICAgIGl0ZW1uYW1lID0gX19udWxsIDsKCiAgICAgCgoKICAgIGZvciAoaSA9IDA7IGkgPCB0
b2tlbnMuc2l6ZSgpOyBpKyspCiAgICAgICAgewogICAgICAgICAKICAgICAgICBjaGFubmVsSW5m
byA9IHRva2Vuc1tpXS5jaGFubmVsOwoKICAgICAgICAgCgoKCgoKCgoKCgogICAgICAgICAKCiAg
ICAgICAgY29uc3RfcHRyID0gKGNvbnN0IENIQVIqKSh0b2tlbnNbaV0udGhpbmcpOwogICAgICAg
IGxlbmd0aEN1cnJlbnRUb2tlbiA9IHN0cmxlbiAoY29uc3RfcHRyKTsKICAgICAgICBpZiAoY3Vy
cmVudFRva2VuKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAKCiAgICAgICAgICAgIGlkdW0g
PSBsZW5ndGhDdXJyZW50VG9rZW4gKyAyOwogICAgICAgICAgICBpZiAoaWR1bSA+IGN1cnJlbnRU
b2tlbkxlbmd0aCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBj
dXJyZW50VG9rZW47CiAgICAgICAgICAgICAgICBjdXJyZW50VG9rZW4gPSBuZXcgQ0hBUltpZHVt
XTsKICAgICAgICAgICAgICAgIGN1cnJlbnRUb2tlbkxlbmd0aCA9IGlkdW07CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgIAoKICAgICAgICAgICAgY3VycmVudFRva2VuTGVuZ3RoID0gbGVuZ3RoQ3VycmVudFRva2Vu
ICsgMjsKCiAgICAgICAgICAgICAKCiAgICAgICAgICAgIGlmIChjdXJyZW50VG9rZW5MZW5ndGgg
PCAzNCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGN1cnJlbnRUb2tlbkxlbmd0
aCA9IDM0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBjdXJyZW50VG9rZW4gPSBuZXcg
Q0hBUltjdXJyZW50VG9rZW5MZW5ndGhdOwogICAgICAgICAgICB9CiAgICAgICAgc3RyY3B5IChj
dXJyZW50VG9rZW4sIGNvbnN0X3B0cik7CgogICAgICAgICAKCiAgICAgICAgaWYgKChsZW5ndGhD
dXJyZW50VG9rZW4gPT0gMSkgJiYgKGN1cnJlbnRUb2tlblswXSA9PSAnKicpKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAKCgoKCiAgICAgICAgICAgICAKICAgICAgICAgICAgZGVsZXRlIFtd
IGN1cnJlbnRUb2tlbjsKICAgICAgICAgICAgaWYgKGl0ZW1uYW1lKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgZGVsZXRlIFtdIGl0ZW1uYW1lOwogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgIAoKICAgICAgICAgICAgcmV0dXJuIChtYXRjaFNvbG9XaWxkIChidW5jaFB0
cnMsIGNoYW5uZWxJbmZvKSk7CgogICAgICAgICAgICB9ICAKCiAgICAgICAgIAoKCgoKICAgICAg
ICBlbHNlIGlmICgobGVuZ3RoQ3VycmVudFRva2VuID09IDEpICYmIChjdXJyZW50VG9rZW5bMF0g
PT0gJy4nKSAmJgogICAgICAgICAgICAgICAgIChjaGFubmVsSW5mbyA9PSAiIikpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgVHdpbmUgICAgICAgICAgIHRtcFR3aW5lOwogICAgICAgICAgICBB
U0NJSV9PQkpfQ0hBTiAgdG1wT2JqQ2hhbjsKICAgICAgICAgICAgQ0hBUiAgICAgICAgICAgICp0
bXBTdHJpbmc7CiAgICAgICAgICAgIElOVCAgICAgICAgICAgICBsb2NhbF9pbnNlcnRMb2NhdGlv
bjsKICAgICAgICAgICAgQ0hBUiAgICAgICAgICAgICp0dHB0ciwgKnR0dHB0cjsKCiAgICAgICAg
ICAgICAKCiAgICAgICAgICAgIHRtcFR3aW5lID0gbWF0Y2hDdXJyZW50Q2hhbm5lbHMgKCk7Cgog
ICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICh0bXBUd2luZSAhPSAiIikKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAKCgoKCiAgICAgICAgICAgICAgICB0bXBTdHJpbmcgPSBu
ZXcgQ0hBUltzdHJsZW4gKHRtcFR3aW5lKSArIDJdOwogICAgICAgICAgICAgICAgc3RyY3B5ICh0
bXBTdHJpbmcsIHRtcFR3aW5lKTsKICAgICAgICAgICAgICAgIHN0cmNhdCAodG1wU3RyaW5nLCAi
LCIpOwoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHdoaWxlICgocHRyID0gc3Ry
Y2hyICh0bXBTdHJpbmcsICdbJykpICE9IF9fbnVsbCApCiAgICAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgICAKCgoKICAgICAgICAgICAgICAgICAgICAqcHRyID0gJ3snOwog
ICAgICAgICAgICAgICAgICAgIHdoaWxlICgqcHRyICE9ICddJykKICAgICAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnB0ciA9PSAnLCcpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0g
JzsnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICBwdHIrKzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICpw
dHIgPSAnfSc7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgIHB0ciA9IHRtcFN0cmluZzsKICAgICAgICAgICAgICAgIHRwdHIgPSBwdHI7CiAg
ICAgICAgICAgICAgICBsb2NhbF9pbnNlcnRMb2NhdGlvbiA9IChpICsgMSk7CiAgICAgICAgICAg
ICAgICB3aGlsZSAoKHRwdHIgPSBzdHJjaHIgKHB0ciwgJywnKSkgIT0gJ1wwJykKICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgKnRwdHIgPSAnXDAnOwoKICAgICAgICAg
ICAgICAgICAgICAgCgoKICAgICAgICAgICAgICAgICAgICB0dHB0ciA9IHN0cmNociAocHRyLCAn
LycpOwogICAgICAgICAgICAgICAgICAgICp0dHB0ciA9ICdcMCc7CiAgICAgICAgICAgICAgICAg
ICAgdG1wT2JqQ2hhbi50aGluZyA9IChUd2luZSlwdHI7CiAgICAgICAgICAgICAgICAgICAgKnR0
cHRyID0gJy8nOwoKICAgICAgICAgICAgICAgICAgICAgCgoKCgogICAgICAgICAgICAgICAgICAg
IGlmICgqKHR0cHRyKzEpID09ICd7JykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICAgICB0dHRwdHIgPSB0dHB0cisxOwogICAgICAgICAgICAgICAgICAgICAg
ICAqdHR0cHRyID0gJ1snOwogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnR0dHB0ciAh
PSAnXDAnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCp0dHRwdHIgPT0gJzsnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdHR0cHRyID0gJywnOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHR0dHB0cisrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICB0dHRwdHItLTsKICAgICAgICAgICAgICAgICAgICAgICAgKnR0dHB0ciA9ICdcMCc7
CiAgICAgICAgICAgICAgICAgICAgICAgIHRtcE9iakNoYW4uY2hhbm5lbCA9IChUd2luZSkodHRw
dHIrMik7CiAgICAgICAgICAgICAgICAgICAgICAgICp0dHRwdHIgPSAnXSc7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG1wT2JqQ2hhbi5jaGFubmVsID0gKFR3
aW5lKSh0dHB0cisxKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
ICAgICB0b2tlbnMuaW5zZXJ0ICh0bXBPYmpDaGFuLCBsb2NhbF9pbnNlcnRMb2NhdGlvbik7CiAg
ICAgICAgICAgICAgICAgICAgbG9jYWxfaW5zZXJ0TG9jYXRpb24rKzsKICAgICAgICAgICAgICAg
ICAgICAqdHB0ciA9ICcsJzsKICAgICAgICAgICAgICAgICAgICBwdHIgPSB0cHRyICsgMTsKICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkZWxldGUgW10gdG1wU3RyaW5nOwog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgIAogICAgICAgICAgICB0b2tlbnMucmVtb3Zl
IChpKTsKCiAgICAgICAgICAgICAKCiAgICAgICAgICAgIGktLTsKICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgIH0gIAoKICAgICAgICAgCgoKICAgICAgICBlbHNlIGlmICgobGVuZ3Ro
Q3VycmVudFRva2VuID09IDEpICYmIChjdXJyZW50VG9rZW5bMF0gPT0gJy4nKSkKICAgICAgICAg
ICAgewogICAgICAgICAgICBUd2luZSAgICAgICAgICAgdG1wVHdpbmU7CiAgICAgICAgICAgIEFT
Q0lJX09CSl9DSEFOICB0bXBPYmpDaGFuOwogICAgICAgICAgICBDSEFSICAgICAgICAgICAgKnRt
cFN0cmluZzsKICAgICAgICAgICAgSU5UICAgICAgICAgICAgIGxvY2FsX2luc2VydExvY2F0aW9u
OwoKICAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoYnVuY2hQdHJzID09IF9fbnVsbCApCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBidW5jaFB0cnMgPSBuZXcgTlJIWV9idW5j
aCA8VHlwZT4gKG9yaWdpbmFsKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAKCiAg
ICAgICAgICAgIHRtcFR3aW5lID0gbWF0Y2hDdXJyZW50T2JqZWN0cyAoKTsKCiAgICAgICAgICAg
ICAKICAgICAgICAgICAgaWYgKHRtcFR3aW5lICE9ICIiKQogICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHRtcFN0cmluZyA9IG5ldyBDSEFSW3N0cmxl
biAodG1wVHdpbmUpICsgMl07CiAgICAgICAgICAgICAgICBzdHJjcHkgKHRtcFN0cmluZywgdG1w
VHdpbmUpOwogICAgICAgICAgICAgICAgc3RyY2F0ICh0bXBTdHJpbmcsICIsIik7CiAgICAgICAg
ICAgICAgICBwdHIgPSB0bXBTdHJpbmc7CiAgICAgICAgICAgICAgICB0cHRyID0gcHRyOwogICAg
ICAgICAgICAgICAgbG9jYWxfaW5zZXJ0TG9jYXRpb24gPSAoaSArIDEpOwogICAgICAgICAgICAg
ICAgd2hpbGUgKCh0cHRyID0gc3RyY2hyIChwdHIsICcsJykpICE9ICdcMCcpCiAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICp0cHRyID0gJ1wwJzsKICAgICAgICAgICAg
ICAgICAgICB0bXBPYmpDaGFuLnRoaW5nID0gKFR3aW5lKXB0cjsKICAgICAgICAgICAgICAgICAg
ICB0bXBPYmpDaGFuLmNoYW5uZWwgPSBjaGFubmVsSW5mbzsKICAgICAgICAgICAgICAgICAgICB0
b2tlbnMuaW5zZXJ0ICh0bXBPYmpDaGFuLCBsb2NhbF9pbnNlcnRMb2NhdGlvbik7CiAgICAgICAg
ICAgICAgICAgICAgbG9jYWxfaW5zZXJ0TG9jYXRpb24rKzsKICAgICAgICAgICAgICAgICAgICAq
dHB0ciA9ICcsJzsKICAgICAgICAgICAgICAgICAgICBwdHIgPSB0cHRyICsgMTsKICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkZWxldGUgW10gdG1wU3RyaW5nOwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgIAogICAgICAgICAgICB0b2tlbnMucmVtb3ZlIChpKTsK
CiAgICAgICAgICAgICAKCiAgICAgICAgICAgIGktLTsKICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgIH0gIAoKICAgICAgICAgCgogICAgICAgIGVsc2UgaWYgKChzdHJjbXAgKGN1cnJl
bnRUb2tlbiwgIk9iamVjdHMiKSA9PSAwKSB8fAogICAgICAgICAgICAgICAgIChzdHJjbXAgKGN1
cnJlbnRUb2tlbiwgIkNhbWVyYXMiKSA9PSAwKSB8fAogICAgICAgICAgICAgICAgIChzdHJjbXAg
KGN1cnJlbnRUb2tlbiwgIkxpZ2h0cyIpID09IDApIHx8CiAgICAgICAgICAgICAgICAgKHN0cmNt
cCAoY3VycmVudFRva2VuLCAiTW9kZWxzIikgPT0gMCkgfHwKICAgICAgICAgICAgICAgICAoc3Ry
Y21wIChjdXJyZW50VG9rZW4sICJIb21lcyIpID09IDApIHx8CiAgICAgICAgICAgICAgICAgKHN0
cmNtcCAoY3VycmVudFRva2VuLCAiUm90b3MiKSA9PSAwKSB8fAogICAgICAgICAgICAgICAgIChz
dHJjbXAgKGN1cnJlbnRUb2tlbiwgIlRleHMiKSA9PSAwKSB8fAogICAgICAgICAgICAgICAgIChz
dHJjbXAgKGN1cnJlbnRUb2tlbiwgIlRyYWNrcyIpID09IDApIHx8CiAgICAgICAgICAgICAgICAg
KHN0cmNtcCAoY3VycmVudFRva2VuLCAiQXBwYXJpdGlvbnMiKSA9PSAwKSB8fAogICAgICAgICAg
ICAgICAgIChzdHJjbXAgKGN1cnJlbnRUb2tlbiwgIlBvcnRzIikgPT0gMCkgfHwKICAgICAgICAg
ICAgICAgICAoc3RyY21wIChjdXJyZW50VG9rZW4sICJNYXRlcmlhbHMiKSA9PSAwKSkKICAgICAg
ICAgICAgewogICAgICAgICAgICBUd2luZSAgICAgICAgICAgdG1wVHdpbmU7CiAgICAgICAgICAg
IElOVCAgICAgICAgICAgICBsb2NhbF9pbnNlcnRMb2NhdGlvbjsKICAgICAgICAgICAgQ0hBUiAg
ICAgICAgICAgICp0bXBTdHJpbmc7CiAgICAgICAgICAgIEFTQ0lJX09CSl9DSEFOICB0bXBPYmpD
aGFuOwoKICAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoYnVuY2hQdHJzID09IF9fbnVsbCAp
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBidW5jaFB0cnMgPSBuZXcgTlJIWV9i
dW5jaCA8VHlwZT4gKG9yaWdpbmFsKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAK
ICAgICAgICAgICAgdG1wVHdpbmUgPSBtYXRjaEFsbE9mT25lQ2xhc3MgKChjb25zdCBDSEFSKilj
dXJyZW50VG9rZW4pOwoKICAgICAgICAgICAgIAogICAgICAgICAgICBpZiAodG1wVHdpbmUgPT0g
IiIpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAKICAgICAgICAgICAgdG1wVHdpbmUgKz0gIiwiOwoKICAg
ICAgICAgICAgIAoKICAgICAgICAgICAgdG1wU3RyaW5nID0gbmV3IENIQVJbc3RybGVuICh0bXBU
d2luZSkgKyAyXTsKICAgICAgICAgICAgc3RyY3B5ICh0bXBTdHJpbmcsIHRtcFR3aW5lKTsKICAg
ICAgICAgICAgcHRyID0gdG1wU3RyaW5nOwogICAgICAgICAgICB0cHRyID0gcHRyOwogICAgICAg
ICAgICBsb2NhbF9pbnNlcnRMb2NhdGlvbiA9IChpICsgMSk7CiAgICAgICAgICAgIHdoaWxlICgo
dHB0ciA9IHN0cmNociAocHRyLCAnLCcpKSAhPSAnXDAnKQogICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgKnRwdHIgPSAnXDAnOwogICAgICAgICAgICAgICAgdG1wT2JqQ2hhbi50aGlu
ZyA9IChUd2luZSlwdHI7CiAgICAgICAgICAgICAgICB0bXBPYmpDaGFuLmNoYW5uZWwgPSBjaGFu
bmVsSW5mbzsKICAgICAgICAgICAgICAgIHRva2Vucy5pbnNlcnQgKHRtcE9iakNoYW4sIGxvY2Fs
X2luc2VydExvY2F0aW9uKTsKICAgICAgICAgICAgICAgIGxvY2FsX2luc2VydExvY2F0aW9uKys7
CiAgICAgICAgICAgICAgICAqdHB0ciA9ICcsJzsKICAgICAgICAgICAgICAgIHB0ciA9IHRwdHIg
KyAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB0b2tlbnMucmVtb3ZlIChpKTsKICAg
ICAgICAgICAgZGVsZXRlIFtdIHRtcFN0cmluZzsKCiAgICAgICAgICAgICAKCiAgICAgICAgICAg
IGktLTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgIAogICAg
ICAgIGN1cnRva1B0ciA9IGN1cnJlbnRUb2tlbjsKICAgICAgICBjb3VudCA9IDA7CgogICAgICAg
ICAKCiAgICAgICAgc2tpcEZhc3RNYXRjaGVtID0gMCA7CgogICAgICAgICAKICAgICAgICB3aGls
ZSAoKmN1cnRva1B0ciAhPSAnXDAnKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgaWYgKCpjdXJ0b2tQdHIgPT0gJyonKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIAoKICAgICAgICAgICAgICAgIHZlY3RvcjxUeXBlICo+OjppdGVyYXRvciBpdGVtID0g
X3Jvb3Q7CiAgICAgICAgICAgICAgICB3aGlsZSAoaXRlbSAhPSBfZW5kKSB7CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIHRtcF9jb3VudCA9IGNvdW50OwoKICAgICAg
ICAgICAgICAgICAgICAgCgoKICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbW5hbWUpCiAgICAg
ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGl0
ZW1uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaXRl
bW5hbWUgPSBuZXcgQ0hBUltzdHJsZW4gKCgqaXRlbSktPk5hbWUpICsgMl07CiAgICAgICAgICAg
ICAgICAgICAgc3RyY3B5IChpdGVtbmFtZSwgKCppdGVtKS0+TmFtZSk7CiAgICAgICAgICAgICAg
ICAgICAgaXRlbW5hbWVQdHIgPSBpdGVtbmFtZTsKCiAgICAgICAgICAgICAgICAgICAgIAoKCiAg
ICAgICAgICAgICAgICAgICAgaWYgKHRtcF9jb3VudCA9PSAwKQogICAgICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAKCgoKICAgICAgICAgICAgICAgICAgICAg
ICAgdHB0ciA9IGN1cnRva1B0ciArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChp
dGVtbmFtZVB0clt0bXBfY291bnRdICE9ICdcMCcpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoaXRlbW5hbWVQdHJbdG1wX2NvdW50XSA9PSAqdHB0cikKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR3aW5lICAgdG1wVHdpbmU7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0hBUiAgICBzYXZlX2M7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVfYyA9
IGl0ZW1uYW1lUHRyW3RtcF9jb3VudF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aXRlbW5hbWVQdHJbdG1wX2NvdW50XSA9ICdcMCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG1wVHdpbmUgPSBpdGVtbmFtZVB0cjsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0bXBUd2luZSArPSBjdXJ0b2tQdHIrMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpdGVtbmFtZVB0clt0bXBfY291bnRdID0gc2F2ZV9jOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRtcEJ1bmNoUHRycyA9IHJlTWF0Y2hlbSAodG1wVHdpbmUsIGl0ZW0sIDAp
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHRtcEJ1bmNoUHRycyAhPSBf
X251bGwgKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG1wQnVuY2hQ
dHJzLT5OdW1iZXJQdHJzID09IDEpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1bmNoUHRycyA9PSBfX251bGwgKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnVuY2hQdHJzID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuZXcgTlJIWV9idW5jaCA8VHlwZT4gKG9yaWdpbmFsKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmNo
UHRycy0+QXBwZW5kUHRyICgqaXRlbSwgY2hhbm5lbEluZm8pOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocmVjdXJzaXZlRmxhZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZUFwcGVu
ZCAoYnVuY2hQdHJzLCBpdGVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYW5uZWxJbmZvKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudEZsYWcpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJlbnRBcHBlbmQgKGJ1bmNoUHRycywgaXRlbSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsSW5mbyk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWxldGUgdG1wQnVuY2hQdHJzOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBfY291bnQrKzsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAKCgogICAg
ICAgICAgICAgICAgICAgICAgICArK2l0ZW07CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHN0cm5jbXAoY3VycmVudFRva2VuLCBpdGVtbmFtZVB0ciwgdG1wX2NvdW50KSA9PSAwKQog
ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAKCgogICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc3RyY21wIChjdXJ0b2tQdHIsICIqIikgPT0gMCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVuY2hQdHJzID09IF9fbnVsbCApCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJ1bmNoUHRycyA9IG5ldyBOUkhZX2J1bmNoIDxUeXBlPiAob3JpZ2luYWwpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJ1bmNoUHRycy0+QXBwZW5kUHRyICgqaXRlbSwgY2hhbm5lbEluZm8pOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWN1cnNp
dmVGbGFnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZWN1cnNpdmVBcHBlbmQgKGJ1bmNoUHRycywgaXRlbSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbEluZm8pOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50RmxhZykKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50QXBw
ZW5kIChidW5jaFB0cnMsIGl0ZW0sIGNoYW5uZWxJbmZvKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICsraXRlbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gIAoKICAgICAgICAgICAgICAgICAg
ICAgICAgIAoKICAgICAgICAgICAgICAgICAgICAgICAgdHB0ciA9IGN1cnRva1B0ciArIDE7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICgoKnRwdHIgIT0gJz8nKSAmJiAoKnRwdHIgIT0gJ3sn
KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcF9jb3VudCsrOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGl0ZW1uYW1lUHRyW3RtcF9jb3VudF0gIT0gJ1ww
JykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCp0cHRyID09IGl0ZW1uYW1lUHRyW3RtcF9jb3VudF0pCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAoKCgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cHRy
ID0gY3VydG9rUHRyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRtcF9jb3VudCsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoaXRlbW5hbWVQdHJbdG1wX2NvdW50XSA9PSAnXDAnKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2l0ZW07CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAg
ICAgICAKCgoKCgoKCgogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIFR3aW5lICAgdG1wVHdpbmU7CgogICAgICAgICAgICAgICAgICAgICAgICB0bXBUd2lu
ZSA9IHRwdHI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRtcEJ1bmNoUHRycyA9IHJlTWF0Y2hl
bSAodG1wVHdpbmUsIGl0ZW0sIHRtcF9jb3VudCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
CgogICAgICAgICAgICAgICAgICAgICAgICAgCgoKCiAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICgodG1wQnVuY2hQdHJzICE9IF9fbnVsbCApICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAodG1wQnVuY2hQdHJzLT5OdW1iZXJQdHJzID09IDEpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGJ1bmNoUHRycyA9PSBfX251bGwgKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidW5jaFB0cnMgPSBu
ZXcgTlJIWV9idW5jaCA8VHlwZT4gKG9yaWdpbmFsKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJ1bmNoUHRycy0+QXBwZW5kUHRyICgqaXRlbSwgY2hhbm5lbEluZm8pOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChyZWN1cnNpdmVGbGFnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNpdmVBcHBlbmQgKGJ1bmNoUHRycywg
aXRlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbEluZm8pOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50RmxhZykKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyZW50QXBwZW5kIChidW5jaFB0cnMsIGl0ZW0sIGNoYW5uZWxJbmZvKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlIHRtcEJ1bmNoUHRyczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICArK2l0ZW07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg
ICAgICAgIH0gIAoKICAgICAgICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgICAgICsr
aXRlbTsKICAgICAgICAgICAgICAgICAgICB9ICAKCiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICBjb3VudCsrOwogICAgICAgICAgICAgICAgY3VydG9rUHRyKys7CgogICAgICAgICAg
ICAgICAgfSAgCgogICAgICAgICAgICAgCiAgICAgICAgICAgIGVsc2UgaWYgKCpjdXJ0b2tQdHIg
PT0gJz8nKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAg
ICAgIHZlY3RvcjxUeXBlICo+OjppdGVyYXRvciBpdGVtID0gX3Jvb3Q7CiAgICAgICAgICAgICAg
ICB3aGlsZSAoaXRlbSAhPSBfZW5kKSB7CiAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAg
ICAgICAgICAgICBpZiAoaXRlbW5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGl0ZW1uYW1lOwogICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgaXRlbW5hbWUgPSBuZXcgQ0hBUltzdHJsZW4gKCgq
aXRlbSktPk5hbWUpICsgMl07CiAgICAgICAgICAgICAgICAgICAgc3RyY3B5IChpdGVtbmFtZSwg
KCppdGVtKS0+TmFtZSk7CiAgICAgICAgICAgICAgICAgICAgaXRlbW5hbWVQdHIgPSBpdGVtbmFt
ZTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RybmNtcCAoY3VycmVudFRva2VuLCBpdGVtbmFt
ZVB0ciwgY291bnQpID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIAoKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtbmFtZVB0cltj
b3VudF0gIT0gJ1wwJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1u
YW1lUHRyW2NvdW50KzFdID09ICdcMCcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoYnVuY2hQdHJzID09IF9fbnVsbCApCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVu
Y2hQdHJzID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOUkhZ
X2J1bmNoIDxUeXBlPiAob3JpZ2luYWwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBidW5jaFB0cnMtPkFwcGVuZFB0ciAoKml0ZW0sIGNoYW5uZWxJbmZv
KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChyZWN1cnNpdmVGbGFnKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2
ZUFwcGVuZCAoYnVuY2hQdHJzLCBpdGVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhbm5lbEluZm8pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocGFyZW50RmxhZykKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRBcHBl
bmQgKGJ1bmNoUHRycywgaXRlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYW5uZWxJbmZvKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICsraXRlbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAoKCgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoKihjdXJ0b2tQdHIrMSkgIT0gJ1wwJykKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7CgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUd2luZSAgIHRtcFR3aW5lOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBUd2luZSA9IChjdXJ0b2tQdHIrMSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wQnVuY2hQdHJzID0gcmVNYXRjaGVt
ICh0bXBUd2luZSwgaXRlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNv
dW50KzEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCh0bXBCdW5jaFB0cnMgIT0gX19udWxsICkgJiYKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHRtcEJ1bmNoUHRycy0+TnVtYmVyUHRycyA9PSAxKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidW5jaFB0cnMg
PT0gX19udWxsICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmNoUHRycyA9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE5SSFlfYnVuY2ggPFR5cGU+
IChvcmlnaW5hbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnVuY2hQdHJzLT5BcHBlbmRQdHIgKCppdGVtLCBjaGFubmVs
SW5mbyk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWN1cnNpdmVGbGFnKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVjdXJzaXZlQXBwZW5kIChidW5jaFB0cnMsIGl0ZW0sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbEluZm8pOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFy
ZW50RmxhZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEFwcGVuZCAoYnVuY2hQdHJz
LCBpdGVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5u
ZWxJbmZvKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0bXBCdW5jaFB0cnM7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKytpdGVtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gIAoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9ICAKCiAgICAgICAgICAgICAgICAgICAgICAgIH0gIAoKICAgICAgICAgICAgICAgICAg
ICAgCgogICAgICAgICAgICAgICAgICAgICsraXRlbTsKICAgICAgICAgICAgICAgICAgICB9ICAK
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICAg
ICAgY3VydG9rUHRyKys7CgogICAgICAgICAgICAgICAgfSAgCgogICAgICAgICAgICAgCiAgICAg
ICAgICAgIGVsc2UgaWYgKCpjdXJ0b2tQdHIgPT0gJ3snKQogICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIFpPT0xFQU4gICAgIGlzTnVtZXJpYzsKICAg
ICAgICAgICAgICAgIENIQVIgICAgICAgICpzdGFydFB0ciwgKmh5cGhlblB0ciwgKmVuZFB0ciwg
KmluY1B0cjsKCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBzdGFydFB0ciA9IF9f
bnVsbCA7CiAgICAgICAgICAgICAgICBlbmRQdHIgPSBfX251bGwgOwogICAgICAgICAgICAgICAg
aHlwaGVuUHRyID0gX19udWxsIDsKICAgICAgICAgICAgICAgIGluY1B0ciA9IF9fbnVsbCA7CiAg
ICAgICAgICAgICAgICBpbmNyZW1lbnQgPSAxOwoKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgIE5SSFlfZXhhbWluZVJhbmdlIChjdXJ0b2tQdHIsICZpc051bWVyaWMsICZzdGFydFB0
ciwKICAgICAgICAgICAgICAgICAgICAmaHlwaGVuUHRyLCAmZW5kUHRyLCAmaW5jUHRyLCAmaW5j
cmVtZW50KTsKCiAgICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgaWYgKGNvdW50ID09
IDApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IChU
d2luZSkiIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAKCgogICAgICAgICAgICAgICAg
ICAgIHByZWZpeCA9IChUd2luZSkiIjsKICAgICAgICAgICAgICAgICAgICBmb3IgKElOVCBpaSA9
IDA7IGlpIDwgY291bnQ7IGlpKyspCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggKz0gY3VycmVu
dFRva2VuW2lpXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
IHByZWZpeCArPSAoVHdpbmUpIlwwIjsKCgoKCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgaWYgKCooZW5kUHRyKzEpID09ICdcMCcpCiAgICAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgIHN1ZmZpeCA9IChUd2luZSkiIjsKICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgIHN1ZmZpeCA9IChlbmRQdHIrMSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgICAKCgoKCgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFs
aWROdW1lcmljUmFuZ2UgPSAwIDsKICAgICAgICAgICAgICAgIHZhbGlkQWxwaGFSYW5nZSA9IDAg
OwogICAgICAgICAgICAgICAgbnVtZXJpY1N0YXJ0V2lsZCA9IDAgOwogICAgICAgICAgICAgICAg
bnVtZXJpY0VuZFdpbGQgPSAwIDsKICAgICAgICAgICAgICAgIHVzZVJvb3QgPSAxIDsKCiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoaXNOdW1lcmljID09IDAgKQogICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB2YWxpZEFscGhhUmFuZ2UgPSAxIDsK
CiAgICAgICAgICAgICAgICAgICAgKmh5cGhlblB0ciA9ICdcMCc7CiAgICAgICAgICAgICAgICAg
ICAgYWxwaGFTdGFydCA9IChzdGFydFB0cisxKTsKICAgICAgICAgICAgICAgICAgICAqaHlwaGVu
UHRyID0gJy0nOwoKICAgICAgICAgICAgICAgICAgICBpZiAoaW5jUHRyKQogICAgICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg
ICAgICAgKmluY1B0ciA9ICdcMCc7CiAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhRW5kID0g
KGh5cGhlblB0cisxKTsKICAgICAgICAgICAgICAgICAgICAgICAgKmluY1B0ciA9ICc6JzsKICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgICAgICplbmRQdHIgPSAnXDAnOwogICAgICAgICAgICAgICAgICAgICAgICBhbHBoYUVu
ZCA9IChoeXBoZW5QdHIrMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICplbmRQdHIgPSAnfSc7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgfSAgCiAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
IHZhbGlkTnVtZXJpY1JhbmdlID0gMSA7CgogICAgICAgICAgICAgICAgICAgICpoeXBoZW5QdHIg
PSAnXDAnOwogICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAgKHN0YXJ0UHRyKzEsICIqIikg
PT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBu
dW1lcmljU3RhcnRXaWxkID0gMSA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgbnVtZXJpY1N0YXJ0ID0gYXRvaSAoc3RhcnRQdHIrMSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAqaHlwaGVuUHRyID0gJy0nOwoKICAgICAg
ICAgICAgICAgICAgICBpZiAoaW5jUHRyKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICppbmNQdHIgPSAnXDAnOwogICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc3RyY21wIChoeXBoZW5QdHIrMSwgIioiKSA9PSAwKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpY0VuZFdpbGQgPSAx
IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnVtZXJpY0VuZCA9IGF0b2kgKGh5cGhlblB0cisxKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgKmluY1B0ciA9ICc6JzsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAqZW5kUHRyID0gJ1wwJzsKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmNtcCAoaHlwaGVuUHRyKzEsICIqIikgPT0gMCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG51bWVyaWNFbmRXaWxkID0gMSA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWNFbmQgPSBhdG9pIChoeXBoZW5QdHIrMSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICpl
bmRQdHIgPSAnfSc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgIGlmICgobnVtZXJpY1N0YXJ0ID4gbnVtZXJpY0VuZCkg
JiYgIW51bWVyaWNTdGFydFdpbGQgJiYKICAgICAgICAgICAgICAgICAgICAgICAgIW51bWVyaWNF
bmRXaWxkKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHVzZVJvb3QgPSAwIDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICAgCgoKCgogCgoKCgoKICAgICAgICAgICAgICAgIGl0ZW1P
bmUgPSAwIDsKCiAKCiAgICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgaWYgKGlzTnVt
ZXJpYyAmJiAoTlJIWV9nZXRVc2VPbmVBc01vZGUgKCkgPT0gKDApICkpCiAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmIChudW1lcmljU3RhcnRXaWxkKQogICAgICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAKCiAgICAgICAgICAg
ICAgICAgICAgICAgIGl0ZW1PbmUgPSAxIDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKG51bWVyaWNFbmRXaWxkKQogICAgICAgICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChudW1lcmljU3RhcnQgPD0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1PbmUgPSAxIDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICAgCgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG51bWVyaWNTdGFydCA8PSAxKSAmJiAo
bnVtZXJpY0VuZCA+PSAxKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGl0ZW1PbmUgPSAxIDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAgCgoKICAgICAgICAgICAgICAgIHZlY3RvcjxUeXBlICo+OjppdGVyYXRv
ciBpdGVtID0gdXNlUm9vdCA/IF9yb290IDogKF9lbmQgLSAxKTsKICAgICAgICAgICAgICAgIHdo
aWxlKCh1c2VSb290ICYmIGl0ZW0gIT0gX2VuZCkgfHwKICAgICAgICAgICAgICAgICAgICAgICgo
IXVzZVJvb3QpICYmIGl0ZW0gIT0gX3Jvb3QgLSAxKSkgewogICAgICAgICAgICAgICAgICAgICAK
CgogICAgICAgICAgICAgICAgICAgIGlmIChpdGVtbmFtZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10gaXRlbW5hbWU7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpdGVtbmFtZSA9IG5ldyBDSEFS
W3N0cmxlbiAoKCppdGVtKS0+TmFtZSkgKyAyXTsKICAgICAgICAgICAgICAgICAgICBzdHJjcHkg
KGl0ZW1uYW1lLCAoKml0ZW0pLT5OYW1lKTsKICAgICAgICAgICAgICAgICAgICBpdGVtbmFtZVB0
ciA9IGl0ZW1uYW1lOwogICAgICAgICAgICAgICAgICAgIGlmIChzdHJuY21wIChpdGVtbmFtZVB0
ciwgcHJlZml4LCBzdHJsZW4gKHByZWZpeCkpID09IDApCiAgICAgICAgICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFpc051bWVyaWMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDSEFSICAgICpkaWdpdFN0YXJ0UHRyOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ0hBUiAgICAqZGlnaXRFbmRQdHI7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDSEFSICAgIHNhdmVfYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCAg
ICAgdGhlTnVtYmVyLCBqOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgWk9PTEVBTiBnb3RB
bWF0Y2g7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ290QW1hdGNoID0gMCA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGlnaXRTdGFydFB0ciA9IGl0ZW1uYW1lUHRyICsgc3RybGVuIChwcmVmaXgpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGlnaXRFbmRQdHIgPSBkaWdpdFN0YXJ0UHRyOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCgqZGlnaXRFbmRQdHIgPD0gJzknKSAmJiAoKmRpZ2l0RW5k
UHRyID49ICcwJykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKCpkaWdpdEVuZFB0ciAhPSAnXDAnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKmRpZ2l0
RW5kUHRyID4gJzknKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KCpkaWdpdEVuZFB0ciA8ICcwJykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGlnaXRFbmRQdHIrKzsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVfYyA9ICpk
aWdpdEVuZFB0cjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGlnaXRFbmRQdHIg
PSAnXDAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZU51bWJlciA9IGF0b2kg
KGRpZ2l0U3RhcnRQdHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkaWdpdEVu
ZFB0ciA9IHNhdmVfYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoaXRlbU9uZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAoKCgoKCiAKCgoKCgoKCgoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGVOdW1iZXIgPSAxOwoKIAoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1PbmUgPSAwIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh1c2VSb290KSArK2l0ZW07CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSAtLWl0ZW07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFnb3RBbWF0Y2gpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChu
dW1lcmljU3RhcnRXaWxkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGVOdW1iZXIgPD0gbnVtZXJp
Y0VuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdEFtYXRjaCA9IDEgOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobnVt
ZXJpY0VuZFdpbGQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoZU51bWJlciA+PSBudW1lcmljU3Rh
cnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RBbWF0Y2ggPSAxIDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGluY3Jl
bWVudCA9PSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VSb290KQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCh0aGVOdW1iZXIgPj0gbnVtZXJpY1N0YXJ0KSAmJgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGVOdW1iZXIgPD0gbnVtZXJpY0VuZCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdEFtYXRjaCA9IDEgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGVOdW1iZXIgPD0gbnVtZXJp
Y1N0YXJ0KSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0
aGVOdW1iZXIgPj0gbnVtZXJpY0VuZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdvdEFtYXRjaCA9IDEgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gbnVtZXJpY1N0YXJ0OwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCA7OyApCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodXNlUm9vdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPiBu
dW1lcmljRW5kKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoaiA8IG51bWVyaWNFbmQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaiA9PSB0aGVOdW1iZXIp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdEFtYXRjaCA9IDEgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodXNlUm9vdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaiArPSBpbmNyZW1lbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqIC09IGluY3JlbWVudDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gIAogICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gIAoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdvdEFtYXRjaCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqZGlnaXRFbmRQdHIgPT0g
J30nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0RW5kUHRyKys7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKCgoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChzdWZmaXggPT0gIiIpIHx8IChz
dWZmaXggPT0gIioiKSkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpk
aWdpdEVuZFB0ciA9PSAnXDAnKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChidW5jaFB0cnMgPT0gX19udWxsICkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJ1bmNoUHRycyA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmV3IE5SSFlfYnVuY2ggPFR5cGU+IChvcmlnaW5hbCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidW5j
aFB0cnMtPkFwcGVuZFB0ciAoKml0ZW0sIGNoYW5uZWxJbmZvKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHJlY3Vyc2l2ZUZsYWcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNpdmVBcHBl
bmQgKGJ1bmNoUHRycywgaXRlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFubmVsSW5mbyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRGbGFnKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyZW50QXBwZW5kIChidW5jaFB0cnMsIGl0ZW0sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbEluZm8pOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZVJvb3Qp
ICsraXRlbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAtLWl0ZW07
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc3VmZml4ID09IChU
d2luZSkiIikgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpkaWdpdEVu
ZFB0ciA9PSAnXDAnKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZVJvb3QpICsraXRlbTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgLS1pdGVtOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcEJ1bmNoUHRycyA9IHJlTWF0
Y2hlbSAoc3VmZml4LCBpdGVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
KElOVClkaWdpdEVuZFB0ciAtIChJTlQpaXRlbW5hbWVQdHIpKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
KHRtcEJ1bmNoUHRycyAhPSBfX251bGwgKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAodG1wQnVuY2hQdHJzLT5OdW1iZXJQdHJzID09IDEpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1bmNoUHRycyA9PSBf
X251bGwgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVuY2hQdHJzID0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTlJIWV9idW5jaCA8VHlwZT4gKG9y
aWdpbmFsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBidW5jaFB0cnMtPkFwcGVuZFB0ciAoKml0ZW0sIGNoYW5uZWxJbmZv
KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHJlY3Vyc2l2ZUZsYWcpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWN1cnNpdmVBcHBlbmQgKGJ1bmNoUHRycywgaXRlbSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsSW5mbyk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRG
bGFnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50QXBwZW5kIChidW5jaFB0cnMsIGl0
ZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbElu
Zm8pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRtcEJ1bmNoUHRyczsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh1c2VSb290KSArK2l0ZW07CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgLS1pdGVtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9ICAKCiAgICAgICAgICAgICAgICAgICAgICAgIH0gIAoKICAgICAgICAgICAgICAgICAgICAg
CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VSb290KSArK2l0ZW07CiAgICAgICAgICAgICAg
ICAgICAgZWxzZSAtLWl0ZW07CgogICAgICAgICAgICAgICAgICAgIH0gIAoKIyAxNTEyICJoL25y
aHlfdGVtcGxhdGVNYXRjaC5jIgoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGNv
dW50Kys7CiAgICAgICAgICAgICAgICBjdXJ0b2tQdHIrKzsKCgogICAgICAgICAgICAgICAgfSAg
CgogICAgICAgICAgICAgCgogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICAgICAgY3VydG9rUHRyKys7CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICB9ICAKCiAgICAgICAgIAoKCiAgICAgICAgaWYgKCFza2lw
RmFzdE1hdGNoZW0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgdmVjdG9yPFR5cGUgKj46Oml0
ZXJhdG9yIGl0ZW0gPSBmYXN0TWF0Y2hlbSgoY29uc3QgY2hhciAqKWN1cnJlbnRUb2tlbik7CiAg
ICAgICAgICAgIGlmIChpdGVtICE9IF9lbmQpIHsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgIGlmIChidW5jaFB0cnMgPT0gX19udWxsICkKICAgICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgYnVuY2hQdHJzID0gbmV3IE5SSFlfYnVuY2ggPFR5cGU+IChvcmln
aW5hbCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgIGJ1bmNoUHRycy0+QXBwZW5kUHRyICgqaXRlbSwgY2hhbm5lbEluZm8pOwoKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmIChyZWN1cnNpdmVGbGFnKQogICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICByZWN1cnNpdmVBcHBlbmQgKGJ1bmNoUHRy
cywgaXRlbSwgY2hhbm5lbEluZm8pOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICBpZiAocGFyZW50RmxhZykKICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgcGFyZW50QXBwZW5kIChidW5jaFB0cnMsIGl0ZW0sIGNo
YW5uZWxJbmZvKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfSAgCgog
ICAgICAgICAgICB9ICAKCiAgICAgICAgfSAgCgogICAgIAogICAgaWYgKGN1cnJlbnRUb2tlbikK
ICAgICAgICB7CiAgICAgICAgZGVsZXRlIFtdIGN1cnJlbnRUb2tlbjsKICAgICAgICB9CgogICAg
aWYgKGl0ZW1uYW1lKQogICAgICAgIHsKICAgICAgICBkZWxldGUgW10gaXRlbW5hbWU7CiAgICAg
ICAgfQoKICAgICAKCgogICAgaWYgKGJ1bmNoUHRycyAhPSBfX251bGwgKQogICAgICAgIHsKICAg
ICAgICBmb3IgKGkgPSAwOyBpIDwgYnVuY2hQdHJzLT5OdW1iZXJQdHJzOyBpKyspCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoYnVuY2hQdHJzLT5FeHRyYXNbaV0g
PT0gIiIpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAKCiAgICAgICAgICAgIGlmIChidW5jaFB0cnMtPkV4
dHJhc1tpXSA9PSAiKiIpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAKCgogICAgICAgICAgICBjaGFubmVs
SW5mbyA9IChidW5jaFB0cnMtPlB0cnNbaV0pLT5OYW1lICsgIi8iICsKICAgICAgICAgICAgICAg
IGJ1bmNoUHRycy0+RXh0cmFzW2ldOwogICAgICAgICAgICBpZiAoKHRva2VucyA9IE5SSFlfUGFy
c2VDaGFuSW5mb0luVG9rZW4gKGNoYW5uZWxJbmZvKSkuc2l6ZSgpID09IDApCiAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gKF9fbnVsbCApOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgIAoKCgogICAgICAgICAgICBjaGFubmVsSW5mbyA9ICIiOwogICAgICAg
ICAgICBmb3IgKGogPSAwOyBqIDwgdG9rZW5zLnNpemUoKTsgaisrKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgaWYgKGogIT0gMCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgY2hhbm5lbEluZm8gKz0gIiwiOwogICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIGNoYW5uZWxJbmZvICs9IHRva2Vuc1tqXS5jaGFubmVsOwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICBidW5jaFB0cnMtPkV4dHJhc1tpXSA9IGNoYW5uZWxJbmZv
OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAKCiAgICBpZiAoYnVuY2hQdHJzICE9IF9f
bnVsbCApCiAgICAgICAgewogICAgICAgIGZvciAoaSA9IGJ1bmNoUHRycy0+TnVtYmVyUHRyczsg
LS1pID4gMDsgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAKICAgICAgICAgICAgZm9yIChq
ID0gaTsgLS1qID49IDA7ICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgIGlmIChidW5jaFB0cnMtPlB0cnNbaV0gPT0gYnVuY2hQdHJzLT5QdHJzW2pd
KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgCgogICAgICAgICAg
ICAgICAgICAgIGlmIChidW5jaFB0cnMtPkV4dHJhc1tpXSA9PSBidW5jaFB0cnMtPkV4dHJhc1tq
XSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgCgog
ICAgICAgICAgICAgICAgICAgICAgICBidW5jaFB0cnMtPlJlbW92ZVB0ciAoaSk7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IH0gIAoKICAgICAgICAgICAgfSAgCgogICAgICAgIH0gIAoKCgoKCgoKCgogICAgIAoKICAgIGlm
IChidW5jaFB0cnMgPT0gX19udWxsICkKICAgICAgICB7CiAgICAgICAgYnVuY2hQdHJzID0gbmV3
IE5SSFlfYnVuY2ggPFR5cGU+IChvcmlnaW5hbCk7CiAgICAgICAgfQogICAgCiAgICByZXR1cm4g
KGJ1bmNoUHRycyk7Cn0KCgwKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
dGVtcGxhdGUgPGNsYXNzIFR5cGU+ClR5cGUgKk5SSFlfbWF0Y2g8VHlwZT46OkZhc3RNYXRjaGVt
ICgKICAgIGNvbnN0IENIQVIgICp0b0JlTWF0Y2hlZAogICAgKQp7CiAgICBjb25zdCBDSEFSICAg
ICAgKnB0cjsKCiAgICAgCiAgICBpZiAoZmFzdEJpbmFyeU9ubHkpIHsKICAgICAgICAoKCEoIDAg
ICkpPyAoIFRYVF9Bc3NlcnRDb25kICgwICwgMSAsICJGQUxTRSIsICJoL25yaHlfdGVtcGxhdGVN
YXRjaC5jIiwgMTcxOSkpIDogMCApIDsKICAgICAgICByZXR1cm4gX19udWxsIDsKICAgIH0KCiAg
ICAgCgogICAgcHRyID0gdG9CZU1hdGNoZWQ7CiAgICB3aGlsZSAoKnB0cikKICAgICAgICB7CiAg
ICAgICAgIAoKICAgICAgICBpZiAoKCgqcHRyID49ICdhJykgJiYgKCpwdHIgPD0gJ3onKSkgfHwK
ICAgICAgICAgICAgKCgqcHRyID49ICdBJykgJiYgKCpwdHIgPD0gJ1onKSkgfHwKICAgICAgICAg
ICAgKCgqcHRyID49ICcwJykgJiYgKCpwdHIgPD0gJzknKSkgfHwKICAgICAgICAgICAgICgqcHRy
ID09ICdfJykpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgcHRyKys7CiAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAKICAgICAgICAoKCEoIDAgICkpPyAoIFRY
VF9Bc3NlcnRDb25kICgwICwgMSAsICJGQUxTRSIsICJoL25yaHlfdGVtcGxhdGVNYXRjaC5jIiwg
MTc0MCkpIDogMCApIDsKICAgICAgICByZXR1cm4gX19udWxsIDsKICAgICAgICB9CgogICAgIAog
ICAgcmV0dXJuICooZmFzdE1hdGNoZW0gKHRvQmVNYXRjaGVkKSk7Cn0KCgwKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+CnZlY3RvcjxUeXBlICo+
OjppdGVyYXRvciBOUkhZX21hdGNoPFR5cGU+OjpmYXN0TWF0Y2hlbShjb25zdCBjaGFyICp0b0Jl
TWF0Y2hlZCkKewogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgbG9jYWxfc3RhdHVzOwoKICAg
ICAKICAgIGlmIChmYXN0QmluYXJ5T25seSkgewogICAgICAgICgoISggZmFsc2UgKSk/ICggVFhU
X0Fzc2VydENvbmQgKDAgLCAxICwgImZhbHNlIiwgImgvbnJoeV90ZW1wbGF0ZU1hdGNoLmMiLCAx
Nzg4KSkgOiAwICkgOwogICAgICAgIHJldHVybiBfZW5kOwogICAgfQoKICAgICAgCgogICAgZm9y
ICh2ZWN0b3I8VHlwZSAqPjo6aXRlcmF0b3IgaXRlbSA9IF9yb290OyBpdGVtICE9IF9lbmQ7ICsr
aXRlbSkgewogICAgICAgICAKCgoKCiAgICAgICAgaWYgKChsb2NhbF9zdGF0dXMgPSBzdHJjbXAg
KChjb25zdCBDSEFSKikoKml0ZW0pLT5OYW1lLAogICAgICAgICAgICB0b0JlTWF0Y2hlZCkpID09
IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gaXRlbTsK
ICAgICAgICAgICAgfQogICAgICAgIAogICAgICAgICAKCgogICAgICAgIGlmIChsb2NhbF9zdGF0
dXMgPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAg
ICAgICAgfQoKICAgICAKICAgIHJldHVybiBfZW5kOwp9CgoMCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgpOUkhZX2J1bmNoIDxUeXBlPiAq
TlJIWV9tYXRjaDxUeXBlPjo6bWF0Y2hTb2xvV2lsZCAoCiAgICBOUkhZX2J1bmNoIDxUeXBlPiAg
ICpleHRhbnRCdW5jaFB0cnMsCiAgICBUd2luZSAgICAgICAgICAgICAgICZjaGFubmVsSW5mbwog
ICAgKQp7CiAgICBOUkhZX2J1bmNoIDxUeXBlPiAgICAgICAqYnVuY2hQdHJzOwogICAgSU5UICAg
ICAgICAgICAgICAgICAgICAgaTsKCiAgICAgCiAgICBpZiAoZmFzdEJpbmFyeU9ubHkpIHsKICAg
ICAgICAoKCEoIGZhbHNlICkpPyAoIFRYVF9Bc3NlcnRDb25kICgwICwgMSAsICJmYWxzZSIsICJo
L25yaHlfdGVtcGxhdGVNYXRjaC5jIiwgMTg2NykpIDogMCApIDsKICAgICAgICByZXR1cm4gX19u
dWxsIDsKICAgIH0KCiAgICAgCgoKICAgIGlmICgoY2hhbm5lbEluZm8gIT0gIiIpICYmIChjaGFu
bmVsSW5mbyAhPSAiKiIpKQogICAgICAgIHsKICAgICAgICBMaXN0IDxBU0NJSV9PQkpfQ0hBTj4g
ICB0b2tlbnM7CiAgICAgICAgVHdpbmUgICAgICAgICAgICAgICAgICAgdG1wQ2hhbkluZm87Cgog
ICAgICAgIHRtcENoYW5JbmZvID0gImRvZy8iICsgY2hhbm5lbEluZm87CiAgICAgICAgaWYgKCh0
b2tlbnMgPSBOUkhZX1BhcnNlQ2hhbkluZm9JblRva2VuICh0bXBDaGFuSW5mbykpLnNpemUoKSA9
PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoX19udWxsICk7CiAgICAgICAg
ICAgIH0KCiAgICAgICAgIAoKCgogICAgICAgIGNoYW5uZWxJbmZvID0gIiI7CiAgICAgICAgZm9y
IChpID0gMDsgaSA8IHRva2Vucy5zaXplKCk7IGkrKykKICAgICAgICAgICAgewogICAgICAgICAg
ICBpZiAoaSAhPSAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2hhbm5lbElu
Zm8gKz0gIiwiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBjaGFubmVsSW5mbyArPSB0
b2tlbnNbaV0uY2hhbm5lbDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgCiAgICB2ZWN0
b3I8VHlwZSAqPjo6aXRlcmF0b3IgaXRlbSA9IF9yb290OwoKICAgICAKICAgIGlmIChleHRhbnRC
dW5jaFB0cnMgPT0gX19udWxsICkKICAgICAgICB7CiAgICAgICAgIAogICAgICAgIGJ1bmNoUHRy
cyA9IG5ldyBOUkhZX2J1bmNoIDxUeXBlPjsKICAgICAgICBidW5jaFB0cnMtPkNvcHlUb2tlbiAo
b3JpZ2luYWwpOwoKICAgICAgICAgCgogICAgICAgIHdoaWxlIChpdGVtICE9IF9lbmQpIHsKICAg
ICAgICAgICAgYnVuY2hQdHJzLT5BcHBlbmRQdHIgKCppdGVtLCBjaGFubmVsSW5mbyk7CiAgICAg
ICAgICAgICsraXRlbTsKICAgICAgICB9CgogICAgICAgICAKCiAgICAgICAgcmV0dXJuIChidW5j
aFB0cnMpOwogICAgICAgIH0KCiAgICAgCgogICAgd2hpbGUgKGl0ZW0gIT0gX2VuZCkgewogICAg
ICAgICAKCiAgICAgICAgZm9yIChpID0gMDsgaSA8IGV4dGFudEJ1bmNoUHRycy0+TnVtYmVyUHRy
czsgaSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgIGlmICgoKml0ZW0gPT0gZXh0YW50QnVu
Y2hQdHJzLT5QdHJzW2ldKSAmJgogICAgICAgICAgICAgICAgKGNoYW5uZWxJbmZvID09IGV4dGFu
dEJ1bmNoUHRycy0+RXh0cmFzW2ldKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAKCiAgICAg
ICAgaWYgKGkgPT0gZXh0YW50QnVuY2hQdHJzLT5OdW1iZXJQdHJzKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgZXh0YW50QnVuY2hQdHJzLT5BcHBlbmRQdHIgKCppdGVt
LCBjaGFubmVsSW5mbyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgKytpdGVtOwogICAgfQoKICAg
ICAKCiAgICByZXR1cm4gKGV4dGFudEJ1bmNoUHRycyk7Cn0KCgwKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KTlJIWV9idW5jaCA8VHlw
ZT4gKk5SSFlfbWF0Y2g8VHlwZT46OnJlTWF0Y2hlbSAoCiAgICBUd2luZSAgICAgICAmY3VyVG9r
ZW5QdHIsCiAgICB2ZWN0b3I8VHlwZSAqPjo6aXRlcmF0b3IgaXRlbSwKICAgIElOVCAgICAgICAg
IGluZGV4SW50b0l0ZW0KICAgICkKewogICAgQ0hBUiAgICAgICAgICAgICAgICAqc2F2ZV9OYW1l
OwogICAgTlJIWV9tYXRjaCA8VHlwZT4gICAqc2F2ZV9tYXRjaDsKICAgIE5SSFlfYnVuY2ggPFR5
cGU+ICAgKmJ1bmNoUHRycyA9IF9fbnVsbCA7CiAgICBDSEFSICAgICAgICAgICAgICAgICp0cHRy
OwogICAgQ0hBUiAgICAgICAgICAgICAgICAqY3VyVG9rZW5QdHJfYXNDaGFyOwoKICAgICAKICAg
IGlmIChmYXN0QmluYXJ5T25seSkgewogICAgICAgICgoISggZmFsc2UgKSk/ICggVFhUX0Fzc2Vy
dENvbmQgKDAgLCAxICwgImZhbHNlIiwgImgvbnJoeV90ZW1wbGF0ZU1hdGNoLmMiLCAyMDA1KSkg
OiAwICkgOwogICAgICAgIHJldHVybiBfX251bGwgOwogICAgfQoKICAgICAKCgogICAgIAogICAg
aWYgKGN1clRva2VuUHRyID09ICIiKSB7CiAgICAgICAgKCghKCBmYWxzZSApKT8gKCBUWFRfQXNz
ZXJ0Q29uZCAoMCAsIDEgLCAiZmFsc2UiLCAiaC9ucmh5X3RlbXBsYXRlTWF0Y2guYyIsIDIwMTQp
KSA6IDAgKSA7CiAgICAgICAgcmV0dXJuIF9fbnVsbCA7CiAgICB9CgogICAgIAoKICAgIHNhdmVf
TmFtZSA9IG5ldyBDSEFSW3N0cmxlbiAoKCppdGVtKS0+TmFtZSkgKyAyXTsKICAgIHN0cmNweSAo
c2F2ZV9OYW1lLCAoY29uc3QgQ0hBUiopKCppdGVtKS0+TmFtZSk7CgogICAgIAogICAgc2F2ZV9t
YXRjaCA9IG5ldyBOUkhZX21hdGNoIDxUeXBlPiAoX19udWxsICwgX19udWxsICk7CgogICAgIAog
ICAgc2F2ZV9tYXRjaC0+ZHVtYkNvcHlJbmZvICh0aGlzKTsKCiAgICAgCiAgICBkdW1iQ29weUlu
Zm8gKF9fbnVsbCApOwoKICAgICAKICAgIF9yb290ID0gaXRlbTsKICAgIF9lbmQgPSBpdGVtICsg
MTsKCiAgICAgCgoKCiAgICBfcm9vdEZvckFwcGVuZCA9IHNhdmVfbWF0Y2gtPl9yb290Rm9yQXBw
ZW5kOwoKICAgICAKCgoKCgoKCgogICAgY3JlYXRpb25GbGFnID0gc2F2ZV9tYXRjaC0+Y3JlYXRp
b25GbGFnOwoKICAgICAKCiAgICAgCiAgICAoKml0ZW0pLT5OYW1lID0gKGNvbnN0IENIQVIqKSgm
KHNhdmVfTmFtZVtpbmRleEludG9JdGVtXSkpOwoKICAgICAKCiAgICBjdXJUb2tlblB0cl9hc0No
YXIgPSBuZXcgQ0hBUltzdHJsZW4gKGN1clRva2VuUHRyKSArIDJdOwogICAgc3RyY3B5IChjdXJU
b2tlblB0cl9hc0NoYXIsIChjb25zdCBDSEFSKiljdXJUb2tlblB0cik7CiAgICB0cHRyID0gY3Vy
VG9rZW5QdHJfYXNDaGFyOwoKICAgIHRwdHIgPSBjdXJUb2tlblB0cl9hc0NoYXI7CiAgICB3aGls
ZSAoKnRwdHIgIT0gJ1wwJykKICAgICAgICB7CiAgICAgICAgaWYgKCp0cHRyID09ICd7JykKICAg
ICAgICAgICAgewogICAgICAgICAgICAqdHB0ciA9ICdbJzsKICAgICAgICAgICAgfQogICAgICAg
IGVsc2UgaWYgKCp0cHRyID09ICd9JykKICAgICAgICAgICAgewogICAgICAgICAgICAqdHB0ciA9
ICddJzsKICAgICAgICAgICAgfQogICAgICAgIHRwdHIrKzsKICAgICAgICB9CgogICAgIAoKCiAg
ICBidW5jaFB0cnMgPSBNYXRjaGVtICgoY29uc3QgQ0hBUiopY3VyVG9rZW5QdHJfYXNDaGFyKTsK
CiAgICAgCgogICAgZHVtYkNvcHlJbmZvIChzYXZlX21hdGNoKTsKICAgIHNhdmVfbWF0Y2gtPmR1
bWJDb3B5SW5mbyAoX19udWxsICk7CiAgICBkZWxldGUgc2F2ZV9tYXRjaDsKCiAgICAgCiAgICAo
Kml0ZW0pLT5OYW1lID0gKGNvbnN0IENIQVIqKXNhdmVfTmFtZTsKICAgIGRlbGV0ZSBbXSBzYXZl
X05hbWU7CgogICAgIAogICAgcmV0dXJuIChidW5jaFB0cnMpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
VHlwZT4Kdm9pZCAgTlJIWV9tYXRjaDxUeXBlPjo6cmVjdXJzaXZlQXBwZW5kICgKICAgIE5SSFlf
YnVuY2ggPFR5cGU+ICAgKmJ1bmNoUHRycywKICAgIHZlY3RvcjxUeXBlICo+OjppdGVyYXRvciBp
dGVtLAogICAgVHdpbmUgICAgICAgICAgICAgICAmY2hhbm5lbEluZm8KICAgICkKewogICAgSU5U
ICAgICAgICAgICAgICAgICAgICAgaTsKICAgIExpc3QgPE5SSFlfY2xhc3NUaGluZyo+IGNoaWxk
cmVuOwoKICAgICAKICAgIGlmIChmYXN0QmluYXJ5T25seSkgewogICAgICAgICgoISggZmFsc2Ug
KSk/ICggVFhUX0Fzc2VydENvbmQgKDAgLCAxICwgImZhbHNlIiwgImgvbnJoeV90ZW1wbGF0ZU1h
dGNoLmMiLCAyMTA5KSkgOiAwICkgOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAgCgoKICAg
IE5SSFlfbWF0Y2hGdW5jQWRkQ2hpbGRyZW4gKCppdGVtLCAmY2hpbGRyZW4pOwoKICAgICAKCiAg
ICBmb3IgKGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyBpKyspCiAgICAgICAgewogICAgICAg
ICAKCiAgICAgICAgaWYgKCgoY2hpbGRyZW5baV0pLT5HZXRJZF90eXBlICgpID09ICgqaXRlbSkt
PkdldElkX3R5cGUgKCkpIHx8CiAgICAgICAgICAgIChjaGlsZHJlbltpXS0+SXNBQmFzZVR5cGUg
KFR5cGU6OkdldFNlbGZDbGFzc1R5cGUoKSkpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAK
CiAgICAgICAgICAgIHZlY3RvcjxUeXBlICo+ICp2OwogICAgICAgICAgICBOUkhZX2xvYWRJdGVt
TGlzdEFkZHJlc3Modik7CiAgICAgICAgICAgIHZlY3RvcjxUeXBlICo+OjppdGVyYXRvciB0bXAg
PSBfcm9vdEZvckFwcGVuZDsKICAgICAgICAgICAgd2hpbGUgKHRtcCAhPSB2LT5lbmQoKSkgewog
ICAgICAgICAgICAgICAgaWYgKCp0bXAgPT0gY2hpbGRyZW5baV0pCiAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBidW5jaFB0cnMt
PkFwcGVuZFB0ciAoKnRtcCwgY2hhbm5lbEluZm8pOwogICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICsrdG1wOwogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgKCghKCB0bXAgIT0gdi0+ZW5kKCkgKSk/ICggVFhUX0Fzc2Vy
dENvbmQgKDAgLCAxICwgInRtcCAhPSB2LT5lbmQoKSIsICJoL25yaHlfdGVtcGxhdGVNYXRjaC5j
IiwgMjE0MikpIDogMCApIDsKICAgICAgICAgICAgfSAgCgogICAgICAgIH0gIAoKICAgICAKICAg
IGNoaWxkcmVuLnJlbW92ZUFsbCgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4Kdm9pZCAgTlJI
WV9tYXRjaDxUeXBlPjo6cGFyZW50QXBwZW5kICgKICAgIE5SSFlfYnVuY2ggPFR5cGU+ICAgKmJ1
bmNoUHRycywKICAgIHZlY3RvcjxUeXBlICo+OjppdGVyYXRvciBpdGVtLAogICAgVHdpbmUgICAg
ICAgICAgICAgICAmY2hhbm5lbEluZm8KICAgICkKewogICAgSU5UICAgICAgICAgICAgICAgICAg
ICAgaTsKICAgIExpc3QgPE5SSFlfY2xhc3NUaGluZyo+IHBhcmVudHM7CgogICAgIAogICAgaWYg
KGZhc3RCaW5hcnlPbmx5KSB7CiAgICAgICAgKCghKCBmYWxzZSApKT8gKCBUWFRfQXNzZXJ0Q29u
ZCAoMCAsIDEgLCAiZmFsc2UiLCAiaC9ucmh5X3RlbXBsYXRlTWF0Y2guYyIsIDIxNjMpKSA6IDAg
KSA7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICAKCgogICAgTlJIWV9tYXRjaEZ1bmNBZGRQ
YXJlbnRzICgoTlJIWV9jbGFzc1RoaW5nKikoKml0ZW0pLCAmcGFyZW50cyk7CgogICAgIAoKICAg
IGZvciAoaSA9IDA7IGkgPCBwYXJlbnRzLnNpemUoKTsgaSsrKQogICAgICAgIHsKICAgICAgICAg
CgoKCgogICAgICAgIGlmICgoKHBhcmVudHNbaV0pLT5HZXRJZF90eXBlICgpID09ICgqaXRlbSkt
PkdldElkX3R5cGUgKCkpIHx8CiAgICAgICAgICAgICgoKml0ZW0pLT5Jc0FCYXNlVHlwZSAoKHBh
cmVudHNbaV0pLT5HZXRJZF90eXBlICgpKSkgfHwKICAgICAgICAgICAgKCgqaXRlbSktPklzQUJh
c2VUeXBlIChUSElOR19UWVBFX09CSkVDVCkgJiYgKHBhcmVudHNbaV0pLT5Jc0FCYXNlVHlwZSAo
VEhJTkdfVFlQRV9PQkpFQ1QpKSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgIAoKICAgICAg
ICAgICAgdmVjdG9yPFR5cGUgKj4gKnY7CiAgICAgICAgICAgIE5SSFlfbG9hZEl0ZW1MaXN0QWRk
cmVzcyh2KTsKICAgICAgICAgICAgdmVjdG9yPFR5cGUgKj46Oml0ZXJhdG9yIHRtcCA9IF9yb290
Rm9yQXBwZW5kOwogICAgICAgICAgICB3aGlsZSAodG1wICE9IHYtPmVuZCgpKSB7CiAgICAgICAg
ICAgICAgICBpZiAoKnRtcCA9PSBwYXJlbnRzW2ldKSB7CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgIGJ1bmNoUHRycy0+QXBwZW5kUHRyICgqdG1wLCBjaGFubmVsSW5m
byk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgKyt0bXA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAoKCEoIHRt
cCAhPSB2LT5lbmQoKSApKT8gKCBUWFRfQXNzZXJ0Q29uZCAoMCAsIDEgLCAidG1wICE9IHYtPmVu
ZCgpIiwgImgvbnJoeV90ZW1wbGF0ZU1hdGNoLmMiLCAyMTk5KSkgOiAwICkgOwogICAgICAgICAg
ICB9ICAKCiAgICAgICAgfSAgCgogICAgIAogICAgcGFyZW50cy5yZW1vdmVBbGwoKTsKfQoKDAog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+ClR3
aW5lIE5SSFlfbWF0Y2g8VHlwZT46Om1hdGNoQWxsT2ZPbmVDbGFzcyAoCiAgICBjb25zdCBDSEFS
ICAgICAgICAgICp3aGF0VHlwZQogICAgKQp7CiAgICBOUkhZX2J1bmNoIDxOUkhZX2NsYXNzVGhp
bmc+ICAgICpidW5jaF90aGluZ1B0cnM7CiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGk7CiAgICBUd2luZSAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dFR3aW5lOwoKICAg
ICAKICAgIGlmIChmYXN0QmluYXJ5T25seSkgewogICAgICAgICgoISggZmFsc2UgKSk/ICggVFhU
X0Fzc2VydENvbmQgKDAgLCAxICwgImZhbHNlIiwgImgvbnJoeV90ZW1wbGF0ZU1hdGNoLmMiLCAy
MjUzKSkgOiAwICkgOwogICAgICAgIHJldHVybiAiIjsKICAgIH0KCiAgICAgCgogICAgaWYgKHN0
cmNtcCAod2hhdFR5cGUsICJPYmplY3RzIikgPT0gMCkKICAgICAgICBidW5jaF90aGluZ1B0cnMg
PSBOUkhZX2ZpbmQ8TlJIWV9jbGFzc09iamVjdD4oIioiKS5GaW5kSXRlbUFzVGhpbmcoKTsKICAg
IGVsc2UgaWYgKHN0cmNtcCAod2hhdFR5cGUsICJDYW1lcmFzIikgPT0gMCkKICAgICAgICBidW5j
aF90aGluZ1B0cnMgPSBOUkhZX2ZpbmQ8TlJIWV9jbGFzc0NhbWVyYT4oIioiKS5GaW5kSXRlbUFz
VGhpbmcoKTsKICAgIGVsc2UgaWYgKHN0cmNtcCAod2hhdFR5cGUsICJMaWdodHMiKSA9PSAwKQog
ICAgICAgIGJ1bmNoX3RoaW5nUHRycyA9IE5SSFlfZmluZDxOUkhZX2NsYXNzTGlnaHQ+KCIqIiku
RmluZEl0ZW1Bc1RoaW5nKCk7CiAgICBlbHNlIGlmIChzdHJjbXAgKHdoYXRUeXBlLCAiTW9kZWxz
IikgPT0gMCkKICAgICAgICBidW5jaF90aGluZ1B0cnMgPSBOUkhZX2ZpbmQ8TlJIWV9jbGFzc01v
ZGVsPigiKiIpLkZpbmRJdGVtQXNUaGluZygpOwogICAgZWxzZSBpZiAoc3RyY21wICh3aGF0VHlw
ZSwgIkhvbWVzIikgPT0gMCkKICAgICAgICBidW5jaF90aGluZ1B0cnMgPSBOUkhZX2ZpbmQ8TlJI
WV9jbGFzc0hvbWU+KCIqIikuRmluZEl0ZW1Bc1RoaW5nKCk7CiAgICBlbHNlIGlmIChzdHJjbXAg
KHdoYXRUeXBlLCAiUm90b3MiKSA9PSAwKQogICAgICAgIGJ1bmNoX3RoaW5nUHRycyA9IE5SSFlf
ZmluZDxOUkhZX2NsYXNzUm90bz4oIioiKS5GaW5kSXRlbUFzVGhpbmcoKTsKICAgIGVsc2UgaWYg
KHN0cmNtcCAod2hhdFR5cGUsICJUZXhzIikgPT0gMCkKICAgICAgICBidW5jaF90aGluZ1B0cnMg
PSBOUkhZX2ZpbmQ8TlJIWV9jbGFzc1RleD4oIioiKS5GaW5kSXRlbUFzVGhpbmcoKTsKICAgIGVs
c2UgaWYgKHN0cmNtcCAod2hhdFR5cGUsICJNYXRlcmlhbHMiKSA9PSAwKQogICAgICAgIGJ1bmNo
X3RoaW5nUHRycyA9IE5SSFlfZmluZDxOUkhZX2NsYXNzTWF0ZXJpYWw+KCIqIikuRmluZEl0ZW1B
c1RoaW5nKCk7CiAgICBlbHNlIGlmIChzdHJjbXAgKHdoYXRUeXBlLCAiTWFwcyIpID09IDApCiAg
ICAgICAgYnVuY2hfdGhpbmdQdHJzID0gTlJIWV9maW5kPE5SSFlfY2xhc3NNYXA+KCIqIikuRmlu
ZEl0ZW1Bc1RoaW5nKCk7CiAgICBlbHNlIGlmIChzdHJjbXAgKHdoYXRUeXBlLCAiVXNlTWFwcyIp
ID09IDApCiAgICAgICAgYnVuY2hfdGhpbmdQdHJzID0gTlJIWV9maW5kPE5SSFlfY2xhc3NVc2VN
YXA+KCIqIikuRmluZEl0ZW1Bc1RoaW5nKCk7CiAgICBlbHNlIGlmIChzdHJjbXAgKHdoYXRUeXBl
LCAiU291bmRzIikgPT0gMCkKICAgICAgICBidW5jaF90aGluZ1B0cnMgPSBOUkhZX2ZpbmQ8TlJI
WV9jbGFzc1NvdW5kPigiKiIpLkZpbmRJdGVtQXNUaGluZygpOwogICAgZWxzZSBpZiAoc3RyY21w
ICh3aGF0VHlwZSwgIkR5bmFtaWNzcyIpID09IDApCiAgICAgICAgYnVuY2hfdGhpbmdQdHJzID0g
TlJIWV9maW5kPE5SSFlfY2xhc3NEeW5hbWljcz4oIioiKS5GaW5kSXRlbUFzVGhpbmcoKTsKICAg
IGVsc2UgaWYgKHN0cmNtcCAod2hhdFR5cGUsICJGb3JjZSIpID09IDApCiAgICAgICAgYnVuY2hf
dGhpbmdQdHJzID0gTlJIWV9maW5kPE5SSFlfY2xhc3NGb3JjZT4oIioiKS5GaW5kSXRlbUFzVGhp
bmcoKTsKICAgIGVsc2UgaWYgKHN0cmNtcCAod2hhdFR5cGUsICJHZW5lcmF0b3IiKSA9PSAwKQog
ICAgICAgIGJ1bmNoX3RoaW5nUHRycyA9IE5SSFlfZmluZDxOUkhZX2NsYXNzR2VuZXJhdG9yPigi
KiIpLkZpbmRJdGVtQXNUaGluZygpOwogICAgZWxzZSBpZiAoc3RyY21wICh3aGF0VHlwZSwgIkNv
bGxpc2lvbiIpID09IDApCiAgICAgICAgYnVuY2hfdGhpbmdQdHJzID0gTlJIWV9maW5kPE5SSFlf
Y2xhc3NDb2xsaXNpb24+KCIqIikuRmluZEl0ZW1Bc1RoaW5nKCk7CiAgICBlbHNlIGlmIChzdHJj
bXAgKHdoYXRUeXBlLCAiSW5reSIpID09IDApCiAgICAgICAgYnVuY2hfdGhpbmdQdHJzID0gTlJI
WV9maW5kPE5SSFlfY2xhc3NJbmt5PigiKiIpLkZpbmRJdGVtQXNUaGluZygpOwogICAgZWxzZSBp
ZiAoc3RyY21wICh3aGF0VHlwZSwgIlNjYWZmb2xkIikgPT0gMCkKICAgICAgICBidW5jaF90aGlu
Z1B0cnMgPSBOUkhZX2ZpbmQ8TlJIWV9jbGFzc1NjYWZmb2xkPigiKiIpLkZpbmRJdGVtQXNUaGlu
ZygpOwogICAgZWxzZSBpZiAoc3RyY21wICh3aGF0VHlwZSwgIlRyYWNrcyIpID09IDApCiAgICAg
ICAgYnVuY2hfdGhpbmdQdHJzID0gTlJIWV9maW5kPE5SSFlfY2xhc3NUcmFjaz4oIioiKS5GaW5k
SXRlbUFzVGhpbmcoKTsKICAgIGVsc2UgaWYgKHN0cmNtcCAod2hhdFR5cGUsICJBcHBhcml0aW9u
cyIpID09IDApCiAgICAgICAgYnVuY2hfdGhpbmdQdHJzID0gTlJIWV9maW5kPE5SSFlfY2xhc3NB
cHBhcml0aW9uPigiKiIpLkZpbmRJdGVtQXNUaGluZygpOwogICAgZWxzZSBpZiAoc3RyY21wICh3
aGF0VHlwZSwgIlJvb3RzIikgPT0gMCkKICAgICAgICBidW5jaF90aGluZ1B0cnMgPSBOUkhZX2Zp
bmQ8TlJIWV9jbGFzc1Jvb3Q+KCIqIikuRmluZEl0ZW1Bc1RoaW5nKCk7CiAgICBlbHNlIGlmIChz
dHJjbXAgKHdoYXRUeXBlLCAiS2xpc3RzIikgPT0gMCkKICAgICAgICBidW5jaF90aGluZ1B0cnMg
PSBOUkhZX2ZpbmQ8TlJIWV9jbGFzc0tsaXN0PigiKiIpLkZpbmRJdGVtQXNUaGluZygpOwogICAg
ZWxzZSBpZiAoc3RyY21wICh3aGF0VHlwZSwgIkZ1cnMiKSA9PSAwKQogICAgICAgIGJ1bmNoX3Ro
aW5nUHRycyA9IE5SSFlfZmluZDxOUkhZX2NsYXNzRnVyPigiKiIpLkZpbmRJdGVtQXNUaGluZygp
OwogICAgZWxzZSBpZiAoc3RyY21wICh3aGF0VHlwZSwgIkxheWVycyIpID09IDApCiAgICAgICAg
YnVuY2hfdGhpbmdQdHJzID0gTlJIWV9maW5kPE5SSFlfY2xhc3NMYXllcj4oIioiKS5GaW5kSXRl
bUFzVGhpbmcoKTsKICAgIGVsc2UgaWYgKHN0cmNtcCAod2hhdFR5cGUsICJNdXNjbGVzIikgPT0g
MCkKICAgICAgICBidW5jaF90aGluZ1B0cnMgPSBOUkhZX2ZpbmQ8TlJIWV9jbGFzc011c2NsZT4o
IioiKS5GaW5kSXRlbUFzVGhpbmcoKTsKICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgIAogICAg
ICAgIHJldHVybiAoIiIpOwogICAgICAgIH0KICAgIAogICAgIAogICAgaWYgKChidW5jaF90aGlu
Z1B0cnMgPT0gX19udWxsICkgfHwgKGJ1bmNoX3RoaW5nUHRycy0+TnVtYmVyUHRycyA9PSAwKSkK
ICAgICAgICB7CiAgICAgICAgcmV0dXJuICgiIik7CiAgICAgICAgfQoKICAgICAKICAgIG91dFR3
aW5lID0gIiI7CiAgICBmb3IgKGkgPSAwOyBpIDwgYnVuY2hfdGhpbmdQdHJzLT5OdW1iZXJQdHJz
OyBpKyspCiAgICAgICAgewogICAgICAgIGlmIChpICE9IDApCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgb3V0VHdpbmUgKz0gIiwiOwogICAgICAgICAgICB9CiAgICAgICAgb3V0VHdpbmUgKz0g
KGJ1bmNoX3RoaW5nUHRycy0+UHRyc1tpXSktPk5hbWU7CiAgICAgICAgfQoKICAgICAKCiAgICBy
ZXR1cm4gKG91dFR3aW5lKTsKfQoKDAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnRl
bXBsYXRlIDxjbGFzcyBUeXBlPgpUd2luZSBOUkhZX21hdGNoPFR5cGU+OjptYXRjaEN1cnJlbnRP
YmplY3RzICgKICAgIHZvaWQgCiAgICApCnsKICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpLCBqOwogICAgTlJIWV9jbGFzc0NoYW5uZWwgICAgICAgICAgICAgICAg
ICAgICAgICpjaGFuUHRyOwogICAgTlJIWV9jbGFzc1RoaW5nICAgICAgICAgICAgICAgICAgICAg
ICAgICp0aGluZ1B0cjsKICAgIFR3aW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuZXdUd2luZTsKCiAgICAgCiAgICBpZiAoZmFzdEJpbmFyeU9ubHkpIHsKICAgICAgICAoKCEo
IGZhbHNlICkpPyAoIFRYVF9Bc3NlcnRDb25kICgwICwgMSAsICJmYWxzZSIsICJoL25yaHlfdGVt
cGxhdGVNYXRjaC5jIiwgMjM3OSkpIDogMCApIDsKICAgICAgICByZXR1cm4gIiI7CiAgICB9Cgog
ICAgIAogICAgTGlzdCA8TlJIWV9jbGFzc0NoYW5uZWwgKj4gTGlzdF9PX0N1cnJlbnQgPSBOUkhZ
X0dldEN1cnJlbnRDaGFubmVscyAoKTsKCiAgICAgCiAgICBmb3IgKGkgPSAwOyBpIDwgTGlzdF9P
X0N1cnJlbnQuc2l6ZSgpOyBpKyspCiAgICAgICAgewogICAgICAgICAKCiAgICAgICAgY2hhblB0
ciA9IExpc3RfT19DdXJyZW50W2ldOwoKICAgICAgICAgCiAgICAgICAgdGhpbmdQdHIgPSAoTlJI
WV9jbGFzc1RoaW5nKiljaGFuUHRyLT5HZXRCYWNrUmVmKCk7CgogICAgICAgICAKICAgICAgICBm
b3IgKGogPSAwOyBqIDwgaTsgaisrKQogICAgICAgICAgICB7CiAgICAgICAgICAgIGNoYW5QdHIg
PSBMaXN0X09fQ3VycmVudFtqXTsKCiAgICAgICAgICAgIGlmICh0aGluZ1B0ciA9PSAoTlJIWV9j
bGFzc1RoaW5nKiljaGFuUHRyLT5HZXRCYWNrUmVmKCkpCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAg
IGlmIChqICE9IGkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgIH0KCiAgICAgICAgIAogICAgICAgIGlmIChuZXdUd2luZSAhPSAiIikKICAgICAgICAgICAg
ewogICAgICAgICAgICBuZXdUd2luZSArPSAiLCI7CiAgICAgICAgICAgIH0KICAgICAgICBuZXdU
d2luZSArPSB0aGluZ1B0ci0+TmFtZTsKICAgICAgICB9CgogICAgcmV0dXJuIChuZXdUd2luZSk7
Cn0KCgwKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBU
eXBlPgpUd2luZSBOUkhZX21hdGNoPFR5cGU+OjptYXRjaEN1cnJlbnRDaGFubmVscyAoCiAgICB2
b2lkIAogICAgKQp7CiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aTsKICAgIE5SSFlfY2xhc3NDaGFubmVsICAgICAgICAgICAgICAgICAgICAgICAqY2hhblB0ciwg
KndvcmtpbmdDaGFuUHRyOwogICAgTlJIWV9jbGFzc1RoaW5nICAgICAgICAgICAgICAgICAgICAg
ICAgICp0aGluZ1B0ciwgKndvcmtpbmdUaGluZ1B0cjsKICAgIFR3aW5lICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXdUd2luZSwgd29ya2luZ0NoYW5Ud2luZTsKCiAgICAgCiAg
ICBpZiAoZmFzdEJpbmFyeU9ubHkpIHsKICAgICAgICAoKCEoIGZhbHNlICkpPyAoIFRYVF9Bc3Nl
cnRDb25kICgwICwgMSAsICJmYWxzZSIsICJoL25yaHlfdGVtcGxhdGVNYXRjaC5jIiwgMjQ2OCkp
IDogMCApIDsKICAgICAgICByZXR1cm4gIiI7CiAgICB9CgogICAgIAogICAgTGlzdCA8TlJIWV9j
bGFzc0NoYW5uZWwgKj4gTGlzdF9PX0N1cnJlbnQgPSBOUkhZX0dldEN1cnJlbnRDaGFubmVscyAo
KTsKCiAgICAgCiAgICBpZiAoTGlzdF9PX0N1cnJlbnQuc2l6ZSgpID09IDApCiAgICAgICAgewog
ICAgICAgIHJldHVybiAobmV3VHdpbmUpOwogICAgICAgIH0KCiAgICAgCiAgICB3b3JraW5nVGhp
bmdQdHIgPSBfX251bGwgOwogICAgd29ya2luZ0NoYW5QdHIgPSBfX251bGwgOwogICAgd29ya2lu
Z0NoYW5Ud2luZSA9ICIiOwoKICAgICAKICAgIGZvciAoaSA9IDA7IGkgPCBMaXN0X09fQ3VycmVu
dC5zaXplKCk7IGkrKykKICAgICAgICB7CiAgICAgICAgIAoKICAgICAgICBjaGFuUHRyID0gTGlz
dF9PX0N1cnJlbnRbaV07CiAgICAgICAgdGhpbmdQdHIgPSBjaGFuUHRyLT5HZXRCYWNrUmVmKCk7
CgogICAgICAgICAKCgogICAgICAgIGlmICgod29ya2luZ1RoaW5nUHRyID09IF9fbnVsbCApICYm
ICh3b3JraW5nQ2hhblB0ciA9PSBfX251bGwgKSkKICAgICAgICAgICAgewogICAgICAgICAgICB3
b3JraW5nVGhpbmdQdHIgPSB0aGluZ1B0cjsKICAgICAgICAgICAgd29ya2luZ0NoYW5QdHIgPSBj
aGFuUHRyOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgCgog
ICAgICAgIGlmICh3b3JraW5nVGhpbmdQdHIgPT0gdGhpbmdQdHIpCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgIAoKCiAgICAgICAgICAgIGlmICh3b3JraW5nQ2hhblR3aW5lID09ICIiKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgd29ya2luZ0NoYW5Ud2luZSA9IHdvcmtpbmdU
aGluZ1B0ci0+TmFtZSArICIvWyIgKwogICAgICAgICAgICAgICAgICAgIHdvcmtpbmdDaGFuUHRy
LT5HZXRUeXBlTmFtZUFuZEluc3RhbmNlKCkgKyAiLCIgKwogICAgICAgICAgICAgICAgICAgIGNo
YW5QdHItPkdldFR5cGVOYW1lQW5kSW5zdGFuY2UoKTsKCiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICB3b3JraW5nQ2hhblB0ciA9IF9fbnVsbCA7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHdvcmtpbmdD
aGFuVHdpbmUgKz0gIiwiOwogICAgICAgICAgICAgICAgd29ya2luZ0NoYW5Ud2luZSArPSBjaGFu
UHRyLT5HZXRUeXBlTmFtZUFuZEluc3RhbmNlKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAKCgog
ICAgICAgIGlmICh3b3JraW5nQ2hhblB0cikKICAgICAgICAgICAgewogICAgICAgICAgICBpZiAo
bmV3VHdpbmUgIT0gIiIpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuZXdUd2lu
ZSArPSAiLCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIG5ld1R3aW5lICs9IHdvcmtp
bmdDaGFuUHRyLT5HZXRGdWxsTmFtZSAoKTsKICAgICAgICAgICAgfQogICAgICAgIGVsc2UKICAg
ICAgICAgICAgewogICAgICAgICAgICBpZiAobmV3VHdpbmUgIT0gIiIpCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICBuZXdUd2luZSArPSAiLCI7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIG5ld1R3aW5lICs9IHdvcmtpbmdDaGFuVHdpbmU7CiAgICAgICAgICAgIG5ld1R3
aW5lICs9ICJdIjsKICAgICAgICAgICAgfQoKICAgICAgICAgCgogICAgICAgIHdvcmtpbmdUaGlu
Z1B0ciA9IHRoaW5nUHRyOwogICAgICAgIHdvcmtpbmdDaGFuUHRyID0gY2hhblB0cjsKICAgICAg
ICB3b3JraW5nQ2hhblR3aW5lID0gIiI7CiAgICAgICAgfQoKICAgICAKICAgIGlmICh3b3JraW5n
Q2hhblB0cikKICAgICAgICB7CiAgICAgICAgaWYgKG5ld1R3aW5lICE9ICIiKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgIG5ld1R3aW5lICs9ICIsIjsKICAgICAgICAgICAgfQogICAgICAgIG5l
d1R3aW5lICs9IHdvcmtpbmdDaGFuUHRyLT5HZXRGdWxsTmFtZSAoKTsKICAgICAgICB9CiAgICBl
bHNlIGlmICh3b3JraW5nQ2hhblR3aW5lKQogICAgICAgIHsKICAgICAgICBpZiAobmV3VHdpbmUg
IT0gIiIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgbmV3VHdpbmUgKz0gIiwiOwogICAgICAg
ICAgICB9CiAgICAgICAgbmV3VHdpbmUgKz0gd29ya2luZ0NoYW5Ud2luZTsKICAgICAgICBuZXdU
d2luZSArPSAiXSI7CiAgICAgICAgfQogICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgKCgh
KCBmYWxzZSApKT8gKCBUWFRfQXNzZXJ0Q29uZCAoMCAsIDEgLCAiZmFsc2UiLCAiaC9ucmh5X3Rl
bXBsYXRlTWF0Y2guYyIsIDI1NzgpKSA6IDAgKSA7CiAgICAgICAgfQoKICAgIHJldHVybiAobmV3
VHdpbmUpOwp9CiMgMTM5ICJoL25yaHlfdGVtcGxhdGVNYXRjaC5oIiAyCgoKCgojIDIwICJoL25y
aHlfdGVtcGxhdGVGaW5kLmgiIDIKCgoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+CmNsYXNzIE5SSFlf
ZmluZCB7CiAgICBjb25zdCBjaGFyICpfbmFtZTsKICAgIGJvb2wgX2NyZWF0ZSwgX3JlY3Vyc2Us
IF9wYXJlbnQ7CiAgICBOUkhZX2J1bmNoPFR5cGU+ICpmaW5kSXRlbSgpOyAgCiAgICBOUkhZX2J1
bmNoPFR5cGU+ICpmaW5kSXRlbUZvclJlYWQoKTsgIApwdWJsaWM6CiAgICBOUkhZX2ZpbmQoY29u
c3QgY2hhciAqbmFtZSkgOgogICAgICAgIF9uYW1lKG5hbWUpLAogICAgICAgIF9jcmVhdGUoZmFs
c2UpLCBfcmVjdXJzZShmYWxzZSksIF9wYXJlbnQoZmFsc2UpIHt9CiAgICBOUkhZX2J1bmNoPFR5
cGU+ICpGaW5kSXRlbShib29sIGNyZWF0ZSA9IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCByZWN1cnNlID0gZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHBhcmVudCA9IGZhbHNlKTsKICAgIE5SSFlfYnVuY2g8VHlwZT4gKkZpbmRJdGVt
UmVjdXJzaXZlKCkgewogICAgICAgIHJldHVybiBGaW5kSXRlbShmYWxzZSwgdHJ1ZSwgZmFsc2Up
OyB9CiAgICBOUkhZX2J1bmNoPFR5cGU+ICpGaW5kSXRlbVBhcmVudCgpIHsKICAgICAgICByZXR1
cm4gRmluZEl0ZW0oZmFsc2UsIGZhbHNlLCB0cnVlKTsgfQogICAgTlJIWV9idW5jaDxUeXBlPiAq
RmluZEl0ZW1SZWN1cnNpdmVBbmRQYXJlbnQoKSB7CiAgICAgICAgcmV0dXJuIEZpbmRJdGVtKGZh
bHNlLCB0cnVlLCB0cnVlKTsgfQogICAgTlJIWV9idW5jaDxUeXBlPiAqRmluZEl0ZW1Gb3JDcmVh
dGlvbigpIHsKICAgICAgICByZXR1cm4gRmluZEl0ZW0odHJ1ZSwgZmFsc2UsIGZhbHNlKTsgfQog
ICAgTlJIWV9idW5jaDxOUkhZX2NsYXNzVGhpbmc+ICpGaW5kSXRlbUFzVGhpbmcgKAogICAgICAg
IGJvb2wgY3JlYXRlID0gZmFsc2UsCiAgICAgICAgYm9vbCByZWN1cnNlID0gZmFsc2UsCiAgICAg
ICAgYm9vbCBwYXJlbnQgPSBmYWxzZSk7CiAgICBUeXBlICpGYXN0RmluZCgpOwogICAgc3RhdGlj
IE5SSFlfY2xhc3NUaGluZyAqRmluZFRoaW5nKGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBjcmVhdGUpOwp9OwoKdGVtcGxh
dGUgPGNsYXNzIFR5cGU+Ck5SSFlfYnVuY2g8VHlwZT4gKk5SSFlfZmluZDxUeXBlPjo6RmluZEl0
ZW0oCiAgICBib29sIGNyZWF0ZSwKICAgIGJvb2wgcmVjdXJzZSwKICAgIGJvb2wgcGFyZW50CiAg
ICApCnsKICAgIF9jcmVhdGUgPSBjcmVhdGU7CiAgICBfcmVjdXJzZSA9IHJlY3Vyc2U7CiAgICBf
cGFyZW50ID0gcGFyZW50OwogICAgcmV0dXJuIGZpbmRJdGVtKCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBUeXBlPgpOUkhZX2J1bmNoPE5SSFlfY2xhc3NUaGluZz4gKk5SSFlfZmluZDxUeXBlPjo6Rmlu
ZEl0ZW1Bc1RoaW5nICgKICAgIGJvb2wgY3JlYXRlLAogICAgYm9vbCByZWN1cnNlLAogICAgYm9v
bCBwYXJlbnQKICAgICkKewogICAgTlJIWV9idW5jaDxUeXBlPiAqYnVuY2hQdHJzID0gRmluZEl0
ZW0oY3JlYXRlLCByZWN1cnNlLCBwYXJlbnQpOwoKICAgICAKICAgIGlmIChidW5jaFB0cnMgPT0g
X19udWxsICkgcmV0dXJuIF9fbnVsbCA7CgogICAgTlJIWV9idW5jaDxOUkhZX2NsYXNzVGhpbmc+
ICpidW5jaF90aGluZ1B0cnMgPQogICAgICAgIGJ1bmNoUHRycy0+Q29udmVydFRvVGhpbmcoKTsK
ICAgIGRlbGV0ZSBidW5jaFB0cnM7CiAgICByZXR1cm4gYnVuY2hfdGhpbmdQdHJzOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgVHlwZT4gVHlwZSAqTlJIWV9maW5kPFR5cGU+OjpGYXN0RmluZCgpCnsKICAg
IHN0YXRpYyBpbnQgbWlkcG9pbnQgPSAwOwogICAgdmVjdG9yPFR5cGUgKj4gKmFsbEl0ZW1zOwog
ICAgTlJIWV9sb2FkSXRlbUxpc3RBZGRyZXNzKGFsbEl0ZW1zKTsKCiAgICAgCiAgICBpZiAoYWxs
SXRlbXMtPmVtcHR5KCkpIHJldHVybiBfX251bGwgOwoKICAgICAKICAgIGludCBsb3dlciA9IDAs
IHVwcGVyID0gYWxsSXRlbXMtPnNpemUoKSAtIDE7CiAgICBpZiAobWlkcG9pbnQgPCAwIHx8IG1p
ZHBvaW50ID4gdXBwZXIpIHsKICAgICAgICBtaWRwb2ludCA9IChsb3dlciArIHVwcGVyKSAvIDI7
CiAgICB9CgogICAgIAogICAgd2hpbGUgKHVwcGVyID49IGxvd2VyKSB7CiAgICAgICAgVHlwZSAq
aXRlbSA9ICgqYWxsSXRlbXMpW21pZHBvaW50XTsKICAgICAgICBpbnQgY29tcGFyZSA9IHN0cmNt
cChfbmFtZSwgaXRlbS0+TmFtZSk7CiAgICAgICAgaWYgKGNvbXBhcmUgPT0gMCkgcmV0dXJuIGl0
ZW07CiAgICAgICAgaWYgKGNvbXBhcmUgPCAwKSB7CiAgICAgICAgICAgIHVwcGVyID0gbWlkcG9p
bnQgLSAxOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGxvd2VyID0gbWlkcG9pbnQgKyAx
OwogICAgICAgIH0KICAgICAgICBtaWRwb2ludCA9IChsb3dlciArIHVwcGVyKSAvIDI7CiAgICB9
CgogICAgcmV0dXJuIF9fbnVsbCA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgpOUkhZX2J1bmNo
PFR5cGU+ICpOUkhZX2ZpbmQ8VHlwZT46OmZpbmRJdGVtKCkKewogICAgIAogICAgaWYgKE5SSFlf
Z2V0VW5leHBhbmRlZEZpbmQoKSkgewogICAgICAgIHJldHVybiBmaW5kSXRlbUZvclJlYWQoKTsK
ICAgIH0KCiAgICB2ZWN0b3I8VHlwZSAqPiAqYWxsSXRlbXM7CiAgICBOUkhZX2xvYWRJdGVtTGlz
dEFkZHJlc3MoYWxsSXRlbXMpOwoKICAgICAKICAgIGlmIChfY3JlYXRlID09IGZhbHNlICYmIGFs
bEl0ZW1zLT5lbXB0eSgpKQogICAgICAgIHJldHVybiBfX251bGwgOwoKICAgIE5SSFlfbWF0Y2g8
VHlwZT4gbWF0Y2goYWxsSXRlbXMtPmJlZ2luKCksIGFsbEl0ZW1zLT5lbmQoKSk7CiAgICBtYXRj
aC5TZXRGbGFncyhfY3JlYXRlLCBfcmVjdXJzZSwgX3BhcmVudCk7CiAgICByZXR1cm4gbWF0Y2gu
TWF0Y2hlbShfbmFtZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgpOUkhZX2J1bmNoPFR5cGU+
ICpOUkhZX2ZpbmQ8VHlwZT46OmZpbmRJdGVtRm9yUmVhZCgpCnsKICAgICAKICAgIGNoYXIgKnNs
YXNoID0gc3RyY2hyKF9uYW1lLCAnLycpOwogICAgaW50IGxlbmd0aCA9IChzbGFzaCA/IHNsYXNo
IC0gX25hbWUgOiBzdHJsZW4oX25hbWUpKTsKICAgIGNoYXIgKnRoaW5nID0gbmV3IGNoYXJbbGVu
Z3RoICsgMV07CiAgICBzdHJuY3B5KHRoaW5nLCBfbmFtZSwgbGVuZ3RoKTsKICAgIHRoaW5nW2xl
bmd0aF0gPSAnXDAnOwogICAgTlJIWV9maW5kPFR5cGU+IGZpbmRlcih0aGluZyk7CiAgICBUeXBl
ICppdGVtID0gZmluZGVyLkZhc3RGaW5kKCk7CiAgICBkZWxldGUgW10gdGhpbmc7CgogICAgIAog
ICAgIAogICAgTlJIWV9idW5jaDxUeXBlPiAqYnVuY2hfaXRlbVB0cnMgPSBuZXcgTlJIWV9idW5j
aDxUeXBlPihfbmFtZSk7CiAgICBpZiAoaXRlbSkgewogICAgICAgIGlmIChzbGFzaCkgewogICAg
ICAgICAgICBidW5jaF9pdGVtUHRycy0+QXBwZW5kUHRyKGl0ZW0sIHNsYXNoICsgMSk7CiAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgYnVuY2hfaXRlbVB0cnMtPkFwcGVuZFB0cihpdGVtKTsK
ICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gYnVuY2hfaXRlbVB0cnM7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBUeXBlPiBOUkhZX2NsYXNzVGhpbmcgKk5SSFlfZmluZDxUeXBlPjo6RmluZFRoaW5nKAog
ICAgY29uc3QgY2hhciAqbmFtZSwKICAgIGNvbnN0IGJvb2wgY3JlYXRlCiAgICApCnsKICAgIE5S
SFlfZmluZDxUeXBlPiBmaW5kZXIobmFtZSk7CiAgICBOUkhZX2J1bmNoPFR5cGU+ICpidW5jaCA9
IGZpbmRlci5GaW5kSXRlbShjcmVhdGUsIGZhbHNlLCBmYWxzZSk7CiAgICBOUkhZX2NsYXNzVGhp
bmcgKnRoaW5nID0gX19udWxsIDsKICAgIGlmIChidW5jaCAhPSBfX251bGwgKSB7CiAgICAgICAg
c3dpdGNoKGJ1bmNoLT5OdW1iZXJQdHJzKSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICB0aGluZyA9
IGJ1bmNoLT5QdHJzWzBdOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAgICAoKCEoIDAgICkpPyAoIFRYVF9Bc3NlcnRDb25kICgwICwgMSAs
ICJGQUxTRSIsICJoL25yaHlfdGVtcGxhdGVGaW5kLmgiLCAxNzcpKSA6IDAgKSA7CiAgICAgICAg
ICAgICAgICBidW5jaC0+UHJpbnRTZWxmKHN0ZGVyciwgMTIpOwogICAgICAgIH0KICAgIH0KICAg
IGRlbGV0ZSBidW5jaDsKICAgIHJldHVybiB0aGluZzsKfQoKCiMgNDEgIm5yaHkvTlJIWV9BY2Nl
c3MuYyIgMgoKCiMgMSAiaC9OUkhZX0dsb2JhbHMuaCIgMQoKCgoKCiAKZW51bSB7CiAgICBOUkhZ
X1ZJRVdfRElTUExBWV9BVU5BVFVSQUwsCiAgICBOUkhZX1ZJRVdfRElTUExBWV9QT0lOVCwKICAg
IE5SSFlfVklFV19ESVNQTEFZX0xJTkUsCiAgICBOUkhZX1ZJRVdfRElTUExBWV9PVVRMSU5FLAog
ICAgTlJIWV9WSUVXX0RJU1BMQVlfU09MSUQsCiAgICBOUkhZX1ZJRVdfRElTUExBWV9IT0xMT1cs
CiAgICBOUkhZX1ZJRVdfRElTUExBWV9XSVJFLAogICAgTlJIWV9WSUVXX0RJU1BMQVlfRU5ECn07
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCnN0cnVjdCBOUkhZX0Vycm9y
IHsKICAgIFR3aW5lIF9lcnJvcjsKICAgIHZvaWQgKl9kYXRhOwogICAgTlJIWV9FcnJvcigpIDog
X2RhdGEoX19udWxsICkge30KICAgIE5SSFlfRXJyb3IoY29uc3QgVHdpbmUgJmVycm9yLCB2b2lk
ICpkYXRhKSB7CiAgICAgICAgX2Vycm9yID0gZXJyb3I7CiAgICAgICAgX2RhdGEgPSBkYXRhOwog
ICAgfQp9OwoKY2xhc3MgTlJIWV9FcnJvcnMgewogICAgTGlzdDxOUkhZX0Vycm9yPiAqX2Vycm9y
czsKICAgIExpc3Q8TlJIWV9FcnJvcj4gKl9vbGRFcnJvcnM7CnB1YmxpYzoKICAgIE5SSFlfRXJy
b3JzKCkgOiBfZXJyb3JzKF9fbnVsbCApLCBfb2xkRXJyb3JzKF9fbnVsbCApIHt9CiAgICB+TlJI
WV9FcnJvcnMoKSB7IGRlbGV0ZSBfZXJyb3JzOyBkZWxldGUgX29sZEVycm9yczsgfQogICAgdm9p
ZCBQdXNoKGNvbnN0IFR3aW5lICZlcnJvciwgdm9pZCAqZGF0YSkgewogICAgICAgIGlmICghX2Vy
cm9ycykgX2Vycm9ycyA9IG5ldyBMaXN0PE5SSFlfRXJyb3I+OwogICAgICAgIF9lcnJvcnMtPmFw
cGVuZChOUkhZX0Vycm9yKGVycm9yLCBkYXRhKSk7CiAgICB9CiAgICBjb25zdCBMaXN0PE5SSFlf
RXJyb3I+ICpHZXQoKSB7IHJldHVybiBfZXJyb3JzOyB9CiAgICBjb25zdCBMaXN0PE5SSFlfRXJy
b3I+ICpGbHVzaCgpOwp9OwoKZW51bSBOUkhZX21vZGVsUmVzIHsKICAgIHVzZXIgICA9ICgxPDww
KSwKICAgIHNpbXBsZSA9ICgxPDwxKSwKICAgIGhlcm8gICA9ICgxPDwyKQp9OwoKZW51bSBOUkhZ
X3dhaXRTdGF0ZSB7CiAgICBQUk9HUkVTU0lORywKICAgIEJVU1ksCiAgICBOT1RCVVNZLAogICAg
QlVTWV9OT1VQREFURVMsCiAgICBOT1RCVVNZX1VQREFURVNPSwp9OwoKdm9pZCBOUkhZX0NhbGxJ
bnRlcmZhY2VCdXN5RnVuY3Rpb24oIGludCwgY29uc3QgY2hhciAqID0gX19udWxsICApOwoKY2xh
c3MgTlJIWV9HbG9iYWxzIHsKICAgIHN0YXRpYyBCT09MRUFOIF9ub0dlb21Mb2FkOwogICAgc3Rh
dGljIE5SSFlfbW9kZWxSZXMgX21vZGVsUmVzOwpwdWJsaWM6CiAgICBzdGF0aWMgdm9pZCBTZXRO
b0dlb21Mb2FkKEJPT0xFQU4gc3RhdHVzKSB7IF9ub0dlb21Mb2FkID0gc3RhdHVzOyB9CiAgICBz
dGF0aWMgQk9PTEVBTiBHZXROb0dlb21Mb2FkKCkgeyByZXR1cm4gX25vR2VvbUxvYWQ7IH0KICAg
IHN0YXRpYyBOUkhZX0Vycm9ycyBDaGFuRXZhbEVycm9yOwogICAgc3RhdGljIHZvaWQgU2V0UmVz
KE5SSFlfbW9kZWxSZXMgbW9kZWxSZXMpIHsgX21vZGVsUmVzID0gbW9kZWxSZXM7IH0KICAgIHN0
YXRpYyBOUkhZX21vZGVsUmVzIEdldFJlcygpIHsgcmV0dXJuIF9tb2RlbFJlczsgfQp9OwoKY2xh
c3MgTlJIWV9QYXJzZXJTdGF0ZSB7CiAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBfZXZhbHVhdGU7
CiAgICBzdGF0aWMgaW50IF93aWxkQ2FyZEluZGV4OwogICAgc3RhdGljIGludCBfd2lsZENhcmRU
b3RhbDsKICAgIHN0YXRpYyBib29sIF9lcnJvck11bHRpQ2hhbnM7CnB1YmxpYzoKICAgIHN0YXRp
YyB2b2lkIHN0YXJ0V2lsZFBhcnNlKGludCBpbmRleCwgaW50IHRvdGFsKTsKICAgIHN0YXRpYyB2
b2lkIGVuZFdpbGRQYXJzZSgpOwogICAgc3RhdGljIGludCB3aWxkQ2FyZEluZGV4KCkgeyByZXR1
cm4gX3dpbGRDYXJkSW5kZXg7IH0KICAgIHN0YXRpYyBpbnQgd2lsZENhcmRUb3RhbCgpIHsgcmV0
dXJuIF93aWxkQ2FyZFRvdGFsOyB9CiAgICBzdGF0aWMgYm9vbCBlcnJvck11bHRpQ2hhbnMoKSB7
IHJldHVybiBfZXJyb3JNdWx0aUNoYW5zOyB9CiAgICBzdGF0aWMgdm9pZCBzZXRFcnJvck11bHRp
Q2hhbnMoKSB7IF9lcnJvck11bHRpQ2hhbnMgPSB0cnVlOyB9CiAgICBzdGF0aWMgYm9vbCBldmFs
dWF0ZSgpOwogICAgc3RhdGljIHZvaWQgcHVzaEV2YWx1YXRlKCk7CiAgICBzdGF0aWMgdm9pZCBw
b3BFdmFsdWF0ZSgpOwp9OwoKCiMgNDMgIm5yaHkvTlJIWV9BY2Nlc3MuYyIgMgoKCgpleHRlcm4g
UGx1Z2luRW50cnk8WEZPUk1fQmFzZT4gWEZPUk1fRm9jYWw7CmV4dGVybiBQbHVnaW5FbnRyeTxY
Rk9STV9CYXNlPiBYRk9STV9BeGlhbDsKZXh0ZXJuIFBsdWdpbkVudHJ5PFhGT1JNX0Jhc2U+IFhG
T1JNX0NvbnZlcmdlOwpleHRlcm4gUGx1Z2luRW50cnk8WEZPUk1fQmFzZT4gWEZPUk1fSGl0Owpl
eHRlcm4gUGx1Z2luRW50cnk8WEZPUk1fQmFzZT4gWEZPUk1fRm9jdXNNaW47CmV4dGVybiBQbHVn
aW5FbnRyeTxYRk9STV9CYXNlPiBYRk9STV9Gb2N1c01heDsKZXh0ZXJuIFBsdWdpbkVudHJ5PFhG
T1JNX0Jhc2U+IFhGT1JNX0F0dGVuU3RhcnQ7CmV4dGVybiBQbHVnaW5FbnRyeTxYRk9STV9CYXNl
PiBYRk9STV9BdHRlbkVuZDsKZXh0ZXJuIFBsdWdpbkVudHJ5PFhGT1JNX0Jhc2U+IFhGT1JNX0F0
dGVuRXhwOwpleHRlcm4gUGx1Z2luRW50cnk8WEZPUk1fQmFzZT4gWEZPUk1fRm9jdXNFeHA7CmV4
dGVybiBQbHVnaW5FbnRyeTxYRk9STV9CYXNlPiBYRk9STV9GaWxlOwpleHRlcm4gUGx1Z2luRW50
cnk8WEZPUk1fQmFzZT4gWEZPUk1feE9yaWdpbjsKZXh0ZXJuIFBsdWdpbkVudHJ5PFhGT1JNX0Jh
c2U+IFhGT1JNX3lPcmlnaW47CmV4dGVybiBQbHVnaW5FbnRyeTxYRk9STV9CYXNlPiBYRk9STV9v
cmlnV2lkdGg7CmV4dGVybiBQbHVnaW5FbnRyeTxYRk9STV9CYXNlPiBYRk9STV9vcmlnSGVpZ2h0
OwpleHRlcm4gUGx1Z2luRW50cnk8WEZPUk1fQmFzZT4gWEZPUk1fS2FSZWQ7CmV4dGVybiBQbHVn
aW5FbnRyeTxYRk9STV9CYXNlPiBYRk9STV9LYUdyZWVuOwpleHRlcm4gUGx1Z2luRW50cnk8WEZP
Uk1fQmFzZT4gWEZPUk1fS2FCbHVlOwpleHRlcm4gUGx1Z2luRW50cnk8WEZPUk1fQmFzZT4gWEZP
Uk1fS2FJbnRlbnM7CmV4dGVybiBQbHVnaW5FbnRyeTxYRk9STV9CYXNlPiBYRk9STV9LZFJlZDsK
ZXh0ZXJuIFBsdWdpbkVudHJ5PFhGT1JNX0Jhc2U+IFhGT1JNX0tkR3JlZW47CmV4dGVybiBQbHVn
aW5FbnRyeTxYRk9STV9CYXNlPiBYRk9STV9LZEJsdWU7CmV4dGVybiBQbHVnaW5FbnRyeTxYRk9S
TV9CYXNlPiBYRk9STV9LZEludGVuczsKZXh0ZXJuIFBsdWdpbkVudHJ5PFhGT1JNX0Jhc2U+IFhG
T1JNX0tzUmVkOwpleHRlcm4gUGx1Z2luRW50cnk8WEZPUk1fQmFzZT4gWEZPUk1fS3NHcmVlbjsK
ZXh0ZXJuIFBsdWdpbkVudHJ5PFhGT1JNX0Jhc2U+IFhGT1JNX0tzQmx1ZTsKZXh0ZXJuIFBsdWdp
bkVudHJ5PFhGT1JNX0Jhc2U+IFhGT1JNX0tzSW50ZW5zOwpleHRlcm4gUGx1Z2luRW50cnk8WEZP
Uk1fQmFzZT4gWEZPUk1fTnM7CmV4dGVybiBQbHVnaW5FbnRyeTxYRk9STV9CYXNlPiBYRk9STV9L
clJlZDsKZXh0ZXJuIFBsdWdpbkVudHJ5PFhGT1JNX0Jhc2U+IFhGT1JNX0tyR3JlZW47CmV4dGVy
biBQbHVnaW5FbnRyeTxYRk9STV9CYXNlPiBYRk9STV9LckJsdWU7CmV4dGVybiBQbHVnaW5FbnRy
eTxYRk9STV9CYXNlPiBYRk9STV9LckludGVuczsKZXh0ZXJuIFBsdWdpbkVudHJ5PFhGT1JNX0Jh
c2U+IFhGT1JNX0tvTWluOwpleHRlcm4gUGx1Z2luRW50cnk8WEZPUk1fQmFzZT4gWEZPUk1fS29N
YXg7CmV4dGVybiBQbHVnaW5FbnRyeTxYRk9STV9CYXNlPiBYRk9STV9Lb0V4cDsKZXh0ZXJuIFBs
dWdpbkVudHJ5PFhGT1JNX0Jhc2U+IFhGT1JNX0lsbHVtOwpleHRlcm4gUGx1Z2luRW50cnk8WEZP
Uk1fQmFzZT4gWEZPUk1fTXVzY2xlVGVuc2lvbjsKCnN0YXRpYyAgdm9pZCAgZnByaW50TWF0cml4
ICgKICAgIEZJTEUgKiBmcCwgY29uc3QgTV9NYXRyaXggJiBtYXQKICAgICk7CgpzdGF0aWMgdm9p
ZCAgdHh0TGliT3V0cHV0RmNuICgKICAgIGNvbnN0IGNoYXIgKnN0cmluZywKICAgIHZvaWQgKgog
ICAgKQp7CiAgICBjaGFyICpidWZmZXIgPSBUWFRfRGVmYXVsdE91dHB1dEZvcm1hdCAoc3RyaW5n
KTsKICAgIGZwdXRzIChidWZmZXIsIHN0ZG91dCk7Cn0KCnN0YXRpYyB2b2lkICB0eHRMaWJFcnJv
ckZjbiAoCiAgICBjb25zdCBjaGFyICpzdHJpbmcsCiAgICB2b2lkICoKICAgICkKewogICAgY2hh
ciAqYnVmZmVyID0gVFhUX0RlZmF1bHRPdXRwdXRGb3JtYXQgKHN0cmluZyk7CiAgICBmcHV0cyAo
YnVmZmVyLCBzdGRlcnIpOwp9CgpzdGF0aWMgdm9pZCBvdXRwdXRTdGRlcnIoY29uc3QgY2hhciAq
c3RyaW5nLCB2b2lkICpkYXRhKQp7CiAgICBmcHV0cyhUWFRfRGVmYXVsdE91dHB1dEZvcm1hdChz
dHJpbmcpLCBzdGRlcnIpOwp9CgpzdGF0aWMgdm9pZCBpbml0VHh0TGliKCkKewogICAgIAogICAg
IAogICAgVFhUX1JlZ2lzdGVySW5mb0NhbGxiYWNrKG91dHB1dFN0ZGVyciwgX19udWxsICk7CiAg
ICBUWFRfUmVnaXN0ZXJFcnJvckNhbGxiYWNrKG91dHB1dFN0ZGVyciwgX19udWxsICk7CiAgICBU
WFRfUmVnaXN0ZXJEaWFnQ2FsbGJhY2sob3V0cHV0U3RkZXJyLCBfX251bGwgKTsKICAgIGZvciAo
U2V2ZXJpdHkgaSA9IFNFVl9CQVNFOyBpIDw9IFNFVl9VTktOT1dOOyBpID0gU2V2ZXJpdHkoaSsx
KSkgewogICAgICAgIFRYVF9SZWdpc3Rlck91dHB1dENhbGxiYWNrKGksIG91dHB1dFN0ZGVyciwg
X19udWxsICk7CiAgICB9Cn0KCmNsYXNzIE5SSFlfV29ybGQgKk5SSFlBQ0NFU1NfUmVhZCAoCiAg
ICBjb25zdCBDSEFSICAqaW5jb21pbmdGaWxlbmFtZQogICAgKQp7CiAgICBORVRGSUxFX0ZJTEUg
ICAgICAgICpmaWxlOwogICAgVHdpbmUgICAgICAgICAgICAgICBmaWxlbmFtZTsKICAgIElOVCAg
ICAgICAgICAgICAgICAgdmVyYm9zaXR5U3RhdHVzOwoKICAgIHN0YXRpYyBaT09MRUFOICAgICAg
Zmlyc3QgPSAxIDsKCiAgICAgCgogICAgaWYgKGZpcnN0KQogICAgICAgIHsKICAgICAgICBpbml0
VHh0TGliICgpOwoKIAoKICAgICAgICAgCgoKICAgICAgICBpZiAoKCggTlJIWV9HZXRBbmRJbml0
Q29tbWFuZFRhYmxlICgpID09IF9fbnVsbCAgKT8gKCBUWFRfQXNzZXJ0Q29uZCAoMSAsIDAgLCAi
TlJIWV9HZXRBbmRJbml0Q29tbWFuZFRhYmxlICgpID09IE5VTEwiLCAibnJoeS9OUkhZX0FjY2Vz
cy5jIiwgMTQ0KSkgOiAwICkgKQogICAgICAgICAgICByZXR1cm4gKF9fbnVsbCApOwoKICAgICAg
ICBOUkhZX01vZGlmeUNvbW1hbmRUYWJsZUZvckFjY2VzcyAoKTsKCiAgICAgICAgIAogICAgICAg
IEhVX0FkZENoYW5TcGVjRnVuY3Rpb25zIChOUkhZX0xvb2t1cENoYW5TcGVjRm9yUGFyc2xleSwK
ICAgICAgICAgICAgTlJIWV9FdmFsdWF0ZUNoYW5TcGVjRm9yUGFyc2xleSwgTlJIWV9QYXJzZUNo
YW5TcGVjRm9yUGFyc2xleSwKICAgICAgICAgICAgTlJIWV9QYXJzZUNoYW5TcGVjRm9yUGFyc2xl
eSk7CgoKICAgICAgICAgCiAgICAgICAgIAogICAgICAgIE5SSFlfSW5pdGlhbGl6ZUNoYW5GdW5j
dGlvbnMoKTsKCiAgICAgICAgIAogICAgICAgIE5SSFlfR2xvYmFsczo6U2V0Tm9HZW9tTG9hZCgx
ICk7CgogICAgICAgICAKICAgICAgICBmaXJzdCA9IDAgOwogICAgICAgIH0KCiAgICAgCiAgICBp
ZiAoTlJIWV9Jbml0aWFsaXplKCkgIT0gMCkgcmV0dXJuIF9fbnVsbCA7CgogICAgIAogICAgZmls
ZW5hbWUgPSBOUkhZX0dldFZkYUZpbGVuYW1lIChpbmNvbWluZ0ZpbGVuYW1lKTsKCiAgICBCT09M
RUFOIHN1Y2Nlc3MgPSAxIDsKCiAgICBpZiAoKGZpbGUgPSBOUkhZX09wZW5GaWxlIChmaWxlbmFt
ZSkpID09IF9fbnVsbCApIHsKICAgICAgICBzdWNjZXNzID0gMCA7CiAgICB9CgogICAgaWYgKHN1
Y2Nlc3MpIHsKCiAgICAgICAgIAoKICAgICAgICAKICAgICAgICB2ZXJib3NpdHlTdGF0dXMgPSBO
UkhZX1NldFZlcmJvc2l0eSAoKDIpICk7CiAgICAgICAgaWYgKE5SSFlfUmVhZFZkYSAoZmlsZSwg
ZmlsZW5hbWUsIExpc3QgPE5SSFlfSU5UX0ZSQU5HRT4gKCkpID09ICgtMSkgKSB7CiAgICAgICAg
ICAgIHN1Y2Nlc3MgPSAwIDsKICAgICAgICB9CiAgICAgICAgTlJIWV9TZXRWZXJib3NpdHkgKHZl
cmJvc2l0eVN0YXR1cyk7CiAgICAgICAgCiAgICAgICAgIAogICAgICAgIGlmICgoTlJIWV9DbG9z
ZUZpbGUgKGZpbGUsIGZpbGVuYW1lKSkgPT0gMCApIHsKICAgICAgICAgICAgVFhUX1NyY0ZpbGUg
ICA9ICJucmh5L05SSFlfQWNjZXNzLmMiLCBUWFRfU3JjTGluZSAgID0gMTkxLCBUWFRfT3V0cHV0
ICAoIk5SSFlfQWNjZXNzOkZBSUxfQ0xPU0UiLAogICAgICAgICAgICAgICAgICAgICAgICAoY29u
c3QgY2hhciAqKWZpbGVuYW1lKTsKICAgICAgICB9CiAgICAgICAgaWYgKHN1Y2Nlc3MpCiAgICAg
ICAgICAgIE5SSFlfU2V0RGlydHlXb3JsZEZsYWcoKTsKICAgIH0KCiAgICBXb3JsZC0+SW5pdGlh
bGl6ZUZvckFjY2VzcyAoKTsKICAgIGlmIChzdWNjZXNzKSB7CiAgICAgICAgcmV0dXJuIFdvcmxk
OwogICAgfSBlbHNlIHsKICAgICAgICBOUkhZQUNDRVNTX0ZyZWVEYXRhKFdvcmxkKTsKICAgICAg
ICAoKCEoIFdvcmxkID09IF9fbnVsbCAgKSk/ICggVFhUX0Fzc2VydENvbmQgKDAgLCAxICwgIldv
cmxkID09IE5VTEwiLCAibnJoeS9OUkhZX0FjY2Vzcy5jIiwgMjAzKSkgOiAwICkgOwogICAgICAg
IHJldHVybiBXb3JsZDsKICAgIH0KfQoKdm9pZCBOUkhZQUNDRVNTX0ZyZWVEYXRhICgKICAgIE5S
SFlfV29ybGQgKndvcmxkCiAgICApCnsKICAgIHdvcmxkLT5BdHRhY2hUb1dvcmxkKDEsIDEpOwog
ICAgZGVsZXRlIHdvcmxkOwp9CgpzdGF0aWMgdm9pZCBmcHJpbnRNYXRyaXggKAogICAgRklMRSAq
IGZwLCBjb25zdCBNX01hdHJpeCAmIG1hdAogICAgKQp7CiAgICBmcHJpbnRmIChmcCwgIiVnICVn
ICVnICVnICAlZyAlZyAlZyAlZyAgJWcgJWcgJWcgJWcgICVnICVnICVnICVnIiwKICAgICAgICAg
ICAgIG1hdFswXVswXSwgbWF0WzBdWzFdLCBtYXRbMF1bMl0sIG1hdFswXVszXSwKICAgICAgICAg
ICAgIG1hdFsxXVswXSwgbWF0WzFdWzFdLCBtYXRbMV1bMl0sIG1hdFsxXVszXSwKICAgICAgICAg
ICAgIG1hdFsyXVswXSwgbWF0WzJdWzFdLCBtYXRbMl1bMl0sIG1hdFsyXVszXSwKICAgICAgICAg
ICAgIG1hdFszXVswXSwgbWF0WzNdWzFdLCBtYXRbM11bMl0sIG1hdFszXVszXSk7Cn0KCkJPT0xF
QU4gTlJIWUFDQ0VTU19DaG9yY2hhbiAoCiAgICBjbGFzcyBOUkhZX1dvcmxkICogd29ybGRQdHIs
CiAgICBmbG9hdCBmcmFtZSwKICAgIGZsb2F0IHJlZkZyYW1lLAogICAgY29uc3QgVHdpbmUgJiB0
YXJnZXQKICAgICkKewogICAgQk9PTEVBTiBzdWNjZXNzID0gMSA7CiAgICB3b3JsZFB0ci0+QXR0
YWNoVG9Xb3JsZCAoZnJhbWUsIHJlZkZyYW1lKTsKCiAgICBOUkhZX2J1bmNoPE5SSFlfY2xhc3NU
aGluZz4gKmJ1bmNoX3RoaW5nUHRycyA9CiAgICAgICAgTlJIWV9maW5kPE5SSFlfY2xhc3NUaGlu
Zz4odGFyZ2V0KS5GaW5kSXRlbSgpOwogICAgaWYgKCEgYnVuY2hfdGhpbmdQdHJzKSB7CiAgICAg
ICAgZnByaW50ZiAoc3RkZXJyLCAiRVJST1I6IEZhaWx1cmUgdG8gZmluZCA+JXM8XG4iLAogICAg
ICAgICAgICAgICAgIChjb25zdCBjaGFyICopdGFyZ2V0KTsKICAgICAgICBzdWNjZXNzICY9IDAg
OwogICAgfSBlbHNlIGlmIChidW5jaF90aGluZ1B0cnMtPk51bWJlclB0cnMgIT0gMSkgewogICAg
ICAgIGZwcmludGYgKHN0ZGVyciwgIkVSUk9SOiA+JWQ8IHRoaW5nIG1hdGNoZXMgZm9yID4lczxc
biIsCiAgICAgICAgICAgICAgICAgYnVuY2hfdGhpbmdQdHJzLT5OdW1iZXJQdHJzLAogICAgICAg
ICAgICAgICAgIChjb25zdCBjaGFyICopdGFyZ2V0KTsKICAgICAgICBzdWNjZXNzICY9IDAgOwog
ICAgfSBlbHNlIHsKICAgICAgICBOUkhZX1VwZGF0ZVRyYXZlcnNlVGhpbmcgKGZyYW1lLCBidW5j
aF90aGluZ1B0cnMtPlB0cnNbMF0pOwogICAgICAgIGlmIChzdHJjaHIgKHRhcmdldCwgJy8nKSkg
ewogICAgICAgICAgICBpZiAoYnVuY2hfdGhpbmdQdHJzLT5FeHBhbmRFbXB0eUNoYW5uZWxJbmZv
VG9XaWxkU3BsYXQgKCkgPT0KICAgICAgICAgICAgICAgIDAgKSB7CiAgICAgICAgICAgICAgICBm
cHJpbnRmIChzdGRlcnIsICJFUlJPUjogRmFpbHVyZSBpbiBjaGFubmVsIGV4cGFuc2lvbiA+JXM8
XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKil0YXJnZXQpOwogICAg
ICAgICAgICAgICAgc3VjY2VzcyAmPSAwIDsKICAgICAgICAgICAgfSBlbHNlIGlmIChidW5jaF90
aGluZ1B0cnMtPlBhcnNlQ2hhbm5lbEluZm8gKCkgPT0gMCApIHsKICAgICAgICAgICAgICAgIGZw
cmludGYgKHN0ZGVyciwgIkVSUk9SOiBCYWQgY2hhbm5lbCBwYXJzZSBmb3IgPiVzPFxuIiwKICAg
ICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopdGFyZ2V0KTsKICAgICAgICAgICAg
ICAgIHN1Y2Nlc3MgJj0gMCA7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVuY2hfdGhpbmdQdHJz
LT5OdW1iZXJFYWNoQ2hhbm5lbFswXSAhPSAxKSB7CiAgICAgICAgICAgICAgICBmcHJpbnRmIChz
dGRlcnIsICJFUlJPUjogPiVkPCBtYXRjaGVzIGZvciA+JXM8XG4iLAogICAgICAgICAgICAgICAg
ICAgICAgICAgYnVuY2hfdGhpbmdQdHJzLT5OdW1iZXJFYWNoQ2hhbm5lbFswXSwKICAgICAgICAg
ICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopdGFyZ2V0KTsKICAgICAgICAgICAgICAgIHN1
Y2Nlc3MgJj0gMCA7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBOUkhZX2Ns
YXNzQ2hhbm5lbCAqIGNoYW5QdHIgPSBidW5jaF90aGluZ1B0cnMtPkNoYW5uZWxzWzBdWzBdOwog
ICAgICAgICAgICAgICAgZnByaW50ZiAoc3Rkb3V0LCAiJWciLCBjaGFuUHRyLT5HZXRWYWx1ZSAo
ZnJhbWUpKTsKICAgICAgICAgICAgICAgIHN1Y2Nlc3MgJj0gMSA7CiAgICAgICAgICAgIH0KICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICBmcHJpbnRNYXRyaXggKHN0ZG91dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBidW5jaF90aGluZ1B0cnMtPlB0cnNbMF0tPkdldFdvcmxkSG9tZWxl
c3NNYXRyaXggKCkpOwogICAgICAgICAgICBzdWNjZXNzICY9IDEgOwogICAgICAgIH0KICAgIH0K
ICAgIGlmIChidW5jaF90aGluZ1B0cnMpIGRlbGV0ZSAoYnVuY2hfdGhpbmdQdHJzKTsKICAgIHJl
dHVybiAoc3VjY2Vzcyk7Cn0KCkJPT0xFQU4gTlJIWUFDQ0VTU19DaG9yQ2FtZXJhICgKICAgIGNs
YXNzIE5SSFlfV29ybGQgKiB3b3JsZFB0ciwKICAgIGZsb2F0IGZyYW1lLAogICAgZmxvYXQgcmVm
RnJhbWUsCiAgICBjb25zdCBUd2luZSAmIHRhcmdldAogICAgKQp7CiAgICBCT09MRUFOIHN1Y2Nl
c3MgPSAxIDsKICAgIHdvcmxkUHRyLT5BdHRhY2hUb1dvcmxkIChmcmFtZSwgcmVmRnJhbWUpOwoK
ICAgIE5SSFlfYnVuY2g8TlJIWV9jbGFzc0NhbWVyYT4gKmJ1bmNoX2NhbWVyYVB0cnMgPQogICAg
ICAgIE5SSFlfZmluZDxOUkhZX2NsYXNzQ2FtZXJhPih0YXJnZXQpLkZpbmRJdGVtKCk7CiAgICBp
ZiAoISBidW5jaF9jYW1lcmFQdHJzKSB7CiAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRVJST1I6
IEZhaWx1cmUgdG8gZmluZCA+JXM8XG4iLAogICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICop
dGFyZ2V0KTsKICAgICAgICBzdWNjZXNzICY9IDAgOwogICAgfSBlbHNlIGlmIChidW5jaF9jYW1l
cmFQdHJzLT5OdW1iZXJQdHJzICE9IDEpIHsKICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJFUlJP
UjogPiVkPCBjYW1lcmEgbWF0Y2hlcyBmb3IgPiVzPFxuIiwKICAgICAgICAgICAgICAgICBidW5j
aF9jYW1lcmFQdHJzLT5OdW1iZXJQdHJzLAogICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICop
dGFyZ2V0KTsKICAgICAgICBzdWNjZXNzICY9IDAgOwogICAgfSBlbHNlIHsKCiAgICAgICAgTlJI
WV9VcGRhdGVUcmF2ZXJzZVRoaW5nIChmcmFtZSwgYnVuY2hfY2FtZXJhUHRycy0+UHRyc1swXSk7
CiAgICAgICAgaWYgKHN0cmNociAodGFyZ2V0LCAnLycpKSB7CiAgICAgICAgICAgIGlmIChidW5j
aF9jYW1lcmFQdHJzLT5FeHBhbmRFbXB0eUNoYW5uZWxJbmZvVG9XaWxkU3BsYXQgKCkgPT0KICAg
ICAgICAgICAgICAgIDAgKSB7CiAgICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJFUlJP
UjogRmFpbHVyZSBpbiBjaGFubmVsIGV4cGFuc2lvbiA+JXM8XG4iLAogICAgICAgICAgICAgICAg
ICAgICAgICAgKGNvbnN0IGNoYXIgKil0YXJnZXQpOwogICAgICAgICAgICAgICAgc3VjY2VzcyAm
PSAwIDsKICAgICAgICAgICAgfSBlbHNlIGlmIChidW5jaF9jYW1lcmFQdHJzLT5QYXJzZUNoYW5u
ZWxJbmZvICgpID09IDAgKSB7CiAgICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJFUlJP
UjogQmFkIGNoYW5uZWwgcGFyc2UgZm9yID4lczxcbiIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAoY29uc3QgY2hhciAqKXRhcmdldCk7CiAgICAgICAgICAgICAgICBzdWNjZXNzICY9IDAgOwog
ICAgICAgICAgICB9IGVsc2UgaWYgKGJ1bmNoX2NhbWVyYVB0cnMtPk51bWJlckVhY2hDaGFubmVs
WzBdID4gMSkgewogICAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRVJST1I6ID4lZDwg
bWF0Y2hlcyBmb3IgPiVzPFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmNoX2NhbWVy
YVB0cnMtPk51bWJlckVhY2hDaGFubmVsWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgKGNv
bnN0IGNoYXIgKil0YXJnZXQpOwogICAgICAgICAgICAgICAgc3VjY2VzcyAmPSAwIDsKICAgICAg
ICAgICAgfSBlbHNlIGlmIChidW5jaF9jYW1lcmFQdHJzLT5OdW1iZXJFYWNoQ2hhbm5lbFswXSA9
PSAwKSB7CgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY2hhbk5h
bWUgPSBzdHJyY2hyICh0YXJnZXQsICcvJykgKyAxOwogICAgICAgICAgICAgICAgaWYgKHN0cmNt
cCAoY2hhbk5hbWUsICJheGlhbCIpID09IDApIHsKICAgICAgICAgICAgICAgICAgICBmcHJpbnRm
IChzdGRvdXQsICIwIik7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcCAoY2hhbk5h
bWUsICJjb252ZXJnZSIpID09IDApIHsKICAgICAgICAgICAgICAgICAgICBmcHJpbnRmIChzdGRv
dXQsICIwIik7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcCAoY2hhbk5hbWUsICJo
aXQiKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgZnByaW50ZiAoc3Rkb3V0LCAiMCIpOwog
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBmcHJpbnRmIChzdGRl
cnIsICJFUlJPUjogTm8gbWF0Y2ggZm9yID4lczxcbiIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhbk5hbWUpOwogICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgJj0gMCA7CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgTlJIWV9j
bGFzc0NoYW5uZWwgKiBjaGFuUHRyID0gYnVuY2hfY2FtZXJhUHRycy0+Q2hhbm5lbHNbMF1bMF07
CiAgICAgICAgICAgICAgICBmbG9hdCB2YWx1ZSA9IGNoYW5QdHItPkdldFZhbHVlIChmcmFtZSk7
CiAgICAgICAgICAgICAgICBpZiAoY2hhblB0ci0+R2V0VHlwZSAoKSA9PSBYRk9STV9Gb2NhbCkK
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSAvPSAyNS40OwogICAgICAgICAgICAgICAgZnByaW50
ZiAoc3Rkb3V0LCAiJWciLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICBzdWNjZXNzICY9IDEgOwog
ICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAgIE5SSFlfY2xhc3NDYW1l
cmEgKiBjYW1QdHIgPSBidW5jaF9jYW1lcmFQdHJzLT5QdHJzWzBdOwogICAgICAgICAgICBmbG9h
dCBhcGVydHVyZSA9IGNhbVB0ci0+R2V0QXBlcnR1cmUgKCk7CiAgICAgICAgICAgIGZsb2F0IGFz
cGVjdCA9IGNhbVB0ci0+R2V0QXNwZWN0ICgpOwogICAgICAgICAgICBmbG9hdCBoaXRoZXIgPSBj
YW1QdHItPkdldEhpdGhlciAoKTsKICAgICAgICAgICAgZmxvYXQgeW9uID0gY2FtUHRyLT5HZXRZ
b24gKCk7CiAgICAgICAgICAgIGZsb2F0IGZvY2FsTGVuID0gY2FtUHRyLT5HZXRGb2NhbEluTU0g
KCkgLyAyNS40OwoKICAgICAgICAgICAgIAoKICAgICAgICAgICAgZmxvYXQgb3J0aG9TY2FsZSA9
IGNhbVB0ci0+R2V0T3J0aG9TY2FsZSAoKTsKCiAgICAgICAgICAgICAKCiAgICAgICAgICAgIE5S
SFlfY2xhc3NDaGFubmVsICogY2hhblB0ciA9CiAgICAgICAgICAgICAgICBjYW1QdHItPkZpbmRO
b25MaW5lYXJDaGFubmVsIChYRk9STV9BeGlhbCk7CiAgICAgICAgICAgIGZsb2F0IGF4aWFsID0g
KGNoYW5QdHIgPyBjaGFuUHRyLT5HZXRWYWx1ZSAoZnJhbWUpIDogMCk7CgogICAgICAgICAgICBj
aGFuUHRyID0gY2FtUHRyLT5GaW5kTm9uTGluZWFyQ2hhbm5lbCAoWEZPUk1fQ29udmVyZ2UpOwog
ICAgICAgICAgICBmbG9hdCBjb252ZXJnZSA9IChjaGFuUHRyID8gY2hhblB0ci0+R2V0VmFsdWUg
KGZyYW1lKSA6IDApOwoKICAgICAgICAgICAgY2hhblB0ciA9IGNhbVB0ci0+RmluZE5vbkxpbmVh
ckNoYW5uZWwgKFhGT1JNX0hpdCk7CiAgICAgICAgICAgIGZsb2F0IGhpdCA9IChjaGFuUHRyID8g
Y2hhblB0ci0+R2V0VmFsdWUgKGZyYW1lKSA6IDApOwogICAgICAgICAgICBzdWNjZXNzICY9IDEg
OwogICAgICAgICAgICBmcHJpbnRmIChzdGRvdXQsICIlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAl
ZyIsCiAgICAgICAgICAgICAgICAgICAgIGFwZXJ0dXJlLCBhc3BlY3QsCiAgICAgICAgICAgICAg
ICAgICAgIGhpdGhlciwgeW9uLAogICAgICAgICAgICAgICAgICAgICBmb2NhbExlbiwgb3J0aG9T
Y2FsZSwKICAgICAgICAgICAgICAgICAgICAgYXhpYWwsIGNvbnZlcmdlLCBoaXQpOwogICAgICAg
IH0KICAgIH0KCiAgICBpZiAoYnVuY2hfY2FtZXJhUHRycykgZGVsZXRlIChidW5jaF9jYW1lcmFQ
dHJzKTsKICAgIHJldHVybiAoc3VjY2Vzcyk7Cn0KCmludCBOUkhZQUNDRVNTX0Nob3JPYmplY3Qg
KAogICAgTlJIWV9Xb3JsZCAqIHdvcmxkUHRyLAogICAgZmxvYXQgZnJhbWUsCiAgICBjb25zdCBU
d2luZSAmIG9iak5hbWUsCiAgICBpbnQgbW90aW9uYmx1ciwKICAgIGZsb2F0IHNodXR0ZXJTdGFy
dCwKICAgIGZsb2F0IHNodXR0ZXJFbmQsCiAgICBjb25zdCBUd2luZSAmIGdlb20sCiAgICBjb25z
dCBUd2luZSAmIG5leHRHZW9tLAogICAgY29uc3QgVHdpbmUgJiBncm91cCwKICAgIGNvbnN0IFR3
aW5lICYgcmVzb2x1dGlvbiwKICAgIGNvbnN0IFR3aW5lICYgc2hhcGVGaWxlCiAgICApCnsKICAg
IGludCByZXQ7CiAgICB3b3JsZFB0ci0+QXR0YWNoVG9Xb3JsZCAoZnJhbWUpOwoKICAgICAKICAg
ICAKICAgIAogICAgaW50IGxlbiA9IHJlc29sdXRpb24ubGVuZ3RoKCk7CiAgICBpZiAocmVzb2x1
dGlvbi5sZW5ndGgoKSA+IDApIHsKICAgICAgICBpZiAoc3RybmNhc2VjbXAocmVzb2x1dGlvbiwg
InNpbXBsZSIsIGxlbikgPT0gMCkgewogICAgICAgICAgICBOUkhZX0dsb2JhbHM6OlNldFJlcyhz
aW1wbGUpOwogICAgICAgIH0gZWxzZSBpZiAoc3RybmNhc2VjbXAocmVzb2x1dGlvbiwgImhlcm8i
LCBsZW4pID09IDApIHsKICAgICAgICAgICAgTlJIWV9HbG9iYWxzOjpTZXRSZXMoaGVybyk7CiAg
ICAgICAgfSBlbHNlIGlmIChzdHJuY2FzZWNtcChyZXNvbHV0aW9uLCAiaGlnaCIsIGxlbikgPT0g
MCkgewogICAgICAgICAgICBOUkhZX0dsb2JhbHM6OlNldFJlcyhoZXJvKTsKICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICBOUkhZX0dsb2JhbHM6OlNldFJlcyh1c2VyKTsKICAgICAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHJlc29sdXRpb24gJyVzJy4gIFVzZSB7c2ltcGxlfGhl
cm98ZmlsZX0gb3Igb21pdCB0aGUgZmxhZ1xuIiwKICAgICAgICAgICAgICAgICAgICAoY29uc3Qg
Y2hhciAqKXJlc29sdXRpb24pOwogICAgICAgIH0KICAgIH0KCiAgICBOUkhZX2NsYXNzTW9kZWwg
Km1vZGVsUHRyID0KICAgICAgICBOUkhZX2ZpbmQ8TlJIWV9jbGFzc01vZGVsPihvYmpOYW1lKS5G
YXN0RmluZCgpOwogICAgaWYgKG1vZGVsUHRyKSB7CgogICAgICAgIG1vZGVsUHRyLT5TZXRVc2VG
aWxlQ2hhbm5lbCAoMCApOwogICAgICAgIGlmIChnZW9tICE9ICIiKSBtb2RlbFB0ci0+T3ZlcnJp
ZGVGaWxlIChnZW9tKTsKICAgICAgICBpZiAobmV4dEdlb20gIT0gIiIpIG1vZGVsUHRyLT5PdmVy
cmlkZU5leHRmaWxlIChuZXh0R2VvbSk7CiAgICAgICAgbW9kZWxQdHItPk92ZXJyaWRlR3JvdXAg
KGdyb3VwKTsKCiAgICAgICAgTGlzdCA8TlJIWV9jbGFzc01vZGVsICo+IG1vZGVsTGlzdDsKICAg
ICAgICBtb2RlbExpc3QuYXBwZW5kIChtb2RlbFB0cik7CgogICAgICAgIE5SSFlfR2xvYmFsczo6
U2V0Tm9HZW9tTG9hZCgwICk7CiAgICAgICAgIAogICAgICAgIE5SSFlfU2V0RGlydHlXb3JsZEZs
YWcoKTsKICAgICAgICByZXQgPSBOUkhZX2R1bXBvYmogKHNoYXBlRmlsZSwgZnJhbWUsCgkJCSAg
ICAgbW90aW9uYmx1ciwgc2h1dHRlclN0YXJ0LCBzaHV0dGVyRW5kLAoJCQkgICAgIF9fbnVsbCAs
IF9fbnVsbCAsCgkJCSAgICAgbW9kZWxMaXN0LAoJCQkgICAgIDAgLCAodm9pZCAqKV9fbnVsbCAp
OwoKICAgICAgICBOUkhZX0dsb2JhbHM6OlNldE5vR2VvbUxvYWQoMSApOwogICAgICAgIG1vZGVs
UHRyLT5SZXNldE92ZXJyaWRlICgpOwogICAgICAgIG1vZGVsUHRyLT5TZXRVc2VGaWxlQ2hhbm5l
bCAoMSApOwoKICAgIH0gZWxzZSB7CiAgICAgICAgZnByaW50ZiAoc3RkZXJyLAogICAgICAgICAg
ICAgICAgICJFUlJPUiEgVW5hYmxlIHRvIGZpbmQgPiVzPFxuIiwKICAgICAgICAgICAgICAgICAo
Y29uc3QgY2hhciAqKW9iak5hbWUpOwogICAgfQoKICAgIE5SSFlfR2xvYmFsczo6U2V0UmVzKHVz
ZXIpOwogICAgcmV0dXJuIHJldDsKfQoKY2xhc3MgQ2hvcmR1bXAgewogICAgVHdpbmUgZmlsZW5h
bWU7CiAgICBmbG9hdCByZWZGcmFtZTsKICAgIEZJTEUgKiBmcDsKICAgIGludCBtb3Rpb25ibHVy
OwogICAgZmxvYXQgc2h1dHRlclN0YXJ0OwogICAgZmxvYXQgc2h1dHRlckVuZDsKICAgIExpc3Qg
PFR3aW5lPiBkZWZvcm1pbmdPYmplY3RzOwogICAgdmVjdG9yPE5SSFlfY2xhc3NDYW1lcmEgKj4g
X2NhbWVyYXM7CiAgICB2ZWN0b3I8c3RyaW5nPiBfY2FtTmFtZXM7CgogICAgdm9pZCBwcmVwYXJl
IChmbG9hdCBwcmVwRnJhbWUsIE5SSFlfY2xhc3NUaGluZyAqIHRoaW5nUHRyKTsKICAgIHZvaWQg
ZG9DYW1lcmEgKGNvbnN0IHN0cmluZyAmbmFtZSwgTlJIWV9jbGFzc0NhbWVyYSAqY2FtUHRyKTsK
ICAgIFR3aW5lIGdldE9iakRpc3AgKGludCBvYmpEaXNwLCBOUkhZX2NsYXNzVGhpbmcgKiB0aGlu
Z1B0ciwgZmxvYXQgZnJhbWUpOwogICAgQk9PTEVBTiBnZXREZWZvcm1pbmdPcHRpb24gKE5SSFlf
Y2xhc3NUaGluZyAqIHRoaW5nUHRyKTsKcHVibGljOgogICAgQ2hvcmR1bXAgKGNvbnN0IFR3aW5l
ICYgaW5GaWxlbmFtZSwKICAgICAgICAgICAgICBmbG9hdCBpblJlZkZyYW1lLAogICAgICAgICAg
ICAgIGNvbnN0IFR3aW5lICYgY2FtTmFtZSwKICAgICAgICAgICAgICBGSUxFICogaW5GcCwKICAg
ICAgICAgICAgICBpbnQgaW5Nb3Rpb25ibHVyLAogICAgICAgICAgICAgIGZsb2F0IGluU2h1dHRl
clN0YXJ0LAogICAgICAgICAgICAgIGZsb2F0IGluU2h1dHRlckVuZCwKICAgICAgICAgICAgICBj
b25zdCBMaXN0IDxUd2luZT4gJiBpbkRlZm9ybWluZ09iamVjdHMpOwogICAgdm9pZCBEb0NhbWVy
YSAoKTsKICAgIHZvaWQgRG9TdGVyZW8gKEJPT0xFQU4gZG9MZWZ0RXllLCBCT09MRUFOIGRvUmln
aHRFeWUpOwogICAgdm9pZCBEb0xpZ2h0cyAoKTsKICAgIHZvaWQgRG9Nb2RlbHMgKGludCBvYmpE
aXNwKTsKICAgIHZvaWQgRG9NYXBzICgpOwogICAgdm9pZCBEb01hdGVyaWFscyAoKTsKfTsKCnZv
aWQgQ2hvcmR1bXA6OnByZXBhcmUgKGZsb2F0IHByZXBGcmFtZSwgTlJIWV9jbGFzc1RoaW5nICog
dGhpbmdQdHIpCnsKICAgIGlmIChwcmVwRnJhbWUgIT0gTlJIWV9HZXRDdXJyZW50RnJhbWUgKCkp
CiAgICAgICAgTlJIWV9TZXRDdXJyZW50RnJhbWUgKHByZXBGcmFtZSk7CiAgICBpZiAodGhpbmdQ
dHIpCiAgICAgICAgTlJIWV9VcGRhdGVUcmF2ZXJzZVRoaW5nIChwcmVwRnJhbWUsIHRoaW5nUHRy
KTsKfQoKdm9pZCBDaG9yZHVtcDo6ZG9DYW1lcmEoY29uc3Qgc3RyaW5nICZwcmVmaXgsIE5SSFlf
Y2xhc3NDYW1lcmEgKmNhbVB0cikKewogICAgZmxvYXQgYXBlcnR1cmUgPSBjYW1QdHItPkdldEFw
ZXJ0dXJlICgpOwogICAgZmxvYXQgYXNwZWN0ID0gY2FtUHRyLT5HZXRBc3BlY3QgKCk7CiAgICBm
bG9hdCBoaXRoZXIgPSBjYW1QdHItPkdldEhpdGhlciAoKTsKICAgIGZsb2F0IHlvbiA9IGNhbVB0
ci0+R2V0WW9uICgpOwogICAgZmxvYXQgZm9jYWwgPSBjYW1QdHItPkdldEZvY2FsSW5NTSAoKSAv
IDI1LjQ7CiAgICBNX01hdHJpeCBjYW1NYXQgPSBjYW1QdHItPkdldFdvcmxkSG9tZWxlc3NNYXRy
aXggKCk7CiAgICBmcHJpbnRmIChmcCwKICAgICAgICAgICAgICIlc2FwZXJ0dXJlICVnXG4iCiAg
ICAgICAgICAgICAiJXNhc3BlY3QgJWdcbiIKICAgICAgICAgICAgICIlc2hpdGhlciAlZ1xuIgog
ICAgICAgICAgICAgIiVzeW9uICVnXG4iCiAgICAgICAgICAgICAiJXNmb2NhbCAlZ1xuIiwKICAg
ICAgICAgICAgIHByZWZpeC5jX3N0cigpLCBhcGVydHVyZSwKICAgICAgICAgICAgIHByZWZpeC5j
X3N0cigpLCBhc3BlY3QsCiAgICAgICAgICAgICBwcmVmaXguY19zdHIoKSwgaGl0aGVyLAogICAg
ICAgICAgICAgcHJlZml4LmNfc3RyKCksIHlvbiwKICAgICAgICAgICAgIHByZWZpeC5jX3N0cigp
LCBmb2NhbCk7CiAgICBpZiAoY2FtUHRyLT5HZXRPcnRob0FjdGl2ZSAoKSkgewogICAgICAgIGZw
cmludGYgKGZwLAogICAgICAgICAgICAgICAgICIlc2NhbW9ydGhvICVnXG4iLAogICAgICAgICAg
ICAgICAgIHByZWZpeC5jX3N0cigpLAogICAgICAgICAgICAgICAgIGNhbVB0ci0+R2V0T3J0aG9T
Y2FsZSAoKSk7CiAgICB9CiAgICBmcHJpbnRmIChmcCwKICAgICAgICAgICAgICIlc2NhbXRyYW5z
ICIsCiAgICAgICAgICAgICBwcmVmaXguY19zdHIoKSk7CiAgICBmcHJpbnRNYXRyaXggKGZwLCBj
YW1NYXQpOwogICAgZnByaW50ZiAoZnAsICJcbiIpOwp9CgpUd2luZSBDaG9yZHVtcDo6Z2V0T2Jq
RGlzcCAoaW50IG9iakRpc3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUkhZX2NsYXNz
VGhpbmcgKiB0aGluZ1B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGZyYW1l
KQp7CiAgICBzd2l0Y2ggKG9iakRpc3ApIHsKICAgIGNhc2UgKDAgKToKICAgICAgICByZXR1cm4g
KCJvZmYiKTsKICAgIGNhc2UgKDEgKToKICAgICAgICByZXR1cm4gKCJvbiIpOwogICAgZGVmYXVs
dDoKICAgICAgICByZXR1cm4gKHRoaW5nUHRyLT5HZXRWaXNpYmxlU3RhdGUgKGZyYW1lKSA/ICJv
biIgOiAib2ZmIik7CiAgICB9Cn0KCkJPT0xFQU4gQ2hvcmR1bXA6OmdldERlZm9ybWluZ09wdGlv
biAoTlJIWV9jbGFzc1RoaW5nICogdGhpbmdQdHIpCnsKICAgICAKICAgIEJPT0xFQU4gcmV0VmFs
ID0gMCA7CgogICAgIAogICAgaWYgKGRlZm9ybWluZ09iamVjdHMuc2l6ZSAoKSA9PSAwIHx8IGRl
Zm9ybWluZ09iamVjdHNbMF0gPT0gIm9mZiIpCiAgICAgICAgcmV0dXJuIChyZXRWYWwpOwoKICAg
ICAKICAgIGlmIChzdHJjYXNlY21wIChkZWZvcm1pbmdPYmplY3RzWzBdLCAib24iKSAhPSAwICYm
CiAgICAgICAgZGVmb3JtaW5nT2JqZWN0c1swXSAhPSAiMSIpIHsKICAgICAgICBCT09MRUFOIG1h
dGNoID0gMCA7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWZvcm1pbmdPYmplY3RzLnNp
emUgKCk7IGkrKykgewogICAgICAgICAgICBpZiAodGhpbmdQdHItPk5hbWUgPT0gZGVmb3JtaW5n
T2JqZWN0c1tpXSkgewogICAgICAgICAgICAgICAgbWF0Y2ggPSAxIDsKICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghIG1hdGNoKQogICAg
ICAgICAgICByZXR1cm4gKHJldFZhbCk7CiAgICB9CgogICAgaWYgKHRoaW5nUHRyLT5Jc0RlZm9y
bWluZyAoKSkgewogICAgICAgIHJldFZhbCA9IDEgOwogICAgfQoKICAgIHJldHVybiAocmV0VmFs
KTsKfQoKQ2hvcmR1bXA6OkNob3JkdW1wICgKICAgIGNvbnN0IFR3aW5lICYgaW5GaWxlbmFtZSwK
ICAgIGZsb2F0IGluUmVmRnJhbWUsCiAgICBjb25zdCBUd2luZSAmIGNhbU5hbWUsCiAgICBGSUxF
ICogaW5GcCwKICAgIGludCBpbk1vdGlvbmJsdXIsCiAgICBmbG9hdCBpblNodXR0ZXJTdGFydCwK
ICAgIGZsb2F0IGluU2h1dHRlckVuZCwKICAgIGNvbnN0IExpc3QgPFR3aW5lPiAmIGluRGVmb3Jt
aW5nT2JqZWN0cykKewogICAgZmlsZW5hbWUgPSBpbkZpbGVuYW1lOwogICAgcmVmRnJhbWUgPSBp
blJlZkZyYW1lOwogICAgZnAgPSBpbkZwOwogICAgbW90aW9uYmx1ciA9IGluTW90aW9uYmx1cjsK
ICAgIHNodXR0ZXJTdGFydCA9IGluU2h1dHRlclN0YXJ0OwogICAgc2h1dHRlckVuZCA9IGluU2h1
dHRlckVuZDsKICAgIGRlZm9ybWluZ09iamVjdHMgPSBpbkRlZm9ybWluZ09iamVjdHM7CiAgICAK
ICAgIE5SSFlfY2xhc3NDYW1lcmEgKmNhbWVyYSA9CiAgICAgICAgKGNhbU5hbWUgIT0gIiIgPwog
ICAgICAgICBOUkhZX2ZpbmQ8TlJIWV9jbGFzc0NhbWVyYT4oY2FtTmFtZSkuRmFzdEZpbmQoKSA6
IF9fbnVsbCApOwogICAgaWYgKGNhbWVyYSkgewogICAgICAgIF9jYW1lcmFzLnB1c2hfYmFjayhj
YW1lcmEpOwogICAgICAgIF9jYW1OYW1lcy5wdXNoX2JhY2soImNhbWVyYSIpOwogICAgfQogICAg
Zm9yICh2ZWN0b3I8TlJIWV9jbGFzc0NhbWVyYSAqPjo6Y29uc3RfaXRlcmF0b3IgaWMgPSAKICAg
ICAgICAgICAgIFdvcmxkLT5hbGxDYW1lcmFzKCkuYmVnaW4oKTsKICAgICAgICAgaWMgIT0gV29y
bGQtPmFsbENhbWVyYXMoKS5lbmQoKTsgKytpYykgewogICAgICAgIF9jYW1lcmFzLnB1c2hfYmFj
aygqaWMpOwogICAgICAgIF9jYW1OYW1lcy5wdXNoX2JhY2soKGNvbnN0IGNoYXIgKikoKmljKS0+
TmFtZSk7CiAgICB9Cn0KCnZvaWQgQ2hvcmR1bXA6OkRvQ2FtZXJhKCkKewogICAgaWYgKF9jYW1l
cmFzLnNpemUoKSA9PSAwKSByZXR1cm47CiAgICBzdGF0aWMgY29uc3Qgc3RyaW5nIHByZWZpeCgi
Y2FtZXJhICIpOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX2NhbWVyYXMuc2l6ZSgpOyBpKysp
IHsKICAgICAgICBwcmVwYXJlIChyZWZGcmFtZSwgX2NhbWVyYXNbaV0pOwogICAgICAgIGRvQ2Ft
ZXJhKHByZWZpeCArIF9jYW1OYW1lc1tpXSArICJfU1RBVElDICIsIF9jYW1lcmFzW2ldKTsKICAg
IH0KCiAgICBmb3IgKGkgPSAwOyBpIDwgbW90aW9uYmx1cjsgaSsrKSB7CiAgICAgICAgZmxvYXQg
bW9tZW50ID0gVV9DYWxjdWxhdGVTbGljZVRpbWUKICAgICAgICAgICAgKGksIG1vdGlvbmJsdXIs
IHNodXR0ZXJTdGFydCwgc2h1dHRlckVuZCk7CiAgICAgICAgY29uc3Qgc3RyaW5nIHNsaWNlKGZ0
b2EoaSkpOwogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgX2NhbWVyYXMuc2l6ZSgpOyBqKysp
IHsKICAgICAgICAgICAgcHJlcGFyZSAocmVmRnJhbWUgKyBtb21lbnQsIF9jYW1lcmFzW2pdKTsK
ICAgICAgICAgICAgZG9DYW1lcmEocHJlZml4ICsgX2NhbU5hbWVzW2pdICsgIl9TTElDRV8iICsg
c2xpY2UgKyAiICIsIF9jYW1lcmFzW2pdKTsKICAgICAgICB9CiAgICB9Cn0KCnZvaWQgQ2hvcmR1
bXA6OkRvU3RlcmVvKEJPT0xFQU4gZG9MZWZ0RXllLCBCT09MRUFOIGRvUmlnaHRFeWUpCnsKICAg
IGlmIChfY2FtZXJhcy5zaXplKCkgPT0gMCkgcmV0dXJuOwoKICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgX2NhbWVyYXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICBwcmVwYXJlKHJlZkZyYW1lLCBfY2Ft
ZXJhc1tpXSk7CiAgICAgICAgaWYgKGRvTGVmdEV5ZSkgZnByaW50ZihmcCwgImNhbWVyYSAlc19T
VEFUSUMgc3RlcmVvTGVmdEV5ZSBvblxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9jYW1OYW1lc1tpXS5jX3N0cigpKTsKICAgICAgICBpZiAoZG9SaWdodEV5ZSkgZnByaW50Zihm
cCwgImNhbWVyYSAlc19TVEFUSUMgc3RlcmVvUmlnaHRFeWUgb25cbiIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX2NhbU5hbWVzW2ldLmNfc3RyKCkpOwogICAgfQogICAgCiAgICBm
b3IgKGkgPSAwOyBpIDwgX2NhbWVyYXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICBmbG9hdCBheGlh
bCA9IF9jYW1lcmFzW2ldLT5HZXRDaGFubmVsVmFsdWVCeVR5cGUoWEZPUk1fQXhpYWwpOwogICAg
ICAgIGZsb2F0IGNvbnZlcmdlID0gX2NhbWVyYXNbaV0tPkdldENoYW5uZWxWYWx1ZUJ5VHlwZShY
Rk9STV9Db252ZXJnZSk7CiAgICAgICAgZmxvYXQgaGl0ID0gX2NhbWVyYXNbaV0tPkdldENoYW5u
ZWxWYWx1ZUJ5VHlwZShYRk9STV9IaXQpOwogICAgICAgIGZwcmludGYgKGZwLAogICAgICAgICAg
ICAgICAgICJjYW1lcmEgJXNfU1RBVElDIGF4aWFsU2VwYXJhdGlvbiAlZ1xuIgogICAgICAgICAg
ICAgICAgICJjYW1lcmEgJXNfU1RBVElDIGNvbnZlcmdlbmNlICVnXG4iCiAgICAgICAgICAgICAg
ICAgImNhbWVyYSAlc19TVEFUSUMgaG9ySW1hZ2VUcmFucyAlZ1xuIiwKICAgICAgICAgICAgICAg
ICBfY2FtTmFtZXNbaV0uY19zdHIoKSwgYXhpYWwsCiAgICAgICAgICAgICAgICAgX2NhbU5hbWVz
W2ldLmNfc3RyKCksIGNvbnZlcmdlLAogICAgICAgICAgICAgICAgIF9jYW1OYW1lc1tpXS5jX3N0
cigpLCBoaXQpOwogICAgfQoKICAgIGZvciAoaSA9IDA7IGkgPCBtb3Rpb25ibHVyOyBpKyspIHsK
ICAgICAgICBmbG9hdCBtb21lbnQgPSBVX0NhbGN1bGF0ZVNsaWNlVGltZQogICAgICAgICAgICAo
aSwgbW90aW9uYmx1ciwgc2h1dHRlclN0YXJ0LCBzaHV0dGVyRW5kKTsKICAgICAgICBmb3IgKGlu
dCBqID0gMDsgaiA8IF9jYW1lcmFzLnNpemUoKTsgaisrKSB7CiAgICAgICAgICAgIHByZXBhcmUg
KHJlZkZyYW1lICsgbW9tZW50LCBfY2FtZXJhc1tqXSk7CiAgICAgICAgICAgIGZsb2F0IGF4aWFs
ID0gX2NhbWVyYXNbal0tPkdldENoYW5uZWxWYWx1ZUJ5VHlwZSAoWEZPUk1fQXhpYWwpOwogICAg
ICAgICAgICBmbG9hdCBjb252ZXJnZSA9IF9jYW1lcmFzW2pdLT5HZXRDaGFubmVsVmFsdWVCeVR5
cGUgKFhGT1JNX0NvbnZlcmdlKTsKICAgICAgICAgICAgZmxvYXQgaGl0ID0gX2NhbWVyYXNbal0t
PkdldENoYW5uZWxWYWx1ZUJ5VHlwZSAoWEZPUk1fSGl0KTsKICAgICAgICAgICAgZnByaW50ZiAo
ZnAsCiAgICAgICAgICAgICAgICAgICAgICJjYW1lcmEgJXNfU0xJQ0VfJWQgYXhpYWxTZXBhcmF0
aW9uICVnXG4iCiAgICAgICAgICAgICAgICAgICAgICJjYW1lcmEgJXNfU0xJQ0VfJWQgY29udmVy
Z2VuY2UgJWdcbiIKICAgICAgICAgICAgICAgICAgICAgImNhbWVyYSAlc19TTElDRV8lZCBob3JJ
bWFnZVRyYW5zICVnXG4iLAogICAgICAgICAgICAgICAgICAgICBfY2FtTmFtZXNbal0uY19zdHIo
KSwgaSwgYXhpYWwsCiAgICAgICAgICAgICAgICAgICAgIF9jYW1OYW1lc1tqXS5jX3N0cigpLCBp
LCBjb252ZXJnZSwKICAgICAgICAgICAgICAgICAgICAgX2NhbU5hbWVzW2pdLmNfc3RyKCksIGks
IGhpdCk7CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIENob3JkdW1wOjpEb0xpZ2h0cygpCnsKICAg
IAogICAgZm9yICh2ZWN0b3I8TlJIWV9jbGFzc0xpZ2h0ICo+Ojpjb25zdF9pdGVyYXRvciBsaSA9
IFdvcmxkLT5hbGxMaWdodHMoKS5iZWdpbigpOwogICAgICAgICBsaSAhPSBXb3JsZC0+YWxsTGln
aHRzKCkuZW5kKCk7ICsrbGkpIHsKICAgICAgICBOUkhZX2NsYXNzTGlnaHQgKmxndFB0ciA9ICps
aTsKICAgICAgICBwcmVwYXJlIChyZWZGcmFtZSwgbGd0UHRyKTsKICAgICAgICBmcHJpbnRmIChm
cCwgImxpZ2h0ICVzIG1hdHJpeCAgICIsCiAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKils
Z3RQdHItPk5hbWUpOwogICAgICAgIGZwcmludE1hdHJpeCAoZnAsIGxndFB0ci0+R2V0V29ybGRI
b21lbGVzc01hdHJpeCAoKSk7CiAgICAgICAgZnByaW50ZiAoZnAsICJcbiIpOwoKICAgICAgICAg
CiAgICAgICAgY29uc3QgQk9PTEVBTiBkb0xpZ2h0UHJvcHMgPSAxIDsKCiAgICAgICAgaWYgKGRv
TGlnaHRQcm9wcykgewoKICAgICAgICAgICAgZmxvYXQgICAgICAgICAgICAgICBLZHIsIEtkZywg
S2RiLCBLZGksIEtzciwgS3NnLCBLc2IsIEtzaTsKCiAgICAgICAgICAgIEtkciA9IGxndFB0ci0+
R2V0TGd0RGlmZlJlZCgpOwogICAgICAgICAgICBLZGcgPSBsZ3RQdHItPkdldExndERpZmZHcmVl
bigpOwogICAgICAgICAgICBLZGIgPSBsZ3RQdHItPkdldExndERpZmZCbHVlKCk7CiAgICAgICAg
ICAgIEtkaSA9IGxndFB0ci0+R2V0TGd0RGlmZkludGVucygpOwoKICAgICAgICAgICAgS3NyID0g
bGd0UHRyLT5HZXRMZ3RTcGVjUmVkKCk7CiAgICAgICAgICAgIEtzZyA9IGxndFB0ci0+R2V0TGd0
U3BlY0dyZWVuKCk7CiAgICAgICAgICAgIEtzYiA9IGxndFB0ci0+R2V0TGd0U3BlY0JsdWUoKTsK
ICAgICAgICAgICAgS3NpID0gbGd0UHRyLT5HZXRMZ3RTcGVjSW50ZW5zKCk7CgogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAKCiAgICAgICAgICAgIGZwcmludGYgKGZwLAogICAgICAgICAgICAg
ICAgICAgICAibGlnaHQgJXMgS2QgJWcgJWcgJWcgJWdcbiIKICAgICAgICAgICAgICAgICAgICAg
ImxpZ2h0ICVzIEtzICVnICVnICVnICVnXG4iLAogICAgICAgICAgICAgICAgICAgICAoY29uc3Qg
Y2hhciAqKWxndFB0ci0+TmFtZSwgS2RyLCBLZGcsIEtkYiwgS2RpLAogICAgICAgICAgICAgICAg
ICAgICAoY29uc3QgY2hhciAqKWxndFB0ci0+TmFtZSwgS3NyLCBLc2csIEtzYiwgS3NpKTsKCiAg
ICAgICAgICAgICAKCiAgICAgICAgICAgIGlmIChsZ3RQdHItPkdldExndFNwb3RMaWdodFN0YXR1
cyAoKSkgewogICAgICAgICAgICAgICAgZnByaW50ZiAoZnAsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAibGlnaHQgJXMgZm9jdXMgJWcgJWcgJWdcbiIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAoY29uc3QgY2hhciAqKWxndFB0ci0+TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGxn
dFB0ci0+R2V0Q2hhbm5lbFZhbHVlQnlUeXBlIChYRk9STV9Gb2N1c01pbiksCiAgICAgICAgICAg
ICAgICAgICAgICAgICBsZ3RQdHItPkdldENoYW5uZWxWYWx1ZUJ5VHlwZSAoWEZPUk1fRm9jdXNN
YXgpLAogICAgICAgICAgICAgICAgICAgICAgICAgbGd0UHRyLT5HZXRDaGFubmVsVmFsdWVCeVR5
cGUgKFhGT1JNX0ZvY3VzRXhwKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAKCiAgICAg
ICAgICAgIGZsb2F0IGF0dGVuU3RhcnQgPWxndFB0ci0+R2V0Q2hhbm5lbFZhbHVlQnlUeXBlIChY
Rk9STV9BdHRlblN0YXJ0KTsKICAgICAgICAgICAgZmxvYXQgYXR0ZW5FbmQgPSBsZ3RQdHItPkdl
dENoYW5uZWxWYWx1ZUJ5VHlwZSAoWEZPUk1fQXR0ZW5FbmQpOwogICAgICAgICAgICBmbG9hdCBh
dHRlbkV4cCA9IGxndFB0ci0+R2V0Q2hhbm5lbFZhbHVlQnlUeXBlIChYRk9STV9BdHRlbkV4cCk7
CiAgICAgICAgICAgIGlmIChhdHRlblN0YXJ0ICE9IGF0dGVuRW5kKSB7CiAgICAgICAgICAgICAg
ICBmcHJpbnRmIChmcCwKICAgICAgICAgICAgICAgICAgICAgICAgICJsaWdodCAlcyBhdHRlbnJh
bmdlICVnICVnICVnXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKils
Z3RQdHItPk5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBhdHRlblN0YXJ0LCBhdHRlbkVu
ZCwgYXR0ZW5FeHApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKCWlmIChsZ3RQdHItPl91c2Vt
YXBzTGlzdC5zaXplKCkpewogICAgCgkgICAgaW50CQlpOwoJCgkgICAgZm9yIChpbnQgaiA9IDA7
IGogPCBsZ3RQdHItPl91c2VtYXBzTGlzdC5zaXplKCk7IGorKyl7CiAgICAKCQlpZiAobGd0UHRy
LT5fdXNlbWFwc0xpc3Rbal0gPT0gX19udWxsICkKCQkgICAgY29udGludWU7CiAgICAKCQlmcHJp
bnRmIChmcCwKCQkJICJsaWdodCAlcyB1c2VtYXAgICIsCgkJCSAoY29uc3QgY2hhciAqKWxndFB0
ci0+TmFtZSk7CgkKCQlpZiAobGd0UHRyLT5fdXNlbWFwc0xpc3Rbal0tPl9yZWZsZWN0KQoJCSAg
ICBmcHJpbnRmIChmcCwiICVzICIsICJyZWZsZWN0ICIpOwoKCQlpZiAobGd0UHRyLT5fdXNlbWFw
c0xpc3Rbal0tPl93cmVuUGFyYW1zLnNpemUoKSkKCQkgICAgZm9yIChpID0gMDsgaSA8IGxndFB0
ci0+X3VzZW1hcHNMaXN0W2pdLT5fd3JlblBhcmFtcy5zaXplKCk7IGkrKykKCQkJZnByaW50ZiAo
ZnAsIiAlcyAiLCAoY29uc3QgY2hhciAqKWxndFB0ci0+X3VzZW1hcHNMaXN0W2pdLT5fd3JlblBh
cmFtc1tpXSk7CgkJZWxzZQoJCSAgICBpZiAoIWxndFB0ci0+X3VzZW1hcHNMaXN0W2pdLT5fcmVm
bGVjdCkKCQkJZnByaW50ZiAoZnAsIiAlcyAiLCAibm9uZSAiKTsKCQoJCWlmIChsZ3RQdHItPl91
c2VtYXBzTGlzdFtqXS0+R2V0TWFwKCkpCgkJICAgIGZwcmludGYgKGZwLCIgJXMgIiwgKGNvbnN0
IGNoYXIgKilsZ3RQdHItPl91c2VtYXBzTGlzdFtqXS0+R2V0TWFwKCktPk5hbWUpOwoJCgkJaWYg
KGxndFB0ci0+X3VzZW1hcHNMaXN0W2pdLT50YWdOYW1lICE9ICIiKQoJCSAgICBmcHJpbnRmIChm
cCwiJXMgJXMgIiwiIC11dnRhZyAiLChjb25zdCBjaGFyICopbGd0UHRyLT5fdXNlbWFwc0xpc3Rb
al0tPnRhZ05hbWUpOwoJCWVsc2UKCQkgICAgZnByaW50ZiAoZnAsIiVzIiwiIC11dnRhZyBvZmYg
Iik7CgkKCQlpZiAobGd0UHRyLT5fdXNlbWFwc0xpc3Rbal0tPl9ib3gpCgkJICAgIGZwcmludGYg
KGZwLCItYm94ICVzICIsIChjb25zdCBDSEFSKilsZ3RQdHItPl91c2VtYXBzTGlzdFtqXS0+Qm94
RGVzY3JpcHRpb24oMCApKTsKCgkJTV9NYXRyaXggcGljbTsKCQlwaWNtID0gCWxndFB0ci0+X3Vz
ZW1hcHNMaXN0W2pdLT5waWNtYXRyaXggKgoJCQlsZ3RQdHItPl91c2VtYXBzTGlzdFtqXS0+R2V0
V29ybGRIb21lbGVzc01hdHJpeCAoKTsKCQlmcHJpbnRmIChmcCwgIiAtcGljbWF0cml4ICIpOwoJ
CWZwcmludE1hdHJpeCAoZnAsIHBpY20pOwoJCgkJTV9NYXRyaXggcmVmbGVjdE1hdHJpeDsKCQlw
aWNtID0gCWxndFB0ci0+X3VzZW1hcHNMaXN0W2pdLT5fbWF0cml4OwoJCWlmIChsZ3RQdHItPl91
c2VtYXBzTGlzdFtqXS0+R2V0VGV4KCkgIT0gX19udWxsICkKCQkgICAgIHBpY20gPSBwaWNtICog
bGd0UHRyLT5fdXNlbWFwc0xpc3Rbal0tPkdldFRleCgpLT5HZXRXb3JsZEhvbWVsZXNzTWF0cml4
ICgpOwogICAgCQlyZWZsZWN0TWF0cml4ID0gTV9PcnRob25vcm1hbGl6ZShwaWNtKTsKICAgIAkJ
cmVmbGVjdE1hdHJpeFszXVswXSA9IHJlZmxlY3RNYXRyaXhbM11bMV0gPSByZWZsZWN0TWF0cml4
WzNdWzJdID0gMC4wOwoJCWZwcmludGYgKGZwLCAiIC1tYXRyaXggIik7CgkJZnByaW50TWF0cml4
IChmcCwgcmVmbGVjdE1hdHJpeCk7CgkKCQlmb3IgKGkgPSAwOyBpIDwgbGd0UHRyLT5fdXNlbWFw
c0xpc3Rbal0tPl93cmVuT3B0cy5zaXplKCk7IGkrKykKCQkgICAgZnByaW50ZiAoZnAsIiAlcyAi
LChjb25zdCBjaGFyICopbGd0UHRyLT5fdXNlbWFwc0xpc3Rbal0tPl93cmVuT3B0c1tpXSk7CgkK
ICAgICAgICAgICAgICAgIGZwcmludGYgKGZwLCAiXG4iKTsKCSAgICB9ICAKCX0KICAgIH0KfQoK
dm9pZCBDaG9yZHVtcDo6RG9Nb2RlbHMgKGludCBvYmpEaXNwKQp7CiAgICAgCiAgICBjb25zdCB2
ZWN0b3I8TlJIWV9jbGFzc01vZGVsICo+ICZhbGxNb2RlbHMgPSBXb3JsZC0+YWxsTW9kZWxzKCk7
CiAgICBmb3IgKHZlY3RvcjxOUkhZX2NsYXNzTW9kZWwgKj46OmNvbnN0X2l0ZXJhdG9yIG1pID0g
YWxsTW9kZWxzLmJlZ2luKCk7CiAgICAgICAgIG1pICE9IGFsbE1vZGVscy5lbmQoKTsgKyttaSkg
ewogICAgICAgIE5SSFlfY2xhc3NNb2RlbCAqbW9kZWxQdHIgPSAqbWk7CiAgICAgICAgcHJlcGFy
ZSAocmVmRnJhbWUsIG1vZGVsUHRyKTsKICAgICAgICBUd2luZSBvYmpEaXNwVHdpbmUgPSBnZXRP
YmpEaXNwIChvYmpEaXNwLCBtb2RlbFB0ciwgcmVmRnJhbWUpOwogICAgICAgIFR3aW5lIHByZWZp
eCA9ICJvYmplY3QgIiArIG1vZGVsUHRyLT5OYW1lOwogICAgICAgIGZwcmludGYgKGZwLCAiJXMg
JXNcbiIsCiAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKilwcmVmaXgsIChjb25zdCBjaGFy
ICopb2JqRGlzcFR3aW5lKTsKICAgICAgICBtb2RlbFB0ci0+T3ZlcnJpZGVGaWxlIChtb2RlbFB0
ci0+R2V0RmlsZUhlcm8gKCkpOwogICAgICAgIExpc3QgPFR3aW5lPiBmaWxlbmFtZXMgPSBtb2Rl
bFB0ci0+R2V0RmlsZW5hbWVzIChyZWZGcmFtZSk7CiAgICAgICAgaWYgKGZpbGVuYW1lcy5zaXpl
ICgpICYmIGZpbGVuYW1lc1swXSAhPSAiIikgewogICAgICAgICAgICBmcHJpbnRmIChmcCwgIiVz
IGZpbGUgJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopcHJlZml4LAog
ICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKWZpbGVuYW1lc1swXSk7CiAgICAgICAg
fQogICAgICAgIEJPT0xFQU4gZGVmb3JtaW5nT3B0aW9uID0gZ2V0RGVmb3JtaW5nT3B0aW9uICht
b2RlbFB0cik7CiAgICAgICAgaWYgKGRlZm9ybWluZ09wdGlvbikgewogICAgICAgICAgICBmcHJp
bnRmIChmcCwKICAgICAgICAgICAgICAgICAgICAgIiVzIGRlZm9ybWluZyAtY2hvckZpbGUgJXMg
LWZyYW1lICVnXG4iLAogICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKXByZWZpeCwK
ICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKilmaWxlbmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgcmVmRnJhbWUpOwogICAgICAgIH0KICAgICAgICBmcHJpbnRmIChmcCwgIiVzIG1h
dHJpeCAgICIsIChjb25zdCBjaGFyICopcHJlZml4KTsKICAgICAgICBmcHJpbnRNYXRyaXggKGZw
LCBtb2RlbFB0ci0+R2V0V29ybGRIb21lbGVzc01hdHJpeCAoKSk7CiAgICAgICAgZnByaW50ZiAo
ZnAsICJcbiIpOwogICAgICAgIGlmIChtb3Rpb25ibHVyKSB7CiAgICAgICAgICAgIHByZXBhcmUg
KHJlZkZyYW1lICsgMSwgbW9kZWxQdHIpOwogICAgICAgICAgICBmcHJpbnRmIChmcCwgIiVzIG5l
eHRtYXRyaXggICAiLCAoY29uc3QgY2hhciAqKXByZWZpeCk7CiAgICAgICAgICAgIGZwcmludE1h
dHJpeCAoZnAsIG1vZGVsUHRyLT5HZXRXb3JsZEhvbWVsZXNzTWF0cml4ICgpKTsKICAgICAgICAg
ICAgZnByaW50ZiAoZnAsICJcbiIpOwogICAgICAgIH0KICAgICAgICBtb2RlbFB0ci0+UmVzZXRP
dmVycmlkZSAoKTsKICAgIH0KCiAgICAgCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG1vdGlvbmJs
dXI7IGkrKykgewogICAgICAgIGZsb2F0IG1vbWVudCA9IFVfQ2FsY3VsYXRlU2xpY2VUaW1lKGks
IG1vdGlvbmJsdXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2h1dHRlclN0YXJ0LCBzaHV0dGVyRW5kKTsKICAgICAgICBmb3IgKHZlY3RvcjxOUkhZX2NsYXNz
TW9kZWwgKj46OmNvbnN0X2l0ZXJhdG9yIG1pID0gV29ybGQtPmFsbE1vZGVscygpLmJlZ2luKCk7
CiAgICAgICAgICAgICBtaSAhPSBXb3JsZC0+YWxsTW9kZWxzKCkuZW5kKCk7ICsrbWkpIHsKICAg
ICAgICAgICAgTlJIWV9jbGFzc01vZGVsICptb2RlbFB0ciA9ICptaTsKICAgICAgICAgICAgY2hh
ciBwcmVmaXhbMjU2XTsgICAgCiAgICAgICAgICAgIHNwcmludGYocHJlZml4LCAib2JqZWN0ICVz
X1NMSUNFXyVkIiwKICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKW1vZGVsUHRyLT5O
YW1lLCBpKTsKICAgICAgICAgICAgZnByaW50ZiAoZnAsCiAgICAgICAgICAgICAgICAgICAgICIl
cyAlc1xuIgogICAgICAgICAgICAgICAgICAgICAiJXMgdGltZXN0YW1wICVkXG4iCiAgICAgICAg
ICAgICAgICAgICAgICIlcyBtb21lbnQgJWdcbiIsCiAgICAgICAgICAgICAgICAgICAgIHByZWZp
eCwgIm9mZiIsCiAgICAgICAgICAgICAgICAgICAgIHByZWZpeCwgaSwKICAgICAgICAgICAgICAg
ICAgICAgcHJlZml4LCBtb21lbnQpOwogICAgICAgICAgICBmcHJpbnRmIChmcCwgIiVzIG1hdHJp
eCAgICIsIHByZWZpeCk7CiAgICAgICAgICAgIGlmIChnZXREZWZvcm1pbmdPcHRpb24obW9kZWxQ
dHIpKSB7CiAgICAgICAgICAgICAgICBmcHJpbnRNYXRyaXgoZnAsIE1fSWRlbnRpdHkpOwogICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcHJlcGFyZShyZWZGcmFtZSArIG1vbWVu
dCwgbW9kZWxQdHIpOwogICAgICAgICAgICAgICAgZnByaW50TWF0cml4KGZwLCBtb2RlbFB0ci0+
R2V0V29ybGRIb21lbGVzc01hdHJpeCgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmcHJp
bnRmIChmcCwgIlxuIik7CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIENob3JkdW1wOjpEb01hcHMg
KCkKewogICAgZm9yICh2ZWN0b3I8TlJIWV9jbGFzc01hcCAqPjo6Y29uc3RfaXRlcmF0b3IgbWkg
PSBXb3JsZC0+YWxsTWFwcygpLmJlZ2luKCk7CiAgICAgICAgIG1pICE9IFdvcmxkLT5hbGxNYXBz
KCkuZW5kKCk7ICsrbWkpIHsKICAgICAgICBOUkhZX2NsYXNzTWFwICptYXBQdHIgPSAqbWk7CiAg
ICAgICAgcHJlcGFyZSAocmVmRnJhbWUsIG1hcFB0cik7CiAgICAgICAgVHdpbmUgcHJlZml4ID0g
Im1hcCAiICsgbWFwUHRyLT5OYW1lICsgIiAiOwoKICAgICAgICAgCiAgICAgICAgZnByaW50ZiAo
ZnAsICIlcyBmaWxlICVzIiwKICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKXByZWZpeCwK
ICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKW1hcFB0ci0+R2V0RmlsZU5hbWUgKCkpOwoJ
aWYgKG1hcFB0ci0+X2NyZWF0ZURwdCkKCSAgICBmcHJpbnRmIChmcCwgIiAtY3JlYXRlRHB0ICIp
OwogICAgICAgIE5SSFlfY2xhc3NDaGFubmVsICogY2hhblB0ciA9IG1hcFB0ci0+RmluZE5vbkxp
bmVhckNoYW5uZWwgKFhGT1JNX0ZpbGUpOwogICAgICAgIGlmIChjaGFuUHRyKQogICAgICAgICAg
ICBmcHJpbnRmIChmcCwgIiAtYW5pbWF0aW5nICVkXG4iLAogICAgICAgICAgICAgICAgICAgICBt
YXBQdHItPkdldEN1cnJlbnRNYXAgKGNoYW5QdHItPkdldFZhbHVlIChyZWZGcmFtZSkpLT5pbmRl
eCk7CiAgICAgICAgZWxzZQogICAgICAgICAgICBmcHJpbnRmIChmcCwgIlxuIik7CgogICAgICAg
ICAKICAgICAgICBmcHJpbnRmIChmcCwgIiVzICVzXG4iLAogICAgICAgICAgICAgICAgIChjb25z
dCBjaGFyICopcHJlZml4LAogICAgICAgICAgICAgICAgIG1hcFB0ci0+b3V0VVZhcmVhID8gIm5v
cm1hbCIgOiAiYmxlZWQiKTsKCiAgICAgICAgIAogICAgICAgIGZsb2F0IGNyb3AwID0gbWFwUHRy
LT5HZXRDaGFubmVsVmFsdWVCeVR5cGUgKFhGT1JNX3hPcmlnaW4pOwogICAgICAgIGZsb2F0IGNy
b3AxID0gbWFwUHRyLT5HZXRDaGFubmVsVmFsdWVCeVR5cGUgKFhGT1JNX3lPcmlnaW4pOwogICAg
ICAgIGZsb2F0IGNyb3AyID0gY3JvcDAgKyBtYXBQdHItPkdldENoYW5uZWxWYWx1ZUJ5VHlwZSAo
WEZPUk1fb3JpZ1dpZHRoKTsKICAgICAgICBpZiAoY3JvcDIgPiAxKSBjcm9wMiA9IDE7CiAgICAg
ICAgZmxvYXQgY3JvcDMgPSBjcm9wMSArIG1hcFB0ci0+R2V0Q2hhbm5lbFZhbHVlQnlUeXBlIChY
Rk9STV9vcmlnSGVpZ2h0KTsKICAgICAgICBpZiAoY3JvcDMgPiAxKSBjcm9wMyA9IDE7CiAgICAg
ICAgZnByaW50ZiAoZnAsICIlcyBjcm9wICVnICVnICVnICVnXG4iLAogICAgICAgICAgICAgICAg
IChjb25zdCBjaGFyICopcHJlZml4LAogICAgICAgICAgICAgICAgIGNyb3AwLCBjcm9wMSwgY3Jv
cDIsIGNyb3AzKTsKCglmb3IgKGludCBpID0gMDsgaSA8IG1hcFB0ci0+X3dyZW5PcHRzLnNpemUo
KTsgaSsrKQoJICAgIGZwcmludGYgKGZwLCIlcyAlc1xuIiwgKGNvbnN0IGNoYXIgKilwcmVmaXgs
CgkJKGNvbnN0IGNoYXIgKiltYXBQdHItPl93cmVuT3B0c1tpXSk7CiAgICB9Cn0KCnZvaWQgQ2hv
cmR1bXA6OkRvTWF0ZXJpYWxzICgpCnsKICAgIGZvciAodmVjdG9yPE5SSFlfY2xhc3NNYXRlcmlh
bCAqPjo6Y29uc3RfaXRlcmF0b3IgbWkgPSBXb3JsZC0+YWxsTWF0ZXJpYWxzKCkuYmVnaW4oKTsK
ICAgICAgICAgbWkgIT0gV29ybGQtPmFsbE1hdGVyaWFscygpLmVuZCgpOyArK21pKSB7CiAgICAg
ICAgTlJIWV9jbGFzc01hdGVyaWFsICptdGxQdHIgPSAqbWk7CiAgICAgICAgcHJlcGFyZSAocmVm
RnJhbWUsIG10bFB0cik7CiAgICAgICAgVHdpbmUgdG1wTmFtZSA9IG10bFB0ci0+TmFtZTsKICAg
ICAgICAgCiAgICAgICAgY2hhciAqa2lsbCA9IHN0cnN0cih0bXBOYW1lLCAiX01UTCIpOwogICAg
ICAgIGlmIChraWxsKSAqa2lsbCA9ICdcMCc7CgogICAgICAgIFR3aW5lIHByZWZpeCA9IChUd2lu
ZSkibWF0ZXJpYWwgIiArIHRtcE5hbWUgKyAiICI7CgogICAgICAgIGZwcmludGYgKGZwLCAiJXMg
S2EgJWcgJWcgJWcgJWdcbiIsCiAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKilwcmVmaXgs
CiAgICAgICAgICAgICAgICAgbXRsUHRyLT5HZXRDaGFubmVsVmFsdWVCeVR5cGUgKFhGT1JNX0th
UmVkKSwKICAgICAgICAgICAgICAgICBtdGxQdHItPkdldENoYW5uZWxWYWx1ZUJ5VHlwZSAoWEZP
Uk1fS2FHcmVlbiksCiAgICAgICAgICAgICAgICAgbXRsUHRyLT5HZXRDaGFubmVsVmFsdWVCeVR5
cGUgKFhGT1JNX0thQmx1ZSksCiAgICAgICAgICAgICAgICAgbXRsUHRyLT5HZXRDaGFubmVsVmFs
dWVCeVR5cGUgKFhGT1JNX0thSW50ZW5zKSk7CiAgICAgICAgZnByaW50ZiAoZnAsICIlcyBLZCAl
ZyAlZyAlZyAlZ1xuIiwKICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKXByZWZpeCwKICAg
ICAgICAgICAgICAgICBtdGxQdHItPkdldENoYW5uZWxWYWx1ZUJ5VHlwZSAoWEZPUk1fS2RSZWQp
LAogICAgICAgICAgICAgICAgIG10bFB0ci0+R2V0Q2hhbm5lbFZhbHVlQnlUeXBlIChYRk9STV9L
ZEdyZWVuKSwKICAgICAgICAgICAgICAgICBtdGxQdHItPkdldENoYW5uZWxWYWx1ZUJ5VHlwZSAo
WEZPUk1fS2RCbHVlKSwKICAgICAgICAgICAgICAgICBtdGxQdHItPkdldENoYW5uZWxWYWx1ZUJ5
VHlwZSAoWEZPUk1fS2RJbnRlbnMpKTsKICAgICAgICBmcHJpbnRmIChmcCwgIiVzIEtzICVnICVn
ICVnICVnXG4iLAogICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopcHJlZml4LAogICAgICAg
ICAgICAgICAgIG10bFB0ci0+R2V0Q2hhbm5lbFZhbHVlQnlUeXBlIChYRk9STV9Lc1JlZCksCiAg
ICAgICAgICAgICAgICAgbXRsUHRyLT5HZXRDaGFubmVsVmFsdWVCeVR5cGUgKFhGT1JNX0tzR3Jl
ZW4pLAogICAgICAgICAgICAgICAgIG10bFB0ci0+R2V0Q2hhbm5lbFZhbHVlQnlUeXBlIChYRk9S
TV9Lc0JsdWUpLAogICAgICAgICAgICAgICAgIG10bFB0ci0+R2V0Q2hhbm5lbFZhbHVlQnlUeXBl
IChYRk9STV9Lc0ludGVucykpOwogICAgICAgIGZwcmludGYgKGZwLCAiJXMgTnMgJWdcbiIsCiAg
ICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKilwcmVmaXgsCiAgICAgICAgICAgICAgICAgbXRs
UHRyLT5HZXRDaGFubmVsVmFsdWVCeVR5cGUgKFhGT1JNX05zKSk7CiAgICAgICAgZnByaW50ZiAo
ZnAsICIlcyBLciAlZyAlZyAlZyAlZ1xuIiwKICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAq
KXByZWZpeCwKICAgICAgICAgICAgICAgICBtdGxQdHItPkdldENoYW5uZWxWYWx1ZUJ5VHlwZSAo
WEZPUk1fS3JSZWQpLAogICAgICAgICAgICAgICAgIG10bFB0ci0+R2V0Q2hhbm5lbFZhbHVlQnlU
eXBlIChYRk9STV9LckdyZWVuKSwKICAgICAgICAgICAgICAgICBtdGxQdHItPkdldENoYW5uZWxW
YWx1ZUJ5VHlwZSAoWEZPUk1fS3JCbHVlKSwKICAgICAgICAgICAgICAgICBtdGxQdHItPkdldENo
YW5uZWxWYWx1ZUJ5VHlwZSAoWEZPUk1fS3JJbnRlbnMpKTsKICAgICAgICBmcHJpbnRmIChmcCwg
IiVzIEtvICVnICVnICVnXG4iLAogICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopcHJlZml4
LAogICAgICAgICAgICAgICAgIG10bFB0ci0+R2V0Q2hhbm5lbFZhbHVlQnlUeXBlIChYRk9STV9L
b01pbiksCiAgICAgICAgICAgICAgICAgbXRsUHRyLT5HZXRDaGFubmVsVmFsdWVCeVR5cGUgKFhG
T1JNX0tvTWF4KSwKICAgICAgICAgICAgICAgICBtdGxQdHItPkdldENoYW5uZWxWYWx1ZUJ5VHlw
ZSAoWEZPUk1fS29FeHApKTsKICAgICAgICBmcHJpbnRmIChmcCwgIiVzIGlsbHVtICVkXG4iLAog
ICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopcHJlZml4LAogICAgICAgICAgICAgICAgIGlu
dCAobXRsUHRyLT5HZXRDaGFubmVsVmFsdWVCeVR5cGUgKFhGT1JNX0lsbHVtKSkpOwoKCWlmICht
dGxQdHItPl91c2VtYXBzTGlzdC5zaXplKCkpewogICAgCgkgICAgaW50CQlpOwoJCgkgICAgZm9y
IChpbnQgaiA9IDA7IGogPCBtdGxQdHItPl91c2VtYXBzTGlzdC5zaXplKCk7IGorKyl7CiAgICAK
CQlpZiAobXRsUHRyLT5fdXNlbWFwc0xpc3Rbal0gPT0gX19udWxsICkKCQkgICAgY29udGludWU7
CiAgICAKCQlmcHJpbnRmIChmcCwKCQkJICIlcyB1c2VtYXAgICIsCgkJCSAoY29uc3QgY2hhciAq
KXByZWZpeCk7CgkKCQlpZiAobXRsUHRyLT5fdXNlbWFwc0xpc3Rbal0tPl9yZWZsZWN0KQoJCSAg
ICBmcHJpbnRmIChmcCwiICVzICIsICJyZWZsZWN0ICIpOwoKCQlpZiAobXRsUHRyLT5fdXNlbWFw
c0xpc3Rbal0tPl93cmVuUGFyYW1zLnNpemUoKSkKCQkgICAgZm9yIChpID0gMDsgaSA8IG10bFB0
ci0+X3VzZW1hcHNMaXN0W2pdLT5fd3JlblBhcmFtcy5zaXplKCk7IGkrKykKCQkJZnByaW50ZiAo
ZnAsIiAlcyAiLCAoY29uc3QgY2hhciAqKW10bFB0ci0+X3VzZW1hcHNMaXN0W2pdLT5fd3JlblBh
cmFtc1tpXSk7CgkJZWxzZQoJCSAgICBpZiAoIW10bFB0ci0+X3VzZW1hcHNMaXN0W2pdLT5fcmVm
bGVjdCkKCQkJZnByaW50ZiAoZnAsIiAlcyAiLCAibm9uZSAiKTsKCQoJCWlmIChtdGxQdHItPl91
c2VtYXBzTGlzdFtqXS0+R2V0TWFwKCkpCgkJICAgIGZwcmludGYgKGZwLCIgJXMgIiwgKGNvbnN0
IGNoYXIgKiltdGxQdHItPl91c2VtYXBzTGlzdFtqXS0+R2V0TWFwKCktPk5hbWUpOwoJCgkJaWYg
KG10bFB0ci0+X3VzZW1hcHNMaXN0W2pdLT50YWdOYW1lICE9ICIiKQoJCSAgICBmcHJpbnRmIChm
cCwiJXMgJXMgIiwiIC11dnRhZyAiLChjb25zdCBjaGFyICopbXRsUHRyLT5fdXNlbWFwc0xpc3Rb
al0tPnRhZ05hbWUpOwoJCWVsc2UKCQkgICAgZnByaW50ZiAoZnAsIiVzIiwiIC11dnRhZyBvZmYg
Iik7CgkKCQlpZiAobXRsUHRyLT5fdXNlbWFwc0xpc3Rbal0tPl9ib3gpCgkJICAgIGZwcmludGYg
KGZwLCItYm94ICVzICIsIChjb25zdCBDSEFSKiltdGxQdHItPl91c2VtYXBzTGlzdFtqXS0+Qm94
RGVzY3JpcHRpb24oMCApKTsKCgkJTV9NYXRyaXggcGljbTsKCQlwaWNtID0gCW10bFB0ci0+X3Vz
ZW1hcHNMaXN0W2pdLT5waWNtYXRyaXggKgoJCQltdGxQdHItPl91c2VtYXBzTGlzdFtqXS0+R2V0
V29ybGRIb21lbGVzc01hdHJpeCAoKTsKCQlmcHJpbnRmIChmcCwgIiAtcGljbWF0cml4ICIpOwoJ
CWZwcmludE1hdHJpeCAoZnAsIHBpY20pOwoKCQlNX01hdHJpeCByZWZsZWN0TWF0cml4OwoJCXBp
Y20gPSAJbXRsUHRyLT5fdXNlbWFwc0xpc3Rbal0tPl9tYXRyaXg7CgkJaWYgKG10bFB0ci0+X3Vz
ZW1hcHNMaXN0W2pdLT5HZXRUZXgoKSAhPSBfX251bGwgKQoJCSAgICAgcGljbSA9IHBpY20gKiBt
dGxQdHItPl91c2VtYXBzTGlzdFtqXS0+R2V0VGV4KCktPkdldFdvcmxkSG9tZWxlc3NNYXRyaXgg
KCk7CiAgICAJCXJlZmxlY3RNYXRyaXggPSBNX09ydGhvbm9ybWFsaXplKHBpY20pOwogICAgCQly
ZWZsZWN0TWF0cml4WzNdWzBdID0gcmVmbGVjdE1hdHJpeFszXVsxXSA9IHJlZmxlY3RNYXRyaXhb
M11bMl0gPSAwLjA7CgkJZnByaW50ZiAoZnAsICIgLW1hdHJpeCAiKTsKCQlmcHJpbnRNYXRyaXgg
KGZwLCByZWZsZWN0TWF0cml4KTsKCQoJCWZvciAoaSA9IDA7IGkgPCBtdGxQdHItPl91c2VtYXBz
TGlzdFtqXS0+X3dyZW5PcHRzLnNpemUoKTsgaSsrKQoJCSAgICBmcHJpbnRmIChmcCwiICVzICIs
KGNvbnN0IGNoYXIgKiltdGxQdHItPl91c2VtYXBzTGlzdFtqXS0+X3dyZW5PcHRzW2ldKTsKCQog
ICAgICAgICAgICAgICAgZnByaW50ZiAoZnAsICJcbiIpOwoJICAgIH0gIAoJfQogICAgfQp9CgpC
T09MRUFOIE5SSFlBQ0NFU1NfQ2hvcmR1bXAgKAogICAgTlJIWV9Xb3JsZCAqd29ybGRQdHIsCiAg
ICBjb25zdCBUd2luZSAmZmlsZW5hbWUsCiAgICBmbG9hdCBmcmFtZSwKICAgIGNvbnN0IFR3aW5l
ICZjYW1OYW1lLAogICAgRklMRSAqZnAsCiAgICBpbnQgb2JqZGlzcCwKICAgIGludCBtb3Rpb25i
bHVyLAogICAgZmxvYXQgc2h1dHRlclN0YXJ0LAogICAgZmxvYXQgc2h1dHRlckVuZCwKICAgIEJP
T0xFQU4gbGVmdGV5ZSwKICAgIEJPT0xFQU4gcmlnaHRleWUsCiAgICBCT09MRUFOIG1hdGVyaWFs
cywKICAgIEJPT0xFQU4gbWFwcywKICAgIEJPT0xFQU4gbGlnaHRzT25seSwKICAgIEJPT0xFQU4g
b2JqZWN0c09ubHksCiAgICBjb25zdCBMaXN0PFR3aW5lPiAmZGVmb3JtaW5nT2JqZWN0cwogICAg
KQp7CiAgICBCT09MRUFOIHN1Y2Nlc3MgPSAxIDsKICAgIHdvcmxkUHRyLT5BdHRhY2hUb1dvcmxk
KGZyYW1lKTsKCiAgICBDaG9yZHVtcCBkdW1wZXIoZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAg
ICAgZnJhbWUsCiAgICAgICAgICAgICAgICAgICAgY2FtTmFtZSwKICAgICAgICAgICAgICAgICAg
ICBmcCwKICAgICAgICAgICAgICAgICAgICBtb3Rpb25ibHVyLAogICAgICAgICAgICAgICAgICAg
IHNodXR0ZXJTdGFydCwKICAgICAgICAgICAgICAgICAgICBzaHV0dGVyRW5kLAogICAgICAgICAg
ICAgICAgICAgIGRlZm9ybWluZ09iamVjdHMpOwogICAgaWYgKGxpZ2h0c09ubHkpIHsKICAgICAg
ICBkdW1wZXIuRG9MaWdodHMoKTsKICAgIH0gZWxzZSBpZiAob2JqZWN0c09ubHkpIHsKICAgICAg
ICBkdW1wZXIuRG9Nb2RlbHMob2JqZGlzcCk7CiAgICB9IGVsc2UgewogICAgICAgICAKICAgICAg
ICBkdW1wZXIuRG9DYW1lcmEoKTsKICAgICAgICBpZiAobGVmdGV5ZSB8fCByaWdodGV5ZSkgZHVt
cGVyLkRvU3RlcmVvKGxlZnRleWUsIHJpZ2h0ZXllKTsKICAgICAgICBkdW1wZXIuRG9MaWdodHMo
KTsKICAgICAgICBkdW1wZXIuRG9Nb2RlbHMob2JqZGlzcCk7CiAgICAgICAgaWYgKG1hcHMpIGR1
bXBlci5Eb01hcHMoKTsKICAgICAgICBpZiAobWF0ZXJpYWxzKSBkdW1wZXIuRG9NYXRlcmlhbHMo
KTsKICAgIH0KCiAgICByZXR1cm4gKHN1Y2Nlc3MpOwp9CgpCT09MRUFOIE5SSFlBQ0NFU1NfVmNt
ZCAoCiAgICBOUkhZX1dvcmxkICp3b3JsZFB0ciwKICAgIGZsb2F0IGZyYW1lLAogICAgY29uc3Qg
VHdpbmUgJmNvbW1hbmQsCiAgICBjb25zdCBUd2luZSAmYXJncwogICAgKQp7CiAgICBpbnQgc3Vj
Y2VzczsKICAgIHdvcmxkUHRyLT5BdHRhY2hUb1dvcmxkKGZyYW1lKTsKICAgIE5SSFlfQ09NTUFO
RCAqdGFibGUgPSBOUkhZX0ZpbmRDb21tYW5kKGNvbW1hbmQpOwogICAgaWYgKHRhYmxlKSB7CiAg
ICAgICAgaWYgKHRhYmxlLT50eXBlID09IE5SSFlfQ09NTUFORDo6V09SRFMpIHsKICAgICAgICAg
ICAgTGlzdDxUd2luZT4gd29yZHM7CiAgICAgICAgICAgIG5yaHlfcGFyc2VJbnRvV29yZHMoYXJn
cywgd29yZHMpOwogICAgICAgICAgICBMaXN0PGNvbnN0IGNoYXIgKj4gYXJndW1lbnRzOwogICAg
ICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHdvcmRzWzBdKTsKICAgICAgICAgICAgVHdpbmUgb3Bl
cjsKICAgICAgICAgICAgaWYgKHdvcmRzLnNpemUoKSA+IDEpIHsKICAgICAgICAgICAgICAgIGlm
ICgod29yZHNbMV1bMF0gPT0gJy0nKSAmJgogICAgICAgICAgICAgICAgICAgICghICggKCAoICgq
KCAoY29uc3QgY2hhciAqKXdvcmRzWzFdICkgPT0gJy0nKSB8fCAoKiggKGNvbnN0IGNoYXIgKil3
b3Jkc1sxXSApID09ICcrJykgKSAgICAgICAgICAgICAgICAgICYmICgoX19jdHlwZV9iWyhpbnQp
ICggKCAqKCAoIChjb25zdCBjaGFyICopd29yZHNbMV0gKSsxICkgKSApXSAmICh1bnNpZ25lZCBz
aG9ydCBpbnQpICAgX0lTZGlnaXQgKSAgIHx8ICgqKCAoIChjb25zdCBjaGFyICopd29yZHNbMV0g
KSsxICkgPT0gJy4nICYmIChfX2N0eXBlX2JbKGludCkgKCAoICooKCAoIChjb25zdCBjaGFyICop
d29yZHNbMV0gKSsxICkrMSkgKSApXSAmICh1bnNpZ25lZCBzaG9ydCBpbnQpICAgX0lTZGlnaXQg
KSAgICkpICApIHx8ICggKChfX2N0eXBlX2JbKGludCkgKCAoICooICAoY29uc3QgY2hhciAqKXdv
cmRzWzFdICApICkgKV0gJiAodW5zaWduZWQgc2hvcnQgaW50KSAgIF9JU2RpZ2l0ICkgICB8fCAo
KiggIChjb25zdCBjaGFyICopd29yZHNbMV0gICkgPT0gJy4nICYmIChfX2N0eXBlX2JbKGludCkg
KCAoICooKCAgKGNvbnN0IGNoYXIgKil3b3Jkc1sxXSAgKSsxKSApICldICYgKHVuc2lnbmVkIHNo
b3J0IGludCkgICBfSVNkaWdpdCApICAgKSkgICkgfHwgKCAoKiggKGNvbnN0IGNoYXIgKil3b3Jk
c1sxXSApID09ICcsJykgKSB8fCAoICgqKCAoY29uc3QgY2hhciAqKXdvcmRzWzFdICkgPT0gJz8n
KSApICkgKSkgewogICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQod29yZHNbMV0p
OwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBvcGVyID0gd29y
ZHNbMV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDI7IGkgPCB3b3Jkcy5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgICAgYXJndW1l
bnRzLmFwcGVuZCh3b3Jkc1tpXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW50IHJldFZh
bCA9ICgqdGFibGUtPiB4LmZ1bmNPZldvcmRzICkob3BlciwgYXJndW1lbnRzKTsKICAgICAgICAg
ICAgc3VjY2VzcyA9IChyZXRWYWwgPyAwICA6IDEgKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1
cm4gKHN1Y2Nlc3MpOwp9Cg==

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]