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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

c++/5663: g++ crashes while crosscompiling from linux to mingw



>Number:         5663
>Category:       c++
>Synopsis:       g++ crashes while crosscompiling from linux to mingw
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Feb 11 18:36:01 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     adam@xwt.org
>Release:        latest CVS
>Organization:
>Environment:
linux
>Description:
../../../gcc/libjava/java/net/natPlainDatagramSocketImpl.cc:375: Internal
   compiler error in make_decl_rtl, at varasm.c:835
>How-To-Repeat:

>Fix:

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

IyAxICIuLi8uLi8uLi9nY2MvbGliamF2YS9qYXZhL25ldC9uYXRQbGFpbkRhdGFncmFtU29ja2V0
SW1wbC5jYyIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21tYW5kIGxpbmU+IgojIDEgIi4uLy4u
Ly4uL2djYy9saWJqYXZhL2phdmEvbmV0L25hdFBsYWluRGF0YWdyYW1Tb2NrZXRJbXBsLmNjIgoj
IDkgIi4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEvbmV0L25hdFBsYWluRGF0YWdyYW1Tb2NrZXRJ
bXBsLmNjIgojIDEgImluY2x1ZGUvY29uZmlnLmgiIDEKIyAxMCAiLi4vLi4vLi4vZ2NjL2xpYmph
dmEvamF2YS9uZXQvbmF0UGxhaW5EYXRhZ3JhbVNvY2tldEltcGwuY2MiIDIKIyAyMCAiLi4vLi4v
Li4vZ2NjL2xpYmphdmEvamF2YS9uZXQvbmF0UGxhaW5EYXRhZ3JhbVNvY2tldEltcGwuY2MiCiMg
MSAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvaW5jbHVkZS9wb3NpeC5oIiAxCiMgMTYgIi4uLy4uLy4u
L2djYy9saWJqYXZhL2luY2x1ZGUvcG9zaXguaCIKIyAxICIvdXNyL2xvY2FsL2djYy9pNjg2LXBj
LW1pbmd3MzIvaW5jbHVkZS90aW1lLmgiIDEgMwojIDMxICIvdXNyL2xvY2FsL2djYy9pNjg2LXBj
LW1pbmd3MzIvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy9pNjg2LXBjLW1p
bmd3MzIvaW5jbHVkZS9fbWluZ3cuaCIgMSAzCiMgMzIgIi91c3IvbG9jYWwvZ2NjL2k2ODYtcGMt
bWluZ3czMi9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKCgojIDEgIi9ob21lL21lZ2Fjei9nY2MtYmlu
L2djYy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMDEgIi9ob21lL21lZ2Fjei9nY2MtYmluL2dj
Yy9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyAzNyAi
L3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgoKCgoj
IDEgIi91c3IvbG9jYWwvZ2NjL2k2ODYtcGMtbWluZ3czMi9pbmNsdWRlL3N5cy90eXBlcy5oIiAx
IDMKIyAzOCAiL3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMyL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDMKIyAxICIvaG9tZS9tZWdhY3ovZ2NjLWJpbi9nY2MvaW5jbHVkZS9zdGRkZWYuaCIgMSAz
CiMgMTQ3ICIvaG9tZS9tZWdhY3ovZ2NjLWJpbi9nY2MvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBl
ZGVmIGludCBwdHJkaWZmX3Q7CiMgMzkgIi91c3IvbG9jYWwvZ2NjL2k2ODYtcGMtbWluZ3czMi9p
bmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKCgp0eXBlZGVmIGxvbmcgdGltZV90OwojIDUzICIv
dXNyL2xvY2FsL2djYy9pNjg2LXBjLW1pbmd3MzIvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBl
ZGVmIGxvbmcgX29mZl90OwoKCnR5cGVkZWYgX29mZl90IG9mZl90OwoKCgoKCgoKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgX2Rldl90OwoKCgoKCnR5cGVkZWYgX2Rldl90IGRldl90OwoKCgoKCgp0eXBl
ZGVmIHNob3J0IF9pbm9fdDsKCgp0eXBlZGVmIF9pbm9fdCBpbm9fdDsKCgoKCgoKdHlwZWRlZiBp
bnQgX3BpZF90OwoKCnR5cGVkZWYgX3BpZF90IHBpZF90OwoKCgoKCgp0eXBlZGVmIHVuc2lnbmVk
IHNob3J0IF9tb2RlX3Q7CgoKdHlwZWRlZiBfbW9kZV90IG1vZGVfdDsKCgoKCgoKdHlwZWRlZiBp
bnQgX3NpZ3NldF90OwoKCnR5cGVkZWYgX3NpZ3NldF90IHNpZ3NldF90OwojIDQzICIvdXNyL2xv
Y2FsL2djYy9pNjg2LXBjLW1pbmd3MzIvaW5jbHVkZS90aW1lLmgiIDIgMwojIDY4ICIvdXNyL2xv
Y2FsL2djYy9pNjg2LXBjLW1pbmd3MzIvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRlZiBsb25nIGNs
b2NrX3Q7CiMgNzcgIi91c3IvbG9jYWwvZ2NjL2k2ODYtcGMtbWluZ3czMi9pbmNsdWRlL3RpbWUu
aCIgMwpzdHJ1Y3QgdG0KewogICAgICAgIGludCB0bV9zZWM7CiAgICAgICAgaW50IHRtX21pbjsK
ICAgICAgICBpbnQgdG1faG91cjsKICAgICAgICBpbnQgdG1fbWRheTsKICAgICAgICBpbnQgdG1f
bW9uOwogICAgICAgIGludCB0bV95ZWFyOwogICAgICAgIGludCB0bV93ZGF5OwogICAgICAgIGlu
dCB0bV95ZGF5OwogICAgICAgIGludCB0bV9pc2RzdDsKCn07CgoKZXh0ZXJuICJDIiB7CgoKY2xv
Y2tfdCBjbG9jayAodm9pZCk7CnRpbWVfdCB0aW1lICh0aW1lX3QqKTsKZG91YmxlIGRpZmZ0aW1l
ICh0aW1lX3QsIHRpbWVfdCk7CnRpbWVfdCBta3RpbWUgKHN0cnVjdCB0bSopOwojIDExMCAiL3Vz
ci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMyL2luY2x1ZGUvdGltZS5oIiAzCmNoYXIqIGFzY3Rp
bWUgKGNvbnN0IHN0cnVjdCB0bSopOwpjaGFyKiBjdGltZSAoY29uc3QgdGltZV90Kik7CnN0cnVj
dCB0bSogZ210aW1lIChjb25zdCB0aW1lX3QqKTsKc3RydWN0IHRtKiBsb2NhbHRpbWUgKGNvbnN0
IHRpbWVfdCopOwoKCnNpemVfdCBzdHJmdGltZSAoY2hhciosIHNpemVfdCwgY29uc3QgY2hhcios
IGNvbnN0IHN0cnVjdCB0bSopOwoKc2l6ZV90IHdjc2Z0aW1lICh3Y2hhcl90Kiwgc2l6ZV90LCBj
b25zdCB3Y2hhcl90KiwgY29uc3Qgc3RydWN0IHRtKik7CgoKZXh0ZXJuIHZvaWQgX3R6c2V0ICh2
b2lkKTsKCgpleHRlcm4gdm9pZCB0enNldCAodm9pZCk7CgoKc2l6ZV90IHN0cmZ0aW1lKGNoYXIq
LCBzaXplX3QsIGNvbnN0IGNoYXIqLCBjb25zdCBzdHJ1Y3QgdG0qKTsKY2hhciogX3N0cmRhdGUo
Y2hhciopOwpjaGFyKiBfc3RydGltZShjaGFyKik7CiMgMTQyICIvdXNyL2xvY2FsL2djYy9pNjg2
LXBjLW1pbmd3MzIvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIGludCogX19wX19kYXlsaWdodCAo
dm9pZCk7CmV4dGVybiBsb25nKiBfX3BfX3RpbWV6b25lICh2b2lkKTsKZXh0ZXJuIGNoYXIqKiBf
X3BfX3R6bmFtZSAodm9pZCk7CgpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gaW50
IF9kYXlsaWdodDsKX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIGxvbmcgX3RpbWV6
b25lOwpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gY2hhciAqX3R6bmFtZVsyXTsK
IyAxODAgIi91c3IvbG9jYWwvZ2NjL2k2ODYtcGMtbWluZ3czMi9pbmNsdWRlL3RpbWUuaCIgMwpf
X2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gaW50IGRheWxpZ2h0OwpfX2F0dHJpYnV0
ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gbG9uZyB0aW1lem9uZTsKX19hdHRyaWJ1dGVfXygoZGxs
aW1wb3J0KSkgZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgoKCgp3Y2hhcl90ICogX3dhc2N0aW1l
KGNvbnN0IHN0cnVjdCB0bSopOwp3Y2hhcl90ICogX3djdGltZShjb25zdCB0aW1lX3QqKTsKd2No
YXJfdCogX3dzdHJkYXRlKHdjaGFyX3QqKTsKd2NoYXJfdCogX3dzdHJ0aW1lKHdjaGFyX3QqKTsK
IyAyMTMgIi91c3IvbG9jYWwvZ2NjL2k2ODYtcGMtbWluZ3czMi9pbmNsdWRlL3RpbWUuaCIgMwp9
CiMgMTcgIi4uLy4uLy4uL2djYy9saWJqYXZhL2luY2x1ZGUvcG9zaXguaCIgMgoKCgojIDEgIi91
c3IvbG9jYWwvZ2NjL2k2ODYtcGMtbWluZ3czMi9pbmNsdWRlL3N5cy90aW1lLmgiIDEgMwojIDIx
ICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbmNsdWRlL3Bvc2l4LmgiIDIKCgoKCgoKCiMgMSAiL3Vz
ci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMyL2luY2x1ZGUvdW5pc3RkLmgiIDEgMwoKCgoKCgoK
IyAxICIvdXNyL2xvY2FsL2djYy9pNjg2LXBjLW1pbmd3MzIvaW5jbHVkZS9pby5oIiAxIDMKIyAz
NiAiL3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMyL2luY2x1ZGUvaW8uaCIgMwojIDEgIi91
c3IvbG9jYWwvZ2NjL2k2ODYtcGMtbWluZ3czMi9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDQyICIv
dXNyL2xvY2FsL2djYy9pNjg2LXBjLW1pbmd3MzIvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL2hv
bWUvbWVnYWN6L2djYy1iaW4vZ2NjL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMyMSAiL2hvbWUv
bWVnYWN6L2djYy1iaW4vZ2NjL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgd2ludF90OwojIDQzICIvdXNyL2xvY2FsL2djYy9pNjg2LXBjLW1pbmd3MzIvaW5jbHVkZS9z
dGRpby5oIiAyIDMKIyAxMjEgIi91c3IvbG9jYWwvZ2NjL2k2ODYtcGMtbWluZ3czMi9pbmNsdWRl
L3N0ZGlvLmgiIDMKdHlwZWRlZiBjaGFyKiB2YV9saXN0OwojIDEzMyAiL3Vzci9sb2NhbC9nY2Mv
aTY4Ni1wYy1taW5ndzMyL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfaW9idWYK
ewogICAgICAgIGNoYXIqIF9wdHI7CiAgICAgICAgaW50IF9jbnQ7CiAgICAgICAgY2hhciogX2Jh
c2U7CiAgICAgICAgaW50IF9mbGFnOwogICAgICAgIGludCBfZmlsZTsKICAgICAgICBpbnQgX2No
YXJidWY7CiAgICAgICAgaW50IF9idWZzaXo7CiAgICAgICAgY2hhciogX3RtcGZuYW1lOwp9IEZJ
TEU7CiMgMTU4ICIvdXNyL2xvY2FsL2djYy9pNjg2LXBjLW1pbmd3MzIvaW5jbHVkZS9zdGRpby5o
IiAzCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGV4dGVybiBGSUxFIF9pb2JbXTsKIyAxNjcg
Ii91c3IvbG9jYWwvZ2NjL2k2ODYtcGMtbWluZ3czMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJu
ICJDIiB7CgoKCgoKRklMRSogZm9wZW4gKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CkZJTEUq
IGZyZW9wZW4gKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgRklMRSopOwppbnQgZmZsdXNoIChG
SUxFKik7CmludCBmY2xvc2UgKEZJTEUqKTsKCmludCByZW1vdmUgKGNvbnN0IGNoYXIqKTsKaW50
IHJlbmFtZSAoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKRklMRSogdG1wZmlsZSAodm9pZCk7
CmNoYXIqIHRtcG5hbSAoY2hhciopOwpjaGFyKiBfdGVtcG5hbSAoY29uc3QgY2hhciosIGNvbnN0
IGNoYXIqKTsKCgpjaGFyKiB0ZW1wbmFtIChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwoKCmlu
dCBzZXR2YnVmIChGSUxFKiwgY2hhciosIGludCwgc2l6ZV90KTsKCnZvaWQgc2V0YnVmIChGSUxF
KiwgY2hhciopOwoKCgoKCmludCBmcHJpbnRmIChGSUxFKiwgY29uc3QgY2hhciosIC4uLik7Cmlu
dCBwcmludGYgKGNvbnN0IGNoYXIqLCAuLi4pOwppbnQgc3ByaW50ZiAoY2hhciosIGNvbnN0IGNo
YXIqLCAuLi4pOwppbnQgX3NucHJpbnRmIChjaGFyKiwgc2l6ZV90LCBjb25zdCBjaGFyKiwgLi4u
KTsKaW50IHZmcHJpbnRmIChGSUxFKiwgY29uc3QgY2hhciosIHZhX2xpc3QpOwppbnQgdnByaW50
ZiAoY29uc3QgY2hhciosIHZhX2xpc3QpOwppbnQgdnNwcmludGYgKGNoYXIqLCBjb25zdCBjaGFy
KiwgdmFfbGlzdCk7CmludCBfdnNucHJpbnRmIChjaGFyKiwgc2l6ZV90LCBjb25zdCBjaGFyKiwg
dmFfbGlzdCk7CgoKCgoKCmludCBmc2NhbmYgKEZJTEUqLCBjb25zdCBjaGFyKiwgLi4uKTsKaW50
IHNjYW5mIChjb25zdCBjaGFyKiwgLi4uKTsKaW50IHNzY2FuZiAoY29uc3QgY2hhciosIGNvbnN0
IGNoYXIqLCAuLi4pOwoKCgoKaW50IGZnZXRjIChGSUxFKik7CmNoYXIqIGZnZXRzIChjaGFyKiwg
aW50LCBGSUxFKik7CmludCBmcHV0YyAoaW50LCBGSUxFKik7CmludCBmcHV0cyAoY29uc3QgY2hh
ciosIEZJTEUqKTsKaW50IGdldGMgKEZJTEUqKTsKaW50IGdldGNoYXIgKHZvaWQpOwpjaGFyKiBn
ZXRzIChjaGFyKik7CmludCBwdXRjIChpbnQsIEZJTEUqKTsKaW50IHB1dGNoYXIgKGludCk7Cmlu
dCBwdXRzIChjb25zdCBjaGFyKik7CmludCB1bmdldGMgKGludCwgRklMRSopOwoKCgoKCnNpemVf
dCBmcmVhZCAodm9pZCosIHNpemVfdCwgc2l6ZV90LCBGSUxFKik7CnNpemVfdCBmd3JpdGUgKGNv
bnN0IHZvaWQqLCBzaXplX3QsIHNpemVfdCwgRklMRSopOwoKCgoKCmludCBmc2VlayAoRklMRSos
IGxvbmcsIGludCk7CmxvbmcgZnRlbGwgKEZJTEUqKTsKdm9pZCByZXdpbmQgKEZJTEUqKTsKIyAy
NTQgIi91c3IvbG9jYWwvZ2NjL2k2ODYtcGMtbWluZ3czMi9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlw
ZWRlZiBsb25nIGxvbmcgZnBvc190OwoKCgoKaW50IGZnZXRwb3MgKEZJTEUqLCBmcG9zX3QqKTsK
aW50IGZzZXRwb3MgKEZJTEUqLCBjb25zdCBmcG9zX3QqKTsKCgoKCgp2b2lkIGNsZWFyZXJyIChG
SUxFKik7CmludCBmZW9mIChGSUxFKik7CmludCBmZXJyb3IgKEZJTEUqKTsKdm9pZCBwZXJyb3Ig
KGNvbnN0IGNoYXIqKTsKCgoKCgoKRklMRSogX3BvcGVuIChjb25zdCBjaGFyKiwgY29uc3QgY2hh
ciopOwppbnQgX3BjbG9zZSAoRklMRSopOwoKCkZJTEUqIHBvcGVuIChjb25zdCBjaGFyKiwgY29u
c3QgY2hhciopOwppbnQgcGNsb3NlIChGSUxFKik7CgoKCgoKaW50IF9mbHVzaGFsbCh2b2lkKTsK
aW50IF9mZ2V0Y2hhciAodm9pZCk7CmludCBfZnB1dGNoYXIgKGludCk7CkZJTEUqIF9mZG9wZW4g
KGludCwgY29uc3QgY2hhciopOwppbnQgX2ZpbGVubyAoRklMRSopOwoKCmludCBmZ2V0Y2hhciAo
dm9pZCk7CmludCBmcHV0Y2hhciAoaW50KTsKRklMRSogZmRvcGVuIChpbnQsIGNvbnN0IGNoYXIq
KTsKaW50IGZpbGVubyAoRklMRSopOwojIDMwNiAiL3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5n
dzMyL2luY2x1ZGUvc3RkaW8uaCIgMwppbnQgZndwcmludGYgKEZJTEUqLCBjb25zdCB3Y2hhcl90
KiwgLi4uKTsKaW50IHdwcmludGYgKGNvbnN0IHdjaGFyX3QqLCAuLi4pOwppbnQgc3dwcmludGYg
KHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90KiwgLi4uKTsKaW50IHZmd3ByaW50ZiAoRklMRSosIGNv
bnN0IHdjaGFyX3QqLCB2YV9saXN0KTsKaW50IHZ3cHJpbnRmIChjb25zdCB3Y2hhcl90KiwgdmFf
bGlzdCk7CmludCB2c3dwcmludGYgKHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90KiwgdmFfbGlzdCk7
CmludCBmd3NjYW5mIChGSUxFKiwgY29uc3Qgd2NoYXJfdCosIC4uLik7CmludCB3c2NhbmYgKGNv
bnN0IHdjaGFyX3QqLCAuLi4pOwppbnQgc3dzY2FuZiAoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdj
aGFyX3QqLCAuLi4pOwp3aW50X3QgZmdldHdjIChGSUxFKik7CndpbnRfdCBmcHV0d2MgKHdjaGFy
X3QsIEZJTEUqKTsKd2ludF90IHVuZ2V0d2MgKHdjaGFyX3QsIEZJTEUqKTsKCndjaGFyX3QqIGZn
ZXR3cyAod2NoYXJfdCosIGludCwgRklMRSopOwppbnQgZnB1dHdzIChjb25zdCB3Y2hhcl90Kiwg
RklMRSopOwp3aW50X3QgZ2V0d2MgKEZJTEUqKTsKd2ludF90IGdldHdjaGFyICh2b2lkKTsKd2No
YXJfdCogX2dldHdzICh3Y2hhcl90Kik7CndpbnRfdCBwdXR3YyAod2ludF90LCBGSUxFKik7Cmlu
dCBfcHV0d3MgKGNvbnN0IHdjaGFyX3QqKTsKd2ludF90IHB1dHdjaGFyICh3aW50X3QpOwpGSUxF
KiBfd2ZvcGVuIChjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopOwpGSUxFKiBfd2ZyZW9w
ZW4gKGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90KiwgRklMRSopOwpGSUxFKiBfd2Zzb3Bl
bihjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCosIGludCk7CndjaGFyX3QqIF93dG1wbmFt
ICh3Y2hhcl90Kik7CndjaGFyX3QqIF93dGVtcG5hbSAoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdj
aGFyX3QqKTsKaW50IF93cmVuYW1lKGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kik7Cmlu
dCBfd3JlbW92ZSAoY29uc3Qgd2NoYXJfdCopOwp2b2lkIF93cGVycm9yKGNvbnN0IHdjaGFyX3Qq
KTsKRklMRSogX3dwb3Blbihjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopOwojIDM2MCAi
L3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMyL2luY2x1ZGUvc3RkaW8uaCIgMwp3aW50X3Qg
X2ZnZXR3Y2hhcih2b2lkKTsKd2ludF90IF9mcHV0d2NoYXIod2ludF90KTsKaW50IF9nZXR3IChG
SUxFKik7CmludCBfcHV0dyAoaW50LCBGSUxFKik7CgoKd2ludF90IGZnZXR3Y2hhcih2b2lkKTsK
d2ludF90IGZwdXR3Y2hhcih3aW50X3QpOwppbnQgZ2V0dyAoRklMRSopOwppbnQgcHV0dyAoaW50
LCBGSUxFKik7CgoKCgoKfQojIDM3ICIvdXNyL2xvY2FsL2djYy9pNjg2LXBjLW1pbmd3MzIvaW5j
bHVkZS9pby5oIiAyIDMKIyA2MCAiL3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMyL2luY2x1
ZGUvaW8uaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX2ZzaXplX3Q7CgoKCgoKCgpzdHJ1Y3Qg
X2ZpbmRkYXRhX3QKewogICAgICAgIHVuc2lnbmVkIGF0dHJpYjsKICAgICAgICB0aW1lX3QgdGlt
ZV9jcmVhdGU7CiAgICAgICAgdGltZV90IHRpbWVfYWNjZXNzOwogICAgICAgIHRpbWVfdCB0aW1l
X3dyaXRlOwogICAgICAgIF9mc2l6ZV90IHNpemU7CiAgICAgICAgY2hhciBuYW1lWygyNjApXTsK
fTsKCnN0cnVjdCBfZmluZGRhdGFpNjRfdCB7CiAgICB1bnNpZ25lZCBhdHRyaWI7CiAgICB0aW1l
X3QgdGltZV9jcmVhdGU7CiAgICB0aW1lX3QgdGltZV9hY2Nlc3M7CiAgICB0aW1lX3QgdGltZV93
cml0ZTsKICAgIGxvbmcgbG9uZyBzaXplOwogICAgY2hhciBuYW1lWygyNjApXTsKfTsKCgoKc3Ry
dWN0IF93ZmluZGRhdGFfdCB7CiAgICAgICAgdW5zaWduZWQgYXR0cmliOwogICAgICAgIHRpbWVf
dCB0aW1lX2NyZWF0ZTsKICAgICAgICB0aW1lX3QgdGltZV9hY2Nlc3M7CiAgICAgICAgdGltZV90
IHRpbWVfd3JpdGU7CiAgICAgICAgX2ZzaXplX3Qgc2l6ZTsKICAgICAgICB3Y2hhcl90IG5hbWVb
KDI2MCldOwp9OwpzdHJ1Y3QgX3dmaW5kZGF0YWk2NF90IHsKICAgIHVuc2lnbmVkIGF0dHJpYjsK
ICAgIHRpbWVfdCB0aW1lX2NyZWF0ZTsKICAgIHRpbWVfdCB0aW1lX2FjY2VzczsKICAgIHRpbWVf
dCB0aW1lX3dyaXRlOwogICAgbG9uZyBsb25nIHNpemU7CiAgICB3Y2hhcl90IG5hbWVbKDI2MCld
Owp9OwoKCgoKCmV4dGVybiAiQyIgewojIDExOSAiL3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5n
dzMyL2luY2x1ZGUvaW8uaCIgMwppbnQgX2ZpbmRmaXJzdCAoY29uc3QgY2hhciosIHN0cnVjdCBf
ZmluZGRhdGFfdCopOwppbnQgX2ZpbmRuZXh0IChpbnQsIHN0cnVjdCBfZmluZGRhdGFfdCopOwpp
bnQgX2ZpbmRjbG9zZSAoaW50KTsKCmludCBfY2hkaXIgKGNvbnN0IGNoYXIqKTsKY2hhciogX2dl
dGN3ZCAoY2hhciosIGludCk7CmludCBfbWtkaXIgKGNvbnN0IGNoYXIqKTsKY2hhciogX21rdGVt
cCAoY2hhciopOwppbnQgX3JtZGlyIChjb25zdCBjaGFyKik7CgoKbG9uZyBsb25nIF9maWxlbGVu
Z3RoaTY0KGludCk7CmxvbmcgX2ZpbmRmaXJzdGk2NChjb25zdCBjaGFyKiwgc3RydWN0IF9maW5k
ZGF0YWk2NF90Kik7CmludCBfZmluZG5leHRpNjQobG9uZywgc3RydWN0IF9maW5kZGF0YWk2NF90
Kik7CmxvbmcgbG9uZyBfbHNlZWtpNjQoaW50LCBsb25nIGxvbmcsIGludCk7CmxvbmcgbG9uZyBf
dGVsbGk2NChpbnQpOwoKCgoKCgppbnQgY2hkaXIgKGNvbnN0IGNoYXIqKTsKY2hhciogZ2V0Y3dk
IChjaGFyKiwgaW50KTsKaW50IG1rZGlyIChjb25zdCBjaGFyKik7CmNoYXIqIG1rdGVtcCAoY2hh
ciopOwppbnQgcm1kaXIgKGNvbnN0IGNoYXIqKTsKCgoKCgp9CiMgMTczICIvdXNyL2xvY2FsL2dj
Yy9pNjg2LXBjLW1pbmd3MzIvaW5jbHVkZS9pby5oIiAzCmV4dGVybiAiQyIgewoKCmludCBfYWNj
ZXNzIChjb25zdCBjaGFyKiwgaW50KTsKaW50IF9jaHNpemUgKGludCwgbG9uZyk7CmludCBfY2xv
c2UgKGludCk7CgoKCmludCBfY3JlYXQgKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CgppbnQgX2R1
cCAoaW50KTsKaW50IF9kdXAyIChpbnQsIGludCk7CmxvbmcgX2ZpbGVsZW5ndGggKGludCk7Cmlu
dCBfZmlsZW5vIChGSUxFKik7CmxvbmcgX2dldF9vc2ZoYW5kbGUgKGludCk7CmludCBfaXNhdHR5
IChpbnQpOwoKCgoKCgoKaW50IF9lb2YgKGludCk7CgoKCmludCBfbG9ja2luZyAoaW50LCBpbnQs
IGxvbmcpOwoKbG9uZyBfbHNlZWsgKGludCwgbG9uZywgaW50KTsKCgppbnQgX29wZW4gKGNvbnN0
IGNoYXIqLCBpbnQsIC4uLik7CgppbnQgX29wZW5fb3NmaGFuZGxlIChsb25nLCBpbnQpOwppbnQg
X3BpcGUgKGludCAqLCB1bnNpZ25lZCBpbnQsIGludCk7CmludCBfcmVhZCAoaW50LCB2b2lkKiwg
dW5zaWduZWQgaW50KTsKCgoKaW50IF9zb3BlbiAoY29uc3QgY2hhciosIGludCwgaW50LCAuLi4p
OwoKbG9uZyBfdGVsbCAoaW50KTsKCmludCBfdW1hc2sgKGludCk7CmludCBfdW5saW5rIChjb25z
dCBjaGFyKik7CmludCBfd3JpdGUgKGludCwgY29uc3Qgdm9pZCosIHVuc2lnbmVkIGludCk7CgoK
CgoKaW50IF93YWNjZXNzKGNvbnN0IHdjaGFyX3QqLCBpbnQpOwppbnQgX3djaG1vZChjb25zdCB3
Y2hhcl90KiwgaW50KTsKaW50IF93Y3JlYXQoY29uc3Qgd2NoYXJfdCosIGludCk7CmxvbmcgX3dm
aW5kZmlyc3Qod2NoYXJfdCosIHN0cnVjdCBfd2ZpbmRkYXRhX3QqKTsKaW50IF93ZmluZG5leHQo
bG9uZywgc3RydWN0IF93ZmluZGRhdGFfdCAqKTsKaW50IF93dW5saW5rKGNvbnN0IHdjaGFyX3Qq
KTsKaW50IF93b3Blbihjb25zdCB3Y2hhcl90KiwgaW50LCAuLi4pOwppbnQgX3dzb3Blbihjb25z
dCB3Y2hhcl90KiwgaW50LCBpbnQsIC4uLik7CndjaGFyX3QgKiBfd21rdGVtcCh3Y2hhcl90Kik7
CmxvbmcgX3dmaW5kZmlyc3RpNjQoY29uc3Qgd2NoYXJfdCosIHN0cnVjdCBfd2ZpbmRkYXRhaTY0
X3QqKTsKaW50IF93ZmluZG5leHRpNjQobG9uZywgc3RydWN0IF93ZmluZGRhdGFpNjRfdCopOwoj
IDI0OCAiL3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMyL2luY2x1ZGUvaW8uaCIgMwppbnQg
YWNjZXNzIChjb25zdCBjaGFyKiwgaW50KTsKaW50IGNoc2l6ZSAoaW50LCBsb25nICk7CmludCBj
bG9zZSAoaW50KTsKaW50IGNyZWF0IChjb25zdCBjaGFyKiwgaW50KTsKaW50IGR1cCAoaW50KTsK
aW50IGR1cDIgKGludCwgaW50KTsKaW50IGVvZiAoaW50KTsKbG9uZyBmaWxlbGVuZ3RoIChpbnQp
OwppbnQgZmlsZW5vIChGSUxFKik7CmludCBpc2F0dHkgKGludCk7CmxvbmcgbHNlZWsgKGludCwg
bG9uZywgaW50KTsKaW50IG9wZW4gKGNvbnN0IGNoYXIqLCBpbnQsIC4uLik7CmludCByZWFkIChp
bnQsIHZvaWQqLCB1bnNpZ25lZCBpbnQpOwppbnQgc29wZW4gKGNvbnN0IGNoYXIqLCBpbnQsIGlu
dCwgLi4uKTsKbG9uZyB0ZWxsIChpbnQpOwppbnQgdW1hc2sgKGludCk7CmludCB1bmxpbmsgKGNv
bnN0IGNoYXIqKTsKaW50IHdyaXRlIChpbnQsIGNvbnN0IHZvaWQqLCB1bnNpZ25lZCBpbnQpOwoj
IDI4NiAiL3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMyL2luY2x1ZGUvaW8uaCIgMwp9CiMg
OSAiL3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoj
IDI5ICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbmNsdWRlL3Bvc2l4LmgiIDIKCgpleHRlcm4gaW50
IF9Kdl9zZWxlY3QgKGludCBuLCBmZF9zZXQgKiwgZmRfc2V0ICosIGZkX3NldCAqLCBzdHJ1Y3Qg
dGltZXZhbCAqKTsKZXh0ZXJuIHZvaWQgX0p2X3BsYXRmb3JtX2dldHRpbWVvZmRheSAoc3RydWN0
IHRpbWV2YWwgKik7CmV4dGVybiB2b2lkIF9Kdl9wbGF0Zm9ybV9pbml0aWFsaXplICh2b2lkKTsK
IyAyMSAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvamF2YS9uZXQvbmF0UGxhaW5EYXRhZ3JhbVNvY2tl
dEltcGwuY2MiIDIKIyAzMCAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvamF2YS9uZXQvbmF0UGxhaW5E
YXRhZ3JhbVNvY2tldEltcGwuY2MiCiMgMSAiL3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMy
L2luY2x1ZGUvZXJybm8uaCIgMSAzCiMgOTYgIi91c3IvbG9jYWwvZ2NjL2k2ODYtcGMtbWluZ3cz
Mi9pbmNsdWRlL2Vycm5vLmgiIDMKZXh0ZXJuICJDIiB7CiMgMTA3ICIvdXNyL2xvY2FsL2djYy9p
Njg2LXBjLW1pbmd3MzIvaW5jbHVkZS9lcnJuby5oIiAzCmludCogX2Vycm5vKCk7CgoKCgp9CiMg
MzEgIi4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEvbmV0L25hdFBsYWluRGF0YWdyYW1Tb2NrZXRJ
bXBsLmNjIiAyCiMgMSAiL3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMyL2luY2x1ZGUvc3Ry
aW5nLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2djYy9pNjg2LXBjLW1pbmd3MzIvaW5jbHVkZS9z
dHJpbmcuaCIgMwojIDEgIi9ob21lL21lZ2Fjei9nY2MtYmluL2djYy9pbmNsdWRlL3N0ZGRlZi5o
IiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMyL2luY2x1ZGUvc3RyaW5n
LmgiIDIgMwoKCgoKCmV4dGVybiAiQyIgewoKCgoKCnZvaWQqIG1lbWNociAoY29uc3Qgdm9pZCos
IGludCwgc2l6ZV90KTsKaW50IG1lbWNtcCAoY29uc3Qgdm9pZCosIGNvbnN0IHZvaWQqLCBzaXpl
X3QpOwp2b2lkKiBtZW1jcHkgKHZvaWQqLCBjb25zdCB2b2lkKiwgc2l6ZV90KTsKdm9pZCogbWVt
bW92ZSAodm9pZCosIGNvbnN0IHZvaWQqLCBzaXplX3QpOwp2b2lkKiBtZW1zZXQgKHZvaWQqLCBp
bnQsIHNpemVfdCk7CmNoYXIqIHN0cmNhdCAoY2hhciosIGNvbnN0IGNoYXIqKTsKY2hhciogc3Ry
Y2hyIChjb25zdCBjaGFyKiwgaW50KTsKaW50IHN0cmNtcCAoY29uc3QgY2hhciosIGNvbnN0IGNo
YXIqKTsKaW50IHN0cmNvbGwgKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CmNoYXIqIHN0cmNw
eSAoY2hhciosIGNvbnN0IGNoYXIqKTsKc2l6ZV90IHN0cmNzcG4gKGNvbnN0IGNoYXIqLCBjb25z
dCBjaGFyKik7CmNoYXIqIHN0cmVycm9yIChpbnQpOwpjaGFyKiBfc3RyZXJyb3IgKGNvbnN0IGNo
YXIgKik7CnNpemVfdCBzdHJsZW4gKGNvbnN0IGNoYXIqKTsKY2hhciogc3RybmNhdCAoY2hhcios
IGNvbnN0IGNoYXIqLCBzaXplX3QpOwppbnQgc3RybmNtcCAoY29uc3QgY2hhciosIGNvbnN0IGNo
YXIqLCBzaXplX3QpOwpjaGFyKiBzdHJuY3B5IChjaGFyKiwgY29uc3QgY2hhciosIHNpemVfdCk7
CmNoYXIqIHN0cnBicmsgKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CmNoYXIqIHN0cnJjaHIg
KGNvbnN0IGNoYXIqLCBpbnQpOwpzaXplX3Qgc3Ryc3BuIChjb25zdCBjaGFyKiwgY29uc3QgY2hh
ciopOwpjaGFyKiBzdHJzdHIgKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CmNoYXIqIHN0cnRv
ayAoY2hhciosIGNvbnN0IGNoYXIqKTsKc2l6ZV90IHN0cnhmcm0gKGNoYXIqLCBjb25zdCBjaGFy
Kiwgc2l6ZV90KTsKCgoKCgp2b2lkKiBfbWVtY2NweSAodm9pZCosIGNvbnN0IHZvaWQqLCBpbnQs
IHNpemVfdCk7CmludCBfbWVtaWNtcCAoY29uc3Qgdm9pZCosIGNvbnN0IHZvaWQqLCBzaXplX3Qp
OwpjaGFyKiBfc3RyZHVwIChjb25zdCBjaGFyKik7CmludCBfc3RyY21waSAoY29uc3QgY2hhcios
IGNvbnN0IGNoYXIqKTsKaW50IF9zdHJpY21wIChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwpp
bnQgX3N0cmljb2xsIChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwpjaGFyKiBfc3RybHdyIChj
aGFyKik7CmludCBfc3RybmljbXAgKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsK
Y2hhciogX3N0cm5zZXQgKGNoYXIqLCBpbnQsIHNpemVfdCk7CmNoYXIqIF9zdHJyZXYgKGNoYXIq
KTsKY2hhciogX3N0cnNldCAoY2hhciosIGludCk7CmNoYXIqIF9zdHJ1cHIgKGNoYXIqKTsKdm9p
ZCBfc3dhYiAoY29uc3QgY2hhciosIGNoYXIqLCBzaXplX3QpOwoKCgoKdW5zaWduZWQgY2hhciog
X21ic2NociAodW5zaWduZWQgY2hhciosIHVuc2lnbmVkIGNoYXIqKTsKdW5zaWduZWQgY2hhciog
X21ic25jYXQgKHVuc2lnbmVkIGNoYXIqLCBjb25zdCB1bnNpZ25lZCBjaGFyKiwgc2l6ZV90KTsK
dW5zaWduZWQgY2hhciogX21ic3RvayAodW5zaWduZWQgY2hhciosIHVuc2lnbmVkIGNoYXIqKTsK
CgppbnQgX3N0cm5jb2xsKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKaW50IF9z
dHJuaWNvbGwoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBzaXplX3QpOwoKCgoKCgoKd2NoYXJf
dCogd2NzY2F0ICh3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopOwp3Y2hhcl90KiB3Y3NjaHIgKGNv
bnN0IHdjaGFyX3QqLCB3Y2hhcl90KTsKaW50IHdjc2NtcCAoY29uc3Qgd2NoYXJfdCosIGNvbnN0
IHdjaGFyX3QqKTsKaW50IHdjc2NvbGwgKGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kik7
CndjaGFyX3QqIHdjc2NweSAod2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKTsKc2l6ZV90IHdjc2Nz
cG4gKGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kik7CgpzaXplX3Qgd2NzbGVuIChjb25z
dCB3Y2hhcl90Kik7CndjaGFyX3QqIHdjc25jYXQgKHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kiwg
c2l6ZV90KTsKaW50IHdjc25jbXAoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCBzaXpl
X3QpOwp3Y2hhcl90KiB3Y3NuY3B5KHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kiwgc2l6ZV90KTsK
d2NoYXJfdCogd2NzcGJyayhjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopOwp3Y2hhcl90
KiB3Y3NyY2hyKGNvbnN0IHdjaGFyX3QqLCB3Y2hhcl90KTsKc2l6ZV90IHdjc3Nwbihjb25zdCB3
Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopOwp3Y2hhcl90KiB3Y3NzdHIoY29uc3Qgd2NoYXJfdCos
IGNvbnN0IHdjaGFyX3QqKTsKd2NoYXJfdCogd2NzdG9rKHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90
Kik7CnNpemVfdCB3Y3N4ZnJtKHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kiwgc2l6ZV90KTsKIyAx
MzcgIi91c3IvbG9jYWwvZ2NjL2k2ODYtcGMtbWluZ3czMi9pbmNsdWRlL3N0cmluZy5oIiAzCndj
aGFyX3QqIF93Y3NkdXAgKHdjaGFyX3QqKTsKaW50IF93Y3NpY21wIChjb25zdCB3Y2hhcl90Kiwg
Y29uc3Qgd2NoYXJfdCopOwppbnQgX3djc2ljb2xsIChjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2No
YXJfdCopOwp3Y2hhcl90KiBfd2NzbHdyICh3Y2hhcl90Kik7CmludCBfd2NzbmljbXAgKGNvbnN0
IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kiwgc2l6ZV90KTsKd2NoYXJfdCogX3djc25zZXQgKHdj
aGFyX3QqLCB3Y2hhcl90LCBzaXplX3QpOwp3Y2hhcl90KiBfd2NzcmV2ICh3Y2hhcl90Kik7Cndj
aGFyX3QqIF93Y3NzZXQgKHdjaGFyX3QqLCB3Y2hhcl90KTsKd2NoYXJfdCogX3djc3VwciAod2No
YXJfdCopOwoKCmludCBfd2NzbmNvbGwoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCBz
aXplX3QpOwppbnQgX3djc25pY29sbChjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCosIHNp
emVfdCk7CiMgMTY1ICIvdXNyL2xvY2FsL2djYy9pNjg2LXBjLW1pbmd3MzIvaW5jbHVkZS9zdHJp
bmcuaCIgMwp2b2lkKiBtZW1jY3B5ICh2b2lkKiwgY29uc3Qgdm9pZCosIGludCwgc2l6ZV90KTsK
aW50IG1lbWljbXAgKGNvbnN0IHZvaWQqLCBjb25zdCB2b2lkKiwgc2l6ZV90KTsKY2hhciogc3Ry
ZHVwIChjb25zdCBjaGFyKik7CmludCBzdHJjbXBpIChjb25zdCBjaGFyKiwgY29uc3QgY2hhciop
OwppbnQgc3RyaWNtcCAoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKaW50IHN0cmNhc2VjbXAg
KGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CmludCBzdHJpY29sbCAoY29uc3QgY2hhciosIGNv
bnN0IGNoYXIqKTsKY2hhciogc3RybHdyIChjaGFyKik7CmludCBzdHJuaWNtcCAoY29uc3QgY2hh
ciosIGNvbnN0IGNoYXIqLCBzaXplX3QpOwppbnQgc3RybmNhc2VjbXAgKGNvbnN0IGNoYXIqLCBj
b25zdCBjaGFyKiwgc2l6ZV90KTsKY2hhciogc3RybnNldCAoY2hhciosIGludCwgc2l6ZV90KTsK
Y2hhciogc3RycmV2IChjaGFyKik7CmNoYXIqIHN0cnNldCAoY2hhciosIGludCk7CmNoYXIqIHN0
cnVwciAoY2hhciopOwoKdm9pZCBzd2FiIChjb25zdCBjaGFyKiwgY2hhciosIHNpemVfdCk7CgoK
CmludCB3Y3NjbXBpIChjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopOwp3Y2hhcl90KiB3
Y3NkdXAgKHdjaGFyX3QqKTsKaW50IHdjc2ljbXAgKGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hh
cl90Kik7CmludCB3Y3NpY29sbCAoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKTsKd2No
YXJfdCogd2NzbHdyICh3Y2hhcl90Kik7CmludCB3Y3NuaWNtcCAoY29uc3Qgd2NoYXJfdCosIGNv
bnN0IHdjaGFyX3QqLCBzaXplX3QpOwp3Y2hhcl90KiB3Y3Nuc2V0ICh3Y2hhcl90Kiwgd2NoYXJf
dCwgc2l6ZV90KTsKd2NoYXJfdCogd2NzcmV2ICh3Y2hhcl90Kik7CndjaGFyX3QqIHdjc3NldCAo
d2NoYXJfdCosIHdjaGFyX3QpOwp3Y2hhcl90KiB3Y3N1cHIgKHdjaGFyX3QqKTsKCgoKCgoKfQoj
IDMyICIuLi8uLi8uLi9nY2MvbGliamF2YS9qYXZhL25ldC9uYXRQbGFpbkRhdGFncmFtU29ja2V0
SW1wbC5jYyIgMgojIDQyICIuLi8uLi8uLi9nY2MvbGliamF2YS9qYXZhL25ldC9uYXRQbGFpbkRh
dGFncmFtU29ja2V0SW1wbC5jYyIKc3RhdGljIGlubGluZSBpbnQKX0p2X2JpbmQgKGludCBmZCwg
c3RydWN0IHNvY2thZGRyICphZGRyLCBpbnQgYWRkcmxlbikKewogIHJldHVybiA6OmJpbmQgKGZk
LCBhZGRyLCBhZGRybGVuKTsKfQoKCgoKCgojIDEgIi4uLy4uLy4uL2djYy9saWJqYXZhL2djai9j
bmkuaCIgMQojIDE2ICIuLi8uLi8uLi9nY2MvbGliamF2YS9nY2ovY25pLmgiCiMgMSAiLi4vLi4v
Li4vZ2NjL2xpYmphdmEvamF2YS9sYW5nL09iamVjdC5oIiAxCiMgMTQgIi4uLy4uLy4uL2djYy9s
aWJqYXZhL2phdmEvbGFuZy9PYmplY3QuaCIKI3ByYWdtYSBpbnRlcmZhY2UKCiMgMSAiLi4vLi4v
Li4vZ2NjL2xpYmphdmEvZ2NqL2phdmFwcmltcy5oIiAxCiMgMTUgIi4uLy4uLy4uL2djYy9saWJq
YXZhL2djai9qYXZhcHJpbXMuaCIKI3ByYWdtYSBHQ0MgamF2YV9leGNlcHRpb25zCgojIDEgImdj
ai9saWJnY2otY29uZmlnLmgiIDEKIyAxOCAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvZ2NqL2phdmFw
cmltcy5oIiAyCiMgMjkgIi4uLy4uLy4uL2djYy9saWJqYXZhL2djai9qYXZhcHJpbXMuaCIKZXh0
ZXJuICJKYXZhIgp7CiAgdHlwZWRlZiBfX2phdmFfYnl0ZSBqYnl0ZTsKICB0eXBlZGVmIF9famF2
YV9zaG9ydCBqc2hvcnQ7CiAgdHlwZWRlZiBfX2phdmFfaW50IGppbnQ7CiAgdHlwZWRlZiBfX2ph
dmFfbG9uZyBqbG9uZzsKICB0eXBlZGVmIF9famF2YV9mbG9hdCBqZmxvYXQ7CiAgdHlwZWRlZiBf
X2phdmFfZG91YmxlIGpkb3VibGU7CiAgdHlwZWRlZiBfX2phdmFfY2hhciBqY2hhcjsKICB0eXBl
ZGVmIF9famF2YV9ib29sZWFuIGpib29sZWFuOwogIHR5cGVkZWYgamludCBqc2l6ZTsKCgoKICBu
YW1lc3BhY2UgamF2YQogIHsKICAgIG5hbWVzcGFjZSBpbwogICAgewogICAgICBjbGFzcyBCdWZm
ZXJlZElucHV0U3RyZWFtOwogICAgICBjbGFzcyBCdWZmZXJlZE91dHB1dFN0cmVhbTsKICAgICAg
Y2xhc3MgQnVmZmVyZWRSZWFkZXI7CiAgICAgIGNsYXNzIEJ1ZmZlcmVkV3JpdGVyOwogICAgICBj
bGFzcyBCeXRlQXJyYXlJbnB1dFN0cmVhbTsKICAgICAgY2xhc3MgQnl0ZUFycmF5T3V0cHV0U3Ry
ZWFtOwogICAgICBjbGFzcyBDaGFyQXJyYXlSZWFkZXI7CiAgICAgIGNsYXNzIENoYXJBcnJheVdy
aXRlcjsKICAgICAgY2xhc3MgQ2hhckNvbnZlcnNpb25FeGNlcHRpb247CiAgICAgIGNsYXNzIERh
dGFJbnB1dDsKICAgICAgY2xhc3MgRGF0YUlucHV0U3RyZWFtOwogICAgICBjbGFzcyBEYXRhT3V0
cHV0OwogICAgICBjbGFzcyBEYXRhT3V0cHV0U3RyZWFtOwogICAgICBjbGFzcyBFT0ZFeGNlcHRp
b247CiAgICAgIGNsYXNzIEV4dGVybmFsaXphYmxlOwogICAgICBjbGFzcyBGaWxlOwogICAgICBj
bGFzcyBGaWxlRGVzY3JpcHRvcjsKICAgICAgY2xhc3MgRmlsZUZpbHRlcjsKICAgICAgY2xhc3Mg
RmlsZUlucHV0U3RyZWFtOwogICAgICBjbGFzcyBGaWxlTm90Rm91bmRFeGNlcHRpb247CiAgICAg
IGNsYXNzIEZpbGVPdXRwdXRTdHJlYW07CiAgICAgIGNsYXNzIEZpbGVQZXJtaXNzaW9uOwogICAg
ICBjbGFzcyBGaWxlUmVhZGVyOwogICAgICBjbGFzcyBGaWxlV3JpdGVyOwogICAgICBjbGFzcyBG
aWxlbmFtZUZpbHRlcjsKICAgICAgY2xhc3MgRmlsdGVySW5wdXRTdHJlYW07CiAgICAgIGNsYXNz
IEZpbHRlck91dHB1dFN0cmVhbTsKICAgICAgY2xhc3MgRmlsdGVyUmVhZGVyOwogICAgICBjbGFz
cyBGaWx0ZXJXcml0ZXI7CiAgICAgIGNsYXNzIElPRXhjZXB0aW9uOwogICAgICBjbGFzcyBJbnB1
dFN0cmVhbTsKICAgICAgY2xhc3MgSW5wdXRTdHJlYW1SZWFkZXI7CiAgICAgIGNsYXNzIEludGVy
ZmFjZUNvbXBhcmF0b3I7CiAgICAgIGNsYXNzIEludGVycnVwdGVkSU9FeGNlcHRpb247CiAgICAg
IGNsYXNzIEludmFsaWRDbGFzc0V4Y2VwdGlvbjsKICAgICAgY2xhc3MgSW52YWxpZE9iamVjdEV4
Y2VwdGlvbjsKICAgICAgY2xhc3MgTGluZU51bWJlcklucHV0U3RyZWFtOwogICAgICBjbGFzcyBM
aW5lTnVtYmVyUmVhZGVyOwogICAgICBjbGFzcyBNZW1iZXJDb21wYXJhdG9yOwogICAgICBjbGFz
cyBOb3RBY3RpdmVFeGNlcHRpb247CiAgICAgIGNsYXNzIE5vdFNlcmlhbGl6YWJsZUV4Y2VwdGlv
bjsKICAgICAgY2xhc3MgT2JqZWN0SW5wdXQ7CiAgICAgIGNsYXNzIE9iamVjdElucHV0U3RyZWFt
OwogICAgICBjbGFzcyBPYmplY3RJbnB1dFN0cmVhbSRHZXRGaWVsZDsKICAgICAgY2xhc3MgT2Jq
ZWN0SW5wdXRWYWxpZGF0aW9uOwogICAgICBjbGFzcyBPYmplY3RPdXRwdXQ7CiAgICAgIGNsYXNz
IE9iamVjdE91dHB1dFN0cmVhbTsKICAgICAgY2xhc3MgT2JqZWN0T3V0cHV0U3RyZWFtJFB1dEZp
ZWxkOwogICAgICBjbGFzcyBPYmplY3RTdHJlYW1DbGFzczsKICAgICAgY2xhc3MgT2JqZWN0U3Ry
ZWFtQ29uc3RhbnRzOwogICAgICBjbGFzcyBPYmplY3RTdHJlYW1FeGNlcHRpb247CiAgICAgIGNs
YXNzIE9iamVjdFN0cmVhbUZpZWxkOwogICAgICBjbGFzcyBPcHRpb25hbERhdGFFeGNlcHRpb247
CiAgICAgIGNsYXNzIE91dHB1dFN0cmVhbTsKICAgICAgY2xhc3MgT3V0cHV0U3RyZWFtV3JpdGVy
OwogICAgICBjbGFzcyBQaXBlZElucHV0U3RyZWFtOwogICAgICBjbGFzcyBQaXBlZE91dHB1dFN0
cmVhbTsKICAgICAgY2xhc3MgUGlwZWRSZWFkZXI7CiAgICAgIGNsYXNzIFBpcGVkV3JpdGVyOwog
ICAgICBjbGFzcyBQcmludFN0cmVhbTsKICAgICAgY2xhc3MgUHJpbnRXcml0ZXI7CiAgICAgIGNs
YXNzIFB1c2hiYWNrSW5wdXRTdHJlYW07CiAgICAgIGNsYXNzIFB1c2hiYWNrUmVhZGVyOwogICAg
ICBjbGFzcyBSYW5kb21BY2Nlc3NGaWxlOwogICAgICBjbGFzcyBSZWFkZXI7CiAgICAgIGNsYXNz
IFNlcXVlbmNlSW5wdXRTdHJlYW07CiAgICAgIGNsYXNzIFNlcmlhbGl6YWJsZTsKICAgICAgY2xh
c3MgU2VyaWFsaXphYmxlUGVybWlzc2lvbjsKICAgICAgY2xhc3MgU3RyZWFtQ29ycnVwdGVkRXhj
ZXB0aW9uOwogICAgICBjbGFzcyBTdHJlYW1Ub2tlbml6ZXI7CiAgICAgIGNsYXNzIFN0cmluZ0J1
ZmZlcklucHV0U3RyZWFtOwogICAgICBjbGFzcyBTdHJpbmdSZWFkZXI7CiAgICAgIGNsYXNzIFN0
cmluZ1dyaXRlcjsKICAgICAgY2xhc3MgU3luY0ZhaWxlZEV4Y2VwdGlvbjsKICAgICAgY2xhc3Mg
VVRGRGF0YUZvcm1hdEV4Y2VwdGlvbjsKICAgICAgY2xhc3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4
Y2VwdGlvbjsKICAgICAgY2xhc3MgVmFsaWRhdG9yQW5kUHJpb3JpdHk7CiAgICAgIGNsYXNzIFdy
aXRlQWJvcnRlZEV4Y2VwdGlvbjsKICAgICAgY2xhc3MgV3JpdGVyOwogICAgfTsKCiAgICBuYW1l
c3BhY2UgbGFuZwogICAgewogICAgICBjbGFzcyBBYnN0cmFjdE1ldGhvZEVycm9yOwogICAgICBj
bGFzcyBBcml0aG1ldGljRXhjZXB0aW9uOwogICAgICBjbGFzcyBBcnJheUluZGV4T3V0T2ZCb3Vu
ZHNFeGNlcHRpb247CiAgICAgIGNsYXNzIEFycmF5U3RvcmVFeGNlcHRpb247CiAgICAgIGNsYXNz
IEJvb2xlYW47CiAgICAgIGNsYXNzIEJ5dGU7CiAgICAgIGNsYXNzIENQbHVzUGx1c0RlbWFuZ2xl
cjsKICAgICAgY2xhc3MgQ2hhclNlcXVlbmNlOwogICAgICBjbGFzcyBDaGFyYWN0ZXI7CiAgICAg
IGNsYXNzIENoYXJhY3RlciRTdWJzZXQ7CiAgICAgIGNsYXNzIENoYXJhY3RlciRVbmljb2RlQmxv
Y2s7CiAgICAgIGNsYXNzIENsYXNzOwogICAgICBjbGFzcyBDbGFzc0Nhc3RFeGNlcHRpb247CiAg
ICAgIGNsYXNzIENsYXNzQ2lyY3VsYXJpdHlFcnJvcjsKICAgICAgY2xhc3MgQ2xhc3NGb3JtYXRF
cnJvcjsKICAgICAgY2xhc3MgQ2xhc3NMb2FkZXI7CiAgICAgIGNsYXNzIENsYXNzTm90Rm91bmRF
eGNlcHRpb247CiAgICAgIGNsYXNzIENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uOwogICAgICBj
bGFzcyBDbG9uZWFibGU7CiAgICAgIGNsYXNzIENvbXBhcmFibGU7CiAgICAgIGNsYXNzIENvbXBp
bGVyOwogICAgICBjbGFzcyBDb25jcmV0ZVByb2Nlc3M7CiAgICAgIGNsYXNzIERvdWJsZTsKICAg
ICAgY2xhc3MgRXJyb3I7CiAgICAgIGNsYXNzIEV4Y2VwdGlvbjsKICAgICAgY2xhc3MgRXhjZXB0
aW9uSW5Jbml0aWFsaXplckVycm9yOwogICAgICBjbGFzcyBGbG9hdDsKICAgICAgY2xhc3MgSWxs
ZWdhbEFjY2Vzc0Vycm9yOwogICAgICBjbGFzcyBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uOwogICAg
ICBjbGFzcyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb247CiAgICAgIGNsYXNzIElsbGVnYWxNb25p
dG9yU3RhdGVFeGNlcHRpb247CiAgICAgIGNsYXNzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbjsKICAg
ICAgY2xhc3MgSWxsZWdhbFRocmVhZFN0YXRlRXhjZXB0aW9uOwogICAgICBjbGFzcyBJbmNvbXBh
dGlibGVDbGFzc0NoYW5nZUVycm9yOwogICAgICBjbGFzcyBJbmRleE91dE9mQm91bmRzRXhjZXB0
aW9uOwogICAgICBjbGFzcyBJbmhlcml0YWJsZVRocmVhZExvY2FsOwogICAgICBjbGFzcyBJbnN0
YW50aWF0aW9uRXJyb3I7CiAgICAgIGNsYXNzIEluc3RhbnRpYXRpb25FeGNlcHRpb247CiAgICAg
IGNsYXNzIEludGVnZXI7CiAgICAgIGNsYXNzIEludGVybmFsRXJyb3I7CiAgICAgIGNsYXNzIElu
dGVycnVwdGVkRXhjZXB0aW9uOwogICAgICBjbGFzcyBMaW5rYWdlRXJyb3I7CiAgICAgIGNsYXNz
IExvbmc7CiAgICAgIGNsYXNzIE1hdGg7CiAgICAgIGNsYXNzIE5lZ2F0aXZlQXJyYXlTaXplRXhj
ZXB0aW9uOwogICAgICBjbGFzcyBOb0NsYXNzRGVmRm91bmRFcnJvcjsKICAgICAgY2xhc3MgTm9T
dWNoRmllbGRFcnJvcjsKICAgICAgY2xhc3MgTm9TdWNoRmllbGRFeGNlcHRpb247CiAgICAgIGNs
YXNzIE5vU3VjaE1ldGhvZEVycm9yOwogICAgICBjbGFzcyBOb1N1Y2hNZXRob2RFeGNlcHRpb247
CiAgICAgIGNsYXNzIE51bGxQb2ludGVyRXhjZXB0aW9uOwogICAgICBjbGFzcyBOdW1iZXI7CiAg
ICAgIGNsYXNzIE51bWJlckZvcm1hdEV4Y2VwdGlvbjsKICAgICAgY2xhc3MgT2JqZWN0OwogICAg
ICBjbGFzcyBPdXRPZk1lbW9yeUVycm9yOwogICAgICBjbGFzcyBQYWNrYWdlOwogICAgICBjbGFz
cyBQcm9jZXNzOwogICAgICBjbGFzcyBSdW5uYWJsZTsKICAgICAgY2xhc3MgUnVudGltZTsKICAg
ICAgY2xhc3MgUnVudGltZUV4Y2VwdGlvbjsKICAgICAgY2xhc3MgUnVudGltZVBlcm1pc3Npb247
CiAgICAgIGNsYXNzIFNlY3VyaXR5Q29udGV4dDsKICAgICAgY2xhc3MgU2VjdXJpdHlFeGNlcHRp
b247CiAgICAgIGNsYXNzIFNlY3VyaXR5TWFuYWdlcjsKICAgICAgY2xhc3MgU2hvcnQ7CiAgICAg
IGNsYXNzIFN0YWNrT3ZlcmZsb3dFcnJvcjsKICAgICAgY2xhc3MgU3RyaW5nOwogICAgICBjbGFz
cyBTdHJpbmckQ2FzZUluc2Vuc2l0aXZlQ29tcGFyYXRvcjsKICAgICAgY2xhc3MgU3RyaW5nQnVm
ZmVyOwogICAgICBjbGFzcyBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uOwogICAgICBj
bGFzcyBTeXN0ZW07CiAgICAgIGNsYXNzIFRocmVhZDsKICAgICAgY2xhc3MgVGhyZWFkRGVhdGg7
CiAgICAgIGNsYXNzIFRocmVhZEdyb3VwOwogICAgICBjbGFzcyBUaHJlYWRMb2NhbDsKICAgICAg
Y2xhc3MgVGhyZWFkTG9jYWwkVmFsdWU7CiAgICAgIGNsYXNzIFRocm93YWJsZTsKICAgICAgY2xh
c3MgVW5rbm93bkVycm9yOwogICAgICBjbGFzcyBVbnNhdGlzZmllZExpbmtFcnJvcjsKICAgICAg
Y2xhc3MgVW5zdXBwb3J0ZWRDbGFzc1ZlcnNpb25FcnJvcjsKICAgICAgY2xhc3MgVW5zdXBwb3J0
ZWRPcGVyYXRpb25FeGNlcHRpb247CiAgICAgIGNsYXNzIFZNQ2xhc3NMb2FkZXI7CiAgICAgIGNs
YXNzIFZNU2VjdXJpdHlNYW5hZ2VyOwogICAgICBjbGFzcyBWZXJpZnlFcnJvcjsKICAgICAgY2xh
c3MgVmlydHVhbE1hY2hpbmVFcnJvcjsKICAgICAgY2xhc3MgVm9pZDsKICAgICAgbmFtZXNwYWNl
IHJlZgogICAgICB7CiAgICAgICAgY2xhc3MgUGhhbnRvbVJlZmVyZW5jZTsKICAgICAgICBjbGFz
cyBSZWZlcmVuY2U7CiAgICAgICAgY2xhc3MgUmVmZXJlbmNlUXVldWU7CiAgICAgICAgY2xhc3Mg
U29mdFJlZmVyZW5jZTsKICAgICAgICBjbGFzcyBXZWFrUmVmZXJlbmNlOwogICAgICB9OwoKICAg
ICAgbmFtZXNwYWNlIHJlZmxlY3QKICAgICAgewogICAgICAgIGNsYXNzIEFjY2Vzc2libGVPYmpl
Y3Q7CiAgICAgICAgY2xhc3MgQXJyYXk7CiAgICAgICAgY2xhc3MgQ29uc3RydWN0b3I7CiAgICAg
ICAgY2xhc3MgRmllbGQ7CiAgICAgICAgY2xhc3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsK
ICAgICAgICBjbGFzcyBNZW1iZXI7CiAgICAgICAgY2xhc3MgTWV0aG9kOwogICAgICAgIGNsYXNz
IE1vZGlmaWVyOwogICAgICAgIGNsYXNzIFJlZmxlY3RQZXJtaXNzaW9uOwogICAgICB9OwogICAg
fTsKCiAgICBuYW1lc3BhY2UgdXRpbAogICAgewogICAgICBjbGFzcyBBYnN0cmFjdENvbGxlY3Rp
b247CiAgICAgIGNsYXNzIEFic3RyYWN0TGlzdDsKICAgICAgY2xhc3MgQWJzdHJhY3RMaXN0JEFi
c3RyYWN0TGlzdEl0cjsKICAgICAgY2xhc3MgQWJzdHJhY3RNYXA7CiAgICAgIGNsYXNzIEFic3Ry
YWN0U2VxdWVudGlhbExpc3Q7CiAgICAgIGNsYXNzIEFic3RyYWN0U2V0OwogICAgICBjbGFzcyBB
cnJheUxpc3Q7CiAgICAgIGNsYXNzIEFycmF5czsKICAgICAgY2xhc3MgQXJyYXlzJExpc3RJbXBs
OwogICAgICBjbGFzcyBCYXNpY01hcEVudHJ5OwogICAgICBjbGFzcyBCaXRTZXQ7CiAgICAgIGNs
YXNzIENhbGVuZGFyOwogICAgICBjbGFzcyBDb2xsZWN0aW9uOwogICAgICBjbGFzcyBDb2xsZWN0
aW9uczsKICAgICAgY2xhc3MgQ29sbGVjdGlvbnMkUmV2ZXJzZUNvbXBhcmF0b3I7CiAgICAgIGNs
YXNzIENvbGxlY3Rpb25zJFN5bmNocm9uaXplZENvbGxlY3Rpb247CiAgICAgIGNsYXNzIENvbGxl
Y3Rpb25zJFN5bmNocm9uaXplZEl0ZXJhdG9yOwogICAgICBjbGFzcyBDb2xsZWN0aW9ucyRTeW5j
aHJvbml6ZWRMaXN0OwogICAgICBjbGFzcyBDb2xsZWN0aW9ucyRTeW5jaHJvbml6ZWRMaXN0SXRl
cmF0b3I7CiAgICAgIGNsYXNzIENvbGxlY3Rpb25zJFN5bmNocm9uaXplZE1hcDsKICAgICAgY2xh
c3MgQ29sbGVjdGlvbnMkU3luY2hyb25pemVkU2V0OwogICAgICBjbGFzcyBDb2xsZWN0aW9ucyRT
eW5jaHJvbml6ZWRTb3J0ZWRNYXA7CiAgICAgIGNsYXNzIENvbGxlY3Rpb25zJFN5bmNocm9uaXpl
ZFNvcnRlZFNldDsKICAgICAgY2xhc3MgQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlQ29sbGVjdGlv
bjsKICAgICAgY2xhc3MgQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlSXRlcmF0b3I7CiAgICAgIGNs
YXNzIENvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUxpc3Q7CiAgICAgIGNsYXNzIENvbGxlY3Rpb25z
JFVubW9kaWZpYWJsZUxpc3RJdGVyYXRvcjsKICAgICAgY2xhc3MgQ29sbGVjdGlvbnMkVW5tb2Rp
ZmlhYmxlTWFwOwogICAgICBjbGFzcyBDb2xsZWN0aW9ucyRVbm1vZGlmaWFibGVTZXQ7CiAgICAg
IGNsYXNzIENvbGxlY3Rpb25zJFVubW9kaWZpYWJsZVNvcnRlZE1hcDsKICAgICAgY2xhc3MgQ29s
bGVjdGlvbnMkVW5tb2RpZmlhYmxlU29ydGVkU2V0OwogICAgICBjbGFzcyBDb21wYXJhdG9yOwog
ICAgICBjbGFzcyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uOwogICAgICBjbGFzcyBE
YXRlOwogICAgICBjbGFzcyBEaWN0aW9uYXJ5OwogICAgICBjbGFzcyBFbXB0eVN0YWNrRXhjZXB0
aW9uOwogICAgICBjbGFzcyBFbnVtZXJhdGlvbjsKICAgICAgY2xhc3MgRXZlbnRMaXN0ZW5lcjsK
ICAgICAgY2xhc3MgRXZlbnRPYmplY3Q7CiAgICAgIGNsYXNzIEdyZWdvcmlhbkNhbGVuZGFyOwog
ICAgICBjbGFzcyBIYXNoTWFwOwogICAgICBjbGFzcyBIYXNoTWFwJEhhc2hFbnRyeTsKICAgICAg
Y2xhc3MgSGFzaE1hcCRIYXNoSXRlcmF0b3I7CiAgICAgIGNsYXNzIEhhc2hTZXQ7CiAgICAgIGNs
YXNzIEhhc2h0YWJsZTsKICAgICAgY2xhc3MgSGFzaHRhYmxlJEVudW1lcmF0b3I7CiAgICAgIGNs
YXNzIEhhc2h0YWJsZSRIYXNoRW50cnk7CiAgICAgIGNsYXNzIEhhc2h0YWJsZSRIYXNoSXRlcmF0
b3I7CiAgICAgIGNsYXNzIElkZW50aXR5SGFzaE1hcDsKICAgICAgY2xhc3MgSWRlbnRpdHlIYXNo
TWFwJElkZW50aXR5SXRlcmF0b3I7CiAgICAgIGNsYXNzIEl0ZXJhdG9yOwogICAgICBjbGFzcyBM
aW5rZWRIYXNoTWFwOwogICAgICBjbGFzcyBMaW5rZWRIYXNoTWFwJExpbmtlZEhhc2hFbnRyeTsK
ICAgICAgY2xhc3MgTGlua2VkTGlzdDsKICAgICAgY2xhc3MgTGlua2VkTGlzdCRFbnRyeTsKICAg
ICAgY2xhc3MgTGlua2VkTGlzdCRMaW5rZWRMaXN0SXRyOwogICAgICBjbGFzcyBMaXN0OwogICAg
ICBjbGFzcyBMaXN0SXRlcmF0b3I7CiAgICAgIGNsYXNzIExpc3RSZXNvdXJjZUJ1bmRsZTsKICAg
ICAgY2xhc3MgTG9jYWxlOwogICAgICBjbGFzcyBNYXA7CiAgICAgIGNsYXNzIE1hcCRFbnRyeTsK
ICAgICAgY2xhc3MgTWFwJE1hcDsKICAgICAgY2xhc3MgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9u
OwogICAgICBjbGFzcyBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uOwogICAgICBjbGFzcyBPYnNlcnZh
YmxlOwogICAgICBjbGFzcyBPYnNlcnZlcjsKICAgICAgY2xhc3MgUHJvcGVydGllczsKICAgICAg
Y2xhc3MgUHJvcGVydHlQZXJtaXNzaW9uOwogICAgICBjbGFzcyBQcm9wZXJ0eVJlc291cmNlQnVu
ZGxlOwogICAgICBjbGFzcyBSYW5kb207CiAgICAgIGNsYXNzIFJhbmRvbUFjY2VzczsKICAgICAg
Y2xhc3MgUmVzb3VyY2VCdW5kbGU7CiAgICAgIGNsYXNzIFNldDsKICAgICAgY2xhc3MgU2ltcGxl
VGltZVpvbmU7CiAgICAgIGNsYXNzIFNvcnRlZE1hcDsKICAgICAgY2xhc3MgU29ydGVkU2V0Owog
ICAgICBjbGFzcyBTdGFjazsKICAgICAgY2xhc3MgU3RyaW5nVG9rZW5pemVyOwogICAgICBjbGFz
cyBTdWJMaXN0OwogICAgICBjbGFzcyBUaW1lWm9uZTsKICAgICAgY2xhc3MgVGltZXI7CiAgICAg
IGNsYXNzIFRpbWVyJFNjaGVkdWxlcjsKICAgICAgY2xhc3MgVGltZXIkVGFza1F1ZXVlOwogICAg
ICBjbGFzcyBUaW1lclRhc2s7CiAgICAgIGNsYXNzIFRvb01hbnlMaXN0ZW5lcnNFeGNlcHRpb247
CiAgICAgIGNsYXNzIFRyZWVNYXA7CiAgICAgIGNsYXNzIFRyZWVNYXAkTm9kZTsKICAgICAgY2xh
c3MgVHJlZU1hcCRTdWJNYXA7CiAgICAgIGNsYXNzIFRyZWVNYXAkVHJlZUl0ZXJhdG9yOwogICAg
ICBjbGFzcyBUcmVlTWFwJFZlcmlmeVJlc3VsdDsKICAgICAgY2xhc3MgVHJlZVNldDsKICAgICAg
Y2xhc3MgVmVjdG9yOwogICAgICBjbGFzcyBXZWFrSGFzaE1hcDsKICAgICAgY2xhc3MgV2Vha0hh
c2hNYXAkRW50cnk7CiAgICAgIGNsYXNzIFdlYWtIYXNoTWFwJFdlYWtCdWNrZXQ7CiAgICAgIGNs
YXNzIFdlYWtIYXNoTWFwJFdlYWtFbnRyeVNldDsKICAgICAgbmFtZXNwYWNlIGphcgogICAgICB7
CiAgICAgICAgY2xhc3MgQXR0cmlidXRlczsKICAgICAgICBjbGFzcyBBdHRyaWJ1dGVzJE5hbWU7
CiAgICAgICAgY2xhc3MgSmFyRW50cnk7CiAgICAgICAgY2xhc3MgSmFyRXhjZXB0aW9uOwogICAg
ICAgIGNsYXNzIEphckZpbGU7CiAgICAgICAgY2xhc3MgSmFyRmlsZSRKYXJFbnVtZXJhdGlvbjsK
ICAgICAgICBjbGFzcyBKYXJJbnB1dFN0cmVhbTsKICAgICAgICBjbGFzcyBKYXJPdXRwdXRTdHJl
YW07CiAgICAgICAgY2xhc3MgTWFuaWZlc3Q7CiAgICAgIH07CgogICAgICBuYW1lc3BhY2Ugemlw
CiAgICAgIHsKICAgICAgICBjbGFzcyBBZGxlcjMyOwogICAgICAgIGNsYXNzIENSQzMyOwogICAg
ICAgIGNsYXNzIENoZWNrZWRJbnB1dFN0cmVhbTsKICAgICAgICBjbGFzcyBDaGVja2VkT3V0cHV0
U3RyZWFtOwogICAgICAgIGNsYXNzIENoZWNrc3VtOwogICAgICAgIGNsYXNzIERhdGFGb3JtYXRF
eGNlcHRpb247CiAgICAgICAgY2xhc3MgRGVmbGF0ZXI7CiAgICAgICAgY2xhc3MgRGVmbGF0ZXJP
dXRwdXRTdHJlYW07CiAgICAgICAgY2xhc3MgR1pJUElucHV0U3RyZWFtOwogICAgICAgIGNsYXNz
IEdaSVBPdXRwdXRTdHJlYW07CiAgICAgICAgY2xhc3MgSW5mbGF0ZXI7CiAgICAgICAgY2xhc3Mg
SW5mbGF0ZXJJbnB1dFN0cmVhbTsKICAgICAgICBjbGFzcyBaaXBDb25zdGFudHM7CiAgICAgICAg
Y2xhc3MgWmlwRW50cnk7CiAgICAgICAgY2xhc3MgWmlwRW51bWVyYXRpb247CiAgICAgICAgY2xh
c3MgWmlwRXhjZXB0aW9uOwogICAgICAgIGNsYXNzIFppcEZpbGU7CiAgICAgICAgY2xhc3MgWmlw
SW5wdXRTdHJlYW07CiAgICAgICAgY2xhc3MgWmlwT3V0cHV0U3RyZWFtOwogICAgICB9OwogICAg
fTsKICB9Owp9OwoKdHlwZWRlZiBzdHJ1Y3QgamF2YTo6bGFuZzo6T2JqZWN0KiBqb2JqZWN0Owp0
eXBlZGVmIGNsYXNzIGphdmE6Omxhbmc6OkNsYXNzKiBqY2xhc3M7CnR5cGVkZWYgY2xhc3MgamF2
YTo6bGFuZzo6VGhyb3dhYmxlKiBqdGhyb3dhYmxlOwp0eXBlZGVmIGNsYXNzIGphdmE6Omxhbmc6
OlN0cmluZyoganN0cmluZzsKc3RydWN0IF9Kdl9KTklFbnY7Cgp0eXBlZGVmIHN0cnVjdCBfSnZf
RmllbGQgKmpmaWVsZElEOwp0eXBlZGVmIHN0cnVjdCBfSnZfTWV0aG9kICpqbWV0aG9kSUQ7Cgpl
eHRlcm4gIkMiIGpvYmplY3QgX0p2X0FsbG9jT2JqZWN0IChqY2xhc3MsIGppbnQpIF9fYXR0cmli
dXRlX18oKF9fbWFsbG9jX18pKTsKZXh0ZXJuICJDIiBqb2JqZWN0IF9Kdl9BbGxvY09iamVjdE5v
RmluYWxpemVyIChqY2xhc3MsIGppbnQpIF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKZXh0
ZXJuICJDIiBqb2JqZWN0IF9Kdl9BbGxvY09iamVjdE5vSW5pdE5vRmluYWxpemVyIChqY2xhc3Ms
IGppbnQpIF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKCgoKCgogIHN0YXRpYyBpbmxpbmUg
am9iamVjdCBfSnZfQWxsb2NQdHJGcmVlT2JqZWN0IChqY2xhc3Mga2xhc3MsIGppbnQgc3opCiAg
ewogICAgcmV0dXJuIF9Kdl9BbGxvY09iamVjdChrbGFzcywgc3opOwogIH0KCmV4dGVybiAiQyIg
amJvb2xlYW4gX0p2X0lzSW5zdGFuY2VPZihqb2JqZWN0LCBqY2xhc3MpOwpleHRlcm4gIkMiIGpz
dHJpbmcgX0p2X0FsbG9jU3RyaW5nKGpzaXplKSBfX2F0dHJpYnV0ZV9fKChfX21hbGxvY19fKSk7
CmV4dGVybiAiQyIganN0cmluZyBfSnZfTmV3U3RyaW5nIChjb25zdCBqY2hhciosIGpzaXplKQog
IF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKZXh0ZXJuIGppbnQgX0p2X0Zvcm1hdEludCAo
amNoYXIqIGJ1ZmVuZCwgamludCBudW0pOwpleHRlcm4gIkMiIGpjaGFyKiBfSnZfR2V0U3RyaW5n
Q2hhcnMgKGpzdHJpbmcgc3RyKTsKZXh0ZXJuICJDIiB2b2lkIF9Kdl9Nb25pdG9yRW50ZXIgKGpv
YmplY3QpOwpleHRlcm4gIkMiIHZvaWQgX0p2X01vbml0b3JFeGl0IChqb2JqZWN0KTsKZXh0ZXJu
ICJDIiBqc3RyaW5nIF9Kdl9OZXdTdHJpbmdMYXRpbjEoY29uc3QgY2hhciosIGpzaXplKQogIF9f
YXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKZXh0ZXJuICJDIiBqc2l6ZSBfSnZfR2V0U3RyaW5n
VVRGTGVuZ3RoIChqc3RyaW5nKTsKZXh0ZXJuICJDIiBqc2l6ZSBfSnZfR2V0U3RyaW5nVVRGUmVn
aW9uIChqc3RyaW5nLCBqc2l6ZSwganNpemUsIGNoYXIgKik7CgpleHRlcm4gamludCBfSnZfQ3Jl
YXRlSmF2YVZNICh2b2lkKiApOwoKdm9pZApfSnZfVGhyZWFkUnVuIChqYXZhOjpsYW5nOjpUaHJl
YWQqIHRocmVhZCk7CmppbnQKX0p2X0F0dGFjaEN1cnJlbnRUaHJlYWQoamF2YTo6bGFuZzo6VGhy
ZWFkKiB0aHJlYWQpOwpleHRlcm4gIkMiIGphdmE6Omxhbmc6OlRocmVhZCoKX0p2X0F0dGFjaEN1
cnJlbnRUaHJlYWQoanN0cmluZyBuYW1lLCBqYXZhOjpsYW5nOjpUaHJlYWRHcm91cCogZ3JvdXAp
OwpleHRlcm4gIkMiIGppbnQgX0p2X0RldGFjaEN1cnJlbnRUaHJlYWQgKHZvaWQpOwoKZXh0ZXJu
ICJDIiB2b2lkIF9Kdl9UaHJvdyAoanRocm93YWJsZSkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1
cm5fXykpOwpleHRlcm4gIkMiIHZvaWQqIF9Kdl9NYWxsb2MgKGpzaXplKSBfX2F0dHJpYnV0ZV9f
KChfX21hbGxvY19fKSk7CmV4dGVybiAiQyIgdm9pZCogX0p2X1JlYWxsb2MgKHZvaWQgKiwganNp
emUpOwpleHRlcm4gIkMiIHZvaWQgX0p2X0ZyZWUgKHZvaWQqKTsKZXh0ZXJuIHZvaWQgKCpfSnZf
UmVnaXN0ZXJDbGFzc0hvb2spIChqY2xhc3MgY2wpOwpleHRlcm4gIkMiIHZvaWQgX0p2X1JlZ2lz
dGVyQ2xhc3NIb29rRGVmYXVsdCAoamNsYXNzKTsKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX0p2
X3VzaG9ydCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWdu
ZWQgaW50IF9Kdl91aW50IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fU0lfXykpKTsKCnN0cnVj
dCBfSnZfVXRmOENvbnN0CnsKICBfSnZfdXNob3J0IGhhc2g7CiAgX0p2X3VzaG9ydCBsZW5ndGg7
CiAgY2hhciBkYXRhWzFdOwp9OwojIDE3ICIuLi8uLi8uLi9nY2MvbGliamF2YS9qYXZhL2xhbmcv
T2JqZWN0LmgiIDIKCgoKc3RydWN0IF9Kdk9iamVjdFByZWZpeAp7CnByb3RlY3RlZDoKCiAgdmly
dHVhbCB2b2lkIG5hY2RfMSAodm9pZCkge307CgoKICAgIHZpcnR1YWwgdm9pZCBuYWNkXzIgKHZv
aWQpIHt9OwoKfTsKCmNsYXNzIGphdmE6Omxhbmc6Ok9iamVjdCA6IHB1YmxpYyBfSnZPYmplY3RQ
cmVmaXgKewpwcm90ZWN0ZWQ6CiAgdmlydHVhbCB2b2lkIGZpbmFsaXplICh2b2lkKTsKcHVibGlj
OgoKICBqY2xhc3MgZ2V0Q2xhc3MgKHZvaWQpOwogIHZpcnR1YWwgamludCBoYXNoQ29kZSAodm9p
ZCk7CiAgdm9pZCBub3RpZnkgKHZvaWQpOwogIHZvaWQgbm90aWZ5QWxsICh2b2lkKTsKICB2b2lk
IHdhaXQgKGpsb25nIHRpbWVvdXQsIGppbnQgbmFub3MpOwogIHZpcnR1YWwgamJvb2xlYW4gZXF1
YWxzIChqb2JqZWN0IG9iaik7CiAgT2JqZWN0ICh2b2lkKTsKICB2aXJ0dWFsIGpzdHJpbmcgdG9T
dHJpbmcgKHZvaWQpOwogIHZvaWQgd2FpdCAodm9pZCk7CiAgdm9pZCB3YWl0IChqbG9uZyB0aW1l
b3V0KTsKCiAgZnJpZW5kIHZvaWQgX0p2X01vbml0b3JFbnRlciAoam9iamVjdCBvYmopOwogIGZy
aWVuZCB2b2lkIF9Kdl9Nb25pdG9yRXhpdCAoam9iamVjdCBvYmopOwogIGZyaWVuZCB2b2lkIF9K
dl9Jbml0aWFsaXplU3luY011dGV4ICh2b2lkKTsKICBmcmllbmQgdm9pZCBfSnZfRmluYWxpemVP
YmplY3QgKGpvYmplY3Qgb2JqKTsKIyA2MCAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvamF2YS9sYW5n
L09iamVjdC5oIgogIHN0YXRpYyBqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cgpwcm90ZWN0ZWQ6
CiAgdmlydHVhbCBqb2JqZWN0IGNsb25lICh2b2lkKTsKCnByaXZhdGU6CgoKCgogICAgam9iamVj
dCBzeW5jX2luZm87CgoKCiAgICB2b2lkIHN5bmNfaW5pdCAodm9pZCk7Cn07CiMgMTcgIi4uLy4u
Ly4uL2djYy9saWJqYXZhL2djai9jbmkuaCIgMgojIDEgIi4uLy4uLy4uL2djYy9saWJqYXZhL2ph
dmEvbGFuZy9DbGFzcy5oIiAxCiMgMTUgIi4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEvbGFuZy9D
bGFzcy5oIgojcHJhZ21hIGludGVyZmFjZQoKCiMgMSAiamF2YS9sYW5nL1N0cmluZy5oIiAxCgoK
CgoKI3ByYWdtYSBpbnRlcmZhY2UKCgojIDEgIi4uLy4uLy4uL2djYy9saWJqYXZhL2djai9hcnJh
eS5oIiAxCiMgMTYgIi4uLy4uLy4uL2djYy9saWJqYXZhL2djai9hcnJheS5oIgpleHRlcm4gIkph
dmEiIHsKCmNsYXNzIF9fSkFycmF5IDogcHVibGljIGphdmE6Omxhbmc6Ok9iamVjdAp7CnByb3Rl
Y3RlZDoKCgoKICBfX0pBcnJheSAoKSA6IGxlbmd0aCAoMCkKICB7CiAgfQpwdWJsaWM6CiAgY29u
c3QganNpemUgbGVuZ3RoOwogIGZyaWVuZCBqc2l6ZSBKdkdldEFycmF5TGVuZ3RoIChfX0pBcnJh
eSopOwp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4KY2xhc3MgSkFycmF5IDogcHVibGljIF9fSkFycmF5
CnsKICBUIGRhdGFbMF07CnB1YmxpYzoKICBmcmllbmQgVCogZWxlbWVudHM8PihKQXJyYXk8VD4m
IHgpOwogIGZyaWVuZCBUKiBlbGVtZW50czw+KEpBcnJheTxUPiogeCk7CgoKfTsKCnRlbXBsYXRl
PGNsYXNzIFQ+CmlubGluZSBUKiBlbGVtZW50cyhKQXJyYXk8VD4mIHgpIHsgcmV0dXJuIHguZGF0
YTsgfQp0ZW1wbGF0ZTxjbGFzcyBUPgppbmxpbmUgVCogZWxlbWVudHMoSkFycmF5PFQ+KiB4KSB7
IHJldHVybiB4LT5kYXRhOyB9Cgp9OwoKCnR5cGVkZWYgX19KQXJyYXkgKmphcnJheTsKdHlwZWRl
ZiBKQXJyYXk8am9iamVjdD4gKmpvYmplY3RBcnJheTsKdHlwZWRlZiBKQXJyYXk8amJvb2xlYW4+
ICpqYm9vbGVhbkFycmF5Owp0eXBlZGVmIEpBcnJheTxqYnl0ZT4gKmpieXRlQXJyYXk7CnR5cGVk
ZWYgSkFycmF5PGpjaGFyPiAqamNoYXJBcnJheTsKdHlwZWRlZiBKQXJyYXk8anNob3J0PiAqanNo
b3J0QXJyYXk7CnR5cGVkZWYgSkFycmF5PGppbnQ+ICpqaW50QXJyYXk7CnR5cGVkZWYgSkFycmF5
PGpsb25nPiAqamxvbmdBcnJheTsKdHlwZWRlZiBKQXJyYXk8amZsb2F0PiAqamZsb2F0QXJyYXk7
CnR5cGVkZWYgSkFycmF5PGpkb3VibGU+ICpqZG91YmxlQXJyYXk7CnR5cGVkZWYgSkFycmF5PGpz
dHJpbmc+ICpqc3RyaW5nQXJyYXk7CgpleHRlcm4gamF2YTo6bGFuZzo6Q2xhc3MgX0p2X2J5dGVD
bGFzcywgX0p2X3Nob3J0Q2xhc3MsIF9Kdl9pbnRDbGFzcywKICBfSnZfbG9uZ0NsYXNzLCBfSnZf
Ym9vbGVhbkNsYXNzLCBfSnZfY2hhckNsYXNzLCBfSnZfZmxvYXRDbGFzcywKICBfSnZfZG91Ymxl
Q2xhc3MsIF9Kdl92b2lkQ2xhc3M7CgoKZXh0ZXJuICJDIiBqb2JqZWN0QXJyYXkgX0p2X05ld09i
amVjdEFycmF5KGpzaXplIGxlbmd0aCwgamNsYXNzLCBqb2JqZWN0IGluaXQpOwpleHRlcm4gIkMi
IGpvYmplY3QgX0p2X05ld1ByaW1BcnJheSAoamNsYXNzIGVsdHlwZSwgamludCBjb3VudCk7Cgpl
eHRlcm4gaW5saW5lIGpvYmplY3RBcnJheQpKdk5ld09iamVjdEFycmF5IChqc2l6ZSBsZW5ndGgs
IGpjbGFzcyBjbHMsIGpvYmplY3QgaW5pdCkKewogIHJldHVybiBfSnZfTmV3T2JqZWN0QXJyYXkg
KGxlbmd0aCwgY2xzLCBpbml0KTsKfQoKZXh0ZXJuIGlubGluZSBqY2hhckFycmF5Ckp2TmV3Q2hh
ckFycmF5IChqaW50IGxlbmd0aCkKewogIHJldHVybiAoamNoYXJBcnJheSkgX0p2X05ld1ByaW1B
cnJheSAoKCYgX0p2X2NoYXJDbGFzcyksIGxlbmd0aCk7Cn0KCmV4dGVybiBpbmxpbmUgamJvb2xl
YW5BcnJheQpKdk5ld0Jvb2xlYW5BcnJheSAoamludCBsZW5ndGgpCnsKICByZXR1cm4gKGpib29s
ZWFuQXJyYXkpIF9Kdl9OZXdQcmltQXJyYXkgKCgmIF9Kdl9ib29sZWFuQ2xhc3MpLCBsZW5ndGgp
Owp9CgpleHRlcm4gaW5saW5lIGpieXRlQXJyYXkKSnZOZXdCeXRlQXJyYXkgKGppbnQgbGVuZ3Ro
KQp7CiAgcmV0dXJuIChqYnl0ZUFycmF5KSBfSnZfTmV3UHJpbUFycmF5ICgoJiBfSnZfYnl0ZUNs
YXNzKSwgbGVuZ3RoKTsKfQoKZXh0ZXJuIGlubGluZSBqc2hvcnRBcnJheQpKdk5ld1Nob3J0QXJy
YXkgKGppbnQgbGVuZ3RoKQp7CiAgcmV0dXJuIChqc2hvcnRBcnJheSkgX0p2X05ld1ByaW1BcnJh
eSAoKCYgX0p2X3Nob3J0Q2xhc3MpLCBsZW5ndGgpOwp9CgpleHRlcm4gaW5saW5lIGppbnRBcnJh
eQpKdk5ld0ludEFycmF5IChqaW50IGxlbmd0aCkKewogIHJldHVybiAoamludEFycmF5KSBfSnZf
TmV3UHJpbUFycmF5ICgoJiBfSnZfaW50Q2xhc3MpLCBsZW5ndGgpOwp9CgpleHRlcm4gaW5saW5l
IGpsb25nQXJyYXkKSnZOZXdMb25nQXJyYXkgKGppbnQgbGVuZ3RoKQp7CiAgcmV0dXJuIChqbG9u
Z0FycmF5KSBfSnZfTmV3UHJpbUFycmF5ICgoJiBfSnZfbG9uZ0NsYXNzKSwgbGVuZ3RoKTsKfQoK
ZXh0ZXJuIGlubGluZSBqZmxvYXRBcnJheQpKdk5ld0Zsb2F0QXJyYXkgKGppbnQgbGVuZ3RoKQp7
CiAgcmV0dXJuIChqZmxvYXRBcnJheSkgX0p2X05ld1ByaW1BcnJheSAoKCYgX0p2X2Zsb2F0Q2xh
c3MpLCBsZW5ndGgpOwp9CgpleHRlcm4gaW5saW5lIGpkb3VibGVBcnJheQpKdk5ld0RvdWJsZUFy
cmF5IChqaW50IGxlbmd0aCkKewogIHJldHVybiAoamRvdWJsZUFycmF5KSBfSnZfTmV3UHJpbUFy
cmF5ICgoJiBfSnZfZG91YmxlQ2xhc3MpLCBsZW5ndGgpOwp9CgoKZXh0ZXJuICJDIiBqc3RyaW5n
QXJyYXkgSnZDb252ZXJ0QXJndihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOwoKaW5saW5l
IGpzaXplIEp2R2V0QXJyYXlMZW5ndGggKGphcnJheSBhcnJheSkgeyByZXR1cm4gYXJyYXktPmxl
bmd0aDsgfQojIDEwICJqYXZhL2xhbmcvU3RyaW5nLmgiIDIKCmV4dGVybiAiSmF2YSIKewogIG5h
bWVzcGFjZSBnbnUKICB7CiAgICBuYW1lc3BhY2UgZ2NqCiAgICB7CiAgICAgIG5hbWVzcGFjZSBy
dW50aW1lCiAgICAgIHsKICAgICAgICBjbGFzcyBTdHJpbmdCdWZmZXI7CiAgICAgIH0KICAgIH0K
ICB9Cn07CgpjbGFzcyA6OmphdmE6Omxhbmc6OlN0cmluZyA6IHB1YmxpYyA6OmphdmE6Omxhbmc6
Ok9iamVjdAp7CnB1YmxpYzoKICBTdHJpbmcgKCk7CiAgU3RyaW5nICg6OmphdmE6Omxhbmc6OlN0
cmluZyAqKTsKICBTdHJpbmcgKDo6amF2YTo6bGFuZzo6U3RyaW5nQnVmZmVyICopOwpwdWJsaWM6
CiAgU3RyaW5nICg6OmdudTo6Z2NqOjpydW50aW1lOjpTdHJpbmdCdWZmZXIgKik7CnB1YmxpYzoK
ICBTdHJpbmcgKGpjaGFyQXJyYXkpOwogIFN0cmluZyAoamNoYXJBcnJheSwgamludCwgamludCk7
CiAgU3RyaW5nIChqYnl0ZUFycmF5KTsKICBTdHJpbmcgKGpieXRlQXJyYXksIGppbnQsIGppbnQp
OwogIFN0cmluZyAoamJ5dGVBcnJheSwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgU3RyaW5n
IChqYnl0ZUFycmF5LCBqaW50LCBqaW50LCA6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBzdGF0
aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmNvcHlWYWx1ZU9mIChqY2hhckFycmF5KTsKICBzdGF0
aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmNvcHlWYWx1ZU9mIChqY2hhckFycmF5LCBqaW50LCBq
aW50KTsKICBTdHJpbmcgKGpieXRlQXJyYXksIGppbnQpOwogIFN0cmluZyAoamJ5dGVBcnJheSwg
amludCwgamludCwgamludCk7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvU3RyaW5nICgpIHsg
cmV0dXJuIHRoaXM7IH0KICBqYm9vbGVhbiBlcXVhbHMgKDo6amF2YTo6bGFuZzo6T2JqZWN0ICop
OwogIGppbnQgaGFzaENvZGUgKCk7CiAgamludCBsZW5ndGggKCkgeyByZXR1cm4gY291bnQ7IH0K
ICBqY2hhciBjaGFyQXQgKGppbnQpOwogIHZvaWQgZ2V0Q2hhcnMgKGppbnQsIGppbnQsIGpjaGFy
QXJyYXksIGppbnQpOwogIGpieXRlQXJyYXkgZ2V0Qnl0ZXMgKCk7CiAgamJ5dGVBcnJheSBnZXRC
eXRlcyAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgdm9pZCBnZXRCeXRlcyAoamludCwgamlu
dCwgamJ5dGVBcnJheSwgamludCk7CiAgamNoYXJBcnJheSB0b0NoYXJBcnJheSAoKTsKICBqYm9v
bGVhbiBlcXVhbHNJZ25vcmVDYXNlICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBqaW50IGNv
bXBhcmVUbyAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgamludCBjb21wYXJlVG8gKDo6amF2
YTo6bGFuZzo6T2JqZWN0ICopOwogIGppbnQgY29tcGFyZVRvSWdub3JlQ2FzZSAoOjpqYXZhOjps
YW5nOjpTdHJpbmcgKik7CiAgamJvb2xlYW4gcmVnaW9uTWF0Y2hlcyAoamludCwgOjpqYXZhOjps
YW5nOjpTdHJpbmcgKiwgamludCwgamludCk7CiAgamJvb2xlYW4gcmVnaW9uTWF0Y2hlcyAoamJv
b2xlYW4sIGppbnQsIDo6amF2YTo6bGFuZzo6U3RyaW5nICosIGppbnQsIGppbnQpOwogIGpib29s
ZWFuIHN0YXJ0c1dpdGggKDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwogIGpib29sZWFuIHN0YXJ0
c1dpdGggKDo6amF2YTo6bGFuZzo6U3RyaW5nICosIGppbnQpOwogIGpib29sZWFuIGVuZHNXaXRo
ICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBqaW50IGluZGV4T2YgKGppbnQpOwogIGppbnQg
aW5kZXhPZiAoamludCwgamludCk7CiAgamludCBpbmRleE9mICg6OmphdmE6Omxhbmc6OlN0cmlu
ZyAqKTsKICBqaW50IGluZGV4T2YgKDo6amF2YTo6bGFuZzo6U3RyaW5nICosIGppbnQpOwogIGpp
bnQgbGFzdEluZGV4T2YgKGppbnQpOwogIGppbnQgbGFzdEluZGV4T2YgKGppbnQsIGppbnQpOwog
IGppbnQgbGFzdEluZGV4T2YgKDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwogIGppbnQgbGFzdElu
ZGV4T2YgKDo6amF2YTo6bGFuZzo6U3RyaW5nICosIGppbnQpOwogIDo6amF2YTo6bGFuZzo6Q2hh
clNlcXVlbmNlICpzdWJTZXF1ZW5jZSAoamludCwgamludCk7CiAgOjpqYXZhOjpsYW5nOjpTdHJp
bmcgKnN1YnN0cmluZyAoamludCk7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnN1YnN0cmluZyAo
amludCwgamludCk7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmNvbmNhdCAoOjpqYXZhOjpsYW5n
OjpTdHJpbmcgKik7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnJlcGxhY2UgKGpjaGFyLCBqY2hh
cik7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvTG93ZXJDYXNlICg6OmphdmE6OnV0aWw6Okxv
Y2FsZSAqKTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqdG9VcHBlckNhc2UgKDo6amF2YTo6dXRp
bDo6TG9jYWxlICopOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b0xvd2VyQ2FzZSAoKTsKICA6
OmphdmE6Omxhbmc6OlN0cmluZyAqdG9VcHBlckNhc2UgKCk7CiAgOjpqYXZhOjpsYW5nOjpTdHJp
bmcgKnRyaW0gKCk7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6U3RyaW5nICp2YWx1ZU9mICg6Omph
dmE6Omxhbmc6Ok9iamVjdCAqKTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnZhbHVl
T2YgKGpjaGFyQXJyYXkpOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0cmluZyAqdmFsdWVPZiAo
amNoYXJBcnJheSwgamludCwgamludCk7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6U3RyaW5nICp2
YWx1ZU9mIChqYm9vbGVhbik7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6U3RyaW5nICp2YWx1ZU9m
IChqY2hhcik7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6U3RyaW5nICp2YWx1ZU9mIChqaW50KTsK
ICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnZhbHVlT2YgKGpsb25nKTsKICBzdGF0aWMg
OjpqYXZhOjpsYW5nOjpTdHJpbmcgKnZhbHVlT2YgKGpmbG9hdCk7CiAgc3RhdGljIDo6amF2YTo6
bGFuZzo6U3RyaW5nICp2YWx1ZU9mIChqZG91YmxlKTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAq
aW50ZXJuICgpOwpwcml2YXRlOgogIHZvaWQgaW5pdCAoKTsKICB2b2lkIGluaXQgKGpjaGFyQXJy
YXksIGppbnQsIGppbnQsIGpib29sZWFuKTsKICB2b2lkIGluaXQgKGpieXRlQXJyYXksIGppbnQs
IGppbnQsIGppbnQpOwogIHZvaWQgaW5pdCAoamJ5dGVBcnJheSwgamludCwgamludCwgOjpqYXZh
OjpsYW5nOjpTdHJpbmcgKik7CiAgc3RhdGljIHZvaWQgcmVoYXNoICgpOwogIDo6amF2YTo6bGFu
Zzo6T2JqZWN0ICpkYXRhOwogIGppbnQgYm9mZnNldDsKICBqaW50IGNvdW50OwogIHN0YXRpYyBj
b25zdCBqbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTY4NDk3OTQ0NzA3NTQ2Njc3MTBMTDsKcHVi
bGljOgogIHN0YXRpYyA6OmphdmE6OnV0aWw6OkNvbXBhcmF0b3IgKkNBU0VfSU5TRU5TSVRJVkVf
T1JERVI7CiAgZnJpZW5kIGpjaGFyKiBfSnZfR2V0U3RyaW5nQ2hhcnMgKGpzdHJpbmcgc3RyKTsK
ICBmcmllbmQganN0cmluZyogX0p2X1N0cmluZ0ZpbmRTbG90IChqY2hhciosIGppbnQsIGppbnQp
OwogIGZyaWVuZCBqc3RyaW5nKiBfSnZfU3RyaW5nR2V0U2xvdCAoanN0cmluZyk7CiAgZnJpZW5k
IGpzdHJpbmcgX0p2X05ld1N0cmluZ1V0ZjhDb25zdCAoX0p2X1V0ZjhDb25zdCogc3RyKTsKICBm
cmllbmQganN0cmluZyBfSnZfTmV3U3RyaW5nTGF0aW4xIChjb25zdCBjaGFyKiwganNpemUpOwog
IGZyaWVuZCBqc3RyaW5nIF9Kdl9BbGxvY1N0cmluZyAoanNpemUpOwoKICBzdGF0aWMgOjpqYXZh
OjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMgMTkgIi4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEv
bGFuZy9DbGFzcy5oIiAyCiMgMSAiamF2YS9uZXQvVVJMLmgiIDEKCgoKCgojcHJhZ21hIGludGVy
ZmFjZQoKCgpleHRlcm4gIkphdmEiCnsKICBuYW1lc3BhY2UgamF2YQogIHsKICAgIG5hbWVzcGFj
ZSBuZXQKICAgIHsKICAgICAgY2xhc3MgVVJMQ29ubmVjdGlvbjsKICAgICAgY2xhc3MgVVJMOwog
ICAgICBjbGFzcyBVUkxTdHJlYW1IYW5kbGVyRmFjdG9yeTsKICAgICAgY2xhc3MgVVJMU3RyZWFt
SGFuZGxlcjsKICAgIH0KICB9Cn07CgpjbGFzcyA6OmphdmE6Om5ldDo6VVJMIDogcHVibGljIDo6
amF2YTo6bGFuZzo6T2JqZWN0CnsKcHVibGljOgogIFVSTCAoOjpqYXZhOjpsYW5nOjpTdHJpbmcg
KiwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgamludCwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7
CiAgVVJMICg6OmphdmE6Omxhbmc6OlN0cmluZyAqLCA6OmphdmE6Omxhbmc6OlN0cmluZyAqLCA6
OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBVUkwgKDo6amF2YTo6bGFuZzo6U3RyaW5nICosIDo6
amF2YTo6bGFuZzo6U3RyaW5nICosIGppbnQsIDo6amF2YTo6bGFuZzo6U3RyaW5nICosIDo6amF2
YTo6bmV0OjpVUkxTdHJlYW1IYW5kbGVyICopOwogIFVSTCAoOjpqYXZhOjpsYW5nOjpTdHJpbmcg
Kik7CiAgVVJMICg6OmphdmE6Om5ldDo6VVJMICosIDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwog
IFVSTCAoOjpqYXZhOjpuZXQ6OlVSTCAqLCA6OmphdmE6Omxhbmc6OlN0cmluZyAqLCA6OmphdmE6
Om5ldDo6VVJMU3RyZWFtSGFuZGxlciAqKTsKICBqYm9vbGVhbiBlcXVhbHMgKDo6amF2YTo6bGFu
Zzo6T2JqZWN0ICopOwogIDo6amF2YTo6bGFuZzo6T2JqZWN0ICpnZXRDb250ZW50ICgpOwogIDo6
amF2YTo6bGFuZzo6U3RyaW5nICpnZXRGaWxlICgpIHsgcmV0dXJuIGZpbGU7IH0KICA6OmphdmE6
Omxhbmc6OlN0cmluZyAqZ2V0SG9zdCAoKSB7IHJldHVybiBob3N0OyB9CiAgamludCBnZXRQb3J0
ICgpIHsgcmV0dXJuIHBvcnQ7IH0KICA6OmphdmE6Omxhbmc6OlN0cmluZyAqZ2V0UHJvdG9jb2wg
KCkgeyByZXR1cm4gcHJvdG9jb2w7IH0KICA6OmphdmE6Omxhbmc6OlN0cmluZyAqZ2V0UmVmICgp
IHsgcmV0dXJuIHJlZjsgfQogIGppbnQgaGFzaENvZGUgKCk7CiAgOjpqYXZhOjpuZXQ6OlVSTENv
bm5lY3Rpb24gKm9wZW5Db25uZWN0aW9uICgpOwogIDo6amF2YTo6aW86OklucHV0U3RyZWFtICpv
cGVuU3RyZWFtICgpOwogIGpib29sZWFuIHNhbWVGaWxlICg6OmphdmE6Om5ldDo6VVJMICopOwpw
dWJsaWM6CiAgdm9pZCBzZXQgKDo6amF2YTo6bGFuZzo6U3RyaW5nICosIDo6amF2YTo6bGFuZzo6
U3RyaW5nICosIGppbnQsIDo6amF2YTo6bGFuZzo6U3RyaW5nICosIDo6amF2YTo6bGFuZzo6U3Ry
aW5nICopOwpwdWJsaWM6CiAgc3RhdGljIHZvaWQgc2V0VVJMU3RyZWFtSGFuZGxlckZhY3Rvcnkg
KDo6amF2YTo6bmV0OjpVUkxTdHJlYW1IYW5kbGVyRmFjdG9yeSAqKTsKICA6OmphdmE6Omxhbmc6
OlN0cmluZyAqdG9FeHRlcm5hbEZvcm0gKCk7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvU3Ry
aW5nICgpOwpwcml2YXRlOgogIDo6amF2YTo6bmV0OjpVUkxTdHJlYW1IYW5kbGVyICpzZXRVUkxT
dHJlYW1IYW5kbGVyICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICB2b2lkIHJlYWRPYmplY3Qg
KDo6amF2YTo6aW86Ok9iamVjdElucHV0U3RyZWFtICopOwogIHZvaWQgd3JpdGVPYmplY3QgKDo6
amF2YTo6aW86Ok9iamVjdE91dHB1dFN0cmVhbSAqKTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAq
cHJvdG9jb2w7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmhvc3Q7CiAgamludCBwb3J0OwogIDo6
amF2YTo6bGFuZzo6U3RyaW5nICpmaWxlOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICpyZWY7CiAg
amludCBoYXNoQ29kZV9fOwogIDo6amF2YTo6bmV0OjpVUkxTdHJlYW1IYW5kbGVyICpoYW5kbGVy
OwogIHN0YXRpYyA6OmphdmE6OnV0aWw6Okhhc2h0YWJsZSAqaGFuZGxlcnM7CiAgc3RhdGljIDo6
amF2YTo6bmV0OjpVUkxTdHJlYW1IYW5kbGVyRmFjdG9yeSAqZmFjdG9yeTsKICBzdGF0aWMgY29u
c3Qgamxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC03NjI3NjI5Njg4MzYxNTI0MTEwTEw7CnB1Ymxp
YzoKCiAgc3RhdGljIDo6amF2YTo6bGFuZzo6Q2xhc3MgY2xhc3MkOwp9OwojIDIwICIuLi8uLi8u
Li9nY2MvbGliamF2YS9qYXZhL2xhbmcvQ2xhc3MuaCIgMgojIDEgImphdmEvbGFuZy9yZWZsZWN0
L01vZGlmaWVyLmgiIDEKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgpjbGFzcyA6OmphdmE6Omxh
bmc6OnJlZmxlY3Q6Ok1vZGlmaWVyIDogcHVibGljIDo6amF2YTo6bGFuZzo6T2JqZWN0CnsKcHVi
bGljOgogIE1vZGlmaWVyICgpOwogIHN0YXRpYyBqYm9vbGVhbiBpc0Fic3RyYWN0IChqaW50KTsK
ICBzdGF0aWMgamJvb2xlYW4gaXNGaW5hbCAoamludCk7CiAgc3RhdGljIGpib29sZWFuIGlzSW50
ZXJmYWNlIChqaW50KTsKICBzdGF0aWMgamJvb2xlYW4gaXNOYXRpdmUgKGppbnQpOwogIHN0YXRp
YyBqYm9vbGVhbiBpc1ByaXZhdGUgKGppbnQpOwogIHN0YXRpYyBqYm9vbGVhbiBpc1Byb3RlY3Rl
ZCAoamludCk7CiAgc3RhdGljIGpib29sZWFuIGlzUHVibGljIChqaW50KTsKICBzdGF0aWMgamJv
b2xlYW4gaXNTdGF0aWMgKGppbnQpOwogIHN0YXRpYyBqYm9vbGVhbiBpc1N0cmljdCAoamludCk7
CiAgc3RhdGljIGpib29sZWFuIGlzU3luY2hyb25pemVkIChqaW50KTsKICBzdGF0aWMgamJvb2xl
YW4gaXNUcmFuc2llbnQgKGppbnQpOwogIHN0YXRpYyBqYm9vbGVhbiBpc1ZvbGF0aWxlIChqaW50
KTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvU3RyaW5nIChqaW50KTsKcHVibGlj
OgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0cmluZ0J1ZmZlciAqdG9TdHJpbmcgKGppbnQsIDo6
amF2YTo6bGFuZzo6U3RyaW5nQnVmZmVyICopOwpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IGppbnQg
UFVCTElDID0gMUw7CiAgc3RhdGljIGNvbnN0IGppbnQgUFJJVkFURSA9IDJMOwogIHN0YXRpYyBj
b25zdCBqaW50IFBST1RFQ1RFRCA9IDRMOwogIHN0YXRpYyBjb25zdCBqaW50IFNUQVRJQyA9IDhM
OwogIHN0YXRpYyBjb25zdCBqaW50IEZJTkFMID0gMTZMOwogIHN0YXRpYyBjb25zdCBqaW50IFNZ
TkNIUk9OSVpFRCA9IDMyTDsKICBzdGF0aWMgY29uc3QgamludCBWT0xBVElMRSA9IDY0TDsKICBz
dGF0aWMgY29uc3QgamludCBUUkFOU0lFTlQgPSAxMjhMOwogIHN0YXRpYyBjb25zdCBqaW50IE5B
VElWRSA9IDI1Nkw7CiAgc3RhdGljIGNvbnN0IGppbnQgSU5URVJGQUNFID0gNTEyTDsKICBzdGF0
aWMgY29uc3QgamludCBBQlNUUkFDVCA9IDEwMjRMOwogIHN0YXRpYyBjb25zdCBqaW50IFNUUklD
VCA9IDIwNDhMOwpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IGppbnQgU1VQRVIgPSAzMkw7CiAgc3Rh
dGljIGNvbnN0IGppbnQgQUxMX0ZMQUdTID0gNDA5NUw7CnB1YmxpYzoKCiAgc3RhdGljIDo6amF2
YTo6bGFuZzo6Q2xhc3MgY2xhc3MkOwp9OwojIDIxICIuLi8uLi8uLi9nY2MvbGliamF2YS9qYXZh
L2xhbmcvQ2xhc3MuaCIgMgojIDEgImphdmEvc2VjdXJpdHkvUHJvdGVjdGlvbkRvbWFpbi5oIiAx
CgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgoKZXh0ZXJuICJKYXZhIgp7CiAgbmFtZXNwYWNlIGph
dmEKICB7CiAgICBuYW1lc3BhY2Ugc2VjdXJpdHkKICAgIHsKICAgICAgY2xhc3MgUHJvdGVjdGlv
bkRvbWFpbjsKICAgICAgY2xhc3MgUGVybWlzc2lvbjsKICAgICAgY2xhc3MgUGVybWlzc2lvbkNv
bGxlY3Rpb247CiAgICAgIGNsYXNzIENvZGVTb3VyY2U7CiAgICB9CiAgfQp9OwoKY2xhc3MgOjpq
YXZhOjpzZWN1cml0eTo6UHJvdGVjdGlvbkRvbWFpbiA6IHB1YmxpYyA6OmphdmE6Omxhbmc6Ok9i
amVjdAp7CnB1YmxpYzoKICBQcm90ZWN0aW9uRG9tYWluICg6OmphdmE6OnNlY3VyaXR5OjpDb2Rl
U291cmNlICosIDo6amF2YTo6c2VjdXJpdHk6OlBlcm1pc3Npb25Db2xsZWN0aW9uICopOwogIDo6
amF2YTo6c2VjdXJpdHk6OkNvZGVTb3VyY2UgKmdldENvZGVTb3VyY2UgKCkgeyByZXR1cm4gY29k
ZV9zb3VyY2U7IH0KICA6OmphdmE6OnNlY3VyaXR5OjpQZXJtaXNzaW9uQ29sbGVjdGlvbiAqZ2V0
UGVybWlzc2lvbnMgKCkgeyByZXR1cm4gcGVybXM7IH0KICB2aXJ0dWFsIGpib29sZWFuIGltcGxp
ZXMgKDo6amF2YTo6c2VjdXJpdHk6OlBlcm1pc3Npb24gKik7CiAgdmlydHVhbCA6OmphdmE6Omxh
bmc6OlN0cmluZyAqdG9TdHJpbmcgKCk7CnByaXZhdGU6CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6
U3RyaW5nICpsaW5lc2VwOwogIDo6amF2YTo6c2VjdXJpdHk6OkNvZGVTb3VyY2UgKmNvZGVfc291
cmNlOwogIDo6amF2YTo6c2VjdXJpdHk6OlBlcm1pc3Npb25Db2xsZWN0aW9uICpwZXJtczsKcHVi
bGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMgMjIgIi4uLy4u
Ly4uL2djYy9saWJqYXZhL2phdmEvbGFuZy9DbGFzcy5oIiAyCgoKZXh0ZXJuICJDIiB2b2lkIF9K
dl9Jbml0Q2xhc3MgKGpjbGFzcyBrbGFzcyk7CmV4dGVybiAiQyIgdm9pZCBfSnZfUmVnaXN0ZXJD
bGFzc2VzIChqY2xhc3MgKmNsYXNzZXMpOwoKCmV4dGVybiAiQyIgdm9pZCAqX0p2X0xvb2t1cElu
dGVyZmFjZU1ldGhvZElkeCAoamNsYXNzIGtsYXNzLCBqY2xhc3MgaWZhY2UsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1ldGhfaWR4KTsKCgoKCmVu
dW0KewogIEpWX1NUQVRFX05PVEhJTkcgPSAwLAoKICBKVl9TVEFURV9QUkVMT0FESU5HID0gMSwK
ICBKVl9TVEFURV9MT0FESU5HID0gMywKICBKVl9TVEFURV9MT0FERUQgPSA1LAoKICBKVl9TVEFU
RV9DT01QSUxFRCA9IDYsCgogIEpWX1NUQVRFX1BSRVBBUkVEID0gNywKICBKVl9TVEFURV9MSU5L
RUQgPSA5LAoKICBKVl9TVEFURV9JTl9QUk9HUkVTUyA9IDEwLAogIEpWX1NUQVRFX0RPTkUgPSAx
MiwKCiAgSlZfU1RBVEVfRVJST1IgPSAxNAp9OwoKc3RydWN0IF9Kdl9GaWVsZDsKc3RydWN0IF9K
dl9WVGFibGU7CnVuaW9uIF9Kdl93b3JkOwpzdHJ1Y3QgX0p2X0FycmF5VlRhYmxlOwoKc3RydWN0
IF9Kdl9Db25zdGFudHMKewogIGppbnQgc2l6ZTsKICBqYnl0ZSAqdGFnczsKICBfSnZfd29yZCAq
ZGF0YTsKfTsKCnN0cnVjdCBfSnZfTWV0aG9kCnsKCiAgX0p2X1V0ZjhDb25zdCAqbmFtZTsKCiAg
X0p2X1V0ZjhDb25zdCAqc2lnbmF0dXJlOwoKICBfSnZfdXNob3J0IGFjY2ZsYWdzOwoKICBfSnZf
dXNob3J0IGluZGV4OwoKICB2b2lkICpuY29kZTsKCgogIF9Kdl9VdGY4Q29uc3QgKip0aHJvd3M7
CgogIF9Kdl9NZXRob2QgKmdldE5leHRNZXRob2QgKCkKICB7IHJldHVybiB0aGlzICsgMTsgfQp9
OwoKCnVuaW9uIF9Kdl9JRGlzcGF0Y2hUYWJsZQp7CiAgc3RydWN0CiAgewoKICAgIGpzaG9ydCBp
aW5kZXg7CiAgICBqc2hvcnQgaXRhYmxlX2xlbmd0aDsKCiAgICB2b2lkICoqaXRhYmxlOwogIH0g
Y2xzOwoKICBzdHJ1Y3QKICB7CgogICAganNob3J0ICppb2Zmc2V0czsKICB9IGlmYWNlOwp9OwoK
CnN0cnVjdCBfSnZfaWZhY2VzCnsKICBqY2xhc3MgKmxpc3Q7CiAganNob3J0IGxlbjsKICBqc2hv
cnQgY291bnQ7Cn07CgpzdHJ1Y3QgX0p2X01ldGhvZFN5bWJvbAp7CiAgX0p2X1V0ZjhDb25zdCAq
Y2xhc3NfbmFtZTsKICBfSnZfVXRmOENvbnN0ICpuYW1lOwogIF9Kdl9VdGY4Q29uc3QgKnNpZ25h
dHVyZTsKfTsKCnN0cnVjdCBfSnZfT2Zmc2V0VGFibGUKewogIGppbnQgc3RhdGU7CiAgamludCBv
ZmZzZXRzW107Cn07CgoKCgoKY2xhc3MgamF2YTo6bGFuZzo6Q2xhc3MgOiBwdWJsaWMgamF2YTo6
bGFuZzo6T2JqZWN0CnsKcHVibGljOgogIHN0YXRpYyBqY2xhc3MgZm9yTmFtZSAoanN0cmluZyBj
bGFzc05hbWUsIGpib29sZWFuIGluaXRpYWxpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICBq
YXZhOjpsYW5nOjpDbGFzc0xvYWRlciAqbG9hZGVyKTsKICBzdGF0aWMgamNsYXNzIGZvck5hbWUg
KGpzdHJpbmcgY2xhc3NOYW1lKTsKICBKQXJyYXk8amNsYXNzPiAqZ2V0Q2xhc3NlcyAodm9pZCk7
CgogIGphdmE6Omxhbmc6OkNsYXNzTG9hZGVyICpnZXRDbGFzc0xvYWRlciAodm9pZCk7CgogIGph
dmE6Omxhbmc6OnJlZmxlY3Q6OkNvbnN0cnVjdG9yICpnZXRDb25zdHJ1Y3RvciAoSkFycmF5PGpj
bGFzcz4gKik7CiAgSkFycmF5PGphdmE6Omxhbmc6OnJlZmxlY3Q6OkNvbnN0cnVjdG9yICo+ICpn
ZXRDb25zdHJ1Y3RvcnMgKHZvaWQpOwogIGphdmE6Omxhbmc6OnJlZmxlY3Q6OkNvbnN0cnVjdG9y
ICpnZXREZWNsYXJlZENvbnN0cnVjdG9yIChKQXJyYXk8amNsYXNzPiAqKTsKICBKQXJyYXk8amF2
YTo6bGFuZzo6cmVmbGVjdDo6Q29uc3RydWN0b3IgKj4gKmdldERlY2xhcmVkQ29uc3RydWN0b3Jz
ICh2b2lkKTsKICBqYXZhOjpsYW5nOjpyZWZsZWN0OjpGaWVsZCAqZ2V0RGVjbGFyZWRGaWVsZCAo
anN0cmluZyk7CiAgSkFycmF5PGphdmE6Omxhbmc6OnJlZmxlY3Q6OkZpZWxkICo+ICpnZXREZWNs
YXJlZEZpZWxkcyAodm9pZCk7CiAgamF2YTo6bGFuZzo6cmVmbGVjdDo6TWV0aG9kICpnZXREZWNs
YXJlZE1ldGhvZCAoanN0cmluZywgSkFycmF5PGpjbGFzcz4gKik7CiAgSkFycmF5PGphdmE6Omxh
bmc6OnJlZmxlY3Q6Ok1ldGhvZCAqPiAqZ2V0RGVjbGFyZWRNZXRob2RzICh2b2lkKTsKCiAgSkFy
cmF5PGpjbGFzcz4gKmdldERlY2xhcmVkQ2xhc3NlcyAodm9pZCk7CiAgamNsYXNzIGdldERlY2xh
cmluZ0NsYXNzICh2b2lkKTsKCiAgamF2YTo6bGFuZzo6cmVmbGVjdDo6RmllbGQgKmdldEZpZWxk
IChqc3RyaW5nKTsKcHJpdmF0ZToKICBqaW50IF9nZXRGaWVsZHMgKEpBcnJheTxqYXZhOjpsYW5n
OjpyZWZsZWN0OjpGaWVsZCAqPiAqcmVzdWx0LCBqaW50IG9mZnNldCk7CiAgSkFycmF5PGphdmE6
Omxhbmc6OnJlZmxlY3Q6OkNvbnN0cnVjdG9yICo+ICpfZ2V0Q29uc3RydWN0b3JzIChqYm9vbGVh
bik7CiAgamF2YTo6bGFuZzo6cmVmbGVjdDo6RmllbGQgKmdldEZpZWxkIChqc3RyaW5nLCBqaW50
KTsKICBqaW50IF9nZXRNZXRob2RzIChKQXJyYXk8amF2YTo6bGFuZzo6cmVmbGVjdDo6TWV0aG9k
ICo+ICpyZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgamludCBvZmZzZXQpOwogIGphdmE6Omxh
bmc6OnJlZmxlY3Q6OkZpZWxkICpnZXRQcml2YXRlRmllbGQgKGpzdHJpbmcpOwogIGphdmE6Omxh
bmc6OnJlZmxlY3Q6Ok1ldGhvZCAqZ2V0UHJpdmF0ZU1ldGhvZCAoanN0cmluZywgSkFycmF5PGpj
bGFzcz4gKik7CiAgamF2YTo6c2VjdXJpdHk6OlByb3RlY3Rpb25Eb21haW4gKmdldFByb3RlY3Rp
b25Eb21haW4wICgpOwoKcHVibGljOgogIEpBcnJheTxqYXZhOjpsYW5nOjpyZWZsZWN0OjpGaWVs
ZCAqPiAqZ2V0RmllbGRzICh2b2lkKTsKCiAgSkFycmF5PGpjbGFzcz4gKmdldEludGVyZmFjZXMg
KHZvaWQpOwoKICB2b2lkIGdldFNpZ25hdHVyZSAoamF2YTo6bGFuZzo6U3RyaW5nQnVmZmVyICpi
dWZmZXIpOwogIHN0YXRpYyBqc3RyaW5nIGdldFNpZ25hdHVyZSAoSkFycmF5PGpjbGFzcz4gKiwg
amJvb2xlYW4gaXNfY29uc3RydWN0b3IpOwogIGphdmE6Omxhbmc6OnJlZmxlY3Q6Ok1ldGhvZCAq
Z2V0TWV0aG9kIChqc3RyaW5nLCBKQXJyYXk8amNsYXNzPiAqKTsKICBKQXJyYXk8amF2YTo6bGFu
Zzo6cmVmbGVjdDo6TWV0aG9kICo+ICpnZXRNZXRob2RzICh2b2lkKTsKCiAgaW5saW5lIGppbnQg
Z2V0TW9kaWZpZXJzICh2b2lkKQogICAgewogICAgICByZXR1cm4gYWNjZmxhZ3M7CiAgICB9Cgog
IGpzdHJpbmcgZ2V0TmFtZSAodm9pZCk7CgogIGphdmE6Om5ldDo6VVJMICpnZXRSZXNvdXJjZSAo
anN0cmluZyByZXNvdXJjZU5hbWUpOwogIGphdmE6OmlvOjpJbnB1dFN0cmVhbSAqZ2V0UmVzb3Vy
Y2VBc1N0cmVhbSAoanN0cmluZyByZXNvdXJjZU5hbWUpOwogIEpBcnJheTxqb2JqZWN0PiAqZ2V0
U2lnbmVycyAodm9pZCk7CgogIGlubGluZSBqY2xhc3MgZ2V0U3VwZXJjbGFzcyAodm9pZCkKICAg
IHsKICAgICAgcmV0dXJuIHN1cGVyY2xhc3M7CiAgICB9CgogIGlubGluZSBqYm9vbGVhbiBpc0Fy
cmF5ICh2b2lkKQogICAgewogICAgICByZXR1cm4gbmFtZS0+ZGF0YVswXSA9PSAnWyc7CiAgICB9
CgogIGlubGluZSBqY2xhc3MgZ2V0Q29tcG9uZW50VHlwZSAodm9pZCkKICAgIHsKICAgICAgcmV0
dXJuIGlzQXJyYXkgKCkgPyAoKiAoamNsYXNzICopICZtZXRob2RzKSA6IDA7CiAgICB9CgogIGpi
b29sZWFuIGlzQXNzaWduYWJsZUZyb20gKGpjbGFzcyBjbHMpOwogIGpib29sZWFuIGlzSW5zdGFu
Y2UgKGpvYmplY3Qgb2JqKTsKCiAgaW5saW5lIGpib29sZWFuIGlzSW50ZXJmYWNlICh2b2lkKQog
IHsKICAgIHJldHVybiAoYWNjZmxhZ3MgJiBqYXZhOjpsYW5nOjpyZWZsZWN0OjpNb2RpZmllcjo6
SU5URVJGQUNFKSAhPSAwOwogIH0KCiAgaW5saW5lIGpib29sZWFuIGlzUHJpbWl0aXZlICh2b2lk
KQogICAgewogICAgICByZXR1cm4gdnRhYmxlID09ICgoX0p2X1ZUYWJsZSAqKSAtMSk7CiAgICB9
CgogIGpvYmplY3QgbmV3SW5zdGFuY2UgKHZvaWQpOwogIGpzdHJpbmcgdG9TdHJpbmcgKHZvaWQp
OwoKCiAgamludCBzaXplICh2b2lkKQogICAgewogICAgICByZXR1cm4gc2l6ZV9pbl9ieXRlczsK
ICAgIH0KCgogIHZvaWQgZmluYWxpemUgKCk7CgoKCiAgQ2xhc3MgKCk7CgogIHN0YXRpYyBqYXZh
OjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cgpwcml2YXRlOgoKICB2b2lkIGNoZWNrTWVtYmVyQWNjZXNz
IChqaW50IGZsYWdzKTsKCiAgdm9pZCBpbml0aWFsaXplQ2xhc3MgKHZvaWQpOwoKCiAgZnJpZW5k
IF9Kdl9NZXRob2QgKl9Kdl9HZXRNZXRob2RMb2NhbCAoamNsYXNzIGtsYXNzLCBfSnZfVXRmOENv
bnN0ICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Kdl9V
dGY4Q29uc3QgKnNpZ25hdHVyZSk7CiAgZnJpZW5kIGpib29sZWFuIF9Kdl9Jc0Fzc2lnbmFibGVG
cm9tKGpjbGFzcywgamNsYXNzKTsKICBmcmllbmQgamJvb2xlYW4gX0p2X0ludGVyZmFjZUFzc2ln
bmFibGVGcm9tIChqY2xhc3MsIGpjbGFzcyk7CiAgZnJpZW5kIHZvaWQgKl9Kdl9Mb29rdXBJbnRl
cmZhY2VNZXRob2RJZHggKGpjbGFzcyBrbGFzcywgamNsYXNzIGlmYWNlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWV0aG9kX2lkeCk7CgogIGlubGlu
ZSBmcmllbmQgdm9pZAogIF9Kdl9Jbml0Q2xhc3MgKGpjbGFzcyBrbGFzcykKICB7CiAgICBpZiAo
X19idWlsdGluX2V4cGVjdCAoa2xhc3MtPnN0YXRlID09IEpWX1NUQVRFX0RPTkUsIHRydWUpKQog
ICAgICByZXR1cm47CiAgICBrbGFzcy0+aW5pdGlhbGl6ZUNsYXNzICgpOwogIH0KCiAgZnJpZW5k
IF9Kdl9NZXRob2QqIF9Kdl9Mb29rdXBEZWNsYXJlZE1ldGhvZCAoamNsYXNzLCBfSnZfVXRmOENv
bnN0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0p2
X1V0ZjhDb25zdCopOwogIGZyaWVuZCBqZmllbGRJRCBKdkdldEZpcnN0SW5zdGFuY2VGaWVsZCAo
amNsYXNzKTsKICBmcmllbmQgamludCBKdk51bUluc3RhbmNlRmllbGRzIChqY2xhc3MpOwogIGZy
aWVuZCBqZmllbGRJRCBKdkdldEZpcnN0U3RhdGljRmllbGQgKGpjbGFzcyk7CiAgZnJpZW5kIGpp
bnQgSnZOdW1TdGF0aWNGaWVsZHMgKGpjbGFzcyk7CgogIGZyaWVuZCBqb2JqZWN0IF9Kdl9BbGxv
Y09iamVjdCAoamNsYXNzLCBqaW50KTsKICBmcmllbmQgdm9pZCAqX0p2X0FsbG9jT2JqIChqaW50
LCBqY2xhc3MpOwogIGZyaWVuZCB2b2lkICpfSnZfQWxsb2NQdHJGcmVlT2JqIChqaW50LCBqY2xh
c3MpOwogIGZyaWVuZCB2b2lkICpfSnZfQWxsb2NBcnJheSAoamludCwgamNsYXNzKTsKCiAgZnJp
ZW5kIGpvYmplY3QgX0p2X0pOSV9Ub1JlZmxlY3RlZEZpZWxkIChfSnZfSk5JRW52ICosIGpjbGFz
cywgamZpZWxkSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
Ym9vbGVhbik7CiAgZnJpZW5kIGpvYmplY3QgX0p2X0pOSV9Ub1JlZmxlY3RlZE1ldGhvZCAoX0p2
X0pOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqYm9vbGVhbik7CiAgZnJpZW5kIGpmaWVsZElEIF9Kdl9Gcm9tUmVm
bGVjdGVkRmllbGQgKGphdmE6Omxhbmc6OnJlZmxlY3Q6OkZpZWxkICopOwoKICBmcmllbmQgam1l
dGhvZElEIF9Kdl9Gcm9tUmVmbGVjdGVkTWV0aG9kIChqYXZhOjpsYW5nOjpyZWZsZWN0OjpNZXRo
b2QgKik7CiAgZnJpZW5kIGptZXRob2RJRCBfSnZfRnJvbVJlZmxlY3RlZENvbnN0cnVjdG9yIChq
YXZhOjpsYW5nOjpyZWZsZWN0OjpDb25zdHJ1Y3RvciAqKTsKICBmcmllbmQgamludCBKdk51bU1l
dGhvZHMgKGpjbGFzcyk7CiAgZnJpZW5kIGptZXRob2RJRCBKdkdldEZpcnN0TWV0aG9kIChqY2xh
c3MpOwoKCiAgZnJpZW5kIGNsYXNzIGphdmE6Omxhbmc6OkNsYXNzTG9hZGVyOwoKICBmcmllbmQg
Y2xhc3MgamF2YTo6aW86Ok9iamVjdE91dHB1dFN0cmVhbTsKICBmcmllbmQgY2xhc3MgamF2YTo6
aW86Ok9iamVjdElucHV0U3RyZWFtOwogIGZyaWVuZCBjbGFzcyBqYXZhOjppbzo6T2JqZWN0U3Ry
ZWFtQ2xhc3M7CgogIGZyaWVuZCB2b2lkIF9Kdl9XYWl0Rm9yU3RhdGUgKGpjbGFzcywgaW50KTsK
ICBmcmllbmQgdm9pZCBfSnZfUmVnaXN0ZXJDbGFzc2VzIChqY2xhc3MgKmNsYXNzZXMpOwogIGZy
aWVuZCB2b2lkIF9Kdl9SZWdpc3RlckNsYXNzSG9va0RlZmF1bHQgKGpjbGFzcyBrbGFzcyk7CiAg
ZnJpZW5kIHZvaWQgX0p2X1JlZ2lzdGVySW5pdGlhdGluZ0xvYWRlciAoamNsYXNzLGphdmE6Omxh
bmc6OkNsYXNzTG9hZGVyKik7CiAgZnJpZW5kIHZvaWQgX0p2X1VucmVnaXN0ZXJDbGFzcyAoamNs
YXNzKTsKICBmcmllbmQgamNsYXNzIF9Kdl9GaW5kQ2xhc3MgKF9Kdl9VdGY4Q29uc3QgKm5hbWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhOjpsYW5nOjpDbGFzc0xvYWRlciAq
bG9hZGVyKTsKICBmcmllbmQgamNsYXNzIF9Kdl9GaW5kQ2xhc3NJbkNhY2hlIChfSnZfVXRmOENv
bnN0ICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmE6Omxh
bmc6OkNsYXNzTG9hZGVyICpsb2FkZXIpOwogIGZyaWVuZCB2b2lkIF9Kdl9OZXdBcnJheUNsYXNz
IChqY2xhc3MgZWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YTo6
bGFuZzo6Q2xhc3NMb2FkZXIgKmxvYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0p2X1ZUYWJsZSAqYXJyYXlfdnRhYmxlID0gMCk7CiAgZnJpZW5kIGpjbGFzcyBfSnZfTmV3
Q2xhc3MgKF9Kdl9VdGY4Q29uc3QgKm5hbWUsIGpjbGFzcyBzdXBlcmNsYXNzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqYXZhOjpsYW5nOjpDbGFzc0xvYWRlciAqbG9hZGVyKTsKICBm
cmllbmQgdm9pZCBfSnZfSW5pdE5ld0NsYXNzRmllbGRzIChqY2xhc3Mga2xhc3MpOwoKCiAgZnJp
ZW5kIHZvaWQgX0p2X0luaXRQcmltQ2xhc3MgKGpjbGFzcywgY2hhciAqLCBjaGFyLCBpbnQsIF9K
dl9BcnJheVZUYWJsZSAqKTsKCiAgZnJpZW5kIHZvaWQgX0p2X1ByZXBhcmVDb21waWxlZENsYXNz
IChqY2xhc3MpOwogIGZyaWVuZCB2b2lkIF9Kdl9QcmVwYXJlQ29uc3RhbnRUaW1lVGFibGVzIChq
Y2xhc3MpOwogIGZyaWVuZCBqc2hvcnQgX0p2X0dldEludGVyZmFjZXMgKGpjbGFzcywgX0p2X2lm
YWNlcyAqKTsKICBmcmllbmQgdm9pZCBfSnZfR2VuZXJhdGVJVGFibGUgKGpjbGFzcywgX0p2X2lm
YWNlcyAqLCBqc2hvcnQgKik7CiAgZnJpZW5kIGpzdHJpbmcgX0p2X0dldE1ldGhvZFN0cmluZyhq
Y2xhc3MsIF9Kdl9VdGY4Q29uc3QgKik7CiAgZnJpZW5kIGpzaG9ydCBfSnZfQXBwZW5kUGFydGlh
bElUYWJsZSAoamNsYXNzLCBqY2xhc3MsIHZvaWQgKiosIGpzaG9ydCk7CiAgZnJpZW5kIGpzaG9y
dCBfSnZfRmluZElJbmRleCAoamNsYXNzICosIGpzaG9ydCAqLCBqc2hvcnQpOwogIGZyaWVuZCB2
b2lkIF9Kdl9MaW5rT2Zmc2V0VGFibGUgKGpjbGFzcyk7CiAgZnJpZW5kIHZvaWQgX0p2X0xheW91
dFZUYWJsZU1ldGhvZHMgKGpjbGFzcyBrbGFzcyk7CiAgZnJpZW5kIHZvaWQgX0p2X1NldFZUYWJs
ZUVudHJpZXMgKGpjbGFzcywgX0p2X1ZUYWJsZSAqKTsKICBmcmllbmQgdm9pZCBfSnZfTWFrZVZU
YWJsZSAoamNsYXNzKTsKCgoKICBpbmxpbmUgZnJpZW5kIGpjbGFzcwogIF9Kdl9HZXRBcnJheUNs
YXNzIChqY2xhc3Mga2xhc3MsIGphdmE6Omxhbmc6OkNsYXNzTG9hZGVyICpsb2FkZXIpCiAgewog
ICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCFrbGFzcy0+YXJyYXljbGFzcywgZmFsc2UpKQogICAg
ICBfSnZfTmV3QXJyYXlDbGFzcyAoa2xhc3MsIGxvYWRlcik7CiAgICByZXR1cm4ga2xhc3MtPmFy
cmF5Y2xhc3M7CiAgfQojIDM0NSAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvamF2YS9sYW5nL0NsYXNz
LmgiCiAgZnJpZW5kIGNsYXNzIF9Kdl9CeXRlY29kZVZlcmlmaWVyOwoKCiAgamNsYXNzIG5leHQ7
CgogIF9Kdl9VdGY4Q29uc3QgKm5hbWU7CgogIF9Kdl91c2hvcnQgYWNjZmxhZ3M7CgogIGpjbGFz
cyBzdXBlcmNsYXNzOwoKICBfSnZfQ29uc3RhbnRzIGNvbnN0YW50czsKCgogIF9Kdl9NZXRob2Qg
Km1ldGhvZHM7CgoKICBqc2hvcnQgbWV0aG9kX2NvdW50OwoKICBqc2hvcnQgdnRhYmxlX21ldGhv
ZF9jb3VudDsKCiAgX0p2X0ZpZWxkICpmaWVsZHM7CgogIGppbnQgc2l6ZV9pbl9ieXRlczsKCiAg
anNob3J0IGZpZWxkX2NvdW50OwoKICBqc2hvcnQgc3RhdGljX2ZpZWxkX2NvdW50OwoKICBfSnZf
VlRhYmxlICp2dGFibGU7CgogIF9Kdl9PZmZzZXRUYWJsZSAqb3RhYmxlOwoKICBfSnZfTWV0aG9k
U3ltYm9sICpvdGFibGVfc3ltczsKCiAgamNsYXNzICppbnRlcmZhY2VzOwoKICBqYXZhOjpsYW5n
OjpDbGFzc0xvYWRlciAqbG9hZGVyOwoKICBqc2hvcnQgaW50ZXJmYWNlX2NvdW50OwoKICBqYnl0
ZSBzdGF0ZTsKCgogIGphdmE6Omxhbmc6OlRocmVhZCAqdGhyZWFkOwoKICBqc2hvcnQgZGVwdGg7
CgogIGpjbGFzcyAqYW5jZXN0b3JzOwoKICBfSnZfSURpc3BhdGNoVGFibGUgKmlkdDsKCiAgamNs
YXNzIGFycmF5Y2xhc3M7CgogIGphdmE6OnNlY3VyaXR5OjpQcm90ZWN0aW9uRG9tYWluICpwcm90
ZWN0aW9uRG9tYWluOwp9OwojIDE4ICIuLi8uLi8uLi9nY2MvbGliamF2YS9nY2ovY25pLmgiIDIK
CgoKCgpleHRlcm4gaW5saW5lIGpvYmplY3QKSnZBbGxvY09iamVjdCAoamNsYXNzIGNscykKewog
IHJldHVybiBfSnZfQWxsb2NPYmplY3QgKGNscywgY2xzLT5zaXplKCkpOwp9CgpleHRlcm4gaW5s
aW5lIGpvYmplY3QKSnZBbGxvY09iamVjdCAoamNsYXNzIGNscywganNpemUgc3opCnsKICByZXR1
cm4gX0p2X0FsbG9jT2JqZWN0IChjbHMsIHN6KTsKfQoKZXh0ZXJuICJDIiBqc3RyaW5nIF9Kdl9O
ZXdTdHJpbmdVVEYgKGNvbnN0IGNoYXIgKmJ5dGVzKTsKZXh0ZXJuICJDIiB2b2lkIF9Kdl9Jbml0
Q2xhc3MgKGpjbGFzcyk7CgpleHRlcm4gaW5saW5lIHZvaWQKSnZJbml0Q2xhc3MgKGpjbGFzcyBj
bHMpCnsKICByZXR1cm4gX0p2X0luaXRDbGFzcyAoY2xzKTsKfQoKZXh0ZXJuIGlubGluZSBqc3Ry
aW5nCkp2QWxsb2NTdHJpbmcgKGpzaXplIHN6KQp7CiAgcmV0dXJuIF9Kdl9BbGxvY1N0cmluZyAo
c3opOwp9CgpleHRlcm4gaW5saW5lIGpzdHJpbmcKSnZOZXdTdHJpbmcgKGNvbnN0IGpjaGFyICpj
aGFycywganNpemUgbGVuKQp7CiAgcmV0dXJuIF9Kdl9OZXdTdHJpbmcgKGNoYXJzLCBsZW4pOwp9
CgpleHRlcm4gaW5saW5lIGpzdHJpbmcKSnZOZXdTdHJpbmdMYXRpbjEgKGNvbnN0IGNoYXIgKmJ5
dGVzLCBqc2l6ZSBsZW4pCnsKICByZXR1cm4gX0p2X05ld1N0cmluZ0xhdGluMSAoYnl0ZXMsIGxl
bik7Cn0KCmV4dGVybiBpbmxpbmUganN0cmluZwpKdk5ld1N0cmluZ0xhdGluMSAoY29uc3QgY2hh
ciAqYnl0ZXMpCnsKICByZXR1cm4gX0p2X05ld1N0cmluZ0xhdGluMSAoYnl0ZXMsIHN0cmxlbiAo
Ynl0ZXMpKTsKfQoKZXh0ZXJuIGlubGluZSBqY2hhciAqCl9Kdl9HZXRTdHJpbmdDaGFycyAoanN0
cmluZyBzdHIpCnsKICByZXR1cm4gKGpjaGFyKikoKGNoYXIqKSBzdHItPmRhdGEgKyBzdHItPmJv
ZmZzZXQpOwp9CgpleHRlcm4gaW5saW5lIGpjaGFyKgpKdkdldFN0cmluZ0NoYXJzIChqc3RyaW5n
IHN0cikKewogIHJldHVybiBfSnZfR2V0U3RyaW5nQ2hhcnMgKHN0cik7Cn0KCmV4dGVybiBpbmxp
bmUganNpemUKSnZHZXRTdHJpbmdVVEZMZW5ndGggKGpzdHJpbmcgc3RyaW5nKQp7CiAgcmV0dXJu
IF9Kdl9HZXRTdHJpbmdVVEZMZW5ndGggKHN0cmluZyk7Cn0KCmV4dGVybiBpbmxpbmUganNpemUK
SnZHZXRTdHJpbmdVVEZSZWdpb24gKGpzdHJpbmcgc3RyLCBqc2l6ZSBzdGFydCwganNpemUgbGVu
LCBjaGFyICpidWYpCnsKICByZXR1cm4gX0p2X0dldFN0cmluZ1VURlJlZ2lvbiAoc3RyLCBzdGFy
dCwgbGVuLCBidWYpOwp9CgpleHRlcm4gaW5saW5lIGpzdHJpbmcKSnZOZXdTdHJpbmdVVEYgKGNv
bnN0IGNoYXIgKmJ5dGVzKQp7CiAgcmV0dXJuIF9Kdl9OZXdTdHJpbmdVVEYgKGJ5dGVzKTsKfQoK
Y2xhc3MgSnZTeW5jaHJvbml6ZQp7CnByaXZhdGU6CiAgam9iamVjdCBvYmo7CnB1YmxpYzoKICBK
dlN5bmNocm9uaXplIChjb25zdCBqb2JqZWN0ICZvKSA6IG9iaiAobykKICAgIHsgX0p2X01vbml0
b3JFbnRlciAob2JqKTsgfQogIH5KdlN5bmNocm9uaXplICgpCiAgICB7IF9Kdl9Nb25pdG9yRXhp
dCAob2JqKTsgfQp9OwoKCmV4dGVybiBpbmxpbmUgdm9pZCAqCkp2TWFsbG9jIChqc2l6ZSBzaXpl
KQp7CiAgcmV0dXJuIF9Kdl9NYWxsb2MgKHNpemUpOwp9CgpleHRlcm4gaW5saW5lIHZvaWQKSnZG
cmVlICh2b2lkICpwdHIpCnsKICByZXR1cm4gX0p2X0ZyZWUgKHB0cik7Cn0KCmV4dGVybiBpbmxp
bmUgamludApKdkNyZWF0ZUphdmFWTSAodm9pZCogdm1fYXJncykKewogIHJldHVybiBfSnZfQ3Jl
YXRlSmF2YVZNICh2bV9hcmdzKTsKfQoKZXh0ZXJuIGlubGluZSBqYXZhOjpsYW5nOjpUaHJlYWQq
Ckp2QXR0YWNoQ3VycmVudFRocmVhZCAoanN0cmluZyBuYW1lLCBqYXZhOjpsYW5nOjpUaHJlYWRH
cm91cCogZ3JvdXApCnsKICByZXR1cm4gX0p2X0F0dGFjaEN1cnJlbnRUaHJlYWQgKG5hbWUsIGdy
b3VwKTsKfQoKZXh0ZXJuIGlubGluZSBqaW50Ckp2RGV0YWNoQ3VycmVudFRocmVhZCAodm9pZCkK
ewogIHJldHVybiBfSnZfRGV0YWNoQ3VycmVudFRocmVhZCAoKTsKfQojIDU0ICIuLi8uLi8uLi9n
Y2MvbGliamF2YS9qYXZhL25ldC9uYXRQbGFpbkRhdGFncmFtU29ja2V0SW1wbC5jYyIgMgojIDEg
ImphdmEvaW8vSU9FeGNlcHRpb24uaCIgMQoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgojIDEgImph
dmEvbGFuZy9FeGNlcHRpb24uaCIgMQoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgojIDEgImphdmEv
bGFuZy9UaHJvd2FibGUuaCIgMQoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCgpjbGFzcyA6Omph
dmE6Omxhbmc6OlRocm93YWJsZSA6IHB1YmxpYyA6OmphdmE6Omxhbmc6Ok9iamVjdAp7CnB1Ymxp
YzoKICB2aXJ0dWFsIDo6amF2YTo6bGFuZzo6VGhyb3dhYmxlICpmaWxsSW5TdGFja1RyYWNlICgp
OwogIHZpcnR1YWwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmdldExvY2FsaXplZE1lc3NhZ2UgKCk7
CiAgdmlydHVhbCA6OmphdmE6Omxhbmc6OlN0cmluZyAqZ2V0TWVzc2FnZSAoKSB7IHJldHVybiBk
ZXRhaWxNZXNzYWdlOyB9CiAgdmlydHVhbCB2b2lkIHByaW50U3RhY2tUcmFjZSAoKTsKICB2aXJ0
dWFsIHZvaWQgcHJpbnRTdGFja1RyYWNlICg6OmphdmE6OmlvOjpQcmludFN0cmVhbSAqKTsKICB2
aXJ0dWFsIHZvaWQgcHJpbnRTdGFja1RyYWNlICg6OmphdmE6OmlvOjpQcmludFdyaXRlciAqKTsK
ICBUaHJvd2FibGUgKCk7CiAgVGhyb3dhYmxlICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICB2
aXJ0dWFsIDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b1N0cmluZyAoKTsKcHJpdmF0ZToKICB2b2lk
IHByaW50UmF3U3RhY2tUcmFjZSAoOjpqYXZhOjppbzo6UHJpbnRXcml0ZXIgKik7CiAgOjpqYXZh
OjpsYW5nOjpTdHJpbmcgKmRldGFpbE1lc3NhZ2U7CnB1YmxpYzoKICBzdGF0aWMgamJvb2xlYW4g
dHJhY2VfZW5hYmxlZDsKcHJpdmF0ZToKICBqYnl0ZUFycmF5IHN0YWNrVHJhY2U7CiAgc3RhdGlj
IGNvbnN0IGpsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtMzA0MjY4NjA1NTY1ODA0NzI4NUxMOwpw
dWJsaWM6CgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkNsYXNzIGNsYXNzJDsKfTsKIyA5ICJqYXZh
L2xhbmcvRXhjZXB0aW9uLmgiIDIKCmNsYXNzIDo6amF2YTo6bGFuZzo6RXhjZXB0aW9uIDogcHVi
bGljIDo6amF2YTo6bGFuZzo6VGhyb3dhYmxlCnsKcHVibGljOgogIEV4Y2VwdGlvbiAoKTsKICBF
eGNlcHRpb24gKDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwpwdWJsaWM6CiAgc3RhdGljIGNvbnN0
IGpsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtMzM4NzUxNjk5MzEyNDIyOTk0OExMOwpwdWJsaWM6
CgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkNsYXNzIGNsYXNzJDsKfTsKIyA5ICJqYXZhL2lvL0lP
RXhjZXB0aW9uLmgiIDIKCmNsYXNzIDo6amF2YTo6aW86OklPRXhjZXB0aW9uIDogcHVibGljIDo6
amF2YTo6bGFuZzo6RXhjZXB0aW9uCnsKcHVibGljOgogIElPRXhjZXB0aW9uICgpOwogIElPRXhj
ZXB0aW9uICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKCiAgc3RhdGljIDo6amF2YTo6bGFuZzo6
Q2xhc3MgY2xhc3MkOwp9OwojIDU1ICIuLi8uLi8uLi9nY2MvbGliamF2YS9qYXZhL25ldC9uYXRQ
bGFpbkRhdGFncmFtU29ja2V0SW1wbC5jYyIgMgojIDEgImphdmEvaW8vRmlsZURlc2NyaXB0b3Iu
aCIgMQoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCgpjbGFzcyA6OmphdmE6OmlvOjpGaWxlRGVz
Y3JpcHRvciA6IHB1YmxpYyA6OmphdmE6Omxhbmc6Ok9iamVjdAp7CnB1YmxpYzoKICB2b2lkIHN5
bmMgKCk7CiAgamJvb2xlYW4gdmFsaWQgKCk7CiAgRmlsZURlc2NyaXB0b3IgKCk7CnB1YmxpYzoK
ICBGaWxlRGVzY3JpcHRvciAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgamludCk7CiAgamludCBv
cGVuICg6OmphdmE6Omxhbmc6OlN0cmluZyAqLCBqaW50KTsKICB2b2lkIHdyaXRlIChqaW50KTsK
ICB2b2lkIHdyaXRlIChqYnl0ZUFycmF5LCBqaW50LCBqaW50KTsKICB2b2lkIGNsb3NlICgpOwog
IGppbnQgc2VlayAoamxvbmcsIGppbnQsIGpib29sZWFuKTsKICBqbG9uZyBsZW5ndGggKCk7CiAg
amxvbmcgZ2V0RmlsZVBvaW50ZXIgKCk7CiAgamludCByZWFkICgpOwogIGppbnQgcmVhZCAoamJ5
dGVBcnJheSwgamludCwgamludCk7CiAgamludCBhdmFpbGFibGUgKCk7CnB1YmxpYzoKICB2b2lk
IGZpbmFsaXplICgpOwpwdWJsaWM6CiAgRmlsZURlc2NyaXB0b3IgKGppbnQpOwpwdWJsaWM6CiAg
c3RhdGljIDo6amF2YTo6aW86OkZpbGVEZXNjcmlwdG9yICppbjsKICBzdGF0aWMgOjpqYXZhOjpp
bzo6RmlsZURlc2NyaXB0b3IgKm91dDsKICBzdGF0aWMgOjpqYXZhOjppbzo6RmlsZURlc2NyaXB0
b3IgKmVycjsKcHVibGljOgogIHN0YXRpYyBjb25zdCBqaW50IFJFQUQgPSAxTDsKICBzdGF0aWMg
Y29uc3QgamludCBXUklURSA9IDJMOwogIHN0YXRpYyBjb25zdCBqaW50IEFQUEVORCA9IDRMOwog
IHN0YXRpYyBjb25zdCBqaW50IEVYQ0wgPSA4TDsKICBzdGF0aWMgY29uc3QgamludCBTRVQgPSAw
TDsKICBzdGF0aWMgY29uc3QgamludCBDVVIgPSAxTDsKcHJpdmF0ZToKICBqaW50IGZkOwpwdWJs
aWM6CgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkNsYXNzIGNsYXNzJDsKfTsKIyA1NiAiLi4vLi4v
Li4vZ2NjL2xpYmphdmEvamF2YS9uZXQvbmF0UGxhaW5EYXRhZ3JhbVNvY2tldEltcGwuY2MiIDIK
IyAxICJqYXZhL2lvL0ludGVycnVwdGVkSU9FeGNlcHRpb24uaCIgMQoKCgoKCiNwcmFnbWEgaW50
ZXJmYWNlCgoKCmNsYXNzIDo6amF2YTo6aW86OkludGVycnVwdGVkSU9FeGNlcHRpb24gOiBwdWJs
aWMgOjpqYXZhOjppbzo6SU9FeGNlcHRpb24KewpwdWJsaWM6CiAgSW50ZXJydXB0ZWRJT0V4Y2Vw
dGlvbiAoKTsKICBJbnRlcnJ1cHRlZElPRXhjZXB0aW9uICg6OmphdmE6Omxhbmc6OlN0cmluZyAq
KTsKcHVibGljOgogIEludGVycnVwdGVkSU9FeGNlcHRpb24gKDo6amF2YTo6bGFuZzo6U3RyaW5n
ICosIGppbnQpOwpwcml2YXRlOgogIHN0YXRpYyBjb25zdCBqbG9uZyBzZXJpYWxWZXJzaW9uVUlE
ID0gNDAyMDU2ODQ2MDcyNzUwMDU2N0xMOwpwdWJsaWM6CiAgamludCBieXRlc1RyYW5zZmVycmVk
OwoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMgNTcgIi4uLy4uLy4u
L2djYy9saWJqYXZhL2phdmEvbmV0L25hdFBsYWluRGF0YWdyYW1Tb2NrZXRJbXBsLmNjIiAyCiMg
MSAiamF2YS9uZXQvQmluZEV4Y2VwdGlvbi5oIiAxCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCiMg
MSAiamF2YS9uZXQvU29ja2V0RXhjZXB0aW9uLmgiIDEKCgoKCgojcHJhZ21hIGludGVyZmFjZQoK
CgpleHRlcm4gIkphdmEiCnsKICBuYW1lc3BhY2UgamF2YQogIHsKICAgIG5hbWVzcGFjZSBuZXQK
ICAgIHsKICAgICAgY2xhc3MgU29ja2V0RXhjZXB0aW9uOwogICAgfQogIH0KfTsKCmNsYXNzIDo6
amF2YTo6bmV0OjpTb2NrZXRFeGNlcHRpb24gOiBwdWJsaWMgOjpqYXZhOjppbzo6SU9FeGNlcHRp
b24KewpwdWJsaWM6CiAgU29ja2V0RXhjZXB0aW9uICgpOwogIFNvY2tldEV4Y2VwdGlvbiAoOjpq
YXZhOjpsYW5nOjpTdHJpbmcgKik7CgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkNsYXNzIGNsYXNz
JDsKfTsKIyA5ICJqYXZhL25ldC9CaW5kRXhjZXB0aW9uLmgiIDIKCmV4dGVybiAiSmF2YSIKewog
IG5hbWVzcGFjZSBqYXZhCiAgewogICAgbmFtZXNwYWNlIG5ldAogICAgewogICAgICBjbGFzcyBC
aW5kRXhjZXB0aW9uOwogICAgfQogIH0KfTsKCmNsYXNzIDo6amF2YTo6bmV0OjpCaW5kRXhjZXB0
aW9uIDogcHVibGljIDo6amF2YTo6bmV0OjpTb2NrZXRFeGNlcHRpb24KewpwdWJsaWM6CiAgQmlu
ZEV4Y2VwdGlvbiAoKTsKICBCaW5kRXhjZXB0aW9uICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsK
CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6Q2xhc3MgY2xhc3MkOwp9OwojIDU4ICIuLi8uLi8uLi9n
Y2MvbGliamF2YS9qYXZhL25ldC9uYXRQbGFpbkRhdGFncmFtU29ja2V0SW1wbC5jYyIgMgoKIyAx
ICJqYXZhL25ldC9QbGFpbkRhdGFncmFtU29ja2V0SW1wbC5oIiAxCgoKCgoKI3ByYWdtYSBpbnRl
cmZhY2UKCiMgMSAiamF2YS9uZXQvRGF0YWdyYW1Tb2NrZXRJbXBsLmgiIDEKCgoKCgojcHJhZ21h
IGludGVyZmFjZQoKCgpleHRlcm4gIkphdmEiCnsKICBuYW1lc3BhY2UgamF2YQogIHsKICAgIG5h
bWVzcGFjZSBuZXQKICAgIHsKICAgICAgY2xhc3MgRGF0YWdyYW1Tb2NrZXRJbXBsOwogICAgICBj
bGFzcyBEYXRhZ3JhbVBhY2tldDsKICAgICAgY2xhc3MgSW5ldEFkZHJlc3M7CiAgICB9CiAgfQp9
OwoKY2xhc3MgOjpqYXZhOjpuZXQ6OkRhdGFncmFtU29ja2V0SW1wbCA6IHB1YmxpYyA6OmphdmE6
Omxhbmc6Ok9iamVjdAp7CnB1YmxpYzoKICBEYXRhZ3JhbVNvY2tldEltcGwgKCk7CnB1YmxpYzoK
ICB2aXJ0dWFsIHZvaWQgYmluZCAoamludCwgOjpqYXZhOjpuZXQ6OkluZXRBZGRyZXNzICopID0g
MDsKICB2aXJ0dWFsIHZvaWQgY2xvc2UgKCkgPSAwOwogIHZpcnR1YWwgdm9pZCBjcmVhdGUgKCkg
PSAwOwogIHZpcnR1YWwgamludCBwZWVrICg6OmphdmE6Om5ldDo6SW5ldEFkZHJlc3MgKikgPSAw
OwogIHZpcnR1YWwgdm9pZCBzZW5kICg6OmphdmE6Om5ldDo6RGF0YWdyYW1QYWNrZXQgKikgPSAw
OwogIHZpcnR1YWwgdm9pZCByZWNlaXZlICg6OmphdmE6Om5ldDo6RGF0YWdyYW1QYWNrZXQgKikg
PSAwOwogIHZpcnR1YWwgdm9pZCBzZXRUVEwgKGpieXRlKSA9IDA7CiAgdmlydHVhbCBqYnl0ZSBn
ZXRUVEwgKCkgPSAwOwogIHZpcnR1YWwgdm9pZCBzZXRUaW1lVG9MaXZlIChqaW50KSA9IDA7CiAg
dmlydHVhbCBqaW50IGdldFRpbWVUb0xpdmUgKCkgPSAwOwogIHZpcnR1YWwgdm9pZCBqb2luICg6
OmphdmE6Om5ldDo6SW5ldEFkZHJlc3MgKikgPSAwOwogIHZpcnR1YWwgdm9pZCBsZWF2ZSAoOjpq
YXZhOjpuZXQ6OkluZXRBZGRyZXNzICopID0gMDsKICB2aXJ0dWFsIDo6amF2YTo6aW86OkZpbGVE
ZXNjcmlwdG9yICpnZXRGaWxlRGVzY3JpcHRvciAoKSB7IHJldHVybiBmZDsgfQogIHZpcnR1YWwg
amludCBnZXRMb2NhbFBvcnQgKCkgeyByZXR1cm4gbG9jYWxQb3J0OyB9CiAgamludCBsb2NhbFBv
cnQ7CiAgOjpqYXZhOjppbzo6RmlsZURlc2NyaXB0b3IgKmZkOwpwdWJsaWM6CgogIHN0YXRpYyA6
OmphdmE6Omxhbmc6OkNsYXNzIGNsYXNzJDsKfTsKIyA5ICJqYXZhL25ldC9QbGFpbkRhdGFncmFt
U29ja2V0SW1wbC5oIiAyCgpleHRlcm4gIkphdmEiCnsKICBuYW1lc3BhY2UgamF2YQogIHsKICAg
IG5hbWVzcGFjZSBuZXQKICAgIHsKICAgICAgY2xhc3MgUGxhaW5EYXRhZ3JhbVNvY2tldEltcGw7
CiAgICAgIGNsYXNzIERhdGFncmFtUGFja2V0OwogICAgICBjbGFzcyBJbmV0QWRkcmVzczsKICAg
IH0KICB9Cn07CgpjbGFzcyA6OmphdmE6Om5ldDo6UGxhaW5EYXRhZ3JhbVNvY2tldEltcGwgOiBw
dWJsaWMgOjpqYXZhOjpuZXQ6OkRhdGFncmFtU29ja2V0SW1wbAp7CnB1YmxpYzoKICBQbGFpbkRh
dGFncmFtU29ja2V0SW1wbCAoKTsKcHVibGljOgogIHZpcnR1YWwgdm9pZCBiaW5kIChqaW50LCA6
OmphdmE6Om5ldDo6SW5ldEFkZHJlc3MgKik7CiAgdmlydHVhbCB2b2lkIGNyZWF0ZSAoKTsKICB2
aXJ0dWFsIGppbnQgcGVlayAoOjpqYXZhOjpuZXQ6OkluZXRBZGRyZXNzICopOwogIHZpcnR1YWwg
dm9pZCBzZXRUaW1lVG9MaXZlIChqaW50KTsKICB2aXJ0dWFsIGppbnQgZ2V0VGltZVRvTGl2ZSAo
KTsKICB2aXJ0dWFsIHZvaWQgc2VuZCAoOjpqYXZhOjpuZXQ6OkRhdGFncmFtUGFja2V0ICopOwog
IHZpcnR1YWwgdm9pZCByZWNlaXZlICg6OmphdmE6Om5ldDo6RGF0YWdyYW1QYWNrZXQgKik7CnB1
YmxpYzoKICB2aXJ0dWFsIHZvaWQgc2V0T3B0aW9uIChqaW50LCA6OmphdmE6Omxhbmc6Ok9iamVj
dCAqKTsKICB2aXJ0dWFsIDo6amF2YTo6bGFuZzo6T2JqZWN0ICpnZXRPcHRpb24gKGppbnQpOwpw
cml2YXRlOgogIHZvaWQgbWNhc3RHcnAgKDo6amF2YTo6bmV0OjpJbmV0QWRkcmVzcyAqLCBqYm9v
bGVhbik7CnB1YmxpYzoKICB2aXJ0dWFsIHZvaWQgY2xvc2UgKCk7CiAgdmlydHVhbCBqYnl0ZSBn
ZXRUVEwgKCk7CiAgdmlydHVhbCB2b2lkIHNldFRUTCAoamJ5dGUpOwogIHZpcnR1YWwgdm9pZCBq
b2luICg6OmphdmE6Om5ldDo6SW5ldEFkZHJlc3MgKik7CiAgdmlydHVhbCB2b2lkIGxlYXZlICg6
OmphdmE6Om5ldDo6SW5ldEFkZHJlc3MgKik7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgamludCBf
SnZfVENQX05PREVMQVlfID0gMUw7CiAgc3RhdGljIGNvbnN0IGppbnQgX0p2X1NPX0JJTkRBRERS
XyA9IDE1TDsKICBzdGF0aWMgY29uc3QgamludCBfSnZfU09fUkVVU0VBRERSXyA9IDRMOwogIHN0
YXRpYyBjb25zdCBqaW50IF9Kdl9JUF9NVUxUSUNBU1RfSUZfID0gMTZMOwogIHN0YXRpYyBjb25z
dCBqaW50IF9Kdl9TT19MSU5HRVJfID0gMTI4TDsKICBzdGF0aWMgY29uc3QgamludCBfSnZfU09f
VElNRU9VVF8gPSA0MTAyTDsKICBzdGF0aWMgY29uc3QgamludCBfSnZfU09fU05EQlVGXyA9IDQw
OTdMOwogIHN0YXRpYyBjb25zdCBqaW50IF9Kdl9TT19SQ1ZCVUZfID0gNDA5OEw7CiAgamludCBm
bnVtOwogIDo6amF2YTo6bmV0OjpJbmV0QWRkcmVzcyAqbG9jYWxBZGRyZXNzOwogIGppbnQgdGlt
ZW91dDsKcHVibGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMg
NjAgIi4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEvbmV0L25hdFBsYWluRGF0YWdyYW1Tb2NrZXRJ
bXBsLmNjIiAyCiMgMSAiamF2YS9uZXQvSW5ldEFkZHJlc3MuaCIgMQoKCgoKCiNwcmFnbWEgaW50
ZXJmYWNlCgoKCgpleHRlcm4gIkphdmEiCnsKICBuYW1lc3BhY2UgamF2YQogIHsKICAgIG5hbWVz
cGFjZSBuZXQKICAgIHsKICAgICAgY2xhc3MgSW5ldEFkZHJlc3M7CiAgICB9CiAgfQp9OwoKY2xh
c3MgOjpqYXZhOjpuZXQ6OkluZXRBZGRyZXNzIDogcHVibGljIDo6amF2YTo6bGFuZzo6T2JqZWN0
CnsKcHJpdmF0ZToKICB2b2lkIHJlYWRPYmplY3QgKDo6amF2YTo6aW86Ok9iamVjdElucHV0U3Ry
ZWFtICopOwogIHZvaWQgd3JpdGVPYmplY3QgKDo6amF2YTo6aW86Ok9iamVjdE91dHB1dFN0cmVh
bSAqKTsKICBzdGF0aWMgamludCBnZXRGYW1pbHkgKGpieXRlQXJyYXkpOwpwdWJsaWM6CiAgSW5l
dEFkZHJlc3MgKGpieXRlQXJyYXksIDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwpwdWJsaWM6CiAg
amJvb2xlYW4gaXNNdWx0aWNhc3RBZGRyZXNzICgpOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICpn
ZXRIb3N0TmFtZSAoKTsKICBqYnl0ZUFycmF5IGdldEFkZHJlc3MgKCk7CnByaXZhdGU6CiAgc3Rh
dGljIEpBcnJheTwgOjpqYXZhOjpuZXQ6OkluZXRBZGRyZXNzICo+ICphbGxvY0FycmF5IChqaW50
KTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTZWN1cml0eUV4Y2VwdGlvbiAqY2hlY2tDb25uZWN0
ICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKcHVibGljOgogIDo6amF2YTo6bGFuZzo6U3RyaW5n
ICpnZXRIb3N0QWRkcmVzcyAoKTsKICBqaW50IGhhc2hDb2RlICgpOwogIGpib29sZWFuIGVxdWFs
cyAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvU3Ry
aW5nICgpOwpwcml2YXRlOgogIHN0YXRpYyBqYnl0ZUFycmF5IGF0b24gKDo6amF2YTo6bGFuZzo6
U3RyaW5nICopOwogIHN0YXRpYyBKQXJyYXk8IDo6amF2YTo6bmV0OjpJbmV0QWRkcmVzcyAqPiAq
bG9va3VwICg6OmphdmE6Omxhbmc6OlN0cmluZyAqLCA6OmphdmE6Om5ldDo6SW5ldEFkZHJlc3Mg
KiwgamJvb2xlYW4pOwpwdWJsaWM6CiAgc3RhdGljIDo6amF2YTo6bmV0OjpJbmV0QWRkcmVzcyAq
Z2V0QnlOYW1lICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBzdGF0aWMgSkFycmF5PCA6Omph
dmE6Om5ldDo6SW5ldEFkZHJlc3MgKj4gKmdldEFsbEJ5TmFtZSAoOjpqYXZhOjpsYW5nOjpTdHJp
bmcgKik7CnByaXZhdGU6CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6U3RyaW5nICpnZXRMb2NhbEhv
c3RuYW1lICgpOwpwdWJsaWM6CiAgc3RhdGljIDo6amF2YTo6bmV0OjpJbmV0QWRkcmVzcyAqZ2V0
TG9jYWxIb3N0ICgpOwpwcml2YXRlOgogIHN0YXRpYyB2b2lkIGdldExvY2FsSG9zdCAoOjpqYXZh
OjpsYW5nOjpTZWN1cml0eU1hbmFnZXIgKik7CiAgamludCBhZGRyZXNzOwpwdWJsaWM6CiAgamJ5
dGVBcnJheSBhZGRyOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICpob3N0TmFtZTsKICBqaW50IGZh
bWlseTsKcHJpdmF0ZToKICBzdGF0aWMgY29uc3Qgamxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDMy
ODYzMTY3NjQ5MTAzMTY1MDdMTDsKcHVibGljOgogIHN0YXRpYyBqYnl0ZUFycmF5IHplcm9zOwog
IHN0YXRpYyA6OmphdmE6Om5ldDo6SW5ldEFkZHJlc3MgKkFOWV9JRjsKcHJpdmF0ZToKICBzdGF0
aWMgamJ5dGVBcnJheSBsb2NhbGhvc3RBZGRyZXNzOwogIHN0YXRpYyA6OmphdmE6Om5ldDo6SW5l
dEFkZHJlc3MgKmxvY2FsaG9zdDsKcHVibGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFz
cyBjbGFzcyQ7Cn07CiMgNjEgIi4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEvbmV0L25hdFBsYWlu
RGF0YWdyYW1Tb2NrZXRJbXBsLmNjIiAyCiMgMSAiamF2YS9uZXQvRGF0YWdyYW1QYWNrZXQuaCIg
MQoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCgpleHRlcm4gIkphdmEiCnsKICBuYW1lc3BhY2Ug
amF2YQogIHsKICAgIG5hbWVzcGFjZSBuZXQKICAgIHsKICAgICAgY2xhc3MgRGF0YWdyYW1QYWNr
ZXQ7CiAgICAgIGNsYXNzIEluZXRBZGRyZXNzOwogICAgfQogIH0KfTsKCmNsYXNzIDo6amF2YTo6
bmV0OjpEYXRhZ3JhbVBhY2tldCA6IHB1YmxpYyA6OmphdmE6Omxhbmc6Ok9iamVjdAp7CnB1Ymxp
YzoKICBEYXRhZ3JhbVBhY2tldCAoamJ5dGVBcnJheSwgamludCwgamludCk7CiAgRGF0YWdyYW1Q
YWNrZXQgKGpieXRlQXJyYXksIGppbnQpOwogIERhdGFncmFtUGFja2V0IChqYnl0ZUFycmF5LCBq
aW50LCBqaW50LCA6OmphdmE6Om5ldDo6SW5ldEFkZHJlc3MgKiwgamludCk7CiAgRGF0YWdyYW1Q
YWNrZXQgKGpieXRlQXJyYXksIGppbnQsIDo6amF2YTo6bmV0OjpJbmV0QWRkcmVzcyAqLCBqaW50
KTsKICA6OmphdmE6Om5ldDo6SW5ldEFkZHJlc3MgKmdldEFkZHJlc3MgKCk7CiAgamludCBnZXRQ
b3J0ICgpOwogIGpieXRlQXJyYXkgZ2V0RGF0YSAoKTsKICBqaW50IGdldE9mZnNldCAoKTsKICBq
aW50IGdldExlbmd0aCAoKTsKICB2b2lkIHNldEFkZHJlc3MgKDo6amF2YTo6bmV0OjpJbmV0QWRk
cmVzcyAqKTsKICB2b2lkIHNldFBvcnQgKGppbnQpOwogIHZvaWQgc2V0RGF0YSAoamJ5dGVBcnJh
eSk7CiAgdm9pZCBzZXREYXRhIChqYnl0ZUFycmF5LCBqaW50LCBqaW50KTsKICB2b2lkIHNldExl
bmd0aCAoamludCk7CnByaXZhdGU6CiAgamJ5dGVBcnJheSBidWZmZXI7CiAgamludCBvZmZzZXQ7
CiAgamludCBsZW5ndGg7CiAgOjpqYXZhOjpuZXQ6OkluZXRBZGRyZXNzICphZGRyZXNzOwogIGpp
bnQgcG9ydDsKcHVibGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07
CiMgNjIgIi4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEvbmV0L25hdFBsYWluRGF0YWdyYW1Tb2Nr
ZXRJbXBsLmNjIiAyCiMgMSAiamF2YS9sYW5nL0ludGVybmFsRXJyb3IuaCIgMQoKCgoKCiNwcmFn
bWEgaW50ZXJmYWNlCgojIDEgImphdmEvbGFuZy9WaXJ0dWFsTWFjaGluZUVycm9yLmgiIDEKCgoK
CgojcHJhZ21hIGludGVyZmFjZQoKIyAxICJqYXZhL2xhbmcvRXJyb3IuaCIgMQoKCgoKCiNwcmFn
bWEgaW50ZXJmYWNlCgoKCmNsYXNzIDo6amF2YTo6bGFuZzo6RXJyb3IgOiBwdWJsaWMgOjpqYXZh
OjpsYW5nOjpUaHJvd2FibGUKewpwdWJsaWM6CiAgRXJyb3IgKCk7CiAgRXJyb3IgKDo6amF2YTo6
bGFuZzo6U3RyaW5nICopOwpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IGpsb25nIHNlcmlhbFZlcnNp
b25VSUQgPSA0OTgwMTk2NTA4Mjc3MjgwMzQyTEw7CnB1YmxpYzoKCiAgc3RhdGljIDo6amF2YTo6
bGFuZzo6Q2xhc3MgY2xhc3MkOwp9OwojIDkgImphdmEvbGFuZy9WaXJ0dWFsTWFjaGluZUVycm9y
LmgiIDIKCmNsYXNzIDo6amF2YTo6bGFuZzo6VmlydHVhbE1hY2hpbmVFcnJvciA6IHB1YmxpYyA6
OmphdmE6Omxhbmc6OkVycm9yCnsKcHVibGljOgogIFZpcnR1YWxNYWNoaW5lRXJyb3IgKCk7CiAg
VmlydHVhbE1hY2hpbmVFcnJvciAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CnB1YmxpYzoKICBz
dGF0aWMgY29uc3Qgamxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDQxNjE5ODM5MjY1NzE1Njg2NzBM
TDsKcHVibGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMgOSAi
amF2YS9sYW5nL0ludGVybmFsRXJyb3IuaCIgMgoKY2xhc3MgOjpqYXZhOjpsYW5nOjpJbnRlcm5h
bEVycm9yIDogcHVibGljIDo6amF2YTo6bGFuZzo6VmlydHVhbE1hY2hpbmVFcnJvcgp7CnB1Ymxp
YzoKICBJbnRlcm5hbEVycm9yICgpOwogIEludGVybmFsRXJyb3IgKDo6amF2YTo6bGFuZzo6U3Ry
aW5nICopOwpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IGpsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAt
OTA2MjU5MzQxNjEyNTU2MjM2NUxMOwpwdWJsaWM6CgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkNs
YXNzIGNsYXNzJDsKfTsKIyA2MyAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvamF2YS9uZXQvbmF0UGxh
aW5EYXRhZ3JhbVNvY2tldEltcGwuY2MiIDIKCiMgMSAiamF2YS9sYW5nL0Jvb2xlYW4uaCIgMQoK
CgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCmNsYXNzIDo6amF2YTo6bGFuZzo6Qm9vbGVhbiA6IHB1
YmxpYyA6OmphdmE6Omxhbmc6Ok9iamVjdAp7CnB1YmxpYzoKICBCb29sZWFuIChqYm9vbGVhbik7
CiAgQm9vbGVhbiAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgamJvb2xlYW4gYm9vbGVhblZh
bHVlICgpIHsgcmV0dXJuIHZhbHVlOyB9CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6Qm9vbGVhbiAq
dmFsdWVPZiAoamJvb2xlYW4pOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkJvb2xlYW4gKnZhbHVl
T2YgKDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwogIGppbnQgaGFzaENvZGUgKCk7CiAgamJvb2xl
YW4gZXF1YWxzICg6OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKICBzdGF0aWMgamJvb2xlYW4gZ2V0
Qm9vbGVhbiAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6
U3RyaW5nICp0b1N0cmluZyAoamJvb2xlYW4pOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b1N0
cmluZyAoKTsKcHVibGljOgogIHN0YXRpYyBjb25zdCBqbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0g
LTM2NjU4MDQxOTkwMTQzNjg1MzBMTDsKcHVibGljOgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkJv
b2xlYW4gKlRSVUU7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6Qm9vbGVhbiAqRkFMU0U7CiAgc3Rh
dGljIDo6amF2YTo6bGFuZzo6Q2xhc3MgKlRZUEU7CnByaXZhdGU6CiAgamJvb2xlYW4gdmFsdWU7
CiAgZnJpZW5kIGNsYXNzIGphdmE6Omxhbmc6OnJlZmxlY3Q6Ok1ldGhvZDsKcHVibGljOgoKICBz
dGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMgNjUgIi4uLy4uLy4uL2djYy9s
aWJqYXZhL2phdmEvbmV0L25hdFBsYWluRGF0YWdyYW1Tb2NrZXRJbXBsLmNjIiAyCiMgMSAiamF2
YS9sYW5nL0ludGVnZXIuaCIgMQoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgojIDEgImphdmEvbGFu
Zy9OdW1iZXIuaCIgMQoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCmNsYXNzIDo6amF2YTo6bGFu
Zzo6TnVtYmVyIDogcHVibGljIDo6amF2YTo6bGFuZzo6T2JqZWN0CnsKcHVibGljOgogIHZpcnR1
YWwgamJ5dGUgYnl0ZVZhbHVlICgpOwogIHZpcnR1YWwganNob3J0IHNob3J0VmFsdWUgKCk7CiAg
dmlydHVhbCBqaW50IGludFZhbHVlICgpID0gMDsKICB2aXJ0dWFsIGpsb25nIGxvbmdWYWx1ZSAo
KSA9IDA7CiAgdmlydHVhbCBqZmxvYXQgZmxvYXRWYWx1ZSAoKSA9IDA7CiAgdmlydHVhbCBqZG91
YmxlIGRvdWJsZVZhbHVlICgpID0gMDsKICBOdW1iZXIgKCk7CnByaXZhdGU6CiAgc3RhdGljIGNv
bnN0IGpsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtODc0MjQ0ODgyNDY1MjA3ODk2NUxMOwpwdWJs
aWM6CgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkNsYXNzIGNsYXNzJDsKfTsKIyA5ICJqYXZhL2xh
bmcvSW50ZWdlci5oIiAyCgpjbGFzcyA6OmphdmE6Omxhbmc6OkludGVnZXIgOiBwdWJsaWMgOjpq
YXZhOjpsYW5nOjpOdW1iZXIKewpwdWJsaWM6CiAgSW50ZWdlciAoamludCk7CiAgSW50ZWdlciAo
OjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgamludCBoYXNoQ29kZSAoKSB7IHJldHVybiB2YWx1
ZTsgfQogIGpib29sZWFuIGVxdWFscyAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7CiAgc3RhdGlj
IDo6amF2YTo6bGFuZzo6SW50ZWdlciAqZ2V0SW50ZWdlciAoOjpqYXZhOjpsYW5nOjpTdHJpbmcg
Kik7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6SW50ZWdlciAqZ2V0SW50ZWdlciAoOjpqYXZhOjps
YW5nOjpTdHJpbmcgKiwgamludCk7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6SW50ZWdlciAqZ2V0
SW50ZWdlciAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgOjpqYXZhOjpsYW5nOjpJbnRlZ2VyICop
Owpwcml2YXRlOgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0cmluZyAqdG9VbnNpZ25lZFN0cmlu
ZyAoamludCwgamludCk7CnB1YmxpYzoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRv
SGV4U3RyaW5nIChqaW50KTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvT2N0YWxT
dHJpbmcgKGppbnQpOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0cmluZyAqdG9CaW5hcnlTdHJp
bmcgKGppbnQpOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0cmluZyAqdG9TdHJpbmcgKGppbnQp
OwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b1N0cmluZyAoKTsKICBzdGF0aWMgOjpqYXZhOjps
YW5nOjpTdHJpbmcgKnRvU3RyaW5nIChqaW50LCBqaW50KTsKICBzdGF0aWMgOjpqYXZhOjpsYW5n
OjpJbnRlZ2VyICp2YWx1ZU9mICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBzdGF0aWMgOjpq
YXZhOjpsYW5nOjpJbnRlZ2VyICp2YWx1ZU9mICg6OmphdmE6Omxhbmc6OlN0cmluZyAqLCBqaW50
KTsKICBzdGF0aWMgamludCBwYXJzZUludCAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgc3Rh
dGljIGppbnQgcGFyc2VJbnQgKDo6amF2YTo6bGFuZzo6U3RyaW5nICosIGppbnQpOwpwcml2YXRl
OgogIHN0YXRpYyBqaW50IHBhcnNlSW50ICg6OmphdmE6Omxhbmc6OlN0cmluZyAqLCBqaW50LCBq
aW50LCBqYm9vbGVhbiwgamludCk7CnB1YmxpYzoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpJbnRl
Z2VyICpkZWNvZGUgKDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwogIGpieXRlIGJ5dGVWYWx1ZSAo
KTsKICBqc2hvcnQgc2hvcnRWYWx1ZSAoKTsKICBqaW50IGludFZhbHVlICgpIHsgcmV0dXJuIHZh
bHVlOyB9CiAgamxvbmcgbG9uZ1ZhbHVlICgpOwogIGpmbG9hdCBmbG9hdFZhbHVlICgpOwogIGpk
b3VibGUgZG91YmxlVmFsdWUgKCk7CiAgamludCBjb21wYXJlVG8gKDo6amF2YTo6bGFuZzo6SW50
ZWdlciAqKTsKICBqaW50IGNvbXBhcmVUbyAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7CnByaXZh
dGU6CiAgc3RhdGljIGNvbnN0IGpsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxMzYwODI2NjY3ODA2
ODUyOTIwTEw7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgamludCBNSU5fVkFMVUUgPSAtMjE0NzQ4
MzY0N0wgLSAxOwogIHN0YXRpYyBjb25zdCBqaW50IE1BWF9WQUxVRSA9IDIxNDc0ODM2NDdMOwog
IHN0YXRpYyA6OmphdmE6Omxhbmc6OkNsYXNzICpUWVBFOwpwcml2YXRlOgogIGppbnQgdmFsdWU7
CiAgZnJpZW5kIGNsYXNzIGphdmE6Omxhbmc6OnJlZmxlY3Q6Ok1ldGhvZDsKcHVibGljOgoKICBz
dGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMgNjYgIi4uLy4uLy4uL2djYy9s
aWJqYXZhL2phdmEvbmV0L25hdFBsYWluRGF0YWdyYW1Tb2NrZXRJbXBsLmNjIiAyCiMgMTQ3ICIu
Li8uLi8uLi9nY2MvbGliamF2YS9qYXZhL25ldC9uYXRQbGFpbkRhdGFncmFtU29ja2V0SW1wbC5j
YyIKdHlwZWRlZiBpbnQgc29ja2xlbl90OwoKCnVuaW9uIFNvY2tBZGRyCnsKICBzdHJ1Y3Qgc29j
a2FkZHJfaW4gYWRkcmVzczsKCgoKfTsKCnVuaW9uIE1jYXN0UmVxCnsKCgoKCgoKfTsKCnVuaW9u
IEluQWRkcgp7CiAgc3RydWN0IGluX2FkZHIgYWRkcjsKCgoKfTsKCgoKCgp2b2lkCmphdmE6Om5l
dDo6UGxhaW5EYXRhZ3JhbVNvY2tldEltcGw6OmNyZWF0ZSAoKQp7CiAgaW50IHNvY2sgPSA6OnNv
Y2tldCAoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7CiAgaWYgKHNvY2sgPCAwKQogICAgewogICAg
ICBjaGFyKiBzdHJlcnIgPSBzdHJlcnJvciAoKCpfZXJybm8oKSkpOwogICAgICB0aHJvdyBuZXcg
amF2YTo6bmV0OjpTb2NrZXRFeGNlcHRpb24gKEp2TmV3U3RyaW5nVVRGIChzdHJlcnIpKTsKICAg
IH0KICBmbnVtID0gc29jazsKICBmZCA9IG5ldyBqYXZhOjppbzo6RmlsZURlc2NyaXB0b3IgKHNv
Y2spOwp9Cgp2b2lkCmphdmE6Om5ldDo6UGxhaW5EYXRhZ3JhbVNvY2tldEltcGw6OmJpbmQgKGpp
bnQgbHBvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmE6
Om5ldDo6SW5ldEFkZHJlc3MgKmhvc3QpCnsKCiAgdW5pb24gU29ja0FkZHIgdTsKICBzdHJ1Y3Qg
c29ja2FkZHIgKnB0ciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgJnUuYWRkcmVzczsKCiAgamJ5dGVB
cnJheSBoYWRkcmVzcyA9IGhvc3QtPmFkZHI7CiAgamJ5dGUgKmJ5dGVzID0gZWxlbWVudHMgKGhh
ZGRyZXNzKTsKICBpbnQgbGVuID0gaGFkZHJlc3MtPmxlbmd0aDsKCiAgaWYgKGxlbiA9PSA0KQog
ICAgewogICAgICB1LmFkZHJlc3Muc2luX2ZhbWlseSA9IEFGX0lORVQ7CiAgICAgIGlmIChob3N0
ICE9IF9fbnVsbCkKICAgICAgICBtZW1jcHkgKCZ1LmFkZHJlc3Muc2luX2FkZHIsIGJ5dGVzLCBs
ZW4pOwogICAgICBlbHNlCiAgICAgICAgdS5hZGRyZXNzLnNpbl9hZGRyLnNfYWRkciA9IGh0b25s
IChJTkFERFJfQU5ZKTsKICAgICAgbGVuID0gc2l6ZW9mIChzdHJ1Y3Qgc29ja2FkZHJfaW4pOwog
ICAgICB1LmFkZHJlc3Muc2luX3BvcnQgPSBodG9ucyAobHBvcnQpOwogICAgfQojIDIyNCAiLi4v
Li4vLi4vZ2NjL2xpYmphdmEvamF2YS9uZXQvbmF0UGxhaW5EYXRhZ3JhbVNvY2tldEltcGwuY2Mi
CiAgZWxzZQogICAgdGhyb3cgbmV3IGphdmE6Om5ldDo6U29ja2V0RXhjZXB0aW9uIChKdk5ld1N0
cmluZ1VURiAoImludmFsaWQgbGVuZ3RoIikpOwoKICBpZiAoX0p2X2JpbmQgKGZudW0sIHB0ciwg
bGVuKSA9PSAwKQogICAgewogICAgICBzb2NrbGVuX3QgYWRkcmxlbiA9IHNpemVvZih1KTsKICAg
ICAgaWYgKGxwb3J0ICE9IDApCiAgICAgICAgbG9jYWxQb3J0ID0gbHBvcnQ7CiAgICAgIGVsc2Ug
aWYgKDo6Z2V0c29ja25hbWUgKGZudW0sIChzb2NrYWRkciopICZ1LCAmYWRkcmxlbikgPT0gMCkK
ICAgICAgICBsb2NhbFBvcnQgPSBudG9ocyAodS5hZGRyZXNzLnNpbl9wb3J0KTsKICAgICAgZWxz
ZQogICAgICAgIGdvdG8gZXJyb3I7CiAgICAgIHJldHVybjsKICAgIH0KIGVycm9yOgogIGNoYXIq
IHN0cmVyciA9IHN0cmVycm9yICgoKl9lcnJubygpKSk7CiAgdGhyb3cgbmV3IGphdmE6Om5ldDo6
QmluZEV4Y2VwdGlvbiAoSnZOZXdTdHJpbmdVVEYgKHN0cmVycikpOwp9CgpqaW50CmphdmE6Om5l
dDo6UGxhaW5EYXRhZ3JhbVNvY2tldEltcGw6OnBlZWsgKGphdmE6Om5ldDo6SW5ldEFkZHJlc3Mg
KmkpCnsKCiAgdW5pb24gU29ja0FkZHIgdTsKICBzb2NrbGVuX3QgYWRkcmxlbiA9IHNpemVvZih1
KTsKICBpbnQgcmV0bGVuID0KICAgIDo6cmVjdmZyb20gKGZudW0sIChjaGFyICopIF9fbnVsbCwg
MCwgTVNHX1BFRUssIChzb2NrYWRkciopICZ1LAogICAgICAmYWRkcmxlbik7CiAgaWYgKHJldGxl
biA8IDApCiAgICBnb3RvIGVycm9yOwoKICBqYnl0ZUFycmF5IHJhZGRyOwogIGppbnQgcnBvcnQ7
CiAgaWYgKHUuYWRkcmVzcy5zaW5fZmFtaWx5ID09IEFGX0lORVQpCiAgICB7CiAgICAgIHJhZGRy
ID0gSnZOZXdCeXRlQXJyYXkgKDQpOwogICAgICBtZW1jcHkgKGVsZW1lbnRzIChyYWRkciksICZ1
LmFkZHJlc3Muc2luX2FkZHIsIDQpOwogICAgICBycG9ydCA9IG50b2hzICh1LmFkZHJlc3Muc2lu
X3BvcnQpOwogICAgfQojIDI3MSAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvamF2YS9uZXQvbmF0UGxh
aW5EYXRhZ3JhbVNvY2tldEltcGwuY2MiCiAgZWxzZQogICAgdGhyb3cgbmV3IGphdmE6Om5ldDo6
U29ja2V0RXhjZXB0aW9uIChKdk5ld1N0cmluZ1VURiAoImludmFsaWQgZmFtaWx5IikpOwoKICBp
LT5hZGRyID0gcmFkZHI7CiAgcmV0dXJuIHJwb3J0OwogZXJyb3I6CiAgY2hhciogc3RyZXJyID0g
c3RyZXJyb3IgKCgqX2Vycm5vKCkpKTsKICB0aHJvdyBuZXcgamF2YTo6aW86OklPRXhjZXB0aW9u
IChKdk5ld1N0cmluZ1VURiAoc3RyZXJyKSk7Cn0KCnZvaWQKamF2YTo6bmV0OjpQbGFpbkRhdGFn
cmFtU29ja2V0SW1wbDo6c2VuZCAoamF2YTo6bmV0OjpEYXRhZ3JhbVBhY2tldCAqcCkKewoKICBq
aW50IHJwb3J0ID0gcC0+Z2V0UG9ydCgpOwogIHVuaW9uIFNvY2tBZGRyIHU7CiAgamJ5dGVBcnJh
eSBoYWRkcmVzcyA9IHAtPmdldEFkZHJlc3MoKS0+YWRkcjsKICBqYnl0ZSAqYnl0ZXMgPSBlbGVt
ZW50cyAoaGFkZHJlc3MpOwogIGludCBsZW4gPSBoYWRkcmVzcy0+bGVuZ3RoOwogIHN0cnVjdCBz
b2NrYWRkciAqcHRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSAmdS5hZGRyZXNzOwogIGpieXRlICpk
Ynl0ZXMgPSBlbGVtZW50cyAocC0+Z2V0RGF0YSgpKTsKICBpZiAobGVuID09IDQpCiAgICB7CiAg
ICAgIHUuYWRkcmVzcy5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKICAgICAgbWVtY3B5ICgmdS5hZGRy
ZXNzLnNpbl9hZGRyLCBieXRlcywgbGVuKTsKICAgICAgbGVuID0gc2l6ZW9mIChzdHJ1Y3Qgc29j
a2FkZHJfaW4pOwogICAgICB1LmFkZHJlc3Muc2luX3BvcnQgPSBodG9ucyAocnBvcnQpOwogICAg
fQojIDMwOCAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvamF2YS9uZXQvbmF0UGxhaW5EYXRhZ3JhbVNv
Y2tldEltcGwuY2MiCiAgZWxzZQogICAgdGhyb3cgbmV3IGphdmE6Om5ldDo6U29ja2V0RXhjZXB0
aW9uIChKdk5ld1N0cmluZ1VURiAoImludmFsaWQgbGVuZ3RoIikpOwoKICBpZiAoOjpzZW5kdG8g
KGZudW0sIChjaGFyICopIGRieXRlcywgcC0+Z2V0TGVuZ3RoKCksIDAsIHB0ciwgbGVuKSA+PSAw
KQogICAgcmV0dXJuOwoKICBjaGFyKiBzdHJlcnIgPSBzdHJlcnJvciAoKCpfZXJybm8oKSkpOwog
IHRocm93IG5ldyBqYXZhOjppbzo6SU9FeGNlcHRpb24gKEp2TmV3U3RyaW5nVVRGIChzdHJlcnIp
KTsKfQoKdm9pZApqYXZhOjpuZXQ6OlBsYWluRGF0YWdyYW1Tb2NrZXRJbXBsOjpyZWNlaXZlIChq
YXZhOjpuZXQ6OkRhdGFncmFtUGFja2V0ICpwKQp7CgogIHVuaW9uIFNvY2tBZGRyIHU7CiAgc29j
a2xlbl90IGFkZHJsZW4gPSBzaXplb2YodSk7CiAgamJ5dGUgKmRieXRlcyA9IGVsZW1lbnRzIChw
LT5nZXREYXRhKCkpOwogIGludCByZXRsZW4gPSAwOwoKCiAgaWYgKHRpbWVvdXQgPiAwKQogICAg
ewogICAgICBmZF9zZXQgcnNldDsKICAgICAgc3RydWN0IHRpbWV2YWwgdHY7CiAgICAgIEZEX1pF
Uk8oJnJzZXQpOwogICAgICBGRF9TRVQoZm51bSwgJnJzZXQpOwogICAgICB0di50dl9zZWMgPSB0
aW1lb3V0IC8gMTAwMDsKICAgICAgdHYudHZfdXNlYyA9ICh0aW1lb3V0ICUgMTAwMCkgKiAxMDAw
OwogICAgICBpbnQgcmV0dmFsOwogICAgICBpZiAoKHJldHZhbCA9IF9Kdl9zZWxlY3QgKGZudW0g
KyAxLCAmcnNldCwgX19udWxsLCBfX251bGwsICZ0dikpIDwgMCkKICAgICAgICBnb3RvIGVycm9y
OwogICAgICBlbHNlIGlmIChyZXR2YWwgPT0gMCkKICAgICAgICB0aHJvdyBuZXcgamF2YTo6aW86
OkludGVycnVwdGVkSU9FeGNlcHRpb24gKCk7CiAgICB9CgogIHJldGxlbiA9CiAgICA6OnJlY3Zm
cm9tIChmbnVtLCAoY2hhciAqKSBkYnl0ZXMsIHAtPmdldExlbmd0aCgpLCAwLCAoc29ja2FkZHIq
KSAmdSwKICAgICAgJmFkZHJsZW4pOwogIGlmIChyZXRsZW4gPCAwKQogICAgZ290byBlcnJvcjsK
CiAgamJ5dGVBcnJheSByYWRkcjsKICBqaW50IHJwb3J0OwogIGlmICh1LmFkZHJlc3Muc2luX2Zh
bWlseSA9PSBBRl9JTkVUKQogICAgewogICAgICByYWRkciA9IEp2TmV3Qnl0ZUFycmF5ICg0KTsK
ICAgICAgbWVtY3B5IChlbGVtZW50cyAocmFkZHIpLCAmdS5hZGRyZXNzLnNpbl9hZGRyLCA0KTsK
ICAgICAgcnBvcnQgPSBudG9ocyAodS5hZGRyZXNzLnNpbl9wb3J0KTsKICAgIH0KIyAzNjUgIi4u
Ly4uLy4uL2djYy9saWJqYXZhL2phdmEvbmV0L25hdFBsYWluRGF0YWdyYW1Tb2NrZXRJbXBsLmNj
IgogIGVsc2UKICAgIHRocm93IG5ldyBqYXZhOjpuZXQ6OlNvY2tldEV4Y2VwdGlvbiAoSnZOZXdT
dHJpbmdVVEYgKCJpbnZhbGlkIGZhbWlseSIpKTsKCiAgcC0+c2V0QWRkcmVzcyAobmV3IEluZXRB
ZGRyZXNzIChyYWRkciwgX19udWxsKSk7CiAgcC0+c2V0UG9ydCAocnBvcnQpOwogIHAtPnNldExl
bmd0aCAoKGppbnQpIHJldGxlbik7CiAgcmV0dXJuOwogZXJyb3I6CiAgY2hhciogc3RyZXJyID0g
c3RyZXJyb3IgKCgqX2Vycm5vKCkpKTsKICB0aHJvdyBuZXcgamF2YTo6aW86OklPRXhjZXB0aW9u
IChKdk5ld1N0cmluZ1VURiAoc3RyZXJyKSk7Cn0KCnZvaWQKamF2YTo6bmV0OjpQbGFpbkRhdGFn
cmFtU29ja2V0SW1wbDo6c2V0VGltZVRvTGl2ZSAoamludCB0dGwpCnsKCiAgY2hhciB2YWwgPSAo
Y2hhcikgdHRsOwogIHNvY2tsZW5fdCB2YWxfbGVuID0gc2l6ZW9mKHZhbCk7CiAgaWYgKDo6c2V0
c29ja29wdCAoZm51bSwgSVBQUk9UT19JUCwgSVBfTVVMVElDQVNUX1RUTCwgJnZhbCwgdmFsX2xl
bikgPT0gMCkKICAgIHJldHVybjsKCiAgY2hhciogc3RyZXJyID0gc3RyZXJyb3IgKCgqX2Vycm5v
KCkpKTsKICB0aHJvdyBuZXcgamF2YTo6aW86OklPRXhjZXB0aW9uIChKdk5ld1N0cmluZ1VURiAo
c3RyZXJyKSk7Cn0KCmppbnQKamF2YTo6bmV0OjpQbGFpbkRhdGFncmFtU29ja2V0SW1wbDo6Z2V0
VGltZVRvTGl2ZSAoKQp7CgogIGNoYXIgdmFsOwogIHNvY2tsZW5fdCB2YWxfbGVuID0gc2l6ZW9m
KHZhbCk7CiAgaWYgKDo6Z2V0c29ja29wdCAoZm51bSwgSVBQUk9UT19JUCwgSVBfTVVMVElDQVNU
X1RUTCwgJnZhbCwgJnZhbF9sZW4pID09IDApCiAgICByZXR1cm4gKChpbnQpIHZhbCkgJiAweEZG
OwoKICBjaGFyKiBzdHJlcnIgPSBzdHJlcnJvciAoKCpfZXJybm8oKSkpOwogIHRocm93IG5ldyBq
YXZhOjppbzo6SU9FeGNlcHRpb24gKEp2TmV3U3RyaW5nVVRGIChzdHJlcnIpKTsKfQoKdm9pZApq
YXZhOjpuZXQ6OlBsYWluRGF0YWdyYW1Tb2NrZXRJbXBsOjptY2FzdEdycCAoamF2YTo6bmV0OjpJ
bmV0QWRkcmVzcyAqaW5ldGFkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqYm9vbGVhbiBqb2luKQp7CiAgdW5pb24gTWNhc3RSZXEgdTsKICBqYnl0ZUFy
cmF5IGhhZGRyZXNzID0gaW5ldGFkZHItPmFkZHI7CiAgamJ5dGUgKmJ5dGVzID0gZWxlbWVudHMg
KGhhZGRyZXNzKTsKICBpbnQgbGVuID0gaGFkZHJlc3MtPmxlbmd0aDsKICBpbnQgbGV2ZWwsIG9w
bmFtZTsKICBjb25zdCBjaGFyICpwdHI7CiAgaWYgKDApCiAgICA7CiMgNDUwICIuLi8uLi8uLi9n
Y2MvbGliamF2YS9qYXZhL25ldC9uYXRQbGFpbkRhdGFncmFtU29ja2V0SW1wbC5jYyIKICBlbHNl
CiAgICB0aHJvdyBuZXcgamF2YTo6bmV0OjpTb2NrZXRFeGNlcHRpb24gKEp2TmV3U3RyaW5nVVRG
ICgiaW52YWxpZCBsZW5ndGgiKSk7CgogIGlmICg6OnNldHNvY2tvcHQgKGZudW0sIGxldmVsLCBv
cG5hbWUsIHB0ciwgbGVuKSA9PSAwKQogICAgcmV0dXJuOwoKICBjaGFyKiBzdHJlcnIgPSBzdHJl
cnJvciAoKCpfZXJybm8oKSkpOwogIHRocm93IG5ldyBqYXZhOjppbzo6SU9FeGNlcHRpb24gKEp2
TmV3U3RyaW5nVVRGIChzdHJlcnIpKTsKfQoKdm9pZApqYXZhOjpuZXQ6OlBsYWluRGF0YWdyYW1T
b2NrZXRJbXBsOjpzZXRPcHRpb24gKGppbnQgb3B0SUQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgamF2YTo6bGFuZzo6T2JqZWN0ICp2YWx1ZSkKewogIGlu
dCB2YWw7CiAgc29ja2xlbl90IHZhbF9sZW4gPSBzaXplb2YgKHZhbCk7CgogIGlmIChfSnZfSXNJ
bnN0YW5jZU9mICh2YWx1ZSwgJmphdmE6Omxhbmc6OkJvb2xlYW46OmNsYXNzJCkpCiAgICB7CiAg
ICAgIGphdmE6Omxhbmc6OkJvb2xlYW4gKmJvb2xvYmogPQogICAgICAgIHN0YXRpY19jYXN0PGph
dmE6Omxhbmc6OkJvb2xlYW4gKj4gKHZhbHVlKTsKICAgICAgdmFsID0gYm9vbG9iai0+Ym9vbGVh
blZhbHVlKCkgPyAxIDogMDsKICAgIH0KICBlbHNlIGlmIChfSnZfSXNJbnN0YW5jZU9mICh2YWx1
ZSwgJmphdmE6Omxhbmc6OkludGVnZXI6OmNsYXNzJCkpCiAgICB7CiAgICAgIGphdmE6Omxhbmc6
OkludGVnZXIgKmludG9iaiA9CiAgICAgICAgc3RhdGljX2Nhc3Q8amF2YTo6bGFuZzo6SW50ZWdl
ciAqPiAodmFsdWUpOwogICAgICB2YWwgPSAoaW50KSBpbnRvYmotPmludFZhbHVlKCk7CiAgICB9
CgoKICBzd2l0Y2ggKG9wdElEKQogICAgewogICAgICBjYXNlIF9Kdl9UQ1BfTk9ERUxBWV8gOgog
ICAgICAgIHRocm93IG5ldyBqYXZhOjpuZXQ6OlNvY2tldEV4Y2VwdGlvbiAoCiAgICAgICAgICBK
dk5ld1N0cmluZ1VURiAoIlRDUF9OT0RFTEFZIG5vdCB2YWxpZCBmb3IgVURQIikpOwogICAgICAg
IHJldHVybjsKICAgICAgY2FzZSBfSnZfU09fTElOR0VSXyA6CiAgICAgICAgdGhyb3cgbmV3IGph
dmE6Om5ldDo6U29ja2V0RXhjZXB0aW9uICgKICAgICAgICAgIEp2TmV3U3RyaW5nVVRGICgiU09f
TElOR0VSIG5vdCB2YWxpZCBmb3IgVURQIikpOwogICAgICAgIHJldHVybjsKICAgICAgY2FzZSBf
SnZfU09fU05EQlVGXyA6CiAgICAgIGNhc2UgX0p2X1NPX1JDVkJVRl8gOgoKCgoKCgogICAgICAg
IHRocm93IG5ldyBqYXZhOjpsYW5nOjpJbnRlcm5hbEVycm9yICgKICAgICAgICAgIEp2TmV3U3Ry
aW5nVVRGICgiU09fUkNWQlVGL1NPX1NOREJVRiBub3Qgc3VwcG9ydGVkIikpOwoKICAgICAgICBy
ZXR1cm47CiAgICAgIGNhc2UgX0p2X1NPX1JFVVNFQUREUl8gOgoKCgoKCiAgICAgICAgdGhyb3cg
bmV3IGphdmE6Omxhbmc6OkludGVybmFsRXJyb3IgKAogICAgICAgICAgSnZOZXdTdHJpbmdVVEYg
KCJTT19SRVVTRUFERFIgbm90IHN1cHBvcnRlZCIpKTsKCiAgICAgICAgcmV0dXJuOwogICAgICBj
YXNlIF9Kdl9TT19CSU5EQUREUl8gOgogICAgICAgIHRocm93IG5ldyBqYXZhOjpuZXQ6OlNvY2tl
dEV4Y2VwdGlvbiAoCiAgICAgICAgICBKdk5ld1N0cmluZ1VURiAoIlNPX0JJTkRBRERSOiByZWFk
IG9ubHkgb3B0aW9uIikpOwogICAgICAgIHJldHVybjsKICAgICAgY2FzZSBfSnZfSVBfTVVMVElD
QVNUX0lGXyA6CiAgICAgICAgdW5pb24gSW5BZGRyIHU7CiAgICAgICAgamJ5dGVBcnJheSBoYWRk
cmVzczsKICAgICAgICBqYnl0ZSAqYnl0ZXM7CiAgICAgICAgaW50IGxlbjsKICAgICAgICBpbnQg
bGV2ZWwsIG9wbmFtZTsKICAgICAgICBjb25zdCBjaGFyICpwdHI7CgogICAgICAgIGhhZGRyZXNz
ID0gKChqYXZhOjpuZXQ6OkluZXRBZGRyZXNzICopIHZhbHVlKS0+YWRkcjsKICAgICAgICBieXRl
cyA9IGVsZW1lbnRzIChoYWRkcmVzcyk7CiAgICAgICAgbGVuID0gaGFkZHJlc3MtPmxlbmd0aDsK
ICAgICAgICBpZiAobGVuID09IDQpCiAgICAgICAgICB7CiAgICAgICAgICAgIGxldmVsID0gSVBQ
Uk9UT19JUDsKICAgICAgICAgICAgb3BuYW1lID0gSVBfTVVMVElDQVNUX0lGOwogICAgICAgICAg
ICBtZW1jcHkgKCZ1LmFkZHIsIGJ5dGVzLCBsZW4pOwogICAgICAgICAgICBsZW4gPSBzaXplb2Yg
KHN0cnVjdCBpbl9hZGRyKTsKICAgICAgICAgICAgcHRyID0gKGNvbnN0IGNoYXIgKikgJnUuYWRk
cjsKICAgICAgICAgIH0KIyA1NDcgIi4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEvbmV0L25hdFBs
YWluRGF0YWdyYW1Tb2NrZXRJbXBsLmNjIgogICAgICAgIGVsc2UKICAgICAgICAgIHRocm93CiAg
ICAgICAgICAgIG5ldyBqYXZhOjpuZXQ6OlNvY2tldEV4Y2VwdGlvbiAoSnZOZXdTdHJpbmdVVEYg
KCJpbnZhbGlkIGxlbmd0aCIpKTsKCiAgICAgICAgaWYgKDo6c2V0c29ja29wdCAoZm51bSwgbGV2
ZWwsIG9wbmFtZSwgcHRyLCBsZW4pICE9IDApCiAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAg
IHJldHVybjsKICAgICAgY2FzZSBfSnZfU09fVElNRU9VVF8gOgogICAgICAgIHRpbWVvdXQgPSB2
YWw7CiAgICAgICAgcmV0dXJuOwogICAgICBkZWZhdWx0IDoKICAgICAgICAoKl9lcnJubygpKSA9
IEVOT1BST1RPT1BUOwogICAgfQoKIGVycm9yOgogIGNoYXIqIHN0cmVyciA9IHN0cmVycm9yICgo
Kl9lcnJubygpKSk7CiAgdGhyb3cgbmV3IGphdmE6Om5ldDo6U29ja2V0RXhjZXB0aW9uIChKdk5l
d1N0cmluZ1VURiAoc3RyZXJyKSk7Cn0KCmphdmE6Omxhbmc6Ok9iamVjdCAqCmphdmE6Om5ldDo6
UGxhaW5EYXRhZ3JhbVNvY2tldEltcGw6OmdldE9wdGlvbiAoamludCBvcHRJRCkKewogIGludCB2
YWw7CiAgc29ja2xlbl90IHZhbF9sZW4gPSBzaXplb2YodmFsKTsKICB1bmlvbiBTb2NrQWRkciB1
OwogIHNvY2tsZW5fdCBhZGRybGVuID0gc2l6ZW9mKHUpOwoKICBzd2l0Y2ggKG9wdElEKQogICAg
ewogICAgICBjYXNlIF9Kdl9UQ1BfTk9ERUxBWV8gOgogICAgICAgIHRocm93IG5ldyBqYXZhOjpu
ZXQ6OlNvY2tldEV4Y2VwdGlvbiAoCiAgICAgICAgICBKdk5ld1N0cmluZ1VURiAoIlRDUF9OT0RF
TEFZIG5vdCB2YWxpZCBmb3IgVURQIikpOwogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBfSnZf
U09fTElOR0VSXyA6CiAgICAgICAgdGhyb3cgbmV3IGphdmE6Om5ldDo6U29ja2V0RXhjZXB0aW9u
ICgKICAgICAgICAgIEp2TmV3U3RyaW5nVVRGICgiU09fTElOR0VSIG5vdCB2YWxpZCBmb3IgVURQ
IikpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIF9Kdl9TT19SQ1ZCVUZfIDoKICAgICAgY2Fz
ZSBfSnZfU09fU05EQlVGXyA6CiMgNTk1ICIuLi8uLi8uLi9nY2MvbGliamF2YS9qYXZhL25ldC9u
YXRQbGFpbkRhdGFncmFtU29ja2V0SW1wbC5jYyIKICAgICAgICB0aHJvdyBuZXcgamF2YTo6bGFu
Zzo6SW50ZXJuYWxFcnJvciAoCiAgICAgICAgICBKdk5ld1N0cmluZ1VURiAoIlNPX1JDVkJVRi9T
T19TTkRCVUYgbm90IHN1cHBvcnRlZCIpKTsKCiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgX0p2
X1NPX0JJTkRBRERSXzoKCiAgICAgICAgaWYgKGxvY2FsQWRkcmVzcyA9PSBfX251bGwpCiAgICAg
ICAgICB7CiAgICAgICAgICAgIGpieXRlQXJyYXkgbGFkZHI7CiAgICAgICAgICAgIGlmICg6Omdl
dHNvY2tuYW1lIChmbnVtLCAoc29ja2FkZHIqKSAmdSwgJmFkZHJsZW4pICE9IDApCiAgICAgICAg
ICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgaWYgKHUuYWRkcmVzcy5zaW5fZmFtaWx5ID09
IEFGX0lORVQpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbGFkZHIgPSBKdk5ld0J5
dGVBcnJheSAoNCk7CiAgICAgICAgICAgICAgICBtZW1jcHkgKGVsZW1lbnRzIChsYWRkciksICZ1
LmFkZHJlc3Muc2luX2FkZHIsIDQpOwogICAgICAgICAgICAgIH0KCgoKCgoKCiAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICB0aHJvdyBuZXcgamF2YTo6bmV0OjpTb2NrZXRFeGNlcHRpb24g
KEp2TmV3U3RyaW5nVVRGICgiaW52YWxpZCBmYW1pbHkiKSk7CiAgICAgICAgICAgIGxvY2FsQWRk
cmVzcyA9IG5ldyBqYXZhOjpuZXQ6OkluZXRBZGRyZXNzIChsYWRkciwgX19udWxsKTsKICAgICAg
ICAgIH0KICAgICAgICByZXR1cm4gbG9jYWxBZGRyZXNzOwogICAgICAgIGJyZWFrOwogICAgICBj
YXNlIF9Kdl9TT19SRVVTRUFERFJfIDoKCgoKCgoKICAgICAgICB0aHJvdyBuZXcgamF2YTo6bGFu
Zzo6SW50ZXJuYWxFcnJvciAoCiAgICAgICAgICBKdk5ld1N0cmluZ1VURiAoIlNPX1JFVVNFQURE
UiBub3Qgc3VwcG9ydGVkIikpOwoKICAgICAgICBicmVhazsKICAgICAgY2FzZSBfSnZfSVBfTVVM
VElDQVNUX0lGXyA6CiMgNjUwICIuLi8uLi8uLi9nY2MvbGliamF2YS9qYXZhL25ldC9uYXRQbGFp
bkRhdGFncmFtU29ja2V0SW1wbC5jYyIKICAgICAgICB0aHJvdyBuZXcgamF2YTo6bmV0OjpTb2Nr
ZXRFeGNlcHRpb24gKAogICAgICAgICAgSnZOZXdTdHJpbmdVVEYgKCJJUF9NVUxUSUNBU1RfSUY6
IG5vdCBhdmFpbGFibGUgLSBubyBpbmV0X250b2EoKSIpKTsKCiAgICAgICAgYnJlYWs7CiAgICAg
IGNhc2UgX0p2X1NPX1RJTUVPVVRfIDoKICAgICAgICByZXR1cm4gbmV3IGphdmE6Omxhbmc6Oklu
dGVnZXIgKHRpbWVvdXQpOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0IDoKICAgICAgICAo
Kl9lcnJubygpKSA9IEVOT1BST1RPT1BUOwogICAgfQoKIGVycm9yOgogIGNoYXIqIHN0cmVyciA9
IHN0cmVycm9yICgoKl9lcnJubygpKSk7CiAgdGhyb3cgbmV3IGphdmE6Om5ldDo6U29ja2V0RXhj
ZXB0aW9uIChKdk5ld1N0cmluZ1VURiAoc3RyZXJyKSk7Cn0K


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