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


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

c++/2205: g++ crashes when compiling qdatastream.cpp in qt-2.2.4



>Number:         2205
>Category:       c++
>Synopsis:       g++ crashes when compiling qdatastream.cpp in qt-2.2.4
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Mar 07 06:36:01 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     Steinar Bang
>Release:        gcc version 3.0 20010306 (prerelease) (RPM by CodeSourcery)
>Organization:
>Environment:
i386-pc-linux-gnu (SuSE 7.0)
Configured with: ../configure --prefix=/tmp/gcc-20010306-root/usr/local --enable-shared --enable-threads --disable-checking i386-pc-linux-gnu
>Description:
g++ crashes when doing the following command:

g++  -c -I/usr/X11R6/include -I/home/sb/apps/qt/include -I/usr/X11R6/include -pipe -O2 -fPIC -DQT_BUILTIN_GIF_READER=0 -DQT_NO_IMAGEIO_JPEG -DQT_NO_IMAGEIO_MNG  -I/home/sb/apps/qt/src/3rdparty/zlib -I/home/sb/apps/qt/src/3rdparty/libpng  -o tools/qdatastream.o tools/qdatastream.cpp
<internal>:0: Internal error: Segmentation fault
Please submit a full bug report, with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
>How-To-Repeat:

>Fix:

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

IyAzOCAidG9vbHMvcWRhdGFzdHJlYW0uY3BwIgojIDEgInRvb2xzL3FkYXRhc3RyZWFtLmgiIDEK
IyA0MiAidG9vbHMvcWRhdGFzdHJlYW0uaCIKIyAxICJ0b29scy9xaW9kZXZpY2UuaCIgMQojIDQy
ICJ0b29scy9xaW9kZXZpY2UuaCIKIyAxICJ0b29scy9xZ2xvYmFsLmgiIDEKIyAzNDMgInRvb2xz
L3FnbG9iYWwuaCIKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVjaGFyOwp0eXBlZGVmIHVuc2lnbmVk
IHNob3J0IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCB1aW50Owp0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgdWxvbmc7CnR5cGVkZWYgY2hhciAqcGNoYXI7CnR5cGVkZWYgdWNoYXIgKnB1Y2hhcjsKdHlw
ZWRlZiBjb25zdCBjaGFyICpwY2NoYXI7CgoKCgoKCgpjb25zdCBib29sIEZBTFNFID0gMDsKY29u
c3QgYm9vbCBUUlVFID0gITA7CiMgMzgxICJ0b29scy9xZ2xvYmFsLmgiCmlubGluZSBpbnQgcVJv
dW5kKCBkb3VibGUgZCApCnsKICAgIHJldHVybiBkID4gMC4wID8gaW50KGQrMC41KSA6IGludChk
LTAuNSk7Cn0KIyAzOTQgInRvb2xzL3FnbG9iYWwuaCIKdHlwZWRlZiBzaWduZWQgY2hhciBJTlQ4
Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgVUlOVDg7CnR5cGVkZWYgc2hvcnQgSU5UMTY7CnR5cGVk
ZWYgdW5zaWduZWQgc2hvcnQgVUlOVDE2Owp0eXBlZGVmIGludCBJTlQzMjsKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgVUlOVDMyOwoKCnR5cGVkZWYgc2lnbmVkIGNoYXIgUV9JTlQ4Owp0eXBlZGVmIHVu
c2lnbmVkIGNoYXIgUV9VSU5UODsKdHlwZWRlZiBzaG9ydCBRX0lOVDE2Owp0eXBlZGVmIHVuc2ln
bmVkIHNob3J0IFFfVUlOVDE2Owp0eXBlZGVmIGludCBRX0lOVDMyOwp0eXBlZGVmIHVuc2lnbmVk
IGludCBRX1VJTlQzMjsKdHlwZWRlZiBsb25nIFFfSU5UNjQ7CnR5cGVkZWYgdW5zaWduZWQgbG9u
ZyBRX1VJTlQ2NDsKCgoKCgpjbGFzcyBRRGF0YVN0cmVhbTsKIyA0MjQgInRvb2xzL3FnbG9iYWwu
aCIKIyAxICIvaG9tZS9zYi9hcHBzL3F0L2luY2x1ZGUvcWZlYXR1cmVzLmgiIDEKIyA2NCAiL2hv
bWUvc2IvYXBwcy9xdC9pbmNsdWRlL3FmZWF0dXJlcy5oIgojIDEgIi9ob21lL3NiL2FwcHMvcXQv
aW5jbHVkZS9xY29uZmlnLmgiIDEKIyA2NSAiL2hvbWUvc2IvYXBwcy9xdC9pbmNsdWRlL3FmZWF0
dXJlcy5oIiAyCiMgNDI1ICJ0b29scy9xZ2xvYmFsLmgiIDIKIyA0NjIgInRvb2xzL3FnbG9iYWwu
aCIKICAgICAgICAgY29uc3QgY2hhciAqcVZlcnNpb24oKTsKICAgICAgICAgYm9vbCBxU3lzSW5m
byggaW50ICp3b3JkU2l6ZSwgYm9vbCAqYmlnRW5kaWFuICk7CiMgNTI2ICJ0b29scy9xZ2xvYmFs
LmgiCiAgICAgICAgIHZvaWQgcURlYnVnKCBjb25zdCBjaGFyICosIC4uLiApCgogICAgX19hdHRy
aWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7CgogICAgICAgICB2b2lkIHFXYXJu
aW5nKCBjb25zdCBjaGFyICosIC4uLiApCgogICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJp
bnRmLCAxLCAyKSkpCgo7CgogICAgICAgICB2b2lkIHFGYXRhbCggY29uc3QgY2hhciAqLCAuLi4g
KQoKICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQoKOwoKCgoKCgoK
ICAgICAgICAgdm9pZCBkZWJ1ZyggY29uc3QgY2hhciAqLCAuLi4gKQoKICAgIF9fYXR0cmlidXRl
X18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQoKOwoKICAgICAgICAgdm9pZCB3YXJuaW5nKCBj
b25zdCBjaGFyICosIC4uLiApCgogICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAx
LCAyKSkpCgo7CgogICAgICAgICB2b2lkIGZhdGFsKCBjb25zdCBjaGFyICosIC4uLiApCgogICAg
X19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7CiMgNTg1ICJ0b29scy9x
Z2xvYmFsLmgiCiAgICAgICAgIGJvb2wgcXRfY2hlY2tfcG9pbnRlciggYm9vbCBjLCBjb25zdCBj
aGFyICosIGludCApOwoKCgoKCgoKZW51bSBRdE1zZ1R5cGUgeyBRdERlYnVnTXNnLCBRdFdhcm5p
bmdNc2csIFF0RmF0YWxNc2cgfTsKCnR5cGVkZWYgdm9pZCAoKm1zZ19oYW5kbGVyKShRdE1zZ1R5
cGUsIGNvbnN0IGNoYXIgKik7CiAgICAgICAgIG1zZ19oYW5kbGVyIHFJbnN0YWxsTXNnSGFuZGxl
ciggbXNnX2hhbmRsZXIgKTsKCgogICAgICAgICB2b2lkIHFTdXBwcmVzc09ic29sZXRlV2Fybmlu
Z3MoIGJvb2wgPSBUUlVFICk7CgoKCiAgICAgICAgIHZvaWQgcU9ic29sZXRlKCBjb25zdCBjaGFy
ICpvYmosIGNvbnN0IGNoYXIgKm9sZGZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICpuZXdmdW5jICk7CiAgICAgICAgIHZvaWQgcU9ic29sZXRlKCBjb25zdCBjaGFyICpv
YmosIGNvbnN0IGNoYXIgKm9sZGZ1bmMgKTsKICAgICAgICAgdm9pZCBxT2Jzb2xldGUoIGNvbnN0
IGNoYXIgKm1lc3NhZ2UgKTsKIyA0MyAidG9vbHMvcWlvZGV2aWNlLmgiIDIKIyAxICJ0b29scy9x
Y3N0cmluZy5oIiAxCiMgNDMgInRvb2xzL3Fjc3RyaW5nLmgiCiMgMSAidG9vbHMvcWFycmF5Lmgi
IDEKIyA0MiAidG9vbHMvcWFycmF5LmgiCiMgMSAidG9vbHMvcWdhcnJheS5oIiAxCiMgNDIgInRv
b2xzL3FnYXJyYXkuaCIKIyAxICJ0b29scy9xc2hhcmVkLmgiIDEKIyA0MiAidG9vbHMvcXNoYXJl
ZC5oIgojIDEgInRvb2xzL3FnbG9iYWwuaCIgMQojIDQzICJ0b29scy9xc2hhcmVkLmgiIDIKCgoK
c3RydWN0IFFTaGFyZWQKewogICAgUVNoYXJlZCgpIHsgY291bnQgPSAxOyB9CiAgICB2b2lkIHJl
ZigpIHsgY291bnQrKzsgfQogICAgYm9vbCBkZXJlZigpIHsgcmV0dXJuICEtLWNvdW50OyB9CiAg
ICB1aW50IGNvdW50Owp9OwojIDQzICJ0b29scy9xZ2FycmF5LmgiIDIKCgoKY2xhc3MgUUdBcnJh
eQp7CmZyaWVuZCBjbGFzcyBRQnVmZmVyOwpwdWJsaWM6CgogICAgc3RydWN0IGFycmF5X2RhdGEg
OiBwdWJsaWMgUVNoYXJlZCB7CiAgICAgICAgYXJyYXlfZGF0YSgpIHsgZGF0YT0wOyBsZW49MDsg
fQogICAgICAgIGNoYXIgKmRhdGE7CiAgICAgICAgdWludCBsZW47CiAgICB9OwogICAgUUdBcnJh
eSgpOwpwcm90ZWN0ZWQ6CiAgICBRR0FycmF5KCBpbnQsIGludCApOwogICAgUUdBcnJheSggaW50
IHNpemUgKTsKICAgIFFHQXJyYXkoIGNvbnN0IFFHQXJyYXkgJmEgKTsKICAgIHZpcnR1YWwgflFH
QXJyYXkoKTsKCiAgICBRR0FycmF5ICZvcGVyYXRvcj0oIGNvbnN0IFFHQXJyYXkgJmEgKSB7IHJl
dHVybiBhc3NpZ24oIGEgKTsgfQoKICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKSB7IGR1cGxpY2F0
ZSgqdGhpcyk7IH0KCiAgICBjaGFyICpkYXRhKCkgY29uc3QgeyByZXR1cm4gc2hkLT5kYXRhOyB9
CiAgICB1aW50IG5yZWZzKCkgY29uc3QgeyByZXR1cm4gc2hkLT5jb3VudDsgfQogICAgdWludCBz
aXplKCkgY29uc3QgeyByZXR1cm4gc2hkLT5sZW47IH0KICAgIGJvb2wgaXNFcXVhbCggY29uc3Qg
UUdBcnJheSAmYSApIGNvbnN0OwoKICAgIGJvb2wgcmVzaXplKCB1aW50IG5ld3NpemUgKTsKCiAg
ICBib29sIGZpbGwoIGNvbnN0IGNoYXIgKmQsIGludCBsZW4sIHVpbnQgc3ogKTsKCiAgICBRR0Fy
cmF5ICZhc3NpZ24oIGNvbnN0IFFHQXJyYXkgJmEgKTsKICAgIFFHQXJyYXkgJmFzc2lnbiggY29u
c3QgY2hhciAqZCwgdWludCBsZW4gKTsKICAgIFFHQXJyYXkgJmR1cGxpY2F0ZSggY29uc3QgUUdB
cnJheSAmYSApOwogICAgUUdBcnJheSAmZHVwbGljYXRlKCBjb25zdCBjaGFyICpkLCB1aW50IGxl
biApOwogICAgdm9pZCBzdG9yZSggY29uc3QgY2hhciAqZCwgdWludCBsZW4gKTsKCiAgICBhcnJh
eV9kYXRhICpzaGFyZWRCbG9jaygpIGNvbnN0IHsgcmV0dXJuIHNoZDsgfQogICAgdm9pZCBzZXRT
aGFyZWRCbG9jayggYXJyYXlfZGF0YSAqcCApIHsgc2hkPShhcnJheV9kYXRhKilwOyB9CgogICAg
UUdBcnJheSAmc2V0UmF3RGF0YSggY29uc3QgY2hhciAqZCwgdWludCBsZW4gKTsKICAgIHZvaWQg
cmVzZXRSYXdEYXRhKCBjb25zdCBjaGFyICpkLCB1aW50IGxlbiApOwoKICAgIGludCBmaW5kKCBj
b25zdCBjaGFyICpkLCB1aW50IGluZGV4LCB1aW50IHN6ICkgY29uc3Q7CiAgICBpbnQgY29udGFp
bnMoIGNvbnN0IGNoYXIgKmQsIHVpbnQgc3ogKSBjb25zdDsKCiAgICB2b2lkIHNvcnQoIHVpbnQg
c3ogKTsKICAgIGludCBic2VhcmNoKCBjb25zdCBjaGFyICpkLCB1aW50IHN6ICkgY29uc3Q7Cgog
ICAgY2hhciAqYXQoIHVpbnQgaW5kZXggKSBjb25zdDsKCiAgICBib29sIHNldEV4cGFuZCggdWlu
dCBpbmRleCwgY29uc3QgY2hhciAqZCwgdWludCBzeiApOwoKcHJvdGVjdGVkOgogICAgdmlydHVh
bCBhcnJheV9kYXRhICpuZXdEYXRhKCk7CiAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YSggYXJy
YXlfZGF0YSAqcCApOwoKcHJpdmF0ZToKICAgIHN0YXRpYyB2b2lkIG1zZ19pbmRleCggdWludCAp
OwogICAgYXJyYXlfZGF0YSAqc2hkOwp9OwoKCmlubGluZSBjaGFyICpRR0FycmF5OjphdCggdWlu
dCBpbmRleCApIGNvbnN0CnsKCiAgICBpZiAoIGluZGV4ID49IHNpemUoKSApIHsKICAgICAgICBt
c2dfaW5kZXgoIGluZGV4ICk7CiAgICAgICAgaW5kZXggPSAwOwogICAgfQoKICAgIHJldHVybiAm
c2hkLT5kYXRhW2luZGV4XTsKfQojIDQzICJ0b29scy9xYXJyYXkuaCIgMgoKCgp0ZW1wbGF0ZTxj
bGFzcyB0eXBlPiBjbGFzcyBRQXJyYXkgOiBwdWJsaWMgUUdBcnJheQp7CnB1YmxpYzoKICAgIHR5
cGVkZWYgdHlwZSogSXRlcmF0b3I7CiAgICB0eXBlZGVmIGNvbnN0IHR5cGUqIENvbnN0SXRlcmF0
b3I7CiAgICB0eXBlZGVmIHR5cGUgVmFsdWVUeXBlOwoKcHJvdGVjdGVkOgogICAgUUFycmF5KCBp
bnQsIGludCApIDogUUdBcnJheSggMCwgMCApIHt9CgpwdWJsaWM6CiAgICBRQXJyYXkoKSB7fQog
ICAgUUFycmF5KCBpbnQgc2l6ZSApIDogUUdBcnJheShzaXplKnNpemVvZih0eXBlKSkge30KICAg
IFFBcnJheSggY29uc3QgUUFycmF5PHR5cGU+ICZhICkgOiBRR0FycmF5KGEpIHt9CiAgIH5RQXJy
YXkoKSB7fQogICAgUUFycmF5PHR5cGU+ICZvcGVyYXRvcj0oY29uc3QgUUFycmF5PHR5cGU+ICZh
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIChRQXJyYXk8dHlwZT4m
KVFHQXJyYXk6OmFzc2lnbihhKTsgfQogICAgdHlwZSAqZGF0YSgpIGNvbnN0IHsgcmV0dXJuICh0
eXBlICopUUdBcnJheTo6ZGF0YSgpOyB9CiAgICB1aW50IG5yZWZzKCkgY29uc3QgeyByZXR1cm4g
UUdBcnJheTo6bnJlZnMoKTsgfQogICAgdWludCBzaXplKCkgY29uc3QgeyByZXR1cm4gUUdBcnJh
eTo6c2l6ZSgpL3NpemVvZih0eXBlKTsgfQogICAgdWludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJu
IHNpemUoKTsgfQogICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gUUdBcnJheTo6c2l6
ZSgpID09IDA7IH0KICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gUUdBcnJheTo6ZGF0
YSgpID09IDA7IH0KICAgIGJvb2wgcmVzaXplKCB1aW50IHNpemUgKSB7IHJldHVybiBRR0FycmF5
OjpyZXNpemUoc2l6ZSpzaXplb2YodHlwZSkpOyB9CiAgICBib29sIHRydW5jYXRlKCB1aW50IHBv
cyApIHsgcmV0dXJuIFFHQXJyYXk6OnJlc2l6ZShwb3Mqc2l6ZW9mKHR5cGUpKTsgfQogICAgYm9v
bCBmaWxsKCBjb25zdCB0eXBlICZkLCBpbnQgc2l6ZSA9IC0xICkKICAgICAgICB7IHJldHVybiBR
R0FycmF5OjpmaWxsKChjaGFyKikmZCxzaXplLHNpemVvZih0eXBlKSApOyB9CiAgICB2b2lkIGRl
dGFjaCgpIHsgUUdBcnJheTo6ZGV0YWNoKCk7IH0KICAgIFFBcnJheTx0eXBlPiBjb3B5KCkgY29u
c3QKICAgICAgICB7IFFBcnJheTx0eXBlPiB0bXA7IHJldHVybiB0bXAuZHVwbGljYXRlKCp0aGlz
KTsgfQogICAgUUFycmF5PHR5cGU+JiBhc3NpZ24oIGNvbnN0IFFBcnJheTx0eXBlPiYgYSApCiAg
ICAgICAgeyByZXR1cm4gKFFBcnJheTx0eXBlPiYpUUdBcnJheTo6YXNzaWduKGEpOyB9CiAgICBR
QXJyYXk8dHlwZT4mIGFzc2lnbiggY29uc3QgdHlwZSAqYSwgdWludCBuICkKICAgICAgICB7IHJl
dHVybiAoUUFycmF5PHR5cGU+JilRR0FycmF5Ojphc3NpZ24oKGNoYXIqKWEsbipzaXplb2YodHlw
ZSkpOyB9CiAgICBRQXJyYXk8dHlwZT4mIGR1cGxpY2F0ZSggY29uc3QgUUFycmF5PHR5cGU+JiBh
ICkKICAgICAgICB7IHJldHVybiAoUUFycmF5PHR5cGU+JilRR0FycmF5OjpkdXBsaWNhdGUoYSk7
IH0KICAgIFFBcnJheTx0eXBlPiYgZHVwbGljYXRlKCBjb25zdCB0eXBlICphLCB1aW50IG4gKQog
ICAgICAgIHsgcmV0dXJuIChRQXJyYXk8dHlwZT4mKVFHQXJyYXk6OmR1cGxpY2F0ZSgoY2hhciop
YSxuKnNpemVvZih0eXBlKSk7IH0KICAgIFFBcnJheTx0eXBlPiYgc2V0UmF3RGF0YSggY29uc3Qg
dHlwZSAqYSwgdWludCBuICkKICAgICAgICB7IHJldHVybiAoUUFycmF5PHR5cGU+JilRR0FycmF5
OjpzZXRSYXdEYXRhKChjaGFyKilhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG4qc2l6ZW9mKHR5cGUpKTsgfQogICAgdm9pZCByZXNldFJhd0Rh
dGEoIGNvbnN0IHR5cGUgKmEsIHVpbnQgbiApCiAgICAgICAgeyBRR0FycmF5OjpyZXNldFJhd0Rh
dGEoKGNoYXIqKWEsbipzaXplb2YodHlwZSkpOyB9CiAgICBpbnQgZmluZCggY29uc3QgdHlwZSAm
ZCwgdWludCBpPTAgKSBjb25zdAogICAgICAgIHsgcmV0dXJuIFFHQXJyYXk6OmZpbmQoKGNoYXIq
KSZkLGksc2l6ZW9mKHR5cGUpKTsgfQogICAgaW50IGNvbnRhaW5zKCBjb25zdCB0eXBlICZkICkg
Y29uc3QKICAgICAgICB7IHJldHVybiBRR0FycmF5Ojpjb250YWlucygoY2hhciopJmQsc2l6ZW9m
KHR5cGUpKTsgfQogICAgdm9pZCBzb3J0KCkgeyBRR0FycmF5Ojpzb3J0KHNpemVvZih0eXBlKSk7
IH0KICAgIGludCBic2VhcmNoKCBjb25zdCB0eXBlICZkICkgY29uc3QKICAgICAgICB7IHJldHVy
biBRR0FycmF5Ojpic2VhcmNoKChjb25zdCBjaGFyKikmZCxzaXplb2YodHlwZSkpOyB9CiAgICB0
eXBlJiBvcGVyYXRvcltdKCBpbnQgaSApIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKHR5cGUgJiko
Kih0eXBlICopUUdBcnJheTo6YXQoaSpzaXplb2YodHlwZSkpKTsgfQogICAgdHlwZSYgYXQoIHVp
bnQgaSApIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKHR5cGUgJikoKih0eXBlICopUUdBcnJheTo6
YXQoaSpzaXplb2YodHlwZSkpKTsgfQogICAgICAgICBvcGVyYXRvciBjb25zdCB0eXBlKigpIGNv
bnN0IHsgcmV0dXJuIChjb25zdCB0eXBlICopUUdBcnJheTo6ZGF0YSgpOyB9CiAgICBib29sIG9w
ZXJhdG9yPT0oIGNvbnN0IFFBcnJheTx0eXBlPiAmYSApIGNvbnN0IHsgcmV0dXJuIGlzRXF1YWwo
YSk7IH0KICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUUFycmF5PHR5cGU+ICZhICkgY29uc3Qg
eyByZXR1cm4gIWlzRXF1YWwoYSk7IH0KICAgIEl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gZGF0
YSgpOyB9CiAgICBJdGVyYXRvciBlbmQoKSB7IHJldHVybiBkYXRhKCkgKyBzaXplKCk7IH0KICAg
IENvbnN0SXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBkYXRhKCk7IH0KICAgIENvbnN0
SXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gZGF0YSgpICsgc2l6ZSgpOyB9Cn07CiMgNDQg
InRvb2xzL3Fjc3RyaW5nLmgiIDIKCgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMg
MjYgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o
IiAxIDMKIyAyNTAgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L3N5cy9jZGVmcy5oIiAxIDMKIyAyNTEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAy
NzggIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVi
cy5oIiAxIDMKIyAyNzkgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAyNyAiL3Vzci9p
bmNsdWRlL3N0cmluZy5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKIyAxICIvdXNyL2xvY2FsL2xp
Yi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAx
OTkgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUv
c3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDM0ICIvdXNyL2luY2x1
ZGUvc3RyaW5nLmgiIDIgMwoKCgpleHRlcm4gdm9pZCAqIG1lbWNweSAodm9pZCAqIF9fcmVzdHJp
Y3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKiBfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgKiBtZW1tb3ZlICh2b2lkICogX19kZXN0LCBfX2NvbnN0
IHZvaWQgKiBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkICog
bWVtY2NweSAodm9pZCAqIF9fZGVzdCwgX19jb25zdCB2b2lkICogX19zcmMsIGludCBfX2MsIHNp
emVfdCBfX24pIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkICogbWVtc2V0ICh2b2lkICogX19z
LCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19j
b25zdCB2b2lkICogX19zMSwgX19jb25zdCB2b2lkICogX19zMiwgc2l6ZV90IF9fbikgdGhyb3cg
KCk7CgoKCmV4dGVybiB2b2lkICogbWVtY2hyIChfX2NvbnN0IHZvaWQgKiBfX3MsIGludCBfX2Ms
IHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgKiByYXdtZW1jaHIgKF9fY29u
c3Qgdm9pZCAqIF9fcywgaW50IF9fYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyY3B5
IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Jj
KSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rl
c3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7
CgoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJuY2F0
IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Jj
LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzdHJjbXAgKF9fY29uc3QgY2hh
ciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3RybmNt
cCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0
IGNoYXIgKl9fczIpIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFyICpfX3Jl
c3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19u
KSB0aHJvdyAoKTsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyOCAi
L3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMwp0eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QK
ewogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVzWzZdOwoKCiAgY29uc3QgdW5zaWduZWQg
c2hvcnQgaW50ICpfX2N0eXBlX2I7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvbG93ZXI7CiAgY29u
c3QgaW50ICpfX2N0eXBlX3RvdXBwZXI7Cn0gKl9fbG9jYWxlX3Q7CiMgMTAwICIvdXNyL2luY2x1
ZGUvc3RyaW5nLmgiIDIgMwoKCmV4dGVybiBpbnQgX19zdHJjb2xsX2wgKF9fY29uc3QgY2hhciAq
X19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIHNpemVfdCBfX3N0cnhmcm1fbCAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3Jj
LCBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIg
Kl9fc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHJk
dXAgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cm5k
dXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX24pIHRocm93ICgpOwojIDE0NiAi
L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hh
ciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0
IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVs
IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90
IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KSB0aHJv
dyAoKTsKCgpleHRlcm4gc2l6ZV90IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3Qg
Y2hhciAqX19hY2NlcHQpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3Qg
Y2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KSB0aHJvdyAoKTsKCmV4dGVybiBjaGFy
ICpzdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRs
ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3N0cmNhc2VzdHIgKF9fY29uc3QgY2hhciAq
X19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkgdGhyb3cgKCk7CgpleHRlcm4gY2hh
ciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9f
bmVlZGxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJp
Y3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2RlbGltLCBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9w
dHIpIHRocm93ICgpOwojIDE5NCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiB2b2lk
ICogbWVtbWVtIChfX2NvbnN0IHZvaWQgKiBfX2hheXN0YWNrLCBzaXplX3QgX19oYXlzdGFja2xl
biwgX19jb25zdCB2b2lkICogX19uZWVkbGUsIHNpemVfdCBfX25lZWRsZWxlbikgdGhyb3cgKCk7
CgoKCgpleHRlcm4gdm9pZCAqIF9fbWVtcGNweSAodm9pZCAqIF9fcmVzdHJpY3QgX19kZXN0LCBf
X2NvbnN0IHZvaWQgKiBfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4
dGVybiB2b2lkICogbWVtcGNweSAodm9pZCAqIF9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZv
aWQgKiBfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
c2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNp
emVfdCBzdHJubGVuIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRocm93ICgp
OwoKCgpleHRlcm4gY2hhciAqX19zdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVm
LCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RyZXJyb3JfciAoaW50
IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKiBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpl
eHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICogX19zcmMsIHZvaWQgKiBfX2Rlc3QsIHNp
emVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICogX19zLCBzaXpl
X3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqIF9fczEs
IF9fY29uc3Qgdm9pZCAqIF9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFy
ICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBj
aGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCBfX2ZmcyAoaW50IF9faSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7
CmV4dGVybiBpbnQgZmZzIChpbnQgX19pKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3Qp
KTsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBpbnQgX19sKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoY29uc3QpKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGludCBmZnNsbCAobG9uZyBsb25n
IGludCBfX2xsKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChjb25zdCkpOwoKCgoKZXh0
ZXJuIGludCBfX3N0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpf
X3MyKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBzdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEs
IF9fY29uc3QgY2hhciAqX19zMikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAo
X19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pIHRocm93
ICgpOwoKCgoKCgpleHRlcm4gaW50IF9fc3RyY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEs
IF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBfX3N0cm5jYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpf
X3MyLCBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19kZWxpbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21w
IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgdGhyb3cgKCk7CgoKZXh0
ZXJuIGNoYXIgKnN0cnNpZ25hbCAoaW50IF9fc2lnKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAq
X19zdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmlj
dCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gY2hhciAqX19zdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFy
ICpzdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmZyeSAo
Y2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICogbWVtZnJvYiAodm9pZCAq
IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAo
X19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKIyAzNTAgIi91c3IvaW5jbHVkZS9z
dHJpbmcuaCIgMwp9CiMgNDcgInRvb2xzL3Fjc3RyaW5nLmgiIDIKIyA3OCAidG9vbHMvcWNzdHJp
bmcuaCIKICAgICAgICAgdm9pZCAqcW1lbW1vdmUoIHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3Jj
LCB1aW50IGxlbiApOwoKCgoKCiAgICAgICAgIGNoYXIgKnFzdHJkdXAoIGNvbnN0IGNoYXIgKiAp
OwoKICAgICAgICAgaW5saW5lIHVpbnQgY3N0cmxlbiggY29uc3QgY2hhciAqc3RyICkKeyByZXR1
cm4gc3RybGVuKHN0cik7IH0KCiAgICAgICAgIGlubGluZSB1aW50IHFzdHJsZW4oIGNvbnN0IGNo
YXIgKnN0ciApCnsgcmV0dXJuIHN0ciA/IHN0cmxlbihzdHIpIDogMDsgfQoKICAgICAgICAgaW5s
aW5lIGNoYXIgKmNzdHJjcHkoIGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjICkKeyByZXR1cm4g
c3RyY3B5KGRzdCxzcmMpOyB9CgogICAgICAgICBpbmxpbmUgY2hhciAqcXN0cmNweSggY2hhciAq
ZHN0LCBjb25zdCBjaGFyICpzcmMgKQp7IHJldHVybiBzcmMgPyBzdHJjcHkoZHN0LCBzcmMpIDog
MDsgfQoKICAgICAgICAgY2hhciAqcXN0cm5jcHkoIGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3Jj
LCB1aW50IGxlbiApOwoKICAgICAgICAgaW5saW5lIGludCBjc3RyY21wKCBjb25zdCBjaGFyICpz
dHIxLCBjb25zdCBjaGFyICpzdHIyICkKeyByZXR1cm4gc3RyY21wKHN0cjEsc3RyMik7IH0KCiAg
ICAgICAgIGlubGluZSBpbnQgcXN0cmNtcCggY29uc3QgY2hhciAqc3RyMSwgY29uc3QgY2hhciAq
c3RyMiApCnsgcmV0dXJuIChzdHIxICYmIHN0cjIpID8gc3RyY21wKHN0cjEsc3RyMikgOiAoaW50
KSgobG9uZylzdHIyIC0gKGxvbmcpc3RyMSk7IH0KCiAgICAgICAgIGlubGluZSBpbnQgY3N0cm5j
bXAoIGNvbnN0IGNoYXIgKnN0cjEsIGNvbnN0IGNoYXIgKnN0cjIsIHVpbnQgbGVuICkKeyByZXR1
cm4gc3RybmNtcChzdHIxLHN0cjIsbGVuKTsgfQoKICAgICAgICAgaW5saW5lIGludCBxc3RybmNt
cCggY29uc3QgY2hhciAqc3RyMSwgY29uc3QgY2hhciAqc3RyMiwgdWludCBsZW4gKQp7IHJldHVy
biAoc3RyMSAmJiBzdHIyKSA/IHN0cm5jbXAoc3RyMSxzdHIyLGxlbikgOgogICAgICAgICAgICAg
ICAgICAgICAgICAgIChpbnQpKChsb25nKXN0cjIgLSAobG9uZylzdHIxKTsgfQoKICAgICAgICAg
aW50IHFzdHJpY21wKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwoKICAgICAgICAgaW50
IHFzdHJuaWNtcCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHVpbnQgbGVuICk7CiMgMTQ3
ICJ0b29scy9xY3N0cmluZy5oIgogICAgICAgICBRX1VJTlQxNiBxQ2hlY2tzdW0oIGNvbnN0IGNo
YXIgKnMsIHVpbnQgbGVuICk7CiMgMTU2ICJ0b29scy9xY3N0cmluZy5oIgp0eXBlZGVmIFFBcnJh
eTxjaGFyPiBRQnl0ZUFycmF5OwoKCgoKCgogICAgICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8
PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUUJ5dGVBcnJheSAmICk7CiAgICAgICAgIFFEYXRhU3Ry
ZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRQnl0ZUFycmF5ICYgKTsKIyAxNzMgInRv
b2xzL3Fjc3RyaW5nLmgiCmNsYXNzIFFSZWdFeHA7CgpjbGFzcyBRQ1N0cmluZyA6IHB1YmxpYyBR
Qnl0ZUFycmF5CnsKcHVibGljOgogICAgUUNTdHJpbmcoKSB7fQogICAgUUNTdHJpbmcoIGludCBz
aXplICk7CiAgICBRQ1N0cmluZyggY29uc3QgUUNTdHJpbmcgJnMgKSA6IFFCeXRlQXJyYXkoIHMg
KSB7fQogICAgUUNTdHJpbmcoIGNvbnN0IGNoYXIgKnN0ciApOwogICAgUUNTdHJpbmcoIGNvbnN0
IGNoYXIgKnN0ciwgdWludCBtYXhsZW4gKTsKCiAgICBRQ1N0cmluZyAmb3BlcmF0b3I9KCBjb25z
dCBRQ1N0cmluZyAmcyApOwogICAgUUNTdHJpbmcgJm9wZXJhdG9yPSggY29uc3QgY2hhciAqc3Ry
ICk7CgogICAgYm9vbCBpc051bGwoKSBjb25zdDsKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0Owog
ICAgdWludCBsZW5ndGgoKSBjb25zdDsKICAgIGJvb2wgcmVzaXplKCB1aW50IG5ld2xlbiApOwog
ICAgYm9vbCB0cnVuY2F0ZSggdWludCBwb3MgKTsKICAgIGJvb2wgZmlsbCggY2hhciBjLCBpbnQg
bGVuID0gLTEgKTsKCiAgICBRQ1N0cmluZyBjb3B5KCkgY29uc3Q7CgogICAgUUNTdHJpbmcgJnNw
cmludGYoIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uICk7CgogICAgaW50IGZpbmQoIGNoYXIgYywg
aW50IGluZGV4PTAsIGJvb2wgY3M9VFJVRSApIGNvbnN0OwogICAgaW50IGZpbmQoIGNvbnN0IGNo
YXIgKnN0ciwgaW50IGluZGV4PTAsIGJvb2wgY3M9VFJVRSApIGNvbnN0OwogICAgaW50IGZpbmQo
IGNvbnN0IFFSZWdFeHAgJiwgaW50IGluZGV4PTAgKSBjb25zdDsKICAgIGludCBmaW5kUmV2KCBj
aGFyIGMsIGludCBpbmRleD0tMSwgYm9vbCBjcz1UUlVFKSBjb25zdDsKICAgIGludCBmaW5kUmV2
KCBjb25zdCBjaGFyICpzdHIsIGludCBpbmRleD0tMSwgYm9vbCBjcz1UUlVFKSBjb25zdDsKICAg
IGludCBmaW5kUmV2KCBjb25zdCBRUmVnRXhwICYsIGludCBpbmRleD0tMSApIGNvbnN0OwogICAg
aW50IGNvbnRhaW5zKCBjaGFyIGMsIGJvb2wgY3M9VFJVRSApIGNvbnN0OwogICAgaW50IGNvbnRh
aW5zKCBjb25zdCBjaGFyICpzdHIsIGJvb2wgY3M9VFJVRSApIGNvbnN0OwogICAgaW50IGNvbnRh
aW5zKCBjb25zdCBRUmVnRXhwICYgKSBjb25zdDsKCiAgICBRQ1N0cmluZyBsZWZ0KCB1aW50IGxl
biApIGNvbnN0OwogICAgUUNTdHJpbmcgcmlnaHQoIHVpbnQgbGVuICkgY29uc3Q7CiAgICBRQ1N0
cmluZyBtaWQoIHVpbnQgaW5kZXgsIHVpbnQgbGVuPTB4ZmZmZmZmZmYpIGNvbnN0OwoKICAgIFFD
U3RyaW5nIGxlZnRKdXN0aWZ5KCB1aW50IHdpZHRoLCBjaGFyIGZpbGw9JyAnLCBib29sIHRydW5j
PUZBTFNFKWNvbnN0OwogICAgUUNTdHJpbmcgcmlnaHRKdXN0aWZ5KCB1aW50IHdpZHRoLCBjaGFy
IGZpbGw9JyAnLGJvb2wgdHJ1bmM9RkFMU0UpY29uc3Q7CgogICAgUUNTdHJpbmcgbG93ZXIoKSBj
b25zdDsKICAgIFFDU3RyaW5nIHVwcGVyKCkgY29uc3Q7CgogICAgUUNTdHJpbmcgc3RyaXBXaGl0
ZVNwYWNlKCkgY29uc3Q7CiAgICBRQ1N0cmluZyBzaW1wbGlmeVdoaXRlU3BhY2UoKSBjb25zdDsK
CiAgICBRQ1N0cmluZyAmaW5zZXJ0KCB1aW50IGluZGV4LCBjb25zdCBjaGFyICogKTsKICAgIFFD
U3RyaW5nICZpbnNlcnQoIHVpbnQgaW5kZXgsIGNoYXIgKTsKICAgIFFDU3RyaW5nICZhcHBlbmQo
IGNvbnN0IGNoYXIgKiApOwogICAgUUNTdHJpbmcgJnByZXBlbmQoIGNvbnN0IGNoYXIgKiApOwog
ICAgUUNTdHJpbmcgJnJlbW92ZSggdWludCBpbmRleCwgdWludCBsZW4gKTsKICAgIFFDU3RyaW5n
ICZyZXBsYWNlKCB1aW50IGluZGV4LCB1aW50IGxlbiwgY29uc3QgY2hhciAqICk7CiAgICBRQ1N0
cmluZyAmcmVwbGFjZSggY29uc3QgUVJlZ0V4cCAmLCBjb25zdCBjaGFyICogKTsKCiAgICBzaG9y
dCB0b1Nob3J0KCBib29sICpvaz0wICkgY29uc3Q7CiAgICB1c2hvcnQgdG9VU2hvcnQoIGJvb2wg
Km9rPTAgKSBjb25zdDsKICAgIGludCB0b0ludCggYm9vbCAqb2s9MCApIGNvbnN0OwogICAgdWlu
dCB0b1VJbnQoIGJvb2wgKm9rPTAgKSBjb25zdDsKICAgIGxvbmcgdG9Mb25nKCBib29sICpvaz0w
ICkgY29uc3Q7CiAgICB1bG9uZyB0b1VMb25nKCBib29sICpvaz0wICkgY29uc3Q7CiAgICBmbG9h
dCB0b0Zsb2F0KCBib29sICpvaz0wICkgY29uc3Q7CiAgICBkb3VibGUgdG9Eb3VibGUoIGJvb2wg
Km9rPTAgKSBjb25zdDsKCiAgICBRQ1N0cmluZyAmc2V0U3RyKCBjb25zdCBjaGFyICpzICk7CiAg
ICBRQ1N0cmluZyAmc2V0TnVtKCBzaG9ydCApOwogICAgUUNTdHJpbmcgJnNldE51bSggdXNob3J0
ICk7CiAgICBRQ1N0cmluZyAmc2V0TnVtKCBpbnQgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIHVp
bnQgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIGxvbmcgKTsKICAgIFFDU3RyaW5nICZzZXROdW0o
IHVsb25nICk7CiAgICBRQ1N0cmluZyAmc2V0TnVtKCBmbG9hdCwgY2hhciBmPSdnJywgaW50IHBy
ZWM9NiApOwogICAgUUNTdHJpbmcgJnNldE51bSggZG91YmxlLCBjaGFyIGY9J2cnLCBpbnQgcHJl
Yz02ICk7CgogICAgYm9vbCBzZXRFeHBhbmQoIHVpbnQgaW5kZXgsIGNoYXIgYyApOwoKICAgICAg
ICAgICAgICAgIG9wZXJhdG9yIGNvbnN0IGNoYXIgKigpIGNvbnN0OwogICAgUUNTdHJpbmcgJm9w
ZXJhdG9yKz0oIGNvbnN0IGNoYXIgKnN0ciApOwogICAgUUNTdHJpbmcgJm9wZXJhdG9yKz0oIGNo
YXIgYyApOwp9OwoKCgoKCgogICAgICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFT
dHJlYW0gJiwgY29uc3QgUUNTdHJpbmcgJiApOwogICAgICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0
b3I+PiggUURhdGFTdHJlYW0gJiwgUUNTdHJpbmcgJiApOwoKCgoKCgppbmxpbmUgUUNTdHJpbmcg
JlFDU3RyaW5nOjpvcGVyYXRvcj0oIGNvbnN0IFFDU3RyaW5nICZzICkKeyByZXR1cm4gKFFDU3Ry
aW5nJilhc3NpZ24oIHMgKTsgfQoKaW5saW5lIFFDU3RyaW5nICZRQ1N0cmluZzo6b3BlcmF0b3I9
KCBjb25zdCBjaGFyICpzdHIgKQp7IHJldHVybiAoUUNTdHJpbmcmKWR1cGxpY2F0ZSggc3RyLCBx
c3RybGVuKHN0cikrMSApOyB9CgppbmxpbmUgYm9vbCBRQ1N0cmluZzo6aXNOdWxsKCkgY29uc3QK
eyByZXR1cm4gZGF0YSgpID09IDA7IH0KCmlubGluZSBib29sIFFDU3RyaW5nOjppc0VtcHR5KCkg
Y29uc3QKeyByZXR1cm4gZGF0YSgpID09IDAgfHwgKmRhdGEoKSA9PSAnXDAnOyB9CgppbmxpbmUg
dWludCBRQ1N0cmluZzo6bGVuZ3RoKCkgY29uc3QKeyByZXR1cm4gcXN0cmxlbiggZGF0YSgpICk7
IH0KCmlubGluZSBib29sIFFDU3RyaW5nOjp0cnVuY2F0ZSggdWludCBwb3MgKQp7IHJldHVybiBy
ZXNpemUocG9zKzEpOyB9CgppbmxpbmUgUUNTdHJpbmcgUUNTdHJpbmc6OmNvcHkoKSBjb25zdAp7
IHJldHVybiBRQ1N0cmluZyggZGF0YSgpICk7IH0KCmlubGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6
OnByZXBlbmQoIGNvbnN0IGNoYXIgKnMgKQp7IHJldHVybiBpbnNlcnQoMCxzKTsgfQoKaW5saW5l
IFFDU3RyaW5nICZRQ1N0cmluZzo6YXBwZW5kKCBjb25zdCBjaGFyICpzICkKeyByZXR1cm4gb3Bl
cmF0b3IrPShzKTsgfQoKaW5saW5lIFFDU3RyaW5nICZRQ1N0cmluZzo6c2V0TnVtKCBzaG9ydCBu
ICkKeyByZXR1cm4gc2V0TnVtKChsb25nKW4pOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5n
OjpzZXROdW0oIHVzaG9ydCBuICkKeyByZXR1cm4gc2V0TnVtKCh1bG9uZyluKTsgfQoKaW5saW5l
IFFDU3RyaW5nICZRQ1N0cmluZzo6c2V0TnVtKCBpbnQgbiApCnsgcmV0dXJuIHNldE51bSgobG9u
ZyluKTsgfQoKaW5saW5lIFFDU3RyaW5nICZRQ1N0cmluZzo6c2V0TnVtKCB1aW50IG4gKQp7IHJl
dHVybiBzZXROdW0oKHVsb25nKW4pOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpzZXRO
dW0oIGZsb2F0IG4sIGNoYXIgZiwgaW50IHByZWMgKQp7IHJldHVybiBzZXROdW0oKGRvdWJsZSlu
LGYscHJlYyk7IH0KCmlubGluZSBRQ1N0cmluZzo6b3BlcmF0b3IgY29uc3QgY2hhciAqKCkgY29u
c3QKeyByZXR1cm4gKGNvbnN0IGNoYXIgKilkYXRhKCk7IH0KCgoKCgoKICAgICAgICAgaW5saW5l
IGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBRQ1N0cmluZyAmczIg
KQp7IHJldHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMi5kYXRhKCkpID09IDA7IH0KCiAgICAgICAg
IGlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hhciAq
czIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMikgPT0gMDsgfQoKICAgICAgICAgaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgY2hhciAqczEsIGNvbnN0IFFDU3RyaW5nICZzMiAp
CnsgcmV0dXJuIHFzdHJjbXAoczEsczIuZGF0YSgpKSA9PSAwOyB9CgogICAgICAgICBpbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IFFDU3RyaW5nICZzMiAp
CnsgcmV0dXJuIHFzdHJjbXAoczEuZGF0YSgpLHMyLmRhdGEoKSkgIT0gMDsgfQoKICAgICAgICAg
aW5saW5lIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpz
MiApCnsgcmV0dXJuIHFzdHJjbXAoczEuZGF0YSgpLHMyKSAhPSAwOyB9CgogICAgICAgICBpbmxp
bmUgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkK
eyByZXR1cm4gcXN0cmNtcChzMSxzMi5kYXRhKCkpICE9IDA7IH0KCiAgICAgICAgIGlubGluZSBi
b29sIG9wZXJhdG9yPCggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBRQ1N0cmluZyYgczIgKQp7
IHJldHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMi5kYXRhKCkpIDwgMDsgfQoKICAgICAgICAgaW5s
aW5lIGJvb2wgb3BlcmF0b3I8KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICkK
eyByZXR1cm4gcXN0cmNtcChzMS5kYXRhKCksczIpIDwgMDsgfQoKICAgICAgICAgaW5saW5lIGJv
b2wgb3BlcmF0b3I8KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1
cm4gcXN0cmNtcChzMSxzMi5kYXRhKCkpIDwgMDsgfQoKICAgICAgICAgaW5saW5lIGJvb2wgb3Bl
cmF0b3I8PSggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApCnsgcmV0dXJuIHFz
dHJjbXAoczEuZGF0YSgpLHMyKSA8PSAwOyB9CgogICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRv
cjw9KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNt
cChzMSxzMi5kYXRhKCkpIDw9IDA7IH0KCiAgICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPigg
Y29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEu
ZGF0YSgpLHMyKSA+IDA7IH0KCiAgICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPiggY29uc3Qg
Y2hhciAqczEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEsczIuZGF0
YSgpKSA+IDA7IH0KCiAgICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPj0oIGNvbnN0IFFDU3Ry
aW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMikg
Pj0gMDsgfQoKICAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I+PSggY29uc3QgY2hhciAqczEs
IGNvbnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEsczIuZGF0YSgpKSA+PSAw
OyB9CgogICAgICAgICBpbmxpbmUgUUNTdHJpbmcgb3BlcmF0b3IrKCBjb25zdCBRQ1N0cmluZyAm
czEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsKICAgIFFDU3RyaW5nIHRtcCggczEuZGF0YSgpICk7
CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4gdG1wOwp9CgogICAgICAgICBpbmxpbmUgUUNTdHJp
bmcgb3BlcmF0b3IrKCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICkKewogICAg
UUNTdHJpbmcgdG1wKCBzMS5kYXRhKCkgKTsKICAgIHRtcCArPSBzMjsKICAgIHJldHVybiB0bXA7
Cn0KCiAgICAgICAgIGlubGluZSBRQ1N0cmluZyBvcGVyYXRvcisoIGNvbnN0IGNoYXIgKnMxLCBj
b25zdCBRQ1N0cmluZyAmczIgKQp7CiAgICBRQ1N0cmluZyB0bXAoIHMxICk7CiAgICB0bXAgKz0g
czI7CiAgICByZXR1cm4gdG1wOwp9CgogICAgICAgICBpbmxpbmUgUUNTdHJpbmcgb3BlcmF0b3Ir
KCBjb25zdCBRQ1N0cmluZyAmczEsIGNoYXIgYzIgKQp7CiAgICBRQ1N0cmluZyB0bXAoIHMxLmRh
dGEoKSApOwogICAgdG1wICs9IGMyOwogICAgcmV0dXJuIHRtcDsKfQoKICAgICAgICAgaW5saW5l
IFFDU3RyaW5nIG9wZXJhdG9yKyggY2hhciBjMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKewogICAg
UUNTdHJpbmcgdG1wOwogICAgdG1wICs9IGMxOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRt
cDsKfQojIDQ0ICJ0b29scy9xaW9kZXZpY2UuaCIgMgojIDg4ICJ0b29scy9xaW9kZXZpY2UuaCIK
Y2xhc3MgUUlPRGV2aWNlCnsKcHVibGljOgogICAgUUlPRGV2aWNlKCk7CiAgICB2aXJ0dWFsIH5R
SU9EZXZpY2UoKTsKCiAgICBpbnQgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBpb01vZGU7IH0KICAg
IGludCBtb2RlKCkgY29uc3QgeyByZXR1cm4gaW9Nb2RlICYgMHgwMGZmOyB9CiAgICBpbnQgc3Rh
dGUoKSBjb25zdCB7IHJldHVybiBpb01vZGUgJiAweGYwMDA7IH0KCiAgICBib29sIGlzRGlyZWN0
QWNjZXNzKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAxMDApID09IDB4MDEwMCk7IH0K
ICAgIGJvb2wgaXNTZXF1ZW50aWFsQWNjZXNzKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAw
eDAyMDApID09IDB4MDIwMCk7IH0KICAgIGJvb2wgaXNDb21iaW5lZEFjY2VzcygpIGNvbnN0IHsg
cmV0dXJuICgoaW9Nb2RlICYgMHgwMzAwKSA9PSAweDAzMDApOyB9CiAgICBib29sIGlzQnVmZmVy
ZWQoKSBjb25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDA0MCkgIT0gMHgwMDQwKTsgfQogICAg
Ym9vbCBpc1JhdygpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMDQwKSA9PSAweDAwNDAp
OyB9CiAgICBib29sIGlzU3luY2hyb25vdXMoKSBjb25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4
MDA4MCkgIT0gMHgwMDgwKTsgfQogICAgYm9vbCBpc0FzeW5jaHJvbm91cygpIGNvbnN0IHsgcmV0
dXJuICgoaW9Nb2RlICYgMHgwMDgwKSA9PSAweDAwODApOyB9CiAgICBib29sIGlzVHJhbnNsYXRl
ZCgpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMDEwKSA9PSAweDAwMTApOyB9CiAgICBi
b29sIGlzUmVhZGFibGUoKSBjb25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDAwMSkgPT0gMHgw
MDAxKTsgfQogICAgYm9vbCBpc1dyaXRhYmxlKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAw
eDAwMDIpID09IDB4MDAwMik7IH0KICAgIGJvb2wgaXNSZWFkV3JpdGUoKSBjb25zdCB7IHJldHVy
biAoKGlvTW9kZSAmIDB4MDAwMykgPT0gMHgwMDAzKTsgfQogICAgYm9vbCBpc0luYWN0aXZlKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGUoKSA9PSAwOyB9CiAgICBib29sIGlzT3BlbigpIGNvbnN0IHsg
cmV0dXJuIHN0YXRlKCkgPT0gMHgxMDAwOyB9CgogICAgaW50IHN0YXR1cygpIGNvbnN0IHsgcmV0
dXJuIGlvU3Q7IH0KICAgIHZvaWQgcmVzZXRTdGF0dXMoKSB7IGlvU3QgPSAwOyB9CgogICAgdmly
dHVhbCBib29sIG9wZW4oIGludCBtb2RlICkgPSAwOwogICAgdmlydHVhbCB2b2lkIGNsb3NlKCkg
PSAwOwogICAgdmlydHVhbCB2b2lkIGZsdXNoKCkgPSAwOwoKICAgIHZpcnR1YWwgdWludCBzaXpl
KCkgY29uc3QgPSAwOwogICAgdmlydHVhbCBpbnQgYXQoKSBjb25zdDsKICAgIHZpcnR1YWwgYm9v
bCBhdCggaW50ICk7CiAgICB2aXJ0dWFsIGJvb2wgYXRFbmQoKSBjb25zdDsKICAgIGJvb2wgcmVz
ZXQoKSB7IHJldHVybiBhdCgwKTsgfQoKICAgIHZpcnR1YWwgaW50IHJlYWRCbG9jayggY2hhciAq
ZGF0YSwgdWludCBtYXhsZW4gKSA9IDA7CiAgICB2aXJ0dWFsIGludCB3cml0ZUJsb2NrKCBjb25z
dCBjaGFyICpkYXRhLCB1aW50IGxlbiApID0gMDsKICAgIHZpcnR1YWwgaW50IHJlYWRMaW5lKCBj
aGFyICpkYXRhLCB1aW50IG1heGxlbiApOwogICAgaW50IHdyaXRlQmxvY2soIGNvbnN0IFFCeXRl
QXJyYXkmIGRhdGEgKTsKICAgIFFCeXRlQXJyYXkgcmVhZEFsbCgpOwoKICAgIHZpcnR1YWwgaW50
IGdldGNoKCkgPSAwOwogICAgdmlydHVhbCBpbnQgcHV0Y2goIGludCApID0gMDsKICAgIHZpcnR1
YWwgaW50IHVuZ2V0Y2goIGludCApID0gMDsKCnByb3RlY3RlZDoKICAgIHZvaWQgc2V0RmxhZ3Mo
IGludCBmICkgeyBpb01vZGUgPSBmOyB9CiAgICB2b2lkIHNldFR5cGUoIGludCApOwogICAgdm9p
ZCBzZXRNb2RlKCBpbnQgKTsKICAgIHZvaWQgc2V0U3RhdGUoIGludCApOwogICAgdm9pZCBzZXRT
dGF0dXMoIGludCApOwogICAgaW50IGlvSW5kZXg7Cgpwcml2YXRlOgogICAgaW50IGlvTW9kZTsK
ICAgIGludCBpb1N0OwoKcHJpdmF0ZToKCiAgICBRSU9EZXZpY2UoIGNvbnN0IFFJT0RldmljZSAm
ICk7CiAgICBRSU9EZXZpY2UgJm9wZXJhdG9yPSggY29uc3QgUUlPRGV2aWNlICYgKTsKCn07CiMg
NDMgInRvb2xzL3FkYXRhc3RyZWFtLmgiIDIKIyAxICJ0b29scy9xc3RyaW5nLmgiIDEKIyA0MyAi
dG9vbHMvcXN0cmluZy5oIgojIDEgInRvb2xzL3Fjc3RyaW5nLmgiIDEKIyA0NCAidG9vbHMvcXN0
cmluZy5oIiAyCgoKCgoKCgpjbGFzcyBRUmVnRXhwOwpjbGFzcyBRU3RyaW5nOwpjbGFzcyBRQ2hh
clJlZjsKCmNsYXNzIFFDaGFyIHsKcHVibGljOgogICAgUUNoYXIoKTsKICAgIFFDaGFyKCBjaGFy
IGMgKTsKICAgIFFDaGFyKCB1Y2hhciBjICk7CiAgICBRQ2hhciggdWNoYXIgYywgdWNoYXIgciAp
OwogICAgUUNoYXIoIGNvbnN0IFFDaGFyJiBjICk7CiAgICBRQ2hhciggdXNob3J0IHJjICk7CiAg
ICBRQ2hhciggc2hvcnQgcmMgKTsKICAgIFFDaGFyKCB1aW50IHJjICk7CiAgICBRQ2hhciggaW50
IHJjICk7CgogICAgc3RhdGljIGNvbnN0IFFDaGFyIG51bGw7CiAgICBzdGF0aWMgY29uc3QgUUNo
YXIgcmVwbGFjZW1lbnQ7CiAgICBzdGF0aWMgY29uc3QgUUNoYXIgYnl0ZU9yZGVyTWFyazsKICAg
IHN0YXRpYyBjb25zdCBRQ2hhciBieXRlT3JkZXJTd2FwcGVkOwogICAgc3RhdGljIGNvbnN0IFFD
aGFyIG5ic3A7CgoKCiAgICBlbnVtIENhdGVnb3J5CiAgICB7CiAgICAgICAgTm9DYXRlZ29yeSwK
CiAgICAgICAgTWFya19Ob25TcGFjaW5nLAogICAgICAgIE1hcmtfU3BhY2luZ0NvbWJpbmluZywK
ICAgICAgICBNYXJrX0VuY2xvc2luZywKCiAgICAgICAgTnVtYmVyX0RlY2ltYWxEaWdpdCwKICAg
ICAgICBOdW1iZXJfTGV0dGVyLAogICAgICAgIE51bWJlcl9PdGhlciwKCiAgICAgICAgU2VwYXJh
dG9yX1NwYWNlLAogICAgICAgIFNlcGFyYXRvcl9MaW5lLAogICAgICAgIFNlcGFyYXRvcl9QYXJh
Z3JhcGgsCgogICAgICAgIE90aGVyX0NvbnRyb2wsCiAgICAgICAgT3RoZXJfRm9ybWF0LAogICAg
ICAgIE90aGVyX1N1cnJvZ2F0ZSwKICAgICAgICBPdGhlcl9Qcml2YXRlVXNlLAogICAgICAgIE90
aGVyX05vdEFzc2lnbmVkLAoKICAgICAgICBMZXR0ZXJfVXBwZXJjYXNlLAogICAgICAgIExldHRl
cl9Mb3dlcmNhc2UsCiAgICAgICAgTGV0dGVyX1RpdGxlY2FzZSwKICAgICAgICBMZXR0ZXJfTW9k
aWZpZXIsCiAgICAgICAgTGV0dGVyX090aGVyLAoKICAgICAgICBQdW5jdHVhdGlvbl9Db25uZWN0
b3IsCiAgICAgICAgUHVuY3R1YXRpb25fRGFzaywKICAgICAgICBQdW5jdHVhdGlvbl9PcGVuLAog
ICAgICAgIFB1bmN0dWF0aW9uX0Nsb3NlLAogICAgICAgIFB1bmN0dWF0aW9uX0luaXRpYWxRdW90
ZSwKICAgICAgICBQdW5jdHVhdGlvbl9GaW5hbFF1b3RlLAogICAgICAgIFB1bmN0dWF0aW9uX090
aGVyLAoKICAgICAgICBTeW1ib2xfTWF0aCwKICAgICAgICBTeW1ib2xfQ3VycmVuY3ksCiAgICAg
ICAgU3ltYm9sX01vZGlmaWVyLAogICAgICAgIFN5bWJvbF9PdGhlcgogICAgfTsKCiAgICBlbnVt
IERpcmVjdGlvbgogICAgewogICAgICAgIERpckwsIERpclIsIERpckVOLCBEaXJFUywgRGlyRVQs
IERpckFOLCBEaXJDUywgRGlyQiwgRGlyUywgRGlyV1MsIERpck9OLAogICAgICAgIERpckxSRSwg
RGlyTFJPLCBEaXJBTCwgRGlyUkxFLCBEaXJSTE8sIERpclBERiwgRGlyTlNNLCBEaXJCTgogICAg
fTsKCiAgICBlbnVtIERlY29tcG9zaXRpb24KICAgIHsKICAgICAgICBTaW5nbGUsIENhbm9uaWNh
bCwgRm9udCwgTm9CcmVhaywgSW5pdGlhbCwgTWVkaWFsLAogICAgICAgIEZpbmFsLCBJc29sYXRl
ZCwgQ2lyY2xlLCBTdXBlciwgU3ViLCBWZXJ0aWNhbCwKICAgICAgICBXaWRlLCBOYXJyb3csIFNt
YWxsLCBTcXVhcmUsIENvbXBhdCwgRnJhY3Rpb24KICAgIH07CgogICAgZW51bSBKb2luaW5nCiAg
ICB7CiAgICAgICAgT3RoZXJKb2luaW5nLCBEdWFsLCBSaWdodCwgQ2VudGVyCiAgICB9OwoKCgog
ICAgaW50IGRpZ2l0VmFsdWUoKSBjb25zdDsKICAgIFFDaGFyIGxvd2VyKCkgY29uc3Q7CiAgICBR
Q2hhciB1cHBlcigpIGNvbnN0OwoKICAgIENhdGVnb3J5IGNhdGVnb3J5KCkgY29uc3Q7CiAgICBE
aXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3Q7CiAgICBKb2luaW5nIGpvaW5pbmcoKSBjb25zdDsK
ICAgIGJvb2wgbWlycm9yZWQoKSBjb25zdDsKICAgIFFDaGFyIG1pcnJvcmVkQ2hhcigpIGNvbnN0
OwogICAgUVN0cmluZyBkZWNvbXBvc2l0aW9uKCkgY29uc3Q7CiAgICBEZWNvbXBvc2l0aW9uIGRl
Y29tcG9zaXRpb25UYWcoKSBjb25zdDsKCiAgICBjaGFyIGxhdGluMSgpIGNvbnN0IHsgcmV0dXJu
IHJ3ID8gMCA6IGNsOyB9CiAgICB1c2hvcnQgdW5pY29kZSgpIGNvbnN0IHsgcmV0dXJuIChydyA8
PCA4KSB8IGNsOyB9CgoKICAgIG9wZXJhdG9yIGNoYXIoKSBjb25zdCB7IHJldHVybiBsYXRpbjEo
KTsgfQoKCiAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIHVuaWNvZGUoKT09MDsgfQog
ICAgYm9vbCBpc1ByaW50KCkgY29uc3Q7CiAgICBib29sIGlzUHVuY3QoKSBjb25zdDsKICAgIGJv
b2wgaXNTcGFjZSgpIGNvbnN0OwogICAgYm9vbCBpc01hcmsoKSBjb25zdDsKICAgIGJvb2wgaXNM
ZXR0ZXIoKSBjb25zdDsKICAgIGJvb2wgaXNOdW1iZXIoKSBjb25zdDsKICAgIGJvb2wgaXNMZXR0
ZXJPck51bWJlcigpIGNvbnN0OwogICAgYm9vbCBpc0RpZ2l0KCkgY29uc3Q7CgogICAgdWNoYXIm
IGNlbGwoKSB7IHJldHVybiBjbDsgfQogICAgdWNoYXImIHJvdygpIHsgcmV0dXJuIHJ3OyB9CiAg
ICB1Y2hhciBjZWxsKCkgY29uc3QgeyByZXR1cm4gY2w7IH0KICAgIHVjaGFyIHJvdygpIGNvbnN0
IHsgcmV0dXJuIHJ3OyB9CgogICAgc3RhdGljIGJvb2wgbmV0d29ya09yZGVyZWQoKSB7IHJldHVy
biAoaW50KW5ldF9vcmRlcmVkID09IDE7IH0KCiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRv
cj09KCBjaGFyIGNoLCBRQ2hhciBjICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvcj09
KCBRQ2hhciBjLCBjaGFyIGNoICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvcj09KCBR
Q2hhciBjMSwgUUNoYXIgYzIgKTsKICAgIGZyaWVuZCBpbmxpbmUgaW50IG9wZXJhdG9yIT0oIFFD
aGFyIGMxLCBRQ2hhciBjMiApOwogICAgZnJpZW5kIGlubGluZSBpbnQgb3BlcmF0b3IhPSggY2hh
ciBjaCwgUUNoYXIgYyApOwogICAgZnJpZW5kIGlubGluZSBpbnQgb3BlcmF0b3IhPSggUUNoYXIg
YywgY2hhciBjaCApOwogICAgZnJpZW5kIGlubGluZSBpbnQgb3BlcmF0b3I8PSggUUNoYXIgYywg
Y2hhciBjaCApOwogICAgZnJpZW5kIGlubGluZSBpbnQgb3BlcmF0b3I8PSggY2hhciBjaCwgUUNo
YXIgYyApOwogICAgZnJpZW5kIGlubGluZSBpbnQgb3BlcmF0b3I8PSggUUNoYXIgYzEsIFFDaGFy
IGMyICk7Cgpwcml2YXRlOgoKCgogICAgdWNoYXIgcnc7CiAgICB1Y2hhciBjbDsKCgoKICAgIGVu
dW0geyBuZXRfb3JkZXJlZCA9IDEgfTsKIyAyMDIgInRvb2xzL3FzdHJpbmcuaCIKfSA7Cgppbmxp
bmUgUUNoYXI6OlFDaGFyKCkKewogICAgcncgPSAwOyBjbCA9IDA7CgoKCn0KaW5saW5lIFFDaGFy
OjpRQ2hhciggY2hhciBjICkKewogICAgcncgPSAwOyBjbCA9ICh1Y2hhciljOwoKCgp9CmlubGlu
ZSBRQ2hhcjo6UUNoYXIoIHVjaGFyIGMgKQp7CiAgICBydyA9IDA7IGNsID0gYzsKCgoKfQppbmxp
bmUgUUNoYXI6OlFDaGFyKCB1Y2hhciBjLCB1Y2hhciByICkKewogICAgcncgPSByOyBjbCA9IGM7
CgoKCn0KaW5saW5lIFFDaGFyOjpRQ2hhciggY29uc3QgUUNoYXImIGMgKQp7CiAgICBydyA9IGMu
cnc7IGNsID0gYy5jbDsKCgoKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCB1c2hvcnQgcmMgKQp7CiAg
ICBydyA9ICh1Y2hhcikoKHJjPj44KSYweGZmKTsgY2wgPSAodWNoYXIpKHJjJjB4ZmYpOwoKCgp9
CmlubGluZSBRQ2hhcjo6UUNoYXIoIHNob3J0IHJjICkKewogICAgcncgPSAodWNoYXIpKChyYz4+
OCkmMHhmZik7IGNsID0gKHVjaGFyKShyYyYweGZmKTsKCgoKfQppbmxpbmUgUUNoYXI6OlFDaGFy
KCB1aW50IHJjICkKewogICAgcncgPSAodWNoYXIpKChyYz4+OCkmMHhmZik7IGNsID0gKHVjaGFy
KShyYyYweGZmKTsKCgoKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCBpbnQgcmMgKQp7CiAgICBydyA9
ICh1Y2hhcikoKHJjPj44KSYweGZmKTsgY2wgPSAodWNoYXIpKHJjJjB4ZmYpOwoKCgp9CgoKaW5s
aW5lIGludCBvcGVyYXRvcj09KCBjaGFyIGNoLCBRQ2hhciBjICkKewogICAgcmV0dXJuIGNoID09
IGMuY2wgJiYgIWMucnc7Cn0KCmlubGluZSBpbnQgb3BlcmF0b3I9PSggUUNoYXIgYywgY2hhciBj
aCApCnsKICAgIHJldHVybiBjaCA9PSBjLmNsICYmICFjLnJ3Owp9CgppbmxpbmUgaW50IG9wZXJh
dG9yPT0oIFFDaGFyIGMxLCBRQ2hhciBjMiApCnsKICAgIHJldHVybiBjMS5jbCA9PSBjMi5jbAog
ICAgICAgICYmIGMxLnJ3ID09IGMyLnJ3Owp9CgppbmxpbmUgaW50IG9wZXJhdG9yIT0oIFFDaGFy
IGMxLCBRQ2hhciBjMiApCnsKICAgIHJldHVybiBjMS5jbCAhPSBjMi5jbAogICAgICAgIHx8IGMx
LnJ3ICE9IGMyLnJ3Owp9CgppbmxpbmUgaW50IG9wZXJhdG9yIT0oIGNoYXIgY2gsIFFDaGFyIGMg
KQp7CiAgICByZXR1cm4gY2ggIT0gYy5jbCB8fCBjLnJ3Owp9CgppbmxpbmUgaW50IG9wZXJhdG9y
IT0oIFFDaGFyIGMsIGNoYXIgY2ggKQp7CiAgICByZXR1cm4gY2ggIT0gYy5jbCB8fCBjLnJ3Owp9
CgppbmxpbmUgaW50IG9wZXJhdG9yPD0oIFFDaGFyIGMsIGNoYXIgY2ggKQp7CiAgICByZXR1cm4g
IShjaCA8IGMuY2wgfHwgYy5ydyk7Cn0KCmlubGluZSBpbnQgb3BlcmF0b3I8PSggY2hhciBjaCwg
UUNoYXIgYyApCnsKICAgIHJldHVybiBjaCA8PSBjLmNsIHx8IGMucnc7Cn0KCmlubGluZSBpbnQg
b3BlcmF0b3I8PSggUUNoYXIgYzEsIFFDaGFyIGMyICkKewogICAgcmV0dXJuIGMxLnJ3ID4gYzIu
cncKICAgICAgICA/IEZBTFNFCiAgICAgICAgOiBjMS5ydyA8IGMyLnJ3CiAgICAgICAgICAgID8g
VFJVRQogICAgICAgICAgICA6IGMxLmNsIDw9IGMyLmNsOwp9CgppbmxpbmUgaW50IG9wZXJhdG9y
Pj0oIFFDaGFyIGMsIGNoYXIgY2ggKSB7IHJldHVybiBjaCA8PSBjOyB9CmlubGluZSBpbnQgb3Bl
cmF0b3I+PSggY2hhciBjaCwgUUNoYXIgYyApIHsgcmV0dXJuIGMgPD0gY2g7IH0KaW5saW5lIGlu
dCBvcGVyYXRvcj49KCBRQ2hhciBjMSwgUUNoYXIgYzIgKSB7IHJldHVybiBjMiA8PSBjMTsgfQpp
bmxpbmUgaW50IG9wZXJhdG9yPCggUUNoYXIgYywgY2hhciBjaCApIHsgcmV0dXJuICEoY2g8PWMp
OyB9CmlubGluZSBpbnQgb3BlcmF0b3I8KCBjaGFyIGNoLCBRQ2hhciBjICkgeyByZXR1cm4gIShj
PD1jaCk7IH0KaW5saW5lIGludCBvcGVyYXRvcjwoIFFDaGFyIGMxLCBRQ2hhciBjMiApIHsgcmV0
dXJuICEoYzI8PWMxKTsgfQppbmxpbmUgaW50IG9wZXJhdG9yPiggUUNoYXIgYywgY2hhciBjaCAp
IHsgcmV0dXJuICEoY2g+PWMpOyB9CmlubGluZSBpbnQgb3BlcmF0b3I+KCBjaGFyIGNoLCBRQ2hh
ciBjICkgeyByZXR1cm4gIShjPj1jaCk7IH0KaW5saW5lIGludCBvcGVyYXRvcj4oIFFDaGFyIGMx
LCBRQ2hhciBjMiApIHsgcmV0dXJuICEoYzI+PWMxKTsgfQoKCnN0cnVjdCBRU3RyaW5nRGF0YSA6
IHB1YmxpYyBRU2hhcmVkIHsKICAgIFFTdHJpbmdEYXRhKCkgOgogICAgICAgIHVuaWNvZGUoMCks
IGFzY2lpKDApLCBsZW4oMCksIG1heGwoMCksIGRpcnR5YXNjaWkoMCkgeyByZWYoKTsgfQogICAg
UVN0cmluZ0RhdGEoUUNoYXIgKnUsIHVpbnQgbCwgdWludCBtKSA6CiAgICAgICAgdW5pY29kZSh1
KSwgYXNjaWkoMCksIGxlbihsKSwgbWF4bChtKSwgZGlydHlhc2NpaSgwKSB7IH0KCiAgICB+UVN0
cmluZ0RhdGEoKSB7IGlmICggdW5pY29kZSApIGRlbGV0ZVtdICgoY2hhciopdW5pY29kZSk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICggYXNjaWkgKSBkZWxldGVbXSBhc2NpaTsgfQoKICAgIHZv
aWQgZGVsZXRlU2VsZigpOwogICAgUUNoYXIgKnVuaWNvZGU7CiAgICBjaGFyICphc2NpaTsKICAg
IHVpbnQgbGVuOwogICAgdWludCBtYXhsOjMwOwogICAgdWludCBkaXJ0eWFzY2lpOjE7Cn07CgoK
Y2xhc3MgUVN0cmluZwp7CnB1YmxpYzoKICAgIFFTdHJpbmcoKTsKICAgIFFTdHJpbmcoIFFDaGFy
ICk7CiAgICBRU3RyaW5nKCBjb25zdCBRU3RyaW5nICYgKTsKICAgIFFTdHJpbmcoIGNvbnN0IFFC
eXRlQXJyYXkmICk7CiAgICBRU3RyaW5nKCBjb25zdCBRQ2hhciogdW5pY29kZSwgdWludCBsZW5n
dGggKTsKCiAgICBRU3RyaW5nKCBjb25zdCBjaGFyICpzdHIgKTsKCiAgICB+UVN0cmluZygpOwoK
ICAgIFFTdHJpbmcgJm9wZXJhdG9yPSggY29uc3QgUVN0cmluZyAmICk7CgogICAgUVN0cmluZyAm
b3BlcmF0b3I9KCBjb25zdCBjaGFyICogKTsKCiAgICBRU3RyaW5nICZvcGVyYXRvcj0oIGNvbnN0
IFFDU3RyaW5nJiApOwogICAgUVN0cmluZyAmb3BlcmF0b3I9KCBRQ2hhciBjICk7CiAgICBRU3Ry
aW5nICZvcGVyYXRvcj0oIGNoYXIgYyApOwoKICAgIHN0YXRpYyBjb25zdCBRU3RyaW5nIG51bGw7
CgogICAgYm9vbCBpc051bGwoKSBjb25zdDsKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAg
dWludCBsZW5ndGgoKSBjb25zdDsKICAgIHZvaWQgdHJ1bmNhdGUoIHVpbnQgcG9zICk7CgoKCgog
ICAgdm9pZCBmaWxsKCBRQ2hhciBjLCBpbnQgbGVuID0gLTEgKTsKCiAgICBRU3RyaW5nIGNvcHko
KSBjb25zdDsKCiAgICBRU3RyaW5nIGFyZyhsb25nIGEsIGludCBmaWVsZHdpZHRoPTAsIGludCBi
YXNlPTEwKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKHVsb25nIGEsIGludCBmaWVsZHdpZHRoPTAs
IGludCBiYXNlPTEwKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKGludCBhLCBpbnQgZmllbGR3aWR0
aD0wLCBpbnQgYmFzZT0xMCkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyh1aW50IGEsIGludCBmaWVs
ZHdpZHRoPTAsIGludCBiYXNlPTEwKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKHNob3J0IGEsIGlu
dCBmaWVsZHdpZHRoPTAsIGludCBiYXNlPTEwKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKHVzaG9y
dCBhLCBpbnQgZmllbGR3aWR0aD0wLCBpbnQgYmFzZT0xMCkgY29uc3Q7CiAgICBRU3RyaW5nIGFy
ZyhjaGFyIGEsIGludCBmaWVsZHdpZHRoPTApIGNvbnN0OwogICAgUVN0cmluZyBhcmcoUUNoYXIg
YSwgaW50IGZpZWxkd2lkdGg9MCkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyhjb25zdCBRU3RyaW5n
JiBhLCBpbnQgZmllbGR3aWR0aD0wKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKGRvdWJsZSBhLCBp
bnQgZmllbGR3aWR0aD0wLCBjaGFyIGZtdD0nZycsIGludCBwcmVjPS0xKSBjb25zdDsKCiAgICBR
U3RyaW5nICZzcHJpbnRmKCBjb25zdCBjaGFyKiBmb3JtYXQsIC4uLiApCgogICAgICAgIF9fYXR0
cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKQoKICAgICAgICA7CgogICAgaW50IGZp
bmQoIFFDaGFyIGMsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAgIGludCBm
aW5kKCBjaGFyIGMsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAgIGludCBm
aW5kKCBjb25zdCBRU3RyaW5nICZzdHIsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBjb25z
dDsKICAgIGludCBmaW5kKCBjb25zdCBRUmVnRXhwICYsIGludCBpbmRleD0wICkgY29uc3Q7Cgog
ICAgaW50IGZpbmQoIGNvbnN0IGNoYXIqIHN0ciwgaW50IGluZGV4PTAgKSBjb25zdDsKCiAgICBp
bnQgZmluZFJldiggUUNoYXIgYywgaW50IGluZGV4PS0xLCBib29sIGNzPVRSVUUpIGNvbnN0Owog
ICAgaW50IGZpbmRSZXYoIGNoYXIgYywgaW50IGluZGV4PS0xLCBib29sIGNzPVRSVUUpIGNvbnN0
OwogICAgaW50IGZpbmRSZXYoIGNvbnN0IFFTdHJpbmcgJnN0ciwgaW50IGluZGV4PS0xLCBib29s
IGNzPVRSVUUpIGNvbnN0OwogICAgaW50IGZpbmRSZXYoIGNvbnN0IFFSZWdFeHAgJiwgaW50IGlu
ZGV4PS0xICkgY29uc3Q7CgogICAgaW50IGZpbmRSZXYoIGNvbnN0IGNoYXIqIHN0ciwgaW50IGlu
ZGV4PS0xICkgY29uc3Q7CgogICAgaW50IGNvbnRhaW5zKCBRQ2hhciBjLCBib29sIGNzPVRSVUUg
KSBjb25zdDsKICAgIGludCBjb250YWlucyggY2hhciBjLCBib29sIGNzPVRSVUUgKSBjb25zdAog
ICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGNvbnRhaW5zKFFDaGFyKGMpLCBjcyk7IH0KCiAg
ICBpbnQgY29udGFpbnMoIGNvbnN0IGNoYXIqIHN0ciwgYm9vbCBjcz1UUlVFICkgY29uc3Q7Cgog
ICAgaW50IGNvbnRhaW5zKCBjb25zdCBRU3RyaW5nICZzdHIsIGJvb2wgY3M9VFJVRSApIGNvbnN0
OwogICAgaW50IGNvbnRhaW5zKCBjb25zdCBRUmVnRXhwICYgKSBjb25zdDsKCiAgICBRU3RyaW5n
IGxlZnQoIHVpbnQgbGVuICkgY29uc3Q7CiAgICBRU3RyaW5nIHJpZ2h0KCB1aW50IGxlbiApIGNv
bnN0OwogICAgUVN0cmluZyBtaWQoIHVpbnQgaW5kZXgsIHVpbnQgbGVuPTB4ZmZmZmZmZmYpIGNv
bnN0OwoKICAgIFFTdHJpbmcgbGVmdEp1c3RpZnkoIHVpbnQgd2lkdGgsIFFDaGFyIGZpbGw9JyAn
LCBib29sIHRydW5jPUZBTFNFKWNvbnN0OwogICAgUVN0cmluZyByaWdodEp1c3RpZnkoIHVpbnQg
d2lkdGgsIFFDaGFyIGZpbGw9JyAnLGJvb2wgdHJ1bmM9RkFMU0UpY29uc3Q7CgogICAgUVN0cmlu
ZyBsb3dlcigpIGNvbnN0OwogICAgUVN0cmluZyB1cHBlcigpIGNvbnN0OwoKICAgIFFTdHJpbmcg
c3RyaXBXaGl0ZVNwYWNlKCkgY29uc3Q7CiAgICBRU3RyaW5nIHNpbXBsaWZ5V2hpdGVTcGFjZSgp
IGNvbnN0OwoKICAgIFFTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwgY29uc3QgUVN0cmluZyAm
ICk7CiAgICBRU3RyaW5nICZpbnNlcnQoIHVpbnQgaW5kZXgsIGNvbnN0IFFDaGFyKiwgdWludCBs
ZW4gKTsKICAgIFFTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwgUUNoYXIgKTsKICAgIFFTdHJp
bmcgJmluc2VydCggdWludCBpbmRleCwgY2hhciBjICkgeyByZXR1cm4gaW5zZXJ0KGluZGV4LFFD
aGFyKGMpKTsgfQogICAgUVN0cmluZyAmYXBwZW5kKCBjaGFyICk7CiAgICBRU3RyaW5nICZhcHBl
bmQoIFFDaGFyICk7CiAgICBRU3RyaW5nICZhcHBlbmQoIGNvbnN0IFFTdHJpbmcgJiApOwogICAg
UVN0cmluZyAmcHJlcGVuZCggY2hhciApOwogICAgUVN0cmluZyAmcHJlcGVuZCggUUNoYXIgKTsK
ICAgIFFTdHJpbmcgJnByZXBlbmQoIGNvbnN0IFFTdHJpbmcgJiApOwogICAgUVN0cmluZyAmcmVt
b3ZlKCB1aW50IGluZGV4LCB1aW50IGxlbiApOwogICAgUVN0cmluZyAmcmVwbGFjZSggdWludCBp
bmRleCwgdWludCBsZW4sIGNvbnN0IFFTdHJpbmcgJiApOwogICAgUVN0cmluZyAmcmVwbGFjZSgg
dWludCBpbmRleCwgdWludCBsZW4sIGNvbnN0IFFDaGFyKiwgdWludCBjbGVuICk7CiAgICBRU3Ry
aW5nICZyZXBsYWNlKCBjb25zdCBRUmVnRXhwICYsIGNvbnN0IFFTdHJpbmcgJiApOwoKICAgIHNo
b3J0IHRvU2hvcnQoIGJvb2wgKm9rPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAgICB1c2hvcnQg
dG9VU2hvcnQoIGJvb2wgKm9rPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAgICBpbnQgdG9JbnQo
IGJvb2wgKm9rPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAgICB1aW50IHRvVUludCggYm9vbCAq
b2s9MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAgIGxvbmcgdG9Mb25nKCBib29sICpvaz0wLCBp
bnQgYmFzZT0xMCApIGNvbnN0OwogICAgdWxvbmcgdG9VTG9uZyggYm9vbCAqb2s9MCwgaW50IGJh
c2U9MTAgKSBjb25zdDsKICAgIGZsb2F0IHRvRmxvYXQoIGJvb2wgKm9rPTAgKSBjb25zdDsKICAg
IGRvdWJsZSB0b0RvdWJsZSggYm9vbCAqb2s9MCApIGNvbnN0OwoKICAgIFFTdHJpbmcgJnNldE51
bSggc2hvcnQsIGludCBiYXNlPTEwICk7CiAgICBRU3RyaW5nICZzZXROdW0oIHVzaG9ydCwgaW50
IGJhc2U9MTAgKTsKICAgIFFTdHJpbmcgJnNldE51bSggaW50LCBpbnQgYmFzZT0xMCApOwogICAg
UVN0cmluZyAmc2V0TnVtKCB1aW50LCBpbnQgYmFzZT0xMCApOwogICAgUVN0cmluZyAmc2V0TnVt
KCBsb25nLCBpbnQgYmFzZT0xMCApOwogICAgUVN0cmluZyAmc2V0TnVtKCB1bG9uZywgaW50IGJh
c2U9MTAgKTsKICAgIFFTdHJpbmcgJnNldE51bSggZmxvYXQsIGNoYXIgZj0nZycsIGludCBwcmVj
PTYgKTsKICAgIFFTdHJpbmcgJnNldE51bSggZG91YmxlLCBjaGFyIGY9J2cnLCBpbnQgcHJlYz02
ICk7CgogICAgc3RhdGljIFFTdHJpbmcgbnVtYmVyKCBsb25nLCBpbnQgYmFzZT0xMCApOwogICAg
c3RhdGljIFFTdHJpbmcgbnVtYmVyKCB1bG9uZywgaW50IGJhc2U9MTApOwogICAgc3RhdGljIFFT
dHJpbmcgbnVtYmVyKCBpbnQsIGludCBiYXNlPTEwICk7CiAgICBzdGF0aWMgUVN0cmluZyBudW1i
ZXIoIHVpbnQsIGludCBiYXNlPTEwKTsKICAgIHN0YXRpYyBRU3RyaW5nIG51bWJlciggZG91Ymxl
LCBjaGFyIGY9J2cnLCBpbnQgcHJlYz02ICk7CgogICAgdm9pZCBzZXRFeHBhbmQoIHVpbnQgaW5k
ZXgsIFFDaGFyIGMgKTsKCiAgICBRU3RyaW5nICZvcGVyYXRvcis9KCBjb25zdCBRU3RyaW5nICZz
dHIgKTsKICAgIFFTdHJpbmcgJm9wZXJhdG9yKz0oIFFDaGFyIGMgKTsKICAgIFFTdHJpbmcgJm9w
ZXJhdG9yKz0oIGNoYXIgYyApOwoKCiAgICBRQ2hhciBhdCggdWludCBpICkgY29uc3QKICAgICAg
ICB7IHJldHVybiBpPGQtPmxlbiA/IGQtPnVuaWNvZGVbaV0gOiBRQ2hhcjo6bnVsbDsgfQogICAg
UUNoYXIgb3BlcmF0b3JbXSggaW50IGkgKSBjb25zdCB7IHJldHVybiBhdCgodWludClpKTsgfQog
ICAgUUNoYXJSZWYgYXQoIHVpbnQgaSApOwogICAgUUNoYXJSZWYgb3BlcmF0b3JbXSggaW50IGkg
KTsKCiAgICBRQ2hhciBjb25zdHJlZih1aW50IGkpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gYXQo
aSk7IH0KICAgIFFDaGFyJiByZWYodWludCBpKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGQt
PmNvdW50IT0xIHx8IGk+PWQtPmxlbikKICAgICAgICAgICAgICAgIHN1YmF0KGkpOwogICAgICAg
ICAgICBkLT5kaXJ0eWFzY2lpPTE7CiAgICAgICAgICAgIHJldHVybiBkLT51bmljb2RlW2ldOwog
ICAgICAgIH0KCiAgICBjb25zdCBRQ2hhciogdW5pY29kZSgpIGNvbnN0IHsgcmV0dXJuIGQtPnVu
aWNvZGU7IH0KICAgIGNvbnN0IGNoYXIqIGFzY2lpKCkgY29uc3Q7CiAgICBjb25zdCBjaGFyKiBs
YXRpbjEoKSBjb25zdDsKICAgIHN0YXRpYyBRU3RyaW5nIGZyb21MYXRpbjEoY29uc3QgY2hhcios
IGludCBsZW49LTEpOwoKICAgIFFDU3RyaW5nIHV0ZjgoKSBjb25zdDsKICAgIHN0YXRpYyBRU3Ry
aW5nIGZyb21VdGY4KGNvbnN0IGNoYXIqLCBpbnQgbGVuPS0xKTsKCiAgICBRQ1N0cmluZyBsb2Nh
bDhCaXQoKSBjb25zdDsKICAgIHN0YXRpYyBRU3RyaW5nIGZyb21Mb2NhbDhCaXQoY29uc3QgY2hh
ciosIGludCBsZW49LTEpOwogICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdDsKCiAgICBvcGVyYXRv
ciBjb25zdCBjaGFyICooKSBjb25zdCB7IHJldHVybiBsYXRpbjEoKTsgfQoKCiAgICBRU3RyaW5n
ICZzZXRVbmljb2RlKCBjb25zdCBRQ2hhciogdW5pY29kZSwgdWludCBsZW4gKTsKICAgIFFTdHJp
bmcgJnNldFVuaWNvZGVDb2RlcyggY29uc3QgdXNob3J0KiB1bmljb2RlX2FzX3VzaG9ydHMsIHVp
bnQgbGVuICk7CiAgICBRU3RyaW5nICZzZXRMYXRpbjEoIGNvbnN0IGNoYXIqLCBpbnQgbGVuPS0x
ICk7CgogICAgaW50IGNvbXBhcmUoIGNvbnN0IFFTdHJpbmcmIHMgKSBjb25zdDsKICAgIHN0YXRp
YyBpbnQgY29tcGFyZSggY29uc3QgUVN0cmluZyYgczEsIGNvbnN0IFFTdHJpbmcmIHMyICkKICAg
ICAgICB7IHJldHVybiBzMS5jb21wYXJlKHMyKTsgfQoKCiAgICBmcmllbmQgUURhdGFTdHJlYW0g
Jm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFTdHJpbmcgJiApOwoKCiAgICB2b2lkIGNvbXBv
c2UoKTsKICAgIFFDaGFyOjpEaXJlY3Rpb24gYmFzaWNEaXJlY3Rpb24oKTsKICAgIFFTdHJpbmcg
dmlzdWFsKGludCBpbmRleCA9IDAsIGludCBsZW4gPSAtMSk7CgoKICAgIGNvbnN0IGNoYXIqIGRh
dGEoKSBjb25zdCB7IHJldHVybiBsYXRpbjEoKTsgfQoKCiAgICBib29sIHN0YXJ0c1dpdGgoIGNv
bnN0IFFTdHJpbmcmICkgY29uc3Q7Cgpwcml2YXRlOgogICAgUVN0cmluZyggaW50IHNpemUsIGJv
b2wgZHVtbXkgKTsKCiAgICB2b2lkIGRlcmVmKCk7CiAgICB2b2lkIHJlYWxfZGV0YWNoKCk7CiAg
ICB2b2lkIHNldExlbmd0aCggdWludCBwb3MgKTsKICAgIHZvaWQgc3ViYXQoIHVpbnQgKTsKICAg
IGJvb2wgZmluZEFyZyhpbnQmIHBvcywgaW50JiBsZW4pIGNvbnN0OwoKICAgIHN0YXRpYyBRQ2hh
ciogYXNjaWlUb1VuaWNvZGUoIGNvbnN0IGNoYXIqLCB1aW50ICogbGVuLCB1aW50IG1heGxlbj0o
dWludCktMSApOwogICAgc3RhdGljIFFDaGFyKiBhc2NpaVRvVW5pY29kZSggY29uc3QgUUJ5dGVB
cnJheSYsIHVpbnQgKiBsZW4gKTsKICAgIHN0YXRpYyBjaGFyKiB1bmljb2RlVG9Bc2NpaSggY29u
c3QgUUNoYXIqLCB1aW50IGxlbiApOwoKICAgIFFTdHJpbmdEYXRhICpkOwogICAgc3RhdGljIFFT
dHJpbmdEYXRhKiBzaGFyZWRfbnVsbDsKICAgIHN0YXRpYyBRU3RyaW5nRGF0YSogbWFrZVNoYXJl
ZE51bGwoKTsKCiAgICBmcmllbmQgY2xhc3MgUUNvbnN0U3RyaW5nOwogICAgUVN0cmluZyhRU3Ry
aW5nRGF0YSogZGQsIGJvb2wgKSA6IGQoZGQpIHsgfQp9OwoKY2xhc3MgUUNoYXJSZWYgewogICAg
ZnJpZW5kIGNsYXNzIFFTdHJpbmc7CiAgICBRU3RyaW5nJiBzOwogICAgdWludCBwOwogICAgUUNo
YXJSZWYoUVN0cmluZyogc3RyLCB1aW50IHBvcykgOiBzKCpzdHIpLCBwKHBvcykgeyB9CgpwdWJs
aWM6CgoKCgogICAgdXNob3J0IHVuaWNvZGUoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHAp
LnVuaWNvZGUoKTsgfQogICAgY2hhciBsYXRpbjEoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVm
KHApLmxhdGluMSgpOyB9CgoKICAgIFFDaGFyUmVmIG9wZXJhdG9yPShjaGFyIGMgKSB7IHMucmVm
KHApPWM7IHJldHVybiAqdGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KHVjaGFyIGMgKSB7
IHMucmVmKHApPWM7IHJldHVybiAqdGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KFFDaGFy
IGMgKSB7IHMucmVmKHApPWM7IHJldHVybiAqdGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9
KGNvbnN0IFFDaGFyUmVmJiBjICkgeyBzLnJlZihwKT1jLnVuaWNvZGUoKTsgcmV0dXJuICp0aGlz
OyB9CiAgICBRQ2hhclJlZiBvcGVyYXRvcj0odXNob3J0IHJjICkgeyBzLnJlZihwKT1yYzsgcmV0
dXJuICp0aGlzOyB9CiAgICBRQ2hhclJlZiBvcGVyYXRvcj0oc2hvcnQgcmMgKSB7IHMucmVmKHAp
PXJjOyByZXR1cm4gKnRoaXM7IH0KICAgIFFDaGFyUmVmIG9wZXJhdG9yPSh1aW50IHJjICkgeyBz
LnJlZihwKT1yYzsgcmV0dXJuICp0aGlzOyB9CiAgICBRQ2hhclJlZiBvcGVyYXRvcj0oaW50IHJj
ICkgeyBzLnJlZihwKT1yYzsgcmV0dXJuICp0aGlzOyB9CgogICAgb3BlcmF0b3IgUUNoYXIgKCkg
Y29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKTsgfQoKCiAgICBib29sIGlzTnVsbCgpIGNvbnN0
IHsgcmV0dXJuIHVuaWNvZGUoKT09MDsgfQogICAgYm9vbCBpc1ByaW50KCkgY29uc3QgeyByZXR1
cm4gcy5jb25zdHJlZihwKS5pc1ByaW50KCk7IH0KICAgIGJvb2wgaXNQdW5jdCgpIGNvbnN0IHsg
cmV0dXJuIHMuY29uc3RyZWYocCkuaXNQdW5jdCgpOyB9CiAgICBib29sIGlzU3BhY2UoKSBjb25z
dCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmlzU3BhY2UoKTsgfQogICAgYm9vbCBpc01hcmsoKSBj
b25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmlzTWFyaygpOyB9CiAgICBib29sIGlzTGV0dGVy
KCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc0xldHRlcigpOyB9CiAgICBib29sIGlz
TnVtYmVyKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc051bWJlcigpOyB9CiAgICBi
b29sIGlzTGV0dGVyT3JOdW1iZXIoKSB7IHJldHVybiBzLmNvbnN0cmVmKHApLmlzTGV0dGVyT3JO
dW1iZXIoKTsgfQogICAgYm9vbCBpc0RpZ2l0KCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihw
KS5pc0RpZ2l0KCk7IH0KCiAgICBpbnQgZGlnaXRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHMuY29u
c3RyZWYocCkuZGlnaXRWYWx1ZSgpOyB9CiAgICBRQ2hhciBsb3dlcigpIHsgcmV0dXJuIHMuY29u
c3RyZWYocCkubG93ZXIoKTsgfQogICAgUUNoYXIgdXBwZXIoKSB7IHJldHVybiBzLmNvbnN0cmVm
KHApLnVwcGVyKCk7IH0KCiAgICBRQ2hhcjo6Q2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdCB7IHJl
dHVybiBzLmNvbnN0cmVmKHApLmNhdGVnb3J5KCk7IH0KICAgIFFDaGFyOjpEaXJlY3Rpb24gZGly
ZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5kaXJlY3Rpb24oKTsgfQogICAg
UUNoYXI6OkpvaW5pbmcgam9pbmluZygpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuam9p
bmluZygpOyB9CiAgICBib29sIG1pcnJvcmVkKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihw
KS5taXJyb3JlZCgpOyB9CiAgICBRQ2hhciBtaXJyb3JlZENoYXIoKSBjb25zdCB7IHJldHVybiBz
LmNvbnN0cmVmKHApLm1pcnJvcmVkQ2hhcigpOyB9CiAgICBRU3RyaW5nIGRlY29tcG9zaXRpb24o
KSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmRlY29tcG9zaXRpb24oKTsgfQogICAgUUNo
YXI6OkRlY29tcG9zaXRpb24gZGVjb21wb3NpdGlvblRhZygpIGNvbnN0IHsgcmV0dXJuIHMuY29u
c3RyZWYocCkuZGVjb21wb3NpdGlvblRhZygpOyB9CgoKICAgIHVjaGFyIGNlbGwoKSBjb25zdCB7
IHJldHVybiBzLmNvbnN0cmVmKHApLmNlbGwoKTsgfQogICAgdWNoYXIgcm93KCkgY29uc3QgeyBy
ZXR1cm4gcy5jb25zdHJlZihwKS5yb3coKTsgfQoKfTsKCmlubGluZSBRQ2hhclJlZiBRU3RyaW5n
OjphdCggdWludCBpICkgeyByZXR1cm4gUUNoYXJSZWYodGhpcyxpKTsgfQppbmxpbmUgUUNoYXJS
ZWYgUVN0cmluZzo6b3BlcmF0b3JbXSggaW50IGkgKSB7IHJldHVybiBhdCgodWludClpKTsgfQoK
CmNsYXNzIFFDb25zdFN0cmluZyA6IHByaXZhdGUgUVN0cmluZyB7CnB1YmxpYzoKICAgIFFDb25z
dFN0cmluZyggUUNoYXIqIHVuaWNvZGUsIHVpbnQgbGVuZ3RoICk7CiAgICB+UUNvbnN0U3RyaW5n
KCk7CiAgICBjb25zdCBRU3RyaW5nJiBzdHJpbmcoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQp9
OwoKCgoKCgogICAgICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwg
Y29uc3QgUVN0cmluZyAmICk7CiAgICAgICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0
YVN0cmVhbSAmLCBRU3RyaW5nICYgKTsKIyA2NDEgInRvb2xzL3FzdHJpbmcuaCIKaW5saW5lIFFT
dHJpbmc6OlFTdHJpbmcoKSA6CiAgICBkKHNoYXJlZF9udWxsID8gc2hhcmVkX251bGwgOiBtYWtl
U2hhcmVkTnVsbCgpKQp7CiAgICBkLT5yZWYoKTsKfQoKaW5saW5lIFFTdHJpbmc6On5RU3RyaW5n
KCkKewogICAgaWYgKCBkLT5kZXJlZigpICkgewogICAgICAgIGlmICggZCA9PSBzaGFyZWRfbnVs
bCApCiAgICAgICAgICAgIHNoYXJlZF9udWxsID0gMDsKICAgICAgICBkLT5kZWxldGVTZWxmKCk7
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
KFFTdHJpbmc6OmZyb21MYXRpbjEoc3RyKSwgaW5kZXgpOyB9CgoKCgoKCgogICAgICAgICBib29s
IG9wZXJhdG9yIT0oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwogICAg
ICAgICBib29sIG9wZXJhdG9yPCggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMy
ICk7CiAgICAgICAgIGJvb2wgb3BlcmF0b3I8PSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IFFT
dHJpbmcgJnMyICk7CiAgICAgICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVN0cmluZyAmczEs
IGNvbnN0IFFTdHJpbmcgJnMyICk7CiAgICAgICAgIGJvb2wgb3BlcmF0b3I+KCBjb25zdCBRU3Ry
aW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKICAgICAgICAgYm9vbCBvcGVyYXRvcj49KCBj
b25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKCiAgICAgICAgIGJvb2wgb3Bl
cmF0b3IhPSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICk7CiAgICAgICAgIGJv
b2wgb3BlcmF0b3I8KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKTsKICAgICAg
ICAgYm9vbCBvcGVyYXRvcjw9KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKTsK
ICAgICAgICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAq
czIgKTsKICAgICAgICAgYm9vbCBvcGVyYXRvcj4oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBj
aGFyICpzMiApOwogICAgICAgICBib29sIG9wZXJhdG9yPj0oIGNvbnN0IFFTdHJpbmcgJnMxLCBj
b25zdCBjaGFyICpzMiApOwogICAgICAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IGNoYXIgKnMx
LCBjb25zdCBRU3RyaW5nICZzMiApOwogICAgICAgICBib29sIG9wZXJhdG9yPCggY29uc3QgY2hh
ciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiAgICAgICAgIGJvb2wgb3BlcmF0b3I8PSggY29u
c3QgY2hhciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiAgICAgICAgIGJvb2wgb3BlcmF0b3I9
PSggY29uc3QgY2hhciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CgogICAgICAgICBib29sIG9w
ZXJhdG9yPj0oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwoKCiAgICAgICAg
IGlubGluZSBRU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJp
bmcgJnMyICkKewogICAgUVN0cmluZyB0bXAoIHMxICk7CiAgICB0bXAgKz0gczI7CiAgICByZXR1
cm4gdG1wOwp9CgoKICAgICAgICAgaW5saW5lIFFTdHJpbmcgb3BlcmF0b3IrKCBjb25zdCBRU3Ry
aW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7CiAgICBRU3RyaW5nIHRtcCggczEgKTsKICAgIHRt
cCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKHMyKTsKICAgIHJldHVybiB0bXA7Cn0KCiAgICAgICAg
IGlubGluZSBRU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgY2hhciAqczEsIGNvbnN0IFFTdHJpbmcg
JnMyICkKewogICAgUVN0cmluZyB0bXAgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCBzMSApOwogICAg
dG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKCiAgICAgICAgIGlubGluZSBRU3RyaW5nIG9w
ZXJhdG9yKyggY29uc3QgUVN0cmluZyAmczEsIFFDaGFyIGMyICkKewogICAgUVN0cmluZyB0bXAo
IHMxICk7CiAgICB0bXAgKz0gYzI7CiAgICByZXR1cm4gdG1wOwp9CgogICAgICAgICBpbmxpbmUg
UVN0cmluZyBvcGVyYXRvcisoIGNvbnN0IFFTdHJpbmcgJnMxLCBjaGFyIGMyICkKewogICAgUVN0
cmluZyB0bXAoIHMxICk7CiAgICB0bXAgKz0gYzI7CiAgICByZXR1cm4gdG1wOwp9CgogICAgICAg
ICBpbmxpbmUgUVN0cmluZyBvcGVyYXRvcisoIFFDaGFyIGMxLCBjb25zdCBRU3RyaW5nICZzMiAp
CnsKICAgIFFTdHJpbmcgdG1wOwogICAgdG1wICs9IGMxOwogICAgdG1wICs9IHMyOwogICAgcmV0
dXJuIHRtcDsKfQoKICAgICAgICAgaW5saW5lIFFTdHJpbmcgb3BlcmF0b3IrKCBjaGFyIGMxLCBj
b25zdCBRU3RyaW5nICZzMiApCnsKICAgIFFTdHJpbmcgdG1wOwogICAgdG1wICs9IGMxOwogICAg
dG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQojIDQ0ICJ0b29scy9xZGF0YXN0cmVhbS5oIiAy
CgoKCmNsYXNzIFFEYXRhU3RyZWFtCnsKcHVibGljOgogICAgUURhdGFTdHJlYW0oKTsKICAgIFFE
YXRhU3RyZWFtKCBRSU9EZXZpY2UgKiApOwogICAgUURhdGFTdHJlYW0oIFFCeXRlQXJyYXksIGlu
dCBtb2RlICk7CiAgICB2aXJ0dWFsIH5RRGF0YVN0cmVhbSgpOwoKICAgIFFJT0RldmljZSAqZGV2
aWNlKCkgY29uc3Q7CiAgICB2b2lkIHNldERldmljZSggUUlPRGV2aWNlICogKTsKICAgIHZvaWQg
dW5zZXREZXZpY2UoKTsKCiAgICBib29sIGF0RW5kKCkgY29uc3Q7CiAgICBib29sIGVvZigpIGNv
bnN0OwoKICAgIGVudW0gQnl0ZU9yZGVyIHsgQmlnRW5kaWFuLCBMaXR0bGVFbmRpYW4gfTsKICAg
IGludCBieXRlT3JkZXIoKSBjb25zdDsKICAgIHZvaWQgc2V0Qnl0ZU9yZGVyKCBpbnQgKTsKCiAg
ICBib29sIGlzUHJpbnRhYmxlRGF0YSgpIGNvbnN0OwogICAgdm9pZCBzZXRQcmludGFibGVEYXRh
KCBib29sICk7CgogICAgaW50IHZlcnNpb24oKSBjb25zdDsKICAgIHZvaWQgc2V0VmVyc2lvbigg
aW50ICk7CgogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfSU5UOCAmaSApOwogICAgUURh
dGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfVUlOVDggJmkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVy
YXRvcj4+KCBRX0lOVDE2ICZpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUV9VSU5U
MTYgJmkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRX0lOVDMyICZpICk7CiAgICBR
RGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUV9VSU5UMzIgJmkgKTsKICAgIFFEYXRhU3RyZWFtICZv
cGVyYXRvcj4+KCBRX0lOVDY0ICZpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUV9V
SU5UNjQgJmkgKTsKCiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggZmxvYXQgJmYgKTsKICAg
IFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBkb3VibGUgJmYgKTsKICAgIFFEYXRhU3RyZWFtICZv
cGVyYXRvcj4+KCBjaGFyIComc3RyICk7CgogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFf
SU5UOCBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUV9VSU5UOCBpICk7CiAgICBR
RGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUV9JTlQxNiBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3Bl
cmF0b3I8PCggUV9VSU5UMTYgaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfSU5U
MzIgaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfVUlOVDMyIGkgKTsKICAgIFFE
YXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRX0lOVDY0IGkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVy
YXRvcjw8KCBRX1VJTlQ2NCBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggZmxvYXQg
ZiApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIGRvdWJsZSBmICk7CiAgICBRRGF0YVN0
cmVhbSAmb3BlcmF0b3I8PCggY29uc3QgY2hhciAqc3RyICk7CgogICAgUURhdGFTdHJlYW0gJnJl
YWRCeXRlcyggY2hhciAqJiwgdWludCAmbGVuICk7CiAgICBRRGF0YVN0cmVhbSAmcmVhZFJhd0J5
dGVzKCBjaGFyICosIHVpbnQgbGVuICk7CgogICAgUURhdGFTdHJlYW0gJndyaXRlQnl0ZXMoIGNv
bnN0IGNoYXIgKiwgdWludCBsZW4gKTsKICAgIFFEYXRhU3RyZWFtICZ3cml0ZVJhd0J5dGVzKCBj
b25zdCBjaGFyICosIHVpbnQgbGVuICk7Cgpwcml2YXRlOgogICAgUUlPRGV2aWNlICpkZXY7CiAg
ICBib29sIG93bmRldjsKICAgIGludCBieXRlb3JkZXI7CiAgICBib29sIHByaW50YWJsZTsKICAg
IGJvb2wgbm9zd2FwOwogICAgaW50IHZlcjsKCnByaXZhdGU6CgogICAgUURhdGFTdHJlYW0oIGNv
bnN0IFFEYXRhU3RyZWFtICYgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj0oIGNvbnN0IFFE
YXRhU3RyZWFtICYgKTsKCn07CgoKCgoKCmlubGluZSBRSU9EZXZpY2UgKlFEYXRhU3RyZWFtOjpk
ZXZpY2UoKSBjb25zdAp7IHJldHVybiBkZXY7IH0KCmlubGluZSBib29sIFFEYXRhU3RyZWFtOjph
dEVuZCgpIGNvbnN0CnsgcmV0dXJuIGRldiA/IGRldi0+YXRFbmQoKSA6IFRSVUU7IH0KCmlubGlu
ZSBib29sIFFEYXRhU3RyZWFtOjplb2YoKSBjb25zdAp7IHJldHVybiBhdEVuZCgpOyB9Cgppbmxp
bmUgaW50IFFEYXRhU3RyZWFtOjpieXRlT3JkZXIoKSBjb25zdAp7IHJldHVybiBieXRlb3JkZXI7
IH0KCmlubGluZSBib29sIFFEYXRhU3RyZWFtOjppc1ByaW50YWJsZURhdGEoKSBjb25zdAp7IHJl
dHVybiBwcmludGFibGU7IH0KCmlubGluZSB2b2lkIFFEYXRhU3RyZWFtOjpzZXRQcmludGFibGVE
YXRhKCBib29sIHAgKQp7IHByaW50YWJsZSA9IHA7IH0KCmlubGluZSBpbnQgUURhdGFTdHJlYW06
OnZlcnNpb24oKSBjb25zdAp7IHJldHVybiB2ZXI7IH0KCmlubGluZSB2b2lkIFFEYXRhU3RyZWFt
OjpzZXRWZXJzaW9uKCBpbnQgdiApCnsgdmVyID0gdjsgfQoKaW5saW5lIFFEYXRhU3RyZWFtICZR
RGF0YVN0cmVhbTo6b3BlcmF0b3I+PiggUV9VSU5UOCAmaSApCnsgcmV0dXJuICp0aGlzID4+IChR
X0lOVDgmKWk7IH0KCmlubGluZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9yPj4o
IFFfVUlOVDE2ICZpICkKeyByZXR1cm4gKnRoaXMgPj4gKFFfSU5UMTYmKWk7IH0KCmlubGluZSBR
RGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9yPj4oIFFfVUlOVDMyICZpICkKeyByZXR1
cm4gKnRoaXMgPj4gKFFfSU5UMzImKWk7IH0KCmlubGluZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJl
YW06Om9wZXJhdG9yPj4oIFFfVUlOVDY0ICZpICkKeyByZXR1cm4gKnRoaXMgPj4gKFFfSU5UNjQm
KWk7IH0KCmlubGluZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9yPDwoIFFfVUlO
VDggaSApCnsgcmV0dXJuICp0aGlzIDw8IChRX0lOVDgpaTsgfQoKaW5saW5lIFFEYXRhU3RyZWFt
ICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I8PCggUV9VSU5UMTYgaSApCnsgcmV0dXJuICp0aGlzIDw8
IChRX0lOVDE2KWk7IH0KCmlubGluZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9y
PDwoIFFfVUlOVDMyIGkgKQp7IHJldHVybiAqdGhpcyA8PCAoUV9JTlQzMilpOyB9CgppbmxpbmUg
UURhdGFTdHJlYW0gJlFEYXRhU3RyZWFtOjpvcGVyYXRvcjw8KCBRX1VJTlQ2NCBpICkKeyByZXR1
cm4gKnRoaXMgPDwgKFFfSU5UNjQpaTsgfQojIDM5ICJ0b29scy9xZGF0YXN0cmVhbS5jcHAiIDIK
CgojIDEgInRvb2xzL3FidWZmZXIuaCIgMQojIDQyICJ0b29scy9xYnVmZmVyLmgiCiMgMSAidG9v
bHMvcWlvZGV2aWNlLmgiIDEKIyA0MyAidG9vbHMvcWJ1ZmZlci5oIiAyCiMgMSAidG9vbHMvcXN0
cmluZy5oIiAxCiMgNDQgInRvb2xzL3FidWZmZXIuaCIgMgoKCgpjbGFzcyBRQnVmZmVyIDogcHVi
bGljIFFJT0RldmljZQp7CnB1YmxpYzoKICAgIFFCdWZmZXIoKTsKICAgIFFCdWZmZXIoIFFCeXRl
QXJyYXkgKTsKICAgflFCdWZmZXIoKTsKCiAgICBRQnl0ZUFycmF5IGJ1ZmZlcigpIGNvbnN0Owog
ICAgYm9vbCBzZXRCdWZmZXIoIFFCeXRlQXJyYXkgKTsKCiAgICBib29sIG9wZW4oIGludCApOwog
ICAgdm9pZCBjbG9zZSgpOwogICAgdm9pZCBmbHVzaCgpOwoKICAgIHVpbnQgc2l6ZSgpIGNvbnN0
OwogICAgaW50IGF0KCkgY29uc3Q7CiAgICBib29sIGF0KCBpbnQgKTsKCiAgICBpbnQgcmVhZEJs
b2NrKCBjaGFyICpwLCB1aW50ICk7CiAgICBpbnQgd3JpdGVCbG9jayggY29uc3QgY2hhciAqcCwg
dWludCApOwogICAgaW50IHJlYWRMaW5lKCBjaGFyICpwLCB1aW50ICk7CgogICAgaW50IGdldGNo
KCk7CiAgICBpbnQgcHV0Y2goIGludCApOwogICAgaW50IHVuZ2V0Y2goIGludCApOwoKcHJvdGVj
dGVkOgogICAgUUJ5dGVBcnJheSBhOwoKcHJpdmF0ZToKICAgIHVpbnQgYV9sZW47CiAgICB1aW50
IGFfaW5jOwoKcHJpdmF0ZToKCiAgICBRQnVmZmVyKCBjb25zdCBRQnVmZmVyICYgKTsKICAgIFFC
dWZmZXIgJm9wZXJhdG9yPSggY29uc3QgUUJ1ZmZlciAmICk7Cgp9OwoKCmlubGluZSBRQnl0ZUFy
cmF5IFFCdWZmZXI6OmJ1ZmZlcigpIGNvbnN0CnsgcmV0dXJuIGE7IH0KCmlubGluZSB1aW50IFFC
dWZmZXI6OnNpemUoKSBjb25zdAp7IHJldHVybiBhLnNpemUoKTsgfQoKaW5saW5lIGludCBRQnVm
ZmVyOjphdCgpIGNvbnN0CnsgcmV0dXJuIGlvSW5kZXg7IH0KIyA0MiAidG9vbHMvcWRhdGFzdHJl
YW0uY3BwIiAyCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1
ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOCAiL3Vz
ci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg
MzQgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2Nj
LWxpYi9pMzg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDMgIi91
c3IvbG9jYWwvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkYXJn
LmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyAxMTAgIi91
c3IvbG9jYWwvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkYXJn
LmgiIDMKdHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0OwojIDM5ICIvdXNyL2luY2x1ZGUv
c3RkaW8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI2ICIv
dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgi
IDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvbG9j
YWwvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEg
MwojIDMwICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVk
IGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVm
IHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7Cgpf
X2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90Owpf
X2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9p
bmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBl
ZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19p
bnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNp
Z25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19l
eHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRl
bnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVk
ZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90Owp0eXBl
ZGVmIF9fdV9pbnQgX191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191
X2xvbmcgX19pbm9fdDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9pbnQg
X19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgX19s
b2ZmX3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRl
ZiBfX3VfbG9uZyBfX3JsaW1fdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0X3Q7CnR5cGVk
ZWYgX191X2ludCBfX2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsK
ICB9IF9fZnNpZF90OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2Nh
ZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Js
a190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBsb25n
IGludCBfX2ZkX21hc2s7CiMgMTAwICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCnR5cGVk
ZWYgc3RydWN0CiAgewoKCgogICAgX19mZF9tYXNrIGZkc19iaXRzWzEwMjQgLyAoOCAqIHNpemVv
ZiAoX19mZF9tYXNrKSldOwoKCgoKCiAgfSBfX2ZkX3NldDsKCgp0eXBlZGVmIGludCBfX2tleV90
OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoKCgoKCnR5cGVkZWYg
bG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlw
ZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250
NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90
IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19pbm82NF90OwoKCnR5cGVkZWYg
X19sb2ZmX3QgX19vZmY2NF90OwoKCnR5cGVkZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fdF91c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRw
dHJfdDsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDEgMwojIDIz
ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL3NjaGVkLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVj
dCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IHNjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91
c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFz
dGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwp9OwoKCgp0eXBl
ZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5
cGVkZWYgc3RydWN0CnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsK
ICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVk
OwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJf
c2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFk
X2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBf
X2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsK
CgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsK
Cgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0
CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3Ig
X19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19t
X2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0
ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25j
ZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QKewogIHN0cnVjdCBfcHRo
cmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9fcndfcmVhZGVyczsKICBfcHRocmVhZF9k
ZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNjciBfX3J3X3JlYWRfd2FpdGluZzsKICBf
cHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9fcndfa2luZDsKICBpbnQg
X19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBp
bnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrYXR0cl90OwoK
CgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CiMgMTUxICIvdXNyL2luY2x1
ZGUvYml0cy90eXBlcy5oIiAyIDMKIyA0MSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoK
CgoKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKIyA1NyAiL3Vzci9pbmNsdWRlL3N0ZGlv
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9s
aWJpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIyA5ICIvdXNyL2lu
Y2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMK
IyAxMCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCgoKCiMgMSAiL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg
MzEyICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHdpbnRfdDsKIyAxNSAiL3Vzci9pbmNs
dWRlL19HX2NvbmZpZy5oIiAyIDMKIyAzNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCnR5
cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7
CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18p
KSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21v
ZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJp
YnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKIyAzMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi
IDIgMwojIDQ4ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvbG9jYWwvbGliL2dj
Yy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQ5ICIv
dXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgMTU0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpz
dHJ1Y3QgX0lPX2p1bXBfdDsgc3RydWN0IF9JT19GSUxFOwojIDE2NCAiL3Vzci9pbmNsdWRlL2xp
YmlvLmgiIDMKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIg
ewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoK
CgogIGludCBfcG9zOwojIDE4NyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKfTsKCnN0cnVjdCBf
SU9fRklMRSB7CiAgaW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIq
IF9JT19yZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9i
YXNlOwogIGNoYXIqIF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFy
KiBfSU9fYnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jh
c2U7CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3Ry
dWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAg
aW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAg
dW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7
CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CiMgMjMzICIvdXNy
L2luY2x1ZGUvbGliaW8uaCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoKICBpbnQgX3VudXNlZDJb
MTZdOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKZXh0ZXJuIHN0cnVjdCBfSU9fRklM
RV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJf
MV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwoj
IDI2MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFk
X2ZuICh2b2lkICogX19jb29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpOwojIDI3
MSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9m
biAodm9pZCAqIF9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLCBzaXplX3QgX19uKTsKIyAy
ODAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9p
ZCAqIF9fY29va2llLCBfX29mZl90IF9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGludCBfX2lv
X2Nsb3NlX2ZuICh2b2lkICogX19jb29raWUpOwoKCgoKdHlwZWRlZiBfX2lvX3JlYWRfZm4gY29v
a2llX3JlYWRfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3dyaXRlX2ZuIGNvb2tpZV93cml0ZV9m
dW5jdGlvbl90Owp0eXBlZGVmIF9faW9fc2Vla19mbiBjb29raWVfc2Vla19mdW5jdGlvbl90Owp0
eXBlZGVmIF9faW9fY2xvc2VfZm4gY29va2llX2Nsb3NlX2Z1bmN0aW9uX3Q7CgoKdHlwZWRlZiBz
dHJ1Y3QKewogIF9faW9fcmVhZF9mbiAqcmVhZDsKICBfX2lvX3dyaXRlX2ZuICp3cml0ZTsKICBf
X2lvX3NlZWtfZm4gKnNlZWs7CiAgX19pb19jbG9zZV9mbiAqY2xvc2U7Cn0gX0lPX2Nvb2tpZV9p
b19mdW5jdGlvbnNfdDsKdHlwZWRlZiBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IGNvb2tpZV9p
b19mdW5jdGlvbnNfdDsKCgpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlCnsKICBzdHJ1Y3QgX0lPX0ZJ
TEUgX19maWxlOwogIGNvbnN0IHZvaWQgKl9fdnRhYmxlOwogIHZvaWQgKl9fY29va2llOwogIF9J
T19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5jdGlvbnM7Cn07CgoKCgpleHRlcm4gIkMi
IHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBfX3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX292ZXJmbG93
IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgpOwojIDMzNyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi
IDMKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4g
aW50IF9JT19wdXRjIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgX0lPX2Zlb2YgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVy
cm9yIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2Nr
ZWQgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tm
aWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChf
SU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklM
RSAqKSB0aHJvdyAoKTsKIyAzNjMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQg
X0lPX3Zmc2NhbmYgKF9JT19GSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJp
Y3QsIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRocm93ICgpOwoKZXh0ZXJuIGlu
dCBfSU9fdmZwcmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3Ry
aWN0LCBfX2dudWNfdmFfbGlzdCkgdGhyb3cgKCk7CgpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRu
IChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgX0lP
X3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNpemVfdCkgdGhyb3cgKCk7CgpleHRlcm4gX19v
ZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCwgaW50KSB0aHJv
dyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90
LCBpbnQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19G
SUxFICopIHRocm93ICgpOwoKCn0KIyA1OCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgp0
eXBlZGVmIF9fb2ZmX3QgZnBvc190OwoKCgoKdHlwZWRlZiBfX29mZjY0X3QgZnBvczY0X3Q7CiMg
MTEwICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlv
X2xpbS5oIiAxIDMKIyAxMTEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKZXh0ZXJuIEZJ
TEUgKnN0ZGluOwpleHRlcm4gRklMRSAqc3Rkb3V0OwpleHRlcm4gRklMRSAqc3RkZXJyOwoKCgoK
CgoKZXh0ZXJuIGludCByZW1vdmUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7
CgpleHRlcm4gaW50IHJlbmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpf
X25ldykgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgdGhyb3cgKCk7
CiMgMTQwICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2
b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGNoYXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIHRocm93ICgpOwojIDE2MCAi
L3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hh
ciAqX19kaXIsIF9fY29uc3QgY2hhciAqX19wZngpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBm
Y2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19maWxlbmFtZSwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwoK
CmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFt
ZSwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsIEZJTEUgKl9fcmVzdHJpY3QgX19z
dHJlYW0pIHRocm93ICgpOwojIDIwMyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJ
TEUgKmZvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLCBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CgpleHRlcm4gRklMRSAqZnJlb3Bl
bjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbW9kZXMsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gRklMRSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVz
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJp
Y3QgX19tYWdpY19jb29raWUsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLCBfSU9f
Y29va2llX2lvX2Z1bmN0aW9uc190IF9faW9fZnVuY3MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4g
RklMRSAqb3Blbl9tZW1zdHJlYW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fYnVmbG9jLCBzaXplX3Qg
Kl9fcmVzdHJpY3QgX19zaXplbG9jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVm
IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBzZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBj
aGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBj
aGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu
dCBmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwcmludGYgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQg
c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19y
ZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3Zh
X2xpc3QgX19hcmcpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4
bGVuLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCkKCiAg
ICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CgpleHRl
cm4gaW50IF9fdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVu
LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJn
KSB0aHJvdyAoKQoKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18s
IDMsIDApKSk7CmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6
ZV90IF9fbWF4bGVuLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192
YV9saXN0IF9fYXJnKSB0aHJvdyAoKQoKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g
KF9fcHJpbnRmX18sIDMsIDApKSk7CgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipf
X3Jlc3RyaWN0IF9fcHRyLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mLCBfX2dudWNfdmFf
bGlzdCBfX2FyZykgdGhyb3cgKCkKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9f
cHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJp
Y3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKSB0aHJvdyAoKQoK
ICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0
ZXJuIGludCBhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2ZtdCwgLi4uKSB0aHJvdyAoKQoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19m
b3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQg
X19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCBfX2Fy
ZykgdGhyb3cgKCkKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18s
IDIsIDApKSk7CmV4dGVybiBpbnQgZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2ZtdCwgLi4uKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1h
dF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9f
cmVzdHJpY3QgX19zdHJlYW0sIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4u
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4p
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCB2ZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fcywg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykg
dGhyb3cgKCkKCgogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIs
IDApKSk7CgoKZXh0ZXJuIGludCB2c2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv
cm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAo
KF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMSwgMCkpKTsKCgpleHRlcm4gaW50IHZzc2NhbmYgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv
cm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpCgoKICAgICBfX2F0dHJpYnV0ZV9f
ICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCgoKZXh0ZXJuIGludCBmZ2V0YyAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldGNoYXIgKHZvaWQpIHRocm93ICgpOwoKCgoKCgoK
ZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZn
ZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZw
dXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAo
aW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAo
aW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQg
X19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2Nr
ZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjaGFy
X3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmlj
dCBfX3MsIGludCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGNoYXIgKmZnZXRzX3VubG9ja2VkIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9f
biwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIg
KmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgNDEzICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg
MwpleHRlcm4gX19zc2l6ZV90IF9fZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0
ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLCBGSUxFICpfX3Jlc3Ry
aWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFy
ICoqX19yZXN0cmljdCBfX2xpbmVwdHIsIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2Rl
bGltaXRlciwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
X19zc2l6ZV90IGdldGxpbmUgKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwgc2l6ZV90ICpf
X3Jlc3RyaWN0IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoK
CmV4dGVybiBpbnQgZnB1dHMgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9f
cmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0c191bmxvY2tl
ZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVh
bSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6
ZV90IF9fc2l6ZSwgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0
ciwgc2l6ZV90IF9fc2l6ZSwgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBf
X3B0ciwgc2l6ZV90IF9fc2l6ZSwgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVh
bSkgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lk
ICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLCBzaXplX3QgX19uLCBGSUxFICpfX3Jl
c3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAq
X19zdHJlYW0sIGxvbmcgaW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJu
IGxvbmcgaW50IGZ0ZWxsIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBy
ZXdpbmQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA0NzcgIi91c3IvaW5jbHVkZS9zdGRp
by5oIiAzCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsKCgoKCgoKCnR5cGVkZWYgX19vZmY2NF90IG9m
ZjY0X3Q7CgoKCgoKCgpleHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3Qg
X19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmZfdCBmdGVsbG8gKEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jl
c3RyaWN0IF9fc3RyZWFtLCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3Bvcykg
dGhyb3cgKCk7CiMgNTI2ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzZWVr
bzY0IChGSUxFICpfX3N0cmVhbSwgX19vZmY2NF90IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93
ICgpOwpleHRlcm4gX19vZmY2NF90IGZ0ZWxsbzY0IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgZmdldHBvczY0IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zNjRf
dCAqX19yZXN0cmljdCBfX3BvcykgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZzZXRwb3M2NCAoRklM
RSAqX19zdHJlYW0sIF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVv
ZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9f
Y29uc3Qgc3lzX2Vycmxpc3RbXTsKCgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29u
c3QgY2hhciAqX19jb25zdCBfc3lzX2Vycmxpc3RbXTsKCgoKCgpleHRlcm4gaW50IGZpbGVubyAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQg
KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2Nv
bnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBj
aGFyICpjdGVybWlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdXNl
cmlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGlu
dCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLCBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4g
aW50IG9ic3RhY2tfdnByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNr
LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJn
cykgdGhyb3cgKCk7CiMgNjEyICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gdm9pZCBm
bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmdHJ5bG9j
a2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBmdW5sb2NrZmls
ZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDYzMyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRl
L2JpdHMvc3RkaW8uaCIgMwppbmxpbmUgaW50CnZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2ZtdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpCnsKICByZXR1cm4gdmZw
cmludGYgKHN0ZG91dCwgX19mbXQsIF9fYXJnKTsKfQoKCmlubGluZSBpbnQKZ2V0Y2hhciAodm9p
ZCkgdGhyb3cgKCkKewogIHJldHVybiBfSU9fZ2V0YyAoc3RkaW4pOwp9CgoKCgppbmxpbmUgaW50
CmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fZnApIHRocm93ICgpCnsKICByZXR1cm4gKChfX2ZwKS0+
X0lPX3JlYWRfcHRyID49IChfX2ZwKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoX19mcCkgOiAq
KHVuc2lnbmVkIGNoYXIgKikgKF9fZnApLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgppbmxpbmUgaW50
CmdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpCnsKICByZXR1cm4gKChzdGRpbiktPl9J
T19yZWFkX3B0ciA+PSAoc3RkaW4pLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChzdGRpbikgOiAq
KHVuc2lnbmVkIGNoYXIgKikgKHN0ZGluKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKCgppbmxpbmUg
aW50CnB1dGNoYXIgKGludCBfX2MpIHRocm93ICgpCnsKICByZXR1cm4gX0lPX3B1dGMgKF9fYywg
c3Rkb3V0KTsKfQoKCgoKaW5saW5lIGludApmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAq
X19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRy
ID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoX19zdHJlYW0sICh1
bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooX19zdHJlYW0pLT5fSU9f
d3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKCgoKaW5saW5lIGludApwdXRjX3VubG9ja2VkIChp
bnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSkt
Pl9JT193cml0ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93
IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihf
X3N0cmVhbSktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgppbmxpbmUgaW50CnB1dGNo
YXJfdW5sb2NrZWQgKGludCBfX2MpIHRocm93ICgpCnsKICByZXR1cm4gKCgoc3Rkb3V0KS0+X0lP
X3dyaXRlX3B0ciA+PSAoc3Rkb3V0KS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChzdGRv
dXQsICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooc3Rkb3V0KS0+
X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCmlubGluZSBfX3NzaXplX3QKZ2V0bGlu
ZSAoY2hhciAqKl9fbGluZXB0ciwgc2l6ZV90ICpfX24sIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KQp7CiAgcmV0dXJuIF9fZ2V0ZGVsaW0gKF9fbGluZXB0ciwgX19uLCAnXG4nLCBfX3N0cmVhbSk7
Cn0KCgoKCgppbmxpbmUgaW50CmZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgxMCkgIT0gMCk7Cn0KCgppbmxp
bmUgaW50CmZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1
cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDIwKSAhPSAwKTsKfQojIDYzNCAiL3Vzci9pbmNs
dWRlL3N0ZGlvLmgiIDIgMwoKCn0KIyA0MyAidG9vbHMvcWRhdGFzdHJlYW0uY3BwIiAyCiMgMSAi
L3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2N0eXBl
LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI4ICIvdXNyL2lu
Y2x1ZGUvY3R5cGUuaCIgMiAzCgpleHRlcm4gIkMiIHsKIyA0MCAiL3Vzci9pbmNsdWRlL2N0eXBl
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUv
ZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91c3Iv
aW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgMzUgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2VuZGlh
bi5oIiAyIDMKIyA0MSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMwoKCgoKCgplbnVtCnsKICBf
SVN1cHBlciA9ICgoMCkgPCA4ID8gKCgxIDw8ICgwKSkgPDwgOCkgOiAoKDEgPDwgKDApKSA+PiA4
KSksCiAgX0lTbG93ZXIgPSAoKDEpIDwgOCA/ICgoMSA8PCAoMSkpIDw8IDgpIDogKCgxIDw8ICgx
KSkgPj4gOCkpLAogIF9JU2FscGhhID0gKCgyKSA8IDggPyAoKDEgPDwgKDIpKSA8PCA4KSA6ICgo
MSA8PCAoMikpID4+IDgpKSwKICBfSVNkaWdpdCA9ICgoMykgPCA4ID8gKCgxIDw8ICgzKSkgPDwg
OCkgOiAoKDEgPDwgKDMpKSA+PiA4KSksCiAgX0lTeGRpZ2l0ID0gKCg0KSA8IDggPyAoKDEgPDwg
KDQpKSA8PCA4KSA6ICgoMSA8PCAoNCkpID4+IDgpKSwKICBfSVNzcGFjZSA9ICgoNSkgPCA4ID8g
KCgxIDw8ICg1KSkgPDwgOCkgOiAoKDEgPDwgKDUpKSA+PiA4KSksCiAgX0lTcHJpbnQgPSAoKDYp
IDwgOCA/ICgoMSA8PCAoNikpIDw8IDgpIDogKCgxIDw8ICg2KSkgPj4gOCkpLAogIF9JU2dyYXBo
ID0gKCg3KSA8IDggPyAoKDEgPDwgKDcpKSA8PCA4KSA6ICgoMSA8PCAoNykpID4+IDgpKSwKICBf
SVNibGFuayA9ICgoOCkgPCA4ID8gKCgxIDw8ICg4KSkgPDwgOCkgOiAoKDEgPDwgKDgpKSA+PiA4
KSksCiAgX0lTY250cmwgPSAoKDkpIDwgOCA/ICgoMSA8PCAoOSkpIDw8IDgpIDogKCgxIDw8ICg5
KSkgPj4gOCkpLAogIF9JU3B1bmN0ID0gKCgxMCkgPCA4ID8gKCgxIDw8ICgxMCkpIDw8IDgpIDog
KCgxIDw8ICgxMCkpID4+IDgpKSwKICBfSVNhbG51bSA9ICgoMTEpIDwgOCA/ICgoMSA8PCAoMTEp
KSA8PCA4KSA6ICgoMSA8PCAoMTEpKSA+PiA4KSkKfTsKIyA3NSAiL3Vzci9pbmNsdWRlL2N0eXBl
LmgiIDMKZXh0ZXJuIF9fY29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7CmV4dGVy
biBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b2xvd2VyOwpleHRlcm4gX19jb25zdCBfX2lu
dDMyX3QgKl9fY3R5cGVfdG91cHBlcjsKIyA5MSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0
ZXJuIGludCBpc2FsbnVtIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzYWxwaGEgKGludCkg
dGhyb3cgKCk7CmV4dGVybiBpbnQgaXNjbnRybCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBp
c2RpZ2l0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzbG93ZXIgKGludCkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgaXNncmFwaCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3ByaW50IChp
bnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzcHVuY3QgKGludCkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgaXNzcGFjZSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3VwcGVyIChpbnQpIHRocm93
ICgpOwpleHRlcm4gaW50IGlzeGRpZ2l0IChpbnQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgaXNi
bGFuayAoaW50KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgdG9sb3dlciAoaW50IF9fYykgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCB0b3VwcGVyIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIGludCBpc2FzY2lpIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB0b2FzY2lp
IChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBfdG91cHBlciAoaW50KSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBfdG9sb3dlciAoaW50KSB0aHJvdyAoKTsKIyAxNTMgIi91c3IvaW5j
bHVkZS9jdHlwZS5oIiAzCmV4dGVybiBfX2lubGluZSBpbnQKdG9sb3dlciAoaW50IF9fYykgdGhy
b3cgKCkKewogIHJldHVybiBfX2MgPj0gLTEyOCAmJiBfX2MgPCAyNTYgPyBfX2N0eXBlX3RvbG93
ZXJbX19jXSA6IF9fYzsKfQoKZXh0ZXJuIF9faW5saW5lIGludAp0b3VwcGVyIChpbnQgX19jKSB0
aHJvdyAoKQp7CiAgcmV0dXJuIF9fYyA+PSAtMTI4ICYmIF9fYyA8IDI1NiA/IF9fY3R5cGVfdG91
cHBlcltfX2NdIDogX19jOwp9CiMgMjEzICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDIxNCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIg
MwojIDIyOSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIGludCBfX2lzYWxudW1fbCAo
aW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzYWxwaGFfbCAoaW50LCBf
X2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzY250cmxfbCAoaW50LCBfX2xvY2Fs
ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzZGlnaXRfbCAoaW50LCBfX2xvY2FsZV90KSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzbG93ZXJfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBfX2lzZ3JhcGhfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBfX2lzcHJpbnRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBfX2lzcHVuY3RfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lz
c3BhY2VfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzdXBwZXJf
bCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzeGRpZ2l0X2wgKGlu
dCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9faXNibGFua19sIChpbnQsIF9f
bG9jYWxlX3QpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fdG9sb3dlcl9sIChpbnQgX19jLCBf
X2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3RvdXBwZXJfbCAoaW50IF9f
YywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwojIDI3NSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgi
IDMKfQojIDQ0ICJ0b29scy9xZGF0YXN0cmVhbS5jcHAiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgoK
CgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1
ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKZXh0ZXJu
ICJDIiB7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07
CiAgfSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAg
bG9uZyBpbnQgcmVtOwogIH0gbGRpdl90OwoKCgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzdHJ1
Y3QKICB7CiAgICBsb25nIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGxvbmcgaW50IHJlbTsKICB9
IGxsZGl2X3Q7CiMgODAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gc2l6ZV90IF9f
Y3R5cGVfZ2V0X21iX2N1cl9tYXggKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGF0
b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgYXRvaSAoX19j
b25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29u
c3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBs
b25nIGludCBhdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpOwoKCgpleHRlcm4g
ZG91YmxlIHN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IHN0cnRvZiAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIp
IHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoK
CgpleHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsK
CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf
X2Jhc2UpIHRocm93ICgpOwoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDEzMiAiL3Vzci9pbmNs
dWRlL3N0ZGxpYi5oIiAzCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9s
bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2ln
bmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKIyAx
NTcgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgi
IDEgMwojIDE1OCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKZXh0ZXJuIGxvbmcgaW50
IF9fc3RydG9sX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9sIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwg
X19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcg
bG9uZyBpbnQgX19zdHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0
aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBf
X3N0cnRvdWxsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJv
dyAoKTsKCgpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRo
cm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRfbCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3Qg
X19sb2MpIHRocm93ICgpOwojIDE5NiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBk
b3VibGUgX19zdHJ0b2RfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoK
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICogX19y
ZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQg
X19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcg
aW50IF9fc3RydG91bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICogX19yZXN0cmljdCBfX25wdHIs
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhy
b3cgKCk7CgoKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9s
bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCgpf
X2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50
ZXJuYWwgKF9fY29uc3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqIF9fcmVzdHJp
Y3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKIyAyNDIgIi91
c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlCnN0cnRvZCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIp
IHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIs
IDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgIGludCBf
X2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xfaW50ZXJuYWwgKF9fbnB0ciwgX19l
bmRwdHIsIF9fYmFzZSwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgaW50CnN0
cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3Ry
dG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCmV4dGVybiBf
X2lubGluZSBmbG9hdApzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9mX2lu
dGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3Vi
bGUKc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xkX2ludGVybmFsIChf
X25wdHIsIF9fZW5kcHRyLCAwKTsKfQoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBs
b25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewog
IHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7
Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludApz
dHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0
cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKCl9fZXh0
ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9sbCAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg
ICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChf
X25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5s
aW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91bGwgKF9fY29uc3QgY2hhciAqIF9fcmVz
dHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgIGludCBf
X2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBf
X2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBkb3VibGUKYXRvZiAoX19j
b25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9kIChfX25wdHIsIChj
aGFyICoqKSBfX251bGwpOwp9CmV4dGVybiBfX2lubGluZSBpbnQKYXRvaSAoX19jb25zdCBjaGFy
ICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gKGludCkgc3RydG9sIChfX25wdHIsIChjaGFy
ICoqKSBfX251bGwsIDEwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKYXRvbCAoX19jb25z
dCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9sIChfX25wdHIsIChjaGFy
ICoqKSBfX251bGwsIDEwKTsKfQoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcg
bG9uZyBpbnQKYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJu
IHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9CiMgMzMzICIvdXNyL2lu
Y2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgdGhyb3cg
KCk7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsK
CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vz
ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMK
Cgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlw
ZWRlZiBfX3VfaW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1
YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRf
dCBmc2lkX3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBp
bm9fdDsKCgoKCgoKdHlwZWRlZiBfX2lubzY0X3QgaW5vNjRfdDsKCgoKCnR5cGVkZWYgX19kZXZf
dCBkZXZfdDsKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3Qg
bW9kZV90OwoKCgoKdHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191aWRf
dCB1aWRfdDsKIyA5NiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19waWRf
dCBwaWRfdDsKCgoKCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCnR5cGVkZWYgX19zc2l6ZV90IHNz
aXplX3Q7CgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBj
YWRkcl90OwoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CgoKCgoKCgojIDEgIi91c3IvaW5jbHVk
ZS90aW1lLmgiIDEgMwojIDU3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgNTggIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5
cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5
cGVzLmgiIDEgMwojIDY5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgp0eXBlZGVmIF9fdGlt
ZV90IHRpbWVfdDsKIyAxMjQgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIv
dXNyL2xvY2FsL2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRl
Zi5oIiAxIDMKIyAxMjcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYg
dW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9y
dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxNzAgIi91c3IvaW5jbHVkZS9zeXMvdHlw
ZXMuaCIgMwp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJ
X18pKSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJ
X18pKSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJ
X18pKSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJ
X18pKSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9f
bW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJp
YnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQz
Ml90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVk
IGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBl
ZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7
CiMgMTkyICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5k
aWFuLmgiIDEgMwojIDE5MyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgojIDEgIi91
c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVj
dC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1
ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEg
MwojIDI5ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL3NlbGVjdC5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAz
CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVk
ZS9iaXRzL3NpZ3NldC5oIiAzCnR5cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoKCgoKdHlwZWRl
ZiBzdHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6
ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKV07CiAgfSBfX3NpZ3NldF90OwojIDM1ICIvdXNyL2lu
Y2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMK
IyA4MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBsb25n
IGludCB0dl9zZWM7CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CiMgMzkgIi91c3IvaW5jbHVk
ZS9zeXMvc2VsZWN0LmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKc3RydWN0IHRpbWV2YWw7Cgp0
eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwoKCnR5cGVkZWYgX19mZF9zZXQgZmRfc2V0OwojIDc0
ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCmV4dGVybiBpbnQgX19zZWxlY3QgKGludCBf
X25mZHMsIF9fZmRfc2V0ICpfX3JlYWRmZHMsIF9fZmRfc2V0ICpfX3dyaXRlZmRzLCBfX2ZkX3Nl
dCAqX19leGNlcHRmZHMsIHN0cnVjdCB0aW1ldmFsICpfX3RpbWVvdXQpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgc2VsZWN0IChpbnQgX19uZmRzLCBfX2ZkX3NldCAqX19yZWFkZmRzLCBfX2ZkX3Nl
dCAqX193cml0ZWZkcywgX19mZF9zZXQgKl9fZXhjZXB0ZmRzLCBzdHJ1Y3QgdGltZXZhbCAqX190
aW1lb3V0KSB0aHJvdyAoKTsKIyA4NyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwpleHRl
cm4gaW50IHBzZWxlY3QgKGludCBfX25mZHMsIF9fZmRfc2V0ICpfX3JlYWRmZHMsIF9fZmRfc2V0
ICpfX3dyaXRlZmRzLCBfX2ZkX3NldCAqX19leGNlcHRmZHMsIGNvbnN0IHN0cnVjdCB0aW1lc3Bl
YyAqX190aW1lb3V0LCBjb25zdCBfX3NpZ3NldF90ICpfX3NpZ21hc2spIHRocm93ICgpOwoKCgoK
Cn0KIyAxOTYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1
ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMKIyAxOTkgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg
MiAzCgoKCgoKdHlwZWRlZiBfX2Jsa2NudF90IGJsa2NudF90Owp0eXBlZGVmIF9fZnNibGtjbnRf
dCBmc2Jsa2NudF90Owp0eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90OwoKCgoKCgoKdHlw
ZWRlZiBfX2Jsa2NudDY0X3QgYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzYmxrY250NjRfdCBmc2Js
a2NudDY0X3Q7CnR5cGVkZWYgX19mc2ZpbGNudDY0X3QgZnNmaWxjbnQ2NF90OwoKCn0KIyAzNDAg
Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgoKCmV4dGVybiBpbnQzMl90IHJhbmRvbSAo
dm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2Vl
ZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgKiBpbml0c3RhdGUgKHVuc2lnbmVkIGludCBf
X3NlZWQsIHZvaWQgKiBfX3N0YXRlYnVmLCBzaXplX3QgX19zdGF0ZWxlbikgdGhyb3cgKCk7CgoK
CgpleHRlcm4gdm9pZCAqIHNldHN0YXRlICh2b2lkICogX19zdGF0ZWJ1ZikgdGhyb3cgKCk7CgoK
CgoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJf
dCAqcnB0cjsKICAgIGludDMyX3QgKnN0YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCBy
YW5kX2RlZzsKICAgIGludCByYW5kX3NlcDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4
dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1Ziwg
aW50MzJfdCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzcmFu
ZG9tX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIHRo
cm93ICgpOwoKZXh0ZXJuIGludCBpbml0c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwgdm9p
ZCAqIF9fcmVzdHJpY3QgX19zdGF0ZWJ1Ziwgc2l6ZV90IF9fc3RhdGVsZW4sIHN0cnVjdCByYW5k
b21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldHN0
YXRlX3IgKHZvaWQgKiBfX3Jlc3RyaWN0IF9fc3RhdGVidWYsIHN0cnVjdCByYW5kb21fZGF0YSAq
X19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcmFuZCAodm9pZCkg
dGhyb3cgKCk7CgpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgcmFuZF9yICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkgdGhyb3cgKCk7
CgoKCgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gZG91
YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpl
eHRlcm4gbG9uZyBpbnQgbHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBu
cmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGxvbmcgaW50IG1yYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQganJhbmQ0
OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiB2b2lk
IHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkgdGhyb3cgKCk7CmV4dGVybiB1bnNpZ25lZCBz
aG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgdGhyb3cg
KCk7CmV4dGVybiB2b2lkIGxjb25nNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddKSB0
aHJvdyAoKTsKCgpzdHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50
IHhbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgYVszXTsKICAgIHVuc2lnbmVkIHNob3J0IGlu
dCBjOwogICAgdW5zaWduZWQgc2hvcnQgaW50IG9sZF94WzNdOwogICAgaW50IGluaXQ7CiAgfTsK
CgoKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3Qg
X19idWZmZXIsIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4g
aW50IGVyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sIHN0cnVjdCBkcmFu
ZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3Vs
dCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0
YSAqX19yZXN0cmljdCBfX2J1ZmZlciwgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRo
cm93ICgpOwoKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJp
WzNdLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLCBsb25nIGludCAq
X19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IG1yYW5kNDhfciAo
c3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwgbG9uZyBpbnQgKl9fcmVz
dHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2lnbmVk
IHNob3J0IGludCBfX3hzdWJpWzNdLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9f
YnVmZmVyLCBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gaW50IHNyYW5kNDhfciAobG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRh
ICpfX2J1ZmZlcikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9y
dCBpbnQgX19zZWVkMTZ2WzNdLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzdd
LCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CiMgNDc0ICIvdXNyL2lu
Y2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgKiBtYWxsb2MgKHNpemVfdCBfX3NpemUpIHRo
cm93ICgpOwoKZXh0ZXJuIHZvaWQgKiBjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19z
aXplKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqIHJlYWxsb2MgKHZvaWQgKiBfX3B0ciwg
c2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBmcmVlICh2b2lkICogX19wdHIp
IHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqIF9fcHRyKSB0aHJvdyAoKTsK
CgoKIyAxICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvYWxs
b2NhLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5j
bHVkZS9hbGxvY2EuaCIgMiAzCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2kzODYtcGMt
bGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2Fs
bG9jYS5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKCmV4dGVybiB2b2lkICogYWxsb2NhIChzaXpl
X3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCgp9CiMgNDkzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi
IDIgMwoKCgoKZXh0ZXJuIHZvaWQgKiB2YWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25v
cmV0dXJuX18pKTsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9fb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBf
X3N0YXR1cywgdm9pZCAqIF9fYXJnKSwgdm9pZCAqIF9fYXJnKSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqIF9fYXJnKSwg
dm9pZCAqIF9fYXJnKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3Rh
dHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4g
dm9pZCBfRXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3Jl
dHVybl9fKSk7CgoKCgpleHRlcm4gY2hhciAqZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkg
dGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hhciAq
X19uYW1lKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwg
X19jb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19yZXBsYWNlKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IHZvaWQgdW5zZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIGludCBjbGVhcmVudiAodm9pZCkgdGhyb3cgKCk7CiMgNTY2ICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IHN5c3RlbSAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gY2hhciAqY2Fub25pY2FsaXplX2ZpbGVfbmFtZSAoX19jb25zdCBjaGFyICpf
X25hbWUpIHRocm93ICgpOwojIDU5NSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBj
aGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwgY2hhciAqX19y
ZXN0cmljdCBfX3Jlc29sdmVkKSB0aHJvdyAoKTsKCgoKCgoKCnR5cGVkZWYgaW50ICgqX19jb21w
YXJfZm5fdCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CgoKdHlwZWRlZiBfX2Nv
bXBhcl9mbl90IGNvbXBhcmlzb25fZm5fdDsKCgoKCgpleHRlcm4gdm9pZCAqIGJzZWFyY2ggKF9f
Y29uc3Qgdm9pZCAqIF9fa2V5LCBfX2NvbnN0IHZvaWQgKiBfX2Jhc2UsIHNpemVfdCBfX25tZW1i
LCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKCgpleHRlcm4gdm9p
ZCBxc29ydCAodm9pZCAqIF9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsIF9f
Y29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgoKZXh0ZXJuIGludCBhYnMgKGludCBfX3gpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxv
bmcgaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRl
bnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBsbGFicyAobG9uZyBsb25nIGludCBfX3gpIHRo
cm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgpleHRlcm4gZGl2
X3QgZGl2IChpbnQgX19udW1lciwgaW50IF9fZGVub20pIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25n
IGludCBfX2Rlbm9tKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxsZGl2X3QgbGxkaXYgKGxvbmcgbG9uZyBpbnQgX19udW1l
ciwgbG9uZyBsb25nIGludCBfX2Rlbm9tKSB0aHJvdyAoKQoKICAgICBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CiMgNjUxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIg
KmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2Rl
Y3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAq
ZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVj
cHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpn
Y3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7
CgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs
IGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAo
KTsKCmV4dGVybiBjaGFyICpxZmN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0
LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cg
KCk7CgpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp
dCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUg
X192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jl
c3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwg
aW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9f
cmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcWVj
dnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3Qg
X19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwg
c2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91Ymxl
IF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19y
ZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhy
b3cgKCk7CiMgNjk1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBtYmxlbiAo
X19jb25zdCBjaGFyICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWJ0
b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB3Y3RvbWIgKGNoYXIgKl9f
cywgd2NoYXJfdCBfX3djaGFyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAo
d2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ms
IHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9f
cmVzdHJpY3QgX19zLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3Qg
X19uKSB0aHJvdyAoKTsKIyA3MTggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50
IHJwbWF0Y2ggKF9fY29uc3QgY2hhciAqX19yZXNwb25zZSkgdGhyb3cgKCk7CiMgNzI5ICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBnZXRzdWJvcHQgKGNoYXIgKipfX3Jlc3Ry
aWN0IF9fb3B0aW9ucCwgX19jb25zdCBjaGFyICpfX2NvbnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5z
LCBjaGFyICoqX19yZXN0cmljdCBfX3ZhbHVlcCkgdGhyb3cgKCk7CiMgNzM4ICIvdXNyL2luY2x1
ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgc2V0a2V5IChfX2NvbnN0IGNoYXIgKl9fa2V5KSB0
aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ3JhbnRwdCAoaW50IF9fZmQpIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IHVubG9ja3B0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hh
ciAqcHRzbmFtZSAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0c25hbWVf
ciAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgZ2V0cHQgKHZvaWQpIHRocm93ICgpOwoKCgoKCn0KIyA0NSAidG9vbHMvcWRhdGFz
dHJlYW0uY3BwIiAyCiMgMTgxICJ0b29scy9xZGF0YXN0cmVhbS5jcHAiCnN0YXRpYyBpbnQgc3lz
dGVtV29yZFNpemUgPSAwOwpzdGF0aWMgYm9vbCBzeXN0ZW1CaWdFbmRpYW47CgpzdGF0aWMgY29u
c3QgaW50IERlZmF1bHRTdHJlYW1WZXJzaW9uID0gMzsKIyAxOTUgInRvb2xzL3FkYXRhc3RyZWFt
LmNwcCIKUURhdGFTdHJlYW06OlFEYXRhU3RyZWFtKCkKewogICAgaWYgKCBzeXN0ZW1Xb3JkU2l6
ZSA9PSAwICkKICAgICAgICBxU3lzSW5mbyggJnN5c3RlbVdvcmRTaXplLCAmc3lzdGVtQmlnRW5k
aWFuICk7CiAgICBkZXYgPSAwOwogICAgb3duZGV2ID0gRkFMU0U7CiAgICBieXRlb3JkZXIgPSBC
aWdFbmRpYW47CiAgICBwcmludGFibGUgPSBGQUxTRTsKICAgIHZlciA9IERlZmF1bHRTdHJlYW1W
ZXJzaW9uOwogICAgbm9zd2FwID0gc3lzdGVtQmlnRW5kaWFuOwp9CgoKCgoKCgpRRGF0YVN0cmVh
bTo6UURhdGFTdHJlYW0oIFFJT0RldmljZSAqZCApCnsKICAgIGlmICggc3lzdGVtV29yZFNpemUg
PT0gMCApCiAgICAgICAgcVN5c0luZm8oICZzeXN0ZW1Xb3JkU2l6ZSwgJnN5c3RlbUJpZ0VuZGlh
biApOwogICAgZGV2ID0gZDsKICAgIG93bmRldiA9IEZBTFNFOwogICAgYnl0ZW9yZGVyID0gQmln
RW5kaWFuOwogICAgcHJpbnRhYmxlID0gRkFMU0U7CiAgICB2ZXIgPSBEZWZhdWx0U3RyZWFtVmVy
c2lvbjsKICAgIG5vc3dhcCA9IHN5c3RlbUJpZ0VuZGlhbjsKfQojIDI0MiAidG9vbHMvcWRhdGFz
dHJlYW0uY3BwIgpRRGF0YVN0cmVhbTo6UURhdGFTdHJlYW0oIFFCeXRlQXJyYXkgYSwgaW50IG1v
ZGUgKQp7CiAgICBpZiAoIHN5c3RlbVdvcmRTaXplID09IDAgKQogICAgICAgIHFTeXNJbmZvKCAm
c3lzdGVtV29yZFNpemUsICZzeXN0ZW1CaWdFbmRpYW4gKTsKICAgIGRldiA9IG5ldyBRQnVmZmVy
KCBhICk7CiAgICAoKFFCdWZmZXIgKilkZXYpLT5vcGVuKCBtb2RlICk7CiAgICBvd25kZXYgPSBU
UlVFOwogICAgYnl0ZW9yZGVyID0gQmlnRW5kaWFuOwogICAgcHJpbnRhYmxlID0gRkFMU0U7CiAg
ICB2ZXIgPSBEZWZhdWx0U3RyZWFtVmVyc2lvbjsKICAgIG5vc3dhcCA9IHN5c3RlbUJpZ0VuZGlh
bjsKfQojIDI2MiAidG9vbHMvcWRhdGFzdHJlYW0uY3BwIgpRRGF0YVN0cmVhbTo6flFEYXRhU3Ry
ZWFtKCkKewogICAgaWYgKCBvd25kZXYgKQogICAgICAgIGRlbGV0ZSBkZXY7Cn0KIyAyODEgInRv
b2xzL3FkYXRhc3RyZWFtLmNwcCIKdm9pZCBRRGF0YVN0cmVhbTo6c2V0RGV2aWNlKFFJT0Rldmlj
ZSAqZCApCnsKICAgIGlmICggb3duZGV2ICkgewogICAgICAgIGRlbGV0ZSBkZXY7CiAgICAgICAg
b3duZGV2ID0gRkFMU0U7CiAgICB9CiAgICBkZXYgPSBkOwp9CgoKCgoKCnZvaWQgUURhdGFTdHJl
YW06OnVuc2V0RGV2aWNlKCkKewogICAgc2V0RGV2aWNlKCAwICk7Cn0KIyAzNDUgInRvb2xzL3Fk
YXRhc3RyZWFtLmNwcCIKdm9pZCBRRGF0YVN0cmVhbTo6c2V0Qnl0ZU9yZGVyKCBpbnQgYm8gKQp7
CiAgICBieXRlb3JkZXIgPSBibzsKICAgIGlmICggc3lzdGVtQmlnRW5kaWFuICkKICAgICAgICBu
b3N3YXAgPSBieXRlb3JkZXIgPT0gQmlnRW5kaWFuOwogICAgZWxzZQogICAgICAgIG5vc3dhcCA9
IGJ5dGVvcmRlciA9PSBMaXR0bGVFbmRpYW47Cn0KIyA0MDQgInRvb2xzL3FkYXRhc3RyZWFtLmNw
cCIKc3RhdGljIFFfSU5UMzIgcmVhZF9pbnRfYXNjaWkoIFFEYXRhU3RyZWFtICpzICkKewogICAg
cmVnaXN0ZXIgaW50IG4gPSAwOwogICAgY2hhciBidWZbNDBdOwogICAgd2hpbGUgKCBUUlVFICkg
ewogICAgICAgIGJ1ZltuXSA9IHMtPmRldmljZSgpLT5nZXRjaCgpOwogICAgICAgIGlmICggYnVm
W25dID09ICdcbicgfHwgbiA+IDM4ICkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgbisrOwog
ICAgfQogICAgYnVmW25dID0gJ1wwJzsKICAgIHJldHVybiBhdG9sKCBidWYgKTsKfQojIDQyOSAi
dG9vbHMvcWRhdGFzdHJlYW0uY3BwIgpRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9y
Pj4oIFFfSU5UOCAmaSApCnsKICAgIGlmICggIWRldiApIHsgcVdhcm5pbmcoICJRRGF0YVN0cmVh
bTogTm8gZGV2aWNlIiApOyByZXR1cm4gKnRoaXM7IH0KICAgIGlmICggcHJpbnRhYmxlICkgewog
ICAgICAgIGkgPSAoUV9JTlQ4KWRldi0+Z2V0Y2goKTsKICAgICAgICBpZiAoIGkgPT0gJ1xcJyAp
IHsKICAgICAgICAgICAgY2hhciBidWZbNF07CiAgICAgICAgICAgIGRldi0+cmVhZEJsb2NrKCBi
dWYsIDMgKTsKICAgICAgICAgICAgaSA9IChidWZbMl0gJiAweDA3KSsoKGJ1ZlsxXSAmIDB4MDcp
IDw8IDMpKygoYnVmWzBdICYgMHgwNykgPDwgNik7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAg
ICAgICBpID0gKFFfSU5UOClkZXYtPmdldGNoKCk7CiAgICB9CiAgICByZXR1cm4gKnRoaXM7Cn0K
IyA0NTcgInRvb2xzL3FkYXRhc3RyZWFtLmNwcCIKUURhdGFTdHJlYW0gJlFEYXRhU3RyZWFtOjpv
cGVyYXRvcj4+KCBRX0lOVDE2ICZpICkKewogICAgaWYgKCAhZGV2ICkgeyBxV2FybmluZyggIlFE
YXRhU3RyZWFtOiBObyBkZXZpY2UiICk7IHJldHVybiAqdGhpczsgfQogICAgaWYgKCBwcmludGFi
bGUgKSB7CiAgICAgICAgaSA9IChRX0lOVDE2KXJlYWRfaW50X2FzY2lpKCB0aGlzICk7CiAgICB9
IGVsc2UgaWYgKCBub3N3YXAgKSB7CiAgICAgICAgZGV2LT5yZWFkQmxvY2soIChjaGFyICopJmks
IHNpemVvZihRX0lOVDE2KSApOwogICAgfSBlbHNlIHsKICAgICAgICByZWdpc3RlciB1Y2hhciAq
cCA9ICh1Y2hhciAqKSgmaSk7CiAgICAgICAgY2hhciBiWzJdOwogICAgICAgIGRldi0+cmVhZEJs
b2NrKCBiLCAyICk7CiAgICAgICAgKnArKyA9IGJbMV07CiAgICAgICAgKnAgPSBiWzBdOwogICAg
fQogICAgcmV0dXJuICp0aGlzOwp9CiMgNDg2ICJ0b29scy9xZGF0YXN0cmVhbS5jcHAiClFEYXRh
U3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I+PiggUV9JTlQzMiAmaSApCnsKICAgIGlmICgg
IWRldiApIHsgcVdhcm5pbmcoICJRRGF0YVN0cmVhbTogTm8gZGV2aWNlIiApOyByZXR1cm4gKnRo
aXM7IH0KICAgIGlmICggcHJpbnRhYmxlICkgewogICAgICAgIGkgPSByZWFkX2ludF9hc2NpaSgg
dGhpcyApOwogICAgfSBlbHNlIGlmICggbm9zd2FwICkgewogICAgICAgIGRldi0+cmVhZEJsb2Nr
KCAoY2hhciAqKSZpLCBzaXplb2YoUV9JTlQzMikgKTsKICAgIH0gZWxzZSB7CiAgICAgICAgcmVn
aXN0ZXIgdWNoYXIgKnAgPSAodWNoYXIgKikoJmkpOwogICAgICAgIGNoYXIgYls0XTsKICAgICAg
ICBkZXYtPnJlYWRCbG9jayggYiwgNCApOwogICAgICAgICpwKysgPSBiWzNdOwogICAgICAgICpw
KysgPSBiWzJdOwogICAgICAgICpwKysgPSBiWzFdOwogICAgICAgICpwID0gYlswXTsKICAgIH0K
ICAgIHJldHVybiAqdGhpczsKfQojIDUxNiAidG9vbHMvcWRhdGFzdHJlYW0uY3BwIgpRRGF0YVN0
cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9yPj4oIFFfSU5UNjQgJmkgKQp7CiAgICBpZiAoICFk
ZXYgKSB7IHFXYXJuaW5nKCAiUURhdGFTdHJlYW06IE5vIGRldmljZSIgKTsgcmV0dXJuICp0aGlz
OyB9CiAgICBpZiAoIHByaW50YWJsZSApIHsKICAgICAgICBpID0gcmVhZF9pbnRfYXNjaWkoIHRo
aXMgKTsKICAgIH0gZWxzZSBpZiAoIG5vc3dhcCApIHsKICAgICAgICBkZXYtPnJlYWRCbG9jaygg
KGNoYXIgKikmaSwgc2l6ZW9mKFFfSU5UNjQpICk7CiAgICB9IGVsc2UgewogICAgICAgIHJlZ2lz
dGVyIHVjaGFyICpwID0gKHVjaGFyICopKCZpKTsKICAgICAgICBjaGFyIGJbc2l6ZW9mKFFfSU5U
NjQpXTsKICAgICAgICBkZXYtPnJlYWRCbG9jayggYiwgc2l6ZW9mKFFfSU5UNjQpICk7CiAgICAg
ICAgaWYgKCBzaXplb2YoUV9JTlQ2NCkgPT0gOCApIHsKICAgICAgICAgICAgKnArKyA9IGJbN107
CiAgICAgICAgICAgICpwKysgPSBiWzZdOwogICAgICAgICAgICAqcCsrID0gYls1XTsKICAgICAg
ICAgICAgKnArKyA9IGJbNF07CiAgICAgICAgfQogICAgICAgICpwKysgPSBiWzNdOwogICAgICAg
ICpwKysgPSBiWzJdOwogICAgICAgICpwKysgPSBiWzFdOwogICAgICAgICpwID0gYlswXTsKICAg
IH0KICAgIHJldHVybiAqdGhpczsKfQoKc3RhdGljIGRvdWJsZSByZWFkX2RvdWJsZV9hc2NpaSgg
UURhdGFTdHJlYW0gKnMgKQp7CiAgICByZWdpc3RlciBpbnQgbiA9IDA7CiAgICBjaGFyIGJ1Zls4
MF07CiAgICB3aGlsZSAoIFRSVUUgKSB7CiAgICAgICAgYnVmW25dID0gcy0+ZGV2aWNlKCktPmdl
dGNoKCk7CiAgICAgICAgaWYgKCBidWZbbl0gPT0gJ1xuJyB8fCBuID4gNzggKQogICAgICAgICAg
ICBicmVhazsKICAgICAgICBuKys7CiAgICB9CiAgICBidWZbbl0gPSAnXDAnOwogICAgcmV0dXJu
IGF0b2YoIGJ1ZiApOwp9CgoKCgoKCgpRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9y
Pj4oIGZsb2F0ICZmICkKewogICAgaWYgKCAhZGV2ICkgeyBxV2FybmluZyggIlFEYXRhU3RyZWFt
OiBObyBkZXZpY2UiICk7IHJldHVybiAqdGhpczsgfQogICAgaWYgKCBwcmludGFibGUgKSB7CiAg
ICAgICAgZiA9IChmbG9hdClyZWFkX2RvdWJsZV9hc2NpaSggdGhpcyApOwogICAgfSBlbHNlIGlm
ICggbm9zd2FwICkgewogICAgICAgIGRldi0+cmVhZEJsb2NrKCAoY2hhciAqKSZmLCBzaXplb2Yo
ZmxvYXQpICk7CiAgICB9IGVsc2UgewogICAgICAgIHJlZ2lzdGVyIHVjaGFyICpwID0gKHVjaGFy
ICopKCZmKTsKICAgICAgICBjaGFyIGJbNF07CiAgICAgICAgZGV2LT5yZWFkQmxvY2soIGIsIDQg
KTsKICAgICAgICAqcCsrID0gYlszXTsKICAgICAgICAqcCsrID0gYlsyXTsKICAgICAgICAqcCsr
ID0gYlsxXTsKICAgICAgICAqcCA9IGJbMF07CiAgICB9CiAgICByZXR1cm4gKnRoaXM7Cn0KCgoK
CgoKClFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I+PiggZG91YmxlICZmICkKewog
ICAgaWYgKCAhZGV2ICkgeyBxV2FybmluZyggIlFEYXRhU3RyZWFtOiBObyBkZXZpY2UiICk7IHJl
dHVybiAqdGhpczsgfQogICAgaWYgKCBwcmludGFibGUgKSB7CiAgICAgICAgZiA9IHJlYWRfZG91
YmxlX2FzY2lpKCB0aGlzICk7CiAgICB9IGVsc2UgaWYgKCBub3N3YXAgKSB7CiAgICAgICAgZGV2
LT5yZWFkQmxvY2soIChjaGFyICopJmYsIHNpemVvZihkb3VibGUpICk7CiAgICB9IGVsc2Ugewog
ICAgICAgIHJlZ2lzdGVyIHVjaGFyICpwID0gKHVjaGFyICopKCZmKTsKICAgICAgICBjaGFyIGJb
OF07CiAgICAgICAgZGV2LT5yZWFkQmxvY2soIGIsIDggKTsKICAgICAgICAqcCsrID0gYls3XTsK
ICAgICAgICAqcCsrID0gYls2XTsKICAgICAgICAqcCsrID0gYls1XTsKICAgICAgICAqcCsrID0g
Yls0XTsKICAgICAgICAqcCsrID0gYlszXTsKICAgICAgICAqcCsrID0gYlsyXTsKICAgICAgICAq
cCsrID0gYlsxXTsKICAgICAgICAqcCA9IGJbMF07CiAgICB9CiAgICByZXR1cm4gKnRoaXM7Cn0K
IyA2MTggInRvb2xzL3FkYXRhc3RyZWFtLmNwcCIKUURhdGFTdHJlYW0gJlFEYXRhU3RyZWFtOjpv
cGVyYXRvcj4+KCBjaGFyIComcyApCnsKICAgIHVpbnQgbGVuID0gMDsKICAgIHJldHVybiByZWFk
Qnl0ZXMoIHMsIGxlbiApOwp9CiMgNjQxICJ0b29scy9xZGF0YXN0cmVhbS5jcHAiClFEYXRhU3Ry
ZWFtICZRRGF0YVN0cmVhbTo6cmVhZEJ5dGVzKCBjaGFyIComcywgdWludCAmbCApCnsKICAgIGlm
ICggIWRldiApIHsgcVdhcm5pbmcoICJRRGF0YVN0cmVhbTogTm8gZGV2aWNlIiApOyByZXR1cm4g
KnRoaXM7IH0KICAgIFFfVUlOVDMyIGxlbjsKICAgICp0aGlzID4+IGxlbjsKICAgIGwgPSAodWlu
dClsZW47CiAgICBpZiAoIGxlbiA9PSAwIHx8IGVvZigpICkgewogICAgICAgIHMgPSAwOwogICAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0gZWxzZSB7CiAgICAgICAgcyA9IG5ldyBjaGFyW2xlbl07
CiAgICAgICAgKHF0X2NoZWNrX3BvaW50ZXIoKHMpPT0wLCJ0b29scy9xZGF0YXN0cmVhbS5jcHAi
LDY1MikpOwogICAgICAgIGlmICggIXMgKQogICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg
ICAgcmV0dXJuIHJlYWRSYXdCeXRlcyggcywgKHVpbnQpbGVuICk7CiAgICB9Cn0KIyA2NjkgInRv
b2xzL3FkYXRhc3RyZWFtLmNwcCIKUURhdGFTdHJlYW0gJlFEYXRhU3RyZWFtOjpyZWFkUmF3Qnl0
ZXMoIGNoYXIgKnMsIHVpbnQgbGVuICkKewogICAgaWYgKCAhZGV2ICkgeyBxV2FybmluZyggIlFE
YXRhU3RyZWFtOiBObyBkZXZpY2UiICk7IHJldHVybiAqdGhpczsgfQogICAgaWYgKCBwcmludGFi
bGUgKSB7CiAgICAgICAgcmVnaXN0ZXIgUV9JTlQ4ICpwID0gKFFfSU5UOCopczsKICAgICAgICB3
aGlsZSAoIGxlbi0tICkKICAgICAgICAgICAgKnRoaXMgPj4gKnArKzsKICAgIH0gZWxzZSB7CiAg
ICAgICAgZGV2LT5yZWFkQmxvY2soIHMsIGxlbiApOwogICAgfQogICAgcmV0dXJuICp0aGlzOwp9
CiMgNjk4ICJ0b29scy9xZGF0YXN0cmVhbS5jcHAiClFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6
b3BlcmF0b3I8PCggUV9JTlQ4IGkgKQp7CiAgICBpZiAoICFkZXYgKSB7IHFXYXJuaW5nKCAiUURh
dGFTdHJlYW06IE5vIGRldmljZSIgKTsgcmV0dXJuICp0aGlzOyB9CiAgICBpZiAoIHByaW50YWJs
ZSAmJiAoaSA9PSAnXFwnIHx8ICEoX19jdHlwZV9iWyhpbnQpICgoaSkpXSAmICh1bnNpZ25lZCBz
aG9ydCBpbnQpIF9JU3ByaW50KSkgKSB7CiAgICAgICAgY2hhciBidWZbNl07CiAgICAgICAgYnVm
WzBdID0gJ1xcJzsKICAgICAgICBidWZbMV0gPSAnMCcgKyAoKGkgPj4gNikgJiAweDA3KTsKICAg
ICAgICBidWZbMl0gPSAnMCcgKyAoKGkgPj4gMykgJiAweDA3KTsKICAgICAgICBidWZbM10gPSAn
MCcgKyAoaSAmIDB4MDcpOwogICAgICAgIGJ1Zls0XSA9ICdcMCc7CiAgICAgICAgZGV2LT53cml0
ZUJsb2NrKCBidWYsIDQgKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZGV2LT5wdXRjaCggaSApOwog
ICAgfQogICAgcmV0dXJuICp0aGlzOwp9CiMgNzI3ICJ0b29scy9xZGF0YXN0cmVhbS5jcHAiClFE
YXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I8PCggUV9JTlQxNiBpICkKewogICAgaWYg
KCAhZGV2ICkgeyBxV2FybmluZyggIlFEYXRhU3RyZWFtOiBObyBkZXZpY2UiICk7IHJldHVybiAq
dGhpczsgfQogICAgaWYgKCBwcmludGFibGUgKSB7CiAgICAgICAgY2hhciBidWZbMTZdOwogICAg
ICAgIHNwcmludGYoIGJ1ZiwgIiVkXG4iLCBpICk7CiAgICAgICAgZGV2LT53cml0ZUJsb2NrKCBi
dWYsIHFzdHJsZW4oYnVmKSApOwogICAgfSBlbHNlIGlmICggbm9zd2FwICkgewogICAgICAgIGRl
di0+d3JpdGVCbG9jayggKGNoYXIgKikmaSwgc2l6ZW9mKFFfSU5UMTYpICk7CiAgICB9IGVsc2Ug
ewogICAgICAgIHJlZ2lzdGVyIHVjaGFyICpwID0gKHVjaGFyICopKCZpKTsKICAgICAgICBjaGFy
IGJbMl07CiAgICAgICAgYlsxXSA9ICpwKys7CiAgICAgICAgYlswXSA9ICpwOwogICAgICAgIGRl
di0+d3JpdGVCbG9jayggYiwgMiApOwogICAgfQogICAgcmV0dXJuICp0aGlzOwp9CiMgNzU4ICJ0
b29scy9xZGF0YXN0cmVhbS5jcHAiClFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I8
PCggUV9JTlQzMiBpICkKewogICAgaWYgKCAhZGV2ICkgeyBxV2FybmluZyggIlFEYXRhU3RyZWFt
OiBObyBkZXZpY2UiICk7IHJldHVybiAqdGhpczsgfQogICAgaWYgKCBwcmludGFibGUgKSB7CiAg
ICAgICAgY2hhciBidWZbMTZdOwogICAgICAgIHNwcmludGYoIGJ1ZiwgIiVkXG4iLCBpICk7CiAg
ICAgICAgZGV2LT53cml0ZUJsb2NrKCBidWYsIHFzdHJsZW4oYnVmKSApOwogICAgfSBlbHNlIGlm
ICggbm9zd2FwICkgewogICAgICAgIGRldi0+d3JpdGVCbG9jayggKGNoYXIgKikmaSwgc2l6ZW9m
KFFfSU5UMzIpICk7CiAgICB9IGVsc2UgewogICAgICAgIHJlZ2lzdGVyIHVjaGFyICpwID0gKHVj
aGFyICopKCZpKTsKICAgICAgICBjaGFyIGJbNF07CiAgICAgICAgYlszXSA9ICpwKys7CiAgICAg
ICAgYlsyXSA9ICpwKys7CiAgICAgICAgYlsxXSA9ICpwKys7CiAgICAgICAgYlswXSA9ICpwOwog
ICAgICAgIGRldi0+d3JpdGVCbG9jayggYiwgNCApOwogICAgfQogICAgcmV0dXJuICp0aGlzOwp9
CiMgNzkwICJ0b29scy9xZGF0YXN0cmVhbS5jcHAiClFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6
b3BlcmF0b3I8PCggUV9JTlQ2NCBpICkKewogICAgaWYgKCAhZGV2ICkgeyBxV2FybmluZyggIlFE
YXRhU3RyZWFtOiBObyBkZXZpY2UiICk7IHJldHVybiAqdGhpczsgfQogICAgaWYgKCBwcmludGFi
bGUgKSB7CiAgICAgICAgY2hhciBidWZbMjBdOwogICAgICAgIHNwcmludGYoIGJ1ZiwgIiVsZFxu
IiwgaSApOwogICAgICAgIGRldi0+d3JpdGVCbG9jayggYnVmLCBxc3RybGVuKGJ1ZikgKTsKICAg
IH0gZWxzZSBpZiAoIG5vc3dhcCApIHsKICAgICAgICBkZXYtPndyaXRlQmxvY2soIChjaGFyICop
JmksIHNpemVvZihRX0lOVDY0KSApOwogICAgfSBlbHNlIHsKICAgICAgICByZWdpc3RlciB1Y2hh
ciAqcCA9ICh1Y2hhciAqKSgmaSk7CiAgICAgICAgY2hhciBiW3NpemVvZihRX0lOVDY0KV07CiAg
ICAgICAgaWYgKCBzaXplb2YoUV9JTlQ2NCkgPT0gOCApIHsKICAgICAgICAgICAgYls3XSA9ICpw
Kys7CiAgICAgICAgICAgIGJbNl0gPSAqcCsrOwogICAgICAgICAgICBiWzVdID0gKnArKzsKICAg
ICAgICAgICAgYls0XSA9ICpwKys7CiAgICAgICAgfQogICAgICAgIGJbM10gPSAqcCsrOwogICAg
ICAgIGJbMl0gPSAqcCsrOwogICAgICAgIGJbMV0gPSAqcCsrOwogICAgICAgIGJbMF0gPSAqcDsK
ICAgICAgICBkZXYtPndyaXRlQmxvY2soIGIsIHNpemVvZihRX0lOVDY0KSApOwogICAgfQogICAg
cmV0dXJuICp0aGlzOwp9CiMgODM2ICJ0b29scy9xZGF0YXN0cmVhbS5jcHAiClFEYXRhU3RyZWFt
ICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I8PCggZmxvYXQgZiApCnsKICAgIGlmICggIWRldiApIHsg
cVdhcm5pbmcoICJRRGF0YVN0cmVhbTogTm8gZGV2aWNlIiApOyByZXR1cm4gKnRoaXM7IH0KICAg
IGlmICggcHJpbnRhYmxlICkgewogICAgICAgIGNoYXIgYnVmWzMyXTsKICAgICAgICBzcHJpbnRm
KCBidWYsICIlZ1xuIiwgKGRvdWJsZSlmICk7CiAgICAgICAgZGV2LT53cml0ZUJsb2NrKCBidWYs
IHFzdHJsZW4oYnVmKSApOwogICAgfSBlbHNlIHsKICAgICAgICBmbG9hdCBnID0gZjsKICAgICAg
ICBpZiAoIG5vc3dhcCApIHsKICAgICAgICAgICAgZGV2LT53cml0ZUJsb2NrKCAoY2hhciAqKSZn
LCBzaXplb2YoZmxvYXQpICk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVnaXN0ZXIg
dWNoYXIgKnAgPSAodWNoYXIgKikoJmcpOwogICAgICAgICAgICBjaGFyIGJbNF07CiAgICAgICAg
ICAgIGJbM10gPSAqcCsrOwogICAgICAgICAgICBiWzJdID0gKnArKzsKICAgICAgICAgICAgYlsx
XSA9ICpwKys7CiAgICAgICAgICAgIGJbMF0gPSAqcDsKICAgICAgICAgICAgZGV2LT53cml0ZUJs
b2NrKCBiLCA0ICk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuICp0aGlzOwp9CgoKCgoKCgpR
RGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9yPDwoIGRvdWJsZSBmICkKewogICAgaWYg
KCAhZGV2ICkgeyBxV2FybmluZyggIlFEYXRhU3RyZWFtOiBObyBkZXZpY2UiICk7IHJldHVybiAq
dGhpczsgfQogICAgaWYgKCBwcmludGFibGUgKSB7CiAgICAgICAgY2hhciBidWZbMzJdOwogICAg
ICAgIHNwcmludGYoIGJ1ZiwgIiVnXG4iLCBmICk7CiAgICAgICAgZGV2LT53cml0ZUJsb2NrKCBi
dWYsIHFzdHJsZW4oYnVmKSApOwogICAgfSBlbHNlIGlmICggbm9zd2FwICkgewogICAgICAgIGRl
di0+d3JpdGVCbG9jayggKGNoYXIgKikmZiwgc2l6ZW9mKGRvdWJsZSkgKTsKICAgIH0gZWxzZSB7
CiAgICAgICAgcmVnaXN0ZXIgdWNoYXIgKnAgPSAodWNoYXIgKikoJmYpOwogICAgICAgIGNoYXIg
Yls4XTsKICAgICAgICBiWzddID0gKnArKzsKICAgICAgICBiWzZdID0gKnArKzsKICAgICAgICBi
WzVdID0gKnArKzsKICAgICAgICBiWzRdID0gKnArKzsKICAgICAgICBiWzNdID0gKnArKzsKICAg
ICAgICBiWzJdID0gKnArKzsKICAgICAgICBiWzFdID0gKnArKzsKICAgICAgICBiWzBdID0gKnA7
CiAgICAgICAgZGV2LT53cml0ZUJsb2NrKCBiLCA4ICk7CiAgICB9CiAgICByZXR1cm4gKnRoaXM7
Cn0KIyA4OTkgInRvb2xzL3FkYXRhc3RyZWFtLmNwcCIKUURhdGFTdHJlYW0gJlFEYXRhU3RyZWFt
OjpvcGVyYXRvcjw8KCBjb25zdCBjaGFyICpzICkKewogICAgaWYgKCAhcyApIHsKICAgICAgICAq
dGhpcyA8PCAoUV9VSU5UMzIpMDsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiAgICB1aW50
IGxlbiA9IHFzdHJsZW4oIHMgKSArIDE7CiAgICAqdGhpcyA8PCAoUV9VSU5UMzIpbGVuOwogICAg
cmV0dXJuIHdyaXRlUmF3Qnl0ZXMoIHMsIGxlbiApOwp9CiMgOTIxICJ0b29scy9xZGF0YXN0cmVh
bS5jcHAiClFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6d3JpdGVCeXRlcyhjb25zdCBjaGFyICpz
LCB1aW50IGxlbikKewogICAgaWYgKCAhZGV2ICkgeyBxV2FybmluZyggIlFEYXRhU3RyZWFtOiBO
byBkZXZpY2UiICk7IHJldHVybiAqdGhpczsgfQogICAgKnRoaXMgPDwgKFFfVUlOVDMyKWxlbjsK
ICAgIGlmICggbGVuICkKICAgICAgICB3cml0ZVJhd0J5dGVzKCBzLCBsZW4gKTsKICAgIHJldHVy
biAqdGhpczsKfQojIDkzOCAidG9vbHMvcWRhdGFzdHJlYW0uY3BwIgpRRGF0YVN0cmVhbSAmUURh
dGFTdHJlYW06OndyaXRlUmF3Qnl0ZXMoIGNvbnN0IGNoYXIgKnMsIHVpbnQgbGVuICkKewogICAg
aWYgKCAhZGV2ICkgeyBxV2FybmluZyggIlFEYXRhU3RyZWFtOiBObyBkZXZpY2UiICk7IHJldHVy
biAqdGhpczsgfQogICAgaWYgKCBwcmludGFibGUgKSB7CiAgICAgICAgcmVnaXN0ZXIgY2hhciAq
cCA9IChjaGFyICopczsKICAgICAgICB3aGlsZSAoIGxlbi0tICkKICAgICAgICAgICAgKnRoaXMg
PDwgKnArKzsKICAgIH0gZWxzZSB7CiAgICAgICAgZGV2LT53cml0ZUJsb2NrKCBzLCBsZW4gKTsK
ICAgIH0KICAgIHJldHVybiAqdGhpczsKfQo=


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