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


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

c++/2503: Fatal signal comiling map template using -g on AIX



>Number:         2503
>Category:       c++
>Synopsis:       Fatal signal comiling map template using -g on AIX
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Fri Apr 06 11:06:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Mark Glemboski
>Release:        powerpc-ibm-aix3.2.5/2.95.3   gcc version 2.95.3 20010315 (release)
>Organization:
>Environment:
OS: AIX 2 3 000040754900
Hardware: powerpc-ibm-aix3.2.5
>Description:
Compiling a map template that has a string as a key
with the -g option causes the error:

g++: Internal compiler error: program as got fatal signal 11
>How-To-Repeat:
Compile this source file 'tm.C':
#include <string>
#include <map>
map <string, int> badMap;

Using the command:
g++ -g -c tm.C -o tm.o
>Fix:
Work arounds:
Compile without using '-g'.
	-or-
Use const char * instead of string
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="tm.i"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="tm.i"

IyAxICJ0bS5DIgojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJw
Yy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyaW5nIiAx
IDMKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFp
eDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAx
IDMKI3ByYWdtYSBpbnRlcmZhY2UKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2Mt
bGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L2NzdGRkZWYiIDEgMwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93
ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgNjEgIi9h
b2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45
NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CnR5cGVkZWYg
bG9uZyB1bnNpZ25lZCBpbnQgc2l6ZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCAgd2ludF90Owoj
IDMxNyAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz
LjIuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CiMgNiAiL2FvbG5ldC9wa2cvZ2NjLTIu
OTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9jc3RkZGVmIiAyIDMKIyAzNSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9s
aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMiAzCiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9s
aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGQvc3RyYWl0cy5oIiAxIDMKI3ByYWdtYSBpbnRlcmZhY2UgInN0ZC9zdHJhaXRz
LmgiCmV4dGVybiAiQysrIiB7CnRlbXBsYXRlIDxjbGFzcyBjaGFyVD4Kc3RydWN0IHN0cmluZ19j
aGFyX3RyYWl0cyB7CiAgdHlwZWRlZiBjaGFyVCBjaGFyX3R5cGU7ICAKICAgCiAgc3RhdGljIHZv
aWQgYXNzaWduIChjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyBjMSA9
IGMyOyB9CiAgc3RhdGljIGJvb2wgZXEgKGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJf
dHlwZSYgYzIpCiAgICB7IHJldHVybiAoYzEgPT0gYzIpOyB9CiAgc3RhdGljIGJvb2wgbmUgKGNv
bnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAhKGMx
ID09IGMyKTsgfQogIHN0YXRpYyBib29sIGx0IChjb25zdCBjaGFyX3R5cGUmIGMxLCBjb25zdCBj
aGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gKGMxIDwgYzIpOyB9CiAgc3RhdGljIGNoYXJfdHlw
ZSBlb3MgKCkgeyByZXR1cm4gY2hhcl90eXBlKCk7IH0gIAogIHN0YXRpYyBib29sIGlzX2RlbChj
aGFyX3R5cGUgYSkgeyByZXR1cm4gMDsgfQogICAKICAKICAgCiAgc3RhdGljIGludCBjb21wYXJl
IChjb25zdCBjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbikKICAg
IHsKICAgICAgc2l6ZV90IGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCglpZiAobmUg
KHMxW2ldLCBzMltpXSkpCgkgIHJldHVybiBsdCAoczFbaV0sIHMyW2ldKSA/IC0xIDogMTsKICAg
ICAgcmV0dXJuIDA7CiAgICB9CiAgICAKICBzdGF0aWMgc2l6ZV90IGxlbmd0aCAoY29uc3QgY2hh
cl90eXBlKiBzKQogICAgewogICAgICBzaXplX3QgbCA9IDA7CiAgICAgIHdoaWxlIChuZSAoKnMr
KywgZW9zICgpKSkKCSsrbDsKICAgICAgcmV0dXJuIGw7CiAgICB9CiAgc3RhdGljIGNoYXJfdHlw
ZSogY29weSAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAg
ICB7CiAgICAgIGZvciAoOyBuLS07ICkKCWFzc2lnbiAoczFbbl0sIHMyW25dKTsKICAgICAgcmV0
dXJuIHMxOwogICAgfQogIHN0YXRpYyBjaGFyX3R5cGUqIG1vdmUgKGNoYXJfdHlwZSogczEsIGNv
bnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAgewogICAgICBjaGFyX3R5cGUgYVtuXTsK
ICAgICAgc2l6ZV90IGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCglhc3NpZ24gKGFb
aV0sIHMyW2ldKTsKICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkKCWFzc2lnbiAoczFbaV0s
IGFbaV0pOwogICAgICByZXR1cm4gczE7CiAgICB9CiAgc3RhdGljIGNoYXJfdHlwZSogc2V0IChj
aGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUmIGMsIHNpemVfdCBuKQogICAgewogICAgICBm
b3IgKDsgbi0tOyApCglhc3NpZ24gKHMxW25dLCBjKTsKICAgICAgcmV0dXJuIHMxOwogICAgfQp9
OwpjbGFzcyBpc3RyZWFtOwpjbGFzcyBvc3RyZWFtOwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1
LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2lu
Y2x1ZGUvZysrLTMvY2N0eXBlIiAxIDMKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzIDQK
IyAxICIvdXNyL2luY2x1ZGUvc3RhbmRhcmRzLmgiIDEgMyA0CiMgNDkgIi91c3IvaW5jbHVkZS9z
dGFuZGFyZHMuaCIgMyA0CiMgMjEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMgNAojIDEgIi91
c3IvaW5jbHVkZS9zeXMvbG9jYWxlZGVmLmgiIDEgMyA0CiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIu
OTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zeXMv
bGltaXRzLmgiIDEgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2Zsb2F0LmgiIDEgMyA0CiMgMSAiL2Fv
bG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1
LjMvaW5jbHVkZS9zeXMvbGltaXRzLmgiIDEgMyA0CiMgMjI3ICIvYW9sbmV0L3BrZy9nY2MtMi45
NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N5cy9s
aW1pdHMuaCIgMyA0CiMgMTYwICIvdXNyL2luY2x1ZGUvZmxvYXQuaCIgMiAzIDQKCWV4dGVybiAg
dW5zaWduZWQgICBpbnQgU0lORklOSVRZOwoJZXh0ZXJuICB1bnNpZ25lZCAgIGludCBfREJMSU5G
WzJdOwoJZXh0ZXJuICB1bnNpZ25lZCAgIGludCBTUU5BTjsKCWV4dGVybiAgdW5zaWduZWQgICBp
bnQgRFFOQU5bMl07CglleHRlcm4gIHVuc2lnbmVkICAgaW50IFNTTkFOOwoJZXh0ZXJuICB1bnNp
Z25lZCAgIGludCBEU05BTlsyXTsKdHlwZWRlZgl1bnNpZ25lZCBzaG9ydCBmcHJuZF90OwpmcHJu
ZF90IGZwX3JlYWRfcm5kKHZvaWQpOwpmcHJuZF90IGZwX3N3YXBfcm5kKGZwcm5kX3Qgcm5kKTsK
IyAxNjggIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4
My4yLjUvMi45NS4zL2luY2x1ZGUvc3lzL2xpbWl0cy5oIiAyIDMgNAoJCQkgCiMgMjAgIi91c3Iv
aW5jbHVkZS9zeXMvbG9jYWxlZGVmLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9sY19j
b3JlLmgiIDEgMyA0CiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dl
cnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzIDQKdHlwZWRl
ZiBjaGFyICoJCXZhX2xpc3Q7CiMgNzQgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1s
aWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0
eXBlZGVmIHVuc2lnbmVkIGludCB3Y3R5cGVfdDsKdHlwZWRlZiBsb25nCQlmcG9zX3Q7CnR5cGVk
ZWYJbG9uZwkJdGltZV90Owp0eXBlZGVmIGludAkJY2xvY2tfdDsKIyAxMDUgIi9hb2xuZXQvcGtn
L2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1
ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmCXVuc2lnbmVkIGNoYXIJdWNoYXJfdDsKdHlwZWRl
Zgl1bnNpZ25lZCBzaG9ydAl1c2hvcnRfdDsKdHlwZWRlZgl1bnNpZ25lZCBpbnQJdWludF90Owp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcJdWxvbmdfdDsKdHlwZWRlZiBzaWduZWQgaW50CXNzaXplX3Q7
CnR5cGVkZWYJc3RydWN0IHsgaW50IHJbMV07IH0gKglwaHlzYWRyX3Q7CnR5cGVkZWYgbG9uZwkJ
bGV2ZWxfdDsKdHlwZWRlZglsb25nCQlkYWRkcl90OwkgCnR5cGVkZWYJY2hhciAqCQljYWRkcl90
OwkgCnR5cGVkZWYJdWxvbmdfdAkJaW5vX3Q7CQkgCnR5cGVkZWYgc2hvcnQJCWNudF90Owp0eXBl
ZGVmIHVsb25nX3QJCWRldl90OwkJIAp0eXBlZGVmCWxvbmcJCWNoYW5fdDsJCSAKdHlwZWRlZgls
b25nCQlvZmZfdDsJCSAKdHlwZWRlZglsb25nCQlwYWRkcl90Owp0eXBlZGVmCWxvbmcJCWtleV90
Owp0eXBlZGVmIGxvbmcJCXRpbWVyX3Q7CSAKdHlwZWRlZglzaG9ydAkJbmxpbmtfdDsKdHlwZWRl
Zgl1bG9uZ190CQltb2RlX3Q7CQkgCnR5cGVkZWYgdWxvbmdfdAkJdWlkX3Q7CQkgCnR5cGVkZWYg
dWxvbmdfdAkJZ2lkX3Q7CQkgCnR5cGVkZWYJdm9pZCAqCQltaWRfdDsJCSAKdHlwZWRlZglpbnQJ
CXBpZF90OwkJIAp0eXBlZGVmIGNoYXIJCXNsYWJfdFsxMl07CSAKdHlwZWRlZiBsb25nICAgICAg
ICAgICAgbXR5cF90OwkJIAojIDEgIi91c3IvaW5jbHVkZS9zeXMvbV90eXBlcy5oIiAxIDMgNAp0
eXBlZGVmIHN0cnVjdCBsYWJlbF90IHsJCSAKCXN0cnVjdCBsYWJlbF90ICpwcmV2OwkJIAoJdWxv
bmdfdCAgICAgICAgICAgaWFyOwkJIAoJdWxvbmdfdCAgICAgICAgICAgc3RhY2s7CQkgCgl1bG9u
Z190ICAgICAgICAgICB0b2M7CQkgCgl1bG9uZ190ICAgICAgICAgICBjcjsgICAgICAgICAgICAg
IAoJdWxvbmdfdCAgICAgICAgICAgaW50cHJpOwkJIAoJdWxvbmdfdCAgICAgICAgICAgcmVnWzE5
XTsJIAp9IGxhYmVsX3Q7CnR5cGVkZWYgbG9uZwkJdm1pZF90OwkJIAp0eXBlZGVmIHVsb25nX3QJ
CXZtaGFuZGxlX3Q7CSAKdHlwZWRlZiBzdHJ1Y3Qgdm1hZGRyX3QgewkJIAoJdm1oYW5kbGVfdAlz
cnZhbDsJCSAKCWNhZGRyX3QJCW9mZnNldDsJCSAKfSB2bWFkZHJfdDsKdHlwZWRlZiBzdHJ1Y3Qg
YWRzcGFjZV90ewkJIAoJdWxvbmdfdAkJYWxsb2M7CQkgCgl2bWhhbmRsZV90CXNydmFsWzE2XTsJ
IAp9IGFkc3BhY2VfdDsKIyAxNTIgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIv
cG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CnR5
cGVkZWYgc3RydWN0IHNpZ3NldF90CXsKCXVuc2lnbmVkIGxvbmcgbG9zaWdzOwoJdW5zaWduZWQg
bG9uZyBoaXNpZ3M7Cn0gc2lnc2V0X3Q7CnR5cGVkZWYgaW50IHNpZ25hbF90Owp0eXBlZGVmCXVj
aGFyX3QJCXVjaGFyOwp0eXBlZGVmCXVzaG9ydF90CXVzaG9ydDsKdHlwZWRlZgl1aW50X3QJCXVp
bnQ7CnR5cGVkZWYgdWxvbmdfdAkJdWxvbmc7CnR5cGVkZWYJcGh5c2Fkcl90CXBoeXNhZHI7CnR5
cGVkZWYJdW5zaWduZWQgY2hhcgl1X2NoYXI7CnR5cGVkZWYJdW5zaWduZWQgc2hvcnQJdV9zaG9y
dDsKdHlwZWRlZgl1bnNpZ25lZCBpbnQJdV9pbnQ7CnR5cGVkZWYJdW5zaWduZWQgbG9uZwl1X2xv
bmc7CnR5cGVkZWYJc3RydWN0CV9xdWFkIHsgbG9uZyB2YWxbMl07IH0gcXVhZDsKdHlwZWRlZgls
b25nCXN3YmxrX3Q7CnN0cnVjdCBzaWdzZXQJewoJdW5zaWduZWQgbG9uZyBsb3NpZ3M7Cgl1bnNp
Z25lZCBsb25nIGhpc2lnczsKfTsKc3RydWN0IGZzaWQgewoJbG9uZwl2YWxbMl07Cn07CnR5cGVk
ZWYgc3RydWN0IGZzaWQgZnNpZF90OwpzdHJ1Y3QgZmlkIHsKCXVpbnRfdAlmaWRfbGVuOwoJY2hh
cglmaWRfZGF0YVsoMzIgIC0gc2l6ZW9mKGZzaWRfdCkgLSBzaXplb2YodWludF90KSkgXTsKfTsK
dHlwZWRlZiBzdHJ1Y3QgZmlkIGZpZF90OwpzdHJ1Y3QgZmlsZWlkIHsJCQkgCgl1aW50X3QJZmlk
X2xlbjsKCWlub190CWZpZF9pbm87Cgl1aW50X3QJZmlkX2dlbjsKCWNoYXIJZmlkX3hbKDMyICAt
IHNpemVvZihmc2lkX3QpIC0gc2l6ZW9mKHVpbnRfdCkpICAtIChzaXplb2YoaW5vX3QpICsgMikg
LSBzaXplb2YodWludF90KV07Cn07CnN0cnVjdCBmaGFuZGxlIHsKCWNoYXIgeFszMiBdOwkJIAp9
OwpzdHJ1Y3QgZmlsZWhhbmRsZSB7CQkJIAoJZnNpZF90CQlmaF9mc2lkOwkJIAoJc3RydWN0IGZp
bGVpZAlmaF9maWQ7CQkJIAp9Owp0eXBlZGVmIHN0cnVjdCBmaGFuZGxlIGZoYW5kbGVfdDsKc3Ry
dWN0IHVuaXF1ZV9pZCB7CiAgICAgICB1bnNpZ25lZCBsb25nIHdvcmQxOwogICAgICAgdW5zaWdu
ZWQgbG9uZyB3b3JkMjsKICAgICAgIHVuc2lnbmVkIGxvbmcgd29yZDM7CiAgICAgICB1bnNpZ25l
ZCBsb25nIHdvcmQ0Owp9Owp0eXBlZGVmIHN0cnVjdCB1bmlxdWVfaWQgdW5pcXVlX2lkX3Q7CiMg
MjgxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMu
Mi41LzIuOTUuMy9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKIyAxOCAiL3Vzci9pbmNsdWRlL3N5
cy9sY19jb3JlLmgiIDIgMyA0CnR5cGVkZWYgc3RydWN0IHsKICAgIHVuc2lnbmVkIHNob3J0Cgl0
eXBlX2lkLAoJbWFnaWM7CiAgICB1bnNpZ25lZCBsb25nCgl2ZXJzaW9uOwogICAgCiAgICBzaXpl
X3QgIHNpemU7Cn0gX0xDX29iamVjdF90Owp0eXBlZGVmIHN0cnVjdCB7CiAgCiAgICBfTENfb2Jq
ZWN0X3QgIGhkcjsKCQogICAgIAogICAgaW50ICAgY2F0Z2V0cyAgOwogICAgaW50ICAgICAgICAg
ICAgICBjYXRjbG9zZSAgOwogICAgCiAgICAgCiAgICBpbnQgICBjb21wcmVzcyAgOwogICAgaW50
ICAgZGVjb21wcmVzcyAgOwogICAgaW50ICAgICAgc3RhcnRfY29tcHJlc3MgIDsKICAgIGludCAg
ICAgIGVuZF9jb21wcmVzcyAgOwogICAgCiAgICAgCiAgICBpbnQgICAgICBpbml0ICA7CiAgICB2
b2lkICAgICpkYXRhOwp9IF9MQ19jb3JlX2Nhcl90Owp0eXBlZGVmIHN0cnVjdCB7CiAgICBfTENf
b2JqZWN0X3QgIGhkcjsKICAgICAKICAgIGludCAgICBubF9sYW5naW5mbyAgOwogICAgCiAgICAg
CiAgICBpbnQgICAgbWJ0b3djICA7CiAgICBpbnQgICAgbWJzdG93Y3MgIDsKICAgIGludCAgICAg
ICB3Y3RvbWIgIDsKICAgIGludCAgICB3Y3N0b21icyAgOwogICAgCiAgICAgCiAgICBpbnQgICAg
ICAgbWJsZW4gIDsKICAgIAogICAgIAogICAgaW50ICAgIHdjc3dpZHRoICA7CiAgICBpbnQgICAg
d2N3aWR0aCAgOwogICAgCiAgICAgCiAgICBpbnQgICAgICAgX19tYnRvcGMgIDsKICAgIGludCAg
ICAgICBfX21ic3RvcGNzICA7CiAgICBpbnQgICAgICAgX19wY3RvbWIgIDsKICAgIGludCAgICAg
ICBfX3Bjc3RvbWJzICA7CiAgICAKICAgICAKICAgIGludCAgICBjc2lkICA7CiAgICBpbnQgICAg
d2NzaWQgIDsKICAgIAogICAgIAogICAgaW50ICAgICAgIGluaXQgIDsKICAgIHZvaWQgICAgICpk
YXRhOwp9IF9MQ19jb3JlX2NoYXJtYXBfdDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX29iamVj
dF90ICBoZHI7IAogICAgCiAgICAgCiAgICBpbnQgICAgICB0b3d1cHBlciAgOwogICAgaW50ICAg
ICAgdG93bG93ZXIgIDsKICAgIAogICAgIAogICAgaW50ICAgIGdldF93Y3R5cGUgIDsKICAgIGlu
dCAgICAgICAgICAgICBpc193Y3R5cGUgIDsKICAgIAogICAgIAogICAgaW50ICAgICAgICAgIGlu
aXQgIDsKICAgIHZvaWQgICAgICpkYXRhOwp9IF9MQ19jb3JlX2N0eXBlX3Q7CnR5cGVkZWYgc3Ry
dWN0IHsKICAgIF9MQ19vYmplY3RfdCAgaGRyOwogICAgIAogICAgaW50ICAgICAgICBzdHJjb2xs
ICA7CiAgICBpbnQgICAgIHN0cnhmcm0gIDsKICAgIAogICAgIAogICAgaW50ICAgICAgICB3Y3Nj
b2xsICA7CiAgICBpbnQgICAgIHdjc3hmcm0gIDsKICAgIAogICAgIAogICAgaW50ICAgICAgICBm
bm1hdGNoICA7CiAgICAKICAgICAKICAgIGludCAgICAgICAgcmVnY29tcCAgOwogICAgaW50ICAg
ICByZWdlcnJvciAgOwogICAgaW50ICAgICAgICByZWdleGVjICA7CiAgICBpbnQgICAgICAgcmVn
ZnJlZSAgOwogICAgCiAgICAgCiAgICBpbnQgICAgICAgIGluaXQgIDsKICAgIHZvaWQgICAgICpk
YXRhOwp9IF9MQ19jb3JlX2NvbGxhdGVfdDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX29iamVj
dF90ICBoZHI7CiAgICAKICAgICAKICAgIGludCAgICAgbmxfbGFuZ2luZm8gIDsKICAgIAogICAg
IAogICAgaW50ICAgICBzdHJmdGltZSAgOwogICAgaW50ICAgICBzdHJwdGltZSAgOwogICAgCiAg
ICAgCiAgICBpbnQgICAgIHdjc2Z0aW1lICA7CiAgICAKICAgICAKICAgIGludCAgICAgICAgaW5p
dCAgOwogICAgdm9pZCAgICAgKmRhdGE7Cn0gX0xDX2NvcmVfdGltZV90Owp0eXBlZGVmIHN0cnVj
dCB7CiAgICBfTENfb2JqZWN0X3QgIGhkcjsKICAgICAKICAgIGludCAgICAgbmxfbGFuZ2luZm8g
IDsKICAgIAogICAgIAogICAgaW50ICAgICBzdHJmbW9uICA7CiAgICAKICAgICAKICAgIGludCAg
ICAgICAgaW5pdCAgOwogICAgdm9pZCAgICAgKmRhdGE7Cn0gX0xDX2NvcmVfbW9uZXRhcnlfdDsK
dHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX29iamVjdF90ICBoZHI7CiAgICAgCiAgICBpbnQgICAg
IG5sX2xhbmdpbmZvICA7CiAgICAKICAgICAKICAgIGludCAgICAgICAgaW5pdCAgOwogICAgdm9p
ZCAgICAgKmRhdGE7Cn0gX0xDX2NvcmVfbnVtZXJpY190Owp0eXBlZGVmIHN0cnVjdCB7CiAgICBf
TENfb2JqZWN0X3QgIGhkcjsKICAgIAogICAgIAogICAgaW50ICAgIG5sX2xhbmdpbmZvICA7CiAg
ICAKICAgICAKICAgIGludCAgICBycG1hdGNoICA7CiAgICAKICAgICAKICAgIGludCAgICAgICBp
bml0ICA7CiAgICB2b2lkICAgICAgICAqZGF0YTsKfSBfTENfY29yZV9yZXNwX3Q7CnR5cGVkZWYg
c3RydWN0IHsKICAgIF9MQ19vYmplY3RfdCBoZHI7CiAgICAgCiAgICBpbnQgICAgICAgICAgIG5s
X2xhbmdpbmZvICA7CiAgICBpbnQgICBsb2NhbGVjb252ICA7CiAgICAKICAgICAKICAgIGludCAg
ICAgaW5pdCAgOwogICAgdm9pZCAgICAgICAgICpkYXRhOwp9IF9MQ19jb3JlX2xvY2FsZV90Owoj
IDIxICIvdXNyL2luY2x1ZGUvc3lzL2xvY2FsZWRlZi5oIiAyIDMgNAojIDEgIi9hb2xuZXQvcGtn
L2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1
ZGUvbG9jYWxlLmgiIDEgMyA0CnN0cnVjdCBsY29udiB7CiAgIGNoYXIgKmRlY2ltYWxfcG9pbnQ7
CQkgCiAgIGNoYXIgKnRob3VzYW5kc19zZXA7CQkgCiAgIGNoYXIgKmdyb3VwaW5nOwkJIAogICBj
aGFyICppbnRfY3Vycl9zeW1ib2w7CSAKICAgY2hhciAqY3VycmVuY3lfc3ltYm9sOwkgCiAgIGNo
YXIgKm1vbl9kZWNpbWFsX3BvaW50OwkgCiAgIGNoYXIgKm1vbl90aG91c2FuZHNfc2VwOwkgCiAg
IGNoYXIgKm1vbl9ncm91cGluZzsJCSAKICAgY2hhciAqcG9zaXRpdmVfc2lnbjsJCSAKICAgY2hh
ciAqbmVnYXRpdmVfc2lnbjsJCSAKICAgY2hhciBpbnRfZnJhY19kaWdpdHM7CSAKICAgY2hhciBm
cmFjX2RpZ2l0czsJCSAKICAgY2hhciBwX2NzX3ByZWNlZGVzOwkJIAogICBjaGFyIHBfc2VwX2J5
X3NwYWNlOwkJIAogICBjaGFyIG5fY3NfcHJlY2VkZXM7CQkgCiAgIGNoYXIgbl9zZXBfYnlfc3Bh
Y2U7CQkgCiAgIGNoYXIgcF9zaWduX3Bvc247CQkgCiAgIGNoYXIgbl9zaWduX3Bvc247CQkgCiAg
IGNoYXIgKmxlZnRfcGFyZW50aGVzaXM7CSAKICAgY2hhciAqcmlnaHRfcGFyZW50aGVzaXM7CSAK
fSA7CnN0cnVjdCBsY29udiAqbG9jYWxlY29udih2b2lkKTsKY2hhciAgICpzZXRsb2NhbGUoaW50
LCBjb25zdCBjaGFyICopOwp0eXBlZGVmIHN0cnVjdCBsY29udiBsY29udjsKIyAyMiAiL3Vzci9p
bmNsdWRlL3N5cy9sb2NhbGVkZWYuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2xvY2Fs
ZWRlZjMxLmgiIDEgMyA0CnR5cGVkZWYgc3RydWN0ICBjb2xkZXNjICB7ICAgICAgICAgICAgICAg
ICAgICAgIAoJc2hvcnQgICAgIGNkX3N0cm9mZjsgICAgICAgICAgICAgICAgICAgIAoJc2hvcnQJ
ICBjZF9yZXBvZmY7CglzaG9ydCAgICAgY2RfY3ZhbDsKCXNob3J0CSAgY2RfY3VuaXE7Cn0gY29s
ZGVzY190Owp0eXBlZGVmIHN0cnVjdCBjb2xsYXRpb25fdGFibGUgeyAgICAgICAgICAgICAgICAg
CglzaG9ydCAgICBsY192ZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgIAoJc2hvcnQJIGxjX2xl
bmd0aDsJCQkgCgljaGFyICAgICAqbGNfbG9jYWxlX25hbWU7CQkgCglpbnQgICAgICBsZW5fY29s
bGF0ZTsKCXNob3J0ICAgICpsY19jb2xsYXRlOyAgICAgICAgICAgICAgICAgICAgCglpbnQgICAg
ICBsZW5fY29sdW5pcTsKCXNob3J0ICAgICpsY19jb2x1bmlxOyAgICAgICAgICAgICAgICAgICAg
CglpbnQgICAgICBsZW5fY29sZGVzYzsKCWNvbGRlc2NfdCAqbGNfY29sZGVzYzsgICAgICAgICAg
ICAgICAgICAgCglpbnQJIGxlbl9zdHJpbmdzOwkJCQoJd2NoYXJfdCAgKmxjX3N0cmluZ3M7CQkJ
IAoJaW50CSBoaWdoX2N2YWx1ZTsJCQkgCn0gY29sX3Q7CnR5cGVkZWYgc3RydWN0IGNoYXJfY2xh
c3NpZmljYXRpb25fdGFibGUgeyAgICAgICAKCXNob3J0ICAgICAgbGNfdmVyc2lvbjsgCQkgCglz
aG9ydAkgICBsY19sZW5ndGg7ICAJCSAKCXNob3J0ICAgICAgbGNfY29kZV90eXBlOyAJIAoJc2hv
cnQgICAgICBtYl9jdXJfbWF4OyAgIAkgCglzaG9ydCAgICAgIG1iX2N1cl9taW47ICAgCSAKCXNo
b3J0ICAgICAgbGNfZHNwX3dpZHRoOyAgICAgICAgICAgICAgICAgIAoJY2hhciAgICAgICAqbGNf
bG9jYWxlX25hbWU7IAkgCglpbnQgICAgICAgIGxlbl9jYXNlY29udjsgICAJIAoJd2NoYXJfdCAg
ICAqbGNfY2FzZWNvbnY7ICAgCSAKCWludAkgICBsZW5fY3R5cGU7Cgl1bnNpZ25lZCBzaG9ydCAq
bGNfY3R5cGU7CSAJCn0gY3R5cGVfdDsKdHlwZWRlZglzdHJ1Y3QgbGNfbW9uZXRhcnlfdGFibGUg
ewoJc2hvcnQgIAlsY192ZXJzaW9uOwoJc2hvcnQgCWxjX2xlbmd0aDsJCSAKCWNoYXIgICAJKmxj
X2xvY2FsZV9uYW1lOwkgCgljaGFyIAkqaW50X2N1cnJfc3ltYm9sOwkgCgljaGFyIAkqY3VycmVu
Y3lfc3ltYm9sOwkgCgljaGFyIAkqbW9uX2RlY2ltYWxfcG9pbnQ7CSAKCWNoYXIgCSptb25fdGhv
dXNhbmRzX3NlcDsJIAoJY2hhciAJKm1vbl9ncm91cGluZzsJCSAKCWNoYXIgCSpwb3NpdGl2ZV9z
aWduOwkJIAoJY2hhciAJKm5lZ2F0aXZlX3NpZ247CQkgCgljaGFyIAlpbnRfZnJhY19kaWdpdHM7
CSAKCWNoYXIgCWZyYWNfZGlnaXRzOwkJIAoJY2hhciAJcF9jc19wcmVjZWRlczsJCSAKCWNoYXIg
CXBfc2VwX2J5X3NwYWNlOwkJIAoJY2hhciAJbl9jc19wcmVjZWRlczsJCSAKCWNoYXIgCW5fc2Vw
X2J5X3NwYWNlOwkJIAoJY2hhciAJcF9zaWduX3Bvc247CQkgCgljaGFyIAluX3NpZ25fcG9zbjsJ
CSAKfSBtb25fdDsKdHlwZWRlZiBzdHJ1Y3QgbnVtZXJpY190YWJsZSB7ICAgICAgICAgICAgICAg
ICAgIAoJc2hvcnQJbGNfdmVyc2lvbjsKCXNob3J0CWxjX2xlbmd0aDsJCSAKCWNoYXIgICAgKmxj
X2xvY2FsZV9uYW1lOwkgCgljaGFyIAkqZGVjaW1hbF9wb2ludDsKCWNoYXIgCSp0aG91c2FuZHNf
c2VwOwoJY2hhcgkqZ3JvdXBpbmc7Cn0gbnVtX3Q7CnR5cGVkZWYgc3RydWN0IGxjX21lc3NhZ2Vz
X3RhYmxlIHsKCXNob3J0CWxjX3ZlcnNpb247CglzaG9ydAlsY19sZW5ndGg7CQkgCgljaGFyICAg
ICpsY19sb2NhbGVfbmFtZTsJIAoJY2hhciAJKm1lc3NhZ2VzOwkJIAoJY2hhciAJKnllc19zdHJp
bmc7CQkgCgljaGFyIAkqbm9fc3RyaW5nOwkJIAp9IG1zZ190Owp0eXBlZGVmIHN0cnVjdCBsY190
aW1lX3RhYmxlIHsKCXNob3J0ICAgbGNfdmVyc2lvbjsKCXNob3J0CWxjX2xlbmd0aDsJICAKCWNo
YXIgICAgKmxjX2xvY2FsZV9uYW1lOyAgCgljaGFyICAgICp0X2ZtdDsgICAgICAgICAgCgljaGFy
ICAgICpkX2ZtdDsgICAgICAgICAgCgljaGFyICAgICpubGxkYXRlOyAgICAgICAgCgljaGFyICAg
ICpkX3RfZm10OyAgICAgICAgCgljaGFyICAgICphYmRheTsgICAgICAgICAgCgljaGFyICAgICpk
YXk7ICAgICAgICAgICAgCgljaGFyICAgICphYm1vbjsgICAgICAgICAgCgljaGFyICAgICptb247
ICAgICAgICAgICAgCgljaGFyICAgICptaXNjOyAgICAgICAgICAgCgljaGFyICAgICp0c3Ryczsg
ICAgICAgICAgCgljaGFyICAgICp0dW5pdHM7ICAgICAgICAgCgljaGFyCSp5ZWFyOwkJIAoJY2hh
ciAgICAqYW1fcG07ICAgICAgICAgIAp9IHRpbV90Owp0eXBlZGVmIHN0cnVjdCB3Y2hhcl9tYXBw
aW5nX3RhYmxlIHsgICAgICAgICAgICAgCglzaG9ydCAgICBsY192ZXJzaW9uOwoJc2hvcnQJIGxj
X2xlbmd0aDsJCQkgCgljaGFyICAgICAqbGNfaWRlbnRpZmllcjsKfSBtYXBfdDsKdHlwZWRlZiBz
dHJ1Y3QgbG9jYWxlaW5mb190YWJsZSB7ICAgICAgICAgICAKCWNoYXIgICAgIGxjX21hZzAsIGxj
X21hZzE7ICAgICAgIAoJc2hvcnQgICAgbGNfdmVyc2lvbjsgICAgICAgICAgICAgCglzaG9ydCAg
ICBsY19jb2RlX3R5cGU7ICAgICAgICAgICAgICAgICAKCXNob3J0CSBsY19sZW5ndGg7CQkgCglj
b2xfdCAgICAqbGNfY29sdGJsOwkJIAoJY3R5cGVfdCAgKmxjX2NocnRibDsJCSAKCW1vbl90ICAg
ICpsY19tb250Ymw7CQkgCgludW1fdCAgICAqbGNfbnVtdGJsOwkJIAoJdGltX3QgICAgKmxjX3Rp
bXRibDsJCSAKCW1zZ190ICAgICpsY19tc2d0Ymw7CQkgCgltYXBfdCAgICAqbGNfbWFwdGJsOwkJ
IAp9IGxvY190OwojIDI0ICIvdXNyL2luY2x1ZGUvc3lzL2xvY2FsZWRlZi5oIiAyIDMgNAp0eXBl
ZGVmIHN0cnVjdCB7CiAgICBfTENfY29yZV9jaGFybWFwX3QgY29yZTsKICAgIAogICAgY2hhciAg
ICAgKmNtX2NzbmFtZTsJIAogICAgCiAgICBzaXplX3QgICBjbV9tYl9jdXJfbWF4OyAgICAgIAog
ICAgc2l6ZV90ICAgY21fbWJfY3VyX21pbjsJIAogICAgdW5zaWduZWQgY2hhcgoJICAgICBjbV9t
YXhfZGlzcF93aWR0aDsgIAoJCQkJIAogICAgdW5zaWduZWQgCgljaGFyICpjbV9jc3RhYjsJCSAK
ICAgIAp9IF9MQ19jaGFybWFwX3Q7CnR5cGVkZWYgc3RydWN0IF9MQ19jaGFybWFwX29iamhkbCBf
TENfY2hhcm1hcF9vYmpoZGxfdDsKc3RydWN0IF9MQ19jaGFybWFwX29iamhkbCB7CglfTENfY2hh
cm1hcF90ICpvYmo7Cgl2b2lkICooKiptZXRoKSgpOwp9Owp0eXBlZGVmCXN0cnVjdCB7CiAgICBf
TENfY29yZV9tb25ldGFyeV90ICAgY29yZTsKICAgIAogICAgY2hhciAqaW50X2N1cnJfc3ltYm9s
OwkgICAgCiAgICBjaGFyICpjdXJyZW5jeV9zeW1ib2w7CSAgICAKICAgIGNoYXIgKm1vbl9kZWNp
bWFsX3BvaW50OwkgICAgCiAgICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsJICAgIAogICAgY2hh
ciAqbW9uX2dyb3VwaW5nOwkJICAgIAogICAgY2hhciAqcG9zaXRpdmVfc2lnbjsJICAgIAogICAg
Y2hhciAqbmVnYXRpdmVfc2lnbjsJICAgIAogICAgc2lnbmVkIGNoYXIgaW50X2ZyYWNfZGlnaXRz
OyAgICAKICAgIHNpZ25lZCBjaGFyIGZyYWNfZGlnaXRzOwkgICAgCiAgICBzaWduZWQgY2hhciBw
X2NzX3ByZWNlZGVzOwkgICAgCiAgICBzaWduZWQgY2hhciBwX3NlcF9ieV9zcGFjZTsJICAgIAog
ICAgc2lnbmVkIGNoYXIgbl9jc19wcmVjZWRlczsJICAgIAogICAgc2lnbmVkIGNoYXIgbl9zZXBf
Ynlfc3BhY2U7CSAgICAKICAgIHNpZ25lZCBjaGFyIHBfc2lnbl9wb3NuOwkgICAgCiAgICBzaWdu
ZWQgY2hhciBuX3NpZ25fcG9zbjsJICAgIAogICAgY2hhciAqZGViaXRfc2lnbjsJCSAgICAKICAg
IGNoYXIgKmNyZWRpdF9zaWduOwkJICAgIAogICAgY2hhciAqbGVmdF9wYXJlbnRoZXNpczsJICAg
IAogICAgY2hhciAqcmlnaHRfcGFyZW50aGVzaXM7CSAgICAKICAgIAp9IF9MQ19tb25ldGFyeV90
Owp0eXBlZGVmIHN0cnVjdCBfTENfbW9uZXRhcnlfb2JqaGRsIF9MQ19tb25ldGFyeV9vYmpoZGxf
dDsKc3RydWN0IF9MQ19tb25ldGFyeV9vYmpoZGwgewoJX0xDX21vbmV0YXJ5X3QgKm9iajsKCXZv
aWQgKigqKm1ldGgpKCk7Cn07CnR5cGVkZWYgc3RydWN0IHsKICAgIF9MQ19jb3JlX251bWVyaWNf
dCBjb3JlOwogICAgCiAgICBjaGFyICAgICAqZGVjaW1hbF9wb2ludDsKICAgIGNoYXIgICAgICp0
aG91c2FuZHNfc2VwOwogICAgdW5zaWduZWQKCWNoYXIgKmdyb3VwaW5nOwogICAgCn0gX0xDX251
bWVyaWNfdDsKdHlwZWRlZiBzdHJ1Y3QgX0xDX251bWVyaWNfb2JqaGRsIF9MQ19udW1lcmljX29i
amhkbF90OwpzdHJ1Y3QgX0xDX251bWVyaWNfb2JqaGRsIHsKCV9MQ19udW1lcmljX3QgKm9iajsK
CXZvaWQgKigqKm1ldGgpKCk7Cn07CnR5cGVkZWYgc3RydWN0ICB7CiAgICBfTENfY29yZV9yZXNw
X3QgY29yZTsKICAgIGNoYXIgICAgKnllc2V4cHI7CSAgICAgIAogICAgY2hhciAgICAqbm9leHBy
OwkgICAgICAKICAgIGNoYXIgICAgKnllc3N0cjsJICAgICAgCiAgICBjaGFyICAgICpub3N0cjsJ
ICAgICAgCn0gX0xDX3Jlc3BfdDsKdHlwZWRlZiBzdHJ1Y3QgX0xDX3Jlc3Bfb2JqaGRsIF9MQ19y
ZXNwX29iamhkbF90OwpzdHJ1Y3QgX0xDX3Jlc3Bfb2JqaGRsIHsKCV9MQ19yZXNwX3QgKm9iajsK
CXZvaWQgKigqKm1ldGgpKCk7Cn07CnR5cGVkZWYgc3RydWN0IHsKICAgIF9MQ19jb3JlX3RpbWVf
dCBjb3JlOwogICAgCiAgICBjaGFyICpkX2ZtdDsgIAogICAgY2hhciAqdF9mbXQ7ICAKICAgIGNo
YXIgKmRfdF9mbXQ7CiAgICBjaGFyICp0X2ZtdF9hbXBtOwogICAgY2hhciAqYWJkYXlbN107ICAK
ICAgIGNoYXIgKmRheVs3XTsgICAgCiAgICBjaGFyICphYm1vblsxMl07ICAKICAgIGNoYXIgKm1v
blsxMl07ICAgIAogICAgY2hhciAqYW1fcG1bMl07CiAgICBjaGFyICplcmE7CiAgICBjaGFyICpl
cmFfeWVhcjsKICAgIGNoYXIgKmVyYV9kX2ZtdDsKICAgIGNoYXIgKmFsdF9kaWdpdHM7CiAgICAK
fSBfTENfdGltZV90Owp0eXBlZGVmIHN0cnVjdCBfTENfdGltZV9vYmpoZGwgX0xDX3RpbWVfb2Jq
aGRsX3Q7CnN0cnVjdCBfTENfdGltZV9vYmpoZGwgewoJX0xDX3RpbWVfdCAqb2JqOwoJdm9pZCAq
KCoqbWV0aCkoKTsKfTsKdHlwZWRlZiB1bmlvbiB7CiAgICB1bnNpZ25lZAkJICAgICAgICAKCXNo
b3J0ICBuWzJdOwkgICAgICAgIAogICAgICAgICAgICAgCiAgICB1bnNpZ25lZAkJICAgICAgICAK
CXNob3J0ICAqcDsJICAgICAgICAKfSBfTENfd2VpZ2h0X3Q7ICAgIAogIAp0eXBlZGVmIHN0cnVj
dCB7CiAgICBjaGFyICAgICAgICAgKmNlX3N5bTsJIAogICAgX0xDX3dlaWdodF90IGNlX3dndDsJ
IAoJCQkJIAp9IF9MQ19jb2xsZWxfdDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX3dlaWdodF90
ICAgY3Rfd2d0OyAgICAgCgkJCSAgICAgICAKICAgIF9MQ19jb2xsZWxfdCAgICpjdF9jb2xsZWw7
IAp9IF9MQ19jb2x0YmxfdDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX3dlaWdodF90IHNzX2Fj
dDsJICAgICAgCgkJCQkgICAgICAKICAgIGNoYXIgKnNzX3NyYzsJCSAgICAgIAogICAgY2hhciAq
c3NfdGd0OwkJICAgICAgCn0gX0xDX3N1YnNfdDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX2Nv
cmVfY29sbGF0ZV90IGNvcmU7CiAgICAKICAgIHVuc2lnbmVkCQkJICAgICAgICAgICAgIAoJY2hh
ciAgICBjb19ub3JkOwkgICAgICAgICAgICAgCiAgICAKICAgIF9MQ193ZWlnaHRfdCBjb19zb3J0
OwkgICAgICAgICAgICAgCgkJCQkJICAgICAKICAgIAogICAgd2NoYXJfdCAgICAgY29fd2NfbWlu
OwkJICAgICAKICAgIHdjaGFyX3QgICAgIGNvX3djX21heDsJCSAgICAgCiAgICAKICAgIHdjaGFy
X3QgICAgIGNvX2NvbF9taW47CQkgICAgIAogICAgd2NoYXJfdCAgICAgY29fY29sX21heDsJCSAg
ICAgCiAgICAKICAgIF9MQ19jb2x0YmxfdCAqY29fY29sdGJsOwkJICAgICAKCQkJCSAgICAgICAg
ICAgICAKICAgIHVuc2lnbmVkCgljaGFyICAgIGNvX25zdWJzOwkJICAgICAKICAgIF9MQ19zdWJz
X3QgICpjb19zdWJzOwkJICAgICAKICAgIAp9IF9MQ19jb2xsYXRlX3Q7CnR5cGVkZWYgc3RydWN0
IF9MQ19jb2xsYXRlX29iamhkbCBfTENfY29sbGF0ZV9vYmpoZGxfdDsKc3RydWN0IF9MQ19jb2xs
YXRlX29iamhkbCB7CglfTENfY29sbGF0ZV90ICpvYmo7Cgl2b2lkICooKiptZXRoKSgpOwp9Owog
IAp0eXBlZGVmIHN0cnVjdCB7CiAgICBjaGFyICAgICpuYW1lOwogICAgdW5zaWduZWQKCWludCBt
YXNrOwp9IF9MQ19jbGFzc25tX3Q7CnR5cGVkZWYgc3RydWN0IHsKICBfTENfY29yZV9jdHlwZV90
IGNvcmU7CiAgIAogIHdjaGFyX3QgICAgICBtaW5fd2M7CiAgd2NoYXJfdCAgICAgIG1heF93YzsK
ICAgCiAgd2NoYXJfdCAgICAgICp1cHBlcjsKICB3Y2hhcl90ICAgICAgKmxvd2VyOwogIAogICAK
ICB1bnNpZ25lZAogICAgICBpbnQgICAgICAqbWFzazsgICAgICAgICAKICB1bnNpZ25lZAogICAg
ICBpbnQgICAgICAqcW1hc2s7CSAgICAgIAogIHVuc2lnbmVkCiAgICAgIGNoYXIgICAgICpxaWR4
OwkgICAgICAKICAgCiAgdW5zaWduZWQKICAgICAgY2hhciAgICAgbmNsYXNzZXM7CiBfTENfY2xh
c3NubV90ICpjbGFzc25tczsKICAKfSBfTENfY3R5cGVfdDsKdHlwZWRlZiBzdHJ1Y3QgX0xDX2N0
eXBlX29iamhkbCBfTENfY3R5cGVfb2JqaGRsX3Q7CnN0cnVjdCBfTENfY3R5cGVfb2JqaGRsIHsK
CV9MQ19jdHlwZV90ICpvYmo7Cgl2b2lkICooKiptZXRoKSgpOwp9Owp0eXBlZGVmIHN0cnVjdCB7
CiAgICBfTENfY29yZV9sb2NhbGVfdCBjb3JlOwogICAgCiAgICBjaGFyICAgICAgICAgICAqbmxf
aW5mb1s1NSBdOwogICAgc3RydWN0IGxjb252ICAgKm5sX2xjb252OwogICAgCiAgICBfTENfY2hh
cm1hcF9vYmpoZGxfdCAgbGNfY2hhcm1hcDsKICAgIF9MQ19jb2xsYXRlX29iamhkbF90ICBsY19j
b2xsYXRlOwogICAgX0xDX2N0eXBlX29iamhkbF90ICAgIGxjX2N0eXBlOwogICAgX0xDX21vbmV0
YXJ5X29iamhkbF90IGxjX21vbmV0YXJ5OwogICAgX0xDX251bWVyaWNfb2JqaGRsX3QgIGxjX251
bWVyaWM7CiAgICBfTENfcmVzcF9vYmpoZGxfdCAgICAgbGNfcmVzcDsKICAgIF9MQ190aW1lX29i
amhkbF90ICAgICBsY190aW1lOwogICAgCn0gX0xDX2xvY2FsZV90Owp0eXBlZGVmIHN0cnVjdCBf
TENfbG9jYWxlX29iamhkbCBfTENfbG9jYWxlX29iamhkbF90OwpzdHJ1Y3QgX0xDX2xvY2FsZV9v
YmpoZGwgewoJX0xDX2xvY2FsZV90ICpvYmo7Cgl2b2lkICooKiptZXRoKSgpOwp9Owp0eXBlZGVm
IHN0cnVjdCBfTENfb2JqZWN0X2hhbmRsZSBfTENfb2JqZWN0X2hhbmRsZV90OwpzdHJ1Y3QgX0xD
X29iamVjdF9oYW5kbGUgewogICAgdW5pb24gewoJX0xDX29iamVjdF90CSAgICAgIGxjX29iamVj
dDsKCV9MQ19sb2NhbGVfb2JqaGRsX3QgICBsY19sb2NhbGU7CiAgICAgICAgX0xDX2NoYXJtYXBf
b2JqaGRsX3QgIGxjX2NoYXJtYXA7CiAgICAgICAgX0xDX2NvbGxhdGVfb2JqaGRsX3QgIGxjX2Nv
bGxhdGU7CiAgICAgICAgX0xDX2N0eXBlX29iamhkbF90ICAgIGxjX2N0eXBlOwogICAgICAgIF9M
Q19tb25ldGFyeV9vYmpoZGxfdCBsY19tb25ldGFyeTsKICAgICAgICBfTENfbnVtZXJpY19vYmpo
ZGxfdCAgbGNfbnVtZXJpYzsKICAgICAgICBfTENfcmVzcF9vYmpoZGxfdCAgICAgbGNfcmVzcDsK
ICAgICAgICBfTENfdGltZV9vYmpoZGxfdCAgICAgbGNfdGltZTsKICAgIH0gb2JqOwogICAgdm9p
ZCAgICAqKCoqbWV0aCkoKTsKfTsKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX29iamVjdF90CWhk
cjsJCSAgIAogICAgX0xDX2xvY2FsZV9vYmpoZGxfdCBoYW5kbGU7CQkgICAKfSBfTENfbG9hZF9v
YmplY3RfdDsKZXh0ZXJuIF9MQ19jaGFybWFwX29iamhkbF90ICBfX2xjX2NoYXJtYXA7CmV4dGVy
biBfTENfY29sbGF0ZV9vYmpoZGxfdCAgX19sY19jb2xsYXRlOwpleHRlcm4gX0xDX2N0eXBlX29i
amhkbF90ICAgIF9fbGNfY3R5cGU7CmV4dGVybiBfTENfbW9uZXRhcnlfb2JqaGRsX3QgX19sY19t
b25ldGFyeTsKZXh0ZXJuIF9MQ19udW1lcmljX29iamhkbF90ICBfX2xjX251bWVyaWM7CmV4dGVy
biBfTENfcmVzcF9vYmpoZGxfdCAgICAgX19sY19yZXNwOwpleHRlcm4gX0xDX3RpbWVfb2JqaGRs
X3QgICAgIF9fbGNfdGltZTsKZXh0ZXJuIF9MQ19sb2NhbGVfb2JqaGRsX3QgICBfX2xjX2xvY2Fs
ZTsKIyAyMyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMyA0CiMgNTQgIi91c3IvaW5jbHVkZS9j
dHlwZS5oIiAzIDQKCSAgICBleHRlcm4gaW50CWlzYWxwaGEoaW50KTsKCSAgICBleHRlcm4gaW50
CWlzYWxudW0oaW50KTsKCSAgICBleHRlcm4gaW50CWlzY250cmwoaW50KTsKCSAgICBleHRlcm4g
aW50CWlzZGlnaXQoaW50KTsKCSAgICBleHRlcm4gaW50CWlzZ3JhcGgoaW50KTsKCSAgICBleHRl
cm4gaW50CWlzbG93ZXIoaW50KTsKCSAgICBleHRlcm4gaW50CWlzcHJpbnQoaW50KTsKCSAgICBl
eHRlcm4gaW50CWlzcHVuY3QoaW50KTsKCSAgICBleHRlcm4gaW50CWlzc3BhY2UoaW50KTsKCSAg
ICBleHRlcm4gaW50CWlzdXBwZXIoaW50KTsKCSAgICBleHRlcm4gaW50CWlzeGRpZ2l0KGludCk7
CgkgICAgZXh0ZXJuIGludAl0b3VwcGVyKGludCk7CgkgICAgZXh0ZXJuIGludAl0b2xvd2VyKGlu
dCk7CiMgMTA3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CgkgICAgZXh0ZXJuIGludAlpc2Fz
Y2lpKGludCk7CgkgICAgZXh0ZXJuIGludAlpc3dhbHBoYSh3aW50X3QpOwoJICAgIGV4dGVybiBp
bnQJaXN3YWxudW0od2ludF90KTsKCSAgICBleHRlcm4gaW50CWlzd2NudHJsKHdpbnRfdCk7Cgkg
ICAgZXh0ZXJuIGludAlpc3dkaWdpdCh3aW50X3QpOwoJICAgIGV4dGVybiBpbnQJaXN3Z3JhcGgo
d2ludF90KTsKCSAgICBleHRlcm4gaW50CWlzd2xvd2VyKHdpbnRfdCk7CgkgICAgZXh0ZXJuIGlu
dAlpc3dwcmludCh3aW50X3QpOwoJICAgIGV4dGVybiBpbnQJaXN3cHVuY3Qod2ludF90KTsKCSAg
ICBleHRlcm4gaW50CWlzd3NwYWNlKHdpbnRfdCk7CgkgICAgZXh0ZXJuIGludAlpc3d1cHBlcih3
aW50X3QpOwoJICAgIGV4dGVybiBpbnQJaXN3eGRpZ2l0KHdpbnRfdCk7CgkgICAgZXh0ZXJuIHdp
bnRfdAl0b3d1cHBlcih3aW50X3QpOwoJICAgIGV4dGVybiB3aW50X3QJdG93bG93ZXIod2ludF90
KTsKCSAgICBleHRlcm4gaW50CWlzX3djdHlwZSh3aW50X3QsIHdjdHlwZV90KTsKCSAgICBleHRl
cm4gaW50CWlzX2N0eXBlKGludCwgd2N0eXBlX3QpOwoJICAgIGV4dGVybiBpbnQJdG9hc2NpaShp
bnQpOwoJICAgIGV4dGVybiB3Y3R5cGVfdAlnZXRfd2N0eXBlKGNoYXIgKik7CiMgMTc2ICIvdXNy
L2luY2x1ZGUvY3R5cGUuaCIgMyA0CiMgNiAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2Nj
LWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst
My9jY3R5cGUiIDIgMwojIDEwNSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9w
b3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQv
c3RyYWl0cy5oIiAyIDMKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bv
d2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NzdHJp
bmciIDEgMwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1p
Ym0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RyaW5nLmgiIDEgMyA0CiMgMTkgIi9hb2xuZXQv
cGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2lu
Y2x1ZGUvc3RyaW5nLmgiIDMgNAojIDc2ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2Mt
bGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0cmluZy5oIiAzIDQKICAg
ICAgICBleHRlcm4gdm9pZCAgICAgKm1lbWNocihjb25zdCB2b2lkICosIGludCwgc2l6ZV90KTsK
ICAgICAgICBleHRlcm4gdm9pZCAgICAgKm1lbWNweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6
ZV90KTsKICAgICAgICBleHRlcm4gdm9pZCAgICAgKm1lbXNldCh2b2lkICosIGludCwgc2l6ZV90
KTsKICAgICAgICBleHRlcm4gc2l6ZV90ICAgc3RyY3Nwbihjb25zdCBjaGFyICosIGNvbnN0IGNo
YXIgKik7CiAgICAgICAgZXh0ZXJuIHNpemVfdCAgIHN0cmxlbihjb25zdCBjaGFyICopOwogICAg
ICAgIGV4dGVybiBzaXplX3QgICBzdHJzcG4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwoj
IDEwOCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz
LjIuNS8yLjk1LjMvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CiAgICAgICAgZXh0ZXJuIHZvaWQgICAg
ICptZW1tb3ZlKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwogICAgICAgIGV4dGVybiBj
aGFyICAgICAqc3RyY3B5KGNoYXIgKiwgY29uc3QgY2hhciAqKTsKICAgICAgICBleHRlcm4gY2hh
ciAgICAgKnN0cm5jcHkoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiAgICAgICAgZXh0
ZXJuIGNoYXIgICAgICpzdHJjYXQoY2hhciAqLCBjb25zdCBjaGFyICopOwogICAgICAgIGV4dGVy
biBjaGFyICAgICAqc3RybmNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKICAgICAg
ICBleHRlcm4gaW50ICAgICAgbWVtY21wKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLHNpemVf
dCk7CiAgICAgICAgZXh0ZXJuIGludCAgICAgIHN0cmNtcChjb25zdCBjaGFyICosIGNvbnN0IGNo
YXIgKik7CiAgICAgICAgZXh0ZXJuIGludCAgICAgIHN0cm5jbXAoY29uc3QgY2hhciAqLGNvbnN0
IGNoYXIgKixzaXplX3QpOwogICAgICAgIGV4dGVybiBpbnQgICAgICBzdHJuY29sbGVuKGNvbnN0
IGNoYXIgKiwgY29uc3QgaW50ICk7CiAgICAgICAgZXh0ZXJuIGNoYXIgICAgICpzdHJjaHIoY29u
c3QgY2hhciAqLCBpbnQpOwogICAgICAgIGV4dGVybiBjaGFyICAgICAqc3RycGJyayhjb25zdCBj
aGFyICosIGNvbnN0IGNoYXIgKik7CiAgICAgICAgZXh0ZXJuIGNoYXIgICAgICpzdHJyY2hyKGNv
bnN0IGNoYXIgKiwgaW50KTsKICAgICAgICBleHRlcm4gY2hhciAgICAgKnN0cnN0cihjb25zdCBj
aGFyICosIGNvbnN0IGNoYXIgKik7CiAgICAgICAgZXh0ZXJuIGNoYXIgICAgICpzdHJ0b2soY2hh
ciAqLCBjb25zdCBjaGFyICopOwogICAgICAgIGV4dGVybiBjaGFyICAgICAqc3RyZXJyb3IoaW50
KTsKICAgICAgICBleHRlcm4gaW50ICAgICAgc3RyY29sbChjb25zdCBjaGFyICosIGNvbnN0IGNo
YXIgKik7CiAgICAgICAgZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtKGNoYXIgKiwgY29uc3QgY2hhciAq
LCBzaXplX3QpOwogICAgICAgIGV4dGVybiB2b2lkICAgICAqbWVtY2NweSh2b2lkICosIGNvbnN0
IHZvaWQgKiwgaW50LCBzaXplX3QpOwojIDE3MyAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIv
Z2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zdHJpbmcuaCIgMyA0
CiAgICAgICAgZXh0ZXJuIGNoYXIgICAgICppbmRleChjb25zdCBjaGFyICosIGludCk7CiAgICAg
ICAgZXh0ZXJuIGNoYXIgICAgICpyaW5kZXgoY29uc3QgY2hhciAqLCBpbnQpOwogICAgICAgIGV4
dGVybiBjaGFyICAgICAqc3RyZHVwKGNoYXIgKik7CiAgICAgICAgZXh0ZXJuIHZvaWQgICAgIHN3
YWIoY29uc3Qgdm9pZCAqLCB2b2lkICosIHNzaXplX3QpOyAKICAgICAgICBleHRlcm4gd2NoYXJf
dCAgKndjc2NhdCh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CiAgICAgICAgZXh0ZXJuIHdj
aGFyX3QgICp3Y3NjaHIoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90KTsKICAgICAgICBleHRlcm4g
aW50ICAgICAgd2NzY21wKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKICAgICAg
ICBleHRlcm4gd2NoYXJfdCAgKndjc2NweSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CiAg
ICAgICAgZXh0ZXJuIHNpemVfdCAgIHdjc2NzcG4oY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hh
cl90ICopOwogICAgICAgIGV4dGVybiBzaXplX3QgICB3Y3NsZW4oY29uc3Qgd2NoYXJfdCAqKTsK
ICAgICAgICBleHRlcm4gd2NoYXJfdCAgKndjc25jYXQod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90
ICosIHNpemVfdCk7CiAgICAgICAgZXh0ZXJuIGludCAgICAgIHdjc25jbXAoY29uc3Qgd2NoYXJf
dCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CiAgICAgICAgZXh0ZXJuIHdjaGFyX3QgICp3
Y3NuY3B5KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwogICAgICAgIGV4dGVy
biB3Y2hhcl90ICAqd2NzcGJyayhjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CiAg
ICAgICAgZXh0ZXJuIHdjaGFyX3QgICp3Y3NyY2hyKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCk7
CiAgICAgICAgZXh0ZXJuIHNpemVfdCAgIHdjc3Nwbihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdj
aGFyX3QgKik7CiAgICAgICAgZXh0ZXJuIHdjaGFyX3QgICp3Y3N0b2sod2NoYXJfdCAqLCBjb25z
dCB3Y2hhcl90ICopOwogICAgICAgIGV4dGVybiB3Y2hhcl90ICAqd2Nzd2NzKGNvbnN0IHdjaGFy
X3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKICAgICAgICBleHRlcm4gaW50ICAgICAgd2Nzd2lkdGgo
Y29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwogICAgICAgIGV4dGVybiBpbnQgICAgICB3Y3dpZHRo
KGNvbnN0IHdjaGFyX3QpOwogICAgICAgIGV4dGVybiBpbnQgICAgICB3Y3Njb2xsKGNvbnN0IHdj
aGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKICAgICAgICBleHRlcm4gc2l6ZV90IHdjc3hmcm0o
d2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CiMgMjQxICIvYW9sbmV0L3BrZy9n
Y2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRl
L3N0cmluZy5oIiAzIDQKIyA3ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bv
d2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NzdHJp
bmciIDIgMwojIDk0ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMt
aWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NzdHJpbmciIDMK
IyAxMDYgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4
My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIgMiAz
CnN0cnVjdCBzdHJpbmdfY2hhcl90cmFpdHMgPGNoYXI+IHsKICB0eXBlZGVmIGNoYXIgY2hhcl90
eXBlOwogIHN0YXRpYyB2b2lkIGFzc2lnbiAoY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBl
JiBjMikKICAgIHsgYzEgPSBjMjsgfQogIHN0YXRpYyBib29sIGVxIChjb25zdCBjaGFyX3R5cGUg
JiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSA9PSBjMik7IH0KICBz
dGF0aWMgYm9vbCBuZSAoY29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikK
ICAgIHsgcmV0dXJuIChjMSAhPSBjMik7IH0KICBzdGF0aWMgYm9vbCBsdCAoY29uc3QgY2hhcl90
eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSA8IGMyKTsgfQog
IHN0YXRpYyBjaGFyX3R5cGUgZW9zICgpIHsgcmV0dXJuIDA7IH0KICBzdGF0aWMgYm9vbCBpc19k
ZWwoY2hhcl90eXBlIGEpIHsgcmV0dXJuIGlzc3BhY2UoYSk7IH0KICBzdGF0aWMgaW50IGNvbXBh
cmUgKGNvbnN0IGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQog
ICAgeyByZXR1cm4gbWVtY21wIChzMSwgczIsIG4pOyB9CiAgc3RhdGljIHNpemVfdCBsZW5ndGgg
KGNvbnN0IGNoYXJfdHlwZSogcykKICAgIHsgcmV0dXJuIHN0cmxlbiAocyk7IH0KICBzdGF0aWMg
Y2hhcl90eXBlKiBjb3B5IChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXpl
X3QgbikKICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1jcHkgKHMxLCBzMiwgbik7IH0KICBz
dGF0aWMgY2hhcl90eXBlKiBtb3ZlIChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMy
LCBzaXplX3QgbikKICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1tb3ZlIChzMSwgczIsIG4p
OyB9CiAgc3RhdGljIGNoYXJfdHlwZSogc2V0IChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5
cGUmIGMsIHNpemVfdCBuKQogICAgeyByZXR1cm4gKGNoYXJfdHlwZSopIG1lbXNldCAoczEsIGMs
IG4pOyB9Cn07CiMgMTU5ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2Vy
cGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9zdHJh
aXRzLmgiIDMKfSAgCiMgMzYgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93
ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jh
c3RyaW5nLmgiIDIgMwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93
ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxsb2Mu
aCIgMSAzCiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWli
bS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgi
IDEgMwojIDE0OCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWli
bS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgi
IDMKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFp
eDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9wb3dlcnBjLWlibS1haXgzLjIuNS9pbmNsdWRlL19H
X2NvbmZpZy5oIiAxIDMgNAogIAp0eXBlZGVmICAgICAgICAgIGludCAgIF9HX2ludDhfdCBfX2F0
dHJpYnV0ZV9fKChfX21vZGVfXyhfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50ICBfR191
aW50OF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fUUlfXykpKTsKdHlwZWRlZiAgICAgICAg
ICBpbnQgIF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19ISV9fKSkpOwp0eXBl
ZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0hJ
X18pKSk7CnR5cGVkZWYgICAgICAgICAgaW50ICBfR19pbnQzMl90IF9fYXR0cmlidXRlX18oKF9f
bW9kZV9fKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRy
aWJ1dGVfXygoX19tb2RlX18oX19TSV9fKSkpOwp0eXBlZGVmICAgICAgICAgIGludCAgX0dfaW50
NjRfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0RJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQg
aW50IF9HX3VpbnQ2NF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fRElfXykpKTsKX19leHRl
bnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBfR19sbG9uZzsKX19leHRlbnNpb25fXyB0eXBlZGVm
IHVuc2lnbmVkIGxvbmcgbG9uZyBfR191bGxvbmc7CnR5cGVkZWYgaW50IF9HX2Nsb2NrX3Q7CnR5
cGVkZWYgdW5zaWduZWQgbG9uZyBfR19kZXZfdDsKdHlwZWRlZiBsb25nIF9HX2Zwb3NfdDsKdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIF9HX2dpZF90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX0dfaW5v
X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfR19tb2RlX3Q7CnR5cGVkZWYgc2hvcnQgX0dfbmxp
bmtfdDsKdHlwZWRlZiBsb25nIF9HX29mZl90Owp0eXBlZGVmIGludCBfR19waWRfdDsKdHlwZWRl
ZiBpbnQgX0dfcHRyZGlmZl90Owp0eXBlZGVmIGludCAgIF9HX3NpZ3NldF90Owp0eXBlZGVmIGxv
bmcgdW5zaWduZWQgaW50IF9HX3NpemVfdDsKdHlwZWRlZiBsb25nIF9HX3RpbWVfdDsKdHlwZWRl
ZiB1bnNpZ25lZCBsb25nIF9HX3VpZF90Owp0eXBlZGVmIHNob3J0IHVuc2lnbmVkIGludCBfR193
Y2hhcl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX0dfc3NpemVfdDsKdHlwZWRlZiBpbnQgX0dfd2lu
dF90Owp0eXBlZGVmIGNoYXIgKiBfR192YV9saXN0OwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1
LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkZGVm
LmgiIDEgMyA0CiMgMTkgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJw
Yy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAojIDYxICIvYW9sbmV0
L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9p
bmNsdWRlL3N0ZGRlZi5oIiAzIDQKIyAxMjYgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2dj
Yy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoj
IDE4OCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz
LjIuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CiMgMjY5ICIvYW9sbmV0L3BrZy9nY2Mt
Mi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0
ZGRlZi5oIiAzIDQKIyAzMTcgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93
ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAojIDg2ICIvYW9s
bmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUu
My8uLi8uLi8uLi8uLi9wb3dlcnBjLWlibS1haXgzLjIuNS9pbmNsdWRlL19HX2NvbmZpZy5oIiAy
IDMgNAojIDE1MSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWli
bS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgi
IDIgMwojIDE3OCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWli
bS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgi
IDMKIyAyMzQgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0t
YWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2NvbmZpZy5oIiAz
CiMgMjQ4ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFp
eDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMwoj
IDMxNiAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz
LjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgiIDMKIyAx
OCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIu
NS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9hbGxvYy5oIiAyIDMKIyAxICIvYW9s
bmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUu
My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAxIDMKIyAxICIvYW9sbmV0
L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDEgMwojcHJhZ21hIGludGVyZmFj
ZQojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4
My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDEgMwoj
cHJhZ21hIGludGVyZmFjZQogICAKZXh0ZXJuICJDIiB7CiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIu
OTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9saWJpby5oIiAxIDMKIyA1NSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9s
aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9saWJpby5oIiAzCiMgMTA0ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2Mt
bGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L2xpYmlvLmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7ICBzdHJ1Y3QgX0lPX0ZJTEU7CiMgMTc1ICIv
YW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIu
OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2xpYmlvLmgiIDMKICAgIHR5cGVkZWYgdm9p
ZCBfSU9fbG9ja190OwpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9u
ZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CiAgIAogICAKICBpbnQgX3BvczsKIyAyMDgg
Ii9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUv
Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMwp9OwpzdHJ1Y3QgX0lP
X0ZJTEUgewogIGludCBfZmxhZ3M7CQkgCiAgIAogICAKICBjaGFyKiBfSU9fcmVhZF9wdHI7CSAK
ICBjaGFyKiBfSU9fcmVhZF9lbmQ7CSAKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwkgCiAgY2hhciog
X0lPX3dyaXRlX2Jhc2U7CSAKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwkgCiAgY2hhciogX0lPX3dy
aXRlX2VuZDsJIAogIGNoYXIqIF9JT19idWZfYmFzZTsJIAogIGNoYXIqIF9JT19idWZfZW5kOwkg
CiAgIAogIGNoYXIgKl9JT19zYXZlX2Jhc2U7ICAKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7ICAg
CiAgY2hhciAqX0lPX3NhdmVfZW5kOyAgCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwog
IHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsK
ICBfR19vZmZfdCAgX29mZnNldDsKICAgCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAg
Y2hhciBfdW51c2VkOwogIGNoYXIgX3Nob3J0YnVmWzFdOwogICAKfTsKc3RydWN0IF9JT19GSUxF
X3BsdXM7CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fc3RkaW5fLCBfSU9fc3Rkb3V0
XywgX0lPX3N0ZGVycl87CnR5cGVkZWYgc3RydWN0CnsKICBfR19zc2l6ZV90ICAoKnJlYWQpICAo
c3RydWN0IF9JT19GSUxFICosIHZvaWQgKiwgX0dfc3NpemVfdCApICA7CiAgX0dfc3NpemVfdCAg
KCp3cml0ZSkgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgY29uc3Qgdm9pZCAqLCBfR19zc2l6ZV90ICkg
IDsKICBfR19vZmZfdCAgKCpzZWVrKSAgKHN0cnVjdCBfSU9fRklMRSAqLCBfR19vZmZfdCAsIGlu
dCkgIDsKICBpbnQgKCpjbG9zZSkgIChzdHJ1Y3QgX0lPX0ZJTEUgKikgIDsKfSBfSU9fY29va2ll
X2lvX2Z1bmN0aW9uc190OwpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlCnsKICBzdHJ1Y3QgX0lPX0ZJ
TEUgZmlsZTsKICBjb25zdCB2b2lkICp2dGFibGU7CiAgdm9pZCAqY29va2llOwogIF9JT19jb29r
aWVfaW9fZnVuY3Rpb25zX3QgaW9fZnVuY3Rpb25zOwp9OwpleHRlcm4gIkMiIHsKZXh0ZXJuIGlu
dCBfX3VuZGVyZmxvdyAgKF9JT19GSUxFICopICA7CmV4dGVybiBpbnQgX191ZmxvdyAgKF9JT19G
SUxFICopICA7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAgKF9JT19GSUxFICosIGludCkgIDsKZXh0
ZXJuIGludCBfSU9fZ2V0YyAgKF9JT19GSUxFICpfX2ZwKSAgOwpleHRlcm4gaW50IF9JT19wdXRj
ICAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApICA7CmV4dGVybiBpbnQgX0lPX2Zlb2YgIChfSU9f
RklMRSAqX19mcCkgIDsKZXh0ZXJuIGludCBfSU9fZmVycm9yICAoX0lPX0ZJTEUgKl9fZnApICA7
CmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tlZCAgKF9JT19GSUxFICpfX2ZwKSAgOwpleHRlcm4g
dm9pZCBfSU9fZmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxv
Y2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlICAoX0lP
X0ZJTEUgKikgIDsKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAgKF9JT19GSUxFICosIGNvbnN0IGNo
YXIgKiwgX0dfdmFfbGlzdCAsIGludCAqKSAgOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAgKF9J
T19GSUxFICosIGNvbnN0IGNoYXIgKiwgX0dfdmFfbGlzdCApICA7CmV4dGVybiBfR19zc2l6ZV90
ICBfSU9fcGFkbiAgKF9JT19GSUxFICosIGludCwgX0dfc3NpemVfdCApICA7CmV4dGVybiBfR19z
aXplX3QgIF9JT19zZ2V0biAgKF9JT19GSUxFICosIHZvaWQgKiwgX0dfc2l6ZV90ICkgIDsKZXh0
ZXJuIF9HX29mZl90ICBfSU9fc2Vla29mZiAgKF9JT19GSUxFICosIF9HX29mZl90ICwgaW50LCBp
bnQpICA7CmV4dGVybiBfR19vZmZfdCAgX0lPX3NlZWtwb3MgIChfSU9fRklMRSAqLCBfR19vZmZf
dCAsIGludCkgIDsKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgIChfSU9fRklMRSAq
KSAgOwp9CiMgMzYgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1p
Ym0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgi
IDIgMwp9CmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJlYW07ICAKY2xhc3Mgb3N0cmVhbTsgY2xh
c3Mgc3RyZWFtYnVmOwp0eXBlZGVmIF9HX29mZl90ICBzdHJlYW1vZmY7CnR5cGVkZWYgX0dfb2Zm
X3QgIHN0cmVhbXBvczsKdHlwZWRlZiBfR19zc2l6ZV90ICBzdHJlYW1zaXplOwp0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgX19mbXRmbGFnczsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9faW9zdGF0ZTsK
c3RydWN0IF9pb3NfZmllbGRzCnsgIAogICAgc3RyZWFtYnVmICpfc3RyYnVmOwogICAgb3N0cmVh
bSogX3RpZTsKICAgIGludCBfd2lkdGg7CiAgICBfX2ZtdGZsYWdzIF9mbGFnczsKICAgIHNob3J0
ICBfZmlsbDsKICAgIF9faW9zdGF0ZSBfc3RhdGU7CiAgICBfX2lvc3RhdGUgX2V4Y2VwdGlvbnM7
CiAgICBpbnQgX3ByZWNpc2lvbjsKICAgIHZvaWQgKl9hcnJheXM7ICAKfTsKIyAxMjQgIi9hb2xu
ZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4z
Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKY2xhc3MgaW9zIDogcHVi
bGljIF9pb3NfZmllbGRzIHsKICBpb3MmIG9wZXJhdG9yPShpb3MmKTsgICAKICBpb3MgKGNvbnN0
IGlvcyYpOyAgCiAgcHVibGljOgogICAgdHlwZWRlZiBfX2ZtdGZsYWdzIGZtdGZsYWdzOwogICAg
dHlwZWRlZiBpbnQgaW9zdGF0ZTsKICAgIHR5cGVkZWYgaW50IG9wZW5tb2RlOwogICAgdHlwZWRl
ZiBfR19zc2l6ZV90ICBzdHJlYW1zaXplOwogICAgZW51bSBpb19zdGF0ZSB7Cglnb29kYml0ID0g
MCAsCgllb2ZiaXQgPSAxICwKCWZhaWxiaXQgPSAyICwKCWJhZGJpdCA9IDQgIH07CiAgICBlbnVt
IG9wZW5fbW9kZSB7CglpbiA9IDEgLAoJb3V0ID0gMiAsCglhdGUgPSA0ICwKCWFwcCA9IDggLAoJ
dHJ1bmMgPSAxNiAsCglub2NyZWF0ZSA9IDMyICwKCW5vcmVwbGFjZSA9IDY0ICwKCWJpbiA9IDEy
OCAsICAKCWJpbmFyeSA9IDEyOCAgfTsKICAgIGVudW0gc2Vla19kaXIgeyBiZWcsIGN1ciwgZW5k
fTsKICAgIHR5cGVkZWYgZW51bSBzZWVrX2RpciBzZWVrZGlyOwogICAgIAogICAgZW51bSB7IHNr
aXB3cz0gMDEgLAoJICAgbGVmdD0gMDIgLCByaWdodD0gMDQgLCBpbnRlcm5hbD0gMDEwICwKCSAg
IGRlYz0gMDIwICwgb2N0PSAwNDAgLCBoZXg9IDAxMDAgLAoJICAgc2hvd2Jhc2U9IDAyMDAgLCBz
aG93cG9pbnQ9IDA0MDAgLAoJICAgdXBwZXJjYXNlPSAwMTAwMCAsIHNob3dwb3M9IDAyMDAwICwK
CSAgIHNjaWVudGlmaWM9IDA0MDAwICwgZml4ZWQ9IDAxMDAwMCAsCgkgICB1bml0YnVmPSAwMjAw
MDAgLCBzdGRpbz0gMDQwMDAwIAoJICAgfTsKICAgIGVudW0geyAgCgliYXNlZmllbGQ9ZGVjK29j
dCtoZXgsCglmbG9hdGZpZWxkID0gc2NpZW50aWZpYytmaXhlZCwKCWFkanVzdGZpZWxkID0gbGVm
dCtyaWdodCtpbnRlcm5hbAogICAgfTsKIyAxNzcgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGli
L2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv
ZysrLTMvc3RyZWFtYnVmLmgiIDMKICAgIG9zdHJlYW0qIHRpZSgpIGNvbnN0IHsgcmV0dXJuIF90
aWU7IH0KICAgIG9zdHJlYW0qIHRpZShvc3RyZWFtKiB2YWwpIHsgb3N0cmVhbSogc2F2ZT1fdGll
OyBfdGllPXZhbDsgcmV0dXJuIHNhdmU7IH0KICAgICAKICAgIHNob3J0ICBmaWxsKCkgY29uc3Qg
eyByZXR1cm4gX2ZpbGw7IH0KICAgIHNob3J0ICBmaWxsKHNob3J0ICBuZXdmKQoJe3Nob3J0ICBv
bGRmID0gX2ZpbGw7IF9maWxsID0gbmV3ZjsgcmV0dXJuIG9sZGY7fQogICAgZm10ZmxhZ3MgZmxh
Z3MoKSBjb25zdCB7IHJldHVybiBfZmxhZ3M7IH0KICAgIGZtdGZsYWdzIGZsYWdzKGZtdGZsYWdz
IG5ld192YWwpIHsKCWZtdGZsYWdzIG9sZF92YWwgPSBfZmxhZ3M7IF9mbGFncyA9IG5ld192YWw7
IHJldHVybiBvbGRfdmFsOyB9CiAgICBpbnQgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX3By
ZWNpc2lvbjsgfQogICAgaW50IHByZWNpc2lvbihpbnQgbmV3cCkgewoJdW5zaWduZWQgc2hvcnQg
b2xkcCA9IF9wcmVjaXNpb247IF9wcmVjaXNpb24gPSAodW5zaWduZWQgc2hvcnQpbmV3cDsKCXJl
dHVybiBvbGRwOyB9CiAgICBmbXRmbGFncyBzZXRmKGZtdGZsYWdzIHZhbCkgewoJZm10ZmxhZ3Mg
b2xkYml0cyA9IF9mbGFnczsKCV9mbGFncyB8PSB2YWw7IHJldHVybiBvbGRiaXRzOyB9CiAgICBm
bXRmbGFncyBzZXRmKGZtdGZsYWdzIHZhbCwgZm10ZmxhZ3MgbWFzaykgewoJZm10ZmxhZ3Mgb2xk
Yml0cyA9IF9mbGFnczsKCV9mbGFncyA9IChfZmxhZ3MgJiB+bWFzaykgfCAodmFsICYgbWFzayk7
IHJldHVybiBvbGRiaXRzOyB9CiAgICBmbXRmbGFncyB1bnNldGYoZm10ZmxhZ3MgbWFzaykgewoJ
Zm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsKCV9mbGFncyAmPSB+bWFzazsgcmV0dXJuIG9sZGJp
dHM7IH0KICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF93aWR0aDsgfQogICAgaW50IHdp
ZHRoKGludCB2YWwpIHsgaW50IHNhdmUgPSBfd2lkdGg7IF93aWR0aCA9IHZhbDsgcmV0dXJuIHNh
dmU7IH0KICAgIHZvaWQgX3Rocm93X2ZhaWx1cmUoKSBjb25zdCB7IH0KICAgIHZvaWQgY2xlYXIo
aW9zdGF0ZSBzdGF0ZSA9IDApIHsKCV9zdGF0ZSA9IF9zdHJidWYgPyBzdGF0ZSA6IHN0YXRlfGJh
ZGJpdDsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAg
dm9pZCBzZXQoaW9zdGF0ZSBmbGFnKSB7IF9zdGF0ZSB8PSBmbGFnOwoJaWYgKF9zdGF0ZSAmIF9l
eGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICB2b2lkIHNldHN0YXRlKGlvc3RhdGUg
ZmxhZykgeyBfc3RhdGUgfD0gZmxhZzsgIAoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhy
b3dfZmFpbHVyZSgpOyB9CiAgICBpbnQgZ29vZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSA9PSAw
OyB9CiAgICBpbnQgZW9mKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjplb2ZiaXQ7IH0K
ICAgIGludCBmYWlsKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgKGlvczo6YmFkYml0fGlvczo6
ZmFpbGJpdCk7IH0KICAgIGludCBiYWQoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmJh
ZGJpdDsgfQogICAgaW9zdGF0ZSByZHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlOyB9CiAg
ICBvcGVyYXRvciB2b2lkKigpIGNvbnN0IHsgcmV0dXJuIGZhaWwoKSA/ICh2b2lkKikwIDogKHZv
aWQqKSgtMSk7IH0KICAgIGludCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBmYWlsKCk7IH0K
ICAgIGlvc3RhdGUgZXhjZXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIF9leGNlcHRpb25zOyB9CiAg
ICB2b2lkIGV4Y2VwdGlvbnMoaW9zdGF0ZSBlbmFibGUpIHsKCV9leGNlcHRpb25zID0gZW5hYmxl
OwoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICBzdHJl
YW1idWYqIHJkYnVmKCkgY29uc3QgeyByZXR1cm4gX3N0cmJ1ZjsgfQogICAgc3RyZWFtYnVmKiBy
ZGJ1ZihzdHJlYW1idWYgKl9zKSB7CiAgICAgIHN0cmVhbWJ1ZiAqX29sZCA9IF9zdHJidWY7IF9z
dHJidWYgPSBfczsgY2xlYXIgKCk7IHJldHVybiBfb2xkOyB9CiAgICBzdGF0aWMgaW50IHN5bmNf
d2l0aF9zdGRpbyhpbnQgb24pOwogICAgc3RhdGljIHZvaWQgc3luY193aXRoX3N0ZGlvKCkgeyBz
eW5jX3dpdGhfc3RkaW8oMSk7IH0KICAgIHN0YXRpYyBmbXRmbGFncyBiaXRhbGxvYygpOwogICAg
c3RhdGljIGludCB4YWxsb2MoKTsKICAgIHZvaWQqJiBwd29yZChpbnQpOwogICAgdm9pZCogcHdv
cmQoaW50KSBjb25zdDsKICAgIGxvbmcmIGl3b3JkKGludCk7CiAgICBsb25nIGl3b3JkKGludCkg
Y29uc3Q7CiAgICAgCiAgICBjbGFzcyBJbml0IHsKICAgIHB1YmxpYzoKICAgICAgSW5pdCAoKSB7
IH0KICAgIH07CiAgcHJvdGVjdGVkOgogICAgaW5saW5lIGlvcyhzdHJlYW1idWYqIHNiID0gMCwg
b3N0cmVhbSogdGllX3RvID0gMCk7CiAgICBpbmxpbmUgdmlydHVhbCB+aW9zKCk7CiAgICBpbmxp
bmUgdm9pZCBpbml0KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZSA9IDApOwp9Owp0eXBlZGVm
IGlvczo6c2Vla19kaXIgX3NlZWtfZGlyOwpjbGFzcyBzdHJlYW1tYXJrZXIgOiBwcml2YXRlIF9J
T19tYXJrZXIgewogICAgZnJpZW5kIGNsYXNzIHN0cmVhbWJ1ZjsKICAgIHZvaWQgc2V0X29mZnNl
dChpbnQgb2Zmc2V0KSB7IF9wb3MgPSBvZmZzZXQ7IH0KICBwdWJsaWM6CiAgICBzdHJlYW1tYXJr
ZXIoc3RyZWFtYnVmICpzYik7CiAgICB+c3RyZWFtbWFya2VyKCk7CiAgICBpbnQgc2F2aW5nKCkg
eyByZXR1cm4gIDE7IH0KICAgIGludCBkZWx0YShzdHJlYW1tYXJrZXImKTsKICAgIGludCBkZWx0
YSgpOwp9OwpzdHJ1Y3Qgc3RyZWFtYnVmIDogcHVibGljIF9JT19GSUxFIHsgIAogICAgZnJpZW5k
IGNsYXNzIGlvczsKICAgIGZyaWVuZCBjbGFzcyBpc3RyZWFtOwogICAgZnJpZW5kIGNsYXNzIG9z
dHJlYW07CiAgICBmcmllbmQgY2xhc3Mgc3RyZWFtbWFya2VyOwogICAgY29uc3Qgdm9pZCAqJl92
dGFibGUoKSB7IHJldHVybiAqKGNvbnN0IHZvaWQqKikoKF9JT19GSUxFKil0aGlzICsgMSk7IH0K
ICBwcm90ZWN0ZWQ6CiAgICBzdGF0aWMgc3RyZWFtYnVmKiBfbGlzdF9hbGw7ICAKICAgIF9JT19G
SUxFKiYgeGNoYWluKCkgeyByZXR1cm4gX2NoYWluOyB9CiAgICB2b2lkIF91bl9saW5rKCk7CiAg
ICB2b2lkIF9saW5rX2luKCk7CiAgICBjaGFyKiBncHRyKCkgY29uc3QKICAgICAgeyByZXR1cm4g
X2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9wdHI7IH0KICAgIGNo
YXIqIHBwdHIoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfcHRyOyB9CiAgICBjaGFyKiBlZ3B0
cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9lbmQg
OiBfSU9fcmVhZF9lbmQ7IH0KICAgIGNoYXIqIGVwcHRyKCkgY29uc3QgeyByZXR1cm4gX0lPX3dy
aXRlX2VuZDsgfQogICAgY2hhciogcGJhc2UoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfYmFz
ZTsgfQogICAgY2hhciogZWJhY2soKSBjb25zdAogICAgICB7IHJldHVybiBfZmxhZ3MgICYgMHgx
MDAgID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX2Jhc2U7fQogICAgY2hhciogYmFzZSgpIGNv
bnN0IHsgcmV0dXJuIF9JT19idWZfYmFzZTsgfQogICAgY2hhciogZWJ1ZigpIGNvbnN0IHsgcmV0
dXJuIF9JT19idWZfZW5kOyB9CiAgICBpbnQgYmxlbigpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZf
ZW5kIC0gX0lPX2J1Zl9iYXNlOyB9CiAgICB2b2lkIHhwdXRfY2hhcihjaGFyIGMpIHsgKl9JT193
cml0ZV9wdHIrKyA9IGM7IH0KICAgIGludCB4ZmxhZ3MoKSB7IHJldHVybiBfZmxhZ3MgOyB9CiAg
ICBpbnQgeGZsYWdzKGludCBmKSB7aW50IGZsID0gX2ZsYWdzIDsgX2ZsYWdzICA9IGY7IHJldHVy
biBmbDt9CiAgICB2b2lkIHhzZXRmbGFncyhpbnQgZikgeyBfZmxhZ3MgIHw9IGY7IH0KICAgIHZv
aWQgeHNldGZsYWdzKGludCBmLCBpbnQgbWFzaykKICAgICAgeyBfZmxhZ3MgID0gKF9mbGFncyAg
JiB+bWFzaykgfCAoZiAmIG1hc2spOyB9CiAgICB2b2lkIGdidW1wKGludCBuKQogICAgICB7IF9m
bGFncyAgJiAweDEwMCAgPyAoX0lPX3NhdmVfYmFzZSs9bik6KF9JT19yZWFkX3B0cis9bik7fQog
ICAgdm9pZCBwYnVtcChpbnQgbikgeyBfSU9fd3JpdGVfcHRyICs9IG47IH0KICAgIHZvaWQgc2V0
YihjaGFyKiBiLCBjaGFyKiBlYiwgaW50IGE9MCk7CiAgICB2b2lkIHNldHAoY2hhciogcCwgY2hh
ciogZXApCiAgICAgIHsgX0lPX3dyaXRlX2Jhc2U9X0lPX3dyaXRlX3B0cj1wOyBfSU9fd3JpdGVf
ZW5kPWVwOyB9CiAgICB2b2lkIHNldGcoY2hhciogZWIsIGNoYXIqIGcsIGNoYXIgKmVnKSB7CiAg
ICAgIGlmIChfZmxhZ3MgICYgMHgxMDAgKSBfSU9fZnJlZV9iYWNrdXBfYXJlYSh0aGlzKTsgCiAg
ICAgIF9JT19yZWFkX2Jhc2UgPSBlYjsgX0lPX3JlYWRfcHRyID0gZzsgX0lPX3JlYWRfZW5kID0g
ZWc7IH0KICAgIGNoYXIgKnNob3J0YnVmKCkgeyByZXR1cm4gX3Nob3J0YnVmOyB9CiAgICBpbnQg
aW5fYmFja3VwKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgxMDAgOyB9CiAgICAgCiAgICBjaGFyICpH
YmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX2Jh
c2U7IH0KICAgICAKICAgIGNoYXIgKmVHcHRyKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9f
c2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgICAKICAgIGNoYXIgKkJiYXNlKCkgeyByZXR1
cm4gaW5fYmFja3VwKCkgPyBfSU9fcmVhZF9iYXNlIDogX0lPX3NhdmVfYmFzZTsgfQogICAgY2hh
ciAqQnB0cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFzZTsgfQogICAgIAogICAgY2hhciAqZUJw
dHIoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2VuZCA6IF9JT19zYXZlX2VuZDsg
fQogICAgY2hhciAqTmJhc2UoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlOyB9CiAgICBjaGFyICpl
TnB0cigpIHsgcmV0dXJuIF9JT19zYXZlX2VuZDsgfQogICAgaW50IGhhdmVfYmFja3VwKCkgeyBy
ZXR1cm4gX0lPX3NhdmVfYmFzZSAhPSBfX251bGwgOyB9CiAgICBpbnQgaGF2ZV9tYXJrZXJzKCkg
eyByZXR1cm4gX21hcmtlcnMgIT0gX19udWxsIDsgfQogICAgdm9pZCBmcmVlX2JhY2t1cF9hcmVh
KCk7CiAgICB2b2lkIHVuc2F2ZV9tYXJrZXJzKCk7ICAKICAgIGludCBwdXRfbW9kZSgpIHsgcmV0
dXJuIF9mbGFncyAmIDB4ODAwIDsgfQogICAgaW50IHN3aXRjaF90b19nZXRfbW9kZSgpOwogICAg
CiAgICBzdHJlYW1idWYoaW50IGZsYWdzPTApOwogIHB1YmxpYzoKICAgIHN0YXRpYyBpbnQgZmx1
c2hfYWxsKCk7CiAgICBzdGF0aWMgdm9pZCBmbHVzaF9hbGxfbGluZWJ1ZmZlcmVkKCk7ICAKICAg
IHZpcnR1YWwgfnN0cmVhbWJ1ZigpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMgPSAo
LTEpICk7ICAKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCB1
ZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwoaW50IGMpOwogICAgdmlydHVhbCBz
dHJlYW1zaXplIHhzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVh
bCBzdHJlYW1zaXplIHhzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVhbCBz
dHJlYW1wb3Mgc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxp
b3M6Om91dCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrcG9zKHN0cmVhbXBvcyBwb3MsIGlu
dCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCk7CiAgICBzdHJlYW1wb3MgcHVic2Vla29mZihzdHJl
YW1vZmYgbywgX3NlZWtfZGlyIGQsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpCiAgICAgIHsg
cmV0dXJuIF9JT19zZWVrb2ZmICh0aGlzLCBvLCBkLCBtb2RlKTsgfQogICAgc3RyZWFtcG9zIHB1
YnNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KQogICAg
ICB7IHJldHVybiBfSU9fc2Vla3BvcyAodGhpcywgcG9zLCBtb2RlKTsgfQogICAgc3RyZWFtcG9z
IHNzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0
KTsKICAgIHN0cmVhbXBvcyBzc2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6
aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1ZihjaGFyKiBwLCBpbnQg
bGVuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICAgIHZpcnR1YWwgaW50IGRvYWxsb2NhdGUo
KTsKICAgIGludCBzZWVrbWFyayhzdHJlYW1tYXJrZXImIG1hcmssIGludCBkZWx0YSA9IDApOwog
ICAgaW50IHNwdXRiYWNrYyhjaGFyIGMpOwogICAgaW50IHN1bmdldGMoKTsKICAgIGludCB1bmJ1
ZmZlcmVkKCkgeyByZXR1cm4gX2ZsYWdzICYgMiAgPyAxIDogMDsgfQogICAgaW50IGxpbmVidWZm
ZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDB4MjAwICA/IDEgOiAwOyB9CiAgICB2b2lkIHVuYnVm
ZmVyZWQoaW50IGkpCgl7IGlmIChpKSBfZmxhZ3MgfD0gMiA7IGVsc2UgX2ZsYWdzICY9IH4yIDsg
fQogICAgdm9pZCBsaW5lYnVmZmVyZWQoaW50IGkpCgl7IGlmIChpKSBfZmxhZ3MgfD0gMHgyMDAg
OyBlbHNlIF9mbGFncyAmPSB+MHgyMDAgOyB9CiAgICBpbnQgYWxsb2NhdGUoKSB7ICAKCWlmIChi
YXNlKCkgfHwgdW5idWZmZXJlZCgpKSByZXR1cm4gMDsKCWVsc2UgcmV0dXJuIGRvYWxsb2NhdGUo
KTsgfQogICAgIAogICAgdm9pZCBhbGxvY2J1ZigpIHsgaWYgKGJhc2UoKSA9PSBfX251bGwgKSBk
b2FsbG9jYnVmKCk7IH0KICAgIHZvaWQgZG9hbGxvY2J1ZigpOwogICAgaW50IGluX2F2YWlsKCkg
eyByZXR1cm4gX0lPX3JlYWRfZW5kIC0gX0lPX3JlYWRfcHRyOyB9CiAgICBpbnQgb3V0X3dhaXRp
bmcoKSB7IHJldHVybiBfSU9fd3JpdGVfcHRyIC0gX0lPX3dyaXRlX2Jhc2U7IH0KICAgIHN0cmVh
bXNpemUgc3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBuKSB7IHJldHVybiB4c3B1dG4o
cywgbik7IH0KICAgIHN0cmVhbXNpemUgcGFkbihjaGFyIHBhZCwgc3RyZWFtc2l6ZSBuKSB7IHJl
dHVybiBfSU9fcGFkbih0aGlzLCBwYWQsIG4pOyB9CiAgICBzdHJlYW1zaXplIHNnZXRuKGNoYXIq
IHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4gX0lPX3NnZXRuKHRoaXMsIHMsIG4pOyB9CiAgICBp
bnQgaWdub3JlKGludCk7CiAgICBpbnQgZ2V0X2NvbHVtbigpOwogICAgaW50IHNldF9jb2x1bW4o
aW50KTsKICAgIGxvbmcgc2dldGxpbmUoY2hhciogYnVmLCBfR19zaXplX3QgIG4sIGNoYXIgZGVs
aW0sIGludCBwdXRiYWNrX2RlbGltKTsKICAgIGludCBzcHV0YyhpbnQgYykgeyByZXR1cm4gX0lP
X3B1dGMoYywgdGhpcyk7IH0KICAgIGludCBzYnVtcGMoKSB7IHJldHVybiBfSU9fZ2V0Yyh0aGlz
KTsgfQogICAgaW50IHNnZXRjKCkgeyByZXR1cm4gKCggIHRoaXMgICktPl9JT19yZWFkX3B0ciA+
PSAoICB0aGlzICApLT5fSU9fcmVhZF9lbmQgJiYgX191bmRlcmZsb3cgKCAgdGhpcyAgKSA9PSAo
LTEpICA/ICgtMSkgIDogKih1bnNpZ25lZCBjaGFyICopICggIHRoaXMgICktPl9JT19yZWFkX3B0
cikgIDsgfQogICAgaW50IHNuZXh0YygpIHsKCWlmIChfSU9fcmVhZF9wdHIgPj0gX0lPX3JlYWRf
ZW5kICYmIF9fdW5kZXJmbG93KHRoaXMpID09ICgtMSkgKQoJICByZXR1cm4gKC0xKSA7CgllbHNl
IHJldHVybiBfSU9fcmVhZF9wdHIrKywgc2dldGMoKTsgfQogICAgdm9pZCBzdG9zc2MoKSB7IGlm
IChfSU9fcmVhZF9wdHIgPCBfSU9fcmVhZF9lbmQpIF9JT19yZWFkX3B0cisrOyB9CiAgICBpbnQg
dnNjYW4oY2hhciBjb25zdCAqZm10MCwgX0dfdmFfbGlzdCAgYXAsIGlvcyogc3RyZWFtID0gX19u
dWxsICk7CiAgICBpbnQgc2NhbihjaGFyIGNvbnN0ICpmbXQwIC4uLik7CiAgICBpbnQgdmZvcm0o
Y2hhciBjb25zdCAqZm10MCwgX0dfdmFfbGlzdCAgYXApOwogICAgaW50IGZvcm0oY2hhciBjb25z
dCAqZm10MCAuLi4pOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c19yZWFkKGNoYXIqIGJ1Ziwg
c3RyZWFtc2l6ZSBzaXplKTsKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfd3JpdGUoY29uc3Qg
Y2hhciosIHN0cmVhbXNpemUpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc3lzX3NlZWsoc3RyZWFt
b2ZmLCBfc2Vla19kaXIpOwogICAgdmlydHVhbCBpbnQgc3lzX2Nsb3NlKCk7CiAgICB2aXJ0dWFs
IGludCBzeXNfc3RhdCh2b2lkKik7ICAKfTsKY2xhc3MgZmlsZWJ1ZiA6IHB1YmxpYyBzdHJlYW1i
dWYgewogIHByb3RlY3RlZDoKICAgIHZvaWQgaW5pdCgpOwogIHB1YmxpYzoKICAgIHN0YXRpYyBj
b25zdCBpbnQgb3BlbnByb3Q7ICAKICAgIGZpbGVidWYoKTsKICAgIGZpbGVidWYoaW50IGZkKTsK
ICAgIGZpbGVidWYoaW50IGZkLCBjaGFyKiBwLCBpbnQgbGVuKTsKICAgIH5maWxlYnVmKCk7CiAg
ICBmaWxlYnVmKiBhdHRhY2goaW50IGZkKTsKICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAq
ZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpOwogICAgZmlsZWJ1Ziogb3Blbihjb25zdCBjaGFy
ICpmaWxlbmFtZSwgaW9zOjpvcGVubW9kZSBtb2RlLCBpbnQgcHJvdCA9IDA2NjQpOwogICAgdmly
dHVhbCBpbnQgdW5kZXJmbG93KCk7CiAgICB2aXJ0dWFsIGludCBvdmVyZmxvdyhpbnQgYyA9ICgt
MSkgKTsKICAgIGludCBpc19vcGVuKCkgY29uc3QgeyByZXR1cm4gX2ZpbGVubyA+PSAwOyB9CiAg
ICBpbnQgZmQoKSBjb25zdCB7IHJldHVybiBpc19vcGVuKCkgPyBfZmlsZW5vIDogKC0xKSA7IH0K
ICAgIGZpbGVidWYqIGNsb3NlKCk7CiAgICB2aXJ0dWFsIGludCBkb2FsbG9jYXRlKCk7CiAgICB2
aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1p
b3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtYnVmKiBzZXRidWYoY2hhciogcCwg
aW50IGxlbik7CiAgICBzdHJlYW1zaXplIHhzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXpl
IG4pOwogICAgc3RyZWFtc2l6ZSB4c2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHZp
cnR1YWwgaW50IHN5bmMoKTsKICBwcm90ZWN0ZWQ6ICAKICAgIGludCBpc19yZWFkaW5nKCkgeyBy
ZXR1cm4gZWJhY2soKSAhPSBlZ3B0cigpOyB9CiAgICBjaGFyKiBjdXJfcHRyKCkgeyByZXR1cm4g
aXNfcmVhZGluZygpID8gIGdwdHIoKSA6IHBwdHIoKTsgfQogICAgIAogICAgY2hhciogZmlsZV9w
dHIoKSB7IHJldHVybiBlR3B0cigpOyB9CiAgICAgCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lz
X3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mg
c3lzX3NlZWsoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5
c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIGludCBzeXNfc3Rh
dCh2b2lkKik7ICAKICAgIHZpcnR1YWwgaW50IHN5c19jbG9zZSgpOwp9OwppbmxpbmUgdm9pZCBp
b3M6OmluaXQoc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllX3RvKSB7CgkJX3N0YXRlID0gc2Ig
PyBpb3M6Omdvb2RiaXQgOiBpb3M6OmJhZGJpdDsgX2V4Y2VwdGlvbnM9MDsKCQlfc3RyYnVmPXNi
OyBfdGllID0gdGllX3RvOyBfd2lkdGg9MDsgX2ZpbGw9JyAnOwoJCV9mbGFncz1pb3M6OnNraXB3
c3xpb3M6OmRlYzsKCQlfcHJlY2lzaW9uPTY7IF9hcnJheXMgPSAwOyB9CmlubGluZSBpb3M6Omlv
cyhzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsgaW5pdChzYiwgdGllX3RvKTsgfQpp
bmxpbmUgaW9zOjp+aW9zKCkgewogICAgIAogICAgIAogICAgb3BlcmF0b3IgZGVsZXRlW10gKF9h
cnJheXMpOwp9Cn0gIAojIDMxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bv
d2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3Ry
ZWFtLmgiIDIgMwpleHRlcm4gIkMrKyIgewpjbGFzcyBpc3RyZWFtOyBjbGFzcyBvc3RyZWFtOwp0
eXBlZGVmIGlvcyYgKCpfX21hbmlwKShpb3MmKTsKdHlwZWRlZiBpc3RyZWFtJiAoKl9faW1hbmlw
KShpc3RyZWFtJik7CnR5cGVkZWYgb3N0cmVhbSYgKCpfX29tYW5pcCkob3N0cmVhbSYpOwpleHRl
cm4gaXN0cmVhbSYgd3MoaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0mIGZsdXNoKG9zdHJl
YW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kbChvc3RyZWFtJiBvdXRzKTsKZXh0ZXJuIG9z
dHJlYW0mIGVuZHMob3N0cmVhbSYgb3V0cyk7CmNsYXNzIG9zdHJlYW0gOiB2aXJ0dWFsIHB1Ymxp
YyBpb3MKewogICAgIAogICAgdm9pZCBkb19vc2Z4KCk7CiAgcHVibGljOgogICAgb3N0cmVhbSgp
IHsgfQogICAgb3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVkPSBfX251bGwgKTsK
ICAgIGludCBvcGZ4KCkgewoJaWYgKCFnb29kKCkpIHJldHVybiAwOwoJZWxzZSB7IGlmIChfdGll
KSBfdGllLT5mbHVzaCgpOyAgOyByZXR1cm4gMTt9IH0KICAgIHZvaWQgb3NmeCgpIHsgIDsKCQkg
IGlmIChmbGFncygpICYgKGlvczo6dW5pdGJ1Znxpb3M6OnN0ZGlvKSkKCQkgICAgICBkb19vc2Z4
KCk7IH0KICAgIG9zdHJlYW0mIGZsdXNoKCk7CiAgICBvc3RyZWFtJiBwdXQoY2hhciBjKSB7IF9z
dHJidWYtPnNwdXRjKGMpOyByZXR1cm4gKnRoaXM7IH0KICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0
IGNoYXIgKnMsIHN0cmVhbXNpemUgbik7CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCB1bnNpZ25l
ZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFy
KilzLCBuKTt9CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCBzaWduZWQgY2hhciAqcywgc3RyZWFt
c2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0
cmVhbSYgd3JpdGUoY29uc3Qgdm9pZCAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiB3
cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVhbSYgc2Vla3Aoc3RyZWFtcG9zKTsK
ICAgIG9zdHJlYW0mIHNlZWtwKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0
ZWxscCgpOwogICAgb3N0cmVhbSYgZm9ybShjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsKICAgIG9z
dHJlYW0mIHZmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCwgX0dfdmFfbGlzdCAgYXJncyk7CiAgICBv
c3RyZWFtJiBvcGVyYXRvcjw8KGNoYXIgYyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2ln
bmVkIGNoYXIgYykgeyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFtJiBv
cGVyYXRvcjw8KHNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQog
ICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBjaGFyICpzKTsKICAgIG9zdHJlYW0mIG9wZXJh
dG9yPDwoY29uc3QgdW5zaWduZWQgY2hhciAqcykKCXsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0
IGNoYXIqKXM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgc2lnbmVkIGNoYXIgKnMp
Cgl7IHJldHVybiAoKnRoaXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBvcGVy
YXRvcjw8KGNvbnN0IHZvaWQgKnApOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChpbnQgbik7CiAg
ICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJh
dG9yPDwobG9uZyBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBuKTsK
ICAgIF9fZXh0ZW5zaW9uX18gb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIGxvbmcgbik7CiAgICBf
X2V4dGVuc2lvbl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIG4pOwog
ICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKGludClu
KTt9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IG4pIHtyZXR1cm4gb3Bl
cmF0b3I8PCgodW5zaWduZWQgaW50KW4pO30KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoYm9vbCBi
KSB7IHJldHVybiBvcGVyYXRvcjw8KChpbnQpYik7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwo
ZG91YmxlIG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChmbG9hdCBuKSB7IHJldHVybiBvcGVy
YXRvcjw8KChkb3VibGUpbik7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBkb3VibGUg
bikgeyByZXR1cm4gb3BlcmF0b3I8PCgoZG91YmxlKW4pOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRv
cjw8KF9fb21hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBvc3RyZWFt
JiBvcGVyYXRvcjw8KF9fbWFuaXAgZnVuYykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7
fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzdHJlYW1idWYqKTsKfTsKY2xhc3MgaXN0cmVhbSA6
IHZpcnR1YWwgcHVibGljIGlvcwp7CiAgICAgCnByb3RlY3RlZDoKICAgIF9HX3NpemVfdCAgX2dj
b3VudDsKICAgIGludCBfc2tpcF93cygpOwogIHB1YmxpYzoKICAgIGlzdHJlYW0oKTogX2djb3Vu
dCAoMCkgeyB9CiAgICBpc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qdGllZD0gX19udWxs
ICk7CiAgICBpc3RyZWFtJiBnZXQoY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xu
Jyk7CiAgICBpc3RyZWFtJiBnZXQodW5zaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRl
bGltID0gJ1xuJykKCXsgcmV0dXJuIGdldCgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAg
aXN0cmVhbSYgZ2V0KGNoYXImIGMpOwogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXImIGMp
IHsgcmV0dXJuIGdldCgoY2hhciYpYyk7IH0KICAgIGlzdHJlYW0mIGdldGxpbmUoY2hhciogcHRy
LCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAgICBpc3RyZWFtJiBnZXRsaW5lKHVuc2ln
bmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXRs
aW5lKChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVkIGNo
YXImIGMpICB7IHJldHVybiBnZXQoKGNoYXImKWMpOyB9CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVk
IGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNo
YXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdldGxpbmUoc2lnbmVkIGNoYXIq
IHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXRsaW5lKChjaGFy
KilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiByZWFkKGNoYXIgKnB0ciwgc3RyZWFt
c2l6ZSBuKTsKICAgIGlzdHJlYW0mIHJlYWQodW5zaWduZWQgY2hhciAqcHRyLCBzdHJlYW1zaXpl
IG4pCiAgICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIHJl
YWQoc2lnbmVkIGNoYXIgKnB0ciwgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChj
aGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiByZWFkKHZvaWQgKnB0ciwgc3RyZWFtc2l6ZSBu
KQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiBnZXQo
c3RyZWFtYnVmJiBzYiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0cyhjaGFy
ICoqcywgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaW50IGlwZngoaW50IG5lZWQgPSAwKSB7Cglp
ZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAg
OwoJICBpZiAoX3RpZSAmJiAobmVlZCA9PSAwIHx8IHJkYnVmKCktPmluX2F2YWlsKCkgPCBuZWVk
KSkgX3RpZS0+Zmx1c2goKTsKCSAgaWYgKCFuZWVkICYmIChmbGFncygpICYgaW9zOjpza2lwd3Mp
KSByZXR1cm4gX3NraXBfd3MoKTsKCSAgZWxzZSByZXR1cm4gMTsKCX0KICAgIH0KICAgIGludCBp
cGZ4MCgpIHsgIAoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9
CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUpIF90aWUtPmZsdXNoKCk7CgkgIGlmIChmbGFncygp
ICYgaW9zOjpza2lwd3MpIHJldHVybiBfc2tpcF93cygpOwoJICBlbHNlIHJldHVybiAxOwoJfQog
ICAgfQogICAgaW50IGlwZngxKCkgeyAgCglpZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0
KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAgOwoJICBpZiAoX3RpZSAmJiByZGJ1ZigpLT5pbl9h
dmFpbCgpID09IDApIF90aWUtPmZsdXNoKCk7CgkgIHJldHVybiAxOwoJfQogICAgfQogICAgdm9p
ZCBpc2Z4KCkgeyAgOyB9CiAgICBpbnQgZ2V0KCkgeyBpZiAoIWlwZngxKCkpIHJldHVybiAoLTEp
IDsKCQllbHNlIHsgaW50IGNoID0gX3N0cmJ1Zi0+c2J1bXBjKCk7CgkJICAgICAgIGlmIChjaCA9
PSAoLTEpICkgc2V0KGlvczo6ZW9mYml0KTsKCQkgICAgICAgaXNmeCgpOwoJCSAgICAgICByZXR1
cm4gY2g7CgkJICAgICB9IH0KICAgIGludCBwZWVrKCk7CiAgICBfR19zaXplX3QgIGdjb3VudCgp
IHsgcmV0dXJuIF9nY291bnQ7IH0KICAgIGlzdHJlYW0mIGlnbm9yZShpbnQgbj0xLCBpbnQgZGVs
aW0gPSAoLTEpICk7CiAgICBpbnQgc3luYyAoKTsKICAgIGlzdHJlYW0mIHNlZWtnKHN0cmVhbXBv
cyk7CiAgICBpc3RyZWFtJiBzZWVrZyhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICBzdHJlYW1w
b3MgdGVsbGcoKTsKICAgIGlzdHJlYW0mIHB1dGJhY2soY2hhciBjaCkgewoJaWYgKGdvb2QoKSAm
JiBfc3RyYnVmLT5zcHV0YmFja2MoY2gpID09ICgtMSkgKSBjbGVhcihpb3M6OmJhZGJpdCk7Cgly
ZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgdW5nZXQoKSB7CglpZiAoZ29vZCgpICYmIF9zdHJi
dWYtPnN1bmdldGMoKSA9PSAoLTEpICkgY2xlYXIoaW9zOjpiYWRiaXQpOwoJcmV0dXJuICp0aGlz
O30KICAgIGlzdHJlYW0mIHNjYW4oY29uc3QgY2hhciAqZm9ybWF0IC4uLik7CiAgICBpc3RyZWFt
JiB2c2Nhbihjb25zdCBjaGFyICpmb3JtYXQsIF9HX3ZhX2xpc3QgIGFyZ3MpOwogICAgaXN0cmVh
bSYgb3BlcmF0b3I+PihjaGFyKik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGNo
YXIqIHApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3RyZWFtJiBvcGVy
YXRvcj4+KHNpZ25lZCBjaGFyKnApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAg
ICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXImIGMpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1
bnNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9wZXJhdG9yPj4oKGNoYXImKWMpO30KICAgIGlzdHJl
YW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hhciYp
Yyk7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihpbnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9y
Pj4obG9uZyYpOwogICAgX19leHRlbnNpb25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcgbG9u
ZyYpOwogICAgX19leHRlbnNpb25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcg
bG9uZyYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaG9ydCYpOwogICAgaXN0cmVhbSYgb3Bl
cmF0b3I+Pih1bnNpZ25lZCBpbnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQg
bG9uZyYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYpOwogICAgaXN0
cmVhbSYgb3BlcmF0b3I+Pihib29sJik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGZsb2F0Jik7
CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGRvdWJsZSYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+
Pihsb25nIGRvdWJsZSYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+PiggX19tYW5pcCBmdW5jKSB7
KCpmdW5jKSgqdGhpcyk7IHJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KF9f
aW1hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBpc3RyZWFtJiBvcGVy
YXRvcj4+KHN0cmVhbWJ1ZiopOwp9OwpjbGFzcyBpb3N0cmVhbSA6IHB1YmxpYyBpc3RyZWFtLCBw
dWJsaWMgb3N0cmVhbQp7CiAgcHVibGljOgogICAgaW9zdHJlYW0oKSB7IH0KICAgIGlvc3RyZWFt
KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qdGllZD0gX19udWxsICk7Cn07CmNsYXNzIF9JT19pc3Ry
ZWFtX3dpdGhhc3NpZ24gOiBwdWJsaWMgaXN0cmVhbSB7CnB1YmxpYzoKICBfSU9faXN0cmVhbV93
aXRoYXNzaWduJiBvcGVyYXRvcj0oaXN0cmVhbSYpOwogIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24m
IG9wZXJhdG9yPShfSU9faXN0cmVhbV93aXRoYXNzaWduJiByaHMpCiAgICB7IHJldHVybiBvcGVy
YXRvcj0gKHN0YXRpY19jYXN0PGlzdHJlYW0mPiAocmhzKSk7IH0KfTsKY2xhc3MgX0lPX29zdHJl
YW1fd2l0aGFzc2lnbiA6IHB1YmxpYyBvc3RyZWFtIHsKcHVibGljOgogIF9JT19vc3RyZWFtX3dp
dGhhc3NpZ24mIG9wZXJhdG9yPShvc3RyZWFtJik7CiAgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYg
b3BlcmF0b3I9KF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIHJocykKICAgIHsgcmV0dXJuIG9wZXJh
dG9yPSAoc3RhdGljX2Nhc3Q8b3N0cmVhbSY+IChyaHMpKTsgfQp9OwpleHRlcm4gX0lPX2lzdHJl
YW1fd2l0aGFzc2lnbiBjaW47CmV4dGVybiBfSU9fb3N0cmVhbV93aXRoYXNzaWduIGNvdXQsIGNl
cnI7CmV4dGVybiBfSU9fb3N0cmVhbV93aXRoYXNzaWduIGNsb2cKOwpleHRlcm4gaXN0cmVhbSYg
bG9jayhpc3RyZWFtJiBpbnMpOwpleHRlcm4gaXN0cmVhbSYgdW5sb2NrKGlzdHJlYW0mIGlucyk7
CmV4dGVybiBvc3RyZWFtJiBsb2NrKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgdW5s
b2NrKG9zdHJlYW0mIG91dHMpOwpzdHJ1Y3QgSW9zdHJlYW1faW5pdCB7IH0gOyAgIAppbmxpbmUg
aW9zJiBkZWMoaW9zJiBpKQp7IGkuc2V0Zihpb3M6OmRlYywgaW9zOjpkZWN8aW9zOjpoZXh8aW9z
OjpvY3QpOyByZXR1cm4gaTsgfQppbmxpbmUgaW9zJiBoZXgoaW9zJiBpKQp7IGkuc2V0Zihpb3M6
OmhleCwgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQppbmxpbmUgaW9z
JiBvY3QoaW9zJiBpKQp7IGkuc2V0Zihpb3M6Om9jdCwgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpv
Y3QpOyByZXR1cm4gaTsgfQp9ICAKIyA0NSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2Nj
LWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst
My9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxp
Yi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAz
NDIgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4y
LjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAojIDUzICIvYW9sbmV0L3BrZy9nY2MtMi45
NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4z
L2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0ZGxpYi5o
IiAxIDMgNAojIDI1ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMt
aWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKICAgICAKIyA2MCAiL2Fv
bG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1
LjMvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CiMgNzAgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGli
L2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkbGliLmgiIDMg
NAogICAgIAogICAgdHlwZWRlZiBzdHJ1Y3QgZGl2X3QgIHsJIAoJaW50IHF1b3Q7CQkgCglpbnQg
cmVtOwkJICAKICAgIH0gZGl2X3Q7CiAgICAgCiAgICB0eXBlZGVmIHN0cnVjdCBsZGl2X3QgIHsJ
IAoJbG9uZyBpbnQgcXVvdDsJCSAKCWxvbmcgaW50IHJlbTsJCSAgCiAgICB9IGxkaXZfdDsKICAg
ICAKICAgICAKICAgIGV4dGVybiBpbnQJIAltYmxlbihjb25zdCBjaGFyICosIHNpemVfdCk7CiAg
ICBleHRlcm4gc2l6ZV90IAltYnN0b3djcyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90
KTsKICAgIGV4dGVybiBpbnQJCW1idG93Yyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90
KTsKICAgIGV4dGVybiBzaXplX3QJd2NzdG9tYnMoY2hhciAqLCBjb25zdCB3Y2hhcl90ICosIHNp
emVfdCk7CiAgICBleHRlcm4gaW50CQl3Y3RvbWIoY2hhciAqLCBjb25zdCB3Y2hhcl90KTsKICAg
ICAKIyAxNjggIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0t
YWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkbGliLmgiIDMgNAoJIAoJZXh0ZXJuIGRvdWJsZSAJ
YXRvZihjb25zdCBjaGFyICopOwoJZXh0ZXJuIGludCAJYXRvaShjb25zdCBjaGFyICopOwoJZXh0
ZXJuIGxvbmcgaW50IGF0b2woY29uc3QgY2hhciAqKTsKCWV4dGVybiBkb3VibGUgCXN0cnRvZChj
b25zdCBjaGFyICosIGNoYXIgKiAqKTsKCWV4dGVybiBsb25nIGludCBzdHJ0b2woY29uc3QgY2hh
ciAqLCBjaGFyICogKiwgaW50KTsKCWV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsKGNv
bnN0IGNoYXIgKiwgY2hhciAqICosIGludCk7CglleHRlcm4gaW50IAlyYW5kKHZvaWQpOwoJZXh0
ZXJuIHZvaWQJc3JhbmQodW5zaWduZWQgaW50KTsKCWV4dGVybiB2b2lkIAkqY2FsbG9jKHNpemVf
dCwgc2l6ZV90KTsKCWV4dGVybiB2b2lkCWZyZWUodm9pZCAqKTsKCWV4dGVybiB2b2lkCSptYWxs
b2Moc2l6ZV90KTsKCWV4dGVybiB2b2lkIAkqcmVhbGxvYyh2b2lkICosIHNpemVfdCk7CglleHRl
cm4gdm9pZAlhYm9ydCh2b2lkKTsKCWV4dGVybiBpbnQJYXRleGl0KHZvaWQgKCopKHZvaWQpKTsK
CWV4dGVybiB2b2lkCWV4aXQoaW50KTsKCWV4dGVybiBjaGFyCSpnZXRlbnYoY29uc3QgY2hhciAq
KTsKCWV4dGVybiBpbnQgCXN5c3RlbShjb25zdCBjaGFyICopOwoJZXh0ZXJuIHZvaWQgCSpic2Vh
cmNoKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwgaW50KCopKGNv
bnN0IHZvaWQgKixjb25zdCB2b2lkICopKTsKCWV4dGVybiB2b2lkIAlxc29ydCh2b2lkICosIHNp
emVfdCwgc2l6ZV90LCBpbnQoKikoY29uc3Qgdm9pZCAqLGNvbnN0IHZvaWQgKikpOwoJIAoJCgll
eHRlcm4gaW50IAlhYnMoaW50KTsKCWV4dGVybiBzdHJ1Y3QgZGl2X3QJZGl2KGludCwgaW50KTsK
CWV4dGVybiBsb25nIGludAlsYWJzKGxvbmcgaW50KTsKCWV4dGVybiBzdHJ1Y3QgbGRpdl90IAls
ZGl2KGxvbmcgaW50LCBsb25nIGludCk7CiMgMjI3ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xp
Yi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0ZGxpYi5oIiAz
IDQKIyAyNTMgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0t
YWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkbGliLmgiIDMgNAoJZXh0ZXJuIGRvdWJsZSAJCWRy
YW5kNDgodm9pZCk7CglleHRlcm4gZG91YmxlIAkJZXJhbmQ0OCh1bnNpZ25lZCBzaG9ydFtdKTsK
CWV4dGVybiBsb25nIAkJanJhbmQ0OCh1bnNpZ25lZCBzaG9ydFtdKTsKCWV4dGVybiBsb25nIAkJ
bXJhbmQ0OCh2b2lkKTsKCWV4dGVybiBsb25nIAkJbnJhbmQ0OCh1bnNpZ25lZCBzaG9ydFtdKTsK
CWV4dGVybiB1bnNpZ25lZCBzaG9ydCAJKnNlZWQ0OCh1bnNpZ25lZCBzaG9ydFtdKTsKCWV4dGVy
biB2b2lkIAkJc3JhbmQ0OChsb25nKTsKCWV4dGVybiBpbnQgCQlwdXRlbnYoIGNoYXIgKik7CiMg
Mjc5ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMu
Mi41LzIuOTUuMy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKIyAzMzMgIi9hb2xuZXQvcGtnL2djYy0y
Ljk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3Rk
bGliLmgiIDMgNAogICAgIGV4dGVybiBjaGFyICpvcHRhcmc7CiAgICAgZXh0ZXJuIGludCBvcHRp
bmQ7CiAgICAgZXh0ZXJuIGludCBvcHRlcnI7CiAgICAgZmxvYXQgICAgYXRvZmYoKTsKICAgICBj
aGFyICAgICAqZWN2dCAgIChkb3VibGUsIGludCwgaW50ICosIGludCAqKSAgICA7CiAgICAgY2hh
ciAgICAgKmZjdnQgICAoZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKikgICAgOwogICAgIGNoYXIg
ICAgICpnY3Z0ICAgKGRvdWJsZSwgaW50LCBjaGFyICopICAgIDsKICAgICBmbG9hdCAgICBzdHJ0
b2YoKTsKICAgICB2b2lkICAgICBpbXVsX2RibCgpOwogICAgIHZvaWQgICAgIHVtdWxfZGJsKCk7
CiAgICAgCiMgMzc0ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMt
aWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKICAgIGV4dGVybiBkb3Vi
bGUJIHdjc3RvZChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiopOwogICAgZXh0ZXJuIGxvbmcg
aW50CSB3Y3N0b2woY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBpbnQpOwogICAgZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgaW50IHdjc3RvdWwoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBp
bnQpOwogICAgZXh0ZXJuIGludAkJcnBtYXRjaChjb25zdCBjaGFyICopOwogICAgZXh0ZXJuIGlu
dAkJY2xlYXJlbnYodm9pZCk7CiAgICBleHRlcm4gaW50CQlnZXRvcHQoaW50LCBjaGFyICpjb25z
dFtdLCBjb25zdCBjaGFyICopOwogICAgZXh0ZXJuIGNoYXIJCSpnZXRwYXNzKGNvbnN0IGNoYXIg
Kik7CiMgNTQgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0t
YWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIg
MwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4
My4yLjUvMi45NS4zL2luY2x1ZGUvc3RyaW5nLmgiIDEgMyA0CiMgMTkgIi9hb2xuZXQvcGtnL2dj
Yy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUv
c3RyaW5nLmgiIDMgNAojIDI0MyAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9w
b3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CiMgNTUgIi9h
b2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45
NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi9hb2xu
ZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4z
Ly4uLy4uLy4uLy4uL3Bvd2VycGMtaWJtLWFpeDMuMi41L2luY2x1ZGUvYXNzZXJ0LmgiIDEgMyA0
CiMgMTkgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4
My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL3Bvd2VycGMtaWJtLWFpeDMuMi41L2luY2x1ZGUvYXNz
ZXJ0LmgiIDMgNApleHRlcm4gIkMiIHsKZXh0ZXJuIHZvaWQgX19lcHJpbnRmIChjb25zdCBjaGFy
ICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQsIGNvbnN0IGNoYXIgKikKICAgIF9fYXR0cmlidXRl
X18gKChub3JldHVybikpOwp9CiMgNTIgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1s
aWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL3Bvd2VycGMtaWJtLWFp
eDMuMi41L2luY2x1ZGUvYXNzZXJ0LmgiIDMgNAojIDU2ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4z
L2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs
dWRlL2crKy0zL3N0bF9hbGxvYy5oIiAyIDMKIyA3OCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9s
aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGxfYWxsb2MuaCIgMwojIDg3ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9n
Y2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL3N0bF9hbGxvYy5oIiAzCiMgOTcgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1s
aWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
c3RsX2FsbG9jLmgiIDMKIyAxMTUgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIv
cG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rs
X2FsbG9jLmgiIDMKdGVtcGxhdGUgPGludCBfX2luc3Q+CmNsYXNzIF9fbWFsbG9jX2FsbG9jX3Rl
bXBsYXRlIHsKcHJpdmF0ZToKICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXplX3QpOwog
IHN0YXRpYyB2b2lkKiBfU19vb21fcmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKICBzdGF0aWMgdm9p
ZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKTsKcHVibGljOgogIHN0YXRpYyB2b2lk
KiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9f
bik7CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fbWFsbG9jKF9fbik7
CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCog
X19wLCBzaXplX3QgICkKICB7CiAgICBmcmVlKF9fcCk7CiAgfQogIHN0YXRpYyB2b2lkKiByZWFs
bG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICAsIHNpemVfdCBfX25ld19zeikKICB7CiAgICB2b2lk
KiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICBpZiAoMCA9PSBfX3Jlc3Vs
dCkgX19yZXN1bHQgPSBfU19vb21fcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgIHJldHVybiBf
X3Jlc3VsdDsKICB9CiAgc3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hhbmRsZXIodm9pZCAo
Kl9fZikoKSkpKCkKICB7CiAgICB2b2lkICgqIF9fb2xkKSgpID0gX19tYWxsb2NfYWxsb2Nfb29t
X2hhbmRsZXI7CiAgICBfX21hbGxvY19hbGxvY19vb21faGFuZGxlciA9IF9fZjsKICAgIHJldHVy
bihfX29sZCk7CiAgfQp9Owp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCAoKiBfX21hbGxvY19h
bGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7
CnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkKgpfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2lu
c3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCnsKICAgIHZvaWQgKCogX19teV9tYWxsb2Nf
aGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVzdWx0OwogICAgZm9yICg7OykgewogICAgICAgIF9f
bXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBp
ZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7IGNlcnIgPDwgIm91dCBvZiBtZW1vcnkiIDw8
IGVuZGw7IGV4aXQoMSkgOyB9CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAg
ICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4o
X19yZXN1bHQpOwogICAgfQp9CnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkKiBfX21hbGxvY19h
bGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fcmVhbGxvYyh2b2lkKiBfX3AsIHNpemVfdCBf
X24pCnsKICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVz
dWx0OwogICAgZm9yICg7OykgewogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxv
Y19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVy
KSB7IGNlcnIgPDwgIm91dCBvZiBtZW1vcnkiIDw8IGVuZGw7IGV4aXQoMSkgOyB9CiAgICAgICAg
KCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3As
IF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9CnR5
cGVkZWYgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8MD4gbWFsbG9jX2FsbG9jOwp0ZW1wbGF0ZTxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KY2xhc3Mgc2ltcGxlX2FsbG9jIHsKcHVibGljOgogICAg
c3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gMCA9PSBfX24g
PyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHApKTsgfQogICAg
c3RhdGljIF9UcCogYWxsb2NhdGUodm9pZCkKICAgICAgeyByZXR1cm4gKF9UcCopIF9BbGxvYzo6
YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAq
IF9fcCwgc2l6ZV90IF9fbikKICAgICAgeyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxvY2F0
ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUo
X1RwKiBfX3ApCiAgICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChfVHApKTsg
fQp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBkZWJ1Z19hbGxvYyB7CnByaXZhdGU6
CiAgZW51bSB7X1NfZXh0cmEgPSA4fTsgICAKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgCnB1YmxpYzoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6
ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6OmFsbG9jYXRl
KF9fbiArIF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsKICAgIHJldHVy
biBfX3Jlc3VsdCArIF9TX2V4dHJhOwogIH0KICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQq
IF9fcCwgc2l6ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSBf
U19leHRyYTsKICAgICgodm9pZCkgKCggKihzaXplX3QqKV9fcmVhbF9wID09IF9fbiApID8gMCA6
IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLAkgICIvYW9sbmV0
L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAsICAgMjYzICwgICIqKHNpemVf
dCopX19yZWFsX3AgPT0gX19uIiApLCAwKSApKSA7CiAgICBfQWxsb2M6OmRlYWxsb2NhdGUoX19y
ZWFsX3AsIF9fbiArIF9TX2V4dHJhKTsKICB9CiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9p
ZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeikKICB7CiAgICBjaGFyKiBf
X3JlYWxfcCA9IChjaGFyKilfX3AgLSBfU19leHRyYTsKICAgICgodm9pZCkgKCggKihzaXplX3Qq
KV9fcmVhbF9wID09IF9fb2xkX3N6ICkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQg
YXNzZXJ0aW9uIGAlcydcbiIsCSAgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIv
cG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rs
X2FsbG9jLmgiICwgICAyNzAgLCAgIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeiIgKSwg
MCkgKSkgOwogICAgY2hhciogX19yZXN1bHQgPSAoY2hhciopCiAgICAgIF9BbGxvYzo6cmVhbGxv
Y2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyBfU19leHRyYSwgX19uZXdfc3ogKyBfU19leHRyYSk7
CiAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX25ld19zejsKICAgIHJldHVybiBfX3Jlc3VsdCAr
IF9TX2V4dHJhOwogIH0KfTsKdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CmNsYXNz
IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZSB7CnByaXZhdGU6CiAgIAogICAKICAgIGVudW0ge19B
TElHTiA9IDh9OwogICAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgICBlbnVtIHtfTkZSRUVM
SVNUUyA9IF9NQVhfQllURVMvX0FMSUdOfTsKICBzdGF0aWMgc2l6ZV90CiAgX1Nfcm91bmRfdXAo
c2l6ZV90IF9fYnl0ZXMpCiAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIF9BTElHTi0xKSAmIH4o
X0FMSUdOIC0gMSkpOyB9CnByaXZhdGUgOgogIHVuaW9uIF9PYmogewogICAgICAgIHVuaW9uIF9P
YmoqIF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgIGNoYXIgX01fY2xpZW50X2RhdGFbMV07ICAg
ICAKICB9Owpwcml2YXRlOgogICAgc3RhdGljIF9PYmoqICAgX1NfZnJlZV9saXN0W19ORlJFRUxJ
U1RTXTsKICBzdGF0aWMgIHNpemVfdCBfU19mcmVlbGlzdF9pbmRleChzaXplX3QgX19ieXRlcykg
ewogICAgICAgIHJldHVybiAoKChfX2J5dGVzKSArIF9BTElHTi0xKS9fQUxJR04gLSAxKTsKICB9
CiAgIAogIHN0YXRpYyB2b2lkKiBfU19yZWZpbGwoc2l6ZV90IF9fbik7CiAgIAogICAKICBzdGF0
aWMgY2hhciogX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKICAg
CiAgc3RhdGljIGNoYXIqIF9TX3N0YXJ0X2ZyZWU7CiAgc3RhdGljIGNoYXIqIF9TX2VuZF9mcmVl
OwogIHN0YXRpYyBzaXplX3QgX1NfaGVhcF9zaXplOwojIDM4OSAiL2FvbG5ldC9wa2cvZ2NjLTIu
OTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwogICAgY2xhc3MgX0xvY2sgewogICAgICAgIHB1
YmxpYzoKICAgICAgICAgICAgX0xvY2soKSB7ICA7IH0KICAgICAgICAgICAgfl9Mb2NrKCkgeyAg
OyB9CiAgICB9OwogICAgZnJpZW5kIGNsYXNzIF9Mb2NrOwpwdWJsaWM6CiAgIAogIHN0YXRpYyB2
b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIF9PYmoqICAqIF9fbXlfZnJlZV9saXN0
OwogICAgX09iaiogICBfX3Jlc3VsdDsKICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVT
KSB7CiAgICAgICAgcmV0dXJuKG1hbGxvY19hbGxvYzo6YWxsb2NhdGUoX19uKSk7CiAgICB9CiAg
ICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7
CiAgICAgCiAgICAgCiAgICAgCiAgICBfX3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsKICAgIGlm
IChfX3Jlc3VsdCA9PSAwKSB7CiAgICAgICAgdm9pZCogX19yID0gX1NfcmVmaWxsKF9TX3JvdW5k
X3VwKF9fbikpOwogICAgICAgIHJldHVybiBfX3I7CiAgICB9CiAgICAqX19teV9mcmVlX2xpc3Qg
PSBfX3Jlc3VsdCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgIHJldHVybiAoX19yZXN1bHQpOwog
IH07CiAgIAogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQog
IHsKICAgIF9PYmoqIF9fcSA9IChfT2JqKilfX3A7CiAgICBfT2JqKiAgKiBfX215X2ZyZWVfbGlz
dDsKICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgbWFsbG9jX2Fs
bG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBfX215
X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAgICAg
CiAgICBfX3EgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAqX19t
eV9mcmVlX2xpc3QgPSBfX3E7CiAgICAgCiAgfQogIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZv
aWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opOwp9IDsKdHlwZWRlZiBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8IGZhbHNlICwgMD4gYWxsb2M7CnR5cGVkZWYgX19kZWZh
dWx0X2FsbG9jX3RlbXBsYXRlPGZhbHNlLCAwPiBzaW5nbGVfY2xpZW50X2FsbG9jOwp0ZW1wbGF0
ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqCl9fZGVmYXVsdF9hbGxvY190ZW1w
bGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCYgX19ub2JqcykKewogICAgY2hhciogX19yZXN1bHQ7CiAgICBzaXplX3QgX190b3RhbF9i
eXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICBzaXplX3QgX19ieXRlc19sZWZ0ID0gX1NfZW5k
X2ZyZWUgLSBfU19zdGFydF9mcmVlOwogICAgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFsX2J5
dGVzKSB7CiAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0
X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfSBl
bHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKSB7CiAgICAgICAgX19ub2JqcyA9IChpbnQp
KF9fYnl0ZXNfbGVmdC9fX3NpemUpOwogICAgICAgIF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBf
X25vYmpzOwogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICBfU19zdGFy
dF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0g
ZWxzZSB7CiAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0ID0KCSAgMiAqIF9fdG90YWxfYnl0
ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3NpemUgPj4gNCk7CiAgICAgICAgIAogICAgICAgIGlm
IChfX2J5dGVzX2xlZnQgPiAwKSB7CiAgICAgICAgICAgIF9PYmoqICAqIF9fbXlfZnJlZV9saXN0
ID0KICAgICAgICAgICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5k
ZXgoX19ieXRlc19sZWZ0KTsKICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAtPiBf
TV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgKl9fbXlfZnJl
ZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgfQogICAgICAgIF9TX3N0YXJ0
X2ZyZWUgPSAoY2hhciopbWFsbG9jKF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAgICBpZiAoMCA9PSBf
U19zdGFydF9mcmVlKSB7CiAgICAgICAgICAgIHNpemVfdCBfX2k7CiAgICAgICAgICAgIF9PYmoq
ICAqIF9fbXlfZnJlZV9saXN0OwoJICAgIF9PYmoqIF9fcDsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgZm9yIChfX2kgPSBfX3NpemU7IF9faSA8
PSBfTUFYX0JZVEVTOyBfX2kgKz0gX0FMSUdOKSB7CiAgICAgICAgICAgICAgICBfX215X2ZyZWVf
bGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9faSk7CiAgICAgICAgICAg
ICAgICBfX3AgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgICBpZiAoMCAhPSBfX3Ap
IHsKICAgICAgICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3AgLT4gX01fZnJlZV9s
aXN0X2xpbms7CiAgICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7
CiAgICAgICAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19pOwog
ICAgICAgICAgICAgICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMp
KTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICB9CgkgICAgX1NfZW5kX2ZyZWUgPSAwOwkgCiAgICAgICAgICAg
IF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX2J5dGVzX3Rv
X2dldCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAg
fQogICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAgICAgICBfU19lbmRf
ZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3RvX2dldDsKICAgICAgICByZXR1cm4oX1Nf
Y2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAgICB9Cn0KdGVtcGxhdGUgPGJvb2wgX190
aHJlYWRzLCBpbnQgX19pbnN0Pgp2b2lkKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJl
YWRzLCBfX2luc3Q+OjpfU19yZWZpbGwoc2l6ZV90IF9fbikKewogICAgaW50IF9fbm9ianMgPSAy
MDsKICAgIGNoYXIqIF9fY2h1bmsgPSBfU19jaHVua19hbGxvYyhfX24sIF9fbm9ianMpOwogICAg
X09iaiogICogX19teV9mcmVlX2xpc3Q7CiAgICBfT2JqKiBfX3Jlc3VsdDsKICAgIF9PYmoqIF9f
Y3VycmVudF9vYmo7CiAgICBfT2JqKiBfX25leHRfb2JqOwogICAgaW50IF9faTsKICAgIGlmICgx
ID09IF9fbm9ianMpIHJldHVybihfX2NodW5rKTsKICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJl
ZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKICAgICAKICAgICAgX19yZXN1bHQgPSAo
X09iaiopX19jaHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0X29iaiA9IChfT2Jq
KikoX19jaHVuayArIF9fbik7CiAgICAgIGZvciAoX19pID0gMTsgOyBfX2krKykgewogICAgICAg
IF9fY3VycmVudF9vYmogPSBfX25leHRfb2JqOwogICAgICAgIF9fbmV4dF9vYmogPSAoX09iaiop
KChjaGFyKilfX25leHRfb2JqICsgX19uKTsKICAgICAgICBpZiAoX19ub2JqcyAtIDEgPT0gX19p
KSB7CiAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSAwOwog
ICAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfX2N1cnJlbnRf
b2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29iajsKICAgICAgICB9CiAgICAgIH0K
ICAgIHJldHVybihfX3Jlc3VsdCk7Cn0KdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+
CnZvaWQqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6cmVhbGxvY2F0
ZSh2b2lkKiBfX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgX19vbGRfc3osCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uZXdfc3opCnsKICAgIHZvaWQqIF9fcmVzdWx0
OwogICAgc2l6ZV90IF9fY29weV9zejsKICAgIGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhf
QllURVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJu
KHJlYWxsb2MoX19wLCBfX25ld19zeikpOwogICAgfQogICAgaWYgKF9TX3JvdW5kX3VwKF9fb2xk
X3N6KSA9PSBfU19yb3VuZF91cChfX25ld19zeikpIHJldHVybihfX3ApOwogICAgX19yZXN1bHQg
PSBhbGxvY2F0ZShfX25ld19zeik7CiAgICBfX2NvcHlfc3ogPSBfX25ld19zeiA+IF9fb2xkX3N6
PyBfX29sZF9zeiA6IF9fbmV3X3N6OwogICAgbWVtY3B5KF9fcmVzdWx0LCBfX3AsIF9fY29weV9z
eik7CiAgICBkZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOwogICAgcmV0dXJuKF9fcmVzdWx0KTsK
fQojIDYwMiAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1h
aXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwoj
IDY4OSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz
LjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwp0ZW1w
bGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqIF9fZGVmYXVsdF9hbGxvY190
ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3N0YXJ0X2ZyZWUgPSAwOwp0ZW1wbGF0ZSA8
Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0
ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2VuZF9mcmVlID0gMDsKdGVtcGxhdGUgPGJvb2wgX190
aHJlYWRzLCBpbnQgX19pbnN0PgpzaXplX3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
ZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRz
LCBpbnQgX19pbnN0PgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+
OjpfT2JqKiAgCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gOjpf
U19mcmVlX2xpc3RbCiAgICBfTkZSRUVMSVNUUwpdID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIH07CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGFs
bG9jYXRvciB7CiAgdHlwZWRlZiBhbGxvYyBfQWxsb2M7ICAgICAgICAgICAKcHVibGljOgogIHR5
cGVkZWYgc2l6ZV90ICAgICBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgIGRpZmZlcmVu
Y2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9U
cCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAgcmVmZXJlbmNlOwogIHR5cGVk
ZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfVHAgICAgICAgIHZhbHVl
X3R5cGU7CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRl
ZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKICBhbGxvY2F0b3IoKSB0aHJvdygpICB7fQog
IGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3ImKSB0aHJvdygpICB7fQogIHRlbXBsYXRlIDxjbGFz
cyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+JikgdGhyb3coKSAge30KICB+
YWxsb2NhdG9yKCkgdGhyb3coKSAge30KICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkg
Y29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZl
cmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgIAogICAKICBfVHAqIGFsbG9jYXRl
KHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwID8g
c3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAg
ICAgICAgICAgICAgICAgICAgOiAwOwogIH0KICAgCiAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIg
X19wLCBzaXplX3R5cGUgX19uKQogICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBz
aXplb2YoX1RwKSk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpIAogICAg
eyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CiAgdm9pZCBjb25zdHJ1Y3QocG9p
bnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZv
aWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9Owp0ZW1wbGF0ZTw+CmNs
YXNzIGFsbG9jYXRvcjx2b2lkPiB7CiAgdHlwZWRlZiBzaXplX3QgICAgICBzaXplX3R5cGU7CiAg
dHlwZWRlZiBwdHJkaWZmX3QgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkKiAgICAg
ICBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVm
IHZvaWQgICAgICAgIHZhbHVlX3R5cGU7CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCBy
ZWJpbmQgewogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKfTsKdGVtcGxh
dGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGFs
bG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIHRydWU7Cn0K
dGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIGZh
bHNlOwp9CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2Nh
dG9yIHsKICBfQWxsb2MgX191bmRlcmx5aW5nX2FsbG9jOwogIHR5cGVkZWYgc2l6ZV90ICAgIHNp
emVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBf
VHAqICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAg
dHlwZWRlZiBfVHAmICAgICAgIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3Rf
cmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwICAgICAgICB2YWx1ZV90eXBlOwogIHRlbXBsYXRlIDxj
bGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwg
X0FsbG9jPiBvdGhlcjsKICB9OwogIF9fYWxsb2NhdG9yKCkgdGhyb3coKSAge30KICBfX2FsbG9j
YXRvcihjb25zdCBfX2FsbG9jYXRvciYgX19hKSB0aHJvdygpIAogICAgOiBfX3VuZGVybHlpbmdf
YWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4K
ICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93
KCkgCiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQog
IH5fX2FsbG9jYXRvcigpIHRocm93KCkgIHt9CiAgcG9pbnRlciBhZGRyZXNzKHJlZmVyZW5jZSBf
X3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KICBjb25zdF9wb2ludGVyIGFkZHJlc3MoY29uc3Rf
cmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogICAKICBfVHAqIGFsbG9jYXRl
KHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAg
ICAgICAgPyBzdGF0aWNfY2FzdDxfVHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19u
ICogc2l6ZW9mKF9UcCkpKQogICAgICAgIDogMDsKICB9CiAgIAogIHZvaWQgZGVhbGxvY2F0ZShw
b2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxs
b2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1RwKSk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBj
b25zdCB0aHJvdygpIAogICAgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CiAg
dm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkg
X1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsg
fQp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxs
b2M+IHsKICB0eXBlZGVmIHNpemVfdCAgICAgIHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZf
dCAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqICAgICAgIHBvaW50ZXI7CiAgdHlw
ZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgdmFs
dWVfdHlwZTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBl
ZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKfTsKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fYWxs
b2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
X2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlp
bmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fYWxsb2NhdG9y
PF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9j
YXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxs
b2MgIT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KdGVtcGxhdGUgPGludCBpbnN0Pgppbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JiwK
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0
PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQp0ZW1wbGF0ZSA8aW50IF9faW5zdD4KaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JiwKICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JikK
ewogIHJldHVybiBmYWxzZTsKfQp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+
CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f
dGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQp0
ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmlubGluZSBib29sIG9wZXJhdG9y
IT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYsCiAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
ZWFkcywgX19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KdGVtcGxhdGUgPGNsYXNzIF9BbGxv
Yz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JiwKICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVy
biB0cnVlOwp9CnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
ZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gZmFsc2U7Cn0KdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4Kc3RydWN0IF9BbGxvY190cmFpdHMKewogIHN0YXRpYyBj
b25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IGZhbHNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Fs
bG9jYXRvcjo6ICAgcmViaW5kPF9UcD46Om90aGVyCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsK
fTsKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4KY29uc3QgYm9vbCBfQWxs
b2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9TX2luc3RhbmNlbGVzczsKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX1RwMT4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBhbGxvY2F0b3I8
X1RwMT4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0
eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGFsbG9jPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIGFs
bG9jYXRvcjxfVHA+IGFsbG9jYXRvcl90eXBlOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBpbnQg
X19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRl
PF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsK
ICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5z
dD4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxs
b2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9Owp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1Rw
LCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KewogIHN0YXRp
YyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxs
b2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAg
ICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRf
YWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90
eXBlOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2Nf
dHJhaXRzPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBf
U19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdf
YWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBk
ZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9UcDEsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAg
ICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2NfdGVtcGxh
dGU8X19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRy
dWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxf
X2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9j
X2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxv
Y190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf
X3RociwgX19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9
IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxs
b2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAg
ICAgICAgYWxsb2NhdG9yX3R5cGU7Cn07CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEs
IGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9jYXRvcjxfVHAx
LCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFu
Y2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRlYnVnX2FsbG9jPF9B
bGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgZGVidWdfYWxs
b2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwojIDIxICIvYW9sbmV0L3BrZy9nY2MtMi45
NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL2FsbG9jLmgiIDIgMwojIDQwICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xp
Yi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL2FsbG9jLmgiIDMKIyAzOSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxp
Yi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9z
dGQvYmFzdHJpbmcuaCIgMiAzCmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9z
dHJlYW07CiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWli
bS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvciIgMSAz
CiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz
LjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfcmVsb3BzLmgiIDEgMwp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9UcCYgX194
LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9CnRlbXBsYXRlIDxj
bGFzcyBfVHA+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBfVHAmIF9feCwgY29uc3QgX1Rw
JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGlu
ZSBib29sIG9wZXJhdG9yPD0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAgcmV0
dXJuICEoX195IDwgX194KTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVy
YXRvcj49KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feCA8
IF9feSk7Cn0KIyAzMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBj
LWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvciIg
MiAzCiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1h
aXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzNDIgIi9hb2xuZXQvcGtn
L2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1
ZGUvc3RkZGVmLmgiIDMgNAojIDMyICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGli
L3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2l0
ZXJhdG9yIiAyIDMKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2Vy
cGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVy
YXRvci5oIiAxIDMKc3RydWN0IGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IG91dHB1dF9p
dGVyYXRvcl90YWcge307CnN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBpbnB1
dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6IHB1
YmxpYyBmb3J3YXJkX2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0
b3JfdGFnIDogcHVibGljIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9Owp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBpbnB1dF9pdGVyYXRvciB7CiAgdHlw
ZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAg
ICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICBk
aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0
eXBlZGVmIF9UcCYgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07CnN0cnVjdCBvdXRwdXRfaXRl
cmF0b3IgewogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK
ICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQg
ICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAg
ICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGZvcndhcmRfaXRl
cmF0b3IgewogIHR5cGVkZWYgZm9yd2FyZF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7
CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rp
c3RhbmNlICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICAg
ICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAgICAgICAgICAgIHJlZmVyZW5j
ZTsKfTsKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgYmlkaXJl
Y3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBp
dGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNl
X3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5
cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9Owp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9y
IHsKICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5
OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBl
ZGVmIF9EaXN0YW5jZSAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm
IF9UcCogICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAg
ICAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07CiMgOTggIi9hb2xuZXQvcGtnL2djYy0yLjk1
LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2lu
Y2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4K
c3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6Oml0
ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0
ZXJhdG9yOjp2YWx1ZV90eXBlICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUg
X0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfSXRlcmF0b3I6OnBvaW50ZXIgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfSXRlcmF0b3I6OnJlZmVyZW5jZSAgICAgICAgIHJlZmVyZW5jZTsKfTsKdGVtcGxh
dGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAgdHlwZWRlZiBy
YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9U
cCAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90
ICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAg
ICAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAg
ICAgICAgIHJlZmVyZW5jZTsKfTsKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9y
X3RyYWl0czxjb25zdCBfVHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh
ZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICAgICAgICAgICAgICAgICAgIGRpZmZl
cmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0IF9UcCogICAgICAgICAgICAgICAgICBwb2ludGVy
OwogIHR5cGVkZWYgY29uc3QgX1RwJiAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKdGVt
cGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy
Pjo6aXRlcmF0b3JfY2F0ZWdvcnkKX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYpCnsK
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVn
b3J5IF9DYXRlZ29yeTsKICByZXR1cm4gX0NhdGVnb3J5KCk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9J
dGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90
eXBlKgpfX2Rpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXImKQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0
PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSo+KDApOwp9
CnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SXRlcj46OnZhbHVlX3R5cGUqCl9fdmFsdWVfdHlwZShjb25zdCBfSXRlciYpCnsKICByZXR1cm4g
c3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSo+
KDApOwp9CnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cml0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9J
dGVyJiBfX2kpIHsgcmV0dXJuIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19pKTsgfQp0ZW1wbGF0ZSA8
Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZm
ZXJlbmNlX3R5cGUqCmRpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX19k
aXN0YW5jZV90eXBlKF9faSk7IH0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKdmFsdWVfdHlwZShjb25zdCBf
SXRlciYgX19pKSB7IHJldHVybiBfX3ZhbHVlX3R5cGUoX19pKTsgfQojIDI1OSAiL2FvbG5ldC9w
a2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShf
SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgX0Rpc3RhbmNlJiBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIHdoaWxl
IChfX2ZpcnN0ICE9IF9fbGFzdCkgeyArK19fZmlyc3Q7ICsrX19uOyB9Cn0KdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBf
X2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCAKICAgICAgICAgICAgICAgICAg
ICAgICBfRGlzdGFuY2UmIF9fbiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKICBfX24g
Kz0gX19sYXN0IC0gX19maXJzdDsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNs
YXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX0Rpc3RhbmNl
JiBfX24pCnsKICBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uLCBpdGVyYXRvcl9jYXRl
Z29yeShfX2ZpcnN0KSk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgppbmxpbmUg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl
Cl9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
LCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0
SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICB3aGlsZSAoX19maXJzdCAhPSBf
X2xhc3QpIHsKICAgICsrX19maXJzdDsgKytfX247CiAgfQogIHJldHVybiBfX247Cn0KdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5j
ZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
bGFzdCwKICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIHJldHVybiBf
X2xhc3QgLSBfX2ZpcnN0Owp9CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KaW5saW5l
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlw
ZQpkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qp
IHsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0
ZXJhdG9yX2NhdGVnb3J5IAogICAgX0NhdGVnb3J5OwogIHJldHVybiBfX2Rpc3RhbmNlKF9fZmly
c3QsIF9fbGFzdCwgX0NhdGVnb3J5KCkpOwp9CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfSW5wdXRJdGVyJiBfX2ksIF9E
aXN0YW5jZSBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykgewogIHdoaWxlIChfX24tLSkgKytfX2k7
Cn0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5j
ZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rp
c3RhbmNlIF9fbiwgCiAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
X3RhZykgewogIGlmIChfX24gPj0gMCkKICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgZWxzZQog
ICAgd2hpbGUgKF9fbisrKSAtLV9faTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfUmFuZG9tQWNj
ZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwgCiAgICAgICAgICAgICAgICAgICAgICBy
YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9faSArPSBfX247Cn0KdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGFkdmFuY2Uo
X0lucHV0SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbikgewogIF9fYWR2YW5jZShfX2ksIF9f
biwgaXRlcmF0b3JfY2F0ZWdvcnkoX19pKSk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+
CmNsYXNzIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIqIGNv
bnRhaW5lcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJf
dHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg
dHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAg
ICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAg
ICAgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwogIGV4
cGxpY2l0IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIo
Jl9feCkge30KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0o
Y29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGNv
bnRhaW5lci0+cHVzaF9iYWNrKF9fdmFsdWUpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBiYWNr
X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7
IH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0
dXJuICp0aGlzOyB9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9y
KysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9OwojIDM3OCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUu
My9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5j
bHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4K
aW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGJhY2tfaW5zZXJ0ZXIoX0Nv
bnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
KF9feCk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGZyb250X2luc2VydF9p
dGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0
eXBlZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRw
dXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAgICAg
ICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRl
ZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKICBleHBsaWNpdCBmcm9udF9pbnNlcnRf
aXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7fQogIGZyb250X2lu
c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0Nv
bnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGNvbnRhaW5lci0+cHVzaF9mcm9u
dChfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9y
PF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGZyb250X2luc2Vy
dF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAg
ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1
cm4gKnRoaXM7IH0KfTsKIyA0MTcgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIv
cG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rs
X2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmlubGluZSBmcm9udF9p
bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gZnJvbnRfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194
KSB7CiAgcmV0dXJuIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOwp9CnRl
bXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBpbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0
ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwogIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJh
dG9yIGl0ZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVy
X3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog
IHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAg
ICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAg
ICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKICBp
bnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVy
YXRvciBfX2kpIAogICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQogIGluc2VydF9p
dGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5l
cjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChp
dGVyLCBfX3ZhbHVlKTsKICAgICsraXRlcjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5zZXJ0
X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGlu
c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9
CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4g
KnRoaXM7IH0KfTsKIyA0NTkgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93
ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0
ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXIsIGNsYXNzIF9JdGVyYXRvcj4K
aW5saW5lIAppbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gaW5zZXJ0ZXIoX0NvbnRhaW5lciYg
X194LCBfSXRlcmF0b3IgX19pKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVy
YXRvciBfX2l0ZXI7CiAgcmV0dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsIF9f
aXRlcihfX2kpKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgY2xh
c3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJiwgCiAgICAgICAgICBjbGFzcyBfRGlzdGFu
Y2UgPSBwdHJkaWZmX3Q+IApjbGFzcyByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3Igewog
IHR5cGVkZWYgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRl
cmF0b3IsIF9UcCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jl
ZmVyZW5jZSwgX0Rpc3RhbmNlPiAgX1NlbGY7CnByb3RlY3RlZDoKICBfQmlkaXJlY3Rpb25hbEl0
ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf
dGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICAgICAgICAgIGRpZmZl
cmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7
CiAgdHlwZWRlZiBfUmVmZXJlbmNlICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CiAgcmV2ZXJz
ZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2JpZGlyZWN0
aW9uYWxfaXRlcmF0b3IoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3gpCiAgICA6IGN1cnJlbnQo
X194KSB7fQogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1
cnJlbnQ7IH0KICBfUmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9CaWRpcmVjdGlv
bmFsSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgcmV0dXJuICotLV9fdG1wOwogIH0KICBw
b2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQogIF9T
ZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0K
ICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0t
Y3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAg
ICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50
KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9f
dG1wOwogIH0KfTsKIyA1NTAgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93
ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0
ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9CaUl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1Jl
ZiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PSgKICAg
IGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYs
IF9EaXN0YW5jZT4mIF9feCwgCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0
b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3kpCnsKICByZXR1cm4gX194LmJh
c2UoKSA9PSBfX3kuYmFzZSgpOwp9CnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmNsYXNzIHJl
dmVyc2VfaXRlcmF0b3IgCnsKcHJvdGVjdGVkOgogIF9JdGVyYXRvciBjdXJyZW50OwpwdWJsaWM6
CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3Jf
Y2F0ZWdvcnkKICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIHZhbHVlX3R5
cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVy
ZW5jZV90eXBlCiAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlcgogICAgICAgICAgcG9pbnRlcjsKICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UKICAg
ICAgICAgIHJlZmVyZW5jZTsKICB0eXBlZGVmIF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOwogIHR5
cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+IF9TZWxmOwpwdWJsaWM6CiAgcmV2ZXJz
ZV9pdGVyYXRvcigpIHt9CiAgZXhwbGljaXQgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBl
IF9feCkgOiBjdXJyZW50KF9feCkge30KICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IF9TZWxmJiBf
X3gpIDogY3VycmVudChfX3guY3VycmVudCkge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CiAg
cmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQogICAg
OiBjdXJyZW50KF9feC5iYXNlKCkpIHt9CiAgICAKICBpdGVyYXRvcl90eXBlIGJhc2UoKSBjb25z
dCB7IHJldHVybiBjdXJyZW50OyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAg
IF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAgfQogIHBv
aW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CiAgX1Nl
bGYmIG9wZXJhdG9yKysoKSB7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQog
IF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS1j
dXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAg
ICsrY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQp
IHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gX190
bXA7CiAgfQogIF9TZWxmIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAg
ICByZXR1cm4gX1NlbGYoY3VycmVudCAtIF9fbik7CiAgfQogIF9TZWxmJiBvcGVyYXRvcis9KGRp
ZmZlcmVuY2VfdHlwZSBfX24pIHsKICAgIGN1cnJlbnQgLT0gX19uOwogICAgcmV0dXJuICp0aGlz
OwogIH0KICBfU2VsZiBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAg
cmV0dXJuIF9TZWxmKGN1cnJlbnQgKyBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItPShkaWZm
ZXJlbmNlX3R5cGUgX19uKSB7CiAgICBjdXJyZW50ICs9IF9fbjsKICAgIHJldHVybiAqdGhpczsK
ICB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyBy
ZXR1cm4gKigqdGhpcyArIF9fbik7IH0gIAp9OyAKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4K
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feCwgCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOwp9CnRlbXBs
YXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCByZXZlcnNl
X2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwgCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBy
ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIDwg
X194LmJhc2UoKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUg
cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKb3BlcmF0b3ItKGNv
bnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LCAKICAgICAgICAgIGNvbnN0IHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feS5iYXNlKCkgLSBf
X3guYmFzZSgpOwp9CnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4gCm9wZXJhdG9yKyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9J
dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCkgewogIHJldHVybiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
YXRvcj4oX194LmJhc2UoKSAtIF9fbik7Cn0KIyA4MDUgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMv
bGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rp
c3QgPSBwdHJkaWZmX3Q+IApjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yIHsKICBmcmllbmQgYm9vbCBv
cGVyYXRvcj09IDw+ICAoY29uc3QgaXN0cmVhbV9pdGVyYXRvciYsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvciYpOwpw
cm90ZWN0ZWQ6CiAgaXN0cmVhbSogX01fc3RyZWFtOwogIF9UcCBfTV92YWx1ZTsKICBib29sIF9N
X2VuZF9tYXJrZXI7CiAgdm9pZCBfTV9yZWFkKCkgewogICAgX01fZW5kX21hcmtlciA9ICgqX01f
c3RyZWFtKSA/IHRydWUgOiBmYWxzZTsKICAgIGlmIChfTV9lbmRfbWFya2VyKSAqX01fc3RyZWFt
ID4+IF9NX3ZhbHVlOwogICAgX01fZW5kX21hcmtlciA9ICgqX01fc3RyZWFtKSA/IHRydWUgOiBm
YWxzZTsKICB9CnB1YmxpYzoKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyAgaXRlcmF0b3Jf
Y2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlw
ZWRlZiBfRGlzdCAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0
IF9UcCogICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYgICAgICAgICAgcmVm
ZXJlbmNlOwogIGlzdHJlYW1faXRlcmF0b3IoKSA6IF9NX3N0cmVhbSgmY2luKSwgX01fZW5kX21h
cmtlcihmYWxzZSkge30KICBpc3RyZWFtX2l0ZXJhdG9yKGlzdHJlYW0mIF9fcykgOiBfTV9zdHJl
YW0oJl9fcykgeyBfTV9yZWFkKCk7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyBy
ZXR1cm4gX01fdmFsdWU7IH0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAm
KG9wZXJhdG9yKigpKTsgfQogIGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdD4mIG9wZXJhdG9y
KysoKSB7IAogICAgX01fcmVhZCgpOyAKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXN0cmVhbV9p
dGVyYXRvcjxfVHAsIF9EaXN0PiBvcGVyYXRvcisrKGludCkgIHsKICAgIGlzdHJlYW1faXRlcmF0
b3I8X1RwLCBfRGlzdD4gX190bXAgPSAqdGhpczsKICAgIF9NX3JlYWQoKTsKICAgIHJldHVybiBf
X3RtcDsKICB9Cn07CiMgODY0ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bv
d2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9p
dGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYg
X194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBf
RGlzdGFuY2U+JiBfX3kpIHsKICByZXR1cm4gKF9feC5fTV9zdHJlYW0gPT0gX195Ll9NX3N0cmVh
bSAmJgogICAgICAgICAgX194Ll9NX2VuZF9tYXJrZXIgPT0gX195Ll9NX2VuZF9tYXJrZXIpIHx8
CiAgICAgICAgIF9feC5fTV9lbmRfbWFya2VyID09IGZhbHNlICYmIF9feS5fTV9lbmRfbWFya2Vy
ID09IGZhbHNlOwp9CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG9zdHJlYW1faXRlcmF0b3Ig
ewpwcm90ZWN0ZWQ6CiAgb3N0cmVhbSogX01fc3RyZWFtOwogIGNvbnN0IGNoYXIqIF9NX3N0cmlu
ZzsKcHVibGljOgogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29y
eTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZv
aWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAg
ICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7
CiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtJiBfX3MpIDogX01fc3RyZWFtKCZfX3MpLCBfTV9z
dHJpbmcoMCkge30KICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW0mIF9fcywgY29uc3QgY2hhciog
X19jKSAKICAgIDogX01fc3RyZWFtKCZfX3MpLCBfTV9zdHJpbmcoX19jKSAge30KICBvc3RyZWFt
X2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yPShjb25zdCBfVHAmIF9fdmFsdWUpIHsgCiAgICAqX01f
c3RyZWFtIDw8IF9fdmFsdWU7CiAgICBpZiAoX01fc3RyaW5nKSAqX01fc3RyZWFtIDw8IF9NX3N0
cmluZzsKICAgIHJldHVybiAqdGhpczsKICB9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVy
YXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0
b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9IAogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0
b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9IAp9OwojIDkwNyAiL2FvbG5ldC9wa2cvZ2NjLTIu
OTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwojIDM4ICIvYW9sbmV0L3BrZy9nY2MtMi45
NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL2l0ZXJhdG9yIiAyIDMKIyA0NCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9s
aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMiAzCmV4dGVybiB2b2lkIF9fb3V0X29mX3JhbmdlIChj
b25zdCBjaGFyICopOwpleHRlcm4gdm9pZCBfX2xlbmd0aF9lcnJvciAoY29uc3QgY2hhciAqKTsK
dGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMgPSBzdHJpbmdfY2hhcl90cmFpdHM8
Y2hhclQ+LAoJICBjbGFzcyBBbGxvY2F0b3IgPSBhbGxvYyA+CmNsYXNzIGJhc2ljX3N0cmluZwp7
CnByaXZhdGU6CiAgc3RydWN0IFJlcCB7CiAgICBzaXplX3QgbGVuLCByZXMsIHJlZjsKICAgIGJv
b2wgc2VsZmlzaDsKICAgIGNoYXJUKiBkYXRhICgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhclQgKj4odGhpcyArIDEpOyB9CiAgICBjaGFyVCYgb3BlcmF0b3JbXSAoc2l6ZV90IHMpIHsg
cmV0dXJuIGRhdGEgKCkgW3NdOyB9CiAgICBjaGFyVCogZ3JhYiAoKSB7IGlmIChzZWxmaXNoKSBy
ZXR1cm4gY2xvbmUgKCk7ICsrcmVmOyByZXR1cm4gZGF0YSAoKTsgfQojIDEwOCAiL2FvbG5ldC9w
a2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMwogICAgdm9pZCByZWxlYXNl
ICgpIHsgaWYgKC0tcmVmID09IDApIGRlbGV0ZSB0aGlzOyB9CiAgICBpbmxpbmUgc3RhdGljIHZv
aWQgKiBvcGVyYXRvciBuZXcgKHNpemVfdCwgc2l6ZV90KTsKICAgIGlubGluZSBzdGF0aWMgdm9p
ZCBvcGVyYXRvciBkZWxldGUgKHZvaWQgKik7CiAgICBpbmxpbmUgc3RhdGljIFJlcCogY3JlYXRl
IChzaXplX3QpOwogICAgY2hhclQqIGNsb25lICgpOwogICAgaW5saW5lIHZvaWQgY29weSAoc2l6
ZV90LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQgbW92ZSAoc2l6ZV90
LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQgc2V0ICAoc2l6ZV90LCBj
b25zdCBjaGFyVCwgICBzaXplX3QpOwogICAgaW5saW5lIHN0YXRpYyBib29sIGV4Y2Vzc19zbG9w
IChzaXplX3QsIHNpemVfdCk7CiAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBmcm9iX3NpemUgKHNp
emVfdCk7CiAgcHJpdmF0ZToKICAgIFJlcCAmb3BlcmF0b3I9IChjb25zdCBSZXAgJik7CiAgfTsK
cHVibGljOgogIHR5cGVkZWYJICAgdHJhaXRzCQl0cmFpdHNfdHlwZTsKICB0eXBlZGVmIHR5cGVu
YW1lIHRyYWl0czo6Y2hhcl90eXBlCXZhbHVlX3R5cGU7CiAgdHlwZWRlZgkgICBBbGxvY2F0b3IJ
CWFsbG9jYXRvcl90eXBlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0
cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjaGFyVCYgcmVmZXJlbmNlOwogIHR5
cGVkZWYgY29uc3QgY2hhclQmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIGNoYXJUKiBwb2lu
dGVyOwogIHR5cGVkZWYgY29uc3QgY2hhclQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBwb2lu
dGVyIGl0ZXJhdG9yOwogIHR5cGVkZWYgY29uc3RfcG9pbnRlciBjb25zdF9pdGVyYXRvcjsKICB0
eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICB0
eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcjsKICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXpl
X3R5cGU+KC0xKTsKcHJpdmF0ZToKICBSZXAgKnJlcCAoKSBjb25zdCB7IHJldHVybiByZWludGVy
cHJldF9jYXN0PFJlcCAqPihkYXQpIC0gMTsgfQogIHZvaWQgcmVwdXAgKFJlcCAqcCkgeyByZXAg
KCktPnJlbGVhc2UgKCk7IGRhdCA9IHAtPmRhdGEgKCk7IH0KcHVibGljOgogIGNvbnN0IGNoYXJU
KiBkYXRhICgpIGNvbnN0CiAgICB7IHJldHVybiByZXAgKCktPmRhdGEoKTsgfQogIHNpemVfdHlw
ZSBsZW5ndGggKCkgY29uc3QKICAgIHsgcmV0dXJuIHJlcCAoKS0+bGVuOyB9CiAgc2l6ZV90eXBl
IHNpemUgKCkgY29uc3QKICAgIHsgcmV0dXJuIHJlcCAoKS0+bGVuOyB9CiAgc2l6ZV90eXBlIGNh
cGFjaXR5ICgpIGNvbnN0CiAgICB7IHJldHVybiByZXAgKCktPnJlczsgfQogIHNpemVfdHlwZSBt
YXhfc2l6ZSAoKSBjb25zdAogICAgeyByZXR1cm4gKG5wb3MgLSAxKS9zaXplb2YgKGNoYXJUKTsg
fQkJIAogIGJvb2wgZW1wdHkgKCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemUgKCkgPT0gMDsgfQog
IGJhc2ljX3N0cmluZyYgb3BlcmF0b3I9IChjb25zdCBiYXNpY19zdHJpbmcmIHN0cikKICAgIHsK
ICAgICAgaWYgKCZzdHIgIT0gdGhpcykgeyByZXAgKCktPnJlbGVhc2UgKCk7IGRhdCA9IHN0ci5y
ZXAgKCktPmdyYWIgKCk7IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQogIGV4cGxpY2l0IGJh
c2ljX3N0cmluZyAoKTogZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyB9CiAgYmFzaWNfc3RyaW5nIChj
b25zdCBiYXNpY19zdHJpbmcmIHN0cik6IGRhdCAoc3RyLnJlcCAoKS0+Z3JhYiAoKSkgeyB9CiAg
YmFzaWNfc3RyaW5nIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcywgc2l6
ZV90eXBlIG4gPSBucG9zKQogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAoc3Ry
LCBwb3MsIG4pOyB9CiAgYmFzaWNfc3RyaW5nIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4p
CiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChzLCBuKTsgfQogIGJhc2ljX3N0
cmluZyAoY29uc3QgY2hhclQqIHMpCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWdu
IChzKTsgfQogIGJhc2ljX3N0cmluZyAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICA6IGRhdCAo
bmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChuLCBjKTsgfQogIHRlbXBsYXRlPGNsYXNzIElucHV0
SXRlcmF0b3I+CiAgICBiYXNpY19zdHJpbmcoSW5wdXRJdGVyYXRvciBfX2JlZ2luLCBJbnB1dEl0
ZXJhdG9yIF9fZW5kKQogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAoX19iZWdp
biwgX19lbmQpOyB9CiAgfmJhc2ljX3N0cmluZyAoKQogICAgeyByZXAgKCktPnJlbGVhc2UgKCk7
IH0KICB2b2lkIHN3YXAgKGJhc2ljX3N0cmluZyAmcykgeyBjaGFyVCAqZCA9IGRhdDsgZGF0ID0g
cy5kYXQ7IHMuZGF0ID0gZDsgfQogIGJhc2ljX3N0cmluZyYgYXBwZW5kIChjb25zdCBiYXNpY19z
dHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAsCgkJCXNpemVfdHlwZSBuID0gbnBvcykKICAg
IHsgcmV0dXJuIHJlcGxhY2UgKGxlbmd0aCAoKSwgMCwgc3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNf
c3RyaW5nJiBhcHBlbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAgIHsgcmV0dXJu
IHJlcGxhY2UgKGxlbmd0aCAoKSwgMCwgcywgbik7IH0KICBiYXNpY19zdHJpbmcmIGFwcGVuZCAo
Y29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiBhcHBlbmQgKHMsIHRyYWl0czo6bGVuZ3RoIChz
KSk7IH0KICBiYXNpY19zdHJpbmcmIGFwcGVuZCAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7
IHJldHVybiByZXBsYWNlIChsZW5ndGggKCksIDAsIG4sIGMpOyB9CiAgdGVtcGxhdGU8Y2xhc3Mg
SW5wdXRJdGVyYXRvcj4KICAgIGJhc2ljX3N0cmluZyYgYXBwZW5kKElucHV0SXRlcmF0b3IgZmly
c3QsIElucHV0SXRlcmF0b3IgbGFzdCkKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGllbmQgKCksIGll
bmQgKCksIGZpcnN0LCBsYXN0KTsgfQogIHZvaWQgcHVzaF9iYWNrKGNoYXJUIF9fYykKICB7IGFw
cGVuZCgxLCBfX2MpOyB9CiAgCiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24gKGNvbnN0IGJhc2ljX3N0
cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCwKCQkJc2l6ZV90eXBlIG4gPSBucG9zKQogICAg
eyByZXR1cm4gcmVwbGFjZSAoMCwgbnBvcywgc3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNfc3RyaW5n
JiBhc3NpZ24gKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAgIHsgcmV0dXJuIHJlcGxh
Y2UgKDAsIG5wb3MsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24gKGNvbnN0IGNoYXJU
KiBzKQogICAgeyByZXR1cm4gYXNzaWduIChzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgYmFz
aWNfc3RyaW5nJiBhc3NpZ24gKHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4gcmVw
bGFjZSAoMCwgbnBvcywgbiwgYyk7IH0KICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9yPgog
ICAgYmFzaWNfc3RyaW5nJiBhc3NpZ24oSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdG