public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/8226: g++ unable to complete compilation
@ 2002-10-14 12:46 kalbun
  0 siblings, 0 replies; 2+ messages in thread
From: kalbun @ 2002-10-14 12:46 UTC (permalink / raw)
  To: gcc-gnats


>Number:         8226
>Category:       c++
>Synopsis:       g++ unable to complete compilation
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Oct 14 12:46:02 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     kalbun@inwind.it
>Release:        2.96
>Organization:
>Environment:
Mandrake linux 8.2
>Description:
Compilation of this file only succeeds with optimisation disabled. Using any level beyond zero results in the compilator never terminating the work and allocating an increasing amount of memory (I saw up to 300 Mb before stopping).
The problem is systematic.
>How-To-Repeat:
g++ -DHAVE_CONFIG_H -I. -I/home/sauron/cemento/cemento -I..   -DNDEBUG -DNO_DEBUG -O2 -O0 -Wall -I/usr/include/SDL -I/usr/include/paragui -I/usr/include/freetype2 -fno_exceptions -fno-check-new -fexceptions .c resources.cpp
>Fix:
Compile with -O0
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="resources.i"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="resources.i"

IyA5ICJyZXNvdXJjZXMuY3BwIgojIDEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAyOCAi
L3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAz
CiMgMjgzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMv
Y2RlZnMuaCIgMSAzCiMgMjg0ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzEyICIv
dXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIg
MSAzCiMgMzEzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMjkgIi91c3IvaW5jbHVk
ZS9zdGRpby5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4
Ni1tYW5kcmFrZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxOTkgIi91
c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL3N0ZGRl
Zi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyAzNSAiL3Vzci9pbmNsdWRlL3N0
ZGlvLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyNiAiL3Vz
ci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAx
IDMKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2xpYi9n
Y2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzIuOTYvaW5jbHVkZS9zdGRkZWYuaCIgMSAz
CiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQg
Y2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYg
dW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCgoK
CnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgX192YWxbMl07CiAgfSBfX3F1YWRfdDsK
dHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBfX3VfbG9uZyBfX3ZhbFsyXTsKICB9IF9fdV9xdWFkX3Q7
Cgp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191
aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2ln
bmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0
eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKCgoKdHlwZWRlZiBfX3F1YWRfdCAqX19x
YWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVkZWYgX191X2ludCBfX3Vp
ZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190Owp0
eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7CnR5cGVk
ZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xvZmZfdDsKdHlwZWRlZiBp
bnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVmIF9fdV9sb25nIF9fcmxp
bV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRlZiBfX3VfaW50IF9faWRf
dDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CgoK
dHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBs
b25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190Owp0eXBl
ZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190OwoK
dHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiBpbnQgX19jbG9ja2lkX3Q7CgoK
dHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVk
ZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoKCgp0eXBlZGVmIGxvbmcgaW50IF9f
Ymxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVmIF9fcXVh
ZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsKdHlwZWRl
ZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNu
dF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoKdHlwZWRlZiBfX3VfcXVh
ZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxv
bmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxh
cl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19z
b2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMK
IyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpz
dHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CiMg
MjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJl
YWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsK
CgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsK
CgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19kZXRhY2hzdGF0
ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFy
YW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJk
c2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVf
dCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0
cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2Fp
dGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15
Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tl
eV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21f
Y291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1
Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBl
ZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoK
CnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwojIDE0MCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRo
cmVhZHR5cGVzLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CiMgMTQ0
ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKIyAzNyAiL3Vzci9pbmNsdWRlL3N0ZGlv
LmgiIDIgMwojIDQ1ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9f
RklMRSBGSUxFOwojIDU1ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBf
SU9fRklMRSBfX0ZJTEU7CiMgNjUgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2xpYmlvLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzCiMgOSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMTAgIi91c3IvaW5jbHVk
ZS9fR19jb25maWcuaCIgMiAzCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFr
ZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMTIgIi91c3IvbGliL2dj
Yy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5
cGVkZWYgdW5zaWduZWQgaW50IHdpbnRfdDsKIyAxNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5o
IiAyIDMKIyAyNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvbGli
L2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAx
IDMKIyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy93Y2hhci5oIiAxIDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDY3ICIvdXNy
L2luY2x1ZGUvd2NoYXIuaCIgMwp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fY291bnQ7CiAgdW5p
b24KICB7CiAgICB3aW50X3QgX193Y2g7CiAgICBjaGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7
Cn0gX19tYnN0YXRlX3Q7CiMgMjUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgp0eXBl
ZGVmIHN0cnVjdAp7CiAgX19vZmZfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9H
X2Zwb3NfdDsKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21ic3RhdGVf
dCBfX3N0YXRlOwp9IF9HX2Zwb3M2NF90OwojIDQ0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9nY29u
di5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1
ZGUvZ2NvbnYuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAiL3Vz
ci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2Ut
bGludXgtZ251LzIuOTYvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93
Y2hhci5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91
c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoK
CiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8yLjk2L2luY2x1
ZGUvc3RkZGVmLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKCgoKZW51
bQp7CiAgX19HQ09OVl9PSyA9IDAsCiAgX19HQ09OVl9OT0NPTlYsCiAgX19HQ09OVl9OT0RCLAog
IF9fR0NPTlZfTk9NRU0sCgogIF9fR0NPTlZfRU1QVFlfSU5QVVQsCiAgX19HQ09OVl9GVUxMX09V
VFBVVCwKICBfX0dDT05WX0lMTEVHQUxfSU5QVVQsCiAgX19HQ09OVl9JTkNPTVBMRVRFX0lOUFVU
LAoKICBfX0dDT05WX0lMTEVHQUxfREVTQ1JJUFRPUiwKICBfX0dDT05WX0lOVEVSTkFMX0VSUk9S
Cn07CgoKCmVudW0KewogIF9fR0NPTlZfSVNfTEFTVCA9IDB4MDAwMSwKICBfX0dDT05WX0lHTk9S
RV9FUlJPUlMgPSAweDAwMDIKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsKc3RydWN0IF9fZ2Nv
bnZfc3RlcF9kYXRhOwpzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0OwpzdHJ1Y3QgX19nY29u
dl90cmFuc19kYXRhOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3RydWN0IF9fZ2Nv
bnZfc3RlcCAqLCBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIHNpemVfdCAqLCBp
bnQsIGludCk7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2luaXRfZmN0KSAoc3RydWN0IF9fZ2Nv
bnZfc3RlcCAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl9lbmRfZmN0KSAoc3RydWN0IF9fZ2Nv
bnZfc3RlcCAqKTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2ZjdCkgKHN0cnVjdCBf
X2djb252X3N0ZXAgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBf
X2djb252X3N0ZXBfZGF0YSAqLCB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29u
dl90cmFuc19jb250ZXh0X2ZjdCkgKHZvaWQgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFy
ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfcXVl
cnlfZmN0KSAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICoqKiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZf
dHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25zdCBjaGFyICopOwp0eXBlZGVmIHZvaWQgKCpf
X2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lkICopOwoKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0
YQp7CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJhbnNfZmN0OwogIF9fZ2NvbnZfdHJhbnNfY29u
dGV4dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsKICBfX2djb252X3RyYW5zX2VuZF9mY3QgX190
cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRh
ICpfX25leHQ7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXAKewogIHN0cnVjdCBfX2djb252X2xv
YWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwogIGNvbnN0IGNoYXIgKl9fbW9kbmFtZTsKCiAg
aW50IF9fY291bnRlcjsKCiAgY2hhciAqX19mcm9tX25hbWU7CiAgY2hhciAqX190b19uYW1lOwoK
ICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19n
Y29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50
IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25l
ZWRlZF90bzsKCgogIGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVj
dCBfX2djb252X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWdu
ZWQgY2hhciAqX19vdXRidWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2Nh
dGlvbl9jb3VudGVyOwoKCgogIGludCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9f
c3RhdGVwOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNf
ZGF0YSAqX190cmFuczsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXpl
X3QgX19uc3RlcHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICAgICAgICAgICAg
ICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGEgWzFdOwp9ICpfX2djb252X3Q7CiMg
NDUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCnR5cGVkZWYgdW5pb24KewogIHN0cnVj
dCBfX2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QKICB7CiAgICBzdHJ1Y3QgX19nY29udl9pbmZv
IF9fY2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhOwogIH0gX19jb21iaW5l
ZDsKfSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCA7CnR5cGVkZWYgaW50IF9H
X2ludDMyX3QgOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCA7CnR5cGVkZWYgdW5z
aWduZWQgaW50IF9HX3VpbnQzMl90IDsKIyAzMyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwoj
IDUzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1t
YW5kcmFrZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAiL3Vzci9s
aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8yLjk2L2luY2x1ZGUvc3RkYXJnLmgi
IDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyA1NCAiL3Vzci9p
bmNsdWRlL2xpYmlvLmgiIDIgMwojIDE2MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0
IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAxNzAgIi91c3IvaW5jbHVkZS9saWJpby5o
IiAzCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBz
dHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsKCgoKICBp
bnQgX3BvczsKIyAxOTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCn07CgoKZW51bSBfX2NvZGVj
dnRfcmVzdWx0CnsKICBfX2NvZGVjdnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRpYWwsCiAgX19jb2Rl
Y3Z0X2Vycm9yLAogIF9fY29kZWN2dF9ub2NvbnYKfTsKIyAyNjEgIi91c3IvaW5jbHVkZS9saWJp
by5oIiAzCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3Jl
YWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNo
YXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dy
aXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNo
YXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19z
YXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJ
TEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwogIF9fb2ZmX3QgX29s
ZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIg
X3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xv
Y2s7CiMgMzA1ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoK
CgoKCiAgdm9pZCAqX19wYWQxOwogIHZvaWQgKl9fcGFkMjsKCiAgaW50IF9tb2RlOwoKICBjaGFy
IF91bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAodm9pZCAqKV07Cgp9OwoK
CgoKCnN0cnVjdCBfSU9fRklMRV9wbHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9J
T18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRf
OwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDM0NCAiL3Vz
ci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lk
ICpfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNpemVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVm
IF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwgY29uc3QgY2hhciAqX19i
dWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pOwoKCgoKCgoK
dHlwZWRlZiBpbnQgX19pb19zZWVrX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19vZmY2NF90ICpfX3Bv
cywgaW50IF9fdyk7CgoKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9mbiAodm9pZCAqX19jb29raWUp
OwojIDM5MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGlu
dCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gaW50IF9fdWZsb3cgKF9JT19GSUxF
ICopIDsKZXh0ZXJuIGludCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpIDsKZXh0ZXJuIHdp
bnRfdCBfX3d1bmRlcmZsb3cgKF9JT19GSUxFICopIDsKZXh0ZXJuIHdpbnRfdCBfX3d1ZmxvdyAo
X0lPX0ZJTEUgKikgOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93IChfSU9fRklMRSAqLCB3aW50
X3QpIDsKIyA0MjYgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX2dldGMg
KF9JT19GSUxFICpfX2ZwKSA7CmV4dGVybiBpbnQgX0lPX3B1dGMgKGludCBfX2MsIF9JT19GSUxF
ICpfX2ZwKSA7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9JT19GSUxFICpfX2ZwKSA7CmV4dGVybiBp
bnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnApIDsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xv
Y2tlZCAoX0lPX0ZJTEUgKl9fZnApIDsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChf
SU9fRklMRSAqKSA7CmV4dGVybiB2b2lkIF9JT19mdW5sb2NrZmlsZSAoX0lPX0ZJTEUgKikgOwpl
eHRlcm4gaW50IF9JT19mdHJ5bG9ja2ZpbGUgKF9JT19GSUxFICopIDsKIyA0NTYgIi91c3IvaW5j
bHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgKF9JT19GSUxFICogLCBjb25z
dCBjaGFyICogLAogICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICop
IDsKZXh0ZXJuIGludCBfSU9fdmZwcmludGYgKF9JT19GSUxFICosIGNvbnN0IGNoYXIgKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSA7CmV4dGVybiBfX3NzaXplX3Qg
X0lPX3BhZG4gKF9JT19GSUxFICosIGludCwgX19zc2l6ZV90KSA7CmV4dGVybiBzaXplX3QgX0lP
X3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNpemVfdCkgOwoKZXh0ZXJuIF9fb2ZmNjRfdCBf
SU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkgOwpleHRlcm4gX19v
ZmY2NF90IF9JT19zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkgOwoKZXh0ZXJu
IHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIDsKIyA1MTQgIi91c3IvaW5j
bHVkZS9saWJpby5oIiAzCn0KIyA2NiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDgwICIv
dXNyL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CiMgMTI5ICIv
dXNyL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5o
IiAxIDMKIyAxMzAgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKZXh0ZXJuIEZJTEUgKnN0
ZGluOwpleHRlcm4gRklMRSAqc3Rkb3V0OwpleHRlcm4gRklMRSAqc3RkZXJyOwojIDE0NCAiL3Vz
ci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCByZW1vdmUgKGNvbnN0IGNoYXIgKl9fZmls
ZW5hbWUpIDsKCmV4dGVybiBpbnQgcmVuYW1lIChjb25zdCBjaGFyICpfX29sZCwgY29uc3QgY2hh
ciAqX19uZXcpIDsKCgoKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2b2lkKSA7CiMgMTYzICIvdXNy
L2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIDsKCgoK
CmV4dGVybiBjaGFyICp0bXBuYW1fciAoY2hhciAqX19zKSA7CiMgMTgwICIvdXNyL2luY2x1ZGUv
c3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdGVtcG5hbSAoY29uc3QgY2hhciAqX19kaXIsIGNvbnN0
IGNoYXIgKl9fcGZ4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgpleHRl
cm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxF
ICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAoRklMRSAqX19zdHJl
YW0pIDsKIyAyMDMgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICpmb3BlbiAo
Y29uc3QgY2hhciAqIF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
IF9fbW9kZXMpIDsKCmV4dGVybiBGSUxFICpmcmVvcGVuIChjb25zdCBjaGFyICogX19maWxlbmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBfX21vZGVzLAogICAgICAgICAg
ICAgICAgICAgICAgRklMRSAqIF9fc3RyZWFtKSA7CiMgMjMzICIvdXNyL2luY2x1ZGUvc3RkaW8u
aCIgMwpleHRlcm4gRklMRSAqZmRvcGVuIChpbnQgX19mZCwgY29uc3QgY2hhciAqX19tb2Rlcykg
OwojIDI1NiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxF
ICogX19zdHJlYW0sIGNoYXIgKiBfX2J1ZikgOwoKCgpleHRlcm4gaW50IHNldHZidWYgKEZJTEUg
KiBfX3N0cmVhbSwgY2hhciAqIF9fYnVmLAogICAgICAgICAgICAgICAgICAgIGludCBfX21vZGVz
LCBzaXplX3QgX19uKSA7CgoKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKiBfX3N0cmVh
bSwgY2hhciAqIF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIDsK
CgpleHRlcm4gdm9pZCBzZXRsaW5lYnVmIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGlu
dCBmcHJpbnRmIChGSUxFICogX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqIF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQgcHJpbnRmIChjb25zdCBjaGFyICogX19m
b3JtYXQsIC4uLikgOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICogX19zLAogICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKiBfX2Zvcm1hdCwgLi4uKSA7CgoKZXh0ZXJuIGludCB2ZnBy
aW50ZiAoRklMRSAqIF9fcywgY29uc3QgY2hhciAqIF9fZm9ybWF0LAogICAgICAgICAgICAgICAg
ICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgOwoKZXh0ZXJuIGludCB2cHJpbnRmIChjb25zdCBj
aGFyICogX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgICAgICAgICA7CgpleHRl
cm4gaW50IHZzcHJpbnRmIChjaGFyICogX19zLCBjb25zdCBjaGFyICogX19mb3JtYXQsCiAgICAg
ICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSA7CgoKCmV4dGVybiBpbnQgc25w
cmludGYgKGNoYXIgKiBfX3MsIHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqIF9fZm9ybWF0LCAuLi4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCmV4dGVybiBpbnQgdnNucHJpbnRmIChj
aGFyICogX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICogX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgMzI3ICIvdXNyL2lu
Y2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzY2FuZiAoRklMRSAqIF9fc3RyZWFtLAogICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQg
c2NhbmYgKGNvbnN0IGNoYXIgKiBfX2Zvcm1hdCwgLi4uKSA7CgpleHRlcm4gaW50IHNzY2FuZiAo
Y29uc3QgY2hhciAqIF9fcywKICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBfX2Zvcm1h
dCwgLi4uKSA7CiMgMzUzICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZnZXRj
IChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSA7CgoK
ZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSA7CgoKCgoKCgpleHRlcm4gaW50IGdldGNfdW5sb2Nr
ZWQgKEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkg
OwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4
dGVybiBpbnQgZnB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgcHV0
YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBf
X2MpIDsKCgoKCgoKCmV4dGVybiBpbnQgZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9f
c3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9f
c3RyZWFtKSA7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgOwoKCgoKCmV4
dGVybiBpbnQgZ2V0dyAoRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gaW50IHB1dHcgKGludCBf
X3csIEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKiBfX3Ms
IGludCBfX24sIEZJTEUgKiBfX3N0cmVhbSkKICAgICAgICAgICAgOwojIDQxOSAiL3Vzci9pbmNs
dWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgOwojIDQ0MyAiL3Vz
ci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmcHV0cyAoY29uc3QgY2hhciAqIF9fcywg
RklMRSAqIF9fc3RyZWFtKQogICAgICAgICAgICA7CiMgNDUzICIvdXNyL2luY2x1ZGUvc3RkaW8u
aCIgMwpleHRlcm4gaW50IHB1dHMgKGNvbnN0IGNoYXIgKl9fcykgOwoKCgpleHRlcm4gaW50IHVu
Z2V0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAo
dm9pZCAqIF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
X19uLCBGSUxFICogX19zdHJlYW0pIDsKCmV4dGVybiBzaXplX3QgZndyaXRlIChjb25zdCB2b2lk
ICogX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19u
LCBGSUxFICogX19zKSA7CgoKCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKiBf
X3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IF9fbiwgRklMRSAqIF9fc3RyZWFtKSA7CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2VkIChj
b25zdCB2b2lkICogX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgX19uLCBGSUxFICogX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgZnNl
ZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwgaW50IF9fd2hlbmNlKSA7CgpleHRl
cm4gbG9uZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFtKSA7CgpleHRlcm4gdm9pZCByZXdpbmQg
KEZJTEUgKl9fc3RyZWFtKSA7CiMgNDk3ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4g
aW50IGZnZXRwb3MgKEZJTEUgKiBfX3N0cmVhbSwgZnBvc190ICogX19wb3MpCiAgICAgICAgICAg
IDsKCmV4dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIGNvbnN0IGZwb3NfdCAqX19w
b3MpIDsKIyA1MzMgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiB2b2lkIGNsZWFyZXJy
IChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVhbSkgOwoK
ZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiB2b2lkIGNsZWFy
ZXJyX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGZlb2ZfdW5sb2NrZWQg
KEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0
cmVhbSkgOwoKCgoKZXh0ZXJuIHZvaWQgcGVycm9yIChjb25zdCBjaGFyICpfX3MpIDsKCgoKCmV4
dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBjb25zdCBjaGFyICpjb25zdCBzeXNfZXJybGlzdFtd
OwojIDU2NCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUg
Kl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19zdHJl
YW0pIDsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChjb25zdCBjaGFyICpfX2NvbW1hbmQsIGNv
bnN0IGNoYXIgKl9fbW9kZXMpIDsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJlYW0p
IDsKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSA7CiMgNjExICIvdXNyL2lu
Y2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSA7
CgoKCmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiB2
b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgOwojIDYzNSAiL3Vzci9pbmNsdWRlL3N0
ZGlvLmgiIDMKfQojIDEwICJyZXNvdXJjZXMuY3BwIiAyCiMgMSAicmVzb3VyY2VzLmgiIDEKIyAx
MiAicmVzb3VyY2VzLmgiCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0cmluZyIgMSAzCgoKCgoK
IyAxICIvdXNyL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDEgMwojIDM1ICIvdXNyL2lu
Y2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLTMvY3N0
ZGRlZiIgMSAzCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgt
Z251LzIuOTYvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ3ICIvdXNyL2xpYi9nY2MtbGliL2k1
ODYtbWFuZHJha2UtbGludXgtZ251LzIuOTYvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIGlu
dCBwdHJkaWZmX3Q7CiMgNyAiL3Vzci9pbmNsdWRlL2crKy0zL2NzdGRkZWYiIDIgMwojIDM2ICIv
dXNyL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9n
KystMy9zdGQvc3RyYWl0cy5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9zdHJh
aXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLTMvY3N0ZGRlZiIgMSAzCiMgMzcgIi91c3Iv
aW5jbHVkZS9nKystMy9zdGQvc3RyYWl0cy5oIiAyIDMKCmV4dGVybiAiQysrIiB7CnRlbXBsYXRl
IDxjbGFzcyBjaGFyVD4Kc3RydWN0IHN0cmluZ19jaGFyX3RyYWl0cyB7CiAgdHlwZWRlZiBjaGFy
VCBjaGFyX3R5cGU7CgoKCiAgc3RhdGljIHZvaWQgYXNzaWduIChjaGFyX3R5cGUmIGMxLCBjb25z
dCBjaGFyX3R5cGUmIGMyKQogICAgeyBjMSA9IGMyOyB9CiAgc3RhdGljIGJvb2wgZXEgKGNvbnN0
IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAoYzEgPT0g
YzIpOyB9CiAgc3RhdGljIGJvb2wgbmUgKGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJf
dHlwZSYgYzIpCiAgICB7IHJldHVybiAhKGMxID09IGMyKTsgfQogIHN0YXRpYyBib29sIGx0IChj
b25zdCBjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gKGMx
IDwgYzIpOyB9CiAgc3RhdGljIGNoYXJfdHlwZSBlb3MgKCkgeyByZXR1cm4gY2hhcl90eXBlKCk7
IH0KICBzdGF0aWMgYm9vbCBpc19kZWwoY2hhcl90eXBlIGEpIHsgcmV0dXJuIDA7IH0KCgoKCiAg
c3RhdGljIGludCBjb21wYXJlIChjb25zdCBjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUq
IHMyLCBzaXplX3QgbikKICAgIHsKICAgICAgc2l6ZV90IGk7CiAgICAgIGZvciAoaSA9IDA7IGkg
PCBuOyArK2kpCiAgICAgICAgaWYgKG5lIChzMVtpXSwgczJbaV0pKQogICAgICAgICAgcmV0dXJu
IGx0IChzMVtpXSwgczJbaV0pID8gLTEgOiAxOwoKICAgICAgcmV0dXJuIDA7CiAgICB9CgogIHN0
YXRpYyBzaXplX3QgbGVuZ3RoIChjb25zdCBjaGFyX3R5cGUqIHMpCiAgICB7CiAgICAgIHNpemVf
dCBsID0gMDsKICAgICAgd2hpbGUgKG5lICgqcysrLCBlb3MgKCkpKQogICAgICAgICsrbDsKICAg
ICAgcmV0dXJuIGw7CiAgICB9CgogIHN0YXRpYyBjaGFyX3R5cGUqIGNvcHkgKGNoYXJfdHlwZSog
czEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAgewogICAgICBmb3IgKDsgbi0t
OyApCiAgICAgICAgYXNzaWduIChzMVtuXSwgczJbbl0pOwogICAgICByZXR1cm4gczE7CiAgICB9
CgogIHN0YXRpYyBjaGFyX3R5cGUqIG1vdmUgKGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlw
ZSogczIsIHNpemVfdCBuKQogICAgewogICAgICBjaGFyX3R5cGUgYVtuXTsKICAgICAgc2l6ZV90
IGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCiAgICAgICAgYXNzaWduIChhW2ldLCBz
MltpXSk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCiAgICAgICAgYXNzaWduIChzMVtp
XSwgYVtpXSk7CiAgICAgIHJldHVybiBzMTsKICAgIH0KCiAgc3RhdGljIGNoYXJfdHlwZSogc2V0
IChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUmIGMsIHNpemVfdCBuKQogICAgewogICAg
ICBmb3IgKDsgbi0tOyApCiAgICAgICAgYXNzaWduIChzMVtuXSwgYyk7CiAgICAgIHJldHVybiBz
MTsKICAgIH0KfTsKCmNsYXNzIGlzdHJlYW07CmNsYXNzIG9zdHJlYW07CiMgMSAiL3Vzci9pbmNs
dWRlL2crKy0zL2NjdHlwZSIgMSAzCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAz
CiMgMjYgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVz
LmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvdHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKCmV4dGVy
biAiQyIgewojIDQwICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9l
bmRpYW4uaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMKIyAz
NyAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZW5kaWFu
LmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwojIDQxICIvdXNyL2luY2x1
ZGUvY3R5cGUuaCIgMiAzCgoKCgoKCmVudW0KewogIF9JU3VwcGVyID0gKCgwKSA8IDggPyAoKDEg
PDwgKDApKSA8PCA4KSA6ICgoMSA8PCAoMCkpID4+IDgpKSwKICBfSVNsb3dlciA9ICgoMSkgPCA4
ID8gKCgxIDw8ICgxKSkgPDwgOCkgOiAoKDEgPDwgKDEpKSA+PiA4KSksCiAgX0lTYWxwaGEgPSAo
KDIpIDwgOCA/ICgoMSA8PCAoMikpIDw8IDgpIDogKCgxIDw8ICgyKSkgPj4gOCkpLAogIF9JU2Rp
Z2l0ID0gKCgzKSA8IDggPyAoKDEgPDwgKDMpKSA8PCA4KSA6ICgoMSA8PCAoMykpID4+IDgpKSwK
ICBfSVN4ZGlnaXQgPSAoKDQpIDwgOCA/ICgoMSA8PCAoNCkpIDw8IDgpIDogKCgxIDw8ICg0KSkg
Pj4gOCkpLAogIF9JU3NwYWNlID0gKCg1KSA8IDggPyAoKDEgPDwgKDUpKSA8PCA4KSA6ICgoMSA8
PCAoNSkpID4+IDgpKSwKICBfSVNwcmludCA9ICgoNikgPCA4ID8gKCgxIDw8ICg2KSkgPDwgOCkg
OiAoKDEgPDwgKDYpKSA+PiA4KSksCiAgX0lTZ3JhcGggPSAoKDcpIDwgOCA/ICgoMSA8PCAoNykp
IDw8IDgpIDogKCgxIDw8ICg3KSkgPj4gOCkpLAogIF9JU2JsYW5rID0gKCg4KSA8IDggPyAoKDEg
PDwgKDgpKSA8PCA4KSA6ICgoMSA8PCAoOCkpID4+IDgpKSwKICBfSVNjbnRybCA9ICgoOSkgPCA4
ID8gKCgxIDw8ICg5KSkgPDwgOCkgOiAoKDEgPDwgKDkpKSA+PiA4KSksCiAgX0lTcHVuY3QgPSAo
KDEwKSA8IDggPyAoKDEgPDwgKDEwKSkgPDwgOCkgOiAoKDEgPDwgKDEwKSkgPj4gOCkpLAogIF9J
U2FsbnVtID0gKCgxMSkgPCA4ID8gKCgxIDw8ICgxMSkpIDw8IDgpIDogKCgxIDw8ICgxMSkpID4+
IDgpKQp9OwojIDc1ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gY29uc3QgdW5zaWdu
ZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7CmV4dGVybiBjb25zdCBfX2ludDMyX3QgKl9fY3R5cGVf
dG9sb3dlcjsKZXh0ZXJuIGNvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b3VwcGVyOwojIDkxICIv
dXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gaW50IGlzYWxudW0gKGludCkgOwpleHRlcm4g
aW50IGlzYWxwaGEgKGludCkgOwpleHRlcm4gaW50IGlzY250cmwgKGludCkgOwpleHRlcm4gaW50
IGlzZGlnaXQgKGludCkgOwpleHRlcm4gaW50IGlzbG93ZXIgKGludCkgOwpleHRlcm4gaW50IGlz
Z3JhcGggKGludCkgOwpleHRlcm4gaW50IGlzcHJpbnQgKGludCkgOwpleHRlcm4gaW50IGlzcHVu
Y3QgKGludCkgOwpleHRlcm4gaW50IGlzc3BhY2UgKGludCkgOwpleHRlcm4gaW50IGlzdXBwZXIg
KGludCkgOwpleHRlcm4gaW50IGlzeGRpZ2l0IChpbnQpIDsKCgoKCgoKCmV4dGVybiBpbnQgdG9s
b3dlciAoaW50IF9fYykgOwoKCmV4dGVybiBpbnQgdG91cHBlciAoaW50IF9fYykgOwoKCgoKCgpl
eHRlcm4gaW50IGlzYXNjaWkgKGludCBfX2MpIDsKCgoKZXh0ZXJuIGludCB0b2FzY2lpIChpbnQg
X19jKSA7CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGludCkgOwpleHRlcm4gaW50IF90b2xvd2Vy
IChpbnQpIDsKIyAyNzYgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCn0KIyA3ICIvdXNyL2luY2x1
ZGUvZysrLTMvY2N0eXBlIiAyIDMKIyAxMDYgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvc3RyYWl0
cy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLTMvY3N0cmluZyIgMSAzCgoKCgoKCiMgMSAi
L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvc3Ry
aW5nLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1t
YW5kcmFrZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9p
bmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqIF9fZGVz
dCwKICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqIF9fc3JjLCBzaXplX3QgX19uKSA7
CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgY29uc3Qgdm9pZCAqX19zcmMs
IHNpemVfdCBfX24pCiAgICAgICAgICAgIDsKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9p
ZCAqIF9fZGVzdCwgY29uc3Qgdm9pZCAqIF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgaW50
IF9fYywgc2l6ZV90IF9fbikKICAgICAgICAgICAgOwoKCgoKZXh0ZXJuIHZvaWQgKm1lbXNldCAo
dm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGludCBtZW1jbXAgKGNv
bnN0IHZvaWQgKl9fczEsIGNvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKZXh0ZXJuIHZvaWQgKm1lbWNociAoY29uc3Qgdm9pZCAq
X19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKIyA3NyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJjcHkgKGNo
YXIgKiBfX2Rlc3QsIGNvbnN0IGNoYXIgKiBfX3NyYykKICAgICAgICAgICAgOwoKZXh0ZXJuIGNo
YXIgKnN0cm5jcHkgKGNoYXIgKiBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICogX19zcmMsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gY2hhciAqc3RyY2F0IChjaGFyICog
X19kZXN0LCBjb25zdCBjaGFyICogX19zcmMpCiAgICAgICAgICAgIDsKCmV4dGVybiBjaGFyICpz
dHJuY2F0IChjaGFyICogX19kZXN0LCBjb25zdCBjaGFyICogX19zcmMsCiAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGludCBzdHJjbXAgKGNvbnN0IGNoYXIgKl9f
czEsIGNvbnN0IGNoYXIgKl9fczIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgpl
eHRlcm4gaW50IHN0cm5jbXAgKGNvbnN0IGNoYXIgKl9fczEsIGNvbnN0IGNoYXIgKl9fczIsIHNp
emVfdCBfX24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKZXh0ZXJuIGludCBz
dHJjb2xsIChjb25zdCBjaGFyICpfX3MxLCBjb25zdCBjaGFyICpfX3MyKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFyICogX19kZXN0
LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBfX3NyYywgc2l6ZV90IF9fbikg
OwojIDEyMCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJkdXAgKGNv
bnN0IGNoYXIgKl9fcykgOwojIDE1NSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBj
aGFyICpzdHJjaHIgKGNvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgOwoKZXh0ZXJuIGNoYXIgKnN0
cnJjaHIgKGNvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgOwojIDE2NyAiL3Vzci9pbmNsdWRlL3N0
cmluZy5oIiAzCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoY29uc3QgY2hhciAqX19zLCBjb25zdCBj
aGFyICpfX3JlamVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgpleHRlcm4g
c2l6ZV90IHN0cnNwbiAoY29uc3QgY2hhciAqX19zLCBjb25zdCBjaGFyICpfX2FjY2VwdCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCmV4dGVybiBjaGFyICpzdHJwYnJrIChjb25z
dCBjaGFyICpfX3MsIGNvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKZXh0ZXJuIGNoYXIgKnN0cnN0ciAoY29uc3QgY2hhciAqX19oYXlzdGFjaywg
Y29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMg
MTg3ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cnRvayAoY2hhciAq
IF9fcywgY29uc3QgY2hhciAqIF9fZGVsaW0pCiAgICAgICAgICAgIDsKCgoKZXh0ZXJuIGNoYXIg
Kl9fc3RydG9rX3IgKGNoYXIgKiBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICogX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiogX19zYXZlX3B0
cikgOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICogX19zLCBjb25zdCBjaGFyICogX19k
ZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqIF9fc2F2ZV9wdHIpIDsKIyAyMTgg
Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gc2l6ZV90IHN0cmxlbiAoY29uc3QgY2hh
ciAqX19zKSA7CiMgMjI5ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0
cmVycm9yIChpbnQgX19lcnJudW0pIDsKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBf
X2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgOwoKCgoKZXh0ZXJuIHZvaWQg
X19iemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSA7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChj
b25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIHZv
aWQgYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgYmNtcCAoY29u
c3Qgdm9pZCAqX19zMSwgY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgpleHRlcm4gY2hhciAqaW5kZXggKGNvbnN0IGNoYXIgKl9f
cywgaW50IF9fYykgOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKGNvbnN0IGNoYXIgKl9fcywgaW50
IF9fYykgOwoKCgpleHRlcm4gaW50IGZmcyAoaW50IF9faSkgOwojIDI3MiAiL3Vzci9pbmNsdWRl
L3N0cmluZy5oIiAzCmV4dGVybiBpbnQgc3RyY2FzZWNtcCAoY29uc3QgY2hhciAqX19zMSwgY29u
c3QgY2hhciAqX19zMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgpleHRlcm4g
aW50IHN0cm5jYXNlY21wIChjb25zdCBjaGFyICpfX3MxLCBjb25zdCBjaGFyICpfX3MyLCBzaXpl
X3QgX19uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDI5NCAiL3Vzci9pbmNs
dWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKiogX19zdHJpbmdwLAog
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogX19kZWxpbSkgOwojIDM2NCAiL3Vzci9p
bmNsdWRlL3N0cmluZy5oIiAzCn0KIyA4ICIvdXNyL2luY2x1ZGUvZysrLTMvY3N0cmluZyIgMiAz
CiMgMTA3ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIgMiAzCgpzdHJ1Y3Qgc3Ry
aW5nX2NoYXJfdHJhaXRzIDxjaGFyPiB7CiAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKCiAgc3Rh
dGljIHZvaWQgYXNzaWduIChjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAg
eyBjMSA9IGMyOyB9CiAgc3RhdGljIGJvb2wgZXEgKGNvbnN0IGNoYXJfdHlwZSAmIGMxLCBjb25z
dCBjaGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gKGMxID09IGMyKTsgfQogIHN0YXRpYyBib29s
IG5lIChjb25zdCBjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyByZXR1
cm4gKGMxICE9IGMyKTsgfQogIHN0YXRpYyBib29sIGx0IChjb25zdCBjaGFyX3R5cGUmIGMxLCBj
b25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gKGMxIDwgYzIpOyB9CiAgc3RhdGljIGNo
YXJfdHlwZSBlb3MgKCkgeyByZXR1cm4gMDsgfQogIHN0YXRpYyBib29sIGlzX2RlbChjaGFyX3R5
cGUgYSkgeyByZXR1cm4gKF9fY3R5cGVfYlsoaW50KSAoKGEpKV0gJiAodW5zaWduZWQgc2hvcnQg
aW50KSBfSVNzcGFjZSk7IH0KCiAgc3RhdGljIGludCBjb21wYXJlIChjb25zdCBjaGFyX3R5cGUq
IHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbikKICAgIHsgcmV0dXJuIG1lbWNtcCAo
czEsIHMyLCBuKTsgfQogIHN0YXRpYyBzaXplX3QgbGVuZ3RoIChjb25zdCBjaGFyX3R5cGUqIHMp
CiAgICB7IHJldHVybiBzdHJsZW4gKHMpOyB9CiAgc3RhdGljIGNoYXJfdHlwZSogY29weSAoY2hh
cl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7IHJldHVybiAo
Y2hhcl90eXBlKikgbWVtY3B5IChzMSwgczIsIG4pOyB9CiAgc3RhdGljIGNoYXJfdHlwZSogbW92
ZSAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7IHJl
dHVybiAoY2hhcl90eXBlKikgbWVtbW92ZSAoczEsIHMyLCBuKTsgfQogIHN0YXRpYyBjaGFyX3R5
cGUqIHNldCAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlJiBjLCBzaXplX3QgbikKICAg
IHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1zZXQgKHMxLCBjLCBuKTsgfQp9OwojIDE2MCAiL3Vz
ci9pbmNsdWRlL2crKy0zL3N0ZC9zdHJhaXRzLmgiIDMKfQojIDM3ICIvdXNyL2luY2x1ZGUvZysr
LTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0zL2FsbG9jLmgi
IDEgMwojIDE4ICIvdXNyL2luY2x1ZGUvZysrLTMvYWxsb2MuaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS9nKystMy9zdGxfY29uZmlnLmgiIDEgMwojIDE5ICIvdXNyL2luY2x1ZGUvZysrLTMvYWxsb2Mu
aCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDEgMwojIDQ1ICIv
dXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLTMv
aW9zdHJlYW0uaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9nKystMy9pb3N0cmVhbS5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRl
L2crKy0zL3N0cmVhbWJ1Zi5oIiAzCmV4dGVybiAiQyIgewojIDEgIi91c3IvaW5jbHVkZS9saWJp
by5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAyIDMKfQoKCiMg
MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8yLjk2L2luY2x1ZGUv
c3RkYXJnLmgiIDEgMwojIDExMCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4
LWdudS8yLjk2L2luY2x1ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9s
aXN0OwojIDQxICIvdXNyL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDIgMwojIDY1ICIvdXNy
L2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKZXh0ZXJuICJDKysiIHsKY2xhc3MgaXN0cmVh
bTsKY2xhc3Mgb3N0cmVhbTsgY2xhc3Mgc3RyZWFtYnVmOwoKCgoKCgp0eXBlZGVmIF9fb2ZmNjRf
dCBzdHJlYW1vZmY7CnR5cGVkZWYgX19vZmY2NF90IHN0cmVhbXBvczsKCgoKCnR5cGVkZWYgX19z
c2l6ZV90IHN0cmVhbXNpemU7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX19mbXRmbGFnczsKdHlw
ZWRlZiB1bnNpZ25lZCBjaGFyIF9faW9zdGF0ZTsKCnN0cnVjdCBfaW9zX2ZpZWxkcwp7CiAgICBz
dHJlYW1idWYgKl9zdHJidWY7CiAgICBvc3RyZWFtKiBfdGllOwogICAgaW50IF93aWR0aDsKICAg
IF9fZm10ZmxhZ3MgX2ZsYWdzOwogICAgd2NoYXJfdCBfZmlsbDsKICAgIF9faW9zdGF0ZSBfc3Rh
dGU7CiAgICBfX2lvc3RhdGUgX2V4Y2VwdGlvbnM7CiAgICBpbnQgX3ByZWNpc2lvbjsKCiAgICB2
b2lkICpfYXJyYXlzOwp9OwojIDEyNiAiL3Vzci9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAz
CmNsYXNzIGlvcyA6IHB1YmxpYyBfaW9zX2ZpZWxkcyB7CiAgaW9zJiBvcGVyYXRvcj0oaW9zJik7
CiAgaW9zIChjb25zdCBpb3MmKTsKICBwdWJsaWM6CiAgICB0eXBlZGVmIF9fZm10ZmxhZ3MgZm10
ZmxhZ3M7CiAgICB0eXBlZGVmIGludCBpb3N0YXRlOwogICAgdHlwZWRlZiBpbnQgb3Blbm1vZGU7
CiAgICB0eXBlZGVmIF9fc3NpemVfdCBzdHJlYW1zaXplOwogICAgZW51bSBpb19zdGF0ZSB7CiAg
ICAgICAgZ29vZGJpdCA9IDAsCiAgICAgICAgZW9mYml0ID0gMSwKICAgICAgICBmYWlsYml0ID0g
MiwKICAgICAgICBiYWRiaXQgPSA0IH07CiAgICBlbnVtIG9wZW5fbW9kZSB7CiAgICAgICAgaW4g
PSAxLAogICAgICAgIG91dCA9IDIsCiAgICAgICAgYXRlID0gNCwKICAgICAgICBhcHAgPSA4LAog
ICAgICAgIHRydW5jID0gMTYsCiAgICAgICAgbm9jcmVhdGUgPSAzMiwKICAgICAgICBub3JlcGxh
Y2UgPSA2NCwKICAgICAgICBiaW4gPSAxMjgsCiAgICAgICAgYmluYXJ5ID0gMTI4IH07CiAgICBl
bnVtIHNlZWtfZGlyIHsgYmVnLCBjdXIsIGVuZH07CiAgICB0eXBlZGVmIGVudW0gc2Vla19kaXIg
c2Vla2RpcjsKCiAgICBlbnVtIHsgc2tpcHdzPTAxLAogICAgICAgICAgIGxlZnQ9MDIsIHJpZ2h0
PTA0LCBpbnRlcm5hbD0wMTAsCiAgICAgICAgICAgZGVjPTAyMCwgb2N0PTA0MCwgaGV4PTAxMDAs
CiAgICAgICAgICAgc2hvd2Jhc2U9MDIwMCwgc2hvd3BvaW50PTA0MDAsCiAgICAgICAgICAgdXBw
ZXJjYXNlPTAxMDAwLCBzaG93cG9zPTAyMDAwLAogICAgICAgICAgIHNjaWVudGlmaWM9MDQwMDAs
IGZpeGVkPTAxMDAwMCwKICAgICAgICAgICB1bml0YnVmPTAyMDAwMCwgc3RkaW89MDQwMDAwCgoK
CiAgICAgICAgICAgfTsKICAgIGVudW0gewogICAgICAgIGJhc2VmaWVsZD1kZWMrb2N0K2hleCwK
ICAgICAgICBmbG9hdGZpZWxkID0gc2NpZW50aWZpYytmaXhlZCwKICAgICAgICBhZGp1c3RmaWVs
ZCA9IGxlZnQrcmlnaHQraW50ZXJuYWwKICAgIH07CiMgMTc5ICIvdXNyL2luY2x1ZGUvZysrLTMv
c3RyZWFtYnVmLmgiIDMKICAgIG9zdHJlYW0qIHRpZSgpIGNvbnN0IHsgcmV0dXJuIF90aWU7IH0K
ICAgIG9zdHJlYW0qIHRpZShvc3RyZWFtKiB2YWwpIHsgb3N0cmVhbSogc2F2ZT1fdGllOyBfdGll
PXZhbDsgcmV0dXJuIHNhdmU7IH0KCgogICAgd2NoYXJfdCBmaWxsKCkgY29uc3QgeyByZXR1cm4g
X2ZpbGw7IH0KICAgIHdjaGFyX3QgZmlsbCh3Y2hhcl90IG5ld2YpCiAgICAgICAge3djaGFyX3Qg
b2xkZiA9IF9maWxsOyBfZmlsbCA9IG5ld2Y7IHJldHVybiBvbGRmO30KICAgIGZtdGZsYWdzIGZs
YWdzKCkgY29uc3QgeyByZXR1cm4gX2ZsYWdzOyB9CiAgICBmbXRmbGFncyBmbGFncyhmbXRmbGFn
cyBuZXdfdmFsKSB7CiAgICAgICAgZm10ZmxhZ3Mgb2xkX3ZhbCA9IF9mbGFnczsgX2ZsYWdzID0g
bmV3X3ZhbDsgcmV0dXJuIG9sZF92YWw7IH0KICAgIGludCBwcmVjaXNpb24oKSBjb25zdCB7IHJl
dHVybiBfcHJlY2lzaW9uOyB9CiAgICBpbnQgcHJlY2lzaW9uKGludCBuZXdwKSB7CiAgICAgICAg
dW5zaWduZWQgc2hvcnQgb2xkcCA9IF9wcmVjaXNpb247IF9wcmVjaXNpb24gPSAodW5zaWduZWQg
c2hvcnQpbmV3cDsKICAgICAgICByZXR1cm4gb2xkcDsgfQogICAgZm10ZmxhZ3Mgc2V0ZihmbXRm
bGFncyB2YWwpIHsKICAgICAgICBmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwogICAgICAgIF9m
bGFncyB8PSB2YWw7IHJldHVybiBvbGRiaXRzOyB9CiAgICBmbXRmbGFncyBzZXRmKGZtdGZsYWdz
IHZhbCwgZm10ZmxhZ3MgbWFzaykgewogICAgICAgIGZtdGZsYWdzIG9sZGJpdHMgPSBfZmxhZ3M7
CiAgICAgICAgX2ZsYWdzID0gKF9mbGFncyAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsgcmV0dXJu
IG9sZGJpdHM7IH0KICAgIGZtdGZsYWdzIHVuc2V0ZihmbXRmbGFncyBtYXNrKSB7CiAgICAgICAg
Zm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsKICAgICAgICBfZmxhZ3MgJj0gfm1hc2s7IHJldHVy
biBvbGRiaXRzOyB9CiAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBfd2lkdGg7IH0KICAg
IGludCB3aWR0aChpbnQgdmFsKSB7IGludCBzYXZlID0gX3dpZHRoOyBfd2lkdGggPSB2YWw7IHJl
dHVybiBzYXZlOyB9CgoKCgogICAgdm9pZCBfdGhyb3dfZmFpbHVyZSgpIGNvbnN0IHsgfQoKICAg
IHZvaWQgY2xlYXIoaW9zdGF0ZSBzdGF0ZSA9IDApIHsKICAgICAgICBfc3RhdGUgPSBfc3RyYnVm
ID8gc3RhdGUgOiBzdGF0ZXxiYWRiaXQ7CiAgICAgICAgaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25z
KSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICB2b2lkIHNldChpb3N0YXRlIGZsYWcpIHsgX3N0YXRl
IHw9IGZsYWc7CiAgICAgICAgaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVy
ZSgpOyB9CiAgICB2b2lkIHNldHN0YXRlKGlvc3RhdGUgZmxhZykgeyBfc3RhdGUgfD0gZmxhZzsK
ICAgICAgICBpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAg
IGludCBnb29kKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlID09IDA7IH0KICAgIGludCBlb2YoKSBj
b25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmVvZmJpdDsgfQogICAgaW50IGZhaWwoKSBjb25z
dCB7IHJldHVybiBfc3RhdGUgJiAoaW9zOjpiYWRiaXR8aW9zOjpmYWlsYml0KTsgfQogICAgaW50
IGJhZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIGlvczo6YmFkYml0OyB9CiAgICBpb3N0YXRl
IHJkc3RhdGUoKSBjb25zdCB7IHJldHVybiBfc3RhdGU7IH0KICAgIG9wZXJhdG9yIHZvaWQqKCkg
Y29uc3QgeyByZXR1cm4gZmFpbCgpID8gKHZvaWQqKTAgOiAodm9pZCopKC0xKTsgfQogICAgaW50
IG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIGZhaWwoKTsgfQogICAgaW9zdGF0ZSBleGNlcHRp
b25zKCkgY29uc3QgeyByZXR1cm4gX2V4Y2VwdGlvbnM7IH0KICAgIHZvaWQgZXhjZXB0aW9ucyhp
b3N0YXRlIGVuYWJsZSkgewogICAgICAgIF9leGNlcHRpb25zID0gZW5hYmxlOwogICAgICAgIGlm
IChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQoKICAgIHN0cmVhbWJ1
ZiogcmRidWYoKSBjb25zdCB7IHJldHVybiBfc3RyYnVmOyB9CiAgICBzdHJlYW1idWYqIHJkYnVm
KHN0cmVhbWJ1ZiAqX3MpIHsKICAgICAgc3RyZWFtYnVmICpfb2xkID0gX3N0cmJ1ZjsgX3N0cmJ1
ZiA9IF9zOyBjbGVhciAoKTsgcmV0dXJuIF9vbGQ7IH0KCiAgICBzdGF0aWMgaW50IHN5bmNfd2l0
aF9zdGRpbyhpbnQgb24pOwogICAgc3RhdGljIHZvaWQgc3luY193aXRoX3N0ZGlvKCkgeyBzeW5j
X3dpdGhfc3RkaW8oMSk7IH0KICAgIHN0YXRpYyBmbXRmbGFncyBiaXRhbGxvYygpOwogICAgc3Rh
dGljIGludCB4YWxsb2MoKTsKICAgIHZvaWQqJiBwd29yZChpbnQpOwogICAgdm9pZCogcHdvcmQo
aW50KSBjb25zdDsKICAgIGxvbmcmIGl3b3JkKGludCk7CiAgICBsb25nIGl3b3JkKGludCkgY29u
c3Q7CiMgMjUxICIvdXNyL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKICAgIGNsYXNzIElu
aXQgewogICAgcHVibGljOgogICAgICBJbml0ICgpIHsgfQogICAgfTsKCiAgcHJvdGVjdGVkOgog
ICAgaW5saW5lIGlvcyhzdHJlYW1idWYqIHNiID0gMCwgb3N0cmVhbSogdGllX3RvID0gMCk7CiAg
ICBpbmxpbmUgdmlydHVhbCB+aW9zKCk7CiAgICBpbmxpbmUgdm9pZCBpbml0KHN0cmVhbWJ1Ziog
c2IsIG9zdHJlYW0qIHRpZSA9IDApOwp9OwoKCgoKdHlwZWRlZiBpb3M6OnNlZWtfZGlyIF9zZWVr
X2RpcjsKIyAyNzYgIi91c3IvaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMwpjbGFzcyBzdHJl
YW1tYXJrZXIgOiBwcml2YXRlIF9JT19tYXJrZXIgewogICAgZnJpZW5kIGNsYXNzIHN0cmVhbWJ1
ZjsKICAgIHZvaWQgc2V0X29mZnNldChpbnQgb2Zmc2V0KSB7IF9wb3MgPSBvZmZzZXQ7IH0KICBw
dWJsaWM6CiAgICBzdHJlYW1tYXJrZXIoc3RyZWFtYnVmICpzYik7CiAgICB+c3RyZWFtbWFya2Vy
KCk7CiAgICBpbnQgc2F2aW5nKCkgeyByZXR1cm4gMTsgfQogICAgaW50IGRlbHRhKHN0cmVhbW1h
cmtlciYpOwogICAgaW50IGRlbHRhKCk7Cn07CgpzdHJ1Y3Qgc3RyZWFtYnVmIDogcHVibGljIF9J
T19GSUxFIHsKICAgIGZyaWVuZCBjbGFzcyBpb3M7CiAgICBmcmllbmQgY2xhc3MgaXN0cmVhbTsK
ICAgIGZyaWVuZCBjbGFzcyBvc3RyZWFtOwogICAgZnJpZW5kIGNsYXNzIHN0cmVhbW1hcmtlcjsK
ICAgIGNvbnN0IHZvaWQgKiZfdnRhYmxlKCkgeyByZXR1cm4gKihjb25zdCB2b2lkKiopKChfSU9f
RklMRSopdGhpcyArIDEpOyB9CiAgcHJvdGVjdGVkOgogICAgc3RhdGljIHN0cmVhbWJ1ZiogX2xp
c3RfYWxsOwogICAgX0lPX0ZJTEUqJiB4Y2hhaW4oKSB7IHJldHVybiBfY2hhaW47IH0KICAgIHZv
aWQgX3VuX2xpbmsoKTsKICAgIHZvaWQgX2xpbmtfaW4oKTsKICAgIGNoYXIqIGdwdHIoKSBjb25z
dAogICAgICB7IHJldHVybiBfZmxhZ3MgJiAweDEwMCA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVh
ZF9wdHI7IH0KICAgIGNoYXIqIHBwdHIoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfcHRyOyB9
CiAgICBjaGFyKiBlZ3B0cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAmIDB4MTAwID8g
X0lPX3NhdmVfZW5kIDogX0lPX3JlYWRfZW5kOyB9CiAgICBjaGFyKiBlcHB0cigpIGNvbnN0IHsg
cmV0dXJuIF9JT193cml0ZV9lbmQ7IH0KICAgIGNoYXIqIHBiYXNlKCkgY29uc3QgeyByZXR1cm4g
X0lPX3dyaXRlX2Jhc2U7IH0KICAgIGNoYXIqIGViYWNrKCkgY29uc3QKICAgICAgeyByZXR1cm4g
X2ZsYWdzICYgMHgxMDAgPyBfSU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfYmFzZTt9CiAgICBjaGFy
KiBiYXNlKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9iYXNlOyB9CiAgICBjaGFyKiBlYnVmKCkg
Y29uc3QgeyByZXR1cm4gX0lPX2J1Zl9lbmQ7IH0KICAgIGludCBibGVuKCkgY29uc3QgeyByZXR1
cm4gX0lPX2J1Zl9lbmQgLSBfSU9fYnVmX2Jhc2U7IH0KICAgIHZvaWQgeHB1dF9jaGFyKGNoYXIg
YykgeyAqX0lPX3dyaXRlX3B0cisrID0gYzsgfQogICAgaW50IHhmbGFncygpIHsgcmV0dXJuIF9m
bGFnczsgfQogICAgaW50IHhmbGFncyhpbnQgZikge2ludCBmbCA9IF9mbGFnczsgX2ZsYWdzID0g
ZjsgcmV0dXJuIGZsO30KICAgIHZvaWQgeHNldGZsYWdzKGludCBmKSB7IF9mbGFncyB8PSBmOyB9
CiAgICB2b2lkIHhzZXRmbGFncyhpbnQgZiwgaW50IG1hc2spCiAgICAgIHsgX2ZsYWdzID0gKF9m
bGFncyAmIH5tYXNrKSB8IChmICYgbWFzayk7IH0KICAgIHZvaWQgZ2J1bXAoaW50IG4pCiAgICAg
IHsgX2ZsYWdzICYgMHgxMDAgPyAoX0lPX3NhdmVfYmFzZSs9bik6KF9JT19yZWFkX3B0cis9bik7
fQogICAgdm9pZCBwYnVtcChpbnQgbikgeyBfSU9fd3JpdGVfcHRyICs9IG47IH0KICAgIHZvaWQg
c2V0YihjaGFyKiBiLCBjaGFyKiBlYiwgaW50IGE9MCk7CiAgICB2b2lkIHNldHAoY2hhciogcCwg
Y2hhciogZXApCiAgICAgIHsgX0lPX3dyaXRlX2Jhc2U9X0lPX3dyaXRlX3B0cj1wOyBfSU9fd3Jp
dGVfZW5kPWVwOyB9CiAgICB2b2lkIHNldGcoY2hhciogZWIsIGNoYXIqIGcsIGNoYXIgKmVnKSB7
CiAgICAgIGlmIChfZmxhZ3MgJiAweDEwMCkgX0lPX2ZyZWVfYmFja3VwX2FyZWEodGhpcyk7CiAg
ICAgIF9JT19yZWFkX2Jhc2UgPSBlYjsgX0lPX3JlYWRfcHRyID0gZzsgX0lPX3JlYWRfZW5kID0g
ZWc7IH0KICAgIGNoYXIgKnNob3J0YnVmKCkgeyByZXR1cm4gX3Nob3J0YnVmOyB9CgogICAgaW50
IGluX2JhY2t1cCgpIHsgcmV0dXJuIF9mbGFncyAmIDB4MTAwOyB9CgogICAgY2hhciAqR2Jhc2Uo
KSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9iYXNlOyB9
CgogICAgY2hhciAqZUdwdHIoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19zYXZlX2VuZCA6
IF9JT19yZWFkX2VuZDsgfQoKICAgIGNoYXIgKkJiYXNlKCkgeyByZXR1cm4gaW5fYmFja3VwKCkg
PyBfSU9fcmVhZF9iYXNlIDogX0lPX3NhdmVfYmFzZTsgfQogICAgY2hhciAqQnB0cigpIHsgcmV0
dXJuIF9JT19iYWNrdXBfYmFzZTsgfQoKICAgIGNoYXIgKmVCcHRyKCkgeyByZXR1cm4gaW5fYmFj
a3VwKCkgPyBfSU9fcmVhZF9lbmQgOiBfSU9fc2F2ZV9lbmQ7IH0KICAgIGNoYXIgKk5iYXNlKCkg
eyByZXR1cm4gX0lPX3NhdmVfYmFzZTsgfQogICAgY2hhciAqZU5wdHIoKSB7IHJldHVybiBfSU9f
c2F2ZV9lbmQ7IH0KICAgIGludCBoYXZlX2JhY2t1cCgpIHsgcmV0dXJuIF9JT19zYXZlX2Jhc2Ug
IT0gMDsgfQogICAgaW50IGhhdmVfbWFya2VycygpIHsgcmV0dXJuIF9tYXJrZXJzICE9IDA7IH0K
ICAgIHZvaWQgZnJlZV9iYWNrdXBfYXJlYSgpOwogICAgdm9pZCB1bnNhdmVfbWFya2VycygpOwog
ICAgaW50IHB1dF9tb2RlKCkgeyByZXR1cm4gX2ZsYWdzICYgMHg4MDA7IH0KICAgIGludCBzd2l0
Y2hfdG9fZ2V0X21vZGUoKTsKCiAgICBzdHJlYW1idWYoaW50IGZsYWdzPTApOwogIHB1YmxpYzoK
ICAgIHN0YXRpYyBpbnQgZmx1c2hfYWxsKCk7CiAgICBzdGF0aWMgdm9pZCBmbHVzaF9hbGxfbGlu
ZWJ1ZmZlcmVkKCk7CiAgICB2aXJ0dWFsIH5zdHJlYW1idWYoKTsKICAgIHZpcnR1YWwgaW50IG92
ZXJmbG93KGludCBjID0gKC0xKSk7CiAgICB2aXJ0dWFsIGludCB1bmRlcmZsb3coKTsKICAgIHZp
cnR1YWwgaW50IHVmbG93KCk7CiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwoaW50IGMpOwoKICAg
IHZpcnR1YWwgc3RyZWFtc2l6ZSB4c3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBuKTsK
ICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSB4c2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAg
IHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIsIGludCBtb2Rl
PWlvczo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla3BvcyhzdHJlYW1w
b3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOwoKICAgIHN0cmVhbXBvcyBwdWJz
ZWVrb2ZmKHN0cmVhbW9mZiBvLCBfc2Vla19kaXIgZCwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91
dCkKICAgICAgeyByZXR1cm4gX0lPX3NlZWtvZmYgKHRoaXMsIG8sIGQsIG1vZGUpOyB9CiAgICBz
dHJlYW1wb3MgcHVic2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9z
OjpvdXQpCiAgICAgIHsgcmV0dXJuIF9JT19zZWVrcG9zICh0aGlzLCBwb3MsIG1vZGUpOyB9CiAg
ICBzdHJlYW1wb3Mgc3NlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIsIGludCBtb2RlPWlvczo6
aW58aW9zOjpvdXQpOwogICAgc3RyZWFtcG9zIHNzZWVrcG9zKHN0cmVhbXBvcyBwb3MsIGludCBt
b2RlID0gaW9zOjppbnxpb3M6Om91dCk7CiAgICB2aXJ0dWFsIHN0cmVhbWJ1Ziogc2V0YnVmKGNo
YXIqIHAsIGludCBsZW4pOwogICAgdmlydHVhbCBpbnQgc3luYygpOwogICAgdmlydHVhbCBpbnQg
ZG9hbGxvY2F0ZSgpOwoKICAgIGludCBzZWVrbWFyayhzdHJlYW1tYXJrZXImIG1hcmssIGludCBk
ZWx0YSA9IDApOwogICAgaW50IHNwdXRiYWNrYyhjaGFyIGMpOwogICAgaW50IHN1bmdldGMoKTsK
ICAgIGludCB1bmJ1ZmZlcmVkKCkgeyByZXR1cm4gX2ZsYWdzICYgMiA/IDEgOiAwOyB9CiAgICBp
bnQgbGluZWJ1ZmZlcmVkKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgyMDAgPyAxIDogMDsgfQogICAg
dm9pZCB1bmJ1ZmZlcmVkKGludCBpKQogICAgICAgIHsgaWYgKGkpIF9mbGFncyB8PSAyOyBlbHNl
IF9mbGFncyAmPSB+MjsgfQogICAgdm9pZCBsaW5lYnVmZmVyZWQoaW50IGkpCiAgICAgICAgeyBp
ZiAoaSkgX2ZsYWdzIHw9IDB4MjAwOyBlbHNlIF9mbGFncyAmPSB+MHgyMDA7IH0KICAgIGludCBh
bGxvY2F0ZSgpIHsKICAgICAgICBpZiAoYmFzZSgpIHx8IHVuYnVmZmVyZWQoKSkgcmV0dXJuIDA7
CiAgICAgICAgZWxzZSByZXR1cm4gZG9hbGxvY2F0ZSgpOyB9CgogICAgdm9pZCBhbGxvY2J1Zigp
IHsgaWYgKGJhc2UoKSA9PSAwKSBkb2FsbG9jYnVmKCk7IH0KICAgIHZvaWQgZG9hbGxvY2J1Zigp
OwogICAgaW50IGluX2F2YWlsKCkgeyByZXR1cm4gX0lPX3JlYWRfZW5kIC0gX0lPX3JlYWRfcHRy
OyB9CiAgICBpbnQgb3V0X3dhaXRpbmcoKSB7IHJldHVybiBfSU9fd3JpdGVfcHRyIC0gX0lPX3dy
aXRlX2Jhc2U7IH0KICAgIHN0cmVhbXNpemUgc3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6
ZSBuKSB7IHJldHVybiB4c3B1dG4ocywgbik7IH0KICAgIHN0cmVhbXNpemUgcGFkbihjaGFyIHBh
ZCwgc3RyZWFtc2l6ZSBuKSB7IHJldHVybiBfSU9fcGFkbih0aGlzLCBwYWQsIG4pOyB9CiAgICBz
dHJlYW1zaXplIHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4gX0lPX3NnZXRu
KHRoaXMsIHMsIG4pOyB9CiAgICBpbnQgaWdub3JlKGludCk7CiAgICBpbnQgZ2V0X2NvbHVtbigp
OwogICAgaW50IHNldF9jb2x1bW4oaW50KTsKICAgIGxvbmcgc2dldGxpbmUoY2hhciogYnVmLCBz
aXplX3QgbiwgY2hhciBkZWxpbSwgaW50IHB1dGJhY2tfZGVsaW0pOwogICAgaW50IHNwdXRjKGlu
dCBjKSB7IHJldHVybiBfSU9fcHV0YyhjLCB0aGlzKTsgfQogICAgaW50IHNidW1wYygpIHsgcmV0
dXJuIF9JT19nZXRjKHRoaXMpOyB9CiAgICBpbnQgc2dldGMoKSB7IHJldHVybiAoKHRoaXMpLT5f
SU9fcmVhZF9wdHIgPj0gKHRoaXMpLT5fSU9fcmVhZF9lbmQgJiYgX191bmRlcmZsb3cgKHRoaXMp
ID09ICgtMSkgPyAoLTEpIDogKih1bnNpZ25lZCBjaGFyICopICh0aGlzKS0+X0lPX3JlYWRfcHRy
KTsgfQogICAgaW50IHNuZXh0YygpIHsKICAgICAgICBpZiAoX0lPX3JlYWRfcHRyID49IF9JT19y
ZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyh0aGlzKSA9PSAoLTEpKQogICAgICAgICAgcmV0dXJuICgt
MSk7CiAgICAgICAgZWxzZSByZXR1cm4gX0lPX3JlYWRfcHRyKyssIHNnZXRjKCk7IH0KICAgIHZv
aWQgc3Rvc3NjKCkgeyBpZiAoX0lPX3JlYWRfcHRyIDwgX0lPX3JlYWRfZW5kKSBfSU9fcmVhZF9w
dHIrKzsgfQogICAgaW50IHZzY2FuKGNoYXIgY29uc3QgKmZtdDAsIF9fZ251Y192YV9saXN0IGFw
LCBpb3MqIHN0cmVhbSA9IDApOwogICAgaW50IHNjYW4oY2hhciBjb25zdCAqZm10MCAuLi4pOwog
ICAgaW50IHZmb3JtKGNoYXIgY29uc3QgKmZtdDAsIF9fZ251Y192YV9saXN0IGFwKTsKICAgIGlu
dCBmb3JtKGNoYXIgY29uc3QgKmZtdDAgLi4uKTsKCgoKCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUg
c3lzX3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1z
aXplIHN5c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVh
bXBvcyBzeXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIGludCBzeXNf
Y2xvc2UoKTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsKCiAgICB2aXJ0dWFsIGlu
dCBzaG93bWFueWMoKTsKICAgIHZpcnR1YWwgdm9pZCBpbWJ1ZSh2b2lkICopOwoKfTsKCgoKCmNs
YXNzIGZpbGVidWYgOiBwdWJsaWMgc3RyZWFtYnVmIHsKICBwcm90ZWN0ZWQ6CiAgICB2b2lkIGlu
aXQoKTsKICBwdWJsaWM6CiAgICBzdGF0aWMgY29uc3QgaW50IG9wZW5wcm90OwogICAgZmlsZWJ1
ZigpOwogICAgZmlsZWJ1ZihpbnQgZmQpOwogICAgZmlsZWJ1ZihpbnQgZmQsIGNoYXIqIHAsIGlu
dCBsZW4pOwoKCgogICAgfmZpbGVidWYoKTsKICAgIGZpbGVidWYqIGF0dGFjaChpbnQgZmQpOwog
ICAgZmlsZWJ1Ziogb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSk7
CiAgICBmaWxlYnVmKiBvcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpb3M6Om9wZW5tb2RlIG1v
ZGUsIGludCBwcm90ID0gMDY2NCk7CiAgICB2aXJ0dWFsIGludCB1bmRlcmZsb3coKTsKICAgIHZp
cnR1YWwgaW50IG92ZXJmbG93KGludCBjID0gKC0xKSk7CiAgICBpbnQgaXNfb3BlbigpIGNvbnN0
IHsgcmV0dXJuIF9maWxlbm8gPj0gMDsgfQogICAgaW50IGZkKCkgY29uc3QgeyByZXR1cm4gaXNf
b3BlbigpID8gX2ZpbGVubyA6ICgtMSk7IH0KICAgIGZpbGVidWYqIGNsb3NlKCk7CiAgICB2aXJ0
dWFsIGludCBkb2FsbG9jYXRlKCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVh
bW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwg
c3RyZWFtYnVmKiBzZXRidWYoY2hhciogcCwgaW50IGxlbik7CiAgICBzdHJlYW1zaXplIHhzcHV0
bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgc3RyZWFtc2l6ZSB4c2dldG4oY2hh
ciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICBwcm90ZWN0ZWQ6
CgogICAgaW50IGlzX3JlYWRpbmcoKSB7IHJldHVybiBlYmFjaygpICE9IGVncHRyKCk7IH0KICAg
IGNoYXIqIGN1cl9wdHIoKSB7IHJldHVybiBpc19yZWFkaW5nKCkgPyBncHRyKCkgOiBwcHRyKCk7
IH0KCiAgICBjaGFyKiBmaWxlX3B0cigpIHsgcmV0dXJuIGVHcHRyKCk7IH0KCiAgICB2aXJ0dWFs
IHN0cmVhbXNpemUgc3lzX3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmly
dHVhbCBzdHJlYW1wb3Mgc3lzX3NlZWsoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgdmlydHVh
bCBzdHJlYW1zaXplIHN5c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0
dWFsIGludCBzeXNfc3RhdCh2b2lkKik7CiAgICB2aXJ0dWFsIGludCBzeXNfY2xvc2UoKTsKCgoK
Cn07CgppbmxpbmUgdm9pZCBpb3M6OmluaXQoc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllX3Rv
KSB7CiAgICAgICAgICAgICAgICBfc3RhdGUgPSBzYiA/IGlvczo6Z29vZGJpdCA6IGlvczo6YmFk
Yml0OyBfZXhjZXB0aW9ucz0wOwogICAgICAgICAgICAgICAgX3N0cmJ1Zj1zYjsgX3RpZSA9IHRp
ZV90bzsgX3dpZHRoPTA7IF9maWxsPScgJzsKCiAgICAgICAgICAgICAgICBfZmxhZ3M9aW9zOjpz
a2lwd3N8aW9zOjpkZWM7CgoKCiAgICAgICAgICAgICAgICBfcHJlY2lzaW9uPTY7IF9hcnJheXMg
PSAwOyB9CgppbmxpbmUgaW9zOjppb3Moc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllX3RvKSB7
IGluaXQoc2IsIHRpZV90byk7IH0KCmlubGluZSBpb3M6On5pb3MoKSB7CgoKCgoKICAgIG9wZXJh
dG9yIGRlbGV0ZVtdIChfYXJyYXlzKTsKfQp9CiMgMzIgIi91c3IvaW5jbHVkZS9nKystMy9pb3N0
cmVhbS5oIiAyIDMKCmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJlYW07
CnR5cGVkZWYgaW9zJiAoKl9fbWFuaXApKGlvcyYpOwp0eXBlZGVmIGlzdHJlYW0mICgqX19pbWFu
aXApKGlzdHJlYW0mKTsKdHlwZWRlZiBvc3RyZWFtJiAoKl9fb21hbmlwKShvc3RyZWFtJik7Cgpl
eHRlcm4gaXN0cmVhbSYgd3MoaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0mIGZsdXNoKG9z
dHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kbChvc3RyZWFtJiBvdXRzKTsKZXh0ZXJu
IG9zdHJlYW0mIGVuZHMob3N0cmVhbSYgb3V0cyk7CgpjbGFzcyBvc3RyZWFtIDogdmlydHVhbCBw
dWJsaWMgaW9zCnsKCiAgICB2b2lkIGRvX29zZngoKTsKICBwdWJsaWM6CiAgICBvc3RyZWFtKCkg
eyB9CiAgICBvc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZWQ9MCk7CiAgICBpbnQg
b3BmeCgpIHsKICAgICAgICBpZiAoIWdvb2QoKSkgcmV0dXJuIDA7CiAgICAgICAgZWxzZSB7IGlm
IChfdGllKSBfdGllLT5mbHVzaCgpOyA7IHJldHVybiAxO30gfQogICAgdm9pZCBvc2Z4KCkgeyA7
CiAgICAgICAgICAgICAgICAgIGlmIChmbGFncygpICYgKGlvczo6dW5pdGJ1Znxpb3M6OnN0ZGlv
KSkKICAgICAgICAgICAgICAgICAgICAgIGRvX29zZngoKTsgfQogICAgb3N0cmVhbSYgZmx1c2go
KTsKICAgIG9zdHJlYW0mIHB1dChjaGFyIGMpIHsgX3N0cmJ1Zi0+c3B1dGMoYyk7IHJldHVybiAq
dGhpczsgfQoKCgoKCiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCBjaGFyICpzLCBzdHJlYW1zaXpl
IG4pOwogICAgb3N0cmVhbSYgd3JpdGUoY29uc3QgdW5zaWduZWQgY2hhciAqcywgc3RyZWFtc2l6
ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVh
bSYgd3JpdGUoY29uc3Qgc2lnbmVkIGNoYXIgKnMsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1
cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMsIG4pO30KICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHZv
aWQgKnMsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMs
IG4pO30KICAgIG9zdHJlYW0mIHNlZWtwKHN0cmVhbXBvcyk7CiAgICBvc3RyZWFtJiBzZWVrcChz
dHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICBzdHJlYW1wb3MgdGVsbHAoKTsKICAgIG9zdHJlYW0m
IGZvcm0oY29uc3QgY2hhciAqZm9ybWF0IC4uLik7CiAgICBvc3RyZWFtJiB2Zm9ybShjb25zdCBj
aGFyICpmb3JtYXQsIF9fZ251Y192YV9saXN0IGFyZ3MpOwoKICAgIG9zdHJlYW0mIG9wZXJhdG9y
PDwoY2hhciBjKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgY2hhciBjKSB7IHJl
dHVybiAoKnRoaXMpIDw8IChjaGFyKWM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc2lnbmVk
IGNoYXIgYykgeyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFtJiBvcGVy
YXRvcjw8KGNvbnN0IGNoYXIgKnMpOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCB1bnNp
Z25lZCBjaGFyICpzKQogICAgICAgIHsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNoYXIqKXM7
IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgc2lnbmVkIGNoYXIgKnMpCiAgICAgICAg
eyByZXR1cm4gKCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsgfQogICAgb3N0cmVhbSYgb3BlcmF0
b3I8PChjb25zdCB2b2lkICpwKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoaW50IG4pOwogICAg
b3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBpbnQgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRv
cjw8KGxvbmcgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbik7CgoK
CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKGlu
dCluKTt9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IG4pIHtyZXR1cm4g
b3BlcmF0b3I8PCgodW5zaWduZWQgaW50KW4pO30KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGJv
b2wgYikgeyByZXR1cm4gb3BlcmF0b3I8PCgoaW50KWIpOyB9CgogICAgb3N0cmVhbSYgb3BlcmF0
b3I8PChkb3VibGUgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGZsb2F0IG4pIHsgcmV0dXJu
IG9wZXJhdG9yPDwoKGRvdWJsZSluKTsgfQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBk
b3VibGUgbik7CgoKCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KF9fb21hbmlwIGZ1bmMpIHsgcmV0
dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KF9fbWFuaXAgZnVu
YykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8
PChzdHJlYW1idWYqKTsKCgoKfTsKCmNsYXNzIGlzdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MK
ewoKcHJvdGVjdGVkOgogICAgc2l6ZV90IF9nY291bnQ7CgogICAgaW50IF9za2lwX3dzKCk7CiAg
cHVibGljOgogICAgaXN0cmVhbSgpOiBfZ2NvdW50ICgwKSB7IH0KICAgIGlzdHJlYW0oc3RyZWFt
YnVmKiBzYiwgb3N0cmVhbSp0aWVkPTApOwogICAgaXN0cmVhbSYgZ2V0KGNoYXIqIHB0ciwgaW50
IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXIq
IHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCiAgICAgICAgeyByZXR1cm4gZ2V0KChj
aGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXQoY2hhciYgYyk7CiAgICBp
c3RyZWFtJiBnZXQodW5zaWduZWQgY2hhciYgYykgeyByZXR1cm4gZ2V0KChjaGFyJiljKTsgfQog
ICAgaXN0cmVhbSYgZ2V0bGluZShjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4n
KTsKICAgIGlzdHJlYW0mIGdldGxpbmUodW5zaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFy
IGRlbGltID0gJ1xuJykKICAgICAgICB7IHJldHVybiBnZXRsaW5lKChjaGFyKilwdHIsIGxlbiwg
ZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVkIGNoYXImIGMpIHsgcmV0dXJuIGdldCgo
Y2hhciYpYyk7IH0KICAgIGlzdHJlYW0mIGdldChzaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBj
aGFyIGRlbGltID0gJ1xuJykKICAgICAgICB7IHJldHVybiBnZXQoKGNoYXIqKXB0ciwgbGVuLCBk
ZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdldGxpbmUoc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwg
Y2hhciBkZWxpbSA9ICdcbicpCiAgICAgICAgeyByZXR1cm4gZ2V0bGluZSgoY2hhciopcHRyLCBs
ZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgcmVhZChjaGFyICpwdHIsIHN0cmVhbXNpemUgbik7
CiAgICBpc3RyZWFtJiByZWFkKHVuc2lnbmVkIGNoYXIgKnB0ciwgc3RyZWFtc2l6ZSBuKQogICAg
ICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiByZWFkKHNpZ25l
ZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRy
LCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZCh2b2lkICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAg
eyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgZ2V0KHN0cmVhbWJ1
ZiYgc2IsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldHMoY2hhciAqKnMsIGNo
YXIgZGVsaW0gPSAnXG4nKTsKICAgIGludCBpcGZ4KGludCBuZWVkID0gMCkgewogICAgICAgIGlm
ICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQogICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgIGlmIChfdGllICYm
IChuZWVkID09IDAgfHwgcmRidWYoKS0+aW5fYXZhaWwoKSA8IG5lZWQpKSBfdGllLT5mbHVzaCgp
OwogICAgICAgICAgaWYgKCFuZWVkICYmIChmbGFncygpICYgaW9zOjpza2lwd3MpKSByZXR1cm4g
X3NraXBfd3MoKTsKICAgICAgICAgIGVsc2UgcmV0dXJuIDE7CiAgICAgICAgfQogICAgfQogICAg
aW50IGlwZngwKCkgewogICAgICAgIGlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyBy
ZXR1cm4gMDsgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICAgICAgICAgIGlmIChfdGllKSBfdGllLT5mbHVzaCgpOwogICAgICAgICAgaWYgKGZsYWdz
KCkgJiBpb3M6OnNraXB3cykgcmV0dXJuIF9za2lwX3dzKCk7CiAgICAgICAgICBlbHNlIHJldHVy
biAxOwogICAgICAgIH0KICAgIH0KICAgIGludCBpcGZ4MSgpIHsKICAgICAgICBpZiAoIWdvb2Qo
KSkgeyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0KICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICBpZiAoX3RpZSAmJiByZGJ1Zigp
LT5pbl9hdmFpbCgpID09IDApIF90aWUtPmZsdXNoKCk7CiAgICAgICAgICByZXR1cm4gMTsKICAg
ICAgICB9CiAgICB9CiAgICB2b2lkIGlzZngoKSB7IDsgfQogICAgaW50IGdldCgpIHsgaWYgKCFp
cGZ4MSgpKSByZXR1cm4gKC0xKTsKICAgICAgICAgICAgICAgIGVsc2UgeyBpbnQgY2ggPSBfc3Ry
YnVmLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gKC0xKSkgc2V0
KGlvczo6ZW9mYml0KTsKICAgICAgICAgICAgICAgICAgICAgICBpc2Z4KCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNoOwogICAgICAgICAgICAgICAgICAgICB9IH0KICAgIGludCBw
ZWVrKCk7CiAgICBzaXplX3QgZ2NvdW50KCkgeyByZXR1cm4gX2djb3VudDsgfQogICAgaXN0cmVh
bSYgaWdub3JlKGludCBuPTEsIGludCBkZWxpbSA9ICgtMSkpOwogICAgaW50IHN5bmMgKCk7CiAg
ICBpc3RyZWFtJiBzZWVrZyhzdHJlYW1wb3MpOwogICAgaXN0cmVhbSYgc2Vla2coc3RyZWFtb2Zm
LCBfc2Vla19kaXIpOwogICAgc3RyZWFtcG9zIHRlbGxnKCk7CiAgICBpc3RyZWFtJiBwdXRiYWNr
KGNoYXIgY2gpIHsKICAgICAgICBpZiAoZ29vZCgpICYmIF9zdHJidWYtPnNwdXRiYWNrYyhjaCkg
PT0gKC0xKSkgY2xlYXIoaW9zOjpiYWRiaXQpOwogICAgICAgIHJldHVybiAqdGhpczt9CiAgICBp
c3RyZWFtJiB1bmdldCgpIHsKICAgICAgICBpZiAoZ29vZCgpICYmIF9zdHJidWYtPnN1bmdldGMo
KSA9PSAoLTEpKSBjbGVhcihpb3M6OmJhZGJpdCk7CiAgICAgICAgcmV0dXJuICp0aGlzO30KICAg
IGlzdHJlYW0mIHNjYW4oY29uc3QgY2hhciAqZm9ybWF0IC4uLik7CiAgICBpc3RyZWFtJiB2c2Nh
bihjb25zdCBjaGFyICpmb3JtYXQsIF9fZ251Y192YV9saXN0IGFyZ3MpOwoKCgoKCgogICAgaXN0
cmVhbSYgb3BlcmF0b3I+PihjaGFyKik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVk
IGNoYXIqIHApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3RyZWFtJiBv
cGVyYXRvcj4+KHNpZ25lZCBjaGFyKnApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9
CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXImIGMpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+
Pih1bnNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9wZXJhdG9yPj4oKGNoYXImKWMpO30KICAgIGlz
dHJlYW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hh
ciYpYyk7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihpbnQmKTsKICAgIGlzdHJlYW0mIG9wZXJh
dG9yPj4obG9uZyYpOwoKCgoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2hvcnQmKTsKICAgIGlz
dHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgaW50Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+
KHVuc2lnbmVkIGxvbmcmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQm
KTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGJvb2wmKTsKCiAgICBpc3RyZWFtJiBvcGVyYXRv
cj4+KGZsb2F0Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGRvdWJsZSYpOwogICAgaXN0cmVh
bSYgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+PiggX19t
YW5pcCBmdW5jKSB7KCpmdW5jKSgqdGhpcyk7IHJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiBv
cGVyYXRvcj4+KF9faW1hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBp
c3RyZWFtJiBvcGVyYXRvcj4+KHN0cmVhbWJ1ZiopOwp9OwoKY2xhc3MgaW9zdHJlYW0gOiBwdWJs
aWMgaXN0cmVhbSwgcHVibGljIG9zdHJlYW0KewogIHB1YmxpYzoKICAgIGlvc3RyZWFtKCkgeyB9
CiAgICBpb3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRpZWQ9MCk7Cn07CgpjbGFzcyBf
SU9faXN0cmVhbV93aXRoYXNzaWduIDogcHVibGljIGlzdHJlYW0gewpwdWJsaWM6CiAgX0lPX2lz
dHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KGlzdHJlYW0mKTsKICBfSU9faXN0cmVhbV93aXRo
YXNzaWduJiBvcGVyYXRvcj0oX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgcmhzKQogICAgeyByZXR1
cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxpc3RyZWFtJj4gKHJocykpOyB9Cn07CgpjbGFzcyBf
SU9fb3N0cmVhbV93aXRoYXNzaWduIDogcHVibGljIG9zdHJlYW0gewpwdWJsaWM6CiAgX0lPX29z
dHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KG9zdHJlYW0mKTsKICBfSU9fb3N0cmVhbV93aXRo
YXNzaWduJiBvcGVyYXRvcj0oX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgcmhzKQogICAgeyByZXR1
cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxvc3RyZWFtJj4gKHJocykpOyB9Cn07CgpleHRlcm4g
X0lPX2lzdHJlYW1fd2l0aGFzc2lnbiBjaW47CgpleHRlcm4gX0lPX29zdHJlYW1fd2l0aGFzc2ln
biBjb3V0LCBjZXJyOwoKZXh0ZXJuIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24gY2xvZwoKCgo7Cgpl
eHRlcm4gaXN0cmVhbSYgbG9jayhpc3RyZWFtJiBpbnMpOwpleHRlcm4gaXN0cmVhbSYgdW5sb2Nr
KGlzdHJlYW0mIGlucyk7CmV4dGVybiBvc3RyZWFtJiBsb2NrKG9zdHJlYW0mIG91dHMpOwpleHRl
cm4gb3N0cmVhbSYgdW5sb2NrKG9zdHJlYW0mIG91dHMpOwoKc3RydWN0IElvc3RyZWFtX2luaXQg
eyB9IDsKCmlubGluZSBpb3MmIGRlYyhpb3MmIGkpCnsgaS5zZXRmKGlvczo6ZGVjLCBpb3M6OmRl
Y3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9CmlubGluZSBpb3MmIGhleChpb3MmIGkp
CnsgaS5zZXRmKGlvczo6aGV4LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBp
OyB9CmlubGluZSBpb3MmIG9jdChpb3MmIGkpCnsgaS5zZXRmKGlvczo6b2N0LCBpb3M6OmRlY3xp
b3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9Cn0KIyA0NiAiL3Vzci9pbmNsdWRlL2crKy0z
L3N0bF9hbGxvYy5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRy
YWtlLWxpbnV4LWdudS8yLjk2L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1
ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAz
CiMgMjUgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJl
cy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vz
ci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8yLjk2L2luY2x1ZGUvc3RkZGVm
LmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKZXh0ZXJuICJDIiB7CiMg
OTQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBx
dW90OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxv
bmcgaW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2X3Q7CiMgMTMzICIvdXNyL2lu
Y2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2
b2lkKSA7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAoY29uc3QgY2hhciAqX19ucHRyKSA7CgpleHRl
cm4gaW50IGF0b2kgKGNvbnN0IGNoYXIgKl9fbnB0cikgOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wg
KGNvbnN0IGNoYXIgKl9fbnB0cikgOwojIDE1MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4
dGVybiBkb3VibGUgc3RydG9kIChjb25zdCBjaGFyICogX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKiBfX2VuZHB0cikgOwojIDE2MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz
CmV4dGVybiBsb25nIGludCBzdHJ0b2wgKGNvbnN0IGNoYXIgKiBfX25wdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgKiogX19lbmRwdHIsIGludCBfX2Jhc2UpIDsKCmV4dGVybiB1bnNp
Z25lZCBsb25nIGludCBzdHJ0b3VsIChjb25zdCBjaGFyICogX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKiBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICAg
ICAgICAgOwojIDI1MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBkb3VibGUgX19z
dHJ0b2RfaW50ZXJuYWwgKGNvbnN0IGNoYXIgKiBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgKiogX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgICAgICAgICA7
CmV4dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAoY29uc3QgY2hhciAqIF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqIF9fZW5kcHRyLCBpbnQgX19ncm91
cCkKICAgICAgICAgICAgOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIChj
b25zdCBjaGFyICogX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICoqIF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19ncm91cCkgOwoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2ludGVybmFsIChjb25z
dCBjaGFyICogX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KiogX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFz
ZSwgaW50IF9fZ3JvdXApIDsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9p
bnRlcm5hbCAoY29uc3QgY2hhciAqIF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqKiBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIDsKIyAzODQg
Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19u
KSA7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKGNvbnN0IGNoYXIgKl9fcykgOwoKCiMgMSAiL3Vz
ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUv
c3lzL3R5cGVzLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5
cGVzLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVm
IF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3Vf
aW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFk
X3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7
CgoKCgp0eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlub190Owoj
IDYxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX2Rldl90IGRldl90OwoK
CgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoKCgoKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoK
Cgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190OwoKCgoKdHlwZWRlZiBfX3VpZF90IHVpZF90OwoK
CgoKCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsKIyA5OSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5o
IiAzCnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCgp0
eXBlZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7
CnR5cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CgoKCgoKdHlwZWRlZiBfX2tleV90IGtleV90Owoj
IDEzMiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMSAzCiMgNjcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy90eXBlcy5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBf
X3RpbWVfdCB0aW1lX3Q7CiMgNzkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA4MCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoK
dHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7CiMgOTEgIi91c3IvaW5jbHVkZS90aW1lLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA5MiAiL3Vzci9pbmNsdWRl
L3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKIyAxMzMgIi91c3IvaW5j
bHVkZS9zeXMvdHlwZXMuaCIgMiAzCiMgMTQ2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMK
IyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzIuOTYvaW5jbHVk
ZS9zdGRkZWYuaCIgMSAzCiMgMTQ3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGlu
dCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTYyICIvdXNyL2luY2x1ZGUv
c3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBjaGFyIGludDhfdDsKdHlwZWRlZiBzaG9ydCBpbnQgaW50
MTZfdDsKdHlwZWRlZiBpbnQgaW50MzJfdDsKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVf
aW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1X2ludDE2X3Q7CnR5cGVkZWYgdW5z
aWduZWQgaW50IHVfaW50MzJfdDsKCgoKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3Q7CiMgMjEyICIv
dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEg
MwojIDIxMyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVk
ZS9zeXMvc2VsZWN0LmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3Nl
bGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI5ICIv
dXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Nl
bGVjdC5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3Np
Z3NldC5oIiAzCnR5cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QK
ICB7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNp
Z25lZCBsb25nIGludCkpKV07CiAgfSBfX3NpZ3NldF90OwojIDM1ICIvdXNyL2luY2x1ZGUvc3lz
L3NlbGVjdC5oIiAyIDMKCgoKdHlwZWRlZiBfX3NpZ3NldF90IHNpZ3NldF90OwoKCgoKCiMgMSAi
L3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMTA2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnN0
cnVjdCB0aW1lc3BlYwogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25z
ZWM7CiAgfTsKIyA0NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUv
Yml0cy90aW1lLmgiIDIgMwoKCgpzdHJ1Y3QgdGltZXZhbAogIHsKICAgIF9fdGltZV90IHR2X3Nl
YzsKICAgIF9fc3VzZWNvbmRzX3QgdHZfdXNlYzsKICB9OwojIDQ3ICIvdXNyL2luY2x1ZGUvc3lz
L3NlbGVjdC5oIiAyIDMKCgp0eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7CgoKCgoK
dHlwZWRlZiBsb25nIGludCBfX2ZkX21hc2s7CgoKCgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKCgoK
CgoKICAgIF9fZmRfbWFzayBfX2Zkc19iaXRzWzEwMjQgLyAoOCAqIHNpemVvZiAoX19mZF9tYXNr
KSldOwoKCiAgfSBmZF9zZXQ7CgoKCgoKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CiMgOTUg
Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuICJDIiB7CgoKCgoKCmV4dGVybiBp
bnQgc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKiBfX3JlYWRmZHMsCiAgICAgICAgICAgICAg
ICAgICBmZF9zZXQgKiBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICogX19l
eGNlcHRmZHMsCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqIF9fdGltZW91dCkg
OwojIDExOCAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwp9CiMgMjE2ICIvdXNyL2luY2x1
ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIg
MSAzCiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvZW5kaWFuLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAyIDMK
IyAyMTkgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCiMgMjMwICIvdXNyL2luY2x1ZGUv
c3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX2Jsa2NudF90IGJsa2NudF90OwoKCgp0eXBlZGVmIF9f
ZnNibGtjbnRfdCBmc2Jsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90
OwojIDI2MiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCn0KIyAzOTEgIi91c3IvaW5jbHVk
ZS9zdGRsaWIuaCIgMiAzCgoKCgoKCmV4dGVybiBsb25nIGludCByYW5kb20gKHZvaWQpIDsKCgpl
eHRlcm4gdm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19zZWVkKSA7CgoKCgoKZXh0ZXJuIGNo
YXIgKmluaXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4pIDsKCgoKZXh0ZXJuIGNoYXIg
KnNldHN0YXRlIChjaGFyICpfX3N0YXRlYnVmKSA7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEK
ICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMyX3QgKnN0
YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCByYW5kX3Nl
cDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVj
dCByYW5kb21fZGF0YSAqIF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICogX19y
ZXN1bHQpIDsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1
Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSA7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25l
ZCBpbnQgX19zZWVkLCBjaGFyICogX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fc3RhdGVsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21f
ZGF0YSAqIF9fYnVmKSA7CgpleHRlcm4gaW50IHNldHN0YXRlX3IgKGNoYXIgKiBfX3N0YXRlYnVm
LAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqIF9fYnVmKSA7CgoK
CgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSA7CgpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWduZWQg
aW50IF9fc2VlZCkgOwoKCgpleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQp
IDsKCgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgOwpleHRlcm4gZG91YmxlIGVy
YW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIGxvbmcgaW50
IGxyYW5kNDggKHZvaWQpIDsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0
IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQpIDsKZXh0
ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7CgoK
ZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSA7CmV4dGVybiB1bnNpZ25l
ZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgOwpl
eHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgOwoKCgoK
CnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX194WzNdOwog
ICAgdW5zaWduZWQgc2hvcnQgaW50IF9fb2xkX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQg
X19jOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsKICAgIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgX19hOwogIH07CgoKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2Rh
dGEgKiBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqIF9fcmVzdWx0KSA7
CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKiBfX2J1ZmZlciwKICAgICAg
ICAgICAgICAgICAgICAgIGRvdWJsZSAqIF9fcmVzdWx0KSA7CgoKZXh0ZXJuIGludCBscmFuZDQ4
X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKiBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAg
IGxvbmcgaW50ICogX19yZXN1bHQpIDsKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNo
b3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhf
ZGF0YSAqIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKiBfX3Jlc3Vs
dCkgOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICogX19idWZm
ZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqIF9fcmVzdWx0KSA7CmV4dGVybiBp
bnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKiBfX2J1ZmZlciwKICAgICAgICAgICAgICAg
ICAgICAgIGxvbmcgaW50ICogX19yZXN1bHQpIDsKCgpleHRlcm4gaW50IHNyYW5kNDhfciAobG9u
ZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikKICAgICAgICAg
ICAgOwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlsz
XSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIDsK
CmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSA7CiMgNTI3
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9f
c2l6ZSkgOwoKZXh0ZXJuIHZvaWQgKmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3Np
emUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgpleHRlcm4gdm9pZCAq
cmVhbGxvYyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3NpemUpIDsKCmV4dGVybiB2b2lkIGZyZWUg
KHZvaWQgKl9fcHRyKSA7CgoKCmV4dGVybiB2b2lkIGNmcmVlICh2b2lkICpfX3B0cikgOwoKCgoj
IDEgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9hbGxvY2Eu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRl
L2FsbG9jYS5oIiAyIDMKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51
eC1nbnUvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9j
YS5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKCmV4dGVybiB2b2lkICphbGxvY2EgKHNpemVfdCBf
X3NpemUpIDsKCgoKCgp9CiMgNTQ3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKZXh0
ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgOwojIDU2MSAiL3Vzci9pbmNsdWRlL3N0
ZGxpYi5oIiAzCmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSA7CgoKCmV4dGVybiBpbnQgYXRleGl0
ICh2b2lkICgqX19mdW5jKSAodm9pZCkpIDsKCgoKCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAo
Kl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAgICAg
ICAgICAgOwoKCgoKCmV4dGVybiB2b2lkIGV4aXQgKGludCBfX3N0YXR1cykgOwojIDU4NyAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpnZXRlbnYgKGNvbnN0IGNoYXIgKl9f
bmFtZSkgOwoKCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChjb25zdCBjaGFyICpfX25h
bWUpIDsKCgoKCgpleHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIDsKCgoKCgpleHRl
cm4gaW50IHNldGVudiAoY29uc3QgY2hhciAqX19uYW1lLCBjb25zdCBjaGFyICpfX3ZhbHVlLCBp
bnQgX19yZXBsYWNlKQogICAgICAgICAgICA7CgoKZXh0ZXJuIGludCB1bnNldGVudiAoY29uc3Qg
Y2hhciAqX19uYW1lKSA7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpIDsKIyA2MjMg
Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpfX3Rl
bXBsYXRlKSA7CgoKCgoKCgpleHRlcm4gaW50IG1rc3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsK
IyA2NTAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWtkdGVtcCAoY2hh
ciAqX190ZW1wbGF0ZSkgOwoKCgoKZXh0ZXJuIGludCBzeXN0ZW0gKGNvbnN0IGNoYXIgKl9fY29t
bWFuZCkgOwojIDY3MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpyZWFs
cGF0aCAoY29uc3QgY2hhciAqIF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICog
X19yZXNvbHZlZCkgOwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChjb25zdCB2
b2lkICosIGNvbnN0IHZvaWQgKik7CiMgNjg5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0
ZXJuIHZvaWQgKmJzZWFyY2ggKGNvbnN0IHZvaWQgKl9fa2V5LCBjb25zdCB2b2lkICpfX2Jhc2Us
CiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19j
b21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2Us
IHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21w
YXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSA7CmV4dGVybiBs
b25nIGludCBsYWJzIChsb25nIGludCBfX3gpIDsKIyA3MTAgIi91c3IvaW5jbHVkZS9zdGRsaWIu
aCIgMwpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50IF9fZGVub20pCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4dGVybiBsZGl2X3QgbGRpdiAobG9u
ZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKIyA3MjggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4g
Y2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICogX19kZWNwdCwK
ICAgICAgICAgICAgICAgICAgIGludCAqIF9fc2lnbikgOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQg
KGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqIF9fZGVjcHQsCiAgICAgICAgICAg
ICAgICAgICBpbnQgKiBfX3NpZ24pIDsKCgoKCmV4dGVybiBjaGFyICpnY3Z0IChkb3VibGUgX192
YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgOwoKCgoKZXh0ZXJuIGNoYXIgKnFlY3Z0
IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAg
aW50ICogX19kZWNwdCwgaW50ICogX19zaWduKSA7CmV4dGVybiBjaGFyICpxZmN2dCAobG9uZyBk
b3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqIF9f
ZGVjcHQsIGludCAqIF9fc2lnbikgOwpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91YmxlIF9f
dmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIDsKCgoKCmV4dGVybiBpbnQgZWN2dF9y
IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKiBfX2RlY3B0LAogICAgICAgICAg
ICAgICAgICAgaW50ICogX19zaWduLCBjaGFyICogX19idWYsCiAgICAgICAgICAgICAgICAgICBz
aXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u
ZGlnaXQsIGludCAqIF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKiBfX3NpZ24sIGNo
YXIgKiBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgOwoKZXh0ZXJuIGlu
dCBxZWN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAg
ICAgICAgICAgaW50ICogX19kZWNwdCwgaW50ICogX19zaWduLAogICAgICAgICAgICAgICAgICAg
IGNoYXIgKiBfX2J1Ziwgc2l6ZV90IF9fbGVuKSA7CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBk
b3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqIF9f
ZGVjcHQsIGludCAqIF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICogX19idWYsIHNp
emVfdCBfX2xlbikgOwoKCgoKCgpleHRlcm4gaW50IG1ibGVuIChjb25zdCBjaGFyICpfX3MsIHNp
emVfdCBfX24pIDsKCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAqIF9fcHdjLAogICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqIF9fcywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQg
d2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgOwoKCgpleHRlcm4gc2l6ZV90IG1i
c3Rvd2NzICh3Y2hhcl90ICogX19wd2NzLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICogX19zLCBzaXplX3QgX19uKSA7CgpleHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFyICog
X19zLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICogX19wd2NzLCBzaXpl
X3QgX19uKQogICAgICAgICAgICA7CgoKCgoKCgpleHRlcm4gaW50IHJwbWF0Y2ggKGNvbnN0IGNo
YXIgKl9fcmVzcG9uc2UpIDsKIyA4NTggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4g
aW50IGdldGxvYWRhdmcgKGRvdWJsZSBfX2xvYWRhdmdbXSwgaW50IF9fbmVsZW0pIDsKCgoKCgp9
CiMgNTUgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9pbmNs
dWRlL3N0cmluZy5oIiAxIDMKIyA1NiAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAy
IDMKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYXNz
ZXJ0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzcgIi91c3IvaW5j
bHVkZS9hc3NlcnQuaCIgMiAzCiMgNjUgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwpleHRlcm4g
IkMiIHsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9mYWlsIChjb25zdCBjaGFyICpfX2Fzc2VydGlv
biwgY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgX19saW5lLCBjb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9m
YWlsIChpbnQgX19lcnJudW0sIGNvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0
IGNoYXIgKl9fYXNzZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKfQojIDU3ICIvdXNyL2lu
Y2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIgMwojIDE0MSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0
bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxpbnQgX19pbnN0PgpjbGFzcyBfX21hbGxvY19hbGxvY190
ZW1wbGF0ZSB7Cgpwcml2YXRlOgoKICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXplX3Qp
OwogIHN0YXRpYyB2b2lkKiBfU19vb21fcmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKCgogIHN0YXRp
YyB2b2lkICgqIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpOwoKCnB1YmxpYzoKCiAgc3Rh
dGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgewogICAgdm9pZCogX19yZXN1bHQgPSBt
YWxsb2MoX19uKTsKICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9tYWxs
b2MoX19uKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9CgogIHN0YXRpYyB2b2lkIGRlYWxsb2Nh
dGUodm9pZCogX19wLCBzaXplX3QgKQogIHsKICAgIGZyZWUoX19wKTsKICB9CgogIHN0YXRpYyB2
b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICwgc2l6ZV90IF9fbmV3X3N6KQogIHsK
ICAgIHZvaWQqIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgIGlmICgwID09
IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9yZWFsbG9jKF9fcCwgX19uZXdfc3opOwogICAg
cmV0dXJuIF9fcmVzdWx0OwogIH0KCiAgc3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hhbmRs
ZXIodm9pZCAoKl9fZikoKSkpKCkKICB7CiAgICB2b2lkICgqIF9fb2xkKSgpID0gX19tYWxsb2Nf
YWxsb2Nfb29tX2hhbmRsZXI7CiAgICBfX21hbGxvY19hbGxvY19vb21faGFuZGxlciA9IF9fZjsK
ICAgIHJldHVybihfX29sZCk7CiAgfQoKfTsKCgoKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lk
ICgqIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9fbWFsbG9jX2FsbG9jX29vbV9o
YW5kbGVyKSgpID0gMDsKCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCoKX19tYWxsb2NfYWxs
b2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX21hbGxvYyhzaXplX3QgX19uKQp7CiAgICB2b2lk
ICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICBmb3Ig
KDs7KSB7CiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9o
YW5kbGVyOwogICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpIHsgY2VyciA8PCAi
b3V0IG9mIG1lbW9yeSIgPDwgZW5kbDsgZXhpdCgxKTsgfQogICAgICAgICgqX19teV9tYWxsb2Nf
aGFuZGxlcikoKTsKICAgICAgICBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgIGlmIChf
X3Jlc3VsdCkgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KfQoKdGVtcGxhdGUgPGludCBfX2luc3Q+
CnZvaWQqIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9yZWFsbG9jKHZv
aWQqIF9fcCwgc2l6ZV90IF9fbikKewogICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgp
OwogICAgdm9pZCogX19yZXN1bHQ7CgogICAgZm9yICg7OykgewogICAgICAgIF9fbXlfbWFsbG9j
X2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBpZiAoMCA9PSBf
X215X21hbGxvY19oYW5kbGVyKSB7IGNlcnIgPDwgIm91dCBvZiBtZW1vcnkiIDw8IGVuZGw7IGV4
aXQoMSk7IH0KICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgICAgX19yZXN1
bHQgPSByZWFsbG9jKF9fcCwgX19uKTsKICAgICAgICBpZiAoX19yZXN1bHQpIHJldHVybihfX3Jl
c3VsdCk7CiAgICB9Cn0KCnR5cGVkZWYgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8MD4gbWFsbG9j
X2FsbG9jOwoKdGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmNsYXNzIHNpbXBsZV9h
bGxvYyB7CgpwdWJsaWM6CiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0ZShzaXplX3QgX19uKQogICAg
ICB7IHJldHVybiAwID09IF9fbiA/IDAgOiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShfX24gKiBz
aXplb2YgKF9UcCkpOyB9CiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0ZSh2b2lkKQogICAgICB7IHJl
dHVybiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXplb2YgKF9UcCkpOyB9CiAgICBzdGF0aWMg
dm9pZCBkZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAgICB7IGlmICgwICE9IF9f
bikgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mIChfVHApKTsgfQogICAgc3Rh
dGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCkKICAgICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUo
X19wLCBzaXplb2YgKF9UcCkpOyB9Cn07CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNs
YXNzIGRlYnVnX2FsbG9jIHsKCnByaXZhdGU6CgogIGVudW0ge19TX2V4dHJhID0gOH07CgoKCnB1
YmxpYzoKCiAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgewogICAgY2hhciog
X19yZXN1bHQgPSAoY2hhciopX0FsbG9jOjphbGxvY2F0ZShfX24gKyBfU19leHRyYSk7CiAgICAq
KHNpemVfdCopX19yZXN1bHQgPSBfX247CiAgICByZXR1cm4gX19yZXN1bHQgKyBfU19leHRyYTsK
ICB9CgogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogIHsK
ICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIF9TX2V4dHJhOwogICAgKCh2b2lkKSAo
KCooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24pID8gMCA6IChfX2Fzc2VydF9mYWlsICgiKihzaXpl
X3QqKV9fcmVhbF9wID09IF9fbiIsICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiLCAy
NjMsICgoY29uc3QgY2hhciAqKSAwKSksIDApKSk7CiAgICBfQWxsb2M6OmRlYWxsb2NhdGUoX19y
ZWFsX3AsIF9fbiArIF9TX2V4dHJhKTsKICB9CgogIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZv
aWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opCiAgewogICAgY2hhciog
X19yZWFsX3AgPSAoY2hhciopX19wIC0gX1NfZXh0cmE7CiAgICAoKHZvaWQpICgoKihzaXplX3Qq
KV9fcmVhbF9wID09IF9fb2xkX3N6KSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiooc2l6ZV90Kilf
X3JlYWxfcCA9PSBfX29sZF9zeiIsICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiLCAy
NzAsICgoY29uc3QgY2hhciAqKSAwKSksIDApKSk7CiAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFy
KikKICAgICAgX0FsbG9jOjpyZWFsbG9jYXRlKF9fcmVhbF9wLCBfX29sZF9zeiArIF9TX2V4dHJh
LCBfX25ld19zeiArIF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbmV3X3N6
OwogICAgcmV0dXJuIF9fcmVzdWx0ICsgX1NfZXh0cmE7CiAgfQoKfTsKIyAzMTkgIi91c3IvaW5j
bHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8Ym9vbCB0aHJlYWRzLCBpbnQgaW5z
dD4KY2xhc3MgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlIHsKCnByaXZhdGU6CgoKCiAgICBlbnVt
IHtfQUxJR04gPSA4fTsKICAgIGVudW0ge19NQVhfQllURVMgPSAxMjh9OwogICAgZW51bSB7X05G
UkVFTElTVFMgPSBfTUFYX0JZVEVTL19BTElHTn07CgogIHN0YXRpYyBzaXplX3QKICBfU19yb3Vu
ZF91cChzaXplX3QgX19ieXRlcykKICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsgX0FMSUdOLTEp
ICYgfihfQUxJR04gLSAxKSk7IH0KCnByaXZhdGU6CiAgdW5pb24gX09iaiB7CiAgICAgICAgdW5p
b24gX09iaiogX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgY2hhciBfTV9jbGllbnRfZGF0YVsx
XTsKICB9Owpwcml2YXRlOgoKCgoKICAgIHN0YXRpYyBfT2JqKiBfU19mcmVlX2xpc3RbX05GUkVF
TElTVFNdOwoKICBzdGF0aWMgc2l6ZV90IF9TX2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVz
KSB7CiAgICAgICAgcmV0dXJuICgoKF9fYnl0ZXMpICsgX0FMSUdOLTEpL19BTElHTiAtIDEpOwog
IH0KCgogIHN0YXRpYyB2b2lkKiBfU19yZWZpbGwoc2l6ZV90IF9fbik7CgoKICBzdGF0aWMgY2hh
ciogX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCgogIHN0YXRp
YyBjaGFyKiBfU19zdGFydF9mcmVlOwogIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICBzdGF0
aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsKIyAzOTEgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfYWxs
b2MuaCIgMwogICAgY2xhc3MgX0xvY2sgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgX0xv
Y2soKSB7IDsgfQogICAgICAgICAgICB+X0xvY2soKSB7IDsgfQogICAgfTsKICAgIGZyaWVuZCBj
bGFzcyBfTG9jazsKCnB1YmxpYzoKCgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19u
KQogIHsKICAgIF9PYmoqICogX19teV9mcmVlX2xpc3Q7CiAgICBfT2JqKiBfX3Jlc3VsdDsKCiAg
ICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykgewogICAgICAgIHJldHVybihtYWxsb2Nf
YWxsb2M6OmFsbG9jYXRlKF9fbikpOwogICAgfQogICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVl
X2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCgoKCgoKICAgIF9fcmVzdWx0ID0gKl9f
bXlfZnJlZV9saXN0OwogICAgaWYgKF9fcmVzdWx0ID09IDApIHsKICAgICAgICB2b2lkKiBfX3Ig
PSBfU19yZWZpbGwoX1Nfcm91bmRfdXAoX19uKSk7CiAgICAgICAgcmV0dXJuIF9fcjsKICAgIH0K
ICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcmVzdWx0IC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAg
cmV0dXJuIChfX3Jlc3VsdCk7CiAgfTsKCgogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCog
X19wLCBzaXplX3QgX19uKQogIHsKICAgIF9PYmoqIF9fcSA9IChfT2JqKilfX3A7CiAgICBfT2Jq
KiAqIF9fbXlfZnJlZV9saXN0OwoKICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7
CiAgICAgICAgbWFsbG9jX2FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uKTsKICAgICAgICByZXR1
cm47CiAgICB9CiAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0
X2luZGV4KF9fbik7CgoKCgoKICAgIF9fcSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2Zy
ZWVfbGlzdDsKICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcTsKCiAgfQoKICBzdGF0aWMgdm9pZCog
cmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KTsK
Cn0gOwoKdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8ZmFsc2UsIDA+IGFsbG9jOwp0
eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxmYWxzZSwgMD4gc2luZ2xlX2NsaWVudF9h
bGxvYzsKCgoKCgoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hhcioK
X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfY2h1bmtfYWxs
b2Moc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50JiBfX25vYmpzKQp7CiAgICBjaGFyKiBfX3Jlc3VsdDsK
ICAgIHNpemVfdCBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgIHNpemVfdCBf
X2J5dGVzX2xlZnQgPSBfU19lbmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7CgogICAgaWYgKF9fYnl0
ZXNfbGVmdCA+PSBfX3RvdGFsX2J5dGVzKSB7CiAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9m
cmVlOwogICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICByZXR1
cm4oX19yZXN1bHQpOwogICAgfSBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKSB7CiAg
ICAgICAgX19ub2JqcyA9IChpbnQpKF9fYnl0ZXNfbGVmdC9fX3NpemUpOwogICAgICAgIF9fdG90
YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRf
ZnJlZTsKICAgICAgICBfU19zdGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgcmV0
dXJuKF9fcmVzdWx0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0
ID0KICAgICAgICAgIDIgKiBfX3RvdGFsX2J5dGVzICsgX1Nfcm91bmRfdXAoX1NfaGVhcF9zaXpl
ID4+IDQpOwoKICAgICAgICBpZiAoX19ieXRlc19sZWZ0ID4gMCkgewogICAgICAgICAgICBfT2Jq
KiAqIF9fbXlfZnJlZV9saXN0ID0KICAgICAgICAgICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0
ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19ieXRlc19sZWZ0KTsKCiAgICAgICAgICAgICgoX09iaiop
X1Nfc3RhcnRfZnJlZSkgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAg
ICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IChfT2JqKilfU19zdGFydF9mcmVlOwogICAgICAg
IH0KICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKW1hbGxvYyhfX2J5dGVzX3RvX2dldCk7
CiAgICAgICAgaWYgKDAgPT0gX1Nfc3RhcnRfZnJlZSkgewogICAgICAgICAgICBzaXplX3QgX19p
OwogICAgICAgICAgICBfT2JqKiAqIF9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICBfT2JqKiBf
X3A7CgoKCiAgICAgICAgICAgIGZvciAoX19pID0gX19zaXplOyBfX2kgPD0gX01BWF9CWVRFUzsg
X19pICs9IF9BTElHTikgewogICAgICAgICAgICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVl
X2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2kpOwogICAgICAgICAgICAgICAgX19wID0gKl9f
bXlfZnJlZV9saXN0OwogICAgICAgICAgICAgICAgaWYgKDAgIT0gX19wKSB7CiAgICAgICAgICAg
ICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAg
ICAgICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19wOwogICAgICAgICAgICAg
ICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9faTsKICAgICAgICAgICAgICAg
ICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CgoKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBfU19lbmRfZnJlZSA9IDA7CiAgICAg
ICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX2J5
dGVzX3RvX2dldCk7CgoKCiAgICAgICAgfQogICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVz
X3RvX2dldDsKICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3Rv
X2dldDsKICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAg
ICB9Cn0KCgoKCgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnZvaWQqCl9f
ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3JlZmlsbChzaXpl
X3QgX19uKQp7CiAgICBpbnQgX19ub2JqcyA9IDIwOwogICAgY2hhciogX19jaHVuayA9IF9TX2No
dW5rX2FsbG9jKF9fbiwgX19ub2Jqcyk7CiAgICBfT2JqKiAqIF9fbXlfZnJlZV9saXN0OwogICAg
X09iaiogX19yZXN1bHQ7CiAgICBfT2JqKiBfX2N1cnJlbnRfb2JqOwogICAgX09iaiogX19uZXh0
X29iajsKICAgIGludCBfX2k7CgogICAgaWYgKDEgPT0gX19ub2JqcykgcmV0dXJuKF9fY2h1bmsp
OwogICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChf
X24pOwoKCiAgICAgIF9fcmVzdWx0ID0gKF9PYmoqKV9fY2h1bms7CiAgICAgICpfX215X2ZyZWVf
bGlzdCA9IF9fbmV4dF9vYmogPSAoX09iaiopKF9fY2h1bmsgKyBfX24pOwogICAgICBmb3IgKF9f
aSA9IDE7IDsgX19pKyspIHsKICAgICAgICBfX2N1cnJlbnRfb2JqID0gX19uZXh0X29iajsKICAg
ICAgICBfX25leHRfb2JqID0gKF9PYmoqKSgoY2hhciopX19uZXh0X29iaiArIF9fbik7CiAgICAg
ICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkgewogICAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+
IF9NX2ZyZWVfbGlzdF9saW5rID0gMDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IF9fbmV4
dF9vYmo7CiAgICAgICAgfQogICAgICB9CiAgICByZXR1cm4oX19yZXN1bHQpOwp9Cgp0ZW1wbGF0
ZSA8Ym9vbCB0aHJlYWRzLCBpbnQgaW5zdD4Kdm9pZCoKX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl
PHRocmVhZHMsIGluc3Q+OjpyZWFsbG9jYXRlKHZvaWQqIF9fcCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX29sZF9zeiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25l
d19zeikKewogICAgdm9pZCogX19yZXN1bHQ7CiAgICBzaXplX3QgX19jb3B5X3N6OwoKICAgIGlm
IChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhfQllURVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90KSBf
TUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJuKHJlYWxsb2MoX19wLCBfX25ld19zeikpOwogICAg
fQogICAgaWYgKF9TX3JvdW5kX3VwKF9fb2xkX3N6KSA9PSBfU19yb3VuZF91cChfX25ld19zeikp
IHJldHVybihfX3ApOwogICAgX19yZXN1bHQgPSBhbGxvY2F0ZShfX25ld19zeik7CiAgICBfX2Nv
cHlfc3ogPSBfX25ld19zeiA+IF9fb2xkX3N6PyBfX29sZF9zeiA6IF9fbmV3X3N6OwogICAgbWVt
Y3B5KF9fcmVzdWx0LCBfX3AsIF9fY29weV9zeik7CiAgICBkZWFsbG9jYXRlKF9fcCwgX19vbGRf
c3opOwogICAgcmV0dXJuKF9fcmVzdWx0KTsKfQojIDY5MSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0
bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hhciog
X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfc3RhcnRfZnJl
ZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqIF9fZGVm
YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2VuZF9mcmVlID0gMDsK
CnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kc2l6ZV90IF9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2hlYXBfc2l6ZSA9IDA7Cgp0ZW1w
bGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+Cl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0
ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9PYmoqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro
cmVhZHMsIF9faW5zdD4gOjpfU19mcmVlX2xpc3RbCiAgICBfTkZSRUVMSVNUUwpdID0gezAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIH07CiMgMjIgIi91c3Iv
aW5jbHVkZS9nKystMy9hbGxvYy5oIiAyIDMKIyA0MCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9i
YXN0cmluZy5oIiAyIDMKCmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJl
YW07CgojIDEgIi91c3IvaW5jbHVkZS9nKystMy9pdGVyYXRvciIgMSAzCiMgMzAgIi91c3IvaW5j
bHVkZS9nKystMy9pdGVyYXRvciIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfY29uZmln
LmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvZysrLTMvaXRlcmF0b3IiIDIgMwojIDEgIi91c3Iv
aW5jbHVkZS9nKystMy9zdGxfcmVsb3BzLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvZysrLTMv
c3RsX3JlbG9wcy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBib29sIG9wZXJhdG9y
IT0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9f
eSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBf
VHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IF9UcCYgX194LCBjb25z
dCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195
KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQojIDMyICIvdXNyL2luY2x1ZGUvZysrLTMvaXRl
cmF0b3IiIDIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUv
Mi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL2crKy0zL2l0ZXJh
dG9yIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLTMvaW9zdHJlYW0uaCIgMSAzCiMgMzcg
Ii91c3IvaW5jbHVkZS9nKystMy9pdGVyYXRvciIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKyst
My9zdGxfaXRlcmF0b3IuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0
b3IuaCIgMwpzdHJ1Y3QgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3Qgb3V0cHV0X2l0ZXJh
dG9yX3RhZyB7fTsKc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlucHV0X2l0
ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDogcHVibGlj
IGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90
YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcge307CgoKCgoKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGlucHV0X2l0ZXJhdG9yIHsKICB0
eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9U
cCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl
ZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKc3RydWN0IG91
dHB1dF9pdGVyYXRvciB7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2Nh
dGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5j
ZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGZvcndh
cmRfaXRlcmF0b3IgewogIHR5cGVkZWYgZm9yd2FyZF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0
ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZm
ZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVy
ZW5jZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBi
aWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf
dGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRl
ZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5
cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlz
dGFuY2U+IHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yIHsKICB0eXBlZGVmIHJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVl
X3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1Rw
KiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0NhdGVnb3J5LCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZfdCwKICAgICAg
ICAgIGNsYXNzIF9Qb2ludGVyID0gX1RwKiwgY2xhc3MgX1JlZmVyZW5jZSA9IF9UcCY+CnN0cnVj
dCBpdGVyYXRvciB7CiAgdHlwZWRlZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlw
ZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7
CiAgdHlwZWRlZiBfUG9pbnRlciBwb2ludGVyOwogIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVu
Y2U7Cn07CiMgMTc1ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgaW5wdXRfaXRlcmF0b3JfdGFn
Cml0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IGlucHV0X2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYp
CiAgeyByZXR1cm4gaW5wdXRfaXRlcmF0b3JfdGFnKCk7IH0KCmlubGluZSBvdXRwdXRfaXRlcmF0
b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IG91dHB1dF9pdGVyYXRvciYpCiAgeyByZXR1
cm4gb3V0cHV0X2l0ZXJhdG9yX3RhZygpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
RGlzdGFuY2U+CmlubGluZSBmb3J3YXJkX2l0ZXJhdG9yX3RhZwppdGVyYXRvcl9jYXRlZ29yeShj
b25zdCBmb3J3YXJkX2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYpCiAgeyByZXR1cm4gZm9yd2Fy
ZF9pdGVyYXRvcl90YWcoKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNl
PgppbmxpbmUgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcKaXRlcmF0b3JfY2F0ZWdvcnkoY29u
c3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mKQogIHsgcmV0dXJuIGJp
ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCk7IH0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9EaXN0YW5jZT4KaW5saW5lIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnCml0ZXJhdG9yX2Nh
dGVnb3J5KGNvbnN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+JikKICB7
IHJldHVybiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZygpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgppbmxpbmUgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnko
Y29uc3QgX1RwKikKICB7IHJldHVybiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZygpOyB9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfVHAqIHZhbHVlX3R5
cGUoY29uc3QgaW5wdXRfaXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+JikKICB7IHJldHVybiAoX1Rw
KikoMCk7IH0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9U
cCogdmFsdWVfdHlwZShjb25zdCBmb3J3YXJkX2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYpCiAg
eyByZXR1cm4gKF9UcCopKDApOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFu
Y2U+CmlubGluZSBfVHAqIHZhbHVlX3R5cGUoY29uc3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxf
VHAsIF9EaXN0YW5jZT4mKQogIHsgcmV0dXJuIChfVHAqKSgwKTsgfQoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX1RwKiB2YWx1ZV90eXBlKGNvbnN0IHJhbmRv
bV9hY2Nlc3NfaXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+JikKICB7IHJldHVybiAoX1RwKikoMCk7
IH0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBfVHAqIHZhbHVlX3R5cGUoY29uc3QgX1Rw
KikgeyByZXR1cm4gKF9UcCopKDApOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlz
dGFuY2U+CmlubGluZSBfRGlzdGFuY2UqIGRpc3RhbmNlX3R5cGUoY29uc3QgaW5wdXRfaXRlcmF0
b3I8X1RwLCBfRGlzdGFuY2U+JikKewogIHJldHVybiAoX0Rpc3RhbmNlKikoMCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9EaXN0YW5jZSogZGlzdGFu
Y2VfdHlwZShjb25zdCBmb3J3YXJkX2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYpCnsKICByZXR1
cm4gKF9EaXN0YW5jZSopKDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFu
Y2U+CmlubGluZSBfRGlzdGFuY2UqCmRpc3RhbmNlX3R5cGUoY29uc3QgYmlkaXJlY3Rpb25hbF9p
dGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mKQp7CiAgcmV0dXJuIChfRGlzdGFuY2UqKSgwKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0Rpc3RhbmNlKgpk
aXN0YW5jZV90eXBlKGNvbnN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+
JikKewogIHJldHVybiAoX0Rpc3RhbmNlKikoMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+Cmlu
bGluZSBwdHJkaWZmX3QqIGRpc3RhbmNlX3R5cGUoY29uc3QgX1RwKikgeyByZXR1cm4gKHB0cmRp
ZmZfdCopKDApOyB9CiMgMjU5ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2
b2lkIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSYgX19uLCBpbnB1dF9pdGVyYXRv
cl90YWcpCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsgKytfX2ZpcnN0OyArK19fbjsg
fQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFu
Y2U+CmlubGluZSB2b2lkIF9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UmIF9fbiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRv
cl90YWcpCnsKICBfX24gKz0gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGRpc3RhbmNlKF9JbnB1
dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCwgX0Rpc3RhbmNlJiBfX24pCnsKICBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19u
LCBpdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KIyAzMTEgIi91c3IvaW5jbHVkZS9nKyst
My9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Rp
c3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2Ug
X19uLCBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICB3aGlsZSAoX19uLS0pICsrX19pOwp9CgoKCgoK
dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4K
aW5saW5lIHZvaWQgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3Rh
bmNlIF9fbiwKICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn
KSB7CiAgaWYgKF9fbiA+PSAwKQogICAgd2hpbGUgKF9fbi0tKSArK19faTsKICBlbHNlCiAgICB3
aGlsZSAoX19uKyspIC0tX19pOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICBy
YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9faSArPSBfX247Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBhZHZhbmNl
KF9JbnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24pIHsKICBfX2FkdmFuY2UoX19pLCBf
X24sIGl0ZXJhdG9yX2NhdGVnb3J5KF9faSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5l
cj4KY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciog
Y29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwog
IHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVm
IHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk
ZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGJh
Y2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkge30K
ICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlw
ZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgewogICAgY29udGFpbmVyLT5w
dXNoX2JhY2soX192YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGJhY2tfaW5zZXJ0X2l0
ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tf
aW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7
IH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsg
cmV0dXJuICp0aGlzOyB9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUg
b3V0cHV0X2l0ZXJhdG9yX3RhZwppdGVyYXRvcl9jYXRlZ29yeShjb25zdCBiYWNrX2luc2VydF9p
dGVyYXRvcjxfQ29udGFpbmVyPiYpCnsKICByZXR1cm4gb3V0cHV0X2l0ZXJhdG9yX3RhZygpOwp9
CgoKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUgYmFja19pbnNlcnRfaXRlcmF0
b3I8X0NvbnRhaW5lcj4gYmFja19pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpIHsKICByZXR1cm4g
YmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9Db250YWluZXI+CmNsYXNzIGZyb250X2luc2VydF9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBf
Q29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgY29udGFp
bmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5
OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5
cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAg
ZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWlu
ZXIoJl9feCkge30KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0
b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsKICAg
IGNvbnRhaW5lci0+cHVzaF9mcm9udChfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAg
ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAq
dGhpczsgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygp
IHsgcmV0dXJuICp0aGlzOyB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBv
cGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9D
b250YWluZXI+CmlubGluZSBvdXRwdXRfaXRlcmF0b3JfdGFnCml0ZXJhdG9yX2NhdGVnb3J5KGNv
bnN0IGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYpCnsKICByZXR1cm4gb3V0cHV0
X2l0ZXJhdG9yX3RhZygpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUg
ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGZyb250X2luc2VydGVyKF9Db250YWlu
ZXImIF9feCkgewogIHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGluc2VydF9pdGVyYXRvciB7
CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgdHlwZW5hbWUgX0NvbnRhaW5l
cjo6aXRlcmF0b3IgaXRlcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJf
dHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg
dHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsK
ICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBpbnNl
cnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRv
ciBfX2kpCiAgICA6IGNvbnRhaW5lcigmX194KSwgaXRlcihfX2kpIHt9CiAgaW5zZXJ0X2l0ZXJh
dG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2
YWx1ZV90eXBlJiBfX3ZhbHVlKSB7CiAgICBpdGVyID0gY29udGFpbmVyLT5pbnNlcnQoaXRlciwg
X192YWx1ZSk7CiAgICArK2l0ZXI7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGluc2VydF9pdGVy
YXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBpbnNlcnRf
aXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGlu
c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlz
OyB9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUgb3V0cHV0X2l0ZXJh
dG9yX3RhZwppdGVyYXRvcl9jYXRlZ29yeShjb25zdCBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l
cj4mKQp7CiAgcmV0dXJuIG91dHB1dF9pdGVyYXRvcl90YWcoKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX0NvbnRhaW5lciwgY2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUKaW5zZXJ0X2l0ZXJhdG9yPF9D
b250YWluZXI+IGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJhdG9yIF9faSkKewogIHR5
cGVkZWYgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pdGVyOwogIHJldHVybiBpbnNl
cnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194LCBfX2l0ZXIoX19pKSk7Cn0KCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNl
ID0gX1RwJiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZfdD4KCgoKCmNsYXNz
IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiByZXZlcnNlX2JpZGly
ZWN0aW9uYWxfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgX1RwLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZWZlcmVuY2UsIF9EaXN0YW5jZT4gX1Nl
bGY7CnByb3RlY3RlZDoKICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoK
ICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog
IHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90
eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVu
Y2U7CgogIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcigpIHt9CiAgZXhwbGljaXQgcmV2
ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX194KQog
ICAgOiBjdXJyZW50KF9feCkge30KICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIGJhc2UoKSBjb25z
dCB7IHJldHVybiBjdXJyZW50OyB9CiAgX1JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsKICAgIHJldHVybiAqLS1f
X3RtcDsKICB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0
b3IqKCkpOyB9CgogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAgcmV0
dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAg
PSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9w
ZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxm
IG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50
OwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv
bmFsSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZmVyZW5jZSwKICAgICAgICAgIGNsYXNz
IF9EaXN0YW5jZT4KaW5saW5lIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnCml0ZXJhdG9yX2Nh
dGVnb3J5KGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlkaXJlY3Rpb25h
bEl0ZXJhdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1RwLCBfUmVmZXJlbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlPiYpCnsKICByZXR1cm4gYmlkaXJlY3Rp
b25hbF9pdGVyYXRvcl90YWcoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRl
cmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZmVyZW5jZSwKICAgICAgICAgIGNsYXNzIF9EaXN0
YW5jZT4KaW5saW5lIF9UcCoKdmFsdWVfdHlwZShjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxf
aXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgX1RwLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZWZlcmVuY2UsIF9EaXN0YW5jZT4mKQp7CiAg
cmV0dXJuIChfVHAqKSAwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRv
ciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNlLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNl
PgppbmxpbmUgX0Rpc3RhbmNlKgpkaXN0YW5jZV90eXBlKGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rp
b25hbF9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZWZlcmVuY2UsIF9EaXN0YW5jZT4mKQp7
CiAgcmV0dXJuIChfRGlzdGFuY2UqKSAwOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlJdGVyLCBj
bGFzcyBfVHAsIGNsYXNzIF9SZWYsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBi
b29sIG9wZXJhdG9yPT0oCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8
X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3gsCiAgICBjb25zdCByZXZlcnNlX2Jp
ZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3kp
CnsKICByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOwp9CiMgNjc1ICIvdXNyL2luY2x1
ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJiwKICAgICAgICAgIGNs
YXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZfdD4KCgoKCmNsYXNzIHJldmVyc2VfaXRlcmF0b3Igewog
IHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIF9UcCwgX1Jl
ZmVyZW5jZSwgX0Rpc3RhbmNlPgogICAgICAgIF9TZWxmOwpwcm90ZWN0ZWQ6CiAgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRl
cmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAg
dHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVy
OwogIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7CgogIHJldmVyc2VfaXRlcmF0b3IoKSB7
fQogIGV4cGxpY2l0IHJldmVyc2VfaXRlcmF0b3IoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9feCkg
OiBjdXJyZW50KF9feCkge30KICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgYmFzZSgpIGNvbnN0IHsg
cmV0dXJuIGN1cnJlbnQ7IH0KICBfUmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJu
ICooY3VycmVudCAtIDEpOyB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJu
ICYob3BlcmF0b3IqKCkpOyB9CgogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50
OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1Nl
bGYgX190bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAg
X1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAg
KytjdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiBvcGVyYXRvcisoX0Rpc3Rh
bmNlIF9fbikgY29uc3QgewogICAgcmV0dXJuIF9TZWxmKGN1cnJlbnQgLSBfX24pOwogIH0KICBf
U2VsZiYgb3BlcmF0b3IrPShfRGlzdGFuY2UgX19uKSB7CiAgICBjdXJyZW50IC09IF9fbjsKICAg
IHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItKF9EaXN0YW5jZSBfX24pIGNvbnN0
IHsKICAgIHJldHVybiBfU2VsZihjdXJyZW50ICsgX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9y
LT0oX0Rpc3RhbmNlIF9fbikgewogICAgY3VycmVudCArPSBfX247CiAgICByZXR1cm4gKnRoaXM7
CiAgfQogIF9SZWZlcmVuY2Ugb3BlcmF0b3JbXShfRGlzdGFuY2UgX19uKSBjb25zdCB7IHJldHVy
biAqKCp0aGlzICsgX19uKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciwgY2xhc3MgX1RwLAogICAgICAgICAgY2xhc3MgX1JlZmVyZW5jZSwgY2xhc3MgX0Rpc3Rh
bmNlPgppbmxpbmUgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcKaXRlcmF0b3JfY2F0ZWdvcnko
Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIF9UcCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmVmZXJlbmNlLCBfRGlzdGFuY2U+
JikKewogIHJldHVybiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZygpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsCiAgICAgICAgICBjbGFzcyBf
UmVmZXJlbmNlLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfVHAqIHZhbHVlX3R5cGUoY29uc3Qg
cmV2ZXJzZV9pdGVyYXRvcjxfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIF9UcCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZWZlcmVuY2UsIF9EaXN0YW5jZT4m
KQp7CiAgcmV0dXJuIChfVHAqKSAwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yLCBjbGFzcyBfVHAsCiAgICAgICAgICBjbGFzcyBfUmVmZXJlbmNlLCBjbGFzcyBfRGlz
dGFuY2U+CmlubGluZSBfRGlzdGFuY2UqCmRpc3RhbmNlX3R5cGUoY29uc3QgcmV2ZXJzZV9pdGVy
YXRvcjxfUmFuZG9tQWNjZXNzSXRlcmF0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfVHAsIF9SZWZlcmVuY2UsIF9EaXN0YW5jZT4mKQp7CiAgcmV0dXJuIChfRGlzdGFu
Y2UqKSAwOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3Mg
X1RwLAogICAgICAgICAgY2xhc3MgX1JlZmVyZW5jZSwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUg
Ym9vbApvcGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yLCBfVHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmVmZXJlbmNlLCBf
RGlzdGFuY2U+JiBfX3gsCiAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfUmFuZG9t
QWNjZXNzSXRlcmF0b3IsIF9UcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S
ZWZlcmVuY2UsIF9EaXN0YW5jZT4mIF9feSkKewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5i
YXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9U
cCwKICAgICAgICAgIGNsYXNzIF9SZWZlcmVuY2UsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJv
b2wKb3BlcmF0b3I8KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
LCBfVHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZWZlcmVuY2UsIF9EaXN0
YW5jZT4mIF9feCwKICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yLCBfVHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZWZlcmVu
Y2UsIF9EaXN0YW5jZT4mIF9feSkKewogIHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLAogICAg
ICAgICAgY2xhc3MgX1JlZmVyZW5jZSwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0Rpc3RhbmNl
Cm9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9SYW5kb21BY2Nlc3NJdGVyYXRvciwg
X1RwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmVmZXJlbmNlLCBfRGlzdGFu
Y2U+JiBfX3gsCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciwgX1RwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmVmZXJlbmNl
LCBfRGlzdGFuY2U+JiBfX3kpCnsKICByZXR1cm4gX195LmJhc2UoKSAtIF9feC5iYXNlKCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZEFjY0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZiwgY2xh
c3MgX0Rpc3Q+CmlubGluZSByZXZlcnNlX2l0ZXJhdG9yPF9SYW5kQWNjSXRlciwgX1RwLCBfUmVm
LCBfRGlzdD4Kb3BlcmF0b3IrKF9EaXN0IF9fbiwKICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRl
cmF0b3I8X1JhbmRBY2NJdGVyLCBfVHAsIF9SZWYsIF9EaXN0PiYgX194KQp7CiAgcmV0dXJuIHJl
dmVyc2VfaXRlcmF0b3I8X1JhbmRBY2NJdGVyLCBfVHAsIF9SZWYsIF9EaXN0PihfX3guYmFzZSgp
IC0gX19uKTsKfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdCA9IHB0cmRp
ZmZfdD4KY2xhc3MgaXN0cmVhbV9pdGVyYXRvciB7CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSAo
Y29uc3QgaXN0cmVhbV9pdGVyYXRvciYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvciYpOwpwcm90ZWN0ZWQ6CiAgaXN0
cmVhbSogX01fc3RyZWFtOwogIF9UcCBfTV92YWx1ZTsKICBib29sIF9NX2VuZF9tYXJrZXI7CiAg
dm9pZCBfTV9yZWFkKCkgewogICAgX01fZW5kX21hcmtlciA9ICgqX01fc3RyZWFtKSA/IHRydWUg
OiBmYWxzZTsKICAgIGlmIChfTV9lbmRfbWFya2VyKSAqX01fc3RyZWFtID4+IF9NX3ZhbHVlOwog
ICAgX01fZW5kX21hcmtlciA9ICgqX01fc3RyZWFtKSA/IHRydWUgOiBmYWxzZTsKICB9CnB1Ymxp
YzoKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBl
ZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3QgZGlmZmVyZW5jZV90eXBlOwogIHR5
cGVkZWYgY29uc3QgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVuY2U7
CgogIGlzdHJlYW1faXRlcmF0b3IoKSA6IF9NX3N0cmVhbSgmY2luKSwgX01fZW5kX21hcmtlcihm
YWxzZSkge30KICBpc3RyZWFtX2l0ZXJhdG9yKGlzdHJlYW0mIF9fcykgOiBfTV9zdHJlYW0oJl9f
cykgeyBfTV9yZWFkKCk7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4g
X01fdmFsdWU7IH0KCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVy
YXRvciooKSk7IH0KCiAgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0PiYgb3BlcmF0b3IrKygp
IHsKICAgIF9NX3JlYWQoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXN0cmVhbV9pdGVyYXRv
cjxfVHAsIF9EaXN0PiBvcGVyYXRvcisrKGludCkgewogICAgaXN0cmVhbV9pdGVyYXRvcjxfVHAs
IF9EaXN0PiBfX3RtcCA9ICp0aGlzOwogICAgX01fcmVhZCgpOwogICAgcmV0dXJuIF9fdG1wOwog
IH0KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3Q+CmlubGluZSBpbnB1dF9p
dGVyYXRvcl90YWcKaXRlcmF0b3JfY2F0ZWdvcnkoY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAs
IF9EaXN0PiYpCnsKICByZXR1cm4gaW5wdXRfaXRlcmF0b3JfdGFnKCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9EaXN0PgppbmxpbmUgX1RwKgp2YWx1ZV90eXBlKGNvbnN0IGlzdHJl
YW1faXRlcmF0b3I8X1RwLCBfRGlzdD4mKSB7IHJldHVybiAoX1RwKikgMDsgfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3Q+CmlubGluZSBfRGlzdCoKZGlzdGFuY2VfdHlwZShjb25z
dCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3Q+JikgeyByZXR1cm4gKF9EaXN0KikwOyB9CgoK
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYgX194LAogICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+JiBf
X3kpIHsKICByZXR1cm4gKF9feC5fTV9zdHJlYW0gPT0gX195Ll9NX3N0cmVhbSAmJgogICAgICAg
ICAgX194Ll9NX2VuZF9tYXJrZXIgPT0gX195Ll9NX2VuZF9tYXJrZXIpIHx8CiAgICAgICAgIF9f
eC5fTV9lbmRfbWFya2VyID09IGZhbHNlICYmIF9feS5fTV9lbmRfbWFya2VyID09IGZhbHNlOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBvc3RyZWFtX2l0ZXJhdG9yIHsKcHJvdGVjdGVk
OgogIG9zdHJlYW0qIF9NX3N0cmVhbTsKICBjb25zdCBjaGFyKiBfTV9zdHJpbmc7CnB1YmxpYzoK
ICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRl
ZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl
ZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBvc3RyZWFtX2l0
ZXJhdG9yKG9zdHJlYW0mIF9fcykgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZygwKSB7fQog
IG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbSYgX19zLCBjb25zdCBjaGFyKiBfX2MpCiAgICA6IF9N
X3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKF9fYykge30KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4m
IG9wZXJhdG9yPShjb25zdCBfVHAmIF9fdmFsdWUpIHsKICAgICpfTV9zdHJlYW0gPDwgX192YWx1
ZTsKICAgIGlmIChfTV9zdHJpbmcpICpfTV9zdHJlYW0gPDwgX01fc3RyaW5nOwogICAgcmV0dXJu
ICp0aGlzOwogIH0KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKigpIHsgcmV0dXJu
ICp0aGlzOyB9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4g
KnRoaXM7IH0KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVy
biAqdGhpczsgfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgb3V0cHV0X2l0ZXJh
dG9yX3RhZwppdGVyYXRvcl9jYXRlZ29yeShjb25zdCBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mKSB7
CiAgcmV0dXJuIG91dHB1dF9pdGVyYXRvcl90YWcoKTsKfQojIDM5ICIvdXNyL2luY2x1ZGUvZysr
LTMvaXRlcmF0b3IiIDIgMwojIDQ1ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgi
IDIgMwojIDU4ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvZysrLTMvY2Fzc2VydCIgMSAzCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0
LmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
ZmVhdHVyZXMuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMiAzCiMgNjUgIi91
c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwpleHRlcm4gIkMiIHsKCgpleHRlcm4gdm9pZCBfX2Fzc2Vy
dF9mYWlsIChjb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgY29uc3QgY2hhciAqX19maWxlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLCBjb25zdCBjaGFyICpf
X2Z1bmN0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIGNvbnN0IGNo
YXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBfX2xpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpf
X2Z1bmN0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBjb25zdCBj
aGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgoKfQojIDcgIi91c3IvaW5jbHVkZS9nKystMy9jYXNzZXJ0IiAyIDMKIyA1
OSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCgoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cyA9IHN0cmluZ19jaGFyX3RyYWl0czxjaGFyVD4sCiAg
ICAgICAgICBjbGFzcyBBbGxvY2F0b3IgPSBhbGxvYyA+CmNsYXNzIGJhc2ljX3N0cmluZwp7CnBy
aXZhdGU6CiAgc3RydWN0IFJlcCB7CiAgICBzaXplX3QgbGVuLCByZXMsIHJlZjsKICAgIGJvb2wg
c2VsZmlzaDsKCiAgICBjaGFyVCogZGF0YSAoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNo
YXJUICo+KHRoaXMgKyAxKTsgfQogICAgY2hhclQmIG9wZXJhdG9yW10gKHNpemVfdCBzKSB7IHJl
dHVybiBkYXRhICgpIFtzXTsgfQogICAgY2hhclQqIGdyYWIgKCkgeyBpZiAoc2VsZmlzaCkgcmV0
dXJuIGNsb25lICgpOyArK3JlZjsgcmV0dXJuIGRhdGEgKCk7IH0KIyAxMTQgIi91c3IvaW5jbHVk
ZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMwogICAgdm9pZCByZWxlYXNlICgpIHsgaWYgKC0tcmVm
ID09IDApIGRlbGV0ZSB0aGlzOyB9CgoKICAgIGlubGluZSBzdGF0aWMgdm9pZCAqIG9wZXJhdG9y
IG5ldyAoc2l6ZV90LCBzaXplX3QpOwogICAgaW5saW5lIHN0YXRpYyB2b2lkIG9wZXJhdG9yIGRl
bGV0ZSAodm9pZCAqKTsKICAgIGlubGluZSBzdGF0aWMgUmVwKiBjcmVhdGUgKHNpemVfdCk7CiAg
ICBjaGFyVCogY2xvbmUgKCk7CgogICAgaW5saW5lIHZvaWQgY29weSAoc2l6ZV90LCBjb25zdCBj
aGFyVCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQgbW92ZSAoc2l6ZV90LCBjb25zdCBjaGFy
VCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQgc2V0IChzaXplX3QsIGNvbnN0IGNoYXJULCBz
aXplX3QpOwoKICAgIGlubGluZSBzdGF0aWMgYm9vbCBleGNlc3Nfc2xvcCAoc2l6ZV90LCBzaXpl
X3QpOwogICAgaW5saW5lIHN0YXRpYyBzaXplX3QgZnJvYl9zaXplIChzaXplX3QpOwoKICBwcml2
YXRlOgogICAgUmVwICZvcGVyYXRvcj0gKGNvbnN0IFJlcCAmKTsKICB9OwoKcHVibGljOgoKICB0
eXBlZGVmIHRyYWl0cyB0cmFpdHNfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0czo6Y2hh
cl90eXBlIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBBbGxvY2F0b3IgYWxsb2NhdG9yX3R5cGU7Cgog
IHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl
X3R5cGU7CiAgdHlwZWRlZiBjaGFyVCYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgY2hhclQm
IGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIGNoYXJUKiBwb2ludGVyOwogIHR5cGVkZWYgY29u
c3QgY2hhclQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBwb2ludGVyIGl0ZXJhdG9yOwogIHR5
cGVkZWYgY29uc3RfcG9pbnRlciBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIDo6cmV2ZXJzZV9p
dGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIDo6cmV2ZXJzZV9p
dGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICBzdGF0aWMg
Y29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0xKTsKCnByaXZh
dGU6CiAgUmVwICpyZXAgKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSZXAgKj4o
ZGF0KSAtIDE7IH0KICB2b2lkIHJlcHVwIChSZXAgKnApIHsgcmVwICgpLT5yZWxlYXNlICgpOyBk
YXQgPSBwLT5kYXRhICgpOyB9CgpwdWJsaWM6CiAgY29uc3QgY2hhclQqIGRhdGEgKCkgY29uc3QK
ICAgIHsgcmV0dXJuIHJlcCAoKS0+ZGF0YSgpOyB9CiAgc2l6ZV90eXBlIGxlbmd0aCAoKSBjb25z
dAogICAgeyByZXR1cm4gcmVwICgpLT5sZW47IH0KICBzaXplX3R5cGUgc2l6ZSAoKSBjb25zdAog
ICAgeyByZXR1cm4gcmVwICgpLT5sZW47IH0KICBzaXplX3R5cGUgY2FwYWNpdHkgKCkgY29uc3QK
ICAgIHsgcmV0dXJuIHJlcCAoKS0+cmVzOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplICgpIGNvbnN0
CiAgICB7IHJldHVybiAobnBvcyAtIDEpL3NpemVvZiAoY2hhclQpOyB9CiAgYm9vbCBlbXB0eSAo
KSBjb25zdAogICAgeyByZXR1cm4gc2l6ZSAoKSA9PSAwOyB9CgoKICBiYXNpY19zdHJpbmcmIG9w
ZXJhdG9yPSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIpCiAgICB7CiAgICAgIGlmICgmc3RyICE9
IHRoaXMpIHsgcmVwICgpLT5yZWxlYXNlICgpOyBkYXQgPSBzdHIucmVwICgpLT5ncmFiICgpOyB9
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgZXhwbGljaXQgYmFzaWNfc3RyaW5nICgpOiBk
YXQgKG5pbFJlcC5ncmFiICgpKSB7IH0KICBiYXNpY19zdHJpbmcgKGNvbnN0IGJhc2ljX3N0cmlu
ZyYgc3RyKTogZGF0IChzdHIucmVwICgpLT5ncmFiICgpKSB7IH0KICBiYXNpY19zdHJpbmcgKGNv
bnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbiA9IG5wb3Mp
CiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChzdHIsIHBvcywgbik7IH0KICBi
YXNpY19zdHJpbmcgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAgIDogZGF0IChuaWxS
ZXAuZ3JhYiAoKSkgeyBhc3NpZ24gKHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nIChjb25zdCBjaGFy
VCogcykKICAgIDogZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyBhc3NpZ24gKHMpOyB9CiAgYmFzaWNf
c3RyaW5nIChzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIDogZGF0IChuaWxSZXAuZ3JhYiAoKSkg
eyBhc3NpZ24gKG4sIGMpOyB9CgoKCgogIGJhc2ljX3N0cmluZyhjb25zdF9pdGVyYXRvciBfX2Jl
Z2luLCBjb25zdF9pdGVyYXRvciBfX2VuZCkKCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsg
YXNzaWduIChfX2JlZ2luLCBfX2VuZCk7IH0KCiAgfmJhc2ljX3N0cmluZyAoKQogICAgeyByZXAg
KCktPnJlbGVhc2UgKCk7IH0KCiAgdm9pZCBzd2FwIChiYXNpY19zdHJpbmcgJnMpIHsgY2hhclQg
KmQgPSBkYXQ7IGRhdCA9IHMuZGF0OyBzLmRhdCA9IGQ7IH0KCiAgYmFzaWNfc3RyaW5nJiBhcHBl
bmQgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCwKICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90eXBlIG4gPSBucG9zKQogICAgeyByZXR1cm4gcmVwbGFjZSAo
bGVuZ3RoICgpLCAwLCBzdHIsIHBvcywgbik7IH0KICBiYXNpY19zdHJpbmcmIGFwcGVuZCAoY29u
c3QgY2hhclQqIHMsIHNpemVfdHlwZSBuKQogICAgeyByZXR1cm4gcmVwbGFjZSAobGVuZ3RoICgp
LCAwLCBzLCBuKTsgfQogIGJhc2ljX3N0cmluZyYgYXBwZW5kIChjb25zdCBjaGFyVCogcykKICAg
IHsgcmV0dXJuIGFwcGVuZCAocywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIGJhc2ljX3N0cmlu
ZyYgYXBwZW5kIChzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGxl
bmd0aCAoKSwgMCwgbiwgYyk7IH0KCgoKCiAgYmFzaWNfc3RyaW5nJiBhcHBlbmQoY29uc3RfaXRl
cmF0b3IgZmlyc3QsIGNvbnN0X2l0ZXJhdG9yIGxhc3QpCgogICAgeyByZXR1cm4gcmVwbGFjZSAo
aWVuZCAoKSwgaWVuZCAoKSwgZmlyc3QsIGxhc3QpOyB9CgogIHZvaWQgcHVzaF9iYWNrKGNoYXJU
IF9fYykKICB7IGFwcGVuZCgxLCBfX2MpOyB9CgogIGJhc2ljX3N0cmluZyYgYXNzaWduIChjb25z
dCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAsCiAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdHlwZSBuID0gbnBvcykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKDAsIG5wb3Ms
IHN0ciwgcG9zLCBuKTsgfQogIGJhc2ljX3N0cmluZyYgYXNzaWduIChjb25zdCBjaGFyVCogcywg
c2l6ZV90eXBlIG4pCiAgICB7IHJldHVybiByZXBsYWNlICgwLCBucG9zLCBzLCBuKTsgfQogIGJh
c2ljX3N0cmluZyYgYXNzaWduIChjb25zdCBjaGFyVCogcykKICAgIHsgcmV0dXJuIGFzc2lnbiAo
cywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIGJhc2ljX3N0cmluZyYgYXNzaWduIChzaXplX3R5
cGUgbiwgY2hhclQgYykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKDAsIG5wb3MsIG4sIGMpOyB9CgoK
CgogIGJhc2ljX3N0cmluZyYgYXNzaWduKGNvbnN0X2l0ZXJhdG9yIGZpcnN0LCBjb25zdF9pdGVy
YXRvciBsYXN0KQoKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGliZWdpbiAoKSwgaWVuZCAoKSwgZmly
c3QsIGxhc3QpOyB9CgogIGJhc2ljX3N0cmluZyYgb3BlcmF0b3I9IChjb25zdCBjaGFyVCogcykK
ICAgIHsgcmV0dXJuIGFzc2lnbiAocyk7IH0KICBiYXNpY19zdHJpbmcmIG9wZXJhdG9yPSAoY2hh
clQgYykKICAgIHsgcmV0dXJuIGFzc2lnbiAoMSwgYyk7IH0KCiAgYmFzaWNfc3RyaW5nJiBvcGVy
YXRvcis9IChjb25zdCBiYXNpY19zdHJpbmcmIHJocykKICAgIHsgcmV0dXJuIGFwcGVuZCAocmhz
KTsgfQogIGJhc2ljX3N0cmluZyYgb3BlcmF0b3IrPSAoY29uc3QgY2hhclQqIHMpCiAgICB7IHJl
dHVybiBhcHBlbmQgKHMpOyB9CiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcis9IChjaGFyVCBjKQog
ICAgeyByZXR1cm4gYXBwZW5kICgxLCBjKTsgfQoKICBiYXNpY19zdHJpbmcmIGluc2VydCAoc2l6
ZV90eXBlIHBvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLAogICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3R5cGUgcG9zMiA9IDAsIHNpemVfdHlwZSBuID0gbnBvcykKICAgIHsgcmV0dXJu
IHJlcGxhY2UgKHBvczEsIDAsIHN0ciwgcG9zMiwgbik7IH0KICBiYXNpY19zdHJpbmcmIGluc2Vy
dCAoc2l6ZV90eXBlIHBvcywgY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBuKQogICAgeyByZXR1
cm4gcmVwbGFjZSAocG9zLCAwLCBzLCBuKTsgfQogIGJhc2ljX3N0cmluZyYgaW5zZXJ0IChzaXpl
X3R5cGUgcG9zLCBjb25zdCBjaGFyVCogcykKICAgIHsgcmV0dXJuIGluc2VydCAocG9zLCBzLCB0
cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgYmFzaWNfc3RyaW5nJiBpbnNlcnQgKHNpemVfdHlwZSBw
b3MsIHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4gcmVwbGFjZSAocG9zLCAwLCBu
LCBjKTsgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBwLCBjaGFyVCBjKQogICAgeyBzaXpl
X3R5cGUgX19vID0gcCAtIGliZWdpbiAoKTsKICAgICAgaW5zZXJ0IChwIC0gaWJlZ2luICgpLCAx
LCBjKTsgc2VsZmlzaCAoKTsKICAgICAgcmV0dXJuIGliZWdpbiAoKSArIF9fbzsgfQogIGl0ZXJh
dG9yIGluc2VydChpdGVyYXRvciBwLCBzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIHsgc2l6ZV90
eXBlIF9fbyA9IHAgLSBpYmVnaW4gKCk7CiAgICAgIGluc2VydCAocCAtIGliZWdpbiAoKSwgbiwg
Yyk7IHNlbGZpc2ggKCk7CiAgICAgIHJldHVybiBpYmVnaW4gKCkgKyBfX287IH0KCgoKCiAgdm9p
ZCBpbnNlcnQoaXRlcmF0b3IgcCwgY29uc3RfaXRlcmF0b3IgZmlyc3QsIGNvbnN0X2l0ZXJhdG9y
IGxhc3QpCgogICAgeyByZXBsYWNlIChwLCBwLCBmaXJzdCwgbGFzdCk7IH0KCiAgYmFzaWNfc3Ry
aW5nJiBlcmFzZSAoc2l6ZV90eXBlIHBvcyA9IDAsIHNpemVfdHlwZSBuID0gbnBvcykKICAgIHsg
cmV0dXJuIHJlcGxhY2UgKHBvcywgbiwgKHNpemVfdHlwZSkwLCAoY2hhclQpMCk7IH0KICBpdGVy
YXRvciBlcmFzZShpdGVyYXRvciBwKQogICAgeyBzaXplX3R5cGUgX19vID0gcCAtIGJlZ2luKCk7
CiAgICAgIHJlcGxhY2UgKF9fbywgMSwgKHNpemVfdHlwZSkwLCAoY2hhclQpMCk7IHNlbGZpc2gg
KCk7CiAgICAgIHJldHVybiBpYmVnaW4oKSArIF9fbzsgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJh
dG9yIGYsIGl0ZXJhdG9yIGwpCiAgICB7IHNpemVfdHlwZSBfX28gPSBmIC0gaWJlZ2luKCk7CiAg
ICAgIHJlcGxhY2UgKF9fbywgbC1mLCAoc2l6ZV90eXBlKTAsIChjaGFyVCkwKTtzZWxmaXNoICgp
OwogICAgICByZXR1cm4gaWJlZ2luKCkgKyBfX287IH0KCiAgYmFzaWNfc3RyaW5nJiByZXBsYWNl
IChzaXplX3R5cGUgcG9zMSwgc2l6ZV90eXBlIG4xLCBjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBwb3MyID0gMCwgc2l6ZV90eXBlIG4y
ID0gbnBvcyk7CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5cGUgcG9zLCBzaXplX3R5
cGUgbjEsIGNvbnN0IGNoYXJUKiBzLAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBl
IG4yKTsKICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBu
MSwgY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIG4xLCBzLCB0cmFp
dHM6Omxlbmd0aCAocykpOyB9CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5cGUgcG9z
LCBzaXplX3R5cGUgbjEsIHNpemVfdHlwZSBuMiwgY2hhclQgYyk7CiAgYmFzaWNfc3RyaW5nJiBy
ZXBsYWNlIChzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIHsgcmV0dXJu
IHJlcGxhY2UgKHBvcywgbiwgMSwgYyk7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJh
dG9yIGkxLCBpdGVyYXRvciBpMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIpCiAgICB7IHJldHVy
biByZXBsYWNlIChpMSAtIGliZWdpbiAoKSwgaTIgLSBpMSwgc3RyKTsgfQogIGJhc2ljX3N0cmlu
ZyYgcmVwbGFjZSAoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGkyLCBjb25zdCBjaGFyVCogcywgc2l6
ZV90eXBlIG4pCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGliZWdpbiAoKSwgaTIgLSBpMSwg
cywgbik7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBp
MiwgY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGliZWdpbiAoKSwg
aTIgLSBpMSwgcyk7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVy
YXRvciBpMiwgc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAt
IGliZWdpbiAoKSwgaTIgLSBpMSwgbiwgYyk7IH0KCgoKCgogIGJhc2ljX3N0cmluZyYgcmVwbGFj
ZShpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
X2l0ZXJhdG9yIGoxLCBjb25zdF9pdGVyYXRvciBqMik7CgoKcHJpdmF0ZToKICBzdGF0aWMgY2hh
clQgZW9zICgpIHsgcmV0dXJuIHRyYWl0czo6ZW9zICgpOyB9CiAgdm9pZCB1bmlxdWUgKCkgeyBp
ZiAocmVwICgpLT5yZWYgPiAxKSBhbGxvYyAobGVuZ3RoICgpLCB0cnVlKTsgfQogIHZvaWQgc2Vs
ZmlzaCAoKSB7IHVuaXF1ZSAoKTsgcmVwICgpLT5zZWxmaXNoID0gdHJ1ZTsgfQoKcHVibGljOgog
IGNoYXJUIG9wZXJhdG9yW10gKHNpemVfdHlwZSBwb3MpIGNvbnN0CiAgICB7CiAgICAgIGlmIChw
b3MgPT0gbGVuZ3RoICgpKQogICAgICAgIHJldHVybiBlb3MgKCk7CiAgICAgIHJldHVybiBkYXRh
ICgpW3Bvc107CiAgICB9CgogIHJlZmVyZW5jZSBvcGVyYXRvcltdIChzaXplX3R5cGUgcG9zKQog
ICAgeyBzZWxmaXNoICgpOyByZXR1cm4gKCpyZXAgKCkpW3Bvc107IH0KCiAgcmVmZXJlbmNlIGF0
IChzaXplX3R5cGUgcG9zKQogICAgewogICAgICAoKHZvaWQpICgoIShwb3MgPj0gbGVuZ3RoICgp
KSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIhKHBvcyA+PSBsZW5ndGggKCkpIiwgIi91c3IvaW5j
bHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIsIDMyOCwgKChjb25zdCBjaGFyICopIDApKSwgMCkp
KTsKICAgICAgcmV0dXJuICgqdGhpcylbcG9zXTsKICAgIH0KICBjb25zdF9yZWZlcmVuY2UgYXQg
KHNpemVfdHlwZSBwb3MpIGNvbnN0CiAgICB7CiAgICAgICgodm9pZCkgKCghKHBvcyA+PSBsZW5n
dGggKCkpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiEocG9zID49IGxlbmd0aCAoKSkiLCAiL3Vz
ci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiwgMzMzLCAoKGNvbnN0IGNoYXIgKikgMCkp
LCAwKSkpOwogICAgICByZXR1cm4gZGF0YSAoKVtwb3NdOwogICAgfQoKcHJpdmF0ZToKICB2b2lk
IHRlcm1pbmF0ZSAoKSBjb25zdAogICAgeyB0cmFpdHM6OmFzc2lnbiAoKCpyZXAgKCkpW2xlbmd0
aCAoKV0sIGVvcyAoKSk7IH0KCnB1YmxpYzoKICBjb25zdCBjaGFyVCogY19zdHIgKCkgY29uc3QK
ICAgIHsgaWYgKGxlbmd0aCAoKSA9PSAwKSByZXR1cm4gIiI7IHRlcm1pbmF0ZSAoKTsgcmV0dXJu
IGRhdGEgKCk7IH0KICB2b2lkIHJlc2l6ZSAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpOwogIHZvaWQg
cmVzaXplIChzaXplX3R5cGUgbikKICAgIHsgcmVzaXplIChuLCBlb3MgKCkpOyB9CiAgdm9pZCBy
ZXNlcnZlIChzaXplX3R5cGUpIHsgfQoKICBzaXplX3R5cGUgY29weSAoY2hhclQqIHMsIHNpemVf
dHlwZSBuLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3Q7CgogIHNpemVfdHlwZSBmaW5kIChjb25z
dCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVy
biBmaW5kIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0KICBzaXplX3R5cGUgZmlu
ZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBz
aXplX3R5cGUgZmluZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAog
ICAgeyByZXR1cm4gZmluZCAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90
eXBlIGZpbmQgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdDsKCiAgc2l6ZV90eXBl
IHJmaW5kIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNv
bnN0CiAgICB7IHJldHVybiByZmluZCAoc3RyLmRhdGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9
CiAgc2l6ZV90eXBlIHJmaW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90
eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSByZmluZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlw
ZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gcmZpbmQgKHMsIHBvcywgdHJhaXRzOjps
ZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSByZmluZCAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9
IG5wb3MpIGNvbnN0OwoKICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAoY29uc3QgYmFzaWNfc3Ry
aW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9maXJz
dF9vZiAoc3RyLmRhdGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90eXBlIGZpbmRf
Zmlyc3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29u
c3Q7CiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUg
cG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfZmlyc3Rfb2YgKHMsIHBvcywgdHJhaXRz
OjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X29mIChjaGFyVCBjLCBzaXpl
X3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZpbmQgKGMsIHBvcyk7IH0KCiAgc2l6
ZV90eXBlIGZpbmRfbGFzdF9vZiAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBw
b3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9sYXN0X29mIChzdHIuZGF0YSgpLCBw
b3MsIHN0ci5sZW5ndGgoKSk7IH0KICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjb25zdCBjaGFy
VCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSBmaW5k
X2xhc3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAg
IHsgcmV0dXJuIGZpbmRfbGFzdF9vZiAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAg
c2l6ZV90eXBlIGZpbmRfbGFzdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNv
bnN0CiAgICB7IHJldHVybiByZmluZCAoYywgcG9zKTsgfQoKICBzaXplX3R5cGUgZmluZF9maXJz
dF9ub3Rfb2YgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCkgY29u
c3QKICAgIHsgcmV0dXJuIGZpbmRfZmlyc3Rfbm90X29mIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5s
ZW5ndGgoKSk7IH0KICBzaXplX3R5cGUgZmluZF9maXJzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBz
LCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBlIGZpbmRfZmly
c3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7
IHJldHVybiBmaW5kX2ZpcnN0X25vdF9vZiAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9
CiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfbm90X29mIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zID0g
MCkgY29uc3Q7CgogIHNpemVfdHlwZSBmaW5kX2xhc3Rfbm90X29mIChjb25zdCBiYXNpY19zdHJp
bmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2xh
c3Rfbm90X29mIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0KICBzaXplX3R5cGUg
ZmluZF9sYXN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlw
ZSBuKSBjb25zdDsKICBzaXplX3R5cGUgZmluZF9sYXN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMs
IHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9sYXN0X25vdF9v
ZiAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9u
b3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdDsKCiAgYmFzaWNfc3Ry
aW5nIHN1YnN0ciAoc2l6ZV90eXBlIHBvcyA9IDAsIHNpemVfdHlwZSBuID0gbnBvcykgY29uc3QK
ICAgIHsgcmV0dXJuIGJhc2ljX3N0cmluZyAoKnRoaXMsIHBvcywgbik7IH0KCiAgaW50IGNvbXBh
cmUgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCwgc2l6ZV90eXBl
IG4gPSBucG9zKSBjb25zdDsKCiAgaW50IGNvbXBhcmUgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5
cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgaW50IGNvbXBhcmUgKGNvbnN0IGNoYXJUKiBz
LCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbXBhcmUgKHMsIHBvcywg
dHJhaXRzOjpsZW5ndGggKHMpKTsgfQoKICBpdGVyYXRvciBiZWdpbiAoKSB7IHNlbGZpc2ggKCk7
IHJldHVybiAmKCp0aGlzKVswXTsgfQogIGl0ZXJhdG9yIGVuZCAoKSB7IHNlbGZpc2ggKCk7IHJl
dHVybiAmKCp0aGlzKVtsZW5ndGggKCldOyB9Cgpwcml2YXRlOgogIGl0ZXJhdG9yIGliZWdpbiAo
KSBjb25zdCB7IHJldHVybiAmKCpyZXAgKCkpWzBdOyB9CiAgaXRlcmF0b3IgaWVuZCAoKSBjb25z
dCB7IHJldHVybiAmKCpyZXAgKCkpW2xlbmd0aCAoKV07IH0KCnB1YmxpYzoKICBjb25zdF9pdGVy
YXRvciBiZWdpbiAoKSBjb25zdCB7IHJldHVybiBpYmVnaW4gKCk7IH0KICBjb25zdF9pdGVyYXRv
ciBlbmQgKCkgY29uc3QgeyByZXR1cm4gaWVuZCAoKTsgfQoKICByZXZlcnNlX2l0ZXJhdG9yIHJi
ZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IgKGVuZCAoKSk7IH0KICBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yIChlbmQgKCkpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gcmV2
ZXJzZV9pdGVyYXRvciAoYmVnaW4gKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5k
KCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgKGJlZ2luICgpKTsg
fQoKcHJpdmF0ZToKICB2b2lkIGFsbG9jIChzaXplX3R5cGUgc2l6ZSwgYm9vbCBzYXZlKTsKICBz
dGF0aWMgc2l6ZV90eXBlIF9maW5kIChjb25zdCBjaGFyVCogcHRyLCBjaGFyVCBjLCBzaXplX3R5
cGUgeHBvcywgc2l6ZV90eXBlIGxlbik7CiAgaW5saW5lIGJvb2wgY2hlY2tfcmVhbGxvYyAoc2l6
ZV90eXBlIHMpIGNvbnN0OwoKICBzdGF0aWMgUmVwIG5pbFJlcDsKICBjaGFyVCAqZGF0Owp9OwoK
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y
PgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGJhc2ljX3N0cmluZyA8
Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRv
ciBpMiwgY29uc3RfaXRlcmF0b3IgajEsIGNvbnN0X2l0ZXJhdG9yIGoyKQoKewogIGNvbnN0IHNp
emVfdHlwZSBsZW4gPSBsZW5ndGggKCk7CiAgc2l6ZV90eXBlIHBvcyA9IGkxIC0gaWJlZ2luICgp
OwogIHNpemVfdHlwZSBuMSA9IGkyIC0gaTE7CiAgc2l6ZV90eXBlIG4yID0gajIgLSBqMTsKCiAg
KCh2b2lkKSAoKCEocG9zID4gbGVuKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIhKHBvcyA+IGxl
bikiLCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiwgNDQ2LCAoKGNvbnN0IGNo
YXIgKikgMCkpLCAwKSkpOwogIGlmIChuMSA+IGxlbiAtIHBvcykKICAgIG4xID0gbGVuIC0gcG9z
OwogICgodm9pZCkgKCghKGxlbiAtIG4xID4gbWF4X3NpemUgKCkgLSBuMikpID8gMCA6IChfX2Fz
c2VydF9mYWlsICgiIShsZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIpIiwgIi91c3IvaW5jbHVk
ZS9nKystMy9zdGQvYmFzdHJpbmcuaCIsIDQ0OSwgKChjb25zdCBjaGFyICopIDApKSwgMCkpKTsK
ICBzaXplX3QgbmV3bGVuID0gbGVuIC0gbjEgKyBuMjsKCiAgaWYgKGNoZWNrX3JlYWxsb2MgKG5l
d2xlbikpCiAgICB7CiAgICAgIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChuZXdsZW4pOwogICAgICBw
LT5jb3B5ICgwLCBkYXRhICgpLCBwb3MpOwogICAgICBwLT5jb3B5IChwb3MgKyBuMiwgZGF0YSAo
KSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAgZm9yICg7IGoxICE9IGoyOyAr
K2oxLCArK3BvcykKICAgICAgICB0cmFpdHM6OmFzc2lnbiAoKCpwKVtwb3NdLCAqajEpOwogICAg
ICByZXB1cCAocCk7CiAgICB9CiAgZWxzZQogICAgewogICAgICByZXAgKCktPm1vdmUgKHBvcyAr
IG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICBmb3IgKDsg
ajEgIT0gajI7ICsrajEsICsrcG9zKQogICAgICAgIHRyYWl0czo6YXNzaWduICgoKnJlcCAoKSlb
cG9zXSwgKmoxKTsKICAgIH0KICByZXAgKCktPmxlbiA9IG5ld2xlbjsKCiAgcmV0dXJuICp0aGlz
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y
PgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Cm9wZXJhdG9y
KyAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsCiAg
ICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBy
aHMpCnsKICBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gc3RyIChsaHMp
OwogIHN0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIHN0cjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNo
YXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8
Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPgpvcGVyYXRvcisgKGNvbnN0IGNoYXJUKiBsaHMsIGNv
bnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgYmFz
aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAobGhzKTsKICBzdHIuYXBw
ZW5kIChyaHMpOwogIHJldHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg
dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp
dHMsIEFsbG9jYXRvcj4Kb3BlcmF0b3IrIChjaGFyVCBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8
Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwg
dHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAoMSwgbGhzKTsKICBzdHIuYXBwZW5kIChyaHMpOwogIHJl
dHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB
bGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4K
b3BlcmF0b3IrIChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4m
IGxocywgY29uc3QgY2hhclQqIHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPiBzdHIgKGxocyk7CiAgc3RyLmFwcGVuZCAocmhzKTsKICByZXR1cm4gc3RyOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpp
bmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Cm9wZXJhdG9yKyAo
Y29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNoYXJU
IHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiBzdHIgKGxo
cyk7CiAgc3RyLmFwcGVuZCAoMSwgcmhzKTsKICByZXR1cm4gc3RyOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVy
YXRvcj09IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxo
cywKICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+JiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpID09IDApOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9v
bApvcGVyYXRvcj09IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykg
PT0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxv
Y2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPT0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQs
IHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChs
aHMuY29tcGFyZSAocmhzKSA9PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0
cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPSAoY29uc3QgY2hh
clQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBy
aHMpCnsKICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpICE9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVy
YXRvciE9IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxo
cywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgIT0gMCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+
CmlubGluZSBib29sCm9wZXJhdG9yPCAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+JiBsaHMsCiAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQs
IHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA8
IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjwgKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2lj
X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMu
Y29tcGFyZSAobGhzKSA+IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0
cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjwgKGNvbnN0IGJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7
CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA8IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hh
clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj4g
KGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSA8IDApOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUg
Ym9vbApvcGVyYXRvcj4gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh
dG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhz
KSA+IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxs
b2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjw9IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAo
cmhzLmNvbXBhcmUgKGxocykgPj0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg
dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPD0gKGNvbnN0IGJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCog
cmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA8PSAwKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3Bl
cmF0b3I+PSAoY29uc3QgY2hhclQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh
aXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpIDw9IDAp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y
PgppbmxpbmUgYm9vbApvcGVyYXRvcj49IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp
dHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNv
bXBhcmUgKHJocykgPj0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRz
LCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yIT0gKGNvbnN0IGJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAogICAgICAgICAgICBjb25zdCBi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAo
bGhzLmNvbXBhcmUgKHJocykgIT0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg
dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPiAoY29uc3QgYmFz
aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsCiAgICAgICAgICAgY29u
c3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1
cm4gKGxocy5jb21wYXJlIChyaHMpID4gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xh
c3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPD0gKGNvbnN0
IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAogICAgICAgICAg
ICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewog
IHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPD0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFy
VCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPj0g
KGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAogICAg
ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJo
cykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPj0gMCk7Cn0KCmNsYXNzIGlzdHJlYW07
IGNsYXNzIG9zdHJlYW07CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz
cyBBbGxvY2F0b3I+IGlzdHJlYW0mCm9wZXJhdG9yPj4gKGlzdHJlYW0mLCBiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mKTsKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFz
cyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4gb3N0cmVhbSYKb3BlcmF0b3I8PCAob3N0cmVhbSYs
IGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYpOwp0ZW1wbGF0
ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPiBpc3RyZWFtJgpn
ZXRsaW5lIChpc3RyZWFtJiwgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
JiwgY2hhclQgZGVsaW0gPSAnXG4nKTsKCn0KCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9i
YXN0cmluZy5jYyIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuY2Mi
IDMKZXh0ZXJuICJDKysiIHsKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs
YXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQgKiBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj46OlJlcDo6Cm9wZXJhdG9yIG5ldyAoc2l6ZV90IHMsIHNpemVfdCBleHRyYSkK
ewogIHJldHVybiBBbGxvY2F0b3I6OmFsbG9jYXRlKHMgKyBleHRyYSAqIHNpemVvZiAoY2hhclQp
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv
cj4KaW5saW5lIHZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpS
ZXA6OgpvcGVyYXRvciBkZWxldGUgKHZvaWQgKiBwdHIpCnsKICBBbGxvY2F0b3I6OmRlYWxsb2Nh
dGUocHRyLCBzaXplb2YoUmVwKSArCiAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8UmVwICo+KHB0ciktPnJlcyAqCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAo
Y2hhclQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs
bG9jYXRvcj4KaW5saW5lIHNpemVfdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj46OlJlcDo6CmZyb2Jfc2l6ZSAoc2l6ZV90IHMpCnsKICBzaXplX3QgaSA9IDE2OwogIHdo
aWxlIChpIDwgcykgaSAqPSAyOwogIHJldHVybiBpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQs
IGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFy
VCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXAgKgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj46OlJlcDo6CmNyZWF0ZSAoc2l6ZV90IGV4dHJhKQp7CiAgZXh0cmEgPSBmcm9i
X3NpemUgKGV4dHJhICsgMSk7CiAgUmVwICpwID0gbmV3IChleHRyYSkgUmVwOwogIHAtPnJlcyA9
IGV4dHJhOwogIHAtPnJlZiA9IDE7CiAgcC0+c2VsZmlzaCA9IGZhbHNlOwogIHJldHVybiBwOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpj
aGFyVCAqIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKY2xv
bmUgKCkKewogIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChsZW4pOwogIHAtPmNvcHkgKDAsIGRhdGEg
KCksIGxlbik7CiAgcC0+bGVuID0gbGVuOwogIHJldHVybiBwLT5kYXRhICgpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9v
bCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CmV4Y2Vzc19z
bG9wIChzaXplX3Qgcywgc2l6ZV90IHIpCnsKICByZXR1cm4gMiAqIChzIDw9IDE2ID8gMTYgOiBz
KSA8IHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxv
Y2F0b3I+CmlubGluZSBib29sIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y
Pjo6CmNoZWNrX3JlYWxsb2MgKGJhc2ljX3N0cmluZzo6c2l6ZV90eXBlIHMpIGNvbnN0CnsKICBz
ICs9IHNpemVvZiAoY2hhclQpOwogIHJlcCAoKS0+c2VsZmlzaCA9IGZhbHNlOwogIHJldHVybiAo
cmVwICgpLT5yZWYgPiAxCiAgICAgICAgICB8fCBzID4gY2FwYWNpdHkgKCkKICAgICAgICAgIHx8
IFJlcDo6ZXhjZXNzX3Nsb3AgKHMsIGNhcGFjaXR5ICgpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBj
aGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CnZvaWQgYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKYWxsb2MgKGJhc2ljX3N0cmluZzo6c2l6ZV90eXBl
IF9fc2l6ZSwgYm9vbCBfX3NhdmUpCnsKICBpZiAoISBjaGVja19yZWFsbG9jIChfX3NpemUpKQog
ICAgcmV0dXJuOwoKICBSZXAgKnAgPSBSZXA6OmNyZWF0ZSAoX19zaXplKTsKCiAgaWYgKF9fc2F2
ZSkKICAgIHsKICAgICAgcC0+Y29weSAoMCwgZGF0YSAoKSwgbGVuZ3RoICgpKTsKICAgICAgcC0+
bGVuID0gbGVuZ3RoICgpOwogICAgfQogIGVsc2UKICAgIHAtPmxlbiA9IDA7CgogIHJlcHVwIChw
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv
cj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JgpiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZXBsYWNlIChzaXplX3R5cGUgcG9zMSwgc2l6
ZV90eXBlIG4xLAogICAgICAgICBjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBv
czIsIHNpemVfdHlwZSBuMikKewogIGNvbnN0IHNpemVfdCBsZW4yID0gc3RyLmxlbmd0aCAoKTsK
CiAgaWYgKHBvczEgPT0gMCAmJiBuMSA+PSBsZW5ndGggKCkgJiYgcG9zMiA9PSAwICYmIG4yID49
IGxlbjIpCiAgICByZXR1cm4gb3BlcmF0b3I9IChzdHIpOwoKICAoKHZvaWQpICgoIShwb3MyID4g
bGVuMikpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiIShwb3MyID4gbGVuMikiLCAiL3Vzci9pbmNs
dWRlL2crKy0zL3N0ZC9iYXN0cmluZy5jYyIsIDEyNiwgKChjb25zdCBjaGFyICopIDApKSwgMCkp
KTsKCiAgaWYgKG4yID4gbGVuMiAtIHBvczIpCiAgICBuMiA9IGxlbjIgLSBwb3MyOwoKICByZXR1
cm4gcmVwbGFjZSAocG9zMSwgbjEsIHN0ci5kYXRhICgpICsgcG9zMiwgbjIpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9p
ZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CmNvcHkgKHNp
emVfdCBwb3MsIGNvbnN0IGNoYXJUICpzLCBzaXplX3QgbikKewogIGlmIChuKQogICAgdHJhaXRz
Ojpjb3B5IChkYXRhICgpICsgcG9zLCBzLCBuKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBj
bGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQgYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6Ogptb3ZlIChzaXplX3QgcG9zLCBjb25zdCBj
aGFyVCAqcywgc2l6ZV90IG4pCnsKICBpZiAobikKICAgIHRyYWl0czo6bW92ZSAoZGF0YSAoKSAr
IHBvcywgcywgbik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz
cyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYKYmFz
aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoc2l6ZV90eXBl
IHBvcywgc2l6ZV90eXBlIG4xLCBjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4yKQp7CiAgY29u
c3Qgc2l6ZV90eXBlIGxlbiA9IGxlbmd0aCAoKTsKICAoKHZvaWQpICgoIShwb3MgPiBsZW4pKSA/
IDAgOiAoX19hc3NlcnRfZmFpbCAoIiEocG9zID4gbGVuKSIsICIvdXNyL2luY2x1ZGUvZysrLTMv
c3RkL2Jhc3RyaW5nLmNjIiwgMTU2LCAoKGNvbnN0IGNoYXIgKikgMCkpLCAwKSkpOwogIGlmIChu
MSA+IGxlbiAtIHBvcykKICAgIG4xID0gbGVuIC0gcG9zOwogICgodm9pZCkgKCghKGxlbiAtIG4x
ID4gbWF4X3NpemUgKCkgLSBuMikpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiIShsZW4gLSBuMSA+
IG1heF9zaXplICgpIC0gbjIpIiwgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuY2Mi
LCAxNTksICgoY29uc3QgY2hhciAqKSAwKSksIDApKSk7CiAgc2l6ZV90IG5ld2xlbiA9IGxlbiAt
IG4xICsgbjI7CgogIGlmIChjaGVja19yZWFsbG9jIChuZXdsZW4pKQogICAgewogICAgICBSZXAg
KnAgPSBSZXA6OmNyZWF0ZSAobmV3bGVuKTsKICAgICAgcC0+Y29weSAoMCwgZGF0YSAoKSwgcG9z
KTsKICAgICAgcC0+Y29weSAocG9zICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBv
cyArIG4xKSk7CiAgICAgIHAtPmNvcHkgKHBvcywgcywgbjIpOwogICAgICByZXB1cCAocCk7CiAg
ICB9CiAgZWxzZQogICAgewogICAgICByZXAgKCktPm1vdmUgKHBvcyArIG4yLCBkYXRhICgpICsg
cG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICByZXAgKCktPmNvcHkgKHBvcywgcywg
bjIpOwogICAgfQogIHJlcCAoKS0+bGVuID0gbmV3bGVuOwoKICByZXR1cm4gKnRoaXM7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGlu
ZSB2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKc2V0
IChzaXplX3QgcG9zLCBjb25zdCBjaGFyVCBjLCBzaXplX3QgbikKewogIHRyYWl0czo6c2V0IChk
YXRhICgpICsgcG9zLCBjLCBuKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp
dHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+JiBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZXBsYWNlIChz
aXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbjEsIHNpemVfdHlwZSBuMiwgY2hhclQgYykKewogIGNv
bnN0IHNpemVfdCBsZW4gPSBsZW5ndGggKCk7CiAgKCh2b2lkKSAoKCEocG9zID4gbGVuKSkgPyAw
IDogKF9fYXNzZXJ0X2ZhaWwgKCIhKHBvcyA+IGxlbikiLCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0
ZC9iYXN0cmluZy5jYyIsIDE5MiwgKChjb25zdCBjaGFyICopIDApKSwgMCkpKTsKICBpZiAobjEg
PiBsZW4gLSBwb3MpCiAgICBuMSA9IGxlbiAtIHBvczsKICAoKHZvaWQpICgoIShsZW4gLSBuMSA+
IG1heF9zaXplICgpIC0gbjIpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiEobGVuIC0gbjEgPiBt
YXhfc2l6ZSAoKSAtIG4yKSIsICIvdXNyL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmNjIiwg
MTk1LCAoKGNvbnN0IGNoYXIgKikgMCkpLCAwKSkpOwogIHNpemVfdCBuZXdsZW4gPSBsZW4gLSBu
MSArIG4yOwoKICBpZiAoY2hlY2tfcmVhbGxvYyAobmV3bGVuKSkKICAgIHsKICAgICAgUmVwICpw
ID0gUmVwOjpjcmVhdGUgKG5ld2xlbik7CiAgICAgIHAtPmNvcHkgKDAsIGRhdGEgKCksIHBvcyk7
CiAgICAgIHAtPmNvcHkgKHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxlbiAtIChwb3Mg
KyBuMSkpOwogICAgICBwLT5zZXQgKHBvcywgYywgbjIpOwogICAgICByZXB1cCAocCk7CiAgICB9
CiAgZWxzZQogICAgewogICAgICByZXAgKCktPm1vdmUgKHBvcyArIG4yLCBkYXRhICgpICsgcG9z
ICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICByZXAgKCktPnNldCAocG9zLCBjLCBuMik7
CiAgICB9CiAgcmVwICgpLT5sZW4gPSBuZXdsZW47CgogIHJldHVybiAqdGhpczsKfQoKdGVtcGxh
dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4Kdm9pZCBiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZXNpemUgKHNpemVfdHlwZSBu
LCBjaGFyVCBjKQp7CiAgKCh2b2lkKSAoKCEobiA+IG1heF9zaXplICgpKSkgPyAwIDogKF9fYXNz
ZXJ0X2ZhaWwgKCIhKG4gPiBtYXhfc2l6ZSAoKSkiLCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9i
YXN0cmluZy5jYyIsIDIyMCwgKChjb25zdCBjaGFyICopIDApKSwgMCkpKTsKCiAgaWYgKG4gPiBs
ZW5ndGggKCkpCiAgICBhcHBlbmQgKG4gLSBsZW5ndGggKCksIGMpOwogIGVsc2UKICAgIGVyYXNl
IChuKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j
YXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUK
YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKY29weSAoY2hhclQqIHMs
IHNpemVfdHlwZSBuLCBzaXplX3R5cGUgcG9zKSBjb25zdAp7CiAgKCh2b2lkKSAoKCEocG9zID4g
bGVuZ3RoICgpKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIhKHBvcyA+IGxlbmd0aCAoKSkiLCAi
L3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5jYyIsIDIzMywgKChjb25zdCBjaGFyICop
IDApKSwgMCkpKTsKCiAgaWYgKG4gPiBsZW5ndGggKCkgLSBwb3MpCiAgICBuID0gbGVuZ3RoICgp
IC0gcG9zOwoKICB0cmFpdHM6OmNvcHkgKHMsIGRhdGEgKCkgKyBwb3MsIG4pOwogIHJldHVybiBu
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y
PgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kIChjb25zdCBjaGFyVCog
cywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBzaXplX3QgeHBvcyA9IHBv
czsKICBmb3IgKDsgeHBvcyArIG4gPD0gbGVuZ3RoICgpOyArK3hwb3MpCiAgICBpZiAodHJhaXRz
OjplcSAoZGF0YSAoKSBbeHBvc10sICpzKQogICAgICAgICYmIHRyYWl0czo6Y29tcGFyZSAoZGF0
YSAoKSArIHhwb3MsIHMsIG4pID09IDApCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9z
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y
PgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5
cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKX2ZpbmQgKGNvbnN0
IGNoYXJUKiBwdHIsIGNoYXJUIGMsIHNpemVfdHlwZSB4cG9zLCBzaXplX3R5cGUgbGVuKQp7CiAg
Zm9yICg7IHhwb3MgPCBsZW47ICsreHBvcykKICAgIGlmICh0cmFpdHM6OmVxIChwdHIgW3hwb3Nd
LCBjKSkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPjo6CmZpbmQgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MpIGNvbnN0CnsK
ICByZXR1cm4gX2ZpbmQgKGRhdGEgKCksIGMsIHBvcywgbGVuZ3RoICgpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFy
VCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUg
cG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIGlmIChuID4gbGVuZ3RoICgpKQogICAgcmV0dXJu
IG5wb3M7CgogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gbjsKICBpZiAoeHBvcyA+IHBvcykK
ICAgIHhwb3MgPSBwb3M7CgogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOyApCiAgICBpZiAodHJh
aXRzOjplcSAoZGF0YSAoKSBbeHBvc10sICpzKQogICAgICAgICYmIHRyYWl0czo6Y29tcGFyZSAo
ZGF0YSAoKSArIHhwb3MsIHMsIG4pID09IDApCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBu
cG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZmluZCAoY2hhclQgYywg
c2l6ZV90eXBlIHBvcykgY29uc3QKewogIGlmICgxID4gbGVuZ3RoICgpKQogICAgcmV0dXJuIG5w
b3M7CgogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gMTsKICBpZiAoeHBvcyA+IHBvcykKICAg
IHhwb3MgPSBwb3M7CgogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOyApCiAgICBpZiAodHJhaXRz
OjplcSAoZGF0YSAoKSBbeHBvc10sIGMpKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBv
czsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv
cj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFz
aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9maXJzdF9vZiAoY29u
c3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgc2l6ZV90
IHhwb3MgPSBwb3M7CiAgZm9yICg7IHhwb3MgPCBsZW5ndGggKCk7ICsreHBvcykKICAgIGlmIChf
ZmluZCAocywgZGF0YSAoKSBbeHBvc10sIDAsIG4pICE9IG5wb3MpCiAgICAgIHJldHVybiB4cG9z
OwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywg
Y2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46
OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5k
X2xhc3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29u
c3QKewogIGlmIChsZW5ndGgoKSA9PSAwKQogICAgcmV0dXJuIG5wb3M7CiAgc2l6ZV90IHhwb3Mg
PSBsZW5ndGggKCkgLSAxOwogIGlmICh4cG9zID4gcG9zKQogICAgeHBvcyA9IHBvczsKICBmb3Ig
KCsreHBvczsgeHBvcy0tID4gMDspCiAgICBpZiAoX2ZpbmQgKHMsIGRhdGEgKCkgW3hwb3NdLCAw
LCBuKSAhPSBucG9zKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxh
dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9maXJzdF9ub3Rfb2YgKGNvbnN0IGNoYXJU
KiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIHNpemVfdCB4cG9zID0g
cG9zOwogIGZvciAoOyB4cG9zIDwgbGVuZ3RoICgpOyArK3hwb3MpCiAgICBpZiAoX2ZpbmQgKHMs
IGRhdGEgKCkgW3hwb3NdLCAwLCBuKSA9PSBucG9zKQogICAgICByZXR1cm4geHBvczsKICByZXR1
cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs
bG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5
cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9maXJzdF9u
b3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MpIGNvbnN0CnsKICBzaXplX3QgeHBvcyA9IHBv
czsKICBmb3IgKDsgeHBvcyA8IGxlbmd0aCAoKTsgKyt4cG9zKQogICAgaWYgKHRyYWl0czo6bmUg
KGRhdGEgKCkgW3hwb3NdLCBjKSkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmRfbGFzdF9ub3Rfb2YgKGNvbnN0
IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIGlmIChsZW5n
dGgoKSA9PSAwKQogICAgcmV0dXJuIG5wb3M7CiAgc2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSAx
OwogIGlmICh4cG9zID4gcG9zKQogICAgeHBvcyA9IHBvczsKICBmb3IgKCsreHBvczsgeHBvcy0t
ID4gMDspCiAgICBpZiAoX2ZpbmQgKHMsIGRhdGEgKCkgW3hwb3NdLCAwLCBuKSA9PSBucG9zKQog
ICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJU
LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh
aXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+OjoKZmluZF9sYXN0X25vdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcykgY29u
c3QKewogIGlmIChsZW5ndGgoKSA9PSAwKQogICAgcmV0dXJuIG5wb3M7CiAgc2l6ZV90IHhwb3Mg
PSBsZW5ndGggKCkgLSAxOwogIGlmICh4cG9zID4gcG9zKQogICAgeHBvcyA9IHBvczsKICBmb3Ig
KCsreHBvczsgeHBvcy0tID4gMDspCiAgICBpZiAodHJhaXRzOjpuZSAoZGF0YSAoKSBbeHBvc10s
IGMpKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNz
IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW50IGJhc2ljX3N0cmluZyA8
Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmNvbXBhcmUgKGNvbnN0IGJhc2ljX3N0cmluZyYg
c3RyLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogICgodm9pZCkgKCghKHBv
cyA+IGxlbmd0aCAoKSkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiIShwb3MgPiBsZW5ndGggKCkp
IiwgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuY2MiLCAzOTksICgoY29uc3QgY2hh
ciAqKSAwKSksIDApKSk7CgogIHNpemVfdCBybGVuID0gbGVuZ3RoICgpIC0gcG9zOwogIGlmIChy
bGVuID4gbikKICAgIHJsZW4gPSBuOwogIGlmIChybGVuID4gc3RyLmxlbmd0aCAoKSkKICAgIHJs
ZW4gPSBzdHIubGVuZ3RoICgpOwogIGludCByID0gdHJhaXRzOjpjb21wYXJlIChkYXRhICgpICsg
cG9zLCBzdHIuZGF0YSAoKSwgcmxlbik7CiAgaWYgKHIgIT0gMCkKICAgIHJldHVybiByOwogIGlm
IChybGVuID09IG4pCiAgICByZXR1cm4gMDsKICByZXR1cm4gKGxlbmd0aCAoKSAtIHBvcykgLSBz
dHIubGVuZ3RoICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xh
c3MgQWxsb2NhdG9yPgppbnQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
OjoKY29tcGFyZSAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBj
b25zdAp7CiAgKCh2b2lkKSAoKCEocG9zID4gbGVuZ3RoICgpKSkgPyAwIDogKF9fYXNzZXJ0X2Zh
aWwgKCIhKHBvcyA+IGxlbmd0aCAoKSkiLCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmlu
Zy5jYyIsIDQxOCwgKChjb25zdCBjaGFyICopIDApKSwgMCkpKTsKCiAgc2l6ZV90IHJsZW4gPSBs
ZW5ndGggKCkgLSBwb3M7CiAgaWYgKHJsZW4gPiBuKQogICAgcmxlbiA9IG47CiAgaW50IHIgPSB0
cmFpdHM6OmNvbXBhcmUgKGRhdGEgKCkgKyBwb3MsIHMsIHJsZW4pOwogIGlmIChyICE9IDApCiAg
ICByZXR1cm4gcjsKICByZXR1cm4gKGxlbmd0aCAoKSAtIHBvcykgLSBuOwp9CgojIDEgIi91c3Iv
aW5jbHVkZS9nKystMy9pb3N0cmVhbS5oIiAxIDMKIyA0MzAgIi91c3IvaW5jbHVkZS9nKystMy9z
dGQvYmFzdHJpbmcuY2MiIDIgMwoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs
IGNsYXNzIEFsbG9jYXRvcj4KaXN0cmVhbSAmCm9wZXJhdG9yPj4gKGlzdHJlYW0gJmlzLCBiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gJnMpCnsKICBpbnQgdyA9IGlzLndp
ZHRoICgwKTsKICBpZiAoaXMuaXBmeDAgKCkpCiAgICB7CiAgICAgIHJlZ2lzdGVyIHN0cmVhbWJ1
ZiAqc2IgPSBpcy5yZGJ1ZiAoKTsKICAgICAgcy5yZXNpemUgKDApOwogICAgICB3aGlsZSAoMSkK
ICAgICAgICB7CiAgICAgICAgICBpbnQgY2ggPSBzYi0+c2J1bXBjICgpOwogICAgICAgICAgaWYg
KGNoID09ICgtMSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpcy5zZXRzdGF0ZSAoaW9z
Ojplb2ZiaXQpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICBl
bHNlIGlmICh0cmFpdHM6OmlzX2RlbCAoY2gpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
c2ItPnN1bmdldGMgKCk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIHMgKz0gc3RhdGljX2Nhc3Q8Y2hhclQ+IChjaCk7CiAgICAgICAgICBpZiAoLS13ID09IDEp
CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgaXMuaXNmeCAoKTsKICBpZiAo
cy5sZW5ndGggKCkgPT0gMCkKICAgIGlzLnNldHN0YXRlIChpb3M6OmZhaWxiaXQpOwoKICByZXR1
cm4gaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxv
Y2F0b3I+Cm9zdHJlYW0gJgpvcGVyYXRvcjw8IChvc3RyZWFtICZvLCBjb25zdCBiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHMpCnsKICByZXR1cm4gby53cml0ZSAocy5k
YXRhICgpLCBzLmxlbmd0aCAoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJh
aXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlzdHJlYW0mCmdldGxpbmUgKGlzdHJlYW0gJmlzLCBiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHMsIGNoYXJUIGRlbGltKQp7CiAg
aWYgKGlzLmlwZngxICgpKQogICAgewogICAgICBzaXplX3QgX19jb3VudCA9IDA7CiAgICAgIHN0
cmVhbWJ1ZiAqc2IgPSBpcy5yZGJ1ZiAoKTsKICAgICAgcy5yZXNpemUgKDApOwoKICAgICAgd2hp
bGUgKDEpCiAgICAgICAgewogICAgICAgICAgaW50IGNoID0gc2ItPnNidW1wYyAoKTsKICAgICAg
ICAgIGlmIChjaCA9PSAoLTEpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaXMuc2V0c3Rh
dGUgKF9fY291bnQgPT0gMAogICAgICAgICAgICAgICAgICAgICAgICAgICA/IChpb3M6OmZhaWxi
aXR8aW9zOjplb2ZiaXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW9zOjplb2ZiaXQp
OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CgogICAgICAgICAgKytfX2NvdW50
OwoKICAgICAgICAgIGlmIChjaCA9PSBkZWxpbSkKICAgICAgICAgICAgYnJlYWs7CgogICAgICAg
ICAgcyArPSBzdGF0aWNfY2FzdDxjaGFyVD4gKGNoKTsKCiAgICAgICAgICBpZiAocy5sZW5ndGgg
KCkgPT0gcy5ucG9zIC0gMSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlzLnNldHN0YXRl
IChpb3M6OmZhaWxiaXQpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgfQoKCgogIGlzLmlzZnggKCk7CgogIHJldHVybiBpczsKfQoKdGVtcGxhdGUgPGNs
YXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXAKYmFzaWNfc3RyaW5nPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj46Om5pbFJlcCA9IHsgMCwgMCwgMSwgZmFsc2UgfTsKCnRlbXBsYXRlIDxjbGFz
cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmNvbnN0IGJhc2ljX3N0cmlu
ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPjo6bnBvczsKCn0KIyA2NjEgIi91c3IvaW5jbHVkZS9nKyst
My9zdGQvYmFzdHJpbmcuaCIgMiAzCiMgNyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0cmluZyIgMiAz
CgpleHRlcm4gIkMrKyIgewp0eXBlZGVmIGJhc2ljX3N0cmluZyA8Y2hhcj4gc3RyaW5nOwoKfQoj
IDEzICJyZXNvdXJjZXMuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9nKystMy9tYXAiIDEgMwojIDMx
ICIvdXNyL2luY2x1ZGUvZysrLTMvbWFwIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF90
cmVlLmgiIDEgMwojIDU2ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX3RyZWUuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgNDIgIi91c3IvaW5jbHVkZS9n
KystMy9zdGxfYWxnb2Jhc2UuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfcGFpci5o
IiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9wYWlyLmgiIDMKdGVtcGxhdGUgPGNs
YXNzIF9UMSwgY2xhc3MgX1QyPgpzdHJ1Y3QgcGFpciB7CiAgdHlwZWRlZiBfVDEgZmlyc3RfdHlw
ZTsKICB0eXBlZGVmIF9UMiBzZWNvbmRfdHlwZTsKCiAgX1QxIGZpcnN0OwogIF9UMiBzZWNvbmQ7
CiAgcGFpcigpIDogZmlyc3QoX1QxKCkpLCBzZWNvbmQoX1QyKCkpIHt9CiAgcGFpcihjb25zdCBf
VDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikge30KCgoK
Cgp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kp
CnsKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5z
ZWNvbmQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3Bl
cmF0b3I8KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBf
X3kpCnsKICByZXR1cm4gX194LmZpcnN0IDwgX195LmZpcnN0IHx8CiAgICAgICAgICghKF9feS5m
aXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29uZCA8IF9feS5zZWNvbmQpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIo
Y29uc3QgX1QxJiBfX3gsIGNvbnN0IF9UMiYgX195KQp7CiAgcmV0dXJuIHBhaXI8X1QxLCBfVDI+
KF9feCwgX195KTsKfQojIDQzICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIg
MwoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0zL3R5cGVfdHJhaXRzLmgiIDEgMwojIDU1ICIvdXNy
L2luY2x1ZGUvZysrLTMvdHlwZV90cmFpdHMuaCIgMwpzdHJ1Y3QgX190cnVlX3R5cGUgewp9OwoK
c3RydWN0IF9fZmFsc2VfdHlwZSB7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190
eXBlX3RyYWl0cyB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19kdW1teV9tZW1iZXJfbXVz
dF9iZV9maXJzdDsKIyA4MSAiL3Vzci9pbmNsdWRlL2crKy0zL3R5cGVfdHJhaXRzLmgiIDMKICAg
dHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2Zh
bHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CiMgOTYgIi91c3IvaW5jbHVkZS9nKystMy90eXBlX3Ry
YWl0cy5oIiAzCiAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9vbD4g
ewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCiAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9f
dHlwZV90cmFpdHM8Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29w
eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t
ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgogICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf
dHlwZTsKfTsKCiAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWdu
ZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJh
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CiMgMTQyICIvdXNyL2luY2x1ZGUvZysr
LTMvdHlwZV90cmFpdHMuaCIgMwogICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfX3R5cGVfdHJh
aXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCiAgICAgICAgICAgICAgICAgICAg
c3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBl
Owp9OwoKICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+IHsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGlzX1BPRF90eXBlOwp9OwoKICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX190eXBlX3Ry
YWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Nv
cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdu
bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsK
fTsKCiAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9u
Zz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CiMgMjEwICIvdXNyL2luY2x1ZGUvZysrLTMvdHlw
ZV90cmFpdHMuaCIgMwogICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGZs
b2F0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCiAgICAgICAgICAgICAgICAgICAgc3RydWN0
IF9fdHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz
c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCiAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOwp9OwojIDI0NyAiL3Vzci9pbmNsdWRlL2crKy0zL3R5cGVfdHJhaXRzLmgiIDMK
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyKj4gewogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aXNfUE9EX3R5cGU7Cn07CgogICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfX3R5cGVfdHJhaXRz
PHNpZ25lZCBjaGFyKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50
X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgogICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGNoYXIqPiB7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf
dHlwZTsKfTsKCiAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9fdHlwZV90cmFpdHM8Y29uc3Qg
Y2hhcio+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3QgX190eXBlX3RyYWl0czxjb25zdCBzaWduZWQgY2hhcio+IHsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBl
Owp9OwoKICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX190eXBlX3RyYWl0czxjb25zdCB1bnNp
Z25lZCBjaGFyKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPiBzdHJ1Y3QgX0lzX2ludGVnZXIgewogIHR5cGVkZWYgX19mYWxzZV90eXBlIF9JbnRl
Z3JhbDsKfTsKCgoKICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX0lzX2ludGVnZXI8Ym9vbD4g
ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgogICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCBfSXNfaW50ZWdlcjxjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50
ZWdyYWw7Cn07CgogICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQg
Y2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190
cnVlX3R5cGUgX0ludGVncmFsOwp9OwojIDMzMyAiL3Vzci9pbmNsdWRlL2crKy0zL3R5cGVfdHJh
aXRzLmgiIDMKICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsK
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCiAgICAgICAgICAgICAgICAgICAg
c3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBfSW50ZWdyYWw7Cn07CgogICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfSXNfaW50ZWdlcjxp
bnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCiAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewogIHR5cGVkZWYgX190cnVl
X3R5cGUgX0ludGVncmFsOwp9OwoKICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX0lzX2ludGVn
ZXI8bG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYg
X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwojIDQ2ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2Fs
Z29iYXNlLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyA0OSAiL3Vz
ci9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xpYi9nY2MtbGli
L2k1ODYtbWFuZHJha2UtbGludXgtZ251LzIuOTYvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTEg
Ii91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL2xp
bWl0cy5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8y
Ljk2L2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMwoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIv
aTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMzAg
Ii91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL2xp
bWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNs
dWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIv
dXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDQ1ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyA0NiAiL3Vzci9pbmNsdWRl
L2xpbWl0cy5oIiAyIDMKIyAxNDQgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMSAzCiMgMTI2ICIvdXNyL2luY2x1ZGUvYml0cy9w
b3NpeDFfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAzCiMg
MzYgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xp
bnV4L2xpbWl0cy5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDIg
MwojIDEyNyAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAyIDMKIyAxNDUgIi91c3Iv
aW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgyX2xp
bS5oIiAxIDMKIyAxNDkgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMTMxICIvdXNyL2xp
Yi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzIuOTYvaW5jbHVkZS9saW1pdHMuaCIg
MiAzCiMgOCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8yLjk2L2lu
Y2x1ZGUvc3lzbGltaXRzLmgiIDIgMwojIDEyICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJh
a2UtbGludXgtZ251LzIuOTYvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgNTAgIi91c3IvaW5jbHVk
ZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAx
IDMKIyA1MSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNy
L2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzIuOTYvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzCiMgNTIgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAi
L3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8yLjk2L2luY2x1ZGUvbmV3
LmgiIDEgMwojIDMzICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzIu
OTYvaW5jbHVkZS9uZXcuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1s
aW51eC1nbnUvMi45Ni9pbmNsdWRlL25ldyIgMSAzCiMgMzMgIi91c3IvbGliL2djYy1saWIvaTU4
Ni1tYW5kcmFrZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL25ldyIgMwojcHJhZ21hIGludGVyZmFj
ZSAibmV3IgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMi45
Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRy
YWtlLWxpbnV4LWdudS8yLjk2L2luY2x1ZGUvbmV3IiAyIDMKIyAxICIvdXNyL2xpYi9nY2MtbGli
L2k1ODYtbWFuZHJha2UtbGludXgtZ251LzIuOTYvaW5jbHVkZS9leGNlcHRpb24iIDEgMwojIDMz
ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzIuOTYvaW5jbHVkZS9l
eGNlcHRpb24iIDMKI3ByYWdtYSBpbnRlcmZhY2UgImV4Y2VwdGlvbiIKCmV4dGVybiAiQysrIiB7
CgpuYW1lc3BhY2Ugc3RkIHsKCmNsYXNzIGV4Y2VwdGlvbiB7CnB1YmxpYzoKICBleGNlcHRpb24g
KCkgeyB9CiAgdmlydHVhbCB+ZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1YWwgY29uc3QgY2hhciog
d2hhdCAoKSBjb25zdDsKfTsKCmNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9u
IHsKcHVibGljOgogIGJhZF9leGNlcHRpb24gKCkgeyB9CiAgdmlydHVhbCB+YmFkX2V4Y2VwdGlv
biAoKSB7IH0KfTsKCnR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsKdHlwZWRl
ZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCnRlcm1pbmF0ZV9oYW5kbGVyIHNldF90
ZXJtaW5hdGUgKHRlcm1pbmF0ZV9oYW5kbGVyKTsKdm9pZCB0ZXJtaW5hdGUgKCkgOwp1bmV4cGVj
dGVkX2hhbmRsZXIgc2V0X3VuZXhwZWN0ZWQgKHVuZXhwZWN0ZWRfaGFuZGxlcik7CnZvaWQgdW5l
eHBlY3RlZCAoKSA7CmJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uICgpOwoKfQoKfQojIDM2ICIvdXNy
L2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzIuOTYvaW5jbHVkZS9uZXciIDIg
MwoKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQgewoKICBjbGFzcyBiYWRfYWxsb2MgOiBw
dWJsaWMgZXhjZXB0aW9uIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQo
KSBjb25zdCB0aHJvdygpIHsgcmV0dXJuICJiYWRfYWxsb2MiOyB9CiAgfTsKCiAgc3RydWN0IG5v
dGhyb3dfdCB7fTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190IG5vdGhyb3c7CiAgdHlwZWRlZiB2
b2lkICgqbmV3X2hhbmRsZXIpKCk7CiAgbmV3X2hhbmRsZXIgc2V0X25ld19oYW5kbGVyIChuZXdf
aGFuZGxlcik7Cgp9CgoKdm9pZCAqb3BlcmF0b3IgbmV3IChzaXplX3QpIHRocm93IChzdGQ6OmJh
ZF9hbGxvYyk7CnZvaWQgKm9wZXJhdG9yIG5ld1tdIChzaXplX3QpIHRocm93IChzdGQ6OmJhZF9h
bGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkICopIHRocm93KCk7CnZvaWQgb3BlcmF0
b3IgZGVsZXRlW10gKHZvaWQgKikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3IChzaXplX3Qs
IGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3W10gKHNp
emVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0
ZSAodm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3Ig
ZGVsZXRlW10gKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoKCmlubGlu
ZSB2b2lkICpvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVy
biBwbGFjZTsgfQppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3W10oc2l6ZV90LCB2b2lkICpwbGFj
ZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQp9CiMgMzQgIi91c3IvbGliL2djYy1saWIvaTU4
Ni1tYW5kcmFrZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL25ldy5oIiAyIDMKCnVzaW5nIHN0ZDo6
bmV3X2hhbmRsZXI7CnVzaW5nIHN0ZDo6c2V0X25ld19oYW5kbGVyOwojIDUzICIvdXNyL2luY2x1
ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystMy9pb3N0
cmVhbS5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMK
IyA2MyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAzCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLCBjbGFzcyBfVHA+CmlubGluZSB2
b2lkIF9faXRlcl9zd2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIyIF9fYiwgX1Rw
KikgewogIF9UcCBfX3RtcCA9ICpfX2E7CiAgKl9fYSA9ICpfX2I7CiAgKl9fYiA9IF9fdG1wOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KaW5s
aW5lIHZvaWQgaXRlcl9zd2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIyIF9fYikg
ewogIF9faXRlcl9zd2FwKF9fYSwgX19iLCB2YWx1ZV90eXBlKF9fYSkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikgewogIF9UcCBf
X3RtcCA9IF9fYTsKICBfX2EgPSBfX2I7CiAgX19iID0gX190bXA7Cn0KIyA5MCAiL3Vzci9pbmNs
dWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBj
b25zdCBfVHAmIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpIHsKICByZXR1cm4g
X19iIDwgX19hID8gX19iIDogX19hOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29u
c3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7CiAgcmV0dXJuIF9f
YSA8IF9fYiA/IF9fYiA6IF9fYTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29t
cGFyZT4KaW5saW5lIGNvbnN0IF9UcCYgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9f
YiwgX0NvbXBhcmUgX19jb21wKSB7CiAgcmV0dXJuIF9fY29tcChfX2IsIF9fYSkgPyBfX2IgOiBf
X2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3Qg
X1RwJiBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXAp
IHsKICByZXR1cm4gX19jb21wKF9fYSwgX19iKSA/IF9fYiA6IF9fYTsKfQojIDEyMyAiL3Vzci9p
bmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
LCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIg
X19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yICggOyBfX2ZpcnN0
ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytfX2ZpcnN0KQogICAgKl9fcmVzdWx0ID0gKl9fZmly
c3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfT3V0cHV0SXRl
cgpfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LAogICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Jf
dGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yIChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJz
dDsgX19uID4gMDsgLS1fX24pIHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2Zp
cnN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgppbmxpbmUgX1RwKgpfX2NvcHlfdHJpdmlhbChjb25zdCBfVHAqIF9fZmlyc3Qs
IGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgbWVtbW92ZShfX3Jlc3VsdCwg
X19maXJzdCwgc2l6ZW9mKF9UcCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJldHVybiBfX3Jl
c3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQojIDE5MyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0
bF9hbGdvYmFzZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0
SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQp
CnsKICByZXR1cm4gX19jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAg
ICAgICBpdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgIGRpc3RhbmNl
X3R5cGUoX19maXJzdCkpOwp9CgppbmxpbmUgY2hhciogY29weShjb25zdCBjaGFyKiBfX2ZpcnN0
LCBjb25zdCBjaGFyKiBfX2xhc3QsIGNoYXIqIF9fcmVzdWx0KSB7CiAgbWVtbW92ZShfX3Jlc3Vs
dCwgX19maXJzdCwgX19sYXN0IC0gX19maXJzdCk7CiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFz
dCAtIF9fZmlyc3QpOwp9CgppbmxpbmUgd2NoYXJfdCogY29weShjb25zdCB3Y2hhcl90KiBfX2Zp
cnN0LCBjb25zdCB3Y2hhcl90KiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qq
IF9fcmVzdWx0KSB7CiAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKHdjaGFyX3Qp
ICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19m
aXJzdCk7Cn0KCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNz
IF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBf
QmlkaXJlY3Rpb25hbEl0ZXIyIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSopCnsKICB3aGls
ZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICByZXR1
cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19jb3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFz
dCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7
CiAgcmV0dXJuIF9fcmVzdWx0Owp9CiMgMjk2ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29i
YXNlLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9CSTEsIGNsYXNzIF9CSTI+CmlubGluZSBfQkkyIGNv
cHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkgewog
IHJldHVybiBfX2NvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCgoKCgoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KcGFpcjxf
SW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4gX19jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6
ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0
SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5w
dXRfaXRlcmF0b3JfdGFnKSB7CiAgZm9yICggOyBfX2NvdW50ID4gMDsgLS1fX2NvdW50KSB7CiAg
ICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICAgICsrX19yZXN1bHQ7CiAg
fQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPihfX2ZpcnN0LCBfX3Jlc3Vs
dCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUkFJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1
dEl0ZXI+CmlubGluZSBwYWlyPF9SQUl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfUkFJdGVy
IF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAog
ICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SQUl0ZXIgX19sYXN0ID0g
X19maXJzdCArIF9fY291bnQ7CiAgcmV0dXJuIHBhaXI8X1JBSXRlciwgX091dHB1dEl0ZXI+KF9f
bGFzdCwgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWly
PF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9T
aXplIF9fY291bnQsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fY29weV9uKF9f
Zmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBpdGVyYXRvcl9jYXRl
Z29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6
ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVy
Pgpjb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LCBfT3V0cHV0SXRlciBf
X3Jlc3VsdCkgewogIHJldHVybiBfX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3VsdCk7
Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CnZvaWQgZmls
bChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBf
X3ZhbHVlKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgKl9f
Zmlyc3QgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9T
aXplLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIGZpbGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBf
U2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkgewogIGZvciAoIDsgX19uID4gMDsgLS1fX24s
ICsrX19maXJzdCkKICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICByZXR1cm4gX19maXJzdDsKfQoK
CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KcGFpcjxf
SW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f
Zmlyc3QyKSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgKl9fZmlyc3QxID09ICpf
X2ZpcnN0MikgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIHJldHVybiBw
YWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFy
eVByZWRpY2F0ZT4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1
dEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAgd2hpbGUgKF9fZmly
c3QxICE9IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsK
ICAgICsrX19maXJzdDE7CiAgICArK19fZmlyc3QyOwogIH0KICByZXR1cm4gcGFpcjxfSW5wdXRJ
dGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmlubGluZSBib29sIGVxdWFsKF9JbnB1
dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBf
SW5wdXRJdGVyMiBfX2ZpcnN0MikgewogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytf
X2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIGlmICgqX19maXJzdDEgIT0gKl9fZmlyc3QyKQogICAg
ICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CmlubGluZSBi
b29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0JpbmFyeVByZWRpY2F0ZSBfX2Jp
bmFyeV9wcmVkKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCAr
K19fZmlyc3QyKQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkK
ICAgICAgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KYm9vbCBsZXhpY29ncmFwaGljYWxfY29t
cGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s
YXN0MikgewogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xh
c3QyCiAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICBpZiAoKl9fZmlyc3Qx
IDwgKl9fZmlyc3QyKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmICgqX19maXJzdDIgPCAqX19m
aXJzdDEpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFz
dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIx
LCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgbGV4aWNvZ3JhcGhpY2Fs
X2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIy
IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7
CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAg
ICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qx
LCAqX19maXJzdDIpKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qy
LCAqX19maXJzdDEpKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBfX2ZpcnN0MSA9
PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7Cn0KCmlubGluZSBib29sCmxleGljb2dy
YXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHNpemVfdCBf
X2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFz
dDIgLSBfX2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9f
Zmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9f
cmVzdWx0IDwgMCA6IF9fbGVuMSA8IF9fbGVuMjsKfQoKaW5saW5lIGJvb2wgbGV4aWNvZ3JhcGhp
Y2FsX2NvbXBhcmUoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBj
b25zdCBjaGFyKiBfX2xhc3QyKQp7CgogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZSgo
Y29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgX19s
ZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0
ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7CiAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0MSA8ICpf
X2ZpcnN0MikKICAgICAgcmV0dXJuIC0xOwogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkK
ICAgICAgcmV0dXJuIDE7CiAgICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAgaWYg
KF9fZmlyc3QyID09IF9fbGFzdDIpIHsKICAgIHJldHVybiAhKF9fZmlyc3QxID09IF9fbGFzdDEp
OwogIH0KICBlbHNlIHsKICAgIHJldHVybiAtMTsKICB9Cn0KCmlubGluZSBpbnQKX19sZXhpY29n
cmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmly
c3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciog
X19sYXN0MikKewogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7
CiAgY29uc3QgcHRyZGlmZl90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBp
bnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xl
bjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0CiAgICAgICAgICAgICAgICAg
ICAgICAgOiAoX19sZW4xID09IF9fbGVuMiA/IDAgOiAoX19sZW4xIDwgX19sZW4yID8gLTEgOiAx
KSk7Cn0KCmlubGluZSBpbnQKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IGNo
YXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpCnsKCiAg
cmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheSgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFz
dDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0
ZXIyPgppbnQgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0
MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsKICByZXR1cm4gX19s
ZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Miwg
X19sYXN0Mik7Cn0KIyA1NyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF90cmVlLmgiIDIgMwojIDEg
Ii91c3IvaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMSAzCiMgNTggIi91c3IvaW5jbHVkZS9n
KystMy9zdGxfdHJlZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2NvbnN0cnVj
dC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9jb25zdHJ1Y3QuaCIgMwojIDEg
Ii91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMi45Ni9pbmNsdWRlL25l
dy5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9jb25zdHJ1Y3QuaCIgMiAzCgoK
CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSB2b2lkIGRlc3Ryb3koX1RwKiBfX3BvaW50
ZXIpIHsKICBfX3BvaW50ZXItPn5fVHAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3Mg
X1QyPgppbmxpbmUgdm9pZCBjb25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkg
ewogIG5ldyAoX19wKSBfVDEoX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDE+CmlubGlu
ZSB2b2lkIGNvbnN0cnVjdChfVDEqIF9fcCkgewogIG5ldyAoX19wKSBfVDEoKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lkCl9fZGVzdHJveV9hdXgoX0Zv
cndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgX19mYWxzZV90
eXBlKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgZGVzdHJv
eSgmKl9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5l
IHZvaWQgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9yLCBf
X3RydWVfdHlwZSkge30KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBf
VHA+CmlubGluZSB2b2lkCl9fZGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlcmF0b3IgX19sYXN0LCBfVHAqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh
aXRzPF9UcD46Omhhc190cml2aWFsX2Rlc3RydWN0b3IKICAgICAgICAgIF9Ucml2aWFsX2Rlc3Ry
dWN0b3I7CiAgX19kZXN0cm95X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9Ucml2aWFsX2Rlc3RydWN0
b3IoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZCBk
ZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qp
IHsKICBfX2Rlc3Ryb3koX19maXJzdCwgX19sYXN0LCB2YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoK
aW5saW5lIHZvaWQgZGVzdHJveShjaGFyKiwgY2hhciopIHt9CmlubGluZSB2b2lkIGRlc3Ryb3ko
d2NoYXJfdCosIHdjaGFyX3QqKSB7fQojIDU5ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX3RyZWUu
aCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9mdW5jdGlvbi5oIiAxIDMKIyAzNiAi
L3Vzci9pbmNsdWRlL2crKy0zL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQXJn
LCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZyBh
cmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKCnRlbXBsYXRl
IDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBiaW5hcnlf
ZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVm
IF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlw
ZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBwbHVzIDogcHVibGljIGJpbmFyeV9m
dW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBj
b25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICsgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpzdHJ1Y3QgbWludXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAs
X1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBj
b25zdCB7IHJldHVybiBfX3ggLSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9U
cCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1
cm4gX194ICogX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZGl2aWRlcyA6
IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShj
b25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAvIF9feTsg
fQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBpbmxpbmUgX1RwIGlkZW50aXR5X2VsZW1lbnQo
cGx1czxfVHA+KSB7CiAgcmV0dXJuIF9UcCgwKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBpbmxp
bmUgX1RwIGlkZW50aXR5X2VsZW1lbnQobXVsdGlwbGllczxfVHA+KSB7CiAgcmV0dXJuIF9UcCgx
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG1vZHVsdXMgOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPgp7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs
IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJSBfX3k7IH0KfTsKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9U
cD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAtX194
OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZXF1YWxfdG8gOiBwdWJsaWMgYmlu
YXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAm
IF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA9PSBfX3k7IH0KfTsKCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBub3RfZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1
bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwg
Y29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAhPSBfX3k7IH0KfTsKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAs
X1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg
X195KSBjb25zdCB7IHJldHVybiBfX3ggPiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+
CnN0cnVjdCBsZXNzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBi
b29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJl
dHVybiBfX3ggPCBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVy
X2VxdWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9w
ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf
X3ggPj0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzc19lcXVhbCA6
IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigp
KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDw9IF9f
eTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfYW5kIDogcHVibGlj
IGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3Qg
X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJiYgX195OyB9Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9vciA6IHB1YmxpYyBiaW5hcnlf
ZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194
LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IHx8IF9feTsgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfbm90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJl
dHVybiAhX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgdW5hcnlf
bmVnYXRlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJn
dW1lbnRfdHlwZSwgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJs
aWM6CiAgZXhwbGljaXQgdW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9w
cmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6
YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194KTsKICB9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIHVuYXJ5X25lZ2F0ZTxfUHJl
ZGljYXRlPgpub3QxKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJldHVybiB1bmFyeV9u
ZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+
CmNsYXNzIGJpbmFyeV9uZWdhdGUKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUg
X1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsK
cHVibGljOgogIGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6
IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGlj
YXRlOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHR5
cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNvbnN0CiAgewog
ICAgcmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1By
ZWRpY2F0ZT4KaW5saW5lIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4Kbm90Mihjb25zdCBfUHJl
ZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4gYmluYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3By
ZWQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3MgYmluZGVyMXN0CiAgOiBw
dWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50
X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVz
dWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJh
dGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjFzdChjb25z
dCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246
OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feSkKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9
CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5
cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAg
IHJldHVybiBvcCh2YWx1ZSwgX194KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlv
biwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMXN0PF9PcGVyYXRpb24+CmJpbmQxc3QoY29uc3Qg
X09wZXJhdGlvbiYgX19vcGVyLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5hbWUg
X09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSBfQXJnMV90eXBlOwogIHJldHVybiBiaW5k
ZXIxc3Q8X09wZXJhdGlvbj4oX19vcGVyLCBfQXJnMV90eXBlKF9feCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3MgYmluZGVyMm5kCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rp
b248dHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0
ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1l
bnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjJuZChjb25zdCBfT3BlcmF0aW9uJiBfX3gs
CiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90
eXBlJiBfX3kpCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVy
YXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9u
OjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcChfX3gsIHZh
bHVlKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxp
bmUgYmluZGVyMm5kPF9PcGVyYXRpb24+CmJpbmQybmQoY29uc3QgX09wZXJhdGlvbiYgX19vcGVy
LCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25k
X2FyZ3VtZW50X3R5cGUgX0FyZzJfdHlwZTsKICByZXR1cm4gYmluZGVyMm5kPF9PcGVyYXRpb24+
KF9fb3BlciwgX0FyZzJfdHlwZShfX3gpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlv
bjEsIGNsYXNzIF9PcGVyYXRpb24yPgpjbGFzcyB1bmFyeV9jb21wb3NlCiAgOiBwdWJsaWMgdW5h
cnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlPgp7CnBy
b3RlY3RlZDoKICBfT3BlcmF0aW9uMSBfX29wMTsKICBfT3BlcmF0aW9uMiBfX29wMjsKcHVibGlj
OgogIHVuYXJ5X2NvbXBvc2UoY29uc3QgX09wZXJhdGlvbjEmIF9feCwgY29uc3QgX09wZXJhdGlv
bjImIF9feSkKICAgIDogX19vcDEoX194KSwgX19vcDIoX195KSB7fQogIHR5cGVuYW1lIF9PcGVy
YXRpb24xOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlv
bjI6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9fb3AxKF9fb3AyKF9f
eCkpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlv
bjI+CmlubGluZSB1bmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24yPgpjb21wb3Nl
MShjb25zdCBfT3BlcmF0aW9uMSYgX19vcDEsIGNvbnN0IF9PcGVyYXRpb24yJiBfX29wMikKewog
IHJldHVybiB1bmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24yPihfX29wMSwgX19v
cDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yLCBj
bGFzcyBfT3BlcmF0aW9uMz4KY2xhc3MgYmluYXJ5X2NvbXBvc2UKICA6IHB1YmxpYyB1bmFyeV9m
dW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGU+IHsKcHJvdGVj
dGVkOgogIF9PcGVyYXRpb24xIF9NX29wMTsKICBfT3BlcmF0aW9uMiBfTV9vcDI7CiAgX09wZXJh
dGlvbjMgX01fb3AzOwpwdWJsaWM6CiAgYmluYXJ5X2NvbXBvc2UoY29uc3QgX09wZXJhdGlvbjEm
IF9feCwgY29uc3QgX09wZXJhdGlvbjImIF9feSwKICAgICAgICAgICAgICAgICBjb25zdCBfT3Bl
cmF0aW9uMyYgX196KQogICAgOiBfTV9vcDEoX194KSwgX01fb3AyKF9feSksIF9NX29wMyhfX3op
IHsgfQogIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29u
c3QgdHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAg
cmV0dXJuIF9NX29wMShfTV9vcDIoX194KSwgX01fb3AzKF9feCkpOwogIH0KfTsKCnRlbXBsYXRl
IDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjIsIGNsYXNzIF9PcGVyYXRpb24z
PgppbmxpbmUgYmluYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsIF9PcGVyYXRpb24yLCBfT3BlcmF0
aW9uMz4KY29tcG9zZTIoY29uc3QgX09wZXJhdGlvbjEmIF9fb3AxLCBjb25zdCBfT3BlcmF0aW9u
MiYgX19vcDIsCiAgICAgICAgIGNvbnN0IF9PcGVyYXRpb24zJiBfX29wMykKewogIHJldHVybiBi
aW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSxfT3BlcmF0aW9uMixfT3BlcmF0aW9uMz4KICAgIChf
X29wMSwgX19vcDIsIF9fb3AzKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1
bHQ+CmNsYXNzIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24gOiBwdWJsaWMgdW5hcnlfZnVuY3Rp
b248X0FyZywgX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZyk7
CnB1YmxpYzoKICBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKCkge30KICBleHBsaWNpdCBwb2lu
dGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcpKSA6IF9NX3B0cihfX3gp
IHt9CiAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcgX194KSBjb25zdCB7IHJldHVybiBfTV9wdHIo
X194KTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBw
b2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHB0cl9mdW4oX1Jlc3VsdCAo
Kl9feCkoX0FyZykpCnsKICByZXR1cm4gcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBf
UmVzdWx0PihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFz
cyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbiA6CiAgcHVibGljIGJp
bmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PiB7CnByb3RlY3RlZDoKICAgIF9SZXN1
bHQgKCpfTV9wdHIpKF9BcmcxLCBfQXJnMik7CnB1YmxpYzoKICAgIHBvaW50ZXJfdG9fYmluYXJ5
X2Z1bmN0aW9uKCkge30KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKF9S
ZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpCiAgICAgIDogX01fcHRyKF9feCkge30KICAgIF9S
ZXN1bHQgb3BlcmF0b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9feSkgY29uc3QgewogICAgICByZXR1
cm4gX01fcHRyKF9feCwgX195KTsKICAgIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xh
c3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlv
bjxfQXJnMSxfQXJnMixfUmVzdWx0PgpwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJn
MikpIHsKICByZXR1cm4gcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jl
c3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfSWRlbnRpdHkgOiBw
dWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4gewogIGNvbnN0IF9UcCYgb3BlcmF0b3IoKShj
b25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPiBzdHJ1Y3QgaWRlbnRpdHkgOiBwdWJsaWMgX0lkZW50aXR5PF9UcD4ge307CgoKdGVtcGxh
dGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDFzdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlv
bjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGU+IHsKICBjb25zdCB0eXBlbmFtZSBf
UGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAg
ICByZXR1cm4gX194LmZpcnN0OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0
IF9TZWxlY3QybmQgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9QYWly
OjpzZWNvbmRfdHlwZT4KewogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3Bl
cmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LnNlY29uZDsK
ICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+IHN0cnVjdCBzZWxlY3Qxc3QgOiBwdWJsaWMg
X1NlbGVjdDFzdDxfUGFpcj4ge307CnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4gc3RydWN0IHNlbGVj
dDJuZCA6IHB1YmxpYyBfU2VsZWN0Mm5kPF9QYWlyPiB7fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Fy
ZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgX1Byb2plY3Qxc3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPF9BcmcxLCBfQXJnMiwgX0FyZzE+IHsKICBfQXJnMSBvcGVyYXRvcigpKGNvbnN0IF9Bcmcx
JiBfX3gsIGNvbnN0IF9BcmcyJikgY29uc3QgeyByZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgX1Byb2plY3QybmQgOiBwdWJsaWMgYmlu
YXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJnMiwgX0FyZzI+IHsKICBfQXJnMiBvcGVyYXRvcigpKGNv
bnN0IF9BcmcxJiwgY29uc3QgX0FyZzImIF9feSkgY29uc3QgeyByZXR1cm4gX195OyB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgcHJvamVjdDFzdCA6IHB1
YmxpYyBfUHJvamVjdDFzdDxfQXJnMSwgX0FyZzI+IHt9OwoKdGVtcGxhdGUgPGNsYXNzIF9Bcmcx
LCBjbGFzcyBfQXJnMj4Kc3RydWN0IHByb2plY3QybmQgOiBwdWJsaWMgX1Byb2plY3QybmQ8X0Fy
ZzEsIF9BcmcyPiB7fTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgY29uc3Rh
bnRfdm9pZF9mdW4KewogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKICByZXN1bHRfdHlw
ZSBfX3ZhbDsKICBjb25zdGFudF92b2lkX2Z1bihjb25zdCByZXN1bHRfdHlwZSYgX192KSA6IF9f
dmFsKF9fdikge30KICBjb25zdCByZXN1bHRfdHlwZSYgb3BlcmF0b3IoKSgpIGNvbnN0IHsgcmV0
dXJuIF9fdmFsOyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQsIGNsYXNzIF9Bcmd1bWVu
dCA9IF9SZXN1bHQ+CgoKCnN0cnVjdCBjb25zdGFudF91bmFyeV9mdW4gOiBwdWJsaWMgdW5hcnlf
ZnVuY3Rpb248X0FyZ3VtZW50LCBfUmVzdWx0PiB7CiAgX1Jlc3VsdCBfTV92YWw7CiAgY29uc3Rh
bnRfdW5hcnlfZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikgOiBfTV92YWwoX192KSB7fQogIGNvbnN0
IF9SZXN1bHQmIG9wZXJhdG9yKCkoY29uc3QgX0FyZ3VtZW50JikgY29uc3QgeyByZXR1cm4gX01f
dmFsOyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQsIGNsYXNzIF9BcmcxID0gX1Jlc3Vs
dCwgY2xhc3MgX0FyZzIgPSBfQXJnMT4KCgoKc3RydWN0IGNvbnN0YW50X2JpbmFyeV9mdW4gOiBw
dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJnMiwgX1Jlc3VsdD4gewogIF9SZXN1bHQg
X01fdmFsOwogIGNvbnN0YW50X2JpbmFyeV9mdW4oY29uc3QgX1Jlc3VsdCYgX192KSA6IF9NX3Zh
bChfX3YpIHt9CiAgY29uc3QgX1Jlc3VsdCYgb3BlcmF0b3IoKShjb25zdCBfQXJnMSYsIGNvbnN0
IF9BcmcyJikgY29uc3QgewogICAgcmV0dXJuIF9NX3ZhbDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+IGNvbnN0YW50MChj
b25zdCBfUmVzdWx0JiBfX3ZhbCkKewogIHJldHVybiBjb25zdGFudF92b2lkX2Z1bjxfUmVzdWx0
PihfX3ZhbCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgppbmxpbmUgY29uc3RhbnRfdW5h
cnlfZnVuPF9SZXN1bHQsX1Jlc3VsdD4gY29uc3RhbnQxKGNvbnN0IF9SZXN1bHQmIF9fdmFsKQp7
CiAgcmV0dXJuIGNvbnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQ+KF9fdmFsKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CmlubGluZSBjb25zdGFudF9iaW5hcnlfZnVuPF9SZXN1
bHQsX1Jlc3VsdCxfUmVzdWx0Pgpjb25zdGFudDIoY29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICBy
ZXR1cm4gY29uc3RhbnRfYmluYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQsX1Jlc3VsdD4oX192YWwp
Owp9CgoKCmNsYXNzIHN1YnRyYWN0aXZlX3JuZyA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx1bnNp
Z25lZCBpbnQsIHVuc2lnbmVkIGludD4gewpwcml2YXRlOgogIHVuc2lnbmVkIGludCBfTV90YWJs
ZVs1NV07CiAgc2l6ZV90IF9NX2luZGV4MTsKICBzaXplX3QgX01faW5kZXgyOwpwdWJsaWM6CiAg
dW5zaWduZWQgaW50IG9wZXJhdG9yKCkodW5zaWduZWQgaW50IF9fbGltaXQpIHsKICAgIF9NX2lu
ZGV4MSA9IChfTV9pbmRleDEgKyAxKSAlIDU1OwogICAgX01faW5kZXgyID0gKF9NX2luZGV4MiAr
IDEpICUgNTU7CiAgICBfTV90YWJsZVtfTV9pbmRleDFdID0gX01fdGFibGVbX01faW5kZXgxXSAt
IF9NX3RhYmxlW19NX2luZGV4Ml07CiAgICByZXR1cm4gX01fdGFibGVbX01faW5kZXgxXSAlIF9f
bGltaXQ7CiAgfQoKICB2b2lkIF9NX2luaXRpYWxpemUodW5zaWduZWQgaW50IF9fc2VlZCkKICB7
CiAgICB1bnNpZ25lZCBpbnQgX19rID0gMTsKICAgIF9NX3RhYmxlWzU0XSA9IF9fc2VlZDsKICAg
IHNpemVfdCBfX2k7CiAgICBmb3IgKF9faSA9IDA7IF9faSA8IDU0OyBfX2krKykgewogICAgICAg
IHNpemVfdCBfX2lpID0gKDIxICogKF9faSArIDEpICUgNTUpIC0gMTsKICAgICAgICBfTV90YWJs
ZVtfX2lpXSA9IF9fazsKICAgICAgICBfX2sgPSBfX3NlZWQgLSBfX2s7CiAgICAgICAgX19zZWVk
ID0gX01fdGFibGVbX19paV07CiAgICB9CiAgICBmb3IgKGludCBfX2xvb3AgPSAwOyBfX2xvb3Ag
PCA0OyBfX2xvb3ArKykgewogICAgICAgIGZvciAoX19pID0gMDsgX19pIDwgNTU7IF9faSsrKQog
ICAgICAgICAgICBfTV90YWJsZVtfX2ldID0gX01fdGFibGVbX19pXSAtIF9NX3RhYmxlWygxICsg
X19pICsgMzApICUgNTVdOwogICAgfQogICAgX01faW5kZXgxID0gMDsKICAgIF9NX2luZGV4MiA9
IDMxOwogIH0KCiAgc3VidHJhY3RpdmVfcm5nKHVuc2lnbmVkIGludCBfX3NlZWQpIHsgX01faW5p
dGlhbGl6ZShfX3NlZWQpOyB9CiAgc3VidHJhY3RpdmVfcm5nKCkgeyBfTV9pbml0aWFsaXplKDE2
MTgwMzM5OHUpOyB9Cn07CiMgNDg2ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2Z1bmN0aW9uLmgi
IDMKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVi
bGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1
bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3Io
KShfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBf
UmV0IChfVHA6OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4K
Y2xhc3MgY29uc3RfbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCos
X1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9f
cGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAq
IF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChf
VHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+
CmNsYXNzIG1lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsK
cHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBf
TV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAo
X19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBs
YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3QgOiBw
dWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0
X21lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9
CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipf
TV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCnRlbXBs
YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Qg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBs
aWNpdCBtZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30K
ICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19w
LT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3Rf
bWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLF9SZXQ+
IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZiko
X0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAq
IF9fcCwgX0FyZyBfX3gpIGNvbnN0CiAgICB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpw
cml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfcmVmX3QgOiBw
dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0
IG1lbV9mdW4xX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30K
ICBfUmV0IG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19y
LipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9t
ZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpw
dWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZiko
X0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAm
IF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0
ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKIyA2NDQgIi91c3IvaW5jbHVk
ZS9nKystMy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1Rw
PgppbmxpbmUgbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSkK
ICB7IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBf
UmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4o
X1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fdDxfUmV0
LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1l
bV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7
IHJldHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVt
X2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9m
dW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf
VHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4o
X1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsX1RwLF9B
cmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+
CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1Rw
OjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1Rw
LF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9B
cmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuX3JlZihfUmV0
IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9B
cmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+
CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuX3JlZihf
UmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Jl
Zl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf
VHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4x
KF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxf
QXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJn
PgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuMShfUmV0IChf
VHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxf
VHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3Mg
X0FyZz4KaW5saW5lIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4xX3JlZihf
UmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1Rw
LF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9B
cmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuMV9y
ZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVu
MV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9CiMgNjAgIi91c3IvaW5jbHVkZS9nKystMy9z
dGxfdHJlZS5oIiAyIDMKCgoKCgoKCnR5cGVkZWYgYm9vbCBfUmJfdHJlZV9Db2xvcl90eXBlOwpj
b25zdCBfUmJfdHJlZV9Db2xvcl90eXBlIF9TX3JiX3RyZWVfcmVkID0gZmFsc2U7CmNvbnN0IF9S
Yl90cmVlX0NvbG9yX3R5cGUgX1NfcmJfdHJlZV9ibGFjayA9IHRydWU7CgpzdHJ1Y3QgX1JiX3Ry
ZWVfbm9kZV9iYXNlCnsKICB0eXBlZGVmIF9SYl90cmVlX0NvbG9yX3R5cGUgX0NvbG9yX3R5cGU7
CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9CYXNlX3B0cjsKCiAgX0NvbG9yX3R5cGUg
X01fY29sb3I7CiAgX0Jhc2VfcHRyIF9NX3BhcmVudDsKICBfQmFzZV9wdHIgX01fbGVmdDsKICBf
QmFzZV9wdHIgX01fcmlnaHQ7CgogIHN0YXRpYyBfQmFzZV9wdHIgX1NfbWluaW11bShfQmFzZV9w
dHIgX194KQogIHsKICAgIHdoaWxlIChfX3gtPl9NX2xlZnQgIT0gMCkgX194ID0gX194LT5fTV9s
ZWZ0OwogICAgcmV0dXJuIF9feDsKICB9CgogIHN0YXRpYyBfQmFzZV9wdHIgX1NfbWF4aW11bShf
QmFzZV9wdHIgX194KQogIHsKICAgIHdoaWxlIChfX3gtPl9NX3JpZ2h0ICE9IDApIF9feCA9IF9f
eC0+X01fcmlnaHQ7CiAgICByZXR1cm4gX194OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVmFs
dWU+CnN0cnVjdCBfUmJfdHJlZV9ub2RlIDogcHVibGljIF9SYl90cmVlX25vZGVfYmFzZQp7CiAg
dHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWx1ZT4qIF9MaW5rX3R5cGU7CiAgX1ZhbHVlIF9NX3Zh
bHVlX2ZpZWxkOwp9OwoKCnN0cnVjdCBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yCnsKICB0eXBlZGVm
IF9SYl90cmVlX25vZGVfYmFzZTo6X0Jhc2VfcHRyIF9CYXNlX3B0cjsKICB0eXBlZGVmIGJpZGly
ZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgcHRyZGlm
Zl90IGRpZmZlcmVuY2VfdHlwZTsKICBfQmFzZV9wdHIgX01fbm9kZTsKCiAgdm9pZCBfTV9pbmNy
ZW1lbnQoKQogIHsKICAgIGlmIChfTV9ub2RlLT5fTV9yaWdodCAhPSAwKSB7CiAgICAgIF9NX25v
ZGUgPSBfTV9ub2RlLT5fTV9yaWdodDsKICAgICAgd2hpbGUgKF9NX25vZGUtPl9NX2xlZnQgIT0g
MCkKICAgICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fbGVmdDsKICAgIH0KICAgIGVsc2Ugewog
ICAgICBfQmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01fcGFyZW50OwogICAgICB3aGlsZSAoX01f
bm9kZSA9PSBfX3ktPl9NX3JpZ2h0KSB7CiAgICAgICAgX01fbm9kZSA9IF9feTsKICAgICAgICBf
X3kgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgfQogICAgICBpZiAoX01fbm9kZS0+X01fcmlnaHQg
IT0gX195KQogICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICB9CiAgfQoKICB2b2lkIF9NX2RlY3Jl
bWVudCgpCiAgewogICAgaWYgKF9NX25vZGUtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVkICYm
CiAgICAgICAgX01fbm9kZS0+X01fcGFyZW50LT5fTV9wYXJlbnQgPT0gX01fbm9kZSkKICAgICAg
X01fbm9kZSA9IF9NX25vZGUtPl9NX3JpZ2h0OwogICAgZWxzZSBpZiAoX01fbm9kZS0+X01fbGVm
dCAhPSAwKSB7CiAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9sZWZ0OwogICAgICB3
aGlsZSAoX195LT5fTV9yaWdodCAhPSAwKQogICAgICAgIF9feSA9IF9feS0+X01fcmlnaHQ7CiAg
ICAgIF9NX25vZGUgPSBfX3k7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX0Jhc2VfcHRyIF9feSA9
IF9NX25vZGUtPl9NX3BhcmVudDsKICAgICAgd2hpbGUgKF9NX25vZGUgPT0gX195LT5fTV9sZWZ0
KSB7CiAgICAgICAgX01fbm9kZSA9IF9feTsKICAgICAgICBfX3kgPSBfX3ktPl9NX3BhcmVudDsK
ICAgICAgfQogICAgICBfTV9ub2RlID0gX195OwogICAgfQogIH0KfTsKCnRlbXBsYXRlIDxjbGFz
cyBfVmFsdWUsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CnN0cnVjdCBfUmJfdHJlZV9pdGVyYXRv
ciA6IHB1YmxpYyBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yCnsKICB0eXBlZGVmIF9WYWx1ZSB2YWx1
ZV90eXBlOwogIHR5cGVkZWYgX1JlZiByZWZlcmVuY2U7CiAgdHlwZWRlZiBfUHRyIHBvaW50ZXI7
CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIF9WYWx1ZSYsIF9WYWx1ZSo+CiAg
ICBpdGVyYXRvcjsKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgY29uc3QgX1Zh
bHVlJiwgY29uc3QgX1ZhbHVlKj4KICAgIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgX1JiX3Ry
ZWVfaXRlcmF0b3I8X1ZhbHVlLCBfUmVmLCBfUHRyPgogICAgX1NlbGY7CiAgdHlwZWRlZiBfUmJf
dHJlZV9ub2RlPF9WYWx1ZT4qIF9MaW5rX3R5cGU7CgogIF9SYl90cmVlX2l0ZXJhdG9yKCkge30K
ICBfUmJfdHJlZV9pdGVyYXRvcihfTGlua190eXBlIF9feCkgeyBfTV9ub2RlID0gX194OyB9CiAg
X1JiX3RyZWVfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9faXQpIHsgX01fbm9kZSA9IF9faXQu
X01fbm9kZTsgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX0xpbmtf
dHlwZShfTV9ub2RlKS0+X01fdmFsdWVfZmllbGQ7IH0KCiAgcG9pbnRlciBvcGVyYXRvci0+KCkg
Y29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCgogIF9TZWxmJiBvcGVyYXRvcisrKCkg
eyBfTV9pbmNyZW1lbnQoKTsgcmV0dXJuICp0aGlzOyB9CiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQp
IHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICBfTV9pbmNyZW1lbnQoKTsKICAgIHJldHVy
biBfX3RtcDsKICB9CgogIF9TZWxmJiBvcGVyYXRvci0tKCkgeyBfTV9kZWNyZW1lbnQoKTsgcmV0
dXJuICp0aGlzOyB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0g
KnRoaXM7CiAgICBfTV9kZWNyZW1lbnQoKTsKICAgIHJldHVybiBfX3RtcDsKICB9Cn07Cgppbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlX2Jhc2VfaXRlcmF0b3ImIF9feCwKICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yJiBfX3kpIHsK
ICByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7Cn0KCmlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvciYgX194LAogICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IF9SYl90cmVlX2Jhc2VfaXRlcmF0b3ImIF9feSkgewogIHJldHVybiBfX3gu
X01fbm9kZSAhPSBfX3kuX01fbm9kZTsKfQoKCgppbmxpbmUgYmlkaXJlY3Rpb25hbF9pdGVyYXRv
cl90YWcKaXRlcmF0b3JfY2F0ZWdvcnkoY29uc3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvciYpIHsK
ICByZXR1cm4gYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKTsKfQoKaW5saW5lIF9SYl90cmVl
X2Jhc2VfaXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSoKZGlzdGFuY2VfdHlwZShjb25zdCBfUmJf
dHJlZV9iYXNlX2l0ZXJhdG9yJikgewogIHJldHVybiAoX1JiX3RyZWVfYmFzZV9pdGVyYXRvcjo6
ZGlmZmVyZW5jZV90eXBlKikgMDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX1Jl
ZiwgY2xhc3MgX1B0cj4KaW5saW5lIF9WYWx1ZSogdmFsdWVfdHlwZShjb25zdCBfUmJfdHJlZV9p
dGVyYXRvcjxfVmFsdWUsIF9SZWYsIF9QdHI+JikgewogIHJldHVybiAoX1ZhbHVlKikgMDsKfQoK
CgppbmxpbmUgdm9pZApfUmJfdHJlZV9yb3RhdGVfbGVmdChfUmJfdHJlZV9ub2RlX2Jhc2UqIF9f
eCwgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290KQp7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBf
X3kgPSBfX3gtPl9NX3JpZ2h0OwogIF9feC0+X01fcmlnaHQgPSBfX3ktPl9NX2xlZnQ7CiAgaWYg
KF9feS0+X01fbGVmdCAhPTApCiAgICBfX3ktPl9NX2xlZnQtPl9NX3BhcmVudCA9IF9feDsKICBf
X3ktPl9NX3BhcmVudCA9IF9feC0+X01fcGFyZW50OwoKICBpZiAoX194ID09IF9fcm9vdCkKICAg
IF9fcm9vdCA9IF9feTsKICBlbHNlIGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9NX2xlZnQp
CiAgICBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feTsKICBlbHNlCiAgICBfX3gtPl9NX3Bh
cmVudC0+X01fcmlnaHQgPSBfX3k7CiAgX195LT5fTV9sZWZ0ID0gX194OwogIF9feC0+X01fcGFy
ZW50ID0gX195Owp9CgppbmxpbmUgdm9pZApfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX1JiX3RyZWVf
bm9kZV9iYXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKewogIF9SYl90cmVl
X25vZGVfYmFzZSogX195ID0gX194LT5fTV9sZWZ0OwogIF9feC0+X01fbGVmdCA9IF9feS0+X01f
cmlnaHQ7CiAgaWYgKF9feS0+X01fcmlnaHQgIT0gMCkKICAgIF9feS0+X01fcmlnaHQtPl9NX3Bh
cmVudCA9IF9feDsKICBfX3ktPl9NX3BhcmVudCA9IF9feC0+X01fcGFyZW50OwoKICBpZiAoX194
ID09IF9fcm9vdCkKICAgIF9fcm9vdCA9IF9feTsKICBlbHNlIGlmIChfX3ggPT0gX194LT5fTV9w
YXJlbnQtPl9NX3JpZ2h0KQogICAgX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX195OwogIGVs
c2UKICAgIF9feC0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195OwogIF9feS0+X01fcmlnaHQgPSBf
X3g7CiAgX194LT5fTV9wYXJlbnQgPSBfX3k7Cn0KCmlubGluZSB2b2lkCl9SYl90cmVlX3JlYmFs
YW5jZShfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290
KQp7CiAgX194LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogIHdoaWxlIChfX3ggIT0gX19y
b290ICYmIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkgewogICAg
aWYgKF9feC0+X01fcGFyZW50ID09IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2xlZnQp
IHsKICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3BhcmVudC0+X01fcGFy
ZW50LT5fTV9yaWdodDsKICAgICAgaWYgKF9feSAmJiBfX3ktPl9NX2NvbG9yID09IF9TX3JiX3Ry
ZWVfcmVkKSB7CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9i
bGFjazsKICAgICAgICBfX3ktPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICBf
X3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAg
ICAgIF9feCA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQ7CiAgICAgIH0KICAgICAgZWxzZSB7
CiAgICAgICAgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQpIHsKICAgICAgICAg
IF9feCA9IF9feC0+X01fcGFyZW50OwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194
LCBfX3Jvb3QpOwogICAgICAgIH0KICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPSBf
U19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2Nv
bG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feC0+
X01fcGFyZW50LT5fTV9wYXJlbnQsIF9fcm9vdCk7CiAgICAgIH0KICAgIH0KICAgIGVsc2Ugewog
ICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQt
Pl9NX2xlZnQ7CiAgICAgIGlmIChfX3kgJiYgX195LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3Jl
ZCkgewogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7
CiAgICAgICAgX195LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX194LT5f
TV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICBf
X3ggPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50OwogICAgICB9CiAgICAgIGVsc2UgewogICAg
ICAgIGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9NX2xlZnQpIHsKICAgICAgICAgIF9feCA9
IF9feC0+X01fcGFyZW50OwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feCwgX19y
b290KTsKICAgICAgICB9CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJf
dHJlZV9ibGFjazsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9
IF9TX3JiX3RyZWVfcmVkOwogICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feC0+X01fcGFy
ZW50LT5fTV9wYXJlbnQsIF9fcm9vdCk7CiAgICAgIH0KICAgIH0KICB9CiAgX19yb290LT5fTV9j
b2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7Cn0KCmlubGluZSBfUmJfdHJlZV9ub2RlX2Jhc2UqCl9S
Yl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3osCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9fbGVmdG1vc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yaWdo
dG1vc3QpCnsKICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9fejsKICBfUmJfdHJlZV9ub2Rl
X2Jhc2UqIF9feCA9IDA7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3hfcGFyZW50ID0gMDsKICBp
ZiAoX195LT5fTV9sZWZ0ID09IDApCiAgICBfX3ggPSBfX3ktPl9NX3JpZ2h0OwogIGVsc2UKICAg
IGlmIChfX3ktPl9NX3JpZ2h0ID09IDApCiAgICAgIF9feCA9IF9feS0+X01fbGVmdDsKICAgIGVs
c2UgewogICAgICBfX3kgPSBfX3ktPl9NX3JpZ2h0OwogICAgICB3aGlsZSAoX195LT5fTV9sZWZ0
ICE9IDApCiAgICAgICAgX195ID0gX195LT5fTV9sZWZ0OwogICAgICBfX3ggPSBfX3ktPl9NX3Jp
Z2h0OwogICAgfQogIGlmIChfX3kgIT0gX196KSB7CiAgICBfX3otPl9NX2xlZnQtPl9NX3BhcmVu
dCA9IF9feTsKICAgIF9feS0+X01fbGVmdCA9IF9fei0+X01fbGVmdDsKICAgIGlmIChfX3kgIT0g
X196LT5fTV9yaWdodCkgewogICAgICBfX3hfcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICAg
IGlmIChfX3gpIF9feC0+X01fcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgIF9feS0+X01f
cGFyZW50LT5fTV9sZWZ0ID0gX194OwogICAgICBfX3ktPl9NX3JpZ2h0ID0gX196LT5fTV9yaWdo
dDsKICAgICAgX196LT5fTV9yaWdodC0+X01fcGFyZW50ID0gX195OwogICAgfQogICAgZWxzZQog
ICAgICBfX3hfcGFyZW50ID0gX195OwogICAgaWYgKF9fcm9vdCA9PSBfX3opCiAgICAgIF9fcm9v
dCA9IF9feTsKICAgIGVsc2UgaWYgKF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID09IF9feikKICAg
ICAgX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAgICBlbHNlCiAgICAgIF9fei0+X01f
cGFyZW50LT5fTV9yaWdodCA9IF9feTsKICAgIF9feS0+X01fcGFyZW50ID0gX196LT5fTV9wYXJl
bnQ7CiAgICAgICAgIDo6c3dhcChfX3ktPl9NX2NvbG9yLCBfX3otPl9NX2NvbG9yKTsKICAgIF9f
eSA9IF9fejsKCiAgfQogIGVsc2UgewogICAgX194X3BhcmVudCA9IF9feS0+X01fcGFyZW50Owog
ICAgaWYgKF9feCkgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsKICAgIGlmIChfX3Jv
b3QgPT0gX196KQogICAgICBfX3Jvb3QgPSBfX3g7CiAgICBlbHNlCiAgICAgIGlmIChfX3otPl9N
X3BhcmVudC0+X01fbGVmdCA9PSBfX3opCiAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX2xlZnQg
PSBfX3g7CiAgICAgIGVsc2UKICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3g7
CiAgICBpZiAoX19sZWZ0bW9zdCA9PSBfX3opCiAgICAgIGlmIChfX3otPl9NX3JpZ2h0ID09IDAp
CiAgICAgICAgX19sZWZ0bW9zdCA9IF9fei0+X01fcGFyZW50OwoKICAgICAgZWxzZQogICAgICAg
IF9fbGVmdG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX194KTsKICAgIGlm
IChfX3JpZ2h0bW9zdCA9PSBfX3opCiAgICAgIGlmIChfX3otPl9NX2xlZnQgPT0gMCkKICAgICAg
ICBfX3JpZ2h0bW9zdCA9IF9fei0+X01fcGFyZW50OwoKICAgICAgZWxzZQogICAgICAgIF9fcmln
aHRtb3N0ID0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9feCk7CiAgfQogIGlmIChf
X3ktPl9NX2NvbG9yICE9IF9TX3JiX3RyZWVfcmVkKSB7CiAgICB3aGlsZSAoX194ICE9IF9fcm9v
dCAmJiAoX194ID09IDAgfHwgX194LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrKSkKICAg
ICAgaWYgKF9feCA9PSBfX3hfcGFyZW50LT5fTV9sZWZ0KSB7CiAgICAgICAgX1JiX3RyZWVfbm9k
ZV9iYXNlKiBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICBpZiAoX193LT5fTV9j
b2xvciA9PSBfU19yYl90cmVlX3JlZCkgewogICAgICAgICAgX193LT5fTV9jb2xvciA9IF9TX3Ji
X3RyZWVfYmxhY2s7CiAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVf
cmVkOwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194X3BhcmVudCwgX19yb290KTsK
ICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAgIH0KICAgICAgICBp
ZiAoKF9fdy0+X01fbGVmdCA9PSAwIHx8CiAgICAgICAgICAgICBfX3ctPl9NX2xlZnQtPl9NX2Nv
bG9yID09IF9TX3JiX3RyZWVfYmxhY2spICYmCiAgICAgICAgICAgIChfX3ctPl9NX3JpZ2h0ID09
IDAgfHwKICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVf
YmxhY2spKSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAg
ICAgICBfX3ggPSBfX3hfcGFyZW50OwogICAgICAgICAgX194X3BhcmVudCA9IF9feF9wYXJlbnQt
Pl9NX3BhcmVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKF9fdy0+X01fcmlnaHQg
PT0gMCB8fAogICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9TX3JiX3Ry
ZWVfYmxhY2spIHsKICAgICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCkgX193LT5fTV9sZWZ0LT5f
TV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBf
U19yYl90cmVlX3JlZDsKICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9fdywgX19y
b290KTsKICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgICB9
CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX194X3BhcmVudC0+X01fY29sb3I7CiAgICAgICAg
ICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBpZiAo
X193LT5fTV9yaWdodCkgX193LT5fTV9yaWdodC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNr
OwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194X3BhcmVudCwgX19yb290KTsKICAg
ICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBfUmJfdHJlZV9u
b2RlX2Jhc2UqIF9fdyA9IF9feF9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgaWYgKF9fdy0+X01f
Y29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19y
Yl90cmVlX2JsYWNrOwogICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVl
X3JlZDsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3hfcGFyZW50LCBfX3Jvb3Qp
OwogICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICB9CiAgICAgICAg
aWYgKChfX3ctPl9NX3JpZ2h0ID09IDAgfHwKICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9N
X2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spICYmCiAgICAgICAgICAgIChfX3ctPl9NX2xlZnQg
PT0gMCB8fAogICAgICAgICAgICAgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9PSBfU19yYl90cmVl
X2JsYWNrKSkgewogICAgICAgICAgX193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAg
ICAgICAgX194ID0gX194X3BhcmVudDsKICAgICAgICAgIF9feF9wYXJlbnQgPSBfX3hfcGFyZW50
LT5fTV9wYXJlbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChfX3ctPl9NX2xlZnQg
PT0gMCB8fAogICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPT0gX1NfcmJfdHJl
ZV9ibGFjaykgewogICAgICAgICAgICBpZiAoX193LT5fTV9yaWdodCkgX193LT5fTV9yaWdodC0+
X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0g
X1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9fdywgX19y
b290KTsKICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICAgIH0K
ICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfX3hfcGFyZW50LT5fTV9jb2xvcjsKICAgICAgICAg
IF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICAgIGlmIChf
X3ctPl9NX2xlZnQpIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwog
ICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAg
ICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIGlmIChfX3gpIF9feC0+X01fY29sb3Ig
PSBfU19yYl90cmVlX2JsYWNrOwogIH0KICByZXR1cm4gX195Owp9CiMgNDk4ICIvdXNyL2luY2x1
ZGUvZysrLTMvc3RsX3RyZWUuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+
CnN0cnVjdCBfUmJfdHJlZV9iYXNlCnsKICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsK
ICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9y
X3R5cGUoKTsgfQoKICBfUmJfdHJlZV9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDog
X01faGVhZGVyKDApIHsgX01faGVhZGVyID0gX01fZ2V0X25vZGUoKTsgfQogIH5fUmJfdHJlZV9i
YXNlKCkgeyBfTV9wdXRfbm9kZShfTV9oZWFkZXIpOyB9Cgpwcm90ZWN0ZWQ6CiAgX1JiX3RyZWVf
bm9kZTxfVHA+KiBfTV9oZWFkZXI7CgogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9SYl90cmVlX25v
ZGU8X1RwPiwgX0FsbG9jPiBfQWxsb2NfdHlwZTsKCiAgX1JiX3RyZWVfbm9kZTxfVHA+KiBfTV9n
ZXRfbm9kZSgpCiAgICB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoMSk7IH0KICB2b2lk
IF9NX3B1dF9ub2RlKF9SYl90cmVlX25vZGU8X1RwPiogX19wKQogICAgeyBfQWxsb2NfdHlwZTo6
ZGVhbGxvY2F0ZShfX3AsIDEpOyB9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf
VmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNz
IF9BbGxvYyA9IGFsbG9jID4KY2xhc3MgX1JiX3RyZWUgOiBwcm90ZWN0ZWQgX1JiX3RyZWVfYmFz
ZTxfVmFsdWUsIF9BbGxvYz4gewogIHR5cGVkZWYgX1JiX3RyZWVfYmFzZTxfVmFsdWUsIF9BbGxv
Yz4gX0Jhc2U7CnByb3RlY3RlZDoKICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZSogX0Jhc2Vf
cHRyOwogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZTxfVmFsdWU+IF9SYl90cmVlX25vZGU7CiAgdHlw
ZWRlZiBfUmJfdHJlZV9Db2xvcl90eXBlIF9Db2xvcl90eXBlOwpwdWJsaWM6CiAgdHlwZWRlZiBf
S2V5IGtleV90eXBlOwogIHR5cGVkZWYgX1ZhbHVlIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1
ZV90eXBlKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRl
cjsKICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IHZhbHVl
X3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9SYl90cmVlX25vZGUqIF9MaW5rX3R5
cGU7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZl
cmVuY2VfdHlwZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxs
b2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0
dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KCnByb3RlY3RlZDoKCgoKCgoKcHJvdGVjdGVk
OgoKICBfTGlua190eXBlIF9NX2NyZWF0ZV9ub2RlKGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICB7
CiAgICBfTGlua190eXBlIF9fdG1wID0gX01fZ2V0X25vZGUoKTsKICAgICAgICAgICAgICB7CiAg
ICAgIGNvbnN0cnVjdCgmX190bXAtPl9NX3ZhbHVlX2ZpZWxkLCBfX3gpOwogICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBf
TGlua190eXBlIF9NX2Nsb25lX25vZGUoX0xpbmtfdHlwZSBfX3gpCiAgewogICAgX0xpbmtfdHlw
ZSBfX3RtcCA9IF9NX2NyZWF0ZV9ub2RlKF9feC0+X01fdmFsdWVfZmllbGQpOwogICAgX190bXAt
Pl9NX2NvbG9yID0gX194LT5fTV9jb2xvcjsKICAgIF9fdG1wLT5fTV9sZWZ0ID0gMDsKICAgIF9f
dG1wLT5fTV9yaWdodCA9IDA7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICB2b2lkIGRlc3Ryb3lf
bm9kZShfTGlua190eXBlIF9fcCkKICB7CiAgICBkZXN0cm95KCZfX3AtPl9NX3ZhbHVlX2ZpZWxk
KTsKICAgIF9NX3B1dF9ub2RlKF9fcCk7CiAgfQoKcHJvdGVjdGVkOgogIHNpemVfdHlwZSBfTV9u
b2RlX2NvdW50OwogIF9Db21wYXJlIF9NX2tleV9jb21wYXJlOwoKICBfTGlua190eXBlJiBfTV9y
b290KCkgY29uc3QKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikgX01faGVhZGVyLT5fTV9wYXJl
bnQ7IH0KICBfTGlua190eXBlJiBfTV9sZWZ0bW9zdCgpIGNvbnN0CiAgICB7IHJldHVybiAoX0xp
bmtfdHlwZSYpIF9NX2hlYWRlci0+X01fbGVmdDsgfQogIF9MaW5rX3R5cGUmIF9NX3JpZ2h0bW9z
dCgpIGNvbnN0CiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01fcmlnaHQ7
IH0KCiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX2xlZnQoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJl
dHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fbGVmdCk7IH0KICBzdGF0aWMgX0xpbmtfdHlwZSYg
X1NfcmlnaHQoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+
X01fcmlnaHQpOyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3BhcmVudChfTGlua190eXBlIF9f
eCkKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9wYXJlbnQpOyB9CiAgc3RhdGlj
IHJlZmVyZW5jZSBfU192YWx1ZShfTGlua190eXBlIF9feCkKICAgIHsgcmV0dXJuIF9feC0+X01f
dmFsdWVfZmllbGQ7IH0KICBzdGF0aWMgY29uc3QgX0tleSYgX1Nfa2V5KF9MaW5rX3R5cGUgX194
KQogICAgeyByZXR1cm4gX0tleU9mVmFsdWUoKShfU192YWx1ZShfX3gpKTsgfQogIHN0YXRpYyBf
Q29sb3JfdHlwZSYgX1NfY29sb3IoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0NvbG9y
X3R5cGUmKShfX3gtPl9NX2NvbG9yKTsgfQoKICBzdGF0aWMgX0xpbmtfdHlwZSYgX1NfbGVmdChf
QmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX2xlZnQpOyB9
CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3JpZ2h0KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVy
biAoX0xpbmtfdHlwZSYpKF9feC0+X01fcmlnaHQpOyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9T
X3BhcmVudChfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9N
X3BhcmVudCk7IH0KICBzdGF0aWMgcmVmZXJlbmNlIF9TX3ZhbHVlKF9CYXNlX3B0ciBfX3gpCiAg
ICB7IHJldHVybiAoKF9MaW5rX3R5cGUpX194KS0+X01fdmFsdWVfZmllbGQ7IH0KICBzdGF0aWMg
Y29uc3QgX0tleSYgX1Nfa2V5KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiBfS2V5T2ZWYWx1
ZSgpKF9TX3ZhbHVlKF9MaW5rX3R5cGUoX194KSkpO30KICBzdGF0aWMgX0NvbG9yX3R5cGUmIF9T
X2NvbG9yKF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiAoX0NvbG9yX3R5cGUmKShfTGlua190
eXBlKF9feCktPl9NX2NvbG9yKTsgfQoKICBzdGF0aWMgX0xpbmtfdHlwZSBfU19taW5pbXVtKF9M
aW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUpIF9SYl90cmVlX25vZGVfYmFz
ZTo6X1NfbWluaW11bShfX3gpOyB9CgogIHN0YXRpYyBfTGlua190eXBlIF9TX21heGltdW0oX0xp
bmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSkgX1JiX3RyZWVfbm9kZV9iYXNl
OjpfU19tYXhpbXVtKF9feCk7IH0KCnB1YmxpYzoKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9y
PHZhbHVlX3R5cGUsIHJlZmVyZW5jZSwgcG9pbnRlcj4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfUmJf
dHJlZV9pdGVyYXRvcjx2YWx1ZV90eXBlLCBjb25zdF9yZWZlcmVuY2UsIGNvbnN0X3BvaW50ZXI+
CiAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKCgoKCgogIHR5cGVkZWYgcmV2ZXJzZV9iaWRpcmVj
dGlvbmFsX2l0ZXJhdG9yPGl0ZXJhdG9yLCB2YWx1ZV90eXBlLCByZWZlcmVuY2UsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlPgogICAgICAg
ICAgcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVy
YXRvcjxjb25zdF9pdGVyYXRvciwgdmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdF9yZWZlcmVuY2UsIGRpZmZlcmVuY2VfdHlwZT4KICAgICAg
ICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CgoKcHJpdmF0ZToKICBpdGVyYXRvciBfTV9pbnNl
cnQoX0Jhc2VfcHRyIF9feCwgX0Jhc2VfcHRyIF9feSwgY29uc3QgdmFsdWVfdHlwZSYgX192KTsK
ICBfTGlua190eXBlIF9NX2NvcHkoX0xpbmtfdHlwZSBfX3gsIF9MaW5rX3R5cGUgX19wKTsKICB2
b2lkIF9NX2VyYXNlKF9MaW5rX3R5cGUgX194KTsKCnB1YmxpYzoKCiAgX1JiX3RyZWUoKQogICAg
OiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKSwgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBh
cmUoKQogICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KCiAgX1JiX3RyZWUoY29uc3QgX0Nv
bXBhcmUmIF9fY29tcCkKICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSksIF9NX25vZGVfY291
bnQoMCksIF9NX2tleV9jb21wYXJlKF9fY29tcCkKICAgIHsgX01fZW1wdHlfaW5pdGlhbGl6ZSgp
OyB9CgogIF9SYl90cmVlKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsIGNvbnN0IGFsbG9jYXRvcl90
eXBlJiBfX2EpCiAgICA6IF9CYXNlKF9fYSksIF9NX25vZGVfY291bnQoMCksIF9NX2tleV9jb21w
YXJlKF9fY29tcCkKICAgIHsgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOyB9CgogIF9SYl90cmVlKGNv
bnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9f
eCkKICAgIDogX0Jhc2UoX194LmdldF9hbGxvY2F0b3IoKSksCiAgICAgIF9NX25vZGVfY291bnQo
MCksIF9NX2tleV9jb21wYXJlKF9feC5fTV9rZXlfY29tcGFyZSkKICB7CiAgICBpZiAoX194Ll9N
X3Jvb3QoKSA9PSAwKQogICAgICBfTV9lbXB0eV9pbml0aWFsaXplKCk7CiAgICBlbHNlIHsKICAg
ICAgX1NfY29sb3IoX01faGVhZGVyKSA9IF9TX3JiX3RyZWVfcmVkOwogICAgICBfTV9yb290KCkg
PSBfTV9jb3B5KF9feC5fTV9yb290KCksIF9NX2hlYWRlcik7CiAgICAgIF9NX2xlZnRtb3N0KCkg
PSBfU19taW5pbXVtKF9NX3Jvb3QoKSk7CiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX1NfbWF4aW11
bShfTV9yb290KCkpOwogICAgfQogICAgX01fbm9kZV9jb3VudCA9IF9feC5fTV9ub2RlX2NvdW50
OwogIH0KICB+X1JiX3RyZWUoKSB7IGNsZWFyKCk7IH0KICBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JgogIG9wZXJhdG9yPShjb25zdCBfUmJfdHJlZTxf
S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpOwoKcHJpdmF0ZToK
ICB2b2lkIF9NX2VtcHR5X2luaXRpYWxpemUoKSB7CiAgICBfU19jb2xvcihfTV9oZWFkZXIpID0g
X1NfcmJfdHJlZV9yZWQ7CgogICAgX01fcm9vdCgpID0gMDsKICAgIF9NX2xlZnRtb3N0KCkgPSBf
TV9oZWFkZXI7CiAgICBfTV9yaWdodG1vc3QoKSA9IF9NX2hlYWRlcjsKICB9CgpwdWJsaWM6Cgog
IF9Db21wYXJlIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fa2V5X2NvbXBhcmU7IH0KICBp
dGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIF9NX2xlZnRtb3N0KCk7IH0KICBjb25zdF9pdGVyYXRv
ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX2xlZnRtb3N0KCk7IH0KICBpdGVyYXRvciBlbmQo
KSB7IHJldHVybiBfTV9oZWFkZXI7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBfTV9oZWFkZXI7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIHJl
dmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4o
KSBjb25zdCB7CiAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7CiAgfQog
IHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4o
KSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7CiAgICByZXR1cm4g
Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsKICB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0
IHsgcmV0dXJuIF9NX25vZGVfY291bnQgPT0gMDsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3Qg
eyByZXR1cm4gX01fbm9kZV9jb3VudDsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KCiAgdm9pZCBzd2FwKF9SYl90cmVlPF9LZXksX1ZhbHVl
LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9fdCkgewogICAgICAgICA6OnN3YXAoX01f
aGVhZGVyLCBfX3QuX01faGVhZGVyKTsKICAgICAgICAgOjpzd2FwKF9NX25vZGVfY291bnQsIF9f
dC5fTV9ub2RlX2NvdW50KTsKICAgICAgICAgOjpzd2FwKF9NX2tleV9jb21wYXJlLCBfX3QuX01f
a2V5X2NvbXBhcmUpOwogIH0KCnB1YmxpYzoKCiAgcGFpcjxpdGVyYXRvcixib29sPiBpbnNlcnRf
dW5pcXVlKGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CiAgaXRlcmF0b3IgaW5zZXJ0X2VxdWFsKGNv
bnN0IHZhbHVlX3R5cGUmIF9feCk7CgogIGl0ZXJhdG9yIGluc2VydF91bmlxdWUoaXRlcmF0b3Ig
X19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKICBpdGVyYXRvciBpbnNlcnRfZXF1
YWwoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKCgoKCgoKCiAg
dm9pZCBpbnNlcnRfdW5pcXVlKGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QsIGNvbnN0X2l0ZXJhdG9y
IF9fbGFzdCk7CiAgdm9pZCBpbnNlcnRfdW5pcXVlKGNvbnN0IHZhbHVlX3R5cGUqIF9fZmlyc3Qs
IGNvbnN0IHZhbHVlX3R5cGUqIF9fbGFzdCk7CiAgdm9pZCBpbnNlcnRfZXF1YWwoY29uc3RfaXRl
cmF0b3IgX19maXJzdCwgY29uc3RfaXRlcmF0b3IgX19sYXN0KTsKICB2b2lkIGluc2VydF9lcXVh
bChjb25zdCB2YWx1ZV90eXBlKiBfX2ZpcnN0LCBjb25zdCB2YWx1ZV90eXBlKiBfX2xhc3QpOwoK
CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKTsKICBzaXplX3R5cGUgZXJhc2UoY29u
c3Qga2V5X3R5cGUmIF9feCk7CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRv
ciBfX2xhc3QpOwogIHZvaWQgZXJhc2UoY29uc3Qga2V5X3R5cGUqIF9fZmlyc3QsIGNvbnN0IGtl
eV90eXBlKiBfX2xhc3QpOwogIHZvaWQgY2xlYXIoKSB7CiAgICBpZiAoX01fbm9kZV9jb3VudCAh
PSAwKSB7CiAgICAgIF9NX2VyYXNlKF9NX3Jvb3QoKSk7CiAgICAgIF9NX2xlZnRtb3N0KCkgPSBf
TV9oZWFkZXI7CiAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01f
aGVhZGVyOwogICAgICBfTV9ub2RlX2NvdW50ID0gMDsKICAgIH0KICB9CgpwdWJsaWM6CgogIGl0
ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgY29uc3RfaXRlcmF0b3IgZmluZChj
b25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5
cGUmIF9feCkgY29uc3Q7CiAgaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9f
eCk7CiAgY29uc3RfaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29u
c3Q7CiAgaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgY29uc3Rf
aXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAgcGFpcjxp
dGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgcGFp
cjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90
eXBlJiBfX3gpIGNvbnN0OwoKcHVibGljOgoKICBib29sIF9fcmJfdmVyaWZ5KCkgY29uc3Q7Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwK
ICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJh
dG9yPT0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs
bG9jPiYgX194LAogICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZh
bHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKewogIHJldHVybiBfX3guc2l6ZSgpID09IF9feS5z
aXplKCkgJiYKICAgICAgICAgZXF1YWwoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX195LmJlZ2lu
KCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZW
YWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s
Cm9wZXJhdG9yPChjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5
T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2Fs
X2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7Cn0KIyA3OTMgIi91c3IvaW5jbHVkZS9n
KystMy9zdGxfdHJlZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNs
YXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4K
X1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYKX1JiX3Ry
ZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6b3BlcmF0b3I9
KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4m
IF9feCkKewogIGlmICh0aGlzICE9ICZfX3gpIHsKCiAgICBjbGVhcigpOwogICAgX01fbm9kZV9j
b3VudCA9IDA7CiAgICBfTV9rZXlfY29tcGFyZSA9IF9feC5fTV9rZXlfY29tcGFyZTsKICAgIGlm
IChfX3guX01fcm9vdCgpID09IDApIHsKICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgX01fbGVm
dG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAg
ICB9CiAgICBlbHNlIHsKICAgICAgX01fcm9vdCgpID0gX01fY29weShfX3guX01fcm9vdCgpLCBf
TV9oZWFkZXIpOwogICAgICBfTV9sZWZ0bW9zdCgpID0gX1NfbWluaW11bShfTV9yb290KCkpOwog
ICAgICBfTV9yaWdodG1vc3QoKSA9IF9TX21heGltdW0oX01fcm9vdCgpKTsKICAgICAgX01fbm9k
ZV9jb3VudCA9IF9feC5fTV9ub2RlX2NvdW50OwogICAgfQogIH0KICByZXR1cm4gKnRoaXM7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAog
ICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8
X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3Ry
ZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6X01faW5zZXJ0
KF9CYXNlX3B0ciBfX3hfLCBfQmFzZV9wdHIgX195XywgY29uc3QgX1ZhbHVlJiBfX3YpCnsKICBf
TGlua190eXBlIF9feCA9IChfTGlua190eXBlKSBfX3hfOwogIF9MaW5rX3R5cGUgX195ID0gKF9M
aW5rX3R5cGUpIF9feV87CiAgX0xpbmtfdHlwZSBfX3o7CgogIGlmIChfX3kgPT0gX01faGVhZGVy
IHx8IF9feCAhPSAwIHx8CiAgICAgIF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwg
X1Nfa2V5KF9feSkpKSB7CiAgICBfX3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwogICAgX1NfbGVm
dChfX3kpID0gX196OwoKICAgIGlmIChfX3kgPT0gX01faGVhZGVyKSB7CiAgICAgIF9NX3Jvb3Qo
KSA9IF9fejsKICAgICAgX01fcmlnaHRtb3N0KCkgPSBfX3o7CiAgICB9CiAgICBlbHNlIGlmIChf
X3kgPT0gX01fbGVmdG1vc3QoKSkKICAgICAgX01fbGVmdG1vc3QoKSA9IF9fejsKICB9CiAgZWxz
ZSB7CiAgICBfX3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwogICAgX1NfcmlnaHQoX195KSA9IF9f
ejsKICAgIGlmIChfX3kgPT0gX01fcmlnaHRtb3N0KCkpCiAgICAgIF9NX3JpZ2h0bW9zdCgpID0g
X196OwogIH0KICBfU19wYXJlbnQoX196KSA9IF9feTsKICBfU19sZWZ0KF9feikgPSAwOwogIF9T
X3JpZ2h0KF9feikgPSAwOwogIF9SYl90cmVlX3JlYmFsYW5jZShfX3osIF9NX2hlYWRlci0+X01f
cGFyZW50KTsKICArK19NX25vZGVfY291bnQ7CiAgcmV0dXJuIGl0ZXJhdG9yKF9feik7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAg
ICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tl
eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8
X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6aW5zZXJ0X2VxdWFs
KGNvbnN0IF9WYWx1ZSYgX192KQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xp
bmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CiAgd2hpbGUgKF9feCAhPSAwKSB7CiAgICBfX3kgPSBf
X3g7CiAgICBfX3ggPSBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShf
X3gpKSA/CiAgICAgICAgICAgIF9TX2xlZnQoX194KSA6IF9TX3JpZ2h0KF9feCk7CiAgfQogIHJl
dHVybiBfTV9pbnNlcnQoX194LCBfX3ksIF9fdik7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwg
Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJl
LCBjbGFzcyBfQWxsb2M+CnBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9m
VmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IsCiAgICAgYm9vbD4KX1JiX3RyZWU8X0tl
eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6aW5zZXJ0X3VuaXF1ZShj
b25zdCBfVmFsdWUmIF9fdikKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogIF9MaW5r
X3R5cGUgX194ID0gX01fcm9vdCgpOwogIGJvb2wgX19jb21wID0gdHJ1ZTsKICB3aGlsZSAoX194
ICE9IDApIHsKICAgIF9feSA9IF9feDsKICAgIF9fY29tcCA9IF9NX2tleV9jb21wYXJlKF9LZXlP
ZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feCkpOwogICAgX194ID0gX19jb21wID8gX1NfbGVmdChf
X3gpIDogX1NfcmlnaHQoX194KTsKICB9CiAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsK
ICBpZiAoX19jb21wKQogICAgaWYgKF9faiA9PSBiZWdpbigpKQogICAgICByZXR1cm4gcGFpcjxp
dGVyYXRvcixib29sPihfTV9pbnNlcnQoX194LCBfX3ksIF9fdiksIHRydWUpOwogICAgZWxzZQog
ICAgICAtLV9fajsKICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fai5fTV9ub2RlKSwgX0tl
eU9mVmFsdWUoKShfX3YpKSkKICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLGJvb2w+KF9NX2luc2Vy
dChfX3gsIF9feSwgX192KSwgdHJ1ZSk7CiAgcmV0dXJuIHBhaXI8aXRlcmF0b3IsYm9vbD4oX19q
LCBmYWxzZSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbCwgY2xhc3MgX0tl
eU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFt
ZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46Oml0
ZXJhdG9yCl9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9j
PgogIDo6aW5zZXJ0X3VuaXF1ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBfX3Yp
CnsKICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlci0+X01fbGVmdCkgewogICAg
aWYgKHNpemUoKSA+IDAgJiYKICAgICAgICBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9f
diksIF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpKSkKICAgICAgcmV0dXJuIF9NX2luc2VydChf
X3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKCiAgICBlbHNlCiAg
ICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgfSBlbHNlIGlmIChfX3Bvc2l0
aW9uLl9NX25vZGUgPT0gX01faGVhZGVyKSB7CiAgICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5
KF9NX3JpZ2h0bW9zdCgpKSwgX0tleU9mVmFsdWUoKShfX3YpKSkKICAgICAgcmV0dXJuIF9NX2lu
c2VydCgwLCBfTV9yaWdodG1vc3QoKSwgX192KTsKICAgIGVsc2UKICAgICAgcmV0dXJuIGluc2Vy
dF91bmlxdWUoX192KS5maXJzdDsKICB9IGVsc2UgewogICAgaXRlcmF0b3IgX19iZWZvcmUgPSBf
X3Bvc2l0aW9uOwogICAgLS1fX2JlZm9yZTsKICAgIGlmIChfTV9rZXlfY29tcGFyZShfU19rZXko
X19iZWZvcmUuX01fbm9kZSksIF9LZXlPZlZhbHVlKCkoX192KSkKICAgICAgICAmJiBfTV9rZXlf
Y29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpKSkg
ewogICAgICBpZiAoX1NfcmlnaHQoX19iZWZvcmUuX01fbm9kZSkgPT0gMCkKICAgICAgICByZXR1
cm4gX01faW5zZXJ0KDAsIF9fYmVmb3JlLl9NX25vZGUsIF9fdik7CiAgICAgIGVsc2UKICAgICAg
ICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2Rl
LCBfX3YpOwoKICAgIH0gZWxzZQogICAgICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0
OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWwsIGNsYXNzIF9LZXlPZlZh
bHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1Ji
X3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCl9S
Yl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjppbnNlcnRf
ZXF1YWwoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1ZhbCYgX192KQp7CiAgaWYgKF9fcG9z
aXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXItPl9NX2xlZnQpIHsKICAgIGlmIChzaXplKCkgPiAw
ICYmCiAgICAgICAgX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX19w
b3NpdGlvbi5fTV9ub2RlKSkpCiAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9u
b2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgZWxzZQogICAgICByZXR1cm4gaW5z
ZXJ0X2VxdWFsKF9fdik7CiAgfSBlbHNlIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVh
ZGVyKSB7CiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5
KF9NX3JpZ2h0bW9zdCgpKSkpCiAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0
KCksIF9fdik7CiAgICBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsKICB9IGVs
c2UgewogICAgaXRlcmF0b3IgX19iZWZvcmUgPSBfX3Bvc2l0aW9uOwogICAgLS1fX2JlZm9yZTsK
ICAgIGlmICghX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX19iZWZv
cmUuX01fbm9kZSkpCiAgICAgICAgJiYgIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3Bvc2l0aW9u
Ll9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKSB7CiAgICAgIGlmIChfU19yaWdodChfX2Jl
Zm9yZS5fTV9ub2RlKSA9PSAwKQogICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX19iZWZvcmUu
X01fbm9kZSwgX192KTsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3Np
dGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgfSBlbHNlCiAgICAg
IHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsKICB9Cn0KIyA5ODYgIi91c3IvaW5jbHVkZS9nKyst
My9zdGxfdHJlZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBjbGFzcyBf
S29WLCBjbGFzcyBfQ21wLCBjbGFzcyBfQWxsb2M+CnZvaWQKX1JiX3RyZWU8X0tleSxfVmFsLF9L
b1YsX0NtcCxfQWxsb2M+CiAgOjppbnNlcnRfZXF1YWwoY29uc3QgX1ZhbCogX19maXJzdCwgY29u
c3QgX1ZhbCogX19sYXN0KQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0
KQogICAgaW5zZXJ0X2VxdWFsKCpfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNs
YXNzIF9WYWwsIGNsYXNzIF9Lb1YsIGNsYXNzIF9DbXAsIGNsYXNzIF9BbGxvYz4Kdm9pZApfUmJf
dHJlZTxfS2V5LF9WYWwsX0tvVixfQ21wLF9BbGxvYz4KICA6Omluc2VydF9lcXVhbChjb25zdF9p
dGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBfX2xhc3QpCnsKICBmb3IgKCA7IF9fZmly
c3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpbnNlcnRfZXF1YWwoKl9fZmlyc3QpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbCwgY2xhc3MgX0tvViwgY2xhc3MgX0NtcCwg
Y2xhc3MgX0FsbG9jPgp2b2lkCl9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9DbXAsX0FsbG9jPgog
IDo6aW5zZXJ0X3VuaXF1ZShjb25zdCBfVmFsKiBfX2ZpcnN0LCBjb25zdCBfVmFsKiBfX2xhc3Qp
CnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpbnNlcnRfdW5p
cXVlKCpfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWwsIGNsYXNz
IF9Lb1YsIGNsYXNzIF9DbXAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWws
X0tvVixfQ21wLF9BbGxvYz4KICA6Omluc2VydF91bmlxdWUoY29uc3RfaXRlcmF0b3IgX19maXJz
dCwgY29uc3RfaXRlcmF0b3IgX19sYXN0KQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg
KytfX2ZpcnN0KQogICAgaW5zZXJ0X3VuaXF1ZSgqX19maXJzdCk7Cn0KCgoKdGVtcGxhdGUgPGNs
YXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFz
cyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWx1
ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjplcmFzZShpdGVyYXRvciBfX3Bvc2l0
aW9uKQp7CiAgX0xpbmtfdHlwZSBfX3kgPQogICAgKF9MaW5rX3R5cGUpIF9SYl90cmVlX3JlYmFs
YW5jZV9mb3JfZXJhc2UoX19wb3NpdGlvbi5fTV9ub2RlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX01faGVhZGVyLT5fTV9wYXJlbnQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9NX2xlZnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9N
X3JpZ2h0KTsKICBkZXN0cm95X25vZGUoX195KTsKICAtLV9NX25vZGVfY291bnQ7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAg
ICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxf
VmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6c2l6ZV90eXBlCl9SYl90cmVlPF9L
ZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmVyYXNlKGNvbnN0IF9LZXkm
IF9feCkKewogIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IF9fcCA9IGVxdWFsX3JhbmdlKF9feCk7
CiAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgZGlzdGFuY2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kLCBf
X24pOwogIGVyYXNlKF9fcC5maXJzdCwgX19wLnNlY29uZCk7CiAgcmV0dXJuIF9fbjsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWwsIGNsYXNzIF9Lb1YsIGNsYXNzIF9Db21wYXJl
LCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9Db21w
YXJlLCBfQWxsb2M+OjpfTGlua190eXBlCl9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9Db21wYXJl
LF9BbGxvYz4KICA6Ol9NX2NvcHkoX0xpbmtfdHlwZSBfX3gsIF9MaW5rX3R5cGUgX19wKQp7Cgog
IF9MaW5rX3R5cGUgX190b3AgPSBfTV9jbG9uZV9ub2RlKF9feCk7CiAgX190b3AtPl9NX3BhcmVu
dCA9IF9fcDsKCiAgICAgICAgICAgIHsKICAgIGlmIChfX3gtPl9NX3JpZ2h0KQogICAgICBfX3Rv
cC0+X01fcmlnaHQgPSBfTV9jb3B5KF9TX3JpZ2h0KF9feCksIF9fdG9wKTsKICAgIF9fcCA9IF9f
dG9wOwogICAgX194ID0gX1NfbGVmdChfX3gpOwoKICAgIHdoaWxlIChfX3ggIT0gMCkgewogICAg
ICBfTGlua190eXBlIF9feSA9IF9NX2Nsb25lX25vZGUoX194KTsKICAgICAgX19wLT5fTV9sZWZ0
ID0gX195OwogICAgICBfX3ktPl9NX3BhcmVudCA9IF9fcDsKICAgICAgaWYgKF9feC0+X01fcmln
aHQpCiAgICAgICAgX195LT5fTV9yaWdodCA9IF9NX2NvcHkoX1NfcmlnaHQoX194KSwgX195KTsK
ICAgICAgX19wID0gX195OwogICAgICBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICB9CiAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX190b3A7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAg
Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpfTV9lcmFzZShfTGlua190eXBlIF9feCkK
ewoKICB3aGlsZSAoX194ICE9IDApIHsKICAgIF9NX2VyYXNlKF9TX3JpZ2h0KF9feCkpOwogICAg
X0xpbmtfdHlwZSBfX3kgPSBfU19sZWZ0KF9feCk7CiAgICBkZXN0cm95X25vZGUoX194KTsKICAg
IF9feCA9IF9feTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNs
YXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4K
dm9pZCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAg
OjplcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCnsKICBpZiAoX19maXJz
dCA9PSBiZWdpbigpICYmIF9fbGFzdCA9PSBlbmQoKSkKICAgIGNsZWFyKCk7CiAgZWxzZQogICAg
d2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSBlcmFzZShfX2ZpcnN0KyspOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNs
YXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tl
eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6ZXJhc2UoY29uc3QgX0tleSogX19maXJzdCwg
Y29uc3QgX0tleSogX19sYXN0KQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSBlcmFzZSgq
X19maXJzdCsrKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3Mg
X0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBl
bmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpp
dGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
OjpmaW5kKGNvbnN0IF9LZXkmIF9faykKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwog
IF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICB3aGlsZSAoX194ICE9IDApCiAgICBpZiAo
IV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gsIF9feCA9
IF9TX2xlZnQoX194KTsKICAgIGVsc2UKICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgaXRl
cmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsKICByZXR1cm4gKF9faiA9PSBlbmQoKSB8fCBfTV9r
ZXlfY29tcGFyZShfX2ssIF9TX2tleShfX2ouX01fbm9kZSkpKSA/CiAgICAgZW5kKCkgOiBfX2o7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVl
LAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3Ry
ZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0
b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Zmlu
ZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsK
ICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgd2hpbGUgKF9feCAhPSAwKSB7CiAgICBp
ZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gsIF9f
eCA9IF9TX2xlZnQoX194KTsKICAgIGVsc2UKICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKICB9
CiAgY29uc3RfaXRlcmF0b3IgX19qID0gY29uc3RfaXRlcmF0b3IoX195KTsKICByZXR1cm4gKF9f
aiA9PSBlbmQoKSB8fCBfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX2ouX01fbm9kZSkpKSA/
CiAgICBlbmQoKSA6IF9fajsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwg
Y2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9j
Pgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+OjpzaXplX3R5cGUKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPgogIDo6Y291bnQoY29uc3QgX0tleSYgX19rKSBjb25zdAp7CiAgcGFpcjxjb25zdF9p
dGVyYXRvciwgY29uc3RfaXRlcmF0b3I+IF9fcCA9IGVxdWFsX3JhbmdlKF9fayk7CiAgc2l6ZV90
eXBlIF9fbiA9IDA7CiAgZGlzdGFuY2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kLCBfX24pOwogIHJl
dHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9L
ZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5h
bWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRl
cmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgog
IDo6bG93ZXJfYm91bmQoY29uc3QgX0tleSYgX19rKQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9o
ZWFkZXI7CiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogIHdoaWxlIChfX3ggIT0gMCkK
ICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgIF9feSA9IF9f
eCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgZWxzZQogICAgICBfX3ggPSBfU19yaWdodChfX3gp
OwoKICByZXR1cm4gaXRlcmF0b3IoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNz
IF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xh
c3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29t
cGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpsb3dlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNv
bnN0CnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9N
X3Jvb3QoKTsKCiAgd2hpbGUgKF9feCAhPSAwKQogICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19r
ZXkoX194KSwgX19rKSkKICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBl
bHNlCiAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogIHJldHVybiBjb25zdF9pdGVyYXRvcihf
X3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZW
YWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9S
Yl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9y
Cl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OnVw
cGVyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVy
OwogIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgd2hpbGUgKF9feCAhPSAwKQogICAg
IGlmIChfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX3gpKSkKICAgICAgIF9feSA9IF9feCwg
X194ID0gX1NfbGVmdChfX3gpOwogICAgIGVsc2UKICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7
CgogICByZXR1cm4gaXRlcmF0b3IoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNz
IF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xh
c3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29t
cGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjp1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNv
bnN0CnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9N
X3Jvb3QoKTsKCiAgIHdoaWxlIChfX3ggIT0gMCkKICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX19r
LCBfU19rZXkoX194KSkpCiAgICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAg
ICBlbHNlCiAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICAgcmV0dXJuIGNvbnN0X2l0ZXJh
dG9yKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9L
ZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5l
CnBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPjo6aXRlcmF0b3IsCiAgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tl
eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3I+Cl9SYl90cmVlPF9LZXksX1ZhbHVl
LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OmVxdWFsX3JhbmdlKGNvbnN0IF9LZXkm
IF9faykKewogIHJldHVybiBwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4obG93ZXJfYm91bmQoX19r
KSwgdXBwZXJfYm91bmQoX19rKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFs
dWUsIGNsYXNzIF9Lb1YsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZQpwYWly
PHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWx1ZSwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46
OmNvbnN0X2l0ZXJhdG9yLAogICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWx1ZSwgX0tv
ViwgX0NvbXBhcmUsIF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yPgpfUmJfdHJlZTxfS2V5LCBfVmFs
dWUsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+CiAgOjplcXVhbF9yYW5nZShjb25zdCBfS2V5JiBf
X2spIGNvbnN0CnsKICByZXR1cm4gcGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4o
bG93ZXJfYm91bmQoX19rKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXBwZXJfYm91bmQoX19rKSk7Cn0KCmlubGluZSBpbnQKX19ibGFja19jb3VudChfUmJf
dHJlZV9ub2RlX2Jhc2UqIF9fbm9kZSwgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3Jvb3QpCnsKICBp
ZiAoX19ub2RlID09IDApCiAgICByZXR1cm4gMDsKICBlbHNlIHsKICAgIGludCBfX2JjID0gX19u
b2RlLT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrID8gMSA6IDA7CiAgICBpZiAoX19ub2Rl
ID09IF9fcm9vdCkKICAgICAgcmV0dXJuIF9fYmM7CiAgICBlbHNlCiAgICAgIHJldHVybiBfX2Jj
ICsgX19ibGFja19jb3VudChfX25vZGUtPl9NX3BhcmVudCwgX19yb290KTsKICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAg
ICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KYm9vbCBfUmJfdHJlZTxfS2V5LF9WYWx1
ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpfX3JiX3ZlcmlmeSgpIGNvbnN0CnsKICBp
ZiAoX01fbm9kZV9jb3VudCA9PSAwIHx8IGJlZ2luKCkgPT0gZW5kKCkpCiAgICByZXR1cm4gX01f
bm9kZV9jb3VudCA9PSAwICYmIGJlZ2luKCkgPT0gZW5kKCkgJiYKICAgICAgX01faGVhZGVyLT5f
TV9sZWZ0ID09IF9NX2hlYWRlciAmJiBfTV9oZWFkZXItPl9NX3JpZ2h0ID09IF9NX2hlYWRlcjsK
CiAgaW50IF9fbGVuID0gX19ibGFja19jb3VudChfTV9sZWZ0bW9zdCgpLCBfTV9yb290KCkpOwog
IGZvciAoY29uc3RfaXRlcmF0b3IgX19pdCA9IGJlZ2luKCk7IF9faXQgIT0gZW5kKCk7ICsrX19p
dCkgewogICAgX0xpbmtfdHlwZSBfX3ggPSAoX0xpbmtfdHlwZSkgX19pdC5fTV9ub2RlOwogICAg
X0xpbmtfdHlwZSBfX0wgPSBfU19sZWZ0KF9feCk7CiAgICBfTGlua190eXBlIF9fUiA9IF9TX3Jp
Z2h0KF9feCk7CgogICAgaWYgKF9feC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpCiAgICAg
IGlmICgoX19MICYmIF9fTC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHx8CiAgICAgICAg
ICAoX19SICYmIF9fUi0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpKQogICAgICAgIHJldHVy
biBmYWxzZTsKCiAgICBpZiAoX19MICYmIF9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfU19r
ZXkoX19MKSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChfX1IgJiYgX01fa2V5X2NvbXBh
cmUoX1Nfa2V5KF9fUiksIF9TX2tleShfX3gpKSkKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIGlm
ICghX19MICYmICFfX1IgJiYgX19ibGFja19jb3VudChfX3gsIF9NX3Jvb3QoKSkgIT0gX19sZW4p
CiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIGlmIChfTV9sZWZ0bW9zdCgpICE9IF9SYl90cmVl
X25vZGVfYmFzZTo6X1NfbWluaW11bShfTV9yb290KCkpKQogICAgcmV0dXJuIGZhbHNlOwogIGlm
IChfTV9yaWdodG1vc3QoKSAhPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX01fcm9v
dCgpKSkKICAgIHJldHVybiBmYWxzZTsKCiAgcmV0dXJuIHRydWU7Cn0KCgoKCnRlbXBsYXRlIDxj
bGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCBjbGFzcyBfQ29tcGFy
ZSwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jID4Kc3RydWN0IHJiX3RyZWUgOiBwdWJs
aWMgX1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4K
ewogIHR5cGVkZWYgX1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUs
IF9BbGxvYz4gX0Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUg
YWxsb2NhdG9yX3R5cGU7CgogIHJiX3RyZWUoY29uc3QgX0NvbXBhcmUmIF9fY29tcCA9IF9Db21w
YXJlKCksCiAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5
cGUoKSkKICAgIDogX0Jhc2UoX19jb21wLCBfX2EpIHt9CgogIH5yYl90cmVlKCkge30KfTsKIyAz
MiAiL3Vzci9pbmNsdWRlL2crKy0zL21hcCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKystMy9z
dGxfbWFwLmgiIDEgMwojIDQyICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX21hcC5oIiAzCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlID0gbGVzczxfS2V5PiwK
ICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jID4KCgoKCmNsYXNzIG1hcCB7CnB1YmxpYzoK
CgoKICB0eXBlZGVmIF9LZXkga2V5X3R5cGU7CiAgdHlwZWRlZiBfVHAgZGF0YV90eXBlOwogIHR5
cGVkZWYgX1RwIG1hcHBlZF90eXBlOwogIHR5cGVkZWYgcGFpcjxjb25zdCBfS2V5LCBfVHA+IHZh
bHVlX3R5cGU7CiAgdHlwZWRlZiBfQ29tcGFyZSBrZXlfY29tcGFyZTsKCiAgY2xhc3MgdmFsdWVf
Y29tcGFyZQogICAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPHZhbHVlX3R5cGUsIHZhbHVlX3R5
cGUsIGJvb2w+IHsKICBmcmllbmQgY2xhc3MgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz47
CiAgcHJvdGVjdGVkIDoKICAgIF9Db21wYXJlIF9NX2NvbXA7CiAgICB2YWx1ZV9jb21wYXJlKF9D
b21wYXJlIF9fYykgOiBfTV9jb21wKF9fYykge30KICBwdWJsaWM6CiAgICBib29sIG9wZXJhdG9y
KCkoY29uc3QgdmFsdWVfdHlwZSYgX194LCBjb25zdCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0IHsK
ICAgICAgcmV0dXJuIF9NX2NvbXAoX194LmZpcnN0LCBfX3kuZmlyc3QpOwogICAgfQogIH07Cgpw
cml2YXRlOgogIHR5cGVkZWYgX1JiX3RyZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsCiAgICAgICAg
ICAgICAgICAgICBfU2VsZWN0MXN0PHZhbHVlX3R5cGU+LCBrZXlfY29tcGFyZSwgX0FsbG9jPiBf
UmVwX3R5cGU7CiAgX1JlcF90eXBlIF9NX3Q7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9S
ZXBfdHlwZTo6cG9pbnRlciBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpj
b25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6
OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0
X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6
Oml0ZXJhdG9yIGl0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9p
dGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmV2
ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90
eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfUmVwX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoK
CgogIG1hcCgpIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQogIGV4cGxp
Y2l0IG1hcChjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAgICAgICBjb25zdCBhbGxv
Y2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9f
YSkge30KIyAxMDYgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfbWFwLmgiIDMKICBtYXAoY29uc3Qg
dmFsdWVfdHlwZSogX19maXJzdCwgY29uc3QgdmFsdWVfdHlwZSogX19sYXN0KQogICAgOiBfTV90
KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX3QuaW5zZXJ0X3VuaXF1ZShf
X2ZpcnN0LCBfX2xhc3QpOyB9CgogIG1hcChjb25zdCB2YWx1ZV90eXBlKiBfX2ZpcnN0LAogICAg
ICBjb25zdCB2YWx1ZV90eXBlKiBfX2xhc3QsIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAg
IGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90
KF9fY29tcCwgX19hKSB7IF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9Cgog
IG1hcChjb25zdF9pdGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBfX2xhc3QpCiAgICA6
IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01fdC5pbnNlcnRfdW5p
cXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgbWFwKGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QsIGNv
bnN0X2l0ZXJhdG9yIF9fbGFzdCwgY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgY29uc3Qg
YWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21w
LCBfX2EpIHsgX01fdC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KCgoKICBtYXAo
Y29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgOiBfTV90KF9feC5fTV90
KSB7fQogIG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JgogIG9wZXJhdG9yPShjb25zdCBt
YXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX194KQogIHsKICAgIF9NX3QgPSBfX3gu
X01fdDsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCiAga2V5X2NvbXBhcmUga2V5X2NvbXAoKSBj
b25zdCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21wYXJlIHZhbHVlX2Nv
bXAoKSBjb25zdCB7IHJldHVybiB2YWx1ZV9jb21wYXJlKF9NX3Qua2V5X2NvbXAoKSk7IH0KICBh
bGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxs
b2NhdG9yKCk7IH0KCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0K
ICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQog
IGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KICBjb25zdF9pdGVyYXRvciBl
bmQoKSBjb25zdCB7IHJldHVybiBfTV90LmVuZCgpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVn
aW4oKSB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciBy
YmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAgcmV2ZXJzZV9pdGVyYXRv
ciByZW5kKCkgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
IHJlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LnJlbmQoKTsgfQogIGJvb2wgZW1wdHkoKSBjb25z
dCB7IHJldHVybiBfTV90LmVtcHR5KCk7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIF9NX3Quc2l6ZSgpOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4g
X01fdC5tYXhfc2l6ZSgpOyB9CiAgX1RwJiBvcGVyYXRvcltdKGNvbnN0IGtleV90eXBlJiBfX2sp
IHsKICAgIGl0ZXJhdG9yIF9faSA9IGxvd2VyX2JvdW5kKF9fayk7CgogICAgaWYgKF9faSA9PSBl
bmQoKSB8fCBrZXlfY29tcCgpKF9faywgKCpfX2kpLmZpcnN0KSkKICAgICAgX19pID0gaW5zZXJ0
KF9faSwgdmFsdWVfdHlwZShfX2ssIF9UcCgpKSk7CiAgICByZXR1cm4gKCpfX2kpLnNlY29uZDsK
ICB9CiAgdm9pZCBzd2FwKG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsgX01f
dC5zd2FwKF9feC5fTV90KTsgfQoKCgogIHBhaXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0KGNvbnN0
IHZhbHVlX3R5cGUmIF9feCkKICAgIHsgcmV0dXJuIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX3gpOyB9
CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIHBvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBf
X3gpCiAgICB7IHJldHVybiBfTV90Lmluc2VydF91bmlxdWUocG9zaXRpb24sIF9feCk7IH0KCgoK
CgoKICB2b2lkIGluc2VydChjb25zdCB2YWx1ZV90eXBlKiBfX2ZpcnN0LCBjb25zdCB2YWx1ZV90
eXBlKiBfX2xhc3QpIHsKICAgIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOwog
IH0KICB2b2lkIGluc2VydChjb25zdF9pdGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBf
X2xhc3QpIHsKICAgIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOwogIH0KCgog
IHZvaWQgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgeyBfTV90LmVyYXNlKF9fcG9zaXRpb24p
OyB9CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3Qu
ZXJhc2UoX194KTsgfQogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19s
YXN0KQogICAgeyBfTV90LmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KICB2b2lkIGNsZWFyKCkg
eyBfTV90LmNsZWFyKCk7IH0KCgoKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gp
IHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBr
ZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQogIHNpemVfdHlw
ZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmNvdW50KF9f
eCk7IH0KICBpdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7cmV0dXJu
IF9NX3QubG93ZXJfYm91bmQoX194KTsgfQogIGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2JvdW5kKGNv
bnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9f
eCk7CiAgfQogIGl0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHtyZXR1
cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQo
Y29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQo
X194KTsKICB9CgogIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtl
eV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQogIHBh
aXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90
eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQog
IGZyaWVuZCBib29sIG9wZXJhdG9yPT0gKGNvbnN0IG1hcCYsIGNvbnN0IG1hcCYpOwogIGZyaWVu
ZCBib29sIG9wZXJhdG9yPCAoY29uc3QgbWFwJiwgY29uc3QgbWFwJik7Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf
X3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B
bGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5s
aW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf
X3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0Fs
bG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90IDwgX195Ll9NX3Q7Cn0KIyAzNCAiL3Vzci9p
bmNsdWRlL2crKy0zL21hcCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9tdWx0aW1h
cC5oIiAxIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9tdWx0aW1hcC5oIiAzCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlID0gbGVzczxfS2V5PiwK
ICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jID4KCgoKCmNsYXNzIG11bHRpbWFwIHsKcHVi
bGljOgoKCgogIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICB0eXBlZGVmIF9UcCBkYXRhX3R5cGU7
CiAgdHlwZWRlZiBfVHAgbWFwcGVkX3R5cGU7CiAgdHlwZWRlZiBwYWlyPGNvbnN0IF9LZXksIF9U
cD4gdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21wYXJlOwoKICBjbGFzcyB2
YWx1ZV9jb21wYXJlIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx2YWx1ZV90eXBlLCB2YWx1ZV90
eXBlLCBib29sPiB7CiAgZnJpZW5kIGNsYXNzIG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B
bGxvYz47CiAgcHJvdGVjdGVkOgogICAgX0NvbXBhcmUgX01fY29tcDsKICAgIHZhbHVlX2NvbXBh
cmUoX0NvbXBhcmUgX19jKSA6IF9NX2NvbXAoX19jKSB7fQogIHB1YmxpYzoKICAgIGJvb2wgb3Bl
cmF0b3IoKShjb25zdCB2YWx1ZV90eXBlJiBfX3gsIGNvbnN0IHZhbHVlX3R5cGUmIF9feSkgY29u
c3QgewogICAgICByZXR1cm4gX01fY29tcChfX3guZmlyc3QsIF9feS5maXJzdCk7CiAgICB9CiAg
fTsKCnByaXZhdGU6CiAgdHlwZWRlZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwKICAg
ICAgICAgICAgICAgICAgX1NlbGVjdDFzdDx2YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxv
Yz4gX1JlcF90eXBlOwogIF9SZXBfdHlwZSBfTV90OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlw
ZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90
eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpj
b25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90
eXBlOjppdGVyYXRvciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29u
c3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6
OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9S
ZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwog
IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVk
ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwog
IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlw
ZTsKCgoKICBtdWx0aW1hcCgpIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7
IH0KICBleHBsaWNpdCBtdWx0aW1hcChjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQog
ICAgOiBfTV90KF9fY29tcCwgX19hKSB7IH0KIyAxMDYgIi91c3IvaW5jbHVkZS9nKystMy9zdGxf
bXVsdGltYXAuaCIgMwogIG11bHRpbWFwKGNvbnN0IHZhbHVlX3R5cGUqIF9fZmlyc3QsIGNvbnN0
IHZhbHVlX3R5cGUqIF9fbGFzdCkKICAgIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlw
ZSgpKQogICAgeyBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CiAgbXVsdGlt
YXAoY29uc3QgdmFsdWVfdHlwZSogX19maXJzdCwgY29uc3QgdmFsdWVfdHlwZSogX19sYXN0LAog
ICAgICAgICAgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAgY29uc3QgYWxsb2Nh
dG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2Ep
IHsgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQoKICBtdWx0aW1hcChjb25z
dF9pdGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBfX2xhc3QpCiAgICA6IF9NX3QoX0Nv
bXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01fdC5pbnNlcnRfZXF1YWwoX19maXJz
dCwgX19sYXN0KTsgfQogIG11bHRpbWFwKGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QsIGNvbnN0X2l0
ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICBjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICAg
ICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBf
TV90KF9fY29tcCwgX19hKSB7IF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7IH0K
CgogIG11bHRpbWFwKGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f
eCkgOiBfTV90KF9feC5fTV90KSB7IH0KICBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxs
b2M+JgogIG9wZXJhdG9yPShjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+
JiBfX3gpIHsKICAgIF9NX3QgPSBfX3guX01fdDsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCiAg
a2V5X2NvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0K
ICB2YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAoKSBjb25zdCB7IHJldHVybiB2YWx1ZV9jb21wYXJl
KF9NX3Qua2V5X2NvbXAoKSk7IH0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29u
c3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0KCiAgaXRlcmF0b3IgYmVnaW4oKSB7
IHJldHVybiBfTV90LmJlZ2luKCk7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIF9NX3QuYmVnaW4oKTsgfQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX3QuZW5k
KCk7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LmVuZCgpOyB9
CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAg
Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LnJiZWdp
bigpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0K
ICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LnJlbmQo
KTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV90LmVtcHR5KCk7IH0KICBzaXpl
X3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Quc2l6ZSgpOyB9CiAgc2l6ZV90eXBlIG1h
eF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5tYXhfc2l6ZSgpOyB9CiAgdm9pZCBzd2FwKG11
bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgeyBfTV90LnN3YXAoX194Ll9N
X3QpOyB9CgoKCiAgaXRlcmF0b3IgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgeyByZXR1
cm4gX01fdC5pbnNlcnRfZXF1YWwoX194KTsgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBf
X3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90Lmluc2Vy
dF9lcXVhbChfX3Bvc2l0aW9uLCBfX3gpOwogIH0KCgoKCgoKICB2b2lkIGluc2VydChjb25zdCB2
YWx1ZV90eXBlKiBfX2ZpcnN0LCBjb25zdCB2YWx1ZV90eXBlKiBfX2xhc3QpIHsKICAgIF9NX3Qu
aW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7CiAgfQogIHZvaWQgaW5zZXJ0KGNvbnN0X2l0
ZXJhdG9yIF9fZmlyc3QsIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdCkgewogICAgX01fdC5pbnNlcnRf
ZXF1YWwoX19maXJzdCwgX19sYXN0KTsKICB9CgogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19wb3Np
dGlvbikgeyBfTV90LmVyYXNlKF9fcG9zaXRpb24pOyB9CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0
IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZXJhc2UoX194KTsgfQogIHZvaWQgZXJhc2Uo
aXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgeyBfTV90LmVyYXNlKF9fZmly
c3QsIF9fbGFzdCk7IH0KICB2b2lkIGNsZWFyKCkgeyBfTV90LmNsZWFyKCk7IH0KCgoKICBpdGVy
YXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9
CiAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVy
biBfTV90LmZpbmQoX194KTsgfQogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194
KSBjb25zdCB7IHJldHVybiBfTV90LmNvdW50KF9feCk7IH0KICBpdGVyYXRvciBsb3dlcl9ib3Vu
ZChjb25zdCBrZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsgfQog
IGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsK
ICAgIHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7CiAgfQogIGl0ZXJhdG9yIHVwcGVyX2Jv
dW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHtyZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOyB9
CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qg
ewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsKICB9CiAgIHBhaXI8aXRlcmF0b3Is
aXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBf
TV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQogIHBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRl
cmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVy
biBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0gKGNv
bnN0IG11bHRpbWFwJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBtdWx0aW1hcCYpOwogIGZyaWVuZCBib29sIG9wZXJhdG9yPCAoY29uc3QgbXVs
dGltYXAmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbXVsdGltYXAmKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNz
IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbXVs
dGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJl
dHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNz
IF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8
KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f
eSkgewogIHJldHVybiBfX3guX01fdCA8IF9feS5fTV90Owp9CiMgMzUgIi91c3IvaW5jbHVkZS9n
KystMy9tYXAiIDIgMwojIDE0ICJyZXNvdXJjZXMuaCIgMgojIDEgImRlZmluZXMuaCIgMQojIDEz
ICJkZWZpbmVzLmgiCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0cmluZyIgMSAzCiMgMTQgImRl
ZmluZXMuaCIgMgojIDI2ICJkZWZpbmVzLmgiCmVudW0gZUxhbmd1YWdlcyB7IGl0X0lUID0gMSwg
ZW5fVVMgfTsKCnR5cGVkZWYgc3RydWN0IFRTdGFydE9wdGlvbnMKewoKCiAgICAgICAgc3RkOjpz
dHJpbmcgQmFzZURpcmVjdG9yeTsKICAgICAgICBib29sIGJIaWRlQ3Vyc29yOwogICAgICAgIGJv
b2wgYkRlYnVnSW5mbzsKICAgICAgICBib29sIGJBUlFJbmZvOwogICAgICAgIGJvb2wgYlNvY2tl
dEluZm87CiAgICAgICAgYm9vbCBiTU1JbmZvOwogICAgICAgIGJvb2wgYklNSW5mbzsKCiAgICAg
ICAgYm9vbCBiRGlzYWJsZUFja1RpbWVvdXQ7Cn07Cgp0eXBlZGVmIGVudW0ge2VOb25lPTAsZUVt
ZXJnZW5jeSxlU3RvcCxlQ3ljbGUsZUN5Y2xlU2VtaSxlT3RoZXIgfSBlU3RhdGVzOwoKdHlwZWRl
ZiBlbnVtIHsgZUxvYWRDZWxsID0gMSwgZVdhdGVyQ291bnRlciwgZVJlbWFpbmluZ1RpbWUgfSBl
QW5hbG9ndWVPcGVyYXRvcjsKIyA1OCAiZGVmaW5lcy5oIgp0eXBlZGVmIHN0cnVjdCBUTWFjaGlu
ZVN0YXRlCnsKCgogICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdWxMYXN0S25vd25EaWdJ
bnB1dDsKICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHVsTGFzdEtub3duRGlnT3V0cHV0
OwoKCgoKICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdUN1cnJlbnRXYXRlckFtb3VudDsK
ICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdUN1cnJlbnRXZWlndGg7CiAgICAgICAgdm9s
YXRpbGUgdW5zaWduZWQgaW50IHVSZW1haW5pbmdUaW1lOwoKICAgICAgICB2b2xhdGlsZSBlU3Rh
dGVzIGVTdGF0ZTsKCiAgICAgICAgdm9sYXRpbGUgYm9vbCBiV2FpdGluZ0Fuc3dlcjsKCiAgICAg
ICAgdm9sYXRpbGUgYm9vbCBiQ29ubmVjdGVkOwp9OwoKCmVudW0gewogICAgICAgIEVHZW5lcmlj
ID0gLTE5LAogIEVNZW1vcnkgPSAtOSwKICAgICAgICBFTWlzc2luZ0ltYWdlID0gLTgsCiAgICAg
ICAgRVNvY2tldCA9IC01LAoKICAgICAgICBFTm9JbWFnZSA9IC00LAogICAgICAgIEVSZXNvbHV0
aW9uVW5zdXBwb3J0ZWQgPSAtMywKICAgICAgICBFTm9UaGVtZSA9IC0yLAogICAgICAgIEVOb0RC
ID0gLTEsCiAgICAgICAgRU9LID0gMCwKfTsKCgplbnVtIHsKICAgICAgICBlU3lub3B0aWM9MjAw
LAogICAgICAgIGVGb3JtdWxhcywKICAgICAgICBlUmVwb3J0cywKICAgICAgICBlVXNlclBhcmFt
ZXRlcnMsCiAgICAgICAgZU1hY2hpbmVQYXJhbWV0ZXJzLAoKfTsKIyAxNSAicmVzb3VyY2VzLmgi
IDIKCgpjbGFzcyBUTG9va3VwVGFibGUgOiBwcml2YXRlIG1hcDxpbnQsIHN0ZDo6c3RyaW5nPgp7
CiBwcm90ZWN0ZWQ6CiAgICAgICAgdHlwZWRlZiBtYXA8aW50LCBzdGQ6OnN0cmluZz46Oml0ZXJh
dG9yIGl0ZXJJMlM7CiBwdWJsaWM6CiAgICAgICAgVExvb2t1cFRhYmxlKHZvaWQpIHt9OwoKICB2
b2lkIEZpbGxUYWJsZShlTGFuZ3VhZ2VzIExhbmcpOwoKICAgICAgICBjb25zdCBjaGFyKiBUZXh0
T2YoaW50IG5Db2RlKTsKfTsKCmVudW0gTWVzc2FnZUNvZGVzIHsKICAgICAgICBNU0dfQ1RMPTEs
TVNHX0NURT0yLE1TR19FTUc9NCxNU0dfTlJFPTgsCiAgICAgICAgTVNHX0NBTFNUQVJUPTIwLE1T
R19DQUxSRUFEV0VJR1RILE1TR19DQUxTRVRSRUZFUkVOQ0UsTVNHX0NBTEVORCwKICAgICAgICBN
U0dfRVJSTlVMTFdFSUdUSD01MCxNU0dfRVJSUkVGLE1TR19XRUlHVEhfRVhDRUVERUQsTVNHX0NP
TkZJUk1NQU5VQUwsCiAgICAgICAgTVNHX0NOMT02NCxNU0dfQ04yLE1TR19DTjMsCiAgICAgICAg
TVNHX0gyTz03NSxNU0dfU0tJUEZBSUxVUkU9MTI5LE1TR19ET09SRkFJTFVSRT0xMzAsCiAgICAg
ICAgTVNHX0NIRUNLU0tJUD0xNDAsTVNHX0NIRUNLTUlYLE1TR19DSEVDS0JFTFQsCiAgICAgICAg
TVNHX01PVE9SRkFVTFQ9MTUwCn07CgplbnVtIExhYmVsQ29kZXMgewogICAgICAgIExCTF9GT1JN
VUxBPTEwMDAsTEJMX1RPVEFMLExCTF9IMk8sTEJMX01JWFRJTUUsTEJMX0NZQ0xFLExCTF9NT0RF
LExCTF9QUk9EVUNUSU9OLAogICAgICAgIExCTF9QUk9EVUNUTkFNRSxMQkxfUFJPRFVDVENPU1Qs
TEJMX1dBVEVSQ09TVCxMQkxfU1lTVEVNLExCTF9GQUNUT1JZTkFNRSwKICAgICAgICBMQkxfQ1VS
UkVOQ1lOQU1FLExCTF9QQVJUSUFMLExCTF9DTEVBUkNPTkZJUk0sCiAgICAgICAgTEJMX1lFUyxM
QkxfTk8sTEJMX1JFVFJZLExCTF9BQk9SVCxMQkxfSEVMUCxMQkxfUkVQT1JUT0YsCiAgICAgICAg
TEJMX1RJTUVSMSxMQkxfVElNRVIyLExCTF9USU1FUjMsTEJMX1RJTUVSNCxMQkxfVElNRU9VVDEs
TEJMX1RJTUVPVVQyLAogICAgICAgIExCTF9USU1FT1VUMyxMQkxfVElNRU9VVDQsTEJMX1RJTUVP
VVQ1LExCTF9USU1FT1VUNixMQkxfUVRZTUlYLExCTF9aRVJPVE9MTCwKICAgICAgICBMQkxfSVBB
RERSLExCTF9JUFBPUlQsCiAgICAgICAgTEJMX0NBTElCUkFUSU9OLExCTF9MT0FEQ0VMTCxMQkxf
V0VJR1RILExCTF9SRUZXRUlHVEgsTEJMX1JFUE9SVFNQQUdFLAogICAgICAgIExCTF9GT1JNVUxB
U1BBR0UsTEJMX1VTRVJQQVJNU1BBR0UsTEJMX01BQ0hJTkVQQVJNU1BBR0UsTEJMX1RJTEVTLExC
TF9QUklOVFNQRVJTSE9ULAogICAgICAgIFBSTl9SRVBPUlQsUFJOX1RPVEFMLFBSTl9QQVJUSUFM
LFBSTl9QUklOVFMsUFJOX0FWR0NPU1QsCiAgICAgICAgTEJMX1RJTUVGT1JNQVQsTEJMX1RJTUVG
T1JNQVRfSElTVCxMQkxfQ09OVElOVUUsTEJMX1NUT1AsTEJMX0xBTkdVQUdFCn07CgplbnVtIEJ1
dHRvbkNvZGVzIHsKICAgICAgICBCVE5fUEVSQ0VOVD0yMDAwLEJUTl9BQlNPTFVURSxCVE5fTkVX
Rk9STVVMQSxCVE5fU0FWRSxCVE5fRVhJVCxCVE5fU1RBUlQsQlROX1NUT1AsCiAgICAgICAgQlRO
X0FVVE8sQlROX1NFTUlBVVRPLEJUTl9NQU5VQUwsQlROX0ZPUk1VTEFTLEJUTl9SRVBPUlRTLEJU
Tl9PUEVOLEJUTl9DTE9TRSxCVE5fVVBEQVRFRk9STVVMQSwKICAgICAgICBCVE5fUkVTRVQsQlRO
X0NMRUFSLEJUTl9QUklOVCxCVE5fQ09ORklHLEJUTl9aRVJPLEJUTl9SRUYsCiAgICAgICAgQlRO
X1NFTEVDVEZPUk1VTEEsQlROX1BSRVZJT1VTLEJUTl9ORVhULEJUTl9PUEVOV0FURVIsQlROX0NM
T1NFV0FURVIKfTsKIyAxMSAicmVzb3VyY2VzLmNwcCIgMgojIDEgInByb3RvY29sLmgiIDEKIyAx
MiAicHJvdG9jb2wuaCIKIyAxICIvdXNyL2luY2x1ZGUvZysrLTMvc3RyaW5nIiAxIDMKIyAxMyAi
cHJvdG9jb2wuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9nKystMy9tYXAiIDEgMwojIDE0ICJwcm90
b2NvbC5oIiAyCgplbnVtIENvbW1hbmRDb2RlcyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1RFPTEsQ1RMPTIsRU1HPTQsTlJNPTgsTUJBPTE2LFBFQz0xNyxNR1U9MzIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV0FCPTUwLFdBRT01MSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUTU89NjQsUlRZPTY1LEFCVD02NiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBNQ009NzAsT05FPTk2LEFJUz0xMDAsQU9TPTEwMSxESVM9MTAyLERPUz0x
MDMsUFJEPTExMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRE89MTIwLFNETz0x
MjEsU0FPPTEyMixSUVM9MTMwLFNUQz0xMzEsU1RQPTEzMixFU1Q9MTMzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNUTz0xMzQsCiAgICAgICAgICAgICAgICAgICAgICAgIH07Cgpj
bGFzcyBUUHJvdG9jb2wKewogcHJpdmF0ZToKICAgICAgICBzdGQ6OnN0cmluZyBhU3RyaW5nOwog
cHJvdGVjdGVkOgogICAgICAgIG1hcDxzdGQ6OnN0cmluZywgdW5zaWduZWQgbG9uZz4gQVNDSUky
Q29kZTsKICAgICAgICBtYXA8dW5zaWduZWQgbG9uZywgc3RkOjpzdHJpbmc+IENvZGUyQVNDSUk7
CiAgICAgICAgbWFwPHVuc2lnbmVkIGxvbmcsIHN0ZDo6c3RyaW5nPiBGdWxsQ29kZTJBU0NJSTsK
ICAgICAgICB0eXBlZGVmIG1hcDxzdGQ6OnN0cmluZywgdW5zaWduZWQgbG9uZz46Oml0ZXJhdG9y
IGl0ZXJBMkM7CiAgICAgICAgdHlwZWRlZiBtYXA8dW5zaWduZWQgbG9uZywgc3RkOjpzdHJpbmc+
OjppdGVyYXRvciBpdGVyQzJBOwogcHVibGljOgoKICAgICAgICBUUHJvdG9jb2wodm9pZCk7CiMg
NDYgInByb3RvY29sLmgiCiAgICAgICAgY29uc3QgY2hhciogRm9ybWF0dGVyKGNvbnN0IHVuc2ln
bmVkIGxvbmcmLGNvbnN0IHVuc2lnbmVkIGxvbmcmKTsKIyA1NyAicHJvdG9jb2wuaCIKICAgICAg
ICBjb25zdCBpbnQgSW50ZXJwcmV0ZXIoY29uc3Qgc3RyaW5nJiBDb21tYW5kLHVuc2lnbmVkIGxv
bmcmLHVuc2lnbmVkIGxvbmcmKTsKCgoKCgoKICAgICAgICBjb25zdCBjaGFyKiBUcmFuc2xhdGVU
b1N0cmluZyhjb25zdCB1bnNpZ25lZCBsb25nJixjb25zdCB1bnNpZ25lZCBsb25nJik7Cn07CiMg
MTIgInJlc291cmNlcy5jcHAiIDIKCgp2b2lkIFRMb29rdXBUYWJsZTo6RmlsbFRhYmxlKGVMYW5n
dWFnZXMgbGFuZ3VhZ2UpCnsKCiAgICAgICAgY2xlYXIoKTsKICAgICAgICBpbnNlcnQobWFrZV9w
YWlyKEJUTl9QRVJDRU5ULHN0cmluZygiJSIpKSk7CgoKICAgICAgICBpZiAobGFuZ3VhZ2UgPT0g
aXRfSVQpIHsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoQlROX0FCU09MVVRFLHN0
cmluZygiYXNzIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoQlROX05FV0ZP
Uk1VTEEsc3RyaW5nKCJOdW92YSBmb3JtdWxhIikpKTsKICAgICAgICAgICAgICAgIGluc2VydCht
YWtlX3BhaXIoQlROX0FVVE8sc3RyaW5nKCJBdXRvbWF0aWNvIikpKTsKICAgICAgICAgICAgICAg
IGluc2VydChtYWtlX3BhaXIoQlROX1NUQVJULHN0cmluZygiU3RhcnQiKSkpOwogICAgICAgICAg
ICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fU1RPUCxzdHJpbmcoIlN0b3AiKSkpOwogICAgICAg
ICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fU0VNSUFVVE8sc3RyaW5nKCJTZW1pYXV0byIp
KSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKEJUTl9NQU5VQUwsc3RyaW5nKCJN
YW51YWxlIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoQlROX0ZPUk1VTEFT
LHN0cmluZygiRm9ybXVsZSIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKEJU
Tl9SRVBPUlRTLHN0cmluZygiUmVwb3J0IikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtl
X3BhaXIoQlROX1NBVkUsc3RyaW5nKCJTYWx2YSIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQo
bWFrZV9wYWlyKEJUTl9FWElULHN0cmluZygiRXNjaSIpKSk7CiAgICAgICAgICAgICAgICBpbnNl
cnQobWFrZV9wYWlyKEJUTl9PUEVOLHN0cmluZygiQXByaSIpKSk7CiAgICAgICAgICAgICAgICBp
bnNlcnQobWFrZV9wYWlyKEJUTl9DTE9TRSxzdHJpbmcoIkNoaXVkaSIpKSk7CiAgICAgICAgICAg
ICAgICBpbnNlcnQobWFrZV9wYWlyKEJUTl9VUERBVEVGT1JNVUxBLHN0cmluZygiQWdnLiBmb3Jt
dWxhIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoQlROX1JFU0VULHN0cmlu
ZygiUmVzZXQiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fQ0xFQVIs
c3RyaW5nKCJBenplcmEiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5f
UFJJTlQsc3RyaW5nKCJTdGFtcGUiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFp
cihCVE5fQ09ORklHLHN0cmluZygiQ29uZmlndXJhemlvbmUiKSkpOwogICAgICAgICAgICAgICAg
aW5zZXJ0KG1ha2VfcGFpcihCVE5fWkVSTyxzdHJpbmcoIlpFUk8iKSkpOwogICAgICAgICAgICAg
ICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fUkVGLHN0cmluZygiUkVGIikpKTsKICAgICAgICAgICAg
ICAgIGluc2VydChtYWtlX3BhaXIoQlROX1NFTEVDVEZPUk1VTEEsc3RyaW5nKCJSZW5kaSBhdHRp
dmEiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fT1BFTldBVEVSLHN0
cmluZygiQXByaSBhY3F1YSIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKEJU
Tl9DTE9TRVdBVEVSLHN0cmluZygiQ2hpdWRpIGFjcXVhIikpKTsKCiAgICAgICAgICAgICAgICBp
bnNlcnQobWFrZV9wYWlyKEJUTl9QUkVWSU9VUyxzdHJpbmcoIlByZWNlZGVudGUiKSkpOwogICAg
ICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fTkVYVCxzdHJpbmcoIlN1Y2Nlc3NpdmEi
KSkpOwoKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX0ZPUk1VTEFTUEFHRSxz
dHJpbmcoIkdlc3Rpb25lIGZvcm11bGUiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2Vf
cGFpcihMQkxfVVNFUlBBUk1TUEFHRSxzdHJpbmcoIlBhcmFtZXRyaSB1dGVudGUiKSkpOwogICAg
ICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfTUFDSElORVBBUk1TUEFHRSxzdHJpbmco
IlBhcmFtZXRyaSBtYWNjaGluYSIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWly
KExCTF9SRVBPUlRTUEFHRSxzdHJpbmcoIlN0YXRpc3RpY2hlIGNvbnN1bWkgZSBjb3N0aSIpKSk7
CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9GT1JNVUxBLHN0cmluZygiRm9y
bXVsYSIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9UT1RBTCxzdHJp
bmcoIlRvdGFsZSIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9QQVJU
SUFMLHN0cmluZygiUGFyemlhbGUiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFp
cihMQkxfSDJPLHN0cmluZygiQWNxdWEiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2Vf
cGFpcihMQkxfTUlYVElNRSxzdHJpbmcoIlRlbXBvIGQnaW1wYXN0byIpKSk7CiAgICAgICAgICAg
ICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9NT0RFLHN0cmluZygiTW9kbyIpKSk7CiAgICAgICAg
ICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9QUk9EVUNUSU9OLHN0cmluZygiUHJvZHV6aW9u
ZSIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9QUk9EVUNUTkFNRSxz
dHJpbmcoIk5vbWUgcHJvZG90dG8iKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFp
cihMQkxfUFJPRFVDVENPU1Qsc3RyaW5nKCJDb3N0byBwcm9kb3R0byIpKSk7CiAgICAgICAgICAg
ICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9XQVRFUkNPU1Qsc3RyaW5nKCJDb3N0byBhY3F1YSBw
ZXIgbCBvIGdhbCIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9TWVNU
RU0sc3RyaW5nKCJVc2Egc2lzdGVtYSBtZXRyaWNvPyIpKSk7CiAgICAgICAgICAgICAgICBpbnNl
cnQobWFrZV9wYWlyKExCTF9GQUNUT1JZTkFNRSxzdHJpbmcoIk5vbWUgYXppZW5kYSIpKSk7CiAg
ICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9DVVJSRU5DWU5BTUUsc3RyaW5nKCJT
aWdsYSB2YWx1dGEiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfQ0xF
QVJDT05GSVJNLHN0cmluZygiT3BlcmF6aW9uZSBpcnJldmVyc2liaWxlIVxuUHJvY2Vkbz8iKSkp
OwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfWUVTLHN0cmluZygiU2kiKSkp
OwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfTk8sc3RyaW5nKCJObyIpKSk7
CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9SRVRSWSxzdHJpbmcoIlJpcHJv
dmEiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfQUJPUlQsc3RyaW5n
KCJBbm51bGxhIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX1RJTUVS
MSxzdHJpbmcoIlN2dW90YW1lbnRvIG5hc3RybyBkb3NhZ2dpbyIpKSk7CiAgICAgICAgICAgICAg
ICBpbnNlcnQobWFrZV9wYWlyKExCTF9USU1FUjIsc3RyaW5nKCJTdnVvdGFtZW50byBiZW5uYSIp
KSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9USU1FUjMsc3RyaW5nKCJT
dnVvdGFtZW50byBtaXhlciIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExC
TF9USU1FUjQsc3RyaW5nKCJTdnVvdGFtZW50byBuYXN0cm8gc2NhcmljbyIpKSk7CiAgICAgICAg
ICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9USU1FT1VUMSxzdHJpbmcoIlRpbWVvdXQgY29t
dW5pY2F6aW9uZSIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9USU1F
T1VUMixzdHJpbmcoIlRpbWVvdXQgY29tcG9uZW50aSIpKSk7CiAgICAgICAgICAgICAgICBpbnNl
cnQobWFrZV9wYWlyKExCTF9USU1FT1VUMyxzdHJpbmcoIlRpbWVvdXQgZmluZWNvcnNhIGJlbm5h
IikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX1RJTUVPVVQ0LHN0cmlu
ZygiVGltZW91dCBmaW5lY29yc2EgcG9ydGEgbWl4IikpKTsKICAgICAgICAgICAgICAgIGluc2Vy
dChtYWtlX3BhaXIoTEJMX1RJTUVPVVQ1LHN0cmluZygiVGltZW91dCBtYW5jYW56YSBhY3F1YSIp
KSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9USU1FT1VUNixzdHJpbmco
IlRpbWVvdXQgcmllbXBpbWVudG8gZGVwb3NpdG8iKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0
KG1ha2VfcGFpcihMQkxfWkVST1RPTEwsc3RyaW5nKCJUb2xsZXJhbnphIHRhcmEgemVybyIpKSk7
CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9RVFlNSVgsc3RyaW5nKCJDYXBp
ZW56YSBtaXhlciIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9JUEFE
RFIsc3RyaW5nKCJJbmRpcml6em8gSVAgc2VydmVyIikpKTsKICAgICAgICAgICAgICAgIGluc2Vy
dChtYWtlX3BhaXIoTEJMX0lQUE9SVCxzdHJpbmcoIlBvcnRhIHNlcnZlciIpKSk7CiAgICAgICAg
ICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9DT05USU5VRSxzdHJpbmcoIkNvbnRpbnVhIikp
KTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX1NUT1Asc3RyaW5nKCJTdG9w
IikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX0xBTkdVQUdFLHN0cmlu
ZygiTGluZ3VhIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX0NBTElC
UkFUSU9OLHN0cmluZygiU2lzdGVtYSBkaSBjYWxpYnJhemlvbmUiKSkpOwogICAgICAgICAgICAg
ICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfTE9BRENFTEwsc3RyaW5nKCJMZXR0dXJhIGNlbGxhIikp
KTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX1dFSUdUSCxzdHJpbmcoIlBl
c28iKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfVElMRVMsc3RyaW5n
KCJQaWFzdHJlbGxlIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX1JF
UE9SVE9GLHN0cmluZygiUmFwcG9ydG8gZGVsOiIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQo
bWFrZV9wYWlyKExCTF9QUklOVFNQRVJTSE9ULHN0cmluZygiUGlhc3RyZWxsZSBwZXIgc3RhbXBh
dGE6IikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX0hFTFAsc3RyaW5n
KCJGdW56aW9uaSBkYSB0YXN0aWVyYTpcbmMgLSBwYWdpbmEgZGkgY29uZmlndXJhemlvbmVcbnMg
LSBwYWdpbmEgZGVsIHNpbm90dGljb1xucSAtIHVzY2l0YSBkYWxsJ2FwcGxpY2F6aW9uZSIgKSkp
OwoKCgoKCgogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfQ1RMLHN0cmluZygi
TTAxLiBDb211bmljYXppb25lIGludGVycm90dGEgY29uIGlsIHByb2Nlc3NvIGRpIGNvbnRyb2xs
byIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKE1TR19DVEUsc3RyaW5nKCJN
MDIuIENvbXVuaWNhemlvbmUgc3RhYmlsaXRhIGNvbiBpbCBwcm9jZXNzbyBkaSBjb250cm9sbG8i
KSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfRU1HLHN0cmluZygiTTAz
LiBFbWVyZ2VuemEiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfTlJF
LHN0cmluZygiTTA0LiBJbCBwcm9jZXNzbyBkaSBjb250cm9sbG8gbm9uIGhhIHJpc3Bvc3RvIGFs
bCd1bHRpbW8gY29tYW5kby5cbkxhIG1hY2NoaW5hIHBvdHJlYmJlIHRyb3ZhcnNpIGluIHVubyBz
dGF0byBhbm9tYWxvLiIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKE1TR19D
TjEsc3RyaW5nKCJNMDUuIENvbnN1bWFiaWxlIDEgZXNhdXJpdG8iKSkpOwogICAgICAgICAgICAg
ICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfQ04yLHN0cmluZygiTTA2LiBDb25zdW1hYmlsZSAyIGVz
YXVyaXRvIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTVNHX0NOMyxzdHJp
bmcoIk0wNy4gQ29uc3VtYWJpbGUgMyBlc2F1cml0byIpKSk7CiAgICAgICAgICAgICAgICBpbnNl
cnQobWFrZV9wYWlyKE1TR19IMk8sc3RyaW5nKCJNMDguIE1hbmNhbnphIGFjcXVhIikpKTsKICAg
ICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTVNHX1dFSUdUSF9FWENFRURFRCxzdHJpbmco
Ik0wOS4gTGEgc29tbWEgZGVpIGNvbXBvbmVudGkgZGVsbGEgZm9ybXVsYSBzdXBlcmEgaWwgcGVz
byBtYXNzaW1vIGNoZSBpbCBtaXhlciBlJyBpbiBncmFkbyBkaSBjb250ZW5lcmUuIgoKCiAgICAg
ICAgICAgICAgICApKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKE1TR19DT05G
SVJNTUFOVUFMLHN0cmluZygiTTEwLiBTaSB2dW9sZSB2ZXJhbWVudGUgcGFzc2FyZSBpbiBtYW51
YWxlIGR1cmFudGUgaWwgY2ljbG8/XG4gQXppb25hcmUgY29tYW5kaSBtYW51YWxpIGR1cmFudGUg
aWwgY2ljbG8gcHVvJyBwb3JyZSBsYSBtYWNjaGluYSBpbiB1bm8gc3RhdG8gYW5vbWFsbyBlIGRh
bm5lZ2dpYXJlIGxhIApwcm9kdXppb25lOiBzYXJlYmJlIG1lZ2xpbyBmZXJtYXJlIGlsIGNpY2xv
IGUgcG9pIHBhc3NhcmUgaW4gbWFudWFsZS4iCgoKCgoKCiAgICAgICAgICAgICAgICApKSk7CiAg
ICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKE1TR19TS0lQRkFJTFVSRSxzdHJpbmcoIk0x
MS4gTG8gc2tpcHBlciBlJyByaW1hc3RvIGluIHVuYSBwb3NpemlvbmUgaW50ZXJtZWRpYS4gQ29u
dHJvbGxhcmUgZSByaXRlbnRhcmUgbCdvcGVyYXppb25lLCBvcHB1cmUgYW5udWxsYXJlIHBlciBp
bnRlcnJvbXBlcmUgaWwgY2ljbG8iCgoKCiAgICAgICAgICAgICAgICApKSk7CiAgICAgICAgICAg
ICAgICBpbnNlcnQobWFrZV9wYWlyKE1TR19ET09SRkFJTFVSRSxzdHJpbmcoIk0xMi4gTGEgcG9y
dGEgZScgcmltYXN0YSBpbiB1bmEgcG9zaXppb25lIGludGVybWVkaWEuIENvbnRyb2xsYXJlIGUg
cml0ZW50YXJlIGwnb3BlcmF6aW9uZSwgb3BwdXJlIGFubnVsbGFyZSBwZXIgaW50ZXJyb21wZXJl
IGlsIGNpY2xvIgoKCgogICAgICAgICAgICAgICAgKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0
KG1ha2VfcGFpcihNU0dfTU9UT1JGQVVMVCxzdHJpbmcoIk0xMy4gQXZhcmlhIG1hZ25ldG90ZXJt
aWNpIC0gY2ljbG8gaW50ZXJyb3R0by5cbiBDb250cm9sbGFyZSBzdWwgc2lub3R0aWNvIHF1YWxl
IG1vdG9yZSBoYSBkYXRvIHByb2JsZW1pIGUgcmlwcmlzdGluYXJlIGxhIHNpdHVhemlvbmUuIgoK
CgogICAgICAgICAgICAgICAgKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihN
U0dfQ0hFQ0tTS0lQLHN0cmluZygiTTE0LiBMbyBza2lwcGVyIGUnIGluIHVuYSBjb25kaXppb25l
IGlnbm90YTogcG90cmViYmUgY29udGVuZXJlIG8gbWVubyBkZWwgbWF0ZXJpYWxlLlxuIFByZW1l
cmUgJ2NvbnRpbnVhJyBwZXIgbG8gc3Z1b3RhbWVudG8gYXV0b21hdGljbywgb3BwdXJlICdzdG9w
JyBwZXIgZmVybWFyZSBpbCBjaWNsby4iCgoKCgogICAgICAgICAgICAgICAgKSkpOwogICAgICAg
ICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfQ0hFQ0tNSVgsc3RyaW5nKCJNMTUuIElsIG1p
eGVyIGUnIGluIHVuYSBjb25kaXppb25lIGlnbm90YTogcG90cmViYmUgY29udGVuZXJlIG8gbWVu
byBkZWwgbWF0ZXJpYWxlLlxuIFByZW1lcmUgJ2NvbnRpbnVhJyBwZXIgbG8gc3Z1b3RhbWVudG8g
YXV0b21hdGljbywgb3BwdXJlICdzdG9wJyBwZXIgZmVybWFyZSBpbCBjaWNsby4iCgoKCgogICAg
ICAgICAgICAgICAgKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfQ0hF
Q0tCRUxULHN0cmluZygiTTE2LiBJbCBuYXN0cm8gZGkgcGVzYXR1cmEgZScgaW4gdW5hIGNvbmRp
emlvbmUgaWdub3RhOiBwb3RyZWJiZSBjb250ZW5lcmUgbyBtZW5vIGRlbCBtYXRlcmlhbGUuXG4g
UHJlbWVyZSAnY29udGludWEnIHBlciBsbyBzdnVvdGFtZW50byBhdXRvbWF0aWNvLCBvcHB1cmUg
J3N0b3AnIHBlciBmZXJtYXJlIGlsIGNpY2xvLiIKCgoKCiAgICAgICAgICAgICAgICApKSk7Cgog
ICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihQUk5fUkVQT1JULHN0cmluZygiUmFwcG9y
dG8gZGkgcHJvZHV6aW9uZSBkZWwgIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3Bh
aXIoUFJOX1BBUlRJQUwsc3RyaW5nKCJDb25zdW1pIHBhcnppYWxpOiIpKSk7CiAgICAgICAgICAg
ICAgICBpbnNlcnQobWFrZV9wYWlyKFBSTl9UT1RBTCxzdHJpbmcoIkNvbnN1bWkgdG90YWxpOiIp
KSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKFBSTl9QUklOVFMsc3RyaW5nKCJQ
aWFzdHJlbGxlIHN0YW1wYXRlOiIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWly
KFBSTl9BVkdDT1NULHN0cmluZygiQ29zdG8gbWVkaW8gYSBwaWFzdHJlbGxhOiIpKSk7CgogICAg
ICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfRVJSTlVMTFdFSUdUSCxzdHJpbmcoIk0x
Ny4gSWwgcGVzbyBpbnNlcml0byBlJyBzYmFnbGlhdG8uXG5Db3JyZWdnZXJlLCBvcHB1cmUgYW5u
dWxsYXJlIGxhIGNhbGlicmF6aW9uZSIKCgogICAgICAgICAgICAgICAgKSkpOwogICAgICAgICAg
ICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfRVJSUkVGLHN0cmluZygiTTE4LiBJbCBwZXNvIGRp
IHJpZmVyaW1lbnRvIG5vbiBwdW8nIGVzc2VyZSBpbmZlcmlvcmUgYWwgcGVzbyBhIHZ1b3RvXG5D
b3JyZWdnZXJlLCBvcHB1cmUgYW5udWxsYXJlIGxhIGNhbGlicmF6aW9uZSIKCgoKICAgICAgICAg
ICAgICAgICkpKTsKCgogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfQ0FMU1RB
UlQsc3RyaW5nKCJQUk9DRVNTTyBESSBDQUxJQlJBWklPTkU6XG5GQVNFIDEpIFN2dW90YXJlIGNv
bXBsZXRhbWVudGUgaWwgbmFzdHJvIGRpIGNhcmljb1xuRkFTRSAyKSBBY3F1aXNpcmUgaWwgcGVz
byBhIHZ1b3RvIGNvbiBpbCB0YXN0byBaRVJPIgoKCgogICAgICAgICAgICAgICAgKSkpOwogICAg
ICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfQ0FMUkVBRFdFSUdUSCxzdHJpbmcoIkZB
U0UgMykgcG9ycmUgc3VsIG5hc3RybyB1biBwZXNvIG5vdG9cbkZBU0UgNCkgaW5zZXJpcmUgaWwg
cGVzbyBuZWxsJ2FwcG9zaXRhIGNhc2VsbGEiCgoKICAgICAgICAgICAgICAgICkpKTsKICAgICAg
ICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTVNHX0NBTFNFVFJFRkVSRU5DRSxzdHJpbmcoIkZB
U0UgNSkgQWNxdWlzaXJlIGlsIHBlc28gY2FtcGlvbmUgY29uIGlsIHRhc3RvIFJFRi4iCgogICAg
ICAgICAgICAgICAgKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfQ0FM
RU5ELHN0cmluZygiTGEgbWFjY2hpbmEgZScgY2FsaWJyYXRhIikpKTsKICAgICAgICAgICAgICAg
IGluc2VydChtYWtlX3BhaXIoTEJMX1RJTUVGT1JNQVQsc3RyaW5nKCIlZC8lbS8lWSIpKSk7CiAg
ICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9USU1FRk9STUFUX0hJU1Qsc3RyaW5n
KCIlZC8lbS8lWSAoc29sbyBzdG9yaWNvIHRvdGFsaSkiKSkpOwogICAgICAgIH0KICAgICAgICBl
bHNlIGlmIChsYW5ndWFnZSA9PSBlbl9VUykgewogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2Vf
cGFpcihCVE5fQUJTT0xVVEUsc3RyaW5nKCJhYnMiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0
KG1ha2VfcGFpcihCVE5fTkVXRk9STVVMQSxzdHJpbmcoIk5ldyBmb3JtdWxhIikpKTsKICAgICAg
ICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoQlROX0FVVE8sc3RyaW5nKCJBdXRvbWF0aWMiKSkp
OwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fU1RBUlQsc3RyaW5nKCJTdGFy
dCIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKEJUTl9TVE9QLHN0cmluZygi
U3RvcCIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKEJUTl9TRU1JQVVUTyxz
dHJpbmcoIlNlbWlhdXRvIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoQlRO
X01BTlVBTCxzdHJpbmcoIk1hbnVhbCIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9w
YWlyKEJUTl9GT1JNVUxBUyxzdHJpbmcoIkZvcm11bGFzIikpKTsKICAgICAgICAgICAgICAgIGlu
c2VydChtYWtlX3BhaXIoQlROX1JFUE9SVFMsc3RyaW5nKCJSZXBvcnQiKSkpOwogICAgICAgICAg
ICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fU0FWRSxzdHJpbmcoIlNhdmUiKSkpOwogICAgICAg
ICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fRVhJVCxzdHJpbmcoIkV4aXQiKSkpOwogICAg
ICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fT1BFTixzdHJpbmcoIk9wZW4iKSkpOwog
ICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fQ0xPU0Usc3RyaW5nKCJDbG9zZSIp
KSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKEJUTl9VUERBVEVGT1JNVUxBLHN0
cmluZygiVXBkLiBmb3JtdWxhIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIo
QlROX1JFU0VULHN0cmluZygiUmVzZXQiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2Vf
cGFpcihCVE5fQ0xFQVIsc3RyaW5nKCJDbGVhciIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQo
bWFrZV9wYWlyKEJUTl9QUklOVCxzdHJpbmcoIlByaW50IikpKTsKICAgICAgICAgICAgICAgIGlu
c2VydChtYWtlX3BhaXIoQlROX0NPTkZJRyxzdHJpbmcoIkNvbmZpZ3VyYXRpb24iKSkpOwogICAg
ICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fWkVSTyxzdHJpbmcoIlpFUk8iKSkpOwog
ICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5fUkVGLHN0cmluZygiUkVGIikpKTsK
ICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoQlROX1NFTEVDVEZPUk1VTEEsc3RyaW5n
KCJNYWtlIGN1cnJlbnQiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihCVE5f
T1BFTldBVEVSLHN0cmluZygiQWRkIHdhdGVyIikpKTsKICAgICAgICAgICAgICAgIGluc2VydCht
YWtlX3BhaXIoQlROX0NMT1NFV0FURVIsc3RyaW5nKCJTdG9wIHdhdGVyIikpKTsKCiAgICAgICAg
ICAgICAgICBpbnNlcnQobWFrZV9wYWlyKEJUTl9QUkVWSU9VUyxzdHJpbmcoIlByZXZpb3VzIikp
KTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoQlROX05FWFQsc3RyaW5nKCJOZXh0
IikpKTsKCiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9GT1JNVUxBU1BBR0Us
c3RyaW5nKCJGb3JtdWxhIG1hbmFnZW1lbnQiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1h
a2VfcGFpcihMQkxfVVNFUlBBUk1TUEFHRSxzdHJpbmcoIlVzZXIgcGFyYW1ldGVycyIpKSk7CiAg
ICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9NQUNISU5FUEFSTVNQQUdFLHN0cmlu
ZygiTWFjaGluZSBwYXJhbWV0ZXJzIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3Bh
aXIoTEJMX1JFUE9SVFNQQUdFLHN0cmluZygiQ29tcG9uZW50cycgdXNlIGFuZCBjb3N0IikpKTsK
ICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX0ZPUk1VTEEsc3RyaW5nKCJGb3Jt
dWxhIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX1RPVEFMLHN0cmlu
ZygiVG90YWwiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfUEFSVElB
TCxzdHJpbmcoIlBhcnRpYWwiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihM
QkxfSDJPLHN0cmluZygiV2F0ZXIiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFp
cihMQkxfTUlYVElNRSxzdHJpbmcoIk1peGluZyB0aW1lIikpKTsKICAgICAgICAgICAgICAgIGlu
c2VydChtYWtlX3BhaXIoTEJMX01PREUsc3RyaW5nKCJNb2RlIikpKTsKICAgICAgICAgICAgICAg
IGluc2VydChtYWtlX3BhaXIoTEJMX1BST0RVQ1RJT04sc3RyaW5nKCJQcm9kdWN0aW9uIikpKTsK
ICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX1BST0RVQ1ROQU1FLHN0cmluZygi
UHJvZHVjdCBuYW1lIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX1BS
T0RVQ1RDT1NULHN0cmluZygiUHJvZHVjdCBjb3N0IikpKTsKICAgICAgICAgICAgICAgIGluc2Vy
dChtYWtlX3BhaXIoTEJMX1dBVEVSQ09TVCxzdHJpbmcoIldhdGVyIGNvc3QgcGVyIGx0IG9yIGdh
bCIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9TWVNURU0sc3RyaW5n
KCJVc2UgbWV0cmljIHN5c3RlbT8iKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFp
cihMQkxfRkFDVE9SWU5BTUUsc3RyaW5nKCJDb21wYW55IG5hbWUiKSkpOwogICAgICAgICAgICAg
ICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfQ1VSUkVOQ1lOQU1FLHN0cmluZygiQ3VycmVuY3kgYWJi
ci4iKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfQ0xFQVJDT05GSVJN
LHN0cmluZygiT3BlcmF0aW9uIGNhbm5vdCBiZSB1bmRvbmUhXG5Qcm9jZWVkPyIpKSk7CiAgICAg
ICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9ZRVMsc3RyaW5nKCJZZXMiKSkpOwogICAg
ICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfTk8sc3RyaW5nKCJObyIpKSk7CiAgICAg
ICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9SRVRSWSxzdHJpbmcoIlJldHJ5IikpKTsK
ICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX0FCT1JULHN0cmluZygiQWJvcnQi
KSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfVElNRVIxLHN0cmluZygi
RG9zaW5nIGJlbHQgZW1wdHlpbmcgb3V0IikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtl
X3BhaXIoTEJMX1RJTUVSMixzdHJpbmcoIkJ1Y2tldCBlbXB0eWluZyBvdXQiKSkpOwogICAgICAg
ICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfVElNRVIzLHN0cmluZygiTWl4ZXIgZW1wdHlp
bmcgb3V0IikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX1RJTUVSNCxz
dHJpbmcoIlVubG9hZGluZyBiZWx0IGVtcHR5aW5nIG91dCIpKSk7CiAgICAgICAgICAgICAgICBp
bnNlcnQobWFrZV9wYWlyKExCTF9USU1FT1VUMSxzdHJpbmcoIkNvbW11bmljYXRpb24gdGltZW91
dCIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9USU1FT1VUMixzdHJp
bmcoIk91dCBvZiBjb21wb25lbnQgdGltZW91dCIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQo
bWFrZV9wYWlyKExCTF9USU1FT1VUMyxzdHJpbmcoIkJ1Y2tldCBsaW1pdCBzd2l0Y2ggdGltZW91
dCIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9USU1FT1VUNCxzdHJp
bmcoIk1peGVyIGRvb3IgbGltaXQgc3dpdGNoIHRpbWVvdXQiKSkpOwogICAgICAgICAgICAgICAg
aW5zZXJ0KG1ha2VfcGFpcihMQkxfVElNRU9VVDUsc3RyaW5nKCJPdXQgb2Ygd2F0ZXIgdGltZW91
dCIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9USU1FT1VUNixzdHJp
bmcoIkRlcG90IGZpbGxpbmcgdGltZW91dCIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFr
ZV9wYWlyKExCTF9aRVJPVE9MTCxzdHJpbmcoIlRhcmUgdG9sbGVyYW5jZSIpKSk7CiAgICAgICAg
ICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9RVFlNSVgsc3RyaW5nKCJNaXhlciBjYXBhY2l0
eSIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKExCTF9JUEFERFIsc3RyaW5n
KCJTZXJ2ZXIgSVAgYWRkcmVzcyIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWly
KExCTF9JUFBPUlQsc3RyaW5nKCJTZXJ2ZXIgcG9ydCIpKSk7CiAgICAgICAgICAgICAgICBpbnNl
cnQobWFrZV9wYWlyKExCTF9DT05USU5VRSxzdHJpbmcoIkNvbnRpbnVlIikpKTsKICAgICAgICAg
ICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX1NUT1Asc3RyaW5nKCJTdG9wIikpKTsKICAgICAg
ICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX0xBTkdVQUdFLHN0cmluZygiTGFuZ3VhZ2Ui
KSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfQ0FMSUJSQVRJT04sc3Ry
aW5nKCJDYWxpYnJhdGlvbiBzeXN0ZW0iKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2Vf
cGFpcihMQkxfTE9BRENFTEwsc3RyaW5nKCJMb2FkIGNlbGwgdmFsdWUiKSkpOwogICAgICAgICAg
ICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfV0VJR1RILHN0cmluZygiV2VpZ3RoIikpKTsKICAg
ICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX1RJTEVTLHN0cmluZygiVGlsZXMiKSkp
OwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihMQkxfUkVQT1JUT0Ysc3RyaW5nKCJS
ZXBvcnQgb2Y6IikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTEJMX1BSSU5U
U1BFUlNIT1Qsc3RyaW5nKCJUaWxlcyBwZXIgcHJpbnQ6IikpKTsKICAgICAgICAgICAgICAgIGlu
c2VydChtYWtlX3BhaXIoTEJMX0hFTFAsc3RyaW5nKCJGdW5jdGlvbnMgYWNjZXNzaWJsZSB2aWEg
a2V5Ym9hcmQ6XG5jIC0gbWFjaGluZSBjb25maWd1cmF0aW9uXG5zIC0gc3lub3B0aWNcbnEgLSBx
dWl0IGFwcGxpY2F0aW9uIiApKSk7CgoKCgoKCiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9w
YWlyKE1TR19DVEwsc3RyaW5nKCJNMDEuIENvbW11bmljYXRpb24gd2l0aCBjb250cm9sIHByb2Nl
c3MgaW50ZXJydXB0ZWQiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0df
Q1RFLHN0cmluZygiTTAyLiBDb21tdW5pY2F0aW9uIHdpdGggY29udHJvbCBwcm9jZXNzIHJlc3Rv
cmVkIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTVNHX0VNRyxzdHJpbmco
Ik0wMy4gRW1lcmdlbmN5IikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTVNH
X05SRSxzdHJpbmcoIk0wNC4gQ29udHJvbCBwcm9jZXNzIGRpZG4ndCBhY2tub3dsZWRnZWQgdGhl
IGxhc3QgY29tbWFuZC5cblRoZSBzeXN0ZW0gY291bGQgYmUgbm93IGluIGFuIGFub21hbG91cyBz
dGF0ZS4iCgoKICAgICAgICAgICAgICAgICkpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtl
X3BhaXIoTVNHX0NOMSxzdHJpbmcoIk0wNS4gQ29tcG9uZW50IDEgZGVwb3QgaXMgZW1wdHkiKSkp
OwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfQ04yLHN0cmluZygiTTA2LiBD
b21wb25lbnQgMiBkZXBvdCBpcyBlbXB0eSIpKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFr
ZV9wYWlyKE1TR19DTjMsc3RyaW5nKCJNMDcuIENvbXBvbmVudCAzIGRlcG90IGlzIGVtcHR5Iikp
KTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTVNHX0gyTyxzdHJpbmcoIk0wOC4g
T3V0IG9mIHdhdGVyIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTVNHX1dF
SUdUSF9FWENFRURFRCxzdHJpbmcoIk0wOS4gVGhlIHN1bSBvZiBjb21wb25lbnRzJyBhbmQgd2F0
ZXIncyB3ZWlndGggaXMgaGlnaGVyIHRoYW4gdGhlIG1heGltdW0gbWl4ZXIgY2FwYWNpdHkuIgoK
CiAgICAgICAgICAgICAgICApKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKE1T
R19DT05GSVJNTUFOVUFMLHN0cmluZygiTTEwLiBEbyB5b3UgcmVhbGx5IHdhbnQgc3dpdGNoIHRv
IG1hbnVhbCBtb2RlIHdoaWxlIGluIGN5Y2xlP1xuVXNpbmcgbWFudWFsIGNvbW1hbmRzIGR1cmlu
ZyBjeWNsZSBjYW4gcHV0IHRoZSBtYWNoaW5lIGluIGFuIGFub21hbG91cyBzdGF0ZSBhbmQgZGFt
YWdlIHRoZSBwcm9kdWN0aW9uLiBJdCBpcyByZWNvbW1lbmRlZCB0byBzdG9wIGN5Y2xlIGFuZCBU
SEVOIHN3aXRjaCB0byBtYW51YWwuIgoKCgoKCgogICAgICAgICAgICAgICAgKSkpOwogICAgICAg
ICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfU0tJUEZBSUxVUkUsc3RyaW5nKCJNMTEuIFRo
ZSBza2lwcGVyIHN0b3BwZWQgaW4gYW4gaW50ZXJtZWRpYXRlIHBvc2l0aW9uLlxuUGxlYXNlIGNo
ZWNrLCB0aGVuIHByZXNzIFJldHJ5IHRvIHJlcGVhdCB0aGUgb3BlcmF0aW9uIG9yIEFib3J0IHRv
IHN0b3AgY3ljbGUuIgoKCgogICAgICAgICAgICAgICAgKSkpOwogICAgICAgICAgICAgICAgaW5z
ZXJ0KG1ha2VfcGFpcihNU0dfRE9PUkZBSUxVUkUsc3RyaW5nKCJNMTIuIFRoZSBtaXhpbmcgZG9v
ciBzdG9wcGVkIGluIGFuIGludGVybWVkaWF0ZSBwb3NpdGlvbi5cblBsZWFzZSBjaGVjaywgdGhl
biBwcmVzcyBSZXRyeSB0byByZXBlYXQgdGhlIG9wZXJhdGlvbiBvciBBYm9ydCB0byBzdG9wIGN5
Y2xlLiIKCgoKICAgICAgICAgICAgICAgICkpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtl
X3BhaXIoTVNHX01PVE9SRkFVTFQsc3RyaW5nKCJNMTMuIE1vdG9yIGZhdWx0IC0gY3ljbGUgYWJv
cnRlZC5cbiBQbGVhc2UgbG9jYWxpc2Ugb24gdGhlIHN5bm9wdGljIHRoZSBtb3RvciB3aG8gZ2Vu
ZXJhdGVkIHRoZSBmYXVsdCwgdGhlIHJlbW92ZSB0aGUgY2F1c2UuIgoKCgogICAgICAgICAgICAg
ICAgKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfQ0hFQ0tTS0lQLHN0
cmluZygiTTE0LiBUaGUgc2tpcHBlciBzdGF0ZSBpcyB1bmtub3duOiBpdCBjb3VsZCBjb250YWlu
IHNvbWUgbWF0ZXJpYWwsIG9yIG5vdC5cbiBQcmVzcyBDb250aW51ZSBmb3IgYXV0b21hdGljIGVt
cHR5IG91dCwgb3IgU3RvcCB0byBzdG9wIHRoZSBjeWNsZS4iCgoKCgogICAgICAgICAgICAgICAg
KSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfQ0hFQ0tNSVgsc3RyaW5n
KCJNMTUuIFRoZSBtaXhlciBzdGF0ZSBpcyB1bmtub3duOiBpdCBjb3VsZCBjb250YWluIHNvbWUg
bWF0ZXJpYWwsIG9yIG5vdC5cbiBQcmVzcyBDb250aW51ZSBmb3IgYXV0b21hdGljIGVtcHR5IG91
dCwgb3IgU3RvcCB0byBzdG9wIHRoZSBjeWNsZS4iCgoKCgoKICAgICAgICAgICAgICAgICkpKTsK
ICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoTVNHX0NIRUNLQkVMVCxzdHJpbmcoIk0x
Ni4gVGhlIGRvc2luZyBiZWx0IHN0YXRlIGlzIHVua25vd246IGl0IGNvdWxkIGhvbGQgc29tZSBt
YXRlcmlhbCwgb3Igbm90LlxuIFByZXNzIENvbnRpbnVlIGZvciBhdXRvbWF0aWMgZW1wdHkgb3V0
LCBvciBTdG9wIHRvIHN0b3AgdGhlIGN5Y2xlLiIKCgoKCiAgICAgICAgICAgICAgICApKSk7Cgog
ICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihQUk5fUkVQT1JULHN0cmluZygiUHJvZHVj
dGlvbiByZXBvcnQgb24gIikpKTsKICAgICAgICAgICAgICAgIGluc2VydChtYWtlX3BhaXIoUFJO
X1BBUlRJQUwsc3RyaW5nKCJDb21wb25lbnQgdXNlIChwYXJ0aWFsKToiKSkpOwogICAgICAgICAg
ICAgICAgaW5zZXJ0KG1ha2VfcGFpcihQUk5fVE9UQUwsc3RyaW5nKCJDb21wb25lbnQgdXNlIChw
YXJ0aWFsKToiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihQUk5fUFJJTlRT
LHN0cmluZygiVGlsZXMgcHJpbnRlZDoiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2Vf
cGFpcihQUk5fQVZHQ09TVCxzdHJpbmcoIkF2ZyBjb3N0IHBlciB0aWxlOiIpKSk7CgogICAgICAg
ICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfRVJSTlVMTFdFSUdUSCxzdHJpbmcoIk0xNy4g
VGhlIHdlaWd0aCBpbnNlcnRlZCBpcyB3cm9uZy5cblBsZWFzZSBjb3JyZWN0IG9yIGFib3J0IHRo
ZSBjYWxpYnJhdGlvbi4iCgoKICAgICAgICAgICAgICAgICkpKTsKICAgICAgICAgICAgICAgIGlu
c2VydChtYWtlX3BhaXIoTVNHX0VSUlJFRixzdHJpbmcoIk0xOC4gVGhlIHJlZmVyZW5jZSB3ZWln
dGggY2Fubm90IGJlIGxvd2VyIHRoYW4gdGhlIHRhcmUuXG5QbGVhc2UgY29ycmVjdCBvciBhYm9y
dCB0aGUgY2FsaWJyYXRpb24uIgoKCgogICAgICAgICAgICAgICAgKSkpOwoKCiAgICAgICAgICAg
ICAgICBpbnNlcnQobWFrZV9wYWlyKE1TR19DQUxTVEFSVCxzdHJpbmcoIkNBTElCUkFUSU9OIFBS
T0NFRFVSRTpcblBIQVNFIDEpIENvbXBsZXRlbHkgZW1wdHkgb3V0IHRoZSBkb3NpbmcgYmVsdFxu
UEhBU0UgMikgQWNxdWlyZSB0aGUgd2VpZ3RoIGJ5IHByZXNzaW5nIFpFUk8iCgoKCiAgICAgICAg
ICAgICAgICApKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWlyKE1TR19DQUxSRUFE
V0VJR1RILHN0cmluZygiUEhBU0UgMykgUHV0IG9uIHRoZSBiZWx0IGEga25vd24gd2VpZ3RoXG5Q
SEFTRSA0KSBXcml0ZSBkb3duIHRoZSB3ZWlndGggaW4gdGhlIGFwcHJvcHJpYXRlIHRleHQgYm94
IgoKCiAgICAgICAgICAgICAgICApKSk7CiAgICAgICAgICAgICAgICBpbnNlcnQobWFrZV9wYWly
KE1TR19DQUxTRVRSRUZFUkVOQ0Usc3RyaW5nKCJQSEFTRSA1KSBBY3F1aXJlIHRoZSByZWZlcmVu
Y2Ugd2VpZ3RoIGJ5IHByZXNzaW5nIFJFRi4iCgogICAgICAgICAgICAgICAgKSkpOwogICAgICAg
ICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihNU0dfQ0FMRU5ELHN0cmluZygiVGhlIG1hY2hpbmUg
aXMgbm93IGNhbGlicmF0ZWQiKSkpOwogICAgICAgICAgICAgICAgaW5zZXJ0KG1ha2VfcGFpcihM
QkxfVElNRUZPUk1BVCxzdHJpbmcoIiVtLyVkLyVZIikpKTsKICAgICAgICAgICAgICAgIGluc2Vy
dChtYWtlX3BhaXIoTEJMX1RJTUVGT1JNQVRfSElTVCxzdHJpbmcoIiVtLyVkLyVZIChvbmx5IHRv
dGFscykiKSkpOwogICAgICAgIH0KfQoKY29uc3QgY2hhciogVExvb2t1cFRhYmxlOjpUZXh0T2Yo
aW50IG5Db2RlKQp7CgogICAgICAgIGl0ZXJJMlMgaXRlciA9IGZpbmQobkNvZGUpOwogICAgICAg
IGlmIChpdGVyICE9IGVuZCgpKQogICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZC5j
X3N0cigpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJldHVybiAiVW5rbm93biBtZXNz
YWdlIjsKfQo=


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: c++/8226: g++ unable to complete compilation
@ 2002-10-25 15:25 bangerth
  0 siblings, 0 replies; 2+ messages in thread
From: bangerth @ 2002-10-25 15:25 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, kalbun, nobody

Synopsis: g++ unable to complete compilation

State-Changed-From-To: open->closed
State-Changed-By: bangerth
State-Changed-When: Fri Oct 25 15:25:03 2002
State-Changed-Why:
    I cannot reproduce this, even with -O3. With gcc3.2.1pre
    and 3.3 CVS, the compile times are two to three times as
    long as with 2.95, but memory requirements are not much
    higher.
    
    Note also that gcc2.96 is not (and has never been) an
    officially supported version of gcc. You should contact
    Red Hat or Mandrake if this is important to you.
    
    For those wanting to reproduce my experiments, I attach
    a modified version of the file that can also be compiled
    with recent gccs (add std:: and typename in some places,
    etc, but nothing fundamental).

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=8226


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2002-10-25 22:25 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-10-14 12:46 c++/8226: g++ unable to complete compilation kalbun
2002-10-25 15:25 bangerth

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).