c++/1093: Internal compiler error

tobias.burnus@physik.fu-berlin.de tobias.burnus@physik.fu-berlin.de
Tue Dec 19 11:36:00 GMT 2000


>Number:         1093
>Category:       c++
>Synopsis:       Internal compiler error
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Dec 19 11:36:03 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     tobias.burnus@physik.fu-berlin.de
>Release:        gcc version 2.95.2 19991024 (release)
>Organization:
>Environment:
alpha-dec-osf4.0e
>Description:
Compliation of Qt 2.2.3 using:
g++  -c -I/usr/X11R6/include -I/amd/sigma/0/src/alpha-dec-osf4.0/workdir/qt-2.2.3/include -I/usr/X11R6/include -D_POSIX_SOURCE -D_OSF_SOURCE -D_AES_SOURCE -O2 -fPIC -DQT_BUILTIN_GIF_READER=0 -DQT_NO_SM_SUPPORT  -I/usr/local/include  -o kernel/moc_qnetworkprotocol.o kernel/moc_qnetworkprotocol.cpp

causes this error:
-------------------
kernel/moc_qnetworkprotocol.cpp: In function `static class QMetaObject * QNetworkProtocol::staticMetaObject()':
kernel/moc_qnetworkprotocol.cpp:164: Internal compiler error in `gen_reload_inhi', at insn-emit.c:5550
Please submit a full bug report.
See <URL: http://www.gnu.org/software/gcc/faq.html#bugreport > for instructions.
-------------------

The  -save-temps .ii file is appended
>How-To-Repeat:

>Fix:

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

IyAxICJrZXJuZWwvbW9jX3FuZXR3b3JrcHJvdG9jb2wuY3BwIgogCgoKCgoKCgoKCgoKCgoKCiMg
MSAia2VybmVsL3FuZXR3b3JrcHJvdG9jb2wuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgojIDEgImtlcm5lbC9xdXJsaW5mby5oIiAxCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1k
ZWMtb3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xZGF0ZXRpbWUuaCIgMQogCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9hbWQvc2lnbWEvMC9zcmMv
YWxwaGEtZGVjLW9zZjQuMC93b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcXN0cmluZy5oIiAxCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9hbWQvc2lnbWEv
MC9zcmMvYWxwaGEtZGVjLW9zZjQuMC93b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcWNzdHJpbmcu
aCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvYW1k
L3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3Fh
cnJheS5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAi
L2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVk
ZS9xZ2FycmF5LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IyAxICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9p
bmNsdWRlL3FzaGFyZWQuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgojIDEgIi9hbWQvc2lnbWEvMC9zcmMvYWxwaGEtZGVjLW9zZjQuMC93b3JrZGlyL3F0LTIu
Mi4zL2luY2x1ZGUvcWdsb2JhbC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKCiMgMTA5ICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rp
ci9xdC0yLjIuMy9pbmNsdWRlL3FnbG9iYWwuaCIKCgojIDEzMyAiL2FtZC9zaWdtYS8wL3NyYy9h
bHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xZ2xvYmFsLmgiCgoKCgoK
CiAKIAoKIAoKCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCiAK
CiMgMTkwICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIu
My9pbmNsdWRlL3FnbG9iYWwuaCIKCgoKCgoKCgoKCgoKCgojIDI1OSAiL2FtZC9zaWdtYS8wL3Ny
Yy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xZ2xvYmFsLmgiCgoK
CgoKCiAKCiMgMjc4ICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9x
dC0yLjIuMy9pbmNsdWRlL3FnbG9iYWwuaCIKCgoKCgoKCgoKCgoKCiAKIAogCiAKIAogCgoKCgog
CiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIJdWNoYXI7
CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQJdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkCXVpbnQ7CnR5
cGVkZWYgdW5zaWduZWQgbG9uZwl1bG9uZzsKdHlwZWRlZiBjaGFyCSAgICAgICAqcGNoYXI7CnR5
cGVkZWYgdWNoYXIJICAgICAgICpwdWNoYXI7CnR5cGVkZWYgY29uc3QgY2hhciAgICAgKnBjY2hh
cjsKCgogCiAKIAoKCmNvbnN0IGJvb2wgRkFMU0UgPSAwOwpjb25zdCBib29sIFRSVUUgPSAhMDsK
CgoKCgoKCgoKCgoKCgogCiAKIAoKCgoKCmlubGluZSBpbnQgcVJvdW5kKCBkb3VibGUgZCApCnsK
ICAgIHJldHVybiBkID4gMC4wID8gaW50KGQrMC41KSA6IGludChkLTAuNSk7Cn0KCgogCiAKIAoK
IAogCgp0eXBlZGVmIHNpZ25lZCBjaGFyCUlOVDg7CQkJIAp0eXBlZGVmIHVuc2lnbmVkIGNoYXIJ
VUlOVDg7CQkJIAp0eXBlZGVmIHNob3J0CQlJTlQxNjsJCQkgCnR5cGVkZWYgdW5zaWduZWQgc2hv
cnQJVUlOVDE2OwkJCSAKdHlwZWRlZiBpbnQJCUlOVDMyOwkJCSAKdHlwZWRlZiB1bnNpZ25lZCBp
bnQJVUlOVDMyOwkJCSAKCgp0eXBlZGVmIHNpZ25lZCBjaGFyCVFfSU5UODsJCQkgCnR5cGVkZWYg
dW5zaWduZWQgY2hhcglRX1VJTlQ4OwkJIAp0eXBlZGVmIHNob3J0CQlRX0lOVDE2OwkJIAp0eXBl
ZGVmIHVuc2lnbmVkIHNob3J0CVFfVUlOVDE2OwkJIAp0eXBlZGVmIGludAkJUV9JTlQzMjsJCSAK
dHlwZWRlZiB1bnNpZ25lZCBpbnQJUV9VSU5UMzI7CQkgCnR5cGVkZWYgbG9uZwkJUV9JTlQ2NDsJ
CSAKdHlwZWRlZiB1bnNpZ25lZCBsb25nCVFfVUlOVDY0OwkJIAoKIAogCiAKCmNsYXNzIFFEYXRh
U3RyZWFtOwoKCgoKCgoKCiMgMSAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dv
cmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xZmVhdHVyZXMuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIAogCiAKIAogCiAKIAogCiMgNjMgIi9hbWQvc2ln
bWEvMC9zcmMvYWxwaGEtZGVjLW9zZjQuMC93b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcWZlYXR1
cmVzLmgiCgojIDEgIi9hbWQvc2lnbWEvMC9zcmMvYWxwaGEtZGVjLW9zZjQuMC93b3JrZGlyL3F0
LTIuMi4zL2luY2x1ZGUvcWNvbmZpZy5oIiAxCiAKIyA2NCAiL2FtZC9zaWdtYS8wL3NyYy9hbHBo
YS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xZmVhdHVyZXMuaCIgMgoKCgoK
IAogCgoKIAoKCgoKCgoKCiAKCgoKCgoKCiAKCgogCgogCgoKIAogCgoKIAoKIAoKCiAKCgogCiAK
CgoKCgoKCgogCgoKCgoKIAogCgoKCgoKIAogCgoKCgoKCgoKCgogCgoKCgoKIAogCgoKCgoKIAog
CgoKCgogCgogCgoKCiAKIAoKCgogCiMgMTgzICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1v
c2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3FmZWF0dXJlcy5oIgoKCiAKIAoKCgoKIAog
CgoKCgoKCgoKIAoKCgoKCgogCgogCgoKCgoKCiAKCgogCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK
CgoKCgoKCiAKCgoKCgoKIAoKCgoKCgogCiAKCgogCgogCgoKCgoKCgoKIAoKIAoKCiAKCgoKCgoK
CiAKCgoKCgojIDMwNyAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIv
cXQtMi4yLjMvaW5jbHVkZS9xZmVhdHVyZXMuaCIKCgogCgoKIAoKCiAKCgoKCgoKCgoKCgoKCgoK
IAoKCiAKCiAKCgoKCgoKIAoKCiAKIAoKCiAKIAoKCiAKIAoKCiAKIAoKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKIAogCgoKIAoKCgoKCgoKCiAKCgogCiAKCgogCiAK
CgogCiAKCgoKCiAKCgoKIAoKCiAKIAoKCiAKIAoKCiAKIAoKCiAKCiAKCgogCgogCgoKCgoKCgoK
CgoKIAoKCiAKCiAKCgoKCiAKCiAKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog
CgoKIAogCgoKIAogCgoKIAogCgoKCgoKCgoKCgoKCiAKCgogCgogCiAKCgogCiAKCgogCgogCgoK
CgoKCiAKCgoKCgoKIAogCgoKIAoKIAoKCgoKCgoKCiAKCgogCiAKCgogCiAKCgogCgogCgoKIAoK
CiAKCgoKCgoKIAoKCgoKCgogCgoKIyA1OTIgIi9hbWQvc2lnbWEvMC9zcmMvYWxwaGEtZGVjLW9z
ZjQuMC93b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcWZlYXR1cmVzLmgiCgoKCgoKCgogCgoKCgoK
IAoKCgoKCiMgNjIwICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9x
dC0yLjIuMy9pbmNsdWRlL3FmZWF0dXJlcy5oIgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgojIDY3OCAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMt
b3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xZmVhdHVyZXMuaCIKCgoKCgoKCiAKCgoK
CgogCgoKIAojIDcxMiAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIv
cXQtMi4yLjMvaW5jbHVkZS9xZmVhdHVyZXMuaCIKCgoKCgoKCgoKIyA3MzAgIi9hbWQvc2lnbWEv
MC9zcmMvYWxwaGEtZGVjLW9zZjQuMC93b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcWZlYXR1cmVz
LmgiCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgoKCgoKIAoKCgoKCgoKCgoKCiAKCgoKCgogCgoK
IAogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgODE1ICIvYW1kL3NpZ21hLzAvc3JjL2Fs
cGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3FmZWF0dXJlcy5oIgoKCgoK
CgoKCgoKCgoKCgoKCiAKCgogCgogCgoKCgoKIAoKCgoKCiAKCgoKCgogCgoKCgoKIAoKCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDkwMyAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1k
ZWMtb3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xZmVhdHVyZXMuaCIKCgoKCgoKCgog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgojIDQwOSAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtk
aXIvcXQtMi4yLjMvaW5jbHVkZS9xZ2xvYmFsLmgiIDIKCgoKIAogCiAKCiMgNDM0ICIvYW1kL3Np
Z21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3FnbG9i
YWwuaCIKCgoKCgoKCgoKIAogCiAKCiAgY29uc3QgY2hhciAqcVZlcnNpb24oKTsKICBib29sIHFT
eXNJbmZvKCBpbnQgKndvcmRTaXplLCBib29sICpiaWdFbmRpYW4gKTsKCgogCiAKIAoKCgoKCgoK
CgoKCgogCiAKIAogCiAKCgoKCgojIDQ5MyAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3Nm
NC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xZ2xvYmFsLmgiCgoKCiAKIAogCgoKCgoKIAog
CiAKCgoKCiAgdm9pZCBxRGVidWcoIGNvbnN0IGNoYXIgKiwgLi4uICkJIAoKICAgIF9fYXR0cmli
dXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQoKOwoKICB2b2lkIHFXYXJuaW5nKCBjb25z
dCBjaGFyICosIC4uLiApCSAKCiAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEs
IDIpKSkKCjsKCiAgdm9pZCBxRmF0YWwoIGNvbnN0IGNoYXIgKiwgLi4uICkJIAoKICAgIF9fYXR0
cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQoKOwoKCiAKIAoKIAoKICB2b2lkIGRl
YnVnKCBjb25zdCBjaGFyICosIC4uLiApCSAKCiAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChw
cmludGYsIDEsIDIpKSkKCjsKCiAgdm9pZCB3YXJuaW5nKCBjb25zdCBjaGFyICosIC4uLiApCSAK
CiAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKCjsKCiAgdm9pZCBm
YXRhbCggY29uc3QgY2hhciAqLCAuLi4gKQkgCgogICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAo
cHJpbnRmLCAxLCAyKSkpCgo7CgogCgoKCgoKCgoKCgoKCgoKCgogIGJvb2wgcXRfY2hlY2tfcG9p
bnRlciggYm9vbCBjLCBjb25zdCBjaGFyICosIGludCApOwoKCgoKCgoKZW51bSBRdE1zZ1R5cGUg
eyBRdERlYnVnTXNnLCBRdFdhcm5pbmdNc2csIFF0RmF0YWxNc2cgfTsKCnR5cGVkZWYgdm9pZCAo
Km1zZ19oYW5kbGVyKShRdE1zZ1R5cGUsIGNvbnN0IGNoYXIgKik7CiAgbXNnX2hhbmRsZXIgcUlu
c3RhbGxNc2dIYW5kbGVyKCBtc2dfaGFuZGxlciApOwoKCiAgdm9pZCBxU3VwcHJlc3NPYnNvbGV0
ZVdhcm5pbmdzKCBib29sID0gVFJVRSApOwoKCgogIHZvaWQgcU9ic29sZXRlKCBjb25zdCBjaGFy
ICpvYmosIGNvbnN0IGNoYXIgKm9sZGZ1bmMsCgkJCSBjb25zdCBjaGFyICpuZXdmdW5jICk7CiAg
dm9pZCBxT2Jzb2xldGUoIGNvbnN0IGNoYXIgKm9iaiwgY29uc3QgY2hhciAqb2xkZnVuYyApOwog
IHZvaWQgcU9ic29sZXRlKCBjb25zdCBjaGFyICptZXNzYWdlICk7CgoKCiMgNDIgIi9hbWQvc2ln
bWEvMC9zcmMvYWxwaGEtZGVjLW9zZjQuMC93b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcXNoYXJl
ZC5oIiAyCgoKCgpzdHJ1Y3QgUVNoYXJlZAp7CiAgICBRU2hhcmVkKCkJCXsgY291bnQgPSAxOyB9
CiAgICB2b2lkIHJlZigpCQl7IGNvdW50Kys7IH0KICAgIGJvb2wgZGVyZWYoKQl7IHJldHVybiAh
LS1jb3VudDsgfQogICAgdWludCBjb3VudDsKfTsKCgoKIyA0MiAiL2FtZC9zaWdtYS8wL3NyYy9h
bHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xZ2FycmF5LmgiIDIKCgoK
CmNsYXNzICAgUUdBcnJheQkJCQkJIAp7CmZyaWVuZCBjbGFzcyBRQnVmZmVyOwpwdWJsaWM6CiAg
ICAgCiAgICBzdHJ1Y3QgYXJyYXlfZGF0YSA6IHB1YmxpYyBRU2hhcmVkIHsJIAoJYXJyYXlfZGF0
YSgpCXsgZGF0YT0wOyBsZW49MDsgfQoJY2hhciAqZGF0YTsJCQkJIAoJdWludCAgbGVuOwogICAg
fTsKICAgIFFHQXJyYXkoKTsKcHJvdGVjdGVkOgogICAgUUdBcnJheSggaW50LCBpbnQgKTsJCQkg
CiAgICBRR0FycmF5KCBpbnQgc2l6ZSApOwkJCSAKICAgIFFHQXJyYXkoIGNvbnN0IFFHQXJyYXkg
JmEgKTsJCSAKICAgIHZpcnR1YWwgflFHQXJyYXkoKTsKCiAgICBRR0FycmF5ICAgICZvcGVyYXRv
cj0oIGNvbnN0IFFHQXJyYXkgJmEgKSB7IHJldHVybiBhc3NpZ24oIGEgKTsgfQoKICAgIHZpcnR1
YWwgdm9pZCBkZXRhY2goKQl7IGR1cGxpY2F0ZSgqdGhpcyk7IH0KCiAgICBjaGFyICAgICAgICpk
YXRhKCkJIGNvbnN0CXsgcmV0dXJuIHNoZC0+ZGF0YTsgfQogICAgdWludAlucmVmcygpCSBjb25z
dAl7IHJldHVybiBzaGQtPmNvdW50OyB9CiAgICB1aW50CXNpemUoKQkgY29uc3QJeyByZXR1cm4g
c2hkLT5sZW47IH0KICAgIGJvb2wJaXNFcXVhbCggY29uc3QgUUdBcnJheSAmYSApIGNvbnN0OwoK
ICAgIGJvb2wJcmVzaXplKCB1aW50IG5ld3NpemUgKTsKCiAgICBib29sCWZpbGwoIGNvbnN0IGNo
YXIgKmQsIGludCBsZW4sIHVpbnQgc3ogKTsKCiAgICBRR0FycmF5ICAgICZhc3NpZ24oIGNvbnN0
IFFHQXJyYXkgJmEgKTsKICAgIFFHQXJyYXkgICAgJmFzc2lnbiggY29uc3QgY2hhciAqZCwgdWlu
dCBsZW4gKTsKICAgIFFHQXJyYXkgICAgJmR1cGxpY2F0ZSggY29uc3QgUUdBcnJheSAmYSApOwog
ICAgUUdBcnJheSAgICAmZHVwbGljYXRlKCBjb25zdCBjaGFyICpkLCB1aW50IGxlbiApOwogICAg
dm9pZAlzdG9yZSggY29uc3QgY2hhciAqZCwgdWludCBsZW4gKTsKCiAgICBhcnJheV9kYXRhICpz
aGFyZWRCbG9jaygpCWNvbnN0CQl7IHJldHVybiBzaGQ7IH0KICAgIHZvaWQJc2V0U2hhcmVkQmxv
Y2soIGFycmF5X2RhdGEgKnAgKSB7IHNoZD0oYXJyYXlfZGF0YSopcDsgfQoKICAgIFFHQXJyYXkg
ICAgJnNldFJhd0RhdGEoIGNvbnN0IGNoYXIgKmQsIHVpbnQgbGVuICk7CiAgICB2b2lkCXJlc2V0
UmF3RGF0YSggY29uc3QgY2hhciAqZCwgdWludCBsZW4gKTsKCiAgICBpbnQJCWZpbmQoIGNvbnN0
IGNoYXIgKmQsIHVpbnQgaW5kZXgsIHVpbnQgc3ogKSBjb25zdDsKICAgIGludAkJY29udGFpbnMo
IGNvbnN0IGNoYXIgKmQsIHVpbnQgc3ogKSBjb25zdDsKICAgIAogICAgdm9pZAlzb3J0KCB1aW50
IHN6ICk7CiAgICBpbnQJCWJzZWFyY2goIGNvbnN0IGNoYXIgKmQsIHVpbnQgc3ogKSBjb25zdDsK
CiAgICBjaGFyICAgICAgICphdCggdWludCBpbmRleCApIGNvbnN0OwoKICAgIGJvb2wJc2V0RXhw
YW5kKCB1aW50IGluZGV4LCBjb25zdCBjaGFyICpkLCB1aW50IHN6ICk7Cgpwcm90ZWN0ZWQ6CiAg
ICB2aXJ0dWFsIGFycmF5X2RhdGEgKm5ld0RhdGEoKTsKICAgIHZpcnR1YWwgdm9pZCBkZWxldGVE
YXRhKCBhcnJheV9kYXRhICpwICk7Cgpwcml2YXRlOgogICAgc3RhdGljIHZvaWQgbXNnX2luZGV4
KCB1aW50ICk7CiAgICBhcnJheV9kYXRhICpzaGQ7Cn07CgoKaW5saW5lIGNoYXIgKlFHQXJyYXk6
OmF0KCB1aW50IGluZGV4ICkgY29uc3QKewoKICAgIGlmICggaW5kZXggPj0gc2l6ZSgpICkgewoJ
bXNnX2luZGV4KCBpbmRleCApOwoJaW5kZXggPSAwOwogICAgfQoKICAgIHJldHVybiAmc2hkLT5k
YXRhW2luZGV4XTsKfQoKCgojIDQyICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAv
d29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3FhcnJheS5oIiAyCgoKCgp0ZW1wbGF0ZTxjbGFzcyB0
eXBlPiBjbGFzcyAgIFFBcnJheSA6IHB1YmxpYyBRR0FycmF5CnsKcHVibGljOgogICAgdHlwZWRl
ZiB0eXBlKiBJdGVyYXRvcjsKICAgIHR5cGVkZWYgY29uc3QgdHlwZSogQ29uc3RJdGVyYXRvcjsK
ICAgIHR5cGVkZWYgdHlwZSBWYWx1ZVR5cGU7Cgpwcm90ZWN0ZWQ6CiAgICBRQXJyYXkoIGludCwg
aW50ICkgOiBRR0FycmF5KCAwLCAwICkge30KCnB1YmxpYzoKICAgIFFBcnJheSgpIHt9CiAgICBR
QXJyYXkoIGludCBzaXplICkgOiBRR0FycmF5KHNpemUqc2l6ZW9mKHR5cGUpKSB7fQogICAgUUFy
cmF5KCBjb25zdCBRQXJyYXk8dHlwZT4gJmEgKSA6IFFHQXJyYXkoYSkge30KICAgflFBcnJheSgp
IHt9CiAgICBRQXJyYXk8dHlwZT4gJm9wZXJhdG9yPShjb25zdCBRQXJyYXk8dHlwZT4gJmEpCgkJ
CQl7IHJldHVybiAoUUFycmF5PHR5cGU+JilRR0FycmF5Ojphc3NpZ24oYSk7IH0KICAgIHR5cGUg
KmRhdGEoKSAgICBjb25zdAl7IHJldHVybiAodHlwZSAqKVFHQXJyYXk6OmRhdGEoKTsgfQogICAg
dWludCAgbnJlZnMoKSAgIGNvbnN0CXsgcmV0dXJuIFFHQXJyYXk6Om5yZWZzKCk7IH0KICAgIHVp
bnQgIHNpemUoKSAgICBjb25zdAl7IHJldHVybiBRR0FycmF5OjpzaXplKCkvc2l6ZW9mKHR5cGUp
OyB9CiAgICB1aW50ICBjb3VudCgpICAgY29uc3QgCXsgcmV0dXJuIHNpemUoKTsgfQogICAgYm9v
bCAgaXNFbXB0eSgpIGNvbnN0CXsgcmV0dXJuIFFHQXJyYXk6OnNpemUoKSA9PSAwOyB9CiAgICBi
b29sICBpc051bGwoKSAgY29uc3QJeyByZXR1cm4gUUdBcnJheTo6ZGF0YSgpID09IDA7IH0KICAg
IGJvb2wgIHJlc2l6ZSggdWludCBzaXplICkJeyByZXR1cm4gUUdBcnJheTo6cmVzaXplKHNpemUq
c2l6ZW9mKHR5cGUpKTsgfQogICAgYm9vbCAgdHJ1bmNhdGUoIHVpbnQgcG9zICkJeyByZXR1cm4g
UUdBcnJheTo6cmVzaXplKHBvcypzaXplb2YodHlwZSkpOyB9CiAgICBib29sICBmaWxsKCBjb25z
dCB0eXBlICZkLCBpbnQgc2l6ZSA9IC0xICkKCXsgcmV0dXJuIFFHQXJyYXk6OmZpbGwoKGNoYXIq
KSZkLHNpemUsc2l6ZW9mKHR5cGUpICk7IH0KICAgIHZvaWQgIGRldGFjaCgpCQl7IFFHQXJyYXk6
OmRldGFjaCgpOyB9CiAgICBRQXJyYXk8dHlwZT4gICBjb3B5KCkgY29uc3QKCXsgUUFycmF5PHR5
cGU+IHRtcDsgcmV0dXJuIHRtcC5kdXBsaWNhdGUoKnRoaXMpOyB9CiAgICBRQXJyYXk8dHlwZT4m
IGFzc2lnbiggY29uc3QgUUFycmF5PHR5cGU+JiBhICkKCXsgcmV0dXJuIChRQXJyYXk8dHlwZT4m
KVFHQXJyYXk6OmFzc2lnbihhKTsgfQogICAgUUFycmF5PHR5cGU+JiBhc3NpZ24oIGNvbnN0IHR5
cGUgKmEsIHVpbnQgbiApCgl7IHJldHVybiAoUUFycmF5PHR5cGU+JilRR0FycmF5Ojphc3NpZ24o
KGNoYXIqKWEsbipzaXplb2YodHlwZSkpOyB9CiAgICBRQXJyYXk8dHlwZT4mIGR1cGxpY2F0ZSgg
Y29uc3QgUUFycmF5PHR5cGU+JiBhICkKCXsgcmV0dXJuIChRQXJyYXk8dHlwZT4mKVFHQXJyYXk6
OmR1cGxpY2F0ZShhKTsgfQogICAgUUFycmF5PHR5cGU+JiBkdXBsaWNhdGUoIGNvbnN0IHR5cGUg
KmEsIHVpbnQgbiApCgl7IHJldHVybiAoUUFycmF5PHR5cGU+JilRR0FycmF5OjpkdXBsaWNhdGUo
KGNoYXIqKWEsbipzaXplb2YodHlwZSkpOyB9CiAgICBRQXJyYXk8dHlwZT4mIHNldFJhd0RhdGEo
IGNvbnN0IHR5cGUgKmEsIHVpbnQgbiApCgl7IHJldHVybiAoUUFycmF5PHR5cGU+JilRR0FycmF5
OjpzZXRSYXdEYXRhKChjaGFyKilhLAoJCQkJCQkgICAgIG4qc2l6ZW9mKHR5cGUpKTsgfQogICAg
dm9pZCByZXNldFJhd0RhdGEoIGNvbnN0IHR5cGUgKmEsIHVpbnQgbiApCgl7IFFHQXJyYXk6OnJl
c2V0UmF3RGF0YSgoY2hhciopYSxuKnNpemVvZih0eXBlKSk7IH0KICAgIGludAkgZmluZCggY29u
c3QgdHlwZSAmZCwgdWludCBpPTAgKSBjb25zdAoJeyByZXR1cm4gUUdBcnJheTo6ZmluZCgoY2hh
ciopJmQsaSxzaXplb2YodHlwZSkpOyB9CiAgICBpbnQJIGNvbnRhaW5zKCBjb25zdCB0eXBlICZk
ICkgY29uc3QKCXsgcmV0dXJuIFFHQXJyYXk6OmNvbnRhaW5zKChjaGFyKikmZCxzaXplb2YodHlw
ZSkpOyB9CiAgICB2b2lkIHNvcnQoKSB7IFFHQXJyYXk6OnNvcnQoc2l6ZW9mKHR5cGUpKTsgfQog
ICAgaW50ICBic2VhcmNoKCBjb25zdCB0eXBlICZkICkgY29uc3QKCXsgcmV0dXJuIFFHQXJyYXk6
OmJzZWFyY2goKGNvbnN0IGNoYXIqKSZkLHNpemVvZih0eXBlKSk7IH0KICAgIHR5cGUmIG9wZXJh
dG9yW10oIGludCBpICkgY29uc3QKCXsgcmV0dXJuICh0eXBlICYpKCoodHlwZSAqKVFHQXJyYXk6
OmF0KGkqc2l6ZW9mKHR5cGUpKSk7IH0KICAgIHR5cGUmIGF0KCB1aW50IGkgKSBjb25zdAoJeyBy
ZXR1cm4gKHR5cGUgJikoKih0eXBlICopUUdBcnJheTo6YXQoaSpzaXplb2YodHlwZSkpKTsgfQoJ
IG9wZXJhdG9yIGNvbnN0IHR5cGUqKCkgY29uc3QgeyByZXR1cm4gKGNvbnN0IHR5cGUgKilRR0Fy
cmF5OjpkYXRhKCk7IH0KICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUUFycmF5PHR5cGU+ICZh
ICkgY29uc3QgeyByZXR1cm4gaXNFcXVhbChhKTsgfQogICAgYm9vbCBvcGVyYXRvciE9KCBjb25z
dCBRQXJyYXk8dHlwZT4gJmEgKSBjb25zdCB7IHJldHVybiAhaXNFcXVhbChhKTsgfQogICAgSXRl
cmF0b3IgYmVnaW4oKSB7IHJldHVybiBkYXRhKCk7IH0KICAgIEl0ZXJhdG9yIGVuZCgpIHsgcmV0
dXJuIGRhdGEoKSArIHNpemUoKTsgfQogICAgQ29uc3RJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIGRhdGEoKTsgfQogICAgQ29uc3RJdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBk
YXRhKCkgKyBzaXplKCk7IH0KfTsKCgoKIyA0MyAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMt
b3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xY3N0cmluZy5oIiAyCgoKCiMgMSAiL2hv
bWUvdGhpbW0vcHVibGljL2djYy0yLjk1LjIvYWxwaGEtZGVjLW9zZjQuMGUvbGliL2djYy1saWIv
YWxwaGEtZGVjLW9zZjQuMGUvMi45NS4yL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCiAKCgogCgogCiAKCiAKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCmV4dGVybiAi
QyIgewoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0YW5kYXJkcy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgogCgoKIAoKIAogCgoKCiAKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKCgoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCgogCgoKCgoKIAoKCgoKIAoKCgoKCgoK
IAoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKIyAxNjggIi91c3IvaW5j
bHVkZS9zdGFuZGFyZHMuaCIgMwoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgogCiAKCgoKCgoKCgoK
CgoKCgoKIyAyMjMgIi91c3IvaW5jbHVkZS9zdGFuZGFyZHMuaCIgMwoKCiAKCgoKCgoKCgoKCgoK
IAogCgoKCgoKCiAKIAoKCgoKCgojIDI2MiAiL3Vzci9pbmNsdWRlL3N0YW5kYXJkcy5oIiAzCgoK
CiMgNTUgIi9ob21lL3RoaW1tL3B1YmxpYy9nY2MtMi45NS4yL2FscGhhLWRlYy1vc2Y0LjBlL2xp
Yi9nY2MtbGliL2FscGhhLWRlYy1vc2Y0LjBlLzIuOTUuMi9pbmNsdWRlL3N0cmluZy5oIiAyIDMK
CiMgMSAiL2hvbWUvdGhpbW0vcHVibGljL2djYy0yLjk1LjIvYWxwaGEtZGVjLW9zZjQuMGUvbGli
L2djYy1saWIvYWxwaGEtZGVjLW9zZjQuMGUvMi45NS4yL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEg
MwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgogCgogCiAKCiAKCgoKIAoKCiAKCgoKCgoKCgoK
CgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCnR5cGVkZWYgbG9u
ZyBpbnQgcHRyZGlmZl90OwoKCgoKCgoKCgojIDExNSAiL2hvbWUvdGhpbW0vcHVibGljL2djYy0y
Ljk1LjIvYWxwaGEtZGVjLW9zZjQuMGUvbGliL2djYy1saWIvYWxwaGEtZGVjLW9zZjQuMGUvMi45
NS4yL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKCgoKCgoKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQg
aW50IHdjdHlwZV90OwoKCgoKdHlwZWRlZiBsb25nICAgICAgICAgICAgZnBvc190OwoKCgoKdHlw
ZWRlZiBpbnQgICAgICAgICAgICB0aW1lX3Q7CgoKCgp0eXBlZGVmIGludCAgICAgICAgICAgICBj
bG9ja190OwoKCgoKCgoKCgp0eXBlZGVmIGxvbmcgdW5zaWduZWQgaW50IHNpemVfdDsKCgoKCgoK
CgoKdHlwZWRlZiBsb25nICAgICAgICAgICAgICAgICAgICBzc2l6ZV90OyAgCgoKIAoKCnR5cGVk
ZWYJdW5zaWduZWQgY2hhcgl1Y2hhcl90Owp0eXBlZGVmCXVuc2lnbmVkIHNob3J0CXVzaG9ydF90
Owp0eXBlZGVmCXVuc2lnbmVkIGludAl1aW50X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZwl1bG9u
Z190Owp0eXBlZGVmCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJdnVjaGFyX3Q7CnR5cGVkZWYJdm9s
YXRpbGUgdW5zaWduZWQgc2hvcnQJdnVzaG9ydF90Owp0eXBlZGVmCXZvbGF0aWxlIHVuc2lnbmVk
IGludAl2dWludF90Owp0eXBlZGVmIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcJdnVsb25nX3Q7CgoK
Cgp0eXBlZGVmCXN0cnVjdAl7IGxvbmcgclsxXTsgfSAqcGh5c2Fkcl90OwogCgoKCnR5cGVkZWYJ
c3RydWN0CWxhYmVsX3QJewoJbG9uZwl2YWxbMTBdOwp9IGxhYmVsX3Q7CgoKIyAyMDAgIi9ob21l
L3RoaW1tL3B1YmxpYy9nY2MtMi45NS4yL2FscGhhLWRlYy1vc2Y0LjBlL2xpYi9nY2MtbGliL2Fs
cGhhLWRlYy1vc2Y0LjBlLzIuOTUuMi9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBpbnQJCWxldmVsX3Q7CnR5cGVkZWYJaW50CQlk
YWRkcl90OwkgCnR5cGVkZWYJY2hhciAqCQljYWRkcl90OwkgCnR5cGVkZWYgbG9uZyAqCQlxYWRk
cl90OyAgICAgICAgIAp0eXBlZGVmIGNoYXIgKiAgICAgICAgICBhZGRyX3Q7CnR5cGVkZWYJdWlu
dF90CQlpbm9fdDsJCSAKdHlwZWRlZiBzaG9ydAkJY250X3Q7CnR5cGVkZWYgaW50CQlkZXZfdDsJ
CSAKdHlwZWRlZglpbnQJCWNoYW5fdDsJCSAKCiMgMzAzICIvaG9tZS90aGltbS9wdWJsaWMvZ2Nj
LTIuOTUuMi9hbHBoYS1kZWMtb3NmNC4wZS9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4wZS8y
Ljk1LjIvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwoKCgoKCnR5cGVkZWYgbG9uZyAgICBvZmZfdDsJ
CQkgCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nCXJsaW1fdDsJCSAKdHlwZWRlZglpbnQJCXBhZGRy
X3Q7CnR5cGVkZWYJdXNob3J0X3QJbmxpbmtfdDsKCgoKdHlwZWRlZiBpbnQgICAgCQlrZXlfdDsJ
CSAKCgoKCnR5cGVkZWYJdWludF90CQltb2RlX3Q7CQkgCgoKCgoKCgp0eXBlZGVmIHVpbnRfdAkJ
dWlkX3Q7CQkgCgoKCgoKdHlwZWRlZiB1aW50X3QJCWdpZF90OwkJIAoKCgoKdHlwZWRlZgl2b2lk
ICoJCW1pZF90OwkJIAoKCgoKdHlwZWRlZglpbnQJCXBpZF90OwkJIAoKCnR5cGVkZWYgY2hhcgkJ
c2xhYl90WzEyXTsJIAoKdHlwZWRlZiB1bG9uZ190CQlzaG1hdHRfdDsJIAp0eXBlZGVmIHVsb25n
X3QJCW1zZ3FudW1fdDsJIAp0eXBlZGVmIHVsb25nX3QJCW1zZ2xlbl90OwkgCgoKCiAgICAgICAg
dHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OyAgICAgICAgICAKCgogCgoKdHlwZWRlZiB1bnNp
Z25lZCBsb25nCXNpZ3NldF90OwoKCiAKIyA0NzcgIi9ob21lL3RoaW1tL3B1YmxpYy9nY2MtMi45
NS4yL2FscGhhLWRlYy1vc2Y0LjBlL2xpYi9nY2MtbGliL2FscGhhLWRlYy1vc2Y0LjBlLzIuOTUu
Mi9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCgoKCiAKCgoKCnR5cGVkZWYgbG9uZyAgICAgICAgICAg
IHRpbWVyX3Q7ICAgICAgICAgCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHZvaWQgKCpzaWdf
dCkgIChpbnQsdm9pZCAoKikoaW50KSkgIDsKCgoKCgogCgoKCgoKCnR5cGVkZWYgcGlkX3QJCWlk
X3Q7CQkgCgkJCQkJIAoJCQkJCSAKCQkJCQkgCgkJCQkJIAp0eXBlZGVmIHVuc2lnbmVkIGludAl1
c2Vjb25kc190OwkgCgoKCgoKIAoKCnR5cGVkZWYgdWludF90CW1ham9yX3Q7ICAgICAgIAp0eXBl
ZGVmIHVpbnRfdAltaW5vcl90OyAgICAgICAKdHlwZWRlZiB1aW50X3QJZGV2c190OyAgICAgICAg
CnR5cGVkZWYgdWludF90CXVuaXRfdDsgICAgICAgIAoKIAoKCgoKCgogCgoKCgoKCgoKCgojIDEg
Ii91c3IvaW5jbHVkZS9tYWNoL21hY2hpbmUvdm1fdHlwZXMuaCIgMSAzCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKIAoKCiAKCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAKCgoKIAoKCgoK
CgogCgoKCgoKCnR5cGVkZWYJdW5zaWduZWQgbG9uZwl2bV9vZmZzZXRfdDsKdHlwZWRlZgl1bnNp
Z25lZCBsb25nCXZtX3NpemVfdDsKCgoKIyA1NTUgIi9ob21lL3RoaW1tL3B1YmxpYy9nY2MtMi45
NS4yL2FscGhhLWRlYy1vc2Y0LjBlL2xpYi9nY2MtbGliL2FscGhhLWRlYy1vc2Y0LjBlLzIuOTUu
Mi9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgogCgoKdHlwZWRlZgl1Y2hhcl90CQl1Y2hhcjsK
dHlwZWRlZgl1c2hvcnRfdAl1c2hvcnQ7CnR5cGVkZWYJdWludF90CQl1aW50Owp0eXBlZGVmIHVs
b25nX3QJCXVsb25nOwoKdHlwZWRlZglwaHlzYWRyX3QJcGh5c2FkcjsKCgogCnR5cGVkZWYJdWNo
YXJfdAkJdV9jaGFyOwp0eXBlZGVmCXVzaG9ydF90IAl1X3Nob3J0Owp0eXBlZGVmCXVpbnRfdAkJ
dV9pbnQ7CnR5cGVkZWYJdWxvbmdfdAkJdV9sb25nOwp0eXBlZGVmCXZ1Y2hhcl90CXZ1X2NoYXI7
CnR5cGVkZWYJdnVzaG9ydF90IAl2dV9zaG9ydDsKdHlwZWRlZgl2dWludF90CQl2dV9pbnQ7CnR5
cGVkZWYJdnVsb25nX3QJdnVfbG9uZzsKCgoKCgp0eXBlZGVmIHN0cnVjdCAgX3F1YWQgeyBpbnQg
dmFsWzJdOyB9IHF1YWQ7CgoKdHlwZWRlZglsb25nCXN3YmxrX3Q7CnR5cGVkZWYgdV9sb25nCWZp
eHB0X3Q7CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMwogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCiAKCgogCgogCiAKCiAKCgoKIAoKCgoKIAoKCgoKCgpleHRlcm4gIkMiIHsKCgoK
CiMgMTE4ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCgoKCgogCgoKCgoKCgoKIyAxNDQg
Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKCgp0eXBlZGVmIGludAlmZF9tYXNrOwoKCgog
CgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmCXN0cnVjdCBmZF9zZXQgewoJZmRfbWFzawlmZHNf
Yml0c1soKCggIDQwOTYgICAgICkrKCggICAgKHNpemVvZihmZF9tYXNrKSAqIDggKSAgICApLTEp
KS8oICAgIChzaXplb2YoZmRfbWFzaykgKiA4ICkgICAgKSkgIF07Cn0gZmRfc2V0OwoKCgoKCiMg
MjAyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgpl
eHRlcm4gdm9pZCBiemVybyAgKGNoYXIgKiwgaW50KSAgOwoKCgoKCgpzdHJ1Y3QgdGltZXZhbDsK
aW50IHNlbGVjdCAgKGludCwgZmRfc2V0ICosIGZkX3NldCAqLCBmZF9zZXQgKiwgc3RydWN0IHRp
bWV2YWwgKikgIDsKCgoKCgp9CgoKIyA1ODggIi9ob21lL3RoaW1tL3B1YmxpYy9nY2MtMi45NS4y
L2FscGhhLWRlYy1vc2Y0LjBlL2xpYi9nY2MtbGliL2FscGhhLWRlYy1vc2Y0LjBlLzIuOTUuMi9p
bmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKCiAKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHNhX2Zh
bWlseV90OwoKIAp0eXBlZGVmCXVuc2lnbmVkIGludAlpbl9hZGRyX3Q7CiAKdHlwZWRlZgl1bnNp
Z25lZCBzaG9ydAlpbl9wb3J0X3Q7CgoKCgoKCiMgNTYgIi9ob21lL3RoaW1tL3B1YmxpYy9nY2Mt
Mi45NS4yL2FscGhhLWRlYy1vc2Y0LjBlL2xpYi9nY2MtbGliL2FscGhhLWRlYy1vc2Y0LjBlLzIu
OTUuMi9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgogCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKZXh0ZXJuIHZvaWQJKm1lbWNociAgKGNvbnN0IHZvaWQgKiwgaW50ICwgc2l6ZV90ICkg
IDsKZXh0ZXJuIHZvaWQJKm1lbWNweSAgKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QgKSAg
OwpleHRlcm4gdm9pZAkqbWVtc2V0ICAodm9pZCAqLCBpbnQgLCBzaXplX3QgKSAgOwpleHRlcm4g
c2l6ZV90IAlzdHJjc3BuICAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopICA7CmV4dGVybiBz
aXplX3QJc3RybGVuICAoY29uc3QgY2hhciAqKSAgOwpleHRlcm4gc2l6ZV90CXN0cnNwbiAgKGNv
bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSAgOwoKCgpleHRlcm4gdm9pZCAJKm1lbW1vdmUgICh2
b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90ICkgIDsKZXh0ZXJuIGNoYXIgCSpzdHJjcHkgIChj
aGFyICosIGNvbnN0IGNoYXIgKikgIDsKZXh0ZXJuIGNoYXIgCSpzdHJuY3B5ICAoY2hhciAqLCBj
b25zdCBjaGFyICosIHNpemVfdCApICA7CmV4dGVybiBjaGFyIAkqc3RyY2F0ICAoY2hhciAqLCBj
b25zdCBjaGFyICopICA7CmV4dGVybiBjaGFyCSpzdHJuY2F0ICAoY2hhciAqLCBjb25zdCBjaGFy
ICosIHNpemVfdCApICA7CmV4dGVybiBpbnQgCW1lbWNtcCAgKGNvbnN0IHZvaWQgKiwgY29uc3Qg
dm9pZCAqLHNpemVfdCApICA7CmV4dGVybiBpbnQJc3RyY21wICAoY29uc3QgY2hhciAqLCBjb25z
dCBjaGFyICopICA7CmV4dGVybiBpbnQJc3RyY29sbCAgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh
ciAqKSAgOwpleHRlcm4gaW50CXN0cm5jbXAgIChjb25zdCBjaGFyICosY29uc3QgY2hhciAqLHNp
emVfdCApICA7CmV4dGVybiBzaXplX3QgCXN0cnhmcm0gIChjaGFyICosIGNvbnN0IGNoYXIgKiwg
c2l6ZV90ICkgIDsKZXh0ZXJuIGNoYXIJKnN0cmNociAgKGNvbnN0IGNoYXIgKiwgaW50ICkgIDsK
ZXh0ZXJuIGNoYXIJKnN0cnBicmsgIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikgIDsKZXh0
ZXJuIGNoYXIJKnN0cnJjaHIgIChjb25zdCBjaGFyICosIGludCApICA7CmV4dGVybiBjaGFyCSpz
dHJzdHIgIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikgIDsKZXh0ZXJuIGNoYXIgCSpzdHJ0
b2sgIChjaGFyICosIGNvbnN0IGNoYXIgKikgIDsKZXh0ZXJuIGNoYXIgCSpzdHJlcnJvciAgKGlu
dCkgIDsKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiB2b2lkCSptZW1jY3B5ICAodm9pZCAqLCBjb25z
dCB2b2lkICosIGludCAsIHNpemVfdCApICA7CgoKCgoKCgoKZXh0ZXJuIHZvaWQgc3dhYiAgKGNv
bnN0IHZvaWQgKiwgdm9pZCAqLCBzc2l6ZV90KSAgOwoKCgoKCmV4dGVybiBjaGFyICpzdHJkdXAg
IChjb25zdCBjaGFyICopICA7CgoKCgogCiAKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5ncy5oIiAx
IDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKIAoKIAogCgogCgoKCiAKCgoKCiAKCiAKCgoK
CgoKCgoKCgoKCiAKCgoKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiBp
bnQgIGJjbXAgIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KSAgOwpleHRlcm4gdm9p
ZCBiY29weSAgKGNvbnN0IGNoYXIgKiwgY2hhciAqLCBpbnQpICA7CmV4dGVybiB2b2lkICBiemVy
byAgKGNoYXIgKiwgaW50KSAgOwoKCiMgOTYgIi91c3IvaW5jbHVkZS9zdHJpbmdzLmgiIDMKCgpl
eHRlcm4gaW50ICBmZnMgIChpbnQpICA7CmV4dGVybiBjaGFyICppbmRleCAgKGNvbnN0IGNoYXIq
LCBpbnQpICA7CmV4dGVybiBjaGFyICpyaW5kZXggIChjb25zdCBjaGFyKiwgaW50KSAgOwpleHRl
cm4gaW50ICBzdHJjYXNlY21wICAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopICA7CmV4dGVy
biBpbnQgIHN0cm5jYXNlY21wICAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCAp
ICA7CgoKCgojIDEgIi9ob21lL3RoaW1tL3B1YmxpYy9nY2MtMi45NS4yL2FscGhhLWRlYy1vc2Y0
LjBlL2xpYi9nY2MtbGliL2FscGhhLWRlYy1vc2Y0LjBlLzIuOTUuMi9pbmNsdWRlL3N0cmluZy5o
IiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKIAoKIAogCgogCgoKCiAKCgoKCiAKCgoK
CgoKCgojIDE4NyAiL2hvbWUvdGhpbW0vcHVibGljL2djYy0yLjk1LjIvYWxwaGEtZGVjLW9zZjQu
MGUvbGliL2djYy1saWIvYWxwaGEtZGVjLW9zZjQuMGUvMi45NS4yL2luY2x1ZGUvc3RyaW5nLmgi
IDMKCiMgMTA3ICIvdXNyL2luY2x1ZGUvc3RyaW5ncy5oIiAyIDMKCgoKCn0KCgojIDE1MyAiL2hv
bWUvdGhpbW0vcHVibGljL2djYy0yLjk1LjIvYWxwaGEtZGVjLW9zZjQuMGUvbGliL2djYy1saWIv
YWxwaGEtZGVjLW9zZjQuMGUvMi45NS4yL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCiAKCgoKCgoK
CgpleHRlcm4gY2hhciAgICAqICBiYXNlbmFtZSAgICAoY2hhciAgKikgIDsKZXh0ZXJuIGNoYXIg
ICAgKiAgZGlybmFtZSAgICAoY2hhciAgKikgIDsKCgoKCgoKIyAxODAgIi9ob21lL3RoaW1tL3B1
YmxpYy9nY2MtMi45NS4yL2FscGhhLWRlYy1vc2Y0LjBlL2xpYi9nY2MtbGliL2FscGhhLWRlYy1v
c2Y0LjBlLzIuOTUuMi9pbmNsdWRlL3N0cmluZy5oIiAzCgoKCgoKfQoKCiMgNDYgIi9hbWQvc2ln
bWEvMC9zcmMvYWxwaGEtZGVjLW9zZjQuMC93b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcWNzdHJp
bmcuaCIgMgoKCgoKCgoKIAoKCgojIDcxICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0
LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3Fjc3RyaW5nLmgiCgoKCiAKCgoKICB2b2lkICpx
bWVtbW92ZSggdm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHVpbnQgbGVuICk7CgoKCgoKICBj
aGFyICpxc3RyZHVwKCBjb25zdCBjaGFyICogKTsKCiAgaW5saW5lIHVpbnQgY3N0cmxlbiggY29u
c3QgY2hhciAqc3RyICkKeyByZXR1cm4gc3RybGVuKHN0cik7IH0KCiAgaW5saW5lIHVpbnQgcXN0
cmxlbiggY29uc3QgY2hhciAqc3RyICkKeyByZXR1cm4gc3RyID8gc3RybGVuKHN0cikgOiAwOyB9
CgogIGlubGluZSBjaGFyICpjc3RyY3B5KCBjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYyApCnsg
cmV0dXJuIHN0cmNweShkc3Qsc3JjKTsgfQoKICBpbmxpbmUgY2hhciAqcXN0cmNweSggY2hhciAq
ZHN0LCBjb25zdCBjaGFyICpzcmMgKQp7IHJldHVybiBzcmMgPyBzdHJjcHkoZHN0LCBzcmMpIDog
MDsgfQoKICBjaGFyICpxc3RybmNweSggY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHVpbnQg
bGVuICk7CgogIGlubGluZSBpbnQgY3N0cmNtcCggY29uc3QgY2hhciAqc3RyMSwgY29uc3QgY2hh
ciAqc3RyMiApCnsgcmV0dXJuIHN0cmNtcChzdHIxLHN0cjIpOyB9CgogIGlubGluZSBpbnQgcXN0
cmNtcCggY29uc3QgY2hhciAqc3RyMSwgY29uc3QgY2hhciAqc3RyMiApCnsgcmV0dXJuIChzdHIx
ICYmIHN0cjIpID8gc3RyY21wKHN0cjEsc3RyMikgOiAoaW50KSgobG9uZylzdHIyIC0gKGxvbmcp
c3RyMSk7IH0KCiAgaW5saW5lIGludCBjc3RybmNtcCggY29uc3QgY2hhciAqc3RyMSwgY29uc3Qg
Y2hhciAqc3RyMiwgdWludCBsZW4gKQp7IHJldHVybiBzdHJuY21wKHN0cjEsc3RyMixsZW4pOyB9
CgogIGlubGluZSBpbnQgcXN0cm5jbXAoIGNvbnN0IGNoYXIgKnN0cjEsIGNvbnN0IGNoYXIgKnN0
cjIsIHVpbnQgbGVuICkKeyByZXR1cm4gKHN0cjEgJiYgc3RyMikgPyBzdHJuY21wKHN0cjEsc3Ry
MixsZW4pIDoKCQkJICAoaW50KSgobG9uZylzdHIyIC0gKGxvbmcpc3RyMSk7IH0KCiAgaW50IHFz
dHJpY21wKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwoKICBpbnQgcXN0cm5pY21wKCBj
b25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdWludCBsZW4gKTsKCiAKIAogCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIAoKICBRX1VJTlQxNiBxQ2hlY2tzdW0oIGNvbnN0IGNoYXIgKnMsIHVp
bnQgbGVuICk7CgogCgoKCgoKCnR5cGVkZWYgUUFycmF5PGNoYXI+IFFCeXRlQXJyYXk7CgoKIAoK
CgogIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRQnl0ZUFy
cmF5ICYgKTsKICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUUJ5dGVB
cnJheSAmICk7CgoKCgogCgoKCmNsYXNzIFFSZWdFeHA7CgpjbGFzcyAgIFFDU3RyaW5nIDogcHVi
bGljIFFCeXRlQXJyYXkJIAp7CnB1YmxpYzoKICAgIFFDU3RyaW5nKCkge30JCQkJIAogICAgUUNT
dHJpbmcoIGludCBzaXplICk7CQkJIAogICAgUUNTdHJpbmcoIGNvbnN0IFFDU3RyaW5nICZzICkg
OiBRQnl0ZUFycmF5KCBzICkge30KICAgIFFDU3RyaW5nKCBjb25zdCBjaGFyICpzdHIgKTsJCSAK
ICAgIFFDU3RyaW5nKCBjb25zdCBjaGFyICpzdHIsIHVpbnQgbWF4bGVuICk7CSAKCiAgICBRQ1N0
cmluZyAgICAmb3BlcmF0b3I9KCBjb25zdCBRQ1N0cmluZyAmcyApOyAKICAgIFFDU3RyaW5nICAg
ICZvcGVyYXRvcj0oIGNvbnN0IGNoYXIgKnN0ciApOwkgCgogICAgYm9vbAlpc051bGwoKQljb25z
dDsKICAgIGJvb2wJaXNFbXB0eSgpCWNvbnN0OwogICAgdWludAlsZW5ndGgoKQljb25zdDsKICAg
IGJvb2wJcmVzaXplKCB1aW50IG5ld2xlbiApOwogICAgYm9vbAl0cnVuY2F0ZSggdWludCBwb3Mg
KTsKICAgIGJvb2wJZmlsbCggY2hhciBjLCBpbnQgbGVuID0gLTEgKTsKCiAgICBRQ1N0cmluZwlj
b3B5KCkJY29uc3Q7CgogICAgUUNTdHJpbmcgICAgJnNwcmludGYoIGNvbnN0IGNoYXIgKmZvcm1h
dCwgLi4uICk7CgogICAgaW50CQlmaW5kKCBjaGFyIGMsIGludCBpbmRleD0wLCBib29sIGNzPSAx
ICApIGNvbnN0OwogICAgaW50CQlmaW5kKCBjb25zdCBjaGFyICpzdHIsIGludCBpbmRleD0wLCBi
b29sIGNzPSAxICApIGNvbnN0OwogICAgaW50CQlmaW5kKCBjb25zdCBRUmVnRXhwICYsIGludCBp
bmRleD0wICkgY29uc3Q7CiAgICBpbnQJCWZpbmRSZXYoIGNoYXIgYywgaW50IGluZGV4PS0xLCBi
b29sIGNzPSAxICkgY29uc3Q7CiAgICBpbnQJCWZpbmRSZXYoIGNvbnN0IGNoYXIgKnN0ciwgaW50
IGluZGV4PS0xLCBib29sIGNzPSAxICkgY29uc3Q7CiAgICBpbnQJCWZpbmRSZXYoIGNvbnN0IFFS
ZWdFeHAgJiwgaW50IGluZGV4PS0xICkgY29uc3Q7CiAgICBpbnQJCWNvbnRhaW5zKCBjaGFyIGMs
IGJvb2wgY3M9IDEgICkgY29uc3Q7CiAgICBpbnQJCWNvbnRhaW5zKCBjb25zdCBjaGFyICpzdHIs
IGJvb2wgY3M9IDEgICkgY29uc3Q7CiAgICBpbnQJCWNvbnRhaW5zKCBjb25zdCBRUmVnRXhwICYg
KSBjb25zdDsKCiAgICBRQ1N0cmluZwlsZWZ0KCB1aW50IGxlbiApICBjb25zdDsKICAgIFFDU3Ry
aW5nCXJpZ2h0KCB1aW50IGxlbiApIGNvbnN0OwogICAgUUNTdHJpbmcJbWlkKCB1aW50IGluZGV4
LCB1aW50IGxlbj0weGZmZmZmZmZmKSBjb25zdDsKCiAgICBRQ1N0cmluZwlsZWZ0SnVzdGlmeSgg
dWludCB3aWR0aCwgY2hhciBmaWxsPScgJywgYm9vbCB0cnVuYz0gMCApY29uc3Q7CiAgICBRQ1N0
cmluZwlyaWdodEp1c3RpZnkoIHVpbnQgd2lkdGgsIGNoYXIgZmlsbD0nICcsYm9vbCB0cnVuYz0g
MCApY29uc3Q7CgogICAgUUNTdHJpbmcJbG93ZXIoKSBjb25zdDsKICAgIFFDU3RyaW5nCXVwcGVy
KCkgY29uc3Q7CgogICAgUUNTdHJpbmcJc3RyaXBXaGl0ZVNwYWNlKCkJY29uc3Q7CiAgICBRQ1N0
cmluZwlzaW1wbGlmeVdoaXRlU3BhY2UoKQljb25zdDsKCiAgICBRQ1N0cmluZyAgICAmaW5zZXJ0
KCB1aW50IGluZGV4LCBjb25zdCBjaGFyICogKTsKICAgIFFDU3RyaW5nICAgICZpbnNlcnQoIHVp
bnQgaW5kZXgsIGNoYXIgKTsKICAgIFFDU3RyaW5nICAgICZhcHBlbmQoIGNvbnN0IGNoYXIgKiAp
OwogICAgUUNTdHJpbmcgICAgJnByZXBlbmQoIGNvbnN0IGNoYXIgKiApOwogICAgUUNTdHJpbmcg
ICAgJnJlbW92ZSggdWludCBpbmRleCwgdWludCBsZW4gKTsKICAgIFFDU3RyaW5nICAgICZyZXBs
YWNlKCB1aW50IGluZGV4LCB1aW50IGxlbiwgY29uc3QgY2hhciAqICk7CiAgICBRQ1N0cmluZyAg
ICAmcmVwbGFjZSggY29uc3QgUVJlZ0V4cCAmLCBjb25zdCBjaGFyICogKTsKCiAgICBzaG9ydAl0
b1Nob3J0KCBib29sICpvaz0wICkJY29uc3Q7CiAgICB1c2hvcnQJdG9VU2hvcnQoIGJvb2wgKm9r
PTAgKQljb25zdDsKICAgIGludAkJdG9JbnQoIGJvb2wgKm9rPTAgKQljb25zdDsKICAgIHVpbnQJ
dG9VSW50KCBib29sICpvaz0wICkJY29uc3Q7CiAgICBsb25nCXRvTG9uZyggYm9vbCAqb2s9MCAp
CWNvbnN0OwogICAgdWxvbmcJdG9VTG9uZyggYm9vbCAqb2s9MCApCWNvbnN0OwogICAgZmxvYXQJ
dG9GbG9hdCggYm9vbCAqb2s9MCApCWNvbnN0OwogICAgZG91YmxlCXRvRG91YmxlKCBib29sICpv
az0wICkJY29uc3Q7CgogICAgUUNTdHJpbmcgICAgJnNldFN0ciggY29uc3QgY2hhciAqcyApOwog
ICAgUUNTdHJpbmcgICAgJnNldE51bSggc2hvcnQgKTsKICAgIFFDU3RyaW5nICAgICZzZXROdW0o
IHVzaG9ydCApOwogICAgUUNTdHJpbmcgICAgJnNldE51bSggaW50ICk7CiAgICBRQ1N0cmluZyAg
ICAmc2V0TnVtKCB1aW50ICk7CiAgICBRQ1N0cmluZyAgICAmc2V0TnVtKCBsb25nICk7CiAgICBR
Q1N0cmluZyAgICAmc2V0TnVtKCB1bG9uZyApOwogICAgUUNTdHJpbmcgICAgJnNldE51bSggZmxv
YXQsIGNoYXIgZj0nZycsIGludCBwcmVjPTYgKTsKICAgIFFDU3RyaW5nICAgICZzZXROdW0oIGRv
dWJsZSwgY2hhciBmPSdnJywgaW50IHByZWM9NiApOwoKICAgIGJvb2wJc2V0RXhwYW5kKCB1aW50
IGluZGV4LCBjaGFyIGMgKTsKCgkJb3BlcmF0b3IgY29uc3QgY2hhciAqKCkgY29uc3Q7CiAgICBR
Q1N0cmluZyAgICAmb3BlcmF0b3IrPSggY29uc3QgY2hhciAqc3RyICk7CiAgICBRQ1N0cmluZyAg
ICAmb3BlcmF0b3IrPSggY2hhciBjICk7Cn07CgoKIAoKCgogIFFEYXRhU3RyZWFtICZvcGVyYXRv
cjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRQ1N0cmluZyAmICk7CiAgUURhdGFTdHJlYW0gJm9w
ZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFDU3RyaW5nICYgKTsKCgogCgoKCmlubGluZSBRQ1N0
cmluZyAmUUNTdHJpbmc6Om9wZXJhdG9yPSggY29uc3QgUUNTdHJpbmcgJnMgKQp7IHJldHVybiAo
UUNTdHJpbmcmKWFzc2lnbiggcyApOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpvcGVy
YXRvcj0oIGNvbnN0IGNoYXIgKnN0ciApCnsgcmV0dXJuIChRQ1N0cmluZyYpZHVwbGljYXRlKCBz
dHIsIHFzdHJsZW4oc3RyKSsxICk7IH0KCmlubGluZSBib29sIFFDU3RyaW5nOjppc051bGwoKSBj
b25zdAp7IHJldHVybiBkYXRhKCkgPT0gMDsgfQoKaW5saW5lIGJvb2wgUUNTdHJpbmc6OmlzRW1w
dHkoKSBjb25zdAp7IHJldHVybiBkYXRhKCkgPT0gMCB8fCAqZGF0YSgpID09ICdcMCc7IH0KCmlu
bGluZSB1aW50IFFDU3RyaW5nOjpsZW5ndGgoKSBjb25zdAp7IHJldHVybiBxc3RybGVuKCBkYXRh
KCkgKTsgfQoKaW5saW5lIGJvb2wgUUNTdHJpbmc6OnRydW5jYXRlKCB1aW50IHBvcyApCnsgcmV0
dXJuIHJlc2l6ZShwb3MrMSk7IH0KCmlubGluZSBRQ1N0cmluZyBRQ1N0cmluZzo6Y29weSgpIGNv
bnN0CnsgcmV0dXJuIFFDU3RyaW5nKCBkYXRhKCkgKTsgfQoKaW5saW5lIFFDU3RyaW5nICZRQ1N0
cmluZzo6cHJlcGVuZCggY29uc3QgY2hhciAqcyApCnsgcmV0dXJuIGluc2VydCgwLHMpOyB9Cgpp
bmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjphcHBlbmQoIGNvbnN0IGNoYXIgKnMgKQp7IHJldHVy
biBvcGVyYXRvcis9KHMpOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpzZXROdW0oIHNo
b3J0IG4gKQp7IHJldHVybiBzZXROdW0oKGxvbmcpbik7IH0KCmlubGluZSBRQ1N0cmluZyAmUUNT
dHJpbmc6OnNldE51bSggdXNob3J0IG4gKQp7IHJldHVybiBzZXROdW0oKHVsb25nKW4pOyB9Cgpp
bmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpzZXROdW0oIGludCBuICkKeyByZXR1cm4gc2V0TnVt
KChsb25nKW4pOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpzZXROdW0oIHVpbnQgbiAp
CnsgcmV0dXJuIHNldE51bSgodWxvbmcpbik7IH0KCmlubGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6
OnNldE51bSggZmxvYXQgbiwgY2hhciBmLCBpbnQgcHJlYyApCnsgcmV0dXJuIHNldE51bSgoZG91
YmxlKW4sZixwcmVjKTsgfQoKaW5saW5lIFFDU3RyaW5nOjpvcGVyYXRvciBjb25zdCBjaGFyICoo
KSBjb25zdAp7IHJldHVybiAoY29uc3QgY2hhciAqKWRhdGEoKTsgfQoKCiAKCgoKICBpbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IFFDU3RyaW5nICZzMiAp
CnsgcmV0dXJuIHFzdHJjbXAoczEuZGF0YSgpLHMyLmRhdGEoKSkgPT0gMDsgfQoKICBpbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICkKeyBy
ZXR1cm4gcXN0cmNtcChzMS5kYXRhKCksczIpID09IDA7IH0KCiAgaW5saW5lIGJvb2wgb3BlcmF0
b3I9PSggY29uc3QgY2hhciAqczEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJj
bXAoczEsczIuZGF0YSgpKSA9PSAwOyB9CgogIGlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0
IFFDU3RyaW5nICZzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNtcChzMS5k
YXRhKCksczIuZGF0YSgpKSAhPSAwOyB9CgogIGlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0
IFFDU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRhdGEo
KSxzMikgIT0gMDsgfQoKICBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBjaGFyICpzMSwg
Y29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNtcChzMSxzMi5kYXRhKCkpICE9IDA7
IH0KCiAgaW5saW5lIGJvb2wgb3BlcmF0b3I8KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IFFD
U3RyaW5nJiBzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEuZGF0YSgpLHMyLmRhdGEoKSkgPCAwOyB9
CgogIGlubGluZSBib29sIG9wZXJhdG9yPCggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBjaGFy
ICpzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEuZGF0YSgpLHMyKSA8IDA7IH0KCiAgaW5saW5lIGJv
b2wgb3BlcmF0b3I8KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1
cm4gcXN0cmNtcChzMSxzMi5kYXRhKCkpIDwgMDsgfQoKICBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9
KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICkKeyByZXR1cm4gcXN0cmNtcChz
MS5kYXRhKCksczIpIDw9IDA7IH0KCiAgaW5saW5lIGJvb2wgb3BlcmF0b3I8PSggY29uc3QgY2hh
ciAqczEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEsczIuZGF0YSgp
KSA8PSAwOyB9CgogIGlubGluZSBib29sIG9wZXJhdG9yPiggY29uc3QgUUNTdHJpbmcgJnMxLCBj
b25zdCBjaGFyICpzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEuZGF0YSgpLHMyKSA+IDA7IH0KCiAg
aW5saW5lIGJvb2wgb3BlcmF0b3I+KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMy
ICkKeyByZXR1cm4gcXN0cmNtcChzMSxzMi5kYXRhKCkpID4gMDsgfQoKICBpbmxpbmUgYm9vbCBv
cGVyYXRvcj49KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICkKeyByZXR1cm4g
cXN0cmNtcChzMS5kYXRhKCksczIpID49IDA7IH0KCiAgaW5saW5lIGJvb2wgb3BlcmF0b3I+PSgg
Y29uc3QgY2hhciAqczEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEs
czIuZGF0YSgpKSA+PSAwOyB9CgogIGlubGluZSBRQ1N0cmluZyBvcGVyYXRvcisoIGNvbnN0IFFD
U3RyaW5nICZzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKewogICAgUUNTdHJpbmcgdG1wKCBzMS5k
YXRhKCkgKTsKICAgIHRtcCArPSBzMjsKICAgIHJldHVybiB0bXA7Cn0KCiAgaW5saW5lIFFDU3Ry
aW5nIG9wZXJhdG9yKyggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApCnsKICAg
IFFDU3RyaW5nIHRtcCggczEuZGF0YSgpICk7CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4gdG1w
Owp9CgogIGlubGluZSBRQ1N0cmluZyBvcGVyYXRvcisoIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBR
Q1N0cmluZyAmczIgKQp7CiAgICBRQ1N0cmluZyB0bXAoIHMxICk7CiAgICB0bXAgKz0gczI7CiAg
ICByZXR1cm4gdG1wOwp9CgogIGlubGluZSBRQ1N0cmluZyBvcGVyYXRvcisoIGNvbnN0IFFDU3Ry
aW5nICZzMSwgY2hhciBjMiApCnsKICAgIFFDU3RyaW5nIHRtcCggczEuZGF0YSgpICk7CiAgICB0
bXAgKz0gYzI7CiAgICByZXR1cm4gdG1wOwp9CgogIGlubGluZSBRQ1N0cmluZyBvcGVyYXRvciso
IGNoYXIgYzEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsKICAgIFFDU3RyaW5nIHRtcDsKICAgIHRt
cCArPSBjMTsKICAgIHRtcCArPSBzMjsKICAgIHJldHVybiB0bXA7Cn0KCgojIDQzICIvYW1kL3Np
Z21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3FzdHJp
bmcuaCIgMgoKCgoKIAoKCgpjbGFzcyBRUmVnRXhwOwpjbGFzcyBRU3RyaW5nOwpjbGFzcyBRQ2hh
clJlZjsKCmNsYXNzICAgICBRQ2hhciB7CnB1YmxpYzoKICAgIFFDaGFyKCk7CiAgICBRQ2hhcigg
Y2hhciBjICk7CiAgICBRQ2hhciggdWNoYXIgYyApOwogICAgUUNoYXIoIHVjaGFyIGMsIHVjaGFy
IHIgKTsKICAgIFFDaGFyKCBjb25zdCBRQ2hhciYgYyApOwogICAgUUNoYXIoIHVzaG9ydCByYyAp
OwogICAgUUNoYXIoIHNob3J0IHJjICk7CiAgICBRQ2hhciggdWludCByYyApOwogICAgUUNoYXIo
IGludCByYyApOwoKICAgIHN0YXRpYyBjb25zdCAgUUNoYXIgbnVsbDsgICAgICAgICAgICAgCiAg
ICBzdGF0aWMgY29uc3QgIFFDaGFyIHJlcGxhY2VtZW50OyAgICAgIAogICAgc3RhdGljIGNvbnN0
ICBRQ2hhciBieXRlT3JkZXJNYXJrOyAgICAgIAogICAgc3RhdGljIGNvbnN0ICBRQ2hhciBieXRl
T3JkZXJTd2FwcGVkOyAgICAgIAogICAgc3RhdGljIGNvbnN0ICBRQ2hhciBuYnNwOyAgICAgICAg
ICAgICAKCiAgICAgCgogICAgZW51bSBDYXRlZ29yeQogICAgewoJTm9DYXRlZ29yeSwKCglNYXJr
X05vblNwYWNpbmcsCSAgIAoJTWFya19TcGFjaW5nQ29tYmluaW5nLAkgICAKCU1hcmtfRW5jbG9z
aW5nLAkJICAgCgoJTnVtYmVyX0RlY2ltYWxEaWdpdCwJICAgCglOdW1iZXJfTGV0dGVyLAkJICAg
CglOdW1iZXJfT3RoZXIsCQkgICAKCglTZXBhcmF0b3JfU3BhY2UsCSAgIAoJU2VwYXJhdG9yX0xp
bmUsCQkgICAKCVNlcGFyYXRvcl9QYXJhZ3JhcGgsCSAgIAoKCU90aGVyX0NvbnRyb2wsCQkgICAK
CU90aGVyX0Zvcm1hdCwJCSAgIAoJT3RoZXJfU3Vycm9nYXRlLAkgICAKCU90aGVyX1ByaXZhdGVV
c2UsCSAgIAoJT3RoZXJfTm90QXNzaWduZWQsCSAgIAoKCUxldHRlcl9VcHBlcmNhc2UsCSAgIAoJ
TGV0dGVyX0xvd2VyY2FzZSwJICAgCglMZXR0ZXJfVGl0bGVjYXNlLAkgICAKCUxldHRlcl9Nb2Rp
ZmllciwJICAgCglMZXR0ZXJfT3RoZXIsCQkgICAKCglQdW5jdHVhdGlvbl9Db25uZWN0b3IsCSAg
IAoJUHVuY3R1YXRpb25fRGFzaywJICAgCglQdW5jdHVhdGlvbl9PcGVuLAkgICAKCVB1bmN0dWF0
aW9uX0Nsb3NlLAkgICAKCVB1bmN0dWF0aW9uX0luaXRpYWxRdW90ZSwgIAoJUHVuY3R1YXRpb25f
RmluYWxRdW90ZSwJICAgCglQdW5jdHVhdGlvbl9PdGhlciwJICAgCgoJU3ltYm9sX01hdGgsCQkg
ICAKCVN5bWJvbF9DdXJyZW5jeSwJICAgCglTeW1ib2xfTW9kaWZpZXIsCSAgIAoJU3ltYm9sX090
aGVyCQkgICAKICAgIH07CgogICAgZW51bSBEaXJlY3Rpb24KICAgIHsKCURpckwsIERpclIsIERp
ckVOLCBEaXJFUywgRGlyRVQsIERpckFOLCBEaXJDUywgRGlyQiwgRGlyUywgRGlyV1MsIERpck9O
LAoJRGlyTFJFLCBEaXJMUk8sIERpckFMLCBEaXJSTEUsIERpclJMTywgRGlyUERGLCBEaXJOU00s
IERpckJOCiAgICB9OwoKICAgIGVudW0gRGVjb21wb3NpdGlvbgogICAgewogICAgICAgIFNpbmds
ZSwgQ2Fub25pY2FsLCBGb250LCBOb0JyZWFrLCBJbml0aWFsLCBNZWRpYWwsCiAgICAgICAgRmlu
YWwsIElzb2xhdGVkLCBDaXJjbGUsIFN1cGVyLCBTdWIsIFZlcnRpY2FsLAogICAgICAgIFdpZGUs
IE5hcnJvdywgU21hbGwsIFNxdWFyZSwgQ29tcGF0LCBGcmFjdGlvbgogICAgfTsKCiAgICBlbnVt
IEpvaW5pbmcKICAgIHsKCU90aGVySm9pbmluZywgRHVhbCwgUmlnaHQsIENlbnRlcgogICAgfTsK
CiAgICAgCgogICAgaW50IGRpZ2l0VmFsdWUoKSBjb25zdDsKICAgIFFDaGFyIGxvd2VyKCkgY29u
c3Q7CiAgICBRQ2hhciB1cHBlcigpIGNvbnN0OwoKICAgIENhdGVnb3J5IGNhdGVnb3J5KCkgY29u
c3Q7CiAgICBEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3Q7CiAgICBKb2luaW5nIGpvaW5pbmco
KSBjb25zdDsKICAgIGJvb2wgbWlycm9yZWQoKSBjb25zdDsKICAgIFFDaGFyIG1pcnJvcmVkQ2hh
cigpIGNvbnN0OwogICAgUVN0cmluZyBkZWNvbXBvc2l0aW9uKCkgY29uc3Q7CiAgICBEZWNvbXBv
c2l0aW9uIGRlY29tcG9zaXRpb25UYWcoKSBjb25zdDsKCiAgICBjaGFyIGxhdGluMSgpIGNvbnN0
IHsgcmV0dXJuIHJ3ID8gMCA6IGNsOyB9CiAgICB1c2hvcnQgdW5pY29kZSgpIGNvbnN0IHsgcmV0
dXJuIChydyA8PCA4KSB8IGNsOyB9CgogICAgIAogICAgb3BlcmF0b3IgY2hhcigpIGNvbnN0IHsg
cmV0dXJuIGxhdGluMSgpOyB9CgoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gdW5p
Y29kZSgpPT0wOyB9CiAgICBib29sIGlzUHJpbnQoKSBjb25zdDsKICAgIGJvb2wgaXNQdW5jdCgp
IGNvbnN0OwogICAgYm9vbCBpc1NwYWNlKCkgY29uc3Q7CiAgICBib29sIGlzTWFyaygpIGNvbnN0
OwogICAgYm9vbCBpc0xldHRlcigpIGNvbnN0OwogICAgYm9vbCBpc051bWJlcigpIGNvbnN0Owog
ICAgYm9vbCBpc0xldHRlck9yTnVtYmVyKCkgY29uc3Q7CiAgICBib29sIGlzRGlnaXQoKSBjb25z
dDsKCiAgICB1Y2hhciYgY2VsbCgpIHsgcmV0dXJuIGNsOyB9CiAgICB1Y2hhciYgcm93KCkgeyBy
ZXR1cm4gcnc7IH0KICAgIHVjaGFyIGNlbGwoKSBjb25zdCB7IHJldHVybiBjbDsgfQogICAgdWNo
YXIgcm93KCkgY29uc3QgeyByZXR1cm4gcnc7IH0KCiAgICBzdGF0aWMgYm9vbCBuZXR3b3JrT3Jk
ZXJlZCgpIHsgcmV0dXJuIChpbnQpbmV0X29yZGVyZWQgPT0gMTsgfQoKICAgIGZyaWVuZCBpbmxp
bmUgaW50IG9wZXJhdG9yPT0oIGNoYXIgY2gsIFFDaGFyIGMgKTsKICAgIGZyaWVuZCBpbmxpbmUg
aW50IG9wZXJhdG9yPT0oIFFDaGFyIGMsIGNoYXIgY2ggKTsKICAgIGZyaWVuZCBpbmxpbmUgaW50
IG9wZXJhdG9yPT0oIFFDaGFyIGMxLCBRQ2hhciBjMiApOwogICAgZnJpZW5kIGlubGluZSBpbnQg
b3BlcmF0b3IhPSggUUNoYXIgYzEsIFFDaGFyIGMyICk7CiAgICBmcmllbmQgaW5saW5lIGludCBv
cGVyYXRvciE9KCBjaGFyIGNoLCBRQ2hhciBjICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVy
YXRvciE9KCBRQ2hhciBjLCBjaGFyIGNoICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRv
cjw9KCBRQ2hhciBjLCBjaGFyIGNoICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvcjw9
KCBjaGFyIGNoLCBRQ2hhciBjICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvcjw9KCBR
Q2hhciBjMSwgUUNoYXIgYzIgKTsKCnByaXZhdGU6CgogICAgIAogICAgIAogICAgdWNoYXIgcnc7
CiAgICB1Y2hhciBjbDsKCgoKICAgIGVudW0geyBuZXRfb3JkZXJlZCA9IDEgfTsKIyAyMDEgIi9h
bWQvc2lnbWEvMC9zcmMvYWxwaGEtZGVjLW9zZjQuMC93b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUv
cXN0cmluZy5oIgoKfTsKCmlubGluZSBRQ2hhcjo6UUNoYXIoKQp7CiAgICBydyA9IDA7IGNsID0g
MDsKCgoKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCBjaGFyIGMgKQp7CiAgICBydyA9IDA7IGNsID0g
KHVjaGFyKWM7CgoKCn0KaW5saW5lIFFDaGFyOjpRQ2hhciggdWNoYXIgYyApCnsKICAgIHJ3ID0g
MDsgY2wgPSBjOwoKCgp9CmlubGluZSBRQ2hhcjo6UUNoYXIoIHVjaGFyIGMsIHVjaGFyIHIgKQp7
CiAgICBydyA9IHI7IGNsID0gYzsKCgoKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCBjb25zdCBRQ2hh
ciYgYyApCnsKICAgIHJ3ID0gYy5ydzsgY2wgPSBjLmNsOwoKCgp9CmlubGluZSBRQ2hhcjo6UUNo
YXIoIHVzaG9ydCByYyApCnsKICAgIHJ3ID0gKHVjaGFyKSgocmM+PjgpJjB4ZmYpOyBjbCA9ICh1
Y2hhcikocmMmMHhmZik7CgoKCn0KaW5saW5lIFFDaGFyOjpRQ2hhciggc2hvcnQgcmMgKQp7CiAg
ICBydyA9ICh1Y2hhcikoKHJjPj44KSYweGZmKTsgY2wgPSAodWNoYXIpKHJjJjB4ZmYpOwoKCgp9
CmlubGluZSBRQ2hhcjo6UUNoYXIoIHVpbnQgcmMgKQp7CiAgICBydyA9ICh1Y2hhcikoKHJjPj44
KSYweGZmKTsgY2wgPSAodWNoYXIpKHJjJjB4ZmYpOwoKCgp9CmlubGluZSBRQ2hhcjo6UUNoYXIo
IGludCByYyApCnsKICAgIHJ3ID0gKHVjaGFyKSgocmM+PjgpJjB4ZmYpOyBjbCA9ICh1Y2hhciko
cmMmMHhmZik7CgoKCn0KCgppbmxpbmUgaW50IG9wZXJhdG9yPT0oIGNoYXIgY2gsIFFDaGFyIGMg
KQp7CiAgICByZXR1cm4gY2ggPT0gYy5jbCAmJiAhYy5ydzsKfQoKaW5saW5lIGludCBvcGVyYXRv
cj09KCBRQ2hhciBjLCBjaGFyIGNoICkKewogICAgcmV0dXJuIGNoID09IGMuY2wgJiYgIWMucnc7
Cn0KCmlubGluZSBpbnQgb3BlcmF0b3I9PSggUUNoYXIgYzEsIFFDaGFyIGMyICkKewogICAgcmV0
dXJuIGMxLmNsID09IGMyLmNsCgkmJiBjMS5ydyA9PSBjMi5ydzsKfQoKaW5saW5lIGludCBvcGVy
YXRvciE9KCBRQ2hhciBjMSwgUUNoYXIgYzIgKQp7CiAgICByZXR1cm4gYzEuY2wgIT0gYzIuY2wK
CXx8IGMxLnJ3ICE9IGMyLnJ3Owp9CgppbmxpbmUgaW50IG9wZXJhdG9yIT0oIGNoYXIgY2gsIFFD
aGFyIGMgKQp7CiAgICByZXR1cm4gY2ggIT0gYy5jbCB8fCBjLnJ3Owp9CgppbmxpbmUgaW50IG9w
ZXJhdG9yIT0oIFFDaGFyIGMsIGNoYXIgY2ggKQp7CiAgICByZXR1cm4gY2ggIT0gYy5jbCB8fCBj
LnJ3Owp9CgppbmxpbmUgaW50IG9wZXJhdG9yPD0oIFFDaGFyIGMsIGNoYXIgY2ggKQp7CiAgICBy
ZXR1cm4gIShjaCA8IGMuY2wgfHwgYy5ydyk7Cn0KCmlubGluZSBpbnQgb3BlcmF0b3I8PSggY2hh
ciBjaCwgUUNoYXIgYyApCnsKICAgIHJldHVybiBjaCA8PSBjLmNsIHx8IGMucnc7Cn0KCmlubGlu
ZSBpbnQgb3BlcmF0b3I8PSggUUNoYXIgYzEsIFFDaGFyIGMyICkKewogICAgcmV0dXJuIGMxLnJ3
ID4gYzIucncKCT8gMCAKCTogYzEucncgPCBjMi5ydwoJICAgID8gMSAKCSAgICA6IGMxLmNsIDw9
IGMyLmNsOwp9CgppbmxpbmUgaW50IG9wZXJhdG9yPj0oIFFDaGFyIGMsIGNoYXIgY2ggKSB7IHJl
dHVybiBjaCA8PSBjOyB9CmlubGluZSBpbnQgb3BlcmF0b3I+PSggY2hhciBjaCwgUUNoYXIgYyAp
IHsgcmV0dXJuIGMgPD0gY2g7IH0KaW5saW5lIGludCBvcGVyYXRvcj49KCBRQ2hhciBjMSwgUUNo
YXIgYzIgKSB7IHJldHVybiBjMiA8PSBjMTsgfQppbmxpbmUgaW50IG9wZXJhdG9yPCggUUNoYXIg
YywgY2hhciBjaCApIHsgcmV0dXJuICEoY2g8PWMpOyB9CmlubGluZSBpbnQgb3BlcmF0b3I8KCBj
aGFyIGNoLCBRQ2hhciBjICkgeyByZXR1cm4gIShjPD1jaCk7IH0KaW5saW5lIGludCBvcGVyYXRv
cjwoIFFDaGFyIGMxLCBRQ2hhciBjMiApIHsgcmV0dXJuICEoYzI8PWMxKTsgfQppbmxpbmUgaW50
IG9wZXJhdG9yPiggUUNoYXIgYywgY2hhciBjaCApIHsgcmV0dXJuICEoY2g+PWMpOyB9CmlubGlu
ZSBpbnQgb3BlcmF0b3I+KCBjaGFyIGNoLCBRQ2hhciBjICkgeyByZXR1cm4gIShjPj1jaCk7IH0K
aW5saW5lIGludCBvcGVyYXRvcj4oIFFDaGFyIGMxLCBRQ2hhciBjMiApIHsgcmV0dXJuICEoYzI+
PWMxKTsgfQoKIApzdHJ1Y3QgICBRU3RyaW5nRGF0YSA6IHB1YmxpYyBRU2hhcmVkIHsKICAgIFFT
dHJpbmdEYXRhKCkgOgoJdW5pY29kZSgwKSwgYXNjaWkoMCksIGxlbigwKSwgbWF4bCgwKSwgZGly
dHlhc2NpaSgwKSB7IHJlZigpOyB9CiAgICBRU3RyaW5nRGF0YShRQ2hhciAqdSwgdWludCBsLCB1
aW50IG0pIDoKCXVuaWNvZGUodSksIGFzY2lpKDApLCBsZW4obCksIG1heGwobSksIGRpcnR5YXNj
aWkoMCkgeyB9CgogICAgflFTdHJpbmdEYXRhKCkgeyBpZiAoIHVuaWNvZGUgKSBkZWxldGVbXSAo
KGNoYXIqKXVuaWNvZGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIGFzY2lpICkgZGVsZXRl
W10gYXNjaWk7IH0KCiAgICB2b2lkIGRlbGV0ZVNlbGYoKTsKICAgIFFDaGFyICp1bmljb2RlOwog
ICAgY2hhciAqYXNjaWk7CiAgICB1aW50IGxlbjsKICAgIHVpbnQgbWF4bDozMDsKICAgIHVpbnQg
ZGlydHlhc2NpaToxOwp9OwoKCmNsYXNzICAgUVN0cmluZwp7CnB1YmxpYzoKICAgIFFTdHJpbmco
KTsJCQkJCSAKICAgIFFTdHJpbmcoIFFDaGFyICk7CQkJCSAKICAgIFFTdHJpbmcoIGNvbnN0IFFT
dHJpbmcgJiApOwkJCSAKICAgIFFTdHJpbmcoIGNvbnN0IFFCeXRlQXJyYXkmICk7CQkgCiAgICBR
U3RyaW5nKCBjb25zdCBRQ2hhciogdW5pY29kZSwgdWludCBsZW5ndGggKTsgIAoKICAgIFFTdHJp
bmcoIGNvbnN0IGNoYXIgKnN0ciApOwkJCSAKCiAgICB+UVN0cmluZygpOwoKICAgIFFTdHJpbmcg
ICAgJm9wZXJhdG9yPSggY29uc3QgUVN0cmluZyAmICk7CSAKCiAgICBRU3RyaW5nICAgICZvcGVy
YXRvcj0oIGNvbnN0IGNoYXIgKiApOwkgCgogICAgUVN0cmluZyAgICAmb3BlcmF0b3I9KCBjb25z
dCBRQ1N0cmluZyYgKTsJIAogICAgUVN0cmluZyAgICAmb3BlcmF0b3I9KCBRQ2hhciBjICk7CiAg
ICBRU3RyaW5nICAgICZvcGVyYXRvcj0oIGNoYXIgYyApOwoKICAgIHN0YXRpYyBjb25zdCAgUVN0
cmluZyBudWxsOwoKICAgIGJvb2wJaXNOdWxsKCkJY29uc3Q7CiAgICBib29sCWlzRW1wdHkoKQlj
b25zdDsKICAgIHVpbnQJbGVuZ3RoKCkJY29uc3Q7CiAgICB2b2lkCXRydW5jYXRlKCB1aW50IHBv
cyApOwoKCgoKICAgIHZvaWQJZmlsbCggUUNoYXIgYywgaW50IGxlbiA9IC0xICk7CgogICAgUVN0
cmluZwljb3B5KCkJY29uc3Q7CgogICAgUVN0cmluZyBhcmcobG9uZyBhLCBpbnQgZmllbGR3aWR0
aD0wLCBpbnQgYmFzZT0xMCkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyh1bG9uZyBhLCBpbnQgZmll
bGR3aWR0aD0wLCBpbnQgYmFzZT0xMCkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyhpbnQgYSwgaW50
IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9MTApIGNvbnN0OwogICAgUVN0cmluZyBhcmcodWludCBh
LCBpbnQgZmllbGR3aWR0aD0wLCBpbnQgYmFzZT0xMCkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyhz
aG9ydCBhLCBpbnQgZmllbGR3aWR0aD0wLCBpbnQgYmFzZT0xMCkgY29uc3Q7CiAgICBRU3RyaW5n
IGFyZyh1c2hvcnQgYSwgaW50IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9MTApIGNvbnN0OwogICAg
UVN0cmluZyBhcmcoY2hhciBhLCBpbnQgZmllbGR3aWR0aD0wKSBjb25zdDsKICAgIFFTdHJpbmcg
YXJnKFFDaGFyIGEsIGludCBmaWVsZHdpZHRoPTApIGNvbnN0OwogICAgUVN0cmluZyBhcmcoY29u
c3QgUVN0cmluZyYgYSwgaW50IGZpZWxkd2lkdGg9MCkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyhk
b3VibGUgYSwgaW50IGZpZWxkd2lkdGg9MCwgY2hhciBmbXQ9J2cnLCBpbnQgcHJlYz0tMSkgY29u
c3Q7CgogICAgUVN0cmluZyAgICAmc3ByaW50ZiggY29uc3QgY2hhciogZm9ybWF0LCAuLi4gKQoK
CV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKQoKCTsKCiAgICBpbnQJCWZp
bmQoIFFDaGFyIGMsIGludCBpbmRleD0wLCBib29sIGNzPSAxICApIGNvbnN0OwogICAgaW50CQlm
aW5kKCBjaGFyIGMsIGludCBpbmRleD0wLCBib29sIGNzPSAxICApIGNvbnN0OwogICAgaW50CQlm
aW5kKCBjb25zdCBRU3RyaW5nICZzdHIsIGludCBpbmRleD0wLCBib29sIGNzPSAxICApIGNvbnN0
OwogICAgaW50CQlmaW5kKCBjb25zdCBRUmVnRXhwICYsIGludCBpbmRleD0wICkgY29uc3Q7Cgog
ICAgaW50CQlmaW5kKCBjb25zdCBjaGFyKiBzdHIsIGludCBpbmRleD0wICkgY29uc3Q7CgogICAg
aW50CQlmaW5kUmV2KCBRQ2hhciBjLCBpbnQgaW5kZXg9LTEsIGJvb2wgY3M9IDEgKSBjb25zdDsK
ICAgIGludAkJZmluZFJldiggY2hhciBjLCBpbnQgaW5kZXg9LTEsIGJvb2wgY3M9IDEgKSBjb25z
dDsKICAgIGludAkJZmluZFJldiggY29uc3QgUVN0cmluZyAmc3RyLCBpbnQgaW5kZXg9LTEsIGJv
b2wgY3M9IDEgKSBjb25zdDsKICAgIGludAkJZmluZFJldiggY29uc3QgUVJlZ0V4cCAmLCBpbnQg
aW5kZXg9LTEgKSBjb25zdDsKCiAgICBpbnQJCWZpbmRSZXYoIGNvbnN0IGNoYXIqIHN0ciwgaW50
IGluZGV4PS0xICkgY29uc3Q7CgogICAgaW50CQljb250YWlucyggUUNoYXIgYywgYm9vbCBjcz0g
MSAgKSBjb25zdDsKICAgIGludAkJY29udGFpbnMoIGNoYXIgYywgYm9vbCBjcz0gMSAgKSBjb25z
dAoJCSAgICB7IHJldHVybiBjb250YWlucyhRQ2hhcihjKSwgY3MpOyB9CgogICAgaW50CQljb250
YWlucyggY29uc3QgY2hhciogc3RyLCBib29sIGNzPSAxICApIGNvbnN0OwoKICAgIGludAkJY29u
dGFpbnMoIGNvbnN0IFFTdHJpbmcgJnN0ciwgYm9vbCBjcz0gMSAgKSBjb25zdDsKICAgIGludAkJ
Y29udGFpbnMoIGNvbnN0IFFSZWdFeHAgJiApIGNvbnN0OwoKICAgIFFTdHJpbmcJbGVmdCggdWlu
dCBsZW4gKSAgY29uc3Q7CiAgICBRU3RyaW5nCXJpZ2h0KCB1aW50IGxlbiApIGNvbnN0OwogICAg
UVN0cmluZwltaWQoIHVpbnQgaW5kZXgsIHVpbnQgbGVuPTB4ZmZmZmZmZmYpIGNvbnN0OwoKICAg
IFFTdHJpbmcJbGVmdEp1c3RpZnkoIHVpbnQgd2lkdGgsIFFDaGFyIGZpbGw9JyAnLCBib29sIHRy
dW5jPSAwICljb25zdDsKICAgIFFTdHJpbmcJcmlnaHRKdXN0aWZ5KCB1aW50IHdpZHRoLCBRQ2hh
ciBmaWxsPScgJyxib29sIHRydW5jPSAwICljb25zdDsKCiAgICBRU3RyaW5nCWxvd2VyKCkgY29u
c3Q7CiAgICBRU3RyaW5nCXVwcGVyKCkgY29uc3Q7CgogICAgUVN0cmluZwlzdHJpcFdoaXRlU3Bh
Y2UoKQljb25zdDsKICAgIFFTdHJpbmcJc2ltcGxpZnlXaGl0ZVNwYWNlKCkJY29uc3Q7CgogICAg
UVN0cmluZyAgICAmaW5zZXJ0KCB1aW50IGluZGV4LCBjb25zdCBRU3RyaW5nICYgKTsKICAgIFFT
dHJpbmcgICAgJmluc2VydCggdWludCBpbmRleCwgY29uc3QgUUNoYXIqLCB1aW50IGxlbiApOwog
ICAgUVN0cmluZyAgICAmaW5zZXJ0KCB1aW50IGluZGV4LCBRQ2hhciApOwogICAgUVN0cmluZyAg
ICAmaW5zZXJ0KCB1aW50IGluZGV4LCBjaGFyIGMgKSB7IHJldHVybiBpbnNlcnQoaW5kZXgsUUNo
YXIoYykpOyB9CiAgICBRU3RyaW5nICAgICZhcHBlbmQoIGNoYXIgKTsKICAgIFFTdHJpbmcgICAg
JmFwcGVuZCggUUNoYXIgKTsKICAgIFFTdHJpbmcgICAgJmFwcGVuZCggY29uc3QgUVN0cmluZyAm
ICk7CiAgICBRU3RyaW5nICAgICZwcmVwZW5kKCBjaGFyICk7CiAgICBRU3RyaW5nICAgICZwcmVw
ZW5kKCBRQ2hhciApOwogICAgUVN0cmluZyAgICAmcHJlcGVuZCggY29uc3QgUVN0cmluZyAmICk7
CiAgICBRU3RyaW5nICAgICZyZW1vdmUoIHVpbnQgaW5kZXgsIHVpbnQgbGVuICk7CiAgICBRU3Ry
aW5nICAgICZyZXBsYWNlKCB1aW50IGluZGV4LCB1aW50IGxlbiwgY29uc3QgUVN0cmluZyAmICk7
CiAgICBRU3RyaW5nICAgICZyZXBsYWNlKCB1aW50IGluZGV4LCB1aW50IGxlbiwgY29uc3QgUUNo
YXIqLCB1aW50IGNsZW4gKTsKICAgIFFTdHJpbmcgICAgJnJlcGxhY2UoIGNvbnN0IFFSZWdFeHAg
JiwgY29uc3QgUVN0cmluZyAmICk7CgogICAgc2hvcnQJdG9TaG9ydCggYm9vbCAqb2s9MCwgaW50
IGJhc2U9MTAgKQljb25zdDsKICAgIHVzaG9ydAl0b1VTaG9ydCggYm9vbCAqb2s9MCwgaW50IGJh
c2U9MTAgKQljb25zdDsKICAgIGludAkJdG9JbnQoIGJvb2wgKm9rPTAsIGludCBiYXNlPTEwICkJ
Y29uc3Q7CiAgICB1aW50CXRvVUludCggYm9vbCAqb2s9MCwgaW50IGJhc2U9MTAgKQljb25zdDsK
ICAgIGxvbmcJdG9Mb25nKCBib29sICpvaz0wLCBpbnQgYmFzZT0xMCApCWNvbnN0OwogICAgdWxv
bmcJdG9VTG9uZyggYm9vbCAqb2s9MCwgaW50IGJhc2U9MTAgKQljb25zdDsKICAgIGZsb2F0CXRv
RmxvYXQoIGJvb2wgKm9rPTAgKQljb25zdDsKICAgIGRvdWJsZQl0b0RvdWJsZSggYm9vbCAqb2s9
MCApCWNvbnN0OwoKICAgIFFTdHJpbmcgICAgJnNldE51bSggc2hvcnQsIGludCBiYXNlPTEwICk7
CiAgICBRU3RyaW5nICAgICZzZXROdW0oIHVzaG9ydCwgaW50IGJhc2U9MTAgKTsKICAgIFFTdHJp
bmcgICAgJnNldE51bSggaW50LCBpbnQgYmFzZT0xMCApOwogICAgUVN0cmluZyAgICAmc2V0TnVt
KCB1aW50LCBpbnQgYmFzZT0xMCApOwogICAgUVN0cmluZyAgICAmc2V0TnVtKCBsb25nLCBpbnQg
YmFzZT0xMCApOwogICAgUVN0cmluZyAgICAmc2V0TnVtKCB1bG9uZywgaW50IGJhc2U9MTAgKTsK
ICAgIFFTdHJpbmcgICAgJnNldE51bSggZmxvYXQsIGNoYXIgZj0nZycsIGludCBwcmVjPTYgKTsK
ICAgIFFTdHJpbmcgICAgJnNldE51bSggZG91YmxlLCBjaGFyIGY9J2cnLCBpbnQgcHJlYz02ICk7
CgogICAgc3RhdGljIFFTdHJpbmcgbnVtYmVyKCBsb25nLCBpbnQgYmFzZT0xMCApOwogICAgc3Rh
dGljIFFTdHJpbmcgbnVtYmVyKCB1bG9uZywgaW50IGJhc2U9MTApOwogICAgc3RhdGljIFFTdHJp
bmcgbnVtYmVyKCBpbnQsIGludCBiYXNlPTEwICk7CiAgICBzdGF0aWMgUVN0cmluZyBudW1iZXIo
IHVpbnQsIGludCBiYXNlPTEwKTsKICAgIHN0YXRpYyBRU3RyaW5nIG51bWJlciggZG91YmxlLCBj
aGFyIGY9J2cnLCBpbnQgcHJlYz02ICk7CgogICAgdm9pZAlzZXRFeHBhbmQoIHVpbnQgaW5kZXgs
IFFDaGFyIGMgKTsKCiAgICBRU3RyaW5nICAgICZvcGVyYXRvcis9KCBjb25zdCBRU3RyaW5nICZz
dHIgKTsKICAgIFFTdHJpbmcgICAgJm9wZXJhdG9yKz0oIFFDaGFyIGMgKTsKICAgIFFTdHJpbmcg
ICAgJm9wZXJhdG9yKz0oIGNoYXIgYyApOwoKICAgICAKICAgIFFDaGFyIGF0KCB1aW50IGkgKSBj
b25zdAoJeyByZXR1cm4gaTxkLT5sZW4gPyBkLT51bmljb2RlW2ldIDogUUNoYXI6Om51bGw7IH0K
ICAgIFFDaGFyIG9wZXJhdG9yW10oIGludCBpICkgY29uc3QgeyByZXR1cm4gYXQoKHVpbnQpaSk7
IH0KICAgIFFDaGFyUmVmIGF0KCB1aW50IGkgKTsKICAgIFFDaGFyUmVmIG9wZXJhdG9yW10oIGlu
dCBpICk7CgogICAgUUNoYXIgY29uc3RyZWYodWludCBpKSBjb25zdAoJeyByZXR1cm4gYXQoaSk7
IH0KICAgIFFDaGFyJiByZWYodWludCBpKQoJeyAgCgkgICAgaWYgKGQtPmNvdW50IT0xIHx8IGk+
PWQtPmxlbikKCQlzdWJhdChpKTsKCSAgICBkLT5kaXJ0eWFzY2lpPTE7CgkgICAgcmV0dXJuIGQt
PnVuaWNvZGVbaV07Cgl9CgogICAgY29uc3QgUUNoYXIqIHVuaWNvZGUoKSBjb25zdCB7IHJldHVy
biBkLT51bmljb2RlOyB9CiAgICBjb25zdCBjaGFyKiBhc2NpaSgpIGNvbnN0OwogICAgY29uc3Qg
Y2hhciogbGF0aW4xKCkgY29uc3Q7CiAgICBzdGF0aWMgUVN0cmluZyBmcm9tTGF0aW4xKGNvbnN0
IGNoYXIqLCBpbnQgbGVuPS0xKTsKCiAgICBRQ1N0cmluZyB1dGY4KCkgY29uc3Q7CiAgICBzdGF0
aWMgUVN0cmluZyBmcm9tVXRmOChjb25zdCBjaGFyKiwgaW50IGxlbj0tMSk7CgogICAgUUNTdHJp
bmcgbG9jYWw4Qml0KCkgY29uc3Q7CiAgICBzdGF0aWMgUVN0cmluZyBmcm9tTG9jYWw4Qml0KGNv
bnN0IGNoYXIqLCBpbnQgbGVuPS0xKTsKICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Q7CgogICAg
b3BlcmF0b3IgY29uc3QgY2hhciAqKCkgY29uc3QgeyByZXR1cm4gbGF0aW4xKCk7IH0KCgogICAg
UVN0cmluZyAmc2V0VW5pY29kZSggY29uc3QgUUNoYXIqIHVuaWNvZGUsIHVpbnQgbGVuICk7CiAg
ICBRU3RyaW5nICZzZXRVbmljb2RlQ29kZXMoIGNvbnN0IHVzaG9ydCogdW5pY29kZV9hc191c2hv
cnRzLCB1aW50IGxlbiApOwogICAgUVN0cmluZyAmc2V0TGF0aW4xKCBjb25zdCBjaGFyKiwgaW50
IGxlbj0tMSApOwoKICAgIGludCBjb21wYXJlKCBjb25zdCBRU3RyaW5nJiBzICkgY29uc3Q7CiAg
ICBzdGF0aWMgaW50IGNvbXBhcmUoIGNvbnN0IFFTdHJpbmcmIHMxLCBjb25zdCBRU3RyaW5nJiBz
MiApCgl7IHJldHVybiBzMS5jb21wYXJlKHMyKTsgfQoKCiAgICBmcmllbmQgICBRRGF0YVN0cmVh
bSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVN0cmluZyAmICk7CgogICAgIAogICAgdm9p
ZCBjb21wb3NlKCk7CiAgICBRQ2hhcjo6RGlyZWN0aW9uIGJhc2ljRGlyZWN0aW9uKCk7CiAgICBR
U3RyaW5nIHZpc3VhbChpbnQgaW5kZXggPSAwLCBpbnQgbGVuID0gLTEpOwoKCiAgICBjb25zdCBj
aGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbGF0aW4xKCk7IH0KCgogICAgYm9vbCBzdGFydHNX
aXRoKCBjb25zdCBRU3RyaW5nJiApIGNvbnN0OwoKcHJpdmF0ZToKICAgIFFTdHJpbmcoIGludCBz
aXplLCBib29sIGR1bW15ICk7CQkgCgogICAgdm9pZCBkZXJlZigpOwogICAgdm9pZCByZWFsX2Rl
dGFjaCgpOwogICAgdm9pZCBzZXRMZW5ndGgoIHVpbnQgcG9zICk7CiAgICB2b2lkIHN1YmF0KCB1
aW50ICk7CiAgICBib29sIGZpbmRBcmcoaW50JiBwb3MsIGludCYgbGVuKSBjb25zdDsKCiAgICBz
dGF0aWMgUUNoYXIqIGFzY2lpVG9Vbmljb2RlKCBjb25zdCBjaGFyKiwgdWludCAqIGxlbiwgdWlu
dCBtYXhsZW49KHVpbnQpLTEgKTsKICAgIHN0YXRpYyBRQ2hhciogYXNjaWlUb1VuaWNvZGUoIGNv
bnN0IFFCeXRlQXJyYXkmLCB1aW50ICogbGVuICk7CiAgICBzdGF0aWMgY2hhciogdW5pY29kZVRv
QXNjaWkoIGNvbnN0IFFDaGFyKiwgdWludCBsZW4gKTsKCiAgICBRU3RyaW5nRGF0YSAqZDsKICAg
IHN0YXRpYyBRU3RyaW5nRGF0YSogc2hhcmVkX251bGw7CiAgICBzdGF0aWMgUVN0cmluZ0RhdGEq
IG1ha2VTaGFyZWROdWxsKCk7CgogICAgZnJpZW5kIGNsYXNzIFFDb25zdFN0cmluZzsKICAgIFFT
dHJpbmcoUVN0cmluZ0RhdGEqIGRkLCBib29sICApIDogZChkZCkgeyB9Cn07CgpjbGFzcyAgIFFD
aGFyUmVmIHsKICAgIGZyaWVuZCBjbGFzcyBRU3RyaW5nOwogICAgUVN0cmluZyYgczsKICAgIHVp
bnQgcDsKICAgIFFDaGFyUmVmKFFTdHJpbmcqIHN0ciwgdWludCBwb3MpIDogcygqc3RyKSwgcChw
b3MpIHsgfQoKcHVibGljOgogICAgIAoKICAgICAKCiAgICB1c2hvcnQgdW5pY29kZSgpIGNvbnN0
IHsgcmV0dXJuIHMuY29uc3RyZWYocCkudW5pY29kZSgpOyB9CiAgICBjaGFyIGxhdGluMSgpIGNv
bnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkubGF0aW4xKCk7IH0KCiAgICAgCiAgICBRQ2hhclJl
ZiBvcGVyYXRvcj0oY2hhciBjICkgeyBzLnJlZihwKT1jOyByZXR1cm4gKnRoaXM7IH0KICAgIFFD
aGFyUmVmIG9wZXJhdG9yPSh1Y2hhciBjICkgeyBzLnJlZihwKT1jOyByZXR1cm4gKnRoaXM7IH0K
ICAgIFFDaGFyUmVmIG9wZXJhdG9yPShRQ2hhciBjICkgeyBzLnJlZihwKT1jOyByZXR1cm4gKnRo
aXM7IH0KICAgIFFDaGFyUmVmIG9wZXJhdG9yPShjb25zdCBRQ2hhclJlZiYgYyApIHsgcy5yZWYo
cCk9Yy51bmljb2RlKCk7IHJldHVybiAqdGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KHVz
aG9ydCByYyApIHsgcy5yZWYocCk9cmM7IHJldHVybiAqdGhpczsgfQogICAgUUNoYXJSZWYgb3Bl
cmF0b3I9KHNob3J0IHJjICkgeyBzLnJlZihwKT1yYzsgcmV0dXJuICp0aGlzOyB9CiAgICBRQ2hh
clJlZiBvcGVyYXRvcj0odWludCByYyApIHsgcy5yZWYocCk9cmM7IHJldHVybiAqdGhpczsgfQog
ICAgUUNoYXJSZWYgb3BlcmF0b3I9KGludCByYyApIHsgcy5yZWYocCk9cmM7IHJldHVybiAqdGhp
czsgfQoKICAgIG9wZXJhdG9yIFFDaGFyICgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCk7
IH0KCiAgICAgCiAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIHVuaWNvZGUoKT09MDsg
fQogICAgYm9vbCBpc1ByaW50KCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc1ByaW50
KCk7IH0KICAgIGJvb2wgaXNQdW5jdCgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuaXNQ
dW5jdCgpOyB9CiAgICBib29sIGlzU3BhY2UoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHAp
LmlzU3BhY2UoKTsgfQogICAgYm9vbCBpc01hcmsoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVm
KHApLmlzTWFyaygpOyB9CiAgICBib29sIGlzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gcy5jb25z
dHJlZihwKS5pc0xldHRlcigpOyB9CiAgICBib29sIGlzTnVtYmVyKCkgY29uc3QgeyByZXR1cm4g
cy5jb25zdHJlZihwKS5pc051bWJlcigpOyB9CiAgICBib29sIGlzTGV0dGVyT3JOdW1iZXIoKSB7
IHJldHVybiBzLmNvbnN0cmVmKHApLmlzTGV0dGVyT3JOdW1iZXIoKTsgfQogICAgYm9vbCBpc0Rp
Z2l0KCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc0RpZ2l0KCk7IH0KCiAgICBpbnQg
ZGlnaXRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuZGlnaXRWYWx1ZSgpOyB9
CiAgICBRQ2hhciBsb3dlcigpIHsgcmV0dXJuIHMuY29uc3RyZWYocCkubG93ZXIoKTsgfQogICAg
UUNoYXIgdXBwZXIoKSB7IHJldHVybiBzLmNvbnN0cmVmKHApLnVwcGVyKCk7IH0KCiAgICBRQ2hh
cjo6Q2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmNhdGVn
b3J5KCk7IH0KICAgIFFDaGFyOjpEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
cy5jb25zdHJlZihwKS5kaXJlY3Rpb24oKTsgfQogICAgUUNoYXI6OkpvaW5pbmcgam9pbmluZygp
IGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuam9pbmluZygpOyB9CiAgICBib29sIG1pcnJv
cmVkKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5taXJyb3JlZCgpOyB9CiAgICBRQ2hh
ciBtaXJyb3JlZENoYXIoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLm1pcnJvcmVkQ2hh
cigpOyB9CiAgICBRU3RyaW5nIGRlY29tcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBzLmNvbnN0
cmVmKHApLmRlY29tcG9zaXRpb24oKTsgfQogICAgUUNoYXI6OkRlY29tcG9zaXRpb24gZGVjb21w
b3NpdGlvblRhZygpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuZGVjb21wb3NpdGlvblRh
ZygpOyB9CgogICAgIAogICAgdWNoYXIgY2VsbCgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYo
cCkuY2VsbCgpOyB9CiAgICB1Y2hhciByb3coKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHAp
LnJvdygpOyB9Cgp9OwoKaW5saW5lIFFDaGFyUmVmIFFTdHJpbmc6OmF0KCB1aW50IGkgKSB7IHJl
dHVybiBRQ2hhclJlZih0aGlzLGkpOyB9CmlubGluZSBRQ2hhclJlZiBRU3RyaW5nOjpvcGVyYXRv
cltdKCBpbnQgaSApIHsgcmV0dXJuIGF0KCh1aW50KWkpOyB9CgoKY2xhc3MgICBRQ29uc3RTdHJp
bmcgOiBwcml2YXRlIFFTdHJpbmcgewpwdWJsaWM6CiAgICBRQ29uc3RTdHJpbmcoIFFDaGFyKiB1
bmljb2RlLCB1aW50IGxlbmd0aCApOwogICAgflFDb25zdFN0cmluZygpOwogICAgY29uc3QgUVN0
cmluZyYgc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KfTsKCgogCgoKCiAgUURhdGFT
dHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFTdHJpbmcgJiApOwogIFFE
YXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRU3RyaW5nICYgKTsKCgogCgoK
CiAKIAogCiAKIAppbmxpbmUgUVN0cmluZzo6UVN0cmluZygpIDoKICAgIGQoc2hhcmVkX251bGwg
PyBzaGFyZWRfbnVsbCA6IG1ha2VTaGFyZWROdWxsKCkpCnsKICAgIGQtPnJlZigpOwp9CiAKaW5s
aW5lIFFTdHJpbmc6On5RU3RyaW5nKCkKewogICAgaWYgKCBkLT5kZXJlZigpICkgewoJaWYgKCBk
ID09IHNoYXJlZF9udWxsICkKCSAgICBzaGFyZWRfbnVsbCA9IDA7CglkLT5kZWxldGVTZWxmKCk7
CiAgICB9Cn0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpvcGVyYXRvcj0oIFFDaGFyIGMgKQp7
IHJldHVybiAqdGhpcyA9IFFTdHJpbmcoYyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpv
cGVyYXRvcj0oIGNoYXIgYyApCnsgcmV0dXJuICp0aGlzID0gUVN0cmluZyhRQ2hhcihjKSk7IH0K
CmlubGluZSBib29sIFFTdHJpbmc6OmlzTnVsbCgpIGNvbnN0CnsgcmV0dXJuIHVuaWNvZGUoKSA9
PSAwOyB9CgppbmxpbmUgYm9vbCBRU3RyaW5nOjpvcGVyYXRvciEoKSBjb25zdAp7IHJldHVybiBp
c051bGwoKTsgfQoKaW5saW5lIHVpbnQgUVN0cmluZzo6bGVuZ3RoKCkgY29uc3QKeyByZXR1cm4g
ZC0+bGVuOyB9CgppbmxpbmUgYm9vbCBRU3RyaW5nOjppc0VtcHR5KCkgY29uc3QKeyByZXR1cm4g
bGVuZ3RoKCkgPT0gMDsgfQoKaW5saW5lIFFTdHJpbmcgUVN0cmluZzo6Y29weSgpIGNvbnN0Cnsg
cmV0dXJuIFFTdHJpbmcoICp0aGlzICk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpwcmVw
ZW5kKCBjb25zdCBRU3RyaW5nICYgcyApCnsgcmV0dXJuIGluc2VydCgwLHMpOyB9CgppbmxpbmUg
UVN0cmluZyAmUVN0cmluZzo6cHJlcGVuZCggUUNoYXIgYyApCnsgcmV0dXJuIGluc2VydCgwLGMp
OyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6cHJlcGVuZCggY2hhciBjICkKeyByZXR1cm4g
aW5zZXJ0KDAsYyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjphcHBlbmQoIGNvbnN0IFFT
dHJpbmcgJiBzICkKeyByZXR1cm4gb3BlcmF0b3IrPShzKTsgfQoKaW5saW5lIFFTdHJpbmcgJlFT
dHJpbmc6OmFwcGVuZCggUUNoYXIgYyApCnsgcmV0dXJuIG9wZXJhdG9yKz0oYyk7IH0KCmlubGlu
ZSBRU3RyaW5nICZRU3RyaW5nOjphcHBlbmQoIGNoYXIgYyApCnsgcmV0dXJuIG9wZXJhdG9yKz0o
Yyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpzZXROdW0oIHNob3J0IG4sIGludCBiYXNl
ICkKeyByZXR1cm4gc2V0TnVtKChsb25nKW4sIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0
cmluZzo6c2V0TnVtKCB1c2hvcnQgbiwgaW50IGJhc2UgKQp7IHJldHVybiBzZXROdW0oKHVsb25n
KW4sIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6c2V0TnVtKCBpbnQgbiwgaW50
IGJhc2UgKQp7IHJldHVybiBzZXROdW0oKGxvbmcpbiwgYmFzZSk7IH0KCmlubGluZSBRU3RyaW5n
ICZRU3RyaW5nOjpzZXROdW0oIHVpbnQgbiwgaW50IGJhc2UgKQp7IHJldHVybiBzZXROdW0oKHVs
b25nKW4sIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6c2V0TnVtKCBmbG9hdCBu
LCBjaGFyIGYsIGludCBwcmVjICkKeyByZXR1cm4gc2V0TnVtKChkb3VibGUpbixmLHByZWMpOyB9
CgppbmxpbmUgUVN0cmluZyBRU3RyaW5nOjphcmcoaW50IGEsIGludCBmaWVsZHdpZHRoLCBpbnQg
YmFzZSkgY29uc3QKeyByZXR1cm4gYXJnKChsb25nKWEsIGZpZWxkd2lkdGgsIGJhc2UpOyB9Cgpp
bmxpbmUgUVN0cmluZyBRU3RyaW5nOjphcmcodWludCBhLCBpbnQgZmllbGR3aWR0aCwgaW50IGJh
c2UpIGNvbnN0CnsgcmV0dXJuIGFyZygodWxvbmcpYSwgZmllbGR3aWR0aCwgYmFzZSk7IH0KCmlu
bGluZSBRU3RyaW5nIFFTdHJpbmc6OmFyZyhzaG9ydCBhLCBpbnQgZmllbGR3aWR0aCwgaW50IGJh
c2UpIGNvbnN0CnsgcmV0dXJuIGFyZygobG9uZylhLCBmaWVsZHdpZHRoLCBiYXNlKTsgfQoKaW5s
aW5lIFFTdHJpbmcgUVN0cmluZzo6YXJnKHVzaG9ydCBhLCBpbnQgZmllbGR3aWR0aCwgaW50IGJh
c2UpIGNvbnN0CnsgcmV0dXJuIGFyZygodWxvbmcpYSwgZmllbGR3aWR0aCwgYmFzZSk7IH0KCmlu
bGluZSBpbnQgUVN0cmluZzo6ZmluZCggY2hhciBjLCBpbnQgaW5kZXgsIGJvb2wgY3MgKSBjb25z
dAp7IHJldHVybiBmaW5kKFFDaGFyKGMpLCBpbmRleCwgY3MpOyB9CgppbmxpbmUgaW50IFFTdHJp
bmc6OmZpbmRSZXYoIGNoYXIgYywgaW50IGluZGV4LCBib29sIGNzKSBjb25zdAp7IHJldHVybiBm
aW5kUmV2KCBRQ2hhcihjKSwgaW5kZXgsIGNzICk7IH0KCgoKaW5saW5lIGludCBRU3RyaW5nOjpm
aW5kKCBjb25zdCBjaGFyKiBzdHIsIGludCBpbmRleCApIGNvbnN0CnsgcmV0dXJuIGZpbmQoUVN0
cmluZzo6ZnJvbUxhdGluMShzdHIpLCBpbmRleCk7IH0KCmlubGluZSBpbnQgUVN0cmluZzo6Zmlu
ZFJldiggY29uc3QgY2hhciogc3RyLCBpbnQgaW5kZXggKSBjb25zdAp7IHJldHVybiBmaW5kUmV2
KFFTdHJpbmc6OmZyb21MYXRpbjEoc3RyKSwgaW5kZXgpOyB9CgoKCiAKCgoKICBib29sIG9wZXJh
dG9yIT0oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwogIGJvb2wgb3Bl
cmF0b3I8KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKICBib29sIG9w
ZXJhdG9yPD0oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwogIGJvb2wg
b3BlcmF0b3I9PSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiAgYm9v
bCBvcGVyYXRvcj4oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwogIGJv
b2wgb3BlcmF0b3I+PSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7Cgog
IGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICk7CiAg
Ym9vbCBvcGVyYXRvcjwoIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwogIGJv
b2wgb3BlcmF0b3I8PSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICk7CiAgYm9v
bCBvcGVyYXRvcj09KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKTsKICBib29s
IG9wZXJhdG9yPiggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICk7CiAgYm9vbCBv
cGVyYXRvcj49KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKTsKICBib29sIG9w
ZXJhdG9yIT0oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwogIGJvb2wgb3Bl
cmF0b3I8KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKICBib29sIG9wZXJh
dG9yPD0oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwogIGJvb2wgb3BlcmF0
b3I9PSggY29uc3QgY2hhciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiAKICBib29sIG9wZXJh
dG9yPj0oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwoKCiAgaW5saW5lIFFT
dHJpbmcgb3BlcmF0b3IrKCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIgKQp7
CiAgICBRU3RyaW5nIHRtcCggczEgKTsKICAgIHRtcCArPSBzMjsKICAgIHJldHVybiB0bXA7Cn0K
CgogIGlubGluZSBRU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IGNo
YXIgKnMyICkKewogICAgUVN0cmluZyB0bXAoIHMxICk7CiAgICB0bXAgKz0gUVN0cmluZzo6ZnJv
bUxhdGluMShzMik7CiAgICByZXR1cm4gdG1wOwp9CgogIGlubGluZSBRU3RyaW5nIG9wZXJhdG9y
KyggY29uc3QgY2hhciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICkKewogICAgUVN0cmluZyB0bXAg
PSBRU3RyaW5nOjpmcm9tTGF0aW4xKCBzMSApOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRt
cDsKfQoKCiAgaW5saW5lIFFTdHJpbmcgb3BlcmF0b3IrKCBjb25zdCBRU3RyaW5nICZzMSwgUUNo
YXIgYzIgKQp7CiAgICBRU3RyaW5nIHRtcCggczEgKTsKICAgIHRtcCArPSBjMjsKICAgIHJldHVy
biB0bXA7Cn0KCiAgaW5saW5lIFFTdHJpbmcgb3BlcmF0b3IrKCBjb25zdCBRU3RyaW5nICZzMSwg
Y2hhciBjMiApCnsKICAgIFFTdHJpbmcgdG1wKCBzMSApOwogICAgdG1wICs9IGMyOwogICAgcmV0
dXJuIHRtcDsKfQoKICBpbmxpbmUgUVN0cmluZyBvcGVyYXRvcisoIFFDaGFyIGMxLCBjb25zdCBR
U3RyaW5nICZzMiApCnsKICAgIFFTdHJpbmcgdG1wOwogICAgdG1wICs9IGMxOwogICAgdG1wICs9
IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKICBpbmxpbmUgUVN0cmluZyBvcGVyYXRvcisoIGNoYXIg
YzEsIGNvbnN0IFFTdHJpbmcgJnMyICkKewogICAgUVN0cmluZyB0bXA7CiAgICB0bXAgKz0gYzE7
CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4gdG1wOwp9CgoKCgoKCgoKCgojIDQyICIvYW1kL3Np
Z21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3FkYXRl
dGltZS5oIiAyCgoKCgogCgoKCmNsYXNzICAgUURhdGUKewpwdWJsaWM6CiAgICBRRGF0ZSgpICB7
IGpkPTA7IH0JCQkJIAogICAgUURhdGUoIGludCB5LCBpbnQgbSwgaW50IGQgKTsJCSAKCiAgICBi
b29sICAgaXNOdWxsKCkJIGNvbnN0IHsgcmV0dXJuIGpkID09IDA7IH0KICAgIGJvb2wgICBpc1Zh
bGlkKCkJIGNvbnN0OwkJCSAKCiAgICBpbnQJICAgeWVhcigpCSBjb25zdDsJCQkgCiAgICBpbnQJ
ICAgbW9udGgoKQkgY29uc3Q7CQkJIAogICAgaW50CSAgIGRheSgpCSBjb25zdDsJCQkgCiAgICBp
bnQJICAgZGF5T2ZXZWVrKCkJIGNvbnN0OwkJCSAKICAgIGludAkgICBkYXlPZlllYXIoKQkgY29u
c3Q7CQkJIAogICAgaW50CSAgIGRheXNJbk1vbnRoKCkgY29uc3Q7CQkJIAogICAgaW50CSAgIGRh
eXNJblllYXIoKQkgY29uc3Q7CQkJIAoKICAgIHZpcnR1YWwgUVN0cmluZyBtb250aE5hbWUoIGlu
dCBtb250aCApIGNvbnN0OwogICAgdmlydHVhbCBRU3RyaW5nIGRheU5hbWUoIGludCB3ZWVrZGF5
ICkgY29uc3Q7CgogICAgUVN0cmluZyB0b1N0cmluZygpCSBjb25zdDsKCiAgICBib29sICAgc2V0
WU1EKCBpbnQgeSwgaW50IG0sIGludCBkICk7CgogICAgUURhdGUgIGFkZERheXMoIGludCBkYXlz
ICkJCWNvbnN0OwogICAgaW50CSAgIGRheXNUbyggY29uc3QgUURhdGUgJiApCWNvbnN0OwoKICAg
IGJvb2wgICBvcGVyYXRvcj09KCBjb25zdCBRRGF0ZSAmZCApIGNvbnN0IHsgcmV0dXJuIGpkID09
IGQuamQ7IH0KICAgIGJvb2wgICBvcGVyYXRvciE9KCBjb25zdCBRRGF0ZSAmZCApIGNvbnN0IHsg
cmV0dXJuIGpkICE9IGQuamQ7IH0KICAgIGJvb2wgICBvcGVyYXRvcjwoIGNvbnN0IFFEYXRlICZk
ICkJY29uc3QgeyByZXR1cm4gamQgPCBkLmpkOyB9CiAgICBib29sICAgb3BlcmF0b3I8PSggY29u
c3QgUURhdGUgJmQgKSBjb25zdCB7IHJldHVybiBqZCA8PSBkLmpkOyB9CiAgICBib29sICAgb3Bl
cmF0b3I+KCBjb25zdCBRRGF0ZSAmZCApCWNvbnN0IHsgcmV0dXJuIGpkID4gZC5qZDsgfQogICAg
Ym9vbCAgIG9wZXJhdG9yPj0oIGNvbnN0IFFEYXRlICZkICkgY29uc3QgeyByZXR1cm4gamQgPj0g
ZC5qZDsgfQoKICAgIHN0YXRpYyBRRGF0ZSBjdXJyZW50RGF0ZSgpOwogICAgc3RhdGljIGJvb2wJ
IGlzVmFsaWQoIGludCB5LCBpbnQgbSwgaW50IGQgKTsKICAgIHN0YXRpYyBib29sCSBsZWFwWWVh
ciggaW50IHllYXIgKTsKCnByb3RlY3RlZDoKICAgIHN0YXRpYyB1aW50CSBncmVnMmp1bCggaW50
IHksIGludCBtLCBpbnQgZCApOwogICAgc3RhdGljIHZvaWQJIGp1bDJncmVnKCB1aW50IGpkLCBp
bnQgJnksIGludCAmbSwgaW50ICZkICk7CnByaXZhdGU6CiAgICBzdGF0aWMgY29uc3QgY2hhciAq
IGNvbnN0IG1vbnRoTmFtZXNbXTsKICAgIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgd2Vla2Rh
eU5hbWVzW107CiAgICB1aW50CSBqZDsKICAgIGZyaWVuZCBjbGFzcyBRRGF0ZVRpbWU7CgogICAg
ZnJpZW5kICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFE
YXRlICYgKTsKICAgIGZyaWVuZCAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVh
bSAmLCBRRGF0ZSAmICk7Cgp9OwoKCiAKCgoKY2xhc3MgICBRVGltZQp7CnB1YmxpYzoKICAgIFFU
aW1lKCkgeyBkcz0wOyB9CQkJCSAKICAgIFFUaW1lKCBpbnQgaCwgaW50IG0sIGludCBzPTAsIGlu
dCBtcz0wICk7CSAKCiAgICBib29sICAgaXNOdWxsKCkJIGNvbnN0IHsgcmV0dXJuIGRzID09IDA7
IH0KICAgIGJvb2wgICBpc1ZhbGlkKCkJIGNvbnN0OwkJCSAKCiAgICBpbnQJICAgaG91cigpCSBj
b25zdDsJCQkgCiAgICBpbnQJICAgbWludXRlKCkJIGNvbnN0OwkJCSAKICAgIGludAkgICBzZWNv
bmQoKQkgY29uc3Q7CQkJIAogICAgaW50CSAgIG1zZWMoKQkgY29uc3Q7CQkJIAoKICAgIFFTdHJp
bmcgdG9TdHJpbmcoKQkgY29uc3Q7CgogICAgYm9vbCAgIHNldEhNUyggaW50IGgsIGludCBtLCBp
bnQgcywgaW50IG1zPTAgKTsKCiAgICBRVGltZSAgYWRkU2VjcyggaW50IHNlY3MgKQkJY29uc3Q7
CiAgICBpbnQJICAgc2Vjc1RvKCBjb25zdCBRVGltZSAmICkJY29uc3Q7CiAgICBRVGltZSAgYWRk
TVNlY3MoIGludCBtcyApCQljb25zdDsKICAgIGludAkgICBtc2Vjc1RvKCBjb25zdCBRVGltZSAm
ICkJY29uc3Q7CgogICAgYm9vbCAgIG9wZXJhdG9yPT0oIGNvbnN0IFFUaW1lICZkICkgY29uc3Qg
eyByZXR1cm4gZHMgPT0gZC5kczsgfQogICAgYm9vbCAgIG9wZXJhdG9yIT0oIGNvbnN0IFFUaW1l
ICZkICkgY29uc3QgeyByZXR1cm4gZHMgIT0gZC5kczsgfQogICAgYm9vbCAgIG9wZXJhdG9yPCgg
Y29uc3QgUVRpbWUgJmQgKQljb25zdCB7IHJldHVybiBkcyA8IGQuZHM7IH0KICAgIGJvb2wgICBv
cGVyYXRvcjw9KCBjb25zdCBRVGltZSAmZCApIGNvbnN0IHsgcmV0dXJuIGRzIDw9IGQuZHM7IH0K
ICAgIGJvb2wgICBvcGVyYXRvcj4oIGNvbnN0IFFUaW1lICZkICkJY29uc3QgeyByZXR1cm4gZHMg
PiBkLmRzOyB9CiAgICBib29sICAgb3BlcmF0b3I+PSggY29uc3QgUVRpbWUgJmQgKSBjb25zdCB7
IHJldHVybiBkcyA+PSBkLmRzOyB9CgogICAgc3RhdGljIFFUaW1lIGN1cnJlbnRUaW1lKCk7CiAg
ICBzdGF0aWMgYm9vbAkgaXNWYWxpZCggaW50IGgsIGludCBtLCBpbnQgcywgaW50IG1zPTAgKTsK
CiAgICB2b2lkICAgc3RhcnQoKTsKICAgIGludAkgICByZXN0YXJ0KCk7CiAgICBpbnQJICAgZWxh
cHNlZCgpOwoKcHJpdmF0ZToKICAgIHN0YXRpYyBib29sIGN1cnJlbnRUaW1lKCBRVGltZSAqICk7
CgogICAgdWludCAgIGRzOwogICAgZnJpZW5kIGNsYXNzIFFEYXRlVGltZTsKCiAgICBmcmllbmQg
ICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVRpbWUgJiAp
OwogICAgZnJpZW5kICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFU
aW1lICYgKTsKCn07CgoKIAoKCgpjbGFzcyAgIFFEYXRlVGltZQp7CnB1YmxpYzoKICAgIFFEYXRl
VGltZSgpIHt9CQkJCSAKICAgIFFEYXRlVGltZSggY29uc3QgUURhdGUgJiApOwogICAgUURhdGVU
aW1lKCBjb25zdCBRRGF0ZSAmLCBjb25zdCBRVGltZSAmICk7CgogICAgYm9vbCAgIGlzTnVsbCgp
CWNvbnN0CQl7IHJldHVybiBkLmlzTnVsbCgpICYmIHQuaXNOdWxsKCk7IH0KICAgIGJvb2wgICBp
c1ZhbGlkKCkJY29uc3QJCXsgcmV0dXJuIGQuaXNWYWxpZCgpICYmIHQuaXNWYWxpZCgpOyB9Cgog
ICAgUURhdGUgIGRhdGUoKQljb25zdAkJeyByZXR1cm4gZDsgfQogICAgUVRpbWUgIHRpbWUoKQlj
b25zdAkJeyByZXR1cm4gdDsgfQogICAgdm9pZCAgIHNldERhdGUoIGNvbnN0IFFEYXRlICZkYXRl
ICkgeyBkPWRhdGU7IH0KICAgIHZvaWQgICBzZXRUaW1lKCBjb25zdCBRVGltZSAmdGltZSApIHsg
dD10aW1lOyB9CiAgICB2b2lkICAgc2V0VGltZV90KCB1aW50IHNlY3NTaW5jZTFKYW4xOTcwVVRD
ICk7CgogICAgUVN0cmluZyB0b1N0cmluZygpCWNvbnN0OwoKICAgIFFEYXRlVGltZSBhZGREYXlz
KCBpbnQgZGF5cyApCWNvbnN0OwogICAgUURhdGVUaW1lIGFkZFNlY3MoIGludCBzZWNzICkJY29u
c3Q7CiAgICBpbnQJICAgZGF5c1RvKCBjb25zdCBRRGF0ZVRpbWUgJiApCWNvbnN0OwogICAgaW50
CSAgIHNlY3NUbyggY29uc3QgUURhdGVUaW1lICYgKQljb25zdDsKCiAgICBib29sICAgb3BlcmF0
b3I9PSggY29uc3QgUURhdGVUaW1lICZkdCApIGNvbnN0OwogICAgYm9vbCAgIG9wZXJhdG9yIT0o
IGNvbnN0IFFEYXRlVGltZSAmZHQgKSBjb25zdDsKICAgIGJvb2wgICBvcGVyYXRvcjwoIGNvbnN0
IFFEYXRlVGltZSAmZHQgKSAgY29uc3Q7CiAgICBib29sICAgb3BlcmF0b3I8PSggY29uc3QgUURh
dGVUaW1lICZkdCApIGNvbnN0OwogICAgYm9vbCAgIG9wZXJhdG9yPiggY29uc3QgUURhdGVUaW1l
ICZkdCApICBjb25zdDsKICAgIGJvb2wgICBvcGVyYXRvcj49KCBjb25zdCBRRGF0ZVRpbWUgJmR0
ICkgY29uc3Q7CgogICAgc3RhdGljIFFEYXRlVGltZSBjdXJyZW50RGF0ZVRpbWUoKTsKCnByaXZh
dGU6CiAgICBRRGF0ZSAgZDsKICAgIFFUaW1lICB0OwoKICAgIGZyaWVuZCAgIFFEYXRhU3RyZWFt
ICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRRGF0ZVRpbWUgJik7CiAgICBmcmll
bmQgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUURhdGVUaW1lICYg
KTsKCn07CgoKIAoKCgoKICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwg
Y29uc3QgUURhdGUgJiApOwogIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAm
LCBRRGF0ZSAmICk7CiAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNv
bnN0IFFUaW1lICYgKTsKICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwg
UVRpbWUgJiApOwogIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25z
dCBRRGF0ZVRpbWUgJiApOwogIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAm
LCBRRGF0ZVRpbWUgJiApOwoKCgojIDQyICJrZXJuZWwvcXVybGluZm8uaCIgMgoKCgoKY2xhc3Mg
UVVybE9wZXJhdG9yOwpzdHJ1Y3QgUVVybEluZm9Qcml2YXRlOwpjbGFzcyBRVXJsOwoKY2xhc3Mg
ICBRVXJsSW5mbwp7CnB1YmxpYzoKICAgIFFVcmxJbmZvKCk7CiAgICBRVXJsSW5mbyggY29uc3Qg
UVVybE9wZXJhdG9yICZwYXRoLCBjb25zdCBRU3RyaW5nICZmaWxlICk7CiAgICBRVXJsSW5mbygg
Y29uc3QgUVVybEluZm8gJnVpICk7CiAgICBRVXJsSW5mbyggY29uc3QgUVN0cmluZyAmbmFtZSwg
aW50IHBlcm1pc3Npb25zLCBjb25zdCBRU3RyaW5nICZvd25lciwKCSAgICAgIGNvbnN0IFFTdHJp
bmcgJmdyb3VwLCB1aW50IHNpemUsIGNvbnN0IFFEYXRlVGltZSAmbGFzdE1vZGlmaWVkLAoJICAg
ICAgY29uc3QgUURhdGVUaW1lICZsYXN0UmVhZCwgYm9vbCBpc0RpciwgYm9vbCBpc0ZpbGUsIGJv
b2wgaXNTeW1MaW5rLAoJICAgICAgYm9vbCBpc1dyaXRhYmxlLCBib29sIGlzUmVhZGFibGUsIGJv
b2wgaXNFeGVjdXRhYmxlICk7CiAgICBRVXJsSW5mbyggY29uc3QgUVVybCAmdXJsLCBpbnQgcGVy
bWlzc2lvbnMsIGNvbnN0IFFTdHJpbmcgJm93bmVyLAoJICAgICAgY29uc3QgUVN0cmluZyAmZ3Jv
dXAsIHVpbnQgc2l6ZSwgY29uc3QgUURhdGVUaW1lICZsYXN0TW9kaWZpZWQsCgkgICAgICBjb25z
dCBRRGF0ZVRpbWUgJmxhc3RSZWFkLCBib29sIGlzRGlyLCBib29sIGlzRmlsZSwgYm9vbCBpc1N5
bUxpbmssCgkgICAgICBib29sIGlzV3JpdGFibGUsIGJvb2wgaXNSZWFkYWJsZSwgYm9vbCBpc0V4
ZWN1dGFibGUgKTsKICAgIFFVcmxJbmZvICZvcGVyYXRvcj0oIGNvbnN0IFFVcmxJbmZvICZ1aSAp
OwogICAgdmlydHVhbCB+UVVybEluZm8oKTsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZSggY29u
c3QgUVN0cmluZyAmbmFtZSApOwogICAgdmlydHVhbCB2b2lkIHNldERpciggYm9vbCBiICk7CiAg
ICB2aXJ0dWFsIHZvaWQgc2V0RmlsZSggYm9vbCBiICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0U3lt
TGluayggYm9vbCBiICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0T3duZXIoIGNvbnN0IFFTdHJpbmcg
JnMgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRHcm91cCggY29uc3QgUVN0cmluZyAmcyApOwogICAg
dmlydHVhbCB2b2lkIHNldFNpemUoIHVpbnQgcyApOwogICAgdmlydHVhbCB2b2lkIHNldFdyaXRh
YmxlKCBib29sIGIgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRSZWFkYWJsZSggYm9vbCBiICk7CiAg
ICB2aXJ0dWFsIHZvaWQgc2V0UGVybWlzc2lvbnMoIGludCBwICk7CiAgICB2aXJ0dWFsIHZvaWQg
c2V0TGFzdE1vZGlmaWVkKCBjb25zdCBRRGF0ZVRpbWUgJmR0ICk7CgogICAgUVN0cmluZyBuYW1l
KCkgY29uc3Q7CiAgICBpbnQgcGVybWlzc2lvbnMoKSBjb25zdDsKICAgIFFTdHJpbmcgb3duZXIo
KSBjb25zdDsKICAgIFFTdHJpbmcgZ3JvdXAoKSBjb25zdDsKICAgIHVpbnQgc2l6ZSgpIGNvbnN0
OwogICAgUURhdGVUaW1lIGxhc3RNb2RpZmllZCgpIGNvbnN0OwogICAgUURhdGVUaW1lIGxhc3RS
ZWFkKCkgY29uc3Q7CiAgICBib29sIGlzRGlyKCkgY29uc3Q7CiAgICBib29sIGlzRmlsZSgpIGNv
bnN0OwogICAgYm9vbCBpc1N5bUxpbmsoKSBjb25zdDsKICAgIGJvb2wgaXNXcml0YWJsZSgpIGNv
bnN0OwogICAgYm9vbCBpc1JlYWRhYmxlKCkgY29uc3Q7CiAgICBib29sIGlzRXhlY3V0YWJsZSgp
IGNvbnN0OwoKICAgIHN0YXRpYyBib29sIGdyZWF0ZXJUaGFuKCBjb25zdCBRVXJsSW5mbyAmaTEs
IGNvbnN0IFFVcmxJbmZvICZpMiwKCQkJICAgICBpbnQgc29ydEJ5ICk7CiAgICBzdGF0aWMgYm9v
bCBsZXNzVGhhbiggY29uc3QgUVVybEluZm8gJmkxLCBjb25zdCBRVXJsSW5mbyAmaTIsCgkJCSAg
aW50IHNvcnRCeSApOwogICAgc3RhdGljIGJvb2wgZXF1YWwoIGNvbnN0IFFVcmxJbmZvICZpMSwg
Y29uc3QgUVVybEluZm8gJmkyLAoJCSAgICAgICBpbnQgc29ydEJ5ICk7CgogICAgYm9vbCBvcGVy
YXRvcj09KCBjb25zdCBRVXJsSW5mbyAmaSApIGNvbnN0Owpwcml2YXRlOgogICAgUVVybEluZm9Q
cml2YXRlICpkOwoKfTsKCgojIDQyICJrZXJuZWwvcW5ldHdvcmtwcm90b2NvbC5oIiAyCgoKIyAx
ICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNs
dWRlL3FkaWN0LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IyAxICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9p
bmNsdWRlL3FnZGljdC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiMgMSAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQtMi4y
LjMvaW5jbHVkZS9xY29sbGVjdGlvbi5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgpjbGFzcyBRR1ZlY3RvcjsKY2xhc3MgUUdMaXN0OwpjbGFzcyBRR0Rp
Y3Q7CgoKY2xhc3MgICBRQ29sbGVjdGlvbgkJCSAKewpwdWJsaWM6CiAgICBib29sIGF1dG9EZWxl
dGUoKQljb25zdAkgICAgICAgeyByZXR1cm4gZGVsX2l0ZW07IH0KICAgIHZvaWQgc2V0QXV0b0Rl
bGV0ZSggYm9vbCBlbmFibGUgKSAgeyBkZWxfaXRlbSA9IGVuYWJsZTsgfQoKICAgIHZpcnR1YWwg
dWludCAgY291bnQoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgIGNsZWFyKCkgPSAwOwkJ
CSAKCiAgICB0eXBlZGVmIHZvaWQgKkl0ZW07CQkJCSAKCnByb3RlY3RlZDoKICAgIFFDb2xsZWN0
aW9uKCkgeyBkZWxfaXRlbSA9IDAgOyB9CQkgCiAgICBRQ29sbGVjdGlvbihjb25zdCBRQ29sbGVj
dGlvbiAmKSB7IGRlbF9pdGVtID0gMCA7IH0KICAgIHZpcnR1YWwgflFDb2xsZWN0aW9uKCkge30K
CiAgICBib29sIGRlbF9pdGVtOwkJCQkgCgogICAgdmlydHVhbCBJdGVtICAgICBuZXdJdGVtKCBJ
dGVtICk7CQkgCiAgICB2aXJ0dWFsIHZvaWQgICAgIGRlbGV0ZUl0ZW0oIEl0ZW0gKTsJIAp9OwoK
CgojIDQyICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIu
My9pbmNsdWRlL3FnZGljdC5oIiAyCgoKCgpjbGFzcyBRR0RpY3RJdGVyYXRvcjsKY2xhc3MgUUdE
SXRMaXN0OwoKCmNsYXNzIFFCYXNlQnVja2V0CQkJCSAKewpwdWJsaWM6CiAgICBRQ29sbGVjdGlv
bjo6SXRlbQkgZ2V0RGF0YSgpCQkJeyByZXR1cm4gZGF0YTsgfQogICAgUUNvbGxlY3Rpb246Okl0
ZW0JIHNldERhdGEoIFFDb2xsZWN0aW9uOjpJdGVtIGQgKSB7IHJldHVybiBkYXRhID0gZDsgfQog
ICAgUUJhc2VCdWNrZXQJCSpnZXROZXh0KCkJCQl7IHJldHVybiBuZXh0OyB9CiAgICB2b2lkCQkg
c2V0TmV4dCggUUJhc2VCdWNrZXQgKm4pCXsgbmV4dCA9IG47IH0KcHJvdGVjdGVkOgogICAgUUJh
c2VCdWNrZXQoIFFDb2xsZWN0aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkgOiBkYXRhKGQp
LCBuZXh0KG4pIHt9CiAgICBRQ29sbGVjdGlvbjo6SXRlbQkgZGF0YTsKICAgIFFCYXNlQnVja2V0
CQkqbmV4dDsKfTsKCmNsYXNzIFFTdHJpbmdCdWNrZXQgOiBwdWJsaWMgUUJhc2VCdWNrZXQKewpw
dWJsaWM6CiAgICBRU3RyaW5nQnVja2V0KCBjb25zdCBRU3RyaW5nICZrLCBRQ29sbGVjdGlvbjo6
SXRlbSBkLCBRQmFzZUJ1Y2tldCAqbiApCgk6IFFCYXNlQnVja2V0KGQsbiksIGtleShrKQkJe30K
ICAgIGNvbnN0IFFTdHJpbmcgICZnZXRLZXkoKSBjb25zdAkJeyByZXR1cm4ga2V5OyB9CnByaXZh
dGU6CiAgICBRU3RyaW5nCSAgICBrZXk7Cn07CgpjbGFzcyBRQXNjaWlCdWNrZXQgOiBwdWJsaWMg
UUJhc2VCdWNrZXQKewpwdWJsaWM6CiAgICBRQXNjaWlCdWNrZXQoIGNvbnN0IGNoYXIgKmssIFFD
b2xsZWN0aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKCTogUUJhc2VCdWNrZXQoZCxuKSwg
a2V5KGspIHt9CiAgICBjb25zdCBjaGFyICpnZXRLZXkoKSBjb25zdCB7IHJldHVybiBrZXk7IH0K
cHJpdmF0ZToKICAgIGNvbnN0IGNoYXIgKmtleTsKfTsKCmNsYXNzIFFJbnRCdWNrZXQgOiBwdWJs
aWMgUUJhc2VCdWNrZXQKewpwdWJsaWM6CiAgICBRSW50QnVja2V0KCBsb25nIGssIFFDb2xsZWN0
aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKCTogUUJhc2VCdWNrZXQoZCxuKSwga2V5KGsp
IHt9CiAgICBsb25nICBnZXRLZXkoKSBjb25zdCB7IHJldHVybiBrZXk7IH0KcHJpdmF0ZToKICAg
IGxvbmcgIGtleTsKfTsKCmNsYXNzIFFQdHJCdWNrZXQgOiBwdWJsaWMgUUJhc2VCdWNrZXQKewpw
dWJsaWM6CiAgICBRUHRyQnVja2V0KCB2b2lkICprLCBRQ29sbGVjdGlvbjo6SXRlbSBkLCBRQmFz
ZUJ1Y2tldCAqbiApCgk6IFFCYXNlQnVja2V0KGQsbiksIGtleShrKSB7fQogICAgdm9pZCAqZ2V0
S2V5KCkgY29uc3QgeyByZXR1cm4ga2V5OyB9CnByaXZhdGU6CiAgICB2b2lkICprZXk7Cn07CgoK
Y2xhc3MgICBRR0RpY3QgOiBwdWJsaWMgUUNvbGxlY3Rpb24JIAp7CnB1YmxpYzoKICAgIHVpbnQJ
Y291bnQoKSBjb25zdAl7IHJldHVybiBudW1JdGVtczsgfQogICAgdWludAlzaXplKCkJY29uc3QJ
eyByZXR1cm4gdmxlbjsgfQogICAgUUNvbGxlY3Rpb246Okl0ZW0gbG9va19zdHJpbmcoIGNvbnN0
IFFTdHJpbmcmIGtleSwgUUNvbGxlY3Rpb246Okl0ZW0sCgkJCQkgICBpbnQgKTsKICAgIFFDb2xs
ZWN0aW9uOjpJdGVtIGxvb2tfYXNjaWkoIGNvbnN0IGNoYXIgKmtleSwgUUNvbGxlY3Rpb246Okl0
ZW0sIGludCApOwogICAgUUNvbGxlY3Rpb246Okl0ZW0gbG9va19pbnQoIGxvbmcga2V5LCBRQ29s
bGVjdGlvbjo6SXRlbSwgaW50ICk7CiAgICBRQ29sbGVjdGlvbjo6SXRlbSBsb29rX3B0ciggdm9p
ZCAqa2V5LCBRQ29sbGVjdGlvbjo6SXRlbSwgaW50ICk7CgogICAgUURhdGFTdHJlYW0gJnJlYWQo
IFFEYXRhU3RyZWFtICYgKTsKICAgIFFEYXRhU3RyZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJiAp
IGNvbnN0OwoKcHJvdGVjdGVkOgogICAgZW51bSBLZXlUeXBlIHsgU3RyaW5nS2V5LCBBc2NpaUtl
eSwgSW50S2V5LCBQdHJLZXkgfTsKCiAgICBRR0RpY3QoIHVpbnQgbGVuLCBLZXlUeXBlIGt0LCBi
b29sIGNzLCBib29sIGNrICk7CiAgICBRR0RpY3QoIGNvbnN0IFFHRGljdCAmICk7CiAgIH5RR0Rp
Y3QoKTsKCiAgICBRR0RpY3QgICAgICZvcGVyYXRvcj0oIGNvbnN0IFFHRGljdCAmICk7CgogICAg
Ym9vbAlyZW1vdmVfc3RyaW5nKCBjb25zdCBRU3RyaW5nICZrZXksIFFDb2xsZWN0aW9uOjpJdGVt
IGl0ZW09MCApOwogICAgYm9vbAlyZW1vdmVfYXNjaWkoIGNvbnN0IGNoYXIgKmtleSwgUUNvbGxl
Y3Rpb246Okl0ZW0gaXRlbT0wICk7CiAgICBib29sCXJlbW92ZV9pbnQoIGxvbmcga2V5LCBRQ29s
bGVjdGlvbjo6SXRlbSBpdGVtPTAgKTsKICAgIGJvb2wJcmVtb3ZlX3B0ciggdm9pZCAqa2V5LCBR
Q29sbGVjdGlvbjo6SXRlbSBpdGVtPTAgKTsKICAgIFFDb2xsZWN0aW9uOjpJdGVtIHRha2Vfc3Ry
aW5nKCBjb25zdCBRU3RyaW5nICZrZXkgKTsKICAgIFFDb2xsZWN0aW9uOjpJdGVtIHRha2VfYXNj
aWkoIGNvbnN0IGNoYXIgKmtleSApOwogICAgUUNvbGxlY3Rpb246Okl0ZW0gdGFrZV9pbnQoIGxv
bmcga2V5ICk7CiAgICBRQ29sbGVjdGlvbjo6SXRlbSB0YWtlX3B0ciggdm9pZCAqa2V5ICk7Cgog
ICAgdm9pZAljbGVhcigpOwogICAgdm9pZAlyZXNpemUoIHVpbnQgKTsKCiAgICBpbnQJCWhhc2hL
ZXlTdHJpbmcoIGNvbnN0IFFTdHJpbmcgJiApOwogICAgaW50CQloYXNoS2V5QXNjaWkoIGNvbnN0
IGNoYXIgKiApOwoKICAgIHZvaWQJc3RhdGlzdGljcygpIGNvbnN0OwoKCiAgICB2aXJ0dWFsIFFE
YXRhU3RyZWFtICZyZWFkKCBRRGF0YVN0cmVhbSAmLCBRQ29sbGVjdGlvbjo6SXRlbSAmICk7CiAg
ICB2aXJ0dWFsIFFEYXRhU3RyZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJiwgUUNvbGxlY3Rpb246
Okl0ZW0gKSBjb25zdDsKCnByaXZhdGU6CiAgICBRQmFzZUJ1Y2tldCAqKnZlYzsKICAgIHVpbnQJ
dmxlbjsKICAgIHVpbnQJbnVtSXRlbXM7CiAgICB1aW50CWtleXR5cGUJOiAyOwogICAgdWludAlj
YXNlcwk6IDE7CiAgICB1aW50CWNvcHlrCTogMTsKICAgIFFHREl0TGlzdCAgKml0ZXJhdG9yczsK
ICAgIHZvaWQJICAgdW5saW5rX2NvbW1vbiggaW50LCBRQmFzZUJ1Y2tldCAqLCBRQmFzZUJ1Y2tl
dCAqICk7CiAgICBRU3RyaW5nQnVja2V0ICp1bmxpbmtfc3RyaW5nKCBjb25zdCBRU3RyaW5nICYs
CgkJCQkgIFFDb2xsZWN0aW9uOjpJdGVtIGl0ZW0gPSAwICk7CiAgICBRQXNjaWlCdWNrZXQgICp1
bmxpbmtfYXNjaWkoIGNvbnN0IGNoYXIgKiwgUUNvbGxlY3Rpb246Okl0ZW0gaXRlbSA9IDAgKTsK
ICAgIFFJbnRCdWNrZXQgICAgKnVubGlua19pbnQoIGxvbmcsIFFDb2xsZWN0aW9uOjpJdGVtIGl0
ZW0gPSAwICk7CiAgICBRUHRyQnVja2V0ICAgICp1bmxpbmtfcHRyKCB2b2lkICosIFFDb2xsZWN0
aW9uOjpJdGVtIGl0ZW0gPSAwICk7CiAgICB2b2lkCWluaXQoIHVpbnQsIEtleVR5cGUsIGJvb2ws
IGJvb2wgKTsKICAgIGZyaWVuZCBjbGFzcyBRR0RpY3RJdGVyYXRvcjsKfTsKCgpjbGFzcyAgIFFH
RGljdEl0ZXJhdG9yCQkJIAp7CmZyaWVuZCBjbGFzcyBRR0RpY3Q7CnB1YmxpYzoKICAgIFFHRGlj
dEl0ZXJhdG9yKCBjb25zdCBRR0RpY3QgJiApOwogICAgUUdEaWN0SXRlcmF0b3IoIGNvbnN0IFFH
RGljdEl0ZXJhdG9yICYgKTsKICAgIFFHRGljdEl0ZXJhdG9yICZvcGVyYXRvcj0oIGNvbnN0IFFH
RGljdEl0ZXJhdG9yICYgKTsKICAgflFHRGljdEl0ZXJhdG9yKCk7CgogICAgUUNvbGxlY3Rpb246
Okl0ZW0gdG9GaXJzdCgpOwoKICAgIFFDb2xsZWN0aW9uOjpJdGVtIGdldCgpCSAgICAgY29uc3Q7
CiAgICBRU3RyaW5nCSAgICAgIGdldEtleVN0cmluZygpIGNvbnN0OwogICAgY29uc3QgY2hhcgkg
ICAgICpnZXRLZXlBc2NpaSgpICBjb25zdDsKICAgIGxvbmcJICAgICAgZ2V0S2V5SW50KCkgICAg
Y29uc3Q7CiAgICB2b2lkCSAgICAgKmdldEtleVB0cigpICAgIGNvbnN0OwoKICAgIFFDb2xsZWN0
aW9uOjpJdGVtIG9wZXJhdG9yKCkoKTsKICAgIFFDb2xsZWN0aW9uOjpJdGVtIG9wZXJhdG9yKyso
KTsKICAgIFFDb2xsZWN0aW9uOjpJdGVtIG9wZXJhdG9yKz0odWludCk7Cgpwcm90ZWN0ZWQ6CiAg
ICBRR0RpY3QJICAgICAqZGljdDsKCnByaXZhdGU6CiAgICBRQmFzZUJ1Y2tldCAgICAgICpjdXJO
b2RlOwogICAgdWludAkgICAgICBjdXJJbmRleDsKfTsKCmlubGluZSBRQ29sbGVjdGlvbjo6SXRl
bSBRR0RpY3RJdGVyYXRvcjo6Z2V0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyBjdXJO
b2RlLT5nZXREYXRhKCkgOiAwOwp9CgppbmxpbmUgUVN0cmluZyBRR0RpY3RJdGVyYXRvcjo6Z2V0
S2V5U3RyaW5nKCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFTdHJpbmdCdWNrZXQq
KWN1ck5vZGUpLT5nZXRLZXkoKSA6IFFTdHJpbmc6Om51bGw7Cn0KCmlubGluZSBjb25zdCBjaGFy
ICpRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5QXNjaWkoKSBjb25zdAp7CiAgICByZXR1cm4gY3VyTm9k
ZSA/ICgoUUFzY2lpQnVja2V0KiljdXJOb2RlKS0+Z2V0S2V5KCkgOiAwOwp9CgppbmxpbmUgbG9u
ZyBRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5SW50KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUg
PyAoKFFJbnRCdWNrZXQqKWN1ck5vZGUpLT5nZXRLZXkoKSA6IDA7Cn0KCmlubGluZSB2b2lkICpR
R0RpY3RJdGVyYXRvcjo6Z2V0S2V5UHRyKCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAo
KFFQdHJCdWNrZXQqKWN1ck5vZGUpLT5nZXRLZXkoKSA6IDA7Cn0KCgoKIyA0MiAiL2FtZC9zaWdt
YS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xZGljdC5o
IiAyCgoKCgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPiBjbGFzcyAgIFFEaWN0IDogcHVibGljIFFHRGlj
dAp7CnB1YmxpYzoKICAgIFFEaWN0KGludCBzaXplPTE3LCBib29sIGNhc2VTZW5zaXRpdmU9IDEg
KQoJOiBRR0RpY3Qoc2l6ZSxTdHJpbmdLZXksY2FzZVNlbnNpdGl2ZSwwICkge30KICAgIFFEaWN0
KCBjb25zdCBRRGljdDx0eXBlPiAmZCApIDogUUdEaWN0KGQpIHt9CiAgIH5RRGljdCgpCQkJCXsg
Y2xlYXIoKTsgfQogICAgUURpY3Q8dHlwZT4gJm9wZXJhdG9yPShjb25zdCBRRGljdDx0eXBlPiAm
ZCkKCQkJeyByZXR1cm4gKFFEaWN0PHR5cGU+JilRR0RpY3Q6Om9wZXJhdG9yPShkKTsgfQogICAg
dWludCAgY291bnQoKSAgIGNvbnN0CQl7IHJldHVybiBRR0RpY3Q6OmNvdW50KCk7IH0KICAgIHVp
bnQgIHNpemUoKSAgICBjb25zdAkJeyByZXR1cm4gUUdEaWN0OjpzaXplKCk7IH0KICAgIGJvb2wg
IGlzRW1wdHkoKSBjb25zdAkJeyByZXR1cm4gUUdEaWN0Ojpjb3VudCgpID09IDA7IH0KCiAgICB2
b2lkICBpbnNlcnQoIGNvbnN0IFFTdHJpbmcgJmssIGNvbnN0IHR5cGUgKmQgKQoJCQkJCXsgUUdE
aWN0Ojpsb29rX3N0cmluZyhrLChJdGVtKWQsMSk7IH0KICAgIHZvaWQgIHJlcGxhY2UoIGNvbnN0
IFFTdHJpbmcgJmssIGNvbnN0IHR5cGUgKmQgKQoJCQkJCXsgUUdEaWN0Ojpsb29rX3N0cmluZyhr
LChJdGVtKWQsMik7IH0KICAgIGJvb2wgIHJlbW92ZSggY29uc3QgUVN0cmluZyAmayApCXsgcmV0
dXJuIFFHRGljdDo6cmVtb3ZlX3N0cmluZyhrKTsgfQogICAgdHlwZSAqdGFrZSggY29uc3QgUVN0
cmluZyAmayApCXsgcmV0dXJuICh0eXBlICopUUdEaWN0Ojp0YWtlX3N0cmluZyhrKTsgfQogICAg
dHlwZSAqZmluZCggY29uc3QgUVN0cmluZyAmayApIGNvbnN0CgkJeyByZXR1cm4gKHR5cGUgKiko
KFFHRGljdCopdGhpcyktPlFHRGljdDo6bG9va19zdHJpbmcoaywwLDApOyB9CiAgICB0eXBlICpv
cGVyYXRvcltdKCBjb25zdCBRU3RyaW5nICZrICkgY29uc3QKCQl7IHJldHVybiAodHlwZSAqKSgo
UUdEaWN0Kil0aGlzKS0+UUdEaWN0Ojpsb29rX3N0cmluZyhrLDAsMCk7IH0KCiAgICB2b2lkICBj
bGVhcigpCQkJeyBRR0RpY3Q6OmNsZWFyKCk7IH0KICAgIHZvaWQgIHJlc2l6ZSggdWludCBuICkJ
CXsgUUdEaWN0OjpyZXNpemUobik7IH0KICAgIHZvaWQgIHN0YXRpc3RpY3MoKSBjb25zdAkJeyBR
R0RpY3Q6OnN0YXRpc3RpY3MoKTsgfQpwcml2YXRlOgogICAgdm9pZCAgZGVsZXRlSXRlbSggSXRl
bSBkICk7Cn07CgoKdGVtcGxhdGU8PiBpbmxpbmUgdm9pZCBRRGljdDx2b2lkPjo6ZGVsZXRlSXRl
bSggSXRlbSApCnsKfQoKCnRlbXBsYXRlPGNsYXNzIHR5cGU+IGlubGluZSB2b2lkIFFEaWN0PHR5
cGU+OjpkZWxldGVJdGVtKCBRQ29sbGVjdGlvbjo6SXRlbSBkICkKewogICAgaWYgKCBkZWxfaXRl
bSApIGRlbGV0ZSAodHlwZSAqKWQ7Cn0KCgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPiBjbGFzcyAgIFFE
aWN0SXRlcmF0b3IgOiBwdWJsaWMgUUdEaWN0SXRlcmF0b3IKewpwdWJsaWM6CiAgICBRRGljdEl0
ZXJhdG9yKGNvbnN0IFFEaWN0PHR5cGU+ICZkKSA6UUdEaWN0SXRlcmF0b3IoKFFHRGljdCAmKWQp
IHt9CiAgIH5RRGljdEl0ZXJhdG9yKCkJICAgICAge30KICAgIHVpbnQgIGNvdW50KCkgICBjb25z
dCAgICAgeyByZXR1cm4gZGljdC0+Y291bnQoKTsgfQogICAgYm9vbCAgaXNFbXB0eSgpIGNvbnN0
ICAgICB7IHJldHVybiBkaWN0LT5jb3VudCgpID09IDA7IH0KICAgIHR5cGUgKnRvRmlyc3QoKQkg
ICAgICB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjp0b0ZpcnN0KCk7IH0KICAgIG9w
ZXJhdG9yIHR5cGUgKigpIGNvbnN0ICAgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6
Z2V0KCk7IH0KICAgIHR5cGUgICAqY3VycmVudCgpIGNvbnN0ICAgeyByZXR1cm4gKHR5cGUgKilR
R0RpY3RJdGVyYXRvcjo6Z2V0KCk7IH0KICAgIFFTdHJpbmcgY3VycmVudEtleSgpIGNvbnN0eyBy
ZXR1cm4gUUdEaWN0SXRlcmF0b3I6OmdldEtleVN0cmluZygpOyB9CiAgICB0eXBlICpvcGVyYXRv
cigpKCkJICAgICAgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6b3BlcmF0b3IoKSgp
OyB9CiAgICB0eXBlICpvcGVyYXRvcisrKCkJICAgICAgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJ
dGVyYXRvcjo6b3BlcmF0b3IrKygpOyB9CiAgICB0eXBlICpvcGVyYXRvcis9KHVpbnQgaikgIHsg
cmV0dXJuICh0eXBlICopUUdEaWN0SXRlcmF0b3I6Om9wZXJhdG9yKz0oaik7fQp9OwoKCgojIDQ0
ICJrZXJuZWwvcW5ldHdvcmtwcm90b2NvbC5oIiAyCgojIDEgIi9hbWQvc2lnbWEvMC9zcmMvYWxw
aGEtZGVjLW9zZjQuMC93b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcWRpci5oIiAxCiAKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL2FtZC9zaWdtYS8wL3NyYy9h
bHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xc3RybGlzdC5oIiAxCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9hbWQvc2lnbWEv
MC9zcmMvYWxwaGEtZGVjLW9zZjQuMC93b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcWxpc3QuaCIg
MQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9hbWQvc2ln
bWEvMC9zcmMvYWxwaGEtZGVjLW9zZjQuMC93b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcWdsaXN0
LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
Y2xhc3MgICBRTE5vZGUKewpmcmllbmQgY2xhc3MgUUdMaXN0OwpmcmllbmQgY2xhc3MgUUdMaXN0
SXRlcmF0b3I7CnB1YmxpYzoKICAgIFFDb2xsZWN0aW9uOjpJdGVtIGdldERhdGEoKQl7IHJldHVy
biBkYXRhOyB9CnByaXZhdGU6CiAgICBRQ29sbGVjdGlvbjo6SXRlbSBkYXRhOwogICAgUUxOb2Rl
ICpwcmV2OwogICAgUUxOb2RlICpuZXh0OwogICAgUUxOb2RlKCBRQ29sbGVjdGlvbjo6SXRlbSBk
ICkgeyBkYXRhID0gZDsgfQp9OwoKCiAKCgoKY2xhc3MgICBRR0xpc3QgOiBwdWJsaWMgUUNvbGxl
Y3Rpb24JIAp7CmZyaWVuZCBjbGFzcyBRR0xpc3RJdGVyYXRvcjsKZnJpZW5kIGNsYXNzIFFHVmVj
dG9yOwkJCQkgCnB1YmxpYzoKICAgIHVpbnQgIGNvdW50KCkgY29uc3Q7CQkJIAoKCiAgICBRRGF0
YVN0cmVhbSAmcmVhZCggUURhdGFTdHJlYW0gJiApOwkJIAogICAgUURhdGFTdHJlYW0gJndyaXRl
KCBRRGF0YVN0cmVhbSAmICkgY29uc3Q7CSAKCnByb3RlY3RlZDoKICAgIFFHTGlzdCgpOwkJCQkJ
IAogICAgUUdMaXN0KCBjb25zdCBRR0xpc3QgJiApOwkJCSAKICAgIHZpcnR1YWwgflFHTGlzdCgp
OwoKICAgIFFHTGlzdCAmb3BlcmF0b3I9KCBjb25zdCBRR0xpc3QgJiApOwkgCiAgICBib29sIG9w
ZXJhdG9yPT0oIGNvbnN0IFFHTGlzdCYgKSBjb25zdDsKCiAgICB2b2lkIGluU29ydCggUUNvbGxl
Y3Rpb246Okl0ZW0gKTsJCSAKICAgIHZvaWQgYXBwZW5kKCBRQ29sbGVjdGlvbjo6SXRlbSApOwkJ
IAogICAgYm9vbCBpbnNlcnRBdCggdWludCBpbmRleCwgUUNvbGxlY3Rpb246Okl0ZW0gKTsgIAog
ICAgdm9pZCByZWxpbmtOb2RlKCBRTE5vZGUgKiApOwkJIAogICAgYm9vbCByZW1vdmVOb2RlKCBR
TE5vZGUgKiApOwkJIAogICAgYm9vbCByZW1vdmUoIFFDb2xsZWN0aW9uOjpJdGVtID0gMCApOwkg
CiAgICBib29sIHJlbW92ZVJlZiggUUNvbGxlY3Rpb246Okl0ZW0gPSAwICk7CSAKICAgIGJvb2wg
cmVtb3ZlRmlyc3QoKTsJCQkJIAogICAgYm9vbCByZW1vdmVMYXN0KCk7CQkJCSAKICAgIGJvb2wg
cmVtb3ZlQXQoIHVpbnQgaW5kZXggKTsJCSAKICAgIFFDb2xsZWN0aW9uOjpJdGVtIHRha2VOb2Rl
KCBRTE5vZGUgKiApOwkgCiAgICBRQ29sbGVjdGlvbjo6SXRlbSB0YWtlKCk7CQkJIAogICAgUUNv
bGxlY3Rpb246Okl0ZW0gdGFrZUF0KCB1aW50IGluZGV4ICk7CSAKICAgIFFDb2xsZWN0aW9uOjpJ
dGVtIHRha2VGaXJzdCgpOwkJIAogICAgUUNvbGxlY3Rpb246Okl0ZW0gdGFrZUxhc3QoKTsJCSAK
CiAgICB2b2lkIHNvcnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICB2b2lkIGNsZWFy
KCk7CQkJIAoKICAgIGludAkgZmluZFJlZiggUUNvbGxlY3Rpb246Okl0ZW0sIGJvb2wgPSAxICAp
OyAgCiAgICBpbnQJIGZpbmQoIFFDb2xsZWN0aW9uOjpJdGVtLCBib29sID0gMSAgKTsgIAoKICAg
IHVpbnQgY29udGFpbnNSZWYoIFFDb2xsZWN0aW9uOjpJdGVtICkgY29uc3Q7ICAKICAgIHVpbnQg
Y29udGFpbnMoIFFDb2xsZWN0aW9uOjpJdGVtICkJY29uc3Q7CSAKCiAgICBRQ29sbGVjdGlvbjo6
SXRlbSBhdCggdWludCBpbmRleCApOwkJIAogICAgaW50CSAgYXQoKSBjb25zdDsJCQkJIAogICAg
UUxOb2RlICpjdXJyZW50Tm9kZSgpIGNvbnN0OwkJIAoKICAgIFFDb2xsZWN0aW9uOjpJdGVtIGdl
dCgpIGNvbnN0OwkJIAoKICAgIFFDb2xsZWN0aW9uOjpJdGVtIGNmaXJzdCgpIGNvbnN0OwkgCiAg
ICBRQ29sbGVjdGlvbjo6SXRlbSBjbGFzdCgpICBjb25zdDsJIAogICAgUUNvbGxlY3Rpb246Okl0
ZW0gZmlyc3QoKTsJCSAKICAgIFFDb2xsZWN0aW9uOjpJdGVtIGxhc3QoKTsJCSAKICAgIFFDb2xs
ZWN0aW9uOjpJdGVtIG5leHQoKTsJCSAKICAgIFFDb2xsZWN0aW9uOjpJdGVtIHByZXYoKTsJCSAK
CiAgICB2b2lkICB0b1ZlY3RvciggUUdWZWN0b3IgKiApIGNvbnN0OwkJIAoKICAgIHZpcnR1YWwg
aW50IGNvbXBhcmVJdGVtcyggUUNvbGxlY3Rpb246Okl0ZW0sIFFDb2xsZWN0aW9uOjpJdGVtICk7
CgoKICAgIHZpcnR1YWwgUURhdGFTdHJlYW0gJnJlYWQoIFFEYXRhU3RyZWFtICYsIFFDb2xsZWN0
aW9uOjpJdGVtICYgKTsKICAgIHZpcnR1YWwgUURhdGFTdHJlYW0gJndyaXRlKCBRRGF0YVN0cmVh
bSAmLCBRQ29sbGVjdGlvbjo6SXRlbSApIGNvbnN0OwoKcHJpdmF0ZToKICAgIHZvaWQgIHByZXBl
bmQoIFFDb2xsZWN0aW9uOjpJdGVtICk7ICAKCiAgICB2b2lkIGhlYXBTb3J0UHVzaERvd24oIFFD
b2xsZWN0aW9uOjpJdGVtKiBoZWFwLCBpbnQgZmlyc3QsIGludCBsYXN0ICk7CgogICAgUUxOb2Rl
ICpmaXJzdE5vZGU7CQkJCSAKICAgIFFMTm9kZSAqbGFzdE5vZGU7CQkJCSAKICAgIFFMTm9kZSAq
Y3VyTm9kZTsJCQkJIAogICAgaW50CSAgICBjdXJJbmRleDsJCQkJIAogICAgdWludCAgICBudW1O
b2RlczsJCQkJIAogICAgUUdMaXN0ICppdGVyYXRvcnM7CQkJCSAKCiAgICBRTE5vZGUgKmxvY2F0
ZSggdWludCApOwkJCSAKICAgIFFMTm9kZSAqdW5saW5rKCk7CQkJCSAKfTsKCgppbmxpbmUgdWlu
dCBRR0xpc3Q6OmNvdW50KCkgY29uc3QKewogICAgcmV0dXJuIG51bU5vZGVzOwp9CgppbmxpbmUg
Ym9vbCBRR0xpc3Q6OnJlbW92ZUZpcnN0KCkKewogICAgZmlyc3QoKTsKICAgIHJldHVybiByZW1v
dmUoKTsKfQoKaW5saW5lIGJvb2wgUUdMaXN0OjpyZW1vdmVMYXN0KCkKewogICAgbGFzdCgpOwog
ICAgcmV0dXJuIHJlbW92ZSgpOwp9CgppbmxpbmUgaW50IFFHTGlzdDo6YXQoKSBjb25zdAp7CiAg
ICByZXR1cm4gY3VySW5kZXg7Cn0KCmlubGluZSBRQ29sbGVjdGlvbjo6SXRlbSBRR0xpc3Q6OmF0
KCB1aW50IGluZGV4ICkKewogICAgUUxOb2RlICpuID0gbG9jYXRlKCBpbmRleCApOwogICAgcmV0
dXJuIG4gPyBuLT5kYXRhIDogMDsKfQoKaW5saW5lIFFMTm9kZSAqUUdMaXN0OjpjdXJyZW50Tm9k
ZSgpIGNvbnN0CnsKICAgIHJldHVybiBjdXJOb2RlOwp9CgppbmxpbmUgUUNvbGxlY3Rpb246Okl0
ZW0gUUdMaXN0OjpnZXQoKSBjb25zdAp7CiAgICByZXR1cm4gY3VyTm9kZSA/IGN1ck5vZGUtPmRh
dGEgOiAwOwp9CgppbmxpbmUgUUNvbGxlY3Rpb246Okl0ZW0gUUdMaXN0OjpjZmlyc3QoKSBjb25z
dAp7CiAgICByZXR1cm4gZmlyc3ROb2RlID8gZmlyc3ROb2RlLT5kYXRhIDogMDsKfQoKaW5saW5l
IFFDb2xsZWN0aW9uOjpJdGVtIFFHTGlzdDo6Y2xhc3QoKSBjb25zdAp7CiAgICByZXR1cm4gbGFz
dE5vZGUgPyBsYXN0Tm9kZS0+ZGF0YSA6IDA7Cn0KCgogCgoKCgogIFFEYXRhU3RyZWFtICZvcGVy
YXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRR0xpc3QgJiApOwogIFFEYXRhU3RyZWFtICZvcGVyYXRv
cjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRR0xpc3QgJiApOwoKCiAKCgoKY2xhc3MgICBRR0xp
c3RJdGVyYXRvcgkJCSAKewpmcmllbmQgY2xhc3MgUUdMaXN0Owpwcm90ZWN0ZWQ6CiAgICBRR0xp
c3RJdGVyYXRvciggY29uc3QgUUdMaXN0ICYgKTsKICAgIFFHTGlzdEl0ZXJhdG9yKCBjb25zdCBR
R0xpc3RJdGVyYXRvciAmICk7CiAgICBRR0xpc3RJdGVyYXRvciAmb3BlcmF0b3I9KCBjb25zdCBR
R0xpc3RJdGVyYXRvciAmICk7CiAgIH5RR0xpc3RJdGVyYXRvcigpOwoKICAgIGJvb2wgIGF0Rmly
c3QoKSBjb25zdDsJCQkgCiAgICBib29sICBhdExhc3QoKSAgY29uc3Q7CQkJIAogICAgUUNvbGxl
Y3Rpb246Okl0ZW0JICB0b0ZpcnN0KCk7CQkJCSAKICAgIFFDb2xsZWN0aW9uOjpJdGVtCSAgdG9M
YXN0KCk7CQkJCSAKCiAgICBRQ29sbGVjdGlvbjo6SXRlbQkgIGdldCgpIGNvbnN0OwkJCQkgCiAg
ICBRQ29sbGVjdGlvbjo6SXRlbQkgIG9wZXJhdG9yKCkoKTsJCQkJIAogICAgUUNvbGxlY3Rpb246
Okl0ZW0JICBvcGVyYXRvcisrKCk7CQkJCSAKICAgIFFDb2xsZWN0aW9uOjpJdGVtCSAgb3BlcmF0
b3IrPSh1aW50KTsJCQkgCiAgICBRQ29sbGVjdGlvbjo6SXRlbQkgIG9wZXJhdG9yLS0oKTsJCQkJ
IAogICAgUUNvbGxlY3Rpb246Okl0ZW0JICBvcGVyYXRvci09KHVpbnQpOwkJCSAKCnByb3RlY3Rl
ZDoKICAgIFFHTGlzdCAqbGlzdDsJCQkJIAoKcHJpdmF0ZToKICAgIFFMTm9kZSAgKmN1ck5vZGU7
CQkJCSAKfTsKCgppbmxpbmUgYm9vbCBRR0xpc3RJdGVyYXRvcjo6YXRGaXJzdCgpIGNvbnN0CnsK
ICAgIHJldHVybiBjdXJOb2RlID09IGxpc3QtPmZpcnN0Tm9kZTsKfQoKaW5saW5lIGJvb2wgUUdM
aXN0SXRlcmF0b3I6OmF0TGFzdCgpIGNvbnN0CnsKICAgIHJldHVybiBjdXJOb2RlID09IGxpc3Qt
Pmxhc3ROb2RlOwp9CgppbmxpbmUgUUNvbGxlY3Rpb246Okl0ZW0gUUdMaXN0SXRlcmF0b3I6Omdl
dCgpIGNvbnN0CnsKICAgIHJldHVybiBjdXJOb2RlID8gY3VyTm9kZS0+ZGF0YSA6IDA7Cn0KCgoK
IyA0MiAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMv
aW5jbHVkZS9xbGlzdC5oIiAyCgoKCgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPiBjbGFzcyAgIFFMaXN0
IDogcHVibGljIFFHTGlzdAp7CnB1YmxpYzoKICAgIFFMaXN0KCkJCQkJe30KICAgIFFMaXN0KCBj
b25zdCBRTGlzdDx0eXBlPiAmbCApIDogUUdMaXN0KGwpIHt9CiAgIH5RTGlzdCgpCQkJCXsgY2xl
YXIoKTsgfQogICAgUUxpc3Q8dHlwZT4gJm9wZXJhdG9yPShjb25zdCBRTGlzdDx0eXBlPiAmbCkK
CQkJeyByZXR1cm4gKFFMaXN0PHR5cGU+JilRR0xpc3Q6Om9wZXJhdG9yPShsKTsgfQogICAgYm9v
bCBvcGVyYXRvcj09KCBjb25zdCBRTGlzdDx0eXBlPiAmbGlzdCApIGNvbnN0CiAgICB7IHJldHVy
biBRR0xpc3Q6Om9wZXJhdG9yPT0oIGxpc3QgKTsgfQogICAgdWludCAgY291bnQoKSAgIGNvbnN0
CQl7IHJldHVybiBRR0xpc3Q6OmNvdW50KCk7IH0KICAgIGJvb2wgIGlzRW1wdHkoKSBjb25zdAkJ
eyByZXR1cm4gUUdMaXN0Ojpjb3VudCgpID09IDA7IH0KICAgIGJvb2wgIGluc2VydCggdWludCBp
LCBjb25zdCB0eXBlICpkKXsgcmV0dXJuIFFHTGlzdDo6aW5zZXJ0QXQoaSwoUUNvbGxlY3Rpb246
Okl0ZW0pZCk7IH0KICAgIHZvaWQgIGluU29ydCggY29uc3QgdHlwZSAqZCApCXsgUUdMaXN0Ojpp
blNvcnQoKFFDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAgICB2b2lkICBwcmVwZW5kKCBjb25zdCB0
eXBlICpkICkJeyBRR0xpc3Q6Omluc2VydEF0KDAsKFFDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAg
ICB2b2lkICBhcHBlbmQoIGNvbnN0IHR5cGUgKmQgKQl7IFFHTGlzdDo6YXBwZW5kKChRQ29sbGVj
dGlvbjo6SXRlbSlkKTsgfQogICAgYm9vbCAgcmVtb3ZlKCB1aW50IGkgKQkJeyByZXR1cm4gUUdM
aXN0OjpyZW1vdmVBdChpKTsgfQogICAgYm9vbCAgcmVtb3ZlKCkJCQl7IHJldHVybiBRR0xpc3Q6
OnJlbW92ZSgoUUNvbGxlY3Rpb246Okl0ZW0pMCk7IH0KICAgIGJvb2wgIHJlbW92ZSggY29uc3Qg
dHlwZSAqZCApCXsgcmV0dXJuIFFHTGlzdDo6cmVtb3ZlKChRQ29sbGVjdGlvbjo6SXRlbSlkKTsg
fQogICAgYm9vbCAgcmVtb3ZlUmVmKCBjb25zdCB0eXBlICpkICkJeyByZXR1cm4gUUdMaXN0Ojpy
ZW1vdmVSZWYoKFFDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAgICB2b2lkICByZW1vdmVOb2RlKCBR
TE5vZGUgKm4gKQl7IFFHTGlzdDo6cmVtb3ZlTm9kZShuKTsgfQogICAgYm9vbCAgcmVtb3ZlRmly
c3QoKQkJCXsgcmV0dXJuIFFHTGlzdDo6cmVtb3ZlRmlyc3QoKTsgfQogICAgYm9vbCAgcmVtb3Zl
TGFzdCgpCQkJeyByZXR1cm4gUUdMaXN0OjpyZW1vdmVMYXN0KCk7IH0KICAgIHR5cGUgKnRha2Uo
IHVpbnQgaSApCQl7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6dGFrZUF0KGkpOyB9CiAgICB0eXBl
ICp0YWtlKCkJCQl7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6dGFrZSgpOyB9CiAgICB0eXBlICp0
YWtlTm9kZSggUUxOb2RlICpuICkJCXsgcmV0dXJuICh0eXBlICopUUdMaXN0Ojp0YWtlTm9kZShu
KTsgfQogICAgdm9pZCAgY2xlYXIoKQkJCXsgUUdMaXN0OjpjbGVhcigpOyB9CiAgICB2b2lkICBz
b3J0KCkJCQl7IFFHTGlzdDo6c29ydCgpOyB9CiAgICBpbnQJICBmaW5kKCBjb25zdCB0eXBlICpk
ICkJCXsgcmV0dXJuIFFHTGlzdDo6ZmluZCgoUUNvbGxlY3Rpb246Okl0ZW0pZCk7IH0KICAgIGlu
dAkgIGZpbmROZXh0KCBjb25zdCB0eXBlICpkICkJeyByZXR1cm4gUUdMaXN0OjpmaW5kKChRQ29s
bGVjdGlvbjo6SXRlbSlkLDAgKTsgfQogICAgaW50CSAgZmluZFJlZiggY29uc3QgdHlwZSAqZCAp
CXsgcmV0dXJuIFFHTGlzdDo6ZmluZFJlZigoUUNvbGxlY3Rpb246Okl0ZW0pZCk7IH0KICAgIGlu
dAkgIGZpbmROZXh0UmVmKCBjb25zdCB0eXBlICpkICl7IHJldHVybiBRR0xpc3Q6OmZpbmRSZWYo
KFFDb2xsZWN0aW9uOjpJdGVtKWQsMCApO30KICAgIHVpbnQgIGNvbnRhaW5zKCBjb25zdCB0eXBl
ICpkICkgY29uc3QgeyByZXR1cm4gUUdMaXN0Ojpjb250YWlucygoUUNvbGxlY3Rpb246Okl0ZW0p
ZCk7IH0KICAgIHVpbnQgIGNvbnRhaW5zUmVmKCBjb25zdCB0eXBlICpkICkgY29uc3QKCQkJCQl7
IHJldHVybiBRR0xpc3Q6OmNvbnRhaW5zUmVmKChRQ29sbGVjdGlvbjo6SXRlbSlkKTsgfQogICAg
dHlwZSAqYXQoIHVpbnQgaSApCQkJeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6OmF0KGkpOyB9CiAg
ICBpbnQJICBhdCgpIGNvbnN0CQkJeyByZXR1cm4gUUdMaXN0OjphdCgpOyB9CiAgICB0eXBlICpj
dXJyZW50KCkgIGNvbnN0CQl7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6Z2V0KCk7IH0KICAgIFFM
Tm9kZSAqY3VycmVudE5vZGUoKSAgY29uc3QJeyByZXR1cm4gUUdMaXN0OjpjdXJyZW50Tm9kZSgp
OyB9CiAgICB0eXBlICpnZXRGaXJzdCgpIGNvbnN0CQl7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6
Y2ZpcnN0KCk7IH0KICAgIHR5cGUgKmdldExhc3QoKSAgY29uc3QJCXsgcmV0dXJuICh0eXBlICop
UUdMaXN0OjpjbGFzdCgpOyB9CiAgICB0eXBlICpmaXJzdCgpCQkJeyByZXR1cm4gKHR5cGUgKilR
R0xpc3Q6OmZpcnN0KCk7IH0KICAgIHR5cGUgKmxhc3QoKQkJCXsgcmV0dXJuICh0eXBlICopUUdM
aXN0OjpsYXN0KCk7IH0KICAgIHR5cGUgKm5leHQoKQkJCXsgcmV0dXJuICh0eXBlICopUUdMaXN0
OjpuZXh0KCk7IH0KICAgIHR5cGUgKnByZXYoKQkJCXsgcmV0dXJuICh0eXBlICopUUdMaXN0Ojpw
cmV2KCk7IH0KICAgIHZvaWQgIHRvVmVjdG9yKCBRR1ZlY3RvciAqdmVjICljb25zdHsgUUdMaXN0
Ojp0b1ZlY3Rvcih2ZWMpOyB9CnByaXZhdGU6CiAgICB2b2lkICBkZWxldGVJdGVtKCBRQ29sbGVj
dGlvbjo6SXRlbSBkICk7Cn07CgoKdGVtcGxhdGU8PiBpbmxpbmUgdm9pZCBRTGlzdDx2b2lkPjo6
ZGVsZXRlSXRlbSggUUNvbGxlY3Rpb246Okl0ZW0gKQp7Cn0KCgp0ZW1wbGF0ZTxjbGFzcyB0eXBl
PiBpbmxpbmUgdm9pZCBRTGlzdDx0eXBlPjo6ZGVsZXRlSXRlbSggUUNvbGxlY3Rpb246Okl0ZW0g
ZCApCnsKICAgIGlmICggZGVsX2l0ZW0gKSBkZWxldGUgKHR5cGUgKilkOwp9CgoKdGVtcGxhdGU8
Y2xhc3MgdHlwZT4gY2xhc3MgICBRTGlzdEl0ZXJhdG9yIDogcHVibGljIFFHTGlzdEl0ZXJhdG9y
CnsKcHVibGljOgogICAgUUxpc3RJdGVyYXRvcihjb25zdCBRTGlzdDx0eXBlPiAmbCkgOlFHTGlz
dEl0ZXJhdG9yKChRR0xpc3QgJilsKSB7fQogICB+UUxpc3RJdGVyYXRvcigpCSAgICAgIHt9CiAg
ICB1aW50ICBjb3VudCgpICAgY29uc3QgICAgIHsgcmV0dXJuIGxpc3QtPmNvdW50KCk7IH0KICAg
IGJvb2wgIGlzRW1wdHkoKSBjb25zdCAgICAgeyByZXR1cm4gbGlzdC0+Y291bnQoKSA9PSAwOyB9
CiAgICBib29sICBhdEZpcnN0KCkgY29uc3QgICAgIHsgcmV0dXJuIFFHTGlzdEl0ZXJhdG9yOjph
dEZpcnN0KCk7IH0KICAgIGJvb2wgIGF0TGFzdCgpICBjb25zdCAgICAgeyByZXR1cm4gUUdMaXN0
SXRlcmF0b3I6OmF0TGFzdCgpOyB9CiAgICB0eXBlICp0b0ZpcnN0KCkJICAgICAgeyByZXR1cm4g
KHR5cGUgKilRR0xpc3RJdGVyYXRvcjo6dG9GaXJzdCgpOyB9CiAgICB0eXBlICp0b0xhc3QoKQkg
ICAgICB7IHJldHVybiAodHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjp0b0xhc3QoKTsgfQogICAgb3Bl
cmF0b3IgdHlwZSAqKCkgY29uc3QgICB7IHJldHVybiAodHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjpn
ZXQoKTsgfQogICAgdHlwZSAqb3BlcmF0b3IqKCkgICAgICAgICB7IHJldHVybiAodHlwZSAqKVFH
TGlzdEl0ZXJhdG9yOjpnZXQoKTsgfQoKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKCiAg
ICB0eXBlICpjdXJyZW50KCkgICBjb25zdCAgIHsgcmV0dXJuICh0eXBlICopUUdMaXN0SXRlcmF0
b3I6OmdldCgpOyB9CiAgICB0eXBlICpvcGVyYXRvcigpKCkJICAgICAgeyByZXR1cm4gKHR5cGUg
KilRR0xpc3RJdGVyYXRvcjo6b3BlcmF0b3IoKSgpO30KICAgIHR5cGUgKm9wZXJhdG9yKysoKQkg
ICAgICB7IHJldHVybiAodHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjpvcGVyYXRvcisrKCk7IH0KICAg
IHR5cGUgKm9wZXJhdG9yKz0odWludCBqKSAgeyByZXR1cm4gKHR5cGUgKilRR0xpc3RJdGVyYXRv
cjo6b3BlcmF0b3IrPShqKTt9CiAgICB0eXBlICpvcGVyYXRvci0tKCkJICAgICAgeyByZXR1cm4g
KHR5cGUgKilRR0xpc3RJdGVyYXRvcjo6b3BlcmF0b3ItLSgpOyB9CiAgICB0eXBlICpvcGVyYXRv
ci09KHVpbnQgaikgIHsgcmV0dXJuICh0eXBlICopUUdMaXN0SXRlcmF0b3I6Om9wZXJhdG9yLT0o
aik7fQogICAgUUxpc3RJdGVyYXRvcjx0eXBlPiYgb3BlcmF0b3I9KGNvbnN0IFFMaXN0SXRlcmF0
b3I8dHlwZT4maXQpCgkJCSAgICAgIHsgUUdMaXN0SXRlcmF0b3I6Om9wZXJhdG9yPShpdCk7IHJl
dHVybiAqdGhpczsgfQp9OwoKCgojIDQzICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0
LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3FzdHJsaXN0LmgiIDIKCiMgMSAiL2FtZC9zaWdt
YS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xZGF0YXN0
cmVhbS5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAi
L2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVk
ZS9xaW9kZXZpY2UuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiAKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgpjbGFz
cyAgIFFJT0RldmljZQkJCQkJIAp7CnB1YmxpYzoKICAgIFFJT0RldmljZSgpOwogICAgdmlydHVh
bCB+UUlPRGV2aWNlKCk7CgogICAgaW50CQkgZmxhZ3MoKSAgY29uc3QgeyByZXR1cm4gaW9Nb2Rl
OyB9CiAgICBpbnQJCSBtb2RlKCkJICBjb25zdCB7IHJldHVybiBpb01vZGUgJiAweDAwZmYgOyB9
CiAgICBpbnQJCSBzdGF0ZSgpICBjb25zdCB7IHJldHVybiBpb01vZGUgJiAweGYwMDAgOyB9Cgog
ICAgYm9vbAkgaXNEaXJlY3RBY2Nlc3MoKSAgICAgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAw
eDAxMDAgKSAgICAgPT0gMHgwMTAwICk7IH0KICAgIGJvb2wJIGlzU2VxdWVudGlhbEFjY2Vzcygp
IGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMjAwICkgPT0gMHgwMjAwICk7IH0KICAgIGJv
b2wJIGlzQ29tYmluZWRBY2Nlc3MoKSAgIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMzAw
ICkgICA9PSAweDAzMDAgKTsgfQogICAgYm9vbAkgaXNCdWZmZXJlZCgpCSAgICAgIGNvbnN0IHsg
cmV0dXJuICgoaW9Nb2RlICYgMHgwMDQwICkgICAgICAgICE9IDB4MDA0MCApOyB9CiAgICBib29s
CSBpc1JhdygpCSAgICAgIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMDQwICkgICAgICAg
ID09IDB4MDA0MCApOyB9CiAgICBib29sCSBpc1N5bmNocm9ub3VzKCkgICAgICBjb25zdCB7IHJl
dHVybiAoKGlvTW9kZSAmIDB4MDA4MCApICAgICAgIT0gMHgwMDgwICk7IH0KICAgIGJvb2wJIGlz
QXN5bmNocm9ub3VzKCkgICAgIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMDgwICkgICAg
ICA9PSAweDAwODAgKTsgfQogICAgYm9vbAkgaXNUcmFuc2xhdGVkKCkJICAgICAgY29uc3QgeyBy
ZXR1cm4gKChpb01vZGUgJiAweDAwMTAgKSAgPT0gMHgwMDEwICk7IH0KICAgIGJvb2wJIGlzUmVh
ZGFibGUoKQkgICAgICBjb25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDAwMSApICAgPT0gMHgw
MDAxICk7IH0KICAgIGJvb2wJIGlzV3JpdGFibGUoKQkgICAgICBjb25zdCB7IHJldHVybiAoKGlv
TW9kZSAmIDB4MDAwMiApICA9PSAweDAwMDIgKTsgfQogICAgYm9vbAkgaXNSZWFkV3JpdGUoKQkg
ICAgICBjb25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDAwMyApICA9PSAweDAwMDMgKTsgfQog
ICAgYm9vbAkgaXNJbmFjdGl2ZSgpCSAgICAgIGNvbnN0IHsgcmV0dXJuIHN0YXRlKCkgPT0gMDsg
fQogICAgYm9vbAkgaXNPcGVuKCkJICAgICAgY29uc3QgeyByZXR1cm4gc3RhdGUoKSA9PSAweDEw
MDAgOyB9CgogICAgaW50CQkgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gaW9TdDsgfQogICAgdm9p
ZAkgcmVzZXRTdGF0dXMoKQl7IGlvU3QgPSAwIDsgfQoKICAgIHZpcnR1YWwgYm9vbCBvcGVuKCBp
bnQgbW9kZSApID0gMDsKICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpID0gMDsKICAgIHZpcnR1YWwg
dm9pZCBmbHVzaCgpID0gMDsKCiAgICB2aXJ0dWFsIHVpbnQgc2l6ZSgpCSAgY29uc3QgPSAwOwog
ICAgdmlydHVhbCBpbnQJIGF0KCkJICBjb25zdDsKICAgIHZpcnR1YWwgYm9vbCBhdCggaW50ICk7
CiAgICB2aXJ0dWFsIGJvb2wgYXRFbmQoKSAgY29uc3Q7CiAgICBib29sCSByZXNldCgpIHsgcmV0
dXJuIGF0KDApOyB9CgogICAgdmlydHVhbCBpbnQJIHJlYWRCbG9jayggY2hhciAqZGF0YSwgdWlu
dCBtYXhsZW4gKSA9IDA7CiAgICB2aXJ0dWFsIGludAkgd3JpdGVCbG9jayggY29uc3QgY2hhciAq
ZGF0YSwgdWludCBsZW4gKSA9IDA7CiAgICB2aXJ0dWFsIGludAkgcmVhZExpbmUoIGNoYXIgKmRh
dGEsIHVpbnQgbWF4bGVuICk7CiAgICBpbnQgd3JpdGVCbG9jayggY29uc3QgUUJ5dGVBcnJheSYg
ZGF0YSApOwogICAgUUJ5dGVBcnJheSByZWFkQWxsKCk7CgogICAgdmlydHVhbCBpbnQJIGdldGNo
KCkgPSAwOwogICAgdmlydHVhbCBpbnQJIHB1dGNoKCBpbnQgKSA9IDA7CiAgICB2aXJ0dWFsIGlu
dAkgdW5nZXRjaCggaW50ICkgPSAwOwoKcHJvdGVjdGVkOgogICAgdm9pZAkgc2V0RmxhZ3MoIGlu
dCBmICkgeyBpb01vZGUgPSBmOyB9CiAgICB2b2lkCSBzZXRUeXBlKCBpbnQgKTsKICAgIHZvaWQJ
IHNldE1vZGUoIGludCApOwogICAgdm9pZAkgc2V0U3RhdGUoIGludCApOwogICAgdm9pZAkgc2V0
U3RhdHVzKCBpbnQgKTsKICAgIGludAkJIGlvSW5kZXg7Cgpwcml2YXRlOgogICAgaW50CQkgaW9N
b2RlOwogICAgaW50CQkgaW9TdDsKCnByaXZhdGU6CSAKCiAgICBRSU9EZXZpY2UoIGNvbnN0IFFJ
T0RldmljZSAmICk7CiAgICBRSU9EZXZpY2UgJm9wZXJhdG9yPSggY29uc3QgUUlPRGV2aWNlICYg
KTsKCn07CgoKCiMgNDIgIi9hbWQvc2lnbWEvMC9zcmMvYWxwaGEtZGVjLW9zZjQuMC93b3JrZGly
L3F0LTIuMi4zL2luY2x1ZGUvcWRhdGFzdHJlYW0uaCIgMgoKCgoKCmNsYXNzICAgUURhdGFTdHJl
YW0JCQkJIAp7CnB1YmxpYzoKICAgIFFEYXRhU3RyZWFtKCk7CiAgICBRRGF0YVN0cmVhbSggUUlP
RGV2aWNlICogKTsKICAgIFFEYXRhU3RyZWFtKCBRQnl0ZUFycmF5LCBpbnQgbW9kZSApOwogICAg
dmlydHVhbCB+UURhdGFTdHJlYW0oKTsKCiAgICBRSU9EZXZpY2UJKmRldmljZSgpIGNvbnN0Owog
ICAgdm9pZAkgc2V0RGV2aWNlKCBRSU9EZXZpY2UgKiApOwogICAgdm9pZAkgdW5zZXREZXZpY2Uo
KTsKCiAgICBib29sCSBhdEVuZCgpIGNvbnN0OwogICAgYm9vbAkgZW9mKCkgY29uc3Q7CgogICAg
ZW51bSBCeXRlT3JkZXIgeyBCaWdFbmRpYW4sIExpdHRsZUVuZGlhbiB9OwogICAgaW50CQkgYnl0
ZU9yZGVyKCkJY29uc3Q7CiAgICB2b2lkCSBzZXRCeXRlT3JkZXIoIGludCApOwoKICAgIGJvb2wJ
IGlzUHJpbnRhYmxlRGF0YSgpIGNvbnN0OwogICAgdm9pZAkgc2V0UHJpbnRhYmxlRGF0YSggYm9v
bCApOwoKICAgIGludAkJIHZlcnNpb24oKSBjb25zdDsKICAgIHZvaWQJIHNldFZlcnNpb24oIGlu
dCApOwoKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRX0lOVDggJmkgKTsKICAgIFFEYXRh
U3RyZWFtICZvcGVyYXRvcj4+KCBRX1VJTlQ4ICZpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0
b3I+PiggUV9JTlQxNiAmaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfVUlOVDE2
ICZpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUV9JTlQzMiAmaSApOwogICAgUURh
dGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfVUlOVDMyICZpICk7CiAgICBRRGF0YVN0cmVhbSAmb3Bl
cmF0b3I+PiggUV9JTlQ2NCAmaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfVUlO
VDY0ICZpICk7CgogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIGZsb2F0ICZmICk7CiAgICBR
RGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggZG91YmxlICZmICk7CiAgICBRRGF0YVN0cmVhbSAmb3Bl
cmF0b3I+PiggY2hhciAqJnN0ciApOwoKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRX0lO
VDggaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfVUlOVDggaSApOwogICAgUURh
dGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfSU5UMTYgaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJh
dG9yPDwoIFFfVUlOVDE2IGkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRX0lOVDMy
IGkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRX1VJTlQzMiBpICk7CiAgICBRRGF0
YVN0cmVhbSAmb3BlcmF0b3I8PCggUV9JTlQ2NCBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0
b3I8PCggUV9VSU5UNjQgaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIGZsb2F0IGYg
KTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBkb3VibGUgZiApOwogICAgUURhdGFTdHJl
YW0gJm9wZXJhdG9yPDwoIGNvbnN0IGNoYXIgKnN0ciApOwoKICAgIFFEYXRhU3RyZWFtICZyZWFk
Qnl0ZXMoIGNoYXIgKiYsIHVpbnQgJmxlbiApOwogICAgUURhdGFTdHJlYW0gJnJlYWRSYXdCeXRl
cyggY2hhciAqLCB1aW50IGxlbiApOwoKICAgIFFEYXRhU3RyZWFtICZ3cml0ZUJ5dGVzKCBjb25z
dCBjaGFyICosIHVpbnQgbGVuICk7CiAgICBRRGF0YVN0cmVhbSAmd3JpdGVSYXdCeXRlcyggY29u
c3QgY2hhciAqLCB1aW50IGxlbiApOwoKcHJpdmF0ZToKICAgIFFJT0RldmljZQkqZGV2OwogICAg
Ym9vbAkgb3duZGV2OwogICAgaW50CQkgYnl0ZW9yZGVyOwogICAgYm9vbAkgcHJpbnRhYmxlOwog
ICAgYm9vbAkgbm9zd2FwOwogICAgaW50CQkgdmVyOwoKcHJpdmF0ZToJIAoKICAgIFFEYXRhU3Ry
ZWFtKCBjb25zdCBRRGF0YVN0cmVhbSAmICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I9KCBj
b25zdCBRRGF0YVN0cmVhbSAmICk7Cgp9OwoKCiAKCgoKaW5saW5lIFFJT0RldmljZSAqUURhdGFT
dHJlYW06OmRldmljZSgpIGNvbnN0CnsgcmV0dXJuIGRldjsgfQoKaW5saW5lIGJvb2wgUURhdGFT
dHJlYW06OmF0RW5kKCkgY29uc3QKeyByZXR1cm4gZGV2ID8gZGV2LT5hdEVuZCgpIDogMSA7IH0K
CmlubGluZSBib29sIFFEYXRhU3RyZWFtOjplb2YoKSBjb25zdAp7IHJldHVybiBhdEVuZCgpOyB9
CgppbmxpbmUgaW50IFFEYXRhU3RyZWFtOjpieXRlT3JkZXIoKSBjb25zdAp7IHJldHVybiBieXRl
b3JkZXI7IH0KCmlubGluZSBib29sIFFEYXRhU3RyZWFtOjppc1ByaW50YWJsZURhdGEoKSBjb25z
dAp7IHJldHVybiBwcmludGFibGU7IH0KCmlubGluZSB2b2lkIFFEYXRhU3RyZWFtOjpzZXRQcmlu
dGFibGVEYXRhKCBib29sIHAgKQp7IHByaW50YWJsZSA9IHA7IH0KCmlubGluZSBpbnQgUURhdGFT
dHJlYW06OnZlcnNpb24oKSBjb25zdAp7IHJldHVybiB2ZXI7IH0KCmlubGluZSB2b2lkIFFEYXRh
U3RyZWFtOjpzZXRWZXJzaW9uKCBpbnQgdiApCnsgdmVyID0gdjsgfQoKaW5saW5lIFFEYXRhU3Ry
ZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I+PiggUV9VSU5UOCAmaSApCnsgcmV0dXJuICp0aGlz
ID4+IChRX0lOVDgmKWk7IH0KCmlubGluZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJh
dG9yPj4oIFFfVUlOVDE2ICZpICkKeyByZXR1cm4gKnRoaXMgPj4gKFFfSU5UMTYmKWk7IH0KCmlu
bGluZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9yPj4oIFFfVUlOVDMyICZpICkK
eyByZXR1cm4gKnRoaXMgPj4gKFFfSU5UMzImKWk7IH0KCmlubGluZSBRRGF0YVN0cmVhbSAmUURh
dGFTdHJlYW06Om9wZXJhdG9yPj4oIFFfVUlOVDY0ICZpICkKeyByZXR1cm4gKnRoaXMgPj4gKFFf
SU5UNjQmKWk7IH0KCmlubGluZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9yPDwo
IFFfVUlOVDggaSApCnsgcmV0dXJuICp0aGlzIDw8IChRX0lOVDgpaTsgfQoKaW5saW5lIFFEYXRh
U3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I8PCggUV9VSU5UMTYgaSApCnsgcmV0dXJuICp0
aGlzIDw8IChRX0lOVDE2KWk7IH0KCmlubGluZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9w
ZXJhdG9yPDwoIFFfVUlOVDMyIGkgKQp7IHJldHVybiAqdGhpcyA8PCAoUV9JTlQzMilpOyB9Cgpp
bmxpbmUgUURhdGFTdHJlYW0gJlFEYXRhU3RyZWFtOjpvcGVyYXRvcjw8KCBRX1VJTlQ2NCBpICkK
eyByZXR1cm4gKnRoaXMgPDwgKFFfSU5UNjQpaTsgfQoKCgoKIyA0NCAiL2FtZC9zaWdtYS8wL3Ny
Yy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xc3RybGlzdC5oIiAy
CgoKCgoKCgoKCnR5cGVkZWYgUUxpc3Q8Y2hhcj4JCVFTdHJMaXN0QmFzZTsKdHlwZWRlZiBRTGlz
dEl0ZXJhdG9yPGNoYXI+CVFTdHJMaXN0SXRlcmF0b3I7CgoKY2xhc3MgICBRU3RyTGlzdCA6IHB1
YmxpYyBRU3RyTGlzdEJhc2UKewpwdWJsaWM6CiAgICBRU3RyTGlzdCggYm9vbCBkZWVwQ29waWVz
PSAxICApIHsgZGMgPSBkZWVwQ29waWVzOyBkZWxfaXRlbSA9IGRlZXBDb3BpZXM7IH0KICAgIFFT
dHJMaXN0KCBjb25zdCBRU3RyTGlzdCAmICk7CiAgIH5RU3RyTGlzdCgpCQkJeyBjbGVhcigpOyB9
CiAgICBRU3RyTGlzdCYgb3BlcmF0b3I9KCBjb25zdCBRU3RyTGlzdCAmICk7Cgpwcml2YXRlOgog
ICAgUUNvbGxlY3Rpb246Okl0ZW0gbmV3SXRlbSggUUNvbGxlY3Rpb246Okl0ZW0gZCApIHsgcmV0
dXJuIGRjID8gcXN0cmR1cCggKGNvbnN0IGNoYXIqKWQgKSA6IGQ7IH0KICAgIHZvaWQgZGVsZXRl
SXRlbSggUUNvbGxlY3Rpb246Okl0ZW0gZCApIHsgaWYgKCBkZWxfaXRlbSApIGRlbGV0ZVtdIChj
aGFyKilkOyB9CiAgICBpbnQgY29tcGFyZUl0ZW1zKCBRQ29sbGVjdGlvbjo6SXRlbSBzMSwgUUNv
bGxlY3Rpb246Okl0ZW0gczIgKSB7IHJldHVybiBxc3RyY21wKChjb25zdCBjaGFyKilzMSwKCQkJ
CQkJCSAoY29uc3QgY2hhciopczIpOyB9CgogICAgUURhdGFTdHJlYW0gJnJlYWQoIFFEYXRhU3Ry
ZWFtICZzLCBRQ29sbGVjdGlvbjo6SXRlbSAmZCApCgkJCQl7IHMgPj4gKGNoYXIgKiYpZDsgcmV0
dXJuIHM7IH0KICAgIFFEYXRhU3RyZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJnMsIFFDb2xsZWN0
aW9uOjpJdGVtIGQgKSBjb25zdAoJCQkJeyByZXR1cm4gcyA8PCAoY29uc3QgY2hhciAqKWQ7IH0K
CiAgICBib29sICBkYzsKfTsKCgpjbGFzcyAgIFFTdHJJTGlzdCA6IHB1YmxpYyBRU3RyTGlzdAkg
CnsKcHVibGljOgogICAgUVN0cklMaXN0KCBib29sIGRlZXBDb3BpZXM9IDEgICkgOiBRU3RyTGlz
dCggZGVlcENvcGllcyApIHt9CiAgIH5RU3RySUxpc3QoKQkJCXsgY2xlYXIoKTsgfQpwcml2YXRl
OgogICAgaW50CSAgY29tcGFyZUl0ZW1zKCBRQ29sbGVjdGlvbjo6SXRlbSBzMSwgUUNvbGxlY3Rp
b246Okl0ZW0gczIgKQoJCQkJeyByZXR1cm4gcXN0cmljbXAoKGNvbnN0IGNoYXIqKXMxLAoJCQkJ
CQkgICAgKGNvbnN0IGNoYXIqKXMyKTsgfQp9OwoKCmlubGluZSBRU3RyTGlzdCAmIFFTdHJMaXN0
OjpvcGVyYXRvcj0oIGNvbnN0IFFTdHJMaXN0ICZzdHJMaXN0ICkKewogICAgY2xlYXIoKTsKICAg
IGRjID0gc3RyTGlzdC5kYzsKICAgIGRlbF9pdGVtID0gZGM7CiAgICBRU3RyTGlzdEJhc2U6Om9w
ZXJhdG9yPShzdHJMaXN0KTsKICAgIHJldHVybiAqdGhpczsKfQoKaW5saW5lIFFTdHJMaXN0OjpR
U3RyTGlzdCggY29uc3QgUVN0ckxpc3QgJnN0ckxpc3QgKQogICAgOiBRU3RyTGlzdEJhc2UoIHN0
ckxpc3QgKQp7CiAgICBkYyA9IDAgOwogICAgb3BlcmF0b3I9KHN0ckxpc3QpOwp9CgoKCiMgNDIg
Ii9hbWQvc2lnbWEvMC9zcmMvYWxwaGEtZGVjLW9zZjQuMC93b3JrZGlyL3F0LTIuMi4zL2luY2x1
ZGUvcWRpci5oIiAyCgojIDEgIi9hbWQvc2lnbWEvMC9zcmMvYWxwaGEtZGVjLW9zZjQuMC93b3Jr
ZGlyL3F0LTIuMi4zL2luY2x1ZGUvcWZpbGVpbmZvLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0
LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3FmaWxlLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9ob21lL3RoaW1tL3B1YmxpYy9nY2MtMi45
NS4yL2FscGhhLWRlYy1vc2Y0LjBlL2xpYi9nY2MtbGliL2FscGhhLWRlYy1vc2Y0LjBlLzIuOTUu
Mi9pbmNsdWRlL3N0ZGlvLmgiIDEgMwoKIyAxICIvaG9tZS90aGltbS9wdWJsaWMvZ2NjLTIuOTUu
Mi9hbHBoYS1kZWMtb3NmNC4wZS9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4wZS8yLjk1LjIv
aW5jbHVkZS9zdGRhcmcuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CiMgMSAiL2hvbWUvdGhpbW0vcHVibGljL2djYy0yLjk1LjIvYWxwaGEtZGVjLW9zZjQuMGUvbGli
L2djYy1saWIvYWxwaGEtZGVjLW9zZjQuMGUvMi45NS4yL2luY2x1ZGUvdmEtYWxwaGEuaCIgMSAz
CiAKCiAKCgoKCiAKCgoKCiAKCgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgY2hhciAqX19iYXNlOwkJ
CSAKICBpbnQgX19vZmZzZXQ7CQkJIAp9IF9fZ251Y192YV9saXN0OwoKCgoKIAoKCiMgMTI4ICIv
aG9tZS90aGltbS9wdWJsaWMvZ2NjLTIuOTUuMi9hbHBoYS1kZWMtb3NmNC4wZS9saWIvZ2NjLWxp
Yi9hbHBoYS1kZWMtb3NmNC4wZS8yLjk1LjIvaW5jbHVkZS92YS1hbHBoYS5oIiAzCgojIDM2ICIv
aG9tZS90aGltbS9wdWJsaWMvZ2NjLTIuOTUuMi9hbHBoYS1kZWMtb3NmNC4wZS9saWIvZ2NjLWxp
Yi9hbHBoYS1kZWMtb3NmNC4wZS8yLjk1LjIvaW5jbHVkZS9zdGRhcmcuaCIgMiAzCgojIDEzMyAi
L2hvbWUvdGhpbW0vcHVibGljL2djYy0yLjk1LjIvYWxwaGEtZGVjLW9zZjQuMGUvbGliL2djYy1s
aWIvYWxwaGEtZGVjLW9zZjQuMGUvMi45NS4yL2luY2x1ZGUvc3RkYXJnLmgiIDMKCgoKCgoKCgoK
IyAyMDkgIi9ob21lL3RoaW1tL3B1YmxpYy9nY2MtMi45NS4yL2FscGhhLWRlYy1vc2Y0LjBlL2xp
Yi9nY2MtbGliL2FscGhhLWRlYy1vc2Y0LjBlLzIuOTUuMi9pbmNsdWRlL3N0ZGFyZy5oIiAzCgoK
CgojIDIgIi9ob21lL3RoaW1tL3B1YmxpYy9nY2MtMi45NS4yL2FscGhhLWRlYy1vc2Y0LjBlL2xp
Yi9nY2MtbGliL2FscGhhLWRlYy1vc2Y0LjBlLzIuOTUuMi9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKIAoKIAogCgoKCiAKCgogCgoKCgoKCgoKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIAoK
CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlZWsuaCIgMSAz
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAKCgogCgoKCiAKCgoKCgoKIAoKCgoKCgoKCgoK
CiMgMTE5ICIvaG9tZS90aGltbS9wdWJsaWMvZ2NjLTIuOTUuMi9hbHBoYS1kZWMtb3NmNC4wZS9s
aWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4wZS8yLjk1LjIvaW5jbHVkZS9zdGRpby5oIiAyIDMK
Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQJX2NudDsKCXVuc2lnbmVkIGludAlfZmxhZzI7Cgl1bnNp
Z25lZCBjaGFyCSpfcHRyOwoJdW5zaWduZWQgY2hhcgkqX2Jhc2U7CglpbnQJX2J1ZnNpejsKCXNo
b3J0CV9mbGFnOwoJc2hvcnQJX2ZpbGU7CgoKCgoJY2hhcgkqX19uZXdiYXNlOwoJdm9pZAkqX2xv
Y2s7CQkJIAoJdW5zaWduZWQgY2hhcgkqX2J1ZmVuZHA7Cn0gRklMRTsKCmV4dGVybiBGSUxFCV9p
b2JbXTsKCgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7IApleHRlcm4gc2l6ZV90CWZyZWFkICAodm9p
ZCAqLCBzaXplX3QsIHNpemVfdCwgRklMRSAqKSAgOwpleHRlcm4gc2l6ZV90CWZ3cml0ZSAgKGNv
bnN0IHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUgKikgIDsKfSAKCgpleHRlcm4gIkMiIHsg
CmV4dGVybiBpbnQJX2Zsc2J1ZiAgKGludCwgRklMRSAqKSAgOwpleHRlcm4gaW50CV9maWxidWYg
IChGSUxFICopICA7CmV4dGVybiBpbnQgCWZlcnJvciAgKEZJTEUgKikgIDsKZXh0ZXJuIGludCAJ
ZmVvZiAgKEZJTEUgKikgIDsKZXh0ZXJuIHZvaWQgCWNsZWFyZXJyICAoRklMRSAqKSAgOwpleHRl
cm4gaW50IAlwdXRjaGFyICAoaW50KSAgOwpleHRlcm4gaW50IAlnZXRjaGFyICAodm9pZCkgIDsK
ZXh0ZXJuIGludCAJcHV0YyAgKGludCwgRklMRSAqKSAgOwpleHRlcm4gaW50IAlnZXRjICAoRklM
RSAqKSAgOwpleHRlcm4gaW50CXJlbW92ZSAgKGNvbnN0IGNoYXIgKikgIDsKZXh0ZXJuIGludAly
ZW5hbWUgIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikgIDsKZXh0ZXJuIEZJTEUgCSp0bXBm
aWxlICAodm9pZCkgIDsKZXh0ZXJuIGNoYXIgCSp0bXBuYW0gIChjaGFyICopICA7CmV4dGVybiBp
bnQgCWZjbG9zZSAgKEZJTEUgKikgIDsKZXh0ZXJuIGludCAJZmZsdXNoICAoRklMRSAqKSAgOwpl
eHRlcm4gRklMRQkqZm9wZW4gIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikgIDsKZXh0ZXJu
IEZJTEUgCSpmcmVvcGVuICAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIEZJTEUgKikgIDsK
ZXh0ZXJuIHZvaWQgCXNldGJ1ZiAgKEZJTEUgKiwgY2hhciAqKSAgOwpleHRlcm4gaW50IAlzZXR2
YnVmICAoRklMRSAqLCBjaGFyICosIGludCwgc2l6ZV90KSAgOwpleHRlcm4gaW50CWZwcmludGYg
IChGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKSAgOwpleHRlcm4gaW50CWZzY2FuZiAgKEZJTEUg
KiwgY29uc3QgY2hhciAqLCAuLi4pICA7CmV4dGVybiBpbnQJcHJpbnRmICAoY29uc3QgY2hhciAq
LCAuLi4pICA7CmV4dGVybiBpbnQJc2NhbmYgIChjb25zdCBjaGFyICosIC4uLikgIDsKZXh0ZXJu
IGludAlzcHJpbnRmICAoY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikgIDsKZXh0ZXJuIGludAlz
c2NhbmYgIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKSAgOwoKCgoKCgoKCiMgMSAi
L2hvbWUvdGhpbW0vcHVibGljL2djYy0yLjk1LjIvYWxwaGEtZGVjLW9zZjQuMGUvbGliL2djYy1s
aWIvYWxwaGEtZGVjLW9zZjQuMGUvMi45NS4yL2luY2x1ZGUvdmFfbGlzdC5oIiAxIDMKIAoKIyAx
ICIvaG9tZS90aGltbS9wdWJsaWMvZ2NjLTIuOTUuMi9hbHBoYS1kZWMtb3NmNC4wZS9saWIvZ2Nj
LWxpYi9hbHBoYS1kZWMtb3NmNC4wZS8yLjk1LjIvaW5jbHVkZS92YS1hbHBoYS5oIiAxIDMKIAoK
IAoKCgoKIAoKIyAyNSAiL2hvbWUvdGhpbW0vcHVibGljL2djYy0yLjk1LjIvYWxwaGEtZGVjLW9z
ZjQuMGUvbGliL2djYy1saWIvYWxwaGEtZGVjLW9zZjQuMGUvMi45NS4yL2luY2x1ZGUvdmEtYWxw
aGEuaCIgMwoKCiAKCgojIDEyOCAiL2hvbWUvdGhpbW0vcHVibGljL2djYy0yLjk1LjIvYWxwaGEt
ZGVjLW9zZjQuMGUvbGliL2djYy1saWIvYWxwaGEtZGVjLW9zZjQuMGUvMi45NS4yL2luY2x1ZGUv
dmEtYWxwaGEuaCIgMwoKIyAzICIvaG9tZS90aGltbS9wdWJsaWMvZ2NjLTIuOTUuMi9hbHBoYS1k
ZWMtb3NmNC4wZS9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4wZS8yLjk1LjIvaW5jbHVkZS92
YV9saXN0LmgiIDIgMwoKCgoKdHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0OwoKCgoKCgoK
CgojIDE5MSAiL2hvbWUvdGhpbW0vcHVibGljL2djYy0yLjk1LjIvYWxwaGEtZGVjLW9zZjQuMGUv
bGliL2djYy1saWIvYWxwaGEtZGVjLW9zZjQuMGUvMi45NS4yL2luY2x1ZGUvc3RkaW8uaCIgMiAz
CgpleHRlcm4gaW50ICB2ZnByaW50ZiAgKEZJTEUgKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFf
bGlzdCkgIDsKZXh0ZXJuIGludCAgdnByaW50ZiAgKGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xp
c3QpICA7CmV4dGVybiBpbnQgIHZzcHJpbnRmICAoY2hhciAqLCBjb25zdCBjaGFyICosIF9fZ251
Y192YV9saXN0KSAgOwojIDIwMyAiL2hvbWUvdGhpbW0vcHVibGljL2djYy0yLjk1LjIvYWxwaGEt
ZGVjLW9zZjQuMGUvbGliL2djYy1saWIvYWxwaGEtZGVjLW9zZjQuMGUvMi45NS4yL2luY2x1ZGUv
c3RkaW8uaCIgMwoKCgpleHRlcm4gaW50IAlmZ2V0YyAgKEZJTEUgKikgIDsKZXh0ZXJuIGNoYXIg
CSpmZ2V0cyAgKGNoYXIgKiwgaW50LCBGSUxFICopICA7CmV4dGVybiBpbnQgCWZwdXRjICAoaW50
LCBGSUxFICopICA7CmV4dGVybiBpbnQgCWZwdXRzICAoY29uc3QgY2hhciAqLCBGSUxFICopICA7
CmV4dGVybiBjaGFyIAkqZ2V0cyAgKGNoYXIgKikgIDsKZXh0ZXJuIGludCAJcHV0cyAgKGNvbnN0
IGNoYXIgKikgIDsKZXh0ZXJuIGludAl1bmdldGMgIChpbnQsIEZJTEUgKikgIDsKZXh0ZXJuIGlu
dAlmZ2V0cG9zICAoRklMRSAqLCBmcG9zX3QgKikgIDsKZXh0ZXJuIGludCAJZnNlZWsgIChGSUxF
ICosIGxvbmcsIGludCkgIDsKZXh0ZXJuIGludAlmc2V0cG9zICAoRklMRSAqLCBjb25zdCBmcG9z
X3QgKikgIDsKZXh0ZXJuIGxvbmcJZnRlbGwgIChGSUxFICopICA7CmV4dGVybiB2b2lkCXJld2lu
ZCAgKEZJTEUgKikgIDsKZXh0ZXJuIHZvaWQgCXBlcnJvciAgKGNvbnN0IGNoYXIgKikgIDsKCgoK
CgoKCgoKCiAKCgoKCgoKCgoKCgoKCn0gCgojIDI4NCAiL2hvbWUvdGhpbW0vcHVibGljL2djYy0y
Ljk1LjIvYWxwaGEtZGVjLW9zZjQuMGUvbGliL2djYy1saWIvYWxwaGEtZGVjLW9zZjQuMGUvMi45
NS4yL2luY2x1ZGUvc3RkaW8uaCIgMwoKCiMgMzM3ICIvaG9tZS90aGltbS9wdWJsaWMvZ2NjLTIu
OTUuMi9hbHBoYS1kZWMtb3NmNC4wZS9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4wZS8yLjk1
LjIvaW5jbHVkZS9zdGRpby5oIiAzCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgpleHRl
cm4gIkMiIHsgCmV4dGVybiBpbnQgCWZpbGVubyAgKEZJTEUgKikgIDsKZXh0ZXJuIEZJTEUgCSpm
ZG9wZW4gIChpbnQsIGNvbnN0IGNoYXIgKikgIDsKCgoKCmV4dGVybiBjaGFyICpjdXNlcmlkICAo
Y2hhciAqKSAgOwp9IAoKCgoKCgoKCgoKCgoKIAojIDEgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIg
MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAKCgogCgoKIAogCgoKCgoKCgoKCmV4dGVy
biAiQyIKewoKZXh0ZXJuIGludCBnZXRvcHQgIChpbnQsIGNoYXIgKiBjb25zdCBbXSwgY29uc3Qg
Y2hhciAqKSAgOwoKfQoKCmV4dGVybiBjaGFyICpvcHRhcmc7CmV4dGVybiBpbnQgb3B0aW5kOwpl
eHRlcm4gaW50IG9wdG9wdDsKZXh0ZXJuIGludCBvcHRlcnI7CgoKIyAzOTAgIi9ob21lL3RoaW1t
L3B1YmxpYy9nY2MtMi45NS4yL2FscGhhLWRlYy1vc2Y0LjBlL2xpYi9nY2MtbGliL2FscGhhLWRl
Yy1vc2Y0LjBlLzIuOTUuMi9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKIAoKCgpleHRlcm4gIkMiIHsg
CmV4dGVybiBjaGFyCSpjdGVybWlkICAoY2hhciAqKSAgOwpleHRlcm4gaW50IAlnZXR3ICAoRklM
RSAqKSAgOwpleHRlcm4gaW50IAlwY2xvc2UgIChGSUxFICopICA7CmV4dGVybiBpbnQgCXB1dHcg
IChpbnQsIEZJTEUqKSAgOwpleHRlcm4gRklMRSAJKnBvcGVuICAoY29uc3QgY2hhciAqLCBjb25z
dCBjaGFyICopICA7CmV4dGVybiBjaGFyIAkqdGVtcG5hbSAgKGNvbnN0IGNoYXIqLCBjb25zdCBj
aGFyKikgIDsKfSAKCgoKCgoKIyAxICIvaG9tZS90aGltbS9wdWJsaWMvZ2NjLTIuOTUuMi9hbHBo
YS1kZWMtb3NmNC4wZS9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4wZS8yLjk1LjIvaW5jbHVk
ZS9zeXMvbGltaXRzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgogCgogCiAKCgoK
IAoKCiAKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKCgoKCiAKCgoKCgoK
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL21hY2hpbmUvbWFjaGxpbWl0cy5oIiAxIDMKIAoKCgoKCgoK
CgoKCgoKCgoKCgoKCgogCgoKIAoKIAogCgoKCiAKCgogCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoJCQkJCSAKCgoKCQkJCQkgCgoKCgoKCgogCgoKCiMgODAgIi9ob21lL3Ro
aW1tL3B1YmxpYy9nY2MtMi45NS4yL2FscGhhLWRlYy1vc2Y0LjBlL2xpYi9nY2MtbGliL2FscGhh
LWRlYy1vc2Y0LjBlLzIuOTUuMi9pbmNsdWRlL3N5cy9saW1pdHMuaCIgMiAzCgoKCgoKIAoKCgoK
CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCiMg
MSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNsaW1pdHMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKIAoKCiAKCiAKIAoKIAoKCgogCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIyAxNDEgIi9ob21lL3RoaW1tL3B1YmxpYy9nY2MtMi45NS4yL2FscGhhLWRl
Yy1vc2Y0LjBlL2xpYi9nY2MtbGliL2FscGhhLWRlYy1vc2Y0LjBlLzIuOTUuMi9pbmNsdWRlL3N5
cy9saW1pdHMuaCIgMiAzCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgkJCQkJ
IAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9tYWNoaW5lL21hY2h0aW1lLmgiIDEgMwogCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiAKCgogCgogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgogCgoK
IAoKCgogCgoKCgoKCgoKCiMgMjM4ICIvaG9tZS90aGltbS9wdWJsaWMvZ2NjLTIuOTUuMi9hbHBo
YS1kZWMtb3NmNC4wZS9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4wZS8yLjk1LjIvaW5jbHVk
ZS9zeXMvbGltaXRzLmgiIDIgMwoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDI2OSAiL2hvbWUvdGhp
bW0vcHVibGljL2djYy0yLjk1LjIvYWxwaGEtZGVjLW9zZjQuMGUvbGliL2djYy1saWIvYWxwaGEt
ZGVjLW9zZjQuMGUvMi45NS4yL2luY2x1ZGUvc3lzL2xpbWl0cy5oIiAzCiAKCgojIDQwOSAiL2hv
bWUvdGhpbW0vcHVibGljL2djYy0yLjk1LjIvYWxwaGEtZGVjLW9zZjQuMGUvbGliL2djYy1saWIv
YWxwaGEtZGVjLW9zZjQuMGUvMi45NS4yL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKIAoKCgoKCgoK
CgogCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgeyAKZXh0ZXJuIHZvaWQgCXNldGJ1ZmZl
ciAgKEZJTEUgKiwgY2hhciosIGludCkgIDsKZXh0ZXJuIHZvaWQgCXNldGxpbmVidWYgIChGSUxF
ICopICA7Cn0gCgoKCiMgNDg4ICIvaG9tZS90aGltbS9wdWJsaWMvZ2NjLTIuOTUuMi9hbHBoYS1k
ZWMtb3NmNC4wZS9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4wZS8yLjk1LjIvaW5jbHVkZS9z
dGRpby5oIiAzCgoKCgoKIyA0NCAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dv
cmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xZmlsZS5oIiAyCgoKCmNsYXNzIFFEaXI7CgoKY2xhc3Mg
ICBRRmlsZSA6IHB1YmxpYyBRSU9EZXZpY2UJCQkgCnsKcHVibGljOgogICAgUUZpbGUoKTsKICAg
IFFGaWxlKCBjb25zdCBRU3RyaW5nICZuYW1lICk7CiAgIH5RRmlsZSgpOwoKICAgIFFTdHJpbmcJ
bmFtZSgpCWNvbnN0OwogICAgdm9pZAlzZXROYW1lKCBjb25zdCBRU3RyaW5nICZuYW1lICk7Cgog
ICAgdHlwZWRlZiBRQ1N0cmluZyAoKkVuY29kZXJGbikoIGNvbnN0IFFTdHJpbmcgJmZpbGVOYW1l
ICk7CiAgICB0eXBlZGVmIFFTdHJpbmcgKCpEZWNvZGVyRm4pKCBjb25zdCBRQ1N0cmluZyAmbG9j
YWxmaWxlTmFtZSApOwogICAgc3RhdGljIFFDU3RyaW5nIGVuY29kZU5hbWUoIGNvbnN0IFFTdHJp
bmcgJmZpbGVOYW1lICk7CiAgICBzdGF0aWMgUVN0cmluZyBkZWNvZGVOYW1lKCBjb25zdCBRQ1N0
cmluZyAmbG9jYWxGaWxlTmFtZSApOwogICAgc3RhdGljIHZvaWQgc2V0RW5jb2RpbmdGdW5jdGlv
biggRW5jb2RlckZuICk7CiAgICBzdGF0aWMgdm9pZCBzZXREZWNvZGluZ0Z1bmN0aW9uKCBEZWNv
ZGVyRm4gKTsKCiAgICBib29sCWV4aXN0cygpICAgY29uc3Q7CiAgICBzdGF0aWMgYm9vbCBleGlz
dHMoIGNvbnN0IFFTdHJpbmcgJmZpbGVOYW1lICk7CgogICAgYm9vbAlyZW1vdmUoKTsKICAgIHN0
YXRpYyBib29sIHJlbW92ZSggY29uc3QgUVN0cmluZyAmZmlsZU5hbWUgKTsKCiAgICBib29sCW9w
ZW4oIGludCApOwogICAgYm9vbAlvcGVuKCBpbnQsIEZJTEUgKiApOwogICAgYm9vbAlvcGVuKCBp
bnQsIGludCApOwogICAgdm9pZAljbG9zZSgpOwogICAgdm9pZAlmbHVzaCgpOwoKICAgIHVpbnQJ
c2l6ZSgpCWNvbnN0OwogICAgaW50CQlhdCgpCWNvbnN0OwogICAgYm9vbAlhdCggaW50ICk7CiAg
ICBib29sCWF0RW5kKCkgY29uc3Q7CgogICAgaW50CQlyZWFkQmxvY2soIGNoYXIgKmRhdGEsIHVp
bnQgbGVuICk7CiAgICBpbnQJCXdyaXRlQmxvY2soIGNvbnN0IGNoYXIgKmRhdGEsIHVpbnQgbGVu
ICk7CiAgICBpbnQJCXdyaXRlQmxvY2soIGNvbnN0IFFCeXRlQXJyYXkmIGRhdGEgKQoJCSAgICB7
IHJldHVybiBRSU9EZXZpY2U6OndyaXRlQmxvY2soZGF0YSk7IH0KICAgIGludAkJcmVhZExpbmUo
IGNoYXIgKmRhdGEsIHVpbnQgbWF4bGVuICk7CiAgICBpbnQJCXJlYWRMaW5lKCBRU3RyaW5nICYs
IHVpbnQgbWF4bGVuICk7CgogICAgaW50CQlnZXRjaCgpOwogICAgaW50CQlwdXRjaCggaW50ICk7
CiAgICBpbnQJCXVuZ2V0Y2goIGludCApOwoKICAgIGludAkJaGFuZGxlKCkgY29uc3Q7Cgpwcm90
ZWN0ZWQ6CiAgICBRU3RyaW5nCWZuOwogICAgRklMRSAgICAgICAqZmg7CiAgICBpbnQJCWZkOwog
ICAgaW50CQlsZW5ndGg7CiAgICBib29sCWV4dF9mOwogICAgdm9pZCAqIAlkOwoKcHJpdmF0ZToK
ICAgIHZvaWQJaW5pdCgpOwogICAgUUNTdHJpbmcgdW5nZXRjaEJ1ZmZlcjsKCnByaXZhdGU6CSAK
CiAgICBRRmlsZSggY29uc3QgUUZpbGUgJiApOwogICAgUUZpbGUgJm9wZXJhdG9yPSggY29uc3Qg
UUZpbGUgJiApOwoKfTsKCgppbmxpbmUgUVN0cmluZyBRRmlsZTo6bmFtZSgpIGNvbnN0CnsgcmV0
dXJuIGZuOyB9CgppbmxpbmUgaW50IFFGaWxlOjphdCgpIGNvbnN0CnsgcmV0dXJuIGlvSW5kZXg7
IH0KCgoKIyA0MiAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQt
Mi4yLjMvaW5jbHVkZS9xZmlsZWluZm8uaCIgMgoKCgoKCmNsYXNzIFFEaXI7CnN0cnVjdCBRRmls
ZUluZm9DYWNoZTsKCgpjbGFzcyAgIFFGaWxlSW5mbwkJCQkgICAgCnsKcHVibGljOgogICAgZW51
bSBQZXJtaXNzaW9uU3BlYyB7CglSZWFkVXNlciAgPSAwNDAwLCBXcml0ZVVzZXIgID0gMDIwMCwg
RXhlVXNlciAgPSAwMTAwLAoJUmVhZEdyb3VwID0gMDA0MCwgV3JpdGVHcm91cCA9IDAwMjAsIEV4
ZUdyb3VwID0gMDAxMCwKCVJlYWRPdGhlciA9IDAwMDQsIFdyaXRlT3RoZXIgPSAwMDAyLCBFeGVP
dGhlciA9IDAwMDEgfTsKCiAgICBRRmlsZUluZm8oKTsKICAgIFFGaWxlSW5mbyggY29uc3QgUVN0
cmluZyAmZmlsZSApOwogICAgUUZpbGVJbmZvKCBjb25zdCBRRmlsZSAmICk7CgogICAgUUZpbGVJ
bmZvKCBjb25zdCBRRGlyICYsIGNvbnN0IFFTdHJpbmcgJmZpbGVOYW1lICk7CgogICAgUUZpbGVJ
bmZvKCBjb25zdCBRRmlsZUluZm8gJiApOwogICB+UUZpbGVJbmZvKCk7CgogICAgUUZpbGVJbmZv
ICAmb3BlcmF0b3I9KCBjb25zdCBRRmlsZUluZm8gJiApOwoKICAgIHZvaWQJc2V0RmlsZSggY29u
c3QgUVN0cmluZyAmZmlsZSApOwogICAgdm9pZAlzZXRGaWxlKCBjb25zdCBRRmlsZSAmICk7Cgog
ICAgdm9pZAlzZXRGaWxlKCBjb25zdCBRRGlyICYsIGNvbnN0IFFTdHJpbmcgJmZpbGVOYW1lICk7
CgogICAgYm9vbAlleGlzdHMoKQljb25zdDsKICAgIHZvaWQJcmVmcmVzaCgpCWNvbnN0OwogICAg
Ym9vbAljYWNoaW5nKCkJY29uc3Q7CiAgICB2b2lkCXNldENhY2hpbmcoIGJvb2wgKTsKCiAgICBR
U3RyaW5nCWZpbGVQYXRoKCkJY29uc3Q7CiAgICBRU3RyaW5nCWZpbGVOYW1lKCkJY29uc3Q7Cgog
ICAgUVN0cmluZwlhYnNGaWxlUGF0aCgpCWNvbnN0OwoKICAgIFFTdHJpbmcJYmFzZU5hbWUoKQlj
b25zdDsKICAgIFFTdHJpbmcJZXh0ZW5zaW9uKCBib29sIGNvbXBsZXRlID0gMSAgKSBjb25zdDsK
CgogICAgUVN0cmluZwlkaXJQYXRoKCBib29sIGFic1BhdGggPSAwICApIGNvbnN0OwoKCiAgICBR
RGlyCWRpciggYm9vbCBhYnNQYXRoID0gMCAgKQljb25zdDsKCiAgICBib29sCWlzUmVhZGFibGUo
KQljb25zdDsKICAgIGJvb2wJaXNXcml0YWJsZSgpCWNvbnN0OwogICAgYm9vbAlpc0V4ZWN1dGFi
bGUoKQljb25zdDsKCgogICAgYm9vbAlpc1JlbGF0aXZlKCkJY29uc3Q7CiAgICBib29sCWNvbnZl
cnRUb0FicygpOwoKCiAgICBib29sCWlzRmlsZSgpCWNvbnN0OwogICAgYm9vbAlpc0RpcigpCQlj
b25zdDsKICAgIGJvb2wJaXNTeW1MaW5rKCkJY29uc3Q7CgogICAgUVN0cmluZwlyZWFkTGluaygp
CWNvbnN0OwoKICAgIFFTdHJpbmcJb3duZXIoKQkJY29uc3Q7CiAgICB1aW50CW93bmVySWQoKQlj
b25zdDsKICAgIFFTdHJpbmcJZ3JvdXAoKQkJY29uc3Q7CiAgICB1aW50CWdyb3VwSWQoKQljb25z
dDsKCiAgICBib29sCXBlcm1pc3Npb24oIGludCBwZXJtaXNzaW9uU3BlYyApIGNvbnN0OwoKICAg
IHVpbnQJc2l6ZSgpCQljb25zdDsKCiAgICBRRGF0ZVRpbWUJbGFzdE1vZGlmaWVkKCkJY29uc3Q7
CiAgICBRRGF0ZVRpbWUJbGFzdFJlYWQoKQljb25zdDsKCnByaXZhdGU6CiAgICB2b2lkCWRvU3Rh
dCgpIGNvbnN0OwogICAgc3RhdGljIHZvaWQgc2xhc2hpZnkoIFFTdHJpbmcgJiApOwogICAgc3Rh
dGljIHZvaWQgbWFrZUFicyggUVN0cmluZyAmICk7CiAgICAKICAgIFFTdHJpbmcJZm47CiAgICBR
RmlsZUluZm9DYWNoZSAqZmljOwogICAgYm9vbAljYWNoZTsKfTsKCgppbmxpbmUgYm9vbCBRRmls
ZUluZm86OmNhY2hpbmcoKSBjb25zdAp7CiAgICByZXR1cm4gY2FjaGU7Cn0KCgoKIyA0MyAiL2Ft
ZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9x
ZGlyLmgiIDIKCgoKCnR5cGVkZWYgUUxpc3Q8UUZpbGVJbmZvPiBRRmlsZUluZm9MaXN0Owp0eXBl
ZGVmIFFMaXN0SXRlcmF0b3I8UUZpbGVJbmZvPiBRRmlsZUluZm9MaXN0SXRlcmF0b3I7CmNsYXNz
IFFTdHJpbmdMaXN0OwoKCmNsYXNzICAgUURpcgp7CnB1YmxpYzoKICAgIGVudW0gRmlsdGVyU3Bl
YyB7IERpcnMJICAgID0gMHgwMDEsCgkJICAgICAgRmlsZXMJICAgID0gMHgwMDIsCgkJICAgICAg
RHJpdmVzCSAgICA9IDB4MDA0LAoJCSAgICAgIE5vU3ltTGlua3MgICAgPSAweDAwOCwKCQkgICAg
ICBBbGwJICAgID0gMHgwMDcsCgkJICAgICAgIFR5cGVNYXNrCSAgICA9IDB4MDBGLAoKCQkgICAg
ICBSZWFkYWJsZQkgICAgPSAweDAxMCwKCQkgICAgICBXcml0YWJsZQkgICAgPSAweDAyMCwKCQkg
ICAgICBFeGVjdXRhYmxlICAgID0gMHgwNDAsCgkJICAgICAgIFJXRU1hc2sJICAgID0gMHgwNzAs
CgoJCSAgICAgIE1vZGlmaWVkCSAgICA9IDB4MDgwLAoJCSAgICAgIEhpZGRlbgkgICAgPSAweDEw
MCwKCQkgICAgICBTeXN0ZW0JICAgID0gMHgyMDAsCgkJICAgICAgIEFjY2Vzc01hc2sgICAgPSAw
eDNGMCwKCgkJICAgICAgRGVmYXVsdEZpbHRlciA9IC0xIH07CgogICAgZW51bSBTb3J0U3BlYyAg
IHsgTmFtZQkgICAgPSAweDAwLAoJCSAgICAgIFRpbWUJICAgID0gMHgwMSwKCQkgICAgICBTaXpl
CSAgICA9IDB4MDIsCgkJICAgICAgVW5zb3J0ZWQJICAgID0gMHgwMywKCQkgICAgICAgU29ydEJ5
TWFzayAgICA9IDB4MDMsCgoJCSAgICAgIERpcnNGaXJzdAkgICAgPSAweDA0LAoJCSAgICAgIFJl
dmVyc2VkCSAgICA9IDB4MDgsCgkJICAgICAgSWdub3JlQ2FzZSAgICA9IDB4MTAsCgkJICAgICAg
RGVmYXVsdFNvcnQgICA9IC0xIH07CgogICAgUURpcigpOwogICAgUURpciggY29uc3QgUVN0cmlu
ZyAmcGF0aCwgY29uc3QgUVN0cmluZyAmbmFtZUZpbHRlciA9IFFTdHJpbmc6Om51bGwsCgkgIGlu
dCBzb3J0U3BlYyA9IE5hbWUgfCBJZ25vcmVDYXNlLCBpbnQgZmlsdGVyU3BlYyA9IEFsbCApOwog
ICAgUURpciggY29uc3QgUURpciAmICk7CgogICAgdmlydHVhbCB+UURpcigpOwoKICAgIFFEaXIg
ICAgICAgJm9wZXJhdG9yPSggY29uc3QgUURpciAmICk7CiAgICBRRGlyICAgICAgICZvcGVyYXRv
cj0oIGNvbnN0IFFTdHJpbmcgJnBhdGggKTsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0UGF0aCggY29u
c3QgUVN0cmluZyAmcGF0aCApOwogICAgdmlydHVhbCBRU3RyaW5nIHBhdGgoKQkJY29uc3Q7CiAg
ICB2aXJ0dWFsIFFTdHJpbmcgYWJzUGF0aCgpCWNvbnN0OwogICAgdmlydHVhbCBRU3RyaW5nIGNh
bm9uaWNhbFBhdGgoKQljb25zdDsKCiAgICB2aXJ0dWFsIFFTdHJpbmcgZGlyTmFtZSgpIGNvbnN0
OwogICAgdmlydHVhbCBRU3RyaW5nIGZpbGVQYXRoKCBjb25zdCBRU3RyaW5nICZmaWxlTmFtZSwK
CQkJICAgICAgYm9vbCBhY2NlcHRBYnNQYXRoID0gMSAgKSBjb25zdDsKICAgIHZpcnR1YWwgUVN0
cmluZyBhYnNGaWxlUGF0aCggY29uc3QgUVN0cmluZyAmZmlsZU5hbWUsCgkJCQkgYm9vbCBhY2Nl
cHRBYnNQYXRoID0gMSAgKSBjb25zdDsKCiAgICBzdGF0aWMgUVN0cmluZyBjb252ZXJ0U2VwYXJh
dG9ycyggY29uc3QgUVN0cmluZyAmcGF0aE5hbWUgKTsKCiAgICB2aXJ0dWFsIGJvb2wgY2QoIGNv
bnN0IFFTdHJpbmcgJmRpck5hbWUsIGJvb2wgYWNjZXB0QWJzUGF0aCA9IDEgICk7CiAgICB2aXJ0
dWFsIGJvb2wgY2RVcCgpOwoKICAgIFFTdHJpbmcJbmFtZUZpbHRlcigpIGNvbnN0OwogICAgdmly
dHVhbCB2b2lkIHNldE5hbWVGaWx0ZXIoIGNvbnN0IFFTdHJpbmcgJm5hbWVGaWx0ZXIgKTsKICAg
IEZpbHRlclNwZWMgZmlsdGVyKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsdGVyKCBp
bnQgZmlsdGVyU3BlYyApOwogICAgU29ydFNwZWMgc29ydGluZygpIGNvbnN0OwogICAgdmlydHVh
bCB2b2lkIHNldFNvcnRpbmcoIGludCBzb3J0U3BlYyApOwoKICAgIGJvb2wJbWF0Y2hBbGxEaXJz
KCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0TWF0Y2hBbGxEaXJzKCBib29sICk7CgogICAg
dWludCBjb3VudCgpIGNvbnN0OwogICAgUVN0cmluZwlvcGVyYXRvcltdKCBpbnQgKSBjb25zdDsK
ICAgIAogICAgdmlydHVhbCBRU3RyTGlzdCBlbmNvZGVkRW50cnlMaXN0KCBpbnQgZmlsdGVyU3Bl
YyA9IERlZmF1bHRGaWx0ZXIsCgkJCQkgICAgICAgaW50IHNvcnRTcGVjICAgPSBEZWZhdWx0U29y
dCAgKSBjb25zdDsKICAgIHZpcnR1YWwgUVN0ckxpc3QgZW5jb2RlZEVudHJ5TGlzdCggY29uc3Qg
UVN0cmluZyAmbmFtZUZpbHRlciwKCQkJCSAgICAgICBpbnQgZmlsdGVyU3BlYyA9IERlZmF1bHRG
aWx0ZXIsCgkJCQkgICAgICAgaW50IHNvcnRTcGVjICAgPSBEZWZhdWx0U29ydCAgICkgY29uc3Q7
CiAgICB2aXJ0dWFsIFFTdHJpbmdMaXN0IGVudHJ5TGlzdCggaW50IGZpbHRlclNwZWMgPSBEZWZh
dWx0RmlsdGVyLAoJCQkJICAgaW50IHNvcnRTcGVjICAgPSBEZWZhdWx0U29ydCAgKSBjb25zdDsK
ICAgIHZpcnR1YWwgUVN0cmluZ0xpc3QgZW50cnlMaXN0KCBjb25zdCBRU3RyaW5nICZuYW1lRmls
dGVyLAoJCQkJICAgaW50IGZpbHRlclNwZWMgPSBEZWZhdWx0RmlsdGVyLAoJCQkJICAgaW50IHNv
cnRTcGVjICAgPSBEZWZhdWx0U29ydCAgICkgY29uc3Q7CgogICAgdmlydHVhbCBjb25zdCBRRmls
ZUluZm9MaXN0ICplbnRyeUluZm9MaXN0KCBpbnQgZmlsdGVyU3BlYyA9IERlZmF1bHRGaWx0ZXIs
CgkJCQkJCWludCBzb3J0U3BlYyA9IERlZmF1bHRTb3J0ICkgY29uc3Q7CiAgICB2aXJ0dWFsIGNv
bnN0IFFGaWxlSW5mb0xpc3QgKmVudHJ5SW5mb0xpc3QoIGNvbnN0IFFTdHJpbmcgJm5hbWVGaWx0
ZXIsCgkJCQkJCWludCBmaWx0ZXJTcGVjID0gRGVmYXVsdEZpbHRlciwKCQkJCQkJaW50IHNvcnRT
cGVjID0gRGVmYXVsdFNvcnQgKSBjb25zdDsKCiAgICBzdGF0aWMgY29uc3QgUUZpbGVJbmZvTGlz
dCAqZHJpdmVzKCk7CgogICAgdmlydHVhbCBib29sIG1rZGlyKCBjb25zdCBRU3RyaW5nICZkaXJO
YW1lLAoJCQlib29sIGFjY2VwdEFic1BhdGggPSAxICApIGNvbnN0OwogICAgdmlydHVhbCBib29s
IHJtZGlyKCBjb25zdCBRU3RyaW5nICZkaXJOYW1lLAoJCQlib29sIGFjY2VwdEFic1BhdGggPSAx
ICApIGNvbnN0OwoKICAgIHZpcnR1YWwgYm9vbCBpc1JlYWRhYmxlKCkgY29uc3Q7CiAgICB2aXJ0
dWFsIGJvb2wgZXhpc3RzKCkgICBjb25zdDsKICAgIHZpcnR1YWwgYm9vbCBpc1Jvb3QoKSAgIGNv
bnN0OwoKICAgIHZpcnR1YWwgYm9vbCBpc1JlbGF0aXZlKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZv
aWQgY29udmVydFRvQWJzKCk7CgogICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFE
aXIgJiApIGNvbnN0OwogICAgdmlydHVhbCBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFEaXIgJiAp
IGNvbnN0OwoKICAgIHZpcnR1YWwgYm9vbCByZW1vdmUoIGNvbnN0IFFTdHJpbmcgJmZpbGVOYW1l
LAoJCQkgYm9vbCBhY2NlcHRBYnNQYXRoID0gMSAgKTsKICAgIHZpcnR1YWwgYm9vbCByZW5hbWUo
IGNvbnN0IFFTdHJpbmcgJm5hbWUsIGNvbnN0IFFTdHJpbmcgJm5ld05hbWUsCgkJCSBib29sIGFj
Y2VwdEFic1BhdGhzID0gMSAgICk7CiAgICB2aXJ0dWFsIGJvb2wgZXhpc3RzKCBjb25zdCBRU3Ry
aW5nICZuYW1lLAoJCQkgYm9vbCBhY2NlcHRBYnNQYXRoID0gMSAgKTsKCiAgICBzdGF0aWMgY2hh
ciBzZXBhcmF0b3IoKTsKCiAgICBzdGF0aWMgYm9vbCBzZXRDdXJyZW50KCBjb25zdCBRU3RyaW5n
ICZwYXRoICk7CiAgICBzdGF0aWMgUURpciBjdXJyZW50KCk7CiAgICBzdGF0aWMgUURpciBob21l
KCk7CiAgICBzdGF0aWMgUURpciByb290KCk7CiAgICBzdGF0aWMgUVN0cmluZyBjdXJyZW50RGly
UGF0aCgpOwogICAgc3RhdGljIFFTdHJpbmcgaG9tZURpclBhdGgoKTsKICAgIHN0YXRpYyBRU3Ry
aW5nIHJvb3REaXJQYXRoKCk7CgogICAgc3RhdGljIGJvb2wgbWF0Y2goIGNvbnN0IFFTdHJpbmdM
aXN0ICZmaWx0ZXJzLCBjb25zdCBRU3RyaW5nICZmaWxlTmFtZSApOwogICAgc3RhdGljIGJvb2wg
bWF0Y2goIGNvbnN0IFFTdHJpbmcgJmZpbHRlciwgY29uc3QgUVN0cmluZyAmZmlsZU5hbWUgKTsK
ICAgIHN0YXRpYyBRU3RyaW5nIGNsZWFuRGlyUGF0aCggY29uc3QgUVN0cmluZyAmZGlyUGF0aCAp
OwogICAgc3RhdGljIGJvb2wgaXNSZWxhdGl2ZVBhdGgoIGNvbnN0IFFTdHJpbmcgJnBhdGggKTsK
CnByaXZhdGU6CiAgICB2b2lkIGluaXQoKTsKICAgIHZpcnR1YWwgYm9vbCByZWFkRGlyRW50cmll
cyggY29uc3QgUVN0cmluZyAmbmFtZUZpbHRlciwKCQkJCSBpbnQgRmlsdGVyU3BlYywgaW50IFNv
cnRTcGVjICApOwoKICAgIHN0YXRpYyB2b2lkIHNsYXNoaWZ5ICggUVN0cmluZyAmKTsKCiAgICBR
U3RyaW5nCWRQYXRoOwogICAgUVN0cmluZ0xpc3QgICAqZkxpc3Q7CiAgICBRRmlsZUluZm9MaXN0
ICpmaUxpc3Q7CiAgICBRU3RyaW5nCW5hbWVGaWx0OwogICAgRmlsdGVyU3BlYwlmaWx0UzsKICAg
IFNvcnRTcGVjCXNvcnRTOwogICAgdWludAlkaXJ0eQk6IDE7CiAgICB1aW50CWFsbERpcnMgOiAx
Owp9OwoKCmlubGluZSBRU3RyaW5nIFFEaXI6OnBhdGgoKSBjb25zdAp7CiAgICByZXR1cm4gZFBh
dGg7Cn0KCmlubGluZSBRU3RyaW5nIFFEaXI6Om5hbWVGaWx0ZXIoKSBjb25zdAp7CiAgICByZXR1
cm4gbmFtZUZpbHQ7Cn0KCmlubGluZSBRRGlyOjpGaWx0ZXJTcGVjIFFEaXI6OmZpbHRlcigpIGNv
bnN0CnsKICAgIHJldHVybiBmaWx0UzsKfQoKaW5saW5lIFFEaXI6OlNvcnRTcGVjIFFEaXI6OnNv
cnRpbmcoKSBjb25zdAp7CiAgICByZXR1cm4gc29ydFM7Cn0KCmlubGluZSBib29sIFFEaXI6Om1h
dGNoQWxsRGlycygpIGNvbnN0CnsKICAgIHJldHVybiBhbGxEaXJzOwp9CgppbmxpbmUgYm9vbCBR
RGlyOjpvcGVyYXRvciE9KCBjb25zdCBRRGlyICZkICkgY29uc3QKewogICAgcmV0dXJuICEoKnRo
aXMgPT0gZCk7Cn0KCgpzdHJ1Y3QgUURpclNvcnRJdGVtIHsKICAgIFFTdHJpbmcgZmlsZW5hbWVf
Y2FjaGU7CiAgICBRRmlsZUluZm8qIGl0ZW07Cn07CgoKCiMgNDUgImtlcm5lbC9xbmV0d29ya3By
b3RvY29sLmgiIDIKCiMgMSAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtk
aXIvcXQtMi4yLjMvaW5jbHVkZS9xc3RyaW5nbGlzdC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3Nm
NC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xdmFsdWVsaXN0LmgiIDEKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4K
Y2xhc3MgICBRVmFsdWVMaXN0Tm9kZQp7CnB1YmxpYzoKICAgIFFWYWx1ZUxpc3ROb2RlKCBjb25z
dCBUJiB0ICkgOiBkYXRhKCB0ICkgeyB9CiAgICBRVmFsdWVMaXN0Tm9kZSgpIHsgfQoKCgoKCiAg
ICBRVmFsdWVMaXN0Tm9kZTxUPiogbmV4dDsKICAgIFFWYWx1ZUxpc3ROb2RlPFQ+KiBwcmV2Owog
ICAgVCBkYXRhOwp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4KY2xhc3MgICBRVmFsdWVMaXN0SXRlcmF0
b3IKewogcHVibGljOgogICAgIAoKCiAgICB0eXBlZGVmIFFWYWx1ZUxpc3ROb2RlPFQ+KiBOb2Rl
UHRyOwoKICAgICAKCgogICAgTm9kZVB0ciBub2RlOwoKICAgICAKCgogICAgUVZhbHVlTGlzdEl0
ZXJhdG9yKCkgOiBub2RlKCAwICkge30KICAgIFFWYWx1ZUxpc3RJdGVyYXRvciggTm9kZVB0ciBw
ICkgOiBub2RlKCBwICkge30KICAgIFFWYWx1ZUxpc3RJdGVyYXRvciggY29uc3QgUVZhbHVlTGlz
dEl0ZXJhdG9yPFQ+JiBpdCApIDogbm9kZSggaXQubm9kZSApIHt9CgogICAgYm9vbCBvcGVyYXRv
cj09KCBjb25zdCBRVmFsdWVMaXN0SXRlcmF0b3I8VD4mIGl0ICkgY29uc3QgeyByZXR1cm4gbm9k
ZSA9PSBpdC5ub2RlOyB9CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFWYWx1ZUxpc3RJdGVy
YXRvcjxUPiYgaXQgKSBjb25zdCB7IHJldHVybiBub2RlICE9IGl0Lm5vZGU7IH0KICAgIGNvbnN0
IFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG5vZGUtPmRhdGE7IH0KICAgIFQmIG9wZXJh
dG9yKigpIHsgcmV0dXJuIG5vZGUtPmRhdGE7IH0KCiAgICAgCiAgICAgCgogICAgUVZhbHVlTGlz
dEl0ZXJhdG9yPFQ+JiBvcGVyYXRvcisrKCkgewoJbm9kZSA9IG5vZGUtPm5leHQ7CglyZXR1cm4g
KnRoaXM7CiAgICB9CgogICAgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+IG9wZXJhdG9yKysoaW50KSB7
CglRVmFsdWVMaXN0SXRlcmF0b3I8VD4gdG1wID0gKnRoaXM7Cglub2RlID0gbm9kZS0+bmV4dDsK
CXJldHVybiB0bXA7CiAgICB9CgogICAgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+JiBvcGVyYXRvci0t
KCkgewoJbm9kZSA9IG5vZGUtPnByZXY7CglyZXR1cm4gKnRoaXM7CiAgICB9CgogICAgUVZhbHVl
TGlzdEl0ZXJhdG9yPFQ+IG9wZXJhdG9yLS0oaW50KSB7CglRVmFsdWVMaXN0SXRlcmF0b3I8VD4g
dG1wID0gKnRoaXM7Cglub2RlID0gbm9kZS0+cHJldjsKCXJldHVybiB0bXA7CiAgICB9Cn07Cgp0
ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yCnsKIHB1Ymxp
YzoKICAgICAKCgogICAgdHlwZWRlZiBRVmFsdWVMaXN0Tm9kZTxUPiogTm9kZVB0cjsKCiAgICAg
CgoKICAgIE5vZGVQdHIgbm9kZTsKCiAgICAgCgoKICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9y
KCkgOiBub2RlKCAwICkge30KICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yKCBOb2RlUHRyIHAg
KSA6IG5vZGUoIHAgKSB7fQogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3IoIGNvbnN0IFFWYWx1
ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+JiBpdCApIDogbm9kZSggaXQubm9kZSApIHt9CiAgICBRVmFs
dWVMaXN0Q29uc3RJdGVyYXRvciggY29uc3QgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+JiBpdCApIDog
bm9kZSggaXQubm9kZSApIHt9CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRVmFsdWVMaXN0
Q29uc3RJdGVyYXRvcjxUPiYgaXQgKSBjb25zdCB7IHJldHVybiBub2RlID09IGl0Lm5vZGU7IH0K
ICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4mIGl0
ICkgY29uc3QgeyByZXR1cm4gbm9kZSAhPSBpdC5ub2RlOyB9CiAgICBjb25zdCBUJiBvcGVyYXRv
ciooKSBjb25zdCB7IHJldHVybiBub2RlLT5kYXRhOyB9CgogICAgIAogICAgIAoKICAgIFFWYWx1
ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+JiBvcGVyYXRvcisrKCkgewoJbm9kZSA9IG5vZGUtPm5leHQ7
CglyZXR1cm4gKnRoaXM7CiAgICB9CgogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4gb3Bl
cmF0b3IrKyhpbnQpIHsKCVFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+IHRtcCA9ICp0aGlzOwoJ
bm9kZSA9IG5vZGUtPm5leHQ7CglyZXR1cm4gdG1wOwogICAgfQoKICAgIFFWYWx1ZUxpc3RDb25z
dEl0ZXJhdG9yPFQ+JiBvcGVyYXRvci0tKCkgewoJbm9kZSA9IG5vZGUtPnByZXY7CglyZXR1cm4g
KnRoaXM7CiAgICB9CgogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4gb3BlcmF0b3ItLShp
bnQpIHsKCVFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+IHRtcCA9ICp0aGlzOwoJbm9kZSA9IG5v
ZGUtPnByZXY7CglyZXR1cm4gdG1wOwogICAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNz
ICAgUVZhbHVlTGlzdFByaXZhdGUgOiBwdWJsaWMgUVNoYXJlZAp7CnB1YmxpYzoKICAgICAKCgog
ICAgdHlwZWRlZiBRVmFsdWVMaXN0SXRlcmF0b3I8VD4gSXRlcmF0b3I7CiAgICB0eXBlZGVmIFFW
YWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+IENvbnN0SXRlcmF0b3I7CiAgICB0eXBlZGVmIFFWYWx1
ZUxpc3ROb2RlPFQ+IE5vZGU7CiAgICB0eXBlZGVmIFFWYWx1ZUxpc3ROb2RlPFQ+KiBOb2RlUHRy
OwoKICAgICAKCgogICAgUVZhbHVlTGlzdFByaXZhdGUoKSB7IG5vZGUgPSBuZXcgTm9kZTsgbm9k
ZS0+bmV4dCA9IG5vZGUtPnByZXYgPSBub2RlOyBub2RlcyA9IDA7IH0KICAgIFFWYWx1ZUxpc3RQ
cml2YXRlKCBjb25zdCBRVmFsdWVMaXN0UHJpdmF0ZTxUPiYgX3AgKSA6IFFTaGFyZWQoKSB7Cglu
b2RlID0gbmV3IE5vZGU7IG5vZGUtPm5leHQgPSBub2RlLT5wcmV2ID0gbm9kZTsgbm9kZXMgPSAw
OwoJSXRlcmF0b3IgYiggX3Aubm9kZS0+bmV4dCApOwoJSXRlcmF0b3IgZSggX3Aubm9kZSApOwoJ
SXRlcmF0b3IgaSggbm9kZSApOwoJd2hpbGUoIGIgIT0gZSApCgkgICAgaW5zZXJ0KCBpLCAqYisr
ICk7CiAgICB9CgogICAgdm9pZCBkZXJlZkFuZERlbGV0ZSgpICAKICAgIHsKCWlmICggZGVyZWYo
KSApCgkgICAgZGVsZXRlIHRoaXM7CiAgICB9CgoKCgoKICAgIH5RVmFsdWVMaXN0UHJpdmF0ZSgp
IHsKCU5vZGVQdHIgcCA9IG5vZGUtPm5leHQ7Cgl3aGlsZSggcCAhPSBub2RlICkgewoJICAgIE5v
ZGVQdHIgeCA9IHAtPm5leHQ7CgkgICAgZGVsZXRlIHA7CgkgICAgcCA9IHg7Cgl9CglkZWxldGUg
bm9kZTsKICAgIH0KCiAgICBJdGVyYXRvciBpbnNlcnQoIEl0ZXJhdG9yIGl0LCBjb25zdCBUJiB4
ICkgewoJTm9kZVB0ciBwID0gbmV3IE5vZGUoIHggKTsKCXAtPm5leHQgPSBpdC5ub2RlOwoJcC0+
cHJldiA9IGl0Lm5vZGUtPnByZXY7CglpdC5ub2RlLT5wcmV2LT5uZXh0ID0gcDsKCWl0Lm5vZGUt
PnByZXYgPSBwOwoJbm9kZXMrKzsKCXJldHVybiBwOwogICAgfQoKICAgIEl0ZXJhdG9yIHJlbW92
ZSggSXRlcmF0b3IgaXQgKSB7CglpZiAoICEoICBpdC5ub2RlICE9IG5vZGUgICkgKQlxV2Fybmlu
ZygiQVNTRVJUOiBcIiVzXCIgaW4gJXMgKCVkKSIsIml0Lm5vZGUgIT0gbm9kZSIsIi9hbWQvc2ln
bWEvMC9zcmMvYWxwaGEtZGVjLW9zZjQuMC93b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcXZhbHVl
bGlzdC5oIiwyMjYpIDsKCU5vZGVQdHIgbmV4dCA9IGl0Lm5vZGUtPm5leHQ7CglOb2RlUHRyIHBy
ZXYgPSBpdC5ub2RlLT5wcmV2OwoJcHJldi0+bmV4dCA9IG5leHQ7CgluZXh0LT5wcmV2ID0gcHJl
djsKCWRlbGV0ZSBpdC5ub2RlOwoJbm9kZXMtLTsKCXJldHVybiBJdGVyYXRvciggbmV4dCApOwog
ICAgfQoKICAgIE5vZGVQdHIgZmluZCggTm9kZVB0ciBzdGFydCwgY29uc3QgVCYgeCApIGNvbnN0
IHsKCUNvbnN0SXRlcmF0b3IgZmlyc3QoIHN0YXJ0ICk7CglDb25zdEl0ZXJhdG9yIGxhc3QoIG5v
ZGUgKTsKCXdoaWxlKCBmaXJzdCAhPSBsYXN0KSB7CgkgICAgaWYgKCAqZmlyc3QgPT0geCApCgkJ
cmV0dXJuIGZpcnN0Lm5vZGU7CgkgICAgKytmaXJzdDsKCX0KCXJldHVybiBsYXN0Lm5vZGU7CiAg
ICB9CgogICAgaW50IGZpbmRJbmRleCggTm9kZVB0ciBzdGFydCwgY29uc3QgVCYgeCApIGNvbnN0
IHsKCUNvbnN0SXRlcmF0b3IgZmlyc3QoIHN0YXJ0ICk7CglDb25zdEl0ZXJhdG9yIGxhc3QoIG5v
ZGUgKTsKCWludCBwb3MgPSAwOwoJd2hpbGUoIGZpcnN0ICE9IGxhc3QpIHsKCSAgICBpZiAoICpm
aXJzdCA9PSB4ICkKCQlyZXR1cm4gcG9zOwoJICAgICsrZmlyc3Q7CgkgICAgKytwb3M7Cgl9Cgly
ZXR1cm4gLTE7CiAgICB9CgogICAgdWludCBjb250YWlucyggY29uc3QgVCYgeCApIGNvbnN0IHsK
CXVpbnQgcmVzdWx0ID0gMDsKCUl0ZXJhdG9yIGZpcnN0ID0gSXRlcmF0b3IoIG5vZGUtPm5leHQg
KTsKCUl0ZXJhdG9yIGxhc3QgPSBJdGVyYXRvciggbm9kZSApOwoJd2hpbGUoIGZpcnN0ICE9IGxh
c3QpIHsKCSAgICBpZiAoICpmaXJzdCA9PSB4ICkKCQkrK3Jlc3VsdDsKCSAgICArK2ZpcnN0OwoJ
fQoJcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICB2b2lkIHJlbW92ZSggY29uc3QgVCYgeCApIHsK
CUl0ZXJhdG9yIGZpcnN0ID0gSXRlcmF0b3IoIG5vZGUtPm5leHQgKTsKCUl0ZXJhdG9yIGxhc3Qg
PSBJdGVyYXRvciggbm9kZSApOwoJd2hpbGUoIGZpcnN0ICE9IGxhc3QpIHsKCSAgICBpZiAoICpm
aXJzdCA9PSB4ICkKCQlmaXJzdCA9IHJlbW92ZSggZmlyc3QgKTsKCSAgICBlbHNlCgkJKytmaXJz
dDsKCX0KICAgIH0KCiAgICBOb2RlUHRyIGF0KCB1aW50IGkgKSBjb25zdCB7CglpZiAoICEoICBp
IDw9IG5vZGVzICApICkJcVdhcm5pbmcoIkFTU0VSVDogXCIlc1wiIGluICVzICglZCkiLCJpIDw9
IG5vZGVzIiwiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQtMi4y
LjMvaW5jbHVkZS9xdmFsdWVsaXN0LmgiLDI4NCkgOwoJTm9kZVB0ciBwID0gbm9kZS0+bmV4dDsK
CWZvciggdWludCB4ID0gMDsgeCA8IGk7ICsreCApCgkgICAgcCA9IHAtPm5leHQ7CglyZXR1cm4g
cDsKICAgIH0KCiAgICB2b2lkIGNsZWFyKCkgewoJbm9kZXMgPSAwOwoJTm9kZVB0ciBwID0gbm9k
ZS0+bmV4dDsKCXdoaWxlKCBwICE9IG5vZGUgKSB7CgkgICAgTm9kZVB0ciBuZXh0ID0gcC0+bmV4
dDsKCSAgICBkZWxldGUgcDsKCSAgICBwID0gbmV4dDsKCX0KCW5vZGUtPm5leHQgPSBub2RlLT5w
cmV2ID0gbm9kZTsKICAgIH0KCiAgICBOb2RlUHRyIG5vZGU7CiAgICB1aW50IG5vZGVzOwp9OwoK
dGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzICAgUVZhbHVlTGlzdAp7CnB1YmxpYzoKICAgICAKCgog
ICAgdHlwZWRlZiBRVmFsdWVMaXN0SXRlcmF0b3I8VD4gSXRlcmF0b3I7CiAgICB0eXBlZGVmIFFW
YWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+IENvbnN0SXRlcmF0b3I7CiAgICB0eXBlZGVmIFQgVmFs
dWVUeXBlOwoKICAgICAKCgogICAgUVZhbHVlTGlzdCgpIHsgc2ggPSBuZXcgUVZhbHVlTGlzdFBy
aXZhdGU8VD47IH0KICAgIFFWYWx1ZUxpc3QoIGNvbnN0IFFWYWx1ZUxpc3Q8VD4mIGwgKSB7IHNo
ID0gbC5zaDsgc2gtPnJlZigpOyB9CiAgICB+UVZhbHVlTGlzdCgpIHsgc2gtPmRlcmVmQW5kRGVs
ZXRlKCk7IH0KCiAgICBRVmFsdWVMaXN0PFQ+JiBvcGVyYXRvcj0gKCBjb25zdCBRVmFsdWVMaXN0
PFQ+JiBsICkKICAgIHsKCWwuc2gtPnJlZigpOwoJc2gtPmRlcmVmQW5kRGVsZXRlKCk7CglzaCA9
IGwuc2g7CglyZXR1cm4gKnRoaXM7CiAgICB9CgogICAgUVZhbHVlTGlzdDxUPiBvcGVyYXRvcisg
KCBjb25zdCBRVmFsdWVMaXN0PFQ+JiBsICkgY29uc3QKICAgIHsKCVFWYWx1ZUxpc3Q8VD4gbDIo
ICp0aGlzICk7Cglmb3IoIENvbnN0SXRlcmF0b3IgaXQgPSBsLmJlZ2luKCk7IGl0ICE9IGwuZW5k
KCk7ICsraXQgKQoJICAgIGwyLmFwcGVuZCggKml0ICk7CglyZXR1cm4gbDI7CiAgICB9CgogICAg
UVZhbHVlTGlzdDxUPiYgb3BlcmF0b3IrPSAoIGNvbnN0IFFWYWx1ZUxpc3Q8VD4mIGwgKQogICAg
ewoJZm9yKCBDb25zdEl0ZXJhdG9yIGl0ID0gbC5iZWdpbigpOyBpdCAhPSBsLmVuZCgpOyArK2l0
ICkKCSAgICBhcHBlbmQoICppdCApOwoJcmV0dXJuICp0aGlzOwogICAgfQoKICAgIGJvb2wgb3Bl
cmF0b3I9PSAoIGNvbnN0IFFWYWx1ZUxpc3Q8VD4mIGwgKSBjb25zdAogICAgewoJaWYgKCBjb3Vu
dCgpICE9IGwuY291bnQoKSApCgkgICAgcmV0dXJuIDAgOwoJQ29uc3RJdGVyYXRvciBpdDIgPSBi
ZWdpbigpOwoJQ29uc3RJdGVyYXRvciBpdCA9IGwuYmVnaW4oKTsKCWZvciggOyBpdCAhPSBsLmVu
ZCgpOyArK2l0LCArK2l0MiApCgkgICAgaWYgKCAhKCAqaXQgPT0gKml0MiApICkKCQlyZXR1cm4g
MCA7CglyZXR1cm4gMSA7CiAgICB9CgogICAgYm9vbCBvcGVyYXRvciE9ICggY29uc3QgUVZhbHVl
TGlzdDxUPiYgbCApIGNvbnN0IHsgcmV0dXJuICEoICp0aGlzID09IGwgKTsgfQoKICAgIEl0ZXJh
dG9yIGJlZ2luKCkgeyBkZXRhY2goKTsgcmV0dXJuIEl0ZXJhdG9yKCBzaC0+bm9kZS0+bmV4dCAp
OyB9CiAgICBDb25zdEl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gQ29uc3RJdGVyYXRv
ciggc2gtPm5vZGUtPm5leHQgKTsgfQogICAgSXRlcmF0b3IgZW5kKCkgeyBkZXRhY2goKTsgcmV0
dXJuIEl0ZXJhdG9yKCBzaC0+bm9kZSApOyB9CiAgICBDb25zdEl0ZXJhdG9yIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIENvbnN0SXRlcmF0b3IoIHNoLT5ub2RlICk7IH0KICAgIEl0ZXJhdG9yIGZyb21M
YXN0KCkgeyBkZXRhY2goKTsgcmV0dXJuIEl0ZXJhdG9yKCBzaC0+bm9kZS0+cHJldiApOyB9CiAg
ICBDb25zdEl0ZXJhdG9yIGZyb21MYXN0KCkgY29uc3QgeyByZXR1cm4gQ29uc3RJdGVyYXRvcigg
c2gtPm5vZGUtPnByZXYgKTsgfQoKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICgg
c2gtPm5vZGVzID09IDAgKTsgfQoKICAgIEl0ZXJhdG9yIGluc2VydCggSXRlcmF0b3IgaXQsIGNv
bnN0IFQmIHggKSB7IGRldGFjaCgpOyByZXR1cm4gc2gtPmluc2VydCggaXQsIHggKTsgfQoKICAg
IEl0ZXJhdG9yIGFwcGVuZCggY29uc3QgVCYgeCApIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+aW5z
ZXJ0KCBlbmQoKSwgeCApOyB9CiAgICBJdGVyYXRvciBwcmVwZW5kKCBjb25zdCBUJiB4ICkgeyBk
ZXRhY2goKTsgcmV0dXJuIHNoLT5pbnNlcnQoIGJlZ2luKCksIHggKTsgfQoKICAgIEl0ZXJhdG9y
IHJlbW92ZSggSXRlcmF0b3IgaXQgKSB7IGRldGFjaCgpOyByZXR1cm4gc2gtPnJlbW92ZSggaXQg
KTsgfQogICAgdm9pZCByZW1vdmUoIGNvbnN0IFQmIHggKSB7IGRldGFjaCgpOyBzaC0+cmVtb3Zl
KCB4ICk7IH0KCiAgICBUJiBmaXJzdCgpIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+bm9kZS0+bmV4
dC0+ZGF0YTsgfQogICAgY29uc3QgVCYgZmlyc3QoKSBjb25zdCB7IHJldHVybiBzaC0+bm9kZS0+
bmV4dC0+ZGF0YTsgfQogICAgVCYgbGFzdCgpIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+bm9kZS0+
cHJldi0+ZGF0YTsgfQogICAgY29uc3QgVCYgbGFzdCgpIGNvbnN0IHsgcmV0dXJuIHNoLT5ub2Rl
LT5wcmV2LT5kYXRhOyB9CgogICAgVCYgb3BlcmF0b3JbXSAoIHVpbnQgaSApIHsgZGV0YWNoKCk7
IHJldHVybiBzaC0+YXQoaSktPmRhdGE7IH0KICAgIGNvbnN0IFQmIG9wZXJhdG9yW10gKCB1aW50
IGkgKSBjb25zdCB7IHJldHVybiBzaC0+YXQoaSktPmRhdGE7IH0KICAgIEl0ZXJhdG9yIGF0KCB1
aW50IGkgKSB7IGRldGFjaCgpOyByZXR1cm4gSXRlcmF0b3IoIHNoLT5hdChpKSApOyB9CiAgICBD
b25zdEl0ZXJhdG9yIGF0KCB1aW50IGkgKSBjb25zdCB7IHJldHVybiBDb25zdEl0ZXJhdG9yKCBz
aC0+YXQoaSkgKTsgfQogICAgSXRlcmF0b3IgZmluZCAoIGNvbnN0IFQmIHggKSB7IGRldGFjaCgp
OyByZXR1cm4gSXRlcmF0b3IoIHNoLT5maW5kKCBzaC0+bm9kZS0+bmV4dCwgeCkgKTsgfQogICAg
Q29uc3RJdGVyYXRvciBmaW5kICggY29uc3QgVCYgeCApIGNvbnN0IHsgcmV0dXJuIENvbnN0SXRl
cmF0b3IoIHNoLT5maW5kKCBzaC0+bm9kZS0+bmV4dCwgeCkgKTsgfQogICAgSXRlcmF0b3IgZmlu
ZCAoIEl0ZXJhdG9yIGl0LCBjb25zdCBUJiB4ICkgeyBkZXRhY2goKTsgcmV0dXJuIEl0ZXJhdG9y
KCBzaC0+ZmluZCggaXQubm9kZSwgeCApICk7IH0KICAgIENvbnN0SXRlcmF0b3IgZmluZCAoIENv
bnN0SXRlcmF0b3IgaXQsIGNvbnN0IFQmIHggKSBjb25zdCB7IHJldHVybiBDb25zdEl0ZXJhdG9y
KCBzaC0+ZmluZCggaXQubm9kZSwgeCApICk7IH0KICAgIGludCBmaW5kSW5kZXgoIGNvbnN0IFQm
IHggKSBjb25zdCB7IHJldHVybiBzaC0+ZmluZEluZGV4KCBzaC0+bm9kZS0+bmV4dCwgeCkgOyB9
CiAgICB1aW50IGNvbnRhaW5zKCBjb25zdCBUJiB4ICkgY29uc3QgeyByZXR1cm4gc2gtPmNvbnRh
aW5zKCB4ICk7IH0KCiAgICB1aW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gc2gtPm5vZGVzOyB9
CgogICAgdm9pZCBjbGVhcigpIHsgaWYgKCBzaC0+Y291bnQgPT0gMSApIHNoLT5jbGVhcigpOyBl
bHNlIHsgc2gtPmRlcmVmKCk7IHNoID0gbmV3IFFWYWx1ZUxpc3RQcml2YXRlPFQ+OyB9IH0KCgog
ICAgUVZhbHVlTGlzdDxUPiYgb3BlcmF0b3IrPSAoIGNvbnN0IFQmIHggKQogICAgewoJYXBwZW5k
KCB4ICk7CglyZXR1cm4gKnRoaXM7CiAgICB9CiAgICBRVmFsdWVMaXN0PFQ+JiBvcGVyYXRvcjw8
ICggY29uc3QgVCYgeCApCiAgICB7CglhcHBlbmQoIHggKTsKCXJldHVybiAqdGhpczsKICAgIH0K
Cgpwcm90ZWN0ZWQ6CiAgICAgCgoKICAgIHZvaWQgZGV0YWNoKCkgeyBpZiAoIHNoLT5jb3VudCA+
IDEgKSB7IHNoLT5kZXJlZigpOyBzaCA9IG5ldyBRVmFsdWVMaXN0UHJpdmF0ZTxUPiggKnNoICk7
IH0gfQoKICAgICAKCgogICAgUVZhbHVlTGlzdFByaXZhdGU8VD4qIHNoOwp9OwoKCnRlbXBsYXRl
PGNsYXNzIFQ+CmlubGluZSBRRGF0YVN0cmVhbSYgb3BlcmF0b3I+PiggUURhdGFTdHJlYW0mIHMs
IFFWYWx1ZUxpc3Q8VD4mIGwgKQp7CiAgICBsLmNsZWFyKCk7CiAgICBRX1VJTlQzMiBjOwogICAg
cyA+PiBjOwogICAgZm9yKCBRX1VJTlQzMiBpID0gMDsgaSA8IGM7ICsraSApCiAgICB7CglUIHQ7
CglzID4+IHQ7CglsLmFwcGVuZCggdCApOwogICAgfQogICAgcmV0dXJuIHM7Cn0KCnRlbXBsYXRl
PGNsYXNzIFQ+CmlubGluZSBRRGF0YVN0cmVhbSYgb3BlcmF0b3I8PCggUURhdGFTdHJlYW0mIHMs
IGNvbnN0IFFWYWx1ZUxpc3Q8VD4mIGwgKQp7CiAgICBzIDw8IChRX1VJTlQzMilsLmNvdW50KCk7
CiAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiBpdCA9IGwuYmVnaW4oKTsKICAgIGZvcigg
OyBpdCAhPSBsLmVuZCgpOyArK2l0ICkKCXMgPDwgKml0OwogICAgcmV0dXJuIHM7Cn0KCgojIDQy
ICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNs
dWRlL3FzdHJpbmdsaXN0LmgiIDIKCgojIDEgIi9hbWQvc2lnbWEvMC9zcmMvYWxwaGEtZGVjLW9z
ZjQuMC93b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcXJlZ2V4cC5oIiAxCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpjbGFzcyAgIFFSZWdFeHAKewpwdWJsaWM6
CiAgICBRUmVnRXhwKCk7CiAgICBRUmVnRXhwKCBjb25zdCBRU3RyaW5nICYsIGJvb2wgY2FzZVNl
bnNpdGl2ZT0gMSAsIGJvb2wgd2lsZGNhcmQ9IDAgICk7CiAgICBRUmVnRXhwKCBjb25zdCBRUmVn
RXhwICYgKTsKICAgflFSZWdFeHAoKTsKICAgIFFSZWdFeHAgICAgJm9wZXJhdG9yPSggY29uc3Qg
UVJlZ0V4cCAmICk7CiAgICBRUmVnRXhwICAgICZvcGVyYXRvcj0oIGNvbnN0IFFTdHJpbmcgJnBh
dHRlcm4gKTsKCiAgICBib29sCW9wZXJhdG9yPT0oIGNvbnN0IFFSZWdFeHAgJiApICBjb25zdDsK
ICAgIGJvb2wJb3BlcmF0b3IhPSggY29uc3QgUVJlZ0V4cCAmciApIGNvbnN0CgkJCQkJeyByZXR1
cm4gISh0aGlzLT5vcGVyYXRvcj09KHIpKTsgfQoKICAgIGJvb2wJaXNFbXB0eSgpCWNvbnN0CXsg
cmV0dXJuIHJ4ZGF0YSA9PSAwOyB9CiAgICBib29sCWlzVmFsaWQoKQljb25zdAl7IHJldHVybiBl
cnJvciA9PSAwOyB9CgogICAgYm9vbAljYXNlU2Vuc2l0aXZlKCkgY29uc3QJeyByZXR1cm4gY3M7
IH0KICAgIHZvaWQJc2V0Q2FzZVNlbnNpdGl2ZSggYm9vbCApOwoKICAgIGJvb2wJd2lsZGNhcmQo
KQljb25zdAl7IHJldHVybiB3YzsgfQogICAgdm9pZAlzZXRXaWxkY2FyZCggYm9vbCApOwoKICAg
IFFTdHJpbmcJcGF0dGVybigpCWNvbnN0CXsgcmV0dXJuIHJ4c3RyaW5nOyB9CiAgICAgCiAgICB2
b2lkCXNldFBhdHRlcm4oIGNvbnN0IFFTdHJpbmcmIHBhdHRlcm4gKQoJCQkJCXsgb3BlcmF0b3I9
KCBwYXR0ZXJuICk7IH0KCiAgICBpbnQJCW1hdGNoKCBjb25zdCBRU3RyaW5nICZzdHIsIGludCBp
bmRleD0wLCBpbnQgKmxlbj0wLAoJCSAgICAgICBib29sIGluZGV4SXNTdGFydCA9IDEgICkgY29u
c3Q7CiAgICBpbnQJCWZpbmQoIGNvbnN0IFFTdHJpbmcmIHN0ciwgaW50IGluZGV4ICkKCQkJCQl7
IHJldHVybiBtYXRjaCggc3RyLCBpbmRleCApOyB9Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkCWNvbXBp
bGUoKTsKICAgIGNvbnN0IFFDaGFyICptYXRjaHN0ciggdWludCAqLCBjb25zdCBRQ2hhciAqLCB1
aW50LCBjb25zdCBRQ2hhciAqICkgY29uc3Q7Cgpwcml2YXRlOgogICAgUVN0cmluZwlyeHN0cmlu
ZzsJCQkgCiAgICB1aW50CSpyeGRhdGE7CQkJIAogICAgaW50CQllcnJvcjsJCQkJIAogICAgYm9v
bAljczsJCQkJIAogICAgYm9vbAl3YzsJCQkJIAp9OwoKCgojIDQ0ICIvYW1kL3NpZ21hLzAvc3Jj
L2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3FzdHJpbmdsaXN0Lmgi
IDIKCgoKCgpjbGFzcyBRU3RyTGlzdDsKCmNsYXNzICAgUVN0cmluZ0xpc3QgOiBwdWJsaWMgUVZh
bHVlTGlzdDxRU3RyaW5nPgp7CnB1YmxpYzoKICAgIFFTdHJpbmdMaXN0KCkgeyB9CiAgICBRU3Ry
aW5nTGlzdCggY29uc3QgUVN0cmluZ0xpc3QmIGwgKSA6IFFWYWx1ZUxpc3Q8UVN0cmluZz4obCkg
eyB9CiAgICBRU3RyaW5nTGlzdCggY29uc3QgUVZhbHVlTGlzdDxRU3RyaW5nPiYgbCApIDogUVZh
bHVlTGlzdDxRU3RyaW5nPihsKSB7IH0KICAgIFFTdHJpbmdMaXN0KCBjb25zdCBRU3RyaW5nJiBp
ICkgeyBhcHBlbmQoaSk7IH0KCiAgICBRU3RyaW5nTGlzdCggY29uc3QgY2hhciogaSApIHsgYXBw
ZW5kKGkpOyB9CgoKICAgIHN0YXRpYyBRU3RyaW5nTGlzdCBmcm9tU3RyTGlzdChjb25zdCBRU3Ry
TGlzdCYpOwoKICAgIHZvaWQgc29ydCgpOwoKICAgIHN0YXRpYyBRU3RyaW5nTGlzdCBzcGxpdCgg
Y29uc3QgUVN0cmluZyAmc2VwLCBjb25zdCBRU3RyaW5nICZzdHIsIGJvb2wgYWxsb3dFbXB0eUVu
dHJpZXMgPSAwICApOwogICAgc3RhdGljIFFTdHJpbmdMaXN0IHNwbGl0KCAgY29uc3QgUUNoYXIg
JnNlcCwgY29uc3QgUVN0cmluZyAmc3RyLCBib29sIGFsbG93RW1wdHlFbnRyaWVzID0gMCAgKTsK
ICAgIHN0YXRpYyBRU3RyaW5nTGlzdCBzcGxpdCggIGNvbnN0IFFSZWdFeHAgJnNlcCwgY29uc3Qg
UVN0cmluZyAmc3RyLCBib29sIGFsbG93RW1wdHlFbnRyaWVzID0gMCAgKTsKICAgIFFTdHJpbmcg
am9pbiggY29uc3QgUVN0cmluZyAmc2VwICkgY29uc3Q7CgogICAgUVN0cmluZ0xpc3QgZ3JlcCgg
Y29uc3QgUVN0cmluZyAmc3RyLCBib29sIGNzID0gMSAgKSBjb25zdDsKICAgIFFTdHJpbmdMaXN0
IGdyZXAoIGNvbnN0IFFSZWdFeHAgJmV4cHIgKSBjb25zdDsKfTsKCgpjbGFzcyBRRGF0YVN0cmVh
bTsKZXh0ZXJuICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFTdHJp
bmdMaXN0JiApOwpleHRlcm4gICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0g
JiwgY29uc3QgUVN0cmluZ0xpc3QmICk7CgoKCiMgNDYgImtlcm5lbC9xbmV0d29ya3Byb3RvY29s
LmgiIDIKCiMgMSAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQt
Mi4yLjMvaW5jbHVkZS9xb2JqZWN0LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIyAxICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rp
ci9xdC0yLjIuMy9pbmNsdWRlL3FvYmplY3RkZWZzLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAogCgoKCgoKCgoKIyA3MCAiL2FtZC9zaWdtYS8w
L3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xb2JqZWN0ZGVm
cy5oIgoKIAogCiAKIAogCiAKIAogCgogCiAKIyA5MyAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1k
ZWMtb3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xb2JqZWN0ZGVmcy5oIgoKIAoKCgoK
IAoKCgoKCgoKCgoKCgoKCgogCgpjbGFzcyBRT2JqZWN0OwpjbGFzcyBRTWV0YU9iamVjdDsKY2xh
c3MgUVNpZ25hbDsKY2xhc3MgUUNvbm5lY3Rpb247CmNsYXNzIFFFdmVudDsKc3RydWN0IFFNZXRh
RGF0YTsKY2xhc3MgUUNvbm5lY3Rpb25MaXN0OwpjbGFzcyBRQ29ubmVjdGlvbkxpc3RJdDsKY2xh
c3MgUVNpZ25hbERpY3Q7CmNsYXNzIFFTaWduYWxEaWN0SXQ7CmNsYXNzIFFPYmplY3RMaXN0Owpj
bGFzcyBRT2JqZWN0TGlzdEl0OwpjbGFzcyBRTWVtYmVyRGljdDsKCgoKIyA0MiAiL2FtZC9zaWdt
YS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xb2JqZWN0
LmgiIDIKCiMgMSAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQt
Mi4yLjMvaW5jbHVkZS9xd2luZG93ZGVmcy5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4w
L3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xbmFtZXNwYWNlLmgiIDEKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmNsYXNzIFFDb2xvcjsKY2xhc3MgUUN1cnNv
cjsKCgpjbGFzcyAgIFF0IHsKcHVibGljOgogICAgc3RhdGljIGNvbnN0ICBRQ29sb3IgJiBjb2xv
cjA7CiAgICBzdGF0aWMgY29uc3QgIFFDb2xvciAmIGNvbG9yMTsKICAgIHN0YXRpYyBjb25zdCAg
UUNvbG9yICYgYmxhY2s7CiAgICBzdGF0aWMgY29uc3QgIFFDb2xvciAmIHdoaXRlOwogICAgc3Rh
dGljIGNvbnN0ICBRQ29sb3IgJiBkYXJrR3JheTsKICAgIHN0YXRpYyBjb25zdCAgUUNvbG9yICYg
Z3JheTsKICAgIHN0YXRpYyBjb25zdCAgUUNvbG9yICYgbGlnaHRHcmF5OwogICAgc3RhdGljIGNv
bnN0ICBRQ29sb3IgJiByZWQ7CiAgICBzdGF0aWMgY29uc3QgIFFDb2xvciAmIGdyZWVuOwogICAg
c3RhdGljIGNvbnN0ICBRQ29sb3IgJiBibHVlOwogICAgc3RhdGljIGNvbnN0ICBRQ29sb3IgJiBj
eWFuOwogICAgc3RhdGljIGNvbnN0ICBRQ29sb3IgJiBtYWdlbnRhOwogICAgc3RhdGljIGNvbnN0
ICBRQ29sb3IgJiB5ZWxsb3c7CiAgICBzdGF0aWMgY29uc3QgIFFDb2xvciAmIGRhcmtSZWQ7CiAg
ICBzdGF0aWMgY29uc3QgIFFDb2xvciAmIGRhcmtHcmVlbjsKICAgIHN0YXRpYyBjb25zdCAgUUNv
bG9yICYgZGFya0JsdWU7CiAgICBzdGF0aWMgY29uc3QgIFFDb2xvciAmIGRhcmtDeWFuOwogICAg
c3RhdGljIGNvbnN0ICBRQ29sb3IgJiBkYXJrTWFnZW50YTsKICAgIHN0YXRpYyBjb25zdCAgUUNv
bG9yICYgZGFya1llbGxvdzsKCiAgICAgCiAgICBlbnVtIEJ1dHRvblN0YXRlIHsJCQkJIAoJTm9C
dXR0b24JPSAweDAwMDAsCglMZWZ0QnV0dG9uCT0gMHgwMDAxLAoJUmlnaHRCdXR0b24JPSAweDAw
MDIsCglNaWRCdXR0b24JPSAweDAwMDQsCglNb3VzZUJ1dHRvbk1hc2sgPSAweDAwMDcsCglTaGlm
dEJ1dHRvbgk9IDB4MDAwOCwKCUNvbnRyb2xCdXR0b24gICA9IDB4MDAxMCwKCUFsdEJ1dHRvbgk9
IDB4MDAyMCwKCUtleUJ1dHRvbk1hc2sJPSAweDAwMzgsCglLZXlwYWQJCT0gMHg0MDAwCiAgICB9
OwoKICAgICAKICAgIGVudW0gT3JpZW50YXRpb24gewogICAgICAgIEhvcml6b250YWwsCglWZXJ0
aWNhbAogICAgfTsKCiAgICAgCgogICAgIAogICAgZW51bSBBbGlnbm1lbnRGbGFncyB7CglBbGln
bkxlZnQJPSAweDAwMDEsCQkgCglBbGlnblJpZ2h0CT0gMHgwMDAyLAoJQWxpZ25IQ2VudGVyCT0g
MHgwMDA0LAoJQWxpZ25Ub3AJPSAweDAwMDgsCglBbGlnbkJvdHRvbQk9IDB4MDAxMCwKCUFsaWdu
VkNlbnRlcgk9IDB4MDAyMCwKCUFsaWduQ2VudGVyCT0gQWxpZ25WQ2VudGVyIHwgQWxpZ25IQ2Vu
dGVyLAoKCVNpbmdsZUxpbmUJPSAweDAwNDAsCQkgCglEb250Q2xpcAk9IDB4MDA4MCwKCUV4cGFu
ZFRhYnMJPSAweDAxMDAsCglTaG93UHJlZml4CT0gMHgwMjAwLAoJV29yZEJyZWFrCT0gMHgwNDAw
LAoJRG9udFByaW50CT0gMHgxMDAwCQkgCiAgICB9OwoKICAgICAKICAgIGVudW0gV2lkZ2V0U3Rh
dGUgewoJV1N0YXRlX0NyZWF0ZWQJCT0gMHgwMDAwMDAwMSwKCVdTdGF0ZV9EaXNhYmxlZAkJPSAw
eDAwMDAwMDAyLAoJV1N0YXRlX1Zpc2libGUJCT0gMHgwMDAwMDAwNCwKCVdTdGF0ZV9Gb3JjZUhp
ZGUJPSAweDAwMDAwMDA4LAoJV1N0YXRlX093bkN1cnNvcgk9IDB4MDAwMDAwMTAsCglXU3RhdGVf
TW91c2VUcmFja2luZwk9IDB4MDAwMDAwMjAsCglXU3RhdGVfQ29tcHJlc3NLZXlzCT0gMHgwMDAw
MDA0MCwKCVdTdGF0ZV9CbG9ja1VwZGF0ZXMJPSAweDAwMDAwMDgwLAoJV1N0YXRlX0luUGFpbnRF
dmVudAk9IDB4MDAwMDAxMDAsCglXU3RhdGVfUmVwYXJlbnRlZAk9IDB4MDAwMDAyMDAsCglXU3Rh
dGVfQ29uZmlnUGVuZGluZwk9IDB4MDAwMDA0MDAsCglXU3RhdGVfUmVzaXplZAkJPSAweDAwMDAw
ODAwLAoJV1N0YXRlX0F1dG9NYXNrCQk9IDB4MDAwMDEwMDAsCglXU3RhdGVfUG9saXNoZWQJCT0g
MHgwMDAwMjAwMCwKCVdTdGF0ZV9ETkQJCT0gMHgwMDAwNDAwMCwKCVdTdGF0ZV9Nb2RhbAkJPSAw
eDAwMDA4MDAwLAoJV1N0YXRlX1Jlc2VydmVkMQk9IDB4MDAwMTAwMDAsCglXU3RhdGVfUmVzZXJ2
ZWQyCT0gMHgwMDAyMDAwMCwKCVdTdGF0ZV9SZXNlcnZlZDMJPSAweDAwMDQwMDAwLAoJV1N0YXRl
X01heGltaXplZAk9IDB4MDAwODAwMDAsCglXU3RhdGVfVHJhbnNsYXRlQmFja2dyb3VuZCA9IDB4
MDAxMDAwMDAsCglXU3RhdGVfRm9yY2VEaXNhYmxlZAk9IDB4MDAyMDAwMDAsCglXU3RhdGVfRXhw
b3NlZAkJPSAweDAwNDAwMDAwCiAgICB9OwoKICAgICAKICAgIHR5cGVkZWYgdWludCBXRmxhZ3M7
CgogICAgIAogICAgZW51bSBXaWRnZXRGbGFncyB7CglXVHlwZV9Ub3BMZXZlbAkJPSAweDAwMDAw
MDAxLAkgCglXVHlwZV9Nb2RhbAkJPSAweDAwMDAwMDAyLAoJV1R5cGVfUG9wdXAJCT0gMHgwMDAw
MDAwNCwKCVdUeXBlX0Rlc2t0b3AJCT0gMHgwMDAwMDAwOCwKCVdUeXBlX01hc2sJCT0gMHgwMDAw
MDAwZiwKCglXU3R5bGVfQ3VzdG9taXplCT0gMHgwMDAwMDAxMCwJIAoJV1N0eWxlX05vcm1hbEJv
cmRlcgk9IDB4MDAwMDAwMjAsCglXU3R5bGVfRGlhbG9nQm9yZGVyCT0gMHgwMDAwMDA0MCwKCVdT
dHlsZV9Ob0JvcmRlcgkJPSAweDAwMDAwMDAwLAoJV1N0eWxlX1RpdGxlCQk9IDB4MDAwMDAwODAs
CglXU3R5bGVfU3lzTWVudQkJPSAweDAwMDAwMTAwLAoJV1N0eWxlX01pbmltaXplCQk9IDB4MDAw
MDAyMDAsCglXU3R5bGVfTWF4aW1pemUJCT0gMHgwMDAwMDQwMCwKCVdTdHlsZV9NaW5NYXgJCT0g
V1N0eWxlX01pbmltaXplIHwgV1N0eWxlX01heGltaXplLAoJV1N0eWxlX1Rvb2wJCT0gMHgwMDAw
MDgwMCwKCVdTdHlsZV9TdGF5c09uVG9wCT0gMHgwMDAwMTAwMCwKCVdTdHlsZV9EaWFsb2cgCQk9
IDB4MDAwMDIwMDAsCglXU3R5bGVfQ29udGV4dEhlbHAJPSAweDAwMDA0MDAwLAoJV1N0eWxlX05v
Qm9yZGVyRXgJPSAweDAwMDA4MDAwLCAgCglXU3R5bGVfTWFzawkJPSAweDAwMDBmZmYwLAoKCVdE
ZXN0cnVjdGl2ZUNsb3NlCT0gMHgwMDAxMDAwMCwJIAoJV1BhaW50RGVza3RvcAkJPSAweDAwMDIw
MDAwLAoJV1BhaW50VW5jbGlwcGVkCQk9IDB4MDAwNDAwMDAsCglXUGFpbnRDbGV2ZXIJCT0gMHgw
MDA4MDAwMCwKCVdSZXNpemVOb0VyYXNlCQk9IDB4MDAxMDAwMDAsCglXTW91c2VOb01hc2sJCT0g
MHgwMDIwMDAwMCwKCVdOb3J0aFdlc3RHcmF2aXR5CT0gMHgwMDQwMDAwMCwKCVdSZXBhaW50Tm9F
cmFzZQkJPSAweDAwODAwMDAwLAoJV1gxMUJ5cGFzc1dNCQk9IDB4MDEwMDAwMDAsCglXR3JvdXBM
ZWFkZXIgCQk9IDB4MDIwMDAwMDAKICAgIH07CgogICAgIAogICAgIAoKICAgIGVudW0gSW1hZ2VD
b252ZXJzaW9uRmxhZ3MgewoJQ29sb3JNb2RlX01hc2sJCT0gMHgwMDAwMDAwMywKCUF1dG9Db2xv
cgkJPSAweDAwMDAwMDAwLAoJQ29sb3JPbmx5CQk9IDB4MDAwMDAwMDMsCglNb25vT25seQkJPSAw
eDAwMDAwMDAyLAoJIAoKCUFscGhhRGl0aGVyX01hc2sJPSAweDAwMDAwMDBjLAoJVGhyZXNob2xk
QWxwaGFEaXRoZXIJPSAweDAwMDAwMDAwLAoJT3JkZXJlZEFscGhhRGl0aGVyCT0gMHgwMDAwMDAw
NCwKCURpZmZ1c2VBbHBoYURpdGhlcgk9IDB4MDAwMDAwMDgsCglOb0FscGhhCQkJPSAweDAwMDAw
MDBjLCAgCgoJRGl0aGVyX01hc2sJCT0gMHgwMDAwMDAzMCwKCURpZmZ1c2VEaXRoZXIJCT0gMHgw
MDAwMDAwMCwKCU9yZGVyZWREaXRoZXIJCT0gMHgwMDAwMDAxMCwKCVRocmVzaG9sZERpdGhlcgkJ
PSAweDAwMDAwMDIwLAoJIAoKCURpdGhlck1vZGVfTWFzawkJPSAweDAwMDAwMGMwLAoJQXV0b0Rp
dGhlcgkJPSAweDAwMDAwMDAwLAoJUHJlZmVyRGl0aGVyCQk9IDB4MDAwMDAwNDAsCglBdm9pZERp
dGhlcgkJPSAweDAwMDAwMDgwCiAgICB9OwoKICAgIGVudW0gQkdNb2RlCXsJCQkJIAoJVHJhbnNw
YXJlbnRNb2RlLAoJT3BhcXVlTW9kZQogICAgfTsKCiAgICBlbnVtIFBhaW50VW5pdCB7CQkJCSAK
CVBpeGVsVW5pdCwKCUxvTWV0cmljVW5pdCwgIAoJSGlNZXRyaWNVbml0LCAgCglMb0VuZ2xpc2hV
bml0LCAgCglIaUVuZ2xpc2hVbml0LCAgCglUd2lwc1VuaXQgIAogICAgfTsKCiAgICBlbnVtIEdV
SVN0eWxlIHsKCU1hY1N0eWxlLCAgCglXaW5kb3dzU3R5bGUsCglXaW4zU3R5bGUsICAKCVBNU3R5
bGUsICAKCU1vdGlmU3R5bGUKICAgIH07CgogICAgZW51bSBNb2RpZmllciB7CQkgCglTSElGVCAg
ICAgICAgID0gMHgwMDIwMDAwMCwKCUNUUkwgICAgICAgICAgPSAweDAwNDAwMDAwLAoJQUxUICAg
ICAgICAgICA9IDB4MDA4MDAwMDAsCglNT0RJRklFUl9NQVNLID0gMHgwMGUwMDAwMCwKCVVOSUNP
REVfQUNDRUwgPSAweDEwMDAwMDAwLAoKCUFTQ0lJX0FDQ0VMID0gVU5JQ09ERV9BQ0NFTCAgCiAg
ICB9OwoKICAgIGVudW0gS2V5IHsKCUtleV9Fc2NhcGUgPSAweDEwMDAsCQkgCglLZXlfVGFiID0g
MHgxMDAxLAoJS2V5X0JhY2t0YWIgPSAweDEwMDIsIEtleV9CYWNrVGFiID0gS2V5X0JhY2t0YWIs
CglLZXlfQmFja3NwYWNlID0gMHgxMDAzLCBLZXlfQmFja1NwYWNlID0gS2V5X0JhY2tzcGFjZSwK
CUtleV9SZXR1cm4gPSAweDEwMDQsCglLZXlfRW50ZXIgPSAweDEwMDUsCglLZXlfSW5zZXJ0ID0g
MHgxMDA2LAoJS2V5X0RlbGV0ZSA9IDB4MTAwNywKCUtleV9QYXVzZSA9IDB4MTAwOCwKCUtleV9Q
cmludCA9IDB4MTAwOSwKCUtleV9TeXNSZXEgPSAweDEwMGEsCglLZXlfSG9tZSA9IDB4MTAxMCwJ
CSAKCUtleV9FbmQgPSAweDEwMTEsCglLZXlfTGVmdCA9IDB4MTAxMiwKCUtleV9VcCA9IDB4MTAx
MywKCUtleV9SaWdodCA9IDB4MTAxNCwKCUtleV9Eb3duID0gMHgxMDE1LAoJS2V5X1ByaW9yID0g
MHgxMDE2LCBLZXlfUGFnZVVwID0gS2V5X1ByaW9yLAoJS2V5X05leHQgPSAweDEwMTcsIEtleV9Q
YWdlRG93biA9IEtleV9OZXh0LAoJS2V5X1NoaWZ0ID0gMHgxMDIwLAkJIAoJS2V5X0NvbnRyb2wg
PSAweDEwMjEsCglLZXlfTWV0YSA9IDB4MTAyMiwKCUtleV9BbHQgPSAweDEwMjMsCglLZXlfQ2Fw
c0xvY2sgPSAweDEwMjQsCglLZXlfTnVtTG9jayA9IDB4MTAyNSwKCUtleV9TY3JvbGxMb2NrID0g
MHgxMDI2LAoJS2V5X0YxID0gMHgxMDMwLAkJIAoJS2V5X0YyID0gMHgxMDMxLAoJS2V5X0YzID0g
MHgxMDMyLAoJS2V5X0Y0ID0gMHgxMDMzLAoJS2V5X0Y1ID0gMHgxMDM0LAoJS2V5X0Y2ID0gMHgx
MDM1LAoJS2V5X0Y3ID0gMHgxMDM2LAoJS2V5X0Y4ID0gMHgxMDM3LAoJS2V5X0Y5ID0gMHgxMDM4
LAoJS2V5X0YxMCA9IDB4MTAzOSwKCUtleV9GMTEgPSAweDEwM2EsCglLZXlfRjEyID0gMHgxMDNi
LAoJS2V5X0YxMyA9IDB4MTAzYywKCUtleV9GMTQgPSAweDEwM2QsCglLZXlfRjE1ID0gMHgxMDNl
LAoJS2V5X0YxNiA9IDB4MTAzZiwKCUtleV9GMTcgPSAweDEwNDAsCglLZXlfRjE4ID0gMHgxMDQx
LAoJS2V5X0YxOSA9IDB4MTA0MiwKCUtleV9GMjAgPSAweDEwNDMsCglLZXlfRjIxID0gMHgxMDQ0
LAoJS2V5X0YyMiA9IDB4MTA0NSwKCUtleV9GMjMgPSAweDEwNDYsCglLZXlfRjI0ID0gMHgxMDQ3
LAoJS2V5X0YyNSA9IDB4MTA0OCwJCSAKCUtleV9GMjYgPSAweDEwNDksCglLZXlfRjI3ID0gMHgx
MDRhLAoJS2V5X0YyOCA9IDB4MTA0YiwKCUtleV9GMjkgPSAweDEwNGMsCglLZXlfRjMwID0gMHgx
MDRkLAoJS2V5X0YzMSA9IDB4MTA0ZSwKCUtleV9GMzIgPSAweDEwNGYsCglLZXlfRjMzID0gMHgx
MDUwLAoJS2V5X0YzNCA9IDB4MTA1MSwKCUtleV9GMzUgPSAweDEwNTIsCglLZXlfU3VwZXJfTCA9
IDB4MTA1MywgCQkgCglLZXlfU3VwZXJfUiA9IDB4MTA1NCwKCUtleV9NZW51ID0gMHgxMDU1LAoJ
S2V5X0h5cGVyX0wgPSAweDEwNTYsCglLZXlfSHlwZXJfUiA9IDB4MTA1NywKCUtleV9IZWxwID0g
MHgxMDU4LAoJS2V5X1NwYWNlID0gMHgyMCwJCSAKCUtleV9BbnkgPSBLZXlfU3BhY2UsCglLZXlf
RXhjbGFtID0gMHgyMSwKCUtleV9RdW90ZURibCA9IDB4MjIsCglLZXlfTnVtYmVyU2lnbiA9IDB4
MjMsCglLZXlfRG9sbGFyID0gMHgyNCwKCUtleV9QZXJjZW50ID0gMHgyNSwKCUtleV9BbXBlcnNh
bmQgPSAweDI2LAoJS2V5X0Fwb3N0cm9waGUgPSAweDI3LAoJS2V5X1BhcmVuTGVmdCA9IDB4Mjgs
CglLZXlfUGFyZW5SaWdodCA9IDB4MjksCglLZXlfQXN0ZXJpc2sgPSAweDJhLAoJS2V5X1BsdXMg
PSAweDJiLAoJS2V5X0NvbW1hID0gMHgyYywKCUtleV9NaW51cyA9IDB4MmQsCglLZXlfUGVyaW9k
ID0gMHgyZSwKCUtleV9TbGFzaCA9IDB4MmYsCglLZXlfMCA9IDB4MzAsCglLZXlfMSA9IDB4MzEs
CglLZXlfMiA9IDB4MzIsCglLZXlfMyA9IDB4MzMsCglLZXlfNCA9IDB4MzQsCglLZXlfNSA9IDB4
MzUsCglLZXlfNiA9IDB4MzYsCglLZXlfNyA9IDB4MzcsCglLZXlfOCA9IDB4MzgsCglLZXlfOSA9
IDB4MzksCglLZXlfQ29sb24gPSAweDNhLAoJS2V5X1NlbWljb2xvbiA9IDB4M2IsCglLZXlfTGVz
cyA9IDB4M2MsCglLZXlfRXF1YWwgPSAweDNkLAoJS2V5X0dyZWF0ZXIgPSAweDNlLAoJS2V5X1F1
ZXN0aW9uID0gMHgzZiwKCUtleV9BdCA9IDB4NDAsCglLZXlfQSA9IDB4NDEsCglLZXlfQiA9IDB4
NDIsCglLZXlfQyA9IDB4NDMsCglLZXlfRCA9IDB4NDQsCglLZXlfRSA9IDB4NDUsCglLZXlfRiA9
IDB4NDYsCglLZXlfRyA9IDB4NDcsCglLZXlfSCA9IDB4NDgsCglLZXlfSSA9IDB4NDksCglLZXlf
SiA9IDB4NGEsCglLZXlfSyA9IDB4NGIsCglLZXlfTCA9IDB4NGMsCglLZXlfTSA9IDB4NGQsCglL
ZXlfTiA9IDB4NGUsCglLZXlfTyA9IDB4NGYsCglLZXlfUCA9IDB4NTAsCglLZXlfUSA9IDB4NTEs
CglLZXlfUiA9IDB4NTIsCglLZXlfUyA9IDB4NTMsCglLZXlfVCA9IDB4NTQsCglLZXlfVSA9IDB4
NTUsCglLZXlfViA9IDB4NTYsCglLZXlfVyA9IDB4NTcsCglLZXlfWCA9IDB4NTgsCglLZXlfWSA9
IDB4NTksCglLZXlfWiA9IDB4NWEsCglLZXlfQnJhY2tldExlZnQgPSAweDViLAoJS2V5X0JhY2tz
bGFzaCA9IDB4NWMsCglLZXlfQnJhY2tldFJpZ2h0ID0gMHg1ZCwKCUtleV9Bc2NpaUNpcmN1bSA9
IDB4NWUsCglLZXlfVW5kZXJzY29yZSA9IDB4NWYsCglLZXlfUXVvdGVMZWZ0ID0gMHg2MCwKCUtl
eV9CcmFjZUxlZnQgPSAweDdiLAoJS2V5X0JhciA9IDB4N2MsCglLZXlfQnJhY2VSaWdodCA9IDB4
N2QsCglLZXlfQXNjaWlUaWxkZSA9IDB4N2UsCgoJIAoKCUtleV9ub2JyZWFrc3BhY2UgPSAweDBh
MCwKCUtleV9leGNsYW1kb3duID0gMHgwYTEsCglLZXlfY2VudCA9IDB4MGEyLAoJS2V5X3N0ZXJs
aW5nID0gMHgwYTMsCglLZXlfY3VycmVuY3kgPSAweDBhNCwKCUtleV95ZW4gPSAweDBhNSwKCUtl
eV9icm9rZW5iYXIgPSAweDBhNiwKCUtleV9zZWN0aW9uID0gMHgwYTcsCglLZXlfZGlhZXJlc2lz
ID0gMHgwYTgsCglLZXlfY29weXJpZ2h0ID0gMHgwYTksCglLZXlfb3JkZmVtaW5pbmUgPSAweDBh
YSwKCUtleV9ndWlsbGVtb3RsZWZ0ID0gMHgwYWIsCSAKCUtleV9ub3RzaWduID0gMHgwYWMsCglL
ZXlfaHlwaGVuID0gMHgwYWQsCglLZXlfcmVnaXN0ZXJlZCA9IDB4MGFlLAoJS2V5X21hY3JvbiA9
IDB4MGFmLAoJS2V5X2RlZ3JlZSA9IDB4MGIwLAoJS2V5X3BsdXNtaW51cyA9IDB4MGIxLAoJS2V5
X3R3b3N1cGVyaW9yID0gMHgwYjIsCglLZXlfdGhyZWVzdXBlcmlvciA9IDB4MGIzLAoJS2V5X2Fj
dXRlID0gMHgwYjQsCglLZXlfbXUgPSAweDBiNSwKCUtleV9wYXJhZ3JhcGggPSAweDBiNiwKCUtl
eV9wZXJpb2RjZW50ZXJlZCA9IDB4MGI3LAoJS2V5X2NlZGlsbGEgPSAweDBiOCwKCUtleV9vbmVz
dXBlcmlvciA9IDB4MGI5LAoJS2V5X21hc2N1bGluZSA9IDB4MGJhLAoJS2V5X2d1aWxsZW1vdHJp
Z2h0ID0gMHgwYmIsCSAKCUtleV9vbmVxdWFydGVyID0gMHgwYmMsCglLZXlfb25laGFsZiA9IDB4
MGJkLAoJS2V5X3RocmVlcXVhcnRlcnMgPSAweDBiZSwKCUtleV9xdWVzdGlvbmRvd24gPSAweDBi
ZiwKCUtleV9BZ3JhdmUgPSAweDBjMCwKCUtleV9BYWN1dGUgPSAweDBjMSwKCUtleV9BY2lyY3Vt
ZmxleCA9IDB4MGMyLAoJS2V5X0F0aWxkZSA9IDB4MGMzLAoJS2V5X0FkaWFlcmVzaXMgPSAweDBj
NCwKCUtleV9BcmluZyA9IDB4MGM1LAoJS2V5X0FFID0gMHgwYzYsCglLZXlfQ2NlZGlsbGEgPSAw
eDBjNywKCUtleV9FZ3JhdmUgPSAweDBjOCwKCUtleV9FYWN1dGUgPSAweDBjOSwKCUtleV9FY2ly
Y3VtZmxleCA9IDB4MGNhLAoJS2V5X0VkaWFlcmVzaXMgPSAweDBjYiwKCUtleV9JZ3JhdmUgPSAw
eDBjYywKCUtleV9JYWN1dGUgPSAweDBjZCwKCUtleV9JY2lyY3VtZmxleCA9IDB4MGNlLAoJS2V5
X0lkaWFlcmVzaXMgPSAweDBjZiwKCUtleV9FVEggPSAweDBkMCwKCUtleV9OdGlsZGUgPSAweDBk
MSwKCUtleV9PZ3JhdmUgPSAweDBkMiwKCUtleV9PYWN1dGUgPSAweDBkMywKCUtleV9PY2lyY3Vt
ZmxleCA9IDB4MGQ0LAoJS2V5X090aWxkZSA9IDB4MGQ1LAoJS2V5X09kaWFlcmVzaXMgPSAweDBk
NiwKCUtleV9tdWx0aXBseSA9IDB4MGQ3LAoJS2V5X09vYmxpcXVlID0gMHgwZDgsCglLZXlfVWdy
YXZlID0gMHgwZDksCglLZXlfVWFjdXRlID0gMHgwZGEsCglLZXlfVWNpcmN1bWZsZXggPSAweDBk
YiwKCUtleV9VZGlhZXJlc2lzID0gMHgwZGMsCglLZXlfWWFjdXRlID0gMHgwZGQsCglLZXlfVEhP
Uk4gPSAweDBkZSwKCUtleV9zc2hhcnAgPSAweDBkZiwKCUtleV9hZ3JhdmUgPSAweDBlMCwKCUtl
eV9hYWN1dGUgPSAweDBlMSwKCUtleV9hY2lyY3VtZmxleCA9IDB4MGUyLAoJS2V5X2F0aWxkZSA9
IDB4MGUzLAoJS2V5X2FkaWFlcmVzaXMgPSAweDBlNCwKCUtleV9hcmluZyA9IDB4MGU1LAoJS2V5
X2FlID0gMHgwZTYsCglLZXlfY2NlZGlsbGEgPSAweDBlNywKCUtleV9lZ3JhdmUgPSAweDBlOCwK
CUtleV9lYWN1dGUgPSAweDBlOSwKCUtleV9lY2lyY3VtZmxleCA9IDB4MGVhLAoJS2V5X2VkaWFl
cmVzaXMgPSAweDBlYiwKCUtleV9pZ3JhdmUgPSAweDBlYywKCUtleV9pYWN1dGUgPSAweDBlZCwK
CUtleV9pY2lyY3VtZmxleCA9IDB4MGVlLAoJS2V5X2lkaWFlcmVzaXMgPSAweDBlZiwKCUtleV9l
dGggPSAweDBmMCwKCUtleV9udGlsZGUgPSAweDBmMSwKCUtleV9vZ3JhdmUgPSAweDBmMiwKCUtl
eV9vYWN1dGUgPSAweDBmMywKCUtleV9vY2lyY3VtZmxleCA9IDB4MGY0LAoJS2V5X290aWxkZSA9
IDB4MGY1LAoJS2V5X29kaWFlcmVzaXMgPSAweDBmNiwKCUtleV9kaXZpc2lvbiA9IDB4MGY3LAoJ
S2V5X29zbGFzaCA9IDB4MGY4LAoJS2V5X3VncmF2ZSA9IDB4MGY5LAoJS2V5X3VhY3V0ZSA9IDB4
MGZhLAoJS2V5X3VjaXJjdW1mbGV4ID0gMHgwZmIsCglLZXlfdWRpYWVyZXNpcyA9IDB4MGZjLAoJ
S2V5X3lhY3V0ZSA9IDB4MGZkLAoJS2V5X3Rob3JuID0gMHgwZmUsCglLZXlfeWRpYWVyZXNpcyA9
IDB4MGZmLAoKCUtleV91bmtub3duID0gMHhmZmZmCiAgICB9OwoKICAgIGVudW0gQXJyb3dUeXBl
IHsKCVVwQXJyb3csCglEb3duQXJyb3csCglMZWZ0QXJyb3csCglSaWdodEFycm93CiAgICB9OwoK
ICAgICAKICAgIGVudW0gUmFzdGVyT3AgeyAgCglDb3B5Uk9QLAoJT3JST1AsCglYb3JST1AsCglO
b3RBbmRST1AsCglFcmFzZVJPUD1Ob3RBbmRST1AsCglOb3RDb3B5Uk9QLAoJTm90T3JST1AsCglO
b3RYb3JST1AsCglBbmRST1AsCU5vdEVyYXNlUk9QPUFuZFJPUCwKCU5vdFJPUCwKCUNsZWFyUk9Q
LAoJU2V0Uk9QLAoJTm9wUk9QLAoJQW5kTm90Uk9QLAoJT3JOb3RST1AsCglOYW5kUk9QLAoJTm9y
Uk9QLAlMYXN0Uk9QPU5vclJPUAogICAgfTsKCiAgICAgCiAgICBlbnVtIFBlblN0eWxlIHsgIAoJ
Tm9QZW4sCglTb2xpZExpbmUsCglEYXNoTGluZSwKCURvdExpbmUsCglEYXNoRG90TGluZSwKCURh
c2hEb3REb3RMaW5lLAoJTVBlblN0eWxlID0gMHgwZgogICAgfTsKCiAgICBlbnVtIFBlbkNhcFN0
eWxlIHsgIAoJRmxhdENhcCA9IDB4MDAsCglTcXVhcmVDYXAgPSAweDEwLAoJUm91bmRDYXAgPSAw
eDIwLAoJTVBlbkNhcFN0eWxlID0gMHgzMAogICAgfTsKCiAgICBlbnVtIFBlbkpvaW5TdHlsZSB7
ICAKCU1pdGVySm9pbiA9IDB4MDAsCglCZXZlbEpvaW4gPSAweDQwLAoJUm91bmRKb2luID0gMHg4
MCwKCU1QZW5Kb2luU3R5bGUgPSAweGMwCiAgICB9OwoKICAgIGVudW0gQnJ1c2hTdHlsZSB7ICAK
CU5vQnJ1c2gsCglTb2xpZFBhdHRlcm4sCglEZW5zZTFQYXR0ZXJuLAoJRGVuc2UyUGF0dGVybiwK
CURlbnNlM1BhdHRlcm4sCglEZW5zZTRQYXR0ZXJuLAoJRGVuc2U1UGF0dGVybiwKCURlbnNlNlBh
dHRlcm4sCglEZW5zZTdQYXR0ZXJuLAoJSG9yUGF0dGVybiwKCVZlclBhdHRlcm4sCglDcm9zc1Bh
dHRlcm4sCglCRGlhZ1BhdHRlcm4sCglGRGlhZ1BhdHRlcm4sCglEaWFnQ3Jvc3NQYXR0ZXJuLAoJ
Q3VzdG9tUGF0dGVybj0yNAogICAgfTsKCiAgICBlbnVtIFdpbmRvd3NWZXJzaW9uIHsKCVdWXzMy
cyAJCT0gMHgwMDAxLAoJV1ZfOTUgCQk9IDB4MDAwMiwKCVdWXzk4CQk9IDB4MDAwMywKCVdWX0RP
U19iYXNlZAk9IDB4MDAwZiwKCglXVl9OVCAJCT0gMHgwMDEwLAoJV1ZfMjAwMCAJPSAweDAwMjAs
CglXVl9OVF9iYXNlZAk9IDB4MDBmMAogICAgfTsKCiAgICBlbnVtIFVJRWZmZWN0IHsKCVVJX0dl
bmVyYWwsCglVSV9BbmltYXRlTWVudSwKCVVJX0ZhZGVNZW51LAoJVUlfQW5pbWF0ZUNvbWJvLAoJ
VUlfQW5pbWF0ZVRvb2x0aXAsCglVSV9GYWRlVG9vbHRpcAogICAgfTsKCgogICAgIAoKICAgIHN0
YXRpYyBjb25zdCAgUUN1cnNvciAmIGFycm93Q3Vyc29yOwkgCiAgICBzdGF0aWMgY29uc3QgIFFD
dXJzb3IgJiB1cEFycm93Q3Vyc29yOwkgCiAgICBzdGF0aWMgY29uc3QgIFFDdXJzb3IgJiBjcm9z
c0N1cnNvcjsJIAogICAgc3RhdGljIGNvbnN0ICBRQ3Vyc29yICYgd2FpdEN1cnNvcjsJIAogICAg
c3RhdGljIGNvbnN0ICBRQ3Vyc29yICYgaWJlYW1DdXJzb3I7CSAKICAgIHN0YXRpYyBjb25zdCAg
UUN1cnNvciAmIHNpemVWZXJDdXJzb3I7CSAKICAgIHN0YXRpYyBjb25zdCAgUUN1cnNvciAmIHNp
emVIb3JDdXJzb3I7CSAKICAgIHN0YXRpYyBjb25zdCAgUUN1cnNvciAmIHNpemVCRGlhZ0N1cnNv
cjsJIAogICAgc3RhdGljIGNvbnN0ICBRQ3Vyc29yICYgc2l6ZUZEaWFnQ3Vyc29yOwkgCiAgICBz
dGF0aWMgY29uc3QgIFFDdXJzb3IgJiBzaXplQWxsQ3Vyc29yOwkgCiAgICBzdGF0aWMgY29uc3Qg
IFFDdXJzb3IgJiBibGFua0N1cnNvcjsJIAogICAgc3RhdGljIGNvbnN0ICBRQ3Vyc29yICYgc3Bs
aXRWQ3Vyc29yOwkgCgkJCQkJCSAKICAgIHN0YXRpYyBjb25zdCAgUUN1cnNvciAmIHNwbGl0SEN1
cnNvcjsJIAoJCQkJCQkgCiAgICBzdGF0aWMgY29uc3QgIFFDdXJzb3IgJiBwb2ludGluZ0hhbmRD
dXJzb3I7CSAKICAgIHN0YXRpYyBjb25zdCAgUUN1cnNvciAmIGZvcmJpZGRlbkN1cnNvcjsJIAoK
CiAgICBlbnVtIFRleHRGb3JtYXQgewoJUGxhaW5UZXh0LAoJUmljaFRleHQsCglBdXRvVGV4dAog
ICAgfTsKfTsKCgpjbGFzcyAgIFFJbnRlcm5hbCB7CnB1YmxpYzoKICAgIGVudW0gUGFpbnREZXZp
Y2VGbGFncyB7CglVbmRlZmluZWREZXZpY2UgPSAweDAwLAoJV2lkZ2V0ID0gMHgwMSwKCVBpeG1h
cCA9IDB4MDIsCglQcmludGVyID0gMHgwMywKCVBpY3R1cmUgPSAweDA0LAoJU3lzdGVtID0gMHgw
NSwKCURldmljZVR5cGVNYXNrID0gMHgwZiwKCUV4dGVybmFsRGV2aWNlID0gMHgxMAogICAgfTsK
fTsKCgojIDQ1ICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0y
LjIuMy9pbmNsdWRlL3F3aW5kb3dkZWZzLmgiIDIKCgoKIyAxICIvaG9tZS90aGltbS9wdWJsaWMv
Z2NjLTIuOTUuMi9hbHBoYS1kZWMtb3NmNC4wZS9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4w
ZS8yLjk1LjIvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiAKCgogCgoKCgoKIAojIDEgIi9ob21lL3Ro
aW1tL3B1YmxpYy9nY2MtMi45NS4yL2FscGhhLWRlYy1vc2Y0LjBlL2xpYi9nY2MtbGliL2FscGhh
LWRlYy1vc2Y0LjBlLzIuOTUuMi9pbmNsdWRlL3N5c2xpbWl0cy5oIiAxIDMKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKIAoKIAogCgoKCiAKCgogCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKCiMgMjcxICIvaG9tZS90aGltbS9wdWJsaWMvZ2NjLTIuOTUuMi9hbHBoYS1k
ZWMtb3NmNC4wZS9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4wZS8yLjk1LjIvaW5jbHVkZS9z
eXNsaW1pdHMuaCIgMwoKIyAxMSAiL2hvbWUvdGhpbW0vcHVibGljL2djYy0yLjk1LjIvYWxwaGEt
ZGVjLW9zZjQuMGUvbGliL2djYy1saWIvYWxwaGEtZGVjLW9zZjQuMGUvMi45NS4yL2luY2x1ZGUv
bGltaXRzLmgiIDIgMwoKCgojIDEwOSAiL2hvbWUvdGhpbW0vcHVibGljL2djYy0yLjk1LjIvYWxw
aGEtZGVjLW9zZjQuMGUvbGliL2djYy1saWIvYWxwaGEtZGVjLW9zZjQuMGUvMi45NS4yL2luY2x1
ZGUvbGltaXRzLmgiIDMKCgogCgoKCgoKCgoKCiMgNDggIi9hbWQvc2lnbWEvMC9zcmMvYWxwaGEt
ZGVjLW9zZjQuMC93b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcXdpbmRvd2RlZnMuaCIgMgoKCiAK
CmNsYXNzIFFQYWludERldmljZTsKY2xhc3MgUVBhaW50RGV2aWNlTWV0cmljczsKY2xhc3MgUVdp
ZGdldDsKY2xhc3MgUVdpZGdldE1hcHBlcjsKY2xhc3MgUURpYWxvZzsKY2xhc3MgUUNvbG9yOwpj
bGFzcyBRQ29sb3JHcm91cDsKY2xhc3MgUVBhbGV0dGU7CmNsYXNzIFFDdXJzb3I7CmNsYXNzIFFQ
b2ludDsKY2xhc3MgUVNpemU7CmNsYXNzIFFSZWN0OwpjbGFzcyBRUG9pbnRBcnJheTsKY2xhc3Mg
UVBhaW50ZXI7CmNsYXNzIFFSZWdpb247CmNsYXNzIFFGb250OwpjbGFzcyBRRm9udE1ldHJpY3M7
CmNsYXNzIFFGb250SW5mbzsKY2xhc3MgUVBlbjsKY2xhc3MgUUJydXNoOwpjbGFzcyBRV01hdHJp
eDsKY2xhc3MgUVBpeG1hcDsKY2xhc3MgUUJpdG1hcDsKY2xhc3MgUU1vdmllOwpjbGFzcyBRSW1h
Z2U7CmNsYXNzIFFJbWFnZUlPOwpjbGFzcyBRUGljdHVyZTsKY2xhc3MgUVByaW50ZXI7CmNsYXNz
IFFBY2NlbDsKY2xhc3MgUVRpbWVyOwpjbGFzcyBRVGltZTsKY2xhc3MgUUNsaXBib2FyZDsKCgog
CgpjbGFzcyBRV2lkZ2V0TGlzdDsKY2xhc3MgUVdpZGdldExpc3RJdDsKCgogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIFdJZDsKdHlwZWRlZiB1bnNpZ25lZCBs
b25nICBIQU5ETEU7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX1hEaXNwbGF5IERpc3BsYXk7CnR5cGVk
ZWYgdW5pb24gIF9YRXZlbnQgWEV2ZW50Owp0eXBlZGVmIHN0cnVjdCBfWEdDICpHQzsKdHlwZWRl
ZiBzdHJ1Y3QgX1hSZWdpb24gKlJlZ2lvbjsKCiAgRGlzcGxheSAqcXRfeGRpc3BsYXkoKTsKICBp
bnQJIHF0X3hzY3JlZW4oKTsKICBXSWQJIHF0X3hyb290d2luKCk7CiAgR0MJIHF0X3hnZXRfcmVh
ZG9ubHlfZ2MoIGJvb2wgbW9ub2Nocm9tZT0gMCAgKTsKICBHQwkgcXRfeGdldF90ZW1wX2djKCBi
b29sIG1vbm9jaHJvbWU9IDAgICk7CgoKCgoKCgoKCgoKCmNsYXNzIFFBcHBsaWNhdGlvbjsKCgoK
CgogCgoKdHlwZWRlZiBRX0lOVDMyIFFDT09SRDsJCQkJIApjb25zdCBRQ09PUkQgUUNPT1JEX01B
WCA9ICAyMTQ3NDgzNjQ3Owpjb25zdCBRQ09PUkQgUUNPT1JEX01JTiA9IC1RQ09PUkRfTUFYIC0g
MTsKCnR5cGVkZWYgdW5zaWduZWQgaW50IFFSZ2I7CQkJIAoKICBjaGFyICpxQXBwTmFtZSgpOwkJ
CSAKCgogCgp0eXBlZGVmIHZvaWQgKCpRX0NsZWFuVXBGdW5jdGlvbikoKTsKICB2b2lkIHFBZGRQ
b3N0Um91dGluZSggUV9DbGVhblVwRnVuY3Rpb24gKTsKICB2b2lkIHFSZW1vdmVQb3N0Um91dGlu
ZSggUV9DbGVhblVwRnVuY3Rpb24gKTsKCiAKICB2b2lkICpxdF9maW5kX29ial9jaGlsZCggUU9i
amVjdCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwoKCgoKCiMgNDMgIi9hbWQvc2ln
bWEvMC9zcmMvYWxwaGEtZGVjLW9zZjQuMC93b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcW9iamVj
dC5oIiAyCgoKIyAxICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9x
dC0yLjIuMy9pbmNsdWRlL3FldmVudC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgojIDEgIi9hbWQvc2lnbWEvMC9zcmMvYWxwaGEtZGVjLW9zZjQuMC93b3Jr
ZGlyL3F0LTIuMi4zL2luY2x1ZGUvcXJlZ2lvbi5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9hbWQvc2lnbWEvMC9zcmMvYWxwaGEtZGVjLW9zZjQu
MC93b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcXJlY3QuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9hbWQvc2lnbWEvMC9zcmMvYWxwaGEtZGVjLW9z
ZjQuMC93b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcXNpemUuaCIgMQogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9hbWQvc2lnbWEvMC9zcmMvYWxwaGEtZGVj
LW9zZjQuMC93b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcXBvaW50LmgiIDEKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmNsYXNzICAgUVBvaW50CnsKcHVibGlj
OgogICAgUVBvaW50KCk7CiAgICBRUG9pbnQoIGludCB4cG9zLCBpbnQgeXBvcyApOwoKICAgIGJv
b2wgICBpc051bGwoKQljb25zdDsKCiAgICBpbnQJICAgeCgpCQljb25zdDsKICAgIGludAkgICB5
KCkJCWNvbnN0OwogICAgdm9pZCAgIHNldFgoIGludCB4ICk7CiAgICB2b2lkICAgc2V0WSggaW50
IHkgKTsKCiAgICBpbnQgbWFuaGF0dGFuTGVuZ3RoKCkgY29uc3Q7CgogICAgUUNPT1JEICZyeCgp
OwogICAgUUNPT1JEICZyeSgpOwoKICAgIFFQb2ludCAmb3BlcmF0b3IrPSggY29uc3QgUVBvaW50
ICZwICk7CiAgICBRUG9pbnQgJm9wZXJhdG9yLT0oIGNvbnN0IFFQb2ludCAmcCApOwogICAgUVBv
aW50ICZvcGVyYXRvcio9KCBpbnQgYyApOwogICAgUVBvaW50ICZvcGVyYXRvcio9KCBkb3VibGUg
YyApOwogICAgUVBvaW50ICZvcGVyYXRvci89KCBpbnQgYyApOwogICAgUVBvaW50ICZvcGVyYXRv
ci89KCBkb3VibGUgYyApOwoKICAgIGZyaWVuZCBpbmxpbmUgYm9vbAkgb3BlcmF0b3I9PSggY29u
c3QgUVBvaW50ICYsIGNvbnN0IFFQb2ludCAmICk7CiAgICBmcmllbmQgaW5saW5lIGJvb2wJIG9w
ZXJhdG9yIT0oIGNvbnN0IFFQb2ludCAmLCBjb25zdCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlu
bGluZSBRUG9pbnQgb3BlcmF0b3IrKCBjb25zdCBRUG9pbnQgJiwgY29uc3QgUVBvaW50ICYgKTsK
ICAgIGZyaWVuZCBpbmxpbmUgUVBvaW50IG9wZXJhdG9yLSggY29uc3QgUVBvaW50ICYsIGNvbnN0
IFFQb2ludCAmICk7CiAgICBmcmllbmQgaW5saW5lIFFQb2ludCBvcGVyYXRvciooIGNvbnN0IFFQ
b2ludCAmLCBpbnQgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVBvaW50IG9wZXJhdG9yKiggaW50LCBj
b25zdCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBRUG9pbnQgb3BlcmF0b3IqKCBjb25z
dCBRUG9pbnQgJiwgZG91YmxlICk7CiAgICBmcmllbmQgaW5saW5lIFFQb2ludCBvcGVyYXRvcioo
IGRvdWJsZSwgY29uc3QgUVBvaW50ICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVBvaW50IG9wZXJh
dG9yLSggY29uc3QgUVBvaW50ICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVBvaW50IG9wZXJhdG9y
LyggY29uc3QgUVBvaW50ICYsIGludCApOwogICAgZnJpZW5kIGlubGluZSBRUG9pbnQgb3BlcmF0
b3IvKCBjb25zdCBRUG9pbnQgJiwgZG91YmxlICk7Cgpwcml2YXRlOgogICAgc3RhdGljIHZvaWQg
d2FybmluZ0RpdkJ5WmVybygpOwoKCgoKCiAgICBRQ09PUkQgeHA7CiAgICBRQ09PUkQgeXA7Cgp9
OwoKCiAKCgoKICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3Qg
UVBvaW50ICYgKTsKICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVBv
aW50ICYgKTsKCgogCgoKCmlubGluZSBRUG9pbnQ6OlFQb2ludCgpCnsgeHA9MDsgeXA9MDsgfQoK
aW5saW5lIFFQb2ludDo6UVBvaW50KCBpbnQgeHBvcywgaW50IHlwb3MgKQp7IHhwPShRQ09PUkQp
eHBvczsgeXA9KFFDT09SRCl5cG9zOyB9CgppbmxpbmUgYm9vbCBRUG9pbnQ6OmlzTnVsbCgpIGNv
bnN0CnsgcmV0dXJuIHhwID09IDAgJiYgeXAgPT0gMDsgfQoKaW5saW5lIGludCBRUG9pbnQ6Ongo
KSBjb25zdAp7IHJldHVybiB4cDsgfQoKaW5saW5lIGludCBRUG9pbnQ6OnkoKSBjb25zdAp7IHJl
dHVybiB5cDsgfQoKaW5saW5lIHZvaWQgUVBvaW50OjpzZXRYKCBpbnQgeCApCnsgeHAgPSAoUUNP
T1JEKXg7IH0KCmlubGluZSB2b2lkIFFQb2ludDo6c2V0WSggaW50IHkgKQp7IHlwID0gKFFDT09S
RCl5OyB9CgppbmxpbmUgUUNPT1JEICZRUG9pbnQ6OnJ4KCkKeyByZXR1cm4geHA7IH0KCmlubGlu
ZSBRQ09PUkQgJlFQb2ludDo6cnkoKQp7IHJldHVybiB5cDsgfQoKaW5saW5lIFFQb2ludCAmUVBv
aW50OjpvcGVyYXRvcis9KCBjb25zdCBRUG9pbnQgJnAgKQp7IHhwKz1wLnhwOyB5cCs9cC55cDsg
cmV0dXJuICp0aGlzOyB9CgppbmxpbmUgUVBvaW50ICZRUG9pbnQ6Om9wZXJhdG9yLT0oIGNvbnN0
IFFQb2ludCAmcCApCnsgeHAtPXAueHA7IHlwLT1wLnlwOyByZXR1cm4gKnRoaXM7IH0KCmlubGlu
ZSBRUG9pbnQgJlFQb2ludDo6b3BlcmF0b3IqPSggaW50IGMgKQp7IHhwKj0oUUNPT1JEKWM7IHlw
Kj0oUUNPT1JEKWM7IHJldHVybiAqdGhpczsgfQoKaW5saW5lIFFQb2ludCAmUVBvaW50OjpvcGVy
YXRvcio9KCBkb3VibGUgYyApCnsgeHA9KFFDT09SRCkoeHAqYyk7IHlwPShRQ09PUkQpKHlwKmMp
OyByZXR1cm4gKnRoaXM7IH0KCmlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFQb2ludCAm
cDEsIGNvbnN0IFFQb2ludCAmcDIgKQp7IHJldHVybiBwMS54cCA9PSBwMi54cCAmJiBwMS55cCA9
PSBwMi55cDsgfQoKaW5saW5lIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVBvaW50ICZwMSwgY29u
c3QgUVBvaW50ICZwMiApCnsgcmV0dXJuIHAxLnhwICE9IHAyLnhwIHx8IHAxLnlwICE9IHAyLnlw
OyB9CgppbmxpbmUgUVBvaW50IG9wZXJhdG9yKyggY29uc3QgUVBvaW50ICZwMSwgY29uc3QgUVBv
aW50ICZwMiApCnsgcmV0dXJuIFFQb2ludChwMS54cCtwMi54cCwgcDEueXArcDIueXApOyB9Cgpp
bmxpbmUgUVBvaW50IG9wZXJhdG9yLSggY29uc3QgUVBvaW50ICZwMSwgY29uc3QgUVBvaW50ICZw
MiApCnsgcmV0dXJuIFFQb2ludChwMS54cC1wMi54cCwgcDEueXAtcDIueXApOyB9CgppbmxpbmUg
UVBvaW50IG9wZXJhdG9yKiggY29uc3QgUVBvaW50ICZwLCBpbnQgYyApCnsgcmV0dXJuIFFQb2lu
dChwLnhwKmMsIHAueXAqYyk7IH0KCmlubGluZSBRUG9pbnQgb3BlcmF0b3IqKCBpbnQgYywgY29u
c3QgUVBvaW50ICZwICkKeyByZXR1cm4gUVBvaW50KHAueHAqYywgcC55cCpjKTsgfQoKaW5saW5l
IFFQb2ludCBvcGVyYXRvciooIGNvbnN0IFFQb2ludCAmcCwgZG91YmxlIGMgKQp7IHJldHVybiBR
UG9pbnQoKFFDT09SRCkocC54cCpjKSwgKFFDT09SRCkocC55cCpjKSk7IH0KCmlubGluZSBRUG9p
bnQgb3BlcmF0b3IqKCBkb3VibGUgYywgY29uc3QgUVBvaW50ICZwICkKeyByZXR1cm4gUVBvaW50
KChRQ09PUkQpKHAueHAqYyksIChRQ09PUkQpKHAueXAqYykpOyB9CgppbmxpbmUgUVBvaW50IG9w
ZXJhdG9yLSggY29uc3QgUVBvaW50ICZwICkKeyByZXR1cm4gUVBvaW50KC1wLnhwLCAtcC55cCk7
IH0KCmlubGluZSBRUG9pbnQgJlFQb2ludDo6b3BlcmF0b3IvPSggaW50IGMgKQp7CgogICAgaWYg
KCBjID09IDAgKQoJd2FybmluZ0RpdkJ5WmVybygpOwoKICAgIHhwLz0oUUNPT1JEKWM7CiAgICB5
cC89KFFDT09SRCljOwogICAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgUVBvaW50ICZRUG9pbnQ6
Om9wZXJhdG9yLz0oIGRvdWJsZSBjICkKewoKICAgIGlmICggYyA9PSAwLjAgKQoJd2FybmluZ0Rp
dkJ5WmVybygpOwoKICAgIHhwPShRQ09PUkQpKHhwL2MpOwogICAgeXA9KFFDT09SRCkoeXAvYyk7
CiAgICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBRUG9pbnQgb3BlcmF0b3IvKCBjb25zdCBRUG9p
bnQgJnAsIGludCBjICkKewoKICAgIGlmICggYyA9PSAwICkKCVFQb2ludDo6d2FybmluZ0RpdkJ5
WmVybygpOwoKICAgIHJldHVybiBRUG9pbnQocC54cC9jLCBwLnlwL2MpOwp9CgppbmxpbmUgUVBv
aW50IG9wZXJhdG9yLyggY29uc3QgUVBvaW50ICZwLCBkb3VibGUgYyApCnsKCiAgICBpZiAoIGMg
PT0gMC4wICkKCVFQb2ludDo6d2FybmluZ0RpdkJ5WmVybygpOwoKICAgIHJldHVybiBRUG9pbnQo
KFFDT09SRCkocC54cC9jKSwgKFFDT09SRCkocC55cC9jKSk7Cn0KCgoKIyA0MiAiL2FtZC9zaWdt
YS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xc2l6ZS5o
IiAyCgoKCgpjbGFzcyAgIFFTaXplCnsKcHVibGljOgogICAgUVNpemUoKTsKICAgIFFTaXplKCBp
bnQgdywgaW50IGggKTsKCiAgICBib29sICAgaXNOdWxsKCkJY29uc3Q7CiAgICBib29sICAgaXNF
bXB0eSgpCWNvbnN0OwogICAgYm9vbCAgIGlzVmFsaWQoKQljb25zdDsKCiAgICBpbnQJICAgd2lk
dGgoKQljb25zdDsKICAgIGludAkgICBoZWlnaHQoKQljb25zdDsKICAgIHZvaWQgICBzZXRXaWR0
aCggaW50IHcgKTsKICAgIHZvaWQgICBzZXRIZWlnaHQoIGludCBoICk7CiAgICB2b2lkICAgdHJh
bnNwb3NlKCk7CgogICAgUVNpemUgZXhwYW5kZWRUbyggY29uc3QgUVNpemUgJiApIGNvbnN0Owog
ICAgUVNpemUgYm91bmRlZFRvKCBjb25zdCBRU2l6ZSAmICkgY29uc3Q7CgogICAgUUNPT1JEICZy
d2lkdGgoKTsKICAgIFFDT09SRCAmcmhlaWdodCgpOwoKICAgIFFTaXplICZvcGVyYXRvcis9KCBj
b25zdCBRU2l6ZSAmICk7CiAgICBRU2l6ZSAmb3BlcmF0b3ItPSggY29uc3QgUVNpemUgJiApOwog
ICAgUVNpemUgJm9wZXJhdG9yKj0oIGludCBjICk7CiAgICBRU2l6ZSAmb3BlcmF0b3IqPSggZG91
YmxlIGMgKTsKICAgIFFTaXplICZvcGVyYXRvci89KCBpbnQgYyApOwogICAgUVNpemUgJm9wZXJh
dG9yLz0oIGRvdWJsZSBjICk7CgogICAgZnJpZW5kIGlubGluZSBib29sCW9wZXJhdG9yPT0oIGNv
bnN0IFFTaXplICYsIGNvbnN0IFFTaXplICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgYm9vbAlvcGVy
YXRvciE9KCBjb25zdCBRU2l6ZSAmLCBjb25zdCBRU2l6ZSAmICk7CiAgICBmcmllbmQgaW5saW5l
IFFTaXplIG9wZXJhdG9yKyggY29uc3QgUVNpemUgJiwgY29uc3QgUVNpemUgJiApOwogICAgZnJp
ZW5kIGlubGluZSBRU2l6ZSBvcGVyYXRvci0oIGNvbnN0IFFTaXplICYsIGNvbnN0IFFTaXplICYg
KTsKICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBjb25zdCBRU2l6ZSAmLCBpbnQg
KTsKICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBpbnQsIGNvbnN0IFFTaXplICYg
KTsKICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBjb25zdCBRU2l6ZSAmLCBkb3Vi
bGUgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBkb3VibGUsIGNvbnN0IFFT
aXplICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IvKCBjb25zdCBRU2l6ZSAm
LCBpbnQgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IvKCBjb25zdCBRU2l6ZSAm
LCBkb3VibGUgKTsKCnByaXZhdGU6CiAgICBzdGF0aWMgdm9pZCB3YXJuaW5nRGl2QnlaZXJvKCk7
CgogICAgUUNPT1JEIHdkOwogICAgUUNPT1JEIGh0Owp9OwoKCiAKCgoKICBRRGF0YVN0cmVhbSAm
b3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVNpemUgJiApOwogIFFEYXRhU3RyZWFt
ICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRU2l6ZSAmICk7CgoKIAoKCgppbmxpbmUgUVNp
emU6OlFTaXplKCkKeyB3ZCA9IGh0ID0gLTE7IH0KCmlubGluZSBRU2l6ZTo6UVNpemUoIGludCB3
LCBpbnQgaCApCnsgd2Q9KFFDT09SRCl3OyBodD0oUUNPT1JEKWg7IH0KCmlubGluZSBib29sIFFT
aXplOjppc051bGwoKSBjb25zdAp7IHJldHVybiB3ZD09MCAmJiBodD09MDsgfQoKaW5saW5lIGJv
b2wgUVNpemU6OmlzRW1wdHkoKSBjb25zdAp7IHJldHVybiB3ZDwxIHx8IGh0PDE7IH0KCmlubGlu
ZSBib29sIFFTaXplOjppc1ZhbGlkKCkgY29uc3QKeyByZXR1cm4gd2Q+PTAgJiYgaHQ+PTA7IH0K
CmlubGluZSBpbnQgUVNpemU6OndpZHRoKCkgY29uc3QKeyByZXR1cm4gd2Q7IH0KCmlubGluZSBp
bnQgUVNpemU6OmhlaWdodCgpIGNvbnN0CnsgcmV0dXJuIGh0OyB9CgppbmxpbmUgdm9pZCBRU2l6
ZTo6c2V0V2lkdGgoIGludCB3ICkKeyB3ZD0oUUNPT1JEKXc7IH0KCmlubGluZSB2b2lkIFFTaXpl
OjpzZXRIZWlnaHQoIGludCBoICkKeyBodD0oUUNPT1JEKWg7IH0KCmlubGluZSBRQ09PUkQgJlFT
aXplOjpyd2lkdGgoKQp7IHJldHVybiB3ZDsgfQoKaW5saW5lIFFDT09SRCAmUVNpemU6OnJoZWln
aHQoKQp7IHJldHVybiBodDsgfQoKaW5saW5lIFFTaXplICZRU2l6ZTo6b3BlcmF0b3IrPSggY29u
c3QgUVNpemUgJnMgKQp7IHdkKz1zLndkOyBodCs9cy5odDsgcmV0dXJuICp0aGlzOyB9Cgppbmxp
bmUgUVNpemUgJlFTaXplOjpvcGVyYXRvci09KCBjb25zdCBRU2l6ZSAmcyApCnsgd2QtPXMud2Q7
IGh0LT1zLmh0OyByZXR1cm4gKnRoaXM7IH0KCmlubGluZSBRU2l6ZSAmUVNpemU6Om9wZXJhdG9y
Kj0oIGludCBjICkKeyB3ZCo9KFFDT09SRCljOyBodCo9KFFDT09SRCljOyByZXR1cm4gKnRoaXM7
IH0KCmlubGluZSBRU2l6ZSAmUVNpemU6Om9wZXJhdG9yKj0oIGRvdWJsZSBjICkKeyB3ZD0oUUNP
T1JEKSh3ZCpjKTsgaHQ9KFFDT09SRCkoaHQqYyk7IHJldHVybiAqdGhpczsgfQoKaW5saW5lIGJv
b2wgb3BlcmF0b3I9PSggY29uc3QgUVNpemUgJnMxLCBjb25zdCBRU2l6ZSAmczIgKQp7IHJldHVy
biBzMS53ZCA9PSBzMi53ZCAmJiBzMS5odCA9PSBzMi5odDsgfQoKaW5saW5lIGJvb2wgb3BlcmF0
b3IhPSggY29uc3QgUVNpemUgJnMxLCBjb25zdCBRU2l6ZSAmczIgKQp7IHJldHVybiBzMS53ZCAh
PSBzMi53ZCB8fCBzMS5odCAhPSBzMi5odDsgfQoKaW5saW5lIFFTaXplIG9wZXJhdG9yKyggY29u
c3QgUVNpemUgJiBzMSwgY29uc3QgUVNpemUgJiBzMiApCnsgcmV0dXJuIFFTaXplKHMxLndkK3My
LndkLCBzMS5odCtzMi5odCk7IH0KCmlubGluZSBRU2l6ZSBvcGVyYXRvci0oIGNvbnN0IFFTaXpl
ICZzMSwgY29uc3QgUVNpemUgJnMyICkKeyByZXR1cm4gUVNpemUoczEud2QtczIud2QsIHMxLmh0
LXMyLmh0KTsgfQoKaW5saW5lIFFTaXplIG9wZXJhdG9yKiggY29uc3QgUVNpemUgJnMsIGludCBj
ICkKeyByZXR1cm4gUVNpemUocy53ZCpjLCBzLmh0KmMpOyB9CgppbmxpbmUgUVNpemUgb3BlcmF0
b3IqKCBpbnQgYywgY29uc3QgUVNpemUgJnMgKQp7ICByZXR1cm4gUVNpemUocy53ZCpjLCBzLmh0
KmMpOyB9CgppbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBjb25zdCBRU2l6ZSAmcywgZG91YmxlIGMg
KQp7IHJldHVybiBRU2l6ZSgoUUNPT1JEKShzLndkKmMpLCAoUUNPT1JEKShzLmh0KmMpKTsgfQoK
aW5saW5lIFFTaXplIG9wZXJhdG9yKiggZG91YmxlIGMsIGNvbnN0IFFTaXplICZzICkKeyByZXR1
cm4gUVNpemUoKFFDT09SRCkocy53ZCpjKSwgKFFDT09SRCkocy5odCpjKSk7IH0KCmlubGluZSBR
U2l6ZSAmUVNpemU6Om9wZXJhdG9yLz0oIGludCBjICkKewoKICAgIGlmICggYyA9PSAwICkKCXdh
cm5pbmdEaXZCeVplcm8oKTsKCiAgICB3ZC89KFFDT09SRCljOyBodC89KFFDT09SRCljOwogICAg
cmV0dXJuICp0aGlzOwp9CgppbmxpbmUgUVNpemUgJlFTaXplOjpvcGVyYXRvci89KCBkb3VibGUg
YyApCnsKCiAgICBpZiAoIGMgPT0gMC4wICkKCXdhcm5pbmdEaXZCeVplcm8oKTsKCiAgICB3ZD0o
UUNPT1JEKSh3ZC9jKTsgaHQ9KFFDT09SRCkoaHQvYyk7CiAgICByZXR1cm4gKnRoaXM7Cn0KCmlu
bGluZSBRU2l6ZSBvcGVyYXRvci8oIGNvbnN0IFFTaXplICZzLCBpbnQgYyApCnsKCiAgICBpZiAo
IGMgPT0gMCApCglRU2l6ZTo6d2FybmluZ0RpdkJ5WmVybygpOwoKICAgIHJldHVybiBRU2l6ZShz
LndkL2MsIHMuaHQvYyk7Cn0KCmlubGluZSBRU2l6ZSBvcGVyYXRvci8oIGNvbnN0IFFTaXplICZz
LCBkb3VibGUgYyApCnsKCiAgICBpZiAoIGMgPT0gMC4wICkKCVFTaXplOjp3YXJuaW5nRGl2Qnla
ZXJvKCk7CgogICAgcmV0dXJuIFFTaXplKChRQ09PUkQpKHMud2QvYyksIChRQ09PUkQpKHMuaHQv
YykpOwp9CgppbmxpbmUgUVNpemUgUVNpemU6OmV4cGFuZGVkVG8oIGNvbnN0IFFTaXplICYgb3Ro
ZXJTaXplICkgY29uc3QKewogICAgcmV0dXJuIFFTaXplKCAoKCB3ZCApID4gKCBvdGhlclNpemUu
d2QgKSA/ICggd2QgKSA6ICggb3RoZXJTaXplLndkICkpICwgKCggaHQgKSA+ICggb3RoZXJTaXpl
Lmh0ICkgPyAoIGh0ICkgOiAoIG90aGVyU2l6ZS5odCApKSAgKTsKfQoKaW5saW5lIFFTaXplIFFT
aXplOjpib3VuZGVkVG8oIGNvbnN0IFFTaXplICYgb3RoZXJTaXplICkgY29uc3QKewogICAgcmV0
dXJuIFFTaXplKCAoKCB3ZCApIDwgKCBvdGhlclNpemUud2QgKSA/ICggd2QgKSA6ICggb3RoZXJT
aXplLndkICkpICwgKCggaHQgKSA8ICggb3RoZXJTaXplLmh0ICkgPyAoIGh0ICkgOiAoIG90aGVy
U2l6ZS5odCApKSAgKTsKfQoKCgojIDQyICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0
LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3FyZWN0LmgiIDIKCgoKCgoKCgpjbGFzcyAgIFFS
ZWN0CQkJCQkgCnsKcHVibGljOgogICAgUVJlY3QoKQl7IHgxID0geTEgPSAwOyB4MiA9IHkyID0g
LTE7IH0KICAgIFFSZWN0KCBjb25zdCBRUG9pbnQgJnRvcGxlZnQsIGNvbnN0IFFQb2ludCAmYm90
dG9tcmlnaHQgKTsKICAgIFFSZWN0KCBjb25zdCBRUG9pbnQgJnRvcGxlZnQsIGNvbnN0IFFTaXpl
ICZzaXplICk7CiAgICBRUmVjdCggaW50IGxlZnQsIGludCB0b3AsIGludCB3aWR0aCwgaW50IGhl
aWdodCApOwoKICAgIGJvb2wgICBpc051bGwoKQljb25zdDsKICAgIGJvb2wgICBpc0VtcHR5KCkJ
Y29uc3Q7CiAgICBib29sICAgaXNWYWxpZCgpCWNvbnN0OwogICAgUVJlY3QgIG5vcm1hbGl6ZSgp
CWNvbnN0OwoKICAgIGludAkgICBsZWZ0KCkJY29uc3Q7CiAgICBpbnQJICAgdG9wKCkJY29uc3Q7
CiAgICBpbnQJICAgcmlnaHQoKQljb25zdDsKICAgIGludAkgICBib3R0b20oKQljb25zdDsKCiAg
ICBRQ09PUkQgJnJMZWZ0KCk7CiAgICBRQ09PUkQgJnJUb3AoKTsKICAgIFFDT09SRCAmclJpZ2h0
KCk7CiAgICBRQ09PUkQgJnJCb3R0b20oKTsKCQogICAgaW50CSAgIHgoKQkJY29uc3Q7CiAgICBp
bnQJICAgeSgpCQljb25zdDsKICAgIHZvaWQgICBzZXRMZWZ0KCBpbnQgcG9zICk7CiAgICB2b2lk
ICAgc2V0VG9wKCBpbnQgcG9zICk7CiAgICB2b2lkICAgc2V0UmlnaHQoIGludCBwb3MgKTsKICAg
IHZvaWQgICBzZXRCb3R0b20oIGludCBwb3MgKTsKICAgIHZvaWQgICBzZXRYKCBpbnQgeCApOwog
ICAgdm9pZCAgIHNldFkoIGludCB5ICk7CgogICAgUVBvaW50IHRvcExlZnQoKQkgY29uc3Q7CiAg
ICBRUG9pbnQgYm90dG9tUmlnaHQoKSBjb25zdDsKICAgIFFQb2ludCB0b3BSaWdodCgpCSBjb25z
dDsKICAgIFFQb2ludCBib3R0b21MZWZ0KCkJIGNvbnN0OwogICAgUVBvaW50IGNlbnRlcigpCSBj
b25zdDsKCiAgICB2b2lkICAgcmVjdCggaW50ICp4LCBpbnQgKnksIGludCAqdywgaW50ICpoICkg
Y29uc3Q7CiAgICB2b2lkICAgY29vcmRzKCBpbnQgKngxLCBpbnQgKnkxLCBpbnQgKngyLCBpbnQg
KnkyICkgY29uc3Q7CgogICAgdm9pZCAgIG1vdmVUb3BMZWZ0KCBjb25zdCBRUG9pbnQgJnAgKTsK
ICAgIHZvaWQgICBtb3ZlQm90dG9tUmlnaHQoIGNvbnN0IFFQb2ludCAmcCApOwogICAgdm9pZCAg
IG1vdmVUb3BSaWdodCggY29uc3QgUVBvaW50ICZwICk7CiAgICB2b2lkICAgbW92ZUJvdHRvbUxl
ZnQoIGNvbnN0IFFQb2ludCAmcCApOwogICAgdm9pZCAgIG1vdmVDZW50ZXIoIGNvbnN0IFFQb2lu
dCAmcCApOwogICAgdm9pZCAgIG1vdmVCeSggaW50IGR4LCBpbnQgZHkgKTsKCiAgICB2b2lkICAg
c2V0UmVjdCggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQgICBzZXRDb29y
ZHMoIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MiApOwoKICAgIFFTaXplICBzaXplKCkJ
Y29uc3Q7CiAgICBpbnQJICAgd2lkdGgoKQljb25zdDsKICAgIGludAkgICBoZWlnaHQoKQljb25z
dDsKICAgIHZvaWQgICBzZXRXaWR0aCggaW50IHcgKTsKICAgIHZvaWQgICBzZXRIZWlnaHQoIGlu
dCBoICk7CiAgICB2b2lkICAgc2V0U2l6ZSggY29uc3QgUVNpemUgJnMgKTsKCiAgICBRUmVjdCAg
b3BlcmF0b3J8KGNvbnN0IFFSZWN0ICZyKSBjb25zdDsKICAgIFFSZWN0ICBvcGVyYXRvciYoY29u
c3QgUVJlY3QgJnIpIGNvbnN0OwogICAgUVJlY3QmICBvcGVyYXRvcnw9KGNvbnN0IFFSZWN0ICZy
KTsKICAgIFFSZWN0JiAgb3BlcmF0b3ImPShjb25zdCBRUmVjdCAmcik7CgogICAgYm9vbCAgIGNv
bnRhaW5zKCBjb25zdCBRUG9pbnQgJnAsIGJvb2wgcHJvcGVyPSAwICApIGNvbnN0OwogICAgYm9v
bCAgIGNvbnRhaW5zKCBpbnQgeCwgaW50IHksIGJvb2wgcHJvcGVyPSAwICApIGNvbnN0OwogICAg
Ym9vbCAgIGNvbnRhaW5zKCBjb25zdCBRUmVjdCAmciwgYm9vbCBwcm9wZXI9IDAgICkgY29uc3Q7
CiAgICBRUmVjdCAgdW5pdGUoIGNvbnN0IFFSZWN0ICZyICkgY29uc3Q7CiAgICBRUmVjdCAgaW50
ZXJzZWN0KCBjb25zdCBRUmVjdCAmciApIGNvbnN0OwogICAgYm9vbCAgIGludGVyc2VjdHMoIGNv
bnN0IFFSZWN0ICZyICkgY29uc3Q7CgogICAgZnJpZW5kICAgYm9vbCBvcGVyYXRvcj09KCBjb25z
dCBRUmVjdCAmLCBjb25zdCBRUmVjdCAmICk7CiAgICBmcmllbmQgICBib29sIG9wZXJhdG9yIT0o
IGNvbnN0IFFSZWN0ICYsIGNvbnN0IFFSZWN0ICYgKTsKCnByaXZhdGU6CgoKCgoKCiAgICBRQ09P
UkQgeDE7CiAgICBRQ09PUkQgeTE7CiAgICBRQ09PUkQgeDI7CiAgICBRQ09PUkQgeTI7Cgp9OwoK
ICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFSZWN0ICYsIGNvbnN0IFFSZWN0ICYgKTsKICBib29s
IG9wZXJhdG9yIT0oIGNvbnN0IFFSZWN0ICYsIGNvbnN0IFFSZWN0ICYgKTsKCgogCgoKCiAgUURh
dGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFSZWN0ICYgKTsKICBR
RGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVJlY3QgJiApOwoKCiAKCgoK
aW5saW5lIFFSZWN0OjpRUmVjdCggaW50IGxlZnQsIGludCB0b3AsIGludCB3aWR0aCwgaW50IGhl
aWdodCApCnsKICAgIHgxID0gKFFDT09SRClsZWZ0OwogICAgeTEgPSAoUUNPT1JEKXRvcDsKICAg
IHgyID0gKFFDT09SRCkobGVmdCt3aWR0aC0xKTsKICAgIHkyID0gKFFDT09SRCkodG9wK2hlaWdo
dC0xKTsKfQoKaW5saW5lIGJvb2wgUVJlY3Q6OmlzTnVsbCgpIGNvbnN0CnsgcmV0dXJuIHgyID09
IHgxLTEgJiYgeTIgPT0geTEtMTsgfQoKaW5saW5lIGJvb2wgUVJlY3Q6OmlzRW1wdHkoKSBjb25z
dAp7IHJldHVybiB4MSA+IHgyIHx8IHkxID4geTI7IH0KCmlubGluZSBib29sIFFSZWN0Ojppc1Zh
bGlkKCkgY29uc3QKeyByZXR1cm4geDEgPD0geDIgJiYgeTEgPD0geTI7IH0KCmlubGluZSBpbnQg
UVJlY3Q6OmxlZnQoKSBjb25zdAp7IHJldHVybiB4MTsgfQoKaW5saW5lIGludCBRUmVjdDo6dG9w
KCkgY29uc3QKeyByZXR1cm4geTE7IH0KCmlubGluZSBpbnQgUVJlY3Q6OnJpZ2h0KCkgY29uc3QK
eyByZXR1cm4geDI7IH0KCmlubGluZSBpbnQgUVJlY3Q6OmJvdHRvbSgpIGNvbnN0CnsgcmV0dXJu
IHkyOyB9CgppbmxpbmUgUUNPT1JEICZRUmVjdDo6ckxlZnQoKQp7IHJldHVybiB4MTsgfQoKaW5s
aW5lIFFDT09SRCAmIFFSZWN0OjpyVG9wKCkKeyByZXR1cm4geTE7IH0KCmlubGluZSBRQ09PUkQg
JiBRUmVjdDo6clJpZ2h0KCkKeyByZXR1cm4geDI7IH0KCmlubGluZSBRQ09PUkQgJiBRUmVjdDo6
ckJvdHRvbSgpCnsgcmV0dXJuIHkyOyB9CgppbmxpbmUgaW50IFFSZWN0Ojp4KCkgY29uc3QKeyBy
ZXR1cm4geDE7IH0KCmlubGluZSBpbnQgUVJlY3Q6OnkoKSBjb25zdAp7IHJldHVybiB5MTsgfQoK
aW5saW5lIHZvaWQgUVJlY3Q6OnNldExlZnQoIGludCBwb3MgKQp7IHgxID0gKFFDT09SRClwb3M7
IH0KCmlubGluZSB2b2lkIFFSZWN0OjpzZXRUb3AoIGludCBwb3MgKQp7IHkxID0gKFFDT09SRClw
b3M7IH0KCmlubGluZSB2b2lkIFFSZWN0OjpzZXRSaWdodCggaW50IHBvcyApCnsgeDIgPSAoUUNP
T1JEKXBvczsgfQoKaW5saW5lIHZvaWQgUVJlY3Q6OnNldEJvdHRvbSggaW50IHBvcyApCnsgeTIg
PSAoUUNPT1JEKXBvczsgfQoKaW5saW5lIHZvaWQgUVJlY3Q6OnNldFgoIGludCB4ICkKeyB4MSA9
IChRQ09PUkQpeDsgfQoKaW5saW5lIHZvaWQgUVJlY3Q6OnNldFkoIGludCB5ICkKeyB5MSA9IChR
Q09PUkQpeTsgfQoKaW5saW5lIFFQb2ludCBRUmVjdDo6dG9wTGVmdCgpIGNvbnN0CnsgcmV0dXJu
IFFQb2ludCh4MSwgeTEpOyB9CgppbmxpbmUgUVBvaW50IFFSZWN0Ojpib3R0b21SaWdodCgpIGNv
bnN0CnsgcmV0dXJuIFFQb2ludCh4MiwgeTIpOyB9CgppbmxpbmUgUVBvaW50IFFSZWN0Ojp0b3BS
aWdodCgpIGNvbnN0CnsgcmV0dXJuIFFQb2ludCh4MiwgeTEpOyB9CgppbmxpbmUgUVBvaW50IFFS
ZWN0Ojpib3R0b21MZWZ0KCkgY29uc3QKeyByZXR1cm4gUVBvaW50KHgxLCB5Mik7IH0KCmlubGlu
ZSBRUG9pbnQgUVJlY3Q6OmNlbnRlcigpIGNvbnN0CnsgcmV0dXJuIFFQb2ludCgoeDEreDIpLzIs
ICh5MSt5MikvMik7IH0KCmlubGluZSBpbnQgUVJlY3Q6OndpZHRoKCkgY29uc3QKeyByZXR1cm4g
IHgyIC0geDEgKyAxOyB9CgppbmxpbmUgaW50IFFSZWN0OjpoZWlnaHQoKSBjb25zdAp7IHJldHVy
biAgeTIgLSB5MSArIDE7IH0KCmlubGluZSBRU2l6ZSBRUmVjdDo6c2l6ZSgpIGNvbnN0CnsgcmV0
dXJuIFFTaXplKHgyLXgxKzEsIHkyLXkxKzEpOyB9CgppbmxpbmUgYm9vbCBRUmVjdDo6Y29udGFp
bnMoIGludCB4LCBpbnQgeSwgYm9vbCBwcm9wZXIgKSBjb25zdAp7CiAgICBpZiAoIHByb3BlciAp
CiAgICAgICAgcmV0dXJuIHggPiB4MSAmJiB4IDwgeDIgJiYKICAgICAgICAgICAgICAgeSA+IHkx
ICYmIHkgPCB5MjsKICAgIGVsc2UKICAgICAgICByZXR1cm4geCA+PSB4MSAmJiB4IDw9IHgyICYm
CiAgICAgICAgICAgICAgIHkgPj0geTEgJiYgeSA8PSB5MjsKfQoKCiMgNDMgIi9hbWQvc2lnbWEv
MC9zcmMvYWxwaGEtZGVjLW9zZjQuMC93b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcXJlZ2lvbi5o
IiAyCgoKCgoKY2xhc3MgICBRUmVnaW9uCnsKcHVibGljOgogICAgZW51bSBSZWdpb25UeXBlIHsg
UmVjdGFuZ2xlLCBFbGxpcHNlIH07CgogICAgUVJlZ2lvbigpOwogICAgUVJlZ2lvbiggaW50IHgs
IGludCB5LCBpbnQgdywgaW50IGgsIFJlZ2lvblR5cGUgPSBSZWN0YW5nbGUgKTsKICAgIFFSZWdp
b24oIGNvbnN0IFFSZWN0ICYsIFJlZ2lvblR5cGUgPSBSZWN0YW5nbGUgKTsKICAgIFFSZWdpb24o
IGNvbnN0IFFQb2ludEFycmF5ICYsIGJvb2wgd2luZGluZz0gMCAgKTsKICAgIFFSZWdpb24oIGNv
bnN0IFFSZWdpb24gJiApOwogICAgUVJlZ2lvbiggY29uc3QgUUJpdG1hcCAmICk7CiAgIH5RUmVn
aW9uKCk7CiAgICBRUmVnaW9uICZvcGVyYXRvcj0oIGNvbnN0IFFSZWdpb24gJiApOwoKICAgIGJv
b2wgICAgaXNOdWxsKCkgICBjb25zdDsKICAgIGJvb2wgICAgaXNFbXB0eSgpICBjb25zdDsKCiAg
ICBib29sICAgIGNvbnRhaW5zKCBjb25zdCBRUG9pbnQgJnAgKSBjb25zdDsKICAgIGJvb2wgICAg
Y29udGFpbnMoIGNvbnN0IFFSZWN0ICZyICkJY29uc3Q7CgogICAgdm9pZCAgICB0cmFuc2xhdGUo
IGludCBkeCwgaW50IGR5ICk7CgogICAgUVJlZ2lvbiB1bml0ZSggY29uc3QgUVJlZ2lvbiAmICkJ
Y29uc3Q7CiAgICBRUmVnaW9uIGludGVyc2VjdCggY29uc3QgUVJlZ2lvbiAmKSBjb25zdDsKICAg
IFFSZWdpb24gc3VidHJhY3QoIGNvbnN0IFFSZWdpb24gJiApIGNvbnN0OwogICAgUVJlZ2lvbiBl
b3IoIGNvbnN0IFFSZWdpb24gJiApCWNvbnN0OwoKICAgIFFSZWN0ICAgYm91bmRpbmdSZWN0KCkg
Y29uc3Q7CiAgICBRQXJyYXk8UVJlY3Q+IHJlY3RzKCkgY29uc3Q7CiAgICB2b2lkIHNldFJlY3Rz
KCBjb25zdCBRUmVjdCAqLCBpbnQgKTsKCiAgICBRUmVnaW9uIG9wZXJhdG9yfCggY29uc3QgUVJl
Z2lvbiAmICkgY29uc3Q7CiAgICBRUmVnaW9uIG9wZXJhdG9yKyggY29uc3QgUVJlZ2lvbiAmICkg
Y29uc3Q7CiAgICBRUmVnaW9uIG9wZXJhdG9yJiggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAg
ICBRUmVnaW9uIG9wZXJhdG9yLSggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBRUmVnaW9u
IG9wZXJhdG9yXiggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBRUmVnaW9uJiBvcGVyYXRv
cnw9KCBjb25zdCBRUmVnaW9uICYgKTsKICAgIFFSZWdpb24mIG9wZXJhdG9yKz0oIGNvbnN0IFFS
ZWdpb24gJiApOwogICAgUVJlZ2lvbiYgb3BlcmF0b3ImPSggY29uc3QgUVJlZ2lvbiAmICk7CiAg
ICBRUmVnaW9uJiBvcGVyYXRvci09KCBjb25zdCBRUmVnaW9uICYgKTsKICAgIFFSZWdpb24mIG9w
ZXJhdG9yXj0oIGNvbnN0IFFSZWdpb24gJiApOwoKICAgIGJvb2wgICAgb3BlcmF0b3I9PSggY29u
c3QgUVJlZ2lvbiAmICkgIGNvbnN0OwogICAgYm9vbCAgICBvcGVyYXRvciE9KCBjb25zdCBRUmVn
aW9uICZyICkgY29uc3QKCQkJeyByZXR1cm4gIShvcGVyYXRvcj09KHIpKTsgfQoKCgoKICAgIFJl
Z2lvbiAgaGFuZGxlKCkgY29uc3QgeyByZXR1cm4gZGF0YS0+cmduOyB9CgoKCgoKCgoKICAgIGZy
aWVuZCAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRUmVn
aW9uICYgKTsKICAgIGZyaWVuZCAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVh
bSAmLCBRUmVnaW9uICYgKTsKCnByaXZhdGU6CiAgICBRUmVnaW9uKCBib29sICk7CiAgICBRUmVn
aW9uIGNvcHkoKSBjb25zdDsKICAgIHZvaWQgICAgZGV0YWNoKCk7CgoKCiAgICB2b2lkICAgIGV4
ZWMoIGNvbnN0IFFCeXRlQXJyYXkgJiwgaW50IHZlciA9IDAgKTsKICAgIHN0cnVjdCBRUmVnaW9u
RGF0YSA6IHB1YmxpYyBRU2hhcmVkIHsKCgoKCVJlZ2lvbiByZ247CgoKCgoKCWJvb2wgICBpc19u
dWxsOwogICAgfSAqZGF0YTsKfTsKCgoKCgoKCgoKCgoKCgogCgoKCgogIFFEYXRhU3RyZWFtICZv
cGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRUmVnaW9uICYgKTsKICBRRGF0YVN0cmVh
bSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVJlZ2lvbiAmICk7CgoKCgojIDQzICIvYW1k
L3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3Fl
dmVudC5oIiAyCgoKIyAxICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rp
ci9xdC0yLjIuMy9pbmNsdWRlL3FtaW1lLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgpjbGFzcyAgIFFNaW1lU291cmNlIHsKcHVibGljOgogICAgdmly
dHVhbCB+UU1pbWVTb3VyY2UoKTsKICAgIHZpcnR1YWwgY29uc3QgY2hhciogZm9ybWF0KCBpbnQg
biA9IDAgKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIGJvb2wgcHJvdmlkZXMoIGNvbnN0IGNoYXIq
ICkgY29uc3Q7CiAgICB2aXJ0dWFsIFFCeXRlQXJyYXkgZW5jb2RlZERhdGEoIGNvbnN0IGNoYXIq
ICkgY29uc3QgPSAwOwp9OwoKY2xhc3MgUU1pbWVTb3VyY2VGYWN0b3J5RGF0YTsKY2xhc3MgUVN0
cmluZ0xpc3Q7CgpjbGFzcyAgIFFNaW1lU291cmNlRmFjdG9yeSB7CnB1YmxpYzoKICAgIFFNaW1l
U291cmNlRmFjdG9yeSgpOwogICAgdmlydHVhbCB+UU1pbWVTb3VyY2VGYWN0b3J5KCk7CgogICAg
c3RhdGljIFFNaW1lU291cmNlRmFjdG9yeSogZGVmYXVsdEZhY3RvcnkoKTsKICAgIHN0YXRpYyB2
b2lkIHNldERlZmF1bHRGYWN0b3J5KCBRTWltZVNvdXJjZUZhY3RvcnkqICk7CgogICAgdmlydHVh
bCBjb25zdCBRTWltZVNvdXJjZSogZGF0YShjb25zdCBRU3RyaW5nJiBhYnNfbmFtZSkgY29uc3Q7
CiAgICB2aXJ0dWFsIFFTdHJpbmcgbWFrZUFic29sdXRlKGNvbnN0IFFTdHJpbmcmIGFic19vcl9y
ZWxfbmFtZSwgY29uc3QgUVN0cmluZyYgY29udGV4dCkgY29uc3Q7CiAgICBjb25zdCBRTWltZVNv
dXJjZSogZGF0YShjb25zdCBRU3RyaW5nJiBhYnNfb3JfcmVsX25hbWUsIGNvbnN0IFFTdHJpbmcm
IGNvbnRleHQpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0KCBjb25zdCBRU3RyaW5n
JiBhYnNfbmFtZSwgY29uc3QgUVN0cmluZyYgdGV4dCApOwogICAgdmlydHVhbCB2b2lkIHNldElt
YWdlKCBjb25zdCBRU3RyaW5nJiBhYnNfbmFtZSwgY29uc3QgUUltYWdlJiBpbSApOwogICAgdmly
dHVhbCB2b2lkIHNldFBpeG1hcCggY29uc3QgUVN0cmluZyYgYWJzX25hbWUsIGNvbnN0IFFQaXht
YXAmIHBtICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YSggY29uc3QgUVN0cmluZyYgYWJzX25h
bWUsIFFNaW1lU291cmNlKiBkYXRhICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZVBhdGgoIGNv
bnN0IFFTdHJpbmdMaXN0JiApOwogICAgdmlydHVhbCBRU3RyaW5nTGlzdCBmaWxlUGF0aCgpIGNv
bnN0OwogICAgdm9pZCBhZGRGaWxlUGF0aCggY29uc3QgUVN0cmluZyYgKTsKICAgIHZpcnR1YWwg
dm9pZCBzZXRFeHRlbnNpb25UeXBlKCBjb25zdCBRU3RyaW5nJiBleHQsIGNvbnN0IGNoYXIqIG1p
bWV0eXBlICk7Cgpwcml2YXRlOgogICAgUU1pbWVTb3VyY2VGYWN0b3J5RGF0YSogZDsKfTsKCiMg
MTE5ICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9p
bmNsdWRlL3FtaW1lLmgiCgoKCgoKIyA0NSAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3Nm
NC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xZXZlbnQuaCIgMgoKCgoKY2xhc3MgICBRRXZl
bnQ6IHB1YmxpYyBRdAkJIAp7CnB1YmxpYzoKICAgIGVudW0gVHlwZSB7CgoJIAoJIAoJIAoJIAoK
CU5vbmUgPSAwLAkJCQkgCgoKCVRpbWVyID0gMSwJCQkJIAoJTW91c2VCdXR0b25QcmVzcyA9IDIs
CQkJIAoJTW91c2VCdXR0b25SZWxlYXNlID0gMywJCQkgCglNb3VzZUJ1dHRvbkRibENsaWNrPSA0
LAkJCSAKCU1vdXNlTW92ZSA9IDUsCQkJCSAKCUtleVByZXNzID0gNiwJCQkJIAoJS2V5UmVsZWFz
ZSA9IDcsCQkJCSAKCUZvY3VzSW4gPSA4LAkJCQkgCglGb2N1c091dCA9IDksCQkJCSAKCUVudGVy
ID0gMTAsCQkJCSAKCUxlYXZlID0gMTEsCQkJCSAKCVBhaW50ID0gMTIsCQkJCSAKCU1vdmUgPSAx
MywJCQkJIAoJUmVzaXplID0gMTQsCQkJCSAKCUNyZWF0ZSA9IDE1LAkJCQkgCglEZXN0cm95ID0g
MTYsCQkJCSAKCVNob3cgPSAxNywJCQkJIAoJSGlkZSA9IDE4LAkJCQkgCglDbG9zZSA9IDE5LAkJ
CQkgCglRdWl0ID0gMjAsCQkJCSAKCVJlcGFyZW50ID0gMjEsCQkJCSAKCVNob3dNaW5pbWl6ZWQg
PSAyMiwJCSAgICAgICAJIAoJU2hvd05vcm1hbCA9IDIzLAkgICAgICAgCQkgCglXaW5kb3dBY3Rp
dmF0ZSA9IDI0LAkgICAgICAgCQkgCglXaW5kb3dEZWFjdGl2YXRlID0gMjUsCSAgICAgICAJCSAK
CVNob3dUb1BhcmVudCA9IDI2LAkgICAgICAgCQkgCglIaWRlVG9QYXJlbnQgPSAyNywJICAgICAg
IAkJIAoJU2hvd01heGltaXplZCA9IDI4LAkJICAgICAgIAkgCglBY2NlbCA9IDMwLAkJCQkgCglX
aGVlbCA9IDMxLAkJCQkgCglBY2NlbEF2YWlsYWJsZSA9IDMyLAkJCSAKCUNhcHRpb25DaGFuZ2Ug
PSAzMywJCQkgCglJY29uQ2hhbmdlID0gMzQsCQkJIAoJUGFyZW50Rm9udENoYW5nZSA9IDM1LAkJ
CSAKCUFwcGxpY2F0aW9uRm9udENoYW5nZSA9IDM2LAkJIAoJUGFyZW50UGFsZXR0ZUNoYW5nZSA9
IDM3LAkJIAoJQXBwbGljYXRpb25QYWxldHRlQ2hhbmdlID0gMzgsCQkgCglDbGlwYm9hcmQgPSA0
MCwJCQkJIAoJU3BlZWNoID0gNDIsCQkJCSAKCVNvY2tBY3QgPSA1MCwJCQkJIAoJQWNjZWxPdmVy
cmlkZSA9IDUxLAkJCSAKCURyYWdFbnRlciA9IDYwLAkJCQkgCglEcmFnTW92ZSA9IDYxLAkJCQkg
CglEcmFnTGVhdmUgPSA2MiwJCQkJIAoJRHJvcCA9IDYzLAkJCQkgCglEcmFnUmVzcG9uc2UgPSA2
NCwJCQkgCglDaGlsZEluc2VydGVkID0gNzAsCQkJIAoJQ2hpbGRSZW1vdmVkID0gNzEsCQkJIAoJ
TGF5b3V0SGludCA9IDcyLAkJCSAKCVNob3dXaW5kb3dSZXF1ZXN0ID0gNzMsCQkJIAoJQWN0aXZh
dGVDb250cm9sID0gODAsCQkJIAoJRGVhY3RpdmF0ZUNvbnRyb2wgPSA4MSwJCQkgCglVc2VyID0g
MTAwMAkJCQkgCiAgICB9OwoKICAgIFFFdmVudCggVHlwZSB0eXBlICkgOiB0KHR5cGUpLCBwb3N0
ZWQoMCApIHt9CiAgICB2aXJ0dWFsIH5RRXZlbnQoKTsKICAgIFR5cGUgIHR5cGUoKSBjb25zdAl7
IHJldHVybiB0OyB9CnByb3RlY3RlZDoKICAgIFR5cGUgIHQ7CnByaXZhdGU6CiAgICBib29sICBw
b3N0ZWQ7CgoKCgogICAgZnJpZW5kIGNsYXNzIFFBcHBsaWNhdGlvbjsKICAgIGZyaWVuZCBjbGFz
cyBRQmFzZUFwcGxpY2F0aW9uOwp9OwoKCmNsYXNzICAgUVRpbWVyRXZlbnQgOiBwdWJsaWMgUUV2
ZW50CnsKcHVibGljOgogICAgUVRpbWVyRXZlbnQoIGludCB0aW1lcklkICkKCTogUUV2ZW50KFRp
bWVyKSwgaWQodGltZXJJZCkge30KICAgIGludAkgIHRpbWVySWQoKQljb25zdAl7IHJldHVybiBp
ZDsgfQpwcm90ZWN0ZWQ6CiAgICBpbnQJICBpZDsKfTsKCgpjbGFzcyAgIFFNb3VzZUV2ZW50IDog
cHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFNb3VzZUV2ZW50KCBUeXBlIHR5cGUsIGNvbnN0
IFFQb2ludCAmcG9zLCBpbnQgYnV0dG9uLCBpbnQgc3RhdGUgKTsKCiAgICBRTW91c2VFdmVudCgg
VHlwZSB0eXBlLCBjb25zdCBRUG9pbnQgJnBvcywgY29uc3QgUVBvaW50Jmdsb2JhbFBvcywKCQkg
aW50IGJ1dHRvbiwgaW50IHN0YXRlICkKCTogUUV2ZW50KHR5cGUpLCBwKHBvcyksIGcoZ2xvYmFs
UG9zKSwgYihidXR0b24pLHMoKHVzaG9ydClzdGF0ZSkge307CgogICAgY29uc3QgUVBvaW50ICZw
b3MoKSBjb25zdAl7IHJldHVybiBwOyB9CiAgICBjb25zdCBRUG9pbnQgJmdsb2JhbFBvcygpIGNv
bnN0IHsgcmV0dXJuIGc7IH0KICAgIGludAkgICB4KCkJCWNvbnN0CXsgcmV0dXJuIHAueCgpOyB9
CiAgICBpbnQJICAgeSgpCQljb25zdAl7IHJldHVybiBwLnkoKTsgfQogICAgaW50CSAgIGdsb2Jh
bFgoKQljb25zdAl7IHJldHVybiBnLngoKTsgfQogICAgaW50CSAgIGdsb2JhbFkoKQljb25zdAl7
IHJldHVybiBnLnkoKTsgfQogICAgQnV0dG9uU3RhdGUgYnV0dG9uKCkgY29uc3QJeyByZXR1cm4g
KEJ1dHRvblN0YXRlKSBiOyB9CiAgICBCdXR0b25TdGF0ZSBzdGF0ZSgpCWNvbnN0CXsgcmV0dXJu
IChCdXR0b25TdGF0ZSkgczsgfQogICAgQnV0dG9uU3RhdGUgc3RhdGVBZnRlcigpIGNvbnN0Owpw
cm90ZWN0ZWQ6CiAgICBRUG9pbnQgcDsKICAgIFFQb2ludCBnOwogICAgaW50CSAgIGI7ICAKICAg
IHVzaG9ydCBzOyAgCn07CgoKCmNsYXNzICAgUVdoZWVsRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsK
cHVibGljOgogICAgUVdoZWVsRXZlbnQoIGNvbnN0IFFQb2ludCAmcG9zLCBpbnQgZGVsdGEsIGlu
dCBzdGF0ZSApOwogICAgUVdoZWVsRXZlbnQoIGNvbnN0IFFQb2ludCAmcG9zLCBjb25zdCBRUG9p
bnQmIGdsb2JhbFBvcywgaW50IGRlbHRhLCBpbnQgc3RhdGUgKQoJOiBRRXZlbnQoV2hlZWwpLCBw
KHBvcyksIGcoZ2xvYmFsUG9zKSwgZChkZWx0YSksIHMoKHVzaG9ydClzdGF0ZSksCgkgIGFjY3B0
KDEgKSB7fQogICAgaW50CSAgIGRlbHRhKCkJY29uc3QJeyByZXR1cm4gZDsgfQogICAgY29uc3Qg
UVBvaW50ICZwb3MoKSBjb25zdAl7IHJldHVybiBwOyB9CiAgICBjb25zdCBRUG9pbnQgJmdsb2Jh
bFBvcygpIGNvbnN0CXsgcmV0dXJuIGc7IH0KICAgIGludAkgICB4KCkJCWNvbnN0CXsgcmV0dXJu
IHAueCgpOyB9CiAgICBpbnQJICAgeSgpCQljb25zdAl7IHJldHVybiBwLnkoKTsgfQogICAgaW50
CSAgIGdsb2JhbFgoKQljb25zdAl7IHJldHVybiBnLngoKTsgfQogICAgaW50CSAgIGdsb2JhbFko
KQljb25zdAl7IHJldHVybiBnLnkoKTsgfQogICAgQnV0dG9uU3RhdGUgc3RhdGUoKQljb25zdAl7
IHJldHVybiBCdXR0b25TdGF0ZShzKTsgfQogICAgYm9vbCAgIGlzQWNjZXB0ZWQoKSBjb25zdAl7
IHJldHVybiBhY2NwdDsgfQogICAgdm9pZCAgIGFjY2VwdCgpCQl7IGFjY3B0ID0gMSA7IH0KICAg
IHZvaWQgICBpZ25vcmUoKQkJeyBhY2NwdCA9IDAgOyB9CnByb3RlY3RlZDoKICAgIFFQb2ludCBw
OwogICAgUVBvaW50IGc7CiAgICBpbnQgZDsKICAgIHVzaG9ydCBzOwogICAgYm9vbCAgIGFjY3B0
Owp9OwoKCmNsYXNzICAgUUtleUV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFL
ZXlFdmVudCggVHlwZSB0eXBlLCBpbnQga2V5LCBpbnQgYXNjaWksIGludCBzdGF0ZSwKCQljb25z
dCBRU3RyaW5nJiB0ZXh0PVFTdHJpbmc6Om51bGwsIGJvb2wgYXV0b3JlcD0gMCAsIHVzaG9ydCBj
b3VudD0xICkKCTogUUV2ZW50KHR5cGUpLCB0eHQodGV4dCksIGsoKHVzaG9ydClrZXkpLCBzKCh1
c2hvcnQpc3RhdGUpLAoJICAgIGEoKHVjaGFyKWFzY2lpKSwgYWNjcHQoMSApLCBhdXRvcihhdXRv
cmVwKSwgYyhjb3VudCkge30KICAgIGludAkgICBrZXkoKQljb25zdAl7IHJldHVybiBrOyB9CiAg
ICBpbnQJICAgYXNjaWkoKQljb25zdAl7IHJldHVybiBhOyB9CiAgICBCdXR0b25TdGF0ZSBzdGF0
ZSgpCWNvbnN0CXsgcmV0dXJuIEJ1dHRvblN0YXRlKHMpOyB9CiAgICBCdXR0b25TdGF0ZSBzdGF0
ZUFmdGVyKCkgY29uc3Q7CiAgICBib29sICAgaXNBY2NlcHRlZCgpIGNvbnN0CXsgcmV0dXJuIGFj
Y3B0OyB9CiAgICBRU3RyaW5nIHRleHQoKSAgICAgIGNvbnN0ICAgeyByZXR1cm4gdHh0OyB9CiAg
ICBib29sICAgaXNBdXRvUmVwZWF0KCkgY29uc3QJeyByZXR1cm4gYXV0b3I7IH0KICAgIGludCAg
IGNvdW50KCkgY29uc3QJeyByZXR1cm4gaW50KGMpOyB9CiAgICB2b2lkICAgYWNjZXB0KCkJCXsg
YWNjcHQgPSAxIDsgfQogICAgdm9pZCAgIGlnbm9yZSgpCQl7IGFjY3B0ID0gMCA7IH0KCnByb3Rl
Y3RlZDoKICAgIFFTdHJpbmcgdHh0OwogICAgdXNob3J0IGssIHM7CiAgICB1Y2hhciAgYTsKICAg
IHVpbnQgICBhY2NwdDoxOwogICAgdWludCAgIGF1dG9yOjE7CiAgICB1c2hvcnQgYzsKfTsKCgpj
bGFzcyAgIFFGb2N1c0V2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKCiAgICBRRm9jdXNF
dmVudCggVHlwZSB0eXBlICkKCTogUUV2ZW50KHR5cGUpIHt9CgogICAgYm9vbCAgIGdvdEZvY3Vz
KCkJY29uc3QgeyByZXR1cm4gdHlwZSgpID09IEZvY3VzSW47IH0KICAgIGJvb2wgICBsb3N0Rm9j
dXMoKQljb25zdCB7IHJldHVybiB0eXBlKCkgPT0gRm9jdXNPdXQ7IH0KCiAgICBlbnVtIFJlYXNv
biB7IE1vdXNlLCBUYWIsIEFjdGl2ZVdpbmRvdywgUG9wdXAsIFNob3J0Y3V0LCBPdGhlciB9Owog
ICAgc3RhdGljIFJlYXNvbiByZWFzb24oKTsKICAgIHN0YXRpYyB2b2lkIHNldFJlYXNvbiggUmVh
c29uIHJlYXNvbiApOwogICAgc3RhdGljIHZvaWQgcmVzZXRSZWFzb24oKTsKCnByaXZhdGU6CiAg
ICBzdGF0aWMgUmVhc29uIG1fcmVhc29uOwogICAgc3RhdGljIFJlYXNvbiBwcmV2X3JlYXNvbjsK
fTsKCgpjbGFzcyAgIFFQYWludEV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFQ
YWludEV2ZW50KCBjb25zdCBRUmVnaW9uJiBwYWludFJlZ2lvbiwgYm9vbCBlcmFzZWQgPSAxICkK
CTogUUV2ZW50KFBhaW50KSwKCSAgcmVjKHBhaW50UmVnaW9uLmJvdW5kaW5nUmVjdCgpKSwKCSAg
cmVnKHBhaW50UmVnaW9uKSwKCSAgZXJhc2UoZXJhc2VkKXt9CiAgICBRUGFpbnRFdmVudCggY29u
c3QgUVJlY3QgJnBhaW50UmVjdCwgYm9vbCBlcmFzZWQgPSAxICApCgk6IFFFdmVudChQYWludCks
CgkgIHJlYyhwYWludFJlY3QpLAoJICByZWcocGFpbnRSZWN0KSwKCSAgZXJhc2UoZXJhc2VkKXt9
CiAgICBjb25zdCBRUmVjdCAmcmVjdCgpIGNvbnN0CSAgeyByZXR1cm4gcmVjOyB9CiAgICBjb25z
dCBRUmVnaW9uICZyZWdpb24oKSBjb25zdCB7IHJldHVybiByZWc7IH0KICAgIGJvb2wgZXJhc2Vk
KCkgY29uc3QgeyByZXR1cm4gZXJhc2U7IH0KcHJvdGVjdGVkOgogICAgZnJpZW5kIGNsYXNzIFFB
cHBsaWNhdGlvbjsKICAgIGZyaWVuZCBjbGFzcyBRQmFzZUFwcGxpY2F0aW9uOwogICAgUVJlY3Qg
cmVjOwogICAgUVJlZ2lvbiByZWc7CiAgICBib29sIGVyYXNlOwp9OwoKCmNsYXNzICAgUU1vdmVF
dmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRTW92ZUV2ZW50KCBjb25zdCBRUG9p
bnQgJnBvcywgY29uc3QgUVBvaW50ICZvbGRQb3MgKQoJOiBRRXZlbnQoTW92ZSksIHAocG9zKSwg
b2xkcChvbGRQb3MpIHt9CiAgICBjb25zdCBRUG9pbnQgJnBvcygpCSAgY29uc3QgeyByZXR1cm4g
cDsgfQogICAgY29uc3QgUVBvaW50ICZvbGRQb3MoKWNvbnN0IHsgcmV0dXJuIG9sZHA7fQpwcm90
ZWN0ZWQ6CiAgICBRUG9pbnQgcCwgb2xkcDsKICAgIGZyaWVuZCBjbGFzcyBRQXBwbGljYXRpb247
CiAgICBmcmllbmQgY2xhc3MgUUJhc2VBcHBsaWNhdGlvbjsKfTsKCgpjbGFzcyAgIFFSZXNpemVF
dmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRUmVzaXplRXZlbnQoIGNvbnN0IFFT
aXplICZzaXplLCBjb25zdCBRU2l6ZSAmb2xkU2l6ZSApCgk6IFFFdmVudChSZXNpemUpLCBzKHNp
emUpLCBvbGRzKG9sZFNpemUpIHt9CiAgICBjb25zdCBRU2l6ZSAmc2l6ZSgpCSAgY29uc3QgeyBy
ZXR1cm4gczsgfQogICAgY29uc3QgUVNpemUgJm9sZFNpemUoKWNvbnN0IHsgcmV0dXJuIG9sZHM7
fQpwcm90ZWN0ZWQ6CiAgICBRU2l6ZSBzLCBvbGRzOwogICAgZnJpZW5kIGNsYXNzIFFBcHBsaWNh
dGlvbjsKICAgIGZyaWVuZCBjbGFzcyBRQmFzZUFwcGxpY2F0aW9uOwp9OwoKCmNsYXNzICAgUUNs
b3NlRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUUNsb3NlRXZlbnQoKQoJOiBR
RXZlbnQoQ2xvc2UpLCBhY2NwdCgwICkge30KICAgIGJvb2wgICBpc0FjY2VwdGVkKCkgY29uc3QJ
eyByZXR1cm4gYWNjcHQ7IH0KICAgIHZvaWQgICBhY2NlcHQoKQkJeyBhY2NwdCA9IDEgOyB9CiAg
ICB2b2lkICAgaWdub3JlKCkJCXsgYWNjcHQgPSAwIDsgfQpwcm90ZWN0ZWQ6CiAgICBib29sICAg
YWNjcHQ7Cn07CgoKY2xhc3MgICBRU2hvd0V2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoK
ICAgIFFTaG93RXZlbnQoYm9vbCBzcG9udGFuZW91cykKCTogUUV2ZW50KFNob3cpLCBzcG9udChz
cG9udGFuZW91cykge30KICAgIGJvb2wgc3BvbnRhbmVvdXMoKSBjb25zdCB7IHJldHVybiBzcG9u
dDsgfQpwcm90ZWN0ZWQ6CiAgICBib29sIHNwb250Owp9OwoKCmNsYXNzICAgUUhpZGVFdmVudCA6
IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRSGlkZUV2ZW50KGJvb2wgc3BvbnRhbmVvdXMp
Cgk6IFFFdmVudChIaWRlKSwgc3BvbnQoc3BvbnRhbmVvdXMpIHt9CiAgICBib29sIHNwb250YW5l
b3VzKCkgY29uc3QgeyByZXR1cm4gc3BvbnQ7IH0KcHJvdGVjdGVkOgogICAgYm9vbCBzcG9udDsK
fTsKCgoKIAogCiAKCmNsYXNzICAgUURyb3BFdmVudCA6IHB1YmxpYyBRRXZlbnQsIHB1YmxpYyBR
TWltZVNvdXJjZQp7CnB1YmxpYzoKICAgIFFEcm9wRXZlbnQoIGNvbnN0IFFQb2ludCYgcG9zLCBU
eXBlIHR5cD1Ecm9wICkKCTogUUV2ZW50KHR5cCksIHAocG9zKSwKCSAgYWN0KDApLCBhY2NwdCgw
KSwgYWNjcHRhY3QoMCksIHJlc3YoMCksCgkgIGQoMCkKCXt9CiAgICBjb25zdCBRUG9pbnQgJnBv
cygpIGNvbnN0CXsgcmV0dXJuIHA7IH0KICAgIGJvb2wgaXNBY2NlcHRlZCgpIGNvbnN0CXsgcmV0
dXJuIGFjY3B0IHx8IGFjY3B0YWN0OyB9CiAgICB2b2lkIGFjY2VwdChib29sIHk9IDEgKQl7IGFj
Y3B0ID0geTsgfQogICAgdm9pZCBpZ25vcmUoKQkJeyBhY2NwdCA9IDAgOyB9CgogICAgYm9vbCBp
c0FjdGlvbkFjY2VwdGVkKCkgY29uc3QgeyByZXR1cm4gYWNjcHRhY3Q7IH0KICAgIHZvaWQgYWNj
ZXB0QWN0aW9uKGJvb2wgeT0gMSApIHsgYWNjcHRhY3QgPSB5OyB9CiAgICBlbnVtIEFjdGlvbiB7
IENvcHksIExpbmssIE1vdmUsIFByaXZhdGUsIFVzZXJBY3Rpb249MTAwIH07CiAgICB2b2lkIHNl
dEFjdGlvbiggQWN0aW9uIGEgKSB7IGFjdCA9ICh1aW50KWE7IH0KICAgIEFjdGlvbiBhY3Rpb24o
KSBjb25zdCB7IHJldHVybiBBY3Rpb24oYWN0KTsgfQoKICAgIFFXaWRnZXQqIHNvdXJjZSgpIGNv
bnN0OwogICAgY29uc3QgY2hhciogZm9ybWF0KCBpbnQgbiA9IDAgKSBjb25zdDsKICAgIFFCeXRl
QXJyYXkgZW5jb2RlZERhdGEoIGNvbnN0IGNoYXIqICkgY29uc3Q7CiAgICBib29sIHByb3ZpZGVz
KCBjb25zdCBjaGFyKiApIGNvbnN0OwoKICAgIFFCeXRlQXJyYXkgZGF0YShjb25zdCBjaGFyKiBm
KSBjb25zdCB7IHJldHVybiBlbmNvZGVkRGF0YShmKTsgfQoKICAgIHZvaWQgc2V0UG9pbnQoIGNv
bnN0IFFQb2ludCYgbnAgKSB7IHAgPSBucDsgfQoKcHJvdGVjdGVkOgogICAgUVBvaW50IHA7CiAg
ICB1aW50IGFjdDo4OwogICAgdWludCBhY2NwdDoxOwogICAgdWludCBhY2NwdGFjdDoxOwogICAg
dWludCByZXN2OjU7CiAgICB2b2lkICogZDsKfTsKCgoKY2xhc3MgICBRRHJhZ01vdmVFdmVudCA6
IHB1YmxpYyBRRHJvcEV2ZW50CnsKcHVibGljOgogICAgUURyYWdNb3ZlRXZlbnQoIGNvbnN0IFFQ
b2ludCYgcG9zLCBUeXBlIHR5cD1EcmFnTW92ZSApCgk6IFFEcm9wRXZlbnQocG9zLHR5cCksCgkg
IHJlY3QoIHBvcywgUVNpemUoIDEsIDEgKSApIHt9CiAgICBRUmVjdCBhbnN3ZXJSZWN0KCkgY29u
c3QgeyByZXR1cm4gcmVjdDsgfQogICAgdm9pZCBhY2NlcHQoIGJvb2wgeT0gMSAgKSB7IFFEcm9w
RXZlbnQ6OmFjY2VwdCh5KTsgfQogICAgdm9pZCBhY2NlcHQoIGNvbnN0IFFSZWN0ICYgcikgeyBh
Y2NwdCA9IDEgOyByZWN0ID0gcjsgfQogICAgdm9pZCBpZ25vcmUoIGNvbnN0IFFSZWN0ICYgcikg
eyBhY2NwdCA9IDAgOyByZWN0ID0gcjsgfQogICAgdm9pZCBpZ25vcmUoKQkJeyBRRHJvcEV2ZW50
OjppZ25vcmUoKTsgfQoKcHJvdGVjdGVkOgogICAgUVJlY3QgcmVjdDsKfTsKCgpjbGFzcyAgIFFE
cmFnRW50ZXJFdmVudCA6IHB1YmxpYyBRRHJhZ01vdmVFdmVudAp7CnB1YmxpYzoKICAgIFFEcmFn
RW50ZXJFdmVudCggY29uc3QgUVBvaW50JiBwb3MgKSA6CglRRHJhZ01vdmVFdmVudChwb3MsIERy
YWdFbnRlcikgeyB9Cn07CgoKIApjbGFzcyAgIFFEcmFnUmVzcG9uc2VFdmVudCA6IHB1YmxpYyBR
RXZlbnQKewpwdWJsaWM6CiAgICBRRHJhZ1Jlc3BvbnNlRXZlbnQoIGJvb2wgYWNjZXB0ZWQgKQoJ
OiBRRXZlbnQoRHJhZ1Jlc3BvbnNlKSwgYShhY2NlcHRlZCkge30KICAgIGJvb2wgICBkcmFnQWNj
ZXB0ZWQoKSBjb25zdAl7IHJldHVybiBhOyB9CnByb3RlY3RlZDoKICAgIGJvb2wgYTsKfTsKCgpj
bGFzcyAgIFFEcmFnTGVhdmVFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRRHJh
Z0xlYXZlRXZlbnQoKQoJOiBRRXZlbnQoRHJhZ0xlYXZlKSB7fQp9OwoKCgpjbGFzcyAgIFFDaGls
ZEV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFDaGlsZEV2ZW50KCBUeXBlIHR5
cGUsIFFPYmplY3QgKmNoaWxkICkKCTogUUV2ZW50KHR5cGUpLCBjKGNoaWxkKSB7fQogICAgUU9i
amVjdCAqY2hpbGQoKSBjb25zdAl7IHJldHVybiBjOyB9CiAgICBib29sIGluc2VydGVkKCkgY29u
c3QgeyByZXR1cm4gdCA9PSBDaGlsZEluc2VydGVkOyB9CiAgICBib29sIHJlbW92ZWQoKSBjb25z
dCB7IHJldHVybiB0ID09IENoaWxkUmVtb3ZlZDsgfQpwcm90ZWN0ZWQ6CiAgICBRT2JqZWN0ICpj
Owp9OwoKCmNsYXNzICAgUUN1c3RvbUV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAg
IFFDdXN0b21FdmVudCggaW50IHR5cGUgKTsKICAgIFFDdXN0b21FdmVudCggVHlwZSB0eXBlLCB2
b2lkICpkYXRhICkKCTogUUV2ZW50KHR5cGUpLCBkKGRhdGEpIHt9OwogICAgdm9pZCAgICAgICAq
ZGF0YSgpCWNvbnN0CXsgcmV0dXJuIGQ7IH0KICAgIHZvaWQJc2V0RGF0YSggdm9pZCogZGF0YSAp
CXsgZCA9IGRhdGE7IH0KcHJpdmF0ZToKICAgIHZvaWQgICAgICAgKmQ7Cn07CgoKIyA0NSAiL2Ft
ZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9x
b2JqZWN0LmgiIDIKCgoKCgoKCgpjbGFzcyBRTWV0YU9iamVjdDsKY2xhc3MgUVZhcmlhbnQ7CgoK
CmNsYXNzICAgUU9iamVjdDogcHVibGljIFF0CnsKICAgICAKCnB1YmxpYzoKICAgIFFPYmplY3Qo
IFFPYmplY3QgKnBhcmVudD0wLCBjb25zdCBjaGFyICpuYW1lPTAgKTsKICAgIHZpcnR1YWwgflFP
YmplY3QoKTsKCiAgICBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqICk7CiAgICBzdGF0
aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogKTsKCiAgICB2aXJ0dWFs
IGJvb2wgZXZlbnQoIFFFdmVudCAqICk7CiAgICB2aXJ0dWFsIGJvb2wgZXZlbnRGaWx0ZXIoIFFP
YmplY3QgKiwgUUV2ZW50ICogKTsKCiAgICB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9CiAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIJKmNsYXNzTmFtZSgpICBjb25zdDsKCiAgICBib29sCSBpc0EoIGNvbnN0IGNoYXIgKiAp
CSBjb25zdDsKICAgIGJvb2wJIGluaGVyaXRzKCBjb25zdCBjaGFyICogKSBjb25zdDsKCiAgICBj
b25zdCBjaGFyICAqbmFtZSgpIGNvbnN0OwogICAgY29uc3QgY2hhciAgKm5hbWUoIGNvbnN0IGNo
YXIgKiBkZWZhdWx0TmFtZSApIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXROYW1lKCBjb25z
dCBjaGFyICpuYW1lICk7CiAgICBib29sCSBpc1dpZGdldFR5cGUoKQkgIGNvbnN0IHsgcmV0dXJu
IGlzV2lkZ2V0OyB9CiAgICBib29sCSBoaWdoUHJpb3JpdHkoKQkgIGNvbnN0IHsgcmV0dXJuIDAg
OyB9CgogICAgYm9vbAkgc2lnbmFsc0Jsb2NrZWQoKSAgY29uc3QgeyByZXR1cm4gYmxvY2tTaWc7
IH0KICAgIHZvaWQJIGJsb2NrU2lnbmFscyggYm9vbCBiICk7CgogICAgaW50CQkgc3RhcnRUaW1l
ciggaW50IGludGVydmFsICk7CiAgICB2b2lkCSBraWxsVGltZXIoIGludCBpZCApOwogICAgdm9p
ZAkga2lsbFRpbWVycygpOwoKICAgIFFPYmplY3QgICAgICAgICAgICpjaGlsZCggY29uc3QgY2hh
ciAqbmFtZSwgY29uc3QgY2hhciAqdHlwZSA9IDAgKTsKICAgIGNvbnN0IFFPYmplY3RMaXN0ICpj
aGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIGNoaWxkT2JqZWN0czsgfQoKICAgIHN0YXRpYyBjb25z
dCBRT2JqZWN0TGlzdCAqb2JqZWN0VHJlZXMoKTsKCiAgICAgCiAgICBRT2JqZWN0TGlzdAkgICAg
ICAqcXVlcnlMaXN0KCBjb25zdCBjaGFyICppbmhlcml0c0NsYXNzID0gMCwKCQkJCSAgY29uc3Qg
Y2hhciAqb2JqTmFtZSA9IDAsCgkJCQkgIGJvb2wgcmVnZXhwTWF0Y2ggPSAxICwKCQkJCSAgYm9v
bCByZWN1cnNpdmVTZWFyY2ggPSAxICApOwoKICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRDaGlsZCgg
UU9iamVjdCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoIFFPYmplY3QgKiApOwoK
ICAgIHZvaWQJIGluc3RhbGxFdmVudEZpbHRlciggY29uc3QgUU9iamVjdCAqICk7CiAgICB2b2lk
CSByZW1vdmVFdmVudEZpbHRlciggY29uc3QgUU9iamVjdCAqICk7CgogICAgc3RhdGljIGJvb2wg
IGNvbm5lY3QoIGNvbnN0IFFPYmplY3QgKnNlbmRlciwgY29uc3QgY2hhciAqc2lnbmFsLAoJCQkg
IGNvbnN0IFFPYmplY3QgKnJlY2VpdmVyLCBjb25zdCBjaGFyICptZW1iZXIgKTsKICAgIGJvb2wJ
IGNvbm5lY3QoIGNvbnN0IFFPYmplY3QgKnNlbmRlciwgY29uc3QgY2hhciAqc2lnbmFsLAoJCQkg
IGNvbnN0IGNoYXIgKm1lbWJlciApIGNvbnN0OwogICAgc3RhdGljIGJvb2wgIGRpc2Nvbm5lY3Qo
IGNvbnN0IFFPYmplY3QgKnNlbmRlciwgY29uc3QgY2hhciAqc2lnbmFsLAoJCQkgICAgIGNvbnN0
IFFPYmplY3QgKnJlY2VpdmVyLCBjb25zdCBjaGFyICptZW1iZXIgKTsKICAgIGJvb2wJIGRpc2Nv
bm5lY3QoIGNvbnN0IGNoYXIgKnNpZ25hbD0wLAoJCQkgICAgIGNvbnN0IFFPYmplY3QgKnJlY2Vp
dmVyPTAsIGNvbnN0IGNoYXIgKm1lbWJlcj0wICk7CiAgICBib29sCSBkaXNjb25uZWN0KCBjb25z
dCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hhciAqbWVtYmVyPTAgKTsKCiAgICB2b2lkCSBk
dW1wT2JqZWN0VHJlZSgpOwogICAgdm9pZAkgZHVtcE9iamVjdEluZm8oKTsKCgogICAgYm9vbCBz
ZXRQcm9wZXJ0eSggY29uc3QgY2hhciAqbmFtZSwgY29uc3QgUVZhcmlhbnQmIHZhbHVlICk7ICAK
ICAgIFFWYXJpYW50IHByb3BlcnR5KCBjb25zdCBjaGFyICpuYW1lICkgY29uc3Q7ICAgICAKCgpw
cm90ZWN0ZWQgOgogICAgdm9pZAkgZGVzdHJveWVkKCk7CgpwdWJsaWM6CiAgICBRT2JqZWN0CSpw
YXJlbnQoKSBjb25zdCB7IHJldHVybiBwYXJlbnRPYmo7IH0KCnByaXZhdGUgIDoKICAgIHZvaWQJ
IGNsZWFudXBFdmVudEZpbHRlcigpOwoKcHJvdGVjdGVkOgogICAgYm9vbAkgYWN0aXZhdGVfZmls
dGVycyggUUV2ZW50ICogKTsKICAgIFFDb25uZWN0aW9uTGlzdCAqcmVjZWl2ZXJzKCBjb25zdCBj
aGFyICpzaWduYWwgKSBjb25zdDsKICAgIHZvaWQJIGFjdGl2YXRlX3NpZ25hbCggY29uc3QgY2hh
ciAqc2lnbmFsICk7CiAgICB2b2lkCSBhY3RpdmF0ZV9zaWduYWwoIGNvbnN0IGNoYXIgKnNpZ25h
bCwgc2hvcnQgKTsKICAgIHZvaWQJIGFjdGl2YXRlX3NpZ25hbCggY29uc3QgY2hhciAqc2lnbmFs
LCBpbnQgKTsKICAgIHZvaWQJIGFjdGl2YXRlX3NpZ25hbCggY29uc3QgY2hhciAqc2lnbmFsLCBs
b25nICk7CiAgICB2b2lkCSBhY3RpdmF0ZV9zaWduYWwoIGNvbnN0IGNoYXIgKnNpZ25hbCwgY29u
c3QgY2hhciAqICk7CiAgICB2b2lkCSBhY3RpdmF0ZV9zaWduYWxfYm9vbCggY29uc3QgY2hhciAq
c2lnbmFsLCBib29sICk7CiAgICB2b2lkCSBhY3RpdmF0ZV9zaWduYWxfc3RyaW5nKCBjb25zdCBj
aGFyICpzaWduYWwsIFFTdHJpbmcgKTsKICAgIHZvaWQJIGFjdGl2YXRlX3NpZ25hbF9zdHJyZWYo
IGNvbnN0IGNoYXIgKnNpZ25hbCwgY29uc3QgUVN0cmluZyAmICk7CgogICAgY29uc3QgUU9iamVj
dCAqc2VuZGVyKCk7CgoKICAgIHZpcnR1YWwgdm9pZCBpbml0TWV0YU9iamVjdCgpOwogICAgc3Rh
dGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7CgogICAgdmlydHVhbCB2b2lkIHRp
bWVyRXZlbnQoIFFUaW1lckV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBjaGlsZEV2ZW50KCBR
Q2hpbGRFdmVudCAqICk7CgogICAgdmlydHVhbCB2b2lkIGNvbm5lY3ROb3RpZnkoIGNvbnN0IGNo
YXIgKnNpZ25hbCApOwogICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3ROb3RpZnkoIGNvbnN0IGNo
YXIgKnNpZ25hbCApOwogICAgdmlydHVhbCBib29sIGNoZWNrQ29ubmVjdEFyZ3MoIGNvbnN0IGNo
YXIgKnNpZ25hbCwgY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsCgkJCQkgICBjb25zdCBjaGFyICpt
ZW1iZXIgKTsKICAgIHN0YXRpYyBRQ1N0cmluZyBub3JtYWxpemVTaWduYWxTbG90KCBjb25zdCBj
aGFyICpzaWduYWxTbG90ICk7CgogICAgc3RhdGljICB2b2lkIGJhZFN1cGVyY2xhc3NXYXJuaW5n
KCBjb25zdCBjaGFyICpjbGFzc05hbWUsCgkJCQkgICAgICAgY29uc3QgY2hhciAqc3VwZXJjbGFz
c05hbWUgKTsKCnByaXZhdGU6CiAgICB1aW50CWlzU2lnbmFsICAgOiAxOwogICAgdWludAlpc1dp
ZGdldCAgIDogMTsKICAgIHVpbnQJcGVuZFRpbWVyICA6IDE7CiAgICB1aW50CXBlbmRFdmVudCAg
OiAxOwogICAgdWludAlibG9ja1NpZyAgIDogMTsKICAgIHVpbnQJd2FzRGVsZXRlZCA6IDE7CiAg
ICB1aW50CWlzVHJlZSA6IDE7CgogICAgUU1ldGFPYmplY3QgKnF1ZXJ5TWV0YU9iamVjdCgpIGNv
bnN0OwogICAgc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwogICAgY29uc3QgY2hhcgkqb2Jq
bmFtZTsKICAgIFFPYmplY3QJKnBhcmVudE9iajsKICAgIFFPYmplY3RMaXN0ICpjaGlsZE9iamVj
dHM7CiAgICBRU2lnbmFsRGljdCAqY29ubmVjdGlvbnM7CiAgICBRT2JqZWN0TGlzdCAqc2VuZGVy
T2JqZWN0czsKICAgIFFPYmplY3RMaXN0ICpldmVudEZpbHRlcnM7CiAgICAgCgogICAgUU9iamVj
dAkqc2lnU2VuZGVyOwoKICAgIGZyaWVuZCBjbGFzcyBRQXBwbGljYXRpb247CiAgICBmcmllbmQg
Y2xhc3MgUUJhc2VBcHBsaWNhdGlvbjsKICAgIGZyaWVuZCBjbGFzcyBRV2lkZ2V0OwogICAgZnJp
ZW5kIGNsYXNzIFFTaWduYWw7CiAgICBmcmllbmQgY2xhc3MgUVNlbmRlck9iamVjdDsKCnByaXZh
dGU6CSAKCiAgICBRT2JqZWN0KCBjb25zdCBRT2JqZWN0ICYgKTsKICAgIFFPYmplY3QgJm9wZXJh
dG9yPSggY29uc3QgUU9iamVjdCAmICk7CgoKcHVibGljOgogICAgIAoKICAgIFFTdHJpbmdMaXN0
ICBzdXBlckNsYXNzZXMoIGJvb2wgaW5jbHVkZVRoaXMgPSAwICApIGNvbnN0OyAgCgp9OwoKCgpp
bmxpbmUgYm9vbCBRT2JqZWN0Ojpjb25uZWN0KCBjb25zdCBRT2JqZWN0ICpzZW5kZXIsIGNvbnN0
IGNoYXIgKnNpZ25hbCwKCQkJICAgICAgY29uc3QgY2hhciAqbWVtYmVyICkgY29uc3QKewogICAg
cmV0dXJuIGNvbm5lY3QoIHNlbmRlciwgc2lnbmFsLCB0aGlzLCBtZW1iZXIgKTsKfQoKaW5saW5l
IGJvb2wgUU9iamVjdDo6ZGlzY29ubmVjdCggY29uc3QgY2hhciAqc2lnbmFsLAoJCQkJIGNvbnN0
IFFPYmplY3QgKnJlY2VpdmVyLCBjb25zdCBjaGFyICptZW1iZXIgKQp7CiAgICByZXR1cm4gZGlz
Y29ubmVjdCggdGhpcywgc2lnbmFsLCByZWNlaXZlciwgbWVtYmVyICk7Cn0KCmlubGluZSBib29s
IFFPYmplY3Q6OmRpc2Nvbm5lY3QoIGNvbnN0IFFPYmplY3QgKnJlY2VpdmVyLCBjb25zdCBjaGFy
ICptZW1iZXIgKQp7CiAgICByZXR1cm4gZGlzY29ubmVjdCggdGhpcywgMCwgcmVjZWl2ZXIsIG1l
bWJlciApOwp9CgppbmxpbmUgY29uc3QgUU9iamVjdCAqUU9iamVjdDo6c2VuZGVyKCkKewogICAg
cmV0dXJuIHNpZ1NlbmRlcjsKfQoKCmNsYXNzICAgUVNlbmRlck9iamVjdCA6IHB1YmxpYyBRT2Jq
ZWN0CQkgCnsKcHVibGljOgogICAgdm9pZCBzZXRTZW5kZXIoIFFPYmplY3QgKnMgKSB7IHNpZ1Nl
bmRlcj1zOyB9Cn07CgoKCgoKCgojIDQ3ICJrZXJuZWwvcW5ldHdvcmtwcm90b2NvbC5oIiAyCgoj
IDEgIi9hbWQvc2lnbWEvMC9zcmMvYWxwaGEtZGVjLW9zZjQuMC93b3JrZGlyL3F0LTIuMi4zL2lu
Y2x1ZGUvcXF1ZXVlLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCnRlbXBsYXRlPGNsYXNzIHR5cGU+IGNsYXNzIFFRdWV1ZSA6IHByaXZhdGUgUUdMaXN0
CnsKcHVibGljOgogICAgUVF1ZXVlKCkJCQkJe30KICAgIFFRdWV1ZSggY29uc3QgUVF1ZXVlPHR5
cGU+ICZxICkgOiBRR0xpc3QocSkge30KICAgflFRdWV1ZSgpCQkJCXsgY2xlYXIoKTsgfQogICAg
UVF1ZXVlPHR5cGU+JiBvcGVyYXRvcj0oY29uc3QgUVF1ZXVlPHR5cGU+ICZxKQoJCQl7IHJldHVy
biAoUVF1ZXVlPHR5cGU+JilRR0xpc3Q6Om9wZXJhdG9yPShxKTsgfQogICAgYm9vbCAgYXV0b0Rl
bGV0ZSgpIGNvbnN0CQl7IHJldHVybiBRQ29sbGVjdGlvbjo6YXV0b0RlbGV0ZSgpOyB9CiAgICB2
b2lkICBzZXRBdXRvRGVsZXRlKCBib29sIGRlbCApCXsgUUNvbGxlY3Rpb246OnNldEF1dG9EZWxl
dGUoZGVsKTsgfQogICAgdWludCAgY291bnQoKSAgIGNvbnN0CQl7IHJldHVybiBRR0xpc3Q6OmNv
dW50KCk7IH0KICAgIGJvb2wgIGlzRW1wdHkoKSBjb25zdAkJeyByZXR1cm4gUUdMaXN0Ojpjb3Vu
dCgpID09IDA7IH0KICAgIHZvaWQgIGVucXVldWUoIGNvbnN0IHR5cGUgKmQgKQl7IFFHTGlzdDo6
YXBwZW5kKEl0ZW0oZCkpOyB9CiAgICB0eXBlICpkZXF1ZXVlKCkJCQl7IHJldHVybiAodHlwZSAq
KVFHTGlzdDo6dGFrZUZpcnN0KCk7fQogICAgYm9vbCAgcmVtb3ZlKCkJCQl7IHJldHVybiBRR0xp
c3Q6OnJlbW92ZUZpcnN0KCk7IH0KICAgIHZvaWQgIGNsZWFyKCkJCQl7IFFHTGlzdDo6Y2xlYXIo
KTsgfQogICAgdHlwZSAqaGVhZCgpICAgIGNvbnN0CQl7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6
Y2ZpcnN0KCk7IH0KCSAgb3BlcmF0b3IgdHlwZSAqKCkgY29uc3QJeyByZXR1cm4gKHR5cGUgKilR
R0xpc3Q6OmNmaXJzdCgpOyB9CiAgICB0eXBlICpjdXJyZW50KCkgY29uc3QJCXsgcmV0dXJuICh0
eXBlICopUUdMaXN0OjpjZmlyc3QoKTsgfQpwcml2YXRlOgogICAgdm9pZCAgZGVsZXRlSXRlbSgg
SXRlbSBkICkgeyBpZiAoIGRlbF9pdGVtICkgZGVsZXRlICh0eXBlICopZDsgfQp9OwoKCgojIDQ4
ICJrZXJuZWwvcW5ldHdvcmtwcm90b2NvbC5oIiAyCgoKCgoKY2xhc3MgUU5ldHdvcmtQcm90b2Nv
bDsKY2xhc3MgUU5ldHdvcmtPcGVyYXRpb247CmNsYXNzIFFUaW1lcjsKc3RydWN0IFFOZXR3b3Jr
UHJvdG9jb2xQcml2YXRlOwpjbGFzcyBRVXJsT3BlcmF0b3I7CgpjbGFzcyAgIFFOZXR3b3JrUHJv
dG9jb2xGYWN0b3J5QmFzZQp7CnB1YmxpYzoKICAgdmlydHVhbCBRTmV0d29ya1Byb3RvY29sICpj
cmVhdGVPYmplY3QoKSA9IDA7Cgp9OwoKdGVtcGxhdGU8IGNsYXNzIFByb3RvY29sID4KY2xhc3Mg
UU5ldHdvcmtQcm90b2NvbEZhY3RvcnkgOiBwdWJsaWMgUU5ldHdvcmtQcm90b2NvbEZhY3RvcnlC
YXNlCnsKcHVibGljOgogICAgUU5ldHdvcmtQcm90b2NvbCAqY3JlYXRlT2JqZWN0KCkgewoJcmV0
dXJuIG5ldyBQcm90b2NvbDsKICAgIH0KCn07Cgp0eXBlZGVmIFFEaWN0PCBRTmV0d29ya1Byb3Rv
Y29sRmFjdG9yeUJhc2UgPiBRTmV0d29ya1Byb3RvY29sRGljdDsKCmNsYXNzICAgUU5ldHdvcmtQ
cm90b2NvbCA6IHB1YmxpYyBRT2JqZWN0CnsKICAgIHB1YmxpYzoJUU1ldGFPYmplY3QgKm1ldGFP
YmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7CX0JY29uc3QgY2hhciAq
Y2xhc3NOYW1lKCkgY29uc3Q7CXN0YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgp
OwlzdGF0aWMgUVN0cmluZyB0cihjb25zdCBjaGFyKik7IHN0YXRpYyBRU3RyaW5nIHRyKGNvbnN0
IGNoYXIqLCBjb25zdCBjaGFyKik7IAlwcm90ZWN0ZWQ6CXZvaWQgaW5pdE1ldGFPYmplY3QoKTsJ
cHJpdmF0ZToJc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOyAKCnB1YmxpYzoKICAgIGVudW0g
U3RhdGUgewoJU3RXYWl0aW5nID0gMCwKCVN0SW5Qcm9ncmVzcywKCVN0RG9uZSwKCVN0RmFpbGVk
LAoJU3RTdG9wcGVkCiAgICB9OwoKICAgIGVudW0gT3BlcmF0aW9uIHsKCU9wTGlzdENoaWxkcmVu
ID0gMSwKCU9wTWtkaXIgPSAyLAoJT3BSZW1vdmUgPSA0LAoJT3BSZW5hbWUgPSA4LAoJT3BHZXQg
PSAzMiwKCU9wUHV0ID0gNjQKICAgIH07CgogICAgZW51bSBDb25uZWN0aW9uU3RhdGUgewoJQ29u
SG9zdEZvdW5kLAoJQ29uQ29ubmVjdGVkLAoJQ29uQ2xvc2VkCiAgICB9OwoKICAgIGVudW0gRXJy
b3IgewoJIAoJTm9FcnJvciA9IDAsCgkgCglFcnJWYWxpZCwKCUVyclVua25vd25Qcm90b2NvbCwK
CUVyclVuc3VwcG9ydGVkLAoJRXJyUGFyc2UsCgkgCglFcnJMb2dpbkluY29ycmVjdCwKCUVyckhv
c3ROb3RGb3VuZCwKCSAKCUVyckxpc3RDaGxpZHJlbiwKCUVyck1rZGlyLAoJRXJyUmVtb3ZlLAoJ
RXJyUmVuYW1lLAoJRXJyR2V0LAoJRXJyUHV0LAoJRXJyRmlsZU5vdEV4aXN0aW5nLAoJRXJyUGVy
bWlzc2lvbkRlbmllZAogICAgfTsKCiAgICBRTmV0d29ya1Byb3RvY29sKCk7CiAgICB2aXJ0dWFs
IH5RTmV0d29ya1Byb3RvY29sKCk7CgogICAgdmlydHVhbCB2b2lkIHNldFVybCggUVVybE9wZXJh
dG9yICp1ICk7CgogICAgdmlydHVhbCB2b2lkIHNldEF1dG9EZWxldGUoIGJvb2wgYiwgaW50IGkg
PSAxMDAwMCApOwogICAgYm9vbCBhdXRvRGVsZXRlKCkgY29uc3Q7CgogICAgc3RhdGljIHZvaWQg
cmVnaXN0ZXJOZXR3b3JrUHJvdG9jb2woIGNvbnN0IFFTdHJpbmcgJnByb3RvY29sLAoJCQkJCSBR
TmV0d29ya1Byb3RvY29sRmFjdG9yeUJhc2UgKnByb3RvY29sRmFjdG9yeSApOwogICAgc3RhdGlj
IFFOZXR3b3JrUHJvdG9jb2wgKmdldE5ldHdvcmtQcm90b2NvbCggY29uc3QgUVN0cmluZyAmcHJv
dG9jb2wgKTsKICAgIHN0YXRpYyBib29sIGhhc09ubHlMb2NhbEZpbGVTeXN0ZW0oKTsKCiAgICB2
aXJ0dWFsIGludCBzdXBwb3J0ZWRPcGVyYXRpb25zKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQg
YWRkT3BlcmF0aW9uKCBRTmV0d29ya09wZXJhdGlvbiAqb3AgKTsKCiAgICBRVXJsT3BlcmF0b3Ig
KnVybCgpIGNvbnN0OwogICAgUU5ldHdvcmtPcGVyYXRpb24gKm9wZXJhdGlvbkluUHJvZ3Jlc3Mo
KSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBjbGVhck9wZXJhdGlvblF1ZXVlKCk7CiAgICB2aXJ0
dWFsIHZvaWQgc3RvcCgpOwoKcHJvdGVjdGVkIDoKICAgIHZvaWQgZGF0YSggY29uc3QgUUJ5dGVB
cnJheSAmLCBRTmV0d29ya09wZXJhdGlvbiAqcmVzICk7CiAgICB2b2lkIGNvbm5lY3Rpb25TdGF0
ZUNoYW5nZWQoIGludCBzdGF0ZSwgY29uc3QgUVN0cmluZyAmZGF0YSApOwogICAgdm9pZCBmaW5p
c2hlZCggUU5ldHdvcmtPcGVyYXRpb24gKnJlcyApOwogICAgdm9pZCBzdGFydCggUU5ldHdvcmtP
cGVyYXRpb24gKnJlcyApOwogICAgdm9pZCBuZXdDaGlsZHJlbiggY29uc3QgUVZhbHVlTGlzdDxR
VXJsSW5mbz4gJiwgUU5ldHdvcmtPcGVyYXRpb24gKnJlcyApOwogICAgdm9pZCBuZXdDaGlsZCgg
Y29uc3QgUVVybEluZm8gJiwgUU5ldHdvcmtPcGVyYXRpb24gKnJlcyApOwogICAgdm9pZCBjcmVh
dGVkRGlyZWN0b3J5KCBjb25zdCBRVXJsSW5mbyAmLCBRTmV0d29ya09wZXJhdGlvbiAqcmVzICk7
CiAgICB2b2lkIHJlbW92ZWQoIFFOZXR3b3JrT3BlcmF0aW9uICpyZXMgKTsKICAgIHZvaWQgaXRl
bUNoYW5nZWQoIFFOZXR3b3JrT3BlcmF0aW9uICpyZXMgKTsKICAgIHZvaWQgZGF0YVRyYW5zZmVy
UHJvZ3Jlc3MoIGludCBieXRlc0RvbmUsIGludCBieXRlc1RvdGFsLCBRTmV0d29ya09wZXJhdGlv
biAqcmVzICk7Cgpwcm90ZWN0ZWQ6CiAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc09wZXJhdGlvbigg
UU5ldHdvcmtPcGVyYXRpb24gKm9wICk7CiAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0aW9uTGlzdENo
aWxkcmVuKCBRTmV0d29ya09wZXJhdGlvbiAqb3AgKTsKICAgIHZpcnR1YWwgdm9pZCBvcGVyYXRp
b25Na0RpciggUU5ldHdvcmtPcGVyYXRpb24gKm9wICk7CiAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0
aW9uUmVtb3ZlKCBRTmV0d29ya09wZXJhdGlvbiAqb3AgKTsKICAgIHZpcnR1YWwgdm9pZCBvcGVy
YXRpb25SZW5hbWUoIFFOZXR3b3JrT3BlcmF0aW9uICpvcCApOwogICAgdmlydHVhbCB2b2lkIG9w
ZXJhdGlvbkdldCggUU5ldHdvcmtPcGVyYXRpb24gKm9wICk7CiAgICB2aXJ0dWFsIHZvaWQgb3Bl
cmF0aW9uUHV0KCBRTmV0d29ya09wZXJhdGlvbiAqb3AgKTsKICAgIHZpcnR1YWwgYm9vbCBjaGVj
a0Nvbm5lY3Rpb24oIFFOZXR3b3JrT3BlcmF0aW9uICpvcCApOwoKcHJpdmF0ZToKICAgIFFOZXR3
b3JrUHJvdG9jb2xQcml2YXRlICpkOwoKcHJpdmF0ZSAgOgogICAgdm9pZCBwcm9jZXNzTmV4dE9w
ZXJhdGlvbiggUU5ldHdvcmtPcGVyYXRpb24gKm9sZCApOwogICAgdm9pZCBzdGFydE9wcygpOwog
ICAgdm9pZCBlbWl0TmV3Q2hpbGRyZW4oIGNvbnN0IFFVcmxJbmZvICZpLCBRTmV0d29ya09wZXJh
dGlvbiAqb3AgKTsKCiAgICB2b2lkIHJlbW92ZU1lKCk7Cgp9OwoKc3RydWN0IFFOZXR3b3JrT3Bl
cmF0aW9uUHJpdmF0ZTsKY2xhc3MgICBRTmV0d29ya09wZXJhdGlvbiA6IHB1YmxpYyBRT2JqZWN0
CnsKICAgIHB1YmxpYzoJUU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNNZXRhT2JqZWN0KCk7CX0JY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7CXN0YXRp
YyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgpOwlzdGF0aWMgUVN0cmluZyB0cihjb25z
dCBjaGFyKik7IHN0YXRpYyBRU3RyaW5nIHRyKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7IAlw
cm90ZWN0ZWQ6CXZvaWQgaW5pdE1ldGFPYmplY3QoKTsJcHJpdmF0ZToJc3RhdGljIFFNZXRhT2Jq
ZWN0ICptZXRhT2JqOyAKICAgIGZyaWVuZCBjbGFzcyBRVXJsT3BlcmF0b3I7CgpwdWJsaWM6CiAg
ICBRTmV0d29ya09wZXJhdGlvbiggUU5ldHdvcmtQcm90b2NvbDo6T3BlcmF0aW9uIG9wZXJhdGlv
biwKCQkgICAgY29uc3QgUVN0cmluZyAmYXJnMCwgY29uc3QgUVN0cmluZyAmYXJnMSwKCQkgICAg
Y29uc3QgUVN0cmluZyAmYXJnMiApOwogICAgUU5ldHdvcmtPcGVyYXRpb24oIFFOZXR3b3JrUHJv
dG9jb2w6Ok9wZXJhdGlvbiBvcGVyYXRpb24sCgkJICAgIGNvbnN0IFFCeXRlQXJyYXkgJmFyZzAs
IGNvbnN0IFFCeXRlQXJyYXkgJmFyZzEsCgkJICAgIGNvbnN0IFFCeXRlQXJyYXkgJmFyZzIgKTsK
ICAgIH5RTmV0d29ya09wZXJhdGlvbigpOwoKICAgIHZvaWQgc2V0U3RhdGUoIFFOZXR3b3JrUHJv
dG9jb2w6OlN0YXRlIHN0YXRlICk7CiAgICB2b2lkIHNldFByb3RvY29sRGV0YWlsKCBjb25zdCBR
U3RyaW5nICZkZXRhaWwgKTsKICAgIHZvaWQgc2V0RXJyb3JDb2RlKCBpbnQgZWMgKTsKICAgIHZv
aWQgc2V0QXJnKCBpbnQgbnVtLCBjb25zdCBRU3RyaW5nICZhcmcgKTsKICAgIHZvaWQgc2V0UmF3
QXJnKCBpbnQgbnVtLCBjb25zdCBRQnl0ZUFycmF5ICZhcmcgKTsKCiAgICBRTmV0d29ya1Byb3Rv
Y29sOjpPcGVyYXRpb24gb3BlcmF0aW9uKCkgY29uc3Q7CiAgICBRTmV0d29ya1Byb3RvY29sOjpT
dGF0ZSBzdGF0ZSgpIGNvbnN0OwogICAgUVN0cmluZyBhcmcoIGludCBudW0gKSBjb25zdDsKICAg
IFFCeXRlQXJyYXkgcmF3QXJnKCBpbnQgbnVtICkgY29uc3Q7CiAgICBRU3RyaW5nIHByb3RvY29s
RGV0YWlsKCkgY29uc3Q7CiAgICBpbnQgZXJyb3JDb2RlKCkgY29uc3Q7CgogICAgdm9pZCBmcmVl
KCk7Cgpwcml2YXRlICA6CiAgICB2b2lkIGRlbGV0ZU1lKCk7Cgpwcml2YXRlOgogICAgUUJ5dGVB
cnJheSAmcmF3KCBpbnQgbnVtICkgY29uc3Q7CgogICAgUU5ldHdvcmtPcGVyYXRpb25Qcml2YXRl
ICpkOwoKfTsKCgoKCiMgMTcgImtlcm5lbC9tb2NfcW5ldHdvcmtwcm90b2NvbC5jcHAiIDIKCiMg
MSAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5j
bHVkZS9xbWV0YW9iamVjdC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiMgMSAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQt
Mi4yLjMvaW5jbHVkZS9xY29ubmVjdGlvbi5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipRTWVtYmVyKSgpOwkJ
IAoKCmNsYXNzICAgUUNvbm5lY3Rpb24KewpwdWJsaWM6CiAgICBRQ29ubmVjdGlvbiggY29uc3Qg
UU9iamVjdCAqLCBRTWVtYmVyLCBjb25zdCBjaGFyICptZW1iZXJOYW1lICk7CiAgIH5RQ29ubmVj
dGlvbigpIHt9CgogICAgYm9vbCAgICAgaXNDb25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiBvYmog
IT0gMDsgfQoKICAgIFFPYmplY3QgKm9iamVjdCgpIGNvbnN0ICB7IHJldHVybiBvYmo7IH0JIAog
ICAgUU1lbWJlciAqbWVtYmVyKCkgY29uc3QgIHsgcmV0dXJuIChRTWVtYmVyKikmbWJyOyB9CiAg
ICBjb25zdCBjaGFyICptZW1iZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gbWJyX25hbWU7IH0KICAg
IGludAkgICAgIG51bUFyZ3MoKSBjb25zdCB7IHJldHVybiBuYXJnczsgfQoKcHJpdmF0ZToKICAg
IFFPYmplY3QgKm9iajsJCQkJIAogICAgUU1lbWJlciAgbWJyOwkJCQkgCiAgICBjb25zdCBjaGFy
ICptYnJfbmFtZTsKICAgIGludAkgICAgIG5hcmdzOwoKcHJpdmF0ZToJIAoKICAgIFFDb25uZWN0
aW9uKCBjb25zdCBRQ29ubmVjdGlvbiAmICk7CiAgICBRQ29ubmVjdGlvbiAmb3BlcmF0b3I9KCBj
b25zdCBRQ29ubmVjdGlvbiAmICk7Cgp9OwoKCgojIDQyICIvYW1kL3NpZ21hLzAvc3JjL2FscGhh
LWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3FtZXRhb2JqZWN0LmgiIDIKCgoK
CmNsYXNzIFFPYmplY3Q7CgpzdHJ1Y3QgUU1ldGFEYXRhCQkJCSAKewkJCQkJCSAKICAgIGNvbnN0
IGNoYXIgKm5hbWU7CQkJCSAKICAgIFFNZW1iZXIgcHRyOwkJCQkgCiAgICBlbnVtIEFjY2VzcyB7
IFByaXZhdGUsIFByb3RlY3RlZCwgUHVibGljIH07CiAgICAgCgoKfTsKCgpzdHJ1Y3QgUU1ldGFF
bnVtIAkJCQkgCnsJCQkJCQkgCiAgICBRTWV0YUVudW0oKSB7IH0KICAgIH5RTWV0YUVudW0oKSB7
IGRlbGV0ZSBbXSBpdGVtczsgfQogICAgY29uc3QgY2hhciAqbmFtZTsJCQkJIAogICAgdWludCBj
b3VudDsJCQkJCSAKICAgIHN0cnVjdCBJdGVtIAkJCQkgCiAgICB7Cgljb25zdCBjaGFyICprZXk7
CglpbnQgdmFsdWU7CiAgICB9OwogICAgSXRlbSAqaXRlbXM7CQkJCSAKICAgIGJvb2wgc2V0OwkJ
CQkJIAp9OwoKCmNsYXNzICAgUU1ldGFQcm9wZXJ0eSAJCQkgCnsKcHVibGljOgogICAgUU1ldGFQ
cm9wZXJ0eSgpOwogICAgflFNZXRhUHJvcGVydHkoKTsKCiAgICBjb25zdCBjaGFyIAkqdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIHQ7IH0JIAogICAgY29uc3QgY2hhcioJbmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG47IH0JIAoKICAgIGJvb2wgd3JpdGFibGUoKSBjb25zdDsKICAgIGJvb2wgd3JpdGVhYmxl
KCkgY29uc3Q7CQkJIAogICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CgogICAgYm9vbCBpc1NldFR5
cGUoKSBjb25zdDsKICAgIGJvb2wgaXNFbnVtVHlwZSgpIGNvbnN0OwogICAgUVN0ckxpc3QgZW51
bUtleXMoKSBjb25zdDsJCQkgCgogICAgaW50IGtleVRvVmFsdWUoIGNvbnN0IGNoYXIqIGtleSAp
IGNvbnN0OyAJIAogICAgY29uc3QgY2hhciogdmFsdWVUb0tleSggaW50IHZhbHVlICkgY29uc3Q7
CiAgICBpbnQga2V5c1RvVmFsdWUoIGNvbnN0IFFTdHJMaXN0JiBrZXlzICkgY29uc3Q7CiAgICBR
U3RyTGlzdCB2YWx1ZVRvS2V5cyggaW50IHZhbHVlICkgY29uc3Q7CgogICAgYm9vbCBzdG9yZWQo
IFFPYmplY3QqICkgY29uc3Q7CiAgICBib29sIGRlc2lnbmFibGUoKSBjb25zdDsKCiAgICBjb25z
dCBjaGFyKiB0OwogICAgY29uc3QgY2hhciogbjsKICAgIFFNZW1iZXIgCWdldDsJCQkJIAogICAg
UU1lbWJlciAJc2V0OwkJCQkgCiAgICBRTWVtYmVyIAlzdG9yZTsJCQkJIAogICAgUU1lbWJlciAg
ICAgcmVzZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICBRTWV0YUVudW0JKmVudW1E
YXRhOyAJCQkgCgogICAgZW51bSBTcGVjaWZpY2F0aW9uICB7IFVuc3BlY2lmaWVkLCBDbGFzcywg
UmVmZXJlbmNlLCBQb2ludGVyLCBDb25zdENoYXJTdGFyIH07CiAgICBTcGVjaWZpY2F0aW9uIGdz
cGVjOwkJCSAKICAgIFNwZWNpZmljYXRpb24gc3NwZWM7CQkJIAoKICAgIGVudW0gRmxhZ3MgIHsK
CVVucmVzb2x2ZWRFbnVtICAgICAgID0gMHgwMDAwMDAwMSwKCVVucmVzb2x2ZWRTZXQgICAgICAg
ID0gMHgwMDAwMDAwMiwKCVVucmVzb2x2ZWRFbnVtT3JTZXQgID0gMHgwMDAwMDAwNCwKCVVucmVz
b2x2ZWRTdG9yZWQgICAgID0gMHgwMDAwMDAwOCwKCVVucmVzb2x2ZWREZXNpZ25hYmxlID0gMHgw
MDAwMDAxMCwKCU5vdERlc2lnbmFibGUgICAgICAgID0gMHgwMDAwMDAyMCwKCU5vdFN0b3JlZCAg
ICAgICAgICAgID0gMHgwMDAwMDA0MCwKCVN0ZFNldCAJICAgICAgICAgICAgID0gMHgwMDAwMDA4
MCAKICAgIH07CgogICAgYm9vbCB0ZXN0RmxhZ3MoIHVpbnQgZiApIGNvbnN0OwogICAgdm9pZCBz
ZXRGbGFncyggdWludCBmICk7CiAgICB2b2lkIGNsZWFyRmxhZ3MoIHVpbnQgZiApOwoKcHJpdmF0
ZToKICAgIHVpbnQgZmxhZ3M7Cn07CgoKc3RydWN0IFFDbGFzc0luZm8gCQkJCSAKewogICAgY29u
c3QgY2hhciogbmFtZTsJCQkJIAogICAgY29uc3QgY2hhciogdmFsdWU7CQkJCSAKfTsKCmNsYXNz
IFFNZXRhT2JqZWN0UHJpdmF0ZTsKCmNsYXNzICAgUU1ldGFPYmplY3QJCQkgCnsKcHVibGljOgog
ICAgUU1ldGFPYmplY3QoIGNvbnN0IGNoYXIgKmNsYXNzX25hbWUsIGNvbnN0IGNoYXIgKnN1cGVy
Y2xhc3NfbmFtZSwKCQkgUU1ldGFEYXRhICpzbG90X2RhdGEsCWludCBuX3Nsb3RzLAoJCSBRTWV0
YURhdGEgKnNpZ25hbF9kYXRhLCBpbnQgbl9zaWduYWxzICk7CiAgICBRTWV0YU9iamVjdCggY29u
c3QgY2hhciAqY2xhc3NfbmFtZSwgY29uc3QgY2hhciAqc3VwZXJjbGFzc19uYW1lLAoJCSBRTWV0
YURhdGEgKnNsb3RfZGF0YSwJaW50IG5fc2xvdHMsCgkJIFFNZXRhRGF0YSAqc2lnbmFsX2RhdGEs
IGludCBuX3NpZ25hbHMsCgoJCSBRTWV0YVByb3BlcnR5ICpwcm9wX2RhdGEsIGludCBuX3Byb3Bz
LAoJCSBRTWV0YUVudW0gKmVudW1fZGF0YSwgaW50IG5fZW51bXMsCgoJCSBRQ2xhc3NJbmZvICpj
bGFzc19pbmZvLCBpbnQgbl9pbmZvICk7CgoKICAgIHZpcnR1YWwgflFNZXRhT2JqZWN0KCk7Cgog
ICAgY29uc3QgY2hhcgkqY2xhc3NOYW1lKCkJCWNvbnN0IHsgcmV0dXJuIGNsYXNzbmFtZTsgfQog
ICAgY29uc3QgY2hhcgkqc3VwZXJDbGFzc05hbWUoKQljb25zdCB7IHJldHVybiBzdXBlcmNsYXNz
bmFtZTsgfQoKICAgIFFNZXRhT2JqZWN0ICpzdXBlckNsYXNzKCkJCWNvbnN0IHsgcmV0dXJuIHN1
cGVyY2xhc3M7IH0KCiAgICBib29sIAlpbmhlcml0cyggY29uc3QgY2hhciogY2xuYW1lICkgY29u
c3Q7CgogICAgaW50ICAJbnVtU2xvdHMoIGJvb2wgc3VwZXIgPSAwICApIGNvbnN0OwogICAgaW50
CQludW1TaWduYWxzKCBib29sIHN1cGVyID0gMCAgKSBjb25zdDsKCiAgICBRTWV0YURhdGEJKnNs
b3QoIGludCBpbmRleCwgYm9vbCBzdXBlciA9IDAgICkgY29uc3Q7CiAgICBRTWV0YURhdGEJKnNp
Z25hbCggaW50IGluZGV4LCBib29sIHN1cGVyID0gMCAgKSBjb25zdDsKCiAgICBRTWV0YURhdGEJ
KnNsb3QoIGNvbnN0IGNoYXIgKiwgYm9vbCBzdXBlciA9IDAgICkgY29uc3Q7CiAgICBRTWV0YURh
dGEJKnNpZ25hbCggY29uc3QgY2hhciAqLCBib29sIHN1cGVyID0gMCAgKSBjb25zdDsKCiAgICBR
U3RyTGlzdAlzbG90TmFtZXMoIGJvb2wgc3VwZXIgPSAwICApIGNvbnN0OwogICAgUVN0ckxpc3QJ
c2lnbmFsTmFtZXMoIGJvb2wgc3VwZXIgPSAwICApIGNvbnN0OwoKICAgIGludAkJbnVtQ2xhc3NJ
bmZvKCBib29sIHN1cGVyID0gMCAgKSBjb25zdDsKICAgIFFDbGFzc0luZm8gCSpjbGFzc0luZm8o
IGludCBpbmRleCwgYm9vbCBzdXBlciA9IDAgICkgY29uc3Q7CiAgICBjb25zdCBjaGFyIAkqY2xh
c3NJbmZvKCBjb25zdCBjaGFyKiBuYW1lLCBib29sIHN1cGVyID0gMCAgKSBjb25zdDsKCgogICAg
Y29uc3QgUU1ldGFQcm9wZXJ0eQkqcHJvcGVydHkoIGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgc3Vw
ZXIgPSAwICApIGNvbnN0OwogICAgUVN0ckxpc3QJCXByb3BlcnR5TmFtZXMoIGJvb2wgc3VwZXIg
PSAwICApIGNvbnN0OwogICAgdm9pZAkJcmVzb2x2ZVByb3BlcnR5KCBRTWV0YVByb3BlcnR5KiBw
cm9wICk7CgoKICAgICAKICAgICAKICAgICAKICAgIHN0YXRpYyBRTWV0YU9iamVjdAkqbmV3X21l
dGFvYmplY3QoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAoJCQkJCVFNZXRhRGF0YSAqLCBp
bnQsCgkJCQkJUU1ldGFEYXRhICosIGludCwKCgkJCQkJUU1ldGFQcm9wZXJ0eSAqcHJvcF9kYXRh
LCBpbnQgbl9wcm9wcywKCQkJCQlRTWV0YUVudW0gKmVudW1fZGF0YSwgaW50IG5fZW51bXMsCgoJ
CQkJCVFDbGFzc0luZm8gKiBjbGFzc19pbmZvLCBpbnQgbl9pbmZvICk7CiAgICBzdGF0aWMgUU1l
dGFPYmplY3QJKm5ld19tZXRhb2JqZWN0KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKCQkJ
CQlRTWV0YURhdGEgKiwgaW50LAoJCQkJCVFNZXRhRGF0YSAqLCBpbnQgKTsKICAgIHN0YXRpYyBR
TWV0YURhdGEJCSpuZXdfbWV0YWRhdGEoIGludCApOwogICAgc3RhdGljIFFNZXRhRGF0YTo6QWNj
ZXNzCQkqbmV3X21ldGFhY2Nlc3MoIGludCApOyAgCiAgICB2b2lkIHNldF9zbG90X2FjY2Vzcygg
UU1ldGFEYXRhOjpBY2Nlc3MqICk7IAkJIAogICAgUU1ldGFEYXRhOjpBY2Nlc3Mgc2xvdF9hY2Nl
c3MoaW50IGluZGV4LCBib29sIHN1cGVyID0gMCAgKTsgIAogICAgc3RhdGljIFFNZXRhRW51bSAJ
CSpuZXdfbWV0YWVudW0oIGludCApOwogICAgc3RhdGljIFFNZXRhRW51bTo6SXRlbSAJKm5ld19t
ZXRhZW51bV9pdGVtKCBpbnQgKTsKCiAgICBzdGF0aWMgUU1ldGFQcm9wZXJ0eSAJKm5ld19tZXRh
cHJvcGVydHkoIGludCApOwoKICAgIHN0YXRpYyBRQ2xhc3NJbmZvIAkJKm5ld19jbGFzc2luZm8o
IGludCApOwoKcHJpdmF0ZToKICAgIFFNZW1iZXJEaWN0CQkqaW5pdCggUU1ldGFEYXRhICosIGlu
dCApOwogICAgUU1ldGFEYXRhCQkqbWRhdGEoIGludCBjb2RlLCBjb25zdCBjaGFyICosIGJvb2wg
KSBjb25zdDsKICAgIFFNZXRhRGF0YQkJKm1kYXRhKCBpbnQgY29kZSwgaW50IGluZGV4LCBib29s
IHN1cGVyICkgY29uc3Q7CgogICAgY29uc3QgY2hhcgkJKmNsYXNzbmFtZTsJCQkgCiAgICBjb25z
dCBjaGFyCQkqc3VwZXJjbGFzc25hbWU7CQkgCiAgICBRTWV0YU9iamVjdCAJKnN1cGVyY2xhc3M7
CQkJIAogICAgUU1ldGFPYmplY3RQcml2YXRlCSpkOwkJCQkgCiAgICB2b2lkICAgICAgICAJKnJl
c2VydmVkOwkJCSAKICAgIFFNZXRhRGF0YQkJKnNsb3REYXRhOwkJCSAKICAgIFFNZW1iZXJEaWN0
IAkqc2xvdERpY3Q7CQkJIAogICAgUU1ldGFEYXRhCQkqc2lnbmFsRGF0YTsJCQkgCiAgICBRTWVt
YmVyRGljdCAJKnNpZ25hbERpY3Q7CQkJIAogICAgUU1ldGFFbnVtCQkqZW51bWVyYXRvciggY29u
c3QgY2hhciogbmFtZSwgYm9vbCBzdXBlciA9IDAgICkgY29uc3Q7Cgpwcml2YXRlOgkgCgogICAg
UU1ldGFPYmplY3QoIGNvbnN0IFFNZXRhT2JqZWN0ICYgKTsKICAgIFFNZXRhT2JqZWN0ICZvcGVy
YXRvcj0oIGNvbnN0IFFNZXRhT2JqZWN0ICYgKTsKCn07CgoKaW5saW5lIGJvb2wgUU1ldGFQcm9w
ZXJ0eTo6d3JpdGFibGUoKSBjb25zdAp7IHJldHVybiBzZXQgIT0gMDsgfQppbmxpbmUgYm9vbCBR
TWV0YVByb3BlcnR5Ojp3cml0ZWFibGUoKSBjb25zdAp7IHJldHVybiBzZXQgIT0gMDsgfQppbmxp
bmUgYm9vbCBRTWV0YVByb3BlcnR5Ojp0ZXN0RmxhZ3MoIHVpbnQgZiApIGNvbnN0CnsgcmV0dXJu
IChmbGFncyAmICh1aW50KWYpICE9ICh1aW50KTA7IH0KaW5saW5lIGJvb2wgUU1ldGFQcm9wZXJ0
eTo6aXNWYWxpZCgpIGNvbnN0CnsgcmV0dXJuIGdldCAhPSAwICYmICF0ZXN0RmxhZ3MoIFVucmVz
b2x2ZWRFbnVtIHwgVW5yZXNvbHZlZERlc2lnbmFibGUgfCBVbnJlc29sdmVkU3RvcmVkICkgOyB9
CmlubGluZSBib29sIFFNZXRhUHJvcGVydHk6OmlzU2V0VHlwZSgpIGNvbnN0CnsgcmV0dXJuICgg
ZW51bURhdGEgIT0gMCAmJiBlbnVtRGF0YS0+c2V0ICk7IH0KaW5saW5lIGJvb2wgUU1ldGFQcm9w
ZXJ0eTo6aXNFbnVtVHlwZSgpIGNvbnN0CnsgcmV0dXJuICggZW51bURhdGEgIT0gMCApOyB9Cmlu
bGluZSBib29sIFFNZXRhUHJvcGVydHk6OmRlc2lnbmFibGUoKSBjb25zdAp7IHJldHVybiAoIGlz
VmFsaWQoKSAmJiBzZXQgIT0gMCAmJiAhdGVzdEZsYWdzKCBOb3REZXNpZ25hYmxlIHwgVW5yZXNv
bHZlZERlc2lnbmFibGUgKSApOyB9CmlubGluZSB2b2lkIFFNZXRhUHJvcGVydHk6OnNldEZsYWdz
KCB1aW50IGYgKQp7IGZsYWdzIHw9ICh1aW50KWY7IH0KaW5saW5lIHZvaWQgUU1ldGFQcm9wZXJ0
eTo6Y2xlYXJGbGFncyggdWludCBmICkKeyBmbGFncyAmPSB+KHVpbnQpZjsgfQoKCiAKY2xhc3Mg
ICBRTWV0YU9iamVjdEluaXQgewpwdWJsaWM6CiAgICBRTWV0YU9iamVjdEluaXQodm9pZCgqKSgp
KTsKICAgIHN0YXRpYyBpbnQgaW5pdCgpOwp9OwoKCiMgMTggImtlcm5lbC9tb2NfcW5ldHdvcmtw
cm90b2NvbC5jcHAiIDIKCiMgMSAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dv
cmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xYXBwbGljYXRpb24uaCIgMQogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9hbWQvc2lnbWEvMC9zcmMvYWxwaGEtZGVj
LW9zZjQuMC93b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcXdpZGdldC5oIiAxCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvYW1kL3NpZ21hLzAvc3JjL2Fs
cGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3FwYWludGRldmljZS5oIiAx
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmNsYXNz
IFFJT0RldmljZTsKY2xhc3MgUVN0cmluZzsKCgoKc3RydWN0IFFQYWludERldmljZVgxMURhdGE7
CgoKdW5pb24gUVBEZXZDbWRQYXJhbSB7CiAgICBpbnQJCQkgaXZhbDsKICAgIGludAkJCSppdmVj
OwogICAgUVN0cmluZwkgICAgICAgICpzdHI7CiAgICBjb25zdCBRUG9pbnQJKnBvaW50OwogICAg
Y29uc3QgUVJlY3QJCSpyZWN0OwogICAgY29uc3QgUVBvaW50QXJyYXkJKnB0YXJyOwogICAgY29u
c3QgUVBpeG1hcAkqcGl4bWFwOwogICAgY29uc3QgUUltYWdlCSppbWFnZTsKICAgIGNvbnN0IFFD
b2xvcgkqY29sb3I7CiAgICBjb25zdCBRRm9udAkJKmZvbnQ7CiAgICBjb25zdCBRUGVuCQkqcGVu
OwogICAgY29uc3QgUUJydXNoCSpicnVzaDsKICAgIGNvbnN0IFFSZWdpb24JKnJnbjsKICAgIGNv
bnN0IFFXTWF0cml4CSptYXRyaXg7CiAgICBRSU9EZXZpY2UJCSpkZXZpY2U7Cn07CgoKCmNsYXNz
ICAgUVBhaW50RGV2aWNlCQkJCSAKewpwdWJsaWM6CiAgICB2aXJ0dWFsIH5RUGFpbnREZXZpY2Uo
KTsKCiAgICBpbnQJCWRldlR5cGUoKSBjb25zdDsKICAgIGJvb2wJaXNFeHREZXYoKSBjb25zdDsK
ICAgIGJvb2wJcGFpbnRpbmdBY3RpdmUoKSBjb25zdDsKCiAgICAgCiAgICAgCgoKCiAgICBIQU5E
TEUJaGFuZGxlKCkgY29uc3Q7CgoKCgoKCgogICAgRGlzcGxheSAJICAgKngxMURpc3BsYXkoKSBj
b25zdDsKICAgIGludAkJICAgIHgxMVNjcmVlbigpIGNvbnN0OwogICAgaW50CQkgICAgeDExRGVw
dGgoKSBjb25zdDsKICAgIGludAkJICAgIHgxMUNlbGxzKCkgY29uc3Q7CiAgICBIQU5ETEUJICAg
IHgxMUNvbG9ybWFwKCkgY29uc3Q7CiAgICBib29sCSAgICB4MTFEZWZhdWx0Q29sb3JtYXAoKSBj
b25zdDsKICAgIHZvaWQJICAgKngxMVZpc3VhbCgpIGNvbnN0OwogICAgYm9vbAkgICAgeDExRGVm
YXVsdFZpc3VhbCgpIGNvbnN0OwoKICAgIHN0YXRpYyBEaXNwbGF5ICp4MTFBcHBEaXNwbGF5KCk7
CiAgICBzdGF0aWMgaW50CSAgICB4MTFBcHBTY3JlZW4oKTsKICAgIHN0YXRpYyBpbnQJICAgIHgx
MUFwcERlcHRoKCk7CiAgICBzdGF0aWMgaW50CSAgICB4MTFBcHBDZWxscygpOwogICAgc3RhdGlj
IGludAkgICAgeDExQXBwRHBpWCgpOwogICAgc3RhdGljIGludAkgICAgeDExQXBwRHBpWSgpOwog
ICAgc3RhdGljIEhBTkRMRSAgIHgxMUFwcENvbG9ybWFwKCk7CiAgICBzdGF0aWMgYm9vbCAgICAg
eDExQXBwRGVmYXVsdENvbG9ybWFwKCk7CiAgICBzdGF0aWMgdm9pZCAgICAqeDExQXBwVmlzdWFs
KCk7CiAgICBzdGF0aWMgYm9vbAkgICAgeDExQXBwRGVmYXVsdFZpc3VhbCgpOwogICAgc3RhdGlj
IHZvaWQJICAgIHgxMVNldEFwcERwaVgoaW50KTsKICAgIHN0YXRpYyB2b2lkCSAgICB4MTFTZXRB
cHBEcGlZKGludCk7CgoKCgoKCgoKCiAgICBlbnVtIFBEZXZDbWQgewoJUGRjTk9QID0gMCwgIAoJ
UGRjRHJhd1BvaW50ID0gMSwgIAoJUGRjRHJhd0ZpcnN0ID0gUGRjRHJhd1BvaW50LAoJUGRjTW92
ZVRvID0gMiwgIAoJUGRjTGluZVRvID0gMywgIAoJUGRjRHJhd0xpbmUgPSA0LCAgCglQZGNEcmF3
UmVjdCA9IDUsICAKCVBkY0RyYXdSb3VuZFJlY3QgPSA2LCAgCglQZGNEcmF3RWxsaXBzZSA9IDcs
ICAKCVBkY0RyYXdBcmMgPSA4LCAgCglQZGNEcmF3UGllID0gOSwgIAoJUGRjRHJhd0Nob3JkID0g
MTAsICAKCVBkY0RyYXdMaW5lU2VnbWVudHMgPSAxMSwgIAoJUGRjRHJhd1BvbHlsaW5lID0gMTIs
ICAKCVBkY0RyYXdQb2x5Z29uID0gMTMsICAKCVBkY0RyYXdRdWFkQmV6aWVyID0gMTQsICAKCVBk
Y0RyYXdUZXh0ID0gMTUsICAKCVBkY0RyYXdUZXh0Rm9ybWF0dGVkID0gMTYsICAKCVBkY0RyYXdQ
aXhtYXAgPSAxNywgIAoJUGRjRHJhd0ltYWdlID0gMTgsICAKCVBkY0RyYXdUZXh0MiA9IDE5LCAg
CglQZGNEcmF3VGV4dDJGb3JtYXR0ZWQgPSAyMCwgIAoJUGRjRHJhd0xhc3QgPSBQZGNEcmF3VGV4
dDJGb3JtYXR0ZWQsCgoJIAoKCVBkY0JlZ2luID0gMzAsICAKCVBkY0VuZCA9IDMxLCAgCglQZGNT
YXZlID0gMzIsICAKCVBkY1Jlc3RvcmUgPSAzMywgIAoJUGRjU2V0ZGV2ID0gMzQsICAKCVBkY1Nl
dEJrQ29sb3IgPSA0MCwgIAoJUGRjU2V0QmtNb2RlID0gNDEsICAKCVBkY1NldFJPUCA9IDQyLCAg
CglQZGNTZXRCcnVzaE9yaWdpbiA9IDQzLCAgCglQZGNTZXRGb250ID0gNDUsICAKCVBkY1NldFBl
biA9IDQ2LCAgCglQZGNTZXRCcnVzaCA9IDQ3LCAgCglQZGNTZXRUYWJTdG9wcyA9IDQ4LCAgCglQ
ZGNTZXRUYWJBcnJheSA9IDQ5LCAgCglQZGNTZXRVbml0ID0gNTAsICAKCVBkY1NldFZYZm9ybSA9
IDUxLCAgCglQZGNTZXRXaW5kb3cgPSA1MiwgIAoJUGRjU2V0Vmlld3BvcnQgPSA1MywgIAoJUGRj
U2V0V1hmb3JtID0gNTQsICAKCVBkY1NldFdNYXRyaXggPSA1NSwgIAoJUGRjU2F2ZVdNYXRyaXgg
PSA1NiwKCVBkY1Jlc3RvcmVXTWF0cml4ID0gNTcsCglQZGNTZXRDbGlwID0gNjAsICAKCVBkY1Nl
dENsaXBSZWdpb24gPSA2MSwgIAoKCVBkY1Jlc2VydmVkU3RhcnQgPSAwLCAgCglQZGNSZXNlcnZl
ZFN0b3AgPSAxOTkgIAogICAgfTsKCnByb3RlY3RlZDoKICAgIFFQYWludERldmljZSggdWludCBk
ZXZmbGFncyApOwoKCgoKICAgIEhBTkRMRQloZDsJCQkJIAogICAgdm9pZAkJIGNvcHlYMTFEYXRh
KCBjb25zdCBRUGFpbnREZXZpY2UgKiApOwogICAgdmlydHVhbCB2b2lkCSBzZXRYMTFEYXRhKCBj
b25zdCBRUGFpbnREZXZpY2VYMTFEYXRhKiApOwogICAgUVBhaW50RGV2aWNlWDExRGF0YSogZ2V0
WDExRGF0YSggYm9vbCBkZWY9IDAgICkgY29uc3Q7CgoKCgoKCgogICAgdmlydHVhbCBib29sIGNt
ZCggaW50LCBRUGFpbnRlciAqLCBRUERldkNtZFBhcmFtICogKTsKICAgIHZpcnR1YWwgaW50CSBt
ZXRyaWMoIGludCApIGNvbnN0OwogICAgdmlydHVhbCBpbnQJIGZvbnRNZXQoIFFGb250ICosIGlu
dCwgY29uc3QgY2hhciAqID0gMCwgaW50ID0gMCApIGNvbnN0OwogICAgdmlydHVhbCBpbnQJIGZv
bnRJbmYoIFFGb250ICosIGludCApIGNvbnN0OwoKICAgIHVzaG9ydAlkZXZGbGFnczsJCQkgCiAg
ICB1c2hvcnQJcGFpbnRlcnM7CQkJIAoKICAgIGZyaWVuZCBjbGFzcyBRUGFpbnRlcjsKICAgIGZy
aWVuZCBjbGFzcyBRUGFpbnREZXZpY2VNZXRyaWNzOwogICAgZnJpZW5kICAgdm9pZCBiaXRCbHQo
IFFQYWludERldmljZSAqLCBpbnQsIGludCwKCQkJCSBjb25zdCBRUGFpbnREZXZpY2UgKiwKCQkJ
CSBpbnQsIGludCwgaW50LCBpbnQsIFF0OjpSYXN0ZXJPcCwgYm9vbCApOwoKICAgIGZyaWVuZCB2
b2lkIHF0X2luaXRfaW50ZXJuYWwoIGludCAqLCBjaGFyICoqLCBEaXNwbGF5ICogKTsKCgpwcml2
YXRlOgoKICAgIHN0YXRpYyBEaXNwbGF5ICp4X2FwcGRpc3BsYXk7CiAgICBzdGF0aWMgaW50CSAg
ICB4X2FwcHNjcmVlbjsKICAgIHN0YXRpYyBpbnQJICAgIHhfYXBwZGVwdGg7CiAgICBzdGF0aWMg
aW50CSAgICB4X2FwcGNlbGxzOwogICAgc3RhdGljIEhBTkRMRSAgIHhfYXBwY29sb3JtYXA7CiAg
ICBzdGF0aWMgYm9vbAkgICAgeF9hcHBkZWZjb2xvcm1hcDsKICAgIHN0YXRpYyB2b2lkCSAgICp4
X2FwcHZpc3VhbDsKICAgIHN0YXRpYyBib29sICAgICB4X2FwcGRlZnZpc3VhbDsKCiAgICBRUGFp
bnREZXZpY2VYMTFEYXRhKiB4MTFEYXRhOwoKCnByaXZhdGU6CSAKCiAgICBRUGFpbnREZXZpY2Uo
IGNvbnN0IFFQYWludERldmljZSAmICk7CiAgICBRUGFpbnREZXZpY2UgJm9wZXJhdG9yPSggY29u
c3QgUVBhaW50RGV2aWNlICYgKTsKCn07CgoKIAp2b2lkIGJpdEJsdCggUVBhaW50RGV2aWNlICpk
c3QsIGludCBkeCwgaW50IGR5LAoJICAgICBjb25zdCBRUGFpbnREZXZpY2UgKnNyYywgaW50IHN4
PTAsIGludCBzeT0wLCBpbnQgc3c9LTEsIGludCBzaD0tMSwKCSAgICAgUXQ6OlJhc3Rlck9wID0g
UXQ6OkNvcHlST1AsIGJvb2wgaWdub3JlTWFzaz0gMCAgKTsKCiAKdm9pZCBiaXRCbHQoIFFQYWlu
dERldmljZSAqZHN0LCBpbnQgZHgsIGludCBkeSwKCSAgICAgY29uc3QgUUltYWdlICpzcmMsIGlu
dCBzeD0wLCBpbnQgc3k9MCwgaW50IHN3PS0xLCBpbnQgc2g9LTEsCgkgICAgIGludCBjb252ZXJz
aW9uX2ZsYWdzPTAgKTsKCgoKCnN0cnVjdCAgIFFQYWludERldmljZVgxMURhdGEgewogICAgRGlz
cGxheSoJeF9kaXNwbGF5OwogICAgaW50CQl4X3NjcmVlbjsKICAgIGludAkJeF9kZXB0aDsKICAg
IGludAkJeF9jZWxsczsKICAgIEhBTkRMRQl4X2NvbG9ybWFwOwogICAgYm9vbAl4X2RlZmNvbG9y
bWFwOwogICAgdm9pZCoJeF92aXN1YWw7CiAgICBib29sCXhfZGVmdmlzdWFsOwp9OwoKCgogCgoK
CmlubGluZSBpbnQgUVBhaW50RGV2aWNlOjpkZXZUeXBlKCkgY29uc3QKeyByZXR1cm4gZGV2Rmxh
Z3MgJiBRSW50ZXJuYWw6OkRldmljZVR5cGVNYXNrOyB9CgppbmxpbmUgYm9vbCBRUGFpbnREZXZp
Y2U6OmlzRXh0RGV2KCkgY29uc3QKeyByZXR1cm4gKGRldkZsYWdzICYgUUludGVybmFsOjpFeHRl
cm5hbERldmljZSkgIT0gMDsgfQoKaW5saW5lIGJvb2wgUVBhaW50RGV2aWNlOjpwYWludGluZ0Fj
dGl2ZSgpIGNvbnN0CnsgcmV0dXJuIHBhaW50ZXJzICE9IDA7IH0KCgoKCmlubGluZSBIQU5ETEUg
UVBhaW50RGV2aWNlOjpoYW5kbGUoKSBjb25zdCB7IHJldHVybiBoZDsgfQoKCgppbmxpbmUgRGlz
cGxheSAqUVBhaW50RGV2aWNlOjp4MTFEaXNwbGF5KCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/
IHgxMURhdGEtPnhfZGlzcGxheSA6IHhfYXBwZGlzcGxheTsgfQoKaW5saW5lIGludCBRUGFpbnRE
ZXZpY2U6OngxMVNjcmVlbigpIGNvbnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X3Nj
cmVlbiA6IHhfYXBwc2NyZWVuOyB9CgppbmxpbmUgaW50IFFQYWludERldmljZTo6eDExRGVwdGgo
KSBjb25zdAp7IHJldHVybiB4MTFEYXRhID8geDExRGF0YS0+eF9kZXB0aCA6IHhfYXBwZGVwdGg7
IH0KCmlubGluZSBpbnQgUVBhaW50RGV2aWNlOjp4MTFDZWxscygpIGNvbnN0CnsgcmV0dXJuIHgx
MURhdGEgPyB4MTFEYXRhLT54X2NlbGxzIDogeF9hcHBjZWxsczsgfQoKaW5saW5lIEhBTkRMRSBR
UGFpbnREZXZpY2U6OngxMUNvbG9ybWFwKCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/IHgxMURh
dGEtPnhfY29sb3JtYXAgOiB4X2FwcGNvbG9ybWFwOyB9CgppbmxpbmUgYm9vbCBRUGFpbnREZXZp
Y2U6OngxMURlZmF1bHRDb2xvcm1hcCgpIGNvbnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRh
LT54X2RlZmNvbG9ybWFwIDogeF9hcHBkZWZjb2xvcm1hcDsgfQoKaW5saW5lIHZvaWQgKlFQYWlu
dERldmljZTo6eDExVmlzdWFsKCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/IHgxMURhdGEtPnhf
dmlzdWFsIDogeF9hcHB2aXN1YWw7IH0KCmlubGluZSBib29sIFFQYWludERldmljZTo6eDExRGVm
YXVsdFZpc3VhbCgpIGNvbnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X2RlZnZpc3Vh
bCA6IHhfYXBwZGVmdmlzdWFsOyB9CgppbmxpbmUgRGlzcGxheSAqUVBhaW50RGV2aWNlOjp4MTFB
cHBEaXNwbGF5KCkKeyByZXR1cm4geF9hcHBkaXNwbGF5OyB9CgppbmxpbmUgaW50IFFQYWludERl
dmljZTo6eDExQXBwU2NyZWVuKCkKeyByZXR1cm4geF9hcHBzY3JlZW47IH0KCmlubGluZSBpbnQg
UVBhaW50RGV2aWNlOjp4MTFBcHBEZXB0aCgpCnsgcmV0dXJuIHhfYXBwZGVwdGg7IH0KCmlubGlu
ZSBpbnQgUVBhaW50RGV2aWNlOjp4MTFBcHBDZWxscygpCnsgcmV0dXJuIHhfYXBwY2VsbHM7IH0K
CmlubGluZSBIQU5ETEUgUVBhaW50RGV2aWNlOjp4MTFBcHBDb2xvcm1hcCgpCnsgcmV0dXJuIHhf
YXBwY29sb3JtYXA7IH0KCmlubGluZSBib29sIFFQYWludERldmljZTo6eDExQXBwRGVmYXVsdENv
bG9ybWFwKCkKeyByZXR1cm4geF9hcHBkZWZjb2xvcm1hcDsgfQoKaW5saW5lIHZvaWQgKlFQYWlu
dERldmljZTo6eDExQXBwVmlzdWFsKCkKeyByZXR1cm4geF9hcHB2aXN1YWw7IH0KCmlubGluZSBi
b29sIFFQYWludERldmljZTo6eDExQXBwRGVmYXVsdFZpc3VhbCgpCnsgcmV0dXJuIHhfYXBwZGVm
dmlzdWFsOyB9CgoKCiAKaW5saW5lIHZvaWQgYml0Qmx0KCBRUGFpbnREZXZpY2UgKmRzdCwgY29u
c3QgUVBvaW50ICZkcCwKCQkgICAgY29uc3QgUVBhaW50RGV2aWNlICpzcmMsIGNvbnN0IFFSZWN0
ICZzciA9UVJlY3QoMCwwLC0xLC0xKSwKCQkgICAgUXQ6OlJhc3Rlck9wIHJvcD1RdDo6Q29weVJP
UCwgYm9vbCBpZ25vcmVNYXNrPSAwICApCnsKICAgIGJpdEJsdCggZHN0LCBkcC54KCksIGRwLnko
KSwgc3JjLCBzci54KCksIHNyLnkoKSwgc3Iud2lkdGgoKSwgc3IuaGVpZ2h0KCksCgkgICAgcm9w
LCBpZ25vcmVNYXNrICk7Cn0KCgoKCgojIDQ0ICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1v
c2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3F3aWRnZXQuaCIgMgoKIyAxICIvYW1kL3Np
Z21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3FwYWxl
dHRlLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAi
L2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVk
ZS9xY29sb3IuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
Cgpjb25zdCBRUmdiICBSR0JfRElSVFkJPSAweDgwMDAwMDAwOwkJIApjb25zdCBRUmdiICBSR0Jf
SU5WQUxJRCA9IDB4NDAwMDAwMDA7CQkgCmNvbnN0IFFSZ2IgIFJHQl9ESVJFQ1QJPSAweDIwMDAw
MDAwOwkJIApjb25zdCBRUmdiICBSR0JfTUFTSwk9IDB4MDBmZmZmZmY7CQkgCgoKICBpbmxpbmUg
aW50IHFSZWQoIFFSZ2IgcmdiICkJCSAKeyByZXR1cm4gKGludCkoKHJnYiA+PiAxNikgJiAweGZm
KTsgfQoKICBpbmxpbmUgaW50IHFHcmVlbiggUVJnYiByZ2IgKQkJIAp7IHJldHVybiAoaW50KSgo
cmdiID4+IDgpICYgMHhmZik7IH0KCiAgaW5saW5lIGludCBxQmx1ZSggUVJnYiByZ2IgKQkJIAp7
IHJldHVybiAoaW50KShyZ2IgJiAweGZmKTsgfQoKICBpbmxpbmUgaW50IHFBbHBoYSggUVJnYiBy
Z2IgKQkJIAp7IHJldHVybiAoaW50KSgocmdiID4+IDI0KSAmIDB4ZmYpOyB9CgogIGlubGluZSBR
UmdiIHFSZ2IoIGludCByLCBpbnQgZywgaW50IGIgKSAKeyByZXR1cm4gKDB4ZmYgPDwgMjQpIHwg
KChyICYgMHhmZikgPDwgMTYpIHwgKChnICYgMHhmZikgPDwgOCkgfCAoYiAmIDB4ZmYpOyB9Cgog
IGlubGluZSBRUmdiIHFSZ2JhKCBpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSApIAp7IHJldHVy
biAoKGEgJiAweGZmKSA8PCAyNCkgfCAoKHIgJiAweGZmKSA8PCAxNikgfCAoKGcgJiAweGZmKSA8
PCA4KSB8IChiICYgMHhmZik7IH0KCiAgaW5saW5lIGludCBxR3JheSggaW50IHIsIGludCBnLCBp
bnQgYiApIAp7IHJldHVybiAocioxMStnKjE2K2IqNSkvMzI7IH0KCiAgaW5saW5lIGludCBxR3Jh
eSggUVJnYiByZ2IgKQkJIAp7IHJldHVybiBxR3JheSggcVJlZChyZ2IpLCBxR3JlZW4ocmdiKSwg
cUJsdWUocmdiKSApOyB9CgoKY2xhc3MgICBRQ29sb3IKewpwdWJsaWM6CiAgICBlbnVtIFNwZWMg
eyBSZ2IsIEhzdiB9OwoKICAgIFFDb2xvcigpOwogICAgUUNvbG9yKCBpbnQgciwgaW50IGcsIGlu
dCBiICk7CiAgICBRQ29sb3IoIGludCB4LCBpbnQgeSwgaW50IHosIFNwZWMgKTsKICAgIFFDb2xv
ciggUVJnYiByZ2IsIHVpbnQgcGl4ZWw9MHhmZmZmZmZmZik7CiAgICBRQ29sb3IoIGNvbnN0IFFT
dHJpbmcmIG5hbWUgKTsKICAgIFFDb2xvciggY29uc3QgY2hhciAqbmFtZSApOwogICAgUUNvbG9y
KCBjb25zdCBRQ29sb3IgJiApOwogICAgUUNvbG9yICZvcGVyYXRvcj0oIGNvbnN0IFFDb2xvciAm
ICk7CgogICAgYm9vbCAgIGlzVmFsaWQoKSBjb25zdDsKICAgIGJvb2wgICBpc0RpcnR5KCkgY29u
c3Q7CgogICAgUVN0cmluZyBuYW1lKCkgY29uc3Q7CiAgICB2b2lkICAgc2V0TmFtZWRDb2xvcigg
Y29uc3QgUVN0cmluZyYgbmFtZSApOwoKICAgIHZvaWQgICByZ2IoIGludCAqciwgaW50ICpnLCBp
bnQgKmIgKSBjb25zdDsKICAgIFFSZ2IgICByZ2IoKSAgICBjb25zdDsKICAgIHZvaWQgICBzZXRS
Z2IoIGludCByLCBpbnQgZywgaW50IGIgKTsKICAgIHZvaWQgICBzZXRSZ2IoIFFSZ2IgcmdiICk7
CgogICAgaW50CSAgIHJlZCgpICAgIGNvbnN0OwogICAgaW50CSAgIGdyZWVuKCkgIGNvbnN0Owog
ICAgaW50CSAgIGJsdWUoKSAgIGNvbnN0OwoKICAgIHZvaWQgICBoc3YoIGludCAqaCwgaW50ICpz
LCBpbnQgKnYgKSBjb25zdDsKICAgIHZvaWQgICBnZXRIc3YoIGludCAmaCwgaW50ICZzLCBpbnQg
JnYgKSBjb25zdDsKICAgIHZvaWQgICBzZXRIc3YoIGludCBoLCBpbnQgcywgaW50IHYgKTsKCiAg
ICBRQ29sb3IgbGlnaHQoIGludCBmID0gMTUwICkgY29uc3Q7CiAgICBRQ29sb3IgZGFyayggaW50
IGYgPSAyMDAgKQljb25zdDsKCiAgICBib29sICAgb3BlcmF0b3I9PSggY29uc3QgUUNvbG9yICZj
ICkgY29uc3Q7CiAgICBib29sICAgb3BlcmF0b3IhPSggY29uc3QgUUNvbG9yICZjICkgY29uc3Q7
CgogICAgc3RhdGljIGJvb2wgbGF6eUFsbG9jKCk7CiAgICBzdGF0aWMgdm9pZCBzZXRMYXp5QWxs
b2MoIGJvb2wgKTsKICAgIHVpbnQgICBhbGxvYygpOwogICAgdWludCAgIHBpeGVsKCkgIGNvbnN0
OwoKICAgIHN0YXRpYyBpbnQgIG1heENvbG9ycygpOwogICAgc3RhdGljIGludCAgbnVtQml0UGxh
bmVzKCk7CgogICAgc3RhdGljIGludCAgZW50ZXJBbGxvY0NvbnRleHQoKTsKICAgIHN0YXRpYyB2
b2lkIGxlYXZlQWxsb2NDb250ZXh0KCk7CiAgICBzdGF0aWMgaW50ICBjdXJyZW50QWxsb2NDb250
ZXh0KCk7CiAgICBzdGF0aWMgdm9pZCBkZXN0cm95QWxsb2NDb250ZXh0KCBpbnQgKTsKCgoKCgoK
ICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKICAgIHN0YXRpYyB2b2lkIGNsZWFudXAoKTsK
CnByaXZhdGU6CiAgICB2b2lkICAgc2V0U3lzdGVtTmFtZWRDb2xvciggY29uc3QgUVN0cmluZyYg
bmFtZSApOwogICAgc3RhdGljIHZvaWQgaW5pdEdsb2JhbENvbG9ycygpOwogICAgc3RhdGljIFFD
b2xvciogZ2xvYmFsQ29sb3JzKCk7CiAgICBzdGF0aWMgYm9vbCBjb2xvcl9pbml0OwogICAgc3Rh
dGljIGJvb2wgZ2xvYmFsc19pbml0OwogICAgc3RhdGljIGJvb2wgbGF6eV9hbGxvYzsKCgoKICAg
IHVpbnQgICBwaXg7CiAgICBRUmdiICAgcmdiVmFsOwp9OwoKCmlubGluZSBRQ29sb3I6OlFDb2xv
cigpCnsgcmdiVmFsID0gUkdCX0lOVkFMSUQ7IHBpeCA9IDA7IH0KCmlubGluZSBRQ29sb3I6OlFD
b2xvciggaW50IHIsIGludCBnLCBpbnQgYiApCnsgc2V0UmdiKCByLCBnLCBiICk7IH0KCmlubGlu
ZSBib29sIFFDb2xvcjo6aXNWYWxpZCgpIGNvbnN0CnsgcmV0dXJuIChyZ2JWYWwgJiBSR0JfSU5W
QUxJRCkgPT0gMDsgfQoKaW5saW5lIGJvb2wgUUNvbG9yOjppc0RpcnR5KCkgY29uc3QKeyByZXR1
cm4gKHJnYlZhbCAmIFJHQl9ESVJUWSkgIT0gMDsgfQoKaW5saW5lIFFSZ2IgUUNvbG9yOjpyZ2Io
KSBjb25zdAp7IHJldHVybiByZ2JWYWwgfCB+UkdCX01BU0s7IH0KCmlubGluZSBpbnQgUUNvbG9y
OjpyZWQoKSBjb25zdAp7IHJldHVybiBxUmVkKHJnYlZhbCk7IH0KCmlubGluZSBpbnQgUUNvbG9y
OjpncmVlbigpIGNvbnN0CnsgcmV0dXJuIHFHcmVlbihyZ2JWYWwpOyB9CgppbmxpbmUgaW50IFFD
b2xvcjo6Ymx1ZSgpIGNvbnN0CnsgcmV0dXJuIHFCbHVlKHJnYlZhbCk7IH0KCmlubGluZSB1aW50
IFFDb2xvcjo6cGl4ZWwoKSBjb25zdAp7IHJldHVybiAocmdiVmFsICYgUkdCX0RJUlRZKSA9PSAw
ID8gcGl4IDogKChRQ29sb3IqKXRoaXMpLT5hbGxvYygpOyB9CgppbmxpbmUgYm9vbCBRQ29sb3I6
OmxhenlBbGxvYygpCnsgcmV0dXJuIGxhenlfYWxsb2M7IH0KCgppbmxpbmUgYm9vbCBRQ29sb3I6
Om9wZXJhdG9yPT0oIGNvbnN0IFFDb2xvciAmYyApIGNvbnN0CnsKICAgIHJldHVybiBpc1ZhbGlk
KCk9PWMuaXNWYWxpZCgpICYmCgkoKCgocmdiVmFsIHwgYy5yZ2JWYWwpICYgUkdCX0RJUkVDVCkg
PT0gMCAmJgoJICAgIChyZ2JWYWwgJiBSR0JfTUFTSykgPT0gKGMucmdiVmFsICYgUkdCX01BU0sp
KSB8fAoJICAgKChyZ2JWYWwgJiBjLnJnYlZhbCAmIFJHQl9ESVJFQ1QpICE9IDAgJiYKCSAgICAo
cmdiVmFsICYgUkdCX01BU0spID09IChjLnJnYlZhbCAmIFJHQl9NQVNLKSAmJiBwaXggPT0gYy5w
aXgpKTsKfQoKaW5saW5lIGJvb2wgUUNvbG9yOjpvcGVyYXRvciE9KCBjb25zdCBRQ29sb3IgJmMg
KSBjb25zdAp7CiAgICByZXR1cm4gIW9wZXJhdG9yPT0oYyk7Cn0KCgogCgoKCgogIFFEYXRhU3Ry
ZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRQ29sb3IgJiApOwogIFFEYXRh
U3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRQ29sb3IgJiApOwoKCgojIDQzICIv
YW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRl
L3FwYWxldHRlLmgiIDIKCgojIDEgIi9hbWQvc2lnbWEvMC9zcmMvYWxwaGEtZGVjLW9zZjQuMC93
b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcWJydXNoLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpjbGFzcyAgIFFCcnVzaDogcHVibGljIFF0CnsKZnJp
ZW5kIGNsYXNzIFFQYWludGVyOwpwdWJsaWM6CiAgICBRQnJ1c2goKTsKICAgIFFCcnVzaCggQnJ1
c2hTdHlsZSApOwogICAgUUJydXNoKCBjb25zdCBRQ29sb3IgJiwgQnJ1c2hTdHlsZT1Tb2xpZFBh
dHRlcm4gKTsKICAgIFFCcnVzaCggY29uc3QgUUNvbG9yICYsIGNvbnN0IFFQaXhtYXAgJiApOwog
ICAgUUJydXNoKCBjb25zdCBRQnJ1c2ggJiApOwogICB+UUJydXNoKCk7CiAgICBRQnJ1c2ggJm9w
ZXJhdG9yPSggY29uc3QgUUJydXNoICYgKTsKCiAgICBCcnVzaFN0eWxlCXN0eWxlKCkJIGNvbnN0
CQl7IHJldHVybiBkYXRhLT5zdHlsZTsgfQogICAgdm9pZAlzZXRTdHlsZSggQnJ1c2hTdHlsZSAp
OwogICAgY29uc3QgUUNvbG9yICZjb2xvcigpY29uc3QJCXsgcmV0dXJuIGRhdGEtPmNvbG9yOyB9
CiAgICB2b2lkCXNldENvbG9yKCBjb25zdCBRQ29sb3IgJiApOwogICAgUVBpeG1hcCAgICAqcGl4
bWFwKCkgY29uc3QJCXsgcmV0dXJuIGRhdGEtPnBpeG1hcDsgfQogICAgdm9pZAlzZXRQaXhtYXAo
IGNvbnN0IFFQaXhtYXAgJiApOwoKICAgIGJvb2wJb3BlcmF0b3I9PSggY29uc3QgUUJydXNoICZw
ICkgY29uc3Q7CiAgICBib29sCW9wZXJhdG9yIT0oIGNvbnN0IFFCcnVzaCAmYiApIGNvbnN0CgkJ
CQkJeyByZXR1cm4gIShvcGVyYXRvcj09KGIpKTsgfQoKcHJpdmF0ZToKICAgIFFCcnVzaAljb3B5
KCkJY29uc3Q7CiAgICB2b2lkCWRldGFjaCgpOwogICAgdm9pZAlpbml0KCBjb25zdCBRQ29sb3Ig
JiwgQnJ1c2hTdHlsZSApOwogICAgc3RydWN0IFFCcnVzaERhdGEgOiBwdWJsaWMgUVNoYXJlZCB7
CSAKCUJydXNoU3R5bGUgc3R5bGU7CglRQ29sb3IJICBjb2xvcjsKCVFQaXhtYXAJICpwaXhtYXA7
CiAgICB9ICpkYXRhOwp9OwoKCiAKCgoKCiAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRh
U3RyZWFtICYsIGNvbnN0IFFCcnVzaCAmICk7CiAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFE
YXRhU3RyZWFtICYsIFFCcnVzaCAmICk7CgoKCiMgNDUgIi9hbWQvc2lnbWEvMC9zcmMvYWxwaGEt
ZGVjLW9zZjQuMC93b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcXBhbGV0dGUuaCIgMgoKCgoKY2xh
c3MgUUNvbG9yR3JvdXBQcml2YXRlOwoKCmNsYXNzICAgUUNvbG9yR3JvdXAKewpwdWJsaWM6CiAg
ICBRQ29sb3JHcm91cCgpOwogICAgUUNvbG9yR3JvdXAoIGNvbnN0IFFDb2xvciAmZm9yZWdyb3Vu
ZCwgY29uc3QgUUNvbG9yICZidXR0b24sCgkJIGNvbnN0IFFDb2xvciAmbGlnaHQsIGNvbnN0IFFD
b2xvciAmZGFyaywgY29uc3QgUUNvbG9yICZtaWQsCgkJIGNvbnN0IFFDb2xvciAmdGV4dCwgY29u
c3QgUUNvbG9yICZiYXNlICk7CiAgICBRQ29sb3JHcm91cCggY29uc3QgUUJydXNoICZmb3JlZ3Jv
dW5kLCBjb25zdCBRQnJ1c2ggJmJ1dHRvbiwKCQkgY29uc3QgUUJydXNoICZsaWdodCwgY29uc3Qg
UUJydXNoICZkYXJrLCBjb25zdCBRQnJ1c2ggJm1pZCwKCQkgY29uc3QgUUJydXNoICZ0ZXh0LCBj
b25zdCBRQnJ1c2ggJmJyaWdodF90ZXh0LAoJCSBjb25zdCBRQnJ1c2ggJmJhc2UsIGNvbnN0IFFC
cnVzaCAmYmFja2dyb3VuZCk7CiAgICBRQ29sb3JHcm91cCggY29uc3QgUUNvbG9yR3JvdXAgJiAp
OwoKICAgflFDb2xvckdyb3VwKCk7CgogICAgUUNvbG9yR3JvdXAmIG9wZXJhdG9yID0oY29uc3Qg
UUNvbG9yR3JvdXAmKTsKCiAgICAgCiAgICBlbnVtIENvbG9yUm9sZSB7IEZvcmVncm91bmQsIEJ1
dHRvbiwgTGlnaHQsIE1pZGxpZ2h0LCBEYXJrLCBNaWQsCiAgICAgICAgICAgICAgICAgICAgIFRl
eHQsIEJyaWdodFRleHQsIEJ1dHRvblRleHQsIEJhc2UsIEJhY2tncm91bmQsIFNoYWRvdywKICAg
ICAgICAgICAgICAgICAgICAgSGlnaGxpZ2h0LCBIaWdobGlnaHRlZFRleHQsCgkJICAgICBOQ29s
b3JSb2xlcyB9OwoKICAgIGNvbnN0IFFDb2xvciAmY29sb3IoIENvbG9yUm9sZSApIGNvbnN0Owog
ICAgY29uc3QgUUJydXNoICZicnVzaCggQ29sb3JSb2xlICkgY29uc3Q7CiAgICB2b2lkIHNldENv
bG9yKCBDb2xvclJvbGUsIGNvbnN0IFFDb2xvciAmICk7CiAgICB2b2lkIHNldEJydXNoKCBDb2xv
clJvbGUsIGNvbnN0IFFCcnVzaCAmICk7CgogICAgY29uc3QgUUNvbG9yICZmb3JlZ3JvdW5kKCkJ
Y29uc3QJeyByZXR1cm4gYnJbRm9yZWdyb3VuZF0uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9y
ICZidXR0b24oKQljb25zdAl7IHJldHVybiBicltCdXR0b25dLmNvbG9yKCk7IH0KICAgIGNvbnN0
IFFDb2xvciAmbGlnaHQoKQljb25zdAl7IHJldHVybiBicltMaWdodF0uY29sb3IoKTsgfQogICAg
Y29uc3QgUUNvbG9yICZkYXJrKCkJY29uc3QJeyByZXR1cm4gYnJbRGFya10uY29sb3IoKTsgfQog
ICAgY29uc3QgUUNvbG9yICZtaWQoKQkJY29uc3QJeyByZXR1cm4gYnJbTWlkXS5jb2xvcigpOyB9
CiAgICBjb25zdCBRQ29sb3IgJnRleHQoKQljb25zdAl7IHJldHVybiBicltUZXh0XS5jb2xvcigp
OyB9CiAgICBjb25zdCBRQ29sb3IgJmJhc2UoKQljb25zdAl7IHJldHVybiBicltCYXNlXS5jb2xv
cigpOyB9CiAgICBjb25zdCBRQ29sb3IgJmJhY2tncm91bmQoKQljb25zdAl7IHJldHVybiBicltC
YWNrZ3JvdW5kXS5jb2xvcigpOyB9CgogICAgY29uc3QgUUNvbG9yICZtaWRsaWdodCgpCWNvbnN0
CXsgcmV0dXJuIGJyW01pZGxpZ2h0XS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJmJyaWdo
dFRleHQoKQljb25zdAl7IHJldHVybiBicltCcmlnaHRUZXh0XS5jb2xvcigpOyB9CiAgICBjb25z
dCBRQ29sb3IgJmJ1dHRvblRleHQoKQljb25zdAl7IHJldHVybiBicltCdXR0b25UZXh0XS5jb2xv
cigpOyB9CiAgICBjb25zdCBRQ29sb3IgJnNoYWRvdygpCWNvbnN0CXsgcmV0dXJuIGJyW1NoYWRv
d10uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9yICZoaWdobGlnaHQoKQljb25zdAl7IHJldHVy
biBicltIaWdobGlnaHRdLmNvbG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmaGlnaGxpZ2h0ZWRU
ZXh0KCkgY29uc3R7cmV0dXJuIGJyW0hpZ2hsaWdodGVkVGV4dF0uY29sb3IoKTsgfQoKICAgIGJv
b2wJb3BlcmF0b3I9PSggY29uc3QgUUNvbG9yR3JvdXAgJmcgKSBjb25zdDsKICAgIGJvb2wJb3Bl
cmF0b3IhPSggY29uc3QgUUNvbG9yR3JvdXAgJmcgKSBjb25zdAoJeyByZXR1cm4gIShvcGVyYXRv
cj09KGcpKTsgfQoKcHJpdmF0ZToKICAgIFFCcnVzaCAqYnI7CiAgICBRQ29sb3JHcm91cFByaXZh
dGUgKiBkOwoKICAgIGZyaWVuZCBjbGFzcyBRUGFsZXR0ZTsKfTsKCgpjbGFzcyAgIFFQYWxldHRl
CnsKcHVibGljOgogICAgUVBhbGV0dGUoKTsKICAgIFFQYWxldHRlKCBjb25zdCBRQ29sb3IgJmJ1
dHRvbiApOwogICAgUVBhbGV0dGUoIGNvbnN0IFFDb2xvciAmYnV0dG9uLCBjb25zdCBRQ29sb3Ig
JmJhY2tncm91bmQgKTsKICAgIFFQYWxldHRlKCBjb25zdCBRQ29sb3JHcm91cCAmYWN0aXZlLCBj
b25zdCBRQ29sb3JHcm91cCAmZGlzYWJsZWQsCgkgICAgICBjb25zdCBRQ29sb3JHcm91cCAmaW5h
Y3RpdmUgKTsKICAgIFFQYWxldHRlKCBjb25zdCBRUGFsZXR0ZSAmICk7CiAgIH5RUGFsZXR0ZSgp
OwogICAgUVBhbGV0dGUgJm9wZXJhdG9yPSggY29uc3QgUVBhbGV0dGUgJiApOwoKICAgIGVudW0g
Q29sb3JHcm91cCB7IE5vcm1hbCwgRGlzYWJsZWQsIEFjdGl2ZSwgSW5hY3RpdmUsIE5Db2xvckdy
b3VwcyB9OwoKICAgIGNvbnN0IFFDb2xvciAmY29sb3IoIENvbG9yR3JvdXAsIFFDb2xvckdyb3Vw
OjpDb2xvclJvbGUgKSBjb25zdDsKICAgIGNvbnN0IFFCcnVzaCAmYnJ1c2goIENvbG9yR3JvdXAs
IFFDb2xvckdyb3VwOjpDb2xvclJvbGUgKSBjb25zdDsKICAgIHZvaWQgc2V0Q29sb3IoIENvbG9y
R3JvdXAsIFFDb2xvckdyb3VwOjpDb2xvclJvbGUsIGNvbnN0IFFDb2xvciAmICk7CiAgICB2b2lk
IHNldEJydXNoKCBDb2xvckdyb3VwLCBRQ29sb3JHcm91cDo6Q29sb3JSb2xlLCBjb25zdCBRQnJ1
c2ggJiApOwoKICAgIHZvaWQgc2V0Q29sb3IoIFFDb2xvckdyb3VwOjpDb2xvclJvbGUsIGNvbnN0
IFFDb2xvciAmICk7CiAgICB2b2lkIHNldEJydXNoKCBRQ29sb3JHcm91cDo6Q29sb3JSb2xlLCBj
b25zdCBRQnJ1c2ggJiApOwoKICAgIFFQYWxldHRlCWNvcHkoKSBjb25zdDsKCiAgICBjb25zdCBR
Q29sb3JHcm91cCAmYWN0aXZlKCkgY29uc3QgeyByZXR1cm4gZGF0YS0+YWN0aXZlOyB9CiAgICBj
b25zdCBRQ29sb3JHcm91cCAmZGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiBkYXRhLT5kaXNhYmxl
ZDsgfQogICAgY29uc3QgUUNvbG9yR3JvdXAgJmluYWN0aXZlKCkgY29uc3QgeyByZXR1cm4gZGF0
YS0+aW5hY3RpdmU7IH0KICAgIGNvbnN0IFFDb2xvckdyb3VwICZub3JtYWwoKSBjb25zdCB7IHJl
dHVybiBkYXRhLT5ub3JtYWw7IH0gIAoKICAgIHZvaWQJc2V0QWN0aXZlKCBjb25zdCBRQ29sb3JH
cm91cCAmICk7CiAgICB2b2lkCXNldERpc2FibGVkKCBjb25zdCBRQ29sb3JHcm91cCAmICk7CiAg
ICB2b2lkCXNldEluYWN0aXZlKCBjb25zdCBRQ29sb3JHcm91cCAmICk7CiAgICB2b2lkCXNldE5v
cm1hbCggY29uc3QgUUNvbG9yR3JvdXAgJiApOyAgCgogICAgYm9vbAlvcGVyYXRvcj09KCBjb25z
dCBRUGFsZXR0ZSAmcCApIGNvbnN0OwogICAgYm9vbAlvcGVyYXRvciE9KCBjb25zdCBRUGFsZXR0
ZSAmcCApIGNvbnN0CgkJCQkJeyByZXR1cm4gIShvcGVyYXRvcj09KHApKTsgfQogICAgYm9vbAlp
c0NvcHlPZiggY29uc3QgUVBhbGV0dGUgJiApOwoKICAgIGludAkJc2VyaWFsTnVtYmVyKCkgY29u
c3QJeyByZXR1cm4gZGF0YS0+c2VyX25vOyB9Cgpwcml2YXRlOgogICAgdm9pZAlkZXRhY2goKTsK
ICAgIFFCcnVzaCAJJmRpcmVjdEJydXNoKCBDb2xvckdyb3VwLCBRQ29sb3JHcm91cDo6Q29sb3JS
b2xlICkgY29uc3Q7CgogICAgc3RydWN0IFFQYWxEYXRhIDogcHVibGljIFFTaGFyZWQgewoJUUNv
bG9yR3JvdXAgbm9ybWFsOyAgCglRQ29sb3JHcm91cCBkaXNhYmxlZDsKCVFDb2xvckdyb3VwIGFj
dGl2ZTsKCWludAkgICAgc2VyX25vOwoJUUNvbG9yR3JvdXAgaW5hY3RpdmU7CiAgICB9ICpkYXRh
Owp9OwoKCiAKCgoKCiAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNv
bnN0IFFDb2xvckdyb3VwICYgKTsKICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJl
YW0gJiwgUUNvbG9yR3JvdXAgJiApOwoKICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFT
dHJlYW0gJiwgY29uc3QgUVBhbGV0dGUgJiApOwogIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBR
RGF0YVN0cmVhbSAmLCBRUGFsZXR0ZSAmICk7CgoKCgojIDQ1ICIvYW1kL3NpZ21hLzAvc3JjL2Fs
cGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3F3aWRnZXQuaCIgMgoKIyAx
ICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNs
dWRlL3FjdXJzb3IuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiAKCgojIDYyICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rp
ci9xdC0yLjIuMy9pbmNsdWRlL3FjdXJzb3IuaCIKCgoKCnN0cnVjdCBRQ3Vyc29yRGF0YTsKCgpj
bGFzcyAgIFFDdXJzb3IKewpwdWJsaWM6CiAgICBRQ3Vyc29yKCk7CQkJCQkgCiAgICBRQ3Vyc29y
KCBpbnQgc2hhcGUgKTsKICAgIFFDdXJzb3IoIGNvbnN0IFFCaXRtYXAgJmJpdG1hcCwgY29uc3Qg
UUJpdG1hcCAmbWFzaywKCSAgICAgaW50IGhvdFg9LTEsIGludCBob3RZPS0xICk7CiAgICBRQ3Vy
c29yKCBjb25zdCBRUGl4bWFwICZwaXhtYXAsCgkgICAgIGludCBob3RYPS0xLCBpbnQgaG90WT0t
MSApOwogICAgUUN1cnNvciggY29uc3QgUUN1cnNvciAmICk7CiAgIH5RQ3Vyc29yKCk7CiAgICBR
Q3Vyc29yICZvcGVyYXRvcj0oIGNvbnN0IFFDdXJzb3IgJiApOwoKICAgIGludAkJICBzaGFwZSgp
ICAgY29uc3Q7CiAgICB2b2lkCSAgc2V0U2hhcGUoIGludCApOwoKICAgIGNvbnN0IFFCaXRtYXAg
KmJpdG1hcCgpIGNvbnN0OwogICAgY29uc3QgUUJpdG1hcCAqbWFzaygpICAgY29uc3Q7CiAgICBR
UG9pbnQJICBob3RTcG90KCkgY29uc3Q7CgoKCgogICAgSEFORExFCSAgaGFuZGxlKCkgIGNvbnN0
OwoKCgoKCgogICAgc3RhdGljIFFQb2ludCBwb3MoKTsKICAgIHN0YXRpYyB2b2lkCSAgc2V0UG9z
KCBpbnQgeCwgaW50IHkgKTsKICAgIHN0YXRpYyB2b2lkCSAgc2V0UG9zKCBjb25zdCBRUG9pbnQg
JiApOwoKICAgIHN0YXRpYyB2b2lkCSAgaW5pdGlhbGl6ZSgpOwogICAgc3RhdGljIHZvaWQJICBj
bGVhbnVwKCk7Cgpwcml2YXRlOgogICAgdm9pZAkgIHNldEJpdG1hcCggY29uc3QgUUJpdG1hcCAm
Yml0bWFwLCBjb25zdCBRQml0bWFwICZtYXNrLAoJCQkJIGludCBob3RYLCBpbnQgaG90WSApOwog
ICAgdm9pZAkgIHVwZGF0ZSgpIGNvbnN0OwogICAgUUN1cnNvckRhdGEJICpkYXRhOwogICAgUUN1
cnNvcgkgKmZpbmRfY3VyKGludCk7Cn07CgoKCiAKCgoKIAplbnVtIFFDdXJzb3JTaGFwZSB7CiAg
ICBBcnJvd0N1cnNvciwgVXBBcnJvd0N1cnNvciwgQ3Jvc3NDdXJzb3IsIFdhaXRDdXJzb3IsIEli
ZWFtQ3Vyc29yLAogICAgU2l6ZVZlckN1cnNvciwgU2l6ZUhvckN1cnNvciwgU2l6ZUJEaWFnQ3Vy
c29yLCBTaXplRkRpYWdDdXJzb3IsCiAgICBTaXplQWxsQ3Vyc29yLCBCbGFua0N1cnNvciwgU3Bs
aXRWQ3Vyc29yLCBTcGxpdEhDdXJzb3IsIFBvaW50aW5nSGFuZEN1cnNvciwKICAgIEZvcmJpZGRl
bkN1cnNvciwgTGFzdEN1cnNvciA9IEZvcmJpZGRlbkN1cnNvciwgQml0bWFwQ3Vyc29yPTI0IH07
CgoKIAoKCgogIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBR
Q3Vyc29yICYgKTsKICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUUN1
cnNvciAmICk7CgoKCgppbmxpbmUgdm9pZCBRQ3Vyc29yOjpzZXRQb3MoIGNvbnN0IFFQb2ludCAm
cCApCnsKICAgIHNldFBvcyggcC54KCksIHAueSgpICk7Cn0KCgojIDQ2ICIvYW1kL3NpZ21hLzAv
c3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3F3aWRnZXQuaCIg
MgoKIyAxICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIu
My9pbmNsdWRlL3Fmb250LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgpjbGFzcyBRU3RyaW5nTGlzdDsKc3RydWN0IFFGb250RGVmOwpzdHJ1Y3QgUUZv
bnREYXRhOwpjbGFzcyBRRm9udEludGVybmFsOwpjbGFzcyBRUmVuZGVyZWRGb250OwoKCmNsYXNz
ICAgUUZvbnQJCQkJCSAKewpwdWJsaWM6CiAgICBlbnVtIENoYXJTZXQgICB7IElTT184ODU5XzEs
ICBMYXRpbjEgPSBJU09fODg1OV8xLCBBbnlDaGFyU2V0LAoJCSAgICAgSVNPXzg4NTlfMiwgIExh
dGluMiA9IElTT184ODU5XzIsCgkJICAgICBJU09fODg1OV8zLCAgTGF0aW4zID0gSVNPXzg4NTlf
MywKCQkgICAgIElTT184ODU5XzQsICBMYXRpbjQgPSBJU09fODg1OV80LAoJCSAgICAgSVNPXzg4
NTlfNSwKCQkgICAgIElTT184ODU5XzYsCgkJICAgICBJU09fODg1OV83LAoJCSAgICAgSVNPXzg4
NTlfOCwKCQkgICAgIElTT184ODU5XzksICBMYXRpbjUgPSBJU09fODg1OV85LAoJCSAgICAgSVNP
Xzg4NTlfMTAsIExhdGluNiA9IElTT184ODU5XzEwLAoJCSAgICAgSVNPXzg4NTlfMTEsIFRJUzYy
MCA9IElTT184ODU5XzExLAoJCSAgICAgSVNPXzg4NTlfMTIsCgkJICAgICBJU09fODg1OV8xMywg
TGF0aW43ID0gSVNPXzg4NTlfMTMsCgkJICAgICBJU09fODg1OV8xNCwgTGF0aW44ID0gSVNPXzg4
NTlfMTQsCgkJICAgICBJU09fODg1OV8xNSwgTGF0aW45ID0gSVNPXzg4NTlfMTUsCgkJICAgICBL
T0k4UiwKCQkgICAgIFNldF9KYSwgU2V0XzEgPSBTZXRfSmEsCgkJICAgICBTZXRfS28sCgkJICAg
ICBTZXRfVGhfVEgsCgkJICAgICBTZXRfWmgsCgkJICAgICBTZXRfWmhfVFcsCgkJICAgICBTZXRf
TiA9IFNldF9aaF9UVywKCQkgICAgIFVuaWNvZGUsCgkJICAgICAgCgoKCgoKCQkgICAgIFNldF9H
QkssCgkJICAgICBTZXRfQmlnNSwKCgkJICAgICAgCgoKCQkgICAgICAKCQkgICAgIEpJU19YXzAy
MDEgPSAweGEwLAoJCSAgICAgIAoJCSAgICAgSklTX1hfMDIwOCA9IDB4YzAsIEVuYzE2ID0gSklT
X1hfMDIwOCwKCQkgICAgIEtTQ181NjAxLAoJCSAgICAgR0JfMjMxMiwKCQkgICAgIEJpZzUsCgkJ
ICAgICBUU0NJSSwKCQkgICAgIEtPSThVCiAgICB9OwogICAgZW51bSBTdHlsZUhpbnQgeyBIZWx2
ZXRpY2EsIFRpbWVzLCBDb3VyaWVyLCBPbGRFbmdsaXNoLCAgU3lzdGVtLCBBbnlTdHlsZSwKCQkg
ICAgIFNhbnNTZXJpZgk9IEhlbHZldGljYSwKCQkgICAgIFNlcmlmCT0gVGltZXMsCgkJICAgICBU
eXBlV3JpdGVyID0gQ291cmllciwKCQkgICAgIERlY29yYXRpdmUgPSBPbGRFbmdsaXNofTsKICAg
IGVudW0gU3R5bGVTdHJhdGVneSB7IFByZWZlckRlZmF1bHQgPSAweDAwMDEsCgkJCSAgUHJlZmVy
Qml0bWFwID0gMHgwMDAyLAoJCQkgIFByZWZlckRldmljZSA9IDB4MDAwNCwKCQkJICBQcmVmZXJP
dXRsaW5lID0gMHgwMDA4LAoJCQkgIEZvcmNlT3V0bGluZSA9IDB4MDAxMCwKCQkJICBQcmVmZXJN
YXRjaCA9IDB4MDAyMCwKCQkJICBQcmVmZXJRdWFsaXR5ID0gMHgwMDQwIH07CiAgICBlbnVtIFdl
aWdodAkgICB7IExpZ2h0ID0gMjUsIE5vcm1hbCA9IDUwLCBEZW1pQm9sZCA9IDYzLAoJCSAgICAg
Qm9sZCAgPSA3NSwgQmxhY2sJPSA4NyB9OwogICAgUUZvbnQoKTsJCQkJCSAKICAgIFFGb250KCBj
b25zdCBRU3RyaW5nICZmYW1pbHksIGludCBwb2ludFNpemUgPSAxMiwKCSAgIGludCB3ZWlnaHQg
PSBOb3JtYWwsIGJvb2wgaXRhbGljID0gMCAgKTsKICAgIFFGb250KCBjb25zdCBRU3RyaW5nICZm
YW1pbHksIGludCBwb2ludFNpemUsCgkgICBpbnQgd2VpZ2h0LCBib29sIGl0YWxpYywgQ2hhclNl
dCBjaGFyU2V0ICk7CiAgICBRRm9udCggY29uc3QgUUZvbnQgJiApOwogICAgflFGb250KCk7CiAg
ICBRRm9udCAgICAgICZvcGVyYXRvcj0oIGNvbnN0IFFGb250ICYgKTsKCiAgICBRU3RyaW5nCWZh
bWlseSgpCWNvbnN0OwogICAgdm9pZAlzZXRGYW1pbHkoIGNvbnN0IFFTdHJpbmcgJik7CiAgICBp
bnQJCXBvaW50U2l6ZSgpCWNvbnN0OwogICAgZmxvYXQJcG9pbnRTaXplRmxvYXQoKQljb25zdDsK
ICAgIHZvaWQJc2V0UG9pbnRTaXplKCBpbnQgKTsKICAgIHZvaWQJc2V0UG9pbnRTaXplRmxvYXQo
IGZsb2F0ICk7CiAgICBpbnQJCXBpeGVsU2l6ZSgpIGNvbnN0OwogICAgdm9pZAlzZXRQaXhlbFNp
emUoIGludCApOwogICAgdm9pZAlzZXRQaXhlbFNpemVGbG9hdCggZmxvYXQgKTsKICAgIGludAkJ
d2VpZ2h0KCkJY29uc3Q7CiAgICB2b2lkCXNldFdlaWdodCggaW50ICk7CiAgICBib29sCWJvbGQo
KQkJY29uc3Q7CiAgICB2b2lkCXNldEJvbGQoIGJvb2wgKTsKICAgIGJvb2wJaXRhbGljKCkJY29u
c3Q7CiAgICB2b2lkCXNldEl0YWxpYyggYm9vbCApOwogICAgYm9vbAl1bmRlcmxpbmUoKQljb25z
dDsKICAgIHZvaWQJc2V0VW5kZXJsaW5lKCBib29sICk7CiAgICBib29sCXN0cmlrZU91dCgpCWNv
bnN0OwogICAgdm9pZAlzZXRTdHJpa2VPdXQoIGJvb2wgKTsKICAgIGJvb2wJZml4ZWRQaXRjaCgp
CWNvbnN0OwogICAgdm9pZAlzZXRGaXhlZFBpdGNoKCBib29sICk7CiAgICBTdHlsZUhpbnQJc3R5
bGVIaW50KCkJY29uc3Q7CiAgICB2b2lkCXNldFN0eWxlSGludCggU3R5bGVIaW50ICk7CiAgICBT
dHlsZVN0cmF0ZWd5IHN0eWxlU3RyYXRlZ3koKSBjb25zdDsKICAgIHZvaWQJc2V0U3R5bGVIaW50
KCBTdHlsZUhpbnQsIFN0eWxlU3RyYXRlZ3kgKTsKICAgIENoYXJTZXQJY2hhclNldCgpCWNvbnN0
OwogICAgdm9pZAlzZXRDaGFyU2V0KCBDaGFyU2V0ICk7CgogICAgc3RhdGljIENoYXJTZXQgY2hh
clNldEZvckxvY2FsZSgpOwoKICAgIGJvb2wJcmF3TW9kZSgpICAgICAgY29uc3Q7CiAgICB2b2lk
CXNldFJhd01vZGUoIGJvb2wgKTsKCiAgICBib29sCWV4YWN0TWF0Y2goKQljb25zdDsKCiAgICBi
b29sCW9wZXJhdG9yPT0oIGNvbnN0IFFGb250ICYgKSBjb25zdDsKICAgIGJvb2wJb3BlcmF0b3Ih
PSggY29uc3QgUUZvbnQgJiApIGNvbnN0OwogICAgYm9vbAlpc0NvcHlPZiggY29uc3QgUUZvbnQg
JiApIGNvbnN0OwoKCgoKCgogICAgSEFORExFCWhhbmRsZSgpIGNvbnN0OwoKCgoKICAgIHZvaWQJ
c2V0UmF3TmFtZSggY29uc3QgUVN0cmluZyAmICk7CiAgICBRU3RyaW5nCXJhd05hbWUoKSBjb25z
dDsKCiAgICBRU3RyaW5nCWtleSgpIGNvbnN0OwoKICAgIHN0YXRpYyBRU3RyaW5nIGVuY29kaW5n
TmFtZSggQ2hhclNldCApOwoKICAgIHN0YXRpYyBRRm9udCBkZWZhdWx0Rm9udCgpOwogICAgc3Rh
dGljIHZvaWQgc2V0RGVmYXVsdEZvbnQoIGNvbnN0IFFGb250ICYgKTsKCiAgICBzdGF0aWMgUVN0
cmluZyBzdWJzdGl0dXRlKCBjb25zdCBRU3RyaW5nICZmYW1pbHlOYW1lICk7CiAgICBzdGF0aWMg
dm9pZCBpbnNlcnRTdWJzdGl0dXRpb24oIGNvbnN0IFFTdHJpbmcmLCBjb25zdCBRU3RyaW5nICYp
OwogICAgc3RhdGljIHZvaWQgcmVtb3ZlU3Vic3RpdHV0aW9uKCBjb25zdCBRU3RyaW5nICYpOwog
ICAgc3RhdGljIFFTdHJpbmdMaXN0IHN1YnN0aXR1dGlvbnMoKTsKCiAgICBzdGF0aWMgdm9pZCBp
bml0aWFsaXplKCk7CiAgICBzdGF0aWMgdm9pZCBsb2NhbGVfaW5pdCgpOwogICAgc3RhdGljIHZv
aWQgY2xlYW51cCgpOwogICAgc3RhdGljIHZvaWQgY2FjaGVTdGF0aXN0aWNzKCk7CgoKCgoKcHJv
dGVjdGVkOgogICAgYm9vbAlkaXJ0eSgpCQkJY29uc3Q7CgogICAgUVN0cmluZwlkZWZhdWx0RmFt
aWx5KCkJCWNvbnN0OwogICAgUVN0cmluZwlsYXN0UmVzb3J0RmFtaWx5KCkJY29uc3Q7CiAgICBR
U3RyaW5nCWxhc3RSZXNvcnRGb250KCkJY29uc3Q7CiAgICBpbnQJCWRlY2lQb2ludFNpemUoKQkJ
Y29uc3Q7Cgpwcml2YXRlOgogICAgUUZvbnQoIFFGb250RGF0YSAqICk7CiAgICB2b2lkCWluaXQo
KTsKICAgIHZvaWQJZGV0YWNoKCk7CiAgICB2b2lkCWluaXRGb250SW5mbygpIGNvbnN0OwogICAg
dm9pZAlsb2FkKCkgY29uc3Q7CgoKCgoKCgoKICAgIGZyaWVuZCBjbGFzcyBRRm9udEludGVybmFs
OwogICAgZnJpZW5kIGNsYXNzIFFGb250TWV0cmljczsKICAgIGZyaWVuZCBjbGFzcyBRRm9udElu
Zm87CiAgICBmcmllbmQgY2xhc3MgUVBhaW50ZXI7CgogICAgZnJpZW5kICAgUURhdGFTdHJlYW0g
Jm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFGb250ICYgKTsKICAgIGZyaWVuZCAg
IFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRRm9udCAmICk7CgogICAg
UUZvbnREYXRhCSAqZDsJCQkJIAogICAgc3RhdGljIENoYXJTZXQgZGVmYXVsdENoYXJTZXQ7Cn07
CgppbmxpbmUgYm9vbCBRRm9udDo6Ym9sZCgpIGNvbnN0CnsgcmV0dXJuIHdlaWdodCgpID4gTm9y
bWFsOyB9CgppbmxpbmUgdm9pZCBRRm9udDo6c2V0Qm9sZCggYm9vbCBlbmFibGUgKQp7IHNldFdl
aWdodCggZW5hYmxlID8gQm9sZCA6IE5vcm1hbCApOyB9CgoKIAoKCgoKICBRRGF0YVN0cmVhbSAm
b3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUUZvbnQgJiApOwogIFFEYXRhU3RyZWFt
ICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRRm9udCAmICk7CgoKCiMgNDcgIi9hbWQvc2ln
bWEvMC9zcmMvYWxwaGEtZGVjLW9zZjQuMC93b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcXdpZGdl
dC5oIiAyCgojIDEgIi9hbWQvc2lnbWEvMC9zcmMvYWxwaGEtZGVjLW9zZjQuMC93b3JrZGlyL3F0
LTIuMi4zL2luY2x1ZGUvcWZvbnRtZXRyaWNzLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCmNsYXNzIFFUZXh0Q29kZWM7CgoKY2xhc3MgICBRRm9udE1l
dHJpY3MKewpwdWJsaWM6CiAgICBRRm9udE1ldHJpY3MoIGNvbnN0IFFGb250ICYgKTsKICAgIFFG
b250TWV0cmljcyggY29uc3QgUUZvbnRNZXRyaWNzICYgKTsKICAgflFGb250TWV0cmljcygpOwoK
ICAgIFFGb250TWV0cmljcyAmb3BlcmF0b3I9KCBjb25zdCBRRm9udE1ldHJpY3MgJiApOwoKICAg
IGludAkJYXNjZW50KCkJY29uc3Q7CiAgICBpbnQJCWRlc2NlbnQoKQljb25zdDsKICAgIGludAkJ
aGVpZ2h0KCkJY29uc3Q7CiAgICBpbnQJCWxlYWRpbmcoKQljb25zdDsKICAgIGludAkJbGluZVNw
YWNpbmcoKQljb25zdDsKICAgIGludAkJbWluTGVmdEJlYXJpbmcoKSBjb25zdDsKICAgIGludAkJ
bWluUmlnaHRCZWFyaW5nKCkgY29uc3Q7CiAgICBpbnQJCW1heFdpZHRoKCkJY29uc3Q7CgogICAg
Ym9vbAlpbkZvbnQoUUNoYXIpCWNvbnN0OwoKICAgIGludAkJbGVmdEJlYXJpbmcoUUNoYXIpIGNv
bnN0OwogICAgaW50CQlyaWdodEJlYXJpbmcoUUNoYXIpIGNvbnN0OwogICAgaW50CQl3aWR0aCgg
Y29uc3QgUVN0cmluZyAmLCBpbnQgbGVuID0gLTEgKSBjb25zdDsKICAgIGludAkJd2lkdGgoIFFD
aGFyICkgY29uc3Q7CiAgICBpbnQJCXdpZHRoKCBjaGFyIGMgKSBjb25zdCB7IHJldHVybiB3aWR0
aCggKFFDaGFyKSBjICk7IH0KICAgIFFSZWN0CWJvdW5kaW5nUmVjdCggY29uc3QgUVN0cmluZyAm
LCBpbnQgbGVuID0gLTEgKSBjb25zdDsKICAgIFFSZWN0CWJvdW5kaW5nUmVjdCggUUNoYXIgKSBj
b25zdDsKICAgIFFSZWN0CWJvdW5kaW5nUmVjdCggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgs
IGludCBmbGFncywKCQkJICAgICAgY29uc3QgUVN0cmluZyYgc3RyLCBpbnQgbGVuPS0xLCBpbnQg
dGFic3RvcHM9MCwKCQkJICAgICAgaW50ICp0YWJhcnJheT0wLCBjaGFyICoqaW50ZXJuPTAgKSBj
b25zdDsKICAgIFFTaXplCXNpemUoIGludCBmbGFncywKCQkgICAgICBjb25zdCBRU3RyaW5nJiBz
dHIsIGludCBsZW49LTEsIGludCB0YWJzdG9wcz0wLAoJCSAgICAgIGludCAqdGFiYXJyYXk9MCwg
Y2hhciAqKmludGVybj0wICkgY29uc3Q7CgogICAgaW50CQl1bmRlcmxpbmVQb3MoKQljb25zdDsK
ICAgIGludAkJc3RyaWtlT3V0UG9zKCkJY29uc3Q7CiAgICBpbnQJCWxpbmVXaWR0aCgpCWNvbnN0
OwoKcHJpdmF0ZToKICAgIFFGb250TWV0cmljcyggY29uc3QgUVBhaW50ZXIgKiApOwogICAgc3Rh
dGljIHZvaWQgcmVzZXQoIGNvbnN0IFFQYWludGVyICogKTsKICAgIGNvbnN0IFFGb250RGVmICpz
cGVjKCkgY29uc3Q7CgoKCgoKICAgIHZvaWQgICAqZm9udFN0cnVjdCgpIGNvbnN0OwogICAgdm9p
ZCAgICpmb250U2V0KCkgY29uc3Q7CiAgICBjb25zdCBRVGV4dENvZGVjICptYXBwZXIoKSBjb25z
dDsKICAgIGludAkgICAgcHJpbnRlckFkanVzdGVkKGludCkgY29uc3Q7CgoKCgogICAgZnJpZW5k
IGNsYXNzIFFXaWRnZXQ7CiAgICBmcmllbmQgY2xhc3MgUVBhaW50ZXI7CgogICAgUUZvbnRJbnRl
cm5hbCAqZmluOwogICAgUVBhaW50ZXIgICAgICAqcGFpbnRlcjsKICAgIGludAkJICAgZmxhZ3M7
CgogICAgYm9vbCAgICB1bmRlcmxpbmVGbGFnKCkgIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIDB4
MSkgIT0gMDsgfQogICAgYm9vbCAgICBzdHJpa2VPdXRGbGFnKCkgIGNvbnN0IHsgcmV0dXJuIChm
bGFncyAmIDB4MikgIT0gMDsgfQogICAgdm9pZCAgICBzZXRVbmRlcmxpbmVGbGFnKCkJICAgeyBm
bGFncyB8PSAweDE7IH0KICAgIHZvaWQgICAgc2V0U3RyaWtlT3V0RmxhZygpCSAgIHsgZmxhZ3Mg
fD0gMHgyOyB9Cn07CgoKCiMgNDggIi9hbWQvc2lnbWEvMC9zcmMvYWxwaGEtZGVjLW9zZjQuMC93
b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcXdpZGdldC5oIiAyCgojIDEgIi9hbWQvc2lnbWEvMC9z
cmMvYWxwaGEtZGVjLW9zZjQuMC93b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcWZvbnRpbmZvLmgi
IDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmNsYXNzICAg
UUZvbnRJbmZvCnsKcHVibGljOgogICAgUUZvbnRJbmZvKCBjb25zdCBRRm9udCAmICk7CiAgICBR
Rm9udEluZm8oIGNvbnN0IFFGb250SW5mbyAmICk7CiAgIH5RRm9udEluZm8oKTsKCiAgICBRRm9u
dEluZm8JICAgICAgICZvcGVyYXRvcj0oIGNvbnN0IFFGb250SW5mbyAmICk7CgogICAgUVN0cmlu
ZyAgIAkgICAgICAgIGZhbWlseSgpCWNvbnN0OwogICAgaW50CQkJcG9pbnRTaXplKCkJY29uc3Q7
CiAgICBib29sCQlpdGFsaWMoKQljb25zdDsKICAgIGludAkJCXdlaWdodCgpCWNvbnN0OwogICAg
Ym9vbAkJYm9sZCgpCQljb25zdDsKICAgIGJvb2wJCXVuZGVybGluZSgpCWNvbnN0OwogICAgYm9v
bAkJc3RyaWtlT3V0KCkJY29uc3Q7CiAgICBib29sCQlmaXhlZFBpdGNoKCkJY29uc3Q7CiAgICBR
Rm9udDo6U3R5bGVIaW50CXN0eWxlSGludCgpCWNvbnN0OwogICAgUUZvbnQ6OkNoYXJTZXQJY2hh
clNldCgpCWNvbnN0OwogICAgYm9vbAkJcmF3TW9kZSgpCWNvbnN0OwoKICAgIGJvb2wJCWV4YWN0
TWF0Y2goKQljb25zdDsKCgogICAgY29uc3QgUUZvbnQgJmZvbnQoKSBjb25zdDsKCgpwcml2YXRl
OgogICAgUUZvbnRJbmZvKCBjb25zdCBRUGFpbnRlciAqICk7CiAgICBzdGF0aWMgdm9pZCByZXNl
dCggY29uc3QgUVBhaW50ZXIgKiApOwogICAgY29uc3QgUUZvbnREZWYgKnNwZWMoKSBjb25zdDsK
CiAgICBRRm9udEludGVybmFsICpmaW47CiAgICBRUGFpbnRlciAgICAgICpwYWludGVyOwogICAg
aW50CQkgICBmbGFnczsKCiAgICBib29sICAgIHVuZGVybGluZUZsYWcoKSAgY29uc3QgeyByZXR1
cm4gKGZsYWdzICYgMHgxKSAhPSAwOyB9CiAgICBib29sICAgIHN0cmlrZU91dEZsYWcoKSAgY29u
c3QgeyByZXR1cm4gKGZsYWdzICYgMHgyKSAhPSAwOyB9CiAgICBib29sICAgIGV4YWN0TWF0Y2hG
bGFnKCkgY29uc3QgeyByZXR1cm4gKGZsYWdzICYgMHg0KSAhPSAwOyB9CiAgICB2b2lkICAgIHNl
dFVuZGVybGluZUZsYWcoKQkgICB7IGZsYWdzIHw9IDB4MTsgfQogICAgdm9pZCAgICBzZXRTdHJp
a2VPdXRGbGFnKCkJICAgeyBmbGFncyB8PSAweDI7IH0KICAgIHZvaWQgICAgc2V0RXhhY3RNYXRj
aEZsYWcoKQkgICB7IGZsYWdzIHw9IDB4NDsgfQoKICAgIGZyaWVuZCBjbGFzcyBRV2lkZ2V0Owog
ICAgZnJpZW5kIGNsYXNzIFFQYWludGVyOwp9OwoKCmlubGluZSBib29sIFFGb250SW5mbzo6Ym9s
ZCgpIGNvbnN0CnsgcmV0dXJuIHdlaWdodCgpID4gUUZvbnQ6Ok5vcm1hbDsgfQoKCgojIDQ5ICIv
YW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRl
L3F3aWRnZXQuaCIgMgoKIyAxICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29y
a2Rpci9xdC0yLjIuMy9pbmNsdWRlL3FzdHlsZS5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpjbGFzcyBRQnV0dG9uOwpjbGFzcyBRUHVzaEJ1dHRvbjsK
Y2xhc3MgUVNjcm9sbEJhcjsKY2xhc3MgUVRhYkJhcjsKY2xhc3MgUVRhYjsKY2xhc3MgUVBvcHVw
TWVudTsKY2xhc3MgUU1lbnVJdGVtOwpjbGFzcyBRVG9vbEJ1dHRvbjsKCmNsYXNzICAgUVN0eWxl
OiBwdWJsaWMgUU9iamVjdAp7CiAgICBwdWJsaWM6CVFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOwl9CWNvbnN0IGNoYXIgKmNsYXNzTmFt
ZSgpIGNvbnN0OwlzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsJc3RhdGlj
IFFTdHJpbmcgdHIoY29uc3QgY2hhciopOyBzdGF0aWMgUVN0cmluZyB0cihjb25zdCBjaGFyKiwg
Y29uc3QgY2hhciopOyAJcHJvdGVjdGVkOgl2b2lkIGluaXRNZXRhT2JqZWN0KCk7CXByaXZhdGU6
CXN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsgCiAgICBHVUlTdHlsZSBnczsKCnByaXZhdGU6
CiAgICBRU3R5bGUoR1VJU3R5bGUpOwogICAgUVN0eWxlKCk7CiAgICBmcmllbmQgY2xhc3MgUUNv
bW1vblN0eWxlOwoKcHVibGljOgogICAgdmlydHVhbCB+UVN0eWxlKCk7CgoKICAgIG9wZXJhdG9y
IEdVSVN0eWxlKCkgY29uc3QgeyByZXR1cm4gZ3M7IH0KICAgIGludCBvcGVyYXRvcj09KEdVSVN0
eWxlIHMpIGNvbnN0IHsgcmV0dXJuIGdzPT1zOyB9CiAgICBpbnQgb3BlcmF0b3IhPShHVUlTdHls
ZSBzKSBjb25zdCB7IHJldHVybiBncyE9czsgfQoKCiAgICBHVUlTdHlsZSBndWlTdHlsZSgpIGNv
bnN0IHsgcmV0dXJuIGdzOyB9CgogICAgIAoKICAgIHZpcnR1YWwgdm9pZCBwb2xpc2goIFFXaWRn
ZXQqICk7CiAgICB2aXJ0dWFsIHZvaWQgdW5Qb2xpc2goIFFXaWRnZXQqICk7CgogICAgdmlydHVh
bCB2b2lkIHBvbGlzaCggUUFwcGxpY2F0aW9uKik7CiAgICB2aXJ0dWFsIHZvaWQgdW5Qb2xpc2go
IFFBcHBsaWNhdGlvbiopOwoKICAgIHZpcnR1YWwgdm9pZCBwb2xpc2goIFFQYWxldHRlJik7Cgog
ICAgdmlydHVhbCBRUmVjdCBpdGVtUmVjdCggUVBhaW50ZXIgKnAsIGludCB4LCBpbnQgeSwgaW50
IHcsIGludCBoLAoJCSAgICBpbnQgZmxhZ3MsIGJvb2wgZW5hYmxlZCwKCQkgICAgY29uc3QgUVBp
eG1hcCAqcGl4bWFwLAoJCSAgICBjb25zdCBRU3RyaW5nJiB0ZXh0LCBpbnQgbGVuPS0xICk7ICAK
CiAgICB2aXJ0dWFsIHZvaWQgZHJhd0l0ZW0oIFFQYWludGVyICpwLCBpbnQgeCwgaW50IHksIGlu
dCB3LCBpbnQgaCwKCQkgICAgaW50IGZsYWdzLCBjb25zdCBRQ29sb3JHcm91cCAmZywgYm9vbCBl
bmFibGVkLAoJCSAgICBjb25zdCBRUGl4bWFwICpwaXhtYXAsIGNvbnN0IFFTdHJpbmcmIHRleHQs
CgkJCSAgIGludCBsZW49LTEsIGNvbnN0IFFDb2xvciogcGVuQ29sb3IgPSAwICk7CgoKICAgIHZp
cnR1YWwgdm9pZCBkcmF3U2VwYXJhdG9yKCBRUGFpbnRlciAqcCwgaW50IHgxLCBpbnQgeTEsIGlu
dCB4MiwgaW50IHkyLAoJCSAgICAgY29uc3QgUUNvbG9yR3JvdXAgJmcsIGJvb2wgc3Vua2VuID0g
MSAsCgkJICAgICBpbnQgbGluZVdpZHRoID0gMSwgaW50IG1pZExpbmVXaWR0aCA9IDAgKTsKCiAg
ICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoIFFQYWludGVyICpwLCBpbnQgeCwgaW50IHksIGludCB3
LCBpbnQgaCwKCQkgICAgY29uc3QgUUNvbG9yICYsIGludCBsaW5lV2lkdGggPSAxLAoJCSAgICBj
b25zdCBRQnJ1c2ggKmZpbGwgPSAwICk7CgogICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0U3Ryb25n
KCBRUGFpbnRlciAqcCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsCgkJICAgICBjb25zdCBR
Q29sb3JHcm91cCAmLCBib29sIHN1bmtlbj0gMCAsCgkJICAgICBpbnQgbGluZVdpZHRoID0gMSwg
aW50IG1pZExpbmVXaWR0aCA9IDAsCgkJICAgICBjb25zdCBRQnJ1c2ggKmZpbGwgPSAwICk7Cgog
ICAgdmlydHVhbCB2b2lkIGRyYXdCdXR0b24oIFFQYWludGVyICpwLCBpbnQgeCwgaW50IHksIGlu
dCB3LCBpbnQgaCwKCQkgICAgIGNvbnN0IFFDb2xvckdyb3VwICZnLCBib29sIHN1bmtlbiA9IDAg
LAoJCSAgICAgY29uc3QgUUJydXNoICpmaWxsID0gMCApID0gMDsKCiAgICB2aXJ0dWFsIFFSZWN0
IGJ1dHRvblJlY3QoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKTsgIAoKICAgIHZpcnR1YWwg
dm9pZCBkcmF3QnV0dG9uTWFzayggUVBhaW50ZXIgKnAsIGludCB4LCBpbnQgeSwgaW50IHcsIGlu
dCBoKTsKCiAgICB2aXJ0dWFsIHZvaWQgZHJhd0JldmVsQnV0dG9uKCBRUGFpbnRlciAqcCwgaW50
IHgsIGludCB5LCBpbnQgdywgaW50IGgsCgkJICAgICBjb25zdCBRQ29sb3JHcm91cCAmZywgYm9v
bCBzdW5rZW4gPSAwICwKCQkgICAgIGNvbnN0IFFCcnVzaCAqZmlsbCA9IDAgKSA9IDA7CgogICAg
UVJlY3QgYmV2ZWxCdXR0b25SZWN0KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCk7ICAKCiAg
ICB2aXJ0dWFsIHZvaWQgZHJhd1Rvb2xCdXR0b24oIFFQYWludGVyICpwLCBpbnQgeCwgaW50IHks
IGludCB3LCBpbnQgaCwKCQkgICAgIGNvbnN0IFFDb2xvckdyb3VwICZnLCBib29sIHN1bmtlbiA9
IDAgLAoJCSAgICAgY29uc3QgUUJydXNoICpmaWxsID0gMCApOwogICAgdm9pZCBkcmF3VG9vbEJ1
dHRvbiggUVRvb2xCdXR0b24qIGJ0biwgUVBhaW50ZXIgKnApOyAgCgogICAgUVJlY3QgdG9vbEJ1
dHRvblJlY3QoICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCk7ICAKCiAgICB2aXJ0dWFsIHZv
aWQgZHJhd1BhbmVsKCBRUGFpbnRlciAqcCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsCgkJ
ICAgIGNvbnN0IFFDb2xvckdyb3VwICYsIGJvb2wgc3Vua2VuPSAwICwKCQkgICAgaW50IGxpbmVX
aWR0aCA9IDEsIGNvbnN0IFFCcnVzaCAqZmlsbCA9IDAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgZHJh
d1BvcHVwUGFuZWwoIFFQYWludGVyICpwLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKCQkJ
CSBjb25zdCBRQ29sb3JHcm91cCAmLCAgaW50IGxpbmVXaWR0aCA9IDIsCgkJCQkgY29uc3QgUUJy
dXNoICpmaWxsID0gMCApOwoKICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyb3coIFFQYWludGVyICpw
LCBRdDo6QXJyb3dUeXBlIHR5cGUsIGJvb2wgZG93biwKCQkgICAgIGludCB4LCBpbnQgeSwgaW50
IHcsIGludCBoLAoJCSAgICAgY29uc3QgUUNvbG9yR3JvdXAgJmcsIGJvb2wgZW5hYmxlZCwgY29u
c3QgUUJydXNoICpmaWxsID0gMCApID0gMDsKCiAgICAgCiAgICB2aXJ0dWFsIFFTaXplIGV4Y2x1
c2l2ZUluZGljYXRvclNpemUoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZHJhd0V4Y2x1
c2l2ZUluZGljYXRvciggUVBhaW50ZXIqIHAsIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLAoJ
CSAgICBjb25zdCBRQ29sb3JHcm91cCAmZywgYm9vbCBvbiwgYm9vbCBkb3duID0gMCAsIGJvb2wg
ZW5hYmxlZCA9IDEgICkgPSAwOwogICAgdmlydHVhbCB2b2lkIGRyYXdFeGNsdXNpdmVJbmRpY2F0
b3JNYXNrKCBRUGFpbnRlciAqcCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsIGJvb2wgb24p
OwoKICAgICAKICAgIHZpcnR1YWwgUVNpemUgaW5kaWNhdG9yU2l6ZSgpIGNvbnN0ID0gMDsKICAg
IHZpcnR1YWwgdm9pZCBkcmF3SW5kaWNhdG9yKCBRUGFpbnRlciogcCwgaW50IHgsIGludCB5LCBp
bnQgdywgaW50IGgsIGNvbnN0IFFDb2xvckdyb3VwICZnLAoJCQkJaW50IHN0YXRlLCBib29sIGRv
d24gPSAwICwgYm9vbCBlbmFibGVkID0gMSAgKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZHJhd0lu
ZGljYXRvck1hc2soIFFQYWludGVyICpwLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgaW50
IHN0YXRlKTsKCgogICAgIAogICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JlY3QoIFFQYWludGVy
KiwgY29uc3QgUVJlY3QgJiwKCQkJCWNvbnN0IFFDb2xvckdyb3VwICYsIGNvbnN0IFFDb2xvciog
YmcgPSAwLAoJCQkJYm9vbCA9IDAgICkgPSAwOwoKCiAgICAgCgogICAgIAogICAgdmlydHVhbCB2
b2lkIGRyYXdDb21ib0J1dHRvbiggUVBhaW50ZXIgKnAsIGludCB4LCBpbnQgeSwgaW50IHcsIGlu
dCBoLAoJCQkJICBjb25zdCBRQ29sb3JHcm91cCAmZywgYm9vbCBzdW5rZW4gPSAwICwKCQkJCSAg
Ym9vbCBlZGl0YWJsZSA9IDAgLAoJCQkJICBib29sIGVuYWJsZWQgPSAxICwKCQkJCSAgY29uc3Qg
UUJydXNoICpmaWxsID0gMCApID0gMDsKICAgIHZpcnR1YWwgUVJlY3QgY29tYm9CdXR0b25SZWN0
KCBpbnQgeCwgaW50IHksCgkJICAgIGludCB3LCBpbnQgaCkgPSAwOyAgCiAgICB2aXJ0dWFsIFFS
ZWN0IGNvbWJvQnV0dG9uRm9jdXNSZWN0KCBpbnQgeCwgaW50IHksCgkJICAgIGludCB3LCBpbnQg
aCkgPSAwOyAgCgogICAgdmlydHVhbCB2b2lkIGRyYXdDb21ib0J1dHRvbk1hc2soIFFQYWludGVy
ICpwLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkgPSAwOwoKICAgICAKICAgIHZpcnR1YWwg
dm9pZCBkcmF3UHVzaEJ1dHRvbiggUVB1c2hCdXR0b24qIGJ0biwgUVBhaW50ZXIgKnApID0gMDsK
ICAgICAKICAgIHZpcnR1YWwgdm9pZCBkcmF3UHVzaEJ1dHRvbkxhYmVsKCBRUHVzaEJ1dHRvbiog
YnRuLCBRUGFpbnRlciAqcCkgPSAwOwogICAgUVJlY3QgcHVzaEJ1dHRvbkNvbnRlbnRzUmVjdCgg
UVB1c2hCdXR0b24qIGJ0biApOyAgCiAgICBpbnQgbWVudUJ1dHRvbkluZGljYXRvcldpZHRoKCBp
bnQgaCApOyAgCiAgICB2aXJ0dWFsIHZvaWQgZ2V0QnV0dG9uU2hpZnQoIGludCAmeCwgaW50ICZ5
KSA9IDA7ICAKCiAgICAgCiAgICB2aXJ0dWFsIGludCBkZWZhdWx0RnJhbWVXaWR0aCgpIGNvbnN0
ID0gMDsKCiAgICAgCiAgICB2aXJ0dWFsIHZvaWQgdGFiYmFyTWV0cmljcyggY29uc3QgUVRhYkJh
ciosCgkJICAgIGludCYsIGludCYsIGludCYgKSA9IDA7ICAKICAgIHZpcnR1YWwgdm9pZCBkcmF3
VGFiKCBRUGFpbnRlciosIGNvbnN0IFFUYWJCYXIqLCBRVGFiKiwgYm9vbCBzZWxlY3RlZCApID0g
MDsKICAgIHZpcnR1YWwgdm9pZCBkcmF3VGFiTWFzayggUVBhaW50ZXIqLCBjb25zdCBRVGFiQmFy
KiwgUVRhYiosIGJvb2wgc2VsZWN0ZWQgKSA9IDA7CgogICAgIAogICAgZW51bSBTY3JvbGxDb250
cm9sIHsgQWRkTGluZSA9IDB4MSAsIFN1YkxpbmUgID0gMHgyICwgQWRkUGFnZSA9IDB4NCwKCQkJ
IFN1YlBhZ2UgPSAweDggLCBGaXJzdCA9IDB4MTAsIExhc3QgPSAweDIwLAoJCQkgU2xpZGVyICA9
IDB4NDAsIE5vU2Nyb2xsID0gMHg4MCB9OwoKICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCYXJNZXRy
aWNzKCBjb25zdCBRU2Nyb2xsQmFyKiwKCQkgICAgaW50JiwgaW50JiwgaW50JiwgaW50JikgPSAw
OyAgCiAgICB2aXJ0dWFsIHZvaWQgZHJhd1Njcm9sbEJhckNvbnRyb2xzKCBRUGFpbnRlciosICBj
b25zdCBRU2Nyb2xsQmFyKiwKCQkJCQlpbnQgc2xpZGVyU3RhcnQsIHVpbnQgY29udHJvbHMsCgkJ
CQkJdWludCBhY3RpdmVDb250cm9sICkgPSAwOwogICAgdmlydHVhbCBTY3JvbGxDb250cm9sIHNj
cm9sbEJhclBvaW50T3ZlciggY29uc3QgUVNjcm9sbEJhciosCgkJCQkJaW50IHNsaWRlclN0YXJ0
LCBjb25zdCBRUG9pbnQmICkgPSAwOwoKICAgICAKICAgIHZpcnR1YWwgaW50IHNsaWRlckxlbmd0
aCgpIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgdm9pZCBkcmF3U2xpZGVyKCBRUGFpbnRlciAqcCwK
CQkJICAgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKCQkJICAgICBjb25zdCBRQ29sb3JH
cm91cCAmZywKCQkJICAgICBPcmllbnRhdGlvbiwgYm9vbCB0aWNrQWJvdmUsIGJvb2wgdGlja0Jl
bG93KSA9IDA7CgogICAgdmlydHVhbCB2b2lkIGRyYXdTbGlkZXJNYXNrKCBRUGFpbnRlciAqcCwK
CQkJCSBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKCQkJCSBPcmllbnRhdGlvbiwgYm9vbCB0
aWNrQWJvdmUsIGJvb2wgdGlja0JlbG93KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZHJhd1NsaWRl
ckdyb292ZSggUVBhaW50ZXIgKnAsCgkJCQkgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwK
CQkJCSAgIGNvbnN0IFFDb2xvckdyb3VwJiBnLCBRQ09PUkQgYywKCQkJCSAgIE9yaWVudGF0aW9u
ICkgPSAwOwogICAgdmlydHVhbCB2b2lkIGRyYXdTbGlkZXJHcm9vdmVNYXNrKCBRUGFpbnRlciAq
cCwKCQkJCSAgICAgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKCQkJCSAgICAgICBRQ09P
UkQgYywKCQkJCSAgICAgICBPcmllbnRhdGlvbiApID0gMDsKICAgIHZpcnR1YWwgaW50IG1heGlt
dW1TbGlkZXJEcmFnRGlzdGFuY2UoKSBjb25zdCA9IDA7CgogICAgdmlydHVhbCBpbnQgc3BsaXR0
ZXJXaWR0aCgpIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgdm9pZCBkcmF3U3BsaXR0ZXIoIFFQYWlu
dGVyICpwLAoJCQkgICAgIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLAoJCQkgICAgIGNvbnN0
IFFDb2xvckdyb3VwICZnLAoJCQkgICAgIE9yaWVudGF0aW9uKSA9IDA7CgogICAgdmlydHVhbCB2
b2lkIGRyYXdDaGVja01hcmsoIFFQYWludGVyICpwLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQg
aCwKCQkJCWNvbnN0IFFDb2xvckdyb3VwICZnLAoJCQkJYm9vbCBhY3QsIGJvb2wgZGlzICkgPSAw
OwogICAgdmlydHVhbCB2b2lkIHBvbGlzaFBvcHVwTWVudSggUVBvcHVwTWVudSogKSA9IDA7Cgog
ICAgdmlydHVhbCBpbnQgZXh0cmFQb3B1cE1lbnVJdGVtV2lkdGgoIGJvb2wgY2hlY2thYmxlLCBp
bnQgbWF4cG13LAoJCQkJUU1lbnVJdGVtKiBtaSwKCQkJCWNvbnN0IFFGb250TWV0cmljcyYgZm0g
ICkgPSAwOyAgCiAgICB2aXJ0dWFsIGludCBwb3B1cFN1Ym1lbnVJbmRpY2F0b3JXaWR0aCgKCQkJ
CWNvbnN0IFFGb250TWV0cmljcyYgZm0gICkgPSAwOyAgCiAgICB2aXJ0dWFsIGludCBwb3B1cE1l
bnVJdGVtSGVpZ2h0KCBib29sIGNoZWNrYWJsZSwKCQkJCVFNZW51SXRlbSogbWksCgkJCQljb25z
dCBRRm9udE1ldHJpY3MmIGZtICApID0gMDsgIAogICAgdmlydHVhbCB2b2lkIGRyYXdQb3B1cE1l
bnVJdGVtKCBRUGFpbnRlciogcCwgYm9vbCBjaGVja2FibGUsCgkJCQkgICAgaW50IG1heHBtdywg
aW50IHRhYiwgUU1lbnVJdGVtKiBtaSwKCQkJCSAgICBjb25zdCBRUGFsZXR0ZSYgcGFsLAoJCQkJ
ICAgIGJvb2wgYWN0LCBib29sIGVuYWJsZWQsCgkJCQkgICAgaW50IHgsIGludCB5LCBpbnQgdywg
aW50IGgpID0gMDsKICAgIHZvaWQgZHJhd01lbnVCYXJJdGVtKCBRUGFpbnRlciogcCwgaW50IHgs
IGludCB5LCBpbnQgdywgaW50IGgsICAKCQkJCSAgICBRTWVudUl0ZW0qIG1pLCBRQ29sb3JHcm91
cCYgZywKCQkJCSAgICBib29sIGVuYWJsZWQsIGJvb2wgYWN0aXZlICk7CgogICAgIAogICAgUVNp
emUgc2Nyb2xsQmFyRXh0ZW50KCk7ICAKICAgIGludCBidXR0b25EZWZhdWx0SW5kaWNhdG9yV2lk
dGgoKSBjb25zdDsKICAgIGludCBidXR0b25NYXJnaW4oKSBjb25zdDsgIAogICAgaW50IHRvb2xC
YXJIYW5kbGVFeHRlbnQoKSBjb25zdDsgIAogICAgaW50IHRvb2xCYXJIYW5kbGVFeHRlbmQoKSBj
b25zdDsgIAogICAgaW50IHNsaWRlclRoaWNrbmVzcygpIGNvbnN0IDsgIAogICAgdm9pZCBkcmF3
VG9vbEJhckhhbmRsZSggUVBhaW50ZXIgKnAsIGNvbnN0IFFSZWN0ICZyLAoJCQkgICAgUXQ6Ok9y
aWVudGF0aW9uIG9yaWVudGF0aW9uLAoJCQkgICAgYm9vbCBoaWdobGlnaHQsIGNvbnN0IFFDb2xv
ckdyb3VwICZjZywKCQkJICAgIGJvb2wgZHJhd0JvcmRlciA9IDAgICk7ICAKCnByb3RlY3RlZDoK
ICAgIHZvaWQgc2V0U2Nyb2xsQmFyRXh0ZW50KCBpbnQgdywgaW50IGg9LTEgKTsgIAogICAgdm9p
ZCBzZXRCdXR0b25EZWZhdWx0SW5kaWNhdG9yV2lkdGgoIGludCB3ICk7ICAKICAgIHZvaWQgc2V0
QnV0dG9uTWFyZ2luKCBpbnQgdyApOyAgCiAgICB2b2lkIHNldFNsaWRlclRoaWNrbmVzcyhpbnQg
dCk7ICAKCgpwcml2YXRlOgkgCgogICAgUVN0eWxlKCBjb25zdCBRU3R5bGUgJiApOwogICAgUVN0
eWxlJiBvcGVyYXRvcj0oIGNvbnN0IFFTdHlsZSAmICk7Cgp9OwoKCgojIDUwICIvYW1kL3NpZ21h
LzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3F3aWRnZXQu
aCIgMgoKIyAxICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0y
LjIuMy9pbmNsdWRlL3FzaXplcG9saWN5LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKY2xhc3MgICBRU2l6ZVBvbGljeQp7CnByaXZhdGU6CiAgICBlbnVt
IHsgSFNpemUgPSA2LCBITWFzayA9IDB4M2YsIFZNYXNrID0gSE1hc2sgPDwgSFNpemUsCgkgICBN
YXlHcm93ID0gMSwgRXhwTWFzayA9IDIsIE1heVNocmluayA9IDQgfTsKcHVibGljOgogICAgZW51
bSBTaXplVHlwZSB7IEZpeGVkID0gMCwKCQkgICAgTWluaW11bSA9IE1heUdyb3csCgkJICAgIE1h
eGltdW0gPSBNYXlTaHJpbmssCgkJICAgIFByZWZlcnJlZCA9IE1heUdyb3d8TWF5U2hyaW5rICwK
CQkgICAgTWluaW11bUV4cGFuZGluZyA9IE1pbmltdW18RXhwTWFzaywKCQkgICAgRXhwYW5kaW5n
ID0gTWluaW11bUV4cGFuZGluZ3xNYXlTaHJpbmsgfTsKCiAgICBlbnVtIEV4cGFuZERhdGEgeyBO
b0RpcmVjdGlvbiA9IDAsCgkJICAgICAgSG9yaXpvbnRhbCA9IDEsCgkJICAgICAgVmVydGljYWwg
PSAyLAoJCSAgICAgIEJvdGhEaXJlY3Rpb25zID0gSG9yaXpvbnRhbCB8IFZlcnRpY2FsIH07Cgog
ICAgUVNpemVQb2xpY3koKSB7IGRhdGEgPSAwOyB9CgogICAgUVNpemVQb2xpY3koIFNpemVUeXBl
IGhvciwgU2l6ZVR5cGUgdmVyLCBib29sIGhmdyA9IDAgICk7CgogICAgU2l6ZVR5cGUgaG9yRGF0
YSgpIGNvbnN0IHsgcmV0dXJuIChTaXplVHlwZSkoIGRhdGEgJiBITWFzayApOyB9CiAgICBTaXpl
VHlwZSB2ZXJEYXRhKCkgY29uc3QgeyByZXR1cm4gKFNpemVUeXBlKSgoIGRhdGEgJiBWTWFzayAp
ID4+IEhTaXplKTsgfQoKICAgIGJvb2wgbWF5U2hyaW5rSG9yaXpvbnRhbGx5KCkgY29uc3QgeyBy
ZXR1cm4gaG9yRGF0YSgpICYgTWF5U2hyaW5rOyB9CiAgICBib29sIG1heVNocmlua1ZlcnRpY2Fs
bHkoKSBjb25zdCB7IHJldHVybiB2ZXJEYXRhKCkgJiBNYXlTaHJpbms7IH0KICAgIGJvb2wgbWF5
R3Jvd0hvcml6b250YWxseSgpIGNvbnN0IHsgcmV0dXJuIGhvckRhdGEoKSAmIE1heUdyb3c7IH0K
ICAgIGJvb2wgbWF5R3Jvd1ZlcnRpY2FsbHkoKSBjb25zdCB7IHJldHVybiB2ZXJEYXRhKCkgJiBN
YXlHcm93OyB9CgogICAgRXhwYW5kRGF0YSBleHBhbmRpbmcoKSBjb25zdAogICAgewoJcmV0dXJu
IChFeHBhbmREYXRhKSggKGludCkodmVyRGF0YSgpJkV4cE1hc2sgPyBWZXJ0aWNhbCA6IDApKwoJ
CQkgICAgIChpbnQpKGhvckRhdGEoKSZFeHBNYXNrID8gSG9yaXpvbnRhbCA6IDApICk7CiAgICB9
CgogICAgdm9pZCBzZXRIb3JEYXRhKCBTaXplVHlwZSBkICkgeyBkYXRhID0gKGRhdGEgJiB+SE1h
c2spIHwgZDsgfQogICAgdm9pZCBzZXRWZXJEYXRhKCBTaXplVHlwZSBkICkgeyBkYXRhID0gKGRh
dGEgJiB+KEhNYXNrPDxIU2l6ZSkpIHwKCQkJCQkgICAoZDw8SFNpemUpOyB9CgkJCiAgICB2b2lk
IHNldEhlaWdodEZvcldpZHRoKCBib29sIGIgKSB7IGRhdGEgPSBiID8gKCBkYXRhIHwgKCAxIDw8
IDIqSFNpemUgKSApCgkJCQkJICAgICAgOiAoIGRhdGEgJiB+KCAxIDw8IDIqSFNpemUgKSApOyAg
fQogICAgYm9vbCBoYXNIZWlnaHRGb3JXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEgJiAoIDEg
PDwgMipIU2l6ZSApOyB9CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRU2l6ZVBvbGljeSYg
cyApIGNvbnN0IHsgcmV0dXJuIGRhdGEgPT0gcy5kYXRhOyB9CiAgICBib29sIG9wZXJhdG9yIT0o
IGNvbnN0IFFTaXplUG9saWN5JiBzICkgY29uc3QgeyByZXR1cm4gZGF0YSAhPSBzLmRhdGE7IH0K
CnByaXZhdGU6CiAgICBRU2l6ZVBvbGljeSggaW50IGkgKTogZGF0YSggaSApIHt9CgogICAgUV9V
SU5UMTYgZGF0YTsKfTsKCgppbmxpbmUgUVNpemVQb2xpY3k6OlFTaXplUG9saWN5KCBTaXplVHlw
ZSBob3IsIFNpemVUeXBlIHZlciwgYm9vbCBoZncgKQoJOiBkYXRhKCBob3IgfCAodmVyPDxIU2l6
ZSkgfCAoaGZ3ID8gKDE8PDIqSFNpemUpIDogMCkgKSB7fQoKCgojIDUxICIvYW1kL3NpZ21hLzAv
c3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3F3aWRnZXQuaCIg
MgoKCgpjbGFzcyBRTGF5b3V0OwpzdHJ1Y3QgUVdFeHRyYTsKc3RydWN0IFFUTFdFeHRyYTsKY2xh
c3MgUUZvY3VzRGF0YTsKY2xhc3MgUVN0eWxlOwpjbGFzcyBRV1NSZWdpb25NYW5hZ2VyOwoKY2xh
c3MgICBRV2lkZ2V0IDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBRUGFpbnREZXZpY2UKewogICAg
cHVibGljOglRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY01l
dGFPYmplY3QoKTsJfQljb25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsJc3RhdGljIFFNZXRh
T2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7CXN0YXRpYyBRU3RyaW5nIHRyKGNvbnN0IGNoYXIq
KTsgc3RhdGljIFFTdHJpbmcgdHIoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsgCXByb3RlY3Rl
ZDoJdm9pZCBpbml0TWV0YU9iamVjdCgpOwlwcml2YXRlOglzdGF0aWMgUU1ldGFPYmplY3QgKm1l
dGFPYmo7IAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAog
ICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAg
IAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAog
ICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAoKICAg
ICAKICAgICAKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAg
CiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAg
ICAgCiAgICAgCiAgICAgCgpwdWJsaWM6CiAgICBRV2lkZ2V0KCBRV2lkZ2V0ICpwYXJlbnQ9MCwg
Y29uc3QgY2hhciAqbmFtZT0wLCBXRmxhZ3MgZj0wICk7CiAgICB+UVdpZGdldCgpOwoKICAgIFdJ
ZAkJIHdpbklkKCkgY29uc3Q7CiAgICB2b2lkCSBzZXROYW1lKCBjb25zdCBjaGFyICpuYW1lICk7
CgogICAgIAoKICAgIFFTdHlsZSAgICAgJnN0eWxlKCkgY29uc3Q7CiAgICB2b2lkICAgICAgICBz
ZXRTdHlsZSggUVN0eWxlICogKTsKCiAgICAgCgogICAgYm9vbAkgaXNUb3BMZXZlbCgpCWNvbnN0
OwogICAgYm9vbAkgaXNNb2RhbCgpCWNvbnN0OwogICAgYm9vbAkgaXNQb3B1cCgpCWNvbnN0Owog
ICAgYm9vbAkgaXNEZXNrdG9wKCkJY29uc3Q7CgogICAgYm9vbAkgaXNFbmFibGVkKCkJY29uc3Q7
CiAgICBib29sCSBpc0VuYWJsZWRUbyhRV2lkZ2V0KikgY29uc3Q7CiAgICBib29sCSBpc0VuYWJs
ZWRUb1RMVygpIGNvbnN0OwoKcHVibGljICA6CiAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlZCgg
Ym9vbCApOwogICAgdm9pZCBzZXREaXNhYmxlZCggYm9vbCApOwoKICAgICAKCnB1YmxpYzoKICAg
IFFSZWN0CSBmcmFtZUdlb21ldHJ5KCkgY29uc3Q7CiAgICBjb25zdCBRUmVjdCAmZ2VvbWV0cnko
KQljb25zdDsKICAgIGludAkJIHgoKQkJY29uc3Q7CiAgICBpbnQJCSB5KCkJCWNvbnN0OwogICAg
UVBvaW50CSBwb3MoKQkJY29uc3Q7CiAgICBRU2l6ZQkgZnJhbWVTaXplKCkgICAgY29uc3Q7CiAg
ICBRU2l6ZQkgc2l6ZSgpCQljb25zdDsKICAgIGludAkJIHdpZHRoKCkJY29uc3Q7CiAgICBpbnQJ
CSBoZWlnaHQoKQljb25zdDsKICAgIFFSZWN0CSByZWN0KCkJCWNvbnN0OwogICAgUVJlY3QJIGNo
aWxkcmVuUmVjdCgpIGNvbnN0OwogICAgUVJlZ2lvbgkgY2hpbGRyZW5SZWdpb24oKSBjb25zdDsK
CiAgICBRU2l6ZQkgbWluaW11bVNpemUoKQkgY29uc3Q7CiAgICBRU2l6ZQkgbWF4aW11bVNpemUo
KQkgY29uc3Q7CiAgICBpbnQJCSBtaW5pbXVtV2lkdGgoKQkgY29uc3Q7CiAgICBpbnQJCSBtaW5p
bXVtSGVpZ2h0KCkgY29uc3Q7CiAgICBpbnQJCSBtYXhpbXVtV2lkdGgoKQkgY29uc3Q7CiAgICBp
bnQJCSBtYXhpbXVtSGVpZ2h0KCkgY29uc3Q7CiAgICB2b2lkCSBzZXRNaW5pbXVtU2l6ZSggY29u
c3QgUVNpemUgJiApOwogICAgdmlydHVhbCB2b2lkIHNldE1pbmltdW1TaXplKCBpbnQgbWludywg
aW50IG1pbmggKTsKICAgIHZvaWQJIHNldE1heGltdW1TaXplKCBjb25zdCBRU2l6ZSAmICk7CiAg
ICB2aXJ0dWFsIHZvaWQgc2V0TWF4aW11bVNpemUoIGludCBtYXh3LCBpbnQgbWF4aCApOwogICAg
dm9pZAkgc2V0TWluaW11bVdpZHRoKCBpbnQgbWludyApOwogICAgdm9pZAkgc2V0TWluaW11bUhl
aWdodCggaW50IG1pbmggKTsKICAgIHZvaWQJIHNldE1heGltdW1XaWR0aCggaW50IG1heHcgKTsK
ICAgIHZvaWQJIHNldE1heGltdW1IZWlnaHQoIGludCBtYXhoICk7CgogICAgUVNpemUJIHNpemVJ
bmNyZW1lbnQoKSBjb25zdDsKICAgIHZvaWQJIHNldFNpemVJbmNyZW1lbnQoIGNvbnN0IFFTaXpl
ICYgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplSW5jcmVtZW50KCBpbnQgdywgaW50IGggKTsK
ICAgIFFTaXplCSBiYXNlU2l6ZSgpIGNvbnN0OwogICAgdm9pZAkgc2V0QmFzZVNpemUoIGNvbnN0
IFFTaXplICYgKTsKICAgIHZvaWQJIHNldEJhc2VTaXplKCBpbnQgYmFzZXcsIGludCBiYXNlaCAp
OwoKICAgIHZvaWQJc2V0Rml4ZWRTaXplKCBjb25zdCBRU2l6ZSAmICk7CiAgICB2b2lkCXNldEZp
eGVkU2l6ZSggaW50IHcsIGludCBoICk7CiAgICB2b2lkCXNldEZpeGVkV2lkdGgoIGludCB3ICk7
CiAgICB2b2lkCXNldEZpeGVkSGVpZ2h0KCBpbnQgaCApOwoKICAgICAKCiAgICBRUG9pbnQJIG1h
cFRvR2xvYmFsKCBjb25zdCBRUG9pbnQgJiApCSBjb25zdDsKICAgIFFQb2ludAkgbWFwRnJvbUds
b2JhbCggY29uc3QgUVBvaW50ICYgKSBjb25zdDsKICAgIFFQb2ludAkgbWFwVG9QYXJlbnQoIGNv
bnN0IFFQb2ludCAmICkJIGNvbnN0OwogICAgUVBvaW50CSBtYXBGcm9tUGFyZW50KCBjb25zdCBR
UG9pbnQgJiApIGNvbnN0OwogICAgUVBvaW50CSBtYXBUbyggUVdpZGdldCAqLCBjb25zdCBRUG9p
bnQgJiApIGNvbnN0OwogICAgUVBvaW50CSBtYXBGcm9tKCBRV2lkZ2V0ICosIGNvbnN0IFFQb2lu
dCAmICkgY29uc3Q7CgogICAgUVdpZGdldAkqdG9wTGV2ZWxXaWRnZXQoKSAgIGNvbnN0OwoKICAg
ICAKCiAgICBlbnVtIEJhY2tncm91bmRNb2RlIHsgRml4ZWRDb2xvciwgRml4ZWRQaXhtYXAsIE5v
QmFja2dyb3VuZCwKCQkJICBQYWxldHRlRm9yZWdyb3VuZCwgUGFsZXR0ZUJ1dHRvbiwgUGFsZXR0
ZUxpZ2h0LAoJCQkgIFBhbGV0dGVNaWRsaWdodCwgUGFsZXR0ZURhcmssIFBhbGV0dGVNaWQsCgkJ
CSAgUGFsZXR0ZVRleHQsIFBhbGV0dGVCcmlnaHRUZXh0LCBQYWxldHRlQmFzZSwKCQkJICBQYWxl
dHRlQmFja2dyb3VuZCwgUGFsZXR0ZVNoYWRvdywgUGFsZXR0ZUhpZ2hsaWdodCwKCQkJICBQYWxl
dHRlSGlnaGxpZ2h0ZWRUZXh0LCBQYWxldHRlQnV0dG9uVGV4dCwKCQkJICBYMTFQYXJlbnRSZWxh
dGl2ZSB9OwoKICAgIEJhY2tncm91bmRNb2RlCWJhY2tncm91bmRNb2RlKCkgY29uc3Q7CiAgICB2
aXJ0dWFsIHZvaWQJc2V0QmFja2dyb3VuZE1vZGUoIEJhY2tncm91bmRNb2RlICk7CgogICAgY29u
c3QgUUNvbG9yICYJYmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CiAgICBjb25zdCBRQ29sb3IgJglm
b3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZAlzZXRCYWNrZ3JvdW5kQ29s
b3IoIGNvbnN0IFFDb2xvciAmICk7CgogICAgY29uc3QgUVBpeG1hcCAqCWJhY2tncm91bmRQaXht
YXAoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZAlzZXRCYWNrZ3JvdW5kUGl4bWFwKCBjb25zdCBR
UGl4bWFwICYgKTsKCgogICAgY29uc3QgUUNvbG9yR3JvdXAgJiBjb2xvckdyb3VwKCkgY29uc3Q7
CiAgICBjb25zdCBRUGFsZXR0ZSAmCXBhbGV0dGUoKSAgICBjb25zdDsKICAgIGJvb2wJCW93blBh
bGV0dGUoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZAlzZXRQYWxldHRlKCBjb25zdCBRUGFsZXR0
ZSAmICk7CiAgICB2b2lkCQl1bnNldFBhbGV0dGUoKTsKCiAgICBRRm9udAkJZm9udCgpIGNvbnN0
OwogICAgYm9vbAkJb3duRm9udCgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkCXNldEZvbnQoIGNv
bnN0IFFGb250ICYgKTsKICAgIHZvaWQJCXVuc2V0Rm9udCgpOwogICAgUUZvbnRNZXRyaWNzCWZv
bnRNZXRyaWNzKCkgY29uc3Q7CiAgICBRRm9udEluZm8JIAlmb250SW5mbygpIGNvbnN0OwoKICAg
IGVudW0gUHJvcGFnYXRpb25Nb2RlIHsgTm9DaGlsZHJlbiwgQWxsQ2hpbGRyZW4sCgkJCSAgIFNh
bWVGb250LCBTYW1lUGFsZXR0ZSA9IFNhbWVGb250IH07CgogICAgUHJvcGFnYXRpb25Nb2RlCWZv
bnRQcm9wYWdhdGlvbigpIGNvbnN0OyAgCiAgICB2aXJ0dWFsIHZvaWQJc2V0Rm9udFByb3BhZ2F0
aW9uKCBQcm9wYWdhdGlvbk1vZGUgKTsgIAoKICAgIFByb3BhZ2F0aW9uTW9kZQlwYWxldHRlUHJv
cGFnYXRpb24oKSBjb25zdDsgIAogICAgdmlydHVhbCB2b2lkCXNldFBhbGV0dGVQcm9wYWdhdGlv
biggUHJvcGFnYXRpb25Nb2RlICk7ICAKCiAgICBjb25zdCBRQ3Vyc29yICAgICAgJmN1cnNvcigp
IGNvbnN0OwogICAgYm9vbAkJb3duQ3Vyc29yKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQJc2V0
Q3Vyc29yKCBjb25zdCBRQ3Vyc29yICYgKTsKICAgIHZpcnR1YWwgdm9pZAl1bnNldEN1cnNvcigp
OwoKICAgIFFTdHJpbmcJCWNhcHRpb24oKSBjb25zdDsKICAgIGNvbnN0IFFQaXhtYXAgICAgICAq
aWNvbigpIGNvbnN0OwogICAgUVN0cmluZwkJaWNvblRleHQoKSBjb25zdDsKICAgIGJvb2wJCWhh
c01vdXNlVHJhY2tpbmcoKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQJc2V0TWFzayggY29uc3Qg
UUJpdG1hcCAmICk7CiAgICB2aXJ0dWFsIHZvaWQJc2V0TWFzayggY29uc3QgUVJlZ2lvbiAmICk7
CiAgICB2b2lkCQljbGVhck1hc2soKTsKCnB1YmxpYyAgOgogICAgdmlydHVhbCB2b2lkCXNldENh
cHRpb24oIGNvbnN0IFFTdHJpbmcgJik7CiAgICB2aXJ0dWFsIHZvaWQJc2V0SWNvbiggY29uc3Qg
UVBpeG1hcCAmICk7CiAgICB2aXJ0dWFsIHZvaWQJc2V0SWNvblRleHQoIGNvbnN0IFFTdHJpbmcg
Jik7CiAgICB2aXJ0dWFsIHZvaWQJc2V0TW91c2VUcmFja2luZyggYm9vbCBlbmFibGUgKTsKCiAg
ICAgCgogICAgdmlydHVhbCB2b2lkCXNldEZvY3VzKCk7CiAgICB2b2lkCQljbGVhckZvY3VzKCk7
CgpwdWJsaWM6CiAgICBlbnVtIEZvY3VzUG9saWN5IHsKCU5vRm9jdXMgPSAwLAoJVGFiRm9jdXMg
PSAweDEsCglDbGlja0ZvY3VzID0gMHgyLAoJU3Ryb25nRm9jdXMgPSAweDMsCglXaGVlbEZvY3Vz
ID0gMHg3CiAgICB9OwoKICAgIGJvb2wJCWlzQWN0aXZlV2luZG93KCkgY29uc3Q7CiAgICB2aXJ0
dWFsIHZvaWQJc2V0QWN0aXZlV2luZG93KCk7CiAgICBib29sCQlpc0ZvY3VzRW5hYmxlZCgpIGNv
bnN0OwoKICAgIEZvY3VzUG9saWN5CQlmb2N1c1BvbGljeSgpIGNvbnN0OwogICAgdmlydHVhbCB2
b2lkCXNldEZvY3VzUG9saWN5KCBGb2N1c1BvbGljeSApOwogICAgYm9vbAkJaGFzRm9jdXMoKSBj
b25zdDsKICAgIHN0YXRpYyB2b2lkCQlzZXRUYWJPcmRlciggUVdpZGdldCAqLCBRV2lkZ2V0ICog
KTsKICAgIHZpcnR1YWwgdm9pZAlzZXRGb2N1c1Byb3h5KCBRV2lkZ2V0ICogKTsKICAgIFFXaWRn
ZXQgKgkJZm9jdXNQcm94eSgpIGNvbnN0OwoKICAgICAKCiAgICB2b2lkCQlncmFiTW91c2UoKTsK
CiAgICB2b2lkCQlncmFiTW91c2UoIGNvbnN0IFFDdXJzb3IgJiApOwoKICAgIHZvaWQJCXJlbGVh
c2VNb3VzZSgpOwogICAgdm9pZAkJZ3JhYktleWJvYXJkKCk7CiAgICB2b2lkCQlyZWxlYXNlS2V5
Ym9hcmQoKTsKICAgIHN0YXRpYyBRV2lkZ2V0ICoJbW91c2VHcmFiYmVyKCk7CiAgICBzdGF0aWMg
UVdpZGdldCAqCWtleWJvYXJkR3JhYmJlcigpOwoKICAgICAKCiAgICBib29sCSAJaXNVcGRhdGVz
RW5hYmxlZCgpIGNvbnN0OwoKCgoKcHVibGljICA6CiAgICB2aXJ0dWFsIHZvaWQJc2V0VXBkYXRl
c0VuYWJsZWQoIGJvb2wgZW5hYmxlICk7CiAgICB2b2lkCQl1cGRhdGUoKTsKICAgIHZvaWQJCXVw
ZGF0ZSggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQJCXVwZGF0ZSggY29u
c3QgUVJlY3QmICk7CiAgICB2b2lkCQlyZXBhaW50KCk7CiAgICB2b2lkCQlyZXBhaW50KCBib29s
IGVyYXNlICk7CiAgICB2b2lkCQlyZXBhaW50KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwg
Ym9vbCBlcmFzZT0gMSAgKTsKICAgIHZvaWQJCXJlcGFpbnQoIGNvbnN0IFFSZWN0ICYsIGJvb2wg
ZXJhc2U9IDEgICk7CiAgICB2b2lkCQlyZXBhaW50KCBjb25zdCBRUmVnaW9uICYsIGJvb2wgZXJh
c2U9IDEgICk7CgogICAgIAoKICAgIHZpcnR1YWwgdm9pZAlzaG93KCk7CiAgICB2aXJ0dWFsIHZv
aWQJaGlkZSgpOwoKICAgIHZvaWQJCWljb25pZnkoKQl7IHNob3dNaW5pbWl6ZWQoKTsgfQoKICAg
IHZpcnR1YWwgdm9pZAlzaG93TWluaW1pemVkKCk7CiAgICB2aXJ0dWFsIHZvaWQJc2hvd01heGlt
aXplZCgpOwogICAgdm9pZAkJc2hvd0Z1bGxTY3JlZW4oKTsgIAogICAgdmlydHVhbCB2b2lkCXNo
b3dOb3JtYWwoKTsKICAgIHZpcnR1YWwgdm9pZAlwb2xpc2goKTsKICAgIHZvaWQgCQljb25zdFBv
bGlzaCgpIGNvbnN0OwogICAgYm9vbAkJY2xvc2UoKTsKCiAgICB2b2lkCQlyYWlzZSgpOwogICAg
dm9pZAkJbG93ZXIoKTsKICAgIHZvaWQJCXN0YWNrVW5kZXIoIFFXaWRnZXQqICk7CiAgICB2aXJ0
dWFsIHZvaWQJbW92ZSggaW50IHgsIGludCB5ICk7CiAgICB2b2lkCQltb3ZlKCBjb25zdCBRUG9p
bnQgJiApOwogICAgdmlydHVhbCB2b2lkCXJlc2l6ZSggaW50IHcsIGludCBoICk7CiAgICB2b2lk
CQlyZXNpemUoIGNvbnN0IFFTaXplICYgKTsKICAgIHZpcnR1YWwgdm9pZAlzZXRHZW9tZXRyeSgg
aW50IHgsIGludCB5LCBpbnQgdywgaW50IGggKTsKICAgIHZpcnR1YWwgdm9pZAlzZXRHZW9tZXRy
eSggY29uc3QgUVJlY3QgJiApOwoKcHVibGljOgogICAgdmlydHVhbCBib29sCWNsb3NlKCBib29s
IGFsc29EZWxldGUgKTsKICAgIGJvb2wJCWlzVmlzaWJsZSgpCWNvbnN0OwogICAgYm9vbAkJaXNW
aXNpYmxlVG8oUVdpZGdldCopIGNvbnN0OwogICAgYm9vbAkJaXNWaXNpYmxlVG9UTFcoKSBjb25z
dDsgIAogICAgUVJlY3QJCXZpc2libGVSZWN0KCkgY29uc3Q7CiAgICBib29sIAkJaXNIaWRkZW4o
KSBjb25zdDsKICAgIGJvb2wJCWlzTWluaW1pemVkKCkgY29uc3Q7CiAgICBib29sCQlpc01heGlt
aXplZCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgUVNpemUJc2l6ZUhpbnQoKSBjb25zdDsKICAgIHZp
cnR1YWwgUVNpemUJbWluaW11bVNpemVIaW50KCkgY29uc3Q7CiAgICB2aXJ0dWFsIFFTaXplUG9s
aWN5CXNpemVQb2xpY3koKSBjb25zdDsKICAgIHZvaWQgCQlzZXRTaXplUG9saWN5KCBRU2l6ZVBv
bGljeSApOwogICAgdmlydHVhbCBpbnQgaGVpZ2h0Rm9yV2lkdGgoaW50KSBjb25zdDsKCiAgICB2
aXJ0dWFsIHZvaWQgIAlhZGp1c3RTaXplKCk7CgogICAgUUxheW91dCAqCQlsYXlvdXQoKSBjb25z
dCB7IHJldHVybiBsYXlfb3V0OyB9CgogICAgdm9pZAkJdXBkYXRlR2VvbWV0cnkoKTsKICAgIHZp
cnR1YWwgdm9pZCAJcmVwYXJlbnQoIFFXaWRnZXQgKnBhcmVudCwgV0ZsYWdzLCBjb25zdCBRUG9p
bnQgJiwKCQkJCSAgYm9vbCBzaG93SXQ9IDAgICk7CiAgICB2b2lkCQlyZXBhcmVudCggUVdpZGdl
dCAqcGFyZW50LCBjb25zdCBRUG9pbnQgJiwKCQkJCSAgYm9vbCBzaG93SXQ9IDAgICk7CgogICAg
dm9pZAkJcmVjcmVhdGUoIFFXaWRnZXQgKnBhcmVudCwgV0ZsYWdzIGYsIGNvbnN0IFFQb2ludCAm
IHAsCgkJCQkgIGJvb2wgc2hvd0l0PSAwICApCiAgICB7IHJlcGFyZW50KHBhcmVudCxmLHAsc2hv
d0l0KTsgfQoKCiAgICB2b2lkCQllcmFzZSgpOwogICAgdm9pZAkJZXJhc2UoIGludCB4LCBpbnQg
eSwgaW50IHcsIGludCBoICk7CiAgICB2b2lkCQllcmFzZSggY29uc3QgUVJlY3QgJiApOwogICAg
dm9pZAkJZXJhc2UoIGNvbnN0IFFSZWdpb24gJiApOwogICAgdm9pZAkJc2Nyb2xsKCBpbnQgZHgs
IGludCBkeSApOwogICAgdm9pZAkJc2Nyb2xsKCBpbnQgZHgsIGludCBkeSwgY29uc3QgUVJlY3Qm
ICk7CgogICAgdm9pZAkJZHJhd1RleHQoIGludCB4LCBpbnQgeSwgY29uc3QgUVN0cmluZyAmKTsK
ICAgIHZvaWQJCWRyYXdUZXh0KCBjb25zdCBRUG9pbnQgJiwgY29uc3QgUVN0cmluZyAmKTsKCiAg
ICAgCgogICAgUVdpZGdldCAqCQlmb2N1c1dpZGdldCgpIGNvbnN0OwogICAgUVJlY3QgICAgICAg
ICAgICAgICBtaWNyb0ZvY3VzSGludCgpIGNvbnN0OwoKICAgICAKCiAgICBib29sCQlhY2NlcHRE
cm9wcygpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkCXNldEFjY2VwdERyb3BzKCBib29sIG9uICk7
CgogICAgIAoKICAgIHZpcnR1YWwgdm9pZAlzZXRBdXRvTWFzayhib29sKTsKICAgIGJvb2wJCWF1
dG9NYXNrKCkgY29uc3Q7CgogICAgZW51bSBCYWNrZ3JvdW5kT3JpZ2luIHsgV2lkZ2V0T3JpZ2lu
LCBQYXJlbnRPcmlnaW4gfTsKCiAgICB2b2lkIHNldEJhY2tncm91bmRPcmlnaW4oIEJhY2tncm91
bmRPcmlnaW4gKTsKICAgIEJhY2tncm91bmRPcmlnaW4gYmFja2dyb3VuZE9yaWdpbigpIGNvbnN0
OwoKCiAgICAgCiAgICB2aXJ0dWFsIGJvb2wgY3VzdG9tV2hhdHNUaGlzKCkgY29uc3Q7CgogICAg
UVdpZGdldCAqCQlwYXJlbnRXaWRnZXQoKSBjb25zdDsKICAgIGJvb2wJCXRlc3RXU3RhdGUoIHVp
bnQgbiApIGNvbnN0OwogICAgYm9vbAkJdGVzdFdGbGFncyggV0ZsYWdzIGYgKSBjb25zdDsKICAg
IHN0YXRpYyBRV2lkZ2V0ICoJZmluZCggV0lkICk7CiAgICBzdGF0aWMgUVdpZGdldE1hcHBlciAq
d21hcHBlcigpOwoKCgoKCnByb3RlY3RlZDoKICAgICAKICAgIGJvb2wJIGV2ZW50KCBRRXZlbnQg
KiApOwogICAgdmlydHVhbCB2b2lkIG1vdXNlUHJlc3NFdmVudCggUU1vdXNlRXZlbnQgKiApOwog
ICAgdmlydHVhbCB2b2lkIG1vdXNlUmVsZWFzZUV2ZW50KCBRTW91c2VFdmVudCAqICk7CiAgICB2
aXJ0dWFsIHZvaWQgbW91c2VEb3VibGVDbGlja0V2ZW50KCBRTW91c2VFdmVudCAqICk7CiAgICB2
aXJ0dWFsIHZvaWQgbW91c2VNb3ZlRXZlbnQoIFFNb3VzZUV2ZW50ICogKTsKICAgIHZpcnR1YWwg
dm9pZCB3aGVlbEV2ZW50KCBRV2hlZWxFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQga2V5UHJl
c3NFdmVudCggUUtleUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBrZXlSZWxlYXNlRXZlbnQo
IFFLZXlFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZm9jdXNJbkV2ZW50KCBRRm9jdXNFdmVu
dCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZm9jdXNPdXRFdmVudCggUUZvY3VzRXZlbnQgKiApOwog
ICAgdmlydHVhbCB2b2lkIGVudGVyRXZlbnQoIFFFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQg
bGVhdmVFdmVudCggUUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBwYWludEV2ZW50KCBRUGFp
bnRFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgbW92ZUV2ZW50KCBRTW92ZUV2ZW50ICogKTsK
ICAgIHZpcnR1YWwgdm9pZCByZXNpemVFdmVudCggUVJlc2l6ZUV2ZW50ICogKTsKICAgIHZpcnR1
YWwgdm9pZCBjbG9zZUV2ZW50KCBRQ2xvc2VFdmVudCAqICk7CgoKICAgIHZpcnR1YWwgdm9pZCBk
cmFnRW50ZXJFdmVudCggUURyYWdFbnRlckV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBkcmFn
TW92ZUV2ZW50KCBRRHJhZ01vdmVFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZHJhZ0xlYXZl
RXZlbnQoIFFEcmFnTGVhdmVFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZHJvcEV2ZW50KCBR
RHJvcEV2ZW50ICogKTsKCgogICAgdmlydHVhbCB2b2lkIHNob3dFdmVudCggUVNob3dFdmVudCAq
ICk7CiAgICB2aXJ0dWFsIHZvaWQgaGlkZUV2ZW50KCBRSGlkZUV2ZW50ICogKTsKICAgIHZpcnR1
YWwgdm9pZCBjdXN0b21FdmVudCggUUN1c3RvbUV2ZW50ICogKTsKCiMgNDYzICIvYW1kL3NpZ21h
LzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3F3aWRnZXQu
aCIKCiAgICB2aXJ0dWFsIGJvb2wgeDExRXZlbnQoIFhFdmVudCAqICk7CQkgCgoKCgoKCiAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlTWFzaygpOwoKICAgICAKCnByb3RlY3RlZDoKCiAgICB2aXJ0dWFs
IHZvaWQgc3R5bGVDaGFuZ2UoIFFTdHlsZSYgKTsKCiAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlZENo
YW5nZSggYm9vbCApOwogICAgdmlydHVhbCB2b2lkIGJhY2tncm91bmRDb2xvckNoYW5nZSggY29u
c3QgUUNvbG9yICYgKTsKICAgIHZpcnR1YWwgdm9pZCBiYWNrZ3JvdW5kUGl4bWFwQ2hhbmdlKCBj
b25zdCBRUGl4bWFwICYgKTsKCiAgICB2aXJ0dWFsIHZvaWQgcGFsZXR0ZUNoYW5nZSggY29uc3Qg
UVBhbGV0dGUgJiApOwoKICAgIHZpcnR1YWwgdm9pZCBmb250Q2hhbmdlKCBjb25zdCBRRm9udCAm
ICk7CgogICAgaW50CQkgbWV0cmljKCBpbnQgKQljb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgY3Jl
YXRlKCBXSWQgPSAwLCBib29sIGluaXRpYWxpemVXaW5kb3cgPSAxICwKCQkJIGJvb2wgZGVzdHJv
eU9sZFdpbmRvdyA9IDEgICk7CiAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSggYm9vbCBkZXN0cm95
V2luZG93ID0gMSAsCgkJCSAgYm9vbCBkZXN0cm95U3ViV2luZG93cyA9IDEgICk7CiAgICB1aW50
CSBnZXRXU3RhdGUoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRXU3RhdGUoIHVpbnQgKTsK
ICAgIHZvaWQJIGNsZWFyV1N0YXRlKCB1aW50IG4gKTsKICAgIFdGbGFncwkgZ2V0V0ZsYWdzKCkg
Y29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0V0ZsYWdzKCBXRmxhZ3MgKTsKICAgIHZvaWQJIGNs
ZWFyV0ZsYWdzKCBXRmxhZ3MgbiApOwoKICAgIHZpcnR1YWwgdm9pZCBzZXRGUmVjdCggY29uc3Qg
UVJlY3QgJiApOwogICAgdmlydHVhbCB2b2lkIHNldENSZWN0KCBjb25zdCBRUmVjdCAmICk7Cgog
ICAgdmlydHVhbCBib29sIGZvY3VzTmV4dFByZXZDaGlsZCggYm9vbCBuZXh0ICk7CgogICAgUVdF
eHRyYQkqZXh0cmFEYXRhKCk7CiAgICBRVExXRXh0cmEJKnRvcERhdGEoKTsKICAgIFFGb2N1c0Rh
dGEJKmZvY3VzRGF0YSgpOwoKICAgIHZpcnR1YWwgdm9pZCBzZXRLZXlDb21wcmVzc2lvbihib29s
KTsKICAgIHZpcnR1YWwgdm9pZCBzZXRNaWNyb0ZvY3VzSGludChpbnQgeCwgaW50IHksIGludCB3
LCBpbnQgaCwgYm9vbCB0ZXh0PSAxICk7Cgpwcml2YXRlICA6CiAgICB2b2lkCSBmb2N1c1Byb3h5
RGVzdHJveWVkKCk7Cgpwcml2YXRlOgogICAgdm9pZAkgc2V0Rm9udFN5cygpOwoKICAgIHZvaWQg
CSBzZXRMYXlvdXQoIFFMYXlvdXQgKmwgKTsKCiAgICB2b2lkCSBzZXRXaW5JZCggV0lkICk7CiAg
ICB2b2lkCSBzaG93V2luZG93KCk7CiAgICB2b2lkCSBoaWRlV2luZG93KCk7CiAgICB2b2lkCSBz
ZW5kU2hvd0V2ZW50c1RvQ2hpbGRyZW4oIGJvb2wgc3BvbnRhbmVvdXMgKTsKICAgIHZvaWQJIHNl
bmRIaWRlRXZlbnRzVG9DaGlsZHJlbiggYm9vbCBzcG9udGFuZW91cyApOwogICAgdm9pZAkgY3Jl
YXRlVExFeHRyYSgpOwogICAgdm9pZAkgY3JlYXRlRXh0cmEoKTsKICAgIHZvaWQJIGRlbGV0ZUV4
dHJhKCk7CiAgICB2b2lkCSBjcmVhdGVTeXNFeHRyYSgpOwogICAgdm9pZAkgZGVsZXRlU3lzRXh0
cmEoKTsKICAgIHZvaWQJIGNyZWF0ZVRMU3lzRXh0cmEoKTsKICAgIHZvaWQJIGRlbGV0ZVRMU3lz
RXh0cmEoKTsKICAgIHZvaWQJIGRlYWN0aXZhdGVXaWRnZXRDbGVhbnVwKCk7CiAgICB2b2lkCSBp
bnRlcm5hbFNldEdlb21ldHJ5KCBpbnQsIGludCwgaW50LCBpbnQsIGJvb2wgKTsKICAgIHZvaWQJ
IHJlcGFyZW50Rm9jdXNXaWRnZXRzKCBRV2lkZ2V0ICogKTsKICAgIFFGb2N1c0RhdGEJKmZvY3Vz
RGF0YSggYm9vbCBjcmVhdGUgKTsKICAgIHZvaWQgICAgICAgICBzZXRCYWNrZ3JvdW5kRnJvbU1v
ZGUoKTsKICAgIHZvaWQgICAgICAgICBzZXRCYWNrZ3JvdW5kQ29sb3JEaXJlY3QoIGNvbnN0IFFD
b2xvciAmICk7CiAgICB2b2lkICAgCSBzZXRCYWNrZ3JvdW5kUGl4bWFwRGlyZWN0KCBjb25zdCBR
UGl4bWFwICYgKTsKICAgIHZvaWQgICAgICAgICBzZXRCYWNrZ3JvdW5kTW9kZURpcmVjdCggQmFj
a2dyb3VuZE1vZGUgKTsKICAgIHZvaWQgICAgICAgICBzZXRCYWNrZ3JvdW5kRW1wdHkoKTsKCiAg
ICB2b2lkICAgICAgICAgc2V0QmFja2dyb3VuZFgxMVJlbGF0aXZlKCk7CgoKICAgIFdJZAkJIHdp
bmlkOwogICAgdWludAkgd2lkZ2V0X3N0YXRlOwogICAgdWludAkgd2lkZ2V0X2ZsYWdzOwogICAg
dWludAkgcHJvcGFnYXRlX2ZvbnQgOiAyOyAgCiAgICB1aW50CSBwcm9wYWdhdGVfcGFsZXR0ZSA6
IDI7ICAKICAgIHVpbnQJIGZvY3VzX3BvbGljeSA6IDQ7CiAgICB1aW50IAkgb3duX2ZvbnQgOjE7
CiAgICB1aW50IAkgb3duX3BhbGV0dGUgOjE7CiAgICB1aW50IAkgc2l6ZWhpbnRfZm9yY2VkIDox
OwogICAgdWludCAJIGlzX2Nsb3NpbmcgOjE7CiAgICB1aW50IAkgaW5fc2hvdyA6IDE7CiAgICBR
UG9pbnQJIGZwb3M7CiAgICBRUmVjdAkgY3JlY3Q7CiAgICBRQ29sb3IJIGJnX2NvbDsKCiAgICBR
UGFsZXR0ZQkgcGFsOwoKICAgIFFGb250CSBmbnQ7CgogICAgUUxheW91dCAJKmxheV9vdXQ7Cgog
ICAgUVdFeHRyYQkqZXh0cmE7CiMgNTg5ICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0
LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3F3aWRnZXQuaCIKCgogICAgc3RhdGljIHZvaWQJ
IGNyZWF0ZU1hcHBlcigpOwogICAgc3RhdGljIHZvaWQJIGRlc3Ryb3lNYXBwZXIoKTsKICAgIHN0
YXRpYyBRV2lkZ2V0TGlzdAkgKndMaXN0KCk7CiAgICBzdGF0aWMgUVdpZGdldExpc3QJICp0bHdM
aXN0KCk7CiAgICBzdGF0aWMgUVdpZGdldE1hcHBlciAqbWFwcGVyOwogICAgZnJpZW5kIGNsYXNz
IFFBcHBsaWNhdGlvbjsKICAgIGZyaWVuZCBjbGFzcyBRQmFzZUFwcGxpY2F0aW9uOwogICAgZnJp
ZW5kIGNsYXNzIFFQYWludGVyOwogICAgZnJpZW5kIGNsYXNzIFFGb250TWV0cmljczsKICAgIGZy
aWVuZCBjbGFzcyBRRm9udEluZm87CiAgICBmcmllbmQgY2xhc3MgUUVUV2lkZ2V0OwoKICAgIGZy
aWVuZCBjbGFzcyBRTGF5b3V0OwoKCgpwcml2YXRlOgkgCgogICAgUVdpZGdldCggY29uc3QgUVdp
ZGdldCAmICk7CiAgICBRV2lkZ2V0ICZvcGVyYXRvcj0oIGNvbnN0IFFXaWRnZXQgJiApOwoKCnB1
YmxpYzogIAoKICAgIHZvaWQgc2V0UGFsZXR0ZSggY29uc3QgUVBhbGV0dGUgJiwgYm9vbCBpUmVh
bGx5TWVhbkl0ICk7CgogICAgdm9pZCBzZXRGb250KCBjb25zdCBRRm9udCAmLCBib29sIGlSZWFs
bHlNZWFuSXQgKTsKfTsKCgppbmxpbmUgYm9vbCBRV2lkZ2V0Ojp0ZXN0V1N0YXRlKCB1aW50IGYg
KSBjb25zdAp7IHJldHVybiAod2lkZ2V0X3N0YXRlICYgZikgIT0gMDsgfQoKaW5saW5lIGJvb2wg
UVdpZGdldDo6dGVzdFdGbGFncyggV0ZsYWdzIGYgKSBjb25zdAp7IHJldHVybiAod2lkZ2V0X2Zs
YWdzICYgZikgIT0gMDsgfQoKCmlubGluZSBXSWQgUVdpZGdldDo6d2luSWQoKSBjb25zdAp7IHJl
dHVybiB3aW5pZDsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aXNUb3BMZXZlbCgpIGNvbnN0Cnsg
cmV0dXJuIHRlc3RXRmxhZ3MoV1R5cGVfVG9wTGV2ZWwpOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0
Ojppc01vZGFsKCkgY29uc3QKeyByZXR1cm4gdGVzdFdGbGFncyhXVHlwZV9Nb2RhbCk7IH0KCmlu
bGluZSBib29sIFFXaWRnZXQ6OmlzUG9wdXAoKSBjb25zdAp7IHJldHVybiB0ZXN0V0ZsYWdzKFdU
eXBlX1BvcHVwKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aXNEZXNrdG9wKCkgY29uc3QKeyBy
ZXR1cm4gdGVzdFdGbGFncyhXVHlwZV9EZXNrdG9wKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6
aXNFbmFibGVkKCkgY29uc3QKeyByZXR1cm4gIXRlc3RXU3RhdGUoV1N0YXRlX0Rpc2FibGVkKTsg
fQoKaW5saW5lIGNvbnN0IFFSZWN0ICZRV2lkZ2V0OjpnZW9tZXRyeSgpIGNvbnN0CnsgcmV0dXJu
IGNyZWN0OyB9CgppbmxpbmUgaW50IFFXaWRnZXQ6OngoKSBjb25zdAp7IHJldHVybiBmcG9zLngo
KTsgfQoKaW5saW5lIGludCBRV2lkZ2V0Ojp5KCkgY29uc3QKeyByZXR1cm4gZnBvcy55KCk7IH0K
CmlubGluZSBRUG9pbnQgUVdpZGdldDo6cG9zKCkgY29uc3QKeyByZXR1cm4gZnBvczsgfQoKaW5s
aW5lIFFTaXplIFFXaWRnZXQ6OnNpemUoKSBjb25zdAp7IHJldHVybiBjcmVjdC5zaXplKCk7IH0K
CmlubGluZSBpbnQgUVdpZGdldDo6d2lkdGgoKSBjb25zdAp7IHJldHVybiBjcmVjdC53aWR0aCgp
OyB9CgppbmxpbmUgaW50IFFXaWRnZXQ6OmhlaWdodCgpIGNvbnN0CnsgcmV0dXJuIGNyZWN0Lmhl
aWdodCgpOyB9CgppbmxpbmUgUVJlY3QgUVdpZGdldDo6cmVjdCgpIGNvbnN0CnsgcmV0dXJuIFFS
ZWN0KDAsMCxjcmVjdC53aWR0aCgpLGNyZWN0LmhlaWdodCgpKTsgfQoKaW5saW5lIGludCBRV2lk
Z2V0OjptaW5pbXVtV2lkdGgoKSBjb25zdAp7IHJldHVybiBtaW5pbXVtU2l6ZSgpLndpZHRoKCk7
IH0KCmlubGluZSBpbnQgUVdpZGdldDo6bWluaW11bUhlaWdodCgpIGNvbnN0CnsgcmV0dXJuIG1p
bmltdW1TaXplKCkuaGVpZ2h0KCk7IH0KCmlubGluZSBpbnQgUVdpZGdldDo6bWF4aW11bVdpZHRo
KCkgY29uc3QKeyByZXR1cm4gbWF4aW11bVNpemUoKS53aWR0aCgpOyB9CgppbmxpbmUgaW50IFFX
aWRnZXQ6Om1heGltdW1IZWlnaHQoKSBjb25zdAp7IHJldHVybiBtYXhpbXVtU2l6ZSgpLmhlaWdo
dCgpOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpzZXRNaW5pbXVtU2l6ZSggY29uc3QgUVNpemUg
JnMgKQp7IHNldE1pbmltdW1TaXplKHMud2lkdGgoKSxzLmhlaWdodCgpKTsgfQoKaW5saW5lIHZv
aWQgUVdpZGdldDo6c2V0TWF4aW11bVNpemUoIGNvbnN0IFFTaXplICZzICkKeyBzZXRNYXhpbXVt
U2l6ZShzLndpZHRoKCkscy5oZWlnaHQoKSk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OnNldFNp
emVJbmNyZW1lbnQoIGNvbnN0IFFTaXplICZzICkKeyBzZXRTaXplSW5jcmVtZW50KHMud2lkdGgo
KSxzLmhlaWdodCgpKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6c2V0QmFzZVNpemUoIGNvbnN0
IFFTaXplICZzICkKeyBzZXRCYXNlU2l6ZShzLndpZHRoKCkscy5oZWlnaHQoKSk7IH0KCmlubGlu
ZSBjb25zdCBRQ29sb3IgJlFXaWRnZXQ6OmJhY2tncm91bmRDb2xvcigpIGNvbnN0CnsgcmV0dXJu
IGJnX2NvbDsgfQoKCmlubGluZSBjb25zdCBRUGFsZXR0ZSAmUVdpZGdldDo6cGFsZXR0ZSgpIGNv
bnN0CnsgcmV0dXJuIHBhbDsgfQoKCmlubGluZSBRRm9udCBRV2lkZ2V0Ojpmb250KCkgY29uc3QK
eyByZXR1cm4gZm50OyB9CgppbmxpbmUgUUZvbnRNZXRyaWNzIFFXaWRnZXQ6OmZvbnRNZXRyaWNz
KCkgY29uc3QKeyByZXR1cm4gUUZvbnRNZXRyaWNzKGZvbnQoKSk7IH0KCmlubGluZSBRRm9udElu
Zm8gUVdpZGdldDo6Zm9udEluZm8oKSBjb25zdAp7IHJldHVybiBRRm9udEluZm8oZm9udCgpKTsg
fQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aGFzTW91c2VUcmFja2luZygpIGNvbnN0CnsgcmV0dXJu
IHRlc3RXU3RhdGUoV1N0YXRlX01vdXNlVHJhY2tpbmcpOyB9CgppbmxpbmUgYm9vbCAgUVdpZGdl
dDo6aXNGb2N1c0VuYWJsZWQoKSBjb25zdAp7IHJldHVybiAoRm9jdXNQb2xpY3kpZm9jdXNfcG9s
aWN5ICE9IE5vRm9jdXM7IH0KCmlubGluZSBRV2lkZ2V0OjpGb2N1c1BvbGljeSBRV2lkZ2V0Ojpm
b2N1c1BvbGljeSgpIGNvbnN0CnsgcmV0dXJuIChGb2N1c1BvbGljeSlmb2N1c19wb2xpY3k7IH0K
CmlubGluZSBib29sIFFXaWRnZXQ6OmlzVXBkYXRlc0VuYWJsZWQoKSBjb25zdAp7IHJldHVybiAh
dGVzdFdTdGF0ZShXU3RhdGVfQmxvY2tVcGRhdGVzKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6
dXBkYXRlKCBjb25zdCBRUmVjdCAmciApCnsgdXBkYXRlKCByLngoKSwgci55KCksIHIud2lkdGgo
KSwgci5oZWlnaHQoKSApOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpyZXBhaW50KCkKeyByZXBh
aW50KCAwLCAwLCBjcmVjdC53aWR0aCgpLCBjcmVjdC5oZWlnaHQoKSwgMSAgKTsgfQoKaW5saW5l
IHZvaWQgUVdpZGdldDo6cmVwYWludCggYm9vbCBlcmFzZSApCnsgcmVwYWludCggMCwgMCwgY3Jl
Y3Qud2lkdGgoKSwgY3JlY3QuaGVpZ2h0KCksIGVyYXNlICk7IH0KCmlubGluZSB2b2lkIFFXaWRn
ZXQ6OnJlcGFpbnQoIGNvbnN0IFFSZWN0ICZyLCBib29sIGVyYXNlICkKeyByZXBhaW50KCByLngo
KSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSwgZXJhc2UgKTsgfQoKaW5saW5lIHZvaWQg
UVdpZGdldDo6ZXJhc2UoKQp7IGVyYXNlKCAwLCAwLCBjcmVjdC53aWR0aCgpLCBjcmVjdC5oZWln
aHQoKSApOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjplcmFzZSggY29uc3QgUVJlY3QgJnIgKQp7
IGVyYXNlKCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSApOyB9CgppbmxpbmUg
Ym9vbCBRV2lkZ2V0OjpjbG9zZSgpCnsgcmV0dXJuIGNsb3NlKCAwICApOyB9CgppbmxpbmUgYm9v
bCBRV2lkZ2V0Ojppc1Zpc2libGUoKSBjb25zdAp7IHJldHVybiB0ZXN0V1N0YXRlKFdTdGF0ZV9W
aXNpYmxlKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aXNIaWRkZW4oKSBjb25zdAp7IHJldHVy
biB0ZXN0V1N0YXRlKFdTdGF0ZV9Gb3JjZUhpZGUpOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0Ojpt
b3ZlKCBjb25zdCBRUG9pbnQgJnAgKQp7IG1vdmUoIHAueCgpLCBwLnkoKSApOyB9CgppbmxpbmUg
dm9pZCBRV2lkZ2V0OjpyZXNpemUoIGNvbnN0IFFTaXplICZzICkKeyByZXNpemUoIHMud2lkdGgo
KSwgcy5oZWlnaHQoKSk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OnNldEdlb21ldHJ5KCBjb25z
dCBRUmVjdCAmciApCnsgc2V0R2VvbWV0cnkoIHIubGVmdCgpLCByLnRvcCgpLCByLndpZHRoKCks
IHIuaGVpZ2h0KCkgKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6ZHJhd1RleHQoIGNvbnN0IFFQ
b2ludCAmcCwgY29uc3QgUVN0cmluZyAmcyApCnsgZHJhd1RleHQoIHAueCgpLCBwLnkoKSwgcyAp
OyB9CgppbmxpbmUgUVdpZGdldCAqUVdpZGdldDo6cGFyZW50V2lkZ2V0KCkgY29uc3QKeyByZXR1
cm4gKFFXaWRnZXQgKilRT2JqZWN0OjpwYXJlbnQoKTsgfQoKaW5saW5lIFFXaWRnZXRNYXBwZXIg
KlFXaWRnZXQ6OndtYXBwZXIoKQp7IHJldHVybiBtYXBwZXI7IH0KCmlubGluZSB1aW50IFFXaWRn
ZXQ6OmdldFdTdGF0ZSgpIGNvbnN0CnsgcmV0dXJuIHdpZGdldF9zdGF0ZTsgfQoKaW5saW5lIHZv
aWQgUVdpZGdldDo6c2V0V1N0YXRlKCB1aW50IGYgKQp7IHdpZGdldF9zdGF0ZSB8PSBmOyB9Cgpp
bmxpbmUgdm9pZCBRV2lkZ2V0OjpjbGVhcldTdGF0ZSggdWludCBmICkKeyB3aWRnZXRfc3RhdGUg
Jj0gfmY7IH0KCmlubGluZSBRdDo6V0ZsYWdzIFFXaWRnZXQ6OmdldFdGbGFncygpIGNvbnN0Cnsg
cmV0dXJuIHdpZGdldF9mbGFnczsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6c2V0V0ZsYWdzKCBX
RmxhZ3MgZiApCnsgd2lkZ2V0X2ZsYWdzIHw9IGY7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OmNs
ZWFyV0ZsYWdzKCBXRmxhZ3MgZiApCnsgd2lkZ2V0X2ZsYWdzICY9IH5mOyB9CgppbmxpbmUgdm9p
ZCBRV2lkZ2V0Ojpjb25zdFBvbGlzaCgpIGNvbnN0CnsKICAgIGlmICggIXRlc3RXU3RhdGUoV1N0
YXRlX1BvbGlzaGVkKSApIHsKCVFXaWRnZXQqIHRoYXQgPSAoUVdpZGdldCopIHRoaXM7Cgl0aGF0
LT5wb2xpc2goKTsKICAgICAgICB0aGF0LT5zZXRXU3RhdGUoV1N0YXRlX1BvbGlzaGVkKTsgIAog
ICAgfQp9CgppbmxpbmUgYm9vbCBRV2lkZ2V0Ojpvd25DdXJzb3IoKSBjb25zdAp7CiAgICByZXR1
cm4gdGVzdFdTdGF0ZSggV1N0YXRlX093bkN1cnNvciApOwp9CgppbmxpbmUgYm9vbCBRV2lkZ2V0
Ojpvd25Gb250KCkgY29uc3QKewogICAgcmV0dXJuIG93bl9mb250Owp9CgppbmxpbmUgYm9vbCBR
V2lkZ2V0Ojpvd25QYWxldHRlKCkgY29uc3QKewogICAgcmV0dXJuIG93bl9wYWxldHRlOwp9CgoK
IAogCiAKCmNsYXNzIFFGb2N1c0RhdGE7CmNsYXNzIFFXU01hbmFnZXI7CgoKCgpzdHJ1Y3QgUVRM
V0V4dHJhIHsKICAgIFFTdHJpbmcgIGNhcHRpb247CQkJCSAKICAgIFFTdHJpbmcgIGljb25UZXh0
OwkJCQkgCiAgICBRUGl4bWFwICppY29uOwkJCQkgCiAgICBRRm9jdXNEYXRhICpmb2N1c0RhdGE7
CQkJIAogICAgUVNpemUgICAgZnNpemU7CQkJCSAKICAgIHNob3J0ICAgIGluY3csIGluY2g7CQkJ
IAogICAgdWludCAgICAgaWNvbmljOiAxOwkJCQkgCiAgICB1aW50ICAgICBmdWxsc2NyZWVuIDog
MTsJCQkgCiAgICB1aW50ICAgICBzaG93TW9kZTogMjsJCQkgCiAgICBzaG9ydCAgICBiYXNldywg
YmFzZWg7CQkJIAoKICAgIFdJZAkgICAgIHBhcmVudFdpbklkOwkJCSAKICAgIHVpbnQgICAgIGVt
YmVkZGVkIDogMTsJCQkgCiAgICB1aW50ICAgICByZXNlcnZlZDogMjsJCQkgCiAgICB1aW50ICAg
ICBkbmQgOiAxOyAJCQkJIAogICAgdWludCAgICAgdXNwb3MgOiAxOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICB1aW50ICAgICB1c3NpemUgOiAxOyAgICAgICAgICAgICAgICAgICAgICAg
ICAKICAgIHZvaWQgICAgKnhpYzsJCQkJIAoKCgoKCgoKCiAgICBRUmVjdCAgICBub3JtYWxHZW9t
ZXRyeTsJCQkgCn07CgoKCgogCgpzdHJ1Y3QgUVdFeHRyYSB7CiAgICBRX0lOVDE2ICBtaW53LCBt
aW5oOwkJCSAKICAgIFFfSU5UMTYgIG1heHcsIG1heGg7CQkJIAogICAgUVBpeG1hcCAqYmdfcGl4
OwkJCQkgCiAgICBRV2lkZ2V0ICpmb2N1c19wcm94eTsKCiAgICBRQ3Vyc29yICpjdXJzOwoKICAg
IFFUTFdFeHRyYSAqdG9wZXh0cmE7CQkJIAoKCgoKICAgIFdJZAkgICAgIHhEbmRQcm94eTsJCQkJ
IAoKCgoKICAgIGNoYXIgICAgIGJnX21vZGU7CQkJCSAKCiAgICBRU3R5bGUqIHN0eWxlOwoKICAg
IFFSZWN0IG1pY3JvX2ZvY3VzX2hpbnQ7ICAgICAgICAgICAgICAgICAgICAgIAogICAgUVNpemVQ
b2xpY3kgc2l6ZV9wb2xpY3k7CiAgICB2b2lkICogcG9zdGVkX2V2ZW50czsJCQkgCn07CgoKCiMg
NDIgIi9hbWQvc2lnbWEvMC9zcmMvYWxwaGEtZGVjLW9zZjQuMC93b3JrZGlyL3F0LTIuMi4zL2lu
Y2x1ZGUvcWFwcGxpY2F0aW9uLmgiIDIKCiMgMSAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMt
b3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xYXNjaWlkaWN0LmgiIDEKIAoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnRlbXBsYXRlPGNsYXNzIHR5cGU+
IGNsYXNzICAgUUFzY2lpRGljdCA6IHB1YmxpYyBRR0RpY3QKewpwdWJsaWM6CiAgICBRQXNjaWlE
aWN0KGludCBzaXplPTE3LCBib29sIGNhc2VTZW5zaXRpdmU9IDEgLCBib29sIGNvcHlLZXlzPSAx
ICApCgk6IFFHRGljdChzaXplLEFzY2lpS2V5LGNhc2VTZW5zaXRpdmUsY29weUtleXMpIHt9CiAg
ICBRQXNjaWlEaWN0KCBjb25zdCBRQXNjaWlEaWN0PHR5cGU+ICZkICkgOiBRR0RpY3QoZCkge30K
ICAgflFBc2NpaURpY3QoKQkJCXsgY2xlYXIoKTsgfQogICAgUUFzY2lpRGljdDx0eXBlPiAmb3Bl
cmF0b3I9KGNvbnN0IFFBc2NpaURpY3Q8dHlwZT4gJmQpCgkJCXsgcmV0dXJuIChRQXNjaWlEaWN0
PHR5cGU+JilRR0RpY3Q6Om9wZXJhdG9yPShkKTsgfQogICAgdWludCAgY291bnQoKSAgIGNvbnN0
CQl7IHJldHVybiBRR0RpY3Q6OmNvdW50KCk7IH0KICAgIHVpbnQgIHNpemUoKSAgICBjb25zdAkJ
eyByZXR1cm4gUUdEaWN0OjpzaXplKCk7IH0KICAgIGJvb2wgIGlzRW1wdHkoKSBjb25zdAkJeyBy
ZXR1cm4gUUdEaWN0Ojpjb3VudCgpID09IDA7IH0KCiAgICB2b2lkICBpbnNlcnQoIGNvbnN0IGNo
YXIgKmssIGNvbnN0IHR5cGUgKmQgKQoJCQkJCXsgUUdEaWN0Ojpsb29rX2FzY2lpKGssKEl0ZW0p
ZCwxKTsgfQogICAgdm9pZCAgcmVwbGFjZSggY29uc3QgY2hhciAqaywgY29uc3QgdHlwZSAqZCAp
CgkJCQkJeyBRR0RpY3Q6Omxvb2tfYXNjaWkoaywoSXRlbSlkLDIpOyB9CiAgICBib29sICByZW1v
dmUoIGNvbnN0IGNoYXIgKmsgKQl7IHJldHVybiBRR0RpY3Q6OnJlbW92ZV9hc2NpaShrKTsgfQog
ICAgdHlwZSAqdGFrZSggY29uc3QgY2hhciAqayApCQl7IHJldHVybiAodHlwZSAqKVFHRGljdDo6
dGFrZV9hc2NpaShrKTsgfQogICAgdHlwZSAqZmluZCggY29uc3QgY2hhciAqayApIGNvbnN0CgkJ
eyByZXR1cm4gKHR5cGUgKikoKFFHRGljdCopdGhpcyktPlFHRGljdDo6bG9va19hc2NpaShrLDAs
MCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yW10oIGNvbnN0IGNoYXIgKmsgKSBjb25zdAoJCXsgcmV0
dXJuICh0eXBlICopKChRR0RpY3QqKXRoaXMpLT5RR0RpY3Q6Omxvb2tfYXNjaWkoaywwLDApOyB9
CgogICAgdm9pZCAgY2xlYXIoKQkJCXsgUUdEaWN0OjpjbGVhcigpOyB9CiAgICB2b2lkICByZXNp
emUoIHVpbnQgbiApCQl7IFFHRGljdDo6cmVzaXplKG4pOyB9CiAgICB2b2lkICBzdGF0aXN0aWNz
KCkgY29uc3QJCXsgUUdEaWN0OjpzdGF0aXN0aWNzKCk7IH0KcHJpdmF0ZToKICAgIHZvaWQgIGRl
bGV0ZUl0ZW0oIEl0ZW0gZCApCQl7IGlmICggZGVsX2l0ZW0gKSBkZWxldGUgKHR5cGUgKilkOyB9
Cn07CgoKdGVtcGxhdGU8Y2xhc3MgdHlwZT4gY2xhc3MgICBRQXNjaWlEaWN0SXRlcmF0b3IgOiBw
dWJsaWMgUUdEaWN0SXRlcmF0b3IKewpwdWJsaWM6CiAgICBRQXNjaWlEaWN0SXRlcmF0b3IoY29u
c3QgUUFzY2lpRGljdDx0eXBlPiAmZCkKCTogUUdEaWN0SXRlcmF0b3IoKFFHRGljdCAmKWQpIHt9
CiAgIH5RQXNjaWlEaWN0SXRlcmF0b3IoKSAgICAgIHt9CiAgICB1aW50ICBjb3VudCgpICAgY29u
c3QgICAgIHsgcmV0dXJuIGRpY3QtPmNvdW50KCk7IH0KICAgIGJvb2wgIGlzRW1wdHkoKSBjb25z
dCAgICAgeyByZXR1cm4gZGljdC0+Y291bnQoKSA9PSAwOyB9CiAgICB0eXBlICp0b0ZpcnN0KCkJ
ICAgICAgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6dG9GaXJzdCgpOyB9CiAgICBv
cGVyYXRvciB0eXBlICooKSBjb25zdCAgIHsgcmV0dXJuICh0eXBlICopUUdEaWN0SXRlcmF0b3I6
OmdldCgpOyB9CiAgICB0eXBlICAgKmN1cnJlbnQoKSBjb25zdCAgIHsgcmV0dXJuICh0eXBlICop
UUdEaWN0SXRlcmF0b3I6OmdldCgpOyB9CiAgICBjb25zdCBjaGFyICpjdXJyZW50S2V5KCkgY29u
c3QgeyByZXR1cm4gUUdEaWN0SXRlcmF0b3I6OmdldEtleUFzY2lpKCk7IH0KICAgIHR5cGUgKm9w
ZXJhdG9yKCkoKQkgICAgICB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpvcGVyYXRv
cigpKCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yKysoKQkgICAgICB7IHJldHVybiAodHlwZSAqKVFH
RGljdEl0ZXJhdG9yOjpvcGVyYXRvcisrKCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yKz0odWludCBq
KSAgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6b3BlcmF0b3IrPShqKTt9Cn07CgoK
CiMgNDMgIi9hbWQvc2lnbWEvMC9zcmMvYWxwaGEtZGVjLW9zZjQuMC93b3JrZGlyL3F0LTIuMi4z
L2luY2x1ZGUvcWFwcGxpY2F0aW9uLmgiIDIKCgojIDEgIi9hbWQvc2lnbWEvMC9zcmMvYWxwaGEt
ZGVjLW9zZjQuMC93b3JrZGlyL3F0LTIuMi4zL2luY2x1ZGUvcXRyYW5zbGF0b3IuaCIgMQogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL2FtZC9zaWdtYS8w
L3NyYy9hbHBoYS1kZWMtb3NmNC4wL3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xaW50ZGljdC5o
IiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0ZW1wbGF0
ZTxjbGFzcyB0eXBlPiBjbGFzcyAgIFFJbnREaWN0IDogcHVibGljIFFHRGljdAp7CnB1YmxpYzoK
ICAgIFFJbnREaWN0KGludCBzaXplPTE3KSA6IFFHRGljdChzaXplLEludEtleSwwLDApIHt9CiAg
ICBRSW50RGljdCggY29uc3QgUUludERpY3Q8dHlwZT4gJmQgKSA6IFFHRGljdChkKSB7fQogICB+
UUludERpY3QoKQkJCQl7IGNsZWFyKCk7IH0KICAgIFFJbnREaWN0PHR5cGU+ICZvcGVyYXRvcj0o
Y29uc3QgUUludERpY3Q8dHlwZT4gJmQpCgkJCXsgcmV0dXJuIChRSW50RGljdDx0eXBlPiYpUUdE
aWN0OjpvcGVyYXRvcj0oZCk7IH0KICAgIHVpbnQgIGNvdW50KCkgICBjb25zdAkJeyByZXR1cm4g
UUdEaWN0Ojpjb3VudCgpOyB9CiAgICB1aW50ICBzaXplKCkgICAgY29uc3QJCXsgcmV0dXJuIFFH
RGljdDo6c2l6ZSgpOyB9CiAgICBib29sICBpc0VtcHR5KCkgY29uc3QJCXsgcmV0dXJuIFFHRGlj
dDo6Y291bnQoKSA9PSAwOyB9CiAgICB2b2lkICBpbnNlcnQoIGxvbmcgaywgY29uc3QgdHlwZSAq
ZCApCgkJCQkJeyBRR0RpY3Q6Omxvb2tfaW50KGssKEl0ZW0pZCwxKTsgfQogICAgdm9pZCAgcmVw
bGFjZSggbG9uZyBrLCBjb25zdCB0eXBlICpkICkKCQkJCQl7IFFHRGljdDo6bG9va19pbnQoaywo
SXRlbSlkLDIpOyB9CiAgICBib29sICByZW1vdmUoIGxvbmcgayApCQl7IHJldHVybiBRR0RpY3Q6
OnJlbW92ZV9pbnQoayk7IH0KICAgIHR5cGUgKnRha2UoIGxvbmcgayApCQl7IHJldHVybiAodHlw
ZSopUUdEaWN0Ojp0YWtlX2ludChrKTsgfQogICAgdHlwZSAqZmluZCggbG9uZyBrICkgY29uc3QK
CQl7IHJldHVybiAodHlwZSAqKSgoUUdEaWN0Kil0aGlzKS0+UUdEaWN0Ojpsb29rX2ludChrLDAs
MCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yW10oIGxvbmcgayApIGNvbnN0CgkJeyByZXR1cm4gKHR5
cGUgKikoKFFHRGljdCopdGhpcyktPlFHRGljdDo6bG9va19pbnQoaywwLDApOyB9CiAgICB2b2lk
ICBjbGVhcigpCQkJeyBRR0RpY3Q6OmNsZWFyKCk7IH0KICAgIHZvaWQgIHJlc2l6ZSggdWludCBu
ICkJCXsgUUdEaWN0OjpyZXNpemUobik7IH0KICAgIHZvaWQgIHN0YXRpc3RpY3MoKSBjb25zdAkJ
eyBRR0RpY3Q6OnN0YXRpc3RpY3MoKTsgfQpwcml2YXRlOgogICAgdm9pZCAgZGVsZXRlSXRlbSgg
SXRlbSBkICk7Cn07CgoKdGVtcGxhdGU8PiBpbmxpbmUgdm9pZCBRSW50RGljdDx2b2lkPjo6ZGVs
ZXRlSXRlbSggUUNvbGxlY3Rpb246Okl0ZW0gKQp7Cn0KCgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPiBp
bmxpbmUgdm9pZCBRSW50RGljdDx0eXBlPjo6ZGVsZXRlSXRlbSggUUNvbGxlY3Rpb246Okl0ZW0g
ZCApCnsKICAgIGlmICggZGVsX2l0ZW0gKSBkZWxldGUgKHR5cGUgKilkOwp9Cgp0ZW1wbGF0ZTxj
bGFzcyB0eXBlPiBjbGFzcyAgIFFJbnREaWN0SXRlcmF0b3IgOiBwdWJsaWMgUUdEaWN0SXRlcmF0
b3IKewpwdWJsaWM6CiAgICBRSW50RGljdEl0ZXJhdG9yKGNvbnN0IFFJbnREaWN0PHR5cGU+ICZk
KSA6UUdEaWN0SXRlcmF0b3IoKFFHRGljdCAmKWQpIHt9CiAgIH5RSW50RGljdEl0ZXJhdG9yKCkJ
ICAgICAge30KICAgIHVpbnQgIGNvdW50KCkgICBjb25zdCAgICAgeyByZXR1cm4gZGljdC0+Y291
bnQoKTsgfQogICAgYm9vbCAgaXNFbXB0eSgpIGNvbnN0ICAgICB7IHJldHVybiBkaWN0LT5jb3Vu
dCgpID09IDA7IH0KICAgIHR5cGUgKnRvRmlyc3QoKQkgICAgICB7IHJldHVybiAodHlwZSAqKVFH
RGljdEl0ZXJhdG9yOjp0b0ZpcnN0KCk7IH0KICAgIG9wZXJhdG9yIHR5cGUgKigpICBjb25zdCAg
eyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6Z2V0KCk7IH0KICAgIHR5cGUgKmN1cnJl
bnQoKSAgICBjb25zdCAgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6Z2V0KCk7IH0K
ICAgIGxvbmcgIGN1cnJlbnRLZXkoKSBjb25zdCAgeyByZXR1cm4gUUdEaWN0SXRlcmF0b3I6Omdl
dEtleUludCgpOyB9CiAgICB0eXBlICpvcGVyYXRvcigpKCkJICAgICAgeyByZXR1cm4gKHR5cGUg
KilRR0RpY3RJdGVyYXRvcjo6b3BlcmF0b3IoKSgpOyB9CiAgICB0eXBlICpvcGVyYXRvcisrKCkJ
ICAgICAgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6b3BlcmF0b3IrKygpOyB9CiAg
ICB0eXBlICpvcGVyYXRvcis9KHVpbnQgaikgIHsgcmV0dXJuICh0eXBlICopUUdEaWN0SXRlcmF0
b3I6Om9wZXJhdG9yKz0oaik7fQp9OwoKCgojIDQ0ICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRl
Yy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3F0cmFuc2xhdG9yLmgiIDIKCgoKCgpj
bGFzcyBRVHJhbnNsYXRvclByaXZhdGU7CgoKY2xhc3MgICBRVHJhbnNsYXRvck1lc3NhZ2UKewpw
dWJsaWM6CiAgICBRVHJhbnNsYXRvck1lc3NhZ2UoKTsKICAgIFFUcmFuc2xhdG9yTWVzc2FnZSgg
Y29uc3QgY2hhciAqIGNvbnRleHQsCgkJCWNvbnN0IGNoYXIgKiBzb3VyY2VUZXh0LAoJCQljb25z
dCBjaGFyICogY29tbWVudCwKCQkJY29uc3QgUVN0cmluZyYgdHJhbnNsYXRpb24gPSBRU3RyaW5n
OjpudWxsICk7CiAgICBRVHJhbnNsYXRvck1lc3NhZ2UoIFFEYXRhU3RyZWFtICYgKTsKICAgIFFU
cmFuc2xhdG9yTWVzc2FnZSggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlICYgbSApOwoKICAgIFFU
cmFuc2xhdG9yTWVzc2FnZSAmIG9wZXJhdG9yPSggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlICYg
bSApOwoKICAgIHVpbnQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIGg7IH0KICAgIGNvbnN0IGNoYXIg
KmNvbnRleHQoKSBjb25zdCB7IHJldHVybiBjeDsgfQogICAgY29uc3QgY2hhciAqc291cmNlVGV4
dCgpIGNvbnN0IHsgcmV0dXJuIHN0OyB9CiAgICBjb25zdCBjaGFyICpjb21tZW50KCkgY29uc3Qg
eyByZXR1cm4gY207IH0KCiAgICB2b2lkIHNldFRyYW5zbGF0aW9uKCBjb25zdCBRU3RyaW5nICYg
dHJhbnNsYXRpb24gKSB7IHRuID0gdHJhbnNsYXRpb247IH0KICAgIFFTdHJpbmcgdHJhbnNsYXRp
b24oKSBjb25zdCB7IHJldHVybiB0bjsgfQoKICAgIGVudW0gUHJlZml4IHsgTm9QcmVmaXgsIEhh
c2gsIEhhc2hDb250ZXh0LCBIYXNoQ29udGV4dFNvdXJjZVRleHQsCiAgICAJCSAgSGFzaENvbnRl
eHRTb3VyY2VUZXh0Q29tbWVudCB9OwogICAgdm9pZCB3cml0ZSggUURhdGFTdHJlYW0gJiBzLCBi
b29sIHN0cmlwLAoJCVByZWZpeCBwcmVmaXggPSBIYXNoQ29udGV4dFNvdXJjZVRleHRDb21tZW50
ICkgY29uc3Q7CiAgICBQcmVmaXggY29tbW9uUHJlZml4KCBjb25zdCBRVHJhbnNsYXRvck1lc3Nh
Z2UmICkgY29uc3Q7CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRVHJhbnNsYXRvck1lc3Nh
Z2UmIG0gKSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVRyYW5zbGF0b3JNZXNz
YWdlJiBtICkgY29uc3QKICAgIHsgcmV0dXJuICFvcGVyYXRvcj09KCBtICk7IH0KICAgIGJvb2wg
b3BlcmF0b3I8KCBjb25zdCBRVHJhbnNsYXRvck1lc3NhZ2UmIG0gKSBjb25zdDsKICAgIGJvb2wg
b3BlcmF0b3I8PSggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlJiBtICkgY29uc3QKICAgIHsgcmV0
dXJuICFvcGVyYXRvcj4oIG0gKTsgfQogICAgYm9vbCBvcGVyYXRvcj4oIGNvbnN0IFFUcmFuc2xh
dG9yTWVzc2FnZSYgbSApIGNvbnN0CiAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjwoIG0gKTsg
fQogICAgYm9vbCBvcGVyYXRvcj49KCBjb25zdCBRVHJhbnNsYXRvck1lc3NhZ2UmIG0gKSBjb25z
dAogICAgeyByZXR1cm4gIW9wZXJhdG9yPCggbSApOyB9Cgpwcml2YXRlOgogICAgdWludCBoOwog
ICAgUUNTdHJpbmcgY3g7CiAgICBRQ1N0cmluZyBzdDsKICAgIFFDU3RyaW5nIGNtOwogICAgUVN0
cmluZyB0bjsKCiAgICBlbnVtIFRhZyB7IFRhZ19FbmQgPSAxLCBUYWdfU291cmNlVGV4dDE2LCBU
YWdfVHJhbnNsYXRpb24sIFRhZ19Db250ZXh0MTYsCgkgICAgICAgVGFnX0hhc2gsIFRhZ19Tb3Vy
Y2VUZXh0LCBUYWdfQ29udGV4dCwgVGFnX0NvbW1lbnQsCgkgICAgICAgVGFnX09ic29sZXRlMSB9
Owp9OwoKCmNsYXNzICAgUVRyYW5zbGF0b3I6IHB1YmxpYyBRT2JqZWN0CnsKICAgIHB1YmxpYzoJ
UU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0
KCk7CX0JY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7CXN0YXRpYyBRTWV0YU9iamVjdCog
c3RhdGljTWV0YU9iamVjdCgpOwlzdGF0aWMgUVN0cmluZyB0cihjb25zdCBjaGFyKik7IHN0YXRp
YyBRU3RyaW5nIHRyKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7IAlwcm90ZWN0ZWQ6CXZvaWQg
aW5pdE1ldGFPYmplY3QoKTsJcHJpdmF0ZToJc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOyAK
cHVibGljOgogICAgUVRyYW5zbGF0b3IoIFFPYmplY3QgKiBwYXJlbnQsIGNvbnN0IGNoYXIgKiBu
YW1lID0gMCApOwogICAgflFUcmFuc2xhdG9yKCk7CgogCiAgICBRU3RyaW5nIGZpbmQoIGNvbnN0
IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogKSBjb25zdDsKIAogICAgdmlydHVh
bCBRU3RyaW5nIGZpbmQoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICkgY29uc3Q7CiAKICAg
IFFUcmFuc2xhdG9yTWVzc2FnZSBmaW5kTWVzc2FnZSggY29uc3QgY2hhciAqLCBjb25zdCBjaGFy
ICosCgkJCQkgICAgY29uc3QgY2hhciAqICkgY29uc3Q7CgogICAgYm9vbCBsb2FkKCBjb25zdCBR
U3RyaW5nICYgZmlsZW5hbWUsCgkgICAgICAgY29uc3QgUVN0cmluZyAmIGRpcmVjdG9yeSA9IFFT
dHJpbmc6Om51bGwsCgkgICAgICAgY29uc3QgUVN0cmluZyAmIHNlYXJjaF9kZWxpbWl0ZXJzID0g
UVN0cmluZzo6bnVsbCwKCSAgICAgICBjb25zdCBRU3RyaW5nICYgc3VmZml4ID0gUVN0cmluZzo6
bnVsbCApOwoKICAgIGVudW0gU2F2ZU1vZGUgeyBFdmVyeXRoaW5nLCBTdHJpcHBlZCB9OwoKICAg
IGJvb2wgc2F2ZSggY29uc3QgUVN0cmluZyAmIGZpbGVuYW1lLCBTYXZlTW9kZSBtb2RlID0gRXZl
cnl0aGluZyApOwoKICAgIHZvaWQgY2xlYXIoKTsKCiAgICB2b2lkIGluc2VydCggY29uc3QgUVRy
YW5zbGF0b3JNZXNzYWdlJiApOwogCiAgICB2b2lkIGluc2VydCggY29uc3QgY2hhciAqLCBjb25z
dCBjaGFyICosIGNvbnN0IFFTdHJpbmcgJiApOwogICAgdm9pZCByZW1vdmUoIGNvbnN0IFFUcmFu
c2xhdG9yTWVzc2FnZSYgKTsKIAogICAgdm9pZCByZW1vdmUoIGNvbnN0IGNoYXIgKiwgY29uc3Qg
Y2hhciAqICk7CiAgICBib29sIGNvbnRhaW5zKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwg
Y29uc3QgY2hhciAqICkgY29uc3Q7CiAKICAgIGJvb2wgY29udGFpbnMoIGNvbnN0IGNoYXIgKiwg
Y29uc3QgY2hhciAqICkgY29uc3Q7CgogCiAKICAgIHZvaWQgc3F1ZWV6ZSggU2F2ZU1vZGUgKTsK
ICAgIHZvaWQgc3F1ZWV6ZSgpOwogICAgdm9pZCB1bnNxdWVlemUoKTsKCiAgICBRVmFsdWVMaXN0
PFFUcmFuc2xhdG9yTWVzc2FnZT4gbWVzc2FnZXMoKSBjb25zdDsKCnByaXZhdGU6CiAgICBRVHJh
bnNsYXRvclByaXZhdGUgKiBkOwoKcHJpdmF0ZToJIAoKICAgIFFUcmFuc2xhdG9yKCBjb25zdCBR
VHJhbnNsYXRvciAmICk7CiAgICBRVHJhbnNsYXRvciAmb3BlcmF0b3I9KCBjb25zdCBRVHJhbnNs
YXRvciAmICk7Cgp9OwoKCgoKIyA0NSAiL2FtZC9zaWdtYS8wL3NyYy9hbHBoYS1kZWMtb3NmNC4w
L3dvcmtkaXIvcXQtMi4yLjMvaW5jbHVkZS9xYXBwbGljYXRpb24uaCIgMgoKCgpjbGFzcyBRU2Vz
c2lvbk1hbmFnZXI7CmNsYXNzIFFTdHlsZTsKY2xhc3MgUVRyYW5zbGF0b3I7CgoKCnRlbXBsYXRl
IDxjbGFzcyB0eXBlPiBjbGFzcyBRTGlzdDsKCmNsYXNzIFFBcHBsaWNhdGlvbjsKZXh0ZXJuICAg
UUFwcGxpY2F0aW9uICpxQXBwOwkJIAoKCgoKCgogCgoKY2xhc3MgICBRQXBwbGljYXRpb24gOiBw
dWJsaWMgUU9iamVjdAp7CiAgICBwdWJsaWM6CVFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29u
c3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOwl9CWNvbnN0IGNoYXIgKmNsYXNzTmFtZSgp
IGNvbnN0OwlzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsJc3RhdGljIFFT
dHJpbmcgdHIoY29uc3QgY2hhciopOyBzdGF0aWMgUVN0cmluZyB0cihjb25zdCBjaGFyKiwgY29u
c3QgY2hhciopOyAJcHJvdGVjdGVkOgl2b2lkIGluaXRNZXRhT2JqZWN0KCk7CXByaXZhdGU6CXN0
YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsgCnB1YmxpYzoKICAgIFFBcHBsaWNhdGlvbiggaW50
ICZhcmdjLCBjaGFyICoqYXJndik7CiAgICBRQXBwbGljYXRpb24oIGludCAmYXJnYywgY2hhciAq
KmFyZ3YsIGJvb2wgR1VJZW5hYmxlZCApOwogICAgZW51bSBUeXBlIHsgVHR5LCBHdWlDbGllbnQs
IEd1aVNlcnZlciB9OwogICAgUUFwcGxpY2F0aW9uKCBpbnQgJmFyZ2MsIGNoYXIgKiphcmd2LCBU
eXBlICk7CgogICAgUUFwcGxpY2F0aW9uKCBEaXNwbGF5KiBkcHkgKTsKICAgIFFBcHBsaWNhdGlv
biggRGlzcGxheSAqZHB5LCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwoKICAgIHZpcnR1YWwgflFB
cHBsaWNhdGlvbigpOwoKICAgIGludAkJICAgIGFyZ2MoKQljb25zdDsKICAgIGNoYXIJICAqKmFy
Z3YoKQljb25zdDsKCgogICAgc3RhdGljIFFTdHlsZSAgJnN0eWxlKCk7CiAgICBzdGF0aWMgdm9p
ZAkgICAgc2V0U3R5bGUoIFFTdHlsZSogKTsKCgogICAgZW51bSBDb2xvck1vZGUgeyBOb3JtYWxD
b2xvcnMsIEN1c3RvbUNvbG9ycyB9OwogICAgc3RhdGljIENvbG9yTW9kZSBjb2xvck1vZGUoKTsK
ICAgIHN0YXRpYyB2b2lkICAgICAgc2V0Q29sb3JNb2RlKCBRQXBwbGljYXRpb246OkNvbG9yTW9k
ZSApOwoKCiAgICBlbnVtIENvbG9yU3BlYyB7IE5vcm1hbENvbG9yPTAsIEN1c3RvbUNvbG9yPTEs
IE1hbnlDb2xvcj0yIH07CiAgICBzdGF0aWMgaW50CSAgICAgY29sb3JTcGVjKCk7CiAgICBzdGF0
aWMgdm9pZCAgICAgIHNldENvbG9yU3BlYyggaW50ICk7CgogICAgc3RhdGljIFFDdXJzb3IgICpv
dmVycmlkZUN1cnNvcigpOwogICAgc3RhdGljIHZvaWQJICAgICBzZXRPdmVycmlkZUN1cnNvcigg
Y29uc3QgUUN1cnNvciAmLCBib29sIHJlcGxhY2U9IDAgICk7CiAgICBzdGF0aWMgdm9pZAkgICAg
IHJlc3RvcmVPdmVycmlkZUN1cnNvcigpOwoKICAgIHN0YXRpYyBib29sCSAgICAgaGFzR2xvYmFs
TW91c2VUcmFja2luZygpOwogICAgc3RhdGljIHZvaWQJICAgICBzZXRHbG9iYWxNb3VzZVRyYWNr
aW5nKCBib29sIGVuYWJsZSApOwoKICAgIHN0YXRpYyBRUGFsZXR0ZSAgcGFsZXR0ZSggY29uc3Qg
UVdpZGdldCogPSAwICk7CiAgICBzdGF0aWMgdm9pZAkgICAgIHNldFBhbGV0dGUoIGNvbnN0IFFQ
YWxldHRlICYsIGJvb2wgaW5mb3JtV2lkZ2V0cz0gMCAsCgkJCQkgY29uc3QgY2hhciogY2xhc3NO
YW1lID0gMCApOwoKICAgIHN0YXRpYyBRRm9udCAgICAgZm9udCggY29uc3QgUVdpZGdldCogPSAw
ICk7CiAgICBzdGF0aWMgdm9pZAkgICAgIHNldEZvbnQoIGNvbnN0IFFGb250ICYsIGJvb2wgaW5m
b3JtV2lkZ2V0cz0gMCAsCgkJCSAgICAgIGNvbnN0IGNoYXIqIGNsYXNzTmFtZSA9IDAgKTsKICAg
IHN0YXRpYyBRRm9udE1ldHJpY3MgZm9udE1ldHJpY3MoKTsKCiAgICBRV2lkZ2V0CSAgICAqbWFp
bldpZGdldCgpICBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCAgICAgc2V0TWFpbldpZGdldCggUVdp
ZGdldCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgICAgIHBvbGlzaCggUVdpZGdldCAqICk7CgogICAg
c3RhdGljIFFXaWRnZXRMaXN0ICphbGxXaWRnZXRzKCk7CiAgICBzdGF0aWMgUVdpZGdldExpc3Qg
KnRvcExldmVsV2lkZ2V0cygpOwogICAgc3RhdGljIFFXaWRnZXQgICAgICpkZXNrdG9wKCk7CiAg
ICBzdGF0aWMgUVdpZGdldCAgICAgKmFjdGl2ZVBvcHVwV2lkZ2V0KCk7CiAgICBzdGF0aWMgUVdp
ZGdldCAgICAgKmFjdGl2ZU1vZGFsV2lkZ2V0KCk7CiAgICBzdGF0aWMgUUNsaXBib2FyZCAgKmNs
aXBib2FyZCgpOwogICAgUVdpZGdldAkgICAgICAgKmZvY3VzV2lkZ2V0KCkgY29uc3Q7CiAgICBR
V2lkZ2V0CSAgICAgICAqYWN0aXZlV2luZG93KCkgY29uc3Q7CgogICAgc3RhdGljIFFXaWRnZXQg
ICp3aWRnZXRBdCggaW50IHgsIGludCB5LCBib29sIGNoaWxkPSAwICApOwogICAgc3RhdGljIFFX
aWRnZXQgICp3aWRnZXRBdCggY29uc3QgUVBvaW50ICYsIGJvb2wgY2hpbGQ9IDAgICk7CgogICAg
aW50CQkgICAgIGV4ZWMoKTsKICAgIHZvaWQJICAgICBwcm9jZXNzRXZlbnRzKCk7CiAgICB2b2lk
CSAgICAgcHJvY2Vzc0V2ZW50cyggaW50IG1heHRpbWUgKTsKICAgIHZvaWQJICAgICBwcm9jZXNz
T25lRXZlbnQoKTsKICAgIGludAkJICAgICBlbnRlcl9sb29wKCk7CiAgICB2b2lkCSAgICAgZXhp
dF9sb29wKCk7CiAgICBpbnQJCSAgICAgbG9vcExldmVsKCkgY29uc3Q7CiAgICBzdGF0aWMgdm9p
ZAkgICAgIGV4aXQoIGludCByZXRjb2RlPTAgKTsKCiAgICBzdGF0aWMgYm9vbAkgICAgIHNlbmRF
dmVudCggUU9iamVjdCAqcmVjZWl2ZXIsIFFFdmVudCAqZXZlbnQgKTsKICAgIHN0YXRpYyB2b2lk
CSAgICAgcG9zdEV2ZW50KCBRT2JqZWN0ICpyZWNlaXZlciwgUUV2ZW50ICpldmVudCApOwogICAg
c3RhdGljIHZvaWQJICAgICBzZW5kUG9zdGVkRXZlbnRzKCBRT2JqZWN0ICpyZWNlaXZlciwgaW50
IGV2ZW50X3R5cGUgKTsKICAgIHN0YXRpYyB2b2lkCSAgICAgc2VuZFBvc3RlZEV2ZW50cygpOwoK
ICAgIHN0YXRpYyB2b2lkICAgICAgcmVtb3ZlUG9zdGVkRXZlbnRzKCBRT2JqZWN0ICpyZWNlaXZl
ciApOwoKICAgIHZpcnR1YWwgYm9vbCAgICAgbm90aWZ5KCBRT2JqZWN0ICosIFFFdmVudCAqICk7
CgogICAgc3RhdGljIGJvb2wJICAgICBzdGFydGluZ1VwKCk7CiAgICBzdGF0aWMgYm9vbAkgICAg
IGNsb3NpbmdEb3duKCk7CgogICAgc3RhdGljIHZvaWQJICAgICBmbHVzaFgoKTsKICAgIHN0YXRp
YyB2b2lkCSAgICAgc3luY1goKTsKCiAgICBzdGF0aWMgdm9pZAkgICAgIGJlZXAoKTsKCgogICAg
dm9pZAkgICAgIHNldERlZmF1bHRDb2RlYyggUVRleHRDb2RlYyogKTsKICAgIFFUZXh0Q29kZWMq
CSAgICAgZGVmYXVsdENvZGVjKCkgY29uc3Q7CiAgICB2b2lkCSAgICAgaW5zdGFsbFRyYW5zbGF0
b3IoIFFUcmFuc2xhdG9yICogKTsKICAgIHZvaWQJICAgICByZW1vdmVUcmFuc2xhdG9yKCBRVHJh
bnNsYXRvciAqICk7CgogICAgUVN0cmluZwkgICAgIHRyYW5zbGF0ZSggY29uc3QgY2hhciAqLCBj
b25zdCBjaGFyICogKSBjb25zdDsKICAgIFFTdHJpbmcJICAgICB0cmFuc2xhdGUoIGNvbnN0IGNo
YXIgKiwgY29uc3QgY2hhciAqLAoJCQkJY29uc3QgY2hhciAqICkgY29uc3Q7CgogICAgc3RhdGlj
IHZvaWQgICAgICBzZXRXaW5TdHlsZUhpZ2hsaWdodENvbG9yKCBjb25zdCBRQ29sb3IgJiApOwog
ICAgc3RhdGljIGNvbnN0IFFDb2xvciAmd2luU3R5bGVIaWdobGlnaHRDb2xvcigpOwoKICAgIHN0
YXRpYyB2b2lkICAgICAgc2V0RGVza3RvcFNldHRpbmdzQXdhcmUoIGJvb2wgKTsKICAgIHN0YXRp
YyBib29sICAgICAgZGVza3RvcFNldHRpbmdzQXdhcmUoKTsKCiAgICBzdGF0aWMgdm9pZCAgICAg
IHNldEN1cnNvckZsYXNoVGltZSggaW50ICk7CiAgICBzdGF0aWMgaW50ICAgICAgIGN1cnNvckZs
YXNoVGltZSgpOwoKICAgIHN0YXRpYyB2b2lkICAgICAgc2V0RG91YmxlQ2xpY2tJbnRlcnZhbCgg
aW50ICk7CiAgICBzdGF0aWMgaW50ICAgICAgIGRvdWJsZUNsaWNrSW50ZXJ2YWwoKTsKCiAgICBz
dGF0aWMgdm9pZCAgICAgIHNldFdoZWVsU2Nyb2xsTGluZXMoIGludCApOwogICAgc3RhdGljIGlu
dCAgICAgICB3aGVlbFNjcm9sbExpbmVzKCk7CgogICAgc3RhdGljIHZvaWQJICAgICBzZXRHbG9i
YWxTdHJ1dCggY29uc3QgUVNpemUgJiApOwogICAgc3RhdGljIFFTaXplICAgICBnbG9iYWxTdHJ1
dCgpOwoKICAgIHN0YXRpYyB2b2lkIHNldFN0YXJ0RHJhZ1RpbWUoIGludCBtcyApOwogICAgc3Rh
dGljIGludCBzdGFydERyYWdUaW1lKCk7CiAgICBzdGF0aWMgdm9pZCBzZXRTdGFydERyYWdEaXN0
YW5jZSggaW50IGwgKTsKICAgIHN0YXRpYyBpbnQgc3RhcnREcmFnRGlzdGFuY2UoKTsKCiAgICBz
dGF0aWMgYm9vbAkgICAgaXNFZmZlY3RFbmFibGVkKCBRdDo6VUlFZmZlY3QgKTsKICAgIHN0YXRp
YyB2b2lkCSAgICBzZXRFZmZlY3RFbmFibGVkKCBRdDo6VUlFZmZlY3QsIGJvb2wgZW5hYmxlID0g
MSAgKTsKCgoKCgoKCgogICAgdmlydHVhbCBib29sICAgICB4MTFFdmVudEZpbHRlciggWEV2ZW50
ICogKTsKICAgIHZpcnR1YWwgaW50CSAgICAgeDExQ2xpZW50TWVzc2FnZSggUVdpZGdldCosIFhF
dmVudCosIGJvb2wgcGFzc2l2ZV9vbmx5KTsKICAgIGludCAgICAgICAgICAgICAgeDExUHJvY2Vz
c0V2ZW50KCBYRXZlbnQqICk7CiMgMjEwICIvYW1kL3NpZ21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0
LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3FhcHBsaWNhdGlvbi5oIgoKCgoKCgoKCgogICAg
IAogICAgYm9vbAkgICAgIGlzU2Vzc2lvblJlc3RvcmVkKCkgY29uc3Q7CiAgICBRU3RyaW5nCSAg
ICAgc2Vzc2lvbklkKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgICAgIGNvbW1pdERhdGEoIFFT
ZXNzaW9uTWFuYWdlciYgc20gKTsKICAgIHZpcnR1YWwgdm9pZCAgICAgc2F2ZVN0YXRlKCBRU2Vz
c2lvbk1hbmFnZXImIHNtICk7CgoKICAgIHN0YXRpYyB2b2lkIGNyZWF0ZV94aW0oKTsKICAgIHN0
YXRpYyB2b2lkIGNsb3NlX3hpbSgpOwoKICAgIHZvaWQJICAgICB3YWtlVXBHdWlUaHJlYWQoKTsK
CgoKCgoKcHJvdGVjdGVkIDoKICAgIHZvaWQJICAgICBsYXN0V2luZG93Q2xvc2VkKCk7CiAgICB2
b2lkCSAgICAgYWJvdXRUb1F1aXQoKTsKICAgIHZvaWQJICAgICBndWlUaHJlYWRBd2FrZSgpOwoK
cHVibGljICA6CiAgICB2b2lkCSAgICAgcXVpdCgpOwogICAgdm9pZAkgICAgIGNsb3NlQWxsV2lu
ZG93cygpOwoKcHJpdmF0ZToKICAgIHZvaWQJICAgICBjb25zdHJ1Y3QoIGludCAmYXJnYywgY2hh
ciAqKmFyZ3YsIFR5cGUgKTsKICAgIGJvb2wJICAgICBwcm9jZXNzTmV4dEV2ZW50KCBib29sICk7
CiAgICB2b2lkCSAgICAgaW5pdGlhbGl6ZSggaW50LCBjaGFyICoqICk7CiAgICB2b2lkCSAgICAg
aW5pdF9wcmVjbWRsaW5lKCk7CiAgICB2b2lkCSAgICAgcHJvY2Vzc19jbWRsaW5lKCBpbnQqIGFy
Z2NwdHIsIGNoYXIgKiogYXJndiApOwoKCgoKICAgIAoKCgoKICAgIGludAkJICAgICBhcHBfYXJn
YzsKICAgIGNoYXIJICAgKiphcHBfYXJndjsKICAgIGJvb2wJICAgICBxdWl0X25vdzsKICAgIGlu
dAkJICAgICBxdWl0X2NvZGU7CiAgICBzdGF0aWMgUVN0eWxlICAgKmFwcF9zdHlsZTsKICAgIHN0
YXRpYyBpbnQJICAgICBhcHBfY3NwZWM7CgogICAgc3RhdGljIFFQYWxldHRlICphcHBfcGFsOwoK
ICAgIHN0YXRpYyBRRm9udCAgICAqYXBwX2ZvbnQ7CgogICAgc3RhdGljIFFDdXJzb3IgICphcHBf
Y3Vyc29yOwoKICAgIHN0YXRpYyBpbnQJICAgICBhcHBfdHJhY2tpbmc7CiAgICBzdGF0aWMgYm9v
bAkgICAgIGlzX2FwcF9ydW5uaW5nOwogICAgc3RhdGljIGJvb2wJICAgICBpc19hcHBfY2xvc2lu
ZzsKICAgIHN0YXRpYyBib29sCSAgICAgYXBwX2V4aXRfbG9vcDsKICAgIHN0YXRpYyBpbnQJICAg
ICBsb29wX2xldmVsOwogICAgc3RhdGljIFFXaWRnZXQgICptYWluX3dpZGdldDsKICAgIHN0YXRp
YyBRV2lkZ2V0ICAqZm9jdXNfd2lkZ2V0OwogICAgc3RhdGljIFFXaWRnZXQgICphY3RpdmVfd2lu
ZG93OwogICAgc3RhdGljIGJvb2wJICAgICBvYmV5X2Rlc2t0b3Bfc2V0dGluZ3M7CiAgICBzdGF0
aWMgaW50CSAgICAgY3Vyc29yX2ZsYXNoX3RpbWU7CiAgICBzdGF0aWMgaW50CSAgICAgbW91c2Vf
ZG91YmxlX2NsaWNrX3RpbWU7CiAgICBzdGF0aWMgaW50CSAgICAgd2hlZWxfc2Nyb2xsX2xpbmVz
OwoKICAgIHN0YXRpYyBib29sCSAgICAgYW5pbWF0ZV91aTsKICAgIHN0YXRpYyBib29sCSAgICAg
YW5pbWF0ZV9tZW51OwogICAgc3RhdGljIGJvb2wJICAgICBhbmltYXRlX3Rvb2x0aXA7CiAgICBz
dGF0aWMgYm9vbAkgICAgIGFuaW1hdGVfY29tYm87CiAgICBzdGF0aWMgYm9vbAkgICAgIGZhZGVf
bWVudTsKICAgIHN0YXRpYyBib29sCSAgICAgZmFkZV90b29sdGlwOwoKICAgIFFMaXN0PFFUcmFu
c2xhdG9yPiAqdHJhbnNsYXRvcnM7CgogICAgUVNlc3Npb25NYW5hZ2VyICpzZXNzaW9uX21hbmFn
ZXI7CiAgICBRU3RyaW5nCSAgICAgc2Vzc2lvbl9pZDsKICAgIGJvb2wJICAgICBpc19zZXNzaW9u
X3Jlc3RvcmVkOwoKCiAgICBzdGF0aWMgdm9pZCB4MTFfaW5pdGlhbGl6ZV9zdHlsZSgpOwoKCiAg
ICBzdGF0aWMgUVNpemUgICAgIGFwcF9zdHJ1dDsKCiAgICBzdGF0aWMgUUFzY2lpRGljdDxRUGFs
ZXR0ZT4gKmFwcF9wYWxldHRlczsKICAgIHN0YXRpYyBRQXNjaWlEaWN0PFFGb250PiAgICAqYXBw
X2ZvbnRzOwoKICAgIHN0YXRpYyBRV2lkZ2V0TGlzdCAqcG9wdXBXaWRnZXRzOwogICAgYm9vbAkg
ICAgIGluUG9wdXBNb2RlKCkgY29uc3Q7CiAgICB2b2lkCSAgICAgY2xvc2VQb3B1cCggUVdpZGdl
dCAqcG9wdXAgKTsKICAgIHZvaWQJICAgICBvcGVuUG9wdXAoIFFXaWRnZXQgKnBvcHVwICk7CiAg
ICB2b2lkIAkgICAgIHNldEFjdGl2ZVdpbmRvdyggUVdpZGdldCogYWN0ICk7CgogICAgc3RhdGlj
IHZvaWQgICAgICByZW1vdmVQb3N0ZWRFdmVudCggUUV2ZW50ICogKTsKCiAgICBmcmllbmQgY2xh
c3MgUVdpZGdldDsKICAgIGZyaWVuZCBjbGFzcyBRRVRXaWRnZXQ7CiAgICBmcmllbmQgY2xhc3Mg
UUV2ZW50OwoKcHJpdmF0ZTogIAoKICAgIFFBcHBsaWNhdGlvbiggY29uc3QgUUFwcGxpY2F0aW9u
ICYgKTsKICAgIFFBcHBsaWNhdGlvbiAmb3BlcmF0b3I9KCBjb25zdCBRQXBwbGljYXRpb24gJiAp
OwoKfTsKCgppbmxpbmUgaW50IFFBcHBsaWNhdGlvbjo6YXJnYygpIGNvbnN0CnsKICAgIHJldHVy
biBhcHBfYXJnYzsKfQoKaW5saW5lIGNoYXIgKipRQXBwbGljYXRpb246OmFyZ3YoKSBjb25zdAp7
CiAgICByZXR1cm4gYXBwX2FyZ3Y7Cn0KCmlubGluZSBRU3R5bGUmIFFBcHBsaWNhdGlvbjo6c3R5
bGUoKQp7CiAgICByZXR1cm4gKmFwcF9zdHlsZTsKfQoKCmlubGluZSBRQ3Vyc29yICpRQXBwbGlj
YXRpb246Om92ZXJyaWRlQ3Vyc29yKCkKewogICAgcmV0dXJuIGFwcF9jdXJzb3I7Cn0KCmlubGlu
ZSBib29sIFFBcHBsaWNhdGlvbjo6aGFzR2xvYmFsTW91c2VUcmFja2luZygpCnsKICAgIHJldHVy
biBhcHBfdHJhY2tpbmcgPiAwOwp9CgppbmxpbmUgUVdpZGdldCAqUUFwcGxpY2F0aW9uOjptYWlu
V2lkZ2V0KCkgY29uc3QKewogICAgcmV0dXJuIG1haW5fd2lkZ2V0Owp9CgppbmxpbmUgUVdpZGdl
dCAqUUFwcGxpY2F0aW9uOjpmb2N1c1dpZGdldCgpIGNvbnN0CnsKICAgIHJldHVybiBmb2N1c193
aWRnZXQ7Cn0KCmlubGluZSBRV2lkZ2V0ICpRQXBwbGljYXRpb246OmFjdGl2ZVdpbmRvdygpIGNv
bnN0CnsKICAgIHJldHVybiBhY3RpdmVfd2luZG93Owp9CgppbmxpbmUgUVdpZGdldCAqUUFwcGxp
Y2F0aW9uOjp3aWRnZXRBdCggY29uc3QgUVBvaW50ICZwLCBib29sIGNoaWxkICkKewogICAgcmV0
dXJuIHdpZGdldEF0KCBwLngoKSwgcC55KCksIGNoaWxkICk7Cn0KCmlubGluZSBib29sIFFBcHBs
aWNhdGlvbjo6aW5Qb3B1cE1vZGUoKSBjb25zdAp7CiAgICByZXR1cm4gcG9wdXBXaWRnZXRzICE9
IDA7Cn0KCmlubGluZSBib29sIFFBcHBsaWNhdGlvbjo6aXNTZXNzaW9uUmVzdG9yZWQoKSBjb25z
dAp7CiAgICByZXR1cm4gaXNfc2Vzc2lvbl9yZXN0b3JlZDsKfQoKaW5saW5lIFFTdHJpbmcgUUFw
cGxpY2F0aW9uOjpzZXNzaW9uSWQoKSBjb25zdAp7CiAgICByZXR1cm4gc2Vzc2lvbl9pZDsKfQoK
aW5saW5lIFFTaXplIFFBcHBsaWNhdGlvbjo6Z2xvYmFsU3RydXQoKQp7CiAgICByZXR1cm4gYXBw
X3N0cnV0Owp9CgppbmxpbmUgYm9vbCBRQXBwbGljYXRpb246OnNlbmRFdmVudCggUU9iamVjdCAq
cmVjZWl2ZXIsIFFFdmVudCAqZXZlbnQgKQp7IHJldHVybiBxQXBwLT5ub3RpZnkoIHJlY2VpdmVy
LCBldmVudCApOyB9CgoKCgoKCgoKCgoKIyAxOSAia2VybmVsL21vY19xbmV0d29ya3Byb3RvY29s
LmNwcCIgMgoKCgoKY29uc3QgY2hhciAqUU5ldHdvcmtQcm90b2NvbDo6Y2xhc3NOYW1lKCkgY29u
c3QKewogICAgcmV0dXJuICJRTmV0d29ya1Byb3RvY29sIjsKfQoKUU1ldGFPYmplY3QgKlFOZXR3
b3JrUHJvdG9jb2w6Om1ldGFPYmogPSAwOwoKdm9pZCBRTmV0d29ya1Byb3RvY29sOjppbml0TWV0
YU9iamVjdCgpCnsKICAgIGlmICggbWV0YU9iaiApCglyZXR1cm47CiAgICBpZiAoIHFzdHJjbXAo
UU9iamVjdDo6Y2xhc3NOYW1lKCksICJRT2JqZWN0IikgIT0gMCApCgliYWRTdXBlcmNsYXNzV2Fy
bmluZygiUU5ldHdvcmtQcm90b2NvbCIsIlFPYmplY3QiKTsKICAgICh2b2lkKSBzdGF0aWNNZXRh
T2JqZWN0KCk7Cn0KCgoKUVN0cmluZyBRTmV0d29ya1Byb3RvY29sOjp0cihjb25zdCBjaGFyKiBz
KQp7CiAgICByZXR1cm4gcUFwcC0+dHJhbnNsYXRlKCAiUU5ldHdvcmtQcm90b2NvbCIsIHMsIDAg
KTsKfQoKUVN0cmluZyBRTmV0d29ya1Byb3RvY29sOjp0cihjb25zdCBjaGFyKiBzLCBjb25zdCBj
aGFyICogYykKewogICAgcmV0dXJuIHFBcHAtPnRyYW5zbGF0ZSggIlFOZXR3b3JrUHJvdG9jb2wi
LCBzLCBjICk7Cn0KCgoKUU1ldGFPYmplY3QqIFFOZXR3b3JrUHJvdG9jb2w6OnN0YXRpY01ldGFP
YmplY3QoKQp7CiAgICBpZiAoIG1ldGFPYmogKQoJcmV0dXJuIG1ldGFPYmo7CiAgICAodm9pZCkg
UU9iamVjdDo6c3RhdGljTWV0YU9iamVjdCgpOwoKCiAgICB0eXBlZGVmIHZvaWQgKFFOZXR3b3Jr
UHJvdG9jb2w6OiptMV90MCkoUU5ldHdvcmtPcGVyYXRpb24qKTsKICAgIHR5cGVkZWYgdm9pZCAo
UU9iamVjdDo6Km9tMV90MCkoUU5ldHdvcmtPcGVyYXRpb24qKTsKICAgIHR5cGVkZWYgdm9pZCAo
UU5ldHdvcmtQcm90b2NvbDo6Km0xX3QxKSgpOwogICAgdHlwZWRlZiB2b2lkIChRT2JqZWN0Ojoq
b20xX3QxKSgpOwogICAgdHlwZWRlZiB2b2lkIChRTmV0d29ya1Byb3RvY29sOjoqbTFfdDIpKGNv
bnN0IFFVcmxJbmZvJixRTmV0d29ya09wZXJhdGlvbiopOwogICAgdHlwZWRlZiB2b2lkIChRT2Jq
ZWN0Ojoqb20xX3QyKShjb25zdCBRVXJsSW5mbyYsUU5ldHdvcmtPcGVyYXRpb24qKTsKICAgIHR5
cGVkZWYgdm9pZCAoUU5ldHdvcmtQcm90b2NvbDo6Km0xX3QzKSgpOwogICAgdHlwZWRlZiB2b2lk
IChRT2JqZWN0Ojoqb20xX3QzKSgpOwogICAgbTFfdDAgdjFfMCA9ICZRTmV0d29ya1Byb3RvY29s
Ojpwcm9jZXNzTmV4dE9wZXJhdGlvbjsKICAgIG9tMV90MCBvdjFfMCA9IChvbTFfdDApdjFfMDsK
ICAgIG0xX3QxIHYxXzEgPSAmUU5ldHdvcmtQcm90b2NvbDo6c3RhcnRPcHM7CiAgICBvbTFfdDEg
b3YxXzEgPSAob20xX3QxKXYxXzE7CiAgICBtMV90MiB2MV8yID0gJlFOZXR3b3JrUHJvdG9jb2w6
OmVtaXROZXdDaGlsZHJlbjsKICAgIG9tMV90MiBvdjFfMiA9IChvbTFfdDIpdjFfMjsKICAgIG0x
X3QzIHYxXzMgPSAmUU5ldHdvcmtQcm90b2NvbDo6cmVtb3ZlTWU7CiAgICBvbTFfdDMgb3YxXzMg
PSAob20xX3QzKXYxXzM7CiAgICBRTWV0YURhdGEgKnNsb3RfdGJsID0gUU1ldGFPYmplY3Q6Om5l
d19tZXRhZGF0YSg0KTsKICAgIFFNZXRhRGF0YTo6QWNjZXNzICpzbG90X3RibF9hY2Nlc3MgPSBR
TWV0YU9iamVjdDo6bmV3X21ldGFhY2Nlc3MoNCk7CiAgICBzbG90X3RibFswXS5uYW1lID0gInBy
b2Nlc3NOZXh0T3BlcmF0aW9uKFFOZXR3b3JrT3BlcmF0aW9uKikiOwogICAgc2xvdF90YmxbMF0u
cHRyID0gKFFNZW1iZXIpb3YxXzA7CiAgICBzbG90X3RibF9hY2Nlc3NbMF0gPSBRTWV0YURhdGE6
OlByaXZhdGU7CiAgICBzbG90X3RibFsxXS5uYW1lID0gInN0YXJ0T3BzKCkiOwogICAgc2xvdF90
YmxbMV0ucHRyID0gKFFNZW1iZXIpb3YxXzE7CiAgICBzbG90X3RibF9hY2Nlc3NbMV0gPSBRTWV0
YURhdGE6OlByaXZhdGU7CiAgICBzbG90X3RibFsyXS5uYW1lID0gImVtaXROZXdDaGlsZHJlbihj
b25zdCBRVXJsSW5mbyYsUU5ldHdvcmtPcGVyYXRpb24qKSI7CiAgICBzbG90X3RibFsyXS5wdHIg
PSAoUU1lbWJlcilvdjFfMjsKICAgIHNsb3RfdGJsX2FjY2Vzc1syXSA9IFFNZXRhRGF0YTo6UHJp
dmF0ZTsKICAgIHNsb3RfdGJsWzNdLm5hbWUgPSAicmVtb3ZlTWUoKSI7CiAgICBzbG90X3RibFsz
XS5wdHIgPSAoUU1lbWJlcilvdjFfMzsKICAgIHNsb3RfdGJsX2FjY2Vzc1szXSA9IFFNZXRhRGF0
YTo6UHJpdmF0ZTsKICAgIHR5cGVkZWYgdm9pZCAoUU5ldHdvcmtQcm90b2NvbDo6Km0yX3QwKShj
b25zdCBRQnl0ZUFycmF5JixRTmV0d29ya09wZXJhdGlvbiopOwogICAgdHlwZWRlZiB2b2lkIChR
T2JqZWN0Ojoqb20yX3QwKShjb25zdCBRQnl0ZUFycmF5JixRTmV0d29ya09wZXJhdGlvbiopOwog
ICAgdHlwZWRlZiB2b2lkIChRTmV0d29ya1Byb3RvY29sOjoqbTJfdDEpKGludCxjb25zdCBRU3Ry
aW5nJik7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipvbTJfdDEpKGludCxjb25zdCBRU3Ry
aW5nJik7CiAgICB0eXBlZGVmIHZvaWQgKFFOZXR3b3JrUHJvdG9jb2w6OiptMl90MikoUU5ldHdv
cmtPcGVyYXRpb24qKTsKICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6Km9tMl90MikoUU5ldHdv
cmtPcGVyYXRpb24qKTsKICAgIHR5cGVkZWYgdm9pZCAoUU5ldHdvcmtQcm90b2NvbDo6Km0yX3Qz
KShRTmV0d29ya09wZXJhdGlvbiopOwogICAgdHlwZWRlZiB2b2lkIChRT2JqZWN0Ojoqb20yX3Qz
KShRTmV0d29ya09wZXJhdGlvbiopOwogICAgdHlwZWRlZiB2b2lkIChRTmV0d29ya1Byb3RvY29s
OjoqbTJfdDQpKGNvbnN0IFFWYWx1ZUxpc3Q8UVVybEluZm8+JixRTmV0d29ya09wZXJhdGlvbiop
OwogICAgdHlwZWRlZiB2b2lkIChRT2JqZWN0Ojoqb20yX3Q0KShjb25zdCBRVmFsdWVMaXN0PFFV
cmxJbmZvPiYsUU5ldHdvcmtPcGVyYXRpb24qKTsKICAgIHR5cGVkZWYgdm9pZCAoUU5ldHdvcmtQ
cm90b2NvbDo6Km0yX3Q1KShjb25zdCBRVXJsSW5mbyYsUU5ldHdvcmtPcGVyYXRpb24qKTsKICAg
IHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6Km9tMl90NSkoY29uc3QgUVVybEluZm8mLFFOZXR3b3Jr
T3BlcmF0aW9uKik7CiAgICB0eXBlZGVmIHZvaWQgKFFOZXR3b3JrUHJvdG9jb2w6OiptMl90Niko
Y29uc3QgUVVybEluZm8mLFFOZXR3b3JrT3BlcmF0aW9uKik7CiAgICB0eXBlZGVmIHZvaWQgKFFP
YmplY3Q6OipvbTJfdDYpKGNvbnN0IFFVcmxJbmZvJixRTmV0d29ya09wZXJhdGlvbiopOwogICAg
dHlwZWRlZiB2b2lkIChRTmV0d29ya1Byb3RvY29sOjoqbTJfdDcpKFFOZXR3b3JrT3BlcmF0aW9u
Kik7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipvbTJfdDcpKFFOZXR3b3JrT3BlcmF0aW9u
Kik7CiAgICB0eXBlZGVmIHZvaWQgKFFOZXR3b3JrUHJvdG9jb2w6OiptMl90OCkoUU5ldHdvcmtP
cGVyYXRpb24qKTsKICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6Km9tMl90OCkoUU5ldHdvcmtP
cGVyYXRpb24qKTsKICAgIHR5cGVkZWYgdm9pZCAoUU5ldHdvcmtQcm90b2NvbDo6Km0yX3Q5KShp
bnQsaW50LFFOZXR3b3JrT3BlcmF0aW9uKik7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6Oipv
bTJfdDkpKGludCxpbnQsUU5ldHdvcmtPcGVyYXRpb24qKTsKICAgIG0yX3QwIHYyXzAgPSAmUU5l
dHdvcmtQcm90b2NvbDo6ZGF0YTsKICAgIG9tMl90MCBvdjJfMCA9IChvbTJfdDApdjJfMDsKICAg
IG0yX3QxIHYyXzEgPSAmUU5ldHdvcmtQcm90b2NvbDo6Y29ubmVjdGlvblN0YXRlQ2hhbmdlZDsK
ICAgIG9tMl90MSBvdjJfMSA9IChvbTJfdDEpdjJfMTsKICAgIG0yX3QyIHYyXzIgPSAmUU5ldHdv
cmtQcm90b2NvbDo6ZmluaXNoZWQ7CiAgICBvbTJfdDIgb3YyXzIgPSAob20yX3QyKXYyXzI7CiAg
ICBtMl90MyB2Ml8zID0gJlFOZXR3b3JrUHJvdG9jb2w6OnN0YXJ0OwogICAgb20yX3QzIG92Ml8z
ID0gKG9tMl90Myl2Ml8zOwogICAgbTJfdDQgdjJfNCA9ICZRTmV0d29ya1Byb3RvY29sOjpuZXdD
aGlsZHJlbjsKICAgIG9tMl90NCBvdjJfNCA9IChvbTJfdDQpdjJfNDsKICAgIG0yX3Q1IHYyXzUg
PSAmUU5ldHdvcmtQcm90b2NvbDo6bmV3Q2hpbGQ7CiAgICBvbTJfdDUgb3YyXzUgPSAob20yX3Q1
KXYyXzU7CiAgICBtMl90NiB2Ml82ID0gJlFOZXR3b3JrUHJvdG9jb2w6OmNyZWF0ZWREaXJlY3Rv
cnk7CiAgICBvbTJfdDYgb3YyXzYgPSAob20yX3Q2KXYyXzY7CiAgICBtMl90NyB2Ml83ID0gJlFO
ZXR3b3JrUHJvdG9jb2w6OnJlbW92ZWQ7CiAgICBvbTJfdDcgb3YyXzcgPSAob20yX3Q3KXYyXzc7
CiAgICBtMl90OCB2Ml84ID0gJlFOZXR3b3JrUHJvdG9jb2w6Oml0ZW1DaGFuZ2VkOwogICAgb20y
X3Q4IG92Ml84ID0gKG9tMl90OCl2Ml84OwogICAgbTJfdDkgdjJfOSA9ICZRTmV0d29ya1Byb3Rv
Y29sOjpkYXRhVHJhbnNmZXJQcm9ncmVzczsKICAgIG9tMl90OSBvdjJfOSA9IChvbTJfdDkpdjJf
OTsKICAgIFFNZXRhRGF0YSAqc2lnbmFsX3RibCA9IFFNZXRhT2JqZWN0OjpuZXdfbWV0YWRhdGEo
MTApOwogICAgc2lnbmFsX3RibFswXS5uYW1lID0gImRhdGEoY29uc3QgUUJ5dGVBcnJheSYsUU5l
dHdvcmtPcGVyYXRpb24qKSI7CiAgICBzaWduYWxfdGJsWzBdLnB0ciA9IChRTWVtYmVyKW92Ml8w
OwogICAgc2lnbmFsX3RibFsxXS5uYW1lID0gImNvbm5lY3Rpb25TdGF0ZUNoYW5nZWQoaW50LGNv
bnN0IFFTdHJpbmcmKSI7CiAgICBzaWduYWxfdGJsWzFdLnB0ciA9IChRTWVtYmVyKW92Ml8xOwog
ICAgc2lnbmFsX3RibFsyXS5uYW1lID0gImZpbmlzaGVkKFFOZXR3b3JrT3BlcmF0aW9uKikiOwog
ICAgc2lnbmFsX3RibFsyXS5wdHIgPSAoUU1lbWJlcilvdjJfMjsKICAgIHNpZ25hbF90YmxbM10u
bmFtZSA9ICJzdGFydChRTmV0d29ya09wZXJhdGlvbiopIjsKICAgIHNpZ25hbF90YmxbM10ucHRy
ID0gKFFNZW1iZXIpb3YyXzM7CiAgICBzaWduYWxfdGJsWzRdLm5hbWUgPSAibmV3Q2hpbGRyZW4o
Y29uc3QgUVZhbHVlTGlzdDxRVXJsSW5mbz4mLFFOZXR3b3JrT3BlcmF0aW9uKikiOwogICAgc2ln
bmFsX3RibFs0XS5wdHIgPSAoUU1lbWJlcilvdjJfNDsKICAgIHNpZ25hbF90YmxbNV0ubmFtZSA9
ICJuZXdDaGlsZChjb25zdCBRVXJsSW5mbyYsUU5ldHdvcmtPcGVyYXRpb24qKSI7CiAgICBzaWdu
YWxfdGJsWzVdLnB0ciA9IChRTWVtYmVyKW92Ml81OwogICAgc2lnbmFsX3RibFs2XS5uYW1lID0g
ImNyZWF0ZWREaXJlY3RvcnkoY29uc3QgUVVybEluZm8mLFFOZXR3b3JrT3BlcmF0aW9uKikiOwog
ICAgc2lnbmFsX3RibFs2XS5wdHIgPSAoUU1lbWJlcilvdjJfNjsKICAgIHNpZ25hbF90YmxbN10u
bmFtZSA9ICJyZW1vdmVkKFFOZXR3b3JrT3BlcmF0aW9uKikiOwogICAgc2lnbmFsX3RibFs3XS5w
dHIgPSAoUU1lbWJlcilvdjJfNzsKICAgIHNpZ25hbF90YmxbOF0ubmFtZSA9ICJpdGVtQ2hhbmdl
ZChRTmV0d29ya09wZXJhdGlvbiopIjsKICAgIHNpZ25hbF90YmxbOF0ucHRyID0gKFFNZW1iZXIp
b3YyXzg7CiAgICBzaWduYWxfdGJsWzldLm5hbWUgPSAiZGF0YVRyYW5zZmVyUHJvZ3Jlc3MoaW50
LGludCxRTmV0d29ya09wZXJhdGlvbiopIjsKICAgIHNpZ25hbF90YmxbOV0ucHRyID0gKFFNZW1i
ZXIpb3YyXzk7CiAgICBtZXRhT2JqID0gUU1ldGFPYmplY3Q6Om5ld19tZXRhb2JqZWN0KAoJIlFO
ZXR3b3JrUHJvdG9jb2wiLCAiUU9iamVjdCIsCglzbG90X3RibCwgNCwKCXNpZ25hbF90YmwsIDEw
LAoKCTAsIDAsCgkwLCAwLAoKCTAsIDAgKTsKICAgIG1ldGFPYmotPnNldF9zbG90X2FjY2Vzcygg
c2xvdF90YmxfYWNjZXNzICk7CgoKICAgIHJldHVybiBtZXRhT2JqOwp9CgoKIyAxICIvYW1kL3Np
Z21hLzAvc3JjL2FscGhhLWRlYy1vc2Y0LjAvd29ya2Rpci9xdC0yLjIuMy9pbmNsdWRlL3FzaWdu
YWxzbG90aW1wLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKY2xhc3MgICBRQ29ubmVjdGlvbkxpc3QgOiBwdWJsaWMgUUxpc3Q8UUNvbm5l
Y3Rpb24+CnsKcHVibGljOgogICAgUUNvbm5lY3Rpb25MaXN0KCkgOiBRTGlzdDxRQ29ubmVjdGlv
bj4oKSB7fQogICAgUUNvbm5lY3Rpb25MaXN0KCBjb25zdCBRQ29ubmVjdGlvbkxpc3QgJmxpc3Qg
KSA6IFFMaXN0PFFDb25uZWN0aW9uPihsaXN0KSB7fQogICB+UUNvbm5lY3Rpb25MaXN0KCkgeyBj
bGVhcigpOyB9CiAgICBRQ29ubmVjdGlvbkxpc3QgJm9wZXJhdG9yPShjb25zdCBRQ29ubmVjdGlv
bkxpc3QgJmxpc3QpCgl7IHJldHVybiAoUUNvbm5lY3Rpb25MaXN0JilRTGlzdDxRQ29ubmVjdGlv
bj46Om9wZXJhdG9yPShsaXN0KTsgfQp9OwoKY2xhc3MgICBRQ29ubmVjdGlvbkxpc3RJdCA6IHB1
YmxpYyBRTGlzdEl0ZXJhdG9yPFFDb25uZWN0aW9uPgp7CnB1YmxpYzoKICAgIFFDb25uZWN0aW9u
TGlzdEl0KCBjb25zdCBRQ29ubmVjdGlvbkxpc3QgJmwgKSA6IFFMaXN0SXRlcmF0b3I8UUNvbm5l
Y3Rpb24+KGwpIHt9CiAgICBRQ29ubmVjdGlvbkxpc3RJdCAmb3BlcmF0b3I9KGNvbnN0IFFDb25u
ZWN0aW9uTGlzdEl0ICZpKQoJeyByZXR1cm4gKFFDb25uZWN0aW9uTGlzdEl0JilRTGlzdEl0ZXJh
dG9yPFFDb25uZWN0aW9uPjo6b3BlcmF0b3I9KGkpOyB9Cn07CgoKCgoKCgoKY2xhc3MgICBRU2ln
bmFsRGljdCA6IHB1YmxpYyBRQXNjaWlEaWN0PFFDb25uZWN0aW9uTGlzdD4KewpwdWJsaWM6CiAg
ICBRU2lnbmFsRGljdChpbnQgc2l6ZT0xNyxib29sIGNzPSAxICxib29sIGNrPSAxICkKCTogUUFz
Y2lpRGljdDxRQ29ubmVjdGlvbkxpc3Q+KHNpemUsY3MsY2spIHt9CiAgICBRU2lnbmFsRGljdCgg
Y29uc3QgUVNpZ25hbERpY3QgJmRpY3QgKQoJOiBRQXNjaWlEaWN0PFFDb25uZWN0aW9uTGlzdD4o
ZGljdCkge30KICAgflFTaWduYWxEaWN0KCkgeyBjbGVhcigpOyB9CiAgICBRU2lnbmFsRGljdCAm
b3BlcmF0b3I9KGNvbnN0IFFTaWduYWxEaWN0ICZkaWN0KQoJeyByZXR1cm4gKFFTaWduYWxEaWN0
JilRQXNjaWlEaWN0PFFDb25uZWN0aW9uTGlzdD46Om9wZXJhdG9yPShkaWN0KTsgfQp9OwoKY2xh
c3MgICBRU2lnbmFsRGljdEl0IDogcHVibGljIFFBc2NpaURpY3RJdGVyYXRvcjxRQ29ubmVjdGlv
bkxpc3Q+CnsKcHVibGljOgogICAgUVNpZ25hbERpY3RJdCggY29uc3QgUVNpZ25hbERpY3QgJmQg
KQoJOiBRQXNjaWlEaWN0SXRlcmF0b3I8UUNvbm5lY3Rpb25MaXN0PihkKSB7fQogICAgUVNpZ25h
bERpY3RJdCAmb3BlcmF0b3I9KGNvbnN0IFFTaWduYWxEaWN0SXQgJmkpCgl7IHJldHVybiAoUVNp
Z25hbERpY3RJdCYpUUFzY2lpRGljdEl0ZXJhdG9yPFFDb25uZWN0aW9uTGlzdD46Om9wZXJhdG9y
PShpKTsgfQp9OwoKCgojIDE2NyAia2VybmVsL21vY19xbmV0d29ya3Byb3RvY29sLmNwcCIgMgoK
CiAKdm9pZCBRTmV0d29ya1Byb3RvY29sOjpkYXRhKCBjb25zdCBRQnl0ZUFycmF5JiB0MCwgUU5l
dHdvcmtPcGVyYXRpb24qIHQxICkKewogICAgIAogICAgUUNvbm5lY3Rpb25MaXN0ICpjbGlzdCA9
IHJlY2VpdmVycygiZGF0YShjb25zdCBRQnl0ZUFycmF5JixRTmV0d29ya09wZXJhdGlvbiopIik7
CiAgICBpZiAoICFjbGlzdCB8fCBzaWduYWxzQmxvY2tlZCgpICkKCXJldHVybjsKICAgIHR5cGVk
ZWYgdm9pZCAoUU9iamVjdDo6KlJUMCkoKTsKICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6KlJU
MSkoY29uc3QgUUJ5dGVBcnJheSYpOwogICAgdHlwZWRlZiB2b2lkIChRT2JqZWN0OjoqUlQyKShj
b25zdCBRQnl0ZUFycmF5JixRTmV0d29ya09wZXJhdGlvbiopOwogICAgUlQwIHIwOwogICAgUlQx
IHIxOwogICAgUlQyIHIyOwogICAgUUNvbm5lY3Rpb25MaXN0SXQgaXQoKmNsaXN0KTsKICAgIFFD
b25uZWN0aW9uICAgKmM7CiAgICBRU2VuZGVyT2JqZWN0ICpvYmplY3Q7CiAgICB3aGlsZSAoIChj
PWl0LmN1cnJlbnQoKSkgKSB7CgkrK2l0OwoJb2JqZWN0ID0gKFFTZW5kZXJPYmplY3QqKWMtPm9i
amVjdCgpOwoJb2JqZWN0LT5zZXRTZW5kZXIoIHRoaXMgKTsKCXN3aXRjaCAoIGMtPm51bUFyZ3Mo
KSApIHsKCSAgICBjYXNlIDA6CgkJcjAgPSAoUlQwKSooYy0+bWVtYmVyKCkpOwoJCShvYmplY3Qt
PipyMCkoKTsKCQlicmVhazsKCSAgICBjYXNlIDE6CgkJcjEgPSAoUlQxKSooYy0+bWVtYmVyKCkp
OwoJCShvYmplY3QtPipyMSkodDApOwoJCWJyZWFrOwoJICAgIGNhc2UgMjoKCQlyMiA9IChSVDIp
KihjLT5tZW1iZXIoKSk7CgkJKG9iamVjdC0+KnIyKSh0MCwgdDEpOwoJCWJyZWFrOwoJfQogICAg
fQp9CgogCnZvaWQgUU5ldHdvcmtQcm90b2NvbDo6Y29ubmVjdGlvblN0YXRlQ2hhbmdlZCggaW50
IHQwLCBjb25zdCBRU3RyaW5nJiB0MSApCnsKICAgICAKICAgIFFDb25uZWN0aW9uTGlzdCAqY2xp
c3QgPSByZWNlaXZlcnMoImNvbm5lY3Rpb25TdGF0ZUNoYW5nZWQoaW50LGNvbnN0IFFTdHJpbmcm
KSIpOwogICAgaWYgKCAhY2xpc3QgfHwgc2lnbmFsc0Jsb2NrZWQoKSApCglyZXR1cm47CiAgICB0
eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipSVDApKCk7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6
OipSVDEpKGludCk7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipSVDIpKGludCxjb25zdCBR
U3RyaW5nJik7CiAgICBSVDAgcjA7CiAgICBSVDEgcjE7CiAgICBSVDIgcjI7CiAgICBRQ29ubmVj
dGlvbkxpc3RJdCBpdCgqY2xpc3QpOwogICAgUUNvbm5lY3Rpb24gICAqYzsKICAgIFFTZW5kZXJP
YmplY3QgKm9iamVjdDsKICAgIHdoaWxlICggKGM9aXQuY3VycmVudCgpKSApIHsKCSsraXQ7Cglv
YmplY3QgPSAoUVNlbmRlck9iamVjdCopYy0+b2JqZWN0KCk7CglvYmplY3QtPnNldFNlbmRlcigg
dGhpcyApOwoJc3dpdGNoICggYy0+bnVtQXJncygpICkgewoJICAgIGNhc2UgMDoKCQlyMCA9IChS
VDApKihjLT5tZW1iZXIoKSk7CgkJKG9iamVjdC0+KnIwKSgpOwoJCWJyZWFrOwoJICAgIGNhc2Ug
MToKCQlyMSA9IChSVDEpKihjLT5tZW1iZXIoKSk7CgkJKG9iamVjdC0+KnIxKSh0MCk7CgkJYnJl
YWs7CgkgICAgY2FzZSAyOgoJCXIyID0gKFJUMikqKGMtPm1lbWJlcigpKTsKCQkob2JqZWN0LT4q
cjIpKHQwLCB0MSk7CgkJYnJlYWs7Cgl9CiAgICB9Cn0KCiAKdm9pZCBRTmV0d29ya1Byb3RvY29s
OjpmaW5pc2hlZCggUU5ldHdvcmtPcGVyYXRpb24qIHQwICkKewogICAgIAogICAgUUNvbm5lY3Rp
b25MaXN0ICpjbGlzdCA9IHJlY2VpdmVycygiZmluaXNoZWQoUU5ldHdvcmtPcGVyYXRpb24qKSIp
OwogICAgaWYgKCAhY2xpc3QgfHwgc2lnbmFsc0Jsb2NrZWQoKSApCglyZXR1cm47CiAgICB0eXBl
ZGVmIHZvaWQgKFFPYmplY3Q6OipSVDApKCk7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipS
VDEpKFFOZXR3b3JrT3BlcmF0aW9uKik7CiAgICBSVDAgcjA7CiAgICBSVDEgcjE7CiAgICBRQ29u
bmVjdGlvbkxpc3RJdCBpdCgqY2xpc3QpOwogICAgUUNvbm5lY3Rpb24gICAqYzsKICAgIFFTZW5k
ZXJPYmplY3QgKm9iamVjdDsKICAgIHdoaWxlICggKGM9aXQuY3VycmVudCgpKSApIHsKCSsraXQ7
CglvYmplY3QgPSAoUVNlbmRlck9iamVjdCopYy0+b2JqZWN0KCk7CglvYmplY3QtPnNldFNlbmRl
ciggdGhpcyApOwoJc3dpdGNoICggYy0+bnVtQXJncygpICkgewoJICAgIGNhc2UgMDoKCQlyMCA9
IChSVDApKihjLT5tZW1iZXIoKSk7CgkJKG9iamVjdC0+KnIwKSgpOwoJCWJyZWFrOwoJICAgIGNh
c2UgMToKCQlyMSA9IChSVDEpKihjLT5tZW1iZXIoKSk7CgkJKG9iamVjdC0+KnIxKSh0MCk7CgkJ
YnJlYWs7Cgl9CiAgICB9Cn0KCiAKdm9pZCBRTmV0d29ya1Byb3RvY29sOjpzdGFydCggUU5ldHdv
cmtPcGVyYXRpb24qIHQwICkKewogICAgIAogICAgUUNvbm5lY3Rpb25MaXN0ICpjbGlzdCA9IHJl
Y2VpdmVycygic3RhcnQoUU5ldHdvcmtPcGVyYXRpb24qKSIpOwogICAgaWYgKCAhY2xpc3QgfHwg
c2lnbmFsc0Jsb2NrZWQoKSApCglyZXR1cm47CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipS
VDApKCk7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipSVDEpKFFOZXR3b3JrT3BlcmF0aW9u
Kik7CiAgICBSVDAgcjA7CiAgICBSVDEgcjE7CiAgICBRQ29ubmVjdGlvbkxpc3RJdCBpdCgqY2xp
c3QpOwogICAgUUNvbm5lY3Rpb24gICAqYzsKICAgIFFTZW5kZXJPYmplY3QgKm9iamVjdDsKICAg
IHdoaWxlICggKGM9aXQuY3VycmVudCgpKSApIHsKCSsraXQ7CglvYmplY3QgPSAoUVNlbmRlck9i
amVjdCopYy0+b2JqZWN0KCk7CglvYmplY3QtPnNldFNlbmRlciggdGhpcyApOwoJc3dpdGNoICgg
Yy0+bnVtQXJncygpICkgewoJICAgIGNhc2UgMDoKCQlyMCA9IChSVDApKihjLT5tZW1iZXIoKSk7
CgkJKG9iamVjdC0+KnIwKSgpOwoJCWJyZWFrOwoJICAgIGNhc2UgMToKCQlyMSA9IChSVDEpKihj
LT5tZW1iZXIoKSk7CgkJKG9iamVjdC0+KnIxKSh0MCk7CgkJYnJlYWs7Cgl9CiAgICB9Cn0KCiAK
dm9pZCBRTmV0d29ya1Byb3RvY29sOjpuZXdDaGlsZHJlbiggY29uc3QgUVZhbHVlTGlzdDxRVXJs
SW5mbz4mIHQwLCBRTmV0d29ya09wZXJhdGlvbiogdDEgKQp7CiAgICAgCiAgICBRQ29ubmVjdGlv
bkxpc3QgKmNsaXN0ID0gcmVjZWl2ZXJzKCJuZXdDaGlsZHJlbihjb25zdCBRVmFsdWVMaXN0PFFV
cmxJbmZvPiYsUU5ldHdvcmtPcGVyYXRpb24qKSIpOwogICAgaWYgKCAhY2xpc3QgfHwgc2lnbmFs
c0Jsb2NrZWQoKSApCglyZXR1cm47CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipSVDApKCk7
CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipSVDEpKGNvbnN0IFFWYWx1ZUxpc3Q8UVVybElu
Zm8+Jik7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipSVDIpKGNvbnN0IFFWYWx1ZUxpc3Q8
UVVybEluZm8+JixRTmV0d29ya09wZXJhdGlvbiopOwogICAgUlQwIHIwOwogICAgUlQxIHIxOwog
ICAgUlQyIHIyOwogICAgUUNvbm5lY3Rpb25MaXN0SXQgaXQoKmNsaXN0KTsKICAgIFFDb25uZWN0
aW9uICAgKmM7CiAgICBRU2VuZGVyT2JqZWN0ICpvYmplY3Q7CiAgICB3aGlsZSAoIChjPWl0LmN1
cnJlbnQoKSkgKSB7CgkrK2l0OwoJb2JqZWN0ID0gKFFTZW5kZXJPYmplY3QqKWMtPm9iamVjdCgp
OwoJb2JqZWN0LT5zZXRTZW5kZXIoIHRoaXMgKTsKCXN3aXRjaCAoIGMtPm51bUFyZ3MoKSApIHsK
CSAgICBjYXNlIDA6CgkJcjAgPSAoUlQwKSooYy0+bWVtYmVyKCkpOwoJCShvYmplY3QtPipyMCko
KTsKCQlicmVhazsKCSAgICBjYXNlIDE6CgkJcjEgPSAoUlQxKSooYy0+bWVtYmVyKCkpOwoJCShv
YmplY3QtPipyMSkodDApOwoJCWJyZWFrOwoJICAgIGNhc2UgMjoKCQlyMiA9IChSVDIpKihjLT5t
ZW1iZXIoKSk7CgkJKG9iamVjdC0+KnIyKSh0MCwgdDEpOwoJCWJyZWFrOwoJfQogICAgfQp9Cgog
CnZvaWQgUU5ldHdvcmtQcm90b2NvbDo6bmV3Q2hpbGQoIGNvbnN0IFFVcmxJbmZvJiB0MCwgUU5l
dHdvcmtPcGVyYXRpb24qIHQxICkKewogICAgIAogICAgUUNvbm5lY3Rpb25MaXN0ICpjbGlzdCA9
IHJlY2VpdmVycygibmV3Q2hpbGQoY29uc3QgUVVybEluZm8mLFFOZXR3b3JrT3BlcmF0aW9uKiki
KTsKICAgIGlmICggIWNsaXN0IHx8IHNpZ25hbHNCbG9ja2VkKCkgKQoJcmV0dXJuOwogICAgdHlw
ZWRlZiB2b2lkIChRT2JqZWN0OjoqUlQwKSgpOwogICAgdHlwZWRlZiB2b2lkIChRT2JqZWN0Ojoq
UlQxKShjb25zdCBRVXJsSW5mbyYpOwogICAgdHlwZWRlZiB2b2lkIChRT2JqZWN0OjoqUlQyKShj
b25zdCBRVXJsSW5mbyYsUU5ldHdvcmtPcGVyYXRpb24qKTsKICAgIFJUMCByMDsKICAgIFJUMSBy
MTsKICAgIFJUMiByMjsKICAgIFFDb25uZWN0aW9uTGlzdEl0IGl0KCpjbGlzdCk7CiAgICBRQ29u
bmVjdGlvbiAgICpjOwogICAgUVNlbmRlck9iamVjdCAqb2JqZWN0OwogICAgd2hpbGUgKCAoYz1p
dC5jdXJyZW50KCkpICkgewoJKytpdDsKCW9iamVjdCA9IChRU2VuZGVyT2JqZWN0KiljLT5vYmpl
Y3QoKTsKCW9iamVjdC0+c2V0U2VuZGVyKCB0aGlzICk7Cglzd2l0Y2ggKCBjLT5udW1BcmdzKCkg
KSB7CgkgICAgY2FzZSAwOgoJCXIwID0gKFJUMCkqKGMtPm1lbWJlcigpKTsKCQkob2JqZWN0LT4q
cjApKCk7CgkJYnJlYWs7CgkgICAgY2FzZSAxOgoJCXIxID0gKFJUMSkqKGMtPm1lbWJlcigpKTsK
CQkob2JqZWN0LT4qcjEpKHQwKTsKCQlicmVhazsKCSAgICBjYXNlIDI6CgkJcjIgPSAoUlQyKSoo
Yy0+bWVtYmVyKCkpOwoJCShvYmplY3QtPipyMikodDAsIHQxKTsKCQlicmVhazsKCX0KICAgIH0K
fQoKIAp2b2lkIFFOZXR3b3JrUHJvdG9jb2w6OmNyZWF0ZWREaXJlY3RvcnkoIGNvbnN0IFFVcmxJ
bmZvJiB0MCwgUU5ldHdvcmtPcGVyYXRpb24qIHQxICkKewogICAgIAogICAgUUNvbm5lY3Rpb25M
aXN0ICpjbGlzdCA9IHJlY2VpdmVycygiY3JlYXRlZERpcmVjdG9yeShjb25zdCBRVXJsSW5mbyYs
UU5ldHdvcmtPcGVyYXRpb24qKSIpOwogICAgaWYgKCAhY2xpc3QgfHwgc2lnbmFsc0Jsb2NrZWQo
KSApCglyZXR1cm47CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipSVDApKCk7CiAgICB0eXBl
ZGVmIHZvaWQgKFFPYmplY3Q6OipSVDEpKGNvbnN0IFFVcmxJbmZvJik7CiAgICB0eXBlZGVmIHZv
aWQgKFFPYmplY3Q6OipSVDIpKGNvbnN0IFFVcmxJbmZvJixRTmV0d29ya09wZXJhdGlvbiopOwog
ICAgUlQwIHIwOwogICAgUlQxIHIxOwogICAgUlQyIHIyOwogICAgUUNvbm5lY3Rpb25MaXN0SXQg
aXQoKmNsaXN0KTsKICAgIFFDb25uZWN0aW9uICAgKmM7CiAgICBRU2VuZGVyT2JqZWN0ICpvYmpl
Y3Q7CiAgICB3aGlsZSAoIChjPWl0LmN1cnJlbnQoKSkgKSB7CgkrK2l0OwoJb2JqZWN0ID0gKFFT
ZW5kZXJPYmplY3QqKWMtPm9iamVjdCgpOwoJb2JqZWN0LT5zZXRTZW5kZXIoIHRoaXMgKTsKCXN3
aXRjaCAoIGMtPm51bUFyZ3MoKSApIHsKCSAgICBjYXNlIDA6CgkJcjAgPSAoUlQwKSooYy0+bWVt
YmVyKCkpOwoJCShvYmplY3QtPipyMCkoKTsKCQlicmVhazsKCSAgICBjYXNlIDE6CgkJcjEgPSAo
UlQxKSooYy0+bWVtYmVyKCkpOwoJCShvYmplY3QtPipyMSkodDApOwoJCWJyZWFrOwoJICAgIGNh
c2UgMjoKCQlyMiA9IChSVDIpKihjLT5tZW1iZXIoKSk7CgkJKG9iamVjdC0+KnIyKSh0MCwgdDEp
OwoJCWJyZWFrOwoJfQogICAgfQp9CgogCnZvaWQgUU5ldHdvcmtQcm90b2NvbDo6cmVtb3ZlZCgg
UU5ldHdvcmtPcGVyYXRpb24qIHQwICkKewogICAgIAogICAgUUNvbm5lY3Rpb25MaXN0ICpjbGlz
dCA9IHJlY2VpdmVycygicmVtb3ZlZChRTmV0d29ya09wZXJhdGlvbiopIik7CiAgICBpZiAoICFj
bGlzdCB8fCBzaWduYWxzQmxvY2tlZCgpICkKCXJldHVybjsKICAgIHR5cGVkZWYgdm9pZCAoUU9i
amVjdDo6KlJUMCkoKTsKICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6KlJUMSkoUU5ldHdvcmtP
cGVyYXRpb24qKTsKICAgIFJUMCByMDsKICAgIFJUMSByMTsKICAgIFFDb25uZWN0aW9uTGlzdEl0
IGl0KCpjbGlzdCk7CiAgICBRQ29ubmVjdGlvbiAgICpjOwogICAgUVNlbmRlck9iamVjdCAqb2Jq
ZWN0OwogICAgd2hpbGUgKCAoYz1pdC5jdXJyZW50KCkpICkgewoJKytpdDsKCW9iamVjdCA9IChR
U2VuZGVyT2JqZWN0KiljLT5vYmplY3QoKTsKCW9iamVjdC0+c2V0U2VuZGVyKCB0aGlzICk7Cglz
d2l0Y2ggKCBjLT5udW1BcmdzKCkgKSB7CgkgICAgY2FzZSAwOgoJCXIwID0gKFJUMCkqKGMtPm1l
bWJlcigpKTsKCQkob2JqZWN0LT4qcjApKCk7CgkJYnJlYWs7CgkgICAgY2FzZSAxOgoJCXIxID0g
KFJUMSkqKGMtPm1lbWJlcigpKTsKCQkob2JqZWN0LT4qcjEpKHQwKTsKCQlicmVhazsKCX0KICAg
IH0KfQoKIAp2b2lkIFFOZXR3b3JrUHJvdG9jb2w6Oml0ZW1DaGFuZ2VkKCBRTmV0d29ya09wZXJh
dGlvbiogdDAgKQp7CiAgICAgCiAgICBRQ29ubmVjdGlvbkxpc3QgKmNsaXN0ID0gcmVjZWl2ZXJz
KCJpdGVtQ2hhbmdlZChRTmV0d29ya09wZXJhdGlvbiopIik7CiAgICBpZiAoICFjbGlzdCB8fCBz
aWduYWxzQmxvY2tlZCgpICkKCXJldHVybjsKICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6KlJU
MCkoKTsKICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6KlJUMSkoUU5ldHdvcmtPcGVyYXRpb24q
KTsKICAgIFJUMCByMDsKICAgIFJUMSByMTsKICAgIFFDb25uZWN0aW9uTGlzdEl0IGl0KCpjbGlz
dCk7CiAgICBRQ29ubmVjdGlvbiAgICpjOwogICAgUVNlbmRlck9iamVjdCAqb2JqZWN0OwogICAg
d2hpbGUgKCAoYz1pdC5jdXJyZW50KCkpICkgewoJKytpdDsKCW9iamVjdCA9IChRU2VuZGVyT2Jq
ZWN0KiljLT5vYmplY3QoKTsKCW9iamVjdC0+c2V0U2VuZGVyKCB0aGlzICk7Cglzd2l0Y2ggKCBj
LT5udW1BcmdzKCkgKSB7CgkgICAgY2FzZSAwOgoJCXIwID0gKFJUMCkqKGMtPm1lbWJlcigpKTsK
CQkob2JqZWN0LT4qcjApKCk7CgkJYnJlYWs7CgkgICAgY2FzZSAxOgoJCXIxID0gKFJUMSkqKGMt
Pm1lbWJlcigpKTsKCQkob2JqZWN0LT4qcjEpKHQwKTsKCQlicmVhazsKCX0KICAgIH0KfQoKIAp2
b2lkIFFOZXR3b3JrUHJvdG9jb2w6OmRhdGFUcmFuc2ZlclByb2dyZXNzKCBpbnQgdDAsIGludCB0
MSwgUU5ldHdvcmtPcGVyYXRpb24qIHQyICkKewogICAgIAogICAgUUNvbm5lY3Rpb25MaXN0ICpj
bGlzdCA9IHJlY2VpdmVycygiZGF0YVRyYW5zZmVyUHJvZ3Jlc3MoaW50LGludCxRTmV0d29ya09w
ZXJhdGlvbiopIik7CiAgICBpZiAoICFjbGlzdCB8fCBzaWduYWxzQmxvY2tlZCgpICkKCXJldHVy
bjsKICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6KlJUMCkoKTsKICAgIHR5cGVkZWYgdm9pZCAo
UU9iamVjdDo6KlJUMSkoaW50KTsKICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6KlJUMikoaW50
LGludCk7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipSVDMpKGludCxpbnQsUU5ldHdvcmtP
cGVyYXRpb24qKTsKICAgIFJUMCByMDsKICAgIFJUMSByMTsKICAgIFJUMiByMjsKICAgIFJUMyBy
MzsKICAgIFFDb25uZWN0aW9uTGlzdEl0IGl0KCpjbGlzdCk7CiAgICBRQ29ubmVjdGlvbiAgICpj
OwogICAgUVNlbmRlck9iamVjdCAqb2JqZWN0OwogICAgd2hpbGUgKCAoYz1pdC5jdXJyZW50KCkp
ICkgewoJKytpdDsKCW9iamVjdCA9IChRU2VuZGVyT2JqZWN0KiljLT5vYmplY3QoKTsKCW9iamVj
dC0+c2V0U2VuZGVyKCB0aGlzICk7Cglzd2l0Y2ggKCBjLT5udW1BcmdzKCkgKSB7CgkgICAgY2Fz
ZSAwOgoJCXIwID0gKFJUMCkqKGMtPm1lbWJlcigpKTsKCQkob2JqZWN0LT4qcjApKCk7CgkJYnJl
YWs7CgkgICAgY2FzZSAxOgoJCXIxID0gKFJUMSkqKGMtPm1lbWJlcigpKTsKCQkob2JqZWN0LT4q
cjEpKHQwKTsKCQlicmVhazsKCSAgICBjYXNlIDI6CgkJcjIgPSAoUlQyKSooYy0+bWVtYmVyKCkp
OwoJCShvYmplY3QtPipyMikodDAsIHQxKTsKCQlicmVhazsKCSAgICBjYXNlIDM6CgkJcjMgPSAo
UlQzKSooYy0+bWVtYmVyKCkpOwoJCShvYmplY3QtPipyMykodDAsIHQxLCB0Mik7CgkJYnJlYWs7
Cgl9CiAgICB9Cn0KCgpjb25zdCBjaGFyICpRTmV0d29ya09wZXJhdGlvbjo6Y2xhc3NOYW1lKCkg
Y29uc3QKewogICAgcmV0dXJuICJRTmV0d29ya09wZXJhdGlvbiI7Cn0KClFNZXRhT2JqZWN0ICpR
TmV0d29ya09wZXJhdGlvbjo6bWV0YU9iaiA9IDA7Cgp2b2lkIFFOZXR3b3JrT3BlcmF0aW9uOjpp
bml0TWV0YU9iamVjdCgpCnsKICAgIGlmICggbWV0YU9iaiApCglyZXR1cm47CiAgICBpZiAoIHFz
dHJjbXAoUU9iamVjdDo6Y2xhc3NOYW1lKCksICJRT2JqZWN0IikgIT0gMCApCgliYWRTdXBlcmNs
YXNzV2FybmluZygiUU5ldHdvcmtPcGVyYXRpb24iLCJRT2JqZWN0Iik7CiAgICAodm9pZCkgc3Rh
dGljTWV0YU9iamVjdCgpOwp9CgoKClFTdHJpbmcgUU5ldHdvcmtPcGVyYXRpb246OnRyKGNvbnN0
IGNoYXIqIHMpCnsKICAgIHJldHVybiBxQXBwLT50cmFuc2xhdGUoICJRTmV0d29ya09wZXJhdGlv
biIsIHMsIDAgKTsKfQoKUVN0cmluZyBRTmV0d29ya09wZXJhdGlvbjo6dHIoY29uc3QgY2hhciog
cywgY29uc3QgY2hhciAqIGMpCnsKICAgIHJldHVybiBxQXBwLT50cmFuc2xhdGUoICJRTmV0d29y
a09wZXJhdGlvbiIsIHMsIGMgKTsKfQoKCgpRTWV0YU9iamVjdCogUU5ldHdvcmtPcGVyYXRpb246
OnN0YXRpY01ldGFPYmplY3QoKQp7CiAgICBpZiAoIG1ldGFPYmogKQoJcmV0dXJuIG1ldGFPYmo7
CiAgICAodm9pZCkgUU9iamVjdDo6c3RhdGljTWV0YU9iamVjdCgpOwoKCiAgICB0eXBlZGVmIHZv
aWQgKFFOZXR3b3JrT3BlcmF0aW9uOjoqbTFfdDApKCk7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmpl
Y3Q6OipvbTFfdDApKCk7CiAgICBtMV90MCB2MV8wID0gJlFOZXR3b3JrT3BlcmF0aW9uOjpkZWxl
dGVNZTsKICAgIG9tMV90MCBvdjFfMCA9IChvbTFfdDApdjFfMDsKICAgIFFNZXRhRGF0YSAqc2xv
dF90YmwgPSBRTWV0YU9iamVjdDo6bmV3X21ldGFkYXRhKDEpOwogICAgUU1ldGFEYXRhOjpBY2Nl
c3MgKnNsb3RfdGJsX2FjY2VzcyA9IFFNZXRhT2JqZWN0OjpuZXdfbWV0YWFjY2VzcygxKTsKICAg
IHNsb3RfdGJsWzBdLm5hbWUgPSAiZGVsZXRlTWUoKSI7CiAgICBzbG90X3RibFswXS5wdHIgPSAo
UU1lbWJlcilvdjFfMDsKICAgIHNsb3RfdGJsX2FjY2Vzc1swXSA9IFFNZXRhRGF0YTo6UHJpdmF0
ZTsKICAgIG1ldGFPYmogPSBRTWV0YU9iamVjdDo6bmV3X21ldGFvYmplY3QoCgkiUU5ldHdvcmtP
cGVyYXRpb24iLCAiUU9iamVjdCIsCglzbG90X3RibCwgMSwKCTAsIDAsCgoJMCwgMCwKCTAsIDAs
CgoJMCwgMCApOwogICAgbWV0YU9iai0+c2V0X3Nsb3RfYWNjZXNzKCBzbG90X3RibF9hY2Nlc3Mg
KTsKCgogICAgcmV0dXJuIG1ldGFPYmo7Cn0K


More information about the Gcc-prs mailing list