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]

optimization/3522: Internal error / segmentation fault with -O3



>Number:         3522
>Category:       optimization
>Synopsis:       Internal error / segmentation fault with -O3
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Sun Jul 01 18:16:00 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Kai Engert
>Release:        3.0
>Organization:
>Environment:
i686-pc-linux-gnu  RedHat 7.1  Linux 2.4.3-12  
>Description:
c++: Warning: -pipe ignored because -save-temps specified
Reading specs from /usr/local/gcc-3.0/lib/gcc-lib/i686-pc-linux-gnu/3.0/specs
Configured with: ../gcc-3.0/configure --enable-shared --enable-threads : (reconfigured) ../gcc-3.0/configure --enable-shared --enable-threads --prefix=/usr/local/gcc-3.0
Thread model: posix
gcc version 3.0
 /usr/local/gcc-3.0/lib/gcc-lib/i686-pc-linux-gnu/3.0/cpp0 -lang-c++ -D__GNUG__=3 -D__GXX_DEPRECATED -D__GXX_ABI_VERSION=100 -v -I../../../../dist/include -I../../../../dist/include -I/home/kai/m/092/mozilla-optimized/dist/include/nspr -I../../../../../mozilla/layout/html/forms/src/../../../base/src -I../../../../../mozilla/layout/html/forms/src/../../base/src -I../../../../../mozilla/layout/html/forms/src/../../style/src -I../../../../../mozilla/layout/html/forms/src/../../../xul/base/src -I/usr/X11R6/include -I/usr/X11R6/include -I/usr/X11R6/include -D__GNUC__=3 -D__GNUC_MINOR__=0 -D__GNUC_PATCHLEVEL__=0 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__OPTIMIZE__ -D__STDC_HOSTED__=1 -Wall -Wconversion -Wpointer-arith -Wbad-function-cast -Wcast-align -Woverloaded-virtual -Wsynth -Wno-long-long -D_GNU_SOURCE -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i686__ -D__tune_pentiumpro__ -D__PIC__ -D__pic__ -D_REENTRANT -DOSTYPE="Linux2.4" -DOSARCH="Linux" -DOJI -D_IMPL_NS_HTML -DENDER_LITE -DNDEBUG -DTRIMMED -DMOZILLA_CLIENT -include ../../../../config-defs.h -MD .deps/nsFormControlHelper.pp ../../../../../mozilla/layout/html/forms/src/nsFormControlHelper.cpp nsFormControlHelper.ii
GNU CPP version 3.0 (cpplib) (i386 Linux/ELF)
ignoring nonexistent directory "/usr/local/include"
ignoring nonexistent directory "/usr/local/gcc-3.0/i686-pc-linux-gnu/include"
ignoring duplicate directory "../../../../dist/include"
ignoring duplicate directory "/usr/X11R6/include"
ignoring duplicate directory "/usr/X11R6/include"
#include "..." search starts here:
#include <...> search starts here:
 ../../../../dist/include
 /home/kai/m/092/mozilla-optimized/dist/include/nspr
 ../../../../../mozilla/layout/base/src
 ../../../../../mozilla/layout/html/base/src
 ../../../../../mozilla/layout/html/style/src
 ../../../../../mozilla/layout/xul/base/src
 /usr/X11R6/include
 /usr/local/gcc-3.0/include/g++-v3
 /usr/local/gcc-3.0/include/g++-v3/i686-pc-linux-gnu
 /usr/local/gcc-3.0/include/g++-v3/backward
 /usr/local/gcc-3.0/lib/gcc-lib/i686-pc-linux-gnu/3.0/include
 /usr/include
End of search list.
 /usr/local/gcc-3.0/lib/gcc-lib/i686-pc-linux-gnu/3.0/cc1plus -fpreprocessed nsFormControlHelper.ii -quiet -dumpbase nsFormControlHelper.cpp -O3 -Wall -Wconversion -Wpointer-arith -Wbad-function-cast -Wcast-align -Woverloaded-virtual -Wsynth -Wno-long-long -version -fPIC -fno-rtti -fno-exceptions -o nsFormControlHelper.s
GNU CPP version 3.0 (cpplib) (i386 Linux/ELF)
GNU C++ version 3.0 (i686-pc-linux-gnu)
	compiled by GNU C version 3.0.
../../../../../mozilla/layout/html/forms/src/nsFormControlHelper.cpp: In static 
   member function `static void 
   nsFormControlHelper::PaintFixedSizeCheckMark(nsIRenderingContext&, float)':
../../../../../mozilla/layout/html/forms/src/nsFormControlHelper.cpp:733: Internal
   error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
>How-To-Repeat:
Compile the attached file with the following command line:

c++ -c -fPIC -fno-rtti -fno-exceptions -Wall -Wconversion -Wpointer-arith -Wbad-function-cast -Wcast-align -Woverloaded-virtual -Wsynth -Wno-long-long -pipe -pthread -O3 nsFormControlHelper.ii
>Fix:
Do not use -O3
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="nsFormControlHelper.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="nsFormControlHelper.ii"

IyAxICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Zvcm1zL3NyYy9uc0Zvcm1D
b250cm9sSGVscGVyLmNwcCIKIyAxICIuLi8uLi8uLi8uLi9jb25maWctZGVmcy5oIiAxCiMgMiAi
Li4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQvaHRtbC9mb3Jtcy9zcmMvbnNGb3JtQ29udHJv
bEhlbHBlci5jcHAiIDIKIyAyMiAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQvaHRtbC9m
b3Jtcy9zcmMvbnNGb3JtQ29udHJvbEhlbHBlci5jcHAiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zQ09NUHRyLmgiIDEKIyA0NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09N
UHRyLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVidWcuaCIgMQojIDI2ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNEZWJ1Zy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0NvbS5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlYnVn
LmgiIDIKIyAxICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRl
L25zcHIvcHJ0eXBlcy5oIiAxCiMgMzkgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXpl
ZC9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCiMgMSAiL2hvbWUva2FpL20vMDkyL21vemls
bGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3ByY3B1Y2ZnLmgiIDEKIyA0MCAiL2hvbWUv
a2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIg
MgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDcgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVm
IGludCBwdHJkaWZmX3Q7CiMgMTk5ICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgc2l6ZV90OwojIDQzICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9p
bmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAyCiMgMjM0ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1v
cHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIgpleHRlcm4gIkMiIHsKIyAyNDQg
Ii9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcnR5
cGVzLmgiCnR5cGVkZWYgdW5zaWduZWQgY2hhciBQUlVpbnQ4OwojIDI1OCAiL2hvbWUva2FpL20v
MDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRl
ZiBzaWduZWQgY2hhciBQUkludDg7CiMgMjcxICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRp
bWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0
IFBSVWludDE2Owp0eXBlZGVmIHNob3J0IFBSSW50MTY7CiMgMjg0ICIvaG9tZS9rYWkvbS8wOTIv
bW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIgp0eXBlZGVmIHVu
c2lnbmVkIGludCBQUlVpbnQzMjsKdHlwZWRlZiBpbnQgUFJJbnQzMjsKIyAzMTggIi9ob21lL2th
aS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5
cGVkZWYgbG9uZyBsb25nIFBSSW50NjQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIFBSVWlu
dDY0OwojIDM0MiAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVk
ZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiBpbnQgUFJJbnRuOwp0eXBlZGVmIHVuc2lnbmVkIGlu
dCBQUlVpbnRuOwojIDM1MyAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3Qv
aW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiBkb3VibGUgUFJGbG9hdDY0OwoKCgoKCgp0
eXBlZGVmIHNpemVfdCBQUlNpemU7CgoKCgoKCgp0eXBlZGVmIFBSSW50MzIgUFJPZmZzZXQzMjsK
dHlwZWRlZiBQUkludDY0IFBST2Zmc2V0NjQ7CgoKCgoKCgp0eXBlZGVmIHB0cmRpZmZfdCBQUlB0
cmRpZmY7CgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgUFJVcHRyZGlmZjsKIyAzOTUgIi9o
b21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVz
LmgiCnR5cGVkZWYgUFJJbnRuIFBSQm9vbDsKIyA0MDUgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxh
LW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVkZWYgUFJVaW50OCBQ
UlBhY2tlZEJvb2w7CgoKCgoKdHlwZWRlZiBlbnVtIHsgUFJfRkFJTFVSRSA9IC0xLCBQUl9TVUND
RVNTID0gMCB9IFBSU3RhdHVzOwojIDQyNCAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1p
emVkL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiBsb25nIFBSV29yZDsKdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIFBSVXdvcmQ7CiMgNDY2ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxs
YS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIgojIDEgIi9ob21lL2thaS9t
LzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBl
cy5oIiAxCiMgMjkgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1
ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIgp0eXBlZGVmIFBSVWludG4gdWludG47Cgp0eXBl
ZGVmIFBSSW50biBpbnRuOwojIDUzICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQv
ZGlzdC9pbmNsdWRlL25zcHIvb2Jzb2xldGUvcHJvdHlwZXMuaCIKIyAxICIvdXNyL2luY2x1ZGUv
c3lzL3R5cGVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjgzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiMgMjg0ICIvdXNyL2luY2x1
ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzExICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzCiMgMzEyICIvdXNyL2luY2x1ZGUvZmVhdHVy
ZXMuaCIgMiAzCiMgMjcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgpleHRlcm4gIkMi
IHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVk
ZS9iaXRzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcg
Ii91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4w
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMK
IyAzMCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiB1bnNpZ25lZCBj
aGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25nOwoKX19l
eHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsKX19l
eHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CiMgNDkgIi91c3IvaW5j
bHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRl
ZiB1bnNpZ25lZCBjaGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50
MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWdu
ZWQgaW50IF9faW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCl9fZXh0
ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0ZW5z
aW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0eXBlZGVm
IF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsKdHlwZWRl
ZiBfX3VfaW50IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVmIF9fdV9s
b25nIF9faW5vX3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3VfaW50IF9f
bmxpbmtfdDsKdHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90IF9fbG9m
Zl90Owp0eXBlZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5cGVkZWYg
X191X2xvbmcgX19ybGltX3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX3JsaW02NF90Owp0eXBlZGVm
IF9fdV9pbnQgX19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAg
fSBfX2ZzaWRfdDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqX19jYWRk
cl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3Vz
ZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGlu
dCBfX3N3YmxrX3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCgp0eXBlZGVmIGludCBf
X2Nsb2NraWRfdDsKCgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoKCgoKCnR5cGVkZWYgaW50IF9f
a2V5X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKCnR5cGVk
ZWYgbG9uZyBpbnQgX19ibGtzaXplX3Q7CgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrY250X3Q7
CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2Js
a2NudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3Vf
bG9uZyBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRfdDsKCgp0
eXBlZGVmIF9fdV9xdWFkX3QgX19pbm82NF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgX19vZmY2NF90
OwoKCnR5cGVkZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
aW50IF9fdF91c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBlZGVmIHVu
c2lnbmVkIGludCBfX3NvY2tsZW5fdDsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVh
ZHR5cGVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1ZGUvYml0
cy9zY2hlZC5oIiAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRfcHJp
b3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDIgMwoK
CnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAgaW50IF9f
c3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3QgKl9w
dGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MKewogIGlu
dCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3NjaGVkX3Bh
cmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAg
c2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFj
a2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0eXBlZGVm
IHN0cnVjdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9wdGhyZWFk
X2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7
CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQg
aW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21fcmVzZXJ2
ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAgaW50IF9f
bV9raW5kOwogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhyZWFkX211
dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRocmVhZF9t
dXRleGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKCgp0eXBlZGVmIHN0
cnVjdCBfcHRocmVhZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fcndf
bG9jazsKICBpbnQgX19yd19yZWFkZXJzOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVyOwog
IF9wdGhyZWFkX2Rlc2NyIF9fcndfcmVhZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndf
d3JpdGVfd2FpdGluZzsKICBpbnQgX19yd19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7Cn0gcHRo
cmVhZF9yd2xvY2tfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2xvY2traW5kOwogIGlu
dCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVmIHZvbGF0aWxl
IGludCBwdGhyZWFkX3NwaW5sb2NrX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIHN0cnVjdCBfcHRo
cmVhZF9mYXN0bG9jayBfX2JhX2xvY2s7CiAgaW50IF9fYmFfcmVxdWlyZWQ7CiAgaW50IF9fYmFf
cHJlc2VudDsKICBfcHRocmVhZF9kZXNjciBfX2JhX3dhaXRpbmc7Cn0gcHRocmVhZF9iYXJyaWVy
X3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9iYXJyaWVy
YXR0cl90OwoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcHRocmVhZF90OwojIDE0NCAi
L3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvdHlw
ZXMuaCIgMiAzCgoKdHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVf
c2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5
cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVk
ZWYgX19mc2lkX3QgZnNpZF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVm
IF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5cGVkZWYgX19pbm82NF90IGlubzY0X3Q7CgoKCgp0eXBl
ZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVm
IF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBl
ZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRlZiBfX29mZl90IG9mZl90OwoKCgoKCgp0eXBl
ZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwoKCgoKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKdHlw
ZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7CgoKCgp0eXBl
ZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgp0eXBl
ZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyA1NiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDU3ICIvdXNyL2luY2x1ZGUvdGlt
ZS5oIiAyIDMKCgp0eXBlZGVmIF9fY2xvY2tfdCBjbG9ja190OwoKCgoKCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoK
dHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CiMgNzkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA4MCAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMiAzCgoKdHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7CiMgOTEgIi91c3IvaW5jbHVk
ZS90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA5MiAiL3Vz
ci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKIyAxMjcg
Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgX191c2Vjb25kc190IHVz
ZWNvbmRzX3Q7CgoKCnR5cGVkZWYgX19zdXNlY29uZHNfdCBzdXNlY29uZHNfdDsKCgoKCgojIDEg
Ii91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5j
bHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoK
Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0
IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTg0ICIvdXNyL2luY2x1
ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21v
ZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21v
ZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21v
ZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21v
ZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmli
dXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2
X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQg
aW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9f
KSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f
d29yZF9fKSkpOwojIDIwNiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgi
IDIgMwojIDM3ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgMjA3ICIv
dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxl
Y3QuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIg
MwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVk
ZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEg
MwojIDMyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMK
dHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVu
c2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcg
aW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi
IDIgMwoKCgp0eXBlZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CgoKCgojIDEgIi91c3IvaW5jbHVk
ZS90aW1lLmgiIDEgMwojIDEwNiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNw
ZWMKICB7CiAgICBsb25nIGludCB0dl9zZWM7CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CiMg
NDQgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy90aW1lLmgiIDEgMwojIDYzICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5o
IiAyIDMKCgoKc3RydWN0IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBfX3N1
c2Vjb25kc190IHR2X3VzZWM7CiAgfTsKIyA0NiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIg
MiAzCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QK
ICB7CgoKCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21h
c2spKV07CgoKCgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2ZkX21hc2sgZmRfbWFzazsK
IyA4OSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwpleHRlcm4gIkMiIHsKCgoKCgoKZXh0
ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMs
CiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAg
ICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIGludCBwc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19y
ZWFkZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRz
LAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QgX190aW1l
b3V0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19z
aWdtYXNrKSB0aHJvdyAoKTsKCgp9CiMgMjEwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIg
MwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAzCiMgMjEzICIvdXNyL2lu
Y2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgoKdHlwZWRlZiBfX2Jsa3NpemVfdCBibGtzaXplX3Q7
CgoKCgoKCnR5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzYmxrY250
X3QgZnNibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsKIyAyNTEg
Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxrY250NjRfdCBibGtjbnQ2
NF90Owp0eXBlZGVmIF9fZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzZmls
Y250NjRfdCBmc2ZpbGNudDY0X3Q7CgoKfQojIDU0ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1v
cHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvb2Jzb2xldGUvcHJvdHlwZXMuaCIgMgoKCgoKCnR5
cGVkZWYgUFJVaW50NjQgdWludDY0OwoKdHlwZWRlZiBQUlVpbnQzMiB1aW50MzI7CgoKCnR5cGVk
ZWYgUFJVaW50MTYgdWludDE2Owp0eXBlZGVmIFBSVWludDggdWludDg7CiMgNzcgIi9ob21lL2th
aS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90
eXBlcy5oIgp0eXBlZGVmIFBSSW50NjQgaW50NjQ7CgoKCgoKCgp0eXBlZGVmIFBSSW50MzIgaW50
MzI7CgoKCgp0eXBlZGVmIFBSSW50MTYgaW50MTY7CnR5cGVkZWYgUFJJbnQ4IGludDg7CgoKCgoK
dHlwZWRlZiBQUkZsb2F0NjQgZmxvYXQ2NDsKdHlwZWRlZiBQUlVwdHJkaWZmIHVwdHJkaWZmX3Q7
CnR5cGVkZWYgUFJVd29yZCB1cHJ3b3JkX3Q7CnR5cGVkZWYgUFJXb3JkIHByd29yZF90OwojIDQ2
NyAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3By
dHlwZXMuaCIgMgoKCgoKCn0KIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVidWcu
aCIgMgojIDQyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNEZWJ1Zy5oIgpjbGFzcyBuc0Rl
YnVnIHsKcHVibGljOgoKCgoKCgogIHN0YXRpYyB2b2lkIEFib3J0SWZGYWxzZShjb25zdCBjaGFy
KiBhU3RyLCBjb25zdCBjaGFyKiBhRXhwciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQUkludG4gYUxpbmUpOwojIDYwICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNEZWJ1Zy5oIgogIHN0YXRpYyBQUkJvb2wgV2FybklmRmFsc2UoY29uc3Qg
Y2hhciogYVN0ciwgY29uc3QgY2hhciogYUV4cHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogYUZpbGUsIFBSSW50biBhTGluZSk7CiMgNzggIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0RlYnVnLmgiCiAgc3RhdGljIHZvaWQgU2V0V2FybmluZ01lc3Nh
Z2VCb3hFbmFibGUoUFJCb29sIGFPbk9mZik7CgoKCgogIHN0YXRpYyBQUkJvb2wgR2V0V2Fybmlu
Z01lc3NhZ2VCb3hFbmFibGUodm9pZCk7CiMgOTYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0RlYnVnLmgiCiAgc3RhdGljIHZvaWQgQWJvcnQoY29uc3QgY2hhciogYUZpbGUsIFBSSW50biBh
TGluZSk7CgoKCgogIHN0YXRpYyB2b2lkIEJyZWFrKGNvbnN0IGNoYXIqIGFGaWxlLCBQUkludG4g
YUxpbmUpOwoKCgoKICBzdGF0aWMgdm9pZCBQcmVDb25kaXRpb24oY29uc3QgY2hhciogYVN0ciwg
Y29uc3QgY2hhciogYUV4cHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBhRmlsZSwgUFJJbnRuIGFMaW5lKTsKCgoKCiAgc3RhdGljIHZvaWQgUG9zdENvbmRp
dGlvbihjb25zdCBjaGFyKiBhU3RyLCBjb25zdCBjaGFyKiBhRXhwciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhRmlsZSwgUFJJbnRuIGFMaW5lKTsKCgoK
CiAgc3RhdGljIHZvaWQgQXNzZXJ0aW9uKGNvbnN0IGNoYXIqIGFTdHIsIGNvbnN0IGNoYXIqIGFF
eHByLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUsIFBS
SW50biBhTGluZSk7CgoKCgogIHN0YXRpYyB2b2lkIE5vdFlldEltcGxlbWVudGVkKGNvbnN0IGNo
YXIqIGFNZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBhRmlsZSwgUFJJbnRuIGFMaW5lKTsKCgoKCiAgc3RhdGljIHZvaWQgTm90UmVhY2hl
ZChjb25zdCBjaGFyKiBhTWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBhRmlsZSwgUFJJbnRuIGFMaW5lKTsKCgoKCiAgc3RhdGljIHZvaWQgRXJyb3Io
Y29uc3QgY2hhciogYU1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIGFGaWxlLCBQUkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9pZCBXYXJuaW5nKGNvbnN0
IGNoYXIqIGFNZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IGFGaWxlLCBQUkludG4gYUxpbmUpOwp9OwojIDQ1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNDT01QdHIuaCIgMgoKCgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9y
dHMuaCIgMQojIDEwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIKIyAx
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNyb290aWRsLmgiIDEKIyAxMSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zcm9vdGlkbC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc2NvcmUuaCIgMQojIDM3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiCiMg
MSAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3By
dHlwZXMuaCIgMQojIDM4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDIKCgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlYnVnLmgiIDEKIyA0MSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAyCiMgMjEzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNjb3JlLmgiCiAgICB0eXBlZGVmIFBSVWludDE2IFBSVW5pY2hhcjsKIyAxMiAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zcm9vdGlkbC5oIiAyCiMgMSAiL2hvbWUva2FpL20vMDkyL21v
emlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGltZS5oIiAxCiMgMzIgIi9ob21l
L2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIK
IyAxICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIv
cHJsb25nLmgiIDEKIyAzMCAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3Qv
aW5jbHVkZS9uc3ByL3BybG9uZy5oIgojIDEgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGlt
aXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAzMSAiL2hvbWUva2FpL20vMDky
L21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9uZy5oIiAyCgpleHRlcm4g
IkMiIHsKIyA1MCAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVk
ZS9uc3ByL3BybG9uZy5oIgpleHRlcm4gUFJJbnQ2NCBMTF9NYXhJbnQodm9pZCk7CmV4dGVybiBQ
UkludDY0IExMX01pbkludCh2b2lkKTsKZXh0ZXJuIFBSSW50NjQgTExfWmVybyh2b2lkKTsKIyA0
MDcgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9w
cmxvbmcuaCIKfQojIDMzICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9p
bmNsdWRlL25zcHIvcHJ0aW1lLmgiIDIKCmV4dGVybiAiQyIgewojIDYxICIvaG9tZS9rYWkvbS8w
OTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCnR5cGVkZWYg
UFJJbnQ2NCBQUlRpbWU7CgoKCgoKCnR5cGVkZWYgc3RydWN0IFBSVGltZVBhcmFtZXRlcnMgewog
ICAgUFJJbnQzMiB0cF9nbXRfb2Zmc2V0OwogICAgUFJJbnQzMiB0cF9kc3Rfb2Zmc2V0Owp9IFBS
VGltZVBhcmFtZXRlcnM7CiMgOTYgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9k
aXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIKdHlwZWRlZiBzdHJ1Y3QgUFJFeHBsb2RlZFRpbWUg
ewogICAgUFJJbnQzMiB0bV91c2VjOwogICAgUFJJbnQzMiB0bV9zZWM7CgogICAgUFJJbnQzMiB0
bV9taW47CiAgICBQUkludDMyIHRtX2hvdXI7CiAgICBQUkludDMyIHRtX21kYXk7CgogICAgUFJJ
bnQzMiB0bV9tb250aDsKICAgIFBSSW50MTYgdG1feWVhcjsKCgogICAgUFJJbnQ4IHRtX3dkYXk7
CgogICAgUFJJbnQxNiB0bV95ZGF5OwoKCiAgICBQUlRpbWVQYXJhbWV0ZXJzIHRtX3BhcmFtczsK
fSBQUkV4cGxvZGVkVGltZTsKIyAxMzkgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXpl
ZC9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIKdHlwZWRlZiBQUlRpbWVQYXJhbWV0ZXJzICgg
KlBSVGltZVBhcmFtRm4pKGNvbnN0IFBSRXhwbG9kZWRUaW1lICpnbXQpOwojIDE2MSAiL2hvbWUv
a2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGltZS5oIgpl
eHRlcm4gUFJUaW1lCgpQUl9Ob3codm9pZCk7CiMgMTc1ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxs
YS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCmV4dGVybiB2b2lkIFBSX0V4
cGxvZGVUaW1lKAogICAgUFJUaW1lIHVzZWNzLCBQUlRpbWVQYXJhbUZuIHBhcmFtcywgUFJFeHBs
b2RlZFRpbWUgKmV4cGxvZGVkKTsKCgoKCgpleHRlcm4gUFJUaW1lCgpQUl9JbXBsb2RlVGltZShj
b25zdCBQUkV4cGxvZGVkVGltZSAqZXhwbG9kZWQpOwojIDE5OCAiL2hvbWUva2FpL20vMDkyL21v
emlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGltZS5oIgpleHRlcm4gdm9pZCBQ
Ul9Ob3JtYWxpemVUaW1lKAogICAgUFJFeHBsb2RlZFRpbWUgKmV4cGxvZGVkLCBQUlRpbWVQYXJh
bUZuIHBhcmFtcyk7CgoKCgoKCmV4dGVybiBQUlRpbWVQYXJhbWV0ZXJzIFBSX0xvY2FsVGltZVBh
cmFtZXRlcnMoY29uc3QgUFJFeHBsb2RlZFRpbWUgKmdtdCk7CgoKZXh0ZXJuIFBSVGltZVBhcmFt
ZXRlcnMgUFJfR01UUGFyYW1ldGVycyhjb25zdCBQUkV4cGxvZGVkVGltZSAqZ210KTsKCgoKCgpl
eHRlcm4gUFJUaW1lUGFyYW1ldGVycyBQUl9VU1BhY2lmaWNUaW1lUGFyYW1ldGVycyhjb25zdCBQ
UkV4cGxvZGVkVGltZSAqZ210KTsKIyAyNDggIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGlt
aXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1BhcnNl
VGltZVN0cmluZyAoCiAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nLAogICAgICAgIFBSQm9vbCBk
ZWZhdWx0X3RvX2dtdCwKICAgICAgICBQUlRpbWUgKnJlc3VsdCk7CiMgMjY1ICIvaG9tZS9rYWkv
bS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCmV4dGVy
biBQUlVpbnQzMiBQUl9Gb3JtYXRUaW1lKGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbiwgY29uc3QgY2hh
ciAqZm10LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UFJFeHBsb2RlZFRpbWUgKnRtKTsKCgoKCmV4dGVybiBQUlVpbnQzMgpQUl9Gb3JtYXRUaW1lVVNF
bmdsaXNoKCBjaGFyKiBidWYsIFBSVWludDMyIGJ1ZlNpemUsCiAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGZvcm1hdCwgY29uc3QgUFJFeHBsb2RlZFRpbWUqIHRtICk7CgoKCn0K
IyAxMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zcm9vdGlkbC5oIiAyCiMgMTEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAyCiMgMTE3ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJU3VwcG9ydHNVdGlscy5oIiAxCiMgMzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lT
dXBwb3J0c1V0aWxzLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAx
CiMgMzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0c1V0aWxzLmgiIDIKCgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlYnVnLmgiIDEKIyAzNiAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lELmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUQu
aCIKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3Ry
aW5nLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5j
bHVkZS9zdHJpbmcuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2Mt
My4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAx
IDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZvaWQgKm1lbWNw
eSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
dm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZv
aWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9f
bikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0
cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAg
ICAgICAgICAgIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4g
dm9pZCAqbWVtc2V0ICh2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19z
Miwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CgpleHRlcm4gdm9pZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90
IF9fbikKICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRl
cm4gdm9pZCAqcmF3bWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYykgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbXJjaHIgKF9fY29u
c3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVz
dHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cg
KCk7CgpleHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBf
X24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19k
ZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRl
cm4gY2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hh
ciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVy
biBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNp
emVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0
ZXJuIGludCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qg
c3RyeGZybSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoK
CgojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUveGxv
Y2FsZS5oIiAzCnR5cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0cnVjdCBsb2Nh
bGVfZGF0YSAqX19sb2NhbGVzWzEzXTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19j
dHlwZV9iOwogIGNvbnN0IGludCAqX19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlw
ZV90b3VwcGVyOwp9ICpfX2xvY2FsZV90OwojIDEwOSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAy
IDMKCgpleHRlcm4gaW50IF9fc3RyY29sbF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3Qg
Y2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2wpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IF9fc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIF9f
Y29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29u
c3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoK
CgpleHRlcm4gY2hhciAqc3RybmR1cCAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9f
bikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDE1NSAiL3Vz
ci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAq
X19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVy
biBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChfX2Nv
bnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0
IGNoYXIgKl9fcmVqZWN0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFy
ICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4
dGVybiBjaGFyICpzdHJwYnJrIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2Fj
Y2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBj
aGFyICpzdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25l
ZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJu
IGNoYXIgKnN0cmNhc2VzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFy
ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoK
ZXh0ZXJuIGNoYXIgKnN0cnRvayAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2RlbGltKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHJ0
b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnRv
a19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVs
aW0sCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkICptZW1tZW0gKF9fY29uc3Qgdm9pZCAqX19oYXlz
dGFjaywgc2l6ZV90IF9faGF5c3RhY2tsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
dm9pZCAqX19uZWVkbGUsIHNpemVfdCBfX25lZWRsZWxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNweSAodm9pZCAqX19y
ZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19y
ZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiB2b2lkICptZW1wY3B5
ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
dm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4g
c2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJubGVuIChfX2NvbnN0IGNoYXIgKl9f
c3RyaW5nLCBzaXplX3QgX19tYXhsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
cHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgdGhyb3cg
KCk7CgoKCmV4dGVybiBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVm
LCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgX19iemVybyAodm9p
ZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgYmNvcHkgKF9fY29u
c3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVzdCwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0
ZXJuIHZvaWQgYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBiY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90
IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4g
Y2hhciAqaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0IGNoYXIg
Kl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4
dGVybiBpbnQgZmZzIChpbnQgX19pKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsK
CgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBpbnQgX19sKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoY29uc3QpKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGludCBmZnNsbCAobG9uZyBsb25nIGlu
dCBfX2xsKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChjb25zdCkpOwoKCgoKZXh0ZXJu
IGludCBzdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0
cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90
IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRl
cm4gaW50IF9fc3RyY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAq
X19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IF9fc3RybmNhc2VjbXBf
bCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNo
YXIgKipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJz
Y21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsIChp
bnQgX19zaWcpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpfX3N0cGNweSAoY2hhciAqX19yZXN0
cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAo
KTsKZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9f
c3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4
dGVybiBjaGFyICpzdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoK
CmV4dGVybiB2b2lkICptZW1mcm9iICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gY2hhciAqYmFzZW5hbWUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhy
b3cgKCk7CiMgMzYzICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKfQojIDI3ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJRC5oIiAyCiMgNDAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lELmgiCnN0cnVjdCBuc0lEIHsKCgoKCgogIFBSVWludDMyIG0wOwogIFBSVWludDE2IG0xOwog
IFBSVWludDE2IG0yOwogIFBSVWludDggbTNbOF07CiMgNjIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lELmgiCiAgaW5saW5lIFBSQm9vbCBFcXVhbHMoY29uc3QgbnNJRCYgb3RoZXIpIGNv
bnN0IHsKICAgIHJldHVybiAoUFJCb29sKQogICAgICAoKCgoUFJVaW50MzIqKSAmbTApWzBdID09
ICgoUFJVaW50MzIqKSAmb3RoZXIubTApWzBdKSAmJgogICAgICAgKCgoUFJVaW50MzIqKSAmbTAp
WzFdID09ICgoUFJVaW50MzIqKSAmb3RoZXIubTApWzFdKSAmJgogICAgICAgKCgoUFJVaW50MzIq
KSAmbTApWzJdID09ICgoUFJVaW50MzIqKSAmb3RoZXIubTApWzJdKSAmJgogICAgICAgKCgoUFJV
aW50MzIqKSAmbTApWzNdID09ICgoUFJVaW50MzIqKSAmb3RoZXIubTApWzNdKSk7CiAgfQoKCgoK
CiAgICAgICAgIFBSQm9vbCBQYXJzZShjb25zdCBjaGFyICphSURTdHIpOwoKCgoKCiAgICAgICAg
IGNoYXIqIFRvU3RyaW5nKCkgY29uc3Q7Cgp9OwoKCgoKCnR5cGVkZWYgbnNJRCBuc0NJRDsKIyAz
NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIgMgojIDEgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJRC5oIiAxCiMgMzUgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lJRC5oIgp0eXBlZGVmIG5zSUQgbnNJSUQ7CiMgMzggIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lTdXBwb3J0c1V0aWxzLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNFcnJvci5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Vycm9y
LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29tLmgiIDEKIyAyNyAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zRXJyb3IuaCIgMgojIDEgIi9ob21lL2thaS9tLzA5Mi9tb3pp
bGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAyOCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zRXJyb3IuaCIgMgoKCgoKCnR5cGVkZWYgUFJVaW50MzIgbnNy
ZXN1bHQ7CiMgMjYyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNFcnJvci5oIgpleHRlcm4g
bnNyZXN1bHQKTlNfRXJyb3JBY2NvcmRpbmdUb05TUFIoKTsKIyAzOSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIgMgojIDEgIi9ob21lL2thaS9tLzA5Mi9tb3pp
bGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20uaCIgMQojIDI3ICIvaG9tZS9r
YWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiCiMg
MSAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3By
dHlwZXMuaCIgMQojIDI4ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9p
bmNsdWRlL25zcHIvcHJhdG9tLmgiIDIKIyAxICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRp
bWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2NrLmgiIDEKIyAzMiAiL2hvbWUva2FpL20vMDky
L21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9jay5oIgojIDEgIi9ob21l
L2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgi
IDEKIyAzMyAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9u
c3ByL3BybG9jay5oIiAyCgpleHRlcm4gIkMiIHsKIyA0NyAiL2hvbWUva2FpL20vMDkyL21vemls
bGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9jay5oIgp0eXBlZGVmIHN0cnVjdCBQ
UkxvY2sgUFJMb2NrOwojIDY0ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlz
dC9pbmNsdWRlL25zcHIvcHJsb2NrLmgiCmV4dGVybiBQUkxvY2sqIFBSX05ld0xvY2sodm9pZCk7
CiMgNzUgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNw
ci9wcmxvY2suaCIKZXh0ZXJuIHZvaWQgUFJfRGVzdHJveUxvY2soUFJMb2NrICpsb2NrKTsKIyA4
NiAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3By
bG9jay5oIgpleHRlcm4gdm9pZCBQUl9Mb2NrKFBSTG9jayAqbG9jayk7CiMgOTggIi9ob21lL2th
aS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcmxvY2suaCIKZXh0
ZXJuIFBSU3RhdHVzIFBSX1VubG9jayhQUkxvY2sgKmxvY2spOwoKfQojIDI5ICIvaG9tZS9rYWkv
bS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiIDIKCmV4
dGVybiAiQyIgewojIDQxICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9p
bmNsdWRlL25zcHIvcHJhdG9tLmgiCmV4dGVybiBQUkludDMyIFBSX0F0b21pY0luY3JlbWVudChQ
UkludDMyICp2YWwpOwojIDUyICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlz
dC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiCmV4dGVybiBQUkludDMyIFBSX0F0b21pY0RlY3JlbWVu
dChQUkludDMyICp2YWwpOwojIDY0ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQv
ZGlzdC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiCmV4dGVybiBQUkludDMyIFBSX0F0b21pY1NldChQ
UkludDMyICp2YWwsIFBSSW50MzIgbmV3dmFsKTsKIyA3NiAiL2hvbWUva2FpL20vMDkyL21vemls
bGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3ByYXRvbS5oIgpleHRlcm4gUFJJbnQzMiBQ
Ul9BdG9taWNBZGQoUFJJbnQzMiAqcHRyLCBQUkludDMyIHZhbCk7CgoKCgp0eXBlZGVmIHN0cnVj
dCBQUlN0YWNrRWxlbVN0ciBQUlN0YWNrRWxlbTsKCnN0cnVjdCBQUlN0YWNrRWxlbVN0ciB7CiAg
ICBQUlN0YWNrRWxlbSAqcHJzdGtfZWxlbV9uZXh0OwoKfTsKCnR5cGVkZWYgc3RydWN0IFBSU3Rh
Y2tTdHIgUFJTdGFjazsKIyA5OSAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rp
c3QvaW5jbHVkZS9uc3ByL3ByYXRvbS5oIgpleHRlcm4gUFJTdGFjayAqIFBSX0NyZWF0ZVN0YWNr
KGNvbnN0IGNoYXIgKnN0YWNrX25hbWUpOwojIDExMSAiL2hvbWUva2FpL20vMDkyL21vemlsbGEt
b3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3ByYXRvbS5oIgpleHRlcm4gdm9pZCBQUl9TdGFj
a1B1c2goUFJTdGFjayAqc3RhY2ssIFBSU3RhY2tFbGVtICpzdGFja19lbGVtKTsKIyAxMjQgIi9o
b21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20u
aCIKZXh0ZXJuIFBSU3RhY2tFbGVtICogUFJfU3RhY2tQb3AoUFJTdGFjayAqc3RhY2spOwojIDEz
OCAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3By
YXRvbS5oIgpleHRlcm4gUFJTdGF0dXMgUFJfRGVzdHJveVN0YWNrKFBSU3RhY2sgKnN0YWNrKTsK
Cn0KIyA0MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIgMgoK
CiMgMSAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3By
L3ByY21vbi5oIiAxCiMgMzIgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0
L2luY2x1ZGUvbnNwci9wcmNtb24uaCIKIyAxICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRp
bWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJtb24uaCIgMQojIDIyICIvaG9tZS9rYWkvbS8wOTIv
bW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJtb24uaCIKIyAxICIvaG9tZS9r
YWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAx
CiMgMjMgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNw
ci9wcm1vbi5oIiAyCiMgMSAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3Qv
aW5jbHVkZS9uc3ByL3ByaW5ydmFsLmgiIDEKIyAzNCAiL2hvbWUva2FpL20vMDkyL21vemlsbGEt
b3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ydmFsLmgiCiMgMSAiL2hvbWUva2FpL20v
MDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDM1
ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJp
bnJ2YWwuaCIgMgoKZXh0ZXJuICJDIiB7CgoKCgoKdHlwZWRlZiBQUlVpbnQzMiBQUkludGVydmFs
VGltZTsKIyA4OSAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVk
ZS9uc3ByL3ByaW5ydmFsLmgiCmV4dGVybiBQUkludGVydmFsVGltZSBQUl9JbnRlcnZhbE5vdyh2
b2lkKTsKIyAxMDcgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1
ZGUvbnNwci9wcmlucnZhbC5oIgpleHRlcm4gUFJVaW50MzIgUFJfVGlja3NQZXJTZWNvbmQodm9p
ZCk7CiMgMTI2ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRl
L25zcHIvcHJpbnJ2YWwuaCIKZXh0ZXJuIFBSSW50ZXJ2YWxUaW1lIFBSX1NlY29uZHNUb0ludGVy
dmFsKFBSVWludDMyIHNlY29uZHMpOwpleHRlcm4gUFJJbnRlcnZhbFRpbWUgUFJfTWlsbGlzZWNv
bmRzVG9JbnRlcnZhbChQUlVpbnQzMiBtaWxsaSk7CmV4dGVybiBQUkludGVydmFsVGltZSBQUl9N
aWNyb3NlY29uZHNUb0ludGVydmFsKFBSVWludDMyIG1pY3JvKTsKIyAxNDcgIi9ob21lL2thaS9t
LzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIgpleHRl
cm4gUFJVaW50MzIgUFJfSW50ZXJ2YWxUb1NlY29uZHMoUFJJbnRlcnZhbFRpbWUgdGlja3MpOwpl
eHRlcm4gUFJVaW50MzIgUFJfSW50ZXJ2YWxUb01pbGxpc2Vjb25kcyhQUkludGVydmFsVGltZSB0
aWNrcyk7CmV4dGVybiBQUlVpbnQzMiBQUl9JbnRlcnZhbFRvTWljcm9zZWNvbmRzKFBSSW50ZXJ2
YWxUaW1lIHRpY2tzKTsKCn0KIyAyNCAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVk
L2Rpc3QvaW5jbHVkZS9uc3ByL3BybW9uLmgiIDIKCmV4dGVybiAiQyIgewoKdHlwZWRlZiBzdHJ1
Y3QgUFJNb25pdG9yIFBSTW9uaXRvcjsKIyAzNiAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0
aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3BybW9uLmgiCmV4dGVybiBQUk1vbml0b3IqIFBSX05l
d01vbml0b3Iodm9pZCk7CgoKCgoKCgpleHRlcm4gdm9pZCBQUl9EZXN0cm95TW9uaXRvcihQUk1v
bml0b3IgKm1vbik7CgoKCgoKCmV4dGVybiB2b2lkIFBSX0VudGVyTW9uaXRvcihQUk1vbml0b3Ig
Km1vbik7CgoKCgoKCmV4dGVybiBQUlN0YXR1cyBQUl9FeGl0TW9uaXRvcihQUk1vbml0b3IgKm1v
bik7CiMgNzYgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUv
bnNwci9wcm1vbi5oIgpleHRlcm4gUFJTdGF0dXMgUFJfV2FpdChQUk1vbml0b3IgKm1vbiwgUFJJ
bnRlcnZhbFRpbWUgdGlja3MpOwoKCgoKCgpleHRlcm4gUFJTdGF0dXMgUFJfTm90aWZ5KFBSTW9u
aXRvciAqbW9uKTsKCgoKCgoKZXh0ZXJuIFBSU3RhdHVzIFBSX05vdGlmeUFsbChQUk1vbml0b3Ig
Km1vbik7Cgp9CiMgMzMgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2lu
Y2x1ZGUvbnNwci9wcmNtb24uaCIgMgojIDEgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGlt
aXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIiAxCiMgMzQgIi9ob21lL2thaS9tLzA5
Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcmNtb24uaCIgMgoKZXh0ZXJu
ICJDIiB7CiMgNDUgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1
ZGUvbnNwci9wcmNtb24uaCIKZXh0ZXJuIFBSTW9uaXRvciogUFJfQ0VudGVyTW9uaXRvcih2b2lk
ICphZGRyZXNzKTsKCgoKCgpleHRlcm4gUFJTdGF0dXMgUFJfQ0V4aXRNb25pdG9yKHZvaWQgKmFk
ZHJlc3MpOwoKCgoKCmV4dGVybiBQUlN0YXR1cyBQUl9DV2FpdCh2b2lkICphZGRyZXNzLCBQUklu
dGVydmFsVGltZSB0aW1lb3V0KTsKCgoKCgpleHRlcm4gUFJTdGF0dXMgUFJfQ05vdGlmeSh2b2lk
ICphZGRyZXNzKTsKCgoKCgpleHRlcm4gUFJTdGF0dXMgUFJfQ05vdGlmeUFsbCh2b2lkICphZGRy
ZXNzKTsKCgoKCgpleHRlcm4gdm9pZCBQUl9DU2V0T25Nb25pdG9yUmVjeWNsZSh2b2lkICggKmNh
bGxiYWNrKSh2b2lkICphZGRyZXNzKSk7Cgp9CiMgNDMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lTdXBwb3J0c1V0aWxzLmgiIDIKIyA3MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVN1cHBvcnRzVXRpbHMuaCIKdHlwZWRlZiBQUlVpbnQzMiBuc3JlZmNudDsKIyA5MCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIKIyAxICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNUcmFjZVJlZmNudC5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc1RyYWNlUmVmY250LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29t
LmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zVHJhY2VSZWZjbnQuaCIgMgoK
IyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w
L2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMzYgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2ZlYXR1cmVzLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgpleHRlcm4gIkMiIHsK
CgoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQzICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDQ1ICIvdXNyL2xvY2FsL2djYy0zLjAvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMiAzCiMgNTMg
Ii91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5j
bHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7CiMgNjMgIi91c3Iv
bG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9z
dGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIF9fRklMRTsKIyA3MyAiL3Vzci9sb2Nh
bC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlv
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9s
aWJpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIyA5ICIvdXNyL2lu
Y2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMK
IyAxMCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCgoKCiMgMSAiL3Vzci9sb2NhbC9n
Y2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5o
IiAxIDMKIyAzMTIgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCB3aW50X3Q7
CiMgMTUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCiMgMjQgIi91c3IvaW5jbHVkZS9f
R19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAiL3Vzci9p
bmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1
ZGUvd2NoYXIuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDUx
ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgNjcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz
CnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19jb3VudDsKICB1bmlvbgogIHsKICAgIHdpbnRfdCBf
X3djaDsKICAgIGNoYXIgX193Y2hiWzRdOwogIH0gX192YWx1ZTsKfSBfX21ic3RhdGVfdDsKIyAy
NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCnR5cGVkZWYgc3RydWN0CnsKICBfX29m
Zl90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvc190Owp0eXBlZGVmIHN0
cnVjdAp7CiAgX19vZmY2NF90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBv
czY0X3Q7CiMgNDQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS9nY29udi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2djb252LmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCiMg
MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg
MwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMK
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93
Y2hhci5oIiAyIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKIyAxICIvdXNyL2xv
Y2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3Rk
ZGVmLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKCgoKZW51bQp7CiAg
X19HQ09OVl9PSyA9IDAsCiAgX19HQ09OVl9OT0NPTlYsCiAgX19HQ09OVl9OT0RCLAogIF9fR0NP
TlZfTk9NRU0sCgogIF9fR0NPTlZfRU1QVFlfSU5QVVQsCiAgX19HQ09OVl9GVUxMX09VVFBVVCwK
ICBfX0dDT05WX0lMTEVHQUxfSU5QVVQsCiAgX19HQ09OVl9JTkNPTVBMRVRFX0lOUFVULAoKICBf
X0dDT05WX0lMTEVHQUxfREVTQ1JJUFRPUiwKICBfX0dDT05WX0lOVEVSTkFMX0VSUk9SCn07CgoK
CmVudW0KewogIF9fR0NPTlZfSVNfTEFTVCA9IDB4MDAwMSwKICBfX0dDT05WX0lHTk9SRV9FUlJP
UlMgPSAweDAwMDIKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsKc3RydWN0IF9fZ2NvbnZfc3Rl
cF9kYXRhOwpzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0OwpzdHJ1Y3QgX19nY29udl90cmFu
c19kYXRhOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3Rl
cCAqLCBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqLCBzaXplX3QgKiwgaW50
LCBpbnQpOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl9pbml0X2ZjdCkgKHN0cnVjdCBfX2djb252
X3N0ZXAgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2ZjdCkgKHN0cnVjdCBfX2djb252
X3N0ZXAgKik7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19mY3QpIChzdHJ1Y3QgX19n
Y29udl9zdGVwICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX19n
Y29udl9zdGVwX2RhdGEgKiwgdm9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9f
Z2NvbnZfdHJhbnNfY29udGV4dF9mY3QpICh2b2lkICosIF9fY29uc3QgdW5zaWduZWQgY2hhciAq
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2ln
bmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90
cmFuc19xdWVyeV9mY3QpIChfX2NvbnN0IGNoYXIgKiwgX19jb25zdCBjaGFyICoqKiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGlu
dCAoKl9fZ2NvbnZfdHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25zdCBjaGFyICopOwp0eXBl
ZGVmIHZvaWQgKCpfX2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lkICopOwoKc3RydWN0IF9fZ2Nv
bnZfdHJhbnNfZGF0YQp7CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJhbnNfZmN0OwogIF9fZ2Nv
bnZfdHJhbnNfY29udGV4dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsKICBfX2djb252X3RyYW5z
X2VuZF9mY3QgX190cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsKICBzdHJ1Y3QgX19nY29u
dl90cmFuc19kYXRhICpfX25leHQ7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXAKewogIHN0cnVj
dCBfX2djb252X2xvYWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwogIF9fY29uc3QgY2hhciAq
X19tb2RuYW1lOwoKICBpbnQgX19jb3VudGVyOwoKICBjaGFyICpfX2Zyb21fbmFtZTsKICBjaGFy
ICpfX3RvX25hbWU7CgogIF9fZ2NvbnZfZmN0IF9fZmN0OwogIF9fZ2NvbnZfaW5pdF9mY3QgX19p
bml0X2ZjdDsKICBfX2djb252X2VuZF9mY3QgX19lbmRfZmN0OwoKCgogIGludCBfX21pbl9uZWVk
ZWRfZnJvbTsKICBpbnQgX19tYXhfbmVlZGVkX2Zyb207CiAgaW50IF9fbWluX25lZWRlZF90bzsK
ICBpbnQgX19tYXhfbmVlZGVkX3RvOwoKCiAgaW50IF9fc3RhdGVmdWw7CgogIHZvaWQgKl9fZGF0
YTsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhCnsKICB1bnNpZ25lZCBjaGFyICpfX291
dGJ1ZjsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZmVuZDsKCgoKICBpbnQgX19mbGFnczsKCgoK
ICBpbnQgX19pbnZvY2F0aW9uX2NvdW50ZXI7CgoKCiAgaW50IF9faW50ZXJuYWxfdXNlOwoKICBf
X21ic3RhdGVfdCAqX19zdGF0ZXA7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKCgoKICBzdHJ1Y3Qg
X19nY29udl90cmFuc19kYXRhICpfX3RyYW5zOwp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfX2djb252
X2luZm8KewogIHNpemVfdCBfX25zdGVwczsKICBzdHJ1Y3QgX19nY29udl9zdGVwICpfX3N0ZXBz
OwogIF9fZXh0ZW5zaW9uX18gc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YSBbXTsKfSAq
X19nY29udl90OwojIDQ1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwp0eXBlZGVmIHVu
aW9uCnsKICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgc3RydWN0CiAgewogICAgc3RydWN0
IF9fZ2NvbnZfaW5mbyBfX2NkOwogICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YTsK
ICB9IF9fY29tYmluZWQ7Cn0gX0dfaWNvbnZfdDsKCnR5cGVkZWYgaW50IF9HX2ludDE2X3QgX19h
dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IF9HX2ludDMyX3Qg
X19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50
IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVm
IHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lf
XykpKTsKIyAzMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDUxICIvdXNyL2luY2x1ZGUv
bGliaW8uaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvZ2NjLTMu
MC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMwp0
eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDUyICIvdXNyL2luY2x1
ZGUvbGliaW8uaCIgMiAzCiMgMTU4ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lP
X2p1bXBfdDsgc3RydWN0IF9JT19GSUxFOwojIDE2OCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMK
dHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVj
dCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBf
cG9zOwojIDE5MSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKfTsKCgplbnVtIF9fY29kZWN2dF9y
ZXN1bHQKewogIF9fY29kZWN2dF9vaywKICBfX2NvZGVjdnRfcGFydGlhbCwKICBfX2NvZGVjdnRf
ZXJyb3IsCiAgX19jb2RlY3Z0X25vY29udgp9OwojIDI1OSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi
IDMKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBfSU9fcmVhZF9w
dHI7CiAgY2hhciogX0lPX3JlYWRfZW5kOwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CiAgY2hhciog
X0lPX3dyaXRlX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX3B0cjsKICBjaGFyKiBfSU9fd3JpdGVf
ZW5kOwogIGNoYXIqIF9JT19idWZfYmFzZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsKCiAgY2hhciAq
X0lPX3NhdmVfYmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7CiAgY2hhciAqX0lPX3NhdmVf
ZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAq
X2NoYWluOwoKICBpbnQgX2ZpbGVubzsKICBpbnQgX2Jsa3NpemU7CiAgX19vZmZfdCBfb2xkX29m
ZnNldDsKCgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hhciBfdnRh
YmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190ICpfbG9jazsK
IyAzMDMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiAgX19vZmY2NF90IF9vZmZzZXQ7CgoKCgoK
ICB2b2lkICpfX3BhZDE7CiAgdm9pZCAqX19wYWQyOwoKICBpbnQgX21vZGU7CgogIGNoYXIgX3Vu
dXNlZDJbMTUgKiBzaXplb2YgKGludCkgLSAyICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoKCgoK
c3RydWN0IF9JT19GSUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJf
MV9zdGRpbl87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4
dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CiMgMzQyICIvdXNyL2lu
Y2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQgKl9f
Y29va2llLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCnR5cGVkZWYgX19z
c2l6ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9fYnVm
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKTsKCgoKCgoKCnR5
cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAqX19wb3Ms
IGludCBfX3cpOwoKCnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29va2llKTsK
CgoKCnR5cGVkZWYgX19pb19yZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0aW9uX3Q7CnR5cGVkZWYg
X19pb193cml0ZV9mbiBjb29raWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3NlZWtf
Zm4gY29va2llX3NlZWtfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Nsb3NlX2ZuIGNvb2tpZV9j
bG9zZV9mdW5jdGlvbl90OwoKCnR5cGVkZWYgc3RydWN0CnsKICBfX2lvX3JlYWRfZm4gKnJlYWQ7
CiAgX19pb193cml0ZV9mbiAqd3JpdGU7CiAgX19pb19zZWVrX2ZuICpzZWVrOwogIF9faW9fY2xv
c2VfZm4gKmNsb3NlOwp9IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYgX0lPX2Nv
b2tpZV9pb19mdW5jdGlvbnNfdCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7CgpzdHJ1Y3QgX0lPX2Nv
b2tpZV9maWxlOwoKCmV4dGVybiB2b2lkIF9JT19jb29raWVfaW5pdCAoc3RydWN0IF9JT19jb29r
aWVfZmlsZSAqX19jZmlsZSwgaW50IF9fcmVhZF93cml0ZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkICpfX2Nvb2tpZSwgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2Zucyk7
CgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgpOwpleHRlcm4gd2ludF90
IF9fd3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193dWZs
b3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93IChfSU9f
RklMRSAqLCB3aW50X3QpIHRocm93ICgpOwojIDQyNCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMK
ZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50
IF9JT19wdXRjIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg
X0lPX2Zlb2YgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9y
IChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQg
KF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxl
IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9f
RklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAq
KSB0aHJvdyAoKTsKIyA0NTQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lP
X3Zmc2NhbmYgKF9JT19GSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVzdHJpY3Qp
IHRocm93ICgpOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3Qs
IGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNf
dmFfbGlzdCkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4gKF9JT19GSUxFICos
IGludCwgX19zc2l6ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBfSU9fc2dldG4gKF9JT19G
SUxFICosIHZvaWQgKiwgc2l6ZV90KSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZjY0X3QgX0lPX3Nl
ZWtvZmYgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50LCBpbnQpIHRocm93ICgpOwpleHRlcm4g
X19vZmY2NF90IF9JT19zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkgdGhyb3cg
KCk7CgpleHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cg
KCk7CiMgNTEwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp9CiMgNzQgIi91c3IvbG9jYWwvZ2Nj
LTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAy
IDMKCgoKCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgX19ub3RfdmFfbGlzdF9fOwojIDg4ICIvdXNy
L2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUv
c3RkaW8uaCIgMwp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CgoKCgp0eXBlZGVmIF9HX2Zwb3M2
NF90IGZwb3M2NF90OwojIDEzNyAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9zdGRpb19saW0uaCIgMSAzCiMgMTM4ICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCmV4dGVybiBGSUxF
ICpzdGRpbjsKZXh0ZXJuIEZJTEUgKnN0ZG91dDsKZXh0ZXJuIEZJTEUgKnN0ZGVycjsKIyAxNTIg
Ii91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5j
bHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5h
bWUpIHRocm93ICgpOwoKZXh0ZXJuIGludCByZW5hbWUgKF9fY29uc3QgY2hhciAqX19vbGQsIF9f
Y29uc3QgY2hhciAqX19uZXcpIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGUgKHZv
aWQpIHRocm93ICgpOwojIDE2OCAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKnRtcGZpbGU2
NCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnRtcG5hbSAoY2hhciAqX19zKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBjaGFyICp0bXBuYW1fciAoY2hhciAqX19zKSB0aHJvdyAoKTsKIyAx
ODggIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv
aW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBjaGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9f
ZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwoKZXh0ZXJuIGludCBmZmx1c2ggKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBpbnQgZmNsb3NlYWxsICh2b2lkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gRklMRSAqZm9w
ZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKCmV4dGVybiBG
SUxFICpmcmVvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAg
ICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CiMgMjMy
ICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqZm9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CmV4dGVybiBGSUxFICpmcmVvcGVuNjQgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAg
RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklMRSAqZmRv
cGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29raWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2lv
X2Z1bmNzKSB0aHJvdyAoKTsKCgpleHRlcm4gRklMRSAqZm1lbW9wZW4gKHZvaWQgKl9fcywgc2l6
ZV90IF9fbGVuLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJ
TEUgKm9wZW5fbWVtc3RyZWFtIChjaGFyICoqX19yZXN0cmljdCBfX2J1ZmxvYywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9jKSB0aHJvdyAo
KTsKCgoKCgpleHRlcm4gdm9pZCBzZXRidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNo
YXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNldHZidWYgKEZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAg
ICAgICAgICAgICAgaW50IF9fbW9kZXMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJu
IHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3Ry
aWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIHRocm93ICgp
OwoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBpbnQgZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cg
KCk7CgpleHRlcm4gaW50IHByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0
LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9f
cywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs
IC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBf
X3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAg
ICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKZXh0ZXJuIGludCB2cHJpbnRmIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQog
ICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3Ms
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAg
X19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNucHJpbnRmIChj
aGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBp
bnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2du
dWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRf
XyAoX19wcmludGZfXywgMywgMCkpKTsKCgoKCgpleHRlcm4gaW50IHZhc3ByaW50ZiAoY2hhciAq
Kl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2YsCiAgICAgICAg
ICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBfX2Fz
cHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBhc3By
aW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCmV4dGVybiBpbnQgdmRwcmlu
dGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsCiAgICAgICAgICAg
ICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IGRwcmludGYg
KGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgoK
CmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgp
OwoKZXh0ZXJuIGludCBzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAu
Li4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX3MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt
YXQsIC4uLikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdmZzY2FuZiAoRklMRSAqX19yZXN0cmlj
dCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAg
ICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNjYW5mIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDEsIDApKSk7
CgoKZXh0ZXJuIGludCB2c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVj
X3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g
KF9fc2NhbmZfXywgMiwgMCkpKTsKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ2V0
Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGNoYXJf
dW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0YyAoaW50IF9fYywg
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IHB1dGMgKGludCBfX2MsIEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBfX2MpIHRocm93
ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19jLCBG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50
IF9fYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19u
LCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hh
ciAqZmdldHNfdW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgNDM2ICIvdXNy
L2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUv
c3RkaW8uaCIgMwpleHRlcm4gX19zc2l6ZV90IF9fZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0
IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0
cmljdCBfX24sIGludCBfX2RlbGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IGdl
dGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp
OwoKCmV4dGVybiBfX3NzaXplX3QgZ2V0bGluZSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0cyAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywg
RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBm
cHV0c191bmxvY2tlZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgcHV0cyAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IHVuZ2V0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gc2l6
ZV90IGZyZWFkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJv
dyAoKTsKCmV4dGVybiBzaXplX3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19w
dHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxF
ICpfX3Jlc3RyaWN0IF9fcykgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2Nr
ZWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRo
cm93ICgpOwpleHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jl
c3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVhbSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3do
ZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKCmV4dGVybiB2b2lkIHJld2luZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoj
IDQ5OSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
MC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2Vla28gKEZJTEUgKl9fc3RyZWFtLCBf
X29mZl90IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmX3QgZnRl
bGxvIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmdldHBvcyAoRklM
RSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRo
cm93ICgpOwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9z
X3QgKl9fcG9zKSB0aHJvdyAoKTsKIyA1MzMgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNl
ZWtvNjQgKEZJTEUgKl9fc3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhy
b3cgKCk7CmV4dGVybiBfX29mZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBmZ2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3M2
NF90ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgpOwpleHRlcm4gaW50IGZzZXRwb3M2
NCAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQg
KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpf
X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAq
X19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNo
YXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJu
IF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX2Vycmxpc3RbXTsKCgoKCgpleHRlcm4gaW50IGZp
bGVubyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5s
b2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVu
IChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4
dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFy
ICpjdXNlcmlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0
ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0
YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRmIChzdHJ1
Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZ3MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu
IHZvaWQgZmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
ZnRyeWxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZnVu
bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA2NDAgIi91c3IvbG9jYWwvZ2Nj
LTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS9i
aXRzL3N0ZGlvLmgiIDMKaW5saW5lIGludAp2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mbXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQp7CiAgcmV0dXJuIHZmcHJp
bnRmIChzdGRvdXQsIF9fZm10LCBfX2FyZyk7Cn0KCgppbmxpbmUgaW50CmdldGNoYXIgKHZvaWQp
IHRocm93ICgpCnsKICByZXR1cm4gX0lPX2dldGMgKHN0ZGluKTsKfQoKCgoKaW5saW5lIGludApn
ZXRjX3VubG9ja2VkIChGSUxFICpfX2ZwKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoX19mcCktPl9J
T19yZWFkX3B0ciA+PSAoX19mcCktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKF9fZnApIDogKih1
bnNpZ25lZCBjaGFyICopIChfX2ZwKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKaW5saW5lIGludApn
ZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoc3RkaW4pLT5fSU9f
cmVhZF9wdHIgPj0gKHN0ZGluKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoc3RkaW4pIDogKih1
bnNpZ25lZCBjaGFyICopIChzdGRpbiktPl9JT19yZWFkX3B0cisrKTsKfQoKCgoKaW5saW5lIGlu
dApwdXRjaGFyIChpbnQgX19jKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9JT19wdXRjIChfX2MsIHN0
ZG91dCk7Cn0KCgoKCmlubGluZSBpbnQKZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0ciA+
PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFtLCAodW5z
aWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+X0lPX3dy
aXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCmlubGluZSBpbnQKcHV0Y191bmxvY2tlZCAoaW50
IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5f
SU9fd3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAo
X19zdHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooX19z
dHJlYW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKaW5saW5lIGludApwdXRjaGFy
X3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKHN0ZG91dCktPl9JT193
cml0ZV9wdHIgPj0gKHN0ZG91dCktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoc3Rkb3V0
LCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKHN0ZG91dCktPl9J
T193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgoKCgppbmxpbmUgX19zc2l6ZV90CmdldGxpbmUg
KGNoYXIgKipfX2xpbmVwdHIsIHNpemVfdCAqX19uLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkK
ewogIHJldHVybiBfX2dldGRlbGltIChfX2xpbmVwdHIsIF9fbiwgJ1xuJywgX19zdHJlYW0pOwp9
CgoKCgoKaW5saW5lIGludApmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkK
ewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MTApICE9IDApOwp9CgoKaW5saW5l
IGludApmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJu
ICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgyMCkgIT0gMCk7Cn0KIyA2NDEgIi91c3IvbG9jYWwv
Z2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5o
IiAyIDMKCgp9CiMgMjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1RyYWNlUmVmY250Lmgi
IDIKCmNsYXNzIG5zSVN1cHBvcnRzOwojIDEzMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
VHJhY2VSZWZjbnQuaCIKc3RydWN0IG5zVHJhY2VSZWZjbnRTdGF0cyB7CiAgbnNyZWZjbnQgbUFk
ZFJlZnM7CiAgbnNyZWZjbnQgbVJlbGVhc2VzOwogIG5zcmVmY250IG1DcmVhdGVzOwogIG5zcmVm
Y250IG1EZXN0cm95czsKICBkb3VibGUgbVJlZnNPdXRzdGFuZGluZ1RvdGFsOwogIGRvdWJsZSBt
UmVmc091dHN0YW5kaW5nU3F1YXJlZDsKICBkb3VibGUgbU9ianNPdXRzdGFuZGluZ1RvdGFsOwog
IGRvdWJsZSBtT2Jqc091dHN0YW5kaW5nU3F1YXJlZDsKfTsKIyAxNTIgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc1RyYWNlUmVmY250LmgiCnR5cGVkZWYgUFJCb29sICggKm5zVHJhY2VSZWZj
bnRTdGF0RnVuYykKICAoY29uc3QgY2hhciogYVR5cGVOYW1lLAogICBQUlVpbnQzMiBhSW5zdGFu
Y2VTaXplLAogICBuc1RyYWNlUmVmY250U3RhdHMqIGFDdXJyZW50U3RhdHMsCiAgIG5zVHJhY2VS
ZWZjbnRTdGF0cyogYVByZXZTdGF0cywKICAgdm9pZCAqYUNsb3N1cmUpOwoKCgoKCmNsYXNzIG5z
VHJhY2VSZWZjbnQgewpwdWJsaWM6CiAgc3RhdGljIHZvaWQgU3RhcnR1cCgpOwoKICBzdGF0aWMg
dm9pZCBTaHV0ZG93bigpOwoKICBzdGF0aWMgdm9pZCBMb2dBZGRSZWYodm9pZCogYVB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zcmVmY250IGFOZXdSZWZDbnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhVHlwZU5hbWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhSW5zdGFuY2VTaXplKTsKCiAgc3RhdGljIHZv
aWQgTG9nUmVsZWFzZSh2b2lkKiBhUHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zcmVmY250IGFOZXdSZWZDbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciogYVR5cGVOYW1lKTsKCiAgc3RhdGljIHZvaWQgTG9nTmV3WFBDT00odm9pZCogYVB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYVR5cGVOYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhSW5zdGFuY2VTaXpl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhRmlsZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFMaW5lKTsKCiAgc3RhdGljIHZvaWQg
TG9nRGVsZXRlWFBDT00odm9pZCogYVB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogYUZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBhTGluZSk7CgogIHN0YXRpYyBuc3JlZmNudCBMb2dBZGRSZWZDYWxsKHZvaWQqIGFQ
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zcmVmY250IGFOZXdS
ZWZjbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IGFGaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYUxpbmUp
OwoKICBzdGF0aWMgbnNyZWZjbnQgTG9nUmVsZWFzZUNhbGwodm9pZCogYVB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zcmVmY250IGFOZXdSZWZjbnQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhRmlsZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhTGluZSk7CgogIHN0YXRp
YyB2b2lkIExvZ0N0b3Iodm9pZCogYVB0ciwgY29uc3QgY2hhciogYVR5cGVOYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFJbnN0YW5jZVNpemUpOwoKICBzdGF0aWMg
dm9pZCBMb2dEdG9yKHZvaWQqIGFQdHIsIGNvbnN0IGNoYXIqIGFUeXBlTmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhSW5zdGFuY2VTaXplKTsKCiAgc3RhdGljIHZv
aWQgTG9nQWRkQ09NUHRyKHZvaWQgKmFDT01QdHIsIG5zSVN1cHBvcnRzICphT2JqZWN0KTsKCiAg
c3RhdGljIHZvaWQgTG9nUmVsZWFzZUNPTVB0cih2b2lkICphQ09NUHRyLCBuc0lTdXBwb3J0cyAq
YU9iamVjdCk7CgogIGVudW0gU3RhdGlzdGljc1R5cGUgewogICAgQUxMX1NUQVRTLAogICAgTkVX
X1NUQVRTCiAgfTsKCiAgc3RhdGljIG5zcmVzdWx0IER1bXBTdGF0aXN0aWNzKFN0YXRpc3RpY3NU
eXBlIHR5cGUgPSBBTExfU1RBVFMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBGSUxFKiBvdXQgPSAwKTsKCiAgc3RhdGljIHZvaWQgUmVzZXRTdGF0aXN0aWNzKHZvaWQp
OwoKICBzdGF0aWMgdm9pZCBHYXRoZXJTdGF0aXN0aWNzKG5zVHJhY2VSZWZjbnRTdGF0RnVuYyBh
RnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhQ2xvc3Vy
ZSk7CgogIHN0YXRpYyB2b2lkIExvYWRMaWJyYXJ5U3ltYm9scyhjb25zdCBjaGFyKiBhTGlicmFy
eU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhTGli
cmF5SGFuZGxlKTsKCiAgc3RhdGljIHZvaWQgRGVtYW5nbGVTeW1ib2woY29uc3QgY2hhciAqIGFT
eW1ib2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBhQnVmZmVy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYUJ1Zkxlbik7CgogIHN0
YXRpYyB2b2lkIFdhbGtUaGVTdGFjayhGSUxFKiBhU3RyZWFtKTsKCiAgc3RhdGljIHZvaWQgU2V0
UHJlZlNlcnZpY2VBdmFpbGFiaWxpdHkoUFJCb29sIGF2YWlsKTsKCgoKCgoKICBzdGF0aWMgdm9p
ZCBTZXRBY3Rpdml0eUlzTGVnYWwoUFJCb29sIGFMZWdhbCk7Cn07CgoKCgpleHRlcm4gIkMiIHZv
aWQKTlNfTWVhbkFuZFN0ZERldihkb3VibGUgbiwgZG91YmxlIHN1bU9mVmFsdWVzLCBkb3VibGUg
c3VtT2ZTcXVhcmVkVmFsdWVzLAogICAgICAgICAgICAgICAgIGRvdWJsZSAqbWVhblJlc3VsdCwg
ZG91YmxlICpzdGREZXZSZXN1bHQpOwojIDkxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
U3VwcG9ydHNVdGlscy5oIiAyCgoKCgoKCgpjbGFzcyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKIyAx
MTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0c1V0aWxzLmgiCiAgdmlydHVh
bCBuc3Jlc3VsdCBRdWVyeUludGVyZmFjZShjb25zdCBuc0lJRCYgYUlJRCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQqKiBhSW5zdGFuY2VQdHIpID0gMDsKCgoKCgoKCiAgdmlydHVh
bCBuc3JlZmNudCBBZGRSZWYodm9pZCkgPSAwOwojIDEzMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVN1cHBvcnRzVXRpbHMuaCIKICB2aXJ0dWFsIG5zcmVmY250IFJlbGVhc2Uodm9pZCkg
PSAwOwoKCn07CiMgMTExNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRp
bHMuaCIKZXh0ZXJuICJDKysiIHsKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpuc3JlZmNu
dApuc19pZl9hZGRyZWYoIFQgZXhwciApCgoKCiAgewogICAgcmV0dXJuIGV4cHIgPyBleHByLT5B
ZGRSZWYoKSA6IDA7CiAgfQoKIH0KIyAxMjMyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
U3VwcG9ydHNVdGlscy5oIgpleHRlcm4gIkMrKyIgewoKCgpjbGFzcyBuc0lTdXBwb3J0czsKCnRl
bXBsYXRlIDxjbGFzcyBUPgpzdHJ1Y3QgbnNDT01UeXBlSW5mbwogIHsKICAgIHN0YXRpYyBjb25z
dCBuc0lJRCYgR2V0SUlEKCkgeyByZXR1cm4gVDo6R2V0SUlEKCk7IH0KICB9OwoKdGVtcGxhdGUg
PD4Kc3RydWN0IG5zQ09NVHlwZUluZm88bnNJU3VwcG9ydHM+CiAgewogICAgc3RhdGljIGNvbnN0
IG5zSUlEJiBHZXRJSUQoKSB7CiAgICAgICAgc3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHgw
MDAwMDAwMCwgMHgwMDAwLCAweDAwMDAsIHsweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDQ2fSB9OyByZXR1cm4gaWlkOwogICAgfQogIH07CgoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgRGVzdGluYXRpb25UeXBlPgppbmxpbmUKbnNyZXN1bHQKQ2FsbFF1ZXJ5SW50ZXJmYWNl
KCBuc0lTdXBwb3J0cyogYVNvdXJjZSwgRGVzdGluYXRpb25UeXBlKiogYURlc3RpbmF0aW9uICkK
ICB7CiAgICB7fTsKICAgIHt9OwoKICAgIHJldHVybiBhU291cmNlLT5RdWVyeUludGVyZmFjZShu
c0NPTVR5cGVJbmZvPERlc3RpbmF0aW9uVHlwZT46OkdldElJRCgpLCAodm9pZCoqKWFEZXN0aW5h
dGlvbik7CiAgfQoKfQoKCgoKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDbGFz
c0luZm8uaCIgMQojIDE0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2xhc3NJbmZvLmgi
CiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByb2dyYW1taW5nTGFuZ3VhZ2UuaCIg
MQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJvZ3JhbW1pbmdMYW5ndWFnZS5o
IgpjbGFzcyBuc0lQcm9ncmFtbWluZ0xhbmd1YWdlIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1
YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlE
IGlpZCA9IHsweGVhNjA0ZTkwLCAweDQwYmEsIDB4MTFkNSwgeyAweDkwLCAweGJiLCAweDAwLCAw
eDEwLCAweGE0LCAweGU3LCAweDNkLCAweDlhIH19OyByZXR1cm4gaWlkO30KCgoKCiAgZW51bSB7
IFVOS05PV04gPSAwVSB9OwoKICBlbnVtIHsgQ1BMVVNQTFVTID0gMVUgfTsKCiAgZW51bSB7IEpB
VkFTQ1JJUFQgPSAyVSB9OwoKICBlbnVtIHsgUFlUSE9OID0gM1UgfTsKCiAgZW51bSB7IFBFUkwg
PSA0VSB9OwoKICBlbnVtIHsgSkFWQSA9IDVVIH07CgogIGVudW0geyBaWDgxX0JBU0lDID0gNlUg
fTsKCiAgZW51bSB7IEpBVkFTQ1JJUFQyID0gN1UgfTsKCn07CiMgMTUgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lDbGFzc0luZm8uaCIgMgojIDI5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJQ2xhc3NJbmZvLmgiCmNsYXNzIG5zSUNsYXNzSW5mbyA6IHB1YmxpYyBuc0lTdXBwb3J0
cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25z
dCBuc0lJRCBpaWQgPSB7MHg5ODZjMTFkMCwgMHhmMzQwLCAweDExZDQsIHsgMHg5MCwgMHg3NSwg
MHgwMCwgMHgxMCwgMHhhNCwgMHhlNywgMHgzZCwgMHg5YSB9fTsgcmV0dXJuIGlpZDt9CiMgNDMg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDbGFzc0luZm8uaCIKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldEludGVyZmFjZXMoUFJVaW50MzIgKmNvdW50LCBuc0lJRCAqICoqYXJyYXkpID0gMDsK
IyA1OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNsYXNzSW5mby5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgR2V0SGVscGVyRm9yTGFuZ3VhZ2UoUFJVaW50MzIgbGFuZ3VhZ2UsIG5zSVN1cHBv
cnRzICoqX3JldHZhbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udHJhY3RJ
RChjaGFyICogKmFDb250cmFjdElEKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENs
YXNzRGVzY3JpcHRpb24oY2hhciAqICphQ2xhc3NEZXNjcmlwdGlvbikgPSAwOwoKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0Q2xhc3NJRChuc0NJRCAqICphQ2xhc3NJRCkgPSAwOwoKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRJbXBsZW1lbnRhdGlvbkxhbmd1YWdlKFBSVWludDMyICphSW1w
bGVtZW50YXRpb25MYW5ndWFnZSkgPSAwOwoKCgoKICBlbnVtIHsgU0lOR0xFVE9OID0gMVUgfTsK
CiAgZW51bSB7IFRIUkVBRFNBRkUgPSAyVSB9OwoKICBlbnVtIHsgTUFJTl9USFJFQURfT05MWSA9
IDRVIH07CgogIGVudW0geyBET01fT0JKRUNUID0gOFUgfTsKCiAgZW51bSB7IFBMVUdJTl9PQkpF
Q1QgPSAxNlUgfTsKCiAgZW51bSB7IFJFU0VSVkVEID0gMjE0NzQ4MzY0OFUgfTsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0RmxhZ3MoUFJVaW50MzIgKmFGbGFncykgPSAwOwoKfTsKIyAxMjc0ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGlscy5oIiAyCiMgMTE4ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMgojIDUwICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNDT01QdHIuaCIgMgoKCgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNjb3JlLmgiIDEKIyA1NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgi
IDIKIyAxMDcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogIHR5cGVkZWYg
UFJCb29sIE5TQ0FQX0JPT0w7CiMgMTU5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01Q
dHIuaCIKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIG5zRGVyaXZlZFNhZmUgOiBwdWJsaWMgVAoj
IDE3MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgewogICAgcHJpdmF0
ZToKCiAgICAgIHVzaW5nIFQ6OkFkZFJlZjsKICAgICAgdXNpbmcgVDo6UmVsZWFzZTsKCgoKCgoK
ICAgICAgdm9pZCBvcGVyYXRvciBkZWxldGUoIHZvaWQqLCBzaXplX3QgKTsKCgoKICAgICAgbnNE
ZXJpdmVkU2FmZTxUPiYgb3BlcmF0b3I9KCBjb25zdCBUJiApOwojIDE5NCAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgfTsKIyAyMTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0NPTVB0ci5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVD4Kc3RydWN0IGFscmVhZHlfQWRkUmVm
ZWQKIyAyMzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogIHsKICAgIGFs
cmVhZHlfQWRkUmVmZWQoIFQqIGFSYXdQdHIgKQogICAgICAgIDogbVJhd1B0cihhUmF3UHRyKQog
ICAgICB7CgogICAgICB9CgogICAgVCogZ2V0KCkgY29uc3QgeyByZXR1cm4gbVJhd1B0cjsgfQoK
ICAgIFQqIG1SYXdQdHI7CiAgfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKY29uc3QgYWxy
ZWFkeV9BZGRSZWZlZDxUPgpnZXR0ZXJfQWRkUmVmcyggVCogYVJhd1B0ciApCgoKCgogIHsKICAg
IHJldHVybiBhbHJlYWR5X0FkZFJlZmVkPFQ+KGFSYXdQdHIpOwogIH0KCnRlbXBsYXRlIDxjbGFz
cyBUPgppbmxpbmUKY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxUPgpnZXR0ZXJfQWRkUmVmcyggY29u
c3QgYWxyZWFkeV9BZGRSZWZlZDxUPiYgYUFscmVhZHlBZGRSZWZlZFB0ciApCiAgewogICAgcmV0
dXJuIGFBbHJlYWR5QWRkUmVmZWRQdHI7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpj
b25zdCBhbHJlYWR5X0FkZFJlZmVkPFQ+CmRvbnRfQWRkUmVmKCBUKiBhUmF3UHRyICkKICB7CiAg
ICByZXR1cm4gYWxyZWFkeV9BZGRSZWZlZDxUPihhUmF3UHRyKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgVD4KaW5saW5lCmNvbnN0IGFscmVhZHlfQWRkUmVmZWQ8VD4KZG9udF9BZGRSZWYoIGNvbnN0
IGFscmVhZHlfQWRkUmVmZWQ8VD4gYUFscmVhZHlBZGRSZWZlZFB0ciApCiAgewogICAgcmV0dXJu
IGFBbHJlYWR5QWRkUmVmZWRQdHI7CiAgfQojIDI5MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zQ09NUHRyLmgiCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKVCoKZG9udF9RdWVyeUludGVy
ZmFjZSggVCogZXhwciApCiAgewogICAgcmV0dXJuIGV4cHI7CiAgfQoKCgpjbGFzcyBuc0NPTVB0
cl9oZWxwZXIKIyAzMTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogIHsK
ICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBuc3Jlc3VsdCBvcGVyYXRvcigpKCBjb25zdCBuc0lJ
RCYsIHZvaWQqKiApIGNvbnN0ID0gMDsKICB9OwoKY2xhc3MgbnNRdWVyeUludGVyZmFjZSA6IHB1
YmxpYyBuc0NPTVB0cl9oZWxwZXIKICB7CiAgICBwdWJsaWM6CiAgICAgIG5zUXVlcnlJbnRlcmZh
Y2UoIG5zSVN1cHBvcnRzKiBhUmF3UHRyLCBuc3Jlc3VsdCogZXJyb3IgKQogICAgICAgICAgOiBt
UmF3UHRyKGFSYXdQdHIpLAogICAgICAgICAgICBtRXJyb3JQdHIoZXJyb3IpCiAgICAgICAgewoK
ICAgICAgICB9CgogICAgICB2aXJ0dWFsIG5zcmVzdWx0IG9wZXJhdG9yKCkoIGNvbnN0IG5zSUlE
JiBhSUlELCB2b2lkKiogKSBjb25zdDsKCiAgICBwcml2YXRlOgogICAgICBuc0lTdXBwb3J0cyog
bVJhd1B0cjsKICAgICAgbnNyZXN1bHQqIG1FcnJvclB0cjsKICB9OwoKaW5saW5lCmNvbnN0IG5z
UXVlcnlJbnRlcmZhY2UKZG9fUXVlcnlJbnRlcmZhY2UoIG5zSVN1cHBvcnRzKiBhUmF3UHRyLCBu
c3Jlc3VsdCogZXJyb3IgPSAwICkKICB7CiAgICByZXR1cm4gbnNRdWVyeUludGVyZmFjZShhUmF3
UHRyLCBlcnJvcik7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQp2b2lkCmRvX1F1ZXJ5
SW50ZXJmYWNlKCBhbHJlYWR5X0FkZFJlZmVkPFQ+JiApCiAgewoKCgogIH0KCnRlbXBsYXRlIDxj
bGFzcyBUPgppbmxpbmUKdm9pZApkb19RdWVyeUludGVyZmFjZSggYWxyZWFkeV9BZGRSZWZlZDxU
PiYsIG5zcmVzdWx0KiApCiAgewoKCgogIH0KIyAzODIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0NPTVB0ci5oIgpjbGFzcyBuc0NPTVB0cl9iYXNlCiMgMzk1ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNDT01QdHIuaCIKICB7CiAgICBwdWJsaWM6CgogICAgICBuc0NPTVB0cl9iYXNl
KCBuc0lTdXBwb3J0cyogcmF3UHRyID0gMCApCiAgICAgICAgICA6IG1SYXdQdHIocmF3UHRyKQog
ICAgICAgIHsKCiAgICAgICAgfQoKCiAgICAgICAgICAgICAgICB+bnNDT01QdHJfYmFzZSgpOwoK
CgoKCgogICAgICAgICAgICAgICAgdm9pZCBhc3NpZ25fd2l0aF9BZGRSZWYoIG5zSVN1cHBvcnRz
KiApOwogICAgICAgICAgICAgICAgdm9pZCBhc3NpZ25fZnJvbV9oZWxwZXIoIGNvbnN0IG5zQ09N
UHRyX2hlbHBlciYsIGNvbnN0IG5zSUlEJiApOwogICAgICAgICAgICAgICAgdm9pZCoqIGJlZ2lu
X2Fzc2lnbm1lbnQoKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIG5zSVN1cHBvcnRzKiBtUmF3UHRy
OwoKICAgICAgdm9pZAogICAgICBhc3NpZ25fYXNzdW1pbmdfQWRkUmVmKCBuc0lTdXBwb3J0cyog
bmV3UHRyICkKICAgICAgICB7CiMgNDMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01Q
dHIuaCIKICAgICAgICAgIG5zSVN1cHBvcnRzKiBvbGRQdHIgPSBtUmF3UHRyOwogICAgICAgICAg
bVJhd1B0ciA9IG5ld1B0cjsKICAgICAgICAgIDs7CiAgICAgICAgICBpZiAoIG9sZFB0ciApCiAg
ICAgICAgICAgIChvbGRQdHIpLT5SZWxlYXNlKCk7CiAgICAgICAgfQogIH07CgoKCnRlbXBsYXRl
IDxjbGFzcyBUPgpjbGFzcyBuc0NPTVB0cgoKICAgIDogcHJpdmF0ZSBuc0NPTVB0cl9iYXNlCgog
IHsKICAgIGVudW0geyBfZm9yY2VfZXZlbl9jb21wbGlhbnRfY29tcGlsZXJzX3RvX2ZhaWxfID0g
c2l6ZW9mKFQpIH07CiMgNDgyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIK
ICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBUIGVsZW1lbnRfdHlwZTsKIyA1MTIgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogICAgICBuc0NPTVB0cigpCiAgICAgICAgICAg
IDogbnNDT01QdHJfYmFzZSgwKQoKICAgICAgICB7CiAgICAgICAgICA7OwogICAgICAgIH0KCiAg
ICAgIG5zQ09NUHRyKCBjb25zdCBuc0NPTVB0cjxUPiYgYVNtYXJ0UHRyICkKICAgICAgICAgICAg
OiBuc0NPTVB0cl9iYXNlKGFTbWFydFB0ci5tUmF3UHRyKQoKICAgICAgICB7CiAgICAgICAgICBp
ZiAoIG1SYXdQdHIgKQogICAgICAgICAgICAobVJhd1B0ciktPkFkZFJlZigpOwogICAgICAgICAg
OzsKICAgICAgICB9CgogICAgICBuc0NPTVB0ciggVCogYVJhd1B0ciApCiAgICAgICAgICAgIDog
bnNDT01QdHJfYmFzZShhUmF3UHRyKQoKICAgICAgICB7CiAgICAgICAgICBpZiAoIG1SYXdQdHIg
KQogICAgICAgICAgICAobVJhd1B0ciktPkFkZFJlZigpOwogICAgICAgICAgOzsKICAgICAgICAg
IDs7CiAgICAgICAgfQoKICAgICAgbnNDT01QdHIoIGNvbnN0IGFscmVhZHlfQWRkUmVmZWQ8VD4m
IGFTbWFydFB0ciApCiAgICAgICAgICAgIDogbnNDT01QdHJfYmFzZShhU21hcnRQdHIubVJhd1B0
cikKCiAgICAgICAgewogICAgICAgICAgOzsKICAgICAgICAgIDs7CiAgICAgICAgfQoKICAgICAg
bnNDT01QdHIoIGNvbnN0IG5zQ09NUHRyX2hlbHBlciYgaGVscGVyICkKICAgICAgICAgICAgOiBu
c0NPTVB0cl9iYXNlKDApCgoKICAgICAgICB7CiAgICAgICAgICA7OwogICAgICAgICAgYXNzaWdu
X2Zyb21faGVscGVyKGhlbHBlciwgbnNDT01UeXBlSW5mbzxUPjo6R2V0SUlEKCkpOwogICAgICAg
ICAgOzsKICAgICAgICB9CiMgNTcxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIu
aCIKICAgICAgbnNDT01QdHI8VD4mCiAgICAgIG9wZXJhdG9yPSggY29uc3QgbnNDT01QdHI8VD4m
IHJocyApCgogICAgICAgIHsKICAgICAgICAgIGFzc2lnbl93aXRoX0FkZFJlZihyaHMubVJhd1B0
cik7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgICAgbnNDT01QdHI8VD4m
CiAgICAgIG9wZXJhdG9yPSggVCogcmhzICkKCiAgICAgICAgewogICAgICAgICAgYXNzaWduX3dp
dGhfQWRkUmVmKHJocyk7CiAgICAgICAgICA7OwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAg
ICAgIH0KCiAgICAgIG5zQ09NUHRyPFQ+JgogICAgICBvcGVyYXRvcj0oIGNvbnN0IGFscmVhZHlf
QWRkUmVmZWQ8VD4mIHJocyApCgogICAgICAgIHsKICAgICAgICAgIGFzc2lnbl9hc3N1bWluZ19B
ZGRSZWYocmhzLm1SYXdQdHIpOwogICAgICAgICAgOzsKICAgICAgICAgIHJldHVybiAqdGhpczsK
ICAgICAgICB9CgogICAgICBuc0NPTVB0cjxUPiYKICAgICAgb3BlcmF0b3I9KCBjb25zdCBuc0NP
TVB0cl9oZWxwZXImIHJocyApCgoKICAgICAgICB7CiAgICAgICAgICBhc3NpZ25fZnJvbV9oZWxw
ZXIocmhzLCBuc0NPTVR5cGVJbmZvPFQ+OjpHZXRJSUQoKSk7CiAgICAgICAgICA7OwogICAgICAg
ICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KIyA2MjIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0NPTVB0ci5oIgogICAgICBuc0Rlcml2ZWRTYWZlPFQ+KgogICAgICBnZXQoKSBjb25zdAoK
CgoKCgogICAgICAgIHsKICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBuc0Rlcml2
ZWRTYWZlPFQ+KiA+KG1SYXdQdHIpOwogICAgICAgIH0KCiAgICAgIG9wZXJhdG9yIG5zRGVyaXZl
ZFNhZmU8VD4qKCkgY29uc3QKCgoKCgoKCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIGdldCgp
OwogICAgICAgIH0KCiAgICAgIG5zRGVyaXZlZFNhZmU8VD4qCiAgICAgIG9wZXJhdG9yLT4oKSBj
b25zdAogICAgICAgIHsKICAgICAgICAgIHt9OwogICAgICAgICAgcmV0dXJuIGdldCgpOwogICAg
ICAgIH0KIyA2NjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogICAgICBu
c0NPTVB0cjxUPioKICAgICAgZ2V0X2FkZHJlc3MoKQoKCiAgICAgICAgewogICAgICAgICAgcmV0
dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAgY29uc3QgbnNDT01QdHI8VD4qCiAgICAgIGdldF9h
ZGRyZXNzKCkgY29uc3QKCgogICAgICAgIHsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAg
IH0KCgoKCgoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0IG5zQ09NUHRyPFQ+KgogICAgICBvcGVy
YXRvciYoKSBjb25zdAoKCgoKCgogICAgICAgIHsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAg
ICAgIH0KCiAgICAgIG5zQ09NUHRyPFQ+KgogICAgICBvcGVyYXRvciYoKQoKCgogICAgICAgIHsK
ICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCiAgICBwdWJsaWM6CiAgICAgIG5zRGVy
aXZlZFNhZmU8VD4mCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgICAgewogICAgICAgICAg
e307CiAgICAgICAgICByZXR1cm4gKmdldCgpOwogICAgICAgIH0KCgoKCgoKICAgICAgVCoqCiAg
ICAgIFN0YXJ0QXNzaWdubWVudCgpCiAgICAgICAgewoKICAgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PCBUKiogPihiZWdpbl9hc3NpZ25tZW50KCkpOwoKCgoKICAgICAgICB9CiAgfTsK
IyA3NDUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgp0ZW1wbGF0ZSA8Pgpj
bGFzcyBuc0NPTVB0cjxuc0lTdXBwb3J0cz4KICAgIDogcHJpdmF0ZSBuc0NPTVB0cl9iYXNlCiAg
ewogICAgcHVibGljOgogICAgICB0eXBlZGVmIG5zSVN1cHBvcnRzIGVsZW1lbnRfdHlwZTsKIyA3
NjMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogICAgICBuc0NPTVB0cigp
CiAgICAgICAgICAgIDogbnNDT01QdHJfYmFzZSgwKQoKICAgICAgICB7CiAgICAgICAgICA7Owog
ICAgICAgIH0KCiAgICAgIG5zQ09NUHRyKCBjb25zdCBuc0NPTVB0cjxuc0lTdXBwb3J0cz4mIGFT
bWFydFB0ciApCiAgICAgICAgICAgIDogbnNDT01QdHJfYmFzZShhU21hcnRQdHIubVJhd1B0cikK
CiAgICAgICAgewogICAgICAgICAgaWYgKCBtUmF3UHRyICkKICAgICAgICAgICAgKG1SYXdQdHIp
LT5BZGRSZWYoKTsKICAgICAgICAgIDs7CiAgICAgICAgfQoKICAgICAgbnNDT01QdHIoIG5zSVN1
cHBvcnRzKiBhUmF3UHRyICkKICAgICAgICAgICAgOiBuc0NPTVB0cl9iYXNlKGFSYXdQdHIpCgog
ICAgICAgIHsKICAgICAgICAgIGlmICggbVJhd1B0ciApCiAgICAgICAgICAgIChtUmF3UHRyKS0+
QWRkUmVmKCk7CiAgICAgICAgICA7OwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyKCBjb25zdCBh
bHJlYWR5X0FkZFJlZmVkPG5zSVN1cHBvcnRzPiYgYVNtYXJ0UHRyICkKICAgICAgICAgICAgOiBu
c0NPTVB0cl9iYXNlKGFTbWFydFB0ci5tUmF3UHRyKQoKICAgICAgICB7CiAgICAgICAgICA7Owog
ICAgICAgIH0KCiAgICAgIG5zQ09NUHRyKCBjb25zdCBuc0NPTVB0cl9oZWxwZXImIGhlbHBlciAp
CiAgICAgICAgICAgIDogbnNDT01QdHJfYmFzZSgwKQoKCiAgICAgICAgewogICAgICAgICAgOzsK
ICAgICAgICAgIGFzc2lnbl9mcm9tX2hlbHBlcihoZWxwZXIsIG5zQ09NVHlwZUluZm88bnNJU3Vw
cG9ydHM+OjpHZXRJSUQoKSk7CiAgICAgICAgfQoKCgoKICAgICAgbnNDT01QdHI8bnNJU3VwcG9y
dHM+JgogICAgICBvcGVyYXRvcj0oIGNvbnN0IG5zQ09NUHRyPG5zSVN1cHBvcnRzPiYgcmhzICkK
CiAgICAgICAgewogICAgICAgICAgYXNzaWduX3dpdGhfQWRkUmVmKHJocy5tUmF3UHRyKTsKICAg
ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgogICAgICBuc0NPTVB0cjxuc0lTdXBwb3J0
cz4mCiAgICAgIG9wZXJhdG9yPSggbnNJU3VwcG9ydHMqIHJocyApCgogICAgICAgIHsKICAgICAg
ICAgIGFzc2lnbl93aXRoX0FkZFJlZihyaHMpOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAg
ICAgIH0KCiAgICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiYKICAgICAgb3BlcmF0b3I9KCBjb25z
dCBhbHJlYWR5X0FkZFJlZmVkPG5zSVN1cHBvcnRzPiYgcmhzICkKCiAgICAgICAgewogICAgICAg
ICAgYXNzaWduX2Fzc3VtaW5nX0FkZFJlZihyaHMubVJhd1B0cik7CiAgICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgICAgfQoKICAgICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+JgogICAgICBvcGVy
YXRvcj0oIGNvbnN0IG5zQ09NUHRyX2hlbHBlciYgcmhzICkKCgogICAgICAgIHsKICAgICAgICAg
IGFzc2lnbl9mcm9tX2hlbHBlcihyaHMsIG5zQ09NVHlwZUluZm88bnNJU3VwcG9ydHM+OjpHZXRJ
SUQoKSk7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKCgoKICAgICAgbnNEZXJp
dmVkU2FmZTxuc0lTdXBwb3J0cz4qCiAgICAgIGdldCgpIGNvbnN0CgoKCgoKCiAgICAgICAgewog
ICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IG5zRGVyaXZlZFNhZmU8bnNJU3VwcG9y
dHM+KiA+KG1SYXdQdHIpOwogICAgICAgIH0KCiAgICAgIG9wZXJhdG9yIG5zRGVyaXZlZFNhZmU8
bnNJU3VwcG9ydHM+KigpIGNvbnN0CgoKCgoKCgogICAgICAgIHsKICAgICAgICAgIHJldHVybiBn
ZXQoKTsKICAgICAgICB9CgogICAgICBuc0Rlcml2ZWRTYWZlPG5zSVN1cHBvcnRzPioKICAgICAg
b3BlcmF0b3ItPigpIGNvbnN0CiAgICAgICAgewogICAgICAgICAge307CiAgICAgICAgICByZXR1
cm4gZ2V0KCk7CiAgICAgICAgfQojIDg4NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09N
UHRyLmgiCiAgICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPioKICAgICAgZ2V0X2FkZHJlc3MoKQoK
CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAgY29uc3Qg
bnNDT01QdHI8bnNJU3VwcG9ydHM+KgogICAgICBnZXRfYWRkcmVzcygpIGNvbnN0CgoKICAgICAg
ICB7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgoKCgoKCiAgICBwcml2YXRlOgog
ICAgICBjb25zdCBuc0NPTVB0cjxuc0lTdXBwb3J0cz4qCiAgICAgIG9wZXJhdG9yJigpIGNvbnN0
CgoKCgoKCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAg
bnNDT01QdHI8bnNJU3VwcG9ydHM+KgogICAgICBvcGVyYXRvciYoKQoKCgogICAgICAgIHsKICAg
ICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCiAgICBwdWJsaWM6CgogICAgICBuc0Rlcml2
ZWRTYWZlPG5zSVN1cHBvcnRzPiYKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgICB7CiAg
ICAgICAgICB7fTsKICAgICAgICAgIHJldHVybiAqZ2V0KCk7CiAgICAgICAgfQoKCgoKCgogICAg
ICBuc0lTdXBwb3J0cyoqCiAgICAgIFN0YXJ0QXNzaWdubWVudCgpCiAgICAgICAgewoKICAgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBuc0lTdXBwb3J0cyoqID4oYmVnaW5fYXNzaWdu
bWVudCgpKTsKCgoKCiAgICAgICAgfQogIH07CiMgOTk5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNDT01QdHIuaCIKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpuc0NPTVB0cjxUPioKYWRk
cmVzc19vZiggbnNDT01QdHI8VD4mIGFQdHIgKQogIHsKICAgIHJldHVybiBhUHRyLmdldF9hZGRy
ZXNzKCk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpjb25zdCBuc0NPTVB0cjxUPioK
YWRkcmVzc19vZiggY29uc3QgbnNDT01QdHI8VD4mIGFQdHIgKQogIHsKICAgIHJldHVybiBhUHRy
LmdldF9hZGRyZXNzKCk7CiAgfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgbnNHZXR0ZXJB
ZGRSZWZzCiMgMTAzNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgewog
ICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBuc0dldHRlckFkZFJlZnMoIG5zQ09NUHRy
PFQ+JiBhU21hcnRQdHIgKQogICAgICAgICAgOiBtVGFyZ2V0U21hcnRQdHIoYVNtYXJ0UHRyKQog
ICAgICAgIHsKCiAgICAgICAgfQojIDEwNTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NP
TVB0ci5oIgogICAgICBvcGVyYXRvciB2b2lkKiooKQogICAgICAgIHsKICAgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PCB2b2lkKiogPihtVGFyZ2V0U21hcnRQdHIuU3RhcnRBc3NpZ25t
ZW50KCkpOwogICAgICAgIH0KCiAgICAgIG9wZXJhdG9yIG5zSVN1cHBvcnRzKiooKQogICAgICAg
IHsKICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBuc0lTdXBwb3J0cyoqID4obVRh
cmdldFNtYXJ0UHRyLlN0YXJ0QXNzaWdubWVudCgpKTsKICAgICAgICB9CgogICAgICBvcGVyYXRv
ciBUKiooKQogICAgICAgIHsKICAgICAgICAgIHJldHVybiBtVGFyZ2V0U21hcnRQdHIuU3RhcnRB
c3NpZ25tZW50KCk7CiAgICAgICAgfQoKICAgICAgVComCiAgICAgIG9wZXJhdG9yKigpCiAgICAg
ICAgewogICAgICAgICAgcmV0dXJuICoobVRhcmdldFNtYXJ0UHRyLlN0YXJ0QXNzaWdubWVudCgp
KTsKICAgICAgICB9CgogICAgcHJpdmF0ZToKICAgICAgbnNDT01QdHI8VD4mIG1UYXJnZXRTbWFy
dFB0cjsKICB9OwoKCnRlbXBsYXRlIDw+CmNsYXNzIG5zR2V0dGVyQWRkUmVmczxuc0lTdXBwb3J0
cz4KICB7CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIG5zR2V0dGVyQWRkUmVmcygg
bnNDT01QdHI8bnNJU3VwcG9ydHM+JiBhU21hcnRQdHIgKQogICAgICAgICAgOiBtVGFyZ2V0U21h
cnRQdHIoYVNtYXJ0UHRyKQogICAgICAgIHsKCiAgICAgICAgfQojIDExMDIgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogICAgICBvcGVyYXRvciB2b2lkKiooKQogICAgICAg
IHsKICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCB2b2lkKiogPihtVGFyZ2V0U21h
cnRQdHIuU3RhcnRBc3NpZ25tZW50KCkpOwogICAgICAgIH0KCiAgICAgIG9wZXJhdG9yIG5zSVN1
cHBvcnRzKiooKQogICAgICAgIHsKICAgICAgICAgIHJldHVybiBtVGFyZ2V0U21hcnRQdHIuU3Rh
cnRBc3NpZ25tZW50KCk7CiAgICAgICAgfQoKICAgICAgbnNJU3VwcG9ydHMqJgogICAgICBvcGVy
YXRvciooKQogICAgICAgIHsKICAgICAgICAgIHJldHVybiAqKG1UYXJnZXRTbWFydFB0ci5TdGFy
dEFzc2lnbm1lbnQoKSk7CiAgICAgICAgfQoKICAgIHByaXZhdGU6CiAgICAgIG5zQ09NUHRyPG5z
SVN1cHBvcnRzPiYgbVRhcmdldFNtYXJ0UHRyOwogIH07CgoKdGVtcGxhdGUgPGNsYXNzIFQ+Cmlu
bGluZQpuc0dldHRlckFkZFJlZnM8VD4KZ2V0dGVyX0FkZFJlZnMoIG5zQ09NUHRyPFQ+JiBhU21h
cnRQdHIgKQoKCgoKICB7CiAgICByZXR1cm4gbnNHZXR0ZXJBZGRSZWZzPFQ+KGFTbWFydFB0cik7
CiAgfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxpbmUKTlNDQVBfQk9PTApv
cGVyYXRvcj09KCBjb25zdCBuc0NPTVB0cjxUPiYgbGhzLCBjb25zdCBuc0NPTVB0cjxVPiYgcmhz
ICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzLmdldCgpKSA9
PSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMuZ2V0KCkpOwogIH0KCgp0ZW1wbGF0ZSA8
Y2xhc3MgVCwgY2xhc3MgVT4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3IhPSggY29uc3QgbnND
T01QdHI8VD4mIGxocywgY29uc3QgbnNDT01QdHI8VT4mIHJocyApCiAgewogICAgcmV0dXJuIHN0
YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KGxocy5nZXQoKSkgIT0gc3RhdGljX2Nhc3Q8IGNvbnN0
IHZvaWQqID4ocmhzLmdldCgpKTsKICB9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4K
aW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3I9PSggY29uc3QgbnNDT01QdHI8VD4mIGxocywgY29u
c3QgVSogcmhzICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhz
LmdldCgpKSA9PSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMpOwogIH0KCnRlbXBsYXRl
IDxjbGFzcyBULCBjbGFzcyBVPgppbmxpbmUKTlNDQVBfQk9PTApvcGVyYXRvcj09KCBjb25zdCBV
KiBsaHMsIGNvbnN0IG5zQ09NUHRyPFQ+JiByaHMgKQogIHsKICAgIHJldHVybiBzdGF0aWNfY2Fz
dDwgY29uc3Qgdm9pZCogPihsaHMpID09IHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KHJocy5n
ZXQoKSk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+CmlubGluZQpOU0NBUF9CT09M
Cm9wZXJhdG9yIT0oIGNvbnN0IG5zQ09NUHRyPFQ+JiBsaHMsIGNvbnN0IFUqIHJocyApCiAgewog
ICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KGxocy5nZXQoKSkgIT0gc3RhdGlj
X2Nhc3Q8IGNvbnN0IHZvaWQqID4ocmhzKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3Mg
VT4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3IhPSggY29uc3QgVSogbGhzLCBjb25zdCBuc0NP
TVB0cjxUPiYgcmhzICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4o
bGhzKSAhPSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMuZ2V0KCkpOwogIH0KIyAxMjA2
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKdGVtcGxhdGUgPGNsYXNzIFQs
IGNsYXNzIFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yPT0oIGNvbnN0IG5zQ09NUHRyPFQ+
JiBsaHMsIFUqIHJocyApCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+
KGxocy5nZXQoKSkgPT0gc3RhdGljX2Nhc3Q8IHZvaWQqID4ocmhzKTsKICB9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgVCwgY2xhc3MgVT4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3I9PSggVSogbGhzLCBj
b25zdCBuc0NPTVB0cjxUPiYgcmhzICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IHZvaWQq
ID4obGhzKSA9PSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMuZ2V0KCkpOwogIH0KCnRl
bXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxpbmUKTlNDQVBfQk9PTApvcGVyYXRvciE9KCBj
b25zdCBuc0NPTVB0cjxUPiYgbGhzLCBVKiByaHMgKQogIHsKICAgIHJldHVybiBzdGF0aWNfY2Fz
dDwgY29uc3Qgdm9pZCogPihsaHMuZ2V0KCkpICE9IHN0YXRpY19jYXN0PCB2b2lkKiA+KHJocyk7
CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJh
dG9yIT0oIFUqIGxocywgY29uc3QgbnNDT01QdHI8VD4mIHJocyApCiAgewogICAgcmV0dXJuIHN0
YXRpY19jYXN0PCB2b2lkKiA+KGxocykgIT0gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4ocmhz
LmdldCgpKTsKICB9CgoKCgoKCmNsYXNzIE5TQ0FQX1plcm87Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4K
aW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3I9PSggY29uc3QgbnNDT01QdHI8VD4mIGxocywgTlND
QVBfWmVybyogcmhzICkKCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+
KGxocy5nZXQoKSkgPT0gcmVpbnRlcnByZXRfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMpOwogIH0K
CnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKTlNDQVBfQk9PTApvcGVyYXRvcj09KCBOU0NBUF9a
ZXJvKiBsaHMsIGNvbnN0IG5zQ09NUHRyPFQ+JiByaHMgKQoKICB7CiAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMpID09IHN0YXRpY19jYXN0PCBjb25zdCB2b2lk
KiA+KHJocy5nZXQoKSk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpOU0NBUF9CT09M
Cm9wZXJhdG9yIT0oIGNvbnN0IG5zQ09NUHRyPFQ+JiBsaHMsIE5TQ0FQX1plcm8qIHJocyApCgog
IHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMuZ2V0KCkpICE9IHJl
aW50ZXJwcmV0X2Nhc3Q8IGNvbnN0IHZvaWQqID4ocmhzKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
VD4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3IhPSggTlNDQVBfWmVybyogbGhzLCBjb25zdCBu
c0NPTVB0cjxUPiYgcmhzICkKCiAgewogICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IGNvbnN0
IHZvaWQqID4obGhzKSAhPSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMuZ2V0KCkpOwog
IH0KIyAxMzA5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKaW5saW5lCk5T
Q0FQX0JPT0wKU2FtZUNPTUlkZW50aXR5KCBuc0lTdXBwb3J0cyogbGhzLCBuc0lTdXBwb3J0cyog
cmhzICkKICB7CiAgICByZXR1cm4gbnNDT01QdHI8bnNJU3VwcG9ydHM+KCBkb19RdWVyeUludGVy
ZmFjZShsaHMpICkgPT0gbnNDT01QdHI8bnNJU3VwcG9ydHM+KCBkb19RdWVyeUludGVyZmFjZShy
aHMpICk7CiAgfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgU291cmNlVHlwZSwgY2xhc3MgRGVzdGluYXRp
b25UeXBlPgppbmxpbmUKbnNyZXN1bHQKQ2FsbFF1ZXJ5SW50ZXJmYWNlKCBuc0NPTVB0cjxTb3Vy
Y2VUeXBlPiYgYVNvdXJjZVB0ciwgRGVzdGluYXRpb25UeXBlKiogYURlc3RQdHIgKQogIHsKICAg
IHJldHVybiBDYWxsUXVlcnlJbnRlcmZhY2UoYVNvdXJjZVB0ci5nZXQoKSwgYURlc3RQdHIpOwog
IH0KIyAyMyAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQvaHRtbC9mb3Jtcy9zcmMvbnNG
b3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91
dC9odG1sL2Zvcm1zL3NyYy9uc0Zvcm1Db250cm9sSGVscGVyLmgiIDEKIyAyNiAiLi4vLi4vLi4v
Li4vLi4vbW96aWxsYS9sYXlvdXQvaHRtbC9mb3Jtcy9zcmMvbnNGb3JtQ29udHJvbEhlbHBlci5o
IgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtQ29udHJvbEZyYW1lLmgiIDEK
IyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZvcm1Db250cm9sRnJhbWUuaCIKIyAx
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDI3ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybUNvbnRyb2xGcmFtZS5oIiAyCiMgMSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zRm9udC5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0ZvbnQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAy
NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRm9udC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zQ29vcmQuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNDb29yZC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDI3
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb29yZC5oIiAyCiMgNDAgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0Nvb3JkLmgiCnR5cGVkZWYgUFJJbnQzMiBuc2Nvb3JkOwojIDI4ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNGb250LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNTdHJpbmcuaCIgMQojIDQ2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNT
dHJpbmcuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiIDEKIyA0
NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgojIDEgIi9ob21lL2thaS9t
LzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyA0
OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIiAyCiMgMSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgNDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc1N0cmluZzIuaCIgMgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyA1MCAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zU3RyaW5nLmgiIDEKIyA1MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5o
IiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUF0b20uaCIgMQojIDE3ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQXRvbS5oIgpjbGFzcyBuc0lTaXplT2ZIYW5kbGVyOwoK
IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBV3JpdGFibGVTdHJpbmcuaCIgMQojIDMw
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBV3JpdGFibGVTdHJpbmcuaCIKIyAxICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBUmVhZGFibGVTdHJpbmcuaCIgMQojIDMwICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNBUmVhZGFibGVTdHJpbmcuaCIKIyAxICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNBU3RyaW5nLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zQVN0cmluZy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0Z3ZC5o
IiAxCiMgMzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0Z3ZC5oIgpjbGFzcyBu
c0FTdHJpbmc7CmNsYXNzIG5zQUNTdHJpbmc7CgoKCgoKCmNsYXNzIG5zQVByb21pc2VTdHJpbmc7
CmNsYXNzIG5zQVByb21pc2VDU3RyaW5nOwoKCgoKCgpjbGFzcyBuc0FGbGF0U3RyaW5nOwpjbGFz
cyBuc0FGbGF0Q1N0cmluZzsKCgoKCgoKY2xhc3MgbnNEZXBlbmRlbnRTdHJpbmc7CmNsYXNzIG5z
RGVwZW5kZW50Q1N0cmluZzsKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmlu
Zy5oIiAyCgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUHJpdmF0ZVNoYXJhYmxl
U3RyaW5nLmgiIDEKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUHJpdmF0ZVNoYXJh
YmxlU3RyaW5nLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVmZmVySGFuZGxl
LmgiIDEKIyAzMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVmZmVySGFuZGxlLmgiCiMg
MSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVm
ZmVySGFuZGxlLmgiIDIKCgojIDEgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9k
aXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAzNCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zQnVmZmVySGFuZGxlLmgiIDIKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0RlYnVnLmgiIDEKIyAzNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVmZmVySGFuZGxl
LmgiIDIKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDQwICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNCdWZmZXJIYW5kbGUuaCIgMgojIDgwICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNCdWZmZXJIYW5kbGUuaCIKdGVtcGxhdGUgPGNsYXNzIENoYXJU
PgpjbGFzcyBuc0J1ZmZlckhhbmRsZQogIHsKICAgIHB1YmxpYzoKICAgICAgbnNCdWZmZXJIYW5k
bGUoKSB7IH0KICAgICAgbnNCdWZmZXJIYW5kbGUoIENoYXJUKiBhRGF0YVN0YXJ0LCBDaGFyVCog
YURhdGFFbmQgKSA6IG1EYXRhU3RhcnQoYURhdGFTdGFydCksIG1EYXRhRW5kKGFEYXRhRW5kKSB7
IH0KCiAgICAgIHZvaWQgRGF0YVN0YXJ0KCBDaGFyVCogYU5ld0RhdGFTdGFydCApIHsgbURhdGFT
dGFydCA9IGFOZXdEYXRhU3RhcnQ7IH0KICAgICAgQ2hhclQqIERhdGFTdGFydCgpIHsgcmV0dXJu
IG1EYXRhU3RhcnQ7IH0KICAgICAgY29uc3QgQ2hhclQqIERhdGFTdGFydCgpIGNvbnN0IHsgcmV0
dXJuIG1EYXRhU3RhcnQ7IH0KCiAgICAgIHZvaWQgRGF0YUVuZCggQ2hhclQqIGFOZXdEYXRhRW5k
ICkgeyBtRGF0YUVuZCA9IGFOZXdEYXRhRW5kOyB9CiAgICAgIENoYXJUKiBEYXRhRW5kKCkgeyBy
ZXR1cm4gbURhdGFFbmQ7IH0KICAgICAgY29uc3QgQ2hhclQqIERhdGFFbmQoKSBjb25zdCB7IHJl
dHVybiBtRGF0YUVuZDsgfQoKICAgICAgcHRyZGlmZl90IERhdGFMZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBtRGF0YUVuZCAtIG1EYXRhU3RhcnQ7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIENoYXJU
KiBtRGF0YVN0YXJ0OwogICAgICBDaGFyVCogbURhdGFFbmQ7CiAgfTsKCnRlbXBsYXRlIDxjbGFz
cyBDaGFyVD4KY2xhc3MgbnNDb25zdEJ1ZmZlckhhbmRsZQogIHsKICAgIHB1YmxpYzoKICAgICAg
bnNDb25zdEJ1ZmZlckhhbmRsZSgpIHsgfQogICAgICBuc0NvbnN0QnVmZmVySGFuZGxlKCBjb25z
dCBDaGFyVCogYURhdGFTdGFydCwgY29uc3QgQ2hhclQqIGFEYXRhRW5kICkgOiBtRGF0YVN0YXJ0
KGFEYXRhU3RhcnQpLCBtRGF0YUVuZChhRGF0YUVuZCkgeyB9CgogICAgICB2b2lkIERhdGFTdGFy
dCggY29uc3QgQ2hhclQqIGFOZXdEYXRhU3RhcnQgKSB7IG1EYXRhU3RhcnQgPSBhTmV3RGF0YVN0
YXJ0OyB9CiAgICAgIGNvbnN0IENoYXJUKiBEYXRhU3RhcnQoKSBjb25zdCB7IHJldHVybiBtRGF0
YVN0YXJ0OyB9CgogICAgICB2b2lkIERhdGFFbmQoIGNvbnN0IENoYXJUKiBhTmV3RGF0YUVuZCAp
IHsgbURhdGFFbmQgPSBhTmV3RGF0YUVuZDsgfQogICAgICBjb25zdCBDaGFyVCogRGF0YUVuZCgp
IGNvbnN0IHsgcmV0dXJuIG1EYXRhRW5kOyB9CgogICAgICBwdHJkaWZmX3QgRGF0YUxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1EYXRhRW5kIC0gbURhdGFTdGFydDsgfQoKICAgIHByb3RlY3RlZDoK
ICAgICAgY29uc3QgQ2hhclQqIG1EYXRhU3RhcnQ7CiAgICAgIGNvbnN0IENoYXJUKiBtRGF0YUVu
ZDsKICB9OwoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpjbGFzcyBuc1N0cmluZ0FsbG9j
YXRvcgogIHsKICAgIHB1YmxpYzoKCiAgICAgIHZpcnR1YWwgdm9pZCBEZWFsbG9jYXRlKCBDaGFy
VCogKSBjb25zdCA9IDA7CiAgfTsKCgoKCiAgICAgICBuc1N0cmluZ0FsbG9jYXRvcjxjaGFyPiYg
U3RyaW5nQWxsb2NhdG9yX2NoYXIoKTsKICAgICAgIG5zU3RyaW5nQWxsb2NhdG9yPFBSVW5pY2hh
cj4mIFN0cmluZ0FsbG9jYXRvcl93Y2hhcl90KCk7CgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0
cnVjdCBuc1N0cmluZ0FsbG9jYXRvclRyYWl0cwogIHsKICB9OwoKdGVtcGxhdGUgPD4Kc3RydWN0
IG5zU3RyaW5nQWxsb2NhdG9yVHJhaXRzPGNoYXI+CiAgewogICAgc3RhdGljIG5zU3RyaW5nQWxs
b2NhdG9yPGNoYXI+JiBnbG9iYWxfc3RyaW5nX2FsbG9jYXRvcigpIHsgcmV0dXJuIFN0cmluZ0Fs
bG9jYXRvcl9jaGFyKCk7IH0KICB9OwoKdGVtcGxhdGUgPD4Kc3RydWN0IG5zU3RyaW5nQWxsb2Nh
dG9yVHJhaXRzPFBSVW5pY2hhcj4KICB7CiAgICBzdGF0aWMgbnNTdHJpbmdBbGxvY2F0b3I8UFJV
bmljaGFyPiYgZ2xvYmFsX3N0cmluZ19hbGxvY2F0b3IoKSB7IHJldHVybiBTdHJpbmdBbGxvY2F0
b3Jfd2NoYXJfdCgpOyB9CiAgfTsKIyAxNzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0J1
ZmZlckhhbmRsZS5oIgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zU2hhcmVkQnVmZmVy
SGFuZGxlCiAgICA6IHB1YmxpYyBuc0J1ZmZlckhhbmRsZTxDaGFyVD4KICB7CiAgICBwcm90ZWN0
ZWQ6CiAgICAgIGVudW0KICAgICAgICB7CiAgICAgICAgICBrSXNTaGFyZWQgPSAweDA4MDAwMDAw
LAogICAgICAgICAga0lzU2luZ2xlQWxsb2NhdGlvbldpdGhCdWZmZXIgPSAweDA0MDAwMDAwLAog
ICAgICAgICAga0lzU3RvcmFnZURlZmluZWRTZXBhcmF0ZWx5ID0gMHgwMjAwMDAwMCwKICAgICAg
ICAgIGtJc1VzZXJBbGxvY2F0b3IgPSAweDAxMDAwMDAwLAoKCiAgICAgICAgICBrSXNOVUxMID0g
MHg4MDAwMDAwMCwKICAgICAgICAgIGtJbXBsZW1lbnRhdGlvbkZsYWdzTWFzayA9IDB4RjAwMDAw
MDAsCgogICAgICAgICAga0ZsYWdzTWFzayA9IDB4RkYwMDAwMDAsCiAgICAgICAgICBrUmVmQ291
bnRNYXNrID0gMHgwMEZGRkZGRgogICAgICAgIH07CgogICAgcHVibGljOgogICAgICBuc1NoYXJl
ZEJ1ZmZlckhhbmRsZSggQ2hhclQqIGFEYXRhU3RhcnQsIENoYXJUKiBhRGF0YUVuZCApCiAgICAg
ICAgICA6IG5zQnVmZmVySGFuZGxlPENoYXJUPihhRGF0YVN0YXJ0LCBhRGF0YUVuZCkKICAgICAg
ICB7CiAgICAgICAgICBtRmxhZ3MgPSBrSXNTaGFyZWQ7CiAgICAgICAgfQoKICAgICAgbnNTaGFy
ZWRCdWZmZXJIYW5kbGUoIENoYXJUKiBhRGF0YVN0YXJ0LCBDaGFyVCogYURhdGFFbmQsIENoYXJU
KiwgQ2hhclQqLCBQUkJvb2wgaXNTaW5nbGVBbGxvY2F0aW9uICkKICAgICAgICAgIDogbnNCdWZm
ZXJIYW5kbGU8Q2hhclQ+KGFEYXRhU3RhcnQsIGFEYXRhRW5kKQogICAgICAgIHsKICAgICAgICAg
IG1GbGFncyA9IGtJc1NoYXJlZDsKICAgICAgICAgIGlmICggaXNTaW5nbGVBbGxvY2F0aW9uICkK
ICAgICAgICAgICAgbUZsYWdzIHw9IGtJc1NpbmdsZUFsbG9jYXRpb25XaXRoQnVmZmVyOwogICAg
ICAgIH0KCiAgICAgIH5uc1NoYXJlZEJ1ZmZlckhhbmRsZSgpOwoKICAgICAgdm9pZAogICAgICBB
Y3F1aXJlUmVmZXJlbmNlKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICBuc1NoYXJlZEJ1ZmZl
ckhhbmRsZTxDaGFyVD4qIG11dGFibGVfdGhpcyA9IGNvbnN0X2Nhc3Q8IG5zU2hhcmVkQnVmZmVy
SGFuZGxlPENoYXJUPiogPih0aGlzKTsKICAgICAgICAgIG11dGFibGVfdGhpcy0+c2V0X3JlZmNv
dW50KCBnZXRfcmVmY291bnQoKSsxICk7CiAgICAgICAgfQoKICAgICAgdm9pZAogICAgICBSZWxl
YXNlUmVmZXJlbmNlKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICBuc1NoYXJlZEJ1ZmZlckhh
bmRsZTxDaGFyVD4qIG11dGFibGVfdGhpcyA9IGNvbnN0X2Nhc3Q8IG5zU2hhcmVkQnVmZmVySGFu
ZGxlPENoYXJUPiogPih0aGlzKTsKICAgICAgICAgIGlmICggIW11dGFibGVfdGhpcy0+c2V0X3Jl
ZmNvdW50KCBnZXRfcmVmY291bnQoKS0xICkgKQogICAgICAgICAgICBkZWxldGUgbXV0YWJsZV90
aGlzOwoKICAgICAgICB9CgogICAgICBQUkJvb2wKICAgICAgSXNSZWZlcmVuY2VkKCkgY29uc3QK
ICAgICAgICB7CiAgICAgICAgICByZXR1cm4gZ2V0X3JlZmNvdW50KCkgIT0gMDsKICAgICAgICB9
CgogICAgICBQUlVpbnQzMgogICAgICBHZXRJbXBsZW1lbnRhdGlvbkZsYWdzKCkgY29uc3QKICAg
ICAgICB7CiAgICAgICAgICByZXR1cm4gbUZsYWdzICYga0ltcGxlbWVudGF0aW9uRmxhZ3NNYXNr
OwogICAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgU2V0SW1wbGVtZW50YXRpb25GbGFncyggUFJV
aW50MzIgYU5ld0ZsYWdzICkKICAgICAgICB7CiAgICAgICAgICBtRmxhZ3MgPSAobUZsYWdzICYg
fmtJbXBsZW1lbnRhdGlvbkZsYWdzTWFzaykgfCAoYU5ld0ZsYWdzICYga0ltcGxlbWVudGF0aW9u
RmxhZ3NNYXNrKTsKICAgICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICBQUlVpbnQzMiBtRmxh
Z3M7CgogICAgICBQUlVpbnQzMgogICAgICBnZXRfcmVmY291bnQoKSBjb25zdAogICAgICAgIHsK
ICAgICAgICAgIHJldHVybiBtRmxhZ3MgJiBrUmVmQ291bnRNYXNrOwogICAgICAgIH0KCiAgICAg
IFBSVWludDMyCiAgICAgIHNldF9yZWZjb3VudCggUFJVaW50MzIgYU5ld1JlZkNvdW50ICkKICAg
ICAgICB7CiAgICAgICAgICB7fTsKCiAgICAgICAgICBtRmxhZ3MgPSAobUZsYWdzICYga0ZsYWdz
TWFzaykgfCBhTmV3UmVmQ291bnQ7CiAgICAgICAgICByZXR1cm4gYU5ld1JlZkNvdW50OwogICAg
ICAgIH0KCiAgICAgIG5zU3RyaW5nQWxsb2NhdG9yPENoYXJUPiYgZ2V0X2FsbG9jYXRvcigpIGNv
bnN0OwogIH07CgoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpjbGFzcyBuc0ZsZXhCdWZmZXJIYW5k
bGUKICAgIDogcHVibGljIG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPgogIHsKICAgIHB1Ymxp
YzoKICAgICAgbnNGbGV4QnVmZmVySGFuZGxlKCBDaGFyVCogYURhdGFTdGFydCwgQ2hhclQqIGFE
YXRhRW5kLCBDaGFyVCogYVN0b3JhZ2VTdGFydCwgQ2hhclQqIGFTdG9yYWdlRW5kICkKICAgICAg
ICAgIDogbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KGFEYXRhU3RhcnQsIGFEYXRhRW5kKSwK
ICAgICAgICAgICAgbVN0b3JhZ2VTdGFydChhU3RvcmFnZVN0YXJ0KSwKICAgICAgICAgICAgbVN0
b3JhZ2VFbmQoYVN0b3JhZ2VFbmQpCiAgICAgICAgewogICAgICAgICAgdGhpcy0+bUZsYWdzIHw9
IHRoaXMtPmtJc1N0b3JhZ2VEZWZpbmVkU2VwYXJhdGVseTsKICAgICAgICB9CgogICAgICB2b2lk
IFN0b3JhZ2VTdGFydCggQ2hhclQqIGFOZXdTdG9yYWdlU3RhcnQgKSB7IG1TdG9yYWdlU3RhcnQg
PSBhTmV3U3RvcmFnZVN0YXJ0OyB9CiAgICAgIENoYXJUKiBTdG9yYWdlU3RhcnQoKSB7IHJldHVy
biBtU3RvcmFnZVN0YXJ0OyB9CiAgICAgIGNvbnN0IENoYXJUKiBTdG9yYWdlU3RhcnQoKSBjb25z
dCB7IHJldHVybiBtU3RvcmFnZVN0YXJ0OyB9CgogICAgICB2b2lkIFN0b3JhZ2VFbmQoIENoYXJU
KiBhTmV3U3RvcmFnZUVuZCApIHsgbVN0b3JhZ2VFbmQgPSBhTmV3U3RvcmFnZUVuZDsgfQogICAg
ICBDaGFyVCogU3RvcmFnZUVuZCgpIHsgcmV0dXJuIG1TdG9yYWdlRW5kOyB9CiAgICAgIGNvbnN0
IENoYXJUKiBTdG9yYWdlRW5kKCkgY29uc3QgeyByZXR1cm4gbVN0b3JhZ2VFbmQ7IH0KCiAgICAg
IHB0cmRpZmZfdCBTdG9yYWdlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbVN0b3JhZ2VFbmQgLSBt
U3RvcmFnZVN0YXJ0OyB9CgogICAgcHJvdGVjdGVkOgogICAgICBDaGFyVCogbVN0b3JhZ2VTdGFy
dDsKICAgICAgQ2hhclQqIG1TdG9yYWdlRW5kOwogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+
CmNsYXNzIG5zU2hhcmVkQnVmZmVySGFuZGxlV2l0aEFsbG9jYXRvcgogICAgOiBwdWJsaWMgbnNT
aGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+CiAgewogICAgcHVibGljOgogICAgICBuc1NoYXJlZEJ1
ZmZlckhhbmRsZVdpdGhBbGxvY2F0b3IoIENoYXJUKiBhRGF0YVN0YXJ0LCBDaGFyVCogYURhdGFF
bmQsIG5zU3RyaW5nQWxsb2NhdG9yPENoYXJUPiYgYUFsbG9jYXRvciApCiAgICAgICAgICA6IG5z
U2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPihhRGF0YVN0YXJ0LCBhRGF0YUVuZCksCiAgICAgICAg
ICAgIG1BbGxvY2F0b3IoYUFsbG9jYXRvcikKICAgICAgICB7CiAgICAgICAgICB0aGlzLT5tRmxh
Z3MgfD0gdGhpcy0+a0lzVXNlckFsbG9jYXRvcjsKICAgICAgICB9CgogICAgICBuc1N0cmluZ0Fs
bG9jYXRvcjxDaGFyVD4mIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtQWxsb2NhdG9y
OyB9CgogICAgcHJvdGVjdGVkOgogICAgICBuc1N0cmluZ0FsbG9jYXRvcjxDaGFyVD4mIG1BbGxv
Y2F0b3I7CiAgfTsKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4KY2xhc3MgbnNGbGV4QnVmZmVySGFu
ZGxlV2l0aEFsbG9jYXRvcgogICAgOiBwdWJsaWMgbnNGbGV4QnVmZmVySGFuZGxlPENoYXJUPgog
IHsKICAgIHB1YmxpYzoKICAgICAgbnNGbGV4QnVmZmVySGFuZGxlV2l0aEFsbG9jYXRvciggQ2hh
clQqIGFEYXRhU3RhcnQsIENoYXJUKiBhRGF0YUVuZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ2hhclQqIGFTdG9yYWdlU3RhcnQsIENoYXJUKiBhU3RvcmFnZUVuZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNTdHJpbmdBbGxvY2F0b3I8
Q2hhclQ+JiBhQWxsb2NhdG9yICkKICAgICAgICAgIDogbnNGbGV4QnVmZmVySGFuZGxlPENoYXJU
PihhRGF0YVN0YXJ0LCBhRGF0YUVuZCwgYVN0b3JhZ2VTdGFydCwgYVN0b3JhZ2VFbmQpLAogICAg
ICAgICAgICBtQWxsb2NhdG9yKGFBbGxvY2F0b3IpCiAgICAgICAgewogICAgICAgICAgdGhpcy0+
bUZsYWdzIHw9IHRoaXMtPmtJc1VzZXJBbGxvY2F0b3I7CiAgICAgICAgfQoKICAgICAgbnNTdHJp
bmdBbGxvY2F0b3I8Q2hhclQ+JiBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbUFsbG9j
YXRvcjsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgbnNTdHJpbmdBbGxvY2F0b3I8Q2hhclQ+JiBt
QWxsb2NhdG9yOwogIH07CgoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpuc1N0cmluZ0FsbG9jYXRv
cjxDaGFyVD4mCm5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPjo6Z2V0X2FsbG9jYXRvcigpIGNv
bnN0CgogIHsKICAgIGlmICggbUZsYWdzICYga0lzVXNlckFsbG9jYXRvciApCiAgICAgIHsKICAg
ICAgICBpZiAoIG1GbGFncyAmIGtJc1N0b3JhZ2VEZWZpbmVkU2VwYXJhdGVseSApCiAgICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgY29uc3QgbnNGbGV4QnVmZmVySGFuZGxlV2l0aEFs
bG9jYXRvcjxDaGFyVD4qID4odGhpcyktPmdldF9hbGxvY2F0b3IoKTsKICAgICAgICBlbHNlCiAg
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgY29uc3QgbnNTaGFyZWRCdWZmZXJIYW5k
bGVXaXRoQWxsb2NhdG9yPENoYXJUPiogPih0aGlzKS0+Z2V0X2FsbG9jYXRvcigpOwogICAgICB9
CgogICAgcmV0dXJuIG5zU3RyaW5nQWxsb2NhdG9yVHJhaXRzPENoYXJUPjo6Z2xvYmFsX3N0cmlu
Z19hbGxvY2F0b3IoKTsKICB9CgoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpuc1NoYXJlZEJ1ZmZl
ckhhbmRsZTxDaGFyVD46On5uc1NoYXJlZEJ1ZmZlckhhbmRsZSgpCgogIHsKICAgIHt9OwoKICAg
IGlmICggIShtRmxhZ3MgJiBrSXNTaW5nbGVBbGxvY2F0aW9uV2l0aEJ1ZmZlcikgKQogICAgICB7
CiAgICAgICAgQ2hhclQqIHN0cmluZ19zdG9yYWdlID0gdGhpcy0+bURhdGFTdGFydDsKICAgICAg
ICBpZiAoIG1GbGFncyAmIGtJc1N0b3JhZ2VEZWZpbmVkU2VwYXJhdGVseSApCiAgICAgICAgICBz
dHJpbmdfc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8IG5zRmxleEJ1ZmZlckhhbmRsZTxDaGFy
VD4qID4odGhpcyktPlN0b3JhZ2VTdGFydCgpOwoKICAgICAgICBnZXRfYWxsb2NhdG9yKCkuRGVh
bGxvY2F0ZShzdHJpbmdfc3RvcmFnZSk7CiAgICAgIH0KICB9CiMgMzAgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc1ByaXZhdGVTaGFyYWJsZVN0cmluZy5oIiAyCiMgNDAgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc1ByaXZhdGVTaGFyYWJsZVN0cmluZy5oIgpjbGFzcyBuc1ByaXZhdGVT
aGFyYWJsZVN0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBQUlVuaWNoYXIgY2hh
cl90eXBlOwoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCB+bnNQcml2YXRlU2hhcmFibGVTdHJp
bmcoKSB7fQoKICAgICAgdmlydHVhbCBQUlVpbnQzMiBHZXRJbXBsZW1lbnRhdGlvbkZsYWdzKCkg
Y29uc3Q7CiAgICAgIHZpcnR1YWwgY29uc3QgbnNCdWZmZXJIYW5kbGU8Y2hhcl90eXBlPiogR2V0
RmxhdEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgICB2aXJ0dWFsIGNvbnN0IG5zQnVmZmVySGFu
ZGxlPGNoYXJfdHlwZT4qIEdldEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgICB2aXJ0dWFsIGNv
bnN0IG5zU2hhcmVkQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4qIEdldFNoYXJlZEJ1ZmZlckhhbmRs
ZSgpIGNvbnN0OwoKCgoKCgoKICB9OwoKY2xhc3MgbnNQcml2YXRlU2hhcmFibGVDU3RyaW5nCiAg
ewogICAgcHVibGljOgogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwoKICAgIHB1YmxpYzoK
ICAgICAgdmlydHVhbCB+bnNQcml2YXRlU2hhcmFibGVDU3RyaW5nKCkge30KCiAgICAgIHZpcnR1
YWwgUFJVaW50MzIgR2V0SW1wbGVtZW50YXRpb25GbGFncygpIGNvbnN0OwogICAgICB2aXJ0dWFs
IGNvbnN0IG5zQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4qIEdldEZsYXRCdWZmZXJIYW5kbGUoKSBj
b25zdDsKICAgICAgdmlydHVhbCBjb25zdCBuc0J1ZmZlckhhbmRsZTxjaGFyX3R5cGU+KiBHZXRC
dWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25zdCBuc1NoYXJlZEJ1ZmZlckhh
bmRsZTxjaGFyX3R5cGU+KiBHZXRTaGFyZWRCdWZmZXJIYW5kbGUoKSBjb25zdDsKCgoKCgoKCiAg
fTsKIyAzMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5oIiAyCgoKCiMgMSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ2hhclRyYWl0cy5oIiAxCiMgMjcgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0NoYXJUcmFpdHMuaCIKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUu
aCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Zl
YXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMK
CmV4dGVybiAiQyIgewojIDQwICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9lbmRpYW4uaCIgMSAzCiMgNDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKCgoKCgoK
ZW51bQp7CiAgX0lTdXBwZXIgPSAoKDApIDwgOCA/ICgoMSA8PCAoMCkpIDw8IDgpIDogKCgxIDw8
ICgwKSkgPj4gOCkpLAogIF9JU2xvd2VyID0gKCgxKSA8IDggPyAoKDEgPDwgKDEpKSA8PCA4KSA6
ICgoMSA8PCAoMSkpID4+IDgpKSwKICBfSVNhbHBoYSA9ICgoMikgPCA4ID8gKCgxIDw8ICgyKSkg
PDwgOCkgOiAoKDEgPDwgKDIpKSA+PiA4KSksCiAgX0lTZGlnaXQgPSAoKDMpIDwgOCA/ICgoMSA8
PCAoMykpIDw8IDgpIDogKCgxIDw8ICgzKSkgPj4gOCkpLAogIF9JU3hkaWdpdCA9ICgoNCkgPCA4
ID8gKCgxIDw8ICg0KSkgPDwgOCkgOiAoKDEgPDwgKDQpKSA+PiA4KSksCiAgX0lTc3BhY2UgPSAo
KDUpIDwgOCA/ICgoMSA8PCAoNSkpIDw8IDgpIDogKCgxIDw8ICg1KSkgPj4gOCkpLAogIF9JU3By
aW50ID0gKCg2KSA8IDggPyAoKDEgPDwgKDYpKSA8PCA4KSA6ICgoMSA8PCAoNikpID4+IDgpKSwK
ICBfSVNncmFwaCA9ICgoNykgPCA4ID8gKCgxIDw8ICg3KSkgPDwgOCkgOiAoKDEgPDwgKDcpKSA+
PiA4KSksCiAgX0lTYmxhbmsgPSAoKDgpIDwgOCA/ICgoMSA8PCAoOCkpIDw8IDgpIDogKCgxIDw8
ICg4KSkgPj4gOCkpLAogIF9JU2NudHJsID0gKCg5KSA8IDggPyAoKDEgPDwgKDkpKSA8PCA4KSA6
ICgoMSA8PCAoOSkpID4+IDgpKSwKICBfSVNwdW5jdCA9ICgoMTApIDwgOCA/ICgoMSA8PCAoMTAp
KSA8PCA4KSA6ICgoMSA8PCAoMTApKSA+PiA4KSksCiAgX0lTYWxudW0gPSAoKDExKSA8IDggPyAo
KDEgPDwgKDExKSkgPDwgOCkgOiAoKDEgPDwgKDExKSkgPj4gOCkpCn07CiMgNzUgIi91c3IvaW5j
bHVkZS9jdHlwZS5oIiAzCmV4dGVybiBfX2NvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlw
ZV9iOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG9sb3dlcjsKZXh0ZXJuIF9f
Y29uc3QgX19pbnQzMl90ICpfX2N0eXBlX3RvdXBwZXI7CiMgOTEgIi91c3IvaW5jbHVkZS9jdHlw
ZS5oIiAzCmV4dGVybiBpbnQgaXNhbG51bSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2Fs
cGhhIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzY250cmwgKGludCkgdGhyb3cgKCk7CmV4
dGVybiBpbnQgaXNkaWdpdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQp
IHRocm93ICgpOwpleHRlcm4gaW50IGlzZ3JhcGggKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg
aXNwcmludCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3B1bmN0IChpbnQpIHRocm93ICgp
OwpleHRlcm4gaW50IGlzc3BhY2UgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN1cHBlciAo
aW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3hkaWdpdCAoaW50KSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IGlzYmxhbmsgKGludCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRvbG93ZXIgKGlu
dCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdG91cHBlciAoaW50IF9fYykgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBpbnQgaXNhc2NpaSAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgdG9hc2NpaSAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGlu
dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX3RvbG93ZXIgKGludCkgdGhyb3cgKCk7CiMgMTY4ICIv
dXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gX19pbmxpbmUgaW50CnRvbG93ZXIgKGludCBf
X2MpIHRocm93ICgpCnsKICByZXR1cm4gX19jID49IC0xMjggJiYgX19jIDwgMjU2ID8gX19jdHlw
ZV90b2xvd2VyW19fY10gOiBfX2M7Cn0KCmV4dGVybiBfX2lubGluZSBpbnQKdG91cHBlciAoaW50
IF9fYykgdGhyb3cgKCkKewogIHJldHVybiBfX2MgPj0gLTEyOCAmJiBfX2MgPCAyNTYgPyBfX2N0
eXBlX3RvdXBwZXJbX19jXSA6IF9fYzsKfQojIDIxMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyMTIgIi91c3IvaW5jbHVkZS9jdHlw
ZS5oIiAyIDMKIyAyMjQgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQgX19pc2Fs
bnVtX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2FscGhhX2wg
KGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2NudHJsX2wgKGludCwg
X19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2RpZ2l0X2wgKGludCwgX19sb2Nh
bGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2xvd2VyX2wgKGludCwgX19sb2NhbGVfdCkg
dGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2dyYXBoX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cg
KCk7CmV4dGVybiBpbnQgX19pc3ByaW50X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4
dGVybiBpbnQgX19pc3B1bmN0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgX19pc3NwYWNlX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19p
c3VwcGVyX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3hkaWdp
dF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfX2lzYmxhbmtfbCAo
aW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX3RvbG93ZXJfbCAoaW50
IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX190b3VwcGVyX2wg
KGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKIyAyNzcgIi91c3IvaW5jbHVkZS9j
dHlwZS5oIiAzCn0KIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ2hhclRyYWl0cy5o
IiAyCgoKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDMxICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNDaGFyVHJhaXRzLmgiIDIKIyAzOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zQ2hhclRyYWl0cy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmlu
Z0l0ZXJhdG9yVXRpbHMuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJp
bmdJdGVyYXRvclV0aWxzLmgiCnRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcj4KaW5saW5lClBSQm9v
bApTYW1lRnJhZ21lbnQoIGNvbnN0IEl0ZXJhdG9yJiBsaHMsIGNvbnN0IEl0ZXJhdG9yJiByaHMg
KQogIHsKICAgIHJldHVybiBsaHMuZnJhZ21lbnQoKS5tU3RhcnQgPT0gcmhzLmZyYWdtZW50KCku
bVN0YXJ0OwogIH0KCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4gY2xhc3MgbnNSZWFkaW5nSXRlcmF0
b3I7CgoKCgogICAgICAgc2l6ZV90IERpc3RhbmNlKCBjb25zdCBuc1JlYWRpbmdJdGVyYXRvcjxQ
UlVuaWNoYXI+JiwgY29uc3QgbnNSZWFkaW5nSXRlcmF0b3I8UFJVbmljaGFyPiYgKTsKICAgICAg
IHNpemVfdCBEaXN0YW5jZSggY29uc3QgbnNSZWFkaW5nSXRlcmF0b3I8Y2hhcj4mLCBjb25zdCBu
c1JlYWRpbmdJdGVyYXRvcjxjaGFyPiYgKTsKIyA0MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zQ2hhclRyYWl0cy5oIiAyCgoKCgoKICB0eXBlZGVmIFBSQm9vbCBuc0NoYXJUcmFpdHNfYm9v
bDsKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CnN0cnVjdCBuc0NoYXJUcmFpdHMKICB7CiAgICB0
eXBlZGVmIENoYXJUIGNoYXJfdHlwZTsKICAgIHR5cGVkZWYgY2hhciBpbmNvbXBhdGlibGVfY2hh
cl90eXBlOwoKICAgIHN0YXRpYwogICAgdm9pZAogICAgYXNzaWduKCBjaGFyX3R5cGUmIGxocywg
Y29uc3QgY2hhcl90eXBlJiByaHMgKQogICAgICB7CiAgICAgICAgbGhzID0gcmhzOwogICAgICB9
CgoKCgogICAgdHlwZWRlZiBpbnQgaW50X3R5cGU7CgogICAgc3RhdGljCiAgICBjaGFyX3R5cGUK
ICAgIHRvX2NoYXJfdHlwZSggY29uc3QgaW50X3R5cGUmIGMgKQogICAgICB7CiAgICAgICAgcmV0
dXJuIGNoYXJfdHlwZShjKTsKICAgICAgfQoKICAgIHN0YXRpYwogICAgaW50X3R5cGUKICAgIHRv
X2ludF90eXBlKCBjb25zdCBjaGFyX3R5cGUmIGMgKQogICAgICB7CiAgICAgICAgcmV0dXJuIGlu
dF90eXBlKGMpOwogICAgICB9CgogICAgc3RhdGljCiAgICBuc0NoYXJUcmFpdHNfYm9vbAogICAg
ZXFfaW50X3R5cGUoIGNvbnN0IGludF90eXBlJiBsaHMsIGNvbnN0IGludF90eXBlJiByaHMgKQog
ICAgICB7CiAgICAgICAgcmV0dXJuIGxocyA9PSByaHM7CiAgICAgIH0KCgoKCiAgICBzdGF0aWMK
ICAgIG5zQ2hhclRyYWl0c19ib29sCiAgICBlcSggY29uc3QgY2hhcl90eXBlJiBsaHMsIGNvbnN0
IGNoYXJfdHlwZSYgcmhzICkKICAgICAgewogICAgICAgIHJldHVybiBsaHMgPT0gcmhzOwogICAg
ICB9CgogICAgc3RhdGljCiAgICBuc0NoYXJUcmFpdHNfYm9vbAogICAgbHQoIGNvbnN0IGNoYXJf
dHlwZSYgbGhzLCBjb25zdCBjaGFyX3R5cGUmIHJocyApCiAgICAgIHsKICAgICAgICByZXR1cm4g
bGhzIDwgcmhzOwogICAgICB9CgoKCgogICAgc3RhdGljCiAgICBjaGFyX3R5cGUqCiAgICBjb3B5
KCBjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbiApCiAgICAgIHsK
ICAgICAgICBjaGFyX3R5cGUqIHJlc3VsdCA9IHMxOwogICAgICAgIHdoaWxlICggbi0tICkKICAg
ICAgICAgIGFzc2lnbigqczErKywgKnMyKyspOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
IH0KCiAgICBzdGF0aWMKICAgIGNoYXJfdHlwZSoKICAgIG1vdmUoIGNoYXJfdHlwZSogczEsIGNv
bnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuICkKICAgICAgewogICAgICAgIGNoYXJfdHlwZSog
cmVzdWx0ID0gczE7CgogICAgICAgIGlmICggbiApCiAgICAgICAgICB7CiAgICAgICAgICAgIGlm
ICggczIgPiBzMSApCiAgICAgICAgICAgICAgY29weShzMSwgczIsIG4pOwogICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgczEgKz0gbjsKICAgICAgICAgICAg
ICAgIHMyICs9IG47CiAgICAgICAgICAgICAgICB3aGlsZSAoIG4tLSApCiAgICAgICAgICAgICAg
ICAgIGFzc2lnbigqLS1zMSwgKi0tczIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KCiAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQoKICAgIHN0YXRpYwogICAgY2hhcl90eXBlKgog
ICAgYXNzaWduKCBjaGFyX3R5cGUqIHMsIHNpemVfdCBuLCBjb25zdCBjaGFyX3R5cGUmIGMgKQog
ICAgICB7CiAgICAgICAgY2hhcl90eXBlKiByZXN1bHQgPSBzOwogICAgICAgIHdoaWxlICggbi0t
ICkKICAgICAgICAgIGFzc2lnbigqcysrLCBjKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
ICB9CgogICAgc3RhdGljCiAgICBpbnQKICAgIGNvbXBhcmUoIGNvbnN0IGNoYXJfdHlwZSogczEs
IGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuICkKICAgICAgewogICAgICAgIGZvciAoIDsg
bi0tOyArK3MxLCArK3MyICkKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKCBsdCgqczEsICpz
MikgKQogICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgaWYgKCBsdCgqczIsICpz
MSkgKQogICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgfQoKICAgICAgICByZXR1cm4g
MDsKICAgICAgfQoKICAgIHN0YXRpYwogICAgc2l6ZV90CiAgICBsZW5ndGgoIGNvbnN0IGNoYXJf
dHlwZSogcyApCiAgICAgIHsKICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKICAgICAgICB3aGls
ZSAoICFlcSgqcysrLCBDaGFyVCgwKSkgKQogICAgICAgICAgKytyZXN1bHQ7CiAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICAgfQoKICAgIHN0YXRpYwogICAgY29uc3QgY2hhcl90eXBlKgogICAg
ZmluZCggY29uc3QgY2hhcl90eXBlKiBzLCBzaXplX3QgbiwgY29uc3QgY2hhcl90eXBlJiBjICkK
ICAgICAgewogICAgICAgIHdoaWxlICggbi0tICkKICAgICAgICAgIHsKICAgICAgICAgICAgaWYg
KCBlcSgqcywgYykgKQogICAgICAgICAgICAgIHJldHVybiBzOwogICAgICAgICAgICArK3M7CiAg
ICAgICAgICB9CgogICAgICAgIHJldHVybiAwOwogICAgICB9CiMgMjExICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNDaGFyVHJhaXRzLmgiCiAgfTsKCnRlbXBsYXRlIDw+CnN0cnVjdCBuc0No
YXJUcmFpdHM8Y2hhcj4KICB7CiAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwogICAgdHlwZWRl
ZiBQUlVuaWNoYXIgaW5jb21wYXRpYmxlX2NoYXJfdHlwZTsKCiAgICBzdGF0aWMKICAgIHZvaWQK
ICAgIGFzc2lnbiggY2hhciYgbGhzLCBjaGFyIHJocyApCiAgICAgIHsKICAgICAgICBsaHMgPSBy
aHM7CiAgICAgIH0KCgoKCiAgICB0eXBlZGVmIGludCBpbnRfdHlwZTsKCiAgICBzdGF0aWMKICAg
IGNoYXIKICAgIHRvX2NoYXJfdHlwZSggaW50IGMgKQogICAgICB7CiAgICAgICAgcmV0dXJuIGNo
YXIoYyk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGludAogICAgdG9faW50X3R5cGUoIGNoYXIg
YyApCiAgICAgIHsKICAgICAgICByZXR1cm4gaW50KCBzdGF0aWNfY2FzdDwgdW5zaWduZWQgY2hh
ciA+KGMpICk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIG5zQ2hhclRyYWl0c19ib29sCiAgICBl
cV9pbnRfdHlwZSggaW50IGxocywgaW50IHJocyApCiAgICAgIHsKICAgICAgICByZXR1cm4gbGhz
ID09IHJoczsKICAgICAgfQoKCgoKICAgIHN0YXRpYwogICAgbnNDaGFyVHJhaXRzX2Jvb2wKICAg
IGVxKCBjaGFyIGxocywgY2hhciByaHMgKQogICAgICB7CiAgICAgICAgcmV0dXJuIGxocyA9PSBy
aHM7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIG5zQ2hhclRyYWl0c19ib29sCiAgICBsdCggY2hh
ciBsaHMsIGNoYXIgcmhzICkKICAgICAgewogICAgICAgIHJldHVybiBsaHMgPCByaHM7CiAgICAg
IH0KCgoKCiAgICBzdGF0aWMKICAgIGNoYXIqCiAgICBtb3ZlKCBjaGFyKiBzMSwgY29uc3QgY2hh
ciogczIsIHNpemVfdCBuICkKICAgICAgewogICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDwgY2hh
ciogPihtZW1tb3ZlKHMxLCBzMiwgbikpOwogICAgICB9CgogICAgc3RhdGljCiAgICBjaGFyKgog
ICAgY29weSggY2hhciogczEsIGNvbnN0IGNoYXIqIHMyLCBzaXplX3QgbiApCiAgICAgIHsKICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNoYXIqID4obWVtY3B5KHMxLCBzMiwgbikpOwogICAg
ICB9CgogICAgc3RhdGljCiAgICBjaGFyKgogICAgYXNzaWduKCBjaGFyKiBzLCBzaXplX3Qgbiwg
Y2hhciBjICkKICAgICAgewogICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDwgY2hhciogPihtZW1z
ZXQocywgdG9faW50X3R5cGUoYyksIG4pKTsKICAgICAgfQoKICAgIHN0YXRpYwogICAgaW50CiAg
ICBjb21wYXJlKCBjb25zdCBjaGFyKiBzMSwgY29uc3QgY2hhciogczIsIHNpemVfdCBuICkKICAg
ICAgewogICAgICAgIHJldHVybiBtZW1jbXAoczEsIHMyLCBuKTsKICAgICAgfQoKICAgIHN0YXRp
YwogICAgc2l6ZV90CiAgICBsZW5ndGgoIGNvbnN0IGNoYXIqIHMgKQogICAgICB7CiAgICAgICAg
cmV0dXJuIHN0cmxlbihzKTsKICAgICAgfQoKICAgIHN0YXRpYwogICAgY29uc3QgY2hhcioKICAg
IGZpbmQoIGNvbnN0IGNoYXIqIHMsIHNpemVfdCBuLCBjaGFyIGMgKQogICAgICB7CiAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IGNvbnN0IGNoYXIqID4obWVtY2hyKHMsIHRvX2ludF90
eXBlKGMpLCBuKSk7CiAgICAgIH0KIyAzMzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0No
YXJUcmFpdHMuaCIKICB9OwojIDQ2NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ2hhclRy
YWl0cy5oIgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcj4Kc3RydWN0IG5zQ2hhclNvdXJj
ZVRyYWl0cwogIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgSW5wdXRJdGVyYXRvcjo6ZGlmZmVyZW5j
ZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKIyA0ODAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0NoYXJUcmFpdHMuaCIKICAgIHN0YXRpYwogICAgUFJVaW50MzIKICAgIHJlYWRhYmxlX2Rpc3Rh
bmNlKCBjb25zdCBJbnB1dEl0ZXJhdG9yJiBpdGVyICkKICAgICAgewogICAgICAgIHJldHVybiBp
dGVyLnNpemVfZm9yd2FyZCgpOwogICAgICB9CgogICAgc3RhdGljCiAgICBQUlVpbnQzMgogICAg
cmVhZGFibGVfZGlzdGFuY2UoIGNvbnN0IElucHV0SXRlcmF0b3ImIGZpcnN0LCBjb25zdCBJbnB1
dEl0ZXJhdG9yJiBsYXN0ICkKICAgICAgewogICAgICAgIHJldHVybiBQUlVpbnQzMihTYW1lRnJh
Z21lbnQoZmlyc3QsIGxhc3QpID8gbGFzdC5nZXQoKS1maXJzdC5nZXQoKSA6IGZpcnN0LnNpemVf
Zm9yd2FyZCgpKTsKICAgICAgfQoKICAgIHN0YXRpYwogICAgY29uc3QgdHlwZW5hbWUgSW5wdXRJ
dGVyYXRvcjo6dmFsdWVfdHlwZSoKICAgIHJlYWQoIGNvbnN0IElucHV0SXRlcmF0b3ImIGl0ZXIg
KQogICAgICB7CiAgICAgICAgcmV0dXJuIGl0ZXIuZ2V0KCk7CiAgICAgIH0KCiAgICBzdGF0aWMK
ICAgIHZvaWQKICAgIGFkdmFuY2UoIElucHV0SXRlcmF0b3ImIHMsIGRpZmZlcmVuY2VfdHlwZSBu
ICkKICAgICAgewogICAgICAgIHMuYWR2YW5jZShuKTsKICAgICAgfQogIH07CgoKCnRlbXBsYXRl
IDxjbGFzcyBDaGFyVD4Kc3RydWN0IG5zQ2hhclNvdXJjZVRyYWl0czxDaGFyVCo+CiAgewogICAg
dHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwojIDUyNSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zQ2hhclRyYWl0cy5oIgogICAgc3RhdGljCiAgICBQUlVpbnQzMgogICAgcmVh
ZGFibGVfZGlzdGFuY2UoIENoYXJUKiBzICkKICAgICAgewogICAgICAgIHJldHVybiBQUlVpbnQz
Mihuc0NoYXJUcmFpdHM8Q2hhclQ+OjpsZW5ndGgocykpOwoKICAgICAgfQoKICAgIHN0YXRpYwog
ICAgUFJVaW50MzIKICAgIHJlYWRhYmxlX2Rpc3RhbmNlKCBDaGFyVCogZmlyc3QsIENoYXJUKiBs
YXN0ICkKICAgICAgewogICAgICAgIHJldHVybiBQUlVpbnQzMihsYXN0LWZpcnN0KTsKICAgICAg
fQoKICAgIHN0YXRpYwogICAgY29uc3QgQ2hhclQqCiAgICByZWFkKCBDaGFyVCogcyApCiAgICAg
IHsKICAgICAgICByZXR1cm4gczsKICAgICAgfQoKICAgIHN0YXRpYwogICAgdm9pZAogICAgYWR2
YW5jZSggQ2hhclQqJiBzLCBkaWZmZXJlbmNlX3R5cGUgbiApCiAgICAgIHsKICAgICAgICBzICs9
IG47CiAgICAgIH0KICB9OwojIDY0OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ2hhclRy
YWl0cy5oIgp0ZW1wbGF0ZSA8Y2xhc3MgT3V0cHV0SXRlcmF0b3I+CnN0cnVjdCBuc0NoYXJTaW5r
VHJhaXRzCiAgewogICAgc3RhdGljCiAgICBQUlVpbnQzMgogICAgd3JpdGUoIE91dHB1dEl0ZXJh
dG9yJiBpdGVyLCBjb25zdCB0eXBlbmFtZSBPdXRwdXRJdGVyYXRvcjo6dmFsdWVfdHlwZSogcywg
UFJVaW50MzIgbiApCiAgICAgIHsKICAgICAgICByZXR1cm4gaXRlci53cml0ZShzLCBuKTsKICAg
ICAgfQogIH07CgoKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4Kc3RydWN0IG5zQ2hhclNpbmtUcmFp
dHM8Q2hhclQqPgogIHsKICAgIHN0YXRpYwogICAgUFJVaW50MzIKICAgIHdyaXRlKCBDaGFyVCom
IGl0ZXIsIGNvbnN0IENoYXJUKiBzLCBQUlVpbnQzMiBuICkKICAgICAgewogICAgICAgIG5zQ2hh
clRyYWl0czxDaGFyVD46Om1vdmUoaXRlciwgcywgbik7CiAgICAgICAgaXRlciArPSBuOwogICAg
ICAgIHJldHVybiBuOwogICAgICB9CiAgfTsKIyAzNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zQVN0cmluZy5oIiAyCgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5n
SXRlcmF0b3IuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdJdGVy
YXRvci5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0ZyYWdtZW50Lmgi
IDEKIyAzOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nRnJhZ21lbnQuaCIKZW51
bSBuc0ZyYWdtZW50UmVxdWVzdCB7IGtQcmV2RnJhZ21lbnQsIGtGaXJzdEZyYWdtZW50LCBrTGFz
dEZyYWdtZW50LCBrTmV4dEZyYWdtZW50LCBrRnJhZ21lbnRBdCB9OwojIDUzICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNTdHJpbmdGcmFnbWVudC5oIgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+
CnN0cnVjdCBuc1JlYWRhYmxlRnJhZ21lbnQKICB7CiAgICBjb25zdCBDaGFyVCogbVN0YXJ0Owog
ICAgY29uc3QgQ2hhclQqIG1FbmQ7CiAgICBjb25zdCB2b2lkKiBtRnJhZ21lbnRJZGVudGlmaWVy
OwoKICAgIG5zUmVhZGFibGVGcmFnbWVudCgpCiAgICAgICAgOiBtU3RhcnQoMCksIG1FbmQoMCks
IG1GcmFnbWVudElkZW50aWZpZXIoMCkKICAgICAgewoKICAgICAgfQogIH07CiMgODAgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0ZyYWdtZW50LmgiCnRlbXBsYXRlIDxjbGFzcyBD
aGFyVD4Kc3RydWN0IG5zV3JpdGFibGVGcmFnbWVudAogIHsKICAgIENoYXJUKiBtU3RhcnQ7CiAg
ICBDaGFyVCogbUVuZDsKICAgIHZvaWQqIG1GcmFnbWVudElkZW50aWZpZXI7CgogICAgbnNXcml0
YWJsZUZyYWdtZW50KCkKICAgICAgICA6IG1TdGFydCgwKSwgbUVuZCgwKSwgbUZyYWdtZW50SWRl
bnRpZmllcigwKQogICAgICB7CgogICAgICB9CiAgfTsKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zU3RyaW5nSXRlcmF0b3IuaCIgMgoKCgoKCgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNTdHJpbmdUcmFpdHMuaCIgMQojIDQ0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNTdHJpbmdUcmFpdHMuaCIKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpzdHJ1Y3QgbnNTdHJp
bmdUcmFpdHMKICB7CiAgICB0eXBlZGVmIG5zQVN0cmluZyBhYnN0cmFjdF9zdHJpbmdfdHlwZTsK
ICAgIHR5cGVkZWYgbnNBUHJvbWlzZVN0cmluZyBhYnN0cmFjdF9wcm9taXNlX3R5cGU7CiAgICB0
eXBlZGVmIG5zQUZsYXRTdHJpbmcgYWJzdHJhY3RfZmxhdF90eXBlOwogICAgdHlwZWRlZiBjb25z
dCBuc0RlcGVuZGVudFN0cmluZyBsaXRlcmFsX3N0cmluZ190eXBlOwogIH07CiMgNjYgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ1RyYWl0cy5oIgp0ZW1wbGF0ZSA8PgpzdHJ1Y3Qg
bnNTdHJpbmdUcmFpdHM8Y2hhcj4KICB7CiAgICB0eXBlZGVmIG5zQUNTdHJpbmcgYWJzdHJhY3Rf
c3RyaW5nX3R5cGU7CiAgICB0eXBlZGVmIG5zQVByb21pc2VDU3RyaW5nIGFic3RyYWN0X3Byb21p
c2VfdHlwZTsKICAgIHR5cGVkZWYgbnNBRmxhdENTdHJpbmcgYWJzdHJhY3RfZmxhdF90eXBlOwog
ICAgdHlwZWRlZiBjb25zdCBuc0RlcGVuZGVudENTdHJpbmcgbGl0ZXJhbF9zdHJpbmdfdHlwZTsK
ICB9OwojIDM3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdJdGVyYXRvci5oIiAy
CgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQWxnb3JpdGhtLmgiIDEKIyAzOCAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQWxnb3JpdGhtLmgiCnRlbXBsYXRlIDxjbGFzcyBU
PgppbmxpbmUKY29uc3QgVCYKTlNfTUlOKCBjb25zdCBUJiBhLCBjb25zdCBUJiBiICkKICB7CiAg
ICByZXR1cm4gYiA8IGEgPyBiIDogYTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCmNv
bnN0IFQmCk5TX01BWCggY29uc3QgVCYgYSwgY29uc3QgVCYgYiApCiAgewogICAgcmV0dXJuIGEg
PiBiID8gYSA6IGI7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3IsIGNsYXNzIFQ+
CmlubGluZQpQUlVpbnQzMgpOU19DT1VOVCggSW5wdXRJdGVyYXRvciYgZmlyc3QsIGNvbnN0IElu
cHV0SXRlcmF0b3ImIGxhc3QsIGNvbnN0IFQmIHZhbHVlICkKICB7CiAgICBQUlVpbnQzMiByZXN1
bHQgPSAwOwogICAgZm9yICggOyBmaXJzdCAhPSBsYXN0OyArK2ZpcnN0ICkKICAgICAgaWYgKCAq
Zmlyc3QgPT0gdmFsdWUgKQogICAgICAgICsrcmVzdWx0OwogICAgcmV0dXJuIHJlc3VsdDsKICB9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgT3V0cHV0SXRlcmF0b3I+Cmlu
bGluZQpPdXRwdXRJdGVyYXRvciYKY29weV9zdHJpbmcoIElucHV0SXRlcmF0b3ImIGZpcnN0LCBj
b25zdCBJbnB1dEl0ZXJhdG9yJiBsYXN0LCBPdXRwdXRJdGVyYXRvciYgcmVzdWx0ICkKICB7CiAg
ICB0eXBlZGVmIG5zQ2hhclNvdXJjZVRyYWl0czxJbnB1dEl0ZXJhdG9yPiBzb3VyY2VfdHJhaXRz
OwogICAgdHlwZWRlZiBuc0NoYXJTaW5rVHJhaXRzPE91dHB1dEl0ZXJhdG9yPiBzaW5rX3RyYWl0
czsKCiAgICB3aGlsZSAoIGZpcnN0ICE9IGxhc3QgKQogICAgICB7CiAgICAgICAgUFJJbnQzMiBj
b3VudF9jb3BpZWQgPSBQUkludDMyKHNpbmtfdHJhaXRzOjp3cml0ZShyZXN1bHQsIHNvdXJjZV90
cmFpdHM6OnJlYWQoZmlyc3QpLCBzb3VyY2VfdHJhaXRzOjpyZWFkYWJsZV9kaXN0YW5jZShmaXJz
dCwgbGFzdCkpKTsKICAgICAgICB7fTsKICAgICAgICBzb3VyY2VfdHJhaXRzOjphZHZhbmNlKGZp
cnN0LCBjb3VudF9jb3BpZWQpOwogICAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgT3V0cHV0SXRlcmF0b3I+Ck91dHB1dEl0
ZXJhdG9yJgpjb3B5X3N0cmluZ19iYWNrd2FyZCggY29uc3QgSW5wdXRJdGVyYXRvciYgZmlyc3Qs
IElucHV0SXRlcmF0b3ImIGxhc3QsIE91dHB1dEl0ZXJhdG9yJiByZXN1bHQgKQogIHsKICAgIHdo
aWxlICggZmlyc3QgIT0gbGFzdCApCiAgICAgIHsKICAgICAgICBsYXN0Lm5vcm1hbGl6ZV9iYWNr
d2FyZCgpOwogICAgICAgIHJlc3VsdC5ub3JtYWxpemVfYmFja3dhcmQoKTsKICAgICAgICBQUlVp
bnQzMiBsZW5ndGhUb0NvcHkgPSBQUlVpbnQzMiggTlNfTUlOKGxhc3Quc2l6ZV9iYWNrd2FyZCgp
LCByZXN1bHQuc2l6ZV9iYWNrd2FyZCgpKSApOwogICAgICAgIGlmICggZmlyc3QuZnJhZ21lbnQo
KS5tU3RhcnQgPT0gbGFzdC5mcmFnbWVudCgpLm1TdGFydCApCiAgICAgICAgICBsZW5ndGhUb0Nv
cHkgPSBOU19NSU4obGVuZ3RoVG9Db3B5LCBQUlVpbnQzMihsYXN0LmdldCgpIC0gZmlyc3QuZ2V0
KCkpKTsKCiAgICAgICAge307CgoKCgoKICAgICAgICBuc0NoYXJUcmFpdHM8dHlwZW5hbWUgT3V0
cHV0SXRlcmF0b3I6OnZhbHVlX3R5cGU+Ojptb3ZlKHJlc3VsdC5nZXQoKS1sZW5ndGhUb0NvcHks
IGxhc3QuZ2V0KCktbGVuZ3RoVG9Db3B5LCBsZW5ndGhUb0NvcHkpOwoKCiAgICAgICAgbGFzdC5h
ZHZhbmNlKCAtUFJJbnQzMihsZW5ndGhUb0NvcHkpICk7CiAgICAgICAgcmVzdWx0LmFkdmFuY2Uo
IC1QUkludDMyKGxlbmd0aFRvQ29weSkgKTsKICAgICAgfQoKICAgIHJldHVybiByZXN1bHQ7CiAg
fQojIDQxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdJdGVyYXRvci5oIiAyCiMg
NTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0l0ZXJhdG9yLmgiCnRlbXBsYXRl
IDxjbGFzcyBDaGFyVD4KY2xhc3MgbnNSZWFkaW5nSXRlcmF0b3IKCiAgewogICAgcHVibGljOgog
ICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgQ2hh
clQgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBjb25zdCBDaGFyVCogcG9pbnRlcjsKICAgICAg
dHlwZWRlZiBjb25zdCBDaGFyVCYgcmVmZXJlbmNlOwoKCiAgICBwcml2YXRlOgogICAgICBmcmll
bmQgY2xhc3MgbnNBU3RyaW5nOwogICAgICBmcmllbmQgY2xhc3MgbnNBQ1N0cmluZzsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBuc1N0cmluZ1RyYWl0czxDaGFyVD46OmFic3RyYWN0X3N0cmluZ190
eXBlIHN0cmluZ190eXBlOwoKICAgICAgbnNSZWFkYWJsZUZyYWdtZW50PENoYXJUPiBtRnJhZ21l
bnQ7CiAgICAgIGNvbnN0IENoYXJUKiBtUG9zaXRpb247CiAgICAgIGNvbnN0IHN0cmluZ190eXBl
KiBtT3duaW5nU3RyaW5nOwoKICAgIHB1YmxpYzoKICAgICAgbnNSZWFkaW5nSXRlcmF0b3IoKSB7
IH0KCgoKICAgICAgaW5saW5lIHZvaWQgbm9ybWFsaXplX2ZvcndhcmQoKTsKICAgICAgaW5saW5l
IHZvaWQgbm9ybWFsaXplX2JhY2t3YXJkKCk7CgogICAgICBwb2ludGVyCiAgICAgIGdldCgpIGNv
bnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1Qb3NpdGlvbjsKICAgICAgICB9CgogICAg
ICBDaGFyVAogICAgICBvcGVyYXRvciooKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVy
biAqZ2V0KCk7CiAgICAgICAgfQojIDEwNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3Ry
aW5nSXRlcmF0b3IuaCIKICAgICAgbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+JgogICAgICBvcGVy
YXRvcisrKCkKICAgICAgICB7CiAgICAgICAgICArK21Qb3NpdGlvbjsKICAgICAgICAgIG5vcm1h
bGl6ZV9mb3J3YXJkKCk7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgICAg
bnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+CiAgICAgIG9wZXJhdG9yKysoIGludCApCiAgICAgICAg
ewogICAgICAgICAgbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+IHJlc3VsdCgqdGhpcyk7CiAgICAg
ICAgICArK21Qb3NpdGlvbjsKICAgICAgICAgIG5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KCiAgICAgIG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJU
PiYKICAgICAgb3BlcmF0b3ItLSgpCiAgICAgICAgewogICAgICAgICAgbm9ybWFsaXplX2JhY2t3
YXJkKCk7CiAgICAgICAgICAtLW1Qb3NpdGlvbjsKICAgICAgICAgIHJldHVybiAqdGhpczsKICAg
ICAgICB9CgogICAgICBuc1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4KICAgICAgb3BlcmF0b3ItLSgg
aW50ICkKICAgICAgICB7CiAgICAgICAgICBuc1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4gcmVzdWx0
KCp0aGlzKTsKICAgICAgICAgIG5vcm1hbGl6ZV9iYWNrd2FyZCgpOwogICAgICAgICAgLS1tUG9z
aXRpb247CiAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KCiAgICAgIGNvbnN0IG5z
UmVhZGFibGVGcmFnbWVudDxDaGFyVD4mCiAgICAgIGZyYWdtZW50KCkgY29uc3QKICAgICAgICB7
CiAgICAgICAgICByZXR1cm4gbUZyYWdtZW50OwogICAgICAgIH0KCiAgICAgIGNvbnN0IHN0cmlu
Z190eXBlJgogICAgICBzdHJpbmcoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHt9OwogICAg
ICAgICAgcmV0dXJuICptT3duaW5nU3RyaW5nOwogICAgICAgIH0KCiAgICAgIGRpZmZlcmVuY2Vf
dHlwZQogICAgICBzaXplX2ZvcndhcmQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVy
biBtRnJhZ21lbnQubUVuZCAtIG1Qb3NpdGlvbjsKICAgICAgICB9CgogICAgICBkaWZmZXJlbmNl
X3R5cGUKICAgICAgc2l6ZV9iYWNrd2FyZCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0
dXJuIG1Qb3NpdGlvbiAtIG1GcmFnbWVudC5tU3RhcnQ7CiAgICAgICAgfQoKICAgICAgbnNSZWFk
aW5nSXRlcmF0b3I8Q2hhclQ+JgogICAgICBhZHZhbmNlKCBkaWZmZXJlbmNlX3R5cGUgbiApCiAg
ICAgICAgewogICAgICAgICAgd2hpbGUgKCBuID4gMCApCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBkaWZmZXJlbmNlX3R5cGUgb25lX2hvcCA9IE5TX01JTihuLCBzaXplX2ZvcndhcmQoKSk7
CgogICAgICAgICAgICAgIHt9OwoKCiAgICAgICAgICAgICAgbVBvc2l0aW9uICs9IG9uZV9ob3A7
CiAgICAgICAgICAgICAgbm9ybWFsaXplX2ZvcndhcmQoKTsKICAgICAgICAgICAgICBuIC09IG9u
ZV9ob3A7CiAgICAgICAgICAgIH0KCiAgICAgICAgICB3aGlsZSAoIG4gPCAwICkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIG5vcm1hbGl6ZV9iYWNrd2FyZCgpOwogICAgICAgICAgICAgIGRp
ZmZlcmVuY2VfdHlwZSBvbmVfaG9wID0gTlNfTUFYKG4sIC1zaXplX2JhY2t3YXJkKCkpOwoKICAg
ICAgICAgICAgICB7fTsKCgogICAgICAgICAgICAgIG1Qb3NpdGlvbiArPSBvbmVfaG9wOwogICAg
ICAgICAgICAgIG4gLT0gb25lX2hvcDsKICAgICAgICAgICAgfQoKICAgICAgICAgIHJldHVybiAq
dGhpczsKICAgICAgICB9CiAgfTsKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4KY2xhc3MgbnNXcml0
aW5nSXRlcmF0b3IKCiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZm
ZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgQ2hhclQgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRl
ZiBDaGFyVCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBDaGFyVCYgcmVmZXJlbmNlOwoKCiAgICBw
cml2YXRlOgogICAgICBmcmllbmQgY2xhc3MgbnNBU3RyaW5nOwogICAgICBmcmllbmQgY2xhc3Mg
bnNBQ1N0cmluZzsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBuc1N0cmluZ1RyYWl0czxDaGFyVD46
OmFic3RyYWN0X3N0cmluZ190eXBlIHN0cmluZ190eXBlOwoKICAgICAgbnNXcml0YWJsZUZyYWdt
ZW50PENoYXJUPiBtRnJhZ21lbnQ7CiAgICAgIENoYXJUKiBtUG9zaXRpb247CiAgICAgIHN0cmlu
Z190eXBlKiBtT3duaW5nU3RyaW5nOwoKICAgIHB1YmxpYzoKICAgICAgbnNXcml0aW5nSXRlcmF0
b3IoKSB7IH0KCgoKICAgICAgaW5saW5lIHZvaWQgbm9ybWFsaXplX2ZvcndhcmQoKTsKICAgICAg
aW5saW5lIHZvaWQgbm9ybWFsaXplX2JhY2t3YXJkKCk7CgogICAgICBwb2ludGVyCiAgICAgIGdl
dCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1Qb3NpdGlvbjsKICAgICAgICB9
CgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgICB7CiAgICAg
ICAgICByZXR1cm4gKmdldCgpOwogICAgICAgIH0KIyAyNDUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc1N0cmluZ0l0ZXJhdG9yLmgiCiAgICAgIG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPiYK
ICAgICAgb3BlcmF0b3IrKygpCiAgICAgICAgewogICAgICAgICAgKyttUG9zaXRpb247CiAgICAg
ICAgICBub3JtYWxpemVfZm9yd2FyZCgpOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAg
IH0KCiAgICAgIG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPgogICAgICBvcGVyYXRvcisrKCBpbnQg
KQogICAgICAgIHsKICAgICAgICAgIG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPiByZXN1bHQoKnRo
aXMpOwogICAgICAgICAgKyttUG9zaXRpb247CiAgICAgICAgICBub3JtYWxpemVfZm9yd2FyZCgp
OwogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CgogICAgICBuc1dyaXRpbmdJdGVy
YXRvcjxDaGFyVD4mCiAgICAgIG9wZXJhdG9yLS0oKQogICAgICAgIHsKICAgICAgICAgIG5vcm1h
bGl6ZV9iYWNrd2FyZCgpOwogICAgICAgICAgLS1tUG9zaXRpb247CiAgICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgICAgfQoKICAgICAgbnNXcml0aW5nSXRlcmF0b3I8Q2hhclQ+CiAgICAgIG9w
ZXJhdG9yLS0oIGludCApCiAgICAgICAgewogICAgICAgICAgbnNXcml0aW5nSXRlcmF0b3I8Q2hh
clQ+IHJlc3VsdCgqdGhpcyk7CiAgICAgICAgICBub3JtYWxpemVfYmFja3dhcmQoKTsKICAgICAg
ICAgIC0tbVBvc2l0aW9uOwogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CgogICAg
ICBjb25zdCBuc1dyaXRhYmxlRnJhZ21lbnQ8Q2hhclQ+JgogICAgICBmcmFnbWVudCgpIGNvbnN0
CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1GcmFnbWVudDsKICAgICAgICB9CgogICAgICBu
c1dyaXRhYmxlRnJhZ21lbnQ8Q2hhclQ+JgogICAgICBmcmFnbWVudCgpCiAgICAgICAgewogICAg
ICAgICAgcmV0dXJuIG1GcmFnbWVudDsKICAgICAgICB9CgogICAgICBjb25zdCBzdHJpbmdfdHlw
ZSYKICAgICAgc3RyaW5nKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICB7fTsKICAgICAgICAg
IHJldHVybiAqbU93bmluZ1N0cmluZzsKICAgICAgICB9CgogICAgICBzdHJpbmdfdHlwZSYKICAg
ICAgc3RyaW5nKCkKICAgICAgICB7CiAgICAgICAgICB7fTsKICAgICAgICAgIHJldHVybiAqbU93
bmluZ1N0cmluZzsKICAgICAgICB9CgogICAgICBkaWZmZXJlbmNlX3R5cGUKICAgICAgc2l6ZV9m
b3J3YXJkKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gbUZyYWdtZW50Lm1FbmQg
LSBtUG9zaXRpb247CiAgICAgICAgfQoKICAgICAgZGlmZmVyZW5jZV90eXBlCiAgICAgIHNpemVf
YmFja3dhcmQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiBtUG9zaXRpb24gLSBt
RnJhZ21lbnQubVN0YXJ0OwogICAgICAgIH0KCiAgICAgIG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJU
PiYKICAgICAgYWR2YW5jZSggZGlmZmVyZW5jZV90eXBlIG4gKQogICAgICAgIHsKICAgICAgICAg
IHdoaWxlICggbiA+IDAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZGlmZmVyZW5jZV90
eXBlIG9uZV9ob3AgPSBOU19NSU4obiwgc2l6ZV9mb3J3YXJkKCkpOwoKICAgICAgICAgICAgICB7
fTsKCgogICAgICAgICAgICAgIG1Qb3NpdGlvbiArPSBvbmVfaG9wOwogICAgICAgICAgICAgIG5v
cm1hbGl6ZV9mb3J3YXJkKCk7CiAgICAgICAgICAgICAgbiAtPSBvbmVfaG9wOwogICAgICAgICAg
ICB9CgogICAgICAgICAgd2hpbGUgKCBuIDwgMCApCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBub3JtYWxpemVfYmFja3dhcmQoKTsKICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGUgb25l
X2hvcCA9IE5TX01BWChuLCAtc2l6ZV9iYWNrd2FyZCgpKTsKCiAgICAgICAgICAgICAge307CgoK
ICAgICAgICAgICAgICBtUG9zaXRpb24gKz0gb25lX2hvcDsKICAgICAgICAgICAgICBuIC09IG9u
ZV9ob3A7CiAgICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoK
ICAgICAgUFJVaW50MzIKICAgICAgd3JpdGUoIGNvbnN0IHZhbHVlX3R5cGUqIHMsIFBSVWludDMy
IG4gKQogICAgICAgIHsKICAgICAgICAgIHt9OwoKICAgICAgICAgIG4gPSBOU19NSU4obiwgUFJV
aW50MzIoc2l6ZV9mb3J3YXJkKCkpKTsKICAgICAgICAgIG5zQ2hhclRyYWl0czx2YWx1ZV90eXBl
Pjo6bW92ZShtUG9zaXRpb24sIHMsIG4pOwogICAgICAgICAgYWR2YW5jZSggZGlmZmVyZW5jZV90
eXBlKG4pICk7CiAgICAgICAgICByZXR1cm4gbjsKICAgICAgICB9CiAgfTsKCnRlbXBsYXRlIDxj
bGFzcyBDaGFyVD4KaW5saW5lCnZvaWQKbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+Ojpub3JtYWxp
emVfZm9yd2FyZCgpCiAgewogICAgd2hpbGUgKCBtUG9zaXRpb24gPT0gbUZyYWdtZW50Lm1FbmQK
ICAgICAgICAgJiYgbU93bmluZ1N0cmluZy0+R2V0UmVhZGFibGVGcmFnbWVudChtRnJhZ21lbnQs
IGtOZXh0RnJhZ21lbnQpICkKICAgICAgICBtUG9zaXRpb24gPSBtRnJhZ21lbnQubVN0YXJ0Owog
IH0KCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4KaW5saW5lCnZvaWQKbnNSZWFkaW5nSXRlcmF0b3I8
Q2hhclQ+Ojpub3JtYWxpemVfYmFja3dhcmQoKQogIHsKICAgIHdoaWxlICggbVBvc2l0aW9uID09
IG1GcmFnbWVudC5tU3RhcnQKICAgICAgICAgJiYgbU93bmluZ1N0cmluZy0+R2V0UmVhZGFibGVG
cmFnbWVudChtRnJhZ21lbnQsIGtQcmV2RnJhZ21lbnQpICkKICAgICAgICBtUG9zaXRpb24gPSBt
RnJhZ21lbnQubUVuZDsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQpQUkJvb2wK
b3BlcmF0b3I9PSggY29uc3QgbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+JiBsaHMsIGNvbnN0IG5z
UmVhZGluZ0l0ZXJhdG9yPENoYXJUPiYgcmhzICkKICB7CiAgICByZXR1cm4gbGhzLmdldCgpID09
IHJocy5nZXQoKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQpQUkJvb2wKb3Bl
cmF0b3IhPSggY29uc3QgbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+JiBsaHMsIGNvbnN0IG5zUmVh
ZGluZ0l0ZXJhdG9yPENoYXJUPiYgcmhzICkKICB7CiAgICByZXR1cm4gbGhzLmdldCgpICE9IHJo
cy5nZXQoKTsKICB9CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4KaW5saW5lCnZvaWQKbnNX
cml0aW5nSXRlcmF0b3I8Q2hhclQ+Ojpub3JtYWxpemVfZm9yd2FyZCgpCiAgewogICAgd2hpbGUg
KCBtUG9zaXRpb24gPT0gbUZyYWdtZW50Lm1FbmQKICAgICAgICAgJiYgbU93bmluZ1N0cmluZy0+
R2V0V3JpdGFibGVGcmFnbWVudChtRnJhZ21lbnQsIGtOZXh0RnJhZ21lbnQpICkKICAgICAgbVBv
c2l0aW9uID0gbUZyYWdtZW50Lm1TdGFydDsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+Cmlu
bGluZQp2b2lkCm5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPjo6bm9ybWFsaXplX2JhY2t3YXJkKCkK
ICB7CiAgICB3aGlsZSAoIG1Qb3NpdGlvbiA9PSBtRnJhZ21lbnQubVN0YXJ0CiAgICAgICAgICYm
IG1Pd25pbmdTdHJpbmctPkdldFdyaXRhYmxlRnJhZ21lbnQobUZyYWdtZW50LCBrUHJldkZyYWdt
ZW50KSApCiAgICAgIG1Qb3NpdGlvbiA9IG1GcmFnbWVudC5tRW5kOwogIH0KCnRlbXBsYXRlIDxj
bGFzcyBDaGFyVD4KaW5saW5lClBSQm9vbApvcGVyYXRvcj09KCBjb25zdCBuc1dyaXRpbmdJdGVy
YXRvcjxDaGFyVD4mIGxocywgY29uc3QgbnNXcml0aW5nSXRlcmF0b3I8Q2hhclQ+JiByaHMgKQog
IHsKICAgIHJldHVybiBsaHMuZ2V0KCkgPT0gcmhzLmdldCgpOwogIH0KCnRlbXBsYXRlIDxjbGFz
cyBDaGFyVD4KaW5saW5lClBSQm9vbApvcGVyYXRvciE9KCBjb25zdCBuc1dyaXRpbmdJdGVyYXRv
cjxDaGFyVD4mIGxocywgY29uc3QgbnNXcml0aW5nSXRlcmF0b3I8Q2hhclQ+JiByaHMgKQogIHsK
ICAgIHJldHVybiBsaHMuZ2V0KCkgIT0gcmhzLmdldCgpOwogIH0KIyA0MSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zQVN0cmluZy5oIiAyCgoKCgoKCgpjbGFzcyBuc0FTdHJpbmcKICAgIDog
cHVibGljIG5zUHJpdmF0ZVNoYXJhYmxlU3RyaW5nCiAgewogICAgcHVibGljOgogICAgICB0eXBl
ZGVmIG5zQVN0cmluZyBzZWxmX3R5cGU7CiAgICAgIHR5cGVkZWYgbnNBUHJvbWlzZVN0cmluZyBw
cm9taXNlX3R5cGU7CiAgICAgIHR5cGVkZWYgUFJVbmljaGFyIGNoYXJfdHlwZTsKICAgICAgdHlw
ZWRlZiBjaGFyIGluY29tcGF0aWJsZV9jaGFyX3R5cGU7CgoKICAgICAgdHlwZWRlZiBuc1JlYWRp
bmdJdGVyYXRvcjxjaGFyX3R5cGU+IGNvbnN0X2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIG5zV3Jp
dGluZ0l0ZXJhdG9yPGNoYXJfdHlwZT4gaXRlcmF0b3I7CgogICAgICB0eXBlZGVmIFBSVWludDMy
IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBQUlVpbnQzMiBpbmRleF90eXBlOwoKCgoKCgogICAg
ICB2aXJ0dWFsIH5uc0FTdHJpbmcoKSB7IH0KCiAgICAgIGlubGluZSBjb25zdF9pdGVyYXRvciYg
QmVnaW5SZWFkaW5nKCBjb25zdF9pdGVyYXRvciYgKSBjb25zdDsKICAgICAgaW5saW5lIGNvbnN0
X2l0ZXJhdG9yJiBFbmRSZWFkaW5nKCBjb25zdF9pdGVyYXRvciYgKSBjb25zdDsKCiAgICAgIGlu
bGluZSBpdGVyYXRvciYgQmVnaW5Xcml0aW5nKCBpdGVyYXRvciYgKTsKICAgICAgaW5saW5lIGl0
ZXJhdG9yJiBFbmRXcml0aW5nKCBpdGVyYXRvciYgKTsKCiAgICAgIHZpcnR1YWwgc2l6ZV90eXBl
IExlbmd0aCgpIGNvbnN0ID0gMDsKICAgICAgUFJCb29sIElzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBMZW5ndGgoKSA9PSAwOyB9CgogICAgICBpbmxpbmUgUFJCb29sIEVxdWFscyggY29uc3Qgc2Vs
Zl90eXBlJiApIGNvbnN0OwogICAgICBQUkJvb2wgRXF1YWxzKCBjb25zdCBjaGFyX3R5cGUqICkg
Y29uc3Q7CgoKCgoKCgogICAgICBjaGFyX3R5cGUgRmlyc3QoKSBjb25zdDsKICAgICAgY2hhcl90
eXBlIExhc3QoKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZSBDb3VudENoYXIoIGNoYXJfdHlwZSAp
IGNvbnN0OwojIDExMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5oIgogICAg
ICBzaXplX3R5cGUgTGVmdCggc2VsZl90eXBlJiwgc2l6ZV90eXBlICkgY29uc3Q7CiAgICAgIHNp
emVfdHlwZSBNaWQoIHNlbGZfdHlwZSYsIFBSVWludDMyLCBQUlVpbnQzMiApIGNvbnN0OwogICAg
ICBzaXplX3R5cGUgUmlnaHQoIHNlbGZfdHlwZSYsIHNpemVfdHlwZSApIGNvbnN0OwoKCiAgICAg
IFBSSW50MzIgRmluZENoYXIoIGNoYXJfdHlwZSwgaW5kZXhfdHlwZSBhT2Zmc2V0ID0gMCApIGNv
bnN0OwojIDEyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5oIgogICAgICB2
aXJ0dWFsIHZvaWQgU2V0Q2FwYWNpdHkoIHNpemVfdHlwZSApIHsgfQojIDE0MyAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5oIgogICAgICB2aXJ0dWFsIHZvaWQgU2V0TGVuZ3Ro
KCBzaXplX3R5cGUgKSB7IH0KCgogICAgICB2b2lkCiAgICAgIFRydW5jYXRlKCBzaXplX3R5cGUg
YU5ld0xlbmd0aD0wICkKICAgICAgICB7CiAgICAgICAgICB7fTsKCiAgICAgICAgICBpZiAoIGFO
ZXdMZW5ndGggPCB0aGlzLT5MZW5ndGgoKSApCiAgICAgICAgICAgIFNldExlbmd0aChhTmV3TGVu
Z3RoKTsKICAgICAgICB9CiMgMTc4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBU3RyaW5n
LmgiCiAgICAgIHZvaWQgQXNzaWduKCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgQXNz
aWduRnJvbVJlYWRhYmxlKGFSZWFkYWJsZSk7IH0KICAgICAgaW5saW5lIHZvaWQgQXNzaWduKCBj
b25zdCBwcm9taXNlX3R5cGUmIGFSZWFkYWJsZSApOwogICAgICB2b2lkIEFzc2lnbiggY29uc3Qg
Y2hhcl90eXBlKiBhUHRyICkgeyBhUHRyID8gZG9fQXNzaWduRnJvbUVsZW1lbnRQdHIoYVB0cikg
OiBTZXRMZW5ndGgoMCk7IH0KICAgICAgdm9pZCBBc3NpZ24oIGNvbnN0IGNoYXJfdHlwZSogYVB0
ciwgc2l6ZV90eXBlIGFMZW5ndGggKSB7IGRvX0Fzc2lnbkZyb21FbGVtZW50UHRyTGVuZ3RoKGFQ
dHIsIGFMZW5ndGgpOyB9CiAgICAgIHZvaWQgQXNzaWduKCBjaGFyX3R5cGUgYUNoYXIgKSB7IGRv
X0Fzc2lnbkZyb21FbGVtZW50KGFDaGFyKTsgfQoKCiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3I9
KCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgQXNzaWduKGFSZWFkYWJsZSk7IHJldHVy
biAqdGhpczsgfQoKICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcj0oIGNvbnN0IHByb21pc2VfdHlw
ZSYgYVJlYWRhYmxlICkgeyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9CiAgICAg
IHNlbGZfdHlwZSYgb3BlcmF0b3I9KCBjb25zdCBjaGFyX3R5cGUqIGFQdHIgKSB7IEFzc2lnbihh
UHRyKTsgcmV0dXJuICp0aGlzOyB9CiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3I9KCBjaGFyX3R5
cGUgYUNoYXIgKSB7IEFzc2lnbihhQ2hhcik7IHJldHVybiAqdGhpczsgfQoKCgoKCgoKICAgICAg
dm9pZCBBcHBlbmQoIGNvbnN0IHNlbGZfdHlwZSYgYVJlYWRhYmxlICkgeyBBcHBlbmRGcm9tUmVh
ZGFibGUoYVJlYWRhYmxlKTsgfQogICAgICBpbmxpbmUgdm9pZCBBcHBlbmQoIGNvbnN0IHByb21p
c2VfdHlwZSYgYVJlYWRhYmxlICk7CiAgICAgIHZvaWQgQXBwZW5kKCBjb25zdCBjaGFyX3R5cGUq
IGFQdHIgKSB7IGlmIChhUHRyKSBkb19BcHBlbmRGcm9tRWxlbWVudFB0cihhUHRyKTsgfQogICAg
ICB2b2lkIEFwcGVuZCggY29uc3QgY2hhcl90eXBlKiBhUHRyLCBzaXplX3R5cGUgYUxlbmd0aCAp
IHsgZG9fQXBwZW5kRnJvbUVsZW1lbnRQdHJMZW5ndGgoYVB0ciwgYUxlbmd0aCk7IH0KICAgICAg
dm9pZCBBcHBlbmQoIGNoYXJfdHlwZSBhQ2hhciApIHsgZG9fQXBwZW5kRnJvbUVsZW1lbnQoYUNo
YXIpOyB9CgogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yKz0oIGNvbnN0IHNlbGZfdHlwZSYgYVJl
YWRhYmxlICkgeyBBcHBlbmQoYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9CiAgICAgIHNlbGZf
dHlwZSYgb3BlcmF0b3IrPSggY29uc3QgcHJvbWlzZV90eXBlJiBhUmVhZGFibGUgKSB7IEFwcGVu
ZChhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcis9
KCBjb25zdCBjaGFyX3R5cGUqIGFQdHIgKSB7IEFwcGVuZChhUHRyKTsgcmV0dXJuICp0aGlzOyB9
CiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3IrPSggY2hhcl90eXBlIGFDaGFyICkgeyBBcHBlbmQo
YUNoYXIpOyByZXR1cm4gKnRoaXM7IH0KIyAyMTkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0FTdHJpbmcuaCIKICAgICAgdm9pZCBJbnNlcnQoIGNvbnN0IHNlbGZfdHlwZSYgYVJlYWRhYmxl
LCBpbmRleF90eXBlIGF0UG9zaXRpb24gKSB7IEluc2VydEZyb21SZWFkYWJsZShhUmVhZGFibGUs
IGF0UG9zaXRpb24pOyB9CiAgICAgIGlubGluZSB2b2lkIEluc2VydCggY29uc3QgcHJvbWlzZV90
eXBlJiBhUmVhZGFibGUsIGluZGV4X3R5cGUgYXRQb3NpdGlvbiApOwogICAgICB2b2lkIEluc2Vy
dCggY29uc3QgY2hhcl90eXBlKiBhUHRyLCBpbmRleF90eXBlIGF0UG9zaXRpb24gKSB7IGlmIChh
UHRyKSBkb19JbnNlcnRGcm9tRWxlbWVudFB0cihhUHRyLCBhdFBvc2l0aW9uKTsgfQogICAgICB2
b2lkIEluc2VydCggY29uc3QgY2hhcl90eXBlKiBhUHRyLCBpbmRleF90eXBlIGF0UG9zaXRpb24s
IHNpemVfdHlwZSBhTGVuZ3RoICkgeyBkb19JbnNlcnRGcm9tRWxlbWVudFB0ckxlbmd0aChhUHRy
LCBhdFBvc2l0aW9uLCBhTGVuZ3RoKTsgfQogICAgICB2b2lkIEluc2VydCggY2hhcl90eXBlIGFD
aGFyLCBpbmRleF90eXBlIGF0UG9zaXRpb24gKSB7IGRvX0luc2VydEZyb21FbGVtZW50KGFDaGFy
LCBhdFBvc2l0aW9uKTsgfQoKCgogICAgICB2aXJ0dWFsIHZvaWQgQ3V0KCBpbmRleF90eXBlIGN1
dFN0YXJ0LCBzaXplX3R5cGUgY3V0TGVuZ3RoICk7CgoKCiAgICAgIHZvaWQgUmVwbGFjZSggaW5k
ZXhfdHlwZSBjdXRTdGFydCwgc2l6ZV90eXBlIGN1dExlbmd0aCwgY29uc3Qgc2VsZl90eXBlJiBh
UmVhZGFibGUgKSB7IFJlcGxhY2VGcm9tUmVhZGFibGUoY3V0U3RhcnQsIGN1dExlbmd0aCwgYVJl
YWRhYmxlKTsgfQoKCiAgICBwcml2YXRlOgoKICAgICAgaW5kZXhfdHlwZSBDb3VudENoYXIoIGlu
Y29tcGF0aWJsZV9jaGFyX3R5cGUgKSBjb25zdDsKICAgICAgdm9pZCBvcGVyYXRvcj0gKCBpbmNv
bXBhdGlibGVfY2hhcl90eXBlICk7CiAgICAgIHZvaWQgQXNzaWduICggaW5jb21wYXRpYmxlX2No
YXJfdHlwZSApOwogICAgICB2b2lkIG9wZXJhdG9yKz0gKCBpbmNvbXBhdGlibGVfY2hhcl90eXBl
ICk7CiAgICAgIHZvaWQgQXBwZW5kICggaW5jb21wYXRpYmxlX2NoYXJfdHlwZSApOwogICAgICB2
b2lkIEluc2VydCAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUsIGluZGV4X3R5cGUgKTsKCgogICAg
cHJvdGVjdGVkOgogICAgICAgICAgICAgIHZvaWQgQXNzaWduRnJvbVJlYWRhYmxlKCBjb25zdCBz
ZWxmX3R5cGUmICk7CiAgICAgICAgICAgICAgdm9pZCBBc3NpZ25Gcm9tUHJvbWlzZSggY29uc3Qg
c2VsZl90eXBlJiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXNzaWduRnJvbVJlYWRhYmxlKCBj
b25zdCBzZWxmX3R5cGUmICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19Bc3NpZ25Gcm9tRWxlbWVu
dFB0ciggY29uc3QgY2hhcl90eXBlKiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXNzaWduRnJv
bUVsZW1lbnRQdHJMZW5ndGgoIGNvbnN0IGNoYXJfdHlwZSosIHNpemVfdHlwZSApOwogICAgICB2
aXJ0dWFsIHZvaWQgZG9fQXNzaWduRnJvbUVsZW1lbnQoIGNoYXJfdHlwZSApOwoKICAgICAgICAg
ICAgICB2b2lkIEFwcGVuZEZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90eXBlJiApOwogICAgICAg
ICAgICAgIHZvaWQgQXBwZW5kRnJvbVByb21pc2UoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAg
dmlydHVhbCB2b2lkIGRvX0FwcGVuZEZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90eXBlJiApOwog
ICAgICB2aXJ0dWFsIHZvaWQgZG9fQXBwZW5kRnJvbUVsZW1lbnRQdHIoIGNvbnN0IGNoYXJfdHlw
ZSogKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0FwcGVuZEZyb21FbGVtZW50UHRyTGVuZ3RoKCBj
b25zdCBjaGFyX3R5cGUqLCBzaXplX3R5cGUgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0FwcGVu
ZEZyb21FbGVtZW50KCBjaGFyX3R5cGUgKTsKCiAgICAgICAgICAgICAgdm9pZCBJbnNlcnRGcm9t
UmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYsIGluZGV4X3R5cGUgKTsKICAgICAgICAgICAgICB2
b2lkIEluc2VydEZyb21Qcm9taXNlKCBjb25zdCBzZWxmX3R5cGUmLCBpbmRleF90eXBlICk7CiAg
ICAgIHZpcnR1YWwgdm9pZCBkb19JbnNlcnRGcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYs
IGluZGV4X3R5cGUgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0luc2VydEZyb21FbGVtZW50UHRy
KCBjb25zdCBjaGFyX3R5cGUqLCBpbmRleF90eXBlICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19J
bnNlcnRGcm9tRWxlbWVudFB0ckxlbmd0aCggY29uc3QgY2hhcl90eXBlKiwgaW5kZXhfdHlwZSwg
c2l6ZV90eXBlICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19JbnNlcnRGcm9tRWxlbWVudCggY2hh
cl90eXBlLCBpbmRleF90eXBlICk7CgogICAgICAgICAgICAgIHZvaWQgUmVwbGFjZUZyb21SZWFk
YWJsZSggaW5kZXhfdHlwZSwgc2l6ZV90eXBlLCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAgICAg
ICAgICAgdm9pZCBSZXBsYWNlRnJvbVByb21pc2UoIGluZGV4X3R5cGUsIHNpemVfdHlwZSwgY29u
c3Qgc2VsZl90eXBlJiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fUmVwbGFjZUZyb21SZWFkYWJs
ZSggaW5kZXhfdHlwZSwgc2l6ZV90eXBlLCBjb25zdCBzZWxmX3R5cGUmICk7CgoKCiAgICBwdWJs
aWM6CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBu
c1JlYWRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBlPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQz
MiA9IDAgKSBjb25zdCA9IDA7CiAgICAgIHZpcnR1YWwgY2hhcl90eXBlKiBHZXRXcml0YWJsZUZy
YWdtZW50KCBuc1dyaXRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBlPiYsIG5zRnJhZ21lbnRSZXF1ZXN0
LCBQUlVpbnQzMiA9IDAgKSA9IDA7CiAgICAgIHZpcnR1YWwgUFJCb29sIElzRGVwZW5kZW50T24o
IGNvbnN0IHNlbGZfdHlwZSYgYVN0cmluZyApIGNvbnN0IHsgcmV0dXJuICZhU3RyaW5nID09IHRo
aXM7IH0KICB9OwoKY2xhc3MgbnNBQ1N0cmluZwogICAgOiBwdWJsaWMgbnNQcml2YXRlU2hhcmFi
bGVDU3RyaW5nCiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIG5zQUNTdHJpbmcgc2VsZl90
eXBlOwogICAgICB0eXBlZGVmIG5zQVByb21pc2VDU3RyaW5nIHByb21pc2VfdHlwZTsKICAgICAg
dHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBQUlVuaWNoYXIgaW5jb21wYXRp
YmxlX2NoYXJfdHlwZTsKCgogICAgICB0eXBlZGVmIG5zUmVhZGluZ0l0ZXJhdG9yPGNoYXJfdHlw
ZT4gY29uc3RfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgbnNXcml0aW5nSXRlcmF0b3I8Y2hhcl90
eXBlPiBpdGVyYXRvcjsKCiAgICAgIHR5cGVkZWYgUFJVaW50MzIgc2l6ZV90eXBlOwogICAgICB0
eXBlZGVmIFBSVWludDMyIGluZGV4X3R5cGU7CgoKCgoKCiAgICAgIHZpcnR1YWwgfm5zQUNTdHJp
bmcoKSB7IH0KCiAgICAgIGlubGluZSBjb25zdF9pdGVyYXRvciYgQmVnaW5SZWFkaW5nKCBjb25z
dF9pdGVyYXRvciYgKSBjb25zdDsKICAgICAgaW5saW5lIGNvbnN0X2l0ZXJhdG9yJiBFbmRSZWFk
aW5nKCBjb25zdF9pdGVyYXRvciYgKSBjb25zdDsKCiAgICAgIGlubGluZSBpdGVyYXRvciYgQmVn
aW5Xcml0aW5nKCBpdGVyYXRvciYgKTsKICAgICAgaW5saW5lIGl0ZXJhdG9yJiBFbmRXcml0aW5n
KCBpdGVyYXRvciYgKTsKCiAgICAgIHZpcnR1YWwgc2l6ZV90eXBlIExlbmd0aCgpIGNvbnN0ID0g
MDsKICAgICAgUFJCb29sIElzRW1wdHkoKSBjb25zdCB7IHJldHVybiBMZW5ndGgoKSA9PSAwOyB9
CgogICAgICBpbmxpbmUgUFJCb29sIEVxdWFscyggY29uc3Qgc2VsZl90eXBlJiApIGNvbnN0Owog
ICAgICBQUkJvb2wgRXF1YWxzKCBjb25zdCBjaGFyX3R5cGUqICkgY29uc3Q7CgoKCgoKCgogICAg
ICBjaGFyX3R5cGUgRmlyc3QoKSBjb25zdDsKICAgICAgY2hhcl90eXBlIExhc3QoKSBjb25zdDsK
CiAgICAgIHNpemVfdHlwZSBDb3VudENoYXIoIGNoYXJfdHlwZSApIGNvbnN0OwojIDM0MiAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5oIgogICAgICBzaXplX3R5cGUgTGVmdCgg
c2VsZl90eXBlJiwgc2l6ZV90eXBlICkgY29uc3Q7CiAgICAgIHNpemVfdHlwZSBNaWQoIHNlbGZf
dHlwZSYsIFBSVWludDMyLCBQUlVpbnQzMiApIGNvbnN0OwogICAgICBzaXplX3R5cGUgUmlnaHQo
IHNlbGZfdHlwZSYsIHNpemVfdHlwZSApIGNvbnN0OwoKCiAgICAgIFBSSW50MzIgRmluZENoYXIo
IGNoYXJfdHlwZSwgUFJVaW50MzIgYU9mZnNldCA9IDAgKSBjb25zdDsKIyAzNTggIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAgICAgdmlydHVhbCB2b2lkIFNldENhcGFj
aXR5KCBzaXplX3R5cGUgKSB7IH0KIyAzNzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FT
dHJpbmcuaCIKICAgICAgdmlydHVhbCB2b2lkIFNldExlbmd0aCggc2l6ZV90eXBlICkgeyB9CgoK
ICAgICAgdm9pZAogICAgICBUcnVuY2F0ZSggc2l6ZV90eXBlIGFOZXdMZW5ndGg9MCApCiAgICAg
ICAgewogICAgICAgICAge307CgogICAgICAgICAgaWYgKCBhTmV3TGVuZ3RoIDwgdGhpcy0+TGVu
Z3RoKCkgKQogICAgICAgICAgICBTZXRMZW5ndGgoYU5ld0xlbmd0aCk7CiAgICAgICAgfQojIDQw
OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5oIgogICAgICB2b2lkIEFzc2ln
biggY29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7IEFzc2lnbkZyb21SZWFkYWJsZShhUmVh
ZGFibGUpOyB9CiAgICAgIGlubGluZSB2b2lkIEFzc2lnbiggY29uc3QgcHJvbWlzZV90eXBlJiBh
UmVhZGFibGUgKTsKICAgICAgdm9pZCBBc3NpZ24oIGNvbnN0IGNoYXJfdHlwZSogYVB0ciApIHsg
YVB0ciA/IGRvX0Fzc2lnbkZyb21FbGVtZW50UHRyKGFQdHIpIDogU2V0TGVuZ3RoKDApOyB9CiAg
ICAgIHZvaWQgQXNzaWduKCBjb25zdCBjaGFyX3R5cGUqIGFQdHIsIHNpemVfdHlwZSBhTGVuZ3Ro
ICkgeyBkb19Bc3NpZ25Gcm9tRWxlbWVudFB0ckxlbmd0aChhUHRyLCBhTGVuZ3RoKTsgfQogICAg
ICB2b2lkIEFzc2lnbiggY2hhcl90eXBlIGFDaGFyICkgeyBkb19Bc3NpZ25Gcm9tRWxlbWVudChh
Q2hhcik7IH0KCgogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yPSggY29uc3Qgc2VsZl90eXBlJiBh
UmVhZGFibGUgKSB7IEFzc2lnbihhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIHNl
bGZfdHlwZSYgb3BlcmF0b3I9KCBjb25zdCBwcm9taXNlX3R5cGUmIGFSZWFkYWJsZSApIHsgQXNz
aWduKGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsgfQogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9y
PSggY29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBBc3NpZ24oYVB0cik7IHJldHVybiAqdGhpczsg
fQogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yPSggY2hhcl90eXBlIGFDaGFyICkgeyBBc3NpZ24o
YUNoYXIpOyByZXR1cm4gKnRoaXM7IH0KCgoKCgoKCiAgICAgIHZvaWQgQXBwZW5kKCBjb25zdCBz
ZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgQXBwZW5kRnJvbVJlYWRhYmxlKGFSZWFkYWJsZSk7IH0K
ICAgICAgaW5saW5lIHZvaWQgQXBwZW5kKCBjb25zdCBwcm9taXNlX3R5cGUmIGFSZWFkYWJsZSAp
OwogICAgICB2b2lkIEFwcGVuZCggY29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBpZiAoYVB0cikg
ZG9fQXBwZW5kRnJvbUVsZW1lbnRQdHIoYVB0cik7IH0KICAgICAgdm9pZCBBcHBlbmQoIGNvbnN0
IGNoYXJfdHlwZSogYVB0ciwgc2l6ZV90eXBlIGFMZW5ndGggKSB7IGRvX0FwcGVuZEZyb21FbGVt
ZW50UHRyTGVuZ3RoKGFQdHIsIGFMZW5ndGgpOyB9CiAgICAgIHZvaWQgQXBwZW5kKCBjaGFyX3R5
cGUgYUNoYXIgKSB7IGRvX0FwcGVuZEZyb21FbGVtZW50KGFDaGFyKTsgfQoKICAgICAgc2VsZl90
eXBlJiBvcGVyYXRvcis9KCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgQXBwZW5kKGFS
ZWFkYWJsZSk7IHJldHVybiAqdGhpczsgfQogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yKz0oIGNv
bnN0IHByb21pc2VfdHlwZSYgYVJlYWRhYmxlICkgeyBBcHBlbmQoYVJlYWRhYmxlKTsgcmV0dXJu
ICp0aGlzOyB9CiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3IrPSggY29uc3QgY2hhcl90eXBlKiBh
UHRyICkgeyBBcHBlbmQoYVB0cik7IHJldHVybiAqdGhpczsgfQogICAgICBzZWxmX3R5cGUmIG9w
ZXJhdG9yKz0oIGNoYXJfdHlwZSBhQ2hhciApIHsgQXBwZW5kKGFDaGFyKTsgcmV0dXJuICp0aGlz
OyB9CiMgNDQ5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBU3RyaW5nLmgiCiAgICAgIHZv
aWQgSW5zZXJ0KCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSwgaW5kZXhfdHlwZSBhdFBvc2l0
aW9uICkgeyBJbnNlcnRGcm9tUmVhZGFibGUoYVJlYWRhYmxlLCBhdFBvc2l0aW9uKTsgfQogICAg
ICBpbmxpbmUgdm9pZCBJbnNlcnQoIGNvbnN0IHByb21pc2VfdHlwZSYgYVJlYWRhYmxlLCBpbmRl
eF90eXBlIGF0UG9zaXRpb24gKTsKICAgICAgdm9pZCBJbnNlcnQoIGNvbnN0IGNoYXJfdHlwZSog
YVB0ciwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uICkgeyBpZiAoYVB0cikgZG9fSW5zZXJ0RnJvbUVs
ZW1lbnRQdHIoYVB0ciwgYXRQb3NpdGlvbik7IH0KICAgICAgdm9pZCBJbnNlcnQoIGNvbnN0IGNo
YXJfdHlwZSogYVB0ciwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uLCBzaXplX3R5cGUgYUxlbmd0aCAp
IHsgZG9fSW5zZXJ0RnJvbUVsZW1lbnRQdHJMZW5ndGgoYVB0ciwgYXRQb3NpdGlvbiwgYUxlbmd0
aCk7IH0KICAgICAgdm9pZCBJbnNlcnQoIGNoYXJfdHlwZSBhQ2hhciwgaW5kZXhfdHlwZSBhdFBv
c2l0aW9uICkgeyBkb19JbnNlcnRGcm9tRWxlbWVudChhQ2hhciwgYXRQb3NpdGlvbik7IH0KCgoK
ICAgICAgdmlydHVhbCB2b2lkIEN1dCggaW5kZXhfdHlwZSBjdXRTdGFydCwgc2l6ZV90eXBlIGN1
dExlbmd0aCApOwoKCgogICAgICB2b2lkIFJlcGxhY2UoIGluZGV4X3R5cGUgY3V0U3RhcnQsIHNp
emVfdHlwZSBjdXRMZW5ndGgsIGNvbnN0IHNlbGZfdHlwZSYgYVJlYWRhYmxlICkgeyBSZXBsYWNl
RnJvbVJlYWRhYmxlKGN1dFN0YXJ0LCBjdXRMZW5ndGgsIGFSZWFkYWJsZSk7IH0KCgogICAgcHJp
dmF0ZToKCiAgICAgIGluZGV4X3R5cGUgQ291bnRDaGFyKCBpbmNvbXBhdGlibGVfY2hhcl90eXBl
ICkgY29uc3Q7CiAgICAgIHZvaWQgb3BlcmF0b3I9ICggaW5jb21wYXRpYmxlX2NoYXJfdHlwZSAp
OwogICAgICB2b2lkIEFzc2lnbiAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUgKTsKICAgICAgdm9p
ZCBvcGVyYXRvcis9ICggaW5jb21wYXRpYmxlX2NoYXJfdHlwZSApOwogICAgICB2b2lkIEFwcGVu
ZCAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUgKTsKICAgICAgdm9pZCBJbnNlcnQgKCBpbmNvbXBh
dGlibGVfY2hhcl90eXBlLCBpbmRleF90eXBlICk7CgoKICAgIHByb3RlY3RlZDoKICAgICAgICAg
ICAgICB2b2lkIEFzc2lnbkZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90eXBlJiApOwogICAgICAg
ICAgICAgIHZvaWQgQXNzaWduRnJvbVByb21pc2UoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAg
dmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90eXBlJiApOwog
ICAgICB2aXJ0dWFsIHZvaWQgZG9fQXNzaWduRnJvbUVsZW1lbnRQdHIoIGNvbnN0IGNoYXJfdHlw
ZSogKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21FbGVtZW50UHRyTGVuZ3RoKCBj
b25zdCBjaGFyX3R5cGUqLCBzaXplX3R5cGUgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0Fzc2ln
bkZyb21FbGVtZW50KCBjaGFyX3R5cGUgKTsKCiAgICAgICAgICAgICAgdm9pZCBBcHBlbmRGcm9t
UmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgICAgICAgICB2b2lkIEFwcGVuZEZy
b21Qcm9taXNlKCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19BcHBl
bmRGcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgdmlydHVhbCB2b2lkIGRv
X0FwcGVuZEZyb21FbGVtZW50UHRyKCBjb25zdCBjaGFyX3R5cGUqICk7CiAgICAgIHZpcnR1YWwg
dm9pZCBkb19BcHBlbmRGcm9tRWxlbWVudFB0ckxlbmd0aCggY29uc3QgY2hhcl90eXBlKiwgc2l6
ZV90eXBlICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19BcHBlbmRGcm9tRWxlbWVudCggY2hhcl90
eXBlICk7CgogICAgICAgICAgICAgIHZvaWQgSW5zZXJ0RnJvbVJlYWRhYmxlKCBjb25zdCBzZWxm
X3R5cGUmLCBpbmRleF90eXBlICk7CiAgICAgICAgICAgICAgdm9pZCBJbnNlcnRGcm9tUHJvbWlz
ZSggY29uc3Qgc2VsZl90eXBlJiwgaW5kZXhfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9f
SW5zZXJ0RnJvbVJlYWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmLCBpbmRleF90eXBlICk7CiAgICAg
IHZpcnR1YWwgdm9pZCBkb19JbnNlcnRGcm9tRWxlbWVudFB0ciggY29uc3QgY2hhcl90eXBlKiwg
aW5kZXhfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJvbUVsZW1lbnRQdHJM
ZW5ndGgoIGNvbnN0IGNoYXJfdHlwZSosIGluZGV4X3R5cGUsIHNpemVfdHlwZSApOwogICAgICB2
aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJvbUVsZW1lbnQoIGNoYXJfdHlwZSwgaW5kZXhfdHlwZSAp
OwoKICAgICAgICAgICAgICB2b2lkIFJlcGxhY2VGcm9tUmVhZGFibGUoIGluZGV4X3R5cGUsIHNp
emVfdHlwZSwgY29uc3Qgc2VsZl90eXBlJiApOwogICAgICAgICAgICAgIHZvaWQgUmVwbGFjZUZy
b21Qcm9taXNlKCBpbmRleF90eXBlLCBzaXplX3R5cGUsIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAg
ICAgdmlydHVhbCB2b2lkIGRvX1JlcGxhY2VGcm9tUmVhZGFibGUoIGluZGV4X3R5cGUsIHNpemVf
dHlwZSwgY29uc3Qgc2VsZl90eXBlJiApOwoKCgogICAgcHVibGljOgogICAgICB2aXJ0dWFsIGNv
bnN0IGNoYXJfdHlwZSogR2V0UmVhZGFibGVGcmFnbWVudCggbnNSZWFkYWJsZUZyYWdtZW50PGNo
YXJfdHlwZT4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgPSAwICkgY29uc3QgPSAwOwog
ICAgICB2aXJ0dWFsIGNoYXJfdHlwZSogR2V0V3JpdGFibGVGcmFnbWVudCggbnNXcml0YWJsZUZy
YWdtZW50PGNoYXJfdHlwZT4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgPSAwICkgPSAw
OwogICAgICB2aXJ0dWFsIFBSQm9vbCBJc0RlcGVuZGVudE9uKCBjb25zdCBzZWxmX3R5cGUmIGFT
dHJpbmcgKSBjb25zdCB7IHJldHVybiAmYVN0cmluZyA9PSB0aGlzOyB9CiAgfTsKCiMgMSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVByb21pc2VTdHJpbmcuaCIgMQojIDM1ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNBUHJvbWlzZVN0cmluZy5oIgpjbGFzcyBuc0FQcm9taXNlU3Ry
aW5nIDogcHVibGljIG5zQVN0cmluZyB7IH07CmNsYXNzIG5zQVByb21pc2VDU3RyaW5nIDogcHVi
bGljIG5zQUNTdHJpbmcgeyB9OwojIDUwOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0
cmluZy5oIiAyCgppbmxpbmUKdm9pZApuc0FTdHJpbmc6OkFzc2lnbiggY29uc3QgbnNBUHJvbWlz
ZVN0cmluZyYgYVJlYWRhYmxlICkKICB7CiAgICBBc3NpZ25Gcm9tUHJvbWlzZShhUmVhZGFibGUp
OwogIH0KCmlubGluZQp2b2lkCm5zQVN0cmluZzo6QXBwZW5kKCBjb25zdCBuc0FQcm9taXNlU3Ry
aW5nJiBhUmVhZGFibGUgKQogIHsKICAgIEFwcGVuZEZyb21Qcm9taXNlKGFSZWFkYWJsZSk7CiAg
fQoKaW5saW5lCnZvaWQKbnNBU3RyaW5nOjpJbnNlcnQoIGNvbnN0IG5zQVByb21pc2VTdHJpbmcm
IGFSZWFkYWJsZSwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uICkKICB7CiAgICBJbnNlcnRGcm9tUHJv
bWlzZShhUmVhZGFibGUsIGF0UG9zaXRpb24pOwogIH0KCmlubGluZQp2b2lkCm5zQUNTdHJpbmc6
OkFzc2lnbiggY29uc3QgbnNBUHJvbWlzZUNTdHJpbmcmIGFSZWFkYWJsZSApCiAgewogICAgQXNz
aWduRnJvbVByb21pc2UoYVJlYWRhYmxlKTsKICB9CgppbmxpbmUKdm9pZApuc0FDU3RyaW5nOjpB
cHBlbmQoIGNvbnN0IG5zQVByb21pc2VDU3RyaW5nJiBhUmVhZGFibGUgKQogIHsKICAgIEFwcGVu
ZEZyb21Qcm9taXNlKGFSZWFkYWJsZSk7CiAgfQoKaW5saW5lCnZvaWQKbnNBQ1N0cmluZzo6SW5z
ZXJ0KCBjb25zdCBuc0FQcm9taXNlQ1N0cmluZyYgYVJlYWRhYmxlLCBpbmRleF90eXBlIGF0UG9z
aXRpb24gKQogIHsKICAgIEluc2VydEZyb21Qcm9taXNlKGFSZWFkYWJsZSwgYXRQb3NpdGlvbik7
CiAgfQoKCgoKCmlubGluZQpuc0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJgpuc0FTdHJpbmc6OkJl
Z2luUmVhZGluZyggY29uc3RfaXRlcmF0b3ImIGFSZXN1bHQgKSBjb25zdAogIHsKICAgIGFSZXN1
bHQubU93bmluZ1N0cmluZyA9IHRoaXM7CiAgICBHZXRSZWFkYWJsZUZyYWdtZW50KGFSZXN1bHQu
bUZyYWdtZW50LCBrRmlyc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0Lm1Qb3NpdGlvbiA9IGFSZXN1
bHQubUZyYWdtZW50Lm1TdGFydDsKICAgIGFSZXN1bHQubm9ybWFsaXplX2ZvcndhcmQoKTsKICAg
IHJldHVybiBhUmVzdWx0OwogIH0KCmlubGluZQpuc0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJgpu
c0FTdHJpbmc6OkVuZFJlYWRpbmcoIGNvbnN0X2l0ZXJhdG9yJiBhUmVzdWx0ICkgY29uc3QKICB7
CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0UmVhZGFibGVGcmFnbWVu
dChhUmVzdWx0Lm1GcmFnbWVudCwga0xhc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0Lm1Qb3NpdGlv
biA9IGFSZXN1bHQubUZyYWdtZW50Lm1FbmQ7CgogICAgcmV0dXJuIGFSZXN1bHQ7CiAgfQoKaW5s
aW5lCm5zQVN0cmluZzo6aXRlcmF0b3ImCm5zQVN0cmluZzo6QmVnaW5Xcml0aW5nKCBpdGVyYXRv
ciYgYVJlc3VsdCApCiAgewogICAgYVJlc3VsdC5tT3duaW5nU3RyaW5nID0gdGhpczsKICAgIEdl
dFdyaXRhYmxlRnJhZ21lbnQoYVJlc3VsdC5tRnJhZ21lbnQsIGtGaXJzdEZyYWdtZW50KTsKICAg
IGFSZXN1bHQubVBvc2l0aW9uID0gYVJlc3VsdC5tRnJhZ21lbnQubVN0YXJ0OwogICAgYVJlc3Vs
dC5ub3JtYWxpemVfZm9yd2FyZCgpOwogICAgcmV0dXJuIGFSZXN1bHQ7CiAgfQoKCmlubGluZQpu
c0FTdHJpbmc6Oml0ZXJhdG9yJgpuc0FTdHJpbmc6OkVuZFdyaXRpbmcoIGl0ZXJhdG9yJiBhUmVz
dWx0ICkKICB7CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0V3JpdGFi
bGVGcmFnbWVudChhUmVzdWx0Lm1GcmFnbWVudCwga0xhc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0
Lm1Qb3NpdGlvbiA9IGFSZXN1bHQubUZyYWdtZW50Lm1FbmQ7CgogICAgcmV0dXJuIGFSZXN1bHQ7
CiAgfQoKY2xhc3MgbnNTdHJpbmdDb21wYXJhdG9yCiAgewogICAgcHVibGljOgogICAgICB2aXJ0
dWFsIGludCBvcGVyYXRvcigpKCBjb25zdCBQUlVuaWNoYXIqLCBjb25zdCBQUlVuaWNoYXIqLCBQ
UlVpbnQzMiBhTGVuZ3RoICkgY29uc3QgPSAwOwogIH07CgpjbGFzcyBuc0RlZmF1bHRTdHJpbmdD
b21wYXJhdG9yCiAgICA6IHB1YmxpYyBuc1N0cmluZ0NvbXBhcmF0b3IKICB7CiAgICBwdWJsaWM6
CiAgICAgIHZpcnR1YWwgaW50IG9wZXJhdG9yKCkoIGNvbnN0IFBSVW5pY2hhciosIGNvbnN0IFBS
VW5pY2hhciosIFBSVWludDMyIGFMZW5ndGggKSBjb25zdDsKICB9OwoKY2xhc3MgbnNDYXNlSW5z
ZW5zaXRpdmVTdHJpbmdDb21wYXJhdG9yCiAgICA6IHB1YmxpYyBuc1N0cmluZ0NvbXBhcmF0b3IK
ICB7CiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgaW50IG9wZXJhdG9yKCkoIGNvbnN0IFBSVW5p
Y2hhciosIGNvbnN0IFBSVW5pY2hhciosIFBSVWludDMyIGFMZW5ndGggKSBjb25zdDsKICB9OwoK
ICAgICAgIGludCBDb21wYXJlKCBjb25zdCBuc0FTdHJpbmcmIGxocywgY29uc3QgbnNBU3RyaW5n
JiByaHMsIGNvbnN0IG5zU3RyaW5nQ29tcGFyYXRvciYgPSBuc0RlZmF1bHRTdHJpbmdDb21wYXJh
dG9yKCkgKTsKCmlubGluZQpQUkJvb2wKbnNBU3RyaW5nOjpFcXVhbHMoIGNvbnN0IHNlbGZfdHlw
ZSYgcmhzICkgY29uc3QKICB7CiAgICByZXR1cm4gTGVuZ3RoKCk9PXJocy5MZW5ndGgoKSAmJiBD
b21wYXJlKCp0aGlzLCByaHMpPT0wOwogIH0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3IhPSggY29u
c3QgbnNBU3RyaW5nJiBsaHMsIGNvbnN0IG5zQVN0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4g
IWxocy5FcXVhbHMocmhzKTsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPCAoIGNvbnN0IG5z
QVN0cmluZyYgbGhzLCBjb25zdCBuc0FTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBh
cmUobGhzLCByaHMpPCAwOwogIH0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3I8PSggY29uc3QgbnNB
U3RyaW5nJiBsaHMsIGNvbnN0IG5zQVN0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gQ29tcGFy
ZShsaHMsIHJocyk8PTA7CiAgfQoKaW5saW5lClBSQm9vbApvcGVyYXRvcj09KCBjb25zdCBuc0FT
dHJpbmcmIGxocywgY29uc3QgbnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBsaHMuRXF1
YWxzKHJocyk7CiAgfQoKaW5saW5lClBSQm9vbApvcGVyYXRvcj49KCBjb25zdCBuc0FTdHJpbmcm
IGxocywgY29uc3QgbnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBDb21wYXJlKGxocywg
cmhzKT49MDsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPiAoIGNvbnN0IG5zQVN0cmluZyYg
bGhzLCBjb25zdCBuc0FTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBhcmUobGhzLCBy
aHMpPiAwOwogIH0KCmlubGluZQpuc0FTdHJpbmc6OnNpemVfdHlwZQpuc0FTdHJpbmc6OkxlZnQo
IG5zQVN0cmluZyYgYVJlc3VsdCwgc2l6ZV90eXBlIGFMZW5ndGhUb0NvcHkgKSBjb25zdAogIHsK
ICAgIHJldHVybiBNaWQoYVJlc3VsdCwgMCwgYUxlbmd0aFRvQ29weSk7CiAgfQoKCgoKCgppbmxp
bmUKbnNBQ1N0cmluZzo6Y29uc3RfaXRlcmF0b3ImCm5zQUNTdHJpbmc6OkJlZ2luUmVhZGluZygg
Y29uc3RfaXRlcmF0b3ImIGFSZXN1bHQgKSBjb25zdAogIHsKICAgIGFSZXN1bHQubU93bmluZ1N0
cmluZyA9IHRoaXM7CiAgICBHZXRSZWFkYWJsZUZyYWdtZW50KGFSZXN1bHQubUZyYWdtZW50LCBr
Rmlyc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0Lm1Qb3NpdGlvbiA9IGFSZXN1bHQubUZyYWdtZW50
Lm1TdGFydDsKICAgIGFSZXN1bHQubm9ybWFsaXplX2ZvcndhcmQoKTsKICAgIHJldHVybiBhUmVz
dWx0OwogIH0KCmlubGluZQpuc0FDU3RyaW5nOjpjb25zdF9pdGVyYXRvciYKbnNBQ1N0cmluZzo6
RW5kUmVhZGluZyggY29uc3RfaXRlcmF0b3ImIGFSZXN1bHQgKSBjb25zdAogIHsKICAgIGFSZXN1
bHQubU93bmluZ1N0cmluZyA9IHRoaXM7CiAgICBHZXRSZWFkYWJsZUZyYWdtZW50KGFSZXN1bHQu
bUZyYWdtZW50LCBrTGFzdEZyYWdtZW50KTsKICAgIGFSZXN1bHQubVBvc2l0aW9uID0gYVJlc3Vs
dC5tRnJhZ21lbnQubUVuZDsKCiAgICByZXR1cm4gYVJlc3VsdDsKICB9CgppbmxpbmUKbnNBQ1N0
cmluZzo6aXRlcmF0b3ImCm5zQUNTdHJpbmc6OkJlZ2luV3JpdGluZyggaXRlcmF0b3ImIGFSZXN1
bHQgKQogIHsKICAgIGFSZXN1bHQubU93bmluZ1N0cmluZyA9IHRoaXM7CiAgICBHZXRXcml0YWJs
ZUZyYWdtZW50KGFSZXN1bHQubUZyYWdtZW50LCBrRmlyc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0
Lm1Qb3NpdGlvbiA9IGFSZXN1bHQubUZyYWdtZW50Lm1TdGFydDsKICAgIGFSZXN1bHQubm9ybWFs
aXplX2ZvcndhcmQoKTsKICAgIHJldHVybiBhUmVzdWx0OwogIH0KCgppbmxpbmUKbnNBQ1N0cmlu
Zzo6aXRlcmF0b3ImCm5zQUNTdHJpbmc6OkVuZFdyaXRpbmcoIGl0ZXJhdG9yJiBhUmVzdWx0ICkK
ICB7CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0V3JpdGFibGVGcmFn
bWVudChhUmVzdWx0Lm1GcmFnbWVudCwga0xhc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0Lm1Qb3Np
dGlvbiA9IGFSZXN1bHQubUZyYWdtZW50Lm1FbmQ7CgogICAgcmV0dXJuIGFSZXN1bHQ7CiAgfQoK
CmNsYXNzIG5zQ1N0cmluZ0NvbXBhcmF0b3IKICB7CiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwg
aW50IG9wZXJhdG9yKCkoIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgUFJVaW50MzIgYUxlbmd0
aCApIGNvbnN0ID0gMDsKICB9OwoKY2xhc3MgbnNEZWZhdWx0Q1N0cmluZ0NvbXBhcmF0b3IKICAg
IDogcHVibGljIG5zQ1N0cmluZ0NvbXBhcmF0b3IKICB7CiAgICBwdWJsaWM6CiAgICAgIHZpcnR1
YWwgaW50IG9wZXJhdG9yKCkoIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgUFJVaW50MzIgYUxl
bmd0aCApIGNvbnN0OwogIH07CgpjbGFzcyBuc0Nhc2VJbnNlbnNpdGl2ZUNTdHJpbmdDb21wYXJh
dG9yCiAgICA6IHB1YmxpYyBuc0NTdHJpbmdDb21wYXJhdG9yCiAgewogICAgcHVibGljOgogICAg
ICB2aXJ0dWFsIGludCBvcGVyYXRvcigpKCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIFBSVWlu
dDMyIGFMZW5ndGggKSBjb25zdDsKICB9OwoKICAgICAgIGludCBDb21wYXJlKCBjb25zdCBuc0FD
U3RyaW5nJiBsaHMsIGNvbnN0IG5zQUNTdHJpbmcmIHJocywgY29uc3QgbnNDU3RyaW5nQ29tcGFy
YXRvciYgPSBuc0RlZmF1bHRDU3RyaW5nQ29tcGFyYXRvcigpICk7CgppbmxpbmUKUFJCb29sCm5z
QUNTdHJpbmc6OkVxdWFscyggY29uc3Qgc2VsZl90eXBlJiByaHMgKSBjb25zdAogIHsKICAgIHJl
dHVybiBMZW5ndGgoKT09cmhzLkxlbmd0aCgpICYmIENvbXBhcmUoKnRoaXMsIHJocyk9PTA7CiAg
fQoKaW5saW5lClBSQm9vbApvcGVyYXRvciE9KCBjb25zdCBuc0FDU3RyaW5nJiBsaHMsIGNvbnN0
IG5zQUNTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuICFsaHMuRXF1YWxzKHJocyk7CiAgfQoK
aW5saW5lClBSQm9vbApvcGVyYXRvcjwgKCBjb25zdCBuc0FDU3RyaW5nJiBsaHMsIGNvbnN0IG5z
QUNTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBhcmUobGhzLCByaHMpPCAwOwogIH0K
CmlubGluZQpQUkJvb2wKb3BlcmF0b3I8PSggY29uc3QgbnNBQ1N0cmluZyYgbGhzLCBjb25zdCBu
c0FDU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBDb21wYXJlKGxocywgcmhzKTw9MDsKICB9
CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPT0oIGNvbnN0IG5zQUNTdHJpbmcmIGxocywgY29uc3Qg
bnNBQ1N0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gbGhzLkVxdWFscyhyaHMpOwogIH0KCmlu
bGluZQpQUkJvb2wKb3BlcmF0b3I+PSggY29uc3QgbnNBQ1N0cmluZyYgbGhzLCBjb25zdCBuc0FD
U3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBDb21wYXJlKGxocywgcmhzKT49MDsKICB9Cgpp
bmxpbmUKUFJCb29sCm9wZXJhdG9yPiAoIGNvbnN0IG5zQUNTdHJpbmcmIGxocywgY29uc3QgbnNB
Q1N0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gQ29tcGFyZShsaHMsIHJocyk+IDA7CiAgfQoK
aW5saW5lCm5zQUNTdHJpbmc6OnNpemVfdHlwZQpuc0FDU3RyaW5nOjpMZWZ0KCBuc0FDU3RyaW5n
JiBhUmVzdWx0LCBzaXplX3R5cGUgYUxlbmd0aFRvQ29weSApIGNvbnN0CiAgewogICAgcmV0dXJu
IE1pZChhUmVzdWx0LCAwLCBhTGVuZ3RoVG9Db3B5KTsKICB9CgoKCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zRGVwZW5kZW50Q29uY2F0ZW5hdGlvbi5oIiAxCiMgNTAgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0RlcGVuZGVudENvbmNhdGVuYXRpb24uaCIKY2xhc3MgbnNEZXBl
bmRlbnRDb25jYXRlbmF0aW9uCiAgICA6IHB1YmxpYyBuc0FQcm9taXNlU3RyaW5nCiAgewogICAg
cHVibGljOgogICAgICB0eXBlZGVmIG5zRGVwZW5kZW50Q29uY2F0ZW5hdGlvbiBzZWxmX3R5cGU7
CiAgICAgIHR5cGVkZWYgUFJVbmljaGFyIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBuc0FTdHJp
bmcgc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyaW5nX3R5cGU6OmNvbnN0X2l0ZXJhdG9y
IGNvbnN0X2l0ZXJhdG9yOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbCBjb25zdCBjaGFy
X3R5cGUqIEdldFJlYWRhYmxlRnJhZ21lbnQoIG5zUmVhZGFibGVGcmFnbWVudDxjaGFyX3R5cGU+
JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29uc3Q7CiAgICAgIHZpcnR1YWwgY2hh
cl90eXBlKiBHZXRXcml0YWJsZUZyYWdtZW50KCBuc1dyaXRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBl
PiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApIHsgcmV0dXJuIDA7IH0KCiAgICAgIGVu
dW0geyBrTGVmdFN0cmluZywga1JpZ2h0U3RyaW5nIH07CgogICAgICBpbnQKICAgICAgR2V0Q3Vy
cmVudFN0cmluZ0Zyb21GcmFnbWVudCggY29uc3QgbnNSZWFkYWJsZUZyYWdtZW50PGNoYXJfdHlw
ZT4mIGFGcmFnbWVudCApIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIChyZWludGVy
cHJldF9jYXN0PCBQUlVpbnQzMiA+KGFGcmFnbWVudC5tRnJhZ21lbnRJZGVudGlmaWVyKSAmIG1G
cmFnbWVudElkZW50aWZpZXJNYXNrKSA/IGtSaWdodFN0cmluZyA6IGtMZWZ0U3RyaW5nOwogICAg
ICAgIH0KCiAgICAgIGludAogICAgICBTZXRMZWZ0U3RyaW5nSW5GcmFnbWVudCggbnNSZWFkYWJs
ZUZyYWdtZW50PGNoYXJfdHlwZT4mIGFGcmFnbWVudCApIGNvbnN0CiAgICAgICAgewogICAgICAg
ICAgYUZyYWdtZW50Lm1GcmFnbWVudElkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PCB2b2lk
KiA+KHJlaW50ZXJwcmV0X2Nhc3Q8IFBSVWludDMyID4oYUZyYWdtZW50Lm1GcmFnbWVudElkZW50
aWZpZXIpICYgfm1GcmFnbWVudElkZW50aWZpZXJNYXNrKTsKICAgICAgICAgIHJldHVybiBrTGVm
dFN0cmluZzsKICAgICAgICB9CgogICAgICBpbnQKICAgICAgU2V0UmlnaHRTdHJpbmdJbkZyYWdt
ZW50KCBuc1JlYWRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBlPiYgYUZyYWdtZW50ICkgY29uc3QKICAg
ICAgICB7CiAgICAgICAgICBhRnJhZ21lbnQubUZyYWdtZW50SWRlbnRpZmllciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8IHZvaWQqID4ocmVpbnRlcnByZXRfY2FzdDwgUFJVaW50MzIgPihhRnJhZ21lbnQu
bUZyYWdtZW50SWRlbnRpZmllcikgfCBtRnJhZ21lbnRJZGVudGlmaWVyTWFzayk7CiAgICAgICAg
ICByZXR1cm4ga1JpZ2h0U3RyaW5nOwogICAgICAgIH0KCiAgICBwdWJsaWM6CiAgICAgIG5zRGVw
ZW5kZW50Q29uY2F0ZW5hdGlvbiggY29uc3Qgc3RyaW5nX3R5cGUmIGFMZWZ0U3RyaW5nLCBjb25z
dCBzdHJpbmdfdHlwZSYgYVJpZ2h0U3RyaW5nLCBQUlVpbnQzMiBhTWFzayA9IDEgKQogICAgICAg
ICAgOiBtRnJhZ21lbnRJZGVudGlmaWVyTWFzayhhTWFzaykKICAgICAgICB7CiAgICAgICAgICBt
U3RyaW5nc1trTGVmdFN0cmluZ10gPSAmYUxlZnRTdHJpbmc7CiAgICAgICAgICBtU3RyaW5nc1tr
UmlnaHRTdHJpbmddID0gJmFSaWdodFN0cmluZzsKICAgICAgICB9CgogICAgICBuc0RlcGVuZGVu
dENvbmNhdGVuYXRpb24oIGNvbnN0IHNlbGZfdHlwZSYgYUxlZnRTdHJpbmcsIGNvbnN0IHN0cmlu
Z190eXBlJiBhUmlnaHRTdHJpbmcgKQogICAgICAgICAgOiBtRnJhZ21lbnRJZGVudGlmaWVyTWFz
ayhhTGVmdFN0cmluZy5tRnJhZ21lbnRJZGVudGlmaWVyTWFzazw8MSkKICAgICAgICB7CiAgICAg
ICAgICBtU3RyaW5nc1trTGVmdFN0cmluZ10gPSAmYUxlZnRTdHJpbmc7CiAgICAgICAgICBtU3Ry
aW5nc1trUmlnaHRTdHJpbmddID0gJmFSaWdodFN0cmluZzsKICAgICAgICB9CgoKCgogICAgcHJp
dmF0ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBzZWxmX3R5cGUmICk7CgogICAgcHVi
bGljOgoKICAgICAgdmlydHVhbCBQUlVpbnQzMiBMZW5ndGgoKSBjb25zdDsKICAgICAgdmlydHVh
bCBQUkJvb2wgSXNEZXBlbmRlbnRPbiggY29uc3Qgc3RyaW5nX3R5cGUmICkgY29uc3Q7CgoKCgog
ICAgICBQUlVpbnQzMiBHZXRGcmFnbWVudElkZW50aWZpZXJNYXNrKCkgY29uc3QgeyByZXR1cm4g
bUZyYWdtZW50SWRlbnRpZmllck1hc2s7IH0KCiAgICBwcml2YXRlOgogICAgICB2b2lkIG9wZXJh
dG9yKyggY29uc3Qgc2VsZl90eXBlJiApOwoKCgogICAgcHJpdmF0ZToKICAgICAgY29uc3Qgc3Ry
aW5nX3R5cGUqIG1TdHJpbmdzWzJdOwogICAgICBQUlVpbnQzMiBtRnJhZ21lbnRJZGVudGlmaWVy
TWFzazsKICB9OwoKY2xhc3MgbnNEZXBlbmRlbnRDQ29uY2F0ZW5hdGlvbgogICAgOiBwdWJsaWMg
bnNBUHJvbWlzZUNTdHJpbmcKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgbnNEZXBlbmRl
bnRDQ29uY2F0ZW5hdGlvbiBzZWxmX3R5cGU7CiAgICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7
CiAgICAgIHR5cGVkZWYgbnNBQ1N0cmluZyBzdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJp
bmdfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgogICAgcHJvdGVjdGVkOgog
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSogR2V0UmVhZGFibGVGcmFnbWVudCggbnNSZWFk
YWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSBj
b25zdDsKICAgICAgdmlydHVhbCBjaGFyX3R5cGUqIEdldFdyaXRhYmxlRnJhZ21lbnQoIG5zV3Jp
dGFibGVGcmFnbWVudDxjaGFyX3R5cGU+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkg
eyByZXR1cm4gMDsgfQoKICAgICAgZW51bSB7IGtMZWZ0U3RyaW5nLCBrUmlnaHRTdHJpbmcgfTsK
CiAgICAgIGludAogICAgICBHZXRDdXJyZW50U3RyaW5nRnJvbUZyYWdtZW50KCBjb25zdCBuc1Jl
YWRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBlPiYgYUZyYWdtZW50ICkgY29uc3QKICAgICAgICB7CiAg
ICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8IFBSVWludDMyID4oYUZyYWdtZW50Lm1G
cmFnbWVudElkZW50aWZpZXIpICYgbUZyYWdtZW50SWRlbnRpZmllck1hc2spID8ga1JpZ2h0U3Ry
aW5nIDoga0xlZnRTdHJpbmc7CiAgICAgICAgfQoKICAgICAgaW50CiAgICAgIFNldExlZnRTdHJp
bmdJbkZyYWdtZW50KCBuc1JlYWRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBlPiYgYUZyYWdtZW50ICkg
Y29uc3QKICAgICAgICB7CiAgICAgICAgICBhRnJhZ21lbnQubUZyYWdtZW50SWRlbnRpZmllciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8IHZvaWQqID4ocmVpbnRlcnByZXRfY2FzdDwgUFJVaW50MzIgPihh
RnJhZ21lbnQubUZyYWdtZW50SWRlbnRpZmllcikgJiB+bUZyYWdtZW50SWRlbnRpZmllck1hc2sp
OwogICAgICAgICAgcmV0dXJuIGtMZWZ0U3RyaW5nOwogICAgICAgIH0KCiAgICAgIGludAogICAg
ICBTZXRSaWdodFN0cmluZ0luRnJhZ21lbnQoIG5zUmVhZGFibGVGcmFnbWVudDxjaGFyX3R5cGU+
JiBhRnJhZ21lbnQgKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIGFGcmFnbWVudC5tRnJhZ21l
bnRJZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2FzdDwgdm9pZCogPihyZWludGVycHJldF9jYXN0
PCBQUlVpbnQzMiA+KGFGcmFnbWVudC5tRnJhZ21lbnRJZGVudGlmaWVyKSB8IG1GcmFnbWVudElk
ZW50aWZpZXJNYXNrKTsKICAgICAgICAgIHJldHVybiBrUmlnaHRTdHJpbmc7CiAgICAgICAgfQoK
ICAgIHB1YmxpYzoKICAgICAgbnNEZXBlbmRlbnRDQ29uY2F0ZW5hdGlvbiggY29uc3Qgc3RyaW5n
X3R5cGUmIGFMZWZ0U3RyaW5nLCBjb25zdCBzdHJpbmdfdHlwZSYgYVJpZ2h0U3RyaW5nLCBQUlVp
bnQzMiBhTWFzayA9IDEgKQogICAgICAgICAgOiBtRnJhZ21lbnRJZGVudGlmaWVyTWFzayhhTWFz
aykKICAgICAgICB7CiAgICAgICAgICBtU3RyaW5nc1trTGVmdFN0cmluZ10gPSAmYUxlZnRTdHJp
bmc7CiAgICAgICAgICBtU3RyaW5nc1trUmlnaHRTdHJpbmddID0gJmFSaWdodFN0cmluZzsKICAg
ICAgICB9CgogICAgICBuc0RlcGVuZGVudENDb25jYXRlbmF0aW9uKCBjb25zdCBzZWxmX3R5cGUm
IGFMZWZ0U3RyaW5nLCBjb25zdCBzdHJpbmdfdHlwZSYgYVJpZ2h0U3RyaW5nICkKICAgICAgICAg
IDogbUZyYWdtZW50SWRlbnRpZmllck1hc2soYUxlZnRTdHJpbmcubUZyYWdtZW50SWRlbnRpZmll
ck1hc2s8PDEpCiAgICAgICAgewogICAgICAgICAgbVN0cmluZ3Nba0xlZnRTdHJpbmddID0gJmFM
ZWZ0U3RyaW5nOwogICAgICAgICAgbVN0cmluZ3Nba1JpZ2h0U3RyaW5nXSA9ICZhUmlnaHRTdHJp
bmc7CiAgICAgICAgfQoKCgoKICAgIHByaXZhdGU6CgogICAgICB2b2lkIG9wZXJhdG9yPSggY29u
c3Qgc2VsZl90eXBlJiApOwoKICAgIHB1YmxpYzoKCiAgICAgIHZpcnR1YWwgUFJVaW50MzIgTGVu
Z3RoKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgUFJCb29sIElzRGVwZW5kZW50T24oIGNvbnN0IHN0
cmluZ190eXBlJiApIGNvbnN0OwoKCgoKICAgICAgUFJVaW50MzIgR2V0RnJhZ21lbnRJZGVudGlm
aWVyTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1GcmFnbWVudElkZW50aWZpZXJNYXNrOyB9CgogICAg
cHJpdmF0ZToKICAgICAgdm9pZCBvcGVyYXRvcisoIGNvbnN0IHNlbGZfdHlwZSYgKTsKCgoKICAg
IHByaXZhdGU6CiAgICAgIGNvbnN0IHN0cmluZ190eXBlKiBtU3RyaW5nc1syXTsKICAgICAgUFJV
aW50MzIgbUZyYWdtZW50SWRlbnRpZmllck1hc2s7CiAgfTsKIyAyMjQgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0RlcGVuZGVudENvbmNhdGVuYXRpb24uaCIKaW5saW5lCmNvbnN0IG5zRGVw
ZW5kZW50Q29uY2F0ZW5hdGlvbgpvcGVyYXRvcisoIGNvbnN0IG5zRGVwZW5kZW50Q29uY2F0ZW5h
dGlvbiYgbGhzLCBjb25zdCBuc0FTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIG5zRGVwZW5k
ZW50Q29uY2F0ZW5hdGlvbihsaHMsIHJocywgbGhzLkdldEZyYWdtZW50SWRlbnRpZmllck1hc2so
KTw8MSk7CiAgfQoKaW5saW5lCmNvbnN0IG5zRGVwZW5kZW50Q0NvbmNhdGVuYXRpb24Kb3BlcmF0
b3IrKCBjb25zdCBuc0RlcGVuZGVudENDb25jYXRlbmF0aW9uJiBsaHMsIGNvbnN0IG5zQUNTdHJp
bmcmIHJocyApCiAgewogICAgcmV0dXJuIG5zRGVwZW5kZW50Q0NvbmNhdGVuYXRpb24obGhzLCBy
aHMsIGxocy5HZXRGcmFnbWVudElkZW50aWZpZXJNYXNrKCk8PDEpOwogIH0KCmlubGluZQpjb25z
dCBuc0RlcGVuZGVudENvbmNhdGVuYXRpb24Kb3BlcmF0b3IrKCBjb25zdCBuc0FTdHJpbmcmIGxo
cywgY29uc3QgbnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBuc0RlcGVuZGVudENvbmNh
dGVuYXRpb24obGhzLCByaHMpOwogIH0KCmlubGluZQpjb25zdCBuc0RlcGVuZGVudENDb25jYXRl
bmF0aW9uCm9wZXJhdG9yKyggY29uc3QgbnNBQ1N0cmluZyYgbGhzLCBjb25zdCBuc0FDU3RyaW5n
JiByaHMgKQogIHsKICAgIHJldHVybiBuc0RlcGVuZGVudENDb25jYXRlbmF0aW9uKGxocywgcmhz
KTsKICB9CiMgODExICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBU3RyaW5nLmgiIDIKIyAz
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVJlYWRhYmxlU3RyaW5nLmgiIDIKCgp0eXBl
ZGVmIGNvbnN0IG5zQVN0cmluZyBuc0FSZWFkYWJsZVN0cmluZzsKdHlwZWRlZiBjb25zdCBuc0FD
U3RyaW5nIG5zQVJlYWRhYmxlQ1N0cmluZzsKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0xpdGVyYWxTdHJpbmcuaCIgMQojIDMyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNM
aXRlcmFsU3RyaW5nLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVwZW5kZW50
U3RyaW5nLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVwZW5kZW50U3Ry
aW5nLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQUZsYXRTdHJpbmcuaCIgMQoj
IDMzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBRmxhdFN0cmluZy5oIgpjbGFzcyBuc0FG
bGF0U3RyaW5nCiAgICA6IHB1YmxpYyBuc0FTdHJpbmcKICB7CiAgICBwdWJsaWM6CgogICAgICB2
aXJ0dWFsIGNvbnN0IFBSVW5pY2hhciogZ2V0KCkgY29uc3Q7CiAgICAgIFBSVW5pY2hhciBvcGVy
YXRvcltdKCBQUlVpbnQzMiBpICkgY29uc3QgeyByZXR1cm4gZ2V0KClbIGkgXTsgfQogICAgICBQ
UlVuaWNoYXIgQ2hhckF0KCBQUlVpbnQzMiApIGNvbnN0OwoKICAgICAgdmlydHVhbCBQUlVpbnQz
MiBMZW5ndGgoKSBjb25zdDsKCgogICAgcHVibGljOgogICAgICB2aXJ0dWFsIGNvbnN0IFBSVW5p
Y2hhciogR2V0UmVhZGFibGVGcmFnbWVudCggbnNSZWFkYWJsZUZyYWdtZW50PFBSVW5pY2hhcj4m
LCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSBjb25zdDsKICAgICAgdmlydHVhbCBQUlVu
aWNoYXIqIEdldFdyaXRhYmxlRnJhZ21lbnQoIG5zV3JpdGFibGVGcmFnbWVudDxQUlVuaWNoYXI+
JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICk7CiAgfTsKCmNsYXNzIG5zQUZsYXRDU3Ry
aW5nCiAgICA6IHB1YmxpYyBuc0FDU3RyaW5nCiAgewogICAgcHVibGljOgoKICAgICAgdmlydHVh
bCBjb25zdCBjaGFyKiBnZXQoKSBjb25zdDsKICAgICAgY2hhciBvcGVyYXRvcltdKCBQUlVpbnQz
MiBpICkgY29uc3QgeyByZXR1cm4gZ2V0KClbIGkgXTsgfQogICAgICBjaGFyIENoYXJBdCggUFJV
aW50MzIgKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3Q7CgoK
ICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBHZXRSZWFkYWJsZUZyYWdtZW50
KCBuc1JlYWRhYmxlRnJhZ21lbnQ8Y2hhcj4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIg
KSBjb25zdDsKICAgICAgdmlydHVhbCBjaGFyKiBHZXRXcml0YWJsZUZyYWdtZW50KCBuc1dyaXRh
YmxlRnJhZ21lbnQ8Y2hhcj4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKTsKICB9OwoK
aW5saW5lClBSVW5pY2hhcgpuc0FGbGF0U3RyaW5nOjpDaGFyQXQoIFBSVWludDMyIGkgKSBjb25z
dAogIHsKICAgIHt9OwogICAgcmV0dXJuIG9wZXJhdG9yW10oaSk7CiAgfQoKaW5saW5lCmNoYXIK
bnNBRmxhdENTdHJpbmc6OkNoYXJBdCggUFJVaW50MzIgaSApIGNvbnN0CiAgewogICAge307CiAg
ICByZXR1cm4gb3BlcmF0b3JbXShpKTsKICB9CiMgMjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0RlcGVuZGVudFN0cmluZy5oIiAyCiMgNDUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0RlcGVuZGVudFN0cmluZy5oIgpjbGFzcyBuc0RlcGVuZGVudFN0cmluZwogICAgICA6IHB1Ymxp
YyBuc0FGbGF0U3RyaW5nCiAgewogICAgcHVibGljOgogICAgICB2b2lkCiAgICAgIFJlYmluZCgg
Y29uc3QgUFJVbmljaGFyKiBhUHRyICkKICAgICAgICB7CiAgICAgICAgICBtSGFuZGxlLkRhdGFT
dGFydChhUHRyKTsKICAgICAgICAgIG1IYW5kbGUuRGF0YUVuZChhUHRyID8gKGFQdHIrbnNDaGFy
VHJhaXRzPFBSVW5pY2hhcj46Omxlbmd0aChhUHRyKSkgOiAwKTsKICAgICAgICB9CgogICAgICB2
b2lkCiAgICAgIFJlYmluZCggY29uc3QgUFJVbmljaGFyKiBhU3RhcnRQdHIsIGNvbnN0IFBSVW5p
Y2hhciogYUVuZFB0ciApCiAgICAgICAgewogICAgICAgICAgbUhhbmRsZS5EYXRhU3RhcnQoYVN0
YXJ0UHRyKTsKICAgICAgICAgIG1IYW5kbGUuRGF0YUVuZChhRW5kUHRyKTsKICAgICAgICB9Cgog
ICAgICB2b2lkCiAgICAgIFJlYmluZCggY29uc3QgUFJVbmljaGFyKiBhUHRyLCBQUlVpbnQzMiBh
TGVuZ3RoICkKICAgICAgICB7CiAgICAgICAgICBpZiAoIGFMZW5ndGggPT0gUFJVaW50MzIoLTEp
ICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBSZWJpbmQoYVB0cik7CiAgICAgICAgICAg
IH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgUmViaW5kKGFQdHIsIGFQdHIrYUxlbmd0aCk7
CiAgICAgICAgfQoKICAgICAgbnNEZXBlbmRlbnRTdHJpbmcoIGNvbnN0IFBSVW5pY2hhciogYVN0
YXJ0UHRyLCBjb25zdCBQUlVuaWNoYXIqIGFFbmRQdHIgKSB7IFJlYmluZChhU3RhcnRQdHIsIGFF
bmRQdHIpOyB9CiAgICAgIG5zRGVwZW5kZW50U3RyaW5nKCBjb25zdCBQUlVuaWNoYXIqIGFQdHIs
IFBSVWludDMyIGFMZW5ndGggKSB7IFJlYmluZChhUHRyLCBhTGVuZ3RoKTsgfQogICAgICBleHBs
aWNpdCBuc0RlcGVuZGVudFN0cmluZyggY29uc3QgUFJVbmljaGFyKiBhUHRyICkgeyBSZWJpbmQo
YVB0cik7IH0KCgoKCiAgICBwcml2YXRlOgoKICAgICAgdm9pZCBvcGVyYXRvcj0oIGNvbnN0IG5z
RGVwZW5kZW50U3RyaW5nJiApOwoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25zdCBuc0J1
ZmZlckhhbmRsZTxQUlVuaWNoYXI+KiBHZXRGbGF0QnVmZmVySGFuZGxlKCkgY29uc3QgeyByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDwgY29uc3QgbnNCdWZmZXJIYW5kbGU8UFJVbmljaGFyPiogPigm
bUhhbmRsZSk7IH0KICAgICAgdmlydHVhbCBjb25zdCBuc0J1ZmZlckhhbmRsZTxQUlVuaWNoYXI+
KiBHZXRCdWZmZXJIYW5kbGUoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PCBjb25z
dCBuc0J1ZmZlckhhbmRsZTxQUlVuaWNoYXI+KiA+KCZtSGFuZGxlKTsgfQoKICAgIHByaXZhdGU6
CiAgICAgIG5zQ29uc3RCdWZmZXJIYW5kbGU8UFJVbmljaGFyPiBtSGFuZGxlOwogIH07CgoKCmNs
YXNzIG5zRGVwZW5kZW50Q1N0cmluZwogICAgICA6IHB1YmxpYyBuc0FGbGF0Q1N0cmluZwogIHsK
ICAgIHB1YmxpYzoKICAgICAgdm9pZAogICAgICBSZWJpbmQoIGNvbnN0IGNoYXIqIGFQdHIgKQog
ICAgICAgIHsKICAgICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFQdHIpOwogICAgICAgICAgbUhh
bmRsZS5EYXRhRW5kKGFQdHIgPyAoYVB0cituc0NoYXJUcmFpdHM8Y2hhcj46Omxlbmd0aChhUHRy
KSkgOiAwKTsKICAgICAgICB9CgogICAgICB2b2lkCiAgICAgIFJlYmluZCggY29uc3QgY2hhciog
YVN0YXJ0UHRyLCBjb25zdCBjaGFyKiBhRW5kUHRyICkKICAgICAgICB7CiAgICAgICAgICBtSGFu
ZGxlLkRhdGFTdGFydChhU3RhcnRQdHIpOwogICAgICAgICAgbUhhbmRsZS5EYXRhRW5kKGFFbmRQ
dHIpOwogICAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgUmViaW5kKCBjb25zdCBjaGFyKiBhUHRy
LCBQUlVpbnQzMiBhTGVuZ3RoICkKICAgICAgICB7CiAgICAgICAgICBpZiAoIGFMZW5ndGggPT0g
UFJVaW50MzIoLTEpICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBSZWJpbmQoYVB0cik7
CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgUmViaW5kKGFQdHIsIGFQ
dHIrYUxlbmd0aCk7CiAgICAgICAgfQoKICAgICAgbnNEZXBlbmRlbnRDU3RyaW5nKCBjb25zdCBj
aGFyKiBhU3RhcnRQdHIsIGNvbnN0IGNoYXIqIGFFbmRQdHIgKSB7IFJlYmluZChhU3RhcnRQdHIs
IGFFbmRQdHIpOyB9CiAgICAgIG5zRGVwZW5kZW50Q1N0cmluZyggY29uc3QgY2hhciogYVB0ciwg
UFJVaW50MzIgYUxlbmd0aCApIHsgUmViaW5kKGFQdHIsIGFMZW5ndGgpOyB9CiAgICAgIGV4cGxp
Y2l0IG5zRGVwZW5kZW50Q1N0cmluZyggY29uc3QgY2hhciogYVB0ciApIHsgUmViaW5kKGFQdHIp
OyB9CgoKCgogICAgcHJpdmF0ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBuc0RlcGVu
ZGVudENTdHJpbmcmICk7CgogICAgcHVibGljOgogICAgICB2aXJ0dWFsIGNvbnN0IG5zQnVmZmVy
SGFuZGxlPGNoYXI+KiBHZXRGbGF0QnVmZmVySGFuZGxlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDwgY29uc3QgbnNCdWZmZXJIYW5kbGU8Y2hhcj4qID4oJm1IYW5kbGUpOyB9CiAg
ICAgIHZpcnR1YWwgY29uc3QgbnNCdWZmZXJIYW5kbGU8Y2hhcj4qIEdldEJ1ZmZlckhhbmRsZSgp
IGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IGNvbnN0IG5zQnVmZmVySGFuZGxlPGNo
YXI+KiA+KCZtSGFuZGxlKTsgfQoKICAgIHByaXZhdGU6CiAgICAgIG5zQ29uc3RCdWZmZXJIYW5k
bGU8Y2hhcj4gbUhhbmRsZTsKICB9OwojIDMzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNM
aXRlcmFsU3RyaW5nLmgiIDIKIyAzOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVJlYWRh
YmxlU3RyaW5nLmgiIDIKCgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNEZXBlbmRl
bnRTdWJzdHJpbmcuaCIgMQojIDQxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNEZXBlbmRl
bnRTdWJzdHJpbmcuaCIKY2xhc3MgbnNEZXBlbmRlbnRTdWJzdHJpbmcKICAgICAgOiBwdWJsaWMg
bnNBUHJvbWlzZVN0cmluZwojIDUxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNEZXBlbmRl
bnRTdWJzdHJpbmcuaCIKICB7CiAgICB0eXBlZGVmIG5zQVN0cmluZyBzdHJpbmdfdHlwZTsKICAg
IHR5cGVkZWYgc3RyaW5nX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwoKICAg
IHByb3RlY3RlZDoKICAgICAgdmlydHVhbCBjb25zdCBQUlVuaWNoYXIqIEdldFJlYWRhYmxlRnJh
Z21lbnQoIG5zUmVhZGFibGVGcmFnbWVudDxQUlVuaWNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3Qs
IFBSVWludDMyICkgY29uc3Q7CiAgICAgIHZpcnR1YWwgUFJVbmljaGFyKiBHZXRXcml0YWJsZUZy
YWdtZW50KCBuc1dyaXRhYmxlRnJhZ21lbnQ8UFJVbmljaGFyPiYsIG5zRnJhZ21lbnRSZXF1ZXN0
LCBQUlVpbnQzMiApIHsgcmV0dXJuIDA7IH0KCiAgICBwdWJsaWM6CiAgICAgIG5zRGVwZW5kZW50
U3Vic3RyaW5nKCBjb25zdCBzdHJpbmdfdHlwZSYgYVN0cmluZywgUFJVaW50MzIgYVN0YXJ0UG9z
LCBQUlVpbnQzMiBhTGVuZ3RoICkKICAgICAgICAgIDogbVN0cmluZyhhU3RyaW5nKSwKICAgICAg
ICAgICAgbVN0YXJ0UG9zKCBOU19NSU4oYVN0YXJ0UG9zLCBhU3RyaW5nLkxlbmd0aCgpKSApLAog
ICAgICAgICAgICBtTGVuZ3RoKCBOU19NSU4oYUxlbmd0aCwgYVN0cmluZy5MZW5ndGgoKS1tU3Rh
cnRQb3MpICkKICAgICAgICB7CgogICAgICAgIH0KCiAgICAgIG5zRGVwZW5kZW50U3Vic3RyaW5n
KCBjb25zdCBjb25zdF9pdGVyYXRvciYgYVN0YXJ0LCBjb25zdCBjb25zdF9pdGVyYXRvciYgYUVu
ZCApCiAgICAgICAgICA6IG1TdHJpbmcoYVN0YXJ0LnN0cmluZygpKQogICAgICAgIHsKICAgICAg
ICAgIGNvbnN0X2l0ZXJhdG9yIHplcm9Qb2ludDsKICAgICAgICAgIG1TdHJpbmcuQmVnaW5SZWFk
aW5nKHplcm9Qb2ludCk7CiAgICAgICAgICBtU3RhcnRQb3MgPSBEaXN0YW5jZSh6ZXJvUG9pbnQs
IGFTdGFydCk7CiAgICAgICAgICBtTGVuZ3RoID0gRGlzdGFuY2UoYVN0YXJ0LCBhRW5kKTsKICAg
ICAgICB9CgoKCgogICAgcHJpdmF0ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBuc0Rl
cGVuZGVudFN1YnN0cmluZyYgKTsKCiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgUFJVaW50MzIg
TGVuZ3RoKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgUFJCb29sIElzRGVwZW5kZW50T24oIGNvbnN0
IHN0cmluZ190eXBlJiBhU3RyaW5nICkgY29uc3QgeyByZXR1cm4gbVN0cmluZy5Jc0RlcGVuZGVu
dE9uKGFTdHJpbmcpOyB9CgogICAgcHJpdmF0ZToKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmIG1T
dHJpbmc7CiAgICAgIFBSVWludDMyIG1TdGFydFBvczsKICAgICAgUFJVaW50MzIgbUxlbmd0aDsK
ICB9OwoKY2xhc3MgbnNEZXBlbmRlbnRDU3Vic3RyaW5nCiAgICAgIDogcHVibGljIG5zQVByb21p
c2VDU3RyaW5nCiMgMTA0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNEZXBlbmRlbnRTdWJz
dHJpbmcuaCIKICB7CiAgICB0eXBlZGVmIG5zQUNTdHJpbmcgc3RyaW5nX3R5cGU7CiAgICB0eXBl
ZGVmIHN0cmluZ190eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgICBwcm90
ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhciogR2V0UmVhZGFibGVGcmFnbWVudCggbnNS
ZWFkYWJsZUZyYWdtZW50PGNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29u
c3Q7CiAgICAgIHZpcnR1YWwgY2hhciogR2V0V3JpdGFibGVGcmFnbWVudCggbnNXcml0YWJsZUZy
YWdtZW50PGNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgeyByZXR1cm4gMDsg
fQoKICAgIHB1YmxpYzoKICAgICAgbnNEZXBlbmRlbnRDU3Vic3RyaW5nKCBjb25zdCBzdHJpbmdf
dHlwZSYgYVN0cmluZywgUFJVaW50MzIgYVN0YXJ0UG9zLCBQUlVpbnQzMiBhTGVuZ3RoICkKICAg
ICAgICAgIDogbVN0cmluZyhhU3RyaW5nKSwKICAgICAgICAgICAgbVN0YXJ0UG9zKCBOU19NSU4o
YVN0YXJ0UG9zLCBhU3RyaW5nLkxlbmd0aCgpKSApLAogICAgICAgICAgICBtTGVuZ3RoKCBOU19N
SU4oYUxlbmd0aCwgYVN0cmluZy5MZW5ndGgoKS1tU3RhcnRQb3MpICkKICAgICAgICB7CgogICAg
ICAgIH0KCiAgICAgIG5zRGVwZW5kZW50Q1N1YnN0cmluZyggY29uc3QgY29uc3RfaXRlcmF0b3Im
IGFTdGFydCwgY29uc3QgY29uc3RfaXRlcmF0b3ImIGFFbmQgKQogICAgICAgICAgOiBtU3RyaW5n
KGFTdGFydC5zdHJpbmcoKSkKICAgICAgICB7CiAgICAgICAgICBjb25zdF9pdGVyYXRvciB6ZXJv
UG9pbnQ7CiAgICAgICAgICBtU3RyaW5nLkJlZ2luUmVhZGluZyh6ZXJvUG9pbnQpOwogICAgICAg
ICAgbVN0YXJ0UG9zID0gRGlzdGFuY2UoemVyb1BvaW50LCBhU3RhcnQpOwogICAgICAgICAgbUxl
bmd0aCA9IERpc3RhbmNlKGFTdGFydCwgYUVuZCk7CiAgICAgICAgfQoKCgoKICAgIHByaXZhdGU6
CgogICAgICB2b2lkIG9wZXJhdG9yPSggY29uc3QgbnNEZXBlbmRlbnRDU3Vic3RyaW5nJiApOwoK
ICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBQUlVpbnQzMiBMZW5ndGgoKSBjb25zdDsKICAgICAg
dmlydHVhbCBQUkJvb2wgSXNEZXBlbmRlbnRPbiggY29uc3Qgc3RyaW5nX3R5cGUmIGFTdHJpbmcg
KSBjb25zdCB7IHJldHVybiBtU3RyaW5nLklzRGVwZW5kZW50T24oYVN0cmluZyk7IH0KCiAgICBw
cml2YXRlOgogICAgICBjb25zdCBzdHJpbmdfdHlwZSYgbVN0cmluZzsKICAgICAgUFJVaW50MzIg
bVN0YXJ0UG9zOwogICAgICBQUlVpbnQzMiBtTGVuZ3RoOwogIH07CgoKCgoKCgppbmxpbmUKY29u
c3QgbnNEZXBlbmRlbnRDU3Vic3RyaW5nClN1YnN0cmluZyggY29uc3QgbnNBQ1N0cmluZyYgYVN0
cmluZywgUFJVaW50MzIgYVN0YXJ0UG9zLCBQUlVpbnQzMiBhU3Vic3RyaW5nTGVuZ3RoICkKICB7
CiAgICByZXR1cm4gbnNEZXBlbmRlbnRDU3Vic3RyaW5nKGFTdHJpbmcsIGFTdGFydFBvcywgYVN1
YnN0cmluZ0xlbmd0aCk7CiAgfQoKaW5saW5lCmNvbnN0IG5zRGVwZW5kZW50U3Vic3RyaW5nClN1
YnN0cmluZyggY29uc3QgbnNBU3RyaW5nJiBhU3RyaW5nLCBQUlVpbnQzMiBhU3RhcnRQb3MsIFBS
VWludDMyIGFTdWJzdHJpbmdMZW5ndGggKQogIHsKICAgIHJldHVybiBuc0RlcGVuZGVudFN1YnN0
cmluZyhhU3RyaW5nLCBhU3RhcnRQb3MsIGFTdWJzdHJpbmdMZW5ndGgpOwogIH0KCmlubGluZQpj
b25zdCBuc0RlcGVuZGVudENTdWJzdHJpbmcKU3Vic3RyaW5nKCBjb25zdCBuc1JlYWRpbmdJdGVy
YXRvcjxjaGFyPiYgYVN0YXJ0LCBjb25zdCBuc1JlYWRpbmdJdGVyYXRvcjxjaGFyPiYgYUVuZCAp
CiAgewogICAgcmV0dXJuIG5zRGVwZW5kZW50Q1N1YnN0cmluZyhhU3RhcnQsIGFFbmQpOwogIH0K
CmlubGluZQpjb25zdCBuc0RlcGVuZGVudFN1YnN0cmluZwpTdWJzdHJpbmcoIGNvbnN0IG5zUmVh
ZGluZ0l0ZXJhdG9yPFBSVW5pY2hhcj4mIGFTdGFydCwgY29uc3QgbnNSZWFkaW5nSXRlcmF0b3I8
UFJVbmljaGFyPiYgYUVuZCApCiAgewogICAgcmV0dXJuIG5zRGVwZW5kZW50U3Vic3RyaW5nKGFT
dGFydCwgYUVuZCk7CiAgfQojIDQyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBUmVhZGFi
bGVTdHJpbmcuaCIgMgoKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Byb21pc2VG
bGF0U3RyaW5nLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUHJvbWlzZUZs
YXRTdHJpbmcuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTaGFyYWJsZVN0cmlu
Zy5oIiAxCiMgMzUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1NoYXJhYmxlU3RyaW5nLmgi
CiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVmZmVySGFuZGxlVXRpbHMuaCIgMQoj
IDM2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNCdWZmZXJIYW5kbGVVdGlscy5oIgojIDEg
Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9uZXcuaCIgMSAzCiMg
MzMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9uZXcuaCIgMwoj
IDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9iYWNrd2FyZF93
YXJuaW5nLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYmFj
a3dhcmQvbmV3LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9u
ZXciIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvbmV3IiAzCiMg
MSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2NzdGRkZWYiIDEgMwojIDMxICIv
dXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvY3N0ZGRlZiIgMwojIDEgIi91c3IvbG9j
YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDM4ICIv
dXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAzCiMg
MSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OnB0
cmRpZmZfdDsKICB1c2luZyA6OnNpemVfdDsKfQojIDMyICIvdXNyL2xvY2FsL2djYy0zLjAvaW5j
bHVkZS9nKystdjMvY3N0ZGRlZiIgMiAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRl
L2crKy12My9uZXciIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9l
eGNlcHRpb24iIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvZXhj
ZXB0aW9uIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKICBjbGFzcyBleGNlcHRp
b24KICB7CiAgcHVibGljOgogICAgZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwg
fmV4Y2VwdGlvbigpIHRocm93KCk7CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25z
dCB0aHJvdygpOwogIH07CgogIGNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9u
CiAgewogIHB1YmxpYzoKICAgIGJhZF9leGNlcHRpb24oKSB0aHJvdygpIHsgfQogICAgdmlydHVh
bCB+YmFkX2V4Y2VwdGlvbigpIHRocm93KCk7CiAgfTsKCiAgdHlwZWRlZiB2b2lkICgqdGVybWlu
YXRlX2hhbmRsZXIpICgpOwogIHR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7
CgogIHRlcm1pbmF0ZV9oYW5kbGVyIHNldF90ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRo
cm93KCk7CiAgdm9pZCB0ZXJtaW5hdGUoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7
CgogIHVuZXhwZWN0ZWRfaGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIp
IHRocm93KCk7CiAgdm9pZCB1bmV4cGVjdGVkKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5f
XykpOwoKICBib29sIHVuY2F1Z2h0X2V4Y2VwdGlvbigpIHRocm93KCk7Cn0KCn0KIyAzNiAiL3Vz
ci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL25ldyIgMiAzCgpleHRlcm4gIkMrKyIgewoK
bmFtZXNwYWNlIHN0ZAp7CiAgY2xhc3MgYmFkX2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbgogIHsK
ICBwdWJsaWM6CiAgICBiYWRfYWxsb2MoKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+YmFkX2Fs
bG9jKCkgdGhyb3coKTsKICB9OwoKICBzdHJ1Y3Qgbm90aHJvd190IHsgfTsKICBleHRlcm4gY29u
c3Qgbm90aHJvd190IG5vdGhyb3c7CiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CiAg
bmV3X2hhbmRsZXIgc2V0X25ld19oYW5kbGVyKG5ld19oYW5kbGVyKTsKfQoKCnZvaWQgKm9wZXJh
dG9yIG5ldyhzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCAqb3BlcmF0
b3IgbmV3W10oc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgb3BlcmF0
b3IgZGVsZXRlKHZvaWQgKikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkICop
IHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Ro
cm93X3QmKSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qg
c3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICosIGNv
bnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lk
ICosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKCgppbmxpbmUgdm9pZCAqb3BlcmF0
b3IgbmV3KHN0ZDo6c2l6ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsg
fQppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIHZvaWQgKnBsYWNlKSB0
aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9Cn0KIyAzNSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1
ZGUvZysrLXYzL2JhY2t3YXJkL25ldy5oIiAyIDMKCnVzaW5nIHN0ZDo6YmFkX2FsbG9jOwp1c2lu
ZyBzdGQ6Om5vdGhyb3dfdDsKdXNpbmcgc3RkOjpub3Rocm93Owp1c2luZyBzdGQ6Om5ld19oYW5k
bGVyOwp1c2luZyBzdGQ6OnNldF9uZXdfaGFuZGxlcjsKIyAzNyAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zQnVmZmVySGFuZGxlVXRpbHMuaCIgMgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+
CmNsYXNzIG5zQXV0b0J1ZmZlckhhbmRsZQogIHsKICAgIHB1YmxpYzoKICAgICAgbnNBdXRvQnVm
ZmVySGFuZGxlKCkgOiBtSGFuZGxlKDApIHsgfQoKICAgICAgbnNBdXRvQnVmZmVySGFuZGxlKCBj
b25zdCBuc0F1dG9CdWZmZXJIYW5kbGU8Q2hhclQ+JiBhT3RoZXIgKQogICAgICAgICAgOiBtSGFu
ZGxlKGFPdGhlci5nZXQoKSkKICAgICAgICB7CiAgICAgICAgICBpZiAoIG1IYW5kbGUgKQogICAg
ICAgICAgICBtSGFuZGxlLT5BY3F1aXJlUmVmZXJlbmNlKCk7CiAgICAgICAgfQoKICAgICAgZXhw
bGljaXQKICAgICAgbnNBdXRvQnVmZmVySGFuZGxlKCBjb25zdCBuc1NoYXJlZEJ1ZmZlckhhbmRs
ZTxDaGFyVD4qIGFIYW5kbGUgKQogICAgICAgICAgOiBtSGFuZGxlKCBjb25zdF9jYXN0PCBuc1No
YXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4qID4oYUhhbmRsZSkgKQogICAgICAgIHsKICAgICAgICAg
IGlmICggbUhhbmRsZSApCiAgICAgICAgICAgIG1IYW5kbGUtPkFjcXVpcmVSZWZlcmVuY2UoKTsK
ICAgICAgICB9CgogICAgIH5uc0F1dG9CdWZmZXJIYW5kbGUoKQogICAgICAgIHsKICAgICAgICAg
IGlmICggbUhhbmRsZSApCiAgICAgICAgICAgIG1IYW5kbGUtPlJlbGVhc2VSZWZlcmVuY2UoKTsK
ICAgICAgICB9CgogICAgICBuc0F1dG9CdWZmZXJIYW5kbGU8Q2hhclQ+JgogICAgICBvcGVyYXRv
cj0oIGNvbnN0IG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPiogcmhzICkKICAgICAgICB7CiAg
ICAgICAgICBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4qIG9sZF9oYW5kbGUgPSBtSGFuZGxl
OwogICAgICAgICAgaWYgKCAobUhhbmRsZSA9IGNvbnN0X2Nhc3Q8IG5zU2hhcmVkQnVmZmVySGFu
ZGxlPENoYXJUPiogPihyaHMpKSApCiAgICAgICAgICAgIG1IYW5kbGUtPkFjcXVpcmVSZWZlcmVu
Y2UoKTsKICAgICAgICAgIGlmICggb2xkX2hhbmRsZSApCiAgICAgICAgICAgIG9sZF9oYW5kbGUt
PlJlbGVhc2VSZWZlcmVuY2UoKTsKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9Cgog
ICAgICBuc0F1dG9CdWZmZXJIYW5kbGU8Q2hhclQ+JgogICAgICBvcGVyYXRvcj0oIGNvbnN0IG5z
QXV0b0J1ZmZlckhhbmRsZTxDaGFyVD4mIHJocyApCiAgICAgICAgewogICAgICAgICAgcmV0dXJu
IG9wZXJhdG9yPShyaHMuZ2V0KCkpOwogICAgICAgIH0KCiAgICAgIG5zU2hhcmVkQnVmZmVySGFu
ZGxlPENoYXJUPioKICAgICAgZ2V0KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4g
bUhhbmRsZTsKICAgICAgICB9CgogICAgICBvcGVyYXRvciBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxD
aGFyVD4qKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gZ2V0KCk7CiAgICAgICAg
fQoKICAgICAgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KgogICAgICBvcGVyYXRvci0+KCkg
Y29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gZ2V0KCk7CiAgICAgICAgfQoKICAgIHBy
aXZhdGU6CiAgICAgIG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPiogbUhhbmRsZTsKICB9OwoK
CnRlbXBsYXRlIDxjbGFzcyBIYW5kbGVULCBjbGFzcyBDaGFyVD4KaW5saW5lCnNpemVfdApOU19B
bGlnbmVkSGFuZGxlU2l6ZSggY29uc3QgSGFuZGxlVCosIGNvbnN0IENoYXJUKiApCiAgewoKICAg
IHJldHVybiAoKHNpemVvZihIYW5kbGVUKSArIHNpemVvZihDaGFyVCkgLSAxKSAvIHNpemVvZihD
aGFyVCkpICogc2l6ZW9mKENoYXJUKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSGFuZGxlVCwgY2xh
c3MgQ2hhclQ+CmlubGluZQpjb25zdCBDaGFyVCoKTlNfRGF0YUFmdGVySGFuZGxlKCBjb25zdCBI
YW5kbGVUKiBhSGFuZGxlUHRyLCBjb25zdCBDaGFyVCogYUR1bW15Q2hhclRQdHIgKQogIHsKICAg
IHR5cGVkZWYgY29uc3QgQ2hhclQqIENoYXJUX3B0cjsKICAgIHJldHVybiBDaGFyVF9wdHIoc3Rh
dGljX2Nhc3Q8IGNvbnN0IHVuc2lnbmVkIGNoYXIqID4oYUhhbmRsZVB0cikgKyBOU19BbGlnbmVk
SGFuZGxlU2l6ZShhSGFuZGxlUHRyLCBhRHVtbXlDaGFyVFB0cikpOwogIH0KCnRlbXBsYXRlIDxj
bGFzcyBIYW5kbGVULCBjbGFzcyBDaGFyVD4KaW5saW5lCkNoYXJUKgpOU19EYXRhQWZ0ZXJIYW5k
bGUoIEhhbmRsZVQqIGFIYW5kbGVQdHIsIGNvbnN0IENoYXJUKiBhRHVtbXlDaGFyVFB0ciApCiAg
ewogICAgdHlwZWRlZiBDaGFyVCogQ2hhclRfcHRyOwogICAgcmV0dXJuIENoYXJUX3B0cihzdGF0
aWNfY2FzdDwgdW5zaWduZWQgY2hhciogPihhSGFuZGxlUHRyKSArIE5TX0FsaWduZWRIYW5kbGVT
aXplKGFIYW5kbGVQdHIsIGFEdW1teUNoYXJUUHRyKSk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIEhh
bmRsZVQsIGNsYXNzIFN0cmluZ1Q+CkhhbmRsZVQqCk5TX0FsbG9jYXRlQ29udGlndW91c0hhbmRs
ZVdpdGhEYXRhKCBjb25zdCBIYW5kbGVUKiBhRHVtbXlIYW5kbGVQdHIsIFBSVWludDMyIGFBZGRp
dGlvbmFsQ2FwYWNpdHksIGNvbnN0IFN0cmluZ1QqIGFEYXRhU291cmNlICkKICB7CiAgICB0eXBl
ZGVmIHR5cGVuYW1lIFN0cmluZ1Q6OmNoYXJfdHlwZSBjaGFyX3R5cGU7CiAgICB0eXBlZGVmIGNo
YXJfdHlwZSogY2hhcl9wdHI7CgoKICAgIHNpemVfdCBoYW5kbGVfc2l6ZSA9IE5TX0FsaWduZWRI
YW5kbGVTaXplKGFEdW1teUhhbmRsZVB0ciwgY2hhcl9wdHIoMCkpOwoKCiAgICBzaXplX3QgZGF0
YV9sZW5ndGggPSBhRGF0YVNvdXJjZT8gYURhdGFTb3VyY2UtPkxlbmd0aCgpIDogMDsKICAgIHNp
emVfdCBidWZmZXJfbGVuZ3RoID0gZGF0YV9sZW5ndGggKyBhQWRkaXRpb25hbENhcGFjaXR5OwoK
CiAgICBzaXplX3QgYnVmZmVyX3NpemUgPSBidWZmZXJfbGVuZ3RoICogc2l6ZW9mKGNoYXJfdHlw
ZSk7CgoKICAgIEhhbmRsZVQqIHJlc3VsdCA9IDA7CiAgICB2b2lkKiBoYW5kbGVfcHRyID0gOjpv
cGVyYXRvciBuZXcoaGFuZGxlX3NpemUgKyBidWZmZXJfc2l6ZSk7CgogICAgaWYgKCBoYW5kbGVf
cHRyICkKICAgICAgewogICAgICAgIGNoYXJfcHRyIGRhdGFfc3RhcnRfcHRyID0gY2hhcl9wdHIo
c3RhdGljX2Nhc3Q8IHVuc2lnbmVkIGNoYXIqID4oaGFuZGxlX3B0cikgKyBoYW5kbGVfc2l6ZSk7
CiAgICAgICAgY2hhcl9wdHIgZGF0YV9lbmRfcHRyID0gZGF0YV9zdGFydF9wdHIgKyBkYXRhX2xl
bmd0aDsKICAgICAgICBjaGFyX3B0ciBidWZmZXJfZW5kX3B0ciA9IGRhdGFfc3RhcnRfcHRyICsg
YnVmZmVyX2xlbmd0aDsKCiAgICAgICAgY2hhcl9wdHIgdG9CZWdpbiA9IGRhdGFfc3RhcnRfcHRy
OwoKICAgICAgICBpZiAoIGRhdGFfbGVuZ3RoICkKICAgICAgICAgIHsKICAgICAgICAgICAgdHlw
ZW5hbWUgU3RyaW5nVDo6Y29uc3RfaXRlcmF0b3IgZnJvbUJlZ2luLCBmcm9tRW5kOwogICAgICAg
ICAgICBjb3B5X3N0cmluZyhhRGF0YVNvdXJjZS0+QmVnaW5SZWFkaW5nKGZyb21CZWdpbiksIGFE
YXRhU291cmNlLT5FbmRSZWFkaW5nKGZyb21FbmQpLCB0b0JlZ2luKTsKICAgICAgICAgIH0KCgog
ICAgICAgIGlmICggYUFkZGl0aW9uYWxDYXBhY2l0eSA+IDAgKQogICAgICAgICAgKnRvQmVnaW4g
PSBjaGFyX3R5cGUoMCk7CgogICAgICAgIHJlc3VsdCA9IG5ldyAoaGFuZGxlX3B0cikgSGFuZGxl
VChkYXRhX3N0YXJ0X3B0ciwgZGF0YV9lbmRfcHRyLCBkYXRhX3N0YXJ0X3B0ciwgYnVmZmVyX2Vu
ZF9wdHIsIDEpOwogICAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgSGFuZGxlVCwgY2xhc3MgU3RyaW5nVD4KaW5saW5lCkhhbmRsZVQqCk5TX0FsbG9jYXRlQ29u
dGlndW91c0hhbmRsZVdpdGhEYXRhKCBjb25zdCBIYW5kbGVUKiBhRHVtbXlIYW5kbGVQdHIsIGNv
bnN0IFN0cmluZ1QmIGFEYXRhU291cmNlLCBQUlVpbnQzMiBhQWRkaXRpb25hbENhcGFjaXR5ICkK
ICB7CiAgICByZXR1cm4gTlNfQWxsb2NhdGVDb250aWd1b3VzSGFuZGxlV2l0aERhdGEoYUR1bW15
SGFuZGxlUHRyLCBhQWRkaXRpb25hbENhcGFjaXR5LCAmYURhdGFTb3VyY2UpOwogIH0KIyAzNiAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU2hhcmFibGVTdHJpbmcuaCIgMgojIDQ0ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTaGFyYWJsZVN0cmluZy5oIgpjbGFzcyBuc1NoYXJhYmxl
U3RyaW5nCiAgICA6IHB1YmxpYyBuc0FGbGF0U3RyaW5nCiAgewogICAgcHVibGljOgogICAgICB0
eXBlZGVmIG5zU2hhcmFibGVTdHJpbmcgc2VsZl90eXBlOwogICAgICB0eXBlZGVmIFBSVW5pY2hh
ciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgbnNBU3RyaW5nIHN0cmluZ190eXBlOwoKICAgIHB1
YmxpYzoKICAgICAgbnNTaGFyYWJsZVN0cmluZygpIHsgfQogICAgICBuc1NoYXJhYmxlU3RyaW5n
KCBjb25zdCBzZWxmX3R5cGUmIGFPdGhlciApIDogbUJ1ZmZlcihhT3RoZXIubUJ1ZmZlcikgeyB9
CiAgICAgIGV4cGxpY2l0IG5zU2hhcmFibGVTdHJpbmcoIGNvbnN0IHN0cmluZ190eXBlJiBhUmVh
ZGFibGUgKSB7IGFzc2lnbihhUmVhZGFibGUpOyB9CiAgICAgIGV4cGxpY2l0IG5zU2hhcmFibGVT
dHJpbmcoIGNvbnN0IG5zU2hhcmVkQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4qIGFIYW5kbGUgKSA6
IG1CdWZmZXIoYUhhbmRsZSkgeyB9CgogICAgICBzZWxmX3R5cGUmCiAgICAgIG9wZXJhdG9yPSgg
Y29uc3Qgc3RyaW5nX3R5cGUmIGFSZWFkYWJsZSApCiAgICAgICAgewogICAgICAgICAgYXNzaWdu
KGFSZWFkYWJsZSk7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgIHByb3Rl
Y3RlZDoKICAgICAgdm9pZCBhc3NpZ24oIGNvbnN0IHN0cmluZ190eXBlJiApOwogICAgICB2aXJ0
dWFsIGNvbnN0IG5zU2hhcmVkQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4qIEdldFNoYXJlZEJ1ZmZl
ckhhbmRsZSgpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgIG5zQXV0b0J1ZmZlckhhbmRsZTxj
aGFyX3R5cGU+IG1CdWZmZXI7CiAgfTsKCgpjbGFzcyBuc1NoYXJhYmxlQ1N0cmluZwogICAgOiBw
dWJsaWMgbnNBRmxhdENTdHJpbmcKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgbnNTaGFy
YWJsZUNTdHJpbmcgc2VsZl90eXBlOwogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwogICAg
ICB0eXBlZGVmIG5zQUNTdHJpbmcgc3RyaW5nX3R5cGU7CgogICAgcHVibGljOgogICAgICBuc1No
YXJhYmxlQ1N0cmluZygpIHsgfQogICAgICBuc1NoYXJhYmxlQ1N0cmluZyggY29uc3Qgc2VsZl90
eXBlJiBhT3RoZXIgKSA6IG1CdWZmZXIoYU90aGVyLm1CdWZmZXIpIHsgfQogICAgICBleHBsaWNp
dCBuc1NoYXJhYmxlQ1N0cmluZyggY29uc3Qgc3RyaW5nX3R5cGUmIGFSZWFkYWJsZSApIHsgYXNz
aWduKGFSZWFkYWJsZSk7IH0KICAgICAgZXhwbGljaXQgbnNTaGFyYWJsZUNTdHJpbmcoIGNvbnN0
IG5zU2hhcmVkQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4qIGFIYW5kbGUgKSA6IG1CdWZmZXIoYUhh
bmRsZSkgeyB9CgogICAgICBzZWxmX3R5cGUmCiAgICAgIG9wZXJhdG9yPSggY29uc3Qgc3RyaW5n
X3R5cGUmIGFSZWFkYWJsZSApCiAgICAgICAgewogICAgICAgICAgYXNzaWduKGFSZWFkYWJsZSk7
CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAg
dm9pZCBhc3NpZ24oIGNvbnN0IHN0cmluZ190eXBlJiApOwogICAgICB2aXJ0dWFsIGNvbnN0IG5z
U2hhcmVkQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4qIEdldFNoYXJlZEJ1ZmZlckhhbmRsZSgpIGNv
bnN0OwoKICAgIHByaXZhdGU6CiAgICAgIG5zQXV0b0J1ZmZlckhhbmRsZTxjaGFyX3R5cGU+IG1C
dWZmZXI7CiAgfTsKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUHJvbWlzZUZsYXRT
dHJpbmcuaCIgMgojIDgzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNQcm9taXNlRmxhdFN0
cmluZy5oIgpjbGFzcyBuc1Byb21pc2VGbGF0U3RyaW5nCiAgICA6IHB1YmxpYyBuc0FGbGF0U3Ry
aW5nCiAgewogICAgZnJpZW5kIGNvbnN0IG5zUHJvbWlzZUZsYXRTdHJpbmcgUHJvbWlzZUZsYXRT
dHJpbmcoIGNvbnN0IG5zQVN0cmluZyYgKTsKCiAgICBwdWJsaWM6CiAgICAgIG5zUHJvbWlzZUZs
YXRTdHJpbmcoIGNvbnN0IG5zUHJvbWlzZUZsYXRTdHJpbmcmICk7CgogICAgcHJvdGVjdGVkOgog
ICAgICBuc1Byb21pc2VGbGF0U3RyaW5nKCkgOiBtUHJvbWlzZWRTdHJpbmcoJm1GbGF0dGVuZWRT
dHJpbmcpIHsgfQogICAgICBleHBsaWNpdCBuc1Byb21pc2VGbGF0U3RyaW5nKCBjb25zdCBuc0FT
dHJpbmcmIGFTdHJpbmcgKTsKCgogICAgICB2aXJ0dWFsIGNvbnN0IG5zQnVmZmVySGFuZGxlPFBS
VW5pY2hhcj4qIEdldEZsYXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25z
dCBuc0J1ZmZlckhhbmRsZTxQUlVuaWNoYXI+KiBHZXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAg
ICAgdmlydHVhbCBjb25zdCBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxQUlVuaWNoYXI+KiBHZXRTaGFy
ZWRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBQUkJvb2wgSXNEZXBlbmRlbnRP
biggY29uc3QgbnNBU3RyaW5nJiApIGNvbnN0OwoKCgogICAgcHVibGljOgogICAgICB2aXJ0dWFs
IGNvbnN0IFBSVW5pY2hhciogZ2V0KCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgUFJVaW50MzIgTGVu
Z3RoKCkgY29uc3Q7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgY29uc3QgUFJVbmljaGFy
KiBHZXRSZWFkYWJsZUZyYWdtZW50KCBuc1JlYWRhYmxlRnJhZ21lbnQ8UFJVbmljaGFyPiYsIG5z
RnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApIGNvbnN0OwoKCiAgICBwcml2YXRlOgoKICAgICAg
dm9pZCBvcGVyYXRvcj0oIGNvbnN0IG5zUHJvbWlzZUZsYXRTdHJpbmcmICk7CgogICAgcHJpdmF0
ZToKICAgICAgbnNTaGFyYWJsZVN0cmluZyBtRmxhdHRlbmVkU3RyaW5nOwogICAgICBjb25zdCBu
c0FGbGF0U3RyaW5nKiBtUHJvbWlzZWRTdHJpbmc7CiAgfTsKCmNsYXNzIG5zUHJvbWlzZUZsYXRD
U3RyaW5nCiAgICA6IHB1YmxpYyBuc0FGbGF0Q1N0cmluZwogIHsKICAgIGZyaWVuZCBjb25zdCBu
c1Byb21pc2VGbGF0Q1N0cmluZyBQcm9taXNlRmxhdENTdHJpbmcoIGNvbnN0IG5zQUNTdHJpbmcm
ICk7CgogICAgcHVibGljOgogICAgICBuc1Byb21pc2VGbGF0Q1N0cmluZyggY29uc3QgbnNQcm9t
aXNlRmxhdENTdHJpbmcmICk7CgogICAgcHJvdGVjdGVkOgogICAgICBuc1Byb21pc2VGbGF0Q1N0
cmluZygpIDogbVByb21pc2VkU3RyaW5nKCZtRmxhdHRlbmVkU3RyaW5nKSB7IH0KICAgICAgZXhw
bGljaXQgbnNQcm9taXNlRmxhdENTdHJpbmcoIGNvbnN0IG5zQUNTdHJpbmcmIGFTdHJpbmcgKTsK
CgogICAgICB2aXJ0dWFsIGNvbnN0IG5zQnVmZmVySGFuZGxlPGNoYXI+KiBHZXRGbGF0QnVmZmVy
SGFuZGxlKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgY29uc3QgbnNCdWZmZXJIYW5kbGU8Y2hhcj4q
IEdldEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgICB2aXJ0dWFsIGNvbnN0IG5zU2hhcmVkQnVm
ZmVySGFuZGxlPGNoYXI+KiBHZXRTaGFyZWRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmly
dHVhbCBQUkJvb2wgSXNEZXBlbmRlbnRPbiggY29uc3QgbnNBQ1N0cmluZyYgKSBjb25zdDsKCgoK
ICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBnZXQoKSBjb25zdDsKICAgICAg
dmlydHVhbCBQUlVpbnQzMiBMZW5ndGgoKSBjb25zdDsKICAgIHByb3RlY3RlZDoKICAgICAgdmly
dHVhbCBjb25zdCBjaGFyKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBuc1JlYWRhYmxlRnJhZ21lbnQ8
Y2hhcj4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSBjb25zdDsKCgogICAgcHJpdmF0
ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBuc1Byb21pc2VGbGF0Q1N0cmluZyYgKTsK
CiAgICBwcml2YXRlOgogICAgICBuc1NoYXJhYmxlQ1N0cmluZyBtRmxhdHRlbmVkU3RyaW5nOwog
ICAgICBjb25zdCBuc0FGbGF0Q1N0cmluZyogbVByb21pc2VkU3RyaW5nOwogIH07CgoKaW5saW5l
CmNvbnN0IG5zUHJvbWlzZUZsYXRTdHJpbmcKUHJvbWlzZUZsYXRTdHJpbmcoIGNvbnN0IG5zQVN0
cmluZyYgYVN0cmluZyApCiAgewogICAgcmV0dXJuIG5zUHJvbWlzZUZsYXRTdHJpbmcoYVN0cmlu
Zyk7CiAgfQoKaW5saW5lCmNvbnN0IG5zUHJvbWlzZUZsYXRDU3RyaW5nClByb21pc2VGbGF0Q1N0
cmluZyggY29uc3QgbnNBQ1N0cmluZyYgYVN0cmluZyApCiAgewogICAgcmV0dXJuIG5zUHJvbWlz
ZUZsYXRDU3RyaW5nKGFTdHJpbmcpOwogIH0KIyA0NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zQVJlYWRhYmxlU3RyaW5nLmgiIDIKIyAzMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
QVdyaXRhYmxlU3RyaW5nLmgiIDIKCgp0eXBlZGVmIG5zQVN0cmluZyBuc0FXcml0YWJsZVN0cmlu
ZzsKdHlwZWRlZiBuc0FDU3RyaW5nIG5zQVdyaXRhYmxlQ1N0cmluZzsKIyAyMCAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSUF0b20uaCIgMgojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJQXRvbS5oIgpjbGFzcyBuc0lBdG9tIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1Ymxp
YzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlp
ZCA9IHsweDNkMWIxNWIwLCAweDkzYjQsIDB4MTFkMSwgeyAweDg5LCAweDViLCAweDAwLCAweDYw
LCAweDA4LCAweDkxLCAweDFiLCAweDgxIH19OyByZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgVG9TdHJpbmcobnNBV3JpdGFibGVTdHJpbmcgJiBhU3RyaW5nKSA9IDA7CgoKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFVuaWNvZGUoY29uc3QgUFJVbmljaGFyICoqYVJlc3VsdCkg
PSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTaXplT2YobnNJU2l6ZU9mSGFuZGxlciAqYUhh
bmRsZXIsIFBSVWludDMyICpfcmV0dmFsKSA9IDA7Cgp9OwojIDEyNSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSUF0b20uaCIKZXh0ZXJuIG5zSUF0b20qIE5TX05ld0F0b20oY29uc3QgY2hh
ciogaXNvbGF0aW4xKTsKCgoKCmV4dGVybiBuc0lBdG9tKiBOU19OZXdBdG9tKGNvbnN0IFBSVW5p
Y2hhciogdW5pY29kZSk7CgoKCmV4dGVybiBuc0lBdG9tKiBOU19OZXdBdG9tKGNvbnN0IG5zQVJl
YWRhYmxlU3RyaW5nJiBhU3RyaW5nKTsKCgoKCmV4dGVybiBuc3JlZmNudCBOU19HZXROdW1iZXJP
ZkF0b21zKHZvaWQpOwpleHRlcm4gdm9pZCBOU19QdXJnZUF0b21UYWJsZSh2b2lkKTsKIyA1MiAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIiAyCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zU3RyLmgiIDEKIyAxOTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c1N0ci5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDE5MiAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNNZW1vcnkuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNN
ZW1vcnkuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTWVtb3J5LmgiIDEKIyAz
NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSU1lbW9yeS5oIgpjbGFzcyBuc0lNZW1vcnkg
OiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl
dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4NTllN2U3N2EsIDB4MzhlNCwgMHgx
MWQ0LCB7IDB4OGMsIDB4ZjUsIDB4MDAsIDB4NjAsIDB4YjAsIDB4ZmMsIDB4MTQsIDB4YTMgfX07
IHJldHVybiBpaWQ7fQojIDUwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTWVtb3J5Lmgi
CiAgdmlydHVhbCB2b2lkICogQWxsb2Moc2l6ZV90IHNpemUpID0gMDsKIyA2NyAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSU1lbW9yeS5oIgogIHZpcnR1YWwgdm9pZCAqIFJlYWxsb2Modm9p
ZCAqIHB0ciwgc2l6ZV90IG5ld1NpemUpID0gMDsKIyA3NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSU1lbW9yeS5oIgogIHZpcnR1YWwgdm9pZCBGcmVlKHZvaWQgKiBwdHIpID0gMDsKIyA4
OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSU1lbW9yeS5oIgogIHZpcnR1YWwgbnNyZXN1
bHQgSGVhcE1pbmltaXplKFBSQm9vbCBpbW1lZGlhdGUpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBJc0xvd01lbW9yeShQUkJvb2wgKl9yZXR2YWwpID0gMDsKCn07CiMgMjcgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc01lbW9yeS5oIiAyCgoKCgoKCgpjbGFzcyBuc01lbW9yeQp7
CnB1YmxpYzoKICAgIHN0YXRpYyB2b2lkKiBBbGxvYyhzaXplX3Qgc2l6ZSk7CiAgICBzdGF0aWMg
dm9pZCogUmVhbGxvYyh2b2lkKiBwdHIsIHNpemVfdCBzaXplKTsKICAgIHN0YXRpYyB2b2lkIEZy
ZWUodm9pZCogcHRyKTsKICAgIHN0YXRpYyBuc3Jlc3VsdCBIZWFwTWluaW1pemUoUFJCb29sIGFJ
bW1lZGlhdGUpOwogICAgc3RhdGljIHZvaWQqIENsb25lKGNvbnN0IHZvaWQqIHB0ciwgc2l6ZV90
IHNpemUpOwogICAgc3RhdGljIG5zSU1lbW9yeSogR2V0R2xvYmFsTWVtb3J5U2VydmljZSgpOwp9
OwojIDE5MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiIDIKIyAxICIvdXNyL2lu
Y2x1ZGUvc3RyaW5nLmgiIDEgMwojIDE5NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3Ry
LmgiIDIKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMTk1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNTdHIuaCIgMgojIDEgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0
L2luY2x1ZGUvbnNwci9wbGhhc2guaCIgMQojIDI0ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1v
cHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcGxoYXNoLmgiCiMgMSAiL3Vzci9sb2NhbC9nY2Mt
My4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDEg
MwojIDI1ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25z
cHIvcGxoYXNoLmgiIDIKIyAxICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlz
dC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMjYgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxh
LW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wbGhhc2guaCIgMgoKZXh0ZXJuICJDIiB7Cgp0
eXBlZGVmIHN0cnVjdCBQTEhhc2hFbnRyeSBQTEhhc2hFbnRyeTsKdHlwZWRlZiBzdHJ1Y3QgUExI
YXNoVGFibGUgUExIYXNoVGFibGU7CnR5cGVkZWYgUFJVaW50MzIgUExIYXNoTnVtYmVyOwoKdHlw
ZWRlZiBQTEhhc2hOdW1iZXIgKCAqUExIYXNoRnVuY3Rpb24pKGNvbnN0IHZvaWQgKmtleSk7CnR5
cGVkZWYgUFJJbnRuICggKlBMSGFzaENvbXBhcmF0b3IpKGNvbnN0IHZvaWQgKnYxLCBjb25zdCB2
b2lkICp2Mik7CgoKCgp0eXBlZGVmIFBSSW50biAoICpQTEhhc2hFbnVtZXJhdG9yKShQTEhhc2hF
bnRyeSAqaGUsIFBSSW50biBpLCB2b2lkICphcmcpOwojIDUxICIvaG9tZS9rYWkvbS8wOTIvbW96
aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcGxoYXNoLmgiCnR5cGVkZWYgc3RydWN0
IFBMSGFzaEFsbG9jT3BzIHsKICAgIHZvaWQgKiAoICphbGxvY1RhYmxlKSh2b2lkICpwb29sLCBQ
UlNpemUgc2l6ZSk7CiAgICB2b2lkICggKmZyZWVUYWJsZSkodm9pZCAqcG9vbCwgdm9pZCAqaXRl
bSk7CiAgICBQTEhhc2hFbnRyeSAqICggKmFsbG9jRW50cnkpKHZvaWQgKnBvb2wsIGNvbnN0IHZv
aWQgKmtleSk7CiAgICB2b2lkICggKmZyZWVFbnRyeSkodm9pZCAqcG9vbCwgUExIYXNoRW50cnkg
KmhlLCBQUlVpbnRuIGZsYWcpOwp9IFBMSGFzaEFsbG9jT3BzOwoKCgoKc3RydWN0IFBMSGFzaEVu
dHJ5IHsKICAgIFBMSGFzaEVudHJ5ICpuZXh0OwogICAgUExIYXNoTnVtYmVyIGtleUhhc2g7CiAg
ICBjb25zdCB2b2lkICprZXk7CiAgICB2b2lkICp2YWx1ZTsKfTsKCnN0cnVjdCBQTEhhc2hUYWJs
ZSB7CiAgICBQTEhhc2hFbnRyeSAqKmJ1Y2tldHM7CiAgICBQUlVpbnQzMiBuZW50cmllczsKICAg
IFBSVWludDMyIHNoaWZ0OwogICAgUExIYXNoRnVuY3Rpb24ga2V5SGFzaDsKICAgIFBMSGFzaENv
bXBhcmF0b3Iga2V5Q29tcGFyZTsKICAgIFBMSGFzaENvbXBhcmF0b3IgdmFsdWVDb21wYXJlOwog
ICAgY29uc3QgUExIYXNoQWxsb2NPcHMgKmFsbG9jT3BzOwogICAgdm9pZCAqYWxsb2NQcml2OwoK
CgoKCgp9OwoKCgoKCmV4dGVybiBQTEhhc2hUYWJsZSAqClBMX05ld0hhc2hUYWJsZShQUlVpbnQz
MiBudW1CdWNrZXRzLCBQTEhhc2hGdW5jdGlvbiBrZXlIYXNoLAogICAgICAgICAgICAgICAgUExI
YXNoQ29tcGFyYXRvciBrZXlDb21wYXJlLCBQTEhhc2hDb21wYXJhdG9yIHZhbHVlQ29tcGFyZSwK
ICAgICAgICAgICAgICAgIGNvbnN0IFBMSGFzaEFsbG9jT3BzICphbGxvY09wcywgdm9pZCAqYWxs
b2NQcml2KTsKCmV4dGVybiB2b2lkClBMX0hhc2hUYWJsZURlc3Ryb3koUExIYXNoVGFibGUgKmh0
KTsKCgpleHRlcm4gUExIYXNoRW50cnkgKgpQTF9IYXNoVGFibGVBZGQoUExIYXNoVGFibGUgKmh0
LCBjb25zdCB2b2lkICprZXksIHZvaWQgKnZhbHVlKTsKCmV4dGVybiBQUkJvb2wKUExfSGFzaFRh
YmxlUmVtb3ZlKFBMSGFzaFRhYmxlICpodCwgY29uc3Qgdm9pZCAqa2V5KTsKCmV4dGVybiB2b2lk
ICoKUExfSGFzaFRhYmxlTG9va3VwKFBMSGFzaFRhYmxlICpodCwgY29uc3Qgdm9pZCAqa2V5KTsK
CmV4dGVybiB2b2lkICoKUExfSGFzaFRhYmxlTG9va3VwQ29uc3QoUExIYXNoVGFibGUgKmh0LCBj
b25zdCB2b2lkICprZXkpOwoKZXh0ZXJuIFBSSW50bgpQTF9IYXNoVGFibGVFbnVtZXJhdGVFbnRy
aWVzKFBMSGFzaFRhYmxlICpodCwgUExIYXNoRW51bWVyYXRvciBmLCB2b2lkICphcmcpOwoKCmV4
dGVybiBQTEhhc2hOdW1iZXIKUExfSGFzaFN0cmluZyhjb25zdCB2b2lkICprZXkpOwoKCmV4dGVy
biBQUkludG4KUExfQ29tcGFyZVN0cmluZ3MoY29uc3Qgdm9pZCAqdjEsIGNvbnN0IHZvaWQgKnYy
KTsKCgpleHRlcm4gUFJJbnRuClBMX0NvbXBhcmVWYWx1ZXMoY29uc3Qgdm9pZCAqdjEsIGNvbnN0
IHZvaWQgKnYyKTsKCgpleHRlcm4gUExIYXNoRW50cnkgKioKUExfSGFzaFRhYmxlUmF3TG9va3Vw
KFBMSGFzaFRhYmxlICpodCwgUExIYXNoTnVtYmVyIGtleUhhc2gsIGNvbnN0IHZvaWQgKmtleSk7
CgpleHRlcm4gUExIYXNoRW50cnkgKioKUExfSGFzaFRhYmxlUmF3TG9va3VwQ29uc3QoUExIYXNo
VGFibGUgKmh0LCBQTEhhc2hOdW1iZXIga2V5SGFzaCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgdm9pZCAqa2V5KTsKCmV4dGVybiBQTEhhc2hFbnRyeSAqClBMX0hhc2hUYWJsZVJh
d0FkZChQTEhhc2hUYWJsZSAqaHQsIFBMSGFzaEVudHJ5ICoqaGVwLCBQTEhhc2hOdW1iZXIga2V5
SGFzaCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmtleSwgdm9pZCAqdmFsdWUpOwoK
ZXh0ZXJuIHZvaWQKUExfSGFzaFRhYmxlUmF3UmVtb3ZlKFBMSGFzaFRhYmxlICpodCwgUExIYXNo
RW50cnkgKipoZXAsIFBMSGFzaEVudHJ5ICpoZSk7CgoKZXh0ZXJuIFBSSW50bgpQTF9IYXNoVGFi
bGVEdW1wKFBMSGFzaFRhYmxlICpodCwgUExIYXNoRW51bWVyYXRvciBkdW1wLCBGSUxFICpmcCk7
Cgp9CiMgMTk2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIgMgoKCgplbnVtIGVD
aGFyU2l6ZSB7ZU9uZUJ5dGU9MCxlVHdvQnl0ZT0xfTsKCgoKCgoKCmNvbnN0IFBSSW50MzIga0Rl
ZmF1bHRTdHJpbmdTaXplID0gNjQ7CmNvbnN0IFBSSW50MzIga05vdEZvdW5kID0gLTE7CgoKCgpj
bGFzcyBDQnVmRGVzY3JpcHRvciB7CnB1YmxpYzoKICBDQnVmRGVzY3JpcHRvcihjaGFyKiBhU3Ry
aW5nLCBQUkJvb2wgYVN0YWNrQmFzZWQsUFJVaW50MzIgYUNhcGFjaXR5LFBSSW50MzIgYUxlbmd0
aD0tMSk7CiAgQ0J1ZkRlc2NyaXB0b3IoY29uc3QgY2hhciogYVN0cmluZywgUFJCb29sIGFTdGFj
a0Jhc2VkLFBSVWludDMyIGFDYXBhY2l0eSxQUkludDMyIGFMZW5ndGg9LTEpOwogIENCdWZEZXNj
cmlwdG9yKFBSVW5pY2hhciogYVN0cmluZywgUFJCb29sIGFTdGFja0Jhc2VkLFBSVWludDMyIGFD
YXBhY2l0eSxQUkludDMyIGFMZW5ndGg9LTEpOwogIENCdWZEZXNjcmlwdG9yKGNvbnN0IFBSVW5p
Y2hhciogYVN0cmluZyxQUkJvb2wgYVN0YWNrQmFzZWQsUFJVaW50MzIgYUNhcGFjaXR5LFBSSW50
MzIgYUxlbmd0aD0tMSk7CgogIGNoYXIqIG1CdWZmZXI7CiAgZUNoYXJTaXplIG1DaGFyU2l6ZTsK
ICBQUlVpbnQzMiBtQ2FwYWNpdHk7CiAgUFJJbnQzMiBtTGVuZ3RoOwogIFBSQm9vbCBtU3RhY2tC
YXNlZDsKICBQUkJvb2wgbUlzQ29uc3Q7Cn07CgoKCgpzdHJ1Y3QgbnNTdHIgewoKICBuc1N0cigp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB9CgogIH5uc1N0cigpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICB9CiMgMjQ4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNT
dHIuaCIKICBzdGF0aWMgdm9pZCBJbml0aWFsaXplKG5zU3RyJiBhRGVzdCxlQ2hhclNpemUgYUNo
YXJTaXplKTsKIyAyNTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIgogIHN0YXRp
YyB2b2lkIEluaXRpYWxpemUobnNTdHImIGFEZXN0LGNoYXIqIGFDU3RyaW5nLFBSVWludDMyIGFD
YXBhY2l0eSxQUlVpbnQzMiBhTGVuZ3RoLGVDaGFyU2l6ZSBhQ2hhclNpemUsUFJCb29sIGFPd25z
QnVmZmVyKTsKIyAyNjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIgogIHN0YXRp
YyB2b2lkIERlc3Ryb3kobnNTdHImIGFEZXN0KTsKIyAyNzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc1N0ci5oIgogIHN0YXRpYyBQUkJvb2wgRW5zdXJlQ2FwYWNpdHkobnNTdHImIGFTdHJp
bmcsUFJVaW50MzIgYU5ld0xlbmd0aCk7CiAgc3RhdGljIFBSQm9vbCBHcm93Q2FwYWNpdHkobnNT
dHImIGFTdHJpbmcsUFJVaW50MzIgYU5ld0xlbmd0aCk7CiMgMjkxICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNTdHIuaCIKICBzdGF0aWMgdm9pZCBTdHJBcHBlbmQobnNTdHImIGFEZXN0LGNv
bnN0IG5zU3RyJiBhU291cmNlLFBSVWludDMyIGFuT2Zmc2V0LFBSSW50MzIgYUNvdW50KTsKIyAz
MDMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIgogIHN0YXRpYyB2b2lkIFN0ckFz
c2lnbihuc1N0ciYgYURlc3QsY29uc3QgbnNTdHImIGFTb3VyY2UsUFJVaW50MzIgYW5PZmZzZXQs
UFJJbnQzMiBhQ291bnQpOwojIDMxNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgi
CiAgc3RhdGljIHZvaWQgU3RySW5zZXJ0KCBuc1N0ciYgYURlc3QsUFJVaW50MzIgYURlc3RPZmZz
ZXQsY29uc3QgbnNTdHImIGFTb3VyY2UsUFJVaW50MzIgYVNyY09mZnNldCxQUkludDMyIGFDb3Vu
dCk7CiMgMzI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIKICBzdGF0aWMgdm9p
ZCBEZWxldGUobnNTdHImIGFEZXN0LFBSVWludDMyIGFEZXN0T2Zmc2V0LFBSVWludDMyIGFDb3Vu
dCk7CiMgMzQxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIKICBzdGF0aWMgdm9p
ZCBTdHJUcnVuY2F0ZShuc1N0ciYgYURlc3QsUFJVaW50MzIgYURlc3RPZmZzZXQpOwojIDM1MCAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAgc3RhdGljIHZvaWQgQ2hhbmdlQ2Fz
ZShuc1N0ciYgYURlc3QsUFJCb29sIGFUb1VwcGVyKTsKIyAzNjIgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc1N0ci5oIgogIHN0YXRpYyB2b2lkIFRyaW0obnNTdHImIGFEZXN0LGNvbnN0IGNo
YXIqIGFTZXQsUFJCb29sIGFFbGltaW5hdGVMZWFkaW5nLFBSQm9vbCBhRWxpbWluYXRlVHJhaWxp
bmcpOwojIDM3NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAgc3RhdGljIHZv
aWQgQ29tcHJlc3NTZXQobnNTdHImIGFEZXN0LGNvbnN0IGNoYXIqIGFTZXQsUFJCb29sIGFFbGlt
aW5hdGVMZWFkaW5nLFBSQm9vbCBhRWxpbWluYXRlVHJhaWxpbmcpOwojIDM4NiAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAgc3RhdGljIHZvaWQgU3RyaXBDaGFycyhuc1N0ciYg
YURlc3QsY29uc3QgY2hhciogYVNldCk7CiMgMzk4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNTdHIuaCIKICBzdGF0aWMgUFJJbnQzMiBTdHJDb21wYXJlKGNvbnN0IG5zU3RyJiBhRGVzdCxj
b25zdCBuc1N0ciYgYVNvdXJjZSxQUkludDMyIGFDb3VudCxQUkJvb2wgYUlnbm9yZUNhc2UpOwoj
IDQxMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAgc3RhdGljIFBSSW50MzIg
RmluZFN1YnN0cihjb25zdCBuc1N0ciYgYURlc3QsY29uc3QgbnNTdHImIGFTb3VyY2UsIFBSQm9v
bCBhSWdub3JlQ2FzZSxQUkludDMyIGFuT2Zmc2V0LFBSSW50MzIgYUNvdW50KTsKICBzdGF0aWMg
UFJJbnQzMiBGaW5kQ2hhcihjb25zdCBuc1N0ciYgYURlc3QsUFJVbmljaGFyIGFDaGFyLCBQUkJv
b2wgYUlnbm9yZUNhc2UsUFJJbnQzMiBhbk9mZnNldCxQUkludDMyIGFDb3VudCk7CiAgc3RhdGlj
IFBSSW50MzIgRmluZENoYXJJblNldChjb25zdCBuc1N0ciYgYURlc3QsY29uc3QgbnNTdHImIGFT
ZXQsUFJCb29sIGFJZ25vcmVDYXNlLFBSSW50MzIgYW5PZmZzZXQpOwoKICBzdGF0aWMgUFJJbnQz
MiBSRmluZFN1YnN0cihjb25zdCBuc1N0ciYgYURlc3QsY29uc3QgbnNTdHImIGFTb3VyY2UsIFBS
Qm9vbCBhSWdub3JlQ2FzZSxQUkludDMyIGFuT2Zmc2V0LFBSSW50MzIgYUNvdW50KTsKICBzdGF0
aWMgUFJJbnQzMiBSRmluZENoYXIoY29uc3QgbnNTdHImIGFEZXN0LFBSVW5pY2hhciBhQ2hhciwg
UFJCb29sIGFJZ25vcmVDYXNlLFBSSW50MzIgYW5PZmZzZXQsUFJJbnQzMiBhQ291bnQpOwogIHN0
YXRpYyBQUkludDMyIFJGaW5kQ2hhckluU2V0KGNvbnN0IG5zU3RyJiBhRGVzdCxjb25zdCBuc1N0
ciYgYVNldCxQUkJvb2wgYUlnbm9yZUNhc2UsUFJJbnQzMiBhbk9mZnNldCk7CgogIHN0YXRpYyB2
b2lkIE92ZXJ3cml0ZShuc1N0ciYgYURlc3QsY29uc3QgbnNTdHImIGFTb3VyY2UsUFJJbnQzMiBh
bk9mZnNldCk7CgogIHN0YXRpYyBQUkJvb2wgRGlkQWNxdWlyZU1lbW9yeSh2b2lkKTsKCgoKCiAg
c3RhdGljIFBSVWludDMyIEhhc2hDb2RlKGNvbnN0IG5zU3RyJiBhRGVzdCk7CiMgNDM2ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIKICBQUlVpbnQzMiBtTGVuZ3RoOwogIFBSVWlu
dDMyIG1DYXBhY2l0eTsKICBlQ2hhclNpemUgbUNoYXJTaXplOwogIFBSQm9vbCBtT3duc0J1ZmZl
cjsKCiAgdW5pb24gewogICAgY2hhciogbVN0cjsKICAgIFBSVW5pY2hhciogbVVTdHI7CiAgfTsK
CnByaXZhdGU6CiAgc3RhdGljIFBSQm9vbCBBbGxvYyhuc1N0ciYgYVN0cmluZyxQUlVpbnQzMiBh
Q291bnQpOwogIHN0YXRpYyBQUkJvb2wgUmVhbGxvYyhuc1N0ciYgYVN0cmluZyxQUlVpbnQzMiBh
Q291bnQpOwogIHN0YXRpYyBQUkJvb2wgRnJlZShuc1N0ciYgYVN0cmluZyk7Cgp9OwojIDQ2MCAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCmlubGluZSBQUkludDMyIE1pbkludChQ
UkludDMyIGFuSW50MSxQUkludDMyIGFuSW50Mil7CiAgcmV0dXJuIChhbkludDE8YW5JbnQyKSA/
IGFuSW50MSA6IGFuSW50MjsKfQoKaW5saW5lIFBSSW50MzIgTWF4SW50KFBSSW50MzIgYW5JbnQx
LFBSSW50MzIgYW5JbnQyKXsKICByZXR1cm4gKGFuSW50MTxhbkludDIpID8gYW5JbnQyIDogYW5J
bnQxOwp9CgppbmxpbmUgdm9pZCBBZGROdWxsVGVybWluYXRvcihuc1N0ciYgYURlc3QpIHsKICBp
ZihlVHdvQnl0ZT09YURlc3QubUNoYXJTaXplKQogICAgYURlc3QubVVTdHJbYURlc3QubUxlbmd0
aF09MDsKICBlbHNlIGFEZXN0Lm1TdHJbYURlc3QubUxlbmd0aF09MDsKfQoKCgoKCgoKaW5saW5l
IHZvaWQgUmVjeWNsZSggY2hhciogYUJ1ZmZlcikgeyBuc01lbW9yeTo6RnJlZShhQnVmZmVyKTsg
fQppbmxpbmUgdm9pZCBSZWN5Y2xlKCBQUlVuaWNoYXIqIGFCdWZmZXIpIHsgbnNNZW1vcnk6OkZy
ZWUoYUJ1ZmZlcik7IH0KIyA0OTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIgpp
bmxpbmUgUFJVbmljaGFyIEdldENoYXJBdChjb25zdCBuc1N0ciYgYURlc3QsUFJVaW50MzIgYW5J
bmRleCkgewogIGlmKGFuSW5kZXg8YURlc3QubUxlbmd0aCkgewogICAgcmV0dXJuIChlVHdvQnl0
ZT09YURlc3QubUNoYXJTaXplKSA/IGFEZXN0Lm1VU3RyW2FuSW5kZXhdIDogKFBSVW5pY2hhcilh
RGVzdC5tU3RyW2FuSW5kZXhdOwogIH0KICByZXR1cm4gMDsKfQojIDUzICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNDUlQuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIKIyAxICIv
dXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMiAzCgoKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVk
ZS9zdGRsaWIuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy93YWl0ZmxhZ3MuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2Jp
dHMvd2FpdHN0YXR1cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyA2NCAi
L3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAyIDMKCnVuaW9uIHdhaXQKICB7CiAgICBp
bnQgd19zdGF0dXM7CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193
X3Rlcm1zaWc6NzsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X2NvcmVkdW1wOjE7CiAgICAgICAg
dW5zaWduZWQgaW50IF9fd19yZXRjb2RlOjg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoK
CgoKICAgICAgfSBfX3dhaXRfdGVybWluYXRlZDsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAg
IHVuc2lnbmVkIGludCBfX3dfc3RvcHZhbDo4OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3Rv
cHNpZzo4OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKICAgICAgfSBfX3dhaXRfc3Rv
cHBlZDsKICB9OwojIDQ0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDk0ICIvdXNyL2lu
Y2x1ZGUvc3RkbGliLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGlu
dCByZW07CiAgfSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90
OwogICAgbG9uZyBpbnQgcmVtOwogIH0gbGRpdl90OwoKCgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRl
ZiBzdHJ1Y3QKICB7CiAgICBsb25nIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGxvbmcgaW50IHJl
bTsKICB9IGxsZGl2X3Q7CiMgMTMzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNp
emVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRv
dWJsZSBhdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBsb25nIGludCBhdG9sIChf
X2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hh
ciAqX19ucHRyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpl
eHRlcm4gZG91YmxlIHN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGZsb2F0IHN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgp
OwoKZXh0ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25n
IGludCBzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf
X2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBp
bnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0
aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3Ry
dG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jh
c2UpCiAgICAgdGhyb3cgKCk7CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBp
bnQgc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2Up
IHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBz
dHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQg
X19iYXNlKQogICAgIHRocm93ICgpOwojIDIxMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMjEyICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDIgMwoKCgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfbCAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s
b2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0
b3VsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xv
YykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9s
bF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAo
KTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3Vs
bF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9j
YWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2wgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cg
KCk7CgpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRv
bGRfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IGRvdWJsZSBfX3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gZmxvYXQgX19zdHJ0b2Zf
aW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3Vw
KQogICAgIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKZXh0ZXJuIGxv
bmcgaW50IF9fc3RydG9sX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGlu
dCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91
bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jh
c2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcg
bG9uZyBpbnQgX19zdHJ0b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRl
cm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsIChfX2NvbnN0IGNo
YXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3Vw
KQogICAgIHRocm93ICgpOwojIDI5NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBf
X2lubGluZSBkb3VibGUKc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvZF9p
bnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50
CnN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0
cnRvbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpleHRlcm4gX19p
bmxpbmUgdW5zaWduZWQgbG9uZyBpbnQKc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2Up
IHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRy
LCBfX2Jhc2UsIDApOwp9CgoKZXh0ZXJuIF9faW5saW5lIGZsb2F0CnN0cnRvZiAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93
ICgpCnsKICByZXR1cm4gX19zdHJ0b2ZfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9
CmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZQpzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKewogIHJl
dHVybiBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CgoKCl9fZXh0
ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9xIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg
ICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19u
cHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGlu
ZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNl
KSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRw
dHIsIF9fYmFzZSwgMCk7Cn0KCgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBs
b25nIGludApzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoq
X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJl
dHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0K
X19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludApzdHJ0
b3VsbCAoX19jb25zdCBjaGFyICogX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLAogICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0
cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKZXh0ZXJu
IF9faW5saW5lIGRvdWJsZQphdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkKewog
IHJldHVybiBzdHJ0b2QgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCk7Cn0KZXh0ZXJuIF9faW5s
aW5lIGludAphdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkKewogIHJldHVybiAo
aW50KSBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9CmV4dGVybiBfX2lu
bGluZSBsb25nIGludAphdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkKewogIHJl
dHVybiBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9CgoKX19leHRlbnNp
b25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludAphdG9sbCAoX19jb25zdCBjaGFyICpf
X25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9sbCAoX19ucHRyLCAoY2hhciAqKikgX19u
dWxsLCAxMCk7Cn0KIyAzODUgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAq
bDY0YSAobG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19j
b25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCiMg
MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAzOTIgIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMiAzCgoKCgoKCmV4dGVybiBsb25nIGludCByYW5kb20gKHZvaWQpIHRocm93ICgpOwoK
CmV4dGVybiB2b2lkIHNyYW5kb20gKHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93ICgpOwoKCgoK
CmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fc3Rh
dGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGNoYXIgKnNldHN0YXRlIChjaGFyICpfX3N0YXRlYnVmKSB0aHJvdyAoKTsK
CgoKCgoKCnN0cnVjdCByYW5kb21fZGF0YQogIHsKICAgIGludDMyX3QgKmZwdHI7CiAgICBpbnQz
Ml90ICpycHRyOwogICAgaW50MzJfdCAqc3RhdGU7CiAgICBpbnQgcmFuZF90eXBlOwogICAgaW50
IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2VwOwogICAgaW50MzJfdCAqZW5kX3B0cjsKICB9OwoK
ZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm
LAogICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJv
dyAoKTsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1Y3Qg
cmFuZG9tX2RhdGEgKl9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgaW5pdHN0YXRlX3IgKHVu
c2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4g
aW50IHNldHN0YXRlX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgp
OwoKCgoKCmV4dGVybiBpbnQgcmFuZCAodm9pZCkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBzcmFu
ZCAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcmFuZF9yICh1
bnNpZ25lZCBpbnQgKl9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGRyYW5k
NDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNob3J0
IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbHJhbmQ0OCAodm9p
ZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQg
X194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQpIHRo
cm93ICgpOwpleHRlcm4gbG9uZyBpbnQganJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1
YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZh
bCkgdGhyb3cgKCk7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQg
c2hvcnQgaW50IF9fc2VlZDE2dlszXSkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIGxjb25nNDggKHVu
c2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddKSB0aHJvdyAoKTsKCgoKCgpzdHJ1Y3QgZHJhbmQ0
OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IF9feFszXTsKICAgIHVuc2lnbmVkIHNo
b3J0IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fYzsKICAgIHVuc2ln
bmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fYTsKICB9
OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0
IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVz
dWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBf
X3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19y
ZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmlj
dCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBscmFuZDQ4X3IgKHN0cnVjdCBkcmFu
ZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25n
IGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgbnJhbmQ0OF9y
ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAg
ICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAg
ICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cg
KCk7CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwK
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19i
dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3Vs
dCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9fc2VlZHZhbCwg
c3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50
IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAogICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CgpleHRlcm4g
aW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCiAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CiMgNTI4
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9f
c2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lk
ICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKZXh0ZXJuIHZvaWQgKnJlYWxsb2MgKHZv
aWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxs
b2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgpleHRl
cm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgojIDEgIi91c3IvaW5jbHVk
ZS9hbGxvY2EuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMwojIDEgIi91c3Iv
aW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMK
CgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAz
CgpleHRlcm4gIkMiIHsKCgoKCgpleHRlcm4gdm9pZCAqYWxsb2NhIChzaXplX3QgX19zaXplKSB0
aHJvdyAoKTsKCgoKCgp9CiMgNTQ4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKZXh0
ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBpbnQgcG9zaXhfbWVtYWxpZ24gKHZvaWQgKipfX21l
bXB0ciwgc2l6ZV90IF9fYWxpZ25tZW50LCBzaXplX3QgX19zaXplKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCmV4dGVybiBpbnQgYXRl
eGl0ICh2b2lkICgqX19mdW5jKSAodm9pZCkpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBvbl9l
eGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQgKl9f
YXJnKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIGV4aXQgKGludCBfX3N0YXR1cykg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQg
X0V4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5f
XykpOwoKCgoKZXh0ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93
ICgpOwoKCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFt
ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gaW50IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29u
c3QgY2hhciAqX192YWx1ZSwgaW50IF9fcmVwbGFjZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHVuc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBpbnQgY2xlYXJlbnYgKHZvaWQpIHRocm93ICgpOwojIDYyNCAiL3Vzci9pbmNsdWRlL3N0ZGxp
Yi5oIiAzCmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoK
CgoKCgoKZXh0ZXJuIGludCBta3N0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKIyA2
NDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IG1rc3RlbXA2NCAoY2hhciAq
X190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjUxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0
ZXJuIGNoYXIgKm1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGludCBzeXN0ZW0gKF9fY29uc3QgY2hhciAqX19jb21tYW5kKSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIGNoYXIgKmNhbm9uaWNhbGl6ZV9maWxlX25hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0
aHJvdyAoKTsKIyA2NzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVh
bHBhdGggKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqX19yZXN0cmljdCBfX3Jlc29sdmVkKSB0aHJvdyAoKTsKCgoKCgoKdHlwZWRl
ZiBpbnQgKCpfX2NvbXBhcl9mbl90KSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKTsK
Cgp0eXBlZGVmIF9fY29tcGFyX2ZuX3QgY29tcGFyaXNvbl9mbl90OwoKCgoKCmV4dGVybiB2b2lk
ICpic2VhcmNoIChfX2NvbnN0IHZvaWQgKl9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fYmFzZSwKICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBh
cl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKl9fYmFzZSwgc2l6
ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2NvbXBhcl9m
bl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIGludCBhYnMgKGludCBfX3gpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxvbmcgaW50IF9f
eCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBl
eHRlcm4gbG9uZyBsb25nIGludCBsbGFicyAobG9uZyBsb25nIGludCBfX3gpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgpleHRlcm4gZGl2X3QgZGl2IChp
bnQgX19udW1lciwgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwpleHRlcm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50
IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19l
eHRlbnNpb25fXyBleHRlcm4gbGxkaXZfdCBsbGRpdiAobG9uZyBsb25nIGludCBfX251bWVyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxvbmcgaW50IF9fZGVub20p
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDcyOSAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50
IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGlu
dCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRv
dWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAg
ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRl
cm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBp
bnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQs
IGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWZjdnQgKGxv
bmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQg
Kl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4
dGVybiBjaGFyICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFy
ICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUs
IGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAg
ICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAg
ICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmY3Z0X3IgKGRv
dWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAg
ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBf
X2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgpleHRlcm4g
aW50IHFlY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAg
ICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2ln
biwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19s
ZW4pIHRocm93ICgpOwpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGlu
dCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwg
aW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3Ry
aWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IG1ibGVu
IChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBt
YnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHdjdG9tYiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIHRocm93ICgpOwoKCgpleHRl
cm4gc2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikg
dGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywK
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdj
cywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAo
X19jb25zdCBjaGFyICpfX3Jlc3BvbnNlKSB0aHJvdyAoKTsKIyA4MDkgIi91c3IvaW5jbHVkZS9z
dGRsaWIuaCIgMwpleHRlcm4gaW50IGdldHN1Ym9wdCAoY2hhciAqKl9fcmVzdHJpY3QgX19vcHRp
b25wLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCAqX19yZXN0cmljdCBfX3Rv
a2VucywKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fdmFsdWVwKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkpIHRo
cm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwb3NpeF9vcGVucHQgKGludCBfX29mbGFnKSB0aHJv
dyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ3JhbnRwdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IHVubG9ja3B0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq
cHRzbmFtZSAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0c25hbWVfciAo
aW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgZ2V0cHQgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGdldGxvYWRhdmcg
KGRvdWJsZSBfX2xvYWRhdmdbXSwgaW50IF9fbmVsZW0pIHRocm93ICgpOwoKCgoKCn0KIyAyNiAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ1JULmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3Ry
aW5nLmgiIDEgMwojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIgMgojIDEg
Ii9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wbHN0
ci5oIiAxCiMgNDIgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1
ZGUvbnNwci9wbHN0ci5oIgojIDEgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9k
aXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyA0MyAiL2hvbWUva2FpL20vMDkyL21vemls
bGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiIDIKCmV4dGVybiAiQyIgewoK
CgoKCgpleHRlcm4gUFJVaW50MzIKUExfc3RybGVuKGNvbnN0IGNoYXIgKnN0cik7CiMgNjIgIi9o
b21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5o
IgpleHRlcm4gUFJVaW50MzIKUExfc3Rybmxlbihjb25zdCBjaGFyICpzdHIsIFBSVWludDMyIG1h
eCk7CiMgNzMgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUv
bnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cmNweShjaGFyICpkZXN0LCBjb25zdCBj
aGFyICpzcmMpOwojIDg2ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9p
bmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJuY3B5KGNoYXIgKmRlc3Qs
IGNvbnN0IGNoYXIgKnNyYywgUFJVaW50MzIgbWF4KTsKIyAxMDkgIi9ob21lL2thaS9tLzA5Mi9t
b3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAq
ClBMX3N0cm5jcHl6KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgUFJVaW50MzIgbWF4KTsK
IyAxMjMgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNw
ci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cmR1cChjb25zdCBjaGFyICpzKTsKCgoKCgoK
CmV4dGVybiB2b2lkClBMX3N0cmZyZWUoY2hhciAqcyk7CiMgMTQ3ICIvaG9tZS9rYWkvbS8wOTIv
bW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIg
KgpQTF9zdHJuZHVwKGNvbnN0IGNoYXIgKnMsIFBSVWludDMyIG1heCk7CiMgMTU5ICIvaG9tZS9r
YWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0
ZXJuIGNoYXIgKgpQTF9zdHJjYXQoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMpOwojIDE3NCAi
L2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3Ry
LmgiCmV4dGVybiBjaGFyICoKUExfc3RybmNhdChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywg
UFJVaW50MzIgbWF4KTsKIyAxODggIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9k
aXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cmNhdG4oY2hhciAq
ZHN0LCBQUlVpbnQzMiBtYXgsIGNvbnN0IGNoYXIgKnNyYyk7CiMgMjAwICIvaG9tZS9rYWkvbS8w
OTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIFBS
SW50bgpQTF9zdHJjbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYik7CiMgMjE0ICIvaG9t
ZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIK
ZXh0ZXJuIFBSSW50bgpQTF9zdHJuY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIsIFBS
VWludDMyIG1heCk7CiMgMjI2ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlz
dC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIFBSSW50bgpQTF9zdHJjYXNlY21wKGNvbnN0
IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpOwojIDIzOCAiL2hvbWUva2FpL20vMDkyL21vemlsbGEt
b3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBQUkludG4KUExfc3Ry
bmNhc2VjbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwgUFJVaW50MzIgbWF4KTsKIyAy
NDkgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9w
bHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cmNocihjb25zdCBjaGFyICpzLCBjaGFyIGMpOwoj
IDI2MCAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3By
L3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RycmNocihjb25zdCBjaGFyICpzLCBjaGFyIGMp
OwojIDI3MiAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9u
c3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybmNocihjb25zdCBjaGFyICpzLCBjaGFy
IGMsIFBSVWludDMyIG4pOwojIDI4NCAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVk
L2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybnJjaHIoY29u
c3QgY2hhciAqcywgY2hhciBjLCBQUlVpbnQzMiBuKTsKIyAzMDAgIi9ob21lL2thaS9tLzA5Mi9t
b3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAq
ClBMX3N0cnBicmsoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqbGlzdCk7CiMgMzExICIvaG9t
ZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIK
ZXh0ZXJuIGNoYXIgKgpQTF9zdHJwcmJyayhjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpsaXN0
KTsKIyAzMjIgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUv
bnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cm5wYnJrKGNvbnN0IGNoYXIgKnMsIGNv
bnN0IGNoYXIgKmxpc3QsIFBSVWludDMyIG4pOwojIDMzMyAiL2hvbWUva2FpL20vMDkyL21vemls
bGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExf
c3RybnByYnJrKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmxpc3QsIFBSVWludDMyIG4pOwoj
IDM0MyAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3By
L3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3Ryc3RyKGNvbnN0IGNoYXIgKmJpZywgY29uc3Qg
Y2hhciAqbGl0dGxlKTsKIyAzNTMgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9k
aXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cnJzdHIoY29uc3Qg
Y2hhciAqYmlnLCBjb25zdCBjaGFyICpsaXR0bGUpOwojIDM2NCAiL2hvbWUva2FpL20vMDkyL21v
emlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoK
UExfc3RybnN0cihjb25zdCBjaGFyICpiaWcsIGNvbnN0IGNoYXIgKmxpdHRsZSwgUFJVaW50MzIg
bik7CiMgMzc1ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRl
L25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJucnN0cihjb25zdCBjaGFyICpiaWcs
IGNvbnN0IGNoYXIgKmxpdHRsZSwgUFJVaW50MzIgbWF4KTsKIyAzODUgIi9ob21lL2thaS9tLzA5
Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hh
ciAqClBMX3N0cmNhc2VzdHIoY29uc3QgY2hhciAqYmlnLCBjb25zdCBjaGFyICpsaXR0bGUpOwoj
IDM5NSAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3By
L3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RyY2FzZXJzdHIoY29uc3QgY2hhciAqYmlnLCBj
b25zdCBjaGFyICpsaXR0bGUpOwojIDQwNiAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1p
emVkL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybmNhc2Vz
dHIoY29uc3QgY2hhciAqYmlnLCBjb25zdCBjaGFyICpsaXR0bGUsIFBSVWludDMyIG1heCk7CiMg
NDE3ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIv
cGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJuY2FzZXJzdHIoY29uc3QgY2hhciAqYmlnLCBj
b25zdCBjaGFyICpsaXR0bGUsIFBSVWludDMyIG1heCk7CgoKCgoKCgp9CiMgMjggIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0NSVC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zY29yZS5oIiAxCiMgMjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NSVC5oIiAyCiMg
MSAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3By
dHlwZXMuaCIgMQojIDMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIgMgojIDEg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NwcFNoYXJlZEFsbG9jYXRvci5oIiAxCgoKCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zTWVtb3J5LmgiIDEKIyA1ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNDcHBTaGFyZWRBbGxvY2F0b3IuaCIgMgojIDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0NwcFNoYXJlZEFsbG9jYXRvci5oIiAyCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv
ZysrLXYzL2JhY2t3YXJkL25ldy5oIiAxIDMKIyA3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNDcHBTaGFyZWRBbGxvY2F0b3IuaCIgMgojIDIzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNDcHBTaGFyZWRBbGxvY2F0b3IuaCIKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNy
L2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUv
bGltaXRzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMwoKCgoKCgojIDEgIi91c3IvbG9j
YWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9saW1p
dHMuaCIgMSAzCiMgMTMwICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGltaXRz
LmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
ZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMTQ0ICIv
dXNyL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGlt
LmgiIDEgMwojIDEyNiAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9s
b2NhbF9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW51eC9saW1pdHMuaCIgMSAzCiMgMzcg
Ii91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAyIDMKIyAxMjcgIi91c3IvaW5jbHVkZS9i
aXRzL3Bvc2l4MV9saW0uaCIgMiAzCiMgMTQ1ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoK
CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMSAzCiMgMTQ5ICIvdXNyL2lu
Y2x1ZGUvbGltaXRzLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5o
IiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVu
X2xpbS5oIiAyIDMKIyAxMzYgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMTM3ICIvdXNyL2luY2x1ZGUvYml0
cy94b3Blbl9saW0uaCIgMiAzCiMgMTUzICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDEz
MSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9p
bmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA4ICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMwojIDEyICIvdXNy
L2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUv
bGltaXRzLmgiIDIgMwojIDI0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDcHBTaGFyZWRB
bGxvY2F0b3IuaCIgMgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgbnNDcHBTaGFyZWRBbGxv
Y2F0b3IKCgoKCiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKICAg
ICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZm
ZXJlbmNlX3R5cGU7CgogICAgICB0eXBlZGVmIFQqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29u
c3QgVCogY29uc3RfcG9pbnRlcjsKCiAgICAgIHR5cGVkZWYgVCYgcmVmZXJlbmNlOwogICAgICB0
eXBlZGVmIGNvbnN0IFQmIGNvbnN0X3JlZmVyZW5jZTsKCgoKICAgICAgbnNDcHBTaGFyZWRBbGxv
Y2F0b3IoKSB7IH0KCgoKCgoKICAgICB+bnNDcHBTaGFyZWRBbGxvY2F0b3IoKSB7IH0KCgogICAg
ICBwb2ludGVyCiAgICAgIGFkZHJlc3MoIHJlZmVyZW5jZSByICkgY29uc3QKICAgICAgICB7CiAg
ICAgICAgICByZXR1cm4gJnI7CiAgICAgICAgfQoKICAgICAgY29uc3RfcG9pbnRlcgogICAgICBh
ZGRyZXNzKCBjb25zdF9yZWZlcmVuY2UgciApIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0
dXJuICZyOwogICAgICAgIH0KCiAgICAgIHBvaW50ZXIKICAgICAgYWxsb2NhdGUoIHNpemVfdHlw
ZSBuLCBjb25zdCB2b2lkKiA9MCApCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8IHBvaW50ZXIgPihuc01lbW9yeTo6QWxsb2Moc3RhdGljX2Nhc3Q8IFBSVWludDMy
ID4obipzaXplb2YoVCkpKSk7CiAgICAgICAgfQoKICAgICAgdm9pZAogICAgICBkZWFsbG9jYXRl
KCBwb2ludGVyIHAsIHNpemVfdHlwZSApCiAgICAgICAgewogICAgICAgICAgbnNNZW1vcnk6OkZy
ZWUocCk7CiAgICAgICAgfQoKICAgICAgdm9pZAogICAgICBjb25zdHJ1Y3QoIHBvaW50ZXIgcCwg
Y29uc3QgVCYgdmFsICkKICAgICAgICB7CiAgICAgICAgICBuZXcgKHApIFQodmFsKTsKICAgICAg
ICB9CgogICAgICB2b2lkCiAgICAgIGRlc3Ryb3koIHBvaW50ZXIgcCApCiAgICAgICAgewogICAg
ICAgICAgcC0+flQoKTsKICAgICAgICB9CgogICAgICBzaXplX3R5cGUKICAgICAgbWF4X3NpemUo
KSBjb25zdAogICAgICAgIHsKCgoKICAgICAgICAgIHJldHVybiAoMjE0NzQ4MzY0N0wgKiAyVUwg
KyAxKSAvIHNpemVvZihUKTsKCiAgICAgICAgfQojIDExMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zQ3BwU2hhcmVkQWxsb2NhdG9yLmgiCiAgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KUFJC
b29sCm9wZXJhdG9yPT0oIGNvbnN0IG5zQ3BwU2hhcmVkQWxsb2NhdG9yPFQ+JiwgY29uc3QgbnND
cHBTaGFyZWRBbGxvY2F0b3I8VD4mICkKICB7CiAgICByZXR1cm4gMTsKICB9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgVD4KUFJCb29sCm9wZXJhdG9yIT0oIGNvbnN0IG5zQ3BwU2hhcmVkQWxsb2NhdG9yPFQ+
JiwgY29uc3QgbnNDcHBTaGFyZWRBbGxvY2F0b3I8VD4mICkKICB7CiAgICByZXR1cm4gMDsKICB9
CiMgMzEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NSVC5oIiAyCiMgNDcgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0NSVC5oIgpleHRlcm4gY29uc3QgUFJVbmljaGFyIGtJc29MYXRp
bjFUb1VDUzJbMjU2XTsKIyA4NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ1JULmgiCmNs
YXNzIG5zQ1JUIHsKcHVibGljOgogIGVudW0gewogICAgVEFCPSdcdCcgLAogICAgTEY9J1xuJyAs
CiAgICBWVEFCPSdcdicgLAogICAgRkY9J1xmJyAsCiAgICBDUj0nXHInCiAgfTsKCgoKCgoKICBz
dGF0aWMgdm9pZCBtZW1jcHkodm9pZCogYURlc3QsIGNvbnN0IHZvaWQqIGFTcmMsIFBSVWludDMy
IGFDb3VudCkgewogICAge307CiAgICA6Om1lbWNweShhRGVzdCwgYVNyYywgKHNpemVfdClhQ291
bnQpOwogIH0KCiAgc3RhdGljIFBSSW50MzIgbWVtY21wKHZvaWQqIGFEZXN0LCBjb25zdCB2b2lk
KiBhU3JjLCBQUlVpbnQzMiBhQ291bnQpIHsKICAgIHt9OwogICAgcmV0dXJuIDo6bWVtY21wKGFE
ZXN0LCBhU3JjLCAoc2l6ZV90KWFDb3VudCk7CiAgfQoKICBzdGF0aWMgdm9pZCBtZW1tb3ZlKHZv
aWQqIGFEZXN0LCBjb25zdCB2b2lkKiBhU3JjLCBQUlVpbnQzMiBhQ291bnQpIHsKICAgIHt9Owog
ICAgOjptZW1tb3ZlKGFEZXN0LCBhU3JjLCAoc2l6ZV90KWFDb3VudCk7CiAgfQoKICBzdGF0aWMg
dm9pZCBtZW1zZXQodm9pZCogYURlc3QsIFBSVWludDggYUJ5dGUsIFBSVWludDMyIGFDb3VudCkg
ewogICAge307CiAgICA6Om1lbXNldChhRGVzdCwgYUJ5dGUsIGFDb3VudCk7CiAgfQoKICBzdGF0
aWMgdm9pZCB6ZXJvKHZvaWQqIGFEZXN0LCBQUlVpbnQzMiBhQ291bnQpIHsKICAgIHt9OwogICAg
OjptZW1zZXQoYURlc3QsIDAsIChzaXplX3QpYUNvdW50KTsKICB9CgoKCgoKICBzdGF0aWMgUFJV
aW50MzIgc3RybGVuKGNvbnN0IGNoYXIqIHMpIHsKICAgIHJldHVybiBQUlVpbnQzMig6OnN0cmxl
bihzKSk7CiAgfQoKCiAgc3RhdGljIFBSSW50MzIgc3RyY21wKGNvbnN0IGNoYXIqIHMxLCBjb25z
dCBjaGFyKiBzMikgewogICAgcmV0dXJuIFBSSW50MzIoUExfc3RyY21wKHMxLCBzMikpOwogIH0K
CiAgc3RhdGljIFBSSW50MzIgc3RybmNtcChjb25zdCBjaGFyKiBzMSwgY29uc3QgY2hhciogczIs
CiAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhTWF4TGVuKSB7CiAgICByZXR1cm4g
UFJJbnQzMihQTF9zdHJuY21wKHMxLCBzMiwgYU1heExlbikpOwogIH0KCgogIHN0YXRpYyBQUklu
dDMyIHN0cmNhc2VjbXAoY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyKSB7CiAgICByZXR1
cm4gUFJJbnQzMihQTF9zdHJjYXNlY21wKHMxLCBzMikpOwogIH0KCgogIHN0YXRpYyBQUkludDMy
IHN0cm5jYXNlY21wKGNvbnN0IGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwgUFJVaW50MzIgYU1h
eExlbikgewogICAgUFJJbnQzMiByZXN1bHQ9UFJJbnQzMihQTF9zdHJuY2FzZWNtcChzMSwgczIs
IGFNYXhMZW4pKTsKCgogICAgaWYocmVzdWx0PDApCiAgICAgIHJlc3VsdD0tMTsKICAgIHJldHVy
biByZXN1bHQ7CiAgfQoKICBzdGF0aWMgUFJJbnQzMiBzdHJuY21wKGNvbnN0IGNoYXIqIHMxLCBj
b25zdCBjaGFyKiBzMiwgUFJJbnQzMiBhTWF4TGVuKSB7CgogICAgUFJJbnQzMiBkaWZmID0gKChj
b25zdCB1bnNpZ25lZCBjaGFyKilzMSlbMF0gLSAoKGNvbnN0IHVuc2lnbmVkIGNoYXIqKXMyKVsw
XTsKICAgIGlmIChkaWZmICE9IDApIHJldHVybiBkaWZmOwogICAgcmV0dXJuIFBSSW50MzIoUExf
c3RybmNtcChzMSxzMix1bnNpZ25lZChhTWF4TGVuKSkpOwogIH0KCiAgc3RhdGljIGNoYXIqIHN0
cmR1cChjb25zdCBjaGFyKiBzdHIpIHsKICAgIHJldHVybiBQTF9zdHJkdXAoc3RyKTsKICB9Cgog
IHN0YXRpYyBjaGFyKiBzdHJuZHVwKGNvbnN0IGNoYXIqIHN0ciwgUFJVaW50MzIgbGVuKSB7CiAg
ICByZXR1cm4gUExfc3RybmR1cChzdHIsIGxlbik7CiAgfQoKICBzdGF0aWMgdm9pZCBmcmVlKGNo
YXIqIHN0cikgewogICAgUExfc3RyZnJlZShzdHIpOwogIH0KIyAxOTcgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0NSVC5oIgogIHN0YXRpYyBjaGFyKiBzdHJ0b2soY2hhciogc3RyLCBjb25z
dCBjaGFyKiBkZWxpbXMsIGNoYXIqICpuZXdTdHIpOwoKCiAgc3RhdGljIFBSVWludDMyIHN0cmxl
bihjb25zdCBQUlVuaWNoYXIqIHMpOwoKCiAgc3RhdGljIFBSSW50MzIgc3RyY21wKGNvbnN0IFBS
VW5pY2hhciogczEsIGNvbnN0IFBSVW5pY2hhciogczIpOwoKICBzdGF0aWMgUFJJbnQzMiBzdHJu
Y21wKGNvbnN0IFBSVW5pY2hhciogczEsIGNvbnN0IFBSVW5pY2hhciogczIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBQUlVpbnQzMiBhTWF4TGVuKTsKCgogIHN0YXRpYyBQUkludDMyIHN0cmNh
c2VjbXAoY29uc3QgUFJVbmljaGFyKiBzMSwgY29uc3QgUFJVbmljaGFyKiBzMik7CgogIHN0YXRp
YyBQUkludDMyIHN0cm5jYXNlY21wKGNvbnN0IFBSVW5pY2hhciogczEsIGNvbnN0IFBSVW5pY2hh
ciogczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYU1heExlbik7CgoK
ICBzdGF0aWMgUFJJbnQzMiBzdHJjbXAoY29uc3QgUFJVbmljaGFyKiBzMSwgY29uc3QgY2hhciog
czIpOwoKICBzdGF0aWMgUFJJbnQzMiBzdHJuY21wKGNvbnN0IFBSVW5pY2hhciogczEsIGNvbnN0
IGNoYXIqIHMyLAogICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYU1heExlbik7CgoK
ICBzdGF0aWMgUFJJbnQzMiBzdHJjYXNlY21wKGNvbnN0IFBSVW5pY2hhciogczEsIGNvbnN0IGNo
YXIqIHMyKTsKCiAgc3RhdGljIFBSSW50MzIgc3RybmNhc2VjbXAoY29uc3QgUFJVbmljaGFyKiBz
MSwgY29uc3QgY2hhciogczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIg
YU1heExlbik7CgoKCiAgc3RhdGljIFBSVW5pY2hhciogc3RyZHVwKGNvbnN0IFBSVW5pY2hhciog
c3RyKTsKCiAgc3RhdGljIFBSVW5pY2hhciogc3RybmR1cChjb25zdCBQUlVuaWNoYXIqIHN0ciwg
UFJVaW50MzIgbGVuKTsKCiAgc3RhdGljIHZvaWQgZnJlZShQUlVuaWNoYXIqIHN0cikgewogICAg
ICAgIG5zQ3BwU2hhcmVkQWxsb2NhdG9yPFBSVW5pY2hhcj4gc2hhcmVkX2FsbG9jYXRvcjsKICAg
ICAgICBzaGFyZWRfYWxsb2NhdG9yLmRlYWxsb2NhdGUoc3RyLCAwICk7CiAgfQoKCiAgc3RhdGlj
IFBSVWludDMyIEhhc2hDb2RlKGNvbnN0IGNoYXIqIHN0ciwgUFJVaW50MzIqIHJlc3VsdGluZ1N0
ckxlbiA9IDApOwoKCiAgc3RhdGljIFBSVWludDMyIEhhc2hDb2RlKGNvbnN0IFBSVW5pY2hhciog
c3RyLCBQUlVpbnQzMiogcmVzdWx0aW5nU3RyTGVuID0gMCk7CgoKICBzdGF0aWMgUFJVaW50MzIg
QnVmZmVySGFzaENvZGUoY29uc3QgY2hhciogc3RyLCBQUlVpbnQzMiBzdHJMZW4pOwoKCiAgc3Rh
dGljIFBSSW50MzIgYXRvaSggY29uc3QgUFJVbmljaGFyICpzdHJpbmcgKTsKCiAgc3RhdGljIFBS
VW5pY2hhciBUb1VwcGVyKFBSVW5pY2hhciBhQ2hhcik7CgogIHN0YXRpYyBQUlVuaWNoYXIgVG9M
b3dlcihQUlVuaWNoYXIgYUNoYXIpOwoKICBzdGF0aWMgUFJCb29sIElzVXBwZXIoUFJVbmljaGFy
IGFDaGFyKTsKCiAgc3RhdGljIFBSQm9vbCBJc0xvd2VyKFBSVW5pY2hhciBhQ2hhcik7CgogIHN0
YXRpYyBjaGFyIFRvVXBwZXIoY2hhciBhQ2hhcik7CgogIHN0YXRpYyBjaGFyIFRvTG93ZXIoY2hh
ciBhQ2hhcik7CgogIHN0YXRpYyBQUkJvb2wgSXNVcHBlcihjaGFyIGFDaGFyKTsKCiAgc3RhdGlj
IFBSQm9vbCBJc0xvd2VyKGNoYXIgYUNoYXIpOwoKICBzdGF0aWMgUFJCb29sIElzQXNjaWkoUFJV
bmljaGFyIGFDaGFyKTsKICBzdGF0aWMgUFJCb29sIElzQXNjaWkoUFJVbmljaGFyKiBhU3RyaW5n
KTsKICBzdGF0aWMgUFJCb29sIElzQXNjaWlBbHBoYShQUlVuaWNoYXIgYUNoYXIpOwogIHN0YXRp
YyBQUkJvb2wgSXNBc2NpaURpZ2l0KFBSVW5pY2hhciBhQ2hhcik7CiAgc3RhdGljIFBSQm9vbCBJ
c0FzY2lpU3BhY2UoUFJVbmljaGFyIGFDaGFyKTsKfTsKIyA1NCAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zU3RyaW5nMi5oIiAyCiMgNjMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0
cmluZzIuaCIKY2xhc3MgbnNJU2l6ZU9mSGFuZGxlcjsKCgoKCgpjbGFzcyBuc1N1YnN1bWVTdHI7
CgpjbGFzcyBuc1N0cmluZyA6CiAgcHVibGljIG5zQUZsYXRTdHJpbmcsCiAgcHVibGljIG5zU3Ry
IHsKCnByb3RlY3RlZDoKICB2aXJ0dWFsIGNvbnN0IG5zQnVmZmVySGFuZGxlPFBSVW5pY2hhcj4q
IEdldEZsYXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICB2aXJ0dWFsIGNvbnN0IFBSVW5pY2hhciog
R2V0UmVhZGFibGVGcmFnbWVudCggbnNSZWFkYWJsZUZyYWdtZW50PFBSVW5pY2hhcj4mLCBuc0Zy
YWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSBjb25zdDsKICB2aXJ0dWFsIFBSVW5pY2hhciogR2V0
V3JpdGFibGVGcmFnbWVudCggbnNXcml0YWJsZUZyYWdtZW50PFBSVW5pY2hhcj4mLCBuc0ZyYWdt
ZW50UmVxdWVzdCwgUFJVaW50MzIgKTsKCnB1YmxpYzoKICB2aXJ0dWFsIGNvbnN0IFBSVW5pY2hh
ciogZ2V0KCkgY29uc3QgeyByZXR1cm4gR2V0VW5pY29kZSgpOyB9CgpwdWJsaWM6CgoKCiAgbnNT
dHJpbmcoKTsKCgoKCgogIG5zU3RyaW5nKGNvbnN0IG5zU3RyaW5nJiBhU3RyaW5nKTsKCiAgZXhw
bGljaXQgbnNTdHJpbmcoY29uc3QgbnNBU3RyaW5nJik7CgogIGV4cGxpY2l0IG5zU3RyaW5nKGNv
bnN0IFBSVW5pY2hhciopOwogIG5zU3RyaW5nKGNvbnN0IFBSVW5pY2hhciosIFBSSW50MzIpOwoj
IDEwOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIGV4cGxpY2l0IG5z
U3RyaW5nKG5zU3Vic3VtZVN0ciYgYVN1YnN1bWVTdHIpOwoKCgoKCgogIHZpcnR1YWwgfm5zU3Ry
aW5nKCk7CgoKCgoKICB2aXJ0dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1M
ZW5ndGg7IH0KCgoKCgogIHZpcnR1YWwgdm9pZCBTaXplT2YobnNJU2l6ZU9mSGFuZGxlciogYUhh
bmRsZXIsIFBSVWludDMyKiBhUmVzdWx0KSBjb25zdDsKCgoKCgoKCiAgdm9pZCBTZXRMZW5ndGgo
UFJVaW50MzIgYUxlbmd0aCk7CgoKCgoKCiAgdm9pZCBTZXRDYXBhY2l0eShQUlVpbnQzMiBhTGVu
Z3RoKTsKIyAxNTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKICBQUkJv
b2wgSXNVbmljb2RlKHZvaWQpIGNvbnN0IHsKICAgIFBSQm9vbCByZXN1bHQ9UFJCb29sKG1DaGFy
U2l6ZT09ZVR3b0J5dGUpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiMgMTYzICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgY29uc3QgY2hhciogR2V0QnVmZmVyKHZvaWQp
IGNvbnN0OwogIGNvbnN0IFBSVW5pY2hhciogR2V0VW5pY29kZSh2b2lkKSBjb25zdDsKCgoKCiAg
UFJCb29sIFNldENoYXJBdChQUlVuaWNoYXIgYUNoYXIsUFJVaW50MzIgYW5JbmRleCk7CiMgMTgy
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgdm9pZCBUb0xvd2VyQ2Fz
ZSgpOwojIDE5MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIHZvaWQg
VG9Mb3dlckNhc2UobnNTdHJpbmcmIGFTdHJpbmcpIGNvbnN0OwoKCgoKCiAgdm9pZCBUb1VwcGVy
Q2FzZSgpOwoKCgoKCgoKICB2b2lkIFRvVXBwZXJDYXNlKG5zU3RyaW5nJiBhU3RyaW5nKSBjb25z
dDsKIyAyMTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKICB2b2lkIFN0
cmlwQ2hhcnMoIGNvbnN0IGNoYXIqIGFTZXQgKTsKICB2b2lkIFN0cmlwQ2hhciggUFJVbmljaGFy
IGFDaGFyLCBQUkludDMyIGFuT2Zmc2V0PTAgKTsKICB2b2lkIFN0cmlwQ2hhciggY2hhciBhQ2hh
ciwgUFJJbnQzMiBhbk9mZnNldD0wICkgeyBTdHJpcENoYXIoKFBSVW5pY2hhcikgKHVuc2lnbmVk
IGNoYXIpYUNoYXIsYW5PZmZzZXQpOyB9CiAgdm9pZCBTdHJpcENoYXIoIFBSSW50MzIgYW5JbnQs
IFBSSW50MzIgYW5PZmZzZXQ9MCApIHsgU3RyaXBDaGFyKChQUlVuaWNoYXIpYW5JbnQsYW5PZmZz
ZXQpOyB9CgoKCgoKCiAgdm9pZCBTdHJpcFdoaXRlc3BhY2UoKTsKCgoKCgoKICB2b2lkIFJlcGxh
Y2VDaGFyKCBQUlVuaWNoYXIgYW5PbGRDaGFyLCBQUlVuaWNoYXIgYU5ld0NoYXIgKTsKICB2b2lk
IFJlcGxhY2VDaGFyKCBjb25zdCBjaGFyKiBhU2V0LCBQUlVuaWNoYXIgYU5ld0NoYXIgKTsKCiAg
dm9pZCBSZXBsYWNlU3Vic3RyaW5nKCBjb25zdCBuc1N0cmluZyYgYVRhcmdldCwgY29uc3QgbnNT
dHJpbmcmIGFOZXdWYWx1ZSApOwogIHZvaWQgUmVwbGFjZVN1YnN0cmluZyggY29uc3QgUFJVbmlj
aGFyKiBhVGFyZ2V0LCBjb25zdCBQUlVuaWNoYXIqIGFOZXdWYWx1ZSApOwojIDI0OSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIHZvaWQgVHJpbShjb25zdCBjaGFyKiBh
U2V0LFBSQm9vbCBhRWxpbWluYXRlTGVhZGluZz0xLFBSQm9vbCBhRWxpbWluYXRlVHJhaWxpbmc9
MSxQUkJvb2wgYUlnbm9yZVF1b3Rlcz0wKTsKIyAyNjAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc1N0cmluZzIuaCIKICB2b2lkIENvbXByZXNzU2V0KGNvbnN0IGNoYXIqIGFTZXQsIFBSVW5p
Y2hhciBhQ2hhcixQUkJvb2wgYUVsaW1pbmF0ZUxlYWRpbmc9MSxQUkJvb2wgYUVsaW1pbmF0ZVRy
YWlsaW5nPTEpOwojIDI3MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgog
IHZvaWQgQ29tcHJlc3NXaGl0ZXNwYWNlKCBQUkJvb2wgYUVsaW1pbmF0ZUxlYWRpbmc9MSxQUkJv
b2wgYUVsaW1pbmF0ZVRyYWlsaW5nPTEpOwojIDI4MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zU3RyaW5nMi5oIgogIG5zU3RyaW5nKiBUb05ld1N0cmluZygpIGNvbnN0OwoKCgoKCgoKICBj
aGFyKiBUb05ld0NTdHJpbmcoKSBjb25zdDsKCgoKCgoKCiAgY2hhciogVG9OZXdVVEY4U3RyaW5n
KCkgY29uc3Q7CgoKCgoKCgogIFBSVW5pY2hhciogVG9OZXdVbmljb2RlKCkgY29uc3Q7CiMgMzE0
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgY2hhciogVG9DU3RyaW5n
KGNoYXIqIGFCdWYsUFJVaW50MzIgYUJ1Zkxlbmd0aCxQUlVpbnQzMiBhbk9mZnNldD0wKSBjb25z
dDsKCgoKCgoKICBmbG9hdCBUb0Zsb2F0KFBSSW50MzIqIGFFcnJvckNvZGUpIGNvbnN0OwoKCgoK
CgoKICBQUkludDMyIFRvSW50ZWdlcihQUkludDMyKiBhRXJyb3JDb2RlLFBSVWludDMyIGFSYWRp
eD0oMTApKSBjb25zdDsKIyAzNDUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIu
aCIKICBuc1N0cmluZyYgb3BlcmF0b3I9KCBjb25zdCBuc1N0cmluZyYgYVN0cmluZyApIHsgQXNz
aWduKGFTdHJpbmcpOyByZXR1cm4gKnRoaXM7IH0KICBuc1N0cmluZyYgb3BlcmF0b3I9KCBjb25z
dCBuc0FTdHJpbmcmIGFSZWFkYWJsZSApIHsgQXNzaWduKGFSZWFkYWJsZSk7IHJldHVybiAqdGhp
czsgfQoKICBuc1N0cmluZyYgb3BlcmF0b3I9KCBjb25zdCBQUlVuaWNoYXIqIGFQdHIgKSB7IEFz
c2lnbihhUHRyKTsgcmV0dXJuICp0aGlzOyB9CiAgbnNTdHJpbmcmIG9wZXJhdG9yPSggUFJVbmlj
aGFyIGFDaGFyICkgeyBBc3NpZ24oYUNoYXIpOyByZXR1cm4gKnRoaXM7IH0KCiAgdm9pZCBBc3Np
Z25XaXRoQ29udmVyc2lvbihjaGFyKTsKICB2b2lkIEFzc2lnbldpdGhDb252ZXJzaW9uKGNvbnN0
IGNoYXIqKTsKICB2b2lkIEFzc2lnbldpdGhDb252ZXJzaW9uKGNvbnN0IGNoYXIqLCBQUkludDMy
KTsKIyAzNjQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKICB2b2lkIEFw
cGVuZEludChQUkludDMyLCBQUkludDMyPTEwKTsKICB2b2lkIEFwcGVuZEZsb2F0KGRvdWJsZSk7
CiAgdm9pZCBBcHBlbmRXaXRoQ29udmVyc2lvbihjb25zdCBjaGFyKiwgUFJJbnQzMj0tMSk7CiAg
dm9pZCBBcHBlbmRXaXRoQ29udmVyc2lvbihjaGFyKTsKCiAgdmlydHVhbCB2b2lkIGRvX0FwcGVu
ZEZyb21FbGVtZW50KCBQUlVuaWNoYXIgKTsKCgoKICB2b2lkIEluc2VydFdpdGhDb252ZXJzaW9u
KGNvbnN0IGNoYXIqLCBQUlVpbnQzMiwgUFJJbnQzMj0tMSk7CiMgMzg5ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgUFJJbnQzMiBGaW5kKGNvbnN0IG5zU3RyaW5nJiBh
U3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYW5PZmZzZXQ9MCxQUkludDMyIGFD
b3VudD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBGaW5kKGNvbnN0IG5zU3RyJiBhU3RyaW5nLFBSQm9v
bCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYW5PZmZzZXQ9MCxQUkludDMyIGFDb3VudD0tMSkgY29u
c3Q7CiAgUFJJbnQzMiBGaW5kKGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNl
PTAsUFJJbnQzMiBhbk9mZnNldD0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQUkludDMy
IEZpbmQoY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50
MzIgYW5PZmZzZXQ9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiMgNDA1ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgUFJJbnQzMiBGaW5kQ2hhcihQUlVuaWNoYXIg
YUNoYXIsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0wLFBSSW50MzIgYUNv
dW50PS0xKSBjb25zdDsKIyA0MTQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIu
aCIKICBQUkludDMyIEZpbmRDaGFySW5TZXQoY29uc3QgY2hhciogYVN0cmluZyxQUkludDMyIGFu
T2Zmc2V0PTApIGNvbnN0OwogIFBSSW50MzIgRmluZENoYXJJblNldChjb25zdCBQUlVuaWNoYXIq
IGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNldD0wKSBjb25zdDsKICBQUkludDMyIEZpbmRDaGFySW5T
ZXQoY29uc3QgbnNTdHImIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNldD0wKSBjb25zdDsKIyA0Mjcg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKICBQUkludDMyIFJGaW5kKGNv
bnN0IGNoYXIqIGFDU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYW5PZmZzZXQ9
LTEsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwogIFBSSW50MzIgUkZpbmQoY29uc3QgbnNTdHJp
bmcmIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0tMSxQUklu
dDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBSRmluZChjb25zdCBuc1N0ciYgYVN0cmlu
ZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PS0xLFBSSW50MzIgYUNvdW50
PS0xKSBjb25zdDsKICBQUkludDMyIFJGaW5kKGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyxQUkJv
b2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PS0xLFBSSW50MzIgYUNvdW50PS0xKSBj
b25zdDsKIyA0NDMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKICBQUklu
dDMyIFJGaW5kQ2hhcihQUlVuaWNoYXIgYUNoYXIsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQz
MiBhbk9mZnNldD0tMSxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiMgNDUyICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgUFJJbnQzMiBSRmluZENoYXJJblNldChjb25z
dCBjaGFyKiBhU3RyaW5nLFBSSW50MzIgYW5PZmZzZXQ9LTEpIGNvbnN0OwogIFBSSW50MzIgUkZp
bmRDaGFySW5TZXQoY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLFBSSW50MzIgYW5PZmZzZXQ9LTEp
IGNvbnN0OwogIFBSSW50MzIgUkZpbmRDaGFySW5TZXQoY29uc3QgbnNTdHImIGFTdHJpbmcsUFJJ
bnQzMiBhbk9mZnNldD0tMSkgY29uc3Q7CiMgNDcwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNTdHJpbmcyLmgiCiAgUFJJbnQzMiBDb21wYXJlV2l0aENvbnZlcnNpb24oY29uc3QgY2hhciog
YVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAg
UFJJbnQzMiBDb21wYXJlV2l0aENvbnZlcnNpb24oY29uc3QgbnNTdHJpbmcmIGFTdHJpbmcsUFJC
b29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwogIFBSSW50MzIgQ29t
cGFyZVdpdGhDb252ZXJzaW9uKGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyxQUkJvb2wgYUlnbm9y
ZUNhc2U9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CgogIFBSQm9vbCBFcXVhbHNXaXRoQ29u
dmVyc2lvbihjb25zdCBuc1N0cmluZyAmYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUklu
dDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJCb29sIEVxdWFsc1dpdGhDb252ZXJzaW9uKGNvbnN0
IGNoYXIqIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNv
bnN0OwogIFBSQm9vbCBFcXVhbHNXaXRoQ29udmVyc2lvbihjb25zdCBQUlVuaWNoYXIqIGFTdHJp
bmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwogIFBSQm9v
bCBFcXVhbHNBdG9tKCBuc0lBdG9tKiBhbkF0b20sUFJCb29sIGFJZ25vcmVDYXNlKSBjb25zdDsK
CiAgUFJCb29sIEVxdWFsc0lnbm9yZUNhc2UoY29uc3QgbnNTdHJpbmcmIGFTdHJpbmcpIGNvbnN0
OwogIFBSQm9vbCBFcXVhbHNJZ25vcmVDYXNlKGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJbnQzMiBh
Q291bnQ9LTEpIGNvbnN0OwogIFBSQm9vbCBFcXVhbHNJZ25vcmVDYXNlKCBuc0lBdG9tICphQXRv
bSkgY29uc3Q7CiMgNDkwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAg
UFJCb29sIElzQVNDSUkoY29uc3QgUFJVbmljaGFyKiBhQnVmZmVyPTApOwoKICB2b2lkIERlYnVn
RHVtcCh2b2lkKSBjb25zdDsKCgoKCgoKCiAgc3RhdGljIFBSQm9vbCBJc1NwYWNlKFBSVW5pY2hh
ciBjaCk7CgoKCgoKCgogIHN0YXRpYyBQUkJvb2wgSXNBbHBoYShQUlVuaWNoYXIgY2gpOwoKCgoK
CgoKICBzdGF0aWMgUFJCb29sIElzRGlnaXQoUFJVbmljaGFyIGNoKTsKCnByaXZhdGU6CgoKICB2
b2lkIG9wZXJhdG9yPSggY2hhciApOwogIHZvaWQgQXNzaWduV2l0aENvbnZlcnNpb24oIFBSVW5p
Y2hhciApOwogIHZvaWQgQXNzaWduV2l0aENvbnZlcnNpb24oIGNvbnN0IFBSVW5pY2hhciosIFBS
SW50MzI9LTEgKTsKICB2b2lkIEFwcGVuZFdpdGhDb252ZXJzaW9uKCBQUlVuaWNoYXIgKTsKICB2
b2lkIEFwcGVuZFdpdGhDb252ZXJzaW9uKCBjb25zdCBQUlVuaWNoYXIqLCBQUkludDMyPS0xICk7
CiAgdm9pZCBJbnNlcnRXaXRoQ29udmVyc2lvbiggY29uc3QgUFJVbmljaGFyKiwgUFJVaW50MzIs
IFBSSW50MzI9LTEgKTsKfTsKCgoKCmV4dGVybiBpbnQgZnB1dHMoY29uc3QgbnNTdHJpbmcmIGFT
dHJpbmcsIEZJTEUqIG91dCk7CiMgNTQyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJp
bmcyLmgiCmNsYXNzIG5zQXV0b1N0cmluZyA6IHB1YmxpYyBuc1N0cmluZyB7CnB1YmxpYzoKCiAg
ICB2aXJ0dWFsIH5uc0F1dG9TdHJpbmcoKTsKICAgIG5zQXV0b1N0cmluZygpOwogICAgbnNBdXRv
U3RyaW5nKGNvbnN0IG5zQXV0b1N0cmluZyYgYVN0cmluZyk7CiAgICBleHBsaWNpdCBuc0F1dG9T
dHJpbmcoY29uc3QgbnNBU3RyaW5nJiBhU3RyaW5nKTsKICAgIGV4cGxpY2l0IG5zQXV0b1N0cmlu
Zyhjb25zdCBuc1N0cmluZyYgYVN0cmluZyk7CiAgICBleHBsaWNpdCBuc0F1dG9TdHJpbmcoY29u
c3QgUFJVbmljaGFyKiBhU3RyaW5nKTsKICAgIG5zQXV0b1N0cmluZyhjb25zdCBQUlVuaWNoYXIq
IGFTdHJpbmcsUFJJbnQzMiBhTGVuZ3RoKTsKICAgIGV4cGxpY2l0IG5zQXV0b1N0cmluZyhQUlVu
aWNoYXIgYUNoYXIpOwogICAgZXhwbGljaXQgbnNBdXRvU3RyaW5nKGNvbnN0IENCdWZEZXNjcmlw
dG9yJiBhQnVmZmVyKTsKCgoKCiAgICBleHBsaWNpdCBuc0F1dG9TdHJpbmcobnNTdWJzdW1lU3Ry
JiBhU3Vic3VtZVN0cik7CgoKCiAgICBuc0F1dG9TdHJpbmcmIG9wZXJhdG9yPSggY29uc3QgbnNB
dXRvU3RyaW5nJiBhU3RyaW5nICkgeyBBc3NpZ24oYVN0cmluZyk7IHJldHVybiAqdGhpczsgfQog
IHByaXZhdGU6CiAgICB2b2lkIG9wZXJhdG9yPSggY2hhciApOwogIHB1YmxpYzoKICAgIG5zQXV0
b1N0cmluZyYgb3BlcmF0b3I9KCBjb25zdCBuc0FTdHJpbmcmIGFSZWFkYWJsZSApIHsgQXNzaWdu
KGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsgfQoKICAgIG5zQXV0b1N0cmluZyYgb3BlcmF0b3I9
KCBjb25zdCBQUlVuaWNoYXIqIGFQdHIgKSB7IEFzc2lnbihhUHRyKTsgcmV0dXJuICp0aGlzOyB9
CiAgICBuc0F1dG9TdHJpbmcmIG9wZXJhdG9yPSggUFJVbmljaGFyIGFDaGFyICkgeyBBc3NpZ24o
YUNoYXIpOyByZXR1cm4gKnRoaXM7IH0KCgoKCgogICAgdmlydHVhbCB2b2lkIFNpemVPZihuc0lT
aXplT2ZIYW5kbGVyKiBhSGFuZGxlciwgUFJVaW50MzIqIGFSZXN1bHQpIGNvbnN0OwoKICAgIGNo
YXIgbUJ1ZmZlcltrRGVmYXVsdFN0cmluZ1NpemU8PGVUd29CeXRlXTsKfTsKCgoKY2xhc3MgTlNf
Q29udmVydEFTQ0lJdG9VQ1MyCiAgICAgIDogcHVibGljIG5zQXV0b1N0cmluZwoKCgogIHsKICAg
IHB1YmxpYzoKICAgICAgZXhwbGljaXQgTlNfQ29udmVydEFTQ0lJdG9VQ1MyKCBjb25zdCBjaGFy
KiApOwogICAgICBOU19Db252ZXJ0QVNDSUl0b1VDUzIoIGNvbnN0IGNoYXIqLCBQUlVpbnQzMiAp
OwogICAgICBleHBsaWNpdCBOU19Db252ZXJ0QVNDSUl0b1VDUzIoIGNoYXIgKTsKIyA2MDAgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKICAgIHByaXZhdGU6CgogICAgICBO
U19Db252ZXJ0QVNDSUl0b1VDUzIoIFBSVW5pY2hhciApOwogIH07CgpjbGFzcyBOU19Db252ZXJ0
VVRGOHRvVUNTMgogICAgICA6IHB1YmxpYyBuc0F1dG9TdHJpbmcKICB7CiAgICBwdWJsaWM6CiAg
ICAgIGV4cGxpY2l0CiAgICAgIE5TX0NvbnZlcnRVVEY4dG9VQ1MyKCBjb25zdCBjaGFyKiBhQ1N0
cmluZyApCiAgICAgICAgewogICAgICAgICAgSW5pdCggYUNTdHJpbmcsIH5QUlVpbnQzMigwKSAp
OwogICAgICAgIH0KCiAgICAgIE5TX0NvbnZlcnRVVEY4dG9VQ1MyKCBjb25zdCBjaGFyKiBhQ1N0
cmluZywgUFJVaW50MzIgYUxlbmd0aCApCiAgICAgICAgewogICAgICAgICAgSW5pdCggYUNTdHJp
bmcsIGFMZW5ndGggKTsKICAgICAgICB9CgogICAgICBleHBsaWNpdAogICAgICBOU19Db252ZXJ0
VVRGOHRvVUNTMiggY2hhciBhQ2hhciApCiAgICAgICAgewogICAgICAgICAgSW5pdCggJmFDaGFy
LCAxICk7CiAgICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdm9pZCBJbml0KCBjb25zdCBj
aGFyKiBhQ1N0cmluZywgUFJVaW50MzIgYUxlbmd0aCApOwoKICAgIHByaXZhdGU6CiAgICAgIE5T
X0NvbnZlcnRVVEY4dG9VQ1MyKCBQUlVuaWNoYXIgKTsKICB9OwojIDY0NiAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgpjbGFzcyBuc1N1YnN1bWVTdHIgOiBwdWJsaWMgbnNT
dHJpbmcgewpwdWJsaWM6CiAgbnNTdWJzdW1lU3RyKCk7CiAgZXhwbGljaXQgbnNTdWJzdW1lU3Ry
KG5zU3RyJiBhU3RyaW5nKTsKICBuc1N1YnN1bWVTdHIoUFJVbmljaGFyKiBhU3RyaW5nLFBSQm9v
bCBhc3N1bWVPd25lcnNoaXAsUFJJbnQzMiBhTGVuZ3RoPS0xKTsKICBuc1N1YnN1bWVTdHIoY2hh
ciogYVN0cmluZyxQUkJvb2wgYXNzdW1lT3duZXJzaGlwLFBSSW50MzIgYUxlbmd0aD0tMSk7CiAg
aW50IFN1YnN1bWUoUFJVbmljaGFyKiBhU3RyaW5nLFBSQm9vbCBhc3N1bWVPd25lcnNoaXAsUFJJ
bnQzMiBhTGVuZ3RoPS0xKTsKCiAgbnNTdWJzdW1lU3RyJiBvcGVyYXRvcj0oIGNvbnN0IG5zU3Vi
c3VtZVN0ciYgYVJlYWRhYmxlICkgeyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9
CiAgbnNTdWJzdW1lU3RyJiBvcGVyYXRvcj0oIGNvbnN0IG5zQVN0cmluZyYgYVJlYWRhYmxlICkg
eyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9CgogIG5zU3Vic3VtZVN0ciYgb3Bl
cmF0b3I9KCBjb25zdCBQUlVuaWNoYXIqIGFQdHIgKSB7IEFzc2lnbihhUHRyKTsgcmV0dXJuICp0
aGlzOyB9CiAgbnNTdWJzdW1lU3RyJiBvcGVyYXRvcj0oIFBSVW5pY2hhciBhQ2hhciApIHsgQXNz
aWduKGFDaGFyKTsgcmV0dXJuICp0aGlzOyB9CnByaXZhdGU6CiAgdm9pZCBvcGVyYXRvcj0oIGNo
YXIgKTsKfTsKIyA0NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDIKIyAx
ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJ0
eXBlcy5oIiAxCiMgNDggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAyCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgNDkgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAyCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDUwICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc1N0ci5oIiAxCiMgNTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0
cmluZy5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUF0b20uaCIgMQojIDUy
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMgoKIyAxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNBU3RyaW5nLmgiIDEKIyA1NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zU3RyaW5nLmgiIDIKIyA2MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5n
LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVdyaXRhYmxlU3RyaW5nLmgiIDEK
IyA2MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDIKCgoKY2xhc3MgbnNT
dWJzdW1lQ1N0cjsKCmNsYXNzIG5zQ1N0cmluZyA6CiAgcHVibGljIG5zQUZsYXRDU3RyaW5nLAog
IHB1YmxpYyBuc1N0ciB7Cgpwcm90ZWN0ZWQ6CiAgdmlydHVhbCBjb25zdCBuc0J1ZmZlckhhbmRs
ZTxjaGFyPiogR2V0RmxhdEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogIHZpcnR1YWwgY29uc3QgY2hh
ciogR2V0UmVhZGFibGVGcmFnbWVudCggbnNSZWFkYWJsZUZyYWdtZW50PGNoYXI+JiwgbnNGcmFn
bWVudFJlcXVlc3QsIFBSVWludDMyICkgY29uc3Q7CiAgdmlydHVhbCBjaGFyKiBHZXRXcml0YWJs
ZUZyYWdtZW50KCBuc1dyaXRhYmxlRnJhZ21lbnQ8Y2hhcj4mLCBuc0ZyYWdtZW50UmVxdWVzdCwg
UFJVaW50MzIgKTsKCnB1YmxpYzoKICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGdldCgpIGNvbnN0IHsg
cmV0dXJuIG1TdHI7IH0KCnB1YmxpYzoKCgoKICBuc0NTdHJpbmcoKTsKCgoKCgogIG5zQ1N0cmlu
Zyhjb25zdCBuc0NTdHJpbmcmIGFTdHJpbmcpOwoKICBleHBsaWNpdCBuc0NTdHJpbmcoIGNvbnN0
IG5zQUNTdHJpbmcmICk7CgogIGV4cGxpY2l0IG5zQ1N0cmluZyhjb25zdCBjaGFyKik7CiAgbnND
U3RyaW5nKGNvbnN0IGNoYXIqLCBQUkludDMyKTsKCgoKCgogIGV4cGxpY2l0IG5zQ1N0cmluZyhu
c1N1YnN1bWVDU3RyJiBhU3Vic3VtZVN0cik7CgoKCgoKICB2aXJ0dWFsIH5uc0NTdHJpbmcoKTsK
CgoKCgogIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbUxlbmd0aDsg
fQoKCgoKCiAgdmlydHVhbCB2b2lkIFNpemVPZihuc0lTaXplT2ZIYW5kbGVyKiBhSGFuZGxlciwg
UFJVaW50MzIqIGFSZXN1bHQpIGNvbnN0OwojIDEyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zU3RyaW5nLmgiCiAgdm9pZCBTZXRMZW5ndGgoUFJVaW50MzIgYUxlbmd0aCk7CgoKCgoKCiAg
dm9pZCBTZXRDYXBhY2l0eShQUlVpbnQzMiBhTGVuZ3RoKTsKCgoKCgogIFBSQm9vbCBTZXRDaGFy
QXQoUFJVbmljaGFyIGFDaGFyLFBSVWludDMyIGFuSW5kZXgpOwojIDE1MSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgdm9pZCBUb0xvd2VyQ2FzZSgpOwojIDE2MCAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgdm9pZCBUb0xvd2VyQ2FzZShuc0NT
dHJpbmcmIGFTdHJpbmcpIGNvbnN0OwoKCgoKCiAgdm9pZCBUb1VwcGVyQ2FzZSgpOwoKCgoKCgoK
ICB2b2lkIFRvVXBwZXJDYXNlKG5zQ1N0cmluZyYgYVN0cmluZykgY29uc3Q7CiMgMTg0ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICB2b2lkIFN0cmlwQ2hhcnMoY29uc3Qg
Y2hhciogYVNldCk7CiAgdm9pZCBTdHJpcENoYXIoUFJVbmljaGFyIGFDaGFyLFBSSW50MzIgYW5P
ZmZzZXQ9MCk7CiAgdm9pZCBTdHJpcENoYXIoY2hhciBhQ2hhcixQUkludDMyIGFuT2Zmc2V0PTAp
IHsgU3RyaXBDaGFyKChQUlVuaWNoYXIpICh1bnNpZ25lZCBjaGFyKWFDaGFyLGFuT2Zmc2V0KTsg
fQoKCgoKCgogIHZvaWQgU3RyaXBXaGl0ZXNwYWNlKCk7CgoKCgoKCiAgdm9pZCBSZXBsYWNlQ2hh
cihQUlVuaWNoYXIgYU9sZENoYXIsUFJVbmljaGFyIGFOZXdDaGFyKTsKICB2b2lkIFJlcGxhY2VD
aGFyKGNvbnN0IGNoYXIqIGFTZXQsUFJVbmljaGFyIGFOZXdDaGFyKTsKCiAgdm9pZCBSZXBsYWNl
U3Vic3RyaW5nKGNvbnN0IG5zQ1N0cmluZyYgYVRhcmdldCxjb25zdCBuc0NTdHJpbmcmIGFOZXdW
YWx1ZSk7CiAgdm9pZCBSZXBsYWNlU3Vic3RyaW5nKGNvbnN0IGNoYXIqIGFUYXJnZXQsY29uc3Qg
Y2hhciogYU5ld1ZhbHVlKTsKIyAyMTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmlu
Zy5oIgogIHZvaWQgVHJpbShjb25zdCBjaGFyKiBhU2V0LFBSQm9vbCBhRWxpbWluYXRlTGVhZGlu
Zz0xLFBSQm9vbCBhRWxpbWluYXRlVHJhaWxpbmc9MSxQUkJvb2wgYUlnbm9yZVF1b3Rlcz0wKTsK
IyAyMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgogIHZvaWQgQ29tcHJl
c3NTZXQoY29uc3QgY2hhciogYVNldCwgUFJVbmljaGFyIGFDaGFyLFBSQm9vbCBhRWxpbWluYXRl
TGVhZGluZz0xLFBSQm9vbCBhRWxpbWluYXRlVHJhaWxpbmc9MSk7CiMgMjM5ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICB2b2lkIENvbXByZXNzV2hpdGVzcGFjZSggUFJC
b29sIGFFbGltaW5hdGVMZWFkaW5nPTEsUFJCb29sIGFFbGltaW5hdGVUcmFpbGluZz0xKTsKCgoK
CgogIG9wZXJhdG9yIGNvbnN0IGNoYXIqKCkgY29uc3Qge3JldHVybiAoY29uc3QgY2hhciopbVN0
cjt9CgoKCgoKCgogIG5zQ1N0cmluZyogVG9OZXdTdHJpbmcoKSBjb25zdDsKCgoKCgoKCiAgY2hh
ciogVG9OZXdDU3RyaW5nKCkgY29uc3Q7CgoKCgoKCgogIFBSVW5pY2hhciogVG9OZXdVbmljb2Rl
KCkgY29uc3Q7CiMgMjc4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICBj
aGFyKiBUb0NTdHJpbmcoY2hhciogYUJ1ZixQUlVpbnQzMiBhQnVmTGVuZ3RoLFBSVWludDMyIGFu
T2Zmc2V0PTApIGNvbnN0OwoKCgoKCgogIGZsb2F0IFRvRmxvYXQoUFJJbnQzMiogYUVycm9yQ29k
ZSkgY29uc3Q7CiMgMjk0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICBQ
UkludDMyIFRvSW50ZWdlcihQUkludDMyKiBhRXJyb3JDb2RlLFBSVWludDMyIGFSYWRpeD0oMTAp
KSBjb25zdDsKIyAzMTAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgogIG5z
Q1N0cmluZyYgb3BlcmF0b3I9KCBjb25zdCBuc0NTdHJpbmcmIGFTdHJpbmcgKSB7IEFzc2lnbihh
U3RyaW5nKTsgcmV0dXJuICp0aGlzOyB9CiAgbnNDU3RyaW5nJiBvcGVyYXRvcj0oIGNvbnN0IG5z
QUNTdHJpbmcmIGFSZWFkYWJsZSApIHsgQXNzaWduKGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsg
fQoKICBuc0NTdHJpbmcmIG9wZXJhdG9yPSggY29uc3QgY2hhciogYVB0ciApIHsgQXNzaWduKGFQ
dHIpOyByZXR1cm4gKnRoaXM7IH0KICBuc0NTdHJpbmcmIG9wZXJhdG9yPSggY2hhciBhQ2hhciAp
IHsgQXNzaWduKGFDaGFyKTsgcmV0dXJuICp0aGlzOyB9CgogIHZvaWQgQXNzaWduV2l0aENvbnZl
cnNpb24oY29uc3QgUFJVbmljaGFyKixQUkludDMyPS0xKTsKICB2b2lkIEFzc2lnbldpdGhDb252
ZXJzaW9uKCBjb25zdCBuc1N0cmluZyYgYVN0cmluZyApOwogIHZvaWQgQXNzaWduV2l0aENvbnZl
cnNpb24oIGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZyApOwogIHZvaWQgQXNzaWduV2l0aENvbnZl
cnNpb24oUFJVbmljaGFyKTsKIyAzMzEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmlu
Zy5oIgogIHZvaWQgQXBwZW5kV2l0aENvbnZlcnNpb24oY29uc3QgbnNTdHJpbmcmLCBQUkludDMy
PS0xKTsKICB2b2lkIEFwcGVuZFdpdGhDb252ZXJzaW9uKFBSVW5pY2hhciBhQ2hhcik7CiAgdm9p
ZCBBcHBlbmRXaXRoQ29udmVyc2lvbiggY29uc3QgbnNBU3RyaW5nJiBhU3RyaW5nICk7CiAgdm9p
ZCBBcHBlbmRXaXRoQ29udmVyc2lvbihjb25zdCBQUlVuaWNoYXIqLCBQUkludDMyPS0xKTsKCiAg
dm9pZCBBcHBlbmRJbnQoUFJJbnQzMiBhSW50ZWdlcixQUkludDMyIGFSYWRpeD0xMCk7CiAgdm9p
ZCBBcHBlbmRGbG9hdCggZG91YmxlIGFGbG9hdCApOwoKCiAgdm9pZCBJbnNlcnRXaXRoQ29udmVy
c2lvbihQUlVuaWNoYXIgYUNoYXIsUFJVaW50MzIgYW5PZmZzZXQpOwojIDM2MyAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgUFJJbnQzMiBGaW5kKGNvbnN0IG5zU3RyJiBh
U3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYW5PZmZzZXQ9MCxQUkludDMyIGFD
b3VudD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBGaW5kKGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJCb29s
IGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25z
dDsKICBQUkludDMyIEZpbmQoY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdub3Jl
Q2FzZT0wLFBSSW50MzIgYW5PZmZzZXQ9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiMgMzc2
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICBQUkludDMyIEZpbmRDaGFy
KFBSVW5pY2hhciBhQ2hhcixQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PTAs
UFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwojIDM4NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zU3RyaW5nLmgiCiAgUFJJbnQzMiBGaW5kQ2hhckluU2V0KGNvbnN0IGNoYXIqIGFTdHJpbmcs
UFJJbnQzMiBhbk9mZnNldD0wKSBjb25zdDsKICBQUkludDMyIEZpbmRDaGFySW5TZXQoY29uc3Qg
UFJVbmljaGFyKiBhU3RyaW5nLFBSSW50MzIgYW5PZmZzZXQ9MCkgY29uc3Q7CiAgUFJJbnQzMiBG
aW5kQ2hhckluU2V0KGNvbnN0IG5zU3RyJiBhU3RyaW5nLFBSSW50MzIgYW5PZmZzZXQ9MCkgY29u
c3Q7CiMgMzk3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICBQUkludDMy
IFJGaW5kKGNvbnN0IGNoYXIqIGFDU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIg
YW5PZmZzZXQ9LTEsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwogIFBSSW50MzIgUkZpbmQoY29u
c3QgbnNTdHImIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0t
MSxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBSRmluZChjb25zdCBQUlVuaWNo
YXIqIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0tMSxQUklu
dDMyIGFDb3VudD0tMSkgY29uc3Q7CiMgNDEwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNT
dHJpbmcuaCIKICBQUkludDMyIFJGaW5kQ2hhcihQUlVuaWNoYXIgYUNoYXIsUFJCb29sIGFJZ25v
cmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0tMSxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiMg
NDE5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICBQUkludDMyIFJGaW5k
Q2hhckluU2V0KGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNldD0tMSkgY29uc3Q7
CiAgUFJJbnQzMiBSRmluZENoYXJJblNldChjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsUFJJbnQz
MiBhbk9mZnNldD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBSRmluZENoYXJJblNldChjb25zdCBuc1N0
ciYgYVN0cmluZyxQUkludDMyIGFuT2Zmc2V0PS0xKSBjb25zdDsKIyA0MzcgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgogIFBSSW50MzIgQ29tcGFyZVdpdGhDb252ZXJzaW9u
KGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFD
b3VudD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBDb21wYXJlV2l0aENvbnZlcnNpb24oY29uc3QgY2hh
ciogYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7
CgogIFBSQm9vbCBFcXVhbHNXaXRoQ29udmVyc2lvbihjb25zdCBuc1N0cmluZyAmYVN0cmluZyxQ
UkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJCb29sIEVx
dWFsc1dpdGhDb252ZXJzaW9uKGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNl
PTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwogIFBSQm9vbCBFcXVhbHNXaXRoQ29udmVyc2lv
bihjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBh
Q291bnQ9LTEpIGNvbnN0OwoKICBQUkJvb2wgRXF1YWxzSWdub3JlQ2FzZShjb25zdCBjaGFyKiBh
U3RyaW5nLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQUkJvb2wgRXF1YWxzSWdub3JlQ2Fz
ZShjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwoKCiAg
dm9pZCBEZWJ1Z0R1bXAodm9pZCkgY29uc3Q7Cgpwcml2YXRlOgoKCiAgdm9pZCBvcGVyYXRvcj0o
IFBSVW5pY2hhciApOwogIHZvaWQgQXNzaWduV2l0aENvbnZlcnNpb24oIGNoYXIgKTsKICB2b2lk
IEFzc2lnbldpdGhDb252ZXJzaW9uKCBjb25zdCBjaGFyKiwgUFJJbnQzMj0tMSApOwogIHZvaWQg
QXBwZW5kV2l0aENvbnZlcnNpb24oIGNoYXIgKTsKICB2b2lkIEluc2VydFdpdGhDb252ZXJzaW9u
KCBjaGFyLCBQUlVpbnQzMiApOwp9OwoKCgoKZXh0ZXJuIGludCBmcHV0cyhjb25zdCBuc0NTdHJp
bmcmIGFTdHJpbmcsIEZJTEUqIG91dCk7CiMgNDc0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNTdHJpbmcuaCIKY2xhc3MgbnNDQXV0b1N0cmluZyA6IHB1YmxpYyBuc0NTdHJpbmcgewpwdWJs
aWM6CgogICAgdmlydHVhbCB+bnNDQXV0b1N0cmluZygpOwoKICAgIG5zQ0F1dG9TdHJpbmcoKTsK
ICAgIGV4cGxpY2l0IG5zQ0F1dG9TdHJpbmcoY29uc3QgbnNDU3RyaW5nJiApOwogICAgZXhwbGlj
aXQgbnNDQXV0b1N0cmluZyhjb25zdCBuc0FDU3RyaW5nJiBhU3RyaW5nKTsKICAgIGV4cGxpY2l0
IG5zQ0F1dG9TdHJpbmcoY29uc3QgY2hhciogYVN0cmluZyk7CiAgICBuc0NBdXRvU3RyaW5nKGNv
bnN0IGNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhTGVuZ3RoKTsKICAgIGV4cGxpY2l0IG5zQ0F1dG9T
dHJpbmcoY29uc3QgQ0J1ZkRlc2NyaXB0b3ImIGFCdWZmZXIpOwoKCgoKICAgIGV4cGxpY2l0IG5z
Q0F1dG9TdHJpbmcobnNTdWJzdW1lQ1N0ciYgYVN1YnN1bWVTdHIpOwoKCgogICAgbnNDQXV0b1N0
cmluZyYgb3BlcmF0b3I9KCBjb25zdCBuc0NBdXRvU3RyaW5nJiBhU3RyaW5nICkgeyBBc3NpZ24o
YVN0cmluZyk7IHJldHVybiAqdGhpczsgfQogIHByaXZhdGU6CiAgICB2b2lkIG9wZXJhdG9yPSgg
UFJVbmljaGFyICk7CiAgcHVibGljOgogICAgbnNDQXV0b1N0cmluZyYgb3BlcmF0b3I9KCBjb25z
dCBuc0FDU3RyaW5nJiBhUmVhZGFibGUgKSB7IEFzc2lnbihhUmVhZGFibGUpOyByZXR1cm4gKnRo
aXM7IH0KCiAgICBuc0NBdXRvU3RyaW5nJiBvcGVyYXRvcj0oIGNvbnN0IGNoYXIqIGFQdHIgKSB7
IEFzc2lnbihhUHRyKTsgcmV0dXJuICp0aGlzOyB9CiAgICBuc0NBdXRvU3RyaW5nJiBvcGVyYXRv
cj0oIGNoYXIgYUNoYXIgKSB7IEFzc2lnbihhQ2hhcik7IHJldHVybiAqdGhpczsgfQoKCgoKCiAg
ICB2aXJ0dWFsIHZvaWQgU2l6ZU9mKG5zSVNpemVPZkhhbmRsZXIqIGFIYW5kbGVyLCBQUlVpbnQz
MiogYVJlc3VsdCkgY29uc3Q7CgogICAgY2hhciBtQnVmZmVyW2tEZWZhdWx0U3RyaW5nU2l6ZV07
Cn07CgoKCgoKCmNsYXNzIE5TX0NvbnZlcnRVQ1MydG9VVEY4CiAgICAgIDogcHVibGljIG5zQ0F1
dG9TdHJpbmcKCgoKICB7CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIE5TX0NvbnZl
cnRVQ1MydG9VVEY4KCBjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcgKQogICAgICAgIHsKICAgICAg
ICAgIEFwcGVuZCggYVN0cmluZywgflBSVWludDMyKDApICk7CiAgICAgICAgfQoKICAgICAgTlNf
Q29udmVydFVDUzJ0b1VURjgoIGNvbnN0IFBSVW5pY2hhciogYVN0cmluZywgUFJVaW50MzIgYUxl
bmd0aCApCiAgICAgICAgewogICAgICAgICAgQXBwZW5kKCBhU3RyaW5nLCBhTGVuZ3RoICk7CiAg
ICAgICAgfQoKICAgICAgZXhwbGljaXQKICAgICAgTlNfQ29udmVydFVDUzJ0b1VURjgoIFBSVW5p
Y2hhciBhQ2hhciApCiAgICAgICAgewogICAgICAgICAgQXBwZW5kKCAmYUNoYXIsIDEgKTsKICAg
ICAgICB9CgogICAgICBleHBsaWNpdCBOU19Db252ZXJ0VUNTMnRvVVRGOCggY29uc3QgbnNBU3Ry
aW5nJiBhU3RyaW5nICk7CgogICAgcHJvdGVjdGVkOgogICAgICB2b2lkIEFwcGVuZCggY29uc3Qg
UFJVbmljaGFyKiBhU3RyaW5nLCBQUlVpbnQzMiBhTGVuZ3RoICk7CgogICAgcHJpdmF0ZToKCiAg
ICAgIE5TX0NvbnZlcnRVQ1MydG9VVEY4KCBjaGFyICk7CiAgICAgIG9wZXJhdG9yIGNvbnN0IGNo
YXIqKCkgY29uc3Q7CiAgfTsKIyA1NjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmlu
Zy5oIgpjbGFzcyBuc1N1YnN1bWVDU3RyIDogcHVibGljIG5zQ1N0cmluZyB7CnB1YmxpYzoKICBl
eHBsaWNpdCBuc1N1YnN1bWVDU3RyKG5zU3RyJiBhU3RyaW5nKTsKICBuc1N1YnN1bWVDU3RyKFBS
VW5pY2hhciogYVN0cmluZyxQUkJvb2wgYXNzdW1lT3duZXJzaGlwLFBSSW50MzIgYUxlbmd0aD0t
MSk7CiAgbnNTdWJzdW1lQ1N0cihjaGFyKiBhU3RyaW5nLFBSQm9vbCBhc3N1bWVPd25lcnNoaXAs
UFJJbnQzMiBhTGVuZ3RoPS0xKTsKCiAgbnNTdWJzdW1lQ1N0ciYgb3BlcmF0b3I9KCBjb25zdCBu
c1N1YnN1bWVDU3RyJiBhU3RyaW5nICkgeyBBc3NpZ24oYVN0cmluZyk7IHJldHVybiAqdGhpczsg
fQogIG5zU3Vic3VtZUNTdHImIG9wZXJhdG9yPSggY29uc3QgbnNBQ1N0cmluZyYgYVJlYWRhYmxl
ICkgeyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9CgogIG5zU3Vic3VtZUNTdHIm
IG9wZXJhdG9yPSggY29uc3QgY2hhciogYVB0ciApIHsgQXNzaWduKGFQdHIpOyByZXR1cm4gKnRo
aXM7IH0KICBuc1N1YnN1bWVDU3RyJiBvcGVyYXRvcj0oIGNoYXIgYUNoYXIgKSB7IEFzc2lnbihh
Q2hhcik7IHJldHVybiAqdGhpczsgfQpwcml2YXRlOgogIHZvaWQgb3BlcmF0b3I9KCBQUlVuaWNo
YXIgKTsKfTsKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRm9udC5oIiAyCgoKCgoK
dHlwZWRlZiBQUkJvb2wgKCpuc0ZvbnRGYW1pbHlFbnVtRnVuYykoY29uc3QgbnNTdHJpbmcmIGFG
YW1pbHksIFBSQm9vbCBhR2VuZXJpYywgdm9pZCAqYURhdGEpOwoKCnN0cnVjdCBuc0ZvbnQgewoK
ICBuc1N0cmluZyBuYW1lOwoKCiAgUFJVaW50OCBzdHlsZTsKCgogIFBSVWludDggdmFyaWFudDsK
CgogIFBSVWludDE2IHdlaWdodDsKCgoKICBQUlVpbnQ4IGRlY29yYXRpb25zOwoKCiAgbnNjb29y
ZCBzaXplOwoKCiAgbnNGb250KGNvbnN0IGNoYXIqIGFOYW1lLCBQUlVpbnQ4IGFTdHlsZSwgUFJV
aW50OCBhVmFyaWFudCwKICAgICAgICAgUFJVaW50MTYgYVdlaWdodCwgUFJVaW50OCBhRGVjb3Jh
dGlvbiwgbnNjb29yZCBhU2l6ZSk7CgoKICBuc0ZvbnQoY29uc3QgbnNTdHJpbmcmIGFOYW1lLCBQ
UlVpbnQ4IGFTdHlsZSwgUFJVaW50OCBhVmFyaWFudCwKICAgICAgICAgUFJVaW50MTYgYVdlaWdo
dCwgUFJVaW50OCBhRGVjb3JhdGlvbiwgbnNjb29yZCBhU2l6ZSk7CgoKICBuc0ZvbnQoY29uc3Qg
bnNGb250JiBhRm9udCk7CgogIH5uc0ZvbnQoKTsKCiAgUFJCb29sIG9wZXJhdG9yPT0oY29uc3Qg
bnNGb250JiBhT3RoZXIpIGNvbnN0IHsKICAgIHJldHVybiBFcXVhbHMoYU90aGVyKTsKICB9Cgog
IFBSQm9vbCBFcXVhbHMoY29uc3QgbnNGb250JiBhT3RoZXIpIGNvbnN0IDsKCiAgbnNGb250JiBv
cGVyYXRvcj0oY29uc3QgbnNGb250JiBhT3RoZXIpOwoKCgoKCiAgUFJCb29sIEVudW1lcmF0ZUZh
bWlsaWVzKG5zRm9udEZhbWlseUVudW1GdW5jIGFGdW5jLCB2b2lkKiBhRGF0YSkgY29uc3Q7CiAg
dm9pZCBHZXRGaXJzdEZhbWlseShuc1N0cmluZyYgYUZhbWlseSkgY29uc3Q7Cn07CiMgMjggIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtQ29udHJvbEZyYW1lLmgiIDIKY2xhc3MgbnNG
b3JtRnJhbWU7CmNsYXNzIG5zSVByZXNDb250ZXh0OwpjbGFzcyBuc1N0cmluZzsKY2xhc3MgbnNJ
Q29udGVudDsKIyA0NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZvcm1Db250cm9sRnJh
bWUuaCIKY2xhc3MgbnNJRm9ybUNvbnRyb2xGcmFtZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7Cgpw
dWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlE
IGlpZCA9IHsgMHgzOGViMzk4MCwgMHg0ZDk5LCAweDExZDIsIHsgMHg4MCwgMHgzZiwgMHgwLCAw
eDYwLCAweDgsIDB4MTUsIDB4YTcsIDB4OTEgfSB9OyByZXR1cm4gaWlkO30KCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRUeXBlKFBSSW50MzIqIGFUeXBlKSBjb25zdCA9IDA7CgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0TmFtZShuc1N0cmluZyogYU5hbWUpID0gMDsKCiAgdmlydHVhbCB2b2lkIFNldEZv
Y3VzKFBSQm9vbCBhT24gPSAxLCBQUkJvb2wgYVJlcGFpbnQgPSAwKSA9IDA7CgogIHZpcnR1YWwg
dm9pZCBTY3JvbGxJbnRvVmlldyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KSA9IDA7Cgog
IHZpcnR1YWwgdm9pZCBNb3VzZUNsaWNrZWQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCkg
PSAwOwoKICB2aXJ0dWFsIHZvaWQgUmVzZXQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCkg
PSAwOwoKICB2aXJ0dWFsIFBSQm9vbCBJc1N1Y2Nlc3NmdWwobnNJRm9ybUNvbnRyb2xGcmFtZSog
YVN1Ym1pdHRlcikgPSAwOwoKICB2aXJ0dWFsIFBSSW50MzIgR2V0TWF4TnVtVmFsdWVzKCkgPSAw
OwoKICB2aXJ0dWFsIFBSQm9vbCBHZXROYW1lc1ZhbHVlcyhQUkludDMyIGFNYXhOdW1WYWx1ZXMs
IFBSSW50MzImIGFOdW1WYWx1ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
U3RyaW5nKiBhVmFsdWVzLCBuc1N0cmluZyogYU5hbWVzKSA9IDA7CgogIHZpcnR1YWwgdm9pZCBT
ZXRGb3JtRnJhbWUobnNGb3JtRnJhbWUqIGFGcmFtZSkgPSAwOwojIDc5ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJRm9ybUNvbnRyb2xGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
U3VnZ2VzdGVkU2l6ZShuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0KSA9IDA7CiMgOTQg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtQ29udHJvbEZyYW1lLmgiCiAgdmlydHVh
bCBuc3Jlc3VsdCBSZXF1aXJlc1dpZGdldChQUkJvb2wgJmFSZXF1aXJlc1dpZGdldCkgPSAwOwoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9udChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0
LAogICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0ZvbnQqJiBhRm9udCkgPSAwOwoKCgoKCgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9ybUNvbnRlbnQobnNJQ29udGVudComIGFDb250ZW50KSBj
b25zdCA9IDA7CiMgMTE2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybUNvbnRyb2xG
cmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UHJvcGVydHkobnNJUHJlc0NvbnRleHQqIGFQ
cmVzQ29udGV4dCwgbnNJQXRvbSogYU5hbWUsIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhVmFs
dWUpID0gMDsKIyAxMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtQ29udHJvbEZy
YW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm9wZXJ0eShuc0lBdG9tKiBhTmFtZSwgbnNB
V3JpdGFibGVTdHJpbmcmIGFWYWx1ZSkgPSAwOwoKCgp9OwojIDI3ICIuLi8uLi8uLi8uLi8uLi9t
b3ppbGxhL2xheW91dC9odG1sL2Zvcm1zL3NyYy9uc0Zvcm1Db250cm9sSGVscGVyLmgiIDIKIyAx
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybU1hbmFnZXIuaCIgMQojIDI1ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybU1hbmFnZXIuaCIKIyAxICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJRm9ybU1hbmFnZXIuaCIgMgpjbGFzcyBuc0lQcmVzQ29udGV4dDsKY2xhc3MgbnNJRnJh
bWU7CiMgMzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtTWFuYWdlci5oIgpjbGFz
cyBuc0lGb3JtTWFuYWdlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMg
Y29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweDU5MmRh
YTAxLCAweGNiMjMsIDB4MTFkMSwgeyAweDgwLCAweDJkLCAweDAsIDB4NjAsIDB4OCwgMHgxNSwg
MHhhNywgMHg5MSB9IH07IHJldHVybiBpaWQ7fQoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9uUmVz
ZXQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCkgPSAwOwojIDU0ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJRm9ybU1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE9uU3VibWl0
KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIG5zSUZyYW1lKiBhRnJhbWUpID0gMDsKCn07
CiMgMjggIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvZm9ybXMvc3JjL25zRm9y
bUNvbnRyb2xIZWxwZXIuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBw
b3J0cy5oIiAxCiMgMjkgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvZm9ybXMv
c3JjL25zRm9ybUNvbnRyb2xIZWxwZXIuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lXaWRnZXQuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0
LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAyNyAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zQ29sb3IuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNDb2xvci5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDI3
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb2xvci5oIiAyCgpjbGFzcyBuc1N0cmluZzsK
CgoKdHlwZWRlZiBQUlVpbnQzMiBuc2NvbG9yOwojIDcxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNDb2xvci5oIgpleHRlcm4gIkMiIFBSQm9vbCBOU19IZXhUb1JHQihjb25zdCBuc1N0cmlu
ZyYgYUJ1ZiwgbnNjb2xvciogYVJlc3VsdCk7CgoKCgpleHRlcm4gIkMiIFBSQm9vbCBOU19Mb29z
ZUhleFRvUkdCKGNvbnN0IG5zU3RyaW5nJiBhQnVmLCBuc2NvbG9yKiBhUmVzdWx0KTsKCgoKZXh0
ZXJuICJDIiBQUkJvb2wgTlNfQ29sb3JOYW1lVG9SR0IoY29uc3QgbnNTdHJpbmcmIGFCdWYsIG5z
Y29sb3IqIGFSZXN1bHQpOwoKCgpleHRlcm4gIkMiIHZvaWQgTlNfR2V0M0RDb2xvcnMobnNjb2xv
ciBhUmVzdWx0WzJdLCBuc2NvbG9yIGFDb2xvcik7CgoKZXh0ZXJuICJDIiB2b2lkIE5TX0dldFNw
ZWNpYWwzRENvbG9ycyhuc2NvbG9yIGFSZXN1bHRbMl0sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc2NvbG9yIGFCYWNrZ3JvdW5kQ29sb3IsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc2NvbG9yIGFCb3JkZXJDb2xvcik7CgoKCmV4dGVybiAiQyIgbnNjb2xv
ciBOU19CcmlnaHRlbkNvbG9yKG5zY29sb3IgaW5Db2xvcik7CgoKCmV4dGVybiAiQyIgbnNjb2xv
ciBOU19EYXJrZW5Db2xvcihuc2NvbG9yIGluQ29sb3IpOwoKCmV4dGVybiAiQyIgaW50IE5TX0dl
dEJyaWdodG5lc3MoUFJVaW50OCBhUmVkLCBQUlVpbnQ4IGFHcmVlbiwgUFJVaW50OCBhQmx1ZSk7
CiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIgMgojIDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNb3VzZUxpc3RlbmVyLmgiIDEKIyAyNyAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSU1vdXNlTGlzdGVuZXIuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNHVUlFdmVudC5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0dVSUV2ZW50LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUG9pbnQuaCIgMQoj
IDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNQb2ludC5oIgojIDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0Nvb3JkLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zUG9pbnQuaCIgMgoKc3RydWN0IG5zUG9pbnQgewogIG5zY29vcmQgeCwgeTsKCgogIG5zUG9p
bnQoKSB7fQogIG5zUG9pbnQoY29uc3QgbnNQb2ludCYgYVBvaW50KSB7eCA9IGFQb2ludC54OyB5
ID0gYVBvaW50Lnk7fQogIG5zUG9pbnQobnNjb29yZCBhWCwgbnNjb29yZCBhWSkge3ggPSBhWDsg
eSA9IGFZO30KCiAgdm9pZCBNb3ZlVG8obnNjb29yZCBhWCwgbnNjb29yZCBhWSkge3ggPSBhWDsg
eSA9IGFZO30KICB2b2lkIE1vdmVCeShuc2Nvb3JkIGFEeCwgbnNjb29yZCBhRHkpIHt4ICs9IGFE
eDsgeSArPSBhRHk7fQoKCgogIFBSQm9vbCBvcGVyYXRvcj09KGNvbnN0IG5zUG9pbnQmIGFQb2lu
dCkgY29uc3QgewogICAgcmV0dXJuIChQUkJvb2wpICgoeCA9PSBhUG9pbnQueCkgJiYgKHkgPT0g
YVBvaW50LnkpKTsKICB9CiAgUFJCb29sIG9wZXJhdG9yIT0oY29uc3QgbnNQb2ludCYgYVBvaW50
KSBjb25zdCB7CiAgICByZXR1cm4gKFBSQm9vbCkgKCh4ICE9IGFQb2ludC54KSB8fCAoeSAhPSBh
UG9pbnQueSkpOwogIH0KICBuc1BvaW50IG9wZXJhdG9yKyhjb25zdCBuc1BvaW50JiBhUG9pbnQp
IGNvbnN0IHsKICAgIHJldHVybiBuc1BvaW50KHggKyBhUG9pbnQueCwgeSArIGFQb2ludC55KTsK
ICB9CiAgbnNQb2ludCBvcGVyYXRvci0oY29uc3QgbnNQb2ludCYgYVBvaW50KSBjb25zdCB7CiAg
ICByZXR1cm4gbnNQb2ludCh4IC0gYVBvaW50LngsIHkgLSBhUG9pbnQueSk7CiAgfQogIG5zUG9p
bnQmIG9wZXJhdG9yKz0oY29uc3QgbnNQb2ludCYgYVBvaW50KSB7CiAgICB4ICs9IGFQb2ludC54
OwogICAgeSArPSBhUG9pbnQueTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgbnNQb2ludCYgb3Bl
cmF0b3ItPShjb25zdCBuc1BvaW50JiBhUG9pbnQpIHsKICAgIHggLT0gYVBvaW50Lng7CiAgICB5
IC09IGFQb2ludC55OwogICAgcmV0dXJuICp0aGlzOwogIH0KfTsKCgoKCgpzdHJ1Y3QgbnNGbG9h
dFBvaW50IHsKICBmbG9hdCB4LCB5OwoKCiAgbnNGbG9hdFBvaW50KCkge30KICBuc0Zsb2F0UG9p
bnQoY29uc3QgbnNGbG9hdFBvaW50JiBhUG9pbnQpIHt4ID0gYVBvaW50Lng7IHkgPSBhUG9pbnQu
eTt9CiAgbnNGbG9hdFBvaW50KGZsb2F0IGFYLCBmbG9hdCBhWSkge3ggPSBhWDsgeSA9IGFZO30K
CiAgdm9pZCBNb3ZlVG8oZmxvYXQgYVgsIGZsb2F0IGFZKSB7eCA9IGFYOyB5ID0gYVk7fQogIHZv
aWQgTW92ZVRvKG5zY29vcmQgYVgsIG5zY29vcmQgYVkpIHt4ID0gKGZsb2F0KWFYOyB5ID0gKGZs
b2F0KWFZO30KICB2b2lkIE1vdmVCeShmbG9hdCBhRHgsIGZsb2F0IGFEeSkge3ggKz0gYUR4OyB5
ICs9IGFEeTt9CgoKCiAgUFJCb29sIG9wZXJhdG9yPT0oY29uc3QgbnNGbG9hdFBvaW50JiBhUG9p
bnQpIGNvbnN0IHsKICAgIHJldHVybiAoUFJCb29sKSAoKHggPT0gYVBvaW50LngpICYmICh5ID09
IGFQb2ludC55KSk7CiAgfQogIFBSQm9vbCBvcGVyYXRvciE9KGNvbnN0IG5zRmxvYXRQb2ludCYg
YVBvaW50KSBjb25zdCB7CiAgICByZXR1cm4gKFBSQm9vbCkgKCh4ICE9IGFQb2ludC54KSB8fCAo
eSAhPSBhUG9pbnQueSkpOwogIH0KICBuc0Zsb2F0UG9pbnQgb3BlcmF0b3IrKGNvbnN0IG5zRmxv
YXRQb2ludCYgYVBvaW50KSBjb25zdCB7CiAgICByZXR1cm4gbnNGbG9hdFBvaW50KHggKyBhUG9p
bnQueCwgeSArIGFQb2ludC55KTsKICB9CiAgbnNGbG9hdFBvaW50IG9wZXJhdG9yLShjb25zdCBu
c0Zsb2F0UG9pbnQmIGFQb2ludCkgY29uc3QgewogICAgcmV0dXJuIG5zRmxvYXRQb2ludCh4IC0g
YVBvaW50LngsIHkgLSBhUG9pbnQueSk7CiAgfQogIG5zRmxvYXRQb2ludCYgb3BlcmF0b3IrPShj
b25zdCBuc0Zsb2F0UG9pbnQmIGFQb2ludCkgewogICAgeCArPSBhUG9pbnQueDsKICAgIHkgKz0g
YVBvaW50Lnk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIG5zRmxvYXRQb2ludCYgb3BlcmF0b3It
PShjb25zdCBuc0Zsb2F0UG9pbnQmIGFQb2ludCkgewogICAgeCAtPSBhUG9pbnQueDsKICAgIHkg
LT0gYVBvaW50Lnk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQp9OwoKCgoKCgpzdHJ1Y3QgbnNQYXRo
UG9pbnQ6IHB1YmxpYyBuc0Zsb2F0UG9pbnR7CgogIFBSQm9vbCBtSXNPbkN1cnZlOwoKCiAgbnNQ
YXRoUG9pbnQoKSB7fQogIG5zUGF0aFBvaW50KGNvbnN0IG5zUGF0aFBvaW50JiBhUG9pbnQpIHt4
ID0gYVBvaW50Lng7IHkgPSBhUG9pbnQueTttSXNPbkN1cnZlPWFQb2ludC5tSXNPbkN1cnZlO30K
ICBuc1BhdGhQb2ludChmbG9hdCBhWCwgZmxvYXQgYVkpIHt4ID0gYVg7IHkgPSBhWTttSXNPbkN1
cnZlPTE7fQogIG5zUGF0aFBvaW50KGZsb2F0IGFYLCBmbG9hdCBhWSxQUkJvb2wgYUlzT25DdXJ2
ZSkge3ggPSBhWDsgeSA9IGFZO21Jc09uQ3VydmU9YUlzT25DdXJ2ZTt9Cgp9OwojIDI3ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNHVUlFdmVudC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zUmVjdC5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Jl
Y3QuaCIKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc1JlY3QuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Nvb3JkLmgiIDEK
IyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUmVjdC5oIiAyCiMgMSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zUG9pbnQuaCIgMQojIDMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNSZWN0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTaXplLmgiIDEK
IyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU2l6ZS5oIgojIDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0Nvb3JkLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zU2l6ZS5oIiAyCgoKCgpzdHJ1Y3QgbnNTaXplIHsKICBuc2Nvb3JkIHdpZHRoLCBoZWlnaHQ7
CgoKICBuc1NpemUoKSB7fQogIG5zU2l6ZShjb25zdCBuc1NpemUmIGFTaXplKSB7d2lkdGggPSBh
U2l6ZS53aWR0aDsgaGVpZ2h0ID0gYVNpemUuaGVpZ2h0O30KICBuc1NpemUobnNjb29yZCBhV2lk
dGgsIG5zY29vcmQgYUhlaWdodCkge3dpZHRoID0gYVdpZHRoOyBoZWlnaHQgPSBhSGVpZ2h0O30K
CiAgdm9pZCBTaXplVG8obnNjb29yZCBhV2lkdGgsIG5zY29vcmQgYUhlaWdodCkge3dpZHRoID0g
YVdpZHRoOyBoZWlnaHQgPSBhSGVpZ2h0O30KICB2b2lkIFNpemVCeShuc2Nvb3JkIGFEZWx0YVdp
ZHRoLCBuc2Nvb3JkIGFEZWx0YUhlaWdodCkge3dpZHRoICs9IGFEZWx0YVdpZHRoOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0
ICs9IGFEZWx0YUhlaWdodDt9CgoKCiAgUFJCb29sIG9wZXJhdG9yPT0oY29uc3QgbnNTaXplJiBh
U2l6ZSkgY29uc3QgewogICAgcmV0dXJuIChQUkJvb2wpICgod2lkdGggPT0gYVNpemUud2lkdGgp
ICYmIChoZWlnaHQgPT0gYVNpemUuaGVpZ2h0KSk7CiAgfQogIFBSQm9vbCBvcGVyYXRvciE9KGNv
bnN0IG5zU2l6ZSYgYVNpemUpIGNvbnN0IHsKICAgIHJldHVybiAoUFJCb29sKSAoKHdpZHRoICE9
IGFTaXplLndpZHRoKSB8fCAoaGVpZ2h0ICE9IGFTaXplLmhlaWdodCkpOwogIH0KICBuc1NpemUg
b3BlcmF0b3IrKGNvbnN0IG5zU2l6ZSYgYVNpemUpIGNvbnN0IHsKICAgIHJldHVybiBuc1NpemUo
d2lkdGggKyBhU2l6ZS53aWR0aCwgaGVpZ2h0ICsgYVNpemUuaGVpZ2h0KTsKICB9CiAgbnNTaXpl
IG9wZXJhdG9yLShjb25zdCBuc1NpemUmIGFTaXplKSBjb25zdCB7CiAgICByZXR1cm4gbnNTaXpl
KHdpZHRoIC0gYVNpemUud2lkdGgsIGhlaWdodCAtIGFTaXplLmhlaWdodCk7CiAgfQogIG5zU2l6
ZSYgb3BlcmF0b3IrPShjb25zdCBuc1NpemUmIGFTaXplKSB7d2lkdGggKz0gYVNpemUud2lkdGg7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgKz0gYVNp
emUuaGVpZ2h0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICp0aGlzO30KICBuc1NpemUmIG9wZXJhdG9yLT0oY29uc3QgbnNTaXplJiBhU2l6ZSkge3dp
ZHRoIC09IGFTaXplLndpZHRoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVpZ2h0IC09IGFTaXplLmhlaWdodDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczt9Cn07CiMgMzEgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc1JlY3QuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc01hcmdp
bi5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc01hcmdpbi5oIgojIDEgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Nvb3JkLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zTWFyZ2luLmgiIDIKCnN0cnVjdCBuc01hcmdpbiB7CiAgbnNjb29yZCBsZWZ0
LCB0b3AsIHJpZ2h0LCBib3R0b207CgoKICBuc01hcmdpbigpIHt9CiAgbnNNYXJnaW4oY29uc3Qg
bnNNYXJnaW4mIGFNYXJnaW4pIHsqdGhpcyA9IGFNYXJnaW47fQogIG5zTWFyZ2luKG5zY29vcmQg
YUxlZnQsIG5zY29vcmQgYVRvcCwKICAgICAgICAgICBuc2Nvb3JkIGFSaWdodCwgbnNjb29yZCBh
Qm90dG9tKSB7bGVmdCA9IGFMZWZ0OyB0b3AgPSBhVG9wOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByaWdodCA9IGFSaWdodDsgYm90dG9tID0gYUJvdHRvbTt9
CgogIHZvaWQgU2l6ZVRvKG5zY29vcmQgYUxlZnQsIG5zY29vcmQgYVRvcCwKICAgICAgICAgICAg
ICBuc2Nvb3JkIGFSaWdodCwgbnNjb29yZCBhQm90dG9tKSB7bGVmdCA9IGFMZWZ0OyB0b3AgPSBh
VG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdo
dCA9IGFSaWdodDsgYm90dG9tID0gYUJvdHRvbTt9CiAgdm9pZCBTaXplQnkobnNjb29yZCBhTGVm
dCwgbnNjb29yZCBhVG9wLAogICAgICAgICAgICAgIG5zY29vcmQgYVJpZ2h0LCBuc2Nvb3JkIGFC
b3R0b20pIHtsZWZ0ICs9IGFMZWZ0OyB0b3AgKz0gYVRvcDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgKz0gYVJpZ2h0OyBib3R0b20gKz0gYUJv
dHRvbTt9CgoKCiAgUFJCb29sIG9wZXJhdG9yPT0oY29uc3QgbnNNYXJnaW4mIGFNYXJnaW4pIGNv
bnN0IHsKICAgIHJldHVybiAoUFJCb29sKSAoKGxlZnQgPT0gYU1hcmdpbi5sZWZ0KSAmJiAodG9w
ID09IGFNYXJnaW4udG9wKSAmJgogICAgICAgICAgICAgICAgICAgICAocmlnaHQgPT0gYU1hcmdp
bi5yaWdodCkgJiYgKGJvdHRvbSA9PSBhTWFyZ2luLmJvdHRvbSkpOwogIH0KICBQUkJvb2wgb3Bl
cmF0b3IhPShjb25zdCBuc01hcmdpbiYgYU1hcmdpbikgY29uc3QgewogICAgcmV0dXJuIChQUkJv
b2wpICgobGVmdCAhPSBhTWFyZ2luLmxlZnQpIHx8ICh0b3AgIT0gYU1hcmdpbi50b3ApIHx8CiAg
ICAgICAgICAgICAgICAgICAgIChyaWdodCAhPSBhTWFyZ2luLnJpZ2h0KSB8fCAoYm90dG9tICE9
IGFNYXJnaW4uYm90dG9tKSk7CiAgfQogIG5zTWFyZ2luIG9wZXJhdG9yKyhjb25zdCBuc01hcmdp
biYgYU1hcmdpbikgY29uc3QgewogICAgcmV0dXJuIG5zTWFyZ2luKGxlZnQgKyBhTWFyZ2luLmxl
ZnQsIHRvcCArIGFNYXJnaW4udG9wLAogICAgICAgICAgICAgICAgICAgIHJpZ2h0ICsgYU1hcmdp
bi5yaWdodCwgYm90dG9tICsgYU1hcmdpbi5ib3R0b20pOwogIH0KICBuc01hcmdpbiBvcGVyYXRv
ci0oY29uc3QgbnNNYXJnaW4mIGFNYXJnaW4pIGNvbnN0IHsKICAgIHJldHVybiBuc01hcmdpbihs
ZWZ0IC0gYU1hcmdpbi5sZWZ0LCB0b3AgLSBhTWFyZ2luLnRvcCwKICAgICAgICAgICAgICAgICAg
ICByaWdodCAtIGFNYXJnaW4ucmlnaHQsIGJvdHRvbSAtIGFNYXJnaW4uYm90dG9tKTsKICB9CiAg
bnNNYXJnaW4mIG9wZXJhdG9yKz0oY29uc3QgbnNNYXJnaW4mIGFNYXJnaW4pIHtsZWZ0ICs9IGFN
YXJnaW4ubGVmdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRvcCArPSBhTWFyZ2luLnRvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJpZ2h0ICs9IGFNYXJnaW4ucmlnaHQ7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b20gKz0gYU1hcmdpbi5ib3R0b207
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
KnRoaXM7fQogIG5zTWFyZ2luJiBvcGVyYXRvci09KGNvbnN0IG5zTWFyZ2luJiBhTWFyZ2luKSB7
bGVmdCAtPSBhTWFyZ2luLmxlZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b3AgLT0gYU1hcmdpbi50b3A7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodCAtPSBhTWFyZ2luLnJpZ2h0OwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tIC09IGFNYXJn
aW4uYm90dG9tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICp0aGlzO30KfTsKIyAzMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUmVj
dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zVW5pdENvbnZlcnNpb24uaCIg
MQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNVbml0Q29udmVyc2lvbi5oIgojIDEg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNVbml0Q29udmVyc2lvbi5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL21hdGgu
aCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVh
dHVyZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKZXh0ZXJuICJDIiB7
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMSAzCiMgMjUgIi91c3IvaW5j
bHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAz
CiMgMjYgIi91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDIgMwojIDM0ICIvdXNyL2luY2x1
ZGUvbWF0aC5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9uYW4uaCIgMSAzCiMgMzgg
Ii91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGRl
Zi5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGRlZi5oIiAzCnR5cGVkZWYgbG9u
ZyBkb3VibGUgZmxvYXRfdDsKCnR5cGVkZWYgbG9uZyBkb3VibGUgZG91YmxlX3Q7CiMgNDEgIi91
c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDYzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUvYml0
cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZG91YmxlIGFjb3MgKGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gZG91YmxlIF9fYWNvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91
YmxlIGFzaW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXNpbiAoZG91
YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGF0YW4gKGRvdWJsZSBfX3gpIHRocm93
ICgpOyBleHRlcm4gZG91YmxlIF9fYXRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4g
ZG91YmxlIGF0YW4yIChkb3VibGUgX195LCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX2F0YW4yIChkb3VibGUgX195LCBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g
ZG91YmxlIGNvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19jb3MgKGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBzaW4gKGRvdWJsZSBfX3gpIHRocm93
ICgpOyBleHRlcm4gZG91YmxlIF9fc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBk
b3VibGUgdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3RhbiAoZG91
YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIHNpbmNvcyAoZG91YmxlIF9feCwgZG91
YmxlICpfX3NpbngsIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsgZXh0ZXJuIHZvaWQgX19zaW5j
b3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54LCBkb3VibGUgKl9fY29zeCkgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBkb3VibGUgY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19jb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgc2luaCAo
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaW5oIChkb3VibGUgX194KSB0
aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX190YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBh
Y29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hY29zaCAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGFzaW5oIChkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX2FzaW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBk
b3VibGUgYXRhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXRhbmgg
KGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgZXhwIChkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK
CmV4dGVybiBkb3VibGUgZXhwMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fZXhwMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBwb3cxMCAoZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19wb3cxMCAoZG91YmxlIF9feCkgdGhy
b3cgKCk7CgoKCmV4dGVybiBkb3VibGUgZnJleHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVu
dCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mcmV4cCAoZG91YmxlIF9feCwgaW50ICpfX2V4
cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxkZXhwIChkb3VibGUgX194LCBpbnQg
X19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sZGV4cCAoZG91YmxlIF9feCwg
aW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nIChkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZyAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGRvdWJsZSBsb2cxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg
X19sb2cxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBtb2RmIChkb3Vi
bGUgX194LCBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19tb2RmIChk
b3VibGUgX194LCBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgZXhw
bTEgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwbTEgKGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nMXAgKGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gZG91YmxlIF9fbG9nMXAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBk
b3VibGUgbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2diIChk
b3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgZXhwMiAoZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAyIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpl
eHRlcm4gZG91YmxlIGxvZzIgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
bG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgcG93IChkb3Vi
bGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3BvdyAoZG91Ymxl
IF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBzcXJ0IChkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NxcnQgKGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKCgpleHRlcm4gZG91YmxlIGh5cG90IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX2h5cG90IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBkb3VibGUgY2JydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19jYnJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBj
ZWlsIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NlaWwgKGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZmFicyAoZG91YmxlIF9feCkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fZmFicyAoZG91Ymxl
IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3Vi
bGUgZmxvb3IgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZmxvb3IgKGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZm1vZCAoZG91YmxlIF9feCwgZG91
YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbW9kIChkb3VibGUgX194LCBkb3Vi
bGUgX195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2luZiAoZG91YmxlIF9fdmFsdWUp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmlu
aXRlIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKCgoKZXh0ZXJuIGludCBpc2luZiAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZSAoZG91YmxlIF9fdmFsdWUp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKCmV4dGVybiBkb3Vi
bGUgaW5mbmFuIChpbnQgX19lcnJvcikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOyBleHRlcm4gZG91YmxlIF9faW5mbmFuIChpbnQgX19lcnJvcikgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZHJlbSAoZG91YmxlIF9feCwg
ZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19kcmVtIChkb3VibGUgX194LCBk
b3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBzaWduaWZpY2FuZCAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaWduaWZpY2FuZCAoZG91YmxlIF9feCkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGNvcHlzaWduIChkb3VibGUgX194LCBkb3VibGUg
X195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUg
X19jb3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGRvdWJsZSBuYW4gKF9fY29uc3QgY2hhciAqX190
YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUg
X19uYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW4gKGRvdWJs
ZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJu
IGRvdWJsZSBqMCAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2owIChkb3VibGUp
IHRocm93ICgpOwpleHRlcm4gZG91YmxlIGoxIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91
YmxlIF9fajEgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgam4gKGludCwgZG91Ymxl
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2puIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7CmV4
dGVybiBkb3VibGUgeTAgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195MCAoZG91
YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5MSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX3kxIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIHluIChpbnQsIGRv
dWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195biAoaW50LCBkb3VibGUpIHRocm93ICgp
OwoKCgoKCmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fZXJmIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGVyZmMgKGRvdWJsZSkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19lcmZjIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91
YmxlIGxnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYSAoZG91
YmxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSB0Z2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX190Z2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91
YmxlIGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZ2FtbWEgKGRvdWJs
ZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgbGdhbW1hX3IgKGRvdWJsZSwgaW50ICpf
X3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYV9yIChkb3VibGUsIGlu
dCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgcmludCAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yaW50IChkb3VibGUgX194KSB0aHJvdyAo
KTsKCgpleHRlcm4gZG91YmxlIG5leHRhZnRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dGFm
dGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgpleHRlcm4gZG91YmxlIG5leHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91
YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91
YmxlIF9fbmV4dHRvd2FyZCAoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBkb3VibGUgcmVtYWluZGVyIChk
b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JlbWFpbmRl
ciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc2Nh
bGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2Nh
bGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBz
Y2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2Nh
bGJuIChkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYiAo
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYiAoZG91YmxlIF9feCkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxibG4gKGRvdWJsZSBfX3gsIGxvbmcgaW50IF9f
bikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zY2FsYmxuIChkb3VibGUgX194LCBsb25nIGlu
dCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIG5lYXJieWludCAoZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19uZWFyYnlpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKCgpleHRlcm4gZG91YmxlIHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX3JvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSB0cnVu
YyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRl
cm4gZG91YmxlIF9fdHJ1bmMgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgoKCmV4dGVybiBkb3VibGUgcmVtcXVvIChkb3VibGUgX194LCBkb3VibGUg
X195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JlbXF1byAoZG91Ymxl
IF9feCwgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25n
IGludCBscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50
IChkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50IChkb3Vi
bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnQgKGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kIChkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0
ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGxvbmcgaW50IF9fbGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBk
b3VibGUgZmRpbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19mZGltIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91
YmxlIGZtYXggKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fZm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJs
ZSBmbWluIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X2ZtaW4gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9f
ZnBjbGFzc2lmeSAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0IChkb3VibGUgX192YWx1ZSkgdGhy
b3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBkb3VibGUg
Zm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUgX196KSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX2ZtYSAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgZG91YmxlIF9feikgdGhyb3cg
KCk7CiMgNjQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDgyICIvdXNyL2luY2x1ZGUvbWF0
aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0ICIvdXNy
L2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZmxvYXQgYWNvc2YgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOwoK
ZXh0ZXJuIGZsb2F0IGFzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19h
c2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhdGFuZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7Cgpl
eHRlcm4gZmxvYXQgYXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX2F0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVy
biBmbG9hdCBjb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jb3NmIChm
bG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHNpbmYgKGZsb2F0IF9feCkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX3NpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxv
YXQgdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAq
X19zaW54LCBmbG9hdCAqX19jb3N4KSB0aHJvdyAoKTsgZXh0ZXJuIHZvaWQgX19zaW5jb3NmIChm
bG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0ICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gZmxvYXQgY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Nv
c2hmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHNpbmhmIChmbG9hdCBfX3gp
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4
dGVybiBmbG9hdCB0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFu
aGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBhY29zaGYgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsK
CmV4dGVybiBmbG9hdCBhc2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf
X2FzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhdGFuaGYgKGZsb2F0
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsKCgoKCgpleHRlcm4gZmxvYXQgZXhwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fZXhwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGV4cDEwZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwMTBmIChmbG9hdCBfX3gpIHRo
cm93ICgpOwoKZXh0ZXJuIGZsb2F0IHBvdzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGZsb2F0IF9fcG93MTBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgZnJl
eHBmIChmbG9hdCBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf
X2ZyZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBm
bG9hdCBsZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4g
ZmxvYXQgX19sZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4
dGVybiBmbG9hdCBsb2dmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2dm
IChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cxMGYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpl
eHRlcm4gZmxvYXQgbW9kZmYgKGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cikgdGhyb3cgKCk7IGV4
dGVybiBmbG9hdCBfX21vZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpIHRocm93ICgpOwoK
CgpleHRlcm4gZmxvYXQgZXhwbTFmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19leHBtMWYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzFwZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMXBmIChmbG9hdCBfX3gpIHRocm93
ICgpOwoKCmV4dGVybiBmbG9hdCBsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgZXhwMmYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cDJmIChmbG9hdCBfX3gpIHRo
cm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGZsb2F0IF9fbG9nMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBw
b3dmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Bvd2Yg
KGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgc3FydGYgKGZs
b2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NxcnRmIChmbG9hdCBfX3gpIHRocm93
ICgpOwoKCgpleHRlcm4gZmxvYXQgaHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX2h5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGZsb2F0IGNicnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX19jYnJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGNlaWxm
IChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jZWlsZiAoZmxvYXQgX194KSB0
aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgZmFic2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19mYWJzZiAoZmxvYXQgX194KSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGZsb29y
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZmxvb3JmIChmbG9hdCBfX3gp
IHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19mbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVmIChmbG9hdCBf
X3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4g
aW50IGlzaW5mZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGZsb2F0IGluZm5hbmYgKGlu
dCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBm
bG9hdCBfX2luZm5hbmYgKGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGRyZW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhy
b3cgKCk7IGV4dGVybiBmbG9hdCBfX2RyZW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg
KCk7CgoKCmV4dGVybiBmbG9hdCBzaWduaWZpY2FuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4
dGVybiBmbG9hdCBfX3NpZ25pZmljYW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBmbG9hdCBjb3B5c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2NvcHlzaWduZiAoZmxvYXQgX194
LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4
dGVybiBmbG9hdCBuYW5mIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19uYW5mIChfX2NvbnN0IGNoYXIgKl9f
dGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGlu
dCBfX2lzbmFuZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFuZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBqMGYgKGZsb2F0KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fajBmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBq
MWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fajFmIChmbG9hdCkgdGhyb3cgKCk7
CmV4dGVybiBmbG9hdCBqbmYgKGludCwgZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19q
bmYgKGludCwgZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgeTBmIChmbG9hdCkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX3kwZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgeTFm
IChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3kxZiAoZmxvYXQpIHRocm93ICgpOwpl
eHRlcm4gZmxvYXQgeW5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9feW5m
IChpbnQsIGZsb2F0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgZXJmZiAoZmxvYXQpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19lcmZmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9h
dCBlcmZjZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19lcmZjZiAoZmxvYXQpIHRo
cm93ICgpOwpleHRlcm4gZmxvYXQgbGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX19sZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCB0Z2FtbWFmIChm
bG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3RnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBmbG9hdCBnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
Z2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBsZ2FtbWFmX3IgKGZs
b2F0LCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sZ2FtbWFmX3Ig
KGZsb2F0LCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgcmlu
dGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JpbnRmIChmbG9hdCBfX3gp
IHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBuZXh0YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9f
eSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19u
ZXh0YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKZXh0ZXJuIGZsb2F0IG5leHR0b3dhcmRmIChmbG9hdCBfX3gsIGxvbmcg
ZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4g
ZmxvYXQgX19uZXh0dG93YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGZsb2F0IHJlbWFpbmRlcmYg
KGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmVtYWluZGVy
ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgc2NhbGJm
IChmbG9hdCBfX3gsIGZsb2F0IF9fbikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NjYWxiZiAo
ZmxvYXQgX194LCBmbG9hdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IHNjYWxibmYg
KGZsb2F0IF9feCwgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NjYWxibmYgKGZs
b2F0IF9feCwgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2JmIChmbG9hdCBf
X3gpIHRocm93ICgpOyBleHRlcm4gaW50IF9faWxvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGZsb2F0IHNjYWxibG5mIChmbG9hdCBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX3NjYWxibG5mIChmbG9hdCBfX3gsIGxvbmcgaW50IF9fbikgdGhy
b3cgKCk7CgoKCmV4dGVybiBmbG9hdCBuZWFyYnlpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19uZWFyYnlpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4g
ZmxvYXQgcm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yb3VuZGYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCB0cnVuY2YgKGZsb2F0IF9feCkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX190cnVu
Y2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoK
ZXh0ZXJuIGZsb2F0IHJlbXF1b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9fcXVvKSB0
aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGlu
dCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnRmIChmbG9hdCBf
X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scmludGYgKGZsb2F0IF9feCkgdGhyb3cg
KCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGxvbmcgaW50IGxyb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGlu
dCBfX2xyb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxs
cm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91
bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgZmRpbWYgKGZsb2F0IF9f
eCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZmRpbWYgKGZsb2F0IF9feCwg
ZmxvYXQgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgZm1heGYgKGZsb2F0IF9feCwgZmxv
YXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZm1heGYgKGZsb2F0IF9feCwgZmxvYXQg
X195KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgZm1pbmYgKGZsb2F0IF9feCwgZmxvYXQgX195
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZm1pbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlmIChmbG9hdCBfX3ZhbHVlKSB0aHJv
dyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fc2ln
bmJpdGYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCgpleHRlcm4gZmxvYXQgZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0
IF9feikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195
LCBmbG9hdCBfX3opIHRocm93ICgpOwojIDgzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA5
OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxs
cy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxv
bmcgZG91YmxlIGFjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19hY29zbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRv
dWJsZSBhc2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fYXNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUg
YXRhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0
YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW4y
bCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19hdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgY29zbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK
CmV4dGVybiBsb25nIGRvdWJsZSBzaW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19zaW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu
IGxvbmcgZG91YmxlIHRhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX3RhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lk
IHNpbmNvc2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9fc2lueCwgbG9uZyBkb3Vi
bGUgKl9fY29zeCkgdGhyb3cgKCk7IGV4dGVybiB2b2lkIF9fc2luY29zbCAobG9uZyBkb3VibGUg
X194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK
CmV4dGVybiBsb25nIGRvdWJsZSBzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRl
cm4gbG9uZyBkb3VibGUgdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX3RhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4g
bG9uZyBkb3VibGUgYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19hY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9u
ZyBkb3VibGUgYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19hc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBk
b3VibGUgYXRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19hdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcg
ZG91YmxlIGV4cGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2V4cGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJs
ZSBleHAxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2V4cDEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBw
b3cxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Bv
dzEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZy
ZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19mcmV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0
aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbGRleHBsIChsb25nIGRvdWJsZSBfX3gsIGlu
dCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGRleHBsIChsb25n
IGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3Vi
bGUgbG9nbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
bG9nbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9n
MTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cx
MGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG1vZGZs
IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19tb2RmbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19pcHRy
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cG0xbCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbTFsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cxcGwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzFwbCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHAybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcG93bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs
ZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3dsIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNxcnRs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zcXJ0bCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGh5cG90bCAo
bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19oeXBvdGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjYnJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2JydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjZWlsbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2VpbGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZhYnNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmFic2wgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4
dGVybiBsb25nIGRvdWJsZSBmbG9vcmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2Zsb29ybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRl
cm4gbG9uZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2luZmwgKGxvbmcgZG91
YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRl
cm4gaW50IF9fZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2luZmwgKGxvbmcgZG91YmxlIF9f
dmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50
IGZpbml0ZWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBpbmZuYW5sIChpbnQgX19lcnJv
cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19pbmZuYW5sIChpbnQgX19lcnJvcikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3VibGUgX194LCBsb25n
IGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19kcmVtbCAobG9uZyBk
b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3Vi
bGUgc2lnbmlmaWNhbmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19zaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gbG9uZyBkb3VibGUgY29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f
eSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19jb3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbmFu
bCAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmFubCAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19pc25h
bmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgajBsIChs
b25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2owbCAobG9uZyBkb3Vi
bGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgajFsIChsb25nIGRvdWJsZSkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2oxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRl
cm4gbG9uZyBkb3VibGUgam5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fam5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg
ZG91YmxlIHkwbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195
MGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHkxbCAobG9uZyBk
b3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MWwgKGxvbmcgZG91YmxlKSB0
aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHlubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3lubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGVyZmwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fZXJmbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9u
ZyBkb3VibGUgZXJmY2wgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fZXJmY2wgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1t
YWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbCAo
bG9uZyBkb3VibGUpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgdGdhbW1hbCAobG9u
ZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190Z2FtbWFsIChsb25nIGRv
dWJsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZ2FtbWFsIChsb25nIGRvdWJs
ZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2dhbW1hbCAobG9uZyBkb3VibGUpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbF9yIChsb25nIGRvdWJsZSwg
aW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbF9y
IChsb25nIGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxv
bmcgZG91YmxlIHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19yaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBk
b3VibGUgbmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4
dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0dG93YXJkbCAo
bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4dHRvd2FyZGwgKGxvbmcgZG91
YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSByZW1haW5kZXJsIChsb25nIGRvdWJsZSBfX3gs
IGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JlbWFpbmRl
cmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGxvbmcgZG91YmxlIHNjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRo
cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYmwgKGxvbmcgZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2FsYm5sIChs
b25nIGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19z
Y2FsYm5sIChsb25nIGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IGlsb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2dibCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2FsYmxu
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19zY2FsYmxubCAobG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgp
OwoKCgpleHRlcm4gbG9uZyBkb3VibGUgbmVhcmJ5aW50bCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmVhcmJ5aW50bCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgdHJ1bmNsIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
dHJ1bmNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSByZW1xdW9sIChsb25nIGRvdWJsZSBfX3gsIGxv
bmcgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X3JlbXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0
aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZkaW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg
ZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZkaW1sIChsb25nIGRv
dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl
IGZtYXhsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2ZtYXhsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtaW5sIChsb25nIGRvdWJsZSBfX3gsIGxv
bmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtaW5sIChsb25n
IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19m
cGNsYXNzaWZ5bCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRsIChsb25nIGRvdWJsZSBf
X3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0
ZXJuIGxvbmcgZG91YmxlIGZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBs
b25nIGRvdWJsZSBfX3opIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWFsIChsb25n
IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196KSB0aHJvdyAoKTsK
IyAxMDAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDExMyAiL3Vzci9pbmNsdWRlL21hdGgu
aCIgMwpleHRlcm4gaW50IHNpZ25nYW07CiMgMTU0ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCmVu
dW0KICB7CiAgICBGUF9OQU4sCgogICAgRlBfSU5GSU5JVEUsCgogICAgRlBfWkVSTywKCiAgICBG
UF9TVUJOT1JNQUwsCgogICAgRlBfTk9STUFMCgogIH07CiMgMjQwICIvdXNyL2luY2x1ZGUvbWF0
aC5oIiAzCnR5cGVkZWYgZW51bQp7CiAgX0lFRUVfID0gLTEsCiAgX1NWSURfLAogIF9YT1BFTl8s
CiAgX1BPU0lYXywKICBfSVNPQ18KfSBfTElCX1ZFUlNJT05fVFlQRTsKCgoKCmV4dGVybiBfTElC
X1ZFUlNJT05fVFlQRSBfTElCX1ZFUlNJT047CiMgMjYzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAz
CnN0cnVjdCBfX2V4Y2VwdGlvbgoKCgogIHsKICAgIGludCB0eXBlOwogICAgY2hhciAqbmFtZTsK
ICAgIGRvdWJsZSBhcmcxOwogICAgZG91YmxlIGFyZzI7CiAgICBkb3VibGUgcmV0dmFsOwogIH07
CgoKZXh0ZXJuIGludCBtYXRoZXJyIChzdHJ1Y3QgX19leGNlcHRpb24gKl9fZXhjKSB0aHJvdyAo
KTsKIyAzNTAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9t
YXRoaW5saW5lLmgiIDEgMwojIDEyNyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAz
Cl9faW5saW5lIGludApfX3NpZ25iaXRmIChmbG9hdCBfX3gpIHRocm93ICgpCnsKICBfX2V4dGVu
c2lvbl9fIHVuaW9uIHsgZmxvYXQgX19mOyBpbnQgX19pOyB9IF9fdSA9IHsgX19mOiBfX3ggfTsK
ICByZXR1cm4gX191Ll9faSA8IDA7Cn0KX19pbmxpbmUgaW50Cl9fc2lnbmJpdCAoZG91YmxlIF9f
eCkgdGhyb3cgKCkKewogIF9fZXh0ZW5zaW9uX18gdW5pb24geyBkb3VibGUgX19kOyBpbnQgX19p
WzJdOyB9IF9fdSA9IHsgX19kOiBfX3ggfTsKICByZXR1cm4gX191Ll9faVsxXSA8IDA7Cn0KX19p
bmxpbmUgaW50Cl9fc2lnbmJpdGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkKewogIF9fZXh0
ZW5zaW9uX18gdW5pb24geyBsb25nIGRvdWJsZSBfX2w7IGludCBfX2lbM107IH0gX191ID0geyBf
X2w6IF9feCB9OwogIHJldHVybiAoX191Ll9faVsyXSAmIDB4ODAwMCkgIT0gMDsKfQojIDI5MSAi
L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJsZSBfX3NnbiAo
ZG91YmxlKSB0aHJvdyAoKTsgX19pbmxpbmUgZG91YmxlIF9fc2duIChkb3VibGUgX194KSB0aHJv
dyAoKSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjAp
OyB9IF9faW5saW5lIGZsb2F0IF9fc2duZiAoZmxvYXQpIHRocm93ICgpOyBfX2lubGluZSBmbG9h
dCBfX3NnbmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX194ID09IDAuMCA/IDAuMCA6
IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBfX3Nnbmwg
KGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ25sIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9feCA9PSAwLjAgPyAwLjAgOiAoX194ID4g
MC4wID8gMS4wIDogLTEuMCk7IH0KIyA0MjYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUu
aCIgMwpfX2lubGluZSBkb3VibGUgYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93
ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgi
ZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSki
KTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgYXRhbjJmIChmbG9hdCBfX3ksIGZs
b2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBf
X3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAo
X195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBh
dGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lz
dGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAi
PXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJldHVybiBf
X3ZhbHVlOyB9Cl9faW5saW5lIGxvbmcgZG91YmxlIF9fYXRhbjJsIChsb25nIGRvdWJsZSBfX3ks
IGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVl
OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9f
eCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfQoKCl9faW5saW5lIGRv
dWJsZSBmbW9kIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxv
bmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtXG5cdCIgImZu
c3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSkgOiAiMCIg
KF9feCksICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGlu
ZSBmbG9hdCBmbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIg
bG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW1cblx0IiAi
Zm5zdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIw
IiAoX194KSwgInUiIChfX3kpIDogImF4IiwgImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5s
aW5lIGxvbmcgZG91YmxlIGZtb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg
dGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxl
X18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6
ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0
dXJuIF9fdmFsdWU7IH0KIyA0NDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpf
X2lubGluZSBkb3VibGUgc3FydCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBkb3Vi
bGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0
KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBmbG9hdCBzcXJ0ZiAo
ZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2FzbSBfX3Zv
bGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4g
X19yZXN1bHQ7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgc3FydGwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGls
ZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVz
dWx0OyB9Cl9faW5saW5lIGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9f
ICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0
OyB9CgoKX19pbmxpbmUgZG91YmxlIGZhYnMgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJu
IF9fYnVpbHRpbl9mYWJzIChfX3gpOyB9Cl9faW5saW5lIGZsb2F0IGZhYnNmIChmbG9hdCBfX3gp
IHRocm93ICgpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZiAoX194KTsgfQpfX2lubGluZSBsb25n
IGRvdWJsZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJldHVybiBfX2J1aWx0
aW5fZmFic2wgKF9feCk7IH0KX19pbmxpbmUgbG9uZyBkb3VibGUgX19mYWJzbCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2wgKF9feCk7IH0KIyA0Njcg
Ii91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgYXRhbiAo
ZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9f
dm9sYXRpbGVfXyAoImZsZDE7IGZwYXRhbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkg
OiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGZsb2F0IGF0YW5mIChmbG9h
dCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRp
bGVfXyAoImZsZDE7IGZwYXRhbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3Qo
MSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGF0YW5sIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9f
YXNtIF9fdm9sYXRpbGVfXyAoImZsZDE7IGZwYXRhbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIg
KF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9CgpfX2lubGluZSBsb25nIGRvdWJs
ZSBfX3NnbjFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IF9faW5saW5lIGxvbmcgZG91YmxlIF9f
c2duMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyBfX2V4dGVuc2lvbl9fIHVuaW9uIHsg
bG9uZyBkb3VibGUgX194bGQ7IHVuc2lnbmVkIGludCBfX3hpWzNdOyB9IF9fbiA9IHsgX194bGQ6
IF9feCB9OyBfX24uX194aVsyXSA9IChfX24uX194aVsyXSAmIDB4ODAwMCkgfCAweDNmZmY7IF9f
bi5fX3hpWzFdID0gMHg4MDAwMDAwMDsgX19uLl9feGlbMF0gPSAwOyByZXR1cm4gX19uLl9feGxk
OyB9CiMgNDkzICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZG91
YmxlIGZsb29yIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f
dmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5z
aWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDog
Ij1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBf
X3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGls
ZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0
aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxp
bmUgZmxvYXQgZmxvb3JmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi
bGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGls
ZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAl
MCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0MDA7IF9f
YXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3Zv
bGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9f
dm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBf
X2lubGluZSBsb25nIGRvdWJsZSBmbG9vcmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyBy
ZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGlu
dCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3Zv
bGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhm
M2ZmKSB8IDB4MDQwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3
dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAi
IChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJl
dHVybiBfX3ZhbHVlOyB9CiMgNTA0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMK
X19pbmxpbmUgZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9u
ZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192
b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZu
c3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA4
MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2Fz
bSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9f
YXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1
ZTsgfSBfX2lubGluZSBmbG9hdCBjZWlsZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVy
IGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7
IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUg
KCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwg
MHgwODAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsg
X19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkp
OyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9f
dmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgY2VpbGwgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVk
IHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBf
X2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChf
X2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDog
Im0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFs
dWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChf
X2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9CiMgNTIyICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5s
aW5lLmgiIDMKX19pbmxpbmUgZG91YmxlCmxkZXhwIChkb3VibGUgX194LCBpbnQgX195KSB0aHJv
dyAoKQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9f
ICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJs
ZSkgX195KSk7IHJldHVybiBfX3ZhbHVlOwp9CiMgNTQwICIvdXNyL2luY2x1ZGUvYml0cy9tYXRo
aW5saW5lLmgiIDMKX19pbmxpbmUgZG91YmxlIGxvZzFwIChkb3VibGUgX194KSB0aHJvdyAoKSB7
IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IGlmIChfX2ZhYnNsIChfX3gpID49IDEuMCAt
IDAuNSAqIDEuNDE0MjEzNTYyMzczMDk1MDQ4ODBMKSBfX3ZhbHVlID0gbG9nbCAoMS4wICsgX194
KTsgZWxzZSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsbjJcblx0IiAiZnhjaFxuXHQiICJmeWwy
eHAxIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Zh
bHVlOyB9IF9faW5saW5lIGZsb2F0IGxvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lz
dGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IGlmIChfX2ZhYnNsIChfX3gpID49IDEuMCAtIDAuNSAq
IDEuNDE0MjEzNTYyMzczMDk1MDQ4ODBMKSBfX3ZhbHVlID0gbG9nbCAoMS4wICsgX194KTsgZWxz
ZSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsbjJcblx0IiAiZnhjaFxuXHQiICJmeWwyeHAxIiA6
ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9
IF9faW5saW5lIGxvbmcgZG91YmxlIGxvZzFwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7
IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IGlmIChfX2ZhYnNsIChfX3gpID49IDEuMCAt
IDAuNSAqIDEuNDE0MjEzNTYyMzczMDk1MDQ4ODBMKSBfX3ZhbHVlID0gbG9nbCAoMS4wICsgX194
KTsgZWxzZSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsbjJcblx0IiAiZnhjaFxuXHQiICJmeWwy
eHAxIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Zh
bHVlOyB9CiMgNTU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUg
ZG91YmxlIGFzaW5oIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl
IF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0
bCAoX195ICogX195ICsgMS4wKSArIDEuMCkgKyBfX3kpICogX19zZ24xbCAoX194KSk7IH0gX19p
bmxpbmUgZmxvYXQgYXNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBk
b3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIChsb2cxcGwgKF9feSAqIF9feSAvIChf
X3NxcnRsIChfX3kgKiBfX3kgKyAxLjApICsgMS4wKSArIF9feSkgKiBfX3NnbjFsIChfX3gpKTsg
fSBfX2lubGluZSBsb25nIGRvdWJsZSBhc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkg
eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFw
bCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195KSAq
IF9fc2duMWwgKF9feCkpOyB9CgoKCgpfX2lubGluZSBkb3VibGUgYWNvc2ggKGRvdWJsZSBfX3gp
IHRocm93ICgpIHsgcmV0dXJuIGxvZ2wgKF9feCArIF9fc3FydGwgKF9feCAtIDEuMCkgKiBfX3Nx
cnRsIChfX3ggKyAxLjApKTsgfSBfX2lubGluZSBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCkgdGhy
b3cgKCkgeyByZXR1cm4gbG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwg
KF9feCArIDEuMCkpOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGFjb3NobCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKSB7IHJldHVybiBsb2dsIChfX3ggKyBfX3NxcnRsIChfX3ggLSAxLjApICog
X19zcXJ0bCAoX194ICsgMS4wKSk7IH0KCgpfX2lubGluZSBkb3VibGUgYXRhbmggKGRvdWJsZSBf
X3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsg
cmV0dXJuIC0wLjUgKiBsb2cxcGwgKC0oX195ICsgX195KSAvICgxLjAgKyBfX3kpKSAqIF9fc2du
MWwgKF9feCk7IH0gX19pbmxpbmUgZmxvYXQgYXRhbmhmIChmbG9hdCBfX3gpIHRocm93ICgpIHsg
cmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIC0wLjUgKiBs
b2cxcGwgKC0oX195ICsgX195KSAvICgxLjAgKyBfX3kpKSAqIF9fc2duMWwgKF9feCk7IH0gX19p
bmxpbmUgbG9uZyBkb3VibGUgYXRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVn
aXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIC0wLjUgKiBsb2cx
cGwgKC0oX195ICsgX195KSAvICgxLjAgKyBfX3kpKSAqIF9fc2duMWwgKF9feCk7IH0KCgoKCl9f
aW5saW5lIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgeyBy
ZXR1cm4gX19zcXJ0bCAoX194ICogX194ICsgX195ICogX195KTsgfSBfX2lubGluZSBmbG9hdCBo
eXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSB7IHJldHVybiBfX3NxcnRsIChf
X3ggKiBfX3ggKyBfX3kgKiBfX3kpOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGh5cG90bCAobG9u
ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmV0dXJuIF9fc3FydGwg
KF9feCAqIF9feCArIF9feSAqIF9feSk7IH0KCl9faW5saW5lIGRvdWJsZSBsb2diIChkb3VibGUg
X194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxv
bmcgZG91YmxlIF9fanVuazsgX19hc20gX192b2xhdGlsZV9fICgiZnh0cmFjdFxuXHQiIDogIj10
IiAoX19qdW5rKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsg
fSBfX2lubGluZSBmbG9hdCBsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxv
bmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fanVuazsgX19hc20gX192
b2xhdGlsZV9fICgiZnh0cmFjdFxuXHQiIDogIj10IiAoX19qdW5rKSwgIj11IiAoX192YWx1ZSkg
OiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBsb2di
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFs
dWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fanVuazsgX19hc20gX192b2xhdGlsZV9fICgiZnh0
cmFjdFxuXHQiIDogIj10IiAoX19qdW5rKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBy
ZXR1cm4gX192YWx1ZTsgfQojIDU4NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAz
Cl9faW5saW5lIGZsb2F0CmxkZXhwZiAoZmxvYXQgX194LCBpbnQgX195KSB0aHJvdyAoKQp7CiAg
cmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxl
IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkgX195KSk7
IHJldHVybiBfX3ZhbHVlOwp9CgpfX2lubGluZSBsb25nIGRvdWJsZQpsZGV4cGwgKGxvbmcgZG91
YmxlIF9feCwgaW50IF9feSkgdGhyb3cgKCkKewogIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFs
dWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAo
X194KSwgInUiICgobG9uZyBkb3VibGUpIF9feSkpOyByZXR1cm4gX192YWx1ZTsKfQojIDYwOCAi
L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGxvbmcgaW50CmxyaW50
ZiAoZmxvYXQgX194KSB0aHJvdyAoKQp7CiAgbG9uZyBpbnQgX19scmludHJlczsgX19hc21fXyBf
X3ZvbGF0aWxlX18gKCJmaXN0cGwgJTAiIDogIj1tIiAoX19scmludHJlcykgOiAidCIgKF9feCkg
OiAic3QiKTsgcmV0dXJuIF9fbHJpbnRyZXM7Cn0KX19pbmxpbmUgbG9uZyBpbnQKbHJpbnQgKGRv
dWJsZSBfX3gpIHRocm93ICgpCnsKICBsb25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9s
YXRpbGVfXyAoImZpc3RwbCAlMCIgOiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJz
dCIpOyByZXR1cm4gX19scmludHJlczsKfQpfX2lubGluZSBsb25nIGludApscmludGwgKGxvbmcg
ZG91YmxlIF9feCkgdGhyb3cgKCkKewogIGxvbmcgaW50IF9fbHJpbnRyZXM7IF9fYXNtX18gX192
b2xhdGlsZV9fICgiZmlzdHBsICUwIiA6ICI9bSIgKF9fbHJpbnRyZXMpIDogInQiIChfX3gpIDog
InN0Iik7IHJldHVybiBfX2xyaW50cmVzOwp9CiMgNjMxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRo
aW5saW5lLmgiIDMKX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJpbnRmIChmbG9hdCBfX3gpIHRo
cm93ICgpCnsKICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVf
XyAoImZpc3RwbGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7
IHJldHVybiBfX2xscmludHJlczsKfQpfX2lubGluZSBsb25nIGxvbmcgaW50CmxscmludCAoZG91
YmxlIF9feCkgdGhyb3cgKCkKewogIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRyZXM7IF9fYXNtX18g
X192b2xhdGlsZV9fICgiZmlzdHBsbCAlMCIgOiAiPW0iIChfX2xscmludHJlcykgOiAidCIgKF9f
eCkgOiAic3QiKTsgcmV0dXJuIF9fbGxyaW50cmVzOwp9Cl9faW5saW5lIGxvbmcgbG9uZyBpbnQK
bGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgbG9uZyBsb25nIGludCBfX2xs
cmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGxsICUwIiA6ICI9bSIgKF9fbGxy
aW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19sbHJpbnRyZXM7Cn0KCgoKCgoK
Cl9faW5saW5lIGRvdWJsZSBkcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSB7
IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBpbnQgX19jbG9iYmVyZWQ7IF9fYXNt
IF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQiICJmc3RzdwklJWF4XG5cdCIgInNhaGZcblx0
IiAianAJMWIiIDogIj10IiAoX192YWx1ZSksICI9JmEiIChfX2Nsb2JiZXJlZCkgOiAiMCIgKF9f
eCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBk
cmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9f
dmFsdWU7IHJlZ2lzdGVyIGludCBfX2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJ
ZnByZW0xXG5cdCIgImZzdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChf
X3ZhbHVlKSwgIj0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNj
Iik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRv
dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgeyByZWdpc3RlciBkb3VibGUgX192
YWx1ZTsgcmVnaXN0ZXIgaW50IF9fY2xvYmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglm
cHJlbTFcblx0IiAiZnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9f
dmFsdWUpLCAiPSZhIiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2Mi
KTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA2NjYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUu
aCIgMwpfX2lubGluZSBpbnQKX19maW5pdGUgKGRvdWJsZSBfX3gpIHRocm93ICgpCnsKICByZXR1
cm4gKF9fZXh0ZW5zaW9uX18KICAgICAgICAgICgoKCgodW5pb24geyBkb3VibGUgX19kOyBpbnQg
X19pWzJdOyB9KSB7X19kOiBfX3h9KS5fX2lbMV0KICAgICAgICAgICAgIHwgMHg4MDBmZmZmZnUp
ICsgMSkgPj4gMzEpKTsKfQojIDM1MSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgNDExICIv
dXNyL2luY2x1ZGUvbWF0aC5oIiAzCn0KIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
VW5pdENvbnZlcnNpb24uaCIgMgojIDM5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNVbml0
Q29udmVyc2lvbi5oIgppbmxpbmUgbnNjb29yZCBOU1RvQ29vcmRGbG9vcihmbG9hdCBhVmFsdWUp
CnsKICByZXR1cm4gKCgwLjBmIDw9IGFWYWx1ZSkgPyBuc2Nvb3JkKGFWYWx1ZSkgOiBuc2Nvb3Jk
KGFWYWx1ZSAtIDAuOTk5OTk5OTk5OTk5OTk5OWYpKTsKfQoKaW5saW5lIG5zY29vcmQgTlNUb0Nv
b3JkQ2VpbChmbG9hdCBhVmFsdWUpCnsKICByZXR1cm4gKCgwLjBmIDw9IGFWYWx1ZSkgPyBuc2Nv
b3JkKGFWYWx1ZSArIDAuOTk5OTk5OTk5OTk5OTk5OWYpIDogbnNjb29yZChhVmFsdWUpKTsKfQoK
aW5saW5lIG5zY29vcmQgTlNUb0Nvb3JkUm91bmQoZmxvYXQgYVZhbHVlKQp7CiAgcmV0dXJuICgo
MC4wZiA8PSBhVmFsdWUpID8gbnNjb29yZChhVmFsdWUgKyAwLjVmKSA6IG5zY29vcmQoYVZhbHVl
IC0gMC41ZikpOwp9CgppbmxpbmUgbnNjb29yZCBOU1RvQ29vcmRSb3VuZEV4Y2x1c2l2ZShmbG9h
dCBhVmFsdWUpCnsKICByZXR1cm4gKCgwLjBmIDw9IGFWYWx1ZSkgPyBuc2Nvb3JkKGFWYWx1ZSAr
IDAuNDk5OTk5OTk5OTk5OTk5OWYpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc2Nv
b3JkKGFWYWx1ZSAtIDAuNDk5OTk5OTk5OTk5OTk5OWYpKTsKfQoKCgoKCmlubGluZSBQUkludDMy
IE5TVG9JbnRGbG9vcihmbG9hdCBhVmFsdWUpCnsKICByZXR1cm4gKCgwLjBmIDw9IGFWYWx1ZSkg
PyBQUkludDMyKGFWYWx1ZSkgOiBQUkludDMyKGFWYWx1ZSAtIDAuOTk5OTk5OTk5OTk5OTk5OWYp
KTsKfQoKaW5saW5lIFBSSW50MzIgTlNUb0ludENlaWwoZmxvYXQgYVZhbHVlKQp7CiAgcmV0dXJu
ICgoMC4wZiA8PSBhVmFsdWUpID8gUFJJbnQzMihhVmFsdWUgKyAwLjk5OTk5OTk5OTk5OTk5OTlm
KSA6IFBSSW50MzIoYVZhbHVlKSk7Cn0KCmlubGluZSBQUkludDMyIE5TVG9JbnRSb3VuZChmbG9h
dCBhVmFsdWUpCnsKICByZXR1cm4gKCgwLjBmIDw9IGFWYWx1ZSkgPyBQUkludDMyKGFWYWx1ZSAr
IDAuNWYpIDogUFJJbnQzMihhVmFsdWUgLSAwLjVmKSk7Cn0KCmlubGluZSBQUkludDMyIE5TVG9J
bnRSb3VuZEV4Y2x1c2l2ZShmbG9hdCBhVmFsdWUpCnsKICByZXR1cm4gKCgwLjBmIDw9IGFWYWx1
ZSkgPyBQUkludDMyKGFWYWx1ZSArIDAuNDk5OTk5OTk5OTk5OTk5OWYpIDoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUkludDMyKGFWYWx1ZSAtIDAuNDk5OTk5OTk5OTk5OTk5OWYpKTsK
fQoKCgoKCmlubGluZSBuc2Nvb3JkIE5TRmxvYXRQb2ludHNUb1R3aXBzKGZsb2F0IGFQb2ludHMp
CnsKICByZXR1cm4gTlNUb0Nvb3JkUm91bmQoYVBvaW50cyAqIDIwLjBmKTsKfQoKaW5saW5lIG5z
Y29vcmQgTlNJbnRQb2ludHNUb1R3aXBzKFBSSW50MzIgYVBvaW50cykKewogIHJldHVybiBuc2Nv
b3JkKGFQb2ludHMgKiAyMCk7Cn0KCmlubGluZSBQUkludDMyIE5TVHdpcHNUb0ludFBvaW50cyhu
c2Nvb3JkIGFUd2lwcykKewogIHJldHVybiBOU1RvSW50Um91bmQoYVR3aXBzIC8gMjAuMGYpOwp9
CgppbmxpbmUgUFJJbnQzMiBOU1R3aXBzVG9GbG9vckludFBvaW50cyhuc2Nvb3JkIGFUd2lwcykK
ewogIHJldHVybiBOU1RvSW50Rmxvb3IoYVR3aXBzIC8gMjAuMGYpOwp9CgppbmxpbmUgUFJJbnQz
MiBOU1R3aXBzVG9DZWlsSW50UG9pbnRzKG5zY29vcmQgYVR3aXBzKQp7CiAgcmV0dXJuIE5TVG9J
bnRDZWlsKGFUd2lwcyAvIDIwLjBmKTsKfQoKaW5saW5lIGZsb2F0IE5TVHdpcHNUb0Zsb2F0UG9p
bnRzKG5zY29vcmQgYVR3aXBzKQp7CiAgcmV0dXJuIChmbG9hdChhVHdpcHMpIC8gMjAuMGYpOwp9
CgoKCgppbmxpbmUgbnNjb29yZCBOU0Zsb2F0UGl4ZWxzVG9Ud2lwcyhmbG9hdCBhUGl4ZWxzLCBm
bG9hdCBhVHdpcHNQZXJQaXhlbCkKewogIHJldHVybiBOU1RvQ29vcmRSb3VuZChhUGl4ZWxzICog
YVR3aXBzUGVyUGl4ZWwpOwp9CgppbmxpbmUgbnNjb29yZCBOU0ludFBpeGVsc1RvVHdpcHMoUFJJ
bnQzMiBhUGl4ZWxzLCBmbG9hdCBhVHdpcHNQZXJQaXhlbCkKewogIHJldHVybiBOU1RvQ29vcmRS
b3VuZChmbG9hdChhUGl4ZWxzKSAqIGFUd2lwc1BlclBpeGVsKTsKfQoKaW5saW5lIGZsb2F0IE5T
VHdpcHNUb0Zsb2F0UGl4ZWxzKG5zY29vcmQgYVR3aXBzLCBmbG9hdCBhUGl4ZWxzUGVyVHdpcCkK
ewogIHJldHVybiAoZmxvYXQoYVR3aXBzKSAqIGFQaXhlbHNQZXJUd2lwKTsKfQoKaW5saW5lIFBS
SW50MzIgTlNUd2lwc1RvSW50UGl4ZWxzKG5zY29vcmQgYVR3aXBzLCBmbG9hdCBhUGl4ZWxzUGVy
VHdpcCkKewogIHJldHVybiBOU1RvSW50Um91bmQoZmxvYXQoYVR3aXBzKSAqIGFQaXhlbHNQZXJU
d2lwKTsKfQoKCgoKaW5saW5lIG5zY29vcmQgTlNVbml0c1RvVHdpcHMoZmxvYXQgYVZhbHVlLCBm
bG9hdCBhUG9pbnRzUGVyVW5pdCkKewogIHJldHVybiBOU1RvQ29vcmRSb3VuZChhVmFsdWUgKiBh
UG9pbnRzUGVyVW5pdCAqIDIwLjBmKTsKfQoKaW5saW5lIGZsb2F0IE5TVHdpcHNUb1VuaXRzKG5z
Y29vcmQgYVR3aXBzLCBmbG9hdCBhVW5pdHNQZXJQb2ludCkKewogIHJldHVybiAoYVR3aXBzICog
KGFVbml0c1BlclBvaW50IC8gMjAuMGYpKTsKfQojIDMzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNSZWN0LmgiIDIKCnN0cnVjdCBuc1JlY3QgewogIG5zY29vcmQgeCwgeTsKICBuc2Nvb3Jk
IHdpZHRoLCBoZWlnaHQ7CgoKICBuc1JlY3QoKSA6IHgoMCksIHkoMCksIHdpZHRoKDApLCBoZWln
aHQoMCkge30KICBuc1JlY3QoY29uc3QgbnNSZWN0JiBhUmVjdCkgeyp0aGlzID0gYVJlY3Q7fQog
IG5zUmVjdChjb25zdCBuc1BvaW50JiBhT3JpZ2luLCBjb25zdCBuc1NpemUgJmFTaXplKSB7eCA9
IGFPcmlnaW4ueDsgeSA9IGFPcmlnaW4ueTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gYVNpemUud2lkdGg7IGhlaWdodCA9IGFT
aXplLmhlaWdodDt9CiAgbnNSZWN0KG5zY29vcmQgYVgsIG5zY29vcmQgYVksIG5zY29vcmQgYVdp
ZHRoLCBuc2Nvb3JkIGFIZWlnaHQpIHt4ID0gYVg7IHkgPSBhWTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0g
YVdpZHRoOyBoZWlnaHQgPSBhSGVpZ2h0O30KCgoKICBQUkJvb2wgSXNFbXB0eSgpIGNvbnN0IHsK
ICAgIHJldHVybiAoUFJCb29sKSAoKHdpZHRoIDw9IDApIHx8IChoZWlnaHQgPD0gMCkpOwogIH0K
ICB2b2lkIEVtcHR5KCkge3dpZHRoID0gaGVpZ2h0ID0gMDt9CgoKICBQUkJvb2wgQ29udGFpbnMo
Y29uc3QgbnNSZWN0JiBhUmVjdCkgY29uc3Q7CiAgUFJCb29sIENvbnRhaW5zKG5zY29vcmQgYVgs
IG5zY29vcmQgYVkpIGNvbnN0OwogIFBSQm9vbCBDb250YWlucyhjb25zdCBuc1BvaW50JiBhUG9p
bnQpIGNvbnN0IHtyZXR1cm4gQ29udGFpbnMoYVBvaW50LngsIGFQb2ludC55KTt9CgoKCiAgUFJC
b29sIEludGVyc2VjdHMoY29uc3QgbnNSZWN0JiBhUmVjdCkgY29uc3Q7CgoKCgoKCiAgUFJCb29s
IEludGVyc2VjdFJlY3QoY29uc3QgbnNSZWN0JiBhUmVjdDEsIGNvbnN0IG5zUmVjdCYgYVJlY3Qy
KTsKCgoKCgoKICBQUkJvb2wgVW5pb25SZWN0KGNvbnN0IG5zUmVjdCYgYVJlY3QxLCBjb25zdCBu
c1JlY3QmIGFSZWN0Mik7CgoKICB2b2lkIFNldFJlY3QobnNjb29yZCBhWCwgbnNjb29yZCBhWSwg
bnNjb29yZCBhV2lkdGgsIG5zY29vcmQgYUhlaWdodCkgewogICAgeCA9IGFYOyB5ID0gYVk7IHdp
ZHRoID0gYVdpZHRoOyBoZWlnaHQgPSBhSGVpZ2h0OwogIH0KICB2b2lkIE1vdmVUbyhuc2Nvb3Jk
IGFYLCBuc2Nvb3JkIGFZKSB7eCA9IGFYOyB5ID0gYVk7fQogIHZvaWQgTW92ZVRvKGNvbnN0IG5z
UG9pbnQmIGFQb2ludCkge3ggPSBhUG9pbnQueDsgeSA9IGFQb2ludC55O30KICB2b2lkIE1vdmVC
eShuc2Nvb3JkIGFEeCwgbnNjb29yZCBhRHkpIHt4ICs9IGFEeDsgeSArPSBhRHk7fQogIHZvaWQg
U2l6ZVRvKG5zY29vcmQgYVdpZHRoLCBuc2Nvb3JkIGFIZWlnaHQpIHt3aWR0aCA9IGFXaWR0aDsg
aGVpZ2h0ID0gYUhlaWdodDt9CiAgdm9pZCBTaXplVG8oY29uc3QgbnNTaXplJiBhU2l6ZSkge1Np
emVUbyhhU2l6ZS53aWR0aCwgYVNpemUuaGVpZ2h0KTt9CiAgdm9pZCBTaXplQnkobnNjb29yZCBh
RGVsdGFXaWR0aCwgbnNjb29yZCBhRGVsdGFIZWlnaHQpIHt3aWR0aCArPSBhRGVsdGFXaWR0aDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlaWdodCArPSBhRGVsdGFIZWlnaHQ7fQoKCiAgdm9pZCBJbmZsYXRlKG5zY29vcmQgYUR4LCBu
c2Nvb3JkIGFEeSk7CiAgdm9pZCBJbmZsYXRlKGNvbnN0IG5zU2l6ZSYgYVNpemUpIHtJbmZsYXRl
KGFTaXplLndpZHRoLCBhU2l6ZS5oZWlnaHQpO30KICB2b2lkIEluZmxhdGUoY29uc3QgbnNNYXJn
aW4mIGFNYXJnaW4pOwoKCiAgdm9pZCBEZWZsYXRlKG5zY29vcmQgYUR4LCBuc2Nvb3JkIGFEeSk7
CiAgdm9pZCBEZWZsYXRlKGNvbnN0IG5zU2l6ZSYgYVNpemUpIHtEZWZsYXRlKGFTaXplLndpZHRo
LCBhU2l6ZS5oZWlnaHQpO30KICB2b2lkIERlZmxhdGUoY29uc3QgbnNNYXJnaW4mIGFNYXJnaW4p
OwoKCgogIFBSQm9vbCBvcGVyYXRvcj09KGNvbnN0IG5zUmVjdCYgYVJlY3QpIGNvbnN0IHsKICAg
IHJldHVybiAoUFJCb29sKSAoKElzRW1wdHkoKSAmJiBhUmVjdC5Jc0VtcHR5KCkpIHx8CiAgICAg
ICAgICAgICAgICAgICAgICgoeCA9PSBhUmVjdC54KSAmJiAoeSA9PSBhUmVjdC55KSAmJgogICAg
ICAgICAgICAgICAgICAgICAgKHdpZHRoID09IGFSZWN0LndpZHRoKSAmJiAoaGVpZ2h0ID09IGFS
ZWN0LmhlaWdodCkpKTsKICB9CiAgUFJCb29sIG9wZXJhdG9yIT0oY29uc3QgbnNSZWN0JiBhUmVj
dCkgY29uc3QgewogICAgcmV0dXJuIChQUkJvb2wpICFvcGVyYXRvcj09KGFSZWN0KTsKICB9CiAg
bnNSZWN0IG9wZXJhdG9yKyhjb25zdCBuc1JlY3QmIGFSZWN0KSBjb25zdCB7CiAgICByZXR1cm4g
bnNSZWN0KHggKyBhUmVjdC54LCB5ICsgYVJlY3QueSwKICAgICAgICAgICAgICAgICAgd2lkdGgg
KyBhUmVjdC53aWR0aCwgaGVpZ2h0ICsgYVJlY3QuaGVpZ2h0KTsKICB9CiAgbnNSZWN0IG9wZXJh
dG9yLShjb25zdCBuc1JlY3QmIGFSZWN0KSBjb25zdCB7CiAgICByZXR1cm4gbnNSZWN0KHggLSBh
UmVjdC54LCB5IC0gYVJlY3QueSwKICAgICAgICAgICAgICAgICAgd2lkdGggLSBhUmVjdC53aWR0
aCwgaGVpZ2h0IC0gYVJlY3QuaGVpZ2h0KTsKICB9CiAgbnNSZWN0JiBvcGVyYXRvcis9KGNvbnN0
IG5zUG9pbnQmIGFQb2ludCkge3ggKz0gYVBvaW50Lng7IHkgKz0gYVBvaW50Lnk7IHJldHVybiAq
dGhpczt9CiAgbnNSZWN0JiBvcGVyYXRvci09KGNvbnN0IG5zUG9pbnQmIGFQb2ludCkge3ggLT0g
YVBvaW50Lng7IHkgLT0gYVBvaW50Lnk7IHJldHVybiAqdGhpczt9CgogIG5zUmVjdCYgb3BlcmF0
b3IqPShjb25zdCBmbG9hdCBhU2NhbGUpIHt4ID0gTlNUb0Nvb3JkUm91bmQoeCAqIGFTY2FsZSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBOU1RvQ29vcmRS
b3VuZCh5ICogYVNjYWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2lkdGggPSBOU1RvQ29vcmRSb3VuZCh3aWR0aCAqIGFTY2FsZSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCA9IE5TVG9Db29yZFJvdW5kKGhlaWdo
dCAqIGFTY2FsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAqdGhpczt9CgogIG5zUmVjdCYgU2NhbGVSb3VuZE91dChjb25zdCBmbG9hdCBhU2NhbGUp
OwogIG5zUmVjdCYgU2NhbGVSb3VuZEluKGNvbnN0IGZsb2F0IGFTY2FsZSk7CgoKICBuc2Nvb3Jk
IFhNb3N0KCkgY29uc3Qge3JldHVybiB4ICsgd2lkdGg7fQogIG5zY29vcmQgWU1vc3QoKSBjb25z
dCB7cmV0dXJuIHkgKyBoZWlnaHQ7fQp9OwoKCmV4dGVybiBGSUxFKiBvcGVyYXRvcjw8KEZJTEUq
IG91dCwgY29uc3QgbnNSZWN0JiByZWN0KTsKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zR1VJRXZlbnQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hhc2h0YWJs
ZS5oIiAxCiMgMzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hhc2h0YWJsZS5oIgojIDEg
Ii9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wbGhh
c2guaCIgMQojIDM3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUuaCIgMgoj
IDEgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9w
cmxvY2suaCIgMQojIDM4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUuaCIg
MgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NvbS5oIiAxCiMgMzkgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0hhc2h0YWJsZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zY29yZS5oIiAxCiMgNDAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hhc2h0
YWJsZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDEKIyA0
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiIDIKCmNsYXNzIG5zSGFz
aHRhYmxlOwpjbGFzcyBuc1N0cmluZ0tleTsKCmNsYXNzIG5zSGFzaEtleSB7CnByb3RlY3RlZDoK
ICBuc0hhc2hLZXkodm9pZCk7CgpwdWJsaWM6CiAgdmlydHVhbCB+bnNIYXNoS2V5KHZvaWQpOwog
IHZpcnR1YWwgUFJVaW50MzIgSGFzaENvZGUodm9pZCkgY29uc3QgPSAwOwogIHZpcnR1YWwgUFJC
b29sIEVxdWFscyhjb25zdCBuc0hhc2hLZXkgKmFLZXkpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5z
SGFzaEtleSAqQ2xvbmUoKSBjb25zdCA9IDA7CiMgNzEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0hhc2h0YWJsZS5oIgp9OwoKCgp0eXBlZGVmIFBSQm9vbCAoKiBuc0hhc2h0YWJsZUVudW1G
dW5jKShuc0hhc2hLZXkgKmFLZXksIHZvaWQgKmFEYXRhLCB2b2lkKiBjbG9zdXJlKTsKCmNsYXNz
IG5zSGFzaHRhYmxlIHsKcHJvdGVjdGVkOgoKICBQUkxvY2sqIG1Mb2NrOwogIFBMSGFzaFRhYmxl
IG1IYXNodGFibGU7CiAgUFJCb29sIG1FbnVtZXJhdGluZzsKCnB1YmxpYzoKICBuc0hhc2h0YWJs
ZShQUlVpbnQzMiBhU2l6ZSA9IDE2LCBQUkJvb2wgdGhyZWFkU2FmZSA9IDApOwogIHZpcnR1YWwg
fm5zSGFzaHRhYmxlKCk7CgogIFBSSW50MzIgQ291bnQodm9pZCkgeyByZXR1cm4gbUhhc2h0YWJs
ZS5uZW50cmllczsgfQogIFBSQm9vbCBFeGlzdHMobnNIYXNoS2V5ICphS2V5KTsKICB2b2lkICpQ
dXQobnNIYXNoS2V5ICphS2V5LCB2b2lkICphRGF0YSk7CiAgdm9pZCAqR2V0KG5zSGFzaEtleSAq
YUtleSk7CiAgdm9pZCAqUmVtb3ZlKG5zSGFzaEtleSAqYUtleSk7CiAgbnNIYXNodGFibGUgKkNs
b25lKCk7CiAgdm9pZCBFbnVtZXJhdGUobnNIYXNodGFibGVFbnVtRnVuYyBhRW51bUZ1bmMsIHZv
aWQqIGNsb3N1cmUgPSBfX251bGwpOwogIHZvaWQgUmVzZXQoKTsKICB2b2lkIFJlc2V0KG5zSGFz
aHRhYmxlRW51bUZ1bmMgZGVzdHJveUZ1bmMsIHZvaWQqIGNsb3N1cmUgPSBfX251bGwpOwp9OwoK
CgoKCnR5cGVkZWYgdm9pZCogKCogbnNIYXNodGFibGVDbG9uZUVsZW1lbnRGdW5jKShuc0hhc2hL
ZXkgKmFLZXksIHZvaWQgKmFEYXRhLCB2b2lkKiBjbG9zdXJlKTsKCmNsYXNzIG5zT2JqZWN0SGFz
aHRhYmxlIDogcHVibGljIG5zSGFzaHRhYmxlIHsKcHVibGljOgogIG5zT2JqZWN0SGFzaHRhYmxl
KG5zSGFzaHRhYmxlQ2xvbmVFbGVtZW50RnVuYyBjbG9uZUVsZW1lbnRGdW4sCiAgICAgICAgICAg
ICAgICAgICAgdm9pZCogY2xvbmVFbGVtZW50Q2xvc3VyZSwKICAgICAgICAgICAgICAgICAgICBu
c0hhc2h0YWJsZUVudW1GdW5jIGRlc3Ryb3lFbGVtZW50RnVuLAogICAgICAgICAgICAgICAgICAg
IHZvaWQqIGRlc3Ryb3lFbGVtZW50Q2xvc3VyZSwKICAgICAgICAgICAgICAgICAgICBQUlVpbnQz
MiBhU2l6ZSA9IDE2LCBQUkJvb2wgdGhyZWFkU2FmZSA9IDApOwogIH5uc09iamVjdEhhc2h0YWJs
ZSgpOwoKICBuc0hhc2h0YWJsZSAqQ2xvbmUoKTsKICB2b2lkIFJlc2V0KCk7CiAgUFJCb29sIFJl
bW92ZUFuZERlbGV0ZShuc0hhc2hLZXkgKmFLZXkpOwoKcHJvdGVjdGVkOgogIHN0YXRpYyBQUklu
dG4gQ29weUVsZW1lbnQoUExIYXNoRW50cnkgKmhlLCBQUkludG4gaSwgdm9pZCAqYXJnKTsKCiAg
bnNIYXNodGFibGVDbG9uZUVsZW1lbnRGdW5jIG1DbG9uZUVsZW1lbnRGdW47CiAgdm9pZCogbUNs
b25lRWxlbWVudENsb3N1cmU7CiAgbnNIYXNodGFibGVFbnVtRnVuYyBtRGVzdHJveUVsZW1lbnRG
dW47CiAgdm9pZCogbURlc3Ryb3lFbGVtZW50Q2xvc3VyZTsKfTsKCgoKCmNsYXNzIG5zSVN1cHBv
cnRzOwoKY2xhc3MgbnNTdXBwb3J0c0hhc2h0YWJsZQogOiBwcml2YXRlIG5zSGFzaHRhYmxlCnsK
cHVibGljOgogIHR5cGVkZWYgUFJCb29sICgqIEVudW1GdW5jKSAobnNIYXNoS2V5ICphS2V5LCB2
b2lkICphRGF0YSwgdm9pZCogY2xvc3VyZSk7CgogIG5zU3VwcG9ydHNIYXNodGFibGUoUFJVaW50
MzIgYVNpemUgPSAxNiwgUFJCb29sIHRocmVhZFNhZmUgPSAwKQogICAgOiBuc0hhc2h0YWJsZShh
U2l6ZSwgdGhyZWFkU2FmZSkge30KICB+bnNTdXBwb3J0c0hhc2h0YWJsZSgpOwoKICBQUkludDMy
IENvdW50ICh2b2lkKQogIHsKICAgIHJldHVybiBuc0hhc2h0YWJsZTo6Q291bnQoKTsKICB9CiAg
UFJCb29sIEV4aXN0cyAobnNIYXNoS2V5ICphS2V5KQogIHsKICAgIHJldHVybiBuc0hhc2h0YWJs
ZTo6RXhpc3RzIChhS2V5KTsKICB9CiAgUFJCb29sIFB1dCAobnNIYXNoS2V5ICphS2V5LAogICAg
ICAgICAgICAgIG5zSVN1cHBvcnRzICphRGF0YSwKICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAq
KnZhbHVlID0gMCk7CiAgbnNJU3VwcG9ydHMqIEdldCAobnNIYXNoS2V5ICphS2V5KTsKICBQUkJv
b2wgUmVtb3ZlIChuc0hhc2hLZXkgKmFLZXksIG5zSVN1cHBvcnRzICoqdmFsdWUgPSAwKTsKICBu
c0hhc2h0YWJsZSAqQ2xvbmUoKTsKICB2b2lkIEVudW1lcmF0ZSAoRW51bUZ1bmMgYUVudW1GdW5j
LCB2b2lkKiBjbG9zdXJlID0gX19udWxsKQogIHsKICAgIG5zSGFzaHRhYmxlOjpFbnVtZXJhdGUg
KGFFbnVtRnVuYywgY2xvc3VyZSk7CiAgfQogIHZvaWQgUmVzZXQoKTsKCiBwcml2YXRlOgogIHN0
YXRpYyBQUkJvb2wgUmVsZWFzZUVsZW1lbnQgKG5zSGFzaEtleSAqLCB2b2lkICosIHZvaWQgKik7
CiAgc3RhdGljIFBSSW50biBFbnVtZXJhdGVDb3B5IChQTEhhc2hFbnRyeSAqLCBQUkludG4sIHZv
aWQgKik7Cn07CgoKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5o
IiAxCiMgMTcxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUuaCIgMgoKY2xh
c3MgbnNJU3VwcG9ydHNLZXkgOiBwdWJsaWMgbnNIYXNoS2V5IHsKcHJvdGVjdGVkOgogIG5zSVN1
cHBvcnRzKiBtS2V5OwoKcHVibGljOgogIG5zSVN1cHBvcnRzS2V5KG5zSVN1cHBvcnRzKiBrZXkp
IHsKCgoKICAgIG1LZXkgPSBrZXk7CiAgICBuc19pZl9hZGRyZWYobUtleSk7CiAgfQoKICB+bnNJ
U3VwcG9ydHNLZXkodm9pZCkgewogICAgZG8geyBpZiAobUtleSkgeyAobUtleSktPlJlbGVhc2Uo
KTsgKG1LZXkpID0gMDsgfSB9IHdoaWxlICgwKTsKICB9CgogIFBSVWludDMyIEhhc2hDb2RlKHZv
aWQpIGNvbnN0IHsKICAgIHJldHVybiAoUFJVaW50MzIpbUtleTsKICB9CgogIFBSQm9vbCBFcXVh
bHMoY29uc3QgbnNIYXNoS2V5ICphS2V5KSBjb25zdCB7CiAgICB7fTsKICAgIHJldHVybiAobUtl
eSA9PSAoKG5zSVN1cHBvcnRzS2V5ICopIGFLZXkpLT5tS2V5KTsKICB9CgogIG5zSGFzaEtleSAq
Q2xvbmUoKSBjb25zdCB7CiAgICByZXR1cm4gbmV3IG5zSVN1cHBvcnRzS2V5KG1LZXkpOwogIH0K
fTsKCgoKCmNsYXNzIG5zVm9pZEtleSA6IHB1YmxpYyBuc0hhc2hLZXkgewpwcm90ZWN0ZWQ6CiAg
dm9pZCogbUtleTsKCnB1YmxpYzoKICBuc1ZvaWRLZXkodm9pZCoga2V5KSB7CgoKCiAgICBtS2V5
ID0ga2V5OwogIH0KCiAgUFJVaW50MzIgSGFzaENvZGUodm9pZCkgY29uc3QgewogICAgcmV0dXJu
IChQUlVpbnQzMiltS2V5OwogIH0KCiAgUFJCb29sIEVxdWFscyhjb25zdCBuc0hhc2hLZXkgKmFL
ZXkpIGNvbnN0IHsKICAgIHt9OwogICAgcmV0dXJuIChtS2V5ID09ICgoY29uc3QgbnNWb2lkS2V5
ICopIGFLZXkpLT5tS2V5KTsKICB9CgogIG5zSGFzaEtleSAqQ2xvbmUoKSBjb25zdCB7CiAgICBy
ZXR1cm4gbmV3IG5zVm9pZEtleShtS2V5KTsKICB9CgogIHZvaWQqIEdldFZhbHVlKCkgeyByZXR1
cm4gbUtleTsgfQp9OwoKCgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRC5oIiAx
CiMgMjM4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUuaCIgMgoKY2xhc3Mg
bnNJREtleSA6IHB1YmxpYyBuc0hhc2hLZXkgewpwcm90ZWN0ZWQ6CiAgbnNJRCBtSUQ7CgpwdWJs
aWM6CiAgbnNJREtleShjb25zdCBuc0lEICZhSUQpIHsKCgoKICAgIG1JRCA9IGFJRDsKICB9Cgog
IFBSVWludDMyIEhhc2hDb2RlKHZvaWQpIGNvbnN0IHsKICAgIHJldHVybiBtSUQubTA7CiAgfQoK
ICBQUkJvb2wgRXF1YWxzKGNvbnN0IG5zSGFzaEtleSAqYUtleSkgY29uc3QgewogICAge307CiAg
ICByZXR1cm4gKG1JRC5FcXVhbHMoKChjb25zdCBuc0lES2V5ICopIGFLZXkpLT5tSUQpKTsKICB9
CgogIG5zSGFzaEtleSAqQ2xvbmUoKSBjb25zdCB7CiAgICByZXR1cm4gbmV3IG5zSURLZXkobUlE
KTsKICB9Cn07CgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDEK
IyAyNjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hhc2h0YWJsZS5oIiAyCgoKY2xhc3Mg
bnNDU3RyaW5nS2V5IDogcHVibGljIG5zSGFzaEtleSB7CnB1YmxpYzoKCiAgZW51bSBPd25lcnNo
aXAgewogICAgTkVWRVJfT1dOLAogICAgT1dOX0NMT05FLAogICAgT1dOCiAgfTsKCiAgbnNDU3Ry
aW5nS2V5KGNvbnN0IGNoYXIqIHN0ciwgUFJJbnQzMiBzdHJMZW4gPSAtMSwgT3duZXJzaGlwIG93
biA9IE9XTl9DTE9ORSk7CiAgbnNDU3RyaW5nS2V5KGNvbnN0IG5zQ1N0cmluZyYgc3RyKTsKICB+
bnNDU3RyaW5nS2V5KHZvaWQpOwoKICBQUlVpbnQzMiBIYXNoQ29kZSh2b2lkKSBjb25zdDsKICBQ
UkJvb2wgRXF1YWxzKGNvbnN0IG5zSGFzaEtleSogYUtleSkgY29uc3Q7CiAgbnNIYXNoS2V5KiBD
bG9uZSgpIGNvbnN0OwoKCgogIGNvbnN0IGNoYXIqIEdldFN0cmluZygpIGNvbnN0IHsgcmV0dXJu
IG1TdHI7IH0KICBQUlVpbnQzMiBHZXRTdHJpbmdMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtU3Ry
TGVuOyB9Cgpwcm90ZWN0ZWQ6CiAgY2hhciogbVN0cjsKICBQUlVpbnQzMiBtU3RyTGVuOwogIE93
bmVyc2hpcCBtT3duZXJzaGlwOwp9OwoKCmNsYXNzIG5zU3RyaW5nS2V5IDogcHVibGljIG5zSGFz
aEtleSB7CnB1YmxpYzoKCiAgZW51bSBPd25lcnNoaXAgewogICAgTkVWRVJfT1dOLAogICAgT1dO
X0NMT05FLAogICAgT1dOCiAgfTsKCiAgbnNTdHJpbmdLZXkoY29uc3QgUFJVbmljaGFyKiBzdHIs
IFBSSW50MzIgc3RyTGVuID0gLTEsIE93bmVyc2hpcCBvd24gPSBPV05fQ0xPTkUpOwogIG5zU3Ry
aW5nS2V5KGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBzdHIpOwogIH5uc1N0cmluZ0tleSh2b2lk
KTsKCiAgUFJVaW50MzIgSGFzaENvZGUodm9pZCkgY29uc3Q7CiAgUFJCb29sIEVxdWFscyhjb25z
dCBuc0hhc2hLZXkqIGFLZXkpIGNvbnN0OwogIG5zSGFzaEtleSogQ2xvbmUoKSBjb25zdDsKCgoK
ICBjb25zdCBQUlVuaWNoYXIqIEdldFN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1TdHI7IH0KICBQ
UlVpbnQzMiBHZXRTdHJpbmdMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtU3RyTGVuOyB9Cgpwcm90
ZWN0ZWQ6CiAgUFJVbmljaGFyKiBtU3RyOwogIFBSVWludDMyIG1TdHJMZW47CiAgT3duZXJzaGlw
IG1Pd25lcnNoaXA7Cn07CgoKY2xhc3MgbnNPcGFxdWVLZXkgOiBwdWJsaWMgbnNIYXNoS2V5IHsK
cHVibGljOgoKICBlbnVtIE93bmVyc2hpcCB7CiAgICBORVZFUl9PV04sCiAgICBPV05fQ0xPTkUs
CiAgICBPV04KICB9OwoKICBuc09wYXF1ZUtleShjb25zdCBjaGFyKiBidWYsIFBSVWludDMyIGJ1
ZkxlbiwgT3duZXJzaGlwIG93biA9IE9XTl9DTE9ORSk7CiAgfm5zT3BhcXVlS2V5KHZvaWQpOwoK
ICBQUlVpbnQzMiBIYXNoQ29kZSh2b2lkKSBjb25zdDsKICBQUkJvb2wgRXF1YWxzKGNvbnN0IG5z
SGFzaEtleSogYUtleSkgY29uc3Q7CiAgbnNIYXNoS2V5KiBDbG9uZSgpIGNvbnN0OwoKCgogIGNv
bnN0IGNoYXIqIEdldEJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1CdWY7IH0KICBQUlVpbnQzMiBH
ZXRCdWZmZXJMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtQnVmTGVuOyB9Cgpwcm90ZWN0ZWQ6CiAg
Y2hhciogbUJ1ZjsKICBQUlVpbnQzMiBtQnVmTGVuOwogIE93bmVyc2hpcCBtT3duZXJzaGlwOwp9
OwojIDI5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNHVUlFdmVudC5oIiAyCgoKCgoKCgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01LZXlFdmVudC5oIiAxCiMgMTAgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01LZXlFdmVudC5oIgojIDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lET01VSUV2ZW50LmgiIDEKIyAxMCAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSURPTVVJRXZlbnQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
RE9NRXZlbnQuaCIgMQojIDEwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NRXZlbnQu
aCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tc3R1YnMuaCIgMQojIDE3ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tc3R1YnMuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNBV3JpdGFibGVTdHJpbmcuaCIgMQojIDE4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvZG9tc3R1YnMuaCIgMgppbmxpbmUgUFJCb29sIERPTVN0cmluZ0lzTnVsbChjb25zdCBuc0FS
ZWFkYWJsZVN0cmluZyYgYVN0cmluZykKewoKICByZXR1cm4gMDsKfQppbmxpbmUgdm9pZCBTZXRE
T01TdHJpbmdUb051bGwobnNBV3JpdGFibGVTdHJpbmcmIGFTdHJpbmcpCnsKICBhU3RyaW5nLlRy
dW5jYXRlKCk7Cgp9CnR5cGVkZWYgUFJVaW50NjQgRE9NVGltZVN0YW1wOwoKY2xhc3MgbnNJRE9N
QXR0cjsKCmNsYXNzIG5zSURPTUNEQVRBU2VjdGlvbjsKCmNsYXNzIG5zSURPTUNoYXJhY3RlckRh
dGE7CgpjbGFzcyBuc0lET01Db21tZW50OwoKY2xhc3MgbnNJRE9NRE9NSW1wbGVtZW50YXRpb247
CgpjbGFzcyBuc0lET01Eb2N1bWVudDsKCmNsYXNzIG5zSURPTURvY3VtZW50RnJhZ21lbnQ7Cgpj
bGFzcyBuc0lET01Eb2N1bWVudFR5cGU7CgpjbGFzcyBuc0lET01FbGVtZW50OwoKY2xhc3MgbnNJ
RE9NRW50aXR5OwoKY2xhc3MgbnNJRE9NRW50aXR5UmVmZXJlbmNlOwoKY2xhc3MgbnNJRE9NTlNE
b2N1bWVudDsKCmNsYXNzIG5zSURPTU5hbWVkTm9kZU1hcDsKCmNsYXNzIG5zSURPTU5vZGU7Cgpj
bGFzcyBuc0lET01Ob2RlTGlzdDsKCmNsYXNzIG5zSURPTU5vdGF0aW9uOwoKY2xhc3MgbnNJRE9N
UHJvY2Vzc2luZ0luc3RydWN0aW9uOwoKY2xhc3MgbnNJRE9NVGV4dDsKCmNsYXNzIERPTUV4Y2Vw
dGlvbjsKCmNsYXNzIG5zSURPTVN0eWxlU2hlZXRMaXN0OwoKY2xhc3MgbnNJRE9NTGlua1N0eWxl
OwoKY2xhc3MgbnNJRE9NU3R5bGVTaGVldDsKCmNsYXNzIG5zSURPTU1lZGlhTGlzdDsKCmNsYXNz
IG5zSURPTUFic3RyYWN0VmlldzsKCmNsYXNzIG5zSURPTURvY3VtZW50VmlldzsKCmNsYXNzIG5z
SURPTVdpbmRvdzsKCmNsYXNzIG5zSURPTVdpbmRvd0ludGVybmFsOwoKY2xhc3MgbnNJRE9NV2lu
ZG93Q29sbGVjdGlvbjsKCmNsYXNzIG5zSURPTVBsdWdpbjsKCmNsYXNzIG5zSURPTVBsdWdpbkFy
cmF5OwoKY2xhc3MgbnNJRE9NTWltZVR5cGU7CgpjbGFzcyBuc0lET01NaW1lVHlwZUFycmF5OwoK
Y2xhc3MgbnNJRE9NQmFyUHJvcDsKCmNsYXNzIG5zSURPTU5hdmlnYXRvcjsKCmNsYXNzIG5zSURP
TVNjcmVlbjsKCmNsYXNzIG5zSURPTUhpc3Rvcnk7CgpjbGFzcyBuc0lET01FdmVudDsKCmNsYXNz
IG5zSURPTUV2ZW50VGFyZ2V0OwoKY2xhc3MgbnNJRE9NRXZlbnRMaXN0ZW5lcjsKCmNsYXNzIG5z
SURPTUhUTUxFbGVtZW50OwoKY2xhc3MgbnNJRE9NSFRNTEZvcm1FbGVtZW50OwoKY2xhc3MgbnNJ
RE9NSFRNTENvbGxlY3Rpb247CgpjbGFzcyBuc0lET01DU1NWYWx1ZTsKCmNsYXNzIG5zSURPTUNT
U1ByaW1pdGl2ZVZhbHVlOwoKY2xhc3MgbnNJRE9NQ1NTUnVsZTsKCmNsYXNzIG5zSURPTUNTU1J1
bGVMaXN0OwoKY2xhc3MgbnNJRE9NQ1NTU3R5bGVTaGVldDsKCmNsYXNzIG5zSURPTUNTU1N0eWxl
RGVjbGFyYXRpb247CgpjbGFzcyBuc0lET01Db3VudGVyOwoKY2xhc3MgbnNJRE9NUmVjdDsKCmNs
YXNzIG5zSURPTVJHQkNvbG9yOwoKY2xhc3MgbnNJRE9NQ1NTU3R5bGVSdWxlOwoKY2xhc3MgbnNJ
RE9NQ1NTU3R5bGVSdWxlQ29sbGVjdGlvbjsKCmNsYXNzIG5zSURPTUhUTUxUYWJsZUNhcHRpb25F
bGVtZW50OwoKY2xhc3MgbnNJRE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ7CgpjbGFzcyBuc0lE
T01SYW5nZTsKCmNsYXNzIG5zSURPTUNSTUZPYmplY3Q7CgpjbGFzcyBuc0lET01DcnlwdG87Cgpj
bGFzcyBuc0lET01Qa2NzMTE7CiMgMTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01F
dmVudC5oIiAyCgoKCgoKCmNsYXNzIG5zSURPTUV2ZW50VGFyZ2V0OwojIDI3ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJRE9NRXZlbnQuaCIKY2xhc3MgbnNJRE9NRXZlbnQgOiBwdWJsaWMg
bnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtz
dGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTY2YjdiODAsIDB4ZmY0NiwgMHhiZDk3LCB7IDB4
MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZTMsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBp
aWQ7fQoKICBlbnVtIHsgQ0FQVFVSSU5HX1BIQVNFID0gMVUgfTsKCiAgZW51bSB7IEFUX1RBUkdF
VCA9IDJVIH07CgogIGVudW0geyBCVUJCTElOR19QSEFTRSA9IDNVIH07CgogIGVudW0geyBNT1VT
RURPV04gPSAxIH07CgogIGVudW0geyBNT1VTRVVQID0gMiB9OwoKICBlbnVtIHsgTU9VU0VPVkVS
ID0gNCB9OwoKICBlbnVtIHsgTU9VU0VPVVQgPSA4IH07CgogIGVudW0geyBNT1VTRU1PVkUgPSAx
NiB9OwoKICBlbnVtIHsgTU9VU0VEUkFHID0gMzIgfTsKCiAgZW51bSB7IENMSUNLID0gNjQgfTsK
CiAgZW51bSB7IERCTENMSUNLID0gMTI4IH07CgogIGVudW0geyBLRVlET1dOID0gMjU2IH07Cgog
IGVudW0geyBLRVlVUCA9IDUxMiB9OwoKICBlbnVtIHsgS0VZUFJFU1MgPSAxMDI0IH07CgogIGVu
dW0geyBEUkFHRFJPUCA9IDIwNDggfTsKCiAgZW51bSB7IEZPQ1VTID0gNDA5NiB9OwoKICBlbnVt
IHsgQkxVUiA9IDgxOTIgfTsKCiAgZW51bSB7IFNFTEVDVCA9IDE2Mzg0IH07CgogIGVudW0geyBD
SEFOR0UgPSAzMjc2OCB9OwoKICBlbnVtIHsgUkVTRVQgPSA2NTUzNiB9OwoKICBlbnVtIHsgU1VC
TUlUID0gMTMxMDcyIH07CgogIGVudW0geyBTQ1JPTEwgPSAyNjIxNDQgfTsKCiAgZW51bSB7IExP
QUQgPSA1MjQyODggfTsKCiAgZW51bSB7IFVOTE9BRCA9IDEwNDg1NzYgfTsKCiAgZW51bSB7IFhG
RVJfRE9ORSA9IDIwOTcxNTIgfTsKCiAgZW51bSB7IEFCT1JUID0gNDE5NDMwNCB9OwoKICBlbnVt
IHsgRVJST1IgPSA4Mzg4NjA4IH07CgogIGVudW0geyBMT0NBVEUgPSAxNjc3NzIxNiB9OwoKICBl
bnVtIHsgTU9WRSA9IDMzNTU0NDMyIH07CgogIGVudW0geyBSRVNJWkUgPSA2NzEwODg2NCB9OwoK
ICBlbnVtIHsgRk9SV0FSRCA9IDEzNDIxNzcyOCB9OwoKICBlbnVtIHsgSEVMUCA9IDI2ODQzNTQ1
NiB9OwoKICBlbnVtIHsgQkFDSyA9IDUzNjg3MDkxMiB9OwoKICBlbnVtIHsgVEVYVCA9IDEwNzM3
NDE4MjQgfTsKCiAgZW51bSB7IEFMVF9NQVNLID0gMSB9OwoKICBlbnVtIHsgQ09OVFJPTF9NQVNL
ID0gMiB9OwoKICBlbnVtIHsgU0hJRlRfTUFTSyA9IDQgfTsKCiAgZW51bSB7IE1FVEFfTUFTSyA9
IDggfTsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VHlwZShuc0FXcml0YWJsZVN0cmluZyAmIGFU
eXBlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRhcmdldChuc0lET01FdmVudFRhcmdl
dCAqICphVGFyZ2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEN1cnJlbnRUYXJnZXQo
bnNJRE9NRXZlbnRUYXJnZXQgKiAqYUN1cnJlbnRUYXJnZXQpID0gMDsKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0T3JpZ2luYWxUYXJnZXQobnNJRE9NRXZlbnRUYXJnZXQgKiAqYU9yaWdpbmFsVGFy
Z2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEV2ZW50UGhhc2UoUFJVaW50MTYgKmFF
dmVudFBoYXNlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJ1YmJsZXMoUFJCb29sICph
QnViYmxlcykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDYW5jZWxhYmxlKFBSQm9vbCAq
YUNhbmNlbGFibGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGltZVN0YW1wKERPTVRp
bWVTdGFtcCAqYVRpbWVTdGFtcCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTdG9wUHJvcGFn
YXRpb24odm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQcmV2ZW50QnViYmxlKHZvaWQp
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUHJldmVudENhcHR1cmUodm9pZCkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBQcmV2ZW50RGVmYXVsdCh2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEluaXRFdmVudChjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGV2ZW50VHlwZUFyZywg
UFJCb29sIGNhbkJ1YmJsZUFyZywgUFJCb29sIGNhbmNlbGFibGVBcmcpID0gMDsKCn07CiMgMTEg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01VSUV2ZW50LmgiIDIKIyAyNSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSURPTVVJRXZlbnQuaCIKY2xhc3MgbnNJRE9NVUlFdmVudCA6
IHB1YmxpYyBuc0lET01FdmVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0
SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTBjMywgMHgxNWIzLCAweDEx
ZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsg
cmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZpZXcobnNJRE9NQWJzdHJhY3RW
aWV3ICogKmFWaWV3KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERldGFpbChQUkludDMy
ICphRGV0YWlsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXRVSUV2ZW50KGNvbnN0IG5z
QVJlYWRhYmxlU3RyaW5nICYgdHlwZUFyZywgUFJCb29sIGNhbkJ1YmJsZUFyZywgUFJCb29sIGNh
bmNlbGFibGVBcmcsIG5zSURPTUFic3RyYWN0VmlldyAqdmlld0FyZywgUFJJbnQzMiBkZXRhaWxB
cmcpID0gMDsKCn07CiMgMTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01LZXlFdmVu
dC5oIiAyCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01LZXlFdmVudC5oIgpj
bGFzcyBuc0lET01LZXlFdmVudCA6IHB1YmxpYyBuc0lET01VSUV2ZW50IHsKIHB1YmxpYzoKCiAg
c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsw
eDAyOGUwZTZlLCAweDhiMDEsIDB4MTFkMywgeyAweGFhLCAweGU3LCAweDAwLCAweDEwLCAweDgz
LCAweDhhLCAweDMxLCAweDIzIH19OyByZXR1cm4gaWlkO30KCiAgZW51bSB7IERPTV9WS19DQU5D
RUwgPSAzVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0JBQ0tfU1BBQ0UgPSA4VSB9OwoKICBlbnVtIHsg
RE9NX1ZLX1RBQiA9IDlVIH07CgogIGVudW0geyBET01fVktfQ0xFQVIgPSAxMlUgfTsKCiAgZW51
bSB7IERPTV9WS19SRVRVUk4gPSAxM1UgfTsKCiAgZW51bSB7IERPTV9WS19FTlRFUiA9IDE0VSB9
OwoKICBlbnVtIHsgRE9NX1ZLX1NISUZUID0gMTZVIH07CgogIGVudW0geyBET01fVktfQ09OVFJP
TCA9IDE3VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0FMVCA9IDE4VSB9OwoKICBlbnVtIHsgRE9NX1ZL
X1BBVVNFID0gMTlVIH07CgogIGVudW0geyBET01fVktfQ0FQU19MT0NLID0gMjBVIH07CgogIGVu
dW0geyBET01fVktfRVNDQVBFID0gMjdVIH07CgogIGVudW0geyBET01fVktfU1BBQ0UgPSAzMlUg
fTsKCiAgZW51bSB7IERPTV9WS19QQUdFX1VQID0gMzNVIH07CgogIGVudW0geyBET01fVktfUEFH
RV9ET1dOID0gMzRVIH07CgogIGVudW0geyBET01fVktfRU5EID0gMzVVIH07CgogIGVudW0geyBE
T01fVktfSE9NRSA9IDM2VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0xFRlQgPSAzN1UgfTsKCiAgZW51
bSB7IERPTV9WS19VUCA9IDM4VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1JJR0hUID0gMzlVIH07Cgog
IGVudW0geyBET01fVktfRE9XTiA9IDQwVSB9OwoKICBlbnVtIHsgRE9NX1ZLX1BSSU5UU0NSRUVO
ID0gNDRVIH07CgogIGVudW0geyBET01fVktfSU5TRVJUID0gNDVVIH07CgogIGVudW0geyBET01f
VktfREVMRVRFID0gNDZVIH07CgogIGVudW0geyBET01fVktfMCA9IDQ4VSB9OwoKICBlbnVtIHsg
RE9NX1ZLXzEgPSA0OVUgfTsKCiAgZW51bSB7IERPTV9WS18yID0gNTBVIH07CgogIGVudW0geyBE
T01fVktfMyA9IDUxVSB9OwoKICBlbnVtIHsgRE9NX1ZLXzQgPSA1MlUgfTsKCiAgZW51bSB7IERP
TV9WS181ID0gNTNVIH07CgogIGVudW0geyBET01fVktfNiA9IDU0VSB9OwoKICBlbnVtIHsgRE9N
X1ZLXzcgPSA1NVUgfTsKCiAgZW51bSB7IERPTV9WS184ID0gNTZVIH07CgogIGVudW0geyBET01f
VktfOSA9IDU3VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1NFTUlDT0xPTiA9IDU5VSB9OwoKICBlbnVt
IHsgRE9NX1ZLX0VRVUFMUyA9IDYxVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0EgPSA2NVUgfTsKCiAg
ZW51bSB7IERPTV9WS19CID0gNjZVIH07CgogIGVudW0geyBET01fVktfQyA9IDY3VSB9OwoKICBl
bnVtIHsgRE9NX1ZLX0QgPSA2OFUgfTsKCiAgZW51bSB7IERPTV9WS19FID0gNjlVIH07CgogIGVu
dW0geyBET01fVktfRiA9IDcwVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0cgPSA3MVUgfTsKCiAgZW51
bSB7IERPTV9WS19IID0gNzJVIH07CgogIGVudW0geyBET01fVktfSSA9IDczVSB9OwoKICBlbnVt
IHsgRE9NX1ZLX0ogPSA3NFUgfTsKCiAgZW51bSB7IERPTV9WS19LID0gNzVVIH07CgogIGVudW0g
eyBET01fVktfTCA9IDc2VSB9OwoKICBlbnVtIHsgRE9NX1ZLX00gPSA3N1UgfTsKCiAgZW51bSB7
IERPTV9WS19OID0gNzhVIH07CgogIGVudW0geyBET01fVktfTyA9IDc5VSB9OwoKICBlbnVtIHsg
RE9NX1ZLX1AgPSA4MFUgfTsKCiAgZW51bSB7IERPTV9WS19RID0gODFVIH07CgogIGVudW0geyBE
T01fVktfUiA9IDgyVSB9OwoKICBlbnVtIHsgRE9NX1ZLX1MgPSA4M1UgfTsKCiAgZW51bSB7IERP
TV9WS19UID0gODRVIH07CgogIGVudW0geyBET01fVktfVSA9IDg1VSB9OwoKICBlbnVtIHsgRE9N
X1ZLX1YgPSA4NlUgfTsKCiAgZW51bSB7IERPTV9WS19XID0gODdVIH07CgogIGVudW0geyBET01f
VktfWCA9IDg4VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1kgPSA4OVUgfTsKCiAgZW51bSB7IERPTV9W
S19aID0gOTBVIH07CgogIGVudW0geyBET01fVktfTlVNUEFEMCA9IDk2VSB9OwoKICBlbnVtIHsg
RE9NX1ZLX05VTVBBRDEgPSA5N1UgfTsKCiAgZW51bSB7IERPTV9WS19OVU1QQUQyID0gOThVIH07
CgogIGVudW0geyBET01fVktfTlVNUEFEMyA9IDk5VSB9OwoKICBlbnVtIHsgRE9NX1ZLX05VTVBB
RDQgPSAxMDBVIH07CgogIGVudW0geyBET01fVktfTlVNUEFENSA9IDEwMVUgfTsKCiAgZW51bSB7
IERPTV9WS19OVU1QQUQ2ID0gMTAyVSB9OwoKICBlbnVtIHsgRE9NX1ZLX05VTVBBRDcgPSAxMDNV
IH07CgogIGVudW0geyBET01fVktfTlVNUEFEOCA9IDEwNFUgfTsKCiAgZW51bSB7IERPTV9WS19O
VU1QQUQ5ID0gMTA1VSB9OwoKICBlbnVtIHsgRE9NX1ZLX01VTFRJUExZID0gMTA2VSB9OwoKICBl
bnVtIHsgRE9NX1ZLX0FERCA9IDEwN1UgfTsKCiAgZW51bSB7IERPTV9WS19TRVBBUkFUT1IgPSAx
MDhVIH07CgogIGVudW0geyBET01fVktfU1VCVFJBQ1QgPSAxMDlVIH07CgogIGVudW0geyBET01f
VktfREVDSU1BTCA9IDExMFUgfTsKCiAgZW51bSB7IERPTV9WS19ESVZJREUgPSAxMTFVIH07Cgog
IGVudW0geyBET01fVktfRjEgPSAxMTJVIH07CgogIGVudW0geyBET01fVktfRjIgPSAxMTNVIH07
CgogIGVudW0geyBET01fVktfRjMgPSAxMTRVIH07CgogIGVudW0geyBET01fVktfRjQgPSAxMTVV
IH07CgogIGVudW0geyBET01fVktfRjUgPSAxMTZVIH07CgogIGVudW0geyBET01fVktfRjYgPSAx
MTdVIH07CgogIGVudW0geyBET01fVktfRjcgPSAxMThVIH07CgogIGVudW0geyBET01fVktfRjgg
PSAxMTlVIH07CgogIGVudW0geyBET01fVktfRjkgPSAxMjBVIH07CgogIGVudW0geyBET01fVktf
RjEwID0gMTIxVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0YxMSA9IDEyMlUgfTsKCiAgZW51bSB7IERP
TV9WS19GMTIgPSAxMjNVIH07CgogIGVudW0geyBET01fVktfRjEzID0gMTI0VSB9OwoKICBlbnVt
IHsgRE9NX1ZLX0YxNCA9IDEyNVUgfTsKCiAgZW51bSB7IERPTV9WS19GMTUgPSAxMjZVIH07Cgog
IGVudW0geyBET01fVktfRjE2ID0gMTI3VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0YxNyA9IDEyOFUg
fTsKCiAgZW51bSB7IERPTV9WS19GMTggPSAxMjlVIH07CgogIGVudW0geyBET01fVktfRjE5ID0g
MTMwVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0YyMCA9IDEzMVUgfTsKCiAgZW51bSB7IERPTV9WS19G
MjEgPSAxMzJVIH07CgogIGVudW0geyBET01fVktfRjIyID0gMTMzVSB9OwoKICBlbnVtIHsgRE9N
X1ZLX0YyMyA9IDEzNFUgfTsKCiAgZW51bSB7IERPTV9WS19GMjQgPSAxMzVVIH07CgogIGVudW0g
eyBET01fVktfTlVNX0xPQ0sgPSAxNDRVIH07CgogIGVudW0geyBET01fVktfU0NST0xMX0xPQ0sg
PSAxNDVVIH07CgogIGVudW0geyBET01fVktfQ09NTUEgPSAxODhVIH07CgogIGVudW0geyBET01f
VktfUEVSSU9EID0gMTkwVSB9OwoKICBlbnVtIHsgRE9NX1ZLX1NMQVNIID0gMTkxVSB9OwoKICBl
bnVtIHsgRE9NX1ZLX0JBQ0tfUVVPVEUgPSAxOTJVIH07CgogIGVudW0geyBET01fVktfT1BFTl9C
UkFDS0VUID0gMjE5VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0JBQ0tfU0xBU0ggPSAyMjBVIH07Cgog
IGVudW0geyBET01fVktfQ0xPU0VfQlJBQ0tFVCA9IDIyMVUgfTsKCiAgZW51bSB7IERPTV9WS19R
VU9URSA9IDIyMlUgfTsKCiAgZW51bSB7IERPTV9WS19NRVRBID0gMjI0VSB9OwoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRDaGFyQ29kZShQUlVpbnQzMiAqYUNoYXJDb2RlKSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldEtleUNvZGUoUFJVaW50MzIgKmFLZXlDb2RlKSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldEFsdEtleShQUkJvb2wgKmFBbHRLZXkpID0gMDsKCgogIHZpcnR1YWwg
bnNyZXN1bHQgR2V0Q3RybEtleShQUkJvb2wgKmFDdHJsS2V5KSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldFNoaWZ0S2V5KFBSQm9vbCAqYVNoaWZ0S2V5KSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldE1ldGFLZXkoUFJCb29sICphTWV0YUtleSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBJbml0S2V5RXZlbnQoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiB0eXBlQXJnLCBQUkJv
b2wgY2FuQnViYmxlQXJnLCBQUkJvb2wgY2FuY2VsYWJsZUFyZywgbnNJRE9NQWJzdHJhY3RWaWV3
ICp2aWV3QXJnLCBQUkJvb2wgY3RybEtleUFyZywgUFJCb29sIGFsdEtleUFyZywgUFJCb29sIHNo
aWZ0S2V5QXJnLCBQUkJvb2wgbWV0YUtleUFyZywgUFJVaW50MzIga2V5Q29kZUFyZywgUFJVaW50
MzIgY2hhckNvZGVBcmcpID0gMDsKCn07CiMgMzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0dVSUV2ZW50LmgiIDIKCmNsYXNzIG5zSVJlbmRlcmluZ0NvbnRleHQ7CmNsYXNzIG5zSVJlZ2lv
bjsKY2xhc3MgbnNJV2lkZ2V0OwpjbGFzcyBuc0lNZW51SXRlbTsKY2xhc3MgbnNJQWNjZXNzaWJs
ZTsKY2xhc3MgbnNJQ29udGVudDsKCgoKCgplbnVtIG5zRXZlbnRTdGF0dXMgewoKICBuc0V2ZW50
U3RhdHVzX2VJZ25vcmUsCgogIG5zRXZlbnRTdGF0dXNfZUNvbnN1bWVOb0RlZmF1bHQsCgogIG5z
RXZlbnRTdGF0dXNfZUNvbnN1bWVEb0RlZmF1bHQKfTsKCgoKCmVudW0gbnNTaXplTW9kZSB7CiAg
bnNTaXplTW9kZV9Ob3JtYWwgPSAwLAogIG5zU2l6ZU1vZGVfTWluaW1pemVkLAogIG5zU2l6ZU1v
ZGVfTWF4aW1pemVkCn07CgoKCgplbnVtIG5zV2luZG93WiB7CiAgbnNXaW5kb3daVG9wID0gMCwK
ICBuc1dpbmRvd1pCb3R0b20sCiAgbnNXaW5kb3daUmVsYXRpdmUKfTsKCgoKCgpzdHJ1Y3QgbnNF
dmVudCB7CgogIFBSVWludDggZXZlbnRTdHJ1Y3RUeXBlOwoKICBQUlVpbnQzMiBtZXNzYWdlOwoK
ICBuc1BvaW50IHBvaW50OwoKICBuc1BvaW50IHJlZlBvaW50OwoKICBQUlVpbnQzMiB0aW1lOwoK
ICBQUlVpbnQzMiBmbGFnczsKCiAgUFJVaW50MzIgaW50ZXJuYWxBcHBGbGFnczsKCiAgbnNIYXNo
S2V5KiB1c2VyVHlwZTsKfTsKCgoKCgpzdHJ1Y3QgbnNHVUlFdmVudCA6IHB1YmxpYyBuc0V2ZW50
IHsKCiAgbnNJV2lkZ2V0KiB3aWRnZXQ7CgogIHZvaWQqIG5hdGl2ZU1zZzsKfTsKCgoKCgpzdHJ1
Y3QgbnNTaXplRXZlbnQgOiBwdWJsaWMgbnNHVUlFdmVudCB7CgogICAgbnNSZWN0ICp3aW5kb3dT
aXplOwoKICAgIFBSSW50MzIgbVdpbldpZHRoOwoKICAgIFBSSW50MzIgbVdpbkhlaWdodDsKfTsK
CgoKCgpzdHJ1Y3QgbnNTaXplTW9kZUV2ZW50IDogcHVibGljIG5zR1VJRXZlbnQgewoKICAgIG5z
U2l6ZU1vZGUgbVNpemVNb2RlOwp9OwoKCgoKCnN0cnVjdCBuc1pMZXZlbEV2ZW50IDogcHVibGlj
IG5zR1VJRXZlbnQgewoKICBuc1dpbmRvd1ogbVBsYWNlbWVudDsKICBuc0lXaWRnZXQgKm1SZXFC
ZWxvdywKICAgICAgICAgICAgKm1BY3R1YWxCZWxvdzsKICBQUkJvb2wgbUltbWVkaWF0ZSwKICAg
ICAgICAgICAgIG1BZGp1c3RlZDsKfTsKCgoKCgpzdHJ1Y3QgbnNQYWludEV2ZW50IDogcHVibGlj
IG5zR1VJRXZlbnQgewoKICAgIG5zSVJlbmRlcmluZ0NvbnRleHQgKnJlbmRlcmluZ0NvbnRleHQ7
CgogICAgbnNJUmVnaW9uICpyZWdpb247CgogICAgbnNSZWN0ICpyZWN0Owp9OwoKCgoKCnN0cnVj
dCBuc1Njcm9sbGJhckV2ZW50IDogcHVibGljIG5zR1VJRXZlbnQgewoKICAgIFBSVWludDMyIHBv
c2l0aW9uOwp9OwoKc3RydWN0IG5zU2Nyb2xsUG9ydEV2ZW50IDogcHVibGljIG5zR1VJRXZlbnQg
ewogIGVudW0gb3JpZW50VHlwZSB7CiAgICB2ZXJ0aWNhbCA9IDAsCiAgICBob3Jpem9udGFsID0g
MSwKICAgIGJvdGggPSAyCiAgfTsKCiAgb3JpZW50VHlwZSBvcmllbnQ7Cn07CgpzdHJ1Y3QgbnNJ
bnB1dEV2ZW50IDogcHVibGljIG5zR1VJRXZlbnQgewoKICAgIFBSQm9vbCBpc1NoaWZ0OwoKICAg
IFBSQm9vbCBpc0NvbnRyb2w7CgogICAgUFJCb29sIGlzQWx0OwoKCiAgICBQUkJvb2wgaXNNZXRh
Owp9OwoKCgoKCnN0cnVjdCBuc01vdXNlRXZlbnQgOiBwdWJsaWMgbnNJbnB1dEV2ZW50IHsKCiAg
ICBQUlVpbnQzMiBjbGlja0NvdW50OwoKCiAgICBQUkJvb2wgYWNjZXB0QWN0aXZhdGlvbjsKfTsK
CgoKCgpzdHJ1Y3QgbnNBY2Nlc3NpYmxlRXZlbnQgOiBwdWJsaWMgbnNJbnB1dEV2ZW50IHsKICAg
IG5zSUFjY2Vzc2libGUqIGFjY2Vzc2libGU7Cn07CgoKCgoKc3RydWN0IG5zS2V5RXZlbnQgOiBw
dWJsaWMgbnNJbnB1dEV2ZW50IHsKCiAgICBQUlVpbnQzMiBrZXlDb2RlOwoKICAgIFBSVWludDMy
IGNoYXJDb2RlOwoKICAgIFBSQm9vbCBpc0NoYXI7Cn07CgoKCgpzdHJ1Y3QgbnNUZXh0UmFuZ2Ug
ewogICAgICAgIFBSVWludDMyIG1TdGFydE9mZnNldDsKICAgICAgICBQUlVpbnQzMiBtRW5kT2Zm
c2V0OwogICAgICAgIFBSVWludDMyIG1SYW5nZVR5cGU7Cn07Cgp0eXBlZGVmIHN0cnVjdCBuc1Rl
eHRSYW5nZSBuc1RleHRSYW5nZTsKdHlwZWRlZiBuc1RleHRSYW5nZSogbnNUZXh0UmFuZ2VBcnJh
eTsKCnN0cnVjdCBuc1RleHRFdmVudFJlcGx5IHsKICAgICAgICBuc1JlY3QgbUN1cnNvclBvc2l0
aW9uOwogICAgICAgIFBSQm9vbCBtQ3Vyc29ySXNDb2xsYXBzZWQ7Cn07Cgp0eXBlZGVmIHN0cnVj
dCBuc1RleHRFdmVudFJlcGx5IG5zVGV4dEV2ZW50UmVwbHk7CgpzdHJ1Y3QgbnNUZXh0RXZlbnQg
OiBwdWJsaWMgbnNJbnB1dEV2ZW50IHsKICAgICAgICBQUlVuaWNoYXIqIHRoZVRleHQ7CiAgICAg
ICAgbnNUZXh0RXZlbnRSZXBseSB0aGVSZXBseTsKICAgICAgICBQUlVpbnQzMiByYW5nZUNvdW50
OwogICAgICAgIG5zVGV4dFJhbmdlQXJyYXkgcmFuZ2VBcnJheTsKICBQUkJvb2wgaXNDaGFyOwp9
OwoKc3RydWN0IG5zQ29tcG9zaXRpb25FdmVudCA6IHB1YmxpYyBuc0lucHV0RXZlbnQgewogICAg
ICAgIFBSVWludDMyIGNvbXBvc2l0aW9uTWVzc2FnZTsKICAgICAgICBuc1RleHRFdmVudFJlcGx5
IHRoZVJlcGx5Owp9OwoKc3RydWN0IG5zTW91c2VTY3JvbGxFdmVudCA6IHB1YmxpYyBuc0lucHV0
RXZlbnQgewoKICBlbnVtIG5zTW91c2VTY3JvbGxGbGFncyB7CiAgICBrSXNGdWxsUGFnZSA9IDEg
PDwgMCwKICAgIGtJc1ZlcnRpY2FsID0gMSA8PCAxLAogICAga0lzSG9yaXpvbnRhbCA9IDEgPDwg
MgogIH07CgogIFBSSW50MzIgc2Nyb2xsRmxhZ3M7CiAgUFJJbnQzMiBkZWx0YTsKfTsKCnN0cnVj
dCBuc1JlY29udmVyc2lvbkV2ZW50UmVwbHkgewogIFBSVW5pY2hhciAqbVJlY29udmVyc2lvblN0
cmluZzsKfTsKCnN0cnVjdCBuc1JlY29udmVyc2lvbkV2ZW50IDogcHVibGljIG5zSW5wdXRFdmVu
dCB7CiAgbnNSZWNvbnZlcnNpb25FdmVudFJlcGx5IHRoZVJlcGx5Owp9OwojIDI4MyAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zR1VJRXZlbnQuaCIKc3RydWN0IG5zTWVudUV2ZW50IDogcHVi
bGljIG5zR1VJRXZlbnQgewogIG5zSU1lbnVJdGVtICogbU1lbnVJdGVtOwogIFBSVWludDMyIG1D
b21tYW5kOwp9OwojIDI5NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zR1VJRXZlbnQuaCIK
c3RydWN0IG5zRm9ybUV2ZW50IDogcHVibGljIG5zRXZlbnQgewogIG5zSUNvbnRlbnQgKm9yaWdp
bmF0b3I7Cn07CgoKCgpzdHJ1Y3QgbnNGb2N1c0V2ZW50IDogcHVibGljIG5zR1VJRXZlbnQgewog
IFBSQm9vbCBpc01veldpbmRvd1Rha2luZ0ZvY3VzOwp9OwoKCgoKCmVudW0gbnNEcmFnRHJvcEV2
ZW50U3RhdHVzIHsKCiAgbnNEcmFnRHJvcEV2ZW50U3RhdHVzX2VEcmFnRW50ZXJlZCwKCiAgbnNE
cmFnRHJvcEV2ZW50U3RhdHVzX2VEcmFnRXhpdGVkLAoKICBuc0RyYWdEcm9wRXZlbnRTdGF0dXNf
ZURyb3AKfTsKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSU1vdXNlTGlzdGVuZXIu
aCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjkg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNb3VzZUxpc3RlbmVyLmgiIDIKIyA0MCAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSU1vdXNlTGlzdGVuZXIuaCIKY2xhc3MgbnNJTW91c2VM
aXN0ZW5lciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCBu
c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4YzgzZjZiODEsIDB4
ZDdjZSwgMHgxMWQyLCB7IDB4ODMsIDB4NjAsIDB4YzQsIDB4YzgsIDB4OTQsIDB4YzQsIDB4OTEs
IDB4N2MgfSB9OyByZXR1cm4gaWlkO30KCgoKCgoKICAgIHZpcnR1YWwgbnNFdmVudFN0YXR1cyBN
b3VzZVByZXNzZWQoY29uc3QgbnNHVUlFdmVudCAmIGFNb3VzZUV2ZW50KSA9IDA7CgoKCgoKCiAg
ICB2aXJ0dWFsIG5zRXZlbnRTdGF0dXMgTW91c2VSZWxlYXNlZChjb25zdCBuc0dVSUV2ZW50ICYg
YU1vdXNlRXZlbnQpID0gMDsKCgoKCgoKCiAgICB2aXJ0dWFsIG5zRXZlbnRTdGF0dXMgTW91c2VD
bGlja2VkKGNvbnN0IG5zR1VJRXZlbnQgJiBhTW91c2VFdmVudCkgPSAwOwoKCgoKCgogICAgdmly
dHVhbCBuc0V2ZW50U3RhdHVzIE1vdXNlTW92ZWQoY29uc3QgbnNHVUlFdmVudCAmIGFNb3VzZUV2
ZW50KSA9IDA7Cgp9OwojIDI5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0Lmgi
IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTWVudUxpc3RlbmVyLmgiIDEKIyAy
NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSU1lbnVMaXN0ZW5lci5oIgojIDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0dVSUV2ZW50LmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSU1lbnVMaXN0ZW5lci5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVN1cHBvcnRzLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSU1l
bnVMaXN0ZW5lci5oIiAyCiMgNDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNZW51TGlz
dGVuZXIuaCIKY2xhc3MgbnNJTWVudUxpc3RlbmVyIDogcHVibGljIG5zSVN1cHBvcnRzIHsKCiAg
cHVibGljOgogICAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z
SUlEIGlpZCA9IHsgMHhmMmU3OTYwMiwgMHgxNzAwLCAweDExZDUsIHsgMHhiYiwgMHg2ZiwgMHg5
MCwgMHhmMiwgMHg0MCwgMHhmZSwgMHg0OSwgMHgzYyB9IH07OyByZXR1cm4gaWlkO30KCgoKCgoK
ICAgIHZpcnR1YWwgbnNFdmVudFN0YXR1cyBNZW51SXRlbVNlbGVjdGVkKGNvbnN0IG5zTWVudUV2
ZW50ICYgYU1lbnVFdmVudCkgPSAwOwoKCgoKCgogICAgdmlydHVhbCBuc0V2ZW50U3RhdHVzIE1l
bnVTZWxlY3RlZChjb25zdCBuc01lbnVFdmVudCAmIGFNZW51RXZlbnQpID0gMDsKCgoKCgoKICAg
IHZpcnR1YWwgbnNFdmVudFN0YXR1cyBNZW51RGVzZWxlY3RlZChjb25zdCBuc01lbnVFdmVudCAm
IGFNZW51RXZlbnQpID0gMDsKCiAgICB2aXJ0dWFsIG5zRXZlbnRTdGF0dXMgTWVudUNvbnN0cnVj
dCggY29uc3QgbnNNZW51RXZlbnQgJiBhTWVudUV2ZW50LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lXaWRnZXQqIGFQYXJlbnRXaW5kb3csIHZvaWQqIGFOb2Rl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhV2ViU2hl
bGwpID0gMDsKCiAgICB2aXJ0dWFsIG5zRXZlbnRTdGF0dXMgTWVudURlc3RydWN0KGNvbnN0IG5z
TWVudUV2ZW50ICYgYU1lbnVFdmVudCkgPSAwOwoKICAgIHZpcnR1YWwgbnNFdmVudFN0YXR1cyBD
aGVja1JlYnVpbGQoUFJCb29sICYgYU1lbnVFdmVudCkgPSAwOwogICAgdmlydHVhbCBuc0V2ZW50
U3RhdHVzIFNldFJlYnVpbGQoUFJCb29sIGFNZW51RXZlbnQpID0gMDsKfTsKIyAzMCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSUltYWdlLmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUlt
YWdlLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAy
NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUltYWdlLmgiIDIKIyAxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNSZWN0LmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSUltYWdlLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5n
Q29udGV4dC5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdD
b250ZXh0LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgMjcg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiIDIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDI4ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zQ29sb3IuaCIgMQojIDI5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJUmVuZGVyaW5nQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
Q29vcmQuaCIgMQojIDMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29u
dGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURyYXdpbmdTdXJmYWNl
LmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURyYXdpbmdTdXJmYWNlLmgi
CiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgMjcgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lEcmF3aW5nU3VyZmFjZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSURyYXdpbmdTdXJmYWNlLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNSZWN0LmgiIDEKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURyYXdpbmdTdXJm
YWNlLmgiIDIKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIFBSVWludDMyIG1SZWRaZXJvTWFzazsKICBQ
UlVpbnQzMiBtR3JlZW5aZXJvTWFzazsKICBQUlVpbnQzMiBtQmx1ZVplcm9NYXNrOwogIFBSVWlu
dDMyIG1BbHBoYVplcm9NYXNrOwogIFBSVWludDMyIG1SZWRNYXNrOwogIFBSVWludDMyIG1HcmVl
bk1hc2s7CiAgUFJVaW50MzIgbUJsdWVNYXNrOwogIFBSVWludDMyIG1BbHBoYU1hc2s7CiAgUFJV
aW50OCBtUmVkQ291bnQ7CiAgUFJVaW50OCBtR3JlZW5Db3VudDsKICBQUlVpbnQ4IG1CbHVlQ291
bnQ7CiAgUFJVaW50OCBtQWxwaGFDb3VudDsKICBQUlVpbnQ4IG1SZWRTaGlmdDsKICBQUlVpbnQ4
IG1HcmVlblNoaWZ0OwogIFBSVWludDggbUJsdWVTaGlmdDsKICBQUlVpbnQ4IG1BbHBoYVNoaWZ0
Owp9IG5zUGl4ZWxGb3JtYXQ7CgoKCgoKCgpjbGFzcyBuc0lEcmF3aW5nU3VyZmFjZSA6IHB1Ymxp
YyBuc0lTdXBwb3J0cwp7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtz
dGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweDYxY2M3N2UwLCAweGNhYWMsIDB4MTFkMiwgeyAw
eGE4LCAweDQ5LCAweDAwLCAweDQwLCAweDk1LCAweDlhLCAweDI4LCAweGM5IH0gfTsgcmV0dXJu
IGlpZDt9CiMgNzkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEcmF3aW5nU3VyZmFjZS5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgTG9jayhQUkludDMyIGFYLCBQUkludDMyIGFZLCBQUlVpbnQz
MiBhV2lkdGgsIFBSVWludDMyIGFIZWlnaHQsCiAgICAgICAgICAgICAgICAgIHZvaWQgKiphQml0
cywgUFJJbnQzMiAqYVN0cmlkZSwgUFJJbnQzMiAqYVdpZHRoQnl0ZXMsCiAgICAgICAgICAgICAg
ICAgIFBSVWludDMyIGFGbGFncykgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFVubG9j
ayh2b2lkKSA9IDA7CiMgOTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEcmF3aW5nU3Vy
ZmFjZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGltZW5zaW9ucyhQUlVpbnQzMiAqYVdpZHRo
LCBQUlVpbnQzMiAqYUhlaWdodCkgPSAwOwojIDEwOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSURyYXdpbmdTdXJmYWNlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJc09mZnNjcmVlbihQUkJv
b2wgKmFPZmZTY3JlZW4pID0gMDsKIyAxMjMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lE
cmF3aW5nU3VyZmFjZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSXNQaXhlbEFkZHJlc3NhYmxlKFBS
Qm9vbCAqYUFkZHJlc3NhYmxlKSA9IDA7CiMgMTMyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJRHJhd2luZ1N1cmZhY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBpeGVsRm9ybWF0KG5z
UGl4ZWxGb3JtYXQgKmFGb3JtYXQpID0gMDsKfTsKIyAzMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIgMgoKY2xhc3MgbnNJV2lkZ2V0OwpjbGFzcyBuc0lG
b250TWV0cmljczsKY2xhc3MgbnNJSW1hZ2U7CmNsYXNzIG5zVHJhbnNmb3JtMkQ7CmNsYXNzIG5z
U3RyaW5nOwpjbGFzcyBuc0lEZXZpY2VDb250ZXh0OwpjbGFzcyBuc0lSZWdpb247CgpzdHJ1Y3Qg
bnNGb250OwpzdHJ1Y3QgbnNQb2ludDsKc3RydWN0IG5zUmVjdDsKCgoKCgoKCiMgMSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL2dmeHR5cGVzLmgiIDEKIyAxNCAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL2dmeHR5cGVzLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2dmeDJ0eXBl
cy5oIiAxCiMgMTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngydHlwZXMuaCIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvZ2Z4Y29tcGF0LmgiIDEKIyAzNiAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL2dmeGNvbXBhdC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0Nvb3JkLmgiIDEKIyAzNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2dmeGNvbXBhdC5oIiAy
CiMgMTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngydHlwZXMuaCIgMgoKCgoKdHlwZWRl
ZiBmbG9hdCBnZnhfZGltZW5zaW9uOwoKCgoKCnR5cGVkZWYgZmxvYXQgZ2Z4X2Nvb3JkOwoKCgoK
CnR5cGVkZWYgZmxvYXQgZ2Z4X2FuZ2xlOwoKCgoKCgoKdHlwZWRlZiBQUlVpbnQzMiBnZnhfY29s
b3I7CgoKCgoKdHlwZWRlZiBQUlVpbnQxNiBnZnhfZGVwdGg7CgoKCgoKCnR5cGVkZWYgUFJJbnQz
MiBnZnhfZm9ybWF0OwoKCgoKCnR5cGVkZWYgZmxvYXQgZ2Z4X2dhbW1hOwojIDE1ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvZ2Z4dHlwZXMuaCIgMgoKCgoKCgp0eXBlZGVmIFBSSW50MzIgbnNj
b29yZDsKIyA1MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQu
aCIgMgpjbGFzcyBpbWdJQ29udGFpbmVyOwoKCgoKdHlwZWRlZiBlbnVtCnsKICBuc0NsaXBDb21i
aW5lX2tJbnRlcnNlY3QgPSAwLAogIG5zQ2xpcENvbWJpbmVfa1VuaW9uID0gMSwKICBuc0NsaXBD
b21iaW5lX2tTdWJ0cmFjdCA9IDIsCiAgbnNDbGlwQ29tYmluZV9rUmVwbGFjZSA9IDMKfSBuc0Ns
aXBDb21iaW5lOwoKCnR5cGVkZWYgZW51bQp7CiAgbnNMaW5lU3R5bGVfa05vbmUgPSAwLAogIG5z
TGluZVN0eWxlX2tTb2xpZCA9IDEsCiAgbnNMaW5lU3R5bGVfa0Rhc2hlZCA9IDIsCiAgbnNMaW5l
U3R5bGVfa0RvdHRlZCA9IDMKfSBuc0xpbmVTdHlsZTsKIyA4MCAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKdHlwZWRlZiB2b2lkICogbnNEcmF3aW5nU3Vy
ZmFjZTsKCgpjbGFzcyBuc0lSZW5kZXJpbmdDb250ZXh0IDogcHVibGljIG5zSVN1cHBvcnRzCnsK
cHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJ
RCBpaWQgPSB7IDB4YTZjZjkwNjgsIDB4MTViMywgMHgxMWQyLHsweDkzLCAweDJlLCAweDAwLCAw
eDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyfX07IHJldHVybiBpaWQ7fQojIDk3ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1
bHQgSW5pdChuc0lEZXZpY2VDb250ZXh0KiBhQ29udGV4dCwgbnNJV2lkZ2V0ICphV2lkZ2V0KSA9
IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0lEZXZpY2VDb250ZXh0KiBhQ29u
dGV4dCwgbnNEcmF3aW5nU3VyZmFjZSBhU3VyZmFjZSkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVz
dWx0IFJlc2V0KHZvaWQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGV2aWNlQ29u
dGV4dChuc0lEZXZpY2VDb250ZXh0IComIGFEZXZpY2VDb250ZXh0KSA9IDA7CiMgMTI4ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgogIHZpcnR1YWwgbnNy
ZXN1bHQgTG9ja0RyYXdpbmdTdXJmYWNlKFBSSW50MzIgYVgsIFBSSW50MzIgYVksIFBSVWludDMy
IGFXaWR0aCwgUFJVaW50MzIgYUhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkICoqYUJpdHMsIFBSSW50MzIgKmFTdHJpZGUsIFBSSW50MzIgKmFXaWR0aEJ5dGVzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFGbGFncykgPSAwOwoKCgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgVW5sb2NrRHJhd2luZ1N1cmZhY2Uodm9pZCkgPSAwOwoKCgoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNlbGVjdE9mZlNjcmVlbkRyYXdpbmdTdXJmYWNlKG5zRHJh
d2luZ1N1cmZhY2UgYVN1cmZhY2UpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RHJh
d2luZ1N1cmZhY2UobnNEcmF3aW5nU3VyZmFjZSAqYVN1cmZhY2UpID0gMDsKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0SGludHMoUFJVaW50MzImIGFSZXN1bHQpID0gMDsKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBQdXNoU3RhdGUodm9pZCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
UG9wU3RhdGUoUFJCb29sICZhQ2xpcEVtcHR5KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBJc1Zpc2libGVSZWN0KGNvbnN0IG5zUmVjdCYgYVJlY3QsIFBSQm9vbCAmYUlzVmlzaWJsZSkg
PSAwOwojIDE4NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQu
aCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENsaXBSZWN0KGNvbnN0IG5zUmVjdCYgYVJlY3QsIG5z
Q2xpcENvbWJpbmUgYUNvbWJpbmUsIFBSQm9vbCAmYUNsaXBFbXB0eSkgPSAwOwojIDE5NCAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldENsaXBSZWN0KG5zUmVjdCAmYVJlY3QsIFBSQm9vbCAmYUhhc0xvY2FsQ2xpcCkg
PSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TGluZVN0eWxlKG5zTGluZVN0eWxlIGFM
aW5lU3R5bGUpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExpbmVTdHlsZShuc0xp
bmVTdHlsZSAmYUxpbmVTdHlsZSkgPSAwOwojIDIxNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENsaXBSZWdpb24o
Y29uc3QgbnNJUmVnaW9uJiBhUmVnaW9uLCBuc0NsaXBDb21iaW5lIGFDb21iaW5lLCBQUkJvb2wg
JmFDbGlwRW1wdHkpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb3B5Q2xpcFJlZ2lv
bihuc0lSZWdpb24gJmFSZWdpb24pID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRD
bGlwUmVnaW9uKG5zSVJlZ2lvbiAqKmFSZWdpb24pID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgU2V0Q29sb3IobnNjb2xvciBhQ29sb3IpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0Q29sb3IobnNjb2xvciAmYUNvbG9yKSBjb25zdCA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVz
dWx0IFNldEZvbnQoY29uc3QgbnNGb250JiBhRm9udCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgU2V0Rm9udChuc0lGb250TWV0cmljcyAqYUZvbnRNZXRyaWNzKSA9IDA7CgoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldEZvbnRNZXRyaWNzKG5zSUZvbnRNZXRyaWNzIComYUZvbnRNZXRy
aWNzKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUcmFuc2xhdGUobnNjb29yZCBhWCwg
bnNjb29yZCBhWSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2NhbGUoZmxvYXQgYVN4
LCBmbG9hdCBhU3kpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q3VycmVudFRyYW5z
Zm9ybShuc1RyYW5zZm9ybTJEIComYVRyYW5zZm9ybSkgPSAwOwojIDI5NiAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENy
ZWF0ZURyYXdpbmdTdXJmYWNlKG5zUmVjdCAqYUJvdW5kcywgUFJVaW50MzIgYVN1cmZGbGFncywg
bnNEcmF3aW5nU3VyZmFjZSAmYVN1cmZhY2UpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
RGVzdHJveURyYXdpbmdTdXJmYWNlKG5zRHJhd2luZ1N1cmZhY2UgYURTKSA9IDA7CiMgMzExICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgRHJhd0xpbmUobnNjb29yZCBhWDAsIG5zY29vcmQgYVkwLCBuc2Nvb3JkIGFYMSwg
bnNjb29yZCBhWTEpID0gMDsKIyAzMjEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5k
ZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBEcmF3U3RkTGluZShuc2Nvb3JkIGFY
MCwgbnNjb29yZCBhWTAsIG5zY29vcmQgYVgxLCBuc2Nvb3JkIGFZMSkgPSAwOwoKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgRHJhd1BvbHlsaW5lKGNvbnN0IG5zUG9pbnQgYVBvaW50c1tdLCBQUklu
dDMyIGFOdW1Qb2ludHMpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRHJhd1JlY3QoY29u
c3QgbnNSZWN0JiBhUmVjdCkgPSAwOwojIDM0MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdSZWN0KG5zY29vcmQg
YVgsIG5zY29vcmQgYVksIG5zY29vcmQgYVdpZHRoLCBuc2Nvb3JkIGFIZWlnaHQpID0gMDsKCgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgRmlsbFJlY3QoY29uc3QgbnNSZWN0JiBhUmVjdCkgPSAwOwoj
IDM1OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2
aXJ0dWFsIG5zcmVzdWx0IEZpbGxSZWN0KG5zY29vcmQgYVgsIG5zY29vcmQgYVksIG5zY29vcmQg
YVdpZHRoLCBuc2Nvb3JkIGFIZWlnaHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW52
ZXJ0UmVjdChjb25zdCBuc1JlY3QmIGFSZWN0KSA9IDA7CiMgMzczICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW52ZXJ0
UmVjdChuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZLCBuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVp
Z2h0KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEcmF3UG9seWdvbihjb25zdCBuc1Bv
aW50IGFQb2ludHNbXSwgUFJJbnQzMiBhTnVtUG9pbnRzKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBGaWxsUG9seWdvbihjb25zdCBuc1BvaW50IGFQb2ludHNbXSwgUFJJbnQzMiBhTnVt
UG9pbnRzKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSYXN0ZXJQb2x5Z29uKGNvbnN0
IG5zUG9pbnQgYVBvaW50c1tdLCBQUkludDMyIGFOdW1Qb2ludHMpPTA7CgoKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBGaWxsU3RkUG9seWdvbihjb25zdCBuc1BvaW50IGFQb2ludHNbXSwgUFJJbnQz
MiBhTnVtUG9pbnRzKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdFbGxpcHNlKGNv
bnN0IG5zUmVjdCYgYVJlY3QpID0gMDsKIyA0MTYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBEcmF3RWxsaXBzZShuc2Nv
b3JkIGFYLCBuc2Nvb3JkIGFZLCBuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0KSA9IDA7
CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZpbGxFbGxpcHNlKGNvbnN0IG5zUmVjdCYgYVJlY3Qp
ID0gMDsKIyA0MzEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0
LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBGaWxsRWxsaXBzZShuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZ
LCBuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgRHJhd0FyYyhjb25zdCBuc1JlY3QmIGFSZWN0LAogICAgICAgICAgICAgICAgICAg
ICBmbG9hdCBhU3RhcnRBbmdsZSwgZmxvYXQgYUVuZEFuZ2xlKSA9IDA7CiMgNDUxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1
bHQgRHJhd0FyYyhuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZLCBuc2Nvb3JkIGFXaWR0aCwgbnNjb29y
ZCBhSGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICBmbG9hdCBhU3RhcnRBbmdsZSwgZmxvYXQg
YUVuZEFuZ2xlKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRmlsbEFyYyhjb25zdCBu
c1JlY3QmIGFSZWN0LAogICAgICAgICAgICAgICAgICAgICBmbG9hdCBhU3RhcnRBbmdsZSwgZmxv
YXQgYUVuZEFuZ2xlKSA9IDA7CiMgNDcyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVu
ZGVyaW5nQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRmlsbEFyYyhuc2Nvb3JkIGFYLCBu
c2Nvb3JkIGFZLCBuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0LAogICAgICAgICAgICAg
ICAgICAgICBmbG9hdCBhU3RhcnRBbmdsZSwgZmxvYXQgYUVuZEFuZ2xlKSA9IDA7CiMgNDgyICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgR2V0V2lkdGgoY2hhciBhQywgbnNjb29yZCAmYVdpZHRoKSA9IDA7CiMgNDk0ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgR2V0V2lkdGgoUFJVbmljaGFyIGFDLCBuc2Nvb3JkICZhV2lkdGgsCiAgICAgICAg
ICAgICAgICAgICAgICBQUkludDMyICphRm9udElEID0gMCkgPSAwOwojIDUwNyAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldFdpZHRoKGNvbnN0IG5zU3RyaW5nJiBhU3RyaW5nLCBuc2Nvb3JkICZhV2lkdGgsCiAgICAg
ICAgICAgICAgICAgICAgICBQUkludDMyICphRm9udElEID0gMCkgPSAwOwojIDUxNyAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldFdpZHRoKGNvbnN0IGNoYXIqIGFTdHJpbmcsIG5zY29vcmQmIGFXaWR0aCkgPSAwOwoj
IDUyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldFdpZHRoKGNvbnN0IGNoYXIqIGFTdHJpbmcsIFBSVWludDMyIGFM
ZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkJiBhV2lkdGgpID0gMDsKIyA1NDEg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRXaWR0aChjb25zdCBQUlVuaWNoYXIgKmFTdHJpbmcsIFBSVWludDMyIGFM
ZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkICZhV2lkdGgsIFBSSW50MzIgKmFG
b250SUQgPSAwKSA9IDA7CiMgNjEyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVy
aW5nQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRHJhd1N0cmluZyhjb25zdCBjaGFyICph
U3RyaW5nLCBQUlVpbnQzMiBhTGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3Jk
IGFYLCBuc2Nvb3JkIGFZLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc2Nvb3JkKiBh
U3BhY2luZyA9IDApID0gMDsKIyA2MjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5k
ZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBEcmF3U3RyaW5nKGNvbnN0IFBSVW5p
Y2hhciAqYVN0cmluZywgUFJVaW50MzIgYUxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAg
bnNjb29yZCBhWCwgbnNjb29yZCBhWSwKICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBh
Rm9udElEID0gLTEsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zY29vcmQqIGFTcGFj
aW5nID0gMCkgPSAwOwojIDY0MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmlu
Z0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdTdHJpbmcoY29uc3QgbnNTdHJpbmcm
IGFTdHJpbmcsIG5zY29vcmQgYVgsIG5zY29vcmQgYVksCiAgICAgICAgICAgICAgICAgICAgICAg
IFBSSW50MzIgYUZvbnRJRCA9IC0xLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc2Nv
b3JkKiBhU3BhY2luZyA9IDApID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdJbWFn
ZShuc0lJbWFnZSAqYUltYWdlLCBuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZKSA9IDA7CiMgNjYwICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgRHJhd0ltYWdlKG5zSUltYWdlICphSW1hZ2UsIG5zY29vcmQgYVgsIG5zY29vcmQg
YVksCiAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhV2lkdGgsIG5zY29vcmQgYUhlaWdo
dCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEcmF3SW1hZ2UobnNJSW1hZ2UgKmFJbWFn
ZSwgY29uc3QgbnNSZWN0JiBhUmVjdCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRHJh
d0ltYWdlKG5zSUltYWdlICphSW1hZ2UsIGNvbnN0IG5zUmVjdCYgYVNSZWN0LCBjb25zdCBuc1Jl
Y3QmIGFEUmVjdCk9MDsKIyA2ODggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJp
bmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBEcmF3VGlsZShuc0lJbWFnZSAqYUltYWdl
LG5zY29vcmQgYVgwLG5zY29vcmQgYVkwLG5zY29vcmQgYVgxLG5zY29vcmQgYVkxLAogICAgICAg
ICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFXaWR0aCxuc2Nvb3JkIGFIZWlnaHQpID0gMDsKIyA3
MDIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmly
dHVhbCBuc3Jlc3VsdCBEcmF3UGF0aChuc1BhdGhQb2ludCBhUG9pbnRBcnJheVtdLFBSSW50MzIg
YU51bVB0cykgPSAwOwojIDcxMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmlu
Z0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEZpbGxQYXRoKG5zUGF0aFBvaW50IGFQb2lu
dEFycmF5W10sUFJJbnQzMiBhTnVtUHRzKSA9IDA7CiMgNzIyICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ29weU9mZlNj
cmVlbkJpdHMobnNEcmF3aW5nU3VyZmFjZSBhU3JjU3VyZiwgUFJJbnQzMiBhU3JjWCwgUFJJbnQz
MiBhU3JjWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCAmYURl
c3RCb3VuZHMsIFBSVWludDMyIGFDb3B5RmxhZ3MpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBS
ZXRyaWV2ZUN1cnJlbnROYXRpdmVHcmFwaGljRGF0YShQUlVpbnQzMiAqIG5nZCkgPSAwOwojIDcz
NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0
dWFsIG5zcmVzdWx0IERyYXdUaWxlKG5zSUltYWdlICphSW1hZ2UsIG5zY29vcmQgYVNyY1hPZmZz
ZXQsCiAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFTcmNZT2Zmc2V0LCBjb25zdCBuc1Jl
Y3QgJmFUaWxlUmVjdCkgPSAwOwojIDc3MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJl
bmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJpZ2h0VG9MZWZ0VGV4dChQ
UkJvb2wgYUlzUlRMKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdJbWFnZShpbWdJ
Q29udGFpbmVyICphSW1hZ2UsIGNvbnN0IG5zUmVjdCAqIGFTcmNSZWN0LCBjb25zdCBuc1BvaW50
ICogYURlc3RQb2ludCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEcmF3U2NhbGVkSW1hZ2Uo
aW1nSUNvbnRhaW5lciAqYUltYWdlLCBjb25zdCBuc1JlY3QgKiBhU3JjUmVjdCwgY29uc3QgbnNS
ZWN0ICogYURlc3RSZWN0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdUaWxlKGltZ0lD
b250YWluZXIgKmFJbWFnZSwgbnNjb29yZCBhWE9mZnNldCwgbnNjb29yZCBhWU9mZnNldCwgY29u
c3QgbnNSZWN0ICogYVRhcmdldFJlY3QpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRHJhd1Nj
YWxlZFRpbGUoaW1nSUNvbnRhaW5lciAqYUltYWdlLCBuc2Nvb3JkIGFYT2Zmc2V0LCBuc2Nvb3Jk
IGFZT2Zmc2V0LCBuc2Nvb3JkIGFUaWxlV2lkdGgsIG5zY29vcmQgYVRpbGVIZWlnaHQsIGNvbnN0
IG5zUmVjdCAqIGFUYXJnZXRSZWN0KSA9IDA7Cgp9OwojIDI5ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJSW1hZ2UuaCIgMgoKdHlwZWRlZiBzdHJ1Y3QKewoKCgogIFBSSW50MzIgTnVtQ29s
b3JzOwoKCgogIFBSVWludDggKkluZGV4OwoKfSBuc0NvbG9yTWFwOwoKdHlwZWRlZiBlbnVtIHsK
ICAgIG5zTWFza1JlcXVpcmVtZW50c19rTm9NYXNrLAogICAgbnNNYXNrUmVxdWlyZW1lbnRzX2tO
ZWVkczFCaXQsCiAgICBuc01hc2tSZXF1aXJlbWVudHNfa05lZWRzOEJpdAp9IG5zTWFza1JlcXVp
cmVtZW50czsKIyA1OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUltYWdlLmgiCmNsYXNz
IG5zSUltYWdlIDogcHVibGljIG5zSVN1cHBvcnRzCnsKCnB1YmxpYzoKICBzdGF0aWMgY29uc3Qg
bnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweDBiNGZhYWEwLCAw
eGFhM2EsIDB4MTFkMSwgeyAweGE4LCAweDI0LCAweDAwLCAweDQwLCAweDk1LCAweDlhLCAweDI4
LCAweGM5IH0gfTsgcmV0dXJuIGlpZDt9CiMgNzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lJbWFnZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChQUkludDMyIGFXaWR0aCwgUFJJbnQz
MiBhSGVpZ2h0LCBQUkludDMyIGFEZXB0aCwgbnNNYXNrUmVxdWlyZW1lbnRzIGFNYXNrUmVxdWly
ZW1lbnRzKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBQUkludDMyIEdldEJ5dGVzUGl4KCkgPSAwOwoK
CgoKCgogIHZpcnR1YWwgUFJCb29sIEdldElzUm93T3JkZXJUb3BUb0JvdHRvbSgpID0gMDsKCgoK
CgoKICB2aXJ0dWFsIFBSSW50MzIgR2V0V2lkdGgoKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBQUklu
dDMyIEdldEhlaWdodCgpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGVjb2RlZFJl
Y3QoUFJJbnQzMiwgUFJJbnQzMiwgUFJJbnQzMiwgUFJJbnQzMikgPSAwOwogIHZpcnR1YWwgUFJJ
bnQzMiBHZXREZWNvZGVkWDEoKSA9IDA7CiAgdmlydHVhbCBQUkludDMyIEdldERlY29kZWRZMSgp
ID0gMDsKICB2aXJ0dWFsIFBSSW50MzIgR2V0RGVjb2RlZFgyKCkgPSAwOwogIHZpcnR1YWwgUFJJ
bnQzMiBHZXREZWNvZGVkWTIoKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TmF0dXJhbFdp
ZHRoKFBSSW50MzIpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5hdHVyYWxIZWlnaHQoUFJJ
bnQzMikgPSAwOwogIHZpcnR1YWwgUFJJbnQzMiBHZXROYXR1cmFsV2lkdGgoKSA9IDA7CiAgdmly
dHVhbCBQUkludDMyIEdldE5hdHVyYWxIZWlnaHQoKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBQUlVp
bnQ4ICogR2V0Qml0cygpID0gMDsKCgoKCgoKICB2aXJ0dWFsIFBSSW50MzIgR2V0TGluZVN0cmlk
ZSgpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBQUkJvb2wgR2V0SGFzQWxwaGFNYXNrKCkgPSAwOwoK
CgoKCgogIHZpcnR1YWwgUFJVaW50OCAqIEdldEFscGhhQml0cygpID0gMDsKCgoKCgoKICB2aXJ0
dWFsIFBSSW50MzIgR2V0QWxwaGFXaWR0aCgpID0gMDsKCgoKCgoKICB2aXJ0dWFsIFBSSW50MzIg
R2V0QWxwaGFIZWlnaHQoKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBQUkludDMyIEdldEFscGhhTGlu
ZVN0cmlkZSgpID0gMDsKCgoKCgoKCiAgdmlydHVhbCB2b2lkIEltYWdlVXBkYXRlZChuc0lEZXZp
Y2VDb250ZXh0ICphQ29udGV4dCwgUFJVaW50OCBhRmxhZ3MsIG5zUmVjdCAqYVVwZGF0ZVJlY3Qp
ID0gMDsKCgoKCgoKICB2aXJ0dWFsIFBSQm9vbCBJc09wdGltaXplZCgpID0gMDsKCgoKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBPcHRpbWl6ZShuc0lEZXZpY2VDb250ZXh0KiBhQ29udGV4dCkgPSAw
OwoKCgoKCgogIHZpcnR1YWwgbnNDb2xvck1hcCAqIEdldENvbG9yTWFwKCkgPSAwOwojIDIwNyAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUltYWdlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBE
cmF3KG5zSVJlbmRlcmluZ0NvbnRleHQgJmFDb250ZXh0LCBuc0RyYXdpbmdTdXJmYWNlIGFTdXJm
YWNlLCBQUkludDMyIGFYLCBQUkludDMyIGFZLCBQUkludDMyIGFXaWR0aCwgUFJJbnQzMiBhSGVp
Z2h0KSA9IDA7CiMgMjIzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJSW1hZ2UuaCIKICB2
aXJ0dWFsIG5zcmVzdWx0IERyYXcobnNJUmVuZGVyaW5nQ29udGV4dCAmYUNvbnRleHQsIG5zRHJh
d2luZ1N1cmZhY2UgYVN1cmZhY2UsIFBSSW50MzIgYVNYLCBQUkludDMyIGFTWSwgUFJJbnQzMiBh
U1dpZHRoLCBQUkludDMyIGFTSGVpZ2h0LAogICAgICAgICAgICAgICAgICBQUkludDMyIGFEWCwg
UFJJbnQzMiBhRFksIFBSSW50MzIgYURXaWR0aCwgUFJJbnQzMiBhREhlaWdodCkgPSAwOwojIDIz
NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUltYWdlLmgiCiAgdmlydHVhbCBuc3Jlc3Vs
dCBEcmF3VG9JbWFnZShuc0lJbWFnZSogYURzdEltYWdlLCBQUkludDMyIGFEWCwgUFJJbnQzMiBh
RFksIFBSSW50MzIgYURXaWR0aCwgUFJJbnQzMiBhREhlaWdodCkgPSAwOwoKCgoKCgoKICB2aXJ0
dWFsIHZvaWQgU2V0QWxwaGFMZXZlbChQUkludDMyIGFBbHBoYUxldmVsKSA9IDA7CgoKCgoKCiAg
dmlydHVhbCBQUkludDMyIEdldEFscGhhTGV2ZWwoKSA9IDA7CgoKCgoKCiAgdmlydHVhbCB2b2lk
KiBHZXRCaXRJbmZvKCkgPSAwOwojIDI3NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUlt
YWdlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBMb2NrSW1hZ2VQaXhlbHMoUFJCb29sIGFNYXNrUGl4
ZWxzKSA9IDA7CiMgMjg3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJSW1hZ2UuaCIKICB2
aXJ0dWFsIG5zcmVzdWx0IFVubG9ja0ltYWdlUGl4ZWxzKFBSQm9vbCBhTWFza1BpeGVscykgPSAw
OwojIDI5NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUltYWdlLmgiCn07CiMgMzEgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIgMgoKIyAxICIvaG9tZS9rYWkvbS8w
OTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aHJlYWQuaCIgMQojIDU5
ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJ0
aHJlYWQuaCIKIyAxICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNs
dWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgNjAgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGlt
aXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcnRocmVhZC5oIiAyCiMgMSAiL2hvbWUva2FpL20vMDky
L21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ydmFsLmgiIDEKIyA2MSAi
L2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGhy
ZWFkLmgiIDIKCmV4dGVybiAiQyIgewoKdHlwZWRlZiBzdHJ1Y3QgUFJUaHJlYWQgUFJUaHJlYWQ7
CnR5cGVkZWYgc3RydWN0IFBSVGhyZWFkU3RhY2sgUFJUaHJlYWRTdGFjazsKCnR5cGVkZWYgZW51
bSBQUlRocmVhZFR5cGUgewogICAgUFJfVVNFUl9USFJFQUQsCiAgICBQUl9TWVNURU1fVEhSRUFE
Cn0gUFJUaHJlYWRUeXBlOwoKdHlwZWRlZiBlbnVtIFBSVGhyZWFkU2NvcGUgewogICAgUFJfTE9D
QUxfVEhSRUFELAogICAgUFJfR0xPQkFMX1RIUkVBRCwKICAgIFBSX0dMT0JBTF9CT1VORF9USFJF
QUQKfSBQUlRocmVhZFNjb3BlOwoKdHlwZWRlZiBlbnVtIFBSVGhyZWFkU3RhdGUgewogICAgUFJf
Sk9JTkFCTEVfVEhSRUFELAogICAgUFJfVU5KT0lOQUJMRV9USFJFQUQKfSBQUlRocmVhZFN0YXRl
OwoKdHlwZWRlZiBlbnVtIFBSVGhyZWFkUHJpb3JpdHkKewogICAgUFJfUFJJT1JJVFlfRklSU1Qg
PSAwLAogICAgUFJfUFJJT1JJVFlfTE9XID0gMCwKICAgIFBSX1BSSU9SSVRZX05PUk1BTCA9IDEs
CiAgICBQUl9QUklPUklUWV9ISUdIID0gMiwKICAgIFBSX1BSSU9SSVRZX1VSR0VOVCA9IDMsCiAg
ICBQUl9QUklPUklUWV9MQVNUID0gMwp9IFBSVGhyZWFkUHJpb3JpdHk7CiMgMTE4ICIvaG9tZS9r
YWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aHJlYWQuaCIK
ZXh0ZXJuIFBSVGhyZWFkKiBQUl9DcmVhdGVUaHJlYWQoUFJUaHJlYWRUeXBlIHR5cGUsCiAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgKCAqc3RhcnQpKHZvaWQgKmFyZyksCiAgICAgICAgICAgICAg
ICAgICAgIHZvaWQgKmFyZywKICAgICAgICAgICAgICAgICAgICAgUFJUaHJlYWRQcmlvcml0eSBw
cmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgUFJUaHJlYWRTY29wZSBzY29wZSwKICAgICAg
ICAgICAgICAgICAgICAgUFJUaHJlYWRTdGF0ZSBzdGF0ZSwKICAgICAgICAgICAgICAgICAgICAg
UFJVaW50MzIgc3RhY2tTaXplKTsKIyAxMzkgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGlt
aXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcnRocmVhZC5oIgpleHRlcm4gUFJTdGF0dXMgUFJfSm9p
blRocmVhZChQUlRocmVhZCAqdGhyZWFkKTsKCgoKCgpleHRlcm4gUFJUaHJlYWQqIFBSX0dldEN1
cnJlbnRUaHJlYWQodm9pZCk7CgoKCgoKZXh0ZXJuIFBSVGhyZWFkUHJpb3JpdHkgUFJfR2V0VGhy
ZWFkUHJpb3JpdHkoY29uc3QgUFJUaHJlYWQgKnRocmVhZCk7CgoKCgpleHRlcm4gdm9pZCBQUl9T
ZXRUaHJlYWRQcmlvcml0eShQUlRocmVhZCAqdGhyZWFkLCBQUlRocmVhZFByaW9yaXR5IHByaW9y
aXR5KTsKIyAxODIgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1
ZGUvbnNwci9wcnRocmVhZC5oIgp0eXBlZGVmIHZvaWQgKCAqUFJUaHJlYWRQcml2YXRlRFRPUiko
dm9pZCAqcHJpdik7CgpleHRlcm4gUFJTdGF0dXMgUFJfTmV3VGhyZWFkUHJpdmF0ZUluZGV4KAog
ICAgUFJVaW50biAqbmV3SW5kZXgsIFBSVGhyZWFkUHJpdmF0ZURUT1IgZGVzdHJ1Y3Rvcik7CiMg
MTk4ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIv
cHJ0aHJlYWQuaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1NldFRocmVhZFByaXZhdGUoUFJVaW50biB0
cGRJbmRleCwgdm9pZCAqcHJpdik7CiMgMjA5ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRp
bWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aHJlYWQuaCIKZXh0ZXJuIHZvaWQqIFBSX0dldFRo
cmVhZFByaXZhdGUoUFJVaW50biB0cGRJbmRleCk7CiMgMjIxICIvaG9tZS9rYWkvbS8wOTIvbW96
aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aHJlYWQuaCIKZXh0ZXJuIFBSU3Rh
dHVzIFBSX0ludGVycnVwdChQUlRocmVhZCAqdGhyZWFkKTsKCgoKCgpleHRlcm4gdm9pZCBQUl9D
bGVhckludGVycnVwdCh2b2lkKTsKCgoKCmV4dGVybiB2b2lkIFBSX0Jsb2NrSW50ZXJydXB0KHZv
aWQpOwoKCgoKZXh0ZXJuIHZvaWQgUFJfVW5ibG9ja0ludGVycnVwdCh2b2lkKTsKIyAyNDYgIi9o
b21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcnRocmVh
ZC5oIgpleHRlcm4gUFJTdGF0dXMgUFJfU2xlZXAoUFJJbnRlcnZhbFRpbWUgdGlja3MpOwoKCgoK
ZXh0ZXJuIFBSVGhyZWFkU2NvcGUgUFJfR2V0VGhyZWFkU2NvcGUoY29uc3QgUFJUaHJlYWQgKnRo
cmVhZCk7CgoKCgpleHRlcm4gUFJUaHJlYWRUeXBlIFBSX0dldFRocmVhZFR5cGUoY29uc3QgUFJU
aHJlYWQgKnRocmVhZCk7CgoKCgpleHRlcm4gUFJUaHJlYWRTdGF0ZSBQUl9HZXRUaHJlYWRTdGF0
ZShjb25zdCBQUlRocmVhZCAqdGhyZWFkKTsKCn0KIyAzMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVdpZGdldC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zR1VJRXZl
bnQuaCIgMQojIDM0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiIDIKCgpj
bGFzcyBuc0lBcHBTaGVsbDsKY2xhc3MgbnNJVG9vbGtpdDsKY2xhc3MgbnNJRm9udE1ldHJpY3M7
CmNsYXNzIG5zSVRvb2xraXQ7CmNsYXNzIG5zSVJlbmRlcmluZ0NvbnRleHQ7CmNsYXNzIG5zSUVu
dW1lcmF0b3I7CmNsYXNzIG5zSURldmljZUNvbnRleHQ7CnN0cnVjdCBuc1JlY3Q7CnN0cnVjdCBu
c0ZvbnQ7CmNsYXNzIG5zSU1lbnVCYXI7CmNsYXNzIG5zSUV2ZW50TGlzdGVuZXI7CmNsYXNzIG5z
SVJvbGx1cExpc3RlbmVyOwojIDU3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0
LmgiCnR5cGVkZWYgbnNFdmVudFN0YXR1cyAoKiBFVkVOVF9DQUxMQkFDSykobnNHVUlFdmVudCAq
ZXZlbnQpOwojIDgzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiCnR5cGVk
ZWYgdm9pZCogbnNOYXRpdmVXaWRnZXQ7CgoKCgoKZW51bSBuc1dpbmRvd1R5cGUgewoKICBlV2lu
ZG93VHlwZV90b3BsZXZlbCwKCiAgZVdpbmRvd1R5cGVfZGlhbG9nLAoKICBlV2luZG93VHlwZV9w
b3B1cCwKCiAgZVdpbmRvd1R5cGVfY2hpbGQsCgogIGVXaW5kb3dUeXBlX2ludmlzaWJsZQp9OwoK
CmVudW0gbnNCb3JkZXJTdHlsZQp7CgogIGVCb3JkZXJTdHlsZV9ub25lID0gMCwKCgogIGVCb3Jk
ZXJTdHlsZV9hbGwgPSAxIDw8IDAsCgoKICBlQm9yZGVyU3R5bGVfYm9yZGVyID0gMSA8PCAxLAoK
CiAgZUJvcmRlclN0eWxlX3Jlc2l6ZWggPSAxIDw8IDIsCgoKICBlQm9yZGVyU3R5bGVfdGl0bGUg
PSAxIDw8IDMsCgoKICBlQm9yZGVyU3R5bGVfbWVudSA9IDEgPDwgNCwKCgoKICBlQm9yZGVyU3R5
bGVfbWluaW1pemUgPSAxIDw8IDUsCgoKICBlQm9yZGVyU3R5bGVfbWF4aW1pemUgPSAxIDw8IDYs
CgoKICBlQm9yZGVyU3R5bGVfY2xvc2UgPSAxIDw8IDcsCgoKICBlQm9yZGVyU3R5bGVfZGVmYXVs
dCA9IC0xCn07CgoKCgoKZW51bSBuc0N1cnNvciB7CiAgICAgICAgICAgICAgICBlQ3Vyc29yX3N0
YW5kYXJkLAoKICAgICAgICAgICAgICAgIGVDdXJzb3Jfd2FpdCwKCiAgICAgICAgICAgICAgICBl
Q3Vyc29yX3NlbGVjdCwKCiAgICAgICAgICAgICAgICBlQ3Vyc29yX2h5cGVybGluaywKCiAgICAg
ICAgICAgICAgICBlQ3Vyc29yX3NpemVXRSwKCiAgICAgICAgICAgICAgICBlQ3Vyc29yX3NpemVO
UywKCiAgICAgICAgICAgICAgICBlQ3Vyc29yX3NpemVOVywKICAgICAgICAgICAgICAgIGVDdXJz
b3Jfc2l6ZVNFLAogICAgICAgICAgICAgICAgZUN1cnNvcl9zaXplTkUsCiAgICAgICAgICAgICAg
ICBlQ3Vyc29yX3NpemVTVywKICAgICAgICAgICAgICAgIGVDdXJzb3JfYXJyb3dfbm9ydGgsCiAg
ICAgICAgICAgICAgICBlQ3Vyc29yX2Fycm93X25vcnRoX3BsdXMsCiAgICAgICAgICAgICAgICBl
Q3Vyc29yX2Fycm93X3NvdXRoLAogICAgICAgICAgICAgICAgZUN1cnNvcl9hcnJvd19zb3V0aF9w
bHVzLAogICAgICAgICAgICAgICAgZUN1cnNvcl9hcnJvd193ZXN0LAogICAgICAgICAgICAgICAg
ZUN1cnNvcl9hcnJvd193ZXN0X3BsdXMsCiAgICAgICAgICAgICAgICBlQ3Vyc29yX2Fycm93X2Vh
c3QsCiAgICAgICAgICAgICAgICBlQ3Vyc29yX2Fycm93X2Vhc3RfcGx1cywKICAgICAgICAgICAg
ICAgIGVDdXJzb3JfY3Jvc3NoYWlyLAoKICAgICAgICAgICAgICAgIGVDdXJzb3JfbW92ZSwKICAg
ICAgICAgICAgICAgIGVDdXJzb3JfaGVscCwKICAgICAgICAgICAgICAgIGVDdXJzb3JfY29weSwK
ICAgICAgICAgICAgICAgIGVDdXJzb3JfYWxpYXMsCiAgICAgICAgICAgICAgICBlQ3Vyc29yX2Nv
bnRleHRfbWVudSwKICAgICAgICAgICAgICAgIGVDdXJzb3JfY2VsbCwKICAgICAgICAgICAgICAg
IGVDdXJzb3JfZ3JhYiwKICAgICAgICAgICAgICAgIGVDdXJzb3JfZ3JhYmJpbmcsCiAgICAgICAg
ICAgICAgICBlQ3Vyc29yX3NwaW5uaW5nLAogICAgICAgICAgICAgICAgZUN1cnNvcl9jb3VudF91
cCwKICAgICAgICAgICAgICAgIGVDdXJzb3JfY291bnRfZG93biwKICAgICAgICAgICAgICAgIGVD
dXJzb3JfY291bnRfdXBfZG93bgogICAgICAgICAgICAgICAgfTsKCgoKCgoKCnN0cnVjdCBuc1dp
ZGdldEluaXREYXRhIHsKICBuc1dpZGdldEluaXREYXRhKCkKICAgIDogY2xpcENoaWxkcmVuKDAp
LCBjbGlwU2libGluZ3MoMCksCiAgICAgIG1XaW5kb3dUeXBlKGVXaW5kb3dUeXBlX2NoaWxkKSwK
ICAgICAgbUJvcmRlclN0eWxlKGVCb3JkZXJTdHlsZV9kZWZhdWx0KQogIHsKICB9CgoKICBQUlBh
Y2tlZEJvb2wgY2xpcENoaWxkcmVuLCBjbGlwU2libGluZ3M7CiAgbnNXaW5kb3dUeXBlIG1XaW5k
b3dUeXBlOwogIG5zQm9yZGVyU3R5bGUgbUJvcmRlclN0eWxlOwp9OwoKCgoKCmNsYXNzIG5zSVdp
ZGdldCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CgogIHB1YmxpYzoKCiAgICBzdGF0aWMgY29uc3Qg
bnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweDE4MDMyYWQ1LCAw
eGIyNjUsIDB4MTFkMSwgeyAweGFhLCAweDJhLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgw
IH0gfTsgcmV0dXJuIGlpZDt9CiMgMjQwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lk
Z2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZShuc0lXaWRnZXQgKmFQYXJlbnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCAmYVJlY3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgIEVWRU5UX0NBTExCQUNLIGFIYW5kbGVFdmVudEZ1bmN0aW9uLAogICAgICAgICAg
ICAgICAgICAgICAgICBuc0lEZXZpY2VDb250ZXh0ICphQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJQXBwU2hlbGwgKmFBcHBTaGVsbCA9IDAsCiAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSVRvb2xraXQgKmFUb29sa2l0ID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgbnNX
aWRnZXRJbml0RGF0YSAqYUluaXREYXRhID0gMCkgPSAwOwojIDI2NyAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGUobnNOYXRp
dmVXaWRnZXQgYVBhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0ICZh
UmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlRfQ0FMTEJBQ0sgYUhhbmRsZUV2ZW50
RnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgIG5zSURldmljZUNvbnRleHQgKmFDb250
ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBuc0lBcHBTaGVsbCAqYUFwcFNoZWxsID0gMCwK
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJVG9vbGtpdCAqYVRvb2xraXQgPSAwLAogICAgICAg
ICAgICAgICAgICAgICAgICBuc1dpZGdldEluaXREYXRhICphSW5pdERhdGEgPSAwKSA9IDA7CgoK
CgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGllbnREYXRhKHZvaWQqJiBhQ2xpZW50RGF0
YSkgPSAwOwogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDbGllbnREYXRhKHZvaWQqIGFDbGllbnRE
YXRhKSA9IDA7CgoKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBEZXN0cm95KHZvaWQpID0gMDsK
IyAyOTkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwg
bnNJV2lkZ2V0KiBHZXRQYXJlbnQodm9pZCkgPSAwOwojIDMwOCAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVdpZGdldC5oIgogICAgdmlydHVhbCBuc0lFbnVtZXJhdG9yKiBHZXRDaGlsZHJl
bih2b2lkKSA9IDA7CgoKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBTaG93KFBSQm9vbCBhU3Rh
dGUpID0gMDsKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRNb2RhbChQUkJvb2wgYU1vZGFs
KSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgSXNWaXNpYmxlKFBSQm9vbCAmIGFTdGF0
ZSkgPSAwOwojIDM0MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIgogICAg
dmlydHVhbCBuc3Jlc3VsdCBDb25zdHJhaW5Qb3NpdGlvbihQUkludDMyICphWCwgUFJJbnQzMiAq
YVkpID0gMDsKIyAzNTAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAg
IHZpcnR1YWwgbnNyZXN1bHQgTW92ZShQUkludDMyIGFYLCBQUkludDMyIGFZKSA9IDA7CiMgMzYw
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVz
dWx0IFJlc2l6ZShQUkludDMyIGFXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIg
YUhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhUmVwYWludCkgPSAwOwojIDM3
NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jl
c3VsdCBSZXNpemUoUFJJbnQzMiBhWCwKICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYVks
CiAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFXaWR0aCwKICAgICAgICAgICAgICAgICAg
ICAgIFBSSW50MzIgYUhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhUmVwYWlu
dCkgPSAwOwoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2V0WkluZGV4KFBSSW50MzIgYVpJbmRl
eCkgPSAwOwoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0WkluZGV4KFBSSW50MzIqIGFaSW5k
ZXgpID0gMDsKCgoKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFBsYWNlQmVoaW5kKG5zSVdpZGdl
dCAqYVdpZGdldCwgUFJCb29sIGFBY3RpdmF0ZSkgPSAwOwoKCgoKCiAgICB2aXJ0dWFsIG5zcmVz
dWx0IFNldFNpemVNb2RlKFBSSW50MzIgYU1vZGUpID0gMDsKCgoKCgogICAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRTaXplTW9kZShQUkludDMyKiBhTW9kZSkgPSAwOwoKCgoKCgoKICAgIHZpcnR1YWwg
bnNyZXN1bHQgRW5hYmxlKFBSQm9vbCBhU3RhdGUpID0gMDsKCgoKCiAgICB2aXJ0dWFsIG5zcmVz
dWx0IFNldEZvY3VzKFBSQm9vbCBhUmFpc2UgPSAwKSA9IDA7CgoKCgoKCgogICAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRCb3VuZHMobnNSZWN0ICZhUmVjdCkgPSAwOwojIDQ0MSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTY3JlZW5C
b3VuZHMobnNSZWN0ICZhUmVjdCkgPSAwOwojIDQ1MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGllbnRCb3VuZHMobnNSZWN0
ICZhUmVjdCkgPSAwOwoKCgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyU2l6ZShQ
UkludDMyICZhV2lkdGgsIFBSSW50MzIgJmFIZWlnaHQpID0gMDsKCgoKCgoKCiAgICB2aXJ0dWFs
IG5zY29sb3IgR2V0Rm9yZWdyb3VuZENvbG9yKHZvaWQpID0gMDsKIyA0NzYgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2V0Rm9yZWdy
b3VuZENvbG9yKGNvbnN0IG5zY29sb3IgJmFDb2xvcikgPSAwOwojIDQ4NSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIgogICAgdmlydHVhbCBuc2NvbG9yIEdldEJhY2tncm91
bmRDb2xvcih2b2lkKSA9IDA7CiMgNDk0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lk
Z2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldEJhY2tncm91bmRDb2xvcihjb25zdCBuc2Nv
bG9yICZhQ29sb3IpID0gMDsKCgoKCgoKCiAgICB2aXJ0dWFsIG5zSUZvbnRNZXRyaWNzKiBHZXRG
b250KHZvaWQpID0gMDsKCgoKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZvbnQoY29uc3Qg
bnNGb250ICZhRm9udCkgPSAwOwoKCgoKCgoKICAgIHZpcnR1YWwgbnNDdXJzb3IgR2V0Q3Vyc29y
KHZvaWQpID0gMDsKCgoKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldEN1cnNvcihuc0N1cnNv
ciBhQ3Vyc29yKSA9IDA7CgoKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdpbmRvd1R5cGUo
bnNXaW5kb3dUeXBlJiBhV2luZG93VHlwZSkgPSAwOwoKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0
IFZhbGlkYXRlKCkgPSAwOwojIDU0OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdl
dC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBJbnZhbGlkYXRlKFBSQm9vbCBhSXNTeW5jaHJvbm91
cykgPSAwOwojIDU1NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIgogICAg
dmlydHVhbCBuc3Jlc3VsdCBJbnZhbGlkYXRlKGNvbnN0IG5zUmVjdCAmIGFSZWN0LCBQUkJvb2wg
YUlzU3luY2hyb25vdXMpID0gMDsKIyA1NjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lX
aWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgSW52YWxpZGF0ZVJlZ2lvbihjb25zdCBuc0lS
ZWdpb24qIGFSZWdpb24sIFBSQm9vbCBhSXNTeW5jaHJvbm91cykgPSAwOwoKCgoKCgoKICAgICB2
aXJ0dWFsIG5zcmVzdWx0IFVwZGF0ZSgpID0gMDsKIyA1ODMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgQWRkTW91c2VMaXN0ZW5lcihu
c0lNb3VzZUxpc3RlbmVyICogYUxpc3RlbmVyKSA9IDA7CiMgNTkyICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJV2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IEFkZEV2ZW50TGlzdGVu
ZXIobnNJRXZlbnRMaXN0ZW5lciAqIGFMaXN0ZW5lcikgPSAwOwojIDYwMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBBZGRNZW51TGlz
dGVuZXIobnNJTWVudUxpc3RlbmVyICogYUxpc3RlbmVyKSA9IDA7CgoKCgoKCgogICAgdmlydHVh
bCBuc0lUb29sa2l0KiBHZXRUb29sa2l0KCkgPSAwOwojIDYxOCAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDb2xvck1hcChuc0Nv
bG9yTWFwICphQ29sb3JNYXApID0gMDsKIyA2MzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xsKFBSSW50MzIgYUR4LCBQUklu
dDMyIGFEeSwgbnNSZWN0ICphQ2xpcFJlY3QpID0gMDsKIyA2NDIgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xsV2lkZ2V0cyhQ
UkludDMyIGFEeCwgUFJJbnQzMiBhRHkpID0gMDsKIyA2NTQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xsUmVjdChuc1JlY3Qg
JmFTcmNSZWN0LCBQUkludDMyIGFEeCwgUFJJbnQzMiBhRHkpID0gMDsKCgoKCgoKICAgIHZpcnR1
YWwgdm9pZCBBZGRDaGlsZChuc0lXaWRnZXQqIGFDaGlsZCkgPSAwOwogICAgdmlydHVhbCB2b2lk
IFJlbW92ZUNoaWxkKG5zSVdpZGdldCogYUNoaWxkKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQqIEdl
dE5hdGl2ZURhdGEoUFJVaW50MzIgYURhdGFUeXBlKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgRnJl
ZU5hdGl2ZURhdGEodm9pZCAqIGRhdGEsIFBSVWludDMyIGFEYXRhVHlwZSkgPSAwOwogICAgdmly
dHVhbCBuc0lSZW5kZXJpbmdDb250ZXh0KiBHZXRSZW5kZXJpbmdDb250ZXh0KCkgPSAwOwogICAg
dmlydHVhbCBuc0lEZXZpY2VDb250ZXh0KiBHZXREZXZpY2VDb250ZXh0KCkgPSAwOwogICAgdmly
dHVhbCBuc0lBcHBTaGVsbCAqR2V0QXBwU2hlbGwoKSA9IDA7CiMgNjc2ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldEJvcmRlclN0
eWxlKG5zQm9yZGVyU3R5bGUgYUJvcmRlclN0eWxlKSA9IDA7CiMgNjg1ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRpdGxlKGNv
bnN0IG5zU3RyaW5nJiBhVGl0bGUpID0gMDsKIyA2OTYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2V0SWNvbihjb25zdCBuc0FSZWFk
YWJsZVN0cmluZyYgYW5JY29uU3BlYykgPSAwOwojIDcwNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRNZW51QmFyKG5zSU1lbnVC
YXIgKiBhTWVudUJhcikgPSAwOwoKCgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2hvd01lbnVC
YXIoUFJCb29sIGFTaG93KSA9IDA7CiMgNzIyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
V2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFdpZGdldFRvU2NyZWVuKGNvbnN0IG5zUmVj
dCYgYU9sZFJlY3QsIG5zUmVjdCYgYU5ld1JlY3QpID0gMDsKIyA3MzEgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2NyZWVuVG9XaWRn
ZXQoY29uc3QgbnNSZWN0JiBhT2xkUmVjdCwgbnNSZWN0JiBhTmV3UmVjdCkgPSAwOwojIDc0MSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3Vs
dCBCZWdpblJlc2l6aW5nQ2hpbGRyZW4odm9pZCkgPSAwOwoKCgoKCgoKICAgIHZpcnR1YWwgbnNy
ZXN1bHQgRW5kUmVzaXppbmdDaGlsZHJlbih2b2lkKSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0UHJlZmVycmVkU2l6ZShQUkludDMyJiBhV2lkdGgsIFBSSW50MzImIGFIZWlnaHQp
ID0gMDsKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQcmVmZXJyZWRTaXplKFBSSW50MzIg
YVdpZHRoLCBQUkludDMyIGFIZWlnaHQpID0gMDsKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBE
aXNwYXRjaEV2ZW50KG5zR1VJRXZlbnQqIGV2ZW50LCBuc0V2ZW50U3RhdHVzICYgYVN0YXR1cykg
PSAwOwoKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBQYWludChuc0lSZW5kZXJpbmdDb250ZXh0
JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0JiBh
RGlydHlSZWN0KSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgRW5hYmxlRHJhZ0Ryb3Ao
UFJCb29sIGFFbmFibGUpID0gMDsKCiAgICB2aXJ0dWFsIHZvaWQgQ29udmVydFRvRGV2aWNlQ29v
cmRpbmF0ZXMobnNjb29yZCAmYVgsbnNjb29yZCAmYVkpID0gMDsKCgoKCgoKICAgIHZpcnR1YWwg
bnNyZXN1bHQgQ2FwdHVyZU1vdXNlKFBSQm9vbCBhQ2FwdHVyZSkgPSAwOwojIDgwMCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBDYXB0
dXJlUm9sbHVwRXZlbnRzKG5zSVJvbGx1cExpc3RlbmVyICogYUxpc3RlbmVyLCBQUkJvb2wgYURv
Q2FwdHVyZSwgUFJCb29sIGFDb25zdW1lUm9sbHVwRXZlbnQpID0gMDsKIyA4MTMgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE1vZGFsRXZl
bnRGaWx0ZXIoUFJCb29sIGFSZWFsRXZlbnQsIHZvaWQgKmFFdmVudCwgUFJCb29sICphRm9yV2lu
ZG93KSA9IDA7CiMgODIzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRBdHRlbnRpb24oKSA9IDA7Cgp9OwojIDMwICIuLi8uLi8uLi8u
Li8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Zvcm1zL3NyYy9uc0Zvcm1Db250cm9sSGVscGVyLmgi
IDIKIyAxICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Jhc2Uvc3JjL25zTGVh
ZkZyYW1lLmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQvaHRtbC9iYXNl
L3NyYy9uc0xlYWZGcmFtZS5oIgojIDEgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0
bWwvYmFzZS9zcmMvbnNGcmFtZS5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5
b3V0L2h0bWwvYmFzZS9zcmMvbnNGcmFtZS5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lGcmFtZS5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5o
IgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUZyYW1lLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNsYXlvdXQuaCIgMQoj
IDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNsYXlvdXQuaCIKIyAxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zbGF5b3V0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMu
aCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNsYXlvdXQuaCIgMgojIDEgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1RyYWNlUmVmY250LmgiIDEKIyAyOCAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zbGF5b3V0LmgiIDIKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSUZyYW1lLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9y
dHMuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIgMgojIDEg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1NpemUuaCIgMQojIDI5ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0dVSUV2ZW50LmgiIDEKIyAzMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgi
IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZUNvbnN0cy5oIiAxCiMgMjUg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlQ29uc3RzLmgiCiMgMSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zRm9udC5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc1N0eWxlQ29uc3RzLmgiIDIKIyAzMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZy
YW1lLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVN0cnVjdC5oIiAx
CiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlU3RydWN0LmgiCiMgMSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29sb3IuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNTdHlsZVN0cnVjdC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zQ29vcmQuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVN0cnVj
dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zTWFyZ2luLmgiIDEKIyAyOCAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVTdHJ1Y3QuaCIgMgojIDEgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc1JlY3QuaCIgMQojIDI5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNTdHlsZVN0cnVjdC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRm9u
dC5oIiAxCiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlU3RydWN0LmgiIDIK
IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNWb2lkQXJyYXkuaCIgMQojIDI2ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNWb2lkQXJyYXkuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zVm9p
ZEFycmF5LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBV3JpdGFibGVTdHJp
bmcuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNWb2lkQXJyYXkuaCIgMgpj
bGFzcyBuc0lTaXplT2ZIYW5kbGVyOwoKCnR5cGVkZWYgUFJCb29sICgqIG5zVm9pZEFycmF5RW51
bUZ1bmMpKHZvaWQqIGFFbGVtZW50LCB2b2lkICphRGF0YSk7CgoKY2xhc3MgbnNWb2lkQXJyYXkg
ewpwdWJsaWM6CiAgbnNWb2lkQXJyYXkoKTsKICBuc1ZvaWRBcnJheShQUkludDMyIGFDb3VudCk7
CiAgdmlydHVhbCB+bnNWb2lkQXJyYXkoKTsKCiAgbnNWb2lkQXJyYXkmIG9wZXJhdG9yPShjb25z
dCBuc1ZvaWRBcnJheSYgb3RoZXIpOwoKICB2b2lkIFNpemVPZihuc0lTaXplT2ZIYW5kbGVyKiBh
SGFuZGxlciwgUFJVaW50MzIqIGFSZXN1bHQpIGNvbnN0OwoKICBQUkludDMyIENvdW50KCkgY29u
c3QgewogICAgcmV0dXJuIG1JbXBsID8gbUltcGwtPm1Db3VudCA6IDA7CiAgfQoKICB2b2lkKiBF
bGVtZW50QXQoUFJJbnQzMiBhSW5kZXgpIGNvbnN0OwogIHZvaWQqIG9wZXJhdG9yW10oUFJJbnQz
MiBhSW5kZXgpIGNvbnN0IHsgcmV0dXJuIEVsZW1lbnRBdChhSW5kZXgpOyB9CgogIFBSSW50MzIg
SW5kZXhPZih2b2lkKiBhUG9zc2libGVFbGVtZW50KSBjb25zdDsKCiAgUFJCb29sIEluc2VydEVs
ZW1lbnRBdCh2b2lkKiBhRWxlbWVudCwgUFJJbnQzMiBhSW5kZXgpOwoKICBQUkJvb2wgUmVwbGFj
ZUVsZW1lbnRBdCh2b2lkKiBhRWxlbWVudCwgUFJJbnQzMiBhSW5kZXgpOwoKICBQUkJvb2wgQXBw
ZW5kRWxlbWVudCh2b2lkKiBhRWxlbWVudCkgewogICAgcmV0dXJuIEluc2VydEVsZW1lbnRBdChh
RWxlbWVudCwgQ291bnQoKSk7CiAgfQoKICBQUkJvb2wgUmVtb3ZlRWxlbWVudCh2b2lkKiBhRWxl
bWVudCk7CiAgUFJCb29sIFJlbW92ZUVsZW1lbnRBdChQUkludDMyIGFJbmRleCk7CiAgdm9pZCBD
bGVhcigpOwoKICB2b2lkIENvbXBhY3QoKTsKCiAgUFJCb29sIEVudW1lcmF0ZUZvcndhcmRzKG5z
Vm9pZEFycmF5RW51bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsKICBQUkJvb2wgRW51bWVyYXRl
QmFja3dhcmRzKG5zVm9pZEFycmF5RW51bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsKCnByb3Rl
Y3RlZDoKICBzdHJ1Y3QgSW1wbCB7CgoKCgoKCiAgICBQUlVpbnQzMiBtQml0czsKCgoKCiAgICBQ
UkludDMyIG1Db3VudDsKCgoKCiAgICB2b2lkKiBtQXJyYXlbMV07CiAgfTsKCiAgSW1wbCogbUlt
cGw7CgogIGVudW0gewogICAga0FycmF5T3duZXJNYXNrID0gMSA8PCAzMSwKICAgIGtBcnJheVNp
emVNYXNrID0gfmtBcnJheU93bmVyTWFzawogIH07CgoKCiAgUFJJbnQzMiBHZXRBcnJheVNpemUo
KSBjb25zdDsKICB2b2lkIFNldEFycmF5U2l6ZShQUkludDMyIGFTaXplKTsKICBQUkJvb2wgSXNB
cnJheU93bmVyKCkgY29uc3Q7CiAgdm9pZCBTZXRBcnJheU93bmVyKFBSQm9vbCBhT3duZXIpOwoK
cHJpdmF0ZToKCiAgbnNWb2lkQXJyYXkoY29uc3QgbnNWb2lkQXJyYXkmIG90aGVyKTsKfTsKCgoK
Y2xhc3MgbnNBdXRvVm9pZEFycmF5IDogcHVibGljIG5zVm9pZEFycmF5IHsKcHVibGljOgogIG5z
QXV0b1ZvaWRBcnJheSgpOwoKcHJvdGVjdGVkOgoKCiAgZW51bSB7IGtBdXRvQnVmU2l6ZSA9IDgg
fTsKICBjaGFyIG1BdXRvQnVmW3NpemVvZihJbXBsKSArIChrQXV0b0J1ZlNpemUgLSAxKSAqIHNp
emVvZih2b2lkKildOwp9OwoKCmNsYXNzIG5zU3RyaW5nOwoKdHlwZWRlZiBQUkJvb2wgKCpuc1N0
cmluZ0FycmF5RW51bUZ1bmMpKG5zU3RyaW5nJiBhRWxlbWVudCwgdm9pZCAqYURhdGEpOwoKY2xh
c3MgbnNTdHJpbmdBcnJheTogcHJvdGVjdGVkIG5zVm9pZEFycmF5CnsKcHVibGljOgogIG5zU3Ry
aW5nQXJyYXkodm9pZCk7CiAgdmlydHVhbCB+bnNTdHJpbmdBcnJheSh2b2lkKTsKCiAgbnNTdHJp
bmdBcnJheSYgb3BlcmF0b3I9KGNvbnN0IG5zU3RyaW5nQXJyYXkmIG90aGVyKTsKCiAgdm9pZCBT
aXplT2YobnNJU2l6ZU9mSGFuZGxlciogYUhhbmRsZXIsIFBSVWludDMyKiBhUmVzdWx0KSBjb25z
dDsKCiAgUFJJbnQzMiBDb3VudCh2b2lkKSBjb25zdCB7CiAgICByZXR1cm4gbnNWb2lkQXJyYXk6
OkNvdW50KCk7CiAgfQoKICB2b2lkIFN0cmluZ0F0KFBSSW50MzIgYUluZGV4LCBuc0FXcml0YWJs
ZVN0cmluZyYgYVN0cmluZykgY29uc3Q7CiAgbnNTdHJpbmcqIFN0cmluZ0F0KFBSSW50MzIgYUlu
ZGV4KSBjb25zdDsKICBuc1N0cmluZyogb3BlcmF0b3JbXShQUkludDMyIGFJbmRleCkgY29uc3Qg
eyByZXR1cm4gU3RyaW5nQXQoYUluZGV4KTsgfQoKICBQUkludDMyIEluZGV4T2YoY29uc3QgbnNB
UmVhZGFibGVTdHJpbmcmIGFQb3NzaWJsZVN0cmluZykgY29uc3Q7CiAgUFJJbnQzMiBJbmRleE9m
SWdub3JlQ2FzZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVBvc3NpYmxlU3RyaW5nKSBjb25z
dDsKCiAgUFJCb29sIEluc2VydFN0cmluZ0F0KGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhU3Ry
aW5nLCBQUkludDMyIGFJbmRleCk7CgogIFBSQm9vbCBSZXBsYWNlU3RyaW5nQXQoY29uc3QgbnNB
UmVhZGFibGVTdHJpbmcmIGFTdHJpbmcsIFBSSW50MzIgYUluZGV4KTsKCiAgUFJCb29sIEFwcGVu
ZFN0cmluZyhjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVN0cmluZykgewogICAgcmV0dXJuIElu
c2VydFN0cmluZ0F0KGFTdHJpbmcsIENvdW50KCkpOwogIH0KCiAgUFJCb29sIFJlbW92ZVN0cmlu
Zyhjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVN0cmluZyk7CiAgUFJCb29sIFJlbW92ZVN0cmlu
Z0lnbm9yZUNhc2UoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFTdHJpbmcpOwogIFBSQm9vbCBS
ZW1vdmVTdHJpbmdBdChQUkludDMyIGFJbmRleCk7CiAgdm9pZCBDbGVhcih2b2lkKTsKCiAgdm9p
ZCBDb21wYWN0KHZvaWQpIHsKICAgIG5zVm9pZEFycmF5OjpDb21wYWN0KCk7CiAgfQoKICBQUkJv
b2wgRW51bWVyYXRlRm9yd2FyZHMobnNTdHJpbmdBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lkKiBh
RGF0YSk7CiAgUFJCb29sIEVudW1lcmF0ZUJhY2t3YXJkcyhuc1N0cmluZ0FycmF5RW51bUZ1bmMg
YUZ1bmMsIHZvaWQqIGFEYXRhKTsKCnByaXZhdGU6CgogIG5zU3RyaW5nQXJyYXkoY29uc3QgbnNT
dHJpbmdBcnJheSYgb3RoZXIpOwp9OwoKCmNsYXNzIG5zQ1N0cmluZzsKCnR5cGVkZWYgUFJCb29s
ICgqbnNDU3RyaW5nQXJyYXlFbnVtRnVuYykobnNDU3RyaW5nJiBhRWxlbWVudCwgdm9pZCAqYURh
dGEpOwoKY2xhc3MgbnNDU3RyaW5nQXJyYXk6IHByb3RlY3RlZCBuc1ZvaWRBcnJheQp7CnB1Ymxp
YzoKICBuc0NTdHJpbmdBcnJheSh2b2lkKTsKICB2aXJ0dWFsIH5uc0NTdHJpbmdBcnJheSh2b2lk
KTsKCiAgbnNDU3RyaW5nQXJyYXkmIG9wZXJhdG9yPShjb25zdCBuc0NTdHJpbmdBcnJheSYgb3Ro
ZXIpOwoKICB2b2lkIFNpemVPZihuc0lTaXplT2ZIYW5kbGVyKiBhSGFuZGxlciwgUFJVaW50MzIq
IGFSZXN1bHQpIGNvbnN0OwoKICBQUkludDMyIENvdW50KHZvaWQpIGNvbnN0IHsKICAgIHJldHVy
biBuc1ZvaWRBcnJheTo6Q291bnQoKTsKICB9CgogIHZvaWQgQ1N0cmluZ0F0KFBSSW50MzIgYUlu
ZGV4LCBuc0NTdHJpbmcmIGFDU3RyaW5nKSBjb25zdDsKICBuc0NTdHJpbmcqIENTdHJpbmdBdChQ
UkludDMyIGFJbmRleCkgY29uc3Q7CiAgbnNDU3RyaW5nKiBvcGVyYXRvcltdKFBSSW50MzIgYUlu
ZGV4KSBjb25zdCB7IHJldHVybiBDU3RyaW5nQXQoYUluZGV4KTsgfQoKICBQUkludDMyIEluZGV4
T2YoY29uc3QgbnNDU3RyaW5nJiBhUG9zc2libGVTdHJpbmcpIGNvbnN0OwogIFBSSW50MzIgSW5k
ZXhPZklnbm9yZUNhc2UoY29uc3QgbnNDU3RyaW5nJiBhUG9zc2libGVTdHJpbmcpIGNvbnN0OwoK
ICBQUkJvb2wgSW5zZXJ0Q1N0cmluZ0F0KGNvbnN0IG5zQ1N0cmluZyYgYUNTdHJpbmcsIFBSSW50
MzIgYUluZGV4KTsKCiAgUFJCb29sIFJlcGxhY2VDU3RyaW5nQXQoY29uc3QgbnNDU3RyaW5nJiBh
Q1N0cmluZywgUFJJbnQzMiBhSW5kZXgpOwoKICBQUkJvb2wgQXBwZW5kQ1N0cmluZyhjb25zdCBu
c0NTdHJpbmcmIGFDU3RyaW5nKSB7CiAgICByZXR1cm4gSW5zZXJ0Q1N0cmluZ0F0KGFDU3RyaW5n
LCBDb3VudCgpKTsKICB9CgogIFBSQm9vbCBSZW1vdmVDU3RyaW5nKGNvbnN0IG5zQ1N0cmluZyYg
YUNTdHJpbmcpOwogIFBSQm9vbCBSZW1vdmVDU3RyaW5nSWdub3JlQ2FzZShjb25zdCBuc0NTdHJp
bmcmIGFDU3RyaW5nKTsKICBQUkJvb2wgUmVtb3ZlQ1N0cmluZ0F0KFBSSW50MzIgYUluZGV4KTsK
ICB2b2lkIENsZWFyKHZvaWQpOwoKICB2b2lkIENvbXBhY3Qodm9pZCkgewogICAgbnNWb2lkQXJy
YXk6OkNvbXBhY3QoKTsKICB9CgogIFBSQm9vbCBFbnVtZXJhdGVGb3J3YXJkcyhuc0NTdHJpbmdB
cnJheUVudW1GdW5jIGFGdW5jLCB2b2lkKiBhRGF0YSk7CiAgUFJCb29sIEVudW1lcmF0ZUJhY2t3
YXJkcyhuc0NTdHJpbmdBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lkKiBhRGF0YSk7Cgpwcml2YXRl
OgoKICBuc0NTdHJpbmdBcnJheShjb25zdCBuc0NTdHJpbmdBcnJheSYgb3RoZXIpOwp9OwojIDMx
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVN0cnVjdC5oIiAyCiMgMSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVDb29yZC5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc1N0eWxlQ29vcmQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNjb3JlLmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVDb29yZC5o
IiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29vcmQuaCIgMQojIDI3ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZUNvb3JkLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNDUlQuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNT
dHlsZUNvb3JkLmgiIDIKY2xhc3MgbnNTdHJpbmc7CgplbnVtIG5zU3R5bGVVbml0IHsKICBlU3R5
bGVVbml0X051bGwgPSAwLAogIGVTdHlsZVVuaXRfTm9ybWFsID0gMSwKICBlU3R5bGVVbml0X0F1
dG8gPSAyLAogIGVTdHlsZVVuaXRfSW5oZXJpdCA9IDMsCiAgZVN0eWxlVW5pdF9QZXJjZW50ID0g
MTAsCiAgZVN0eWxlVW5pdF9GYWN0b3IgPSAxMSwKICBlU3R5bGVVbml0X0Nvb3JkID0gMjAsCiAg
ZVN0eWxlVW5pdF9JbnRlZ2VyID0gMzAsCiAgZVN0eWxlVW5pdF9Qcm9wb3J0aW9uYWwgPSAzMSwK
ICBlU3R5bGVVbml0X0VudW1lcmF0ZWQgPSAzMiwKICBlU3R5bGVVbml0X0NoYXJzID0gMzMKfTsK
CnR5cGVkZWYgdW5pb24gewogIFBSSW50MzIgbUludDsKICBmbG9hdCBtRmxvYXQ7Cn0gbnNTdHls
ZVVuaW9uOwoKY2xhc3MgbnNTdHlsZUNvb3JkIHsKcHVibGljOgogIG5zU3R5bGVDb29yZChuc1N0
eWxlVW5pdCBhVW5pdCA9IGVTdHlsZVVuaXRfTnVsbCk7CiAgbnNTdHlsZUNvb3JkKG5zY29vcmQg
YVZhbHVlKTsKICBuc1N0eWxlQ29vcmQoUFJJbnQzMiBhVmFsdWUsIG5zU3R5bGVVbml0IGFVbml0
KTsKICBuc1N0eWxlQ29vcmQoZmxvYXQgYVZhbHVlLCBuc1N0eWxlVW5pdCBhVW5pdCk7CiAgbnNT
dHlsZUNvb3JkKGNvbnN0IG5zU3R5bGVDb29yZCYgYUNvcHkpOwoKICBuc1N0eWxlQ29vcmQmIG9w
ZXJhdG9yPShjb25zdCBuc1N0eWxlQ29vcmQmIGFDb3B5KTsKICBQUkJvb2wgb3BlcmF0b3I9PShj
b25zdCBuc1N0eWxlQ29vcmQmIGFPdGhlcikgY29uc3Q7CiAgUFJCb29sIG9wZXJhdG9yIT0oY29u
c3QgbnNTdHlsZUNvb3JkJiBhT3RoZXIpIGNvbnN0OwoKICBuc1N0eWxlVW5pdCBHZXRVbml0KHZv
aWQpIGNvbnN0IHsgcmV0dXJuIG1Vbml0OyB9CiAgbnNjb29yZCBHZXRDb29yZFZhbHVlKHZvaWQp
IGNvbnN0OwogIFBSSW50MzIgR2V0SW50VmFsdWUodm9pZCkgY29uc3Q7CiAgZmxvYXQgR2V0UGVy
Y2VudFZhbHVlKHZvaWQpIGNvbnN0OwogIGZsb2F0IEdldEZhY3RvclZhbHVlKHZvaWQpIGNvbnN0
OwogIHZvaWQgR2V0VW5pb25WYWx1ZShuc1N0eWxlVW5pb24mIGFWYWx1ZSkgY29uc3Q7CgogIHZv
aWQgUmVzZXQodm9pZCk7CiAgdm9pZCBTZXRDb29yZFZhbHVlKG5zY29vcmQgYVZhbHVlKTsKICB2
b2lkIFNldEludFZhbHVlKFBSSW50MzIgYVZhbHVlLCBuc1N0eWxlVW5pdCBhVW5pdCk7CiAgdm9p
ZCBTZXRQZXJjZW50VmFsdWUoZmxvYXQgYVZhbHVlKTsKICB2b2lkIFNldEZhY3RvclZhbHVlKGZs
b2F0IGFWYWx1ZSk7CiAgdm9pZCBTZXROb3JtYWxWYWx1ZSh2b2lkKTsKICB2b2lkIFNldEF1dG9W
YWx1ZSh2b2lkKTsKICB2b2lkIFNldEluaGVyaXRWYWx1ZSh2b2lkKTsKICB2b2lkIFNldFVuaW9u
VmFsdWUoY29uc3QgbnNTdHlsZVVuaW9uJiBhVmFsdWUsIG5zU3R5bGVVbml0IGFVbml0KTsKCiAg
dm9pZCBBcHBlbmRUb1N0cmluZyhuc1N0cmluZyYgYUJ1ZmZlcikgY29uc3Q7CiAgdm9pZCBUb1N0
cmluZyhuc1N0cmluZyYgYUJ1ZmZlcikgY29uc3Q7CgpwdWJsaWM6CiAgbnNTdHlsZVVuaXQgbVVu
aXQ7CiAgbnNTdHlsZVVuaW9uIG1WYWx1ZTsKfTsKCgpjbGFzcyBuc1N0eWxlU2lkZXMgewpwdWJs
aWM6CiAgbnNTdHlsZVNpZGVzKHZvaWQpOwoKCiAgUFJCb29sIG9wZXJhdG9yPT0oY29uc3QgbnNT
dHlsZVNpZGVzJiBhT3RoZXIpIGNvbnN0OwogIFBSQm9vbCBvcGVyYXRvciE9KGNvbnN0IG5zU3R5
bGVTaWRlcyYgYU90aGVyKSBjb25zdDsKCiAgbnNTdHlsZVVuaXQgR2V0TGVmdFVuaXQodm9pZCkg
Y29uc3Q7CiAgbnNTdHlsZVVuaXQgR2V0VG9wVW5pdCh2b2lkKSBjb25zdDsKICBuc1N0eWxlVW5p
dCBHZXRSaWdodFVuaXQodm9pZCkgY29uc3Q7CiAgbnNTdHlsZVVuaXQgR2V0Qm90dG9tVW5pdCh2
b2lkKSBjb25zdDsKCiAgbnNTdHlsZUNvb3JkJiBHZXRMZWZ0KG5zU3R5bGVDb29yZCYgYUNvb3Jk
KSBjb25zdDsKICBuc1N0eWxlQ29vcmQmIEdldFRvcChuc1N0eWxlQ29vcmQmIGFDb29yZCkgY29u
c3Q7CiAgbnNTdHlsZUNvb3JkJiBHZXRSaWdodChuc1N0eWxlQ29vcmQmIGFDb29yZCkgY29uc3Q7
CiAgbnNTdHlsZUNvb3JkJiBHZXRCb3R0b20obnNTdHlsZUNvb3JkJiBhQ29vcmQpIGNvbnN0OwoK
ICB2b2lkIFJlc2V0KHZvaWQpOwogIHZvaWQgU2V0TGVmdChjb25zdCBuc1N0eWxlQ29vcmQmIGFD
b29yZCk7CiAgdm9pZCBTZXRUb3AoY29uc3QgbnNTdHlsZUNvb3JkJiBhQ29vcmQpOwogIHZvaWQg
U2V0UmlnaHQoY29uc3QgbnNTdHlsZUNvb3JkJiBhQ29vcmQpOwogIHZvaWQgU2V0Qm90dG9tKGNv
bnN0IG5zU3R5bGVDb29yZCYgYUNvb3JkKTsKCiAgdm9pZCBBcHBlbmRUb1N0cmluZyhuc1N0cmlu
ZyYgYUJ1ZmZlcikgY29uc3Q7CiAgdm9pZCBUb1N0cmluZyhuc1N0cmluZyYgYUJ1ZmZlcikgY29u
c3Q7Cgpwcm90ZWN0ZWQ6CiAgUFJVaW50OCBtTGVmdFVuaXQ7CiAgUFJVaW50OCBtVG9wVW5pdDsK
ICBQUlVpbnQ4IG1SaWdodFVuaXQ7CiAgUFJVaW50OCBtQm90dG9tVW5pdDsKICBuc1N0eWxlVW5p
b24gbUxlZnRWYWx1ZTsKICBuc1N0eWxlVW5pb24gbVRvcFZhbHVlOwogIG5zU3R5bGVVbmlvbiBt
UmlnaHRWYWx1ZTsKICBuc1N0eWxlVW5pb24gbUJvdHRvbVZhbHVlOwp9OwoKCgoKaW5saW5lIFBS
Qm9vbCBuc1N0eWxlQ29vcmQ6Om9wZXJhdG9yIT0oY29uc3QgbnNTdHlsZUNvb3JkJiBhT3RoZXIp
IGNvbnN0CnsKICByZXR1cm4gUFJCb29sKCEgKCgqdGhpcykgPT0gYU90aGVyKSk7Cn0KCmlubGlu
ZSBQUkludDMyIG5zU3R5bGVDb29yZDo6R2V0Q29vcmRWYWx1ZSh2b2lkKSBjb25zdAp7CiAge307
CiAgaWYgKG1Vbml0ID09IGVTdHlsZVVuaXRfQ29vcmQpIHsKICAgIHJldHVybiBtVmFsdWUubUlu
dDsKICB9CiAgcmV0dXJuIDA7Cn0KCmlubGluZSBQUkludDMyIG5zU3R5bGVDb29yZDo6R2V0SW50
VmFsdWUodm9pZCkgY29uc3QKewogIHt9OwoKCgogIGlmICgobVVuaXQgPT0gZVN0eWxlVW5pdF9Q
cm9wb3J0aW9uYWwpIHx8CiAgICAgIChtVW5pdCA9PSBlU3R5bGVVbml0X0VudW1lcmF0ZWQpIHx8
CiAgICAgIChtVW5pdCA9PSBlU3R5bGVVbml0X0NoYXJzKSB8fAogICAgICAobVVuaXQgPT0gZVN0
eWxlVW5pdF9JbnRlZ2VyKSkgewogICAgcmV0dXJuIG1WYWx1ZS5tSW50OwogIH0KICByZXR1cm4g
MDsKfQoKaW5saW5lIGZsb2F0IG5zU3R5bGVDb29yZDo6R2V0UGVyY2VudFZhbHVlKHZvaWQpIGNv
bnN0CnsKICB7fTsKICBpZiAobVVuaXQgPT0gZVN0eWxlVW5pdF9QZXJjZW50KSB7CiAgICByZXR1
cm4gbVZhbHVlLm1GbG9hdDsKICB9CiAgcmV0dXJuIDAuMGY7Cn0KCmlubGluZSBmbG9hdCBuc1N0
eWxlQ29vcmQ6OkdldEZhY3RvclZhbHVlKHZvaWQpIGNvbnN0CnsKICB7fTsKICBpZiAobVVuaXQg
PT0gZVN0eWxlVW5pdF9GYWN0b3IpIHsKICAgIHJldHVybiBtVmFsdWUubUZsb2F0OwogIH0KICBy
ZXR1cm4gMC4wZjsKfQoKaW5saW5lIHZvaWQgbnNTdHlsZUNvb3JkOjpHZXRVbmlvblZhbHVlKG5z
U3R5bGVVbmlvbiYgYVZhbHVlKSBjb25zdAp7CiAgbnNDUlQ6Om1lbWNweSgmYVZhbHVlLCAmbVZh
bHVlLCBzaXplb2YobnNTdHlsZVVuaW9uKSk7Cn0KCgoKCmlubGluZSBQUkJvb2wgbnNTdHlsZVNp
ZGVzOjpvcGVyYXRvciE9KGNvbnN0IG5zU3R5bGVTaWRlcyYgYU90aGVyKSBjb25zdAp7CiAgcmV0
dXJuIFBSQm9vbCghICgoKnRoaXMpID09IGFPdGhlcikpOwp9CgppbmxpbmUgbnNTdHlsZVVuaXQg
bnNTdHlsZVNpZGVzOjpHZXRMZWZ0VW5pdCh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIChuc1N0eWxl
VW5pdCltTGVmdFVuaXQ7Cn0KCmlubGluZSBuc1N0eWxlVW5pdCBuc1N0eWxlU2lkZXM6OkdldFRv
cFVuaXQodm9pZCkgY29uc3QKewogIHJldHVybiAobnNTdHlsZVVuaXQpbVRvcFVuaXQ7Cn0KCmlu
bGluZSBuc1N0eWxlVW5pdCBuc1N0eWxlU2lkZXM6OkdldFJpZ2h0VW5pdCh2b2lkKSBjb25zdAp7
CiAgcmV0dXJuIChuc1N0eWxlVW5pdCltUmlnaHRVbml0Owp9CgppbmxpbmUgbnNTdHlsZVVuaXQg
bnNTdHlsZVNpZGVzOjpHZXRCb3R0b21Vbml0KHZvaWQpIGNvbnN0CnsKICByZXR1cm4gKG5zU3R5
bGVVbml0KW1Cb3R0b21Vbml0Owp9CgppbmxpbmUgbnNTdHlsZUNvb3JkJiBuc1N0eWxlU2lkZXM6
OkdldExlZnQobnNTdHlsZUNvb3JkJiBhQ29vcmQpIGNvbnN0CnsKICBhQ29vcmQuU2V0VW5pb25W
YWx1ZShtTGVmdFZhbHVlLCAobnNTdHlsZVVuaXQpbUxlZnRVbml0KTsKICByZXR1cm4gYUNvb3Jk
Owp9CgppbmxpbmUgbnNTdHlsZUNvb3JkJiBuc1N0eWxlU2lkZXM6OkdldFRvcChuc1N0eWxlQ29v
cmQmIGFDb29yZCkgY29uc3QKewogIGFDb29yZC5TZXRVbmlvblZhbHVlKG1Ub3BWYWx1ZSwgKG5z
U3R5bGVVbml0KW1Ub3BVbml0KTsKICByZXR1cm4gYUNvb3JkOwp9CgppbmxpbmUgbnNTdHlsZUNv
b3JkJiBuc1N0eWxlU2lkZXM6OkdldFJpZ2h0KG5zU3R5bGVDb29yZCYgYUNvb3JkKSBjb25zdAp7
CiAgYUNvb3JkLlNldFVuaW9uVmFsdWUobVJpZ2h0VmFsdWUsIChuc1N0eWxlVW5pdCltUmlnaHRV
bml0KTsKICByZXR1cm4gYUNvb3JkOwp9CgppbmxpbmUgbnNTdHlsZUNvb3JkJiBuc1N0eWxlU2lk
ZXM6OkdldEJvdHRvbShuc1N0eWxlQ29vcmQmIGFDb29yZCkgY29uc3QKewogIGFDb29yZC5TZXRV
bmlvblZhbHVlKG1Cb3R0b21WYWx1ZSwgKG5zU3R5bGVVbml0KW1Cb3R0b21Vbml0KTsKICByZXR1
cm4gYUNvb3JkOwp9CgppbmxpbmUgdm9pZCBuc1N0eWxlU2lkZXM6OlNldExlZnQoY29uc3QgbnNT
dHlsZUNvb3JkJiBhQ29vcmQpCnsKICBtTGVmdFVuaXQgPSBhQ29vcmQuR2V0VW5pdCgpOwogIGFD
b29yZC5HZXRVbmlvblZhbHVlKG1MZWZ0VmFsdWUpOwp9CgppbmxpbmUgdm9pZCBuc1N0eWxlU2lk
ZXM6OlNldFRvcChjb25zdCBuc1N0eWxlQ29vcmQmIGFDb29yZCkKewogIG1Ub3BVbml0ID0gYUNv
b3JkLkdldFVuaXQoKTsKICBhQ29vcmQuR2V0VW5pb25WYWx1ZShtVG9wVmFsdWUpOwp9Cgppbmxp
bmUgdm9pZCBuc1N0eWxlU2lkZXM6OlNldFJpZ2h0KGNvbnN0IG5zU3R5bGVDb29yZCYgYUNvb3Jk
KQp7CiAgbVJpZ2h0VW5pdCA9IGFDb29yZC5HZXRVbml0KCk7CiAgYUNvb3JkLkdldFVuaW9uVmFs
dWUobVJpZ2h0VmFsdWUpOwp9CgppbmxpbmUgdm9pZCBuc1N0eWxlU2lkZXM6OlNldEJvdHRvbShj
b25zdCBuc1N0eWxlQ29vcmQmIGFDb29yZCkKewogIG1Cb3R0b21Vbml0ID0gYUNvb3JkLkdldFVu
aXQoKTsKICBhQ29vcmQuR2V0VW5pb25WYWx1ZShtQm90dG9tVmFsdWUpOwp9CiMgMzIgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlU3RydWN0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNTdHlsZVN0cnVjdC5oIiAxCiMgMzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc1N0eWxlU3RydWN0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNT
dHlsZUNvbnN0cy5oIiAxCiMgMzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlU3Ry
dWN0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVTZXQuaCIgMQoj
IDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVTZXQuaCIKIyAxICIvdXNyL2xv
Y2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3Rk
aW8uaCIgMSAzCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZVNldC5oIiAy
CiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAyNyAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlU2V0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNsYXlvdXQuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJU3R5bGVTZXQuaCIgMgoKY2xhc3MgbnNJQXRvbTsKY2xhc3MgbnNJU3R5bGVSdWxlOwpjbGFz
cyBuc0lTdHlsZVNoZWV0OwpjbGFzcyBuc0lTdHlsZUNvbnRleHQ7CmNsYXNzIG5zSVN0eWxlUnVs
ZVN1cHBsaWVyOwpjbGFzcyBuc0lQcmVzQ29udGV4dDsKY2xhc3MgbnNJQ29udGVudDsKY2xhc3Mg
bnNJRnJhbWU7CmNsYXNzIG5zSURvY3VtZW50OwpjbGFzcyBuc0lGcmFtZU1hbmFnZXI7CmNsYXNz
IG5zSVN1cHBvcnRzQXJyYXk7CmNsYXNzIG5zSVJ1bGVOb2RlOwpzdHJ1Y3QgbnNGaW5kRnJhbWVI
aW50OwoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNWb2lkQXJyYXkuaCIgMQojIDQ0
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVTZXQuaCIgMgpjbGFzcyBuc0lTaXpl
T2ZIYW5kbGVyOwoKY2xhc3MgbnNJQ1NTUHNldWRvQ29tcGFyYXRvcjsKCgoKCgpjbGFzcyBuc0lT
dHlsZVNldCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJ
SUQmIEdldElJRCgpIHsgc3RhdGljIG5zSUlEIGlpZCA9IHsweGU1OTM5NmIwLCAweGIyNDQsIDB4
MTFkMSwgezB4ODAsIDB4MzEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4MTUsIDB4OWIsIDB4NWF9fTsg
cmV0dXJuIGlpZDsgfQoKCgogIHZpcnR1YWwgdm9pZCBBcHBlbmRPdmVycmlkZVN0eWxlU2hlZXQo
bnNJU3R5bGVTaGVldCogYVNoZWV0KSA9IDA7CiAgdmlydHVhbCB2b2lkIEluc2VydE92ZXJyaWRl
U3R5bGVTaGVldEFmdGVyKG5zSVN0eWxlU2hlZXQqIGFTaGVldCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVTaGVldCogYUFmdGVyU2hlZXQpID0g
MDsKICB2aXJ0dWFsIHZvaWQgSW5zZXJ0T3ZlcnJpZGVTdHlsZVNoZWV0QmVmb3JlKG5zSVN0eWxl
U2hlZXQqIGFTaGVldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSVN0eWxlU2hlZXQqIGFCZWZvcmVTaGVldCkgPSAwOwogIHZpcnR1YWwgdm9pZCBSZW1v
dmVPdmVycmlkZVN0eWxlU2hlZXQobnNJU3R5bGVTaGVldCogYVNoZWV0KSA9IDA7CiAgdmlydHVh
bCBQUkludDMyIEdldE51bWJlck9mT3ZlcnJpZGVTdHlsZVNoZWV0cygpID0gMDsKICB2aXJ0dWFs
IG5zSVN0eWxlU2hlZXQqIEdldE92ZXJyaWRlU3R5bGVTaGVldEF0KFBSSW50MzIgYUluZGV4KSA9
IDA7CgoKICB2aXJ0dWFsIHZvaWQgQWRkRG9jU3R5bGVTaGVldChuc0lTdHlsZVNoZWV0KiBhU2hl
ZXQsIG5zSURvY3VtZW50KiBhRG9jdW1lbnQpID0gMDsKICB2aXJ0dWFsIHZvaWQgUmVtb3ZlRG9j
U3R5bGVTaGVldChuc0lTdHlsZVNoZWV0KiBhU2hlZXQpID0gMDsKICB2aXJ0dWFsIFBSSW50MzIg
R2V0TnVtYmVyT2ZEb2NTdHlsZVNoZWV0cygpID0gMDsKICB2aXJ0dWFsIG5zSVN0eWxlU2hlZXQq
IEdldERvY1N0eWxlU2hlZXRBdChQUkludDMyIGFJbmRleCkgPSAwOwoKICB2aXJ0dWFsIHZvaWQg
QXBwZW5kQmFja3N0b3BTdHlsZVNoZWV0KG5zSVN0eWxlU2hlZXQqIGFTaGVldCkgPSAwOwogIHZp
cnR1YWwgdm9pZCBJbnNlcnRCYWNrc3RvcFN0eWxlU2hlZXRBZnRlcihuc0lTdHlsZVNoZWV0KiBh
U2hlZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0
eWxlU2hlZXQqIGFBZnRlclNoZWV0KSA9IDA7CiAgdmlydHVhbCB2b2lkIEluc2VydEJhY2tzdG9w
U3R5bGVTaGVldEJlZm9yZShuc0lTdHlsZVNoZWV0KiBhU2hlZXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZVNoZWV0KiBhQmVmb3JlU2hlZXQp
ID0gMDsKICB2aXJ0dWFsIHZvaWQgUmVtb3ZlQmFja3N0b3BTdHlsZVNoZWV0KG5zSVN0eWxlU2hl
ZXQqIGFTaGVldCkgPSAwOwogIHZpcnR1YWwgUFJJbnQzMiBHZXROdW1iZXJPZkJhY2tzdG9wU3R5
bGVTaGVldHMoKSA9IDA7CiAgdmlydHVhbCBuc0lTdHlsZVNoZWV0KiBHZXRCYWNrc3RvcFN0eWxl
U2hlZXRBdChQUkludDMyIGFJbmRleCkgPSAwOwogIHZpcnR1YWwgdm9pZCBSZXBsYWNlQmFja3N0
b3BTdHlsZVNoZWV0cyhuc0lTdXBwb3J0c0FycmF5KiBhTmV3U2hlZXRzKSA9IDA7CgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0UnVsZVRyZWUobnNJUnVsZU5vZGUqKiBhUmVzdWx0KSA9IDA7CgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBFbmFibGVRdWlya1N0eWxlU2hlZXQoUFJCb29sIGFFbmFibGUpID0g
MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTm90aWZ5U3R5bGVTaGVldFN0YXRlQ2hhbmdlZChQUkJv
b2wgYURpc2FibGVkKSA9IDA7CgoKICB2aXJ0dWFsIG5zSVN0eWxlQ29udGV4dCogUmVzb2x2ZVN0
eWxlRm9yKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVBhcmVudENv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wg
YUZvcmNlVW5pcXVlID0gMCkgPSAwOwoKCiAgdmlydHVhbCBuc0lTdHlsZUNvbnRleHQqIFJlc29s
dmVQc2V1ZG9TdHlsZUZvcihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYVBhcmVu
dENvbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lBdG9tKiBhUHNldWRvVGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhUGFyZW50Q29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhRm9yY2VVbmlx
dWUgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJQ1NTUHNldWRvQ29tcGFyYXRvciogYUNvbXBhcmF0b3IgPSAwKSA9IDA7CgoKCgogIHZpcnR1
YWwgbnNJU3R5bGVDb250ZXh0KiBQcm9iZVBzZXVkb1N0eWxlRm9yKG5zSVByZXNDb250ZXh0KiBh
UHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJQ29udGVudCogYVBhcmVudENvbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYVBzZXVkb1RhZywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqIGFQYXJlbnRD
b250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
Qm9vbCBhRm9yY2VVbmlxdWUgPSAwKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgU2h1dGRvd24o
KT0wOwoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVQYXJlbnRTdHlsZUNvbnRleHQobnNJUHJlc0Nv
bnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lTdHlsZUNvbnRleHQqIGFTdHlsZUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhTmV3UGFyZW50Q29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqKiBhTmV3U3R5bGVDb250ZXh0
KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEhhc1N0YXRlRGVwZW5kZW50U3R5bGUobnNJUHJl
c0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSUNvbnRlbnQqIGFDb250ZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnN0
cnVjdFJvb3RGcmFtZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhRG9jRWxlbWVudCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqJiBhRnJhbWVTdWJUcmVlKSA9IDA7CgoKCgog
IHZpcnR1YWwgbnNyZXN1bHQgUmVjb25zdHJ1Y3REb2NFbGVtZW50SGllcmFyY2h5KG5zSVByZXND
b250ZXh0KiBhUHJlc0NvbnRleHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGVudEFw
cGVuZGVkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJQ29udGVudCogYUNvbnRhaW5lciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUkludDMyIGFOZXdJbmRleEluQ29udGFpbmVyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs
dCBDb250ZW50SW5zZXJ0ZWQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ29udGFpbmVyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDaGlsZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQUkludDMyIGFJbmRleEluQ29udGFpbmVyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs
dCBDb250ZW50UmVwbGFjZWQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ29udGFpbmVyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFPbGRDaGlsZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lDb250ZW50KiBhTmV3Q2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJJbnQzMiBhSW5kZXhJbkNvbnRhaW5lcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg
Q29udGVudFJlbW92ZWQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDb250YWluZXIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lDb250ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUkludDMyIGFJbmRleEluQ29udGFpbmVyKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgQ29u
dGVudENoYW5nZWQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJU3VwcG9ydHMqIGFTdWJDb250ZW50KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBD
b250ZW50U3RhdGVzQ2hhbmdlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNvbnRlbnQxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNvbnRlbnQyKSA9IDA7CiAg
dmlydHVhbCBuc3Jlc3VsdCBBdHRyaWJ1dGVDaGFuZ2VkKG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDaGlsZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhTmFtZVNwYWNlSUQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYUhpbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1
bHQgU3R5bGVSdWxlQ2hhbmdlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZVNoZWV0KiBhU3R5bGVTaGVldCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVSdWxlKiBhU3R5bGVSdWxlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFIaW50KSA9IDA7CiAgdmlydHVhbCBuc3Jl
c3VsdCBTdHlsZVJ1bGVBZGRlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVTaGVldCogYVN0eWxlU2hlZXQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZVJ1bGUqIGFTdHlsZVJ1bGUpID0gMDsKICB2aXJ0
dWFsIG5zcmVzdWx0IFN0eWxlUnVsZVJlbW92ZWQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVTaGVldCogYVN0eWxlU2hl
ZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlUnVsZSogYVN0eWxlUnVs
ZSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2FudFJlbmRlclJlcGxhY2VkRWxlbWVu
dChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IENyZWF0ZUNvbnRpbnVpbmdGcmFtZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFQYXJlbnRGcmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSoqIGFDb250aW51aW5nRnJhbWUp
ID0gMDsKIyAyMDUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZVNldC5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgRmluZFByaW1hcnlGcmFtZUZvcihuc0lQcmVzQ29udGV4dCogYVByZXND
b250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZU1hbmFnZXIq
IGFGcmFtZU1hbmFnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRl
bnQqIGFDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSoq
IGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGaW5kRnJhbWVIaW50
KiBhSGludD0wKSA9IDA7CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTdHlsZVJ1bGVTdXBwbGll
cihuc0lTdHlsZVJ1bGVTdXBwbGllciogYVN1cHBsaWVyKT0wOwogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0U3R5bGVSdWxlU3VwcGxpZXIobnNJU3R5bGVSdWxlU3VwcGxpZXIqKiBhU3VwcGxpZXIpPTA7
CgogIHZpcnR1YWwgdm9pZCBMaXN0KEZJTEUqIG91dCA9IHN0ZG91dCwgUFJJbnQzMiBhSW5kZW50
ID0gMCkgPSAwOwogIHZpcnR1YWwgdm9pZCBMaXN0Q29udGV4dHMobnNJU3R5bGVDb250ZXh0KiBh
Um9vdENvbnRleHQsIEZJTEUqIG91dCA9IHN0ZG91dCwgUFJJbnQzMiBhSW5kZW50ID0gMCkgPSAw
OwoKICB2aXJ0dWFsIHZvaWQgU2l6ZU9mKG5zSVNpemVPZkhhbmRsZXIgKmFTaXplb2ZIYW5kbGVy
LCBQUlVpbnQzMiAmYVNpemUpID0gMDsKICB2aXJ0dWFsIHZvaWQgUmVzZXRVbmlxdWVTdHlsZUl0
ZW1zKHZvaWQpID0gMDsKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEF0dHJpYnV0ZUFmZmVjdHNTdHls
ZShuc0lBdG9tICphQXR0cmlidXRlLCBuc0lDb250ZW50ICphQ29udGVudCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgJmFBZmZlY3RzKSA9IDA7Cn07CgpleHRlcm4g
bnNyZXN1bHQKICBOU19OZXdTdHlsZVNldChuc0lTdHlsZVNldCoqIGFJbnN0YW5jZVB0clJlc3Vs
dCk7CgoKY2xhc3MgbnNVbmlxdWVTdHlsZUl0ZW1zIDogcHJpdmF0ZSBuc1ZvaWRBcnJheQp7CnB1
YmxpYyA6CgogIHN0YXRpYyBuc1VuaXF1ZVN0eWxlSXRlbXMgKkdldFVuaXF1ZVN0eWxlSXRlbXMo
IHZvaWQgKXsKICAgIGlmKG1JbnN0YW5jZSA9PSAwKXsKCgoKICAgICAgbmV3IG5zVW5pcXVlU3R5
bGVJdGVtczsKCiAgICAgIHt9OwoKCgogICAgfQogICAgcmV0dXJuIG1JbnN0YW5jZTsKICB9Cgog
IHZvaWQgKkdldEl0ZW0odm9pZCAqYVB0cil7CiAgICBQUkludDMyIGluZGV4ID0gbnNWb2lkQXJy
YXk6OkluZGV4T2YoYVB0cik7CiAgICBpZiggaW5kZXggIT0gLTEpewogICAgICByZXR1cm4gbnNW
b2lkQXJyYXk6OkVsZW1lbnRBdChpbmRleCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gMDsK
ICAgIH0KICB9CgogIFBSQm9vbCBBZGRJdGVtKHZvaWQgKmFQdHIpewogICAgaWYobnNWb2lkQXJy
YXk6OkluZGV4T2YoYVB0cikgPT0gLTEpewogICAgICByZXR1cm4gbnNWb2lkQXJyYXk6OkFwcGVu
ZEVsZW1lbnQoYVB0cik7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gMDsKICAgIH0KICB9Cgog
IFBSQm9vbCBSZW1vdmVJdGVtKHZvaWQgKmFQdHIpewogICAgcmV0dXJuIG5zVm9pZEFycmF5OjpS
ZW1vdmVFbGVtZW50KGFQdHIpOwogIH0KCiAgUFJJbnQzMiBDb3VudCh2b2lkKXsKICAgIHJldHVy
biBuc1ZvaWRBcnJheTo6Q291bnQoKTsKICB9CgogIHZvaWQgQ2xlYXIodm9pZCl7CiAgICBuc1Zv
aWRBcnJheTo6Q2xlYXIoKTsKICB9CnByb3RlY3RlZDoKCiAgbnNVbmlxdWVTdHlsZUl0ZW1zKCBj
b25zdCBuc1VuaXF1ZVN0eWxlSXRlbXMmIHNyYyk7CiAgbnNVbmlxdWVTdHlsZUl0ZW1zJiBvcGVy
YXRvciA9KGNvbnN0IG5zVW5pcXVlU3R5bGVJdGVtcyYgc3JjKTsKCgogIG5zVW5pcXVlU3R5bGVJ
dGVtcyh2b2lkKSA6IG5zVm9pZEFycmF5KCl7CiAgICB7fTsKICAgIG1JbnN0YW5jZT10aGlzOwog
IH0KCiAgc3RhdGljIG5zVW5pcXVlU3R5bGVJdGVtcyAqbUluc3RhbmNlOwp9OwojIDMwMSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlU2V0LmgiCnN0cnVjdCBuc0ZpbmRGcmFtZUhp
bnQKewogIG5zSUZyYW1lICptUHJpbWFyeUZyYW1lRm9yUHJldlNpYmxpbmc7CiAgbnNGaW5kRnJh
bWVIaW50KCkgewogICAgbVByaW1hcnlGcmFtZUZvclByZXZTaWJsaW5nID0gMDsKICB9Owp9Owoj
IDM1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVN0cnVjdC5oIiAyCiMgMSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNDb250ZXh0LmgiIDEKIyAyNiAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVByZXNDb250ZXh0LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zbGF5b3V0LmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVBy
ZXNDb250ZXh0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMu
aCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc0NvbnRleHQuaCIgMgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1JlY3QuaCIgMQojIDI5ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJUHJlc0NvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0NvbG9yLmgiIDEKIyAzMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVBy
ZXNDb250ZXh0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWVJbWFn
ZUxvYWRlci5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZUltYWdl
TG9hZGVyLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zbGF5b3V0LmgiIDEKIyAy
NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lSW1hZ2VMb2FkZXIuaCIgMgojIDEg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjcgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZUltYWdlTG9hZGVyLmgiIDIKIyAxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNDb2xvci5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lGcmFtZUltYWdlTG9hZGVyLmgiIDIKCmNsYXNzIG5zSUZyYW1lOwpjbGFzcyBuc0lJbWFn
ZTsKY2xhc3MgbnNJSW1hZ2VHcm91cDsKY2xhc3MgbnNJUHJlc0NvbnRleHQ7CmNsYXNzIG5zU3Ry
aW5nOwpzdHJ1Y3QgbnNTaXplOwoKCgoKCmVudW0gbnNJbWFnZUFuaW1hdGlvbiB7CiAgICBlSW1h
Z2VBbmltYXRpb25fTm9ybWFsID0gMCwKICAgIGVJbWFnZUFuaW1hdGlvbl9Ob25lID0gMSwKICAg
IGVJbWFnZUFuaW1hdGlvbl9Mb29wT25jZSA9IDIKfTsKCgoKCmNsYXNzIG5zSUZyYW1lSW1hZ2VM
b2FkZXI7CnR5cGVkZWYgbnNyZXN1bHQgKCpuc0lGcmFtZUltYWdlTG9hZGVyQ0IpKG5zSVByZXND
b250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSUZyYW1lSW1hZ2VMb2FkZXIqIGFMb2FkZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGFDbG9zdXJlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhU3RhdHVzKTsKCgoKCgoKCmNsYXNz
IG5zSUZyYW1lSW1hZ2VMb2FkZXIgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6CiAgc3Rh
dGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIG5zSUlEIGlpZCA9IHsgMHhhNmNmOTBl
YywgMHgxNWIzLCAweDExZDIsezB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4
ZGQsIDB4MzJ9fTsgcmV0dXJuIGlpZDt9CgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0lQcmVz
Q29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICBuc0lJbWFnZUdyb3VwKiBh
R3JvdXAsCiAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU3RyaW5nJiBhVVJMLAogICAgICAgICAg
ICAgICAgICBjb25zdCBuc2NvbG9yKiBhQmFja2dyb3VuZENvbG9yLAogICAgICAgICAgICAgICAg
ICBjb25zdCBuc1NpemUqIGFEZXNpcmVkU2l6ZSwKICAgICAgICAgICAgICAgICAgbnNJRnJhbWUq
IGFGcmFtZSwKICAgICAgICAgICAgICAgICAgbnNJbWFnZUFuaW1hdGlvbiBhQW5pbWF0aW9uTW9k
ZSwKICAgICAgICAgICAgICAgICAgbnNJRnJhbWVJbWFnZUxvYWRlckNCIGFDYWxsQmFjaywKICAg
ICAgICAgICAgICAgICAgdm9pZCogYUNsb3N1cmUsIHZvaWQqIGFLZXkpID0gMDsKCiAgdmlydHVh
bCBuc3Jlc3VsdCBTdG9wSW1hZ2VMb2FkKFBSQm9vbCBhU3RvcENocm9tZSA9IDEpID0gMDsKCiAg
dmlydHVhbCBuc3Jlc3VsdCBBYm9ydEltYWdlTG9hZCgpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBJc1NhbWVJbWFnZVJlcXVlc3QoY29uc3QgbnNTdHJpbmcmIGFVUkwsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgbnNjb2xvciogYUJhY2tncm91bmRDb2xvciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1NpemUqIGFEZXNpcmVkU2l6ZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wqIGFSZXN1bHQpID0gMDsKCiAgdmly
dHVhbCBuc3Jlc3VsdCBBZGRGcmFtZShuc0lGcmFtZSogYUZyYW1lLCBuc0lGcmFtZUltYWdlTG9h
ZGVyQ0IgYUNhbGxCYWNrLAogICAgICAgICAgICAgICAgICAgICAgdm9pZCogYUNsb3N1cmUsIHZv
aWQqIGFLZXkpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVGcmFtZSh2b2lkKiBhS2V5
KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgU2FmZVRvRGVzdHJveShQUkJvb2wqIGFSZXN1bHQp
ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRVUkwobnNTdHJpbmcmIGFSZXN1bHQpID0gMDsK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByZXNDb250ZXh0KG5zSVByZXNDb250ZXh0KiogYVByZXND
b250ZXh0KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW1hZ2UobnNJSW1hZ2UqKiBhUmVz
dWx0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNpemUobnNTaXplJiBhUmVzdWx0KSA9
IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW1hZ2VMb2FkU3RhdHVzKFBSVWludDMyKiBhTG9h
ZFN0YXR1cykgPSAwOwoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW50cmluc2ljU2l6ZShuc1Np
emUmIGFSZXN1bHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hdHVyYWxJbWFnZVNpemUo
UFJVaW50MzIqIG5hdHVyYWxXaWR0aCwgUFJVaW50MzIgKm5hdHVyYWxIZWlnaHQpID0gMDsKfTsK
IyAzMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNDb250ZXh0LmgiIDIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTGFuZ3VhZ2VBdG9tLmgiIDEKIyAyOSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUxhbmd1YWdlQXRvbS5oIgpjbGFzcyBuc0lMYW5ndWFnZUF0
b20gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQm
IEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkxMWUsIDB4MTViMywg
MHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIg
fX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYW5ndWFnZShQUlVuaWNo
YXIgKiAqYUxhbmd1YWdlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExhbmd1YWdlR3Jv
dXAobnNJQXRvbSAqICphTGFuZ3VhZ2VHcm91cCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBM
YW5ndWFnZUlzKGNvbnN0IFBSVW5pY2hhciAqYUxhbmd1YWdlLCBQUkJvb2wgKl9yZXR2YWwpID0g
MDsKCn07CiMgMzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzQ29udGV4dC5oIiAy
CgpjbGFzcyBuc0JpZGlQcmVzVXRpbHM7CgoKc3RydWN0IG5zRm9udDsKCmNsYXNzIG5zSUNvbnRl
bnQ7CmNsYXNzIG5zSURvY3VtZW50OwpjbGFzcyBuc0lEZXZpY2VDb250ZXh0OwpjbGFzcyBuc0lG
b250TWV0cmljczsKY2xhc3MgbnNJRnJhbWU7CmNsYXNzIG5zSUltYWdlOwpjbGFzcyBuc0lJbWFn
ZUdyb3VwOwpjbGFzcyBuc0lMaW5rSGFuZGxlcjsKY2xhc3MgbnNJUHJlc1NoZWxsOwpjbGFzcyBu
c0lQcmVmOwpjbGFzcyBuc0lTdHlsZUNvbnRleHQ7CmNsYXNzIG5zSUF0b207CmNsYXNzIG5zU3Ry
aW5nOwpjbGFzcyBuc0lFdmVudFN0YXRlTWFuYWdlcjsKY2xhc3MgbnNJVVJJOwpjbGFzcyBuc0lM
b29rQW5kRmVlbDsKY2xhc3MgbnNJQ1NTUHNldWRvQ29tcGFyYXRvcjsKIyA2NCAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVByZXNDb250ZXh0LmgiCmVudW0gbnNDb21wYXRpYmlsaXR5IHsK
ICBlQ29tcGF0aWJpbGl0eV9TdGFuZGFyZCA9IDEsCiAgZUNvbXBhdGliaWxpdHlfTmF2UXVpcmtz
ID0gMgp9OwoKZW51bSBuc1dpZGdldFJlbmRlcmluZyB7CiAgZVdpZGdldFJlbmRlcmluZ19OYXRp
dmUgPSAxLAogIGVXaWRnZXRSZW5kZXJpbmdfR2Z4ID0gMiwKICBlV2lkZ2V0UmVuZGVyaW5nX1Bh
cnRpYWxHZnggPSAzCn07CgplbnVtIG5zV2lkZ2V0VHlwZSB7CiAgZVdpZGdldFR5cGVfQnV0dG9u
ID0gMSwKICBlV2lkZ2V0VHlwZV9DaGVja2JveCA9IDIsCiAgZVdpZGdldFR5cGVfUmFkaW8gPSAz
LAogIGVXaWRnZXRUeXBlX1RleHQgPSA0Cn07CgplbnVtIG5zTGFuZ3VhZ2VTcGVjaWZpY1RyYW5z
Zm9ybVR5cGUgewogIGVMYW5ndWFnZVNwZWNpZmljVHJhbnNmb3JtVHlwZV9Vbmtub3duID0gLTEs
CiAgZUxhbmd1YWdlU3BlY2lmaWNUcmFuc2Zvcm1UeXBlX05vbmUgPSAwLAogIGVMYW5ndWFnZVNw
ZWNpZmljVHJhbnNmb3JtVHlwZV9KYXBhbmVzZSwKICBlTGFuZ3VhZ2VTcGVjaWZpY1RyYW5zZm9y
bVR5cGVfS29yZWFuCn07CgoKY29uc3QgUFJVaW50MzIga1ByZXNDb250ZXh0X1VzZURvY3VtZW50
Q29sb3JzID0gMHgwMTsKY29uc3QgUFJVaW50MzIga1ByZXNDb250ZXh0X1VzZURvY3VtZW50Rm9u
dHMgPSAweDAyOwpjb25zdCBQUlVpbnQzMiBrUHJlc0NvbnRleHRfVW5kZXJsaW5lTGlua3MgPSAw
eDAzOwoKCgpjbGFzcyBuc0lQcmVzQ29udGV4dCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1Ymxp
YzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHsgc3RhdGljIG5zSUlEIGlpZCA9IHsg
MHgwYTVkMTJlMCwgMHg5NDRlLCAweDExZDEsIHsweDkzLCAweDIzLCAweDAwLCAweDgwLCAweDVm
LCAweDhhLCAweGRkLCAweDMyfSB9OyByZXR1cm4gaWlkOyB9CgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgSW5pdChuc0lEZXZpY2VDb250ZXh0KiBhRGV2aWNlQ29udGV4dCkgPSAwOwoKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBTdG9wKFBSQm9vbCBhU3RvcENocm9tZSA9IDEpID0gMDsKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgU2V0U2hlbGwobnNJUHJlc1NoZWxsKiBhU2hlbGwpID0gMDsKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRTaGVsbChuc0lQcmVzU2hlbGwqKiBhUmVzdWx0KSA9IDA7CgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29tcGF0aWJpbGl0eU1vZGUobnNDb21wYXRpYmlsaXR5
KiBhTW9kZVJlc3VsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q29tcGF0aWJpbGl0eU1v
ZGUobnNDb21wYXRpYmlsaXR5IGFNb2RlKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
V2lkZ2V0UmVuZGVyaW5nTW9kZShuc1dpZGdldFJlbmRlcmluZyogYU1vZGVSZXN1bHQpID0gMDsK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFdpZGdldFJlbmRlcmluZ01vZGUobnNXaWRnZXRSZW5kZXJp
bmcgYU1vZGUpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbWFnZUFuaW1hdGlvbk1v
ZGUobnNJbWFnZUFuaW1hdGlvbiogYU1vZGVSZXN1bHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0
IFNldEltYWdlQW5pbWF0aW9uTW9kZShuc0ltYWdlQW5pbWF0aW9uIGFNb2RlKSA9IDA7CgoKCgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0TG9va0FuZEZlZWwobnNJTG9va0FuZEZlZWwqKiBhTG9va0Fu
ZEZlZWwpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCYXNlVVJMKG5zSVVSSSoqIGFV
UkxSZXN1bHQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNZWRpdW0obnNJQXRvbSoq
IGFNZWRpdW1SZXN1bHQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1hcFN0eWxlQW5k
UmVmbG93KHZvaWQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzb2x2ZVN0eWxlQ29u
dGV4dEZvcihuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhUGFyZW50Q29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFGb3JjZVVuaXF1ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiogYVJlc3VsdCkgPSAwOwoKCgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzb2x2ZVBzZXVkb1N0eWxlQ29udGV4dEZvcihuc0lDb250
ZW50KiBhUGFyZW50Q29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJQXRvbSogYVBzZXVkb1RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhUGFyZW50Q29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFGb3JjZVVuaXF1ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiogYVJl
c3VsdCkgPSAwOwojIDE4OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNDb250ZXh0
LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXNvbHZlUHNldWRvU3R5bGVXaXRoQ29tcGFyYXRvcihu
c0lDb250ZW50KiBhUGFyZW50Q29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSUF0b20qIGFQc2V1ZG9UYWcsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqIGFQYXJlbnRDb250ZXh0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFG
b3JjZVVuaXF1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSUNTU1BzZXVkb0NvbXBhcmF0b3IqIGFDb21wYXJhdG9yLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiogYVJlc3VsdCkgPSAw
OwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFByb2JlUHNldWRvU3R5bGVDb250ZXh0Rm9yKG5z
SUNvbnRlbnQqIGFQYXJlbnRDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJQXRvbSogYVBzZXVkb1RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVBhcmVudENvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYUZvcmNlVW5pcXVlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiogYVJlc3Vs
dCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZVBhcmVudFN0eWxlQ29udGV4dChuc0lG
cmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVD
b250ZXh0KiBhTmV3UGFyZW50Q29udGV4dCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBbGxv
Y2F0ZUZyb21TaGVsbChzaXplX3QgYVNpemUsIHZvaWQqKiBhUmVzdWx0KSA9IDA7CiAgdmlydHVh
bCBuc3Jlc3VsdCBGcmVlVG9TaGVsbChzaXplX3QgYVNpemUsIHZvaWQqIGFGcmVlQ2h1bmspID0g
MDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNZXRyaWNzRm9yKGNvbnN0IG5zRm9udCYgYUZv
bnQsIG5zSUZvbnRNZXRyaWNzKiogYVJlc3VsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXREZWZhdWx0Rm9udChuc0ZvbnQmIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBT
ZXREZWZhdWx0Rm9udChjb25zdCBuc0ZvbnQmIGFGb250KSA9IDA7CiAgdmlydHVhbCBjb25zdCBu
c0ZvbnQmIEdldERlZmF1bHRGb250RGVwcmVjYXRlZCgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0RGVmYXVsdEZpeGVkRm9udChuc0ZvbnQmIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBu
c3Jlc3VsdCBTZXREZWZhdWx0Rml4ZWRGb250KGNvbnN0IG5zRm9udCYgYUZvbnQpID0gMDsKICB2
aXJ0dWFsIGNvbnN0IG5zRm9udCYgR2V0RGVmYXVsdEZpeGVkRm9udERlcHJlY2F0ZWQoKSA9IDA7
CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDYWNoZWRCb29sUHJlZihQUlVpbnQzMiBwcmVm
VHlwZSwgUFJCb29sICZhVmFsdWUpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb250
U2NhbGVyKFBSSW50MzIqIGFSZXN1bHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZvbnRT
Y2FsZXIoUFJJbnQzMiBhU2NhbGVyKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVm
YXVsdENvbG9yKG5zY29sb3IqIGFDb2xvcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVm
YXVsdEJhY2tncm91bmRDb2xvcihuc2NvbG9yKiBhQ29sb3IpID0gMDsKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldERlZmF1bHRCYWNrZ3JvdW5kSW1hZ2UobnNTdHJpbmcmIGFJbWFnZSkgPSAwOwogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0RGVmYXVsdEJhY2tncm91bmRJbWFnZVJlcGVhdChQUlVpbnQ4KiBh
UmVwZWF0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZWZhdWx0QmFja2dyb3VuZEltYWdl
T2Zmc2V0KG5zY29vcmQqIGFYLCBuc2Nvb3JkKiBhWSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0RGVmYXVsdEJhY2tncm91bmRJbWFnZUF0dGFjaG1lbnQoUFJVaW50OCogYVJlcGVhdCkgPSAw
OwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVmYXVsdExpbmtDb2xvcihuc2NvbG9yKiBhQ29sb3Ip
ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmF1bHRWaXNpdGVkTGlua0NvbG9yKG5zY29s
b3IqIGFDb2xvcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9jdXNCYWNrZ3JvdW5kQ29s
b3IobnNjb2xvciogYUNvbG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb2N1c1RleHRD
b2xvcihuc2NvbG9yKiBhQ29sb3IpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFVzZUZvY3Vz
Q29sb3JzKFBSQm9vbCYgdXNlRm9jdXNDb2xvcnMpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dEZvY3VzUmluZ1dpZHRoKFBSVWludDggKmZvY3VzUmluZ1dpZHRoKSA9IDA7CiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRGb2N1c1JpbmdPbkFueXRoaW5nKFBSQm9vbCYgZm9jdXNSaW5nT25Bbnl0aGlu
ZykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0Q29sb3IobnNjb2xvciBhQ29s
b3IpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERlZmF1bHRCYWNrZ3JvdW5kQ29sb3IobnNj
b2xvciBhQ29sb3IpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERlZmF1bHRCYWNrZ3JvdW5k
SW1hZ2UoY29uc3QgbnNTdHJpbmcmIGFJbWFnZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
RGVmYXVsdEJhY2tncm91bmRJbWFnZVJlcGVhdChQUlVpbnQ4IGFSZXBlYXQpID0gMDsKICB2aXJ0
dWFsIG5zcmVzdWx0IFNldERlZmF1bHRCYWNrZ3JvdW5kSW1hZ2VPZmZzZXQobnNjb29yZCBhWCwg
bnNjb29yZCBhWSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGVmYXVsdEJhY2tncm91bmRJ
bWFnZUF0dGFjaG1lbnQoUFJVaW50OCBhUmVwZWF0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT
ZXREZWZhdWx0TGlua0NvbG9yKG5zY29sb3IgYUNvbG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs
dCBTZXREZWZhdWx0VmlzaXRlZExpbmtDb2xvcihuc2NvbG9yIGFDb2xvcikgPSAwOwoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldEltYWdlR3JvdXAobnNJSW1hZ2VHcm91cCoqIGFHcm91cFJlc3VsdCkg
PSAwOwojIDI5MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNDb250ZXh0LmgiCiAg
dmlydHVhbCBuc3Jlc3VsdCBTdGFydExvYWRJbWFnZShjb25zdCBuc1N0cmluZyYgYVVSTCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zY29sb3IqIGFCYWNrZ3JvdW5kQ29sb3Is
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1NpemUqIGFEZXNpcmVkU2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhVGFyZ2V0RnJhbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZUltYWdlTG9hZGVyQ0IgYUNhbGxCYWNrLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYUNsb3N1cmUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2b2lkKiBhS2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
RnJhbWVJbWFnZUxvYWRlcioqIGFSZXN1bHQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBT
dG9wTG9hZEltYWdlKHZvaWQqIGFLZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZy
YW1lSW1hZ2VMb2FkZXIqIGFMb2FkZXIpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTdG9w
QWxsTG9hZEltYWdlc0Zvcihuc0lGcmFtZSogYVRhcmdldEZyYW1lLCB2b2lkKiBhS2V5KSA9IDA7
CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q29udGFpbmVyKG5zSVN1cHBvcnRzKiBhQ29udGFpbmVy
KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udGFpbmVyKG5zSVN1cHBvcnRzKiogYVJl
c3VsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMaW5rSGFuZGxlcihuc0lMaW5rSGFu
ZGxlciogYUhhbmRsZXIpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExpbmtIYW5kbGVyKG5z
SUxpbmtIYW5kbGVyKiogYVJlc3VsdCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dFZpc2libGVBcmVhKG5zUmVjdCYgYVJlc3VsdCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBTZXRWaXNpYmxlQXJlYShjb25zdCBuc1JlY3QmIHIpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgSXNQYWdpbmF0ZWQoUFJCb29sKiBhUmVzdWx0KSA9IDA7CiMgMzQ5ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJUHJlc0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBh
Z2VEaW0obnNSZWN0KiBhQWN0dWFsUmVjdCwgbnNSZWN0KiBhQWRqUmVjdCkgPSAwOwojIDM1OCAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jl
c3VsdCBTZXRQYWdlRGltKG5zUmVjdCogYVJlY3QpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRQaXhlbHNUb1R3aXBzKGZsb2F0KiBhUmVzdWx0KSBjb25zdCA9IDA7CgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0VHdpcHNUb1BpeGVscyhmbG9hdCogYVJlc3VsdCkgY29uc3QgPSAwOwoKCgoKCgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0U2NhbGVkUGl4ZWxzVG9Ud2lwcyhmbG9hdCogYVNjYWxlKSBj
b25zdCA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERldmljZUNvbnRleHQobnNJRGV2aWNl
Q29udGV4dCoqIGFSZXN1bHQpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFdmVu
dFN0YXRlTWFuYWdlcihuc0lFdmVudFN0YXRlTWFuYWdlcioqIGFNYW5hZ2VyKSA9IDA7CiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRMYW5ndWFnZShuc0lMYW5ndWFnZUF0b20qKiBhTGFuZ3VhZ2UpID0g
MDsKIyAzODUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzQ29udGV4dC5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0TGFuZ3VhZ2VTcGVjaWZpY1RyYW5zZm9ybVR5cGUoCiAgICAgICAg
ICAgICAgbnNMYW5ndWFnZVNwZWNpZmljVHJhbnNmb3JtVHlwZSogYVR5cGUpID0gMDsKIyAzOTYg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzQ29udGV4dC5oIgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0QmlkaUVuYWJsZWQoUFJCb29sKiBhQmlkaUVuYWJsZWQpIGNvbnN0ID0gMDsKCgoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEJpZGlFbmFibGVkKFBSQm9vbCBhQmlkaUVuYWJsZWQp
IGNvbnN0ID0gMDsKIyA0MTkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzQ29udGV4
dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VmlzdWFsTW9kZShQUkJvb2wgYUlzVmlzdWFsKSA9
IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1Zpc3VhbE1vZGUoUFJCb29sJiBhSXNWaXN1
YWwpIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJpZGlVdGlscyhuc0Jp
ZGlQcmVzVXRpbHMqKiBhQmlkaVV0aWxzKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
QmlkaShQUlVpbnQzMiBhQmlkaU9wdGlvbnMsIFBSQm9vbCBhRm9yY2VSZWZsb3cgPSAwKSA9IDA7
CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmlkaShQUlVpbnQzMiogYUJpZGlPcHRpb25zKSA9
IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1Zpc1JUTChQUkJvb2wgJmFSZXN1bHQpID0g
MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNBcmFiaWNFbmNvZGluZyhQUkJvb2wgJmFSZXN1
bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SXNCaWRpU3lzdGVtKFBSQm9vbCBh
SXNCaWRpKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldElzQmlkaVN5c3RlbShQUkJv
b2wgJmFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCaWRpQ2hh
cnNldChuc0FXcml0YWJsZVN0cmluZyAmYUNoYXJTZXQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgU2V0SXNSZW5kZXJpbmdPbmx5U2VsZWN0aW9uKFBSQm9vbCBhUmVzdWx0KSA9IDA7CiAg
dmlydHVhbCBuc3Jlc3VsdCBJc1JlbmRlcmluZ09ubHlTZWxlY3Rpb24oUFJCb29sKiBhUmVzdWx0
KSA9IDA7CgoKCgoKfTsKIyA0OTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzQ29u
dGV4dC5oIgpleHRlcm4gbnNyZXN1bHQKICBOU19OZXdHYWxsZXlDb250ZXh0KG5zSVByZXNDb250
ZXh0KiogYUluc3RhbmNlUHRyUmVzdWx0KTsKCgoKZXh0ZXJuIG5zcmVzdWx0CiAgTlNfTmV3UHJp
bnRQcmV2aWV3Q29udGV4dChuc0lQcmVzQ29udGV4dCoqIGFJbnN0YW5jZVB0clJlc3VsdCk7CiMg
MzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlU3RydWN0LmgiIDIKIyAxICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgiIDEKIyA0MCAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVByZXNTaGVsbC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc2xheW91dC5oIiAxCiMgNDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hl
bGwuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMg
NDIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hlbGwuaCIgMgojIDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Nvb3JkLmgiIDEKIyA0MyAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVByZXNTaGVsbC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVNlbGVjdGlvbi5oIiAxCiMgMTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZWxlY3Rp
b24uaCIKY2xhc3MgbnNJRE9NTm9kZTsKCmNsYXNzIG5zSURPTVJhbmdlOwojIDM2ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJU2VsZWN0aW9uLmgiCmNsYXNzIG5zSVNlbGVjdGlvbiA6IHB1
YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlE
KCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhiMmM3ZWQ1OSwgMHg4NjM0LCAweDQzNTIs
IHsgMHg5ZSwgMHgzNywgMHg1NCwgMHg4NCwgMHhjOCwgMHhiNiwgMHhlNCwgMHhlMSB9fTsgcmV0
dXJuIGlpZDt9CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFuY2hvck5vZGUobnNJRE9NTm9k
ZSAqICphQW5jaG9yTm9kZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbmNob3JP
ZmZzZXQoUFJJbnQzMiAqYUFuY2hvck9mZnNldCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRGb2N1c05vZGUobnNJRE9NTm9kZSAqICphRm9jdXNOb2RlKSA9IDA7CgoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldEZvY3VzT2Zmc2V0KFBSSW50MzIgKmFGb2N1c09mZnNldCkgPSAwOwoK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJc0NvbGxhcHNlZChQUkJvb2wgKmFJc0NvbGxhcHNl
ZCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSYW5nZUNvdW50KFBSSW50MzIgKmFS
YW5nZUNvdW50KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJhbmdlQXQoUFJJbnQz
MiBpbmRleCwgbnNJRE9NUmFuZ2UgKipfcmV0dmFsKSA9IDA7CiMgOTEgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lTZWxlY3Rpb24uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENvbGxhcHNlKG5z
SURPTU5vZGUgKnBhcmVudE5vZGUsIFBSSW50MzIgb2Zmc2V0KSA9IDA7CiMgMTAxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJU2VsZWN0aW9uLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBFeHRl
bmQobnNJRE9NTm9kZSAqcGFyZW50Tm9kZSwgUFJJbnQzMiBvZmZzZXQpID0gMDsKCgoKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBDb2xsYXBzZVRvU3RhcnQodm9pZCkgPSAwOwoKCgoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IENvbGxhcHNlVG9FbmQodm9pZCkgPSAwOwojIDEyNyAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVNlbGVjdGlvbi5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGFpbnNO
b2RlKG5zSURPTU5vZGUgKm5vZGUsIFBSQm9vbCBlbnRpcmVseUNvbnRhaW5lZCwgUFJCb29sICpf
cmV0dmFsKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZWxlY3RBbGxDaGlsZHJlbihu
c0lET01Ob2RlICpwYXJlbnROb2RlKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFkZFJh
bmdlKG5zSURPTVJhbmdlICpyYW5nZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1v
dmVSYW5nZShuc0lET01SYW5nZSAqcmFuZ2UpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
UmVtb3ZlQWxsUmFuZ2VzKHZvaWQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRGVsZXRl
RnJvbURvY3VtZW50KHZvaWQpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZWxlY3Rp
b25MYW5ndWFnZUNoYW5nZShQUkJvb2wgbGFuZ1JUTCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBUb1N0cmluZyhQUlVuaWNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDQ0ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJUmVmbG93Q29tbWFuZC5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lSZWZsb3dDb21tYW5kLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVN1cHBvcnRzLmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlZmxvd0Nv
bW1hbmQuaCIgMgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVJlZmxvd0NvbW1hbmQuaCIgMgoKY2xhc3MgbnNJQXRvbTsKY2xhc3MgbnNJRnJh
bWU7CmNsYXNzIG5zSVByZXNDb250ZXh0OwpjbGFzcyBuc0lSZW5kZXJpbmdDb250ZXh0OwpzdHJ1
Y3QgbnNIVE1MUmVmbG93TWV0cmljczsKc3RydWN0IG5zU2l6ZTsKIyA2NSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVJlZmxvd0NvbW1hbmQuaCIKY2xhc3MgbnNJUmVmbG93Q29tbWFuZCA6
IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ
RCgpIHsgc3RhdGljIG5zSUlEIGlpZCA9IHsgMHhjMzY1OGU0MCwgMHhmZjIwLCAweDExZDEsIHsw
eDg1LCAweGJjLCAweDAsIDB4YTAsIDB4MjQsIDB4NjgsIDB4ZmEsIDB4YjZ9fTsgcmV0dXJuIGlp
ZDsgfQoKICBlbnVtIFJlZmxvd1R5cGUgewoKCgoKCiAgICBDb250ZW50Q2hhbmdlZCwKCgoKCgog
ICAgU3R5bGVDaGFuZ2VkLAoKCgoKICAgIFB1bGx1cFJlZmxvdywKICAgIFB1c2hSZWZsb3csCgoK
CgogICAgQ2hlY2tQdWxsdXBSZWZsb3csCgoKICAgIFJlZmxvd0RpcnR5LAoKCiAgICBUaW1lb3V0
LAoKCiAgICBVc2VyRGVmaW5lZAogIH07CiMgMTEyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJUmVmbG93Q29tbWFuZC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRGlzcGF0Y2gobnNJUHJlc0Nv
bnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgIG5zSFRNTFJlZmxvd01l
dHJpY3MmIGFEZXNpcmVkU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU2l6ZSYg
YU1heFNpemUsCiAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVu
ZENvbnRleHQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5leHQobnNJRnJhbWUq
JiBhTmV4dEZyYW1lLCBQUkJvb2wgYVJlbW92ZSA9IDEpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRUYXJnZXQobnNJRnJhbWUqJiBhVGFyZ2V0RnJhbWUpIGNvbnN0ID0gMDsKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBTZXRUYXJnZXQobnNJRnJhbWUqIGFUYXJnZXRGcmFtZSkgPSAwOwoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR5cGUoUmVmbG93VHlwZSYgYVJlZmxvd1R5cGUpIGNv
bnN0ID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaGlsZEZyYW1lKG5zSUZyYW1lKiYg
YUNoaWxkRnJhbWUpIGNvbnN0ID0gMDsKIyAxNTIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lSZWZsb3dDb21tYW5kLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaGlsZExpc3ROYW1lKG5z
SUF0b20qJiBhTGlzdE5hbWUpIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNl
dENoaWxkTGlzdE5hbWUobnNJQXRvbSogYUxpc3ROYW1lKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldFByZXZTaWJsaW5nRnJhbWUobnNJRnJhbWUqJiBhU2libGluZ0ZyYW1lKSBjb25z
dCA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTGlzdChGSUxFKiBvdXQpIGNvbnN0ID0gMDsK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGbGFncyhQUkludDMyKiBhRmxhZ3MpID0gMDsKICB2
aXJ0dWFsIG5zcmVzdWx0IFNldEZsYWdzKFBSSW50MzIgYUZsYWdzKSA9IDA7Cn07CiMgNDUgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hlbGwuaCIgMgojIDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0dVSUV2ZW50LmgiIDEKIyA0NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVByZXNTaGVsbC5oIiAyCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lT
ZWxlY3Rpb25Db250cm9sbGVyLmgiIDEKIyAyMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKY2xhc3MgbnNJU2VsZWN0aW9uOwp0eXBlZGVmIHNob3J0
IFNlbGVjdGlvblR5cGU7CnR5cGVkZWYgc2hvcnQgU2VsZWN0aW9uUmVnaW9uOwpjbGFzcyBuc0lE
T01Ob2RlOwojIDM0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VsZWN0aW9uQ29udHJv
bGxlci5oIgpjbGFzcyBuc0lTZWxlY3Rpb25Db250cm9sbGVyIDogcHVibGljIG5zSVN1cHBvcnRz
IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0
IG5zSUlEIGlpZCA9IHsweGQyZDFkMTc5LCAweDg1YTcsIDB4MTFkMywgeyAweDk5LCAweDMyLCAw
eDAwLCAweDEwLCAweDgzLCAweDAxLCAweDIzLCAweDNjIH19OyByZXR1cm4gaWlkO30KCiAgZW51
bSB7IFNFTEVDVElPTl9OT05FID0gMCB9OwoKICBlbnVtIHsgU0VMRUNUSU9OX05PUk1BTCA9IDEg
fTsKCiAgZW51bSB7IFNFTEVDVElPTl9TUEVMTENIRUNLID0gMiB9OwoKICBlbnVtIHsgU0VMRUNU
SU9OX0lNRV9SQVdJTlBVVCA9IDQgfTsKCiAgZW51bSB7IFNFTEVDVElPTl9JTUVfU0VMRUNURURS
QVdURVhUID0gOCB9OwoKICBlbnVtIHsgU0VMRUNUSU9OX0lNRV9DT05WRVJURURURVhUID0gMTYg
fTsKCiAgZW51bSB7IFNFTEVDVElPTl9JTUVfU0VMRUNURURDT05WRVJURURURVhUID0gMzIgfTsK
CiAgZW51bSB7IE5VTV9TRUxFQ1RJT05UWVBFUyA9IDYgfTsKCiAgZW51bSB7IFNFTEVDVElPTl9B
TkNIT1JfUkVHSU9OID0gMCB9OwoKICBlbnVtIHsgU0VMRUNUSU9OX0ZPQ1VTX1JFR0lPTiA9IDEg
fTsKCiAgZW51bSB7IE5VTV9TRUxFQ1RJT05fUkVHSU9OUyA9IDIgfTsKCiAgZW51bSB7IFNFTEVD
VElPTl9PRkYgPSAwIH07CgogIGVudW0geyBTRUxFQ1RJT05fSElEREVOID0gMSB9OwoKICBlbnVt
IHsgU0VMRUNUSU9OX09OID0gMiB9OwoKICBlbnVtIHsgU0VMRUNUSU9OX0RJU0FCTEVEID0gMyB9
OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREaXNwbGF5U2VsZWN0aW9uKFBSSW50MTYgdG9n
Z2xlKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERpc3BsYXlTZWxlY3Rpb24oUFJJ
bnQxNiAqX3JldHZhbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGlzcGxheU5v
blRleHRTZWxlY3Rpb24oUFJCb29sIHRvZ2dsZSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0RGlzcGxheU5vblRleHRTZWxlY3Rpb24oUFJCb29sICpfcmV0dmFsKSA9IDA7CiMgMTAz
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VsZWN0aW9uQ29udHJvbGxlci5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0U2VsZWN0aW9uKFBSSW50MTYgdHlwZSwgbnNJU2VsZWN0aW9uICoq
X3JldHZhbCkgPSAwOwojIDExMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlbGVjdGlv
bkNvbnRyb2xsZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNjcm9sbFNlbGVjdGlvbkludG9WaWV3
KFBSSW50MTYgdHlwZSwgUFJJbnQxNiByZWdpb24pID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBSZXBhaW50U2VsZWN0aW9uKFBSSW50MTYgdHlwZSkgPSAwOwojIDEzMSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICB2aXJ0dWFsIG5zcmVz
dWx0IFNldENhcmV0RW5hYmxlZChQUkJvb2wgZW5hYmxlZCkgPSAwOwojIDE0MCAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICB2aXJ0dWFsIG5zcmVz
dWx0IFNldENhcmV0V2lkdGgoUFJJbnQxNiBwaXhlbHMpID0gMDsKIyAxNDkgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAgdmlydHVhbCBuc3Jlc3Vs
dCBTZXRDYXJldFJlYWRPbmx5KFBSQm9vbCByZWFkT25seSkgPSAwOwojIDE1OCAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldENhcmV0RW5hYmxlZChQUkJvb2wgKl9yZXR2YWwpID0gMDsKIyAxNjggIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAgdmlydHVhbCBuc3Jl
c3VsdCBDaGFyYWN0ZXJNb3ZlKFBSQm9vbCBmb3J3YXJkLCBQUkJvb2wgZXh0ZW5kKSA9IDA7CiMg
MTc4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VsZWN0aW9uQ29udHJvbGxlci5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgV29yZE1vdmUoUFJCb29sIGZvcndhcmQsIFBSQm9vbCBleHRlbmQp
ID0gMDsKIyAxODggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZWxlY3Rpb25Db250cm9s
bGVyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBMaW5lTW92ZShQUkJvb2wgZm9yd2FyZCwgUFJCb29s
IGV4dGVuZCkgPSAwOwojIDE5OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlbGVjdGlv
bkNvbnRyb2xsZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEludHJhTGluZU1vdmUoUFJCb29sIGZv
cndhcmQsIFBSQm9vbCBleHRlbmQpID0gMDsKIyAyMDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBQYWdlTW92ZShQ
UkJvb2wgZm9yd2FyZCwgUFJCb29sIGV4dGVuZCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBDb21wbGV0ZVNjcm9sbChQUkJvb2wgZm9yd2FyZCkgPSAwOwojIDIyNSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0
IENvbXBsZXRlTW92ZShQUkJvb2wgZm9yd2FyZCwgUFJCb29sIGV4dGVuZCkgPSAwOwoKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBTY3JvbGxQYWdlKFBSQm9vbCBmb3J3YXJkKSA9IDA7CgoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IFNjcm9sbExpbmUoUFJCb29sIGZvcndhcmQpID0gMDsKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgU2Nyb2xsSG9yaXpvbnRhbChQUkJvb2wgbGVmdCkgPSAwOwoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IFNlbGVjdEFsbCh2b2lkKSA9IDA7CiMgMjU4ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJU2VsZWN0aW9uQ29udHJvbGxlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQg
Q2hlY2tWaXNpYmlsaXR5KG5zSURPTU5vZGUgKm5vZGUsIFBSSW50MTYgc3RhcnRPZmZzZXQsIFBS
SW50MTYgZW5kT2Zmc2V0LCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCn07CiMgNDggIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hlbGwuaCIgMgoKCmNsYXNzIG5zSUNvbnRlbnQ7CmNs
YXNzIG5zSUNvbnRlbnRJdGVyYXRvcjsKY2xhc3MgbnNJRG9jdW1lbnQ7CmNsYXNzIG5zSURvY3Vt
ZW50T2JzZXJ2ZXI7CmNsYXNzIG5zSUZyYW1lOwpjbGFzcyBuc0lQcmVzQ29udGV4dDsKY2xhc3Mg
bnNJU3R5bGVTZXQ7CmNsYXNzIG5zSVZpZXdNYW5hZ2VyOwpjbGFzcyBuc0lEZXZpY2VDb250ZXh0
OwpjbGFzcyBuc0lSZW5kZXJpbmdDb250ZXh0OwpjbGFzcyBuc0lQYWdlU2VxdWVuY2VGcmFtZTsK
Y2xhc3MgbnNTdHJpbmc7CmNsYXNzIG5zU3RyaW5nQXJyYXk7CmNsYXNzIG5zSUNhcmV0OwpjbGFz
cyBuc0lTdHlsZUNvbnRleHQ7CmNsYXNzIG5zSUZyYW1lU2VsZWN0aW9uOwpjbGFzcyBuc0lGcmFt
ZU1hbmFnZXI7CmNsYXNzIG5zSUxheW91dEhpc3RvcnlTdGF0ZTsKY2xhc3MgbnNJQXJlbmE7CmNs
YXNzIG5zSVJlZmxvd0NhbGxiYWNrOwpjbGFzcyBuc0lTdXBwb3J0c0FycmF5OwojIDEwNiAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVsbC5oIgplbnVtIG5zQXR0cmlidXRlQ2hh
bmdlVHlwZSB7CiAgZUNoYW5nZVR5cGVfU2V0ID0gMCwKICBlQ2hhbmdlVHlwZV9SZW1vdmUgPSAx
Cn07CiMgMTIyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgiCmNsYXNz
IG5zSVByZXNTaGVsbCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29u
c3QgbnNJSUQmIEdldElJRCgpIHsgc3RhdGljIG5zSUlEIGlpZCA9IHsgMHg3NmU3OWM2MCwgMHg5
NDRlLCAweDExZDEsIHsweDkzLCAweDIzLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAw
eDMyfSB9OyByZXR1cm4gaWlkOyB9CgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0lEb2N1bWVu
dCogYURvY3VtZW50LAogICAgICAgICAgICAgICAgICBuc0lQcmVzQ29udGV4dCogYVByZXNDb250
ZXh0LAogICAgICAgICAgICAgICAgICBuc0lWaWV3TWFuYWdlciogYVZpZXdNYW5hZ2VyLAogICAg
ICAgICAgICAgICAgICBuc0lTdHlsZVNldCogYVN0eWxlU2V0KSA9IDA7CgoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgQWxsb2NhdGVGcmFtZShzaXplX3QgYVNpemUsIHZvaWQqKiBhUmVzdWx0KSA9IDA7
CiAgdmlydHVhbCBuc3Jlc3VsdCBGcmVlRnJhbWUoc2l6ZV90IGFTaXplLCB2b2lkKiBhRnJlZUNo
dW5rKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFB1c2hTdGFja01lbW9yeSgpID0gMDsKICB2
aXJ0dWFsIG5zcmVzdWx0IFBvcFN0YWNrTWVtb3J5KCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg
QWxsb2NhdGVTdGFja01lbW9yeShzaXplX3QgYVNpemUsIHZvaWQqKiBhUmVzdWx0KSA9IDA7Cgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0RG9jdW1lbnQobnNJRG9jdW1lbnQqKiBhUmVzdWx0KSA9IDA7
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UHJlc0NvbnRleHQobnNJUHJlc0NvbnRleHQqKiBhUmVz
dWx0KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Vmlld01hbmFnZXIobnNJVmlld01hbmFn
ZXIqKiBhUmVzdWx0KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3R5bGVTZXQobnNJU3R5
bGVTZXQqKiBhUmVzdWx0KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWN0aXZlQWx0ZXJu
YXRlU3R5bGVTaGVldChuc1N0cmluZyYgYVNoZWV0VGl0bGUpID0gMDsKCiAgdmlydHVhbCBuc3Jl
c3VsdCBTZWxlY3RBbHRlcm5hdGVTdHlsZVNoZWV0KGNvbnN0IG5zU3RyaW5nJiBhU2hlZXRUaXRs
ZSkgPSAwOwojIDE2MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVsbC5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgU2V0UHJlZmVyZW5jZVN0eWxlUnVsZXMoUFJCb29sIGFGb3JjZVJl
ZmxvdykgPSAwOwojIDE3MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVsbC5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgRW5hYmxlUHJlZlN0eWxlUnVsZXMoUFJCb29sIGFFbmFibGUs
IFBSVWludDggYVByZWZUeXBlPTB4RkYpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEFyZVByZWZT
dHlsZVJ1bGVzRW5hYmxlZChQUkJvb2wmIGFFbmFibGVkKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IExpc3RBbHRlcm5hdGVTdHlsZVNoZWV0cyhuc1N0cmluZ0FycmF5JiBhVGl0bGVMaXN0
KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZyYW1lU2VsZWN0aW9uKG5zSUZyYW1l
U2VsZWN0aW9uKiogYVNlbGVjdGlvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBCZWdpbk9i
c2VydmluZ0RvY3VtZW50KCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFbmRPYnNlcnZpbmdE
b2N1bWVudCgpID0gMDsKIyAxOTkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hl
bGwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXRpYWxSZWZsb3cobnNjb29yZCBhV2lkdGgsIG5z
Y29vcmQgYUhlaWdodCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXNpemVSZWZsb3co
bnNjb29yZCBhV2lkdGgsIG5zY29vcmQgYUhlaWdodCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVz
dWx0IFN0eWxlQ2hhbmdlUmVmbG93KCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJvb3RG
cmFtZShuc0lGcmFtZSoqIGFGcmFtZSkgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRQYWdlU2VxdWVuY2VGcmFtZShuc0lQYWdlU2VxdWVuY2VGcmFtZSoqIGFSZXN1bHQpIGNv
bnN0ID0gMDsKIyAyMzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hlbGwuaCIK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByaW1hcnlGcmFtZUZvcihuc0lDb250ZW50KiBhQ29udGVu
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSoqIGFQcmltYXJ5RnJh
bWUpIGNvbnN0ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3R5bGVDb250ZXh0Rm9y
KG5zSUZyYW1lKiBhRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5
bGVDb250ZXh0KiogYVN0eWxlQ29udGV4dCkgY29uc3QgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldExheW91dE9iamVjdEZvcihuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyoqIGFSZXN1bHQpIGNvbnN0ID0gMDsK
CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3ViU2hlbGxGb3IobnNJQ29udGVudCogYUNvbnRl
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyoqIGFSZXN1bHQpIGNv
bnN0ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U3ViU2hlbGxGb3IobnNJQ29udGVu
dCogYUNvbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyogYVN1
YlNoZWxsKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBsYWNlaG9sZGVyRnJhbWVG
b3IobnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJRnJhbWUqKiBhUGxhY2Vob2xkZXJGcmFtZSkgY29uc3QgPSAwOwoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEFwcGVuZFJlZmxvd0NvbW1hbmQobnNJUmVmbG93Q29tbWFuZCogYVJlZmxvd0NvbW1h
bmQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IENhbmNlbFJlZmxvd0NvbW1hbmQobnNJRnJhbWUq
IGFUYXJnZXRGcmFtZSwgbnNJUmVmbG93Q29tbWFuZDo6UmVmbG93VHlwZSogYUNtZFR5cGUpID0g
MDsKICB2aXJ0dWFsIG5zcmVzdWx0IENhbmNlbEFsbFJlZmxvd0NvbW1hbmRzKCkgPSAwOwoKCgoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzU2FmZVRvRmx1c2goUFJCb29sJiBhSXNTYWZlVG9GbHVz
aCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGbHVzaFBlbmRpbmdOb3RpZmljYXRpb25z
KCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFBvc3RET01FdmVudChuc0lDb250ZW50KiBh
Q29udGVudCwgbnNFdmVudCogYUV2ZW50KT0wOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFBvc3RB
dHRyaWJ1dGVDaGFuZ2UobnNJQ29udGVudCogYUNvbnRlbnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBSSW50MzIgYU5hbWVTcGFjZUlELAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lBdG9tKiBhTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgbnNTdHJpbmcmIGFWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUFJCb29sIGFOb3RpZnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQXR0
cmlidXRlQ2hhbmdlVHlwZSBhVHlwZSkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFBvc3RSZWZs
b3dDYWxsYmFjayhuc0lSZWZsb3dDYWxsYmFjayogYUNhbGxiYWNrKSA9IDA7CiAgdmlydHVhbCBu
c3Jlc3VsdCBDYW5jZWxSZWZsb3dDYWxsYmFjayhuc0lSZWZsb3dDYWxsYmFjayogYUNhbGxiYWNr
KSA9IDA7CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBCZWdpblJlZmxvd0JhdGNoaW5nKCkgPSAwOwog
IHZpcnR1YWwgbnNyZXN1bHQgRW5kUmVmbG93QmF0Y2hpbmcoUFJCb29sIGFGbHVzaFBlbmRpbmdS
ZWZsb3dzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSZWZsb3dCYXRjaGluZ1N0YXR1cyhQ
UkJvb2wqIGFJc0JhdGNoaW5nKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xlYXJGcmFtZVJl
ZnMobnNJRnJhbWUqIGFGcmFtZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVS
ZW5kZXJpbmdDb250ZXh0KG5zSUZyYW1lICphRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQqKiBhQ29udGV4dCkgPSAwOwojIDMzNSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVsbC5oIgogIHZpcnR1YWwgbnNyZXN1
bHQgQ2FudFJlbmRlclJlcGxhY2VkRWxlbWVudChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1l
KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHb1RvQW5jaG9yKGNvbnN0IG5zU3RyaW5n
JiBhQW5jaG9yTmFtZSkgPSAwOwojIDM3MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVBy
ZXNTaGVsbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xsRnJhbWVJbnRvVmlldyhuc0lGcmFt
ZSAqYUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludG4gYVZQZXJj
ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludG4gYUhQZXJjZW50KSBj
b25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBOb3RpZnlEZXN0cm95aW5nRnJhbWUo
bnNJRnJhbWUqIGFGcmFtZSkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZyYW1lTWFu
YWdlcihuc0lGcmFtZU1hbmFnZXIqKiBhRnJhbWVNYW5hZ2VyKSBjb25zdCA9IDA7CgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgRG9Db3B5KCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERvQ29w
eUxpbmtMb2NhdGlvbihuc0lET01Ob2RlKiBhTm9kZSkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVz
dWx0IERvQ29weUltYWdlTG9jYXRpb24obnNJRE9NTm9kZSogYU5vZGUpID0gMDsKICB2aXJ0dWFs
IG5zcmVzdWx0IERvQ29weUltYWdlQ29udGVudHMobnNJRE9NTm9kZSogYU5vZGUpID0gMDsKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDYXJldChuc0lDYXJldCAqKmFPdXRDYXJldCkgPSAwOwoj
IDQxOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVsbC5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgU2V0RGlzcGxheU5vblRleHRTZWxlY3Rpb24oUFJCb29sIGFJbkVuYWJsZSkgPSAw
OwojIDQyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVsbC5oIgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0RGlzcGxheU5vblRleHRTZWxlY3Rpb24oUFJCb29sICphT3V0RW5hYmxl
ZCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEhhbmRsZUV2ZW50V2l0aFRhcmdldChuc0V2
ZW50KiBhRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUq
IGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBh
Q29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhRmxh
Z3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNFdmVudFN0YXR1cyogYVN0
YXR1cykgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEhhbmRsZURPTUV2ZW50V2l0aFRhcmdl
dChuc0lDb250ZW50KiBhVGFyZ2V0Q29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zRXZlbnQqIGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRXZlbnRTdGF0
dXMqIGFTdGF0dXMpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFdmVudFRhcmdldEZy
YW1lKG5zSUZyYW1lKiogYUZyYW1lKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IENhcHR1
cmVIaXN0b3J5U3RhdGUobnNJTGF5b3V0SGlzdG9yeVN0YXRlKiogYUxheW91dEhpc3RvcnlTdGF0
ZSwgUFJCb29sIGFMZWF2aW5nUGFnZSA9IDApID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEhp
c3RvcnlTdGF0ZShuc0lMYXlvdXRIaXN0b3J5U3RhdGUqKiBhTGF5b3V0SGlzdG9yeVN0YXRlKSA9
IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRIaXN0b3J5U3RhdGUobnNJTGF5b3V0SGlzdG9yeVN0
YXRlKiBhTGF5b3V0SGlzdG9yeVN0YXRlKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IElz
UmVmbG93TG9ja2VkKFBSQm9vbCogYUlzTG9ja2VkKSA9IDA7CiMgNDcyICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgiCiAgZW51bSBHZW5lcmF0ZWRDb250ZW50VHlwZSB7
QmVmb3JlLCBBZnRlcn07CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRHZW5lcmF0ZWRDb250ZW50SXRl
cmF0b3IobnNJQ29udGVudCogYUNvbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR2VuZXJhdGVkQ29udGVudFR5cGUgYVR5cGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudEl0ZXJhdG9yKiogYUl0ZXJhdG9yKSBj
b25zdCA9IDA7CiMgNDg3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgi
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBbm9ueW1vdXNDb250ZW50Rm9yKG5zSUNvbnRlbnQqIGFD
b250ZW50LCBuc0lTdXBwb3J0c0FycmF5KiBhQW5vbnltb3VzRWxlbWVudHMpID0gMDsKIyA0OTgg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hlbGwuaCIKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldEFub255bW91c0NvbnRlbnRGb3IobnNJQ29udGVudCogYUNvbnRlbnQsIG5zSVN1cHBv
cnRzQXJyYXkqKiBhQW5vbnltb3VzRWxlbWVudHMpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgUmVsZWFzZUFub255bW91c0NvbnRlbnQoKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBJc1BhaW50aW5nU3VwcHJlc3NlZChQUkJvb2wqIGFSZXN1bHQpPTA7CgoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgVW5zdXBwcmVzc1BhaW50aW5nKCkgPSAwOwoKICBlbnVtIEludGVycnVwdFR5cGUg
e1RpbWVvdXR9OwoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2VuZEludGVycnVwdE5vdGlmaWNhdGlv
blRvKG5zSUZyYW1lKiBhRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW50ZXJydXB0VHlwZSBhSW50ZXJydXB0VHlwZSkgPSAwOwoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgQ2FuY2VsSW50ZXJydXB0Tm90aWZpY2F0aW9uVG8obnNJRnJhbWUqIGFGcmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdFR5cGUgYUlu
dGVycnVwdFR5cGUpID0gMDsKIyA1MzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVz
U2hlbGwuaCIKICBzdGF0aWMgUFJCb29sIEdldFZlcmlmeVJlZmxvd0VuYWJsZSgpOwoKCgoKICBz
dGF0aWMgdm9pZCBTZXRWZXJpZnlSZWZsb3dFbmFibGUoUFJCb29sIGFFbmFibGVkKTsKCgoKCiAg
c3RhdGljIFBSSW50MzIgR2V0VmVyaWZ5UmVmbG93RmxhZ3MoKTsKIyA1NjUgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hlbGwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEN1cnNv
ckJpZGlMZXZlbChQUlVpbnQ4IGFMZXZlbCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dEN1cnNvckJpZGlMZXZlbChQUlVpbnQ4ICphT3V0TGV2ZWwpID0gMDsKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBVbmRlZmluZUN1cnNvckJpZGlMZXZlbCh2b2lkKSA9IDA7CgoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgQmlkaVN0eWxlQ2hhbmdlUmVmbG93KHZvaWQpID0gMDsKCgp9OwoKCgoKCmV4dGVy
biBuc3Jlc3VsdAogIE5TX05ld1ByZXNTaGVsbChuc0lQcmVzU2hlbGwqKiBhSW5zdGFuY2VQdHJS
ZXN1bHQpOwojIDM3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVN0cnVjdC5oIiAy
CiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiIDEKIyAzOCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVTdHJ1Y3QuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lMYW5ndWFnZUF0b20uaCIgMQojIDM5ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNTdHlsZVN0cnVjdC5oIiAyCgpjbGFzcyBuc0lGcmFtZTsKIyA3MyAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zU3R5bGVTdHJ1Y3QuaCIKZW51bSBuc1N0eWxlU3RydWN0SUQgewog
IGVTdHlsZVN0cnVjdF9Gb250ID0gMSwKICBlU3R5bGVTdHJ1Y3RfQ29sb3IgPSAyLAogIGVTdHls
ZVN0cnVjdF9CYWNrZ3JvdW5kID0gMywKICBlU3R5bGVTdHJ1Y3RfTGlzdCA9IDQsCiAgZVN0eWxl
U3RydWN0X1Bvc2l0aW9uID0gNSwKICBlU3R5bGVTdHJ1Y3RfVGV4dCA9IDYsCiAgZVN0eWxlU3Ry
dWN0X1RleHRSZXNldCA9IDcsCiAgZVN0eWxlU3RydWN0X0Rpc3BsYXkgPSA4LAogIGVTdHlsZVN0
cnVjdF9WaXNpYmlsaXR5ID0gOSwKICBlU3R5bGVTdHJ1Y3RfQ29udGVudCA9IDEwLAogIGVTdHls
ZVN0cnVjdF9RdW90ZXMgPSAxMSwKICBlU3R5bGVTdHJ1Y3RfVXNlckludGVyZmFjZSA9IDEyLAog
IGVTdHlsZVN0cnVjdF9VSVJlc2V0ID0gMTMsCiAgZVN0eWxlU3RydWN0X1RhYmxlID0gMTQsCiAg
ZVN0eWxlU3RydWN0X1RhYmxlQm9yZGVyID0gMTUsCiAgZVN0eWxlU3RydWN0X01hcmdpbiA9IDE2
LAogIGVTdHlsZVN0cnVjdF9QYWRkaW5nID0gMTcsCiAgZVN0eWxlU3RydWN0X0JvcmRlciA9IDE4
LAogIGVTdHlsZVN0cnVjdF9PdXRsaW5lID0gMTksCiAgZVN0eWxlU3RydWN0X1hVTCA9IDIwLAog
IGVTdHlsZVN0cnVjdF9NYXggPSBlU3R5bGVTdHJ1Y3RfWFVMLAogIGVTdHlsZVN0cnVjdF9Cb3Jk
ZXJQYWRkaW5nU2hvcnRjdXQgPSAyMQp9OwoKCnN0cnVjdCBuc1N0eWxlU3RydWN0IHsKfTsKCgoK
c3RydWN0IG5zU3R5bGVGb250IDogcHVibGljIG5zU3R5bGVTdHJ1Y3QgewogIG5zU3R5bGVGb250
KHZvaWQpOwogIH5uc1N0eWxlRm9udCh2b2lkKSB7fTsKCiAgUFJJbnQzMiBDYWxjRGlmZmVyZW5j
ZShjb25zdCBuc1N0eWxlRm9udCYgYU90aGVyKSBjb25zdDsKICBzdGF0aWMgUFJJbnQzMiBDYWxj
Rm9udERpZmZlcmVuY2UoY29uc3QgbnNGb250JiBhRm9udDEsIGNvbnN0IG5zRm9udCYgYUZvbnQy
KTsKCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250
ZXh0KTsKICB2b2lkIERlc3Ryb3kobnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KTsKCiAgbnNGb250
IG1Gb250OwogIG5zRm9udCBtRml4ZWRGb250OwogIFBSVWludDggbUZsYWdzOwoKICBuc1N0eWxl
Rm9udChjb25zdCBuc0ZvbnQmIGFWYXJpYWJsZUZvbnQsIGNvbnN0IG5zRm9udCYgYUZpeGVkRm9u
dCk7CiAgbnNTdHlsZUZvbnQoY29uc3QgbnNTdHlsZUZvbnQmIGFTdHlsZUZvbnQpOwogIG5zU3R5
bGVGb250KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwp9OwoKc3RydWN0IG5zU3R5bGVD
b2xvciA6IHB1YmxpYyBuc1N0eWxlU3RydWN0IHsKICBuc1N0eWxlQ29sb3IobnNJUHJlc0NvbnRl
eHQqIGFQcmVzQ29udGV4dCk7CiAgbnNTdHlsZUNvbG9yKGNvbnN0IG5zU3R5bGVDb2xvciYgYU90
aGVyKTsKICB+bnNTdHlsZUNvbG9yKHZvaWQpIHt9OwoKICBQUkludDMyIENhbGNEaWZmZXJlbmNl
KGNvbnN0IG5zU3R5bGVDb2xvciYgYU90aGVyKSBjb25zdDsKCiAgdm9pZCogb3BlcmF0b3IgbmV3
KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB7CiAgICB2b2lkKiByZXN1bHQg
PSAwOwogICAgYUNvbnRleHQtPkFsbG9jYXRlRnJvbVNoZWxsKHN6LCAmcmVzdWx0KTsKICAgIHJl
dHVybiByZXN1bHQ7CiAgfQogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQp
IHsKICAgIHRoaXMtPn5uc1N0eWxlQ29sb3IoKTsKICAgIGFDb250ZXh0LT5GcmVlVG9TaGVsbChz
aXplb2YobnNTdHlsZUNvbG9yKSwgdGhpcyk7CiAgfTsKCgoKICBuc2NvbG9yIG1Db2xvcjsKfTsK
CnN0cnVjdCBuc1N0eWxlQmFja2dyb3VuZCA6IHB1YmxpYyBuc1N0eWxlU3RydWN0IHsKICBuc1N0
eWxlQmFja2dyb3VuZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KTsKICBuc1N0eWxlQmFj
a2dyb3VuZChjb25zdCBuc1N0eWxlQmFja2dyb3VuZCYgYU90aGVyKTsKICB+bnNTdHlsZUJhY2tn
cm91bmQoKSB7fTsKCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRl
eHQqIGFDb250ZXh0KSB7CiAgICB2b2lkKiByZXN1bHQgPSAwOwogICAgYUNvbnRleHQtPkFsbG9j
YXRlRnJvbVNoZWxsKHN6LCAmcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZvaWQg
RGVzdHJveShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAgIHRoaXMtPn5uc1N0eWxlQmFj
a2dyb3VuZCgpOwogICAgYUNvbnRleHQtPkZyZWVUb1NoZWxsKHNpemVvZihuc1N0eWxlQmFja2dy
b3VuZCksIHRoaXMpOwogIH07CgogIFBSSW50MzIgQ2FsY0RpZmZlcmVuY2UoY29uc3QgbnNTdHls
ZUJhY2tncm91bmQmIGFPdGhlcikgY29uc3Q7CgogIFBSVWludDggbUJhY2tncm91bmRBdHRhY2ht
ZW50OwogIFBSVWludDggbUJhY2tncm91bmRGbGFnczsKICBQUlVpbnQ4IG1CYWNrZ3JvdW5kUmVw
ZWF0OwoKICBuc2NvbG9yIG1CYWNrZ3JvdW5kQ29sb3I7CiAgbnNjb29yZCBtQmFja2dyb3VuZFhQ
b3NpdGlvbjsKICBuc2Nvb3JkIG1CYWNrZ3JvdW5kWVBvc2l0aW9uOwogIG5zU3RyaW5nIG1CYWNr
Z3JvdW5kSW1hZ2U7CgogIFBSQm9vbCBCYWNrZ3JvdW5kSXNUcmFuc3BhcmVudCgpIGNvbnN0IHty
ZXR1cm4gKG1CYWNrZ3JvdW5kRmxhZ3MgJgogICAgKDB4MDEgfCAweDAyKSkgPT0KICAgICgweDAx
IHwgMHgwMik7fQp9OwojIDE4NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVTdHJ1
Y3QuaCIKc3RydWN0IG5zU3R5bGVNYXJnaW46IHB1YmxpYyBuc1N0eWxlU3RydWN0IHsKICBuc1N0
eWxlTWFyZ2luKHZvaWQpOwogIG5zU3R5bGVNYXJnaW4oY29uc3QgbnNTdHlsZU1hcmdpbiYgYU1h
cmdpbik7CiAgfm5zU3R5bGVNYXJnaW4odm9pZCkge307CgogIHZvaWQqIG9wZXJhdG9yIG5ldyhz
aXplX3Qgc3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCk7CiAgdm9pZCBEZXN0cm95KG5zSVBy
ZXNDb250ZXh0KiBhQ29udGV4dCk7CgogIHZvaWQgUmVjYWxjRGF0YSgpOwogIFBSSW50MzIgQ2Fs
Y0RpZmZlcmVuY2UoY29uc3QgbnNTdHlsZU1hcmdpbiYgYU90aGVyKSBjb25zdDsKCiAgbnNTdHls
ZVNpZGVzIG1NYXJnaW47CgogIFBSQm9vbCBHZXRNYXJnaW4obnNNYXJnaW4mIGFNYXJnaW4pIGNv
bnN0CiAgewogICAgaWYgKG1IYXNDYWNoZWRNYXJnaW4pIHsKICAgICAgYU1hcmdpbiA9IG1DYWNo
ZWRNYXJnaW47CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcmV0dXJuIDA7CiAgfQoKCiAgdm9p
ZCBDYWxjTWFyZ2luRm9yKGNvbnN0IG5zSUZyYW1lKiBhRnJhbWUsIG5zTWFyZ2luJiBhTWFyZ2lu
KSBjb25zdDsKCnByb3RlY3RlZDoKICBQUlBhY2tlZEJvb2wgbUhhc0NhY2hlZE1hcmdpbjsKICBu
c01hcmdpbiBtQ2FjaGVkTWFyZ2luOwp9OwoKCnN0cnVjdCBuc1N0eWxlUGFkZGluZzogcHVibGlj
IG5zU3R5bGVTdHJ1Y3QgewogIG5zU3R5bGVQYWRkaW5nKHZvaWQpOwogIG5zU3R5bGVQYWRkaW5n
KGNvbnN0IG5zU3R5bGVQYWRkaW5nJiBhUGFkZGluZyk7CiAgfm5zU3R5bGVQYWRkaW5nKHZvaWQp
IHt9OwoKICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBuc0lQcmVzQ29udGV4dCogYUNv
bnRleHQpOwogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpOwoKICB2b2lk
IFJlY2FsY0RhdGEoKTsKICBQUkludDMyIENhbGNEaWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVQYWRk
aW5nJiBhT3RoZXIpIGNvbnN0OwoKICBuc1N0eWxlU2lkZXMgbVBhZGRpbmc7CgogIFBSQm9vbCBH
ZXRQYWRkaW5nKG5zTWFyZ2luJiBhUGFkZGluZykgY29uc3QKICB7CiAgICBpZiAobUhhc0NhY2hl
ZFBhZGRpbmcpIHsKICAgICAgYVBhZGRpbmcgPSBtQ2FjaGVkUGFkZGluZzsKICAgICAgcmV0dXJu
IDE7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CgoKICB2b2lkIENhbGNQYWRkaW5nRm9yKGNvbnN0
IG5zSUZyYW1lKiBhRnJhbWUsIG5zTWFyZ2luJiBhUGFkZGluZykgY29uc3Q7Cgpwcm90ZWN0ZWQ6
CiAgUFJQYWNrZWRCb29sIG1IYXNDYWNoZWRQYWRkaW5nOwogIG5zTWFyZ2luIG1DYWNoZWRQYWRk
aW5nOwp9OwoKCnN0cnVjdCBuc1N0eWxlQm9yZGVyOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAg
bnNTdHlsZUJvcmRlcigpIHt9OwogIG5zU3R5bGVCb3JkZXIobnNJUHJlc0NvbnRleHQqIGFDb250
ZXh0KTsKICBuc1N0eWxlQm9yZGVyKGNvbnN0IG5zU3R5bGVCb3JkZXImIGFCb3JkZXIpOwogIH5u
c1N0eWxlQm9yZGVyKHZvaWQpIHt9OwoKICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBu
c0lQcmVzQ29udGV4dCogYUNvbnRleHQpOwogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4dCog
YUNvbnRleHQpOwoKICBQUkJvb2wgSXNCb3JkZXJTaWRlVmlzaWJsZShQUlVpbnQ4IGFTaWRlKSBj
b25zdDsKICB2b2lkIFJlY2FsY0RhdGEoKTsKICBQUkludDMyIENhbGNEaWZmZXJlbmNlKGNvbnN0
IG5zU3R5bGVCb3JkZXImIGFPdGhlcikgY29uc3Q7CgogIG5zU3R5bGVTaWRlcyBtQm9yZGVyOwog
IG5zU3R5bGVTaWRlcyBtQm9yZGVyUmFkaXVzOwogIFBSVWludDggbUZsb2F0RWRnZTsKCiAgUFJC
b29sIEdldEJvcmRlcihuc01hcmdpbiYgYUJvcmRlcikgY29uc3QKICB7CiAgICBpZiAobUhhc0Nh
Y2hlZEJvcmRlcikgewogICAgICBhQm9yZGVyID0gbUNhY2hlZEJvcmRlcjsKICAgICAgcmV0dXJu
IDE7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CgogIFBSVWludDggR2V0Qm9yZGVyU3R5bGUoUFJV
aW50OCBhU2lkZSkgY29uc3QKICB7CiAgICB7fTsKICAgIHJldHVybiAobUJvcmRlclN0eWxlW2FT
aWRlXSAmIDB4MUYpOwogIH0KCiAgdm9pZCBTZXRCb3JkZXJTdHlsZShQUlVpbnQ4IGFTaWRlLCBQ
UlVpbnQ4IGFTdHlsZSkKICB7CiAgICB7fTsKICAgIG1Cb3JkZXJTdHlsZVthU2lkZV0gJj0gfjB4
MUY7CiAgICBtQm9yZGVyU3R5bGVbYVNpZGVdIHw9IChhU3R5bGUgJiAweDFGKTsKCiAgfQoKICB2
b2lkIEdldEJvcmRlckNvbG9yKFBSVWludDggYVNpZGUsIG5zY29sb3ImIGFDb2xvciwKICAgICAg
ICAgICAgICAgICAgICAgIFBSQm9vbCYgYVRyYW5zcGFyZW50LCBQUkJvb2wmIGFGb3JlZ3JvdW5k
KSBjb25zdAogIHsKICAgIGFUcmFuc3BhcmVudCA9IGFGb3JlZ3JvdW5kID0gMDsKICAgIHt9Owog
ICAgaWYgKChtQm9yZGVyU3R5bGVbYVNpZGVdICYgMHg2MCkgPT0gMCkKICAgICAgYUNvbG9yID0g
bUJvcmRlckNvbG9yW2FTaWRlXTsKICAgIGVsc2UgaWYgKG1Cb3JkZXJTdHlsZVthU2lkZV0gJiAw
eDIwKQogICAgICBhRm9yZWdyb3VuZCA9IDE7CiAgICBlbHNlCiAgICAgIGFUcmFuc3BhcmVudCA9
IDE7CiAgfQoKICB2b2lkIFNldEJvcmRlckNvbG9yKFBSVWludDggYVNpZGUsIG5zY29sb3IgYUNv
bG9yKQogIHsKICAgIHt9OwogICAgbUJvcmRlckNvbG9yW2FTaWRlXSA9IGFDb2xvcjsKICAgIG1C
b3JkZXJTdHlsZVthU2lkZV0gJj0gfjB4NjA7CiAgICBtQm9yZGVyU3R5bGVbYVNpZGVdIHw9IDB4
ODA7CiAgfQoKICB2b2lkIFNldEJvcmRlclRyYW5zcGFyZW50KFBSVWludDggYVNpZGUpCiAgewog
ICAge307CiAgICBtQm9yZGVyU3R5bGVbYVNpZGVdICY9IH4weDYwOwogICAgbUJvcmRlclN0eWxl
W2FTaWRlXSB8PSAoMHg4MCB8IDB4NDApOwogIH0KCiAgdm9pZCBTZXRCb3JkZXJUb0ZvcmVncm91
bmQoUFJVaW50OCBhU2lkZSkKICB7CiAgICB7fTsKICAgIG1Cb3JkZXJTdHlsZVthU2lkZV0gJj0g
fjB4NjA7CiAgICBtQm9yZGVyU3R5bGVbYVNpZGVdIHw9ICgweDgwIHwgMHgyMCk7CiAgfQoKICB2
b2lkIFVuc2V0Qm9yZGVyQ29sb3IoUFJVaW50OCBhU2lkZSkKICB7CiAgICB7fTsKICAgIG1Cb3Jk
ZXJTdHlsZVthU2lkZV0gJj0gMHgxRjsKICB9CgoKICB2b2lkIENhbGNCb3JkZXJGb3IoY29uc3Qg
bnNJRnJhbWUqIGFGcmFtZSwgbnNNYXJnaW4mIGFCb3JkZXIpIGNvbnN0OwoKcHJvdGVjdGVkOgog
IFBSUGFja2VkQm9vbCBtSGFzQ2FjaGVkQm9yZGVyOwogIG5zTWFyZ2luIG1DYWNoZWRCb3JkZXI7
CgogIFBSVWludDggbUJvcmRlclN0eWxlWzRdOwogIG5zY29sb3IgbUJvcmRlckNvbG9yWzRdOwoK
CiAgbnNjb29yZCBtQm9yZGVyV2lkdGhzWzNdOwp9OwoKCnN0cnVjdCBuc1N0eWxlQm9yZGVyUGFk
ZGluZzogcHVibGljIG5zU3R5bGVTdHJ1Y3QgewogIG5zU3R5bGVCb3JkZXJQYWRkaW5nKHZvaWQp
IHsgbUhhc0NhY2hlZEJvcmRlclBhZGRpbmcgPSAwOyB9OwogIH5uc1N0eWxlQm9yZGVyUGFkZGlu
Zyh2b2lkKSB7fTsKCiAgUFJCb29sIEdldEJvcmRlclBhZGRpbmcobnNNYXJnaW4mIGFCb3JkZXJQ
YWRkaW5nKSBjb25zdCB7CiAgICBpZiAobUhhc0NhY2hlZEJvcmRlclBhZGRpbmcpIHsKICAgICAg
YUJvcmRlclBhZGRpbmcgPSBtQ2FjaGVkQm9yZGVyUGFkZGluZzsKICAgICAgcmV0dXJuIDE7CiAg
ICB9CiAgICByZXR1cm4gMDsKICB9CgogIHZvaWQgU2V0Qm9yZGVyUGFkZGluZyhuc01hcmdpbiBh
Qm9yZGVyUGFkZGluZykgewogICAgbUNhY2hlZEJvcmRlclBhZGRpbmcgPSBhQm9yZGVyUGFkZGlu
ZzsKICAgIG1IYXNDYWNoZWRCb3JkZXJQYWRkaW5nID0gMTsKICB9Cgpwcm90ZWN0ZWQ6CiAgbnNN
YXJnaW4gbUNhY2hlZEJvcmRlclBhZGRpbmc7CiAgUFJQYWNrZWRCb29sIG1IYXNDYWNoZWRCb3Jk
ZXJQYWRkaW5nOwp9OwoKCnN0cnVjdCBuc1N0eWxlT3V0bGluZTogcHVibGljIG5zU3R5bGVTdHJ1
Y3QgewogIG5zU3R5bGVPdXRsaW5lKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwogIG5z
U3R5bGVPdXRsaW5lKGNvbnN0IG5zU3R5bGVPdXRsaW5lJiBhT3V0bGluZSk7CiAgfm5zU3R5bGVP
dXRsaW5lKHZvaWQpIHt9OwoKICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBuc0lQcmVz
Q29udGV4dCogYUNvbnRleHQpIHsKICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+
QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAg
dm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5
bGVPdXRsaW5lKCk7CiAgICBhQ29udGV4dC0+RnJlZVRvU2hlbGwoc2l6ZW9mKG5zU3R5bGVPdXRs
aW5lKSwgdGhpcyk7CiAgfTsKCiAgdm9pZCBSZWNhbGNEYXRhKCk7CiAgUFJJbnQzMiBDYWxjRGlm
ZmVyZW5jZShjb25zdCBuc1N0eWxlT3V0bGluZSYgYU90aGVyKSBjb25zdDsKCiAgbnNTdHlsZVNp
ZGVzIG1PdXRsaW5lUmFkaXVzOwoKCiAgbnNTdHlsZUNvb3JkIG1PdXRsaW5lV2lkdGg7CgogIFBS
Qm9vbCBHZXRPdXRsaW5lV2lkdGgobnNjb29yZCYgYVdpZHRoKSBjb25zdAogIHsKICAgIGlmICht
SGFzQ2FjaGVkT3V0bGluZSkgewogICAgICBhV2lkdGggPSBtQ2FjaGVkT3V0bGluZVdpZHRoOwog
ICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJldHVybiAwOwogIH0KCiAgUFJVaW50OCBHZXRPdXRs
aW5lU3R5bGUodm9pZCkgY29uc3QKICB7CiAgICByZXR1cm4gKG1PdXRsaW5lU3R5bGUgJiAweDFG
KTsKICB9CgogIHZvaWQgU2V0T3V0bGluZVN0eWxlKFBSVWludDggYVN0eWxlKQogIHsKICAgIG1P
dXRsaW5lU3R5bGUgJj0gfjB4MUY7CiAgICBtT3V0bGluZVN0eWxlIHw9IChhU3R5bGUgJiAweDFG
KTsKICB9CgoKICBQUkJvb2wgR2V0T3V0bGluZUNvbG9yKG5zY29sb3ImIGFDb2xvcikgY29uc3QK
ICB7CiAgICBpZiAoKG1PdXRsaW5lU3R5bGUgJiAweDYwKSA9PSAwKSB7CiAgICAgIGFDb2xvciA9
IG1PdXRsaW5lQ29sb3I7CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcmV0dXJuIDA7CiAgfQoK
ICB2b2lkIFNldE91dGxpbmVDb2xvcihuc2NvbG9yIGFDb2xvcikKICB7CiAgICBtT3V0bGluZUNv
bG9yID0gYUNvbG9yOwogICAgbU91dGxpbmVTdHlsZSAmPSB+MHg2MDsKICAgIG1PdXRsaW5lU3R5
bGUgfD0gMHg4MDsKICB9CgogIHZvaWQgU2V0T3V0bGluZUludmVydCh2b2lkKQogIHsKICAgIG1P
dXRsaW5lU3R5bGUgfD0gKDB4ODAgfCAweDYwKTsKICB9Cgpwcm90ZWN0ZWQ6CiAgUFJQYWNrZWRC
b29sIG1IYXNDYWNoZWRPdXRsaW5lOwogIG5zY29vcmQgbUNhY2hlZE91dGxpbmVXaWR0aDsKCiAg
UFJVaW50OCBtT3V0bGluZVN0eWxlOwogIG5zY29sb3IgbU91dGxpbmVDb2xvcjsKCgogIG5zY29v
cmQgbUJvcmRlcldpZHRoc1szXTsKfTsKCgpzdHJ1Y3QgbnNTdHlsZUxpc3QgOiBwdWJsaWMgbnNT
dHlsZVN0cnVjdCB7CiAgbnNTdHlsZUxpc3Qodm9pZCk7CiAgbnNTdHlsZUxpc3QoY29uc3QgbnNT
dHlsZUxpc3QmIGFTdHlsZUxpc3QpOwogIH5uc1N0eWxlTGlzdCh2b2lkKTsKCiAgdm9pZCogb3Bl
cmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB7CiAgICB2b2lk
KiByZXN1bHQgPSAwOwogICAgYUNvbnRleHQtPkFsbG9jYXRlRnJvbVNoZWxsKHN6LCAmcmVzdWx0
KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4dCog
YUNvbnRleHQpIHsKICAgIHRoaXMtPn5uc1N0eWxlTGlzdCgpOwogICAgYUNvbnRleHQtPkZyZWVU
b1NoZWxsKHNpemVvZihuc1N0eWxlTGlzdCksIHRoaXMpOwogIH07CgogIFBSSW50MzIgQ2FsY0Rp
ZmZlcmVuY2UoY29uc3QgbnNTdHlsZUxpc3QmIGFPdGhlcikgY29uc3Q7CgogIFBSVWludDggbUxp
c3RTdHlsZVR5cGU7CiAgUFJVaW50OCBtTGlzdFN0eWxlUG9zaXRpb247CiAgbnNTdHJpbmcgbUxp
c3RTdHlsZUltYWdlOwp9OwoKc3RydWN0IG5zU3R5bGVQb3NpdGlvbiA6IHB1YmxpYyBuc1N0eWxl
U3RydWN0IHsKICBuc1N0eWxlUG9zaXRpb24odm9pZCk7CiAgbnNTdHlsZVBvc2l0aW9uKGNvbnN0
IG5zU3R5bGVQb3NpdGlvbiYgYU90aGVyKTsKICB+bnNTdHlsZVBvc2l0aW9uKHZvaWQpOwoKICB2
b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsK
ICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3os
ICZyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXND
b250ZXh0KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVQb3NpdGlvbigpOwogICAgYUNv
bnRleHQtPkZyZWVUb1NoZWxsKHNpemVvZihuc1N0eWxlUG9zaXRpb24pLCB0aGlzKTsKICB9OwoK
ICBQUkludDMyIENhbGNEaWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVQb3NpdGlvbiYgYU90aGVyKSBj
b25zdDsKCiAgbnNTdHlsZVNpZGVzIG1PZmZzZXQ7CiAgbnNTdHlsZUNvb3JkIG1XaWR0aDsKICBu
c1N0eWxlQ29vcmQgbU1pbldpZHRoOwogIG5zU3R5bGVDb29yZCBtTWF4V2lkdGg7CiAgbnNTdHls
ZUNvb3JkIG1IZWlnaHQ7CiAgbnNTdHlsZUNvb3JkIG1NaW5IZWlnaHQ7CiAgbnNTdHlsZUNvb3Jk
IG1NYXhIZWlnaHQ7CiAgUFJVaW50OCBtQm94U2l6aW5nOwoKICBuc1N0eWxlQ29vcmQgbVpJbmRl
eDsKfTsKCnN0cnVjdCBuc1N0eWxlVGV4dFJlc2V0IDogcHVibGljIG5zU3R5bGVTdHJ1Y3Qgewog
IG5zU3R5bGVUZXh0UmVzZXQodm9pZCk7CiAgbnNTdHlsZVRleHRSZXNldChjb25zdCBuc1N0eWxl
VGV4dFJlc2V0JiBhT3RoZXIpOwogIH5uc1N0eWxlVGV4dFJlc2V0KHZvaWQpOwoKICB2b2lkKiBv
cGVyYXRvciBuZXcoc2l6ZV90IHN6LCBuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAgIHZv
aWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1
bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0
KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVUZXh0UmVzZXQoKTsKICAgIGFDb250ZXh0
LT5GcmVlVG9TaGVsbChzaXplb2YobnNTdHlsZVRleHRSZXNldCksIHRoaXMpOwogIH07CgogIFBS
SW50MzIgQ2FsY0RpZmZlcmVuY2UoY29uc3QgbnNTdHlsZVRleHRSZXNldCYgYU90aGVyKSBjb25z
dDsKCiAgUFJVaW50OCBtVGV4dERlY29yYXRpb247CiAgbnNTdHlsZUNvb3JkIG1WZXJ0aWNhbEFs
aWduOwp9OwoKc3RydWN0IG5zU3R5bGVUZXh0IDogcHVibGljIG5zU3R5bGVTdHJ1Y3QgewogIG5z
U3R5bGVUZXh0KHZvaWQpOwogIG5zU3R5bGVUZXh0KGNvbnN0IG5zU3R5bGVUZXh0JiBhT3RoZXIp
OwogIH5uc1N0eWxlVGV4dCh2b2lkKTsKCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwg
bnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB7CiAgICB2b2lkKiByZXN1bHQgPSAwOwogICAgYUNv
bnRleHQtPkFsbG9jYXRlRnJvbVNoZWxsKHN6LCAmcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7
CiAgfQogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAgIHRoaXMt
Pn5uc1N0eWxlVGV4dCgpOwogICAgYUNvbnRleHQtPkZyZWVUb1NoZWxsKHNpemVvZihuc1N0eWxl
VGV4dCksIHRoaXMpOwogIH07CgogIFBSSW50MzIgQ2FsY0RpZmZlcmVuY2UoY29uc3QgbnNTdHls
ZVRleHQmIGFPdGhlcikgY29uc3Q7CgogIFBSVWludDggbVRleHRBbGlnbjsKICBQUlVpbnQ4IG1U
ZXh0VHJhbnNmb3JtOwogIFBSVWludDggbVdoaXRlU3BhY2U7CgogIFBSVWludDggbVVuaWNvZGVC
aWRpOwoKCiAgbnNTdHlsZUNvb3JkIG1MZXR0ZXJTcGFjaW5nOwogIG5zU3R5bGVDb29yZCBtTGlu
ZUhlaWdodDsKICBuc1N0eWxlQ29vcmQgbVRleHRJbmRlbnQ7CiAgbnNTdHlsZUNvb3JkIG1Xb3Jk
U3BhY2luZzsKCiAgUFJCb29sIFdoaXRlU3BhY2VJc1NpZ25pZmljYW50KCkgY29uc3QgewogICAg
cmV0dXJuIG1XaGl0ZVNwYWNlID09IDE7CiAgfQp9OwoKc3RydWN0IG5zU3R5bGVWaXNpYmlsaXR5
IDogcHVibGljIG5zU3R5bGVTdHJ1Y3QgewogIG5zU3R5bGVWaXNpYmlsaXR5KG5zSVByZXNDb250
ZXh0KiBhUHJlc0NvbnRleHQpOwogIG5zU3R5bGVWaXNpYmlsaXR5KGNvbnN0IG5zU3R5bGVWaXNp
YmlsaXR5JiBhVmlzaWJpbGl0eSk7CiAgfm5zU3R5bGVWaXNpYmlsaXR5KCkge307CgogIHZvaWQq
IG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAg
dm9pZCogcmVzdWx0ID0gMDsKICAgIGFDb250ZXh0LT5BbGxvY2F0ZUZyb21TaGVsbChzeiwgJnJl
c3VsdCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2b2lkIERlc3Ryb3kobnNJUHJlc0NvbnRl
eHQqIGFDb250ZXh0KSB7CiAgICB0aGlzLT5+bnNTdHlsZVZpc2liaWxpdHkoKTsKICAgIGFDb250
ZXh0LT5GcmVlVG9TaGVsbChzaXplb2YobnNTdHlsZVZpc2liaWxpdHkpLCB0aGlzKTsKICB9OwoK
ICBQUkludDMyIENhbGNEaWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVWaXNpYmlsaXR5JiBhT3RoZXIp
IGNvbnN0OwoKICBQUlVpbnQ4IG1EaXJlY3Rpb247CiAgUFJVaW50OCBtVmlzaWJsZTsKICBuc0NP
TVB0cjxuc0lMYW5ndWFnZUF0b20+IG1MYW5ndWFnZTsKICBmbG9hdCBtT3BhY2l0eTsKCiAgUFJC
b29sIElzVmlzaWJsZSgpIGNvbnN0IHsKICAgICAgICAgICAgICAgIHJldHVybiAobVZpc2libGUg
PT0gMSk7CiAgICAgICAgfQoKICAgICAgICBQUkJvb2wgSXNWaXNpYmxlT3JDb2xsYXBzZWQoKSBj
b25zdCB7CiAgICAgICAgICAgICAgICByZXR1cm4gKChtVmlzaWJsZSA9PSAxKSB8fAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVZpc2libGUgPT0gMikp
OwogICAgICAgIH0KfTsKCnN0cnVjdCBuc1N0eWxlRGlzcGxheSA6IHB1YmxpYyBuc1N0eWxlU3Ry
dWN0IHsKICBuc1N0eWxlRGlzcGxheSgpOwogIG5zU3R5bGVEaXNwbGF5KGNvbnN0IG5zU3R5bGVE
aXNwbGF5JiBhT3RoZXIpOwogIH5uc1N0eWxlRGlzcGxheSgpIHt9OwoKICB2b2lkKiBvcGVyYXRv
ciBuZXcoc2l6ZV90IHN6LCBuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAgIHZvaWQqIHJl
c3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwog
ICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29u
dGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVEaXNwbGF5KCk7CiAgICBhQ29udGV4dC0+RnJlZVRv
U2hlbGwoc2l6ZW9mKG5zU3R5bGVEaXNwbGF5KSwgdGhpcyk7CiAgfTsKCiAgUFJJbnQzMiBDYWxj
RGlmZmVyZW5jZShjb25zdCBuc1N0eWxlRGlzcGxheSYgYU90aGVyKSBjb25zdDsKCiAgUFJVaW50
OCBtRGlzcGxheTsKICBuc1N0cmluZyBtQmluZGluZzsKICBQUlVpbnQ4IG1Qb3NpdGlvbjsKICBQ
UlVpbnQ4IG1GbG9hdHM7CiAgUFJVaW50OCBtQnJlYWtUeXBlOwogIFBSUGFja2VkQm9vbCBtQnJl
YWtCZWZvcmU7CiAgUFJQYWNrZWRCb29sIG1CcmVha0FmdGVyOwogIFBSVWludDggbU92ZXJmbG93
OwoKICBQUlVpbnQ4IG1DbGlwRmxhZ3M7CgoKCgoKCiAgbnNSZWN0IG1DbGlwOwoKCiAgUFJCb29s
IElzQmxvY2tMZXZlbCgpIGNvbnN0IHtyZXR1cm4gKDEgPT0gbURpc3BsYXkpIHx8CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQgPT0gbURpc3BsYXkpIHx8CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDggPT0gbURpc3BsYXkpO30KCiAgUFJCb29s
IElzRmxvYXRpbmcoKSBjb25zdCB7CiAgICByZXR1cm4gMCAhPSBtRmxvYXRzOwogIH0KCiAgUFJC
b29sIElzQWJzb2x1dGVseVBvc2l0aW9uZWQoKSBjb25zdCB7cmV0dXJuICgyID09IG1Qb3NpdGlv
bikgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMg
PT0gbVBvc2l0aW9uKTt9CgogIFBSQm9vbCBJc1Bvc2l0aW9uZWQoKSBjb25zdCB7cmV0dXJuIElz
QWJzb2x1dGVseVBvc2l0aW9uZWQoKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICgxID09IG1Qb3NpdGlvbik7fQp9OwoKc3RydWN0IG5zU3R5bGVUYWJsZTogcHVibGlj
IG5zU3R5bGVTdHJ1Y3QgewogIG5zU3R5bGVUYWJsZSh2b2lkKTsKICBuc1N0eWxlVGFibGUoY29u
c3QgbnNTdHlsZVRhYmxlJiBhT3RoZXIpOwogIH5uc1N0eWxlVGFibGUodm9pZCk7CgogIHZvaWQq
IG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAg
dm9pZCogcmVzdWx0ID0gMDsKICAgIGFDb250ZXh0LT5BbGxvY2F0ZUZyb21TaGVsbChzeiwgJnJl
c3VsdCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2b2lkIERlc3Ryb3kobnNJUHJlc0NvbnRl
eHQqIGFDb250ZXh0KSB7CiAgICB0aGlzLT5+bnNTdHlsZVRhYmxlKCk7CiAgICBhQ29udGV4dC0+
RnJlZVRvU2hlbGwoc2l6ZW9mKG5zU3R5bGVUYWJsZSksIHRoaXMpOwogIH07CgogIFBSSW50MzIg
Q2FsY0RpZmZlcmVuY2UoY29uc3QgbnNTdHlsZVRhYmxlJiBhT3RoZXIpIGNvbnN0OwoKICBQUlVp
bnQ4IG1MYXlvdXRTdHJhdGVneTsKICBQUlVpbnQ4IG1GcmFtZTsKICBQUlVpbnQ4IG1SdWxlczsK
ICBQUkludDMyIG1Db2xzOwogIFBSSW50MzIgbVNwYW47Cn07CgpzdHJ1Y3QgbnNTdHlsZVRhYmxl
Qm9yZGVyOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZVRhYmxlQm9yZGVyKG5zSVBy
ZXNDb250ZXh0KiBhQ29udGV4dCk7CiAgbnNTdHlsZVRhYmxlQm9yZGVyKGNvbnN0IG5zU3R5bGVU
YWJsZUJvcmRlciYgYU90aGVyKTsKICB+bnNTdHlsZVRhYmxlQm9yZGVyKHZvaWQpOwoKICB2b2lk
KiBvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAg
IHZvaWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZy
ZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250
ZXh0KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVUYWJsZUJvcmRlcigpOwogICAgYUNv
bnRleHQtPkZyZWVUb1NoZWxsKHNpemVvZihuc1N0eWxlVGFibGVCb3JkZXIpLCB0aGlzKTsKICB9
OwoKICBQUkludDMyIENhbGNEaWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVUYWJsZUJvcmRlciYgYU90
aGVyKSBjb25zdDsKCiAgUFJVaW50OCBtQm9yZGVyQ29sbGFwc2U7CiAgbnNTdHlsZUNvb3JkIG1C
b3JkZXJTcGFjaW5nWDsKICBuc1N0eWxlQ29vcmQgbUJvcmRlclNwYWNpbmdZOwogIFBSVWludDgg
bUNhcHRpb25TaWRlOwogIFBSVWludDggbUVtcHR5Q2VsbHM7Cn07CgplbnVtIG5zU3R5bGVDb250
ZW50VHlwZSB7CiAgZVN0eWxlQ29udGVudFR5cGVfU3RyaW5nID0gMSwKICBlU3R5bGVDb250ZW50
VHlwZV9VUkwgPSAxMCwKICBlU3R5bGVDb250ZW50VHlwZV9BdHRyID0gMjAsCiAgZVN0eWxlQ29u
dGVudFR5cGVfQ291bnRlciA9IDMwLAogIGVTdHlsZUNvbnRlbnRUeXBlX0NvdW50ZXJzID0gMzEs
CiAgZVN0eWxlQ29udGVudFR5cGVfT3BlblF1b3RlID0gNDAsCiAgZVN0eWxlQ29udGVudFR5cGVf
Q2xvc2VRdW90ZSA9IDQxLAogIGVTdHlsZUNvbnRlbnRUeXBlX05vT3BlblF1b3RlID0gNDIsCiAg
ZVN0eWxlQ29udGVudFR5cGVfTm9DbG9zZVF1b3RlID0gNDMKfTsKCnN0cnVjdCBuc1N0eWxlQ29u
dGVudERhdGEgewogIG5zU3R5bGVDb250ZW50VHlwZSBtVHlwZTsKICBuc1N0cmluZyBtQ29udGVu
dDsKfTsKCnN0cnVjdCBuc1N0eWxlQ291bnRlckRhdGEgewogIG5zU3RyaW5nIG1Db3VudGVyOwog
IFBSSW50MzIgbVZhbHVlOwp9OwoKCgoKc3RydWN0IG5zU3R5bGVRdW90ZXMgOiBwdWJsaWMgbnNT
dHlsZVN0cnVjdCB7CiAgbnNTdHlsZVF1b3RlcygpOwogIG5zU3R5bGVRdW90ZXMoY29uc3QgbnNT
dHlsZVF1b3RlcyYgYVF1b3Rlcyk7CiAgfm5zU3R5bGVRdW90ZXMoKTsKCiAgdm9pZCogb3BlcmF0
b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB7CiAgICB2b2lkKiBy
ZXN1bHQgPSAwOwogICAgYUNvbnRleHQtPkFsbG9jYXRlRnJvbVNoZWxsKHN6LCAmcmVzdWx0KTsK
ICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYUNv
bnRleHQpIHsKICAgIHRoaXMtPn5uc1N0eWxlUXVvdGVzKCk7CiAgICBhQ29udGV4dC0+RnJlZVRv
U2hlbGwoc2l6ZW9mKG5zU3R5bGVRdW90ZXMpLCB0aGlzKTsKICB9OwoKICBQUkludDMyIENhbGNE
aWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVRdW90ZXMmIGFPdGhlcikgY29uc3Q7CgoKICBQUlVpbnQz
MiBRdW90ZXNDb3VudCh2b2lkKSBjb25zdCB7IHJldHVybiBtUXVvdGVzQ291bnQ7IH0KICBuc3Jl
c3VsdCBHZXRRdW90ZXNBdChQUlVpbnQzMiBhSW5kZXgsIG5zU3RyaW5nJiBhT3BlbiwgbnNTdHJp
bmcmIGFDbG9zZSkgY29uc3QgewogICAgaWYgKGFJbmRleCA8IG1RdW90ZXNDb3VudCkgewogICAg
ICBhSW5kZXggKj0gMjsKICAgICAgYU9wZW4gPSBtUXVvdGVzW2FJbmRleF07CiAgICAgIGFDbG9z
ZSA9IG1RdW90ZXNbKythSW5kZXhdOwogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiAo
KG5zcmVzdWx0KSAweDgwMDcwMDU3TCk7CiAgfQoKICBuc3Jlc3VsdCBBbGxvY2F0ZVF1b3RlcyhQ
UlVpbnQzMiBhQ291bnQpIHsKICAgIGlmIChhQ291bnQgIT0gbVF1b3Rlc0NvdW50KSB7CiAgICAg
IGlmIChtUXVvdGVzKSB7IGRlbGV0ZVtdIG1RdW90ZXM7IG1RdW90ZXMgPSAwOyB9OwogICAgICBp
ZiAoYUNvdW50KSB7CiAgICAgICAgbVF1b3RlcyA9IG5ldyBuc1N0cmluZ1thQ291bnQgKiAyXTsK
ICAgICAgICBpZiAoISBtUXVvdGVzKSB7CiAgICAgICAgICBtUXVvdGVzQ291bnQgPSAwOwogICAg
ICAgICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsKICAgICAgICB9CiAgICAgIH0K
ICAgICAgbVF1b3Rlc0NvdW50ID0gYUNvdW50OwogICAgfQogICAgcmV0dXJuIDA7CiAgfQoKICBu
c3Jlc3VsdCBTZXRRdW90ZXNBdChQUlVpbnQzMiBhSW5kZXgsIGNvbnN0IG5zU3RyaW5nJiBhT3Bl
biwgY29uc3QgbnNTdHJpbmcmIGFDbG9zZSkgewogICAgaWYgKGFJbmRleCA8IG1RdW90ZXNDb3Vu
dCkgewogICAgICBhSW5kZXggKj0gMjsKICAgICAgbVF1b3Rlc1thSW5kZXhdID0gYU9wZW47CiAg
ICAgIG1RdW90ZXNbKythSW5kZXhdID0gYUNsb3NlOwogICAgICByZXR1cm4gMDsKICAgIH0KICAg
IHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDU3TCk7CiAgfQoKcHJvdGVjdGVkOgogIFBSVWlu
dDMyIG1RdW90ZXNDb3VudDsKICBuc1N0cmluZyogbVF1b3RlczsKfTsKCnN0cnVjdCBuc1N0eWxl
Q29udGVudDogcHVibGljIG5zU3R5bGVTdHJ1Y3QgewogIG5zU3R5bGVDb250ZW50KHZvaWQpOwog
IG5zU3R5bGVDb250ZW50KGNvbnN0IG5zU3R5bGVDb250ZW50JiBhQ29udGVudCk7CiAgfm5zU3R5
bGVDb250ZW50KHZvaWQpOwoKICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBuc0lQcmVz
Q29udGV4dCogYUNvbnRleHQpIHsKICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+
QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAg
dm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5
bGVDb250ZW50KCk7CiAgICBhQ29udGV4dC0+RnJlZVRvU2hlbGwoc2l6ZW9mKG5zU3R5bGVDb250
ZW50KSwgdGhpcyk7CiAgfTsKCiAgUFJJbnQzMiBDYWxjRGlmZmVyZW5jZShjb25zdCBuc1N0eWxl
Q29udGVudCYgYU90aGVyKSBjb25zdDsKCiAgUFJVaW50MzIgQ29udGVudENvdW50KHZvaWQpIGNv
bnN0IHsgcmV0dXJuIG1Db250ZW50Q291bnQ7IH0KICBuc3Jlc3VsdCBHZXRDb250ZW50QXQoUFJV
aW50MzIgYUluZGV4LCBuc1N0eWxlQ29udGVudFR5cGUmIGFUeXBlLCBuc1N0cmluZyYgYUNvbnRl
bnQpIGNvbnN0IHsKICAgIGlmIChhSW5kZXggPCBtQ29udGVudENvdW50KSB7CiAgICAgIGFUeXBl
ID0gbUNvbnRlbnRzW2FJbmRleF0ubVR5cGU7CiAgICAgIGFDb250ZW50ID0gbUNvbnRlbnRzW2FJ
bmRleF0ubUNvbnRlbnQ7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgcmV0dXJuICgobnNyZXN1
bHQpIDB4ODAwNzAwNTdMKTsKICB9CgogIG5zcmVzdWx0IEFsbG9jYXRlQ29udGVudHMoUFJVaW50
MzIgYUNvdW50KSB7CiAgICBpZiAoYUNvdW50ICE9IG1Db250ZW50Q291bnQpIHsKICAgICAgaWYg
KG1Db250ZW50cykgeyBkZWxldGVbXSBtQ29udGVudHM7IG1Db250ZW50cyA9IDA7IH07CiAgICAg
IGlmIChhQ291bnQpIHsKICAgICAgICBtQ29udGVudHMgPSBuZXcgbnNTdHlsZUNvbnRlbnREYXRh
W2FDb3VudF07CiAgICAgICAgaWYgKCEgbUNvbnRlbnRzKSB7CiAgICAgICAgICBtQ29udGVudENv
dW50ID0gMDsKICAgICAgICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7CiAgICAg
ICAgfQogICAgICB9CiAgICAgIG1Db250ZW50Q291bnQgPSBhQ291bnQ7CiAgICB9CiAgICByZXR1
cm4gMDsKICB9CgogIG5zcmVzdWx0IFNldENvbnRlbnRBdChQUlVpbnQzMiBhSW5kZXgsIG5zU3R5
bGVDb250ZW50VHlwZSBhVHlwZSwgY29uc3QgbnNTdHJpbmcmIGFDb250ZW50KSB7CiAgICBpZiAo
YUluZGV4IDwgbUNvbnRlbnRDb3VudCkgewogICAgICBtQ29udGVudHNbYUluZGV4XS5tVHlwZSA9
IGFUeXBlOwogICAgICBpZiAoYVR5cGUgPCBlU3R5bGVDb250ZW50VHlwZV9PcGVuUXVvdGUpIHsK
ICAgICAgICBtQ29udGVudHNbYUluZGV4XS5tQ29udGVudCA9IGFDb250ZW50OwogICAgICB9CiAg
ICAgIGVsc2UgewogICAgICAgIG1Db250ZW50c1thSW5kZXhdLm1Db250ZW50LlRydW5jYXRlKCk7
CiAgICAgIH0KICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4
MDA3MDA1N0wpOwogIH0KCiAgUFJVaW50MzIgQ291bnRlckluY3JlbWVudENvdW50KHZvaWQpIGNv
bnN0IHsgcmV0dXJuIG1JbmNyZW1lbnRDb3VudDsgfQogIG5zcmVzdWx0IEdldENvdW50ZXJJbmNy
ZW1lbnRBdChQUlVpbnQzMiBhSW5kZXgsIG5zU3RyaW5nJiBhQ291bnRlciwgUFJJbnQzMiYgYUlu
Y3JlbWVudCkgY29uc3QgewogICAgaWYgKGFJbmRleCA8IG1JbmNyZW1lbnRDb3VudCkgewogICAg
ICBhQ291bnRlciA9IG1JbmNyZW1lbnRzW2FJbmRleF0ubUNvdW50ZXI7CiAgICAgIGFJbmNyZW1l
bnQgPSBtSW5jcmVtZW50c1thSW5kZXhdLm1WYWx1ZTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAg
ICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA3MDA1N0wpOwogIH0KCiAgbnNyZXN1bHQgQWxsb2Nh
dGVDb3VudGVySW5jcmVtZW50cyhQUlVpbnQzMiBhQ291bnQpIHsKICAgIGlmIChhQ291bnQgIT0g
bUluY3JlbWVudENvdW50KSB7CiAgICAgIGlmIChtSW5jcmVtZW50cykgeyBkZWxldGVbXSBtSW5j
cmVtZW50czsgbUluY3JlbWVudHMgPSAwOyB9OwogICAgICBpZiAoYUNvdW50KSB7CiAgICAgICAg
bUluY3JlbWVudHMgPSBuZXcgbnNTdHlsZUNvdW50ZXJEYXRhW2FDb3VudF07CiAgICAgICAgaWYg
KCEgbUluY3JlbWVudHMpIHsKICAgICAgICAgIG1JbmNyZW1lbnRDb3VudCA9IDA7CiAgICAgICAg
ICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA3MDAwZUwpOwogICAgICAgIH0KICAgICAgfQogICAg
ICBtSW5jcmVtZW50Q291bnQgPSBhQ291bnQ7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CgogIG5z
cmVzdWx0IFNldENvdW50ZXJJbmNyZW1lbnRBdChQUlVpbnQzMiBhSW5kZXgsIGNvbnN0IG5zU3Ry
aW5nJiBhQ291bnRlciwgUFJJbnQzMiBhSW5jcmVtZW50KSB7CiAgICBpZiAoYUluZGV4IDwgbUlu
Y3JlbWVudENvdW50KSB7CiAgICAgIG1JbmNyZW1lbnRzW2FJbmRleF0ubUNvdW50ZXIgPSBhQ291
bnRlcjsKICAgICAgbUluY3JlbWVudHNbYUluZGV4XS5tVmFsdWUgPSBhSW5jcmVtZW50OwogICAg
ICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDU3TCk7CiAg
fQoKICBQUlVpbnQzMiBDb3VudGVyUmVzZXRDb3VudCh2b2lkKSBjb25zdCB7IHJldHVybiBtUmVz
ZXRDb3VudDsgfQogIG5zcmVzdWx0IEdldENvdW50ZXJSZXNldEF0KFBSVWludDMyIGFJbmRleCwg
bnNTdHJpbmcmIGFDb3VudGVyLCBQUkludDMyJiBhVmFsdWUpIGNvbnN0IHsKICAgIGlmIChhSW5k
ZXggPCBtUmVzZXRDb3VudCkgewogICAgICBhQ291bnRlciA9IG1SZXNldHNbYUluZGV4XS5tQ291
bnRlcjsKICAgICAgYVZhbHVlID0gbVJlc2V0c1thSW5kZXhdLm1WYWx1ZTsKICAgICAgcmV0dXJu
IDA7CiAgICB9CiAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA3MDA1N0wpOwogIH0KCiAgbnNy
ZXN1bHQgQWxsb2NhdGVDb3VudGVyUmVzZXRzKFBSVWludDMyIGFDb3VudCkgewogICAgaWYgKGFD
b3VudCAhPSBtUmVzZXRDb3VudCkgewogICAgICBpZiAobVJlc2V0cykgeyBkZWxldGVbXSBtUmVz
ZXRzOyBtUmVzZXRzID0gMDsgfTsKICAgICAgaWYgKGFDb3VudCkgewogICAgICAgIG1SZXNldHMg
PSBuZXcgbnNTdHlsZUNvdW50ZXJEYXRhW2FDb3VudF07CiAgICAgICAgaWYgKCEgbVJlc2V0cykg
ewogICAgICAgICAgbVJlc2V0Q291bnQgPSAwOwogICAgICAgICAgcmV0dXJuICgobnNyZXN1bHQp
IDB4ODAwNzAwMGVMKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgbVJlc2V0Q291bnQgPSBhQ291
bnQ7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CgogIG5zcmVzdWx0IFNldENvdW50ZXJSZXNldEF0
KFBSVWludDMyIGFJbmRleCwgY29uc3QgbnNTdHJpbmcmIGFDb3VudGVyLCBQUkludDMyIGFWYWx1
ZSkgewogICAgaWYgKGFJbmRleCA8IG1SZXNldENvdW50KSB7CiAgICAgIG1SZXNldHNbYUluZGV4
XS5tQ291bnRlciA9IGFDb3VudGVyOwogICAgICBtUmVzZXRzW2FJbmRleF0ubVZhbHVlID0gYVZh
bHVlOwogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcw
MDU3TCk7CiAgfQoKICBuc1N0eWxlQ29vcmQgbU1hcmtlck9mZnNldDsKCnByb3RlY3RlZDoKICBQ
UlVpbnQzMiBtQ29udGVudENvdW50OwogIG5zU3R5bGVDb250ZW50RGF0YSogbUNvbnRlbnRzOwoK
ICBQUlVpbnQzMiBtSW5jcmVtZW50Q291bnQ7CiAgbnNTdHlsZUNvdW50ZXJEYXRhKiBtSW5jcmVt
ZW50czsKCiAgUFJVaW50MzIgbVJlc2V0Q291bnQ7CiAgbnNTdHlsZUNvdW50ZXJEYXRhKiBtUmVz
ZXRzOwp9OwoKc3RydWN0IG5zU3R5bGVVSVJlc2V0OiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAg
bnNTdHlsZVVJUmVzZXQodm9pZCk7CiAgbnNTdHlsZVVJUmVzZXQoY29uc3QgbnNTdHlsZVVJUmVz
ZXQmIGFPdGhlcik7CiAgfm5zU3R5bGVVSVJlc2V0KHZvaWQpOwoKICB2b2lkKiBvcGVyYXRvciBu
ZXcoc2l6ZV90IHN6LCBuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAgIHZvaWQqIHJlc3Vs
dCA9IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwogICAg
cmV0dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4
dCkgewogICAgdGhpcy0+fm5zU3R5bGVVSVJlc2V0KCk7CiAgICBhQ29udGV4dC0+RnJlZVRvU2hl
bGwoc2l6ZW9mKG5zU3R5bGVVSVJlc2V0KSwgdGhpcyk7CiAgfTsKCiAgUFJJbnQzMiBDYWxjRGlm
ZmVyZW5jZShjb25zdCBuc1N0eWxlVUlSZXNldCYgYU90aGVyKSBjb25zdDsKCiAgUFJVaW50OCBt
VXNlclNlbGVjdDsKICBQUlVuaWNoYXIgbUtleUVxdWl2YWxlbnQ7CiAgUFJVaW50OCBtUmVzaXpl
cjsKfTsKCnN0cnVjdCBuc1N0eWxlVXNlckludGVyZmFjZTogcHVibGljIG5zU3R5bGVTdHJ1Y3Qg
ewogIG5zU3R5bGVVc2VySW50ZXJmYWNlKHZvaWQpOwogIG5zU3R5bGVVc2VySW50ZXJmYWNlKGNv
bnN0IG5zU3R5bGVVc2VySW50ZXJmYWNlJiBhT3RoZXIpOwogIH5uc1N0eWxlVXNlckludGVyZmFj
ZSh2b2lkKTsKCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQq
IGFDb250ZXh0KSB7CiAgICB2b2lkKiByZXN1bHQgPSAwOwogICAgYUNvbnRleHQtPkFsbG9jYXRl
RnJvbVNoZWxsKHN6LCAmcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZvaWQgRGVz
dHJveShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAgIHRoaXMtPn5uc1N0eWxlVXNlcklu
dGVyZmFjZSgpOwogICAgYUNvbnRleHQtPkZyZWVUb1NoZWxsKHNpemVvZihuc1N0eWxlVXNlcklu
dGVyZmFjZSksIHRoaXMpOwogIH07CgogIFBSSW50MzIgQ2FsY0RpZmZlcmVuY2UoY29uc3QgbnNT
dHlsZVVzZXJJbnRlcmZhY2UmIGFPdGhlcikgY29uc3Q7CgogIFBSVWludDggbVVzZXJJbnB1dDsK
ICBQUlVpbnQ4IG1Vc2VyTW9kaWZ5OwogIFBSVWludDggbVVzZXJGb2N1czsKCiAgUFJVaW50OCBt
Q3Vyc29yOwogIG5zU3RyaW5nIG1DdXJzb3JJbWFnZTsKfTsKCgpzdHJ1Y3QgbnNTdHlsZVhVTCA6
IHB1YmxpYyBuc1N0eWxlU3RydWN0IHsKICBuc1N0eWxlWFVMKCk7CiAgbnNTdHlsZVhVTChjb25z
dCBuc1N0eWxlWFVMJiBhU291cmNlKTsKICB+bnNTdHlsZVhVTCgpOwoKICB2b2lkKiBvcGVyYXRv
ciBuZXcoc2l6ZV90IHN6LCBuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAgIHZvaWQqIHJl
c3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwog
ICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29u
dGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVYVUwoKTsKICAgIGFDb250ZXh0LT5GcmVlVG9TaGVs
bChzaXplb2YobnNTdHlsZVhVTCksIHRoaXMpOwogIH07CgogIFBSSW50MzIgQ2FsY0RpZmZlcmVu
Y2UoY29uc3QgbnNTdHlsZVhVTCYgYU90aGVyKSBjb25zdDsKCgoKCgogIFBSVWludDggbUJveE9y
aWVudDsKfTsKCgoKCgoKc3RydWN0IG5zQm9yZGVyRWRnZXM7CgoKc3RydWN0IG5zQm9yZGVyRWRn
ZQp7CgogIG5zY29vcmQgbVdpZHRoOwoKICBuc2Nvb3JkIG1MZW5ndGg7CiAgUFJVaW50OCBtU3R5
bGU7CiAgbnNjb2xvciBtQ29sb3I7CgogIFBSVWludDggbVNpZGU7CgogIG5zQm9yZGVyRWRnZXMg
KiBtSW5zaWRlTmVpZ2hib3I7CgogIG5zQm9yZGVyRWRnZSgpOwp9OwoKaW5saW5lIG5zQm9yZGVy
RWRnZTo6bnNCb3JkZXJFZGdlKCkKewogIG1XaWR0aD0wOwogIG1MZW5ndGg9MDsKICBtU3R5bGU9
MDsKICBtQ29sb3I9MDsKICBtU2lkZT0zOwogIG1JbnNpZGVOZWlnaGJvciA9IDA7Cn07CgoKCgpz
dHJ1Y3QgbnNCb3JkZXJFZGdlcwp7CiAgbnNWb2lkQXJyYXkgbUVkZ2VzWzRdOwogIG5zTWFyZ2lu
IG1NYXhCb3JkZXJXaWR0aDsKICBQUlBhY2tlZEJvb2wgbU91dHNpZGVFZGdlOwoKICBuc0JvcmRl
ckVkZ2VzKCk7Cn07CgppbmxpbmUgbnNCb3JkZXJFZGdlczo6bnNCb3JkZXJFZGdlcygpCnsKICBt
TWF4Qm9yZGVyV2lkdGguU2l6ZVRvKDAsMCwwLDApOwogIG1PdXRzaWRlRWRnZSA9IDE7Cn07CiMg
MzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIiAyCiMgMSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zU3R5bGVDb29yZC5oIiAxCiMgMzMgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lGcmFtZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRN
TFJlZmxvd1N0YXRlLmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTFJl
Zmxvd1N0YXRlLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zbGF5b3V0LmgiIDEK
IyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTFJlZmxvd1N0YXRlLmgiIDIKCmNs
YXNzIG5zSUZyYW1lOwpjbGFzcyBuc0lQcmVzQ29udGV4dDsKY2xhc3MgbnNJUmVmbG93Q29tbWFu
ZDsKY2xhc3MgbnNJUmVuZGVyaW5nQ29udGV4dDsKY2xhc3MgbnNJU3BhY2VNYW5hZ2VyOwpjbGFz
cyBuc0xpbmVMYXlvdXQ7CgpzdHJ1Y3QgbnNTdHlsZURpc3BsYXk7CnN0cnVjdCBuc1N0eWxlVmlz
aWJpbGl0eTsKc3RydWN0IG5zU3R5bGVQb3NpdGlvbjsKc3RydWN0IG5zU3R5bGVCb3JkZXI7CnN0
cnVjdCBuc1N0eWxlTWFyZ2luOwpzdHJ1Y3QgbnNTdHlsZVBhZGRpbmc7CnN0cnVjdCBuc1N0eWxl
VGV4dDsKc3RydWN0IG5zSHlwb3RoZXRpY2FsQm94OwojIDU4ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNIVE1MUmVmbG93U3RhdGUuaCIKZW51bSBuc1JlZmxvd1JlYXNvbiB7CiAgZVJlZmxv
d1JlYXNvbl9Jbml0aWFsID0gMCwKICBlUmVmbG93UmVhc29uX0luY3JlbWVudGFsID0gMSwKICBl
UmVmbG93UmVhc29uX1Jlc2l6ZSA9IDIsCiAgZVJlZmxvd1JlYXNvbl9TdHlsZUNoYW5nZSA9IDMs
CgogIGVSZWZsb3dSZWFzb25fRGlydHkgPSA0Cn07CgoKCgp0eXBlZGVmIFBSVWludDMyIG5zQ1NT
RnJhbWVUeXBlOwojIDExNCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTFJlZmxvd1N0
YXRlLmgiCnN0cnVjdCBuc0hUTUxSZWZsb3dTdGF0ZSB7CgoKICBjb25zdCBuc0hUTUxSZWZsb3dT
dGF0ZSogcGFyZW50UmVmbG93U3RhdGU7CgoKICBuc0lGcmFtZSogZnJhbWU7CgoKICBuc1JlZmxv
d1JlYXNvbiByZWFzb247CgoKICBuc0lSZWZsb3dDb21tYW5kKiByZWZsb3dDb21tYW5kOwojIDEz
NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTFJlZmxvd1N0YXRlLmgiCiAgbnNjb29y
ZCBhdmFpbGFibGVXaWR0aCwgYXZhaWxhYmxlSGVpZ2h0OwoKCiAgbnNJUmVuZGVyaW5nQ29udGV4
dCogcmVuZENvbnRleHQ7CgoKICBQUlBhY2tlZEJvb2wgaXNUb3BPZlBhZ2U7CgoKCiAgbnNDU1NG
cmFtZVR5cGUgbUZyYW1lVHlwZTsKCgogIG5zSVNwYWNlTWFuYWdlciogbVNwYWNlTWFuYWdlcjsK
CgogIG5zTGluZUxheW91dCogbUxpbmVMYXlvdXQ7CiMgMTY0ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNIVE1MUmVmbG93U3RhdGUuaCIKICBuc2Nvb3JkIG1Db21wdXRlZFdpZHRoOwojIDE3
OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTFJlZmxvd1N0YXRlLmgiCiAgbnNjb29y
ZCBtQ29tcHV0ZWRIZWlnaHQ7CgoKICBuc01hcmdpbiBtQ29tcHV0ZWRNYXJnaW47CgoKICBuc01h
cmdpbiBtQ29tcHV0ZWRCb3JkZXJQYWRkaW5nOwoKCiAgbnNNYXJnaW4gbUNvbXB1dGVkUGFkZGlu
ZzsKCgoKICBuc01hcmdpbiBtQ29tcHV0ZWRPZmZzZXRzOwoKCiAgbnNjb29yZCBtQ29tcHV0ZWRN
aW5XaWR0aCwgbUNvbXB1dGVkTWF4V2lkdGg7CiAgbnNjb29yZCBtQ29tcHV0ZWRNaW5IZWlnaHQs
IG1Db21wdXRlZE1heEhlaWdodDsKCgogIG5zY29vcmQgbUNvbXBhY3RNYXJnaW5XaWR0aDsKCgoK
CgoKICBuc2Nvb3JkIG1BbGlnbkNoYXJPZmZzZXQ7CgoKCiAgUFJQYWNrZWRCb29sIG1Vc2VBbGln
bkNoYXJPZmZzZXQ7CgoKICBjb25zdCBuc1N0eWxlRGlzcGxheSogbVN0eWxlRGlzcGxheTsKICBj
b25zdCBuc1N0eWxlVmlzaWJpbGl0eSogbVN0eWxlVmlzaWJpbGl0eTsKICBjb25zdCBuc1N0eWxl
UG9zaXRpb24qIG1TdHlsZVBvc2l0aW9uOwogIGNvbnN0IG5zU3R5bGVCb3JkZXIqIG1TdHlsZUJv
cmRlcjsKICBjb25zdCBuc1N0eWxlTWFyZ2luKiBtU3R5bGVNYXJnaW47CiAgY29uc3QgbnNTdHls
ZVBhZGRpbmcqIG1TdHlsZVBhZGRpbmc7CiAgY29uc3QgbnNTdHlsZVRleHQqIG1TdHlsZVRleHQ7
CgoKCiAgUFJJbnQzMiBtUmVmbG93RGVwdGg7CgoKICBuc2Nvb3JkIG1SaWdodEVkZ2U7CiMgMjQw
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIVE1MUmVmbG93U3RhdGUuaCIKICBuc0hUTUxS
ZWZsb3dTdGF0ZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAg
ICAgIG5zSUZyYW1lKiBhRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgbnNSZWZsb3dSZWFzb24g
YVJlYXNvbiwKICAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0KiBhUmVuZGVy
aW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1NpemUmIGFBdmFpbGFibGVT
cGFjZSk7CgoKCiAgbnNIVE1MUmVmbG93U3RhdGUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4
dCwKICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAg
ICAgIG5zSVJlZmxvd0NvbW1hbmQmIGFSZWZsb3dDb21tYW5kLAogICAgICAgICAgICAgICAgICAg
IG5zSVJlbmRlcmluZ0NvbnRleHQqIGFSZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG5zU2l6ZSYgYUF2YWlsYWJsZVNwYWNlKTsKCgoKCiAgbnNIVE1MUmVmbG93U3Rh
dGUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICBjb25z
dCBuc0hUTUxSZWZsb3dTdGF0ZSYgYVBhcmVudFJlZmxvd1N0YXRlLAogICAgICAgICAgICAgICAg
ICAgIG5zSUZyYW1lKiBhRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNTaXplJiBh
QXZhaWxhYmxlU3BhY2UsCiAgICAgICAgICAgICAgICAgICAgbnNSZWZsb3dSZWFzb24gYVJlYXNv
bik7CgoKCiAgbnNIVE1MUmVmbG93U3RhdGUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwK
ICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSYgYVBhcmVudFJlZmxv
d1N0YXRlLAogICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWUsCiAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbnNTaXplJiBhQXZhaWxhYmxlU3BhY2UpOwoKCgogIG5zSFRNTFJlZmxv
d1N0YXRlKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg
Y29uc3QgbnNIVE1MUmVmbG93U3RhdGUmIGFQYXJlbnRSZWZsb3dTdGF0ZSwKICAgICAgICAgICAg
ICAgICAgICBuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU2l6
ZSYgYUF2YWlsYWJsZVNwYWNlLAogICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5p
bmdCbG9ja1dpZHRoLAogICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9j
a0hlaWdodCk7CgoKCgoKCiAgc3RhdGljIGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlKgogICAgR2V0
Q29udGFpbmluZ0Jsb2NrUmVmbG93U3RhdGUoY29uc3QgbnNIVE1MUmVmbG93U3RhdGUqIGFQYXJl
bnRSUyk7CgoKCgoKCiAgc3RhdGljIG5zY29vcmQKICAgIEdldENvbnRhaW5pbmdCbG9ja0NvbnRl
bnRXaWR0aChjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSogYVBhcmVudFJTKTsKCgoKCgoKICBzdGF0
aWMgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUqCiAgICBHZXRQYWdlQm94UmVmbG93U3RhdGUoY29u
c3QgbnNIVE1MUmVmbG93U3RhdGUqIGFQYXJlbnRSUyk7CiMgMzExICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNIVE1MUmVmbG93U3RhdGUuaCIKICBzdGF0aWMgdm9pZCBDb21wdXRlQm9yZGVy
UGFkZGluZ0Zvcihuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlKiBhUGFyZW50UlMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNNYXJnaW4mIGFSZXN1bHQpOwoKCgoKCgogIHN0
YXRpYyBuc2Nvb3JkIENhbGNMaW5lSGVpZ2h0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCogYVJl
bmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUq
IGFGcmFtZSk7CgogIHN0YXRpYyBQUkJvb2wgVXNlQ29tcHV0ZWRIZWlnaHQoKTsKCiAgc3RhdGlj
IG5zQ1NTRnJhbWVUeXBlIERldGVybWluZUZyYW1lVHlwZShuc0lGcmFtZSogYUZyYW1lKTsKCiAg
dm9pZCBDb21wdXRlQ29udGFpbmluZ0Jsb2NrUmVjdGFuZ2xlKG5zSVByZXNDb250ZXh0KiBhUHJl
c0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5z
SFRNTFJlZmxvd1N0YXRlKiBhQ29udGFpbmluZ0Jsb2NrUlMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zY29vcmQmIGFDb250YWluaW5nQmxvY2tXaWR0aCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCYgYUNvbnRhaW5pbmdCbG9j
a0hlaWdodCk7CgogIHZvaWQgQ2FsY3VsYXRlQmxvY2tTaWRlTWFyZ2lucyhuc2Nvb3JkIGFBdmFp
bFdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFDb21wdXRl
ZFdpZHRoKTsKCgpwcm90ZWN0ZWQ6CgoKICB2b2lkIEluaXQobnNJUHJlc0NvbnRleHQqIGFQcmVz
Q29udGV4dCwKICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmluZ0Jsb2NrV2lkdGggPSAtMSwK
ICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gLTEpOwoKICB2b2lk
IEluaXRDb25zdHJhaW50cyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAg
ICAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja1dpZHRoLAogICAgICAgICAgICAg
ICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja0hlaWdodCk7CgogIHZvaWQgQ2FsY3Vs
YXRlSHlwb3RoZXRpY2FsQm94KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFQbGFjZWhvbGRlckZyYW1lLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhQmxvY2tGcmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc01hcmdpbiYgYUJsb2NrQ29udGVudEFyZWEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFBYnNvbHV0ZUNvbnRhaW5p
bmdCbG9ja0ZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSHlwb3RoZXRp
Y2FsQm94JiBhSHlwb3RoZXRpY2FsQm94KTsKCiAgdm9pZCBJbml0QWJzb2x1dGVDb25zdHJhaW50
cyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUqIGNicnMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tXaWR0aCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja0hlaWdodCk7CgogIHZvaWQg
Q29tcHV0ZVJlbGF0aXZlT2Zmc2V0cyhjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSogY2JycywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmluZ0Jsb2NrV2lkdGgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja0hl
aWdodCk7CgogIHZvaWQgQ29tcHV0ZUJsb2NrQm94RGF0YShuc0lQcmVzQ29udGV4dCogYVByZXND
b250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0hUTUxSZWZsb3dTdGF0
ZSogY2JycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNTdHlsZVVuaXQgYVdpZHRoVW5p
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNTdHlsZVVuaXQgYUhlaWdodFVuaXQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja1dpZHRoLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tIZWlnaHQp
OwoKICB2b2lkIENvbXB1dGVIb3Jpem9udGFsVmFsdWUobnNjb29yZCBhQ29udGFpbmluZ0Jsb2Nr
V2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1N0eWxlVW5pdCBh
VW5pdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU3R5bGVD
b29yZCYgYUNvb3JkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29y
ZCYgYVJlc3VsdCk7CgogIHZvaWQgQ29tcHV0ZVZlcnRpY2FsVmFsdWUobnNjb29yZCBhQ29udGFp
bmluZ0Jsb2NrSGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zU3R5
bGVVbml0IGFVbml0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5z
U3R5bGVDb29yZCYgYUNvb3JkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
Y29vcmQmIGFSZXN1bHQpOwoKICBzdGF0aWMgbnNDU1NGcmFtZVR5cGUgRGV0ZXJtaW5lRnJhbWVU
eXBlKG5zSUZyYW1lKiBhRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBuc1N0eWxlRGlzcGxheSogYURpc3BsYXkpOwoKCgogIHZvaWQgQ29tcHV0
ZU1hcmdpbihuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tXaWR0aCwKICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUqIGFDb250YWluaW5nQmxvY2tSUyk7CgoKCiAgdm9p
ZCBDb21wdXRlUGFkZGluZyhuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tXaWR0aCwKICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlKiBhQ29udGFpbmluZ0Jsb2NrUlMp
OwoKCgoKICB2b2lkIENvbXB1dGVNaW5NYXhWYWx1ZXMobnNjb29yZCBhQ29udGFpbmluZ0Jsb2Nr
V2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9j
a0hlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNIVE1MUmVmbG93U3Rh
dGUqIGFDb250YWluaW5nQmxvY2tSUyk7CgogIG5zY29vcmQgQ2FsY3VsYXRlSG9yaXpCb3JkZXJQ
YWRkaW5nTWFyZ2luKG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKCgoKCgogIHZvaWQg
QWRqdXN0Q29tcHV0ZWRIZWlnaHQodm9pZCk7CiAgdm9pZCBBZGp1c3RDb21wdXRlZFdpZHRoKHZv
aWQpOwp9OwojIDM0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIgMgojIDU1
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKY2xhc3MgbnNJQXRvbTsKY2xh
c3MgbnNJQ29udGVudDsKY2xhc3MgbnNJUHJlc0NvbnRleHQ7CmNsYXNzIG5zSVByZXNTaGVsbDsK
Y2xhc3MgbnNJUmVuZGVyaW5nQ29udGV4dDsKY2xhc3MgbnNJU2l6ZU9mSGFuZGxlcjsKY2xhc3Mg
bnNJU3R5bGVDb250ZXh0OwpjbGFzcyBuc0lWaWV3OwpjbGFzcyBuc0lXaWRnZXQ7CmNsYXNzIG5z
QXV0b1N0cmluZzsKY2xhc3MgbnNTdHJpbmc7CmNsYXNzIG5zSUZvY3VzVHJhY2tlcjsKY2xhc3Mg
bnNTdHlsZUNoYW5nZUxpc3Q7CmNsYXNzIG5zQmxvY2tGcmFtZTsKY2xhc3MgbnNMaW5lTGF5b3V0
OwoKc3RydWN0IG5zUGVla09mZnNldFN0cnVjdDsKc3RydWN0IG5zUG9pbnQ7CnN0cnVjdCBuc1Jl
Y3Q7CnN0cnVjdCBuc1N0eWxlU3RydWN0OwpjbGFzcyBuc0lET01SYW5nZTsKY2xhc3MgbnNJQ2Fy
ZXQ7CmNsYXNzIG5zSVNlbGVjdGlvbkNvbnRyb2xsZXI7CnN0cnVjdCBQUkxvZ01vZHVsZUluZm87
CgpjbGFzcyBuc0lBY2Nlc3NpYmxlOwojIDEwMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUZyYW1lLmgiCnR5cGVkZWYgUFJVaW50MzIgbnNTcGxpdHRhYmxlVHlwZTsKIyAxMTggIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgp0eXBlZGVmIFBSVWludDMyIG5zRnJhbWVT
dGF0ZTsKIyAyMTAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgplbnVtIG5z
RnJhbWVQYWludExheWVyIHsKICBlRnJhbWVQYWludExheWVyX1VuZGVybGF5ID0gMCwKICBlRnJh
bWVQYWludExheWVyX0NvbnRlbnQgPSAxLAogIGVGcmFtZVBhaW50TGF5ZXJfT3ZlcmxheSA9IDIK
fTsKCmVudW0gbnNTZWxlY3Rpb25BbW91bnQgewogIGVTZWxlY3RDaGFyYWN0ZXIgPSAwLAogIGVT
ZWxlY3RXb3JkID0gMSwKICBlU2VsZWN0TGluZSA9IDIsCiAgZVNlbGVjdEJlZ2luTGluZSA9IDMs
CiAgZVNlbGVjdEVuZExpbmUgPSA0LAogIGVTZWxlY3ROb0Ftb3VudCA9IDUsCiAgZVNlbGVjdERp
ciA9IDYsCiAgZVNlbGVjdFBhcmFncmFwaCA9IDcKfTsKCmVudW0gbnNEaXJlY3Rpb24gewogIGVE
aXJOZXh0ID0gMCwKICBlRGlyUHJldmlvdXM9IDEKfTsKCmVudW0gbnNTcHJlYWQgewogIGVTcHJl
YWROb25lID0gMCwKICBlU3ByZWFkQWNyb3NzID0gMSwKICBlU3ByZWFkRG93biA9IDIKfTsKCmVu
dW0gbnNDb250ZXh0UHJvdmlkZXJSZWxhdGlvbnNoaXAgewogIGVDb250ZXh0UHJvdmlkZXJfQW5j
ZXN0b3IgPSAwLAogIGVDb250ZXh0UHJvdmlkZXJfRGVzY2VuZGFudCA9IDEKfTsKIyAyNTcgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgpzdHJ1Y3QgbnNIVE1MUmVmbG93TWV0
cmljcyB7CiAgbnNjb29yZCB3aWR0aCwgaGVpZ2h0OwogIG5zY29vcmQgYXNjZW50LCBkZXNjZW50
OwoKCiAgbnNTaXplKiBtYXhFbGVtZW50U2l6ZTsKCgoKICBuc2Nvb3JkIG1NYXhpbXVtV2lkdGg7
CiMgMjgwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICBuc2Nvb3JkIG1D
YXJyaWVkT3V0Qm90dG9tTWFyZ2luOwojIDI5MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUZyYW1lLmgiCiAgbnNSZWN0IG1PdmVyZmxvd0FyZWE7CgogIFBSVWludDMyIG1GbGFnczsKCgog
IFBSQm9vbCBtTm90aGluZ0NoYW5nZWQ7CgogIG5zSFRNTFJlZmxvd01ldHJpY3MobnNTaXplKiBh
TWF4RWxlbWVudFNpemUsIFBSVWludDMyIGFGbGFncyA9IDApIHsKICAgIG1heEVsZW1lbnRTaXpl
ID0gYU1heEVsZW1lbnRTaXplOwogICAgbU1heGltdW1XaWR0aCA9IDA7CiAgICBtRmxhZ3MgPSBh
RmxhZ3M7CiAgICBtQ2FycmllZE91dEJvdHRvbU1hcmdpbiA9IDA7CiAgICBtT3ZlcmZsb3dBcmVh
LnggPSAwOwogICAgbU92ZXJmbG93QXJlYS55ID0gMDsKICAgIG1PdmVyZmxvd0FyZWEud2lkdGgg
PSAwOwogICAgbU92ZXJmbG93QXJlYS5oZWlnaHQgPSAwOwogICAgbU5vdGhpbmdDaGFuZ2VkID0g
MDsKCgoKCgoKCiAgICB3aWR0aCA9IGhlaWdodCA9IDA7CiAgICBhc2NlbnQgPSBkZXNjZW50ID0g
MDsKICB9CgogIHZvaWQgQWRkQm9yZGVyUGFkZGluZ1RvTWF4RWxlbWVudFNpemUoY29uc3QgbnNN
YXJnaW4mIGFCb3JkZXJQYWRkaW5nKSB7CiAgICBtYXhFbGVtZW50U2l6ZS0+d2lkdGggKz0gYUJv
cmRlclBhZGRpbmcubGVmdCArIGFCb3JkZXJQYWRkaW5nLnJpZ2h0OwogICAgbWF4RWxlbWVudFNp
emUtPmhlaWdodCArPSBhQm9yZGVyUGFkZGluZy50b3AgKyBhQm9yZGVyUGFkZGluZy5ib3R0b207
CiAgfQoKICBuc0hUTUxSZWZsb3dNZXRyaWNzJiBvcGVyYXRvcj0oY29uc3QgbnNIVE1MUmVmbG93
TWV0cmljcyYgYU90aGVyKQogIHsKICAgIGlmIChtYXhFbGVtZW50U2l6ZSAmJiBhT3RoZXIubWF4
RWxlbWVudFNpemUpIHsKICAgICAgbWF4RWxlbWVudFNpemUtPndpZHRoID0gYU90aGVyLm1heEVs
ZW1lbnRTaXplLT53aWR0aDsKICAgICAgbWF4RWxlbWVudFNpemUtPmhlaWdodCA9IGFPdGhlci5t
YXhFbGVtZW50U2l6ZS0+aGVpZ2h0OwogICAgfQogICAgbU1heGltdW1XaWR0aCA9IGFPdGhlci5t
TWF4aW11bVdpZHRoOwogICAgbUZsYWdzID0gYU90aGVyLm1GbGFnczsKICAgIG1DYXJyaWVkT3V0
Qm90dG9tTWFyZ2luID0gYU90aGVyLm1DYXJyaWVkT3V0Qm90dG9tTWFyZ2luOwogICAgbU92ZXJm
bG93QXJlYS54ID0gYU90aGVyLm1PdmVyZmxvd0FyZWEueDsKICAgIG1PdmVyZmxvd0FyZWEueSA9
IGFPdGhlci5tT3ZlcmZsb3dBcmVhLnk7CiAgICBtT3ZlcmZsb3dBcmVhLndpZHRoID0gYU90aGVy
Lm1PdmVyZmxvd0FyZWEud2lkdGg7CiAgICBtT3ZlcmZsb3dBcmVhLmhlaWdodCA9IGFPdGhlci5t
T3ZlcmZsb3dBcmVhLmhlaWdodDsKICAgIG1Ob3RoaW5nQ2hhbmdlZCA9IGFPdGhlci5tTm90aGlu
Z0NoYW5nZWQ7CgoKCgogICAgd2lkdGggPSBhT3RoZXIud2lkdGg7CiAgICBoZWlnaHQgPSBhT3Ro
ZXIuaGVpZ2h0OwogICAgYXNjZW50ID0gYU90aGVyLmFzY2VudDsKICAgIGRlc2NlbnQgPSBhT3Ro
ZXIuZGVzY2VudDsKICAgIHJldHVybiAqdGhpczsKICB9Cgp9OwojIDM4MiAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCnR5cGVkZWYgUFJVaW50MzIgbnNSZWZsb3dTdGF0dXM7
CiMgNDUyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKdHlwZWRlZiBQUkJv
b2wgbnNEaWRSZWZsb3dTdGF0dXM7CiMgNDczICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
RnJhbWUuaCIKY2xhc3MgbnNJRnJhbWUgOiBwdWJsaWMgbnNJU3VwcG9ydHMKewpwdWJsaWM6CiAg
c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsg
MHhhNmNmOTA1MCwgMHgxNWIzLCAweDExZDIsezB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYs
IDB4OGEsIDB4ZGQsIDB4MzJ9fTsgcmV0dXJuIGlpZDt9CiMgNDk1ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJUHJlc0NvbnRl
eHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDb250ZW50
LAogICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFQYXJlbnQsCiAgICAgICAgICAgICAgICAg
ICBuc0lTdHlsZUNvbnRleHQqIGFDb250ZXh0LAogICAgICAgICAgICAgICAgICAgbnNJRnJhbWUq
IGFQcmV2SW5GbG93KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlc3Ryb3kobnNJUHJl
c0NvbnRleHQqIGFQcmVzQ29udGV4dCkgPSAwOwojIDUyNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRJbml0aWFsQ2hpbGRMaXN0KG5z
SVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lGcmFtZSogYUNoaWxkTGlzdCkgPSAwOwojIDU0MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBcHBlbmRGcmFtZXMobnNJUHJlc0Nv
bnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQcmVzU2hl
bGwmIGFQcmVzU2hlbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3RO
YW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWVMaXN0KSA9IDA7
CiMgNTYzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5z
cmVzdWx0IEluc2VydEZyYW1lcyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSVByZXNTaGVsbCYgYVByZXNTaGVsbCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJRnJhbWUqIGFQcmV2RnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJh
bWUqIGFGcmFtZUxpc3QpID0gMDsKIyA1ODUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lG
cmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlRnJhbWUobnNJUHJlc0NvbnRleHQqIGFQ
cmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNTaGVsbCYgYVByZXNT
aGVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhT2xkRnJhbWUpID0gMDsKIyA2MDcgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVwbGFj
ZUZyYW1lKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJUHJlc1NoZWxsJiBhUHJlc1NoZWxsLAogICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSog
YU9sZEZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhTmV3RnJhbWUp
ID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb250ZW50KG5zSUNvbnRlbnQqKiBh
Q29udGVudCkgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPZmZzZXRzKFBS
SW50MzIgJnN0YXJ0LCBQUkludDMyICZlbmQpIGNvbnN0ID0gMDsKCgoKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRTdHlsZUNvbnRleHQobnNJU3R5bGVDb250ZXh0KiogYVN0eWxlQ29udGV4dCkg
Y29uc3QgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U3R5bGVDb250ZXh0KG5zSVByZXNDb250
ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxl
Q29udGV4dCogYUNvbnRleHQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTdHlsZURh
dGEobnNTdHlsZVN0cnVjdElEIGFTSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IG5zU3R5bGVTdHJ1Y3QqJiBhU3R5bGVTdHJ1Y3QpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRTdHlsZShuc1N0eWxlU3RydWN0SUQgYVNJRCwgY29uc3QgbnNTdHlsZVN0cnVjdCoq
IGFTdHJ1Y3QpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBDYWxjQm9yZGVyUGFkZGlu
Zyhuc01hcmdpbiYgYUJvcmRlclBhZGRpbmcpIGNvbnN0ID0gMDsKIyA2NTcgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWRkaXRpb25h
bFN0eWxlQ29udGV4dChQUkludDMyIGFJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCoqIGFTdHlsZUNvbnRleHQpIGNvbnN0ID0gMDsK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFkZGl0aW9uYWxTdHlsZUNvbnRleHQoUFJJbnQzMiBhSW5k
ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRl
eHQqIGFTdHlsZUNvbnRleHQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnQo
bnNJRnJhbWUqKiBhUGFyZW50KSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQYXJl
bnQoY29uc3QgbnNJRnJhbWUqIGFQYXJlbnQpID0gMDsKIyA2NzYgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmVjdChuc1JlY3QmIGFS
ZWN0KSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPcmlnaW4obnNQb2ludCYgYVBv
aW50KSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTaXplKG5zU2l6ZSYgYVNpemUp
IGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJlY3QobnNJUHJlc0NvbnRleHQqIGFQ
cmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYVJlY3QpID0g
MDsKICB2aXJ0dWFsIG5zcmVzdWx0IE1vdmVUbyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0
LAogICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFYLAogICAgICAgICAgICAgICAgICAgICBu
c2Nvb3JkIGFZKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTaXplVG8obnNJUHJlc0NvbnRleHQq
IGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhV2lkdGgsCiAgICAg
ICAgICAgICAgICAgICAgIG5zY29vcmQgYUhlaWdodCkgPSAwOwojIDY5OCAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBZGRpdGlvbmFs
Q2hpbGRMaXN0TmFtZShQUkludDMyIGFJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lBdG9tKiogYUxpc3ROYW1lKSBjb25zdCA9IDA7CiMgNzA5ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEZpcnN0
Q2hpbGQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1l
KiogYUZpcnN0Q2hpbGQpIGNvbnN0ID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROZXh0
U2libGluZyhuc0lGcmFtZSoqIGFOZXh0U2libGluZykgY29uc3QgPSAwOwogIHZpcnR1YWwgbnNy
ZXN1bHQgU2V0TmV4dFNpYmxpbmcobnNJRnJhbWUqIGFOZXh0U2libGluZykgPSAwOwoKCgoKCgog
IHZpcnR1YWwgbnNyZXN1bHQgUGFpbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwK
ICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3QmIGFEaXJ0eVJlY3QsCiAgICAgICAgICAg
ICAgICAgICAgbnNGcmFtZVBhaW50TGF5ZXIgYVdoaWNoTGF5ZXIpID0gMDsKIyA3NDQgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxl
RXZlbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0dVSUV2ZW50KiBhRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNFdmVu
dFN0YXR1cyogYUV2ZW50U3RhdHVzKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udGVu
dEZvckV2ZW50KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zRXZlbnQqIGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJQ29udGVudCoqIGFDb250ZW50KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0Q29udGVudEFuZE9mZnNldHNGcm9tUG9pbnQobnNJUHJlc0NvbnRleHQqIGFDWCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUG9pbnQmIGFQb2lu
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQg
KiogYU5ld0NvbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUkludDMyJiBhQ29udGVudE9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBSSW50MzImIGFDb250ZW50T2Zmc2V0RW5kLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sJiBhQmVnaW5GcmFtZUNvbnRlbnQpID0g
MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q3Vyc29yKG5zSVByZXNDb250ZXh0KiBhUHJl
c0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zUG9pbnQmIGFQb2ludCwKICAgICAg
ICAgICAgICAgICAgICAgICAgUFJJbnQzMiYgYUN1cnNvcikgPSAwOwojIDc3NCAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGcmFtZUZv
clBvaW50KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBuc1BvaW50JiBhUG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0ZyYW1lUGFpbnRMYXllciBhV2hpY2hMYXllciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSUZyYW1lKiogYUZyYW1lKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0UG9pbnRGcm9tT2Zmc2V0KG5zSVByZXNDb250ZXh0KiBpblByZXNDb250ZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0KiBpblJl
bmRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGluT2Zm
c2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1BvaW50KiBvdXRQb2ludCkg
PSAwOwojIDc5OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRDaGlsZEZyYW1lQ29udGFpbmluZ09mZnNldChQUkludDMyIGluQ29udGVu
dE9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGluSGludCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiogb3V0RnJhbWVDb250ZW50
T2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogKm91dENo
aWxkRnJhbWUpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZyYW1lU3RhdGUobnNG
cmFtZVN0YXRlKiBhUmVzdWx0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZyYW1l
U3RhdGUobnNGcmFtZVN0YXRlIGFOZXdTdGF0ZSkgPSAwOwojIDgyNSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDb250ZW50Q2hhbmdlZChu
c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSUNvbnRlbnQqIGFDaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBw
b3J0cyogYVN1YkNvbnRlbnQpID0gMDsKIyA4MzkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQXR0cmlidXRlQ2hhbmdlZChuc0lQcmVzQ29u
dGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29u
dGVudCogYUNoaWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhTmFt
ZVNwYWNlSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhQXR0cmli
dXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhSGludCkgPSAwOwoj
IDg1NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jl
c3VsdCBDb250ZW50U3RhdGVDaGFuZ2VkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ2hpbGQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFIaW50KSA9IDA7CgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgSXNTcGxpdHRhYmxlKG5zU3BsaXR0YWJsZVR5cGUmIGFJc1NwbGl0dGFi
bGUpIGNvbnN0ID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmV2SW5GbG93KG5zSUZy
YW1lKiogYVByZXZJbkZsb3cpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByZXZJ
bkZsb3cobnNJRnJhbWUqKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROZXh0SW5GbG93KG5z
SUZyYW1lKiogYU5leHRJbkZsb3cpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5l
eHRJbkZsb3cobnNJRnJhbWUqKSA9IDA7CiMgODgwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFdpbGxSZWZsb3cobnNJUHJlc0NvbnRleHQq
IGFQcmVzQ29udGV4dCkgPSAwOwojIDkyMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZy
YW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWZsb3cobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICBuc0hUTUxSZWZsb3dNZXRyaWNzJiBhUmVmbG93TWV0
cmljcywKICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSYgYVJlZmxv
d1N0YXRlLAogICAgICAgICAgICAgICAgICAgIG5zUmVmbG93U3RhdHVzJiBhU3RhdHVzKSA9IDA7
CiMgOTQyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5z
cmVzdWx0IERpZFJlZmxvdyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAg
ICAgICAgICAgICAgICBuc0RpZFJlZmxvd1N0YXR1cyBhU3RhdHVzKSA9IDA7CiMgOTU4ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENhbkNv
bnRpbnVlVGV4dFJ1bihQUkJvb2wmIGFDb250aW51ZVRleHRSdW4pIGNvbnN0ID0gMDsKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBBZGp1c3RGcmFtZVNpemUobnNjb29yZCBhRXh0cmFTcGFjZSwgbnNj
b29yZCYgYVVzZWRTcGFjZSkgPSAwOwoKCgogIHZpcnR1YWwgbnNyZXN1bHQgVHJpbVRyYWlsaW5n
V2hpdGVTcGFjZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhUkMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQmIGFEZWx0YVdpZHRoKSA9IDA7CgoKCgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0Vmlldyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgbnNJVmlldyoqIGFWaWV3KSBjb25zdCA9IDA7CiAgdmlydHVh
bCBuc3Jlc3VsdCBTZXRWaWV3KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAg
ICAgICAgICAgICAgICBuc0lWaWV3KiBhVmlldykgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldFBhcmVudFdpdGhWaWV3KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqKiBhUGFyZW50KSBjb25zdCA9IDA7CgoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9mZnNldEZyb21WaWV3KG5zSVByZXNDb250ZXh0KiBh
UHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNQb2ludCYgYU9m
ZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lWaWV3KiogYVZpZXcpIGNv
bnN0ID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaW5kb3cobnNJUHJlc0NvbnRl
eHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgbnNJV2lkZ2V0KiogYVdp
ZGdldCkgY29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJhbWVUeXBlKG5z
SUF0b20qKiBhVHlwZSkgY29uc3QgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzUGVyY2Vu
dGFnZUJhc2UoUFJCb29sJiBhQmFzZSkgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBTY3JvbGxlZChuc0lWaWV3ICphVmlldykgPSAwOwojIDEwMzAgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U2VsZWN0ZWQobnNJUHJl
c0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lET01S
YW5nZSogYVJhbmdlLAogICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhU2VsZWN0ZWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNTcHJlYWQgYVNwcmVhZCkgPSAwOwoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldFNlbGVjdGVkKFBSQm9vbCAqYVNlbGVjdGVkKSBjb25zdCA9IDA7CiMg
MTA0NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jl
c3VsdCBJc1NlbGVjdGFibGUoUFJCb29sKiBhSXNTZWxlY3RhYmxlLCBQUlVpbnQ4KiBhU2VsZWN0
U3R5bGUpIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNlbGVjdGlvbkNv
bnRyb2xsZXIobnNJUHJlc0NvbnRleHQgKmFQcmVzQ29udGV4dCwgbnNJU2VsZWN0aW9uQ29udHJv
bGxlciAqKmFTZWxDb24pID0gMDsKIyAxMDY0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
RnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENhcHR1cmVNb3VzZShuc0lQcmVzQ29udGV4dCog
YVByZXNDb250ZXh0LCBQUkJvb2wgYUdyYWJNb3VzZUV2ZW50cykgPSAwOwojIDEwNzMgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUGVla09m
ZnNldChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBuc1BlZWtPZmZzZXRTdHJ1Y3QgKmFQ
b3MpID0gMDsKIyAxMDg2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2
aXJ0dWFsIG5zcmVzdWx0IENoZWNrVmlzaWJpbGl0eShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQs
IFBSSW50MzIgYVN0YXJ0SW5kZXgsIFBSSW50MzIgYUVuZEluZGV4LCBQUkJvb2wgYVJlY3Vyc2Us
IFBSQm9vbCAqYUZpbmlzaGVkLCBQUkJvb2wgKl9yZXR2YWwpPTA7CgoKCgoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgUmVmbG93RGlydHlDaGlsZChuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZy
YW1lKiBhQ2hpbGQpID0gMDsKIyAxMTAzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJh
bWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFjY2Vzc2libGUobnNJQWNjZXNzaWJsZSoqIGFB
Y2Nlc3NpYmxlKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZmxvd0NvbW1hbmROb3Rp
ZnkobnNJUHJlc1NoZWxsKiBhU2hlbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSVJlZmxvd0NvbW1hbmQqIGFSQywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJCb29sIGFDb21tYW5kQWRkZWQpID0gMDsKIyAxMTMxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhcmVudFN0eWxlQ29udGV4dFBy
b3ZpZGVyKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSoqIGFQcm92aWRlckZyYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDb250ZXh0UHJvdmlkZXJSZWxh
dGlvbnNoaXAmIGFSZWxhdGlvbnNoaXApID0gMDsKIyAxMTQ0ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IElzVmlzaWJsZUZvclBhaW50aW5n
KG5zSVByZXNDb250ZXh0ICogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYUNoZWNrVmlzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJCb29sKiBhSXNWaXNpYmxlKSA9IDA7CgoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldEJpZGlQcm9wZXJ0eShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFQcm9wZXJ0eU5hbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCoqIGFQcm9wZXJ0eVZhbHVlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhU2l6ZSApIGNvbnN0ID0gMDsKICB2aXJ0dWFs
IG5zcmVzdWx0IFNldEJpZGlQcm9wZXJ0eShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFQcm9wZXJ0eU5hbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYVByb3BlcnR5VmFsdWUpID0gMDsKCgpwcml2
YXRlOgogIHZpcnR1YWwgbnNyZWZjbnQgQWRkUmVmKHZvaWQpID0gMDsKICB2aXJ0dWFsIG5zcmVm
Y250IFJlbGVhc2Uodm9pZCkgPSAwOwp9OwojIDI3ICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xh
eW91dC9odG1sL2Jhc2Uvc3JjL25zRnJhbWUuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc1JlY3QuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1s
L2Jhc2Uvc3JjL25zRnJhbWUuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0
cmluZy5oIiAxCiMgMjkgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvYmFzZS9z
cmMvbnNGcmFtZS5oIiAyCiMgMSAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rp
c3QvaW5jbHVkZS9uc3ByL3BybG9nLmgiIDEKIyAyMiAiL2hvbWUva2FpL20vMDkyL21vemlsbGEt
b3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9nLmgiCiMgMSAiL2hvbWUva2FpL20vMDky
L21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDIzICIv
aG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2cu
aCIgMgoKZXh0ZXJuICJDIiB7CiMgMTE5ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6
ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2cuaCIKdHlwZWRlZiBlbnVtIFBSTG9nTW9kdWxlTGV2
ZWwgewogICAgUFJfTE9HX05PTkUgPSAwLAogICAgUFJfTE9HX0FMV0FZUyA9IDEsCiAgICBQUl9M
T0dfRVJST1IgPSAyLAogICAgUFJfTE9HX1dBUk5JTkcgPSAzLAogICAgUFJfTE9HX0RFQlVHID0g
NCwKCiAgICBQUl9MT0dfTk9USUNFID0gUFJfTE9HX0RFQlVHLAogICAgUFJfTE9HX1dBUk4gPSBQ
Ul9MT0dfV0FSTklORywKICAgIFBSX0xPR19NSU4gPSBQUl9MT0dfREVCVUcsCiAgICBQUl9MT0df
TUFYID0gUFJfTE9HX0RFQlVHCn0gUFJMb2dNb2R1bGVMZXZlbDsKCgoKCgoKdHlwZWRlZiBzdHJ1
Y3QgUFJMb2dNb2R1bGVJbmZvIHsKICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICBQUkxvZ01vZHVs
ZUxldmVsIGxldmVsOwogICAgc3RydWN0IFBSTG9nTW9kdWxlSW5mbyAqbmV4dDsKfSBQUkxvZ01v
ZHVsZUluZm87CgoKCgpleHRlcm4gUFJMb2dNb2R1bGVJbmZvKiBQUl9OZXdMb2dNb2R1bGUoY29u
c3QgY2hhciAqbmFtZSk7CgoKCgoKZXh0ZXJuIFBSQm9vbCBQUl9TZXRMb2dGaWxlKGNvbnN0IGNo
YXIgKm5hbWUpOwoKCgoKCmV4dGVybiB2b2lkIFBSX1NldExvZ0J1ZmZlcmluZyhQUkludG4gYnVm
ZmVyX3NpemUpOwoKCgoKCgoKZXh0ZXJuIHZvaWQgUFJfTG9nUHJpbnQoY29uc3QgY2hhciAqZm10
LCAuLi4pOwoKCgoKZXh0ZXJuIHZvaWQgUFJfTG9nRmx1c2godm9pZCk7CiMgMjM1ICIvaG9tZS9r
YWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2cuaCIKfQoj
IDMwICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Jhc2Uvc3JjL25zRnJhbWUu
aCIgMgoKCgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgiIDEK
IyAzNSAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQvaHRtbC9iYXNlL3NyYy9uc0ZyYW1l
LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVmbG93Q29tbWFuZC5oIiAx
CiMgMzYgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvYmFzZS9zcmMvbnNGcmFt
ZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lU2VsZWN0aW9uLmgi
IDEKIyAzMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lU2VsZWN0aW9uLmgiCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAzNCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lU2VsZWN0aW9uLmgiIDIKIyAxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIgMQojIDM1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJRnJhbWVTZWxlY3Rpb24uaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lGb2N1c1RyYWNrZXIuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9j
dXNUcmFja2VyLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgi
IDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZvY3VzVHJhY2tlci5oIiAyCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiIDEKIyAyOSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSUZvY3VzVHJhY2tlci5oIiAyCgoKY2xhc3MgbnNJUHJlc0NvbnRl
eHQ7CgoKCgoKCgpjbGFzcyBuc0lGb2N1c1RyYWNrZXIgOiBwdWJsaWMgbnNJU3VwcG9ydHMKewpw
dWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7IHN0YXRpYyBuc0lJRCBpaWQg
PSB7IDB4ODFhYzUxZDEsIDB4OTIzYiwgMHgxMWQyLCB7IDB4OTEsIDB4OGYsIDB4MCwgMHg4MCwg
MHhjOCwgMHhlNCwgMHg0ZCwgMHhiNSB9IH07IHJldHVybiBpaWQ7IH0KCgoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgU2Nyb2xsRnJhbWVJbnRvVmlldyhuc0lGcmFtZSAqYUZyYW1lKSA9IDA7CiMgNjMg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb2N1c1RyYWNrZXIuaCIKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldFByaW1hcnlGcmFtZUZvcihuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSoqIGFQcmltYXJ5RnJhbWUpIGNvbnN0ID0g
MDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByZXNDb250ZXh0KG5zSVByZXNDb250ZXh0
ICoqYUNvbnRleHQpID0gMDsKfTsKIyAzNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZy
YW1lU2VsZWN0aW9uLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VsZWN0
aW9uLmgiIDEKIyAzNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lU2VsZWN0aW9u
LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgiIDEKIyAz
OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lU2VsZWN0aW9uLmgiIDIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29udGVudC5oIiAxCiMgMjUgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDI2ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29udGVudC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zbGF5b3V0LmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSUNvbnRlbnQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0
cy5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiIDIKIyAx
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNHVUlFdmVudC5oIiAxCiMgMjkgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNBV3JpdGFibGVTdHJpbmcuaCIgMQojIDMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJQ29udGVudC5oIiAyCgoKY2xhc3MgbnNJQXRvbTsKY2xhc3MgbnNJRG9jdW1lbnQ7CmNs
YXNzIG5zSVByZXNDb250ZXh0OwpjbGFzcyBuc1ZvaWRBcnJheTsKY2xhc3MgbnNJRE9NRXZlbnQ7
CmNsYXNzIG5zSUNvbnRlbnQ7CmNsYXNzIG5zSVN1cHBvcnRzQXJyYXk7CmNsYXNzIG5zSURPTVJh
bmdlOwpjbGFzcyBuc0lTaXplT2ZIYW5kbGVyOwpjbGFzcyBuc0lOb2RlSW5mbzsKY2xhc3MgbnNJ
RXZlbnRMaXN0ZW5lck1hbmFnZXI7CiMgNTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lD
b250ZW50LmgiCmNsYXNzIG5zSUNvbnRlbnQgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6
CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9
IHsgMHg3ODAzMDIyMCwgMHg5NDQ3LCAweDExZDEsIHsweDkzLCAweDIzLCAweDAwLCAweDgwLCAw
eDVmLCAweDhhLCAweGRkLCAweDMyfSB9OyByZXR1cm4gaWlkO30KCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXREb2N1bWVudChuc0lEb2N1bWVudComIGFSZXN1bHQpIGNvbnN0ID0gMDsKCiAgdmlydHVh
bCBuc3Jlc3VsdCBTZXREb2N1bWVudChuc0lEb2N1bWVudCogYURvY3VtZW50LCBQUkJvb2wgYURl
ZXAsIFBSQm9vbCBhQ29tcGlsZUV2ZW50SGFuZGxlcnMpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRQYXJlbnQobnNJQ29udGVudComIGFSZXN1bHQpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBu
c3Jlc3VsdCBTZXRQYXJlbnQobnNJQ29udGVudCogYVBhcmVudCkgPSAwOwoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldE5hbWVTcGFjZUlEKFBSSW50MzImIGFSZXN1bHQpIGNvbnN0ID0gMDsKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRUYWcobnNJQXRvbSomIGFSZXN1bHQpIGNvbnN0ID0gMDsKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXROb2RlSW5mbyhuc0lOb2RlSW5mbyomIGFSZXN1bHQpIGNvbnN0
ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBDYW5Db250YWluQ2hpbGRyZW4oUFJCb29sJiBhUmVz
dWx0KSBjb25zdCA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgQ2hpbGRDb3VudChQUkludDMyJiBh
UmVzdWx0KSBjb25zdCA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgQ2hpbGRBdChQUkludDMyIGFJ
bmRleCwgbnNJQ29udGVudComIGFSZXN1bHQpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBJbmRleE9mKG5zSUNvbnRlbnQqIGFQb3NzaWJsZUNoaWxkLCBQUkludDMyJiBhSW5kZXgpIGNv
bnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnNlcnRDaGlsZEF0KG5zSUNvbnRlbnQqIGFL
aWQsIFBSSW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYU5v
dGlmeSwgUFJCb29sIGFEZWVwU2V0RG9jdW1lbnQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBS
ZXBsYWNlQ2hpbGRBdChuc0lDb250ZW50KiBhS2lkLCBQUkludDMyIGFJbmRleCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhTm90aWZ5LCBQUkJvb2wgYURlZXBTZXREb2N1bWVu
dCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEFwcGVuZENoaWxkVG8obnNJQ29udGVudCogYUtp
ZCwgUFJCb29sIGFOb3RpZnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhRGVl
cFNldERvY3VtZW50KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlQ2hpbGRBdChQUklu
dDMyIGFJbmRleCwgUFJCb29sIGFOb3RpZnkpID0gMDsKIyAxMDEgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lDb250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBOb3JtYWxpemVBdHRyaWJ1
dGVTdHJpbmcoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFTdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJTm9kZUluZm8qJiBhTm9kZUluZm8pID0gMDsKIyAxMTgg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3Vs
dCBTZXRBdHRyaWJ1dGUoUFJJbnQzMiBhTmFtZVNwYWNlSUQsIG5zSUF0b20qIGFOYW1lLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhVmFsdWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFOb3RpZnkpID0gMDsKIyAxMzYgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRB
dHRyaWJ1dGUobnNJTm9kZUluZm8qIGFOb2RlSW5mbywKICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVZhbHVlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIFBSQm9vbCBhTm90aWZ5KSA9IDA7CiMgMTU3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0cmlidXRlKFBSSW50MzIgYU5h
bWVTcGFjZUlELCBuc0lBdG9tKiBhTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0FX
cml0YWJsZVN0cmluZyYgYVJlc3VsdCkgY29uc3QgPSAwOwojIDE4MCAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSUNvbnRlbnQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEF0dHJpYnV0ZShQ
UkludDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSogYU5hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJQXRvbSomIGFQcmVmaXgsIG5zQVdyaXRhYmxlU3RyaW5nJiBhUmVzdWx0KSBjb25z
dCA9IDA7CiMgMTkyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29udGVudC5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgVW5zZXRBdHRyaWJ1dGUoUFJJbnQzMiBhTmFtZVNwYWNlSUQsIG5zSUF0
b20qIGFBdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYU5vdGlm
eSkgPSAwOwojIDIwNCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbnRlbnQuaCIKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldEF0dHJpYnV0ZU5hbWVBdChQUkludDMyIGFJbmRleCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyJiBhTmFtZVNwYWNlSUQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSomIGFOYW1lLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSUF0b20qJiBhUHJlZml4KSBjb25zdCA9IDA7CiMgMjE2ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
QXR0cmlidXRlQ291bnQoUFJJbnQzMiYgYUNvdW50UmVzdWx0KSBjb25zdCA9IDA7CiMgMjMzICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQg
U2l6ZU9mKG5zSVNpemVPZkhhbmRsZXIqIGFTaXplciwgUFJVaW50MzIqIGFSZXN1bHQpIGNvbnN0
ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IExpc3QoRklMRSogb3V0ID0gc3Rkb3V0LCBQ
UkludDMyIGFJbmRlbnQgPSAwKSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBE
dW1wQ29udGVudChGSUxFKiBvdXQgPSBzdGRvdXQsIFBSSW50MzIgYUluZGVudCA9IDAsUFJCb29s
IGFEdW1wQWxsPTEpIGNvbnN0ID0gMDsKIyAyNTkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lDb250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSYW5nZUFkZChuc0lET01SYW5nZSYgYVJh
bmdlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBSYW5nZVJlbW92ZShuc0lET01SYW5nZSYgYVJh
bmdlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSYW5nZUxpc3QobnNWb2lkQXJyYXkqJiBh
UmVzdWx0KSBjb25zdCA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlRE9NRXZlbnQo
bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zRXZlbnQqIGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSURPTUV2ZW50
KiogYURPTUV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUZsYWdz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNFdmVudFN0YXR1cyogYUV2ZW50U3RhdHVz
KSA9IDA7CiMgMjgxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29udGVudC5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0Q29udGVudElEKFBSVWludDMyKiBhSUQpID0gMDsKICB2aXJ0dWFs
IG5zcmVzdWx0IFNldENvbnRlbnRJRChQUlVpbnQzMiBhSUQpID0gMDsKCgoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IFNldEZvY3VzKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpID0gMDsKICB2
aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZUZvY3VzKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQp
ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEJpbmRpbmdQYXJlbnQobnNJQ29udGVu
dCogYUNvbnRlbnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJpbmRpbmdQYXJlbnQobnNJ
Q29udGVudCoqIGFDb250ZW50KSA9IDA7CgoKCgogIGVudW0gewogICAgZVRFWFQgPSAweDAwMDAw
MDAxLAogICAgZUVMRU1FTlQgPSAweDAwMDAwMDAyLAogICAgZUhUTUwgPSAweDAwMDAwMDA0LAog
ICAgZUhUTUxfRk9STV9DT05UUk9MID0gMHgwMDAwMDAwOCwKICAgIGVYVUwgPSAweDAwMDAwMDEw
CiAgfTsKCgoKCgogIHZpcnR1YWwgUFJCb29sIElzQ29udGVudE9mVHlwZShQUlVpbnQzMiBhRmxh
Z3MpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMaXN0ZW5lck1hbmFnZXIobnNJRXZlbnRM
aXN0ZW5lck1hbmFnZXIqKiBhUmVzdWx0KSA9IDA7Cn07CiMgMzkgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zQ09NUHRyLmgiIDEKIyA0MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1l
U2VsZWN0aW9uLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVDb250
ZXh0LmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlQ29udGV4dC5o
IgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2xheW91dC5oIiAxCiMgMjYgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZUNvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lTdHlsZUNvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0NvbG9yLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlQ29udGV4
dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29vcmQuaCIgMQojIDI5ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0LmgiIDIKIyAxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNNYXJnaW4uaCIgMQojIDMwICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJU3R5bGVDb250ZXh0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNSZWN0LmgiIDEKIyAzMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlQ29udGV4
dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRm9udC5oIiAxCiMgMzIgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZUNvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc1ZvaWRBcnJheS5oIiAxCiMgMzMgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lTdHlsZUNvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc1N0eWxlQ29vcmQuaCIgMQojIDM0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5
bGVDb250ZXh0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVN0cnVj
dC5oIiAxCiMgMzUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZUNvbnRleHQuaCIg
MgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlQ29uc3RzLmgiIDEKIyAzNiAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlU2V0LmgiIDEKIyAzNyAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVN0eWxlQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVByZXNDb250ZXh0LmgiIDEKIyAzOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVN0eWxlQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRy
LmgiIDEKIyAzOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlQ29udGV4dC5oIiAy
CiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxhbmd1YWdlQXRvbS5oIiAxCiMgNDAg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZUNvbnRleHQuaCIgMgojIDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIiAxCiMgNDEgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lTdHlsZUNvbnRleHQuaCIgMgoKY2xhc3MgbnNJU2l6ZU9mSGFuZGxlcjsKCmNs
YXNzIG5zSUZyYW1lOwpjbGFzcyBuc0lTdXBwb3J0c0FycmF5OwpjbGFzcyBuc0lTdHlsZUNvbnRl
eHQ7CmNsYXNzIG5zSVJ1bGVOb2RlOwoKCgoKCgoKY2xhc3MgbnNJU3R5bGVDb250ZXh0IDogcHVi
bGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg
eyBzdGF0aWMgbnNJSUQgaWlkID0geyAweDI2YTRkOTcwLCAweGEzNDIsIDB4MTFkMSwgezB4ODks
IDB4NzQsIDB4MDAsIDB4NjAsIDB4MDgsIDB4OTEsIDB4MWIsIDB4ODF9IH07IHJldHVybiBpaWQ7
IH0KCiAgdmlydHVhbCBQUkJvb2wgRXF1YWxzKGNvbnN0IG5zSVN0eWxlQ29udGV4dCogYU90aGVy
KSBjb25zdCA9IDA7CgogIHZpcnR1YWwgbnNJU3R5bGVDb250ZXh0KiBHZXRQYXJlbnQodm9pZCkg
Y29uc3QgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rmlyc3RDaGlsZChuc0lTdHlsZUNvbnRl
eHQqKiBhQ29udGV4dCk9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQc2V1ZG9UeXBlKG5zSUF0
b20qJiBhUHNldWRvVGFnKSBjb25zdCA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgRmluZENoaWxk
V2l0aFJ1bGVzKGNvbnN0IG5zSUF0b20qIGFQc2V1ZG9UYWcsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJUnVsZU5vZGUqIGFSdWxlcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lTdHlsZUNvbnRleHQqJiBhUmVzdWx0KSA9IDA7CgogIHZpcnR1YWwgUFJCb29s
IEhhc1RleHREZWNvcmF0aW9ucygpPTA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJvcmRlclBh
ZGRpbmdGb3IobnNTdHlsZUJvcmRlclBhZGRpbmcmIGFCb3JkZXJQYWRkaW5nKT0wOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBDYWxjU3R5bGVEaWZmZXJlbmNlKG5zSVN0eWxlQ29udGV4dCogYU90aGVy
LCBQUkludDMyJiBhSGludCwgUFJCb29sIGFTdG9wQXRGaXJzdCA9IDApID0gMDsKCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRSdWxlTm9kZShuc0lSdWxlTm9kZSoqIGFSZXN1bHQpPTA7CiAgdmlydHVh
bCBuc3Jlc3VsdCBBZGRTdHlsZUJpdChjb25zdCBQUlVpbnQzMiYgYUJpdCk9MDsKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldFN0eWxlQml0cyhQUlVpbnQzMiogYUJpdHMpPTA7CgoKICB2aXJ0dWFsIHZv
aWQgTGlzdChGSUxFKiBvdXQsIFBSSW50MzIgYUluZGVudCkgPSAwOwogIHZpcnR1YWwgdm9pZCBT
aXplT2YobnNJU2l6ZU9mSGFuZGxlciAqYVNpemVPZkhhbmRsZXIsIFBSVWludDMyICZhU2l6ZSkg
PSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFN0eWxlKG5zU3R5bGVTdHJ1Y3RJRCBh
U0lELCBjb25zdCBuc1N0eWxlU3RydWN0JiBhU3RydWN0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldFN0eWxlKG5zU3R5bGVTdHJ1Y3RJRCBhU0lELCBjb25zdCBuc1N0eWxlU3RydWN0Kiog
YVN0cnVjdCkgPSAwOwoKICB2aXJ0dWFsIGNvbnN0IG5zU3R5bGVTdHJ1Y3QqIEdldFN0eWxlRGF0
YShuc1N0eWxlU3RydWN0SUQgYVNJRCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zU3R5bGVTdHJ1Y3Qq
IEdldFVuaXF1ZVN0eWxlRGF0YShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBjb25zdCBu
c1N0eWxlU3RydWN0SUQmIGFTSUQpID0gMDsKCgogIHZpcnR1YWwgdm9pZCBGb3JjZVVuaXF1ZSh2
b2lkKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtYXBTdHlsZShuc0lQcmVzQ29udGV4dCog
YVByZXNDb250ZXh0LCBQUkJvb2wgYVJlY3Vyc2UgPSAxKSA9IDA7Cn07CgoKCmV4dGVybiBuc3Jl
c3VsdAogIE5TX05ld1N0eWxlQ29udGV4dChuc0lTdHlsZUNvbnRleHQqKiBhSW5zdGFuY2VQdHJS
ZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVBhcmVudENvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFQc2V1ZG9UeXBlLAogICAgICAgICAg
ICAgICAgICAgICBuc0lSdWxlTm9kZSogYVJ1bGVOb2RlLAogICAgICAgICAgICAgICAgICAgICBu
c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KTsKIyA0MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSUZyYW1lU2VsZWN0aW9uLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJU2VsZWN0aW9uQ29udHJvbGxlci5oIiAxCiMgNDIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lGcmFtZVNlbGVjdGlvbi5oIiAyCiMgNTQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lGcmFtZVNlbGVjdGlvbi5oIgpzdHJ1Y3QgU2VsZWN0aW9uRGV0YWlscwp7CiAgUFJJbnQzMiBt
U3RhcnQ7CiAgUFJJbnQzMiBtRW5kOwogIFNlbGVjdGlvblR5cGUgbVR5cGU7CiAgU2VsZWN0aW9u
RGV0YWlscyAqbU5leHQ7Cn07CiMgNzUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFt
ZVNlbGVjdGlvbi5oIgpzdHJ1Y3QgbnNQZWVrT2Zmc2V0U3RydWN0CnsKICB2b2lkIFNldERhdGEo
bnNJRm9jdXNUcmFja2VyICphVHJhY2tlciwKICAgICAgICAgICAgICAgbnNjb29yZCBhRGVzaXJl
ZFgsCiAgICAgICAgICAgICAgIG5zU2VsZWN0aW9uQW1vdW50IGFBbW91bnQsCiAgICAgICAgICAg
ICAgIG5zRGlyZWN0aW9uIGFEaXJlY3Rpb24sCiAgICAgICAgICAgICAgIFBSSW50MzIgYVN0YXJ0
T2Zmc2V0LAogICAgICAgICAgICAgICBQUkJvb2wgYUVhdGluZ1dTLAogICAgICAgICAgICAgICBQ
UkJvb2wgYVByZWZlckxlZnQsCiAgICAgICAgICAgICAgIFBSQm9vbCBhSnVtcExpbmVzKQogICAg
ICB7CiAgICAgICBtVHJhY2tlcj1hVHJhY2tlcjttRGVzaXJlZFg9YURlc2lyZWRYO21BbW91bnQ9
YUFtb3VudDsKICAgICAgIG1EaXJlY3Rpb249YURpcmVjdGlvbjttU3RhcnRPZmZzZXQ9YVN0YXJ0
T2Zmc2V0O21FYXRpbmdXUz1hRWF0aW5nV1M7CiAgICAgICBtUHJlZmVyTGVmdD1hUHJlZmVyTGVm
dDttSnVtcExpbmVzID0gYUp1bXBMaW5lczsKICAgICAgfQogIG5zSUZvY3VzVHJhY2tlciAqbVRy
YWNrZXI7CiAgbnNjb29yZCBtRGVzaXJlZFg7CiAgbnNTZWxlY3Rpb25BbW91bnQgbUFtb3VudDsK
ICBuc0RpcmVjdGlvbiBtRGlyZWN0aW9uOwogIFBSSW50MzIgbVN0YXJ0T2Zmc2V0OwogIG5zQ09N
UHRyPG5zSUNvbnRlbnQ+IG1SZXN1bHRDb250ZW50OwogIFBSSW50MzIgbUNvbnRlbnRPZmZzZXQ7
CiAgUFJJbnQzMiBtQ29udGVudE9mZnNldEVuZDsKICBuc0lGcmFtZSAqbVJlc3VsdEZyYW1lOwog
IFBSQm9vbCBtRWF0aW5nV1M7CiAgUFJCb29sIG1QcmVmZXJMZWZ0OwogIFBSQm9vbCBtSnVtcExp
bmVzOwp9OwoKY2xhc3MgbnNJU2Nyb2xsYWJsZVZpZXc7CgoKY2xhc3MgbnNJRnJhbWVTZWxlY3Rp
b24gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBH
ZXRJSUQoKSB7IHN0YXRpYyBuc0lJRCBpaWQgPSB7IDB4ZjQ2ZTQxNzEsIDB4ZGVhYSwgMHgxMWQx
LCB7IDB4OTcsIDB4ZmMsIDB4MCwgMHg2MCwgMHg5NywgMHgzLCAweGMxLCAweDRlIH0gfTsgcmV0
dXJuIGlpZDsgfQogIGVudW0gSElOVCB7SElOVExFRlQ9MCxISU5UUklHSFQ9MX1tSGludDsKCgoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJRm9jdXNUcmFja2VyICphVHJhY2tlciwgbnNJ
Q29udGVudCAqYUxpbWl0ZXIpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTY3JvbGxh
YmxlVmlldyhuc0lTY3JvbGxhYmxlVmlldyAqYVNjcm9sbFZpZXcpID0wOwoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldFNjcm9sbGFibGVWaWV3KG5zSVNjcm9sbGFibGVWaWV3ICoqYVNjcm9sbFZp
ZXcpID0wOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTaHV0RG93bigpID0gMDsKCgoKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBIYW5kbGVUZXh0RXZlbnQobnNHVUlFdmVudCAqYUd1aUV2ZW50KSA9
IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlS2V5RXZlbnQobnNJUHJlc0NvbnRl
eHQqIGFQcmVzQ29udGV4dCwgbnNHVUlFdmVudCAqYUd1aUV2ZW50KSA9IDA7CiMgMTY0ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWVTZWxlY3Rpb24uaCIKICB2aXJ0dWFsIG5zcmVz
dWx0IEhhbmRsZUNsaWNrKG5zSUNvbnRlbnQgKmFOZXdGb2N1cywgUFJVaW50MzIgYUNvbnRlbnRP
ZmZzZXQsIFBSVWludDMyIGFDb250ZW50RW5kT2Zmc2V0ICwKICAgICAgICAgICAgICAgICAgICAg
ICBQUkJvb2wgYUNvbnRpbnVlU2VsZWN0aW9uLCBQUkJvb2wgYU11bHRpcGxlU2VsZWN0aW9uLCBQ
UkJvb2wgYUhpbnQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEhhbmRsZURyYWcobnNJ
UHJlc0NvbnRleHQgKmFQcmVzQ29udGV4dCwgbnNJRnJhbWUgKmFGcmFtZSwgbnNQb2ludCYgYVBv
aW50KSA9IDA7CiMgMTg2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWVTZWxlY3Rp
b24uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEhhbmRsZVRhYmxlU2VsZWN0aW9uKG5zSUNvbnRlbnQg
KmFQYXJlbnRDb250ZW50LCBQUkludDMyIGFDb250ZW50T2Zmc2V0LCBQUkludDMyIGFUYXJnZXQs
IG5zTW91c2VFdmVudCAqYU1vdXNlRXZlbnQpID0gMDsKIyAxOTYgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU3RhcnRBdXRv
U2Nyb2xsVGltZXIobnNJUHJlc0NvbnRleHQgKmFQcmVzQ29udGV4dCwgbnNJRnJhbWUgKmFGcmFt
ZSwgbnNQb2ludCYgYVBvaW50LCBQUlVpbnQzMiBhRGVsYXkpID0gMDsKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IFN0b3BBdXRvU2Nyb2xsVGltZXIoKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEVuYWJsZUZyYW1lTm90aWZpY2F0aW9uKFBSQm9vbCBhRW5hYmxlKSA9IDA7CiMgMjE2ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWVTZWxlY3Rpb24uaCIKICB2aXJ0dWFsIG5zcmVz
dWx0IExvb2tVcFNlbGVjdGlvbihuc0lDb250ZW50ICphQ29udGVudCwgUFJJbnQzMiBhQ29udGVu
dE9mZnNldCwgUFJJbnQzMiBhQ29udGVudExlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTZWxlY3Rpb25EZXRhaWxzICoqYVJldHVybkRldGFpbHMsIFBSQm9vbCBhU2xvd0NoZWNr
KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1vdXNlRG93blN0YXRlKFBSQm9vbCBh
U3RhdGUpPTA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1vdXNlRG93blN0YXRlKFBSQm9v
bCAqYVN0YXRlKT0wOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRhYmxlQ2VsbFNlbGVjdGlv
bihQUkJvb2wgKmFTdGF0ZSk9MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2VsZWN0aW9u
KFNlbGVjdGlvblR5cGUgYVNlbGVjdGlvblR5cGUsIG5zSVNlbGVjdGlvbiAqKmFTZWxlY3Rpb24p
PTA7CiMgMjQ5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWVTZWxlY3Rpb24uaCIK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNjcm9sbFNlbGVjdGlvbkludG9WaWV3KFNlbGVjdGlvblR5cGUg
YVNlbGVjdGlvblR5cGUsIFNlbGVjdGlvblJlZ2lvbiBhUmVnaW9uKT0wOwoKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBSZXBhaW50U2VsZWN0aW9uKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQs
IFNlbGVjdGlvblR5cGUgYVNlbGVjdGlvblR5cGUpPTA7CiMgMjY0ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJRnJhbWVTZWxlY3Rpb24uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZyYW1l
Rm9yTm9kZU9mZnNldChuc0lDb250ZW50ICphTm9kZSwgUFJJbnQzMiBhT2Zmc2V0LCBISU5UIGFI
aW50LCBuc0lGcmFtZSAqKmFSZXR1cm5GcmFtZSwgUFJJbnQzMiAqYVJldHVybk9mZnNldCk9MDsK
IyAyNzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgQWRqdXN0T2Zmc2V0c0Zyb21TdHlsZShuc0lGcmFtZSAqYUZyYW1lLCBQ
UkJvb2wgKmNoYW5nZVNlbGVjdGlvbiwKICAgICAgICBuc0lDb250ZW50Kiogb3V0Q29udGVudCwg
UFJJbnQzMiogb3V0U3RhcnRPZmZzZXQsIFBSSW50MzIqIG91dEVuZE9mZnNldCk9MDsKCgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0SGludChISU5UICphSGludCk9MDsKICB2aXJ0dWFsIG5zcmVzdWx0
IFNldEhpbnQoSElOVCBhSGludCk9MDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IENoYXJhY3Rl
ck1vdmUoUFJCb29sIGFGb3J3YXJkLCBQUkJvb2wgYUV4dGVuZCk9MDsKCgoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IFdvcmRNb3ZlKFBSQm9vbCBhRm9yd2FyZCwgUFJCb29sIGFFeHRlbmQpPTA7CgoK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBMaW5lTW92ZShQUkJvb2wgYUZvcndhcmQsIFBSQm9vbCBh
RXh0ZW5kKT0wOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW50cmFMaW5lTW92ZShQUkJvb2wg
YUZvcndhcmQsIFBSQm9vbCBhRXh0ZW5kKT0wOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNlbGVj
dEFsbCgpPTA7CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREaXNwbGF5U2VsZWN0aW9uKFBSSW50
MTYgYVN0YXRlKT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlzcGxheVNlbGVjdGlvbihQUklu
dDE2ICphU3RhdGUpPTA7CiMgMzMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWVT
ZWxlY3Rpb24uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERlbGF5Q2FyZXRPdmVyRXhpc3RpbmdT
ZWxlY3Rpb24oUFJCb29sIGFEZWxheSk9MDsKIyAzMzkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lGcmFtZVNlbGVjdGlvbi5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVsYXlDYXJldE92
ZXJFeGlzdGluZ1NlbGVjdGlvbihQUkJvb2wgKmFEZWxheSk9MDsKIyAzNDkgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
RGVsYXllZENhcmV0RGF0YShuc01vdXNlRXZlbnQgKmFNb3VzZUV2ZW50KT0wOwoKCgoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldERlbGF5ZWRDYXJldERhdGEobnNNb3VzZUV2ZW50ICoqYU1vdXNl
RXZlbnQpPTA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGltaXRlcihuc0lDb250ZW50
ICoqYUxpbWl0ZXJDb250ZW50KT0wOwojIDM4MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUZyYW1lU2VsZWN0aW9uLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmV2TmV4dEJpZGlMZXZl
bHMobnNJUHJlc0NvbnRleHQgKmFQcmVzQ29udGV4dCwgbnNJQ29udGVudCAqYU5vZGUsIFBSVWlu
dDMyIGFDb250ZW50T2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUZyYW1lICoqYVByZXZGcmFtZSwgbnNJRnJhbWUgKiphTmV4dEZyYW1lLCBQUlVpbnQ4ICphUHJl
dkxldmVsLCBQUlVpbnQ4ICphTmV4dExldmVsKT0wOwojIDM5MyAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSUZyYW1lU2VsZWN0aW9uLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGcmFtZUZy
b21MZXZlbChuc0lQcmVzQ29udGV4dCAqYVByZXNDb250ZXh0LCBuc0lGcmFtZSAqYUZyYW1lSW4s
IG5zRGlyZWN0aW9uIGFEaXJlY3Rpb24sIFBSVWludDggYUJpZGlMZXZlbCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lICoqYUZyYW1lT3V0KT0wOwoKCn07CiMgMzcgIi4u
Ly4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvYmFzZS9zcmMvbnNGcmFtZS5oIiAyCiMg
MTA3ICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Jhc2Uvc3JjL25zRnJhbWUu
aCIKY2xhc3MgbnNGcmFtZSA6IHB1YmxpYyBuc0lGcmFtZQoKCgp7CnB1YmxpYzoKCgoKCiAgZnJp
ZW5kIG5zcmVzdWx0IE5TX05ld0VtcHR5RnJhbWUobnNJUHJlc1NoZWxsKiBhU2hlbGwsIG5zSUZy
YW1lKiogYUluc3RhbmNlUHRyUmVzdWx0KTsKCgoKICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90
IHN6LCBuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwpOwoKCgoKCiAgdm9pZCBvcGVyYXRvciBkZWxl
dGUodm9pZCogYVB0ciwgc2l6ZV90IHN6KTsKCnByaXZhdGU6CgoKICB2b2lkKiBvcGVyYXRvciBu
ZXcoc2l6ZV90IHN6KSB0aHJvdyAoKSB7IHJldHVybiAwOyB9OwoKCgoKcHVibGljOgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBRdWVyeUludGVyZmFjZShjb25zdCBuc0lJRCYgYUlJRCwgdm9pZCoqIGFJ
bnN0YW5jZVB0cik7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJUHJlc0NvbnRleHQqIGFQ
cmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDb250ZW50LAogICAg
ICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFQYXJlbnQsCiAgICAgICAgICAgICAgICAgICBuc0lT
dHlsZUNvbnRleHQqIGFDb250ZXh0LAogICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFzUHJl
dkluRmxvdyk7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRJbml0aWFsQ2hpbGRMaXN0KG5zSVByZXND
b250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lBdG9tKiBhTGlzdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lG
cmFtZSogYUNoaWxkTGlzdCk7CiAgdmlydHVhbCBuc3Jlc3VsdCBBcHBlbmRGcmFtZXMobnNJUHJl
c0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJl
c1NoZWxsJiBhUHJlc1NoZWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBh
TGlzdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWVMaXN0
KTsKICB2aXJ0dWFsIG5zcmVzdWx0IEluc2VydEZyYW1lcyhuc0lQcmVzQ29udGV4dCogYVByZXND
b250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQcmVzU2hlbGwmIGFQcmVzU2hl
bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFQcmV2RnJhbWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWVMaXN0KTsKICB2aXJ0dWFsIG5zcmVzdWx0IFJl
bW92ZUZyYW1lKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJlc1NoZWxsLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFt
ZSogYU9sZEZyYW1lKTsKICB2aXJ0dWFsIG5zcmVzdWx0IFJlcGxhY2VGcmFtZShuc0lQcmVzQ29u
dGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQcmVzU2hl
bGwmIGFQcmVzU2hlbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0
TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFPbGRGcmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFOZXdGcmFtZSk7CiAgdmlydHVhbCBu
c3Jlc3VsdCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwogIHZpcnR1YWwg
bnNyZXN1bHQgR2V0Q29udGVudChuc0lDb250ZW50KiogYUNvbnRlbnQpIGNvbnN0OwogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0U3R5bGVDb250ZXh0KG5zSVN0eWxlQ29udGV4dCoqIGFTdHlsZUNvbnRl
eHQpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U3R5bGVDb250ZXh0KG5zSVByZXNDb250
ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxl
Q29udGV4dCogYUNvbnRleHQpOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3R5bGVEYXRhKG5zU3R5
bGVTdHJ1Y3RJRCBhU0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1N0eWxl
U3RydWN0KiYgYVN0eWxlU3RydWN0KSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0eWxl
KG5zU3R5bGVTdHJ1Y3RJRCBhU0lELCBjb25zdCBuc1N0eWxlU3RydWN0KiogYVN0cnVjdCkgY29u
c3Q7CiAgdmlydHVhbCBuc3Jlc3VsdCBDYWxjQm9yZGVyUGFkZGluZyhuc01hcmdpbiYgYUJvcmRl
clBhZGRpbmcpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWRkaXRpb25hbFN0eWxlQ29u
dGV4dChQUkludDMyIGFJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSVN0eWxlQ29udGV4dCoqIGFTdHlsZUNvbnRleHQpIGNvbnN0OwogIHZpcnR1YWwgbnNy
ZXN1bHQgU2V0QWRkaXRpb25hbFN0eWxlQ29udGV4dChQUkludDMyIGFJbmRleCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVN0eWxlQ29u
dGV4dCk7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnQobnNJRnJhbWUqKiBhUGFyZW50KSBj
b25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBhcmVudChjb25zdCBuc0lGcmFtZSogYVBhcmVu
dCk7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSZWN0KG5zUmVjdCYgYVJlY3QpIGNvbnN0OwogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0T3JpZ2luKG5zUG9pbnQmIGFQb2ludCkgY29uc3Q7CiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRTaXplKG5zU2l6ZSYgYVNpemUpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1
bHQgU2V0UmVjdChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBjb25zdCBuc1JlY3QmIGFS
ZWN0KTsKICB2aXJ0dWFsIG5zcmVzdWx0IE1vdmVUbyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250
ZXh0LCBuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZKTsKICB2aXJ0dWFsIG5zcmVzdWx0IFNpemVUbyhu
c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVp
Z2h0KTsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFkZGl0aW9uYWxDaGlsZExpc3ROYW1lKFBSSW50
MzIgYUluZGV4LCBuc0lBdG9tKiogYUxpc3ROYW1lKSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0
IEZpcnN0Q2hpbGQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUZyYW1lKiogYUZpcnN0Q2hpbGQpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQgUGFpbnQobnNJ
UHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJp
bmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBu
c1JlY3QmIGFEaXJ0eVJlY3QsCiAgICAgICAgICAgICAgICAgICAgbnNGcmFtZVBhaW50TGF5ZXIg
YVdoaWNoTGF5ZXIpOwogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlRXZlbnQobnNJUHJlc0NvbnRl
eHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0dVSUV2ZW50KiBh
RXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNFdmVudFN0YXR1cyogYUV2ZW50U3Rh
dHVzKTsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRlbnRGb3JFdmVudChuc0lQcmVzQ29udGV4
dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0V2ZW50
KiBhRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqKiBh
Q29udGVudCk7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDdXJzb3IobnNJUHJlc0NvbnRleHQqIGFQ
cmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgbnNQb2ludCYgYVBvaW50LAogICAg
ICAgICAgICAgICAgICAgICAgICBQUkludDMyJiBhQ3Vyc29yKTsKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldEZyYW1lRm9yUG9pbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUG9pbnQmIGFQb2ludCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zRnJhbWVQYWludExheWVyIGFXaGljaExheWVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqKiBhRnJhbWUpOwoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldFBvaW50RnJvbU9mZnNldChuc0lQcmVzQ29udGV4dCogaW5QcmVzQ29udGV4dCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCogaW5S
ZW5kQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBpbk9m
ZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNQb2ludCogb3V0UG9pbnQp
OwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENoaWxkRnJhbWVDb250YWluaW5nT2Zmc2V0KFBSSW50
MzIgaW5Db250ZW50T2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJv
b2wgaW5IaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyKiBvdXRG
cmFtZUNvbnRlbnRPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZy
YW1lKiAqb3V0Q2hpbGRGcmFtZSk7CgogIHN0YXRpYyBuc3Jlc3VsdCBHZXROZXh0UHJldkxpbmVG
cm9tZUJsb2NrRnJhbWUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zUGVla09mZnNldFN0cnVjdCAqYVBvcywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lICphQmxvY2tGcmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYUxpbmVT
dGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50OCBhT3V0
U2lkZUxpbWl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldEZyYW1lU3RhdGUobnNGcmFtZVN0YXRlKiBhUmVzdWx0KTsKICB2
aXJ0dWFsIG5zcmVzdWx0IFNldEZyYW1lU3RhdGUobnNGcmFtZVN0YXRlIGFOZXdTdGF0ZSk7Cgog
IHZpcnR1YWwgbnNyZXN1bHQgQ29udGVudENoYW5nZWQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ2hpbGQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIGFTdWJDb250ZW50KTsKICB2
aXJ0dWFsIG5zcmVzdWx0IEF0dHJpYnV0ZUNoYW5nZWQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDaGlsZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYU5hbWVTcGFjZUlELAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUF0dHJpYnV0ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYUhpbnQpOwogIHZpcnR1YWwgbnNyZXN1bHQg
Q29udGVudFN0YXRlQ2hhbmdlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNoaWxkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhSGludCk7CiAgdmlydHVhbCBuc3Jlc3Vs
dCBJc1NwbGl0dGFibGUobnNTcGxpdHRhYmxlVHlwZSYgYUlzU3BsaXR0YWJsZSkgY29uc3Q7CiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRQcmV2SW5GbG93KG5zSUZyYW1lKiogYVByZXZJbkZsb3cpIGNv
bnN0OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UHJldkluRmxvdyhuc0lGcmFtZSopOwogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0TmV4dEluRmxvdyhuc0lGcmFtZSoqIGFOZXh0SW5GbG93KSBjb25zdDsK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5leHRJbkZsb3cobnNJRnJhbWUqKTsKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldFZpZXcobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNJVmlldyoqIGFW
aWV3KSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFZpZXcobnNJUHJlc0NvbnRleHQqIGFQ
cmVzQ29udGV4dCwgbnNJVmlldyogYVZpZXcpOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFyZW50
V2l0aFZpZXcobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNJRnJhbWUqKiBhUGFyZW50
KSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9mZnNldEZyb21WaWV3KG5zSVByZXNDb250
ZXh0KiBhUHJlc0NvbnRleHQsIG5zUG9pbnQmIGFPZmZzZXQsIG5zSVZpZXcqKiBhVmlldykgY29u
c3Q7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaW5kb3cobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u
dGV4dCwgbnNJV2lkZ2V0KiopIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJhbWVUeXBl
KG5zSUF0b20qKiBhVHlwZSkgY29uc3Q7CiAgdmlydHVhbCBuc3Jlc3VsdCBJc1BlcmNlbnRhZ2VC
YXNlKFBSQm9vbCYgYUJhc2UpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmV4dFNpYmxp
bmcobnNJRnJhbWUqKiBhTmV4dFNpYmxpbmcpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
TmV4dFNpYmxpbmcobnNJRnJhbWUqIGFOZXh0U2libGluZyk7CiAgdmlydHVhbCBuc3Jlc3VsdCBT
Y3JvbGxlZChuc0lWaWV3ICphVmlldyk7CiMgMjY2ICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xh
eW91dC9odG1sL2Jhc2Uvc3JjL25zRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNlbGVj
dGVkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIG5zSURPTVJhbmdlICphUmFuZ2UsUFJC
b29sIGFTZWxlY3RlZCwgbnNTcHJlYWQgYVNwcmVhZCk7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRT
ZWxlY3RlZChQUkJvb2wgKmFTZWxlY3RlZCkgY29uc3Q7CiAgdmlydHVhbCBuc3Jlc3VsdCBJc1Nl
bGVjdGFibGUoUFJCb29sKiBhSXNTZWxlY3RhYmxlLCBQUlVpbnQ4KiBhU2VsZWN0U3R5bGUpIGNv
bnN0OwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNlbGVjdGlvbkNvbnRyb2xsZXIobnNJUHJlc0Nv
bnRleHQgKmFQcmVzQ29udGV4dCwgbnNJU2VsZWN0aW9uQ29udHJvbGxlciAqKmFTZWxDb24pOwog
IHZpcnR1YWwgbnNyZXN1bHQgUGVla09mZnNldChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0
LCBuc1BlZWtPZmZzZXRTdHJ1Y3QgKmFQb3MpIDsKICB2aXJ0dWFsIG5zcmVzdWx0IENoZWNrVmlz
aWJpbGl0eShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQsIFBSSW50MzIgYVN0YXJ0SW5kZXgsIFBS
SW50MzIgYUVuZEluZGV4LCBQUkJvb2wgYVJlY3Vyc2UsIFBSQm9vbCAqYUZpbmlzaGVkLCBQUkJv
b2wgKl9yZXR2YWwpOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFBlZWtPZmZzZXRQYXJhZ3JhcGgobnNJ
UHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zUGVla09mZnNldFN0cnVjdCAqYVBvcyk7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPZmZz
ZXRzKFBSSW50MzIgJmFTdGFydCwgUFJJbnQzMiAmYUVuZCkgY29uc3Q7CiAgdmlydHVhbCBuc3Jl
c3VsdCBSZWZsb3dEaXJ0eUNoaWxkKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUq
IGFDaGlsZCk7CiAgdmlydHVhbCBuc3Jlc3VsdCBSZWZsb3dDb21tYW5kTm90aWZ5KG5zSVByZXNT
aGVsbCogYVByZXNTaGVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJl
Zmxvd0NvbW1hbmQqIGFSQywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9v
bCBhQ29tbWFuZEFkZGVkKTsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBY2Nlc3NpYmxlKG5zSUFj
Y2Vzc2libGUqKiBhQWNjZXNzaWJsZSk7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFyZW50U3R5
bGVDb250ZXh0UHJvdmlkZXIobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiogYVByb3ZpZGVyRnJh
bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NvbnRleHRQ
cm92aWRlclJlbGF0aW9uc2hpcCYgYVJlbGF0aW9uc2hpcCk7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IElzVmlzaWJsZUZvclBhaW50aW5nKG5zSVByZXNDb250ZXh0ICogYVByZXNDb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCYgYVJlbmRl
cmluZ0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYUNo
ZWNrVmlzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sKiBhSXNWaXNp
YmxlKTsKCgogIHZpcnR1YWwgbnNyZXN1bHQgV2lsbFJlZmxvdyhuc0lQcmVzQ29udGV4dCogYVBy
ZXNDb250ZXh0KTsKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZmxvdyhuc0lQcmVzQ29udGV4dCogYVBy
ZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICBuc0hUTUxSZWZsb3dNZXRyaWNzJiBhRGVz
aXJlZFNpemUsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlJiBh
UmVmbG93U3RhdGUsCiAgICAgICAgICAgICAgICAgICAgIG5zUmVmbG93U3RhdHVzJiBhU3RhdHVz
KTsKICB2aXJ0dWFsIG5zcmVzdWx0IERpZFJlZmxvdyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250
ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBuc0RpZFJlZmxvd1N0YXR1cyBhU3RhdHVzKTsK
ICB2aXJ0dWFsIG5zcmVzdWx0IENhbkNvbnRpbnVlVGV4dFJ1bihQUkJvb2wmIGFDb250aW51ZVRl
eHRSdW4pIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQgQWRqdXN0RnJhbWVTaXplKG5zY29vcmQg
YUV4dHJhU3BhY2UsIG5zY29vcmQmIGFVc2VkU3BhY2UpOwogIHZpcnR1YWwgbnNyZXN1bHQgVHJp
bVRyYWlsaW5nV2hpdGVTcGFjZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhUkMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQmIGFEZWx0YVdpZHRoKTsK
CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlUHJlc3MobnNJUHJlc0NvbnRleHQqIGFQcmVz
Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zR1VJRXZlbnQgKiBhRXZlbnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0V2ZW50U3RhdHVzKiBhRXZlbnRTdGF0dXMpOwoKICB2
aXJ0dWFsIG5zcmVzdWx0IEhhbmRsZU11bHRpcGxlUHJlc3MobnNJUHJlc0NvbnRleHQqIGFQcmVz
Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zR1VJRXZlbnQgKiBhRXZlbnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0V2ZW50U3RhdHVzKiBhRXZlbnRTdGF0dXMpOwoKICB2
aXJ0dWFsIG5zcmVzdWx0IEhhbmRsZURyYWcobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwK
ICAgICAgICAgICAgICAgICAgICAgICAgbnNHVUlFdmVudCAqIGFFdmVudCwKICAgICAgICAgICAg
ICAgICAgICAgICAgbnNFdmVudFN0YXR1cyogYUV2ZW50U3RhdHVzKTsKCiAgdmlydHVhbCBuc3Jl
c3VsdCBIYW5kbGVSZWxlYXNlKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zR1VJRXZlbnQgKiBhRXZlbnQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zRXZlbnRTdGF0dXMqIGFFdmVudFN0YXR1cyk7CgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0Q29udGVudEFuZE9mZnNldHNGcm9tUG9pbnQobnNJUHJlc0NvbnRleHQqIGFDWCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUG9pbnQmIGFQ
b2ludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRl
bnQgKiogYU5ld0NvbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUkludDMyJiBhQ29udGVudE9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBSSW50MzImIGFDb250ZW50T2Zmc2V0RW5kLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sJiBhQmVnaW5GcmFtZUNvbnRlbnQp
OwogIHZpcnR1YWwgbnNyZXN1bHQgUGVla0JhY2t3YXJkQW5kRm9yd2FyZChuc1NlbGVjdGlvbkFt
b3VudCBhQW1vdW50QmFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNT
ZWxlY3Rpb25BbW91bnQgYUFtb3VudEZvcndhcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBSSW50MzIgYVN0YXJ0UG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUkJvb2wgYUp1bXBMaW5lcyk7CgoKCgoKCgogIHZvaWQgSW52YWxp
ZGF0ZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgbnNSZWN0JiBhRGFtYWdlUmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgIFBS
Qm9vbCBhSW1tZWRpYXRlID0gMCkgY29uc3Q7CgoKCiAgc3RhdGljIFBSSW50MzIgQ29udGVudElu
ZGV4SW5Db250YWluZXIoY29uc3QgbnNJRnJhbWUqIGFGcmFtZSk7CgoKCgoKCiAgUFJCb29sIElz
RnJhbWVUcmVlVG9vRGVlcChjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSYgYVJlZmxvd1N0YXRlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNIVE1MUmVmbG93TWV0cmljcyYgYU1ldHJpY3Mp
OwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENsb3Nlc3RWaWV3Rm9yRnJhbWUobnNJUHJlc0NvbnRl
eHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJRnJhbWUgKmFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJVmlldyAqKmFWaWV3KTsKCiAgc3RhdGljIG5zcmVzdWx0IENyZWF0ZUFuZFBvc3RS
ZWZsb3dDb21tYW5kKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFUYXJnZXRGcmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVmbG93Q29tbWFuZDo6
UmVmbG93VHlwZSBhUmVmbG93VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJRnJhbWUqIGFDaGlsZEZyYW1lLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhQXR0cmlidXRlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTGlzdE5hbWUpOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBDYXB0dXJlTW91c2UobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4
dCwgUFJCb29sIGFHcmFiTW91c2VFdmVudHMpOwogIFBSQm9vbCBJc01vdXNlQ2FwdHVyZWQobnNJ
UHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCk7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmlkaVBy
b3BlcnR5KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJQXRvbSogYVByb3BlcnR5TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkKiogYVByb3BlcnR5VmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IGFTaXplICkgY29uc3Q7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCaWRpUHJvcGVydHko
bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lBdG9tKiBhUHJvcGVydHlOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQqIGFQcm9wZXJ0eVZhbHVlKSA7CiMgNDM0ICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91
dC9odG1sL2Jhc2Uvc3JjL25zRnJhbWUuaCIKcHJvdGVjdGVkOgoKICBuc0ZyYW1lKCk7CiAgdmly
dHVhbCB+bnNGcmFtZSgpOwoKICBQUkludDE2IERpc3BsYXlTZWxlY3Rpb24obnNJUHJlc0NvbnRl
eHQqIGFQcmVzQ29udGV4dCwgUFJCb29sIGlzT2tUb1R1cm5PbiA9IDApOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRGcmFtZUZyb21EaXJlY3Rpb24obnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4
dCwgbnNQZWVrT2Zmc2V0U3RydWN0ICphUG9zKTsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRGlkU2V0
U3R5bGVDb250ZXh0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwoKCiAgbnNyZXN1bHQg
R2V0U2VsZWN0aW9uRm9yVmlzQ2hlY2sobnNJUHJlc0NvbnRleHQgKiBhUHJlc0NvbnRleHQsIG5z
SVNlbGVjdGlvbioqIGFTZWxlY3Rpb24pOwoKCiAgc3RhdGljIFBSSW50MzIgR2V0TGluZU51bWJl
cihuc0lGcmFtZSAqYUZyYW1lKTsKCiAgc3RhdGljIHZvaWQgR2V0TGFzdExlYWYobnNJUHJlc0Nv
bnRleHQqIGFQcmVzQ29udGV4dCwgbnNJRnJhbWUgKiphRnJhbWUpOwogIHN0YXRpYyB2b2lkIEdl
dEZpcnN0TGVhZihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBuc0lGcmFtZSAqKmFGcmFt
ZSk7CiMgNDY0ICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Jhc2Uvc3JjL25z
RnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERhdGFGb3JUYWJsZVNlbGVjdGlvbihuc0lG
cmFtZVNlbGVjdGlvbiAqYUZyYW1lU2VsZWN0aW9uLCBuc01vdXNlRXZlbnQgKmFNb3VzZUV2ZW50
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQgKiphUGFy
ZW50Q29udGVudCwgUFJJbnQzMiAqYUNvbnRlbnRPZmZzZXQsIFBSSW50MzIgKmFUYXJnZXQpOwoK
ICBzdGF0aWMgdm9pZCBYTUxRdW90ZShuc1N0cmluZyYgYVN0cmluZyk7CgoKCiAgdm9pZCBTZXRE
ZWZhdWx0QmFja2dyb3VuZENvbG9yKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwoKICB2
aXJ0dWFsIFBSQm9vbCBQYXJlbnREaXNhYmxlc1NlbGVjdGlvbigpIGNvbnN0OwoKCgoKCiAgdm9p
ZCBTZXRPdmVyZmxvd0NsaXBSZWN0KG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250
ZXh0KTsKCiAgbnNSZWN0IG1SZWN0OwogIG5zSUNvbnRlbnQqIG1Db250ZW50OwogIG5zSVN0eWxl
Q29udGV4dCogbVN0eWxlQ29udGV4dDsKICBuc0lGcmFtZSogbVBhcmVudDsKICBuc0lGcmFtZSog
bU5leHRTaWJsaW5nOwogIG5zRnJhbWVTdGF0ZSBtU3RhdGU7Cgpwcm90ZWN0ZWQ6CiAgdmlydHVh
bCBuc3JlZmNudCBBZGRSZWYodm9pZCk7CiAgdmlydHVhbCBuc3JlZmNudCBSZWxlYXNlKHZvaWQp
Owp9OwojIDI2ICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Jhc2Uvc3JjL25z
TGVhZkZyYW1lLmgiIDIKCgoKCgoKCmNsYXNzIG5zTGVhZkZyYW1lIDogcHVibGljIG5zRnJhbWUg
ewpwdWJsaWM6CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFBhaW50KG5zSVByZXNDb250ZXh0KiBhUHJl
c0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVy
aW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVjdCwK
ICAgICAgICAgICAgICAgICAgIG5zRnJhbWVQYWludExheWVyIGFXaGljaExheWVyKTsKICB2aXJ0
dWFsIG5zcmVzdWx0IFJlZmxvdyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgIG5zSFRNTFJlZmxvd01ldHJpY3MmIGFEZXNpcmVkU2l6ZSwKICAgICAgICAg
ICAgICAgICAgICBjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSYgYVJlZmxvd1N0YXRlLAogICAgICAg
ICAgICAgICAgICAgIG5zUmVmbG93U3RhdHVzJiBhU3RhdHVzKTsKICB2aXJ0dWFsIG5zcmVzdWx0
IENvbnRlbnRDaGFuZ2VkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lTdXBwb3J0cyogYVN1YkNvbnRlbnQpOwoKCgoKcHJvdGVjdGVkOgogIHZpcnR1
YWwgfm5zTGVhZkZyYW1lKCk7CgoKCgoKCgogIHZpcnR1YWwgdm9pZCBHZXREZXNpcmVkU2l6ZShu
c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSYgYVJlZmxvd1N0YXRlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0hUTUxSZWZsb3dNZXRyaWNzJiBhRGVzaXJlZFNpemUpID0gMDsKCgoK
CiAgdm9pZCBBZGRCb3JkZXJzQW5kUGFkZGluZyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUmIGFS
ZWZsb3dTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSFRNTFJlZmxvd01ldHJp
Y3MmIGFEZXNpcmVkU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zTWFyZ2luJiBh
Qm9yZGVyUGFkZGluZyk7Cn07CiMgMzEgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0
bWwvZm9ybXMvc3JjL25zRm9ybUNvbnRyb2xIZWxwZXIuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0Nvb3JkLmgiIDEKIyAzMiAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlv
dXQvaHRtbC9mb3Jtcy9zcmMvbnNGb3JtQ29udHJvbEhlbHBlci5oIiAyCiMgMSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVN0eWxlQ29udGV4dC5oIiAxCiMgMzMgIi4uLy4uLy4uLy4uLy4u
L21vemlsbGEvbGF5b3V0L2h0bWwvZm9ybXMvc3JjL25zRm9ybUNvbnRyb2xIZWxwZXIuaCIgMgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzQ29udGV4dC5oIiAxCiMgMzQgIi4u
Ly4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvZm9ybXMvc3JjL25zRm9ybUNvbnRyb2xI
ZWxwZXIuaCIgMgoKY2xhc3MgbnNJVmlldzsKCmNsYXNzIG5zU3R5bGVDb29yZDsKY2xhc3MgbnNG
b3JtRnJhbWU7CiMgNTQgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvZm9ybXMv
c3JjL25zRm9ybUNvbnRyb2xIZWxwZXIuaCIKZW51bSBuc01vdXNlU3RhdGUgewogIGVNb3VzZU5v
bmUsCiAgZU1vdXNlRW50ZXIsCiAgZU1vdXNlRXhpdCwKICBlTW91c2VEb3duLAogIGVNb3VzZVVw
Cn07CgpzdHJ1Y3QgbnNJbnB1dERpbWVuc2lvblNwZWMKewogIG5zSUF0b20qIG1Db2xTaXplQXR0
cjsKICBQUkJvb2wgbUNvbFNpemVBdHRySW5QaXhlbHM7CiAgbnNJQXRvbSogbUNvbFZhbHVlQXR0
cjsKCiAgbnNTdHJpbmcqIG1Db2xEZWZhdWx0VmFsdWU7CiAgbnNjb29yZCBtQ29sRGVmYXVsdFNp
emU7CiAgUFJCb29sIG1Db2xEZWZhdWx0U2l6ZUluUGl4ZWxzOwogIG5zSUF0b20qIG1Sb3dTaXpl
QXR0cjsKICBuc2Nvb3JkIG1Sb3dEZWZhdWx0U2l6ZTsKCiAgbnNJbnB1dERpbWVuc2lvblNwZWMo
bnNJQXRvbSogYUNvbFNpemVBdHRyLCBQUkJvb2wgYUNvbFNpemVBdHRySW5QaXhlbHMsCiAgICAg
ICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUNvbFZhbHVlQXR0ciwgbnNTdHJpbmcqIGFDb2xE
ZWZhdWx0VmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29sRGVmYXVsdFNp
emUsIFBSQm9vbCBhQ29sRGVmYXVsdFNpemVJblBpeGVscywKICAgICAgICAgICAgICAgICAgICAg
ICBuc0lBdG9tKiBhUm93U2l6ZUF0dHIsIG5zY29vcmQgYVJvd0RlZmF1bHRTaXplKQogICAgICAg
ICAgICAgICAgICAgICAgIDogbUNvbFNpemVBdHRyKGFDb2xTaXplQXR0ciksIG1Db2xTaXplQXR0
ckluUGl4ZWxzKGFDb2xTaXplQXR0ckluUGl4ZWxzKSwKICAgICAgICAgICAgICAgICAgICAgICAg
IG1Db2xWYWx1ZUF0dHIoYUNvbFZhbHVlQXR0ciksCiAgICAgICAgICAgICAgICAgICAgICAgICBt
Q29sRGVmYXVsdFZhbHVlKGFDb2xEZWZhdWx0VmFsdWUpLCBtQ29sRGVmYXVsdFNpemUoYUNvbERl
ZmF1bHRTaXplKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1Db2xEZWZhdWx0U2l6ZUluUGl4
ZWxzKGFDb2xEZWZhdWx0U2l6ZUluUGl4ZWxzKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1S
b3dTaXplQXR0cihhUm93U2l6ZUF0dHIpLCBtUm93RGVmYXVsdFNpemUoYVJvd0RlZmF1bHRTaXpl
KQogIHsKICB9Cgp9OwojIDk1ICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Zv
cm1zL3NyYy9uc0Zvcm1Db250cm9sSGVscGVyLmgiCmNsYXNzIG5zRm9ybUNvbnRyb2xIZWxwZXIK
ewoKcHVibGljOgoKCiAgc3RhdGljIG5zY29vcmQgQ2FsY3VsYXRlU2l6ZSAobnNJUHJlc0NvbnRl
eHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5k
ZXJpbmdDb250ZXh0KiBhUmVuZENvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJRm9ybUNvbnRyb2xGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IG5zU2l6ZSYgYUNTU1NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJbnB1dERpbWVuc2lvblNwZWMmIGFEaW1lbnNpb25TcGVjLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zU2l6ZSYgYURlc2lyZWRTaXplLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zU2l6ZSYgYU1pblNpemUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJCb29sJiBhV2lkdGhFeHBsaWNpdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQUkJvb2wmIGFIZWlnaHRFeHBsaWNpdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc2Nvb3JkJiBhUm93U2l6ZSk7CgogIHN0YXRpYyBuc2Nvb3JkIEdldFRleHRTaXpl
KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCwgbnNJRm9ybUNvbnRyb2xGcmFtZSogYUZyYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU3RyaW5nJiBhU3RyaW5nLCBuc1Np
emUmIGFTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRl
eHQgKmFSZW5kQ29udGV4dCk7CgogIHN0YXRpYyBuc2Nvb3JkIEdldFRleHRTaXplKG5zSVByZXND
b250ZXh0KiBhQ29udGV4dCwgbnNJRm9ybUNvbnRyb2xGcmFtZSogYUZyYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYU51bUNoYXJzLCBuc1NpemUmIGFTaXplLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQgKmFSZW5kQ29udGV4
dCk7CgogIHN0YXRpYyBuc3Jlc3VsdCBHZXRGb250KG5zSUZvcm1Db250cm9sRnJhbWUgKiBhRm9y
bUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0ICogYVN0eWxl
Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0ZvbnQqJiBhRm9udCk7
CgoKICBzdGF0aWMgbnNyZXN1bHQgR2V0RnJhbWVGb250Rk0obnNJUHJlc0NvbnRleHQqIGFQcmVz
Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRm9ybUNvbnRyb2xG
cmFtZSAqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRm9udE1l
dHJpY3MqKiBhRm9udE1ldCk7CgogIHN0YXRpYyBuc2Nvb3JkIENhbGNOYXZRdWlya1NpemluZyhu
c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0KiBhUmVuZENvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSUZvbnRNZXRyaWNzKiBhRm9udE1ldCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRm9ybUNvbnRyb2xGcmFtZSogYUZyYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lucHV0RGltZW5zaW9uU3BlYyYg
YVNwZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zU2l6ZSYgYVNpemUp
OwoKICBzdGF0aWMgdm9pZCBGb3JjZURyYXdGcmFtZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250
ZXh0LCBuc0lGcmFtZSAqIGFGcmFtZSk7CgoKICBzdGF0aWMgdm9pZCBQbGF0Zm9ybVRvRE9NTGlu
ZUJyZWFrcyhuc1N0cmluZyAmYVN0cmluZyk7CgogIHN0YXRpYyBuc3Jlc3VsdCBHZXRWYWx1ZShu
c0lDb250ZW50KiBhQ29udGVudCwgbnNTdHJpbmcqIGFSZXN1bHQpOwogIHN0YXRpYyBuc3Jlc3Vs
dCBHZXROYW1lKG5zSUNvbnRlbnQqIGFDb250ZW50LCBuc1N0cmluZyogYVJlc3VsdCk7CiAgc3Rh
dGljIG5zcmVzdWx0IEdldElucHV0RWxlbWVudFZhbHVlKG5zSUNvbnRlbnQqIGFDb250ZW50LCBu
c1N0cmluZyogYVRleHQsIFBSQm9vbCBhSW5pdGlhbFZhbHVlKTsKCgoKCgoKCiAgc3RhdGljIFBS
Qm9vbCBHZXRCb29sKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhVmFsdWUpOwojIDE2MiAiLi4v
Li4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQvaHRtbC9mb3Jtcy9zcmMvbnNGb3JtQ29udHJvbEhl
bHBlci5oIgogIHN0YXRpYyB2b2lkIEdldEJvb2xTdHJpbmcoY29uc3QgUFJCb29sIGFWYWx1ZSwg
bnNBV3JpdGFibGVTdHJpbmcmIGFSZXN1bHQpOwoKICBzdGF0aWMgbnNDb21wYXRpYmlsaXR5IEdl
dFJlcENoYXJzKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIGNoYXImIGNoYXIxLCBjaGFy
JiBjaGFyMik7CgoKICB0eXBlZGVmIGVudW0gewogICAgZUhUTUxUZXh0V3JhcF9PZmYgPSAxLAog
ICAgZUhUTUxUZXh0V3JhcF9IYXJkID0gMiwKICAgIGVIVE1MVGV4dFdyYXBfU29mdCA9IDMKICB9
IG5zSFRNTFRleHRXcmFwOwoKCgoKICBzdGF0aWMgbnNyZXN1bHQgR2V0V3JhcFByb3BlcnR5KG5z
SUNvbnRlbnQgKiBhQ29udGVudCwgbnNTdHJpbmcgJmFPdXRWYWx1ZSk7CgogIHN0YXRpYyBuc3Jl
c3VsdCBHZXRXcmFwUHJvcGVydHlFbnVtKG5zSUNvbnRlbnQgKiBhQ29udGVudCwgbnNIVE1MVGV4
dFdyYXAmIGFXcmFwUHJvcCk7CgoKICBzdGF0aWMgbnNyZXN1bHQgR2V0TG9jYWxpemVkU3RyaW5n
KGNvbnN0IGNoYXIgKiBhUHJvcEZpbGVOYW1lLCBjb25zdCBjaGFyKiBhS2V5LCBuc1N0cmluZyYg
b1ZhbCk7CiAgc3RhdGljIGNvbnN0IGNoYXIgKiBHZXRIVE1MUHJvcGVydGllc0ZpbGVOYW1lKCkg
eyByZXR1cm4gImNocm9tZTovL2NvbW11bmljYXRvci9sb2NhbGUvbGF5b3V0L0h0bWxGb3JtLnBy
b3BlcnRpZXMiOyB9CgogIHN0YXRpYyBuc3Jlc3VsdCBHZXREaXNhYmxlZChuc0lDb250ZW50KiBh
Q29udGVudCwgUFJCb29sKiBvSXNEaXNhYmxlZCk7CgoKICBzdGF0aWMgbnNyZXN1bHQgRG9NYW51
YWxTdWJtaXRPclJlc2V0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZvcm1GcmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRm9y
bUNvbnRyb2xGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
Qm9vbCBhRG9TdWJtaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
UkJvb2wgYURvRE9NRXZlbnQpOwojIDIxNSAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQv
aHRtbC9mb3Jtcy9zcmMvbnNGb3JtQ29udHJvbEhlbHBlci5oIgogIG5zcmVzdWx0IFNldEN1cnJl
bnRDaGVja1N0YXRlKFBSQm9vbCBhU3RhdGUpOwojIDIyNCAiLi4vLi4vLi4vLi4vLi4vbW96aWxs
YS9sYXlvdXQvaHRtbC9mb3Jtcy9zcmMvbnNGb3JtQ29udHJvbEhlbHBlci5oIgogIG5zcmVzdWx0
IEdldERlZmF1bHRDaGVja1N0YXRlKFBSQm9vbCogYVN0YXRlKTsKIyAyNDAgIi4uLy4uLy4uLy4u
Ly4uL21vemlsbGEvbGF5b3V0L2h0bWwvZm9ybXMvc3JjL25zRm9ybUNvbnRyb2xIZWxwZXIuaCIK
ICAgZW51bSBuc0Fycm93RGlyZWN0aW9uIHsKICAgIGVBcnJvd0RpcmVjdGlvbl9MZWZ0LAogICAg
ZUFycm93RGlyZWN0aW9uX1JpZ2h0LAogICAgZUFycm93RGlyZWN0aW9uX1VwLAogICAgZUFycm93
RGlyZWN0aW9uX0Rvd24KICAgfTsKIyAyNTkgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0
L2h0bWwvZm9ybXMvc3JjL25zRm9ybUNvbnRyb2xIZWxwZXIuaCIKICAgc3RhdGljIHZvaWQgU2V0
dXBQb2ludHMoUFJVaW50MzIgYU51bWJlck9mUG9pbnRzLCBuc2Nvb3JkKiBhUG9pbnRzLAogICAg
IG5zUG9pbnQqIGFQb2x5Z29uLCBuc2Nvb3JkIGFTY2FsZUZhY3RvciwgbnNjb29yZCBhWCwgbnNj
b29yZCBhWSwKICAgICBuc2Nvb3JkIGFDZW50ZXJYLCBuc2Nvb3JkIGFDZW50ZXJZKTsKIyAyNzYg
Ii4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvZm9ybXMvc3JjL25zRm9ybUNvbnRy
b2xIZWxwZXIuaCIKICBzdGF0aWMgdm9pZCBQYWludExpbmUobnNJUmVuZGVyaW5nQ29udGV4dCYg
YVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAgICAgICAgbnNjb29yZCBhU1gsIG5zY29vcmQg
YVNZLCBuc2Nvb3JkIGFFWCwgbnNjb29yZCBhRVksCiAgICAgICAgICAgICAgICAgUFJCb29sIGFI
b3J6LCBuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhT25lUGl4ZWwpOwojIDI4NyAiLi4vLi4vLi4v
Li4vLi4vbW96aWxsYS9sYXlvdXQvaHRtbC9mb3Jtcy9zcmMvbnNGb3JtQ29udHJvbEhlbHBlci5o
IgogIHN0YXRpYyB2b2lkIFBhaW50Rml4ZWRTaXplQ2hlY2tNYXJrKG5zSVJlbmRlcmluZ0NvbnRl
eHQmIGFSZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgYVBpeGVsc1RvVHdpcHMpOwojIDI5OSAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9s
YXlvdXQvaHRtbC9mb3Jtcy9zcmMvbnNGb3JtQ29udHJvbEhlbHBlci5oIgogIHN0YXRpYyB2b2lk
IFBhaW50Q2hlY2tNYXJrKG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250ZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFQaXhlbHNUb1R3aXBzLCBjb25zdCBu
c1JlY3QgJiBhUmVjdCk7CiMgMzEwICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1s
L2Zvcm1zL3NyYy9uc0Zvcm1Db250cm9sSGVscGVyLmgiCiAgc3RhdGljIHZvaWQgUGFpbnRGaXhl
ZFNpemVDaGVja01hcmtCb3JkZXIobnNJUmVuZGVyaW5nQ29udGV4dCYgYVJlbmRlcmluZ0NvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhUGl4ZWxzVG9Ud2lwcywgY29uc3Qg
bnNTdHlsZUNvbG9yJiBhQmFja2dyb3VuZENvbG9yKTsKIyAzMjcgIi4uLy4uLy4uLy4uLy4uL21v
emlsbGEvbGF5b3V0L2h0bWwvZm9ybXMvc3JjL25zRm9ybUNvbnRyb2xIZWxwZXIuaCIKICBzdGF0
aWMgdm9pZCBQYWludFJlY3Rhbmd1bGFyQnV0dG9uKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVu
ZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYg
YURpcnR5UmVjdCwgY29uc3QgbnNSZWN0JiBhUmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBSQm9vbCBhU2hpZnQsIFBSQm9vbCBhU2hvd0ZvY3VzLCBQUkJvb2wgYURpc2FibGVkLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJCb29sIGFEcmF3T3V0bGluZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29u
dGV4dCogYU91dGxpbmVTdHlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYUZvY3Vz
U3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqIGFTdHls
ZUNvbnRleHQsIG5zU3RyaW5nJiBhTGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lGcmFtZSogYUZvckZyYW1lKTsKCnByb3RlY3RlZDoKICBuc0Zvcm1Db250cm9sSGVscGVyKCk7
CiAgdmlydHVhbCB+bnNGb3JtQ29udHJvbEhlbHBlcigpOwoKCn07CiMgMjQgIi4uLy4uLy4uLy4u
Ly4uL21vemlsbGEvbGF5b3V0L2h0bWwvZm9ybXMvc3JjL25zRm9ybUNvbnRyb2xIZWxwZXIuY3Bw
IiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTFBhcnRzLmgiIDEKIyAyNSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTFBhcnRzLmgiCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0hUTUxQYXJ0cy5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRz
LmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTFBhcnRzLmgiIDIKIyAx
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVmbG93Q29tbWFuZC5oIiAxCiMgMjggIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxQYXJ0cy5oIiAyCmNsYXNzIG5zSUFyZW5hOwpj
bGFzcyBuc0lBdG9tOwpjbGFzcyBuc0lOb2RlSW5mbzsKY2xhc3MgbnNJQ29udGVudDsKY2xhc3Mg
bnNJQ29udGVudEl0ZXJhdG9yOwpjbGFzcyBuc0lEb2N1bWVudDsKY2xhc3MgbnNJSFRNTENvbnRl
bnQ7CmNsYXNzIG5zSUhUTUxDb250ZW50U2luazsKY2xhc3MgbnNJSFRNTEZyYWdtZW50Q29udGVu
dFNpbms7CmNsYXNzIG5zSVByZXNDb250ZXh0OwpjbGFzcyBuc0lUZXh0Q29udGVudDsKY2xhc3Mg
bnNJVVJJOwpjbGFzcyBuc1N0cmluZzsKY2xhc3MgbnNJV2ViU2hlbGw7CmNsYXNzIG5zSVByZXNT
aGVsbDsKY2xhc3MgbnNJQ2hhbm5lbDsKIyA2MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SFRNTFBhcnRzLmgiCmV4dGVybiBuc3Jlc3VsdApOU19OZXdHZW5lcmF0ZWRDb250ZW50SXRlcmF0
b3IobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSUZyYW1lKiBhRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lDb250ZW50SXRlcmF0b3IqKiBhSXRlcmF0b3IpOwoKCgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3
SFRNTEFuY2hvckVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAq
YU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MQXBwbGV0RWxlbWVudChuc0lI
VE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5z
cmVzdWx0Ck5TX05ld0hUTUxBcmVhRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5z
SU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxCUkVsZW1l
bnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4
dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MQmFzZUVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVz
dWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1M
QmFzZUZvbnRFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFO
b2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTEJvZHlFbGVtZW50KG5zSUhUTUxD
b250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1
bHQKTlNfTmV3SFRNTEJ1dHRvbkVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lO
b2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MRExpc3RFbGVt
ZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7Cgpl
eHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTERlbEVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVz
dWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1M
RGlyZWN0b3J5RWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICph
Tm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxEaXZFbGVtZW50KG5zSUhUTUxD
b250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1
bHQKTlNfTmV3SFRNTEVtYmVkRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5v
ZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxGaWVsZFNldEVs
ZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsK
CmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MRm9udEVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBh
UmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdI
VE1MRm9ybUVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5v
ZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MRnJhbWVFbGVtZW50KG5zSUhUTUxD
b250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1
bHQKTlNfTmV3SFRNTEZyYW1lU2V0RWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5z
SU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxIUkVsZW1l
bnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4
dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MSGVhZEVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVz
dWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1M
SGVhZGluZ0VsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5v
ZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MSHRtbEVsZW1lbnQobnNJSFRNTENv
bnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3Vs
dApOU19OZXdIVE1MSUZyYW1lRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5v
ZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxJbWFnZUVsZW1l
bnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4
dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MSW5wdXRFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJl
c3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRN
TEluc0VsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJ
bmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MSXNJbmRleEVsZW1lbnQobnNJSFRNTENv
bnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3Vs
dApOU19OZXdIVE1MTElFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUlu
Zm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTExhYmVsRWxlbWVudChu
c0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJu
IG5zcmVzdWx0Ck5TX05ld0hUTUxMZWdlbmRFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3Vs
dCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTExp
bmtFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5m
byk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTE1hcEVsZW1lbnQobnNJSFRNTENvbnRlbnQq
KiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19O
ZXdIVE1MTWVudUVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAq
YU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MTWV0YUVsZW1lbnQobnNJSFRN
TENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jl
c3VsdApOU19OZXdIVE1MTW9kRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5v
ZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxPTGlzdEVsZW1l
bnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4
dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MT2JqZWN0RWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFS
ZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hU
TUxPcHRHcm91cEVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAq
YU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MT3B0aW9uRWxlbWVudChuc0lI
VE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5z
cmVzdWx0Ck5TX05ld0hUTUxQYXJhZ3JhcGhFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3Vs
dCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTFBh
cmFtRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUlu
Zm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxQcmVFbGVtZW50KG5zSUhUTUxDb250ZW50
KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNf
TmV3SFRNTFF1b3RlRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZv
ICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxTY3JpcHRFbGVtZW50KG5z
SUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4g
bnNyZXN1bHQKTlNfTmV3SFRNTFNlbGVjdEVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0
LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MU3Bh
Y2VyRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUlu
Zm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxTcGFuRWxlbWVudChuc0lIVE1MQ29udGVu
dCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5T
X05ld0hUTUxTdHlsZUVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5m
byAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MVGFibGVDYXB0aW9uRWxl
bWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7Cgpl
eHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTFRhYmxlQ2VsbEVsZW1lbnQobnNJSFRNTENvbnRlbnQq
KiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19O
ZXdIVE1MVGFibGVDb2xFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUlu
Zm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTFRhYmxlQ29sR3JvdXBF
bGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7
CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTFRhYmxlRWxlbWVudChuc0lIVE1MQ29udGVudCoq
IGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05l
d0hUTUxUYWJsZVJvd0VsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5m
byAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MVGFibGVTZWN0aW9uRWxl
bWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7Cgpl
eHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTFRib2R5RWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFS
ZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hU
TUxUZXh0QXJlYUVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAq
YU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MVGZvb3RFbGVtZW50KG5zSUhU
TUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNy
ZXN1bHQKTlNfTmV3SFRNTFRoZWFkRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5z
SU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxUaXRsZUVs
ZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsK
CmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MVUxpc3RFbGVtZW50KG5zSUhUTUxDb250ZW50Kiog
YVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3
SFRNTFdCUkVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5v
ZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MVW5rbm93bkVsZW1lbnQobnNJSFRN
TENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCgoKCgoKCmV4dGVy
biBuc3Jlc3VsdApOU19DcmVhdGVIVE1MRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQs
CiAgICAgICAgICAgICAgICAgICAgIG5zSU5vZGVJbmZvICphTm9kZUluZm8sCiAgICAgICAgICAg
ICAgICAgICAgIFBSQm9vbCBhQ2FzZVNlbnNpdGl2ZSk7CgoKCgoKCgpleHRlcm4gbnNyZXN1bHQg
TlNfTmV3QmxvY2tGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYU5l
d0ZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhRmxhZ3Mg
PSAwKTsKCgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3QXR0cmlidXRlQ29udGVudChuc0lDb250ZW50
ICoqIGFSZXN1bHQpOwoKCgoKCmV4dGVybiBuc3Jlc3VsdCBOU19OZXdTZWxlY3RzQXJlYUZyYW1l
KG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhTmV3RnJhbWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFGbGFncyA9IDB4MDEwMDAw
MDApOwoKCgpleHRlcm4gbnNyZXN1bHQgTlNfTmV3QXJlYUZyYW1lKG5zSVByZXNTaGVsbCogYVBy
ZXNTaGVsbCwgbnNJRnJhbWUqKiBhTmV3RnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJVaW50MzIgYUZsYWdzID0gMHgwMDgwMDAwMHwweDAxMDAwMDAwKTsKCgppbmxpbmUg
bnNyZXN1bHQgTlNfTmV3VGFibGVDZWxsSW5uZXJGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hl
bGwsIG5zSUZyYW1lKiogYU5ld0ZyYW1lKSB7CiAgcmV0dXJuIE5TX05ld0Jsb2NrRnJhbWUoYVBy
ZXNTaGVsbCwgYU5ld0ZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDB8
MHgwMTAwMDAwMHwweDAwNDAwMDAwKTsKfQoKCgppbmxpbmUgbnNyZXN1bHQgTlNfTmV3RG9jdW1l
bnRFbGVtZW50RnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFOZXdG
cmFtZSkgewogIHJldHVybiBOU19OZXdBcmVhRnJhbWUoYVByZXNTaGVsbCwgYU5ld0ZyYW1lLCAw
eDAwODAwMDAwfDB4MDA0MDAwMDApOwp9CgoKaW5saW5lIG5zcmVzdWx0IE5TX05ld0Fic29sdXRl
SXRlbVdyYXBwZXJGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYU5l
d0ZyYW1lKSB7CiAgcmV0dXJuIE5TX05ld0FyZWFGcmFtZShhUHJlc1NoZWxsLCBhTmV3RnJhbWUs
IDB4MDA4MDAwMDB8MHgwMDQwMDAwMCk7Cn0KCgppbmxpbmUgbnNyZXN1bHQgTlNfTmV3RmxvYXRp
bmdJdGVtV3JhcHBlckZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBh
TmV3RnJhbWUpIHsKICByZXR1cm4gTlNfTmV3QXJlYUZyYW1lKGFQcmVzU2hlbGwsIGFOZXdGcmFt
ZSwgMHgwMDgwMDAwMHwweDAwMTAwMDAwKTsKfQoKCgppbmxpbmUgbnNyZXN1bHQgTlNfTmV3UmVs
YXRpdmVJdGVtV3JhcHBlckZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUq
KiBhTmV3RnJhbWUpIHsKICByZXR1cm4gTlNfTmV3QXJlYUZyYW1lKGFQcmVzU2hlbGwsIGFOZXdG
cmFtZSk7Cn0KCmV4dGVybiBuc3Jlc3VsdCBOU19OZXdCUkZyYW1lKG5zSVByZXNTaGVsbCogYVBy
ZXNTaGVsbCwgbnNJRnJhbWUqKiBhTmV3RnJhbWUpOwoKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0Nv
bW1lbnRGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYUZyYW1lUmVz
dWx0KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0hSRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1No
ZWxsLCBuc0lGcmFtZSoqIGFOZXdGcmFtZSk7CgoKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0hUTUxG
cmFtZU91dGVyRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFOZXdG
cmFtZSk7CgpleHRlcm4gbnNyZXN1bHQgTlNfTmV3SFRNTEZyYW1lc2V0RnJhbWUobnNJUHJlc1No
ZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFOZXdGcmFtZSk7CgpleHRlcm4gbnNyZXN1bHQg
TlNfTmV3Vmlld3BvcnRGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiog
YU5ld0ZyYW1lKTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0NhbnZhc0ZyYW1lKG5zSVByZXNTaGVs
bCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhTmV3RnJhbWUpOwpleHRlcm4gbnNyZXN1bHQgTlNf
TmV3SW1hZ2VGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYUZyYW1l
UmVzdWx0KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0lubGluZUZyYW1lKG5zSVByZXNTaGVsbCog
YVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhTmV3RnJhbWUpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3
UG9zaXRpb25lZElubGluZUZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUq
KiBhTmV3RnJhbWUpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3T2JqZWN0RnJhbWUobnNJUHJlc1No
ZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFGcmFtZVJlc3VsdCk7CmV4dGVybiBuc3Jlc3Vs
dCBOU19OZXdTcGFjZXJGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiog
YVJlc3VsdCk7CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdUZXh0RnJhbWUobnNJUHJlc1NoZWxsKiBh
UHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3Q29u
dGludWluZ1RleHRGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJl
c3VsdCk7CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdFbXB0eUZyYW1lKG5zSVByZXNTaGVsbCogYVBy
ZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0KTsKaW5saW5lIG5zcmVzdWx0IE5TX05ld1dCUkZy
YW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0KSB7CiAgcmV0
dXJuIE5TX05ld0VtcHR5RnJhbWUoYVByZXNTaGVsbCwgYVJlc3VsdCk7Cn0KZXh0ZXJuIG5zcmVz
dWx0IE5TX05ld1Njcm9sbEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUq
KiBhUmVzdWx0KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld1NpbXBsZVBhZ2VTZXF1ZW5jZUZyYW1l
KG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0KTsKZXh0ZXJuIG5z
cmVzdWx0IE5TX05ld1BhZ2VGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1l
KiogYVJlc3VsdCk7CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdGaXJzdExldHRlckZyYW1lKG5zSVBy
ZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhTmV3RnJhbWUpOwpleHRlcm4gbnNyZXN1
bHQgTlNfTmV3Rmlyc3RMaW5lRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFt
ZSoqIGFOZXdGcmFtZSk7CgoKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0Zvcm1GcmFtZShuc0lQcmVz
U2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCwgUFJVaW50MzIgYUZsYWdzKTsK
ZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0dmeEJ1dHRvbkNvbnRyb2xGcmFtZShuc0lQcmVzU2hlbGwq
IGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCk7CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdO
YXRpdmVCdXR0b25Db250cm9sRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFt
ZSoqIGFSZXN1bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3SW1hZ2VDb250cm9sRnJhbWUobnNJ
UHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQpOwpleHRlcm4gbnNyZXN1
bHQgTlNfTmV3SFRNTEJ1dHRvbkNvbnRyb2xGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGws
IG5zSUZyYW1lKiogYVJlc3VsdCk7CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdHZnhDaGVja2JveENv
bnRyb2xGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCk7
CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdOYXRpdmVDaGVja2JveENvbnRyb2xGcmFtZShuc0lQcmVz
U2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCk7CmV4dGVybiBuc3Jlc3VsdCBO
U19OZXdGaWVsZFNldEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBh
UmVzdWx0LCBQUlVpbnQzMiBhRmxhZ3MpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3RmlsZUNvbnRy
b2xGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCk7CmV4
dGVybiBuc3Jlc3VsdCBOU19OZXdMYWJlbEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwg
bnNJRnJhbWUqKiBhUmVzdWx0LCBQUlVpbnQzMiBhU3RhdGVGbGFncyk7CmV4dGVybiBuc3Jlc3Vs
dCBOU19OZXdMZWdlbmRGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiog
YVJlc3VsdCk7CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdOYXRpdmVUZXh0Q29udHJvbEZyYW1lKG5z
SVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhTmV3RnJhbWUpOwpleHRlcm4gbnNy
ZXN1bHQgTlNfTmV3R2Z4VGV4dENvbnRyb2xGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGws
IG5zSUZyYW1lKiogYU5ld0ZyYW1lKTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0dmeEF1dG9UZXh0
Q29udHJvbEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhTmV3RnJh
bWUpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3R2Z4UmFkaW9Db250cm9sRnJhbWUobnNJUHJlc1No
ZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNf
TmV3TmF0aXZlUmFkaW9Db250cm9sRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lG
cmFtZSoqIGFSZXN1bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3TmF0aXZlU2VsZWN0Q29udHJv
bEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0KTsKZXh0
ZXJuIG5zcmVzdWx0IE5TX05ld0xpc3RDb250cm9sRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1No
ZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3Q29tYm9ib3hD
b250cm9sRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQs
IFBSVWludDMyIGFGbGFncyk7CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdJc0luZGV4RnJhbWUobnNJ
UHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQpOwoKCmV4dGVybiBuc3Jl
c3VsdCBOU19OZXdUYWJsZU91dGVyRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lG
cmFtZSoqIGFSZXN1bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3VGFibGVGcmFtZShuc0lQcmVz
U2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCk7CmV4dGVybiBuc3Jlc3VsdCBO
U19OZXdUYWJsZUNhcHRpb25GcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1l
KiogYU5ld0ZyYW1lKTsKCmV4dGVybiBuc3Jlc3VsdCBOU19OZXdUYWJsZUNvbEZyYW1lKG5zSVBy
ZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0KTsKZXh0ZXJuIG5zcmVzdWx0
IE5TX05ld1RhYmxlQ29sR3JvdXBGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZy
YW1lKiogYVJlc3VsdCk7CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdUYWJsZVJvd0ZyYW1lKG5zSVBy
ZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0KTsKZXh0ZXJuIG5zcmVzdWx0
IE5TX05ld1RhYmxlUm93R3JvdXBGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZy
YW1lKiogYVJlc3VsdCk7CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdUYWJsZUNlbGxGcmFtZShuc0lQ
cmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCk7CgoKZXh0ZXJuIG5zcmVz
dWx0IE5TX05ld0hUTUxDb250ZW50U2luayhuc0lIVE1MQ29udGVudFNpbmsqKiBhSW5zdGFuY2VQ
dHJSZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRG9jdW1l
bnQqIGFEb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJKiBh
VVJMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVdlYlNoZWxsKiBh
V2ViU2hlbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ2hhbm5l
bCogYUNoYW5uZWwpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3SFRNTEZyYWdtZW50Q29udGVudFNp
bmsobnNJSFRNTEZyYWdtZW50Q29udGVudFNpbmsqKiBhSW5zdGFuY2VQdHJSZXN1bHQpOwoKCmV4
dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MUmVmbG93Q29tbWFuZChuc0lSZWZsb3dDb21tYW5kKiog
YUluc3RhbmNlUHRyUmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYVRh
cmdldEZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBuc0lSZWZsb3dDb21tYW5kOjpSZWZs
b3dUeXBlIGFSZWZsb3dUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUNo
aWxkRnJhbWUgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhQXR0cmlidXRl
ID0gMCk7CiMgMjUgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvZm9ybXMvc3Jj
L25zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSUhUTUxDb250ZW50LmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUhU
TUxDb250ZW50LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVhNTENvbnRlbnQu
aCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJWE1MQ29udGVudC5oIgojIDEg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjggIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lYTUxDb250ZW50LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJU3R5bGVkQ29udGVudC5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lTdHlsZWRDb250ZW50LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUNvbnRlbnQuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVkQ29u
dGVudC5oIiAyCgpjbGFzcyBuc1N0cmluZzsKY2xhc3MgbnNJU3R5bGVSdWxlOwpjbGFzcyBuc0lT
dHlsZUNvbnRleHQ7CmNsYXNzIG5zSVN1cHBvcnRzQXJyYXk7CmNsYXNzIG5zSVJ1bGVXYWxrZXI7
CgoKCgoKCgpjbGFzcyBuc0lTdHlsZWRDb250ZW50IDogcHVibGljIG5zSUNvbnRlbnQgewpwdWJs
aWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7IHN0YXRpYyBuc0lJRCBpaWQgPSB7
IDB4YzFlODRlMDEsIDB4Y2QxNSwgMHgxMWQyLCB7IDB4OTYsIDB4ZWQsIDB4MCwgMHgxMCwgMHg0
YiwgMHg3YiwgMHg3ZCwgMHhlYiB9IH07IHJldHVybiBpaWQ7IH0KCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRJRChuc0lBdG9tKiYgYVJlc3VsdCkgY29uc3QgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0Q2xhc3Nlcyhuc1ZvaWRBcnJheSYgYUFycmF5KSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jl
c3VsdCBIYXNDbGFzcyhuc0lBdG9tKiBhQ2xhc3MpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jl
c3VsdCBXYWxrQ29udGVudFN0eWxlUnVsZXMobnNJUnVsZVdhbGtlciogYVJ1bGVXYWxrZXIpID0g
MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFdhbGtJbmxpbmVTdHlsZVJ1bGVzKG5zSVJ1bGVXYWxrZXIq
IGFSdWxlV2Fsa2VyKSA9IDA7CiMgNTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHls
ZWRDb250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNYXBwZWRBdHRyaWJ1dGVJbXBhY3Qo
Y29uc3QgbnNJQXRvbSogYUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQUkludDMyJiBhSGludCkgY29uc3QgPSAwOwoKfTsKIyAyOSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVhNTENvbnRlbnQuaCIgMgoKY2xhc3MgbnNJTmFtZVNwYWNlOwpjbGFz
cyBuc0lOb2RlSW5mbzsKY2xhc3MgbnNJV2ViU2hlbGw7CmNsYXNzIG5zSVVSSTsKIyA0MiAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVhNTENvbnRlbnQuaCIKY2xhc3MgbnNJWE1MQ29udGVu
dCA6IHB1YmxpYyBuc0lTdHlsZWRDb250ZW50IHsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJ
RCYgR2V0SUlEKCkgeyBzdGF0aWMgbnNJSUQgaWlkID0geyAweGE2Y2Y5MGNiLCAweDE1YjMsIDB4
MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH0g
fTsgcmV0dXJuIGlpZDsgfQoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENvbnRhaW5pbmdOYW1lU3Bh
Y2UobnNJTmFtZVNwYWNlKiBhTmFtZVNwYWNlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRD
b250YWluaW5nTmFtZVNwYWNlKG5zSU5hbWVTcGFjZSomIGFOYW1lU3BhY2UpIGNvbnN0ID0gMDsK
IyA1OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVhNTENvbnRlbnQuaCIKICB2aXJ0dWFs
IG5zcmVzdWx0IE1heWJlVHJpZ2dlckF1dG9MaW5rKG5zSVdlYlNoZWxsICphU2hlbGwpID0gMDsK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRYTUxCYXNlVVJJKG5zSVVSSSAqKmFVUkkpID0gMDsKfTsK
IyA3MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVhNTENvbnRlbnQuaCIKZXh0ZXJuIG5z
cmVzdWx0Ck5TX05ld1hNTEVsZW1lbnQobnNJWE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJ
bmZvKiBhTm9kZUluZm8pOwoKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdYTUxQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb24obnNJQ29udGVudCoqIGFJbnN0YW5jZVB0clJlc3VsdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhVGFyZ2V0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFEYXRhKTsK
CmV4dGVybiBuc3Jlc3VsdApOU19OZXdYTUxFbnRpdHkobnNJQ29udGVudCoqIGFJbnN0YW5jZVB0
clJlc3VsdCwKICAgICAgICAgICAgICAgIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhTmFtZSwK
ICAgICAgICAgICAgICAgIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhUHVibGljSWQsCiAgICAg
ICAgICAgICAgICBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVN5c3RlbUlkLAogICAgICAgICAg
ICAgICAgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFOb3RhdGlvbk5hbWUpOwoKZXh0ZXJuIG5z
cmVzdWx0Ck5TX05ld1hNTE5vdGF0aW9uKG5zSUNvbnRlbnQqKiBhSW5zdGFuY2VQdHJSZXN1bHQs
CiAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhTmFtZSwKICAgICAg
ICAgICAgICAgICAgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFQdWJsaWNJZCwKICAgICAgICAg
ICAgICAgICAgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFTeXN0ZW1JZCk7CgpjbGFzcyBuc0lE
T01OYW1lZE5vZGVNYXA7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3WE1MTmFtZWROb2RlTWFwKG5z
SURPTU5hbWVkTm9kZU1hcCoqIGFJbnN0YW5jZVB0clJlc3VsdCwKICAgICAgICAgICAgICAgICAg
ICAgIG5zSVN1cHBvcnRzQXJyYXkgKmFBcnJheSk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3WE1M
Q0RBVEFTZWN0aW9uKG5zSUNvbnRlbnQqKiBhSW5zdGFuY2VQdHJSZXN1bHQpOwojIDI2ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJSFRNTENvbnRlbnQuaCIgMgojIDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0hUTUxWYWx1ZS5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0hUTUxWYWx1ZS5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUu
aCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIVE1MVmFsdWUuaCIgMgojIDEg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NvbG9yLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSFRNTFZhbHVlLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNTdHJpbmcuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIVE1MVmFs
dWUuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMg
MjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxWYWx1ZS5oIiAyCgplbnVtIG5zSFRN
TFVuaXQgewogIGVIVE1MVW5pdF9OdWxsID0gMCwKICBlSFRNTFVuaXRfRW1wdHkgPSAxLAogIGVI
VE1MVW5pdF9TdHJpbmcgPSAxMCwKICBlSFRNTFVuaXRfSVN1cHBvcnRzID0gMjAsCiAgZUhUTUxV
bml0X0ludGVnZXIgPSA1MCwKICBlSFRNTFVuaXRfRW51bWVyYXRlZCA9IDUxLAogIGVIVE1MVW5p
dF9Qcm9wb3J0aW9uYWwgPSA1MiwKICBlSFRNTFVuaXRfQ29sb3IgPSA4MCwKICBlSFRNTFVuaXRf
Q29sb3JOYW1lID0gODEsCiAgZUhUTUxVbml0X1BlcmNlbnQgPSA5MCwKCgogIGVIVE1MVW5pdF9Q
aXhlbCA9IDYwMAp9OwoKY2xhc3MgbnNIVE1MVmFsdWUgewpwdWJsaWM6CiAgbnNIVE1MVmFsdWUo
bnNIVE1MVW5pdCBhVW5pdCA9IGVIVE1MVW5pdF9OdWxsKTsKICBuc0hUTUxWYWx1ZShQUkludDMy
IGFWYWx1ZSwgbnNIVE1MVW5pdCBhVW5pdCk7CiAgbnNIVE1MVmFsdWUoZmxvYXQgYVZhbHVlKTsK
ICBuc0hUTUxWYWx1ZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVZhbHVlLCBuc0hUTUxVbml0
IGFVbml0ID0gZUhUTUxVbml0X1N0cmluZyk7CiAgbnNIVE1MVmFsdWUobnNJU3VwcG9ydHMqIGFW
YWx1ZSk7CiAgbnNIVE1MVmFsdWUobnNjb2xvciBhVmFsdWUpOwogIG5zSFRNTFZhbHVlKGNvbnN0
IG5zSFRNTFZhbHVlJiBhQ29weSk7CiAgfm5zSFRNTFZhbHVlKHZvaWQpOwoKICBuc0hUTUxWYWx1
ZSYgb3BlcmF0b3I9KGNvbnN0IG5zSFRNTFZhbHVlJiBhQ29weSk7CiAgUFJCb29sIG9wZXJhdG9y
PT0oY29uc3QgbnNIVE1MVmFsdWUmIGFPdGhlcikgY29uc3Q7CiAgUFJCb29sIG9wZXJhdG9yIT0o
Y29uc3QgbnNIVE1MVmFsdWUmIGFPdGhlcikgY29uc3Q7CiAgUFJVaW50MzIgSGFzaFZhbHVlKHZv
aWQpIGNvbnN0OwoKICBuc0hUTUxVbml0IEdldFVuaXQodm9pZCkgY29uc3QgeyByZXR1cm4gbVVu
aXQ7IH0KICBQUkludDMyIEdldEludFZhbHVlKHZvaWQpIGNvbnN0OwogIFBSSW50MzIgR2V0UGl4
ZWxWYWx1ZSh2b2lkKSBjb25zdDsKICBmbG9hdCBHZXRQZXJjZW50VmFsdWUodm9pZCkgY29uc3Q7
CiAgbnNBV3JpdGFibGVTdHJpbmcmIEdldFN0cmluZ1ZhbHVlKG5zQVdyaXRhYmxlU3RyaW5nJiBh
QnVmZmVyKSBjb25zdDsKICBuc0lTdXBwb3J0cyogR2V0SVN1cHBvcnRzVmFsdWUodm9pZCkgY29u
c3Q7CiAgbnNjb2xvciBHZXRDb2xvclZhbHVlKHZvaWQpIGNvbnN0OwoKICB2b2lkIFJlc2V0KHZv
aWQpOwogIHZvaWQgU2V0SW50VmFsdWUoUFJJbnQzMiBhVmFsdWUsIG5zSFRNTFVuaXQgYVVuaXQp
OwogIHZvaWQgU2V0UGl4ZWxWYWx1ZShQUkludDMyIGFWYWx1ZSk7CiAgdm9pZCBTZXRQZXJjZW50
VmFsdWUoZmxvYXQgYVZhbHVlKTsKICB2b2lkIFNldFN0cmluZ1ZhbHVlKGNvbnN0IG5zQVJlYWRh
YmxlU3RyaW5nJiBhVmFsdWUsIG5zSFRNTFVuaXQgYVVuaXQgPSBlSFRNTFVuaXRfU3RyaW5nKTsK
ICB2b2lkIFNldElTdXBwb3J0c1ZhbHVlKG5zSVN1cHBvcnRzKiBhVmFsdWUpOwogIHZvaWQgU2V0
Q29sb3JWYWx1ZShuc2NvbG9yIGFWYWx1ZSk7CiAgdm9pZCBTZXRFbXB0eVZhbHVlKHZvaWQpOwoK
ICB2b2lkIEFwcGVuZFRvU3RyaW5nKG5zQVdyaXRhYmxlU3RyaW5nJiBhQnVmZmVyKSBjb25zdDsK
ICB2b2lkIFRvU3RyaW5nKG5zQVdyaXRhYmxlU3RyaW5nJiBhQnVmZmVyKSBjb25zdDsKCnByb3Rl
Y3RlZDoKICBuc0hUTUxVbml0IG1Vbml0OwogIHVuaW9uIHsKICAgIFBSSW50MzIgbUludDsKICAg
IGZsb2F0IG1GbG9hdDsKICAgIFBSVW5pY2hhciogbVN0cmluZzsKICAgIG5zSVN1cHBvcnRzKiBt
SVN1cHBvcnRzOwogICAgbnNjb2xvciBtQ29sb3I7CiAgfSBtVmFsdWU7Cn07CgppbmxpbmUgUFJJ
bnQzMiBuc0hUTUxWYWx1ZTo6R2V0SW50VmFsdWUodm9pZCkgY29uc3QKewogIHt9OwoKCgogIGlm
ICgobVVuaXQgPT0gZUhUTUxVbml0X0ludGVnZXIpIHx8CiAgICAgIChtVW5pdCA9PSBlSFRNTFVu
aXRfRW51bWVyYXRlZCkgfHwKICAgICAgKG1Vbml0ID09IGVIVE1MVW5pdF9Qcm9wb3J0aW9uYWwp
KSB7CiAgICByZXR1cm4gbVZhbHVlLm1JbnQ7CiAgfQogIGVsc2UgaWYgKG1Vbml0ID09IGVIVE1M
VW5pdF9TdHJpbmcpIHsKICAgIGlmIChtVmFsdWUubVN0cmluZykgewogICAgICBQUkludDMyIGVy
cj0wOwogICAgICBuc0F1dG9TdHJpbmcgc3RyKG1WYWx1ZS5tU3RyaW5nKTsKICAgICAgcmV0dXJu
IHN0ci5Ub0ludGVnZXIoJmVycik7CiAgICB9CiAgfQogIHJldHVybiAwOwp9CgppbmxpbmUgUFJJ
bnQzMiBuc0hUTUxWYWx1ZTo6R2V0UGl4ZWxWYWx1ZSh2b2lkKSBjb25zdAp7CiAge307CiAgaWYg
KG1Vbml0ID09IGVIVE1MVW5pdF9QaXhlbCkgewogICAgcmV0dXJuIG1WYWx1ZS5tSW50OwogIH0K
ICByZXR1cm4gMDsKfQoKaW5saW5lIGZsb2F0IG5zSFRNTFZhbHVlOjpHZXRQZXJjZW50VmFsdWUo
dm9pZCkgY29uc3QKewogIHt9OwogIGlmIChtVW5pdCA9PSBlSFRNTFVuaXRfUGVyY2VudCkgewog
ICAgcmV0dXJuIG1WYWx1ZS5tRmxvYXQ7CiAgfQogIHJldHVybiAwLjBmOwp9CgppbmxpbmUgbnNB
V3JpdGFibGVTdHJpbmcmIG5zSFRNTFZhbHVlOjpHZXRTdHJpbmdWYWx1ZShuc0FXcml0YWJsZVN0
cmluZyYgYUJ1ZmZlcikgY29uc3QKewogIHt9OwoKICBhQnVmZmVyLlNldExlbmd0aCgwKTsKICBp
ZiAoKChtVW5pdCA9PSBlSFRNTFVuaXRfU3RyaW5nKSB8fCAobVVuaXQgPT0gZUhUTUxVbml0X0Nv
bG9yTmFtZSkpICYmCiAgICAgICgwICE9IG1WYWx1ZS5tU3RyaW5nKSkgewogICAgYUJ1ZmZlci5B
cHBlbmQobVZhbHVlLm1TdHJpbmcpOwogIH0KICByZXR1cm4gYUJ1ZmZlcjsKfQoKaW5saW5lIG5z
SVN1cHBvcnRzKiBuc0hUTUxWYWx1ZTo6R2V0SVN1cHBvcnRzVmFsdWUodm9pZCkgY29uc3QKewog
IHt9OwogIGlmIChtVW5pdCA9PSBlSFRNTFVuaXRfSVN1cHBvcnRzKSB7CiAgICBuc0lTdXBwb3J0
cyAqcmVzdWx0ID0gbVZhbHVlLm1JU3VwcG9ydHM7CiAgICBuc19pZl9hZGRyZWYocmVzdWx0KTsK
ICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHJldHVybiAwOwp9CgppbmxpbmUgbnNjb2xvciBuc0hU
TUxWYWx1ZTo6R2V0Q29sb3JWYWx1ZSh2b2lkKSBjb25zdAp7CiAge307CgogIGlmIChtVW5pdCA9
PSBlSFRNTFVuaXRfQ29sb3IpIHsKICAgIHJldHVybiBtVmFsdWUubUNvbG9yOwogIH0KICBpZiAo
KG1Vbml0ID09IGVIVE1MVW5pdF9Db2xvck5hbWUpICYmIChtVmFsdWUubVN0cmluZykpIHsKICAg
IG5zY29sb3IgY29sb3I7CiAgICBpZiAoTlNfQ29sb3JOYW1lVG9SR0IobnNBdXRvU3RyaW5nKG1W
YWx1ZS5tU3RyaW5nKSwgJmNvbG9yKSkgewogICAgICByZXR1cm4gY29sb3I7CiAgICB9CiAgfQog
IHJldHVybiAoKG5zY29sb3IpICgoMjU1IDw8IDI0KSB8ICgoMCk8PDE2KSB8ICgoMCk8PDgpIHwg
KDApKSk7Cn0KCmlubGluZSBQUkJvb2wgbnNIVE1MVmFsdWU6Om9wZXJhdG9yIT0oY29uc3QgbnNI
VE1MVmFsdWUmIGFPdGhlcikgY29uc3QKewogIHJldHVybiBQUkJvb2woISAoKCp0aGlzKSA9PSBh
T3RoZXIpKTsKfQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJSFRNTENvbnRlbnQu
aCIgMgpjbGFzcyBuc1N0cmluZzsKY2xhc3MgbnNJRnJhbWU7CmNsYXNzIG5zSVN0eWxlUnVsZTsK
Y2xhc3MgbnNJUHJlc0NvbnRleHQ7CmNsYXNzIG5zSUhUTUxNYXBwZWRBdHRyaWJ1dGVzOwpjbGFz
cyBuc0lVUkk7CnN0cnVjdCBuc1J1bGVEYXRhOwoKCgoKCgp0eXBlZGVmIHZvaWQgKCpuc01hcFJ1
bGVUb0F0dHJpYnV0ZXNGdW5jKShjb25zdCBuc0lIVE1MTWFwcGVkQXR0cmlidXRlcyogYUF0dHJp
YnV0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zUnVsZURh
dGEqIGFEYXRhKTsKCgpjbGFzcyBuc0lIVE1MQ29udGVudCA6IHB1YmxpYyBuc0lYTUxDb250ZW50
CnsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBu
c0lJRCBpaWQgPSB7IDB4YjllMTEwYjAsIDB4OTRkNiwgMHgxMWQxLCB7MHg4OSwgMHg1YywgMHgw
MCwgMHg2MCwgMHgwOCwgMHg5MSwgMHgxYiwgMHg4MX0gfTsgcmV0dXJuIGlpZDt9CgoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IENvbXBhY3QoKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SFRN
TEF0dHJpYnV0ZShuc0lBdG9tKiBhQXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBuc0hUTUxWYWx1ZSYgYVZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUkJvb2wgYU5vdGlmeSkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEhUTUxBdHRy
aWJ1dGUobnNJQXRvbSogYUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNIVE1MVmFsdWUmIGFWYWx1ZSkgY29uc3QgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0
cmlidXRlTWFwcGluZ0Z1bmN0aW9uKG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMmIGFNYXBSdWxl
RnVuYykgY29uc3QgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEF0dHJpYnV0ZVRvU3RyaW5nKG5z
SUF0b20qIGFBdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBu
c0hUTUxWYWx1ZSYgYVZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBV3Jp
dGFibGVTdHJpbmcmIGFSZXN1bHQpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBTdHJp
bmdUb0F0dHJpYnV0ZShuc0lBdG9tKiBhQXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFWYWx1ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSFRNTFZhbHVlJiBhUmVzdWx0KSA9IDA7CgoKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0QmFzZVVSTChuc0lVUkkqJiBhQmFzZVVSTCkgY29uc3QgPSAwOwoKCgoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJhc2VUYXJnZXQobnNBV3JpdGFibGVTdHJpbmcmIGFC
YXNlVGFyZ2V0KSBjb25zdCA9IDA7Cn07CiMgMjYgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5
b3V0L2h0bWwvZm9ybXMvc3JjL25zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIgMQojIDI3ICIuLi8uLi8u
Li8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Zvcm1zL3NyYy9uc0Zvcm1Db250cm9sSGVscGVy
LmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hlbGwuaCIgMQoj
IDI4ICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Zvcm1zL3NyYy9uc0Zvcm1D
b250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVz
Q29udGV4dC5oIiAxCiMgMjkgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvZm9y
bXMvc3JjL25zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVN0eWxlQ29udGV4dC5oIiAxCiMgMzAgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEv
bGF5b3V0L2h0bWwvZm9ybXMvc3JjL25zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4v
Li4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQvaHRtbC9iYXNlL3NyYy9uc0xlYWZGcmFtZS5oIiAx
CiMgMzEgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvZm9ybXMvc3JjL25zRm9y
bUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQv
aHRtbC9zdHlsZS9zcmMvbnNDU1NSZW5kZXJpbmcuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi8uLi9t
b3ppbGxhL2xheW91dC9odG1sL3N0eWxlL3NyYy9uc0NTU1JlbmRlcmluZy5oIgojIDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiIDEKIyAyNiAiLi4vLi4v
Li4vLi4vLi4vbW96aWxsYS9sYXlvdXQvaHRtbC9zdHlsZS9zcmMvbnNDU1NSZW5kZXJpbmcuaCIg
MgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZUNvbnRleHQuaCIgMQojIDI3
ICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL3N0eWxlL3NyYy9uc0NTU1JlbmRl
cmluZy5oIiAyCnN0cnVjdCBuc1BvaW50OwoKY2xhc3MgbnNDU1NSZW5kZXJpbmcgewpwdWJsaWM6
CiMgMzkgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvc3R5bGUvc3JjL25zQ1NT
UmVuZGVyaW5nLmgiCiAgc3RhdGljIHZvaWQgUGFpbnRCb3JkZXIobnNJUHJlc0NvbnRleHQqIGFQ
cmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0
JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSog
YUZvckZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5
UmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3QmIGFCb3JkZXJBcmVh
LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU3R5bGVCb3JkZXImIGFCb3JkZXJT
dHlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqIGFTdHlsZUNv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnRuIGFTa2lwU2lkZXMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNSZWN0KiBhR2FwID0gMCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc2Nvb3JkIGFIYXJkQm9yZGVyU2l6ZSA9IDAsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJCb29sIGFTaG91bGRJZ25vcmVSb3VuZGVkID0gMCk7CiMgNTkgIi4uLy4uLy4uLy4u
Ly4uL21vemlsbGEvbGF5b3V0L2h0bWwvc3R5bGUvc3JjL25zQ1NTUmVuZGVyaW5nLmgiCiAgc3Rh
dGljIHZvaWQgUGFpbnRPdXRsaW5lKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCYgYVJlbmRlcmluZ0NvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGb3JGcmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3QmIGFEaXJ0eVJlY3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0JiBhQm9yZGVyQXJlYSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBuc1N0eWxlQm9yZGVyJiBhQm9yZGVyU3R5bGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgbnNTdHlsZU91dGxpbmUmIGFPdXRsaW5lU3R5bGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhU3R5bGVDb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgIFBSSW50biBhU2tpcFNpZGVzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zUmVjdCogYUdhcCA9IDApOwojIDgxICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxh
L2xheW91dC9odG1sL3N0eWxlL3NyYy9uc0NTU1JlbmRlcmluZy5oIgogIHN0YXRpYyB2b2lkIFBh
aW50Qm9yZGVyRWRnZXMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250ZXh0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGb3JGcmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVjdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYUJvcmRlckFyZWEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0JvcmRlckVkZ2VzICogYUJvcmRlckVkZ2Vz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhU3R5bGVD
b250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnRuIGFTa2lwU2lkZXMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1JlY3QqIGFHYXAgPSAwKTsKIyA5OSAi
Li4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQvaHRtbC9zdHlsZS9zcmMvbnNDU1NSZW5kZXJp
bmcuaCIKICBzdGF0aWMgdm9pZCBQYWludEJhY2tncm91bmQobnNJUHJlc0NvbnRleHQqIGFQcmVz
Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4
dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZy
YW1lKiBhRm9yRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVj
dCYgYURpcnR5UmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0
JiBhQm9yZGVyQXJlYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNTdHls
ZUJhY2tncm91bmQmIGFDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bnNTdHlsZUJvcmRlciYgYUJvcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNj
b29yZCBhRFgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYURZKTsKCiAg
c3RhdGljIHZvaWQgRHJhd0Rhc2hlZFNpZGVzKFBSSW50biBzdGFydFNpZGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFDb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3QmIGFEaXJ0eVJlY3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVWludDggYm9yZGVyU3R5bGVzW10sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zY29sb3IgYm9yZGVyQ29sb3JzW10sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYm9yZGVyT3V0c2lkZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0JiBib3JkZXJJbnNpZGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50biBhU2tpcFNpZGVzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc1JlY3QqIGFHYXApOwoKICBzdGF0aWMgdm9pZCBEcmF3
RGFzaGVkU2lkZXMoUFJJbnRuIHN0YXJ0U2lkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJUmVuZGVyaW5nQ29udGV4dCYgYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgbnNTdHlsZUNvbG9yKiBhQ29sb3JTdHlsZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgbnNTdHlsZUJvcmRlciogYUJvcmRlclN0eWxlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1N0eWxlT3V0bGluZSogYU91dGxpbmVTdHlsZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFEb091dGxpbmUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYm9yZGVyT3V0c2lkZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0JiBib3JkZXJJbnNpZGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50biBhU2tpcFNpZGVzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc1JlY3QqIGFHYXApOwoKCgoKICBzdGF0aWMgdm9pZCBEcmF3RGFz
aGVkU2VnbWVudHMobnNJUmVuZGVyaW5nQ29udGV4dCYgYUNvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYUJvdW5kcywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNCb3JkZXJFZGdlcyAqIGFCb3JkZXJFZGdlcywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnRuIGFTa2lwU2lkZXMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zUmVjdCogYUdhcCk7CgoKCgoKCgogIHN0YXRpYyBuc2NvbG9y
IFRyYW5zZm9ybUNvbG9yKG5zY29sb3IgYU1hcENvbG9yLFBSQm9vbCBhTm9CYWNrR3JvdW5kKTsK
CnByb3RlY3RlZDoKCgoKCgoKCiAgc3RhdGljIHZvaWQgUGFpbnRSb3VuZGVkQm9yZGVyKG5zSVBy
ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVu
ZGVyaW5nQ29udGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJRnJhbWUqIGFGb3JGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBu
c1JlY3QmIGFEaXJ0eVJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0
JiBhQm9yZGVyQXJlYSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1N0eWxlQm9y
ZGVyKiBhQm9yZGVyU3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNTdHls
ZU91dGxpbmUqIGFPdXRsaW5lU3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5
bGVDb250ZXh0KiBhU3R5bGVDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50
biBhU2tpcFNpZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MTYgYUJvcmRlclJh
ZGl1c1s0XSxuc1JlY3QqIGFHYXAgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9v
bCBhSXNPdXRsaW5lPTApOwoKCiAgc3RhdGljIHZvaWQgUmVuZGVyU2lkZShuc0Zsb2F0UG9pbnQg
YVBvaW50c1tdLG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBuc1N0eWxlQm9yZGVyKiBhQm9yZGVyU3R5bGUsY29uc3Qg
bnNTdHlsZU91dGxpbmUqIGFPdXRsaW5lU3R5bGUsbnNJU3R5bGVDb250ZXh0KiBhU3R5bGVDb250
ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQ4IGFTaWRlLG5zTWFyZ2luICZhQm9y
VGhpY2ssbnNjb29yZCBhVHdpcHNQZXJQaXhlbCwKICAgICAgICAgICAgICAgICAgICAgICAgUFJC
b29sIGFJc091dGxpbmU9MCk7CgogIHN0YXRpYyB2b2lkIFBhaW50Um91bmRlZEJhY2tncm91bmQo
bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJUmVuZGVyaW5nQ29udGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRm9yRnJhbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVjdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbnNSZWN0JiBhQm9yZGVyQXJlYSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbnNTdHlsZUJhY2tncm91bmQmIGFDb2xvciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNjb29yZCBhRFgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zY29vcmQgYURZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDE2IGFUaGVS
YWRpdXNbNF0pOwoKCiAgc3RhdGljIG5zY29sb3IgTWFrZUJldmVsQ29sb3IoUFJJbnRuIHdoaWNo
U2lkZSwgUFJVaW50OCBzdHlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc2Nv
bG9yIGFCYWNrZ3JvdW5kQ29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNj
b2xvciBhQm9yZGVyQ29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29s
IGFTcGVjaWFsQ2FzZSk7CgogIHN0YXRpYyBQUkludG4gTWFrZVNpZGUobnNQb2ludCBhUG9pbnRz
W10sCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhQ29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50biB3aGljaFNpZGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBuc1JlY3QmIG91dHNpZGUsIGNvbnN0IG5zUmVjdCYgaW5zaWRl
LAogICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnRuIGFTa2lwU2lkZXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBQUkludG4gYm9yZGVyUGFydCwgZmxvYXQgYm9yZGVyRnJhYywKICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zY29vcmQgdHdpcHNQZXJQaXhlbCk7CgogIHN0YXRpYyB2b2lk
IERyYXdTaWRlKG5zSVJlbmRlcmluZ0NvbnRleHQmIGFDb250ZXh0LAogICAgICAgICAgICAgICAg
ICAgICAgIFBSSW50biB3aGljaFNpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUFJV
aW50OCBib3JkZXJTdHlsZSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc2NvbG9yIGJv
cmRlckNvbG9yLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zY29sb3IgYUJhY2tncm91
bmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3QmIGJvcmRlck91dHNp
ZGUsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0JiBib3JkZXJJbnNpZGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgUFJJbnRuIGFTa2lwU2lkZXMsCiAgICAgICAgICAgICAgICAg
ICAgICAgbnNjb29yZCB0d2lwc1BlclBpeGVsLAogICAgICAgICAgICAgICAgICAgICAgIG5zUmVj
dCogYUdhcCA9IDApOwoKCiAgc3RhdGljIHZvaWQgRHJhd0xpbmUgKG5zSVJlbmRlcmluZ0NvbnRl
eHQmIGFDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFYMSwgbnNjb29y
ZCBhWTEsIG5zY29vcmQgYVgyLCBuc2Nvb3JkIGFZMiwKICAgICAgICAgICAgICAgICAgICAgICAg
bnNSZWN0KiBhR2FwKTsKCiAgc3RhdGljIHZvaWQgRmlsbFBvbHlnb24gKG5zSVJlbmRlcmluZ0Nv
bnRleHQmIGFDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1BvaW50
IGFQb2ludHNbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhTnVtUG9pbnRz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBuc1JlY3QqIGFHYXApOwoKfTsKCgoKCgoKCmNs
YXNzIFFCQ3VydmUKewoKcHVibGljOgogICAgICAgIG5zRmxvYXRQb2ludCBtQW5jMTsKICAgICAg
ICBuc0Zsb2F0UG9pbnQgbUNvbjsKICAgICAgICBuc0Zsb2F0UG9pbnQgbUFuYzI7CgogIFFCQ3Vy
dmUoKSB7bUFuYzEueD0wO21BbmMxLnk9MDttQ29uPW1BbmMyPW1BbmMxO30KICB2b2lkIFNldENv
bnRyb2xzKG5zRmxvYXRQb2ludCAmYUFuYzEsbnNGbG9hdFBvaW50ICZhQ29uLG5zRmxvYXRQb2lu
dCAmYUFuYzIpIHsgbUFuYzEgPSBhQW5jMTsgbUNvbiA9IGFDb247IG1BbmMyID0gYUFuYzI7fQog
IHZvaWQgU2V0UG9pbnRzKGZsb2F0IGExeCxmbG9hdCBhMXksZmxvYXQgYWN4LGZsb2F0IGFjeSxm
bG9hdCBhMngsZmxvYXQgYTJ5KSB7bUFuYzEuTW92ZVRvKGExeCxhMXkpLG1Db24uTW92ZVRvKGFj
eCxhY3kpLG1BbmMyLk1vdmVUbyhhMngsYTJ5KTt9CiMgMjQ3ICIuLi8uLi8uLi8uLi8uLi9tb3pp
bGxhL2xheW91dC9odG1sL3N0eWxlL3NyYy9uc0NTU1JlbmRlcmluZy5oIgogIHZvaWQgU3ViRGl2
aWRlKG5zSVJlbmRlcmluZ0NvbnRleHQgKmFSZW5kZXJpbmdDb250ZXh0LG5zUG9pbnQgYVBvaW50
QXJyYXlbXSxQUkludDMyICphQ3VySW5kZXgpOwoKCgoKCgoKICB2b2lkIE1pZFBvaW50RGl2aWRl
KFFCQ3VydmUgKkEsUUJDdXJ2ZSAqQik7Cn07CgoKCgoKCgpjbGFzcyBSb3VuZGVkUmVjdAp7Cgpw
dWJsaWM6CiAgUFJJbnQzMiBtUm91bmRuZXNzWzRdOwoKICBQUkJvb2wgbURvUm91bmQ7CgogIFBS
SW50MTYgbUxlZnQ7CiAgUFJJbnQxNiBtUmlnaHQ7CiAgUFJJbnQxNiBtVG9wOwogIFBSSW50MTYg
bUJvdHRvbTsKCgoKCgogIHZvaWQgUm91bmRSZWN0KCkge21Sb3VuZG5lc3NbMF09MDt9CiMgMjky
ICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL3N0eWxlL3NyYy9uc0NTU1JlbmRl
cmluZy5oIgogIHZvaWQgU2V0KG5zY29vcmQgYUxlZnQsbnNjb29yZCBhVG9wLFBSSW50MzIgYVdp
ZHRoLFBSSW50MzIgYUhlaWdodCxQUkludDE2IGFSYWRpdXNbNF0sUFJJbnQxNiBhTnVtVHdpcFBl
clBpeCk7CiMgMzAxICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL3N0eWxlL3Ny
Yy9uc0NTU1JlbmRlcmluZy5oIgogIHZvaWQgQ2FsY0luc2V0Q3VydmVzKFFCQ3VydmUgJmFVTEN1
cnZlLFFCQ3VydmUgJmFVUkN1cnZlLFFCQ3VydmUgJmFMTEN1cnZlLFFCQ3VydmUgJmFMUkN1cnZl
LG5zTWFyZ2luICZhQm9yZGVyKTsKIyAzMTEgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0
L2h0bWwvc3R5bGUvc3JjL25zQ1NTUmVuZGVyaW5nLmgiCiAgdm9pZCBHZXRSb3VuZGVkQm9yZGVy
cyhRQkN1cnZlICZhVUxDdXJ2ZSxRQkN1cnZlICZhVVJDdXJ2ZSxRQkN1cnZlICZhTExDdXJ2ZSxR
QkN1cnZlICZhTFJDdXJ2ZSk7Cgp9OwojIDMyICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91
dC9odG1sL2Zvcm1zL3NyYy9uc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4u
Ly4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvYmFzZS9zcmMvbnNIVE1MSUlEcy5oIiAxCiMgMjUg
Ii4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvYmFzZS9zcmMvbnNIVE1MSUlEcy5o
IgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjYgIi4u
Ly4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvYmFzZS9zcmMvbnNIVE1MSUlEcy5oIiAy
CgoKZXh0ZXJuIGNvbnN0IG5zSUlEIGtJQXJlYUZyYW1lSUlEOwpleHRlcm4gY29uc3QgbnNJSUQg
a0lIVE1MQ29udGVudElJRDsKZXh0ZXJuIGNvbnN0IG5zSUlEIGtJSFRNTFJlZmxvd0lJRDsKZXh0
ZXJuIGNvbnN0IG5zSUlEIGtJUGFnZVNlcXVlbmNlRnJhbWVJSUQ7CmV4dGVybiBjb25zdCBuc0lJ
RCBrSVN0eWxlZENvbnRlbnRJSUQ7CmV4dGVybiBjb25zdCBuc0lJRCBrSVRleHRDb250ZW50SUlE
OwojIDMzICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Zvcm1zL3NyYy9uc0Zv
cm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lW
aWV3LmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIKIyAxICIv
dXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1
ZGUvc3RkaW8uaCIgMSAzCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3Lmgi
IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDI4ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlldy5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zQ29vcmQuaCIgMQojIDI5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
Vmlldy5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIiAxCiMg
MzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3LmgiIDIKIyAxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNHVUlFdmVudC5oIiAxCiMgMzEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lWaWV3LmgiIDIKCmNsYXNzIG5zSVZpZXdNYW5hZ2VyOwpjbGFzcyBuc0lSZWdpb247
CmNsYXNzIG5zSVJlbmRlcmluZ0NvbnRleHQ7CmNsYXNzIG5zVHJhbnNmb3JtMkQ7CmNsYXNzIG5z
SUZyYW1lOwpjbGFzcyBuc0lWaWV3T2JzZXJ2ZXI7CmNsYXNzIG5zVm9pZEFycmF5OwpzdHJ1Y3Qg
bnNSZWN0OwoKCgoKc3RydWN0IG5zVmlld0NsaXAgewogIG5zY29vcmQgbUxlZnQ7CiAgbnNjb29y
ZCBtUmlnaHQ7CiAgbnNjb29yZCBtVG9wOwogIG5zY29vcmQgbUJvdHRvbTsKfTsKCgoKCgoKZW51
bSBuc1ZpZXdWaXNpYmlsaXR5IHsKICBuc1ZpZXdWaXNpYmlsaXR5X2tIaWRlID0gMCwKICBuc1Zp
ZXdWaXNpYmlsaXR5X2tTaG93ID0gMSwKICBuc1ZpZXdWaXNpYmlsaXR5X2tJbmhlcml0ID0gMgp9
OwojIDc4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlldy5oIgpjbGFzcyBuc0lWaWV3
IDogcHVibGljIG5zSVN1cHBvcnRzCnsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0
SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4ZjBhMjFjNDAsIDB4YTdlMSwgMHgx
MWQxLCB7IDB4YTgsIDB4MjQsIDB4MDAsIDB4NDAsIDB4OTUsIDB4OWEsIDB4MjgsIDB4YzkgfSB9
OyByZXR1cm4gaWlkO30KIyA5NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIK
ICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJVmlld01hbmFnZXIqIGFNYW5hZ2VyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNS
ZWN0ICZhQm91bmRzLAogICAgICAgICAgICAgICAgICAgY29uc3QgbnNJVmlldyAqYVBhcmVudCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zVmlld1Zp
c2liaWxpdHkgYVZpc2liaWxpdHlGbGFnID0gbnNWaWV3VmlzaWJpbGl0eV9rU2hvdykgPSAwOwoj
IDEwOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIKICB2aXJ0dWFsIG5zcmVz
dWx0IERlc3Ryb3koKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZpZXdNYW5hZ2Vy
KG5zSVZpZXdNYW5hZ2VyIComYVZpZXdNZ3IpIGNvbnN0ID0gMDsKIyAxMjYgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lWaWV3LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBQYWludChuc0lSZW5k
ZXJpbmdDb250ZXh0JiByYywgY29uc3QgbnNSZWN0JiByZWN0LAogICAgICAgICAgICAgICAgICAg
IFBSVWludDMyIGFQYWludEZsYWdzLCBQUkJvb2wgJmFSZXN1bHQpID0gMDsKIyAxMzggIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBQYWludChu
c0lSZW5kZXJpbmdDb250ZXh0JiByYywgY29uc3QgbnNJUmVnaW9uJiByZWdpb24sCiAgICAgICAg
ICAgICAgICAgICAgUFJVaW50MzIgYVBhaW50RmxhZ3MsIFBSQm9vbCAmYVJlc3VsdCkgPSAwOwoj
IDE0OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIKICB2aXJ0dWFsIG5zcmVz
dWx0IEhhbmRsZUV2ZW50KG5zR1VJRXZlbnQgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAg
ICAgIFBSVWludDMyIGFFdmVudEZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zRXZl
bnRTdGF0dXMqIGFTdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFGb3Jj
ZUhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wmIGFIYW5kbGVkKSA9IDA7
CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UG9zaXRpb24obnNjb29yZCB4LCBuc2Nvb3Jk
IHkpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQb3NpdGlvbihuc2Nvb3JkICp4
LCBuc2Nvb3JkICp5KSBjb25zdCA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGlt
ZW5zaW9ucyhuc2Nvb3JkIHdpZHRoLCBuc2Nvb3JkIGhlaWdodCwgUFJCb29sIGFQYWludCA9IDEp
ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERpbWVuc2lvbnMobnNjb29yZCAqd2lkdGgsIG5z
Y29vcmQgKmhlaWdodCkgY29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Qm91
bmRzKGNvbnN0IG5zUmVjdCAmYUJvdW5kcywgUFJCb29sIGFQYWludCA9IDEpID0gMDsKIyAxOTUg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBT
ZXRCb3VuZHMobnNjb29yZCBhWCwgbnNjb29yZCBhWSwKICAgICAgICAgICAgICAgICAgICAgICAg
bnNjb29yZCBhV2lkdGgsIG5zY29vcmQgYUhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAg
UFJCb29sIGFQYWludCA9IDEpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm91bmRz
KG5zUmVjdCAmYUJvdW5kcykgY29uc3QgPSAwOwojIDIxNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVZpZXcuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENoaWxkQ2xpcChuc2Nvb3JkIGFM
ZWZ0LCBuc2Nvb3JkIGFUb3AsIG5zY29vcmQgYVJpZ2h0LCBuc2Nvb3JkIGFCb3R0b20pID0gMDsK
IyAyMjQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3LmgiCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRDaGlsZENsaXAobnNjb29yZCAqYUxlZnQsIG5zY29vcmQgKmFUb3AsIG5zY29vcmQg
KmFSaWdodCwgbnNjb29yZCAqYUJvdHRvbSkgY29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgU2V0VmlzaWJpbGl0eShuc1ZpZXdWaXNpYmlsaXR5IGFWaXNpYmlsaXR5KSA9IDA7CgoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZpc2liaWxpdHkobnNWaWV3VmlzaWJpbGl0eSAmYVZp
c2liaWxpdHkpIGNvbnN0ID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRaUGFyZW50
KG5zSVZpZXcgKmFaUGFyZW50KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRaUGFyZW50KG5z
SVZpZXcgKiZhWlBhcmVudCkgY29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
WkluZGV4KFBSSW50MzIgYVpJbmRleCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
WkluZGV4KFBSSW50MzIgJmFaSW5kZXgpIGNvbnN0ID0gMDsKIyAyNjkgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lWaWV3LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBdXRvWkluZGV4KFBS
Qm9vbCBhQXV0b1pJbmRleCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBdXRvWklu
ZGV4KFBSQm9vbCAmYUF1dG9aSW5kZXgpIGNvbnN0ID0gMDsKIyAyODUgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lWaWV3LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGbG9hdGluZyhQUkJv
b2wgYUZsb2F0aW5nVmlldykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmxvYXRpbmcoUFJC
b29sICZhRmxvYXRpbmdWaWV3KSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBT
ZXRQYXJlbnQobnNJVmlldyAqYVBhcmVudCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRQYXJlbnQobnNJVmlldyAqJmFQYXJlbnQpIGNvbnN0ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0TmV4dFNpYmxpbmcobnNJVmlldyAqJmFOZXh0U2libGluZykgY29uc3QgPSAwOwoK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXROZXh0U2libGluZyhuc0lWaWV3KiBhTmV4dFNpYmxp
bmcpID0gMDsKIyAzMjEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3LmgiCiAgdmly
dHVhbCBuc3Jlc3VsdCBJbnNlcnRDaGlsZChuc0lWaWV3ICphQ2hpbGQsIG5zSVZpZXcgKmFTaWJs
aW5nKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVDaGlsZChuc0lWaWV3ICph
Q2hpbGQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2hpbGRDb3VudChQUkludDMy
ICZhQ291bnQpIGNvbnN0ID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaGlsZChQ
UkludDMyIGluZGV4LCBuc0lWaWV3KiYgYUNoaWxkKSBjb25zdCA9IDA7CgoKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgU2V0T3BhY2l0eShmbG9hdCBhT3BhY2l0eSkgPSAwOwoKCgoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldE9wYWNpdHkoZmxvYXQgJmFPcGFjaXR5KSBjb25zdCA9IDA7CgoKCgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzVHJhbnNwYXJlbmN5KFBSQm9vbCAmYVRyYW5zcGFyZW50
KSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDb250ZW50VHJhbnNwYXJl
bmN5KFBSQm9vbCBhVHJhbnNwYXJlbnQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
Q2xpZW50RGF0YSh2b2lkICphRGF0YSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRD
bGllbnREYXRhKHZvaWQgKiZhRGF0YSkgY29uc3QgPSAwOwojIDM5NCAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVZpZXcuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9mZnNldEZyb21XaWRn
ZXQobnNjb29yZCAqYUR4LCBuc2Nvb3JkICphRHksIG5zSVdpZGdldCAqJmFXaWRnZXQpID0gMDsK
CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlydHlSZWdpb24obnNJUmVnaW9uIComYVJlZ2lv
bikgY29uc3QgPSAwOwojIDQxNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIK
ICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZVdpZGdldChjb25zdCBuc0lJRCAmYVdpbmRvd0lJRCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc1dpZGdldEluaXREYXRhICphV2lkZ2V0SW5pdERh
dGEgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zTmF0aXZlV2lkZ2V0IGFOYXRpdmUgPSAwLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIFBSQm9vbCBhRW5hYmxlRHJhZ0Ryb3AgPSAxKSA9IDA7CiMgNDI5ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJVmlldy5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0V2lkZ2V0KG5zSVdp
ZGdldCAqYVdpZGdldCkgPSAwOwojIDQzOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZp
ZXcuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdpZGdldChuc0lXaWRnZXQgKiZhV2lkZ2V0KSBj
b25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBIYXNXaWRnZXQoUFJCb29sICphSGFz
V2lkZ2V0KSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBMaXN0KEZJTEUqIG91
dCA9IHN0ZG91dCwgUFJJbnQzMiBhSW5kZW50ID0gMCkgY29uc3QgPSAwOwoKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgU2V0Vmlld0ZsYWdzKFBSVWludDMyIGFGbGFncykgPSAwOwoKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgQ2xlYXJWaWV3RmxhZ3MoUFJVaW50MzIgYUZsYWdzKSA9IDA7CgoKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWaWV3RmxhZ3MoUFJVaW50MzIgKmFGbGFncykgY29uc3Qg
PSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q29tcG9zaXRvckZsYWdzKFBSVWludDMy
IGFGbGFncykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29tcG9zaXRvckZsYWdzKFBSVWlu
dDMyICphRmxhZ3MpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFeHRlbnRzKG5z
UmVjdCAqYUV4dGVudHMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSWdub3JlU2V0UG9zaXRp
b24oUFJCb29sIGFTaG91bGRJZ25vcmUpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTeW5j
aFdpZGdldFNpemVQb3NpdGlvbigpID0gMDsKIyA1MDYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lWaWV3LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGlwcGVkUmVjdChuc1JlY3QmIGFD
bGlwcGVkUmVjdCwgUFJCb29sJiBhSXNDbGlwcGVkLCBQUkJvb2wmIGFFbXB0eSkgY29uc3QgPSAw
OwoKCnByaXZhdGU6CiAgdmlydHVhbCBuc3JlZmNudCBBZGRSZWYodm9pZCkgPSAwOwogIHZpcnR1
YWwgbnNyZWZjbnQgUmVsZWFzZSh2b2lkKSA9IDA7Cn07CiMgMzQgIi4uLy4uLy4uLy4uLy4uL21v
emlsbGEvbGF5b3V0L2h0bWwvZm9ybXMvc3JjL25zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgiIDEKIyAyNiAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgiCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lWaWV3TWFuYWdlci5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBv
cnRzLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgi
IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb29yZC5oIiAxCiMgMjkgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3TWFuYWdlci5oIiAyCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIgMQojIDMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJVmlld01hbmFnZXIuaCIgMgoKY2xhc3MgbnNJUmVnaW9uOwpjbGFzcyBuc0lFdmVudDsKY2xh
c3MgbnNJUHJlc0NvbnRleHQ7CmNsYXNzIG5zSVZpZXc7CmNsYXNzIG5zSVNjcm9sbGFibGVWaWV3
OwpjbGFzcyBuc0lXaWRnZXQ7CmNsYXNzIG5zSUNvbXBvc2l0ZUxpc3RlbmVyOwpzdHJ1Y3QgbnNS
ZWN0OwoKZW51bSBuc0NvbnRlbnRRdWFsaXR5IHsKICBuc0NvbnRlbnRRdWFsaXR5X2tHb29kID0g
MCwKICBuc0NvbnRlbnRRdWFsaXR5X2tGYWlyLAogIG5zQ29udGVudFF1YWxpdHlfa1Bvb3IsCiAg
bnNDb250ZW50UXVhbGl0eV9rVW5rbm93bgp9OwoKCgoKCmNsYXNzIG5zSVZpZXdNYW5hZ2VyIDog
cHVibGljIG5zSVN1cHBvcnRzCnsKcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ
RCgpIHsgc3RhdGljIG5zSUlEIGlpZCA9IHsgMHgzYTg4NjNkMCwgMHhhN2YzLCAweDExZDEsIHsg
MHhhOCwgMHgyNCwgMHgwMCwgMHg0MCwgMHg5NSwgMHg5YSwgMHgyOCwgMHhjOSB9IH07IHJldHVy
biBpaWQ7IH0KIyA2NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgi
CiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5zSURldmljZUNvbnRleHQqIGFDb250ZXh0LCBuc2Nv
b3JkIGFYID0gMCwgbnNjb29yZCBhWSA9IDApID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0Um9vdFZpZXcobnNJVmlldyAqJmFWaWV3KSA9IDA7CiMgODMgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lWaWV3TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Um9vdFZpZXco
bnNJVmlldyAqYVZpZXcsIG5zSVdpZGdldCogYVdpZGdldCA9IDApID0gMDsKCgoKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRXaW5kb3dEaW1lbnNpb25zKG5zY29vcmQgKndpZHRoLCBuc2Nvb3Jk
ICpoZWlnaHQpID0gMDsKIyAxMDAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3TWFu
YWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0V2luZG93RGltZW5zaW9ucyhuc2Nvb3JkIHdp
ZHRoLCBuc2Nvb3JkIGhlaWdodCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlc2V0U2Ny
b2xsaW5nKHZvaWQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb21wb3NpdGUodm9pZCkg
PSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFVwZGF0ZVZpZXcobnNJVmlldyAqYVZpZXcs
IFBSVWludDMyIGFVcGRhdGVGbGFncykgPSAwOwojIDEyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVZpZXdNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBVcGRhdGVWaWV3KG5zSVZp
ZXcgKmFWaWV3LCBjb25zdCBuc1JlY3QgJmFSZWN0LCBQUlVpbnQzMiBhVXBkYXRlRmxhZ3MpID0g
MDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFVwZGF0ZUFsbFZpZXdzKFBSVWludDMyIGFVcGRh
dGVGbGFncykgPSAwOwojIDE0NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5h
Z2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBVcGRhdGVWaWV3QWZ0ZXJTY3JvbGwobnNJVmlldyAq
YVZpZXcsIFBSSW50MzIgYURYLCBQUkludDMyIGFEWSkgPSAwOwojIDE1MyAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBEaXNwYXRj
aEV2ZW50KG5zR1VJRXZlbnQgKmFFdmVudCwgbnNFdmVudFN0YXR1cyogYVN0YXR1cykgPSAwOwoj
IDE2MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgiCiAgdmlydHVh
bCBuc3Jlc3VsdCBHcmFiTW91c2VFdmVudHMobnNJVmlldyAqYVZpZXcsIFBSQm9vbCYgYVJlc3Vs
dCkgPSAwOwojIDE3MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgi
CiAgdmlydHVhbCBuc3Jlc3VsdCBHcmFiS2V5RXZlbnRzKG5zSVZpZXcgKmFWaWV3LCBQUkJvb2wm
IGFSZXN1bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TW91c2VFdmVudEdyYWJi
ZXIobnNJVmlldyAqJmFWaWV3KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEtleUV2
ZW50R3JhYmJlcihuc0lWaWV3IComYVZpZXcpID0gMDsKIyAxOTUgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lWaWV3TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW5zZXJ0Q2hpbGQo
bnNJVmlldyAqYVBhcmVudCwgbnNJVmlldyAqYUNoaWxkLCBuc0lWaWV3ICphU2libGluZywKICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYUFib3ZlKSA9IDA7CiMgMjA3ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJVmlld01hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IElu
c2VydENoaWxkKG5zSVZpZXcgKmFQYXJlbnQsIG5zSVZpZXcgKmFDaGlsZCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUkludDMyIGFaSW5kZXgpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBJ
bnNlcnRaUGxhY2Vob2xkZXIobnNJVmlldyAqYVBhcmVudCwgbnNJVmlldyAqYVpDaGlsZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhWkluZGV4KSA9IDA7CgoKCgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlQ2hpbGQobnNJVmlldyAqYVBhcmVudCwgbnNJVmll
dyAqYUNoaWxkKSA9IDA7CiMgMjI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlld01h
bmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE1vdmVWaWV3QnkobnNJVmlldyAqYVZpZXcsIG5z
Y29vcmQgYVgsIG5zY29vcmQgYVkpID0gMDsKIyAyMzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lWaWV3TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgTW92ZVZpZXdUbyhuc0lWaWV3
ICphVmlldywgbnNjb29yZCBhWCwgbnNjb29yZCBhWSkgPSAwOwojIDI1MCAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXNpemVW
aWV3KG5zSVZpZXcgKmFWaWV3LCBuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0LCBQUkJv
b2wgYVJlcGFpbnRFeHBvc2VkQXJlYU9ubHkgPSAwKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgU2V0Vmlld0NoaWxkQ2xpcChuc0lWaWV3ICphVmlldywgbnNSZWN0ICphUmVjdCkgPSAw
OwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFZpZXdWaXNpYmlsaXR5KG5zSVZpZXcgKmFW
aWV3LCBuc1ZpZXdWaXNpYmlsaXR5IGFWaXNpYmxlKSA9IDA7CiMgMjc2ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJVmlld01hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFZpZXda
SW5kZXgobnNJVmlldyAqYVZpZXcsIFBSSW50MzIgYVppbmRleCkgPSAwOwojIDI4NyAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBT
ZXRWaWV3QXV0b1pJbmRleChuc0lWaWV3ICphVmlldywgUFJCb29sIGFBdXRvWkluZGV4KSA9IDA7
CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTW92ZVZpZXdBYm92ZShuc0lWaWV3ICphVmlldywg
bnNJVmlldyAqYU90aGVyKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTW92ZVZpZXdC
ZWxvdyhuc0lWaWV3ICphVmlldywgbnNJVmlldyAqYU90aGVyKSA9IDA7CgoKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgSXNWaWV3U2hvd24obnNJVmlldyAqYVZpZXcsIFBSQm9vbCAmYVJlc3VsdCkg
PSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZpZXdDbGlwQWJzb2x1dGUobnNJVmll
dyAqYVZpZXcsIG5zUmVjdCAqYVJlY3QsIFBSQm9vbCAmYVJlc3VsdCkgPSAwOwoKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgU2V0Vmlld0NvbnRlbnRUcmFuc3BhcmVuY3kobnNJVmlldyAqYVZpZXcs
IFBSQm9vbCBhVHJhbnNwYXJlbnQpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRW
aWV3T3BhY2l0eShuc0lWaWV3ICphVmlldywgZmxvYXQgYU9wYWNpdHkpID0gMDsKCgoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IFNldFZpZXdPYnNlcnZlcihuc0lWaWV3T2JzZXJ2ZXIgKmFPYnNlcnZl
cikgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Vmlld09ic2VydmVyKG5zSVZpZXdP
YnNlcnZlciAqJmFPYnNlcnZlcikgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZXZp
Y2VDb250ZXh0KG5zSURldmljZUNvbnRleHQgKiZhQ29udGV4dCkgPSAwOwoKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBTaG93UXVhbGl0eShQUkJvb2wgYVNob3cpID0gMDsKCgoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgR2V0U2hvd1F1YWxpdHkoUFJCb29sICZhUmVzdWx0KSA9IDA7CgoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IFNldFF1YWxpdHkobnNDb250ZW50UXVhbGl0eSBhUXVhbGl0eSkgPSAwOwoK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEaXNhYmxlUmVmcmVzaCh2b2lkKSA9IDA7CgoKCgoKCgog
IHZpcnR1YWwgbnNyZXN1bHQgRW5hYmxlUmVmcmVzaChQUlVpbnQzMiBhVXBkYXRlRmxhZ3MpID0g
MDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBCZWdpblVwZGF0ZVZpZXdCYXRjaCh2b2lkKSA9
IDA7CiMgNDAzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlld01hbmFnZXIuaCIKICB2
aXJ0dWFsIG5zcmVzdWx0IEVuZFVwZGF0ZVZpZXdCYXRjaChQUlVpbnQzMiBhVXBkYXRlRmxhZ3Mp
ID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRSb290U2Nyb2xsYWJsZVZpZXcobnNJ
U2Nyb2xsYWJsZVZpZXcgKmFTY3JvbGxhYmxlKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0Um9vdFNjcm9sbGFibGVWaWV3KG5zSVNjcm9sbGFibGVWaWV3ICoqYVNjcm9sbGFibGUp
ID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEaXNwbGF5KG5zSVZpZXcgKmFWaWV3LCBuc2Nv
b3JkIGFYLCBuc2Nvb3JkIGFZKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBZGRDb21w
b3NpdGVMaXN0ZW5lcihuc0lDb21wb3NpdGVMaXN0ZW5lciAqYUxpc3RlbmVyKSA9IDA7CgoKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVDb21wb3NpdGVMaXN0ZW5lcihuc0lDb21wb3NpdGVM
aXN0ZW5lciAqYUxpc3RlbmVyKSA9IDA7CiMgNDQ3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJVmlld01hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdpZGdldEZvclZpZXcobnNJ
VmlldyAqYVZpZXcsIG5zSVdpZGdldCAqKmFXaWRnZXQpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRXaWRnZXQobnNJV2lkZ2V0ICoqYVdpZGdldCkgPSAwOwoKCgoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEZvcmNlVXBkYXRlKCkgPSAwOwojIDQ3MyAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPZmZzZXQobnNj
b29yZCAqYVgsIG5zY29vcmQgKmFZKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNDYWNo
aW5nV2lkZ2V0Q2hhbmdlcyhQUkJvb2wqIGFDYWNoaW5nKT0wOwoKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgQ2FjaGVXaWRnZXRDaGFuZ2VzKFBSQm9vbCBhQ2FjaGUpPTA7CiMgNDk2ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJVmlld01hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEFs
bG93RG91YmxlQnVmZmVyaW5nKFBSQm9vbCBhRG91YmxlQnVmZmVyKT0wOwoKCgoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IElzUGFpbnRpbmcoUFJCb29sJiBhSXNQYWludGluZyk9MDsKCgoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEZsdXNoUGVuZGluZ0ludmFsaWRhdGVzKCk9MDsKIyA1MjEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQg
U2V0RGVmYXVsdEJhY2tncm91bmRDb2xvcihuc2NvbG9yIGFDb2xvcik9MDsKCgoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldERlZmF1bHRCYWNrZ3JvdW5kQ29sb3IobnNjb2xvciogYUNvbG9yKT0w
Owp9OwojIDM1ICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Zvcm1zL3NyYy9u
c0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0Nvb3JkLmgiIDEKIyAzNiAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQvaHRtbC9mb3Jt
cy9zcmMvbnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNXaWRnZXRzQ0lELmgiIDEKIyAzNyAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlv
dXQvaHRtbC9mb3Jtcy9zcmMvbnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNWaWV3c0NJRC5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc1ZpZXdzQ0lELmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1
cHBvcnRzLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zVmlld3NDSUQuaCIg
MgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGYWN0b3J5LmgiIDEKIyAyNSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZhY3RvcnkuaCIKY2xhc3MgbnNJRmFjdG9yeSA6IHB1
YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlE
KCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwMDAwMDAwMSwgMHgwMDAwLCAweDAwMDAs
IHsgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiB9fTsgcmV0
dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZUluc3RhbmNlKG5zSVN1cHBvcnRz
ICphT3V0ZXIsIGNvbnN0IG5zSUlEICYgaWlkLCB2b2lkICogKnJlc3VsdCkgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBMb2NrRmFjdG9yeShQUkJvb2wgbG9jaykgPSAwOwoKfTsKIyAyOCAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zVmlld3NDSUQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiIDEKIyAxOCAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJRW51bWVyYXRvci5oIiAxCiMgMzUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lFbnVtZXJhdG9yLmgiCmNsYXNzIG5zSVNpbXBsZUVudW1lcmF0b3IgOiBwdWJsaWMgbnNJU3Vw
cG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMg
Y29uc3QgbnNJSUQgaWlkID0gezB4ZDE4OTkyNDAsIDB4ZjlkMiwgMHgxMWQyLCB7IDB4YmQsIDB4
ZDYsIDB4MDAsIDB4MDAsIDB4NjQsIDB4NjUsIDB4NzMsIDB4NzQgfX07IHJldHVybiBpaWQ7fQoj
IDUzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRW51bWVyYXRvci5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgSGFzTW9yZUVsZW1lbnRzKFBSQm9vbCAqX3JldHZhbCkgPSAwOwojIDcwICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRW51bWVyYXRvci5oIgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0TmV4dChuc0lTdXBwb3J0cyAqKl9yZXR2YWwpID0gMDsKCn07CiMgMTQxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJRW51bWVyYXRvci5oIgpjbGFzcyBuc0lFbnVtZXJhdG9yIDogcHVi
bGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQo
KSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGFkMzg1Mjg2LCAweGNiYzQsIDB4MTFkMiwg
eyAweDhjLCAweGNhLCAweDAwLCAweDYwLCAweGIwLCAweGZjLCAweDE0LCAweGEzIH19OyByZXR1
cm4gaWlkO30KCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGaXJzdCh2b2lkKSA9IDA7CgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgTmV4dCh2b2lkKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEN1
cnJlbnRJdGVtKG5zSVN1cHBvcnRzICoqX3JldHZhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBJc0RvbmUodm9pZCkgPSAwOwoKfTsKIyAyNTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lFbnVtZXJhdG9yLmgiCmNsYXNzIG5zSUJpZGlyZWN0aW9uYWxFbnVtZXJhdG9yIDogcHVi
bGljIG5zSUVudW1lcmF0b3IgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ
RCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4NzVmMTU4YTAsIDB4Y2FkZCwgMHgxMWQy
LCB7IDB4OGMsIDB4Y2EsIDB4MDAsIDB4NjAsIDB4YjAsIDB4ZmMsIDB4MTQsIDB4YTMgfX07IHJl
dHVybiBpaWQ7fQoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IExhc3Qodm9pZCkgPSAwOwoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IFByZXYodm9pZCkgPSAwOwoKfTsKIyAzMzEgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lFbnVtZXJhdG9yLmgiCmV4dGVybiAiQyIgbnNyZXN1bHQKTlNfTmV3RW1w
dHlFbnVtZXJhdG9yKG5zSVNpbXBsZUVudW1lcmF0b3IqKiBhUmVzdWx0KTsKCgoKCmV4dGVybiAi
QyIgbnNyZXN1bHQKTlNfTmV3Q29uam9pbmluZ0VudW1lcmF0b3IobnNJRW51bWVyYXRvciogZmly
c3QsIG5zSUVudW1lcmF0b3IqIHNlY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
QmlkaXJlY3Rpb25hbEVudW1lcmF0b3IqICphSW5zdGFuY2VQdHJSZXN1bHQpOwoKCgpleHRlcm4g
IkMiIG5zcmVzdWx0Ck5TX05ld1VuaW9uRW51bWVyYXRvcihuc0lFbnVtZXJhdG9yKiBmaXJzdCwg
bnNJRW51bWVyYXRvciogc2Vjb25kLAogICAgICAgICAgICAgICAgICAgICAgbnNJRW51bWVyYXRv
ciogKmFJbnN0YW5jZVB0clJlc3VsdCk7CgoKCmV4dGVybiAiQyIgbnNyZXN1bHQKTlNfTmV3SW50
ZXJzZWN0aW9uRW51bWVyYXRvcihuc0lFbnVtZXJhdG9yKiBmaXJzdCwgbnNJRW51bWVyYXRvciog
c2Vjb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUVudW1lcmF0b3IqICphSW5z
dGFuY2VQdHJSZXN1bHQpOwojIDE5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9u
ZW50TWFuYWdlci5oIiAyCgoKCgoKCmNsYXNzIG5zSUZpbGU7CiMgMzUgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCmNsYXNzIG5zSUNvbXBvbmVudE1hbmFn
ZXIgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQm
IEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ODQ1OGE3NDAsIDB4ZDVkYywg
MHgxMWQyLCB7IDB4OTIsIDB4ZmIsIDB4MDAsIDB4ZTAsIDB4OTgsIDB4MDUsIDB4NTcsIDB4MGYg
fX07IHJldHVybiBpaWQ7fQojIDQ5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9u
ZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRmluZEZhY3RvcnkoY29uc3QgbnNDSUQg
JiBhQ2xhc3MsIG5zSUZhY3RvcnkgKipfcmV0dmFsKSA9IDA7CiMgNjAgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRD
bGFzc09iamVjdChjb25zdCBuc0NJRCAmIGFDbGFzcywgY29uc3QgbnNJSUQgJiBhSUlELCB2b2lk
ICogKl9yZXR2YWwpID0gMDsKIyA3MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBv
bmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRyYWN0SURUb0NsYXNzSUQoY29u
c3QgY2hhciAqYUNvbnRyYWN0SUQsIG5zQ0lEICphQ2xhc3MpID0gMDsKIyA4NiAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0
IENMU0lEVG9Db250cmFjdElEKGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBjaGFyICoqYUNsYXNzTmFt
ZSwgY2hhciAqKl9yZXR2YWwpID0gMDsKIyA5OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZUluc3RhbmNlKGNv
bnN0IG5zQ0lEICYgYUNsYXNzLCBuc0lTdXBwb3J0cyAqYURlbGVnYXRlLCBjb25zdCBuc0lJRCAm
IGFJSUQsIHZvaWQgKiAqX3JldHZhbCkgPSAwOwojIDExMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZUluc3Rh
bmNlQnlDb250cmFjdElEKGNvbnN0IGNoYXIgKmFDb250cmFjdElELCBuc0lTdXBwb3J0cyAqYURl
bGVnYXRlLCBjb25zdCBuc0lJRCAmIElJRCwgdm9pZCAqICpfcmV0dmFsKSA9IDA7CiMgMTI0ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgUmVnaXN0cnlMb2NhdGlvbkZvclNwZWMobnNJRmlsZSAqYVNwZWMsIGNoYXIgKipf
cmV0dmFsKSA9IDA7CiMgMTMzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50
TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU3BlY0ZvclJlZ2lzdHJ5TG9jYXRpb24oY29u
c3QgY2hhciAqYUxvY2F0aW9uLCBuc0lGaWxlICoqX3JldHZhbCkgPSAwOwojIDE0OCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVz
dWx0IFJlZ2lzdGVyRmFjdG9yeShjb25zdCBuc0NJRCAmIGFDbGFzcywgY29uc3QgY2hhciAqYUNs
YXNzTmFtZSwgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsIG5zSUZhY3RvcnkgKmFGYWN0b3J5LCBQ
UkJvb2wgYVJlcGxhY2UpID0gMDsKIyAxNjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lD
b21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlckNvbXBvbmVudChj
b25zdCBuc0NJRCAmIGFDbGFzcywgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwgY29uc3QgY2hhciAq
YUNvbnRyYWN0SUQsIGNvbnN0IGNoYXIgKmFMb2NhdGlvbiwgUFJCb29sIGFSZXBsYWNlLCBQUkJv
b2wgYVBlcnNpc3QpID0gMDsKIyAxOTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21w
b25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlckNvbXBvbmVudFdpdGhU
eXBlKGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBjaGFyICphQ2xhc3NOYW1lLCBjb25zdCBj
aGFyICphQ29udHJhY3RJRCwgbnNJRmlsZSAqYVNwZWMsIGNvbnN0IGNoYXIgKmFMb2NhdGlvbiwg
UFJCb29sIGFSZXBsYWNlLCBQUkJvb2wgYVBlcnNpc3QsIGNvbnN0IGNoYXIgKmFUeXBlKSA9IDA7
CiMgMjA5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgUmVnaXN0ZXJDb21wb25lbnRTcGVjKGNvbnN0IG5zQ0lEICYgYUNs
YXNzLCBjb25zdCBjaGFyICphQ2xhc3NOYW1lLCBjb25zdCBjaGFyICphQ29udHJhY3RJRCwgbnNJ
RmlsZSAqYUxpYnJhcnksIFBSQm9vbCBhUmVwbGFjZSwgUFJCb29sIGFQZXJzaXN0KSA9IDA7CiMg
MjI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgUmVnaXN0ZXJDb21wb25lbnRMaWIoY29uc3QgbnNDSUQgJiBhQ2xhc3Ms
IGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsIGNvbnN0IGNoYXIgKmFDb250cmFjdElELCBjb25zdCBj
aGFyICphRGxsTmFtZSwgUFJCb29sIGFSZXBsYWNlLCBQUkJvb2wgYVBlcnNpc3QpID0gMDsKIyAy
NDAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmly
dHVhbCBuc3Jlc3VsdCBVbnJlZ2lzdGVyRmFjdG9yeShjb25zdCBuc0NJRCAmIGFDbGFzcywgbnNJ
RmFjdG9yeSAqYUZhY3RvcnkpID0gMDsKIyAyNTQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBVbnJlZ2lzdGVyQ29tcG9u
ZW50KGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBjaGFyICphTG9jYXRpb24pID0gMDsKIyAy
NjMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmly
dHVhbCBuc3Jlc3VsdCBVbnJlZ2lzdGVyQ29tcG9uZW50U3BlYyhjb25zdCBuc0NJRCAmIGFDbGFz
cywgbnNJRmlsZSAqYUxpYnJhcnlTcGVjKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
RnJlZUxpYnJhcmllcyh2b2lkKSA9IDA7CgoKCgogIGVudW0geyBOU19TdGFydHVwID0gMCB9OwoK
ICBlbnVtIHsgTlNfU2NyaXB0ID0gMSB9OwoKICBlbnVtIHsgTlNfVGltZXIgPSAyIH07CgogIGVu
dW0geyBOU19TaHV0ZG93biA9IDMgfTsKIyAyOTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBdXRvUmVnaXN0ZXIoUFJJ
bnQzMiB3aGVuLCBuc0lGaWxlICpkaXJlY3RvcnkpID0gMDsKIyAzMDggIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBdXRv
UmVnaXN0ZXJDb21wb25lbnQoUFJJbnQzMiB3aGVuLCBuc0lGaWxlICphRmlsZUxvY2F0aW9uKSA9
IDA7CiMgMzE3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgQXV0b1VucmVnaXN0ZXJDb21wb25lbnQoUFJJbnQzMiB3aGVu
LCBuc0lGaWxlICphRmlsZUxvY2F0aW9uKSA9IDA7CiMgMzI5ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSXNSZWdpc3Rl
cmVkKGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKIyAzMzkgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBu
c3Jlc3VsdCBFbnVtZXJhdGVDTFNJRHMobnNJRW51bWVyYXRvciAqKl9yZXR2YWwpID0gMDsKIyAz
NDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmly
dHVhbCBuc3Jlc3VsdCBFbnVtZXJhdGVDb250cmFjdElEcyhuc0lFbnVtZXJhdG9yICoqX3JldHZh
bCkgPSAwOwoKfTsKIyA2MDIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRN
YW5hZ2VyLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29tcG9uZW50TWFuYWdl
clV0aWxzLmgiIDEKIyAyMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29tcG9uZW50TWFu
YWdlclV0aWxzLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiIDEK
IyAyNCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29tcG9uZW50TWFuYWdlclV0aWxzLmgi
IDIKIyAzNCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29tcG9uZW50TWFuYWdlclV0aWxz
LmgiCmV4dGVybiAiQyIgbnNyZXN1bHQgTlNHZXRGYWN0b3J5KG5zSVN1cHBvcnRzKiBhU2Vydk1n
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQ0lE
ICZhQ2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICphQ2xhc3NOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0lGYWN0b3J5ICoqYUZhY3RvcnkpOwpleHRlcm4gIkMiIFBSQm9v
bCBOU0NhblVubG9hZChuc0lTdXBwb3J0cyogYVNlcnZNZ3IpOwpleHRlcm4gIkMiIG5zcmVzdWx0
IE5TUmVnaXN0ZXJTZWxmKG5zSVN1cHBvcnRzKiBhU2Vydk1nciwgY29uc3QgY2hhciAqZnVsbHBh
dGgpOwpleHRlcm4gIkMiIG5zcmVzdWx0IE5TVW5yZWdpc3RlclNlbGYobnNJU3VwcG9ydHMqIGFT
ZXJ2TWdyLCBjb25zdCBjaGFyICpmdWxscGF0aCk7Cgp0eXBlZGVmIG5zcmVzdWx0ICgqbnNGYWN0
b3J5UHJvYykobnNJU3VwcG9ydHMqIGFTZXJ2TWdyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbnNDSUQgJmFDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICphQ29udHJhY3RJRCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zSUZhY3RvcnkgKiphRmFjdG9yeSk7CnR5cGVkZWYgUFJCb29sICgqbnNDYW5V
bmxvYWRQcm9jKShuc0lTdXBwb3J0cyogYVNlcnZNZ3IpOwp0eXBlZGVmIG5zcmVzdWx0ICgqbnNS
ZWdpc3RlclByb2MpKG5zSVN1cHBvcnRzKiBhU2Vydk1nciwgY29uc3QgY2hhciAqcGF0aCk7CnR5
cGVkZWYgbnNyZXN1bHQgKCpuc1VucmVnaXN0ZXJQcm9jKShuc0lTdXBwb3J0cyogYVNlcnZNZ3Is
IGNvbnN0IGNoYXIgKnBhdGgpOwojIDYzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb21w
b25lbnRNYW5hZ2VyVXRpbHMuaCIKZXh0ZXJuIG5zcmVzdWx0Ck5TX0dldEdsb2JhbENvbXBvbmVu
dE1hbmFnZXIobnNJQ29tcG9uZW50TWFuYWdlciogKnJlc3VsdCk7CgoKCgoKY2xhc3MgbnNDb21w
b25lbnRNYW5hZ2VyIHsKcHVibGljOgogIHN0YXRpYyBuc3Jlc3VsdCBJbml0aWFsaXplKHZvaWQp
OwoKCiAgc3RhdGljIG5zcmVzdWx0IEZpbmRGYWN0b3J5KGNvbnN0IG5zQ0lEICZhQ2xhc3MsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZhY3RvcnkgKiphRmFjdG9yeSk7CgoKICBz
dGF0aWMgbnNyZXN1bHQgR2V0Q2xhc3NPYmplY3QoY29uc3QgbnNDSUQgJmFDbGFzcywgY29uc3Qg
bnNJSUQgJmFJSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiphUmVz
dWx0KTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBDb250cmFjdElEVG9DbGFzc0lEKGNvbnN0IGNoYXIg
KmFDb250cmFjdElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQ0lEICphQ2xh
c3MpOwoKCgogIHN0YXRpYyBuc3Jlc3VsdCBDTFNJRFRvQ29udHJhY3RJRChuc0NJRCAqYUNsYXNz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqICphQ2xhc3NOYW1lLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqICphQ29udHJhY3RJRCk7CgoKICBzdGF0
aWMgbnNyZXN1bHQgQ3JlYXRlSW5zdGFuY2UoY29uc3QgbnNDSUQgJmFDbGFzcywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMgKmFEZWxlZ2F0ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNJSUQgJmFJSUQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZvaWQgKiphUmVzdWx0KTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBD
cmVhdGVJbnN0YW5jZShjb25zdCBjaGFyICphQ29udHJhY3RJRCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMgKmFEZWxlZ2F0ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgbnNJSUQgJmFJSUQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKiphUmVzdWx0KTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBSZWdpc3RlckZh
Y3RvcnkoY29uc3QgbnNDSUQgJmFDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICphQ29udHJhY3RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSUZhY3RvcnkgKmFGYWN0b3J5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJCb29sIGFSZXBsYWNlKTsKIyAxMTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0NvbXBvbmVudE1hbmFnZXJVdGlscy5oIgogIHN0YXRpYyBuc3Jlc3VsdCBSZWdpc3RlckNvbXBv
bmVudChjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqYUNsYXNzTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgKmFDb250cmFjdElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqYUxpYnJhcnlQZXJzaXN0ZW50RGVzY3JpcHRvciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBSQm9vbCBhUmVwbGFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBSQm9vbCBhUGVyc2lzdCk7CgoKCiAgc3RhdGljIG5zcmVzdWx0IFJlZ2lzdGVyQ29tcG9u
ZW50U3BlYyhjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJRmlsZSAqYUxpYnJhcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJCb29sIGFSZXBsYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBSQm9vbCBhUGVyc2lzdCk7CgoKCgogIHN0YXRpYyBuc3Jlc3VsdCBSZWdpc3RlckNvbXBv
bmVudExpYihjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICphQ2xhc3NOYW1lLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphQ29udHJhY3RJRCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYWRsbE5hbWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhUmVwbGFjZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFQZXJzaXN0KTsKCgoKICBzdGF0aWMg
bnNyZXN1bHQgVW5yZWdpc3RlckZhY3RvcnkoY29uc3QgbnNDSUQgJmFDbGFzcywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRmFjdG9yeSAqYUZhY3RvcnkpOwoKCiAgc3Rh
dGljIG5zcmVzdWx0IFVucmVnaXN0ZXJDb21wb25lbnQoY29uc3QgbnNDSUQgJmFDbGFzcywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphTGlicmFyeSk7
CgoKICBzdGF0aWMgbnNyZXN1bHQgVW5yZWdpc3RlckNvbXBvbmVudFNwZWMoY29uc3QgbnNDSUQg
JmFDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRmls
ZSAqYUxpYnJhcnlTcGVjKTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBGcmVlTGlicmFyaWVzKHZvaWQp
OwoKCgoKCiAgc3RhdGljIG5zcmVzdWx0IEF1dG9SZWdpc3RlcihQUkludDMyIHdoZW4sIG5zSUZp
bGUqIGRpcmVjdG9yeSk7CiAgc3RhdGljIG5zcmVzdWx0IEF1dG9SZWdpc3RlckNvbXBvbmVudChQ
UkludDMyIHdoZW4sIG5zSUZpbGUgKmNvbXBvbmVudCk7CiAgc3RhdGljIG5zcmVzdWx0IEF1dG9V
bnJlZ2lzdGVyQ29tcG9uZW50KFBSSW50MzIgd2hlbiwgbnNJRmlsZSAqY29tcG9uZW50KTsKCgog
IHN0YXRpYyBuc3Jlc3VsdCBJc1JlZ2lzdGVyZWQoY29uc3QgbnNDSUQgJmFDbGFzcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCAqYVJlZ2lzdGVyZWQpOwoKCiAgc3RhdGlj
IG5zcmVzdWx0IEVudW1lcmF0ZUNMU0lEcyhuc0lFbnVtZXJhdG9yKiogYUVtdW1lcmF0b3IpOwoK
CiAgc3RhdGljIG5zcmVzdWx0IEVudW1lcmF0ZUNvbnRyYWN0SURzKG5zSUVudW1lcmF0b3IqKiBh
RW11bWVyYXRvcik7Cgp9OwoKCmNsYXNzIG5zQ3JlYXRlSW5zdGFuY2VCeUNJRCA6IHB1YmxpYyBu
c0NPTVB0cl9oZWxwZXIKICAgICAgICB7CiAgICAgICAgICAgICAgICBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgICAgIG5zQ3JlYXRlSW5zdGFuY2VCeUNJRCggY29uc3QgbnNDSUQmIGFDSUQs
IG5zSVN1cHBvcnRzKiBhT3V0ZXIsIG5zcmVzdWx0KiBhRXJyb3JQdHIgKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtQ0lEKGFDSUQpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtT3V0ZXIoYU91dGVyKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUVycm9yUHRyKGFFcnJvclB0
cikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQg
b3BlcmF0b3IoKSggY29uc3QgbnNJSUQmLCB2b2lkKiogKSBjb25zdDsKCiAgICAgICAgICAgICAg
ICBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0NJRCYgbUNJRDsKICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIG1PdXRlcjsKICAgICAgICAgICAgICAg
ICAgICAgICAgbnNyZXN1bHQqIG1FcnJvclB0cjsKICAgICAgICB9OwoKY2xhc3MgbnNDcmVhdGVJ
bnN0YW5jZUJ5Q29udHJhY3RJRCA6IHB1YmxpYyBuc0NPTVB0cl9oZWxwZXIKICAgICAgICB7CiAg
ICAgICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgIG5zQ3JlYXRlSW5z
dGFuY2VCeUNvbnRyYWN0SUQoIGNvbnN0IGNoYXIqIGFDb250cmFjdElELCBuc0lTdXBwb3J0cyog
YU91dGVyLCBuc3Jlc3VsdCogYUVycm9yUHRyICkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogbUNvbnRyYWN0SUQoYUNvbnRyYWN0SUQpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtT3V0ZXIoYU91dGVyKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUVycm9yUHRyKGFFcnJvclB0
cikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQg
b3BlcmF0b3IoKSggY29uc3QgbnNJSUQmLCB2b2lkKiogKSBjb25zdDsKCiAgICAgICAgICAgICAg
ICBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtQ29udHJhY3RJ
RDsKICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIG1PdXRlcjsKICAgICAgICAg
ICAgICAgICAgICAgICAgbnNyZXN1bHQqIG1FcnJvclB0cjsKICAgICAgICB9OwoKY2xhc3MgbnND
cmVhdGVJbnN0YW5jZUZyb21DYXRlZ29yeSA6IHB1YmxpYyBuc0NPTVB0cl9oZWxwZXIKewpwdWJs
aWM6CiAgICBuc0NyZWF0ZUluc3RhbmNlRnJvbUNhdGVnb3J5KGNvbnN0IGNoYXIgKmFDYXRlZ29y
eSwgY29uc3QgY2hhciAqYUVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lTdXBwb3J0cyAqYU91dGVyLCBuc3Jlc3VsdCAqYUVycm9yUHRyKQogICAgICAgIDogbUNhdGVn
b3J5KGFDYXRlZ29yeSksCiAgICAgICAgICBtRW50cnkoYUVudHJ5KSwKICAgICAgICAgIG1FcnJv
clB0cihhRXJyb3JQdHIpCiAgICB7CgogICAgfQogICAgdmlydHVhbCBuc3Jlc3VsdCBvcGVyYXRv
cigpKCBjb25zdCBuc0lJRCYsIHZvaWQqKiApIGNvbnN0OwogICAgdmlydHVhbCB+bnNDcmVhdGVJ
bnN0YW5jZUZyb21DYXRlZ29yeSgpIHt9OwoKcHJpdmF0ZToKICAgIGNvbnN0IGNoYXIgKm1DYXRl
Z29yeTsKICAgIGNvbnN0IGNoYXIgKm1FbnRyeTsKICAgIG5zSVN1cHBvcnRzICptT3V0ZXI7CiAg
ICBuc3Jlc3VsdCAqbUVycm9yUHRyOwp9OwoKaW5saW5lCmNvbnN0IG5zQ3JlYXRlSW5zdGFuY2VC
eUNJRApkb19DcmVhdGVJbnN0YW5jZSggY29uc3QgbnNDSUQmIGFDSUQsIG5zcmVzdWx0KiBlcnJv
ciA9IDAgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBuc0NyZWF0ZUluc3RhbmNl
QnlDSUQoYUNJRCwgMCwgZXJyb3IpOwogICAgICAgIH0KCmlubGluZQpjb25zdCBuc0NyZWF0ZUlu
c3RhbmNlQnlDSUQKZG9fQ3JlYXRlSW5zdGFuY2UoIGNvbnN0IG5zQ0lEJiBhQ0lELCBuc0lTdXBw
b3J0cyogYU91dGVyLCBuc3Jlc3VsdCogZXJyb3IgPSAwICkKICAgICAgICB7CiAgICAgICAgICAg
ICAgICByZXR1cm4gbnNDcmVhdGVJbnN0YW5jZUJ5Q0lEKGFDSUQsIGFPdXRlciwgZXJyb3IpOwog
ICAgICAgIH0KCmlubGluZQpjb25zdCBuc0NyZWF0ZUluc3RhbmNlQnlDb250cmFjdElECmRvX0Ny
ZWF0ZUluc3RhbmNlKCBjb25zdCBjaGFyKiBhQ29udHJhY3RJRCwgbnNyZXN1bHQqIGVycm9yID0g
MCApCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIG5zQ3JlYXRlSW5zdGFuY2VCeUNv
bnRyYWN0SUQoYUNvbnRyYWN0SUQsIDAsIGVycm9yKTsKICAgICAgICB9CgppbmxpbmUKY29uc3Qg
bnNDcmVhdGVJbnN0YW5jZUJ5Q29udHJhY3RJRApkb19DcmVhdGVJbnN0YW5jZSggY29uc3QgY2hh
ciogYUNvbnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBhT3V0ZXIsIG5zcmVzdWx0KiBlcnJvciA9IDAg
KQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBuc0NyZWF0ZUluc3RhbmNlQnlDb250
cmFjdElEKGFDb250cmFjdElELCBhT3V0ZXIsIGVycm9yKTsKICAgICAgICB9CgppbmxpbmUKY29u
c3QgbnNDcmVhdGVJbnN0YW5jZUZyb21DYXRlZ29yeQpkb19DcmVhdGVJbnN0YW5jZUZyb21DYXRl
Z29yeSggY29uc3QgY2hhciAqYUNhdGVnb3J5LCBjb25zdCBjaGFyICphRW50cnksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc3Jlc3VsdCAqYUVycm9yUHRyID0gMCkKewogICAgcmV0
dXJuIG5zQ3JlYXRlSW5zdGFuY2VGcm9tQ2F0ZWdvcnkoYUNhdGVnb3J5LCBhRW50cnksIDAsIGFF
cnJvclB0cik7Cn0KCmlubGluZQpjb25zdCBuc0NyZWF0ZUluc3RhbmNlRnJvbUNhdGVnb3J5CmRv
X0NyZWF0ZUluc3RhbmNlRnJvbUNhdGVnb3J5KCBjb25zdCBjaGFyICphQ2F0ZWdvcnksIGNvbnN0
IGNoYXIgKmFFbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRz
ICphT3V0ZXIsIG5zcmVzdWx0ICphRXJyb3JQdHIgPSAwKQp7CiAgICByZXR1cm4gbnNDcmVhdGVJ
bnN0YW5jZUZyb21DYXRlZ29yeShhQ2F0ZWdvcnksIGFFbnRyeSwgYU91dGVyLCBhRXJyb3JQdHIp
Owp9CgoKZXh0ZXJuIGNvbnN0IGNoYXIgeHBjb21LZXlOYW1lW107CmV4dGVybiBjb25zdCBjaGFy
IHhwY29tQ29tcG9uZW50c0tleU5hbWVbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgbGFzdE1vZFZhbHVl
TmFtZVtdOwpleHRlcm4gY29uc3QgY2hhciBmaWxlU2l6ZVZhbHVlTmFtZVtdOwpleHRlcm4gY29u
c3QgY2hhciBuYXRpdmVDb21wb25lbnRUeXBlW107CmV4dGVybiBjb25zdCBjaGFyIHN0YXRpY0Nv
bXBvbmVudFR5cGVbXTsKIyA2MDMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25l
bnRNYW5hZ2VyLmgiIDIKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zVmlld3NDSUQu
aCIgMgojIDM4ICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Zvcm1zL3NyYy9u
c0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lDb21wb25lbnRNYW5hZ2VyLmgiIDEKIyAzOSAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlv
dXQvaHRtbC9mb3Jtcy9zcmMvbnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNHVUlFdmVudC5oIiAxCiMgNDAgIi4uLy4uLy4uLy4uLy4uL21v
emlsbGEvbGF5b3V0L2h0bWwvZm9ybXMvc3JjL25zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZvbnRNZXRyaWNzLmgiIDEKIyAyNiAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZvbnRNZXRyaWNzLmgiCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSUZvbnRNZXRyaWNzLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnND
b29yZC5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb250TWV0cmljcy5o
IiAyCgpzdHJ1Y3QgbnNGb250OwpjbGFzcyBuc1N0cmluZzsKY2xhc3MgbnNJRGV2aWNlQ29udGV4
dDsKY2xhc3MgbnNJQXRvbTsKIyA0NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZvbnRN
ZXRyaWNzLmgiCnR5cGVkZWYgdm9pZCogbnNGb250SGFuZGxlOwojIDYzICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJRm9udE1ldHJpY3MuaCIKY2xhc3MgbnNJRm9udE1ldHJpY3MgOiBwdWJs
aWMgbnNJU3VwcG9ydHMKewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7
c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHhjNzRjYjc3MCwgMHhhMzNlLCAweDExZDEsIHsg
MHhhOCwgMHgyNCwgMHgwMCwgMHg0MCwgMHg5NSwgMHg5YSwgMHgyOCwgMHhjOSB9IH07IHJldHVy
biBpaWQ7fQoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQoY29uc3QgbnNGb250JiBhRm9u
dCwgbnNJQXRvbSogYUxhbmdHcm91cCwKICAgICAgICAgICAgICAgICAgIG5zSURldmljZUNvbnRl
eHQgKmFDb250ZXh0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlc3Ryb3koKSA9IDA7
CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0WEhlaWdodChuc2Nvb3JkJiBhUmVzdWx0KSA9IDA7
CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTdXBlcnNjcmlwdE9mZnNldChuc2Nvb3JkJiBh
UmVzdWx0KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTdWJzY3JpcHRPZmZzZXQo
bnNjb29yZCYgYVJlc3VsdCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3RyaWtl
b3V0KG5zY29vcmQmIGFPZmZzZXQsIG5zY29vcmQmIGFTaXplKSA9IDA7CgoKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRVbmRlcmxpbmUobnNjb29yZCYgYU9mZnNldCwgbnNjb29yZCYgYVNpemUp
ID0gMDsKIyAxMjMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb250TWV0cmljcy5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0SGVpZ2h0KG5zY29vcmQgJmFIZWlnaHQpID0gMDsKIyAxMzIg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb250TWV0cmljcy5oIgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0Tm9ybWFsTGluZUhlaWdodChuc2Nvb3JkICZhSGVpZ2h0KSA9IDA7CgoKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRMZWFkaW5nKG5zY29vcmQgJmFMZWFkaW5nKSA9IDA7CgoKCgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RW1IZWlnaHQobnNjb29yZCAmYUhlaWdodCkgPSAwOwoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVtQXNjZW50KG5zY29vcmQgJmFBc2NlbnQpID0gMDsK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFbURlc2NlbnQobnNjb29yZCAmYURlc2NlbnQpID0g
MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWF4SGVpZ2h0KG5zY29vcmQgJmFIZWlnaHQp
ID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNYXhBc2NlbnQobnNjb29yZCAmYUFz
Y2VudCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNYXhEZXNjZW50KG5zY29vcmQg
JmFEZXNjZW50KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWF4QWR2YW5jZShuc2Nv
b3JkICZhQWR2YW5jZSkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZvbnQoY29uc3Qg
bnNGb250IComYUZvbnQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYW5nR3JvdXAo
bnNJQXRvbSoqIGFMYW5nR3JvdXApID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb250
SGFuZGxlKG5zRm9udEhhbmRsZSAmYUhhbmRsZSkgPSAwOwoKCgoKCgoKfTsKIyA0MSAiLi4vLi4v
Li4vLi4vLi4vbW96aWxsYS9sYXlvdXQvaHRtbC9mb3Jtcy9zcmMvbnNGb3JtQ29udHJvbEhlbHBl
ci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybUNvbnRyb2wuaCIg
MQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybUNvbnRyb2wuaCIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDI2ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJRm9ybUNvbnRyb2wuaCIgMgpjbGFzcyBuc0lET01IVE1MRm9ybUVs
ZW1lbnQ7CiMgNjIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtQ29udHJvbC5oIgpj
bGFzcyBuc0lGb3JtQ29udHJvbCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKCiAgc3Rh
dGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7IHN0YXRpYyBuc0lJRCBpaWQgPSB7IDB4MjgyZmY0
NDAsIDB4Y2Q3ZSwgMHgxMWQxLCB7MHg4OSwgMHhhZCwgMHgwMCwgMHg2MCwgMHgwOCwgMHg5MSwg
MHgxYiwgMHg4MX0gfTsgcmV0dXJuIGlpZDsgfQoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
Rm9ybShuc0lET01IVE1MRm9ybUVsZW1lbnQqKiBhRm9ybSkgPSAwOwoKCgoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgU2V0Rm9ybShuc0lET01IVE1MRm9ybUVsZW1lbnQqIGFGb3JtLAogICAgICAgICAg
ICAgICAgICAgICBQUkJvb2wgYVJlbW92ZUZyb21Gb3JtID0gMSkgPSAwOwoKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0VHlwZShQUkludDMyKiBhVHlwZSkgPSAwOwoKICB2aXJ0dWFsIG5zcmVz
dWx0IEluaXQoKSA9IDA7Cgp9OwojIDQyICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9o
dG1sL2Zvcm1zL3NyYy9uc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lEZXZpY2VDb250ZXh0LmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSURldmljZUNvbnRleHQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRGV2
aWNlQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29vcmQuaCIg
MQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRGV2aWNlQ29udGV4dC5oIiAyCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUmVjdC5oIiAxCiMgMjkgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lEZXZpY2VDb250ZXh0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJV2lkZ2V0LmgiIDEKIyAzMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SURldmljZUNvbnRleHQuaCIgMgoKY2xhc3MgbnNJUmVuZGVyaW5nQ29udGV4dDsKY2xhc3MgbnNJ
VmlldzsKY2xhc3MgbnNJRm9udE1ldHJpY3M7CmNsYXNzIG5zSVdpZGdldDsKY2xhc3MgbnNJRGV2
aWNlQ29udGV4dFNwZWM7CmNsYXNzIG5zSUF0b207CgpzdHJ1Y3QgbnNGb250OwpzdHJ1Y3QgbnND
b2xvcjsKCgp0eXBlZGVmIHZvaWQgKiBuc05hdGl2ZURldmljZUNvbnRleHQ7CgoKCgoKCnR5cGVk
ZWYgdm9pZCAqIG5zUGFsZXR0ZTsKCgpzdHJ1Y3QgbnNQYWxldHRlSW5mbyB7CiAgUFJQYWNrZWRC
b29sIGlzUGFsZXR0ZURldmljZTsKICBQUlVpbnQxNiBzaXplUGFsZXR0ZTsKICBQUlVpbnQxNiBu
dW1SZXNlcnZlZDsKICBuc1BhbGV0dGUgcGFsZXR0ZTsKfTsKCgoKCgogIHR5cGVkZWYgZW51bSB7
CgogICAgZVN5c3RlbUF0dHJfQ29sb3JfV2luZG93QmFja2dyb3VuZCwKICAgIGVTeXN0ZW1BdHRy
X0NvbG9yX1dpbmRvd0ZvcmVncm91bmQsCiAgICBlU3lzdGVtQXR0cl9Db2xvcl9XaWRnZXRCYWNr
Z3JvdW5kLAogICAgZVN5c3RlbUF0dHJfQ29sb3JfV2lkZ2V0Rm9yZWdyb3VuZCwKICAgIGVTeXN0
ZW1BdHRyX0NvbG9yX1dpZGdldFNlbGVjdEJhY2tncm91bmQsCiAgICBlU3lzdGVtQXR0cl9Db2xv
cl9XaWRnZXRTZWxlY3RGb3JlZ3JvdW5kLAogICAgZVN5c3RlbUF0dHJfQ29sb3JfV2lkZ2V0M0RI
aWdobGlnaHQsCiAgICBlU3lzdGVtQXR0cl9Db2xvcl9XaWRnZXQzRFNoYWRvdywKICAgIGVTeXN0
ZW1BdHRyX0NvbG9yX1RleHRCYWNrZ3JvdW5kLAogICAgZVN5c3RlbUF0dHJfQ29sb3JfVGV4dEZv
cmVncm91bmQsCiAgICBlU3lzdGVtQXR0cl9Db2xvcl9UZXh0U2VsZWN0QmFja2dyb3VuZCwKICAg
IGVTeXN0ZW1BdHRyX0NvbG9yX1RleHRTZWxlY3RGb3JlZ3JvdW5kLAoKICAgIGVTeXN0ZW1BdHRy
X1NpemVfV2luZG93VGl0bGVIZWlnaHQsCiAgICBlU3lzdGVtQXR0cl9TaXplX1dpbmRvd0JvcmRl
cldpZHRoLAogICAgZVN5c3RlbUF0dHJfU2l6ZV9XaW5kb3dCb3JkZXJIZWlnaHQsCiAgICBlU3lz
dGVtQXR0cl9TaXplX1dpZGdldDNEQm9yZGVyLAogICAgZVN5c3RlbUF0dHJfU2l6ZV9TY3JvbGxi
YXJIZWlnaHQsCiAgICBlU3lzdGVtQXR0cl9TaXplX1Njcm9sbGJhcldpZHRoLAoKICAgIGVTeXN0
ZW1BdHRyX0ZvbnRfQ2FwdGlvbiwKICAgIGVTeXN0ZW1BdHRyX0ZvbnRfSWNvbiwKICAgIGVTeXN0
ZW1BdHRyX0ZvbnRfTWVudSwKICAgIGVTeXN0ZW1BdHRyX0ZvbnRfTWVzc2FnZUJveCwKICAgIGVT
eXN0ZW1BdHRyX0ZvbnRfU21hbGxDYXB0aW9uLAogICAgZVN5c3RlbUF0dHJfRm9udF9TdGF0dXNC
YXIsCgogICAgICAgICAgICAgICAgZVN5c3RlbUF0dHJfRm9udF9XaW5kb3csCiAgICAgICAgICAg
ICAgICBlU3lzdGVtQXR0cl9Gb250X0RvY3VtZW50LAogICAgICAgICAgICAgICAgZVN5c3RlbUF0
dHJfRm9udF9Xb3Jrc3BhY2UsCiAgICAgICAgICAgICAgICBlU3lzdGVtQXR0cl9Gb250X0Rlc2t0
b3AsCiAgICAgICAgICAgICAgICBlU3lzdGVtQXR0cl9Gb250X0luZm8sCiAgICAgICAgICAgICAg
ICBlU3lzdGVtQXR0cl9Gb250X0RpYWxvZywKICAgICAgICAgICAgICAgIGVTeXN0ZW1BdHRyX0Zv
bnRfQnV0dG9uLAogICAgICAgICAgICAgICAgZVN5c3RlbUF0dHJfRm9udF9QdWxsRG93bk1lbnUs
CiAgICAgICAgICAgICAgICBlU3lzdGVtQXR0cl9Gb250X0xpc3QsCiAgICAgICAgICAgICAgICBl
U3lzdGVtQXR0cl9Gb250X0ZpZWxkLAoKICAgIGVTeXN0ZW1BdHRyX0ZvbnRfVG9vbHRpcHMsCiAg
ICBlU3lzdGVtQXR0cl9Gb250X1dpZGdldAogIH0gbnNTeXN0ZW1BdHRySUQ7CgogIHR5cGVkZWYg
dW5pb24gewogICAgUFJVaW50MzIgbVNpemU7CiAgICBuc2NvbG9yICogbUNvbG9yOwogICAgbnNG
b250ICogbUZvbnQ7CiAgfSBTeXN0ZW1BdHRyU3RydWN0OwojIDEyMyAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSURldmljZUNvbnRleHQuaCIKc3RydWN0IF9OSV9Db2xvclNwYWNlOwp0eXBl
ZGVmIF9OSV9Db2xvclNwYWNlIE5JX0NvbG9yU3BhY2U7CnR5cGVkZWYgTklfQ29sb3JTcGFjZSBJ
TF9Db2xvclNwYWNlOwoKY2xhc3MgbnNJRGV2aWNlQ29udGV4dCA6IHB1YmxpYyBuc0lTdXBwb3J0
cwp7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg
bnNJSUQgaWlkID0geyAweDU5MzFjNTgwLCAweGI5MTcsIDB4MTFkMSwgeyAweGE4LCAweDI0LCAw
eDAwLCAweDQwLCAweDk1LCAweDlhLCAweDI4LCAweGM5IH0gfTsgcmV0dXJuIGlpZDt9CgoKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5zTmF0aXZlV2lkZ2V0IGFXaWRnZXQpID0gMDsKCgoK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVSZW5kZXJpbmdDb250ZXh0KG5zSVZpZXcgKmFW
aWV3LCBuc0lSZW5kZXJpbmdDb250ZXh0IComYUNvbnRleHQpID0gMDsKCgoKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBDcmVhdGVSZW5kZXJpbmdDb250ZXh0KG5zSVdpZGdldCAqYVdpZGdldCwgbnNJ
UmVuZGVyaW5nQ29udGV4dCAqJmFDb250ZXh0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgQ3JlYXRlUmVuZGVyaW5nQ29udGV4dChuc0lSZW5kZXJpbmdDb250ZXh0IComYUNvbnRleHQp
ID0gMDsKIyAxNzEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEZXZpY2VDb250ZXh0Lmgi
CiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0UmVuZGVyaW5nQ29udGV4dChuc0lSZW5kZXJpbmdDb250
ZXh0ICphQ29udGV4dCwgbnNJV2lkZ2V0ICphV2luZG93KSA9IDA7CiMgMTgwICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJRGV2aWNlQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU3Vw
cG9ydHNOYXRpdmVXaWRnZXRzKFBSQm9vbCAmYVN1cHBvcnRzV2lkZ2V0cykgPSAwOwoKCgoKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldERldlVuaXRzVG9Ud2lwcyhmbG9hdCAmYURldlVuaXRzVG9U
d2lwcykgY29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VHdpcHNUb0RldlVu
aXRzKGZsb2F0ICZhVHdpcHNUb0RldlVuaXRzKSBjb25zdCA9IDA7CiMgMjA5ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJRGV2aWNlQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
QXBwVW5pdHNUb0RldlVuaXRzKGZsb2F0IGFBcHBVbml0cykgPSAwOwojIDIxOSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSURldmljZUNvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNl
dERldlVuaXRzVG9BcHBVbml0cyhmbG9hdCBhRGV2VW5pdHMpID0gMDsKCgoKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRBcHBVbml0c1RvRGV2VW5pdHMoZmxvYXQgJmFBcHBVbml0cykgY29uc3Qg
PSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERldlVuaXRzVG9BcHBVbml0cyhmbG9h
dCAmYURldlVuaXRzKSBjb25zdCA9IDA7CiMgMjQ3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJRGV2aWNlQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2Fub25pY2FsUGl4ZWxT
Y2FsZShmbG9hdCAmYVNjYWxlKSBjb25zdCA9IDA7CiMgMjU2ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJRGV2aWNlQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2Nyb2xsQmFy
RGltZW5zaW9ucyhmbG9hdCAmYVdpZHRoLCBmbG9hdCAmYUhlaWdodCkgY29uc3QgPSAwOwojIDI2
NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURldmljZUNvbnRleHQuaCIKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldFN5c3RlbUF0dHJpYnV0ZShuc1N5c3RlbUF0dHJJRCBhbklELCBTeXN0ZW1B
dHRyU3RydWN0ICogYUluZm8pIGNvbnN0ID0gMDsKIyAyNzUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lEZXZpY2VDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNZXRyaWNzRm9y
KGNvbnN0IG5zRm9udCYgYUZvbnQsIG5zSUF0b20qIGFMYW5nR3JvdXAsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lGb250TWV0cmljcyomIGFNZXRyaWNzKSA9IDA7CiMgMjg1ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRGV2aWNlQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0TWV0cmljc0Zvcihjb25zdCBuc0ZvbnQmIGFGb250LCBuc0lGb250TWV0cmljcyomIGFN
ZXRyaWNzKSA9IDA7CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRab29tKGZsb2F0IGFab29tKSA9
IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRab29tKGZsb2F0ICZhWm9vbSkgY29uc3QgPSAwOwoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VGV4dFpvb20oZmxvYXQgYVRleHRab29tKSA9IDA7CiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRUZXh0Wm9vbShmbG9hdCAmYVRleHRab29tKSBjb25zdCA9IDA7
CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERyYXdpbmdTdXJmYWNlKG5zSVJlbmRlcmluZ0Nv
bnRleHQgJmFDb250ZXh0LCBuc0RyYXdpbmdTdXJmYWNlICZhU3VyZmFjZSkgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRHYW1tYShmbG9hdCAmYUdhbW1zKSA9IDA7CiAgdmlydHVhbCBuc3Jl
c3VsdCBTZXRHYW1tYShmbG9hdCBhR2FtbWEpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
R2FtbWFUYWJsZShQUlVpbnQ4IComYUdhbW1hVGFibGUpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBMb2FkSWNvbkltYWdlKFBSSW50MzIgYUlkLCBuc0lJbWFnZSomIGFJbWFnZSkgPSAwOwoK
CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2hlY2tGb250RXhpc3RlbmNlKGNvbnN0IG5zU3RyaW5n
JiBhRmFjZU5hbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEZpcnN0RXhpc3RpbmdGb250KGNv
bnN0IG5zRm9udCYgYUZvbnQsIG5zU3RyaW5nJiBhRmFjZU5hbWUpID0gMDsKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRMb2NhbEZvbnROYW1lKGNvbnN0IG5zU3RyaW5nJiBhRmFjZU5hbWUsIG5zU3Ry
aW5nJiBhTG9jYWxOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wmIGFB
bGlhc2VkKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGbHVzaEZvbnRDYWNoZSh2b2lk
KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVwdGgoUFJVaW50MzImIGFEZXB0aCkg
PSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldElMQ29sb3JTcGFjZShJTF9Db2xvclNw
YWNlKiYgYUNvbG9yU3BhY2UpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYWxldHRl
SW5mbyhuc1BhbGV0dGVJbmZvJikgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnZlcnRQ
aXhlbChuc2NvbG9yIGFDb2xvciwgUFJVaW50MzIgJiBhUGl4ZWwpID0gMDsKIyAzNjMgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEZXZpY2VDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXREZXZpY2VTdXJmYWNlRGltZW5zaW9ucyhQUkludDMyICZhV2lkdGgsIFBSSW50MzIgJmFI
ZWlnaHQpID0gMDsKIyAzNzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEZXZpY2VDb250
ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSZWN0ICggbnNSZWN0ICZhUmVjdCApID0gMDsK
IyAzODQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEZXZpY2VDb250ZXh0LmgiCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRDbGllbnRSZWN0KG5zUmVjdCAmYVJlY3QpID0gMDsKIyAzOTYgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEZXZpY2VDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXREZXZpY2VDb250ZXh0Rm9yKG5zSURldmljZUNvbnRleHRTcGVjICphRGV2aWNlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lEZXZpY2VDb250ZXh0IComYUNvbnRl
eHQpID0gMDsKIyA0MDggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEZXZpY2VDb250ZXh0
LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBCZWdpbkRvY3VtZW50KFBSVW5pY2hhciAqIGFUaXRsZSkg
PSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVuZERvY3VtZW50KHZvaWQpID0gMDsKCgoK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBCZWdpblBhZ2Uodm9pZCkgPSAwOwoKCgoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEVuZFBhZ2Uodm9pZCkgPSAwOwp9OwojIDQzICIuLi8uLi8uLi8uLi8uLi9t
b3ppbGxhL2xheW91dC9odG1sL2Zvcm1zL3NyYy9uc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxBdG9tcy5oIiAxCiMgMjUgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxBdG9tcy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lBdG9tLmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRN
TEF0b21zLmgiIDIKIyAzNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTEF0b21zLmgi
CmNsYXNzIG5zSFRNTEF0b21zIHsKcHVibGljOgoKICBzdGF0aWMgdm9pZCBBZGRSZWZBdG9tcygp
OwogIHN0YXRpYyB2b2lkIFJlbGVhc2VBdG9tcygpOwojIDUwICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNIVE1MQXRvbXMuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIVE1M
QXRvbUxpc3QuaCIgMQojIDM5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIVE1MQXRvbUxp
c3QuaCIKc3RhdGljIG5zSUF0b20qIG1vekFub255bW91c0Jsb2NrOwpzdGF0aWMgbnNJQXRvbSog
bW96QW5vbnltb3VzUG9zaXRpb25lZEJsb2NrOwpzdGF0aWMgbnNJQXRvbSogbW96Rmlyc3RMaW5l
Rml4dXA7CnN0YXRpYyBuc0lBdG9tKiBtb3pMZXR0ZXJGcmFtZTsKc3RhdGljIG5zSUF0b20qIG1v
ekxpbmVGcmFtZTsKc3RhdGljIG5zSUF0b20qIG1vekxpc3RCdWxsZXRQc2V1ZG87CnN0YXRpYyBu
c0lBdG9tKiBtb3pTaW5nbGVMaW5lVGV4dENvbnRyb2xGcmFtZTsKc3RhdGljIG5zSUF0b20qIG1v
ekZvY3VzSW5uZXJQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiBtb3pGb2N1c091dGVyUHNldWRvOwpz
dGF0aWMgbnNJQXRvbSogbW96RGlzcGxheUNvbWJvYm94Q29udHJvbEZyYW1lOwoKc3RhdGljIG5z
SUF0b20qIF9iYXNlSHJlZjsKc3RhdGljIG5zSUF0b20qIF9iYXNlVGFyZ2V0OwpzdGF0aWMgbnNJ
QXRvbSogYTsKc3RhdGljIG5zSUF0b20qIGFiYnI7CnN0YXRpYyBuc0lBdG9tKiBhYm92ZTsKc3Rh
dGljIG5zSUF0b20qIGFjY2VwdDsKc3RhdGljIG5zSUF0b20qIGFjY2VwdGNoYXJzZXQ7CnN0YXRp
YyBuc0lBdG9tKiBhY2Nlc3NrZXk7CnN0YXRpYyBuc0lBdG9tKiBhY3Rpb247CnN0YXRpYyBuc0lB
dG9tKiBhbGlnbjsKc3RhdGljIG5zSUF0b20qIGFsaW5rOwpzdGF0aWMgbnNJQXRvbSogYWx0Owpz
dGF0aWMgbnNJQXRvbSogYXBwbGV0OwpzdGF0aWMgbnNJQXRvbSogYXJjaGl2ZTsKc3RhdGljIG5z
SUF0b20qIGFyZWE7CnN0YXRpYyBuc0lBdG9tKiBheGlzOwpzdGF0aWMgbnNJQXRvbSogYmFja2dy
b3VuZDsKc3RhdGljIG5zSUF0b20qIGJhc2U7CnN0YXRpYyBuc0lBdG9tKiBiZWxvdzsKCnN0YXRp
YyBuc0lBdG9tKiBiZG87CgpzdGF0aWMgbnNJQXRvbSogYmdjb2xvcjsKc3RhdGljIG5zSUF0b20q
IGJsb2NrcXVvdGU7CnN0YXRpYyBuc0lBdG9tKiBib2R5OwpzdGF0aWMgbnNJQXRvbSogYm9yZGVy
OwpzdGF0aWMgbnNJQXRvbSogYm9yZGVyY29sb3I7CnN0YXRpYyBuc0lBdG9tKiBib3R0b21wYWRk
aW5nOwpzdGF0aWMgbnNJQXRvbSogYnI7CnN0YXRpYyBuc0lBdG9tKiBiOwpzdGF0aWMgbnNJQXRv
bSogYnV0dG9uOwpzdGF0aWMgbnNJQXRvbSogYnV0dG9uQ29udGVudFBzZXVkbzsKc3RhdGljIG5z
SUF0b20qIGNhcHRpb247CnN0YXRpYyBuc0lBdG9tKiBjZWxsQ29udGVudFBzZXVkbzsKc3RhdGlj
IG5zSUF0b20qIGNlbGxwYWRkaW5nOwpzdGF0aWMgbnNJQXRvbSogY2VsbHNwYWNpbmc7CnN0YXRp
YyBuc0lBdG9tKiBjaDsKc3RhdGljIG5zSUF0b20qIF9jaGFyOwpzdGF0aWMgbnNJQXRvbSogY2hh
cm9mZjsKc3RhdGljIG5zSUF0b20qIGNoYXJzZXQ7CnN0YXRpYyBuc0lBdG9tKiBjaGVja2VkOwpz
dGF0aWMgbnNJQXRvbSogY2l0ZTsKc3RhdGljIG5zSUF0b20qIGtDbGFzczsKc3RhdGljIG5zSUF0
b20qIGNsYXNzaWQ7CnN0YXRpYyBuc0lBdG9tKiBjbGVhcjsKc3RhdGljIG5zSUF0b20qIGNsaXA7
CnN0YXRpYyBuc0lBdG9tKiBjb2RlOwpzdGF0aWMgbnNJQXRvbSogY29kZWJhc2U7CnN0YXRpYyBu
c0lBdG9tKiBjb2RldHlwZTsKc3RhdGljIG5zSUF0b20qIGNvbG9yOwpzdGF0aWMgbnNJQXRvbSog
Y29sOwpzdGF0aWMgbnNJQXRvbSogY29sZ3JvdXA7CnN0YXRpYyBuc0lBdG9tKiBjb2xzOwpzdGF0
aWMgbnNJQXRvbSogY29sc3BhbjsKc3RhdGljIG5zSUF0b20qIGNvbWJvYm94OwpzdGF0aWMgbnNJ
QXRvbSogY29sdW1uUHNldWRvOwpzdGF0aWMgbnNJQXRvbSogY29tbWVudFBzZXVkbzsKc3RhdGlj
IG5zSUF0b20qIGNvbXBhY3Q7CnN0YXRpYyBuc0lBdG9tKiBjb250ZW50OwpzdGF0aWMgbnNJQXRv
bSogY29vcmRzOwpzdGF0aWMgbnNJQXRvbSogZGQ7CnN0YXRpYyBuc0lBdG9tKiBkZWZhdWx0Y2hl
Y2tlZDsKc3RhdGljIG5zSUF0b20qIGRlZmF1bHRzZWxlY3RlZDsKc3RhdGljIG5zSUF0b20qIGRl
ZmF1bHR2YWx1ZTsKc3RhdGljIG5zSUF0b20qIGRlY2xhcmU7CnN0YXRpYyBuc0lBdG9tKiBkZWZl
cjsKc3RhdGljIG5zSUF0b20qIGRpcjsKc3RhdGljIG5zSUF0b20qIGRpdjsKc3RhdGljIG5zSUF0
b20qIGRpc2FibGVkOwpzdGF0aWMgbnNJQXRvbSogZGw7CnN0YXRpYyBuc0lBdG9tKiBkcm9wRG93
bkxpc3RQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiBkdDsKCnN0YXRpYyBuc0lBdG9tKiBkYXRldGlt
ZTsKc3RhdGljIG5zSUF0b20qIGRhdGE7CnN0YXRpYyBuc0lBdG9tKiBkZm47CnN0YXRpYyBuc0lB
dG9tKiBlbTsKc3RhdGljIG5zSUF0b20qIGVtYmVkOwpzdGF0aWMgbnNJQXRvbSogZW5jb2Rpbmc7
CnN0YXRpYyBuc0lBdG9tKiBlbmN0eXBlOwpzdGF0aWMgbnNJQXRvbSogZmFjZTsKc3RhdGljIG5z
SUF0b20qIGZpZWxkc2V0OwpzdGF0aWMgbnNJQXRvbSogZmllbGRzZXRDb250ZW50UHNldWRvOwpz
dGF0aWMgbnNJQXRvbSogZmlyc3RMZXR0ZXJQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiBmaXJzdExp
bmVQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiBmb250OwpzdGF0aWMgbnNJQXRvbSogZm9udFdlaWdo
dDsKc3RhdGljIG5zSUF0b20qIF9mb3I7CnN0YXRpYyBuc0lBdG9tKiBmb3JtOwpzdGF0aWMgbnNJ
QXRvbSogZnJhbWU7CnN0YXRpYyBuc0lBdG9tKiBmcmFtZWJvcmRlcjsKc3RhdGljIG5zSUF0b20q
IGZyYW1lc2V0OwpzdGF0aWMgbnNJQXRvbSogZnJhbWVzZXRCbGFua1BzZXVkbzsKc3RhdGljIG5z
SUF0b20qIGd1dHRlcjsKc3RhdGljIG5zSUF0b20qIGgxOwpzdGF0aWMgbnNJQXRvbSogaDI7CnN0
YXRpYyBuc0lBdG9tKiBoMzsKc3RhdGljIG5zSUF0b20qIGg0OwpzdGF0aWMgbnNJQXRvbSogaDU7
CnN0YXRpYyBuc0lBdG9tKiBoNjsKc3RhdGljIG5zSUF0b20qIGhlYWQ7CnN0YXRpYyBuc0lBdG9t
KiBoZWFkZXJDb250ZW50QmFzZTsKc3RhdGljIG5zSUF0b20qIGhlYWRlckNvbnRlbnRMYW5ndWFn
ZTsKc3RhdGljIG5zSUF0b20qIGhlYWRlckNvbnRlbnRTY3JpcHRUeXBlOwpzdGF0aWMgbnNJQXRv
bSogaGVhZGVyQ29udGVudFN0eWxlVHlwZTsKc3RhdGljIG5zSUF0b20qIGhlYWRlckNvbnRlbnRU
eXBlOwpzdGF0aWMgbnNJQXRvbSogaGVhZGVyRGVmYXVsdFN0eWxlOwpzdGF0aWMgbnNJQXRvbSog
aGVhZGVyV2luZG93VGFyZ2V0OwpzdGF0aWMgbnNJQXRvbSogaGVhZGVyczsKc3RhdGljIG5zSUF0
b20qIGhlaWdodDsKc3RhdGljIG5zSUF0b20qIGhpZGRlbjsKc3RhdGljIG5zSUF0b20qIGhvcml6
b250YWxGcmFtZXNldEJvcmRlclBzZXVkbzsKc3RhdGljIG5zSUF0b20qIGhyOwpzdGF0aWMgbnNJ
QXRvbSogaHJlZjsKc3RhdGljIG5zSUF0b20qIGhyZWZsYW5nOwpzdGF0aWMgbnNJQXRvbSogaHNw
YWNlOwpzdGF0aWMgbnNJQXRvbSogaHRtbDsKc3RhdGljIG5zSUF0b20qIGh0dHBFcXVpdjsKc3Rh
dGljIG5zSUF0b20qIGliUHNldWRvOwpzdGF0aWMgbnNJQXRvbSogaTsKc3RhdGljIG5zSUF0b20q
IGlkOwpzdGF0aWMgbnNJQXRvbSogaWZyYW1lOwpzdGF0aWMgbnNJQXRvbSogaWxheWVyOwpzdGF0
aWMgbnNJQXRvbSogaW1nOwpzdGF0aWMgbnNJQXRvbSogaW5kZXg7CnN0YXRpYyBuc0lBdG9tKiBp
bnB1dDsKc3RhdGljIG5zSUF0b20qIGlzaW5kZXg7CnN0YXRpYyBuc0lBdG9tKiBpc21hcDsKc3Rh
dGljIG5zSUF0b20qIGxhYmVsOwpzdGF0aWMgbnNJQXRvbSogbGFiZWxDb250ZW50UHNldWRvOwpz
dGF0aWMgbnNJQXRvbSogbGFuZzsKc3RhdGljIG5zSUF0b20qIGxheWVyOwpzdGF0aWMgbnNJQXRv
bSogbGF5b3V0OwpzdGF0aWMgbnNJQXRvbSogbGk7CnN0YXRpYyBuc0lBdG9tKiBsaW5rOwpzdGF0
aWMgbnNJQXRvbSogbGVmdDsKc3RhdGljIG5zSUF0b20qIGxlZnRwYWRkaW5nOwpzdGF0aWMgbnNJ
QXRvbSogbGVnZW5kOwpzdGF0aWMgbnNJQXRvbSogbGVnZW5kQ29udGVudFBzZXVkbzsKc3RhdGlj
IG5zSUF0b20qIGxlbmd0aDsKc3RhdGljIG5zSUF0b20qIGxvbmdkZXNjOwpzdGF0aWMgbnNJQXRv
bSogbG93c3JjOwpzdGF0aWMgbnNJQXRvbSogbWFwOwpzdGF0aWMgbnNJQXRvbSogbWFyZ2luaGVp
Z2h0OwpzdGF0aWMgbnNJQXRvbSogbWFyZ2lud2lkdGg7CnN0YXRpYyBuc0lBdG9tKiBtYXhsZW5n
dGg7CnN0YXRpYyBuc0lBdG9tKiBtYXlzY3JpcHQ7CnN0YXRpYyBuc0lBdG9tKiBtZWRpYTsKc3Rh
dGljIG5zSUF0b20qIG1lbnU7CnN0YXRpYyBuc0lBdG9tKiBtZXRhOwpzdGF0aWMgbnNJQXRvbSog
bWV0aG9kOwpzdGF0aWMgbnNJQXRvbSogbXVsdGljb2w7CnN0YXRpYyBuc0lBdG9tKiBtdWx0aXBs
ZTsKc3RhdGljIG5zSUF0b20qIG5hbWU7CnN0YXRpYyBuc0lBdG9tKiBub2VtYmVkOwpzdGF0aWMg
bnNJQXRvbSogbm9mcmFtZXM7CnN0YXRpYyBuc0lBdG9tKiBub2hyZWY7CnN0YXRpYyBuc0lBdG9t
KiBub3Jlc2l6ZTsKc3RhdGljIG5zSUF0b20qIG5vc2NyaXB0OwpzdGF0aWMgbnNJQXRvbSogbm9z
aGFkZTsKc3RhdGljIG5zSUF0b20qIG5vd3JhcDsKc3RhdGljIG5zSUF0b20qIG9iamVjdDsKc3Rh
dGljIG5zSUF0b20qIG9sOwpzdGF0aWMgbnNJQXRvbSogb3B0aW9uOwpzdGF0aWMgbnNJQXRvbSog
b3ZlcmZsb3c7CnN0YXRpYyBuc0lBdG9tKiBwOwpzdGF0aWMgbnNJQXRvbSogcGFnZXg7CnN0YXRp
YyBuc0lBdG9tKiBwYWdleTsKc3RhdGljIG5zSUF0b20qIHBhcmFtOwpzdGF0aWMgbnNJQXRvbSog
cGxhY2Vob2xkZXJQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiBwb2ludFNpemU7CnN0YXRpYyBuc0lB
dG9tKiBwcmU7CnN0YXRpYyBuc0lBdG9tKiBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25Qc2V1ZG87CnN0
YXRpYyBuc0lBdG9tKiBwcm9maWxlOwpzdGF0aWMgbnNJQXRvbSogcHJvbXB0OwpzdGF0aWMgbnNJ
QXRvbSogcmFkaW9Qc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiBjaGVja1BzZXVkbzsKc3RhdGljIG5z
SUF0b20qIHJlYWRvbmx5OwpzdGF0aWMgbnNJQXRvbSogcmVmcmVzaDsKc3RhdGljIG5zSUF0b20q
IHJlbDsKc3RhdGljIG5zSUF0b20qIHJlcGVhdDsKc3RhdGljIG5zSUF0b20qIHJldjsKc3RhdGlj
IG5zSUF0b20qIHJpZ2h0cGFkZGluZzsKc3RhdGljIG5zSUF0b20qIHJvd3M7CnN0YXRpYyBuc0lB
dG9tKiByb3dzcGFuOwpzdGF0aWMgbnNJQXRvbSogcnVsZXM7CnN0YXRpYyBuc0lBdG9tKiBzOwpz
dGF0aWMgbnNJQXRvbSogc2NoZW1lOwpzdGF0aWMgbnNJQXRvbSogc2NvcGU7CnN0YXRpYyBuc0lB
dG9tKiBzY3JpcHQ7CnN0YXRpYyBuc0lBdG9tKiBzY3JvbGxpbmc7CnN0YXRpYyBuc0lBdG9tKiBz
ZWxlY3Q7CnN0YXRpYyBuc0lBdG9tKiBzZWxlY3RlZDsKc3RhdGljIG5zSUF0b20qIHNlbGVjdGVk
aW5kZXg7CnN0YXRpYyBuc0lBdG9tKiBzZXRjb29raWU7CnN0YXRpYyBuc0lBdG9tKiBzaGFwZTsK
c3RhdGljIG5zSUF0b20qIHNpemU7CnN0YXRpYyBuc0lBdG9tKiBzcGFjZXI7CnN0YXRpYyBuc0lB
dG9tKiBzcGFuOwpzdGF0aWMgbnNJQXRvbSogc3JjOwpzdGF0aWMgbnNJQXRvbSogc3RhbmRieTsK
c3RhdGljIG5zSUF0b20qIHN0YXJ0OwpzdGF0aWMgbnNJQXRvbSogc3RyaWtlOwpzdGF0aWMgbnNJ
QXRvbSogc3Ryb25nOwpzdGF0aWMgbnNJQXRvbSogc3R5bGU7CnN0YXRpYyBuc0lBdG9tKiBzdW1t
YXJ5OwpzdGF0aWMgbnNJQXRvbSogc3VwcHJlc3M7CnN0YXRpYyBuc0lBdG9tKiB0YWJpbmRleDsK
c3RhdGljIG5zSUF0b20qIHRhYmxlOwpzdGF0aWMgbnNJQXRvbSogdGFibGVQc2V1ZG87CnN0YXRp
YyBuc0lBdG9tKiB0YWJsZUNlbGxQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiB0YWJsZUNvbEdyb3Vw
UHNldWRvOwpzdGF0aWMgbnNJQXRvbSogdGFibGVDb2xQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiB0
YWJsZU91dGVyUHNldWRvOwpzdGF0aWMgbnNJQXRvbSogdGFibGVSb3dHcm91cFBzZXVkbzsKc3Rh
dGljIG5zSUF0b20qIHRhYmxlUm93UHNldWRvOwpzdGF0aWMgbnNJQXRvbSogdGFic3RvcDsKc3Rh
dGljIG5zSUF0b20qIHRhcmdldDsKc3RhdGljIG5zSUF0b20qIHRib2R5OwpzdGF0aWMgbnNJQXRv
bSogdGQ7CnN0YXRpYyBuc0lBdG9tKiB0Zm9vdDsKc3RhdGljIG5zSUF0b20qIHRoZWFkOwpzdGF0
aWMgbnNJQXRvbSogdGV4dDsKc3RhdGljIG5zSUF0b20qIHRleHRhcmVhOwpzdGF0aWMgbnNJQXRv
bSogdGV4dFBzZXVkbzsKc3RhdGljIG5zSUF0b20qIHRoOwpzdGF0aWMgbnNJQXRvbSogdGl0bGU7
CnN0YXRpYyBuc0lBdG9tKiB0b3A7CnN0YXRpYyBuc0lBdG9tKiB0b3BwYWRkaW5nOwpzdGF0aWMg
bnNJQXRvbSogdHI7CnN0YXRpYyBuc0lBdG9tKiB0dDsKc3RhdGljIG5zSUF0b20qIHR5cGU7CnN0
YXRpYyBuc0lBdG9tKiB1OwpzdGF0aWMgbnNJQXRvbSogdWw7CnN0YXRpYyBuc0lBdG9tKiB1c2Vt
YXA7CnN0YXRpYyBuc0lBdG9tKiB2YWxpZ247CnN0YXRpYyBuc0lBdG9tKiB2YWx1ZTsKc3RhdGlj
IG5zSUF0b20qIHZhbHVldHlwZTsKc3RhdGljIG5zSUF0b20qIHZhcmlhYmxlOwpzdGF0aWMgbnNJ
QXRvbSogdmNhcmRfbmFtZTsKc3RhdGljIG5zSUF0b20qIHZlcnNpb247CnN0YXRpYyBuc0lBdG9t
KiB2ZXJ0aWNhbEZyYW1lc2V0Qm9yZGVyUHNldWRvOwpzdGF0aWMgbnNJQXRvbSogdmlzaWJpbGl0
eTsKc3RhdGljIG5zSUF0b20qIHZsaW5rOwpzdGF0aWMgbnNJQXRvbSogdnNwYWNlOwpzdGF0aWMg
bnNJQXRvbSogd2JyOwpzdGF0aWMgbnNJQXRvbSogd2lkdGg7CnN0YXRpYyBuc0lBdG9tKiB3cmFw
OwpzdGF0aWMgbnNJQXRvbSogd3JhcHBlZEZyYW1lUHNldWRvOwpzdGF0aWMgbnNJQXRvbSogemlu
ZGV4OwpzdGF0aWMgbnNJQXRvbSogel9pbmRleDsKCnN0YXRpYyBuc0lBdG9tKiBtb3pfdHJpc3Rh
dGU7CnN0YXRpYyBuc0lBdG9tKiBtb3pfdHJpc3RhdGV2YWx1ZTsKCgoKCgoKc3RhdGljIG5zSUF0
b20qIG9uYmx1cjsKc3RhdGljIG5zSUF0b20qIG9uY2hhbmdlOwpzdGF0aWMgbnNJQXRvbSogb25j
bGljazsKc3RhdGljIG5zSUF0b20qIG9uZGJsY2xpY2s7CnN0YXRpYyBuc0lBdG9tKiBvbmZvY3Vz
OwpzdGF0aWMgbnNJQXRvbSogb25rZXlkb3duOwpzdGF0aWMgbnNJQXRvbSogb25rZXlwcmVzczsK
c3RhdGljIG5zSUF0b20qIG9ua2V5dXA7CnN0YXRpYyBuc0lBdG9tKiBvbmxvYWQ7CnN0YXRpYyBu
c0lBdG9tKiBvbm1vdXNlZG93bjsKc3RhdGljIG5zSUF0b20qIG9ubW91c2Vtb3ZlOwpzdGF0aWMg
bnNJQXRvbSogb25tb3VzZW91dDsKc3RhdGljIG5zSUF0b20qIG9ubW91c2VvdmVyOwpzdGF0aWMg
bnNJQXRvbSogb25tb3VzZXVwOwpzdGF0aWMgbnNJQXRvbSogb25yZXNldDsKc3RhdGljIG5zSUF0
b20qIG9uc2VsZWN0OwpzdGF0aWMgbnNJQXRvbSogb25zdWJtaXQ7CnN0YXRpYyBuc0lBdG9tKiBv
bnVubG9hZDsKc3RhdGljIG5zSUF0b20qIG9uYWJvcnQ7CnN0YXRpYyBuc0lBdG9tKiBvbmVycm9y
OwpzdGF0aWMgbnNJQXRvbSogb25wYWludDsKc3RhdGljIG5zSUF0b20qIG9ucmVzaXplOwpzdGF0
aWMgbnNJQXRvbSogb25zY3JvbGw7CiMgNTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hU
TUxBdG9tcy5oIiAyCgp9OwojIDQ0ICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1s
L2Zvcm1zL3NyYy9uc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lCdXR0b24uaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJQnV0dG9uLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIiAx
CiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lCdXR0b24uaCIgMgojIDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lCdXR0b24uaCIgMgojIDM4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
QnV0dG9uLmgiCmNsYXNzIG5zSUJ1dHRvbiA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CgpwdWJsaWM6
CiAgIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg
PSB7IDB4MTgwMzJhZDAsIDB4YjI2NSwgMHgxMWQxLCB7IDB4YWEsIDB4MmEsIDB4MCwgMHgwLCAw
eDAsIDB4MCwgMHgwLCAweDAgfSB9OyByZXR1cm4gaWlkO30KIyA1MCAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSUJ1dHRvbi5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMYWJlbChjb25z
dCBuc1N0cmluZyAmYVRleHQpID0gMDsKIyA1OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUJ1dHRvbi5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYWJlbChuc1N0cmluZyAmYUJ1ZmZl
cikgPSAwOwoKfTsKIyA0NSAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQvaHRtbC9mb3Jt
cy9zcmMvbnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJQ2hlY2tCdXR0b24uaCIgMQojIDMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJQ2hlY2tCdXR0b24uaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9y
dHMuaCIgMQojIDMxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2hlY2tCdXR0b24uaCIg
MgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIgMQojIDMyICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2hlY2tCdXR0b24uaCIgMgoKCgoKCgoKY2xhc3MgbnNJ
Q2hlY2tCdXR0b24gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewoKcHVibGljOgogICAgc3RhdGljIGNv
bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHg5NjEwODVm
NSwgMHhiZDI4LCAweDExZDEsIHsgMHg5NywgMHhlZiwgMHgwLCAweDYwLCAweDk3LCAweDMsIDB4
YzEsIDB4NGUgfSB9OyByZXR1cm4gaWlkO30KIyA1MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSUNoZWNrQnV0dG9uLmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldExhYmVsKGNvbnN0IG5z
U3RyaW5nICZhVGV4dCkgPSAwOwojIDYwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2hl
Y2tCdXR0b24uaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFiZWwobnNTdHJpbmcgJmFCdWZm
ZXIpID0gMDsKCgoKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldFN0YXRlKGNvbnN0IFBSQm9v
bCBhU3RhdGUpID0gMDsKCgoKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0YXRlKFBSQm9v
bCYgYVN0YXRlKSA9IDA7Cgp9OwojIDQ2ICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9o
dG1sL2Zvcm1zL3NyYy9uc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lUZXh0V2lkZ2V0LmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVRleHRXaWRnZXQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
V2lkZ2V0LmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVRleHRXaWRnZXQu
aCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAxCiMgMjcgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lUZXh0V2lkZ2V0LmgiIDIKCgoKCgoKc3RydWN0IG5z
VGV4dFdpZGdldEluaXREYXRhIDogcHVibGljIG5zV2lkZ2V0SW5pdERhdGEgewogIG5zVGV4dFdp
ZGdldEluaXREYXRhKCkKICAgIDogbUlzUGFzc3dvcmQoMCksCiAgICAgIG1Jc1JlYWRPbmx5KDAp
CiAgewogIH0KCiAgUFJCb29sIG1Jc1Bhc3N3b3JkOwogIFBSQm9vbCBtSXNSZWFkT25seTsKfTsK
IyA1MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVRleHRXaWRnZXQuaCIKY2xhc3MgbnNJ
VGV4dFdpZGdldCA6IHB1YmxpYyBuc0lTdXBwb3J0cwp7CgogIHB1YmxpYzoKICAgIHN0YXRpYyBj
b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4ZjgwMzAw
MTEsIDB4YzM0MiwgMHgxMWQxLCB7IDB4OTcsIDB4ZjAsIDB4MCwgMHg2MCwgMHg5NywgMHgzLCAw
eGMxLCAweDRlIH0gfTsgcmV0dXJuIGlpZDt9CiMgNjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lUZXh0V2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRleHQobnNTdHJpbmcg
JmFUZXh0QnVmZmVyLCBQUlVpbnQzMiBhQnVmZmVyU2l6ZSwgUFJVaW50MzImIGFBY3R1YWxTaXpl
KSA9IDA7CiMgODAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lUZXh0V2lkZ2V0LmgiCiAg
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRleHQoY29uc3QgbnNTdHJpbmcgJmFUZXh0LCBQUlVpbnQz
MiYgYUFjdHVhbFNpemUpID0gMDsKIyA5NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVRl
eHRXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgSW5zZXJ0VGV4dChjb25zdCBuc1N0cmlu
ZyAmYVRleHQsIFBSVWludDMyIGFTdGFydFBvcywgUFJVaW50MzIgYUVuZFBvcywgUFJVaW50MzIm
IGFBY3R1YWxTaXplKSA9IDA7CgoKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZVRleHQo
dm9pZCkgPSAwOwojIDExMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVRleHRXaWRnZXQu
aCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGFzc3dvcmQoUFJCb29sIGFJc1Bhc3N3b3JkKSA9
IDA7CiMgMTIxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVGV4dFdpZGdldC5oIgogICAg
dmlydHVhbCBuc3Jlc3VsdCBTZXRNYXhUZXh0TGVuZ3RoKFBSVWludDMyIGFDaGFycykgPSAwOwoj
IDEzMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVRleHRXaWRnZXQuaCIKICAgIHZpcnR1
YWwgbnNyZXN1bHQgU2V0UmVhZE9ubHkoUFJCb29sIGFOZXdSZWFkT25seUZsYWcsIFBSQm9vbCYg
YU9sZFJlYWRPbmx5RmxhZykgPSAwOwoKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZWxlY3RB
bGwoKSA9IDA7CiMgMTQ5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVGV4dFdpZGdldC5o
IgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTZWxlY3Rpb24oUFJVaW50MzIgYVN0YXJ0U2VsLCBQ
UlVpbnQzMiBhRW5kU2VsKSA9IDA7CiMgMTU4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
VGV4dFdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWxlY3Rpb24oUFJVaW50MzIg
KmFTdGFydFNlbCwgUFJVaW50MzIgKmFFbmRTZWwpID0gMDsKCgoKCgoKCiAgICB2aXJ0dWFsIG5z
cmVzdWx0IFNldENhcmV0UG9zaXRpb24oUFJVaW50MzIgYVBvc2l0aW9uKSA9IDA7CgoKCgoKCgog
ICAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDYXJldFBvc2l0aW9uKFBSVWludDMyJiBhUG9zaXRpb24p
ID0gMDsKCn07CiMgNDcgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvZm9ybXMv
c3JjL25zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVN1cHBvcnRzLmgiIDEKIyA0OCAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQv
aHRtbC9mb3Jtcy9zcmMvbnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNTdHlsZUNvbnN0cy5oIiAxCiMgNDkgIi4uLy4uLy4uLy4uLy4uL21v
emlsbGEvbGF5b3V0L2h0bWwvZm9ybXMvc3JjL25zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zVW5pdENvbnZlcnNpb24uaCIgMQojIDUwICIu
Li8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Zvcm1zL3NyYy9uc0Zvcm1Db250cm9s
SGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlVXRpbC5o
IiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlVXRpbC5oIgojIDEgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2xheW91dC5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc1N0eWxlVXRpbC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zQ29vcmQuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVV0aWwu
aCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzQ29udGV4dC5oIiAxCiMg
MjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlVXRpbC5oIiAyCiMgMSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUxpbmtIYW5kbGVyLmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSUxpbmtIYW5kbGVyLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVN1cHBvcnRzLmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxp
bmtIYW5kbGVyLmgiIDIKCmNsYXNzIG5zSUlucHV0U3RyZWFtOwpjbGFzcyBuc0lDb250ZW50Owpj
bGFzcyBuc1N0cmluZzsKc3RydWN0IG5zR1VJRXZlbnQ7CgoKCgoKZW51bSBuc0xpbmtTdGF0ZSB7
CiAgZUxpbmtTdGF0ZV9Vbmtub3duID0gMCwKICBlTGlua1N0YXRlX1VudmlzaXRlZCA9IDEsCiAg
ZUxpbmtTdGF0ZV9WaXNpdGVkID0gMiwKICBlTGlua1N0YXRlX05vdExpbmsgPSAzCn07CgoKCgpl
bnVtIG5zTGlua1ZlcmIgewogIGVMaW5rVmVyYl9SZXBsYWNlID0gMCwKICBlTGlua1ZlcmJfTmV3
ID0gMSwKICBlTGlua1ZlcmJfRW1iZWQgPSAyLAogIGVMaW5rVmVyYl9VbmRlZmluZWQgPSAzCn07
CgoKCgpjbGFzcyBuc0lMaW5rSGFuZGxlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoK
ICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0g
eyAweGE2Y2Y5MDViLCAweDE1YjMsIDB4MTFkMix7MHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1
ZiwgMHg4YSwgMHhkZCwgMHgzMn19OyByZXR1cm4gaWlkO30KIyA2NyAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSUxpbmtIYW5kbGVyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBPbkxpbmtDbGlj
ayhuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zTGlua1Zl
cmIgYVZlcmIsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQUlVuaWNoYXIqIGFVUkxT
cGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUFJVbmljaGFyKiBhVGFyZ2V0U3Bl
YywKICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUlucHV0U3RyZWFtKiBhUG9zdERhdGFTdHJl
YW0gPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJSW5wdXRTdHJlYW0qIGFIZWFkZXJz
RGF0YVN0cmVhbSA9IDApID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBPbk92ZXJMaW5r
KG5zSUNvbnRlbnQqIGFDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQUlVu
aWNoYXIqIGFVUkxTcGVjLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQUlVuaWNoYXIq
IGFUYXJnZXRTcGVjKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGlua1N0YXRlKGNv
bnN0IGNoYXIqIGFMaW5rVVJJLCBuc0xpbmtTdGF0ZSYgYVN0YXRlKSA9IDA7Cn07CiMgMjkgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlVXRpbC5oIiAyCgpjbGFzcyBuc0lTdHlsZUNv
bnRleHQ7CnN0cnVjdCBuc1N0eWxlQmFja2dyb3VuZDsKCmVudW0gbnNGb250U2l6ZVR5cGUgewog
IGVGb250U2l6ZV9IVE1MID0gMSwKICBlRm9udFNpemVfQ1NTID0gMgp9OwoKCgpjbGFzcyBuc1N0
eWxlVXRpbCB7CnB1YmxpYzoKCiAgc3RhdGljIGZsb2F0IEdldFNjYWxpbmdGYWN0b3IoUFJJbnQz
MiBhU2NhbGVyKTsKCiAgc3RhdGljIG5zY29vcmQgQ2FsY0ZvbnRQb2ludFNpemUoUFJJbnQzMiBh
SFRNTFNpemUsIFBSSW50MzIgYUJhc2VQb2ludFNpemUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgYVNjYWxpbmdGYWN0b3IsIG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGb250U2l6ZVR5cGUg
YUZvbnRTaXplVHlwZSA9IGVGb250U2l6ZV9IVE1MKTsKCiAgc3RhdGljIFBSSW50MzIgRmluZE5l
eHRTbWFsbGVyRm9udFNpemUobnNjb29yZCBhRm9udFNpemUsIFBSSW50MzIgYUJhc2VQb2ludFNp
emUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYVNjYWxp
bmdGYWN0b3IsIG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNGb250U2l6ZVR5cGUgYUZvbnRTaXplVHlwZSA9IGVG
b250U2l6ZV9IVE1MKTsKCiAgc3RhdGljIFBSSW50MzIgRmluZE5leHRMYXJnZXJGb250U2l6ZShu
c2Nvb3JkIGFGb250U2l6ZSwgUFJJbnQzMiBhQmFzZVBvaW50U2l6ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFTY2FsaW5nRmFjdG9yLCBuc0lQcmVzQ29u
dGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNGb250U2l6ZVR5cGUgYUZvbnRTaXplVHlwZSA9IGVGb250U2l6ZV9IVE1MKTsKCiAgc3Rh
dGljIFBSSW50MzIgQ29uc3RyYWluRm9udFdlaWdodChQUkludDMyIGFXZWlnaHQpOwoKICBzdGF0
aWMgY29uc3QgbnNTdHlsZUJhY2tncm91bmQqIEZpbmROb25UcmFuc3BhcmVudEJhY2tncm91bmQo
bnNJU3R5bGVDb250ZXh0KiBhQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFTdGFydEF0UGFyZW50ID0g
MCk7CgogIHN0YXRpYyBQUkJvb2wgSXNIVE1MTGluayhuc0lDb250ZW50ICphQ29udGVudCwgbnNJ
QXRvbSAqYVRhZywgbnNJUHJlc0NvbnRleHQgKmFQcmVzQ29udGV4dCwgbnNMaW5rU3RhdGUgKmFT
dGF0ZSk7CiAgc3RhdGljIFBSQm9vbCBJc1NpbXBsZVhsaW5rKG5zSUNvbnRlbnQgKmFDb250ZW50
LCBuc0lQcmVzQ29udGV4dCAqYVByZXNDb250ZXh0LCBuc0xpbmtTdGF0ZSAqYVN0YXRlKTsKCn07
CiMgNTEgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvZm9ybXMvc3JjL25zRm9y
bUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQv
aHRtbC9mb3Jtcy9zcmMvbnNGb3JtRnJhbWUuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi8uLi9tb3pp
bGxhL2xheW91dC9odG1sL2Zvcm1zL3NyYy9uc0Zvcm1GcmFtZS5oIgojIDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lGb3JtTWFuYWdlci5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uLy4uL21v
emlsbGEvbGF5b3V0L2h0bWwvZm9ybXMvc3JjL25zRm9ybUZyYW1lLmgiIDIKIyAxICIuLi8uLi8u
Li8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Jhc2Uvc3JjL25zQmxvY2tGcmFtZS5oIiAxCiMg
MjUgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvYmFzZS9zcmMvbnNCbG9ja0Zy
YW1lLmgiCiMgMSAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQvaHRtbC9iYXNlL3NyYy9u
c0hUTUxDb250YWluZXJGcmFtZS5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5
b3V0L2h0bWwvYmFzZS9zcmMvbnNIVE1MQ29udGFpbmVyRnJhbWUuaCIKIyAxICIuLi8uLi8uLi8u
Li8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Jhc2Uvc3JjL25zQ29udGFpbmVyRnJhbWUuaCIgMQoj
IDI1ICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Jhc2Uvc3JjL25zQ29udGFp
bmVyRnJhbWUuaCIKIyAxICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Jhc2Uv
c3JjL25zU3BsaXR0YWJsZUZyYW1lLmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9s
YXlvdXQvaHRtbC9iYXNlL3NyYy9uc1NwbGl0dGFibGVGcmFtZS5oIgojIDEgIi4uLy4uLy4uLy4u
Ly4uL21vemlsbGEvbGF5b3V0L2h0bWwvYmFzZS9zcmMvbnNGcmFtZS5oIiAxCiMgMjYgIi4uLy4u
Ly4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvYmFzZS9zcmMvbnNTcGxpdHRhYmxlRnJhbWUu
aCIgMgoKCmNsYXNzIG5zU3BsaXR0YWJsZUZyYW1lIDogcHVibGljIG5zRnJhbWUKewpwdWJsaWM6
CiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAg
ICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDb250ZW50LAogICAgICAgICAgICAgICAgICBu
c0lGcmFtZSogYVBhcmVudCwKICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFQcmV2SW5GbG93KTsKCiAgdmlydHVh
bCBuc3Jlc3VsdCBJc1NwbGl0dGFibGUobnNTcGxpdHRhYmxlVHlwZSYgYUlzU3BsaXR0YWJsZSkg
Y29uc3Q7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByZXZJbkZsb3cobnNJRnJhbWUqKiBh
UHJldkluRmxvdykgY29uc3Q7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQcmV2SW5GbG93KG5zSUZy
YW1lKik7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROZXh0SW5GbG93KG5zSUZyYW1lKiogYU5leHRJ
bkZsb3cpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TmV4dEluRmxvdyhuc0lGcmFtZSop
OwoKCgoKICBuc0lGcmFtZSogR2V0Rmlyc3RJbkZsb3coKSBjb25zdDsKCgoKCiAgbnNJRnJhbWUq
IEdldExhc3RJbkZsb3coKSBjb25zdDsKCgoKICBzdGF0aWMgdm9pZCBSZW1vdmVGcm9tRmxvdyhu
c0lGcmFtZSogYUZyYW1lKTsKCgogIHN0YXRpYyB2b2lkIEJyZWFrRnJvbVByZXZGbG93KG5zSUZy
YW1lKiBhRnJhbWUpOwoKICBuc0lGcmFtZSogR2V0UHJldkluRmxvdygpOwogIG5zSUZyYW1lKiBH
ZXROZXh0SW5GbG93KCk7Cgpwcm90ZWN0ZWQ6CgoKCgogIG5zSUZyYW1lKiBtUHJldkluRmxvdzsK
ICBuc0lGcmFtZSogbU5leHRJbkZsb3c7Cn07CiMgMjYgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEv
bGF5b3V0L2h0bWwvYmFzZS9zcmMvbnNDb250YWluZXJGcmFtZS5oIiAyCiMgMSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zRnJhbWVMaXN0LmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zRnJhbWVMaXN0LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZy
YW1lLmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRnJhbWVMaXN0LmgiIDIK
CgoKCgpjbGFzcyBuc0ZyYW1lTGlzdCB7CnB1YmxpYzoKICBuc0ZyYW1lTGlzdCgpIHsKICAgIG1G
aXJzdENoaWxkID0gMDsKICB9CgogIG5zRnJhbWVMaXN0KG5zSUZyYW1lKiBhSGVhZCkgewogICAg
bUZpcnN0Q2hpbGQgPSBhSGVhZDsKICB9CgogIH5uc0ZyYW1lTGlzdCgpIHsKICB9CgogIHZvaWQg
RGVzdHJveUZyYW1lcyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KTsKCiAgdm9pZCBTZXRG
cmFtZXMobnNJRnJhbWUqIGFGcmFtZUxpc3QpIHsKICAgIG1GaXJzdENoaWxkID0gYUZyYW1lTGlz
dDsKICB9CgogIHZvaWQgQXBwZW5kRnJhbWVzKG5zSUZyYW1lKiBhUGFyZW50LCBuc0lGcmFtZSog
YUZyYW1lTGlzdCk7CgogIHZvaWQgQXBwZW5kRnJhbWVzKG5zSUZyYW1lKiBhUGFyZW50LCBuc0Zy
YW1lTGlzdCYgYUZyYW1lTGlzdCkgewogICAgQXBwZW5kRnJhbWVzKGFQYXJlbnQsIGFGcmFtZUxp
c3QubUZpcnN0Q2hpbGQpOwogICAgYUZyYW1lTGlzdC5tRmlyc3RDaGlsZCA9IDA7CiAgfQoKICB2
b2lkIEFwcGVuZEZyYW1lKG5zSUZyYW1lKiBhUGFyZW50LCBuc0lGcmFtZSogYUZyYW1lKTsKCgoK
CiAgUFJCb29sIFJlbW92ZUZyYW1lKG5zSUZyYW1lKiBhRnJhbWUpOwoKCgoKICBQUkJvb2wgUmVt
b3ZlRmlyc3RDaGlsZCgpOwoKCgoKICBQUkJvb2wgRGVzdHJveUZyYW1lKG5zSVByZXNDb250ZXh0
KiBhUHJlc0NvbnRleHQsIG5zSUZyYW1lKiBhRnJhbWUpOwoKICB2b2lkIEluc2VydEZyYW1lKG5z
SUZyYW1lKiBhUGFyZW50LAogICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFQcmV2U2libGlu
ZywKICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhTmV3RnJhbWUpOwoKICB2b2lkIEluc2Vy
dEZyYW1lcyhuc0lGcmFtZSogYVBhcmVudCwKICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSog
YVByZXZTaWJsaW5nLAogICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWVMaXN0KTsK
CiAgdm9pZCBJbnNlcnRGcmFtZXMobnNJRnJhbWUqIGFQYXJlbnQsIG5zSUZyYW1lKiBhUHJldlNp
YmxpbmcsCiAgICAgICAgICAgICAgICAgICAgbnNGcmFtZUxpc3QmIGFGcmFtZUxpc3QpIHsKICAg
IEluc2VydEZyYW1lcyhhUGFyZW50LCBhUHJldlNpYmxpbmcsIGFGcmFtZUxpc3QuRmlyc3RDaGls
ZCgpKTsKICAgIGFGcmFtZUxpc3QubUZpcnN0Q2hpbGQgPSAwOwogIH0KCiAgUFJCb29sIFJlcGxh
Y2VGcmFtZShuc0lGcmFtZSogYVBhcmVudCwKICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1l
KiBhT2xkRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYU5ld0ZyYW1lKTsK
CiAgUFJCb29sIFJlcGxhY2VBbmREZXN0cm95RnJhbWUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYVBhcmVudCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYU9sZEZyYW1lLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhTmV3RnJhbWUpOwoKICBQUkJv
b2wgU3BsaXQobnNJRnJhbWUqIGFBZnRlckZyYW1lLCBuc0lGcmFtZSoqIGFOZXh0RnJhbWVSZXN1
bHQpOwoKICBuc0lGcmFtZSogUHVsbEZyYW1lKG5zSUZyYW1lKiBhUGFyZW50LAogICAgICAgICAg
ICAgICAgICAgICAgbnNJRnJhbWUqIGFMYXN0Q2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICBu
c0ZyYW1lTGlzdCYgYUZyb21MaXN0KTsKCiAgbnNJRnJhbWUqIEZpcnN0Q2hpbGQoKSBjb25zdCB7
CiAgICByZXR1cm4gbUZpcnN0Q2hpbGQ7CiAgfQoKICBuc0lGcmFtZSogTGFzdENoaWxkKCkgY29u
c3Q7CgogIG5zSUZyYW1lKiBGcmFtZUF0KFBSSW50MzIgYUluZGV4KSBjb25zdDsKCiAgUFJCb29s
IElzRW1wdHkoKSBjb25zdCB7CiAgICByZXR1cm4gMCA9PSBtRmlyc3RDaGlsZDsKICB9CgogIFBS
Qm9vbCBOb3RFbXB0eSgpIGNvbnN0IHsKICAgIHJldHVybiAwICE9IG1GaXJzdENoaWxkOwogIH0K
CiAgUFJCb29sIENvbnRhaW5zRnJhbWUoY29uc3QgbnNJRnJhbWUqIGFGcmFtZSkgY29uc3Q7Cgog
IFBSSW50MzIgR2V0TGVuZ3RoKCkgY29uc3Q7CgogIG5zSUZyYW1lKiBHZXRQcmV2U2libGluZ0Zv
cihuc0lGcmFtZSogYUZyYW1lKSBjb25zdDsKCgoKCgogIG5zSUZyYW1lKiBHZXRQcmV2VmlzdWFs
Rm9yKG5zSUZyYW1lKiBhRnJhbWUpIGNvbnN0OwoKCgoKICBuc0lGcmFtZSogR2V0TmV4dFZpc3Vh
bEZvcihuc0lGcmFtZSogYUZyYW1lKSBjb25zdDsKCgogIHZvaWQgVmVyaWZ5UGFyZW50KG5zSUZy
YW1lKiBhUGFyZW50KSBjb25zdDsKCgoKCgpwcm90ZWN0ZWQ6CiAgbnNJRnJhbWUqIG1GaXJzdENo
aWxkOwp9OwojIDI3ICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Jhc2Uvc3Jj
L25zQ29udGFpbmVyRnJhbWUuaCIgMgojIDM5ICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91
dC9odG1sL2Jhc2Uvc3JjL25zQ29udGFpbmVyRnJhbWUuaCIKY2xhc3MgbnNDb250YWluZXJGcmFt
ZSA6IHB1YmxpYyBuc1NwbGl0dGFibGVGcmFtZQp7CnB1YmxpYzoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBJbml0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgIG5z
SUNvbnRlbnQqIGFDb250ZW50LAogICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYVBhcmVudCwK
ICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhQ29udGV4dCwKICAgICAgICAgICAg
ICAgICAgbnNJRnJhbWUqIGFQcmV2SW5GbG93KTsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEluaXRp
YWxDaGlsZExpc3QobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lGcmFtZSogYUNoaWxkTGlzdCk7CiAgdmlydHVhbCBuc3Jlc3VsdCBG
aXJzdENoaWxkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJh
bWUqKiBhRmlyc3RDaGlsZCkgY29uc3Q7CiAgdmlydHVhbCBuc3Jlc3VsdCBEZXN0cm95KG5zSVBy
ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwogIHZpcnR1YWwgbnNyZXN1bHQgUGFpbnQobnNJUHJl
c0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0Nv
bnRleHQmIGFSZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0
JiBhRGlydHlSZWN0LAogICAgICAgICAgICAgICAgICAgbnNGcmFtZVBhaW50TGF5ZXIgYVdoaWNo
TGF5ZXIpOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJhbWVGb3JQb2ludChuc0lQcmVzQ29udGV4
dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1Bv
aW50JiBhUG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRnJhbWVQYWludExh
eWVyIGFXaGljaExheWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSoq
IGFGcmFtZSk7CiAgdmlydHVhbCBuc3Jlc3VsdCBSZXBsYWNlRnJhbWUobnNJUHJlc0NvbnRleHQq
IGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQcmVzU2hlbGwmIGFQ
cmVzU2hlbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhT2xkRnJhbWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFOZXdGcmFtZSk7CiAgdmlydHVhbCBuc3Jlc3VsdCBS
ZWZsb3dEaXJ0eUNoaWxkKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqIGFDaGls
ZCk7CgoKCgoKCgogIHZpcnR1YWwgdm9pZCBEZWxldGVDaGlsZHNOZXh0SW5GbG93KG5zSVByZXND
b250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJRnJhbWUqIGFDaGlsZCk7CgogIHN0YXRpYyBQUkludDMyIExlbmd0aE9mKG5zSUZyYW1l
KiBhRnJhbWVMaXN0KSB7CiAgICBuc0ZyYW1lTGlzdCB0bXAoYUZyYW1lTGlzdCk7CiAgICByZXR1
cm4gdG1wLkdldExlbmd0aCgpOwogIH0KCgogIHN0YXRpYyB2b2lkIFBvc2l0aW9uRnJhbWVWaWV3
KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJRnJhbWUqIGFLaWRGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lWaWV3KiBhVmlldyk7CiMgMTAyICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9o
dG1sL2Jhc2Uvc3JjL25zQ29udGFpbmVyRnJhbWUuaCIKICBzdGF0aWMgdm9pZCBTeW5jRnJhbWVW
aWV3QWZ0ZXJSZWZsb3cobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVmlldyogYVZpZXcsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCogYUNvbWJpbmVkQXJlYSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUZsYWdzID0gMCk7
CiMgMTE5ICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Jhc2Uvc3JjL25zQ29u
dGFpbmVyRnJhbWUuaCIKICBuc3Jlc3VsdCBSZWZsb3dDaGlsZChuc0lGcmFtZSogYUtpZEZyYW1l
LAogICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgbnNIVE1MUmVmbG93TWV0cmljcyYgYURlc2lyZWRTaXplLAog
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlJiBhUmVmbG93U3Rh
dGUsCiAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhWCwKICAgICAgICAgICAgICAgICAg
ICAgICBuc2Nvb3JkIGFZLAogICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFGbGFncywK
ICAgICAgICAgICAgICAgICAgICAgICBuc1JlZmxvd1N0YXR1cyYgYVN0YXR1cyk7CiMgMTQ5ICIu
Li8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Jhc2Uvc3JjL25zQ29udGFpbmVyRnJh
bWUuaCIKICBzdGF0aWMgbnNyZXN1bHQgRmluaXNoUmVmbG93Q2hpbGQobnNJRnJhbWUqIGFLaWRG
cmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc0NvbnRleHQq
IGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNIVE1M
UmVmbG93TWV0cmljcyYgYURlc2lyZWRTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc2Nvb3JkIGFYLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c2Nvb3JkIGFZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBh
RmxhZ3MpOwoKCiAgc3RhdGljIHZvaWQgUG9zaXRpb25DaGlsZFZpZXdzKG5zSVByZXNDb250ZXh0
KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1l
KiBhRnJhbWUpOwoKcHJvdGVjdGVkOgogIG5zQ29udGFpbmVyRnJhbWUoKTsKICB+bnNDb250YWlu
ZXJGcmFtZSgpOwoKICBuc3Jlc3VsdCBHZXRGcmFtZUZvclBvaW50VXNpbmcobnNJUHJlc0NvbnRl
eHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bnNQb2ludCYgYVBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9t
KiBhTGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGcmFtZVBhaW50TGF5
ZXIgYVdoaWNoTGF5ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBh
Q29uc2lkZXJTZWxmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSoq
IGFGcmFtZSk7CgogIHZpcnR1YWwgdm9pZCBQYWludENoaWxkcmVuKG5zSVByZXNDb250ZXh0KiBh
UHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29u
dGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbnNSZWN0JiBhRGlydHlSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRnJh
bWVQYWludExheWVyIGFXaGljaExheWVyKTsKCiAgdmlydHVhbCB2b2lkIFBhaW50Q2hpbGQobnNJ
UHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lS
ZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBuc1JlY3QmIGFEaXJ0eVJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZyYW1lUGFpbnRM
YXllciBhV2hpY2hMYXllcik7CgoKCgogIG5zSUZyYW1lKiBHZXRPdmVyZmxvd0ZyYW1lcyhuc0lQ
cmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
UkJvb2wgYVJlbW92ZVByb3BlcnR5KSBjb25zdDsKCgoKCiAgbnNyZXN1bHQgU2V0T3ZlcmZsb3dG
cmFtZXMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lGcmFtZSogYU92ZXJmbG93RnJhbWVzKTsKIyAyMDMgIi4uLy4uLy4uLy4uLy4u
L21vemlsbGEvbGF5b3V0L2h0bWwvYmFzZS9zcmMvbnNDb250YWluZXJGcmFtZS5oIgogIFBSQm9v
bCBNb3ZlT3ZlcmZsb3dUb0NoaWxkTGlzdChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KTsK
IyAyMTkgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvYmFzZS9zcmMvbnNDb250
YWluZXJGcmFtZS5oIgogIHZvaWQgUHVzaENoaWxkcmVuKG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGcm9tQ2hpbGQsCiAgICAgICAg
ICAgICAgICAgICAgbnNJRnJhbWUqIGFQcmV2U2libGluZyk7CgogIG5zRnJhbWVMaXN0IG1GcmFt
ZXM7Cn07CiMgMjYgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvYmFzZS9zcmMv
bnNIVE1MQ29udGFpbmVyRnJhbWUuaCIgMgpjbGFzcyBuc1N0cmluZzsKY2xhc3MgbnNBYnNvbHV0
ZUZyYW1lOwpjbGFzcyBuc1BsYWNlaG9sZGVyRnJhbWU7CnN0cnVjdCBuc1N0eWxlRGlzcGxheTsK
c3RydWN0IG5zU3R5bGVQb3NpdGlvbjsKIyA0NiAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlv
dXQvaHRtbC9iYXNlL3NyYy9uc0hUTUxDb250YWluZXJGcmFtZS5oIgpjbGFzcyBuc0hUTUxDb250
YWluZXJGcmFtZSA6IHB1YmxpYyBuc0NvbnRhaW5lckZyYW1lIHsKcHVibGljOgogIHZpcnR1YWwg
bnNyZXN1bHQgUGFpbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICBjb25zdCBuc1JlY3QmIGFEaXJ0eVJlY3QsCiAgICAgICAgICAgICAgICAgICAg
bnNGcmFtZVBhaW50TGF5ZXIgYVdoaWNoTGF5ZXIpOwojIDYwICIuLi8uLi8uLi8uLi8uLi9tb3pp
bGxhL2xheW91dC9odG1sL2Jhc2Uvc3JjL25zSFRNTENvbnRhaW5lckZyYW1lLmgiCiAgc3RhdGlj
IG5zcmVzdWx0IENyZWF0ZU5leHRJbkZsb3cobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYU91dGVyRnJhbWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSomIGFOZXh0SW5GbG93UmVz
dWx0KTsKIyA3NSAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQvaHRtbC9iYXNlL3NyYy9u
c0hUTUxDb250YWluZXJGcmFtZS5oIgogIHN0YXRpYyBuc3Jlc3VsdCBDcmVhdGVWaWV3Rm9yRnJh
bWUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqIGFTdHlsZUNvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUNvbnRlbnRQYXJlbnRGcmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhRm9yY2UpOwoKICBzdGF0
aWMgbnNyZXN1bHQgUmVwYXJlbnRGcmFtZVZpZXcobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFDaGlsZEZy
YW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYU9sZFBh
cmVudEZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSog
YU5ld1BhcmVudEZyYW1lKTsKCiAgc3RhdGljIG5zcmVzdWx0IFJlcGFyZW50RnJhbWVWaWV3TGlz
dChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFDaGlsZEZyYW1lTGlzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhT2xkUGFyZW50RnJhbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYU5ld1BhcmVudEZy
YW1lKTsKCnByb3RlY3RlZDoKICB2aXJ0dWFsIFBSSW50biBHZXRTa2lwU2lkZXMoKSBjb25zdCA9
IDA7Cn07CiMgMjYgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvYmFzZS9zcmMv
bnNCbG9ja0ZyYW1lLmgiIDIKIyAxICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1s
L2Jhc2Uvc3JjL25zSFRNTFBhcnRzLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9s
YXlvdXQvaHRtbC9iYXNlL3NyYy9uc0Jsb2NrRnJhbWUuaCIgMgojIDEgIi4uLy4uLy4uLy4uLy4u
L21vemlsbGEvbGF5b3V0L2h0bWwvYmFzZS9zcmMvbnNBYnNvbHV0ZUNvbnRhaW5pbmdCbG9jay5o
IiAxCiMgMjUgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvYmFzZS9zcmMvbnNB
YnNvbHV0ZUNvbnRhaW5pbmdCbG9jay5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c2xheW91dC5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvYmFz
ZS9zcmMvbnNBYnNvbHV0ZUNvbnRhaW5pbmdCbG9jay5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zRnJhbWVMaXN0LmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9s
YXlvdXQvaHRtbC9iYXNlL3NyYy9uc0Fic29sdXRlQ29udGFpbmluZ0Jsb2NrLmgiIDIKCmNsYXNz
IG5zSUF0b207CmNsYXNzIG5zSUZyYW1lOwpjbGFzcyBuc0lQcmVzQ29udGV4dDsKIyA0MyAiLi4v
Li4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQvaHRtbC9iYXNlL3NyYy9uc0Fic29sdXRlQ29udGFp
bmluZ0Jsb2NrLmgiCmNsYXNzIG5zQWJzb2x1dGVDb250YWluaW5nQmxvY2sKewpwdWJsaWM6CiAg
bnNyZXN1bHQgRmlyc3RDaGlsZChjb25zdCBuc0lGcmFtZSogYURlbGVnYXRpbmdGcmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgIG5zSUZyYW1lKiogYUZpcnN0Q2hpbGQpIGNvbnN0OwoKICBuc3Jlc3VsdCBTZXRJbml0aWFs
Q2hpbGRMaXN0KG5zSUZyYW1lKiBhRGVsZWdhdGluZ0ZyYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zSUZyYW1lKiBhQ2hpbGRMaXN0KTsKICBuc3Jlc3VsdCBBcHBlbmRGcmFtZXMo
bnNJRnJhbWUqIGFEZWxlZ2F0aW5nRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zSVBy
ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNT
aGVsbCYgYVByZXNTaGVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3RO
YW1lLAogICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lTGlzdCk7CiAgbnNy
ZXN1bHQgSW5zZXJ0RnJhbWVzKG5zSUZyYW1lKiBhRGVsZWdhdGluZ0ZyYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICBuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICBuc0lQcmVzU2hlbGwmIGFQcmVzU2hlbGwsCiAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUq
IGFQcmV2RnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWVMaXN0
KTsKICBuc3Jlc3VsdCBSZW1vdmVGcmFtZShuc0lGcmFtZSogYURlbGVnYXRpbmdGcmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICBuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgIG5zSVByZXNTaGVsbCYgYVByZXNTaGVsbCwKICAgICAgICAgICAgICAg
ICAgICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJh
bWUqIGFPbGRGcmFtZSk7CiMgNzggIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwv
YmFzZS9zcmMvbnNBYnNvbHV0ZUNvbnRhaW5pbmdCbG9jay5oIgogIG5zcmVzdWx0IFJlZmxvdyhu
c0lGcmFtZSogYURlbGVnYXRpbmdGcmFtZSwKICAgICAgICAgICAgICAgICAgbnNJUHJlc0NvbnRl
eHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgY29uc3QgbnNIVE1MUmVmbG93U3Rh
dGUmIGFSZWZsb3dTdGF0ZSwKICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmluZ0Js
b2NrV2lkdGgsCiAgICAgICAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja0hlaWdo
dCwKICAgICAgICAgICAgICAgICAgbnNSZWN0JiBhQ2hpbGRCb3VuZHMpOwojIDkyICIuLi8uLi8u
Li8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Jhc2Uvc3JjL25zQWJzb2x1dGVDb250YWluaW5n
QmxvY2suaCIKICBuc3Jlc3VsdCBJbmNyZW1lbnRhbFJlZmxvdyhuc0lGcmFtZSogYURlbGVnYXRp
bmdGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQcmVzQ29udGV4dCogYVBy
ZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zSFRNTFJlZmxv
d1N0YXRlJiBhUmVmbG93U3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29y
ZCBhQ29udGFpbmluZ0Jsb2NrV2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNj
b29yZCBhQ29udGFpbmluZ0Jsb2NrSGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBSQm9vbCYgYVdhc0hhbmRsZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNSZWN0
JiBhQ2hpbGRCb3VuZHMpOwoKICB2b2lkIERlc3Ryb3lGcmFtZXMobnNJRnJhbWUqIGFEZWxlZ2F0
aW5nRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRl
eHQpOwoKICBQUkJvb2wgSGFzQWJzb2x1dGVGcmFtZXMoKSB7cmV0dXJuIG1BYnNvbHV0ZUZyYW1l
cy5Ob3RFbXB0eSgpO30KCnByb3RlY3RlZDoKICBuc3Jlc3VsdCBSZWZsb3dBYnNvbHV0ZUZyYW1l
KG5zSUZyYW1lKiBhRGVsZWdhdGluZ0ZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlJiBhUmVmbG93U3RhdGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tXaWR0aCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja0hlaWdodCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhS2lkRnJhbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc1JlZmxvd1JlYXNvbiBhUmVhc29uLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNSZWZsb3dTdGF0dXMmIGFTdGF0dXMpOwoKICB2b2lk
IENhbGN1bGF0ZUNoaWxkQm91bmRzKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIG5zUmVj
dCYgYUNoaWxkQm91bmRzKTsKCnByb3RlY3RlZDoKICBuc0ZyYW1lTGlzdCBtQWJzb2x1dGVGcmFt
ZXM7Cn07CiMgMjggIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvYmFzZS9zcmMv
bnNCbG9ja0ZyYW1lLmgiIDIKCmNsYXNzIG5zQmxvY2tSZWZsb3dTdGF0ZTsKY2xhc3MgbnNCdWxs
ZXRGcmFtZTsKY2xhc3MgbnNMaW5lQm94OwpjbGFzcyBuc0ZpcnN0TGluZUZyYW1lOwpjbGFzcyBu
c0lMaW5lSXRlcmF0b3I7CiMgNDggIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwv
YmFzZS9zcmMvbnNCbG9ja0ZyYW1lLmgiCmV4dGVybiBjb25zdCBuc0lJRCBrQmxvY2tGcmFtZUNJ
RDsKIyA1NyAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQvaHRtbC9iYXNlL3NyYy9uc0Js
b2NrRnJhbWUuaCIKY2xhc3MgbnNCbG9ja0ZyYW1lIDogcHVibGljIG5zSFRNTENvbnRhaW5lckZy
YW1lCnsKcHVibGljOgogIGZyaWVuZCBuc3Jlc3VsdCBOU19OZXdCbG9ja0ZyYW1lKG5zSVByZXNT
aGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhTmV3RnJhbWUsIFBSVWludDMyIGFGbGFncyk7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFF1ZXJ5SW50ZXJmYWNlKGNvbnN0IG5zSUlEJiBhSUlELCB2
b2lkKiogYUluc3RhbmNlUHRyKTsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0lQcmVzQ29u
dGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ29udGVu
dCwKICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFQYXJlbnQsCiAgICAgICAgICAgICAgICAg
IG5zSVN0eWxlQ29udGV4dCogYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBh
UHJldkluRmxvdyk7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRJbml0aWFsQ2hpbGRMaXN0KG5zSVBy
ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
RnJhbWUqIGFDaGlsZExpc3QpOwogIHZpcnR1YWwgbnNyZXN1bHQgQXBwZW5kRnJhbWVzKG5zSVBy
ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVBy
ZXNTaGVsbCYgYVByZXNTaGVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSog
YUxpc3ROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lTGlz
dCk7CiAgdmlydHVhbCBuc3Jlc3VsdCBJbnNlcnRGcmFtZXMobnNJUHJlc0NvbnRleHQqIGFQcmVz
Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJlc1No
ZWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhUHJldkZyYW1lLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lTGlzdCk7CiAgdmlydHVhbCBuc3Jlc3VsdCBS
ZW1vdmVGcmFtZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zSVByZXNTaGVsbCYgYVByZXNTaGVsbCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJh
bWUqIGFPbGRGcmFtZSk7CiAgdmlydHVhbCBuc3Jlc3VsdCBGaXJzdENoaWxkKG5zSVByZXNDb250
ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0
TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqKiBhRmlyc3RDaGlsZCkgY29u
c3Q7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBZGRpdGlvbmFsQ2hpbGRMaXN0TmFtZShQUkludDMy
IGFJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20q
KiBhTGlzdE5hbWUpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQgRGVzdHJveShuc0lQcmVzQ29u
dGV4dCogYVByZXNDb250ZXh0KTsKICB2aXJ0dWFsIG5zcmVzdWx0IElzU3BsaXR0YWJsZShuc1Nw
bGl0dGFibGVUeXBlJiBhSXNTcGxpdHRhYmxlKSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IElz
UGVyY2VudGFnZUJhc2UoUFJCb29sJiBhQmFzZSkgY29uc3Q7CiAgdmlydHVhbCBuc3Jlc3VsdCBQ
YWludChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgbnNJ
UmVuZGVyaW5nQ29udGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICBj
b25zdCBuc1JlY3QmIGFEaXJ0eVJlY3QsCiAgICAgICAgICAgICAgICAgICBuc0ZyYW1lUGFpbnRM
YXllciBhV2hpY2hMYXllcik7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGcmFtZVR5cGUobnNJQXRv
bSoqIGFUeXBlKSBjb25zdDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZyYW1lRm9yUG9p
bnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgY29uc3QgbnNQb2ludCYgYVBvaW50LCBu
c0ZyYW1lUGFpbnRMYXllciBhV2hpY2hMYXllciwgbnNJRnJhbWUqKiBhRnJhbWUpOwogIHZpcnR1
YWwgbnNyZXN1bHQgSGFuZGxlRXZlbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zR1VJRXZlbnQqIGFFdmVudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zRXZlbnRTdGF0dXMqIGFFdmVudFN0YXR1cyk7CiAgdmlydHVhbCBuc3Jlc3Vs
dCBSZWZsb3dEaXJ0eUNoaWxkKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqIGFD
aGlsZCk7CgogIHZpcnR1YWwgbnNyZXN1bHQgSXNWaXNpYmxlRm9yUGFpbnRpbmcobnNJUHJlc0Nv
bnRleHQgKiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lSZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBSQm9vbCBhQ2hlY2tWaXMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQUkJvb2wqIGFJc1Zpc2libGUpOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWZs
b3cobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICBuc0hU
TUxSZWZsb3dNZXRyaWNzJiBhRGVzaXJlZFNpemUsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bnNIVE1MUmVmbG93U3RhdGUmIGFSZWZsb3dTdGF0ZSwKICAgICAgICAgICAgICAgICAgICBuc1Jl
Zmxvd1N0YXR1cyYgYVN0YXR1cyk7CgogIHZpcnR1YWwgbnNyZXN1bHQgQXR0cmlidXRlQ2hhbmdl
ZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lDb250ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
SW50MzIgYU5hbWVTcGFjZUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9t
KiBhQXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFIaW50
KTsKIyAxNDQgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvYmFzZS9zcmMvbnNC
bG9ja0ZyYW1lLmgiCiAgdmlydHVhbCB2b2lkIERlbGV0ZUNoaWxkc05leHRJbkZsb3cobnNJUHJl
c0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lGcmFtZSogYU5leHRJbkZsb3cpOwoKCgoKCiAgbnNJRnJhbWUqIEdldFRvcEJsb2Nr
Q2hpbGQoKTsKCgoKCiAgbnNyZXN1bHQgVXBkYXRlU3BhY2VNYW5hZ2VyKG5zSVByZXNDb250ZXh0
KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVNwYWNlTWFu
YWdlciogYVNwYWNlTWFuYWdlcik7CgogIG5zTGluZUJveCogRmluZExpbmVGb3IobnNJRnJhbWUq
IGFGcmFtZSwgbnNMaW5lQm94KiogYVByZXZMaW5lUmVzdWx0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgUFJCb29sKiBhSXNGbG9hdGVyUmVzdWx0KTsKCiAgc3RhdGljIG5zcmVzdWx0IEdldEN1
cnJlbnRMaW5lKG5zQmxvY2tSZWZsb3dTdGF0ZSAqYVN0YXRlLCBuc0xpbmVCb3ggKiphT3V0Q3Vy
cmVudExpbmUpOwoKICBzdGF0aWMgdm9pZCBDb21iaW5lUmVjdHMoY29uc3QgbnNSZWN0JiByMSwg
bnNSZWN0JiByMik7Cgpwcm90ZWN0ZWQ6CiAgbnNCbG9ja0ZyYW1lKCk7CiAgdmlydHVhbCB+bnNC
bG9ja0ZyYW1lKCk7CgogIG5zSVN0eWxlQ29udGV4dCogR2V0Rmlyc3RMZXR0ZXJTdHlsZShuc0lQ
cmVzQ29udGV4dCogYVByZXNDb250ZXh0KTsKCgoKCgoKCiAgbnNyZXN1bHQgR2V0Q2xvc2VzdExp
bmUobnNJTGluZUl0ZXJhdG9yICphTEksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbnNQb2ludCAmYU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBu
c1BvaW50ICZhUG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiAmYUNs
b3Nlc3RMaW5lKTsKCiAgdm9pZCBTZXRGbGFncyhQUlVpbnQzMiBhRmxhZ3MpIHsKICAgIG1TdGF0
ZSAmPSB+MHhGRkYwMDAwMDsKICAgIG1TdGF0ZSB8PSBhRmxhZ3M7CiAgfQoKICBQUkJvb2wgSGF2
ZU91dHNpZGVCdWxsZXQoKSBjb25zdCB7CgoKCgoKICAgIHJldHVybiAwICE9IChtU3RhdGUgJiAw
eDQwMDAwMDAwKTsKICB9CgoKCgogIFBSQm9vbCBJc0luY3JlbWVudGFsRGFtYWdlQ29uc3RyYWlu
ZWQoY29uc3QgbnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUpIGNvbnN0OwoKCgoKICB2b2lkIFNs
aWRlTGluZShuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAgICBuc0xp
bmVCb3gqIGFMaW5lLCBuc2Nvb3JkIGFEWSk7CgoKCgoKICBQUkJvb2wgRHJhaW5PdmVyZmxvd0xp
bmVzKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwoKICB2aXJ0dWFsIFBSSW50biBHZXRT
a2lwU2lkZXMoKSBjb25zdDsKCiAgdmlydHVhbCB2b2lkIENvbXB1dGVGaW5hbFNpemUoY29uc3Qg
bnNIVE1MUmVmbG93U3RhdGUmIGFSZWZsb3dTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0hUTUxSZWZsb3dNZXRyaWNzJiBhTWV0cmljcyk7CgoKCgoKCgogIG5zcmVz
dWx0IEFkZEZyYW1lcyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICBuc0lGcmFtZSogYUZyYW1lTGlzdCwKICAgICAgICAgICAgICAgICAgICAgbnNJRnJh
bWUqIGFQcmV2U2libGluZyk7CgoKCgoKICB2b2lkIEZpeFBhcmVudEFuZFZpZXcobnNJUHJlc0Nv
bnRleHQqIGFQcmVzQ29udGV4dCwgbnNJRnJhbWUqIGFGcmFtZSk7CgoKCgoKCiAgbnNyZXN1bHQg
RG9SZW1vdmVGcmFtZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJRnJhbWUqIGFEZWxldGVkRnJhbWUpOwoKCgogIG5zcmVzdWx0IFByZXBh
cmVJbml0aWFsUmVmbG93KG5zQmxvY2tSZWZsb3dTdGF0ZSYgYVN0YXRlKTsKCgogIG5zcmVzdWx0
IFByZXBhcmVTdHlsZUNoYW5nZWRSZWZsb3cobnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUpOwoK
CgoKICBuc3Jlc3VsdCBQcmVwYXJlQ2hpbGRJbmNyZW1lbnRhbFJlZmxvdyhuc0Jsb2NrUmVmbG93
U3RhdGUmIGFTdGF0ZSk7CgoKCgogIG5zcmVzdWx0IFByZXBhcmVSZXNpemVSZWZsb3cobnNCbG9j
a1JlZmxvd1N0YXRlJiBhU3RhdGUpOwoKCiAgbnNyZXN1bHQgUmVmbG93RGlydHlMaW5lcyhuc0Js
b2NrUmVmbG93U3RhdGUmIGFTdGF0ZSk7CgoKICB2b2lkIFJlY292ZXJTdGF0ZUZyb20obnNCbG9j
a1JlZmxvd1N0YXRlJiBhU3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zTGluZUJveCog
YUxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zUmVjdCogYURhbWFnZVJlY3QpOwojIDI4
MCAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQvaHRtbC9iYXNlL3NyYy9uc0Jsb2NrRnJh
bWUuaCIKICBuc3Jlc3VsdCBSZWZsb3dMaW5lKG5zQmxvY2tSZWZsb3dTdGF0ZSYgYVN0YXRlLAog
ICAgICAgICAgICAgICAgICAgICAgbnNMaW5lQm94KiBhTGluZSwKICAgICAgICAgICAgICAgICAg
ICAgIFBSQm9vbCogYUtlZXBSZWZsb3dHb2luZywKICAgICAgICAgICAgICAgICAgICAgIFBSQm9v
bCBhRGFtYWdlRGlydHlBcmVhID0gMCk7CgogIG5zcmVzdWx0IFBsYWNlTGluZShuc0Jsb2NrUmVm
bG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgbnNMaW5lTGF5b3V0JiBhTGlu
ZUxheW91dCwKICAgICAgICAgICAgICAgICAgICAgbnNMaW5lQm94KiBhTGluZSwKICAgICAgICAg
ICAgICAgICAgICAgUFJCb29sKiBhS2VlcFJlZmxvd0dvaW5nLAogICAgICAgICAgICAgICAgICAg
ICBQUkJvb2wgYVVwZGF0ZU1heGltdW1XaWR0aCk7CgogIG5zcmVzdWx0IE1hcmtMaW5lRGlydHkg
KG5zTGluZUJveCogYUxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNMaW5lQm94KiBh
UHJldkxpbmUpOwoKCiAgdm9pZCBQb3N0UGxhY2VMaW5lKG5zQmxvY2tSZWZsb3dTdGF0ZSYgYVN0
YXRlLAogICAgICAgICAgICAgICAgICAgICBuc0xpbmVCb3gqIGFMaW5lLAogICAgICAgICAgICAg
ICAgICAgICBjb25zdCBuc1NpemUmIGFNYXhFbGVtZW50U2l6ZSk7CgogIHZvaWQgQ29tcHV0ZUxp
bmVNYXhFbGVtZW50U2l6ZShuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNMaW5lQm94KiBhTGluZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNTaXplKiBhTWF4RWxlbWVudFNpemUpOwoKCiAgUFJCb29sIFNob3Vs
ZEp1c3RpZnlMaW5lKG5zQmxvY2tSZWZsb3dTdGF0ZSYgYVN0YXRlLCBuc0xpbmVCb3gqIGFMaW5l
KTsKCiAgdm9pZCBEZWxldGVMaW5lKG5zQmxvY2tSZWZsb3dTdGF0ZSYgYVN0YXRlLCBuc0xpbmVC
b3gqIGFMaW5lKTsKCgoKCiAgUFJCb29sIFNob3VsZEFwcGx5VG9wTWFyZ2luKG5zQmxvY2tSZWZs
b3dTdGF0ZSYgYVN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0xpbmVCb3gq
IGFMaW5lKTsKCiAgbnNyZXN1bHQgUmVmbG93QmxvY2tGcmFtZShuc0Jsb2NrUmVmbG93U3RhdGUm
IGFTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zTGluZUJveCogYUxpbmUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wqIGFLZWVwR29pbmcpOwoKICBuc3Jlc3Vs
dCBSZWZsb3dJbmxpbmVGcmFtZXMobnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zTGluZUJveCogYUxpbmUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBSQm9vbCogYUtlZXBMaW5lR29pbmcsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBSQm9vbCBhRGFtYWdlRGlydHlBcmVhLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQUkJvb2wgYVVwZGF0ZU1heGltdW1XaWR0aCA9IDApOwoKICBuc3Jlc3VsdCBEb1Jl
Zmxvd0lubGluZUZyYW1lcyhuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0xpbmVMYXlvdXQmIGFMaW5lTGF5b3V0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zTGluZUJveCogYUxpbmUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUFJCb29sKiBhS2VlcFJlZmxvd0dvaW5nLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBSVWludDgqIGFMaW5lUmVmbG93U3RhdHVzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhVXBkYXRlTWF4aW11bVdpZHRoLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhRGFtYWdlRGlydHlBcmVhKTsKCiAgbnNyZXN1
bHQgRG9SZWZsb3dJbmxpbmVGcmFtZXNBdXRvKG5zQmxvY2tSZWZsb3dTdGF0ZSYgYVN0YXRlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0xpbmVCb3gqIGFMaW5lLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wqIGFLZWVwUmVmbG93R29pbmcs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDgqIGFMaW5lUmVmbG93
U3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVVwZGF0
ZU1heGltdW1XaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29s
IGFEYW1hZ2VEaXJ0eUFyZWEpOwoKICBuc3Jlc3VsdCBEb1JlZmxvd0lubGluZUZyYW1lc01hbGxv
Yyhuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0xpbmVCb3gqIGFMaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBSQm9vbCogYUtlZXBSZWZsb3dHb2luZywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUlVpbnQ4KiBhTGluZVJlZmxvd1N0YXR1cywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVVwZGF0ZU1heGltdW1XaWR0aCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYURhbWFnZURpcnR5QXJl
YSk7CgogIG5zcmVzdWx0IFJlZmxvd0lubGluZUZyYW1lKG5zQmxvY2tSZWZsb3dTdGF0ZSYgYVN0
YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zTGluZUxheW91dCYgYUxpbmVMYXlv
dXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNMaW5lQm94KiBhTGluZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBSVWludDgqIGFMaW5lUmVmbG93U3RhdHVzKTsKCiAgbnNyZXN1bHQgUmVm
bG93RmxvYXRlcihuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zUGxhY2Vob2xkZXJGcmFtZSogYVBsYWNlaG9sZGVyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgbnNSZWN0JiBhQ29tYmluZWRSZWN0UmVzdWx0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgbnNNYXJnaW4mIGFNYXJnaW5SZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBu
c01hcmdpbiYgYUNvbXB1dGVkT2Zmc2V0c1Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAg
IG5zY29vcmQmIGFNYXhFbGVtZW50V2lkdGhSZXN1bHQpOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0
IENyZWF0ZUNvbnRpbnVhdGlvbkZvcihuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0xpbmVCb3gqIGFMaW5lLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sJiBhTWFkZU5ld0Zy
YW1lKTsKCiAgbnNyZXN1bHQgU3BsaXRMaW5lKG5zQmxvY2tSZWZsb3dTdGF0ZSYgYVN0YXRlLAog
ICAgICAgICAgICAgICAgICAgICBuc0xpbmVMYXlvdXQmIGFMaW5lTGF5b3V0LAogICAgICAgICAg
ICAgICAgICAgICBuc0xpbmVCb3gqIGFMaW5lLAogICAgICAgICAgICAgICAgICAgICBuc0lGcmFt
ZSogYUZyYW1lKTsKCiAgbnNCbG9ja0ZyYW1lKiBGaW5kRm9sbG93aW5nQmxvY2tGcmFtZShuc0lG
cmFtZSogYUZyYW1lKTsKCiAgbnNyZXN1bHQgUHVsbEZyYW1lKG5zQmxvY2tSZWZsb3dTdGF0ZSYg
YVN0YXRlLAogICAgICAgICAgICAgICAgICAgICBuc0xpbmVCb3gqIGFMaW5lLAogICAgICAgICAg
ICAgICAgICAgICBQUkJvb2wgYURhbWFnZURlbGV0ZWRMaW5lLAogICAgICAgICAgICAgICAgICAg
ICBuc0lGcmFtZSomIGFGcmFtZVJlc3VsdCk7CgogIG5zcmVzdWx0IFB1bGxGcmFtZShuc0Jsb2Nr
UmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgbnNMaW5lQm94KiBhVG9M
aW5lLAogICAgICAgICAgICAgICAgICAgICBuc0xpbmVCb3gqKiBhRnJvbUxpc3QsCiAgICAgICAg
ICAgICAgICAgICAgIFBSQm9vbCBhVXBkYXRlR2VvbWV0cmljUGFyZW50LAogICAgICAgICAgICAg
ICAgICAgICBQUkJvb2wgYURhbWFnZURlbGV0ZWRMaW5lcywKICAgICAgICAgICAgICAgICAgICAg
bnNJRnJhbWUqJiBhRnJhbWVSZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCYgYVN0
b3BQdWxsaW5nKTsKCiAgdm9pZCBQdXNoTGluZXMobnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUp
OwoKCgogIHZpcnR1YWwgdm9pZCBQYWludENoaWxkcmVuKG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCYg
YVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNS
ZWN0JiBhRGlydHlSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRnJhbWVQYWlu
dExheWVyIGFXaGljaExheWVyKTsKCiAgdm9pZCBQYWludEZsb2F0ZXJzKG5zSVByZXNDb250ZXh0
KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQm
IGFSZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3QmIGFE
aXJ0eVJlY3QpOwoKICB2b2lkIFByb3BhZ2F0ZVJlZmxvd0RhbWFnZShuc0Jsb2NrUmVmbG93U3Rh
dGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0xpbmVCb3gqIGFMaW5l
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYU9sZENvbWJpbmVk
QXJlYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFEZWx0YVkpOwoKICB2
b2lkIEJ1aWxkRmxvYXRlckxpc3QoKTsKCgoKCiAgdm9pZCBSZW51bWJlckxpc3RzKG5zSVByZXND
b250ZXh0KiBhUHJlc0NvbnRleHQpOwoKICBQUkJvb2wgUmVudW1iZXJMaXN0c0luKG5zSVByZXND
b250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSog
YUNvbnRhaW5lckZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiogYU9yZGlu
YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFEZXB0aCk7CgogIFBSQm9vbCBS
ZW51bWJlckxpc3RzSW5CbG9jayhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0Jsb2NrRnJhbWUqIGFDb250YWluZXJGcmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiogYU9yZGluYWwsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYURlcHRoKTsKCiAgUFJCb29sIFJlbnVtYmVyTGlz
dHNGb3IobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNJRnJhbWUqIGFLaWQsIFBSSW50
MzIqIGFPcmRpbmFsLCBQUkludDMyIGFEZXB0aCk7CgogIFBSQm9vbCBGcmFtZVN0YXJ0c0NvdW50
ZXJTY29wZShuc0lGcmFtZSogYUZyYW1lKTsKCiAgbnNyZXN1bHQgVXBkYXRlQnVsbGV0UG9zaXRp
b24obnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUpOwoKICB2b2lkIFJlZmxvd0J1bGxldChuc0Js
b2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAgICAgICBuc0hUTUxSZWZsb3dN
ZXRyaWNzJiBhTWV0cmljcyk7CgoKCiAgbnNMaW5lQm94KiBHZXRPdmVyZmxvd0xpbmVzKG5zSVBy
ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
Qm9vbCBhUmVtb3ZlUHJvcGVydHkpIGNvbnN0OwoKICBuc3Jlc3VsdCBTZXRPdmVyZmxvd0xpbmVz
KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0xpbmVCb3gqIGFPdmVyZmxvd0ZyYW1lcyk7CgogIG5zSUZyYW1lKiBMYXN0Q2hpbGQoKTsK
IyA0NDkgIi4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvYmFzZS9zcmMvbnNCbG9j
a0ZyYW1lLmgiCiAgbnNjb29yZCBtQXNjZW50OwoKICBuc0xpbmVCb3gqIG1MaW5lczsKCgogIG5z
RnJhbWVMaXN0IG1GbG9hdGVyczsKCgoKICBuc0J1bGxldEZyYW1lKiBtQnVsbGV0OwoKICBmcmll
bmQgY2xhc3MgbnNCbG9ja1JlZmxvd1N0YXRlOwoKcHJpdmF0ZToKICBuc0Fic29sdXRlQ29udGFp
bmluZ0Jsb2NrIG1BYnNvbHV0ZUNvbnRhaW5lcjsKIyA0ODQgIi4uLy4uLy4uLy4uLy4uL21vemls
bGEvbGF5b3V0L2h0bWwvYmFzZS9zcmMvbnNCbG9ja0ZyYW1lLmgiCn07CiMgMjcgIi4uLy4uLy4u
Ly4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvZm9ybXMvc3JjL25zRm9ybUZyYW1lLmgiIDIKIyAx
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNWb2lkQXJyYXkuaCIgMQojIDI4ICIuLi8uLi8u
Li8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Zvcm1zL3NyYy9uc0Zvcm1GcmFtZS5oIiAyCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGVTcGVjLmgiIDEKIyAxNyAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGVTcGVjLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zRmlsZVNwZWMuaCIgMQojIDEzMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
RmlsZVNwZWMuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAx
MzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiIDIKIyAxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNFcnJvci5oIiAxCiMgMTMzICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNGaWxlU3BlYy5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3Ry
aW5nLmgiIDEKIyAxMzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiIDIK
IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIgMQojIDEzNSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIgMgojIDEgIi9ob21lL2thaS9tLzA5Mi9tb3pp
bGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAxMzYgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiIDIKIyAxNjAgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUxvY2FsRmlsZS5oIiAxCiMgMTAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lMb2NhbEZp
bGUuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIiAxCiMgMTcgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGaWxlLmgiCmNsYXNzIG5zSVNpbXBsZUVudW1lcmF0
b3I7CiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGaWxlLmgiCmNsYXNzIG5zSUZp
bGUgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQm
IEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YzhjMGEwODAsIDB4MDg2OCwg
MHgxMWQzLCB7IDB4OTEsIDB4NWYsIDB4ZDksIDB4ZDgsIDB4ODksIDB4ZDQsIDB4OGUsIDB4M2Mg
fX07IHJldHVybiBpaWQ7fQoKCgoKCgoKICBlbnVtIHsgTk9STUFMX0ZJTEVfVFlQRSA9IDBVIH07
CgogIGVudW0geyBESVJFQ1RPUllfVFlQRSA9IDFVIH07CiMgNTMgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBcHBlbmQoY29uc3QgY2hhciAq
bm9kZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBcHBlbmRVbmljb2RlKGNvbnN0IFBSVW5p
Y2hhciAqbm9kZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBOb3JtYWxpemUodm9pZCkg
PSAwOwojIDg1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgQ3JlYXRlKFBSVWludDMyIHR5cGUsIFBSVWludDMyIHBlcm1pc3Npb25zKSA9IDA7
CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExlYWZOYW1lKGNoYXIgKiAqYUxlYWZOYW1lKSA9
IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMZWFmTmFtZShjb25zdCBjaGFyICogYUxlYWZOYW1l
KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFVuaWNvZGVMZWFmTmFtZShQUlVuaWNoYXIg
KiAqYVVuaWNvZGVMZWFmTmFtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VW5pY29kZUxl
YWZOYW1lKGNvbnN0IFBSVW5pY2hhciAqIGFVbmljb2RlTGVhZk5hbWUpID0gMDsKIyAxMjIgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDb3B5
VG8obnNJRmlsZSAqbmV3UGFyZW50RGlyLCBjb25zdCBjaGFyICpuZXdOYW1lKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IENvcHlUb1VuaWNvZGUobnNJRmlsZSAqbmV3UGFyZW50RGlyLCBjb25z
dCBQUlVuaWNoYXIgKm5ld05hbWUpID0gMDsKIyAxMzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDb3B5VG9Gb2xsb3dpbmdMaW5rcyhuc0lG
aWxlICpuZXdQYXJlbnREaXIsIGNvbnN0IGNoYXIgKm5ld05hbWUpID0gMDsKCgogIHZpcnR1YWwg
bnNyZXN1bHQgQ29weVRvRm9sbG93aW5nTGlua3NVbmljb2RlKG5zSUZpbGUgKm5ld1BhcmVudERp
ciwgY29uc3QgUFJVbmljaGFyICpuZXdOYW1lKSA9IDA7CiMgMTY3ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgTW92ZVRvKG5zSUZpbGUgKm5l
d1BhcmVudERpciwgY29uc3QgY2hhciAqbmV3TmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBNb3ZlVG9Vbmljb2RlKG5zSUZpbGUgKm5ld1BhcmVudERpciwgY29uc3QgUFJVbmljaGFyICpu
ZXdOYW1lKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3Bhd24oY29uc3QgY2hhciAq
KmFyZ3MsIFBSVWludDMyIGNvdW50KSA9IDA7CiMgMTg3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRGVsZXRlKFBSQm9vbCByZWN1cnNpdmUp
ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGVybWlzc2lvbnMoUFJVaW50MzIgKmFQ
ZXJtaXNzaW9ucykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGVybWlzc2lvbnMoUFJVaW50
MzIgYVBlcm1pc3Npb25zKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBlcm1pc3Npb25z
T2ZMaW5rKFBSVWludDMyICphUGVybWlzc2lvbnNPZkxpbmspID0gMDsKICB2aXJ0dWFsIG5zcmVz
dWx0IFNldFBlcm1pc3Npb25zT2ZMaW5rKFBSVWludDMyIGFQZXJtaXNzaW9uc09mTGluaykgPSAw
OwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExhc3RNb2RpZmljYXRpb25EYXRlKFBSSW50
NjQgKmFMYXN0TW9kaWZpY2F0aW9uRGF0ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TGFz
dE1vZGlmaWNhdGlvbkRhdGUoUFJJbnQ2NCBhTGFzdE1vZGlmaWNhdGlvbkRhdGUpID0gMDsKCgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFzdE1vZGlmaWNhdGlvbkRhdGVPZkxpbmsoUFJJbnQ2NCAq
YUxhc3RNb2RpZmljYXRpb25EYXRlT2ZMaW5rKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRM
YXN0TW9kaWZpY2F0aW9uRGF0ZU9mTGluayhQUkludDY0IGFMYXN0TW9kaWZpY2F0aW9uRGF0ZU9m
TGluaykgPSAwOwojIDIyMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGUuaCIKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldEZpbGVTaXplKFBSSW50NjQgKmFGaWxlU2l6ZSkgPSAwOwogIHZp
cnR1YWwgbnNyZXN1bHQgU2V0RmlsZVNpemUoUFJJbnQ2NCBhRmlsZVNpemUpID0gMDsKCgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0RmlsZVNpemVPZkxpbmsoUFJJbnQ2NCAqYUZpbGVTaXplT2ZMaW5r
KSA9IDA7CiMgMjQ4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0VGFyZ2V0KGNoYXIgKiAqYVRhcmdldCkgPSAwOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRVbmljb2RlVGFyZ2V0KFBSVW5pY2hhciAqICphVW5pY29kZVRhcmdldCkgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXRoKGNoYXIgKiAqYVBhdGgpID0gMDsKCgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0VW5pY29kZVBhdGgoUFJVbmljaGFyICogKmFVbmljb2RlUGF0aCkg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFeGlzdHMoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IElzV3JpdGFibGUoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IElzUmVhZGFibGUoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IElzRXhlY3V0YWJsZShQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgSXNIaWRkZW4oUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IElzRGlyZWN0b3J5KFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBJc0ZpbGUoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElz
U3ltbGluayhQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNT
cGVjaWFsKFBSQm9vbCAqX3JldHZhbCkgPSAwOwojIDMxNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSUZpbGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZVVuaXF1ZShjb25zdCBjaGFy
ICpzdWdnZXN0ZWROYW1lLCBQUlVpbnQzMiB0eXBlLCBQUlVpbnQzMiBwZXJtaXNzaW9ucykgPSAw
OwojIDMyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGUuaCIKICB2aXJ0dWFsIG5z
cmVzdWx0IENsb25lKG5zSUZpbGUgKipfcmV0dmFsKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVz
dWx0IEVxdWFscyhuc0lGaWxlICppbkZpbGUsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCgoKCgog
IHZpcnR1YWwgbnNyZXN1bHQgQ29udGFpbnMobnNJRmlsZSAqaW5GaWxlLCBQUkJvb2wgcmVjdXIs
IFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnQo
bnNJRmlsZSAqICphUGFyZW50KSA9IDA7CiMgMzU4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlyZWN0b3J5RW50cmllcyhuc0lTaW1w
bGVFbnVtZXJhdG9yICogKmFEaXJlY3RvcnlFbnRyaWVzKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRVUkwoY2hhciAqICphVVJMKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRV
UkwoY29uc3QgY2hhciAqIGFVUkwpID0gMDsKCn07CiMgODMxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJRmlsZS5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNl
TWFuYWdlci5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFu
YWdlci5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2Vy
LmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlcnZpY2VNYW5hZ2VyLmgi
IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRC5oIiAxCiMgMjkgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIiAyCgoKCgoKY2xhc3MgbnNJU2h1
dGRvd25MaXN0ZW5lcjsKY2xhc3MgbnNJRGlyZWN0b3J5U2VydmljZVByb3ZpZGVyOwojIDg3ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VydmljZU1hbmFnZXIuaCIKY2xhc3MgbnNJU2Vy
dmljZU1hbmFnZXIgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6CgogICAgc3RhdGljIGNv
bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHhjZjBkZjNi
MCwgMHgzNDAxLCAweDExZDIsIHsweDgxLCAweDYzLCAweDAwLCAweDYwLCAweDA4LCAweDExLCAw
eDlkLCAweDdhfSB9OyByZXR1cm4gaWlkO307CgoKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdAog
ICAgUmVnaXN0ZXJTZXJ2aWNlKGNvbnN0IG5zQ0lEJiBhQ2xhc3MsIG5zSVN1cHBvcnRzKiBhU2Vy
dmljZSkgPSAwOwojIDExMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlcnZpY2VNYW5h
Z2VyLmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBVbnJlZ2lzdGVyU2VydmljZShjb25zdCBu
c0NJRCYgYUNsYXNzKSA9IDA7CgogICAgdmlydHVhbCBuc3Jlc3VsdAogICAgR2V0U2VydmljZShj
b25zdCBuc0NJRCYgYUNsYXNzLCBjb25zdCBuc0lJRCYgYUlJRCwKICAgICAgICAgICAgICAgbnNJ
U3VwcG9ydHMqICpyZXN1bHQsCiAgICAgICAgICAgICAgIG5zSVNodXRkb3duTGlzdGVuZXIqIHNo
dXRkb3duTGlzdGVuZXIgPSAwKSA9IDA7CgoKICAgIHZpcnR1YWwgbnNyZXN1bHQKICAgIFJlbGVh
c2VTZXJ2aWNlKGNvbnN0IG5zQ0lEJiBhQ2xhc3MsIG5zSVN1cHBvcnRzKiBzZXJ2aWNlLAogICAg
ICAgICAgICAgICAgICAgbnNJU2h1dGRvd25MaXN0ZW5lciogc2h1dGRvd25MaXN0ZW5lciA9IDAp
ID0gMDsKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBSZWdpc3RlclNlcnZpY2UoY29uc3Qg
Y2hhciogYUNvbnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZSkgPSAwOwoKICAgIHZpcnR1
YWwgbnNyZXN1bHQKICAgIFVucmVnaXN0ZXJTZXJ2aWNlKGNvbnN0IGNoYXIqIGFDb250cmFjdElE
KSA9IDA7CgogICAgdmlydHVhbCBuc3Jlc3VsdAogICAgR2V0U2VydmljZShjb25zdCBjaGFyKiBh
Q29udHJhY3RJRCwgY29uc3QgbnNJSUQmIGFJSUQsCiAgICAgICAgICAgICAgIG5zSVN1cHBvcnRz
KiAqcmVzdWx0LAogICAgICAgICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxp
c3RlbmVyID0gMCkgPSAwOwoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBSZWxlYXNlU2Vydmlj
ZShjb25zdCBjaGFyKiBhQ29udHJhY3RJRCwgbnNJU3VwcG9ydHMqIHNlcnZpY2UsCiAgICAgICAg
ICAgICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyID0gMCkgPSAw
OwoKfTsKIyAxNTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5o
IgpjbGFzcyBuc0lTaHV0ZG93bkxpc3RlbmVyIDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGlj
OgoKICAgIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBp
aWQgPSB7IDB4NTZkZWNhZTAsIDB4MzQwNiwgMHgxMWQyLCB7MHg4MSwgMHg2MywgMHgwMCwgMHg2
MCwgMHgwOCwgMHgxMSwgMHg5ZCwgMHg3YX0gfTsgcmV0dXJuIGlpZDt9OwoKICAgIHZpcnR1YWwg
bnNyZXN1bHQKICAgIE9uU2h1dGRvd24oY29uc3QgbnNDSUQmIGFDbGFzcywgbnNJU3VwcG9ydHMq
IHNlcnZpY2UpID0gMDsKCn07CgoKCgpjbGFzcyBuc1NlcnZpY2VNYW5hZ2VyIHsKcHVibGljOgoK
ICAgIHN0YXRpYyBuc3Jlc3VsdAogICAgUmVnaXN0ZXJTZXJ2aWNlKGNvbnN0IG5zQ0lEJiBhQ2xh
c3MsIG5zSVN1cHBvcnRzKiBhU2VydmljZSk7CgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBVbnJl
Z2lzdGVyU2VydmljZShjb25zdCBuc0NJRCYgYUNsYXNzKTsKCiAgICBzdGF0aWMgbnNyZXN1bHQK
ICAgIEdldFNlcnZpY2UoY29uc3QgbnNDSUQmIGFDbGFzcywgY29uc3QgbnNJSUQmIGFJSUQsCiAg
ICAgICAgICAgICAgIG5zSVN1cHBvcnRzKiAqcmVzdWx0LAogICAgICAgICAgICAgICBuc0lTaHV0
ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyID0gMCk7CgoKICAgIHN0YXRpYyBuc3Jlc3Vs
dAogICAgUmVsZWFzZVNlcnZpY2UoY29uc3QgbnNDSUQmIGFDbGFzcywgbnNJU3VwcG9ydHMqIHNl
cnZpY2UsCiAgICAgICAgICAgICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxp
c3RlbmVyID0gMCk7CgoKCgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBSZWdpc3RlclNlcnZpY2Uo
Y29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZSk7CgogICAgc3Rh
dGljIG5zcmVzdWx0CiAgICBVbnJlZ2lzdGVyU2VydmljZShjb25zdCBjaGFyKiBhQ29udHJhY3RJ
RCk7CgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBHZXRTZXJ2aWNlKGNvbnN0IGNoYXIqIGFDb250
cmFjdElELCBjb25zdCBuc0lJRCYgYUlJRCwKICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqICpy
ZXN1bHQsCiAgICAgICAgICAgICAgIG5zSVNodXRkb3duTGlzdGVuZXIqIHNodXRkb3duTGlzdGVu
ZXIgPSAwKTsKCgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBSZWxlYXNlU2VydmljZShjb25zdCBj
aGFyKiBhQ29udHJhY3RJRCwgbnNJU3VwcG9ydHMqIHNlcnZpY2UsCiAgICAgICAgICAgICAgICAg
ICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyID0gMCk7CgoKCiAgICBzdGF0
aWMgbnNyZXN1bHQgR2V0R2xvYmFsU2VydmljZU1hbmFnZXIobnNJU2VydmljZU1hbmFnZXIqICpy
ZXN1bHQpOwoKCgogICAgc3RhdGljIG5zcmVzdWx0IFNodXRkb3duR2xvYmFsU2VydmljZU1hbmFn
ZXIobnNJU2VydmljZU1hbmFnZXIqICpyZXN1bHQpOwp9OwoKCgoKY2xhc3MgbnNHZXRTZXJ2aWNl
QnlDSUQgOiBwdWJsaWMgbnNDT01QdHJfaGVscGVyCiAgewogICAgcHVibGljOgogICAgICBuc0dl
dFNlcnZpY2VCeUNJRCggY29uc3QgbnNDSUQmIGFDSUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZU1h
bmFnZXIsIG5zcmVzdWx0KiBhRXJyb3JQdHIgKQogICAgICAgICAgOiBtQ0lEKGFDSUQpLAogICAg
ICAgICAgICBtU2VydmljZU1hbmFnZXIoIGRvX1F1ZXJ5SW50ZXJmYWNlKGFTZXJ2aWNlTWFuYWdl
cikgKSwKICAgICAgICAgICAgbUVycm9yUHRyKGFFcnJvclB0cikKICAgICAgICB7CgogICAgICAg
IH0KCiAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IG9wZXJhdG9yKCkoIGNvbnN0IG5zSUlEJiwg
dm9pZCoqICkgY29uc3Q7CiAgICAgICAgdmlydHVhbCB+bnNHZXRTZXJ2aWNlQnlDSUQoKSB7fTsK
CiAgICBwcml2YXRlOgogICAgICBjb25zdCBuc0NJRCYgbUNJRDsKICAgICAgbnNDT01QdHI8bnNJ
U2VydmljZU1hbmFnZXI+IG1TZXJ2aWNlTWFuYWdlcjsKICAgICAgbnNyZXN1bHQqIG1FcnJvclB0
cjsKICB9OwoKaW5saW5lCmNvbnN0IG5zR2V0U2VydmljZUJ5Q0lECmRvX0dldFNlcnZpY2UoIGNv
bnN0IG5zQ0lEJiBhQ0lELCBuc3Jlc3VsdCogZXJyb3IgPSAwICkKICB7CiAgICByZXR1cm4gbnNH
ZXRTZXJ2aWNlQnlDSUQoYUNJRCwgMCwgZXJyb3IpOwogIH0KCmlubGluZQpjb25zdCBuc0dldFNl
cnZpY2VCeUNJRApkb19HZXRTZXJ2aWNlKCBjb25zdCBuc0NJRCYgYUNJRCwgbnNJU3VwcG9ydHMq
IGFTZXJ2aWNlTWFuYWdlciwgbnNyZXN1bHQqIGVycm9yID0gMCApCiAgewogICAgcmV0dXJuIG5z
R2V0U2VydmljZUJ5Q0lEKGFDSUQsIGFTZXJ2aWNlTWFuYWdlciwgZXJyb3IpOwogIH0KCmNsYXNz
IG5zR2V0U2VydmljZUJ5Q29udHJhY3RJRCA6IHB1YmxpYyBuc0NPTVB0cl9oZWxwZXIKICB7CiAg
ICBwdWJsaWM6CiAgICAgIG5zR2V0U2VydmljZUJ5Q29udHJhY3RJRCggY29uc3QgY2hhciogYUNv
bnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZU1hbmFnZXIsIG5zcmVzdWx0KiBhRXJyb3JQ
dHIgKQogICAgICAgICAgOiBtQ29udHJhY3RJRChhQ29udHJhY3RJRCksCiAgICAgICAgICAgIG1T
ZXJ2aWNlTWFuYWdlciggZG9fUXVlcnlJbnRlcmZhY2UoYVNlcnZpY2VNYW5hZ2VyKSApLAogICAg
ICAgICAgICBtRXJyb3JQdHIoYUVycm9yUHRyKQogICAgICAgIHsKCiAgICAgICAgfQoKICAgICAg
ICAgIHZpcnR1YWwgbnNyZXN1bHQgb3BlcmF0b3IoKSggY29uc3QgbnNJSUQmLCB2b2lkKiogKSBj
b25zdDsKCiAgICAgICAgdmlydHVhbCB+bnNHZXRTZXJ2aWNlQnlDb250cmFjdElEKCkge307Cgog
ICAgcHJpdmF0ZToKICAgICAgY29uc3QgY2hhciogbUNvbnRyYWN0SUQ7CiAgICAgIG5zQ09NUHRy
PG5zSVNlcnZpY2VNYW5hZ2VyPiBtU2VydmljZU1hbmFnZXI7CiAgICAgIG5zcmVzdWx0KiBtRXJy
b3JQdHI7CiAgfTsKCmlubGluZQpjb25zdCBuc0dldFNlcnZpY2VCeUNvbnRyYWN0SUQKZG9fR2V0
U2VydmljZSggY29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zcmVzdWx0KiBlcnJvciA9IDAgKQog
IHsKICAgIHJldHVybiBuc0dldFNlcnZpY2VCeUNvbnRyYWN0SUQoYUNvbnRyYWN0SUQsIDAsIGVy
cm9yKTsKICB9CgppbmxpbmUKY29uc3QgbnNHZXRTZXJ2aWNlQnlDb250cmFjdElECmRvX0dldFNl
cnZpY2UoIGNvbnN0IGNoYXIqIGFDb250cmFjdElELCBuc0lTdXBwb3J0cyogYVNlcnZpY2VNYW5h
Z2VyLCBuc3Jlc3VsdCogZXJyb3IgPSAwICkKICB7CiAgICByZXR1cm4gbnNHZXRTZXJ2aWNlQnlD
b250cmFjdElEKGFDb250cmFjdElELCBhU2VydmljZU1hbmFnZXIsIGVycm9yKTsKICB9CgpjbGFz
cyBuc0dldFNlcnZpY2VGcm9tQ2F0ZWdvcnkgOiBwdWJsaWMgbnNDT01QdHJfaGVscGVyCnsKcHVi
bGljOgogIG5zR2V0U2VydmljZUZyb21DYXRlZ29yeShjb25zdCBjaGFyKiBhQ2F0ZWdvcnksIGNv
bnN0IGNoYXIqIGFFbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMq
IGFTZXJ2aWNlTWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNyZXN1bHQqIGFF
cnJvclB0cikKICAgIDogbUNhdGVnb3J5KGFDYXRlZ29yeSksCiAgICAgIG1FbnRyeShhRW50cnkp
LAogICAgICBtU2VydmljZU1hbmFnZXIoIGRvX1F1ZXJ5SW50ZXJmYWNlKGFTZXJ2aWNlTWFuYWdl
cikgKSwKICAgICAgbUVycm9yUHRyKGFFcnJvclB0cikKICB7CgogIH0KCiAgdmlydHVhbCBuc3Jl
c3VsdCBvcGVyYXRvcigpKCBjb25zdCBuc0lJRCYsIHZvaWQqKiApIGNvbnN0OwogIHZpcnR1YWwg
fm5zR2V0U2VydmljZUZyb21DYXRlZ29yeSgpIHt9Owpwcm90ZWN0ZWQ6CiAgY29uc3QgY2hhciog
bUNhdGVnb3J5OwogIGNvbnN0IGNoYXIqIG1FbnRyeTsKICBuc0NPTVB0cjxuc0lTZXJ2aWNlTWFu
YWdlcj4gbVNlcnZpY2VNYW5hZ2VyOwogIG5zcmVzdWx0KiBtRXJyb3JQdHI7Cn07CgppbmxpbmUK
Y29uc3QgbnNHZXRTZXJ2aWNlRnJvbUNhdGVnb3J5CmRvX0dldFNlcnZpY2VGcm9tQ2F0ZWdvcnko
IGNvbnN0IGNoYXIqIGNhdGVnb3J5LCBjb25zdCBjaGFyKiBlbnRyeSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNyZXN1bHQqIGVycm9yID0gMCkKICB7CiAgICByZXR1cm4gbnNHZXRTZXJ2
aWNlRnJvbUNhdGVnb3J5KGNhdGVnb3J5LCBlbnRyeSwgMCwgZXJyb3IpOwogIH0KIyAzNTYgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIgpleHRlcm4gbnNyZXN1
bHQKTlNfTmV3U2VydmljZU1hbmFnZXIobnNJU2VydmljZU1hbmFnZXIqICpyZXN1bHQpOwojIDM2
OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlcnZpY2VNYW5hZ2VyLmgiCmV4dGVybiBu
c3Jlc3VsdApOU19Jbml0WFBDT00obnNJU2VydmljZU1hbmFnZXIqICpyZXN1bHQsIG5zSUZpbGUq
IGJpbkRpcmVjdG9yeSk7CgoKCgpleHRlcm4gbnNyZXN1bHQKTlNfSW5pdFhQQ09NMihuc0lTZXJ2
aWNlTWFuYWdlciogKnJlc3VsdCwgbnNJRmlsZSogYmluRGlyZWN0b3J5LCBuc0lEaXJlY3RvcnlT
ZXJ2aWNlUHJvdmlkZXIqIGFwcEZpbGVMb2NhdGlvblByb3ZpZGVyKTsKIyAzODYgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIgpleHRlcm4gbnNyZXN1bHQKTlNf
U2h1dGRvd25YUENPTShuc0lTZXJ2aWNlTWFuYWdlciogc2Vydk1ncik7CiMgODMyICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVByb3BlcnRpZXMuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
UHJvcGVydGllcy5oIgpjbGFzcyBuc0lQcm9wZXJ0aWVzIDogcHVibGljIG5zSVN1cHBvcnRzIHsK
IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z
SUlEIGlpZCA9IHsweDYxYzFiM2MwLCAweGIxYmYsIDB4MTFkMywgeyAweDkzLCAweGI2LCAweDAw
LCAweDEwLCAweDRiLCAweGEwLCAweGZkLCAweDQwIH19OyByZXR1cm4gaWlkO30KCgoKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBEZWZpbmUoY29uc3QgY2hhciAqcHJvcCwgbnNJU3VwcG9ydHMgKmlu
aXRpYWxWYWx1ZSkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFVuZGVmaW5lKGNvbnN0
IGNoYXIgKnByb3ApID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXQoY29uc3QgY2hh
ciAqcHJvcCwgY29uc3QgbnNJSUQgJiB1dWlkLCB2b2lkICogKnJlc3VsdCkgPSAwOwoKCgoKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldChjb25zdCBjaGFyICpwcm9wLCBuc0lTdXBwb3J0cyAqdmFs
dWUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzKGNvbnN0IGNoYXIgKnByb3AsIFBS
Qm9vbCAqX3JldHZhbCkgPSAwOwoKfTsKIyAxNjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lQcm9wZXJ0aWVzLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVu
dE1hbmFnZXIuaCIgMQojIDE2NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByb3BlcnRp
ZXMuaCIgMgppbmxpbmUgbnNyZXN1bHQKTlNfTmV3SVByb3BlcnRpZXMobnNJU3VwcG9ydHMqIG91
dGVyLCBuc0lQcm9wZXJ0aWVzKiAqcmVzdWx0KQp7CiAgICBzdGF0aWMgY29uc3QgbnNDSUQga1By
b3BlcnRpZXNDSUQgPSB7IDB4NGRlMmJjOTAsIDB4YjFiZiwgMHgxMWQzLCB7MHg5MywgMHhiNiwg
MHgwMCwgMHgxMCwgMHg0YiwgMHhhMCwgMHhmZCwgMHg0MH0gfTsKICAgIHJldHVybiBuc0NvbXBv
bmVudE1hbmFnZXI6OkNyZWF0ZUluc3RhbmNlKGtQcm9wZXJ0aWVzQ0lELAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NPTVR5cGVJbmZvPG5zSVByb3BlcnRpZXM+
OjpHZXRJSUQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICh2b2lkKiopcmVzdWx0KTsKfQojIDgzMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZp
bGUuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIiAxCiMgODM0
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIiAyCgppbmxpbmUgbnNyZXN1bHQK
TlNfR2V0U3BlY2lhbERpcmVjdG9yeShjb25zdCBjaGFyKiBzcGVjaWFsRGlyTmFtZSwgbnNJRmls
ZSogKnJlc3VsdCkKewogICAgbnNyZXN1bHQgcnY7CiAgICBzdGF0aWMgY29uc3QgbnNDSUQga0Rp
cmVjdG9yeVNlcnZpY2VDSUQgPSB7MHhmMDAxNTJkMCwweGI0MGIsMHgxMWQzLHsweDhjLCAweDlj
LCAweDAwLCAweDAwLCAweDY0LCAweDY1LCAweDczLCAweDc0fX07CiAgICBuc0NPTVB0cjxuc0lQ
cm9wZXJ0aWVzPiBzZXJ2ID0gZG9fR2V0U2VydmljZShrRGlyZWN0b3J5U2VydmljZUNJRCwgJnJ2
KTs7CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwogICAgbnNDT01QdHI8
bnNJU3VwcG9ydHM+IGRpcjsKICAgIHJ2ID0gc2Vydi0+R2V0KHNwZWNpYWxEaXJOYW1lLCBuc0NP
TVR5cGVJbmZvPG5zSUZpbGU+OjpHZXRJSUQoKSwgZ2V0dGVyX0FkZFJlZnMoZGlyKSk7CiAgICBp
ZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwogICAgKnJlc3VsdCA9IChuc0lGaWxl
KilkaXIuZ2V0KCk7CiAgICBpZiAoKnJlc3VsdCkKICAgICAgICAoKnJlc3VsdCktPkFkZFJlZigp
OwogICAgcmV0dXJuIDA7Cn0KIyAxMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxvY2Fs
RmlsZS5oIiAyCgoKCgoKCiMgMSAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rp
c3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIgMQojIDI5ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1v
cHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgojIDEgIi9ob21lL2thaS9tLzA5Mi9t
b3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcmxvbmcuaCIgMQojIDMwICIvaG9t
ZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIiAy
CiMgMSAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3By
L3BydGltZS5oIiAxCiMgMzEgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0
L2luY2x1ZGUvbnNwci9wcmlvLmgiIDIKIyAxICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRp
bWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJpbnJ2YWwuaCIgMQojIDMyICIvaG9tZS9rYWkvbS8w
OTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIiAyCiMgMSAiL2hv
bWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ldC5o
IiAxCiMgNDggIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUv
bnNwci9wcmluZXQuaCIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDQ5ICIv
aG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJpbmV0
LmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNs
dWRlL3N5cy9zb2NrZXQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAy
NCAiL3Vzci9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMiAzCgpleHRlcm4gIkMiIHsKCiMgMSAiL3Vz
ci9pbmNsdWRlL3N5cy91aW8uaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9zeXMvdWlvLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9zeXMv
dWlvLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI1ICIvdXNy
L2luY2x1ZGUvc3lzL3Vpby5oIiAyIDMKCmV4dGVybiAiQyIgewoKCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvdWlvLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy91aW8uaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL3Vpby5o
IiAyIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2JpdHMvdWlvLmgiIDMKc3RydWN0IGlvdmVjCiAgewog
ICAgdm9pZCAqaW92X2Jhc2U7CiAgICBzaXplX3QgaW92X2xlbjsKICB9OwojIDMwICIvdXNyL2lu
Y2x1ZGUvc3lzL3Vpby5oIiAyIDMKCgoKCgoKCmV4dGVybiBzc2l6ZV90IHJlYWR2IChpbnQgX19m
ZCwgX19jb25zdCBzdHJ1Y3QgaW92ZWMgKl9fdmVjdG9yLCBpbnQgX19jb3VudCkKICAgICB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIHNzaXplX3Qgd3JpdGV2IChpbnQgX19mZCwgX19jb25zdCBzdHJ1
Y3QgaW92ZWMgKl9fdmVjdG9yLCBpbnQgX19jb3VudCkKICAgICB0aHJvdyAoKTsKCn0KIyAyOCAi
L3Vzci9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg
MzAgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDIgMwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvc29ja2V0LmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMwoj
IDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv
aW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAy
IDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuMC9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0
LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMzMgIi91c3IvaW5j
bHVkZS9iaXRzL3NvY2tldC5oIiAyIDMKCgoKdHlwZWRlZiBfX3NvY2tsZW5fdCBzb2NrbGVuX3Q7
CgoKCgplbnVtIF9fc29ja2V0X3R5cGUKewogIFNPQ0tfU1RSRUFNID0gMSwKCgogIFNPQ0tfREdS
QU0gPSAyLAoKCiAgU09DS19SQVcgPSAzLAoKICBTT0NLX1JETSA9IDQsCgogIFNPQ0tfU0VRUEFD
S0VUID0gNSwKCgogIFNPQ0tfUEFDS0VUID0gMTAKCgoKfTsKIyAxMzggIi91c3IvaW5jbHVkZS9i
aXRzL3NvY2tldC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2FkZHIuaCIgMSAzCiMg
MjkgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2thZGRyLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBzaG9y
dCBpbnQgc2FfZmFtaWx5X3Q7CiMgMTM5ICIvdXNyL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMiAz
CgoKc3RydWN0IHNvY2thZGRyCiAgewogICAgc2FfZmFtaWx5X3Qgc2FfZmFtaWx5OwogICAgY2hh
ciBzYV9kYXRhWzE0XTsKICB9OwojIDE1OCAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0LmgiIDMK
c3RydWN0IHNvY2thZGRyX3N0b3JhZ2UKICB7CiAgICBzYV9mYW1pbHlfdCBzc19mYW1pbHk7CiAg
ICBfX3VpbnQzMl90IF9fc3NfYWxpZ247CiAgICBjaGFyIF9fc3NfcGFkZGluZ1soMTI4IC0gKDIg
KiBzaXplb2YgKF9fdWludDMyX3QpKSldOwogIH07CgoKCmVudW0KICB7CiAgICBNU0dfT09CID0g
MHgwMSwKCiAgICBNU0dfUEVFSyA9IDB4MDIsCgogICAgTVNHX0RPTlRST1VURSA9IDB4MDQsCgoK
CiAgICBNU0dfVFJZSEFSRCA9IE1TR19ET05UUk9VVEUsCgoKICAgIE1TR19DVFJVTkMgPSAweDA4
LAoKICAgIE1TR19QUk9YWSA9IDB4MTAsCgogICAgTVNHX1RSVU5DID0gMHgyMCwKCiAgICBNU0df
RE9OVFdBSVQgPSAweDQwLAoKICAgIE1TR19FT1IgPSAweDgwLAoKICAgIE1TR19XQUlUQUxMID0g
MHgxMDAsCgogICAgTVNHX0ZJTiA9IDB4MjAwLAoKICAgIE1TR19TWU4gPSAweDQwMCwKCiAgICBN
U0dfQ09ORklSTSA9IDB4ODAwLAoKICAgIE1TR19SU1QgPSAweDEwMDAsCgogICAgTVNHX0VSUlFV
RVVFID0gMHgyMDAwLAoKICAgIE1TR19OT1NJR05BTCA9IDB4NDAwMAoKICB9OwoKCgoKc3RydWN0
IG1zZ2hkcgogIHsKICAgIHZvaWQgKm1zZ19uYW1lOwogICAgc29ja2xlbl90IG1zZ19uYW1lbGVu
OwoKICAgIHN0cnVjdCBpb3ZlYyAqbXNnX2lvdjsKICAgIGludCBtc2dfaW92bGVuOwoKICAgIHZv
aWQgKm1zZ19jb250cm9sOwogICAgc29ja2xlbl90IG1zZ19jb250cm9sbGVuOwoKICAgIGludCBt
c2dfZmxhZ3M7CiAgfTsKCgpzdHJ1Y3QgY21zZ2hkcgogIHsKICAgIHNpemVfdCBjbXNnX2xlbjsK
CiAgICBpbnQgY21zZ19sZXZlbDsKICAgIGludCBjbXNnX3R5cGU7CiAgICBfX2V4dGVuc2lvbl9f
IHVuc2lnbmVkIGNoYXIgX19jbXNnX2RhdGEgW107CgogIH07CiMgMjUwICIvdXNyL2luY2x1ZGUv
Yml0cy9zb2NrZXQuaCIgMwpleHRlcm4gc3RydWN0IGNtc2doZHIgKl9fY21zZ19ueHRoZHIgKHN0
cnVjdCBtc2doZHIgKl9fbWhkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgY21zZ2hkciAqX19jbXNnKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBfX2lubGluZSBz
dHJ1Y3QgY21zZ2hkciAqCl9fY21zZ19ueHRoZHIgKHN0cnVjdCBtc2doZHIgKl9fbWhkciwgc3Ry
dWN0IGNtc2doZHIgKl9fY21zZykgdGhyb3cgKCkKewogIGlmICgoc2l6ZV90KSBfX2Ntc2ctPmNt
c2dfbGVuIDwgc2l6ZW9mIChzdHJ1Y3QgY21zZ2hkcikpCgogICAgcmV0dXJuIDA7CgogIF9fY21z
ZyA9IChzdHJ1Y3QgY21zZ2hkciAqKSAoKHVuc2lnbmVkIGNoYXIgKikgX19jbXNnCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICArICgoKF9fY21zZy0+Y21zZ19sZW4pICsgc2l6ZW9mIChz
aXplX3QpIC0gMSkgJiAoc2l6ZV90KSB+KHNpemVvZiAoc2l6ZV90KSAtIDEpKSk7CiAgaWYgKCh1
bnNpZ25lZCBjaGFyICopIChfX2Ntc2cgKyAxKSA+PSAoKHVuc2lnbmVkIGNoYXIgKikgX19taGRy
LT5tc2dfY29udHJvbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsg
X19taGRyLT5tc2dfY29udHJvbGxlbikKICAgICAgfHwgKCh1bnNpZ25lZCBjaGFyICopIF9fY21z
ZyArICgoKF9fY21zZy0+Y21zZ19sZW4pICsgc2l6ZW9mIChzaXplX3QpIC0gMSkgJiAoc2l6ZV90
KSB+KHNpemVvZiAoc2l6ZV90KSAtIDEpKQogICAgICAgICAgPiAoKHVuc2lnbmVkIGNoYXIgKikg
X19taGRyLT5tc2dfY29udHJvbCArIF9fbWhkci0+bXNnX2NvbnRyb2xsZW4pKSkKCiAgICByZXR1
cm4gMDsKICByZXR1cm4gX19jbXNnOwp9CgoKCgplbnVtCiAgewogICAgU0NNX1JJR0hUUyA9IDB4
MDEsCgoKICAgIFNDTV9DUkVERU5USUFMUyA9IDB4MDIsCgoKICAgIF9fU0NNX0NPTk5FQ1QgPSAw
eDAzCiAgfTsKCgoKc3RydWN0IHVjcmVkCnsKICBwaWRfdCBwaWQ7CiAgdWlkX3QgdWlkOwogIGdp
ZF90IGdpZDsKfTsKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vc29ja2V0LmgiIDEgMwoKCgojIDEg
Ii91c3IvaW5jbHVkZS9hc20vc29ja2lvcy5oIiAxIDMKIyA1ICIvdXNyL2luY2x1ZGUvYXNtL3Nv
Y2tldC5oIiAyIDMKIyAyOTkgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAyIDMKCgoKc3Ry
dWN0IGxpbmdlcgogIHsKICAgIGludCBsX29ub2ZmOwogICAgaW50IGxfbGluZ2VyOwogIH07CiMg
MzYgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDIgMwoKCgoKc3RydWN0IG9zb2NrYWRkcgog
IHsKICAgIHVuc2lnbmVkIHNob3J0IGludCBzYV9mYW1pbHk7CiAgICB1bnNpZ25lZCBjaGFyIHNh
X2RhdGFbMTRdOwogIH07CgoKCgplbnVtCnsKICBTSFVUX1JEID0gMCwKCiAgU0hVVF9XUiwKCiAg
U0hVVF9SRFdSCgp9OwojIDEwMCAiL3Vzci9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMwpleHRlcm4g
aW50IHNvY2tldCAoaW50IF9fZG9tYWluLCBpbnQgX190eXBlLCBpbnQgX19wcm90b2NvbCkgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzb2NrZXRwYWlyIChpbnQgX19kb21haW4sIGludCBfX3R5
cGUsIGludCBfX3Byb3RvY29sLAogICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Zkc1syXSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiaW5kIChpbnQgX19mZCwgX19jb25zdCBzdHJ1Y3Qgc29j
a2FkZHIgKiBfX2FkZHIsIHNvY2tsZW5fdCBfX2xlbikKICAgICB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IGdldHNvY2tuYW1lIChpbnQgX19mZCwgc3RydWN0IHNvY2thZGRyICpfX3Jlc3RyaWN0IF9f
YWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90ICpfX3Jlc3RyaWN0IF9fbGVu
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGNvbm5lY3QgKGludCBfX2ZkLCBfX2NvbnN0IHN0
cnVjdCBzb2NrYWRkciAqIF9fYWRkciwgc29ja2xlbl90IF9fbGVuKQogICAgIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IGdldHBlZXJuYW1lIChpbnQgX19mZCwgc3RydWN0IHNvY2thZGRyICpfX3Jl
c3RyaWN0IF9fYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90ICpfX3Jlc3Ry
aWN0IF9fbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZW5kIChpbnQgX19mZCwgX19jb25z
dCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwgaW50IF9fZmxhZ3MpCiAgICAgdGhyb3cgKCk7CgoK
CmV4dGVybiBpbnQgcmVjdiAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLCBpbnQg
X19mbGFncykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZW5kdG8gKGludCBfX2ZkLCBf
X2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgaW50IF9f
ZmxhZ3MsIF9fY29uc3Qgc3RydWN0IHNvY2thZGRyICogX19hZGRyLAogICAgICAgICAgICAgICAg
ICAgc29ja2xlbl90IF9fYWRkcl9sZW4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcmVjdmZy
b20gKGludCBfX2ZkLCB2b2lkICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19uLCBpbnQgX19m
bGFncywKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpfX3Jlc3RyaWN0IF9f
YWRkciwgc29ja2xlbl90ICpfX3Jlc3RyaWN0IF9fYWRkcl9sZW4pCiAgICAgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IHNlbmRtc2cgKGludCBfX2ZkLCBfX2NvbnN0IHN0cnVjdCBtc2doZHIgKl9f
bWVzc2FnZSwgaW50IF9fZmxhZ3MpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcmVjdm1z
ZyAoaW50IF9fZmQsIHN0cnVjdCBtc2doZHIgKl9fbWVzc2FnZSwgaW50IF9fZmxhZ3MpCiAgICAg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXRzb2Nrb3B0IChpbnQgX19mZCwgaW50IF9fbGV2
ZWwsIGludCBfX29wdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19yZXN0cmlj
dCBfX29wdHZhbCwKICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKl9fcmVzdHJpY3Qg
X19vcHRsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRzb2Nrb3B0IChpbnQgX19mZCwg
aW50IF9fbGV2ZWwsIGludCBfX29wdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCB2b2lkICpfX29wdHZhbCwgc29ja2xlbl90IF9fb3B0bGVuKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gaW50IGxpc3RlbiAoaW50IF9fZmQsIGludCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4g
aW50IGFjY2VwdCAoaW50IF9fZmQsIHN0cnVjdCBzb2NrYWRkciAqX19yZXN0cmljdCBfX2FkZHIs
CiAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKl9fcmVzdHJpY3QgX19hZGRyX2xlbikKICAg
ICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgc2h1dGRvd24gKGludCBfX2ZkLCBpbnQgX19o
b3cpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGlzZmR0eXBlIChpbnQgX19mZCwgaW50IF9f
ZmR0eXBlKSB0aHJvdyAoKTsKCgp9CiMgNTAgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGlt
aXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcmluZXQuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9uZXRp
bmV0L2luLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5o
IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUv
c3RkaW50LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3Iv
aW5jbHVkZS9zdGRpbnQuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjkgIi91c3Iv
aW5jbHVkZS9zdGRpbnQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAz
CiMgMzAgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
d29yZHNpemUuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMiAzCiMgNTEgIi91
c3IvaW5jbHVkZS9zdGRpbnQuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsKdHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdWludDE2X3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIGludCB1
aW50MzJfdDsKCgoKCgpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGlu
dCB1aW50NjRfdDsKCgoKCgoKdHlwZWRlZiBzaWduZWQgY2hhciBpbnRfbGVhc3Q4X3Q7CnR5cGVk
ZWYgc2hvcnQgaW50IGludF9sZWFzdDE2X3Q7CnR5cGVkZWYgaW50IGludF9sZWFzdDMyX3Q7CgoK
Cl9fZXh0ZW5zaW9uX18KdHlwZWRlZiBsb25nIGxvbmcgaW50IGludF9sZWFzdDY0X3Q7CgoKCnR5
cGVkZWYgdW5zaWduZWQgY2hhciB1aW50X2xlYXN0OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0
IGludCB1aW50X2xlYXN0MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9sZWFzdDMyX3Q7
CgoKCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRfbGVh
c3Q2NF90OwoKCgoKCgp0eXBlZGVmIHNpZ25lZCBjaGFyIGludF9mYXN0OF90OwoKCgoKCnR5cGVk
ZWYgaW50IGludF9mYXN0MTZfdDsKdHlwZWRlZiBpbnQgaW50X2Zhc3QzMl90OwpfX2V4dGVuc2lv
bl9fCnR5cGVkZWYgbG9uZyBsb25nIGludCBpbnRfZmFzdDY0X3Q7CgoKCnR5cGVkZWYgdW5zaWdu
ZWQgY2hhciB1aW50X2Zhc3Q4X3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9mYXN0
MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9mYXN0MzJfdDsKX19leHRlbnNpb25fXwp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWludF9mYXN0NjRfdDsKIyAxMjggIi91c3Iv
aW5jbHVkZS9zdGRpbnQuaCIgMwp0eXBlZGVmIGludCBpbnRwdHJfdDsKCgp0eXBlZGVmIHVuc2ln
bmVkIGludCB1aW50cHRyX3Q7CiMgMTQwICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDMKX19leHRl
bnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50bWF4X3Q7Cl9fZXh0ZW5zaW9uX18KdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRtYXhfdDsKIyAyNCAiL3Vzci9pbmNsdWRl
L25ldGluZXQvaW4uaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMg
MjUgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDIgMwoKCmV4dGVybiAiQyIgewoKCmVudW0K
ICB7CiAgICBJUFBST1RPX0lQID0gMCwKCiAgICBJUFBST1RPX0hPUE9QVFMgPSAwLAoKICAgIElQ
UFJPVE9fSUNNUCA9IDEsCgogICAgSVBQUk9UT19JR01QID0gMiwKCiAgICBJUFBST1RPX0lQSVAg
PSA0LAoKICAgIElQUFJPVE9fVENQID0gNiwKCiAgICBJUFBST1RPX0VHUCA9IDgsCgogICAgSVBQ
Uk9UT19QVVAgPSAxMiwKCiAgICBJUFBST1RPX1VEUCA9IDE3LAoKICAgIElQUFJPVE9fSURQID0g
MjIsCgogICAgSVBQUk9UT19UUCA9IDI5LAoKICAgIElQUFJPVE9fSVBWNiA9IDQxLAoKICAgIElQ
UFJPVE9fUk9VVElORyA9IDQzLAoKICAgIElQUFJPVE9fRlJBR01FTlQgPSA0NCwKCiAgICBJUFBS
T1RPX1JTVlAgPSA0NiwKCiAgICBJUFBST1RPX0dSRSA9IDQ3LAoKICAgIElQUFJPVE9fRVNQID0g
NTAsCgogICAgSVBQUk9UT19BSCA9IDUxLAoKICAgIElQUFJPVE9fSUNNUFY2ID0gNTgsCgogICAg
SVBQUk9UT19OT05FID0gNTksCgogICAgSVBQUk9UT19EU1RPUFRTID0gNjAsCgogICAgSVBQUk9U
T19NVFAgPSA5MiwKCiAgICBJUFBST1RPX0VOQ0FQID0gOTgsCgogICAgSVBQUk9UT19QSU0gPSAx
MDMsCgogICAgSVBQUk9UT19DT01QID0gMTA4LAoKICAgIElQUFJPVE9fUkFXID0gMjU1LAoKICAg
IElQUFJPVE9fTUFYCiAgfTsKCgoKdHlwZWRlZiB1aW50MTZfdCBpbl9wb3J0X3Q7CgoKZW51bQog
IHsKICAgIElQUE9SVF9FQ0hPID0gNywKICAgIElQUE9SVF9ESVNDQVJEID0gOSwKICAgIElQUE9S
VF9TWVNUQVQgPSAxMSwKICAgIElQUE9SVF9EQVlUSU1FID0gMTMsCiAgICBJUFBPUlRfTkVUU1RB
VCA9IDE1LAogICAgSVBQT1JUX0ZUUCA9IDIxLAogICAgSVBQT1JUX1RFTE5FVCA9IDIzLAogICAg
SVBQT1JUX1NNVFAgPSAyNSwKICAgIElQUE9SVF9USU1FU0VSVkVSID0gMzcsCiAgICBJUFBPUlRf
TkFNRVNFUlZFUiA9IDQyLAogICAgSVBQT1JUX1dIT0lTID0gNDMsCiAgICBJUFBPUlRfTVRQID0g
NTcsCgogICAgSVBQT1JUX1RGVFAgPSA2OSwKICAgIElQUE9SVF9SSkUgPSA3NywKICAgIElQUE9S
VF9GSU5HRVIgPSA3OSwKICAgIElQUE9SVF9UVFlMSU5LID0gODcsCiAgICBJUFBPUlRfU1VQRFVQ
ID0gOTUsCgoKICAgIElQUE9SVF9FWEVDU0VSVkVSID0gNTEyLAogICAgSVBQT1JUX0xPR0lOU0VS
VkVSID0gNTEzLAogICAgSVBQT1JUX0NNRFNFUlZFUiA9IDUxNCwKICAgIElQUE9SVF9FRlNTRVJW
RVIgPSA1MjAsCgoKICAgIElQUE9SVF9CSUZGVURQID0gNTEyLAogICAgSVBQT1JUX1dIT1NFUlZF
UiA9IDUxMywKICAgIElQUE9SVF9ST1VURVNFUlZFUiA9IDUyMCwKCgogICAgSVBQT1JUX1JFU0VS
VkVEID0gMTAyNCwKCgogICAgSVBQT1JUX1VTRVJSRVNFUlZFRCA9IDUwMDAKICB9OwoKCgp0eXBl
ZGVmIHVpbnQzMl90IGluX2FkZHJfdDsKc3RydWN0IGluX2FkZHIKICB7CiAgICBpbl9hZGRyX3Qg
c19hZGRyOwogIH07CiMgMTkwICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAzCnN0cnVjdCBp
bjZfYWRkcgogIHsKICAgIHVuaW9uCiAgICAgIHsKICAgICAgICB1aW50OF90IHU2X2FkZHI4WzE2
XTsKICAgICAgICB1aW50MTZfdCB1Nl9hZGRyMTZbOF07CiAgICAgICAgdWludDMyX3QgdTZfYWRk
cjMyWzRdOwogICAgICB9IGluNl91OwoKCgogIH07CgpleHRlcm4gY29uc3Qgc3RydWN0IGluNl9h
ZGRyIGluNmFkZHJfYW55OwpleHRlcm4gY29uc3Qgc3RydWN0IGluNl9hZGRyIGluNmFkZHJfbG9v
cGJhY2s7CgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAxIDMKIyAyMTMg
Ii91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDIgMwoKCgpzdHJ1Y3Qgc29ja2FkZHJfaW4KICB7
CiAgICBzYV9mYW1pbHlfdCBzaW5fZmFtaWx5OwogICAgaW5fcG9ydF90IHNpbl9wb3J0OwogICAg
c3RydWN0IGluX2FkZHIgc2luX2FkZHI7CgoKICAgIHVuc2lnbmVkIGNoYXIgc2luX3plcm9bc2l6
ZW9mIChzdHJ1Y3Qgc29ja2FkZHIpIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVv
ZiAodW5zaWduZWQgc2hvcnQgaW50KSkgLQogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
b2YgKGluX3BvcnRfdCkgLQogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKHN0cnVj
dCBpbl9hZGRyKV07CiAgfTsKCgpzdHJ1Y3Qgc29ja2FkZHJfaW42CiAgewogICAgc2FfZmFtaWx5
X3Qgc2luNl9mYW1pbHk7CiAgICBpbl9wb3J0X3Qgc2luNl9wb3J0OwogICAgdWludDMyX3Qgc2lu
Nl9mbG93aW5mbzsKICAgIHN0cnVjdCBpbjZfYWRkciBzaW42X2FkZHI7CiAgICB1aW50MzJfdCBz
aW42X3Njb3BlX2lkOwogIH07CgoKc3RydWN0IGlwdjZfbXJlcQogIHsKCiAgICBzdHJ1Y3QgaW42
X2FkZHIgaXB2Nm1yX211bHRpYWRkcjsKCgogICAgdW5zaWduZWQgaW50IGlwdjZtcl9pbnRlcmZh
Y2U7CiAgfTsKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2luLmgiIDEgMwojIDY2ICIvdXNyL2lu
Y2x1ZGUvYml0cy9pbi5oIiAzCnN0cnVjdCBpcF9vcHRzCiAgewogICAgc3RydWN0IGluX2FkZHIg
aXBfZHN0OwogICAgY2hhciBpcF9vcHRzWzQwXTsKICB9OwoKCnN0cnVjdCBpcF9tcmVxCiAgewog
ICAgc3RydWN0IGluX2FkZHIgaW1yX211bHRpYWRkcjsKICAgIHN0cnVjdCBpbl9hZGRyIGltcl9p
bnRlcmZhY2U7CiAgfTsKCgpzdHJ1Y3QgaXBfbXJlcW4KICB7CiAgICBzdHJ1Y3QgaW5fYWRkciBp
bXJfbXVsdGlhZGRyOwogICAgc3RydWN0IGluX2FkZHIgaW1yX2FkZHJlc3M7CiAgICBpbnQgaW1y
X2lmaW5kZXg7CiAgfTsKCgpzdHJ1Y3QgaW5fcGt0aW5mbwogIHsKICAgIGludCBpcGlfaWZpbmRl
eDsKICAgIHN0cnVjdCBpbl9hZGRyIGlwaV9zcGVjX2RzdDsKICAgIHN0cnVjdCBpbl9hZGRyIGlw
aV9hZGRyOwogIH07CiMgMjUxICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAyIDMKIyAyNTkg
Ii91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDMKZXh0ZXJuIHVpbnQzMl90IG50b2hsICh1aW50
MzJfdCBfX25ldGxvbmcpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0
ZXJuIHVpbnQxNl90IG50b2hzICh1aW50MTZfdCBfX25ldHNob3J0KQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIHVpbnQzMl90IGh0b25sICh1aW50MzJf
dCBfX2hvc3Rsb25nKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
ZXh0ZXJuIHVpbnQxNl90IGh0b25zICh1aW50MTZfdCBfX2hvc3RzaG9ydCkKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4u
aCIgMSAzCiMgMjY4ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAyIDMKCgojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL2J5dGVzd2FwLmgiIDEgMwojIDI3MSAiL3Vzci9pbmNsdWRlL25ldGluZXQv
aW4uaCIgMiAzCiMgMzMzICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAzCmV4dGVybiBpbnQg
YmluZHJlc3Zwb3J0IChpbnQgX19zb2NrZmQsIHN0cnVjdCBzb2NrYWRkcl9pbiAqX19zb2NrX2lu
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGJpbmRyZXN2cG9ydDYgKGludCBfX3NvY2tmZCwgc3Ry
dWN0IHNvY2thZGRyX2luNiAqX19zb2NrX2luKQogICAgIHRocm93ICgpOwojIDM2MSAiL3Vzci9p
bmNsdWRlL25ldGluZXQvaW4uaCIgMwpzdHJ1Y3QgaW42X3BrdGluZm8KICB7CiAgICBzdHJ1Y3Qg
aW42X2FkZHIgaXBpNl9hZGRyOwogICAgdW5zaWduZWQgaW50IGlwaTZfaWZpbmRleDsKICB9OwoK
fQojIDUxICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25z
cHIvcHJpbmV0LmgiIDIKIyA2NSAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rp
c3QvaW5jbHVkZS9uc3ByL3ByaW5ldC5oIgojIDEgIi91c3IvaW5jbHVkZS9hcnBhL2luZXQuaCIg
MSAzCiMgMjIgIi91c3IvaW5jbHVkZS9hcnBhL2luZXQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9m
ZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2FycGEvaW5ldC5oIiAyIDMKIyAxICIv
dXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL2FycGEvaW5l
dC5oIiAyIDMKCgoKCgoKCmV4dGVybiAiQyIgewoKCgpleHRlcm4gaW5fYWRkcl90IGluZXRfYWRk
ciAoX19jb25zdCBjaGFyICpfX2NwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW5fYWRkcl90IGluZXRf
bG5hb2YgKHN0cnVjdCBpbl9hZGRyIF9faW4pIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IGlu
X2FkZHIgaW5ldF9tYWtlYWRkciAoaW5fYWRkcl90IF9fbmV0LCBpbl9hZGRyX3QgX19ob3N0KQog
ICAgIHRocm93ICgpOwoKCmV4dGVybiBpbl9hZGRyX3QgaW5ldF9uZXRvZiAoc3RydWN0IGluX2Fk
ZHIgX19pbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbl9hZGRyX3QgaW5ldF9uZXR3b3JrIChfX2Nv
bnN0IGNoYXIgKl9fY3ApIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqaW5ldF9udG9hIChzdHJ1
Y3QgaW5fYWRkciBfX2luKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaW5ldF9wdG9uIChpbnQg
X19hZiwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fY3AsCiAgICAgICAgICAgICAgICAgICAg
ICB2b2lkICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBfX2NvbnN0IGNo
YXIgKmluZXRfbnRvcCAoaW50IF9fYWYsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX2NwLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNv
Y2tsZW5fdCBfX2xlbikKICAgICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGluX2FkZHJfdCBpbmV0
X2F0b24gKF9fY29uc3QgY2hhciAqX19jcCwgc3RydWN0IGluX2FkZHIgKl9faW5wKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGNoYXIgKmluZXRfbmV0YSAoaW5fYWRkcl90IF9fbmV0LCBjaGFyICpfX2J1
Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICppbmV0X25ldF9udG9w
IChpbnQgX19hZiwgX19jb25zdCB2b2lkICpfX2NwLCBpbnQgX19iaXRzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IGluZXRfbmV0X3B0b24gKGludCBfX2FmLCBfX2NvbnN0IGNoYXIgKl9fY3AsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cg
KCk7CgoKCgpleHRlcm4gdW5zaWduZWQgaW50IGluZXRfbnNhcF9hZGRyIChfX2NvbnN0IGNoYXIg
Kl9fY3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIg
Kl9fYnVmLCBpbnQgX19sZW4pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqaW5ldF9uc2FwX250
b2EgKGludCBfX2xlbiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX2NwLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgp9CiMgNjYgIi9ob21lL2th
aS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcmluZXQuaCIgMgoK
IyAxICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9uZXRkYi5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUv
bmV0ZGIuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDEgMwojIDI5ICIv
dXNyL2luY2x1ZGUvbmV0ZGIuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAxIDMK
IyAzMCAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9ycGMv
bmV0ZGIuaCIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS9ycGMvbmV0ZGIuaCIgMwojIDEgIi91c3Iv
aW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyA0MCAiL3Vzci9pbmNsdWRlL3JwYy9uZXRkYi5oIiAy
IDMKCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9ycGMvbmV0ZGIu
aCIgMiAzCgpleHRlcm4gIkMiIHsKCnN0cnVjdCBycGNlbnQKewogIGNoYXIgKnJfbmFtZTsKICBj
aGFyICoqcl9hbGlhc2VzOwogIGludCByX251bWJlcjsKfTsKCmV4dGVybiB2b2lkIHNldHJwY2Vu
dCAoaW50IF9fc3RheW9wZW4pIHRocm93ICgpOwpleHRlcm4gdm9pZCBlbmRycGNlbnQgKHZvaWQp
IHRocm93ICgpOwpleHRlcm4gc3RydWN0IHJwY2VudCAqZ2V0cnBjYnluYW1lIChfX2NvbnN0IGNo
YXIgKl9fbmFtZSkgdGhyb3cgKCk7CmV4dGVybiBzdHJ1Y3QgcnBjZW50ICpnZXRycGNieW51bWJl
ciAoaW50IF9fbnVtYmVyKSB0aHJvdyAoKTsKZXh0ZXJuIHN0cnVjdCBycGNlbnQgKmdldHJwY2Vu
dCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRycGNieW5hbWVfciAoX19jb25zdCBj
aGFyICpfX25hbWUsIHN0cnVjdCBycGNlbnQgKl9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqX19idWZmZXIsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IHJwY2VudCAqKl9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVy
biBpbnQgZ2V0cnBjYnludW1iZXJfciAoaW50IF9fbnVtYmVyLCBzdHJ1Y3QgcnBjZW50ICpfX3Jl
c3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19idWZmZXIsIHNp
emVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnBjZW50
ICoqX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRycGNlbnRfciAoc3RydWN0IHJw
Y2VudCAqX19yZXN1bHRfYnVmLCBjaGFyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IF9fYnVmbGVuLCBzdHJ1Y3QgcnBjZW50ICoqX19yZXN1bHQpIHRocm93ICgpOwoK
Cn0KIyAzNCAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy9zaWdpbmZvLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9zaWdpbmZvLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRl
L2JpdHMvc2lnaW5mby5oIiAyIDMKCgoKCgoKCnR5cGVkZWYgdW5pb24gc2lndmFsCiAgewogICAg
aW50IHNpdmFsX2ludDsKICAgIHZvaWQgKnNpdmFsX3B0cjsKICB9IHNpZ3ZhbF90OwojIDI3MSAi
L3Vzci9pbmNsdWRlL2JpdHMvc2lnaW5mby5oIiAzCnN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zOwoK
dHlwZWRlZiBzdHJ1Y3Qgc2lnZXZlbnQKICB7CiAgICBzaWd2YWxfdCBzaWdldl92YWx1ZTsKICAg
IGludCBzaWdldl9zaWdubzsKICAgIGludCBzaWdldl9ub3RpZnk7CgogICAgdW5pb24KICAgICAg
ewogICAgICAgIGludCBfcGFkWygoNjQgLyBzaXplb2YgKGludCkpIC0gMyldOwoKICAgICAgICBz
dHJ1Y3QKICAgICAgICAgIHsKICAgICAgICAgICAgdm9pZCAoKl9mdW5jdGlvbikgKHNpZ3ZhbF90
KTsKICAgICAgICAgICAgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MgKl9hdHRyaWJ1dGU7CiAgICAg
ICAgICB9IF9zaWdldl90aHJlYWQ7CiAgICAgIH0gX3NpZ2V2X3VuOwogIH0gc2lnZXZlbnRfdDsK
CgoKCgoKZW51bQp7CiAgU0lHRVZfU0lHTkFMID0gMCwKCiAgU0lHRVZfTk9ORSwKCiAgU0lHRVZf
VEhSRUFECgp9OwojIDM5ICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIgMiAzCgojIDEgIi91c3IvaW5j
bHVkZS90aW1lLmgiIDEgMwojIDQxICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIgMiAzCgoKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy9uZXRkYi5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMvbmV0
ZGIuaCIgMwpzdHJ1Y3QgbmV0ZW50CnsKICBjaGFyICpuX25hbWU7CiAgY2hhciAqKm5fYWxpYXNl
czsKICBpbnQgbl9hZGRydHlwZTsKICB1aW50MzJfdCBuX25ldDsKfTsKIyA0NCAiL3Vzci9pbmNs
dWRlL25ldGRiLmgiIDIgMwojIDU0ICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIgMwpleHRlcm4gIkMi
IHsKCgpleHRlcm4gaW50IGhfZXJybm87CgoKZXh0ZXJuIGludCAqX19oX2Vycm5vX2xvY2F0aW9u
ICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgMTA1ICIvdXNy
L2luY2x1ZGUvbmV0ZGIuaCIgMwpleHRlcm4gdm9pZCBoZXJyb3IgKF9fY29uc3QgY2hhciAqX19z
dHIpIHRocm93ICgpOwoKCmV4dGVybiBfX2NvbnN0IGNoYXIgKmhzdHJlcnJvciAoaW50IF9fZXJy
X251bSkgdGhyb3cgKCk7CgoKCgpzdHJ1Y3QgaG9zdGVudAp7CiAgY2hhciAqaF9uYW1lOwogIGNo
YXIgKipoX2FsaWFzZXM7CiAgaW50IGhfYWRkcnR5cGU7CiAgaW50IGhfbGVuZ3RoOwogIGNoYXIg
KipoX2FkZHJfbGlzdDsKCn07CgoKCmV4dGVybiB2b2lkIHNldGhvc3RlbnQgKGludCBfX3N0YXlf
b3BlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZW5kaG9zdGVudCAodm9pZCkgdGhyb3cgKCk7
CgoKCmV4dGVybiBzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9zdGVudCAodm9pZCkgdGhyb3cgKCk7CgoK
CmV4dGVybiBzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9zdGJ5YWRkciAoX19jb25zdCB2b2lkICpfX2Fk
ZHIsIF9fc29ja2xlbl90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBfX3R5cGUpIHRocm93ICgpOwoKCmV4dGVybiBzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9z
dGJ5bmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBzdHJ1
Y3QgaG9zdGVudCAqZ2V0aG9zdGJ5bmFtZTIgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX19h
ZikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgZ2V0aG9zdGVudF9yIChzdHJ1Y3QgaG9zdGVu
dCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
ICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3QgaG9zdGVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19oX2Vycm5vcCkgdGhyb3cgKCk7CgpleHRlcm4g
aW50IGdldGhvc3RieWFkZHJfciAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fYWRkciwgX19z
b2NrbGVuX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX190eXBlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKl9fcmVzdHJpY3QgX19y
ZXN1bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBf
X2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IGhvc3RlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50ICpfX3Jlc3RyaWN0IF9faF9lcnJub3ApIHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRo
b3N0YnluYW1lX3IgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXpl
X3QgX19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAq
Kl9fcmVzdHJpY3QgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9f
cmVzdHJpY3QgX19oX2Vycm5vcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGdldGhvc3RieW5hbWUy
X3IgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsIGludCBfX2FmLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1
ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBz
aXplX3QgX19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3Rl
bnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCAqX19yZXN0cmljdCBfX2hfZXJybm9wKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRu
ZXRlbnQgKGludCBfX3N0YXlfb3BlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZW5kbmV0ZW50
ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBuZXRlbnQgKmdldG5ldGVudCAodm9p
ZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgbmV0ZW50ICpnZXRuZXRieWFkZHIgKHVpbnQz
Ml90IF9fbmV0LCBpbnQgX190eXBlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBzdHJ1Y3QgbmV0
ZW50ICpnZXRuZXRieW5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgoK
CmV4dGVybiBpbnQgZ2V0bmV0ZW50X3IgKHN0cnVjdCBuZXRlbnQgKl9fcmVzdHJpY3QgX19yZXN1
bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBz
aXplX3QgX19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRlbnQgKipf
X3Jlc3RyaWN0IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJp
Y3QgX19oX2Vycm5vcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGdldG5ldGJ5YWRkcl9yICh1aW50
MzJfdCBfX25ldCwgaW50IF9fdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IG5ldGVudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IG5ldGVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2hfZXJybm9wKSB0aHJvdyAo
KTsKCmV4dGVybiBpbnQgZ2V0bmV0YnluYW1lX3IgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRlbnQgKl9fcmVzdHJp
Y3QgX19yZXN1bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3Ry
aWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCBuZXRlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgKl9fcmVzdHJpY3QgX19oX2Vycm5vcCkgdGhyb3cgKCk7CgoKCgpzdHJ1Y3Qgc2Vy
dmVudAp7CiAgY2hhciAqc19uYW1lOwogIGNoYXIgKipzX2FsaWFzZXM7CiAgaW50IHNfcG9ydDsK
ICBjaGFyICpzX3Byb3RvOwp9OwoKCgpleHRlcm4gdm9pZCBzZXRzZXJ2ZW50IChpbnQgX19zdGF5
X29wZW4pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGVuZHNlcnZlbnQgKHZvaWQpIHRocm93ICgp
OwoKCgpleHRlcm4gc3RydWN0IHNlcnZlbnQgKmdldHNlcnZlbnQgKHZvaWQpIHRocm93ICgpOwoK
CgpleHRlcm4gc3RydWN0IHNlcnZlbnQgKmdldHNlcnZieW5hbWUgKF9fY29uc3QgY2hhciAqX19u
YW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19wcm90bykgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3Qgc2VydmVudCAqZ2V0c2VydmJ5cG9y
dCAoaW50IF9fcG9ydCwgX19jb25zdCBjaGFyICpfX3Byb3RvKQogICAgIHRocm93ICgpOwoKCgoK
CmV4dGVybiBpbnQgZ2V0c2VydmVudF9yIChzdHJ1Y3Qgc2VydmVudCAqX19yZXN0cmljdCBfX3Jl
c3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm
LCBzaXplX3QgX19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VydmVu
dCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRzZXJ2Ynlu
YW1lX3IgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wcm90bywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdCBzZXJ2ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVf
dCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZXJ2ZW50ICoq
X19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGdldHNlcnZieXBvcnRf
ciAoaW50IF9fcG9ydCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcHJvdG8sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VydmVudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9i
dWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBz
aXplX3QgX19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VydmVu
dCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCgoKc3RydWN0IHByb3RvZW50CnsK
ICBjaGFyICpwX25hbWU7CiAgY2hhciAqKnBfYWxpYXNlczsKICBpbnQgcF9wcm90bzsKfTsKCgoK
ZXh0ZXJuIHZvaWQgc2V0cHJvdG9lbnQgKGludCBfX3N0YXlfb3BlbikgdGhyb3cgKCk7CgoKZXh0
ZXJuIHZvaWQgZW5kcHJvdG9lbnQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHBy
b3RvZW50ICpnZXRwcm90b2VudCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBwcm90
b2VudCAqZ2V0cHJvdG9ieW5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgpl
eHRlcm4gc3RydWN0IHByb3RvZW50ICpnZXRwcm90b2J5bnVtYmVyIChpbnQgX19wcm90bykgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXRwcm90b2VudF9yIChzdHJ1Y3QgcHJvdG9lbnQgKl9f
cmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9f
cmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgcHJvdG9lbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVy
biBpbnQgZ2V0cHJvdG9ieW5hbWVfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHJvdG9lbnQgKl9fcmVzdHJpY3Qg
X19yZXN1bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJp
Y3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3QgcHJvdG9lbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgZ2V0cHJvdG9ieW51bWJlcl9yIChpbnQgX19wcm90bywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCBwcm90b2VudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3Qg
X19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHJvdG9lbnQg
KipfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0bmV0Z3Jl
bnQgKF9fY29uc3QgY2hhciAqX19uZXRncm91cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZW5k
bmV0Z3JlbnQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGdldG5ldGdyZW50IChjaGFy
ICoqX19yZXN0cmljdCBfX2hvc3RwLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX3VzZXJwLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj
dCBfX2RvbWFpbnApIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlubmV0Z3IgKF9fY29uc3QgY2hh
ciAqX19uZXRncm91cCwgX19jb25zdCBjaGFyICpfX2hvc3QsCiAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3VzZXIsIF9fY29uc3QgY2hhciAqZG9tYWluKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IGdldG5ldGdyZW50X3IgKGNoYXIgKipfX3Jlc3RyaWN0IF9faG9zdHAsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX191c2VycCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2RvbWFpbnAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1ZmZlciwgc2l6ZV90IF9fYnVmbGVu
KSB0aHJvdyAoKTsKIyAzNTEgIi91c3IvaW5jbHVkZS9uZXRkYi5oIiAzCmV4dGVybiBpbnQgcmNt
ZCAoY2hhciAqKl9fcmVzdHJpY3QgX19haG9zdCwgdW5zaWduZWQgc2hvcnQgaW50IF9fcnBvcnQs
CiAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbG9jdXNlciwKICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19yZW11c2VyLAogICAgICAg
ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2NtZCwgaW50ICpfX3Jlc3RyaWN0
IF9fZmQycCkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCByY21kX2FmIChjaGFyICoqX19y
ZXN0cmljdCBfX2Fob3N0LCB1bnNpZ25lZCBzaG9ydCBpbnQgX19ycG9ydCwKICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19sb2N1c2VyLAogICAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3JlbXVzZXIsCiAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fY21kLCBpbnQgKl9fcmVzdHJpY3QgX19m
ZDJwLAogICAgICAgICAgICAgICAgICAgIHNhX2ZhbWlseV90IF9fYWYpIHRocm93ICgpOwoKCgoK
CgpleHRlcm4gaW50IHJleGVjIChjaGFyICoqX19yZXN0cmljdCBfX2Fob3N0LCBpbnQgX19ycG9y
dCwKICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcGFzcywKICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fY21kLCBpbnQgKl9fcmVzdHJpY3Qg
X19mZDJwKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHJleGVjX2FmIChjaGFyICoqX19y
ZXN0cmljdCBfX2Fob3N0LCBpbnQgX19ycG9ydCwKICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fcGFzcywKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fY21kLCBpbnQgKl9fcmVzdHJpY3QgX19mZDJwLAogICAgICAgICAgICAg
ICAgICAgICBzYV9mYW1pbHlfdCBfX2FmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcnVzZXJv
ayAoX19jb25zdCBjaGFyICpfX3Job3N0LCBpbnQgX19zdXNlciwKICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVtdXNlciwgX19jb25zdCBjaGFyICpfX2xvY3VzZXIpIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IHJ1c2Vyb2tfYWYgKF9fY29uc3QgY2hhciAqX19yaG9zdCwgaW50
IF9fc3VzZXIsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3JlbXVzZXIs
IF9fY29uc3QgY2hhciAqX19sb2N1c2VyLAogICAgICAgICAgICAgICAgICAgICAgIHNhX2ZhbWls
eV90IF9fYWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBycmVzdnBvcnQgKGludCAqX19hbHBv
cnQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHJyZXN2cG9ydF9hZiAoaW50ICpfX2FscG9ydCwg
c2FfZmFtaWx5X3QgX19hZikgdGhyb3cgKCk7CgoKCgoKCnN0cnVjdCBhZGRyaW5mbwp7CiAgaW50
IGFpX2ZsYWdzOwogIGludCBhaV9mYW1pbHk7CiAgaW50IGFpX3NvY2t0eXBlOwogIGludCBhaV9w
cm90b2NvbDsKICBzb2NrbGVuX3QgYWlfYWRkcmxlbjsKICBzdHJ1Y3Qgc29ja2FkZHIgKmFpX2Fk
ZHI7CiAgY2hhciAqYWlfY2Fub25uYW1lOwogIHN0cnVjdCBhZGRyaW5mbyAqYWlfbmV4dDsKfTsK
CgoKc3RydWN0IGdhaWNiCnsKICBjb25zdCBjaGFyICphcl9uYW1lOwogIGNvbnN0IGNoYXIgKmFy
X3NlcnZpY2U7CiAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICphcl9yZXF1ZXN0OwogIHN0cnVjdCBh
ZGRyaW5mbyAqYXJfcmVzdWx0OwoKICBpbnQgX19yZXR1cm47CiAgaW50IF9fdW51c2VkWzVdOwp9
OwojIDQ3NiAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDMKZXh0ZXJuIGludCBnZXRhZGRyaW5mbyAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc2VydmljZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBzdHJ1Y3QgYWRkcmluZm8gKl9fcmVzdHJpY3QgX19yZXEsCiAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBhZGRyaW5mbyAqKl9fcmVzdHJpY3QgX19wYWkpIHRocm93ICgp
OwoKCmV4dGVybiB2b2lkIGZyZWVhZGRyaW5mbyAoc3RydWN0IGFkZHJpbmZvICpfX2FpKSB0aHJv
dyAoKTsKCgpleHRlcm4gY2hhciAqZ2FpX3N0cmVycm9yIChpbnQgX19lY29kZSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBnZXRuYW1laW5mbyAoX19jb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKl9fcmVz
dHJpY3QgX19zYSwKICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90IF9fc2FsZW4sIGNo
YXIgKl9fcmVzdHJpY3QgX19ob3N0LAogICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3Qg
X19ob3N0bGVuLCBjaGFyICpfX3Jlc3RyaWN0IF9fc2VydiwKICAgICAgICAgICAgICAgICAgICAg
ICAgc29ja2xlbl90IF9fc2VydmxlbiwgdW5zaWduZWQgaW50IF9fZmxhZ3MpIHRocm93ICgpOwoK
CgoKCmV4dGVybiBpbnQgZ2V0YWRkcmluZm9fYSAoaW50IF9fbW9kZSwgc3RydWN0IGdhaWNiICpf
X2xpc3RbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19lbnQsIHN0cnVjdCBzaWdl
dmVudCAqX19yZXN0cmljdCBfX3NpZykKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZ2Fp
X3N1c3BlbmQgKF9fY29uc3Qgc3RydWN0IGdhaWNiICpfX2NvbnN0IF9fbGlzdFtdLCBpbnQgX19l
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Rp
bWVvdXQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2FpX2Vycm9yIChzdHJ1Y3QgZ2FpY2IgKl9f
cmVxKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdhaV9jYW5jZWwgKHN0cnVjdCBnYWljYiAqX19n
YWljYnApIHRocm93ICgpOwoKCgp9CiMgNjggIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGlt
aXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcmluZXQuaCIgMgojIDMzICIvaG9tZS9rYWkvbS8wOTIv
bW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIiAyCgpleHRlcm4gIkMi
IHsKCgp0eXBlZGVmIHN0cnVjdCBQUkRpciBQUkRpcjsKdHlwZWRlZiBzdHJ1Y3QgUFJEaXJFbnRy
eSBQUkRpckVudHJ5Owp0eXBlZGVmIHN0cnVjdCBQUkZpbGVEZXNjIFBSRmlsZURlc2M7CnR5cGVk
ZWYgc3RydWN0IFBSRmlsZUluZm8gUFJGaWxlSW5mbzsKdHlwZWRlZiBzdHJ1Y3QgUFJGaWxlSW5m
bzY0IFBSRmlsZUluZm82NDsKdHlwZWRlZiB1bmlvbiBQUk5ldEFkZHIgUFJOZXRBZGRyOwp0eXBl
ZGVmIHN0cnVjdCBQUklPTWV0aG9kcyBQUklPTWV0aG9kczsKdHlwZWRlZiBzdHJ1Y3QgUFJQb2xs
RGVzYyBQUlBvbGxEZXNjOwp0eXBlZGVmIHN0cnVjdCBQUkZpbGVQcml2YXRlIFBSRmlsZVByaXZh
dGU7CnR5cGVkZWYgc3RydWN0IFBSU2VuZEZpbGVEYXRhIFBSU2VuZEZpbGVEYXRhOwojIDU5ICIv
aG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5o
Igp0eXBlZGVmIFBSSW50biBQUkRlc2NJZGVudGl0eTsKCnN0cnVjdCBQUkZpbGVEZXNjIHsKICAg
IGNvbnN0IFBSSU9NZXRob2RzICptZXRob2RzOwogICAgUFJGaWxlUHJpdmF0ZSAqc2VjcmV0Owog
ICAgUFJGaWxlRGVzYyAqbG93ZXIsICpoaWdoZXI7CiAgICB2b2lkICggKmR0b3IpKFBSRmlsZURl
c2MgKmZkKTsKCiAgICBQUkRlc2NJZGVudGl0eSBpZGVudGl0eTsKfTsKIyA3OSAiL2hvbWUva2Fp
L20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKdHlwZWRl
ZiBlbnVtIFBSVHJhbnNtaXRGaWxlRmxhZ3MgewogICAgUFJfVFJBTlNNSVRGSUxFX0tFRVBfT1BF
TiA9IDAsCgogICAgUFJfVFJBTlNNSVRGSUxFX0NMT1NFX1NPQ0tFVCA9IDEKCn0gUFJUcmFuc21p
dEZpbGVGbGFnczsKIyAxMzIgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0
L2luY2x1ZGUvbnNwci9wcmlvLmgiCnN0cnVjdCBQUklQdjZBZGRyIHsKICAgICAgICB1bmlvbiB7
CiAgICAgICAgICAgICAgICBQUlVpbnQ4IF9TNl91OFsxNl07CiAgICAgICAgICAgICAgICBQUlVp
bnQxNiBfUzZfdTE2WzhdOwogICAgICAgICAgICAgICAgUFJVaW50MzIgX1M2X3UzMls0XTsKICAg
ICAgICAgICAgICAgIFBSVWludDY0IF9TNl91NjRbMl07CiAgICAgICAgfSBfUzZfdW47Cn07CgoK
CgoKdHlwZWRlZiBzdHJ1Y3QgUFJJUHY2QWRkciBQUklQdjZBZGRyOwoKdW5pb24gUFJOZXRBZGRy
IHsKICAgIHN0cnVjdCB7CiAgICAgICAgUFJVaW50MTYgZmFtaWx5OwoKCgogICAgICAgIGNoYXIg
ZGF0YVsxNF07CgogICAgfSByYXc7CiAgICBzdHJ1Y3QgewogICAgICAgIFBSVWludDE2IGZhbWls
eTsKICAgICAgICBQUlVpbnQxNiBwb3J0OwogICAgICAgIFBSVWludDMyIGlwOwoKCgogICAgICAg
IGNoYXIgcGFkWzhdOwoKICAgIH0gaW5ldDsKICAgIHN0cnVjdCB7CiAgICAgICAgUFJVaW50MTYg
ZmFtaWx5OwogICAgICAgIFBSVWludDE2IHBvcnQ7CiAgICAgICAgUFJVaW50MzIgZmxvd2luZm87
CiAgICAgICAgUFJJUHY2QWRkciBpcDsKICAgICAgICBQUlVpbnQzMiBzY29wZV9pZDsKICAgIH0g
aXB2NjsKCiAgICBzdHJ1Y3QgewogICAgICAgIFBSVWludDE2IGZhbWlseTsKICAgICAgICBjaGFy
IHBhdGhbMTA0XTsKICAgIH0gbG9jYWw7Cgp9OwojIDE5MCAiL2hvbWUva2FpL20vMDkyL21vemls
bGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKdHlwZWRlZiBlbnVtIFBSU29j
a09wdGlvbgp7CiAgICBQUl9Tb2NrT3B0X05vbmJsb2NraW5nLAogICAgUFJfU29ja09wdF9MaW5n
ZXIsCiAgICBQUl9Tb2NrT3B0X1JldXNlYWRkciwKICAgIFBSX1NvY2tPcHRfS2VlcGFsaXZlLAog
ICAgUFJfU29ja09wdF9SZWN2QnVmZmVyU2l6ZSwKICAgIFBSX1NvY2tPcHRfU2VuZEJ1ZmZlclNp
emUsCgogICAgUFJfU29ja09wdF9JcFRpbWVUb0xpdmUsCiAgICBQUl9Tb2NrT3B0X0lwVHlwZU9m
U2VydmljZSwKCiAgICBQUl9Tb2NrT3B0X0FkZE1lbWJlciwKICAgIFBSX1NvY2tPcHRfRHJvcE1l
bWJlciwKICAgIFBSX1NvY2tPcHRfTWNhc3RJbnRlcmZhY2UsCiAgICBQUl9Tb2NrT3B0X01jYXN0
VGltZVRvTGl2ZSwKICAgIFBSX1NvY2tPcHRfTWNhc3RMb29wYmFjaywKCiAgICBQUl9Tb2NrT3B0
X05vRGVsYXksCiAgICBQUl9Tb2NrT3B0X01heFNlZ21lbnQsCiAgICBQUl9Tb2NrT3B0X0Jyb2Fk
Y2FzdCwKICAgIFBSX1NvY2tPcHRfTGFzdAp9IFBSU29ja09wdGlvbjsKCnR5cGVkZWYgc3RydWN0
IFBSTGluZ2VyIHsKICAgICAgICBQUkJvb2wgcG9sYXJpdHk7CiAgICAgICAgUFJJbnRlcnZhbFRp
bWUgbGluZ2VyOwp9IFBSTGluZ2VyOwoKdHlwZWRlZiBzdHJ1Y3QgUFJNY2FzdFJlcXVlc3Qgewog
ICAgICAgIFBSTmV0QWRkciBtY2FkZHI7CiAgICAgICAgUFJOZXRBZGRyIGlmYWRkcjsKfSBQUk1j
YXN0UmVxdWVzdDsKCnR5cGVkZWYgc3RydWN0IFBSU29ja2V0T3B0aW9uRGF0YQp7CiAgICBQUlNv
Y2tPcHRpb24gb3B0aW9uOwogICAgdW5pb24KICAgIHsKICAgICAgICBQUlVpbnRuIGlwX3R0bDsK
ICAgICAgICBQUlVpbnRuIG1jYXN0X3R0bDsKICAgICAgICBQUlVpbnRuIHRvczsKICAgICAgICBQ
UkJvb2wgbm9uX2Jsb2NraW5nOwogICAgICAgIFBSQm9vbCByZXVzZV9hZGRyOwogICAgICAgIFBS
Qm9vbCBrZWVwX2FsaXZlOwogICAgICAgIFBSQm9vbCBtY2FzdF9sb29wYmFjazsKICAgICAgICBQ
UkJvb2wgbm9fZGVsYXk7CiAgICAgICAgUFJCb29sIGJyb2FkY2FzdDsKICAgICAgICBQUlNpemUg
bWF4X3NlZ21lbnQ7CiAgICAgICAgUFJTaXplIHJlY3ZfYnVmZmVyX3NpemU7CiAgICAgICAgUFJT
aXplIHNlbmRfYnVmZmVyX3NpemU7CiAgICAgICAgUFJMaW5nZXIgbGluZ2VyOwogICAgICAgIFBS
TWNhc3RSZXF1ZXN0IGFkZF9tZW1iZXI7CiAgICAgICAgUFJNY2FzdFJlcXVlc3QgZHJvcF9tZW1i
ZXI7CiAgICAgICAgUFJOZXRBZGRyIG1jYXN0X2lmOwogICAgfSB2YWx1ZTsKfSBQUlNvY2tldE9w
dGlvbkRhdGE7CiMgMjU2ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9p
bmNsdWRlL25zcHIvcHJpby5oIgp0eXBlZGVmIHN0cnVjdCBQUklPVmVjIHsKICAgIGNoYXIgKmlv
dl9iYXNlOwogICAgaW50IGlvdl9sZW47Cn0gUFJJT1ZlYzsKCgoKCgoKdHlwZWRlZiBlbnVtIFBS
RGVzY1R5cGUKewogICAgUFJfREVTQ19GSUxFID0gMSwKICAgIFBSX0RFU0NfU09DS0VUX1RDUCA9
IDIsCiAgICBQUl9ERVNDX1NPQ0tFVF9VRFAgPSAzLAogICAgUFJfREVTQ19MQVlFUkVEID0gNCwK
ICAgIFBSX0RFU0NfUElQRSA9IDUKfSBQUkRlc2NUeXBlOwoKdHlwZWRlZiBlbnVtIFBSU2Vla1do
ZW5jZSB7CiAgICBQUl9TRUVLX1NFVCA9IDAsCiAgICBQUl9TRUVLX0NVUiA9IDEsCiAgICBQUl9T
RUVLX0VORCA9IDIKfSBQUlNlZWtXaGVuY2U7CgpleHRlcm4gUFJEZXNjVHlwZSBQUl9HZXREZXNj
VHlwZShQUkZpbGVEZXNjICpmaWxlKTsKIyAyOTkgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9w
dGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJD
bG9zZUZOKShQUkZpbGVEZXNjICpmZCk7CnR5cGVkZWYgUFJJbnQzMiAoICpQUlJlYWRGTikoUFJG
aWxlRGVzYyAqZmQsIHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQpOwp0eXBlZGVmIFBSSW50MzIg
KCAqUFJXcml0ZUZOKShQUkZpbGVEZXNjICpmZCwgY29uc3Qgdm9pZCAqYnVmLCBQUkludDMyIGFt
b3VudCk7CnR5cGVkZWYgUFJJbnQzMiAoICpQUkF2YWlsYWJsZUZOKShQUkZpbGVEZXNjICpmZCk7
CnR5cGVkZWYgUFJJbnQ2NCAoICpQUkF2YWlsYWJsZTY0Rk4pKFBSRmlsZURlc2MgKmZkKTsKdHlw
ZWRlZiBQUlN0YXR1cyAoICpQUkZzeW5jRk4pKFBSRmlsZURlc2MgKmZkKTsKdHlwZWRlZiBQUk9m
ZnNldDMyICggKlBSU2Vla0ZOKShQUkZpbGVEZXNjICpmZCwgUFJPZmZzZXQzMiBvZmZzZXQsIFBS
U2Vla1doZW5jZSBob3cpOwp0eXBlZGVmIFBST2Zmc2V0NjQgKCAqUFJTZWVrNjRGTikoUFJGaWxl
RGVzYyAqZmQsIFBST2Zmc2V0NjQgb2Zmc2V0LCBQUlNlZWtXaGVuY2UgaG93KTsKdHlwZWRlZiBQ
UlN0YXR1cyAoICpQUkZpbGVJbmZvRk4pKFBSRmlsZURlc2MgKmZkLCBQUkZpbGVJbmZvICppbmZv
KTsKdHlwZWRlZiBQUlN0YXR1cyAoICpQUkZpbGVJbmZvNjRGTikoUFJGaWxlRGVzYyAqZmQsIFBS
RmlsZUluZm82NCAqaW5mbyk7CnR5cGVkZWYgUFJJbnQzMiAoICpQUldyaXRldkZOKSgKICAgIFBS
RmlsZURlc2MgKmZkLCBjb25zdCBQUklPVmVjICppb3YsIFBSSW50MzIgaW92X3NpemUsCiAgICBQ
UkludGVydmFsVGltZSB0aW1lb3V0KTsKdHlwZWRlZiBQUlN0YXR1cyAoICpQUkNvbm5lY3RGTiko
CiAgICBQUkZpbGVEZXNjICpmZCwgY29uc3QgUFJOZXRBZGRyICphZGRyLCBQUkludGVydmFsVGlt
ZSB0aW1lb3V0KTsKdHlwZWRlZiBQUkZpbGVEZXNjKiAoICpQUkFjY2VwdEZOKSAoCiAgICBQUkZp
bGVEZXNjICpmZCwgUFJOZXRBZGRyICphZGRyLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKdHlw
ZWRlZiBQUlN0YXR1cyAoICpQUkJpbmRGTikoUFJGaWxlRGVzYyAqZmQsIGNvbnN0IFBSTmV0QWRk
ciAqYWRkcik7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJMaXN0ZW5GTikoUFJGaWxlRGVzYyAqZmQs
IFBSSW50biBiYWNrbG9nKTsKdHlwZWRlZiBQUlN0YXR1cyAoICpQUlNodXRkb3duRk4pKFBSRmls
ZURlc2MgKmZkLCBQUkludG4gaG93KTsKdHlwZWRlZiBQUkludDMyICggKlBSUmVjdkZOKSgKICAg
IFBSRmlsZURlc2MgKmZkLCB2b2lkICpidWYsIFBSSW50MzIgYW1vdW50LAogICAgUFJJbnRuIGZs
YWdzLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKdHlwZWRlZiBQUkludDMyICggKlBSU2VuZEZO
KSAoCiAgICBQUkZpbGVEZXNjICpmZCwgY29uc3Qgdm9pZCAqYnVmLCBQUkludDMyIGFtb3VudCwK
ICAgIFBSSW50biBmbGFncywgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CnR5cGVkZWYgUFJJbnQz
MiAoICpQUlJlY3Zmcm9tRk4pKAogICAgUFJGaWxlRGVzYyAqZmQsIHZvaWQgKmJ1ZiwgUFJJbnQz
MiBhbW91bnQsCiAgICBQUkludG4gZmxhZ3MsIFBSTmV0QWRkciAqYWRkciwgUFJJbnRlcnZhbFRp
bWUgdGltZW91dCk7CnR5cGVkZWYgUFJJbnQzMiAoICpQUlNlbmR0b0ZOKSgKICAgIFBSRmlsZURl
c2MgKmZkLCBjb25zdCB2b2lkICpidWYsIFBSSW50MzIgYW1vdW50LAogICAgUFJJbnRuIGZsYWdz
LCBjb25zdCBQUk5ldEFkZHIgKmFkZHIsIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwp0eXBlZGVm
IFBSSW50MTYgKCAqUFJQb2xsRk4pKAogICAgUFJGaWxlRGVzYyAqZmQsIFBSSW50MTYgaW5fZmxh
Z3MsIFBSSW50MTYgKm91dF9mbGFncyk7CnR5cGVkZWYgUFJJbnQzMiAoICpQUkFjY2VwdHJlYWRG
TikoCiAgICBQUkZpbGVEZXNjICpzZCwgUFJGaWxlRGVzYyAqKm5kLCBQUk5ldEFkZHIgKipyYWRk
ciwKICAgIHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQsIFBSSW50ZXJ2YWxUaW1lIHQpOwp0eXBl
ZGVmIFBSSW50MzIgKCAqUFJUcmFuc21pdGZpbGVGTikoCiAgICAgUFJGaWxlRGVzYyAqc2QsIFBS
RmlsZURlc2MgKmZkLCBjb25zdCB2b2lkICpoZWFkZXJzLAogICAgIFBSSW50MzIgaGxlbiwgUFJU
cmFuc21pdEZpbGVGbGFncyBmbGFncywgUFJJbnRlcnZhbFRpbWUgdCk7CnR5cGVkZWYgUFJTdGF0
dXMgKCAqUFJHZXRzb2NrbmFtZUZOKShQUkZpbGVEZXNjICpmZCwgUFJOZXRBZGRyICphZGRyKTsK
dHlwZWRlZiBQUlN0YXR1cyAoICpQUkdldHBlZXJuYW1lRk4pKFBSRmlsZURlc2MgKmZkLCBQUk5l
dEFkZHIgKmFkZHIpOwp0eXBlZGVmIFBSU3RhdHVzICggKlBSR2V0c29ja2V0b3B0aW9uRk4pKAog
ICAgUFJGaWxlRGVzYyAqZmQsIFBSU29ja2V0T3B0aW9uRGF0YSAqZGF0YSk7CnR5cGVkZWYgUFJT
dGF0dXMgKCAqUFJTZXRzb2NrZXRvcHRpb25GTikoCiAgICBQUkZpbGVEZXNjICpmZCwgY29uc3Qg
UFJTb2NrZXRPcHRpb25EYXRhICpkYXRhKTsKdHlwZWRlZiBQUkludDMyICggKlBSU2VuZGZpbGVG
TikoCiAgICAgICAgUFJGaWxlRGVzYyAqbmV0d29ya1NvY2tldCwgUFJTZW5kRmlsZURhdGEgKnNl
bmREYXRhLAogICAgICAgIFBSVHJhbnNtaXRGaWxlRmxhZ3MgZmxhZ3MsIFBSSW50ZXJ2YWxUaW1l
IHRpbWVvdXQpOwp0eXBlZGVmIFBSSW50biAoICpQUlJlc2VydmVkRk4pKFBSRmlsZURlc2MgKmZk
KTsKCnN0cnVjdCBQUklPTWV0aG9kcyB7CiAgICBQUkRlc2NUeXBlIGZpbGVfdHlwZTsKICAgIFBS
Q2xvc2VGTiBjbG9zZTsKICAgIFBSUmVhZEZOIHJlYWQ7CiAgICBQUldyaXRlRk4gd3JpdGU7CiAg
ICBQUkF2YWlsYWJsZUZOIGF2YWlsYWJsZTsKICAgIFBSQXZhaWxhYmxlNjRGTiBhdmFpbGFibGU2
NDsKICAgIFBSRnN5bmNGTiBmc3luYzsKICAgIFBSU2Vla0ZOIHNlZWs7CiAgICBQUlNlZWs2NEZO
IHNlZWs2NDsKICAgIFBSRmlsZUluZm9GTiBmaWxlSW5mbzsKICAgIFBSRmlsZUluZm82NEZOIGZp
bGVJbmZvNjQ7CiAgICBQUldyaXRldkZOIHdyaXRldjsKICAgIFBSQ29ubmVjdEZOIGNvbm5lY3Q7
CiAgICBQUkFjY2VwdEZOIGFjY2VwdDsKICAgIFBSQmluZEZOIGJpbmQ7CiAgICBQUkxpc3RlbkZO
IGxpc3RlbjsKICAgIFBSU2h1dGRvd25GTiBzaHV0ZG93bjsKICAgIFBSUmVjdkZOIHJlY3Y7CiAg
ICBQUlNlbmRGTiBzZW5kOwogICAgUFJSZWN2ZnJvbUZOIHJlY3Zmcm9tOwogICAgUFJTZW5kdG9G
TiBzZW5kdG87CiAgICBQUlBvbGxGTiBwb2xsOwogICAgUFJBY2NlcHRyZWFkRk4gYWNjZXB0cmVh
ZDsKICAgIFBSVHJhbnNtaXRmaWxlRk4gdHJhbnNtaXRmaWxlOwogICAgUFJHZXRzb2NrbmFtZUZO
IGdldHNvY2tuYW1lOwogICAgUFJHZXRwZWVybmFtZUZOIGdldHBlZXJuYW1lOwogICAgUFJSZXNl
cnZlZEZOIHJlc2VydmVkX2ZuXzY7CiAgICBQUlJlc2VydmVkRk4gcmVzZXJ2ZWRfZm5fNTsKICAg
IFBSR2V0c29ja2V0b3B0aW9uRk4gZ2V0c29ja2V0b3B0aW9uOwoKICAgIFBSU2V0c29ja2V0b3B0
aW9uRk4gc2V0c29ja2V0b3B0aW9uOwoKICAgIFBSU2VuZGZpbGVGTiBzZW5kZmlsZTsKICAgIFBS
UmVzZXJ2ZWRGTiByZXNlcnZlZF9mbl80OwogICAgUFJSZXNlcnZlZEZOIHJlc2VydmVkX2ZuXzM7
CiAgICBQUlJlc2VydmVkRk4gcmVzZXJ2ZWRfZm5fMjsKICAgIFBSUmVzZXJ2ZWRGTiByZXNlcnZl
ZF9mbl8xOwogICAgUFJSZXNlcnZlZEZOIHJlc2VydmVkX2ZuXzA7Cn07CiMgNDEwICIvaG9tZS9r
YWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgp0eXBl
ZGVmIGVudW0gUFJTcGVjaWFsRkQKewogICAgUFJfU3RhbmRhcmRJbnB1dCwKICAgIFBSX1N0YW5k
YXJkT3V0cHV0LAogICAgUFJfU3RhbmRhcmRFcnJvcgp9IFBSU3BlY2lhbEZEOwoKZXh0ZXJuIFBS
RmlsZURlc2MqIFBSX0dldFNwZWNpYWxGRChQUlNwZWNpYWxGRCBpZCk7CiMgNDU2ICIvaG9tZS9r
YWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRl
cm4gUFJEZXNjSWRlbnRpdHkgUFJfR2V0VW5pcXVlSWRlbnRpdHkoY29uc3QgY2hhciAqbGF5ZXJf
bmFtZSk7CmV4dGVybiBjb25zdCBjaGFyKiBQUl9HZXROYW1lRm9ySWRlbnRpdHkoUFJEZXNjSWRl
bnRpdHkgaWRlbnQpOwpleHRlcm4gUFJEZXNjSWRlbnRpdHkgUFJfR2V0TGF5ZXJzSWRlbnRpdHko
UFJGaWxlRGVzYyogZmQpOwpleHRlcm4gUFJGaWxlRGVzYyogUFJfR2V0SWRlbnRpdGllc0xheWVy
KFBSRmlsZURlc2MqIGZkX3N0YWNrLCBQUkRlc2NJZGVudGl0eSBpZCk7CiMgNDY5ICIvaG9tZS9r
YWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRl
cm4gY29uc3QgUFJJT01ldGhvZHMgKiBQUl9HZXREZWZhdWx0SU9NZXRob2RzKHZvaWQpOwojIDQ4
MCAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3By
aW8uaCIKZXh0ZXJuIFBSRmlsZURlc2MqIFBSX0NyZWF0ZUlPTGF5ZXJTdHViKAogICAgUFJEZXNj
SWRlbnRpdHkgaWRlbnQsIGNvbnN0IFBSSU9NZXRob2RzICptZXRob2RzKTsKIyA0OTcgIi9ob21l
L2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4
dGVybiBQUlN0YXR1cyBQUl9QdXNoSU9MYXllcigKICAgIFBSRmlsZURlc2MgKmZkX3N0YWNrLCBQ
UkRlc2NJZGVudGl0eSBpZCwgUFJGaWxlRGVzYyAqbGF5ZXIpOwojIDUxNCAiL2hvbWUva2FpL20v
MDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBS
RmlsZURlc2MqIFBSX1BvcElPTGF5ZXIoUFJGaWxlRGVzYyAqZmRfc3RhY2ssIFBSRGVzY0lkZW50
aXR5IGlkKTsKIyA1ODggIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2lu
Y2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkZpbGVEZXNjKiBQUl9PcGVuKGNvbnN0IGNoYXIg
Km5hbWUsIFBSSW50biBmbGFncywgUFJJbnRuIG1vZGUpOwojIDYxNCAiL2hvbWUva2FpL20vMDky
L21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSRmls
ZURlc2MqIFBSX09wZW5GaWxlKAogICAgY29uc3QgY2hhciAqbmFtZSwgUFJJbnRuIGZsYWdzLCBQ
UkludG4gbW9kZSk7CiMgNjM3ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlz
dC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfQ2xvc2UoUFJGaWxlRGVz
YyAqZmQpOwojIDY3MiAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5j
bHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSSW50MzIgUFJfUmVhZChQUkZpbGVEZXNjICpmZCwg
dm9pZCAqYnVmLCBQUkludDMyIGFtb3VudCk7CiMgNjk2ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxs
YS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJJbnQzMiBQUl9X
cml0ZShQUkZpbGVEZXNjICpmZCxjb25zdCB2b2lkICpidWYsUFJJbnQzMiBhbW91bnQpOwojIDcz
MCAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3By
aW8uaCIKZXh0ZXJuIFBSSW50MzIgUFJfV3JpdGV2KAogICAgUFJGaWxlRGVzYyAqZmQsIGNvbnN0
IFBSSU9WZWMgKmlvdiwgUFJJbnQzMiBpb3Zfc2l6ZSwKICAgIFBSSW50ZXJ2YWxUaW1lIHRpbWVv
dXQpOwojIDc1MSAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVk
ZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0RlbGV0ZShjb25zdCBjaGFyICpuYW1l
KTsKCgoKdHlwZWRlZiBlbnVtIFBSRmlsZVR5cGUKewogICAgUFJfRklMRV9GSUxFID0gMSwKICAg
IFBSX0ZJTEVfRElSRUNUT1JZID0gMiwKICAgIFBSX0ZJTEVfT1RIRVIgPSAzCn0gUFJGaWxlVHlw
ZTsKCnN0cnVjdCBQUkZpbGVJbmZvIHsKICAgIFBSRmlsZVR5cGUgdHlwZTsKICAgIFBST2Zmc2V0
MzIgc2l6ZTsKICAgIFBSVGltZSBjcmVhdGlvblRpbWU7CiAgICBQUlRpbWUgbW9kaWZ5VGltZTsK
fTsKCnN0cnVjdCBQUkZpbGVJbmZvNjQgewogICAgUFJGaWxlVHlwZSB0eXBlOwogICAgUFJPZmZz
ZXQ2NCBzaXplOwogICAgUFJUaW1lIGNyZWF0aW9uVGltZTsKICAgIFBSVGltZSBtb2RpZnlUaW1l
Owp9OwojIDc5NCAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVk
ZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0dldEZpbGVJbmZvKGNvbnN0IGNoYXIg
KmZuLCBQUkZpbGVJbmZvICppbmZvKTsKZXh0ZXJuIFBSU3RhdHVzIFBSX0dldEZpbGVJbmZvNjQo
Y29uc3QgY2hhciAqZm4sIFBSRmlsZUluZm82NCAqaW5mbyk7CiMgODE0ICIvaG9tZS9rYWkvbS8w
OTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJT
dGF0dXMgUFJfR2V0T3BlbkZpbGVJbmZvKFBSRmlsZURlc2MgKmZkLCBQUkZpbGVJbmZvICppbmZv
KTsKZXh0ZXJuIFBSU3RhdHVzIFBSX0dldE9wZW5GaWxlSW5mbzY0KFBSRmlsZURlc2MgKmZkLCBQ
UkZpbGVJbmZvNjQgKmluZm8pOwojIDgzMyAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1p
emVkL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1JlbmFtZShj
b25zdCBjaGFyICpmcm9tLCBjb25zdCBjaGFyICp0byk7CiMgODU5ICIvaG9tZS9rYWkvbS8wOTIv
bW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgp0eXBlZGVmIGVudW0g
UFJBY2Nlc3NIb3cgewogICAgUFJfQUNDRVNTX0VYSVNUUyA9IDEsCiAgICBQUl9BQ0NFU1NfV1JJ
VEVfT0sgPSAyLAogICAgUFJfQUNDRVNTX1JFQURfT0sgPSAzCn0gUFJBY2Nlc3NIb3c7CgpleHRl
cm4gUFJTdGF0dXMgUFJfQWNjZXNzKGNvbnN0IGNoYXIgKm5hbWUsIFBSQWNjZXNzSG93IGhvdyk7
CiMgOTAwICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25z
cHIvcHJpby5oIgpleHRlcm4gUFJPZmZzZXQzMiBQUl9TZWVrKFBSRmlsZURlc2MgKmZkLCBQUk9m
ZnNldDMyIG9mZnNldCwgUFJTZWVrV2hlbmNlIHdoZW5jZSk7CmV4dGVybiBQUk9mZnNldDY0IFBS
X1NlZWs2NChQUkZpbGVEZXNjICpmZCwgUFJPZmZzZXQ2NCBvZmZzZXQsIFBSU2Vla1doZW5jZSB3
aGVuY2UpOwojIDkyMyAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5j
bHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSSW50MzIgUFJfQXZhaWxhYmxlKFBSRmlsZURlc2Mg
KmZkKTsKZXh0ZXJuIFBSSW50NjQgUFJfQXZhaWxhYmxlNjQoUFJGaWxlRGVzYyAqZmQpOwojIDk0
MyAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3By
aW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1N5bmMoUFJGaWxlRGVzYyAqZmQpOwoKCgpzdHJ1Y3Qg
UFJEaXJFbnRyeSB7CiAgICBjb25zdCBjaGFyICpuYW1lOwp9OwojIDk3NSAiL2hvbWUva2FpL20v
MDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBS
RGlyKiBQUl9PcGVuRGlyKGNvbnN0IGNoYXIgKm5hbWUpOwojIDEwMDAgIi9ob21lL2thaS9tLzA5
Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCnR5cGVkZWYgZW51
bSBQUkRpckZsYWdzIHsKICAgIFBSX1NLSVBfTk9ORSA9IDB4MCwKICAgIFBSX1NLSVBfRE9UID0g
MHgxLAogICAgUFJfU0tJUF9ET1RfRE9UID0gMHgyLAogICAgUFJfU0tJUF9CT1RIID0gMHgzLAog
ICAgUFJfU0tJUF9ISURERU4gPSAweDQKfSBQUkRpckZsYWdzOwoKZXh0ZXJuIFBSRGlyRW50cnkq
IFBSX1JlYWREaXIoUFJEaXIgKmRpciwgUFJEaXJGbGFncyBmbGFncyk7CiMgMTAyNyAiL2hvbWUv
a2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0
ZXJuIFBSU3RhdHVzIFBSX0Nsb3NlRGlyKFBSRGlyICpkaXIpOwojIDEwNDkgIi9ob21lL2thaS9t
LzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQ
UlN0YXR1cyBQUl9Na0Rpcihjb25zdCBjaGFyICpuYW1lLCBQUkludG4gbW9kZSk7CiMgMTA2MSAi
L2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8u
aCIKZXh0ZXJuIFBSU3RhdHVzIFBSX01ha2VEaXIoY29uc3QgY2hhciAqbmFtZSwgUFJJbnRuIG1v
ZGUpOwojIDEwODEgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1
ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9SbURpcihjb25zdCBjaGFyICpuYW1l
KTsKIyAxMTAwICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRl
L25zcHIvcHJpby5oIgpleHRlcm4gUFJGaWxlRGVzYyogUFJfTmV3VURQU29ja2V0KHZvaWQpOwoj
IDExMTkgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNw
ci9wcmlvLmgiCmV4dGVybiBQUkZpbGVEZXNjKiBQUl9OZXdUQ1BTb2NrZXQodm9pZCk7CiMgMTEz
OSAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3By
aW8uaCIKZXh0ZXJuIFBSRmlsZURlc2MqIFBSX09wZW5VRFBTb2NrZXQoUFJJbnRuIGFmKTsKIyAx
MTU5ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIv
cHJpby5oIgpleHRlcm4gUFJGaWxlRGVzYyogUFJfT3BlblRDUFNvY2tldChQUkludG4gYWYpOwoj
IDExODMgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNw
ci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9Db25uZWN0KAogICAgUFJGaWxlRGVzYyAqZmQs
IGNvbnN0IFBSTmV0QWRkciAqYWRkciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMgMTIxMiAi
L2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8u
aCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0dldENvbm5lY3RTdGF0dXMoY29uc3QgUFJQb2xsRGVzYyAq
cGQpOwojIDEyMzYgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1
ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkZpbGVEZXNjKiBQUl9BY2NlcHQoCiAgICBQUkZpbGVE
ZXNjICpmZCwgUFJOZXRBZGRyICphZGRyLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKIyAxMjU4
ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJp
by5oIgpleHRlcm4gUFJTdGF0dXMgUFJfQmluZChQUkZpbGVEZXNjICpmZCwgY29uc3QgUFJOZXRB
ZGRyICphZGRyKTsKIyAxMjgwICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlz
dC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfTGlzdGVuKFBSRmlsZURl
c2MgKmZkLCBQUkludG4gYmFja2xvZyk7CiMgMTMwNCAiL2hvbWUva2FpL20vMDkyL21vemlsbGEt
b3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKdHlwZWRlZiBlbnVtIFBSU2h1dGRv
d25Ib3cKewogICAgUFJfU0hVVERPV05fUkNWID0gMCwKICAgIFBSX1NIVVRET1dOX1NFTkQgPSAx
LAogICAgUFJfU0hVVERPV05fQk9USCA9IDIKfSBQUlNodXRkb3duSG93OwoKZXh0ZXJuIFBSU3Rh
dHVzIFBSX1NodXRkb3duKFBSRmlsZURlc2MgKmZkLCBQUlNodXRkb3duSG93IGhvdyk7CiMgMTM0
MiAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3By
aW8uaCIKZXh0ZXJuIFBSSW50MzIgUFJfUmVjdihQUkZpbGVEZXNjICpmZCwgdm9pZCAqYnVmLCBQ
UkludDMyIGFtb3VudCwKICAgICAgICAgICAgICAgIFBSSW50biBmbGFncywgUFJJbnRlcnZhbFRp
bWUgdGltZW91dCk7CiMgMTM3MyAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rp
c3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSSW50MzIgUFJfU2VuZChQUkZpbGVEZXNj
ICpmZCwgY29uc3Qgdm9pZCAqYnVmLCBQUkludDMyIGFtb3VudCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUkludG4gZmxhZ3MsIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwojIDE0
MDggIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9w
cmlvLmgiCmV4dGVybiBQUkludDMyIFBSX1JlY3ZGcm9tKAogICAgUFJGaWxlRGVzYyAqZmQsIHZv
aWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQsIFBSSW50biBmbGFncywKICAgIFBSTmV0QWRkciAqYWRk
ciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMgMTQ0MSAiL2hvbWUva2FpL20vMDkyL21vemls
bGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSSW50MzIgUFJf
U2VuZFRvKAogICAgUFJGaWxlRGVzYyAqZmQsIGNvbnN0IHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91
bnQsIFBSSW50biBmbGFncywKICAgIGNvbnN0IFBSTmV0QWRkciAqYWRkciwgUFJJbnRlcnZhbFRp
bWUgdGltZW91dCk7CiMgMTQ4MSAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rp
c3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSSW50MzIgUFJfVHJhbnNtaXRGaWxlKAog
ICAgUFJGaWxlRGVzYyAqbmV0d29ya1NvY2tldCwgUFJGaWxlRGVzYyAqc291cmNlRmlsZSwKICAg
IGNvbnN0IHZvaWQgKmhlYWRlcnMsIFBSSW50MzIgaGxlbiwgUFJUcmFuc21pdEZpbGVGbGFncyBm
bGFncywKICAgIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwojIDE1MjAgIi9ob21lL2thaS9tLzA5
Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCnN0cnVjdCBQUlNl
bmRGaWxlRGF0YSB7CiAgICAgICAgUFJGaWxlRGVzYyAqZmQ7CiAgICAgICAgUFJVaW50MzIgZmls
ZV9vZmZzZXQ7CiAgICAgICAgUFJTaXplIGZpbGVfbmJ5dGVzOwoKCiAgICAgICAgY29uc3Qgdm9p
ZCAqaGVhZGVyOwogICAgICAgIFBSSW50MzIgaGxlbjsKICAgICAgICBjb25zdCB2b2lkICp0cmFp
bGVyOwogICAgICAgIFBSSW50MzIgdGxlbjsKfTsKCgpleHRlcm4gUFJJbnQzMiBQUl9TZW5kRmls
ZSgKICAgIFBSRmlsZURlc2MgKm5ldHdvcmtTb2NrZXQsIFBSU2VuZEZpbGVEYXRhICpzZW5kRGF0
YSwKICAgICAgICBQUlRyYW5zbWl0RmlsZUZsYWdzIGZsYWdzLCBQUkludGVydmFsVGltZSB0aW1l
b3V0KTsKIyAxNTg3ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNs
dWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJJbnQzMiBQUl9BY2NlcHRSZWFkKAogICAgUFJGaWxl
RGVzYyAqbGlzdGVuU29jaywgUFJGaWxlRGVzYyAqKmFjY2VwdGVkU29jaywKICAgIFBSTmV0QWRk
ciAqKnBlZXJBZGRyLCB2b2lkICpidWYsIFBSSW50MzIgYW1vdW50LCBQUkludGVydmFsVGltZSB0
aW1lb3V0KTsKIyAxNjExICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9p
bmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfTmV3VENQU29ja2V0UGFpcihQ
UkZpbGVEZXNjICpmZHNbMl0pOwojIDE2MzEgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGlt
aXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9HZXRTb2Nr
TmFtZShQUkZpbGVEZXNjICpmZCwgUFJOZXRBZGRyICphZGRyKTsKIyAxNjUzICIvaG9tZS9rYWkv
bS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4g
UFJTdGF0dXMgUFJfR2V0UGVlck5hbWUoUFJGaWxlRGVzYyAqZmQsIFBSTmV0QWRkciAqYWRkcik7
CgpleHRlcm4gUFJTdGF0dXMgUFJfR2V0U29ja2V0T3B0aW9uKAogICAgUFJGaWxlRGVzYyAqZmQs
IFBSU29ja2V0T3B0aW9uRGF0YSAqZGF0YSk7CgpleHRlcm4gUFJTdGF0dXMgUFJfU2V0U29ja2V0
T3B0aW9uKAogICAgUFJGaWxlRGVzYyAqZmQsIGNvbnN0IFBSU29ja2V0T3B0aW9uRGF0YSAqZGF0
YSk7CiMgMTY4OCAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVk
ZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1NldEZESW5oZXJpdGFibGUoCiAgICBQ
UkZpbGVEZXNjICpmZCwKICAgIFBSQm9vbCBpbmhlcml0YWJsZSk7CiMgMTcwOCAiL2hvbWUva2Fp
L20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJu
IFBSRmlsZURlc2MgKiBQUl9HZXRJbmhlcml0ZWRGRChjb25zdCBjaGFyICpuYW1lKTsKIyAxNzE4
ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJp
by5oIgp0eXBlZGVmIHN0cnVjdCBQUkZpbGVNYXAgUFJGaWxlTWFwOwoKCgoKdHlwZWRlZiBlbnVt
IFBSRmlsZU1hcFByb3RlY3QgewogICAgUFJfUFJPVF9SRUFET05MWSwKICAgIFBSX1BST1RfUkVB
RFdSSVRFLAogICAgUFJfUFJPVF9XUklURUNPUFkKfSBQUkZpbGVNYXBQcm90ZWN0OwoKZXh0ZXJu
IFBSRmlsZU1hcCAqIFBSX0NyZWF0ZUZpbGVNYXAoCiAgICBQUkZpbGVEZXNjICpmZCwKICAgIFBS
SW50NjQgc2l6ZSwKICAgIFBSRmlsZU1hcFByb3RlY3QgcHJvdCk7CgpleHRlcm4gdm9pZCAqIFBS
X01lbU1hcCgKICAgIFBSRmlsZU1hcCAqZm1hcCwKICAgIFBST2Zmc2V0NjQgb2Zmc2V0LAogICAg
UFJVaW50MzIgbGVuKTsKCmV4dGVybiBQUlN0YXR1cyBQUl9NZW1Vbm1hcCh2b2lkICphZGRyLCBQ
UlVpbnQzMiBsZW4pOwoKZXh0ZXJuIFBSU3RhdHVzIFBSX0Nsb3NlRmlsZU1hcChQUkZpbGVNYXAg
KmZtYXApOwojIDE3NTYgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2lu
Y2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9DcmVhdGVQaXBlKAogICAgUFJG
aWxlRGVzYyAqKnJlYWRQaXBlLAogICAgUFJGaWxlRGVzYyAqKndyaXRlUGlwZQopOwoKCgoKCnN0
cnVjdCBQUlBvbGxEZXNjIHsKICAgIFBSRmlsZURlc2MqIGZkOwogICAgUFJJbnQxNiBpbl9mbGFn
czsKICAgIFBSSW50MTYgb3V0X2ZsYWdzOwp9OwojIDE4MzIgIi9ob21lL2thaS9tLzA5Mi9tb3pp
bGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBS
X1BvbGwoCiAgICBQUlBvbGxEZXNjICpwZHMsIFBSSW50biBucGRzLCBQUkludGVydmFsVGltZSB0
aW1lb3V0KTsKIyAxODc2ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9p
bmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJGaWxlRGVzYyAqIFBSX05ld1BvbGxhYmxlRXZl
bnQodm9pZCk7CgpleHRlcm4gUFJTdGF0dXMgUFJfRGVzdHJveVBvbGxhYmxlRXZlbnQoUFJGaWxl
RGVzYyAqZXZlbnQpOwoKZXh0ZXJuIFBSU3RhdHVzIFBSX1NldFBvbGxhYmxlRXZlbnQoUFJGaWxl
RGVzYyAqZXZlbnQpOwoKZXh0ZXJuIFBSU3RhdHVzIFBSX1dhaXRGb3JQb2xsYWJsZUV2ZW50KFBS
RmlsZURlc2MgKmV2ZW50KTsKCn0KIyAxOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxv
Y2FsRmlsZS5oIiAyCiMgMSAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3Qv
aW5jbHVkZS9uc3ByL3BybGluay5oIiAxCiMgMjUgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9w
dGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcmxpbmsuaCIKIyAxICIvaG9tZS9rYWkvbS8wOTIv
bW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMjYgIi9o
b21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcmxpbmsu
aCIgMgoKZXh0ZXJuICJDIiB7Cgp0eXBlZGVmIHN0cnVjdCBQUkxpYnJhcnkgUFJMaWJyYXJ5OwoK
dHlwZWRlZiBzdHJ1Y3QgUFJTdGF0aWNMaW5rVGFibGUgewogICAgY29uc3QgY2hhciAqbmFtZTsK
ICAgIHZvaWQgKCpmcCkoKTsKfSBQUlN0YXRpY0xpbmtUYWJsZTsKIyA0MyAiL2hvbWUva2FpL20v
MDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3BybGluay5oIgpleHRlcm4g
UFJTdGF0dXMgUFJfU2V0TGlicmFyeVBhdGgoY29uc3QgY2hhciAqcGF0aCk7CiMgNTMgIi9ob21l
L2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcmxpbmsuaCIK
ZXh0ZXJuIGNoYXIqIFBSX0dldExpYnJhcnlQYXRoKHZvaWQpOwojIDY2ICIvaG9tZS9rYWkvbS8w
OTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJsaW5rLmgiCmV4dGVybiBj
aGFyKiBQUl9HZXRMaWJyYXJ5TmFtZShjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmxpYik7
CgoKCgoKZXh0ZXJuIHZvaWQgUFJfRnJlZUxpYnJhcnlOYW1lKGNoYXIgKm1lbSk7CiMgODYgIi9o
b21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9wcmxpbmsu
aCIKZXh0ZXJuIFBSTGlicmFyeSogUFJfTG9hZExpYnJhcnkoY29uc3QgY2hhciAqbmFtZSk7CiMg
MTA3ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6ZWQvZGlzdC9pbmNsdWRlL25zcHIv
cHJsaW5rLmgiCnR5cGVkZWYgZW51bSBQUkxpYlNwZWNUeXBlIHsKICAgIFBSX0xpYlNwZWNfUGF0
aG5hbWUsCiAgICBQUl9MaWJTcGVjX01hY05hbWVkRnJhZ21lbnQsCiAgICBQUl9MaWJTcGVjX01h
Y0luZGV4ZWRGcmFnbWVudAp9IFBSTGliU3BlY1R5cGU7CgpzdHJ1Y3QgRlNTcGVjOwoKdHlwZWRl
ZiBzdHJ1Y3QgUFJMaWJTcGVjIHsKICAgIFBSTGliU3BlY1R5cGUgdHlwZTsKICAgIHVuaW9uIHsK
CiAgICAgICAgY29uc3QgY2hhciAqcGF0aG5hbWU7CgoKICAgICAgICBzdHJ1Y3QgewogICAgICAg
ICAgICBjb25zdCBzdHJ1Y3QgRlNTcGVjICpmc3NwZWM7CiAgICAgICAgICAgIGNvbnN0IGNoYXIg
Km5hbWU7CiAgICAgICAgfSBtYWNfbmFtZWRfZnJhZ21lbnQ7CgoKICAgICAgICBzdHJ1Y3Qgewog
ICAgICAgICAgICBjb25zdCBzdHJ1Y3QgRlNTcGVjICpmc3NwZWM7CiAgICAgICAgICAgIFBSVWlu
dDMyIGluZGV4OwogICAgICAgIH0gbWFjX2luZGV4ZWRfZnJhZ21lbnQ7CiAgICB9IHZhbHVlOwp9
IFBSTGliU3BlYzsKIyAxNTAgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0
L2luY2x1ZGUvbnNwci9wcmxpbmsuaCIKZXh0ZXJuIFBSTGlicmFyeSAqClBSX0xvYWRMaWJyYXJ5
V2l0aEZsYWdzKAogICAgUFJMaWJTcGVjIGxpYlNwZWMsCiAgICBQUkludG4gZmxhZ3MKKTsKIyAx
NjUgIi9ob21lL2thaS9tLzA5Mi9tb3ppbGxhLW9wdGltaXplZC9kaXN0L2luY2x1ZGUvbnNwci9w
cmxpbmsuaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1VubG9hZExpYnJhcnkoUFJMaWJyYXJ5ICpsaWIp
OwojIDE3NSAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9u
c3ByL3BybGluay5oIgpleHRlcm4gdm9pZCogUFJfRmluZFN5bWJvbChQUkxpYnJhcnkgKmxpYiwg
Y29uc3QgY2hhciAqbmFtZSk7CiMgMTg3ICIvaG9tZS9rYWkvbS8wOTIvbW96aWxsYS1vcHRpbWl6
ZWQvZGlzdC9pbmNsdWRlL25zcHIvcHJsaW5rLmgiCmV4dGVybiB2b2lkKiBQUl9GaW5kU3ltYm9s
QW5kTGlicmFyeShjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUkxpYnJhcnkqICpsaWIpOwojIDIwMSAiL2hvbWUv
a2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3BybGluay5oIgpl
eHRlcm4gUFJMaWJyYXJ5KiBQUl9Mb2FkU3RhdGljTGlicmFyeSgKICAgIGNvbnN0IGNoYXIgKm5h
bWUsIGNvbnN0IFBSU3RhdGljTGlua1RhYmxlICp0YWJsZSk7Cgp9CiMgMTkgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lMb2NhbEZpbGUuaCIgMgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAy
MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxvY2FsRmlsZS5oIiAyCiMgMjggIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lMb2NhbEZpbGUuaCIKY2xhc3MgbnNJTG9jYWxGaWxlIDog
cHVibGljIG5zSUZpbGUgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgp
IHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YWE2MTBmMjAsIDB4YTg4OSwgMHgxMWQzLCB7
IDB4OGMsIDB4ODEsIDB4MDAsIDB4MDAsIDB4NjQsIDB4NjUsIDB4NzMsIDB4NzQgfX07IHJldHVy
biBpaWQ7fQojIDUxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTG9jYWxGaWxlLmgiCiAg
dmlydHVhbCBuc3Jlc3VsdCBJbml0V2l0aFBhdGgoY29uc3QgY2hhciAqZmlsZVBhdGgpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdFdpdGhVbmljb2RlUGF0aChjb25zdCBQUlVuaWNoYXIg
KmZpbGVQYXRoKSA9IDA7CiMgNzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lMb2NhbEZp
bGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZvbGxvd0xpbmtzKFBSQm9vbCAqYUZvbGxvd0xp
bmtzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGb2xsb3dMaW5rcyhQUkJvb2wgYUZvbGxv
d0xpbmtzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9wZW5OU1BSRmlsZURlc2MoUFJJbnQz
MiBmbGFncywgUFJJbnQzMiBtb2RlLCBQUkZpbGVEZXNjICogKl9yZXR2YWwpID0gMDsKCgogIHZp
cnR1YWwgbnNyZXN1bHQgT3BlbkFOU0lGaWxlRGVzYyhjb25zdCBjaGFyICptb2RlLCBGSUxFICog
Kl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTG9hZChQUkxpYnJhcnkgKiAqX3Jl
dHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREaXNrU3BhY2VBdmFpbGFibGUoUFJJ
bnQ2NCAqYURpc2tTcGFjZUF2YWlsYWJsZSkgPSAwOwojIDk3ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJTG9jYWxGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBcHBlbmRSZWxhdGl2ZVBh
dGgoY29uc3QgY2hhciAqcmVsYXRpdmVGaWxlUGF0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBBcHBlbmRSZWxhdGl2ZVVuaWNvZGVQYXRoKGNvbnN0IFBSVW5pY2hhciAqcmVsYXRpdmVGaWxl
UGF0aCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGVyc2lzdGVudERlc2NyaXB0
b3IoY2hhciAqICphUGVyc2lzdGVudERlc2NyaXB0b3IpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0
IFNldFBlcnNpc3RlbnREZXNjcmlwdG9yKGNvbnN0IGNoYXIgKiBhUGVyc2lzdGVudERlc2NyaXB0
b3IpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXZlYWwodm9pZCkgPSAwOwoKCgoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IExhdW5jaCh2b2lkKSA9IDA7Cgp9OwojIDI5MyAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUxvY2FsRmlsZS5oIgpleHRlcm4gIkMiIG5zcmVzdWx0Ck5T
X05ld0xvY2FsRmlsZShjb25zdCBjaGFyKiBwYXRoLCBQUkJvb2wgZm9sbG93TGlua3MsIG5zSUxv
Y2FsRmlsZSogKnJlc3VsdCk7CmV4dGVybiAiQyIgbnNyZXN1bHQKTlNfTmV3VW5pY29kZUxvY2Fs
RmlsZShjb25zdCBQUlVuaWNoYXIqIHBhdGgsIFBSQm9vbCBmb2xsb3dMaW5rcywgbnNJTG9jYWxG
aWxlKiAqcmVzdWx0KTsKIyAxNjEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVj
LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIgMQojIDE2MiAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIgMgojIDE3OCAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIKIyAxICIvdXNyL2luY2x1ZGUvZGlyZW50Lmgi
IDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVh
dHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMiAzCgpleHRlcm4gIkMi
IHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVk
ZS9kaXJlbnQuaCIgMiAzCiMgNjIgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL2RpcmVudC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvZGlyZW50
LmgiIDMKc3RydWN0IGRpcmVudAogIHsKCiAgICBfX2lub190IGRfaW5vOwogICAgX19vZmZfdCBk
X29mZjsKCgoKCiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgZF9yZWNsZW47CiAgICB1bnNpZ25lZCBj
aGFyIGRfdHlwZTsKICAgIGNoYXIgZF9uYW1lWzI1Nl07CiAgfTsKCgpzdHJ1Y3QgZGlyZW50NjQK
ICB7CiAgICBfX2lubzY0X3QgZF9pbm87CiAgICBfX29mZjY0X3QgZF9vZmY7CiAgICB1bnNpZ25l
ZCBzaG9ydCBpbnQgZF9yZWNsZW47CiAgICB1bnNpZ25lZCBjaGFyIGRfdHlwZTsKICAgIGNoYXIg
ZF9uYW1lWzI1Nl07CiAgfTsKIyA2MyAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAyIDMKIyA5OCAi
L3Vzci9pbmNsdWRlL2RpcmVudC5oIiAzCmVudW0KICB7CiAgICBEVF9VTktOT1dOID0gMCwKCiAg
ICBEVF9GSUZPID0gMSwKCiAgICBEVF9DSFIgPSAyLAoKICAgIERUX0RJUiA9IDQsCgogICAgRFRf
QkxLID0gNiwKCiAgICBEVF9SRUcgPSA4LAoKICAgIERUX0xOSyA9IDEwLAoKICAgIERUX1NPQ0sg
PSAxMiwKCiAgICBEVF9XSFQgPSAxNAoKICB9OwojIDEyOCAiL3Vzci9pbmNsdWRlL2RpcmVudC5o
IiAzCnR5cGVkZWYgc3RydWN0IF9fZGlyc3RyZWFtIERJUjsKCgoKZXh0ZXJuIERJUiAqb3BlbmRp
ciAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGNsb3NlZGly
IChESVIgKl9fZGlycCkgdGhyb3cgKCk7CiMgMTQ2ICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMK
ZXh0ZXJuIHN0cnVjdCBkaXJlbnQgKnJlYWRkaXIgKERJUiAqX19kaXJwKSB0aHJvdyAoKTsKIyAx
NTYgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwpleHRlcm4gc3RydWN0IGRpcmVudDY0ICpyZWFk
ZGlyNjQgKERJUiAqX19kaXJwKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCByZWFkZGlyX3Ig
KERJUiAqX19yZXN0cmljdCBfX2RpcnAsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGly
ZW50ICpfX3Jlc3RyaWN0IF9fZW50cnksCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGly
ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CiMgMTc5ICIvdXNyL2luY2x1ZGUv
ZGlyZW50LmgiIDMKZXh0ZXJuIGludCByZWFkZGlyNjRfciAoRElSICpfX3Jlc3RyaWN0IF9fZGly
cCwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRpcmVudDY0ICpfX3Jlc3RyaWN0IF9f
ZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkaXJlbnQ2NCAqKl9fcmVzdHJp
Y3QgX19yZXN1bHQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcmV3aW5kZGlyIChESVIgKl9f
ZGlycCkgdGhyb3cgKCk7CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAx
OTAgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMiAzCgoKZXh0ZXJuIHZvaWQgc2Vla2RpciAoRElS
ICpfX2RpcnAsIGxvbmcgaW50IF9fcG9zKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgdGVs
bGRpciAoRElSICpfX2RpcnApIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZGlyZmQgKERJUiAq
X19kaXJwKSB0aHJvdyAoKTsKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xp
bS5oIiAxIDMKIyAyMTAgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMiAzCiMgMjIwICIvdXNyL2lu
Y2x1ZGUvZGlyZW50LmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDIyMSAiL3Vzci9pbmNs
dWRlL2RpcmVudC5oIiAyIDMKCgoKCgoKZXh0ZXJuIGludCBzY2FuZGlyIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19kaXIsCiAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRpcmVudCAqKipf
X3Jlc3RyaWN0IF9fbmFtZWxpc3QsCiAgICAgICAgICAgICAgICAgICAgaW50ICgqX19zZWxlY3Rv
cikgKF9fY29uc3Qgc3RydWN0IGRpcmVudCAqKSwKICAgICAgICAgICAgICAgICAgICBpbnQgKCpf
X2NtcCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKikpIHRocm93ICgpOwojIDI0NyAi
L3Vzci9pbmNsdWRlL2RpcmVudC5oIiAzCmV4dGVybiBpbnQgc2NhbmRpcjY0IChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19kaXIsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGlyZW50
NjQgKioqX19yZXN0cmljdCBfX25hbWVsaXN0LAogICAgICAgICAgICAgICAgICAgICAgaW50ICgq
X19zZWxlY3RvcikgKF9fY29uc3Qgc3RydWN0IGRpcmVudDY0ICopLAogICAgICAgICAgICAgICAg
ICAgICAgaW50ICgqX19jbXApIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBpbnQgYWxwaGFzb3J0IChfX2NvbnN0IHZvaWQgKl9fZTEsIF9fY29u
c3Qgdm9pZCAqX19lMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
IyAyNjkgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwpleHRlcm4gaW50IGFscGhhc29ydDY0IChf
X2NvbnN0IHZvaWQgKl9fZTEsIF9fY29uc3Qgdm9pZCAqX19lMikKICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gaW50IHZlcnNpb25zb3J0IChfX2Nv
bnN0IHZvaWQgKl9fZTEsIF9fY29uc3Qgdm9pZCAqX19lMikKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKIyAyOTAgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwpleHRl
cm4gaW50IHZlcnNpb25zb3J0NjQgKF9fY29uc3Qgdm9pZCAqX19lMSwgX19jb25zdCB2b2lkICpf
X2UyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwojIDMwMCAiL3Vz
ci9pbmNsdWRlL2RpcmVudC5oIiAzCmV4dGVybiBfX3NzaXplX3QgZ2V0ZGlyZW50cmllcyAoaW50
IF9fZmQsIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IF9fbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
b2ZmX3QgKl9fcmVzdHJpY3QgX19iYXNlcCkgdGhyb3cgKCk7CiMgMzE2ICIvdXNyL2luY2x1ZGUv
ZGlyZW50LmgiIDMKZXh0ZXJuIF9fc3NpemVfdCBnZXRkaXJlbnRyaWVzNjQgKGludCBfX2ZkLCBj
aGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vZmY2
NF90ICpfX3Jlc3RyaWN0IF9fYmFzZXApIHRocm93ICgpOwoKCgoKfQojIDE3OSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIgMgojIDE5NyAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zRmlsZVNwZWMuaCIKY2xhc3MgbnNGaWxlU3BlYzsKY2xhc3MgbnNGaWxlUGF0aDsK
Y2xhc3MgbnNGaWxlVVJMOwpjbGFzcyBuc05TUFJQYXRoOwpjbGFzcyBuc1BlcnNpc3RlbnRGaWxl
RGVzY3JpcHRvcjsKCgoKCmNsYXNzIG5zT3V0cHV0U3RyZWFtOwpjbGFzcyBuc0lucHV0U3RyZWFt
OwpjbGFzcyBuc0lPdXRwdXRTdHJlYW07CmNsYXNzIG5zSUlucHV0U3RyZWFtOwpjbGFzcyBuc091
dHB1dEZpbGVTdHJlYW07CmNsYXNzIG5zSW5wdXRGaWxlU3RyZWFtOwpjbGFzcyBuc091dHB1dENv
bnNvbGVTdHJlYW07CgpjbGFzcyBuc1N0cmluZzsKCmNsYXNzIG5zSVVuaWNvZGVFbmNvZGVyOwpj
bGFzcyBuc0lVbmljb2RlRGVjb2RlcjsKIyAyMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0ZpbGVTcGVjLmgiCm5zcmVzdWx0IG5zX2ZpbGVfY29udmVydF9yZXN1bHQoUFJJbnQzMiBuYXRp
dmVFcnIpOwoKCgpjbGFzcyBuc0F1dG9DU3RyaW5nCiMgMjQ3ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNGaWxlU3BlYy5oIgp7CnB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNBdXRvQ1N0cmluZyhjb25zdCBuc1N0cmluZyYgb3RoZXIpIDogbUNTdHJpbmcob3Ro
ZXIuVG9OZXdDU3RyaW5nKCkpIHt9CiAgICB2aXJ0dWFsIH5uc0F1dG9DU3RyaW5nKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yIGNvbnN0IGNoYXIqKCkgY29uc3Qg
eyByZXR1cm4gbUNTdHJpbmc7IH0KCgoKCnByb3RlY3RlZDoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogbUNTdHJpbmc7Cn07CgoKY2xhc3MgbnNTaW1wbGVDaGFy
U3RyaW5nCgoKCnsKcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1Np
bXBsZUNoYXJTdHJpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNTaW1w
bGVDaGFyU3RyaW5nKGNvbnN0IGNoYXIqKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNTaW1wbGVDaGFyU3RyaW5nKGNvbnN0IG5zU3RyaW5nJik7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zU2ltcGxlQ2hhclN0cmluZyhjb25zdCBuc1NpbXBsZUNoYXJTdHJp
bmcmKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNTaW1wbGVDaGFyU3RyaW5n
KGNvbnN0IGNoYXIqIGluRGF0YSwgUFJVaW50MzIgaW5MZW5ndGgpOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfm5zU2ltcGxlQ2hhclN0cmluZygpOwoKICAgIHZvaWQgb3BlcmF0
b3IgPSAoY29uc3QgY2hhciopOwogICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBuc1N0cmluZyYp
OwogICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBuc1NpbXBsZUNoYXJTdHJpbmcmKTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yIGNvbnN0IGNoYXIqKCkgY29uc3Qg
eyByZXR1cm4gbURhdGEgPyBtRGF0YS0+bVN0cmluZyA6IDA7IH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3BlcmF0b3IgY2hhciogKCkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhbGxvY0Rh
dGEoTGVuZ3RoKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1EYXRhID8gbURhdGEtPm1TdHJpbmcgOiAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICBQUkJvb2wgb3BlcmF0b3IgPT0gKGNvbnN0IGNoYXIqKTsKICAgIFBSQm9vbCBv
cGVyYXRvciA9PSAoY29uc3QgbnNTdHJpbmcmKTsKICAgIFBSQm9vbCBvcGVyYXRvciA9PSAoY29u
c3QgbnNTaW1wbGVDaGFyU3RyaW5nJik7CgogICAgdm9pZCBvcGVyYXRvciArPSAoY29uc3QgY2hh
ciogaW5TdHJpbmcpOwogICAgbnNTaW1wbGVDaGFyU3RyaW5nIG9wZXJhdG9yICsgKGNvbnN0IGNo
YXIqIGluU3RyaW5nKSBjb25zdDsKCiAgICBjaGFyIG9wZXJhdG9yIFtdKGludCBpKSBjb25zdCB7
IHJldHVybiBtRGF0YSA/IG1EYXRhLT5tU3RyaW5nW2ldIDogJ1wwJzsgfQogICAgY2hhciYgb3Bl
cmF0b3IgW10oaW50IGkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID49IChpbnQpTGVuZ3RoKCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhbGxvY0RhdGEoKFBSVWlu
dDMyKWkgKyAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBt
RGF0YS0+bVN0cmluZ1tpXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
Y2hhciYgb3BlcmF0b3IgW10odW5zaWduZWQgaW50IGkpIHsgcmV0dXJuICgqdGhpcylbKGludClp
XTsgfQoKICAgIHZvaWQgQ2F0ZW5hdGUoY29uc3QgY2hhciogaW5TdHJpbmcxLCBjb25zdCBjaGFy
KiBpblN0cmluZzIpOwoKICAgIHZvaWQgU2V0VG9FbXB0eSgpOwogICAgUFJCb29sIElzRW1wdHko
KSBjb25zdCB7IHJldHVybiBMZW5ndGgoKSA9PSAwOyB9CgogICAgUFJVaW50MzIgTGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbURhdGEgPyBtRGF0YS0+bUxlbmd0aCA6IDA7IH0KICAgIHZvaWQgU2V0
TGVuZ3RoKFBSVWludDMyIGluTGVuZ3RoKSB7IFJlYWxsb2NEYXRhKGluTGVuZ3RoKTsgfQogICAg
dm9pZCBDb3B5RnJvbShjb25zdCBjaGFyKiBpbkRhdGEsIFBSVWludDMyIGluTGVuZ3RoKTsKICAg
IHZvaWQgTGVhZlJlcGxhY2UoY2hhciBpblNlcGFyYXRvciwgY29uc3QgY2hhciogaW5MZWFmTmFt
ZSk7CiAgICBjaGFyKiBHZXRMZWFmKGNoYXIgaW5TZXBhcmF0b3IpIGNvbnN0OwogICAgdm9pZCBV
bmVzY2FwZSgpOwoKcHJvdGVjdGVkOgoKICAgIHZvaWQgQWRkUmVmRGF0YSgpOwogICAgdm9pZCBS
ZWxlYXNlRGF0YSgpOwogICAgdm9pZCBSZWFsbG9jRGF0YShQUlVpbnQzMiBpbkxlbmd0aCk7CgoK
CgoKcHJvdGVjdGVkOgoKICAgIHN0cnVjdCBEYXRhIHsKICAgICAgICBpbnQgbVJlZkNvdW50Owog
ICAgICAgIFBSVWludDMyIG1MZW5ndGg7CiAgICAgICAgY2hhciBtU3RyaW5nWzFdOwogICAgICAg
IH07CiAgICBEYXRhKiBtRGF0YTsKfTsKCgpjbGFzcyBuc0ZpbGVTcGVjCgoKCnsKICAgIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZpbGVTcGVjKCk7CgoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZpbGVTcGVjKGNvbnN0IGNoYXIqIGluTmF0aXZl
UGF0aCwgUFJCb29sIGluQ3JlYXRlRGlycyA9IDApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zRmlsZVNwZWMoY29uc3QgbnNTdHJpbmcmIGluTmF0aXZlUGF0aCwgUFJCb29sIGlu
Q3JlYXRlRGlycyA9IDApOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxl
U3BlYyhjb25zdCBuc0ZpbGVQYXRoJiBpblBhdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zRmlsZVNwZWMoY29uc3QgbnNGaWxlVVJMJiBpblVSTCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNGaWxlU3BlYyhjb25zdCBuc1BlcnNpc3RlbnRGaWxlRGVzY3Jp
cHRvciYgaW5VUkwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRmlsZVNwZWMo
Y29uc3QgbnNGaWxlU3BlYyYgaW5QYXRoKTsKICAgICAgICB2aXJ0dWFsIH5uc0ZpbGVTcGVjKCk7
CgoKICAgICAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IGNoYXIqIGluTmF0aXZlUGF0aCk7CiAg
ICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBuc1N0cmluZyYgaW5OYXRpdmVQYXRoKTsKCiAg
ICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBuc0ZpbGVQYXRoJiBpblBhdGgpOwogICAgICAg
IHZvaWQgb3BlcmF0b3IgPSAoY29uc3QgbnNGaWxlVVJMJiBpblVSTCk7CiAgICAgICAgdm9pZCBv
cGVyYXRvciA9IChjb25zdCBuc0ZpbGVTcGVjJiBpbk90aGVyKTsKICAgICAgICB2b2lkIG9wZXJh
dG9yID0gKGNvbnN0IG5zUGVyc2lzdGVudEZpbGVEZXNjcmlwdG9yJiBpbk90aGVyKTsKCiAgICAg
ICAgUFJCb29sIG9wZXJhdG9yID09KGNvbnN0IG5zRmlsZVNwZWMmIGluT3RoZXIpIGNvbnN0Owog
ICAgICAgIFBSQm9vbCBvcGVyYXRvciAhPShjb25zdCBuc0ZpbGVTcGVjJiBpbk90aGVyKSBjb25z
dDsKIyAzNzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiCiAgICAgICBj
b25zdCBjaGFyKiBHZXRDU3RyaW5nKCkgY29uc3Q7CgoKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0b3IgY29uc3QgY2hhciogKCkgY29uc3QgeyByZXR1cm4gR2V0Q1N0cmlu
ZygpOyB9CgoKCiAgICAgICBjb25zdCBjaGFyKiBHZXROYXRpdmVQYXRoQ1N0cmluZygpIGNvbnN0
IHsgcmV0dXJuIEdldENTdHJpbmcoKTsgfQoKCgogICAgICAgdm9pZCBHZXROYXRpdmVQYXRoU3Ry
aW5nKG5zU3RyaW5nICZuYXRpdmVQYXRoU3RyaW5nKTsKCiAgICAgICBQUkJvb2wgSXNDaGlsZE9m
KG5zRmlsZVNwZWMgJnBvc3NpYmxlUGFyZW50KTsKIyA0MjMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0ZpbGVTcGVjLmgiCiAgICAgICAgUFJCb29sIFZhbGlkKCkgY29uc3QgeyByZXR1cm4g
KCEoKEVycm9yKCkpICYgMHg4MDAwMDAwMCkpOyB9CiAgICAgICAgbnNyZXN1bHQgRXJyb3IoKSBj
b25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChtUGF0aC5Jc0VtcHR5KCkgJiYgKCEoKG1FcnJvcikgJiAw
eDgwMDAwMDAwKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKG5z
RmlsZVNwZWMqKXRoaXMpLT5tRXJyb3IgPSAoKChuc3Jlc3VsdCkgMHhDMUYzMDAwMCkgKyAxKTsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtRXJyb3I7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgIFBSQm9vbCBGYWlsZWQoKSBjb25z
dCB7IHJldHVybiAoUFJCb29sKSgoRXJyb3IoKSkgJiAweDgwMDAwMDAwKTsgfQoKCgoKCiAgICAg
ICAgY2hhciogR2V0TGVhZk5hbWUoKSBjb25zdDsKCgogICAgICAgIHZvaWQgR2V0TGVhZk5hbWUo
bnNTdHJpbmcgJm5hdGl2ZVBhdGhTdHJpbmcpOwojIDQ1MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zRmlsZVNwZWMuaCIKICAgICAgICB2b2lkIFNldExlYWZOYW1lKGNvbnN0IGNoYXIqIGlu
TGVhZk5hbWUpOwogICAgICAgIHZvaWQgU2V0TGVhZk5hbWUoY29uc3QgbnNTdHJpbmcmIGluTGVh
Zk5hbWUpOwoKCgoKCgoKICAgICAgICB2b2lkIEdldFBhcmVudChuc0ZpbGVTcGVjJiBvdXRTcGVj
KSBjb25zdDsKIyA0NzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiCiAg
ICAgICAgdHlwZWRlZiBQUlVpbnQzMiBUaW1lU3RhbXA7CgoKCgoKICAgICAgICB2b2lkIEdldE1v
ZERhdGUoVGltZVN0YW1wJiBvdXRTdGFtcCkgY29uc3Q7CgogICAgICAgIFBSQm9vbCBNb2REYXRl
Q2hhbmdlZChjb25zdCBUaW1lU3RhbXAmIG9sZFN0YW1wKSBjb25zdAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlt
ZVN0YW1wIG5ld1N0YW1wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRN
b2REYXRlKG5ld1N0YW1wKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG5ld1N0YW1wICE9IG9sZFN0YW1wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgUFJVaW50MzIgR2V0RmlsZVNpemUoKSBjb25zdDsKICAgICAgICBQUkludDY0
IEdldERpc2tTcGFjZUF2YWlsYWJsZSgpIGNvbnN0OwoKICAgICAgICBuc0ZpbGVTcGVjIG9wZXJh
dG9yICsgKGNvbnN0IGNoYXIqIGluUmVsYXRpdmVVbml4UGF0aCkgY29uc3Q7CiAgICAgICAgbnNG
aWxlU3BlYyBvcGVyYXRvciArIChjb25zdCBuc1N0cmluZyYgaW5SZWxhdGl2ZVVuaXhQYXRoKSBj
b25zdDsKIyA0OTkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiCiAgICAg
ICAgdm9pZCBvcGVyYXRvciArPSAoY29uc3QgY2hhciogaW5SZWxhdGl2ZVVuaXhQYXRoKTsKCiAg
ICAgICAgdm9pZCBvcGVyYXRvciArPSAoY29uc3QgbnNTdHJpbmcmIGluUmVsYXRpdmVVbml4UGF0
aCk7CgogICAgICAgIHZvaWQgTWFrZVVuaXF1ZSgpOwogICAgICAgIHZvaWQgTWFrZVVuaXF1ZShj
b25zdCBjaGFyKiBpblN1Z2dlc3RlZExlYWZOYW1lKTsKICAgICAgICB2b2lkIE1ha2VVbmlxdWUo
Y29uc3QgbnNTdHJpbmcmIGluU3VnZ2VzdGVkTGVhZk5hbWUpOwoKCiAgICAgICAgUFJCb29sIElz
RGlyZWN0b3J5KCkgY29uc3Q7CiAgICAgICAgUFJCb29sIElzRmlsZSgpIGNvbnN0OwogICAgICAg
IFBSQm9vbCBFeGlzdHMoKSBjb25zdDsKCiAgICAgICAgUFJCb29sIElzSGlkZGVuKCkgY29uc3Q7
CgogICAgICAgIFBSQm9vbCBJc1N5bWxpbmsoKSBjb25zdDsKCgoKCgoKCiAgICAgICAgbnNyZXN1
bHQgUmVzb2x2ZVN5bWxpbmsoUFJCb29sJiB3YXNTeW1saW5rKTsKCiAgICAgICAgdm9pZCBDcmVh
dGVEaXJlY3RvcnkoaW50IG1vZGUgPSAwNzc1ICk7CiAgICAgICAgdm9pZCBDcmVhdGVEaXIoaW50
IG1vZGUgPSAwNzc1KSB7IENyZWF0ZURpcmVjdG9yeShtb2RlKTsgfQoKICAgICAgICB2b2lkIERl
bGV0ZShQUkJvb2wgaW5SZWN1cnNpdmUpIGNvbnN0OwogICAgICAgIG5zcmVzdWx0IFRydW5jYXRl
KFBSSW50MzIgYU5ld0xlbmd0aCkgY29uc3Q7CiAgICAgICAgdm9pZCBSZWN1cnNpdmVDb3B5KG5z
RmlsZVNwZWMgbmV3RGlyKSBjb25zdDsKCiAgICAgICAgbnNyZXN1bHQgUmVuYW1lKGNvbnN0IGNo
YXIqIGluTmV3TmFtZSk7CiAgICAgICAgbnNyZXN1bHQgUmVuYW1lKGNvbnN0IG5zU3RyaW5nJiBp
bk5ld05hbWUpOwogICAgICAgIG5zcmVzdWx0IENvcHlUb0Rpcihjb25zdCBuc0ZpbGVTcGVjJiBp
bk5ld1BhcmVudERpcmVjdG9yeSkgY29uc3Q7CiAgICAgICAgbnNyZXN1bHQgTW92ZVRvRGlyKGNv
bnN0IG5zRmlsZVNwZWMmIGluTmV3UGFyZW50RGlyZWN0b3J5KTsKICAgICAgICBuc3Jlc3VsdCBF
eGVjdXRlKGNvbnN0IGNoYXIqIGFyZ3MpIGNvbnN0OwogICAgICAgIG5zcmVzdWx0IEV4ZWN1dGUo
Y29uc3QgbnNTdHJpbmcmIGFyZ3MpIGNvbnN0OwoKCgoKCiAgICBwcm90ZWN0ZWQ6CgoKICAgICAg
IFBSVW5pY2hhciogQ29udmVydEZyb21GaWxlU3lzdGVtQ2hhcnNldChjb25zdCBjaGFyICppblN0
cmluZyk7CiAgICAgICBzdGF0aWMgdm9pZCBHZXRGaWxlU3lzdGVtQ2hhcnNldChuc1N0cmluZyAm
IGZpbGVTeXN0ZW1DaGFyc2V0KTsKCgoKCgogICAgcHJvdGVjdGVkOgoKCgogICAgICAgdm9pZCBD
bGVhcigpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgbnNG
aWxlUGF0aDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgbnNG
aWxlVVJMOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBuc0Rp
cmVjdG9yeUl0ZXJhdG9yOwoKCgogICAgICAgIG5zU2ltcGxlQ2hhclN0cmluZyBtUGF0aDsKICAg
ICAgICBuc3Jlc3VsdCBtRXJyb3I7Cgp9OwoKCgp0eXBlZGVmIG5zRmlsZVNwZWMgbnNOYXRpdmVG
aWxlU3BlYzsKCgpjbGFzcyBuc0ZpbGVVUkwKCgoKCnsKICAgIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0ZpbGVVUkwoY29uc3QgbnNGaWxlVVJMJiBpblVSTCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxlVVJMKGNvbnN0IGNoYXIqIGluVVJM
U3RyaW5nLCBQUkJvb2wgaW5DcmVhdGVEaXJzID0gMCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNGaWxlVVJMKGNvbnN0IG5zU3RyaW5nJiBpblVSTFN0cmluZywgUFJCb29sIGlu
Q3JlYXRlRGlycyA9IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRmlsZVVS
TChjb25zdCBuc0ZpbGVQYXRoJiBpblBhdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zRmlsZVVSTChjb25zdCBuc0ZpbGVTcGVjJiBpblBhdGgpOwogICAgICAgIHZpcnR1YWwg
fm5zRmlsZVVSTCgpOwoKCgoKCiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBuc0ZpbGVV
UkwmIGluVVJMKTsKICAgICAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IGNoYXIqIGluVVJMU3Ry
aW5nKTsKICAgICAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IG5zU3RyaW5nJiBpblVSTFN0cmlu
ZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IG5zQXV0b0NTdHJpbmcgc3RyaW5nKGluVVJMU3RyaW5nKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSBzdHJpbmc7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgIHZvaWQgb3BlcmF0b3IgPSAoY29u
c3QgbnNGaWxlUGF0aCYgaW5PdGhlcik7CiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBu
c0ZpbGVTcGVjJiBpbk90aGVyKTsKCiAgICAgICAgdm9pZCBvcGVyYXRvciArPShjb25zdCBjaGFy
KiBpblJlbGF0aXZlVW5peFBhdGgpOwogICAgICAgIG5zRmlsZVVSTCBvcGVyYXRvciArKGNvbnN0
IGNoYXIqIGluUmVsYXRpdmVVbml4UGF0aCkgY29uc3Q7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0b3IgY29uc3QgY2hhciogKCkgY29uc3QgeyByZXR1cm4gKGNvbnN0IGNo
YXIqKW1VUkw7IH0KICAgICAgICBjb25zdCBjaGFyKiBHZXRVUkxTdHJpbmcoKSBjb25zdCB7IHJl
dHVybiAoY29uc3QgY2hhciopbVVSTDsgfQoKICAgICAgICBjb25zdCBjaGFyKiBHZXRBc1N0cmlu
ZygpIGNvbnN0IHsgcmV0dXJuIChjb25zdCBjaGFyKiltVVJMOyB9CiMgNjE5ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5oIgogICAgcHJvdGVjdGVkOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBuc0ZpbGVQYXRoOwogICAgICAgIG5zU2lt
cGxlQ2hhclN0cmluZyBtVVJMOwoKCgoKCgp9OwoKCmNsYXNzIG5zRmlsZVBhdGgKCgoKCnsKICAg
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZpbGVQYXRoKGNvbnN0
IG5zRmlsZVBhdGgmIGluUGF0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNG
aWxlUGF0aChjb25zdCBjaGFyKiBpblVuaXhQYXRoU3RyaW5nLCBQUkJvb2wgaW5DcmVhdGVEaXJz
ID0gMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxlUGF0aChjb25zdCBu
c1N0cmluZyYgaW5Vbml4UGF0aFN0cmluZywgUFJCb29sIGluQ3JlYXRlRGlycyA9IDApOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRmlsZVBhdGgoY29uc3QgbnNGaWxlVVJMJiBp
blVSTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxlUGF0aChjb25zdCBu
c0ZpbGVTcGVjJiBpblBhdGgpOwogICAgICAgIHZpcnR1YWwgfm5zRmlsZVBhdGgoKTsKCgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yIGNvbnN0IGNoYXIqICgpIGNvbnN0
IHsgcmV0dXJuIG1QYXRoOyB9CgoKCgogICAgICAgIHZvaWQgb3BlcmF0b3IgPSAoY29uc3QgbnNG
aWxlUGF0aCYgaW5QYXRoKTsKICAgICAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IGNoYXIqIGlu
VW5peFBhdGhTdHJpbmcpOwogICAgICAgIHZvaWQgb3BlcmF0b3IgPSAoY29uc3QgbnNTdHJpbmcm
IGluVW5peFBhdGhTdHJpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0F1dG9DU3RyaW5nIHN0cmlu
ZyhpblVuaXhQYXRoU3RyaW5nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KnRoaXMgPSBzdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
IHZvaWQgb3BlcmF0b3IgPSAoY29uc3QgbnNGaWxlVVJMJiBpblVSTCk7CiAgICAgICAgdm9pZCBv
cGVyYXRvciA9IChjb25zdCBuc0ZpbGVTcGVjJiBpbk90aGVyKTsKCiAgICAgICAgdm9pZCBvcGVy
YXRvciArPShjb25zdCBjaGFyKiBpblJlbGF0aXZlVW5peFBhdGgpOwogICAgICAgIG5zRmlsZVBh
dGggb3BlcmF0b3IgKyhjb25zdCBjaGFyKiBpblJlbGF0aXZlVW5peFBhdGgpIGNvbnN0OwojIDY3
NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIKICAgIHByaXZhdGU6Cgog
ICAgICAgIG5zU2ltcGxlQ2hhclN0cmluZyBtUGF0aDsKCgoKCgp9OwoKCmNsYXNzIG5zUGVyc2lz
dGVudEZpbGVEZXNjcmlwdG9yCgoKCgoKewogICAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zUGVyc2lzdGVudEZpbGVEZXNjcmlwdG9yKCkge30KCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNQZXJzaXN0ZW50RmlsZURlc2NyaXB0b3IoY29uc3QgbnNQ
ZXJzaXN0ZW50RmlsZURlc2NyaXB0b3ImIGluRW5jb2RlZERhdGEpOwogICAgICAgIHZpcnR1YWwg
fm5zUGVyc2lzdGVudEZpbGVEZXNjcmlwdG9yKCk7CiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChj
b25zdCBuc1BlcnNpc3RlbnRGaWxlRGVzY3JpcHRvciYgaW5FbmNvZGVkRGF0YSk7CgoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc1BlcnNpc3RlbnRGaWxlRGVzY3JpcHRvcihjb25z
dCBuc0ZpbGVTcGVjJiBpblNwZWMpOwogICAgICAgIHZvaWQgb3BlcmF0b3IgPSAoY29uc3QgbnNG
aWxlU3BlYyYgaW5TcGVjKTsKCgoKCiAgICAgICAgZnJpZW5kIG5zcmVzdWx0IFJlYWQobnNJSW5w
dXRTdHJlYW0qIGFTdHJlYW0sIG5zUGVyc2lzdGVudEZpbGVEZXNjcmlwdG9yJik7CiAgICAgICAg
ZnJpZW5kIG5zcmVzdWx0IFdyaXRlKG5zSU91dHB1dFN0cmVhbSogYVN0cmVhbSwgY29uc3QgbnNQ
ZXJzaXN0ZW50RmlsZURlc2NyaXB0b3ImKTsKCiAgICAgICAgZnJpZW5kIG5zSW5wdXRTdHJlYW0m
IG9wZXJhdG9yID4+IChuc0lucHV0U3RyZWFtJiwgbnNQZXJzaXN0ZW50RmlsZURlc2NyaXB0b3Im
KTsKCiAgICAgICAgZnJpZW5kIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAobnNPdXRwdXRT
dHJlYW0mLCBjb25zdCBuc1BlcnNpc3RlbnRGaWxlRGVzY3JpcHRvciYpOwoKICAgICAgICBmcmll
bmQgY2xhc3MgbnNGaWxlU3BlYzsKCiAgICAgICAgdm9pZCBHZXREYXRhKG5zU2ltcGxlQ2hhclN0
cmluZyYgb3V0RGF0YSkgY29uc3Q7CiAgICAgICAgdm9pZCBTZXREYXRhKGNvbnN0IG5zU2ltcGxl
Q2hhclN0cmluZyYgaW5EYXRhKTsKICAgICAgICB2b2lkIEdldERhdGEobnNTaW1wbGVDaGFyU3Ry
aW5nJiBvdXREYXRhLCBQUkludDMyJiBvdXRTaXplKSBjb25zdDsKICAgICAgICB2b2lkIFNldERh
dGEoY29uc3QgbnNTaW1wbGVDaGFyU3RyaW5nJiBpbkRhdGEsIFBSSW50MzIgaW5TaXplKTsKICAg
ICAgICB2b2lkIFNldERhdGEoY29uc3QgY2hhciogaW5EYXRhLCBQUkludDMyIGluU2l6ZSk7CgoK
CgoKICAgIHByb3RlY3RlZDoKCiAgICAgICAgbnNTaW1wbGVDaGFyU3RyaW5nIG1EZXNjcmlwdG9y
U3RyaW5nOwoKfTsKCgpjbGFzcyBuc0RpcmVjdG9yeUl0ZXJhdG9yCiMgNzQ5ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5oIgp7CiAgICAgICAgcHVibGljOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0RpcmVjdG9yeUl0ZXJhdG9yKCBjb25zdCBuc0Zp
bGVTcGVjJiBwYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBSQm9vbCByZXNvdmVTeW1MaW5rcyk7CgoKICAgICAgICAgICAgdmly
dHVhbCB+bnNEaXJlY3RvcnlJdGVyYXRvcigpOwoKICAgICAgICAgICAgUFJCb29sIEV4aXN0cygp
IGNvbnN0IHsgcmV0dXJuIG1FeGlzdHM7IH0KICAgICAgICAgICAgbnNEaXJlY3RvcnlJdGVyYXRv
ciYgb3BlcmF0b3IgKysoKTsKICAgICAgICAgICAgbnNEaXJlY3RvcnlJdGVyYXRvciYgb3BlcmF0
b3IgKysoaW50KSB7IHJldHVybiArKygqdGhpcyk7IH0KICAgICAgICAgICAgbnNEaXJlY3RvcnlJ
dGVyYXRvciYgb3BlcmF0b3IgLS0oKTsKICAgICAgICAgICAgbnNEaXJlY3RvcnlJdGVyYXRvciYg
b3BlcmF0b3IgLS0oaW50KSB7IHJldHVybiAtLSgqdGhpcyk7IH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgbnNGaWxlU3BlYyYoKSB7IHJldHVybiBtQ3VycmVu
dDsgfQoKICAgICAgICAgICAgbnNGaWxlU3BlYyYgU3BlYygpIHsgcmV0dXJuIG1DdXJyZW50OyB9
CgogICAgICAgIHByaXZhdGU6CiMgNzc2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxl
U3BlYy5oIgogICAgICAgIHByaXZhdGU6CgogICAgICAgICAgICBuc0ZpbGVTcGVjIG1DdXJyZW50
OwogICAgICAgICAgICBQUkJvb2wgbUV4aXN0czsKICAgICAgICBQUkJvb2wgbVJlc292ZVN5bUxp
bmtzOwoKCiAgICAgICAgICAgIG5zRmlsZVNwZWMgbVN0YXJ0aW5nOwoKCgogICAgICAgICAgICBE
SVIqIG1EaXI7CiMgNzk2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5oIgp9
OwoKCmNsYXNzIG5zTlNQUlBhdGgKCgoKCnsKcHVibGljOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc05TUFJQYXRoKGNvbnN0IG5zRmlsZVNwZWMmIGluU3BlYykKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbUZpbGVQYXRoKGluU3BlYyksIG1vZGlmaWVk
TlNQUlBhdGgoMCkge30KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNOU1BSUGF0
aChjb25zdCBuc0ZpbGVVUkwmIGluVVJMKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiBtRmlsZVBhdGgoaW5VUkwpLCBtb2RpZmllZE5TUFJQYXRoKDApIHt9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zTlNQUlBhdGgoY29uc3QgbnNGaWxlUGF0aCYgaW5V
bml4UGF0aCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbUZpbGVQYXRo
KGluVW5peFBhdGgpLCBtb2RpZmllZE5TUFJQYXRoKDApIHt9CgogICAgdmlydHVhbCB+bnNOU1BS
UGF0aCgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgY29uc3Qg
Y2hhciooKSBjb25zdDsKIyA4MjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVj
LmgiCnByaXZhdGU6CgogICAgbnNGaWxlUGF0aCBtRmlsZVBhdGg7CiAgICBjaGFyKiBtb2RpZmll
ZE5TUFJQYXRoOwp9OwoKCiAgICAgICBuc3Jlc3VsdCBOU19GaWxlU3BlY1RvSUZpbGUobnNGaWxl
U3BlYyogZmlsZVNwZWMsIG5zSUxvY2FsRmlsZSogKnJlc3VsdCk7CiMgMTggIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lGaWxlU3BlYy5oIiAyCmNsYXNzIG5zSUZpbGVVUkw7CgpjbGFzcyBu
c0lGaWxlUGF0aDsKCmNsYXNzIG5zSU91dHB1dFN0cmVhbTsKCmNsYXNzIG5zSUlucHV0U3RyZWFt
OwojIDQyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZVNwZWMuaCIKY2xhc3MgbnNJ
RmlsZVNwZWMgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3Qg
bnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZDhjMGEwODAsIDB4
MDg2OCwgMHgxMWQzLCB7IDB4OTEsIDB4NWYsIDB4ZDksIDB4ZDgsIDB4ODksIDB4ZDQsIDB4OGUs
IDB4M2MgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGcm9tRmlsZVNwZWMo
Y29uc3QgbnNJRmlsZVNwZWMgKm9yaWdpbmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dFVSTFN0cmluZyhjaGFyICogKmFVUkxTdHJpbmcpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl
dFVSTFN0cmluZyhjb25zdCBjaGFyICogYVVSTFN0cmluZykgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRVbml4U3R5bGVGaWxlUGF0aChjaGFyICogKmFVbml4U3R5bGVGaWxlUGF0aCkgPSAw
OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VW5peFN0eWxlRmlsZVBhdGgoY29uc3QgY2hhciAqIGFV
bml4U3R5bGVGaWxlUGF0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQZXJzaXN0ZW50
RGVzY3JpcHRvclN0cmluZyhjaGFyICogKmFQZXJzaXN0ZW50RGVzY3JpcHRvclN0cmluZykgPSAw
OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGVyc2lzdGVudERlc2NyaXB0b3JTdHJpbmcoY29uc3Qg
Y2hhciAqIGFQZXJzaXN0ZW50RGVzY3JpcHRvclN0cmluZykgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXROYXRpdmVQYXRoKGNoYXIgKiAqYU5hdGl2ZVBhdGgpID0gMDsKICB2aXJ0dWFsIG5z
cmVzdWx0IFNldE5hdGl2ZVBhdGgoY29uc3QgY2hhciAqIGFOYXRpdmVQYXRoKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldE5TUFJQYXRoKGNoYXIgKiAqYU5TUFJQYXRoKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEVycm9yKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNW
YWxpZChQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRmFpbGVkKFBS
Qm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMZWFmTmFtZShjaGFy
ICogKmFMZWFmTmFtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TGVhZk5hbWUoY29uc3Qg
Y2hhciAqIGFMZWFmTmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnQobnNJ
RmlsZVNwZWMgKiAqYVBhcmVudCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbnB1dFN0
cmVhbShuc0lJbnB1dFN0cmVhbSAqICphSW5wdXRTdHJlYW0pID0gMDsKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0T3V0cHV0U3RyZWFtKG5zSU91dHB1dFN0cmVhbSAqICphT3V0cHV0U3RyZWFtKSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzQ2hpbGRPZihuc0lGaWxlU3BlYyAqcG9zc2libGVQ
YXJlbnQsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGaWxl
U3BlYyhuc0ZpbGVTcGVjICphRmlsZVNwZWMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
RnJvbUZpbGVTcGVjKGNvbnN0IG5zRmlsZVNwZWMgJiBzcGVjKSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldEZpbGVDb250ZW50cyhjaGFyICogKmFGaWxlQ29udGVudHMpID0gMDsKICB2aXJ0
dWFsIG5zcmVzdWx0IFNldEZpbGVDb250ZW50cyhjb25zdCBjaGFyICogYUZpbGVDb250ZW50cykg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBNYWtlVW5pcXVlKHZvaWQpID0gMDsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgTWFrZVVuaXF1ZVdpdGhTdWdnZXN0ZWROYW1lKGNvbnN0IGNoYXIgKnN1Z2dl
c3RlZE5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TW9kRGF0ZShQUlVpbnQzMiAq
YU1vZERhdGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTW9kRGF0ZUNoYW5nZWQoUFJVaW50
MzIgb2xkU3RhbXAsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJ
c0RpcmVjdG9yeShQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNG
aWxlKFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFeGlzdHMoUFJC
b29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzSGlkZGVuKFBSQm9vbCAq
X3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFcXVhbHMobnNJRmlsZVNwZWMgKnNw
ZWMsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGaWxlU2l6
ZShQUlVpbnQzMiAqYUZpbGVTaXplKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERpc2tT
cGFjZUF2YWlsYWJsZShQUkludDY0ICphRGlza1NwYWNlQXZhaWxhYmxlKSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEFwcGVuZFJlbGF0aXZlVW5peFBhdGgoY29uc3QgY2hhciAqcmVsYXRpdmVQ
YXRoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZURpcih2b2lkKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IFRvdWNoKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNT
eW1saW5rKFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXNvbHZl
U3ltbGluayh2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlbGV0ZShQUkJvb2wgcmVj
dXJzaXZlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRydW5jYXRlKFBSSW50MzIgYU5ld0xl
bmd0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW5hbWUoY29uc3QgY2hhciAqbmV3TGVh
Zk5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29weVRvRGlyKGNvbnN0IG5zSUZpbGVT
cGVjICpuZXdQYXJlbnREaXIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTW92ZVRvRGlyKGNv
bnN0IG5zSUZpbGVTcGVjICpuZXdQYXJlbnREaXIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
RXhlY3V0ZShjb25zdCBjaGFyICphcmdzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9wZW5T
dHJlYW1Gb3JSZWFkaW5nKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgT3BlblN0cmVh
bUZvcldyaXRpbmcodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBPcGVuU3RyZWFtRm9y
UmVhZGluZ0FuZFdyaXRpbmcodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDbG9zZVN0
cmVhbSh2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzU3RyZWFtT3BlbihQUkJvb2wg
Kl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRW9mKFBSQm9vbCAqX3JldHZhbCkg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWFkKGNoYXIgKipidWZmZXIsIFBSSW50MzIgcmVx
dWVzdGVkQ291bnQsIFBSSW50MzIgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
UmVhZExpbmUoY2hhciAqKmxpbmUsIFBSSW50MzIgYnVmZmVyU2l6ZSwgUFJCb29sICp3YXNUcnVu
Y2F0ZWQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFdyaXRlKGNvbnN0IGNoYXIgKmRh
dGEsIFBSSW50MzIgcmVxdWVzdGVkQ291bnQsIFBSSW50MzIgKl9yZXR2YWwpID0gMDsKCgogIHZp
cnR1YWwgbnNyZXN1bHQgRmx1c2godm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZWVr
KFBSSW50MzIgb2Zmc2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRlbGwoUFJJbnQzMiAq
X3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFbmRMaW5lKHZvaWQpID0gMDsKCn07
CiMgNzc5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZVNwZWMuaCIKY2xhc3MgbnNJ
RGlyZWN0b3J5SXRlcmF0b3IgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0
aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZDhj
MGEwODMsIDB4MDg2OCwgMHgxMWQzLCB7IDB4OTEsIDB4NWYsIDB4ZDksIDB4ZDgsIDB4ODksIDB4
ZDQsIDB4OGUsIDB4M2MgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0
KG5zSUZpbGVTcGVjICpwYXJlbnQsIFBSQm9vbCByZXNvbHZlU3ltbGluaykgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBFeGlzdHMoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IE5leHQodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDdXJyZW50U3Bl
Yyhuc0lGaWxlU3BlYyAqICphQ3VycmVudFNwZWMpID0gMDsKCn07CiMgODc2ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJRmlsZVNwZWMuaCIKICAgICAgIG5zcmVzdWx0IE5TX05ld0ZpbGVT
cGVjV2l0aFNwZWMoY29uc3QgbnNGaWxlU3BlYyYgYVNyY0ZpbGVTcGVjLCBuc0lGaWxlU3BlYyAq
KnJlc3VsdCk7CiAgICAgICBuc3Jlc3VsdCBOU19OZXdGaWxlU3BlYyhuc0lGaWxlU3BlYyoqIHJl
c3VsdCk7CiAgICAgICBuc3Jlc3VsdCBOU19OZXdEaXJlY3RvcnlJdGVyYXRvcihuc0lEaXJlY3Rv
cnlJdGVyYXRvcioqIHJlc3VsdCk7CgppbmxpbmUgUFJCb29sIEV4aXN0cyhuc0lGaWxlU3BlYyog
ZikgeyBQUkJvb2wgeWVzOyByZXR1cm4gKCEoKGYtPkV4aXN0cygmeWVzKSkgJiAweDgwMDAwMDAw
KSkgJiYgeWVzOyB9CmlubGluZSBQUkJvb2wgRXhpc3RzKG5zSURpcmVjdG9yeUl0ZXJhdG9yKiBm
KSB7IFBSQm9vbCB5ZXM7IHJldHVybiAoISgoZi0+RXhpc3RzKCZ5ZXMpKSAmIDB4ODAwMDAwMDAp
KSAmJiB5ZXM7IH0KaW5saW5lIFBSQm9vbCBJc0RpcmVjdG9yeShuc0lGaWxlU3BlYyogZikgeyBQ
UkJvb2wgeWVzOyByZXR1cm4gKCEoKGYtPklzRGlyZWN0b3J5KCZ5ZXMpKSAmIDB4ODAwMDAwMDAp
KSAmJiB5ZXM7IH0KIyAyOSAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQvaHRtbC9mb3Jt
cy9zcmMvbnNGb3JtRnJhbWUuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lG
b3JtUHJvY2Vzc29yLmgiIDEKIyAzMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZvcm1Q
cm9jZXNzb3IuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIg
MQojIDM0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybVByb2Nlc3Nvci5oIiAyCiMg
MSAiL2hvbWUva2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3By
dHlwZXMuaCIgMQojIDM1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybVByb2Nlc3Nv
ci5oIiAyCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01IVE1MSW5wdXRFbGVt
ZW50LmgiIDEKIyAxMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURPTUhUTUxJbnB1dEVs
ZW1lbnQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NSFRNTEVsZW1lbnQu
aCIgMQojIDEwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NSFRNTEVsZW1lbnQuaCIK
IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NRWxlbWVudC5oIiAxCiMgMTAgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01FbGVtZW50LmgiCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSURPTU5vZGUuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJRE9NTm9kZS5oIgpjbGFzcyBuc0lET01Ob2RlIDogcHVibGljIG5zSVN1cHBvcnRzIHsK
IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z
SUlEIGlpZCA9IHsweGE2Y2Y5MDdjLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAw
LCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KCiAgZW51bSB7
IEVMRU1FTlRfTk9ERSA9IDFVIH07CgogIGVudW0geyBBVFRSSUJVVEVfTk9ERSA9IDJVIH07Cgog
IGVudW0geyBURVhUX05PREUgPSAzVSB9OwoKICBlbnVtIHsgQ0RBVEFfU0VDVElPTl9OT0RFID0g
NFUgfTsKCiAgZW51bSB7IEVOVElUWV9SRUZFUkVOQ0VfTk9ERSA9IDVVIH07CgogIGVudW0geyBF
TlRJVFlfTk9ERSA9IDZVIH07CgogIGVudW0geyBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUg
PSA3VSB9OwoKICBlbnVtIHsgQ09NTUVOVF9OT0RFID0gOFUgfTsKCiAgZW51bSB7IERPQ1VNRU5U
X05PREUgPSA5VSB9OwoKICBlbnVtIHsgRE9DVU1FTlRfVFlQRV9OT0RFID0gMTBVIH07CgogIGVu
dW0geyBET0NVTUVOVF9GUkFHTUVOVF9OT0RFID0gMTFVIH07CgogIGVudW0geyBOT1RBVElPTl9O
T0RFID0gMTJVIH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5vZGVOYW1lKG5zQVdyaXRhYmxl
U3RyaW5nICYgYU5vZGVOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5vZGVWYWx1
ZShuc0FXcml0YWJsZVN0cmluZyAmIGFOb2RlVmFsdWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0
IFNldE5vZGVWYWx1ZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGFOb2RlVmFsdWUpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Tm9kZVR5cGUoUFJVaW50MTYgKmFOb2RlVHlwZSkgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnROb2RlKG5zSURPTU5vZGUgKiAqYVBhcmVu
dE5vZGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2hpbGROb2Rlcyhuc0lET01Ob2Rl
TGlzdCAqICphQ2hpbGROb2RlcykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGaXJzdENo
aWxkKG5zSURPTU5vZGUgKiAqYUZpcnN0Q2hpbGQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0TGFzdENoaWxkKG5zSURPTU5vZGUgKiAqYUxhc3RDaGlsZCkgPSAwOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRQcmV2aW91c1NpYmxpbmcobnNJRE9NTm9kZSAqICphUHJldmlvdXNTaWJsaW5n
KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5leHRTaWJsaW5nKG5zSURPTU5vZGUgKiAq
YU5leHRTaWJsaW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEF0dHJpYnV0ZXMobnNJ
RE9NTmFtZWROb2RlTWFwICogKmFBdHRyaWJ1dGVzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldE93bmVyRG9jdW1lbnQobnNJRE9NRG9jdW1lbnQgKiAqYU93bmVyRG9jdW1lbnQpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgSW5zZXJ0QmVmb3JlKG5zSURPTU5vZGUgKm5ld0NoaWxkLCBu
c0lET01Ob2RlICpyZWZDaGlsZCwgbnNJRE9NTm9kZSAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgUmVwbGFjZUNoaWxkKG5zSURPTU5vZGUgKm5ld0NoaWxkLCBuc0lET01Ob2Rl
ICpvbGRDaGlsZCwgbnNJRE9NTm9kZSAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1
bHQgUmVtb3ZlQ2hpbGQobnNJRE9NTm9kZSAqb2xkQ2hpbGQsIG5zSURPTU5vZGUgKipfcmV0dmFs
KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFwcGVuZENoaWxkKG5zSURPTU5vZGUgKm5ld0No
aWxkLCBuc0lET01Ob2RlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBIYXND
aGlsZE5vZGVzKFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDbG9u
ZU5vZGUoUFJCb29sIGRlZXAsIG5zSURPTU5vZGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IE5vcm1hbGl6ZSh2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzU3Vw
cG9ydGVkKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgZmVhdHVyZSwgY29uc3QgbnNBUmVhZGFi
bGVTdHJpbmcgJiB2ZXJzaW9uLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0TmFtZXNwYWNlVVJJKG5zQVdyaXRhYmxlU3RyaW5nICYgYU5hbWVzcGFjZVVSSSkg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmVmaXgobnNBV3JpdGFibGVTdHJpbmcgJiBh
UHJlZml4KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQcmVmaXgoY29uc3QgbnNBUmVhZGFi
bGVTdHJpbmcgJiBhUHJlZml4KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExvY2FsTmFt
ZShuc0FXcml0YWJsZVN0cmluZyAmIGFMb2NhbE5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1
bHQgSGFzQXR0cmlidXRlcyhQUkJvb2wgKl9yZXR2YWwpID0gMDsKCn07CiMgMzk3ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NTm9kZS5oIgpjbGFzcyBuc0lET00zTm9kZSA6IHB1Ymxp
YyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg
e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgyOWZiMmExOCwgMHgxZGQyLCAweDExYjIsIHsg
MHg4ZCwgMHhkOSwgMHhhNiwgMHhmZCwgMHg1ZCwgMHg1YSwgMHhkMSwgMHgyZiB9fTsgcmV0dXJu
IGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJhc2VVUkkobnNBV3JpdGFibGVTdHJpbmcg
JiBhQmFzZVVSSSkgPSAwOwoKfTsKIyAxMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURP
TUVsZW1lbnQuaCIgMgojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NRWxlbWVu
dC5oIgpjbGFzcyBuc0lET01FbGVtZW50IDogcHVibGljIG5zSURPTU5vZGUgewogcHVibGljOgoK
ICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0g
ezB4YTZjZjkwNzgsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4
NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRUYWdOYW1lKG5zQVdyaXRhYmxlU3RyaW5nICYgYVRhZ05hbWUpID0gMDsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0QXR0cmlidXRlKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgbmFtZSwg
bnNBV3JpdGFibGVTdHJpbmcgJiBfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNl
dEF0dHJpYnV0ZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIG5hbWUsIGNvbnN0IG5zQVJlYWRh
YmxlU3RyaW5nICYgdmFsdWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlQXR0cmli
dXRlKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgbmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRBdHRyaWJ1dGVOb2RlKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgbmFtZSwgbnNJ
RE9NQXR0ciAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QXR0cmlidXRl
Tm9kZShuc0lET01BdHRyICpuZXdBdHRyLCBuc0lET01BdHRyICoqX3JldHZhbCkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVBdHRyaWJ1dGVOb2RlKG5zSURPTUF0dHIgKm9sZEF0dHIs
IG5zSURPTUF0dHIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVsZW1l
bnRzQnlUYWdOYW1lKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgbmFtZSwgbnNJRE9NTm9kZUxp
c3QgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEF0dHJpYnV0ZU5TKGNv
bnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgbmFtZXNwYWNlVVJJLCBjb25zdCBuc0FSZWFkYWJsZVN0
cmluZyAmIGxvY2FsTmFtZSwgbnNBV3JpdGFibGVTdHJpbmcgJiBfcmV0dmFsKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IFNldEF0dHJpYnV0ZU5TKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYg
bmFtZXNwYWNlVVJJLCBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIHF1YWxpZmllZE5hbWUsIGNv
bnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgdmFsdWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
UmVtb3ZlQXR0cmlidXRlTlMoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBuYW1lc3BhY2VVUkks
IGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgbG9jYWxOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldEF0dHJpYnV0ZU5vZGVOUyhjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIG5hbWVz
cGFjZVVSSSwgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBsb2NhbE5hbWUsIG5zSURPTUF0dHIg
KipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEF0dHJpYnV0ZU5vZGVOUyhu
c0lET01BdHRyICpuZXdBdHRyLCBuc0lET01BdHRyICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRFbGVtZW50c0J5VGFnTmFtZU5TKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5n
ICYgbmFtZXNwYWNlVVJJLCBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGxvY2FsTmFtZSwgbnNJ
RE9NTm9kZUxpc3QgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEhhc0F0dHJp
YnV0ZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIG5hbWUsIFBSQm9vbCAqX3JldHZhbCkgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBIYXNBdHRyaWJ1dGVOUyhjb25zdCBuc0FSZWFkYWJsZVN0
cmluZyAmIG5hbWVzcGFjZVVSSSwgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBsb2NhbE5hbWUs
IFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKfTsKIyAxMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSURPTUhUTUxFbGVtZW50LmgiIDIKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SURPTUhUTUxFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxFbGVtZW50IDogcHVibGljIG5zSURP
TUVsZW1lbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0
aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwODUsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMs
IDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7
fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJZChuc0FXcml0YWJsZVN0cmluZyAmIGFJZCkgPSAw
OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SWQoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBhSWQp
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGl0bGUobnNBV3JpdGFibGVTdHJpbmcgJiBh
VGl0bGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRpdGxlKGNvbnN0IG5zQVJlYWRhYmxl
U3RyaW5nICYgYVRpdGxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExhbmcobnNBV3Jp
dGFibGVTdHJpbmcgJiBhTGFuZykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TGFuZyhjb25z
dCBuc0FSZWFkYWJsZVN0cmluZyAmIGFMYW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dERpcihuc0FXcml0YWJsZVN0cmluZyAmIGFEaXIpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl
dERpcihjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGFEaXIpID0gMDsKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0Q2xhc3NOYW1lKG5zQVdyaXRhYmxlU3RyaW5nICYgYUNsYXNzTmFtZSkgPSAwOwog
IHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2xhc3NOYW1lKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYg
YUNsYXNzTmFtZSkgPSAwOwoKfTsKIyAxMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURP
TUhUTUxJbnB1dEVsZW1lbnQuaCIgMgojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
RE9NSFRNTElucHV0RWxlbWVudC5oIgpjbGFzcyBuc0lET01IVE1MSW5wdXRFbGVtZW50IDogcHVi
bGljIG5zSURPTUhUTUxFbGVtZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBH
ZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDkzLCAweDE1YjMsIDB4
MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19
OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVmYXVsdFZhbHVlKG5zQVdy
aXRhYmxlU3RyaW5nICYgYURlZmF1bHRWYWx1ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
RGVmYXVsdFZhbHVlKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgYURlZmF1bHRWYWx1ZSkgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZWZhdWx0Q2hlY2tlZChQUkJvb2wgKmFEZWZhdWx0
Q2hlY2tlZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGVmYXVsdENoZWNrZWQoUFJCb29s
IGFEZWZhdWx0Q2hlY2tlZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb3JtKG5zSURP
TUhUTUxGb3JtRWxlbWVudCAqICphRm9ybSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRB
Y2NlcHQobnNBV3JpdGFibGVTdHJpbmcgJiBhQWNjZXB0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs
dCBTZXRBY2NlcHQoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBhQWNjZXB0KSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldEFjY2Vzc0tleShuc0FXcml0YWJsZVN0cmluZyAmIGFBY2Nlc3NL
ZXkpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFjY2Vzc0tleShjb25zdCBuc0FSZWFkYWJs
ZVN0cmluZyAmIGFBY2Nlc3NLZXkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWxpZ24o
bnNBV3JpdGFibGVTdHJpbmcgJiBhQWxpZ24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFs
aWduKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgYUFsaWduKSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldEFsdChuc0FXcml0YWJsZVN0cmluZyAmIGFBbHQpID0gMDsKICB2aXJ0dWFsIG5z
cmVzdWx0IFNldEFsdChjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGFBbHQpID0gMDsKCgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0Q2hlY2tlZChQUkJvb2wgKmFDaGVja2VkKSA9IDA7CiAgdmlydHVh
bCBuc3Jlc3VsdCBTZXRDaGVja2VkKFBSQm9vbCBhQ2hlY2tlZCkgPSAwOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXREaXNhYmxlZChQUkJvb2wgKmFEaXNhYmxlZCkgPSAwOwogIHZpcnR1YWwgbnNy
ZXN1bHQgU2V0RGlzYWJsZWQoUFJCb29sIGFEaXNhYmxlZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRNYXhMZW5ndGgoUFJJbnQzMiAqYU1heExlbmd0aCkgPSAwOwogIHZpcnR1YWwgbnNy
ZXN1bHQgU2V0TWF4TGVuZ3RoKFBSSW50MzIgYU1heExlbmd0aCkgPSAwOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXROYW1lKG5zQVdyaXRhYmxlU3RyaW5nICYgYU5hbWUpID0gMDsKICB2aXJ0dWFs
IG5zcmVzdWx0IFNldE5hbWUoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBhTmFtZSkgPSAwOwoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSZWFkT25seShQUkJvb2wgKmFSZWFkT25seSkgPSAwOwog
IHZpcnR1YWwgbnNyZXN1bHQgU2V0UmVhZE9ubHkoUFJCb29sIGFSZWFkT25seSkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRTaXplKG5zQVdyaXRhYmxlU3RyaW5nICYgYVNpemUpID0gMDsK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNpemUoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBhU2l6
ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTcmMobnNBV3JpdGFibGVTdHJpbmcgJiBh
U3JjKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTcmMoY29uc3QgbnNBUmVhZGFibGVTdHJp
bmcgJiBhU3JjKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRhYkluZGV4KFBSSW50MzIg
KmFUYWJJbmRleCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VGFiSW5kZXgoUFJJbnQzMiBh
VGFiSW5kZXgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VHlwZShuc0FXcml0YWJsZVN0
cmluZyAmIGFUeXBlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUeXBlKGNvbnN0IG5zQVJl
YWRhYmxlU3RyaW5nICYgYVR5cGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VXNlTWFw
KG5zQVdyaXRhYmxlU3RyaW5nICYgYVVzZU1hcCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
VXNlTWFwKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgYVVzZU1hcCkgPSAwOwoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRWYWx1ZShuc0FXcml0YWJsZVN0cmluZyAmIGFWYWx1ZSkgPSAwOwogIHZp
cnR1YWwgbnNyZXN1bHQgU2V0VmFsdWUoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBhVmFsdWUp
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQmx1cih2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEZvY3VzKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2VsZWN0KHZvaWQp
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xpY2sodm9pZCkgPSAwOwoKfTsKIyAzNyAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZvcm1Qcm9jZXNzb3IuaCIgMgoKY2xhc3MgbnNTdHJp
bmc7CmNsYXNzIG5zVm9pZEFycmF5OwojIDU4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
Rm9ybVByb2Nlc3Nvci5oIgpjbGFzcyBuc0lGb3JtUHJvY2Vzc29yIDogcHVibGljIG5zSVN1cHBv
cnRzIHsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25z
dCBuc0lJRCBpaWQgPSB7IDB4ZjExYzFlMjAsIDB4ODczZiwgMHgxMWQzLCB7IDB4OTYsIDB4N2Ys
IDB4MCwgMHgxMCwgMHg1YSwgMHgxYiwgMHgxYiwgMHg3NiB9IH07IHJldHVybiBpaWQ7fQojIDc0
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybVByb2Nlc3Nvci5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgUHJvY2Vzc1ZhbHVlKG5zSURPTUhUTUxFbGVtZW50ICphRWxlbWVudCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1N0cmluZyYgYU5hbWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNTdHJpbmcmIGFWYWx1ZSkgPSAwOwojIDg3ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJRm9ybVByb2Nlc3Nvci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUHJvdmlkZUNv
bnRlbnQoY29uc3QgbnNTdHJpbmcmIGFGb3JtVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zVm9pZEFycmF5JiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
U3RyaW5nJiBhQXR0cmlidXRlKSA9IDA7Cgp9OwojIDMwICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxh
L2xheW91dC9odG1sL2Zvcm1zL3NyYy9uc0Zvcm1GcmFtZS5oIiAyCgpjbGFzcyBuc1N0cmluZzsK
Y2xhc3MgbnNJQ29udGVudDsKY2xhc3MgbnNJRnJhbWU7CmNsYXNzIG5zSVByZXNDb250ZXh0Owpz
dHJ1Y3QgbnNIVE1MUmVmbG93U3RhdGU7CmNsYXNzIG5zRm9ybUNvbnRyb2xGcmFtZTsKY2xhc3Mg
bnNHZnhSYWRpb0NvbnRyb2xGcmFtZTsKY2xhc3MgbnNJRm9ybUNvbnRyb2xGcmFtZTsKY2xhc3Mg
bnNJRE9NSFRNTEZvcm1FbGVtZW50OwpjbGFzcyBuc0lEb2N1bWVudDsKY2xhc3MgbnNJUHJlc0Nv
bnRleHQ7CmNsYXNzIG5zRm9ybUZyYW1lOwpjbGFzcyBuc0lVbmljb2RlRW5jb2RlcjsKY2xhc3Mg
bnNSYWRpb0NvbnRyb2xHcm91cDsKCmNsYXNzIG5zRm9ybUZyYW1lIDogcHVibGljIG5zQmxvY2tG
cmFtZSwKICAgICAgICAgICAgICAgICAgICBwdWJsaWMgbnNJRm9ybU1hbmFnZXIKewpwdWJsaWM6
CiAgbnNGb3JtRnJhbWUoKTsKICB2aXJ0dWFsIH5uc0Zvcm1GcmFtZSgpOwoKICB2aXJ0dWFsIG5z
cmVzdWx0IFF1ZXJ5SW50ZXJmYWNlKGNvbnN0IG5zSUlEJiBhSUlELCB2b2lkKiogYUluc3RhbmNl
UHRyKTsKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVGcmFtZShuc0lQcmVzQ29udGV4dCogYVBy
ZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJlc1No
ZWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFPbGRGcmFtZSk7CgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBPblJlc2V0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwoKICB2aXJ0dWFsIG5z
cmVzdWx0IE9uU3VibWl0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIG5zSUZyYW1lKiBh
RnJhbWUpOwoKCgoKCgoKICBuc3Jlc3VsdCBPblJhZGlvQ2hlY2tlZChuc0lQcmVzQ29udGV4dCog
YVByZXNDb250ZXh0LCBuc0dmeFJhZGlvQ29udHJvbEZyYW1lJiBhUmFkaW8sIFBSQm9vbCBhQ2hl
Y2tlZCA9IDEpOwoKICB2b2lkIEFkZEZvcm1Db250cm9sRnJhbWUobnNJUHJlc0NvbnRleHQqIGFQ
cmVzQ29udGV4dCwgbnNJRm9ybUNvbnRyb2xGcmFtZSYgYUZyYW1lKTsKICBzdGF0aWMgdm9pZCBB
ZGRGb3JtQ29udHJvbEZyYW1lKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIG5zSUZyYW1l
JiBhRnJhbWUpOwogIHZvaWQgUmVtb3ZlRm9ybUNvbnRyb2xGcmFtZShuc0lGb3JtQ29udHJvbEZy
YW1lJiBhRnJhbWUpOwogIHZvaWQgUmVtb3ZlUmFkaW9Db250cm9sRnJhbWUobnNJRm9ybUNvbnRy
b2xGcmFtZSAqIGFGcmFtZSk7CiAgbnNyZXN1bHQgR2V0UmFkaW9JbmZvKG5zSUZvcm1Db250cm9s
RnJhbWUqIGFGcmFtZSwgbnNTdHJpbmcmIGFOYW1lLCBuc1JhZGlvQ29udHJvbEdyb3VwIComIGFH
cm91cCk7CgogIFBSQm9vbCBDYW5TdWJtaXQobnNJRm9ybUNvbnRyb2xGcmFtZSAqYUZyYW1lKTsK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNZXRob2QoUFJJbnQzMiogYU1ldGhvZCk7CiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRFbmN0eXBlKFBSSW50MzIqIGFFbmN0eXBlKTsKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldFRhcmdldChuc1N0cmluZyogYVRhcmdldCk7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRB
Y3Rpb24obnNTdHJpbmcqIGFBY3Rpb24pOwoKCgogIHN0YXRpYyBQUkJvb2wgR2V0RGlzYWJsZWQo
bnNJRnJhbWUqIGFDaGlsZEZyYW1lLCBuc0lDb250ZW50KiBhQ29udGVudCA9IDApOwogIHN0YXRp
YyBQUkJvb2wgR2V0UmVhZG9ubHkobnNJRnJhbWUqIGFDaGlsZEZyYW1lLCBuc0lDb250ZW50KiBh
Q29udGVudCA9IDApOwogIHN0YXRpYyBuc3Jlc3VsdCBHZXROYW1lKG5zSUZyYW1lKiBhQ2hpbGRG
cmFtZSwgbnNTdHJpbmcmIGFOYW1lLCBuc0lDb250ZW50KiBhQ29udGVudCA9IDApOwogIHN0YXRp
YyBuc3Jlc3VsdCBHZXRWYWx1ZShuc0lGcmFtZSogYUNoaWxkRnJhbWUsIG5zU3RyaW5nJiBhVmFs
dWUsIG5zSUNvbnRlbnQqIGFDb250ZW50ID0gMCk7CiAgc3RhdGljIHZvaWQgU3R5bGVDaGFuZ2VS
ZWZsb3cobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lKTsKICBzdGF0aWMgbnNyZXN1bHQgR2V0UmFkaW9H
cm91cFNlbGVjdGVkQ29udGVudChuc0dmeFJhZGlvQ29udHJvbEZyYW1lKiBhQ29udHJvbCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50ICoq
IGFSYWRpb2J0bik7CiAgdm9pZCBTZXRGbGFncyhQUlVpbnQzMiBhRmxhZ3MpIHsKICAgIG1TdGF0
ZSAmPSB+MHhGRkYwMDAwMDsKICAgIG1TdGF0ZSB8PSBhRmxhZ3M7CiAgfQoKcHJvdGVjdGVkOgog
IHZpcnR1YWwgbnNyZWZjbnQgQWRkUmVmKHZvaWQpOwogIHZpcnR1YWwgbnNyZWZjbnQgUmVsZWFz
ZSh2b2lkKTsKICB2b2lkIFJlbW92ZVJhZGlvR3JvdXBzKCk7CgogIHZvaWQgRG9EZWZhdWx0U2Vs
ZWN0aW9uKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNSYWRpb0NvbnRyb2xHcm91cCAqIGFHcm91cCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0dmeFJhZGlvQ29udHJvbEZyYW1lICogYVJhZGlvVG9JZ25vcmUgPSAwKTsKCiAgbnNy
ZXN1bHQgUHJvY2Vzc1ZhbHVlKG5zSUZvcm1Qcm9jZXNzb3ImIGFGb3JtUHJvY2Vzc29yLCBuc0lG
b3JtQ29udHJvbEZyYW1lKiBhRnJhbWVDb250cm9sLCBjb25zdCBuc1N0cmluZyYgYU5hbWUsIG5z
U3RyaW5nJiBhTmV3VmFsdWUpOwogIG5zcmVzdWx0IFByb2Nlc3NBc1VSTEVuY29kZWQobnNJRm9y
bVByb2Nlc3NvciogYUZvcm1Qcm9jZXNzb3IsIFBSQm9vbCBhSXNQb3N0LCBuc1N0cmluZyYgYURh
dGEsIG5zSUZvcm1Db250cm9sRnJhbWUqIGFGcmFtZSk7CiAgbnNyZXN1bHQgUHJvY2Vzc0FzTXVs
dGlwYXJ0KG5zSUZvcm1Qcm9jZXNzb3IqIGFGb3JtUHJvY2Vzc29yLCBuc0lGaWxlU3BlYyomIGFN
dWx0aXBhcnREYXRhRmlsZSwgbnNJRm9ybUNvbnRyb2xGcmFtZSogYUZyYW1lKTsKICBQUlVpbnQz
MiBHZXRGaWxlTmFtZVdpdGhpblBhdGgobnNTdHJpbmcgYVBhdGhOYW1lKTsKICBuc3Jlc3VsdCBH
ZXRDb250ZW50VHlwZShjaGFyKiBhUGF0aE5hbWUsIGNoYXIqKiBhQ29udGVudFR5cGUpOwoKCiAg
bnNTdHJpbmcqIFVSTEVuY29kZShjb25zdCBuc1N0cmluZyYgYVN0cmluZywgbnNJVW5pY29kZUVu
Y29kZXIqIGVuY29kZXIpOwogIGNoYXIqIFVuaWNvZGVUb05ld0J5dGVzKGNvbnN0IFBSVW5pY2hh
ciogYVNyYywgUFJVaW50MzIgYUxlbiwgbnNJVW5pY29kZUVuY29kZXIqIGVuY29kZXIpOwoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldEVuY29kZXIobnNJVW5pY29kZUVuY29kZXIqKiBlbmNvZGVyKTsK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBsYXRmb3JtRW5jb2Rlcihuc0lVbmljb2RlRW5jb2Rlcioq
IGVuY29kZXIpOwogIHZvaWQgR2V0U3VibWl0Q2hhcnNldChuc1N0cmluZyYgb0NoYXJzZXQpOwog
IHZvaWQgVXBkYXRlU3VibWl0dGVyKG5zSUZvcm1Db250cm9sRnJhbWUgKiBhRnJhbWUpOwoKICBu
c1ZvaWRBcnJheSBtRm9ybUNvbnRyb2xzOwogIG5zVm9pZEFycmF5IG1SYWRpb0dyb3VwczsKICBu
c0lGb3JtQ29udHJvbEZyYW1lKiBtVGV4dFN1Ym1pdHRlcjsKICBQUkJvb2wgbVRleHRTdWJtaXR0
ZXJTZXQ7CgoKICBuc0F1dG9TdHJpbmcgbUNoYXJzZXQ7CiAgUFJVaW50OCBtVGV4dERpcjsKICBQ
UlVpbnQ4IG1DdHJsc01vZEF0U3VibWl0OwoKCn07CiMgNTIgIi4uLy4uLy4uLy4uLy4uL21vemls
bGEvbGF5b3V0L2h0bWwvZm9ybXMvc3JjL25zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbnRlbnQuaCIgMQojIDUzICIuLi8uLi8uLi8u
Li8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Zvcm1zL3NyYy9uc0Zvcm1Db250cm9sSGVscGVyLmNw
cCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlVXRpbC5oIiAxCiMgNTQg
Ii4uLy4uLy4uLy4uLy4uL21vemlsbGEvbGF5b3V0L2h0bWwvZm9ybXMvc3JjL25zRm9ybUNvbnRy
b2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSU5hbWVTcGFj
ZU1hbmFnZXIuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTmFtZVNwYWNl
TWFuYWdlci5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAx
CiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lOYW1lU3BhY2VNYW5hZ2VyLmgiIDIK
IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNsYXlvdXQuaCIgMQojIDI4ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJTmFtZVNwYWNlTWFuYWdlci5oIiAyCiMgMSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zQVdyaXRhYmxlU3RyaW5nLmgiIDEKIyAyOSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSU5hbWVTcGFjZU1hbmFnZXIuaCIgMgoKY2xhc3MgbnNJQXRvbTsKY2xh
c3MgbnNTdHJpbmc7CmNsYXNzIG5zSU5hbWVTcGFjZTsKIyA2OCAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSU5hbWVTcGFjZU1hbmFnZXIuaCIKY2xhc3MgbnNJTmFtZVNwYWNlTWFuYWdlciA6
IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ
RCgpIHsgc3RhdGljIG5zSUlEIGlpZCA9IHsgMHhhNmNmOTBkNSwgMHgxNWIzLCAweDExZDIsIHsw
eDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyfX07IHJldHVybiBp
aWQ7IH0KCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVSb290TmFtZVNwYWNlKG5zSU5hbWVTcGFj
ZSomIGFSb290TmFtZVNwYWNlKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgUmVnaXN0ZXJOYW1l
U3BhY2UoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFVUkksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyJiBhTmFtZVNwYWNlSUQpID0gMDsK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYW1lU3BhY2VVUkkoUFJJbnQzMiBhTmFtZVNwYWNlSUQs
IG5zQVdyaXRhYmxlU3RyaW5nJiBhVVJJKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYW1l
U3BhY2VJRChjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVVSSSwgUFJJbnQzMiYgYU5hbWVTcGFj
ZUlEKSA9IDA7Cn07CgpleHRlcm4gbnNyZXN1bHQKICBOU19OZXdOYW1lU3BhY2VNYW5hZ2VyKG5z
SU5hbWVTcGFjZU1hbmFnZXIqKiBhSW5zdGFuY2VQdHJSZXN1bHQpOwojIDU1ICIuLi8uLi8uLi8u
Li8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Zvcm1zL3NyYy9uc0Zvcm1Db250cm9sSGVscGVyLmNw
cCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01IVE1MSW5wdXRFbGVtZW50
LmgiIDEKIyA1NiAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQvaHRtbC9mb3Jtcy9zcmMv
bnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNOZXRDSUQuaCIgMQojIDU3ICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Zv
cm1zL3NyYy9uc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVNlcnZpY2VNYW5hZ2VyLmgiIDEKIyA2MCAiLi4vLi4vLi4vLi4vLi4vbW96
aWxsYS9sYXlvdXQvaHRtbC9mb3Jtcy9zcmMvbnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAx
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJSU9TZXJ2aWNlLmgiIDEKIyAxNyAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUlPU2VydmljZS5oIgpjbGFzcyBuc0lQcm90b2NvbEhhbmRs
ZXI7CgpjbGFzcyBuc0lDaGFubmVsOwoKY2xhc3MgbnNJVVJJOwoKY2xhc3MgbnNJVVJMUGFyc2Vy
OwoKY2xhc3MgbnNJRmlsZTsKIyAzNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUlPU2Vy
dmljZS5oIgpjbGFzcyBuc0lJT1NlcnZpY2UgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGlj
OgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlk
ID0gezB4YWI3YzNhODQsIDB4ZDQ4OCwgMHgxMWQzLCB7IDB4OGMsIDB4ZGEsIDB4MDAsIDB4NjAs
IDB4YjAsIDB4ZmMsIDB4MTQsIDB4YTMgfX07IHJldHVybiBpaWQ7fQojIDQ3ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJSU9TZXJ2aWNlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm90
b2NvbEhhbmRsZXIoY29uc3QgY2hhciAqc2NoZW1lLCBuc0lQcm90b2NvbEhhbmRsZXIgKipfcmV0
dmFsKSA9IDA7CiMgNjAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJT1NlcnZpY2UuaCIK
ICB2aXJ0dWFsIG5zcmVzdWx0IE5ld1VSSShjb25zdCBjaGFyICphU3BlYywgbnNJVVJJICphQmFz
ZVVSSSwgbnNJVVJJICoqX3JldHZhbCkgPSAwOwojIDY5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJSU9TZXJ2aWNlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBOZXdGaWxlVVJJKG5zSUZpbGUg
KmFTcGVjLCBuc0lVUkkgKipfcmV0dmFsKSA9IDA7CiMgODcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lJT1NlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE5ld0NoYW5uZWxGcm9tVVJJ
KG5zSVVSSSAqYVVSSSwgbnNJQ2hhbm5lbCAqKl9yZXR2YWwpID0gMDsKIyAxMDUgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lJT1NlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE5ld0No
YW5uZWwoY29uc3QgY2hhciAqYVNwZWMsIG5zSVVSSSAqYUJhc2VVUkksIG5zSUNoYW5uZWwgKipf
cmV0dmFsKSA9IDA7CiMgMTE0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJSU9TZXJ2aWNl
LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPZmZsaW5lKFBSQm9vbCAqYU9mZmxpbmUpID0gMDsK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldE9mZmxpbmUoUFJCb29sIGFPZmZsaW5lKSA9IDA7CiMgMTI1
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJSU9TZXJ2aWNlLmgiCiAgdmlydHVhbCBuc3Jl
c3VsdCBBbGxvd1BvcnQoUFJJbnQzMiBwb3J0LCBjb25zdCBjaGFyICpzY2hlbWUsIFBSQm9vbCAq
X3JldHZhbCkgPSAwOwojIDE0MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUlPU2Vydmlj
ZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRXh0cmFjdFNjaGVtZShjb25zdCBjaGFyICp1cmxTdHJp
bmcsIFBSVWludDMyICpzY2hlbWVTdGFydFBvcywgUFJVaW50MzIgKnNjaGVtZUVuZFBvcywgY2hh
ciAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFyc2VyRm9yU2NoZW1l
KGNvbnN0IGNoYXIgKnNjaGVtZSwgbnNJVVJMUGFyc2VyICoqX3JldHZhbCkgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBFeHRyYWN0VXJsUGFydChjb25zdCBjaGFyICp1cmxTdHJpbmcsIFBSSW50
MTYgZmxhZywgUFJVaW50MzIgKnN0YXJ0UG9zLCBQUlVpbnQzMiAqZW5kUG9zLCBjaGFyICoqX3Jl
dHZhbCkgPSAwOwoKCgoKICBlbnVtIHsgdXJsX1NjaGVtZSA9IDEgfTsKCiAgZW51bSB7IHVybF9V
c2VybmFtZSA9IDIgfTsKCiAgZW51bSB7IHVybF9QYXNzd29yZCA9IDQgfTsKCiAgZW51bSB7IHVy
bF9Ib3N0ID0gOCB9OwoKICBlbnVtIHsgdXJsX0RpcmVjdG9yeSA9IDE2IH07CgogIGVudW0geyB1
cmxfRmlsZUJhc2VOYW1lID0gMzIgfTsKCiAgZW51bSB7IHVybF9GaWxlRXh0ZW5zaW9uID0gNjQg
fTsKCiAgZW51bSB7IHVybF9QYXJhbSA9IDEyOCB9OwoKICBlbnVtIHsgdXJsX1F1ZXJ5ID0gMjU2
IH07CgogIGVudW0geyB1cmxfUmVmID0gNTEyIH07CgogIGVudW0geyB1cmxfRm9yY2VkID0gMTAy
NCB9OwojIDE4NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUlPU2VydmljZS5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgRXNjYXBlKGNvbnN0IGNoYXIgKnN0ciwgUFJJbnQxNiBtYXNrLCBjaGFy
ICoqX3JldHZhbCkgPSAwOwojIDE5MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUlPU2Vy
dmljZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgVW5lc2NhcGUoY29uc3QgY2hhciAqc3RyLCBjaGFy
ICoqX3JldHZhbCkgPSAwOwojIDIwMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUlPU2Vy
dmljZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRXh0cmFjdFBvcnQoY29uc3QgY2hhciAqc3RyLCBQ
UkludDMyICpfcmV0dmFsKSA9IDA7CiMgMjE3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
SU9TZXJ2aWNlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXNvbHZlUmVsYXRpdmVQYXRoKGNvbnN0
IGNoYXIgKnJlbGF0aXZlUGF0aCwgY29uc3QgY2hhciAqYmFzZVBhdGgsIGNoYXIgKipfcmV0dmFs
KSA9IDA7Cgp9OwojIDYxICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Zvcm1z
L3NyYy9uc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lVUkkuaCIgMQojIDYxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVVJJLmgi
CmNsYXNzIG5zSVVSSSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBj
b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwN2EyMmNj
MCwgMHgwY2U1LCAweDExZDMsIHsgMHg5MywgMHgzMSwgMHgwMCwgMHgxMCwgMHg0YiwgMHhhMCwg
MHhmZCwgMHg0MCB9fTsgcmV0dXJuIGlpZDt9CiMgNzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lVUkkuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNwZWMoY2hhciAqICphU3BlYykgPSAw
OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U3BlYyhjb25zdCBjaGFyICogYVNwZWMpID0gMDsKCgoK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmVQYXRoKGNoYXIgKiAqYVByZVBhdGgpID0gMDsK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByZVBhdGgoY29uc3QgY2hhciAqIGFQcmVQYXRoKSA9IDA7
CiMgOTMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lVUkkuaCIKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldFNjaGVtZShjaGFyICogKmFTY2hlbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl
dFNjaGVtZShjb25zdCBjaGFyICogYVNjaGVtZSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0UHJlSG9zdChjaGFyICogKmFQcmVIb3N0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT
ZXRQcmVIb3N0KGNvbnN0IGNoYXIgKiBhUHJlSG9zdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRVc2VybmFtZShjaGFyICogKmFVc2VybmFtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg
U2V0VXNlcm5hbWUoY29uc3QgY2hhciAqIGFVc2VybmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRQYXNzd29yZChjaGFyICogKmFQYXNzd29yZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1
bHQgU2V0UGFzc3dvcmQoY29uc3QgY2hhciAqIGFQYXNzd29yZCkgPSAwOwoKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0SG9zdChjaGFyICogKmFIb3N0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs
dCBTZXRIb3N0KGNvbnN0IGNoYXIgKiBhSG9zdCkgPSAwOwojIDEzMCAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVVSSS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UG9ydChQUkludDMyICph
UG9ydCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UG9ydChQUkludDMyIGFQb3J0KSA9IDA7
CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGF0aChjaGFyICogKmFQYXRoKSA9IDA7CiAg
dmlydHVhbCBuc3Jlc3VsdCBTZXRQYXRoKGNvbnN0IGNoYXIgKiBhUGF0aCkgPSAwOwojIDE1MSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVVSSS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRXF1
YWxzKG5zSVVSSSAqb3RoZXIsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwojIDE2MCAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVVSSS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2NoZW1lSXMoY29u
c3QgY2hhciAqc2NoZW1lLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKIyAxNjkgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lVUkkuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENsb25lKG5zSVVSSSAq
Kl9yZXR2YWwpID0gMDsKIyAxNzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lVUkkuaCIK
ICB2aXJ0dWFsIG5zcmVzdWx0IFJlc29sdmUoY29uc3QgY2hhciAqcmVsYXRpdmVQYXRoLCBjaGFy
ICoqX3JldHZhbCkgPSAwOwoKfTsKIyA2MiAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQv
aHRtbC9mb3Jtcy9zcmMvbnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJU3RyaW5nQnVuZGxlLmgiIDEKIyAzOSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVN0cmluZ0J1bmRsZS5oIgpjbGFzcyBuc0lTdHJpbmdCdW5kbGUgOiBwdWJs
aWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgp
IHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZDg1YTE3YzIsIDB4YWE3YywgMHgxMWQyLCB7
IDB4OWIsIDB4OGMsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4MTYsIDB4ZDkgfX07IHJldHVy
biBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTdHJpbmdGcm9tSUQoUFJJbnQzMiBhSUQs
IFBSVW5pY2hhciAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3RyaW5n
RnJvbU5hbWUoY29uc3QgUFJVbmljaGFyICphTmFtZSwgUFJVbmljaGFyICoqX3JldHZhbCkgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGb3JtYXRTdHJpbmdGcm9tSUQoUFJJbnQzMiBhSUQsIGNv
bnN0IFBSVW5pY2hhciAqKnBhcmFtcywgUFJVaW50MzIgbGVuZ3RoLCBQUlVuaWNoYXIgKipfcmV0
dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZvcm1hdFN0cmluZ0Zyb21OYW1lKGNvbnN0
IFBSVW5pY2hhciAqYU5hbWUsIGNvbnN0IFBSVW5pY2hhciAqKnBhcmFtcywgUFJVaW50MzIgbGVu
Z3RoLCBQUlVuaWNoYXIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVu
dW1lcmF0aW9uKG5zSUJpZGlyZWN0aW9uYWxFbnVtZXJhdG9yICoqX3JldHZhbCkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRTaW1wbGVFbnVtZXJhdGlvbihuc0lTaW1wbGVFbnVtZXJhdG9y
ICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMb2FkZWQoUFJCb29sICph
TG9hZGVkKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMb2FkZWQoUFJCb29sIGFMb2FkZWQp
ID0gMDsKCn07CiMgMTg3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3RyaW5nQnVuZGxl
LmgiCmNsYXNzIG5zSVN0cmluZ0J1bmRsZVNlcnZpY2UgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewog
cHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJ
SUQgaWlkID0gezB4ZDg1YTE3YzAsIDB4YWE3YywgMHgxMWQyLCB7IDB4OWIsIDB4OGMsIDB4MDAs
IDB4ODAsIDB4NWYsIDB4OGEsIDB4MTYsIDB4ZDkgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBDcmVhdGVCdW5kbGUoY29uc3QgY2hhciAqYVVSTFNwZWMsIG5zSVN0cmluZ0J1
bmRsZSAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlQXN5bmNCdW5k
bGUoY29uc3QgY2hhciAqYVVSTFNwZWMsIG5zSVN0cmluZ0J1bmRsZSAqKl9yZXR2YWwpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlRXh0ZW5zaWJsZUJ1bmRsZShjb25zdCBjaGFyICph
UmVnaXN0cnlLZXksIG5zSVN0cmluZ0J1bmRsZSAqKl9yZXR2YWwpID0gMDsKIyAyMTAgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHJpbmdCdW5kbGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0
IEZvcm1hdFN0YXR1c01lc3NhZ2UobnNyZXN1bHQgYVN0YXR1cywgY29uc3QgUFJVbmljaGFyICph
U3RhdHVzQXJnLCBQUlVuaWNoYXIgKipfcmV0dmFsKSA9IDA7CiMgMjIyICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJU3RyaW5nQnVuZGxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBGbHVzaEJ1
bmRsZXModm9pZCkgPSAwOwoKfTsKIyA2MyAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQv
aHRtbC9mb3Jtcy9zcmMvbnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJVGV4dENvbnRlbnQuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJVGV4dENvbnRlbnQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNsYXlvdXQuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVGV4dENvbnRl
bnQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiIDEKIyAy
NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVRleHRDb250ZW50LmgiIDIKY2xhc3MgbnNT
dHJpbmc7CmNsYXNzIG5zVGV4dEZyYWdtZW50OwojIDM4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJVGV4dENvbnRlbnQuaCIKY2xhc3MgbnNJVGV4dENvbnRlbnQgOiBwdWJsaWMgbnNJQ29u
dGVudCB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHsgc3RhdGljIG5z
SUlEIGlpZCA9IHsweGE2Y2Y5MDY1LCAweDE1YjMsIDB4MTFkMiwgezB4OTMsIDB4MmUsIDB4MDAs
IDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzJ9fTsgcmV0dXJuIGlpZDsgfQoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldFRleHQoY29uc3QgbnNUZXh0RnJhZ21lbnQqKiBhRnJhZ21lbnRzUmVz
dWx0KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGV4dExlbmd0aChQUkludDMyKiBh
TGVuZ3RoUmVzdWx0KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29weVRleHQobnNBV3Jp
dGFibGVTdHJpbmcmIGFSZXN1bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VGV4
dChjb25zdCBQUlVuaWNoYXIqIGFCdWZmZXIsCiAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIg
YUxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFOb3RpZnkpID0gMDsKCgoKCgog
IHZpcnR1YWwgbnNyZXN1bHQgU2V0VGV4dChjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVN0ciwK
ICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFOb3RpZnkpID0gMDsKCgoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgU2V0VGV4dChjb25zdCBjaGFyKiBhQnVmZmVyLAogICAgICAgICAgICAgICAgICAg
ICBQUkludDMyIGFMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhTm90aWZ5KSA9
IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNPbmx5V2hpdGVzcGFjZShQUkJvb2wqIGFSZXN1
bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xvbmVDb250ZW50KFBSQm9vbCBhQ2xv
bmVUZXh0LCBuc0lUZXh0Q29udGVudCoqIGFDbG9uZSkgPSAwOwp9OwojIDEwMCAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVRleHRDb250ZW50LmgiCmNsYXNzIG5zSVRleHRDb250ZW50Q2hh
bmdlRGF0YSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJ
SUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwNWUsIDB4MTVi
MywgMHgxMWQyLCB7MHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgz
Mn19OyByZXR1cm4gaWlkO307CgogIGVudW0gQ2hhbmdlVHlwZSB7CiAgICBJbnNlcnQsCiAgICBB
cHBlbmQsCiAgICBSZXBsYWNlCiAgfTsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2hhbmdl
VHlwZShDaGFuZ2VUeXBlKiBhUmVzdWx0KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW5z
ZXJ0RGF0YShQUkludDMyKiBhT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBQUklu
dDMyKiBhSW5zZXJ0TGVuZ3RoKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXBwZW5kRGF0
YShQUkludDMyKiBhT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyKiBh
QXBwZW5kTGVuZ3RoKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmVwbGFjZURhdGEoUFJJ
bnQzMiogYU9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIqIGFTb3Vy
Y2VMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyKiBhUmVwbGFjZUxl
bmd0aCkgPSAwOwp9OwoKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdUZXh0Tm9kZShuc0lDb250ZW50
KiogYVJlc3VsdCk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3Q29tbWVudE5vZGUobnNJQ29udGVu
dCoqIGFSZXN1bHQpOwojIDY0ICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Zv
cm1zL3NyYy9uc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lTdXBwb3J0c0FycmF5LmgiIDEKIyAxNCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVN1cHBvcnRzQXJyYXkuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
Q29sbGVjdGlvbi5oIiAxCiMgMjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb2xsZWN0
aW9uLmgiCmNsYXNzIG5zSUNvbGxlY3Rpb24gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGlj
OgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlk
ID0gezB4ODNiNjAxOWMsIDB4Y2JjNCwgMHgxMWQyLCB7IDB4OGMsIDB4Y2EsIDB4MDAsIDB4NjAs
IDB4YjAsIDB4ZmMsIDB4MTQsIDB4YTMgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBDb3VudChQUlVpbnQzMiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRFbGVtZW50QXQoUFJVaW50MzIgaW5kZXgsIG5zSVN1cHBvcnRzICoqX3JldHZhbCkgPSAwOwoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBRdWVyeUVsZW1lbnRBdChQUlVpbnQzMiBpbmRleCwgY29uc3Qg
bnNJSUQgJiB1dWlkLCB2b2lkICogKnJlc3VsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBT
ZXRFbGVtZW50QXQoUFJVaW50MzIgaW5kZXgsIG5zSVN1cHBvcnRzICppdGVtKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEFwcGVuZEVsZW1lbnQobnNJU3VwcG9ydHMgKml0ZW0pID0gMDsKCgog
IHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlRWxlbWVudChuc0lTdXBwb3J0cyAqaXRlbSkgPSAwOwoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBFbnVtZXJhdGUobnNJRW51bWVyYXRvciAqKl9yZXR2YWwpID0g
MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xlYXIodm9pZCkgPSAwOwoKfTsKIyAxNSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzQXJyYXkuaCIgMgoKCgoKCgpjbGFzcyBuc0lC
aWRpcmVjdGlvbmFsRW51bWVyYXRvcjsKIyAzNCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVN1cHBvcnRzQXJyYXkuaCIKdHlwZWRlZiBQUkJvb2wgKCpuc0lTdXBwb3J0c0FycmF5RW51bUZ1
bmMpKG5zSVN1cHBvcnRzKiBhRWxlbWVudCwgdm9pZCAqYURhdGEpOwojIDQ0ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNBcnJheS5oIgpjbGFzcyBuc0lTdXBwb3J0c0FycmF5
IDogcHVibGljIG5zSUNvbGxlY3Rpb24gewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQm
IEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4NzkxZWFmYTAsIDB4YjllNiwg
MHgxMWQxLCB7IDB4ODAsIDB4MzEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4MTUsIDB4OWIsIDB4NWEg
fX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBQUkJvb2wgRXF1YWxzKGNvbnN0IG5zSVN1cHBv
cnRzQXJyYXkgKm90aGVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zSVN1cHBvcnRzICogRWxlbWVudEF0
KFBSVWludDMyIGFJbmRleCkgPSAwOwoKCiAgdmlydHVhbCBQUkludDMyIEluZGV4T2YoY29uc3Qg
bnNJU3VwcG9ydHMgKmFQb3NzaWJsZUVsZW1lbnQpID0gMDsKCgogIHZpcnR1YWwgUFJJbnQzMiBJ
bmRleE9mU3RhcnRpbmdBdChjb25zdCBuc0lTdXBwb3J0cyAqYVBvc3NpYmxlRWxlbWVudCwgUFJV
aW50MzIgYVN0YXJ0SW5kZXgpID0gMDsKCgogIHZpcnR1YWwgUFJJbnQzMiBMYXN0SW5kZXhPZihj
b25zdCBuc0lTdXBwb3J0cyAqYVBvc3NpYmxlRWxlbWVudCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRJbmRleE9mKG5zSVN1cHBvcnRzICphUG9zc2libGVFbGVtZW50LCBQUkludDMyICpf
cmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEluZGV4T2ZTdGFydGluZ0F0KG5z
SVN1cHBvcnRzICphUG9zc2libGVFbGVtZW50LCBQUlVpbnQzMiBhU3RhcnRJbmRleCwgUFJJbnQz
MiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYXN0SW5kZXhPZihuc0lT
dXBwb3J0cyAqYVBvc3NpYmxlRWxlbWVudCwgUFJJbnQzMiAqX3JldHZhbCkgPSAwOwoKCiAgdmly
dHVhbCBQUkJvb2wgSW5zZXJ0RWxlbWVudEF0KG5zSVN1cHBvcnRzICphRWxlbWVudCwgUFJVaW50
MzIgYUluZGV4KSA9IDA7CgoKICB2aXJ0dWFsIFBSQm9vbCBSZXBsYWNlRWxlbWVudEF0KG5zSVN1
cHBvcnRzICphRWxlbWVudCwgUFJVaW50MzIgYUluZGV4KSA9IDA7CgoKICB2aXJ0dWFsIFBSQm9v
bCBSZW1vdmVFbGVtZW50QXQoUFJVaW50MzIgYUluZGV4KSA9IDA7CgoKICB2aXJ0dWFsIFBSQm9v
bCBSZW1vdmVMYXN0RWxlbWVudChjb25zdCBuc0lTdXBwb3J0cyAqYUVsZW1lbnQpID0gMDsKCgog
IHZpcnR1YWwgbnNyZXN1bHQgRGVsZXRlTGFzdEVsZW1lbnQobnNJU3VwcG9ydHMgKmFFbGVtZW50
KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlbGV0ZUVsZW1lbnRBdChQUlVpbnQzMiBhSW5k
ZXgpID0gMDsKCgogIHZpcnR1YWwgUFJCb29sIEFwcGVuZEVsZW1lbnRzKG5zSVN1cHBvcnRzQXJy
YXkgKmFFbGVtZW50cykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb21wYWN0KHZvaWQpID0g
MDsKCgogIHZpcnR1YWwgUFJCb29sIEVudW1lcmF0ZUZvcndhcmRzKG5zSVN1cHBvcnRzQXJyYXlF
bnVtRnVuYyBhRnVuYywgdm9pZCAqIGFEYXRhKSA9IDA7CgoKICB2aXJ0dWFsIFBSQm9vbCBFbnVt
ZXJhdGVCYWNrd2FyZHMobnNJU3VwcG9ydHNBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lkICogYURh
dGEpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xvbmUobnNJU3VwcG9ydHNBcnJheSAqKl9y
ZXR2YWwpID0gMDsKCnByaXZhdGU6CgogIHZpcnR1YWwgUFJCb29sIG9wZXJhdG9yPT0oY29uc3Qg
bnNJU3VwcG9ydHNBcnJheSYgb3RoZXIpID0gMDsKICB2aXJ0dWFsIG5zSVN1cHBvcnRzKiBvcGVy
YXRvcltdKFBSVWludDMyIGFJbmRleCkgPSAwOwp9OwojIDMyNSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVN1cHBvcnRzQXJyYXkuaCIKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0lTdXBwb3J0
c0FycmF5KG5zSVN1cHBvcnRzQXJyYXkqKiBhSW5zdGFuY2VQdHJSZXN1bHQpOwoKZXh0ZXJuIG5z
cmVzdWx0Ck5TX05ld0lTdXBwb3J0c0FycmF5RW51bWVyYXRvcihuc0lTdXBwb3J0c0FycmF5KiBh
cnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUJpZGlyZWN0aW9uYWxFbnVt
ZXJhdG9yKiAqYUluc3RhbmNlUHRyUmVzdWx0KTsKIyA2NSAiLi4vLi4vLi4vLi4vLi4vbW96aWxs
YS9sYXlvdXQvaHRtbC9mb3Jtcy9zcmMvbnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNYUElETFN0cmluZy5oIiAxCiMgOTEgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc1hQSURMU3RyaW5nLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zY29yZS5oIiAxCiMgOTIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1hQSURM
U3RyaW5nLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb20uaCIgMQojIDkz
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNYUElETFN0cmluZy5oIiAyCiMgMSAiL2hvbWUv
a2FpL20vMDkyL21vemlsbGEtb3B0aW1pemVkL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIg
MQojIDk0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNYUElETFN0cmluZy5oIiAyCiMgMTA5
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNYUElETFN0cmluZy5oIgpjbGFzcyBuc1hQSURM
U3RyaW5nIHsKcHJpdmF0ZToKICAgIFBSVW5pY2hhciogbUJ1ZjsKCiAgICBQUlVuaWNoYXIqKiBT
dGFydEFzc2lnbm1lbnRCeVZhbHVlKCk7CgpwdWJsaWM6CgoKCiAgICBuc1hQSURMU3RyaW5nKCkg
OiBtQnVmKDApIHt9CgogICAgfm5zWFBJRExTdHJpbmcoKTsKCgoKCiAgICBvcGVyYXRvciBjb25z
dCBQUlVuaWNoYXIqKCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KCgoKCiAgICBjb25zdCBQUlVu
aWNoYXIqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1CdWY7IH0KCgoKCiAgICBjbGFzcyBHZXR0ZXJD
b3BpZXMgewogICAgcHJpdmF0ZToKICAgICAgICBuc1hQSURMU3RyaW5nJiBtWFBJRExTdHJpbmc7
CgogICAgcHVibGljOgogICAgICAgIEdldHRlckNvcGllcyhuc1hQSURMU3RyaW5nJiBhWFBJRExT
dHJpbmcpCiAgICAgICAgICAgIDogbVhQSURMU3RyaW5nKGFYUElETFN0cmluZykge30KCiAgICAg
ICAgb3BlcmF0b3IgUFJVbmljaGFyKiooKSB7CiAgICAgICAgICAgIHJldHVybiBtWFBJRExTdHJp
bmcuU3RhcnRBc3NpZ25tZW50QnlWYWx1ZSgpOwogICAgICAgIH0KCiAgICAgICAgZnJpZW5kIEdl
dHRlckNvcGllcyBnZXR0ZXJfQ29waWVzKG5zWFBJRExTdHJpbmcmIGFYUElETFN0cmluZyk7CiAg
ICB9OwoKICAgIGZyaWVuZCBjbGFzcyBHZXR0ZXJDb3BpZXM7CgogICAgaW5saW5lIHZvaWQgQWRv
cHQoIFBSVW5pY2hhciogKTsKCnByaXZhdGU6CgogICAgbnNYUElETFN0cmluZyhuc1hQSURMU3Ry
aW5nJiApIHt9CiAgICB2b2lkIG9wZXJhdG9yPShuc1hQSURMU3RyaW5nJiApIHt9Cn07CgoKCgoK
aW5saW5lIG5zWFBJRExTdHJpbmc6OkdldHRlckNvcGllcwpnZXR0ZXJfQ29waWVzKG5zWFBJRExT
dHJpbmcmIGFYUElETFN0cmluZykKewogICAgcmV0dXJuIG5zWFBJRExTdHJpbmc6OkdldHRlckNv
cGllcyhhWFBJRExTdHJpbmcpOwp9CgppbmxpbmUKdm9pZApuc1hQSURMU3RyaW5nOjpBZG9wdCgg
UFJVbmljaGFyKiBhTmV3VmFsdWUgKQogIHsKICAgICpTdGFydEFzc2lnbm1lbnRCeVZhbHVlKCkg
PSBhTmV3VmFsdWU7CiAgfQoKCmlubGluZQpQUkJvb2wKb3BlcmF0b3I9PShjb25zdCBQUlVuaWNo
YXIqIGxocywgY29uc3QgbnNYUElETFN0cmluZyYgcmhzKQp7CiAgICByZXR1cm4gbGhzID09IHJo
cy5nZXQoKTsKfQoKaW5saW5lClBSQm9vbApvcGVyYXRvcj09KGNvbnN0IG5zWFBJRExTdHJpbmcm
IGxocywgY29uc3QgUFJVbmljaGFyKiByaHMpCnsKICAgIHJldHVybiBsaHMuZ2V0KCkgPT0gcmhz
Owp9CiMgMjIxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNYUElETFN0cmluZy5oIgpjbGFz
cyBuc1hQSURMQ1N0cmluZyB7CnByaXZhdGU6CiAgICBjaGFyKiBtQnVmOwoKICAgIGNoYXIqKiBT
dGFydEFzc2lnbm1lbnRCeVZhbHVlKCk7CgpwdWJsaWM6CgoKCiAgICBuc1hQSURMQ1N0cmluZygp
IDogbUJ1ZigwKSB7fQoKICAgIH5uc1hQSURMQ1N0cmluZygpOwoKCgoKICAgIG9wZXJhdG9yIGNv
bnN0IGNoYXIqKCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KCgoKCiAgICBjb25zdCBjaGFyKiBn
ZXQoKSBjb25zdCB7IHJldHVybiBtQnVmOyB9CgoKCgogICAgY2xhc3MgR2V0dGVyQ29waWVzIHsK
ICAgIHByaXZhdGU6CiAgICAgICAgbnNYUElETENTdHJpbmcmIG1YUElETFN0cmluZzsKCiAgICBw
dWJsaWM6CiAgICAgICAgR2V0dGVyQ29waWVzKG5zWFBJRExDU3RyaW5nJiBhWFBJRExTdHJpbmcp
CiAgICAgICAgICAgIDogbVhQSURMU3RyaW5nKGFYUElETFN0cmluZykge30KCiAgICAgICAgb3Bl
cmF0b3IgY2hhcioqKCkgewogICAgICAgICAgICByZXR1cm4gbVhQSURMU3RyaW5nLlN0YXJ0QXNz
aWdubWVudEJ5VmFsdWUoKTsKICAgICAgICB9CgogICAgICAgIGZyaWVuZCBHZXR0ZXJDb3BpZXMg
Z2V0dGVyX0NvcGllcyhuc1hQSURMQ1N0cmluZyYgYVhQSURMU3RyaW5nKTsKICAgIH07CgogICAg
ZnJpZW5kIGNsYXNzIEdldHRlckNvcGllczsKCiAgICBpbmxpbmUgdm9pZCBBZG9wdCggY2hhciog
KTsKCnByaXZhdGU6CgogICAgbnNYUElETENTdHJpbmcobnNYUElETENTdHJpbmcmICkge30KICAg
IHZvaWQgb3BlcmF0b3I9KG5zWFBJRExDU3RyaW5nJiApIHt9Cn07CgoKCgoKaW5saW5lIG5zWFBJ
RExDU3RyaW5nOjpHZXR0ZXJDb3BpZXMKZ2V0dGVyX0NvcGllcyhuc1hQSURMQ1N0cmluZyYgYVhQ
SURMU3RyaW5nKQp7CiAgICByZXR1cm4gbnNYUElETENTdHJpbmc6OkdldHRlckNvcGllcyhhWFBJ
RExTdHJpbmcpOwp9CgppbmxpbmUKdm9pZApuc1hQSURMQ1N0cmluZzo6QWRvcHQoIGNoYXIqIGFO
ZXdWYWx1ZSApCiAgewogICAgKlN0YXJ0QXNzaWdubWVudEJ5VmFsdWUoKSA9IGFOZXdWYWx1ZTsK
ICB9CgoKaW5saW5lClBSQm9vbApvcGVyYXRvcj09KGNvbnN0IGNoYXIqIGxocywgY29uc3QgbnNY
UElETENTdHJpbmcmIHJocykKewogICAgcmV0dXJuIGxocyA9PSByaHMuZ2V0KCk7Cn0KCmlubGlu
ZQpQUkJvb2wKb3BlcmF0b3I9PShjb25zdCBuc1hQSURMQ1N0cmluZyYgbGhzLCBjb25zdCBjaGFy
KiByaHMpCnsKICAgIHJldHVybiBsaHMuZ2V0KCkgPT0gcmhzOwp9CiMgNjYgIi4uLy4uLy4uLy4u
Ly4uL21vemlsbGEvbGF5b3V0L2h0bWwvZm9ybXMvc3JjL25zRm9ybUNvbnRyb2xIZWxwZXIuY3Bw
IiAyCgpzdGF0aWMgY29uc3QgbnNDSUQga0lPU2VydmljZUNJRCA9IHsgMHg5YWM5ZTc3MCwgMHgx
OGJjLCAweDExZDMsIHsweDkzLCAweDM3LCAweDAwLCAweDEwLCAweDRiLCAweGEwLCAweGZkLCAw
eDQwfSB9OwpzdGF0aWMgY29uc3QgbnNDSUQga1N0cmluZ0J1bmRsZVNlcnZpY2VDSUQgPSB7IDB4
ZDg1YTE3YzEsIDB4YWE3YywgMHgxMWQyLCB7IDB4OWIsIDB4OGMsIDB4MCwgMHg4MCwgMHg1Ziwg
MHg4YSwgMHgxNiwgMHhkOSB9IH07CgoKCnN0YXRpYyBjb25zdCBuc0lJRCBrSVN1cHBvcnRzSUlE
ID0geyAweDAwMDAwMDAwLCAweDAwMDAsIDB4MDAwMCwgezB4YzAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4NDZ9IH07CnN0YXRpYyBjb25zdCBuc0lJRCBrVmlld0NJRCA9
IHsgMHhjOTVmMTgzMiwgMHhjMzc2LCAweDExZDEsIHsweGI3LCAweDIxLCAweDAsIDB4NjAsIDB4
OCwgMHg5MSwgMHhkOCwgMHhjOX19OwojIDg4ICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91
dC9odG1sL2Zvcm1zL3NyYy9uc0Zvcm1Db250cm9sSGVscGVyLmNwcCIKbnNGb3JtQ29udHJvbEhl
bHBlcjo6bnNGb3JtQ29udHJvbEhlbHBlcigpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKfQoKbnNGb3JtQ29udHJvbEhlbHBlcjo6fm5zRm9ybUNvbnRyb2xIZWxwZXIo
KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cn0KCnZvaWQgbnNGb3Jt
Q29udHJvbEhlbHBlcjo6Rm9yY2VEcmF3RnJhbWUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4
dCwgbnNJRnJhbWUgKiBhRnJhbWUpCnsKCiAgaWYgKGFGcmFtZSA9PSAwKSB7CiAgICByZXR1cm47
CiAgfQogIG5zUmVjdCByZWN0OwogIG5zSVZpZXcgKiB2aWV3OwogIG5zUG9pbnQgcG50OwogIGFG
cmFtZS0+R2V0T2Zmc2V0RnJvbVZpZXcoYVByZXNDb250ZXh0LCBwbnQsICZ2aWV3KTsKICBhRnJh
bWUtPkdldFJlY3QocmVjdCk7CiAgcmVjdC54ID0gcG50Lng7CiAgcmVjdC55ID0gcG50Lnk7CiAg
aWYgKHZpZXcgIT0gMCkgewogICAgbnNJVmlld01hbmFnZXIgKiB2aWV3TWdyOwogICAgdmlldy0+
R2V0Vmlld01hbmFnZXIodmlld01ncik7CiAgICBpZiAodmlld01nciAhPSAwKSB7CiAgICAgIHZp
ZXdNZ3ItPlVwZGF0ZVZpZXcodmlldywgcmVjdCwgMHgwMDA0KTsKICAgICAgZG8geyAodmlld01n
ciktPlJlbGVhc2UoKTsgKHZpZXdNZ3IpID0gMDsgfSB3aGlsZSAoMCk7CiAgICB9CiAgfQoKfQoK
dm9pZCBuc0Zvcm1Db250cm9sSGVscGVyOjpQbGF0Zm9ybVRvRE9NTGluZUJyZWFrcyhuc1N0cmlu
ZyAmYVN0cmluZykKewoKICBhU3RyaW5nLlJlcGxhY2VTdWJzdHJpbmcoTlNfQ29udmVydEFTQ0lJ
dG9VQ1MyKCJcclxuIiksIE5TX0NvbnZlcnRBU0NJSXRvVUNTMigiXG4iKSk7CgoKICBhU3RyaW5n
LlJlcGxhY2VTdWJzdHJpbmcoTlNfQ29udmVydEFTQ0lJdG9VQ1MyKCJcciIpLCBOU19Db252ZXJ0
QVNDSUl0b1VDUzIoIlxuIikpOwp9CgpQUkJvb2wgbnNGb3JtQ29udHJvbEhlbHBlcjo6R2V0Qm9v
bChjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVZhbHVlKQp7CiAgcmV0dXJuIGFWYWx1ZS5FcXVh
bHMoc3RhdGljX2Nhc3Q8IGNvbnN0IG5zQUZsYXRTdHJpbmcmID4oTlNfQ29udmVydEFTQ0lJdG9V
Q1MyKCIxIiwgUFJVaW50MzIoc2l6ZW9mKCIxIiktMSkpKSk7Cn0KCnZvaWQgbnNGb3JtQ29udHJv
bEhlbHBlcjo6R2V0Qm9vbFN0cmluZyhjb25zdCBQUkJvb2wgYVZhbHVlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBV3JpdGFibGVTdHJpbmcmIGFSZXN1bHQpCnsK
ICBpZiAoYVZhbHVlKQogICAgYVJlc3VsdC5Bc3NpZ24oc3RhdGljX2Nhc3Q8IGNvbnN0IG5zQUZs
YXRTdHJpbmcmID4oTlNfQ29udmVydEFTQ0lJdG9VQ1MyKCIxIiwgUFJVaW50MzIoc2l6ZW9mKCIx
IiktMSkpKSk7CiAgZWxzZQogICAgYVJlc3VsdC5Bc3NpZ24oc3RhdGljX2Nhc3Q8IGNvbnN0IG5z
QUZsYXRTdHJpbmcmID4oTlNfQ29udmVydEFTQ0lJdG9VQ1MyKCIwIiwgUFJVaW50MzIoc2l6ZW9m
KCIwIiktMSkpKSk7Cn0KCgpuc0NvbXBhdGliaWxpdHkKbnNGb3JtQ29udHJvbEhlbHBlcjo6R2V0
UmVwQ2hhcnMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgY2hhciYgY2hhcjEsIGNoYXIm
IGNoYXIyKQp7CiAgbnNDb21wYXRpYmlsaXR5IG1vZGU7CiAgYVByZXNDb250ZXh0LT5HZXRDb21w
YXRpYmlsaXR5TW9kZSgmbW9kZSk7CiAgaWYgKGVDb21wYXRpYmlsaXR5X1N0YW5kYXJkID09IG1v
ZGUpIHsKICAgIGNoYXIxID0gJ1cnOwogICAgY2hhcjIgPSAndyc7CiAgICByZXR1cm4gZUNvbXBh
dGliaWxpdHlfU3RhbmRhcmQ7CiAgfSBlbHNlIHsKICAgIGNoYXIxID0gJ1cnOwogICAgY2hhcjIg
PSAndyc7CiAgICByZXR1cm4gZUNvbXBhdGliaWxpdHlfTmF2UXVpcmtzOwogIH0KfQoKbnNyZXN1
bHQgbnNGb3JtQ29udHJvbEhlbHBlcjo6R2V0RnJhbWVGb250Rk0obnNJUHJlc0NvbnRleHQqIGFQ
cmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lG
b3JtQ29udHJvbEZyYW1lICogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zSUZvbnRNZXRyaWNzKiogYUZvbnRNZXQpCnsKCiAgY29uc3QgbnNGb250ICog
Zm9udCA9IDA7CgogIGlmICgoISgoYUZyYW1lLT5HZXRGb250KGFQcmVzQ29udGV4dCwgZm9udCkp
ICYgMHg4MDAwMDAwMCkpKSB7CiAgICBuc0NPTVB0cjxuc0lEZXZpY2VDb250ZXh0PiBkZXZpY2VD
b250ZXh0OwogICAgYVByZXNDb250ZXh0LT5HZXREZXZpY2VDb250ZXh0KGdldHRlcl9BZGRSZWZz
KGRldmljZUNvbnRleHQpKTsKICAgIHt9OwogICAgaWYgKGZvbnQgIT0gMCkgewogICAgICByZXR1
cm4gZGV2aWNlQ29udGV4dC0+R2V0TWV0cmljc0ZvcigqZm9udCwgKmFGb250TWV0KTsKICAgIH0K
ICB9CiAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMDQwMDVMKTsKfQoKbnNyZXN1bHQKbnNGb3Jt
Q29udHJvbEhlbHBlcjo6R2V0V3JhcFByb3BlcnR5KG5zSUNvbnRlbnQgKiBhQ29udGVudCwgbnNT
dHJpbmcgJmFPdXRWYWx1ZSkKewogIGFPdXRWYWx1ZS5TZXRMZW5ndGgoMCk7CiAgbnNyZXN1bHQg
cmVzdWx0ID0gKChuc3Jlc3VsdCkgKCgoUFJVaW50MzIpKDApPDwzMSkgfCAoKFBSVWludDMyKSg4
ICsweDQ1KTw8MTYpIHwgKChQUlVpbnQzMikoMSkpKSApOwogIG5zSUhUTUxDb250ZW50KiBjb250
ZW50ID0gMDsKICBhQ29udGVudC0+UXVlcnlJbnRlcmZhY2Uoa0lIVE1MQ29udGVudElJRCwgKHZv
aWQqKikgJmNvbnRlbnQpOwogIGlmICgwICE9IGNvbnRlbnQpIHsKICAgIG5zSFRNTFZhbHVlIHZh
bHVlOwogICAgcmVzdWx0ID0gY29udGVudC0+R2V0SFRNTEF0dHJpYnV0ZShuc0hUTUxBdG9tczo6
d3JhcCwgdmFsdWUpOwogICAgaWYgKGVIVE1MVW5pdF9TdHJpbmcgPT0gdmFsdWUuR2V0VW5pdCgp
KSB7CiAgICAgIHZhbHVlLkdldFN0cmluZ1ZhbHVlKGFPdXRWYWx1ZSk7CiAgICB9CiAgICBkbyB7
IChjb250ZW50KS0+UmVsZWFzZSgpOyAoY29udGVudCkgPSAwOyB9IHdoaWxlICgwKTsKICB9CiAg
cmV0dXJuIHJlc3VsdDsKfQoKCm5zcmVzdWx0Cm5zRm9ybUNvbnRyb2xIZWxwZXI6OkdldFdyYXBQ
cm9wZXJ0eUVudW0obnNJQ29udGVudCAqIGFDb250ZW50LCBuc0hUTUxUZXh0V3JhcCYgYVdyYXBQ
cm9wKQp7CiAgbnNTdHJpbmcgd3JhcDsKICBhV3JhcFByb3AgPSBlSFRNTFRleHRXcmFwX09mZjsK
CiAgbnNyZXN1bHQgcmVzdWx0ID0gR2V0V3JhcFByb3BlcnR5KGFDb250ZW50LCB3cmFwKTsKCiAg
aWYgKCgobnNyZXN1bHQpICgoKFBSVWludDMyKSgwKTw8MzEpIHwgKChQUlVpbnQzMikoOCArMHg0
NSk8PDE2KSB8ICgoUFJVaW50MzIpKDEpKSkgKSAhPSByZXN1bHQpIHsKCiAgICBuc0F1dG9TdHJp
bmcgd3JhcEhhcmQ7IHdyYXBIYXJkLkFzc2lnbldpdGhDb252ZXJzaW9uKCJIQVJEIik7CiAgICBu
c0F1dG9TdHJpbmcgd3JhcFBoeXNpY2FsOyB3cmFwUGh5c2ljYWwuQXNzaWduV2l0aENvbnZlcnNp
b24oIlBIWVNJQ0FMIik7CiAgICBpZiAod3JhcC5FcXVhbHNJZ25vcmVDYXNlKHdyYXBIYXJkKSkg
ewogICAgICBhV3JhcFByb3AgPSBlSFRNTFRleHRXcmFwX0hhcmQ7CiAgICAgIHJldHVybiByZXN1
bHQ7CiAgICB9CgogICAgbnNBdXRvU3RyaW5nIHdyYXBTb2Z0OyB3cmFwU29mdC5Bc3NpZ25XaXRo
Q29udmVyc2lvbigiU09GVCIpOwogICAgbnNBdXRvU3RyaW5nIHdyYXBWaXJ0dWFsOyB3cmFwVmly
dHVhbC5Bc3NpZ25XaXRoQ29udmVyc2lvbigiVklSVFVBTCIpOwogICAgaWYgKHdyYXAuRXF1YWxz
SWdub3JlQ2FzZSh3cmFwU29mdCkgfHwKICAgICAgICB3cmFwLkVxdWFsc0lnbm9yZUNhc2Uod3Jh
cFZpcnR1YWwpIHx8CiAgICAgICAgd3JhcC5FcXVhbHNJZ25vcmVDYXNlKHdyYXBQaHlzaWNhbCkp
IHsKICAgICAgYVdyYXBQcm9wID0gZUhUTUxUZXh0V3JhcF9Tb2Z0OwogICAgICByZXR1cm4gcmVz
dWx0OwogICAgfQogIH0KICByZXR1cm4gcmVzdWx0Owp9Cgpuc2Nvb3JkCm5zRm9ybUNvbnRyb2xI
ZWxwZXI6OkNhbGNOYXZRdWlya1NpemluZyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4
dCogYVJlbmRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJRm9udE1ldHJpY3MqIGFGb250TWV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJRm9ybUNvbnRyb2xGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJbnB1dERpbWVuc2lvblNwZWMmIGFTcGVjLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNTaXplJiBhU2l6ZSkKewogIGZsb2F0
IHAydDsKICBmbG9hdCB0MnA7CiAgYVByZXNDb250ZXh0LT5HZXRQaXhlbHNUb1R3aXBzKCZwMnQp
OwogIGFQcmVzQ29udGV4dC0+R2V0VHdpcHNUb1BpeGVscygmdDJwKTsKCiAgbnNjb29yZCBhc2Nl
bnQ7CiAgbnNjb29yZCBkZXNjZW50OwogIG5zY29vcmQgbWF4Q2hhcldpZHRoOwogIGFGb250TWV0
LT5HZXRNYXhBc2NlbnQoYXNjZW50KTsKICBhRm9udE1ldC0+R2V0TWF4RGVzY2VudChkZXNjZW50
KTsKICBhRm9udE1ldC0+R2V0TWF4QWR2YW5jZShtYXhDaGFyV2lkdGgpOwoKICBhc2NlbnQgPSBO
U1RvQ29vcmRSb3VuZChhc2NlbnQgKiB0MnApOwogIGRlc2NlbnQgPSBOU1RvQ29vcmRSb3VuZChk
ZXNjZW50ICogdDJwKTsKICBtYXhDaGFyV2lkdGggPSBOU1RvQ29vcmRSb3VuZChtYXhDaGFyV2lk
dGggKiB0MnApOwoKICBjaGFyIGNoYXIxLCBjaGFyMjsKICBHZXRSZXBDaGFycyhhUHJlc0NvbnRl
eHQsIGNoYXIxLCBjaGFyMik7CgogIG5zY29vcmQgY2hhcjFXaWR0aCwgY2hhcjJXaWR0aDsKICBh
UmVuZENvbnRleHQtPkdldFdpZHRoKGNoYXIxLCBjaGFyMVdpZHRoKTsKICBhUmVuZENvbnRleHQt
PkdldFdpZHRoKGNoYXIyLCBjaGFyMldpZHRoKTsKICBjaGFyMVdpZHRoID0gTlNUb0Nvb3JkUm91
bmQoY2hhcjFXaWR0aCAqIHQycCk7CiAgY2hhcjJXaWR0aCA9IE5TVG9Db29yZFJvdW5kKGNoYXIy
V2lkdGggKiB0MnApOwoKCiAgUFJJbnQzMiB0eXBlOwogIGFGcmFtZS0+R2V0VHlwZSgmdHlwZSk7
CiAgbnNjb29yZCB3aWR0aDsKICBuc2Nvb3JkIGhndDsKICBuc2Nvb3JkIGhlaWdodDsKICBuc2Nv
b3JkIGF2ZXJhZ2UgPSAwOwogIGlmICgoMTQgPT0gdHlwZSkgfHwgKDExID09IHR5cGUpKSB7CiAg
ICBhdmVyYWdlID0gKGNoYXIxV2lkdGggKyBjaGFyMldpZHRoKSAvIDI7CiAgICB3aWR0aCA9IG1h
eENoYXJXaWR0aDsKICAgIGhndCA9IGFzY2VudCArIGRlc2NlbnQ7CiAgICBoZWlnaHQgPSBoZ3Qg
KyAoaGd0IC8gMik7CiAgICB3aWR0aCArPSBhU3BlYy5tQ29sRGVmYXVsdFNpemUgKiBhdmVyYWdl
OwogIH0gZWxzZSBpZiAoMjAgPT0gdHlwZSkgewogICAgbnNjb29yZCBsaW5lcyA9IDE7CiAgICBu
c2Nvb3JkIHNjcm9sbGJhcldpZHRoID0gMDsKICAgIG5zY29vcmQgc2Nyb2xsYmFySGVpZ2h0ID0g
MDsKICAgIGZsb2F0IHNjYWxlOwogICAgbnNDT01QdHI8bnNJRGV2aWNlQ29udGV4dD4gZHg7CiAg
ICBhUHJlc0NvbnRleHQtPkdldERldmljZUNvbnRleHQoZ2V0dGVyX0FkZFJlZnMoZHgpKTsKICAg
IGlmIChkeCkgewogICAgICBmbG9hdCBzYldpZHRoOwogICAgICBmbG9hdCBzYkhlaWdodDsKICAg
ICAgZHgtPkdldENhbm9uaWNhbFBpeGVsU2NhbGUoc2NhbGUpOwogICAgICBkeC0+R2V0U2Nyb2xs
QmFyRGltZW5zaW9ucyhzYldpZHRoLCBzYkhlaWdodCk7CiAgICAgIHNjcm9sbGJhcldpZHRoID0g
UFJJbnQzMihzYldpZHRoICogc2NhbGUpOwogICAgICBzY3JvbGxiYXJIZWlnaHQgPSBQUkludDMy
KHNiSGVpZ2h0ICogc2NhbGUpOwogICAgICBzY3JvbGxiYXJXaWR0aCA9IE5TVG9Db29yZFJvdW5k
KHNjcm9sbGJhcldpZHRoICogdDJwKTsKICAgICAgc2Nyb2xsYmFySGVpZ2h0ID0gTlNUb0Nvb3Jk
Um91bmQoc2Nyb2xsYmFySGVpZ2h0ICogdDJwKTsKICAgIH0gZWxzZSB7CiAgICAgIHt9OwogICAg
ICBzY3JvbGxiYXJXaWR0aCA9IDE2OwogICAgICBzY3JvbGxiYXJIZWlnaHQgPSAxNjsKICAgIH0K
ICAgIG5zSUNvbnRlbnQgKiBjb250ZW50OwogICAgYUZyYW1lLT5HZXRGb3JtQ29udGVudChjb250
ZW50KTsKICAgIG5zQ09NUHRyPG5zSUhUTUxDb250ZW50PiBoQ29udGVudChkb19RdWVyeUludGVy
ZmFjZShjb250ZW50KSk7CgoKICAgIG5zSFRNTFZhbHVlIHJvd0F0dHI7CiAgICBuc3Jlc3VsdCBy
b3dTdGF0dXMgPSAoKG5zcmVzdWx0KSAoKChQUlVpbnQzMikoMCk8PDMxKSB8ICgoUFJVaW50MzIp
KDggKzB4NDUpPDwxNikgfCAoKFBSVWludDMyKSgxKSkpICk7CiAgICBpZiAoMCAhPSBhU3BlYy5t
Um93U2l6ZUF0dHIpIHsKICAgICAgcm93U3RhdHVzID0gaENvbnRlbnQtPkdldEhUTUxBdHRyaWJ1
dGUoYVNwZWMubVJvd1NpemVBdHRyLCByb3dBdHRyKTsKICAgIH0KICAgIGlmICgwID09IHJvd1N0
YXR1cykgewogICAgICBQUkludDMyIHJvd0F0dHJJbnQgPSAoKHJvd0F0dHIuR2V0VW5pdCgpID09
IGVIVE1MVW5pdF9QaXhlbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyByb3dBdHRy
LkdldFBpeGVsVmFsdWUoKSA6IHJvd0F0dHIuR2V0SW50VmFsdWUoKSk7CiAgICAgIGxpbmVzID0g
KHJvd0F0dHJJbnQgPiAwKSA/IHJvd0F0dHJJbnQgOiAxOwogICAgfSBlbHNlIHsKICAgICAgbGlu
ZXMgPSBhU3BlYy5tUm93RGVmYXVsdFNpemU7CiAgICB9CgogICAgYXZlcmFnZSA9IChjaGFyMVdp
ZHRoICsgY2hhcjJXaWR0aCkgLyAyOwogICAgd2lkdGggPSAoKGFTcGVjLm1Db2xEZWZhdWx0U2l6
ZSArIDEpICogYXZlcmFnZSkgKyBzY3JvbGxiYXJXaWR0aDsKICAgIGhndCA9IGFzY2VudCArIGRl
c2NlbnQ7CiAgICBoZWlnaHQgPSAobGluZXMgKyAxKSAqIGhndDsKCgogICAgbnNIVE1MVGV4dFdy
YXAgd3JhcFByb3A7CiAgICBuc0Zvcm1Db250cm9sSGVscGVyOjpHZXRXcmFwUHJvcGVydHlFbnVt
KGNvbnRlbnQsIHdyYXBQcm9wKTsKICAgIGlmICh3cmFwUHJvcCA9PSBlSFRNTFRleHRXcmFwX09m
ZikgewogICAgICBoZWlnaHQgKz0gc2Nyb2xsYmFySGVpZ2h0OwogICAgfQogICAgZG8geyAoY29u
dGVudCktPlJlbGVhc2UoKTsgKGNvbnRlbnQpID0gMDsgfSB3aGlsZSAoMCk7CiAgfSBlbHNlIGlm
ICg1ID09IHR5cGUgfHwKICAgICAgICAgICAgIDEzID09IHR5cGUgfHwKICAgICAgICAgICAgIDkg
PT0gdHlwZSkgewogICAgR2V0VGV4dFNpemUoYVByZXNDb250ZXh0LCBhRnJhbWUsICphU3BlYy5t
Q29sRGVmYXVsdFZhbHVlLCBhU2l6ZSwgYVJlbmRDb250ZXh0KTsKICAgIGFTaXplLndpZHRoID0g
TlNUb0Nvb3JkUm91bmQoYVNpemUud2lkdGggKiB0MnApOwogICAgYVNpemUuaGVpZ2h0ID0gTlNU
b0Nvb3JkUm91bmQoYVNpemUuaGVpZ2h0ICogdDJwKTsKICAgIHdpZHRoID0gMyAqIGFTaXplLndp
ZHRoIC8gMjsKICAgIGhlaWdodCA9IDMgKiBhU2l6ZS5oZWlnaHQgLyAyOwogIH0gZWxzZSBpZiAo
OCA9PSB0eXBlKSB7CiAgICB3aWR0aCA9IDA7CiAgICBoZWlnaHQgPSAwOwogIH0gZWxzZSB7CiAg
ICB3aWR0aCA9IDA7CiAgICBoZWlnaHQgPSAwOwogIH0KCgoKCgoKICBhU2l6ZS53aWR0aCA9IE5T
SW50UGl4ZWxzVG9Ud2lwcyh3aWR0aCwgcDJ0KTsKICBhU2l6ZS5oZWlnaHQgPSBOU0ludFBpeGVs
c1RvVHdpcHMoaGVpZ2h0LCBwMnQpOwogIGF2ZXJhZ2UgPSBOU0ludFBpeGVsc1RvVHdpcHMoYXZl
cmFnZSwgcDJ0KTsKCiAgcmV0dXJuIGF2ZXJhZ2U7Cgp9Cgpuc2Nvb3JkCm5zRm9ybUNvbnRyb2xI
ZWxwZXI6OkdldFRleHRTaXplKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIG5zSUZvcm1D
b250cm9sRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBuc1N0cmluZyYgYVN0cmluZywgbnNTaXplJiBhU2l6ZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0ICphUmVuZENvbnRleHQpCnsKICBuc0NPTVB0
cjxuc0lGb250TWV0cmljcz4gZm9udE1ldDsKICBuc3Jlc3VsdCByZXMgPSBHZXRGcmFtZUZvbnRG
TShhUHJlc0NvbnRleHQsIGFGcmFtZSwgZ2V0dGVyX0FkZFJlZnMoZm9udE1ldCkpOwogIGlmICgo
ISgocmVzKSAmIDB4ODAwMDAwMDApKSAmJiBmb250TWV0KSB7CiAgICBhUmVuZENvbnRleHQtPlNl
dEZvbnQoZm9udE1ldCk7CgoKICAgIGFSZW5kQ29udGV4dC0+R2V0V2lkdGgoYVN0cmluZywgYVNp
emUud2lkdGgpOwogICAgZm9udE1ldC0+R2V0SGVpZ2h0KGFTaXplLmhlaWdodCk7CiAgfSBlbHNl
IHsKICAgIHt9OwogICAgYVNpemUud2lkdGggPSAwOwogIH0KCiAgY2hhciBjaGFyMSwgY2hhcjI7
CiAgbnNDb21wYXRpYmlsaXR5IG1vZGUgPSBHZXRSZXBDaGFycyhhUHJlc0NvbnRleHQsIGNoYXIx
LCBjaGFyMik7CiAgbnNjb29yZCBjaGFyMVdpZHRoLCBjaGFyMldpZHRoOwogIGFSZW5kQ29udGV4
dC0+R2V0V2lkdGgoY2hhcjEsIGNoYXIxV2lkdGgpOwogIGFSZW5kQ29udGV4dC0+R2V0V2lkdGgo
Y2hhcjIsIGNoYXIyV2lkdGgpOwoKICBpZiAoZUNvbXBhdGliaWxpdHlfU3RhbmRhcmQgPT0gbW9k
ZSkgewogICAgcmV0dXJuICgoY2hhcjFXaWR0aCArIGNoYXIyV2lkdGgpIC8gMikgKyAxOwogIH0g
ZWxzZSB7CiAgICByZXR1cm4gKGNoYXIxV2lkdGggKyBjaGFyMldpZHRoKSAvIDI7CiAgfQp9Cgpu
c2Nvb3JkCm5zRm9ybUNvbnRyb2xIZWxwZXI6OkdldFRleHRTaXplKG5zSVByZXNDb250ZXh0KiBh
UHJlc0NvbnRleHQsIG5zSUZvcm1Db250cm9sRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUkludDMyIGFOdW1DaGFycywgbnNTaXplJiBhU2l6ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0ICphUmVuZENvbnRl
eHQpCnsKICBuc0F1dG9TdHJpbmcgdmFsOwogIGNoYXIgY2hhcjEsIGNoYXIyOwogIEdldFJlcENo
YXJzKGFQcmVzQ29udGV4dCwgY2hhcjEsIGNoYXIyKTsKICBpbnQgaTsKICBmb3IgKGkgPSAwOyBp
IDwgYU51bUNoYXJzOyBpKz0yKSB7CiAgICB2YWwuQXBwZW5kV2l0aENvbnZlcnNpb24oY2hhcjEp
OwogIH0KICBmb3IgKGkgPSAxOyBpIDwgYU51bUNoYXJzOyBpKz0yKSB7CiAgICB2YWwuQXBwZW5k
V2l0aENvbnZlcnNpb24oY2hhcjIpOwogIH0KICByZXR1cm4gR2V0VGV4dFNpemUoYVByZXNDb250
ZXh0LCBhRnJhbWUsIHZhbCwgYVNpemUsIGFSZW5kQ29udGV4dCk7Cn0KClBSSW50MzIKbnNGb3Jt
Q29udHJvbEhlbHBlcjo6Q2FsY3VsYXRlU2l6ZSAobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4
dCogYVJlbmRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lG
b3JtQ29udHJvbEZyYW1lKiBhRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG5zU2l6ZSYgYUNTU1NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSW5wdXREaW1lbnNpb25TcGVjJiBhU3BlYywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNTaXplJiBhRGVzaXJlZFNpemUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zU2l6ZSYgYU1pblNpemUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBSQm9vbCYgYVdpZHRoRXhwbGljaXQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBSQm9vbCYgYUhlaWdodEV4cGxpY2l0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkJiBhUm93SGVpZ2h0KQp7CiAgbnNjb29yZCBjaGFy
V2lkdGggPSAwOwogIFBSSW50MzIgbnVtUm93cyA9IC0xOwogIGFXaWR0aEV4cGxpY2l0ID0gMDsK
ICBhSGVpZ2h0RXhwbGljaXQgPSAwOwoKICBhRGVzaXJlZFNpemUud2lkdGggPSAtMTsKICBhRGVz
aXJlZFNpemUuaGVpZ2h0ID0gLTE7CgogIG5zSUNvbnRlbnQqIGlDb250ZW50ID0gMDsKICBhRnJh
bWUtPkdldEZvcm1Db250ZW50KChuc0lDb250ZW50KiYpIGlDb250ZW50KTsKICBpZiAoIWlDb250
ZW50KSB7CiAgICByZXR1cm4gMDsKICB9CiAgbnNJSFRNTENvbnRlbnQqIGhDb250ZW50ID0gMDsK
ICBuc3Jlc3VsdCByZXN1bHQgPSBpQ29udGVudC0+UXVlcnlJbnRlcmZhY2Uoa0lIVE1MQ29udGVu
dElJRCwgKHZvaWQqKikmaENvbnRlbnQpOwogIGlmICgoMCAhPSByZXN1bHQpIHx8ICFoQ29udGVu
dCkgewogICAgZG8geyAoaUNvbnRlbnQpLT5SZWxlYXNlKCk7IChpQ29udGVudCkgPSAwOyB9IHdo
aWxlICgwKTsKICAgIHJldHVybiAwOwogIH0KICBuc0F1dG9TdHJpbmcgdmFsQXR0cjsKICBuc3Jl
c3VsdCB2YWxTdGF0dXMgPSAoKG5zcmVzdWx0KSAoKChQUlVpbnQzMikoMCk8PDMxKSB8ICgoUFJV
aW50MzIpKDggKzB4NDUpPDwxNikgfCAoKFBSVWludDMyKSgxKSkpICk7CiAgaWYgKDAgIT0gYVNw
ZWMubUNvbFZhbHVlQXR0cikgewogICAgdmFsU3RhdHVzID0gaENvbnRlbnQtPkdldEF0dHJpYnV0
ZSgzLCBhU3BlYy5tQ29sVmFsdWVBdHRyLCB2YWxBdHRyKTsKICB9CiAgbnNIVE1MVmFsdWUgY29s
QXR0cjsKICBuc3Jlc3VsdCBjb2xTdGF0dXMgPSAoKG5zcmVzdWx0KSAoKChQUlVpbnQzMikoMCk8
PDMxKSB8ICgoUFJVaW50MzIpKDggKzB4NDUpPDwxNikgfCAoKFBSVWludDMyKSgxKSkpICk7CiAg
aWYgKDAgIT0gYVNwZWMubUNvbFNpemVBdHRyKSB7CiAgICBjb2xTdGF0dXMgPSBoQ29udGVudC0+
R2V0SFRNTEF0dHJpYnV0ZShhU3BlYy5tQ29sU2l6ZUF0dHIsIGNvbEF0dHIpOwogIH0KICBmbG9h
dCBwMnQ7CiAgYVByZXNDb250ZXh0LT5HZXRTY2FsZWRQaXhlbHNUb1R3aXBzKCZwMnQpOwojIDQ2
NiAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQvaHRtbC9mb3Jtcy9zcmMvbnNGb3JtQ29u
dHJvbEhlbHBlci5jcHAiCiAgbnNDb21wYXRpYmlsaXR5IHFNb2RlOwogIGFQcmVzQ29udGV4dC0+
R2V0Q29tcGF0aWJpbGl0eU1vZGUoJnFNb2RlKTsKCgogIGlmICgwID09IGNvbFN0YXR1cykgewog
ICAgUFJJbnQzMiBjb2wgPSAoKGNvbEF0dHIuR2V0VW5pdCgpID09IGVIVE1MVW5pdF9QaXhlbCkg
PyBjb2xBdHRyLkdldFBpeGVsVmFsdWUoKSA6IGNvbEF0dHIuR2V0SW50VmFsdWUoKSk7CiAgICBp
ZiAoYVNwZWMubUNvbFNpemVBdHRySW5QaXhlbHMpIHsKCiAgICAgIGNoYXJXaWR0aCA9IEdldFRl
eHRTaXplKGFQcmVzQ29udGV4dCwgYUZyYW1lLCAxLCBhRGVzaXJlZFNpemUsIGFSZW5kQ29udGV4
dCk7CiAgICAgIGNvbCA9IChjb2wgPD0gMCkgPyAxNSA6IGNvbDsKCiAgICAgIGFEZXNpcmVkU2l6
ZS53aWR0aCA9IE5TSW50UGl4ZWxzVG9Ud2lwcyhjb2wsIHAydCk7CiAgICB9IGVsc2UgewogICAg
ICBjb2wgPSAoY29sIDw9IDApID8gMSA6IGNvbDsKICAgICAgaWYgKGVDb21wYXRpYmlsaXR5X05h
dlF1aXJrcyA9PSBxTW9kZSkgewogICAgICAgIG5zQ09NUHRyPG5zSUZvbnRNZXRyaWNzPiBmb250
TWV0OwogICAgICAgIG5zcmVzdWx0IHJlcyA9IEdldEZyYW1lRm9udEZNKGFQcmVzQ29udGV4dCwg
YUZyYW1lLCBnZXR0ZXJfQWRkUmVmcyhmb250TWV0KSk7CiAgICAgICAgaWYgKCghKChyZXMpICYg
MHg4MDAwMDAwMCkpICYmIGZvbnRNZXQpIHsKICAgICAgICAgIGFSZW5kQ29udGV4dC0+U2V0Rm9u
dChmb250TWV0KTsKICAgICAgICAgIGFTcGVjLm1Db2xEZWZhdWx0U2l6ZSA9IGNvbDsKICAgICAg
ICAgIGNoYXJXaWR0aCA9IENhbGNOYXZRdWlya1NpemluZyhhUHJlc0NvbnRleHQsIGFSZW5kQ29u
dGV4dCwgZm9udE1ldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
RnJhbWUsIGFTcGVjLCBhRGVzaXJlZFNpemUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBj
aGFyV2lkdGggPSBHZXRUZXh0U2l6ZShhUHJlc0NvbnRleHQsIGFGcmFtZSwgY29sLCBhRGVzaXJl
ZFNpemUsIGFSZW5kQ29udGV4dCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoZUNv
bXBhdGliaWxpdHlfU3RhbmRhcmQgPT0gcU1vZGUpIHsKICAgICAgaWYgKGFTcGVjLm1Db2xTaXpl
QXR0ckluUGl4ZWxzKSB7CiAgICAgICAgYVdpZHRoRXhwbGljaXQgPSAxOwogICAgICB9CiAgICB9
CiAgICBhTWluU2l6ZS53aWR0aCA9IGFEZXNpcmVkU2l6ZS53aWR0aDsKICB9IGVsc2UgewoKICAg
IGlmICgwID09IHZhbFN0YXR1cykgewogICAgICBjaGFyV2lkdGggPSBHZXRUZXh0U2l6ZShhUHJl
c0NvbnRleHQsIGFGcmFtZSwgdmFsQXR0ciwgYURlc2lyZWRTaXplLCBhUmVuZENvbnRleHQpOwog
ICAgfSBlbHNlIGlmIChhU3BlYy5tQ29sRGVmYXVsdFZhbHVlKSB7CiAgICAgIGNoYXJXaWR0aCA9
IEdldFRleHRTaXplKGFQcmVzQ29udGV4dCwgYUZyYW1lLCAqYVNwZWMubUNvbERlZmF1bHRWYWx1
ZSwgYURlc2lyZWRTaXplLCBhUmVuZENvbnRleHQpOwogICAgfSBlbHNlIGlmIChhU3BlYy5tQ29s
RGVmYXVsdFNpemVJblBpeGVscykgewogICAgICBjaGFyV2lkdGggPSBHZXRUZXh0U2l6ZShhUHJl
c0NvbnRleHQsIGFGcmFtZSwgMSwgYURlc2lyZWRTaXplLCBhUmVuZENvbnRleHQpOwogICAgICBh
RGVzaXJlZFNpemUud2lkdGggPSBhU3BlYy5tQ29sRGVmYXVsdFNpemU7CiAgICB9IGVsc2Ugewog
ICAgICBpZiAoZUNvbXBhdGliaWxpdHlfTmF2UXVpcmtzID09IHFNb2RlKSB7CiAgICAgICAgbnND
T01QdHI8bnNJRm9udE1ldHJpY3M+IGZvbnRNZXQ7CiAgICAgICAgbnNyZXN1bHQgcmVzID0gR2V0
RnJhbWVGb250Rk0oYVByZXNDb250ZXh0LCBhRnJhbWUsIGdldHRlcl9BZGRSZWZzKGZvbnRNZXQp
KTsKICAgICAgICBpZiAoKCEoKHJlcykgJiAweDgwMDAwMDAwKSkgJiYgZm9udE1ldCkgewogICAg
ICAgICAgYVJlbmRDb250ZXh0LT5TZXRGb250KGZvbnRNZXQpOwoKICAgICAgICAgIGNoYXJXaWR0
aCA9IENhbGNOYXZRdWlya1NpemluZyhhUHJlc0NvbnRleHQsIGFSZW5kQ29udGV4dCwgZm9udE1l
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhRnJhbWUsIGFTcGVj
LCBhRGVzaXJlZFNpemUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB7fTsKICAgICAgICAg
IGFEZXNpcmVkU2l6ZS53aWR0aCA9IDMwMDsKICAgICAgICAgIGFEZXNpcmVkU2l6ZS53aWR0aCA9
IDE1MDA7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGNoYXJXaWR0aCA9IEdldFRl
eHRTaXplKGFQcmVzQ29udGV4dCwgYUZyYW1lLCBhU3BlYy5tQ29sRGVmYXVsdFNpemUsIGFEZXNp
cmVkU2l6ZSwgYVJlbmRDb250ZXh0KTsKICAgICAgfQogICAgfQogICAgYU1pblNpemUud2lkdGgg
PSBhRGVzaXJlZFNpemUud2lkdGg7CiAgICBpZiAoLTEgIT0gYUNTU1NpemUud2lkdGgpIHsKICAg
ICAge307CiAgICAgIGlmIChuc2Nvb3JkKDEgPDwgMzApICE9IGFDU1NTaXplLndpZHRoKSB7CiAg
ICAgICAgYURlc2lyZWRTaXplLndpZHRoID0gKChhRGVzaXJlZFNpemUud2lkdGgpPihhQ1NTU2l6
ZS53aWR0aCk/KGFEZXNpcmVkU2l6ZS53aWR0aCk6KGFDU1NTaXplLndpZHRoKSk7CiAgICAgICAg
YVdpZHRoRXhwbGljaXQgPSAxOwogICAgICB9CiAgICB9CiAgfQogIGFSb3dIZWlnaHQgPSBhRGVz
aXJlZFNpemUuaGVpZ2h0OwogIGFNaW5TaXplLmhlaWdodCA9IGFEZXNpcmVkU2l6ZS5oZWlnaHQ7
CgoKICBpZiAoZUNvbXBhdGliaWxpdHlfU3RhbmRhcmQgPT0gcU1vZGUpIHsKICAgIG5zSFRNTFZh
bHVlIHJvd0F0dHI7CiAgICBuc3Jlc3VsdCByb3dTdGF0dXMgPSAoKG5zcmVzdWx0KSAoKChQUlVp
bnQzMikoMCk8PDMxKSB8ICgoUFJVaW50MzIpKDggKzB4NDUpPDwxNikgfCAoKFBSVWludDMyKSgx
KSkpICk7CiAgICBpZiAoMCAhPSBhU3BlYy5tUm93U2l6ZUF0dHIpIHsKICAgICAgcm93U3RhdHVz
ID0gaENvbnRlbnQtPkdldEhUTUxBdHRyaWJ1dGUoYVNwZWMubVJvd1NpemVBdHRyLCByb3dBdHRy
KTsKICAgIH0KICAgIGlmICgwID09IHJvd1N0YXR1cykgewogICAgICBQUkludDMyIHJvd0F0dHJJ
bnQgPSAoKHJvd0F0dHIuR2V0VW5pdCgpID09IGVIVE1MVW5pdF9QaXhlbCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPyByb3dBdHRyLkdldFBpeGVsVmFsdWUoKSA6IHJvd0F0dHIuR2V0
SW50VmFsdWUoKSk7CiAgICAgIG51bVJvd3MgPSAocm93QXR0ckludCA+IDApID8gcm93QXR0cklu
dCA6IDE7CiAgICAgIGFEZXNpcmVkU2l6ZS5oZWlnaHQgPSBhRGVzaXJlZFNpemUuaGVpZ2h0ICog
bnVtUm93czsKICAgIH0gZWxzZSB7CiAgICAgIGFEZXNpcmVkU2l6ZS5oZWlnaHQgPSBhRGVzaXJl
ZFNpemUuaGVpZ2h0ICogYVNwZWMubVJvd0RlZmF1bHRTaXplOwogICAgICBpZiAoLTEgIT0gYUNT
U1NpemUuaGVpZ2h0KSB7CiAgICAgICAge307CiAgICAgICAgaWYgKG5zY29vcmQoMSA8PCAzMCkg
IT0gYUNTU1NpemUuaGVpZ2h0KSB7CiAgICAgICAgICBhRGVzaXJlZFNpemUuaGVpZ2h0ID0gKChh
RGVzaXJlZFNpemUuaGVpZ2h0KT4oYUNTU1NpemUuaGVpZ2h0KT8oYURlc2lyZWRTaXplLmhlaWdo
dCk6KGFDU1NTaXplLmhlaWdodCkpOwogICAgICAgICAgYUhlaWdodEV4cGxpY2l0ID0gMTsKICAg
ICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIGRvIHsgKGhDb250ZW50KS0+UmVsZWFzZSgpOyAo
aENvbnRlbnQpID0gMDsgfSB3aGlsZSAoMCk7CiAgaWYgKC0xID09IG51bVJvd3MpIHsKICAgIG51
bVJvd3MgPSAoYVJvd0hlaWdodCA+IDApID8gKGFEZXNpcmVkU2l6ZS5oZWlnaHQgLyBhUm93SGVp
Z2h0KSA6IDA7CiAgfQoKICBkbyB7IChpQ29udGVudCktPlJlbGVhc2UoKTsgKGlDb250ZW50KSA9
IDA7IH0gd2hpbGUgKDApOwoKICByZXR1cm4gbnVtUm93czsKfQoKCgpuc3Jlc3VsdApuc0Zvcm1D
b250cm9sSGVscGVyOjpHZXRGb250KG5zSUZvcm1Db250cm9sRnJhbWUgKiBhRm9ybUZyYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0ICogYVN0eWxlQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0ZvbnQqJiBhRm9udCkK
ewogIGNvbnN0IG5zU3R5bGVGb250KiBzdHlsZUZvbnQgPSAoY29uc3QgbnNTdHlsZUZvbnQqKWFT
dHlsZUNvbnRleHQtPkdldFN0eWxlRGF0YShlU3R5bGVTdHJ1Y3RfRm9udCk7CgogIG5zV2lkZ2V0
UmVuZGVyaW5nIG07CiAgYVByZXNDb250ZXh0LT5HZXRXaWRnZXRSZW5kZXJpbmdNb2RlKCZtKTsK
CgogIFBSQm9vbCByZXF1aXJlc1dpZGdldCA9IDA7CiAgYUZvcm1GcmFtZS0+UmVxdWlyZXNXaWRn
ZXQocmVxdWlyZXNXaWRnZXQpOwoKICBQUkludDMyIHR5cGU7CiAgYUZvcm1GcmFtZS0+R2V0VHlw
ZSgmdHlwZSk7CgogIGlmICh0eXBlIT0xNCAmJgogICAgICB0eXBlIT0yMCAmJgogICAgICB0eXBl
IT0xMSkgewogICAgaWYgKDEgIT0gcmVxdWlyZXNXaWRnZXQgJiYgZVdpZGdldFJlbmRlcmluZ19H
ZnggPT0gbSkgewogICAgICBhRm9udCA9ICZzdHlsZUZvbnQtPm1Gb250OwogICAgICByZXR1cm4g
MDsKICAgIH0KICB9CgogIG5zQ29tcGF0aWJpbGl0eSBtb2RlOwogIGFQcmVzQ29udGV4dC0+R2V0
Q29tcGF0aWJpbGl0eU1vZGUoJm1vZGUpOwoKICBpZiAoZUNvbXBhdGliaWxpdHlfU3RhbmRhcmQg
PT0gbW9kZSkgewogICAgYUZvbnQgPSAmc3R5bGVGb250LT5tRm9udDsKICAgIHJldHVybiAwOwog
IH0KCiAgc3dpdGNoICh0eXBlKSB7CiAgICBjYXNlIDE0OgogICAgY2FzZSAyMDoKICAgIGNhc2Ug
MTE6CiAgICAgIGFGb250ID0gJnN0eWxlRm9udC0+bUZvbnQ7CiAgICAgIGJyZWFrOwogICAgY2Fz
ZSA1OgogICAgY2FzZSAxMzoKICAgIGNhc2UgOToKICAgIGNhc2UgMTk6CiAgICAgIHt9OwojIDY0
MyAiLi4vLi4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQvaHRtbC9mb3Jtcy9zcmMvbnNGb3JtQ29u
dHJvbEhlbHBlci5jcHAiCiAgICAgIGJyZWFrOwogIH0KICByZXR1cm4gMDsKfQojIDY1NSAiLi4v
Li4vLi4vLi4vLi4vbW96aWxsYS9sYXlvdXQvaHRtbC9mb3Jtcy9zcmMvbnNGb3JtQ29udHJvbEhl
bHBlci5jcHAiCnZvaWQKbnNGb3JtQ29udHJvbEhlbHBlcjo6UGFpbnRMaW5lKG5zSVJlbmRlcmlu
Z0NvbnRleHQmIGFSZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc2Nvb3JkIGFTWCwgbnNjb29yZCBhU1ksIG5zY29vcmQgYUVYLCBuc2Nvb3JkIGFFWSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFIb3J6LCBuc2Nvb3JkIGFXaWR0aCwg
bnNjb29yZCBhT25lUGl4ZWwpCnsKCiAgbnNQb2ludCBwWzVdOwogIGlmIChhSG9yeikgewogICAg
YUVYKys7CiAgICBwWzBdLnggPSBuc2Nvb3JkKGZsb2F0KGFTWCkqYU9uZVBpeGVsKTsKICAgIHBb
MF0ueSA9IG5zY29vcmQoZmxvYXQoYVNZKSphT25lUGl4ZWwpOwogICAgcFsxXS54ID0gbnNjb29y
ZChmbG9hdChhRVgpKmFPbmVQaXhlbCk7CiAgICBwWzFdLnkgPSBuc2Nvb3JkKGZsb2F0KGFFWSkq
YU9uZVBpeGVsKTsKICAgIHBbMl0ueCA9IG5zY29vcmQoZmxvYXQoYUVYKSphT25lUGl4ZWwpOwog
ICAgcFsyXS55ID0gbnNjb29yZChmbG9hdChhRVkrMSkqYU9uZVBpeGVsKTsKICAgIHBbM10ueCA9
IG5zY29vcmQoZmxvYXQoYVNYKSphT25lUGl4ZWwpOwogICAgcFszXS55ID0gbnNjb29yZChmbG9h
dChhU1krMSkqYU9uZVBpeGVsKTsKICAgIHBbNF0ueCA9IG5zY29vcmQoZmxvYXQoYVNYKSphT25l
UGl4ZWwpOwogICAgcFs0XS55ID0gbnNjb29yZChmbG9hdChhU1kpKmFPbmVQaXhlbCk7CiAgfSBl
bHNlIHsKICAgIGFFWSsrOwogICAgcFswXS54ID0gbnNjb29yZChmbG9hdChhU1gpKmFPbmVQaXhl
bCk7CiAgICBwWzBdLnkgPSBuc2Nvb3JkKGZsb2F0KGFTWSkqYU9uZVBpeGVsKTsKICAgIHBbMV0u
eCA9IG5zY29vcmQoZmxvYXQoYUVYKSphT25lUGl4ZWwpOwogICAgcFsxXS55ID0gbnNjb29yZChm
bG9hdChhRVkpKmFPbmVQaXhlbCk7CiAgICBwWzJdLnggPSBuc2Nvb3JkKGZsb2F0KGFFWCsxKSph
T25lUGl4ZWwpOwogICAgcFsyXS55ID0gbnNjb29yZChmbG9hdChhRVkpKmFPbmVQaXhlbCk7CiAg
ICBwWzNdLnggPSBuc2Nvb3JkKGZsb2F0KGFTWCsxKSphT25lUGl4ZWwpOwogICAgcFszXS55ID0g
bnNjb29yZChmbG9hdChhU1kpKmFPbmVQaXhlbCk7CiAgICBwWzRdLnggPSBuc2Nvb3JkKGZsb2F0
KGFTWCkqYU9uZVBpeGVsKTsKICAgIHBbNF0ueSA9IG5zY29vcmQoZmxvYXQoYVNZKSphT25lUGl4
ZWwpOwogIH0KICBhUmVuZGVyaW5nQ29udGV4dC5GaWxsUG9seWdvbihwLCA1KTsKCn0KCgp2b2lk
Cm5zRm9ybUNvbnRyb2xIZWxwZXI6OlNldHVwUG9pbnRzKFBSVWludDMyIGFOdW1iZXJPZlBvaW50
cywgbnNjb29yZCogYVBvaW50cywgbnNQb2ludCogYVBvbHlnb24sIG5zY29vcmQgYVNjYWxlRmFj
dG9yLCBuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zY29vcmQgYUNlbnRlclgsIG5zY29vcmQgYUNlbnRlclkpCnsKICBjb25zdCBuc2Nvb3Jk
IG9mZnNldFggPSBhQ2VudGVyWCAqIGFTY2FsZUZhY3RvcjsKICBjb25zdCBuc2Nvb3JkIG9mZnNl
dFkgPSBhQ2VudGVyWSAqIGFTY2FsZUZhY3RvcjsKCiAgUFJVaW50MzIgaSA9IDA7CiAgUFJVaW50
MzIgY291bnQgPSAwOwogIGZvciAoaSA9IDA7IGkgPCBhTnVtYmVyT2ZQb2ludHM7IGkrKykgewog
ICAgYVBvbHlnb25baV0ueCA9IChhUG9pbnRzW2NvdW50XSAqIGFTY2FsZUZhY3RvcikgKyBhWCAt
IG9mZnNldFg7CiAgICBjb3VudCsrOwogICAgYVBvbHlnb25baV0ueSA9IChhUG9pbnRzW2NvdW50
XSAqIGFTY2FsZUZhY3RvcikgKyBhWSAtIG9mZnNldFk7CiAgICBjb3VudCsrOwogIH0KfQoKCnZv
aWQKbnNGb3JtQ29udHJvbEhlbHBlcjo6UGFpbnRGaXhlZFNpemVDaGVja01hcmsobnNJUmVuZGVy
aW5nQ29udGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBm
bG9hdCBhUGl4ZWxzVG9Ud2lwcykKewoKCgogIGNvbnN0IFBSVWludDMyIG94ID0gMzsKICBjb25z
dCBQUlVpbnQzMiBveSA9IDM7CgogIG5zY29vcmQgb25lUGl4ZWwgPSBOU0ludFBpeGVsc1RvVHdp
cHMoMSwgYVBpeGVsc1RvVHdpcHMpOwoKCgoKCiAgUGFpbnRMaW5lKGFSZW5kZXJpbmdDb250ZXh0
LCAwICsgb3gsIDIgKyBveSwgMCArIG94LCA0ICsgb3ksIDAsIDEsIG9uZVBpeGVsKTsKICBQYWlu
dExpbmUoYVJlbmRlcmluZ0NvbnRleHQsIDEgKyBveCwgMyArIG95LCAxICsgb3gsIDUgKyBveSwg
MCwgMSwgb25lUGl4ZWwpOwogIFBhaW50TGluZShhUmVuZGVyaW5nQ29udGV4dCwgMiArIG94LCA0
ICsgb3ksIDIgKyBveCwgNiArIG95LCAwLCAxLCBvbmVQaXhlbCk7CiAgUGFpbnRMaW5lKGFSZW5k
ZXJpbmdDb250ZXh0LCAzICsgb3gsIDMgKyBveSwgMyArIG94LCA1ICsgb3ksIDAsIDEsIG9uZVBp
eGVsKTsKICBQYWludExpbmUoYVJlbmRlcmluZ0NvbnRleHQsIDQgKyBveCwgMiArIG95LCA0ICsg
b3gsIDQgKyBveSwgMCwgMSwgb25lUGl4ZWwpOwogIFBhaW50TGluZShhUmVuZGVyaW5nQ29udGV4
dCwgNSArIG94LCAxICsgb3ksIDUgKyBveCwgMyArIG95LCAwLCAxLCBvbmVQaXhlbCk7CiAgUGFp
bnRMaW5lKGFSZW5kZXJpbmdDb250ZXh0LCA2ICsgb3gsIDAgKyBveSwgNiArIG94LCAyICsgb3ks
IDAsIDEsIG9uZVBpeGVsKTsKfQoKdm9pZApuc0Zvcm1Db250cm9sSGVscGVyOjpQYWludEZpeGVk
U2l6ZUNoZWNrTWFya0JvcmRlcihuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFQaXhlbHNUb1R3aXBzLCBjb25zdCBu
c1N0eWxlQ29sb3ImIGFCYWNrZ3JvdW5kQ29sb3IpCnsKCiAgUFJVaW50MzIgb3ggPSAwOwogIFBS
VWludDMyIG95ID0gMDsKCiAgbnNjb29yZCBvbmVQaXhlbCA9IE5TSW50UGl4ZWxzVG9Ud2lwcygx
LCBhUGl4ZWxzVG9Ud2lwcyk7CiAgbnNjb29yZCB0d2VsdmVQaXhlbHMgPSBOU0ludFBpeGVsc1Rv
VHdpcHMoMTIsIGFQaXhlbHNUb1R3aXBzKTsKCgogIGFSZW5kZXJpbmdDb250ZXh0LlNldENvbG9y
KGFCYWNrZ3JvdW5kQ29sb3IubUNvbG9yKTsKICBuc1JlY3QgcmVjdCgwLCAwLCB0d2VsdmVQaXhl
bHMsIHR3ZWx2ZVBpeGVscyk7CiAgYVJlbmRlcmluZ0NvbnRleHQuRmlsbFJlY3QocmVjdCk7CgoK
ICBhUmVuZGVyaW5nQ29udGV4dC5TZXRDb2xvcigoKG5zY29sb3IpICgoMjU1IDw8IDI0KSB8ICgo
MTI4KTw8MTYpIHwgKCgxMjgpPDw4KSB8ICgxMjgpKSkpOwogIFBhaW50TGluZShhUmVuZGVyaW5n
Q29udGV4dCwgMCArIG94LCAwICsgb3ksIDExICsgb3gsIDAgKyBveSwgMSwgMSwgb25lUGl4ZWwp
OwogIFBhaW50TGluZShhUmVuZGVyaW5nQ29udGV4dCwgMCArIG94LCAwICsgb3ksIDAgKyBveCwg
MTEgKyBveSwgMCwgMSwgb25lUGl4ZWwpOwoKICBhUmVuZGVyaW5nQ29udGV4dC5TZXRDb2xvcigo
KG5zY29sb3IpICgoMjU1IDw8IDI0KSB8ICgoMTkyKTw8MTYpIHwgKCgxOTIpPDw4KSB8ICgxOTIp
KSkpOwogIFBhaW50TGluZShhUmVuZGVyaW5nQ29udGV4dCwgMSArIG94LCAxMSArIG95LCAxMSAr
IG94LCAxMSArIG95LCAxLCAxLCBvbmVQaXhlbCk7CiAgUGFpbnRMaW5lKGFSZW5kZXJpbmdDb250
ZXh0LCAxMSArIG94LCAxICsgb3ksIDExICsgb3gsIDExICsgb3ksIDAsIDEsIG9uZVBpeGVsKTsK
CiAgYVJlbmRlcmluZ0NvbnRleHQuU2V0Q29sb3IoKChuc2NvbG9yKSAoKDI1NSA8PCAyNCkgfCAo
KDApPDwxNikgfCAoKDApPDw4KSB8ICgwKSkpKTsKICBQYWludExpbmUoYVJlbmRlcmluZ0NvbnRl
eHQsIDEgKyBveCwgMSArIG95LCAxMCArIG94LCAxICsgb3ksIDEsIDEsIG9uZVBpeGVsKTsKICBQ
YWludExpbmUoYVJlbmRlcmluZ0NvbnRleHQsIDEgKyBveCwgMSArIG95LCAxICsgb3gsIDEwICsg
b3ksIDAsIDEsIG9uZVBpeGVsKTsKCn0KCgp2b2lkCm5zRm9ybUNvbnRyb2xIZWxwZXI6OlBhaW50
Q2hlY2tNYXJrKG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhUGl4ZWxzVG9Ud2lwcywgY29uc3Qg
bnNSZWN0ICYgYVJlY3QpCnsKCiAgY29uc3QgUFJJbnQzMiBmaXhlZFNpemVDaGVja21hcmtXaWR0
aCA9IDE2NTsKICBjb25zdCBQUkludDMyIGZpeGVkU2l6ZUNoZWNrbWFya0hlaWdodCA9IDE2NTsK
CiAgaWYgKChmaXhlZFNpemVDaGVja21hcmtXaWR0aCA9PSBhUmVjdC53aWR0aCkgJiYKICAgICAg
KGZpeGVkU2l6ZUNoZWNrbWFya0hlaWdodCA9PSBhUmVjdC5oZWlnaHQpKSB7CgogICAgICBQYWlu
dEZpeGVkU2l6ZUNoZWNrTWFyayhhUmVuZGVyaW5nQ29udGV4dCwgYVBpeGVsc1RvVHdpcHMpOwog
ICAgcmV0dXJuOwogIH0KCiAgY29uc3QgUFJVaW50MzIgY2hlY2twb2ludHMgPSA3OwogIGNvbnN0
IFBSVWludDMyIGNoZWNrc2l6ZSA9IDk7CgoKCgoKICBuc2Nvb3JkIGNoZWNrZWRQb2x5Z29uRGVm
W10gPSB7MCwyLCAyLDQsIDYsMCAsIDYsMiwgMiw2LCAwLDQsIDAsMiB9OwoKICBjb25zdCBQUlVp
bnQzMiBjZW50ZXJ4ID0gMzsKICBjb25zdCBQUlVpbnQzMiBjZW50ZXJ5ID0gMzsKCiAgbnNQb2lu
dCBjaGVja2VkUG9seWdvbltjaGVja3BvaW50c107CiAgUFJVaW50MzIgZGVmSW5kZXggPSAwOwog
IFBSVWludDMyIHBvbHlJbmRleCA9IDA7CgoKICBQUlVpbnQzMiBzaXplID0gYVJlY3Qud2lkdGgg
LyBjaGVja3NpemU7CiAgaWYgKGFSZWN0LmhlaWdodCA8IGFSZWN0LndpZHRoKSB7CiAgIHNpemUg
PSBhUmVjdC5oZWlnaHQgLyBjaGVja3NpemU7CiAgfQoKCiAgZm9yIChkZWZJbmRleCA9IDA7IGRl
ZkluZGV4IDwgKGNoZWNrcG9pbnRzICogMik7IGRlZkluZGV4KyspIHsKICAgIGNoZWNrZWRQb2x5
Z29uW3BvbHlJbmRleF0ueCA9IG5zY29vcmQoKCgoY2hlY2tlZFBvbHlnb25EZWZbZGVmSW5kZXhd
KSAtIGNlbnRlcngpICogKHNpemUpKSArIChhUmVjdC53aWR0aCAvIDIpICsgYVJlY3QueCk7CiAg
ICBkZWZJbmRleCsrOwogICAgY2hlY2tlZFBvbHlnb25bcG9seUluZGV4XS55ID0gbnNjb29yZCgo
KChjaGVja2VkUG9seWdvbkRlZltkZWZJbmRleF0pIC0gY2VudGVyeSkgKiAoc2l6ZSkpICsgKGFS
ZWN0LmhlaWdodCAvIDIpICsgYVJlY3QueSk7CiAgICBwb2x5SW5kZXgrKzsKICB9CgogIGFSZW5k
ZXJpbmdDb250ZXh0LkZpbGxQb2x5Z29uKGNoZWNrZWRQb2x5Z29uLCBjaGVja3BvaW50cyk7Cn0K
Cm5zcmVzdWx0Cm5zRm9ybUNvbnRyb2xIZWxwZXI6OkdldE5hbWUobnNJQ29udGVudCogYUNvbnRl
bnQsbnNTdHJpbmcqIGFSZXN1bHQpCnsKICBuc3Jlc3VsdCByZXN1bHQgPSAweEZGRkZGRkY3Owog
IGlmICgwICE9IGFDb250ZW50KSB7CiAgICBuc0lIVE1MQ29udGVudCogZm9ybUNvbnRyb2wgPSAw
OwogICAgcmVzdWx0ID0gYUNvbnRlbnQtPlF1ZXJ5SW50ZXJmYWNlKGtJSFRNTENvbnRlbnRJSUQs
ICh2b2lkKiopJmZvcm1Db250cm9sKTsKICAgIGlmICgoMCA9PSByZXN1bHQpICYmIGZvcm1Db250
cm9sKSB7CiAgICAgIG5zSFRNTFZhbHVlIHZhbHVlOwogICAgICByZXN1bHQgPSBmb3JtQ29udHJv
bC0+R2V0SFRNTEF0dHJpYnV0ZShuc0hUTUxBdG9tczo6bmFtZSwgdmFsdWUpOwogICAgICBpZiAo
MCA9PSByZXN1bHQpIHsKICAgICAgICBpZiAoZUhUTUxVbml0X1N0cmluZyA9PSB2YWx1ZS5HZXRV
bml0KCkpIHsKICAgICAgICAgIHZhbHVlLkdldFN0cmluZ1ZhbHVlKCphUmVzdWx0KTsKICAgICAg
ICB9CiAgICAgIH0KICAgICAgZG8geyAoZm9ybUNvbnRyb2wpLT5SZWxlYXNlKCk7IChmb3JtQ29u
dHJvbCkgPSAwOyB9IHdoaWxlICgwKTsKICAgIH0KICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKCm5z
cmVzdWx0Cm5zRm9ybUNvbnRyb2xIZWxwZXI6OkdldFZhbHVlKG5zSUNvbnRlbnQqIGFDb250ZW50
LCBuc1N0cmluZyogYVJlc3VsdCkKewogIG5zcmVzdWx0IHJlc3VsdCA9IDB4RkZGRkZGRjc7CiAg
aWYgKDAgIT0gYUNvbnRlbnQpIHsKICAgIG5zSUhUTUxDb250ZW50KiBmb3JtQ29udHJvbCA9IDA7
CiAgICByZXN1bHQgPSBhQ29udGVudC0+UXVlcnlJbnRlcmZhY2Uoa0lIVE1MQ29udGVudElJRCwg
KHZvaWQqKikmZm9ybUNvbnRyb2wpOwogICAgaWYgKCgwID09IHJlc3VsdCkgJiYgZm9ybUNvbnRy
b2wpIHsKICAgICAgbnNIVE1MVmFsdWUgdmFsdWU7CiAgICAgIHJlc3VsdCA9IGZvcm1Db250cm9s
LT5HZXRIVE1MQXR0cmlidXRlKG5zSFRNTEF0b21zOjp2YWx1ZSwgdmFsdWUpOwogICAgICBpZiAo
MCA9PSByZXN1bHQpIHsKICAgICAgICBpZiAoZUhUTUxVbml0X1N0cmluZyA9PSB2YWx1ZS5HZXRV
bml0KCkpIHsKICAgICAgICAgIHZhbHVlLkdldFN0cmluZ1ZhbHVlKCphUmVzdWx0KTsKICAgICAg
ICB9CiAgICAgIH0KICAgICAgZG8geyAoZm9ybUNvbnRyb2wpLT5SZWxlYXNlKCk7IChmb3JtQ29u
dHJvbCkgPSAwOyB9IHdoaWxlICgwKTsKICAgIH0KICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKbnNy
ZXN1bHQKbnNGb3JtQ29udHJvbEhlbHBlcjo6R2V0SW5wdXRFbGVtZW50VmFsdWUobnNJQ29udGVu
dCogYUNvbnRlbnQsIG5zU3RyaW5nKiBhVGV4dCwgUFJCb29sIGFJbml0aWFsVmFsdWUpCnsKICBu
c3Jlc3VsdCByZXN1bHQgPSAwOwogIG5zSURPTUhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbSA9
IDA7CiAgcmVzdWx0ID0gYUNvbnRlbnQtPlF1ZXJ5SW50ZXJmYWNlKG5zQ09NVHlwZUluZm88bnNJ
RE9NSFRNTElucHV0RWxlbWVudD46OkdldElJRCgpLCAodm9pZCoqKSZpbnB1dEVsZW0pOwogIGlm
ICgoMCA9PSByZXN1bHQpICYmIGlucHV0RWxlbSkgewogICAgaWYgKDEgPT0gYUluaXRpYWxWYWx1
ZSkgewogICAgICByZXN1bHQgPSBpbnB1dEVsZW0tPkdldERlZmF1bHRWYWx1ZSgqYVRleHQpOwog
ICAgfQogICAgZWxzZSB7CiAgICAgIHJlc3VsdCA9IGlucHV0RWxlbS0+R2V0VmFsdWUoKmFUZXh0
KTsKICAgIH0KCiAgICBkbyB7IChpbnB1dEVsZW0pLT5SZWxlYXNlKCk7IChpbnB1dEVsZW0pID0g
MDsgfSB3aGlsZSAoMCk7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KCgoKCm5zcmVzdWx0Cm5zRm9y
bUNvbnRyb2xIZWxwZXI6OkdldExvY2FsaXplZFN0cmluZyhjb25zdCBjaGFyICogYVByb3BGaWxl
TmFtZSwgY29uc3QgY2hhciogYUtleSwgbnNTdHJpbmcmIG9WYWwpCnsKICBuc3Jlc3VsdCBydjsK
ICBuc0NPTVB0cjxuc0lTdHJpbmdCdW5kbGU+IGJ1bmRsZTsKCgoKICBuc0NPTVB0cjxuc0lJT1Nl
cnZpY2U+IHBOZXRTZXJ2aWNlID0gZG9fR2V0U2VydmljZShrSU9TZXJ2aWNlQ0lELCAmcnYpOzsK
ICBpZiAoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSAmJiBwTmV0U2VydmljZSkgewogICAgbnNDT01Q
dHI8bnNJVVJJPiB1cmk7CiAgICBydiA9IHBOZXRTZXJ2aWNlLT5OZXdVUkkoYVByb3BGaWxlTmFt
ZSwgMCwgZ2V0dGVyX0FkZFJlZnModXJpKSk7CiAgICBpZiAoKCEoKHJ2KSAmIDB4ODAwMDAwMDAp
KSAmJiB1cmkpIHsKCgogICAgICBuc0NPTVB0cjxuc0lTdHJpbmdCdW5kbGVTZXJ2aWNlPiBzdHJp
bmdTZXJ2aWNlID0gZG9fR2V0U2VydmljZShrU3RyaW5nQnVuZGxlU2VydmljZUNJRCwgJnJ2KTs7
CiAgICAgIGlmICgoISgocnYpICYgMHg4MDAwMDAwMCkpICYmIHN0cmluZ1NlcnZpY2UpIHsKICAg
ICAgICBuc1hQSURMQ1N0cmluZyBzcGVjOwogICAgICAgIHJ2ID0gdXJpLT5HZXRTcGVjKGdldHRl
cl9Db3BpZXMoc3BlYykpOwogICAgICAgIGlmICgoISgocnYpICYgMHg4MDAwMDAwMCkpICYmIHNw
ZWMpIHsKICAgICAgICAgIHJ2ID0gc3RyaW5nU2VydmljZS0+Q3JlYXRlQnVuZGxlKHNwZWMsIGdl
dHRlcl9BZGRSZWZzKGJ1bmRsZSkpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCgogIGlm
ICgoISgocnYpICYgMHg4MDAwMDAwMCkpICYmIGJ1bmRsZSAmJiBhS2V5KSB7CiAgICBuc1hQSURM
U3RyaW5nIHZhbFVuaTsKICAgIG5zQXV0b1N0cmluZyBrZXk7IGtleS5Bc3NpZ25XaXRoQ29udmVy
c2lvbihhS2V5KTsKICAgIHJ2ID0gYnVuZGxlLT5HZXRTdHJpbmdGcm9tTmFtZShrZXkuR2V0VW5p
Y29kZSgpLCBnZXR0ZXJfQ29waWVzKHZhbFVuaSkpOwogICAgaWYgKCghKChydikgJiAweDgwMDAw
MDAwKSkgJiYgdmFsVW5pKSB7CiAgICAgIG9WYWwuQXNzaWduKHZhbFVuaSk7CiAgICB9IGVsc2Ug
ewogICAgICBvVmFsLlRydW5jYXRlKCk7CiAgICB9CiAgfQogIHJldHVybiBydjsKfQoKCm5zcmVz
dWx0Cm5zRm9ybUNvbnRyb2xIZWxwZXI6OkdldERpc2FibGVkKG5zSUNvbnRlbnQqIGFDb250ZW50
LCBQUkJvb2wqIG9Jc0Rpc2FibGVkKQp7CiAgbnNDT01QdHI8bnNJSFRNTENvbnRlbnQ+IGZvcm1D
b250cm9sID0gZG9fUXVlcnlJbnRlcmZhY2UoYUNvbnRlbnQpOwogIG5zSFRNTFZhbHVlIHZhbHVl
OwogIG5zcmVzdWx0IHJlc3VsdCA9IGZvcm1Db250cm9sLT5HZXRIVE1MQXR0cmlidXRlKG5zSFRN
TEF0b21zOjpkaXNhYmxlZCwgdmFsdWUpOwogIGlmICgwID09IHJlc3VsdCkgewogICAgaWYgKGVI
VE1MVW5pdF9FbXB0eSA9PSB2YWx1ZS5HZXRVbml0KCkpIHsKICAgICAgKm9Jc0Rpc2FibGVkID0g
MTsKICAgIH0gZWxzZSB7CiAgICAgICpvSXNEaXNhYmxlZCA9IDA7CiAgICB9CiAgfSBlbHNlIHsK
ICAgICpvSXNEaXNhYmxlZCA9IDA7CiAgfQogIHJldHVybiAwOwp9CiMgOTQ3ICIuLi8uLi8uLi8u
Li8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Zvcm1zL3NyYy9uc0Zvcm1Db250cm9sSGVscGVyLmNw
cCIKbnNyZXN1bHQKbnNGb3JtQ29udHJvbEhlbHBlcjo6RG9NYW51YWxTdWJtaXRPclJlc2V0KG5z
SVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZvcm1GcmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRm9ybUNvbnRyb2xG
cmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBh
RG9TdWJtaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJv
b2wgYURvRE9NRXZlbnQpCnsKICBkbyB7IGlmKCghKGFQcmVzQ29udGV4dCkgPyAxIDogMCkpIHJl
dHVybiAoKG5zcmVzdWx0KSAweDgwMDA0MDAzTCk7IH0gd2hpbGUgKDApOwogIGRvIHsgaWYoKCEo
YUZvcm1GcmFtZSkgPyAxIDogMCkpIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDA0MDAzTCk7IH0g
d2hpbGUgKDApOwoKICBuc3Jlc3VsdCByZXN1bHQgPSAwOwoKICBuc0NPTVB0cjxuc0lDb250ZW50
PiBmb3JtQ29udGVudDsKICBhRm9ybUZyYW1lLT5HZXRDb250ZW50KGdldHRlcl9BZGRSZWZzKGZv
cm1Db250ZW50KSk7CiMgOTcwICIuLi8uLi8uLi8uLi8uLi9tb3ppbGxhL2xheW91dC9odG1sL2Zv
cm1zL3NyYy9uc0Zvcm1Db250cm9sSGVscGVyLmNwcCIKICBuc0NPTVB0cjxuc0lDb250ZW50PiBj
b250cm9sQ29udGVudDsKICBpZiAoYURvU3VibWl0ICYmIGFGb3JtQ29udHJvbEZyYW1lICE9IDAp
IHsKICAgIGFGb3JtQ29udHJvbEZyYW1lLT5HZXRDb250ZW50KGdldHRlcl9BZGRSZWZzKGNvbnRy
b2xDb250ZW50KSk7CiAgfQoKICBpZiAoZm9ybUNvbnRlbnQpIHsKCiAgICBuc0NPTVB0cjxuc0lQ
cmVzU2hlbGw+IHNoZWxsOwogICAgaWYgKGFQcmVzU2hlbGwgPT0gMCkgewogICAgICByZXN1bHQg
PSBhUHJlc0NvbnRleHQtPkdldFNoZWxsKGdldHRlcl9BZGRSZWZzKHNoZWxsKSk7CiAgICAgIGFQ
cmVzU2hlbGwgPSBzaGVsbC5nZXQoKTsKICAgIH0KCgogICAgaWYgKCghKChyZXN1bHQpICYgMHg4
MDAwMDAwMCkpICYmIDAgIT0gYVByZXNTaGVsbCkgewoKCiAgICAgIG5zQ09NUHRyPG5zSUNvbnRl
bnQ+IGZvcm1Db250cm9sOwogICAgICBhRm9ybUNvbnRyb2xGcmFtZS0+R2V0Q29udGVudChnZXR0
ZXJfQWRkUmVmcyhmb3JtQ29udHJvbCkpOwoKICAgICAgbnNGb3JtRXZlbnQgZXZlbnQ7CiAgICAg
IGV2ZW50LmV2ZW50U3RydWN0VHlwZSA9IDIxOwogICAgICBldmVudC5tZXNzYWdlID0gYURvU3Vi
bWl0PygxMjAwKTooMTIwMCArIDEpOwogICAgICBldmVudC5vcmlnaW5hdG9yID0gZm9ybUNvbnRy
b2w7CiAgICAgIG5zRXZlbnRTdGF0dXMgc3RhdHVzID0gbnNFdmVudFN0YXR1c19lSWdub3JlOwog
ICAgICBpZiAoYURvRE9NRXZlbnQpIHsKICAgICAgICBhUHJlc1NoZWxsLT5IYW5kbGVET01FdmVu
dFdpdGhUYXJnZXQoZm9ybUNvbnRlbnQsICZldmVudCwgJnN0YXR1cyk7CiAgICAgIH0gZWxzZSB7
CiAgICAgICAgYVByZXNTaGVsbC0+SGFuZGxlRXZlbnRXaXRoVGFyZ2V0KCZldmVudCwgMCwgZm9y
bUNvbnRlbnQsIDB4MDAwMSwgJnN0YXR1cyk7CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIHJl
c3VsdDsKfQo=


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