c++/2936: gcc gives me an internal error when compiling mozilla with --enable-optimization="-O3"

grigorig@web.de grigorig@web.de
Fri May 25 02:06:00 GMT 2001


>Number:         2936
>Category:       c++
>Synopsis:       gcc gives me an internal error when compiling mozilla with --enable-optimization="-O3"
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri May 25 02:06:03 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     grigorig@web.de
>Release:        Reading specs from /usr/local/lib/gcc-lib/i586-pc-linux-gnu/3.0/specs Configured with: ./configure  Thread model: single gcc version 3.0 20010521 (prerelease)
>Organization:
>Environment:
linux 2.4.4, slackware 7.1, glibc 2.2.2
>Description:
I'm compiling mozilla:
c++ -o nsTextTransformer.o -c -DOSTYPE=\"Linux2.4\" -DOSARCH=\"Linux\" -DOJI -D_IMPL_NS_HTML   -I../../../../dist/include -I../../../../dist/include -I/windows/hda12/moz-cvs/mozilla/dist/include/nspr      -I./../../../xul/base/src -I./../../../xul/content/src -I./../../style/src -I./../../forms/src -I./../../../base/src -I.  -I/usr/X11R6/include   -fPIC  -I/usr/X11R6/include -fno-rtti -fno-exceptions -Wall -Wconversion -Wpointer-arith -Wbad-function-cast -Wcast-align -Woverloaded-virtual -Wsynth -pedantic -Wno-long-long -pipe -fshort-wchar -pthread -O3  -DNDEBUG -DTRIMMED -I/usr/X11R6/include -DMOZILLA_CLIENT -include ../../../../config-defs.h -Wp,-MD,.deps/nsTextTransformer.pp nsTextTransformer.cpp
nsTextTransformer.h: In constructor 
   `nsTextTransformer::nsTextTransformer(nsILineBreaker*, nsIWordBreaker*, 
   nsIPresContext*)':
nsTextTransformer.h:261: warning: member initializers for `PRUint8 
   nsTextTransformer::mFlags'
nsTextTransformer.h:258: warning:   and `PRUint8 
   nsTextTransformer::mTextTransform'
nsTextTransformer.cpp:129: warning:   will be re-ordered to match declaration 
   order
In file included from ../../../../dist/include/nsBufferHandle.h:804:
nsTextTransformer.cpp: At global scope:
nsTextTransformer.cpp:339: Internal error #19991113.
nsTextTransformer.cpp:339: Internal compiler error in copy_body_r, at 
   cp/optimize.c:308
Please submit a full bug report, with preprocessed source if appropriate.
See <URL: http://www.gnu.org/software/gcc/bugs.html > for instructions.
make: *** [nsTextTransformer.o] Error 1

i get this error.
a preprocessed file is attached.

>How-To-Repeat:
run gcc -O3 nsTextTransformer.ii
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="nsTextTransformer.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="nsTextTransformer.ii"

IyAxICJuc1RleHRUcmFuc2Zvcm1lci5jcHAiCiMgMSAiLi4vLi4vLi4vLi4vY29uZmlnLWRlZnMu
aCIgMQojIDIgIm5zVGV4dFRyYW5zZm9ybWVyLmNwcCIgMgojIDIyICJuc1RleHRUcmFuc2Zvcm1l
ci5jcHAiCiMgMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUv
Y3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyODMgIi91c3Iv
aW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMK
IyAyODQgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAzMTEgIi91c3IvaW5jbHVkZS9m
ZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAzMTIgIi91
c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIg
MwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUv
Yml0cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIv
dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1s
aWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE5OSAiL3Vz
ci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYu
aCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CiMgMzAgIi91c3IvaW5jbHVkZS9iaXRz
L3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1
bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5
cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNp
Z25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25n
IGxvbmcgaW50IF9fcXVhZF90OwojIDQ5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCnR5
cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4
X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQg
c2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVk
ZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVk
IGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQg
bG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoK
dHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVkZWYgX191X2ludCBfX3VpZF90Owp0eXBl
ZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190Owp0eXBlZGVmIF9f
dV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBp
bnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xvZmZfdDsKdHlwZWRlZiBpbnQgX19waWRf
dDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVmIF9fdV9sb25nIF9fcmxpbV90Owp0eXBl
ZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5cGVk
ZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBp
bnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGludCBf
X3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcg
aW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190OwoKdHlwZWRlZiBs
b25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiBpbnQgX19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBp
bnQgX190aW1lcl90OwoKCgoKCgp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgdW5zaWdu
ZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90
OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxr
Y250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVh
ZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBl
ZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoKdHlwZWRlZiBfX3VfcXVhZF90IF9faW5v
NjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9f
dF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90OwoKCnR5
cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7
CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vz
ci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9z
Y2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpzdHJ1Y3QgX19z
Y2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3Iv
aW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxv
Y2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRl
ZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBl
ZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQg
X19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50
IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBp
bnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNr
c2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRo
cmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBw
dGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJl
YWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoK
CnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291bnQ7CiAg
X3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJl
YWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVj
dAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYg
aW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QK
ewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9fcndfcmVhZGVy
czsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNjciBfX3J3X3Jl
YWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9f
cndfa2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVk
ZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRf
cndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9zcGlubG9ja190
OwoKCnR5cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19iYV9sb2Nr
OwogIGludCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2JhX3ByZXNlbnQ7CiAgX3B0aHJlYWRfZGVz
Y3IgX19iYV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmllcl90OwoKCnR5cGVkZWYgc3RydWN0IHsK
ICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmllcmF0dHJfdDsKCgoKCgp0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKIyAxNDQgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz
LmgiIDIgMwojIDI4ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCgpleHRlcm4gIkMiIHsKIyA0
MCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEg
MwojIDIyICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVy
ZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgMzcgIi91c3IvaW5j
bHVkZS9lbmRpYW4uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAxIDMKIyAz
OCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMKIyA0MSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgi
IDIgMwoKCgoKCgplbnVtCnsKICBfSVN1cHBlciA9ICgoMCkgPCA4ID8gKCgxIDw8ICgwKSkgPDwg
OCkgOiAoKDEgPDwgKDApKSA+PiA4KSksCiAgX0lTbG93ZXIgPSAoKDEpIDwgOCA/ICgoMSA8PCAo
MSkpIDw8IDgpIDogKCgxIDw8ICgxKSkgPj4gOCkpLAogIF9JU2FscGhhID0gKCgyKSA8IDggPyAo
KDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8PCAoMikpID4+IDgpKSwKICBfSVNkaWdpdCA9ICgoMykg
PCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkgOiAoKDEgPDwgKDMpKSA+PiA4KSksCiAgX0lTeGRpZ2l0
ID0gKCg0KSA8IDggPyAoKDEgPDwgKDQpKSA8PCA4KSA6ICgoMSA8PCAoNCkpID4+IDgpKSwKICBf
SVNzcGFjZSA9ICgoNSkgPCA4ID8gKCgxIDw8ICg1KSkgPDwgOCkgOiAoKDEgPDwgKDUpKSA+PiA4
KSksCiAgX0lTcHJpbnQgPSAoKDYpIDwgOCA/ICgoMSA8PCAoNikpIDw8IDgpIDogKCgxIDw8ICg2
KSkgPj4gOCkpLAogIF9JU2dyYXBoID0gKCg3KSA8IDggPyAoKDEgPDwgKDcpKSA8PCA4KSA6ICgo
MSA8PCAoNykpID4+IDgpKSwKICBfSVNibGFuayA9ICgoOCkgPCA4ID8gKCgxIDw8ICg4KSkgPDwg
OCkgOiAoKDEgPDwgKDgpKSA+PiA4KSksCiAgX0lTY250cmwgPSAoKDkpIDwgOCA/ICgoMSA8PCAo
OSkpIDw8IDgpIDogKCgxIDw8ICg5KSkgPj4gOCkpLAogIF9JU3B1bmN0ID0gKCgxMCkgPCA4ID8g
KCgxIDw8ICgxMCkpIDw8IDgpIDogKCgxIDw8ICgxMCkpID4+IDgpKSwKICBfSVNhbG51bSA9ICgo
MTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8PCA4KSA6ICgoMSA8PCAoMTEpKSA+PiA4KSkKfTsKIyA3
NSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIF9fY29uc3QgdW5zaWduZWQgc2hvcnQg
aW50ICpfX2N0eXBlX2I7CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b2xvd2Vy
OwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG91cHBlcjsKIyA5MSAiL3Vzci9p
bmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIGludCBpc2FsbnVtIChpbnQpIHRocm93ICgpOwpleHRl
cm4gaW50IGlzYWxwaGEgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNjbnRybCAoaW50KSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBpc2RpZ2l0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlz
bG93ZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNncmFwaCAoaW50KSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBpc3ByaW50IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzcHVuY3QgKGlu
dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNzcGFjZSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBpc3VwcGVyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzeGRpZ2l0IChpbnQpIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgaXNibGFuayAoaW50KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg
dG9sb3dlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0b3VwcGVyIChpbnQgX19j
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBpc2FzY2lpIChpbnQgX19jKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCB0b2FzY2lpIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBf
dG91cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfdG9sb3dlciAoaW50KSB0aHJvdyAo
KTsKIyAxNjggIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBfX2lubGluZSBpbnQKdG9s
b3dlciAoaW50IF9fYykgdGhyb3cgKCkKewogIHJldHVybiBfX2MgPj0gLTEyOCAmJiBfX2MgPCAy
NTYgPyBfX2N0eXBlX3RvbG93ZXJbX19jXSA6IF9fYzsKfQoKZXh0ZXJuIF9faW5saW5lIGludAp0
b3VwcGVyIChpbnQgX19jKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fYyA+PSAtMTI4ICYmIF9fYyA8
IDI1NiA/IF9fY3R5cGVfdG91cHBlcltfX2NdIDogX19jOwp9CiMgMjExICIvdXNyL2luY2x1ZGUv
Y3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDI4ICIvdXNyL2lu
Y2x1ZGUveGxvY2FsZS5oIiAzCnR5cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0
cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVzWzEzXTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0
IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGludCAqX19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGlu
dCAqX19jdHlwZV90b3VwcGVyOwp9ICpfX2xvY2FsZV90OwojIDIxMiAiL3Vzci9pbmNsdWRlL2N0
eXBlLmgiIDIgMwojIDIyNCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIGludCBfX2lz
YWxudW1fbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzYWxwaGFf
bCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzY250cmxfbCAoaW50
LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzZGlnaXRfbCAoaW50LCBfX2xv
Y2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzbG93ZXJfbCAoaW50LCBfX2xvY2FsZV90
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzZ3JhcGhfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBfX2lzcHJpbnRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBfX2lzcHVuY3RfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBfX2lzc3BhY2VfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBf
X2lzdXBwZXJfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzeGRp
Z2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9faXNibGFua19s
IChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fdG9sb3dlcl9sIChp
bnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3RvdXBwZXJf
bCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwojIDI3NyAiL3Vzci9pbmNsdWRl
L2N0eXBlLmgiIDMKfQojIDIzICJuc1RleHRUcmFuc2Zvcm1lci5jcHAiIDIKIyAxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIgMQojIDQ0ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNDT01QdHIuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNEZWJ1Zy5o
IiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlYnVnLmgiCiMgMSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zQ29tLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zRGVidWcuaCIgMgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0
L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAzOSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9t
b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKIyAxICIvd2luZG93cy9oZGExMi9t
b3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJjcHVjZmcuaCIgMQojIDQwICIvd2lu
ZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAy
CgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNs
dWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDcgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1s
aW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBpbnQgcHRyZGlmZl90Owoj
IDQzICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0
eXBlcy5oIiAyCiMgMjM0ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvcHJ0eXBlcy5oIgpleHRlcm4gIkMiIHsKIyAyNDQgIi93aW5kb3dzL2hkYTEyL21v
ei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVkZWYgdW5zaWdu
ZWQgY2hhciBQUlVpbnQ4OwojIDI1OCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rp
c3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiBzaWduZWQgY2hhciBQUkludDg7CiMg
MjcxICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0
eXBlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFBSVWludDE2Owp0eXBlZGVmIHNob3J0IFBS
SW50MTY7CiMgMjg0ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRl
L25zcHIvcHJ0eXBlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIGludCBQUlVpbnQzMjsKdHlwZWRlZiBp
bnQgUFJJbnQzMjsKIyAzMTggIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVkZWYgbG9uZyBsb25nIFBSSW50NjQ7CnR5cGVkZWYg
dW5zaWduZWQgbG9uZyBsb25nIFBSVWludDY0OwojIDM0MiAiL3dpbmRvd3MvaGRhMTIvbW96LWN2
cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiBpbnQgUFJJbnRu
Owp0eXBlZGVmIHVuc2lnbmVkIGludCBQUlVpbnRuOwojIDM1MyAiL3dpbmRvd3MvaGRhMTIvbW96
LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiBkb3VibGUg
UFJGbG9hdDY0OwoKCgoKCgp0eXBlZGVmIHNpemVfdCBQUlNpemU7CgoKCgoKCgp0eXBlZGVmIFBS
SW50MzIgUFJPZmZzZXQzMjsKdHlwZWRlZiBQUkludDY0IFBST2Zmc2V0NjQ7CgoKCgoKCgp0eXBl
ZGVmIHB0cmRpZmZfdCBQUlB0cmRpZmY7CgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgUFJV
cHRyZGlmZjsKIyAzOTUgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1
ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVkZWYgUFJJbnRuIFBSQm9vbDsKIyA0MDUgIi93aW5kb3dz
L2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVk
ZWYgUFJVaW50OCBQUlBhY2tlZEJvb2w7CgoKCgoKdHlwZWRlZiBlbnVtIHsgUFJfRkFJTFVSRSA9
IC0xLCBQUl9TVUNDRVNTID0gMCB9IFBSU3RhdHVzOwojIDQyNCAiL3dpbmRvd3MvaGRhMTIvbW96
LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiBsb25nIFBS
V29yZDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFBSVXdvcmQ7CiMgNDY2ICIvd2luZG93cy9oZGEx
Mi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIgojIDEgIi93aW5k
b3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90
eXBlcy5oIiAxCiMgMjkgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1
ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIgp0eXBlZGVmIFBSVWludG4gdWludG47Cgp0eXBl
ZGVmIFBSSW50biBpbnRuOwojIDUzICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvb2Jzb2xldGUvcHJvdHlwZXMuaCIKIyAxICIvdXNyL2luY2x1ZGUvc3lz
L3R5cGVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg
MiAzCgpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMg
MzEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiBfX3VfY2hhciB1X2No
YXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2ludDsKdHlw
ZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBlZGVmIF9f
dV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCnR5cGVkZWYgX19s
b2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5cGVkZWYgX19p
bm82NF90IGlubzY0X3Q7CgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVmIF9f
Z2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYgX19u
bGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRlZiBf
X29mZl90IG9mZl90OwoKCgoKCgp0eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwoKCgoKdHlwZWRl
ZiBfX3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYgX19z
c2l6ZV90IHNzaXplX3Q7CgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9f
Y2FkZHJfdCBjYWRkcl90OwoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTI2ICIvdXNyL2lu
Y2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyA1NiAi
L3Vzci9pbmNsdWRlL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEg
MwojIDU3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgp0eXBlZGVmIF9fY2xvY2tfdCBjbG9j
a190OwoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA2OCAiL3Vz
ci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CiMgNzkgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMK
IyA4MCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9j
a2lkX3Q7CiMgOTEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy90eXBlcy5oIiAxIDMKIyA5MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBf
X3RpbWVyX3QgdGltZXJfdDsKIyAxMjcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoK
CnR5cGVkZWYgX191c2Vjb25kc190IHVzZWNvbmRzX3Q7CgoKCnR5cGVkZWYgX19zdXNlY29uZHNf
dCBzdXNlY29uZHNfdDsKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1s
aW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE0MSAiL3Vzci9pbmNsdWRlL3N5
cy90eXBlcy5oIiAyIDMKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1bG9uZzsKdHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCBpbnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50Owoj
IDE4NCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgaW50IGludDhfdCBfX2F0
dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0
dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0
dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0
dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fRElfXykpKTsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1
X2ludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgdV9pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0
eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf
X1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgo
X19tb2RlX18gKF9fRElfXykpKTsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRyaWJ1dGVf
XyAoKF9fbW9kZV9fIChfX3dvcmRfXykpKTsKIyAyMDYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMgMjA3ICIvdXNyL2luY2x1ZGUv
c3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMg
MjUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVy
ZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0
LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwojIDMyICIvdXNy
L2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3Nl
dC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQg
X19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcg
aW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9
IF9fc2lnc2V0X3Q7CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgp0eXBl
ZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEg
MwojIDEwNiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBs
b25nIGludCB0dl9zZWM7CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CiMgNDQgIi91c3IvaW5j
bHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEg
MwojIDYzICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy90eXBlcy5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAyIDMKCgoKc3Ry
dWN0IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBfX3N1c2Vjb25kc190IHR2
X3VzZWM7CiAgfTsKIyA0NiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCnR5cGVk
ZWYgbG9uZyBpbnQgX19mZF9tYXNrOwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBf
X2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgoKCgoK
ICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2ZkX21hc2sgZmRfbWFzazsKIyA4OSAiL3Vzci9p
bmNsdWRlL3N5cy9zZWxlY3QuaCIgMwpleHRlcm4gIkMiIHsKCgoKCgoKZXh0ZXJuIGludCBzZWxl
Y3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAg
ICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAgICAgICAgICAgICAg
IGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgIHN0cnVj
dCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGlu
dCBwc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAg
ICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAg
ICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QgX190aW1lb3V0LAogICAgICAg
ICAgICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19zaWdtYXNrKSB0aHJv
dyAoKTsKCgp9CiMgMjEwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vz
ci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAzCiMgMjEzICIvdXNyL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDIgMwoKCgoKdHlwZWRlZiBfX2Jsa3NpemVfdCBibGtzaXplX3Q7CgoKCgoKCnR5cGVk
ZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRf
dDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsKIyAyNTEgIi91c3IvaW5jbHVk
ZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxrY250NjRfdCBibGtjbnQ2NF90Owp0eXBlZGVm
IF9fZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2Zp
bGNudDY0X3Q7CgoKfQojIDU0ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9p
bmNsdWRlL25zcHIvb2Jzb2xldGUvcHJvdHlwZXMuaCIgMgoKCgoKCnR5cGVkZWYgUFJVaW50NjQg
dWludDY0OwoKdHlwZWRlZiBQUlVpbnQzMiB1aW50MzI7CgoKCnR5cGVkZWYgUFJVaW50MTYgdWlu
dDE2Owp0eXBlZGVmIFBSVWludDggdWludDg7CiMgNzcgIi93aW5kb3dzL2hkYTEyL21vei1jdnMv
bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIgp0eXBlZGVmIFBS
SW50NjQgaW50NjQ7CgoKCgoKCgp0eXBlZGVmIFBSSW50MzIgaW50MzI7CgoKCgp0eXBlZGVmIFBS
SW50MTYgaW50MTY7CnR5cGVkZWYgUFJJbnQ4IGludDg7CgoKCgoKdHlwZWRlZiBQUkZsb2F0NjQg
ZmxvYXQ2NDsKdHlwZWRlZiBQUlVwdHJkaWZmIHVwdHJkaWZmX3Q7CnR5cGVkZWYgUFJVd29yZCB1
cHJ3b3JkX3Q7CnR5cGVkZWYgUFJXb3JkIHByd29yZF90OwojIDQ2NyAiL3dpbmRvd3MvaGRhMTIv
bW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMgoKCgoKCn0KIyAy
OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVidWcuaCIgMgojIDQyICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNEZWJ1Zy5oIgpjbGFzcyBuc0RlYnVnIHsKcHVibGljOgoKCgoKCgog
IHN0YXRpYyB2b2lkIEFib3J0SWZGYWxzZShjb25zdCBjaGFyKiBhU3RyLCBjb25zdCBjaGFyKiBh
RXhwciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxl
LCBQUkludG4gYUxpbmUpOwojIDYwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNEZWJ1Zy5o
IgogIHN0YXRpYyBQUkJvb2wgV2FybklmRmFsc2UoY29uc3QgY2hhciogYVN0ciwgY29uc3QgY2hh
ciogYUV4cHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
YUZpbGUsIFBSSW50biBhTGluZSk7CiMgNzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Rl
YnVnLmgiCiAgc3RhdGljIHZvaWQgU2V0V2FybmluZ01lc3NhZ2VCb3hFbmFibGUoUFJCb29sIGFP
bk9mZik7CgoKCgogIHN0YXRpYyBQUkJvb2wgR2V0V2FybmluZ01lc3NhZ2VCb3hFbmFibGUodm9p
ZCk7CiMgOTYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlYnVnLmgiCiAgc3RhdGljIHZv
aWQgQWJvcnQoY29uc3QgY2hhciogYUZpbGUsIFBSSW50biBhTGluZSk7CgoKCgogIHN0YXRpYyB2
b2lkIEJyZWFrKGNvbnN0IGNoYXIqIGFGaWxlLCBQUkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMg
dm9pZCBQcmVDb25kaXRpb24oY29uc3QgY2hhciogYVN0ciwgY29uc3QgY2hhciogYUV4cHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhRmlsZSwgUFJJbnRu
IGFMaW5lKTsKCgoKCiAgc3RhdGljIHZvaWQgUG9zdENvbmRpdGlvbihjb25zdCBjaGFyKiBhU3Ry
LCBjb25zdCBjaGFyKiBhRXhwciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBhRmlsZSwgUFJJbnRuIGFMaW5lKTsKCgoKCiAgc3RhdGljIHZvaWQgQXNzZXJ0
aW9uKGNvbnN0IGNoYXIqIGFTdHIsIGNvbnN0IGNoYXIqIGFFeHByLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUsIFBSSW50biBhTGluZSk7CgoKCgogIHN0
YXRpYyB2b2lkIE5vdFlldEltcGxlbWVudGVkKGNvbnN0IGNoYXIqIGFNZXNzYWdlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhRmlsZSwgUFJJbnRu
IGFMaW5lKTsKCgoKCiAgc3RhdGljIHZvaWQgTm90UmVhY2hlZChjb25zdCBjaGFyKiBhTWVzc2Fn
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhRmlsZSwgUFJJ
bnRuIGFMaW5lKTsKCgoKCiAgc3RhdGljIHZvaWQgRXJyb3IoY29uc3QgY2hhciogYU1lc3NhZ2Us
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQUkludG4gYUxp
bmUpOwoKCgoKICBzdGF0aWMgdm9pZCBXYXJuaW5nKGNvbnN0IGNoYXIqIGFNZXNzYWdlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQUkludG4gYUxpbmUp
Owp9OwojIDQ1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIgMgoKCgoKIyAx
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDEwICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNyb290aWRsLmgiIDEKIyAxMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zcm9v
dGlkbC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDM3ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiCiMgMSAiL3dpbmRvd3MvaGRhMTIvbW96
LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDM4ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDIKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0RlYnVnLmgiIDEKIyA0MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5o
IiAyCiMgMjEzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiCiAgICB0eXBlZGVm
IFBSVWludDE2IFBSVW5pY2hhcjsKIyAxMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zcm9v
dGlkbC5oIiAyCiMgMSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVk
ZS9uc3ByL3BydGltZS5oIiAxCiMgMzIgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIKIyAxICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21v
emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb25nLmgiIDEKIyAzMCAiL3dpbmRvd3MvaGRhMTIv
bW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9uZy5oIgojIDEgIi93aW5kb3dz
L2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAz
MSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9u
Zy5oIiAyCgpleHRlcm4gIkMiIHsKIyA1MCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxh
L2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9uZy5oIgpleHRlcm4gUFJJbnQ2NCBMTF9NYXhJbnQodm9p
ZCk7CmV4dGVybiBQUkludDY0IExMX01pbkludCh2b2lkKTsKZXh0ZXJuIFBSSW50NjQgTExfWmVy
byh2b2lkKTsKIyA0MDcgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1
ZGUvbnNwci9wcmxvbmcuaCIKfQojIDMzICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiIDIKCmV4dGVybiAiQyIgewojIDYxICIvd2luZG93
cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCnR5cGVk
ZWYgUFJJbnQ2NCBQUlRpbWU7CgoKCgoKCnR5cGVkZWYgc3RydWN0IFBSVGltZVBhcmFtZXRlcnMg
ewogICAgUFJJbnQzMiB0cF9nbXRfb2Zmc2V0OwogICAgUFJJbnQzMiB0cF9kc3Rfb2Zmc2V0Owp9
IFBSVGltZVBhcmFtZXRlcnM7CiMgOTYgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIKdHlwZWRlZiBzdHJ1Y3QgUFJFeHBsb2RlZFRpbWUg
ewogICAgUFJJbnQzMiB0bV91c2VjOwogICAgUFJJbnQzMiB0bV9zZWM7CgogICAgUFJJbnQzMiB0
bV9taW47CiAgICBQUkludDMyIHRtX2hvdXI7CiAgICBQUkludDMyIHRtX21kYXk7CgogICAgUFJJ
bnQzMiB0bV9tb250aDsKICAgIFBSSW50MTYgdG1feWVhcjsKCgogICAgUFJJbnQ4IHRtX3dkYXk7
CgogICAgUFJJbnQxNiB0bV95ZGF5OwoKCiAgICBQUlRpbWVQYXJhbWV0ZXJzIHRtX3BhcmFtczsK
fSBQUkV4cGxvZGVkVGltZTsKIyAxMzkgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIKdHlwZWRlZiBQUlRpbWVQYXJhbWV0ZXJzICggKlBS
VGltZVBhcmFtRm4pKGNvbnN0IFBSRXhwbG9kZWRUaW1lICpnbXQpOwojIDE2MSAiL3dpbmRvd3Mv
aGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGltZS5oIgpleHRlcm4g
UFJUaW1lCgpQUl9Ob3codm9pZCk7CiMgMTc1ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCmV4dGVybiB2b2lkIFBSX0V4cGxvZGVUaW1l
KAogICAgUFJUaW1lIHVzZWNzLCBQUlRpbWVQYXJhbUZuIHBhcmFtcywgUFJFeHBsb2RlZFRpbWUg
KmV4cGxvZGVkKTsKCgoKCgpleHRlcm4gUFJUaW1lCgpQUl9JbXBsb2RlVGltZShjb25zdCBQUkV4
cGxvZGVkVGltZSAqZXhwbG9kZWQpOwojIDE5OCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3pp
bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGltZS5oIgpleHRlcm4gdm9pZCBQUl9Ob3JtYWxpemVU
aW1lKAogICAgUFJFeHBsb2RlZFRpbWUgKmV4cGxvZGVkLCBQUlRpbWVQYXJhbUZuIHBhcmFtcyk7
CgoKCgoKCmV4dGVybiBQUlRpbWVQYXJhbWV0ZXJzIFBSX0xvY2FsVGltZVBhcmFtZXRlcnMoY29u
c3QgUFJFeHBsb2RlZFRpbWUgKmdtdCk7CgoKZXh0ZXJuIFBSVGltZVBhcmFtZXRlcnMgUFJfR01U
UGFyYW1ldGVycyhjb25zdCBQUkV4cGxvZGVkVGltZSAqZ210KTsKCgoKCgpleHRlcm4gUFJUaW1l
UGFyYW1ldGVycyBQUl9VU1BhY2lmaWNUaW1lUGFyYW1ldGVycyhjb25zdCBQUkV4cGxvZGVkVGlt
ZSAqZ210KTsKIyAyNDggIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1
ZGUvbnNwci9wcnRpbWUuaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1BhcnNlVGltZVN0cmluZyAoCiAg
ICAgICAgY29uc3QgY2hhciAqc3RyaW5nLAogICAgICAgIFBSQm9vbCBkZWZhdWx0X3RvX2dtdCwK
ICAgICAgICBQUlRpbWUgKnJlc3VsdCk7CiMgMjY1ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21v
emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCmV4dGVybiBQUlVpbnQzMiBQUl9Gb3Jt
YXRUaW1lKGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbiwgY29uc3QgY2hhciAqZm10LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUFJFeHBsb2RlZFRpbWUgKnRt
KTsKCgoKCmV4dGVybiBQUlVpbnQzMgpQUl9Gb3JtYXRUaW1lVVNFbmdsaXNoKCBjaGFyKiBidWYs
IFBSVWludDMyIGJ1ZlNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZv
cm1hdCwgY29uc3QgUFJFeHBsb2RlZFRpbWUqIHRtICk7CgoKCn0KIyAxMyAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zcm9vdGlkbC5oIiAyCiMgMTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lTdXBwb3J0cy5oIiAyCiMgMTE3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3Vw
cG9ydHMuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGlscy5o
IiAxCiMgMzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0c1V0aWxzLmgiCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgMzMgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0c1V0aWxzLmgiIDIKCgojIDEgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0RlYnVnLmgiIDEKIyAzNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVN1cHBvcnRzVXRpbHMuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lELmgi
IDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUQuaCIKIyAxICIvdXNyL2luY2x1
ZGUvc3RyaW5nLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAz
CgpleHRlcm4gIkMiIHsKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxp
bnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdHJp
bmcuaCIgMiAzCgoKCmV4dGVybiB2b2lkICptZW1jcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0
LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNp
emVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1tb3ZlICh2b2lkICpfX2Rlc3Qs
IF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIHZvaWQgKm1lbWNjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQg
Kl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jLCBzaXplX3Qg
X19uKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAqX19zLCBp
bnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19jb25z
dCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbWNociAoX19j
b25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHZvaWQgKnJhd21lbWNociAoX19jb25z
dCB2b2lkICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCmV4dGVybiB2b2lkICptZW1yY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6
ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpl
eHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkg
KGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hh
ciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9f
cmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHN0cmNtcCAo
X19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9fY29uc3QgY2hh
ciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBj
aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3Qg
X19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUveGxvY2Fs
ZS5oIiAxIDMKIyAxMDkgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKZXh0ZXJuIGludCBf
X3N0cmNvbGxfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIF9fbG9j
YWxlX3QgX19sKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0
ZXJuIHNpemVfdCBfX3N0cnhmcm1fbCAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3Jj
LCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbCkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0
cm5kdXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxNTUgIi91c3IvaW5jbHVkZS9zdHJpbmcu
aCIgMwpleHRlcm4gY2hhciAqc3RyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycmNociAo
X19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNocm51bCAoX19jb25zdCBjaGFyICpfX3MsIGlu
dCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNp
emVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCkK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gc2l6ZV90
IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJy
ayAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2Nv
bnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJjYXNlc3Ry
IChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJ0
b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxp
bSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RydG9rX3IgKGNoYXIgKl9fcmVz
dHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X3NhdmVfcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hhciAqX19yZXN0
cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gdm9pZCAqbWVtbWVtIChfX2NvbnN0IHZvaWQgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hh
eXN0YWNrbGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fbmVlZGxlLCBz
aXplX3QgX19uZWVkbGVsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKCmV4dGVybiB2b2lkICpfX21lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNp
emVfdCBfX24pIHRocm93ICgpOwpleHRlcm4gdm9pZCAqbWVtcGNweSAodm9pZCAqX19yZXN0cmlj
dCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3Qg
X19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJsZW4gKF9f
Y29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoK
CmV4dGVybiBzaXplX3Qgc3RybmxlbiAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9f
bWF4bGVuKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0
ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRocm93ICgpOwoKCgpleHRlcm4gY2hh
ciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVu
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9f
bikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQgKl9fc3JjLCB2
b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGJ6ZXJvICh2
b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgYmNtcCAoX19jb25z
dCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChfX2Nv
bnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gaW50IGZmcyAoaW50
IF9faSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CgoKCgpleHRlcm4gaW50IGZm
c2wgKGxvbmcgaW50IF9fbCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CgpfX2V4
dGVuc2lvbl9fIGV4dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKCmV4dGVybiBpbnQgc3RyY2FzZWNtcCAo
X19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25z
dCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGludCBfX3N0cmNhc2Vj
bXBfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBfX3N0cm5jYXNlY21wX2wgKF9fY29uc3QgY2hhciAq
X19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgoKCgpleHRlcm4gY2hhciAqc3Ryc2VwIChjaGFyICoqX19yZXN0cmljdCBf
X3N0cmluZ3AsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2RlbGltKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3RydmVyc2NtcCAoX19jb25zdCBjaGFy
ICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbCAoaW50IF9fc2lnKSB0aHJvdyAo
KTsKCgpleHRlcm4gY2hhciAqX19zdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpz
dHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zcmMpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3N0cG5jcHkgKGNoYXIgKl9f
cmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RwbmNw
eSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBj
aGFyICpzdHJmcnkgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqbWVt
ZnJvYiAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIg
KmJhc2VuYW1lIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwojIDM2MyAiL3Vz
ci9pbmNsdWRlL3N0cmluZy5oIiAzCn0KIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUQuaCIgMgojIDQwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRC5oIgpzdHJ1Y3QgbnNJ
RCB7CgoKCgoKICBQUlVpbnQzMiBtMDsKICBQUlVpbnQxNiBtMTsKICBQUlVpbnQxNiBtMjsKICBQ
UlVpbnQ4IG0zWzhdOwojIDYyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRC5oIgogIGlu
bGluZSBQUkJvb2wgRXF1YWxzKGNvbnN0IG5zSUQmIG90aGVyKSBjb25zdCB7CiAgICByZXR1cm4g
KFBSQm9vbCkKICAgICAgKCgoKFBSVWludDMyKikgJm0wKVswXSA9PSAoKFBSVWludDMyKikgJm90
aGVyLm0wKVswXSkgJiYKICAgICAgICgoKFBSVWludDMyKikgJm0wKVsxXSA9PSAoKFBSVWludDMy
KikgJm90aGVyLm0wKVsxXSkgJiYKICAgICAgICgoKFBSVWludDMyKikgJm0wKVsyXSA9PSAoKFBS
VWludDMyKikgJm90aGVyLm0wKVsyXSkgJiYKICAgICAgICgoKFBSVWludDMyKikgJm0wKVszXSA9
PSAoKFBSVWludDMyKikgJm90aGVyLm0wKVszXSkpOwogIH0KCgoKCgogICAgICAgICBQUkJvb2wg
UGFyc2UoY29uc3QgY2hhciAqYUlEU3RyKTsKCgoKCgogICAgICAgICBjaGFyKiBUb1N0cmluZygp
IGNvbnN0OwoKfTsKIyAxMDIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lELmgiCnR5cGVk
ZWYgbnNJRCBuc0NJRDsKIyAzNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRz
VXRpbHMuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJRC5oIiAxCiMgMzUg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJRC5oIgp0eXBlZGVmIG5zSUQgbnNJSUQ7CiMg
MzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0c1V0aWxzLmgiIDIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNFcnJvci5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0Vycm9yLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29t
LmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRXJyb3IuaCIgMgojIDEgIi93
aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgi
IDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRXJyb3IuaCIgMgoKCgoKCnR5cGVk
ZWYgUFJVaW50MzIgbnNyZXN1bHQ7CiMgMjYyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNF
cnJvci5oIgpleHRlcm4gbnNyZXN1bHQKTlNfRXJyb3JBY2NvcmRpbmdUb05TUFIoKTsKIyAzOSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIgMgojIDEgIi93aW5k
b3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20uaCIgMQoj
IDI3ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJh
dG9tLmgiCiMgMSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3BydHlwZXMuaCIgMQojIDI4ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiIDIKIyAxICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21v
emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2NrLmgiIDEKIyAzMiAiL3dpbmRvd3MvaGRhMTIv
bW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9jay5oIgojIDEgIi93aW5kb3dz
L2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAz
MyAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9j
ay5oIiAyCgpleHRlcm4gIkMiIHsKIyA0NyAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxh
L2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9jay5oIgp0eXBlZGVmIHN0cnVjdCBQUkxvY2sgUFJMb2Nr
OwojIDY0ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv
cHJsb2NrLmgiCmV4dGVybiBQUkxvY2sqIFBSX05ld0xvY2sodm9pZCk7CiMgNzUgIi93aW5kb3dz
L2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxvY2suaCIKZXh0ZXJu
IHZvaWQgUFJfRGVzdHJveUxvY2soUFJMb2NrICpsb2NrKTsKIyA4NiAiL3dpbmRvd3MvaGRhMTIv
bW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9jay5oIgpleHRlcm4gdm9pZCBQ
Ul9Mb2NrKFBSTG9jayAqbG9jayk7CiMgOTggIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxs
YS9kaXN0L2luY2x1ZGUvbnNwci9wcmxvY2suaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1VubG9jayhQ
UkxvY2sgKmxvY2spOwoKfQojIDI5ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiIDIKCmV4dGVybiAiQyIgewojIDQxICIvd2luZG93cy9o
ZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiCmV4dGVybiBQ
UkludDMyIFBSX0F0b21pY0luY3JlbWVudChQUkludDMyICp2YWwpOwojIDUyICIvd2luZG93cy9o
ZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiCmV4dGVybiBQ
UkludDMyIFBSX0F0b21pY0RlY3JlbWVudChQUkludDMyICp2YWwpOwojIDY0ICIvd2luZG93cy9o
ZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiCmV4dGVybiBQ
UkludDMyIFBSX0F0b21pY1NldChQUkludDMyICp2YWwsIFBSSW50MzIgbmV3dmFsKTsKIyA3NiAi
L3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByYXRvbS5o
IgpleHRlcm4gUFJJbnQzMiBQUl9BdG9taWNBZGQoUFJJbnQzMiAqcHRyLCBQUkludDMyIHZhbCk7
CgoKCgp0eXBlZGVmIHN0cnVjdCBQUlN0YWNrRWxlbVN0ciBQUlN0YWNrRWxlbTsKCnN0cnVjdCBQ
UlN0YWNrRWxlbVN0ciB7CiAgICBQUlN0YWNrRWxlbSAqcHJzdGtfZWxlbV9uZXh0OwoKfTsKCnR5
cGVkZWYgc3RydWN0IFBSU3RhY2tTdHIgUFJTdGFjazsKIyA5OSAiL3dpbmRvd3MvaGRhMTIvbW96
LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByYXRvbS5oIgpleHRlcm4gUFJTdGFjayAq
IFBSX0NyZWF0ZVN0YWNrKGNvbnN0IGNoYXIgKnN0YWNrX25hbWUpOwojIDExMSAiL3dpbmRvd3Mv
aGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByYXRvbS5oIgpleHRlcm4g
dm9pZCBQUl9TdGFja1B1c2goUFJTdGFjayAqc3RhY2ssIFBSU3RhY2tFbGVtICpzdGFja19lbGVt
KTsKIyAxMjQgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw
ci9wcmF0b20uaCIKZXh0ZXJuIFBSU3RhY2tFbGVtICogUFJfU3RhY2tQb3AoUFJTdGFjayAqc3Rh
Y2spOwojIDEzOCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3ByYXRvbS5oIgpleHRlcm4gUFJTdGF0dXMgUFJfRGVzdHJveVN0YWNrKFBSU3RhY2sgKnN0
YWNrKTsKCn0KIyA0MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMu
aCIgMgoKCiMgMSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3ByY21vbi5oIiAxCiMgMzIgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0
L2luY2x1ZGUvbnNwci9wcmNtb24uaCIKIyAxICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJtb24uaCIgMQojIDIyICIvd2luZG93cy9oZGExMi9tb3ot
Y3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJtb24uaCIKIyAxICIvd2luZG93cy9oZGEx
Mi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMjMgIi93
aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm1vbi5oIiAy
CiMgMSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By
aW5ydmFsLmgiIDEKIyAzNCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3ByaW5ydmFsLmgiCiMgMSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxh
L2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDM1ICIvd2luZG93cy9oZGExMi9tb3ot
Y3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbnJ2YWwuaCIgMgoKZXh0ZXJuICJDIiB7
CgoKCgoKdHlwZWRlZiBQUlVpbnQzMiBQUkludGVydmFsVGltZTsKIyA4OSAiL3dpbmRvd3MvaGRh
MTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ydmFsLmgiCmV4dGVybiBQ
UkludGVydmFsVGltZSBQUl9JbnRlcnZhbE5vdyh2b2lkKTsKIyAxMDcgIi93aW5kb3dzL2hkYTEy
L21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIgpleHRlcm4gUFJV
aW50MzIgUFJfVGlja3NQZXJTZWNvbmQodm9pZCk7CiMgMTI2ICIvd2luZG93cy9oZGExMi9tb3ot
Y3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbnJ2YWwuaCIKZXh0ZXJuIFBSSW50ZXJ2
YWxUaW1lIFBSX1NlY29uZHNUb0ludGVydmFsKFBSVWludDMyIHNlY29uZHMpOwpleHRlcm4gUFJJ
bnRlcnZhbFRpbWUgUFJfTWlsbGlzZWNvbmRzVG9JbnRlcnZhbChQUlVpbnQzMiBtaWxsaSk7CmV4
dGVybiBQUkludGVydmFsVGltZSBQUl9NaWNyb3NlY29uZHNUb0ludGVydmFsKFBSVWludDMyIG1p
Y3JvKTsKIyAxNDcgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUv
bnNwci9wcmlucnZhbC5oIgpleHRlcm4gUFJVaW50MzIgUFJfSW50ZXJ2YWxUb1NlY29uZHMoUFJJ
bnRlcnZhbFRpbWUgdGlja3MpOwpleHRlcm4gUFJVaW50MzIgUFJfSW50ZXJ2YWxUb01pbGxpc2Vj
b25kcyhQUkludGVydmFsVGltZSB0aWNrcyk7CmV4dGVybiBQUlVpbnQzMiBQUl9JbnRlcnZhbFRv
TWljcm9zZWNvbmRzKFBSSW50ZXJ2YWxUaW1lIHRpY2tzKTsKCn0KIyAyNCAiL3dpbmRvd3MvaGRh
MTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybW9uLmgiIDIKCmV4dGVybiAi
QyIgewoKdHlwZWRlZiBzdHJ1Y3QgUFJNb25pdG9yIFBSTW9uaXRvcjsKIyAzNiAiL3dpbmRvd3Mv
aGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybW9uLmgiCmV4dGVybiBQ
Uk1vbml0b3IqIFBSX05ld01vbml0b3Iodm9pZCk7CgoKCgoKCgpleHRlcm4gdm9pZCBQUl9EZXN0
cm95TW9uaXRvcihQUk1vbml0b3IgKm1vbik7CgoKCgoKCmV4dGVybiB2b2lkIFBSX0VudGVyTW9u
aXRvcihQUk1vbml0b3IgKm1vbik7CgoKCgoKCmV4dGVybiBQUlN0YXR1cyBQUl9FeGl0TW9uaXRv
cihQUk1vbml0b3IgKm1vbik7CiMgNzYgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcm1vbi5oIgpleHRlcm4gUFJTdGF0dXMgUFJfV2FpdChQUk1vbml0
b3IgKm1vbiwgUFJJbnRlcnZhbFRpbWUgdGlja3MpOwoKCgoKCgpleHRlcm4gUFJTdGF0dXMgUFJf
Tm90aWZ5KFBSTW9uaXRvciAqbW9uKTsKCgoKCgoKZXh0ZXJuIFBSU3RhdHVzIFBSX05vdGlmeUFs
bChQUk1vbml0b3IgKm1vbik7Cgp9CiMgMzMgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxs
YS9kaXN0L2luY2x1ZGUvbnNwci9wcmNtb24uaCIgMgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1j
dnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIiAxCiMgMzQgIi93aW5kb3dz
L2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmNtb24uaCIgMgoKZXh0
ZXJuICJDIiB7CiMgNDUgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1
ZGUvbnNwci9wcmNtb24uaCIKZXh0ZXJuIFBSTW9uaXRvciogUFJfQ0VudGVyTW9uaXRvcih2b2lk
ICphZGRyZXNzKTsKCgoKCgpleHRlcm4gUFJTdGF0dXMgUFJfQ0V4aXRNb25pdG9yKHZvaWQgKmFk
ZHJlc3MpOwoKCgoKCmV4dGVybiBQUlN0YXR1cyBQUl9DV2FpdCh2b2lkICphZGRyZXNzLCBQUklu
dGVydmFsVGltZSB0aW1lb3V0KTsKCgoKCgpleHRlcm4gUFJTdGF0dXMgUFJfQ05vdGlmeSh2b2lk
ICphZGRyZXNzKTsKCgoKCgpleHRlcm4gUFJTdGF0dXMgUFJfQ05vdGlmeUFsbCh2b2lkICphZGRy
ZXNzKTsKCgoKCgpleHRlcm4gdm9pZCBQUl9DU2V0T25Nb25pdG9yUmVjeWNsZSh2b2lkICggKmNh
bGxiYWNrKSh2b2lkICphZGRyZXNzKSk7Cgp9CiMgNDMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lTdXBwb3J0c1V0aWxzLmgiIDIKIyA3MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVN1cHBvcnRzVXRpbHMuaCIKdHlwZWRlZiBQUlVpbnQzMiBuc3JlZmNudDsKIyA5MCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIKIyAxICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNUcmFjZVJlZmNudC5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc1RyYWNlUmVmY250LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29t
LmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zVHJhY2VSZWZjbnQuaCIgMgoK
IyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L3N0ZGlvLmgiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgt
Z251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg
MSAzCiMgMzcgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvc3RkaW8uaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9n
Y2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0MyAi
L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRp
by5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgNDUgIi91c3Iv
bG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIg
MiAzCiMgNTMgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwojIDYzICIvdXNy
L2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgi
IDMKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgX19GSUxFOwojIDczICIvdXNyL2xvY2FsL2xpYi9n
Y2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvbGliaW8uaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIyA5ICIvdXNyL2luY2x1ZGUvX0dfY29uZmln
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAxMCAiL3Vzci9pbmNs
dWRlL19HX2NvbmZpZy5oIiAyIDMKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzEyICIvdXNyL2xvY2Fs
L2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5
cGVkZWYgdW5zaWduZWQgaW50IHdpbnRfdDsKIyAxNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5o
IiAyIDMKIyAyNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvbG9j
YWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEg
MwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L3djaGFyLmgiIDEgMwojIDUxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgNjcgIi91c3Iv
aW5jbHVkZS93Y2hhci5oIiAzCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19jb3VudDsKICB1bmlv
bgogIHsKICAgIHdpbnRfdCBfX3djaDsKICAgIGNoYXIgX193Y2hiWzRdOwogIH0gX192YWx1ZTsK
fSBfX21ic3RhdGVfdDsKIyAyNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCnR5cGVk
ZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0df
ZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmY2NF90IF9fcG9zOwogIF9fbWJzdGF0ZV90
IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CiMgNDQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2djb252
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVk
ZS9nY29udi5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNy
L2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1s
aW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2No
YXIuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDUxICIvdXNy
L2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgMjkgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCiMg
MSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9z
dGRkZWYuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgoKCgplbnVtCnsK
ICBfX0dDT05WX09LID0gMCwKICBfX0dDT05WX05PQ09OViwKICBfX0dDT05WX05PREIsCiAgX19H
Q09OVl9OT01FTSwKCiAgX19HQ09OVl9FTVBUWV9JTlBVVCwKICBfX0dDT05WX0ZVTExfT1VUUFVU
LAogIF9fR0NPTlZfSUxMRUdBTF9JTlBVVCwKICBfX0dDT05WX0lOQ09NUExFVEVfSU5QVVQsCgog
IF9fR0NPTlZfSUxMRUdBTF9ERVNDUklQVE9SLAogIF9fR0NPTlZfSU5URVJOQUxfRVJST1IKfTsK
CgoKZW51bQp7CiAgX19HQ09OVl9JU19MQVNUID0gMHgwMDAxLAogIF9fR0NPTlZfSUdOT1JFX0VS
Uk9SUyA9IDB4MDAwMgp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwOwpzdHJ1Y3QgX19nY29udl9z
dGVwX2RhdGE7CnN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3Q7CnN0cnVjdCBfX2djb252X3Ry
YW5zX2RhdGE7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl9mY3QpIChzdHJ1Y3QgX19nY29udl9z
dGVwICosIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIHNpemVfdCAqLCBp
bnQsIGludCk7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2luaXRfZmN0KSAoc3RydWN0IF9fZ2Nv
bnZfc3RlcCAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl9lbmRfZmN0KSAoc3RydWN0IF9fZ2Nv
bnZfc3RlcCAqKTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2ZjdCkgKHN0cnVjdCBf
X2djb252X3N0ZXAgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBf
X2djb252X3N0ZXBfZGF0YSAqLCB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICoqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgq
X19nY29udl90cmFuc19jb250ZXh0X2ZjdCkgKHZvaWQgKiwgX19jb25zdCB1bnNpZ25lZCBjaGFy
ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5z
aWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252
X3RyYW5zX3F1ZXJ5X2ZjdCkgKF9fY29uc3QgY2hhciAqLCBfX2NvbnN0IGNoYXIgKioqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYg
aW50ICgqX19nY29udl90cmFuc19pbml0X2ZjdCkgKHZvaWQgKiosIGNvbnN0IGNoYXIgKik7CnR5
cGVkZWYgdm9pZCAoKl9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQgKik7CgpzdHJ1Y3QgX19n
Y29udl90cmFuc19kYXRhCnsKCiAgX19nY29udl90cmFuc19mY3QgX190cmFuc19mY3Q7CiAgX19n
Y29udl90cmFuc19jb250ZXh0X2ZjdCBfX3RyYW5zX2NvbnRleHRfZmN0OwogIF9fZ2NvbnZfdHJh
bnNfZW5kX2ZjdCBfX3RyYW5zX2VuZF9mY3Q7CiAgdm9pZCAqX19kYXRhOwogIHN0cnVjdCBfX2dj
b252X3RyYW5zX2RhdGEgKl9fbmV4dDsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcAp7CiAgc3Ry
dWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdCAqX19zaGxpYl9oYW5kbGU7CiAgX19jb25zdCBjaGFy
ICpfX21vZG5hbWU7CgogIGludCBfX2NvdW50ZXI7CgogIGNoYXIgKl9fZnJvbV9uYW1lOwogIGNo
YXIgKl9fdG9fbmFtZTsKCiAgX19nY29udl9mY3QgX19mY3Q7CiAgX19nY29udl9pbml0X2ZjdCBf
X2luaXRfZmN0OwogIF9fZ2NvbnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgoKCiAgaW50IF9fbWluX25l
ZWRlZF9mcm9tOwogIGludCBfX21heF9uZWVkZWRfZnJvbTsKICBpbnQgX19taW5fbmVlZGVkX3Rv
OwogIGludCBfX21heF9uZWVkZWRfdG87CgoKICBpbnQgX19zdGF0ZWZ1bDsKCiAgdm9pZCAqX19k
YXRhOwp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEKewogIHVuc2lnbmVkIGNoYXIgKl9f
b3V0YnVmOwogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmZW5kOwoKCgogIGludCBfX2ZsYWdzOwoK
CgogIGludCBfX2ludm9jYXRpb25fY291bnRlcjsKCgoKICBpbnQgX19pbnRlcm5hbF91c2U7Cgog
IF9fbWJzdGF0ZV90ICpfX3N0YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwoKCgogIHN0cnVj
dCBfX2djb252X3RyYW5zX2RhdGEgKl9fdHJhbnM7Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9fZ2Nv
bnZfaW5mbwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2djb252X3N0ZXAgKl9fc3Rl
cHM7CiAgX19leHRlbnNpb25fXyBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhIFtdOwp9
ICpfX2djb252X3Q7CiMgNDUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCnR5cGVkZWYg
dW5pb24KewogIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QKICB7CiAgICBzdHJ1
Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRh
OwogIH0gX19jb21iaW5lZDsKfSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCBf
X2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgX0dfaW50MzJf
dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVk
ZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19T
SV9fKSkpOwojIDMxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgNTEgIi91c3IvaW5jbHVk
ZS9saWJpby5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdu
dS8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvbGliL2djYy1saWIv
aTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0
aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyA1MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIg
MwojIDE1OCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVj
dCBfSU9fRklMRTsKIyAxNjggIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBf
SU9fbG9ja190OwoKCgoKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAq
X25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTEgIi91
c3IvaW5jbHVkZS9saWJpby5oIiAzCn07CgoKZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2Nv
ZGVjdnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRpYWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29k
ZWN2dF9ub2NvbnYKfTsKIyAyNTkgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9f
RklMRSB7CiAgaW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9J
T19yZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNl
OwogIGNoYXIqIF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBf
SU9fYnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7
CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0
IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50
IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5z
aWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAg
Y2hhciBfc2hvcnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CiMgMzAzICIvdXNyL2lu
Y2x1ZGUvbGliaW8uaCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoKCgoKCiAgdm9pZCAqX19wYWQx
OwogIHZvaWQgKl9fcGFkMjsKCiAgaW50IF9tb2RlOwoKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6
ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAodm9pZCAqKV07Cgp9OwoKCgoKCnN0cnVjdCBfSU9fRklM
RV9wbHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRl
cm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9J
T19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDM0MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi
IDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAq
X19idWYsIHNpemVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dy
aXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lv
X3NlZWtfZm4gKHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0
eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9f
aW9fcmVhZF9mbiBjb29raWVfcmVhZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4g
Y29va2llX3dyaXRlX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVr
X2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25f
dDsKCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19pb19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVf
Zm4gKndyaXRlOwogIF9faW9fc2Vla19mbiAqc2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsK
fSBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rp
b25zX3QgY29va2llX2lvX2Z1bmN0aW9uc190OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpl
eHRlcm4gdm9pZCBfSU9fY29va2llX2luaXQgKHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2Zp
bGUsIGludCBfX3JlYWRfd3JpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAq
X19jb29raWUsIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19mbnMpOwoKCgoKZXh0ZXJuICJD
IiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVy
biBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19vdmVyZmxv
dyAoX0lPX0ZJTEUgKiwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cg
KF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAq
KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90
KSB0aHJvdyAoKTsKIyA0MjQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lP
X2dldGMgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50
IF9fYywgX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZW9mIChfSU9f
RklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9f
ZnApIHRocm93ICgpOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19m
cCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikg
dGhyb3cgKCk7CmV4dGVybiB2b2lkIF9JT19mdW5sb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cg
KCk7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CiMg
NDU0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9f
RklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAg
ICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBfSU9fdmZwcmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpf
X3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93
ICgpOwpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVf
dCkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICos
IHNpemVfdCkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklM
RSAqLCBfX29mZjY0X3QsIGludCwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9f
c2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQpIHRocm93ICgpOwoKZXh0ZXJuIHZv
aWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwojIDUxMCAiL3Vz
ci9pbmNsdWRlL2xpYmlvLmgiIDMKfQojIDc0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYt
cGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKdHlwZWRlZiBfX2dudWNf
dmFfbGlzdCBfX25vdF92YV9saXN0X187CiMgODggIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4
Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIF9HX2Zwb3NfdCBm
cG9zX3Q7CgoKCgp0eXBlZGVmIF9HX2Zwb3M2NF90IGZwb3M2NF90OwojIDEzNyAiL3Vzci9sb2Nh
bC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDEzOCAiL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoK
ZXh0ZXJuIEZJTEUgKnN0ZGluOwpleHRlcm4gRklMRSAqc3Rkb3V0OwpleHRlcm4gRklMRSAqc3Rk
ZXJyOwoKCgoKCgpleHRlcm4gaW50IHJlbW92ZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0
aHJvdyAoKTsKCmV4dGVybiBpbnQgcmVuYW1lIChfX2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0
IGNoYXIgKl9fbmV3KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2b2lkKSB0
aHJvdyAoKTsKIyAxNjYgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUv
My4wL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJv
dyAoKTsKCgpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGNoYXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIHRocm93ICgpOwojIDE4NiAiL3Vzci9sb2Nh
bC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAzCmV4
dGVybiBjaGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9f
cGZ4KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRl
cm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZmx1
c2ggKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2Nr
ZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlYWxsICh2
b2lkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKCmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgRklMRSAq
X19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CiMgMjMwICIvdXNyL2xvY2FsL2xpYi9nY2Mt
bGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUg
KmZvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwpl
eHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9k
ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAq
X19tb2RlcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuY29va2llICh2b2lkICpf
X3Jlc3RyaWN0IF9fbWFnaWNfY29va2llLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9J
T19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5jcykgdGhyb3cgKCk7CgoKZXh0ZXJuIEZJ
TEUgKmZtZW1vcGVuICh2b2lkICpfX3MsIHNpemVfdCBfX2xlbiwgX19jb25zdCBjaGFyICpfX21v
ZGVzKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICpvcGVuX21lbXN0cmVhbSAoY2hhciAqKl9f
cmVzdHJpY3QgX19idWZsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpf
X3Jlc3RyaWN0IF9fc2l6ZWxvYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChG
SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCBzZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFy
ICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgIGludCBfX21vZGVzLCBzaXpl
X3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZmZlciAoRklMRSAqX19yZXN0
cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzZXRsaW5lYnVmIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwcmludGYgKEZJTEUgKl9f
cmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBwcmludGYgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQg
c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
dmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJv
dyAoKTsKCmV4dGVybiBpbnQgdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y
bWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnNw
cmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
b3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCBzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBf
X21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
Zm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9f
cHJpbnRmX18sIDMsIDQpKSk7CgpleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAqX19yZXN0cmlj
dCBfX3MsIHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CgoKCgoK
ZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLCBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mLAogICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3Qg
X19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRm
X18sIDIsIDApKSk7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10
LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRm
X18sIDIsIDMpKSk7CmV4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRy
LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4u
LikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywg
MiwgMykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZm10LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2Fy
ZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywg
MiwgMCkpKTsKZXh0ZXJuIGludCBkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0
X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKCgpleHRlcm4gaW50IGZzY2FuZiAoRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2NhbmYgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3Nj
YW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IHZmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkp
KTsKCgpleHRlcm4gaW50IHZzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0
LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19m
b3JtYXRfXyAoX19zY2FuZl9fLCAxLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNzY2FuZiAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKCgpleHRl
cm4gaW50IGZnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0YyAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0Y2hhciAodm9pZCkgdGhy
b3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBpbnQgZnB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBwdXRjaGFyIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZnB1dGNf
dW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBp
bnQgcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRl
cm4gaW50IHB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBp
bnQgZ2V0dyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0dyAoaW50
IF9fdywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzIChj
aGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkK
ICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzX3VubG9ja2VkIChjaGFyICpfX3Jl
c3RyaWN0IF9fcywgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpf
X3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpnZXRzIChjaGFy
ICpfX3MpIHRocm93ICgpOwojIDQzNCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxp
bnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBfX3NzaXplX3QgX19nZXRkZWxp
bSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7
CmV4dGVybiBfX3NzaXplX3QgZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQg
X19kZWxpbWl0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fc3NpemVfdCBnZXRsaW5lIChjaGFyICoq
X19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
Kl9fcmVzdHJpY3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0
cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IGZwdXRzX3VubG9ja2VkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgdW5nZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CgoKCmV4dGVybiBzaXplX3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNp
emVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVz
dHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qg
dm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9f
c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2Vk
IChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25n
IGludCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBmdGVs
bCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpf
X3N0cmVhbSkgdGhyb3cgKCk7CiMgNDk3ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMt
bGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2Vla28gKEZJTEUg
Kl9fc3RyZWFtLCBfX29mZl90IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJu
IF9fb2ZmX3QgZnRlbGxvIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
ZmdldHBvcyAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9f
cG9zKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwg
X19jb25zdCBmcG9zX3QgKl9fcG9zKSB0aHJvdyAoKTsKIyA1MzEgIi91c3IvbG9jYWwvbGliL2dj
Yy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50
IGZzZWVrbzY0IChGSUxFICpfX3N0cmVhbSwgX19vZmY2NF90IF9fb2ZmLCBpbnQgX193aGVuY2Up
IHRocm93ICgpOwpleHRlcm4gX19vZmY2NF90IGZ0ZWxsbzY0IChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgZmdldHBvczY0IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBm
cG9zNjRfdCAqX19yZXN0cmljdCBfX3BvcykKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGludCBmc2V0
cG9zNjQgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3M2NF90ICpfX3BvcykgdGhyb3cgKCk7
CgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRl
cm4gaW50IGZlb2YgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVycm9y
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyX3VubG9j
a2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAoRklM
RSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcGVycm9yIChfX2NvbnN0IGNo
YXIgKl9fcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN5c19uZXJyOwpleHRlcm4gX19jb25z
dCBjaGFyICpfX2NvbnN0IHN5c19lcnJsaXN0W107CgoKZXh0ZXJuIGludCBfc3lzX25lcnI7CmV4
dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3QgX3N5c19lcnJsaXN0W107CgoKCgoKZXh0ZXJuIGlu
dCBmaWxlbm8gKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmlsZW5v
X3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBGSUxFICpw
b3BlbiAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBwY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
Y2hhciAqY3VzZXJpZCAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCnN0cnVjdCBvYnN0YWNrOwoK
CmV4dGVybiBpbnQgb2JzdGFja19wcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9f
b2JzdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwpleHRlcm4gaW50IG9ic3RhY2tfdnByaW50ZiAo
c3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmdzKSB0aHJvdyAoKTsKCgoKCgoKCmV4
dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB2b2lk
IGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNjM4ICIvdXNyL2xvY2Fs
L2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2JpdHMv
c3RkaW8uaCIgMwppbmxpbmUgaW50CnZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2ZtdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpCnsKICByZXR1cm4gdmZwcmludGYg
KHN0ZG91dCwgX19mbXQsIF9fYXJnKTsKfQoKCmlubGluZSBpbnQKZ2V0Y2hhciAodm9pZCkgdGhy
b3cgKCkKewogIHJldHVybiBfSU9fZ2V0YyAoc3RkaW4pOwp9CgoKCgppbmxpbmUgaW50CmdldGNf
dW5sb2NrZWQgKEZJTEUgKl9fZnApIHRocm93ICgpCnsKICByZXR1cm4gKChfX2ZwKS0+X0lPX3Jl
YWRfcHRyID49IChfX2ZwKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoX19mcCkgOiAqKHVuc2ln
bmVkIGNoYXIgKikgKF9fZnApLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgppbmxpbmUgaW50CmdldGNo
YXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpCnsKICByZXR1cm4gKChzdGRpbiktPl9JT19yZWFk
X3B0ciA+PSAoc3RkaW4pLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChzdGRpbikgOiAqKHVuc2ln
bmVkIGNoYXIgKikgKHN0ZGluKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKCgppbmxpbmUgaW50CnB1
dGNoYXIgKGludCBfX2MpIHRocm93ICgpCnsKICByZXR1cm4gX0lPX3B1dGMgKF9fYywgc3Rkb3V0
KTsKfQoKCgoKaW5saW5lIGludApmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJl
YW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyID49IChf
X3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoX19zdHJlYW0sICh1bnNpZ25l
ZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooX19zdHJlYW0pLT5fSU9fd3JpdGVf
cHRyKysgPSAoX19jKSkpOwp9CgoKCgoKaW5saW5lIGludApwdXRjX3VubG9ja2VkIChpbnQgX19j
LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9JT193
cml0ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChfX3N0
cmVhbSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVh
bSktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgppbmxpbmUgaW50CnB1dGNoYXJfdW5s
b2NrZWQgKGludCBfX2MpIHRocm93ICgpCnsKICByZXR1cm4gKCgoc3Rkb3V0KS0+X0lPX3dyaXRl
X3B0ciA+PSAoc3Rkb3V0KS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChzdGRvdXQsICh1
bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooc3Rkb3V0KS0+X0lPX3dy
aXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCmlubGluZSBfX3NzaXplX3QKZ2V0bGluZSAoY2hh
ciAqKl9fbGluZXB0ciwgc2l6ZV90ICpfX24sIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAg
cmV0dXJuIF9fZ2V0ZGVsaW0gKF9fbGluZXB0ciwgX19uLCAnXG4nLCBfX3N0cmVhbSk7Cn0KCgoK
CgppbmxpbmUgaW50CmZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAg
cmV0dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgxMCkgIT0gMCk7Cn0KCgppbmxpbmUgaW50
CmZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgo
X19zdHJlYW0pLT5fZmxhZ3MgJiAweDIwKSAhPSAwKTsKfQojIDYzOSAiL3Vzci9sb2NhbC9saWIv
Z2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgp9CiMg
MjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1RyYWNlUmVmY250LmgiIDIKCmNsYXNzIG5z
SVN1cHBvcnRzOwojIDEzMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zVHJhY2VSZWZjbnQu
aCIKc3RydWN0IG5zVHJhY2VSZWZjbnRTdGF0cyB7CiAgbnNyZWZjbnQgbUFkZFJlZnM7CiAgbnNy
ZWZjbnQgbVJlbGVhc2VzOwogIG5zcmVmY250IG1DcmVhdGVzOwogIG5zcmVmY250IG1EZXN0cm95
czsKICBkb3VibGUgbVJlZnNPdXRzdGFuZGluZ1RvdGFsOwogIGRvdWJsZSBtUmVmc091dHN0YW5k
aW5nU3F1YXJlZDsKICBkb3VibGUgbU9ianNPdXRzdGFuZGluZ1RvdGFsOwogIGRvdWJsZSBtT2Jq
c091dHN0YW5kaW5nU3F1YXJlZDsKfTsKIyAxNTIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c1RyYWNlUmVmY250LmgiCnR5cGVkZWYgUFJCb29sICggKm5zVHJhY2VSZWZjbnRTdGF0RnVuYykK
ICAoY29uc3QgY2hhciogYVR5cGVOYW1lLAogICBQUlVpbnQzMiBhSW5zdGFuY2VTaXplLAogICBu
c1RyYWNlUmVmY250U3RhdHMqIGFDdXJyZW50U3RhdHMsCiAgIG5zVHJhY2VSZWZjbnRTdGF0cyog
YVByZXZTdGF0cywKICAgdm9pZCAqYUNsb3N1cmUpOwoKCgoKCmNsYXNzIG5zVHJhY2VSZWZjbnQg
ewpwdWJsaWM6CiAgc3RhdGljIHZvaWQgU3RhcnR1cCgpOwoKICBzdGF0aWMgdm9pZCBTaHV0ZG93
bigpOwoKICBzdGF0aWMgdm9pZCBMb2dBZGRSZWYodm9pZCogYVB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zcmVmY250IGFOZXdSZWZDbnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBhVHlwZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQUlVpbnQzMiBhSW5zdGFuY2VTaXplKTsKCiAgc3RhdGljIHZvaWQgTG9nUmVsZWFz
ZSh2b2lkKiBhUHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zcmVmY250IGFO
ZXdSZWZDbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYVR5
cGVOYW1lKTsKCiAgc3RhdGljIHZvaWQgTG9nTmV3WFBDT00odm9pZCogYVB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYVR5cGVOYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhSW5zdGFuY2VTaXplLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhRmlsZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGFMaW5lKTsKCiAgc3RhdGljIHZvaWQgTG9nRGVsZXRlWFBD
T00odm9pZCogYVB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogYUZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhTGlu
ZSk7CgogIHN0YXRpYyBuc3JlZmNudCBMb2dBZGRSZWZDYWxsKHZvaWQqIGFQdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zcmVmY250IGFOZXdSZWZjbnQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYUxpbmUpOwoKICBzdGF0aWMg
bnNyZWZjbnQgTG9nUmVsZWFzZUNhbGwodm9pZCogYVB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zcmVmY250IGFOZXdSZWZjbnQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhRmlsZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhTGluZSk7CgogIHN0YXRpYyB2b2lkIExvZ0N0
b3Iodm9pZCogYVB0ciwgY29uc3QgY2hhciogYVR5cGVOYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBSVWludDMyIGFJbnN0YW5jZVNpemUpOwoKICBzdGF0aWMgdm9pZCBMb2dEdG9y
KHZvaWQqIGFQdHIsIGNvbnN0IGNoYXIqIGFUeXBlTmFtZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQUlVpbnQzMiBhSW5zdGFuY2VTaXplKTsKCiAgc3RhdGljIHZvaWQgTG9nQWRkQ09N
UHRyKHZvaWQgKmFDT01QdHIsIG5zSVN1cHBvcnRzICphT2JqZWN0KTsKCiAgc3RhdGljIHZvaWQg
TG9nUmVsZWFzZUNPTVB0cih2b2lkICphQ09NUHRyLCBuc0lTdXBwb3J0cyAqYU9iamVjdCk7Cgog
IGVudW0gU3RhdGlzdGljc1R5cGUgewogICAgQUxMX1NUQVRTLAogICAgTkVXX1NUQVRTCiAgfTsK
CiAgc3RhdGljIG5zcmVzdWx0IER1bXBTdGF0aXN0aWNzKFN0YXRpc3RpY3NUeXBlIHR5cGUgPSBB
TExfU1RBVFMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFKiBv
dXQgPSAwKTsKCiAgc3RhdGljIHZvaWQgUmVzZXRTdGF0aXN0aWNzKHZvaWQpOwoKICBzdGF0aWMg
dm9pZCBHYXRoZXJTdGF0aXN0aWNzKG5zVHJhY2VSZWZjbnRTdGF0RnVuYyBhRnVuYywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhQ2xvc3VyZSk7CgogIHN0YXRp
YyB2b2lkIExvYWRMaWJyYXJ5U3ltYm9scyhjb25zdCBjaGFyKiBhTGlicmFyeU5hbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhTGlicmF5SGFuZGxlKTsK
CiAgc3RhdGljIHZvaWQgRGVtYW5nbGVTeW1ib2woY29uc3QgY2hhciAqIGFTeW1ib2wsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBhQnVmZmVyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYUJ1Zkxlbik7CgogIHN0YXRpYyB2b2lkIFdh
bGtUaGVTdGFjayhGSUxFKiBhU3RyZWFtKTsKCiAgc3RhdGljIHZvaWQgU2V0UHJlZlNlcnZpY2VB
dmFpbGFiaWxpdHkoUFJCb29sIGF2YWlsKTsKCgoKCgoKICBzdGF0aWMgdm9pZCBTZXRBY3Rpdml0
eUlzTGVnYWwoUFJCb29sIGFMZWdhbCk7Cn07CgoKCgpleHRlcm4gIkMiIHZvaWQKTlNfTWVhbkFu
ZFN0ZERldihkb3VibGUgbiwgZG91YmxlIHN1bU9mVmFsdWVzLCBkb3VibGUgc3VtT2ZTcXVhcmVk
VmFsdWVzLAogICAgICAgICAgICAgICAgIGRvdWJsZSAqbWVhblJlc3VsdCwgZG91YmxlICpzdGRE
ZXZSZXN1bHQpOwojIDkxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGls
cy5oIiAyCgoKCgoKCgpjbGFzcyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKIyAxMTUgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0c1V0aWxzLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBR
dWVyeUludGVyZmFjZShjb25zdCBuc0lJRCYgYUlJRCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZvaWQqKiBhSW5zdGFuY2VQdHIpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3JlZmNudCBB
ZGRSZWYodm9pZCkgPSAwOwojIDEzMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBv
cnRzVXRpbHMuaCIKICB2aXJ0dWFsIG5zcmVmY250IFJlbGVhc2Uodm9pZCkgPSAwOwoKCn07CiMg
MTExNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIKZXh0ZXJu
ICJDKysiIHsKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpuc3JlZmNudApuc19pZl9hZGRy
ZWYoIFQgZXhwciApCgoKCiAgewogICAgcmV0dXJuIGV4cHIgPyBleHByLT5BZGRSZWYoKSA6IDA7
CiAgfQoKIH0KIyAxMjMyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGls
cy5oIgpleHRlcm4gIkMrKyIgewoKCgpjbGFzcyBuc0lTdXBwb3J0czsKCnRlbXBsYXRlIDxjbGFz
cyBUPgpzdHJ1Y3QgbnNDT01UeXBlSW5mbwogIHsKICAgIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0
SUlEKCkgeyByZXR1cm4gVDo6R2V0SUlEKCk7IH0KICB9OwoKdGVtcGxhdGUgPD4Kc3RydWN0IG5z
Q09NVHlwZUluZm88bnNJU3VwcG9ydHM+CiAgewogICAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJ
SUQoKSB7CiAgICAgICAgc3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHgwMDAwMDAwMCwgMHgw
MDAwLCAweDAwMDAsIHsweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDQ2fSB9OyByZXR1cm4gaWlkOwogICAgfQogIH07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgRGVzdGlu
YXRpb25UeXBlPgppbmxpbmUKbnNyZXN1bHQKQ2FsbFF1ZXJ5SW50ZXJmYWNlKCBuc0lTdXBwb3J0
cyogYVNvdXJjZSwgRGVzdGluYXRpb25UeXBlKiogYURlc3RpbmF0aW9uICkKICB7CiAgICB7fTsK
ICAgIHt9OwoKICAgIHJldHVybiBhU291cmNlLT5RdWVyeUludGVyZmFjZShuc0NPTVR5cGVJbmZv
PERlc3RpbmF0aW9uVHlwZT46OkdldElJRCgpLCAodm9pZCoqKWFEZXN0aW5hdGlvbik7CiAgfQoK
fQoKCgoKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDbGFzc0luZm8uaCIgMQoj
IDE0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2xhc3NJbmZvLmgiCiMgMSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVByb2dyYW1taW5nTGFuZ3VhZ2UuaCIgMQojIDI4ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJvZ3JhbW1pbmdMYW5ndWFnZS5oIgpjbGFzcyBuc0lQ
cm9ncmFtbWluZ0xhbmd1YWdlIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3Rh
dGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGVh
NjA0ZTkwLCAweDQwYmEsIDB4MTFkNSwgeyAweDkwLCAweGJiLCAweDAwLCAweDEwLCAweGE0LCAw
eGU3LCAweDNkLCAweDlhIH19OyByZXR1cm4gaWlkO30KCgoKCiAgZW51bSB7IFVOS05PV04gPSAw
VSB9OwoKICBlbnVtIHsgQ1BMVVNQTFVTID0gMVUgfTsKCiAgZW51bSB7IEpBVkFTQ1JJUFQgPSAy
VSB9OwoKICBlbnVtIHsgUFlUSE9OID0gM1UgfTsKCiAgZW51bSB7IFBFUkwgPSA0VSB9OwoKICBl
bnVtIHsgSkFWQSA9IDVVIH07CgogIGVudW0geyBaWDgxX0JBU0lDID0gNlUgfTsKCiAgZW51bSB7
IEpBVkFTQ1JJUFQyID0gN1UgfTsKCn07CiMgMTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lDbGFzc0luZm8uaCIgMgojIDI5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2xhc3NJ
bmZvLmgiCmNsYXNzIG5zSUNsYXNzSW5mbyA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6
CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg
PSB7MHg5ODZjMTFkMCwgMHhmMzQwLCAweDExZDQsIHsgMHg5MCwgMHg3NSwgMHgwMCwgMHgxMCwg
MHhhNCwgMHhlNywgMHgzZCwgMHg5YSB9fTsgcmV0dXJuIGlpZDt9CiMgNDMgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lDbGFzc0luZm8uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEludGVy
ZmFjZXMoUFJVaW50MzIgKmNvdW50LCBuc0lJRCAqICoqYXJyYXkpID0gMDsKIyA1OCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUNsYXNzSW5mby5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
SGVscGVyRm9yTGFuZ3VhZ2UoUFJVaW50MzIgbGFuZ3VhZ2UsIG5zSVN1cHBvcnRzICoqX3JldHZh
bCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udHJhY3RJRChjaGFyICogKmFD
b250cmFjdElEKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENsYXNzRGVzY3JpcHRp
b24oY2hhciAqICphQ2xhc3NEZXNjcmlwdGlvbikgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0Q2xhc3NJRChuc0NJRCAqICphQ2xhc3NJRCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRJbXBsZW1lbnRhdGlvbkxhbmd1YWdlKFBSVWludDMyICphSW1wbGVtZW50YXRpb25M
YW5ndWFnZSkgPSAwOwoKCgoKICBlbnVtIHsgU0lOR0xFVE9OID0gMVUgfTsKCiAgZW51bSB7IFRI
UkVBRFNBRkUgPSAyVSB9OwoKICBlbnVtIHsgTUFJTl9USFJFQURfT05MWSA9IDRVIH07CgogIGVu
dW0geyBET01fT0JKRUNUID0gOFUgfTsKCiAgZW51bSB7IFBMVUdJTl9PQkpFQ1QgPSAxNlUgfTsK
CiAgZW51bSB7IFJFU0VSVkVEID0gMjE0NzQ4MzY0OFUgfTsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0RmxhZ3MoUFJVaW50MzIgKmFGbGFncykgPSAwOwoKfTsKIyAxMjc0ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGlscy5oIiAyCiMgMTE4ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMgojIDUwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNDT01QdHIuaCIgMgoKCgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgi
IDEKIyA1NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiIDIKIyAxMDcgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogIHR5cGVkZWYgUFJCb29sIE5TQ0FQ
X0JPT0w7CiMgMTU5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKdGVtcGxh
dGUgPGNsYXNzIFQ+CmNsYXNzIG5zRGVyaXZlZFNhZmUgOiBwdWJsaWMgVAojIDE3MCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgewogICAgcHJpdmF0ZToKCiAgICAgIHVz
aW5nIFQ6OkFkZFJlZjsKICAgICAgdXNpbmcgVDo6UmVsZWFzZTsKCgoKCgoKICAgICAgdm9pZCBv
cGVyYXRvciBkZWxldGUoIHZvaWQqLCBzaXplX3QgKTsKCgoKICAgICAgbnNEZXJpdmVkU2FmZTxU
PiYgb3BlcmF0b3I9KCBjb25zdCBUJiApOwojIDE5NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zQ09NUHRyLmgiCiAgfTsKIyAyMTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0
ci5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVD4Kc3RydWN0IGFscmVhZHlfQWRkUmVmZWQKIyAyMzIgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogIHsKICAgIGFscmVhZHlfQWRkUmVm
ZWQoIFQqIGFSYXdQdHIgKQogICAgICAgIDogbVJhd1B0cihhUmF3UHRyKQogICAgICB7CgogICAg
ICB9CgogICAgVCogZ2V0KCkgY29uc3QgeyByZXR1cm4gbVJhd1B0cjsgfQoKICAgIFQqIG1SYXdQ
dHI7CiAgfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKY29uc3QgYWxyZWFkeV9BZGRSZWZl
ZDxUPgpnZXR0ZXJfQWRkUmVmcyggVCogYVJhd1B0ciApCgoKCgogIHsKICAgIHJldHVybiBhbHJl
YWR5X0FkZFJlZmVkPFQ+KGFSYXdQdHIpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUK
Y29uc3QgYWxyZWFkeV9BZGRSZWZlZDxUPgpnZXR0ZXJfQWRkUmVmcyggY29uc3QgYWxyZWFkeV9B
ZGRSZWZlZDxUPiYgYUFscmVhZHlBZGRSZWZlZFB0ciApCiAgewogICAgcmV0dXJuIGFBbHJlYWR5
QWRkUmVmZWRQdHI7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpjb25zdCBhbHJlYWR5
X0FkZFJlZmVkPFQ+CmRvbnRfQWRkUmVmKCBUKiBhUmF3UHRyICkKICB7CiAgICByZXR1cm4gYWxy
ZWFkeV9BZGRSZWZlZDxUPihhUmF3UHRyKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5l
CmNvbnN0IGFscmVhZHlfQWRkUmVmZWQ8VD4KZG9udF9BZGRSZWYoIGNvbnN0IGFscmVhZHlfQWRk
UmVmZWQ8VD4gYUFscmVhZHlBZGRSZWZlZFB0ciApCiAgewogICAgcmV0dXJuIGFBbHJlYWR5QWRk
UmVmZWRQdHI7CiAgfQojIDI5MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgi
CnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKVCoKZG9udF9RdWVyeUludGVyZmFjZSggVCogZXhw
ciApCiAgewogICAgcmV0dXJuIGV4cHI7CiAgfQoKCgpjbGFzcyBuc0NPTVB0cl9oZWxwZXIKIyAz
MTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogIHsKICAgIHB1YmxpYzoK
ICAgICAgdmlydHVhbCBuc3Jlc3VsdCBvcGVyYXRvcigpKCBjb25zdCBuc0lJRCYsIHZvaWQqKiAp
IGNvbnN0ID0gMDsKICB9OwoKY2xhc3MgbnNRdWVyeUludGVyZmFjZSA6IHB1YmxpYyBuc0NPTVB0
cl9oZWxwZXIKICB7CiAgICBwdWJsaWM6CiAgICAgIG5zUXVlcnlJbnRlcmZhY2UoIG5zSVN1cHBv
cnRzKiBhUmF3UHRyLCBuc3Jlc3VsdCogZXJyb3IgKQogICAgICAgICAgOiBtUmF3UHRyKGFSYXdQ
dHIpLAogICAgICAgICAgICBtRXJyb3JQdHIoZXJyb3IpCiAgICAgICAgewoKICAgICAgICB9Cgog
ICAgICB2aXJ0dWFsIG5zcmVzdWx0IG9wZXJhdG9yKCkoIGNvbnN0IG5zSUlEJiBhSUlELCB2b2lk
KiogKSBjb25zdDsKCiAgICBwcml2YXRlOgogICAgICBuc0lTdXBwb3J0cyogbVJhd1B0cjsKICAg
ICAgbnNyZXN1bHQqIG1FcnJvclB0cjsKICB9OwoKaW5saW5lCmNvbnN0IG5zUXVlcnlJbnRlcmZh
Y2UKZG9fUXVlcnlJbnRlcmZhY2UoIG5zSVN1cHBvcnRzKiBhUmF3UHRyLCBuc3Jlc3VsdCogZXJy
b3IgPSAwICkKICB7CiAgICByZXR1cm4gbnNRdWVyeUludGVyZmFjZShhUmF3UHRyLCBlcnJvcik7
CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQp2b2lkCmRvX1F1ZXJ5SW50ZXJmYWNlKCBh
bHJlYWR5X0FkZFJlZmVkPFQ+JiApCiAgewoKCgogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxp
bmUKdm9pZApkb19RdWVyeUludGVyZmFjZSggYWxyZWFkeV9BZGRSZWZlZDxUPiYsIG5zcmVzdWx0
KiApCiAgewoKCgogIH0KIyAzODIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5o
IgpjbGFzcyBuc0NPTVB0cl9iYXNlCiMgMzk1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnND
T01QdHIuaCIKICB7CiAgICBwdWJsaWM6CgogICAgICBuc0NPTVB0cl9iYXNlKCBuc0lTdXBwb3J0
cyogcmF3UHRyID0gMCApCiAgICAgICAgICA6IG1SYXdQdHIocmF3UHRyKQogICAgICAgIHsKCiAg
ICAgICAgfQoKCiAgICAgICAgICAgICAgICB+bnNDT01QdHJfYmFzZSgpOwoKCgoKCgogICAgICAg
ICAgICAgICAgdm9pZCBhc3NpZ25fd2l0aF9BZGRSZWYoIG5zSVN1cHBvcnRzKiApOwogICAgICAg
ICAgICAgICAgdm9pZCBhc3NpZ25fZnJvbV9oZWxwZXIoIGNvbnN0IG5zQ09NUHRyX2hlbHBlciYs
IGNvbnN0IG5zSUlEJiApOwogICAgICAgICAgICAgICAgdm9pZCoqIGJlZ2luX2Fzc2lnbm1lbnQo
KTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIG5zSVN1cHBvcnRzKiBtUmF3UHRyOwoKICAgICAgdm9p
ZAogICAgICBhc3NpZ25fYXNzdW1pbmdfQWRkUmVmKCBuc0lTdXBwb3J0cyogbmV3UHRyICkKICAg
ICAgICB7CiMgNDMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKICAgICAg
ICAgIG5zSVN1cHBvcnRzKiBvbGRQdHIgPSBtUmF3UHRyOwogICAgICAgICAgbVJhd1B0ciA9IG5l
d1B0cjsKICAgICAgICAgIDs7CiAgICAgICAgICBpZiAoIG9sZFB0ciApCiAgICAgICAgICAgIChv
bGRQdHIpLT5SZWxlYXNlKCk7CiAgICAgICAgfQogIH07CgoKCnRlbXBsYXRlIDxjbGFzcyBUPgpj
bGFzcyBuc0NPTVB0cgoKICAgIDogcHJpdmF0ZSBuc0NPTVB0cl9iYXNlCgogIHsKICAgIGVudW0g
eyBfZm9yY2VfZXZlbl9jb21wbGlhbnRfY29tcGlsZXJzX3RvX2ZhaWxfID0gc2l6ZW9mKFQpIH07
CiMgNDgyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKICAgIHB1YmxpYzoK
ICAgICAgdHlwZWRlZiBUIGVsZW1lbnRfdHlwZTsKIyA1MTIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0NPTVB0ci5oIgogICAgICBuc0NPTVB0cigpCiAgICAgICAgICAgIDogbnNDT01QdHJf
YmFzZSgwKQoKICAgICAgICB7CiAgICAgICAgICA7OwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRy
KCBjb25zdCBuc0NPTVB0cjxUPiYgYVNtYXJ0UHRyICkKICAgICAgICAgICAgOiBuc0NPTVB0cl9i
YXNlKGFTbWFydFB0ci5tUmF3UHRyKQoKICAgICAgICB7CiAgICAgICAgICBpZiAoIG1SYXdQdHIg
KQogICAgICAgICAgICAobVJhd1B0ciktPkFkZFJlZigpOwogICAgICAgICAgOzsKICAgICAgICB9
CgogICAgICBuc0NPTVB0ciggVCogYVJhd1B0ciApCiAgICAgICAgICAgIDogbnNDT01QdHJfYmFz
ZShhUmF3UHRyKQoKICAgICAgICB7CiAgICAgICAgICBpZiAoIG1SYXdQdHIgKQogICAgICAgICAg
ICAobVJhd1B0ciktPkFkZFJlZigpOwogICAgICAgICAgOzsKICAgICAgICAgIDs7CiAgICAgICAg
fQoKICAgICAgbnNDT01QdHIoIGNvbnN0IGFscmVhZHlfQWRkUmVmZWQ8VD4mIGFTbWFydFB0ciAp
CiAgICAgICAgICAgIDogbnNDT01QdHJfYmFzZShhU21hcnRQdHIubVJhd1B0cikKCiAgICAgICAg
ewogICAgICAgICAgOzsKICAgICAgICAgIDs7CiAgICAgICAgfQoKICAgICAgbnNDT01QdHIoIGNv
bnN0IG5zQ09NUHRyX2hlbHBlciYgaGVscGVyICkKICAgICAgICAgICAgOiBuc0NPTVB0cl9iYXNl
KDApCgoKICAgICAgICB7CiAgICAgICAgICA7OwogICAgICAgICAgYXNzaWduX2Zyb21faGVscGVy
KGhlbHBlciwgbnNDT01UeXBlSW5mbzxUPjo6R2V0SUlEKCkpOwogICAgICAgICAgOzsKICAgICAg
ICB9CiMgNTcxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKICAgICAgbnND
T01QdHI8VD4mCiAgICAgIG9wZXJhdG9yPSggY29uc3QgbnNDT01QdHI8VD4mIHJocyApCgogICAg
ICAgIHsKICAgICAgICAgIGFzc2lnbl93aXRoX0FkZFJlZihyaHMubVJhd1B0cik7CiAgICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgICAgbnNDT01QdHI8VD4mCiAgICAgIG9wZXJh
dG9yPSggVCogcmhzICkKCiAgICAgICAgewogICAgICAgICAgYXNzaWduX3dpdGhfQWRkUmVmKHJo
cyk7CiAgICAgICAgICA7OwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAg
IG5zQ09NUHRyPFQ+JgogICAgICBvcGVyYXRvcj0oIGNvbnN0IGFscmVhZHlfQWRkUmVmZWQ8VD4m
IHJocyApCgogICAgICAgIHsKICAgICAgICAgIGFzc2lnbl9hc3N1bWluZ19BZGRSZWYocmhzLm1S
YXdQdHIpOwogICAgICAgICAgOzsKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9Cgog
ICAgICBuc0NPTVB0cjxUPiYKICAgICAgb3BlcmF0b3I9KCBjb25zdCBuc0NPTVB0cl9oZWxwZXIm
IHJocyApCgoKICAgICAgICB7CiAgICAgICAgICBhc3NpZ25fZnJvbV9oZWxwZXIocmhzLCBuc0NP
TVR5cGVJbmZvPFQ+OjpHZXRJSUQoKSk7CiAgICAgICAgICA7OwogICAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgICAgIH0KIyA2MjIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5o
IgogICAgICBuc0Rlcml2ZWRTYWZlPFQ+KgogICAgICBnZXQoKSBjb25zdAoKCgoKCgogICAgICAg
IHsKICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBuc0Rlcml2ZWRTYWZlPFQ+KiA+
KG1SYXdQdHIpOwogICAgICAgIH0KCiAgICAgIG9wZXJhdG9yIG5zRGVyaXZlZFNhZmU8VD4qKCkg
Y29uc3QKCgoKCgoKCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIGdldCgpOwogICAgICAgIH0K
CiAgICAgIG5zRGVyaXZlZFNhZmU8VD4qCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAogICAgICAg
IHsKICAgICAgICAgIHt9OwogICAgICAgICAgcmV0dXJuIGdldCgpOwogICAgICAgIH0KIyA2NjYg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogICAgICBuc0NPTVB0cjxUPioK
ICAgICAgZ2V0X2FkZHJlc3MoKQoKCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHRoaXM7CiAg
ICAgICAgfQoKICAgICAgY29uc3QgbnNDT01QdHI8VD4qCiAgICAgIGdldF9hZGRyZXNzKCkgY29u
c3QKCgogICAgICAgIHsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCgoKCgoKICAg
IHByaXZhdGU6CiAgICAgIGNvbnN0IG5zQ09NUHRyPFQ+KgogICAgICBvcGVyYXRvciYoKSBjb25z
dAoKCgoKCgogICAgICAgIHsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCiAgICAg
IG5zQ09NUHRyPFQ+KgogICAgICBvcGVyYXRvciYoKQoKCgogICAgICAgIHsKICAgICAgICAgIHJl
dHVybiB0aGlzOwogICAgICAgIH0KCiAgICBwdWJsaWM6CiAgICAgIG5zRGVyaXZlZFNhZmU8VD4m
CiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgICAgewogICAgICAgICAge307CiAgICAgICAg
ICByZXR1cm4gKmdldCgpOwogICAgICAgIH0KCgoKCgoKICAgICAgVCoqCiAgICAgIFN0YXJ0QXNz
aWdubWVudCgpCiAgICAgICAgewoKICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBU
KiogPihiZWdpbl9hc3NpZ25tZW50KCkpOwoKCgoKICAgICAgICB9CiAgfTsKIyA3NDUgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgp0ZW1wbGF0ZSA8PgpjbGFzcyBuc0NPTVB0
cjxuc0lTdXBwb3J0cz4KICAgIDogcHJpdmF0ZSBuc0NPTVB0cl9iYXNlCiAgewogICAgcHVibGlj
OgogICAgICB0eXBlZGVmIG5zSVN1cHBvcnRzIGVsZW1lbnRfdHlwZTsKIyA3NjMgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogICAgICBuc0NPTVB0cigpCiAgICAgICAgICAg
IDogbnNDT01QdHJfYmFzZSgwKQoKICAgICAgICB7CiAgICAgICAgICA7OwogICAgICAgIH0KCiAg
ICAgIG5zQ09NUHRyKCBjb25zdCBuc0NPTVB0cjxuc0lTdXBwb3J0cz4mIGFTbWFydFB0ciApCiAg
ICAgICAgICAgIDogbnNDT01QdHJfYmFzZShhU21hcnRQdHIubVJhd1B0cikKCiAgICAgICAgewog
ICAgICAgICAgaWYgKCBtUmF3UHRyICkKICAgICAgICAgICAgKG1SYXdQdHIpLT5BZGRSZWYoKTsK
ICAgICAgICAgIDs7CiAgICAgICAgfQoKICAgICAgbnNDT01QdHIoIG5zSVN1cHBvcnRzKiBhUmF3
UHRyICkKICAgICAgICAgICAgOiBuc0NPTVB0cl9iYXNlKGFSYXdQdHIpCgogICAgICAgIHsKICAg
ICAgICAgIGlmICggbVJhd1B0ciApCiAgICAgICAgICAgIChtUmF3UHRyKS0+QWRkUmVmKCk7CiAg
ICAgICAgICA7OwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyKCBjb25zdCBhbHJlYWR5X0FkZFJl
ZmVkPG5zSVN1cHBvcnRzPiYgYVNtYXJ0UHRyICkKICAgICAgICAgICAgOiBuc0NPTVB0cl9iYXNl
KGFTbWFydFB0ci5tUmF3UHRyKQoKICAgICAgICB7CiAgICAgICAgICA7OwogICAgICAgIH0KCiAg
ICAgIG5zQ09NUHRyKCBjb25zdCBuc0NPTVB0cl9oZWxwZXImIGhlbHBlciApCiAgICAgICAgICAg
IDogbnNDT01QdHJfYmFzZSgwKQoKCiAgICAgICAgewogICAgICAgICAgOzsKICAgICAgICAgIGFz
c2lnbl9mcm9tX2hlbHBlcihoZWxwZXIsIG5zQ09NVHlwZUluZm88bnNJU3VwcG9ydHM+OjpHZXRJ
SUQoKSk7CiAgICAgICAgfQoKCgoKICAgICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+JgogICAgICBv
cGVyYXRvcj0oIGNvbnN0IG5zQ09NUHRyPG5zSVN1cHBvcnRzPiYgcmhzICkKCiAgICAgICAgewog
ICAgICAgICAgYXNzaWduX3dpdGhfQWRkUmVmKHJocy5tUmF3UHRyKTsKICAgICAgICAgIHJldHVy
biAqdGhpczsKICAgICAgICB9CgogICAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4mCiAgICAgIG9w
ZXJhdG9yPSggbnNJU3VwcG9ydHMqIHJocyApCgogICAgICAgIHsKICAgICAgICAgIGFzc2lnbl93
aXRoX0FkZFJlZihyaHMpOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAg
IG5zQ09NUHRyPG5zSVN1cHBvcnRzPiYKICAgICAgb3BlcmF0b3I9KCBjb25zdCBhbHJlYWR5X0Fk
ZFJlZmVkPG5zSVN1cHBvcnRzPiYgcmhzICkKCiAgICAgICAgewogICAgICAgICAgYXNzaWduX2Fz
c3VtaW5nX0FkZFJlZihyaHMubVJhd1B0cik7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg
ICAgfQoKICAgICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+JgogICAgICBvcGVyYXRvcj0oIGNvbnN0
IG5zQ09NUHRyX2hlbHBlciYgcmhzICkKCgogICAgICAgIHsKICAgICAgICAgIGFzc2lnbl9mcm9t
X2hlbHBlcihyaHMsIG5zQ09NVHlwZUluZm88bnNJU3VwcG9ydHM+OjpHZXRJSUQoKSk7CiAgICAg
ICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKCgoKICAgICAgbnNEZXJpdmVkU2FmZTxuc0lT
dXBwb3J0cz4qCiAgICAgIGdldCgpIGNvbnN0CgoKCgoKCiAgICAgICAgewogICAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IG5zRGVyaXZlZFNhZmU8bnNJU3VwcG9ydHM+KiA+KG1SYXdQ
dHIpOwogICAgICAgIH0KCiAgICAgIG9wZXJhdG9yIG5zRGVyaXZlZFNhZmU8bnNJU3VwcG9ydHM+
KigpIGNvbnN0CgoKCgoKCgogICAgICAgIHsKICAgICAgICAgIHJldHVybiBnZXQoKTsKICAgICAg
ICB9CgogICAgICBuc0Rlcml2ZWRTYWZlPG5zSVN1cHBvcnRzPioKICAgICAgb3BlcmF0b3ItPigp
IGNvbnN0CiAgICAgICAgewogICAgICAgICAge307CiAgICAgICAgICByZXR1cm4gZ2V0KCk7CiAg
ICAgICAgfQojIDg4NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgICAg
IG5zQ09NUHRyPG5zSVN1cHBvcnRzPioKICAgICAgZ2V0X2FkZHJlc3MoKQoKCiAgICAgICAgewog
ICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAgY29uc3QgbnNDT01QdHI8bnNJ
U3VwcG9ydHM+KgogICAgICBnZXRfYWRkcmVzcygpIGNvbnN0CgoKICAgICAgICB7CiAgICAgICAg
ICByZXR1cm4gdGhpczsKICAgICAgICB9CgoKCgoKCiAgICBwcml2YXRlOgogICAgICBjb25zdCBu
c0NPTVB0cjxuc0lTdXBwb3J0cz4qCiAgICAgIG9wZXJhdG9yJigpIGNvbnN0CgoKCgoKCiAgICAg
ICAgewogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAgbnNDT01QdHI8bnNJ
U3VwcG9ydHM+KgogICAgICBvcGVyYXRvciYoKQoKCgogICAgICAgIHsKICAgICAgICAgIHJldHVy
biB0aGlzOwogICAgICAgIH0KCiAgICBwdWJsaWM6CgogICAgICBuc0Rlcml2ZWRTYWZlPG5zSVN1
cHBvcnRzPiYKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICB7fTsK
ICAgICAgICAgIHJldHVybiAqZ2V0KCk7CiAgICAgICAgfQoKCgoKCgogICAgICBuc0lTdXBwb3J0
cyoqCiAgICAgIFN0YXJ0QXNzaWdubWVudCgpCiAgICAgICAgewoKICAgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PCBuc0lTdXBwb3J0cyoqID4oYmVnaW5fYXNzaWdubWVudCgpKTsKCgoK
CiAgICAgICAgfQogIH07CiMgOTk5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIu
aCIKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpuc0NPTVB0cjxUPioKYWRkcmVzc19vZiggbnND
T01QdHI8VD4mIGFQdHIgKQogIHsKICAgIHJldHVybiBhUHRyLmdldF9hZGRyZXNzKCk7CiAgfQoK
dGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpjb25zdCBuc0NPTVB0cjxUPioKYWRkcmVzc19vZigg
Y29uc3QgbnNDT01QdHI8VD4mIGFQdHIgKQogIHsKICAgIHJldHVybiBhUHRyLmdldF9hZGRyZXNz
KCk7CiAgfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgbnNHZXR0ZXJBZGRSZWZzCiMgMTAz
NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgewogICAgcHVibGljOgog
ICAgICBleHBsaWNpdAogICAgICBuc0dldHRlckFkZFJlZnMoIG5zQ09NUHRyPFQ+JiBhU21hcnRQ
dHIgKQogICAgICAgICAgOiBtVGFyZ2V0U21hcnRQdHIoYVNtYXJ0UHRyKQogICAgICAgIHsKCiAg
ICAgICAgfQojIDEwNTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogICAg
ICBvcGVyYXRvciB2b2lkKiooKQogICAgICAgIHsKICAgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PCB2b2lkKiogPihtVGFyZ2V0U21hcnRQdHIuU3RhcnRBc3NpZ25tZW50KCkpOwogICAg
ICAgIH0KCiAgICAgIG9wZXJhdG9yIG5zSVN1cHBvcnRzKiooKQogICAgICAgIHsKICAgICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PCBuc0lTdXBwb3J0cyoqID4obVRhcmdldFNtYXJ0UHRy
LlN0YXJ0QXNzaWdubWVudCgpKTsKICAgICAgICB9CgogICAgICBvcGVyYXRvciBUKiooKQogICAg
ICAgIHsKICAgICAgICAgIHJldHVybiBtVGFyZ2V0U21hcnRQdHIuU3RhcnRBc3NpZ25tZW50KCk7
CiAgICAgICAgfQoKICAgICAgVComCiAgICAgIG9wZXJhdG9yKigpCiAgICAgICAgewogICAgICAg
ICAgcmV0dXJuICoobVRhcmdldFNtYXJ0UHRyLlN0YXJ0QXNzaWdubWVudCgpKTsKICAgICAgICB9
CgogICAgcHJpdmF0ZToKICAgICAgbnNDT01QdHI8VD4mIG1UYXJnZXRTbWFydFB0cjsKICB9OwoK
CnRlbXBsYXRlIDw+CmNsYXNzIG5zR2V0dGVyQWRkUmVmczxuc0lTdXBwb3J0cz4KICB7CiAgICBw
dWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIG5zR2V0dGVyQWRkUmVmcyggbnNDT01QdHI8bnNJ
U3VwcG9ydHM+JiBhU21hcnRQdHIgKQogICAgICAgICAgOiBtVGFyZ2V0U21hcnRQdHIoYVNtYXJ0
UHRyKQogICAgICAgIHsKCiAgICAgICAgfQojIDExMDIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0NPTVB0ci5oIgogICAgICBvcGVyYXRvciB2b2lkKiooKQogICAgICAgIHsKICAgICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PCB2b2lkKiogPihtVGFyZ2V0U21hcnRQdHIuU3RhcnRB
c3NpZ25tZW50KCkpOwogICAgICAgIH0KCiAgICAgIG9wZXJhdG9yIG5zSVN1cHBvcnRzKiooKQog
ICAgICAgIHsKICAgICAgICAgIHJldHVybiBtVGFyZ2V0U21hcnRQdHIuU3RhcnRBc3NpZ25tZW50
KCk7CiAgICAgICAgfQoKICAgICAgbnNJU3VwcG9ydHMqJgogICAgICBvcGVyYXRvciooKQogICAg
ICAgIHsKICAgICAgICAgIHJldHVybiAqKG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2lnbm1lbnQo
KSk7CiAgICAgICAgfQoKICAgIHByaXZhdGU6CiAgICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiYg
bVRhcmdldFNtYXJ0UHRyOwogIH07CgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpuc0dldHRl
ckFkZFJlZnM8VD4KZ2V0dGVyX0FkZFJlZnMoIG5zQ09NUHRyPFQ+JiBhU21hcnRQdHIgKQoKCgoK
ICB7CiAgICByZXR1cm4gbnNHZXR0ZXJBZGRSZWZzPFQ+KGFTbWFydFB0cik7CiAgfQoKCgoKCnRl
bXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxpbmUKTlNDQVBfQk9PTApvcGVyYXRvcj09KCBj
b25zdCBuc0NPTVB0cjxUPiYgbGhzLCBjb25zdCBuc0NPTVB0cjxVPiYgcmhzICkKICB7CiAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzLmdldCgpKSA9PSBzdGF0aWNfY2Fz
dDwgY29uc3Qgdm9pZCogPihyaHMuZ2V0KCkpOwogIH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xh
c3MgVT4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3IhPSggY29uc3QgbnNDT01QdHI8VD4mIGxo
cywgY29uc3QgbnNDT01QdHI8VT4mIHJocyApCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PCBj
b25zdCB2b2lkKiA+KGxocy5nZXQoKSkgIT0gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4ocmhz
LmdldCgpKTsKICB9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KaW5saW5lCk5TQ0FQ
X0JPT0wKb3BlcmF0b3I9PSggY29uc3QgbnNDT01QdHI8VD4mIGxocywgY29uc3QgVSogcmhzICkK
ICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzLmdldCgpKSA9PSBz
dGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBULCBj
bGFzcyBVPgppbmxpbmUKTlNDQVBfQk9PTApvcGVyYXRvcj09KCBjb25zdCBVKiBsaHMsIGNvbnN0
IG5zQ09NUHRyPFQ+JiByaHMgKQogIHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDwgY29uc3Qgdm9p
ZCogPihsaHMpID09IHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQoK
dGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yIT0o
IGNvbnN0IG5zQ09NUHRyPFQ+JiBsaHMsIGNvbnN0IFUqIHJocyApCiAgewogICAgcmV0dXJuIHN0
YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KGxocy5nZXQoKSkgIT0gc3RhdGljX2Nhc3Q8IGNvbnN0
IHZvaWQqID4ocmhzKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KaW5saW5lCk5T
Q0FQX0JPT0wKb3BlcmF0b3IhPSggY29uc3QgVSogbGhzLCBjb25zdCBuc0NPTVB0cjxUPiYgcmhz
ICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzKSAhPSBzdGF0
aWNfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMuZ2V0KCkpOwogIH0KIyAxMjA2ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+Cmlu
bGluZQpOU0NBUF9CT09MCm9wZXJhdG9yPT0oIGNvbnN0IG5zQ09NUHRyPFQ+JiBsaHMsIFUqIHJo
cyApCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KGxocy5nZXQoKSkg
PT0gc3RhdGljX2Nhc3Q8IHZvaWQqID4ocmhzKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xh
c3MgVT4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3I9PSggVSogbGhzLCBjb25zdCBuc0NPTVB0
cjxUPiYgcmhzICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IHZvaWQqID4obGhzKSA9PSBz
dGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMuZ2V0KCkpOwogIH0KCnRlbXBsYXRlIDxjbGFz
cyBULCBjbGFzcyBVPgppbmxpbmUKTlNDQVBfQk9PTApvcGVyYXRvciE9KCBjb25zdCBuc0NPTVB0
cjxUPiYgbGhzLCBVKiByaHMgKQogIHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDwgY29uc3Qgdm9p
ZCogPihsaHMuZ2V0KCkpICE9IHN0YXRpY19jYXN0PCB2b2lkKiA+KHJocyk7CiAgfQoKdGVtcGxh
dGUgPGNsYXNzIFQsIGNsYXNzIFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yIT0oIFUqIGxo
cywgY29uc3QgbnNDT01QdHI8VD4mIHJocyApCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PCB2
b2lkKiA+KGxocykgIT0gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4ocmhzLmdldCgpKTsKICB9
CgoKCgoKCmNsYXNzIE5TQ0FQX1plcm87Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCk5TQ0FQ
X0JPT0wKb3BlcmF0b3I9PSggY29uc3QgbnNDT01QdHI8VD4mIGxocywgTlNDQVBfWmVybyogcmhz
ICkKCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KGxocy5nZXQoKSkg
PT0gcmVpbnRlcnByZXRfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMpOwogIH0KCnRlbXBsYXRlIDxj
bGFzcyBUPgppbmxpbmUKTlNDQVBfQk9PTApvcGVyYXRvcj09KCBOU0NBUF9aZXJvKiBsaHMsIGNv
bnN0IG5zQ09NUHRyPFQ+JiByaHMgKQoKICB7CiAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwg
Y29uc3Qgdm9pZCogPihsaHMpID09IHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KHJocy5nZXQo
KSk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yIT0o
IGNvbnN0IG5zQ09NUHRyPFQ+JiBsaHMsIE5TQ0FQX1plcm8qIHJocyApCgogIHsKICAgIHJldHVy
biBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMuZ2V0KCkpICE9IHJlaW50ZXJwcmV0X2Nh
c3Q8IGNvbnN0IHZvaWQqID4ocmhzKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCk5T
Q0FQX0JPT0wKb3BlcmF0b3IhPSggTlNDQVBfWmVybyogbGhzLCBjb25zdCBuc0NPTVB0cjxUPiYg
cmhzICkKCiAgewogICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhz
KSAhPSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMuZ2V0KCkpOwogIH0KIyAxMzA5ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKaW5saW5lCk5TQ0FQX0JPT0wKU2Ft
ZUNPTUlkZW50aXR5KCBuc0lTdXBwb3J0cyogbGhzLCBuc0lTdXBwb3J0cyogcmhzICkKICB7CiAg
ICByZXR1cm4gbnNDT01QdHI8bnNJU3VwcG9ydHM+KCBkb19RdWVyeUludGVyZmFjZShsaHMpICkg
PT0gbnNDT01QdHI8bnNJU3VwcG9ydHM+KCBkb19RdWVyeUludGVyZmFjZShyaHMpICk7CiAgfQoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgU291cmNlVHlwZSwgY2xhc3MgRGVzdGluYXRpb25UeXBlPgppbmxp
bmUKbnNyZXN1bHQKQ2FsbFF1ZXJ5SW50ZXJmYWNlKCBuc0NPTVB0cjxTb3VyY2VUeXBlPiYgYVNv
dXJjZVB0ciwgRGVzdGluYXRpb25UeXBlKiogYURlc3RQdHIgKQogIHsKICAgIHJldHVybiBDYWxs
UXVlcnlJbnRlcmZhY2UoYVNvdXJjZVB0ci5nZXQoKSwgYURlc3RQdHIpOwogIH0KIyAyNCAibnNU
ZXh0VHJhbnNmb3JtZXIuY3BwIiAyCiMgMSAibnNUZXh0VHJhbnNmb3JtZXIuaCIgMQojIDI1ICJu
c1RleHRUcmFuc2Zvcm1lci5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1RleHRG
cmFnbWVudC5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1RleHRGcmFnbWVu
dC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2xheW91dC5oIiAxCiMgMjUgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2xheW91dC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc2NvcmUuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNsYXlv
dXQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMg
MjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2xheW91dC5oIiAyCiMgMSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zVHJhY2VSZWZjbnQuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNsYXlvdXQuaCIgMgojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNU
ZXh0RnJhZ21lbnQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FXcml0YWJs
ZVN0cmluZy5oIiAxCiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FXcml0YWJsZVN0
cmluZy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FSZWFkYWJsZVN0cmluZy5o
IiAxCiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FSZWFkYWJsZVN0cmluZy5oIgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIgMQojIDI4ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNBU3RyaW5nLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zU3RyaW5nRndkLmgiIDEKIyAzNCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3Ry
aW5nRndkLmgiCmNsYXNzIG5zQVN0cmluZzsKY2xhc3MgbnNBQ1N0cmluZzsKCgoKCgoKY2xhc3Mg
bnNBUHJvbWlzZVN0cmluZzsKY2xhc3MgbnNBUHJvbWlzZUNTdHJpbmc7CgoKCgoKCmNsYXNzIG5z
QUZsYXRTdHJpbmc7CmNsYXNzIG5zQUZsYXRDU3RyaW5nOwoKCgoKCgpjbGFzcyBuc0RlcGVuZGVu
dFN0cmluZzsKY2xhc3MgbnNEZXBlbmRlbnRDU3RyaW5nOwojIDI5ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNBU3RyaW5nLmgiIDIKCgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNQcml2YXRlU2hhcmFibGVTdHJpbmcuaCIgMQojIDI5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNQcml2YXRlU2hhcmFibGVTdHJpbmcuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNCdWZmZXJIYW5kbGUuaCIgMQojIDMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNC
dWZmZXJIYW5kbGUuaCIKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgt
Z251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zQnVmZmVySGFuZGxlLmgiIDIKCgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAzNCAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zQnVmZmVySGFuZGxlLmgiIDIKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0RlYnVnLmgiIDEKIyAzNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVmZmVy
SGFuZGxlLmgiIDIKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQoj
IDQwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNCdWZmZXJIYW5kbGUuaCIgMgojIDgwICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNCdWZmZXJIYW5kbGUuaCIKdGVtcGxhdGUgPGNsYXNz
IENoYXJUPgpjbGFzcyBuc0J1ZmZlckhhbmRsZQogIHsKICAgIHB1YmxpYzoKICAgICAgbnNCdWZm
ZXJIYW5kbGUoKSB7IH0KICAgICAgbnNCdWZmZXJIYW5kbGUoIENoYXJUKiBhRGF0YVN0YXJ0LCBD
aGFyVCogYURhdGFFbmQgKSA6IG1EYXRhU3RhcnQoYURhdGFTdGFydCksIG1EYXRhRW5kKGFEYXRh
RW5kKSB7IH0KCiAgICAgIHZvaWQgRGF0YVN0YXJ0KCBDaGFyVCogYU5ld0RhdGFTdGFydCApIHsg
bURhdGFTdGFydCA9IGFOZXdEYXRhU3RhcnQ7IH0KICAgICAgQ2hhclQqIERhdGFTdGFydCgpIHsg
cmV0dXJuIG1EYXRhU3RhcnQ7IH0KICAgICAgY29uc3QgQ2hhclQqIERhdGFTdGFydCgpIGNvbnN0
IHsgcmV0dXJuIG1EYXRhU3RhcnQ7IH0KCiAgICAgIHZvaWQgRGF0YUVuZCggQ2hhclQqIGFOZXdE
YXRhRW5kICkgeyBtRGF0YUVuZCA9IGFOZXdEYXRhRW5kOyB9CiAgICAgIENoYXJUKiBEYXRhRW5k
KCkgeyByZXR1cm4gbURhdGFFbmQ7IH0KICAgICAgY29uc3QgQ2hhclQqIERhdGFFbmQoKSBjb25z
dCB7IHJldHVybiBtRGF0YUVuZDsgfQoKICAgICAgcHRyZGlmZl90IERhdGFMZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtRGF0YUVuZCAtIG1EYXRhU3RhcnQ7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAg
IENoYXJUKiBtRGF0YVN0YXJ0OwogICAgICBDaGFyVCogbURhdGFFbmQ7CiAgfTsKCnRlbXBsYXRl
IDxjbGFzcyBDaGFyVD4KY2xhc3MgbnNDb25zdEJ1ZmZlckhhbmRsZQogIHsKICAgIHB1YmxpYzoK
ICAgICAgbnNDb25zdEJ1ZmZlckhhbmRsZSgpIHsgfQogICAgICBuc0NvbnN0QnVmZmVySGFuZGxl
KCBjb25zdCBDaGFyVCogYURhdGFTdGFydCwgY29uc3QgQ2hhclQqIGFEYXRhRW5kICkgOiBtRGF0
YVN0YXJ0KGFEYXRhU3RhcnQpLCBtRGF0YUVuZChhRGF0YUVuZCkgeyB9CgogICAgICB2b2lkIERh
dGFTdGFydCggY29uc3QgQ2hhclQqIGFOZXdEYXRhU3RhcnQgKSB7IG1EYXRhU3RhcnQgPSBhTmV3
RGF0YVN0YXJ0OyB9CiAgICAgIGNvbnN0IENoYXJUKiBEYXRhU3RhcnQoKSBjb25zdCB7IHJldHVy
biBtRGF0YVN0YXJ0OyB9CgogICAgICB2b2lkIERhdGFFbmQoIGNvbnN0IENoYXJUKiBhTmV3RGF0
YUVuZCApIHsgbURhdGFFbmQgPSBhTmV3RGF0YUVuZDsgfQogICAgICBjb25zdCBDaGFyVCogRGF0
YUVuZCgpIGNvbnN0IHsgcmV0dXJuIG1EYXRhRW5kOyB9CgogICAgICBwdHJkaWZmX3QgRGF0YUxl
bmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1EYXRhRW5kIC0gbURhdGFTdGFydDsgfQoKICAgIHByb3Rl
Y3RlZDoKICAgICAgY29uc3QgQ2hhclQqIG1EYXRhU3RhcnQ7CiAgICAgIGNvbnN0IENoYXJUKiBt
RGF0YUVuZDsKICB9OwoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpjbGFzcyBuc1N0cmlu
Z0FsbG9jYXRvcgogIHsKICAgIHB1YmxpYzoKCiAgICAgIHZpcnR1YWwgdm9pZCBEZWFsbG9jYXRl
KCBDaGFyVCogKSBjb25zdCA9IDA7CiAgfTsKCgoKCiAgICAgICBuc1N0cmluZ0FsbG9jYXRvcjxj
aGFyPiYgU3RyaW5nQWxsb2NhdG9yX2NoYXIoKTsKICAgICAgIG5zU3RyaW5nQWxsb2NhdG9yPFBS
VW5pY2hhcj4mIFN0cmluZ0FsbG9jYXRvcl93Y2hhcl90KCk7CgoKCgoKdGVtcGxhdGUgPGNsYXNz
IFQ+CnN0cnVjdCBuc1N0cmluZ0FsbG9jYXRvclRyYWl0cwogIHsKICB9OwoKdGVtcGxhdGUgPD4K
c3RydWN0IG5zU3RyaW5nQWxsb2NhdG9yVHJhaXRzPGNoYXI+CiAgewogICAgc3RhdGljIG5zU3Ry
aW5nQWxsb2NhdG9yPGNoYXI+JiBnbG9iYWxfc3RyaW5nX2FsbG9jYXRvcigpIHsgcmV0dXJuIFN0
cmluZ0FsbG9jYXRvcl9jaGFyKCk7IH0KICB9OwoKdGVtcGxhdGUgPD4Kc3RydWN0IG5zU3RyaW5n
QWxsb2NhdG9yVHJhaXRzPFBSVW5pY2hhcj4KICB7CiAgICBzdGF0aWMgbnNTdHJpbmdBbGxvY2F0
b3I8UFJVbmljaGFyPiYgZ2xvYmFsX3N0cmluZ19hbGxvY2F0b3IoKSB7IHJldHVybiBTdHJpbmdB
bGxvY2F0b3Jfd2NoYXJfdCgpOyB9CiAgfTsKIyAxNzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0J1ZmZlckhhbmRsZS5oIgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zU2hhcmVk
QnVmZmVySGFuZGxlCiAgICA6IHB1YmxpYyBuc0J1ZmZlckhhbmRsZTxDaGFyVD4KICB7CiAgICBw
cm90ZWN0ZWQ6CiAgICAgIGVudW0KICAgICAgICB7CiAgICAgICAgICBrSXNTaGFyZWQgPSAweDA4
MDAwMDAwLAogICAgICAgICAga0lzU2luZ2xlQWxsb2NhdGlvbldpdGhCdWZmZXIgPSAweDA0MDAw
MDAwLAogICAgICAgICAga0lzU3RvcmFnZURlZmluZWRTZXBhcmF0ZWx5ID0gMHgwMjAwMDAwMCwK
ICAgICAgICAgIGtJc1VzZXJBbGxvY2F0b3IgPSAweDAxMDAwMDAwLAoKCiAgICAgICAgICBrSXNO
VUxMID0gMHg4MDAwMDAwMCwKICAgICAgICAgIGtJbXBsZW1lbnRhdGlvbkZsYWdzTWFzayA9IDB4
RjAwMDAwMDAsCgogICAgICAgICAga0ZsYWdzTWFzayA9IDB4RkYwMDAwMDAsCiAgICAgICAgICBr
UmVmQ291bnRNYXNrID0gMHgwMEZGRkZGRgogICAgICAgIH07CgogICAgcHVibGljOgogICAgICBu
c1NoYXJlZEJ1ZmZlckhhbmRsZSggQ2hhclQqIGFEYXRhU3RhcnQsIENoYXJUKiBhRGF0YUVuZCAp
CiAgICAgICAgICA6IG5zQnVmZmVySGFuZGxlPENoYXJUPihhRGF0YVN0YXJ0LCBhRGF0YUVuZCkK
ICAgICAgICB7CiAgICAgICAgICBtRmxhZ3MgPSBrSXNTaGFyZWQ7CiAgICAgICAgfQoKICAgICAg
bnNTaGFyZWRCdWZmZXJIYW5kbGUoIENoYXJUKiBhRGF0YVN0YXJ0LCBDaGFyVCogYURhdGFFbmQs
IENoYXJUKiwgQ2hhclQqLCBQUkJvb2wgaXNTaW5nbGVBbGxvY2F0aW9uICkKICAgICAgICAgIDog
bnNCdWZmZXJIYW5kbGU8Q2hhclQ+KGFEYXRhU3RhcnQsIGFEYXRhRW5kKQogICAgICAgIHsKICAg
ICAgICAgIG1GbGFncyA9IGtJc1NoYXJlZDsKICAgICAgICAgIGlmICggaXNTaW5nbGVBbGxvY2F0
aW9uICkKICAgICAgICAgICAgbUZsYWdzIHw9IGtJc1NpbmdsZUFsbG9jYXRpb25XaXRoQnVmZmVy
OwogICAgICAgIH0KCiAgICAgIH5uc1NoYXJlZEJ1ZmZlckhhbmRsZSgpOwoKICAgICAgdm9pZAog
ICAgICBBY3F1aXJlUmVmZXJlbmNlKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICBuc1NoYXJl
ZEJ1ZmZlckhhbmRsZTxDaGFyVD4qIG11dGFibGVfdGhpcyA9IGNvbnN0X2Nhc3Q8IG5zU2hhcmVk
QnVmZmVySGFuZGxlPENoYXJUPiogPih0aGlzKTsKICAgICAgICAgIG11dGFibGVfdGhpcy0+c2V0
X3JlZmNvdW50KCBnZXRfcmVmY291bnQoKSsxICk7CiAgICAgICAgfQoKICAgICAgdm9pZAogICAg
ICBSZWxlYXNlUmVmZXJlbmNlKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICBuc1NoYXJlZEJ1
ZmZlckhhbmRsZTxDaGFyVD4qIG11dGFibGVfdGhpcyA9IGNvbnN0X2Nhc3Q8IG5zU2hhcmVkQnVm
ZmVySGFuZGxlPENoYXJUPiogPih0aGlzKTsKICAgICAgICAgIGlmICggIW11dGFibGVfdGhpcy0+
c2V0X3JlZmNvdW50KCBnZXRfcmVmY291bnQoKS0xICkgKQogICAgICAgICAgICBkZWxldGUgbXV0
YWJsZV90aGlzOwoKICAgICAgICB9CgogICAgICBQUkJvb2wKICAgICAgSXNSZWZlcmVuY2VkKCkg
Y29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gZ2V0X3JlZmNvdW50KCkgIT0gMDsKICAg
ICAgICB9CgogICAgICBQUlVpbnQzMgogICAgICBHZXRJbXBsZW1lbnRhdGlvbkZsYWdzKCkgY29u
c3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gbUZsYWdzICYga0ltcGxlbWVudGF0aW9uRmxh
Z3NNYXNrOwogICAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgU2V0SW1wbGVtZW50YXRpb25GbGFn
cyggUFJVaW50MzIgYU5ld0ZsYWdzICkKICAgICAgICB7CiAgICAgICAgICBtRmxhZ3MgPSAobUZs
YWdzICYgfmtJbXBsZW1lbnRhdGlvbkZsYWdzTWFzaykgfCAoYU5ld0ZsYWdzICYga0ltcGxlbWVu
dGF0aW9uRmxhZ3NNYXNrKTsKICAgICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICBQUlVpbnQz
MiBtRmxhZ3M7CgogICAgICBQUlVpbnQzMgogICAgICBnZXRfcmVmY291bnQoKSBjb25zdAogICAg
ICAgIHsKICAgICAgICAgIHJldHVybiBtRmxhZ3MgJiBrUmVmQ291bnRNYXNrOwogICAgICAgIH0K
CiAgICAgIFBSVWludDMyCiAgICAgIHNldF9yZWZjb3VudCggUFJVaW50MzIgYU5ld1JlZkNvdW50
ICkKICAgICAgICB7CiAgICAgICAgICB7fTsKCiAgICAgICAgICBtRmxhZ3MgPSAobUZsYWdzICYg
a0ZsYWdzTWFzaykgfCBhTmV3UmVmQ291bnQ7CiAgICAgICAgICByZXR1cm4gYU5ld1JlZkNvdW50
OwogICAgICAgIH0KCiAgICAgIG5zU3RyaW5nQWxsb2NhdG9yPENoYXJUPiYgZ2V0X2FsbG9jYXRv
cigpIGNvbnN0OwogIH07CgoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpjbGFzcyBuc0ZsZXhCdWZm
ZXJIYW5kbGUKICAgIDogcHVibGljIG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPgogIHsKICAg
IHB1YmxpYzoKICAgICAgbnNGbGV4QnVmZmVySGFuZGxlKCBDaGFyVCogYURhdGFTdGFydCwgQ2hh
clQqIGFEYXRhRW5kLCBDaGFyVCogYVN0b3JhZ2VTdGFydCwgQ2hhclQqIGFTdG9yYWdlRW5kICkK
ICAgICAgICAgIDogbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KGFEYXRhU3RhcnQsIGFEYXRh
RW5kKSwKICAgICAgICAgICAgbVN0b3JhZ2VTdGFydChhU3RvcmFnZVN0YXJ0KSwKICAgICAgICAg
ICAgbVN0b3JhZ2VFbmQoYVN0b3JhZ2VFbmQpCiAgICAgICAgewogICAgICAgICAgdGhpcy0+bUZs
YWdzIHw9IHRoaXMtPmtJc1N0b3JhZ2VEZWZpbmVkU2VwYXJhdGVseTsKICAgICAgICB9CgogICAg
ICB2b2lkIFN0b3JhZ2VTdGFydCggQ2hhclQqIGFOZXdTdG9yYWdlU3RhcnQgKSB7IG1TdG9yYWdl
U3RhcnQgPSBhTmV3U3RvcmFnZVN0YXJ0OyB9CiAgICAgIENoYXJUKiBTdG9yYWdlU3RhcnQoKSB7
IHJldHVybiBtU3RvcmFnZVN0YXJ0OyB9CiAgICAgIGNvbnN0IENoYXJUKiBTdG9yYWdlU3RhcnQo
KSBjb25zdCB7IHJldHVybiBtU3RvcmFnZVN0YXJ0OyB9CgogICAgICB2b2lkIFN0b3JhZ2VFbmQo
IENoYXJUKiBhTmV3U3RvcmFnZUVuZCApIHsgbVN0b3JhZ2VFbmQgPSBhTmV3U3RvcmFnZUVuZDsg
fQogICAgICBDaGFyVCogU3RvcmFnZUVuZCgpIHsgcmV0dXJuIG1TdG9yYWdlRW5kOyB9CiAgICAg
IGNvbnN0IENoYXJUKiBTdG9yYWdlRW5kKCkgY29uc3QgeyByZXR1cm4gbVN0b3JhZ2VFbmQ7IH0K
CiAgICAgIHB0cmRpZmZfdCBTdG9yYWdlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbVN0b3JhZ2VF
bmQgLSBtU3RvcmFnZVN0YXJ0OyB9CgogICAgcHJvdGVjdGVkOgogICAgICBDaGFyVCogbVN0b3Jh
Z2VTdGFydDsKICAgICAgQ2hhclQqIG1TdG9yYWdlRW5kOwogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
Q2hhclQ+CmNsYXNzIG5zU2hhcmVkQnVmZmVySGFuZGxlV2l0aEFsbG9jYXRvcgogICAgOiBwdWJs
aWMgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+CiAgewogICAgcHVibGljOgogICAgICBuc1No
YXJlZEJ1ZmZlckhhbmRsZVdpdGhBbGxvY2F0b3IoIENoYXJUKiBhRGF0YVN0YXJ0LCBDaGFyVCog
YURhdGFFbmQsIG5zU3RyaW5nQWxsb2NhdG9yPENoYXJUPiYgYUFsbG9jYXRvciApCiAgICAgICAg
ICA6IG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPihhRGF0YVN0YXJ0LCBhRGF0YUVuZCksCiAg
ICAgICAgICAgIG1BbGxvY2F0b3IoYUFsbG9jYXRvcikKICAgICAgICB7CiAgICAgICAgICB0aGlz
LT5tRmxhZ3MgfD0gdGhpcy0+a0lzVXNlckFsbG9jYXRvcjsKICAgICAgICB9CgogICAgICBuc1N0
cmluZ0FsbG9jYXRvcjxDaGFyVD4mIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtQWxs
b2NhdG9yOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBuc1N0cmluZ0FsbG9jYXRvcjxDaGFyVD4m
IG1BbGxvY2F0b3I7CiAgfTsKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4KY2xhc3MgbnNGbGV4QnVm
ZmVySGFuZGxlV2l0aEFsbG9jYXRvcgogICAgOiBwdWJsaWMgbnNGbGV4QnVmZmVySGFuZGxlPENo
YXJUPgogIHsKICAgIHB1YmxpYzoKICAgICAgbnNGbGV4QnVmZmVySGFuZGxlV2l0aEFsbG9jYXRv
ciggQ2hhclQqIGFEYXRhU3RhcnQsIENoYXJUKiBhRGF0YUVuZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ2hhclQqIGFTdG9yYWdlU3RhcnQsIENoYXJUKiBhU3RvcmFn
ZUVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNTdHJpbmdBbGxv
Y2F0b3I8Q2hhclQ+JiBhQWxsb2NhdG9yICkKICAgICAgICAgIDogbnNGbGV4QnVmZmVySGFuZGxl
PENoYXJUPihhRGF0YVN0YXJ0LCBhRGF0YUVuZCwgYVN0b3JhZ2VTdGFydCwgYVN0b3JhZ2VFbmQp
LAogICAgICAgICAgICBtQWxsb2NhdG9yKGFBbGxvY2F0b3IpCiAgICAgICAgewogICAgICAgICAg
dGhpcy0+bUZsYWdzIHw9IHRoaXMtPmtJc1VzZXJBbGxvY2F0b3I7CiAgICAgICAgfQoKICAgICAg
bnNTdHJpbmdBbGxvY2F0b3I8Q2hhclQ+JiBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4g
bUFsbG9jYXRvcjsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgbnNTdHJpbmdBbGxvY2F0b3I8Q2hh
clQ+JiBtQWxsb2NhdG9yOwogIH07CgoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpuc1N0cmluZ0Fs
bG9jYXRvcjxDaGFyVD4mCm5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPjo6Z2V0X2FsbG9jYXRv
cigpIGNvbnN0CgogIHsKICAgIGlmICggbUZsYWdzICYga0lzVXNlckFsbG9jYXRvciApCiAgICAg
IHsKICAgICAgICBpZiAoIG1GbGFncyAmIGtJc1N0b3JhZ2VEZWZpbmVkU2VwYXJhdGVseSApCiAg
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgY29uc3QgbnNGbGV4QnVmZmVySGFuZGxl
V2l0aEFsbG9jYXRvcjxDaGFyVD4qID4odGhpcyktPmdldF9hbGxvY2F0b3IoKTsKICAgICAgICBl
bHNlCiAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgY29uc3QgbnNTaGFyZWRCdWZm
ZXJIYW5kbGVXaXRoQWxsb2NhdG9yPENoYXJUPiogPih0aGlzKS0+Z2V0X2FsbG9jYXRvcigpOwog
ICAgICB9CgogICAgcmV0dXJuIG5zU3RyaW5nQWxsb2NhdG9yVHJhaXRzPENoYXJUPjo6Z2xvYmFs
X3N0cmluZ19hbGxvY2F0b3IoKTsKICB9CgoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpuc1NoYXJl
ZEJ1ZmZlckhhbmRsZTxDaGFyVD46On5uc1NoYXJlZEJ1ZmZlckhhbmRsZSgpCgogIHsKICAgIHt9
OwoKICAgIGlmICggIShtRmxhZ3MgJiBrSXNTaW5nbGVBbGxvY2F0aW9uV2l0aEJ1ZmZlcikgKQog
ICAgICB7CiAgICAgICAgQ2hhclQqIHN0cmluZ19zdG9yYWdlID0gdGhpcy0+bURhdGFTdGFydDsK
ICAgICAgICBpZiAoIG1GbGFncyAmIGtJc1N0b3JhZ2VEZWZpbmVkU2VwYXJhdGVseSApCiAgICAg
ICAgICBzdHJpbmdfc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8IG5zRmxleEJ1ZmZlckhhbmRs
ZTxDaGFyVD4qID4odGhpcyktPlN0b3JhZ2VTdGFydCgpOwoKICAgICAgICBnZXRfYWxsb2NhdG9y
KCkuRGVhbGxvY2F0ZShzdHJpbmdfc3RvcmFnZSk7CiAgICAgIH0KICB9CiMgMzAgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc1ByaXZhdGVTaGFyYWJsZVN0cmluZy5oIiAyCiMgNDAgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc1ByaXZhdGVTaGFyYWJsZVN0cmluZy5oIgpjbGFzcyBuc1By
aXZhdGVTaGFyYWJsZVN0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBQUlVuaWNo
YXIgY2hhcl90eXBlOwoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCB+bnNQcml2YXRlU2hhcmFi
bGVTdHJpbmcoKSB7fQoKICAgICAgdmlydHVhbCBQUlVpbnQzMiBHZXRJbXBsZW1lbnRhdGlvbkZs
YWdzKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgY29uc3QgbnNCdWZmZXJIYW5kbGU8Y2hhcl90eXBl
PiogR2V0RmxhdEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgICB2aXJ0dWFsIGNvbnN0IG5zQnVm
ZmVySGFuZGxlPGNoYXJfdHlwZT4qIEdldEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgICB2aXJ0
dWFsIGNvbnN0IG5zU2hhcmVkQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4qIEdldFNoYXJlZEJ1ZmZl
ckhhbmRsZSgpIGNvbnN0OwoKCgoKCgoKICB9OwoKY2xhc3MgbnNQcml2YXRlU2hhcmFibGVDU3Ry
aW5nCiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwoKICAgIHB1
YmxpYzoKICAgICAgdmlydHVhbCB+bnNQcml2YXRlU2hhcmFibGVDU3RyaW5nKCkge30KCiAgICAg
IHZpcnR1YWwgUFJVaW50MzIgR2V0SW1wbGVtZW50YXRpb25GbGFncygpIGNvbnN0OwogICAgICB2
aXJ0dWFsIGNvbnN0IG5zQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4qIEdldEZsYXRCdWZmZXJIYW5k
bGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25zdCBuc0J1ZmZlckhhbmRsZTxjaGFyX3R5cGU+
KiBHZXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25zdCBuc1NoYXJlZEJ1
ZmZlckhhbmRsZTxjaGFyX3R5cGU+KiBHZXRTaGFyZWRCdWZmZXJIYW5kbGUoKSBjb25zdDsKCgoK
CgoKCiAgfTsKIyAzMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5oIiAyCgoK
CiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ2hhclRyYWl0cy5oIiAxCiMgMjcgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NoYXJUcmFpdHMuaCIKIyAxICIvdXNyL2luY2x1ZGUv
Y3R5cGUuaCIgMSAzCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NoYXJUcmFpdHMu
aCIgMgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAzMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zQ2hhclRyYWl0cy5oIiAyCiMgMzkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0NoYXJUcmFpdHMuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJp
bmdJdGVyYXRvclV0aWxzLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3Ry
aW5nSXRlcmF0b3JVdGlscy5oIgp0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3I+CmlubGluZQpQUkJv
b2wKU2FtZUZyYWdtZW50KCBjb25zdCBJdGVyYXRvciYgbGhzLCBjb25zdCBJdGVyYXRvciYgcmhz
ICkKICB7CiAgICByZXR1cm4gbGhzLmZyYWdtZW50KCkubVN0YXJ0ID09IHJocy5mcmFnbWVudCgp
Lm1TdGFydDsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+IGNsYXNzIG5zUmVhZGluZ0l0ZXJh
dG9yOwoKCgoKICAgICAgIHNpemVfdCBEaXN0YW5jZSggY29uc3QgbnNSZWFkaW5nSXRlcmF0b3I8
UFJVbmljaGFyPiYsIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPFBSVW5pY2hhcj4mICk7CiAgICAg
ICBzaXplX3QgRGlzdGFuY2UoIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPGNoYXI+JiwgY29uc3Qg
bnNSZWFkaW5nSXRlcmF0b3I8Y2hhcj4mICk7CiMgNDAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0NoYXJUcmFpdHMuaCIgMgoKCgoKCiAgdHlwZWRlZiBQUkJvb2wgbnNDaGFyVHJhaXRzX2Jv
b2w7CgoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpzdHJ1Y3QgbnNDaGFyVHJhaXRzCiAgewogICAg
dHlwZWRlZiBDaGFyVCBjaGFyX3R5cGU7CiAgICB0eXBlZGVmIGNoYXIgaW5jb21wYXRpYmxlX2No
YXJfdHlwZTsKCiAgICBzdGF0aWMKICAgIHZvaWQKICAgIGFzc2lnbiggY2hhcl90eXBlJiBsaHMs
IGNvbnN0IGNoYXJfdHlwZSYgcmhzICkKICAgICAgewogICAgICAgIGxocyA9IHJoczsKICAgICAg
fQoKCgoKICAgIHR5cGVkZWYgaW50IGludF90eXBlOwoKICAgIHN0YXRpYwogICAgY2hhcl90eXBl
CiAgICB0b19jaGFyX3R5cGUoIGNvbnN0IGludF90eXBlJiBjICkKICAgICAgewogICAgICAgIHJl
dHVybiBjaGFyX3R5cGUoYyk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGludF90eXBlCiAgICB0
b19pbnRfdHlwZSggY29uc3QgY2hhcl90eXBlJiBjICkKICAgICAgewogICAgICAgIHJldHVybiBp
bnRfdHlwZShjKTsKICAgICAgfQoKICAgIHN0YXRpYwogICAgbnNDaGFyVHJhaXRzX2Jvb2wKICAg
IGVxX2ludF90eXBlKCBjb25zdCBpbnRfdHlwZSYgbGhzLCBjb25zdCBpbnRfdHlwZSYgcmhzICkK
ICAgICAgewogICAgICAgIHJldHVybiBsaHMgPT0gcmhzOwogICAgICB9CgoKCgogICAgc3RhdGlj
CiAgICBuc0NoYXJUcmFpdHNfYm9vbAogICAgZXEoIGNvbnN0IGNoYXJfdHlwZSYgbGhzLCBjb25z
dCBjaGFyX3R5cGUmIHJocyApCiAgICAgIHsKICAgICAgICByZXR1cm4gbGhzID09IHJoczsKICAg
ICAgfQoKICAgIHN0YXRpYwogICAgbnNDaGFyVHJhaXRzX2Jvb2wKICAgIGx0KCBjb25zdCBjaGFy
X3R5cGUmIGxocywgY29uc3QgY2hhcl90eXBlJiByaHMgKQogICAgICB7CiAgICAgICAgcmV0dXJu
IGxocyA8IHJoczsKICAgICAgfQoKCgoKICAgIHN0YXRpYwogICAgY2hhcl90eXBlKgogICAgY29w
eSggY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4gKQogICAgICB7
CiAgICAgICAgY2hhcl90eXBlKiByZXN1bHQgPSBzMTsKICAgICAgICB3aGlsZSAoIG4tLSApCiAg
ICAgICAgICBhc3NpZ24oKnMxKyssICpzMisrKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
ICB9CgogICAgc3RhdGljCiAgICBjaGFyX3R5cGUqCiAgICBtb3ZlKCBjaGFyX3R5cGUqIHMxLCBj
b25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbiApCiAgICAgIHsKICAgICAgICBjaGFyX3R5cGUq
IHJlc3VsdCA9IHMxOwoKICAgICAgICBpZiAoIG4gKQogICAgICAgICAgewogICAgICAgICAgICBp
ZiAoIHMyID4gczEgKQogICAgICAgICAgICAgIGNvcHkoczEsIHMyLCBuKTsKICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHMxICs9IG47CiAgICAgICAgICAg
ICAgICBzMiArPSBuOwogICAgICAgICAgICAgICAgd2hpbGUgKCBuLS0gKQogICAgICAgICAgICAg
ICAgICBhc3NpZ24oKi0tczEsICotLXMyKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9Cgog
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNoYXJfdHlwZSoK
ICAgIGFzc2lnbiggY2hhcl90eXBlKiBzLCBzaXplX3QgbiwgY29uc3QgY2hhcl90eXBlJiBjICkK
ICAgICAgewogICAgICAgIGNoYXJfdHlwZSogcmVzdWx0ID0gczsKICAgICAgICB3aGlsZSAoIG4t
LSApCiAgICAgICAgICBhc3NpZ24oKnMrKywgYyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICAgfQoKICAgIHN0YXRpYwogICAgaW50CiAgICBjb21wYXJlKCBjb25zdCBjaGFyX3R5cGUqIHMx
LCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbiApCiAgICAgIHsKICAgICAgICBmb3IgKCA7
IG4tLTsgKytzMSwgKytzMiApCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmICggbHQoKnMxLCAq
czIpICkKICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgIGlmICggbHQoKnMyLCAq
czEpICkKICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgIH0KCiAgICAgICAgcmV0dXJu
IDA7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIHNpemVfdAogICAgbGVuZ3RoKCBjb25zdCBjaGFy
X3R5cGUqIHMgKQogICAgICB7CiAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CiAgICAgICAgd2hp
bGUgKCAhZXEoKnMrKywgQ2hhclQoMCkpICkKICAgICAgICAgICsrcmVzdWx0OwogICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNvbnN0IGNoYXJfdHlwZSoKICAg
IGZpbmQoIGNvbnN0IGNoYXJfdHlwZSogcywgc2l6ZV90IG4sIGNvbnN0IGNoYXJfdHlwZSYgYyAp
CiAgICAgIHsKICAgICAgICB3aGlsZSAoIG4tLSApCiAgICAgICAgICB7CiAgICAgICAgICAgIGlm
ICggZXEoKnMsIGMpICkKICAgICAgICAgICAgICByZXR1cm4gczsKICAgICAgICAgICAgKytzOwog
ICAgICAgICAgfQoKICAgICAgICByZXR1cm4gMDsKICAgICAgfQojIDIxMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zQ2hhclRyYWl0cy5oIgogIH07Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgbnND
aGFyVHJhaXRzPGNoYXI+CiAgewogICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKICAgIHR5cGVk
ZWYgUFJVbmljaGFyIGluY29tcGF0aWJsZV9jaGFyX3R5cGU7CgogICAgc3RhdGljCiAgICB2b2lk
CiAgICBhc3NpZ24oIGNoYXImIGxocywgY2hhciByaHMgKQogICAgICB7CiAgICAgICAgbGhzID0g
cmhzOwogICAgICB9CgoKCgogICAgdHlwZWRlZiBpbnQgaW50X3R5cGU7CgogICAgc3RhdGljCiAg
ICBjaGFyCiAgICB0b19jaGFyX3R5cGUoIGludCBjICkKICAgICAgewogICAgICAgIHJldHVybiBj
aGFyKGMpOwogICAgICB9CgogICAgc3RhdGljCiAgICBpbnQKICAgIHRvX2ludF90eXBlKCBjaGFy
IGMgKQogICAgICB7CiAgICAgICAgcmV0dXJuIGludCggc3RhdGljX2Nhc3Q8IHVuc2lnbmVkIGNo
YXIgPihjKSApOwogICAgICB9CgogICAgc3RhdGljCiAgICBuc0NoYXJUcmFpdHNfYm9vbAogICAg
ZXFfaW50X3R5cGUoIGludCBsaHMsIGludCByaHMgKQogICAgICB7CiAgICAgICAgcmV0dXJuIGxo
cyA9PSByaHM7CiAgICAgIH0KCgoKCiAgICBzdGF0aWMKICAgIG5zQ2hhclRyYWl0c19ib29sCiAg
ICBlcSggY2hhciBsaHMsIGNoYXIgcmhzICkKICAgICAgewogICAgICAgIHJldHVybiBsaHMgPT0g
cmhzOwogICAgICB9CgogICAgc3RhdGljCiAgICBuc0NoYXJUcmFpdHNfYm9vbAogICAgbHQoIGNo
YXIgbGhzLCBjaGFyIHJocyApCiAgICAgIHsKICAgICAgICByZXR1cm4gbGhzIDwgcmhzOwogICAg
ICB9CgoKCgogICAgc3RhdGljCiAgICBjaGFyKgogICAgbW92ZSggY2hhciogczEsIGNvbnN0IGNo
YXIqIHMyLCBzaXplX3QgbiApCiAgICAgIHsKICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNo
YXIqID4obWVtbW92ZShzMSwgczIsIG4pKTsKICAgICAgfQoKICAgIHN0YXRpYwogICAgY2hhcioK
ICAgIGNvcHkoIGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwgc2l6ZV90IG4gKQogICAgICB7CiAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjaGFyKiA+KG1lbWNweShzMSwgczIsIG4pKTsKICAg
ICAgfQoKICAgIHN0YXRpYwogICAgY2hhcioKICAgIGFzc2lnbiggY2hhciogcywgc2l6ZV90IG4s
IGNoYXIgYyApCiAgICAgIHsKICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNoYXIqID4obWVt
c2V0KHMsIHRvX2ludF90eXBlKGMpLCBuKSk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGludAog
ICAgY29tcGFyZSggY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyLCBzaXplX3QgbiApCiAg
ICAgIHsKICAgICAgICByZXR1cm4gbWVtY21wKHMxLCBzMiwgbik7CiAgICAgIH0KCiAgICBzdGF0
aWMKICAgIHNpemVfdAogICAgbGVuZ3RoKCBjb25zdCBjaGFyKiBzICkKICAgICAgewogICAgICAg
IHJldHVybiBzdHJsZW4ocyk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNvbnN0IGNoYXIqCiAg
ICBmaW5kKCBjb25zdCBjaGFyKiBzLCBzaXplX3QgbiwgY2hhciBjICkKICAgICAgewogICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PCBjb25zdCBjaGFyKiA+KG1lbWNocihzLCB0b19pbnRf
dHlwZShjKSwgbikpOwogICAgICB9CiMgMzM3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnND
aGFyVHJhaXRzLmgiCiAgfTsKIyA0NjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NoYXJU
cmFpdHMuaCIKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3I+CnN0cnVjdCBuc0NoYXJTb3Vy
Y2VUcmFpdHMKICB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIElucHV0SXRlcmF0b3I6OmRpZmZlcmVu
Y2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiMgNDgwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNDaGFyVHJhaXRzLmgiCiAgICBzdGF0aWMKICAgIFBSVWludDMyCiAgICByZWFkYWJsZV9kaXN0
YW5jZSggY29uc3QgSW5wdXRJdGVyYXRvciYgaXRlciApCiAgICAgIHsKICAgICAgICByZXR1cm4g
aXRlci5zaXplX2ZvcndhcmQoKTsKICAgICAgfQoKICAgIHN0YXRpYwogICAgUFJVaW50MzIKICAg
IHJlYWRhYmxlX2Rpc3RhbmNlKCBjb25zdCBJbnB1dEl0ZXJhdG9yJiBmaXJzdCwgY29uc3QgSW5w
dXRJdGVyYXRvciYgbGFzdCApCiAgICAgIHsKICAgICAgICByZXR1cm4gUFJVaW50MzIoU2FtZUZy
YWdtZW50KGZpcnN0LCBsYXN0KSA/IGxhc3QuZ2V0KCktZmlyc3QuZ2V0KCkgOiBmaXJzdC5zaXpl
X2ZvcndhcmQoKSk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNvbnN0IHR5cGVuYW1lIElucHV0
SXRlcmF0b3I6OnZhbHVlX3R5cGUqCiAgICByZWFkKCBjb25zdCBJbnB1dEl0ZXJhdG9yJiBpdGVy
ICkKICAgICAgewogICAgICAgIHJldHVybiBpdGVyLmdldCgpOwogICAgICB9CgogICAgc3RhdGlj
CiAgICB2b2lkCiAgICBhZHZhbmNlKCBJbnB1dEl0ZXJhdG9yJiBzLCBkaWZmZXJlbmNlX3R5cGUg
biApCiAgICAgIHsKICAgICAgICBzLmFkdmFuY2Uobik7CiAgICAgIH0KICB9OwoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgQ2hhclQ+CnN0cnVjdCBuc0NoYXJTb3VyY2VUcmFpdHM8Q2hhclQqPgogIHsKICAg
IHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKIyA1MjUgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0NoYXJUcmFpdHMuaCIKICAgIHN0YXRpYwogICAgUFJVaW50MzIKICAgIHJl
YWRhYmxlX2Rpc3RhbmNlKCBDaGFyVCogcyApCiAgICAgIHsKICAgICAgICByZXR1cm4gUFJVaW50
MzIobnNDaGFyVHJhaXRzPENoYXJUPjo6bGVuZ3RoKHMpKTsKCiAgICAgIH0KCiAgICBzdGF0aWMK
ICAgIFBSVWludDMyCiAgICByZWFkYWJsZV9kaXN0YW5jZSggQ2hhclQqIGZpcnN0LCBDaGFyVCog
bGFzdCApCiAgICAgIHsKICAgICAgICByZXR1cm4gUFJVaW50MzIobGFzdC1maXJzdCk7CiAgICAg
IH0KCiAgICBzdGF0aWMKICAgIGNvbnN0IENoYXJUKgogICAgcmVhZCggQ2hhclQqIHMgKQogICAg
ICB7CiAgICAgICAgcmV0dXJuIHM7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIHZvaWQKICAgIGFk
dmFuY2UoIENoYXJUKiYgcywgZGlmZmVyZW5jZV90eXBlIG4gKQogICAgICB7CiAgICAgICAgcyAr
PSBuOwogICAgICB9CiAgfTsKIyA2NDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NoYXJU
cmFpdHMuaCIKdGVtcGxhdGUgPGNsYXNzIE91dHB1dEl0ZXJhdG9yPgpzdHJ1Y3QgbnNDaGFyU2lu
a1RyYWl0cwogIHsKICAgIHN0YXRpYwogICAgUFJVaW50MzIKICAgIHdyaXRlKCBPdXRwdXRJdGVy
YXRvciYgaXRlciwgY29uc3QgdHlwZW5hbWUgT3V0cHV0SXRlcmF0b3I6OnZhbHVlX3R5cGUqIHMs
IFBSVWludDMyIG4gKQogICAgICB7CiAgICAgICAgcmV0dXJuIGl0ZXIud3JpdGUocywgbik7CiAg
ICAgIH0KICB9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CnN0cnVjdCBuc0NoYXJTaW5rVHJh
aXRzPENoYXJUKj4KICB7CiAgICBzdGF0aWMKICAgIFBSVWludDMyCiAgICB3cml0ZSggQ2hhclQq
JiBpdGVyLCBjb25zdCBDaGFyVCogcywgUFJVaW50MzIgbiApCiAgICAgIHsKICAgICAgICBuc0No
YXJUcmFpdHM8Q2hhclQ+Ojptb3ZlKGl0ZXIsIHMsIG4pOwogICAgICAgIGl0ZXIgKz0gbjsKICAg
ICAgICByZXR1cm4gbjsKICAgICAgfQogIH07CiMgMzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0FTdHJpbmcuaCIgMgoKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmlu
Z0l0ZXJhdG9yLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nSXRl
cmF0b3IuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdGcmFnbWVudC5o
IiAxCiMgMzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0ZyYWdtZW50LmgiCmVu
dW0gbnNGcmFnbWVudFJlcXVlc3QgeyBrUHJldkZyYWdtZW50LCBrRmlyc3RGcmFnbWVudCwga0xh
c3RGcmFnbWVudCwga05leHRGcmFnbWVudCwga0ZyYWdtZW50QXQgfTsKIyA1MyAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zU3RyaW5nRnJhZ21lbnQuaCIKdGVtcGxhdGUgPGNsYXNzIENoYXJU
PgpzdHJ1Y3QgbnNSZWFkYWJsZUZyYWdtZW50CiAgewogICAgY29uc3QgQ2hhclQqIG1TdGFydDsK
ICAgIGNvbnN0IENoYXJUKiBtRW5kOwogICAgY29uc3Qgdm9pZCogbUZyYWdtZW50SWRlbnRpZmll
cjsKCiAgICBuc1JlYWRhYmxlRnJhZ21lbnQoKQogICAgICAgIDogbVN0YXJ0KDApLCBtRW5kKDAp
LCBtRnJhZ21lbnRJZGVudGlmaWVyKDApCiAgICAgIHsKCiAgICAgIH0KICB9OwojIDgwICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdGcmFnbWVudC5oIgp0ZW1wbGF0ZSA8Y2xhc3Mg
Q2hhclQ+CnN0cnVjdCBuc1dyaXRhYmxlRnJhZ21lbnQKICB7CiAgICBDaGFyVCogbVN0YXJ0Owog
ICAgQ2hhclQqIG1FbmQ7CiAgICB2b2lkKiBtRnJhZ21lbnRJZGVudGlmaWVyOwoKICAgIG5zV3Jp
dGFibGVGcmFnbWVudCgpCiAgICAgICAgOiBtU3RhcnQoMCksIG1FbmQoMCksIG1GcmFnbWVudElk
ZW50aWZpZXIoMCkKICAgICAgewoKICAgICAgfQogIH07CiMgMjkgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc1N0cmluZ0l0ZXJhdG9yLmgiIDIKCgoKCgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zU3RyaW5nVHJhaXRzLmgiIDEKIyA0NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zU3RyaW5nVHJhaXRzLmgiCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4Kc3RydWN0IG5zU3Ry
aW5nVHJhaXRzCiAgewogICAgdHlwZWRlZiBuc0FTdHJpbmcgYWJzdHJhY3Rfc3RyaW5nX3R5cGU7
CiAgICB0eXBlZGVmIG5zQVByb21pc2VTdHJpbmcgYWJzdHJhY3RfcHJvbWlzZV90eXBlOwogICAg
dHlwZWRlZiBuc0FGbGF0U3RyaW5nIGFic3RyYWN0X2ZsYXRfdHlwZTsKICAgIHR5cGVkZWYgY29u
c3QgbnNEZXBlbmRlbnRTdHJpbmcgbGl0ZXJhbF9zdHJpbmdfdHlwZTsKICB9OwojIDY2ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdUcmFpdHMuaCIKdGVtcGxhdGUgPD4Kc3RydWN0
IG5zU3RyaW5nVHJhaXRzPGNoYXI+CiAgewogICAgdHlwZWRlZiBuc0FDU3RyaW5nIGFic3RyYWN0
X3N0cmluZ190eXBlOwogICAgdHlwZWRlZiBuc0FQcm9taXNlQ1N0cmluZyBhYnN0cmFjdF9wcm9t
aXNlX3R5cGU7CiAgICB0eXBlZGVmIG5zQUZsYXRDU3RyaW5nIGFic3RyYWN0X2ZsYXRfdHlwZTsK
ICAgIHR5cGVkZWYgY29uc3QgbnNEZXBlbmRlbnRDU3RyaW5nIGxpdGVyYWxfc3RyaW5nX3R5cGU7
CiAgfTsKIyAzNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nSXRlcmF0b3IuaCIg
MgoKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FsZ29yaXRobS5oIiAxCiMgMzgg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FsZ29yaXRobS5oIgp0ZW1wbGF0ZSA8Y2xhc3Mg
VD4KaW5saW5lCmNvbnN0IFQmCk5TX01JTiggY29uc3QgVCYgYSwgY29uc3QgVCYgYiApCiAgewog
ICAgcmV0dXJuIGIgPCBhID8gYiA6IGE7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpj
b25zdCBUJgpOU19NQVgoIGNvbnN0IFQmIGEsIGNvbnN0IFQmIGIgKQogIHsKICAgIHJldHVybiBh
ID4gYiA/IGEgOiBiOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yLCBjbGFzcyBU
PgppbmxpbmUKUFJVaW50MzIKTlNfQ09VTlQoIElucHV0SXRlcmF0b3ImIGZpcnN0LCBjb25zdCBJ
bnB1dEl0ZXJhdG9yJiBsYXN0LCBjb25zdCBUJiB2YWx1ZSApCiAgewogICAgUFJVaW50MzIgcmVz
dWx0ID0gMDsKICAgIGZvciAoIDsgZmlyc3QgIT0gbGFzdDsgKytmaXJzdCApCiAgICAgIGlmICgg
KmZpcnN0ID09IHZhbHVlICkKICAgICAgICArK3Jlc3VsdDsKICAgIHJldHVybiByZXN1bHQ7CiAg
fQoKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3IsIGNsYXNzIE91dHB1dEl0ZXJhdG9yPgpp
bmxpbmUKT3V0cHV0SXRlcmF0b3ImCmNvcHlfc3RyaW5nKCBJbnB1dEl0ZXJhdG9yJiBmaXJzdCwg
Y29uc3QgSW5wdXRJdGVyYXRvciYgbGFzdCwgT3V0cHV0SXRlcmF0b3ImIHJlc3VsdCApCiAgewog
ICAgdHlwZWRlZiBuc0NoYXJTb3VyY2VUcmFpdHM8SW5wdXRJdGVyYXRvcj4gc291cmNlX3RyYWl0
czsKICAgIHR5cGVkZWYgbnNDaGFyU2lua1RyYWl0czxPdXRwdXRJdGVyYXRvcj4gc2lua190cmFp
dHM7CgogICAgd2hpbGUgKCBmaXJzdCAhPSBsYXN0ICkKICAgICAgewogICAgICAgIFBSSW50MzIg
Y291bnRfY29waWVkID0gUFJJbnQzMihzaW5rX3RyYWl0czo6d3JpdGUocmVzdWx0LCBzb3VyY2Vf
dHJhaXRzOjpyZWFkKGZpcnN0KSwgc291cmNlX3RyYWl0czo6cmVhZGFibGVfZGlzdGFuY2UoZmly
c3QsIGxhc3QpKSk7CiAgICAgICAge307CiAgICAgICAgc291cmNlX3RyYWl0czo6YWR2YW5jZShm
aXJzdCwgY291bnRfY29waWVkKTsKICAgICAgfQoKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKdGVt
cGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3IsIGNsYXNzIE91dHB1dEl0ZXJhdG9yPgpPdXRwdXRJ
dGVyYXRvciYKY29weV9zdHJpbmdfYmFja3dhcmQoIGNvbnN0IElucHV0SXRlcmF0b3ImIGZpcnN0
LCBJbnB1dEl0ZXJhdG9yJiBsYXN0LCBPdXRwdXRJdGVyYXRvciYgcmVzdWx0ICkKICB7CiAgICB3
aGlsZSAoIGZpcnN0ICE9IGxhc3QgKQogICAgICB7CiAgICAgICAgbGFzdC5ub3JtYWxpemVfYmFj
a3dhcmQoKTsKICAgICAgICByZXN1bHQubm9ybWFsaXplX2JhY2t3YXJkKCk7CiAgICAgICAgUFJV
aW50MzIgbGVuZ3RoVG9Db3B5ID0gUFJVaW50MzIoIE5TX01JTihsYXN0LnNpemVfYmFja3dhcmQo
KSwgcmVzdWx0LnNpemVfYmFja3dhcmQoKSkgKTsKICAgICAgICBpZiAoIGZpcnN0LmZyYWdtZW50
KCkubVN0YXJ0ID09IGxhc3QuZnJhZ21lbnQoKS5tU3RhcnQgKQogICAgICAgICAgbGVuZ3RoVG9D
b3B5ID0gTlNfTUlOKGxlbmd0aFRvQ29weSwgUFJVaW50MzIobGFzdC5nZXQoKSAtIGZpcnN0Lmdl
dCgpKSk7CgogICAgICAgIHt9OwoKCgoKCiAgICAgICAgbnNDaGFyVHJhaXRzPHR5cGVuYW1lIE91
dHB1dEl0ZXJhdG9yOjp2YWx1ZV90eXBlPjo6bW92ZShyZXN1bHQuZ2V0KCktbGVuZ3RoVG9Db3B5
LCBsYXN0LmdldCgpLWxlbmd0aFRvQ29weSwgbGVuZ3RoVG9Db3B5KTsKCgogICAgICAgIGxhc3Qu
YWR2YW5jZSggLVBSSW50MzIobGVuZ3RoVG9Db3B5KSApOwogICAgICAgIHJlc3VsdC5hZHZhbmNl
KCAtUFJJbnQzMihsZW5ndGhUb0NvcHkpICk7CiAgICAgIH0KCiAgICByZXR1cm4gcmVzdWx0Owog
IH0KIyA0MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nSXRlcmF0b3IuaCIgMgoj
IDU1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdJdGVyYXRvci5oIgp0ZW1wbGF0
ZSA8Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zUmVhZGluZ0l0ZXJhdG9yCgogIHsKICAgIHB1YmxpYzoK
ICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIENo
YXJUIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgY29uc3QgQ2hhclQqIHBvaW50ZXI7CiAgICAg
IHR5cGVkZWYgY29uc3QgQ2hhclQmIHJlZmVyZW5jZTsKCgogICAgcHJpdmF0ZToKICAgICAgZnJp
ZW5kIGNsYXNzIG5zQVN0cmluZzsKICAgICAgZnJpZW5kIGNsYXNzIG5zQUNTdHJpbmc7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgbnNTdHJpbmdUcmFpdHM8Q2hhclQ+OjphYnN0cmFjdF9zdHJpbmdf
dHlwZSBzdHJpbmdfdHlwZTsKCiAgICAgIG5zUmVhZGFibGVGcmFnbWVudDxDaGFyVD4gbUZyYWdt
ZW50OwogICAgICBjb25zdCBDaGFyVCogbVBvc2l0aW9uOwogICAgICBjb25zdCBzdHJpbmdfdHlw
ZSogbU93bmluZ1N0cmluZzsKCiAgICBwdWJsaWM6CiAgICAgIG5zUmVhZGluZ0l0ZXJhdG9yKCkg
eyB9CgoKCiAgICAgIGlubGluZSB2b2lkIG5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICAgIGlubGlu
ZSB2b2lkIG5vcm1hbGl6ZV9iYWNrd2FyZCgpOwoKICAgICAgcG9pbnRlcgogICAgICBnZXQoKSBj
b25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiBtUG9zaXRpb247CiAgICAgICAgfQoKICAg
ICAgQ2hhclQKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1
cm4gKmdldCgpOwogICAgICAgIH0KIyAxMDUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0
cmluZ0l0ZXJhdG9yLmgiCiAgICAgIG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPiYKICAgICAgb3Bl
cmF0b3IrKygpCiAgICAgICAgewogICAgICAgICAgKyttUG9zaXRpb247CiAgICAgICAgICBub3Jt
YWxpemVfZm9yd2FyZCgpOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAg
IG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPgogICAgICBvcGVyYXRvcisrKCBpbnQgKQogICAgICAg
IHsKICAgICAgICAgIG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPiByZXN1bHQoKnRoaXMpOwogICAg
ICAgICAgKyttUG9zaXRpb247CiAgICAgICAgICBub3JtYWxpemVfZm9yd2FyZCgpOwogICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CgogICAgICBuc1JlYWRpbmdJdGVyYXRvcjxDaGFy
VD4mCiAgICAgIG9wZXJhdG9yLS0oKQogICAgICAgIHsKICAgICAgICAgIG5vcm1hbGl6ZV9iYWNr
d2FyZCgpOwogICAgICAgICAgLS1tUG9zaXRpb247CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICAgICAgfQoKICAgICAgbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+CiAgICAgIG9wZXJhdG9yLS0o
IGludCApCiAgICAgICAgewogICAgICAgICAgbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+IHJlc3Vs
dCgqdGhpcyk7CiAgICAgICAgICBub3JtYWxpemVfYmFja3dhcmQoKTsKICAgICAgICAgIC0tbVBv
c2l0aW9uOwogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CgogICAgICBjb25zdCBu
c1JlYWRhYmxlRnJhZ21lbnQ8Q2hhclQ+JgogICAgICBmcmFnbWVudCgpIGNvbnN0CiAgICAgICAg
ewogICAgICAgICAgcmV0dXJuIG1GcmFnbWVudDsKICAgICAgICB9CgogICAgICBjb25zdCBzdHJp
bmdfdHlwZSYKICAgICAgc3RyaW5nKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICB7fTsKICAg
ICAgICAgIHJldHVybiAqbU93bmluZ1N0cmluZzsKICAgICAgICB9CgogICAgICBkaWZmZXJlbmNl
X3R5cGUKICAgICAgc2l6ZV9mb3J3YXJkKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1
cm4gbUZyYWdtZW50Lm1FbmQgLSBtUG9zaXRpb247CiAgICAgICAgfQoKICAgICAgZGlmZmVyZW5j
ZV90eXBlCiAgICAgIHNpemVfYmFja3dhcmQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJl
dHVybiBtUG9zaXRpb24gLSBtRnJhZ21lbnQubVN0YXJ0OwogICAgICAgIH0KCiAgICAgIG5zUmVh
ZGluZ0l0ZXJhdG9yPENoYXJUPiYKICAgICAgYWR2YW5jZSggZGlmZmVyZW5jZV90eXBlIG4gKQog
ICAgICAgIHsKICAgICAgICAgIHdoaWxlICggbiA+IDAgKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgZGlmZmVyZW5jZV90eXBlIG9uZV9ob3AgPSBOU19NSU4obiwgc2l6ZV9mb3J3YXJkKCkp
OwoKICAgICAgICAgICAgICB7fTsKCgogICAgICAgICAgICAgIG1Qb3NpdGlvbiArPSBvbmVfaG9w
OwogICAgICAgICAgICAgIG5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICAgICAgICAgICAgbiAtPSBv
bmVfaG9wOwogICAgICAgICAgICB9CgogICAgICAgICAgd2hpbGUgKCBuIDwgMCApCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBub3JtYWxpemVfYmFja3dhcmQoKTsKICAgICAgICAgICAgICBk
aWZmZXJlbmNlX3R5cGUgb25lX2hvcCA9IE5TX01BWChuLCAtc2l6ZV9iYWNrd2FyZCgpKTsKCiAg
ICAgICAgICAgICAge307CgoKICAgICAgICAgICAgICBtUG9zaXRpb24gKz0gb25lX2hvcDsKICAg
ICAgICAgICAgICBuIC09IG9uZV9ob3A7CiAgICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgICAgfQogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zV3Jp
dGluZ0l0ZXJhdG9yCgogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlm
ZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIENoYXJUIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVk
ZWYgQ2hhclQqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgQ2hhclQmIHJlZmVyZW5jZTsKCgogICAg
cHJpdmF0ZToKICAgICAgZnJpZW5kIGNsYXNzIG5zQVN0cmluZzsKICAgICAgZnJpZW5kIGNsYXNz
IG5zQUNTdHJpbmc7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbnNTdHJpbmdUcmFpdHM8Q2hhclQ+
OjphYnN0cmFjdF9zdHJpbmdfdHlwZSBzdHJpbmdfdHlwZTsKCiAgICAgIG5zV3JpdGFibGVGcmFn
bWVudDxDaGFyVD4gbUZyYWdtZW50OwogICAgICBDaGFyVCogbVBvc2l0aW9uOwogICAgICBzdHJp
bmdfdHlwZSogbU93bmluZ1N0cmluZzsKCiAgICBwdWJsaWM6CiAgICAgIG5zV3JpdGluZ0l0ZXJh
dG9yKCkgeyB9CgoKCiAgICAgIGlubGluZSB2b2lkIG5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICAg
IGlubGluZSB2b2lkIG5vcm1hbGl6ZV9iYWNrd2FyZCgpOwoKICAgICAgcG9pbnRlcgogICAgICBn
ZXQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiBtUG9zaXRpb247CiAgICAgICAg
fQoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgICAgewogICAg
ICAgICAgcmV0dXJuICpnZXQoKTsKICAgICAgICB9CiMgMjQ1ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNTdHJpbmdJdGVyYXRvci5oIgogICAgICBuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4m
CiAgICAgIG9wZXJhdG9yKysoKQogICAgICAgIHsKICAgICAgICAgICsrbVBvc2l0aW9uOwogICAg
ICAgICAgbm9ybWFsaXplX2ZvcndhcmQoKTsKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAg
ICB9CgogICAgICBuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4KICAgICAgb3BlcmF0b3IrKyggaW50
ICkKICAgICAgICB7CiAgICAgICAgICBuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4gcmVzdWx0KCp0
aGlzKTsKICAgICAgICAgICsrbVBvc2l0aW9uOwogICAgICAgICAgbm9ybWFsaXplX2ZvcndhcmQo
KTsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQoKICAgICAgbnNXcml0aW5nSXRl
cmF0b3I8Q2hhclQ+JgogICAgICBvcGVyYXRvci0tKCkKICAgICAgICB7CiAgICAgICAgICBub3Jt
YWxpemVfYmFja3dhcmQoKTsKICAgICAgICAgIC0tbVBvc2l0aW9uOwogICAgICAgICAgcmV0dXJu
ICp0aGlzOwogICAgICAgIH0KCiAgICAgIG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPgogICAgICBv
cGVyYXRvci0tKCBpbnQgKQogICAgICAgIHsKICAgICAgICAgIG5zV3JpdGluZ0l0ZXJhdG9yPENo
YXJUPiByZXN1bHQoKnRoaXMpOwogICAgICAgICAgbm9ybWFsaXplX2JhY2t3YXJkKCk7CiAgICAg
ICAgICAtLW1Qb3NpdGlvbjsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQoKICAg
ICAgY29uc3QgbnNXcml0YWJsZUZyYWdtZW50PENoYXJUPiYKICAgICAgZnJhZ21lbnQoKSBjb25z
dAogICAgICAgIHsKICAgICAgICAgIHJldHVybiBtRnJhZ21lbnQ7CiAgICAgICAgfQoKICAgICAg
bnNXcml0YWJsZUZyYWdtZW50PENoYXJUPiYKICAgICAgZnJhZ21lbnQoKQogICAgICAgIHsKICAg
ICAgICAgIHJldHVybiBtRnJhZ21lbnQ7CiAgICAgICAgfQoKICAgICAgY29uc3Qgc3RyaW5nX3R5
cGUmCiAgICAgIHN0cmluZygpIGNvbnN0CiAgICAgICAgewogICAgICAgICAge307CiAgICAgICAg
ICByZXR1cm4gKm1Pd25pbmdTdHJpbmc7CiAgICAgICAgfQoKICAgICAgc3RyaW5nX3R5cGUmCiAg
ICAgIHN0cmluZygpCiAgICAgICAgewogICAgICAgICAge307CiAgICAgICAgICByZXR1cm4gKm1P
d25pbmdTdHJpbmc7CiAgICAgICAgfQoKICAgICAgZGlmZmVyZW5jZV90eXBlCiAgICAgIHNpemVf
Zm9yd2FyZCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1GcmFnbWVudC5tRW5k
IC0gbVBvc2l0aW9uOwogICAgICAgIH0KCiAgICAgIGRpZmZlcmVuY2VfdHlwZQogICAgICBzaXpl
X2JhY2t3YXJkKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gbVBvc2l0aW9uIC0g
bUZyYWdtZW50Lm1TdGFydDsKICAgICAgICB9CgogICAgICBuc1dyaXRpbmdJdGVyYXRvcjxDaGFy
VD4mCiAgICAgIGFkdmFuY2UoIGRpZmZlcmVuY2VfdHlwZSBuICkKICAgICAgICB7CiAgICAgICAg
ICB3aGlsZSAoIG4gPiAwICkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGRpZmZlcmVuY2Vf
dHlwZSBvbmVfaG9wID0gTlNfTUlOKG4sIHNpemVfZm9yd2FyZCgpKTsKCiAgICAgICAgICAgICAg
e307CgoKICAgICAgICAgICAgICBtUG9zaXRpb24gKz0gb25lX2hvcDsKICAgICAgICAgICAgICBu
b3JtYWxpemVfZm9yd2FyZCgpOwogICAgICAgICAgICAgIG4gLT0gb25lX2hvcDsKICAgICAgICAg
ICAgfQoKICAgICAgICAgIHdoaWxlICggbiA8IDAgKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgbm9ybWFsaXplX2JhY2t3YXJkKCk7CiAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlIG9u
ZV9ob3AgPSBOU19NQVgobiwgLXNpemVfYmFja3dhcmQoKSk7CgogICAgICAgICAgICAgIHt9OwoK
CiAgICAgICAgICAgICAgbVBvc2l0aW9uICs9IG9uZV9ob3A7CiAgICAgICAgICAgICAgbiAtPSBv
bmVfaG9wOwogICAgICAgICAgICB9CgogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0K
CiAgICAgIFBSVWludDMyCiAgICAgIHdyaXRlKCBjb25zdCB2YWx1ZV90eXBlKiBzLCBQUlVpbnQz
MiBuICkKICAgICAgICB7CiAgICAgICAgICB7fTsKCiAgICAgICAgICBuID0gTlNfTUlOKG4sIFBS
VWludDMyKHNpemVfZm9yd2FyZCgpKSk7CiAgICAgICAgICBuc0NoYXJUcmFpdHM8dmFsdWVfdHlw
ZT46Om1vdmUobVBvc2l0aW9uLCBzLCBuKTsKICAgICAgICAgIGFkdmFuY2UoIGRpZmZlcmVuY2Vf
dHlwZShuKSApOwogICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgfQogIH07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgQ2hhclQ+CmlubGluZQp2b2lkCm5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPjo6bm9ybWFs
aXplX2ZvcndhcmQoKQogIHsKICAgIHdoaWxlICggbVBvc2l0aW9uID09IG1GcmFnbWVudC5tRW5k
CiAgICAgICAgICYmIG1Pd25pbmdTdHJpbmctPkdldFJlYWRhYmxlRnJhZ21lbnQobUZyYWdtZW50
LCBrTmV4dEZyYWdtZW50KSApCiAgICAgICAgbVBvc2l0aW9uID0gbUZyYWdtZW50Lm1TdGFydDsK
ICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQp2b2lkCm5zUmVhZGluZ0l0ZXJhdG9y
PENoYXJUPjo6bm9ybWFsaXplX2JhY2t3YXJkKCkKICB7CiAgICB3aGlsZSAoIG1Qb3NpdGlvbiA9
PSBtRnJhZ21lbnQubVN0YXJ0CiAgICAgICAgICYmIG1Pd25pbmdTdHJpbmctPkdldFJlYWRhYmxl
RnJhZ21lbnQobUZyYWdtZW50LCBrUHJldkZyYWdtZW50KSApCiAgICAgICAgbVBvc2l0aW9uID0g
bUZyYWdtZW50Lm1FbmQ7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgppbmxpbmUKUFJCb29s
Cm9wZXJhdG9yPT0oIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPiYgbGhzLCBjb25zdCBu
c1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4mIHJocyApCiAgewogICAgcmV0dXJuIGxocy5nZXQoKSA9
PSByaHMuZ2V0KCk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgppbmxpbmUKUFJCb29sCm9w
ZXJhdG9yIT0oIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPiYgbGhzLCBjb25zdCBuc1Jl
YWRpbmdJdGVyYXRvcjxDaGFyVD4mIHJocyApCiAgewogICAgcmV0dXJuIGxocy5nZXQoKSAhPSBy
aHMuZ2V0KCk7CiAgfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQp2b2lkCm5z
V3JpdGluZ0l0ZXJhdG9yPENoYXJUPjo6bm9ybWFsaXplX2ZvcndhcmQoKQogIHsKICAgIHdoaWxl
ICggbVBvc2l0aW9uID09IG1GcmFnbWVudC5tRW5kCiAgICAgICAgICYmIG1Pd25pbmdTdHJpbmct
PkdldFdyaXRhYmxlRnJhZ21lbnQobUZyYWdtZW50LCBrTmV4dEZyYWdtZW50KSApCiAgICAgIG1Q
b3NpdGlvbiA9IG1GcmFnbWVudC5tU3RhcnQ7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpp
bmxpbmUKdm9pZApuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD46Om5vcm1hbGl6ZV9iYWNrd2FyZCgp
CiAgewogICAgd2hpbGUgKCBtUG9zaXRpb24gPT0gbUZyYWdtZW50Lm1TdGFydAogICAgICAgICAm
JiBtT3duaW5nU3RyaW5nLT5HZXRXcml0YWJsZUZyYWdtZW50KG1GcmFnbWVudCwga1ByZXZGcmFn
bWVudCkgKQogICAgICBtUG9zaXRpb24gPSBtRnJhZ21lbnQubUVuZDsKICB9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgQ2hhclQ+CmlubGluZQpQUkJvb2wKb3BlcmF0b3I9PSggY29uc3QgbnNXcml0aW5nSXRl
cmF0b3I8Q2hhclQ+JiBsaHMsIGNvbnN0IG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPiYgcmhzICkK
ICB7CiAgICByZXR1cm4gbGhzLmdldCgpID09IHJocy5nZXQoKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgQ2hhclQ+CmlubGluZQpQUkJvb2wKb3BlcmF0b3IhPSggY29uc3QgbnNXcml0aW5nSXRlcmF0
b3I8Q2hhclQ+JiBsaHMsIGNvbnN0IG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPiYgcmhzICkKICB7
CiAgICByZXR1cm4gbGhzLmdldCgpICE9IHJocy5nZXQoKTsKICB9CiMgNDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIgMgoKCgoKCgoKY2xhc3MgbnNBU3RyaW5nCiAgICA6
IHB1YmxpYyBuc1ByaXZhdGVTaGFyYWJsZVN0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgdHlw
ZWRlZiBuc0FTdHJpbmcgc2VsZl90eXBlOwogICAgICB0eXBlZGVmIG5zQVByb21pc2VTdHJpbmcg
cHJvbWlzZV90eXBlOwogICAgICB0eXBlZGVmIFBSVW5pY2hhciBjaGFyX3R5cGU7CiAgICAgIHR5
cGVkZWYgY2hhciBpbmNvbXBhdGlibGVfY2hhcl90eXBlOwoKCiAgICAgIHR5cGVkZWYgbnNSZWFk
aW5nSXRlcmF0b3I8Y2hhcl90eXBlPiBjb25zdF9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiBuc1dy
aXRpbmdJdGVyYXRvcjxjaGFyX3R5cGU+IGl0ZXJhdG9yOwoKICAgICAgdHlwZWRlZiBQUlVpbnQz
MiBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgUFJVaW50MzIgaW5kZXhfdHlwZTsKCgoKCgoKICAg
ICAgdmlydHVhbCB+bnNBU3RyaW5nKCkgeyB9CgogICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3Im
IEJlZ2luUmVhZGluZyggY29uc3RfaXRlcmF0b3ImICkgY29uc3Q7CiAgICAgIGlubGluZSBjb25z
dF9pdGVyYXRvciYgRW5kUmVhZGluZyggY29uc3RfaXRlcmF0b3ImICkgY29uc3Q7CgogICAgICBp
bmxpbmUgaXRlcmF0b3ImIEJlZ2luV3JpdGluZyggaXRlcmF0b3ImICk7CiAgICAgIGlubGluZSBp
dGVyYXRvciYgRW5kV3JpdGluZyggaXRlcmF0b3ImICk7CgogICAgICB2aXJ0dWFsIHNpemVfdHlw
ZSBMZW5ndGgoKSBjb25zdCA9IDA7CiAgICAgIFBSQm9vbCBJc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gTGVuZ3RoKCkgPT0gMDsgfQoKICAgICAgaW5saW5lIFBSQm9vbCBFcXVhbHMoIGNvbnN0IHNl
bGZfdHlwZSYgKSBjb25zdDsKICAgICAgUFJCb29sIEVxdWFscyggY29uc3QgY2hhcl90eXBlKiAp
IGNvbnN0OwoKCgoKCgoKICAgICAgY2hhcl90eXBlIEZpcnN0KCkgY29uc3Q7CiAgICAgIGNoYXJf
dHlwZSBMYXN0KCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUgQ291bnRDaGFyKCBjaGFyX3R5cGUg
KSBjb25zdDsKIyAxMTIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAg
ICAgc2l6ZV90eXBlIExlZnQoIHNlbGZfdHlwZSYsIHNpemVfdHlwZSApIGNvbnN0OwogICAgICBz
aXplX3R5cGUgTWlkKCBzZWxmX3R5cGUmLCBQUlVpbnQzMiwgUFJVaW50MzIgKSBjb25zdDsKICAg
ICAgc2l6ZV90eXBlIFJpZ2h0KCBzZWxmX3R5cGUmLCBzaXplX3R5cGUgKSBjb25zdDsKCgogICAg
ICBQUkludDMyIEZpbmRDaGFyKCBjaGFyX3R5cGUsIGluZGV4X3R5cGUgYU9mZnNldCA9IDAgKSBj
b25zdDsKIyAxMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAgICAg
dmlydHVhbCB2b2lkIFNldENhcGFjaXR5KCBzaXplX3R5cGUgKSB7IH0KIyAxNDMgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAgICAgdmlydHVhbCB2b2lkIFNldExlbmd0
aCggc2l6ZV90eXBlICkgeyB9CgoKICAgICAgdm9pZAogICAgICBUcnVuY2F0ZSggc2l6ZV90eXBl
IGFOZXdMZW5ndGg9MCApCiAgICAgICAgewogICAgICAgICAge307CgogICAgICAgICAgaWYgKCBh
TmV3TGVuZ3RoIDwgdGhpcy0+TGVuZ3RoKCkgKQogICAgICAgICAgICBTZXRMZW5ndGgoYU5ld0xl
bmd0aCk7CiAgICAgICAgfQojIDE3OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmlu
Zy5oIgogICAgICB2b2lkIEFzc2lnbiggY29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7IEFz
c2lnbkZyb21SZWFkYWJsZShhUmVhZGFibGUpOyB9CiAgICAgIGlubGluZSB2b2lkIEFzc2lnbigg
Y29uc3QgcHJvbWlzZV90eXBlJiBhUmVhZGFibGUgKTsKICAgICAgdm9pZCBBc3NpZ24oIGNvbnN0
IGNoYXJfdHlwZSogYVB0ciApIHsgYVB0ciA/IGRvX0Fzc2lnbkZyb21FbGVtZW50UHRyKGFQdHIp
IDogU2V0TGVuZ3RoKDApOyB9CiAgICAgIHZvaWQgQXNzaWduKCBjb25zdCBjaGFyX3R5cGUqIGFQ
dHIsIHNpemVfdHlwZSBhTGVuZ3RoICkgeyBkb19Bc3NpZ25Gcm9tRWxlbWVudFB0ckxlbmd0aChh
UHRyLCBhTGVuZ3RoKTsgfQogICAgICB2b2lkIEFzc2lnbiggY2hhcl90eXBlIGFDaGFyICkgeyBk
b19Bc3NpZ25Gcm9tRWxlbWVudChhQ2hhcik7IH0KCgogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9y
PSggY29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7IEFzc2lnbihhUmVhZGFibGUpOyByZXR1
cm4gKnRoaXM7IH0KCiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3I9KCBjb25zdCBwcm9taXNlX3R5
cGUmIGFSZWFkYWJsZSApIHsgQXNzaWduKGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsgfQogICAg
ICBzZWxmX3R5cGUmIG9wZXJhdG9yPSggY29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBBc3NpZ24o
YVB0cik7IHJldHVybiAqdGhpczsgfQogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yPSggY2hhcl90
eXBlIGFDaGFyICkgeyBBc3NpZ24oYUNoYXIpOyByZXR1cm4gKnRoaXM7IH0KCgoKCgoKCiAgICAg
IHZvaWQgQXBwZW5kKCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgQXBwZW5kRnJvbVJl
YWRhYmxlKGFSZWFkYWJsZSk7IH0KICAgICAgaW5saW5lIHZvaWQgQXBwZW5kKCBjb25zdCBwcm9t
aXNlX3R5cGUmIGFSZWFkYWJsZSApOwogICAgICB2b2lkIEFwcGVuZCggY29uc3QgY2hhcl90eXBl
KiBhUHRyICkgeyBpZiAoYVB0cikgZG9fQXBwZW5kRnJvbUVsZW1lbnRQdHIoYVB0cik7IH0KICAg
ICAgdm9pZCBBcHBlbmQoIGNvbnN0IGNoYXJfdHlwZSogYVB0ciwgc2l6ZV90eXBlIGFMZW5ndGgg
KSB7IGRvX0FwcGVuZEZyb21FbGVtZW50UHRyTGVuZ3RoKGFQdHIsIGFMZW5ndGgpOyB9CiAgICAg
IHZvaWQgQXBwZW5kKCBjaGFyX3R5cGUgYUNoYXIgKSB7IGRvX0FwcGVuZEZyb21FbGVtZW50KGFD
aGFyKTsgfQoKICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcis9KCBjb25zdCBzZWxmX3R5cGUmIGFS
ZWFkYWJsZSApIHsgQXBwZW5kKGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsgfQogICAgICBzZWxm
X3R5cGUmIG9wZXJhdG9yKz0oIGNvbnN0IHByb21pc2VfdHlwZSYgYVJlYWRhYmxlICkgeyBBcHBl
bmQoYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9CiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3Ir
PSggY29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBBcHBlbmQoYVB0cik7IHJldHVybiAqdGhpczsg
fQogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yKz0oIGNoYXJfdHlwZSBhQ2hhciApIHsgQXBwZW5k
KGFDaGFyKTsgcmV0dXJuICp0aGlzOyB9CiMgMjE5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNBU3RyaW5nLmgiCiAgICAgIHZvaWQgSW5zZXJ0KCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJs
ZSwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uICkgeyBJbnNlcnRGcm9tUmVhZGFibGUoYVJlYWRhYmxl
LCBhdFBvc2l0aW9uKTsgfQogICAgICBpbmxpbmUgdm9pZCBJbnNlcnQoIGNvbnN0IHByb21pc2Vf
dHlwZSYgYVJlYWRhYmxlLCBpbmRleF90eXBlIGF0UG9zaXRpb24gKTsKICAgICAgdm9pZCBJbnNl
cnQoIGNvbnN0IGNoYXJfdHlwZSogYVB0ciwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uICkgeyBpZiAo
YVB0cikgZG9fSW5zZXJ0RnJvbUVsZW1lbnRQdHIoYVB0ciwgYXRQb3NpdGlvbik7IH0KICAgICAg
dm9pZCBJbnNlcnQoIGNvbnN0IGNoYXJfdHlwZSogYVB0ciwgaW5kZXhfdHlwZSBhdFBvc2l0aW9u
LCBzaXplX3R5cGUgYUxlbmd0aCApIHsgZG9fSW5zZXJ0RnJvbUVsZW1lbnRQdHJMZW5ndGgoYVB0
ciwgYXRQb3NpdGlvbiwgYUxlbmd0aCk7IH0KICAgICAgdm9pZCBJbnNlcnQoIGNoYXJfdHlwZSBh
Q2hhciwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uICkgeyBkb19JbnNlcnRGcm9tRWxlbWVudChhQ2hh
ciwgYXRQb3NpdGlvbik7IH0KCgoKICAgICAgdmlydHVhbCB2b2lkIEN1dCggaW5kZXhfdHlwZSBj
dXRTdGFydCwgc2l6ZV90eXBlIGN1dExlbmd0aCApOwoKCgogICAgICB2b2lkIFJlcGxhY2UoIGlu
ZGV4X3R5cGUgY3V0U3RhcnQsIHNpemVfdHlwZSBjdXRMZW5ndGgsIGNvbnN0IHNlbGZfdHlwZSYg
YVJlYWRhYmxlICkgeyBSZXBsYWNlRnJvbVJlYWRhYmxlKGN1dFN0YXJ0LCBjdXRMZW5ndGgsIGFS
ZWFkYWJsZSk7IH0KCgogICAgcHJpdmF0ZToKCiAgICAgIGluZGV4X3R5cGUgQ291bnRDaGFyKCBp
bmNvbXBhdGlibGVfY2hhcl90eXBlICkgY29uc3Q7CiAgICAgIHZvaWQgb3BlcmF0b3I9ICggaW5j
b21wYXRpYmxlX2NoYXJfdHlwZSApOwogICAgICB2b2lkIEFzc2lnbiAoIGluY29tcGF0aWJsZV9j
aGFyX3R5cGUgKTsKICAgICAgdm9pZCBvcGVyYXRvcis9ICggaW5jb21wYXRpYmxlX2NoYXJfdHlw
ZSApOwogICAgICB2b2lkIEFwcGVuZCAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUgKTsKICAgICAg
dm9pZCBJbnNlcnQgKCBpbmNvbXBhdGlibGVfY2hhcl90eXBlLCBpbmRleF90eXBlICk7CgoKICAg
IHByb3RlY3RlZDoKICAgICAgICAgICAgICB2b2lkIEFzc2lnbkZyb21SZWFkYWJsZSggY29uc3Qg
c2VsZl90eXBlJiApOwogICAgICAgICAgICAgIHZvaWQgQXNzaWduRnJvbVByb21pc2UoIGNvbnN0
IHNlbGZfdHlwZSYgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21SZWFkYWJsZSgg
Y29uc3Qgc2VsZl90eXBlJiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXNzaWduRnJvbUVsZW1l
bnRQdHIoIGNvbnN0IGNoYXJfdHlwZSogKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZy
b21FbGVtZW50UHRyTGVuZ3RoKCBjb25zdCBjaGFyX3R5cGUqLCBzaXplX3R5cGUgKTsKICAgICAg
dmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21FbGVtZW50KCBjaGFyX3R5cGUgKTsKCiAgICAgICAg
ICAgICAgdm9pZCBBcHBlbmRGcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAg
ICAgICAgICB2b2lkIEFwcGVuZEZyb21Qcm9taXNlKCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAg
IHZpcnR1YWwgdm9pZCBkb19BcHBlbmRGcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYgKTsK
ICAgICAgdmlydHVhbCB2b2lkIGRvX0FwcGVuZEZyb21FbGVtZW50UHRyKCBjb25zdCBjaGFyX3R5
cGUqICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19BcHBlbmRGcm9tRWxlbWVudFB0ckxlbmd0aCgg
Y29uc3QgY2hhcl90eXBlKiwgc2l6ZV90eXBlICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19BcHBl
bmRGcm9tRWxlbWVudCggY2hhcl90eXBlICk7CgogICAgICAgICAgICAgIHZvaWQgSW5zZXJ0RnJv
bVJlYWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmLCBpbmRleF90eXBlICk7CiAgICAgICAgICAgICAg
dm9pZCBJbnNlcnRGcm9tUHJvbWlzZSggY29uc3Qgc2VsZl90eXBlJiwgaW5kZXhfdHlwZSApOwog
ICAgICB2aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJvbVJlYWRhYmxlKCBjb25zdCBzZWxmX3R5cGUm
LCBpbmRleF90eXBlICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19JbnNlcnRGcm9tRWxlbWVudFB0
ciggY29uc3QgY2hhcl90eXBlKiwgaW5kZXhfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9f
SW5zZXJ0RnJvbUVsZW1lbnRQdHJMZW5ndGgoIGNvbnN0IGNoYXJfdHlwZSosIGluZGV4X3R5cGUs
IHNpemVfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJvbUVsZW1lbnQoIGNo
YXJfdHlwZSwgaW5kZXhfdHlwZSApOwoKICAgICAgICAgICAgICB2b2lkIFJlcGxhY2VGcm9tUmVh
ZGFibGUoIGluZGV4X3R5cGUsIHNpemVfdHlwZSwgY29uc3Qgc2VsZl90eXBlJiApOwogICAgICAg
ICAgICAgIHZvaWQgUmVwbGFjZUZyb21Qcm9taXNlKCBpbmRleF90eXBlLCBzaXplX3R5cGUsIGNv
bnN0IHNlbGZfdHlwZSYgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX1JlcGxhY2VGcm9tUmVhZGFi
bGUoIGluZGV4X3R5cGUsIHNpemVfdHlwZSwgY29uc3Qgc2VsZl90eXBlJiApOwoKCgogICAgcHVi
bGljOgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSogR2V0UmVhZGFibGVGcmFnbWVudCgg
bnNSZWFkYWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50
MzIgPSAwICkgY29uc3QgPSAwOwogICAgICB2aXJ0dWFsIGNoYXJfdHlwZSogR2V0V3JpdGFibGVG
cmFnbWVudCggbnNXcml0YWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mLCBuc0ZyYWdtZW50UmVxdWVz
dCwgUFJVaW50MzIgPSAwICkgPSAwOwogICAgICB2aXJ0dWFsIFBSQm9vbCBJc0RlcGVuZGVudE9u
KCBjb25zdCBzZWxmX3R5cGUmIGFTdHJpbmcgKSBjb25zdCB7IHJldHVybiAmYVN0cmluZyA9PSB0
aGlzOyB9CiAgfTsKCmNsYXNzIG5zQUNTdHJpbmcKICAgIDogcHVibGljIG5zUHJpdmF0ZVNoYXJh
YmxlQ1N0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBuc0FDU3RyaW5nIHNlbGZf
dHlwZTsKICAgICAgdHlwZWRlZiBuc0FQcm9taXNlQ1N0cmluZyBwcm9taXNlX3R5cGU7CiAgICAg
IHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgUFJVbmljaGFyIGluY29tcGF0
aWJsZV9jaGFyX3R5cGU7CgoKICAgICAgdHlwZWRlZiBuc1JlYWRpbmdJdGVyYXRvcjxjaGFyX3R5
cGU+IGNvbnN0X2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIG5zV3JpdGluZ0l0ZXJhdG9yPGNoYXJf
dHlwZT4gaXRlcmF0b3I7CgogICAgICB0eXBlZGVmIFBSVWludDMyIHNpemVfdHlwZTsKICAgICAg
dHlwZWRlZiBQUlVpbnQzMiBpbmRleF90eXBlOwoKCgoKCgogICAgICB2aXJ0dWFsIH5uc0FDU3Ry
aW5nKCkgeyB9CgogICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3ImIEJlZ2luUmVhZGluZyggY29u
c3RfaXRlcmF0b3ImICkgY29uc3Q7CiAgICAgIGlubGluZSBjb25zdF9pdGVyYXRvciYgRW5kUmVh
ZGluZyggY29uc3RfaXRlcmF0b3ImICkgY29uc3Q7CgogICAgICBpbmxpbmUgaXRlcmF0b3ImIEJl
Z2luV3JpdGluZyggaXRlcmF0b3ImICk7CiAgICAgIGlubGluZSBpdGVyYXRvciYgRW5kV3JpdGlu
ZyggaXRlcmF0b3ImICk7CgogICAgICB2aXJ0dWFsIHNpemVfdHlwZSBMZW5ndGgoKSBjb25zdCA9
IDA7CiAgICAgIFBSQm9vbCBJc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gTGVuZ3RoKCkgPT0gMDsg
fQoKICAgICAgaW5saW5lIFBSQm9vbCBFcXVhbHMoIGNvbnN0IHNlbGZfdHlwZSYgKSBjb25zdDsK
ICAgICAgUFJCb29sIEVxdWFscyggY29uc3QgY2hhcl90eXBlKiApIGNvbnN0OwoKCgoKCgoKICAg
ICAgY2hhcl90eXBlIEZpcnN0KCkgY29uc3Q7CiAgICAgIGNoYXJfdHlwZSBMYXN0KCkgY29uc3Q7
CgogICAgICBzaXplX3R5cGUgQ291bnRDaGFyKCBjaGFyX3R5cGUgKSBjb25zdDsKIyAzNDIgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAgICAgc2l6ZV90eXBlIExlZnQo
IHNlbGZfdHlwZSYsIHNpemVfdHlwZSApIGNvbnN0OwogICAgICBzaXplX3R5cGUgTWlkKCBzZWxm
X3R5cGUmLCBQUlVpbnQzMiwgUFJVaW50MzIgKSBjb25zdDsKICAgICAgc2l6ZV90eXBlIFJpZ2h0
KCBzZWxmX3R5cGUmLCBzaXplX3R5cGUgKSBjb25zdDsKCgogICAgICBQUkludDMyIEZpbmRDaGFy
KCBjaGFyX3R5cGUsIFBSVWludDMyIGFPZmZzZXQgPSAwICkgY29uc3Q7CiMgMzU4ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNBU3RyaW5nLmgiCiAgICAgIHZpcnR1YWwgdm9pZCBTZXRDYXBh
Y2l0eSggc2l6ZV90eXBlICkgeyB9CiMgMzczICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNB
U3RyaW5nLmgiCiAgICAgIHZpcnR1YWwgdm9pZCBTZXRMZW5ndGgoIHNpemVfdHlwZSApIHsgfQoK
CiAgICAgIHZvaWQKICAgICAgVHJ1bmNhdGUoIHNpemVfdHlwZSBhTmV3TGVuZ3RoPTAgKQogICAg
ICAgIHsKICAgICAgICAgIHt9OwoKICAgICAgICAgIGlmICggYU5ld0xlbmd0aCA8IHRoaXMtPkxl
bmd0aCgpICkKICAgICAgICAgICAgU2V0TGVuZ3RoKGFOZXdMZW5ndGgpOwogICAgICAgIH0KIyA0
MDggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAgICAgdm9pZCBBc3Np
Z24oIGNvbnN0IHNlbGZfdHlwZSYgYVJlYWRhYmxlICkgeyBBc3NpZ25Gcm9tUmVhZGFibGUoYVJl
YWRhYmxlKTsgfQogICAgICBpbmxpbmUgdm9pZCBBc3NpZ24oIGNvbnN0IHByb21pc2VfdHlwZSYg
YVJlYWRhYmxlICk7CiAgICAgIHZvaWQgQXNzaWduKCBjb25zdCBjaGFyX3R5cGUqIGFQdHIgKSB7
IGFQdHIgPyBkb19Bc3NpZ25Gcm9tRWxlbWVudFB0cihhUHRyKSA6IFNldExlbmd0aCgwKTsgfQog
ICAgICB2b2lkIEFzc2lnbiggY29uc3QgY2hhcl90eXBlKiBhUHRyLCBzaXplX3R5cGUgYUxlbmd0
aCApIHsgZG9fQXNzaWduRnJvbUVsZW1lbnRQdHJMZW5ndGgoYVB0ciwgYUxlbmd0aCk7IH0KICAg
ICAgdm9pZCBBc3NpZ24oIGNoYXJfdHlwZSBhQ2hhciApIHsgZG9fQXNzaWduRnJvbUVsZW1lbnQo
YUNoYXIpOyB9CgoKICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcj0oIGNvbnN0IHNlbGZfdHlwZSYg
YVJlYWRhYmxlICkgeyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9CgogICAgICBz
ZWxmX3R5cGUmIG9wZXJhdG9yPSggY29uc3QgcHJvbWlzZV90eXBlJiBhUmVhZGFibGUgKSB7IEFz
c2lnbihhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KICAgICAgc2VsZl90eXBlJiBvcGVyYXRv
cj0oIGNvbnN0IGNoYXJfdHlwZSogYVB0ciApIHsgQXNzaWduKGFQdHIpOyByZXR1cm4gKnRoaXM7
IH0KICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcj0oIGNoYXJfdHlwZSBhQ2hhciApIHsgQXNzaWdu
KGFDaGFyKTsgcmV0dXJuICp0aGlzOyB9CgoKCgoKCgogICAgICB2b2lkIEFwcGVuZCggY29uc3Qg
c2VsZl90eXBlJiBhUmVhZGFibGUgKSB7IEFwcGVuZEZyb21SZWFkYWJsZShhUmVhZGFibGUpOyB9
CiAgICAgIGlubGluZSB2b2lkIEFwcGVuZCggY29uc3QgcHJvbWlzZV90eXBlJiBhUmVhZGFibGUg
KTsKICAgICAgdm9pZCBBcHBlbmQoIGNvbnN0IGNoYXJfdHlwZSogYVB0ciApIHsgaWYgKGFQdHIp
IGRvX0FwcGVuZEZyb21FbGVtZW50UHRyKGFQdHIpOyB9CiAgICAgIHZvaWQgQXBwZW5kKCBjb25z
dCBjaGFyX3R5cGUqIGFQdHIsIHNpemVfdHlwZSBhTGVuZ3RoICkgeyBkb19BcHBlbmRGcm9tRWxl
bWVudFB0ckxlbmd0aChhUHRyLCBhTGVuZ3RoKTsgfQogICAgICB2b2lkIEFwcGVuZCggY2hhcl90
eXBlIGFDaGFyICkgeyBkb19BcHBlbmRGcm9tRWxlbWVudChhQ2hhcik7IH0KCiAgICAgIHNlbGZf
dHlwZSYgb3BlcmF0b3IrPSggY29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7IEFwcGVuZChh
UmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcis9KCBj
b25zdCBwcm9taXNlX3R5cGUmIGFSZWFkYWJsZSApIHsgQXBwZW5kKGFSZWFkYWJsZSk7IHJldHVy
biAqdGhpczsgfQogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yKz0oIGNvbnN0IGNoYXJfdHlwZSog
YVB0ciApIHsgQXBwZW5kKGFQdHIpOyByZXR1cm4gKnRoaXM7IH0KICAgICAgc2VsZl90eXBlJiBv
cGVyYXRvcis9KCBjaGFyX3R5cGUgYUNoYXIgKSB7IEFwcGVuZChhQ2hhcik7IHJldHVybiAqdGhp
czsgfQojIDQ0OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5oIgogICAgICB2
b2lkIEluc2VydCggY29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUsIGluZGV4X3R5cGUgYXRQb3Np
dGlvbiApIHsgSW5zZXJ0RnJvbVJlYWRhYmxlKGFSZWFkYWJsZSwgYXRQb3NpdGlvbik7IH0KICAg
ICAgaW5saW5lIHZvaWQgSW5zZXJ0KCBjb25zdCBwcm9taXNlX3R5cGUmIGFSZWFkYWJsZSwgaW5k
ZXhfdHlwZSBhdFBvc2l0aW9uICk7CiAgICAgIHZvaWQgSW5zZXJ0KCBjb25zdCBjaGFyX3R5cGUq
IGFQdHIsIGluZGV4X3R5cGUgYXRQb3NpdGlvbiApIHsgaWYgKGFQdHIpIGRvX0luc2VydEZyb21F
bGVtZW50UHRyKGFQdHIsIGF0UG9zaXRpb24pOyB9CiAgICAgIHZvaWQgSW5zZXJ0KCBjb25zdCBj
aGFyX3R5cGUqIGFQdHIsIGluZGV4X3R5cGUgYXRQb3NpdGlvbiwgc2l6ZV90eXBlIGFMZW5ndGgg
KSB7IGRvX0luc2VydEZyb21FbGVtZW50UHRyTGVuZ3RoKGFQdHIsIGF0UG9zaXRpb24sIGFMZW5n
dGgpOyB9CiAgICAgIHZvaWQgSW5zZXJ0KCBjaGFyX3R5cGUgYUNoYXIsIGluZGV4X3R5cGUgYXRQ
b3NpdGlvbiApIHsgZG9fSW5zZXJ0RnJvbUVsZW1lbnQoYUNoYXIsIGF0UG9zaXRpb24pOyB9CgoK
CiAgICAgIHZpcnR1YWwgdm9pZCBDdXQoIGluZGV4X3R5cGUgY3V0U3RhcnQsIHNpemVfdHlwZSBj
dXRMZW5ndGggKTsKCgoKICAgICAgdm9pZCBSZXBsYWNlKCBpbmRleF90eXBlIGN1dFN0YXJ0LCBz
aXplX3R5cGUgY3V0TGVuZ3RoLCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgUmVwbGFj
ZUZyb21SZWFkYWJsZShjdXRTdGFydCwgY3V0TGVuZ3RoLCBhUmVhZGFibGUpOyB9CgoKICAgIHBy
aXZhdGU6CgogICAgICBpbmRleF90eXBlIENvdW50Q2hhciggaW5jb21wYXRpYmxlX2NoYXJfdHlw
ZSApIGNvbnN0OwogICAgICB2b2lkIG9wZXJhdG9yPSAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUg
KTsKICAgICAgdm9pZCBBc3NpZ24gKCBpbmNvbXBhdGlibGVfY2hhcl90eXBlICk7CiAgICAgIHZv
aWQgb3BlcmF0b3IrPSAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUgKTsKICAgICAgdm9pZCBBcHBl
bmQgKCBpbmNvbXBhdGlibGVfY2hhcl90eXBlICk7CiAgICAgIHZvaWQgSW5zZXJ0ICggaW5jb21w
YXRpYmxlX2NoYXJfdHlwZSwgaW5kZXhfdHlwZSApOwoKCiAgICBwcm90ZWN0ZWQ6CiAgICAgICAg
ICAgICAgdm9pZCBBc3NpZ25Gcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAg
ICAgICAgICB2b2lkIEFzc2lnbkZyb21Qcm9taXNlKCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAg
IHZpcnR1YWwgdm9pZCBkb19Bc3NpZ25Gcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYgKTsK
ICAgICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21FbGVtZW50UHRyKCBjb25zdCBjaGFyX3R5
cGUqICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19Bc3NpZ25Gcm9tRWxlbWVudFB0ckxlbmd0aCgg
Y29uc3QgY2hhcl90eXBlKiwgc2l6ZV90eXBlICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19Bc3Np
Z25Gcm9tRWxlbWVudCggY2hhcl90eXBlICk7CgogICAgICAgICAgICAgIHZvaWQgQXBwZW5kRnJv
bVJlYWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAgICAgICAgICAgdm9pZCBBcHBlbmRG
cm9tUHJvbWlzZSggY29uc3Qgc2VsZl90eXBlJiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXBw
ZW5kRnJvbVJlYWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAgIHZpcnR1YWwgdm9pZCBk
b19BcHBlbmRGcm9tRWxlbWVudFB0ciggY29uc3QgY2hhcl90eXBlKiApOwogICAgICB2aXJ0dWFs
IHZvaWQgZG9fQXBwZW5kRnJvbUVsZW1lbnRQdHJMZW5ndGgoIGNvbnN0IGNoYXJfdHlwZSosIHNp
emVfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXBwZW5kRnJvbUVsZW1lbnQoIGNoYXJf
dHlwZSApOwoKICAgICAgICAgICAgICB2b2lkIEluc2VydEZyb21SZWFkYWJsZSggY29uc3Qgc2Vs
Zl90eXBlJiwgaW5kZXhfdHlwZSApOwogICAgICAgICAgICAgIHZvaWQgSW5zZXJ0RnJvbVByb21p
c2UoIGNvbnN0IHNlbGZfdHlwZSYsIGluZGV4X3R5cGUgKTsKICAgICAgdmlydHVhbCB2b2lkIGRv
X0luc2VydEZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90eXBlJiwgaW5kZXhfdHlwZSApOwogICAg
ICB2aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJvbUVsZW1lbnRQdHIoIGNvbnN0IGNoYXJfdHlwZSos
IGluZGV4X3R5cGUgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0luc2VydEZyb21FbGVtZW50UHRy
TGVuZ3RoKCBjb25zdCBjaGFyX3R5cGUqLCBpbmRleF90eXBlLCBzaXplX3R5cGUgKTsKICAgICAg
dmlydHVhbCB2b2lkIGRvX0luc2VydEZyb21FbGVtZW50KCBjaGFyX3R5cGUsIGluZGV4X3R5cGUg
KTsKCiAgICAgICAgICAgICAgdm9pZCBSZXBsYWNlRnJvbVJlYWRhYmxlKCBpbmRleF90eXBlLCBz
aXplX3R5cGUsIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgICAgICAgICB2b2lkIFJlcGxhY2VG
cm9tUHJvbWlzZSggaW5kZXhfdHlwZSwgc2l6ZV90eXBlLCBjb25zdCBzZWxmX3R5cGUmICk7CiAg
ICAgIHZpcnR1YWwgdm9pZCBkb19SZXBsYWNlRnJvbVJlYWRhYmxlKCBpbmRleF90eXBlLCBzaXpl
X3R5cGUsIGNvbnN0IHNlbGZfdHlwZSYgKTsKCgoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBj
b25zdCBjaGFyX3R5cGUqIEdldFJlYWRhYmxlRnJhZ21lbnQoIG5zUmVhZGFibGVGcmFnbWVudDxj
aGFyX3R5cGU+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyID0gMCApIGNvbnN0ID0gMDsK
ICAgICAgdmlydHVhbCBjaGFyX3R5cGUqIEdldFdyaXRhYmxlRnJhZ21lbnQoIG5zV3JpdGFibGVG
cmFnbWVudDxjaGFyX3R5cGU+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyID0gMCApID0g
MDsKICAgICAgdmlydHVhbCBQUkJvb2wgSXNEZXBlbmRlbnRPbiggY29uc3Qgc2VsZl90eXBlJiBh
U3RyaW5nICkgY29uc3QgeyByZXR1cm4gJmFTdHJpbmcgPT0gdGhpczsgfQogIH07CgojIDEgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FQcm9taXNlU3RyaW5nLmgiIDEKIyAzNSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zQVByb21pc2VTdHJpbmcuaCIKY2xhc3MgbnNBUHJvbWlzZVN0
cmluZyA6IHB1YmxpYyBuc0FTdHJpbmcgeyB9OwpjbGFzcyBuc0FQcm9taXNlQ1N0cmluZyA6IHB1
YmxpYyBuc0FDU3RyaW5nIHsgfTsKIyA1MDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FT
dHJpbmcuaCIgMgoKaW5saW5lCnZvaWQKbnNBU3RyaW5nOjpBc3NpZ24oIGNvbnN0IG5zQVByb21p
c2VTdHJpbmcmIGFSZWFkYWJsZSApCiAgewogICAgQXNzaWduRnJvbVByb21pc2UoYVJlYWRhYmxl
KTsKICB9CgppbmxpbmUKdm9pZApuc0FTdHJpbmc6OkFwcGVuZCggY29uc3QgbnNBUHJvbWlzZVN0
cmluZyYgYVJlYWRhYmxlICkKICB7CiAgICBBcHBlbmRGcm9tUHJvbWlzZShhUmVhZGFibGUpOwog
IH0KCmlubGluZQp2b2lkCm5zQVN0cmluZzo6SW5zZXJ0KCBjb25zdCBuc0FQcm9taXNlU3RyaW5n
JiBhUmVhZGFibGUsIGluZGV4X3R5cGUgYXRQb3NpdGlvbiApCiAgewogICAgSW5zZXJ0RnJvbVBy
b21pc2UoYVJlYWRhYmxlLCBhdFBvc2l0aW9uKTsKICB9CgppbmxpbmUKdm9pZApuc0FDU3RyaW5n
OjpBc3NpZ24oIGNvbnN0IG5zQVByb21pc2VDU3RyaW5nJiBhUmVhZGFibGUgKQogIHsKICAgIEFz
c2lnbkZyb21Qcm9taXNlKGFSZWFkYWJsZSk7CiAgfQoKaW5saW5lCnZvaWQKbnNBQ1N0cmluZzo6
QXBwZW5kKCBjb25zdCBuc0FQcm9taXNlQ1N0cmluZyYgYVJlYWRhYmxlICkKICB7CiAgICBBcHBl
bmRGcm9tUHJvbWlzZShhUmVhZGFibGUpOwogIH0KCmlubGluZQp2b2lkCm5zQUNTdHJpbmc6Oklu
c2VydCggY29uc3QgbnNBUHJvbWlzZUNTdHJpbmcmIGFSZWFkYWJsZSwgaW5kZXhfdHlwZSBhdFBv
c2l0aW9uICkKICB7CiAgICBJbnNlcnRGcm9tUHJvbWlzZShhUmVhZGFibGUsIGF0UG9zaXRpb24p
OwogIH0KCgoKCgppbmxpbmUKbnNBU3RyaW5nOjpjb25zdF9pdGVyYXRvciYKbnNBU3RyaW5nOjpC
ZWdpblJlYWRpbmcoIGNvbnN0X2l0ZXJhdG9yJiBhUmVzdWx0ICkgY29uc3QKICB7CiAgICBhUmVz
dWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0UmVhZGFibGVGcmFnbWVudChhUmVzdWx0
Lm1GcmFnbWVudCwga0ZpcnN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRpb24gPSBhUmVz
dWx0Lm1GcmFnbWVudC5tU3RhcnQ7CiAgICBhUmVzdWx0Lm5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAg
ICByZXR1cm4gYVJlc3VsdDsKICB9CgppbmxpbmUKbnNBU3RyaW5nOjpjb25zdF9pdGVyYXRvciYK
bnNBU3RyaW5nOjpFbmRSZWFkaW5nKCBjb25zdF9pdGVyYXRvciYgYVJlc3VsdCApIGNvbnN0CiAg
ewogICAgYVJlc3VsdC5tT3duaW5nU3RyaW5nID0gdGhpczsKICAgIEdldFJlYWRhYmxlRnJhZ21l
bnQoYVJlc3VsdC5tRnJhZ21lbnQsIGtMYXN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRp
b24gPSBhUmVzdWx0Lm1GcmFnbWVudC5tRW5kOwoKICAgIHJldHVybiBhUmVzdWx0OwogIH0KCmlu
bGluZQpuc0FTdHJpbmc6Oml0ZXJhdG9yJgpuc0FTdHJpbmc6OkJlZ2luV3JpdGluZyggaXRlcmF0
b3ImIGFSZXN1bHQgKQogIHsKICAgIGFSZXN1bHQubU93bmluZ1N0cmluZyA9IHRoaXM7CiAgICBH
ZXRXcml0YWJsZUZyYWdtZW50KGFSZXN1bHQubUZyYWdtZW50LCBrRmlyc3RGcmFnbWVudCk7CiAg
ICBhUmVzdWx0Lm1Qb3NpdGlvbiA9IGFSZXN1bHQubUZyYWdtZW50Lm1TdGFydDsKICAgIGFSZXN1
bHQubm9ybWFsaXplX2ZvcndhcmQoKTsKICAgIHJldHVybiBhUmVzdWx0OwogIH0KCgppbmxpbmUK
bnNBU3RyaW5nOjppdGVyYXRvciYKbnNBU3RyaW5nOjpFbmRXcml0aW5nKCBpdGVyYXRvciYgYVJl
c3VsdCApCiAgewogICAgYVJlc3VsdC5tT3duaW5nU3RyaW5nID0gdGhpczsKICAgIEdldFdyaXRh
YmxlRnJhZ21lbnQoYVJlc3VsdC5tRnJhZ21lbnQsIGtMYXN0RnJhZ21lbnQpOwogICAgYVJlc3Vs
dC5tUG9zaXRpb24gPSBhUmVzdWx0Lm1GcmFnbWVudC5tRW5kOwoKICAgIHJldHVybiBhUmVzdWx0
OwogIH0KCmNsYXNzIG5zU3RyaW5nQ29tcGFyYXRvcgogIHsKICAgIHB1YmxpYzoKICAgICAgdmly
dHVhbCBpbnQgb3BlcmF0b3IoKSggY29uc3QgUFJVbmljaGFyKiwgY29uc3QgUFJVbmljaGFyKiwg
UFJVaW50MzIgYUxlbmd0aCApIGNvbnN0ID0gMDsKICB9OwoKY2xhc3MgbnNEZWZhdWx0U3RyaW5n
Q29tcGFyYXRvcgogICAgOiBwdWJsaWMgbnNTdHJpbmdDb21wYXJhdG9yCiAgewogICAgcHVibGlj
OgogICAgICB2aXJ0dWFsIGludCBvcGVyYXRvcigpKCBjb25zdCBQUlVuaWNoYXIqLCBjb25zdCBQ
UlVuaWNoYXIqLCBQUlVpbnQzMiBhTGVuZ3RoICkgY29uc3Q7CiAgfTsKCmNsYXNzIG5zQ2FzZUlu
c2Vuc2l0aXZlU3RyaW5nQ29tcGFyYXRvcgogICAgOiBwdWJsaWMgbnNTdHJpbmdDb21wYXJhdG9y
CiAgewogICAgcHVibGljOgogICAgICB2aXJ0dWFsIGludCBvcGVyYXRvcigpKCBjb25zdCBQUlVu
aWNoYXIqLCBjb25zdCBQUlVuaWNoYXIqLCBQUlVpbnQzMiBhTGVuZ3RoICkgY29uc3Q7CiAgfTsK
CiAgICAgICBpbnQgQ29tcGFyZSggY29uc3QgbnNBU3RyaW5nJiBsaHMsIGNvbnN0IG5zQVN0cmlu
ZyYgcmhzLCBjb25zdCBuc1N0cmluZ0NvbXBhcmF0b3ImID0gbnNEZWZhdWx0U3RyaW5nQ29tcGFy
YXRvcigpICk7CgppbmxpbmUKUFJCb29sCm5zQVN0cmluZzo6RXF1YWxzKCBjb25zdCBzZWxmX3R5
cGUmIHJocyApIGNvbnN0CiAgewogICAgcmV0dXJuIExlbmd0aCgpPT1yaHMuTGVuZ3RoKCkgJiYg
Q29tcGFyZSgqdGhpcywgcmhzKT09MDsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yIT0oIGNv
bnN0IG5zQVN0cmluZyYgbGhzLCBjb25zdCBuc0FTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJu
ICFsaHMuRXF1YWxzKHJocyk7CiAgfQoKaW5saW5lClBSQm9vbApvcGVyYXRvcjwgKCBjb25zdCBu
c0FTdHJpbmcmIGxocywgY29uc3QgbnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBDb21w
YXJlKGxocywgcmhzKTwgMDsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPD0oIGNvbnN0IG5z
QVN0cmluZyYgbGhzLCBjb25zdCBuc0FTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBh
cmUobGhzLCByaHMpPD0wOwogIH0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3I9PSggY29uc3QgbnNB
U3RyaW5nJiBsaHMsIGNvbnN0IG5zQVN0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gbGhzLkVx
dWFscyhyaHMpOwogIH0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3I+PSggY29uc3QgbnNBU3RyaW5n
JiBsaHMsIGNvbnN0IG5zQVN0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gQ29tcGFyZShsaHMs
IHJocyk+PTA7CiAgfQoKaW5saW5lClBSQm9vbApvcGVyYXRvcj4gKCBjb25zdCBuc0FTdHJpbmcm
IGxocywgY29uc3QgbnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBDb21wYXJlKGxocywg
cmhzKT4gMDsKICB9CgppbmxpbmUKbnNBU3RyaW5nOjpzaXplX3R5cGUKbnNBU3RyaW5nOjpMZWZ0
KCBuc0FTdHJpbmcmIGFSZXN1bHQsIHNpemVfdHlwZSBhTGVuZ3RoVG9Db3B5ICkgY29uc3QKICB7
CiAgICByZXR1cm4gTWlkKGFSZXN1bHQsIDAsIGFMZW5ndGhUb0NvcHkpOwogIH0KCgoKCgoKaW5s
aW5lCm5zQUNTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJgpuc0FDU3RyaW5nOjpCZWdpblJlYWRpbmco
IGNvbnN0X2l0ZXJhdG9yJiBhUmVzdWx0ICkgY29uc3QKICB7CiAgICBhUmVzdWx0Lm1Pd25pbmdT
dHJpbmcgPSB0aGlzOwogICAgR2V0UmVhZGFibGVGcmFnbWVudChhUmVzdWx0Lm1GcmFnbWVudCwg
a0ZpcnN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRpb24gPSBhUmVzdWx0Lm1GcmFnbWVu
dC5tU3RhcnQ7CiAgICBhUmVzdWx0Lm5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICByZXR1cm4gYVJl
c3VsdDsKICB9CgppbmxpbmUKbnNBQ1N0cmluZzo6Y29uc3RfaXRlcmF0b3ImCm5zQUNTdHJpbmc6
OkVuZFJlYWRpbmcoIGNvbnN0X2l0ZXJhdG9yJiBhUmVzdWx0ICkgY29uc3QKICB7CiAgICBhUmVz
dWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0UmVhZGFibGVGcmFnbWVudChhUmVzdWx0
Lm1GcmFnbWVudCwga0xhc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0Lm1Qb3NpdGlvbiA9IGFSZXN1
bHQubUZyYWdtZW50Lm1FbmQ7CgogICAgcmV0dXJuIGFSZXN1bHQ7CiAgfQoKaW5saW5lCm5zQUNT
dHJpbmc6Oml0ZXJhdG9yJgpuc0FDU3RyaW5nOjpCZWdpbldyaXRpbmcoIGl0ZXJhdG9yJiBhUmVz
dWx0ICkKICB7CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0V3JpdGFi
bGVGcmFnbWVudChhUmVzdWx0Lm1GcmFnbWVudCwga0ZpcnN0RnJhZ21lbnQpOwogICAgYVJlc3Vs
dC5tUG9zaXRpb24gPSBhUmVzdWx0Lm1GcmFnbWVudC5tU3RhcnQ7CiAgICBhUmVzdWx0Lm5vcm1h
bGl6ZV9mb3J3YXJkKCk7CiAgICByZXR1cm4gYVJlc3VsdDsKICB9CgoKaW5saW5lCm5zQUNTdHJp
bmc6Oml0ZXJhdG9yJgpuc0FDU3RyaW5nOjpFbmRXcml0aW5nKCBpdGVyYXRvciYgYVJlc3VsdCAp
CiAgewogICAgYVJlc3VsdC5tT3duaW5nU3RyaW5nID0gdGhpczsKICAgIEdldFdyaXRhYmxlRnJh
Z21lbnQoYVJlc3VsdC5tRnJhZ21lbnQsIGtMYXN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9z
aXRpb24gPSBhUmVzdWx0Lm1GcmFnbWVudC5tRW5kOwoKICAgIHJldHVybiBhUmVzdWx0OwogIH0K
CgpjbGFzcyBuc0NTdHJpbmdDb21wYXJhdG9yCiAgewogICAgcHVibGljOgogICAgICB2aXJ0dWFs
IGludCBvcGVyYXRvcigpKCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIFBSVWludDMyIGFMZW5n
dGggKSBjb25zdCA9IDA7CiAgfTsKCmNsYXNzIG5zRGVmYXVsdENTdHJpbmdDb21wYXJhdG9yCiAg
ICA6IHB1YmxpYyBuc0NTdHJpbmdDb21wYXJhdG9yCiAgewogICAgcHVibGljOgogICAgICB2aXJ0
dWFsIGludCBvcGVyYXRvcigpKCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIFBSVWludDMyIGFM
ZW5ndGggKSBjb25zdDsKICB9OwoKY2xhc3MgbnNDYXNlSW5zZW5zaXRpdmVDU3RyaW5nQ29tcGFy
YXRvcgogICAgOiBwdWJsaWMgbnNDU3RyaW5nQ29tcGFyYXRvcgogIHsKICAgIHB1YmxpYzoKICAg
ICAgdmlydHVhbCBpbnQgb3BlcmF0b3IoKSggY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBQUlVp
bnQzMiBhTGVuZ3RoICkgY29uc3Q7CiAgfTsKCiAgICAgICBpbnQgQ29tcGFyZSggY29uc3QgbnNB
Q1N0cmluZyYgbGhzLCBjb25zdCBuc0FDU3RyaW5nJiByaHMsIGNvbnN0IG5zQ1N0cmluZ0NvbXBh
cmF0b3ImID0gbnNEZWZhdWx0Q1N0cmluZ0NvbXBhcmF0b3IoKSApOwoKaW5saW5lClBSQm9vbApu
c0FDU3RyaW5nOjpFcXVhbHMoIGNvbnN0IHNlbGZfdHlwZSYgcmhzICkgY29uc3QKICB7CiAgICBy
ZXR1cm4gTGVuZ3RoKCk9PXJocy5MZW5ndGgoKSAmJiBDb21wYXJlKCp0aGlzLCByaHMpPT0wOwog
IH0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3IhPSggY29uc3QgbnNBQ1N0cmluZyYgbGhzLCBjb25z
dCBuc0FDU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiAhbGhzLkVxdWFscyhyaHMpOwogIH0K
CmlubGluZQpQUkJvb2wKb3BlcmF0b3I8ICggY29uc3QgbnNBQ1N0cmluZyYgbGhzLCBjb25zdCBu
c0FDU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBDb21wYXJlKGxocywgcmhzKTwgMDsKICB9
CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPD0oIGNvbnN0IG5zQUNTdHJpbmcmIGxocywgY29uc3Qg
bnNBQ1N0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gQ29tcGFyZShsaHMsIHJocyk8PTA7CiAg
fQoKaW5saW5lClBSQm9vbApvcGVyYXRvcj09KCBjb25zdCBuc0FDU3RyaW5nJiBsaHMsIGNvbnN0
IG5zQUNTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIGxocy5FcXVhbHMocmhzKTsKICB9Cgpp
bmxpbmUKUFJCb29sCm9wZXJhdG9yPj0oIGNvbnN0IG5zQUNTdHJpbmcmIGxocywgY29uc3QgbnNB
Q1N0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gQ29tcGFyZShsaHMsIHJocyk+PTA7CiAgfQoK
aW5saW5lClBSQm9vbApvcGVyYXRvcj4gKCBjb25zdCBuc0FDU3RyaW5nJiBsaHMsIGNvbnN0IG5z
QUNTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBhcmUobGhzLCByaHMpPiAwOwogIH0K
CmlubGluZQpuc0FDU3RyaW5nOjpzaXplX3R5cGUKbnNBQ1N0cmluZzo6TGVmdCggbnNBQ1N0cmlu
ZyYgYVJlc3VsdCwgc2l6ZV90eXBlIGFMZW5ndGhUb0NvcHkgKSBjb25zdAogIHsKICAgIHJldHVy
biBNaWQoYVJlc3VsdCwgMCwgYUxlbmd0aFRvQ29weSk7CiAgfQoKCgojIDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0RlcGVuZGVudENvbmNhdGVuYXRpb24uaCIgMQojIDUwICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNEZXBlbmRlbnRDb25jYXRlbmF0aW9uLmgiCmNsYXNzIG5zRGVw
ZW5kZW50Q29uY2F0ZW5hdGlvbgogICAgOiBwdWJsaWMgbnNBUHJvbWlzZVN0cmluZwogIHsKICAg
IHB1YmxpYzoKICAgICAgdHlwZWRlZiBuc0RlcGVuZGVudENvbmNhdGVuYXRpb24gc2VsZl90eXBl
OwogICAgICB0eXBlZGVmIFBSVW5pY2hhciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgbnNBU3Ry
aW5nIHN0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHN0cmluZ190eXBlOjpjb25zdF9pdGVyYXRv
ciBjb25zdF9pdGVyYXRvcjsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgY29uc3QgY2hh
cl90eXBlKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBuc1JlYWRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBl
PiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApIGNvbnN0OwogICAgICB2aXJ0dWFsIGNo
YXJfdHlwZSogR2V0V3JpdGFibGVGcmFnbWVudCggbnNXcml0YWJsZUZyYWdtZW50PGNoYXJfdHlw
ZT4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSB7IHJldHVybiAwOyB9CgogICAgICBl
bnVtIHsga0xlZnRTdHJpbmcsIGtSaWdodFN0cmluZyB9OwoKICAgICAgaW50CiAgICAgIEdldEN1
cnJlbnRTdHJpbmdGcm9tRnJhZ21lbnQoIGNvbnN0IG5zUmVhZGFibGVGcmFnbWVudDxjaGFyX3R5
cGU+JiBhRnJhZ21lbnQgKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiAocmVpbnRl
cnByZXRfY2FzdDwgUFJVaW50MzIgPihhRnJhZ21lbnQubUZyYWdtZW50SWRlbnRpZmllcikgJiBt
RnJhZ21lbnRJZGVudGlmaWVyTWFzaykgPyBrUmlnaHRTdHJpbmcgOiBrTGVmdFN0cmluZzsKICAg
ICAgICB9CgogICAgICBpbnQKICAgICAgU2V0TGVmdFN0cmluZ0luRnJhZ21lbnQoIG5zUmVhZGFi
bGVGcmFnbWVudDxjaGFyX3R5cGU+JiBhRnJhZ21lbnQgKSBjb25zdAogICAgICAgIHsKICAgICAg
ICAgIGFGcmFnbWVudC5tRnJhZ21lbnRJZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2FzdDwgdm9p
ZCogPihyZWludGVycHJldF9jYXN0PCBQUlVpbnQzMiA+KGFGcmFnbWVudC5tRnJhZ21lbnRJZGVu
dGlmaWVyKSAmIH5tRnJhZ21lbnRJZGVudGlmaWVyTWFzayk7CiAgICAgICAgICByZXR1cm4ga0xl
ZnRTdHJpbmc7CiAgICAgICAgfQoKICAgICAgaW50CiAgICAgIFNldFJpZ2h0U3RyaW5nSW5GcmFn
bWVudCggbnNSZWFkYWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mIGFGcmFnbWVudCApIGNvbnN0CiAg
ICAgICAgewogICAgICAgICAgYUZyYWdtZW50Lm1GcmFnbWVudElkZW50aWZpZXIgPSByZWludGVy
cHJldF9jYXN0PCB2b2lkKiA+KHJlaW50ZXJwcmV0X2Nhc3Q8IFBSVWludDMyID4oYUZyYWdtZW50
Lm1GcmFnbWVudElkZW50aWZpZXIpIHwgbUZyYWdtZW50SWRlbnRpZmllck1hc2spOwogICAgICAg
ICAgcmV0dXJuIGtSaWdodFN0cmluZzsKICAgICAgICB9CgogICAgcHVibGljOgogICAgICBuc0Rl
cGVuZGVudENvbmNhdGVuYXRpb24oIGNvbnN0IHN0cmluZ190eXBlJiBhTGVmdFN0cmluZywgY29u
c3Qgc3RyaW5nX3R5cGUmIGFSaWdodFN0cmluZywgUFJVaW50MzIgYU1hc2sgPSAxICkKICAgICAg
ICAgIDogbUZyYWdtZW50SWRlbnRpZmllck1hc2soYU1hc2spCiAgICAgICAgewogICAgICAgICAg
bVN0cmluZ3Nba0xlZnRTdHJpbmddID0gJmFMZWZ0U3RyaW5nOwogICAgICAgICAgbVN0cmluZ3Nb
a1JpZ2h0U3RyaW5nXSA9ICZhUmlnaHRTdHJpbmc7CiAgICAgICAgfQoKICAgICAgbnNEZXBlbmRl
bnRDb25jYXRlbmF0aW9uKCBjb25zdCBzZWxmX3R5cGUmIGFMZWZ0U3RyaW5nLCBjb25zdCBzdHJp
bmdfdHlwZSYgYVJpZ2h0U3RyaW5nICkKICAgICAgICAgIDogbUZyYWdtZW50SWRlbnRpZmllck1h
c2soYUxlZnRTdHJpbmcubUZyYWdtZW50SWRlbnRpZmllck1hc2s8PDEpCiAgICAgICAgewogICAg
ICAgICAgbVN0cmluZ3Nba0xlZnRTdHJpbmddID0gJmFMZWZ0U3RyaW5nOwogICAgICAgICAgbVN0
cmluZ3Nba1JpZ2h0U3RyaW5nXSA9ICZhUmlnaHRTdHJpbmc7CiAgICAgICAgfQoKCgoKICAgIHBy
aXZhdGU6CgogICAgICB2b2lkIG9wZXJhdG9yPSggY29uc3Qgc2VsZl90eXBlJiApOwoKICAgIHB1
YmxpYzoKCiAgICAgIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3Q7CiAgICAgIHZpcnR1
YWwgUFJCb29sIElzRGVwZW5kZW50T24oIGNvbnN0IHN0cmluZ190eXBlJiApIGNvbnN0OwoKCgoK
ICAgICAgUFJVaW50MzIgR2V0RnJhZ21lbnRJZGVudGlmaWVyTWFzaygpIGNvbnN0IHsgcmV0dXJu
IG1GcmFnbWVudElkZW50aWZpZXJNYXNrOyB9CgogICAgcHJpdmF0ZToKICAgICAgdm9pZCBvcGVy
YXRvcisoIGNvbnN0IHNlbGZfdHlwZSYgKTsKCgoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0IHN0
cmluZ190eXBlKiBtU3RyaW5nc1syXTsKICAgICAgUFJVaW50MzIgbUZyYWdtZW50SWRlbnRpZmll
ck1hc2s7CiAgfTsKCmNsYXNzIG5zRGVwZW5kZW50Q0NvbmNhdGVuYXRpb24KICAgIDogcHVibGlj
IG5zQVByb21pc2VDU3RyaW5nCiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIG5zRGVwZW5k
ZW50Q0NvbmNhdGVuYXRpb24gc2VsZl90eXBlOwogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBl
OwogICAgICB0eXBlZGVmIG5zQUNTdHJpbmcgc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgc3Ry
aW5nX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwoKICAgIHByb3RlY3RlZDoK
ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqIEdldFJlYWRhYmxlRnJhZ21lbnQoIG5zUmVh
ZGFibGVGcmFnbWVudDxjaGFyX3R5cGU+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkg
Y29uc3Q7CiAgICAgIHZpcnR1YWwgY2hhcl90eXBlKiBHZXRXcml0YWJsZUZyYWdtZW50KCBuc1dy
aXRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBlPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiAp
IHsgcmV0dXJuIDA7IH0KCiAgICAgIGVudW0geyBrTGVmdFN0cmluZywga1JpZ2h0U3RyaW5nIH07
CgogICAgICBpbnQKICAgICAgR2V0Q3VycmVudFN0cmluZ0Zyb21GcmFnbWVudCggY29uc3QgbnNS
ZWFkYWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mIGFGcmFnbWVudCApIGNvbnN0CiAgICAgICAgewog
ICAgICAgICAgcmV0dXJuIChyZWludGVycHJldF9jYXN0PCBQUlVpbnQzMiA+KGFGcmFnbWVudC5t
RnJhZ21lbnRJZGVudGlmaWVyKSAmIG1GcmFnbWVudElkZW50aWZpZXJNYXNrKSA/IGtSaWdodFN0
cmluZyA6IGtMZWZ0U3RyaW5nOwogICAgICAgIH0KCiAgICAgIGludAogICAgICBTZXRMZWZ0U3Ry
aW5nSW5GcmFnbWVudCggbnNSZWFkYWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mIGFGcmFnbWVudCAp
IGNvbnN0CiAgICAgICAgewogICAgICAgICAgYUZyYWdtZW50Lm1GcmFnbWVudElkZW50aWZpZXIg
PSByZWludGVycHJldF9jYXN0PCB2b2lkKiA+KHJlaW50ZXJwcmV0X2Nhc3Q8IFBSVWludDMyID4o
YUZyYWdtZW50Lm1GcmFnbWVudElkZW50aWZpZXIpICYgfm1GcmFnbWVudElkZW50aWZpZXJNYXNr
KTsKICAgICAgICAgIHJldHVybiBrTGVmdFN0cmluZzsKICAgICAgICB9CgogICAgICBpbnQKICAg
ICAgU2V0UmlnaHRTdHJpbmdJbkZyYWdtZW50KCBuc1JlYWRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBl
PiYgYUZyYWdtZW50ICkgY29uc3QKICAgICAgICB7CiAgICAgICAgICBhRnJhZ21lbnQubUZyYWdt
ZW50SWRlbnRpZmllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8IHZvaWQqID4ocmVpbnRlcnByZXRfY2Fz
dDwgUFJVaW50MzIgPihhRnJhZ21lbnQubUZyYWdtZW50SWRlbnRpZmllcikgfCBtRnJhZ21lbnRJ
ZGVudGlmaWVyTWFzayk7CiAgICAgICAgICByZXR1cm4ga1JpZ2h0U3RyaW5nOwogICAgICAgIH0K
CiAgICBwdWJsaWM6CiAgICAgIG5zRGVwZW5kZW50Q0NvbmNhdGVuYXRpb24oIGNvbnN0IHN0cmlu
Z190eXBlJiBhTGVmdFN0cmluZywgY29uc3Qgc3RyaW5nX3R5cGUmIGFSaWdodFN0cmluZywgUFJV
aW50MzIgYU1hc2sgPSAxICkKICAgICAgICAgIDogbUZyYWdtZW50SWRlbnRpZmllck1hc2soYU1h
c2spCiAgICAgICAgewogICAgICAgICAgbVN0cmluZ3Nba0xlZnRTdHJpbmddID0gJmFMZWZ0U3Ry
aW5nOwogICAgICAgICAgbVN0cmluZ3Nba1JpZ2h0U3RyaW5nXSA9ICZhUmlnaHRTdHJpbmc7CiAg
ICAgICAgfQoKICAgICAgbnNEZXBlbmRlbnRDQ29uY2F0ZW5hdGlvbiggY29uc3Qgc2VsZl90eXBl
JiBhTGVmdFN0cmluZywgY29uc3Qgc3RyaW5nX3R5cGUmIGFSaWdodFN0cmluZyApCiAgICAgICAg
ICA6IG1GcmFnbWVudElkZW50aWZpZXJNYXNrKGFMZWZ0U3RyaW5nLm1GcmFnbWVudElkZW50aWZp
ZXJNYXNrPDwxKQogICAgICAgIHsKICAgICAgICAgIG1TdHJpbmdzW2tMZWZ0U3RyaW5nXSA9ICZh
TGVmdFN0cmluZzsKICAgICAgICAgIG1TdHJpbmdzW2tSaWdodFN0cmluZ10gPSAmYVJpZ2h0U3Ry
aW5nOwogICAgICAgIH0KCgoKCiAgICBwcml2YXRlOgoKICAgICAgdm9pZCBvcGVyYXRvcj0oIGNv
bnN0IHNlbGZfdHlwZSYgKTsKCiAgICBwdWJsaWM6CgogICAgICB2aXJ0dWFsIFBSVWludDMyIExl
bmd0aCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIFBSQm9vbCBJc0RlcGVuZGVudE9uKCBjb25zdCBz
dHJpbmdfdHlwZSYgKSBjb25zdDsKCgoKCiAgICAgIFBSVWludDMyIEdldEZyYWdtZW50SWRlbnRp
Zmllck1hc2soKSBjb25zdCB7IHJldHVybiBtRnJhZ21lbnRJZGVudGlmaWVyTWFzazsgfQoKICAg
IHByaXZhdGU6CiAgICAgIHZvaWQgb3BlcmF0b3IrKCBjb25zdCBzZWxmX3R5cGUmICk7CgoKCiAg
ICBwcml2YXRlOgogICAgICBjb25zdCBzdHJpbmdfdHlwZSogbVN0cmluZ3NbMl07CiAgICAgIFBS
VWludDMyIG1GcmFnbWVudElkZW50aWZpZXJNYXNrOwogIH07CiMgMjI0ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNEZXBlbmRlbnRDb25jYXRlbmF0aW9uLmgiCmlubGluZQpjb25zdCBuc0Rl
cGVuZGVudENvbmNhdGVuYXRpb24Kb3BlcmF0b3IrKCBjb25zdCBuc0RlcGVuZGVudENvbmNhdGVu
YXRpb24mIGxocywgY29uc3QgbnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBuc0RlcGVu
ZGVudENvbmNhdGVuYXRpb24obGhzLCByaHMsIGxocy5HZXRGcmFnbWVudElkZW50aWZpZXJNYXNr
KCk8PDEpOwogIH0KCmlubGluZQpjb25zdCBuc0RlcGVuZGVudENDb25jYXRlbmF0aW9uCm9wZXJh
dG9yKyggY29uc3QgbnNEZXBlbmRlbnRDQ29uY2F0ZW5hdGlvbiYgbGhzLCBjb25zdCBuc0FDU3Ry
aW5nJiByaHMgKQogIHsKICAgIHJldHVybiBuc0RlcGVuZGVudENDb25jYXRlbmF0aW9uKGxocywg
cmhzLCBsaHMuR2V0RnJhZ21lbnRJZGVudGlmaWVyTWFzaygpPDwxKTsKICB9CgppbmxpbmUKY29u
c3QgbnNEZXBlbmRlbnRDb25jYXRlbmF0aW9uCm9wZXJhdG9yKyggY29uc3QgbnNBU3RyaW5nJiBs
aHMsIGNvbnN0IG5zQVN0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gbnNEZXBlbmRlbnRDb25j
YXRlbmF0aW9uKGxocywgcmhzKTsKICB9CgppbmxpbmUKY29uc3QgbnNEZXBlbmRlbnRDQ29uY2F0
ZW5hdGlvbgpvcGVyYXRvcisoIGNvbnN0IG5zQUNTdHJpbmcmIGxocywgY29uc3QgbnNBQ1N0cmlu
ZyYgcmhzICkKICB7CiAgICByZXR1cm4gbnNEZXBlbmRlbnRDQ29uY2F0ZW5hdGlvbihsaHMsIHJo
cyk7CiAgfQojIDgxMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5oIiAyCiMg
MzEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FSZWFkYWJsZVN0cmluZy5oIiAyCgoKdHlw
ZWRlZiBjb25zdCBuc0FTdHJpbmcgbnNBUmVhZGFibGVTdHJpbmc7CnR5cGVkZWYgY29uc3QgbnNB
Q1N0cmluZyBuc0FSZWFkYWJsZUNTdHJpbmc7CgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNMaXRlcmFsU3RyaW5nLmgiIDEKIyAzMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
TGl0ZXJhbFN0cmluZy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlcGVuZGVu
dFN0cmluZy5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlcGVuZGVudFN0
cmluZy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FGbGF0U3RyaW5nLmgiIDEK
IyAzMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQUZsYXRTdHJpbmcuaCIKY2xhc3MgbnNB
RmxhdFN0cmluZwogICAgOiBwdWJsaWMgbnNBU3RyaW5nCiAgewogICAgcHVibGljOgoKICAgICAg
dmlydHVhbCBjb25zdCBQUlVuaWNoYXIqIGdldCgpIGNvbnN0OwogICAgICBQUlVuaWNoYXIgb3Bl
cmF0b3JbXSggUFJVaW50MzIgaSApIGNvbnN0IHsgcmV0dXJuIGdldCgpWyBpIF07IH0KICAgICAg
UFJVbmljaGFyIENoYXJBdCggUFJVaW50MzIgKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgUFJVaW50
MzIgTGVuZ3RoKCkgY29uc3Q7CgoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25zdCBQUlVu
aWNoYXIqIEdldFJlYWRhYmxlRnJhZ21lbnQoIG5zUmVhZGFibGVGcmFnbWVudDxQUlVuaWNoYXI+
JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29uc3Q7CiAgICAgIHZpcnR1YWwgUFJV
bmljaGFyKiBHZXRXcml0YWJsZUZyYWdtZW50KCBuc1dyaXRhYmxlRnJhZ21lbnQ8UFJVbmljaGFy
PiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApOwogIH07CgpjbGFzcyBuc0FGbGF0Q1N0
cmluZwogICAgOiBwdWJsaWMgbnNBQ1N0cmluZwogIHsKICAgIHB1YmxpYzoKCiAgICAgIHZpcnR1
YWwgY29uc3QgY2hhciogZ2V0KCkgY29uc3Q7CiAgICAgIGNoYXIgb3BlcmF0b3JbXSggUFJVaW50
MzIgaSApIGNvbnN0IHsgcmV0dXJuIGdldCgpWyBpIF07IH0KICAgICAgY2hhciBDaGFyQXQoIFBS
VWludDMyICkgY29uc3Q7CgogICAgICB2aXJ0dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0OwoK
CiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhciogR2V0UmVhZGFibGVGcmFnbWVu
dCggbnNSZWFkYWJsZUZyYWdtZW50PGNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMy
ICkgY29uc3Q7CiAgICAgIHZpcnR1YWwgY2hhciogR2V0V3JpdGFibGVGcmFnbWVudCggbnNXcml0
YWJsZUZyYWdtZW50PGNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICk7CiAgfTsK
CmlubGluZQpQUlVuaWNoYXIKbnNBRmxhdFN0cmluZzo6Q2hhckF0KCBQUlVpbnQzMiBpICkgY29u
c3QKICB7CiAgICB7fTsKICAgIHJldHVybiBvcGVyYXRvcltdKGkpOwogIH0KCmlubGluZQpjaGFy
Cm5zQUZsYXRDU3RyaW5nOjpDaGFyQXQoIFBSVWludDMyIGkgKSBjb25zdAogIHsKICAgIHt9Owog
ICAgcmV0dXJuIG9wZXJhdG9yW10oaSk7CiAgfQojIDI5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNEZXBlbmRlbnRTdHJpbmcuaCIgMgojIDQ1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNEZXBlbmRlbnRTdHJpbmcuaCIKY2xhc3MgbnNEZXBlbmRlbnRTdHJpbmcKICAgICAgOiBwdWJs
aWMgbnNBRmxhdFN0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgdm9pZAogICAgICBSZWJpbmQo
IGNvbnN0IFBSVW5pY2hhciogYVB0ciApCiAgICAgICAgewogICAgICAgICAgbUhhbmRsZS5EYXRh
U3RhcnQoYVB0cik7CiAgICAgICAgICBtSGFuZGxlLkRhdGFFbmQoYVB0ciA/IChhUHRyK25zQ2hh
clRyYWl0czxQUlVuaWNoYXI+OjpsZW5ndGgoYVB0cikpIDogMCk7CiAgICAgICAgfQoKICAgICAg
dm9pZAogICAgICBSZWJpbmQoIGNvbnN0IFBSVW5pY2hhciogYVN0YXJ0UHRyLCBjb25zdCBQUlVu
aWNoYXIqIGFFbmRQdHIgKQogICAgICAgIHsKICAgICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFT
dGFydFB0cik7CiAgICAgICAgICBtSGFuZGxlLkRhdGFFbmQoYUVuZFB0cik7CiAgICAgICAgfQoK
ICAgICAgdm9pZAogICAgICBSZWJpbmQoIGNvbnN0IFBSVW5pY2hhciogYVB0ciwgUFJVaW50MzIg
YUxlbmd0aCApCiAgICAgICAgewogICAgICAgICAgaWYgKCBhTGVuZ3RoID09IFBSVWludDMyKC0x
KSApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgUmViaW5kKGFQdHIpOwogICAgICAgICAg
ICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIFJlYmluZChhUHRyLCBhUHRyK2FMZW5ndGgp
OwogICAgICAgIH0KCiAgICAgIG5zRGVwZW5kZW50U3RyaW5nKCBjb25zdCBQUlVuaWNoYXIqIGFT
dGFydFB0ciwgY29uc3QgUFJVbmljaGFyKiBhRW5kUHRyICkgeyBSZWJpbmQoYVN0YXJ0UHRyLCBh
RW5kUHRyKTsgfQogICAgICBuc0RlcGVuZGVudFN0cmluZyggY29uc3QgUFJVbmljaGFyKiBhUHRy
LCBQUlVpbnQzMiBhTGVuZ3RoICkgeyBSZWJpbmQoYVB0ciwgYUxlbmd0aCk7IH0KICAgICAgZXhw
bGljaXQgbnNEZXBlbmRlbnRTdHJpbmcoIGNvbnN0IFBSVW5pY2hhciogYVB0ciApIHsgUmViaW5k
KGFQdHIpOyB9CgoKCgogICAgcHJpdmF0ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBu
c0RlcGVuZGVudFN0cmluZyYgKTsKCiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgY29uc3QgbnNC
dWZmZXJIYW5kbGU8UFJVbmljaGFyPiogR2V0RmxhdEJ1ZmZlckhhbmRsZSgpIGNvbnN0IHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IGNvbnN0IG5zQnVmZmVySGFuZGxlPFBSVW5pY2hhcj4qID4o
Jm1IYW5kbGUpOyB9CiAgICAgIHZpcnR1YWwgY29uc3QgbnNCdWZmZXJIYW5kbGU8UFJVbmljaGFy
PiogR2V0QnVmZmVySGFuZGxlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgY29u
c3QgbnNCdWZmZXJIYW5kbGU8UFJVbmljaGFyPiogPigmbUhhbmRsZSk7IH0KCiAgICBwcml2YXRl
OgogICAgICBuc0NvbnN0QnVmZmVySGFuZGxlPFBSVW5pY2hhcj4gbUhhbmRsZTsKICB9OwoKCgpj
bGFzcyBuc0RlcGVuZGVudENTdHJpbmcKICAgICAgOiBwdWJsaWMgbnNBRmxhdENTdHJpbmcKICB7
CiAgICBwdWJsaWM6CiAgICAgIHZvaWQKICAgICAgUmViaW5kKCBjb25zdCBjaGFyKiBhUHRyICkK
ICAgICAgICB7CiAgICAgICAgICBtSGFuZGxlLkRhdGFTdGFydChhUHRyKTsKICAgICAgICAgIG1I
YW5kbGUuRGF0YUVuZChhUHRyID8gKGFQdHIrbnNDaGFyVHJhaXRzPGNoYXI+OjpsZW5ndGgoYVB0
cikpIDogMCk7CiAgICAgICAgfQoKICAgICAgdm9pZAogICAgICBSZWJpbmQoIGNvbnN0IGNoYXIq
IGFTdGFydFB0ciwgY29uc3QgY2hhciogYUVuZFB0ciApCiAgICAgICAgewogICAgICAgICAgbUhh
bmRsZS5EYXRhU3RhcnQoYVN0YXJ0UHRyKTsKICAgICAgICAgIG1IYW5kbGUuRGF0YUVuZChhRW5k
UHRyKTsKICAgICAgICB9CgogICAgICB2b2lkCiAgICAgIFJlYmluZCggY29uc3QgY2hhciogYVB0
ciwgUFJVaW50MzIgYUxlbmd0aCApCiAgICAgICAgewogICAgICAgICAgaWYgKCBhTGVuZ3RoID09
IFBSVWludDMyKC0xKSApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgUmViaW5kKGFQdHIp
OwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIFJlYmluZChhUHRyLCBh
UHRyK2FMZW5ndGgpOwogICAgICAgIH0KCiAgICAgIG5zRGVwZW5kZW50Q1N0cmluZyggY29uc3Qg
Y2hhciogYVN0YXJ0UHRyLCBjb25zdCBjaGFyKiBhRW5kUHRyICkgeyBSZWJpbmQoYVN0YXJ0UHRy
LCBhRW5kUHRyKTsgfQogICAgICBuc0RlcGVuZGVudENTdHJpbmcoIGNvbnN0IGNoYXIqIGFQdHIs
IFBSVWludDMyIGFMZW5ndGggKSB7IFJlYmluZChhUHRyLCBhTGVuZ3RoKTsgfQogICAgICBleHBs
aWNpdCBuc0RlcGVuZGVudENTdHJpbmcoIGNvbnN0IGNoYXIqIGFQdHIgKSB7IFJlYmluZChhUHRy
KTsgfQoKCgoKICAgIHByaXZhdGU6CgogICAgICB2b2lkIG9wZXJhdG9yPSggY29uc3QgbnNEZXBl
bmRlbnRDU3RyaW5nJiApOwoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25zdCBuc0J1ZmZl
ckhhbmRsZTxjaGFyPiogR2V0RmxhdEJ1ZmZlckhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8IGNvbnN0IG5zQnVmZmVySGFuZGxlPGNoYXI+KiA+KCZtSGFuZGxlKTsgfQog
ICAgICB2aXJ0dWFsIGNvbnN0IG5zQnVmZmVySGFuZGxlPGNoYXI+KiBHZXRCdWZmZXJIYW5kbGUo
KSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PCBjb25zdCBuc0J1ZmZlckhhbmRsZTxj
aGFyPiogPigmbUhhbmRsZSk7IH0KCiAgICBwcml2YXRlOgogICAgICBuc0NvbnN0QnVmZmVySGFu
ZGxlPGNoYXI+IG1IYW5kbGU7CiAgfTsKIyAzMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
TGl0ZXJhbFN0cmluZy5oIiAyCiMgMzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FSZWFk
YWJsZVN0cmluZy5oIiAyCgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVwZW5k
ZW50U3Vic3RyaW5nLmgiIDEKIyA0MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVwZW5k
ZW50U3Vic3RyaW5nLmgiCmNsYXNzIG5zRGVwZW5kZW50U3Vic3RyaW5nCiAgICAgIDogcHVibGlj
IG5zQVByb21pc2VTdHJpbmcKIyA1MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVwZW5k
ZW50U3Vic3RyaW5nLmgiCiAgewogICAgdHlwZWRlZiBuc0FTdHJpbmcgc3RyaW5nX3R5cGU7CiAg
ICB0eXBlZGVmIHN0cmluZ190eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAg
ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgY29uc3QgUFJVbmljaGFyKiBHZXRSZWFkYWJsZUZy
YWdtZW50KCBuc1JlYWRhYmxlRnJhZ21lbnQ8UFJVbmljaGFyPiYsIG5zRnJhZ21lbnRSZXF1ZXN0
LCBQUlVpbnQzMiApIGNvbnN0OwogICAgICB2aXJ0dWFsIFBSVW5pY2hhciogR2V0V3JpdGFibGVG
cmFnbWVudCggbnNXcml0YWJsZUZyYWdtZW50PFBSVW5pY2hhcj4mLCBuc0ZyYWdtZW50UmVxdWVz
dCwgUFJVaW50MzIgKSB7IHJldHVybiAwOyB9CgogICAgcHVibGljOgogICAgICBuc0RlcGVuZGVu
dFN1YnN0cmluZyggY29uc3Qgc3RyaW5nX3R5cGUmIGFTdHJpbmcsIFBSVWludDMyIGFTdGFydFBv
cywgUFJVaW50MzIgYUxlbmd0aCApCiAgICAgICAgICA6IG1TdHJpbmcoYVN0cmluZyksCiAgICAg
ICAgICAgIG1TdGFydFBvcyggTlNfTUlOKGFTdGFydFBvcywgYVN0cmluZy5MZW5ndGgoKSkgKSwK
ICAgICAgICAgICAgbUxlbmd0aCggTlNfTUlOKGFMZW5ndGgsIGFTdHJpbmcuTGVuZ3RoKCktbVN0
YXJ0UG9zKSApCiAgICAgICAgewoKICAgICAgICB9CgogICAgICBuc0RlcGVuZGVudFN1YnN0cmlu
ZyggY29uc3QgY29uc3RfaXRlcmF0b3ImIGFTdGFydCwgY29uc3QgY29uc3RfaXRlcmF0b3ImIGFF
bmQgKQogICAgICAgICAgOiBtU3RyaW5nKGFTdGFydC5zdHJpbmcoKSkKICAgICAgICB7CiAgICAg
ICAgICBjb25zdF9pdGVyYXRvciB6ZXJvUG9pbnQ7CiAgICAgICAgICBtU3RyaW5nLkJlZ2luUmVh
ZGluZyh6ZXJvUG9pbnQpOwogICAgICAgICAgbVN0YXJ0UG9zID0gRGlzdGFuY2UoemVyb1BvaW50
LCBhU3RhcnQpOwogICAgICAgICAgbUxlbmd0aCA9IERpc3RhbmNlKGFTdGFydCwgYUVuZCk7CiAg
ICAgICAgfQoKCgoKICAgIHByaXZhdGU6CgogICAgICB2b2lkIG9wZXJhdG9yPSggY29uc3QgbnNE
ZXBlbmRlbnRTdWJzdHJpbmcmICk7CgogICAgcHVibGljOgogICAgICB2aXJ0dWFsIFBSVWludDMy
IExlbmd0aCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIFBSQm9vbCBJc0RlcGVuZGVudE9uKCBjb25z
dCBzdHJpbmdfdHlwZSYgYVN0cmluZyApIGNvbnN0IHsgcmV0dXJuIG1TdHJpbmcuSXNEZXBlbmRl
bnRPbihhU3RyaW5nKTsgfQoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0IHN0cmluZ190eXBlJiBt
U3RyaW5nOwogICAgICBQUlVpbnQzMiBtU3RhcnRQb3M7CiAgICAgIFBSVWludDMyIG1MZW5ndGg7
CiAgfTsKCmNsYXNzIG5zRGVwZW5kZW50Q1N1YnN0cmluZwogICAgICA6IHB1YmxpYyBuc0FQcm9t
aXNlQ1N0cmluZwojIDEwNCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVwZW5kZW50U3Vi
c3RyaW5nLmgiCiAgewogICAgdHlwZWRlZiBuc0FDU3RyaW5nIHN0cmluZ190eXBlOwogICAgdHlw
ZWRlZiBzdHJpbmdfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgogICAgcHJv
dGVjdGVkOgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIEdldFJlYWRhYmxlRnJhZ21lbnQoIG5z
UmVhZGFibGVGcmFnbWVudDxjaGFyPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApIGNv
bnN0OwogICAgICB2aXJ0dWFsIGNoYXIqIEdldFdyaXRhYmxlRnJhZ21lbnQoIG5zV3JpdGFibGVG
cmFnbWVudDxjaGFyPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApIHsgcmV0dXJuIDA7
IH0KCiAgICBwdWJsaWM6CiAgICAgIG5zRGVwZW5kZW50Q1N1YnN0cmluZyggY29uc3Qgc3RyaW5n
X3R5cGUmIGFTdHJpbmcsIFBSVWludDMyIGFTdGFydFBvcywgUFJVaW50MzIgYUxlbmd0aCApCiAg
ICAgICAgICA6IG1TdHJpbmcoYVN0cmluZyksCiAgICAgICAgICAgIG1TdGFydFBvcyggTlNfTUlO
KGFTdGFydFBvcywgYVN0cmluZy5MZW5ndGgoKSkgKSwKICAgICAgICAgICAgbUxlbmd0aCggTlNf
TUlOKGFMZW5ndGgsIGFTdHJpbmcuTGVuZ3RoKCktbVN0YXJ0UG9zKSApCiAgICAgICAgewoKICAg
ICAgICB9CgogICAgICBuc0RlcGVuZGVudENTdWJzdHJpbmcoIGNvbnN0IGNvbnN0X2l0ZXJhdG9y
JiBhU3RhcnQsIGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBhRW5kICkKICAgICAgICAgIDogbVN0cmlu
ZyhhU3RhcnQuc3RyaW5nKCkpCiAgICAgICAgewogICAgICAgICAgY29uc3RfaXRlcmF0b3IgemVy
b1BvaW50OwogICAgICAgICAgbVN0cmluZy5CZWdpblJlYWRpbmcoemVyb1BvaW50KTsKICAgICAg
ICAgIG1TdGFydFBvcyA9IERpc3RhbmNlKHplcm9Qb2ludCwgYVN0YXJ0KTsKICAgICAgICAgIG1M
ZW5ndGggPSBEaXN0YW5jZShhU3RhcnQsIGFFbmQpOwogICAgICAgIH0KCgoKCiAgICBwcml2YXRl
OgoKICAgICAgdm9pZCBvcGVyYXRvcj0oIGNvbnN0IG5zRGVwZW5kZW50Q1N1YnN0cmluZyYgKTsK
CiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3Q7CiAgICAg
IHZpcnR1YWwgUFJCb29sIElzRGVwZW5kZW50T24oIGNvbnN0IHN0cmluZ190eXBlJiBhU3RyaW5n
ICkgY29uc3QgeyByZXR1cm4gbVN0cmluZy5Jc0RlcGVuZGVudE9uKGFTdHJpbmcpOyB9CgogICAg
cHJpdmF0ZToKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmIG1TdHJpbmc7CiAgICAgIFBSVWludDMy
IG1TdGFydFBvczsKICAgICAgUFJVaW50MzIgbUxlbmd0aDsKICB9OwoKCgoKCgoKaW5saW5lCmNv
bnN0IG5zRGVwZW5kZW50Q1N1YnN0cmluZwpTdWJzdHJpbmcoIGNvbnN0IG5zQUNTdHJpbmcmIGFT
dHJpbmcsIFBSVWludDMyIGFTdGFydFBvcywgUFJVaW50MzIgYVN1YnN0cmluZ0xlbmd0aCApCiAg
ewogICAgcmV0dXJuIG5zRGVwZW5kZW50Q1N1YnN0cmluZyhhU3RyaW5nLCBhU3RhcnRQb3MsIGFT
dWJzdHJpbmdMZW5ndGgpOwogIH0KCmlubGluZQpjb25zdCBuc0RlcGVuZGVudFN1YnN0cmluZwpT
dWJzdHJpbmcoIGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZywgUFJVaW50MzIgYVN0YXJ0UG9zLCBQ
UlVpbnQzMiBhU3Vic3RyaW5nTGVuZ3RoICkKICB7CiAgICByZXR1cm4gbnNEZXBlbmRlbnRTdWJz
dHJpbmcoYVN0cmluZywgYVN0YXJ0UG9zLCBhU3Vic3RyaW5nTGVuZ3RoKTsKICB9CgppbmxpbmUK
Y29uc3QgbnNEZXBlbmRlbnRDU3Vic3RyaW5nClN1YnN0cmluZyggY29uc3QgbnNSZWFkaW5nSXRl
cmF0b3I8Y2hhcj4mIGFTdGFydCwgY29uc3QgbnNSZWFkaW5nSXRlcmF0b3I8Y2hhcj4mIGFFbmQg
KQogIHsKICAgIHJldHVybiBuc0RlcGVuZGVudENTdWJzdHJpbmcoYVN0YXJ0LCBhRW5kKTsKICB9
CgppbmxpbmUKY29uc3QgbnNEZXBlbmRlbnRTdWJzdHJpbmcKU3Vic3RyaW5nKCBjb25zdCBuc1Jl
YWRpbmdJdGVyYXRvcjxQUlVuaWNoYXI+JiBhU3RhcnQsIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9y
PFBSVW5pY2hhcj4mIGFFbmQgKQogIHsKICAgIHJldHVybiBuc0RlcGVuZGVudFN1YnN0cmluZyhh
U3RhcnQsIGFFbmQpOwogIH0KIyA0MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVJlYWRh
YmxlU3RyaW5nLmgiIDIKCgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNQcm9taXNl
RmxhdFN0cmluZy5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Byb21pc2VG
bGF0U3RyaW5nLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU2hhcmFibGVTdHJp
bmcuaCIgMQojIDM1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTaGFyYWJsZVN0cmluZy5o
IgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0J1ZmZlckhhbmRsZVV0aWxzLmgiIDEK
IyAzNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVmZmVySGFuZGxlVXRpbHMuaCIKIyAx
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL25ldy5oIiAxIDMKIyAzMyAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9uZXcuaCIgMwojIDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYmFja3dhcmQvYmFja3dhcmRfd2FybmluZy5oIiAxIDMKIyAzNCAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9uZXcuaCIgMiAzCiMgMSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9uZXciIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L25ldyIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvY3N0ZGRlZiIgMSAzCgojIDEg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyA0MCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDMKIyAxICIvdXNy
L2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5o
IiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgi
IDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZmX3Q7CiAgdXNpbmcgOjpzaXpl
X3Q7Cn0KIyAzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2NzdGRkZWYiIDIgMwojIDM1ICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL25ldyIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9leGNlcHRpb24iIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4
Y2VwdGlvbiIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CiAgY2xhc3MgZXhjZXB0
aW9uCiAgewogIHB1YmxpYzoKICAgIGV4Y2VwdGlvbigpIHRocm93KCkgeyB9CiAgICB2aXJ0dWFs
IH5leGNlcHRpb24oKSB0aHJvdygpOwogICAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29u
c3QgdGhyb3coKTsKICB9OwoKICBjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlv
bgogIHsKICBwdWJsaWM6CiAgICBiYWRfZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1
YWwgfmJhZF9leGNlcHRpb24oKSB0aHJvdygpOwogIH07CgogIHR5cGVkZWYgdm9pZCAoKnRlcm1p
bmF0ZV9oYW5kbGVyKSAoKTsKICB0eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgp
OwoKICB0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRlKHRlcm1pbmF0ZV9oYW5kbGVyKSB0
aHJvdygpOwogIHZvaWQgdGVybWluYXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp
OwoKICB1bmV4cGVjdGVkX2hhbmRsZXIgc2V0X3VuZXhwZWN0ZWQodW5leHBlY3RlZF9oYW5kbGVy
KSB0aHJvdygpOwogIHZvaWQgdW5leHBlY3RlZCgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJu
X18pKTsKCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9Cgp9CiMgMzYgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvbmV3IiAyIDMKCmV4dGVybiAiQysrIiB7CgpuYW1lc3Bh
Y2Ugc3RkCnsKICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1Ymxp
YzoKICAgIGJhZF9hbGxvYygpIHRocm93KCkgeyB9CiAgICB2aXJ0dWFsIH5iYWRfYWxsb2MoKSB0
aHJvdygpOwogIH07CgogIHN0cnVjdCBub3Rocm93X3QgeyB9OwogIGV4dGVybiBjb25zdCBub3Ro
cm93X3Qgbm90aHJvdzsKICB0eXBlZGVmIHZvaWQgKCpuZXdfaGFuZGxlcikoKTsKICBuZXdfaGFu
ZGxlciBzZXRfbmV3X2hhbmRsZXIobmV3X2hhbmRsZXIpOwp9CgoKdm9pZCAqb3BlcmF0b3IgbmV3
KHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkICpvcGVyYXRvciBuZXdb
XShzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCBvcGVyYXRvciBkZWxl
dGUodm9pZCAqKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQgKikgdGhyb3co
KTsKdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYp
IHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5v
dGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKiwgY29uc3Qgc3Rk
Ojpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQgKiwgY29u
c3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoKCmlubGluZSB2b2lkICpvcGVyYXRvciBuZXco
c3RkOjpzaXplX3QsIHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9CmlubGlu
ZSB2b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgdm9pZCAqcGxhY2UpIHRocm93KCkg
eyByZXR1cm4gcGxhY2U7IH0KfQojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JhY2t3
YXJkL25ldy5oIiAyIDMKCnVzaW5nIHN0ZDo6YmFkX2FsbG9jOwp1c2luZyBzdGQ6Om5vdGhyb3df
dDsKdXNpbmcgc3RkOjpub3Rocm93Owp1c2luZyBzdGQ6Om5ld19oYW5kbGVyOwp1c2luZyBzdGQ6
OnNldF9uZXdfaGFuZGxlcjsKIyAzNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVmZmVy
SGFuZGxlVXRpbHMuaCIgMgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zQXV0b0J1
ZmZlckhhbmRsZQogIHsKICAgIHB1YmxpYzoKICAgICAgbnNBdXRvQnVmZmVySGFuZGxlKCkgOiBt
SGFuZGxlKDApIHsgfQoKICAgICAgbnNBdXRvQnVmZmVySGFuZGxlKCBjb25zdCBuc0F1dG9CdWZm
ZXJIYW5kbGU8Q2hhclQ+JiBhT3RoZXIgKQogICAgICAgICAgOiBtSGFuZGxlKGFPdGhlci5nZXQo
KSkKICAgICAgICB7CiAgICAgICAgICBpZiAoIG1IYW5kbGUgKQogICAgICAgICAgICBtSGFuZGxl
LT5BY3F1aXJlUmVmZXJlbmNlKCk7CiAgICAgICAgfQoKICAgICAgZXhwbGljaXQKICAgICAgbnNB
dXRvQnVmZmVySGFuZGxlKCBjb25zdCBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4qIGFIYW5k
bGUgKQogICAgICAgICAgOiBtSGFuZGxlKCBjb25zdF9jYXN0PCBuc1NoYXJlZEJ1ZmZlckhhbmRs
ZTxDaGFyVD4qID4oYUhhbmRsZSkgKQogICAgICAgIHsKICAgICAgICAgIGlmICggbUhhbmRsZSAp
CiAgICAgICAgICAgIG1IYW5kbGUtPkFjcXVpcmVSZWZlcmVuY2UoKTsKICAgICAgICB9CgogICAg
IH5uc0F1dG9CdWZmZXJIYW5kbGUoKQogICAgICAgIHsKICAgICAgICAgIGlmICggbUhhbmRsZSAp
CiAgICAgICAgICAgIG1IYW5kbGUtPlJlbGVhc2VSZWZlcmVuY2UoKTsKICAgICAgICB9CgogICAg
ICBuc0F1dG9CdWZmZXJIYW5kbGU8Q2hhclQ+JgogICAgICBvcGVyYXRvcj0oIGNvbnN0IG5zU2hh
cmVkQnVmZmVySGFuZGxlPENoYXJUPiogcmhzICkKICAgICAgICB7CiAgICAgICAgICBuc1NoYXJl
ZEJ1ZmZlckhhbmRsZTxDaGFyVD4qIG9sZF9oYW5kbGUgPSBtSGFuZGxlOwogICAgICAgICAgaWYg
KCAobUhhbmRsZSA9IGNvbnN0X2Nhc3Q8IG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPiogPihy
aHMpKSApCiAgICAgICAgICAgIG1IYW5kbGUtPkFjcXVpcmVSZWZlcmVuY2UoKTsKICAgICAgICAg
IGlmICggb2xkX2hhbmRsZSApCiAgICAgICAgICAgIG9sZF9oYW5kbGUtPlJlbGVhc2VSZWZlcmVu
Y2UoKTsKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgogICAgICBuc0F1dG9CdWZm
ZXJIYW5kbGU8Q2hhclQ+JgogICAgICBvcGVyYXRvcj0oIGNvbnN0IG5zQXV0b0J1ZmZlckhhbmRs
ZTxDaGFyVD4mIHJocyApCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG9wZXJhdG9yPShyaHMu
Z2V0KCkpOwogICAgICAgIH0KCiAgICAgIG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPioKICAg
ICAgZ2V0KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gbUhhbmRsZTsKICAgICAg
ICB9CgogICAgICBvcGVyYXRvciBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4qKCkgY29uc3QK
ICAgICAgICB7CiAgICAgICAgICByZXR1cm4gZ2V0KCk7CiAgICAgICAgfQoKICAgICAgbnNTaGFy
ZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KgogICAgICBvcGVyYXRvci0+KCkgY29uc3QKICAgICAgICB7
CiAgICAgICAgICByZXR1cm4gZ2V0KCk7CiAgICAgICAgfQoKICAgIHByaXZhdGU6CiAgICAgIG5z
U2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPiogbUhhbmRsZTsKICB9OwoKCnRlbXBsYXRlIDxjbGFz
cyBIYW5kbGVULCBjbGFzcyBDaGFyVD4KaW5saW5lCnNpemVfdApOU19BbGlnbmVkSGFuZGxlU2l6
ZSggY29uc3QgSGFuZGxlVCosIGNvbnN0IENoYXJUKiApCiAgewoKICAgIHJldHVybiAoKHNpemVv
ZihIYW5kbGVUKSArIHNpemVvZihDaGFyVCkgLSAxKSAvIHNpemVvZihDaGFyVCkpICogc2l6ZW9m
KENoYXJUKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSGFuZGxlVCwgY2xhc3MgQ2hhclQ+CmlubGlu
ZQpjb25zdCBDaGFyVCoKTlNfRGF0YUFmdGVySGFuZGxlKCBjb25zdCBIYW5kbGVUKiBhSGFuZGxl
UHRyLCBjb25zdCBDaGFyVCogYUR1bW15Q2hhclRQdHIgKQogIHsKICAgIHR5cGVkZWYgY29uc3Qg
Q2hhclQqIENoYXJUX3B0cjsKICAgIHJldHVybiBDaGFyVF9wdHIoc3RhdGljX2Nhc3Q8IGNvbnN0
IHVuc2lnbmVkIGNoYXIqID4oYUhhbmRsZVB0cikgKyBOU19BbGlnbmVkSGFuZGxlU2l6ZShhSGFu
ZGxlUHRyLCBhRHVtbXlDaGFyVFB0cikpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBIYW5kbGVULCBj
bGFzcyBDaGFyVD4KaW5saW5lCkNoYXJUKgpOU19EYXRhQWZ0ZXJIYW5kbGUoIEhhbmRsZVQqIGFI
YW5kbGVQdHIsIGNvbnN0IENoYXJUKiBhRHVtbXlDaGFyVFB0ciApCiAgewogICAgdHlwZWRlZiBD
aGFyVCogQ2hhclRfcHRyOwogICAgcmV0dXJuIENoYXJUX3B0cihzdGF0aWNfY2FzdDwgdW5zaWdu
ZWQgY2hhciogPihhSGFuZGxlUHRyKSArIE5TX0FsaWduZWRIYW5kbGVTaXplKGFIYW5kbGVQdHIs
IGFEdW1teUNoYXJUUHRyKSk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIEhhbmRsZVQsIGNsYXNzIFN0
cmluZ1Q+CkhhbmRsZVQqCk5TX0FsbG9jYXRlQ29udGlndW91c0hhbmRsZVdpdGhEYXRhKCBjb25z
dCBIYW5kbGVUKiBhRHVtbXlIYW5kbGVQdHIsIFBSVWludDMyIGFBZGRpdGlvbmFsQ2FwYWNpdHks
IGNvbnN0IFN0cmluZ1QqIGFEYXRhU291cmNlICkKICB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIFN0
cmluZ1Q6OmNoYXJfdHlwZSBjaGFyX3R5cGU7CiAgICB0eXBlZGVmIGNoYXJfdHlwZSogY2hhcl9w
dHI7CgoKICAgIHNpemVfdCBoYW5kbGVfc2l6ZSA9IE5TX0FsaWduZWRIYW5kbGVTaXplKGFEdW1t
eUhhbmRsZVB0ciwgY2hhcl9wdHIoMCkpOwoKCiAgICBzaXplX3QgZGF0YV9sZW5ndGggPSBhRGF0
YVNvdXJjZT8gYURhdGFTb3VyY2UtPkxlbmd0aCgpIDogMDsKICAgIHNpemVfdCBidWZmZXJfbGVu
Z3RoID0gZGF0YV9sZW5ndGggKyBhQWRkaXRpb25hbENhcGFjaXR5OwoKCiAgICBzaXplX3QgYnVm
ZmVyX3NpemUgPSBidWZmZXJfbGVuZ3RoICogc2l6ZW9mKGNoYXJfdHlwZSk7CgoKICAgIEhhbmRs
ZVQqIHJlc3VsdCA9IDA7CiAgICB2b2lkKiBoYW5kbGVfcHRyID0gOjpvcGVyYXRvciBuZXcoaGFu
ZGxlX3NpemUgKyBidWZmZXJfc2l6ZSk7CgogICAgaWYgKCBoYW5kbGVfcHRyICkKICAgICAgewog
ICAgICAgIGNoYXJfcHRyIGRhdGFfc3RhcnRfcHRyID0gY2hhcl9wdHIoc3RhdGljX2Nhc3Q8IHVu
c2lnbmVkIGNoYXIqID4oaGFuZGxlX3B0cikgKyBoYW5kbGVfc2l6ZSk7CiAgICAgICAgY2hhcl9w
dHIgZGF0YV9lbmRfcHRyID0gZGF0YV9zdGFydF9wdHIgKyBkYXRhX2xlbmd0aDsKICAgICAgICBj
aGFyX3B0ciBidWZmZXJfZW5kX3B0ciA9IGRhdGFfc3RhcnRfcHRyICsgYnVmZmVyX2xlbmd0aDsK
CiAgICAgICAgY2hhcl9wdHIgdG9CZWdpbiA9IGRhdGFfc3RhcnRfcHRyOwoKICAgICAgICBpZiAo
IGRhdGFfbGVuZ3RoICkKICAgICAgICAgIHsKICAgICAgICAgICAgdHlwZW5hbWUgU3RyaW5nVDo6
Y29uc3RfaXRlcmF0b3IgZnJvbUJlZ2luLCBmcm9tRW5kOwogICAgICAgICAgICBjb3B5X3N0cmlu
ZyhhRGF0YVNvdXJjZS0+QmVnaW5SZWFkaW5nKGZyb21CZWdpbiksIGFEYXRhU291cmNlLT5FbmRS
ZWFkaW5nKGZyb21FbmQpLCB0b0JlZ2luKTsKICAgICAgICAgIH0KCgogICAgICAgIGlmICggYUFk
ZGl0aW9uYWxDYXBhY2l0eSA+IDAgKQogICAgICAgICAgKnRvQmVnaW4gPSBjaGFyX3R5cGUoMCk7
CgogICAgICAgIHJlc3VsdCA9IG5ldyAoaGFuZGxlX3B0cikgSGFuZGxlVChkYXRhX3N0YXJ0X3B0
ciwgZGF0YV9lbmRfcHRyLCBkYXRhX3N0YXJ0X3B0ciwgYnVmZmVyX2VuZF9wdHIsIDEpOwogICAg
ICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSGFuZGxlVCwgY2xh
c3MgU3RyaW5nVD4KaW5saW5lCkhhbmRsZVQqCk5TX0FsbG9jYXRlQ29udGlndW91c0hhbmRsZVdp
dGhEYXRhKCBjb25zdCBIYW5kbGVUKiBhRHVtbXlIYW5kbGVQdHIsIGNvbnN0IFN0cmluZ1QmIGFE
YXRhU291cmNlLCBQUlVpbnQzMiBhQWRkaXRpb25hbENhcGFjaXR5ICkKICB7CiAgICByZXR1cm4g
TlNfQWxsb2NhdGVDb250aWd1b3VzSGFuZGxlV2l0aERhdGEoYUR1bW15SGFuZGxlUHRyLCBhQWRk
aXRpb25hbENhcGFjaXR5LCAmYURhdGFTb3VyY2UpOwogIH0KIyAzNiAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zU2hhcmFibGVTdHJpbmcuaCIgMgojIDQ0ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNTaGFyYWJsZVN0cmluZy5oIgpjbGFzcyBuc1NoYXJhYmxlU3RyaW5nCiAgICA6IHB1
YmxpYyBuc0FGbGF0U3RyaW5nCiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIG5zU2hhcmFi
bGVTdHJpbmcgc2VsZl90eXBlOwogICAgICB0eXBlZGVmIFBSVW5pY2hhciBjaGFyX3R5cGU7CiAg
ICAgIHR5cGVkZWYgbnNBU3RyaW5nIHN0cmluZ190eXBlOwoKICAgIHB1YmxpYzoKICAgICAgbnNT
aGFyYWJsZVN0cmluZygpIHsgfQogICAgICBuc1NoYXJhYmxlU3RyaW5nKCBjb25zdCBzZWxmX3R5
cGUmIGFPdGhlciApIDogbUJ1ZmZlcihhT3RoZXIubUJ1ZmZlcikgeyB9CiAgICAgIGV4cGxpY2l0
IG5zU2hhcmFibGVTdHJpbmcoIGNvbnN0IHN0cmluZ190eXBlJiBhUmVhZGFibGUgKSB7IGFzc2ln
bihhUmVhZGFibGUpOyB9CiAgICAgIGV4cGxpY2l0IG5zU2hhcmFibGVTdHJpbmcoIGNvbnN0IG5z
U2hhcmVkQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4qIGFIYW5kbGUgKSA6IG1CdWZmZXIoYUhhbmRs
ZSkgeyB9CgogICAgICBzZWxmX3R5cGUmCiAgICAgIG9wZXJhdG9yPSggY29uc3Qgc3RyaW5nX3R5
cGUmIGFSZWFkYWJsZSApCiAgICAgICAgewogICAgICAgICAgYXNzaWduKGFSZWFkYWJsZSk7CiAg
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdm9p
ZCBhc3NpZ24oIGNvbnN0IHN0cmluZ190eXBlJiApOwogICAgICB2aXJ0dWFsIGNvbnN0IG5zU2hh
cmVkQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4qIEdldFNoYXJlZEJ1ZmZlckhhbmRsZSgpIGNvbnN0
OwoKICAgIHByaXZhdGU6CiAgICAgIG5zQXV0b0J1ZmZlckhhbmRsZTxjaGFyX3R5cGU+IG1CdWZm
ZXI7CiAgfTsKCgpjbGFzcyBuc1NoYXJhYmxlQ1N0cmluZwogICAgOiBwdWJsaWMgbnNBRmxhdENT
dHJpbmcKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgbnNTaGFyYWJsZUNTdHJpbmcgc2Vs
Zl90eXBlOwogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIG5zQUNT
dHJpbmcgc3RyaW5nX3R5cGU7CgogICAgcHVibGljOgogICAgICBuc1NoYXJhYmxlQ1N0cmluZygp
IHsgfQogICAgICBuc1NoYXJhYmxlQ1N0cmluZyggY29uc3Qgc2VsZl90eXBlJiBhT3RoZXIgKSA6
IG1CdWZmZXIoYU90aGVyLm1CdWZmZXIpIHsgfQogICAgICBleHBsaWNpdCBuc1NoYXJhYmxlQ1N0
cmluZyggY29uc3Qgc3RyaW5nX3R5cGUmIGFSZWFkYWJsZSApIHsgYXNzaWduKGFSZWFkYWJsZSk7
IH0KICAgICAgZXhwbGljaXQgbnNTaGFyYWJsZUNTdHJpbmcoIGNvbnN0IG5zU2hhcmVkQnVmZmVy
SGFuZGxlPGNoYXJfdHlwZT4qIGFIYW5kbGUgKSA6IG1CdWZmZXIoYUhhbmRsZSkgeyB9CgogICAg
ICBzZWxmX3R5cGUmCiAgICAgIG9wZXJhdG9yPSggY29uc3Qgc3RyaW5nX3R5cGUmIGFSZWFkYWJs
ZSApCiAgICAgICAgewogICAgICAgICAgYXNzaWduKGFSZWFkYWJsZSk7CiAgICAgICAgICByZXR1
cm4gKnRoaXM7CiAgICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdm9pZCBhc3NpZ24oIGNv
bnN0IHN0cmluZ190eXBlJiApOwogICAgICB2aXJ0dWFsIGNvbnN0IG5zU2hhcmVkQnVmZmVySGFu
ZGxlPGNoYXJfdHlwZT4qIEdldFNoYXJlZEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwoKICAgIHByaXZh
dGU6CiAgICAgIG5zQXV0b0J1ZmZlckhhbmRsZTxjaGFyX3R5cGU+IG1CdWZmZXI7CiAgfTsKIyAy
OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUHJvbWlzZUZsYXRTdHJpbmcuaCIgMgojIDgz
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNQcm9taXNlRmxhdFN0cmluZy5oIgpjbGFzcyBu
c1Byb21pc2VGbGF0U3RyaW5nCiAgICA6IHB1YmxpYyBuc0FGbGF0U3RyaW5nCiAgewogICAgZnJp
ZW5kIGNvbnN0IG5zUHJvbWlzZUZsYXRTdHJpbmcgUHJvbWlzZUZsYXRTdHJpbmcoIGNvbnN0IG5z
QVN0cmluZyYgKTsKCiAgICBwdWJsaWM6CiAgICAgIG5zUHJvbWlzZUZsYXRTdHJpbmcoIGNvbnN0
IG5zUHJvbWlzZUZsYXRTdHJpbmcmICk7CgogICAgcHJvdGVjdGVkOgogICAgICBuc1Byb21pc2VG
bGF0U3RyaW5nKCkgOiBtUHJvbWlzZWRTdHJpbmcoJm1GbGF0dGVuZWRTdHJpbmcpIHsgfQogICAg
ICBleHBsaWNpdCBuc1Byb21pc2VGbGF0U3RyaW5nKCBjb25zdCBuc0FTdHJpbmcmIGFTdHJpbmcg
KTsKCgogICAgICB2aXJ0dWFsIGNvbnN0IG5zQnVmZmVySGFuZGxlPFBSVW5pY2hhcj4qIEdldEZs
YXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25zdCBuc0J1ZmZlckhhbmRs
ZTxQUlVuaWNoYXI+KiBHZXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25z
dCBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxQUlVuaWNoYXI+KiBHZXRTaGFyZWRCdWZmZXJIYW5kbGUo
KSBjb25zdDsKICAgICAgdmlydHVhbCBQUkJvb2wgSXNEZXBlbmRlbnRPbiggY29uc3QgbnNBU3Ry
aW5nJiApIGNvbnN0OwoKCgogICAgcHVibGljOgogICAgICB2aXJ0dWFsIGNvbnN0IFBSVW5pY2hh
ciogZ2V0KCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3Q7CiAg
ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgY29uc3QgUFJVbmljaGFyKiBHZXRSZWFkYWJsZUZy
YWdtZW50KCBuc1JlYWRhYmxlRnJhZ21lbnQ8UFJVbmljaGFyPiYsIG5zRnJhZ21lbnRSZXF1ZXN0
LCBQUlVpbnQzMiApIGNvbnN0OwoKCiAgICBwcml2YXRlOgoKICAgICAgdm9pZCBvcGVyYXRvcj0o
IGNvbnN0IG5zUHJvbWlzZUZsYXRTdHJpbmcmICk7CgogICAgcHJpdmF0ZToKICAgICAgbnNTaGFy
YWJsZVN0cmluZyBtRmxhdHRlbmVkU3RyaW5nOwogICAgICBjb25zdCBuc0FGbGF0U3RyaW5nKiBt
UHJvbWlzZWRTdHJpbmc7CiAgfTsKCmNsYXNzIG5zUHJvbWlzZUZsYXRDU3RyaW5nCiAgICA6IHB1
YmxpYyBuc0FGbGF0Q1N0cmluZwogIHsKICAgIGZyaWVuZCBjb25zdCBuc1Byb21pc2VGbGF0Q1N0
cmluZyBQcm9taXNlRmxhdENTdHJpbmcoIGNvbnN0IG5zQUNTdHJpbmcmICk7CgogICAgcHVibGlj
OgogICAgICBuc1Byb21pc2VGbGF0Q1N0cmluZyggY29uc3QgbnNQcm9taXNlRmxhdENTdHJpbmcm
ICk7CgogICAgcHJvdGVjdGVkOgogICAgICBuc1Byb21pc2VGbGF0Q1N0cmluZygpIDogbVByb21p
c2VkU3RyaW5nKCZtRmxhdHRlbmVkU3RyaW5nKSB7IH0KICAgICAgZXhwbGljaXQgbnNQcm9taXNl
RmxhdENTdHJpbmcoIGNvbnN0IG5zQUNTdHJpbmcmIGFTdHJpbmcgKTsKCgogICAgICB2aXJ0dWFs
IGNvbnN0IG5zQnVmZmVySGFuZGxlPGNoYXI+KiBHZXRGbGF0QnVmZmVySGFuZGxlKCkgY29uc3Q7
CiAgICAgIHZpcnR1YWwgY29uc3QgbnNCdWZmZXJIYW5kbGU8Y2hhcj4qIEdldEJ1ZmZlckhhbmRs
ZSgpIGNvbnN0OwogICAgICB2aXJ0dWFsIGNvbnN0IG5zU2hhcmVkQnVmZmVySGFuZGxlPGNoYXI+
KiBHZXRTaGFyZWRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBQUkJvb2wgSXNE
ZXBlbmRlbnRPbiggY29uc3QgbnNBQ1N0cmluZyYgKSBjb25zdDsKCgoKICAgIHB1YmxpYzoKICAg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiBnZXQoKSBjb25zdDsKICAgICAgdmlydHVhbCBQUlVpbnQz
MiBMZW5ndGgoKSBjb25zdDsKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiBHZXRSZWFkYWJsZUZyYWdtZW50KCBuc1JlYWRhYmxlRnJhZ21lbnQ8Y2hhcj4mLCBuc0ZyYWdt
ZW50UmVxdWVzdCwgUFJVaW50MzIgKSBjb25zdDsKCgogICAgcHJpdmF0ZToKCiAgICAgIHZvaWQg
b3BlcmF0b3I9KCBjb25zdCBuc1Byb21pc2VGbGF0Q1N0cmluZyYgKTsKCiAgICBwcml2YXRlOgog
ICAgICBuc1NoYXJhYmxlQ1N0cmluZyBtRmxhdHRlbmVkU3RyaW5nOwogICAgICBjb25zdCBuc0FG
bGF0Q1N0cmluZyogbVByb21pc2VkU3RyaW5nOwogIH07CgoKaW5saW5lCmNvbnN0IG5zUHJvbWlz
ZUZsYXRTdHJpbmcKUHJvbWlzZUZsYXRTdHJpbmcoIGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZyAp
CiAgewogICAgcmV0dXJuIG5zUHJvbWlzZUZsYXRTdHJpbmcoYVN0cmluZyk7CiAgfQoKaW5saW5l
CmNvbnN0IG5zUHJvbWlzZUZsYXRDU3RyaW5nClByb21pc2VGbGF0Q1N0cmluZyggY29uc3QgbnNB
Q1N0cmluZyYgYVN0cmluZyApCiAgewogICAgcmV0dXJuIG5zUHJvbWlzZUZsYXRDU3RyaW5nKGFT
dHJpbmcpOwogIH0KIyA0NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVJlYWRhYmxlU3Ry
aW5nLmgiIDIKIyAzMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVdyaXRhYmxlU3RyaW5n
LmgiIDIKCgp0eXBlZGVmIG5zQVN0cmluZyBuc0FXcml0YWJsZVN0cmluZzsKdHlwZWRlZiBuc0FD
U3RyaW5nIG5zQVdyaXRhYmxlQ1N0cmluZzsKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zVGV4dEZyYWdtZW50LmgiIDIKY2xhc3MgbnNTdHJpbmc7CiMgNTggIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc1RleHRGcmFnbWVudC5oIgpjbGFzcyBuc1RleHRGcmFnbWVudCB7CnB1Ymxp
YzoKCgoKICBuc1RleHRGcmFnbWVudCgpIHsKICAgIG0xYiA9IDA7CiAgICBtQWxsQml0cyA9IDA7
CiAgfQoKICB+bnNUZXh0RnJhZ21lbnQoKTsKCgoKCgogIG5zVGV4dEZyYWdtZW50KGNvbnN0IG5z
VGV4dEZyYWdtZW50JiBhT3RoZXIpOwoKCgoKCiAgbnNUZXh0RnJhZ21lbnQoY29uc3QgY2hhciog
YVN0cmluZyk7CgoKCgoKICBuc1RleHRGcmFnbWVudChjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcp
OwoKCgoKCiAgbnNUZXh0RnJhZ21lbnQoY29uc3QgbnNTdHJpbmcmIGFTdHJpbmcpOwoKCgoKCiAg
bnNUZXh0RnJhZ21lbnQmIG9wZXJhdG9yPShjb25zdCBuc1RleHRGcmFnbWVudCYgYU90aGVyKTsK
CgoKCgogIG5zVGV4dEZyYWdtZW50JiBvcGVyYXRvcj0oY29uc3QgY2hhciogYVN0cmluZyk7CgoK
CgoKICBuc1RleHRGcmFnbWVudCYgb3BlcmF0b3I9KGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyk7
CgoKCgoKICBuc1RleHRGcmFnbWVudCYgb3BlcmF0b3I9KGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5n
JiBhU3RyaW5nKTsKCgoKCiAgUFJCb29sIElzMmIoKSBjb25zdCB7CiAgICByZXR1cm4gbVN0YXRl
Lm1JczJiOwogIH0KCgoKCiAgY29uc3QgUFJVbmljaGFyKiBHZXQyYigpIGNvbnN0IHsKICAgIHt9
OwogICAgcmV0dXJuIG0yYjsKICB9CgoKCgogIGNvbnN0IGNoYXIqIEdldDFiKCkgY29uc3Qgewog
ICAge307CiAgICByZXR1cm4gKGNvbnN0IGNoYXIqKSBtMWI7CiAgfQoKCgoKCiAgUFJJbnQzMiBH
ZXRMZW5ndGgoKSBjb25zdCB7CiAgICByZXR1cm4gUFJJbnQzMihtU3RhdGUubUxlbmd0aCk7CiAg
fQoKCgoKCiAgUFJVbmljaGFyKiBHZXQyYigpIHsKICAgIHt9OwogICAgcmV0dXJuIG0yYjsKICB9
CgoKCgoKICBjaGFyKiBHZXQxYigpIHsKICAgIHt9OwogICAgcmV0dXJuIChjaGFyKikgbTFiOwog
IH0KCgoKCgoKCiAgdm9pZCBTZXRUbyhQUlVuaWNoYXIqIGFCdWZmZXIsIFBSSW50MzIgYUxlbmd0
aCwgUFJCb29sIGFSZWxlYXNlKTsKCgoKCgoKCiAgUFJCb29sIFNldFRvKGNvbnN0IFBSVW5pY2hh
ciogYUJ1ZmZlciwgUFJJbnQzMiBhTGVuZ3RoKTsKIyAxOTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc1RleHRGcmFnbWVudC5oIgogIHZvaWQgU2V0VG8oY29uc3QgY2hhciogYUJ1ZmZlciwg
UFJJbnQzMiBhTGVuZ3RoKTsKCgoKCiAgdm9pZCBBcHBlbmRUbyhuc1N0cmluZyYgYVN0cmluZykg
Y29uc3Q7CgoKCgoKCgogIHZvaWQgQ29weVRvKFBSVW5pY2hhciogYURlc3QsIFBSSW50MzIgYU9m
ZnNldCwgUFJJbnQzMiBhQ291bnQpOwoKCgoKCgoKICB2b2lkIENvcHlUbyhjaGFyKiBhRGVzdCwg
UFJJbnQzMiBhT2Zmc2V0LCBQUkludDMyIGFDb3VudCk7CgoKCgoKICBQUlVuaWNoYXIgQ2hhckF0
KFBSSW50MzIgYUluZGV4KSBjb25zdCB7CiAgICB7fTsKICAgIHJldHVybiBtU3RhdGUubUlzMmIg
PyBtMmJbYUluZGV4XSA6IFBSVW5pY2hhcihtMWJbYUluZGV4XSk7CiAgfQoKcHJvdGVjdGVkOgog
IHVuaW9uIHsKICAgIFBSVW5pY2hhciogbTJiOwogICAgdW5zaWduZWQgY2hhciogbTFiOwogIH07
CgpwdWJsaWM6CiAgc3RydWN0IEZyYWdtZW50Qml0cyB7CiAgICBQUlVpbnQzMiBtSW5IZWFwIDog
MTsKICAgIFBSVWludDMyIG1JczJiIDogMTsKICAgIFBSVWludDMyIG1MZW5ndGggOiAzMDsKICB9
OwoKcHJvdGVjdGVkOgogIHVuaW9uIHsKICAgIFBSVWludDMyIG1BbGxCaXRzOwogICAgRnJhZ21l
bnRCaXRzIG1TdGF0ZTsKICB9OwoKICB2b2lkIFJlbGVhc2VUZXh0KCk7Cn07CiMgMjYgIm5zVGV4
dFRyYW5zZm9ybWVyLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9y
dHMuaCIgMQojIDI3ICJuc1RleHRUcmFuc2Zvcm1lci5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVByZXNDb250ZXh0LmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVByZXNDb250ZXh0LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zbGF5
b3V0LmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNDb250ZXh0Lmgi
IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDI4ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc0NvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc1JlY3QuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNSZWN0LmgiCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdu
dS8zLjAvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zUmVjdC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29vcmQuaCIgMQoj
IDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb29yZC5oIgojIDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNDb29yZC5oIiAyCiMgNDAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Nvb3JkLmgiCnR5
cGVkZWYgUFJJbnQzMiBuc2Nvb3JkOwojIDI5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNS
ZWN0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNQb2ludC5oIiAxCiMgMjYg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1BvaW50LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zQ29vcmQuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNQ
b2ludC5oIiAyCgpzdHJ1Y3QgbnNQb2ludCB7CiAgbnNjb29yZCB4LCB5OwoKCiAgbnNQb2ludCgp
IHt9CiAgbnNQb2ludChjb25zdCBuc1BvaW50JiBhUG9pbnQpIHt4ID0gYVBvaW50Lng7IHkgPSBh
UG9pbnQueTt9CiAgbnNQb2ludChuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZKSB7eCA9IGFYOyB5ID0g
YVk7fQoKICB2b2lkIE1vdmVUbyhuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZKSB7eCA9IGFYOyB5ID0g
YVk7fQogIHZvaWQgTW92ZUJ5KG5zY29vcmQgYUR4LCBuc2Nvb3JkIGFEeSkge3ggKz0gYUR4OyB5
ICs9IGFEeTt9CgoKCiAgUFJCb29sIG9wZXJhdG9yPT0oY29uc3QgbnNQb2ludCYgYVBvaW50KSBj
b25zdCB7CiAgICByZXR1cm4gKFBSQm9vbCkgKCh4ID09IGFQb2ludC54KSAmJiAoeSA9PSBhUG9p
bnQueSkpOwogIH0KICBQUkJvb2wgb3BlcmF0b3IhPShjb25zdCBuc1BvaW50JiBhUG9pbnQpIGNv
bnN0IHsKICAgIHJldHVybiAoUFJCb29sKSAoKHggIT0gYVBvaW50LngpIHx8ICh5ICE9IGFQb2lu
dC55KSk7CiAgfQogIG5zUG9pbnQgb3BlcmF0b3IrKGNvbnN0IG5zUG9pbnQmIGFQb2ludCkgY29u
c3QgewogICAgcmV0dXJuIG5zUG9pbnQoeCArIGFQb2ludC54LCB5ICsgYVBvaW50LnkpOwogIH0K
ICBuc1BvaW50IG9wZXJhdG9yLShjb25zdCBuc1BvaW50JiBhUG9pbnQpIGNvbnN0IHsKICAgIHJl
dHVybiBuc1BvaW50KHggLSBhUG9pbnQueCwgeSAtIGFQb2ludC55KTsKICB9CiAgbnNQb2ludCYg
b3BlcmF0b3IrPShjb25zdCBuc1BvaW50JiBhUG9pbnQpIHsKICAgIHggKz0gYVBvaW50Lng7CiAg
ICB5ICs9IGFQb2ludC55OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBuc1BvaW50JiBvcGVyYXRv
ci09KGNvbnN0IG5zUG9pbnQmIGFQb2ludCkgewogICAgeCAtPSBhUG9pbnQueDsKICAgIHkgLT0g
YVBvaW50Lnk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQp9OwoKCgoKCnN0cnVjdCBuc0Zsb2F0UG9p
bnQgewogIGZsb2F0IHgsIHk7CgoKICBuc0Zsb2F0UG9pbnQoKSB7fQogIG5zRmxvYXRQb2ludChj
b25zdCBuc0Zsb2F0UG9pbnQmIGFQb2ludCkge3ggPSBhUG9pbnQueDsgeSA9IGFQb2ludC55O30K
ICBuc0Zsb2F0UG9pbnQoZmxvYXQgYVgsIGZsb2F0IGFZKSB7eCA9IGFYOyB5ID0gYVk7fQoKICB2
b2lkIE1vdmVUbyhmbG9hdCBhWCwgZmxvYXQgYVkpIHt4ID0gYVg7IHkgPSBhWTt9CiAgdm9pZCBN
b3ZlVG8obnNjb29yZCBhWCwgbnNjb29yZCBhWSkge3ggPSAoZmxvYXQpYVg7IHkgPSAoZmxvYXQp
YVk7fQogIHZvaWQgTW92ZUJ5KGZsb2F0IGFEeCwgZmxvYXQgYUR5KSB7eCArPSBhRHg7IHkgKz0g
YUR5O30KCgoKICBQUkJvb2wgb3BlcmF0b3I9PShjb25zdCBuc0Zsb2F0UG9pbnQmIGFQb2ludCkg
Y29uc3QgewogICAgcmV0dXJuIChQUkJvb2wpICgoeCA9PSBhUG9pbnQueCkgJiYgKHkgPT0gYVBv
aW50LnkpKTsKICB9CiAgUFJCb29sIG9wZXJhdG9yIT0oY29uc3QgbnNGbG9hdFBvaW50JiBhUG9p
bnQpIGNvbnN0IHsKICAgIHJldHVybiAoUFJCb29sKSAoKHggIT0gYVBvaW50LngpIHx8ICh5ICE9
IGFQb2ludC55KSk7CiAgfQogIG5zRmxvYXRQb2ludCBvcGVyYXRvcisoY29uc3QgbnNGbG9hdFBv
aW50JiBhUG9pbnQpIGNvbnN0IHsKICAgIHJldHVybiBuc0Zsb2F0UG9pbnQoeCArIGFQb2ludC54
LCB5ICsgYVBvaW50LnkpOwogIH0KICBuc0Zsb2F0UG9pbnQgb3BlcmF0b3ItKGNvbnN0IG5zRmxv
YXRQb2ludCYgYVBvaW50KSBjb25zdCB7CiAgICByZXR1cm4gbnNGbG9hdFBvaW50KHggLSBhUG9p
bnQueCwgeSAtIGFQb2ludC55KTsKICB9CiAgbnNGbG9hdFBvaW50JiBvcGVyYXRvcis9KGNvbnN0
IG5zRmxvYXRQb2ludCYgYVBvaW50KSB7CiAgICB4ICs9IGFQb2ludC54OwogICAgeSArPSBhUG9p
bnQueTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgbnNGbG9hdFBvaW50JiBvcGVyYXRvci09KGNv
bnN0IG5zRmxvYXRQb2ludCYgYVBvaW50KSB7CiAgICB4IC09IGFQb2ludC54OwogICAgeSAtPSBh
UG9pbnQueTsKICAgIHJldHVybiAqdGhpczsKICB9Cn07CgoKCgoKCnN0cnVjdCBuc1BhdGhQb2lu
dDogcHVibGljIG5zRmxvYXRQb2ludHsKCiAgUFJCb29sIG1Jc09uQ3VydmU7CgoKICBuc1BhdGhQ
b2ludCgpIHt9CiAgbnNQYXRoUG9pbnQoY29uc3QgbnNQYXRoUG9pbnQmIGFQb2ludCkge3ggPSBh
UG9pbnQueDsgeSA9IGFQb2ludC55O21Jc09uQ3VydmU9YVBvaW50Lm1Jc09uQ3VydmU7fQogIG5z
UGF0aFBvaW50KGZsb2F0IGFYLCBmbG9hdCBhWSkge3ggPSBhWDsgeSA9IGFZO21Jc09uQ3VydmU9
MTt9CiAgbnNQYXRoUG9pbnQoZmxvYXQgYVgsIGZsb2F0IGFZLFBSQm9vbCBhSXNPbkN1cnZlKSB7
eCA9IGFYOyB5ID0gYVk7bUlzT25DdXJ2ZT1hSXNPbkN1cnZlO30KCn07CiMgMzAgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc1JlY3QuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc1NpemUuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTaXplLmgiCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29vcmQuaCIgMQojIDI3ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNTaXplLmgiIDIKCgoKCnN0cnVjdCBuc1NpemUgewogIG5zY29vcmQg
d2lkdGgsIGhlaWdodDsKCgogIG5zU2l6ZSgpIHt9CiAgbnNTaXplKGNvbnN0IG5zU2l6ZSYgYVNp
emUpIHt3aWR0aCA9IGFTaXplLndpZHRoOyBoZWlnaHQgPSBhU2l6ZS5oZWlnaHQ7fQogIG5zU2l6
ZShuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0KSB7d2lkdGggPSBhV2lkdGg7IGhlaWdo
dCA9IGFIZWlnaHQ7fQoKICB2b2lkIFNpemVUbyhuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVp
Z2h0KSB7d2lkdGggPSBhV2lkdGg7IGhlaWdodCA9IGFIZWlnaHQ7fQogIHZvaWQgU2l6ZUJ5KG5z
Y29vcmQgYURlbHRhV2lkdGgsIG5zY29vcmQgYURlbHRhSGVpZ2h0KSB7d2lkdGggKz0gYURlbHRh
V2lkdGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWlnaHQgKz0gYURlbHRhSGVpZ2h0O30KCgoKICBQUkJvb2wgb3BlcmF0b3I9PShj
b25zdCBuc1NpemUmIGFTaXplKSBjb25zdCB7CiAgICByZXR1cm4gKFBSQm9vbCkgKCh3aWR0aCA9
PSBhU2l6ZS53aWR0aCkgJiYgKGhlaWdodCA9PSBhU2l6ZS5oZWlnaHQpKTsKICB9CiAgUFJCb29s
IG9wZXJhdG9yIT0oY29uc3QgbnNTaXplJiBhU2l6ZSkgY29uc3QgewogICAgcmV0dXJuIChQUkJv
b2wpICgod2lkdGggIT0gYVNpemUud2lkdGgpIHx8IChoZWlnaHQgIT0gYVNpemUuaGVpZ2h0KSk7
CiAgfQogIG5zU2l6ZSBvcGVyYXRvcisoY29uc3QgbnNTaXplJiBhU2l6ZSkgY29uc3QgewogICAg
cmV0dXJuIG5zU2l6ZSh3aWR0aCArIGFTaXplLndpZHRoLCBoZWlnaHQgKyBhU2l6ZS5oZWlnaHQp
OwogIH0KICBuc1NpemUgb3BlcmF0b3ItKGNvbnN0IG5zU2l6ZSYgYVNpemUpIGNvbnN0IHsKICAg
IHJldHVybiBuc1NpemUod2lkdGggLSBhU2l6ZS53aWR0aCwgaGVpZ2h0IC0gYVNpemUuaGVpZ2h0
KTsKICB9CiAgbnNTaXplJiBvcGVyYXRvcis9KGNvbnN0IG5zU2l6ZSYgYVNpemUpIHt3aWR0aCAr
PSBhU2l6ZS53aWR0aDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlaWdodCArPSBhU2l6ZS5oZWlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gKnRoaXM7fQogIG5zU2l6ZSYgb3BlcmF0b3ItPShjb25zdCBuc1Np
emUmIGFTaXplKSB7d2lkdGggLT0gYVNpemUud2lkdGg7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWlnaHQgLT0gYVNpemUuaGVpZ2h0OwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzO30KfTsKIyAzMSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUmVjdC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zTWFyZ2luLmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zTWFy
Z2luLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29vcmQuaCIgMQojIDI3ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNNYXJnaW4uaCIgMgoKc3RydWN0IG5zTWFyZ2luIHsK
ICBuc2Nvb3JkIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKCgogIG5zTWFyZ2luKCkge30KICBu
c01hcmdpbihjb25zdCBuc01hcmdpbiYgYU1hcmdpbikgeyp0aGlzID0gYU1hcmdpbjt9CiAgbnNN
YXJnaW4obnNjb29yZCBhTGVmdCwgbnNjb29yZCBhVG9wLAogICAgICAgICAgIG5zY29vcmQgYVJp
Z2h0LCBuc2Nvb3JkIGFCb3R0b20pIHtsZWZ0ID0gYUxlZnQ7IHRvcCA9IGFUb3A7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gYVJpZ2h0OyBib3R0
b20gPSBhQm90dG9tO30KCiAgdm9pZCBTaXplVG8obnNjb29yZCBhTGVmdCwgbnNjb29yZCBhVG9w
LAogICAgICAgICAgICAgIG5zY29vcmQgYVJpZ2h0LCBuc2Nvb3JkIGFCb3R0b20pIHtsZWZ0ID0g
YUxlZnQ7IHRvcCA9IGFUb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJpZ2h0ID0gYVJpZ2h0OyBib3R0b20gPSBhQm90dG9tO30KICB2b2lkIFNpemVC
eShuc2Nvb3JkIGFMZWZ0LCBuc2Nvb3JkIGFUb3AsCiAgICAgICAgICAgICAgbnNjb29yZCBhUmln
aHQsIG5zY29vcmQgYUJvdHRvbSkge2xlZnQgKz0gYUxlZnQ7IHRvcCArPSBhVG9wOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodCArPSBhUmlnaHQ7
IGJvdHRvbSArPSBhQm90dG9tO30KCgoKICBQUkJvb2wgb3BlcmF0b3I9PShjb25zdCBuc01hcmdp
biYgYU1hcmdpbikgY29uc3QgewogICAgcmV0dXJuIChQUkJvb2wpICgobGVmdCA9PSBhTWFyZ2lu
LmxlZnQpICYmICh0b3AgPT0gYU1hcmdpbi50b3ApICYmCiAgICAgICAgICAgICAgICAgICAgIChy
aWdodCA9PSBhTWFyZ2luLnJpZ2h0KSAmJiAoYm90dG9tID09IGFNYXJnaW4uYm90dG9tKSk7CiAg
fQogIFBSQm9vbCBvcGVyYXRvciE9KGNvbnN0IG5zTWFyZ2luJiBhTWFyZ2luKSBjb25zdCB7CiAg
ICByZXR1cm4gKFBSQm9vbCkgKChsZWZ0ICE9IGFNYXJnaW4ubGVmdCkgfHwgKHRvcCAhPSBhTWFy
Z2luLnRvcCkgfHwKICAgICAgICAgICAgICAgICAgICAgKHJpZ2h0ICE9IGFNYXJnaW4ucmlnaHQp
IHx8IChib3R0b20gIT0gYU1hcmdpbi5ib3R0b20pKTsKICB9CiAgbnNNYXJnaW4gb3BlcmF0b3Ir
KGNvbnN0IG5zTWFyZ2luJiBhTWFyZ2luKSBjb25zdCB7CiAgICByZXR1cm4gbnNNYXJnaW4obGVm
dCArIGFNYXJnaW4ubGVmdCwgdG9wICsgYU1hcmdpbi50b3AsCiAgICAgICAgICAgICAgICAgICAg
cmlnaHQgKyBhTWFyZ2luLnJpZ2h0LCBib3R0b20gKyBhTWFyZ2luLmJvdHRvbSk7CiAgfQogIG5z
TWFyZ2luIG9wZXJhdG9yLShjb25zdCBuc01hcmdpbiYgYU1hcmdpbikgY29uc3QgewogICAgcmV0
dXJuIG5zTWFyZ2luKGxlZnQgLSBhTWFyZ2luLmxlZnQsIHRvcCAtIGFNYXJnaW4udG9wLAogICAg
ICAgICAgICAgICAgICAgIHJpZ2h0IC0gYU1hcmdpbi5yaWdodCwgYm90dG9tIC0gYU1hcmdpbi5i
b3R0b20pOwogIH0KICBuc01hcmdpbiYgb3BlcmF0b3IrPShjb25zdCBuc01hcmdpbiYgYU1hcmdp
bikge2xlZnQgKz0gYU1hcmdpbi5sZWZ0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9wICs9IGFNYXJnaW4udG9wOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgKz0gYU1hcmdpbi5yaWdodDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbSArPSBh
TWFyZ2luLmJvdHRvbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAqdGhpczt9CiAgbnNNYXJnaW4mIG9wZXJhdG9yLT0oY29uc3QgbnNNYXJn
aW4mIGFNYXJnaW4pIHtsZWZ0IC09IGFNYXJnaW4ubGVmdDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCAtPSBhTWFyZ2luLnRvcDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0IC09IGFNYXJnaW4u
cmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b3R0b20gLT0gYU1hcmdpbi5ib3R0b207CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7fQp9OwojIDMyICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNSZWN0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNVbml0
Q29udmVyc2lvbi5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1VuaXRDb252
ZXJzaW9uLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgMjYg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1VuaXRDb252ZXJzaW9uLmgiIDIKIyAxICIvdXNy
L2luY2x1ZGUvbWF0aC5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAz
CgpleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9odWdlX3ZhbC5oIiAxIDMK
IyAyNSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9m
ZWF0dXJlcy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMiAzCiMg
MzQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL25h
bi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy9tYXRoZGVmLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgi
IDMKdHlwZWRlZiBsb25nIGRvdWJsZSBmbG9hdF90OwoKdHlwZWRlZiBsb25nIGRvdWJsZSBkb3Vi
bGVfdDsKIyA0MSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgNjMgIi91c3IvaW5jbHVkZS9t
YXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91
c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBkb3VibGUgYWNvcyAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hY29zIChkb3VibGUgX194KSB0aHJvdyAo
KTsKCmV4dGVybiBkb3VibGUgYXNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19hc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbiAoZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuIChkb3VibGUgX194KSB0aHJv
dyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93
ICgpOyBleHRlcm4gZG91YmxlIF9fYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKCmV4dGVybiBkb3VibGUgY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX2NvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHNpbiAoZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaW4gKGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91
YmxlIF9fdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29zIChk
b3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOyBleHRl
cm4gdm9pZCBfX3NpbmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJsZSAqX19j
b3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBjb3NoIChkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Nvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu
IGRvdWJsZSBzaW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3Npbmgg
KGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW5oIChkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3RhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpl
eHRlcm4gZG91YmxlIGFjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X2Fjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXNpbmggKGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXNpbmggKGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19hdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBl
eHAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwIChkb3VibGUgX194
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBleHAxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19leHAxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91
YmxlIHBvdzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3BvdzEwIChk
b3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBmcmV4cCAoZG91YmxlIF9feCwg
aW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZyZXhwIChkb3VibGUg
X194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbGRleHAgKGRv
dWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xkZXhw
IChkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBs
b2cgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nIChkb3VibGUgX194
KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGRvdWJsZSBfX2xvZzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91
YmxlIG1vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX21vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGRvdWJsZSBleHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19l
eHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxcCAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cxcCAoZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX2xvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBleHAy
IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cDIgKGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBkb3VibGUgX19sb2cyIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRv
dWJsZSBwb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fcG93IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91Ymxl
IHNxcnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc3FydCAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJs
ZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9faHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJs
ZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBjYnJ0IChkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NicnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
Y2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmYWJzIChkb3VibGUg
X194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUg
X19mYWJzIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKZXh0ZXJuIGRvdWJsZSBmbG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19mbG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbW9kIChk
b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Ztb2QgKGRv
dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mIChk
b3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4
dGVybiBpbnQgX19maW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mIChkb3VibGUgX192YWx1ZSkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlIChk
b3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoK
CgoKZXh0ZXJuIGRvdWJsZSBpbmZuYW4gKGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19pbmZuYW4gKGludCBfX2Vycm9yKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBkcmVt
IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2RyZW0g
KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHNpZ25p
ZmljYW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpZ25pZmljYW5k
IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgY29weXNpZ24gKGRvdWJs
ZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsg
ZXh0ZXJuIGRvdWJsZSBfX2NvcHlzaWduIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gZG91YmxlIG5hbiAoX19j
b25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsg
ZXh0ZXJuIGRvdWJsZSBfX25hbiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19pc25hbiAoZG91YmxlIF9f
dmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGlu
dCBpc25hbiAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgpleHRlcm4gZG91YmxlIGowIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fajAgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgajEgKGRvdWJsZSkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19qMSAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBq
biAoaW50LCBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fam4gKGludCwgZG91Ymxl
KSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5MCAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX3kwIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIHkxIChkb3VibGUpIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9feTEgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3Vi
bGUgeW4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3luIChpbnQsIGRv
dWJsZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBlcmYgKGRvdWJsZSkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19lcmYgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgZXJm
YyAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZmMgKGRvdWJsZSkgdGhyb3cg
KCk7CmV4dGVybiBkb3VibGUgbGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fbGdhbW1hIChkb3VibGUpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHRnYW1tYSAoZG91
YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3RnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBkb3VibGUgZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg
X19nYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBsZ2FtbWFfciAo
ZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbGdhbW1h
X3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJs
ZSByaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JpbnQgKGRvdWJs
ZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbmV4dGFmdGVyIChkb3VibGUgX194LCBk
b3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBk
b3VibGUgX19uZXh0YWZ0ZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBkb3VibGUgbmV4dHRvd2FyZCAoZG91Ymxl
IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7IGV4dGVybiBkb3VibGUgX19uZXh0dG93YXJkIChkb3VibGUgX194LCBsb25nIGRvdWJsZSBf
X3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGRvdWJs
ZSByZW1haW5kZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91
YmxlIF9fcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGRvdWJsZSBzY2FsYiAoZG91YmxlIF9feCwgZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX19zY2FsYiAoZG91YmxlIF9feCwgZG91YmxlIF9fbikgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gZG91YmxlIHNjYWxibiAoZG91YmxlIF9feCwgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX19zY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IGlsb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2diIChk
b3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgc2NhbGJsbiAoZG91YmxlIF9f
eCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxibG4gKGRvdWJs
ZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgbmVhcmJ5aW50
IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX25lYXJieWludCAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgcm91bmQgKGRvdWJsZSBfX3gpIHRocm93
ICgpOyBleHRlcm4gZG91YmxlIF9fcm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRl
cm4gZG91YmxlIHRydW5jIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7IGV4dGVybiBkb3VibGUgX190cnVuYyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGRvdWJsZSByZW1xdW8gKGRvdWJs
ZSBfX3gsIGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
cmVtcXVvIChkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsKCgoK
CgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgaW50IF9fbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGlu
dCBsbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xs
cmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBscm91bmQgKGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scm91bmQgKGRvdWJsZSBfX3gp
IHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kIChkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGRvdWJsZSBmZGltIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX2ZkaW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgp
OwoKCmV4dGVybiBkb3VibGUgZm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19mbWF4IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsK
CgpleHRlcm4gZG91YmxlIGZtaW4gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBl
eHRlcm4gZG91YmxlIF9fZm1pbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoK
CmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5IChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXQgKGRvdWJs
ZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK
ZXh0ZXJuIGRvdWJsZSBmbWEgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3Vi
bGUgX196KSB0aHJvdyAoKTsKIyA2NCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgODIgIi91
c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIg
MSAzCiMgNTQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBmbG9hdCBh
Y29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYWNvc2YgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXNpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4
dGVybiBmbG9hdCBfX2FzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0
YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hdGFuZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGNvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX2Nvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgc2luZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2luZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsKCmV4dGVybiBmbG9hdCB0YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X190YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBzaW5jb3NmIChmbG9h
dCBfX3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0ICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9p
ZCBfX3NpbmNvc2YgKGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwgZmxvYXQgKl9fY29zeCkgdGhy
b3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGZsb2F0IF9fY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgc2lu
aGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NpbmhmIChmbG9hdCBfX3gp
IHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHRhbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX190YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGFj
b3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYWNvc2hmIChmbG9hdCBf
X3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGZsb2F0IF9fYXNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0
IGF0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRhbmhmIChmbG9h
dCBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBmbG9hdCBleHBmIChmbG9hdCBfX3gpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19leHBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4g
ZmxvYXQgZXhwMTBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHAxMGYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgcG93MTBmIChmbG9hdCBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19wb3cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4
dGVybiBmbG9hdCBmcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsg
ZXh0ZXJuIGZsb2F0IF9fZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAoZmxvYXQgX194LCBpbnQgX19leHBvbmVudCkgdGhy
b3cgKCk7IGV4dGVybiBmbG9hdCBfX2xkZXhwZiAoZmxvYXQgX194LCBpbnQgX19leHBvbmVudCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX2xvZ2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzEw
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMTBmIChmbG9hdCBfX3gp
IHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBtb2RmZiAoZmxvYXQgX194LCBmbG9hdCAqX19pcHRy
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbW9kZmYgKGZsb2F0IF9feCwgZmxvYXQgKl9faXB0
cikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBleHBtMWYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX2V4cG0xZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxv
YXQgbG9nMXBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cxcGYgKGZs
b2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2JmIChmbG9hdCBfX3gpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19sb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBmbG9hdCBleHAyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwMmYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzJmIChmbG9hdCBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgoK
ZXh0ZXJuIGZsb2F0IHBvd2YgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJu
IGZsb2F0IF9fcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBm
bG9hdCBzcXJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc3FydGYgKGZs
b2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBoeXBvdGYgKGZsb2F0IF9feCwgZmxv
YXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9faHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0
IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgY2JydGYgKGZsb2F0IF9feCkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX2NicnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRl
cm4gZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2NlaWxm
IChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2ZhYnNm
IChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRl
cm4gZmxvYXQgZmxvb3JmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbG9v
cmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gs
IGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Ztb2RmIChmbG9hdCBfX3gsIGZs
b2F0IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXNpbmZmIChmbG9hdCBfX3ZhbHVl
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zp
bml0ZWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgoKCmV4dGVybiBpbnQgaXNpbmZmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVmIChmbG9hdCBfX3ZhbHVl
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCgpleHRlcm4gZmxv
YXQgaW5mbmFuZiAoaW50IF9fZXJyb3IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsgZXh0ZXJuIGZsb2F0IF9faW5mbmFuZiAoaW50IF9fZXJyb3IpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZHJlbWYgKGZsb2F0IF9feCwg
ZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZHJlbWYgKGZsb2F0IF9feCwgZmxv
YXQgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHNpZ25pZmljYW5kZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGNvcHlzaWduZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fY29weXNp
Z25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCgoKZXh0ZXJuIGZsb2F0IG5hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25hbmYgKF9f
Y29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCgpleHRlcm4gaW50IF9faXNuYW5mIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW5mIChmbG9hdCBfX3ZhbHVl
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGow
ZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19qMGYgKGZsb2F0KSB0aHJvdyAoKTsK
ZXh0ZXJuIGZsb2F0IGoxZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19qMWYgKGZs
b2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGpuZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4
dGVybiBmbG9hdCBfX2puZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MGYg
KGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9feTBmIChmbG9hdCkgdGhyb3cgKCk7CmV4
dGVybiBmbG9hdCB5MWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9feTFmIChmbG9h
dCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5bmYgKGludCwgZmxvYXQpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX195bmYgKGludCwgZmxvYXQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBmbG9hdCBl
cmZmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2VyZmYgKGZsb2F0KSB0aHJvdyAo
KTsKZXh0ZXJuIGZsb2F0IGVyZmNmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Vy
ZmNmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBsZ2FtbWFmIChmbG9hdCkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZs
b2F0IHRnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGdhbW1hZiAoZmxv
YXQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19nYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0
IGxnYW1tYWZfciAoZmxvYXQsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX2xnYW1tYWZfciAoZmxvYXQsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBmbG9hdCByaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmlu
dGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IG5leHRhZnRlcmYgKGZsb2F0
IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4
dGVybiBmbG9hdCBfX25leHRhZnRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZmxvYXQgbmV4dHRvd2FyZGYgKGZs
b2F0IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHR0b3dhcmRmIChmbG9hdCBfX3gsIGxvbmcgZG91Ymxl
IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZmxv
YXQgcmVtYWluZGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX19yZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVy
biBmbG9hdCBzY2FsYmYgKGZsb2F0IF9feCwgZmxvYXQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fc2NhbGJmIChmbG9hdCBfX3gsIGZsb2F0IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4g
ZmxvYXQgc2NhbGJuZiAoZmxvYXQgX194LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0
IF9fc2NhbGJuZiAoZmxvYXQgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBp
bG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYmYgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBp
bnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9u
ZyBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IG5lYXJieWludGYgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX25lYXJieWludGYgKGZsb2F0IF9feCkgdGhyb3cg
KCk7CgoKCmV4dGVybiBmbG9hdCByb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX3JvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHRydW5j
ZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVy
biBmbG9hdCBfX3RydW5jZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKCgpleHRlcm4gZmxvYXQgcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ks
IGludCAqX19xdW8pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yZW1xdW9mIChmbG9hdCBfX3gs
IGZsb2F0IF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBs
cmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50ZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50ZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRmIChmbG9hdCBfX3gpIHRo
cm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxv
bmcgbG9uZyBpbnQgbGxyb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxv
bmcgaW50IF9fbGxyb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBm
ZGltZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mZGlt
ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbWF4ZiAo
ZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWF4ZiAoZmxv
YXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbWluZiAoZmxvYXQg
X194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWluZiAoZmxvYXQgX194
LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWYgKGZsb2F0
IF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4
dGVybiBpbnQgX19zaWduYml0ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBmbG9hdCBmbWFmIChmbG9hdCBfX3gsIGZs
b2F0IF9feSwgZmxvYXQgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZm1hZiAoZmxvYXQg
X194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikgdGhyb3cgKCk7CiMgODMgIi91c3IvaW5jbHVkZS9t
YXRoLmgiIDIgMwojIDk5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMu
aCIgMwpleHRlcm4gbG9uZyBkb3VibGUgYWNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19hc2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVy
biBsb25nIGRvdWJsZSBhdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fYXRhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9u
ZyBkb3VibGUgYXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3NsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3NsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpbmwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIHZvaWQgc2luY29zbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19z
aW54LCBsb25nIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsgZXh0ZXJuIHZvaWQgX19zaW5jb3Ns
IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nv
c3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY29zaGwgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nvc2hsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpbmhsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zaW5obCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBhY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK
CmV4dGVybiBsb25nIGRvdWJsZSBhdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX2F0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fZXhwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGxvbmcgZG91YmxlIGV4cDEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fZXhwMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu
IGxvbmcgZG91YmxlIHBvdzEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fcG93MTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4g
bG9uZyBkb3VibGUgZnJleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQg
Kl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsZGV4cGwgKGxvbmcg
ZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19sZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4
dGVybiBsb25nIGRvdWJsZSBsb2dsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19sb2dsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBs
b25nIGRvdWJsZSBsb2cxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX2xvZzEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9u
ZyBkb3VibGUgbW9kZmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX21vZGZsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg
ZG91YmxlICpfX2lwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbTFsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBtMWwgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzFwbCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMXBsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dibCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nYmwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwMmwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cDJsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cybCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMmwgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBwb3dsIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Bvd2wg
KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9u
ZyBkb3VibGUgc3FydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX3NxcnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBk
b3VibGUgaHlwb3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2h5cG90bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs
ZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNicnRsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jYnJ0bCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jZWlsbCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmFic2wgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19mYWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25n
IGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbW9kbCAobG9uZyBk
b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lz
aW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mbCAo
bG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKCmV4dGVybiBpbnQgZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGluZm5h
bmwgKGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX2luZm5hbmwgKGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRv
dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2RyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4
dGVybiBsb25nIGRvdWJsZSBzaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpZ25pZmljYW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX2NvcHlzaWdubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs
ZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBs
b25nIGRvdWJsZSBuYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uYW5sIChfX2NvbnN0IGNo
YXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0
ZXJuIGludCBfX2lzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFubCAobG9uZyBkb3VibGUgX192
YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25n
IGRvdWJsZSBqMGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
ajBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBqMWwgKGxvbmcg
ZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajFsIChsb25nIGRvdWJsZSkg
dGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBqbmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qbmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgp
OwpleHRlcm4gbG9uZyBkb3VibGUgeTBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX3kwbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3Vi
bGUgeTFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kxbCAo
bG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeW5sIChpbnQsIGxvbmcg
ZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feW5sIChpbnQsIGxvbmcgZG91
YmxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXJmbCAobG9uZyBkb3VibGUp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZsIChsb25nIGRvdWJsZSkgdGhyb3cg
KCk7CmV4dGVybiBsb25nIGRvdWJsZSBlcmZjbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9u
ZyBkb3VibGUgbGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19sZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJs
ZSB0Z2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Rn
YW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBnYW1t
YWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZ2FtbWFsIChs
b25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsX3Ig
KGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19sZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX3JpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CmV4dGVybiBsb25nIGRvdWJsZSBuZXh0YWZ0ZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91
YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19uZXh0YWZ0ZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl
IG5leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0dG93
YXJkbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJlbWFpbmRlcmwgKGxv
bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fcmVtYWluZGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93
ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg
ZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibCAobG9uZyBk
b3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91
YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX3NjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgaWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g
aW50IF9faWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcg
ZG91YmxlIHNjYWxibG5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibG5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgaW50
IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBuZWFyYnlpbnRsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZWFyYnlpbnRsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgcm91bmRsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19yb3VuZGwgKGxvbmcg
ZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSB0cnVuY2wgKGxvbmcg
ZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4g
bG9uZyBkb3VibGUgX190cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJlbXF1b2wgKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fcmVtcXVvbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ks
IGludCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnRsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scmludGwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmludGwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50bCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxyb3VuZGwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyb3VuZGwgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmRsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmRsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZmRpbWwgKGxvbmcgZG91
YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
ZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRl
cm4gbG9uZyBkb3VibGUgZm1heGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1heGwgKGxvbmcgZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1pbmwgKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKQog
ICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fc2lnbmJpdGwg
KGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1hbCAobG9uZyBkb3VibGUgX194LCBsb25n
IGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2ZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBf
X3opIHRocm93ICgpOwojIDEwMCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgMTEzICIvdXNy
L2luY2x1ZGUvbWF0aC5oIiAzCmV4dGVybiBpbnQgc2lnbmdhbTsKIyAxNTQgIi91c3IvaW5jbHVk
ZS9tYXRoLmgiIDMKZW51bQogIHsKICAgIEZQX05BTiwKCiAgICBGUF9JTkZJTklURSwKCiAgICBG
UF9aRVJPLAoKICAgIEZQX1NVQk5PUk1BTCwKCiAgICBGUF9OT1JNQUwKCiAgfTsKIyAyNDAgIi91
c3IvaW5jbHVkZS9tYXRoLmgiIDMKdHlwZWRlZiBlbnVtCnsKICBfSUVFRV8gPSAtMSwKICBfU1ZJ
RF8sCiAgX1hPUEVOXywKICBfUE9TSVhfLAogIF9JU09DXwp9IF9MSUJfVkVSU0lPTl9UWVBFOwoK
CgoKZXh0ZXJuIF9MSUJfVkVSU0lPTl9UWVBFIF9MSUJfVkVSU0lPTjsKIyAyNjMgIi91c3IvaW5j
bHVkZS9tYXRoLmgiIDMKc3RydWN0IF9fZXhjZXB0aW9uCgoKCiAgewogICAgaW50IHR5cGU7CiAg
ICBjaGFyICpuYW1lOwogICAgZG91YmxlIGFyZzE7CiAgICBkb3VibGUgYXJnMjsKICAgIGRvdWJs
ZSByZXR2YWw7CiAgfTsKCgpleHRlcm4gaW50IG1hdGhlcnIgKHN0cnVjdCBfX2V4Y2VwdGlvbiAq
X19leGMpIHRocm93ICgpOwojIDM1MCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMSAzCiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9t
YXRoaW5saW5lLmgiIDMKX19pbmxpbmUgaW50Cl9fc2lnbmJpdGYgKGZsb2F0IF9feCkgdGhyb3cg
KCkKewogIF9fZXh0ZW5zaW9uX18gdW5pb24geyBmbG9hdCBfX2Y7IGludCBfX2k7IH0gX191ID0g
eyBfX2Y6IF9feCB9OwogIHJldHVybiBfX3UuX19pIDwgMDsKfQpfX2lubGluZSBpbnQKX19zaWdu
Yml0IChkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgX19leHRlbnNpb25fXyB1bmlvbiB7IGRvdWJs
ZSBfX2Q7IGludCBfX2lbMl07IH0gX191ID0geyBfX2Q6IF9feCB9OwogIHJldHVybiBfX3UuX19p
WzFdIDwgMDsKfQpfX2lubGluZSBpbnQKX19zaWduYml0bCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKQp7CiAgX19leHRlbnNpb25fXyB1bmlvbiB7IGxvbmcgZG91YmxlIF9fbDsgaW50IF9faVsz
XTsgfSBfX3UgPSB7IF9fbDogX194IH07CiAgcmV0dXJuIChfX3UuX19pWzJdICYgMHg4MDAwKSAh
PSAwOwp9CiMgMjkxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUg
ZG91YmxlIF9fc2duIChkb3VibGUpIHRocm93ICgpOyBfX2lubGluZSBkb3VibGUgX19zZ24gKGRv
dWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9feCA9PSAwLjAgPyAwLjAgOiAoX194ID4gMC4w
ID8gMS4wIDogLTEuMCk7IH0gX19pbmxpbmUgZmxvYXQgX19zZ25mIChmbG9hdCkgdGhyb3cgKCk7
IF9faW5saW5lIGZsb2F0IF9fc2duZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJldHVybiBfX3gg
PT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjApOyB9IF9faW5saW5lIGxvbmcg
ZG91YmxlIF9fc2dubCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBfX2lubGluZSBsb25nIGRvdWJs
ZSBfX3NnbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX194ID09IDAuMCA/
IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfQojIDQ3NSAiL3Vzci9pbmNsdWRlL2Jp
dHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91
YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBf
X3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAo
X195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBhdGFuMmYg
KGZsb2F0IF9feSwgZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f
dmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIw
IiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5l
IGxvbmcgZG91YmxlIGF0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9f
ICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3Qo
MSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KX19pbmxpbmUgbG9uZyBkb3VibGUgX19hdGFuMmwgKGxv
bmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcg
ZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChfX3Zh
bHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9
CgoKX19pbmxpbmUgZG91YmxlIGZtb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgp
IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiMToJ
ZnByZW1cblx0IiAiZm5zdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChf
X3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImF4IiwgImNjIik7IHJldHVybiBfX3Zh
bHVlOyB9IF9faW5saW5lIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg
KCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIx
OglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIg
KF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9f
dmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9f
YXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtXG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInNhaGZc
blx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJh
eCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfQojIDQ5MCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0
aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJsZSBzcXJ0IChkb3VibGUgX194KSB0aHJvdyAoKSB7
IHJlZ2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNxcnQiIDog
Ij10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5l
IGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgZmxvYXQgX19yZXN1
bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAo
X194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBzcXJ0bCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBf
X2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkp
OyByZXR1cm4gX19yZXN1bHQ7IH0KX19pbmxpbmUgbG9uZyBkb3VibGUgX19zcXJ0bCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2Fz
bSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyBy
ZXR1cm4gX19yZXN1bHQ7IH0KCgpfX2lubGluZSBkb3VibGUgZmFicyAoZG91YmxlIF9feCkgdGhy
b3cgKCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnMgKF9feCk7IH0KX19pbmxpbmUgZmxvYXQgZmFi
c2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnNmIChfX3gpOyB9
Cl9faW5saW5lIGxvbmcgZG91YmxlIGZhYnNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsg
cmV0dXJuIF9fYnVpbHRpbl9mYWJzbCAoX194KTsgfQpfX2lubGluZSBsb25nIGRvdWJsZSBfX2Zh
YnNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbCAo
X194KTsgfQojIDUxNiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5l
IGRvdWJsZSBhdGFuIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jl
c3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0
KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgZmxv
YXQgYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBmbG9hdCBfX3Jlc3VsdDsg
X19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIw
IiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgbG9uZyBkb3Vi
bGUgYXRhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJs
ZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9dCIgKF9f
cmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0KCl9faW5s
aW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgX19pbmxpbmUg
bG9uZyBkb3VibGUgX19zZ24xbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IF9fZXh0ZW5z
aW9uX18gdW5pb24geyBsb25nIGRvdWJsZSBfX3hsZDsgdW5zaWduZWQgaW50IF9feGlbM107IH0g
X19uID0geyBfX3hsZDogX194IH07IF9fbi5fX3hpWzJdID0gKF9fbi5fX3hpWzJdICYgMHg4MDAw
KSB8IDB4M2ZmZjsgX19uLl9feGlbMV0gPSAweDgwMDAwMDAwOyBfX24uX194aVswXSA9IDA7IHJl
dHVybiBfX24uX194bGQ7IH0KIyA1NDIgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIg
MwpfX2lubGluZSBkb3VibGUgZmxvb3IgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIg
bG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsg
X192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAo
ImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAw
eDA0MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBf
X2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7
IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192
YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdp
c3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBf
X2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0
aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2Zm
KSB8IDB4MDQwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1w
KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChf
X3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVy
biBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5z
aWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0
bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1w
ID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAi
IDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAo
X192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAi
bSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1NTMgIi91c3IvaW5jbHVkZS9iaXRzL21h
dGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCkg
eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0
IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBf
X3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYg
MHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChf
X2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDog
IjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7
IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGNlaWxmIChmbG9hdCBfX3gpIHRocm93
ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBz
aG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19h
c20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19j
dyAmIDB4ZjNmZikgfCAweDA4MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJt
IiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVl
KSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19j
dykpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBjZWlsbCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9s
YXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQg
aW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykp
OyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBfX2FzbSBfX3ZvbGF0aWxlICgi
ZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQi
IDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cg
JTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1NzEgIi91c3IvaW5jbHVk
ZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUKbGRleHAgKGRvdWJsZSBfX3gs
IGludCBfX3kpIHRocm93ICgpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2Fz
bSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1
IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0KIyA1ODkgIi91c3IvaW5j
bHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgbG9nMXAgKGRvdWJsZSBf
X3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFic2wg
KF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBs
b2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQiICJm
eGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3QoMSki
KTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgbG9nMXBmIChmbG9hdCBfX3gpIHRo
cm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkg
Pj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2dsICgx
LjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNoXG5c
dCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0
dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFic2wg
KF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBs
b2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQiICJm
eGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3QoMSki
KTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA2MDMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUu
aCIgMwpfX2lubGluZSBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0
ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIChsb2cxcGwgKF9feSAq
IF9feSAvIChfX3NxcnRsIChfX3kgKiBfX3kgKyAxLjApICsgMS4wKSArIF9feSkgKiBfX3NnbjFs
IChfX3gpKTsgfSBfX2lubGluZSBmbG9hdCBhc2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyBy
ZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFwbCAo
X195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195KSAqIF9f
c2duMWwgKF9feCkpOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGFzaW5obCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7
IHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAoX195ICogX195ICsgMS4wKSAr
IDEuMCkgKyBfX3kpICogX19zZ24xbCAoX194KSk7IH0KCgoKCl9faW5saW5lIGRvdWJsZSBhY29z
aCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gbG9nbCAoX194ICsgX19zcXJ0bCAoX194
IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkpOyB9IF9faW5saW5lIGZsb2F0IGFjb3NoZiAo
ZmxvYXQgX194KSB0aHJvdyAoKSB7IHJldHVybiBsb2dsIChfX3ggKyBfX3NxcnRsIChfX3ggLSAx
LjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgYWNvc2hs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIGxvZ2wgKF9feCArIF9fc3FydGwg
KF9feCAtIDEuMCkgKiBfX3NxcnRsIChfX3ggKyAxLjApKTsgfQoKCl9faW5saW5lIGRvdWJsZSBh
dGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBf
X2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kgKyBfX3kpIC8gKDEuMCAr
IF9feSkpICogX19zZ24xbCAoX194KTsgfSBfX2lubGluZSBmbG9hdCBhdGFuaGYgKGZsb2F0IF9f
eCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyBy
ZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kgKyBfX3kpIC8gKDEuMCArIF9feSkpICogX19zZ24x
bCAoX194KTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBhdGFuaGwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1
cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kgKyBfX3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAo
X194KTsgfQoKCgoKX19pbmxpbmUgZG91YmxlIGh5cG90IChkb3VibGUgX194LCBkb3VibGUgX195
KSB0aHJvdyAoKSB7IHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpOyB9IF9f
aW5saW5lIGZsb2F0IGh5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIHsgcmV0
dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9feSAqIF9feSk7IH0gX19pbmxpbmUgbG9uZyBkb3Vi
bGUgaHlwb3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgeyBy
ZXR1cm4gX19zcXJ0bCAoX194ICogX194ICsgX195ICogX195KTsgfQoKX19pbmxpbmUgZG91Ymxl
IGxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1
ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRy
YWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJl
dHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGxvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgp
IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19q
dW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAi
PXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxv
bmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9u
ZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3Zv
bGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6
ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9CiMgNjMzICIvdXNyL2luY2x1ZGUvYml0cy9t
YXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZmxvYXQKbGRleHBmIChmbG9hdCBfX3gsIGludCBfX3kp
IHRocm93ICgpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0
aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoKGxvbmcg
ZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0KCl9faW5saW5lIGxvbmcgZG91YmxlCmxk
ZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX195KSB0aHJvdyAoKQp7CiAgcmVnaXN0ZXIgbG9u
ZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9f
dmFsdWUpIDogIjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkgX195KSk7IHJldHVybiBfX3Zh
bHVlOwp9CiMgNjU3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUg
bG9uZyBpbnQKbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpCnsKICBsb25nIGludCBfX2xyaW50
cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3RwbCAlMCIgOiAiPW0iIChfX2xyaW50cmVz
KSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19scmludHJlczsKfQpfX2lubGluZSBsb25n
IGludApscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCkKewogIGxvbmcgaW50IF9fbHJpbnRyZXM7
IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsICUwIiA6ICI9bSIgKF9fbHJpbnRyZXMpIDog
InQiIChfX3gpIDogInN0Iik7IHJldHVybiBfX2xyaW50cmVzOwp9Cl9faW5saW5lIGxvbmcgaW50
CmxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgbG9uZyBpbnQgX19scmludHJl
czsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGwgJTAiIDogIj1tIiAoX19scmludHJlcykg
OiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbHJpbnRyZXM7Cn0KIyA2ODAgIi91c3IvaW5j
bHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBsb25nIGxvbmcgaW50CmxscmludGYg
KGZsb2F0IF9feCkgdGhyb3cgKCkKewogIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRyZXM7IF9fYXNt
X18gX192b2xhdGlsZV9fICgiZmlzdHBsbCAlMCIgOiAiPW0iIChfX2xscmludHJlcykgOiAidCIg
KF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbGxyaW50cmVzOwp9Cl9faW5saW5lIGxvbmcgbG9uZyBp
bnQKbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgbG9uZyBsb25nIGludCBfX2xscmlu
dHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGxsICUwIiA6ICI9bSIgKF9fbGxyaW50
cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19sbHJpbnRyZXM7Cn0KX19pbmxpbmUg
bG9uZyBsb25nIGludApsbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpCnsKICBsb25n
IGxvbmcgaW50IF9fbGxyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3RwbGwgJTAi
IDogIj1tIiAoX19sbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJldHVybiBfX2xscmlu
dHJlczsKfQoKCgoKCgoKX19pbmxpbmUgZG91YmxlIGRyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBf
X3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGludCBfX2Ns
b2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW0xXG5cdCIgImZzdHN3CSUlYXhc
blx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSwgIj0mYSIgKF9fY2xvYmJl
cmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IF9f
aW5saW5lIGZsb2F0IGRyZW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgeyByZWdp
c3RlciBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgaW50IF9fY2xvYmJlcmVkOyBfX2FzbSBfX3Zv
bGF0aWxlX18gKCIxOglmcHJlbTFcblx0IiAiZnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpw
CTFiIiA6ICI9dCIgKF9fdmFsdWUpLCAiPSZhIiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAi
dSIgKF9feSkgOiAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUg
ZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJlZ2lz
dGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBpbnQgX19jbG9iYmVyZWQ7IF9fYXNtIF9fdm9s
YXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQiICJmc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJ
MWIiIDogIj10IiAoX192YWx1ZSksICI9JmEiIChfX2Nsb2JiZXJlZCkgOiAiMCIgKF9feCksICJ1
IiAoX195KSA6ICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfQojIDcxNSAiL3Vzci9pbmNsdWRlL2Jp
dHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGludApfX2Zpbml0ZSAoZG91YmxlIF9feCkgdGhy
b3cgKCkKewogIHJldHVybiAoX19leHRlbnNpb25fXwogICAgICAgICAgKCgoKCh1bmlvbiB7IGRv
dWJsZSBfX2Q7IGludCBfX2lbMl07IH0pIHtfX2Q6IF9feH0pLl9faVsxXQogICAgICAgICAgICAg
fCAweDgwMGZmZmZmdSkgKyAxKSA+PiAzMSkpOwp9CiMgMzUxICIvdXNyL2luY2x1ZGUvbWF0aC5o
IiAyIDMKIyA0MTEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKfQojIDI3ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNVbml0Q29udmVyc2lvbi5oIiAyCiMgMzkgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc1VuaXRDb252ZXJzaW9uLmgiCmlubGluZSBuc2Nvb3JkIE5TVG9Db29yZEZsb29y
KGZsb2F0IGFWYWx1ZSkKewogIHJldHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IG5zY29vcmQoYVZh
bHVlKSA6IG5zY29vcmQoYVZhbHVlIC0gMC45OTk5OTk5OTk5OTk5OTk5ZikpOwp9CgppbmxpbmUg
bnNjb29yZCBOU1RvQ29vcmRDZWlsKGZsb2F0IGFWYWx1ZSkKewogIHJldHVybiAoKDAuMGYgPD0g
YVZhbHVlKSA/IG5zY29vcmQoYVZhbHVlICsgMC45OTk5OTk5OTk5OTk5OTk5ZikgOiBuc2Nvb3Jk
KGFWYWx1ZSkpOwp9CgppbmxpbmUgbnNjb29yZCBOU1RvQ29vcmRSb3VuZChmbG9hdCBhVmFsdWUp
CnsKICByZXR1cm4gKCgwLjBmIDw9IGFWYWx1ZSkgPyBuc2Nvb3JkKGFWYWx1ZSArIDAuNWYpIDog
bnNjb29yZChhVmFsdWUgLSAwLjVmKSk7Cn0KCmlubGluZSBuc2Nvb3JkIE5TVG9Db29yZFJvdW5k
RXhjbHVzaXZlKGZsb2F0IGFWYWx1ZSkKewogIHJldHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IG5z
Y29vcmQoYVZhbHVlICsgMC40OTk5OTk5OTk5OTk5OTk5ZikgOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zY29vcmQoYVZhbHVlIC0gMC40OTk5OTk5OTk5OTk5OTk5ZikpOwp9CgoKCgoK
aW5saW5lIFBSSW50MzIgTlNUb0ludEZsb29yKGZsb2F0IGFWYWx1ZSkKewogIHJldHVybiAoKDAu
MGYgPD0gYVZhbHVlKSA/IFBSSW50MzIoYVZhbHVlKSA6IFBSSW50MzIoYVZhbHVlIC0gMC45OTk5
OTk5OTk5OTk5OTk5ZikpOwp9CgppbmxpbmUgUFJJbnQzMiBOU1RvSW50Q2VpbChmbG9hdCBhVmFs
dWUpCnsKICByZXR1cm4gKCgwLjBmIDw9IGFWYWx1ZSkgPyBQUkludDMyKGFWYWx1ZSArIDAuOTk5
OTk5OTk5OTk5OTk5OWYpIDogUFJJbnQzMihhVmFsdWUpKTsKfQoKaW5saW5lIFBSSW50MzIgTlNU
b0ludFJvdW5kKGZsb2F0IGFWYWx1ZSkKewogIHJldHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IFBS
SW50MzIoYVZhbHVlICsgMC41ZikgOiBQUkludDMyKGFWYWx1ZSAtIDAuNWYpKTsKfQoKaW5saW5l
IFBSSW50MzIgTlNUb0ludFJvdW5kRXhjbHVzaXZlKGZsb2F0IGFWYWx1ZSkKewogIHJldHVybiAo
KDAuMGYgPD0gYVZhbHVlKSA/IFBSSW50MzIoYVZhbHVlICsgMC40OTk5OTk5OTk5OTk5OTk5Zikg
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIoYVZhbHVlIC0gMC40OTk5OTk5
OTk5OTk5OTk5ZikpOwp9CgoKCgoKaW5saW5lIG5zY29vcmQgTlNGbG9hdFBvaW50c1RvVHdpcHMo
ZmxvYXQgYVBvaW50cykKewogIHJldHVybiBOU1RvQ29vcmRSb3VuZChhUG9pbnRzICogMjAuMGYp
Owp9CgppbmxpbmUgbnNjb29yZCBOU0ludFBvaW50c1RvVHdpcHMoUFJJbnQzMiBhUG9pbnRzKQp7
CiAgcmV0dXJuIG5zY29vcmQoYVBvaW50cyAqIDIwKTsKfQoKaW5saW5lIFBSSW50MzIgTlNUd2lw
c1RvSW50UG9pbnRzKG5zY29vcmQgYVR3aXBzKQp7CiAgcmV0dXJuIE5TVG9JbnRSb3VuZChhVHdp
cHMgLyAyMC4wZik7Cn0KCmlubGluZSBQUkludDMyIE5TVHdpcHNUb0Zsb29ySW50UG9pbnRzKG5z
Y29vcmQgYVR3aXBzKQp7CiAgcmV0dXJuIE5TVG9JbnRGbG9vcihhVHdpcHMgLyAyMC4wZik7Cn0K
CmlubGluZSBQUkludDMyIE5TVHdpcHNUb0NlaWxJbnRQb2ludHMobnNjb29yZCBhVHdpcHMpCnsK
ICByZXR1cm4gTlNUb0ludENlaWwoYVR3aXBzIC8gMjAuMGYpOwp9CgppbmxpbmUgZmxvYXQgTlNU
d2lwc1RvRmxvYXRQb2ludHMobnNjb29yZCBhVHdpcHMpCnsKICByZXR1cm4gKGZsb2F0KGFUd2lw
cykgLyAyMC4wZik7Cn0KCgoKCmlubGluZSBuc2Nvb3JkIE5TRmxvYXRQaXhlbHNUb1R3aXBzKGZs
b2F0IGFQaXhlbHMsIGZsb2F0IGFUd2lwc1BlclBpeGVsKQp7CiAgcmV0dXJuIE5TVG9Db29yZFJv
dW5kKGFQaXhlbHMgKiBhVHdpcHNQZXJQaXhlbCk7Cn0KCmlubGluZSBuc2Nvb3JkIE5TSW50UGl4
ZWxzVG9Ud2lwcyhQUkludDMyIGFQaXhlbHMsIGZsb2F0IGFUd2lwc1BlclBpeGVsKQp7CiAgcmV0
dXJuIE5TVG9Db29yZFJvdW5kKGZsb2F0KGFQaXhlbHMpICogYVR3aXBzUGVyUGl4ZWwpOwp9Cgpp
bmxpbmUgZmxvYXQgTlNUd2lwc1RvRmxvYXRQaXhlbHMobnNjb29yZCBhVHdpcHMsIGZsb2F0IGFQ
aXhlbHNQZXJUd2lwKQp7CiAgcmV0dXJuIChmbG9hdChhVHdpcHMpICogYVBpeGVsc1BlclR3aXAp
Owp9CgppbmxpbmUgUFJJbnQzMiBOU1R3aXBzVG9JbnRQaXhlbHMobnNjb29yZCBhVHdpcHMsIGZs
b2F0IGFQaXhlbHNQZXJUd2lwKQp7CiAgcmV0dXJuIE5TVG9JbnRSb3VuZChmbG9hdChhVHdpcHMp
ICogYVBpeGVsc1BlclR3aXApOwp9CgoKCgppbmxpbmUgbnNjb29yZCBOU1VuaXRzVG9Ud2lwcyhm
bG9hdCBhVmFsdWUsIGZsb2F0IGFQb2ludHNQZXJVbml0KQp7CiAgcmV0dXJuIE5TVG9Db29yZFJv
dW5kKGFWYWx1ZSAqIGFQb2ludHNQZXJVbml0ICogMjAuMGYpOwp9CgppbmxpbmUgZmxvYXQgTlNU
d2lwc1RvVW5pdHMobnNjb29yZCBhVHdpcHMsIGZsb2F0IGFVbml0c1BlclBvaW50KQp7CiAgcmV0
dXJuIChhVHdpcHMgKiAoYVVuaXRzUGVyUG9pbnQgLyAyMC4wZikpOwp9CiMgMzMgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc1JlY3QuaCIgMgoKc3RydWN0IG5zUmVjdCB7CiAgbnNjb29yZCB4
LCB5OwogIG5zY29vcmQgd2lkdGgsIGhlaWdodDsKCgogIG5zUmVjdCgpIDogeCgwKSwgeSgwKSwg
d2lkdGgoMCksIGhlaWdodCgwKSB7fQogIG5zUmVjdChjb25zdCBuc1JlY3QmIGFSZWN0KSB7KnRo
aXMgPSBhUmVjdDt9CiAgbnNSZWN0KGNvbnN0IG5zUG9pbnQmIGFPcmlnaW4sIGNvbnN0IG5zU2l6
ZSAmYVNpemUpIHt4ID0gYU9yaWdpbi54OyB5ID0gYU9yaWdpbi55OwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBhU2l6ZS53aWR0
aDsgaGVpZ2h0ID0gYVNpemUuaGVpZ2h0O30KICBuc1JlY3QobnNjb29yZCBhWCwgbnNjb29yZCBh
WSwgbnNjb29yZCBhV2lkdGgsIG5zY29vcmQgYUhlaWdodCkge3ggPSBhWDsgeSA9IGFZOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2lkdGggPSBhV2lkdGg7IGhlaWdodCA9IGFIZWlnaHQ7fQoKCgogIFBSQm9vbCBJc0Vt
cHR5KCkgY29uc3QgewogICAgcmV0dXJuIChQUkJvb2wpICgod2lkdGggPD0gMCkgfHwgKGhlaWdo
dCA8PSAwKSk7CiAgfQogIHZvaWQgRW1wdHkoKSB7d2lkdGggPSBoZWlnaHQgPSAwO30KCgogIFBS
Qm9vbCBDb250YWlucyhjb25zdCBuc1JlY3QmIGFSZWN0KSBjb25zdDsKICBQUkJvb2wgQ29udGFp
bnMobnNjb29yZCBhWCwgbnNjb29yZCBhWSkgY29uc3Q7CiAgUFJCb29sIENvbnRhaW5zKGNvbnN0
IG5zUG9pbnQmIGFQb2ludCkgY29uc3Qge3JldHVybiBDb250YWlucyhhUG9pbnQueCwgYVBvaW50
LnkpO30KCgoKICBQUkJvb2wgSW50ZXJzZWN0cyhjb25zdCBuc1JlY3QmIGFSZWN0KSBjb25zdDsK
CgoKCgoKICBQUkJvb2wgSW50ZXJzZWN0UmVjdChjb25zdCBuc1JlY3QmIGFSZWN0MSwgY29uc3Qg
bnNSZWN0JiBhUmVjdDIpOwoKCgoKCgogIFBSQm9vbCBVbmlvblJlY3QoY29uc3QgbnNSZWN0JiBh
UmVjdDEsIGNvbnN0IG5zUmVjdCYgYVJlY3QyKTsKCgogIHZvaWQgU2V0UmVjdChuc2Nvb3JkIGFY
LCBuc2Nvb3JkIGFZLCBuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0KSB7CiAgICB4ID0g
YVg7IHkgPSBhWTsgd2lkdGggPSBhV2lkdGg7IGhlaWdodCA9IGFIZWlnaHQ7CiAgfQogIHZvaWQg
TW92ZVRvKG5zY29vcmQgYVgsIG5zY29vcmQgYVkpIHt4ID0gYVg7IHkgPSBhWTt9CiAgdm9pZCBN
b3ZlVG8oY29uc3QgbnNQb2ludCYgYVBvaW50KSB7eCA9IGFQb2ludC54OyB5ID0gYVBvaW50Lnk7
fQogIHZvaWQgTW92ZUJ5KG5zY29vcmQgYUR4LCBuc2Nvb3JkIGFEeSkge3ggKz0gYUR4OyB5ICs9
IGFEeTt9CiAgdm9pZCBTaXplVG8obnNjb29yZCBhV2lkdGgsIG5zY29vcmQgYUhlaWdodCkge3dp
ZHRoID0gYVdpZHRoOyBoZWlnaHQgPSBhSGVpZ2h0O30KICB2b2lkIFNpemVUbyhjb25zdCBuc1Np
emUmIGFTaXplKSB7U2l6ZVRvKGFTaXplLndpZHRoLCBhU2l6ZS5oZWlnaHQpO30KICB2b2lkIFNp
emVCeShuc2Nvb3JkIGFEZWx0YVdpZHRoLCBuc2Nvb3JkIGFEZWx0YUhlaWdodCkge3dpZHRoICs9
IGFEZWx0YVdpZHRoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGVpZ2h0ICs9IGFEZWx0YUhlaWdodDt9CgoKICB2b2lkIEluZmxhdGUo
bnNjb29yZCBhRHgsIG5zY29vcmQgYUR5KTsKICB2b2lkIEluZmxhdGUoY29uc3QgbnNTaXplJiBh
U2l6ZSkge0luZmxhdGUoYVNpemUud2lkdGgsIGFTaXplLmhlaWdodCk7fQogIHZvaWQgSW5mbGF0
ZShjb25zdCBuc01hcmdpbiYgYU1hcmdpbik7CgoKICB2b2lkIERlZmxhdGUobnNjb29yZCBhRHgs
IG5zY29vcmQgYUR5KTsKICB2b2lkIERlZmxhdGUoY29uc3QgbnNTaXplJiBhU2l6ZSkge0RlZmxh
dGUoYVNpemUud2lkdGgsIGFTaXplLmhlaWdodCk7fQogIHZvaWQgRGVmbGF0ZShjb25zdCBuc01h
cmdpbiYgYU1hcmdpbik7CgoKCiAgUFJCb29sIG9wZXJhdG9yPT0oY29uc3QgbnNSZWN0JiBhUmVj
dCkgY29uc3QgewogICAgcmV0dXJuIChQUkJvb2wpICgoSXNFbXB0eSgpICYmIGFSZWN0LklzRW1w
dHkoKSkgfHwKICAgICAgICAgICAgICAgICAgICAgKCh4ID09IGFSZWN0LngpICYmICh5ID09IGFS
ZWN0LnkpICYmCiAgICAgICAgICAgICAgICAgICAgICAod2lkdGggPT0gYVJlY3Qud2lkdGgpICYm
IChoZWlnaHQgPT0gYVJlY3QuaGVpZ2h0KSkpOwogIH0KICBQUkJvb2wgb3BlcmF0b3IhPShjb25z
dCBuc1JlY3QmIGFSZWN0KSBjb25zdCB7CiAgICByZXR1cm4gKFBSQm9vbCkgIW9wZXJhdG9yPT0o
YVJlY3QpOwogIH0KICBuc1JlY3Qgb3BlcmF0b3IrKGNvbnN0IG5zUmVjdCYgYVJlY3QpIGNvbnN0
IHsKICAgIHJldHVybiBuc1JlY3QoeCArIGFSZWN0LngsIHkgKyBhUmVjdC55LAogICAgICAgICAg
ICAgICAgICB3aWR0aCArIGFSZWN0LndpZHRoLCBoZWlnaHQgKyBhUmVjdC5oZWlnaHQpOwogIH0K
ICBuc1JlY3Qgb3BlcmF0b3ItKGNvbnN0IG5zUmVjdCYgYVJlY3QpIGNvbnN0IHsKICAgIHJldHVy
biBuc1JlY3QoeCAtIGFSZWN0LngsIHkgLSBhUmVjdC55LAogICAgICAgICAgICAgICAgICB3aWR0
aCAtIGFSZWN0LndpZHRoLCBoZWlnaHQgLSBhUmVjdC5oZWlnaHQpOwogIH0KICBuc1JlY3QmIG9w
ZXJhdG9yKz0oY29uc3QgbnNQb2ludCYgYVBvaW50KSB7eCArPSBhUG9pbnQueDsgeSArPSBhUG9p
bnQueTsgcmV0dXJuICp0aGlzO30KICBuc1JlY3QmIG9wZXJhdG9yLT0oY29uc3QgbnNQb2ludCYg
YVBvaW50KSB7eCAtPSBhUG9pbnQueDsgeSAtPSBhUG9pbnQueTsgcmV0dXJuICp0aGlzO30KCiAg
bnNSZWN0JiBvcGVyYXRvcio9KGNvbnN0IGZsb2F0IGFTY2FsZSkge3ggPSBOU1RvQ29vcmRSb3Vu
ZCh4ICogYVNjYWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eSA9IE5TVG9Db29yZFJvdW5kKHkgKiBhU2NhbGUpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aWR0aCA9IE5TVG9Db29yZFJvdW5kKHdpZHRoICogYVNjYWxlKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gTlNUb0Nv
b3JkUm91bmQoaGVpZ2h0ICogYVNjYWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICp0aGlzO30KCiAgbnNSZWN0JiBTY2FsZVJvdW5kT3V0KGNvbnN0
IGZsb2F0IGFTY2FsZSk7CiAgbnNSZWN0JiBTY2FsZVJvdW5kSW4oY29uc3QgZmxvYXQgYVNjYWxl
KTsKCgogIG5zY29vcmQgWE1vc3QoKSBjb25zdCB7cmV0dXJuIHggKyB3aWR0aDt9CiAgbnNjb29y
ZCBZTW9zdCgpIGNvbnN0IHtyZXR1cm4geSArIGhlaWdodDt9Cn07CgoKZXh0ZXJuIEZJTEUqIG9w
ZXJhdG9yPDwoRklMRSogb3V0LCBjb25zdCBuc1JlY3QmIHJlY3QpOwojIDI5ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJUHJlc0NvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0NvbG9yLmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29s
b3IuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAyNyAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29sb3IuaCIgMgoKY2xhc3MgbnNTdHJpbmc7CgoKCnR5
cGVkZWYgUFJVaW50MzIgbnNjb2xvcjsKIyA3MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
Q29sb3IuaCIKZXh0ZXJuICJDIiBQUkJvb2wgTlNfSGV4VG9SR0IoY29uc3QgbnNTdHJpbmcmIGFC
dWYsIG5zY29sb3IqIGFSZXN1bHQpOwoKCgoKZXh0ZXJuICJDIiBQUkJvb2wgTlNfTG9vc2VIZXhU
b1JHQihjb25zdCBuc1N0cmluZyYgYUJ1ZiwgbnNjb2xvciogYVJlc3VsdCk7CgoKCmV4dGVybiAi
QyIgUFJCb29sIE5TX0NvbG9yTmFtZVRvUkdCKGNvbnN0IG5zU3RyaW5nJiBhQnVmLCBuc2NvbG9y
KiBhUmVzdWx0KTsKCgoKZXh0ZXJuICJDIiB2b2lkIE5TX0dldDNEQ29sb3JzKG5zY29sb3IgYVJl
c3VsdFsyXSwgbnNjb2xvciBhQ29sb3IpOwoKCmV4dGVybiAiQyIgdm9pZCBOU19HZXRTcGVjaWFs
M0RDb2xvcnMobnNjb2xvciBhUmVzdWx0WzJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNjb2xvciBhQmFja2dyb3VuZENvbG9yLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNjb2xvciBhQm9yZGVyQ29sb3IpOwoKCgpleHRlcm4gIkMiIG5zY29sb3IgTlNf
QnJpZ2h0ZW5Db2xvcihuc2NvbG9yIGluQ29sb3IpOwoKCgpleHRlcm4gIkMiIG5zY29sb3IgTlNf
RGFya2VuQ29sb3IobnNjb2xvciBpbkNvbG9yKTsKCgpleHRlcm4gIkMiIGludCBOU19HZXRCcmln
aHRuZXNzKFBSVWludDggYVJlZCwgUFJVaW50OCBhR3JlZW4sIFBSVWludDggYUJsdWUpOwojIDMw
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc0NvbnRleHQuaCIgMgojIDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZUltYWdlTG9hZGVyLmgiIDEKIyAyNSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lSW1hZ2VMb2FkZXIuaCIKIyAxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNsYXlvdXQuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJRnJhbWVJbWFnZUxvYWRlci5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSVN1cHBvcnRzLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1l
SW1hZ2VMb2FkZXIuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NvbG9yLmgi
IDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lSW1hZ2VMb2FkZXIuaCIg
MgoKY2xhc3MgbnNJRnJhbWU7CmNsYXNzIG5zSUltYWdlOwpjbGFzcyBuc0lJbWFnZUdyb3VwOwpj
bGFzcyBuc0lQcmVzQ29udGV4dDsKY2xhc3MgbnNTdHJpbmc7CnN0cnVjdCBuc1NpemU7CgoKCgoK
ZW51bSBuc0ltYWdlQW5pbWF0aW9uIHsKICAgIGVJbWFnZUFuaW1hdGlvbl9Ob3JtYWwgPSAwLAog
ICAgZUltYWdlQW5pbWF0aW9uX05vbmUgPSAxLAogICAgZUltYWdlQW5pbWF0aW9uX0xvb3BPbmNl
ID0gMgp9OwoKCgoKY2xhc3MgbnNJRnJhbWVJbWFnZUxvYWRlcjsKdHlwZWRlZiBuc3Jlc3VsdCAo
Km5zSUZyYW1lSW1hZ2VMb2FkZXJDQikobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWVJbWFnZUxvYWRl
ciogYUxvYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
RnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dm9pZCogYUNsb3N1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBSVWludDMyIGFTdGF0dXMpOwoKCgoKCgoKY2xhc3MgbnNJRnJhbWVJbWFnZUxvYWRlciA6IHB1
YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgp
IHtzdGF0aWMgbnNJSUQgaWlkID0geyAweGE2Y2Y5MGVjLCAweDE1YjMsIDB4MTFkMix7MHg5Mywg
MHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMn19OyByZXR1cm4gaWlkO30K
CiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAg
ICAgICAgICAgICAgICAgIG5zSUltYWdlR3JvdXAqIGFHcm91cCwKICAgICAgICAgICAgICAgICAg
Y29uc3QgbnNTdHJpbmcmIGFVUkwsCiAgICAgICAgICAgICAgICAgIGNvbnN0IG5zY29sb3IqIGFC
YWNrZ3JvdW5kQ29sb3IsCiAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU2l6ZSogYURlc2lyZWRT
aXplLAogICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAg
ICBuc0ltYWdlQW5pbWF0aW9uIGFBbmltYXRpb25Nb2RlLAogICAgICAgICAgICAgICAgICBuc0lG
cmFtZUltYWdlTG9hZGVyQ0IgYUNhbGxCYWNrLAogICAgICAgICAgICAgICAgICB2b2lkKiBhQ2xv
c3VyZSwgdm9pZCogYUtleSkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFN0b3BJbWFnZUxvYWQo
UFJCb29sIGFTdG9wQ2hyb21lID0gMSkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEFib3J0SW1h
Z2VMb2FkKCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IElzU2FtZUltYWdlUmVxdWVzdChjb25z
dCBuc1N0cmluZyYgYVVSTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBu
c2NvbG9yKiBhQmFja2dyb3VuZENvbG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IG5zU2l6ZSogYURlc2lyZWRTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBSQm9vbCogYVJlc3VsdCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEFkZEZyYW1lKG5z
SUZyYW1lKiBhRnJhbWUsIG5zSUZyYW1lSW1hZ2VMb2FkZXJDQiBhQ2FsbEJhY2ssCiAgICAgICAg
ICAgICAgICAgICAgICB2b2lkKiBhQ2xvc3VyZSwgdm9pZCogYUtleSkgPSAwOwoKICB2aXJ0dWFs
IG5zcmVzdWx0IFJlbW92ZUZyYW1lKHZvaWQqIGFLZXkpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBTYWZlVG9EZXN0cm95KFBSQm9vbCogYVJlc3VsdCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldFVSTChuc1N0cmluZyYgYVJlc3VsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UHJl
c0NvbnRleHQobnNJUHJlc0NvbnRleHQqKiBhUHJlc0NvbnRleHQpID0gMDsKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRJbWFnZShuc0lJbWFnZSoqIGFSZXN1bHQpID0gMDsKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0U2l6ZShuc1NpemUmIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRJbWFnZUxvYWRTdGF0dXMoUFJVaW50MzIqIGFMb2FkU3RhdHVzKSA9IDA7CgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRJbnRyaW5zaWNTaXplKG5zU2l6ZSYgYVJlc3VsdCkgPSAwOwogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0TmF0dXJhbEltYWdlU2l6ZShQUlVpbnQzMiogbmF0dXJhbFdpZHRoLCBQ
UlVpbnQzMiAqbmF0dXJhbEhlaWdodCkgPSAwOwp9OwojIDMxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJUHJlc0NvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lMYW5ndWFnZUF0b20uaCIgMQojIDE0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTGFu
Z3VhZ2VBdG9tLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUF0b20uaCIgMQoj
IDE3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQXRvbS5oIgpjbGFzcyBuc0lTaXplT2ZI
YW5kbGVyOwoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBV3JpdGFibGVTdHJpbmcu
aCIgMQojIDIwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQXRvbS5oIiAyCiMgMjggIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lBdG9tLmgiCmNsYXNzIG5zSUF0b20gOiBwdWJsaWMg
bnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtz
dGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4M2QxYjE1YjAsIDB4OTNiNCwgMHgxMWQxLCB7IDB4
ODksIDB4NWIsIDB4MDAsIDB4NjAsIDB4MDgsIDB4OTEsIDB4MWIsIDB4ODEgfX07IHJldHVybiBp
aWQ7fQoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUb1N0cmluZyhuc0FXcml0YWJsZVN0cmluZyAm
IGFTdHJpbmcpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VW5pY29kZShjb25zdCBQ
UlVuaWNoYXIgKiphUmVzdWx0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNpemVPZihu
c0lTaXplT2ZIYW5kbGVyICphSGFuZGxlciwgUFJVaW50MzIgKl9yZXR2YWwpID0gMDsKCn07CiMg
MTI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQXRvbS5oIgpleHRlcm4gbnNJQXRvbSog
TlNfTmV3QXRvbShjb25zdCBjaGFyKiBpc29sYXRpbjEpOwoKCgoKZXh0ZXJuIG5zSUF0b20qIE5T
X05ld0F0b20oY29uc3QgUFJVbmljaGFyKiB1bmljb2RlKTsKCgoKZXh0ZXJuIG5zSUF0b20qIE5T
X05ld0F0b20oY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFTdHJpbmcpOwoKCgoKZXh0ZXJuIG5z
cmVmY250IE5TX0dldE51bWJlck9mQXRvbXModm9pZCk7CmV4dGVybiB2b2lkIE5TX1B1cmdlQXRv
bVRhYmxlKHZvaWQpOwojIDE1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTGFuZ3VhZ2VB
dG9tLmgiIDIKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxhbmd1YWdlQXRvbS5o
IgpjbGFzcyBuc0lMYW5ndWFnZUF0b20gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoK
ICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0g
ezB4YTZjZjkxMWUsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4
NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRMYW5ndWFnZShQUlVuaWNoYXIgKiAqYUxhbmd1YWdlKSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldExhbmd1YWdlR3JvdXAobnNJQXRvbSAqICphTGFuZ3VhZ2VHcm91cCkgPSAwOwoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBMYW5ndWFnZUlzKGNvbnN0IFBSVW5pY2hhciAqYUxhbmd1YWdl
LCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCn07CiMgMzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lQcmVzQ29udGV4dC5oIiAyCgpjbGFzcyBuc0F1dG9TdHJpbmc7CmNsYXNzIG5zQmlkaVBy
ZXNVdGlsczsKCgpzdHJ1Y3QgbnNGb250OwoKY2xhc3MgbnNJQ29udGVudDsKY2xhc3MgbnNJRG9j
dW1lbnQ7CmNsYXNzIG5zSURldmljZUNvbnRleHQ7CmNsYXNzIG5zSUZvbnRNZXRyaWNzOwpjbGFz
cyBuc0lGcmFtZTsKY2xhc3MgbnNJSW1hZ2U7CmNsYXNzIG5zSUltYWdlR3JvdXA7CmNsYXNzIG5z
SUxpbmtIYW5kbGVyOwpjbGFzcyBuc0lQcmVzU2hlbGw7CmNsYXNzIG5zSVByZWY7CmNsYXNzIG5z
SVN0eWxlQ29udGV4dDsKY2xhc3MgbnNJQXRvbTsKY2xhc3MgbnNTdHJpbmc7CmNsYXNzIG5zSUV2
ZW50U3RhdGVNYW5hZ2VyOwpjbGFzcyBuc0lVUkk7CmNsYXNzIG5zSUxvb2tBbmRGZWVsOwpjbGFz
cyBuc0lDU1NQc2V1ZG9Db21wYXJhdG9yOwojIDY1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJUHJlc0NvbnRleHQuaCIKZW51bSBuc0NvbXBhdGliaWxpdHkgewogIGVDb21wYXRpYmlsaXR5
X1N0YW5kYXJkID0gMSwKICBlQ29tcGF0aWJpbGl0eV9OYXZRdWlya3MgPSAyCn07CgplbnVtIG5z
V2lkZ2V0UmVuZGVyaW5nIHsKICBlV2lkZ2V0UmVuZGVyaW5nX05hdGl2ZSA9IDEsCiAgZVdpZGdl
dFJlbmRlcmluZ19HZnggPSAyLAogIGVXaWRnZXRSZW5kZXJpbmdfUGFydGlhbEdmeCA9IDMKfTsK
CmVudW0gbnNXaWRnZXRUeXBlIHsKICBlV2lkZ2V0VHlwZV9CdXR0b24gPSAxLAogIGVXaWRnZXRU
eXBlX0NoZWNrYm94ID0gMiwKICBlV2lkZ2V0VHlwZV9SYWRpbyA9IDMsCiAgZVdpZGdldFR5cGVf
VGV4dCA9IDQKfTsKCmVudW0gbnNMYW5ndWFnZVNwZWNpZmljVHJhbnNmb3JtVHlwZSB7CiAgZUxh
bmd1YWdlU3BlY2lmaWNUcmFuc2Zvcm1UeXBlX1Vua25vd24gPSAtMSwKICBlTGFuZ3VhZ2VTcGVj
aWZpY1RyYW5zZm9ybVR5cGVfTm9uZSA9IDAsCiAgZUxhbmd1YWdlU3BlY2lmaWNUcmFuc2Zvcm1U
eXBlX0phcGFuZXNlLAogIGVMYW5ndWFnZVNwZWNpZmljVHJhbnNmb3JtVHlwZV9Lb3JlYW4KfTsK
Cgpjb25zdCBQUlVpbnQzMiBrUHJlc0NvbnRleHRfVXNlRG9jdW1lbnRDb2xvcnMgPSAweDAxOwpj
b25zdCBQUlVpbnQzMiBrUHJlc0NvbnRleHRfVXNlRG9jdW1lbnRGb250cyA9IDB4MDI7CmNvbnN0
IFBSVWludDMyIGtQcmVzQ29udGV4dF9VbmRlcmxpbmVMaW5rcyA9IDB4MDM7CgoKCmNsYXNzIG5z
SVByZXNDb250ZXh0IDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRpYyBjb25z
dCBuc0lJRCYgR2V0SUlEKCkgeyBzdGF0aWMgbnNJSUQgaWlkID0geyAweDBhNWQxMmUwLCAweDk0
NGUsIDB4MTFkMSwgezB4OTMsIDB4MjMsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4
MzJ9IH07IHJldHVybiBpaWQ7IH0KCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5zSURldmlj
ZUNvbnRleHQqIGFEZXZpY2VDb250ZXh0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFN0
b3AoUFJCb29sIGFTdG9wQ2hyb21lID0gMSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBT
ZXRTaGVsbChuc0lQcmVzU2hlbGwqIGFTaGVsbCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldFNoZWxsKG5zSVByZXNTaGVsbCoqIGFSZXN1bHQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRDb21wYXRpYmlsaXR5TW9kZShuc0NvbXBhdGliaWxpdHkqIGFNb2RlUmVzdWx0KSA9
IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDb21wYXRpYmlsaXR5TW9kZShuc0NvbXBhdGliaWxp
dHkgYU1vZGUpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaWRnZXRSZW5kZXJpbmdN
b2RlKG5zV2lkZ2V0UmVuZGVyaW5nKiBhTW9kZVJlc3VsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1
bHQgU2V0V2lkZ2V0UmVuZGVyaW5nTW9kZShuc1dpZGdldFJlbmRlcmluZyBhTW9kZSkgPSAwOwoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEltYWdlQW5pbWF0aW9uTW9kZShuc0ltYWdlQW5pbWF0
aW9uKiBhTW9kZVJlc3VsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SW1hZ2VBbmltYXRp
b25Nb2RlKG5zSW1hZ2VBbmltYXRpb24gYU1vZGUpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRMb29rQW5kRmVlbChuc0lMb29rQW5kRmVlbCoqIGFMb29rQW5kRmVlbCkgPSAwOwoKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJhc2VVUkwobnNJVVJJKiogYVVSTFJlc3VsdCkgPSAwOwoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1lZGl1bShuc0lBdG9tKiogYU1lZGl1bVJlc3VsdCkg
PSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbWFwU3R5bGVBbmRSZWZsb3codm9pZCkgPSAw
OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXNvbHZlU3R5bGVDb250ZXh0Rm9yKG5zSUNvbnRl
bnQqIGFDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHls
ZUNvbnRleHQqIGFQYXJlbnRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUkJvb2wgYUZvcmNlVW5pcXVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lTdHlsZUNvbnRleHQqKiBhUmVzdWx0KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBSZXNvbHZlUHNldWRvU3R5bGVDb250ZXh0Rm9yKG5zSUNvbnRlbnQqIGFQYXJlbnRDb250
ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBh
UHNldWRvVGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lT
dHlsZUNvbnRleHQqIGFQYXJlbnRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUkJvb2wgYUZvcmNlVW5pcXVlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqKiBhUmVzdWx0KSA9IDA7CiMgMTg5
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc0NvbnRleHQuaCIKICB2aXJ0dWFsIG5z
cmVzdWx0IFJlc29sdmVQc2V1ZG9TdHlsZVdpdGhDb21wYXJhdG9yKG5zSUNvbnRlbnQqIGFQYXJl
bnRDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJQXRvbSogYVBzZXVkb1RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVBhcmVudENvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYUZvcmNlVW5pcXVlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ1NTUHNldWRvQ29t
cGFyYXRvciogYUNvbXBhcmF0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqKiBhUmVzdWx0KSA9IDA7CgoKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgUHJvYmVQc2V1ZG9TdHlsZUNvbnRleHRGb3IobnNJQ29udGVudCogYVBhcmVu
dENvbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9t
KiBhUHNldWRvVGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
U3R5bGVDb250ZXh0KiBhUGFyZW50Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBSQm9vbCBhRm9yY2VVbmlxdWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqKiBhUmVzdWx0KSA9IDA7CgoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IFJlUGFyZW50U3R5bGVDb250ZXh0KG5zSUZyYW1lKiBhRnJhbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqIGFOZXdQYXJl
bnRDb250ZXh0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1ldHJpY3NGb3IoY29u
c3QgbnNGb250JiBhRm9udCwgbnNJRm9udE1ldHJpY3MqKiBhUmVzdWx0KSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldERlZmF1bHRGb250KG5zRm9udCYgYVJlc3VsdCkgPSAwOwoKICB2aXJ0
dWFsIG5zcmVzdWx0IFNldERlZmF1bHRGb250KGNvbnN0IG5zRm9udCYgYUZvbnQpID0gMDsKICB2
aXJ0dWFsIGNvbnN0IG5zRm9udCYgR2V0RGVmYXVsdEZvbnREZXByZWNhdGVkKCkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXREZWZhdWx0Rml4ZWRGb250KG5zRm9udCYgYVJlc3VsdCkgPSAw
OwoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERlZmF1bHRGaXhlZEZvbnQoY29uc3QgbnNGb250JiBh
Rm9udCkgPSAwOwogIHZpcnR1YWwgY29uc3QgbnNGb250JiBHZXREZWZhdWx0Rml4ZWRGb250RGVw
cmVjYXRlZCgpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhY2hlZEJvb2xQcmVm
KFBSVWludDMyIHByZWZUeXBlLCBQUkJvb2wgJmFWYWx1ZSkgPSAwOwoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldEZvbnRTY2FsZXIoUFJJbnQzMiogYVJlc3VsdCkgPSAwOwogIHZpcnR1YWwgbnNy
ZXN1bHQgU2V0Rm9udFNjYWxlcihQUkludDMyIGFTY2FsZXIpID0gMDsKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXREZWZhdWx0Q29sb3IobnNjb2xvciogYUNvbG9yKSA9IDA7CiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXREZWZhdWx0QmFja2dyb3VuZENvbG9yKG5zY29sb3IqIGFDb2xvcikgPSAwOwog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVmYXVsdEJhY2tncm91bmRJbWFnZShuc1N0cmluZyYgYUlt
YWdlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZWZhdWx0QmFja2dyb3VuZEltYWdlUmVw
ZWF0KFBSVWludDgqIGFSZXBlYXQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmF1bHRC
YWNrZ3JvdW5kSW1hZ2VPZmZzZXQobnNjb29yZCogYVgsIG5zY29vcmQqIGFZKSA9IDA7CiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXREZWZhdWx0QmFja2dyb3VuZEltYWdlQXR0YWNobWVudChQUlVpbnQ4
KiBhUmVwZWF0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZWZhdWx0TGlua0NvbG9yKG5z
Y29sb3IqIGFDb2xvcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVmYXVsdFZpc2l0ZWRM
aW5rQ29sb3IobnNjb2xvciogYUNvbG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb2N1
c0JhY2tncm91bmRDb2xvcihuc2NvbG9yKiBhQ29sb3IpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldEZvY3VzVGV4dENvbG9yKG5zY29sb3IqIGFDb2xvcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0VXNlRm9jdXNDb2xvcnMoUFJCb29sJiB1c2VGb2N1c0NvbG9ycykgPSAwOwogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0Rm9jdXNSaW5nV2lkdGgoUFJVaW50OCAqZm9jdXNSaW5nV2lkdGgpID0g
MDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZvY3VzUmluZ09uQW55dGhpbmcoUFJCb29sJiBmb2N1
c1JpbmdPbkFueXRoaW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERlZmF1bHRDb2xv
cihuc2NvbG9yIGFDb2xvcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGVmYXVsdEJhY2tn
cm91bmRDb2xvcihuc2NvbG9yIGFDb2xvcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGVm
YXVsdEJhY2tncm91bmRJbWFnZShjb25zdCBuc1N0cmluZyYgYUltYWdlKSA9IDA7CiAgdmlydHVh
bCBuc3Jlc3VsdCBTZXREZWZhdWx0QmFja2dyb3VuZEltYWdlUmVwZWF0KFBSVWludDggYVJlcGVh
dCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGVmYXVsdEJhY2tncm91bmRJbWFnZU9mZnNl
dChuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZh
dWx0QmFja2dyb3VuZEltYWdlQXR0YWNobWVudChQUlVpbnQ4IGFSZXBlYXQpID0gMDsKICB2aXJ0
dWFsIG5zcmVzdWx0IFNldERlZmF1bHRMaW5rQ29sb3IobnNjb2xvciBhQ29sb3IpID0gMDsKICB2
aXJ0dWFsIG5zcmVzdWx0IFNldERlZmF1bHRWaXNpdGVkTGlua0NvbG9yKG5zY29sb3IgYUNvbG9y
KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW1hZ2VHcm91cChuc0lJbWFnZUdyb3VwKiog
YUdyb3VwUmVzdWx0KSA9IDA7CiMgMjkwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJl
c0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFN0YXJ0TG9hZEltYWdlKGNvbnN0IG5zU3Ry
aW5nJiBhVVJMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNjb2xvciogYUJh
Y2tncm91bmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU2l6ZSog
YURlc2lyZWRTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFUYXJn
ZXRGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lSW1hZ2VMb2FkZXJD
QiBhQ2FsbEJhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhQ2xvc3VyZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGFLZXksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lGcmFtZUltYWdlTG9hZGVyKiogYVJlc3VsdCkgPSAwOwoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IFN0b3BMb2FkSW1hZ2Uodm9pZCogYUtleSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJRnJhbWVJbWFnZUxvYWRlciogYUxvYWRlcikgPSAwOwoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IFN0b3BBbGxMb2FkSW1hZ2VzRm9yKG5zSUZyYW1lKiBhVGFyZ2V0RnJhbWUsIHZv
aWQqIGFLZXkpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDb250YWluZXIobnNJU3VwcG9y
dHMqIGFDb250YWluZXIpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb250YWluZXIobnNJ
U3VwcG9ydHMqKiBhUmVzdWx0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldExpbmtIYW5k
bGVyKG5zSUxpbmtIYW5kbGVyKiBhSGFuZGxlcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
TGlua0hhbmRsZXIobnNJTGlua0hhbmRsZXIqKiBhUmVzdWx0KSA9IDA7CgoKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0VmlzaWJsZUFyZWEobnNSZWN0JiBhUmVzdWx0KSA9IDA7CgoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IFNldFZpc2libGVBcmVhKGNvbnN0IG5zUmVjdCYgcikgPSAwOwoKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBJc1BhZ2luYXRlZChQUkJvb2wqIGFSZXN1bHQpID0gMDsKIyAz
NDcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzQ29udGV4dC5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgR2V0UGFnZURpbShuc1JlY3QqIGFBY3R1YWxSZWN0LCBuc1JlY3QqIGFBZGpSZWN0
KSA9IDA7CiMgMzU2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc0NvbnRleHQuaCIK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBhZ2VEaW0obnNSZWN0KiBhUmVjdCkgPSAwOwoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldFBpeGVsc1RvVHdpcHMoZmxvYXQqIGFSZXN1bHQpIGNvbnN0ID0gMDsK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUd2lwc1RvUGl4ZWxzKGZsb2F0KiBhUmVzdWx0KSBjb25z
dCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTY2FsZWRQaXhlbHNUb1R3aXBzKGZs
b2F0KiBhU2NhbGUpIGNvbnN0ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGV2aWNlQ29u
dGV4dChuc0lEZXZpY2VDb250ZXh0KiogYVJlc3VsdCkgY29uc3QgPSAwOwoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldEV2ZW50U3RhdGVNYW5hZ2VyKG5zSUV2ZW50U3RhdGVNYW5hZ2VyKiogYU1hbmFn
ZXIpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExhbmd1YWdlKG5zSUxhbmd1YWdlQXRvbSoq
IGFMYW5ndWFnZSkgPSAwOwojIDM4MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXND
b250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYW5ndWFnZVNwZWNpZmljVHJhbnNmb3Jt
VHlwZSgKICAgICAgICAgICAgICBuc0xhbmd1YWdlU3BlY2lmaWNUcmFuc2Zvcm1UeXBlKiBhVHlw
ZSkgPSAwOwojIDM5NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNDb250ZXh0Lmgi
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCaWRpRW5hYmxlZChQUkJvb2wqIGFCaWRpRW5hYmxlZCkg
Y29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QmlkaUVuYWJsZWQoUFJCb29s
IGFCaWRpRW5hYmxlZCkgY29uc3QgPSAwOwojIDQxNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSVByZXNDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRWaXN1YWxNb2RlKFBSQm9v
bCBhSXNWaXN1YWwpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzVmlzdWFsTW9kZShQ
UkJvb2wmIGFJc1Zpc3VhbCkgY29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
QmlkaVV0aWxzKG5zQmlkaVByZXNVdGlscyoqIGFCaWRpVXRpbHMpID0gMDsKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBTZXRCaWRpKFBSVWludDMyIGFCaWRpT3B0aW9ucywgUFJCb29sIGFGb3JjZVJl
ZmxvdyA9IDApID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCaWRpKFBSVWludDMyKiBh
QmlkaU9wdGlvbnMpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzVmlzUlRMKFBSQm9v
bCAmYVJlc3VsdCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc0FyYWJpY0VuY29kaW5n
KFBSQm9vbCAmYVJlc3VsdCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRJc0JpZGlT
eXN0ZW0oUFJCb29sIGFJc0JpZGkpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SXNC
aWRpU3lzdGVtKFBSQm9vbCAmYVJlc3VsdCkgY29uc3QgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldEJpZGlDaGFyc2V0KG5zQXV0b1N0cmluZyAmYUNoYXJTZXQpID0gMDsKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgU2V0SXNSZW5kZXJpbmdPbmx5U2VsZWN0aW9uKFBSQm9vbCBhUmVzdWx0
KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBJc1JlbmRlcmluZ09ubHlTZWxlY3Rpb24oUFJCb29s
KiBhUmVzdWx0KSA9IDA7CgoKCgoKfTsKIyA0OTMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lQcmVzQ29udGV4dC5oIgpleHRlcm4gbnNyZXN1bHQKICBOU19OZXdHYWxsZXlDb250ZXh0KG5z
SVByZXNDb250ZXh0KiogYUluc3RhbmNlUHRyUmVzdWx0KTsKCgoKZXh0ZXJuIG5zcmVzdWx0CiAg
TlNfTmV3UHJpbnRQcmV2aWV3Q29udGV4dChuc0lQcmVzQ29udGV4dCoqIGFJbnN0YW5jZVB0clJl
c3VsdCk7CiMgMjggIm5zVGV4dFRyYW5zZm9ybWVyLmgiIDIKCmNsYXNzIG5zSUNvbnRlbnQ7CmNs
YXNzIG5zSUZyYW1lOwpjbGFzcyBuc0lMaW5lQnJlYWtlcjsKY2xhc3MgbnNJV29yZEJyZWFrZXI7
CiMgNTYgIm5zVGV4dFRyYW5zZm9ybWVyLmgiCmNsYXNzIG5zQXV0b1RleHRCdWZmZXIgewpwdWJs
aWM6CiAgbnNBdXRvVGV4dEJ1ZmZlcigpOwogIH5uc0F1dG9UZXh0QnVmZmVyKCk7CgogIG5zcmVz
dWx0IEdyb3dCeShQUkludDMyIGFBdExlYXN0LCBQUkJvb2wgYUNvcHlUb0hlYWQgPSAxKTsKCiAg
bnNyZXN1bHQgR3Jvd1RvKFBSSW50MzIgYU5ld1NpemUsIFBSQm9vbCBhQ29weVRvSGVhZCA9IDEp
OwoKICBQUlVuaWNoYXIqIEdldEJ1ZmZlcigpIHsgcmV0dXJuIG1CdWZmZXI7IH0KICBQUlVuaWNo
YXIqIEdldEJ1ZmZlckVuZCgpIHsgcmV0dXJuIG1CdWZmZXIgKyBtQnVmZmVyTGVuOyB9CiAgUFJJ
bnQzMiBHZXRCdWZmZXJMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtQnVmZmVyTGVuOyB9CgogIFBS
VW5pY2hhciogbUJ1ZmZlcjsKICBQUkludDMyIG1CdWZmZXJMZW47CiAgUFJVbmljaGFyIG1BdXRv
QnVmZmVyWzEyOF07Cn07CiMgOTYgIm5zVGV4dFRyYW5zZm9ybWVyLmgiCmNsYXNzIG5zVGV4dFRy
YW5zZm9ybWVyIHsKcHVibGljOgoKCiAgbnNUZXh0VHJhbnNmb3JtZXIobnNJTGluZUJyZWFrZXIq
IGFMaW5lQnJlYWtlciwKICAgICAgICAgICAgICAgICAgICBuc0lXb3JkQnJlYWtlciogYVdvcmRC
cmVha2VyLAogICAgICAgICAgICAgICAgICAgIG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQp
OwoKICB+bnNUZXh0VHJhbnNmb3JtZXIoKTsKIyAxMTggIm5zVGV4dFRyYW5zZm9ybWVyLmgiCiAg
bnNyZXN1bHQgSW5pdChuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgbnNJQ29udGVu
dCogYUNvbnRlbnQsCiAgICAgICAgICAgICAgICBQUkludDMyIGFTdGFydGluZ09mZnNldCwKICAg
ICAgICAgICAgICAgIFBSQm9vbCBhTGVhdmVBc0FzY2lpID0gMCk7CgogIFBSSW50MzIgR2V0Q29u
dGVudExlbmd0aCgpIGNvbnN0IHsKICAgIHJldHVybiBtRnJhZyA/IG1GcmFnLT5HZXRMZW5ndGgo
KSA6IDA7CiAgfQojIDEzOSAibnNUZXh0VHJhbnNmb3JtZXIuaCIKICBQUlVuaWNoYXIqIEdldE5l
eHRXb3JkKFBSQm9vbCBhSW5Xb3JkLAogICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiog
YVdvcmRMZW5SZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyKiBhQ29udGVu
dExlblJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCogYUlzV2hpdGVzcGFj
ZVJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCogYVdhc1RyYW5zZm9ybWVk
LAogICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFSZXNldFRyYW5zZm9ybUJ1ZiA9IDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYUZvckxpbmVCcmVhayA9IDEpOwoKICBQ
UlVuaWNoYXIqIEdldFByZXZXb3JkKFBSQm9vbCBhSW5Xb3JkLAogICAgICAgICAgICAgICAgICAg
ICAgICAgUFJJbnQzMiogYVdvcmRMZW5SZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBQ
UkludDMyKiBhQ29udGVudExlblJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9v
bCogYUlzV2hpdGVzcGFjZVJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBh
Rm9yTGluZUJyZWFrID0gMSk7CgoKCiAgUFJCb29sIExlYXZlQXNBc2NpaSgpIGNvbnN0IHsKICAg
ICAgcmV0dXJuIChtRmxhZ3MgJiAxKSA/IDEgOiAwOwogIH0KCgogIFBSQm9vbCBIYXNNdWx0aWJ5
dGUoKSBjb25zdCB7CiAgICAgIHJldHVybiAobUZsYWdzICYgMikgPyAxIDogMDsKICB9CgoKCiAg
UFJCb29sIFRyYW5zZm9ybWVkVGV4dElzQXNjaWkoKSBjb25zdCB7CiAgICAgIHJldHVybiAobUZs
YWdzICYgNCkgPyAxIDogMDsKICB9CgoKICB2b2lkIFNldExlYXZlQXNBc2NpaShQUkJvb2wgYVZh
bHVlKSB7CiAgICAgIGFWYWx1ZSA/IG1GbGFncyB8PSAxIDoKICAgICAgICAgICAgICAgbUZsYWdz
ICY9ICh+MSk7CiAgfQoKCiAgdm9pZCBTZXRIYXNNdWx0aWJ5dGUoUFJCb29sIGFWYWx1ZSkgewog
ICAgICBhVmFsdWUgPyBtRmxhZ3MgfD0gMiA6CiAgICAgICAgICAgICAgIG1GbGFncyAmPSAofjIp
OwogIH0KCgogIHZvaWQgU2V0VHJhbnNmb3JtZWRUZXh0SXNBc2NpaShQUkJvb2wgYVZhbHVlKSB7
CiAgICAgIGFWYWx1ZSA/IG1GbGFncyB8PSA0IDoKICAgICAgICAgICAgICAgbUZsYWdzICY9ICh+
NCk7CiAgfQoKICBQUlVuaWNoYXIqIEdldFdvcmRCdWZmZXIoKSB7CiAgICByZXR1cm4gbVRyYW5z
Zm9ybUJ1Zi5HZXRCdWZmZXIoKTsKICB9CgogIFBSSW50MzIgR2V0V29yZEJ1ZmZlckxlbmd0aCgp
IGNvbnN0IHsKICAgIHJldHVybiBtVHJhbnNmb3JtQnVmLkdldEJ1ZmZlckxlbmd0aCgpOwogIH0K
CgogIHN0YXRpYyBuc3Jlc3VsdCBJbml0aWFsaXplKCk7CiAgc3RhdGljIHZvaWQgU2h1dGRvd24o
KTsKCnByb3RlY3RlZDoKCiAgUFJJbnQzMiBTY2FuTm9ybWFsV2hpdGVTcGFjZV9GKCk7CiAgUFJJ
bnQzMiBTY2FuTm9ybWFsQXNjaWlUZXh0X0YoUFJJbnQzMiogYVdvcmRMZW4sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJCb29sKiBhV2FzVHJhbnNmb3JtZWQpOwogIFBSSW50MzIg
U2Nhbk5vcm1hbEFzY2lpVGV4dF9GX0ZvcldvcmRCcmVhayhQUkludDMyKiBhV29yZExlbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wqIGFXYXNUcmFuc2Zvcm1lZCk7CiAg
UFJJbnQzMiBTY2FuTm9ybWFsVW5pY29kZVRleHRfRihQUkJvb2wgYUZvckxpbmVCcmVhaywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIqIGFXb3JkTGVuLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sKiBhV2FzVHJhbnNmb3JtZWQpOwogIFBS
SW50MzIgU2NhblByZVdyYXBXaGl0ZVNwYWNlX0YoUFJJbnQzMiogYVdvcmRMZW4pOwogIFBSSW50
MzIgU2NhblByZUFzY2lpRGF0YV9GKFBSSW50MzIqIGFXb3JkTGVuLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBSQm9vbCogYVdhc1RyYW5zZm9ybWVkKTsKICBQUkludDMyIFNjYW5QcmVE
YXRhX0YoUFJJbnQzMiogYVdvcmRMZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCog
YVdhc1RyYW5zZm9ybWVkKTsKCgogIFBSSW50MzIgU2Nhbk5vcm1hbFdoaXRlU3BhY2VfQigpOwog
IFBSSW50MzIgU2Nhbk5vcm1hbEFzY2lpVGV4dF9CKFBSSW50MzIqIGFXb3JkTGVuKTsKICBQUklu
dDMyIFNjYW5Ob3JtYWxVbmljb2RlVGV4dF9CKFBSQm9vbCBhRm9yTGluZUJyZWFrLCBQUkludDMy
KiBhV29yZExlbik7CiAgUFJJbnQzMiBTY2FuUHJlV3JhcFdoaXRlU3BhY2VfQihQUkludDMyKiBh
V29yZExlbik7CiAgUFJJbnQzMiBTY2FuUHJlRGF0YV9CKFBSSW50MzIqIGFXb3JkTGVuKTsKCgoK
ICB2b2lkIENvbnZlcnRUcmFuc2Zvcm1lZFRleHRUb1VuaWNvZGUoKTsKCiAgdm9pZCBMYW5ndWFn
ZVNwZWNpZmljVHJhbnNmb3JtKFBSVW5pY2hhciogYVRleHQsIFBSSW50MzIgYUxlbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sKiBhV2FzVHJhbnNmb3JtZWQpOwoKCiAg
Y29uc3QgbnNUZXh0RnJhZ21lbnQqIG1GcmFnOwoKCiAgUFJJbnQzMiBtT2Zmc2V0OwoKCiAgZW51
bSB7CiAgICBlTm9ybWFsLAogICAgZVByZWZvcm1hdHRlZCwKICAgIGVQcmVXcmFwCiAgfSBtTW9k
ZTsKCiAgbnNJTGluZUJyZWFrZXIqIG1MaW5lQnJlYWtlcjsKCiAgbnNJV29yZEJyZWFrZXIqIG1X
b3JkQnJlYWtlcjsKCiAgbnNMYW5ndWFnZVNwZWNpZmljVHJhbnNmb3JtVHlwZSBtTGFuZ3VhZ2VT
cGVjaWZpY1RyYW5zZm9ybVR5cGU7CgoKCiAgbnNBdXRvVGV4dEJ1ZmZlciBtVHJhbnNmb3JtQnVm
OwoKCgogIFBSSW50MzIgbUJ1ZmZlclBvczsKCgogIFBSVWludDggbVRleHRUcmFuc2Zvcm07CgoK
ICBQUlVpbnQ4IG1GbGFnczsKIyAyNzMgIm5zVGV4dFRyYW5zZm9ybWVyLmgiCn07CiMgMjUgIm5z
VGV4dFRyYW5zZm9ybWVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lD
b250ZW50LmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbnRlbnQuaCIK
IyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L3N0ZGlvLmgiIDEgMwojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29udGVudC5o
IiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zbGF5b3V0LmgiIDEKIyAyNyAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbnRlbnQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lDb250ZW50LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNHVUlFdmVu
dC5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0dVSUV2ZW50LmgiCiMgMSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUG9pbnQuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNHVUlFdmVudC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zUmVjdC5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0dVSUV2ZW50Lmgi
IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUuaCIgMQojIDM2ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUuaCIKIyAxICIvd2luZG93cy9oZGEx
Mi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxoYXNoLmgiIDEKIyAyNCAiL3dp
bmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BsaGFzaC5oIgoj
IDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUv
c3RkaW8uaCIgMSAzCiMgMjUgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wbGhhc2guaCIgMgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxs
YS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAyNiAiL3dpbmRvd3MvaGRhMTIvbW96
LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BsaGFzaC5oIiAyCgpleHRlcm4gIkMiIHsK
CnR5cGVkZWYgc3RydWN0IFBMSGFzaEVudHJ5IFBMSGFzaEVudHJ5Owp0eXBlZGVmIHN0cnVjdCBQ
TEhhc2hUYWJsZSBQTEhhc2hUYWJsZTsKdHlwZWRlZiBQUlVpbnQzMiBQTEhhc2hOdW1iZXI7Cgp0
eXBlZGVmIFBMSGFzaE51bWJlciAoICpQTEhhc2hGdW5jdGlvbikoY29uc3Qgdm9pZCAqa2V5KTsK
dHlwZWRlZiBQUkludG4gKCAqUExIYXNoQ29tcGFyYXRvcikoY29uc3Qgdm9pZCAqdjEsIGNvbnN0
IHZvaWQgKnYyKTsKCgoKCnR5cGVkZWYgUFJJbnRuICggKlBMSGFzaEVudW1lcmF0b3IpKFBMSGFz
aEVudHJ5ICpoZSwgUFJJbnRuIGksIHZvaWQgKmFyZyk7CiMgNTEgIi93aW5kb3dzL2hkYTEyL21v
ei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbGhhc2guaCIKdHlwZWRlZiBzdHJ1Y3Qg
UExIYXNoQWxsb2NPcHMgewogICAgdm9pZCAqICggKmFsbG9jVGFibGUpKHZvaWQgKnBvb2wsIFBS
U2l6ZSBzaXplKTsKICAgIHZvaWQgKCAqZnJlZVRhYmxlKSh2b2lkICpwb29sLCB2b2lkICppdGVt
KTsKICAgIFBMSGFzaEVudHJ5ICogKCAqYWxsb2NFbnRyeSkodm9pZCAqcG9vbCwgY29uc3Qgdm9p
ZCAqa2V5KTsKICAgIHZvaWQgKCAqZnJlZUVudHJ5KSh2b2lkICpwb29sLCBQTEhhc2hFbnRyeSAq
aGUsIFBSVWludG4gZmxhZyk7Cn0gUExIYXNoQWxsb2NPcHM7CgoKCgpzdHJ1Y3QgUExIYXNoRW50
cnkgewogICAgUExIYXNoRW50cnkgKm5leHQ7CiAgICBQTEhhc2hOdW1iZXIga2V5SGFzaDsKICAg
IGNvbnN0IHZvaWQgKmtleTsKICAgIHZvaWQgKnZhbHVlOwp9OwoKc3RydWN0IFBMSGFzaFRhYmxl
IHsKICAgIFBMSGFzaEVudHJ5ICoqYnVja2V0czsKICAgIFBSVWludDMyIG5lbnRyaWVzOwogICAg
UFJVaW50MzIgc2hpZnQ7CiAgICBQTEhhc2hGdW5jdGlvbiBrZXlIYXNoOwogICAgUExIYXNoQ29t
cGFyYXRvciBrZXlDb21wYXJlOwogICAgUExIYXNoQ29tcGFyYXRvciB2YWx1ZUNvbXBhcmU7CiAg
ICBjb25zdCBQTEhhc2hBbGxvY09wcyAqYWxsb2NPcHM7CiAgICB2b2lkICphbGxvY1ByaXY7CgoK
CgoKCn07CgoKCgoKZXh0ZXJuIFBMSGFzaFRhYmxlICoKUExfTmV3SGFzaFRhYmxlKFBSVWludDMy
IG51bUJ1Y2tldHMsIFBMSGFzaEZ1bmN0aW9uIGtleUhhc2gsCiAgICAgICAgICAgICAgICBQTEhh
c2hDb21wYXJhdG9yIGtleUNvbXBhcmUsIFBMSGFzaENvbXBhcmF0b3IgdmFsdWVDb21wYXJlLAog
ICAgICAgICAgICAgICAgY29uc3QgUExIYXNoQWxsb2NPcHMgKmFsbG9jT3BzLCB2b2lkICphbGxv
Y1ByaXYpOwoKZXh0ZXJuIHZvaWQKUExfSGFzaFRhYmxlRGVzdHJveShQTEhhc2hUYWJsZSAqaHQp
OwoKCmV4dGVybiBQTEhhc2hFbnRyeSAqClBMX0hhc2hUYWJsZUFkZChQTEhhc2hUYWJsZSAqaHQs
IGNvbnN0IHZvaWQgKmtleSwgdm9pZCAqdmFsdWUpOwoKZXh0ZXJuIFBSQm9vbApQTF9IYXNoVGFi
bGVSZW1vdmUoUExIYXNoVGFibGUgKmh0LCBjb25zdCB2b2lkICprZXkpOwoKZXh0ZXJuIHZvaWQg
KgpQTF9IYXNoVGFibGVMb29rdXAoUExIYXNoVGFibGUgKmh0LCBjb25zdCB2b2lkICprZXkpOwoK
ZXh0ZXJuIHZvaWQgKgpQTF9IYXNoVGFibGVMb29rdXBDb25zdChQTEhhc2hUYWJsZSAqaHQsIGNv
bnN0IHZvaWQgKmtleSk7CgpleHRlcm4gUFJJbnRuClBMX0hhc2hUYWJsZUVudW1lcmF0ZUVudHJp
ZXMoUExIYXNoVGFibGUgKmh0LCBQTEhhc2hFbnVtZXJhdG9yIGYsIHZvaWQgKmFyZyk7CgoKZXh0
ZXJuIFBMSGFzaE51bWJlcgpQTF9IYXNoU3RyaW5nKGNvbnN0IHZvaWQgKmtleSk7CgoKZXh0ZXJu
IFBSSW50bgpQTF9Db21wYXJlU3RyaW5ncyhjb25zdCB2b2lkICp2MSwgY29uc3Qgdm9pZCAqdjIp
OwoKCmV4dGVybiBQUkludG4KUExfQ29tcGFyZVZhbHVlcyhjb25zdCB2b2lkICp2MSwgY29uc3Qg
dm9pZCAqdjIpOwoKCmV4dGVybiBQTEhhc2hFbnRyeSAqKgpQTF9IYXNoVGFibGVSYXdMb29rdXAo
UExIYXNoVGFibGUgKmh0LCBQTEhhc2hOdW1iZXIga2V5SGFzaCwgY29uc3Qgdm9pZCAqa2V5KTsK
CmV4dGVybiBQTEhhc2hFbnRyeSAqKgpQTF9IYXNoVGFibGVSYXdMb29rdXBDb25zdChQTEhhc2hU
YWJsZSAqaHQsIFBMSGFzaE51bWJlciBrZXlIYXNoLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB2b2lkICprZXkpOwoKZXh0ZXJuIFBMSGFzaEVudHJ5ICoKUExfSGFzaFRhYmxlUmF3
QWRkKFBMSGFzaFRhYmxlICpodCwgUExIYXNoRW50cnkgKipoZXAsIFBMSGFzaE51bWJlciBrZXlI
YXNoLAogICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSk7Cgpl
eHRlcm4gdm9pZApQTF9IYXNoVGFibGVSYXdSZW1vdmUoUExIYXNoVGFibGUgKmh0LCBQTEhhc2hF
bnRyeSAqKmhlcCwgUExIYXNoRW50cnkgKmhlKTsKCgpleHRlcm4gUFJJbnRuClBMX0hhc2hUYWJs
ZUR1bXAoUExIYXNoVGFibGUgKmh0LCBQTEhhc2hFbnVtZXJhdG9yIGR1bXAsIEZJTEUgKmZwKTsK
Cn0KIyAzNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiIDIKIyAxICIv
d2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2NrLmgi
IDEKIyAzOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiIDIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb20uaCIgMQojIDM5ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNIYXNodGFibGUuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c2NvcmUuaCIgMQojIDQwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUuaCIg
MgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAxCiMgNDYgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc1N0cmluZzIuaCIgMQojIDQ3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJp
bmcyLmgiCiMgMSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3BydHlwZXMuaCIgMQojIDQ4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcy
LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyA0OSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIiAyCiMgMSAiL3Vzci9sb2NhbC9saWIv
Z2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyA1MCAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIiAyCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDEKIyA1MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zU3RyaW5nMi5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUF0b20uaCIg
MQojIDUyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiIDIKIyAxICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIgMQojIDE5MSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zU3RyLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAx
CiMgMTkyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIgMgojIDEgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc01lbW9yeS5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc01lbW9yeS5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNZW1vcnku
aCIgMQojIDM2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTWVtb3J5LmgiCmNsYXNzIG5z
SU1lbW9yeSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBu
c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg1OWU3ZTc3YSwgMHgz
OGU0LCAweDExZDQsIHsgMHg4YywgMHhmNSwgMHgwMCwgMHg2MCwgMHhiMCwgMHhmYywgMHgxNCwg
MHhhMyB9fTsgcmV0dXJuIGlpZDt9CiMgNTAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lN
ZW1vcnkuaCIKICB2aXJ0dWFsIHZvaWQgKiBBbGxvYyhzaXplX3Qgc2l6ZSkgPSAwOwojIDY3ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTWVtb3J5LmgiCiAgdmlydHVhbCB2b2lkICogUmVh
bGxvYyh2b2lkICogcHRyLCBzaXplX3QgbmV3U2l6ZSkgPSAwOwojIDc2ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJTWVtb3J5LmgiCiAgdmlydHVhbCB2b2lkIEZyZWUodm9pZCAqIHB0cikg
PSAwOwojIDg4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTWVtb3J5LmgiCiAgdmlydHVh
bCBuc3Jlc3VsdCBIZWFwTWluaW1pemUoUFJCb29sIGltbWVkaWF0ZSkgPSAwOwoKCgoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IElzTG93TWVtb3J5KFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKfTsKIyAy
NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zTWVtb3J5LmgiIDIKCgoKCgoKCmNsYXNzIG5z
TWVtb3J5CnsKcHVibGljOgogICAgc3RhdGljIHZvaWQqIEFsbG9jKHNpemVfdCBzaXplKTsKICAg
IHN0YXRpYyB2b2lkKiBSZWFsbG9jKHZvaWQqIHB0ciwgc2l6ZV90IHNpemUpOwogICAgc3RhdGlj
IHZvaWQgRnJlZSh2b2lkKiBwdHIpOwogICAgc3RhdGljIG5zcmVzdWx0IEhlYXBNaW5pbWl6ZShQ
UkJvb2wgYUltbWVkaWF0ZSk7CiAgICBzdGF0aWMgdm9pZCogQ2xvbmUoY29uc3Qgdm9pZCogcHRy
LCBzaXplX3Qgc2l6ZSk7CiAgICBzdGF0aWMgbnNJTWVtb3J5KiBHZXRHbG9iYWxNZW1vcnlTZXJ2
aWNlKCk7Cn07CiMgMTkzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIgMgojIDEg
Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMTk0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNTdHIuaCIgMgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMTk1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNTdHIuaCIgMgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wbGhhc2guaCIgMQojIDE5NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
U3RyLmgiIDIKCgoKZW51bSBlQ2hhclNpemUge2VPbmVCeXRlPTAsZVR3b0J5dGU9MX07CgoKCgoK
Cgpjb25zdCBQUkludDMyIGtEZWZhdWx0U3RyaW5nU2l6ZSA9IDY0Owpjb25zdCBQUkludDMyIGtO
b3RGb3VuZCA9IC0xOwoKCgoKY2xhc3MgQ0J1ZkRlc2NyaXB0b3IgewpwdWJsaWM6CiAgQ0J1ZkRl
c2NyaXB0b3IoY2hhciogYVN0cmluZywgUFJCb29sIGFTdGFja0Jhc2VkLFBSVWludDMyIGFDYXBh
Y2l0eSxQUkludDMyIGFMZW5ndGg9LTEpOwogIENCdWZEZXNjcmlwdG9yKGNvbnN0IGNoYXIqIGFT
dHJpbmcsIFBSQm9vbCBhU3RhY2tCYXNlZCxQUlVpbnQzMiBhQ2FwYWNpdHksUFJJbnQzMiBhTGVu
Z3RoPS0xKTsKICBDQnVmRGVzY3JpcHRvcihQUlVuaWNoYXIqIGFTdHJpbmcsIFBSQm9vbCBhU3Rh
Y2tCYXNlZCxQUlVpbnQzMiBhQ2FwYWNpdHksUFJJbnQzMiBhTGVuZ3RoPS0xKTsKICBDQnVmRGVz
Y3JpcHRvcihjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsUFJCb29sIGFTdGFja0Jhc2VkLFBSVWlu
dDMyIGFDYXBhY2l0eSxQUkludDMyIGFMZW5ndGg9LTEpOwoKICBjaGFyKiBtQnVmZmVyOwogIGVD
aGFyU2l6ZSBtQ2hhclNpemU7CiAgUFJVaW50MzIgbUNhcGFjaXR5OwogIFBSSW50MzIgbUxlbmd0
aDsKICBQUkJvb2wgbVN0YWNrQmFzZWQ7CiAgUFJCb29sIG1Jc0NvbnN0Owp9OwoKCgoKc3RydWN0
IG5zU3RyIHsKCiAgbnNTdHIoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgfQoKICB+
bnNTdHIoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgfQojIDI0OCAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAgc3RhdGljIHZvaWQgSW5pdGlhbGl6ZShuc1N0ciYg
YURlc3QsZUNoYXJTaXplIGFDaGFyU2l6ZSk7CiMgMjU3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNTdHIuaCIKICBzdGF0aWMgdm9pZCBJbml0aWFsaXplKG5zU3RyJiBhRGVzdCxjaGFyKiBh
Q1N0cmluZyxQUlVpbnQzMiBhQ2FwYWNpdHksUFJVaW50MzIgYUxlbmd0aCxlQ2hhclNpemUgYUNo
YXJTaXplLFBSQm9vbCBhT3duc0J1ZmZlcik7CiMgMjY4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNTdHIuaCIKICBzdGF0aWMgdm9pZCBEZXN0cm95KG5zU3RyJiBhRGVzdCk7CiMgMjc4ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIKICBzdGF0aWMgUFJCb29sIEVuc3VyZUNh
cGFjaXR5KG5zU3RyJiBhU3RyaW5nLFBSVWludDMyIGFOZXdMZW5ndGgpOwogIHN0YXRpYyBQUkJv
b2wgR3Jvd0NhcGFjaXR5KG5zU3RyJiBhU3RyaW5nLFBSVWludDMyIGFOZXdMZW5ndGgpOwojIDI5
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAgc3RhdGljIHZvaWQgU3RyQXBw
ZW5kKG5zU3RyJiBhRGVzdCxjb25zdCBuc1N0ciYgYVNvdXJjZSxQUlVpbnQzMiBhbk9mZnNldCxQ
UkludDMyIGFDb3VudCk7CiMgMzAzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIK
ICBzdGF0aWMgdm9pZCBTdHJBc3NpZ24obnNTdHImIGFEZXN0LGNvbnN0IG5zU3RyJiBhU291cmNl
LFBSVWludDMyIGFuT2Zmc2V0LFBSSW50MzIgYUNvdW50KTsKIyAzMTYgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc1N0ci5oIgogIHN0YXRpYyB2b2lkIFN0ckluc2VydCggbnNTdHImIGFEZXN0
LFBSVWludDMyIGFEZXN0T2Zmc2V0LGNvbnN0IG5zU3RyJiBhU291cmNlLFBSVWludDMyIGFTcmNP
ZmZzZXQsUFJJbnQzMiBhQ291bnQpOwojIDMyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
U3RyLmgiCiAgc3RhdGljIHZvaWQgRGVsZXRlKG5zU3RyJiBhRGVzdCxQUlVpbnQzMiBhRGVzdE9m
ZnNldCxQUlVpbnQzMiBhQ291bnQpOwojIDM0MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
U3RyLmgiCiAgc3RhdGljIHZvaWQgU3RyVHJ1bmNhdGUobnNTdHImIGFEZXN0LFBSVWludDMyIGFE
ZXN0T2Zmc2V0KTsKIyAzNTAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIgogIHN0
YXRpYyB2b2lkIENoYW5nZUNhc2UobnNTdHImIGFEZXN0LFBSQm9vbCBhVG9VcHBlcik7CiMgMzYy
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIKICBzdGF0aWMgdm9pZCBUcmltKG5z
U3RyJiBhRGVzdCxjb25zdCBjaGFyKiBhU2V0LFBSQm9vbCBhRWxpbWluYXRlTGVhZGluZyxQUkJv
b2wgYUVsaW1pbmF0ZVRyYWlsaW5nKTsKIyAzNzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c1N0ci5oIgogIHN0YXRpYyB2b2lkIENvbXByZXNzU2V0KG5zU3RyJiBhRGVzdCxjb25zdCBjaGFy
KiBhU2V0LFBSQm9vbCBhRWxpbWluYXRlTGVhZGluZyxQUkJvb2wgYUVsaW1pbmF0ZVRyYWlsaW5n
KTsKIyAzODYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIgogIHN0YXRpYyB2b2lk
IFN0cmlwQ2hhcnMobnNTdHImIGFEZXN0LGNvbnN0IGNoYXIqIGFTZXQpOwojIDM5OCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAgc3RhdGljIFBSSW50MzIgU3RyQ29tcGFyZShj
b25zdCBuc1N0ciYgYURlc3QsY29uc3QgbnNTdHImIGFTb3VyY2UsUFJJbnQzMiBhQ291bnQsUFJC
b29sIGFJZ25vcmVDYXNlKTsKIyA0MTAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5o
IgogIHN0YXRpYyBQUkludDMyIEZpbmRTdWJzdHIoY29uc3QgbnNTdHImIGFEZXN0LGNvbnN0IG5z
U3RyJiBhU291cmNlLCBQUkJvb2wgYUlnbm9yZUNhc2UsUFJJbnQzMiBhbk9mZnNldCxQUkludDMy
IGFDb3VudCk7CiAgc3RhdGljIFBSSW50MzIgRmluZENoYXIoY29uc3QgbnNTdHImIGFEZXN0LFBS
VW5pY2hhciBhQ2hhciwgUFJCb29sIGFJZ25vcmVDYXNlLFBSSW50MzIgYW5PZmZzZXQsUFJJbnQz
MiBhQ291bnQpOwogIHN0YXRpYyBQUkludDMyIEZpbmRDaGFySW5TZXQoY29uc3QgbnNTdHImIGFE
ZXN0LGNvbnN0IG5zU3RyJiBhU2V0LFBSQm9vbCBhSWdub3JlQ2FzZSxQUkludDMyIGFuT2Zmc2V0
KTsKCiAgc3RhdGljIFBSSW50MzIgUkZpbmRTdWJzdHIoY29uc3QgbnNTdHImIGFEZXN0LGNvbnN0
IG5zU3RyJiBhU291cmNlLCBQUkJvb2wgYUlnbm9yZUNhc2UsUFJJbnQzMiBhbk9mZnNldCxQUklu
dDMyIGFDb3VudCk7CiAgc3RhdGljIFBSSW50MzIgUkZpbmRDaGFyKGNvbnN0IG5zU3RyJiBhRGVz
dCxQUlVuaWNoYXIgYUNoYXIsIFBSQm9vbCBhSWdub3JlQ2FzZSxQUkludDMyIGFuT2Zmc2V0LFBS
SW50MzIgYUNvdW50KTsKICBzdGF0aWMgUFJJbnQzMiBSRmluZENoYXJJblNldChjb25zdCBuc1N0
ciYgYURlc3QsY29uc3QgbnNTdHImIGFTZXQsUFJCb29sIGFJZ25vcmVDYXNlLFBSSW50MzIgYW5P
ZmZzZXQpOwoKICBzdGF0aWMgdm9pZCBPdmVyd3JpdGUobnNTdHImIGFEZXN0LGNvbnN0IG5zU3Ry
JiBhU291cmNlLFBSSW50MzIgYW5PZmZzZXQpOwoKICBzdGF0aWMgUFJCb29sIERpZEFjcXVpcmVN
ZW1vcnkodm9pZCk7CgoKCgogIHN0YXRpYyBQUlVpbnQzMiBIYXNoQ29kZShjb25zdCBuc1N0ciYg
YURlc3QpOwojIDQzNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAgUFJVaW50
MzIgbUxlbmd0aDsKICBQUlVpbnQzMiBtQ2FwYWNpdHk7CiAgZUNoYXJTaXplIG1DaGFyU2l6ZTsK
ICBQUkJvb2wgbU93bnNCdWZmZXI7CgogIHVuaW9uIHsKICAgIGNoYXIqIG1TdHI7CiAgICBQUlVu
aWNoYXIqIG1VU3RyOwogIH07Cgpwcml2YXRlOgogIHN0YXRpYyBQUkJvb2wgQWxsb2MobnNTdHIm
IGFTdHJpbmcsUFJVaW50MzIgYUNvdW50KTsKICBzdGF0aWMgUFJCb29sIFJlYWxsb2MobnNTdHIm
IGFTdHJpbmcsUFJVaW50MzIgYUNvdW50KTsKICBzdGF0aWMgUFJCb29sIEZyZWUobnNTdHImIGFT
dHJpbmcpOwoKfTsKIyA0NjAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIgppbmxp
bmUgUFJJbnQzMiBNaW5JbnQoUFJJbnQzMiBhbkludDEsUFJJbnQzMiBhbkludDIpewogIHJldHVy
biAoYW5JbnQxPGFuSW50MikgPyBhbkludDEgOiBhbkludDI7Cn0KCmlubGluZSBQUkludDMyIE1h
eEludChQUkludDMyIGFuSW50MSxQUkludDMyIGFuSW50Mil7CiAgcmV0dXJuIChhbkludDE8YW5J
bnQyKSA/IGFuSW50MiA6IGFuSW50MTsKfQoKaW5saW5lIHZvaWQgQWRkTnVsbFRlcm1pbmF0b3Io
bnNTdHImIGFEZXN0KSB7CiAgaWYoZVR3b0J5dGU9PWFEZXN0Lm1DaGFyU2l6ZSkKICAgIGFEZXN0
Lm1VU3RyW2FEZXN0Lm1MZW5ndGhdPTA7CiAgZWxzZSBhRGVzdC5tU3RyW2FEZXN0Lm1MZW5ndGhd
PTA7Cn0KCgoKCgoKCmlubGluZSB2b2lkIFJlY3ljbGUoIGNoYXIqIGFCdWZmZXIpIHsgbnNNZW1v
cnk6OkZyZWUoYUJ1ZmZlcik7IH0KaW5saW5lIHZvaWQgUmVjeWNsZSggUFJVbmljaGFyKiBhQnVm
ZmVyKSB7IG5zTWVtb3J5OjpGcmVlKGFCdWZmZXIpOyB9CiMgNDkxICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNTdHIuaCIKaW5saW5lIFBSVW5pY2hhciBHZXRDaGFyQXQoY29uc3QgbnNTdHIm
IGFEZXN0LFBSVWludDMyIGFuSW5kZXgpIHsKICBpZihhbkluZGV4PGFEZXN0Lm1MZW5ndGgpIHsK
ICAgIHJldHVybiAoZVR3b0J5dGU9PWFEZXN0Lm1DaGFyU2l6ZSkgPyBhRGVzdC5tVVN0clthbklu
ZGV4XSA6IChQUlVuaWNoYXIpYURlc3QubVN0clthbkluZGV4XTsKICB9CiAgcmV0dXJuIDA7Cn0K
IyA1MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIiAyCiMgMSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zQ1JULmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zQ1JULmgiCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyAyNSAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI2
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9n
Y2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAi
L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKCgojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3dhaXRmbGFncy5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o
IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgiIDEgMwojIDYzICIvdXNy
L2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgi
IDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgiIDIgMwoKdW5pb24gd2Fp
dAogIHsKICAgIGludCB3X3N0YXR1czsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2ln
bmVkIGludCBfX3dfdGVybXNpZzo3OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfY29yZWR1bXA6
MTsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3JldGNvZGU6ODsKICAgICAgICB1bnNpZ25lZCBp
bnQ6MTY7CgoKCgoKCgogICAgICB9IF9fd2FpdF90ZXJtaW5hdGVkOwogICAgc3RydWN0CiAgICAg
IHsKCiAgICAgICAgdW5zaWduZWQgaW50IF9fd19zdG9wdmFsOjg7CiAgICAgICAgdW5zaWduZWQg
aW50IF9fd19zdG9wc2lnOjg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgogICAgICB9
IF9fd2FpdF9zdG9wcGVkOwogIH07CiMgNDQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMg
OTQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBx
dW90OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxv
bmcgaW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2X3Q7CgoKCgoKX19leHRlbnNp
b25fXyB0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcg
bG9uZyBpbnQgcmVtOwogIH0gbGxkaXZfdDsKIyAxMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg
MwpleHRlcm4gc2l6ZV90IF9fY3R5cGVfZ2V0X21iX2N1cl9tYXggKHZvaWQpIHRocm93ICgpOwoK
CgpleHRlcm4gZG91YmxlIGF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgYXRvaSAoX19jb25zdCBjaGFyICpf
X25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGxvbmcg
aW50IGF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBhdG9sbCAo
X19jb25zdCBjaGFyICpfX25wdHIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIp
IHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgc3RydG9mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0
cikgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc3RydG9sZCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKZXh0ZXJuIHVu
c2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4g
bG9uZyBsb25nIGludCBzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu
dCBfX2Jhc2UpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBs
b25nIGludCBzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0
ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4g
bG9uZyBsb25nIGludCBzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg
aW50IF9fYmFzZSkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25n
IGxvbmcgaW50IHN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CiMgMjExICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyMTIgIi91c3IvaW5j
bHVkZS9zdGRsaWIuaCIgMiAzCgoKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9sIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25n
IGludCBfX3N0cnRvdWxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xv
Y2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBp
bnQgX19zdHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50
IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19s
b2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGlu
dCBfX3N0cnRvdWxsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f
YmFzZSwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgX19z
dHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykK
ICAgICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBfX3N0cnRvZl9sIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91
YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9h
dCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg
aW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRf
aW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7
CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBp
bnQgX19zdHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0
cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpl
eHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVu
c2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwg
KF9fY29uc3QgY2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwg
aW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CiMgMjk0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi
IDMKZXh0ZXJuIF9faW5saW5lIGRvdWJsZQpzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJu
IF9fc3RydG9kX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQpleHRlcm4gX19pbmxp
bmUgbG9uZyBpbnQKc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAg
cmV0dXJuIF9fc3RydG9sX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9
CmV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGludApzdHJ0b3VsIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAg
aW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fbnB0
ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgpleHRlcm4gX19pbmxpbmUgZmxvYXQKc3RydG9m
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0cikgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvZl9pbnRlcm5hbCAoX19ucHRyLCBfX2Vu
ZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlCnN0cnRvbGQgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJv
dyAoKQp7CiAgcmV0dXJuIF9fc3RydG9sZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7
Cn0KCgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludApzdHJ0b3Eg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLAogICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xsX2lu
dGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18gZXh0
ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91cSAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAg
IGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19u
cHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lu
bGluZSBsb25nIGxvbmcgaW50CnN0cnRvbGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKSB0aHJv
dyAoKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19i
YXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGxv
bmcgaW50CnN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAg
cmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7
Cn0KCgpleHRlcm4gX19pbmxpbmUgZG91YmxlCmF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0
aHJvdyAoKQp7CiAgcmV0dXJuIHN0cnRvZCAoX19ucHRyLCAoY2hhciAqKikgX19udWxsKTsKfQpl
eHRlcm4gX19pbmxpbmUgaW50CmF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKQp7
CiAgcmV0dXJuIChpbnQpIHN0cnRvbCAoX19ucHRyLCAoY2hhciAqKikgX19udWxsLCAxMCk7Cn0K
ZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CmF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJv
dyAoKQp7CiAgcmV0dXJuIHN0cnRvbCAoX19ucHRyLCAoY2hhciAqKikgX19udWxsLCAxMCk7Cn0K
CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CmF0b2xsIChfX2Nv
bnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkKewogIHJldHVybiBzdHJ0b2xsIChfX25wdHIsIChj
aGFyICoqKSBfX251bGwsIDEwKTsKfQojIDM4NSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4
dGVybiBjaGFyICpsNjRhIChsb25nIGludCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGlu
dCBhNjRsIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDM5MiAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IHJhbmRvbSAodm9pZCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwg
Y2hhciAqX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVs
ZW4pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc2V0c3RhdGUgKGNoYXIgKl9fc3RhdGVidWYp
IHRocm93ICgpOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0
cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsKICAgIGludCByYW5kX3R5
cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAgICBpbnQzMl90ICplbmRf
cHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVz
dHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKl9fcmVzdHJpY3QgX19y
ZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgKHVuc2lnbmVkIGludCBfX3Nl
ZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBpbml0
c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVm
LAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAo
KTsKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAog
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1
ZikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSB0aHJvdyAoKTsKCmV4dGVy
biB2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBk
b3VibGUgZHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAodW5z
aWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBs
cmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVk
IHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbXJhbmQ0
OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9y
dCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBp
bnQgX19zZWVkdmFsKSB0aHJvdyAoKTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4
ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQg
bGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIHRocm93ICgpOwoKCgoKCnN0
cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX194WzNdOwogICAg
dW5zaWduZWQgc2hvcnQgaW50IF9fb2xkX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19j
OwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBp
bnQgX19hOwogIH07CgoKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEg
Kl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVz
dHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGVyYW5kNDhfciAodW5zaWduZWQg
c2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0
OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91Ymxl
ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGxyYW5kNDhfciAo
c3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAg
ICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAg
ICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBf
X2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVz
dWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBf
X3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19y
ZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3Ry
aWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNyYW5kNDhfciAobG9uZyBpbnQg
X19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikKICAgICB0aHJvdyAoKTsK
CmV4dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10sCiAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAo
KTsKCmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwK
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJv
dyAoKTsKIyA1MjggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gdm9pZCAqbWFsbG9j
IChzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoK
ZXh0ZXJuIHZvaWQgKmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgpleHRlcm4gdm9pZCAq
cmVhbGxvYyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCBmcmVlICh2b2lkICpfX3B0cikgdGhyb3cg
KCk7CgoKCmV4dGVybiB2b2lkIGNmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoKCiMgMSAi
L3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYWxs
b2NhLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdu
dS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIg
MiAzCgpleHRlcm4gIkMiIHsKCgoKCgpleHRlcm4gdm9pZCAqYWxsb2NhIChzaXplX3QgX19zaXpl
KSB0aHJvdyAoKTsKCgoKCgp9CiMgNTQ4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoK
ZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBpbnQgcG9zaXhfbWVtYWxpZ24gKHZvaWQgKipf
X21lbXB0ciwgc2l6ZV90IF9fYWxpZ25tZW50LCBzaXplX3QgX19zaXplKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVybiB2b2lkIGFib3J0ICh2b2lk
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCmV4dGVybiBpbnQg
YXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9pZCkpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBv
bl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQg
Kl9fYXJnKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIGV4aXQgKGludCBfX3N0YXR1
cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZv
aWQgX0V4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1
cm5fXykpOwoKCgoKZXh0ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRo
cm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9f
bmFtZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9f
Y29uc3QgY2hhciAqX192YWx1ZSwgaW50IF9fcmVwbGFjZSkKICAgICB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHVuc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpIHRocm93ICgpOwojIDYyNCAiL3Vzci9pbmNsdWRlL3N0
ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgp
OwoKCgoKCgoKZXh0ZXJuIGludCBta3N0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsK
IyA2NDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IG1rc3RlbXA2NCAoY2hh
ciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjUxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMK
ZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBzeXN0ZW0gKF9fY29uc3QgY2hhciAqX19jb21tYW5kKSB0aHJvdyAoKTsKCgoKCgoK
ZXh0ZXJuIGNoYXIgKmNhbm9uaWNhbGl6ZV9maWxlX25hbWUgKF9fY29uc3QgY2hhciAqX19uYW1l
KSB0aHJvdyAoKTsKIyA2NzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAq
cmVhbHBhdGggKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX3Jlc29sdmVkKSB0aHJvdyAoKTsKCgoKCgoKdHlw
ZWRlZiBpbnQgKCpfX2NvbXBhcl9mbl90KSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAq
KTsKCgp0eXBlZGVmIF9fY29tcGFyX2ZuX3QgY29tcGFyaXNvbl9mbl90OwoKCgoKCmV4dGVybiB2
b2lkICpic2VhcmNoIChfX2NvbnN0IHZvaWQgKl9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fYmFzZSwK
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2Nv
bXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKl9fYmFzZSwg
c2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2NvbXBh
cl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIGludCBhYnMgKGludCBfX3gpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxvbmcgaW50
IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25f
XyBleHRlcm4gbG9uZyBsb25nIGludCBsbGFicyAobG9uZyBsb25nIGludCBfX3gpCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgpleHRlcm4gZGl2X3QgZGl2
IChpbnQgX19udW1lciwgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwpleHRlcm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcg
aW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
X19leHRlbnNpb25fXyBleHRlcm4gbGxkaXZfdCBsbGRpdiAobG9uZyBsb25nIGludCBfX251bWVy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxvbmcgaW50IF9fZGVu
b20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDcyOSAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwg
aW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAg
IGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQg
KGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAog
ICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19i
dWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVl
LCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVj
cHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWZjdnQg
KGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBp
bnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7
CmV4dGVybiBjaGFyICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBj
aGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFs
dWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAg
ICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAg
ICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmY3Z0X3Ig
KGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAog
ICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmlj
dCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgpleHRl
cm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAg
ICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9f
c2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3Qg
X19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUs
IGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNw
dCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jl
c3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IG1i
bGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBtYnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHdjdG9tYiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIHRocm93ICgpOwoKCgpl
eHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9f
bikgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9f
cywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
cHdjcywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRj
aCAoX19jb25zdCBjaGFyICpfX3Jlc3BvbnNlKSB0aHJvdyAoKTsKIyA4MDkgIi91c3IvaW5jbHVk
ZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IGdldHN1Ym9wdCAoY2hhciAqKl9fcmVzdHJpY3QgX19v
cHRpb25wLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCAqX19yZXN0cmljdCBf
X3Rva2VucywKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fdmFsdWVw
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkp
IHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwb3NpeF9vcGVucHQgKGludCBfX29mbGFnKSB0
aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ3JhbnRwdCAoaW50IF9fZmQpIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IHVubG9ja3B0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hh
ciAqcHRzbmFtZSAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0c25hbWVf
ciAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgZ2V0cHQgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGdldGxvYWRh
dmcgKGRvdWJsZSBfX2xvYWRhdmdbXSwgaW50IF9fbmVsZW0pIHRocm93ICgpOwoKCgoKCn0KIyAy
NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ1JULmgiIDIKIyAxICIvdXNyL2luY2x1ZGUv
c3RyaW5nLmgiIDEgMwojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIgMgoj
IDEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0
ci5oIiAxCiMgNDIgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUv
bnNwci9wbHN0ci5oIgojIDEgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyA0MyAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3pp
bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiIDIKCmV4dGVybiAiQyIgewoKCgoKCgpleHRl
cm4gUFJVaW50MzIKUExfc3RybGVuKGNvbnN0IGNoYXIgKnN0cik7CiMgNjIgIi93aW5kb3dzL2hk
YTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gUFJV
aW50MzIKUExfc3Rybmxlbihjb25zdCBjaGFyICpzdHIsIFBSVWludDMyIG1heCk7CiMgNzMgIi93
aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpl
eHRlcm4gY2hhciAqClBMX3N0cmNweShjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpOwojIDg2
ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIu
aCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJuY3B5KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywg
UFJVaW50MzIgbWF4KTsKIyAxMDkgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0
L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cm5jcHl6KGNoYXIgKmRl
c3QsIGNvbnN0IGNoYXIgKnNyYywgUFJVaW50MzIgbWF4KTsKIyAxMjMgIi93aW5kb3dzL2hkYTEy
L21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAq
ClBMX3N0cmR1cChjb25zdCBjaGFyICpzKTsKCgoKCgoKCmV4dGVybiB2b2lkClBMX3N0cmZyZWUo
Y2hhciAqcyk7CiMgMTQ3ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJuZHVwKGNvbnN0IGNoYXIgKnMs
IFBSVWludDMyIG1heCk7CiMgMTU5ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJjYXQoY2hhciAqZHN0
LCBjb25zdCBjaGFyICpzcmMpOwojIDE3NCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxh
L2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybmNhdChjaGFy
ICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgUFJVaW50MzIgbWF4KTsKIyAxODggIi93aW5kb3dzL2hk
YTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hh
ciAqClBMX3N0cmNhdG4oY2hhciAqZHN0LCBQUlVpbnQzMiBtYXgsIGNvbnN0IGNoYXIgKnNyYyk7
CiMgMjAwICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv
cGxzdHIuaCIKZXh0ZXJuIFBSSW50bgpQTF9zdHJjbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hh
ciAqYik7CiMgMjE0ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRl
L25zcHIvcGxzdHIuaCIKZXh0ZXJuIFBSSW50bgpQTF9zdHJuY21wKGNvbnN0IGNoYXIgKmEsIGNv
bnN0IGNoYXIgKmIsIFBSVWludDMyIG1heCk7CiMgMjI2ICIvd2luZG93cy9oZGExMi9tb3otY3Zz
L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIFBSSW50bgpQTF9zdHJj
YXNlY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpOwojIDIzOCAiL3dpbmRvd3MvaGRh
MTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBQUklu
dG4KUExfc3RybmNhc2VjbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwgUFJVaW50MzIg
bWF4KTsKIyAyNDkgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUv
bnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cmNocihjb25zdCBjaGFyICpzLCBjaGFy
IGMpOwojIDI2MCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RycmNocihjb25zdCBjaGFyICpzLCBjaGFy
IGMpOwojIDI3MiAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybmNocihjb25zdCBjaGFyICpzLCBjaGFy
IGMsIFBSVWludDMyIG4pOwojIDI4NCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rp
c3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybnJjaHIoY29uc3Qg
Y2hhciAqcywgY2hhciBjLCBQUlVpbnQzMiBuKTsKIyAzMDAgIi93aW5kb3dzL2hkYTEyL21vei1j
dnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0
cnBicmsoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqbGlzdCk7CiMgMzExICIvd2luZG93cy9o
ZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNo
YXIgKgpQTF9zdHJwcmJyayhjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpsaXN0KTsKIyAzMjIg
Ii93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5o
IgpleHRlcm4gY2hhciAqClBMX3N0cm5wYnJrKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmxp
c3QsIFBSVWludDMyIG4pOwojIDMzMyAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rp
c3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybnByYnJrKGNvbnN0
IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmxpc3QsIFBSVWludDMyIG4pOwojIDM0MyAiL3dpbmRvd3Mv
aGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBj
aGFyICoKUExfc3Ryc3RyKGNvbnN0IGNoYXIgKmJpZywgY29uc3QgY2hhciAqbGl0dGxlKTsKIyAz
NTMgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0
ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cnJzdHIoY29uc3QgY2hhciAqYmlnLCBjb25zdCBjaGFy
ICpsaXR0bGUpOwojIDM2NCAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybnN0cihjb25zdCBjaGFyICpi
aWcsIGNvbnN0IGNoYXIgKmxpdHRsZSwgUFJVaW50MzIgbik7CiMgMzc1ICIvd2luZG93cy9oZGEx
Mi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIg
KgpQTF9zdHJucnN0cihjb25zdCBjaGFyICpiaWcsIGNvbnN0IGNoYXIgKmxpdHRsZSwgUFJVaW50
MzIgbWF4KTsKIyAzODUgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1
ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cmNhc2VzdHIoY29uc3QgY2hhciAq
YmlnLCBjb25zdCBjaGFyICpsaXR0bGUpOwojIDM5NSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9t
b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RyY2Fz
ZXJzdHIoY29uc3QgY2hhciAqYmlnLCBjb25zdCBjaGFyICpsaXR0bGUpOwojIDQwNiAiL3dpbmRv
d3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVy
biBjaGFyICoKUExfc3RybmNhc2VzdHIoY29uc3QgY2hhciAqYmlnLCBjb25zdCBjaGFyICpsaXR0
bGUsIFBSVWludDMyIG1heCk7CiMgNDE3ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJuY2FzZXJzdHIo
Y29uc3QgY2hhciAqYmlnLCBjb25zdCBjaGFyICpsaXR0bGUsIFBSVWludDMyIG1heCk7CgoKCgoK
Cgp9CiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NSVC5oIiAyCiMgMSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgMjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0NSVC5oIiAyCiMgMSAiL3dpbmRvd3MvaGRhMTIvbW96LWN2cy9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNDUlQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NwcFNoYXJlZEFsbG9j
YXRvci5oIiAxCgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zTWVtb3J5LmgiIDEK
IyA1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDcHBTaGFyZWRBbGxvY2F0b3IuaCIgMgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDYgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0NwcFNoYXJlZEFsbG9jYXRvci5oIiAyCiMgMSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iYWNrd2FyZC9uZXcuaCIgMSAzCiMgNyAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zQ3BwU2hhcmVkQWxsb2NhdG9yLmgiIDIKIyAyMyAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zQ3BwU2hhcmVkQWxsb2NhdG9yLmgiCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp
Yi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTEgIi91c3Iv
bG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvbGltaXRzLmgi
IDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNs
dWRlL3N5c2xpbWl0cy5oIiAxIDMKCgoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1
ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMzAgIi91c3IvbG9j
YWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvbGltaXRz
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVk
ZS9saW1pdHMuaCIgMiAzCiMgMTQ0ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDEgMwojIDEyNiAiL3Vzci9pbmNsdWRlL2JpdHMv
cG9zaXgxX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDEgMwoj
IDM2ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9s
aW51eC9saW1pdHMuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAy
IDMKIyAxMjcgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMiAzCiMgMTQ1ICIvdXNy
L2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4Ml9s
aW0uaCIgMSAzCiMgMTQ5ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2JpdHMveG9w
ZW5fbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzCiMgMzUg
Ii91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAyIDMKIyAxMzYgIi91c3IvaW5jbHVkZS9i
aXRzL3hvcGVuX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAz
CiMgMTM3ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMiAzCiMgMTUzICIvdXNyL2lu
Y2x1ZGUvbGltaXRzLmgiIDIgMwojIDEzMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBj
LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgOCAiL3Vzci9sb2NhbC9saWIv
Z2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzCiMg
MTIgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUv
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
ICIvd2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBl
cy5oIiAxCiMgNDggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAyCiMgMSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgNDkgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc1N0cmluZy5oIiAyCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyA1MCAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNTdHIuaCIgMQojIDUxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lBdG9tLmgiIDEKIyA1MiAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDIKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zQVN0cmluZy5oIiAxCiMgNTQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmlu
Zy5oIiAyCiMgNjIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgojIDEgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FXcml0YWJsZVN0cmluZy5oIiAxCiMgNjMgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAyCgoKCmNsYXNzIG5zU3Vic3VtZUNTdHI7
CgpjbGFzcyBuc0NTdHJpbmcgOgogIHB1YmxpYyBuc0FGbGF0Q1N0cmluZywKICBwdWJsaWMgbnNT
dHIgewoKcHJvdGVjdGVkOgogIHZpcnR1YWwgY29uc3QgbnNCdWZmZXJIYW5kbGU8Y2hhcj4qIEdl
dEZsYXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICB2aXJ0dWFsIGNvbnN0IGNoYXIqIEdldFJlYWRh
YmxlRnJhZ21lbnQoIG5zUmVhZGFibGVGcmFnbWVudDxjaGFyPiYsIG5zRnJhZ21lbnRSZXF1ZXN0
LCBQUlVpbnQzMiApIGNvbnN0OwogIHZpcnR1YWwgY2hhciogR2V0V3JpdGFibGVGcmFnbWVudCgg
bnNXcml0YWJsZUZyYWdtZW50PGNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICk7
CgpwdWJsaWM6CiAgdmlydHVhbCBjb25zdCBjaGFyKiBnZXQoKSBjb25zdCB7IHJldHVybiBtU3Ry
OyB9CgpwdWJsaWM6CgoKCiAgbnNDU3RyaW5nKCk7CgoKCgoKICBuc0NTdHJpbmcoY29uc3QgbnND
U3RyaW5nJiBhU3RyaW5nKTsKCiAgZXhwbGljaXQgbnNDU3RyaW5nKCBjb25zdCBuc0FDU3RyaW5n
JiApOwoKICBleHBsaWNpdCBuc0NTdHJpbmcoY29uc3QgY2hhciopOwogIG5zQ1N0cmluZyhjb25z
dCBjaGFyKiwgUFJJbnQzMik7CgoKCgoKICBleHBsaWNpdCBuc0NTdHJpbmcobnNTdWJzdW1lQ1N0
ciYgYVN1YnN1bWVTdHIpOwoKCgoKCiAgdmlydHVhbCB+bnNDU3RyaW5nKCk7CgoKCgoKICB2aXJ0
dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1MZW5ndGg7IH0KCgoKCgogIHZp
cnR1YWwgdm9pZCBTaXplT2YobnNJU2l6ZU9mSGFuZGxlciogYUhhbmRsZXIsIFBSVWludDMyKiBh
UmVzdWx0KSBjb25zdDsKIyAxMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5o
IgogIHZvaWQgU2V0TGVuZ3RoKFBSVWludDMyIGFMZW5ndGgpOwoKCgoKCgogIHZvaWQgU2V0Q2Fw
YWNpdHkoUFJVaW50MzIgYUxlbmd0aCk7CgoKCgoKICBQUkJvb2wgU2V0Q2hhckF0KFBSVW5pY2hh
ciBhQ2hhcixQUlVpbnQzMiBhbkluZGV4KTsKIyAxNTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc1N0cmluZy5oIgogIHZvaWQgVG9Mb3dlckNhc2UoKTsKIyAxNjAgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc1N0cmluZy5oIgogIHZvaWQgVG9Mb3dlckNhc2UobnNDU3RyaW5nJiBhU3Ry
aW5nKSBjb25zdDsKCgoKCgogIHZvaWQgVG9VcHBlckNhc2UoKTsKCgoKCgoKCiAgdm9pZCBUb1Vw
cGVyQ2FzZShuc0NTdHJpbmcmIGFTdHJpbmcpIGNvbnN0OwojIDE4NCAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgdm9pZCBTdHJpcENoYXJzKGNvbnN0IGNoYXIqIGFTZXQp
OwogIHZvaWQgU3RyaXBDaGFyKFBSVW5pY2hhciBhQ2hhcixQUkludDMyIGFuT2Zmc2V0PTApOwog
IHZvaWQgU3RyaXBDaGFyKGNoYXIgYUNoYXIsUFJJbnQzMiBhbk9mZnNldD0wKSB7IFN0cmlwQ2hh
cigoUFJVbmljaGFyKSAodW5zaWduZWQgY2hhcilhQ2hhcixhbk9mZnNldCk7IH0KCgoKCgoKICB2
b2lkIFN0cmlwV2hpdGVzcGFjZSgpOwoKCgoKCgogIHZvaWQgUmVwbGFjZUNoYXIoUFJVbmljaGFy
IGFPbGRDaGFyLFBSVW5pY2hhciBhTmV3Q2hhcik7CiAgdm9pZCBSZXBsYWNlQ2hhcihjb25zdCBj
aGFyKiBhU2V0LFBSVW5pY2hhciBhTmV3Q2hhcik7CgogIHZvaWQgUmVwbGFjZVN1YnN0cmluZyhj
b25zdCBuc0NTdHJpbmcmIGFUYXJnZXQsY29uc3QgbnNDU3RyaW5nJiBhTmV3VmFsdWUpOwogIHZv
aWQgUmVwbGFjZVN1YnN0cmluZyhjb25zdCBjaGFyKiBhVGFyZ2V0LGNvbnN0IGNoYXIqIGFOZXdW
YWx1ZSk7CiMgMjE3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICB2b2lk
IFRyaW0oY29uc3QgY2hhciogYVNldCxQUkJvb2wgYUVsaW1pbmF0ZUxlYWRpbmc9MSxQUkJvb2wg
YUVsaW1pbmF0ZVRyYWlsaW5nPTEsUFJCb29sIGFJZ25vcmVRdW90ZXM9MCk7CiMgMjI4ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICB2b2lkIENvbXByZXNzU2V0KGNvbnN0
IGNoYXIqIGFTZXQsIFBSVW5pY2hhciBhQ2hhcixQUkJvb2wgYUVsaW1pbmF0ZUxlYWRpbmc9MSxQ
UkJvb2wgYUVsaW1pbmF0ZVRyYWlsaW5nPTEpOwojIDIzOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zU3RyaW5nLmgiCiAgdm9pZCBDb21wcmVzc1doaXRlc3BhY2UoIFBSQm9vbCBhRWxpbWlu
YXRlTGVhZGluZz0xLFBSQm9vbCBhRWxpbWluYXRlVHJhaWxpbmc9MSk7CgoKCgoKICBvcGVyYXRv
ciBjb25zdCBjaGFyKigpIGNvbnN0IHtyZXR1cm4gKGNvbnN0IGNoYXIqKW1TdHI7fQoKCgoKCgoK
ICBuc0NTdHJpbmcqIFRvTmV3U3RyaW5nKCkgY29uc3Q7CgoKCgoKCgogIGNoYXIqIFRvTmV3Q1N0
cmluZygpIGNvbnN0OwoKCgoKCgoKICBQUlVuaWNoYXIqIFRvTmV3VW5pY29kZSgpIGNvbnN0Owoj
IDI3OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgY2hhciogVG9DU3Ry
aW5nKGNoYXIqIGFCdWYsUFJVaW50MzIgYUJ1Zkxlbmd0aCxQUlVpbnQzMiBhbk9mZnNldD0wKSBj
b25zdDsKCgoKCgoKICBmbG9hdCBUb0Zsb2F0KFBSSW50MzIqIGFFcnJvckNvZGUpIGNvbnN0Owoj
IDI5NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgUFJJbnQzMiBUb0lu
dGVnZXIoUFJJbnQzMiogYUVycm9yQ29kZSxQUlVpbnQzMiBhUmFkaXg9KDEwKSkgY29uc3Q7CiMg
MzEwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICBuc0NTdHJpbmcmIG9w
ZXJhdG9yPSggY29uc3QgbnNDU3RyaW5nJiBhU3RyaW5nICkgeyBBc3NpZ24oYVN0cmluZyk7IHJl
dHVybiAqdGhpczsgfQogIG5zQ1N0cmluZyYgb3BlcmF0b3I9KCBjb25zdCBuc0FDU3RyaW5nJiBh
UmVhZGFibGUgKSB7IEFzc2lnbihhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KCiAgbnNDU3Ry
aW5nJiBvcGVyYXRvcj0oIGNvbnN0IGNoYXIqIGFQdHIgKSB7IEFzc2lnbihhUHRyKTsgcmV0dXJu
ICp0aGlzOyB9CiAgbnNDU3RyaW5nJiBvcGVyYXRvcj0oIGNoYXIgYUNoYXIgKSB7IEFzc2lnbihh
Q2hhcik7IHJldHVybiAqdGhpczsgfQoKICB2b2lkIEFzc2lnbldpdGhDb252ZXJzaW9uKGNvbnN0
IFBSVW5pY2hhciosUFJJbnQzMj0tMSk7CiAgdm9pZCBBc3NpZ25XaXRoQ29udmVyc2lvbiggY29u
c3QgbnNTdHJpbmcmIGFTdHJpbmcgKTsKICB2b2lkIEFzc2lnbldpdGhDb252ZXJzaW9uKCBjb25z
dCBuc0FTdHJpbmcmIGFTdHJpbmcgKTsKICB2b2lkIEFzc2lnbldpdGhDb252ZXJzaW9uKFBSVW5p
Y2hhcik7CiMgMzMxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICB2b2lk
IEFwcGVuZFdpdGhDb252ZXJzaW9uKGNvbnN0IG5zU3RyaW5nJiwgUFJJbnQzMj0tMSk7CiAgdm9p
ZCBBcHBlbmRXaXRoQ29udmVyc2lvbihQUlVuaWNoYXIgYUNoYXIpOwogIHZvaWQgQXBwZW5kV2l0
aENvbnZlcnNpb24oIGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZyApOwogIHZvaWQgQXBwZW5kV2l0
aENvbnZlcnNpb24oY29uc3QgUFJVbmljaGFyKiwgUFJJbnQzMj0tMSk7CgogIHZvaWQgQXBwZW5k
SW50KFBSSW50MzIgYUludGVnZXIsUFJJbnQzMiBhUmFkaXg9MTApOwogIHZvaWQgQXBwZW5kRmxv
YXQoIGRvdWJsZSBhRmxvYXQgKTsKCgogIHZvaWQgSW5zZXJ0V2l0aENvbnZlcnNpb24oUFJVbmlj
aGFyIGFDaGFyLFBSVWludDMyIGFuT2Zmc2V0KTsKIyAzNjMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc1N0cmluZy5oIgogIFBSSW50MzIgRmluZChjb25zdCBuc1N0ciYgYVN0cmluZyxQUkJv
b2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNv
bnN0OwogIFBSSW50MzIgRmluZChjb25zdCBjaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2Fz
ZT0wLFBSSW50MzIgYW5PZmZzZXQ9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJJbnQz
MiBGaW5kKGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUklu
dDMyIGFuT2Zmc2V0PTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwojIDM3NiAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgUFJJbnQzMiBGaW5kQ2hhcihQUlVuaWNoYXIg
YUNoYXIsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0wLFBSSW50MzIgYUNv
dW50PS0xKSBjb25zdDsKIyAzODUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5o
IgogIFBSSW50MzIgRmluZENoYXJJblNldChjb25zdCBjaGFyKiBhU3RyaW5nLFBSSW50MzIgYW5P
ZmZzZXQ9MCkgY29uc3Q7CiAgUFJJbnQzMiBGaW5kQ2hhckluU2V0KGNvbnN0IFBSVW5pY2hhciog
YVN0cmluZyxQUkludDMyIGFuT2Zmc2V0PTApIGNvbnN0OwogIFBSSW50MzIgRmluZENoYXJJblNl
dChjb25zdCBuc1N0ciYgYVN0cmluZyxQUkludDMyIGFuT2Zmc2V0PTApIGNvbnN0OwojIDM5NyAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgUFJJbnQzMiBSRmluZChjb25z
dCBjaGFyKiBhQ1N0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PS0x
LFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQUkludDMyIFJGaW5kKGNvbnN0IG5zU3RyJiBh
U3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYW5PZmZzZXQ9LTEsUFJJbnQzMiBh
Q291bnQ9LTEpIGNvbnN0OwogIFBSSW50MzIgUkZpbmQoY29uc3QgUFJVbmljaGFyKiBhU3RyaW5n
LFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYW5PZmZzZXQ9LTEsUFJJbnQzMiBhQ291bnQ9
LTEpIGNvbnN0OwojIDQxMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAg
UFJJbnQzMiBSRmluZENoYXIoUFJVbmljaGFyIGFDaGFyLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBS
SW50MzIgYW5PZmZzZXQ9LTEsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwojIDQxOSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgUFJJbnQzMiBSRmluZENoYXJJblNldChj
b25zdCBjaGFyKiBhU3RyaW5nLFBSSW50MzIgYW5PZmZzZXQ9LTEpIGNvbnN0OwogIFBSSW50MzIg
UkZpbmRDaGFySW5TZXQoY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLFBSSW50MzIgYW5PZmZzZXQ9
LTEpIGNvbnN0OwogIFBSSW50MzIgUkZpbmRDaGFySW5TZXQoY29uc3QgbnNTdHImIGFTdHJpbmcs
UFJJbnQzMiBhbk9mZnNldD0tMSkgY29uc3Q7CiMgNDM3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNTdHJpbmcuaCIKICBQUkludDMyIENvbXBhcmVXaXRoQ29udmVyc2lvbihjb25zdCBQUlVu
aWNoYXIqIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNv
bnN0OwogIFBSSW50MzIgQ29tcGFyZVdpdGhDb252ZXJzaW9uKGNvbnN0IGNoYXIqIGFTdHJpbmcs
UFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwoKICBQUkJvb2wg
RXF1YWxzV2l0aENvbnZlcnNpb24oY29uc3QgbnNTdHJpbmcgJmFTdHJpbmcsUFJCb29sIGFJZ25v
cmVDYXNlPTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwogIFBSQm9vbCBFcXVhbHNXaXRoQ29u
dmVyc2lvbihjb25zdCBjaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIg
YUNvdW50PS0xKSBjb25zdDsKICBQUkJvb2wgRXF1YWxzV2l0aENvbnZlcnNpb24oY29uc3QgUFJV
bmljaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYUNvdW50PS0xKSBj
b25zdDsKCiAgUFJCb29sIEVxdWFsc0lnbm9yZUNhc2UoY29uc3QgY2hhciogYVN0cmluZyxQUklu
dDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJCb29sIEVxdWFsc0lnbm9yZUNhc2UoY29uc3QgUFJV
bmljaGFyKiBhU3RyaW5nLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKCgogIHZvaWQgRGVidWdE
dW1wKHZvaWQpIGNvbnN0OwoKcHJpdmF0ZToKCgogIHZvaWQgb3BlcmF0b3I9KCBQUlVuaWNoYXIg
KTsKICB2b2lkIEFzc2lnbldpdGhDb252ZXJzaW9uKCBjaGFyICk7CiAgdm9pZCBBc3NpZ25XaXRo
Q29udmVyc2lvbiggY29uc3QgY2hhciosIFBSSW50MzI9LTEgKTsKICB2b2lkIEFwcGVuZFdpdGhD
b252ZXJzaW9uKCBjaGFyICk7CiAgdm9pZCBJbnNlcnRXaXRoQ29udmVyc2lvbiggY2hhciwgUFJV
aW50MzIgKTsKfTsKCgoKCmV4dGVybiBpbnQgZnB1dHMoY29uc3QgbnNDU3RyaW5nJiBhU3RyaW5n
LCBGSUxFKiBvdXQpOwojIDQ3NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgi
CmNsYXNzIG5zQ0F1dG9TdHJpbmcgOiBwdWJsaWMgbnNDU3RyaW5nIHsKcHVibGljOgoKICAgIHZp
cnR1YWwgfm5zQ0F1dG9TdHJpbmcoKTsKCiAgICBuc0NBdXRvU3RyaW5nKCk7CiAgICBleHBsaWNp
dCBuc0NBdXRvU3RyaW5nKGNvbnN0IG5zQ1N0cmluZyYgKTsKICAgIGV4cGxpY2l0IG5zQ0F1dG9T
dHJpbmcoY29uc3QgbnNBQ1N0cmluZyYgYVN0cmluZyk7CiAgICBleHBsaWNpdCBuc0NBdXRvU3Ry
aW5nKGNvbnN0IGNoYXIqIGFTdHJpbmcpOwogICAgbnNDQXV0b1N0cmluZyhjb25zdCBjaGFyKiBh
U3RyaW5nLFBSSW50MzIgYUxlbmd0aCk7CiAgICBleHBsaWNpdCBuc0NBdXRvU3RyaW5nKGNvbnN0
IENCdWZEZXNjcmlwdG9yJiBhQnVmZmVyKTsKCgoKCiAgICBleHBsaWNpdCBuc0NBdXRvU3RyaW5n
KG5zU3Vic3VtZUNTdHImIGFTdWJzdW1lU3RyKTsKCgoKICAgIG5zQ0F1dG9TdHJpbmcmIG9wZXJh
dG9yPSggY29uc3QgbnNDQXV0b1N0cmluZyYgYVN0cmluZyApIHsgQXNzaWduKGFTdHJpbmcpOyBy
ZXR1cm4gKnRoaXM7IH0KICBwcml2YXRlOgogICAgdm9pZCBvcGVyYXRvcj0oIFBSVW5pY2hhciAp
OwogIHB1YmxpYzoKICAgIG5zQ0F1dG9TdHJpbmcmIG9wZXJhdG9yPSggY29uc3QgbnNBQ1N0cmlu
ZyYgYVJlYWRhYmxlICkgeyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9CgogICAg
bnNDQXV0b1N0cmluZyYgb3BlcmF0b3I9KCBjb25zdCBjaGFyKiBhUHRyICkgeyBBc3NpZ24oYVB0
cik7IHJldHVybiAqdGhpczsgfQogICAgbnNDQXV0b1N0cmluZyYgb3BlcmF0b3I9KCBjaGFyIGFD
aGFyICkgeyBBc3NpZ24oYUNoYXIpOyByZXR1cm4gKnRoaXM7IH0KCgoKCgogICAgdmlydHVhbCB2
b2lkIFNpemVPZihuc0lTaXplT2ZIYW5kbGVyKiBhSGFuZGxlciwgUFJVaW50MzIqIGFSZXN1bHQp
IGNvbnN0OwoKICAgIGNoYXIgbUJ1ZmZlcltrRGVmYXVsdFN0cmluZ1NpemVdOwp9OwoKCgoKCgpj
bGFzcyBOU19Db252ZXJ0VUNTMnRvVVRGOAogICAgICA6IHB1YmxpYyBuc0NBdXRvU3RyaW5nCgoK
CiAgewogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBOU19Db252ZXJ0VUNTMnRvVVRG
OCggY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nICkKICAgICAgICB7CiAgICAgICAgICBBcHBlbmQo
IGFTdHJpbmcsIH5QUlVpbnQzMigwKSApOwogICAgICAgIH0KCiAgICAgIE5TX0NvbnZlcnRVQ1My
dG9VVEY4KCBjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsIFBSVWludDMyIGFMZW5ndGggKQogICAg
ICAgIHsKICAgICAgICAgIEFwcGVuZCggYVN0cmluZywgYUxlbmd0aCApOwogICAgICAgIH0KCiAg
ICAgIGV4cGxpY2l0CiAgICAgIE5TX0NvbnZlcnRVQ1MydG9VVEY4KCBQUlVuaWNoYXIgYUNoYXIg
KQogICAgICAgIHsKICAgICAgICAgIEFwcGVuZCggJmFDaGFyLCAxICk7CiAgICAgICAgfQoKICAg
ICAgZXhwbGljaXQgTlNfQ29udmVydFVDUzJ0b1VURjgoIGNvbnN0IG5zQVN0cmluZyYgYVN0cmlu
ZyApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdm9pZCBBcHBlbmQoIGNvbnN0IFBSVW5pY2hhciog
YVN0cmluZywgUFJVaW50MzIgYUxlbmd0aCApOwoKICAgIHByaXZhdGU6CgogICAgICBOU19Db252
ZXJ0VUNTMnRvVVRGOCggY2hhciApOwogICAgICBvcGVyYXRvciBjb25zdCBjaGFyKigpIGNvbnN0
OwogIH07CiMgNTY1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKY2xhc3Mg
bnNTdWJzdW1lQ1N0ciA6IHB1YmxpYyBuc0NTdHJpbmcgewpwdWJsaWM6CiAgZXhwbGljaXQgbnNT
dWJzdW1lQ1N0cihuc1N0ciYgYVN0cmluZyk7CiAgbnNTdWJzdW1lQ1N0cihQUlVuaWNoYXIqIGFT
dHJpbmcsUFJCb29sIGFzc3VtZU93bmVyc2hpcCxQUkludDMyIGFMZW5ndGg9LTEpOwogIG5zU3Vi
c3VtZUNTdHIoY2hhciogYVN0cmluZyxQUkJvb2wgYXNzdW1lT3duZXJzaGlwLFBSSW50MzIgYUxl
bmd0aD0tMSk7CgogIG5zU3Vic3VtZUNTdHImIG9wZXJhdG9yPSggY29uc3QgbnNTdWJzdW1lQ1N0
ciYgYVN0cmluZyApIHsgQXNzaWduKGFTdHJpbmcpOyByZXR1cm4gKnRoaXM7IH0KICBuc1N1YnN1
bWVDU3RyJiBvcGVyYXRvcj0oIGNvbnN0IG5zQUNTdHJpbmcmIGFSZWFkYWJsZSApIHsgQXNzaWdu
KGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsgfQoKICBuc1N1YnN1bWVDU3RyJiBvcGVyYXRvcj0o
IGNvbnN0IGNoYXIqIGFQdHIgKSB7IEFzc2lnbihhUHRyKTsgcmV0dXJuICp0aGlzOyB9CiAgbnNT
dWJzdW1lQ1N0ciYgb3BlcmF0b3I9KCBjaGFyIGFDaGFyICkgeyBBc3NpZ24oYUNoYXIpOyByZXR1
cm4gKnRoaXM7IH0KcHJpdmF0ZToKICB2b2lkIG9wZXJhdG9yPSggUFJVbmljaGFyICk7Cn07CiMg
NDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hhc2h0YWJsZS5oIiAyCgpjbGFzcyBuc0hh
c2h0YWJsZTsKY2xhc3MgbnNTdHJpbmdLZXk7CgpjbGFzcyBuc0hhc2hLZXkgewpwcm90ZWN0ZWQ6
CiAgbnNIYXNoS2V5KHZvaWQpOwoKcHVibGljOgogIHZpcnR1YWwgfm5zSGFzaEtleSh2b2lkKTsK
ICB2aXJ0dWFsIFBSVWludDMyIEhhc2hDb2RlKHZvaWQpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIFBS
Qm9vbCBFcXVhbHMoY29uc3QgbnNIYXNoS2V5ICphS2V5KSBjb25zdCA9IDA7CiAgdmlydHVhbCBu
c0hhc2hLZXkgKkNsb25lKCkgY29uc3QgPSAwOwojIDcxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNIYXNodGFibGUuaCIKfTsKCgoKdHlwZWRlZiBQUkJvb2wgKCogbnNIYXNodGFibGVFbnVt
RnVuYykobnNIYXNoS2V5ICphS2V5LCB2b2lkICphRGF0YSwgdm9pZCogY2xvc3VyZSk7CgpjbGFz
cyBuc0hhc2h0YWJsZSB7CnByb3RlY3RlZDoKCiAgUFJMb2NrKiBtTG9jazsKICBQTEhhc2hUYWJs
ZSBtSGFzaHRhYmxlOwogIFBSQm9vbCBtRW51bWVyYXRpbmc7CgpwdWJsaWM6CiAgbnNIYXNodGFi
bGUoUFJVaW50MzIgYVNpemUgPSAxNiwgUFJCb29sIHRocmVhZFNhZmUgPSAwKTsKICB2aXJ0dWFs
IH5uc0hhc2h0YWJsZSgpOwoKICBQUkludDMyIENvdW50KHZvaWQpIHsgcmV0dXJuIG1IYXNodGFi
bGUubmVudHJpZXM7IH0KICBQUkJvb2wgRXhpc3RzKG5zSGFzaEtleSAqYUtleSk7CiAgdm9pZCAq
UHV0KG5zSGFzaEtleSAqYUtleSwgdm9pZCAqYURhdGEpOwogIHZvaWQgKkdldChuc0hhc2hLZXkg
KmFLZXkpOwogIHZvaWQgKlJlbW92ZShuc0hhc2hLZXkgKmFLZXkpOwogIG5zSGFzaHRhYmxlICpD
bG9uZSgpOwogIHZvaWQgRW51bWVyYXRlKG5zSGFzaHRhYmxlRW51bUZ1bmMgYUVudW1GdW5jLCB2
b2lkKiBjbG9zdXJlID0gX19udWxsKTsKICB2b2lkIFJlc2V0KCk7CiAgdm9pZCBSZXNldChuc0hh
c2h0YWJsZUVudW1GdW5jIGRlc3Ryb3lGdW5jLCB2b2lkKiBjbG9zdXJlID0gX19udWxsKTsKfTsK
CgoKCgp0eXBlZGVmIHZvaWQqICgqIG5zSGFzaHRhYmxlQ2xvbmVFbGVtZW50RnVuYykobnNIYXNo
S2V5ICphS2V5LCB2b2lkICphRGF0YSwgdm9pZCogY2xvc3VyZSk7CgpjbGFzcyBuc09iamVjdEhh
c2h0YWJsZSA6IHB1YmxpYyBuc0hhc2h0YWJsZSB7CnB1YmxpYzoKICBuc09iamVjdEhhc2h0YWJs
ZShuc0hhc2h0YWJsZUNsb25lRWxlbWVudEZ1bmMgY2xvbmVFbGVtZW50RnVuLAogICAgICAgICAg
ICAgICAgICAgIHZvaWQqIGNsb25lRWxlbWVudENsb3N1cmUsCiAgICAgICAgICAgICAgICAgICAg
bnNIYXNodGFibGVFbnVtRnVuYyBkZXN0cm95RWxlbWVudEZ1biwKICAgICAgICAgICAgICAgICAg
ICB2b2lkKiBkZXN0cm95RWxlbWVudENsb3N1cmUsCiAgICAgICAgICAgICAgICAgICAgUFJVaW50
MzIgYVNpemUgPSAxNiwgUFJCb29sIHRocmVhZFNhZmUgPSAwKTsKICB+bnNPYmplY3RIYXNodGFi
bGUoKTsKCiAgbnNIYXNodGFibGUgKkNsb25lKCk7CiAgdm9pZCBSZXNldCgpOwogIFBSQm9vbCBS
ZW1vdmVBbmREZWxldGUobnNIYXNoS2V5ICphS2V5KTsKCnByb3RlY3RlZDoKICBzdGF0aWMgUFJJ
bnRuIENvcHlFbGVtZW50KFBMSGFzaEVudHJ5ICpoZSwgUFJJbnRuIGksIHZvaWQgKmFyZyk7Cgog
IG5zSGFzaHRhYmxlQ2xvbmVFbGVtZW50RnVuYyBtQ2xvbmVFbGVtZW50RnVuOwogIHZvaWQqIG1D
bG9uZUVsZW1lbnRDbG9zdXJlOwogIG5zSGFzaHRhYmxlRW51bUZ1bmMgbURlc3Ryb3lFbGVtZW50
RnVuOwogIHZvaWQqIG1EZXN0cm95RWxlbWVudENsb3N1cmU7Cn07CgoKCgpjbGFzcyBuc0lTdXBw
b3J0czsKCmNsYXNzIG5zU3VwcG9ydHNIYXNodGFibGUKIDogcHJpdmF0ZSBuc0hhc2h0YWJsZQp7
CnB1YmxpYzoKICB0eXBlZGVmIFBSQm9vbCAoKiBFbnVtRnVuYykgKG5zSGFzaEtleSAqYUtleSwg
dm9pZCAqYURhdGEsIHZvaWQqIGNsb3N1cmUpOwoKICBuc1N1cHBvcnRzSGFzaHRhYmxlKFBSVWlu
dDMyIGFTaXplID0gMTYsIFBSQm9vbCB0aHJlYWRTYWZlID0gMCkKICAgIDogbnNIYXNodGFibGUo
YVNpemUsIHRocmVhZFNhZmUpIHt9CiAgfm5zU3VwcG9ydHNIYXNodGFibGUoKTsKCiAgUFJJbnQz
MiBDb3VudCAodm9pZCkKICB7CiAgICByZXR1cm4gbnNIYXNodGFibGU6OkNvdW50KCk7CiAgfQog
IFBSQm9vbCBFeGlzdHMgKG5zSGFzaEtleSAqYUtleSkKICB7CiAgICByZXR1cm4gbnNIYXNodGFi
bGU6OkV4aXN0cyAoYUtleSk7CiAgfQogIFBSQm9vbCBQdXQgKG5zSGFzaEtleSAqYUtleSwKICAg
ICAgICAgICAgICBuc0lTdXBwb3J0cyAqYURhdGEsCiAgICAgICAgICAgICAgbnNJU3VwcG9ydHMg
Kip2YWx1ZSA9IDApOwogIG5zSVN1cHBvcnRzKiBHZXQgKG5zSGFzaEtleSAqYUtleSk7CiAgUFJC
b29sIFJlbW92ZSAobnNIYXNoS2V5ICphS2V5LCBuc0lTdXBwb3J0cyAqKnZhbHVlID0gMCk7CiAg
bnNIYXNodGFibGUgKkNsb25lKCk7CiAgdm9pZCBFbnVtZXJhdGUgKEVudW1GdW5jIGFFbnVtRnVu
Yywgdm9pZCogY2xvc3VyZSA9IF9fbnVsbCkKICB7CiAgICBuc0hhc2h0YWJsZTo6RW51bWVyYXRl
IChhRW51bUZ1bmMsIGNsb3N1cmUpOwogIH0KICB2b2lkIFJlc2V0KCk7CgogcHJpdmF0ZToKICBz
dGF0aWMgUFJCb29sIFJlbGVhc2VFbGVtZW50IChuc0hhc2hLZXkgKiwgdm9pZCAqLCB2b2lkICop
OwogIHN0YXRpYyBQUkludG4gRW51bWVyYXRlQ29weSAoUExIYXNoRW50cnkgKiwgUFJJbnRuLCB2
b2lkICopOwp9OwoKCgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMu
aCIgMQojIDE3MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiIDIKCmNs
YXNzIG5zSVN1cHBvcnRzS2V5IDogcHVibGljIG5zSGFzaEtleSB7CnByb3RlY3RlZDoKICBuc0lT
dXBwb3J0cyogbUtleTsKCnB1YmxpYzoKICBuc0lTdXBwb3J0c0tleShuc0lTdXBwb3J0cyoga2V5
KSB7CgoKCiAgICBtS2V5ID0ga2V5OwogICAgbnNfaWZfYWRkcmVmKG1LZXkpOwogIH0KCiAgfm5z
SVN1cHBvcnRzS2V5KHZvaWQpIHsKICAgIGRvIHsgaWYgKG1LZXkpIHsgKG1LZXkpLT5SZWxlYXNl
KCk7IChtS2V5KSA9IDA7IH0gfSB3aGlsZSAoMCk7CiAgfQoKICBQUlVpbnQzMiBIYXNoQ29kZSh2
b2lkKSBjb25zdCB7CiAgICByZXR1cm4gKFBSVWludDMyKW1LZXk7CiAgfQoKICBQUkJvb2wgRXF1
YWxzKGNvbnN0IG5zSGFzaEtleSAqYUtleSkgY29uc3QgewogICAge307CiAgICByZXR1cm4gKG1L
ZXkgPT0gKChuc0lTdXBwb3J0c0tleSAqKSBhS2V5KS0+bUtleSk7CiAgfQoKICBuc0hhc2hLZXkg
KkNsb25lKCkgY29uc3QgewogICAgcmV0dXJuIG5ldyBuc0lTdXBwb3J0c0tleShtS2V5KTsKICB9
Cn07CgoKCgpjbGFzcyBuc1ZvaWRLZXkgOiBwdWJsaWMgbnNIYXNoS2V5IHsKcHJvdGVjdGVkOgog
IHZvaWQqIG1LZXk7CgpwdWJsaWM6CiAgbnNWb2lkS2V5KHZvaWQqIGtleSkgewoKCgogICAgbUtl
eSA9IGtleTsKICB9CgogIFBSVWludDMyIEhhc2hDb2RlKHZvaWQpIGNvbnN0IHsKICAgIHJldHVy
biAoUFJVaW50MzIpbUtleTsKICB9CgogIFBSQm9vbCBFcXVhbHMoY29uc3QgbnNIYXNoS2V5ICph
S2V5KSBjb25zdCB7CiAgICB7fTsKICAgIHJldHVybiAobUtleSA9PSAoKGNvbnN0IG5zVm9pZEtl
eSAqKSBhS2V5KS0+bUtleSk7CiAgfQoKICBuc0hhc2hLZXkgKkNsb25lKCkgY29uc3QgewogICAg
cmV0dXJuIG5ldyBuc1ZvaWRLZXkobUtleSk7CiAgfQoKICB2b2lkKiBHZXRWYWx1ZSgpIHsgcmV0
dXJuIG1LZXk7IH0KfTsKCgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUQuaCIg
MQojIDIzOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiIDIKCmNsYXNz
IG5zSURLZXkgOiBwdWJsaWMgbnNIYXNoS2V5IHsKcHJvdGVjdGVkOgogIG5zSUQgbUlEOwoKcHVi
bGljOgogIG5zSURLZXkoY29uc3QgbnNJRCAmYUlEKSB7CgoKCiAgICBtSUQgPSBhSUQ7CiAgfQoK
ICBQUlVpbnQzMiBIYXNoQ29kZSh2b2lkKSBjb25zdCB7CiAgICByZXR1cm4gbUlELm0wOwogIH0K
CiAgUFJCb29sIEVxdWFscyhjb25zdCBuc0hhc2hLZXkgKmFLZXkpIGNvbnN0IHsKICAgIHt9Owog
ICAgcmV0dXJuIChtSUQuRXF1YWxzKCgoY29uc3QgbnNJREtleSAqKSBhS2V5KS0+bUlEKSk7CiAg
fQoKICBuc0hhc2hLZXkgKkNsb25lKCkgY29uc3QgewogICAgcmV0dXJuIG5ldyBuc0lES2V5KG1J
RCk7CiAgfQp9OwoKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAx
CiMgMjY4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUuaCIgMgoKCmNsYXNz
IG5zQ1N0cmluZ0tleSA6IHB1YmxpYyBuc0hhc2hLZXkgewpwdWJsaWM6CgogIGVudW0gT3duZXJz
aGlwIHsKICAgIE5FVkVSX09XTiwKICAgIE9XTl9DTE9ORSwKICAgIE9XTgogIH07CgogIG5zQ1N0
cmluZ0tleShjb25zdCBjaGFyKiBzdHIsIFBSSW50MzIgc3RyTGVuID0gLTEsIE93bmVyc2hpcCBv
d24gPSBPV05fQ0xPTkUpOwogIG5zQ1N0cmluZ0tleShjb25zdCBuc0NTdHJpbmcmIHN0cik7CiAg
fm5zQ1N0cmluZ0tleSh2b2lkKTsKCiAgUFJVaW50MzIgSGFzaENvZGUodm9pZCkgY29uc3Q7CiAg
UFJCb29sIEVxdWFscyhjb25zdCBuc0hhc2hLZXkqIGFLZXkpIGNvbnN0OwogIG5zSGFzaEtleSog
Q2xvbmUoKSBjb25zdDsKCgoKICBjb25zdCBjaGFyKiBHZXRTdHJpbmcoKSBjb25zdCB7IHJldHVy
biBtU3RyOyB9CiAgUFJVaW50MzIgR2V0U3RyaW5nTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbVN0
ckxlbjsgfQoKcHJvdGVjdGVkOgogIGNoYXIqIG1TdHI7CiAgUFJVaW50MzIgbVN0ckxlbjsKICBP
d25lcnNoaXAgbU93bmVyc2hpcDsKfTsKCgpjbGFzcyBuc1N0cmluZ0tleSA6IHB1YmxpYyBuc0hh
c2hLZXkgewpwdWJsaWM6CgogIGVudW0gT3duZXJzaGlwIHsKICAgIE5FVkVSX09XTiwKICAgIE9X
Tl9DTE9ORSwKICAgIE9XTgogIH07CgogIG5zU3RyaW5nS2V5KGNvbnN0IFBSVW5pY2hhciogc3Ry
LCBQUkludDMyIHN0ckxlbiA9IC0xLCBPd25lcnNoaXAgb3duID0gT1dOX0NMT05FKTsKICBuc1N0
cmluZ0tleShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgc3RyKTsKICB+bnNTdHJpbmdLZXkodm9p
ZCk7CgogIFBSVWludDMyIEhhc2hDb2RlKHZvaWQpIGNvbnN0OwogIFBSQm9vbCBFcXVhbHMoY29u
c3QgbnNIYXNoS2V5KiBhS2V5KSBjb25zdDsKICBuc0hhc2hLZXkqIENsb25lKCkgY29uc3Q7CgoK
CiAgY29uc3QgUFJVbmljaGFyKiBHZXRTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtU3RyOyB9CiAg
UFJVaW50MzIgR2V0U3RyaW5nTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbVN0ckxlbjsgfQoKcHJv
dGVjdGVkOgogIFBSVW5pY2hhciogbVN0cjsKICBQUlVpbnQzMiBtU3RyTGVuOwogIE93bmVyc2hp
cCBtT3duZXJzaGlwOwp9OwoKCmNsYXNzIG5zT3BhcXVlS2V5IDogcHVibGljIG5zSGFzaEtleSB7
CnB1YmxpYzoKCiAgZW51bSBPd25lcnNoaXAgewogICAgTkVWRVJfT1dOLAogICAgT1dOX0NMT05F
LAogICAgT1dOCiAgfTsKCiAgbnNPcGFxdWVLZXkoY29uc3QgY2hhciogYnVmLCBQUlVpbnQzMiBi
dWZMZW4sIE93bmVyc2hpcCBvd24gPSBPV05fQ0xPTkUpOwogIH5uc09wYXF1ZUtleSh2b2lkKTsK
CiAgUFJVaW50MzIgSGFzaENvZGUodm9pZCkgY29uc3Q7CiAgUFJCb29sIEVxdWFscyhjb25zdCBu
c0hhc2hLZXkqIGFLZXkpIGNvbnN0OwogIG5zSGFzaEtleSogQ2xvbmUoKSBjb25zdDsKCgoKICBj
b25zdCBjaGFyKiBHZXRCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtQnVmOyB9CiAgUFJVaW50MzIg
R2V0QnVmZmVyTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbUJ1ZkxlbjsgfQoKcHJvdGVjdGVkOgog
IGNoYXIqIG1CdWY7CiAgUFJVaW50MzIgbUJ1ZkxlbjsKICBPd25lcnNoaXAgbU93bmVyc2hpcDsK
fTsKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zR1VJRXZlbnQuaCIgMgoKCgoKCgoK
IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NS2V5RXZlbnQuaCIgMQojIDEwICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NS2V5RXZlbnQuaCIKIyAxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJRE9NVUlFdmVudC5oIiAxCiMgMTAgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lET01VSUV2ZW50LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SURPTUV2ZW50LmgiIDEKIyAxMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURPTUV2ZW50
LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbXN0dWJzLmgiIDEKIyAxNyAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbXN0dWJzLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zQVdyaXRhYmxlU3RyaW5nLmgiIDEKIyAxOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL2RvbXN0dWJzLmgiIDIKaW5saW5lIFBSQm9vbCBET01TdHJpbmdJc051bGwoY29uc3QgbnNB
UmVhZGFibGVTdHJpbmcmIGFTdHJpbmcpCnsKCiAgcmV0dXJuIDA7Cn0KaW5saW5lIHZvaWQgU2V0
RE9NU3RyaW5nVG9OdWxsKG5zQVdyaXRhYmxlU3RyaW5nJiBhU3RyaW5nKQp7CiAgYVN0cmluZy5U
cnVuY2F0ZSgpOwoKfQp0eXBlZGVmIFBSVWludDY0IERPTVRpbWVTdGFtcDsKCmNsYXNzIG5zSURP
TUF0dHI7CgpjbGFzcyBuc0lET01DREFUQVNlY3Rpb247CgpjbGFzcyBuc0lET01DaGFyYWN0ZXJE
YXRhOwoKY2xhc3MgbnNJRE9NQ29tbWVudDsKCmNsYXNzIG5zSURPTURPTUltcGxlbWVudGF0aW9u
OwoKY2xhc3MgbnNJRE9NRG9jdW1lbnQ7CgpjbGFzcyBuc0lET01Eb2N1bWVudEZyYWdtZW50OwoK
Y2xhc3MgbnNJRE9NRG9jdW1lbnRUeXBlOwoKY2xhc3MgbnNJRE9NRWxlbWVudDsKCmNsYXNzIG5z
SURPTUVudGl0eTsKCmNsYXNzIG5zSURPTUVudGl0eVJlZmVyZW5jZTsKCmNsYXNzIG5zSURPTU5T
RG9jdW1lbnQ7CgpjbGFzcyBuc0lET01OYW1lZE5vZGVNYXA7CgpjbGFzcyBuc0lET01Ob2RlOwoK
Y2xhc3MgbnNJRE9NTm9kZUxpc3Q7CgpjbGFzcyBuc0lET01Ob3RhdGlvbjsKCmNsYXNzIG5zSURP
TVByb2Nlc3NpbmdJbnN0cnVjdGlvbjsKCmNsYXNzIG5zSURPTVRleHQ7CgpjbGFzcyBET01FeGNl
cHRpb247CgpjbGFzcyBuc0lET01TdHlsZVNoZWV0TGlzdDsKCmNsYXNzIG5zSURPTUxpbmtTdHls
ZTsKCmNsYXNzIG5zSURPTVN0eWxlU2hlZXQ7CgpjbGFzcyBuc0lET01NZWRpYUxpc3Q7CgpjbGFz
cyBuc0lET01BYnN0cmFjdFZpZXc7CgpjbGFzcyBuc0lET01Eb2N1bWVudFZpZXc7CgpjbGFzcyBu
c0lET01XaW5kb3c7CgpjbGFzcyBuc0lET01XaW5kb3dJbnRlcm5hbDsKCmNsYXNzIG5zSURPTVdp
bmRvd0NvbGxlY3Rpb247CgpjbGFzcyBuc0lET01QbHVnaW47CgpjbGFzcyBuc0lET01QbHVnaW5B
cnJheTsKCmNsYXNzIG5zSURPTU1pbWVUeXBlOwoKY2xhc3MgbnNJRE9NTWltZVR5cGVBcnJheTsK
CmNsYXNzIG5zSURPTUJhclByb3A7CgpjbGFzcyBuc0lET01OYXZpZ2F0b3I7CgpjbGFzcyBuc0lE
T01TY3JlZW47CgpjbGFzcyBuc0lET01IaXN0b3J5OwoKY2xhc3MgbnNJRE9NRXZlbnQ7CgpjbGFz
cyBuc0lET01FdmVudFRhcmdldDsKCmNsYXNzIG5zSURPTUV2ZW50TGlzdGVuZXI7CgpjbGFzcyBu
c0lET01IVE1MRWxlbWVudDsKCmNsYXNzIG5zSURPTUhUTUxGb3JtRWxlbWVudDsKCmNsYXNzIG5z
SURPTUhUTUxDb2xsZWN0aW9uOwoKY2xhc3MgbnNJRE9NQ1NTVmFsdWU7CgpjbGFzcyBuc0lET01D
U1NQcmltaXRpdmVWYWx1ZTsKCmNsYXNzIG5zSURPTUNTU1J1bGU7CgpjbGFzcyBuc0lET01DU1NS
dWxlTGlzdDsKCmNsYXNzIG5zSURPTUNTU1N0eWxlU2hlZXQ7CgpjbGFzcyBuc0lET01DU1NTdHls
ZURlY2xhcmF0aW9uOwoKY2xhc3MgbnNJRE9NQ291bnRlcjsKCmNsYXNzIG5zSURPTVJlY3Q7Cgpj
bGFzcyBuc0lET01SR0JDb2xvcjsKCmNsYXNzIG5zSURPTUNTU1N0eWxlUnVsZTsKCmNsYXNzIG5z
SURPTUNTU1N0eWxlUnVsZUNvbGxlY3Rpb247CgpjbGFzcyBuc0lET01IVE1MVGFibGVDYXB0aW9u
RWxlbWVudDsKCmNsYXNzIG5zSURPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OwoKY2xhc3MgbnNJ
RE9NUmFuZ2U7CgpjbGFzcyBuc0lET01DUk1GT2JqZWN0OwoKY2xhc3MgbnNJRE9NQ3J5cHRvOwoK
Y2xhc3MgbnNJRE9NUGtjczExOwojIDExICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9N
RXZlbnQuaCIgMgoKCgoKCgpjbGFzcyBuc0lET01FdmVudFRhcmdldDsKIyAyNyAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSURPTUV2ZW50LmgiCmNsYXNzIG5zSURPTUV2ZW50IDogcHVibGlj
IG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7
c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2NmI3YjgwLCAweGZmNDYsIDB4YmQ5NywgeyAw
eDAwLCAweDgwLCAweDVmLCAweDhhLCAweGUzLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4g
aWlkO30KCiAgZW51bSB7IENBUFRVUklOR19QSEFTRSA9IDFVIH07CgogIGVudW0geyBBVF9UQVJH
RVQgPSAyVSB9OwoKICBlbnVtIHsgQlVCQkxJTkdfUEhBU0UgPSAzVSB9OwoKICBlbnVtIHsgTU9V
U0VET1dOID0gMSB9OwoKICBlbnVtIHsgTU9VU0VVUCA9IDIgfTsKCiAgZW51bSB7IE1PVVNFT1ZF
UiA9IDQgfTsKCiAgZW51bSB7IE1PVVNFT1VUID0gOCB9OwoKICBlbnVtIHsgTU9VU0VNT1ZFID0g
MTYgfTsKCiAgZW51bSB7IE1PVVNFRFJBRyA9IDMyIH07CgogIGVudW0geyBDTElDSyA9IDY0IH07
CgogIGVudW0geyBEQkxDTElDSyA9IDEyOCB9OwoKICBlbnVtIHsgS0VZRE9XTiA9IDI1NiB9OwoK
ICBlbnVtIHsgS0VZVVAgPSA1MTIgfTsKCiAgZW51bSB7IEtFWVBSRVNTID0gMTAyNCB9OwoKICBl
bnVtIHsgRFJBR0RST1AgPSAyMDQ4IH07CgogIGVudW0geyBGT0NVUyA9IDQwOTYgfTsKCiAgZW51
bSB7IEJMVVIgPSA4MTkyIH07CgogIGVudW0geyBTRUxFQ1QgPSAxNjM4NCB9OwoKICBlbnVtIHsg
Q0hBTkdFID0gMzI3NjggfTsKCiAgZW51bSB7IFJFU0VUID0gNjU1MzYgfTsKCiAgZW51bSB7IFNV
Qk1JVCA9IDEzMTA3MiB9OwoKICBlbnVtIHsgU0NST0xMID0gMjYyMTQ0IH07CgogIGVudW0geyBM
T0FEID0gNTI0Mjg4IH07CgogIGVudW0geyBVTkxPQUQgPSAxMDQ4NTc2IH07CgogIGVudW0geyBY
RkVSX0RPTkUgPSAyMDk3MTUyIH07CgogIGVudW0geyBBQk9SVCA9IDQxOTQzMDQgfTsKCiAgZW51
bSB7IEVSUk9SID0gODM4ODYwOCB9OwoKICBlbnVtIHsgTE9DQVRFID0gMTY3NzcyMTYgfTsKCiAg
ZW51bSB7IE1PVkUgPSAzMzU1NDQzMiB9OwoKICBlbnVtIHsgUkVTSVpFID0gNjcxMDg4NjQgfTsK
CiAgZW51bSB7IEZPUldBUkQgPSAxMzQyMTc3MjggfTsKCiAgZW51bSB7IEhFTFAgPSAyNjg0MzU0
NTYgfTsKCiAgZW51bSB7IEJBQ0sgPSA1MzY4NzA5MTIgfTsKCiAgZW51bSB7IFRFWFQgPSAxMDcz
NzQxODI0IH07CgogIGVudW0geyBBTFRfTUFTSyA9IDEgfTsKCiAgZW51bSB7IENPTlRST0xfTUFT
SyA9IDIgfTsKCiAgZW51bSB7IFNISUZUX01BU0sgPSA0IH07CgogIGVudW0geyBNRVRBX01BU0sg
PSA4IH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR5cGUobnNBV3JpdGFibGVTdHJpbmcgJiBh
VHlwZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUYXJnZXQobnNJRE9NRXZlbnRUYXJn
ZXQgKiAqYVRhcmdldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDdXJyZW50VGFyZ2V0
KG5zSURPTUV2ZW50VGFyZ2V0ICogKmFDdXJyZW50VGFyZ2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldE9yaWdpbmFsVGFyZ2V0KG5zSURPTUV2ZW50VGFyZ2V0ICogKmFPcmlnaW5hbFRh
cmdldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFdmVudFBoYXNlKFBSVWludDE2ICph
RXZlbnRQaGFzZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCdWJibGVzKFBSQm9vbCAq
YUJ1YmJsZXMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2FuY2VsYWJsZShQUkJvb2wg
KmFDYW5jZWxhYmxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRpbWVTdGFtcChET01U
aW1lU3RhbXAgKmFUaW1lU3RhbXApID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3RvcFByb3Bh
Z2F0aW9uKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUHJldmVudEJ1YmJsZSh2b2lk
KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFByZXZlbnRDYXB0dXJlKHZvaWQpID0gMDsKCgog
IHZpcnR1YWwgbnNyZXN1bHQgUHJldmVudERlZmF1bHQodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBJbml0RXZlbnQoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBldmVudFR5cGVBcmcs
IFBSQm9vbCBjYW5CdWJibGVBcmcsIFBSQm9vbCBjYW5jZWxhYmxlQXJnKSA9IDA7Cgp9OwojIDEx
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NVUlFdmVudC5oIiAyCiMgMjUgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01VSUV2ZW50LmgiCmNsYXNzIG5zSURPTVVJRXZlbnQg
OiBwdWJsaWMgbnNJRE9NRXZlbnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl
dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwYzMsIDB4MTViMywgMHgx
MWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07
IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWaWV3KG5zSURPTUFic3RyYWN0
VmlldyAqICphVmlldykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZXRhaWwoUFJJbnQz
MiAqYURldGFpbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0VUlFdmVudChjb25zdCBu
c0FSZWFkYWJsZVN0cmluZyAmIHR5cGVBcmcsIFBSQm9vbCBjYW5CdWJibGVBcmcsIFBSQm9vbCBj
YW5jZWxhYmxlQXJnLCBuc0lET01BYnN0cmFjdFZpZXcgKnZpZXdBcmcsIFBSSW50MzIgZGV0YWls
QXJnKSA9IDA7Cgp9OwojIDExICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NS2V5RXZl
bnQuaCIgMgojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NS2V5RXZlbnQuaCIK
Y2xhc3MgbnNJRE9NS2V5RXZlbnQgOiBwdWJsaWMgbnNJRE9NVUlFdmVudCB7CiBwdWJsaWM6Cgog
IHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7
MHgwMjhlMGU2ZSwgMHg4YjAxLCAweDExZDMsIHsgMHhhYSwgMHhlNywgMHgwMCwgMHgxMCwgMHg4
MywgMHg4YSwgMHgzMSwgMHgyMyB9fTsgcmV0dXJuIGlpZDt9CgogIGVudW0geyBET01fVktfQ0FO
Q0VMID0gM1UgfTsKCiAgZW51bSB7IERPTV9WS19CQUNLX1NQQUNFID0gOFUgfTsKCiAgZW51bSB7
IERPTV9WS19UQUIgPSA5VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0NMRUFSID0gMTJVIH07CgogIGVu
dW0geyBET01fVktfUkVUVVJOID0gMTNVIH07CgogIGVudW0geyBET01fVktfRU5URVIgPSAxNFUg
fTsKCiAgZW51bSB7IERPTV9WS19TSElGVCA9IDE2VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0NPTlRS
T0wgPSAxN1UgfTsKCiAgZW51bSB7IERPTV9WS19BTFQgPSAxOFUgfTsKCiAgZW51bSB7IERPTV9W
S19QQVVTRSA9IDE5VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0NBUFNfTE9DSyA9IDIwVSB9OwoKICBl
bnVtIHsgRE9NX1ZLX0VTQ0FQRSA9IDI3VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1NQQUNFID0gMzJV
IH07CgogIGVudW0geyBET01fVktfUEFHRV9VUCA9IDMzVSB9OwoKICBlbnVtIHsgRE9NX1ZLX1BB
R0VfRE9XTiA9IDM0VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0VORCA9IDM1VSB9OwoKICBlbnVtIHsg
RE9NX1ZLX0hPTUUgPSAzNlUgfTsKCiAgZW51bSB7IERPTV9WS19MRUZUID0gMzdVIH07CgogIGVu
dW0geyBET01fVktfVVAgPSAzOFUgfTsKCiAgZW51bSB7IERPTV9WS19SSUdIVCA9IDM5VSB9OwoK
ICBlbnVtIHsgRE9NX1ZLX0RPV04gPSA0MFUgfTsKCiAgZW51bSB7IERPTV9WS19QUklOVFNDUkVF
TiA9IDQ0VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0lOU0VSVCA9IDQ1VSB9OwoKICBlbnVtIHsgRE9N
X1ZLX0RFTEVURSA9IDQ2VSB9OwoKICBlbnVtIHsgRE9NX1ZLXzAgPSA0OFUgfTsKCiAgZW51bSB7
IERPTV9WS18xID0gNDlVIH07CgogIGVudW0geyBET01fVktfMiA9IDUwVSB9OwoKICBlbnVtIHsg
RE9NX1ZLXzMgPSA1MVUgfTsKCiAgZW51bSB7IERPTV9WS180ID0gNTJVIH07CgogIGVudW0geyBE
T01fVktfNSA9IDUzVSB9OwoKICBlbnVtIHsgRE9NX1ZLXzYgPSA1NFUgfTsKCiAgZW51bSB7IERP
TV9WS183ID0gNTVVIH07CgogIGVudW0geyBET01fVktfOCA9IDU2VSB9OwoKICBlbnVtIHsgRE9N
X1ZLXzkgPSA1N1UgfTsKCiAgZW51bSB7IERPTV9WS19TRU1JQ09MT04gPSA1OVUgfTsKCiAgZW51
bSB7IERPTV9WS19FUVVBTFMgPSA2MVUgfTsKCiAgZW51bSB7IERPTV9WS19BID0gNjVVIH07Cgog
IGVudW0geyBET01fVktfQiA9IDY2VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0MgPSA2N1UgfTsKCiAg
ZW51bSB7IERPTV9WS19EID0gNjhVIH07CgogIGVudW0geyBET01fVktfRSA9IDY5VSB9OwoKICBl
bnVtIHsgRE9NX1ZLX0YgPSA3MFUgfTsKCiAgZW51bSB7IERPTV9WS19HID0gNzFVIH07CgogIGVu
dW0geyBET01fVktfSCA9IDcyVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0kgPSA3M1UgfTsKCiAgZW51
bSB7IERPTV9WS19KID0gNzRVIH07CgogIGVudW0geyBET01fVktfSyA9IDc1VSB9OwoKICBlbnVt
IHsgRE9NX1ZLX0wgPSA3NlUgfTsKCiAgZW51bSB7IERPTV9WS19NID0gNzdVIH07CgogIGVudW0g
eyBET01fVktfTiA9IDc4VSB9OwoKICBlbnVtIHsgRE9NX1ZLX08gPSA3OVUgfTsKCiAgZW51bSB7
IERPTV9WS19QID0gODBVIH07CgogIGVudW0geyBET01fVktfUSA9IDgxVSB9OwoKICBlbnVtIHsg
RE9NX1ZLX1IgPSA4MlUgfTsKCiAgZW51bSB7IERPTV9WS19TID0gODNVIH07CgogIGVudW0geyBE
T01fVktfVCA9IDg0VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1UgPSA4NVUgfTsKCiAgZW51bSB7IERP
TV9WS19WID0gODZVIH07CgogIGVudW0geyBET01fVktfVyA9IDg3VSB9OwoKICBlbnVtIHsgRE9N
X1ZLX1ggPSA4OFUgfTsKCiAgZW51bSB7IERPTV9WS19ZID0gODlVIH07CgogIGVudW0geyBET01f
VktfWiA9IDkwVSB9OwoKICBlbnVtIHsgRE9NX1ZLX05VTVBBRDAgPSA5NlUgfTsKCiAgZW51bSB7
IERPTV9WS19OVU1QQUQxID0gOTdVIH07CgogIGVudW0geyBET01fVktfTlVNUEFEMiA9IDk4VSB9
OwoKICBlbnVtIHsgRE9NX1ZLX05VTVBBRDMgPSA5OVUgfTsKCiAgZW51bSB7IERPTV9WS19OVU1Q
QUQ0ID0gMTAwVSB9OwoKICBlbnVtIHsgRE9NX1ZLX05VTVBBRDUgPSAxMDFVIH07CgogIGVudW0g
eyBET01fVktfTlVNUEFENiA9IDEwMlUgfTsKCiAgZW51bSB7IERPTV9WS19OVU1QQUQ3ID0gMTAz
VSB9OwoKICBlbnVtIHsgRE9NX1ZLX05VTVBBRDggPSAxMDRVIH07CgogIGVudW0geyBET01fVktf
TlVNUEFEOSA9IDEwNVUgfTsKCiAgZW51bSB7IERPTV9WS19NVUxUSVBMWSA9IDEwNlUgfTsKCiAg
ZW51bSB7IERPTV9WS19BREQgPSAxMDdVIH07CgogIGVudW0geyBET01fVktfU0VQQVJBVE9SID0g
MTA4VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1NVQlRSQUNUID0gMTA5VSB9OwoKICBlbnVtIHsgRE9N
X1ZLX0RFQ0lNQUwgPSAxMTBVIH07CgogIGVudW0geyBET01fVktfRElWSURFID0gMTExVSB9OwoK
ICBlbnVtIHsgRE9NX1ZLX0YxID0gMTEyVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0YyID0gMTEzVSB9
OwoKICBlbnVtIHsgRE9NX1ZLX0YzID0gMTE0VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0Y0ID0gMTE1
VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0Y1ID0gMTE2VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0Y2ID0g
MTE3VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0Y3ID0gMTE4VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0Y4
ID0gMTE5VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0Y5ID0gMTIwVSB9OwoKICBlbnVtIHsgRE9NX1ZL
X0YxMCA9IDEyMVUgfTsKCiAgZW51bSB7IERPTV9WS19GMTEgPSAxMjJVIH07CgogIGVudW0geyBE
T01fVktfRjEyID0gMTIzVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0YxMyA9IDEyNFUgfTsKCiAgZW51
bSB7IERPTV9WS19GMTQgPSAxMjVVIH07CgogIGVudW0geyBET01fVktfRjE1ID0gMTI2VSB9OwoK
ICBlbnVtIHsgRE9NX1ZLX0YxNiA9IDEyN1UgfTsKCiAgZW51bSB7IERPTV9WS19GMTcgPSAxMjhV
IH07CgogIGVudW0geyBET01fVktfRjE4ID0gMTI5VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0YxOSA9
IDEzMFUgfTsKCiAgZW51bSB7IERPTV9WS19GMjAgPSAxMzFVIH07CgogIGVudW0geyBET01fVktf
RjIxID0gMTMyVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0YyMiA9IDEzM1UgfTsKCiAgZW51bSB7IERP
TV9WS19GMjMgPSAxMzRVIH07CgogIGVudW0geyBET01fVktfRjI0ID0gMTM1VSB9OwoKICBlbnVt
IHsgRE9NX1ZLX05VTV9MT0NLID0gMTQ0VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1NDUk9MTF9MT0NL
ID0gMTQ1VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0NPTU1BID0gMTg4VSB9OwoKICBlbnVtIHsgRE9N
X1ZLX1BFUklPRCA9IDE5MFUgfTsKCiAgZW51bSB7IERPTV9WS19TTEFTSCA9IDE5MVUgfTsKCiAg
ZW51bSB7IERPTV9WS19CQUNLX1FVT1RFID0gMTkyVSB9OwoKICBlbnVtIHsgRE9NX1ZLX09QRU5f
QlJBQ0tFVCA9IDIxOVUgfTsKCiAgZW51bSB7IERPTV9WS19CQUNLX1NMQVNIID0gMjIwVSB9OwoK
ICBlbnVtIHsgRE9NX1ZLX0NMT1NFX0JSQUNLRVQgPSAyMjFVIH07CgogIGVudW0geyBET01fVktf
UVVPVEUgPSAyMjJVIH07CgogIGVudW0geyBET01fVktfTUVUQSA9IDIyNFUgfTsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0Q2hhckNvZGUoUFJVaW50MzIgKmFDaGFyQ29kZSkgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRLZXlDb2RlKFBSVWludDMyICphS2V5Q29kZSkgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRBbHRLZXkoUFJCb29sICphQWx0S2V5KSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldEN0cmxLZXkoUFJCb29sICphQ3RybEtleSkgPSAwOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRTaGlmdEtleShQUkJvb2wgKmFTaGlmdEtleSkgPSAwOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRNZXRhS2V5KFBSQm9vbCAqYU1ldGFLZXkpID0gMDsKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgSW5pdEtleUV2ZW50KGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgdHlwZUFyZywgUFJC
b29sIGNhbkJ1YmJsZUFyZywgUFJCb29sIGNhbmNlbGFibGVBcmcsIG5zSURPTUFic3RyYWN0Vmll
dyAqdmlld0FyZywgUFJCb29sIGN0cmxLZXlBcmcsIFBSQm9vbCBhbHRLZXlBcmcsIFBSQm9vbCBz
aGlmdEtleUFyZywgUFJCb29sIG1ldGFLZXlBcmcsIFBSVWludDMyIGtleUNvZGVBcmcsIFBSVWlu
dDMyIGNoYXJDb2RlQXJnKSA9IDA7Cgp9OwojIDM3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNHVUlFdmVudC5oIiAyCgpjbGFzcyBuc0lSZW5kZXJpbmdDb250ZXh0OwpjbGFzcyBuc0lSZWdp
b247CmNsYXNzIG5zSVdpZGdldDsKY2xhc3MgbnNJTWVudUl0ZW07CmNsYXNzIG5zSUFjY2Vzc2li
bGU7CmNsYXNzIG5zSUNvbnRlbnQ7CgoKCgoKZW51bSBuc0V2ZW50U3RhdHVzIHsKCiAgbnNFdmVu
dFN0YXR1c19lSWdub3JlLAoKICBuc0V2ZW50U3RhdHVzX2VDb25zdW1lTm9EZWZhdWx0LAoKICBu
c0V2ZW50U3RhdHVzX2VDb25zdW1lRG9EZWZhdWx0Cn07CgoKCgplbnVtIG5zU2l6ZU1vZGUgewog
IG5zU2l6ZU1vZGVfTm9ybWFsID0gMCwKICBuc1NpemVNb2RlX01pbmltaXplZCwKICBuc1NpemVN
b2RlX01heGltaXplZAp9OwoKCgoKZW51bSBuc1dpbmRvd1ogewogIG5zV2luZG93WlRvcCA9IDAs
CiAgbnNXaW5kb3daQm90dG9tLAogIG5zV2luZG93WlJlbGF0aXZlCn07CgoKCgoKc3RydWN0IG5z
RXZlbnQgewoKICBQUlVpbnQ4IGV2ZW50U3RydWN0VHlwZTsKCiAgUFJVaW50MzIgbWVzc2FnZTsK
CiAgbnNQb2ludCBwb2ludDsKCiAgbnNQb2ludCByZWZQb2ludDsKCiAgUFJVaW50MzIgdGltZTsK
CiAgUFJVaW50MzIgZmxhZ3M7CgogIFBSVWludDMyIGludGVybmFsQXBwRmxhZ3M7CgogIG5zSGFz
aEtleSogdXNlclR5cGU7Cn07CgoKCgoKc3RydWN0IG5zR1VJRXZlbnQgOiBwdWJsaWMgbnNFdmVu
dCB7CgogIG5zSVdpZGdldCogd2lkZ2V0OwoKICB2b2lkKiBuYXRpdmVNc2c7Cn07CgoKCgoKc3Ry
dWN0IG5zU2l6ZUV2ZW50IDogcHVibGljIG5zR1VJRXZlbnQgewoKICAgIG5zUmVjdCAqd2luZG93
U2l6ZTsKCiAgICBQUkludDMyIG1XaW5XaWR0aDsKCiAgICBQUkludDMyIG1XaW5IZWlnaHQ7Cn07
CgoKCgoKc3RydWN0IG5zU2l6ZU1vZGVFdmVudCA6IHB1YmxpYyBuc0dVSUV2ZW50IHsKCiAgICBu
c1NpemVNb2RlIG1TaXplTW9kZTsKfTsKCgoKCgpzdHJ1Y3QgbnNaTGV2ZWxFdmVudCA6IHB1Ymxp
YyBuc0dVSUV2ZW50IHsKCiAgbnNXaW5kb3daIG1QbGFjZW1lbnQ7CiAgbnNJV2lkZ2V0ICptUmVx
QmVsb3csCiAgICAgICAgICAgICptQWN0dWFsQmVsb3c7CiAgUFJCb29sIG1JbW1lZGlhdGUsCiAg
ICAgICAgICAgICBtQWRqdXN0ZWQ7Cn07CgoKCgoKc3RydWN0IG5zUGFpbnRFdmVudCA6IHB1Ymxp
YyBuc0dVSUV2ZW50IHsKCiAgICBuc0lSZW5kZXJpbmdDb250ZXh0ICpyZW5kZXJpbmdDb250ZXh0
OwoKICAgIG5zSVJlZ2lvbiAqcmVnaW9uOwoKICAgIG5zUmVjdCAqcmVjdDsKfTsKCgoKCgpzdHJ1
Y3QgbnNTY3JvbGxiYXJFdmVudCA6IHB1YmxpYyBuc0dVSUV2ZW50IHsKCiAgICBQUlVpbnQzMiBw
b3NpdGlvbjsKfTsKCnN0cnVjdCBuc1Njcm9sbFBvcnRFdmVudCA6IHB1YmxpYyBuc0dVSUV2ZW50
IHsKICBlbnVtIG9yaWVudFR5cGUgewogICAgdmVydGljYWwgPSAwLAogICAgaG9yaXpvbnRhbCA9
IDEsCiAgICBib3RoID0gMgogIH07CgogIG9yaWVudFR5cGUgb3JpZW50Owp9OwoKc3RydWN0IG5z
SW5wdXRFdmVudCA6IHB1YmxpYyBuc0dVSUV2ZW50IHsKCiAgICBQUkJvb2wgaXNTaGlmdDsKCiAg
ICBQUkJvb2wgaXNDb250cm9sOwoKICAgIFBSQm9vbCBpc0FsdDsKCgogICAgUFJCb29sIGlzTWV0
YTsKfTsKCgoKCgpzdHJ1Y3QgbnNNb3VzZUV2ZW50IDogcHVibGljIG5zSW5wdXRFdmVudCB7Cgog
ICAgUFJVaW50MzIgY2xpY2tDb3VudDsKCgogICAgUFJCb29sIGFjY2VwdEFjdGl2YXRpb247Cn07
CgoKCgoKc3RydWN0IG5zQWNjZXNzaWJsZUV2ZW50IDogcHVibGljIG5zSW5wdXRFdmVudCB7CiAg
ICBuc0lBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlOwp9OwoKCgoKCnN0cnVjdCBuc0tleUV2ZW50IDog
cHVibGljIG5zSW5wdXRFdmVudCB7CgogICAgUFJVaW50MzIga2V5Q29kZTsKCiAgICBQUlVpbnQz
MiBjaGFyQ29kZTsKCiAgICBQUkJvb2wgaXNDaGFyOwp9OwoKCgoKc3RydWN0IG5zVGV4dFJhbmdl
IHsKICAgICAgICBQUlVpbnQzMiBtU3RhcnRPZmZzZXQ7CiAgICAgICAgUFJVaW50MzIgbUVuZE9m
ZnNldDsKICAgICAgICBQUlVpbnQzMiBtUmFuZ2VUeXBlOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgbnNU
ZXh0UmFuZ2UgbnNUZXh0UmFuZ2U7CnR5cGVkZWYgbnNUZXh0UmFuZ2UqIG5zVGV4dFJhbmdlQXJy
YXk7CgpzdHJ1Y3QgbnNUZXh0RXZlbnRSZXBseSB7CiAgICAgICAgbnNSZWN0IG1DdXJzb3JQb3Np
dGlvbjsKICAgICAgICBQUkJvb2wgbUN1cnNvcklzQ29sbGFwc2VkOwp9OwoKdHlwZWRlZiBzdHJ1
Y3QgbnNUZXh0RXZlbnRSZXBseSBuc1RleHRFdmVudFJlcGx5OwoKc3RydWN0IG5zVGV4dEV2ZW50
IDogcHVibGljIG5zSW5wdXRFdmVudCB7CiAgICAgICAgUFJVbmljaGFyKiB0aGVUZXh0OwogICAg
ICAgIG5zVGV4dEV2ZW50UmVwbHkgdGhlUmVwbHk7CiAgICAgICAgUFJVaW50MzIgcmFuZ2VDb3Vu
dDsKICAgICAgICBuc1RleHRSYW5nZUFycmF5IHJhbmdlQXJyYXk7CiAgUFJCb29sIGlzQ2hhcjsK
fTsKCnN0cnVjdCBuc0NvbXBvc2l0aW9uRXZlbnQgOiBwdWJsaWMgbnNJbnB1dEV2ZW50IHsKICAg
ICAgICBQUlVpbnQzMiBjb21wb3NpdGlvbk1lc3NhZ2U7CiAgICAgICAgbnNUZXh0RXZlbnRSZXBs
eSB0aGVSZXBseTsKfTsKCnN0cnVjdCBuc01vdXNlU2Nyb2xsRXZlbnQgOiBwdWJsaWMgbnNJbnB1
dEV2ZW50IHsKCiAgZW51bSBuc01vdXNlU2Nyb2xsRmxhZ3MgewogICAga0lzRnVsbFBhZ2UgPSAx
IDw8IDAsCiAgICBrSXNWZXJ0aWNhbCA9IDEgPDwgMSwKICAgIGtJc0hvcml6b250YWwgPSAxIDw8
IDIKICB9OwoKICBQUkludDMyIHNjcm9sbEZsYWdzOwogIFBSSW50MzIgZGVsdGE7Cn07CgpzdHJ1
Y3QgbnNSZWNvbnZlcnNpb25FdmVudFJlcGx5IHsKICBQUlVuaWNoYXIgKm1SZWNvbnZlcnNpb25T
dHJpbmc7Cn07CgpzdHJ1Y3QgbnNSZWNvbnZlcnNpb25FdmVudCA6IHB1YmxpYyBuc0lucHV0RXZl
bnQgewogIG5zUmVjb252ZXJzaW9uRXZlbnRSZXBseSB0aGVSZXBseTsKfTsKIyAyODMgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0dVSUV2ZW50LmgiCnN0cnVjdCBuc01lbnVFdmVudCA6IHB1
YmxpYyBuc0dVSUV2ZW50IHsKICBuc0lNZW51SXRlbSAqIG1NZW51SXRlbTsKICBQUlVpbnQzMiBt
Q29tbWFuZDsKfTsKIyAyOTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0dVSUV2ZW50Lmgi
CnN0cnVjdCBuc0Zvcm1FdmVudCA6IHB1YmxpYyBuc0V2ZW50IHsKICBuc0lDb250ZW50ICpvcmln
aW5hdG9yOwp9OwoKCgoKc3RydWN0IG5zRm9jdXNFdmVudCA6IHB1YmxpYyBuc0dVSUV2ZW50IHsK
ICBQUkJvb2wgaXNNb3pXaW5kb3dUYWtpbmdGb2N1czsKfTsKCgoKCgplbnVtIG5zRHJhZ0Ryb3BF
dmVudFN0YXR1cyB7CgogIG5zRHJhZ0Ryb3BFdmVudFN0YXR1c19lRHJhZ0VudGVyZWQsCgogIG5z
RHJhZ0Ryb3BFdmVudFN0YXR1c19lRHJhZ0V4aXRlZCwKCiAgbnNEcmFnRHJvcEV2ZW50U3RhdHVz
X2VEcm9wCn07CiMgMjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiIDIK
IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBV3JpdGFibGVTdHJpbmcuaCIgMQojIDMw
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29udGVudC5oIiAyCgoKY2xhc3MgbnNJQXRv
bTsKY2xhc3MgbnNJRG9jdW1lbnQ7CmNsYXNzIG5zSVByZXNDb250ZXh0OwpjbGFzcyBuc1ZvaWRB
cnJheTsKY2xhc3MgbnNJRE9NRXZlbnQ7CmNsYXNzIG5zSUNvbnRlbnQ7CmNsYXNzIG5zSVN1cHBv
cnRzQXJyYXk7CmNsYXNzIG5zSURPTVJhbmdlOwpjbGFzcyBuc0lTaXplT2ZIYW5kbGVyOwpjbGFz
cyBuc0lOb2RlSW5mbzsKY2xhc3MgbnNJRXZlbnRMaXN0ZW5lck1hbmFnZXI7CiMgNTEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiCmNsYXNzIG5zSUNvbnRlbnQgOiBwdWJs
aWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7
c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHg3ODAzMDIyMCwgMHg5NDQ3LCAweDExZDEsIHsw
eDkzLCAweDIzLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyfSB9OyByZXR1cm4g
aWlkO30KCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREb2N1bWVudChuc0lEb2N1bWVudComIGFSZXN1
bHQpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREb2N1bWVudChuc0lEb2N1bWVu
dCogYURvY3VtZW50LCBQUkJvb2wgYURlZXAsIFBSQm9vbCBhQ29tcGlsZUV2ZW50SGFuZGxlcnMp
ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnQobnNJQ29udGVudComIGFSZXN1bHQp
IGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQYXJlbnQobnNJQ29udGVudCogYVBh
cmVudCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWVTcGFjZUlEKFBSSW50MzIm
IGFSZXN1bHQpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUYWcobnNJQXRvbSom
IGFSZXN1bHQpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROb2RlSW5mbyhuc0lO
b2RlSW5mbyomIGFSZXN1bHQpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBDYW5Db250
YWluQ2hpbGRyZW4oUFJCb29sJiBhUmVzdWx0KSBjb25zdCA9IDA7CgogIHZpcnR1YWwgbnNyZXN1
bHQgQ2hpbGRDb3VudChQUkludDMyJiBhUmVzdWx0KSBjb25zdCA9IDA7CgogIHZpcnR1YWwgbnNy
ZXN1bHQgQ2hpbGRBdChQUkludDMyIGFJbmRleCwgbnNJQ29udGVudComIGFSZXN1bHQpIGNvbnN0
ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbmRleE9mKG5zSUNvbnRlbnQqIGFQb3NzaWJsZUNo
aWxkLCBQUkludDMyJiBhSW5kZXgpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnNl
cnRDaGlsZEF0KG5zSUNvbnRlbnQqIGFLaWQsIFBSSW50MzIgYUluZGV4LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUkJvb2wgYU5vdGlmeSwgUFJCb29sIGFEZWVwU2V0RG9jdW1lbnQpID0g
MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXBsYWNlQ2hpbGRBdChuc0lDb250ZW50KiBhS2lkLCBQ
UkludDMyIGFJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhTm90aWZ5
LCBQUkJvb2wgYURlZXBTZXREb2N1bWVudCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEFwcGVu
ZENoaWxkVG8obnNJQ29udGVudCogYUtpZCwgUFJCb29sIGFOb3RpZnksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBSQm9vbCBhRGVlcFNldERvY3VtZW50KSA9IDA7CgogIHZpcnR1YWwgbnNy
ZXN1bHQgUmVtb3ZlQ2hpbGRBdChQUkludDMyIGFJbmRleCwgUFJCb29sIGFOb3RpZnkpID0gMDsK
IyAxMDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiCiAgdmlydHVhbCBu
c3Jlc3VsdCBOb3JtYWxpemVBdHRyaWJ1dGVTdHJpbmcoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcm
IGFTdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJTm9kZUluZm8q
JiBhTm9kZUluZm8pID0gMDsKIyAxMTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb250
ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBdHRyaWJ1dGUoUFJJbnQzMiBhTmFtZVNwYWNl
SUQsIG5zSUF0b20qIGFOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVJl
YWRhYmxlU3RyaW5nJiBhVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFO
b3RpZnkpID0gMDsKIyAxMzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50Lmgi
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBdHRyaWJ1dGUobnNJTm9kZUluZm8qIGFOb2RlSW5mbywK
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVZhbHVl
LAogICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhTm90aWZ5KSA9IDA7CiMgMTU3ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0QXR0cmlidXRlKFBSSW50MzIgYU5hbWVTcGFjZUlELCBuc0lBdG9tKiBhTmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0FXcml0YWJsZVN0cmluZyYgYVJlc3VsdCkgY29uc3QgPSAw
OwojIDE4MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbnRlbnQuaCIKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldEF0dHJpYnV0ZShQUkludDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSogYU5h
bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSomIGFQcmVmaXgsIG5zQVdyaXRh
YmxlU3RyaW5nJiBhUmVzdWx0KSBjb25zdCA9IDA7CiMgMTkyICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgVW5zZXRBdHRyaWJ1dGUoUFJJ
bnQzMiBhTmFtZVNwYWNlSUQsIG5zSUF0b20qIGFBdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQUkJvb2wgYU5vdGlmeSkgPSAwOwojIDIwNCAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSUNvbnRlbnQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEF0dHJpYnV0ZU5hbWVB
dChQUkludDMyIGFJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMy
JiBhTmFtZVNwYWNlSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSom
IGFOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qJiBhUHJlZml4
KSBjb25zdCA9IDA7CiMgMjE2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29udGVudC5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0cmlidXRlQ291bnQoUFJJbnQzMiYgYUNvdW50UmVz
dWx0KSBjb25zdCA9IDA7CiMgMjMzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29udGVu
dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2l6ZU9mKG5zSVNpemVPZkhhbmRsZXIqIGFTaXplciwg
UFJVaW50MzIqIGFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IExp
c3QoRklMRSogb3V0ID0gc3Rkb3V0LCBQUkludDMyIGFJbmRlbnQgPSAwKSBjb25zdCA9IDA7CgoK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEdW1wQ29udGVudChGSUxFKiBvdXQgPSBzdGRvdXQsIFBS
SW50MzIgYUluZGVudCA9IDAsUFJCb29sIGFEdW1wQWxsPTEpIGNvbnN0ID0gMDsKIyAyNTkgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBS
YW5nZUFkZChuc0lET01SYW5nZSYgYVJhbmdlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBSYW5n
ZVJlbW92ZShuc0lET01SYW5nZSYgYVJhbmdlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRS
YW5nZUxpc3QobnNWb2lkQXJyYXkqJiBhUmVzdWx0KSBjb25zdCA9IDA7CgoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgSGFuZGxlRE9NRXZlbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zRXZlbnQqIGFFdmVudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSURPTUV2ZW50KiogYURPTUV2ZW50LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJVaW50MzIgYUZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNF
dmVudFN0YXR1cyogYUV2ZW50U3RhdHVzKSA9IDA7CiMgMjgxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udGVudElEKFBSVWlu
dDMyKiBhSUQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENvbnRlbnRJRChQUlVpbnQzMiBh
SUQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZvY3VzKG5zSVByZXNDb250ZXh0
KiBhUHJlc0NvbnRleHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZUZvY3VzKG5zSVBy
ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNl
dEJpbmRpbmdQYXJlbnQobnNJQ29udGVudCogYUNvbnRlbnQpID0gMDsKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldEJpbmRpbmdQYXJlbnQobnNJQ29udGVudCoqIGFDb250ZW50KSA9IDA7CgoKCgogIGVu
dW0gewogICAgZVRFWFQgPSAweDAwMDAwMDAxLAogICAgZUVMRU1FTlQgPSAweDAwMDAwMDAyLAog
ICAgZUhUTUwgPSAweDAwMDAwMDA0LAogICAgZUhUTUxfRk9STV9DT05UUk9MID0gMHgwMDAwMDAw
OAogIH07CgoKCgoKICB2aXJ0dWFsIFBSQm9vbCBJc0NvbnRlbnRPZlR5cGUoUFJVaW50MzIgYUZs
YWdzKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGlzdGVuZXJNYW5hZ2VyKG5zSUV2ZW50
TGlzdGVuZXJNYW5hZ2VyKiogYVJlc3VsdCkgPSAwOwp9OwojIDI2ICJuc1RleHRUcmFuc2Zvcm1l
ci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIgMQojIDI1
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKIyAxICIvdXNyL2xvY2FsL2xp
Yi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDI2
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIgMgojIDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc2xheW91dC5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lGcmFtZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRz
LmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiIDIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTaXplLmgiIDEKIyAyOSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSUZyYW1lLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNH
VUlFdmVudC5oIiAxCiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIiAy
CiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVDb25zdHMuaCIgMQojIDI1ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZUNvbnN0cy5oIgojIDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0ZvbnQuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNGb250LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgMjcg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZvbnQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0Nvb3JkLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
Rm9udC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDEKIyAy
OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRm9udC5oIiAyCgoKCgoKdHlwZWRlZiBQUkJv
b2wgKCpuc0ZvbnRGYW1pbHlFbnVtRnVuYykoY29uc3QgbnNTdHJpbmcmIGFGYW1pbHksIFBSQm9v
bCBhR2VuZXJpYywgdm9pZCAqYURhdGEpOwoKCnN0cnVjdCBuc0ZvbnQgewoKICBuc1N0cmluZyBu
YW1lOwoKCiAgUFJVaW50OCBzdHlsZTsKCgogIFBSVWludDggdmFyaWFudDsKCgogIFBSVWludDE2
IHdlaWdodDsKCgoKICBQUlVpbnQ4IGRlY29yYXRpb25zOwoKCiAgbnNjb29yZCBzaXplOwoKCiAg
bnNGb250KGNvbnN0IGNoYXIqIGFOYW1lLCBQUlVpbnQ4IGFTdHlsZSwgUFJVaW50OCBhVmFyaWFu
dCwKICAgICAgICAgUFJVaW50MTYgYVdlaWdodCwgUFJVaW50OCBhRGVjb3JhdGlvbiwgbnNjb29y
ZCBhU2l6ZSk7CgoKICBuc0ZvbnQoY29uc3QgbnNTdHJpbmcmIGFOYW1lLCBQUlVpbnQ4IGFTdHls
ZSwgUFJVaW50OCBhVmFyaWFudCwKICAgICAgICAgUFJVaW50MTYgYVdlaWdodCwgUFJVaW50OCBh
RGVjb3JhdGlvbiwgbnNjb29yZCBhU2l6ZSk7CgoKICBuc0ZvbnQoY29uc3QgbnNGb250JiBhRm9u
dCk7CgogIH5uc0ZvbnQoKTsKCiAgUFJCb29sIG9wZXJhdG9yPT0oY29uc3QgbnNGb250JiBhT3Ro
ZXIpIGNvbnN0IHsKICAgIHJldHVybiBFcXVhbHMoYU90aGVyKTsKICB9CgogIFBSQm9vbCBFcXVh
bHMoY29uc3QgbnNGb250JiBhT3RoZXIpIGNvbnN0IDsKCiAgbnNGb250JiBvcGVyYXRvcj0oY29u
c3QgbnNGb250JiBhT3RoZXIpOwoKCgoKCiAgUFJCb29sIEVudW1lcmF0ZUZhbWlsaWVzKG5zRm9u
dEZhbWlseUVudW1GdW5jIGFGdW5jLCB2b2lkKiBhRGF0YSkgY29uc3Q7CiAgdm9pZCBHZXRGaXJz
dEZhbWlseShuc1N0cmluZyYgYUZhbWlseSkgY29uc3Q7Cn07CiMgMjYgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc1N0eWxlQ29uc3RzLmgiIDIKIyAzMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSUZyYW1lLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVN0
cnVjdC5oIiAxCiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlU3RydWN0Lmgi
CmVudW0gbnNTdHlsZVN0cnVjdElEIHsKICBlU3R5bGVTdHJ1Y3RfRm9udCA9IDEsCiAgZVN0eWxl
U3RydWN0X0NvbG9yID0gMiwKICBlU3R5bGVTdHJ1Y3RfTGlzdCA9IDMsCiAgZVN0eWxlU3RydWN0
X1Bvc2l0aW9uID0gNCwKICBlU3R5bGVTdHJ1Y3RfVGV4dCA9IDUsCiAgZVN0eWxlU3RydWN0X0Rp
c3BsYXkgPSA2LAogIGVTdHlsZVN0cnVjdF9UYWJsZSA9IDcsCiAgZVN0eWxlU3RydWN0X0NvbnRl
bnQgPSA4LAogIGVTdHlsZVN0cnVjdF9Vc2VySW50ZXJmYWNlID0gOSwKICBlU3R5bGVTdHJ1Y3Rf
UHJpbnQgPSAxMCwKICBlU3R5bGVTdHJ1Y3RfTWFyZ2luID0gMTEsCiAgZVN0eWxlU3RydWN0X1Bh
ZGRpbmcgPSAxMiwKICBlU3R5bGVTdHJ1Y3RfQm9yZGVyID0gMTMsCiAgZVN0eWxlU3RydWN0X091
dGxpbmUgPSAxNCwKCiAgZVN0eWxlU3RydWN0X1hVTCA9IDE1LAogIGVTdHlsZVN0cnVjdF9NYXgg
PSBlU3R5bGVTdHJ1Y3RfWFVMLAoKCgogIGVTdHlsZVN0cnVjdF9Cb3JkZXJQYWRkaW5nU2hvcnRj
dXQgPSA5OQp9OwoKY2xhc3MgbnNJUHJlc0NvbnRleHQ7CgpzdHJ1Y3QgbnNTdHlsZVN0cnVjdCB7
Cn07CiMgMzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIiAyCiMgMSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVDb29yZC5oIiAxCiMgMjUgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc1N0eWxlQ29vcmQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNjb3JlLmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVDb29y
ZC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29vcmQuaCIgMQojIDI3ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZUNvb3JkLmgiIDIKIyAxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNDUlQuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNTdHlsZUNvb3JkLmgiIDIKY2xhc3MgbnNTdHJpbmc7CgplbnVtIG5zU3R5bGVVbml0IHsKICBl
U3R5bGVVbml0X051bGwgPSAwLAogIGVTdHlsZVVuaXRfTm9ybWFsID0gMSwKICBlU3R5bGVVbml0
X0F1dG8gPSAyLAogIGVTdHlsZVVuaXRfSW5oZXJpdCA9IDMsCiAgZVN0eWxlVW5pdF9QZXJjZW50
ID0gMTAsCiAgZVN0eWxlVW5pdF9GYWN0b3IgPSAxMSwKICBlU3R5bGVVbml0X0Nvb3JkID0gMjAs
CiAgZVN0eWxlVW5pdF9JbnRlZ2VyID0gMzAsCiAgZVN0eWxlVW5pdF9Qcm9wb3J0aW9uYWwgPSAz
MSwKICBlU3R5bGVVbml0X0VudW1lcmF0ZWQgPSAzMiwKICBlU3R5bGVVbml0X0NoYXJzID0gMzMK
fTsKCnR5cGVkZWYgdW5pb24gewogIFBSSW50MzIgbUludDsKICBmbG9hdCBtRmxvYXQ7Cn0gbnNT
dHlsZVVuaW9uOwoKY2xhc3MgbnNTdHlsZUNvb3JkIHsKcHVibGljOgogIG5zU3R5bGVDb29yZChu
c1N0eWxlVW5pdCBhVW5pdCA9IGVTdHlsZVVuaXRfTnVsbCk7CiAgbnNTdHlsZUNvb3JkKG5zY29v
cmQgYVZhbHVlKTsKICBuc1N0eWxlQ29vcmQoUFJJbnQzMiBhVmFsdWUsIG5zU3R5bGVVbml0IGFV
bml0KTsKICBuc1N0eWxlQ29vcmQoZmxvYXQgYVZhbHVlLCBuc1N0eWxlVW5pdCBhVW5pdCk7CiAg
bnNTdHlsZUNvb3JkKGNvbnN0IG5zU3R5bGVDb29yZCYgYUNvcHkpOwoKICBuc1N0eWxlQ29vcmQm
IG9wZXJhdG9yPShjb25zdCBuc1N0eWxlQ29vcmQmIGFDb3B5KTsKICBQUkJvb2wgb3BlcmF0b3I9
PShjb25zdCBuc1N0eWxlQ29vcmQmIGFPdGhlcikgY29uc3Q7CiAgUFJCb29sIG9wZXJhdG9yIT0o
Y29uc3QgbnNTdHlsZUNvb3JkJiBhT3RoZXIpIGNvbnN0OwoKICBuc1N0eWxlVW5pdCBHZXRVbml0
KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Vbml0OyB9CiAgbnNjb29yZCBHZXRDb29yZFZhbHVlKHZv
aWQpIGNvbnN0OwogIFBSSW50MzIgR2V0SW50VmFsdWUodm9pZCkgY29uc3Q7CiAgZmxvYXQgR2V0
UGVyY2VudFZhbHVlKHZvaWQpIGNvbnN0OwogIGZsb2F0IEdldEZhY3RvclZhbHVlKHZvaWQpIGNv
bnN0OwogIHZvaWQgR2V0VW5pb25WYWx1ZShuc1N0eWxlVW5pb24mIGFWYWx1ZSkgY29uc3Q7Cgog
IHZvaWQgUmVzZXQodm9pZCk7CiAgdm9pZCBTZXRDb29yZFZhbHVlKG5zY29vcmQgYVZhbHVlKTsK
ICB2b2lkIFNldEludFZhbHVlKFBSSW50MzIgYVZhbHVlLCBuc1N0eWxlVW5pdCBhVW5pdCk7CiAg
dm9pZCBTZXRQZXJjZW50VmFsdWUoZmxvYXQgYVZhbHVlKTsKICB2b2lkIFNldEZhY3RvclZhbHVl
KGZsb2F0IGFWYWx1ZSk7CiAgdm9pZCBTZXROb3JtYWxWYWx1ZSh2b2lkKTsKICB2b2lkIFNldEF1
dG9WYWx1ZSh2b2lkKTsKICB2b2lkIFNldEluaGVyaXRWYWx1ZSh2b2lkKTsKICB2b2lkIFNldFVu
aW9uVmFsdWUoY29uc3QgbnNTdHlsZVVuaW9uJiBhVmFsdWUsIG5zU3R5bGVVbml0IGFVbml0KTsK
CiAgdm9pZCBBcHBlbmRUb1N0cmluZyhuc1N0cmluZyYgYUJ1ZmZlcikgY29uc3Q7CiAgdm9pZCBU
b1N0cmluZyhuc1N0cmluZyYgYUJ1ZmZlcikgY29uc3Q7CgpwdWJsaWM6CiAgbnNTdHlsZVVuaXQg
bVVuaXQ7CiAgbnNTdHlsZVVuaW9uIG1WYWx1ZTsKfTsKCgpjbGFzcyBuc1N0eWxlU2lkZXMgewpw
dWJsaWM6CiAgbnNTdHlsZVNpZGVzKHZvaWQpOwoKCiAgUFJCb29sIG9wZXJhdG9yPT0oY29uc3Qg
bnNTdHlsZVNpZGVzJiBhT3RoZXIpIGNvbnN0OwogIFBSQm9vbCBvcGVyYXRvciE9KGNvbnN0IG5z
U3R5bGVTaWRlcyYgYU90aGVyKSBjb25zdDsKCiAgbnNTdHlsZVVuaXQgR2V0TGVmdFVuaXQodm9p
ZCkgY29uc3Q7CiAgbnNTdHlsZVVuaXQgR2V0VG9wVW5pdCh2b2lkKSBjb25zdDsKICBuc1N0eWxl
VW5pdCBHZXRSaWdodFVuaXQodm9pZCkgY29uc3Q7CiAgbnNTdHlsZVVuaXQgR2V0Qm90dG9tVW5p
dCh2b2lkKSBjb25zdDsKCiAgbnNTdHlsZUNvb3JkJiBHZXRMZWZ0KG5zU3R5bGVDb29yZCYgYUNv
b3JkKSBjb25zdDsKICBuc1N0eWxlQ29vcmQmIEdldFRvcChuc1N0eWxlQ29vcmQmIGFDb29yZCkg
Y29uc3Q7CiAgbnNTdHlsZUNvb3JkJiBHZXRSaWdodChuc1N0eWxlQ29vcmQmIGFDb29yZCkgY29u
c3Q7CiAgbnNTdHlsZUNvb3JkJiBHZXRCb3R0b20obnNTdHlsZUNvb3JkJiBhQ29vcmQpIGNvbnN0
OwoKICB2b2lkIFJlc2V0KHZvaWQpOwogIHZvaWQgU2V0TGVmdChjb25zdCBuc1N0eWxlQ29vcmQm
IGFDb29yZCk7CiAgdm9pZCBTZXRUb3AoY29uc3QgbnNTdHlsZUNvb3JkJiBhQ29vcmQpOwogIHZv
aWQgU2V0UmlnaHQoY29uc3QgbnNTdHlsZUNvb3JkJiBhQ29vcmQpOwogIHZvaWQgU2V0Qm90dG9t
KGNvbnN0IG5zU3R5bGVDb29yZCYgYUNvb3JkKTsKCiAgdm9pZCBBcHBlbmRUb1N0cmluZyhuc1N0
cmluZyYgYUJ1ZmZlcikgY29uc3Q7CiAgdm9pZCBUb1N0cmluZyhuc1N0cmluZyYgYUJ1ZmZlcikg
Y29uc3Q7Cgpwcm90ZWN0ZWQ6CiAgUFJVaW50OCBtTGVmdFVuaXQ7CiAgUFJVaW50OCBtVG9wVW5p
dDsKICBQUlVpbnQ4IG1SaWdodFVuaXQ7CiAgUFJVaW50OCBtQm90dG9tVW5pdDsKICBuc1N0eWxl
VW5pb24gbUxlZnRWYWx1ZTsKICBuc1N0eWxlVW5pb24gbVRvcFZhbHVlOwogIG5zU3R5bGVVbmlv
biBtUmlnaHRWYWx1ZTsKICBuc1N0eWxlVW5pb24gbUJvdHRvbVZhbHVlOwp9OwoKCgoKaW5saW5l
IFBSQm9vbCBuc1N0eWxlQ29vcmQ6Om9wZXJhdG9yIT0oY29uc3QgbnNTdHlsZUNvb3JkJiBhT3Ro
ZXIpIGNvbnN0CnsKICByZXR1cm4gUFJCb29sKCEgKCgqdGhpcykgPT0gYU90aGVyKSk7Cn0KCmlu
bGluZSBQUkludDMyIG5zU3R5bGVDb29yZDo6R2V0Q29vcmRWYWx1ZSh2b2lkKSBjb25zdAp7CiAg
e307CiAgaWYgKG1Vbml0ID09IGVTdHlsZVVuaXRfQ29vcmQpIHsKICAgIHJldHVybiBtVmFsdWUu
bUludDsKICB9CiAgcmV0dXJuIDA7Cn0KCmlubGluZSBQUkludDMyIG5zU3R5bGVDb29yZDo6R2V0
SW50VmFsdWUodm9pZCkgY29uc3QKewogIHt9OwoKCgogIGlmICgobVVuaXQgPT0gZVN0eWxlVW5p
dF9Qcm9wb3J0aW9uYWwpIHx8CiAgICAgIChtVW5pdCA9PSBlU3R5bGVVbml0X0VudW1lcmF0ZWQp
IHx8CiAgICAgIChtVW5pdCA9PSBlU3R5bGVVbml0X0NoYXJzKSB8fAogICAgICAobVVuaXQgPT0g
ZVN0eWxlVW5pdF9JbnRlZ2VyKSkgewogICAgcmV0dXJuIG1WYWx1ZS5tSW50OwogIH0KICByZXR1
cm4gMDsKfQoKaW5saW5lIGZsb2F0IG5zU3R5bGVDb29yZDo6R2V0UGVyY2VudFZhbHVlKHZvaWQp
IGNvbnN0CnsKICB7fTsKICBpZiAobVVuaXQgPT0gZVN0eWxlVW5pdF9QZXJjZW50KSB7CiAgICBy
ZXR1cm4gbVZhbHVlLm1GbG9hdDsKICB9CiAgcmV0dXJuIDAuMGY7Cn0KCmlubGluZSBmbG9hdCBu
c1N0eWxlQ29vcmQ6OkdldEZhY3RvclZhbHVlKHZvaWQpIGNvbnN0CnsKICB7fTsKICBpZiAobVVu
aXQgPT0gZVN0eWxlVW5pdF9GYWN0b3IpIHsKICAgIHJldHVybiBtVmFsdWUubUZsb2F0OwogIH0K
ICByZXR1cm4gMC4wZjsKfQoKaW5saW5lIHZvaWQgbnNTdHlsZUNvb3JkOjpHZXRVbmlvblZhbHVl
KG5zU3R5bGVVbmlvbiYgYVZhbHVlKSBjb25zdAp7CiAgbnNDUlQ6Om1lbWNweSgmYVZhbHVlLCAm
bVZhbHVlLCBzaXplb2YobnNTdHlsZVVuaW9uKSk7Cn0KCgoKCmlubGluZSBQUkJvb2wgbnNTdHls
ZVNpZGVzOjpvcGVyYXRvciE9KGNvbnN0IG5zU3R5bGVTaWRlcyYgYU90aGVyKSBjb25zdAp7CiAg
cmV0dXJuIFBSQm9vbCghICgoKnRoaXMpID09IGFPdGhlcikpOwp9CgppbmxpbmUgbnNTdHlsZVVu
aXQgbnNTdHlsZVNpZGVzOjpHZXRMZWZ0VW5pdCh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIChuc1N0
eWxlVW5pdCltTGVmdFVuaXQ7Cn0KCmlubGluZSBuc1N0eWxlVW5pdCBuc1N0eWxlU2lkZXM6Okdl
dFRvcFVuaXQodm9pZCkgY29uc3QKewogIHJldHVybiAobnNTdHlsZVVuaXQpbVRvcFVuaXQ7Cn0K
CmlubGluZSBuc1N0eWxlVW5pdCBuc1N0eWxlU2lkZXM6OkdldFJpZ2h0VW5pdCh2b2lkKSBjb25z
dAp7CiAgcmV0dXJuIChuc1N0eWxlVW5pdCltUmlnaHRVbml0Owp9CgppbmxpbmUgbnNTdHlsZVVu
aXQgbnNTdHlsZVNpZGVzOjpHZXRCb3R0b21Vbml0KHZvaWQpIGNvbnN0CnsKICByZXR1cm4gKG5z
U3R5bGVVbml0KW1Cb3R0b21Vbml0Owp9CgppbmxpbmUgbnNTdHlsZUNvb3JkJiBuc1N0eWxlU2lk
ZXM6OkdldExlZnQobnNTdHlsZUNvb3JkJiBhQ29vcmQpIGNvbnN0CnsKICBhQ29vcmQuU2V0VW5p
b25WYWx1ZShtTGVmdFZhbHVlLCAobnNTdHlsZVVuaXQpbUxlZnRVbml0KTsKICByZXR1cm4gYUNv
b3JkOwp9CgppbmxpbmUgbnNTdHlsZUNvb3JkJiBuc1N0eWxlU2lkZXM6OkdldFRvcChuc1N0eWxl
Q29vcmQmIGFDb29yZCkgY29uc3QKewogIGFDb29yZC5TZXRVbmlvblZhbHVlKG1Ub3BWYWx1ZSwg
KG5zU3R5bGVVbml0KW1Ub3BVbml0KTsKICByZXR1cm4gYUNvb3JkOwp9CgppbmxpbmUgbnNTdHls
ZUNvb3JkJiBuc1N0eWxlU2lkZXM6OkdldFJpZ2h0KG5zU3R5bGVDb29yZCYgYUNvb3JkKSBjb25z
dAp7CiAgYUNvb3JkLlNldFVuaW9uVmFsdWUobVJpZ2h0VmFsdWUsIChuc1N0eWxlVW5pdCltUmln
aHRVbml0KTsKICByZXR1cm4gYUNvb3JkOwp9CgppbmxpbmUgbnNTdHlsZUNvb3JkJiBuc1N0eWxl
U2lkZXM6OkdldEJvdHRvbShuc1N0eWxlQ29vcmQmIGFDb29yZCkgY29uc3QKewogIGFDb29yZC5T
ZXRVbmlvblZhbHVlKG1Cb3R0b21WYWx1ZSwgKG5zU3R5bGVVbml0KW1Cb3R0b21Vbml0KTsKICBy
ZXR1cm4gYUNvb3JkOwp9CgppbmxpbmUgdm9pZCBuc1N0eWxlU2lkZXM6OlNldExlZnQoY29uc3Qg
bnNTdHlsZUNvb3JkJiBhQ29vcmQpCnsKICBtTGVmdFVuaXQgPSBhQ29vcmQuR2V0VW5pdCgpOwog
IGFDb29yZC5HZXRVbmlvblZhbHVlKG1MZWZ0VmFsdWUpOwp9CgppbmxpbmUgdm9pZCBuc1N0eWxl
U2lkZXM6OlNldFRvcChjb25zdCBuc1N0eWxlQ29vcmQmIGFDb29yZCkKewogIG1Ub3BVbml0ID0g
YUNvb3JkLkdldFVuaXQoKTsKICBhQ29vcmQuR2V0VW5pb25WYWx1ZShtVG9wVmFsdWUpOwp9Cgpp
bmxpbmUgdm9pZCBuc1N0eWxlU2lkZXM6OlNldFJpZ2h0KGNvbnN0IG5zU3R5bGVDb29yZCYgYUNv
b3JkKQp7CiAgbVJpZ2h0VW5pdCA9IGFDb29yZC5HZXRVbml0KCk7CiAgYUNvb3JkLkdldFVuaW9u
VmFsdWUobVJpZ2h0VmFsdWUpOwp9CgppbmxpbmUgdm9pZCBuc1N0eWxlU2lkZXM6OlNldEJvdHRv
bShjb25zdCBuc1N0eWxlQ29vcmQmIGFDb29yZCkKewogIG1Cb3R0b21Vbml0ID0gYUNvb3JkLkdl
dFVuaXQoKTsKICBhQ29vcmQuR2V0VW5pb25WYWx1ZShtQm90dG9tVmFsdWUpOwp9CiMgMzMgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSFRNTFJlZmxvd1N0YXRlLmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSFRNTFJlZmxvd1N0YXRlLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zbGF5b3V0LmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTFJlZmxv
d1N0YXRlLmgiIDIKCmNsYXNzIG5zSUZyYW1lOwpjbGFzcyBuc0lQcmVzQ29udGV4dDsKY2xhc3Mg
bnNJUmVmbG93Q29tbWFuZDsKY2xhc3MgbnNJUmVuZGVyaW5nQ29udGV4dDsKY2xhc3MgbnNJU3Bh
Y2VNYW5hZ2VyOwpjbGFzcyBuc0xpbmVMYXlvdXQ7CgpzdHJ1Y3QgbnNTdHlsZURpc3BsYXk7CnN0
cnVjdCBuc1N0eWxlUG9zaXRpb247CnN0cnVjdCBuc1N0eWxlQm9yZGVyOwpzdHJ1Y3QgbnNTdHls
ZU1hcmdpbjsKc3RydWN0IG5zU3R5bGVQYWRkaW5nOwpzdHJ1Y3QgbnNTdHlsZVRleHQ7CnN0cnVj
dCBuc0h5cG90aGV0aWNhbEJveDsKIyA1NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRN
TFJlZmxvd1N0YXRlLmgiCmVudW0gbnNSZWZsb3dSZWFzb24gewogIGVSZWZsb3dSZWFzb25fSW5p
dGlhbCA9IDAsCiAgZVJlZmxvd1JlYXNvbl9JbmNyZW1lbnRhbCA9IDEsCiAgZVJlZmxvd1JlYXNv
bl9SZXNpemUgPSAyLAogIGVSZWZsb3dSZWFzb25fU3R5bGVDaGFuZ2UgPSAzLAoKICBlUmVmbG93
UmVhc29uX0RpcnR5ID0gNAp9OwoKCgoKdHlwZWRlZiBQUlVpbnQzMiBuc0NTU0ZyYW1lVHlwZTsK
IyAxMTMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxSZWZsb3dTdGF0ZS5oIgpzdHJ1
Y3QgbnNIVE1MUmVmbG93U3RhdGUgewoKCiAgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUqIHBhcmVu
dFJlZmxvd1N0YXRlOwoKCiAgbnNJRnJhbWUqIGZyYW1lOwoKCiAgbnNSZWZsb3dSZWFzb24gcmVh
c29uOwoKCiAgbnNJUmVmbG93Q29tbWFuZCogcmVmbG93Q29tbWFuZDsKIyAxMzQgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxSZWZsb3dTdGF0ZS5oIgogIG5zY29vcmQgYXZhaWxhYmxl
V2lkdGgsIGF2YWlsYWJsZUhlaWdodDsKCgogIG5zSVJlbmRlcmluZ0NvbnRleHQqIHJlbmRDb250
ZXh0OwoKCiAgUFJQYWNrZWRCb29sIGlzVG9wT2ZQYWdlOwoKCgogIG5zQ1NTRnJhbWVUeXBlIG1G
cmFtZVR5cGU7CgoKICBuc0lTcGFjZU1hbmFnZXIqIG1TcGFjZU1hbmFnZXI7CgoKICBuc0xpbmVM
YXlvdXQqIG1MaW5lTGF5b3V0OwojIDE2MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRN
TFJlZmxvd1N0YXRlLmgiCiAgbnNjb29yZCBtQ29tcHV0ZWRXaWR0aDsKIyAxNzggIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxSZWZsb3dTdGF0ZS5oIgogIG5zY29vcmQgbUNvbXB1dGVk
SGVpZ2h0OwoKCiAgbnNNYXJnaW4gbUNvbXB1dGVkTWFyZ2luOwoKCiAgbnNNYXJnaW4gbUNvbXB1
dGVkQm9yZGVyUGFkZGluZzsKCgogIG5zTWFyZ2luIG1Db21wdXRlZFBhZGRpbmc7CgoKCiAgbnNN
YXJnaW4gbUNvbXB1dGVkT2Zmc2V0czsKCgogIG5zY29vcmQgbUNvbXB1dGVkTWluV2lkdGgsIG1D
b21wdXRlZE1heFdpZHRoOwogIG5zY29vcmQgbUNvbXB1dGVkTWluSGVpZ2h0LCBtQ29tcHV0ZWRN
YXhIZWlnaHQ7CgoKICBuc2Nvb3JkIG1Db21wYWN0TWFyZ2luV2lkdGg7CgoKCgoKCiAgbnNjb29y
ZCBtQWxpZ25DaGFyT2Zmc2V0OwoKCgogIFBSUGFja2VkQm9vbCBtVXNlQWxpZ25DaGFyT2Zmc2V0
OwoKCiAgY29uc3QgbnNTdHlsZURpc3BsYXkqIG1TdHlsZURpc3BsYXk7CiAgY29uc3QgbnNTdHls
ZVBvc2l0aW9uKiBtU3R5bGVQb3NpdGlvbjsKICBjb25zdCBuc1N0eWxlQm9yZGVyKiBtU3R5bGVC
b3JkZXI7CiAgY29uc3QgbnNTdHlsZU1hcmdpbiogbVN0eWxlTWFyZ2luOwogIGNvbnN0IG5zU3R5
bGVQYWRkaW5nKiBtU3R5bGVQYWRkaW5nOwogIGNvbnN0IG5zU3R5bGVUZXh0KiBtU3R5bGVUZXh0
OwoKCgogIFBSSW50MzIgbVJlZmxvd0RlcHRoOwoKCiAgbnNjb29yZCBtUmlnaHRFZGdlOwojIDIz
OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTFJlZmxvd1N0YXRlLmgiCiAgbnNIVE1M
UmVmbG93U3RhdGUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICBuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgIG5zUmVmbG93UmVhc29u
IGFSZWFzb24sCiAgICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCogYVJlbmRl
cmluZ0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNTaXplJiBhQXZhaWxhYmxl
U3BhY2UpOwoKCgogIG5zSFRNTFJlZmxvd1N0YXRlKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAg
ICAgICBuc0lSZWZsb3dDb21tYW5kJiBhUmVmbG93Q29tbWFuZCwKICAgICAgICAgICAgICAgICAg
ICBuc0lSZW5kZXJpbmdDb250ZXh0KiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICBjb25zdCBuc1NpemUmIGFBdmFpbGFibGVTcGFjZSk7CgoKCgogIG5zSFRNTFJlZmxvd1N0
YXRlKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgY29u
c3QgbnNIVE1MUmVmbG93U3RhdGUmIGFQYXJlbnRSZWZsb3dTdGF0ZSwKICAgICAgICAgICAgICAg
ICAgICBuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU2l6ZSYg
YUF2YWlsYWJsZVNwYWNlLAogICAgICAgICAgICAgICAgICAgIG5zUmVmbG93UmVhc29uIGFSZWFz
b24pOwoKCgogIG5zSFRNTFJlZmxvd1N0YXRlKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQs
CiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUmIGFQYXJlbnRSZWZs
b3dTdGF0ZSwKICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG5zU2l6ZSYgYUF2YWlsYWJsZVNwYWNlKTsKCgoKICBuc0hUTUxSZWZs
b3dTdGF0ZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAg
IGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlJiBhUGFyZW50UmVmbG93U3RhdGUsCiAgICAgICAgICAg
ICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1Np
emUmIGFBdmFpbGFibGVTcGFjZSwKICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFDb250YWlu
aW5nQmxvY2tXaWR0aCwKICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxv
Y2tIZWlnaHQpOwoKCgoKCgogIHN0YXRpYyBjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSoKICAgIEdl
dENvbnRhaW5pbmdCbG9ja1JlZmxvd1N0YXRlKGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlKiBhUGFy
ZW50UlMpOwoKCgoKCgogIHN0YXRpYyBuc2Nvb3JkCiAgICBHZXRDb250YWluaW5nQmxvY2tDb250
ZW50V2lkdGgoY29uc3QgbnNIVE1MUmVmbG93U3RhdGUqIGFQYXJlbnRSUyk7CgoKCgoKCiAgc3Rh
dGljIGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlKgogICAgR2V0UGFnZUJveFJlZmxvd1N0YXRlKGNv
bnN0IG5zSFRNTFJlZmxvd1N0YXRlKiBhUGFyZW50UlMpOwojIDMwOSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSFRNTFJlZmxvd1N0YXRlLmgiCiAgc3RhdGljIHZvaWQgQ29tcHV0ZUJvcmRl
clBhZGRpbmdGb3IobnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSogYVBhcmVudFJTLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zTWFyZ2luJiBhUmVzdWx0KTsKCgoKCgoKICBz
dGF0aWMgbnNjb29yZCBDYWxjTGluZUhlaWdodChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQqIGFS
ZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1l
KiBhRnJhbWUpOwoKICBzdGF0aWMgUFJCb29sIFVzZUNvbXB1dGVkSGVpZ2h0KCk7CgogIHN0YXRp
YyBuc0NTU0ZyYW1lVHlwZSBEZXRlcm1pbmVGcmFtZVR5cGUobnNJRnJhbWUqIGFGcmFtZSk7Cgog
IHZvaWQgQ29tcHV0ZUNvbnRhaW5pbmdCbG9ja1JlY3RhbmdsZShuc0lQcmVzQ29udGV4dCogYVBy
ZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBu
c0hUTUxSZWZsb3dTdGF0ZSogYUNvbnRhaW5pbmdCbG9ja1JTLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkJiBhQ29udGFpbmluZ0Jsb2NrV2lkdGgsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQmIGFDb250YWluaW5nQmxv
Y2tIZWlnaHQpOwoKICB2b2lkIENhbGN1bGF0ZUJsb2NrU2lkZU1hcmdpbnMobnNjb29yZCBhQXZh
aWxXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29tcHV0
ZWRXaWR0aCk7CgoKcHJvdGVjdGVkOgoKCiAgdm9pZCBJbml0KG5zSVByZXNDb250ZXh0KiBhUHJl
c0NvbnRleHQsCiAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja1dpZHRoID0gLTEs
CiAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja0hlaWdodCA9IC0xKTsKCiAgdm9p
ZCBJbml0Q29uc3RyYWludHMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tXaWR0aCwKICAgICAgICAgICAg
ICAgICAgICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tIZWlnaHQpOwoKICB2b2lkIENhbGN1
bGF0ZUh5cG90aGV0aWNhbEJveChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhUGxhY2Vob2xkZXJGcmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUJsb2NrRnJhbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNNYXJnaW4mIGFCbG9ja0NvbnRlbnRBcmVhLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhQWJzb2x1dGVDb250YWlu
aW5nQmxvY2tGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0h5cG90aGV0
aWNhbEJveCYgYUh5cG90aGV0aWNhbEJveCk7CgogIHZvaWQgSW5pdEFic29sdXRlQ29uc3RyYWlu
dHMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlKiBjYnJzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmluZ0Jsb2NrV2lkdGgsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tIZWlnaHQpOwoKICB2b2lk
IENvbXB1dGVSZWxhdGl2ZU9mZnNldHMoY29uc3QgbnNIVE1MUmVmbG93U3RhdGUqIGNicnMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja1dpZHRo
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tI
ZWlnaHQpOwoKICB2b2lkIENvbXB1dGVCbG9ja0JveERhdGEobnNJUHJlc0NvbnRleHQqIGFQcmVz
Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNIVE1MUmVmbG93U3Rh
dGUqIGNicnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zU3R5bGVVbml0IGFXaWR0aFVu
aXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zU3R5bGVVbml0IGFIZWlnaHRVbml0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tXaWR0aCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmluZ0Jsb2NrSGVpZ2h0
KTsKCiAgdm9pZCBDb21wdXRlSG9yaXpvbnRhbFZhbHVlKG5zY29vcmQgYUNvbnRhaW5pbmdCbG9j
a1dpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNTdHlsZVVuaXQg
YVVuaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1N0eWxl
Q29vcmQmIGFDb29yZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29v
cmQmIGFSZXN1bHQpOwoKICB2b2lkIENvbXB1dGVWZXJ0aWNhbFZhbHVlKG5zY29vcmQgYUNvbnRh
aW5pbmdCbG9ja0hlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1N0
eWxlVW5pdCBhVW5pdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBu
c1N0eWxlQ29vcmQmIGFDb29yZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c2Nvb3JkJiBhUmVzdWx0KTsKCiAgc3RhdGljIG5zQ1NTRnJhbWVUeXBlIERldGVybWluZUZyYW1l
VHlwZShuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbnNTdHlsZVBvc2l0aW9uKiBhUG9zaXRpb24sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1N0eWxlRGlzcGxheSogYURpc3Bs
YXkpOwoKCgogIHZvaWQgQ29tcHV0ZU1hcmdpbihuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tXaWR0
aCwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUqIGFDb250YWlu
aW5nQmxvY2tSUyk7CgoKCiAgdm9pZCBDb21wdXRlUGFkZGluZyhuc2Nvb3JkIGFDb250YWluaW5n
QmxvY2tXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRl
KiBhQ29udGFpbmluZ0Jsb2NrUlMpOwoKCgoKICB2b2lkIENvbXB1dGVNaW5NYXhWYWx1ZXMobnNj
b29yZCBhQ29udGFpbmluZ0Jsb2NrV2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
Y29vcmQgYUNvbnRhaW5pbmdCbG9ja0hlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgbnNIVE1MUmVmbG93U3RhdGUqIGFDb250YWluaW5nQmxvY2tSUyk7CgogIG5zY29vcmQg
Q2FsY3VsYXRlSG9yaXpCb3JkZXJQYWRkaW5nTWFyZ2luKG5zY29vcmQgYUNvbnRhaW5pbmdCbG9j
a1dpZHRoKTsKCgoKCgogIHZvaWQgQWRqdXN0Q29tcHV0ZWRIZWlnaHQodm9pZCk7CiAgdm9pZCBB
ZGp1c3RDb21wdXRlZFdpZHRoKHZvaWQpOwp9OwojIDM0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJRnJhbWUuaCIgMgojIDU1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUu
aCIKY2xhc3MgbnNJQXRvbTsKY2xhc3MgbnNJQ29udGVudDsKY2xhc3MgbnNJUHJlc0NvbnRleHQ7
CmNsYXNzIG5zSVByZXNTaGVsbDsKY2xhc3MgbnNJUmVuZGVyaW5nQ29udGV4dDsKY2xhc3MgbnNJ
U2l6ZU9mSGFuZGxlcjsKY2xhc3MgbnNJU3R5bGVDb250ZXh0OwpjbGFzcyBuc0lWaWV3OwpjbGFz
cyBuc0lXaWRnZXQ7CmNsYXNzIG5zQXV0b1N0cmluZzsKY2xhc3MgbnNTdHJpbmc7CmNsYXNzIG5z
SUZvY3VzVHJhY2tlcjsKY2xhc3MgbnNTdHlsZUNoYW5nZUxpc3Q7CmNsYXNzIG5zQmxvY2tGcmFt
ZTsKY2xhc3MgbnNMaW5lTGF5b3V0OwoKc3RydWN0IG5zUGVla09mZnNldFN0cnVjdDsKc3RydWN0
IG5zUG9pbnQ7CnN0cnVjdCBuc1JlY3Q7CnN0cnVjdCBuc1N0eWxlU3RydWN0OwpjbGFzcyBuc0lE
T01SYW5nZTsKY2xhc3MgbnNJQ2FyZXQ7CmNsYXNzIG5zSVNlbGVjdGlvbkNvbnRyb2xsZXI7CnN0
cnVjdCBQUkxvZ01vZHVsZUluZm87CgpjbGFzcyBuc0lBY2Nlc3NpYmxlOwojIDEwMCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCnR5cGVkZWYgUFJVaW50MzIgbnNTcGxpdHRh
YmxlVHlwZTsKIyAxMTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgp0eXBl
ZGVmIFBSVWludDMyIG5zRnJhbWVTdGF0ZTsKIyAyMTAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lGcmFtZS5oIgplbnVtIG5zRnJhbWVQYWludExheWVyIHsKICBlRnJhbWVQYWludExheWVy
X1VuZGVybGF5ID0gMCwKICBlRnJhbWVQYWludExheWVyX0NvbnRlbnQgPSAxLAogIGVGcmFtZVBh
aW50TGF5ZXJfT3ZlcmxheSA9IDIKfTsKCmVudW0gbnNTZWxlY3Rpb25BbW91bnQgewogIGVTZWxl
Y3RDaGFyYWN0ZXIgPSAwLAogIGVTZWxlY3RXb3JkID0gMSwKICBlU2VsZWN0TGluZSA9IDIsCiAg
ZVNlbGVjdEJlZ2luTGluZSA9IDMsCiAgZVNlbGVjdEVuZExpbmUgPSA0LAogIGVTZWxlY3ROb0Ft
b3VudCA9IDUsCiAgZVNlbGVjdERpciA9IDYsCiAgZVNlbGVjdFBhcmFncmFwaCA9IDcKfTsKCmVu
dW0gbnNEaXJlY3Rpb24gewogIGVEaXJOZXh0ID0gMCwKICBlRGlyUHJldmlvdXM9IDEKfTsKCmVu
dW0gbnNTcHJlYWQgewogIGVTcHJlYWROb25lID0gMCwKICBlU3ByZWFkQWNyb3NzID0gMSwKICBl
U3ByZWFkRG93biA9IDIKfTsKCmVudW0gbnNDb250ZXh0UHJvdmlkZXJSZWxhdGlvbnNoaXAgewog
IGVDb250ZXh0UHJvdmlkZXJfQW5jZXN0b3IgPSAwLAogIGVDb250ZXh0UHJvdmlkZXJfRGVzY2Vu
ZGFudCA9IDEKfTsKIyAyNTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgpz
dHJ1Y3QgbnNIVE1MUmVmbG93TWV0cmljcyB7CiAgbnNjb29yZCB3aWR0aCwgaGVpZ2h0OwogIG5z
Y29vcmQgYXNjZW50LCBkZXNjZW50OwoKCiAgbnNTaXplKiBtYXhFbGVtZW50U2l6ZTsKCgoKICBu
c2Nvb3JkIG1NYXhpbXVtV2lkdGg7CiMgMjgwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
RnJhbWUuaCIKICBuc2Nvb3JkIG1DYXJyaWVkT3V0Qm90dG9tTWFyZ2luOwojIDI5MCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgbnNSZWN0IG1PdmVyZmxvd0FyZWE7Cgog
IFBSVWludDMyIG1GbGFnczsKCgogIFBSQm9vbCBtTm90aGluZ0NoYW5nZWQ7CgogIG5zSFRNTFJl
Zmxvd01ldHJpY3MobnNTaXplKiBhTWF4RWxlbWVudFNpemUsIFBSVWludDMyIGFGbGFncyA9IDAp
IHsKICAgIG1heEVsZW1lbnRTaXplID0gYU1heEVsZW1lbnRTaXplOwogICAgbU1heGltdW1XaWR0
aCA9IDA7CiAgICBtRmxhZ3MgPSBhRmxhZ3M7CiAgICBtQ2FycmllZE91dEJvdHRvbU1hcmdpbiA9
IDA7CiAgICBtT3ZlcmZsb3dBcmVhLnggPSAwOwogICAgbU92ZXJmbG93QXJlYS55ID0gMDsKICAg
IG1PdmVyZmxvd0FyZWEud2lkdGggPSAwOwogICAgbU92ZXJmbG93QXJlYS5oZWlnaHQgPSAwOwog
ICAgbU5vdGhpbmdDaGFuZ2VkID0gMDsKCgoKCgoKCiAgICB3aWR0aCA9IGhlaWdodCA9IDA7CiAg
ICBhc2NlbnQgPSBkZXNjZW50ID0gMDsKICB9CgogIHZvaWQgQWRkQm9yZGVyUGFkZGluZ1RvTWF4
RWxlbWVudFNpemUoY29uc3QgbnNNYXJnaW4mIGFCb3JkZXJQYWRkaW5nKSB7CiAgICBtYXhFbGVt
ZW50U2l6ZS0+d2lkdGggKz0gYUJvcmRlclBhZGRpbmcubGVmdCArIGFCb3JkZXJQYWRkaW5nLnJp
Z2h0OwogICAgbWF4RWxlbWVudFNpemUtPmhlaWdodCArPSBhQm9yZGVyUGFkZGluZy50b3AgKyBh
Qm9yZGVyUGFkZGluZy5ib3R0b207CiAgfQoKICBuc0hUTUxSZWZsb3dNZXRyaWNzJiBvcGVyYXRv
cj0oY29uc3QgbnNIVE1MUmVmbG93TWV0cmljcyYgYU90aGVyKQogIHsKICAgIGlmIChtYXhFbGVt
ZW50U2l6ZSAmJiBhT3RoZXIubWF4RWxlbWVudFNpemUpIHsKICAgICAgbWF4RWxlbWVudFNpemUt
PndpZHRoID0gYU90aGVyLm1heEVsZW1lbnRTaXplLT53aWR0aDsKICAgICAgbWF4RWxlbWVudFNp
emUtPmhlaWdodCA9IGFPdGhlci5tYXhFbGVtZW50U2l6ZS0+aGVpZ2h0OwogICAgfQogICAgbU1h
eGltdW1XaWR0aCA9IGFPdGhlci5tTWF4aW11bVdpZHRoOwogICAgbUZsYWdzID0gYU90aGVyLm1G
bGFnczsKICAgIG1DYXJyaWVkT3V0Qm90dG9tTWFyZ2luID0gYU90aGVyLm1DYXJyaWVkT3V0Qm90
dG9tTWFyZ2luOwogICAgbU92ZXJmbG93QXJlYS54ID0gYU90aGVyLm1PdmVyZmxvd0FyZWEueDsK
ICAgIG1PdmVyZmxvd0FyZWEueSA9IGFPdGhlci5tT3ZlcmZsb3dBcmVhLnk7CiAgICBtT3ZlcmZs
b3dBcmVhLndpZHRoID0gYU90aGVyLm1PdmVyZmxvd0FyZWEud2lkdGg7CiAgICBtT3ZlcmZsb3dB
cmVhLmhlaWdodCA9IGFPdGhlci5tT3ZlcmZsb3dBcmVhLmhlaWdodDsKICAgIG1Ob3RoaW5nQ2hh
bmdlZCA9IGFPdGhlci5tTm90aGluZ0NoYW5nZWQ7CgoKCgogICAgd2lkdGggPSBhT3RoZXIud2lk
dGg7CiAgICBoZWlnaHQgPSBhT3RoZXIuaGVpZ2h0OwogICAgYXNjZW50ID0gYU90aGVyLmFzY2Vu
dDsKICAgIGRlc2NlbnQgPSBhT3RoZXIuZGVzY2VudDsKICAgIHJldHVybiAqdGhpczsKICB9Cgp9
OwojIDM4MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCnR5cGVkZWYgUFJV
aW50MzIgbnNSZWZsb3dTdGF0dXM7CiMgNDUyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
RnJhbWUuaCIKdHlwZWRlZiBQUkJvb2wgbnNEaWRSZWZsb3dTdGF0dXM7CiMgNDczICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKY2xhc3MgbnNJRnJhbWUgOiBwdWJsaWMgbnNJ
U3VwcG9ydHMKewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj
IGNvbnN0IG5zSUlEIGlpZCA9IHsgMHhhNmNmOTA1MCwgMHgxNWIzLCAweDExZDIsezB4OTMsIDB4
MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzJ9fTsgcmV0dXJuIGlpZDt9CiMg
NDk1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVz
dWx0IEluaXQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAg
IG5zSUNvbnRlbnQqIGFDb250ZW50LAogICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFQYXJl
bnQsCiAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqIGFDb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgbnNJRnJhbWUqIGFQcmV2SW5GbG93KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IERlc3Ryb3kobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCkgPSAwOwojIDUyNSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBT
ZXRJbml0aWFsQ2hpbGRMaXN0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUNoaWxkTGlzdCkgPSAwOwojIDU0MyAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBB
cHBlbmRGcmFtZXMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lQcmVzU2hlbGwmIGFQcmVzU2hlbGwsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZy
YW1lKiBhRnJhbWVMaXN0KSA9IDA7CiMgNTYzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
RnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluc2VydEZyYW1lcyhuc0lQcmVzQ29udGV4dCog
YVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNTaGVsbCYgYVBy
ZXNTaGVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFQcmV2RnJhbWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZUxpc3QpID0gMDsKIyA1ODUgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlRnJh
bWUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSVByZXNTaGVsbCYgYVByZXNTaGVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0
b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhT2xkRnJh
bWUpID0gMDsKIyA2MDcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgUmVwbGFjZUZyYW1lKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJlc1NoZWxsLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lGcmFtZSogYU9sZEZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSUZyYW1lKiBhTmV3RnJhbWUpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRD
b250ZW50KG5zSUNvbnRlbnQqKiBhQ29udGVudCkgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRPZmZzZXRzKFBSSW50MzIgJnN0YXJ0LCBQUkludDMyICZlbmQpIGNvbnN0ID0g
MDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTdHlsZUNvbnRleHQobnNJU3R5bGVDb250
ZXh0KiogYVN0eWxlQ29udGV4dCkgY29uc3QgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U3R5
bGVDb250ZXh0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYUNvbnRleHQpID0gMDsKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRTdHlsZURhdGEobnNTdHlsZVN0cnVjdElEIGFTSUQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IG5zU3R5bGVTdHJ1Y3QqJiBhU3R5bGVTdHJ1Y3QpIGNvbnN0
ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTdHlsZShuc1N0eWxlU3RydWN0SUQgYVNJRCwg
bnNTdHlsZVN0cnVjdCYgYVN0cnVjdCkgY29uc3QgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IENh
bGNCb3JkZXJQYWRkaW5nKG5zTWFyZ2luJiBhQm9yZGVyUGFkZGluZykgY29uc3QgPSAwOwojIDY1
NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRBZGRpdGlvbmFsU3R5bGVDb250ZXh0KFBSSW50MzIgYUluZGV4LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiogYVN0eWxlQ29udGV4
dCkgY29uc3QgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QWRkaXRpb25hbFN0eWxlQ29udGV4
dChQUkludDMyIGFJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSVN0eWxlQ29udGV4dCogYVN0eWxlQ29udGV4dCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldFBhcmVudChuc0lGcmFtZSoqIGFQYXJlbnQpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5z
cmVzdWx0IFNldFBhcmVudChjb25zdCBuc0lGcmFtZSogYVBhcmVudCkgPSAwOwojIDY3NiAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRS
ZWN0KG5zUmVjdCYgYVJlY3QpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9yaWdp
bihuc1BvaW50JiBhUG9pbnQpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNpemUo
bnNTaXplJiBhU2l6ZSkgY29uc3QgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UmVjdChuc0lQ
cmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNS
ZWN0JiBhUmVjdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgTW92ZVRvKG5zSVByZXNDb250ZXh0
KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYVgsCiAgICAgICAg
ICAgICAgICAgICAgIG5zY29vcmQgYVkpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNpemVUbyhu
c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICBuc2Nvb3Jk
IGFXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhSGVpZ2h0KSA9IDA7CiMgNjk4
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldEFkZGl0aW9uYWxDaGlsZExpc3ROYW1lKFBSSW50MzIgYUluZGV4LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qKiBhTGlzdE5hbWUpIGNvbnN0ID0g
MDsKIyA3MDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgRmlyc3RDaGlsZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJRnJhbWUqKiBhRmlyc3RDaGlsZCkgY29uc3QgPSAwOwoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldE5leHRTaWJsaW5nKG5zSUZyYW1lKiogYU5leHRTaWJsaW5nKSBjb25zdCA9IDA7
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXROZXh0U2libGluZyhuc0lGcmFtZSogYU5leHRTaWJsaW5n
KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQYWludChuc0lQcmVzQ29udGV4dCogYVBy
ZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5k
ZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVj
dCwKICAgICAgICAgICAgICAgICAgICBuc0ZyYW1lUGFpbnRMYXllciBhV2hpY2hMYXllcikgPSAw
OwojIDc0NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBu
c3Jlc3VsdCBIYW5kbGVFdmVudChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zR1VJRXZlbnQqIGFFdmVudCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0V2ZW50U3RhdHVzKiBhRXZlbnRTdGF0dXMpID0gMDsKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRDb250ZW50Rm9yRXZlbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNFdmVudCogYUV2ZW50LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiogYUNvbnRlbnQpID0gMDsKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRDb250ZW50QW5kT2Zmc2V0c0Zyb21Qb2ludChuc0lQcmVzQ29udGV4
dCogYUNYLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bnNQb2ludCYgYVBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJQ29udGVudCAqKiBhTmV3Q29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBSSW50MzImIGFDb250ZW50T2Zmc2V0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiYgYUNvbnRlbnRPZmZzZXRFbmQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wmIGFCZWdpbkZy
YW1lQ29udGVudCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDdXJzb3IobnNJUHJl
c0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgbnNQb2ludCYg
YVBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyJiBhQ3Vyc29yKSA9IDA7CiMg
Nzc0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldEZyYW1lRm9yUG9pbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUG9pbnQmIGFQb2ludCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zRnJhbWVQYWludExheWVyIGFXaGljaExheWVyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqKiBhRnJhbWUpID0gMDsKCgoKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQb2ludEZyb21PZmZzZXQobnNJUHJlc0NvbnRleHQqIGlu
UHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmlu
Z0NvbnRleHQqIGluUmVuZENvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBSSW50MzIgaW5PZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zUG9p
bnQqIG91dFBvaW50KSA9IDA7CiMgNzk4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJh
bWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENoaWxkRnJhbWVDb250YWluaW5nT2Zmc2V0KFBS
SW50MzIgaW5Db250ZW50T2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
UkJvb2wgaW5IaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyKiBv
dXRGcmFtZUNvbnRlbnRPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUZyYW1lKiAqb3V0Q2hpbGRGcmFtZSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
RnJhbWVTdGF0ZShuc0ZyYW1lU3RhdGUqIGFSZXN1bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgU2V0RnJhbWVTdGF0ZShuc0ZyYW1lU3RhdGUgYU5ld1N0YXRlKSA9IDA7CiMgODI1ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENv
bnRlbnRDaGFuZ2VkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNoaWxkLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSVN1cHBvcnRzKiBhU3ViQ29udGVudCkgPSAwOwojIDgzOSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBdHRyaWJ1dGVDaGFu
Z2VkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lDb250ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUkludDMyIGFOYW1lU3BhY2VJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUF0b20qIGFBdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMy
IGFIaW50KSA9IDA7CiMgODU0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIK
ICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRlbnRTdGF0ZUNoYW5nZWQobnNJUHJlc0NvbnRleHQqIGFQ
cmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQq
IGFDaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYUhpbnQp
ID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1NwbGl0dGFibGUobnNTcGxpdHRhYmxlVHlw
ZSYgYUlzU3BsaXR0YWJsZSkgY29uc3QgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBy
ZXZJbkZsb3cobnNJRnJhbWUqKiBhUHJldkluRmxvdykgY29uc3QgPSAwOwogIHZpcnR1YWwgbnNy
ZXN1bHQgU2V0UHJldkluRmxvdyhuc0lGcmFtZSopID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dE5leHRJbkZsb3cobnNJRnJhbWUqKiBhTmV4dEluRmxvdykgY29uc3QgPSAwOwogIHZpcnR1YWwg
bnNyZXN1bHQgU2V0TmV4dEluRmxvdyhuc0lGcmFtZSopID0gMDsKIyA4ODAgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgV2lsbFJlZmxvdyhu
c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KSA9IDA7CiMgOTIyICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZmxvdyhuc0lQcmVzQ29u
dGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgIG5zSFRNTFJlZmxvd01ldHJp
Y3MmIGFSZWZsb3dNZXRyaWNzLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zSFRNTFJlZmxv
d1N0YXRlJiBhUmVmbG93U3RhdGUsCiAgICAgICAgICAgICAgICAgICAgbnNSZWZsb3dTdGF0dXMm
IGFTdGF0dXMpID0gMDsKIyA5NDIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgRGlkUmVmbG93KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zRGlkUmVmbG93U3RhdHVzIGFTdGF0dXMpID0g
MDsKIyA5NTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgQ2FuQ29udGludWVUZXh0UnVuKFBSQm9vbCYgYUNvbnRpbnVlVGV4dFJ1bikgY29u
c3QgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFkanVzdEZyYW1lU2l6ZShuc2Nvb3JkIGFF
eHRyYVNwYWNlLCBuc2Nvb3JkJiBhVXNlZFNwYWNlKSA9IDA7CgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBUcmltVHJhaWxpbmdXaGl0ZVNwYWNlKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFS
QywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCYgYURlbHRhV2lk
dGgpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWaWV3KG5zSVByZXNDb250ZXh0KiBh
UHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICBuc0lWaWV3KiogYVZpZXcpIGNvbnN0
ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFZpZXcobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgIG5zSVZpZXcqIGFWaWV3KSA9IDA7CgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0UGFyZW50V2l0aFZpZXcobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSoqIGFQYXJlbnQp
IGNvbnN0ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0T2Zmc2V0RnJvbVZpZXcobnNJ
UHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc1BvaW50JiBhT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVZp
ZXcqKiBhVmlldykgY29uc3QgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdpbmRv
dyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBu
c0lXaWRnZXQqKiBhV2lkZ2V0KSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRGcmFtZVR5cGUobnNJQXRvbSoqIGFUeXBlKSBjb25zdCA9IDA7CgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgSXNQZXJjZW50YWdlQmFzZShQUkJvb2wmIGFCYXNlKSBjb25zdCA9IDA7CgoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IFNjcm9sbGVkKG5zSVZpZXcgKmFWaWV3KSA9IDA7CiMgMTAzMCAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRT
ZWxlY3RlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSURPTVJhbmdlKiBhUmFuZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUFJC
b29sIGFTZWxlY3RlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc1NwcmVhZCBhU3ByZWFk
KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2VsZWN0ZWQoUFJCb29sICphU2VsZWN0ZWQp
IGNvbnN0ID0gMDsKIyAxMDQ2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIK
ICB2aXJ0dWFsIG5zcmVzdWx0IElzU2VsZWN0YWJsZShQUkJvb2wqIGFJc1NlbGVjdGFibGUsIFBS
VWludDgqIGFTZWxlY3RTdHlsZSkgY29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0U2VsZWN0aW9uQ29udHJvbGxlcihuc0lQcmVzQ29udGV4dCAqYVByZXNDb250ZXh0LCBuc0lT
ZWxlY3Rpb25Db250cm9sbGVyICoqYVNlbENvbikgPSAwOwojIDEwNjQgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ2FwdHVyZU1vdXNlKG5z
SVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIFBSQm9vbCBhR3JhYk1vdXNlRXZlbnRzKSA9IDA7
CiMgMTA3MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBu
c3Jlc3VsdCBQZWVrT2Zmc2V0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIG5zUGVla09m
ZnNldFN0cnVjdCAqYVBvcykgPSAwOwojIDEwODYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ2hlY2tWaXNpYmlsaXR5KG5zSVByZXNDb250
ZXh0KiBhQ29udGV4dCwgUFJJbnQzMiBhU3RhcnRJbmRleCwgUFJJbnQzMiBhRW5kSW5kZXgsIFBS
Qm9vbCBhUmVjdXJzZSwgUFJCb29sICphRmluaXNoZWQsIFBSQm9vbCAqX3JldHZhbCk9MDsKCgoK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWZsb3dEaXJ0eUNoaWxkKG5zSVByZXNTaGVsbCogYVBy
ZXNTaGVsbCwgbnNJRnJhbWUqIGFDaGlsZCkgPSAwOwojIDExMDMgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWNjZXNzaWJsZShuc0lB
Y2Nlc3NpYmxlKiogYUFjY2Vzc2libGUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVm
bG93Q29tbWFuZE5vdGlmeShuc0lQcmVzU2hlbGwqIGFTaGVsbCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNJUmVmbG93Q29tbWFuZCogYVJDLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUkJvb2wgYUNvbW1hbmRBZGRlZCkgPSAwOwojIDExMzEgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFyZW50
U3R5bGVDb250ZXh0UHJvdmlkZXIobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiogYVByb3ZpZGVy
RnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NvbnRl
eHRQcm92aWRlclJlbGF0aW9uc2hpcCYgYVJlbGF0aW9uc2hpcCkgPSAwOwojIDExNDQgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSXNWaXNp
YmxlRm9yUGFpbnRpbmcobnNJUHJlc0NvbnRleHQgKiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhQ2hlY2tWaXMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wqIGFJc1Zpc2libGUpID0g
MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmlkaVByb3BlcnR5KG5zSVByZXNDb250ZXh0
KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYVBy
b3BlcnR5TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiogYVByb3BlcnR5
VmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhU2l6ZSA9IHNpemVvZih2
b2lkKikgKSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCaWRpUHJvcGVydHkobnNJ
UHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lBdG9tKiBhUHJvcGVydHlOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQq
IGFQcm9wZXJ0eVZhbHVlKSBjb25zdCA9IDA7CgoKcHJpdmF0ZToKICB2aXJ0dWFsIG5zcmVmY250
IEFkZFJlZih2b2lkKSA9IDA7CiAgdmlydHVhbCBuc3JlZmNudCBSZWxlYXNlKHZvaWQpID0gMDsK
fTsKIyAyNyAibnNUZXh0VHJhbnNmb3JtZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVN0eWxlQ29udGV4dC5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lTdHlsZUNvbnRleHQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNsYXlv
dXQuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0Lmgi
IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDI3ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0LmgiIDIKIyAxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNDb2xvci5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lTdHlsZUNvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0Nvb3JkLmgiIDEKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlQ29udGV4
dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zTWFyZ2luLmgiIDEKIyAzMCAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zUmVjdC5oIiAxCiMgMzEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lTdHlsZUNvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0ZvbnQuaCIgMQojIDMyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0
LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNWb2lkQXJyYXkuaCIgMQojIDI2
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNWb2lkQXJyYXkuaCIKIyAxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zVm9pZEFycmF5LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBV3JpdGFi
bGVTdHJpbmcuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNWb2lkQXJyYXku
aCIgMgpjbGFzcyBuc0lTaXplT2ZIYW5kbGVyOwoKCnR5cGVkZWYgUFJCb29sICgqIG5zVm9pZEFy
cmF5RW51bUZ1bmMpKHZvaWQqIGFFbGVtZW50LCB2b2lkICphRGF0YSk7CgoKY2xhc3MgbnNWb2lk
QXJyYXkgewpwdWJsaWM6CiAgbnNWb2lkQXJyYXkoKTsKICBuc1ZvaWRBcnJheShQUkludDMyIGFD
b3VudCk7CiAgdmlydHVhbCB+bnNWb2lkQXJyYXkoKTsKCiAgbnNWb2lkQXJyYXkmIG9wZXJhdG9y
PShjb25zdCBuc1ZvaWRBcnJheSYgb3RoZXIpOwoKICB2b2lkIFNpemVPZihuc0lTaXplT2ZIYW5k
bGVyKiBhSGFuZGxlciwgUFJVaW50MzIqIGFSZXN1bHQpIGNvbnN0OwoKICBQUkludDMyIENvdW50
KCkgY29uc3QgewogICAgcmV0dXJuIG1JbXBsID8gbUltcGwtPm1Db3VudCA6IDA7CiAgfQoKICB2
b2lkKiBFbGVtZW50QXQoUFJJbnQzMiBhSW5kZXgpIGNvbnN0OwogIHZvaWQqIG9wZXJhdG9yW10o
UFJJbnQzMiBhSW5kZXgpIGNvbnN0IHsgcmV0dXJuIEVsZW1lbnRBdChhSW5kZXgpOyB9CgogIFBS
SW50MzIgSW5kZXhPZih2b2lkKiBhUG9zc2libGVFbGVtZW50KSBjb25zdDsKCiAgUFJCb29sIElu
c2VydEVsZW1lbnRBdCh2b2lkKiBhRWxlbWVudCwgUFJJbnQzMiBhSW5kZXgpOwoKICBQUkJvb2wg
UmVwbGFjZUVsZW1lbnRBdCh2b2lkKiBhRWxlbWVudCwgUFJJbnQzMiBhSW5kZXgpOwoKICBQUkJv
b2wgQXBwZW5kRWxlbWVudCh2b2lkKiBhRWxlbWVudCkgewogICAgcmV0dXJuIEluc2VydEVsZW1l
bnRBdChhRWxlbWVudCwgQ291bnQoKSk7CiAgfQoKICBQUkJvb2wgUmVtb3ZlRWxlbWVudCh2b2lk
KiBhRWxlbWVudCk7CiAgUFJCb29sIFJlbW92ZUVsZW1lbnRBdChQUkludDMyIGFJbmRleCk7CiAg
dm9pZCBDbGVhcigpOwoKICB2b2lkIENvbXBhY3QoKTsKCiAgUFJCb29sIEVudW1lcmF0ZUZvcndh
cmRzKG5zVm9pZEFycmF5RW51bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsKICBQUkJvb2wgRW51
bWVyYXRlQmFja3dhcmRzKG5zVm9pZEFycmF5RW51bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsK
CnByb3RlY3RlZDoKICBzdHJ1Y3QgSW1wbCB7CgoKCgoKCiAgICBQUlVpbnQzMiBtQml0czsKCgoK
CiAgICBQUkludDMyIG1Db3VudDsKCgoKCiAgICB2b2lkKiBtQXJyYXlbMV07CiAgfTsKCiAgSW1w
bCogbUltcGw7CgogIGVudW0gewogICAga0FycmF5T3duZXJNYXNrID0gMSA8PCAzMSwKICAgIGtB
cnJheVNpemVNYXNrID0gfmtBcnJheU93bmVyTWFzawogIH07CgoKCiAgUFJJbnQzMiBHZXRBcnJh
eVNpemUoKSBjb25zdDsKICB2b2lkIFNldEFycmF5U2l6ZShQUkludDMyIGFTaXplKTsKICBQUkJv
b2wgSXNBcnJheU93bmVyKCkgY29uc3Q7CiAgdm9pZCBTZXRBcnJheU93bmVyKFBSQm9vbCBhT3du
ZXIpOwoKcHJpdmF0ZToKCiAgbnNWb2lkQXJyYXkoY29uc3QgbnNWb2lkQXJyYXkmIG90aGVyKTsK
fTsKCgoKY2xhc3MgbnNBdXRvVm9pZEFycmF5IDogcHVibGljIG5zVm9pZEFycmF5IHsKcHVibGlj
OgogIG5zQXV0b1ZvaWRBcnJheSgpOwoKcHJvdGVjdGVkOgoKCiAgZW51bSB7IGtBdXRvQnVmU2l6
ZSA9IDggfTsKICBjaGFyIG1BdXRvQnVmW3NpemVvZihJbXBsKSArIChrQXV0b0J1ZlNpemUgLSAx
KSAqIHNpemVvZih2b2lkKildOwp9OwoKCmNsYXNzIG5zU3RyaW5nOwoKdHlwZWRlZiBQUkJvb2wg
KCpuc1N0cmluZ0FycmF5RW51bUZ1bmMpKG5zU3RyaW5nJiBhRWxlbWVudCwgdm9pZCAqYURhdGEp
OwoKY2xhc3MgbnNTdHJpbmdBcnJheTogcHJvdGVjdGVkIG5zVm9pZEFycmF5CnsKcHVibGljOgog
IG5zU3RyaW5nQXJyYXkodm9pZCk7CiAgdmlydHVhbCB+bnNTdHJpbmdBcnJheSh2b2lkKTsKCiAg
bnNTdHJpbmdBcnJheSYgb3BlcmF0b3I9KGNvbnN0IG5zU3RyaW5nQXJyYXkmIG90aGVyKTsKCiAg
dm9pZCBTaXplT2YobnNJU2l6ZU9mSGFuZGxlciogYUhhbmRsZXIsIFBSVWludDMyKiBhUmVzdWx0
KSBjb25zdDsKCiAgUFJJbnQzMiBDb3VudCh2b2lkKSBjb25zdCB7CiAgICByZXR1cm4gbnNWb2lk
QXJyYXk6OkNvdW50KCk7CiAgfQoKICB2b2lkIFN0cmluZ0F0KFBSSW50MzIgYUluZGV4LCBuc0FX
cml0YWJsZVN0cmluZyYgYVN0cmluZykgY29uc3Q7CiAgbnNTdHJpbmcqIFN0cmluZ0F0KFBSSW50
MzIgYUluZGV4KSBjb25zdDsKICBuc1N0cmluZyogb3BlcmF0b3JbXShQUkludDMyIGFJbmRleCkg
Y29uc3QgeyByZXR1cm4gU3RyaW5nQXQoYUluZGV4KTsgfQoKICBQUkludDMyIEluZGV4T2YoY29u
c3QgbnNBUmVhZGFibGVTdHJpbmcmIGFQb3NzaWJsZVN0cmluZykgY29uc3Q7CiAgUFJJbnQzMiBJ
bmRleE9mSWdub3JlQ2FzZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVBvc3NpYmxlU3RyaW5n
KSBjb25zdDsKCiAgUFJCb29sIEluc2VydFN0cmluZ0F0KGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5n
JiBhU3RyaW5nLCBQUkludDMyIGFJbmRleCk7CgogIFBSQm9vbCBSZXBsYWNlU3RyaW5nQXQoY29u
c3QgbnNBUmVhZGFibGVTdHJpbmcmIGFTdHJpbmcsIFBSSW50MzIgYUluZGV4KTsKCiAgUFJCb29s
IEFwcGVuZFN0cmluZyhjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVN0cmluZykgewogICAgcmV0
dXJuIEluc2VydFN0cmluZ0F0KGFTdHJpbmcsIENvdW50KCkpOwogIH0KCiAgUFJCb29sIFJlbW92
ZVN0cmluZyhjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVN0cmluZyk7CiAgUFJCb29sIFJlbW92
ZVN0cmluZ0lnbm9yZUNhc2UoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFTdHJpbmcpOwogIFBS
Qm9vbCBSZW1vdmVTdHJpbmdBdChQUkludDMyIGFJbmRleCk7CiAgdm9pZCBDbGVhcih2b2lkKTsK
CiAgdm9pZCBDb21wYWN0KHZvaWQpIHsKICAgIG5zVm9pZEFycmF5OjpDb21wYWN0KCk7CiAgfQoK
ICBQUkJvb2wgRW51bWVyYXRlRm9yd2FyZHMobnNTdHJpbmdBcnJheUVudW1GdW5jIGFGdW5jLCB2
b2lkKiBhRGF0YSk7CiAgUFJCb29sIEVudW1lcmF0ZUJhY2t3YXJkcyhuc1N0cmluZ0FycmF5RW51
bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsKCnByaXZhdGU6CgogIG5zU3RyaW5nQXJyYXkoY29u
c3QgbnNTdHJpbmdBcnJheSYgb3RoZXIpOwp9OwoKCmNsYXNzIG5zQ1N0cmluZzsKCnR5cGVkZWYg
UFJCb29sICgqbnNDU3RyaW5nQXJyYXlFbnVtRnVuYykobnNDU3RyaW5nJiBhRWxlbWVudCwgdm9p
ZCAqYURhdGEpOwoKY2xhc3MgbnNDU3RyaW5nQXJyYXk6IHByb3RlY3RlZCBuc1ZvaWRBcnJheQp7
CnB1YmxpYzoKICBuc0NTdHJpbmdBcnJheSh2b2lkKTsKICB2aXJ0dWFsIH5uc0NTdHJpbmdBcnJh
eSh2b2lkKTsKCiAgbnNDU3RyaW5nQXJyYXkmIG9wZXJhdG9yPShjb25zdCBuc0NTdHJpbmdBcnJh
eSYgb3RoZXIpOwoKICB2b2lkIFNpemVPZihuc0lTaXplT2ZIYW5kbGVyKiBhSGFuZGxlciwgUFJV
aW50MzIqIGFSZXN1bHQpIGNvbnN0OwoKICBQUkludDMyIENvdW50KHZvaWQpIGNvbnN0IHsKICAg
IHJldHVybiBuc1ZvaWRBcnJheTo6Q291bnQoKTsKICB9CgogIHZvaWQgQ1N0cmluZ0F0KFBSSW50
MzIgYUluZGV4LCBuc0NTdHJpbmcmIGFDU3RyaW5nKSBjb25zdDsKICBuc0NTdHJpbmcqIENTdHJp
bmdBdChQUkludDMyIGFJbmRleCkgY29uc3Q7CiAgbnNDU3RyaW5nKiBvcGVyYXRvcltdKFBSSW50
MzIgYUluZGV4KSBjb25zdCB7IHJldHVybiBDU3RyaW5nQXQoYUluZGV4KTsgfQoKICBQUkludDMy
IEluZGV4T2YoY29uc3QgbnNDU3RyaW5nJiBhUG9zc2libGVTdHJpbmcpIGNvbnN0OwogIFBSSW50
MzIgSW5kZXhPZklnbm9yZUNhc2UoY29uc3QgbnNDU3RyaW5nJiBhUG9zc2libGVTdHJpbmcpIGNv
bnN0OwoKICBQUkJvb2wgSW5zZXJ0Q1N0cmluZ0F0KGNvbnN0IG5zQ1N0cmluZyYgYUNTdHJpbmcs
IFBSSW50MzIgYUluZGV4KTsKCiAgUFJCb29sIFJlcGxhY2VDU3RyaW5nQXQoY29uc3QgbnNDU3Ry
aW5nJiBhQ1N0cmluZywgUFJJbnQzMiBhSW5kZXgpOwoKICBQUkJvb2wgQXBwZW5kQ1N0cmluZyhj
b25zdCBuc0NTdHJpbmcmIGFDU3RyaW5nKSB7CiAgICByZXR1cm4gSW5zZXJ0Q1N0cmluZ0F0KGFD
U3RyaW5nLCBDb3VudCgpKTsKICB9CgogIFBSQm9vbCBSZW1vdmVDU3RyaW5nKGNvbnN0IG5zQ1N0
cmluZyYgYUNTdHJpbmcpOwogIFBSQm9vbCBSZW1vdmVDU3RyaW5nSWdub3JlQ2FzZShjb25zdCBu
c0NTdHJpbmcmIGFDU3RyaW5nKTsKICBQUkJvb2wgUmVtb3ZlQ1N0cmluZ0F0KFBSSW50MzIgYUlu
ZGV4KTsKICB2b2lkIENsZWFyKHZvaWQpOwoKICB2b2lkIENvbXBhY3Qodm9pZCkgewogICAgbnNW
b2lkQXJyYXk6OkNvbXBhY3QoKTsKICB9CgogIFBSQm9vbCBFbnVtZXJhdGVGb3J3YXJkcyhuc0NT
dHJpbmdBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lkKiBhRGF0YSk7CiAgUFJCb29sIEVudW1lcmF0
ZUJhY2t3YXJkcyhuc0NTdHJpbmdBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lkKiBhRGF0YSk7Cgpw
cml2YXRlOgoKICBuc0NTdHJpbmdBcnJheShjb25zdCBuc0NTdHJpbmdBcnJheSYgb3RoZXIpOwp9
OwojIDMzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0LmgiIDIKIyAx
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZUNvb3JkLmgiIDEKIyAzNCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zU3R5bGVTdHJ1Y3QuaCIgMQojIDM1ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJU3R5bGVDb250ZXh0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNTdHlsZUNvbnN0cy5oIiAxCiMgMzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHls
ZUNvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZVNldC5o
IiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZVNldC5oIgojIDEgIi91
c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8u
aCIgMSAzCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZVNldC5oIiAyCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAyNyAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlU2V0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNsYXlvdXQuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
U3R5bGVTZXQuaCIgMgoKY2xhc3MgbnNJQXRvbTsKY2xhc3MgbnNJU3R5bGVSdWxlOwpjbGFzcyBu
c0lTdHlsZVNoZWV0OwpjbGFzcyBuc0lTdHlsZUNvbnRleHQ7CmNsYXNzIG5zSVN0eWxlUnVsZVN1
cHBsaWVyOwpjbGFzcyBuc0lQcmVzQ29udGV4dDsKY2xhc3MgbnNJQ29udGVudDsKY2xhc3MgbnNJ
RnJhbWU7CmNsYXNzIG5zSURvY3VtZW50OwpjbGFzcyBuc0lGcmFtZU1hbmFnZXI7CmNsYXNzIG5z
SVN1cHBvcnRzQXJyYXk7CnN0cnVjdCBuc0ZpbmRGcmFtZUhpbnQ7CgojIDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc1ZvaWRBcnJheS5oIiAxCiMgNDMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lTdHlsZVNldC5oIiAyCmNsYXNzIG5zSVNpemVPZkhhbmRsZXI7CgpjbGFzcyBuc0lD
U1NQc2V1ZG9Db21wYXJhdG9yOwojIDY1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5
bGVTZXQuaCIKY2xhc3MgbnNJU3R5bGVTZXQgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6
CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7IHN0YXRpYyBuc0lJRCBpaWQgPSB7MHhl
NTkzOTZiMCwgMHhiMjQ0LCAweDExZDEsIHsweDgwLCAweDMxLCAweDAwLCAweDYwLCAweDA4LCAw
eDE1LCAweDliLCAweDVhfX07IHJldHVybiBpaWQ7IH0KCgoKICB2aXJ0dWFsIHZvaWQgQXBwZW5k
T3ZlcnJpZGVTdHlsZVNoZWV0KG5zSVN0eWxlU2hlZXQqIGFTaGVldCkgPSAwOwogIHZpcnR1YWwg
dm9pZCBJbnNlcnRPdmVycmlkZVN0eWxlU2hlZXRBZnRlcihuc0lTdHlsZVNoZWV0KiBhU2hlZXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlU2hl
ZXQqIGFBZnRlclNoZWV0KSA9IDA7CiAgdmlydHVhbCB2b2lkIEluc2VydE92ZXJyaWRlU3R5bGVT
aGVldEJlZm9yZShuc0lTdHlsZVNoZWV0KiBhU2hlZXQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZVNoZWV0KiBhQmVmb3JlU2hlZXQpID0gMDsK
ICB2aXJ0dWFsIHZvaWQgUmVtb3ZlT3ZlcnJpZGVTdHlsZVNoZWV0KG5zSVN0eWxlU2hlZXQqIGFT
aGVldCkgPSAwOwogIHZpcnR1YWwgUFJJbnQzMiBHZXROdW1iZXJPZk92ZXJyaWRlU3R5bGVTaGVl
dHMoKSA9IDA7CiAgdmlydHVhbCBuc0lTdHlsZVNoZWV0KiBHZXRPdmVycmlkZVN0eWxlU2hlZXRB
dChQUkludDMyIGFJbmRleCkgPSAwOwoKCiAgdmlydHVhbCB2b2lkIEFkZERvY1N0eWxlU2hlZXQo
bnNJU3R5bGVTaGVldCogYVNoZWV0LCBuc0lEb2N1bWVudCogYURvY3VtZW50KSA9IDA7CiAgdmly
dHVhbCB2b2lkIFJlbW92ZURvY1N0eWxlU2hlZXQobnNJU3R5bGVTaGVldCogYVNoZWV0KSA9IDA7
CiAgdmlydHVhbCBQUkludDMyIEdldE51bWJlck9mRG9jU3R5bGVTaGVldHMoKSA9IDA7CiAgdmly
dHVhbCBuc0lTdHlsZVNoZWV0KiBHZXREb2NTdHlsZVNoZWV0QXQoUFJJbnQzMiBhSW5kZXgpID0g
MDsKCiAgdmlydHVhbCB2b2lkIEFwcGVuZEJhY2tzdG9wU3R5bGVTaGVldChuc0lTdHlsZVNoZWV0
KiBhU2hlZXQpID0gMDsKICB2aXJ0dWFsIHZvaWQgSW5zZXJ0QmFja3N0b3BTdHlsZVNoZWV0QWZ0
ZXIobnNJU3R5bGVTaGVldCogYVNoZWV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lTdHlsZVNoZWV0KiBhQWZ0ZXJTaGVldCkgPSAwOwogIHZpcnR1YWwg
dm9pZCBJbnNlcnRCYWNrc3RvcFN0eWxlU2hlZXRCZWZvcmUobnNJU3R5bGVTaGVldCogYVNoZWV0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVT
aGVldCogYUJlZm9yZVNoZWV0KSA9IDA7CiAgdmlydHVhbCB2b2lkIFJlbW92ZUJhY2tzdG9wU3R5
bGVTaGVldChuc0lTdHlsZVNoZWV0KiBhU2hlZXQpID0gMDsKICB2aXJ0dWFsIFBSSW50MzIgR2V0
TnVtYmVyT2ZCYWNrc3RvcFN0eWxlU2hlZXRzKCkgPSAwOwogIHZpcnR1YWwgbnNJU3R5bGVTaGVl
dCogR2V0QmFja3N0b3BTdHlsZVNoZWV0QXQoUFJJbnQzMiBhSW5kZXgpID0gMDsKICB2aXJ0dWFs
IHZvaWQgUmVwbGFjZUJhY2tzdG9wU3R5bGVTaGVldHMobnNJU3VwcG9ydHNBcnJheSogYU5ld1No
ZWV0cykgPSAwOwoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRW5hYmxlUXVpcmtTdHlsZVNoZWV0KFBS
Qm9vbCBhRW5hYmxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE5vdGlmeVN0eWxlU2hlZXRT
dGF0ZUNoYW5nZWQoUFJCb29sIGFEaXNhYmxlZCkgPSAwOwoKCiAgdmlydHVhbCBuc0lTdHlsZUNv
bnRleHQqIFJlc29sdmVTdHlsZUZvcihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNvbnRl
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNv
bnRleHQqIGFQYXJlbnRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJCb29sIGFGb3JjZVVuaXF1ZSA9IDApID0gMDsKCgogIHZpcnR1YWwgbnNJU3R5
bGVDb250ZXh0KiBSZXNvbHZlUHNldWRvU3R5bGVGb3IobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUNvbnRlbnQqIGFQYXJlbnRDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYVBzZXVkb1RhZywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVBhcmVudENv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
UkJvb2wgYUZvcmNlVW5pcXVlID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSUNTU1BzZXVkb0NvbXBhcmF0b3IqIGFDb21wYXJhdG9yID0gMCkg
PSAwOwoKCgoKICB2aXJ0dWFsIG5zSVN0eWxlQ29udGV4dCogUHJvYmVQc2V1ZG9TdHlsZUZvcihu
c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFQYXJlbnRDb250ZW50LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFQc2V1ZG9UYWcs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVD
b250ZXh0KiBhUGFyZW50Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUkJvb2wgYUZvcmNlVW5pcXVlID0gMCkgPSAwOwoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgUmVQYXJlbnRTdHlsZUNvbnRleHQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqIGFT
dHlsZUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVD
b250ZXh0KiBhTmV3UGFyZW50Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lTdHlsZUNvbnRleHQqKiBhTmV3U3R5bGVDb250ZXh0KSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEhhc1N0YXRlRGVwZW5kZW50U3R5bGUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFD
b250ZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnN0cnVjdFJvb3RGcmFtZShuc0lQ
cmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lDb250ZW50KiBhRG9jRWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJRnJhbWUqJiBhRnJhbWVTdWJUcmVlKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
UmVjb25zdHJ1Y3REb2NFbGVtZW50SGllcmFyY2h5KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRl
eHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGVudEFwcGVuZGVkKG5zSVByZXNDb250
ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVu
dCogYUNvbnRhaW5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFOZXdJ
bmRleEluQ29udGFpbmVyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBDb250ZW50SW5zZXJ0ZWQo
bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lDb250ZW50KiBhQ29udGFpbmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUNvbnRlbnQqIGFDaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFJ
bmRleEluQ29udGFpbmVyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBDb250ZW50UmVwbGFjZWQo
bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lDb250ZW50KiBhQ29udGFpbmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUNvbnRlbnQqIGFPbGRDaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250
ZW50KiBhTmV3Q2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhSW5k
ZXhJbkNvbnRhaW5lcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGVudFJlbW92ZWQobnNJ
UHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUNvbnRlbnQqIGFDb250YWluZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250
ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFJbmRleElu
Q29udGFpbmVyKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGVudENoYW5nZWQobnNJUHJl
c0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNv
bnRlbnQqIGFDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMq
IGFTdWJDb250ZW50KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBDb250ZW50U3RhdGVzQ2hhbmdl
ZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJQ29udGVudCogYUNvbnRlbnQxLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJQ29udGVudCogYUNvbnRlbnQyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBB
dHRyaWJ1dGVDaGFuZ2VkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDaGlsZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJJbnQzMiBhTmFtZVNwYWNlSUQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBSSW50MzIgYUhpbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3R5bGVSdWxlQ2hhbmdl
ZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lTdHlsZVNoZWV0KiBhU3R5bGVTaGVldCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJU3R5bGVSdWxlKiBhU3R5bGVSdWxlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUkludDMyIGFIaW50KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTdHlsZVJ1bGVBZGRl
ZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJU3R5bGVTaGVldCogYVN0eWxlU2hlZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lTdHlsZVJ1bGUqIGFTdHlsZVJ1bGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFN0eWxl
UnVsZVJlbW92ZWQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNJU3R5bGVTaGVldCogYVN0eWxlU2hlZXQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSVN0eWxlUnVsZSogYVN0eWxlUnVsZSkgPSAwOwoKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgQ2FudFJlbmRlclJlcGxhY2VkRWxlbWVudChuc0lQcmVzQ29udGV4dCog
YVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lG
cmFtZSogYUZyYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZUNvbnRpbnVpbmdG
cmFtZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJRnJhbWUqIGFQYXJlbnRGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lGcmFtZSoqIGFDb250aW51aW5nRnJhbWUpID0gMDsKIyAyMTQgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZVNldC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRmlu
ZFByaW1hcnlGcmFtZUZvcihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZU1hbmFnZXIqIGFGcmFtZU1hbmFnZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDb250ZW50LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSoqIGFGcmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNGaW5kRnJhbWVIaW50KiBhSGludD0wKSA9IDA7CgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTdHlsZVJ1bGVTdXBwbGllcihuc0lTdHlsZVJ1bGVTdXBw
bGllciogYVN1cHBsaWVyKT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3R5bGVSdWxlU3VwcGxp
ZXIobnNJU3R5bGVSdWxlU3VwcGxpZXIqKiBhU3VwcGxpZXIpPTA7CgogIHZpcnR1YWwgdm9pZCBM
aXN0KEZJTEUqIG91dCA9IHN0ZG91dCwgUFJJbnQzMiBhSW5kZW50ID0gMCkgPSAwOwogIHZpcnR1
YWwgdm9pZCBMaXN0Q29udGV4dHMobnNJU3R5bGVDb250ZXh0KiBhUm9vdENvbnRleHQsIEZJTEUq
IG91dCA9IHN0ZG91dCwgUFJJbnQzMiBhSW5kZW50ID0gMCkgPSAwOwoKICB2aXJ0dWFsIHZvaWQg
U2l6ZU9mKG5zSVNpemVPZkhhbmRsZXIgKmFTaXplb2ZIYW5kbGVyLCBQUlVpbnQzMiAmYVNpemUp
ID0gMDsKICB2aXJ0dWFsIHZvaWQgUmVzZXRVbmlxdWVTdHlsZUl0ZW1zKHZvaWQpID0gMDsKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEF0dHJpYnV0ZUFmZmVjdHNTdHlsZShuc0lBdG9tICphQXR0cmli
dXRlLCBuc0lDb250ZW50ICphQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUkJvb2wgJmFBZmZlY3RzKSA9IDA7CiMgMjQ2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJU3R5bGVTZXQuaCIKfTsKCmV4dGVybiBuc3Jlc3VsdAogIE5TX05ld1N0eWxlU2V0KG5z
SVN0eWxlU2V0KiogYUluc3RhbmNlUHRyUmVzdWx0KTsKCgpjbGFzcyBuc1VuaXF1ZVN0eWxlSXRl
bXMgOiBwcml2YXRlIG5zVm9pZEFycmF5CnsKcHVibGljIDoKCiAgc3RhdGljIG5zVW5pcXVlU3R5
bGVJdGVtcyAqR2V0VW5pcXVlU3R5bGVJdGVtcyggdm9pZCApewogICAgaWYobUluc3RhbmNlID09
IDApewoKCgogICAgICBuZXcgbnNVbmlxdWVTdHlsZUl0ZW1zOwoKICAgICAge307CgoKCiAgICB9
CiAgICByZXR1cm4gbUluc3RhbmNlOwogIH0KCiAgdm9pZCAqR2V0SXRlbSh2b2lkICphUHRyKXsK
ICAgIFBSSW50MzIgaW5kZXggPSBuc1ZvaWRBcnJheTo6SW5kZXhPZihhUHRyKTsKICAgIGlmKCBp
bmRleCAhPSAtMSl7CiAgICAgIHJldHVybiBuc1ZvaWRBcnJheTo6RWxlbWVudEF0KGluZGV4KTsK
ICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAwOwogICAgfQogIH0KCiAgUFJCb29sIEFkZEl0ZW0o
dm9pZCAqYVB0cil7CiAgICBpZihuc1ZvaWRBcnJheTo6SW5kZXhPZihhUHRyKSA9PSAtMSl7CiAg
ICAgIHJldHVybiBuc1ZvaWRBcnJheTo6QXBwZW5kRWxlbWVudChhUHRyKTsKICAgIH0gZWxzZSB7
CiAgICAgIHJldHVybiAwOwogICAgfQogIH0KCiAgUFJCb29sIFJlbW92ZUl0ZW0odm9pZCAqYVB0
cil7CiAgICByZXR1cm4gbnNWb2lkQXJyYXk6OlJlbW92ZUVsZW1lbnQoYVB0cik7CiAgfQoKICBQ
UkludDMyIENvdW50KHZvaWQpewogICAgcmV0dXJuIG5zVm9pZEFycmF5OjpDb3VudCgpOwogIH0K
CiAgdm9pZCBDbGVhcih2b2lkKXsKICAgIG5zVm9pZEFycmF5OjpDbGVhcigpOwogIH0KcHJvdGVj
dGVkOgoKICBuc1VuaXF1ZVN0eWxlSXRlbXMoIGNvbnN0IG5zVW5pcXVlU3R5bGVJdGVtcyYgc3Jj
KTsKICBuc1VuaXF1ZVN0eWxlSXRlbXMmIG9wZXJhdG9yID0oY29uc3QgbnNVbmlxdWVTdHlsZUl0
ZW1zJiBzcmMpOwoKCiAgbnNVbmlxdWVTdHlsZUl0ZW1zKHZvaWQpIDogbnNWb2lkQXJyYXkoKXsK
ICAgIHt9OwogICAgbUluc3RhbmNlPXRoaXM7CiAgfQoKICBzdGF0aWMgbnNVbmlxdWVTdHlsZUl0
ZW1zICptSW5zdGFuY2U7Cn07CiMgMzIxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5
bGVTZXQuaCIKc3RydWN0IG5zRmluZEZyYW1lSGludAp7CiAgbnNJRnJhbWUgKm1QcmltYXJ5RnJh
bWVGb3JQcmV2U2libGluZzsKICBuc0ZpbmRGcmFtZUhpbnQoKSB7CiAgICBtUHJpbWFyeUZyYW1l
Rm9yUHJldlNpYmxpbmcgPSAwOwogIH07Cn07CiMgMzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lTdHlsZUNvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NP
TVB0ci5oIiAxCiMgMzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZUNvbnRleHQu
aCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lMYW5ndWFnZUF0b20uaCIgMQoj
IDM5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0LmgiIDIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIgMQojIDQwICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0LmgiIDIKCmNsYXNzIG5zSVNpemVPZkhhbmRsZXI7
CgpjbGFzcyBuc0lGcmFtZTsKY2xhc3MgbnNJUHJlc0NvbnRleHQ7CmNsYXNzIG5zSVN1cHBvcnRz
QXJyYXk7CmNsYXNzIG5zSVN0eWxlQ29udGV4dDsKY2xhc3MgbnNBdXRvU3R5bGVTdHJ1Y3Q7CgoK
aW5saW5lIHZvaWQgQ2FsY1NpZGVzRm9yKGNvbnN0IG5zSUZyYW1lKiBhRnJhbWUsIGNvbnN0IG5z
U3R5bGVTaWRlcyYgYVNpZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50OCBhU3Bh
Y2luZywKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zY29vcmQqIGFFbnVtVGFibGUs
IFBSSW50MzIgYU51bUVudW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgbnNNYXJnaW4mIGFS
ZXN1bHQpOwoKCgoKc3RydWN0IG5zU3R5bGVGb250IDogcHVibGljIG5zU3R5bGVTdHJ1Y3Qgewog
IG5zU3R5bGVGb250KHZvaWQpCiAgICA6IG1Gb250KDAsIDAsIDAsCiAgICAgICAgICAgIDQwMCwg
MHgwLCAwKSwKICAgICAgbUZpeGVkRm9udCgwLCAwLCAwLAogICAgICAgICAgICAgICAgIDQwMCwg
MHgwLCAwKQogICAge30KICB+bnNTdHlsZUZvbnQodm9pZCkge307CgogIG5zRm9udCBtRm9udDsK
ICBuc0ZvbnQgbUZpeGVkRm9udDsKICBQUlVpbnQ4IG1GbGFnczsKCnByb3RlY3RlZDoKICBuc1N0
eWxlRm9udChjb25zdCBuc0ZvbnQmIGFWYXJpYWJsZUZvbnQsIGNvbnN0IG5zRm9udCYgYUZpeGVk
Rm9udCkKICA6IG1Gb250KGFWYXJpYWJsZUZvbnQpLAogICAgbUZpeGVkRm9udChhRml4ZWRGb250
KQogIHt9CiAgbnNTdHlsZUZvbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCk7Cn07CgoK
c3RydWN0IG5zU3R5bGVDb2xvciA6IHB1YmxpYyBuc1N0eWxlU3RydWN0IHsKICBuc1N0eWxlQ29s
b3Iodm9pZCkge30KICB+bnNTdHlsZUNvbG9yKHZvaWQpIHt9CgogIG5zY29sb3IgbUNvbG9yOwoK
ICBQUlVpbnQ4IG1CYWNrZ3JvdW5kQXR0YWNobWVudDsKICBQUlVpbnQ4IG1CYWNrZ3JvdW5kRmxh
Z3M7CiAgUFJVaW50OCBtQmFja2dyb3VuZFJlcGVhdDsKCiAgbnNjb2xvciBtQmFja2dyb3VuZENv
bG9yOwogIG5zY29vcmQgbUJhY2tncm91bmRYUG9zaXRpb247CiAgbnNjb29yZCBtQmFja2dyb3Vu
ZFlQb3NpdGlvbjsKICBuc1N0cmluZyBtQmFja2dyb3VuZEltYWdlOwoKICBQUlVpbnQ4IG1DdXJz
b3I7CiAgbnNTdHJpbmcgbUN1cnNvckltYWdlOwogIGZsb2F0IG1PcGFjaXR5OwoKICBQUkJvb2wg
QmFja2dyb3VuZElzVHJhbnNwYXJlbnQoKSBjb25zdCB7cmV0dXJuIChtQmFja2dyb3VuZEZsYWdz
ICYKICAgICgweDAxIHwgMHgwMikpID09CiAgICAoMHgwMSB8IDB4MDIpO30KfTsKIyAxMTQgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZUNvbnRleHQuaCIKc3RydWN0IG5zU3R5bGVN
YXJnaW46IHB1YmxpYyBuc1N0eWxlU3RydWN0IHsKICBuc1N0eWxlTWFyZ2luKHZvaWQpIHt9Owog
IH5uc1N0eWxlTWFyZ2luKHZvaWQpIHt9OwoKICBuc1N0eWxlU2lkZXMgbU1hcmdpbjsKCiAgUFJC
b29sIEdldE1hcmdpbihuc01hcmdpbiYgYU1hcmdpbikgY29uc3QKICB7CiAgICBpZiAobUhhc0Nh
Y2hlZE1hcmdpbikgewogICAgICBhTWFyZ2luID0gbUNhY2hlZE1hcmdpbjsKICAgICAgcmV0dXJu
IDE7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CgoKICB2b2lkIENhbGNNYXJnaW5Gb3IoY29uc3Qg
bnNJRnJhbWUqIGFGcmFtZSwgbnNNYXJnaW4mIGFNYXJnaW4pIGNvbnN0CiAgewogICAgaWYgKG1I
YXNDYWNoZWRNYXJnaW4pIHsKICAgICAgYU1hcmdpbiA9IG1DYWNoZWRNYXJnaW47CiAgICB9IGVs
c2UgewogICAgICBDYWxjU2lkZXNGb3IoYUZyYW1lLCBtTWFyZ2luLCAwLCAwLCAwLCBhTWFyZ2lu
KTsKICAgIH0KICB9CgpmcmllbmQgY2xhc3MgU3R5bGVNYXJnaW5CbG9iOwpwcm90ZWN0ZWQ6CiAg
UFJQYWNrZWRCb29sIG1IYXNDYWNoZWRNYXJnaW47CiAgbnNNYXJnaW4gbUNhY2hlZE1hcmdpbjsK
fTsKCgpzdHJ1Y3QgbnNTdHlsZVBhZGRpbmc6IHB1YmxpYyBuc1N0eWxlU3RydWN0IHsKICBuc1N0
eWxlUGFkZGluZyh2b2lkKSB7fTsKICB+bnNTdHlsZVBhZGRpbmcodm9pZCkge307CgogIG5zU3R5
bGVTaWRlcyBtUGFkZGluZzsKCiAgUFJCb29sIEdldFBhZGRpbmcobnNNYXJnaW4mIGFQYWRkaW5n
KSBjb25zdAogIHsKICAgIGlmIChtSGFzQ2FjaGVkUGFkZGluZykgewogICAgICBhUGFkZGluZyA9
IG1DYWNoZWRQYWRkaW5nOwogICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJldHVybiAwOwogIH0K
CgogIHZvaWQgQ2FsY1BhZGRpbmdGb3IoY29uc3QgbnNJRnJhbWUqIGFGcmFtZSwgbnNNYXJnaW4m
IGFQYWRkaW5nKSBjb25zdAogIHsKICAgIGlmIChtSGFzQ2FjaGVkUGFkZGluZykgewogICAgICBh
UGFkZGluZyA9IG1DYWNoZWRQYWRkaW5nOwogICAgfSBlbHNlIHsKICAgICAgQ2FsY1NpZGVzRm9y
KGFGcmFtZSwgbVBhZGRpbmcsIDEsIDAsIDAsIGFQYWRkaW5nKTsKICAgIH0KICB9CgpmcmllbmQg
Y2xhc3MgU3R5bGVQYWRkaW5nQmxvYjsKcHJvdGVjdGVkOgogIFBSUGFja2VkQm9vbCBtSGFzQ2Fj
aGVkUGFkZGluZzsKICBuc01hcmdpbiBtQ2FjaGVkUGFkZGluZzsKfTsKCgpzdHJ1Y3QgbnNTdHls
ZUJvcmRlcjogcHVibGljIG5zU3R5bGVTdHJ1Y3QgewogIG5zU3R5bGVCb3JkZXIodm9pZCkge307
CiAgfm5zU3R5bGVCb3JkZXIodm9pZCkge307CgogIG5zU3R5bGVTaWRlcyBtQm9yZGVyOwogIG5z
U3R5bGVTaWRlcyBtQm9yZGVyUmFkaXVzOwogIFBSVWludDggbUZsb2F0RWRnZTsKCiAgUFJCb29s
IEdldEJvcmRlcihuc01hcmdpbiYgYUJvcmRlcikgY29uc3QKICB7CiAgICBpZiAobUhhc0NhY2hl
ZEJvcmRlcikgewogICAgICBhQm9yZGVyID0gbUNhY2hlZEJvcmRlcjsKICAgICAgcmV0dXJuIDE7
CiAgICB9CiAgICByZXR1cm4gMDsKICB9CgogIFBSVWludDggR2V0Qm9yZGVyU3R5bGUoUFJVaW50
OCBhU2lkZSkgY29uc3QKICB7CiAgICB7fTsKICAgIHJldHVybiAobUJvcmRlclN0eWxlW2FTaWRl
XSAmIDB4M0YpOwogIH0KCiAgdm9pZCBTZXRCb3JkZXJTdHlsZShQUlVpbnQ4IGFTaWRlLCBQUlVp
bnQ4IGFTdHlsZSkKICB7CiAgICB7fTsKICAgIG1Cb3JkZXJTdHlsZVthU2lkZV0gJj0gfjB4M0Y7
CiAgICBtQm9yZGVyU3R5bGVbYVNpZGVdIHw9IChhU3R5bGUgJiAweDNGKTsKCiAgfQoKCiAgUFJC
b29sIEdldEJvcmRlckNvbG9yKFBSVWludDggYVNpZGUsIG5zY29sb3ImIGFDb2xvcikgY29uc3QK
ICB7CiAgICB7fTsKICAgIGlmICgobUJvcmRlclN0eWxlW2FTaWRlXSAmIDB4NDApID09IDApIHsK
ICAgICAgYUNvbG9yID0gbUJvcmRlckNvbG9yW2FTaWRlXTsKICAgICAgcmV0dXJuIDE7CiAgICB9
CiAgICByZXR1cm4gMDsKICB9CgogIHZvaWQgU2V0Qm9yZGVyQ29sb3IoUFJVaW50OCBhU2lkZSwg
bnNjb2xvciBhQ29sb3IpCiAgewogICAge307CiAgICBtQm9yZGVyQ29sb3JbYVNpZGVdID0gYUNv
bG9yOwogICAgbUJvcmRlclN0eWxlW2FTaWRlXSAmPSB+MHg0MDsKICAgIG1Cb3JkZXJTdHlsZVth
U2lkZV0gfD0gMHg4MDsKICB9CgogIHZvaWQgU2V0Qm9yZGVyVHJhbnNwYXJlbnQoUFJVaW50OCBh
U2lkZSkKICB7CiAgICB7fTsKICAgIG1Cb3JkZXJTdHlsZVthU2lkZV0gfD0gKDB4ODAgfCAweDQw
KTsKICB9CgogIHZvaWQgVW5zZXRCb3JkZXJDb2xvcihQUlVpbnQ4IGFTaWRlKQogIHsKICAgIHt9
OwogICAgbUJvcmRlclN0eWxlW2FTaWRlXSAmPSAweDNGOwogIH0KCgogIHZvaWQgQ2FsY0JvcmRl
ckZvcihjb25zdCBuc0lGcmFtZSogYUZyYW1lLCBuc01hcmdpbiYgYUJvcmRlcikgY29uc3QKICB7
CiAgICBpZiAobUhhc0NhY2hlZEJvcmRlcikgewogICAgICBhQm9yZGVyID0gbUNhY2hlZEJvcmRl
cjsKICAgIH0gZWxzZSB7CiAgICAgIENhbGNTaWRlc0ZvcihhRnJhbWUsIG1Cb3JkZXIsIDIsIG1C
b3JkZXJXaWR0aHMsIDMsIGFCb3JkZXIpOwogICAgfQogIH0KCmZyaWVuZCBjbGFzcyBTdHlsZUJv
cmRlckJsb2I7CnByb3RlY3RlZDoKICBQUlBhY2tlZEJvb2wgbUhhc0NhY2hlZEJvcmRlcjsKICBu
c01hcmdpbiBtQ2FjaGVkQm9yZGVyOwoKICBQUlVpbnQ4IG1Cb3JkZXJTdHlsZVs0XTsKICBuc2Nv
bG9yIG1Cb3JkZXJDb2xvcls0XTsKCgogIG5zY29vcmQgbUJvcmRlcldpZHRoc1szXTsKfTsKCgpz
dHJ1Y3QgbnNTdHlsZUJvcmRlclBhZGRpbmc6IHB1YmxpYyBuc1N0eWxlU3RydWN0IHsKICBuc1N0
eWxlQm9yZGVyUGFkZGluZyh2b2lkKSB7IG1IYXNDYWNoZWRCb3JkZXJQYWRkaW5nID0gMDsgfTsK
ICB+bnNTdHlsZUJvcmRlclBhZGRpbmcodm9pZCkge307CgogIFBSQm9vbCBHZXRCb3JkZXJQYWRk
aW5nKG5zTWFyZ2luJiBhQm9yZGVyUGFkZGluZykgY29uc3QgewogICAgaWYgKG1IYXNDYWNoZWRC
b3JkZXJQYWRkaW5nKSB7CiAgICAgIGFCb3JkZXJQYWRkaW5nID0gbUNhY2hlZEJvcmRlclBhZGRp
bmc7CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcmV0dXJuIDA7CiAgfQoKICB2b2lkIFNldEJv
cmRlclBhZGRpbmcobnNNYXJnaW4gYUJvcmRlclBhZGRpbmcpIHsKICAgIG1DYWNoZWRCb3JkZXJQ
YWRkaW5nID0gYUJvcmRlclBhZGRpbmc7CiAgICBtSGFzQ2FjaGVkQm9yZGVyUGFkZGluZyA9IDE7
CiAgfQoKcHJvdGVjdGVkOgogIG5zTWFyZ2luIG1DYWNoZWRCb3JkZXJQYWRkaW5nOwogIFBSUGFj
a2VkQm9vbCBtSGFzQ2FjaGVkQm9yZGVyUGFkZGluZzsKfTsKCgpzdHJ1Y3QgbnNTdHlsZU91dGxp
bmU6IHB1YmxpYyBuc1N0eWxlU3RydWN0IHsKICBuc1N0eWxlT3V0bGluZSh2b2lkKSB7fTsKICB+
bnNTdHlsZU91dGxpbmUodm9pZCkge307CgogIG5zU3R5bGVTaWRlcyBtT3V0bGluZVJhZGl1czsK
CgogIG5zU3R5bGVDb29yZCBtT3V0bGluZVdpZHRoOwoKICBQUkJvb2wgR2V0T3V0bGluZVdpZHRo
KG5zY29vcmQmIGFXaWR0aCkgY29uc3QKICB7CiAgICBpZiAobUhhc0NhY2hlZE91dGxpbmUpIHsK
ICAgICAgYVdpZHRoID0gbUNhY2hlZE91dGxpbmVXaWR0aDsKICAgICAgcmV0dXJuIDE7CiAgICB9
CiAgICByZXR1cm4gMDsKICB9CgogIFBSVWludDggR2V0T3V0bGluZVN0eWxlKHZvaWQpIGNvbnN0
CiAgewogICAgcmV0dXJuIChtT3V0bGluZVN0eWxlICYgMHgzRik7CiAgfQoKICB2b2lkIFNldE91
dGxpbmVTdHlsZShQUlVpbnQ4IGFTdHlsZSkKICB7CiAgICBtT3V0bGluZVN0eWxlICY9IH4weDNG
OwogICAgbU91dGxpbmVTdHlsZSB8PSAoYVN0eWxlICYgMHgzRik7CiAgfQoKCiAgUFJCb29sIEdl
dE91dGxpbmVDb2xvcihuc2NvbG9yJiBhQ29sb3IpIGNvbnN0CiAgewogICAgaWYgKChtT3V0bGlu
ZVN0eWxlICYgMHg0MCkgPT0gMCkgewogICAgICBhQ29sb3IgPSBtT3V0bGluZUNvbG9yOwogICAg
ICByZXR1cm4gMTsKICAgIH0KICAgIHJldHVybiAwOwogIH0KCiAgdm9pZCBTZXRPdXRsaW5lQ29s
b3IobnNjb2xvciBhQ29sb3IpCiAgewogICAgbU91dGxpbmVDb2xvciA9IGFDb2xvcjsKICAgIG1P
dXRsaW5lU3R5bGUgJj0gfjB4NDA7CiAgICBtT3V0bGluZVN0eWxlIHw9IDB4ODA7CiAgfQoKICB2
b2lkIFNldE91dGxpbmVJbnZlcnQodm9pZCkKICB7CiAgICBtT3V0bGluZVN0eWxlIHw9ICgweDgw
IHwgMHg0MCk7CiAgfQoKZnJpZW5kIGNsYXNzIFN0eWxlT3V0bGluZUJsb2I7CnByb3RlY3RlZDoK
ICBQUlBhY2tlZEJvb2wgbUhhc0NhY2hlZE91dGxpbmU7CiAgbnNjb29yZCBtQ2FjaGVkT3V0bGlu
ZVdpZHRoOwoKICBQUlVpbnQ4IG1PdXRsaW5lU3R5bGU7CiAgbnNjb2xvciBtT3V0bGluZUNvbG9y
OwoKCiAgbnNjb29yZCBtQm9yZGVyV2lkdGhzWzNdOwp9OwoKCnN0cnVjdCBuc1N0eWxlTGlzdCA6
IHB1YmxpYyBuc1N0eWxlU3RydWN0IHsKICBuc1N0eWxlTGlzdCh2b2lkKSB7fTsKICB+bnNTdHls
ZUxpc3Qodm9pZCkge307CgogIFBSVWludDggbUxpc3RTdHlsZVR5cGU7CiAgUFJVaW50OCBtTGlz
dFN0eWxlUG9zaXRpb247CiAgbnNTdHJpbmcgbUxpc3RTdHlsZUltYWdlOwp9OwoKc3RydWN0IG5z
U3R5bGVQb3NpdGlvbiA6IHB1YmxpYyBuc1N0eWxlU3RydWN0IHsKICBuc1N0eWxlUG9zaXRpb24o
dm9pZCkge307CiAgfm5zU3R5bGVQb3NpdGlvbih2b2lkKSB7fTsKCiAgUFJVaW50OCBtUG9zaXRp
b247CgogIG5zU3R5bGVTaWRlcyBtT2Zmc2V0OwogIG5zU3R5bGVDb29yZCBtV2lkdGg7CiAgbnNT
dHlsZUNvb3JkIG1NaW5XaWR0aDsKICBuc1N0eWxlQ29vcmQgbU1heFdpZHRoOwogIG5zU3R5bGVD
b29yZCBtSGVpZ2h0OwogIG5zU3R5bGVDb29yZCBtTWluSGVpZ2h0OwogIG5zU3R5bGVDb29yZCBt
TWF4SGVpZ2h0OwogIFBSVWludDggbUJveFNpemluZzsKCiAgbnNTdHlsZUNvb3JkIG1aSW5kZXg7
CgogIFBSQm9vbCBJc0Fic29sdXRlbHlQb3NpdGlvbmVkKCkgY29uc3Qge3JldHVybiAoMiA9PSBt
UG9zaXRpb24pIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICgzID09IG1Qb3NpdGlvbik7fQoKICBQUkJvb2wgSXNQb3NpdGlvbmVkKCkgY29uc3Qge3Jl
dHVybiBJc0Fic29sdXRlbHlQb3NpdGlvbmVkKCkgfHwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoMSA9PSBtUG9zaXRpb24pO30KfTsKCnN0cnVjdCBuc1N0eWxlVGV4dCA6
IHB1YmxpYyBuc1N0eWxlU3RydWN0IHsKICBuc1N0eWxlVGV4dCh2b2lkKSB7fTsKICB+bnNTdHls
ZVRleHQodm9pZCkge307CgogIFBSVWludDggbVRleHRBbGlnbjsKICBQUlVpbnQ4IG1UZXh0RGVj
b3JhdGlvbjsKICBQUlVpbnQ4IG1UZXh0VHJhbnNmb3JtOwogIFBSVWludDggbVdoaXRlU3BhY2U7
CgogIFBSVWludDggbVVuaWNvZGVCaWRpOwoKCiAgbnNTdHlsZUNvb3JkIG1MZXR0ZXJTcGFjaW5n
OwogIG5zU3R5bGVDb29yZCBtTGluZUhlaWdodDsKICBuc1N0eWxlQ29vcmQgbVRleHRJbmRlbnQ7
CiAgbnNTdHlsZUNvb3JkIG1Xb3JkU3BhY2luZzsKICBuc1N0eWxlQ29vcmQgbVZlcnRpY2FsQWxp
Z247CgogIFBSQm9vbCBXaGl0ZVNwYWNlSXNTaWduaWZpY2FudCgpIGNvbnN0IHsKICAgIHJldHVy
biBtV2hpdGVTcGFjZSA9PSAxOwogIH0KfTsKCnN0cnVjdCBuc1N0eWxlRGlzcGxheSA6IHB1Ymxp
YyBuc1N0eWxlU3RydWN0IHsKICBuc1N0eWxlRGlzcGxheSh2b2lkKSB7fTsKICB+bnNTdHlsZURp
c3BsYXkodm9pZCkge307CgogIFBSVWludDggbURpcmVjdGlvbjsKCiAgUFJVaW50OCBtRXhwbGlj
aXREaXJlY3Rpb24gOwoKICBQUlVpbnQ4IG1EaXNwbGF5OwogIFBSVWludDggbUZsb2F0czsKICBQ
UlVpbnQ4IG1CcmVha1R5cGU7CiAgUFJQYWNrZWRCb29sIG1CcmVha0JlZm9yZTsKICBQUlBhY2tl
ZEJvb2wgbUJyZWFrQWZ0ZXI7CiAgUFJVaW50OCBtVmlzaWJsZTsKICBQUlVpbnQ4IG1PdmVyZmxv
dzsKCiAgUFJVaW50OCBtQ2xpcEZsYWdzOwoKCgoKCgogIG5zUmVjdCBtQ2xpcDsKCiAgbnNDT01Q
dHI8bnNJTGFuZ3VhZ2VBdG9tPiBtTGFuZ3VhZ2U7CgogIFBSQm9vbCBJc0Jsb2NrTGV2ZWwoKSBj
b25zdCB7cmV0dXJuICgxID09IG1EaXNwbGF5KSB8fAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICg0ID09IG1EaXNwbGF5KSB8fAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICg4ID09IG1EaXNwbGF5KTt9CgogIFBSQm9vbCBJc0Zsb2F0aW5nKCkgY29u
c3QgewogICAgcmV0dXJuIDAgIT0gbUZsb2F0czsKICB9CgogICAgICAgIFBSQm9vbCBJc1Zpc2li
bGUoKSBjb25zdCB7CiAgICAgICAgICAgICAgICByZXR1cm4gKG1WaXNpYmxlID09IDEpOwogICAg
ICAgIH0KCiAgICAgICAgUFJCb29sIElzVmlzaWJsZU9yQ29sbGFwc2VkKCkgY29uc3QgewogICAg
ICAgICAgICAgICAgcmV0dXJuICgobVZpc2libGUgPT0gMSkgfHwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1WaXNpYmxlID09IDIpKTsKICAgICAgICB9
Cn07CgpzdHJ1Y3QgbnNTdHlsZVRhYmxlOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHls
ZVRhYmxlKHZvaWQpIHt9OwogIH5uc1N0eWxlVGFibGUodm9pZCkge307CgogIFBSVWludDggbUxh
eW91dFN0cmF0ZWd5OwogIFBSVWludDggbUZyYW1lOwogIFBSVWludDggbVJ1bGVzOwogIFBSVWlu
dDggbUJvcmRlckNvbGxhcHNlOwogIG5zU3R5bGVDb29yZCBtQm9yZGVyU3BhY2luZ1g7CiAgbnNT
dHlsZUNvb3JkIG1Cb3JkZXJTcGFjaW5nWTsKICBuc1N0eWxlQ29vcmQgbUNlbGxQYWRkaW5nOwog
IFBSVWludDggbUNhcHRpb25TaWRlOwogIFBSVWludDggbUVtcHR5Q2VsbHM7CiAgUFJJbnQzMiBt
Q29sczsKICBQUkludDMyIG1TcGFuOwogIG5zU3R5bGVDb29yZCBtU3BhbldpZHRoOwp9OwoKZW51
bSBuc1N0eWxlQ29udGVudFR5cGUgewogIGVTdHlsZUNvbnRlbnRUeXBlX1N0cmluZyA9IDEsCiAg
ZVN0eWxlQ29udGVudFR5cGVfVVJMID0gMTAsCiAgZVN0eWxlQ29udGVudFR5cGVfQXR0ciA9IDIw
LAogIGVTdHlsZUNvbnRlbnRUeXBlX0NvdW50ZXIgPSAzMCwKICBlU3R5bGVDb250ZW50VHlwZV9D
b3VudGVycyA9IDMxLAogIGVTdHlsZUNvbnRlbnRUeXBlX09wZW5RdW90ZSA9IDQwLAogIGVTdHls
ZUNvbnRlbnRUeXBlX0Nsb3NlUXVvdGUgPSA0MSwKICBlU3R5bGVDb250ZW50VHlwZV9Ob09wZW5R
dW90ZSA9IDQyLAogIGVTdHlsZUNvbnRlbnRUeXBlX05vQ2xvc2VRdW90ZSA9IDQzCn07CgpzdHJ1
Y3QgbnNTdHlsZUNvbnRlbnREYXRhIHsKICBuc1N0eWxlQ29udGVudFR5cGUgbVR5cGU7CiAgbnNT
dHJpbmcgbUNvbnRlbnQ7Cn07CgpzdHJ1Y3QgbnNTdHlsZUNvdW50ZXJEYXRhIHsKICBuc1N0cmlu
ZyBtQ291bnRlcjsKICBQUkludDMyIG1WYWx1ZTsKfTsKCgoKCnN0cnVjdCBuc1N0eWxlQ29udGVu
dDogcHVibGljIG5zU3R5bGVTdHJ1Y3QgewogIG5zU3R5bGVDb250ZW50KHZvaWQpIHsKCiAgICBt
Q29udGVudENvdW50ID0gMDsKICAgIG1Db250ZW50cyA9IDA7CiAgICBtSW5jcmVtZW50Q291bnQg
PSAwOwogICAgbUluY3JlbWVudHMgPSAwOwogICAgbVJlc2V0Q291bnQgPSAwOwogICAgbVJlc2V0
cyA9IDA7CiAgICBtUXVvdGVzQ291bnQgPSAwOwogICAgbVF1b3RlcyA9IDA7CiAgfQoKICB+bnNT
dHlsZUNvbnRlbnQodm9pZCkgewogICAgaWYgKG1Db250ZW50cykgeyBkZWxldGVbXSBtQ29udGVu
dHM7IG1Db250ZW50cyA9IDA7IH07CiAgICBpZiAobUluY3JlbWVudHMpIHsgZGVsZXRlW10gbUlu
Y3JlbWVudHM7IG1JbmNyZW1lbnRzID0gMDsgfTsKICAgIGlmIChtUmVzZXRzKSB7IGRlbGV0ZVtd
IG1SZXNldHM7IG1SZXNldHMgPSAwOyB9OwogICAgaWYgKG1RdW90ZXMpIHsgZGVsZXRlW10gbVF1
b3RlczsgbVF1b3RlcyA9IDA7IH07CiAgfQoKICBQUlVpbnQzMiBDb250ZW50Q291bnQodm9pZCkg
Y29uc3QgeyByZXR1cm4gbUNvbnRlbnRDb3VudDsgfQogIG5zcmVzdWx0IEdldENvbnRlbnRBdChQ
UlVpbnQzMiBhSW5kZXgsIG5zU3R5bGVDb250ZW50VHlwZSYgYVR5cGUsIG5zU3RyaW5nJiBhQ29u
dGVudCkgY29uc3QgewogICAgaWYgKGFJbmRleCA8IG1Db250ZW50Q291bnQpIHsKICAgICAgYVR5
cGUgPSBtQ29udGVudHNbYUluZGV4XS5tVHlwZTsKICAgICAgYUNvbnRlbnQgPSBtQ29udGVudHNb
YUluZGV4XS5tQ29udGVudDsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICByZXR1cm4gKChuc3Jl
c3VsdCkgMHg4MDA3MDA1N0wpOwogIH0KCiAgbnNyZXN1bHQgQWxsb2NhdGVDb250ZW50cyhQUlVp
bnQzMiBhQ291bnQpIHsKICAgIGlmIChhQ291bnQgIT0gbUNvbnRlbnRDb3VudCkgewogICAgICBp
ZiAobUNvbnRlbnRzKSB7IGRlbGV0ZVtdIG1Db250ZW50czsgbUNvbnRlbnRzID0gMDsgfTsKICAg
ICAgaWYgKGFDb3VudCkgewogICAgICAgIG1Db250ZW50cyA9IG5ldyBuc1N0eWxlQ29udGVudERh
dGFbYUNvdW50XTsKICAgICAgICBpZiAoISBtQ29udGVudHMpIHsKICAgICAgICAgIG1Db250ZW50
Q291bnQgPSAwOwogICAgICAgICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsKICAg
ICAgICB9CiAgICAgIH0KICAgICAgbUNvbnRlbnRDb3VudCA9IGFDb3VudDsKICAgIH0KICAgIHJl
dHVybiAwOwogIH0KCiAgbnNyZXN1bHQgU2V0Q29udGVudEF0KFBSVWludDMyIGFJbmRleCwgbnNT
dHlsZUNvbnRlbnRUeXBlIGFUeXBlLCBjb25zdCBuc1N0cmluZyYgYUNvbnRlbnQpIHsKICAgIGlm
IChhSW5kZXggPCBtQ29udGVudENvdW50KSB7CiAgICAgIG1Db250ZW50c1thSW5kZXhdLm1UeXBl
ID0gYVR5cGU7CiAgICAgIGlmIChhVHlwZSA8IGVTdHlsZUNvbnRlbnRUeXBlX09wZW5RdW90ZSkg
ewogICAgICAgIG1Db250ZW50c1thSW5kZXhdLm1Db250ZW50ID0gYUNvbnRlbnQ7CiAgICAgIH0K
ICAgICAgZWxzZSB7CiAgICAgICAgbUNvbnRlbnRzW2FJbmRleF0ubUNvbnRlbnQuVHJ1bmNhdGUo
KTsKICAgICAgfQogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiAoKG5zcmVzdWx0KSAw
eDgwMDcwMDU3TCk7CiAgfQoKICBQUlVpbnQzMiBDb3VudGVySW5jcmVtZW50Q291bnQodm9pZCkg
Y29uc3QgeyByZXR1cm4gbUluY3JlbWVudENvdW50OyB9CiAgbnNyZXN1bHQgR2V0Q291bnRlcklu
Y3JlbWVudEF0KFBSVWludDMyIGFJbmRleCwgbnNTdHJpbmcmIGFDb3VudGVyLCBQUkludDMyJiBh
SW5jcmVtZW50KSBjb25zdCB7CiAgICBpZiAoYUluZGV4IDwgbUluY3JlbWVudENvdW50KSB7CiAg
ICAgIGFDb3VudGVyID0gbUluY3JlbWVudHNbYUluZGV4XS5tQ291bnRlcjsKICAgICAgYUluY3Jl
bWVudCA9IG1JbmNyZW1lbnRzW2FJbmRleF0ubVZhbHVlOwogICAgICByZXR1cm4gMDsKICAgIH0K
ICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDU3TCk7CiAgfQoKICBuc3Jlc3VsdCBBbGxv
Y2F0ZUNvdW50ZXJJbmNyZW1lbnRzKFBSVWludDMyIGFDb3VudCkgewogICAgaWYgKGFDb3VudCAh
PSBtSW5jcmVtZW50Q291bnQpIHsKICAgICAgaWYgKG1JbmNyZW1lbnRzKSB7IGRlbGV0ZVtdIG1J
bmNyZW1lbnRzOyBtSW5jcmVtZW50cyA9IDA7IH07CiAgICAgIGlmIChhQ291bnQpIHsKICAgICAg
ICBtSW5jcmVtZW50cyA9IG5ldyBuc1N0eWxlQ291bnRlckRhdGFbYUNvdW50XTsKICAgICAgICBp
ZiAoISBtSW5jcmVtZW50cykgewogICAgICAgICAgbUluY3JlbWVudENvdW50ID0gMDsKICAgICAg
ICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7CiAgICAgICAgfQogICAgICB9CiAg
ICAgIG1JbmNyZW1lbnRDb3VudCA9IGFDb3VudDsKICAgIH0KICAgIHJldHVybiAwOwogIH0KCiAg
bnNyZXN1bHQgU2V0Q291bnRlckluY3JlbWVudEF0KFBSVWludDMyIGFJbmRleCwgY29uc3QgbnNT
dHJpbmcmIGFDb3VudGVyLCBQUkludDMyIGFJbmNyZW1lbnQpIHsKICAgIGlmIChhSW5kZXggPCBt
SW5jcmVtZW50Q291bnQpIHsKICAgICAgbUluY3JlbWVudHNbYUluZGV4XS5tQ291bnRlciA9IGFD
b3VudGVyOwogICAgICBtSW5jcmVtZW50c1thSW5kZXhdLm1WYWx1ZSA9IGFJbmNyZW1lbnQ7CiAg
ICAgIHJldHVybiAwOwogICAgfQogICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwNTdMKTsK
ICB9CgogIFBSVWludDMyIENvdW50ZXJSZXNldENvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1S
ZXNldENvdW50OyB9CiAgbnNyZXN1bHQgR2V0Q291bnRlclJlc2V0QXQoUFJVaW50MzIgYUluZGV4
LCBuc1N0cmluZyYgYUNvdW50ZXIsIFBSSW50MzImIGFWYWx1ZSkgY29uc3QgewogICAgaWYgKGFJ
bmRleCA8IG1SZXNldENvdW50KSB7CiAgICAgIGFDb3VudGVyID0gbVJlc2V0c1thSW5kZXhdLm1D
b3VudGVyOwogICAgICBhVmFsdWUgPSBtUmVzZXRzW2FJbmRleF0ubVZhbHVlOwogICAgICByZXR1
cm4gMDsKICAgIH0KICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDU3TCk7CiAgfQoKICBu
c3Jlc3VsdCBBbGxvY2F0ZUNvdW50ZXJSZXNldHMoUFJVaW50MzIgYUNvdW50KSB7CiAgICBpZiAo
YUNvdW50ICE9IG1SZXNldENvdW50KSB7CiAgICAgIGlmIChtUmVzZXRzKSB7IGRlbGV0ZVtdIG1S
ZXNldHM7IG1SZXNldHMgPSAwOyB9OwogICAgICBpZiAoYUNvdW50KSB7CiAgICAgICAgbVJlc2V0
cyA9IG5ldyBuc1N0eWxlQ291bnRlckRhdGFbYUNvdW50XTsKICAgICAgICBpZiAoISBtUmVzZXRz
KSB7CiAgICAgICAgICBtUmVzZXRDb3VudCA9IDA7CiAgICAgICAgICByZXR1cm4gKChuc3Jlc3Vs
dCkgMHg4MDA3MDAwZUwpOwogICAgICAgIH0KICAgICAgfQogICAgICBtUmVzZXRDb3VudCA9IGFD
b3VudDsKICAgIH0KICAgIHJldHVybiAwOwogIH0KCiAgbnNyZXN1bHQgU2V0Q291bnRlclJlc2V0
QXQoUFJVaW50MzIgYUluZGV4LCBjb25zdCBuc1N0cmluZyYgYUNvdW50ZXIsIFBSSW50MzIgYVZh
bHVlKSB7CiAgICBpZiAoYUluZGV4IDwgbVJlc2V0Q291bnQpIHsKICAgICAgbVJlc2V0c1thSW5k
ZXhdLm1Db3VudGVyID0gYUNvdW50ZXI7CiAgICAgIG1SZXNldHNbYUluZGV4XS5tVmFsdWUgPSBh
VmFsdWU7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAw
NzAwNTdMKTsKICB9CgogIG5zU3R5bGVDb29yZCBtTWFya2VyT2Zmc2V0OwoKICBQUlVpbnQzMiBR
dW90ZXNDb3VudCh2b2lkKSBjb25zdCB7IHJldHVybiBtUXVvdGVzQ291bnQ7IH0KICBuc3Jlc3Vs
dCBHZXRRdW90ZXNBdChQUlVpbnQzMiBhSW5kZXgsIG5zU3RyaW5nJiBhT3BlbiwgbnNTdHJpbmcm
IGFDbG9zZSkgY29uc3QgewogICAgaWYgKGFJbmRleCA8IG1RdW90ZXNDb3VudCkgewogICAgICBh
SW5kZXggKj0gMjsKICAgICAgYU9wZW4gPSBtUXVvdGVzW2FJbmRleF07CiAgICAgIGFDbG9zZSA9
IG1RdW90ZXNbKythSW5kZXhdOwogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiAoKG5z
cmVzdWx0KSAweDgwMDcwMDU3TCk7CiAgfQoKICBuc3Jlc3VsdCBBbGxvY2F0ZVF1b3RlcyhQUlVp
bnQzMiBhQ291bnQpIHsKICAgIGlmIChhQ291bnQgIT0gbVF1b3Rlc0NvdW50KSB7CiAgICAgIGlm
IChtUXVvdGVzKSB7IGRlbGV0ZVtdIG1RdW90ZXM7IG1RdW90ZXMgPSAwOyB9OwogICAgICBpZiAo
YUNvdW50KSB7CiAgICAgICAgbVF1b3RlcyA9IG5ldyBuc1N0cmluZ1thQ291bnQgKiAyXTsKICAg
ICAgICBpZiAoISBtUXVvdGVzKSB7CiAgICAgICAgICBtUXVvdGVzQ291bnQgPSAwOwogICAgICAg
ICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsKICAgICAgICB9CiAgICAgIH0KICAg
ICAgbVF1b3Rlc0NvdW50ID0gYUNvdW50OwogICAgfQogICAgcmV0dXJuIDA7CiAgfQoKICBuc3Jl
c3VsdCBTZXRRdW90ZXNBdChQUlVpbnQzMiBhSW5kZXgsIGNvbnN0IG5zU3RyaW5nJiBhT3Blbiwg
Y29uc3QgbnNTdHJpbmcmIGFDbG9zZSkgewogICAgaWYgKGFJbmRleCA8IG1RdW90ZXNDb3VudCkg
ewogICAgICBhSW5kZXggKj0gMjsKICAgICAgbVF1b3Rlc1thSW5kZXhdID0gYU9wZW47CiAgICAg
IG1RdW90ZXNbKythSW5kZXhdID0gYUNsb3NlOwogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJl
dHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDU3TCk7CiAgfQoKZnJpZW5kIGNsYXNzIFN0eWxlQ29u
dGVudEJsb2I7CnByb3RlY3RlZDoKICBQUlVpbnQzMiBtQ29udGVudENvdW50OwogIG5zU3R5bGVD
b250ZW50RGF0YSogbUNvbnRlbnRzOwoKICBQUlVpbnQzMiBtSW5jcmVtZW50Q291bnQ7CiAgbnNT
dHlsZUNvdW50ZXJEYXRhKiBtSW5jcmVtZW50czsKCiAgUFJVaW50MzIgbVJlc2V0Q291bnQ7CiAg
bnNTdHlsZUNvdW50ZXJEYXRhKiBtUmVzZXRzOwoKICBQUlVpbnQzMiBtUXVvdGVzQ291bnQ7CiAg
bnNTdHJpbmcqIG1RdW90ZXM7Cn07CgpzdHJ1Y3QgbnNTdHlsZVVzZXJJbnRlcmZhY2U6IHB1Ymxp
YyBuc1N0eWxlU3RydWN0IHsKICBuc1N0eWxlVXNlckludGVyZmFjZSh2b2lkKSB7fTsKICB+bnNT
dHlsZVVzZXJJbnRlcmZhY2Uodm9pZCkge307CgogIFBSVWludDggbVVzZXJJbnB1dDsKICBQUlVp
bnQ4IG1Vc2VyTW9kaWZ5OwogIFBSVWludDggbVVzZXJTZWxlY3Q7CiAgUFJVaW50OCBtVXNlckZv
Y3VzOwogIFBSVW5pY2hhciBtS2V5RXF1aXZhbGVudDsKICBQUlVpbnQ4IG1SZXNpemVyOwogIG5z
U3RyaW5nIG1CZWhhdmlvcjsKfTsKCnN0cnVjdCBuc1N0eWxlUHJpbnQ6IHB1YmxpYyBuc1N0eWxl
U3RydWN0IHsKICBuc1N0eWxlUHJpbnQodm9pZCkge307CiAgfm5zU3R5bGVQcmludCh2b2lkKSB7
fTsKCiAgUFJVaW50OCBtUGFnZUJyZWFrQmVmb3JlOwogIFBSVWludDggbVBhZ2VCcmVha0FmdGVy
OwogIFBSVWludDggbVBhZ2VCcmVha0luc2lkZTsKICAgICAgICBuc1N0cmluZyBtUGFnZTsKICBQ
UlVpbnQzMiBtV2lkb3dzOwogIFBSVWludDMyIG1PcnBoYW5zOwogIFBSVWludDggbU1hcmtzOwog
IG5zU3R5bGVDb29yZCBtU2l6ZVdpZHRoOwogIG5zU3R5bGVDb29yZCBtU2l6ZUhlaWdodDsKfTsK
CgpzdHJ1Y3QgbnNTdHlsZVhVTCA6IHB1YmxpYyBuc1N0eWxlU3RydWN0IHsKICBuc1N0eWxlWFVM
KCkge307CiAgfm5zU3R5bGVYVUwoKSB7fTsKCgoKCgogIFBSVWludDggbUJveE9yaWVudDsKfTsK
CgoKCgoKc3RydWN0IG5zQm9yZGVyRWRnZXM7CgoKc3RydWN0IG5zQm9yZGVyRWRnZQp7CgogIG5z
Y29vcmQgbVdpZHRoOwoKICBuc2Nvb3JkIG1MZW5ndGg7CiAgUFJVaW50OCBtU3R5bGU7CiAgbnNj
b2xvciBtQ29sb3I7CgogIFBSVWludDggbVNpZGU7CgogIG5zQm9yZGVyRWRnZXMgKiBtSW5zaWRl
TmVpZ2hib3I7CgogIG5zQm9yZGVyRWRnZSgpOwp9OwoKaW5saW5lIG5zQm9yZGVyRWRnZTo6bnNC
b3JkZXJFZGdlKCkKewogIG1XaWR0aD0wOwogIG1MZW5ndGg9MDsKICBtU3R5bGU9MDsKICBtQ29s
b3I9MDsKICBtU2lkZT0zOwogIG1JbnNpZGVOZWlnaGJvciA9IDA7Cn07CgoKCgpzdHJ1Y3QgbnNC
b3JkZXJFZGdlcwp7CiAgbnNWb2lkQXJyYXkgbUVkZ2VzWzRdOwogIG5zTWFyZ2luIG1NYXhCb3Jk
ZXJXaWR0aDsKICBQUlBhY2tlZEJvb2wgbU91dHNpZGVFZGdlOwoKICBuc0JvcmRlckVkZ2VzKCk7
Cn07CgppbmxpbmUgbnNCb3JkZXJFZGdlczo6bnNCb3JkZXJFZGdlcygpCnsKICBtTWF4Qm9yZGVy
V2lkdGguU2l6ZVRvKDAsMCwwLDApOwogIG1PdXRzaWRlRWRnZSA9IDE7Cn07CiMgNzc1ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0LmgiCmNsYXNzIG5zSVN0eWxlQ29u
dGV4dCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQm
IEdldElJRCgpIHsgc3RhdGljIG5zSUlEIGlpZCA9IHsgMHgyNmE0ZDk3MCwgMHhhMzQyLCAweDEx
ZDEsIHsweDg5LCAweDc0LCAweDAwLCAweDYwLCAweDA4LCAweDkxLCAweDFiLCAweDgxfSB9OyBy
ZXR1cm4gaWlkOyB9CgogIHZpcnR1YWwgUFJCb29sIEVxdWFscyhjb25zdCBuc0lTdHlsZUNvbnRl
eHQqIGFPdGhlcikgY29uc3QgPSAwOwogIHZpcnR1YWwgUFJVaW50MzIgSGFzaFZhbHVlKHZvaWQp
IGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc0lTdHlsZUNvbnRleHQqIEdldFBhcmVudCh2b2lkKSBj
b25zdCA9IDA7CiAgdmlydHVhbCBuc0lTdXBwb3J0c0FycmF5KiBHZXRTdHlsZVJ1bGVzKHZvaWQp
IGNvbnN0ID0gMDsKICB2aXJ0dWFsIFBSSW50MzIgR2V0U3R5bGVSdWxlQ291bnQodm9pZCkgY29u
c3QgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UHNldWRvVHlwZShuc0lBdG9tKiYgYVBzZXVk
b1RhZykgY29uc3QgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEZpbmRDaGlsZFdpdGhSdWxlcyhj
b25zdCBuc0lBdG9tKiBhUHNldWRvVGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSVN1cHBvcnRzQXJyYXkqIGFSdWxlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lTdHlsZUNvbnRleHQqJiBhUmVzdWx0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dFN0eWxlKG5zU3R5bGVTdHJ1Y3RJRCBhU0lELCBuc1N0eWxlU3RydWN0JiBhU3RydWN0KSBjb25z
dCA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENhbGNTdHlsZURpZmZlcmVuY2UobnNJU3R5bGVD
b250ZXh0KiBhT3RoZXIsIFBSSW50MzImIGFIaW50LCBQUkJvb2wgYVN0b3BBdEZpcnN0ID0gMCkg
Y29uc3QgPSAwOwoKCiAgdmlydHVhbCB2b2lkIExpc3QoRklMRSogb3V0LCBQUkludDMyIGFJbmRl
bnQpID0gMDsKCiAgdmlydHVhbCB2b2lkIFNpemVPZihuc0lTaXplT2ZIYW5kbGVyICphU2l6ZU9m
SGFuZGxlciwgUFJVaW50MzIgJmFTaXplKSA9IDA7CiMgODE0ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJU3R5bGVDb250ZXh0LmgiCiAgdmlydHVhbCBjb25zdCBuc1N0eWxlU3RydWN0KiBH
ZXRTdHlsZURhdGEobnNTdHlsZVN0cnVjdElEIGFTSUQpID0gMDsKCgogIHZpcnR1YWwgdm9pZCBG
b3JjZVVuaXF1ZSh2b2lkKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtYXBTdHlsZShuc0lQ
cmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBQUkJvb2wgYVJlY3Vyc2UgPSAxKSA9IDA7CgoKICB2
aXJ0dWFsIHZvaWQgUmVjYWxjQXV0b21hdGljRGF0YShuc0lQcmVzQ29udGV4dCogYVByZXNDb250
ZXh0KSA9IDA7CgoKICB2aXJ0dWFsIHZvaWQgQ2FsY0JvcmRlclBhZGRpbmdGb3IoY29uc3QgbnNJ
RnJhbWUqIGFGcmFtZSwgbnNNYXJnaW4mIGFCb3JkZXJQYWRkaW5nKSBjb25zdCA9IDA7CiMgODQz
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0LmgiCiAgdmlydHVhbCB2
b2lkIFJlYWRNdXRhYmxlU3R5bGVEYXRhKG5zU3R5bGVTdHJ1Y3RJRCBhU0lELCBuc1N0eWxlU3Ry
dWN0KiogYVN0eWxlU3RydWN0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBXcml0ZU11dGFibGVT
dHlsZURhdGEobnNTdHlsZVN0cnVjdElEIGFTSUQsIG5zU3R5bGVTdHJ1Y3QqIGFTdHlsZVN0cnVj
dCkgPSAwOwp9OwoKCgppbmxpbmUgbnNjb29yZCBDYWxjU2lkZUZvcihjb25zdCBuc0lGcmFtZSog
YUZyYW1lLCBjb25zdCBuc1N0eWxlQ29vcmQmIGFDb29yZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJVaW50OCBhU3BhY2luZywgUFJVaW50OCBhU2lkZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbnNjb29yZCogYUVudW1UYWJsZSwgUFJJbnQzMiBhTnVtRW51bXMpCnsK
ICBuc2Nvb3JkIHJlc3VsdCA9IDA7CgogIHN3aXRjaCAoYUNvb3JkLkdldFVuaXQoKSkgewogICAg
Y2FzZSBlU3R5bGVVbml0X0F1dG86CgogICAgICBicmVhazsKCiAgICBjYXNlIGVTdHlsZVVuaXRf
SW5oZXJpdDoKICAgICAgbnNJRnJhbWUqIHBhcmVudEZyYW1lOwogICAgICBhRnJhbWUtPkdldFBh
cmVudCgmcGFyZW50RnJhbWUpOwogICAgICBpZiAoMCAhPSBwYXJlbnRGcmFtZSkgewogICAgICAg
IG5zSVN0eWxlQ29udGV4dCogcGFyZW50Q29udGV4dDsKICAgICAgICBwYXJlbnRGcmFtZS0+R2V0
U3R5bGVDb250ZXh0KCZwYXJlbnRDb250ZXh0KTsKICAgICAgICBpZiAoMCAhPSBwYXJlbnRDb250
ZXh0KSB7CiAgICAgICAgICBuc01hcmdpbiBwYXJlbnRTcGFjaW5nOwogICAgICAgICAgc3dpdGNo
IChhU3BhY2luZykgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgY29uc3QgbnNTdHlsZU1hcmdpbiogcGFyZW50TWFyZ2luID0gKGNvbnN0IG5zU3R5
bGVNYXJnaW4qKXBhcmVudENvbnRleHQtPkdldFN0eWxlRGF0YShlU3R5bGVTdHJ1Y3RfTWFyZ2lu
KTsKICAgICAgICAgICAgICAgIHBhcmVudE1hcmdpbi0+Q2FsY01hcmdpbkZvcihwYXJlbnRGcmFt
ZSwgcGFyZW50U3BhY2luZyk7CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNvbnN0
IG5zU3R5bGVQYWRkaW5nKiBwYXJlbnRQYWRkaW5nID0gKGNvbnN0IG5zU3R5bGVQYWRkaW5nKilw
YXJlbnRDb250ZXh0LT5HZXRTdHlsZURhdGEoZVN0eWxlU3RydWN0X1BhZGRpbmcpOwogICAgICAg
ICAgICAgICAgcGFyZW50UGFkZGluZy0+Q2FsY1BhZGRpbmdGb3IocGFyZW50RnJhbWUsIHBhcmVu
dFNwYWNpbmcpOwogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgIGNhc2UgMjoKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjb25zdCBuc1N0eWxl
Qm9yZGVyKiBwYXJlbnRCb3JkZXIgPSAoY29uc3QgbnNTdHlsZUJvcmRlciopcGFyZW50Q29udGV4
dC0+R2V0U3R5bGVEYXRhKGVTdHlsZVN0cnVjdF9Cb3JkZXIpOwogICAgICAgICAgICAgICAgcGFy
ZW50Qm9yZGVyLT5DYWxjQm9yZGVyRm9yKHBhcmVudEZyYW1lLCBwYXJlbnRTcGFjaW5nKTsKICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAg
c3dpdGNoIChhU2lkZSkgewogICAgICAgICAgICBjYXNlIDM6IHJlc3VsdCA9IHBhcmVudFNwYWNp
bmcubGVmdDsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMDogcmVzdWx0ID0gcGFyZW50U3BhY2lu
Zy50b3A7IGJyZWFrOwogICAgICAgICAgICBjYXNlIDE6IHJlc3VsdCA9IHBhcmVudFNwYWNpbmcu
cmlnaHQ7IGJyZWFrOwogICAgICAgICAgICBjYXNlIDI6IHJlc3VsdCA9IHBhcmVudFNwYWNpbmcu
Ym90dG9tOyBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGRvIHsgKHBhcmVudENvbnRleHQp
LT5SZWxlYXNlKCk7IChwYXJlbnRDb250ZXh0KSA9IDA7IH0gd2hpbGUgKDApOwogICAgICAgIH0K
ICAgICAgfQogICAgICBicmVhazsKCiAgICBjYXNlIGVTdHlsZVVuaXRfUGVyY2VudDoKICAgICAg
ewogICAgICAgIG5zY29vcmQgYmFzZVdpZHRoID0gMDsKICAgICAgICBQUkJvb2wgaXNCYXNlID0g
MDsKICAgICAgICBuc0lGcmFtZSogZnJhbWU7CiAgICAgICAgYUZyYW1lLT5HZXRQYXJlbnQoJmZy
YW1lKTsKICAgICAgICB3aGlsZSAoMCAhPSBmcmFtZSkgewogICAgICAgICAgZnJhbWUtPklzUGVy
Y2VudGFnZUJhc2UoaXNCYXNlKTsKICAgICAgICAgIGlmIChpc0Jhc2UpIHsKICAgICAgICAgICAg
bnNTaXplIHNpemU7CiAgICAgICAgICAgIGZyYW1lLT5HZXRTaXplKHNpemUpOwogICAgICAgICAg
ICBiYXNlV2lkdGggPSBzaXplLndpZHRoOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0K
ICAgICAgICAgIGZyYW1lLT5HZXRQYXJlbnQoJmZyYW1lKTsKICAgICAgICB9CiAgICAgICAgcmVz
dWx0ID0gKG5zY29vcmQpKChmbG9hdCliYXNlV2lkdGggKiBhQ29vcmQuR2V0UGVyY2VudFZhbHVl
KCkpOwogICAgICB9CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgZVN0eWxlVW5pdF9Db29yZDoKICAg
ICAgcmVzdWx0ID0gYUNvb3JkLkdldENvb3JkVmFsdWUoKTsKICAgICAgYnJlYWs7CgogICAgY2Fz
ZSBlU3R5bGVVbml0X0VudW1lcmF0ZWQ6CiAgICAgIGlmICgwICE9IGFFbnVtVGFibGUpIHsKICAg
ICAgICBQUkludDMyIHZhbHVlID0gYUNvb3JkLkdldEludFZhbHVlKCk7CiAgICAgICAgaWYgKCgw
IDw9IHZhbHVlKSAmJiAodmFsdWUgPCBhTnVtRW51bXMpKSB7CiAgICAgICAgICByZXR1cm4gYUVu
dW1UYWJsZVthQ29vcmQuR2V0SW50VmFsdWUoKV07CiAgICAgICAgfQogICAgICB9CiAgICAgIGJy
ZWFrOwoKICAgIGNhc2UgZVN0eWxlVW5pdF9OdWxsOgogICAgY2FzZSBlU3R5bGVVbml0X05vcm1h
bDoKICAgIGNhc2UgZVN0eWxlVW5pdF9JbnRlZ2VyOgogICAgY2FzZSBlU3R5bGVVbml0X1Byb3Bv
cnRpb25hbDoKICAgIGRlZmF1bHQ6CiAgICAgIHJlc3VsdCA9IDA7CiAgICAgIGJyZWFrOwogIH0K
ICBpZiAoKDEgPT0gYVNwYWNpbmcpIHx8ICgyID09IGFTcGFjaW5nKSkgewogICAgaWYgKHJlc3Vs
dCA8IDApIHsKICAgICAgcmVzdWx0ID0gMDsKICAgIH0KICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoK
aW5saW5lIHZvaWQgQ2FsY1NpZGVzRm9yKGNvbnN0IG5zSUZyYW1lKiBhRnJhbWUsIGNvbnN0IG5z
U3R5bGVTaWRlcyYgYVNpZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50OCBhU3Bh
Y2luZywKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zY29vcmQqIGFFbnVtVGFibGUs
IFBSSW50MzIgYU51bUVudW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgbnNNYXJnaW4mIGFS
ZXN1bHQpCnsKICBuc1N0eWxlQ29vcmQgY29vcmQ7CgogIGFSZXN1bHQubGVmdCA9IENhbGNTaWRl
Rm9yKGFGcmFtZSwgYVNpZGVzLkdldExlZnQoY29vcmQpLCBhU3BhY2luZywgMywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhRW51bVRhYmxlLCBhTnVtRW51bXMpOwogIGFSZXN1bHQudG9w
ID0gQ2FsY1NpZGVGb3IoYUZyYW1lLCBhU2lkZXMuR2V0VG9wKGNvb3JkKSwgYVNwYWNpbmcsIDAs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhRW51bVRhYmxlLCBhTnVtRW51bXMpOwogIGFS
ZXN1bHQucmlnaHQgPSBDYWxjU2lkZUZvcihhRnJhbWUsIGFTaWRlcy5HZXRSaWdodChjb29yZCks
IGFTcGFjaW5nLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhRW51bVRhYmxlLCBh
TnVtRW51bXMpOwogIGFSZXN1bHQuYm90dG9tID0gQ2FsY1NpZGVGb3IoYUZyYW1lLCBhU2lkZXMu
R2V0Qm90dG9tKGNvb3JkKSwgYVNwYWNpbmcsIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhRW51bVRhYmxlLCBhTnVtRW51bXMpOwp9CgoKCmV4dGVybiBuc3Jlc3VsdAogIE5TX05l
d1N0eWxlQ29udGV4dChuc0lTdHlsZUNvbnRleHQqKiBhSW5zdGFuY2VQdHJSZXN1bHQsCiAgICAg
ICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVBhcmVudENvbnRleHQsCiAgICAgICAg
ICAgICAgICAgICAgIG5zSUF0b20qIGFQc2V1ZG9UeXBlLAogICAgICAgICAgICAgICAgICAgICBu
c0lTdXBwb3J0c0FycmF5KiBhUnVsZXMsCiAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNDb250
ZXh0KiBhUHJlc0NvbnRleHQpOwojIDI4ICJuc1RleHRUcmFuc2Zvcm1lci5jcHAiIDIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVGV4dENvbnRlbnQuaCIgMQojIDI1ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJVGV4dENvbnRlbnQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNsYXlvdXQuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
VGV4dENvbnRlbnQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50
LmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVRleHRDb250ZW50LmgiIDIK
Y2xhc3MgbnNTdHJpbmc7CmNsYXNzIG5zVGV4dEZyYWdtZW50OwojIDM4ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJVGV4dENvbnRlbnQuaCIKY2xhc3MgbnNJVGV4dENvbnRlbnQgOiBwdWJs
aWMgbnNJQ29udGVudCB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHsg
c3RhdGljIG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDY1LCAweDE1YjMsIDB4MTFkMiwgezB4OTMsIDB4
MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzJ9fTsgcmV0dXJuIGlpZDsgfQoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRleHQoY29uc3QgbnNUZXh0RnJhZ21lbnQqKiBhRnJh
Z21lbnRzUmVzdWx0KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGV4dExlbmd0aChQ
UkludDMyKiBhTGVuZ3RoUmVzdWx0KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29weVRl
eHQobnNBV3JpdGFibGVTdHJpbmcmIGFSZXN1bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgU2V0VGV4dChjb25zdCBQUlVuaWNoYXIqIGFCdWZmZXIsCiAgICAgICAgICAgICAgICAgICAg
IFBSSW50MzIgYUxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFOb3RpZnkpID0g
MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VGV4dChjb25zdCBuc0FSZWFkYWJsZVN0cmlu
ZyYgYVN0ciwKICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFOb3RpZnkpID0gMDsKCgoKCgog
IHZpcnR1YWwgbnNyZXN1bHQgU2V0VGV4dChjb25zdCBjaGFyKiBhQnVmZmVyLAogICAgICAgICAg
ICAgICAgICAgICBQUkludDMyIGFMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBh
Tm90aWZ5KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNPbmx5V2hpdGVzcGFjZShQUkJv
b2wqIGFSZXN1bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xvbmVDb250ZW50KFBS
Qm9vbCBhQ2xvbmVUZXh0LCBuc0lUZXh0Q29udGVudCoqIGFDbG9uZSkgPSAwOwp9OwojIDEwMCAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVRleHRDb250ZW50LmgiCmNsYXNzIG5zSVRleHRD
b250ZW50Q2hhbmdlRGF0YSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMg
Y29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkw
NWUsIDB4MTViMywgMHgxMWQyLCB7MHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwg
MHhkZCwgMHgzMn19OyByZXR1cm4gaWlkO307CgogIGVudW0gQ2hhbmdlVHlwZSB7CiAgICBJbnNl
cnQsCiAgICBBcHBlbmQsCiAgICBSZXBsYWNlCiAgfTsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0Q2hhbmdlVHlwZShDaGFuZ2VUeXBlKiBhUmVzdWx0KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0SW5zZXJ0RGF0YShQUkludDMyKiBhT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUkludDMyKiBhSW5zZXJ0TGVuZ3RoKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
QXBwZW5kRGF0YShQUkludDMyKiBhT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBQ
UkludDMyKiBhQXBwZW5kTGVuZ3RoKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmVwbGFj
ZURhdGEoUFJJbnQzMiogYU9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50
MzIqIGFTb3VyY2VMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyKiBh
UmVwbGFjZUxlbmd0aCkgPSAwOwp9OwoKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdUZXh0Tm9kZShu
c0lDb250ZW50KiogYVJlc3VsdCk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3Q29tbWVudE5vZGUo
bnNJQ29udGVudCoqIGFSZXN1bHQpOwojIDI5ICJuc1RleHRUcmFuc2Zvcm1lci5jcHAiIDIKIyAx
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZUNvbnN0cy5oIiAxCiMgMzAgIm5zVGV4
dFRyYW5zZm9ybWVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lMaW5l
QnJlYWtlci5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lMaW5lQnJlYWtl
ci5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjcg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lMaW5lQnJlYWtlci5oIiAyCiMgMSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUJyZWFrU3RhdGUuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJQnJlYWtTdGF0ZS5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lCcmVh
a1N0YXRlLmgiIDIKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMg
MjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lCcmVha1N0YXRlLmgiIDIKIyAzNyAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUJyZWFrU3RhdGUuaCIKY2xhc3MgbnNJQnJlYWtTdGF0
ZSA6IHB1YmxpYyBuc0lTdXBwb3J0cwp7CnB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBH
ZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHhlZTg3NDI2MSwgMHhjMGJmLCAw
eDExZDIsIHsgMHhiMywgMHhhZiwgMHgwLCAweDgwLCAweDVmLCAweDhhLCAweDY2LCAweDcwIH0g
fTs7IHJldHVybiBpaWQ7fQoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldCAoUFJVaW50MzIgYVBvcywg
UFJCb29sIGFEb25lKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUZXh0IChjb25zdCBQUlVu
aWNoYXIqKiBvVGV4dCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgTGVuZ3RoIChQUlVpbnQzMiog
b0xlbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgSXNEb25lIChQUkJvb2wgKm9Eb25lKSA9IDA7
CiAgdmlydHVhbCBuc3Jlc3VsdCBDdXJyZW50IChQUlVpbnQzMiogb1BvcykgPSAwOwogIHZpcnR1
YWwgbnNyZXN1bHQgU2V0UHJpdmF0ZSAoUFJVaW50MzIgYVByaXYpID0gMDsKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldFByaXZhdGUgKFBSVWludDMyKiBvUHJpdikgPSAwOwoKfTsKIyAyOCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUxpbmVCcmVha2VyLmgiIDIKCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lMaW5lQnJlYWtlci5oIiAyCgoKCgoKCgpjbGFzcyBuc0lMaW5lQnJlYWtlciA6IHB1YmxpYyBu
c0lTdXBwb3J0cwp7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0
aWMgY29uc3QgbnNJSUQgaWlkID0geyAweGU4NmIzMzc1LCAweGJmODksIDB4MTFkMiwgeyAweGIz
LCAweGFmLCAweDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4NjYsIDB4NzAgfSB9OyByZXR1cm4gaWlk
O30KICB2aXJ0dWFsIG5zcmVzdWx0IEJyZWFrSW5CZXR3ZWVuKGNvbnN0IFBSVW5pY2hhciogYVRl
eHQxICwgUFJVaW50MzIgYVRleHRMZW4xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgUFJVbmljaGFyKiBhVGV4dDIgLCBQUlVpbnQzMiBhVGV4dExlbjIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQUkJvb2wgKm9DYW5CcmVhaykgPSAwOwoKICB2aXJ0dWFsIG5z
cmVzdWx0IE5leHQoIGNvbnN0IFBSVW5pY2hhciogYVRleHQsIFBSVWludDMyIGFMZW4sIFBSVWlu
dDMyIGFQb3MsCiAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiogb05leHQsIFBSQm9vbCAqb05l
ZWRNb3JlVGV4dCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFByZXYoIGNvbnN0IFBSVW5pY2hh
ciogYVRleHQsIFBSVWludDMyIGFMZW4sIFBSVWludDMyIGFQb3MsCiAgICAgICAgICAgICAgICAg
ICBQUlVpbnQzMiogb1ByZXYsIFBSQm9vbCAqb05lZWRNb3JlVGV4dCkgPSAwOwoKfTsKIyAzMSAi
bnNUZXh0VHJhbnNmb3JtZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVdvcmRCcmVha2VyLmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdvcmRC
cmVha2VyLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEK
IyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdvcmRCcmVha2VyLmgiIDIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQnJlYWtTdGF0ZS5oIiAxCiMgMjggIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lXb3JkQnJlYWtlci5oIiAyCgojIDEgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
V29yZEJyZWFrZXIuaCIgMgoKCgoKCgoKY2xhc3MgbnNJV29yZEJyZWFrZXIgOiBwdWJsaWMgbnNJ
U3VwcG9ydHMKewpwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp
YyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4ZTg2YjMzNzksIDB4YmY4OSwgMHgxMWQyLCB7IDB4YjMs
IDB4YWYsIDB4MCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHg2NiwgMHg3MCB9IH07IHJldHVybiBpaWQ7
fQogIHZpcnR1YWwgbnNyZXN1bHQgQnJlYWtJbkJldHdlZW4oY29uc3QgUFJVbmljaGFyKiBhVGV4
dDEgLCBQUlVpbnQzMiBhVGV4dExlbjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBQUlVuaWNoYXIqIGFUZXh0MiAsIFBSVWludDMyIGFUZXh0TGVuMiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBSQm9vbCAqb0NhbkJyZWFrKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBG
aW5kV29yZChjb25zdCBQUlVuaWNoYXIqIGFUZXh0MSAsIFBSVWludDMyIGFUZXh0TGVuMSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhT2Zmc2V0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyICpvV29yZEJlZ2luLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyICpvV29yZEVuZCkg
PSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgTmV4dCggY29uc3QgUFJVbmljaGFyKiBhVGV4dCwgUFJV
aW50MzIgYUxlbiwgUFJVaW50MzIgYVBvcywKICAgICAgICAgICAgICAgICAgIFBSVWludDMyKiBv
TmV4dCwgUFJCb29sICpvTmVlZE1vcmVUZXh0KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgUHJl
diggY29uc3QgUFJVbmljaGFyKiBhVGV4dCwgUFJVaW50MzIgYUxlbiwgUFJVaW50MzIgYVBvcywK
ICAgICAgICAgICAgICAgICAgIFBSVWludDMyKiBvUHJldiwgUFJCb29sICpvTmVlZE1vcmVUZXh0
KSA9IDA7Cgp9OwojIDMyICJuc1RleHRUcmFuc2Zvcm1lci5jcHAiIDIKIyAxICJuc0hUTUxJSURz
LmgiIDEKIyAyNSAibnNIVE1MSUlEcy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lTdXBwb3J0cy5oIiAxCiMgMjYgIm5zSFRNTElJRHMuaCIgMgoKCmV4dGVybiBjb25zdCBuc0lJ
RCBrSUFyZWFGcmFtZUlJRDsKZXh0ZXJuIGNvbnN0IG5zSUlEIGtJSFRNTENvbnRlbnRJSUQ7CmV4
dGVybiBjb25zdCBuc0lJRCBrSUhUTUxSZWZsb3dJSUQ7CmV4dGVybiBjb25zdCBuc0lJRCBrSVBh
Z2VTZXF1ZW5jZUZyYW1lSUlEOwpleHRlcm4gY29uc3QgbnNJSUQga0lTdHlsZWRDb250ZW50SUlE
OwpleHRlcm4gY29uc3QgbnNJSUQga0lUZXh0Q29udGVudElJRDsKIyAzMyAibnNUZXh0VHJhbnNm
b3JtZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlcnZpY2VNYW5h
Z2VyLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlcnZpY2VNYW5hZ2Vy
LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIg
MQojIDE0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGYWN0b3J5LmgiIDEKIyAyNSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUZhY3RvcnkuaCIKY2xhc3MgbnNJRmFjdG9yeSA6IHB1Ymxp
YyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg
e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwMDAwMDAwMSwgMHgwMDAwLCAweDAwMDAsIHsg
MHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiB9fTsgcmV0dXJu
IGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZUluc3RhbmNlKG5zSVN1cHBvcnRzICph
T3V0ZXIsIGNvbnN0IG5zSUlEICYgaWlkLCB2b2lkICogKnJlc3VsdCkgPSAwOwoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBMb2NrRmFjdG9yeShQUkJvb2wgbG9jaykgPSAwOwoKfTsKIyAxNSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIgMgoKCgojIDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lFbnVtZXJhdG9yLmgiIDEKIyAzNSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSUVudW1lcmF0b3IuaCIKY2xhc3MgbnNJU2ltcGxlRW51bWVyYXRvciA6
IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0
SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhkMTg5OTI0MCwgMHhmOWQyLCAweDEx
ZDIsIHsgMHhiZCwgMHhkNiwgMHgwMCwgMHgwMCwgMHg2NCwgMHg2NSwgMHg3MywgMHg3NCB9fTsg
cmV0dXJuIGlpZDt9CiMgNTMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lFbnVtZXJhdG9y
LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBIYXNNb3JlRWxlbWVudHMoUFJCb29sICpfcmV0dmFsKSA9
IDA7CiMgNzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lFbnVtZXJhdG9yLmgiCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXROZXh0KG5zSVN1cHBvcnRzICoqX3JldHZhbCkgPSAwOwoKfTsKIyAx
NDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lFbnVtZXJhdG9yLmgiCmNsYXNzIG5zSUVu
dW1lcmF0b3IgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3Qg
bnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YWQzODUyODYsIDB4
Y2JjNCwgMHgxMWQyLCB7IDB4OGMsIDB4Y2EsIDB4MDAsIDB4NjAsIDB4YjAsIDB4ZmMsIDB4MTQs
IDB4YTMgfX07IHJldHVybiBpaWQ7fQoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZpcnN0KHZvaWQp
ID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBOZXh0KHZvaWQpID0gMDsKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgQ3VycmVudEl0ZW0obnNJU3VwcG9ydHMgKipfcmV0dmFsKSA9IDA7CgoKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IElzRG9uZSh2b2lkKSA9IDA7Cgp9OwojIDI1NSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSUVudW1lcmF0b3IuaCIKY2xhc3MgbnNJQmlkaXJlY3Rpb25hbEVu
dW1lcmF0b3IgOiBwdWJsaWMgbnNJRW51bWVyYXRvciB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25z
dCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg3NWYxNThhMCwg
MHhjYWRkLCAweDExZDIsIHsgMHg4YywgMHhjYSwgMHgwMCwgMHg2MCwgMHhiMCwgMHhmYywgMHgx
NCwgMHhhMyB9fTsgcmV0dXJuIGlpZDt9CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTGFzdCh2b2lk
KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUHJldih2b2lkKSA9IDA7Cgp9OwojIDMzMSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUVudW1lcmF0b3IuaCIKZXh0ZXJuICJDIiBuc3Jl
c3VsdApOU19OZXdFbXB0eUVudW1lcmF0b3IobnNJU2ltcGxlRW51bWVyYXRvcioqIGFSZXN1bHQp
OwoKCgoKZXh0ZXJuICJDIiBuc3Jlc3VsdApOU19OZXdDb25qb2luaW5nRW51bWVyYXRvcihuc0lF
bnVtZXJhdG9yKiBmaXJzdCwgbnNJRW51bWVyYXRvciogc2Vjb25kLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lCaWRpcmVjdGlvbmFsRW51bWVyYXRvciogKmFJbnN0YW5jZVB0clJlc3Vs
dCk7CgoKCmV4dGVybiAiQyIgbnNyZXN1bHQKTlNfTmV3VW5pb25FbnVtZXJhdG9yKG5zSUVudW1l
cmF0b3IqIGZpcnN0LCBuc0lFbnVtZXJhdG9yKiBzZWNvbmQsCiAgICAgICAgICAgICAgICAgICAg
ICBuc0lFbnVtZXJhdG9yKiAqYUluc3RhbmNlUHRyUmVzdWx0KTsKCgoKZXh0ZXJuICJDIiBuc3Jl
c3VsdApOU19OZXdJbnRlcnNlY3Rpb25FbnVtZXJhdG9yKG5zSUVudW1lcmF0b3IqIGZpcnN0LCBu
c0lFbnVtZXJhdG9yKiBzZWNvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRW51
bWVyYXRvciogKmFJbnN0YW5jZVB0clJlc3VsdCk7CiMgMTkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiIDIKCgoKCgoKY2xhc3MgbnNJRmlsZTsKIyAzNSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKY2xhc3MgbnNJ
Q29tcG9uZW50TWFuYWdlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRp
YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg4NDU4
YTc0MCwgMHhkNWRjLCAweDExZDIsIHsgMHg5MiwgMHhmYiwgMHgwMCwgMHhlMCwgMHg5OCwgMHgw
NSwgMHg1NywgMHgwZiB9fTsgcmV0dXJuIGlpZDt9CiMgNDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBGaW5kRmFjdG9y
eShjb25zdCBuc0NJRCAmIGFDbGFzcywgbnNJRmFjdG9yeSAqKl9yZXR2YWwpID0gMDsKIyA2MCAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldENsYXNzT2JqZWN0KGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBuc0lJ
RCAmIGFJSUQsIHZvaWQgKiAqX3JldHZhbCkgPSAwOwojIDczICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ29udHJhY3RJ
RFRvQ2xhc3NJRChjb25zdCBjaGFyICphQ29udHJhY3RJRCwgbnNDSUQgKmFDbGFzcykgPSAwOwoj
IDg2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgQ0xTSURUb0NvbnRyYWN0SUQoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIGNo
YXIgKiphQ2xhc3NOYW1lLCBjaGFyICoqX3JldHZhbCkgPSAwOwojIDk4ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ3Jl
YXRlSW5zdGFuY2UoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIG5zSVN1cHBvcnRzICphRGVsZWdhdGUs
IGNvbnN0IG5zSUlEICYgYUlJRCwgdm9pZCAqICpfcmV0dmFsKSA9IDA7CiMgMTEyICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1
bHQgQ3JlYXRlSW5zdGFuY2VCeUNvbnRyYWN0SUQoY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsIG5z
SVN1cHBvcnRzICphRGVsZWdhdGUsIGNvbnN0IG5zSUlEICYgSUlELCB2b2lkICogKl9yZXR2YWwp
ID0gMDsKIyAxMjQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2Vy
LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RyeUxvY2F0aW9uRm9yU3BlYyhuc0lGaWxlICph
U3BlYywgY2hhciAqKl9yZXR2YWwpID0gMDsKIyAxMzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTcGVjRm9yUmVnaXN0
cnlMb2NhdGlvbihjb25zdCBjaGFyICphTG9jYXRpb24sIG5zSUZpbGUgKipfcmV0dmFsKSA9IDA7
CiMgMTQ4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgUmVnaXN0ZXJGYWN0b3J5KGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBj
b25zdCBjaGFyICphQ2xhc3NOYW1lLCBjb25zdCBjaGFyICphQ29udHJhY3RJRCwgbnNJRmFjdG9y
eSAqYUZhY3RvcnksIFBSQm9vbCBhUmVwbGFjZSkgPSAwOwojIDE2OSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lz
dGVyQ29tcG9uZW50KGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBjaGFyICphQ2xhc3NOYW1l
LCBjb25zdCBjaGFyICphQ29udHJhY3RJRCwgY29uc3QgY2hhciAqYUxvY2F0aW9uLCBQUkJvb2wg
YVJlcGxhY2UsIFBSQm9vbCBhUGVyc2lzdCkgPSAwOwojIDE5MSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVy
Q29tcG9uZW50V2l0aFR5cGUoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIGNvbnN0IGNoYXIgKmFDbGFz
c05hbWUsIGNvbnN0IGNoYXIgKmFDb250cmFjdElELCBuc0lGaWxlICphU3BlYywgY29uc3QgY2hh
ciAqYUxvY2F0aW9uLCBQUkJvb2wgYVJlcGxhY2UsIFBSQm9vbCBhUGVyc2lzdCwgY29uc3QgY2hh
ciAqYVR5cGUpID0gMDsKIyAyMDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25l
bnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlckNvbXBvbmVudFNwZWMoY29u
c3QgbnNDSUQgJiBhQ2xhc3MsIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsIGNvbnN0IGNoYXIgKmFD
b250cmFjdElELCBuc0lGaWxlICphTGlicmFyeSwgUFJCb29sIGFSZXBsYWNlLCBQUkJvb2wgYVBl
cnNpc3QpID0gMDsKIyAyMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRN
YW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlckNvbXBvbmVudExpYihjb25zdCBu
c0NJRCAmIGFDbGFzcywgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwgY29uc3QgY2hhciAqYUNvbnRy
YWN0SUQsIGNvbnN0IGNoYXIgKmFEbGxOYW1lLCBQUkJvb2wgYVJlcGxhY2UsIFBSQm9vbCBhUGVy
c2lzdCkgPSAwOwojIDI0MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1h
bmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFVucmVnaXN0ZXJGYWN0b3J5KGNvbnN0IG5zQ0lE
ICYgYUNsYXNzLCBuc0lGYWN0b3J5ICphRmFjdG9yeSkgPSAwOwojIDI1NCAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFVu
cmVnaXN0ZXJDb21wb25lbnQoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIGNvbnN0IGNoYXIgKmFMb2Nh
dGlvbikgPSAwOwojIDI2MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1h
bmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFVucmVnaXN0ZXJDb21wb25lbnRTcGVjKGNvbnN0
IG5zQ0lEICYgYUNsYXNzLCBuc0lGaWxlICphTGlicmFyeVNwZWMpID0gMDsKCgoKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBGcmVlTGlicmFyaWVzKHZvaWQpID0gMDsKCgoKCiAgZW51bSB7IE5TX1N0
YXJ0dXAgPSAwIH07CgogIGVudW0geyBOU19TY3JpcHQgPSAxIH07CgogIGVudW0geyBOU19UaW1l
ciA9IDIgfTsKCiAgZW51bSB7IE5TX1NodXRkb3duID0gMyB9OwojIDI5NSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEF1
dG9SZWdpc3RlcihQUkludDMyIHdoZW4sIG5zSUZpbGUgKmRpcmVjdG9yeSkgPSAwOwojIDMwOCAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFs
IG5zcmVzdWx0IEF1dG9SZWdpc3RlckNvbXBvbmVudChQUkludDMyIHdoZW4sIG5zSUZpbGUgKmFG
aWxlTG9jYXRpb24pID0gMDsKIyAzMTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21w
b25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBdXRvVW5yZWdpc3RlckNvbXBvbmVu
dChQUkludDMyIHdoZW4sIG5zSUZpbGUgKmFGaWxlTG9jYXRpb24pID0gMDsKIyAzMjkgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jl
c3VsdCBJc1JlZ2lzdGVyZWQoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIFBSQm9vbCAqX3JldHZhbCkg
PSAwOwojIDMzOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIu
aCIKICB2aXJ0dWFsIG5zcmVzdWx0IEVudW1lcmF0ZUNMU0lEcyhuc0lFbnVtZXJhdG9yICoqX3Jl
dHZhbCkgPSAwOwojIDM0OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1h
bmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEVudW1lcmF0ZUNvbnRyYWN0SURzKG5zSUVudW1l
cmF0b3IgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDYwMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSUNvbXBvbmVudE1hbmFnZXIuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnND
b21wb25lbnRNYW5hZ2VyVXRpbHMuaCIgMQojIDIzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNDb21wb25lbnRNYW5hZ2VyVXRpbHMuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNDT01QdHIuaCIgMQojIDI0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb21wb25lbnRN
YW5hZ2VyVXRpbHMuaCIgMgojIDM0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb21wb25l
bnRNYW5hZ2VyVXRpbHMuaCIKZXh0ZXJuICJDIiBuc3Jlc3VsdCBOU0dldEZhY3RvcnkobnNJU3Vw
cG9ydHMqIGFTZXJ2TWdyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgbnNDSUQgJmFDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphQ29udHJhY3RJRCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZhY3RvcnkgKiphRmFjdG9yeSk7CmV4
dGVybiAiQyIgUFJCb29sIE5TQ2FuVW5sb2FkKG5zSVN1cHBvcnRzKiBhU2Vydk1ncik7CmV4dGVy
biAiQyIgbnNyZXN1bHQgTlNSZWdpc3RlclNlbGYobnNJU3VwcG9ydHMqIGFTZXJ2TWdyLCBjb25z
dCBjaGFyICpmdWxscGF0aCk7CmV4dGVybiAiQyIgbnNyZXN1bHQgTlNVbnJlZ2lzdGVyU2VsZihu
c0lTdXBwb3J0cyogYVNlcnZNZ3IsIGNvbnN0IGNoYXIgKmZ1bGxwYXRoKTsKCnR5cGVkZWYgbnNy
ZXN1bHQgKCpuc0ZhY3RvcnlQcm9jKShuc0lTdXBwb3J0cyogYVNlcnZNZ3IsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDb250cmFjdElELAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJRmFjdG9yeSAqKmFGYWN0b3J5KTsKdHlwZWRlZiBQ
UkJvb2wgKCpuc0NhblVubG9hZFByb2MpKG5zSVN1cHBvcnRzKiBhU2Vydk1ncik7CnR5cGVkZWYg
bnNyZXN1bHQgKCpuc1JlZ2lzdGVyUHJvYykobnNJU3VwcG9ydHMqIGFTZXJ2TWdyLCBjb25zdCBj
aGFyICpwYXRoKTsKdHlwZWRlZiBuc3Jlc3VsdCAoKm5zVW5yZWdpc3RlclByb2MpKG5zSVN1cHBv
cnRzKiBhU2Vydk1nciwgY29uc3QgY2hhciAqcGF0aCk7CiMgNjMgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0NvbXBvbmVudE1hbmFnZXJVdGlscy5oIgpleHRlcm4gbnNyZXN1bHQKTlNfR2V0
R2xvYmFsQ29tcG9uZW50TWFuYWdlcihuc0lDb21wb25lbnRNYW5hZ2VyKiAqcmVzdWx0KTsKCgoK
CgpjbGFzcyBuc0NvbXBvbmVudE1hbmFnZXIgewpwdWJsaWM6CiAgc3RhdGljIG5zcmVzdWx0IElu
aXRpYWxpemUodm9pZCk7CgoKICBzdGF0aWMgbnNyZXN1bHQgRmluZEZhY3RvcnkoY29uc3QgbnND
SUQgJmFDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRmFjdG9yeSAqKmFG
YWN0b3J5KTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBHZXRDbGFzc09iamVjdChjb25zdCBuc0NJRCAm
YUNsYXNzLCBjb25zdCBuc0lJRCAmYUlJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZCAqKmFSZXN1bHQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IENvbnRyYWN0SURUb0NsYXNz
SUQoY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNDSUQgKmFDbGFzcyk7CgoKCiAgc3RhdGljIG5zcmVzdWx0IENMU0lEVG9Db250cmFjdElE
KG5zQ0lEICphQ2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogKmFD
bGFzc05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogKmFDb250cmFj
dElEKTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBDcmVhdGVJbnN0YW5jZShjb25zdCBuc0NJRCAmYUNs
YXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqYURlbGVn
YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJRCAmYUlJRCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmFSZXN1bHQpOwoKCiAgc3Rh
dGljIG5zcmVzdWx0IENyZWF0ZUluc3RhbmNlKGNvbnN0IGNoYXIgKmFDb250cmFjdElELAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqYURlbGVnYXRlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJRCAmYUlJRCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmFSZXN1bHQpOwoKCiAgc3RhdGljIG5zcmVz
dWx0IFJlZ2lzdGVyRmFjdG9yeShjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDb250cmFjdElELAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJRmFjdG9yeSAqYUZhY3RvcnksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVJlcGxhY2UpOwojIDExOCAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zQ29tcG9uZW50TWFuYWdlclV0aWxzLmgiCiAgc3RhdGljIG5zcmVzdWx0
IFJlZ2lzdGVyQ29tcG9uZW50KGNvbnN0IG5zQ0lEICZhQ2xhc3MsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICphQ2xhc3NOYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICphTGlicmFyeVBlcnNpc3RlbnREZXNjcmlwdG9yLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFSZXBsYWNlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJCb29sIGFQZXJzaXN0KTsKCgoKICBzdGF0aWMgbnNyZXN1bHQg
UmVnaXN0ZXJDb21wb25lbnRTcGVjKGNvbnN0IG5zQ0lEICZhQ2xhc3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphQ29udHJhY3RJRCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGaWxlICphTGlicmFyeSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVJlcGxhY2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJCb29sIGFQZXJzaXN0KTsKCgoKCiAgc3RhdGljIG5zcmVzdWx0
IFJlZ2lzdGVyQ29tcG9uZW50TGliKGNvbnN0IG5zQ0lEICZhQ2xhc3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDb250cmFjdElELAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphZGxsTmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFSZXBsYWNl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVBlcnNpc3Qp
OwoKCgogIHN0YXRpYyBuc3Jlc3VsdCBVbnJlZ2lzdGVyRmFjdG9yeShjb25zdCBuc0NJRCAmYUNs
YXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGYWN0b3J5ICphRmFj
dG9yeSk7CgoKICBzdGF0aWMgbnNyZXN1bHQgVW5yZWdpc3RlckNvbXBvbmVudChjb25zdCBuc0NJ
RCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKmFMaWJyYXJ5KTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBVbnJlZ2lzdGVyQ29tcG9uZW50U3Bl
Yyhjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lGaWxlICphTGlicmFyeVNwZWMpOwoKCiAgc3RhdGljIG5zcmVzdWx0IEZyZWVM
aWJyYXJpZXModm9pZCk7CgoKCgoKICBzdGF0aWMgbnNyZXN1bHQgQXV0b1JlZ2lzdGVyKFBSSW50
MzIgd2hlbiwgbnNJRmlsZSogZGlyZWN0b3J5KTsKICBzdGF0aWMgbnNyZXN1bHQgQXV0b1JlZ2lz
dGVyQ29tcG9uZW50KFBSSW50MzIgd2hlbiwgbnNJRmlsZSAqY29tcG9uZW50KTsKICBzdGF0aWMg
bnNyZXN1bHQgQXV0b1VucmVnaXN0ZXJDb21wb25lbnQoUFJJbnQzMiB3aGVuLCBuc0lGaWxlICpj
b21wb25lbnQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IElzUmVnaXN0ZXJlZChjb25zdCBuc0NJRCAm
YUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sICphUmVnaXN0ZXJl
ZCk7CgoKICBzdGF0aWMgbnNyZXN1bHQgRW51bWVyYXRlQ0xTSURzKG5zSUVudW1lcmF0b3IqKiBh
RW11bWVyYXRvcik7CgoKICBzdGF0aWMgbnNyZXN1bHQgRW51bWVyYXRlQ29udHJhY3RJRHMobnNJ
RW51bWVyYXRvcioqIGFFbXVtZXJhdG9yKTsKCn07CgoKY2xhc3MgbnNDcmVhdGVJbnN0YW5jZUJ5
Q0lEIDogcHVibGljIG5zQ09NUHRyX2hlbHBlcgogICAgICAgIHsKICAgICAgICAgICAgICAgIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgbnNDcmVhdGVJbnN0YW5jZUJ5Q0lEKCBjb25z
dCBuc0NJRCYgYUNJRCwgbnNJU3VwcG9ydHMqIGFPdXRlciwgbnNyZXN1bHQqIGFFcnJvclB0ciAp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1DSUQoYUNJRCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1PdXRlcihhT3V0
ZXIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRXJy
b3JQdHIoYUVycm9yUHRyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdmly
dHVhbCBuc3Jlc3VsdCBvcGVyYXRvcigpKCBjb25zdCBuc0lJRCYsIHZvaWQqKiApIGNvbnN0OwoK
ICAgICAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5z
Q0lEJiBtQ0lEOwogICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyogbU91dGVyOwog
ICAgICAgICAgICAgICAgICAgICAgICBuc3Jlc3VsdCogbUVycm9yUHRyOwogICAgICAgIH07Cgpj
bGFzcyBuc0NyZWF0ZUluc3RhbmNlQnlDb250cmFjdElEIDogcHVibGljIG5zQ09NUHRyX2hlbHBl
cgogICAgICAgIHsKICAgICAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ICAgbnNDcmVhdGVJbnN0YW5jZUJ5Q29udHJhY3RJRCggY29uc3QgY2hhciogYUNvbnRyYWN0SUQs
IG5zSVN1cHBvcnRzKiBhT3V0ZXIsIG5zcmVzdWx0KiBhRXJyb3JQdHIgKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtQ29udHJhY3RJRChhQ29udHJhY3RJRCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1PdXRlcihhT3V0
ZXIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRXJy
b3JQdHIoYUVycm9yUHRyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdmly
dHVhbCBuc3Jlc3VsdCBvcGVyYXRvcigpKCBjb25zdCBuc0lJRCYsIHZvaWQqKiApIGNvbnN0OwoK
ICAgICAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIG1Db250cmFjdElEOwogICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyogbU91
dGVyOwogICAgICAgICAgICAgICAgICAgICAgICBuc3Jlc3VsdCogbUVycm9yUHRyOwogICAgICAg
IH07CgpjbGFzcyBuc0NyZWF0ZUluc3RhbmNlRnJvbUNhdGVnb3J5IDogcHVibGljIG5zQ09NUHRy
X2hlbHBlcgp7CnB1YmxpYzoKICAgIG5zQ3JlYXRlSW5zdGFuY2VGcm9tQ2F0ZWdvcnkoY29uc3Qg
Y2hhciAqYUNhdGVnb3J5LCBjb25zdCBjaGFyICphRW50cnksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSVN1cHBvcnRzICphT3V0ZXIsIG5zcmVzdWx0ICphRXJyb3JQdHIpCiAg
ICAgICAgOiBtQ2F0ZWdvcnkoYUNhdGVnb3J5KSwKICAgICAgICAgIG1FbnRyeShhRW50cnkpLAog
ICAgICAgICAgbUVycm9yUHRyKGFFcnJvclB0cikKICAgIHsKCiAgICB9CiAgICB2aXJ0dWFsIG5z
cmVzdWx0IG9wZXJhdG9yKCkoIGNvbnN0IG5zSUlEJiwgdm9pZCoqICkgY29uc3Q7CiAgICB2aXJ0
dWFsIH5uc0NyZWF0ZUluc3RhbmNlRnJvbUNhdGVnb3J5KCkge307Cgpwcml2YXRlOgogICAgY29u
c3QgY2hhciAqbUNhdGVnb3J5OwogICAgY29uc3QgY2hhciAqbUVudHJ5OwogICAgbnNJU3VwcG9y
dHMgKm1PdXRlcjsKICAgIG5zcmVzdWx0ICptRXJyb3JQdHI7Cn07CgppbmxpbmUKY29uc3QgbnND
cmVhdGVJbnN0YW5jZUJ5Q0lECmRvX0NyZWF0ZUluc3RhbmNlKCBjb25zdCBuc0NJRCYgYUNJRCwg
bnNyZXN1bHQqIGVycm9yID0gMCApCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIG5z
Q3JlYXRlSW5zdGFuY2VCeUNJRChhQ0lELCAwLCBlcnJvcik7CiAgICAgICAgfQoKaW5saW5lCmNv
bnN0IG5zQ3JlYXRlSW5zdGFuY2VCeUNJRApkb19DcmVhdGVJbnN0YW5jZSggY29uc3QgbnNDSUQm
IGFDSUQsIG5zSVN1cHBvcnRzKiBhT3V0ZXIsIG5zcmVzdWx0KiBlcnJvciA9IDAgKQogICAgICAg
IHsKICAgICAgICAgICAgICAgIHJldHVybiBuc0NyZWF0ZUluc3RhbmNlQnlDSUQoYUNJRCwgYU91
dGVyLCBlcnJvcik7CiAgICAgICAgfQoKaW5saW5lCmNvbnN0IG5zQ3JlYXRlSW5zdGFuY2VCeUNv
bnRyYWN0SUQKZG9fQ3JlYXRlSW5zdGFuY2UoIGNvbnN0IGNoYXIqIGFDb250cmFjdElELCBuc3Jl
c3VsdCogZXJyb3IgPSAwICkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnNDcmVh
dGVJbnN0YW5jZUJ5Q29udHJhY3RJRChhQ29udHJhY3RJRCwgMCwgZXJyb3IpOwogICAgICAgIH0K
CmlubGluZQpjb25zdCBuc0NyZWF0ZUluc3RhbmNlQnlDb250cmFjdElECmRvX0NyZWF0ZUluc3Rh
bmNlKCBjb25zdCBjaGFyKiBhQ29udHJhY3RJRCwgbnNJU3VwcG9ydHMqIGFPdXRlciwgbnNyZXN1
bHQqIGVycm9yID0gMCApCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIG5zQ3JlYXRl
SW5zdGFuY2VCeUNvbnRyYWN0SUQoYUNvbnRyYWN0SUQsIGFPdXRlciwgZXJyb3IpOwogICAgICAg
IH0KCmlubGluZQpjb25zdCBuc0NyZWF0ZUluc3RhbmNlRnJvbUNhdGVnb3J5CmRvX0NyZWF0ZUlu
c3RhbmNlRnJvbUNhdGVnb3J5KCBjb25zdCBjaGFyICphQ2F0ZWdvcnksIGNvbnN0IGNoYXIgKmFF
bnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zcmVzdWx0ICphRXJyb3JQdHIg
PSAwKQp7CiAgICByZXR1cm4gbnNDcmVhdGVJbnN0YW5jZUZyb21DYXRlZ29yeShhQ2F0ZWdvcnks
IGFFbnRyeSwgMCwgYUVycm9yUHRyKTsKfQoKaW5saW5lCmNvbnN0IG5zQ3JlYXRlSW5zdGFuY2VG
cm9tQ2F0ZWdvcnkKZG9fQ3JlYXRlSW5zdGFuY2VGcm9tQ2F0ZWdvcnkoIGNvbnN0IGNoYXIgKmFD
YXRlZ29yeSwgY29uc3QgY2hhciAqYUVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJU3VwcG9ydHMgKmFPdXRlciwgbnNyZXN1bHQgKmFFcnJvclB0ciA9IDApCnsKICAgIHJl
dHVybiBuc0NyZWF0ZUluc3RhbmNlRnJvbUNhdGVnb3J5KGFDYXRlZ29yeSwgYUVudHJ5LCBhT3V0
ZXIsIGFFcnJvclB0cik7Cn0KCgpleHRlcm4gY29uc3QgY2hhciB4cGNvbUtleU5hbWVbXTsKZXh0
ZXJuIGNvbnN0IGNoYXIgeHBjb21Db21wb25lbnRzS2V5TmFtZVtdOwpleHRlcm4gY29uc3QgY2hh
ciBsYXN0TW9kVmFsdWVOYW1lW107CmV4dGVybiBjb25zdCBjaGFyIGZpbGVTaXplVmFsdWVOYW1l
W107CmV4dGVybiBjb25zdCBjaGFyIG5hdGl2ZUNvbXBvbmVudFR5cGVbXTsKIyA2MDMgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiIDIKIyAyOCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVNlcnZpY2VNYW5hZ2VyLmgiIDIKIyAxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJRC5oIiAxCiMgMjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lTZXJ2aWNlTWFuYWdlci5oIiAyCgoKCgoKY2xhc3MgbnNJU2h1dGRvd25MaXN0ZW5lcjsKY2xh
c3MgbnNJRGlyZWN0b3J5U2VydmljZVByb3ZpZGVyOwojIDg3ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJU2VydmljZU1hbmFnZXIuaCIKY2xhc3MgbnNJU2VydmljZU1hbmFnZXIgOiBwdWJs
aWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6CgogICAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQo
KSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHhjZjBkZjNiMCwgMHgzNDAxLCAweDExZDIs
IHsweDgxLCAweDYzLCAweDAwLCAweDYwLCAweDA4LCAweDExLCAweDlkLCAweDdhfSB9OyByZXR1
cm4gaWlkO307CgoKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdAogICAgUmVnaXN0ZXJTZXJ2aWNl
KGNvbnN0IG5zQ0lEJiBhQ2xhc3MsIG5zSVN1cHBvcnRzKiBhU2VydmljZSkgPSAwOwojIDExMSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlcnZpY2VNYW5hZ2VyLmgiCiAgICB2aXJ0dWFs
IG5zcmVzdWx0CiAgICBVbnJlZ2lzdGVyU2VydmljZShjb25zdCBuc0NJRCYgYUNsYXNzKSA9IDA7
CgogICAgdmlydHVhbCBuc3Jlc3VsdAogICAgR2V0U2VydmljZShjb25zdCBuc0NJRCYgYUNsYXNz
LCBjb25zdCBuc0lJRCYgYUlJRCwKICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqICpyZXN1bHQs
CiAgICAgICAgICAgICAgIG5zSVNodXRkb3duTGlzdGVuZXIqIHNodXRkb3duTGlzdGVuZXIgPSAw
KSA9IDA7CgoKICAgIHZpcnR1YWwgbnNyZXN1bHQKICAgIFJlbGVhc2VTZXJ2aWNlKGNvbnN0IG5z
Q0lEJiBhQ2xhc3MsIG5zSVN1cHBvcnRzKiBzZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgbnNJ
U2h1dGRvd25MaXN0ZW5lciogc2h1dGRvd25MaXN0ZW5lciA9IDApID0gMDsKCgoKCiAgICB2aXJ0
dWFsIG5zcmVzdWx0CiAgICBSZWdpc3RlclNlcnZpY2UoY29uc3QgY2hhciogYUNvbnRyYWN0SUQs
IG5zSVN1cHBvcnRzKiBhU2VydmljZSkgPSAwOwoKICAgIHZpcnR1YWwgbnNyZXN1bHQKICAgIFVu
cmVnaXN0ZXJTZXJ2aWNlKGNvbnN0IGNoYXIqIGFDb250cmFjdElEKSA9IDA7CgogICAgdmlydHVh
bCBuc3Jlc3VsdAogICAgR2V0U2VydmljZShjb25zdCBjaGFyKiBhQ29udHJhY3RJRCwgY29uc3Qg
bnNJSUQmIGFJSUQsCiAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzKiAqcmVzdWx0LAogICAgICAg
ICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyID0gMCkgPSAwOwoK
CiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBSZWxlYXNlU2VydmljZShjb25zdCBjaGFyKiBhQ29u
dHJhY3RJRCwgbnNJU3VwcG9ydHMqIHNlcnZpY2UsCiAgICAgICAgICAgICAgICAgICBuc0lTaHV0
ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyID0gMCkgPSAwOwoKfTsKIyAxNTggIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIgpjbGFzcyBuc0lTaHV0ZG93
bkxpc3RlbmVyIDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgoKICAgIHN0YXRpYyBjb25z
dCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4NTZkZWNhZTAs
IDB4MzQwNiwgMHgxMWQyLCB7MHg4MSwgMHg2MywgMHgwMCwgMHg2MCwgMHgwOCwgMHgxMSwgMHg5
ZCwgMHg3YX0gfTsgcmV0dXJuIGlpZDt9OwoKICAgIHZpcnR1YWwgbnNyZXN1bHQKICAgIE9uU2h1
dGRvd24oY29uc3QgbnNDSUQmIGFDbGFzcywgbnNJU3VwcG9ydHMqIHNlcnZpY2UpID0gMDsKCn07
CgoKCgpjbGFzcyBuc1NlcnZpY2VNYW5hZ2VyIHsKcHVibGljOgoKICAgIHN0YXRpYyBuc3Jlc3Vs
dAogICAgUmVnaXN0ZXJTZXJ2aWNlKGNvbnN0IG5zQ0lEJiBhQ2xhc3MsIG5zSVN1cHBvcnRzKiBh
U2VydmljZSk7CgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBVbnJlZ2lzdGVyU2VydmljZShjb25z
dCBuc0NJRCYgYUNsYXNzKTsKCiAgICBzdGF0aWMgbnNyZXN1bHQKICAgIEdldFNlcnZpY2UoY29u
c3QgbnNDSUQmIGFDbGFzcywgY29uc3QgbnNJSUQmIGFJSUQsCiAgICAgICAgICAgICAgIG5zSVN1
cHBvcnRzKiAqcmVzdWx0LAogICAgICAgICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0
ZG93bkxpc3RlbmVyID0gMCk7CgoKICAgIHN0YXRpYyBuc3Jlc3VsdAogICAgUmVsZWFzZVNlcnZp
Y2UoY29uc3QgbnNDSUQmIGFDbGFzcywgbnNJU3VwcG9ydHMqIHNlcnZpY2UsCiAgICAgICAgICAg
ICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyID0gMCk7CgoKCgog
ICAgc3RhdGljIG5zcmVzdWx0CiAgICBSZWdpc3RlclNlcnZpY2UoY29uc3QgY2hhciogYUNvbnRy
YWN0SUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZSk7CgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBV
bnJlZ2lzdGVyU2VydmljZShjb25zdCBjaGFyKiBhQ29udHJhY3RJRCk7CgogICAgc3RhdGljIG5z
cmVzdWx0CiAgICBHZXRTZXJ2aWNlKGNvbnN0IGNoYXIqIGFDb250cmFjdElELCBjb25zdCBuc0lJ
RCYgYUlJRCwKICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqICpyZXN1bHQsCiAgICAgICAgICAg
ICAgIG5zSVNodXRkb3duTGlzdGVuZXIqIHNodXRkb3duTGlzdGVuZXIgPSAwKTsKCgogICAgc3Rh
dGljIG5zcmVzdWx0CiAgICBSZWxlYXNlU2VydmljZShjb25zdCBjaGFyKiBhQ29udHJhY3RJRCwg
bnNJU3VwcG9ydHMqIHNlcnZpY2UsCiAgICAgICAgICAgICAgICAgICBuc0lTaHV0ZG93bkxpc3Rl
bmVyKiBzaHV0ZG93bkxpc3RlbmVyID0gMCk7CgoKCiAgICBzdGF0aWMgbnNyZXN1bHQgR2V0R2xv
YmFsU2VydmljZU1hbmFnZXIobnNJU2VydmljZU1hbmFnZXIqICpyZXN1bHQpOwoKCgogICAgc3Rh
dGljIG5zcmVzdWx0IFNodXRkb3duR2xvYmFsU2VydmljZU1hbmFnZXIobnNJU2VydmljZU1hbmFn
ZXIqICpyZXN1bHQpOwp9OwoKCgoKY2xhc3MgbnNHZXRTZXJ2aWNlQnlDSUQgOiBwdWJsaWMgbnND
T01QdHJfaGVscGVyCiAgewogICAgcHVibGljOgogICAgICBuc0dldFNlcnZpY2VCeUNJRCggY29u
c3QgbnNDSUQmIGFDSUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZU1hbmFnZXIsIG5zcmVzdWx0KiBh
RXJyb3JQdHIgKQogICAgICAgICAgOiBtQ0lEKGFDSUQpLAogICAgICAgICAgICBtU2VydmljZU1h
bmFnZXIoIGRvX1F1ZXJ5SW50ZXJmYWNlKGFTZXJ2aWNlTWFuYWdlcikgKSwKICAgICAgICAgICAg
bUVycm9yUHRyKGFFcnJvclB0cikKICAgICAgICB7CgogICAgICAgIH0KCiAgICAgICAgICB2aXJ0
dWFsIG5zcmVzdWx0IG9wZXJhdG9yKCkoIGNvbnN0IG5zSUlEJiwgdm9pZCoqICkgY29uc3Q7CiAg
ICAgICAgdmlydHVhbCB+bnNHZXRTZXJ2aWNlQnlDSUQoKSB7fTsKCiAgICBwcml2YXRlOgogICAg
ICBjb25zdCBuc0NJRCYgbUNJRDsKICAgICAgbnNDT01QdHI8bnNJU2VydmljZU1hbmFnZXI+IG1T
ZXJ2aWNlTWFuYWdlcjsKICAgICAgbnNyZXN1bHQqIG1FcnJvclB0cjsKICB9OwoKaW5saW5lCmNv
bnN0IG5zR2V0U2VydmljZUJ5Q0lECmRvX0dldFNlcnZpY2UoIGNvbnN0IG5zQ0lEJiBhQ0lELCBu
c3Jlc3VsdCogZXJyb3IgPSAwICkKICB7CiAgICByZXR1cm4gbnNHZXRTZXJ2aWNlQnlDSUQoYUNJ
RCwgMCwgZXJyb3IpOwogIH0KCmlubGluZQpjb25zdCBuc0dldFNlcnZpY2VCeUNJRApkb19HZXRT
ZXJ2aWNlKCBjb25zdCBuc0NJRCYgYUNJRCwgbnNJU3VwcG9ydHMqIGFTZXJ2aWNlTWFuYWdlciwg
bnNyZXN1bHQqIGVycm9yID0gMCApCiAgewogICAgcmV0dXJuIG5zR2V0U2VydmljZUJ5Q0lEKGFD
SUQsIGFTZXJ2aWNlTWFuYWdlciwgZXJyb3IpOwogIH0KCmNsYXNzIG5zR2V0U2VydmljZUJ5Q29u
dHJhY3RJRCA6IHB1YmxpYyBuc0NPTVB0cl9oZWxwZXIKICB7CiAgICBwdWJsaWM6CiAgICAgIG5z
R2V0U2VydmljZUJ5Q29udHJhY3RJRCggY29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zSVN1cHBv
cnRzKiBhU2VydmljZU1hbmFnZXIsIG5zcmVzdWx0KiBhRXJyb3JQdHIgKQogICAgICAgICAgOiBt
Q29udHJhY3RJRChhQ29udHJhY3RJRCksCiAgICAgICAgICAgIG1TZXJ2aWNlTWFuYWdlciggZG9f
UXVlcnlJbnRlcmZhY2UoYVNlcnZpY2VNYW5hZ2VyKSApLAogICAgICAgICAgICBtRXJyb3JQdHIo
YUVycm9yUHRyKQogICAgICAgIHsKCiAgICAgICAgfQoKICAgICAgICAgIHZpcnR1YWwgbnNyZXN1
bHQgb3BlcmF0b3IoKSggY29uc3QgbnNJSUQmLCB2b2lkKiogKSBjb25zdDsKCiAgICAgICAgdmly
dHVhbCB+bnNHZXRTZXJ2aWNlQnlDb250cmFjdElEKCkge307CgogICAgcHJpdmF0ZToKICAgICAg
Y29uc3QgY2hhciogbUNvbnRyYWN0SUQ7CiAgICAgIG5zQ09NUHRyPG5zSVNlcnZpY2VNYW5hZ2Vy
PiBtU2VydmljZU1hbmFnZXI7CiAgICAgIG5zcmVzdWx0KiBtRXJyb3JQdHI7CiAgfTsKCmlubGlu
ZQpjb25zdCBuc0dldFNlcnZpY2VCeUNvbnRyYWN0SUQKZG9fR2V0U2VydmljZSggY29uc3QgY2hh
ciogYUNvbnRyYWN0SUQsIG5zcmVzdWx0KiBlcnJvciA9IDAgKQogIHsKICAgIHJldHVybiBuc0dl
dFNlcnZpY2VCeUNvbnRyYWN0SUQoYUNvbnRyYWN0SUQsIDAsIGVycm9yKTsKICB9CgppbmxpbmUK
Y29uc3QgbnNHZXRTZXJ2aWNlQnlDb250cmFjdElECmRvX0dldFNlcnZpY2UoIGNvbnN0IGNoYXIq
IGFDb250cmFjdElELCBuc0lTdXBwb3J0cyogYVNlcnZpY2VNYW5hZ2VyLCBuc3Jlc3VsdCogZXJy
b3IgPSAwICkKICB7CiAgICByZXR1cm4gbnNHZXRTZXJ2aWNlQnlDb250cmFjdElEKGFDb250cmFj
dElELCBhU2VydmljZU1hbmFnZXIsIGVycm9yKTsKICB9CgpjbGFzcyBuc0dldFNlcnZpY2VGcm9t
Q2F0ZWdvcnkgOiBwdWJsaWMgbnNDT01QdHJfaGVscGVyCnsKcHVibGljOgogIG5zR2V0U2Vydmlj
ZUZyb21DYXRlZ29yeShjb25zdCBjaGFyKiBhQ2F0ZWdvcnksIGNvbnN0IGNoYXIqIGFFbnRyeSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIGFTZXJ2aWNlTWFuYWdlciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNyZXN1bHQqIGFFcnJvclB0cikKICAgIDogbUNh
dGVnb3J5KGFDYXRlZ29yeSksCiAgICAgIG1FbnRyeShhRW50cnkpLAogICAgICBtU2VydmljZU1h
bmFnZXIoIGRvX1F1ZXJ5SW50ZXJmYWNlKGFTZXJ2aWNlTWFuYWdlcikgKSwKICAgICAgbUVycm9y
UHRyKGFFcnJvclB0cikKICB7CgogIH0KCiAgdmlydHVhbCBuc3Jlc3VsdCBvcGVyYXRvcigpKCBj
b25zdCBuc0lJRCYsIHZvaWQqKiApIGNvbnN0OwogIHZpcnR1YWwgfm5zR2V0U2VydmljZUZyb21D
YXRlZ29yeSgpIHt9Owpwcm90ZWN0ZWQ6CiAgY29uc3QgY2hhciogbUNhdGVnb3J5OwogIGNvbnN0
IGNoYXIqIG1FbnRyeTsKICBuc0NPTVB0cjxuc0lTZXJ2aWNlTWFuYWdlcj4gbVNlcnZpY2VNYW5h
Z2VyOwogIG5zcmVzdWx0KiBtRXJyb3JQdHI7Cn07CgppbmxpbmUKY29uc3QgbnNHZXRTZXJ2aWNl
RnJvbUNhdGVnb3J5CmRvX0dldFNlcnZpY2VGcm9tQ2F0ZWdvcnkoIGNvbnN0IGNoYXIqIGNhdGVn
b3J5LCBjb25zdCBjaGFyKiBlbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNyZXN1
bHQqIGVycm9yID0gMCkKICB7CiAgICByZXR1cm4gbnNHZXRTZXJ2aWNlRnJvbUNhdGVnb3J5KGNh
dGVnb3J5LCBlbnRyeSwgMCwgZXJyb3IpOwogIH0KIyAzNTYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3U2VydmljZU1h
bmFnZXIobnNJU2VydmljZU1hbmFnZXIqICpyZXN1bHQpOwojIDM2OSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVNlcnZpY2VNYW5hZ2VyLmgiCmV4dGVybiBuc3Jlc3VsdApOU19Jbml0WFBD
T00obnNJU2VydmljZU1hbmFnZXIqICpyZXN1bHQsIG5zSUZpbGUqIGJpbkRpcmVjdG9yeSk7CgoK
CgpleHRlcm4gbnNyZXN1bHQKTlNfSW5pdFhQQ09NMihuc0lTZXJ2aWNlTWFuYWdlciogKnJlc3Vs
dCwgbnNJRmlsZSogYmluRGlyZWN0b3J5LCBuc0lEaXJlY3RvcnlTZXJ2aWNlUHJvdmlkZXIqIGFw
cEZpbGVMb2NhdGlvblByb3ZpZGVyKTsKIyAzODYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lTZXJ2aWNlTWFuYWdlci5oIgpleHRlcm4gbnNyZXN1bHQKTlNfU2h1dGRvd25YUENPTShuc0lT
ZXJ2aWNlTWFuYWdlciogc2Vydk1ncik7CiMgMzQgIm5zVGV4dFRyYW5zZm9ybWVyLmNwcCIgMgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1VuaWNoYXJVdGlsQ0lJRC5oIiAxCiMgMjYg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1VuaWNoYXJVdGlsQ0lJRC5oIgojIDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc1VuaWNoYXJVdGlsQ0lJRC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zY29yZS5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1VuaWNo
YXJVdGlsQ0lJRC5oIiAyCiMgMzUgIm5zVGV4dFRyYW5zZm9ybWVyLmNwcCIgMgojIDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDYXNlQ29udmVyc2lvbi5oIiAxCiMgMjYgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lDYXNlQ29udmVyc2lvbi5oIgojIDEgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lDYXNlQ29udmVyc2lvbi5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
Y29yZS5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDYXNlQ29udmVyc2lv
bi5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDEKIyAyOSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNhc2VDb252ZXJzaW9uLmgiIDIKCgoKCgoKY2xh
c3MgbnNJQ2FzZUNvbnZlcnNpb24gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewoKcHVibGljOgoKICBz
dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAw
eDdkM2Q4ZTAsIDB4OTYxNCwgMHgxMWQyLCB7IDB4YjMsIDB4YWQsIDB4MCwgMHg4MCwgMHg1Ziwg
MHg4YSwgMHg2NiwgMHg3MCB9IH07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBU
b1VwcGVyKCBQUlVuaWNoYXIgYUNoYXIsIFBSVW5pY2hhciogYVJldHVybikgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBUb0xvd2VyKCBQUlVuaWNoYXIgYUNoYXIsIFBSVW5pY2hhciogYVJldHVy
bikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUb1RpdGxlKCBQUlVuaWNoYXIgYUNoYXIsIFBS
VW5pY2hhciogYVJldHVybikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUb1VwcGVyKCBjb25z
dCBQUlVuaWNoYXIqIGFuQXJyYXksIFBSVW5pY2hhciogYVJldHVybiwgUFJVaW50MzIgYUxlbikg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUb0xvd2VyKCBjb25zdCBQUlVuaWNoYXIqIGFuQXJy
YXksIFBSVW5pY2hhciogYVJldHVybiwgUFJVaW50MzIgYUxlbikgPSAwOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBUb1RpdGxlKCBjb25zdCBQUlVuaWNoYXIqIGFuQXJyYXksIFBSVW5pY2hhciogYVJl
dHVybiwKICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFMZW4sIFBSQm9vbCBhU3RhcnRJ
bldvcmRCdW5kYXJ5PTEpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgVG9VcHBlcihjb25zdCBQ
UlVuaWNoYXIqIGFuSW4sIFBSVWludDMyIGFMZW4sIG5zU3RyaW5nJiBhbk91dCwgY29uc3QgUFJV
bmljaGFyKiBhTG9jYWxlPTApID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFRvTG93ZXIoY29uc3Qg
UFJVbmljaGFyKiBhbkluLCBQUlVpbnQzMiBhTGVuLCBuc1N0cmluZyYgYW5PdXQsIGNvbnN0IFBS
VW5pY2hhciogYUxvY2FsZT0wICkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgVG9UaXRsZShjb25z
dCBQUlVuaWNoYXIqIGFuSW4sIFBSVWludDMyIGFMZW4sIG5zU3RyaW5nJiBhbk91dCwgY29uc3Qg
UFJVbmljaGFyKiBhTG9jYWxlPTAsIFBSQm9vbCBhU3RhcnRJbldvcmRCb3VuZGFyeT0xKSA9IDA7
Cgp9OwojIDM2ICJuc1RleHRUcmFuc2Zvcm1lci5jcHAiIDIKIyAxICIvd2luZG93cy9oZGExMi9t
b3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJlbnYuaCIgMQojIDIyICIvd2luZG93
cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJlbnYuaCIKIyAxICIv
d2luZG93cy9oZGExMi9tb3otY3ZzL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5o
IiAxCiMgMjMgIi93aW5kb3dzL2hkYTEyL21vei1jdnMvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw
ci9wcmVudi5oIiAyCgoKCgoKCgpleHRlcm4gIkMiIHsKCgoKCgpleHRlcm4gY2hhciogUFJfR2V0
RW52KGNvbnN0IGNoYXIgKnZhcik7CgoKCgoKfQojIDM3ICJuc1RleHRUcmFuc2Zvcm1lci5jcHAi
IDIKCm5zQXV0b1RleHRCdWZmZXI6Om5zQXV0b1RleHRCdWZmZXIoKQogIDogbUJ1ZmZlcihtQXV0
b0J1ZmZlciksCiAgICBtQnVmZmVyTGVuKDEyOCkKewp9Cgpuc0F1dG9UZXh0QnVmZmVyOjp+bnNB
dXRvVGV4dEJ1ZmZlcigpCnsKICBpZiAobUJ1ZmZlciAmJiAobUJ1ZmZlciAhPSBtQXV0b0J1ZmZl
cikpIHsKICAgIGRlbGV0ZSBbXSBtQnVmZmVyOwogIH0KfQoKbnNyZXN1bHQKbnNBdXRvVGV4dEJ1
ZmZlcjo6R3Jvd0J5KFBSSW50MzIgYUF0TGVhc3QsIFBSQm9vbCBhQ29weVRvSGVhZCkKewogIFBS
SW50MzIgbmV3U2l6ZSA9IG1CdWZmZXJMZW4gKiAyOwogIGlmIChuZXdTaXplIDwgbUJ1ZmZlckxl
biArIGFBdExlYXN0KSB7CiAgICBuZXdTaXplID0gbUJ1ZmZlckxlbiArIGFBdExlYXN0ICsgMTAw
OwogIH0KICByZXR1cm4gR3Jvd1RvKG5ld1NpemUsIGFDb3B5VG9IZWFkKTsKfQoKbnNyZXN1bHQK
bnNBdXRvVGV4dEJ1ZmZlcjo6R3Jvd1RvKFBSSW50MzIgYU5ld1NpemUsIFBSQm9vbCBhQ29weVRv
SGVhZCkKewogIGlmIChhTmV3U2l6ZSA+IG1CdWZmZXJMZW4pIHsKICAgIFBSVW5pY2hhciogbmV3
QnVmZmVyID0gbmV3IFBSVW5pY2hhclthTmV3U2l6ZV07CiAgICBpZiAoIW5ld0J1ZmZlcikgewog
ICAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA3MDAwZUwpOwogICAgfQogICAgbnNDUlQ6Om1l
bWNweSgmbmV3QnVmZmVyW2FDb3B5VG9IZWFkID8gMCA6IG1CdWZmZXJMZW5dLAogICAgICAgICAg
ICAgICAgICBtQnVmZmVyLCBzaXplb2YoUFJVbmljaGFyKSAqIG1CdWZmZXJMZW4pOwogICAgaWYg
KG1CdWZmZXIgIT0gbUF1dG9CdWZmZXIpIHsKICAgICAgZGVsZXRlIFtdIG1CdWZmZXI7CiAgICB9
CiAgICBtQnVmZmVyID0gbmV3QnVmZmVyOwogICAgbUJ1ZmZlckxlbiA9IGFOZXdTaXplOwogIH0K
ICByZXR1cm4gMDsKfQoKCgpzdGF0aWMgY29uc3QgbnNJSUQga1VuaWNoYXJVdGlsQ0lEID0geyAw
eGNjMTBjNzUwLCAweDllYzMsIDB4MTFkMiwgeyAweGIzLCAweGFlLCAweDAsIDB4ODAsIDB4NWYs
IDB4OGEsIDB4NjYsIDB4NzAgfSB9OwoKc3RhdGljIG5zSUNhc2VDb252ZXJzaW9uKiBnQ2FzZUNv
bnYgPSAwOwoKbnNyZXN1bHQKbnNUZXh0VHJhbnNmb3JtZXI6OkluaXRpYWxpemUoKQp7CiAgbnNy
ZXN1bHQgcmVzID0gMDsKICBpZiAoIWdDYXNlQ29udikgewogICAgcmVzID0gbnNTZXJ2aWNlTWFu
YWdlcjo6R2V0U2VydmljZShrVW5pY2hhclV0aWxDSUQsIG5zQ09NVHlwZUluZm88bnNJQ2FzZUNv
bnZlcnNpb24+OjpHZXRJSUQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKG5zSVN1cHBvcnRzKiopJmdDYXNlQ29udik7CiAgICB7fTsKICAgIHt9OwogIH0KICByZXR1
cm4gcmVzOwp9Cgp2b2lkCm5zVGV4dFRyYW5zZm9ybWVyOjpTaHV0ZG93bigpCnsKICBpZiAoZ0Nh
c2VDb252KSB7CiAgICBuc1NlcnZpY2VNYW5hZ2VyOjpSZWxlYXNlU2VydmljZShrVW5pY2hhclV0
aWxDSUQsIGdDYXNlQ29udik7CiAgICBnQ2FzZUNvbnYgPSAwOwogIH0KfQojIDExOCAibnNUZXh0
VHJhbnNmb3JtZXIuY3BwIgpuc1RleHRUcmFuc2Zvcm1lcjo6bnNUZXh0VHJhbnNmb3JtZXIobnNJ
TGluZUJyZWFrZXIqIGFMaW5lQnJlYWtlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSVdvcmRCcmVha2VyKiBhV29yZEJyZWFrZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KQogIDogbUZyYWco
MCksCiAgICBtT2Zmc2V0KDApLAogICAgbU1vZGUoZU5vcm1hbCksCiAgICBtTGluZUJyZWFrZXIo
YUxpbmVCcmVha2VyKSwKICAgIG1Xb3JkQnJlYWtlcihhV29yZEJyZWFrZXIpLAogICAgbUJ1ZmZl
clBvcygwKSwKICAgIG1GbGFncygwKSwKICAgIG1UZXh0VHJhbnNmb3JtKDApCnsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGFQcmVzQ29udGV4dC0+CiAgICBHZXRMYW5n
dWFnZVNwZWNpZmljVHJhbnNmb3JtVHlwZSgmbUxhbmd1YWdlU3BlY2lmaWNUcmFuc2Zvcm1UeXBl
KTsKCiAgaWYgKGFMaW5lQnJlYWtlciA9PSAwICYmIGFXb3JkQnJlYWtlciA9PSAwICkKICAgIHt9
OwojIDE0NSAibnNUZXh0VHJhbnNmb3JtZXIuY3BwIgp9Cgpuc1RleHRUcmFuc2Zvcm1lcjo6fm5z
VGV4dFRyYW5zZm9ybWVyKCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
fQoKbnNyZXN1bHQKbnNUZXh0VHJhbnNmb3JtZXI6OkluaXQobnNJRnJhbWUqIGFGcmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNvbnRlbnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgIFBSSW50MzIgYVN0YXJ0aW5nT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAg
ICBQUkJvb2wgYUxlYXZlQXNBc2NpaSkKewoKICBuc3Jlc3VsdCBydjsKICBuc0NPTVB0cjxuc0lU
ZXh0Q29udGVudD4gdGMgPSBkb19RdWVyeUludGVyZmFjZShhQ29udGVudCwgJnJ2KTsKICBpZiAo
dGMuZ2V0KCkpIHsKICAgIHRjLT5HZXRUZXh0KCZtRnJhZyk7CgoKICAgIGlmICgoIShhU3RhcnRp
bmdPZmZzZXQgPj0gMCkgPyAxIDogMCkpIHsKICAgICAgYVN0YXJ0aW5nT2Zmc2V0ID0gMDsKICAg
IH0KICAgIGVsc2UgaWYgKCghKGFTdGFydGluZ09mZnNldCA8PSBtRnJhZy0+R2V0TGVuZ3RoKCkp
ID8gMSA6IDApKSB7CgogICAgICBhU3RhcnRpbmdPZmZzZXQgPSBtRnJhZy0+R2V0TGVuZ3RoKCk7
CiAgICB9CiAgICBtT2Zmc2V0ID0gYVN0YXJ0aW5nT2Zmc2V0OwoKCiAgICBjb25zdCBuc1N0eWxl
VGV4dCogc3R5bGVUZXh0OwogICAgYUZyYW1lLT5HZXRTdHlsZURhdGEoZVN0eWxlU3RydWN0X1Rl
eHQsIChjb25zdCBuc1N0eWxlU3RydWN0KiYpIHN0eWxlVGV4dCk7CiAgICBpZiAoMSA9PSBzdHls
ZVRleHQtPm1XaGl0ZVNwYWNlKSB7CiAgICAgIG1Nb2RlID0gZVByZWZvcm1hdHRlZDsKICAgIH0K
ICAgIGVsc2UgaWYgKDMgPT0gc3R5bGVUZXh0LT5tV2hpdGVTcGFjZSkgewogICAgICBtTW9kZSA9
IGVQcmVXcmFwOwogICAgfQogICAgbVRleHRUcmFuc2Zvcm0gPSBzdHlsZVRleHQtPm1UZXh0VHJh
bnNmb3JtOwoKICAgIGlmIChhTGVhdmVBc0FzY2lpKSB7CiAgICAgIFNldExlYXZlQXNBc2NpaSgx
KTsKCgogICAgICBpZiAobUZyYWctPklzMmIoKSB8fCAoZU5vcm1hbCAhPSBtTW9kZSkgfHwKICAg
ICAgICAgIChtTGFuZ3VhZ2VTcGVjaWZpY1RyYW5zZm9ybVR5cGUgIT0KICAgICAgICAgICBlTGFu
Z3VhZ2VTcGVjaWZpY1RyYW5zZm9ybVR5cGVfTm9uZSkpCgogICAgICAgIFNldExlYXZlQXNBc2Np
aSgwKTsKICAgIH0KICAgIGVsc2UKICAgICAgU2V0TGVhdmVBc0FzY2lpKDApOwogIH0KICByZXR1
cm4gcnY7Cn0KCgoKClBSSW50MzIKbnNUZXh0VHJhbnNmb3JtZXI6OlNjYW5Ob3JtYWxXaGl0ZVNw
YWNlX0YoKQp7CiAgY29uc3QgbnNUZXh0RnJhZ21lbnQqIGZyYWcgPSBtRnJhZzsKICBQUkludDMy
IGZyYWdMZW4gPSBmcmFnLT5HZXRMZW5ndGgoKTsKICBQUkludDMyIG9mZnNldCA9IG1PZmZzZXQ7
CgogIGZvciAoOyBvZmZzZXQgPCBmcmFnTGVuOyBvZmZzZXQrKykgewogICAgUFJVbmljaGFyIGNo
ID0gZnJhZy0+Q2hhckF0KG9mZnNldCk7CiAgICBpZiAoISgoKGNoKSA9PSAnICcpIHx8ICgoY2gp
ID09ICdcdCcpIHx8ICgoY2gpID09ICdcbicpKSkgewoKCiAgICAgIGlmICghKCgoY2gpID09IDE3
MykgfHwgKChjaCkgPT0gJ1xyJykpKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICB9
CgoKICBpZiAobUJ1ZmZlclBvcyA+PSBtVHJhbnNmb3JtQnVmLm1CdWZmZXJMZW4pIHsKICAgIG1U
cmFuc2Zvcm1CdWYuR3Jvd0J5KDEyOCk7CiAgfQoKICBpZiAoVHJhbnNmb3JtZWRUZXh0SXNBc2Np
aSgpKSB7CiAgICB1bnNpZ25lZCBjaGFyKiBicCA9ICh1bnNpZ25lZCBjaGFyKiltVHJhbnNmb3Jt
QnVmLm1CdWZmZXI7CiAgICBicFttQnVmZmVyUG9zKytdID0gJyAnOwogIH0gZWxzZSB7CiAgICBt
VHJhbnNmb3JtQnVmLm1CdWZmZXJbbUJ1ZmZlclBvcysrXSA9IFBSVW5pY2hhcignICcpOwogIH0K
ICByZXR1cm4gb2Zmc2V0Owp9Cgp2b2lkCm5zVGV4dFRyYW5zZm9ybWVyOjpDb252ZXJ0VHJhbnNm
b3JtZWRUZXh0VG9Vbmljb2RlKCkKewoKICBQUkludDMyIGxhc3RDaGFyID0gbUJ1ZmZlclBvcyAt
IDE7CiAgdW5zaWduZWQgY2hhciogY3AxID0gKHVuc2lnbmVkIGNoYXIqKW1UcmFuc2Zvcm1CdWYu
bUJ1ZmZlciArIGxhc3RDaGFyOwogIFBSVW5pY2hhciogY3AyID0gbVRyYW5zZm9ybUJ1Zi5tQnVm
ZmVyICsgbGFzdENoYXI7CgogIHt9OwoKICBmb3IgKFBSSW50MzIgY291bnQgPSBtQnVmZmVyUG9z
OyBjb3VudCA+IDA7IGNvdW50LS0pIHsKICAgICpjcDItLSA9IFBSVW5pY2hhcigqY3AxLS0pOwog
IH0KfQoKClBSSW50MzIKbnNUZXh0VHJhbnNmb3JtZXI6OlNjYW5Ob3JtYWxBc2NpaVRleHRfRihQ
UkludDMyKiBhV29yZExlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUkJvb2wqIGFXYXNUcmFuc2Zvcm1lZCkKewogIGNvbnN0IG5zVGV4dEZyYWdtZW50KiBmcmFn
ID0gbUZyYWc7CiAgUFJJbnQzMiBmcmFnTGVuID0gZnJhZy0+R2V0TGVuZ3RoKCk7CiAgUFJJbnQz
MiBvZmZzZXQgPSBtT2Zmc2V0OwogIFBSSW50MzIgcHJldkJ1ZmZlclBvcyA9IG1CdWZmZXJQb3M7
CiAgY29uc3QgdW5zaWduZWQgY2hhciogY3AgPSAoY29uc3QgdW5zaWduZWQgY2hhciopZnJhZy0+
R2V0MWIoKSArIG9mZnNldDsKICB1bmlvbiB7CiAgICB1bnNpZ25lZCBjaGFyKiBicDE7CiAgICBQ
UlVuaWNoYXIqIGJwMjsKICB9OwogIGJwMiA9IG1UcmFuc2Zvcm1CdWYuR2V0QnVmZmVyKCk7CiAg
aWYgKFRyYW5zZm9ybWVkVGV4dElzQXNjaWkoKSkgewogICAgYnAxICs9IG1CdWZmZXJQb3M7CiAg
fSBlbHNlIHsKICAgIGJwMiArPSBtQnVmZmVyUG9zOwogIH0KCiAgZm9yICg7IG9mZnNldCA8IGZy
YWdMZW47IG9mZnNldCsrKSB7CiAgICB1bnNpZ25lZCBjaGFyIGNoID0gKmNwKys7CiAgICBpZiAo
KCgoY2gpID09ICcgJykgfHwgKChjaCkgPT0gJ1x0JykgfHwgKChjaCkgPT0gJ1xuJykpKSB7CiAg
ICAgIGJyZWFrOwogICAgfQogICAgaWYgKDE2MCA9PSBjaCkgewogICAgICBjaCA9ICcgJzsKICAg
ICAgKmFXYXNUcmFuc2Zvcm1lZCA9IDE7CiAgICB9CiAgICBlbHNlIGlmICgoKChjaCkgPT0gMTcz
KSB8fCAoKGNoKSA9PSAnXHInKSkpIHsKCiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgaWYgKGNo
ID4gMTI3KSB7CgoKICAgICAgU2V0SGFzTXVsdGlieXRlKDEpOwoKICAgICAgaWYgKFRyYW5zZm9y
bWVkVGV4dElzQXNjaWkoKSkgewogICAgICAgIFNldFRyYW5zZm9ybWVkVGV4dElzQXNjaWkoMCk7
CiAgICAgICAgKmFXYXNUcmFuc2Zvcm1lZCA9IDE7CgoKICAgICAgICBpZiAobUJ1ZmZlclBvcyA+
IDApIHsKICAgICAgICAgIENvbnZlcnRUcmFuc2Zvcm1lZFRleHRUb1VuaWNvZGUoKTsKICAgICAg
ICAgIGJwMiA9IG1UcmFuc2Zvcm1CdWYuR2V0QnVmZmVyKCkgKyBtQnVmZmVyUG9zOwogICAgICAg
IH0KICAgICAgfQogICAgfQogICAgaWYgKG1CdWZmZXJQb3MgPj0gbVRyYW5zZm9ybUJ1Zi5tQnVm
ZmVyTGVuKSB7CiAgICAgIG5zcmVzdWx0IHJ2ID0gbVRyYW5zZm9ybUJ1Zi5Hcm93QnkoMTI4KTsK
ICAgICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHsKCiAgICAgICAgYnJlYWs7CiAgICAgIH0K
ICAgICAgYnAyID0gbVRyYW5zZm9ybUJ1Zi5HZXRCdWZmZXIoKTsKICAgICAgaWYgKFRyYW5zZm9y
bWVkVGV4dElzQXNjaWkoKSkgewogICAgICAgIGJwMSArPSBtQnVmZmVyUG9zOwogICAgICB9IGVs
c2UgewogICAgICAgIGJwMiArPSBtQnVmZmVyUG9zOwogICAgICB9CiAgICB9CiAgICBpZiAoVHJh
bnNmb3JtZWRUZXh0SXNBc2NpaSgpKSB7CiAgICAgICpicDErKyA9IGNoOwogICAgfSBlbHNlIHsK
ICAgICAgKmJwMisrID0gUFJVbmljaGFyKGNoKTsKICAgIH0KICAgIG1CdWZmZXJQb3MrKzsKICB9
CgogICphV29yZExlbiA9IG1CdWZmZXJQb3MgLSBwcmV2QnVmZmVyUG9zOwogIHJldHVybiBvZmZz
ZXQ7Cn0KClBSSW50MzIKbnNUZXh0VHJhbnNmb3JtZXI6OlNjYW5Ob3JtYWxBc2NpaVRleHRfRl9G
b3JXb3JkQnJlYWsoUFJJbnQzMiogYVdvcmRMZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUFJCb29sKiBhV2FzVHJhbnNmb3JtZWQpCnsKICBjb25zdCBuc1RleHRG
cmFnbWVudCogZnJhZyA9IG1GcmFnOwogIFBSSW50MzIgZnJhZ0xlbiA9IGZyYWctPkdldExlbmd0
aCgpOwogIFBSSW50MzIgb2Zmc2V0ID0gbU9mZnNldDsKICBQUkludDMyIHByZXZCdWZmZXJQb3Mg
PSBtQnVmZmVyUG9zOwogIFBSQm9vbCBicmVha0FmdGVyVGhpcyA9IDA7CiAgY29uc3QgdW5zaWdu
ZWQgY2hhciogY3AgPSAoY29uc3QgdW5zaWduZWQgY2hhciopZnJhZy0+R2V0MWIoKSArIG9mZnNl
dDsKICB1bmlvbiB7CiAgICB1bnNpZ25lZCBjaGFyKiBicDE7CiAgICBQUlVuaWNoYXIqIGJwMjsK
ICB9OwogIGJwMiA9IG1UcmFuc2Zvcm1CdWYuR2V0QnVmZmVyKCk7CiAgaWYgKFRyYW5zZm9ybWVk
VGV4dElzQXNjaWkoKSkgewogICAgYnAxICs9IG1CdWZmZXJQb3M7CiAgfSBlbHNlIHsKICAgIGJw
MiArPSBtQnVmZmVyUG9zOwogIH0KCiAgZm9yICg7IG9mZnNldCA8IGZyYWdMZW4gJiYgIWJyZWFr
QWZ0ZXJUaGlzOyBvZmZzZXQrKykgewogICAgdW5zaWduZWQgY2hhciBjaCA9ICpjcCsrOwogICAg
aWYgKDE2MCA9PSBjaCkgewogICAgICBjaCA9ICcgJzsKICAgICAgKmFXYXNUcmFuc2Zvcm1lZCA9
IDE7CiAgICAgIGlmIChvZmZzZXQgPT0gbU9mZnNldCkKICAgICAgICBicmVha0FmdGVyVGhpcyA9
IDE7CiAgICAgIGVsc2UKICAgICAgICBicmVhazsKICAgIH0KICAgIGVsc2UgaWYgKCgoKGNoKSA9
PSAnICcpIHx8ICgoY2gpID09ICdcdCcpIHx8ICgoY2gpID09ICdcbicpKSkgewogICAgICBicmVh
azsKICAgIH0KICAgIGVsc2UgaWYgKCgoKGNoKSA9PSAxNzMpIHx8ICgoY2gpID09ICdccicpKSkg
ewoKICAgICAgY29udGludWU7CiAgICB9CiAgICBpZiAoY2ggPiAxMjcpIHsKCgogICAgICBTZXRI
YXNNdWx0aWJ5dGUoMSk7CgogICAgICBpZiAoVHJhbnNmb3JtZWRUZXh0SXNBc2NpaSgpKSB7CiAg
ICAgICAgU2V0VHJhbnNmb3JtZWRUZXh0SXNBc2NpaSgwKTsKICAgICAgICAqYVdhc1RyYW5zZm9y
bWVkID0gMTsKCgogICAgICAgIGlmIChtQnVmZmVyUG9zID4gMCkgewogICAgICAgICAgQ29udmVy
dFRyYW5zZm9ybWVkVGV4dFRvVW5pY29kZSgpOwogICAgICAgICAgYnAyID0gbVRyYW5zZm9ybUJ1
Zi5HZXRCdWZmZXIoKSArIG1CdWZmZXJQb3M7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBp
ZiAobUJ1ZmZlclBvcyA+PSBtVHJhbnNmb3JtQnVmLm1CdWZmZXJMZW4pIHsKICAgICAgbnNyZXN1
bHQgcnYgPSBtVHJhbnNmb3JtQnVmLkdyb3dCeSgxMjgpOwogICAgICBpZiAoKChydikgJiAweDgw
MDAwMDAwKSkgewoKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBicDIgPSBtVHJhbnNmb3Jt
QnVmLkdldEJ1ZmZlcigpOwogICAgICBpZiAoVHJhbnNmb3JtZWRUZXh0SXNBc2NpaSgpKSB7CiAg
ICAgICAgYnAxICs9IG1CdWZmZXJQb3M7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYnAyICs9IG1C
dWZmZXJQb3M7CiAgICAgIH0KICAgIH0KICAgIGlmIChUcmFuc2Zvcm1lZFRleHRJc0FzY2lpKCkp
IHsKICAgICAgKmJwMSsrID0gY2g7CiAgICB9IGVsc2UgewogICAgICAqYnAyKysgPSBQUlVuaWNo
YXIoY2gpOwogICAgfQogICAgbUJ1ZmZlclBvcysrOwogIH0KCiAgKmFXb3JkTGVuID0gbUJ1ZmZl
clBvcyAtIHByZXZCdWZmZXJQb3M7CiAgcmV0dXJuIG9mZnNldDsKfQoKCgpQUkludDMyCm5zVGV4
dFRyYW5zZm9ybWVyOjpTY2FuTm9ybWFsVW5pY29kZVRleHRfRihQUkJvb2wgYUZvckxpbmVCcmVh
aywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIqIGFX
b3JkTGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29s
KiBhV2FzVHJhbnNmb3JtZWQpCnsKICBjb25zdCBuc1RleHRGcmFnbWVudCogZnJhZyA9IG1GcmFn
OwogIGNvbnN0IFBSVW5pY2hhciogY3AwID0gZnJhZy0+R2V0MmIoKTsKICBQUkludDMyIGZyYWdM
ZW4gPSBmcmFnLT5HZXRMZW5ndGgoKTsKICBQUkludDMyIG9mZnNldCA9IG1PZmZzZXQ7CgogIFBS
VW5pY2hhciBmaXJzdENoYXIgPSBmcmFnLT5DaGFyQXQob2Zmc2V0KyspOwogIGlmIChmaXJzdENo
YXIgPiAxMjcpIFNldEhhc011bHRpYnl0ZSgxKTsKCgoKICBQUkludDMyIG51bUNoYXJzID0gMTsK
ICBpZiAob2Zmc2V0IDwgZnJhZ0xlbikgewogICAgY29uc3QgUFJVbmljaGFyKiBjcCA9IGNwMCAr
IG9mZnNldDsKICAgIFBSQm9vbCBicmVha0JldHdlZW4gPSAwOwogICAgaWYgKGFGb3JMaW5lQnJl
YWspIHsKICAgICAgbUxpbmVCcmVha2VyLT5CcmVha0luQmV0d2VlbigmZmlyc3RDaGFyLCAxLCBj
cCwgKGZyYWdMZW4tb2Zmc2V0KSwgJmJyZWFrQmV0d2Vlbik7CiAgICB9CiAgICBlbHNlIHsKICAg
ICAgbVdvcmRCcmVha2VyLT5CcmVha0luQmV0d2VlbigmZmlyc3RDaGFyLCAxLCBjcCwgKGZyYWdM
ZW4tb2Zmc2V0KSwgJmJyZWFrQmV0d2Vlbik7CiAgICB9CgoKCgogICAgaWYgKDE2MCA9PSBmaXJz
dENoYXIpIHsKICAgICAgZmlyc3RDaGFyID0gJyAnOwogICAgICAqYVdhc1RyYW5zZm9ybWVkID0g
MTsKICAgIH0KICAgIG5zcmVzdWx0IHJ2ID0gbVRyYW5zZm9ybUJ1Zi5Hcm93VG8obUJ1ZmZlclBv
cyArIDEpOwogICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpIHsKICAgICAgICAgICAgICAgICph
V29yZExlbiA9IDA7CiAgICAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0IC0gMTsKICAgICAgICB9
CgogICAgbVRyYW5zZm9ybUJ1Zi5tQnVmZmVyW21CdWZmZXJQb3MrK10gPSBmaXJzdENoYXI7Cgog
ICAgaWYgKCFicmVha0JldHdlZW4pIHsKCiAgICAgIFBSQm9vbCB0cnlOZXh0RnJhZzsKICAgICAg
UFJVaW50MzIgbmV4dDsKICAgICAgaWYgKGFGb3JMaW5lQnJlYWspIHsKICAgICAgICBtTGluZUJy
ZWFrZXItPk5leHQoY3AwLCBmcmFnTGVuLCBvZmZzZXQsICZuZXh0LCAmdHJ5TmV4dEZyYWcpOwog
ICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIG1Xb3JkQnJlYWtlci0+TmV4dChjcDAsIGZyYWdM
ZW4sIG9mZnNldCwgJm5leHQsICZ0cnlOZXh0RnJhZyk7CiAgICAgIH0KICAgICAgbnVtQ2hhcnMg
PSAoUFJJbnQzMikgKG5leHQgLSAoUFJVaW50MzIpIG9mZnNldCkgKyAxOwoKCgogICAgICBuc3Jl
c3VsdCBydiA9IG1UcmFuc2Zvcm1CdWYuR3Jvd1RvKG1CdWZmZXJQb3MgKyBudW1DaGFycyk7CiAg
ICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKSB7CiAgICAgICAgbnVtQ2hhcnMgPSBtVHJhbnNm
b3JtQnVmLkdldEJ1ZmZlckxlbmd0aCgpIC0gbUJ1ZmZlclBvczsKICAgICAgfQoKICAgICAgb2Zm
c2V0ICs9IG51bUNoYXJzIC0gMTsKCgoKCgogICAgICBQUlVuaWNoYXIqIGJwID0gJm1UcmFuc2Zv
cm1CdWYubUJ1ZmZlclttQnVmZmVyUG9zXTsKICAgICAgY29uc3QgUFJVbmljaGFyKiBlbmQgPSBj
cCArIG51bUNoYXJzIC0gMTsKICAgICAgd2hpbGUgKGNwIDwgZW5kKSB7CiAgICAgICAgUFJVbmlj
aGFyIGNoID0gKmNwKys7CiAgICAgICAgaWYgKDE2MCA9PSBjaCkgewogICAgICAgICAgY2ggPSAn
ICc7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKCgoKGNoKSA9PSAxNzMpIHx8ICgoY2gpID09
ICdccicpKSB8fCAoY2ggPT0gMHgwYSkgfHwgKGNoID09IDB4MGQpKSB7CgogICAgICAgICAgbnVt
Q2hhcnMtLTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAoY2ggPiAx
MjcpIFNldEhhc011bHRpYnl0ZSgxKTsKICAgICAgICAqYnArKyA9IGNoOwogICAgICAgIG1CdWZm
ZXJQb3MrKzsKICAgICAgfQogICAgfQogIH0KICBlbHNlCiAgewoKCgoKICAgIGlmICgxNjAgPT0g
Zmlyc3RDaGFyKSB7CiAgICAgIGZpcnN0Q2hhciA9ICcgJzsKICAgICAgKmFXYXNUcmFuc2Zvcm1l
ZCA9IDE7CiAgICB9CiAgICBuc3Jlc3VsdCBydiA9IG1UcmFuc2Zvcm1CdWYuR3Jvd1RvKG1CdWZm
ZXJQb3MgKyAxKTsKICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKSB7CiAgICAgICAgICAgICAg
ICAqYVdvcmRMZW4gPSAwOwogICAgICAgICAgICAgICAgcmV0dXJuIG9mZnNldCAtIDE7CiAgICAg
ICAgfQogICAgbVRyYW5zZm9ybUJ1Zi5tQnVmZmVyW21CdWZmZXJQb3MrK10gPSBmaXJzdENoYXI7
CiAgfQoKICAqYVdvcmRMZW4gPSBudW1DaGFyczsKICByZXR1cm4gb2Zmc2V0Owp9CgoKUFJJbnQz
Mgpuc1RleHRUcmFuc2Zvcm1lcjo6U2NhblByZVdyYXBXaGl0ZVNwYWNlX0YoUFJJbnQzMiogYVdv
cmRMZW4pCnsKICBjb25zdCBuc1RleHRGcmFnbWVudCogZnJhZyA9IG1GcmFnOwogIFBSSW50MzIg
ZnJhZ0xlbiA9IGZyYWctPkdldExlbmd0aCgpOwogIFBSSW50MzIgb2Zmc2V0ID0gbU9mZnNldDsK
ICBQUlVuaWNoYXIqIGJwID0gbVRyYW5zZm9ybUJ1Zi5HZXRCdWZmZXIoKSArIG1CdWZmZXJQb3M7
CiAgUFJVbmljaGFyKiBlbmRicCA9IG1UcmFuc2Zvcm1CdWYuR2V0QnVmZmVyRW5kKCk7CiAgUFJJ
bnQzMiBwcmV2QnVmZmVyUG9zID0gbUJ1ZmZlclBvczsKCiAgZm9yICg7IG9mZnNldCA8IGZyYWdM
ZW47IG9mZnNldCsrKSB7CgoKICAgIFBSVW5pY2hhciBjaCA9IGZyYWctPkNoYXJBdChvZmZzZXQp
OwogICAgaWYgKCEoKChjaCkgPT0gJyAnKSB8fCAoKGNoKSA9PSAnXHQnKSB8fCAoKGNoKSA9PSAn
XG4nKSkgfHwgKGNoID09ICdcdCcpIHx8IChjaCA9PSAnXG4nKSkgewogICAgICBpZiAoKCgoY2gp
ID09IDE3MykgfHwgKChjaCkgPT0gJ1xyJykpKSB7CgogICAgICAgIGNvbnRpbnVlOwogICAgICB9
CiAgICAgIGJyZWFrOwogICAgfQogICAgaWYgKGJwID09IGVuZGJwKSB7CiAgICAgIFBSSW50MzIg
b2xkTGVuZ3RoID0gYnAgLSBtVHJhbnNmb3JtQnVmLkdldEJ1ZmZlcigpOwogICAgICBuc3Jlc3Vs
dCBydiA9IG1UcmFuc2Zvcm1CdWYuR3Jvd0J5KDEwMDApOwogICAgICBpZiAoKChydikgJiAweDgw
MDAwMDAwKSkgewoKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBicCA9IG1UcmFuc2Zvcm1C
dWYuR2V0QnVmZmVyKCkgKyBvbGRMZW5ndGg7CiAgICAgIGVuZGJwID0gbVRyYW5zZm9ybUJ1Zi5H
ZXRCdWZmZXJFbmQoKTsKICAgIH0KICAgICpicCsrID0gJyAnOwogICAgbUJ1ZmZlclBvcysrOwog
IH0KCiAgKmFXb3JkTGVuID0gbUJ1ZmZlclBvcyAtIHByZXZCdWZmZXJQb3M7CiAgcmV0dXJuIG9m
ZnNldDsKfQoKClBSSW50MzIKbnNUZXh0VHJhbnNmb3JtZXI6OlNjYW5QcmVEYXRhX0YoUFJJbnQz
MiogYVdvcmRMZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCogYVdh
c1RyYW5zZm9ybWVkKQp7CiAgY29uc3QgbnNUZXh0RnJhZ21lbnQqIGZyYWcgPSBtRnJhZzsKICBQ
UkludDMyIGZyYWdMZW4gPSBmcmFnLT5HZXRMZW5ndGgoKTsKICBQUkludDMyIG9mZnNldCA9IG1P
ZmZzZXQ7CiAgUFJVbmljaGFyKiBicCA9IG1UcmFuc2Zvcm1CdWYuR2V0QnVmZmVyKCkgKyBtQnVm
ZmVyUG9zOwogIFBSVW5pY2hhciogZW5kYnAgPSBtVHJhbnNmb3JtQnVmLkdldEJ1ZmZlckVuZCgp
OwogIFBSSW50MzIgcHJldkJ1ZmZlclBvcyA9IG1CdWZmZXJQb3M7CgogIGZvciAoOyBvZmZzZXQg
PCBmcmFnTGVuOyBvZmZzZXQrKykgewoKCiAgICBQUlVuaWNoYXIgY2ggPSBmcmFnLT5DaGFyQXQo
b2Zmc2V0KTsKICAgIGlmICgoY2ggPT0gJ1x0JykgfHwgKGNoID09ICdcbicpKSB7CiAgICAgIGJy
ZWFrOwogICAgfQogICAgaWYgKDE2MCA9PSBjaCkgewogICAgICBjaCA9ICcgJzsKICAgICAgKmFX
YXNUcmFuc2Zvcm1lZCA9IDE7CiAgICB9CiAgICBlbHNlIGlmICgoKChjaCkgPT0gMTczKSB8fCAo
KGNoKSA9PSAnXHInKSkpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICBpZiAoY2ggPiAxMjcp
IFNldEhhc011bHRpYnl0ZSgxKTsKICAgIGlmIChicCA9PSBlbmRicCkgewogICAgICBQUkludDMy
IG9sZExlbmd0aCA9IGJwIC0gbVRyYW5zZm9ybUJ1Zi5HZXRCdWZmZXIoKTsKICAgICAgbnNyZXN1
bHQgcnYgPSBtVHJhbnNmb3JtQnVmLkdyb3dCeSgxMDAwKTsKICAgICAgaWYgKCgocnYpICYgMHg4
MDAwMDAwMCkpIHsKCiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgYnAgPSBtVHJhbnNmb3Jt
QnVmLkdldEJ1ZmZlcigpICsgb2xkTGVuZ3RoOwogICAgICBlbmRicCA9IG1UcmFuc2Zvcm1CdWYu
R2V0QnVmZmVyRW5kKCk7CiAgICB9CiAgICAqYnArKyA9IGNoOwogICAgbUJ1ZmZlclBvcysrOwog
IH0KCiAgKmFXb3JkTGVuID0gbUJ1ZmZlclBvcyAtIHByZXZCdWZmZXJQb3M7CiAgcmV0dXJuIG9m
ZnNldDsKfQoKClBSSW50MzIKbnNUZXh0VHJhbnNmb3JtZXI6OlNjYW5QcmVBc2NpaURhdGFfRihQ
UkludDMyKiBhV29yZExlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
UkJvb2wqIGFXYXNUcmFuc2Zvcm1lZCkKewogIGNvbnN0IG5zVGV4dEZyYWdtZW50KiBmcmFnID0g
bUZyYWc7CiAgUFJVbmljaGFyKiBicCA9IG1UcmFuc2Zvcm1CdWYuR2V0QnVmZmVyKCkgKyBtQnVm
ZmVyUG9zOwogIFBSVW5pY2hhciogZW5kYnAgPSBtVHJhbnNmb3JtQnVmLkdldEJ1ZmZlckVuZCgp
OwogIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNwID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIqKSBmcmFn
LT5HZXQxYigpOwogIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGVuZCA9IGNwICsgZnJhZy0+R2V0TGVu
Z3RoKCk7CiAgUFJJbnQzMiBwcmV2QnVmZmVyUG9zID0gbUJ1ZmZlclBvczsKICBjcCArPSBtT2Zm
c2V0OwoKICB3aGlsZSAoY3AgPCBlbmQpIHsKICAgIFBSVW5pY2hhciBjaCA9IChQUlVuaWNoYXIp
ICpjcCsrOwogICAgaWYgKChjaCA9PSAnXHQnKSB8fCAoY2ggPT0gJ1xuJykpIHsKICAgICAgY3At
LTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBpZiAoMTYwID09IGNoKSB7CiAgICAgIGNoID0gJyAn
OwogICAgICAqYVdhc1RyYW5zZm9ybWVkID0gMTsKICAgIH0KICAgIGVsc2UgaWYgKCgoKGNoKSA9
PSAxNzMpIHx8ICgoY2gpID09ICdccicpKSkgewogICAgICBjb250aW51ZTsKICAgIH0KICAgIGlm
IChjaCA+IDEyNykgU2V0SGFzTXVsdGlieXRlKDEpOwogICAgaWYgKGJwID09IGVuZGJwKSB7CiAg
ICAgIFBSSW50MzIgb2xkTGVuZ3RoID0gYnAgLSBtVHJhbnNmb3JtQnVmLkdldEJ1ZmZlcigpOwog
ICAgICBuc3Jlc3VsdCBydiA9IG1UcmFuc2Zvcm1CdWYuR3Jvd0J5KDEwMDApOwogICAgICBpZiAo
KChydikgJiAweDgwMDAwMDAwKSkgewoKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBicCA9
IG1UcmFuc2Zvcm1CdWYuR2V0QnVmZmVyKCkgKyBvbGRMZW5ndGg7CiAgICAgIGVuZGJwID0gbVRy
YW5zZm9ybUJ1Zi5HZXRCdWZmZXJFbmQoKTsKICAgIH0KICAgICpicCsrID0gY2g7CiAgICBtQnVm
ZmVyUG9zKys7CiAgfQoKICAqYVdvcmRMZW4gPSBtQnVmZmVyUG9zIC0gcHJldkJ1ZmZlclBvczsK
ICByZXR1cm4gY3AgLSAoKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWZyYWctPkdldDFiKCkpOwp9CgoK
CnN0YXRpYyB2b2lkCkFzY2lpVG9Mb3dlckNhc2UodW5zaWduZWQgY2hhciogYVRleHQsIFBSSW50
MzIgYVdvcmRMZW4pCnsKICB3aGlsZSAoYVdvcmRMZW4tLSA+IDApIHsKICAgICphVGV4dCA9IHRv
bG93ZXIoKmFUZXh0KTsKICAgIGFUZXh0Kys7CiAgfQp9CgpzdGF0aWMgdm9pZApBc2NpaVRvVXBw
ZXJDYXNlKHVuc2lnbmVkIGNoYXIqIGFUZXh0LCBQUkludDMyIGFXb3JkTGVuKQp7CiAgd2hpbGUg
KGFXb3JkTGVuLS0gPiAwKSB7CiAgICAqYVRleHQgPSB0b3VwcGVyKCphVGV4dCk7CiAgICBhVGV4
dCsrOwogIH0KfQoKCnN0YXRpYyBQUkludDMyIENvdW50R2VybWFuU3psaWcoY29uc3QgUFJVbmlj
aGFyKiBhVGV4dCwgUFJJbnQzMiBsZW4pCnsKICBQUkludDMyIGksY250OwogIGZvcihpPTAsY250
PTA7IGk8bGVuOyBpKyssIGFUZXh0KyspCiAgewogICAgIGlmKDB4MDBERiA9PSAqYVRleHQpCiAg
ICAgICAgIGNudCsrOwogIH0KICByZXR1cm4gY250Owp9CnN0YXRpYyB2b2lkIFJlcGxhY2VHZXJt
YW5TemxpZ1RvU1MoUFJVbmljaGFyKiBhVGV4dCwgUFJJbnQzMiBsZW4sIFBSSW50MzIgc3pDbnQp
CnsKICBQUlVuaWNoYXIgKnNyYywgKmRlc3Q7CiAgc3JjID0gYVRleHQgKyBsZW4gLSAxOwogIGRl
c3QgPSBzcmMgKyBzekNudDsKICB3aGlsZSggKHNyYyE9ZGVzdCkgJiYgKHNyYyA+PSBhVGV4dCkg
KQogIHsKICAgICAgaWYoMHgwMERGID09ICpzcmMgKQogICAgICB7CiAgICAgICAgKmRlc3QtLSA9
IFBSVW5pY2hhcignUycpOwogICAgICAgICpkZXN0LS0gPSBQUlVuaWNoYXIoJ1MnKTsKICAgICAg
ICBzcmMtLTsKICAgICAgfSBlbHNlIHsKICAgICAgICAqZGVzdC0tID0gKnNyYy0tOwogICAgICB9
CiAgfQp9Cgp2b2lkCm5zVGV4dFRyYW5zZm9ybWVyOjpMYW5ndWFnZVNwZWNpZmljVHJhbnNmb3Jt
KFBSVW5pY2hhciogYVRleHQsIFBSSW50MzIgYUxlbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJCb29sKiBhV2FzVHJhbnNmb3JtZWQpCnsKICBpZiAobUxh
bmd1YWdlU3BlY2lmaWNUcmFuc2Zvcm1UeXBlID09CiAgICAgIGVMYW5ndWFnZVNwZWNpZmljVHJh
bnNmb3JtVHlwZV9KYXBhbmVzZSkgewogICAgZm9yIChQUkludDMyIGkgPSAwOyBpIDwgYUxlbjsg
aSsrKSB7CiAgICAgIGlmIChhVGV4dFtpXSA9PSAweDVDKSB7CiAgICAgICAgYVRleHRbaV0gPSAw
eEE1OwogICAgICAgIFNldEhhc011bHRpYnl0ZSgxKTsKICAgICAgICAqYVdhc1RyYW5zZm9ybWVk
ID0gMTsKICAgICAgfQojIDcxNSAibnNUZXh0VHJhbnNmb3JtZXIuY3BwIgogICAgfQogIH0KICBl
bHNlIGlmIChtTGFuZ3VhZ2VTcGVjaWZpY1RyYW5zZm9ybVR5cGUgPT0KICAgICAgICAgICBlTGFu
Z3VhZ2VTcGVjaWZpY1RyYW5zZm9ybVR5cGVfS29yZWFuKSB7CiAgICBmb3IgKFBSSW50MzIgaSA9
IDA7IGkgPCBhTGVuOyBpKyspIHsKICAgICAgaWYgKGFUZXh0W2ldID09IDB4NUMpIHsKICAgICAg
ICBhVGV4dFtpXSA9IDB4MjBBOTsKICAgICAgICBTZXRIYXNNdWx0aWJ5dGUoMSk7CiAgICAgICAg
KmFXYXNUcmFuc2Zvcm1lZCA9IDE7CiAgICAgIH0KICAgIH0KICB9Cn0KClBSVW5pY2hhcioKbnNU
ZXh0VHJhbnNmb3JtZXI6OkdldE5leHRXb3JkKFBSQm9vbCBhSW5Xb3JkLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJJbnQzMiogYVdvcmRMZW5SZXN1bHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUkludDMyKiBhQ29udGVudExlblJlc3VsdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBSQm9vbCogYUlzV2hpdGVTcGFjZVJlc3VsdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCogYVdhc1RyYW5zZm9ybWVkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFSZXNldFRyYW5zZm9ybUJ1ZiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhRm9yTGluZUJyZWFrKQp7CiAgY29uc3QgbnNU
ZXh0RnJhZ21lbnQqIGZyYWcgPSBtRnJhZzsKICBQUkludDMyIGZyYWdMZW4gPSBmcmFnLT5HZXRM
ZW5ndGgoKTsKICBQUkludDMyIG9mZnNldCA9IG1PZmZzZXQ7CiAgUFJJbnQzMiB3b3JkTGVuID0g
MDsKICBQUkJvb2wgaXNXaGl0ZXNwYWNlID0gMDsKICBQUlVuaWNoYXIqIHJlc3VsdCA9IDA7CiAg
UFJCb29sIHByZXZCdWZmZXJQb3M7CgoKICAqYVdhc1RyYW5zZm9ybWVkID0gMDsKCgoKICBpZiAo
YVJlc2V0VHJhbnNmb3JtQnVmKSB7CiAgICBtQnVmZmVyUG9zID0gMDsKICAgIFNldFRyYW5zZm9y
bWVkVGV4dElzQXNjaWkoTGVhdmVBc0FzY2lpKCkpOwogIH0KICBwcmV2QnVmZmVyUG9zID0gbUJ1
ZmZlclBvczsKCgoKICBpZigoISBhRm9yTGluZUJyZWFrKSAmJiAoZU5vcm1hbCAhPSBtTW9kZSkp
CiAgICAgbU1vZGUgPSBlTm9ybWFsOwoKICB3aGlsZSAob2Zmc2V0IDwgZnJhZ0xlbikgewogICAg
UFJVbmljaGFyIGZpcnN0Q2hhciA9IGZyYWctPkNoYXJBdChvZmZzZXQpOwoKCiAgICBpZiAoKCgo
Zmlyc3RDaGFyKSA9PSAxNzMpIHx8ICgoZmlyc3RDaGFyKSA9PSAnXHInKSkpIHsKICAgICAgb2Zm
c2V0Kys7CiAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIHN3aXRjaCAobU1vZGUpIHsKICAgICAg
ZGVmYXVsdDoKICAgICAgY2FzZSBlTm9ybWFsOgogICAgICAgIGlmICgoKChmaXJzdENoYXIpID09
ICcgJykgfHwgKChmaXJzdENoYXIpID09ICdcdCcpIHx8ICgoZmlyc3RDaGFyKSA9PSAnXG4nKSkp
IHsKICAgICAgICAgIG9mZnNldCA9IFNjYW5Ob3JtYWxXaGl0ZVNwYWNlX0YoKTsKICAgICAgICAg
IGlmIChmaXJzdENoYXIgIT0gJyAnKSB7CiAgICAgICAgICAgICphV2FzVHJhbnNmb3JtZWQgPSAx
OwogICAgICAgICAgfQogICAgICAgICAgd29yZExlbiA9IDE7CiAgICAgICAgICBpc1doaXRlc3Bh
Y2UgPSAxOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgxNjAgPT0gZmlyc3RDaGFyICYmICFh
Rm9yTGluZUJyZWFrKSB7CiAgICAgICAgICB3b3JkTGVuID0gMTsKICAgICAgICAgIGlzV2hpdGVz
cGFjZSA9IDE7CiAgICAgICAgICAqYVdhc1RyYW5zZm9ybWVkID0gMTsKCgogICAgICAgICAgaWYg
KG1CdWZmZXJQb3MgPj0gbVRyYW5zZm9ybUJ1Zi5tQnVmZmVyTGVuKSB7CiAgICAgICAgICAgICBt
VHJhbnNmb3JtQnVmLkdyb3dCeSgxMjgpOwogICAgICAgICAgfQoKICAgICAgICAgIG9mZnNldCsr
OwogICAgICAgICAgaWYgKFRyYW5zZm9ybWVkVGV4dElzQXNjaWkoKSkgewogICAgICAgICAgICAo
KHVuc2lnbmVkIGNoYXIqKW1UcmFuc2Zvcm1CdWYubUJ1ZmZlcilbbUJ1ZmZlclBvcysrXSA9ICcg
JzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG1UcmFuc2Zvcm1CdWYubUJ1ZmZlcltt
QnVmZmVyUG9zKytdID0gUFJVbmljaGFyKCcgJyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICAgIGVsc2UgaWYgKGZyYWctPklzMmIoKSkgewogICAgICAgICAgb2Zmc2V0ID0gU2Nhbk5vcm1h
bFVuaWNvZGVUZXh0X0YoYUZvckxpbmVCcmVhaywgJndvcmRMZW4sIGFXYXNUcmFuc2Zvcm1lZCk7
CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgaWYgKCFhRm9yTGluZUJyZWFrKQog
ICAgICAgICAgICBvZmZzZXQgPSBTY2FuTm9ybWFsQXNjaWlUZXh0X0ZfRm9yV29yZEJyZWFrKCZ3
b3JkTGVuLCBhV2FzVHJhbnNmb3JtZWQpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBvZmZz
ZXQgPSBTY2FuTm9ybWFsQXNjaWlUZXh0X0YoJndvcmRMZW4sIGFXYXNUcmFuc2Zvcm1lZCk7CiAg
ICAgICAgfQogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBlUHJlZm9ybWF0dGVkOgogICAgICAg
IGlmICgoJ1xuJyA9PSBmaXJzdENoYXIpIHx8ICgnXHQnID09IGZpcnN0Q2hhcikpIHsKICAgICAg
ICAgIG1UcmFuc2Zvcm1CdWYubUJ1ZmZlclttQnVmZmVyUG9zKytdID0gZmlyc3RDaGFyOwogICAg
ICAgICAgb2Zmc2V0Kys7CiAgICAgICAgICB3b3JkTGVuID0gMTsKICAgICAgICAgIGlzV2hpdGVz
cGFjZSA9IDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGZyYWctPklzMmIoKSkgewogICAg
ICAgICAgb2Zmc2V0ID0gU2NhblByZURhdGFfRigmd29yZExlbiwgYVdhc1RyYW5zZm9ybWVkKTsK
ICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBvZmZzZXQgPSBTY2FuUHJlQXNjaWlE
YXRhX0YoJndvcmRMZW4sIGFXYXNUcmFuc2Zvcm1lZCk7CiAgICAgICAgfQogICAgICAgIGJyZWFr
OwoKICAgICAgY2FzZSBlUHJlV3JhcDoKICAgICAgICBpZiAoKCgoZmlyc3RDaGFyKSA9PSAnICcp
IHx8ICgoZmlyc3RDaGFyKSA9PSAnXHQnKSB8fCAoKGZpcnN0Q2hhcikgPT0gJ1xuJykpKSB7CiAg
ICAgICAgICBpZiAoKCdcbicgPT0gZmlyc3RDaGFyKSB8fCAoJ1x0JyA9PSBmaXJzdENoYXIpKSB7
CiAgICAgICAgICAgIG1UcmFuc2Zvcm1CdWYubUJ1ZmZlclttQnVmZmVyUG9zKytdID0gZmlyc3RD
aGFyOwogICAgICAgICAgICBvZmZzZXQrKzsKICAgICAgICAgICAgd29yZExlbiA9IDE7CiAgICAg
ICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgb2Zmc2V0ID0gU2NhblByZVdyYXBX
aGl0ZVNwYWNlX0YoJndvcmRMZW4pOwogICAgICAgICAgfQogICAgICAgICAgaXNXaGl0ZXNwYWNl
ID0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoZnJhZy0+SXMyYigpKSB7CiAgICAgICAg
ICBvZmZzZXQgPSBTY2FuTm9ybWFsVW5pY29kZVRleHRfRihhRm9yTGluZUJyZWFrLCAmd29yZExl
biwgYVdhc1RyYW5zZm9ybWVkKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBp
ZiAoIWFGb3JMaW5lQnJlYWspCiAgICAgICAgICAgIG9mZnNldCA9IFNjYW5Ob3JtYWxBc2NpaVRl
eHRfRl9Gb3JXb3JkQnJlYWsoJndvcmRMZW4sIGFXYXNUcmFuc2Zvcm1lZCk7CiAgICAgICAgICBl
bHNlCiAgICAgICAgICAgIG9mZnNldCA9IFNjYW5Ob3JtYWxBc2NpaVRleHRfRigmd29yZExlbiwg
YVdhc1RyYW5zZm9ybWVkKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICB9CgogICAgaWYg
KFRyYW5zZm9ybWVkVGV4dElzQXNjaWkoKSkgewogICAgICB1bnNpZ25lZCBjaGFyKiB3b3JkUHRy
ID0gKHVuc2lnbmVkIGNoYXIqKW1UcmFuc2Zvcm1CdWYubUJ1ZmZlciArIHByZXZCdWZmZXJQb3M7
CgogICAgICBpZiAoIWlzV2hpdGVzcGFjZSkgewogICAgICAgIHN3aXRjaCAobVRleHRUcmFuc2Zv
cm0pIHsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICAqd29yZFB0ciA9IHRvdXBwZXIoKndvcmRQ
dHIpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAyOgogICAgICAgICAgQXNjaWlUb0xv
d2VyQ2FzZSh3b3JkUHRyLCB3b3JkTGVuKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2Ug
MzoKICAgICAgICAgIEFzY2lpVG9VcHBlckNhc2Uod29yZFB0ciwgd29yZExlbik7CiAgICAgICAg
ICBicmVhazsKICAgICAgICB9CiAgICAgICAge307CgoKICAgICAgfQogICAgICByZXN1bHQgPSAo
UFJVbmljaGFyKil3b3JkUHRyOwoKICAgIH0gZWxzZSB7CiAgICAgIHJlc3VsdCA9ICZtVHJhbnNm
b3JtQnVmLm1CdWZmZXJbcHJldkJ1ZmZlclBvc107CgogICAgICBpZiAoIWlzV2hpdGVzcGFjZSkg
ewogICAgICAgIHN3aXRjaCAobVRleHRUcmFuc2Zvcm0pIHsKICAgICAgICBjYXNlIDE6CiAgICAg
ICAgICBnQ2FzZUNvbnYtPlRvVGl0bGUocmVzdWx0LCByZXN1bHQsIHdvcmRMZW4sICFhSW5Xb3Jk
KTsKCiAgICAgICAgICBpZigweDAwREYgPT0gKnJlc3VsdCkKICAgICAgICAgIHsKICAgICAgICAg
ICAgICBpZiAoKHByZXZCdWZmZXJQb3MgKyB3b3JkTGVuICsgMSkgPj0gbVRyYW5zZm9ybUJ1Zi5t
QnVmZmVyTGVuKSB7CiAgICAgICAgICAgICAgICBtVHJhbnNmb3JtQnVmLkdyb3dCeSgxMjgpOwog
ICAgICAgICAgICAgICAgcmVzdWx0ID0gJm1UcmFuc2Zvcm1CdWYubUJ1ZmZlcltwcmV2QnVmZmVy
UG9zXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgUFJVbmljaGFyKiBzcmMgPSByZXN1
bHQgKyB3b3JkTGVuOwogICAgICAgICAgICAgIHdoaWxlKHNyYz5yZXN1bHQpCiAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAqKHNyYysxKSA9ICpzcmM7CiAgICAgICAgICAgICAgICAg
IHNyYy0tOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXN1bHRbMF0gPSBQUlVuaWNo
YXIoJ1MnKTsKICAgICAgICAgICAgICByZXN1bHRbMV0gPSBQUlVuaWNoYXIoJ1MnKTsKICAgICAg
ICAgICAgICB3b3JkTGVuKys7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBj
YXNlIDI6CiAgICAgICAgICBnQ2FzZUNvbnYtPlRvTG93ZXIocmVzdWx0LCByZXN1bHQsIHdvcmRM
ZW4pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAzOgogICAgICAgICAgewogICAgICAg
ICAgICBnQ2FzZUNvbnYtPlRvVXBwZXIocmVzdWx0LCByZXN1bHQsIHdvcmRMZW4pOwoKCiAgICAg
ICAgICAgIFBSSW50MzIgc3psaWdDbnQgPSBDb3VudEdlcm1hblN6bGlnKHJlc3VsdCwgd29yZExl
bik7CiAgICAgICAgICAgIGlmKHN6bGlnQ250ID4gMCkgewoKICAgICAgICAgICAgICBpZiAoKHBy
ZXZCdWZmZXJQb3MgKyB3b3JkTGVuICsgc3psaWdDbnQpID49IG1UcmFuc2Zvcm1CdWYubUJ1ZmZl
ckxlbikKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBtVHJhbnNmb3JtQnVmLkdyb3dC
eSgxMjgpOwogICAgICAgICAgICAgICAgcmVzdWx0ID0gJm1UcmFuc2Zvcm1CdWYubUJ1ZmZlcltw
cmV2QnVmZmVyUG9zXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgUmVwbGFjZUdlcm1h
blN6bGlnVG9TUyhyZXN1bHQsIHdvcmRMZW4sIHN6bGlnQ250KTsKICAgICAgICAgICAgICB3b3Jk
TGVuICs9IHN6bGlnQ250OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVh
azsKICAgICAgICB9CiAgICAgICAgaWYgKG1MYW5ndWFnZVNwZWNpZmljVHJhbnNmb3JtVHlwZSAh
PQogICAgICAgICAgICBlTGFuZ3VhZ2VTcGVjaWZpY1RyYW5zZm9ybVR5cGVfTm9uZSkgewogICAg
ICAgICAgTGFuZ3VhZ2VTcGVjaWZpY1RyYW5zZm9ybShyZXN1bHQsIHdvcmRMZW4sIGFXYXNUcmFu
c2Zvcm1lZCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgYnJlYWs7CiAgfQoKICAqYVdv
cmRMZW5SZXN1bHQgPSB3b3JkTGVuOwogICphQ29udGVudExlblJlc3VsdCA9IG9mZnNldCAtIG1P
ZmZzZXQ7CiAgKmFJc1doaXRlU3BhY2VSZXN1bHQgPSBpc1doaXRlc3BhY2U7CgoKCiAgaWYgKCht
VGV4dFRyYW5zZm9ybSAhPSAwKSB8fAogICAgICAoKmFXb3JkTGVuUmVzdWx0ICE9ICphQ29udGVu
dExlblJlc3VsdCkpIHsKICAgICphV2FzVHJhbnNmb3JtZWQgPSAxOwogIH0KCiAgbU9mZnNldCA9
IG9mZnNldDsKICByZXR1cm4gcmVzdWx0Owp9CgoKCgpQUkludDMyCm5zVGV4dFRyYW5zZm9ybWVy
OjpTY2FuTm9ybWFsV2hpdGVTcGFjZV9CKCkKewogIGNvbnN0IG5zVGV4dEZyYWdtZW50KiBmcmFn
ID0gbUZyYWc7CiAgUFJJbnQzMiBvZmZzZXQgPSBtT2Zmc2V0OwoKICB3aGlsZSAoLS1vZmZzZXQg
Pj0gMCkgewogICAgUFJVbmljaGFyIGNoID0gZnJhZy0+Q2hhckF0KG9mZnNldCk7CiAgICBpZiAo
ISgoKGNoKSA9PSAnICcpIHx8ICgoY2gpID09ICdcdCcpIHx8ICgoY2gpID09ICdcbicpKSkgewoK
CiAgICAgIGlmICghKCgoY2gpID09IDE3MykgfHwgKChjaCkgPT0gJ1xyJykpKSB7CiAgICAgICAg
YnJlYWs7CiAgICAgIH0KICAgIH0KICB9CgogIG1UcmFuc2Zvcm1CdWYubUJ1ZmZlclttVHJhbnNm
b3JtQnVmLm1CdWZmZXJMZW4gLSAxXSA9ICcgJzsKICByZXR1cm4gb2Zmc2V0Owp9CgoKUFJJbnQz
Mgpuc1RleHRUcmFuc2Zvcm1lcjo6U2Nhbk5vcm1hbEFzY2lpVGV4dF9CKFBSSW50MzIqIGFXb3Jk
TGVuKQp7CiAgY29uc3QgbnNUZXh0RnJhZ21lbnQqIGZyYWcgPSBtRnJhZzsKICBQUkludDMyIG9m
ZnNldCA9IG1PZmZzZXQ7CiAgUFJVbmljaGFyKiBicCA9IG1UcmFuc2Zvcm1CdWYuR2V0QnVmZmVy
RW5kKCk7CiAgUFJVbmljaGFyKiBzdGFydGJwID0gbVRyYW5zZm9ybUJ1Zi5HZXRCdWZmZXIoKTsK
CiAgd2hpbGUgKC0tb2Zmc2V0ID49IDApIHsKICAgIFBSVW5pY2hhciBjaCA9IGZyYWctPkNoYXJB
dChvZmZzZXQpOwogICAgaWYgKDE2MCA9PSBjaCkgewogICAgICBjaCA9ICcgJzsKICAgIH0KICAg
IGlmICgoKChjaCkgPT0gJyAnKSB8fCAoKGNoKSA9PSAnXHQnKSB8fCAoKGNoKSA9PSAnXG4nKSkp
IHsKICAgICAgYnJlYWs7CiAgICB9CiAgICBlbHNlIGlmICgoKChjaCkgPT0gMTczKSB8fCAoKGNo
KSA9PSAnXHInKSkpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICBpZiAoY2ggPiAxMjcpIFNl
dEhhc011bHRpYnl0ZSgxKTsKICAgIGlmIChicCA9PSBzdGFydGJwKSB7CiAgICAgIFBSSW50MzIg
b2xkTGVuZ3RoID0gbVRyYW5zZm9ybUJ1Zi5tQnVmZmVyTGVuOwogICAgICBuc3Jlc3VsdCBydiA9
IG1UcmFuc2Zvcm1CdWYuR3Jvd0J5KDEwMDApOwogICAgICBpZiAoKChydikgJiAweDgwMDAwMDAw
KSkgewoKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBicCA9IG1UcmFuc2Zvcm1CdWYuR2V0
QnVmZmVyRW5kKCkgLSBvbGRMZW5ndGg7CiAgICAgIHN0YXJ0YnAgPSBtVHJhbnNmb3JtQnVmLkdl
dEJ1ZmZlcigpOwogICAgfQogICAgKi0tYnAgPSBjaDsKICB9CgogICphV29yZExlbiA9IG1UcmFu
c2Zvcm1CdWYuR2V0QnVmZmVyRW5kKCkgLSBicDsKICByZXR1cm4gb2Zmc2V0Owp9CgoKUFJJbnQz
Mgpuc1RleHRUcmFuc2Zvcm1lcjo6U2Nhbk5vcm1hbFVuaWNvZGVUZXh0X0IoUFJCb29sIGFGb3JM
aW5lQnJlYWssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUklu
dDMyKiBhV29yZExlbikKewogIGNvbnN0IG5zVGV4dEZyYWdtZW50KiBmcmFnID0gbUZyYWc7CiAg
Y29uc3QgUFJVbmljaGFyKiBjcDAgPSBmcmFnLT5HZXQyYigpOwogIFBSSW50MzIgb2Zmc2V0ID0g
bU9mZnNldCAtIDE7CgogIFBSVW5pY2hhciBmaXJzdENoYXIgPSBmcmFnLT5DaGFyQXQob2Zmc2V0
KTsKICBtVHJhbnNmb3JtQnVmLm1CdWZmZXJbbVRyYW5zZm9ybUJ1Zi5tQnVmZmVyTGVuIC0gMV0g
PSBmaXJzdENoYXI7CiAgaWYgKGZpcnN0Q2hhciA+IDEyNykgU2V0SGFzTXVsdGlieXRlKDEpOwoK
ICBQUkludDMyIG51bUNoYXJzID0gMTsKICBpZiAob2Zmc2V0ID4gMCkgewogICAgY29uc3QgUFJV
bmljaGFyKiBjcCA9IGNwMCArIG9mZnNldDsKICAgIFBSQm9vbCBicmVha0JldHdlZW4gPSAwOwog
ICAgaWYgKGFGb3JMaW5lQnJlYWspIHsKICAgICAgbUxpbmVCcmVha2VyLT5CcmVha0luQmV0d2Vl
bihjcDAsIG9mZnNldCArIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRy
YW5zZm9ybUJ1Zi5HZXRCdWZmZXJFbmQoKS0xLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZicmVha0JldHdlZW4pOwogICAgfQogICAgZWxzZSB7CiAgICAgIG1Xb3JkQnJl
YWtlci0+QnJlYWtJbkJldHdlZW4oY3AwLCBvZmZzZXQgKyAxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1CdWYuR2V0QnVmZmVyRW5kKCktMSwgMSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnJlYWtCZXR3ZWVuKTsKICAgIH0KCiAgICBp
ZiAoIWJyZWFrQmV0d2VlbikgewoKICAgICAgUFJCb29sIHRyeVByZXZGcmFnOwogICAgICBQUlVp
bnQzMiBwcmV2OwogICAgICBpZiAoYUZvckxpbmVCcmVhaykgewogICAgICAgIG1MaW5lQnJlYWtl
ci0+UHJldihjcDAsIG9mZnNldCwgb2Zmc2V0LCAmcHJldiwgJnRyeVByZXZGcmFnKTsKICAgICAg
fQogICAgICBlbHNlIHsKICAgICAgICBtV29yZEJyZWFrZXItPlByZXYoY3AwLCBvZmZzZXQsIG9m
ZnNldCwgJnByZXYsICZ0cnlQcmV2RnJhZyk7CiAgICAgIH0KICAgICAgbnVtQ2hhcnMgPSAoUFJJ
bnQzMikgKChQUlVpbnQzMikgb2Zmc2V0IC0gcHJldikgKyAxOwoKCiAgICAgIG5zcmVzdWx0IHJ2
ID0gbVRyYW5zZm9ybUJ1Zi5Hcm93VG8obnVtQ2hhcnMpOwogICAgICBpZiAoKChydikgJiAweDgw
MDAwMDAwKSkgewogICAgICAgIG51bUNoYXJzID0gbVRyYW5zZm9ybUJ1Zi5HZXRCdWZmZXJMZW5n
dGgoKTsKICAgICAgfQoKCgoKICAgICAgUFJVbmljaGFyKiBicCA9IG1UcmFuc2Zvcm1CdWYuR2V0
QnVmZmVyRW5kKCkgLSAxOwogICAgICBjb25zdCBQUlVuaWNoYXIqIGVuZCA9IGNwIC0gbnVtQ2hh
cnMgKyAxOwogICAgICB3aGlsZSAoY3AgPiBlbmQpIHsKICAgICAgICBQUlVuaWNoYXIgY2ggPSAq
LS1jcDsKICAgICAgICBpZiAoMTYwID09IGNoKSB7CiAgICAgICAgICBjaCA9ICcgJzsKICAgICAg
ICB9CiAgICAgICAgZWxzZSBpZiAoKCgoY2gpID09IDE3MykgfHwgKChjaCkgPT0gJ1xyJykpKSB7
CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGNoID4gMTI3KSBTZXRI
YXNNdWx0aWJ5dGUoMSk7CiAgICAgICAgKi0tYnAgPSBjaDsKICAgICAgfQoKCiAgICAgIG9mZnNl
dCA9IG9mZnNldCAtIG51bUNoYXJzOwogICAgICBudW1DaGFycyA9IG1UcmFuc2Zvcm1CdWYuR2V0
QnVmZmVyRW5kKCkgLSBicDsKICAgIH0KICB9CiAgZWxzZQogICAgICAgICAgb2Zmc2V0LS07Cgog
ICphV29yZExlbiA9IG51bUNoYXJzOwogIHJldHVybiBvZmZzZXQ7Cn0KCgpQUkludDMyCm5zVGV4
dFRyYW5zZm9ybWVyOjpTY2FuUHJlV3JhcFdoaXRlU3BhY2VfQihQUkludDMyKiBhV29yZExlbikK
ewogIGNvbnN0IG5zVGV4dEZyYWdtZW50KiBmcmFnID0gbUZyYWc7CiAgUFJJbnQzMiBvZmZzZXQg
PSBtT2Zmc2V0OwogIFBSVW5pY2hhciogYnAgPSBtVHJhbnNmb3JtQnVmLkdldEJ1ZmZlckVuZCgp
OwogIFBSVW5pY2hhciogc3RhcnRicCA9IG1UcmFuc2Zvcm1CdWYuR2V0QnVmZmVyKCk7CgogIHdo
aWxlICgtLW9mZnNldCA+PSAwKSB7CiAgICBQUlVuaWNoYXIgY2ggPSBmcmFnLT5DaGFyQXQob2Zm
c2V0KTsKICAgIGlmICghKCgoY2gpID09ICcgJykgfHwgKChjaCkgPT0gJ1x0JykgfHwgKChjaCkg
PT0gJ1xuJykpIHx8IChjaCA9PSAnXHQnKSB8fCAoY2ggPT0gJ1xuJykpIHsKCiAgICAgIGlmICgo
KChjaCkgPT0gMTczKSB8fCAoKGNoKSA9PSAnXHInKSkpIHsKICAgICAgICBjb250aW51ZTsKICAg
ICAgfQogICAgICBicmVhazsKICAgIH0KICAgIGlmIChicCA9PSBzdGFydGJwKSB7CiAgICAgIFBS
SW50MzIgb2xkTGVuZ3RoID0gbVRyYW5zZm9ybUJ1Zi5tQnVmZmVyTGVuOwogICAgICBuc3Jlc3Vs
dCBydiA9IG1UcmFuc2Zvcm1CdWYuR3Jvd0J5KDEwMDApOwogICAgICBpZiAoKChydikgJiAweDgw
MDAwMDAwKSkgewoKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBicCA9IG1UcmFuc2Zvcm1C
dWYuR2V0QnVmZmVyRW5kKCkgLSBvbGRMZW5ndGg7CiAgICAgIHN0YXJ0YnAgPSBtVHJhbnNmb3Jt
QnVmLkdldEJ1ZmZlcigpOwogICAgfQogICAgKi0tYnAgPSAnICc7CiAgfQoKICAqYVdvcmRMZW4g
PSBtVHJhbnNmb3JtQnVmLkdldEJ1ZmZlckVuZCgpIC0gYnA7CiAgcmV0dXJuIG9mZnNldDsKfQoK
ClBSSW50MzIKbnNUZXh0VHJhbnNmb3JtZXI6OlNjYW5QcmVEYXRhX0IoUFJJbnQzMiogYVdvcmRM
ZW4pCnsKICBjb25zdCBuc1RleHRGcmFnbWVudCogZnJhZyA9IG1GcmFnOwogIFBSSW50MzIgb2Zm
c2V0ID0gbU9mZnNldDsKICBQUlVuaWNoYXIqIGJwID0gbVRyYW5zZm9ybUJ1Zi5HZXRCdWZmZXJF
bmQoKTsKICBQUlVuaWNoYXIqIHN0YXJ0YnAgPSBtVHJhbnNmb3JtQnVmLkdldEJ1ZmZlcigpOwoK
ICB3aGlsZSAoLS1vZmZzZXQgPj0gMCkgewogICAgUFJVbmljaGFyIGNoID0gZnJhZy0+Q2hhckF0
KG9mZnNldCk7CiAgICBpZiAoKGNoID09ICdcdCcpIHx8IChjaCA9PSAnXG4nKSkgewogICAgICBi
cmVhazsKICAgIH0KICAgIGlmICgxNjAgPT0gY2gpIHsKICAgICAgY2ggPSAnICc7CiAgICB9CiAg
ICBlbHNlIGlmICgoKChjaCkgPT0gMTczKSB8fCAoKGNoKSA9PSAnXHInKSkpIHsKICAgICAgY29u
dGludWU7CiAgICB9CiAgICBpZiAoY2ggPiAxMjcpIFNldEhhc011bHRpYnl0ZSgxKTsKICAgIGlm
IChicCA9PSBzdGFydGJwKSB7CiAgICAgIFBSSW50MzIgb2xkTGVuZ3RoID0gbVRyYW5zZm9ybUJ1
Zi5tQnVmZmVyTGVuOwogICAgICBuc3Jlc3VsdCBydiA9IG1UcmFuc2Zvcm1CdWYuR3Jvd0J5KDEw
MDApOwogICAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgewoKICAgICAgICBvZmZzZXQrKzsK
ICAgICAgICBicmVhazsKICAgICAgfQogICAgICBicCA9IG1UcmFuc2Zvcm1CdWYuR2V0QnVmZmVy
RW5kKCkgLSBvbGRMZW5ndGg7CiAgICAgIHN0YXJ0YnAgPSBtVHJhbnNmb3JtQnVmLkdldEJ1ZmZl
cigpOwogICAgfQogICAgKi0tYnAgPSBjaDsKICB9CgogICphV29yZExlbiA9IG1UcmFuc2Zvcm1C
dWYuR2V0QnVmZmVyRW5kKCkgLSBicDsKICByZXR1cm4gb2Zmc2V0Owp9CgoKClBSVW5pY2hhcioK
bnNUZXh0VHJhbnNmb3JtZXI6OkdldFByZXZXb3JkKFBSQm9vbCBhSW5Xb3JkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiogYVdvcmRMZW5SZXN1bHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQUkludDMyKiBhQ29udGVudExlblJlc3VsdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCogYUlzV2hpdGVTcGFjZVJlc3VsdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhRm9yTGluZUJyZWFrKQp7CiAgY29uc3Qg
bnNUZXh0RnJhZ21lbnQqIGZyYWcgPSBtRnJhZzsKICBQUkludDMyIG9mZnNldCA9IG1PZmZzZXQ7
CiAgUFJJbnQzMiB3b3JkTGVuID0gMDsKICBQUkJvb2wgaXNXaGl0ZXNwYWNlID0gMDsKICBQUlVu
aWNoYXIqIHJlc3VsdCA9IDA7CgoKCiAgaWYoKCEgYUZvckxpbmVCcmVhaykgJiYgKGVOb3JtYWwg
IT0gbU1vZGUpKQogICAgIG1Nb2RlID0gZU5vcm1hbDsKCiAgd2hpbGUgKC0tb2Zmc2V0ID49IDAp
IHsKICAgIFBSVW5pY2hhciBmaXJzdENoYXIgPSBmcmFnLT5DaGFyQXQob2Zmc2V0KTsKCgogICAg
aWYgKCgoKGZpcnN0Q2hhcikgPT0gMTczKSB8fCAoKGZpcnN0Q2hhcikgPT0gJ1xyJykpKSB7CiAg
ICAgIGNvbnRpbnVlOwogICAgfQoKICAgIHN3aXRjaCAobU1vZGUpIHsKICAgICAgZGVmYXVsdDoK
ICAgICAgY2FzZSBlTm9ybWFsOgogICAgICAgIGlmICgoKChmaXJzdENoYXIpID09ICcgJykgfHwg
KChmaXJzdENoYXIpID09ICdcdCcpIHx8ICgoZmlyc3RDaGFyKSA9PSAnXG4nKSkpIHsKICAgICAg
ICAgIG9mZnNldCA9IFNjYW5Ob3JtYWxXaGl0ZVNwYWNlX0IoKTsKICAgICAgICAgIHdvcmRMZW4g
PSAxOwogICAgICAgICAgaXNXaGl0ZXNwYWNlID0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSBp
ZiAoMTYwID09IGZpcnN0Q2hhciAmJiAhYUZvckxpbmVCcmVhaykgewogICAgICAgICAgd29yZExl
biA9IDE7CiAgICAgICAgICBpc1doaXRlc3BhY2UgPSAxOwogICAgICAgICAgbVRyYW5zZm9ybUJ1
Zi5tQnVmZmVyW21UcmFuc2Zvcm1CdWYubUJ1ZmZlckxlbiAtIDFdID0gJyAnOwogICAgICAgICAg
b2Zmc2V0LS07CiAgICAgICAgfSBlbHNlIGlmIChmcmFnLT5JczJiKCkpIHsKICAgICAgICAgIG9m
ZnNldCA9IFNjYW5Ob3JtYWxVbmljb2RlVGV4dF9CKGFGb3JMaW5lQnJlYWssICZ3b3JkTGVuKTsK
ICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBvZmZzZXQgPSBTY2FuTm9ybWFsQXNj
aWlUZXh0X0IoJndvcmRMZW4pOwogICAgICAgIH0KICAgICAgICBicmVhazsKCiAgICAgIGNhc2Ug
ZVByZWZvcm1hdHRlZDoKICAgICAgICBpZiAoKCdcbicgPT0gZmlyc3RDaGFyKSB8fCAoJ1x0JyA9
PSBmaXJzdENoYXIpKSB7CiAgICAgICAgICBtVHJhbnNmb3JtQnVmLm1CdWZmZXJbbVRyYW5zZm9y
bUJ1Zi5tQnVmZmVyTGVuLTFdID0gZmlyc3RDaGFyOwogICAgICAgICAgb2Zmc2V0LS07CiAgICAg
ICAgICB3b3JkTGVuID0gMTsKICAgICAgICAgIGlzV2hpdGVzcGFjZSA9IDE7CiAgICAgICAgfQog
ICAgICAgIGVsc2UgewogICAgICAgICAgb2Zmc2V0ID0gU2NhblByZURhdGFfQigmd29yZExlbik7
CiAgICAgICAgfQogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBlUHJlV3JhcDoKICAgICAgICBp
ZiAoKCgoZmlyc3RDaGFyKSA9PSAnICcpIHx8ICgoZmlyc3RDaGFyKSA9PSAnXHQnKSB8fCAoKGZp
cnN0Q2hhcikgPT0gJ1xuJykpKSB7CiAgICAgICAgICBpZiAoKCdcbicgPT0gZmlyc3RDaGFyKSB8
fCAoJ1x0JyA9PSBmaXJzdENoYXIpKSB7CiAgICAgICAgICAgIG1UcmFuc2Zvcm1CdWYubUJ1ZmZl
clttVHJhbnNmb3JtQnVmLm1CdWZmZXJMZW4tMV0gPSBmaXJzdENoYXI7CiAgICAgICAgICAgIG9m
ZnNldC0tOwogICAgICAgICAgICB3b3JkTGVuID0gMTsKICAgICAgICAgIH0KICAgICAgICAgIGVs
c2UgewogICAgICAgICAgICBvZmZzZXQgPSBTY2FuUHJlV3JhcFdoaXRlU3BhY2VfQigmd29yZExl
bik7CiAgICAgICAgICB9CiAgICAgICAgICBpc1doaXRlc3BhY2UgPSAxOwogICAgICAgIH0KICAg
ICAgICBlbHNlIGlmIChmcmFnLT5JczJiKCkpIHsKICAgICAgICAgIG9mZnNldCA9IFNjYW5Ob3Jt
YWxVbmljb2RlVGV4dF9CKGFGb3JMaW5lQnJlYWssICZ3b3JkTGVuKTsKICAgICAgICB9CiAgICAg
ICAgZWxzZSB7CiAgICAgICAgICBvZmZzZXQgPSBTY2FuTm9ybWFsQXNjaWlUZXh0X0IoJndvcmRM
ZW4pOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgIH0KCgoKICAgIG9mZnNldCA9IG9mZnNl
dCArIDE7CgogICAgcmVzdWx0ID0gbVRyYW5zZm9ybUJ1Zi5HZXRCdWZmZXJFbmQoKSAtIHdvcmRM
ZW47CgogICAgaWYgKCFpc1doaXRlc3BhY2UpIHsKICAgICAgc3dpdGNoIChtVGV4dFRyYW5zZm9y
bSkgewogICAgICAgIGNhc2UgMToKICAgICAgICAgIGdDYXNlQ29udi0+VG9UaXRsZShyZXN1bHQs
IHJlc3VsdCwgd29yZExlbiwgIWFJbldvcmQpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2Fz
ZSAyOgogICAgICAgICAgZ0Nhc2VDb252LT5Ub0xvd2VyKHJlc3VsdCwgcmVzdWx0LCB3b3JkTGVu
KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMzoKICAgICAgICAgIGdDYXNlQ29udi0+
VG9VcHBlcihyZXN1bHQsIHJlc3VsdCwgd29yZExlbik7CiAgICAgICAgICBicmVhazsKICAgICAg
fQogICAgfQogICAgYnJlYWs7CiAgfQoKICAqYVdvcmRMZW5SZXN1bHQgPSB3b3JkTGVuOwogICph
Q29udGVudExlblJlc3VsdCA9IG1PZmZzZXQgLSBvZmZzZXQ7CiAgKmFJc1doaXRlU3BhY2VSZXN1
bHQgPSBpc1doaXRlc3BhY2U7CgogIG1PZmZzZXQgPSBvZmZzZXQ7CiAgcmV0dXJuIHJlc3VsdDsK
fQo=



More information about the Gcc-prs mailing list