<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "http://bugs.gentoo.org/bugzilla.dtd">

<bugzilla version="2.22.7"
          urlbase="http://bugs.gentoo.org/"
          maintainer="bugzilla@gentoo.org"
>

    <bug>
          <bug_id>57033</bug_id>
          
          <creation_ts>2004-07-14 08:24 0000</creation_ts>
          <short_desc>internal compiler error: in remember_web_was_spilled, at ra-build.c:2314</short_desc>
          <delta_ts>2004-07-14 09:33:28 0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>Gentoo Linux</product>
          <component>GCC Porting</component>
          <version>unspecified</version>
          <rep_platform>All</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          
          <priority>P2</priority>
          <bug_severity>blocker</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>selecter@spray.se</reporter>
          <assigned_to>gcc-porting@gentoo.org</assigned_to>
          

      

      
          <long_desc isprivate="0">
            <who>selecter@spray.se</who>
            <bug_when>2004-07-14 08:24:51 0000</bug_when>
            <thetext>g++ -I. -I/var/tmp/portage/groff-1.19/work/groff-1.19/src/preproc/pic -I/var/tmp/portage/groff-1.19/work/groff-1.19/src/include -I/var/tmp/portage/groff-1.19/work/groff-1.19/src/include -DHAVE_CONFIG_H -O2 -march=pentium4 -fnew-ra -ftracer -pipe  -c object.cpp
object.cpp: In member function `virtual void box_object::print()&apos;:
object.cpp:787: internal compiler error: in remember_web_was_spilled, at ra-build.c:2314
Please submit a full bug report,
with preprocessed source if appropriate.
See &lt;URL:http://bugs.gentoo.org/&gt; for instructions.
Preprocessed source stored into /var/tmp/portage/groff-1.19/temp/cc9JGx9G.out file, please attach this to your bugreport.
make[2]: *** [object.o] Error 1
make[2]: Leaving directory `/var/tmp/portage/groff-1.19/work/groff-1.19/src/preproc/pic&apos;
make[1]: *** [src/preproc/pic] Error 2
make[1]: Leaving directory `/var/tmp/portage/groff-1.19/work/groff-1.19&apos;
make: *** [all] Error 2

!!! ERROR: sys-apps/groff-1.19 failed.
!!! Function src_compile, Line 80, Exitcode 2
!!! (no error message)
!!! If you need support, post the topmost build error, NOT this status message.

Reproducible: Always
Steps to Reproduce:
1.
2.
3.




Portage 2.0.51_pre13 (default-x86-2004.0, gcc-3.4.1, glibc-2.3.4.20040619-r0,
2.6.7-gentoo-r6 i686 Intel(R) Pentium(R) 4 CPU 1.70GHz)
=================================================================
System uname: 2.6.7-gentoo-r6 i686 Intel(R) Pentium(R) 4 CPU 1.70GHz
Gentoo Base System version 1.4.3.13
Autoconf: sys-devel/autoconf-2.59-r4
Automake: sys-devel/automake-1.8.5-r1
Binutils: sys-devel/binutils-2.14.90.0.8-r1
ACCEPT_KEYWORDS=&quot;x86 ~x86&quot;
AUTOCLEAN=&quot;yes&quot;
CFLAGS=&quot;-O2 -march=pentium4 -fnew-ra -ftracer -pipe&quot;
CHOST=&quot;i686-pc-linux-gnu&quot;
COMPILER=&quot;gcc3&quot;
CONFIG_PROTECT=&quot;/etc /usr/X11R6/lib/X11/xkb /usr/kde/2/share/config
/usr/kde/3.2/share/config /usr/kde/3/share/config /usr/lib/mozilla/defaults/pref
/usr/share/config /var/qmail/control&quot;
CONFIG_PROTECT_MASK=&quot;/etc/gconf /etc/terminfo /etc/env.d&quot;
CXXFLAGS=&quot;-O2 -march=pentium4 -fnew-ra -ftracer -pipe&quot;
DISTDIR=&quot;/usr/portage/distfiles&quot;
FEATURES=&quot;autoaddcvs buildpkg&quot;
GENTOO_MIRRORS=&quot;http://trumpetti.atm.tut.fi/gentoo/
ftp://ftp.join.uni-muenster.de/pub/linux/distributions/gentoo
ftp://ftp6.uni-muenster.de/pub/linux/distributions/gentoo
http://ftp.du.se/pub/os/gentoo&quot;
MAKEOPTS=&quot;-j2&quot;
PKGDIR=&quot;/usr/portage/packages&quot;
PORTAGE_TMPDIR=&quot;/var/tmp&quot;
PORTDIR=&quot;/usr/portage&quot;
PORTDIR_OVERLAY=&quot;&quot;
SYNC=&quot;rsync://rsync.gentoo.org/gentoo-portage&quot;
USE=&quot;X acpi alsa avi crypt cups encode gdbm gif gpm gtk2 hardened imlib jpeg
libg++ libwww mad mikmod mmx motif mozilla mpeg ncurses nls nptl oggvorbis
opengl pam pdflib perl png ppds python qt quicktime readline sdl slang spell sse
ssl svga tcpd threads truetype x86 xml xml2 xmms xv zlib linguas_ru&quot;</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>selecter@spray.se</who>
            <bug_when>2004-07-14 08:27:25 0000</bug_when>
            <thetext>Created an attachment (id=35400)
Preprocessed source
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>lv@gentoo.org</who>
            <bug_when>2004-07-14 09:29:57 0000</bug_when>
            <thetext>-fnew-ra
    Use a graph coloring register allocator. Currently this option is meant only for testing. Users should not specify this option, since it is not yet ready for production use. 

yeah, i think that says it all here. added filter-flags -fnew-ra to the groff ebuild.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>selecter@spray.se</who>
            <bug_when>2004-07-14 09:33:28 0000</bug_when>
            <thetext>Oh... :( Too bad. Maybe I should report it to gcc.gnu.org team then? Because I have found another 2 bugs with -fnew-ra:
http://bugs.gentoo.org/show_bug.cgi?id=57025
http://bugs.gentoo.org/show_bug.cgi?id=57023</thetext>
          </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>35400</attachid>
            <date>2004-07-14 08:27 0000</date>
            <desc>Preprocessed source</desc>
            <filename>cc9JGx9G.out</filename>
            <type>text/plain</type>
            <data encoding="base64">Ly8gL3Vzci9saWJleGVjL2djYy9pNjg2LXBjLWxpbnV4LWdudS8zLjQuMS9jYzFwbHVzIC1xdWll
dCAtSS4gLUkvdmFyL3RtcC9wb3J0YWdlL2dyb2ZmLTEuMTkvd29yay9ncm9mZi0xLjE5L3NyYy9w
cmVwcm9jL3BpYyAtSS92YXIvdG1wL3BvcnRhZ2UvZ3JvZmYtMS4xOS93b3JrL2dyb2ZmLTEuMTkv
c3JjL2luY2x1ZGUgLUkvdmFyL3RtcC9wb3J0YWdlL2dyb2ZmLTEuMTkvd29yay9ncm9mZi0xLjE5
L3NyYy9pbmNsdWRlIC1EX0dOVV9TT1VSQ0UgLURIQVZFX0NPTkZJR19IIG9iamVjdC5jcHAgLWZQ
SUUgLWZzdGFjay1wcm90ZWN0b3IgLWZzdGFjay1wcm90ZWN0b3ItYWxsIC1xdWlldCAtZHVtcGJh
c2Ugb2JqZWN0LmNwcCAtbWFyY2g9cGVudGl1bTQgLWF1eGJhc2Ugb2JqZWN0IC1PMiAtZm5ldy1y
YSAtZnRyYWNlciAtbyAtIC1mcmFuZG9tLXNlZWQ9MAojIDEgIm9iamVjdC5jcHAiCiMgMSAiPGJ1
aWx0LWluPiIKIyAxICI8Y29tbWFuZCBsaW5lPiIKIyAxICJvYmplY3QuY3BwIgojIDIyICJvYmpl
Y3QuY3BwIgojIDEgInBpYy5oIiAxCiMgMjIgInBpYy5oIgojIDEgIi92YXIvdG1wL3BvcnRhZ2Uv
Z3JvZmYtMS4xOS93b3JrL2dyb2ZmLTEuMTkvc3JjL2luY2x1ZGUvbGliLmgiIDEKIyAyMiAiL3Zh
ci90bXAvcG9ydGFnZS9ncm9mZi0xLjE5L3dvcmsvZ3JvZmYtMS4xOS9zcmMvaW5jbHVkZS9saWIu
aCIKIyAxICIvdmFyL3RtcC9wb3J0YWdlL2dyb2ZmLTEuMTkvd29yay9ncm9mZi0xLjE5L3NyYy9p
bmNsdWRlL2NvbmZpZy5oIiAxCiMgMjMgIi92YXIvdG1wL3BvcnRhZ2UvZ3JvZmYtMS4xOS93b3Jr
L2dyb2ZmLTEuMTkvc3JjL2luY2x1ZGUvbGliLmgiIDIKCgpleHRlcm4gIkMiIHsKCgoKICBjb25z
dCBjaGFyICppX3RvX2EoaW50KTsKICBjb25zdCBjaGFyICp1aV90b19hKHVuc2lnbmVkIGludCk7
CiAgY29uc3QgY2hhciAqaWZfdG9fYShpbnQsIGludCk7Cn0KIyA0MiAiL3Zhci90bXAvcG9ydGFn
ZS9ncm9mZi0xLjE5L3dvcmsvZ3JvZmYtMS4xOS9zcmMvaW5jbHVkZS9saWIuaCIKIyAxICIvdmFy
L3RtcC9wb3J0YWdlL2dyb2ZmLTEuMTkvd29yay9ncm9mZi0xLjE5L3NyYy9pbmNsdWRlL2dyb2Zm
LWdldG9wdC5oIiAxCiMgMzAgIi92YXIvdG1wL3BvcnRhZ2UvZ3JvZmYtMS4xOS93b3JrL2dyb2Zm
LTEuMTkvc3JjL2luY2x1ZGUvZ3JvZmYtZ2V0b3B0LmgiCmV4dGVybiAiQyIgewoKCmV4dGVybiBj
aGFyICpvcHRhcmc7CmV4dGVybiBpbnQgb3B0aW5kOwpleHRlcm4gaW50IG9wdGVycjsKZXh0ZXJu
IGludCBvcHRvcHQ7CgpzdHJ1Y3Qgb3B0aW9uCnsKICBjb25zdCBjaGFyICpuYW1lOwogIGludCBo
YXNfYXJnOwogIGludCAqZmxhZzsKICBpbnQgdmFsOwp9OwoKCgoKCmV4dGVybiBpbnQgZ2V0b3B0
KGludCwKICAgIGNoYXIgKmNvbnN0ICosCiAgICBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IGdl
dG9wdF9sb25nKGludCwKICAgICAgICAgY2hhciAqY29uc3QgKiwKICAgICAgICAgY29uc3QgY2hh
ciAqLAogICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICosCiAgICAgICAgIGludCAqKTsKZXh0
ZXJuIGludCBnZXRvcHRfbG9uZ19vbmx5KGludCwKICAgICAgIGNoYXIgKmNvbnN0ICosCiAgICAg
ICBjb25zdCBjaGFyICosCiAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICosCiAgICAgICBpbnQg
Kik7CgoKfQojIDQzICIvdmFyL3RtcC9wb3J0YWdlL2dyb2ZmLTEuMTkvd29yay9ncm9mZi0xLjE5
L3NyYy9pbmNsdWRlL2xpYi5oIiAyCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDEg
MyA0CiMgMjYgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2Zl
YXR1cmVzLmgiIDEgMyA0CiMgMjk1ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMyA0CiMgMSAi
L3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMgNAojIDI5NiAiL3Vzci9pbmNsdWRlL2ZlYXR1
cmVzLmgiIDIgMyA0CiMgMzE4ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMyA0CiMgMSAiL3Vz
ci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMgNAojIDMxOSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVz
LmgiIDIgMyA0CiMgMjcgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzIDQKCgojIDEgIi91c3Iv
bGliL2djYy9pNjg2LXBjLWxpbnV4LWdudS8zLjQuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAoj
IDMwICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
bG9jYWxlLmgiIDEgMyA0CiMgMjcgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAzIDQKZW51
bQp7CiAgX19MQ19DVFlQRSA9IDAsCiAgX19MQ19OVU1FUklDID0gMSwKICBfX0xDX1RJTUUgPSAy
LAogIF9fTENfQ09MTEFURSA9IDMsCiAgX19MQ19NT05FVEFSWSA9IDQsCiAgX19MQ19NRVNTQUdF
UyA9IDUsCiAgX19MQ19BTEwgPSA2LAogIF9fTENfUEFQRVIgPSA3LAogIF9fTENfTkFNRSA9IDgs
CiAgX19MQ19BRERSRVNTID0gOSwKICBfX0xDX1RFTEVQSE9ORSA9IDEwLAogIF9fTENfTUVBU1VS
RU1FTlQgPSAxMSwKICBfX0xDX0lERU5USUZJQ0FUSU9OID0gMTIKfTsKIyAzMSAiL3Vzci9pbmNs
dWRlL2xvY2FsZS5oIiAyIDMgNAoKZXh0ZXJuICJDIiB7CiMgNTIgIi91c3IvaW5jbHVkZS9sb2Nh
bGUuaCIgMyA0CnN0cnVjdCBsY29udgp7CgoKICBjaGFyICpkZWNpbWFsX3BvaW50OwogIGNoYXIg
KnRob3VzYW5kc19zZXA7CgoKCgoKICBjaGFyICpncm91cGluZzsKCgoKCgogIGNoYXIgKmludF9j
dXJyX3N5bWJvbDsKICBjaGFyICpjdXJyZW5jeV9zeW1ib2w7CiAgY2hhciAqbW9uX2RlY2ltYWxf
cG9pbnQ7CiAgY2hhciAqbW9uX3Rob3VzYW5kc19zZXA7CiAgY2hhciAqbW9uX2dyb3VwaW5nOwog
IGNoYXIgKnBvc2l0aXZlX3NpZ247CiAgY2hhciAqbmVnYXRpdmVfc2lnbjsKICBjaGFyIGludF9m
cmFjX2RpZ2l0czsKICBjaGFyIGZyYWNfZGlnaXRzOwoKICBjaGFyIHBfY3NfcHJlY2VkZXM7Cgog
IGNoYXIgcF9zZXBfYnlfc3BhY2U7CgogIGNoYXIgbl9jc19wcmVjZWRlczsKCiAgY2hhciBuX3Nl
cF9ieV9zcGFjZTsKCgoKCgoKICBjaGFyIHBfc2lnbl9wb3NuOwogIGNoYXIgbl9zaWduX3Bvc247
CgoKICBjaGFyIGludF9wX2NzX3ByZWNlZGVzOwoKICBjaGFyIGludF9wX3NlcF9ieV9zcGFjZTsK
CiAgY2hhciBpbnRfbl9jc19wcmVjZWRlczsKCiAgY2hhciBpbnRfbl9zZXBfYnlfc3BhY2U7CgoK
CgoKCiAgY2hhciBpbnRfcF9zaWduX3Bvc247CiAgY2hhciBpbnRfbl9zaWduX3Bvc247CiMgMTE5
ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMgNAp9OwoKCgoKCmV4dGVybiBjaGFyICpzZXRsb2Nh
bGUgKGludCBfX2NhdGVnb3J5LCBfX2NvbnN0IGNoYXIgKl9fbG9jYWxlKSB0aHJvdyAoKTsKCgpl
eHRlcm4gc3RydWN0IGxjb252ICpsb2NhbGVjb252ICh2b2lkKSB0aHJvdyAoKTsKCgojIDE0NiAi
L3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAx
IDMgNAojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgX19s
b2NhbGVfc3RydWN0CnsKCiAgc3RydWN0IGxvY2FsZV9kYXRhICpfX2xvY2FsZXNbMTNdOwoKCiAg
Y29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7CiAgY29uc3QgaW50ICpfX2N0eXBl
X3RvbG93ZXI7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvdXBwZXI7CgoKICBjb25zdCBjaGFyICpf
X25hbWVzWzEzXTsKfSAqX19sb2NhbGVfdDsKIyAxNDcgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIg
MiAzIDQKCnR5cGVkZWYgX19sb2NhbGVfdCBsb2NhbGVfdDsKCgoKCgpleHRlcm4gX19sb2NhbGVf
dCBuZXdsb2NhbGUgKGludCBfX2NhdGVnb3J5X21hc2ssIF9fY29uc3QgY2hhciAqX19sb2NhbGUs
CiAgICAgICAgX19sb2NhbGVfdCBfX2Jhc2UpIHRocm93ICgpOwojIDE4OSAiL3Vzci9pbmNsdWRl
L2xvY2FsZS5oIiAzIDQKZXh0ZXJuIF9fbG9jYWxlX3QgZHVwbG9jYWxlIChfX2xvY2FsZV90IF9f
ZGF0YXNldCkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGZyZWVsb2NhbGUgKF9fbG9jYWxlX3Qg
X19kYXRhc2V0KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIF9fbG9jYWxlX3QgdXNlbG9jYWxlIChf
X2xvY2FsZV90IF9fZGF0YXNldCkgdGhyb3cgKCk7CgoKCgoKCgp9CiMgNDkgIi92YXIvdG1wL3Bv
cnRhZ2UvZ3JvZmYtMS4xOS93b3JrL2dyb2ZmLTEuMTkvc3JjL2luY2x1ZGUvbGliLmgiIDIKCgoK
CmNoYXIgKnN0cnNhdmUoY29uc3QgY2hhciAqcyk7CmludCBpc19wcmltZSh1bnNpZ25lZCk7Cgoj
IDEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAxIDMgNAojIDMwICIvdXNyL2luY2x1ZGUvc3RkaW8u
aCIgMyA0CmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvbGliL2djYy9pNjg2LXBjLWxpbnV4LWdu
dS8zLjQuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDIxMyAiL3Vzci9saWIvZ2NjL2k2ODYt
cGMtbGludXgtZ251LzMuNC4xL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVk
IGludCBzaXplX3Q7CiMgMzUgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMgNAoKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMgNAojIDI4ICIvdXNyL2luY2x1ZGUvYml0cy90eXBl
cy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMgNAojIDI5ICIv
dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMgNAoKCiMgMSAiL3Vzci9saWIvZ2NjL2k2ODYt
cGMtbGludXgtZ251LzMuNC4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzIgIi91c3IvaW5j
bHVkZS9iaXRzL3R5cGVzLmgiIDIgMyA0CgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFy
Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQg
aW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX191X2xvbmc7CgoKdHlwZWRl
ZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWludDhfdDsK
dHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9y
dCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50IF9faW50MzJfdDsKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQg
bG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGxvbmcgaW50IF9fdWludDY0X3Q7CgoKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9u
ZyBsb25nIGludCBfX3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
bG9uZyBpbnQgX191X3F1YWRfdDsKIyAxMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMg
NAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzaXplcy5oIiAxIDMgNAojIDEzMCAiL3Vzci9p
bmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzIDQKCgoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgbG9uZyBpbnQgX19kZXZfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2ln
bmVkIGludCBfX3VpZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgaW50IF9fZ2lk
X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2lub190OwpfX2V4
dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2lubzY0X3Q7Cl9fZXh0
ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19tb2RlX3Q7Cl9fZXh0ZW5zaW9uX18gdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgX19ubGlua190OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBp
bnQgX19vZmZfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19vZmY2NF90
OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgaW50IF9fcGlkX3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRl
ZiBzdHJ1Y3QgeyBpbnQgX192YWxbMl07IH0gX19mc2lkX3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRl
ZiBsb25nIGludCBfX2Nsb2NrX3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25n
IGludCBfX3JsaW1fdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBp
bnQgX19ybGltNjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGludCBfX2lkX3Q7
Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKX19leHRlbnNpb25fXyB0
eXBlZGVmIHVuc2lnbmVkIGludCBfX3VzZWNvbmRzX3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBs
b25nIGludCBfX3N1c2Vjb25kc190OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIGludCBfX2RhZGRy
X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7Cl9fZXh0ZW5zaW9u
X18gdHlwZWRlZiBpbnQgX19rZXlfdDsKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgaW50IF9fY2xv
Y2tpZF90OwoKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB2b2lkICogX190aW1lcl90OwoKCl9fZXh0
ZW5zaW9uX18gdHlwZWRlZiBsb25nIGludCBfX2Jsa3NpemVfdDsKCgoKCl9fZXh0ZW5zaW9uX18g
dHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBs
b25nIGludCBfX2Jsa2NudDY0X3Q7CgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgaW50IF9fZnNibGtjbnRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
bG9uZyBpbnQgX19mc2Jsa2NudDY0X3Q7CgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgaW50IF9fZnNmaWxjbnRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgbG9uZyBpbnQgX19mc2ZpbGNudDY0X3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgaW50IF9f
c3NpemVfdDsKCgoKdHlwZWRlZiBfX29mZjY0X3QgX19sb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3Qg
Kl9fcWFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CgoKX19leHRlbnNpb25fXyB0eXBl
ZGVmIGludCBfX2ludHB0cl90OwoKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBpbnQg
X19zb2NrbGVuX3Q7CiMgMzcgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMgNAoKCgoKCgoKCgp0
eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwoKCgoKCiMgNjIgIi91c3IvaW5jbHVkZS9zdGRp
by5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgX19GSUxFOwojIDcyICIvdXNyL2luY2x1
ZGUvc3RkaW8uaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMyA0CiMgMzIgIi91
c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEg
MyA0CiMgMTQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMyA0CiMgMSAiL3Vzci9saWIvZ2Nj
L2k2ODYtcGMtbGludXgtZ251LzMuNC4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzU0ICIv
dXNyL2xpYi9nY2MvaTY4Ni1wYy1saW51eC1nbnUvMy40LjEvaW5jbHVkZS9zdGRkZWYuaCIgMyA0
CnR5cGVkZWYgdW5zaWduZWQgaW50IHdpbnRfdDsKIyAxNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZp
Zy5oIiAyIDMgNAojIDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMgNAojIDEgIi91c3Iv
aW5jbHVkZS93Y2hhci5oIiAxIDMgNAojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMyA0CiMg
MSAiL3Vzci9saWIvZ2NjL2k2ODYtcGMtbGludXgtZ251LzMuNC4xL2luY2x1ZGUvc3RkZGVmLmgi
IDEgMyA0CiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMgNAoKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy93Y2hhci5oIiAxIDMgNAojIDUxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQK
IyA3NiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNAp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9f
Y291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3QgX193Y2g7CiAgICBjaGFyIF9fd2NoYls0XTsK
ICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRlX3Q7CiMgMjUgIi91c3IvaW5jbHVkZS9fR19jb25maWcu
aCIgMiAzIDQKCnR5cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9zOwogIF9fbWJzdGF0ZV90
IF9fc3RhdGU7Cn0gX0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmY2NF90IF9fcG9z
OwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CiMgNDQgIi91c3IvaW5jbHVk
ZS9fR19jb25maWcuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDEgMyA0CiMgMjgg
Ii91c3IvaW5jbHVkZS9nY29udi5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAz
IDQKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNAojIDEgIi91c3IvbGliL2djYy9pNjg2
LXBjLWxpbnV4LWdudS8zLjQuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDQ5ICIvdXNyL2lu
Y2x1ZGUvd2NoYXIuaCIgMiAzIDQKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMyA0CgoK
IyAxICIvdXNyL2xpYi9nY2MvaTY4Ni1wYy1saW51eC1nbnUvMy40LjEvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzIDQKIyAzMiAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMyA0CgoKCgoKZW51bQp7CiAg
X19HQ09OVl9PSyA9IDAsCiAgX19HQ09OVl9OT0NPTlYsCiAgX19HQ09OVl9OT0RCLAogIF9fR0NP
TlZfTk9NRU0sCgogIF9fR0NPTlZfRU1QVFlfSU5QVVQsCiAgX19HQ09OVl9GVUxMX09VVFBVVCwK
ICBfX0dDT05WX0lMTEVHQUxfSU5QVVQsCiAgX19HQ09OVl9JTkNPTVBMRVRFX0lOUFVULAoKICBf
X0dDT05WX0lMTEVHQUxfREVTQ1JJUFRPUiwKICBfX0dDT05WX0lOVEVSTkFMX0VSUk9SCn07CgoK
CmVudW0KewogIF9fR0NPTlZfSVNfTEFTVCA9IDB4MDAwMSwKICBfX0dDT05WX0lHTk9SRV9FUlJP
UlMgPSAweDAwMDIKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsKc3RydWN0IF9fZ2NvbnZfc3Rl
cF9kYXRhOwpzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0OwpzdHJ1Y3QgX19nY29udl90cmFu
c19kYXRhOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3Rl
cCAqLCBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwKICAgICAgIF9fY29uc3QgdW5zaWduZWQg
Y2hhciAqKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICB1bnNpZ25lZCBjaGFyICoq
LCBzaXplX3QgKiwgaW50LCBpbnQpOwoKCnR5cGVkZWYgd2ludF90ICgqX19nY29udl9idG93Y19m
Y3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosIHVuc2lnbmVkIGNoYXIpOwoKCnR5cGVkZWYgaW50
ICgqX19nY29udl9pbml0X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CnR5cGVkZWYgdm9p
ZCAoKl9fZ2NvbnZfZW5kX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CgoKCnR5cGVkZWYg
aW50ICgqX19nY29udl90cmFuc19mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosCiAgICAgIHN0
cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLCB2b2lkICosCiAgICAgIF9fY29uc3QgdW5zaWduZWQg
Y2hhciAqLAogICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosCiAgICAgIF9fY29uc3QgdW5z
aWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICoqLAogICAgICBzaXplX3QgKik7CgoKdHlwZWRl
ZiBpbnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBfX2NvbnN0IHVuc2ln
bmVkIGNoYXIgKiwKICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgdW5zaWdu
ZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFu
c19xdWVyeV9mY3QpIChfX2NvbnN0IGNoYXIgKiwgX19jb25zdCBjaGFyICoqKiwKICAgICBzaXpl
X3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwg
Y29uc3QgY2hhciAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9p
ZCAqKTsKCnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBf
X3RyYW5zX2ZjdDsKICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9m
Y3Q7CiAgX19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2Rh
dGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19n
Y29udl9zdGVwCnsKICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRs
ZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAq
X19mcm9tX25hbWU7CiAgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBf
X2djb252X2J0b3djX2ZjdCBfX2J0b3djX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9faW5pdF9m
Y3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zy
b207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50
IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07
CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7
CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50
IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGludCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0
YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9fZ2Nv
bnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZv
CnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICBf
X2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGEgW107Cn0gKl9fZ2Nv
bnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMgNAp0eXBlZGVmIHVuaW9u
CnsKICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgc3RydWN0CiAgewogICAgc3RydWN0IF9f
Z2NvbnZfaW5mbyBfX2NkOwogICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YTsKICB9
IF9fY29tYmluZWQ7Cn0gX0dfaWNvbnZfdDsKCnR5cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRy
aWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19h
dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9H
X3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVu
c2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykp
KTsKIyAzMyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMyA0CiMgNTMgIi91c3IvaW5jbHVkZS9s
aWJpby5oIiAzIDQKIyAxICIvdXNyL2xpYi9nY2MvaTY4Ni1wYy1saW51eC1nbnUvMy40LjEvaW5j
bHVkZS9zdGRhcmcuaCIgMSAzIDQKIyA0MyAiL3Vzci9saWIvZ2NjL2k2ODYtcGMtbGludXgtZ251
LzMuNC4xL2luY2x1ZGUvc3RkYXJnLmgiIDMgNAp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9f
Z251Y192YV9saXN0OwojIDU0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzIDQKIyAxNjMgIi91
c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklM
RTsKIyAxNzMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKdHlwZWRlZiB2b2lkIF9JT19sb2Nr
X3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsK
ICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwojIDE5NiAiL3Vzci9pbmNs
dWRlL2xpYmlvLmgiIDMgNAp9OwoKCmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2RlY3Z0
X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJvciwKICBfX2NvZGVjdnRf
bm9jb252Cn07CiMgMjY0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMyA0CnN0cnVjdCBfSU9fRklM
RSB7CiAgaW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19y
ZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwog
IGNoYXIqIF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9f
YnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAg
Y2hhciAqX0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9J
T19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9m
aWxlbm87CgoKCiAgaW50IF9mbGFnczI7CgogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5z
aWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAg
Y2hhciBfc2hvcnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CiMgMzEyICIvdXNyL2lu
Y2x1ZGUvbGliaW8uaCIgMyA0CiAgX19vZmY2NF90IF9vZmZzZXQ7CgoKCgoKICB2b2lkICpfX3Bh
ZDE7CiAgdm9pZCAqX19wYWQyOwoKICBpbnQgX21vZGU7CgogIGNoYXIgX3VudXNlZDJbMTUgKiBz
aXplb2YgKGludCkgLSAyICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoKCgoKc3RydWN0IF9JT19G
SUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRpbl87CmV4
dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4dGVybiBzdHJ1Y3Qg
X0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CiMgMzUxICIvdXNyL2luY2x1ZGUvbGliaW8u
aCIgMyA0CnR5cGVkZWYgX19zc2l6ZV90IF9faW9fcmVhZF9mbiAodm9pZCAqX19jb29raWUsIGNo
YXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpOwoKCgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19p
b193cml0ZV9mbiAodm9pZCAqX19jb29raWUsIF9fY29uc3QgY2hhciAqX19idWYsCiAgICAgc2l6
ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lvX3NlZWtfZm4gKHZvaWQgKl9fY29va2ll
LCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2Zu
ICh2b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9faW9fcmVhZF9mbiBjb29raWVfcmVhZF9m
dW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4gY29va2llX3dyaXRlX2Z1bmN0aW9uX3Q7
CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVrX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19p
b19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25fdDsKCgp0eXBlZGVmIHN0cnVjdAp7CiAg
X19pb19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVfZm4gKndyaXRlOwogIF9faW9fc2Vla19m
biAqc2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsKfSBfSU9fY29va2llX2lvX2Z1bmN0aW9u
c190Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgY29va2llX2lvX2Z1bmN0aW9u
c190OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpleHRlcm4gdm9pZCBfSU9fY29va2llX2lu
aXQgKHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2ZpbGUsIGludCBfX3JlYWRfd3JpdGUsCiAg
ICAgICAgdm9pZCAqX19jb29raWUsIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19mbnMpOwoK
CgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhy
b3cgKCk7CmV4dGVybiBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBp
bnQgX19vdmVyZmxvdyAoX0lPX0ZJTEUgKiwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBf
X3d1bmRlcmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VmbG93
IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJ
TEUgKiwgd2ludF90KSB0aHJvdyAoKTsKIyA0NDEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQK
ZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50
IF9JT19wdXRjIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg
X0lPX2Zlb2YgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9y
IChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQg
KF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxl
IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9f
RklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAq
KSB0aHJvdyAoKTsKIyA0NzEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKZXh0ZXJuIGludCBf
SU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmlj
dCwKICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0
cmljdCwKICAgIF9fZ251Y192YV9saXN0KSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBfSU9f
cGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBfX3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gc2l6ZV90
IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QpIHRocm93ICgpOwoKZXh0ZXJu
IF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkg
dGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9fb2Zm
NjRfdCwgaW50KSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChf
SU9fRklMRSAqKSB0aHJvdyAoKTsKIyA1MjkgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKfQoj
IDczICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQKCgoKCnR5cGVkZWYgX19nbnVjX3ZhX2xp
c3QgdmFfbGlzdDsKIyA4NiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNAoKCnR5cGVkZWYgX0df
ZnBvc190IGZwb3NfdDsKCgoKCgp0eXBlZGVmIF9HX2Zwb3M2NF90IGZwb3M2NF90OwojIDEzOCAi
L3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xp
bS5oIiAxIDMgNAojIDEzOSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0CgoKCmV4dGVybiBz
dHJ1Y3QgX0lPX0ZJTEUgKnN0ZGluOwpleHRlcm4gc3RydWN0IF9JT19GSUxFICpzdGRvdXQ7CmV4
dGVybiBzdHJ1Y3QgX0lPX0ZJTEUgKnN0ZGVycjsKCgoKCgoKCmV4dGVybiBpbnQgcmVtb3ZlIChf
X2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwoKZXh0ZXJuIGludCByZW5hbWUgKF9f
Y29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hhciAqX19uZXcpIHRocm93ICgpOwoKCgoKCgoK
CgpleHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCk7CiMgMTc0ICIvdXNyL2luY2x1ZGUvc3RkaW8u
aCIgMyA0CmV4dGVybiBGSUxFICp0bXBmaWxlNjQgKHZvaWQpOwoKCgpleHRlcm4gY2hhciAqdG1w
bmFtIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICp0bXBuYW1fciAoY2hh
ciAqX19zKSB0aHJvdyAoKTsKIyAxOTYgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJu
IGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29uc3QgY2hhciAqX19wZngp
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgoKCgpleHRl
cm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pOwoKCgoKZXh0ZXJuIGludCBmZmx1c2ggKEZJ
TEUgKl9fc3RyZWFtKTsKCiMgMjIxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBp
bnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSk7CiMgMjMxICIvdXNyL2luY2x1ZGUv
c3RkaW8uaCIgMyA0CmV4dGVybiBpbnQgZmNsb3NlYWxsICh2b2lkKTsKCgoKCgoKCgoKZXh0ZXJu
IEZJTEUgKmZvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpOwoKCgoKZXh0ZXJuIEZJTEUgKmZyZW9w
ZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0pOwojIDI2MiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNAoKCmV4dGVybiBGSUxFICpmb3Bl
bjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19tb2Rlcyk7CmV4dGVybiBGSUxFICpmcmVvcGVuNjQgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19tb2RlcywKICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSk7CgoKCgpleHRlcm4gRklM
RSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29r
aWUsCiAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgX0lPX2Nvb2tp
ZV9pb19mdW5jdGlvbnNfdCBfX2lvX2Z1bmNzKSB0aHJvdyAoKTsKCgpleHRlcm4gRklMRSAqZm1l
bW9wZW4gKHZvaWQgKl9fcywgc2l6ZV90IF9fbGVuLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKm9wZW5fbWVtc3RyZWFtIChjaGFyICoqX19yZXN0cmlj
dCBfX2J1ZmxvYywKICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9jKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBj
aGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZXR2YnVmIChG
SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICBp
bnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVm
ZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAog
ICAgICAgICBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzZXRsaW5lYnVm
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBmcHJpbnRmIChG
SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsIC4uLik7CgoKCgpleHRlcm4gaW50IHByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZm9ybWF0LCAuLi4pOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3Ry
aWN0IF9fcywKICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRo
cm93ICgpOwoKCgoKCmV4dGVybiBpbnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICBfX2dudWNfdmFfbGlzdCBf
X2FyZyk7CgoKCgpleHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hh
ciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAg
ICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNucHJp
bnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CgpleHRlcm4gaW50IHZzbnBy
aW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwKICAgICAgICBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkp
OwoKCgoKCgpleHRlcm4gaW50IHZhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2YsCiAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcp
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIs
IDApKSk7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAg
ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwpleHRlcm4g
aW50IGFzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCgoKCgoKZXh0ZXJuIGludCB2ZHByaW50
ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwKICAgICAgIF9fZ251
Y192YV9saXN0IF9fYXJnKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50
Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IGRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAo
X19wcmludGZfXywgMiwgMykpKTsKCgoKCgoKCgpleHRlcm4gaW50IGZzY2FuZiAoRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSwKICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs
IC4uLik7CgoKCgpleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
b3JtYXQsIC4uLik7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fcywKICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cg
KCk7CgoKCgoKCgoKZXh0ZXJuIGludCB2ZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICBfX2dudWNfdmFfbGlzdCBfX2Fy
ZykKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoK
CgoKCmV4dGVybiBpbnQgdnNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs
IF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf
X3NjYW5mX18sIDEsIDApKSk7CgoKZXh0ZXJuIGludCB2c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19zLAogICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9f
Z251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1h
dF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKCgoKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUg
Kl9fc3RyZWFtKTsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSk7CgoKCgoKZXh0ZXJu
IGludCBnZXRjaGFyICh2b2lkKTsKCiMgNDU0ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4
dGVybiBpbnQgZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pOwpleHRlcm4gaW50IGdldGNo
YXJfdW5sb2NrZWQgKHZvaWQpOwojIDQ2NSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRl
cm4gaW50IGZnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSk7CgoKCgoKCgoKCgoKZXh0ZXJu
IGludCBmcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pOwpleHRlcm4gaW50IHB1dGMgKGlu
dCBfX2MsIEZJTEUgKl9fc3RyZWFtKTsKCgoKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBfX2Mp
OwoKIyA0OTggIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIGludCBmcHV0Y191bmxv
Y2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pOwoKCgoKCgoKZXh0ZXJuIGludCBwdXRjX3Vu
bG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxv
Y2tlZCAoaW50IF9fYyk7CgoKCgoKCmV4dGVybiBpbnQgZ2V0dyAoRklMRSAqX19zdHJlYW0pOwoK
CmV4dGVybiBpbnQgcHV0dyAoaW50IF9fdywgRklMRSAqX19zdHJlYW0pOwoKCgoKCgoKCmV4dGVy
biBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sIEZJTEUgKl9fcmVz
dHJpY3QgX19zdHJlYW0pOwoKCgoKCgpleHRlcm4gY2hhciAqZ2V0cyAoY2hhciAqX19zKTsKCiMg
NTQzICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBjaGFyICpmZ2V0c191bmxvY2tl
ZCAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sCiAgICAgICAgRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSk7CiMgNTU5ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBfX3Nz
aXplX3QgX19nZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAg
c2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgRklMRSAq
X19yZXN0cmljdCBfX3N0cmVhbSk7CmV4dGVybiBfX3NzaXplX3QgZ2V0ZGVsaW0gKGNoYXIgKipf
X3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQg
X19kZWxpbWl0ZXIsCiAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSk7CgoKCgoKCgpl
eHRlcm4gX19zc2l6ZV90IGdldGxpbmUgKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAg
ICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sCiAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry
ZWFtKTsKCgoKCgoKCgpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKTsKCgoKCgpleHRlcm4gaW50IHB1dHMgKF9f
Y29uc3QgY2hhciAqX19zKTsKCgoKCgoKZXh0ZXJuIGludCB1bmdldGMgKGludCBfX2MsIEZJTEUg
Kl9fc3RyZWFtKTsKCgoKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAodm9pZCAqX19yZXN0cmljdCBf
X3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3Qg
X19zdHJlYW0pOwoKCgoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0
cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jl
c3RyaWN0IF9fcyk7CgojIDYyMCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gaW50
IGZwdXRzX3VubG9ja2VkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICBGSUxF
ICpfX3Jlc3RyaWN0IF9fc3RyZWFtKTsKIyA2MzEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzIDQK
ZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6
ZV90IF9fc2l6ZSwKICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVh
bSk7CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2VkIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJp
Y3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jl
c3RyaWN0IF9fc3RyZWFtKTsKCgoKCgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVh
bSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSk7CgoKCgpleHRlcm4gbG9uZyBpbnQgZnRl
bGwgKEZJTEUgKl9fc3RyZWFtKTsKCgoKCmV4dGVybiB2b2lkIHJld2luZCAoRklMRSAqX19zdHJl
YW0pOwoKIyA2NjcgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIGludCBmc2Vla28g
KEZJTEUgKl9fc3RyZWFtLCBfX29mZl90IF9fb2ZmLCBpbnQgX193aGVuY2UpOwoKCgoKZXh0ZXJu
IF9fb2ZmX3QgZnRlbGxvIChGSUxFICpfX3N0cmVhbSk7CiMgNjg2ICIvdXNyL2luY2x1ZGUvc3Rk
aW8uaCIgMyA0CgoKCgoKCmV4dGVybiBpbnQgZmdldHBvcyAoRklMRSAqX19yZXN0cmljdCBfX3N0
cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKTsKCgoKCmV4dGVybiBpbnQgZnNldHBvcyAo
RklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3Bvcyk7CiMgNzA5ICIvdXNyL2luY2x1
ZGUvc3RkaW8uaCIgMyA0CgoKCmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9fc3RyZWFtLCBf
X29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSk7CmV4dGVybiBfX29mZjY0X3QgZnRlbGxvNjQg
KEZJTEUgKl9fc3RyZWFtKTsKZXh0ZXJuIGludCBmZ2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3Qg
X19zdHJlYW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0IF9fcG9zKTsKZXh0ZXJuIGludCBmc2V0cG9z
NjQgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3M2NF90ICpfX3Bvcyk7CgoKCgpleHRlcm4g
dm9pZCBjbGVhcmVyciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZW9m
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlcnJvciAoRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIHZvaWQgcGVycm9yIChfX2NvbnN0IGNoYXIgKl9f
cyk7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3lzX2Vycmxpc3QuaCIgMSAzIDQKIyAy
NyAiL3Vzci9pbmNsdWRlL2JpdHMvc3lzX2Vycmxpc3QuaCIgMyA0CmV4dGVybiBpbnQgc3lzX25l
cnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgpleHRlcm4g
aW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX2Vycmxpc3Rb
XTsKIyA3NDggIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMgNAoKCgoKZXh0ZXJuIGludCBmaWxl
bm8gKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmlsZW5vX3VubG9j
a2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNzY3ICIvdXNyL2luY2x1ZGUvc3RkaW8u
aCIgMyA0CmV4dGVybiBGSUxFICpwb3BlbiAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQsIF9fY29u
c3QgY2hhciAqX19tb2Rlcyk7CgoKCgoKZXh0ZXJuIGludCBwY2xvc2UgKEZJTEUgKl9fc3RyZWFt
KTsKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gY2hhciAqY3VzZXJpZCAoY2hhciAqX19zKTsKCgoKCnN0cnVjdCBvYnN0YWNrOwoKCmV4
dGVybiBpbnQgb2JzdGFja19wcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2Jz
dGFjaywKICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7
CmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBf
X29ic3RhY2ssCiAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAg
ICBfX2dudWNfdmFfbGlzdCBfX2FyZ3MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Zm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CgoKCgoKCgpleHRlcm4gdm9pZCBmbG9ja2Zp
bGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUg
KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklM
RSAqX19zdHJlYW0pIHRocm93ICgpOwojIDgyOCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNAoj
IDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDEgMyA0CiMgMzMgIi91c3IvaW5jbHVkZS9i
aXRzL3N0ZGlvLmgiIDMgNAppbmxpbmUgaW50CnZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2ZtdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCnsKICByZXR1cm4gdmZwcmludGYgKHN0
ZG91dCwgX19mbXQsIF9fYXJnKTsKfQoKCmlubGluZSBpbnQKZ2V0Y2hhciAodm9pZCkKewogIHJl
dHVybiBfSU9fZ2V0YyAoc3RkaW4pOwp9CgoKCgppbmxpbmUgaW50CmdldGNfdW5sb2NrZWQgKEZJ
TEUgKl9fZnApCnsKICByZXR1cm4gKF9fYnVpbHRpbl9leHBlY3QgKChfX2ZwKS0+X0lPX3JlYWRf
cHRyID49IChfX2ZwKS0+X0lPX3JlYWRfZW5kLCAwKSA/IF9fdWZsb3cgKF9fZnApIDogKih1bnNp
Z25lZCBjaGFyICopIChfX2ZwKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKaW5saW5lIGludApnZXRj
aGFyX3VubG9ja2VkICh2b2lkKQp7CiAgcmV0dXJuIChfX2J1aWx0aW5fZXhwZWN0ICgoc3RkaW4p
LT5fSU9fcmVhZF9wdHIgPj0gKHN0ZGluKS0+X0lPX3JlYWRfZW5kLCAwKSA/IF9fdWZsb3cgKHN0
ZGluKSA6ICoodW5zaWduZWQgY2hhciAqKSAoc3RkaW4pLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgoK
CmlubGluZSBpbnQKcHV0Y2hhciAoaW50IF9fYykKewogIHJldHVybiBfSU9fcHV0YyAoX19jLCBz
dGRvdXQpOwp9CgoKCgppbmxpbmUgaW50CmZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpf
X3N0cmVhbSkKewogIHJldHVybiAoX19idWlsdGluX2V4cGVjdCAoKF9fc3RyZWFtKS0+X0lPX3dy
aXRlX3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kLCAwKSA/IF9fb3ZlcmZsb3cgKF9f
c3RyZWFtLCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3Ry
ZWFtKS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCmlubGluZSBpbnQKcHV0Y191
bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pCnsKICByZXR1cm4gKF9fYnVpbHRpbl9l
eHBlY3QgKChfX3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRl
X2VuZCwgMCkgPyBfX292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6
ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7
Cn0KCgppbmxpbmUgaW50CnB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpCnsKICByZXR1cm4gKF9f
YnVpbHRpbl9leHBlY3QgKChzdGRvdXQpLT5fSU9fd3JpdGVfcHRyID49IChzdGRvdXQpLT5fSU9f
d3JpdGVfZW5kLCAwKSA/IF9fb3ZlcmZsb3cgKHN0ZG91dCwgKHVuc2lnbmVkIGNoYXIpIChfX2Mp
KSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzdGRvdXQpLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkp
Owp9CgoKCgoKaW5saW5lIF9fc3NpemVfdApnZXRsaW5lIChjaGFyICoqX19saW5lcHRyLCBzaXpl
X3QgKl9fbiwgRklMRSAqX19zdHJlYW0pCnsKICByZXR1cm4gX19nZXRkZWxpbSAoX19saW5lcHRy
LCBfX24sICdcbicsIF9fc3RyZWFtKTsKfQoKCgoKCmlubGluZSBpbnQKZmVvZl91bmxvY2tlZCAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3Mg
JiAweDEwKSAhPSAwKTsKfQoKCmlubGluZSBpbnQKZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MjApICE9
IDApOwp9CiMgODI5ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQKCgp9CiMgNTcgIi92YXIv
dG1wL3BvcnRhZ2UvZ3JvZmYtMS4xOS93b3JrL2dyb2ZmLTEuMTkvc3JjL2luY2x1ZGUvbGliLmgi
IDIKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMyA0CiMgMjggIi91c3IvaW5jbHVkZS9z
dHJpbmcuaCIgMyA0CmV4dGVybiAiQyIgewoKCgoKIyAxICIvdXNyL2xpYi9nY2MvaTY4Ni1wYy1s
aW51eC1nbnUvMy40LjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzNCAiL3Vzci9pbmNsdWRl
L3N0cmluZy5oIiAyIDMgNAoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19yZXN0cmlj
dCBfX2Rlc3QsCiAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBf
X24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1tb3ZlICh2b2lkICpfX2Rlc3QsIF9fY29u
c3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2
b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2b2lkICpfX3Jl
c3RyaWN0IF9fc3JjLAogICAgICAgIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19u
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2Nv
bnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGlu
dCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKCgoKCmV4dGVybiB2b2lkICpyYXdtZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQg
X19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAq
bWVtcmNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJj
cHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z
cmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmlj
dCBfX2Rlc3QsCiAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3Qg
X19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9f
ZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0
ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBzdHJjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY21w
IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cmNv
bGwgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFy
ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
c3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCiMgMTE3ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgi
IDMgNApleHRlcm4gaW50IHN0cmNvbGxfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo
YXIgKl9fczIsIF9fbG9jYWxlX3QgX19sKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtX2wgKGNoYXIgKl9fZGVzdCwgX19jb25z
dCBjaGFyICpfX3NyYywgc2l6ZV90IF9fbiwKICAgIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAoX19j
b25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19tYWxsb2NfXykpOwojIDE2MCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzIDQKCgpl
eHRlcm4gY2hhciAqc3RyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycmNociAoX19jb25z
dCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCgoKCmV4dGVybiBjaGFyICpzdHJjaHJudWwgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19j
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gc2l6ZV90
IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgc3Ry
c3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJwYnJrIChf
X2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJzdHIgKF9fY29uc3Qg
Y2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cnRvayAoY2hhciAq
X19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKQogICAgIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKl9fc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19z
LAogICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICBjaGFyICoqX19yZXN0
cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hhciAq
X19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAg
ICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFy
ICpzdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19u
ZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKCmV4
dGVybiB2b2lkICptZW1tZW0gKF9fY29uc3Qgdm9pZCAqX19oYXlzdGFjaywgc2l6ZV90IF9faGF5
c3RhY2tsZW4sCiAgICAgICBfX2NvbnN0IHZvaWQgKl9fbmVlZGxlLCBzaXplX3QgX19uZWVkbGVs
ZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiB2
b2lkICpfX21lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICBfX2NvbnN0IHZvaWQg
Kl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwpleHRlcm4gdm9pZCAqbWVt
cGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgX19jb25zdCB2b2lkICpfX3Jl
c3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0
cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RybmxlbiAoX19jb25zdCBjaGFyICpfX3N0cmluZywg
c2l6ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50IF9fZXJybnVtKSB0aHJvdyAoKTsKCiMg
MjY4ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMgNApleHRlcm4gY2hhciAqc3RyZXJyb3JfciAo
aW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoK
CgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBz
aXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXpl
X3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwg
X19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3Ms
IGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBj
aGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBp
bnQgX19sKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lv
bl9fIGV4dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9f
Y29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3Qg
Y2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBpbnQgc3RyY2FzZWNtcF9s
IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgIF9fbG9jYWxlX3Qg
X19sb2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBz
dHJuY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAg
ICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3Ry
aWN0IF9fc3RyaW5ncCwKICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3RydmVyc2NtcCAoX19jb25zdCBjaGFyICpfX3MxLCBf
X2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbCAoaW50IF9fc2lnKSB0aHJvdyAoKTsKCgpleHRl
cm4gY2hhciAqX19zdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHBjcHkgKGNo
YXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAg
ICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3N0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3Qg
X19kZXN0LAogICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRo
cm93ICgpOwpleHRlcm4gY2hhciAqc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAg
ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgpleHRlcm4gY2hhciAqc3RyZnJ5IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKZXh0
ZXJuIHZvaWQgKm1lbWZyb2IgKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoK
CmV4dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAo
KTsKIyA0MDAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMyA0Cn0KIyA1OCAiL3Zhci90bXAvcG9y
dGFnZS9ncm9mZi0xLjE5L3dvcmsvZ3JvZmYtMS4xOS9zcmMvaW5jbHVkZS9saWIuaCIgMgoKIyAx
ICIvdXNyL2luY2x1ZGUvc3RyaW5ncy5oIiAxIDMgNAojIDYwICIvdmFyL3RtcC9wb3J0YWdlL2dy
b2ZmLTEuMTkvd29yay9ncm9mZi0xLjE5L3NyYy9pbmNsdWRlL2xpYi5oIiAyCiMgNzcgIi92YXIv
dG1wL3BvcnRhZ2UvZ3JvZmYtMS4xOS93b3JrL2dyb2ZmLTEuMTkvc3JjL2luY2x1ZGUvbGliLmgi
CmludCBta3NkaXIoY2hhciAqdG1wbCk7CgpGSUxFICp4dG1wZmlsZShjaGFyICoqbmFtZXAgPSAw
LAogICAgICAgIGNvbnN0IGNoYXIgKnBvc3RmaXhfbG9uZyA9IDAsIGNvbnN0IGNoYXIgKnBvc3Rm
aXhfc2hvcnQgPSAwLAogICAgICAgIGludCBkb191bmxpbmsgPSAxKTsKY2hhciAqeHRtcHRlbXBs
YXRlKGNvbnN0IGNoYXIgKnBvc3RmaXhfbG9uZywgY29uc3QgY2hhciAqcG9zdGZpeF9zaG9ydCk7
CiMgOTIgIi92YXIvdG1wL3BvcnRhZ2UvZ3JvZmYtMS4xOS93b3JrL2dyb2ZmLTEuMTkvc3JjL2lu
Y2x1ZGUvbGliLmgiCnNpemVfdCBmaWxlX25hbWVfbWF4KGNvbnN0IGNoYXIgKmZuYW1lKTsKCmlu
dCBpbnRlcnByZXRfbGZfYXJncyhjb25zdCBjaGFyICpwKTsKCmV4dGVybiBjaGFyIGludmFsaWRf
Y2hhcl90YWJsZVtdOwoKaW5saW5lIGludCBpbnZhbGlkX2lucHV0X2NoYXIoaW50IGMpCnsKICBy
ZXR1cm4gYyA+PSAwICYmIGludmFsaWRfY2hhcl90YWJsZVtjXTsKfQojIDEzMiAiL3Zhci90bXAv
cG9ydGFnZS9ncm9mZi0xLjE5L3dvcmsvZ3JvZmYtMS4xOS9zcmMvaW5jbHVkZS9saWIuaCIKIyAx
ICIvdXNyL2xpYi9nY2MvaTY4Ni1wYy1saW51eC1nbnUvMy40LjEvaW5jbHVkZS9saW1pdHMuaCIg
MSAzIDQKIyAxMSAiL3Vzci9saWIvZ2NjL2k2ODYtcGMtbGludXgtZ251LzMuNC4xL2luY2x1ZGUv
bGltaXRzLmgiIDMgNAojIDEgIi91c3IvbGliL2djYy9pNjg2LXBjLWxpbnV4LWdudS8zLjQuMS9p
bmNsdWRlL3N5c2xpbWl0cy5oIiAxIDMgNAoKCgoKCgojIDEgIi91c3IvbGliL2djYy9pNjg2LXBj
LWxpbnV4LWdudS8zLjQuMS9pbmNsdWRlL2xpbWl0cy5oIiAxIDMgNAojIDEyMiAiL3Vzci9saWIv
Z2NjL2k2ODYtcGMtbGludXgtZ251LzMuNC4xL2luY2x1ZGUvbGltaXRzLmgiIDMgNAojIDEgIi91
c3IvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIyAxNDQgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIg
MyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMgNAojIDEzMCAiL3Vz
ci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9s
b2NhbF9saW0uaCIgMSAzIDQKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMg
NAojIDEgIi91c3IvaW5jbHVkZS9saW51eC9saW1pdHMuaCIgMSAzIDQKIyAzNyAiL3Vzci9pbmNs
dWRlL2JpdHMvbG9jYWxfbGltLmgiIDIgMyA0CiMgMTMxICIvdXNyL2luY2x1ZGUvYml0cy9wb3Np
eDFfbGltLmgiIDIgMyA0CiMgMTQ1ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CgoKCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAxIDMgNAojIDE0OSAiL3Vzci9pbmNs
dWRlL2xpbWl0cy5oIiAyIDMgNAoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5o
IiAxIDMgNAojIDM0ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMyA0CiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMyA0CiMgMzUgIi91c3IvaW5jbHVkZS9iaXRz
L3hvcGVuX2xpbS5oIiAyIDMgNAojIDE1MyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAoj
IDEyMyAiL3Vzci9saWIvZ2NjL2k2ODYtcGMtbGludXgtZ251LzMuNC4xL2luY2x1ZGUvbGltaXRz
LmgiIDIgMyA0CiMgOCAiL3Vzci9saWIvZ2NjL2k2ODYtcGMtbGludXgtZ251LzMuNC4xL2luY2x1
ZGUvc3lzbGltaXRzLmgiIDIgMyA0CiMgMTIgIi91c3IvbGliL2djYy9pNjg2LXBjLWxpbnV4LWdu
dS8zLjQuMS9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAojIDEzMyAiL3Zhci90bXAvcG9ydGFnZS9n
cm9mZi0xLjE5L3dvcmsvZ3JvZmYtMS4xOS9zcmMvaW5jbHVkZS9saWIuaCIgMgojIDE2NCAiL3Zh
ci90bXAvcG9ydGFnZS9ncm9mZi0xLjE5L3dvcmsvZ3JvZmYtMS4xOS9zcmMvaW5jbHVkZS9saWIu
aCIKY29uc3QgZG91YmxlIFBJID0gMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjsKIyAyMyAicGljLmgi
IDIKCiMgMSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMSAzIDQKIyAyOSAiL3Vzci9pbmNsdWRlL21h
dGguaCIgMyA0CmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFs
LmgiIDEgMyA0CiMgMzQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMyA0CgojIDEgIi91c3IvaW5j
bHVkZS9iaXRzL2h1Z2VfdmFsZi5oIiAxIDMgNAojIDM2ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAy
IDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsbC5oIiAxIDMgNAojIDM3ICIvdXNy
L2luY2x1ZGUvbWF0aC5oIiAyIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvaW5mLmgiIDEg
MyA0CiMgNDAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMyA0CgoKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy9uYW4uaCIgMSAzIDQKIyA0MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzIDQKCgoKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDEgMyA0CiMgMjkgIi91c3IvaW5jbHVkZS9i
aXRzL21hdGhkZWYuaCIgMyA0CnR5cGVkZWYgbG9uZyBkb3VibGUgZmxvYXRfdDsKCnR5cGVkZWYg
bG9uZyBkb3VibGUgZG91YmxlX3Q7CiMgNDcgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMyA0CiMg
NzAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhj
YWxscy5oIiAxIDMgNAojIDUzICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMyA0CgoK
ZXh0ZXJuIGRvdWJsZSBhY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X2Fjb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhc2luIChkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2FzaW4gKGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKZXh0ZXJuIGRvdWJsZSBhdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX2F0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuMiAoZG91
YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuMiAoZG91
YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBjb3MgKGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fY29zIChkb3VibGUgX194KSB0aHJvdyAo
KTsKCmV4dGVybiBkb3VibGUgc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX3NpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHRhbiAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190YW4gKGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGRvdWJsZSBjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX2Nvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBzaW5oIChk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpbmggKGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX3RhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgc2lu
Y29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gpIHRocm93ICgp
OyBleHRlcm4gdm9pZCBfX3NpbmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJs
ZSAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBhY29zaCAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
CgpleHRlcm4gZG91YmxlIGFzaW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX2FzaW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbmggKGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXRhbmggKGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBleHAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gZG91YmxlIF9fZXhwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91Ymxl
IGZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZG91
YmxlIF9fZnJleHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGRvdWJsZSBsZGV4cCAoZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOyBl
eHRlcm4gZG91YmxlIF9fbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAo
KTsKCgpleHRlcm4gZG91YmxlIGxvZyAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19sb2cgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nMTAgKGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nMTAgKGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKCmV4dGVybiBkb3VibGUgbW9kZiAoZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIp
IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbW9kZiAoZG91YmxlIF9feCwgZG91YmxlICpfX2lw
dHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBleHAxMCAoZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19leHAxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4g
ZG91YmxlIHBvdzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3BvdzEw
IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIGV4cG0xIChkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cG0xIChkb3VibGUgX194KSB0aHJvdyAo
KTsKCgpleHRlcm4gZG91YmxlIGxvZzFwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX2xvZzFwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZ2Ig
KGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nYiAoZG91YmxlIF9feCkg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgZXhwMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19leHAyIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91
YmxlIGxvZzIgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nMiAoZG91
YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBwb3cgKGRvdWJsZSBfX3gs
IGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcG93IChkb3VibGUgX194LCBk
b3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9fc3FydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4
dGVybiBkb3VibGUgX19oeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoK
CgoKCmV4dGVybiBkb3VibGUgY2JydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19jYnJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gZG91YmxlIGNl
aWwgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0
ZXJuIGRvdWJsZSBfX2NlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGZhYnMgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2ZhYnMgKGRvdWJsZSBf
X3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91Ymxl
IGZsb29yIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
IGV4dGVybiBkb3VibGUgX19mbG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZm1vZCAoZG91YmxlIF9feCwgZG91Ymxl
IF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbW9kIChkb3VibGUgX194LCBkb3VibGUg
X195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2luZiAoZG91YmxlIF9fdmFsdWUpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRl
IChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CgoKCmV4dGVybiBpbnQgaXNpbmYgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBkcmVt
IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2RyZW0g
KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHNpZ25p
ZmljYW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpZ25pZmljYW5k
IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIGNvcHlzaWduIChkb3Vi
bGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
IGV4dGVybiBkb3VibGUgX19jb3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgpleHRlcm4gZG91YmxlIG5hbiAo
X19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsgZXh0ZXJuIGRvdWJsZSBfX25hbiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IF9faXNuYW4gKGRvdWJs
ZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVy
biBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX2owIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGoxIChkb3VibGUpIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9fajEgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3Vi
bGUgam4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2puIChpbnQsIGRv
dWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeTAgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX195MCAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5MSAoZG91Ymxl
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kxIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4g
ZG91YmxlIHluIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195biAoaW50
LCBkb3VibGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGVyZiAoZG91YmxlKSB0aHJv
dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZiAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJs
ZSBlcmZjIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXJmYyAoZG91YmxlKSB0
aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBsZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19sZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgdGdh
bW1hIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fdGdhbW1hIChkb3VibGUpIHRo
cm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX19nYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBs
Z2FtbWFfciAoZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fbGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKCmV4
dGVybiBkb3VibGUgcmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19y
aW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG5leHRhZnRlciAoZG91
YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OyBleHRlcm4gZG91YmxlIF9fbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZG91YmxlIG5leHR0b3dh
cmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dHRvd2FyZCAoZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4
dGVybiBkb3VibGUgcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsg
ZXh0ZXJuIGRvdWJsZSBfX3JlbWFpbmRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cg
KCk7CgoKCmV4dGVybiBkb3VibGUgc2NhbGJuIChkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxibiAoZG91YmxlIF9feCwgaW50IF9fbikgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgaWxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gaW50IF9f
aWxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYmxuIChk
b3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGJs
biAoZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBu
ZWFyYnlpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbmVhcmJ5aW50
IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSByb3VuZCAoZG91YmxlIF9f
eCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9f
cm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
CgoKZXh0ZXJuIGRvdWJsZSB0cnVuYyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fdHJ1bmMgKGRvdWJsZSBfX3gpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBkb3VibGUgcmVtcXVv
IChkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX3JlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cg
KCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGludCBfX2xyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg
bG9uZyBpbnQgbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBp
bnQgX19sbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJv
dW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kIChkb3Vi
bGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZCAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZCAoZG91YmxlIF9feCkg
dGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgZmRpbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg
dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mZGltIChkb3VibGUgX194LCBkb3VibGUgX195KSB0
aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZtYXggKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWluIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJv
dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtaW4gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeSAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgp
CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0
IChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCmV4dGVybiBkb3VibGUgZm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUg
X196KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYSAoZG91YmxlIF9feCwgZG91YmxlIF9f
eSwgZG91YmxlIF9feikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxiIChkb3VibGUg
X194LCBkb3VibGUgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxiIChkb3VibGUg
X194LCBkb3VibGUgX19uKSB0aHJvdyAoKTsKIyA3MSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAz
IDQKIyA5MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
bWF0aGNhbGxzLmgiIDEgMyA0CiMgNTMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAz
IDQKCgpleHRlcm4gZmxvYXQgYWNvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX2Fjb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5mIChmbG9h
dCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hc2luZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsKCmV4dGVybiBmbG9hdCBhdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0
IF9fYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbjJmIChmbG9h
dCBfX3ksIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW4yZiAoZmxvYXQg
X195LCBmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBjb3NmIChmbG9hdCBfX3gp
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0
ZXJuIGZsb2F0IHNpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NpbmYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgdGFuZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBmbG9hdCBjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fY29zaGYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgc2luaGYgKGZsb2F0IF9feCkgdGhy
b3cgKCk7IGV4dGVybiBmbG9hdCBfX3NpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJu
IGZsb2F0IHRhbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX190YW5oZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHNpbmNvc2YgKGZsb2F0IF9feCwg
ZmxvYXQgKl9fc2lueCwgZmxvYXQgKl9fY29zeCkgdGhyb3cgKCk7IGV4dGVybiB2b2lkIF9fc2lu
Y29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4KSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGZsb2F0IGFjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fYWNvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5oZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXNpbmhmIChmbG9hdCBfX3gpIHRo
cm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGZsb2F0IF9fYXRhbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGZsb2F0
IGV4cGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cGYgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZyZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhw
b25lbnQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mcmV4cGYgKGZsb2F0IF9feCwgaW50ICpf
X2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbGRleHBmIChmbG9hdCBfX3gsIGlu
dCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGRleHBmIChmbG9hdCBfX3gs
IGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpl
eHRlcm4gZmxvYXQgbG9nMTBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19s
b2cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IG1vZGZmIChmbG9hdCBf
X3gsIGZsb2F0ICpfX2lwdHIpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19tb2RmZiAoZmxvYXQg
X194LCBmbG9hdCAqX19pcHRyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBleHAxMGYgKGZs
b2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cDEwZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsKCmV4dGVybiBmbG9hdCBwb3cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX3BvdzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgZXhw
bTFmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBtMWYgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGZsb2F0IF9fbG9nMXBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9h
dCBsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nYmYgKGZsb2F0
IF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBleHAyZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGZsb2F0IGxvZzJmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cyZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gZmxvYXQgcG93ZiAoZmxvYXQgX194
LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19wb3dmIChmbG9hdCBfX3gsIGZs
b2F0IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19zcXJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gZmxvYXQgaHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX2h5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKCgpleHRl
cm4gZmxvYXQgY2JydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2NicnRm
IChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBmbG9hdCBjZWlsZiAoZmxvYXQg
X194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBf
X2NlaWxmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
CgpleHRlcm4gZmxvYXQgZmFic2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19mYWJzZiAoZmxvYXQgX194KSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGZsb29yZiAoZmxvYXQg
X194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBf
X2Zsb29yZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKZXh0ZXJuIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4
dGVybiBmbG9hdCBfX2Ztb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IF9faXNpbmZmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IGlzaW5m
ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CmV4dGVybiBpbnQgZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBf
X3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19kcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kp
IHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgc2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19zaWduaWZpY2FuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIGZsb2F0IGNvcHlzaWduZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fY29weXNpZ25mIChm
bG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKCgoKCgpleHRlcm4gZmxvYXQgbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmFuZiAoX19jb25z
dCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK
CgpleHRlcm4gaW50IF9faXNuYW5mIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW5mIChmbG9hdCBfX3ZhbHVlKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGowZiAo
ZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19qMGYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0
ZXJuIGZsb2F0IGoxZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19qMWYgKGZsb2F0
KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGpuZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX2puZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MGYgKGZs
b2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9feTBmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVy
biBmbG9hdCB5MWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9feTFmIChmbG9hdCkg
dGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5bmYgKGludCwgZmxvYXQpIHRocm93ICgpOyBleHRlcm4g
ZmxvYXQgX195bmYgKGludCwgZmxvYXQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgZXJm
ZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19lcmZmIChmbG9hdCkgdGhyb3cgKCk7
CmV4dGVybiBmbG9hdCBlcmZjZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19lcmZj
ZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgbGdhbW1hZiAoZmxvYXQpIHRocm93ICgp
OyBleHRlcm4gZmxvYXQgX19sZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBm
bG9hdCB0Z2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3RnYW1tYWYgKGZs
b2F0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX2dhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxv
YXQgbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoK
CmV4dGVybiBmbG9hdCByaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
cmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IG5leHRhZnRlcmYgKGZs
b2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
IGV4dGVybiBmbG9hdCBfX25leHRhZnRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZmxvYXQgbmV4dHRvd2FyZGYg
KGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHR0b3dhcmRmIChmbG9hdCBfX3gsIGxvbmcgZG91
YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4g
ZmxvYXQgcmVtYWluZGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4g
ZmxvYXQgX19yZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4
dGVybiBmbG9hdCBzY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4g
ZmxvYXQgX19zY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IGlsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2diZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBzY2FsYmxuZiAoZmxvYXQgX194LCBs
b25nIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYmxuZiAoZmxvYXQgX194
LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgbmVhcmJ5aW50ZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbmVhcmJ5aW50ZiAoZmxvYXQgX194KSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX3JvdW5kZiAoZmxvYXQgX194
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBmbG9hdCB0
cnVuY2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBl
eHRlcm4gZmxvYXQgX190cnVuY2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGZsb2F0IHJlbXF1b2YgKGZsb2F0IF9feCwgZmxvYXQg
X195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmVtcXVvZiAoZmxvYXQg
X194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBp
bnQgbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scmludGYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmludGYgKGZsb2F0
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50ZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxyb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGludCBfX2xyb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CmV4dGVy
biBsb25nIGxvbmcgaW50IGxscm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBsb25nIGludCBfX2xscm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxv
YXQgZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
ZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgZm1h
eGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZm1heGYg
KGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgZm1pbmYgKGZs
b2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZm1pbmYgKGZsb2F0
IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlmIChm
bG9hdCBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
CgpleHRlcm4gaW50IF9fc2lnbmJpdGYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZmxvYXQgZm1hZiAoZmxvYXQgX194
LCBmbG9hdCBfX3ksIGZsb2F0IF9feikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZtYWYgKGZs
b2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0
IHNjYWxiZiAoZmxvYXQgX194LCBmbG9hdCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19z
Y2FsYmYgKGZsb2F0IF9feCwgZmxvYXQgX19uKSB0aHJvdyAoKTsKIyA5NCAiL3Vzci9pbmNsdWRl
L21hdGguaCIgMiAzIDQKIyAxMTQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMgNAojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMgNAojIDUzICIvdXNyL2luY2x1ZGUvYml0cy9t
YXRoY2FsbHMuaCIgMyA0CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hY29zbCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2lubCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFuMmwgKGxvbmcgZG91Ymxl
IF9feSwgbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgY29z
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zbCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzaW5sIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zaW5sIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmwgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RhbmwgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY29zaGwgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nvc2hsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gdm9pZCBzaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpf
X3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNv
c2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9fc2lueCwgbG9uZyBkb3VibGUgKl9f
Y29zeCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBhY29zaGwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NobCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2luaGwgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5obCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuaGwgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW5obCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmcmV4cGwgKGxvbmcgZG91YmxlIF9feCwg
aW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZnJleHBsIChs
b25nIGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcg
ZG91YmxlIGxkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2xkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBv
bmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2wgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2wgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzEwbCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBtb2RmbCAobG9uZyBkb3VibGUgX194LCBsb25n
IGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbW9kZmwgKGxv
bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4g
bG9uZyBkb3VibGUgZXhwMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19leHAxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9u
ZyBkb3VibGUgcG93MTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19wb3cxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxv
bmcgZG91YmxlIGV4cG0xbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25n
IGRvdWJsZSBsb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX2xvZzFwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBk
b3VibGUgbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2xvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBk
b3VibGUgZXhwMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2V4cDJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJs
ZSBsb2cybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
bG9nMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGxvbmcgZG91
YmxlIHBvd2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fcG93bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp
IHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGh5cG90bCAobG9uZyBkb3VibGUgX194LCBs
b25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19oeXBvdGwgKGxv
bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxv
bmcgZG91YmxlIGNicnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19jYnJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4g
bG9uZyBkb3VibGUgY2VpbGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jZWlsbCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcg
ZG91YmxlIGZhYnNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmFic2wgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJs
ZSBmbG9vcmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbG9vcmwgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBm
bW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19mbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVs
IChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCgoKZXh0ZXJuIGludCBpc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZWwgKGxvbmcg
ZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl
eHRlcm4gbG9uZyBkb3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZHJlbWwgKGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpZ25pZmlj
YW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2ln
bmlmaWNhbmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRv
dWJsZSBjb3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NvcHlz
aWdubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5hbmwgKF9fY29u
c3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX25hbmwgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBfX2lzbmFubCAobG9u
ZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CgpleHRlcm4gaW50IGlzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBqMGwgKGxvbmcgZG91
YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajBsIChsb25nIGRvdWJsZSkgdGhy
b3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBqMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fajFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25n
IGRvdWJsZSBqbmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19qbmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUg
eTBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kwbCAobG9u
ZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTFsIChsb25nIGRvdWJsZSkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kxbCAobG9uZyBkb3VibGUpIHRocm93ICgp
OwpleHRlcm4gbG9uZyBkb3VibGUgeW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9feW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGVyZmwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fZXJmbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3Vi
bGUgZXJmY2wgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXJm
Y2wgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWwgKGxv
bmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbCAobG9uZyBk
b3VibGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgdGdhbW1hbCAobG9uZyBk
b3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190Z2FtbWFsIChsb25nIGRvdWJs
ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGdhbW1hbCAobG9uZyBkb3VibGUp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19nYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWxfciAobG9uZyBkb3VibGUsIGlu
dCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWxfciAo
bG9uZyBkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gbG9u
ZyBkb3VibGUgcmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX3JpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRv
dWJsZSBuZXh0YWZ0ZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0
YWZ0ZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHR0b3dhcmRsIChs
b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0dG93YXJkbCAobG9uZyBkb3Vi
bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJlbWFpbmRlcmwgKGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWluZGVy
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4g
bG9uZyBkb3VibGUgc2NhbGJubCAobG9uZyBkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJubCAobG9uZyBkb3VibGUgX194LCBpbnQgX19uKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBpbnQgX19pbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gbG9uZyBkb3VibGUgc2NhbGJsbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJsbmwgKGxvbmcgZG91YmxlIF9feCwg
bG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5lYXJieWludGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25lYXJieWlu
dGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSByb3Vu
ZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19yb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgdHJ1bmNs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fdHJ1bmNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSByZW1xdW9s
IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX3JlbXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi
bGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnRsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBscm91bmRsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scm91bmRsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kbCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kbCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZkaW1sIChs
b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX2ZkaW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtYXhsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl
IF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtYXhsIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtaW5s
IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX2ZtaW5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5bCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhy
b3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3Np
Z25iaXRsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtYWwgKGxvbmcgZG91YmxlIF9f
eCwgbG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3opIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19mbWFsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgbG9uZyBk
b3VibGUgX196KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2FsYmwgKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fc2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbikgdGhyb3cgKCk7CiMg
MTE1ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMgNAojIDEzMCAiL3Vzci9pbmNsdWRlL21hdGgu
aCIgMyA0CmV4dGVybiBpbnQgc2lnbmdhbTsKIyAxNzEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMg
NAplbnVtCiAgewogICAgRlBfTkFOLAoKICAgIEZQX0lORklOSVRFLAoKICAgIEZQX1pFUk8sCgog
ICAgRlBfU1VCTk9STUFMLAoKICAgIEZQX05PUk1BTAoKICB9OwojIDI1NyAiL3Vzci9pbmNsdWRl
L21hdGguaCIgMyA0CnR5cGVkZWYgZW51bQp7CiAgX0lFRUVfID0gLTEsCiAgX1NWSURfLAogIF9Y
T1BFTl8sCiAgX1BPU0lYXywKICBfSVNPQ18KfSBfTElCX1ZFUlNJT05fVFlQRTsKCgoKCmV4dGVy
biBfTElCX1ZFUlNJT05fVFlQRSBfTElCX1ZFUlNJT047CiMgMjgwICIvdXNyL2luY2x1ZGUvbWF0
aC5oIiAzIDQKc3RydWN0IF9fZXhjZXB0aW9uCgoKCiAgewogICAgaW50IHR5cGU7CiAgICBjaGFy
ICpuYW1lOwogICAgZG91YmxlIGFyZzE7CiAgICBkb3VibGUgYXJnMjsKICAgIGRvdWJsZSByZXR2
YWw7CiAgfTsKCgpleHRlcm4gaW50IG1hdGhlcnIgKHN0cnVjdCBfX2V4Y2VwdGlvbiAqX19leGMp
IHRocm93ICgpOwojIDM4MiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMyA0CiMgMSAiL3Vzci9pbmNs
dWRlL2JpdHMvbWF0aGlubGluZS5oIiAxIDMgNAojIDEyNyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0
aGlubGluZS5oIiAzIDQKX19pbmxpbmUgaW50Cl9fc2lnbmJpdGYgKGZsb2F0IF9feCkgdGhyb3cg
KCkKewogIF9fZXh0ZW5zaW9uX18gdW5pb24geyBmbG9hdCBfX2Y7IGludCBfX2k7IH0gX191ID0g
eyBfX2Y6IF9feCB9OwogIHJldHVybiBfX3UuX19pIDwgMDsKfQpfX2lubGluZSBpbnQKX19zaWdu
Yml0IChkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgX19leHRlbnNpb25fXyB1bmlvbiB7IGRvdWJs
ZSBfX2Q7IGludCBfX2lbMl07IH0gX191ID0geyBfX2Q6IF9feCB9OwogIHJldHVybiBfX3UuX19p
WzFdIDwgMDsKfQpfX2lubGluZSBpbnQKX19zaWduYml0bCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKQp7CiAgX19leHRlbnNpb25fXyB1bmlvbiB7IGxvbmcgZG91YmxlIF9fbDsgaW50IF9faVsz
XTsgfSBfX3UgPSB7IF9fbDogX194IH07CiAgcmV0dXJuIChfX3UuX19pWzJdICYgMHg4MDAwKSAh
PSAwOwp9CiMgMjkxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMgNApfX2lubGlu
ZSBkb3VibGUgX19zZ24gKGRvdWJsZSkgdGhyb3cgKCk7IF9faW5saW5lIGRvdWJsZSBfX3NnbiAo
ZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX194ID09IDAuMCA/IDAuMCA6IChfX3ggPiAw
LjAgPyAxLjAgOiAtMS4wKTsgfSBfX2lubGluZSBmbG9hdCBfX3NnbmYgKGZsb2F0KSB0aHJvdyAo
KTsgX19pbmxpbmUgZmxvYXQgX19zZ25mIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9f
eCA9PSAwLjAgPyAwLjAgOiAoX194ID4gMC4wID8gMS4wIDogLTEuMCk7IH0gX19pbmxpbmUgbG9u
ZyBkb3VibGUgX19zZ25sIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IF9faW5saW5lIGxvbmcgZG91
YmxlIF9fc2dubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJldHVybiBfX3ggPT0gMC4w
ID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjApOyB9CiMgNDMzICIvdXNyL2luY2x1ZGUv
Yml0cy9tYXRoaW5saW5lLmgiIDMgNApfX2lubGluZSBsb25nIGRvdWJsZSBfX2F0YW4ybCAobG9u
ZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9fYnVpbHRp
bl9hdGFuMmwgKF9feSwgX194KTsgfQojIDQ3MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGlu
ZS5oIiAzIDQKX19pbmxpbmUgZG91YmxlIGZhYnMgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0
dXJuIF9fYnVpbHRpbl9mYWJzIChfX3gpOyB9CgpfX2lubGluZSBmbG9hdCBmYWJzZiAoZmxvYXQg
X194KSB0aHJvdyAoKSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YgKF9feCk7IH0KX19pbmxpbmUg
bG9uZyBkb3VibGUgZmFic2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX19i
dWlsdGluX2ZhYnNsIChfX3gpOyB9CgpfX2lubGluZSBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbCAoX194KTsgfQoj
IDUwNiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzIDQKX19pbmxpbmUgbG9uZyBk
b3VibGUgX19zZ24xbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBfX2lubGluZSBsb25nIGRvdWJs
ZSBfX3NnbjFsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgX19leHRlbnNpb25fXyB1bmlv
biB7IGxvbmcgZG91YmxlIF9feGxkOyB1bnNpZ25lZCBpbnQgX194aVszXTsgfSBfX24gPSB7IF9f
eGxkOiBfX3ggfTsgX19uLl9feGlbMl0gPSAoX19uLl9feGlbMl0gJiAweDgwMDApIHwgMHgzZmZm
OyBfX24uX194aVsxXSA9IDB4ODAwMDAwMDA7IF9fbi5fX3hpWzBdID0gMDsgcmV0dXJuIF9fbi5f
X3hsZDsgfQojIDUzMCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzIDQKX19pbmxp
bmUgZG91YmxlIGZsb29yIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91
YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRp
bGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cg
JTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBf
X2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192
b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBf
X3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0g
X19pbmxpbmUgZmxvYXQgZmxvb3JmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9u
ZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192
b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZu
c3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0
MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2Fz
bSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9f
YXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1
ZTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBmbG9vcmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNo
b3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2Fz
bSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3
ICYgMHhmM2ZmKSB8IDB4MDQwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0i
IChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUp
IDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3
KSk7IHJldHVybiBfX3ZhbHVlOyB9CiMgNTQxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5l
LmgiIDMgNApfX2lubGluZSBkb3VibGUgY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdp
c3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBf
X2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0
aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2Zm
KSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1w
KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChf
X3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVy
biBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGNlaWxmIChmbG9hdCBfX3gpIHRocm93ICgpIHsg
cmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBp
bnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192
b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4
ZjNmZikgfCAweDA4MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19j
d3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIw
IiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyBy
ZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBjZWlsbCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUg
dW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9f
Y3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3
dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cg
JTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10
IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDog
OiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA2NTMgIi91c3IvaW5jbHVkZS9iaXRz
L21hdGhpbmxpbmUuaCIgMyA0Cl9faW5saW5lIGxvbmcgaW50CmxyaW50ZiAoZmxvYXQgX194KSB0
aHJvdyAoKQp7CiAgbG9uZyBpbnQgX19scmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJm
aXN0cGwgJTAiIDogIj1tIiAoX19scmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJu
IF9fbHJpbnRyZXM7Cn0KX19pbmxpbmUgbG9uZyBpbnQKbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93
ICgpCnsKICBsb25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3Rw
bCAlMCIgOiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19s
cmludHJlczsKfQpfX2lubGluZSBsb25nIGludApscmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCkKewogIGxvbmcgaW50IF9fbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlz
dHBsICUwIiA6ICI9bSIgKF9fbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJldHVybiBf
X2xyaW50cmVzOwp9CiMgNjc2ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMgNApf
X2lubGluZSBsb25nIGxvbmcgaW50CmxscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCkKewogIGxv
bmcgbG9uZyBpbnQgX19sbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsbCAl
MCIgOiAiPW0iIChfX2xscmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbGxy
aW50cmVzOwp9Cl9faW5saW5lIGxvbmcgbG9uZyBpbnQKbGxyaW50IChkb3VibGUgX194KSB0aHJv
dyAoKQp7CiAgbG9uZyBsb25nIGludCBfX2xscmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18g
KCJmaXN0cGxsICUwIiA6ICI9bSIgKF9fbGxyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyBy
ZXR1cm4gX19sbHJpbnRyZXM7Cn0KX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJpbnRsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpCnsKICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVzOyBfX2Fz
bV9fIF9fdm9sYXRpbGVfXyAoImZpc3RwbGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMpIDogInQi
IChfX3gpIDogInN0Iik7IHJldHVybiBfX2xscmludHJlczsKfQojIDcxMyAiL3Vzci9pbmNsdWRl
L2JpdHMvbWF0aGlubGluZS5oIiAzIDQKX19pbmxpbmUgaW50Cl9fZmluaXRlIChkb3VibGUgX194
KSB0aHJvdyAoKQp7CiAgcmV0dXJuIChfX2V4dGVuc2lvbl9fCiAgICgoKCgodW5pb24geyBkb3Vi
bGUgX19kOyBpbnQgX19pWzJdOyB9KSB7X19kOiBfX3h9KS5fX2lbMV0KICAgICAgfCAweDgwMGZm
ZmZmdSkgKyAxKSA+PiAzMSkpOwp9CiMgMzgzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMgNAoj
IDQzOCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMyA0Cn0KIyAyNSAicGljLmgiIDIKIyAxICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDEgMyA0CiMgMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0
CiMgMSAiL3Vzci9saWIvZ2NjL2k2ODYtcGMtbGludXgtZ251LzMuNC4xL2luY2x1ZGUvc3RkZGVm
LmgiIDEgMyA0CiMgMzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKCmV4dGVybiAiQyIg
ewoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRmbGFncy5oIiAxIDMgNAojIDQzICIv
dXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0
YXR1cy5oIiAxIDMgNAojIDYzICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgiIDMgNAoj
IDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzIDQKIyAzNyAiL3Vzci9pbmNsdWRlL2VuZGlh
bi5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzIDQKIyAzOCAiL3Vz
ci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMgNAojIDY0ICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3Rh
dHVzLmgiIDIgMyA0Cgp1bmlvbiB3YWl0CiAgewogICAgaW50IHdfc3RhdHVzOwogICAgc3RydWN0
CiAgICAgIHsKCiB1bnNpZ25lZCBpbnQgX193X3Rlcm1zaWc6NzsKIHVuc2lnbmVkIGludCBfX3df
Y29yZWR1bXA6MTsKIHVuc2lnbmVkIGludCBfX3dfcmV0Y29kZTo4OwogdW5zaWduZWQgaW50OjE2
OwoKCgoKCgoKICAgICAgfSBfX3dhaXRfdGVybWluYXRlZDsKICAgIHN0cnVjdAogICAgICB7Cgog
dW5zaWduZWQgaW50IF9fd19zdG9wdmFsOjg7CiB1bnNpZ25lZCBpbnQgX193X3N0b3BzaWc6ODsK
IHVuc2lnbmVkIGludDoxNjsKCgoKCgoKICAgICAgfSBfX3dhaXRfc3RvcHBlZDsKICB9OwojIDQ0
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMyA0CiMgOTMgIi91c3IvaW5jbHVkZS9zdGRsaWIu
aCIgMyA0CgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAg
fSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9u
ZyBpbnQgcmVtOwogIH0gbGRpdl90OwoKCgoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVj
dAogIHsKICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0g
bGxkaXZfdDsKCgojIDEzNyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIHNpemVf
dCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3Vi
bGUgYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19j
b25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK
CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hh
ciAqX19ucHRyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoK
CmV4dGVybiBkb3VibGUgc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
ZmxvYXQgc3RydG9mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHN0
cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0
cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKX19leHRlbnNp
b25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2Up
IHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBz
dHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKCl9f
ZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu
dCBfX2Jhc2UpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBs
b25nIGludCBzdHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCiMg
MjI5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gbG9uZyBpbnQgc3RydG9sX2wg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7Cgpl
eHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19ucHRyLAogICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgIGlu
dCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRl
cm4gbG9uZyBsb25nIGludCBzdHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsCiAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgIF9fbG9j
YWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9u
ZyBsb25nIGludCBzdHJ0b3VsbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICBpbnQgX19iYXNlLCBfX2xv
Y2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2RfbCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgc3RydG9m
X2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBsb25n
IGRvdWJsZSBzdHJ0b2xkX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBfX2xvY2FsZV90IF9fbG9j
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9pbnRlcm5hbCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0
ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRl
cm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91
YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICBpbnQgX19n
cm91cCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwKICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25f
XwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBj
aGFyICoKICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICB0aHJv
dyAoKTsKCgoKCgoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlCnN0cnRvZCAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgp
CnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4
dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogaW50IF9fYmFzZSkgdGhyb3cgKCkK
ewogIHJldHVybiBfX3N0cnRvbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAw
KTsKfQpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBpbnQKc3RydG91bCAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgaW50
IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fbnB0ciwg
X19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBmbG9hdApzdHJ0b2Yg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9mX2ludGVybmFsIChfX25wdHIsIF9fZW5k
cHRyLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUKc3RydG9sZCAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93
ICgpCnsKICByZXR1cm4gX19zdHJ0b2xkX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsK
fQoKCgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludApzdHJ0b3Eg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLAogaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwg
KF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19p
bmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludApzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICBpbnQgX19iYXNlKSB0
aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIs
IF9fYmFzZSwgMCk7Cn0KCgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9u
ZyBpbnQKc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsCiAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0
cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNp
b25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludApzdHJ0b3VsbCAoX19j
b25zdCBjaGFyICogX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LAogICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwg
KF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBkb3Vi
bGUKYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9k
IChfX25wdHIsIChjaGFyICoqKSBfX251bGwpOwp9CmV4dGVybiBfX2lubGluZSBpbnQKYXRvaSAo
X19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gKGludCkgc3RydG9sIChf
X25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQK
YXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9sIChf
X25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQoKCgoKX19leHRlbnNpb25fXyBleHRlcm4g
X19pbmxpbmUgbG9uZyBsb25nIGludAphdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93
ICgpCnsKICByZXR1cm4gc3RydG9sbCAoX19ucHRyLCAoY2hhciAqKikgX19udWxsLCAxMCk7Cn0K
CiMgNDA4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gY2hhciAqbDY0YSAobG9u
ZyBpbnQgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFy
ICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKIyAxICIvdXNy
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMyA0CmV4dGVybiAiQyIgewoKCgoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0eXBlZGVm
IF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYgX191X2xv
bmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IHVf
cXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgoKCnR5cGVkZWYgX19sb2ZmX3QgbG9m
Zl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5cGVkZWYgX19pbm82NF90IGlu
bzY0X3Q7CgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lk
X3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYgX19ubGlua190IG5s
aW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRlZiBfX29mZl90IG9m
Zl90OwoKCgoKCgp0eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwoKCgoKdHlwZWRlZiBfX3BpZF90
IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYgX19zc2l6ZV90IHNz
aXplX3Q7CgoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRyX3Qg
Y2FkZHJfdDsKCgoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTMzICIvdXNyL2luY2x1ZGUv
c3lzL3R5cGVzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMyA0CiMgNTggIi91
c3IvaW5jbHVkZS90aW1lLmgiIDMgNAoKCnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CgoKCiMg
NzQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAoKCnR5cGVkZWYgX190aW1lX3QgdGltZV90OwoK
CgojIDkyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKdHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9j
a2lkX3Q7CiMgMTA0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKdHlwZWRlZiBfX3RpbWVyX3Qg
dGltZXJfdDsKIyAxMzQgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKCgoKdHlwZWRl
ZiBfX3VzZWNvbmRzX3QgdXNlY29uZHNfdDsKCgoKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vj
b25kc190OwoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjL2k2ODYtcGMtbGludXgtZ251LzMuNC4xL2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMTQ4ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIg
MyA0CgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQg
c2hvcnQgaW50IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxOTEgIi91c3Iv
aW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0ZV9f
ICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0ZV9f
ICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJpYnV0ZV9f
ICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0ZV9f
ICgoX19tb2RlX18gKF9fRElfXykpKTsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDhfdCBf
X2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
dV9pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVu
c2lnbmVkIGludCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7
CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18g
KF9fRElfXykpKTsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k
ZV9fIChfX3dvcmRfXykpKTsKIyAyMTYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CiMg
MSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzIDQKIyAzMSAiL3Vzci9pbmNsdWRlL3N5
cy9zZWxlY3QuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMyA0CiMg
MzIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMyA0CgoKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy9zaWdzZXQuaCIgMSAzIDQKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMg
NAp0eXBlZGVmIGludCBfX3NpZ19hdG9taWNfdDsKCgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAg
dW5zaWduZWQgbG9uZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9u
ZyBpbnQpKSldOwogIH0gX19zaWdzZXRfdDsKIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3Qu
aCIgMiAzIDQKCgoKdHlwZWRlZiBfX3NpZ3NldF90IHNpZ3NldF90OwoKCgoKCiMgMSAiL3Vzci9p
bmNsdWRlL3RpbWUuaCIgMSAzIDQKIyAxMTggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNApzdHJ1
Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBsb25nIGludCB0dl9uc2Vj
OwogIH07CiMgNDUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMyA0CgojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzIDQKIyA2OSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5o
IiAzIDQKc3RydWN0IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBfX3N1c2Vj
b25kc190IHR2X3VzZWM7CiAgfTsKIyA0NyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAz
IDQKIyA1NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0CnR5cGVkZWYgbG9uZyBpbnQg
X19mZF9tYXNrOwojIDY3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzIDQKdHlwZWRlZiBz
dHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChf
X2ZkX21hc2spKV07CgoKCgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2ZkX21hc2sgZmRf
bWFzazsKIyA5OSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0CmV4dGVybiAiQyIgewoj
IDEwOSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0CmV4dGVybiBpbnQgc2VsZWN0IChp
bnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAgIGZkX3NldCAqX19y
ZXN0cmljdCBfX3dyaXRlZmRzLAogICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywK
ICAgICBzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCBfX3RpbWVvdXQpOwojIDEyMSAiL3Vzci9p
bmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0CmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9fbmZkcywg
ZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9f
d3JpdGVmZHMsCiAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgY29u
c3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0IF9fdGltZW91dCwKICAgICAgY29uc3QgX19z
aWdzZXRfdCAqX19yZXN0cmljdCBfX3NpZ21hc2spOwoKCn0KIyAyMTcgIi91c3IvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMiAzIDQKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEg
MyA0CiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDMgNApfX2V4dGVuc2lvbl9f
CmV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBpbnQgZ251X2Rldl9tYWpvciAodW5zaWduZWQgbG9u
ZyBsb25nIGludCBfX2RldikKICAgICB0aHJvdyAoKTsKX19leHRlbnNpb25fXwpleHRlcm4gX19p
bmxpbmUgdW5zaWduZWQgaW50IGdudV9kZXZfbWlub3IgKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg
X19kZXYpCiAgICAgdGhyb3cgKCk7Cl9fZXh0ZW5zaW9uX18KZXh0ZXJuIF9faW5saW5lIHVuc2ln
bmVkIGxvbmcgbG9uZyBpbnQgZ251X2Rldl9tYWtlZGV2ICh1bnNpZ25lZCBpbnQgX19tYWpvciwK
ICAgICAgIHVuc2lnbmVkIGludCBfX21pbm9yKQogICAgIHRocm93ICgpOwoKCl9fZXh0ZW5zaW9u
X18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGludApnbnVfZGV2X21ham9yICh1bnNpZ25lZCBs
b25nIGxvbmcgaW50IF9fZGV2KSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoX19kZXYgPj4gOCkgJiAw
eGZmZikgfCAoKHVuc2lnbmVkIGludCkgKF9fZGV2ID4+IDMyKSAmIH4weGZmZik7Cn0KCl9fZXh0
ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGludApnbnVfZGV2X21pbm9yICh1bnNp
Z25lZCBsb25nIGxvbmcgaW50IF9fZGV2KSB0aHJvdyAoKQp7CiAgcmV0dXJuIChfX2RldiAmIDB4
ZmYpIHwgKCh1bnNpZ25lZCBpbnQpIChfX2RldiA+PiAxMikgJiB+MHhmZik7Cn0KCl9fZXh0ZW5z
aW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKZ251X2Rldl9tYWtl
ZGV2ICh1bnNpZ25lZCBpbnQgX19tYWpvciwgdW5zaWduZWQgaW50IF9fbWlub3IpIHRocm93ICgp
CnsKICByZXR1cm4gKChfX21pbm9yICYgMHhmZikgfCAoKF9fbWFqb3IgJiAweGZmZikgPDwgOCkK
ICAgfCAoKCh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSAoX19taW5vciAmIH4weGZmKSkgPDwgMTIp
CiAgIHwgKCgodW5zaWduZWQgbG9uZyBsb25nIGludCkgKF9fbWFqb3IgJiB+MHhmZmYpKSA8PCAz
MikpOwp9CiMgMjIwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgoKCgp0eXBlZGVm
IF9fYmxrc2l6ZV90IGJsa3NpemVfdDsKCgoKCgoKdHlwZWRlZiBfX2Jsa2NudF90IGJsa2NudF90
OwoKCgp0eXBlZGVmIF9fZnNibGtjbnRfdCBmc2Jsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNmaWxj
bnRfdCBmc2ZpbGNudF90OwojIDI1OCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlw
ZWRlZiBfX2Jsa2NudDY0X3QgYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzYmxrY250NjRfdCBmc2Js
a2NudDY0X3Q7CnR5cGVkZWYgX19mc2ZpbGNudDY0X3QgZnNmaWxjbnQ2NF90OwoKCgoKCiMgMSAi
L3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDEgMyA0CiMgMzYgIi91c3IvaW5jbHVk
ZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzIDQKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhy
ZWFkX3Q7CgoKdHlwZWRlZiB1bmlvbgp7CiAgY2hhciBfX3NpemVbMzZdOwogIGxvbmcgaW50IF9f
YWxpZ247Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCgp0eXBlZGVmIHVuaW9uCnsKICBzdHJ1Y3QKICB7
CiAgICBpbnQgX19sb2NrOwogICAgdW5zaWduZWQgaW50IF9fY291bnQ7CiAgICBpbnQgX19vd25l
cjsKCgogICAgaW50IF9fa2luZDsKICAgIHVuc2lnbmVkIGludCBfX251c2VyczsKICAgIGludCBf
X3NwaW5zOwogIH0gX19kYXRhOwogIGNoYXIgX19zaXplWzI0XTsKICBsb25nIGludCBfX2FsaWdu
Owp9IHB0aHJlYWRfbXV0ZXhfdDsKCnR5cGVkZWYgdW5pb24KewogIGNoYXIgX19zaXplWzRdOwog
IGxvbmcgaW50IF9fYWxpZ247Cn0gcHRocmVhZF9tdXRleGF0dHJfdDsKCgoKCnR5cGVkZWYgdW5p
b24KewogIHN0cnVjdAogIHsKICAgIGludCBfX2xvY2s7CiAgICB1bnNpZ25lZCBpbnQgX19mdXRl
eDsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX190b3RhbF9zZXE7CiAgICB1bnNpZ25lZCBs
b25nIGxvbmcgaW50IF9fd2FrZXVwX3NlcTsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX193
b2tlbl9zZXE7CiAgICB2b2lkICpfX211dGV4OwogICAgaW50IF9fY2xvY2s7CiAgICB1bnNpZ25l
ZCBpbnQgX19icm9hZGNhc3Rfc2VxOwogIH0gX19kYXRhOwogIGNoYXIgX19zaXplWzQ4XTsKICBs
b25nIGxvbmcgaW50IF9fYWxpZ247Cn0gcHRocmVhZF9jb25kX3Q7Cgp0eXBlZGVmIHVuaW9uCnsK
ICBjaGFyIF9fc2l6ZVs0XTsKICBsb25nIGludCBfX2FsaWduOwp9IHB0aHJlYWRfY29uZGF0dHJf
dDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKdHlwZWRlZiBpbnQg
cHRocmVhZF9vbmNlX3Q7CgoKCgoKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0CiAgewogICAgaW50
IF9fbG9jazsKICAgIHVuc2lnbmVkIGludCBfX25yX3JlYWRlcnM7CiAgICB1bnNpZ25lZCBpbnQg
X19yZWFkZXJzX3dha2V1cDsKICAgIHVuc2lnbmVkIGludCBfX3dyaXRlcl93YWtldXA7CiAgICB1
bnNpZ25lZCBpbnQgX19ucl9yZWFkZXJzX3F1ZXVlZDsKICAgIHVuc2lnbmVkIGludCBfX25yX3dy
aXRlcnNfcXVldWVkOwoKCiAgICB1bnNpZ25lZCBpbnQgX19mbGFnczsKICAgIGludCBfX3dyaXRl
cjsKICB9IF9fZGF0YTsKICBjaGFyIF9fc2l6ZVszMl07CiAgbG9uZyBpbnQgX19hbGlnbjsKfSBw
dGhyZWFkX3J3bG9ja190OwoKdHlwZWRlZiB1bmlvbgp7CiAgY2hhciBfX3NpemVbOF07CiAgbG9u
ZyBpbnQgX19hbGlnbjsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsKCgoKCgp0eXBlZGVmIHZvbGF0
aWxlIGludCBwdGhyZWFkX3NwaW5sb2NrX3Q7CgoKCgp0eXBlZGVmIHVuaW9uCnsKICBjaGFyIF9f
c2l6ZVsyMF07CiAgbG9uZyBpbnQgX19hbGlnbjsKfSBwdGhyZWFkX2JhcnJpZXJfdDsKCnR5cGVk
ZWYgdW5pb24KewogIGNoYXIgX19zaXplWzRdOwogIGludCBfX2FsaWduOwp9IHB0aHJlYWRfYmFy
cmllcmF0dHJfdDsKIyAyNjcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKCgp9CiMg
NDE3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMyA0CgoKCgoKCmV4dGVybiBsb25nIGludCBy
YW5kb20gKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kb20gKHVuc2lnbmVkIGlu
dCBfX3NlZWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVuc2lnbmVk
IGludCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCiAgIHNpemVfdCBfX3N0YXRlbGVuKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnNldHN0YXRlIChjaGFyICpfX3N0YXRlYnVmKSB0aHJvdyAo
KTsKCgoKCgoKCnN0cnVjdCByYW5kb21fZGF0YQogIHsKICAgIGludDMyX3QgKmZwdHI7CiAgICBp
bnQzMl90ICpycHRyOwogICAgaW50MzJfdCAqc3RhdGU7CiAgICBpbnQgcmFuZF90eXBlOwogICAg
aW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2VwOwogICAgaW50MzJfdCAqZW5kX3B0cjsKICB9
OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9f
YnVmLAogICAgICAgaW50MzJfdCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRl
cm4gaW50IHNyYW5kb21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRh
ICpfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQg
X19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgIHNpemVfdCBfX3N0YXRlbGVu
LAogICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKZXh0
ZXJuIGludCBzZXRzdGF0ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAg
IHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBpbnQgcmFuZCAodm9pZCkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWdu
ZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQg
aW50ICpfX3NlZWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lk
KSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194
c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIHRocm93
ICgpOwpleHRlcm4gbG9uZyBpbnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1Ymlb
M10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsK
ZXh0ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0
aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZDQ4IChsb25nIGludCBfX3NlZWR2YWwpIHRocm93
ICgpOwpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGlu
dCBfX3NlZWQxNnZbM10pIHRocm93ICgpOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBz
aG9ydCBpbnQgX19wYXJhbVs3XSkgdGhyb3cgKCk7CgoKCgoKc3RydWN0IGRyYW5kNDhfZGF0YQog
IHsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQg
X19vbGRfeFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2M7CiAgICB1bnNpZ25lZCBzaG9y
dCBpbnQgX19pbml0OwogICAgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2E7CiAgfTsKCgpleHRl
cm4gaW50IGRyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZl
ciwKICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4g
aW50IGVyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgc3Ry
dWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICBkb3VibGUgKl9f
cmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbHJhbmQ0OF9yIChzdHJ1
Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgIGxvbmcgaW50ICpf
X3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2ln
bmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f
cmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf
X3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hz
dWJpWzNdLAogICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIs
CiAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgc3JhbmQ0OF9yIChsb25nIGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEg
Kl9fYnVmZmVyKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQg
c2hvcnQgaW50IF9fc2VlZDE2dlszXSwKICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVm
ZmVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQg
X19wYXJhbVs3XSwKICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cg
KCk7CgoKCgoKCgoKCmV4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAqY2FsbG9jIChzaXpl
X3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19tYWxsb2NfXykpOwoKCgoKCgoKZXh0ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBz
aXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0
ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgY2Zy
ZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgi
IDEgMyA0CiMgMjUgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMyA0CiMgMSAiL3Vzci9saWIvZ2Nj
L2k2ODYtcGMtbGludXgtZ251LzMuNC4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMjYgIi91
c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzIDQKCmV4dGVybiAiQyIgewoKCgoKCmV4dGVybiB2b2lk
ICphbGxvY2EgKHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoKCn0KIyA1NzkgIi91c3IvaW5j
bHVkZS9zdGRsaWIuaCIgMiAzIDQKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3Np
emUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50
IHBvc2l4X21lbWFsaWduICh2b2lkICoqX19tZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwgc2l6
ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoK
CgoKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25v
cmV0dXJuX18pKTsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBvbl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9f
c3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQgKl9fYXJnKQogICAgIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X25vcmV0dXJuX18pKTsKCgoKCgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBfX3N0YXR1cykgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCgpleHRlcm4gY2hhciAq
Z2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq
X19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIGludCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50
IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50
IF9fcmVwbGFjZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHVuc2V0ZW52IChfX2NvbnN0
IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQp
IHRocm93ICgpOwojIDY2MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIGNoYXIg
Km1rdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjc0ICIvdXNyL2luY2x1ZGUv
c3RkbGliLmgiIDMgNApleHRlcm4gaW50IG1rc3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpOwojIDY4
MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIGludCBta3N0ZW1wNjQgKGNoYXIg
Kl9fdGVtcGxhdGUpOwojIDY5MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIGNo
YXIgKm1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBp
bnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCk7CgoKCgoKCgpleHRlcm4gY2hhciAq
Y2Fub25pY2FsaXplX2ZpbGVfbmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoj
IDcyMCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICBjaGFyICpfX3Jlc3RyaWN0
IF9fcmVzb2x2ZWQpIHRocm93ICgpOwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3Qp
IChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJfZm5f
dCBjb21wYXJpc29uX2ZuX3Q7CgoKCgoKCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0IHZv
aWQgKl9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fYmFzZSwKICAgICAgICBzaXplX3QgX19ubWVtYiwg
c2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFz
b3J0ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogICAgIF9f
Y29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpleHRlcm4gaW50IGFicyAoaW50IF9feCkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbG9uZyBpbnQgbGFicyAobG9u
ZyBpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCl9fZXh0
ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBpbnQgX194KQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKCmV4dGVybiBk
aXZfdCBkaXYgKGludCBfX251bWVyLCBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsZGl2X3QgbGRpdiAobG9uZyBpbnQgX19udW1l
ciwgbG9uZyBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsbGRpdl90IGxsZGl2IChsb25nIGxvbmcg
aW50IF9fbnVtZXIsCiAgICAgICAgbG9uZyBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiMgNzg0ICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDMgNApleHRlcm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwg
aW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhy
b3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp
dCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikg
dGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25k
aWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25n
IGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgIGludCAqX19yZXN0cmljdCBfX2Rl
Y3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0
IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgIGludCAqX19yZXN0cmlj
dCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIg
KnFnY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp
Z2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWdu
LCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4
dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVz
dHJpY3QgX19kZWNwdCwKICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3Ry
aWN0IF9fYnVmLAogICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHFlY3Z0
X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgaW50ICpfX3Jlc3Ry
aWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgIGNoYXIgKl9fcmVzdHJp
Y3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgcWZjdnRfciAobG9u
ZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICBpbnQgKl9fcmVzdHJpY3QgX19k
ZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1
Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgbWJsZW4gKF9fY29u
c3QgY2hhciAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1idG93YyAo
d2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywKICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjdG9tYiAoY2hhciAqX19z
LCB3Y2hhcl90IF9fd2NoYXIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
cywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFyICpf
X3Jlc3RyaWN0IF9fcywKICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6
ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gaW50IHJwbWF0Y2ggKF9fY29u
c3QgY2hhciAqX19yZXNwb25zZSkgdGhyb3cgKCk7CiMgODY2ICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDMgNApleHRlcm4gaW50IGdldHN1Ym9wdCAoY2hhciAqKl9fcmVzdHJpY3QgX19vcHRpb25w
LAogICAgICAgIGNoYXIgKl9fY29uc3QgKl9fcmVzdHJpY3QgX190b2tlbnMsCiAgICAgICAgY2hh
ciAqKl9fcmVzdHJpY3QgX192YWx1ZXApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHNldGtl
eSAoX19jb25zdCBjaGFyICpfX2tleSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHBvc2l4
X29wZW5wdCAoaW50IF9fb2ZsYWcpOwoKCgoKCgoKZXh0ZXJuIGludCBncmFudHB0IChpbnQgX19m
ZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5sb2NrcHQgKGludCBfX2ZkKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBjaGFyICpwdHNuYW1lIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBpbnQgcHRzbmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1Zmxlbikg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRwdCAodm9pZCk7CgoKCgoKCmV4dGVybiBpbnQgZ2V0
bG9hZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1tdLCBpbnQgX19uZWxlbSkgdGhyb3cgKCk7CgoKCgoK
fQojIDI2ICJwaWMuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAxIDMgNAojIDMyICIv
dXNyL2luY2x1ZGUvZXJybm8uaCIgMyA0CmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL2Vycm5vLmgiIDEgMyA0CiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMg
NAojIDEgIi91c3IvaW5jbHVkZS9saW51eC9lcnJuby5oIiAxIDMgNAoKCgojIDEgIi91c3IvaW5j
bHVkZS9hc20vZXJybm8uaCIgMSAzIDQKCgoKIyAxICIvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMv
ZXJybm8uaCIgMSAzIDQKCgoKIyAxICIvdXNyL2luY2x1ZGUvYXNtLWdlbmVyaWMvZXJybm8tYmFz
ZS5oIiAxIDMgNAojIDUgIi91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYy9lcnJuby5oIiAyIDMgNAoj
IDUgIi91c3IvaW5jbHVkZS9hc20vZXJybm8uaCIgMiAzIDQKIyA1ICIvdXNyL2luY2x1ZGUvbGlu
dXgvZXJybm8uaCIgMiAzIDQKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMiAzIDQK
IyAzOCAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMyA0CmV4dGVybiBpbnQgKl9fZXJybm9f
bG9jYXRpb24gKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyAz
NyAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIgMyA0CiMgNTUgIi91c3IvaW5jbHVkZS9lcnJuby5o
IiAzIDQKZXh0ZXJuIGNoYXIgKnByb2dyYW1faW52b2NhdGlvbl9uYW1lLCAqcHJvZ3JhbV9pbnZv
Y2F0aW9uX3Nob3J0X25hbWU7CgoKCn0KIyA2OSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDMgNAp0
eXBlZGVmIGludCBlcnJvcl90OwojIDI3ICJwaWMuaCIgMgojIDU4ICJwaWMuaCIKIyAxICIvdmFy
L3RtcC9wb3J0YWdlL2dyb2ZmLTEuMTkvd29yay9ncm9mZi0xLjE5L3NyYy9pbmNsdWRlL2Fzc2Vy
dC5oIiAxCiMgMjQgIi92YXIvdG1wL3BvcnRhZ2UvZ3JvZmYtMS4xOS93b3JrL2dyb2ZmLTEuMTkv
c3JjL2luY2x1ZGUvYXNzZXJ0LmgiCnZvaWQgYXNzZXJ0aW9uX2ZhaWxlZChpbnQsIGNvbnN0IGNo
YXIgKik7CgppbmxpbmUgdm9pZCBkb19hc3NlcnQoaW50IGV4cHIsIGludCBsaW5lLCBjb25zdCBj
aGFyICpmaWxlKQp7CiAgaWYgKCFleHByKQogICAgYXNzZXJ0aW9uX2ZhaWxlZChsaW5lLCBmaWxl
KTsKfQojIDU5ICJwaWMuaCIgMgojIDEgIi92YXIvdG1wL3BvcnRhZ2UvZ3JvZmYtMS4xOS93b3Jr
L2dyb2ZmLTEuMTkvc3JjL2luY2x1ZGUvY3NldC5oIiAxCiMgMjIgIi92YXIvdG1wL3BvcnRhZ2Uv
Z3JvZmYtMS4xOS93b3JrL2dyb2ZmLTEuMTkvc3JjL2luY2x1ZGUvY3NldC5oIgojIDEgIi91c3Iv
bGliL2djYy9pNjg2LXBjLWxpbnV4LWdudS8zLjQuMS9pbmNsdWRlL2xpbWl0cy5oIiAxIDMgNAoj
IDIzICIvdmFyL3RtcC9wb3J0YWdlL2dyb2ZmLTEuMTkvd29yay9ncm9mZi0xLjE5L3NyYy9pbmNs
dWRlL2NzZXQuaCIgMgoKCgoKCgplbnVtIGNzZXRfYnVpbHRpbiB7IENTRVRfQlVJTFRJTiB9OwoK
Y2xhc3MgY3NldCB7CnB1YmxpYzoKICBjc2V0KCk7CiAgY3NldChjc2V0X2J1aWx0aW4pOwogIGNz
ZXQoY29uc3QgY2hhciAqKTsKICBjc2V0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKik7CiAgaW50IG9w
ZXJhdG9yKCkodW5zaWduZWQgY2hhcikgY29uc3Q7CgogIGNzZXQgJm9wZXJhdG9yfD0oY29uc3Qg
Y3NldCAmKTsKICBjc2V0ICZvcGVyYXRvcnw9KHVuc2lnbmVkIGNoYXIpOwoKICBmcmllbmQgY2xh
c3MgY3NldF9pbml0Owpwcml2YXRlOgogIGNoYXIgdlsoMTI3ICogMiArIDEpKzFdOwogIHZvaWQg
Y2xlYXIoKTsKfTsKCmlubGluZSBpbnQgY3NldDo6b3BlcmF0b3IoKSh1bnNpZ25lZCBjaGFyIGMp
IGNvbnN0CnsKICByZXR1cm4gdltjXTsKfQoKaW5saW5lIGNzZXQgJmNzZXQ6Om9wZXJhdG9yfD0o
dW5zaWduZWQgY2hhciBjKQp7CiAgdltjXSA9IDE7CiAgcmV0dXJuICp0aGlzOwp9CgpleHRlcm4g
Y3NldCBjc2FscGhhOwpleHRlcm4gY3NldCBjc3VwcGVyOwpleHRlcm4gY3NldCBjc2xvd2VyOwpl
eHRlcm4gY3NldCBjc2RpZ2l0OwpleHRlcm4gY3NldCBjc3hkaWdpdDsKZXh0ZXJuIGNzZXQgY3Nz
cGFjZTsKZXh0ZXJuIGNzZXQgY3NwdW5jdDsKZXh0ZXJuIGNzZXQgY3NhbG51bTsKZXh0ZXJuIGNz
ZXQgY3NwcmludDsKZXh0ZXJuIGNzZXQgY3NncmFwaDsKZXh0ZXJuIGNzZXQgY3NjbnRybDsKCnN0
YXRpYyBjbGFzcyBjc2V0X2luaXQgewogIHN0YXRpYyBpbnQgaW5pdGlhbGlzZWQ7CnB1YmxpYzoK
ICBjc2V0X2luaXQoKTsKfSBfY3NldF9pbml0OwojIDYwICJwaWMuaCIgMgojIDEgIi92YXIvdG1w
L3BvcnRhZ2UvZ3JvZmYtMS4xOS93b3JrL2dyb2ZmLTEuMTkvc3JjL2luY2x1ZGUvc3RyaW5nY2xh
c3MuaCIgMQojIDIzICIvdmFyL3RtcC9wb3J0YWdlL2dyb2ZmLTEuMTkvd29yay9ncm9mZi0xLjE5
L3NyYy9pbmNsdWRlL3N0cmluZ2NsYXNzLmgiCiMgMSAiL3Zhci90bXAvcG9ydGFnZS9ncm9mZi0x
LjE5L3dvcmsvZ3JvZmYtMS4xOS9zcmMvaW5jbHVkZS9hc3NlcnQuaCIgMQojIDI0ICIvdmFyL3Rt
cC9wb3J0YWdlL2dyb2ZmLTEuMTkvd29yay9ncm9mZi0xLjE5L3NyYy9pbmNsdWRlL3N0cmluZ2Ns
YXNzLmgiIDIKCgoKCmNsYXNzIHN0cmluZzsKCmlubGluZSBzdHJpbmcgb3BlcmF0b3IrKGNvbnN0
IHN0cmluZyAmLCBjb25zdCBzdHJpbmcgJik7CmlubGluZSBzdHJpbmcgb3BlcmF0b3IrKGNvbnN0
IHN0cmluZyAmLCBjb25zdCBjaGFyICopOwppbmxpbmUgc3RyaW5nIG9wZXJhdG9yKyhjb25zdCBj
aGFyICosIGNvbnN0IHN0cmluZyAmKTsKaW5saW5lIHN0cmluZyBvcGVyYXRvcisoY29uc3Qgc3Ry
aW5nICYsIGNoYXIpOwppbmxpbmUgc3RyaW5nIG9wZXJhdG9yKyhjaGFyLCBjb25zdCBzdHJpbmcg
Jik7CmlubGluZSBpbnQgb3BlcmF0b3I9PShjb25zdCBzdHJpbmcgJiwgY29uc3Qgc3RyaW5nICYp
OwppbmxpbmUgaW50IG9wZXJhdG9yIT0oY29uc3Qgc3RyaW5nICYsIGNvbnN0IHN0cmluZyAmKTsK
CmNsYXNzIHN0cmluZyB7CnB1YmxpYzoKICBzdHJpbmcoKTsKICBzdHJpbmcoY29uc3Qgc3RyaW5n
ICYpOwogIHN0cmluZyhjb25zdCBjaGFyICopOwogIHN0cmluZyhjb25zdCBjaGFyICosIGludCk7
CiAgc3RyaW5nKGNoYXIpOwoKICB+c3RyaW5nKCk7CgogIHN0cmluZyAmb3BlcmF0b3I9KGNvbnN0
IHN0cmluZyAmKTsKICBzdHJpbmcgJm9wZXJhdG9yPShjb25zdCBjaGFyICopOwogIHN0cmluZyAm
b3BlcmF0b3I9KGNoYXIpOwoKICBzdHJpbmcgJm9wZXJhdG9yKz0oY29uc3Qgc3RyaW5nICYpOwog
IHN0cmluZyAmb3BlcmF0b3IrPShjb25zdCBjaGFyICopOwogIHN0cmluZyAmb3BlcmF0b3IrPShj
aGFyKTsKICB2b2lkIGFwcGVuZChjb25zdCBjaGFyICosIGludCk7CgogIGludCBsZW5ndGgoKSBj
b25zdDsKICBpbnQgZW1wdHkoKSBjb25zdDsKICBpbnQgb3BlcmF0b3IqKCkgY29uc3Q7CgogIHN0
cmluZyBzdWJzdHJpbmcoaW50IGksIGludCBuKSBjb25zdDsKCiAgY2hhciAmb3BlcmF0b3JbXShp
bnQpOwogIGNoYXIgb3BlcmF0b3JbXShpbnQpIGNvbnN0OwoKICB2b2lkIHNldF9sZW5ndGgoaW50
IGkpOwogIGNvbnN0IGNoYXIgKmNvbnRlbnRzKCkgY29uc3Q7CiAgaW50IHNlYXJjaChjaGFyKSBj
b25zdDsKICBjaGFyICpleHRyYWN0KCkgY29uc3Q7CiAgdm9pZCByZW1vdmVfc3BhY2VzKCk7CiAg
dm9pZCBjbGVhcigpOwogIHZvaWQgbW92ZShzdHJpbmcgJik7CgogIGZyaWVuZCBzdHJpbmcgb3Bl
cmF0b3IrKGNvbnN0IHN0cmluZyAmLCBjb25zdCBzdHJpbmcgJik7CiAgZnJpZW5kIHN0cmluZyBv
cGVyYXRvcisoY29uc3Qgc3RyaW5nICYsIGNvbnN0IGNoYXIgKik7CiAgZnJpZW5kIHN0cmluZyBv
cGVyYXRvcisoY29uc3QgY2hhciAqLCBjb25zdCBzdHJpbmcgJik7CiAgZnJpZW5kIHN0cmluZyBv
cGVyYXRvcisoY29uc3Qgc3RyaW5nICYsIGNoYXIpOwogIGZyaWVuZCBzdHJpbmcgb3BlcmF0b3Ir
KGNoYXIsIGNvbnN0IHN0cmluZyAmKTsKCiAgZnJpZW5kIGludCBvcGVyYXRvcj09KGNvbnN0IHN0
cmluZyAmLCBjb25zdCBzdHJpbmcgJik7CiAgZnJpZW5kIGludCBvcGVyYXRvciE9KGNvbnN0IHN0
cmluZyAmLCBjb25zdCBzdHJpbmcgJik7CiAgZnJpZW5kIGludCBvcGVyYXRvcjw9KGNvbnN0IHN0
cmluZyAmLCBjb25zdCBzdHJpbmcgJik7CiAgZnJpZW5kIGludCBvcGVyYXRvcjwoY29uc3Qgc3Ry
aW5nICYsIGNvbnN0IHN0cmluZyAmKTsKICBmcmllbmQgaW50IG9wZXJhdG9yPj0oY29uc3Qgc3Ry
aW5nICYsIGNvbnN0IHN0cmluZyAmKTsKICBmcmllbmQgaW50IG9wZXJhdG9yPihjb25zdCBzdHJp
bmcgJiwgY29uc3Qgc3RyaW5nICYpOwoKcHJpdmF0ZToKICBjaGFyICpwdHI7CiAgaW50IGxlbjsK
ICBpbnQgc3o7CgogIHN0cmluZyhjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqLCBpbnQp
OwogIHZvaWQgZ3JvdzEoKTsKfTsKCgppbmxpbmUgY2hhciAmc3RyaW5nOjpvcGVyYXRvcltdKGlu
dCBpKQp7CiAgZG9fYXNzZXJ0KGkgPj0gMCAmJiBpIDwgbGVuLCA5OSwgIi92YXIvdG1wL3BvcnRh
Z2UvZ3JvZmYtMS4xOS93b3JrL2dyb2ZmLTEuMTkvc3JjL2luY2x1ZGUvc3RyaW5nY2xhc3MuaCIp
OwogIHJldHVybiBwdHJbaV07Cn0KCmlubGluZSBjaGFyIHN0cmluZzo6b3BlcmF0b3JbXShpbnQg
aSkgY29uc3QKewogIGRvX2Fzc2VydChpID49IDAgJiYgaSA8IGxlbiwgMTA1LCAiL3Zhci90bXAv
cG9ydGFnZS9ncm9mZi0xLjE5L3dvcmsvZ3JvZmYtMS4xOS9zcmMvaW5jbHVkZS9zdHJpbmdjbGFz
cy5oIik7CiAgcmV0dXJuIHB0cltpXTsKfQoKaW5saW5lIGludCBzdHJpbmc6Omxlbmd0aCgpIGNv
bnN0CnsKICByZXR1cm4gbGVuOwp9CgppbmxpbmUgaW50IHN0cmluZzo6ZW1wdHkoKSBjb25zdAp7
CiAgcmV0dXJuIGxlbiA9PSAwOwp9CgppbmxpbmUgaW50IHN0cmluZzo6b3BlcmF0b3IqKCkgY29u
c3QKewogIHJldHVybiBsZW47Cn0KCmlubGluZSBjb25zdCBjaGFyICpzdHJpbmc6OmNvbnRlbnRz
KCkgY29uc3QKewogIHJldHVybiBwdHI7Cn0KCmlubGluZSBzdHJpbmcgb3BlcmF0b3IrKGNvbnN0
IHN0cmluZyAmczEsIGNvbnN0IHN0cmluZyAmczIpCnsKICByZXR1cm4gc3RyaW5nKHMxLnB0ciwg
czEubGVuLCBzMi5wdHIsIHMyLmxlbik7Cn0KCmlubGluZSBzdHJpbmcgb3BlcmF0b3IrKGNvbnN0
IHN0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyKQp7CgogIGlmIChzMiA9PSAwKQogICAgcmV0dXJu
IHMxOwogIGVsc2UKICAgIHJldHVybiBzdHJpbmcoczEucHRyLCBzMS5sZW4sIHMyLCBzdHJsZW4o
czIpKTsKCgoKfQoKaW5saW5lIHN0cmluZyBvcGVyYXRvcisoY29uc3QgY2hhciAqczEsIGNvbnN0
IHN0cmluZyAmczIpCnsKCiAgaWYgKHMxID09IDApCiAgICByZXR1cm4gczI7CiAgZWxzZQogICAg
cmV0dXJuIHN0cmluZyhzMSwgc3RybGVuKHMxKSwgczIucHRyLCBzMi5sZW4pOwoKCgp9Cgppbmxp
bmUgc3RyaW5nIG9wZXJhdG9yKyhjb25zdCBzdHJpbmcgJnMsIGNoYXIgYykKewogIHJldHVybiBz
dHJpbmcocy5wdHIsIHMubGVuLCAmYywgMSk7Cn0KCmlubGluZSBzdHJpbmcgb3BlcmF0b3IrKGNo
YXIgYywgY29uc3Qgc3RyaW5nICZzKQp7CiAgcmV0dXJuIHN0cmluZygmYywgMSwgcy5wdHIsIHMu
bGVuKTsKfQoKaW5saW5lIGludCBvcGVyYXRvcj09KGNvbnN0IHN0cmluZyAmczEsIGNvbnN0IHN0
cmluZyAmczIpCnsKICByZXR1cm4gKHMxLmxlbiA9PSBzMi5sZW4KICAgJiYgKHMxLmxlbiA9PSAw
IHx8IG1lbWNtcChzMS5wdHIsIHMyLnB0ciwgczEubGVuKSA9PSAwKSk7Cn0KCmlubGluZSBpbnQg
b3BlcmF0b3IhPShjb25zdCBzdHJpbmcgJnMxLCBjb25zdCBzdHJpbmcgJnMyKQp7CiAgcmV0dXJu
IChzMS5sZW4gIT0gczIubGVuCiAgIHx8IChzMS5sZW4gIT0gMCAmJiBtZW1jbXAoczEucHRyLCBz
Mi5wdHIsIHMxLmxlbikgIT0gMCkpOwp9CgppbmxpbmUgc3RyaW5nIHN0cmluZzo6c3Vic3RyaW5n
KGludCBpLCBpbnQgbikgY29uc3QKewogIGRvX2Fzc2VydChpID49IDAgJiYgaSArIG4gPD0gbGVu
LCAxODIsICIvdmFyL3RtcC9wb3J0YWdlL2dyb2ZmLTEuMTkvd29yay9ncm9mZi0xLjE5L3NyYy9p
bmNsdWRlL3N0cmluZ2NsYXNzLmgiKTsKICByZXR1cm4gc3RyaW5nKHB0ciArIGksIG4pOwp9Cgpp
bmxpbmUgc3RyaW5nICZzdHJpbmc6Om9wZXJhdG9yKz0oY2hhciBjKQp7CiAgaWYgKGxlbiA+PSBz
eikKICAgIGdyb3cxKCk7CiAgcHRyW2xlbisrXSA9IGM7CiAgcmV0dXJuICp0aGlzOwp9Cgp2b2lk
IHB1dF9zdHJpbmcoY29uc3Qgc3RyaW5nICYsIEZJTEUgKik7CgpzdHJpbmcgYXNfc3RyaW5nKGlu
dCk7CiMgNjEgInBpYy5oIiAyCiMgMSAiL3Zhci90bXAvcG9ydGFnZS9ncm9mZi0xLjE5L3dvcmsv
Z3JvZmYtMS4xOS9zcmMvaW5jbHVkZS9lcnJhcmcuaCIgMQojIDIxICIvdmFyL3RtcC9wb3J0YWdl
L2dyb2ZmLTEuMTkvd29yay9ncm9mZi0xLjE5L3NyYy9pbmNsdWRlL2VycmFyZy5oIgpjbGFzcyBl
cnJhcmcgewogIGVudW0geyBFTVBUWSwgU1RSSU5HLCBDSEFSLCBJTlRFR0VSLCBVTlNJR05FRF9J
TlRFR0VSLCBET1VCTEUgfSB0eXBlOwogIHVuaW9uIHsKICAgIGNvbnN0IGNoYXIgKnM7CiAgICBp
bnQgbjsKICAgIHVuc2lnbmVkIGludCB1OwogICAgY2hhciBjOwogICAgZG91YmxlIGQ7CiAgfTsK
IHB1YmxpYzoKICBlcnJhcmcoKTsKICBlcnJhcmcoY29uc3QgY2hhciAqKTsKICBlcnJhcmcoY2hh
cik7CiAgZXJyYXJnKHVuc2lnbmVkIGNoYXIpOwogIGVycmFyZyhpbnQpOwogIGVycmFyZyh1bnNp
Z25lZCBpbnQpOwogIGVycmFyZyhkb3VibGUpOwogIGludCBlbXB0eSgpIGNvbnN0OwogIHZvaWQg
cHJpbnQoKSBjb25zdDsKfTsKCmV4dGVybiBlcnJhcmcgZW1wdHlfZXJyYXJnOwoKZXh0ZXJuIHZv
aWQgZXJycHJpbnQoY29uc3QgY2hhciAqLAogICAgICAgY29uc3QgZXJyYXJnICZhcmcxID0gZW1w
dHlfZXJyYXJnLAogICAgICAgY29uc3QgZXJyYXJnICZhcmcyID0gZW1wdHlfZXJyYXJnLAogICAg
ICAgY29uc3QgZXJyYXJnICZhcmczID0gZW1wdHlfZXJyYXJnKTsKIyA2MiAicGljLmgiIDIKIyAx
ICIvdmFyL3RtcC9wb3J0YWdlL2dyb2ZmLTEuMTkvd29yay9ncm9mZi0xLjE5L3NyYy9pbmNsdWRl
L2Vycm9yLmgiIDEKIyAyMSAiL3Zhci90bXAvcG9ydGFnZS9ncm9mZi0xLjE5L3dvcmsvZ3JvZmYt
MS4xOS9zcmMvaW5jbHVkZS9lcnJvci5oIgpleHRlcm4gdm9pZCBmYXRhbF93aXRoX2ZpbGVfYW5k
X2xpbmUoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8sCiAgICAgICAgIGNvbnN0IGNo
YXIgKmZvcm1hdCwKICAgICAgICAgY29uc3QgZXJyYXJnICZhcmcxID0gZW1wdHlfZXJyYXJnLAog
ICAgICAgICBjb25zdCBlcnJhcmcgJmFyZzIgPSBlbXB0eV9lcnJhcmcsCiAgICAgICAgIGNvbnN0
IGVycmFyZyAmYXJnMyA9IGVtcHR5X2VycmFyZyk7CgpleHRlcm4gdm9pZCBlcnJvcl93aXRoX2Zp
bGVfYW5kX2xpbmUoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8sCiAgICAgICAgIGNv
bnN0IGNoYXIgKmZvcm1hdCwKICAgICAgICAgY29uc3QgZXJyYXJnICZhcmcxID0gZW1wdHlfZXJy
YXJnLAogICAgICAgICBjb25zdCBlcnJhcmcgJmFyZzIgPSBlbXB0eV9lcnJhcmcsCiAgICAgICAg
IGNvbnN0IGVycmFyZyAmYXJnMyA9IGVtcHR5X2VycmFyZyk7CgpleHRlcm4gdm9pZCB3YXJuaW5n
X3dpdGhfZmlsZV9hbmRfbGluZShjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywKICAg
ICAgICAgY29uc3QgY2hhciAqZm9ybWF0LAogICAgICAgICBjb25zdCBlcnJhcmcgJmFyZzEgPSBl
bXB0eV9lcnJhcmcsCiAgICAgICAgIGNvbnN0IGVycmFyZyAmYXJnMiA9IGVtcHR5X2VycmFyZywK
ICAgICAgICAgY29uc3QgZXJyYXJnICZhcmczID0gZW1wdHlfZXJyYXJnKTsKCmV4dGVybiB2b2lk
IGZhdGFsKGNvbnN0IGNoYXIgKiwKICAgIGNvbnN0IGVycmFyZyAmYXJnMSA9IGVtcHR5X2VycmFy
ZywKICAgIGNvbnN0IGVycmFyZyAmYXJnMiA9IGVtcHR5X2VycmFyZywKICAgIGNvbnN0IGVycmFy
ZyAmYXJnMyA9IGVtcHR5X2VycmFyZyk7CgpleHRlcm4gdm9pZCBlcnJvcihjb25zdCBjaGFyICos
CiAgICBjb25zdCBlcnJhcmcgJmFyZzEgPSBlbXB0eV9lcnJhcmcsCiAgICBjb25zdCBlcnJhcmcg
JmFyZzIgPSBlbXB0eV9lcnJhcmcsCiAgICBjb25zdCBlcnJhcmcgJmFyZzMgPSBlbXB0eV9lcnJh
cmcpOwoKZXh0ZXJuIHZvaWQgd2FybmluZyhjb25zdCBjaGFyICosCiAgICAgIGNvbnN0IGVycmFy
ZyAmYXJnMSA9IGVtcHR5X2VycmFyZywKICAgICAgY29uc3QgZXJyYXJnICZhcmcyID0gZW1wdHlf
ZXJyYXJnLAogICAgICBjb25zdCBlcnJhcmcgJmFyZzMgPSBlbXB0eV9lcnJhcmcpOwoKCmV4dGVy
biBjb25zdCBjaGFyICpwcm9ncmFtX25hbWU7CmV4dGVybiBpbnQgY3VycmVudF9saW5lbm87CmV4
dGVybiBjb25zdCBjaGFyICpjdXJyZW50X2ZpbGVuYW1lOwpleHRlcm4gY29uc3QgY2hhciAqY3Vy
cmVudF9zb3VyY2VfZmlsZW5hbWU7CiMgNjMgInBpYy5oIiAyCiMgMSAicG9zaXRpb24uaCIgMQoj
IDIxICJwb3NpdGlvbi5oIgpzdHJ1Y3QgcGxhY2U7CnN0cnVjdCBwb3NpdGlvbiB7CiAgZG91Ymxl
IHg7CiAgZG91YmxlIHk7CiAgcG9zaXRpb24oZG91YmxlLCBkb3VibGUgKTsKICBwb3NpdGlvbigp
OwogIHBvc2l0aW9uKGNvbnN0IHBsYWNlICYpOwogIHBvc2l0aW9uICZvcGVyYXRvcis9KGNvbnN0
IHBvc2l0aW9uICYpOwogIHBvc2l0aW9uICZvcGVyYXRvci09KGNvbnN0IHBvc2l0aW9uICYpOwog
IHBvc2l0aW9uICZvcGVyYXRvcio9KGRvdWJsZSk7CiAgcG9zaXRpb24gJm9wZXJhdG9yLz0oZG91
YmxlKTsKfTsKCnBvc2l0aW9uIG9wZXJhdG9yLShjb25zdCBwb3NpdGlvbiAmKTsKcG9zaXRpb24g
b3BlcmF0b3IrKGNvbnN0IHBvc2l0aW9uICYsIGNvbnN0IHBvc2l0aW9uICYpOwpwb3NpdGlvbiBv
cGVyYXRvci0oY29uc3QgcG9zaXRpb24gJiwgY29uc3QgcG9zaXRpb24gJik7CnBvc2l0aW9uIG9w
ZXJhdG9yLyhjb25zdCBwb3NpdGlvbiAmLCBkb3VibGUpOwpwb3NpdGlvbiBvcGVyYXRvciooY29u
c3QgcG9zaXRpb24gJiwgZG91YmxlKTsKCmRvdWJsZSBvcGVyYXRvciooY29uc3QgcG9zaXRpb24g
JiwgY29uc3QgcG9zaXRpb24gJik7CmludCBvcGVyYXRvcj09KGNvbnN0IHBvc2l0aW9uICYsIGNv
bnN0IHBvc2l0aW9uICYpOwppbnQgb3BlcmF0b3IhPShjb25zdCBwb3NpdGlvbiAmLCBjb25zdCBw
b3NpdGlvbiAmKTsKCmRvdWJsZSBoeXBvdChjb25zdCBwb3NpdGlvbiAmYSk7Cgp0eXBlZGVmIHBv
c2l0aW9uIGRpc3RhbmNlOwojIDY0ICJwaWMuaCIgMgojIDEgInRleHQuaCIgMQoKCmVudW0gaGFk
anVzdG1lbnQgewogIENFTlRFUl9BREpVU1QsCiAgTEVGVF9BREpVU1QsCiAgUklHSFRfQURKVVNU
CiAgfTsKCmVudW0gdmFkanVzdG1lbnQgewogIE5PTkVfQURKVVNULAogIEFCT1ZFX0FESlVTVCwK
ICBCRUxPV19BREpVU1QKICB9OwoKc3RydWN0IGFkanVzdG1lbnQgewogIGhhZGp1c3RtZW50IGg7
CiAgdmFkanVzdG1lbnQgdjsKfTsKCnN0cnVjdCB0ZXh0X3BpZWNlIHsKICBjaGFyICp0ZXh0Owog
IGFkanVzdG1lbnQgYWRqOwogIGNvbnN0IGNoYXIgKmZpbGVuYW1lOwogIGludCBsaW5lbm87Cgog
IHRleHRfcGllY2UoKTsKICB+dGV4dF9waWVjZSgpOwp9OwojIDY1ICJwaWMuaCIgMgojIDEgIm91
dHB1dC5oIiAxCiMgMjEgIm91dHB1dC5oIgpzdHJ1Y3QgbGluZV90eXBlIHsKICBlbnVtIHsgaW52
aXNpYmxlLCBzb2xpZCwgZG90dGVkLCBkYXNoZWQgfSB0eXBlOwogIGRvdWJsZSBkYXNoX3dpZHRo
OwogIGRvdWJsZSB0aGlja25lc3M7CgogIGxpbmVfdHlwZSgpOwp9OwoKCmNsYXNzIG91dHB1dCB7
CnByb3RlY3RlZDoKICBjaGFyICphcmdzOwogIGRvdWJsZSBkZXNpcmVkX2hlaWdodDsKICBkb3Vi
bGUgZGVzaXJlZF93aWR0aDsKICBkb3VibGUgY29tcHV0ZV9zY2FsZShkb3VibGUsIGNvbnN0IHBv
c2l0aW9uICYsIGNvbnN0IHBvc2l0aW9uICYpOwpwdWJsaWM6CiAgb3V0cHV0KCk7CiAgdmlydHVh
bCB+b3V0cHV0KCk7CiAgdm9pZCBzZXRfZGVzaXJlZF93aWR0aF9oZWlnaHQoZG91YmxlIHdpZCwg
ZG91YmxlIGh0KTsKICB2b2lkIHNldF9hcmdzKGNvbnN0IGNoYXIgKik7CiAgdmlydHVhbCB2b2lk
IHN0YXJ0X3BpY3R1cmUoZG91YmxlIHNjLCBjb25zdCBwb3NpdGlvbiAmbGwsIGNvbnN0IHBvc2l0
aW9uICZ1cikgPSAwOwogIHZpcnR1YWwgdm9pZCBmaW5pc2hfcGljdHVyZSgpID0gMDsKICB2aXJ0
dWFsIHZvaWQgY2lyY2xlKGNvbnN0IHBvc2l0aW9uICYsIGRvdWJsZSByYWQsCiAgICAgICAgY29u
c3QgbGluZV90eXBlICYsIGRvdWJsZSkgPSAwOwogIHZpcnR1YWwgdm9pZCB0ZXh0KGNvbnN0IHBv
c2l0aW9uICYsIHRleHRfcGllY2UgKiwgaW50LCBkb3VibGUpID0gMDsKICB2aXJ0dWFsIHZvaWQg
bGluZShjb25zdCBwb3NpdGlvbiAmLCBjb25zdCBwb3NpdGlvbiAqLCBpbnQgbiwKICAgICAgY29u
c3QgbGluZV90eXBlICYpID0gMDsKICB2aXJ0dWFsIHZvaWQgcG9seWdvbihjb25zdCBwb3NpdGlv
biAqLCBpbnQgbiwKICAgICAgICAgY29uc3QgbGluZV90eXBlICYsIGRvdWJsZSkgPSAwOwogIHZp
cnR1YWwgdm9pZCBzcGxpbmUoY29uc3QgcG9zaXRpb24gJiwgY29uc3QgcG9zaXRpb24gKiwgaW50
IG4sCiAgICAgICAgY29uc3QgbGluZV90eXBlICYpID0gMDsKICB2aXJ0dWFsIHZvaWQgYXJjKGNv
bnN0IHBvc2l0aW9uICYsIGNvbnN0IHBvc2l0aW9uICYsIGNvbnN0IHBvc2l0aW9uICYsCiAgICAg
Y29uc3QgbGluZV90eXBlICYpID0gMDsKICB2aXJ0dWFsIHZvaWQgZWxsaXBzZShjb25zdCBwb3Np
dGlvbiAmLCBjb25zdCBkaXN0YW5jZSAmLAogICAgICAgICBjb25zdCBsaW5lX3R5cGUgJiwgZG91
YmxlKSA9IDA7CiAgdmlydHVhbCB2b2lkIHJvdW5kZWRfYm94KGNvbnN0IHBvc2l0aW9uICYsIGNv
bnN0IGRpc3RhbmNlICYsIGRvdWJsZSwKICAgICAgY29uc3QgbGluZV90eXBlICYsIGRvdWJsZSkg
PSAwOwogIHZpcnR1YWwgdm9pZCBjb21tYW5kKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBp
bnQpID0gMDsKICB2aXJ0dWFsIHZvaWQgc2V0X2xvY2F0aW9uKGNvbnN0IGNoYXIgKiwgaW50KSB7
fQogIHZpcnR1YWwgdm9pZCBzZXRfY29sb3IoY2hhciAqLCBjaGFyICopID0gMDsKICB2aXJ0dWFs
IHZvaWQgcmVzZXRfY29sb3IoKSA9IDA7CiAgdmlydHVhbCBjaGFyICpnZXRfbGFzdF9maWxsZWQo
KSA9IDA7CiAgdmlydHVhbCBjaGFyICpnZXRfb3V0bGluZV9jb2xvcigpID0gMDsKICB2aXJ0dWFs
IGludCBzdXBwb3J0c19maWxsZWRfcG9seWdvbnMoKTsKICB2aXJ0dWFsIHZvaWQgYmVnaW5fYmxv
Y2soY29uc3QgcG9zaXRpb24gJmxsLCBjb25zdCBwb3NpdGlvbiAmdXIpOwogIHZpcnR1YWwgdm9p
ZCBlbmRfYmxvY2soKTsKfTsKCmV4dGVybiBvdXRwdXQgKm91dDsKCgoKCm91dHB1dCAqbWFrZV90
cm9mZl9vdXRwdXQoKTsKCgpvdXRwdXQgKm1ha2VfdGV4X291dHB1dCgpOwpvdXRwdXQgKm1ha2Vf
dHBpY19vdXRwdXQoKTsKIyA2NiAicGljLmgiIDIKIyA3NSAicGljLmgiCmNsYXNzIGlucHV0IHsK
ICBpbnB1dCAqbmV4dDsKcHVibGljOgogIGlucHV0KCk7CiAgdmlydHVhbCB+aW5wdXQoKTsKICB2
aXJ0dWFsIGludCBnZXQoKSA9IDA7CiAgdmlydHVhbCBpbnQgcGVlaygpID0gMDsKICB2aXJ0dWFs
IGludCBnZXRfbG9jYXRpb24oY29uc3QgY2hhciAqKiwgaW50ICopOwogIGZyaWVuZCBjbGFzcyBp
bnB1dF9zdGFjazsKICBmcmllbmQgY2xhc3MgY29weV9yZXN0X3RocnVfaW5wdXQ7Cn07CgpjbGFz
cyBmaWxlX2lucHV0IDogcHVibGljIGlucHV0IHsKICBGSUxFICpmcDsKICBjb25zdCBjaGFyICpm
aWxlbmFtZTsKICBpbnQgbGluZW5vOwogIHN0cmluZyBsaW5lOwogIGNvbnN0IGNoYXIgKnB0cjsK
ICBpbnQgcmVhZF9saW5lKCk7CnB1YmxpYzoKICBmaWxlX2lucHV0KEZJTEUgKiwgY29uc3QgY2hh
ciAqKTsKICB+ZmlsZV9pbnB1dCgpOwogIGludCBnZXQoKTsKICBpbnQgcGVlaygpOwogIGludCBn
ZXRfbG9jYXRpb24oY29uc3QgY2hhciAqKiwgaW50ICopOwp9OwoKdm9pZCBsZXhfaW5pdChpbnB1
dCAqKTsKaW50IGdldF9sb2NhdGlvbihjaGFyICoqLCBpbnQgKik7Cgp2b2lkIGRvX2NvcHkoY29u
c3QgY2hhciAqZmlsZSk7CnZvaWQgcGFyc2VfaW5pdCgpOwp2b2lkIHBhcnNlX2NsZWFudXAoKTsK
CnZvaWQgbGV4X2Vycm9yKGNvbnN0IGNoYXIgKm1lc3NhZ2UsCiAgICAgICAgY29uc3QgZXJyYXJn
ICZhcmcxID0gZW1wdHlfZXJyYXJnLAogICAgICAgIGNvbnN0IGVycmFyZyAmYXJnMiA9IGVtcHR5
X2VycmFyZywKICAgICAgICBjb25zdCBlcnJhcmcgJmFyZzMgPSBlbXB0eV9lcnJhcmcpOwoKdm9p
ZCBsZXhfd2FybmluZyhjb25zdCBjaGFyICptZXNzYWdlLAogICBjb25zdCBlcnJhcmcgJmFyZzEg
PSBlbXB0eV9lcnJhcmcsCiAgIGNvbnN0IGVycmFyZyAmYXJnMiA9IGVtcHR5X2VycmFyZywKICAg
Y29uc3QgZXJyYXJnICZhcmczID0gZW1wdHlfZXJyYXJnKTsKCnZvaWQgbGV4X2NsZWFudXAoKTsK
CmV4dGVybiBpbnQgZmx5YmFja19mbGFnOwpleHRlcm4gaW50IGNvbW1hbmRfY2hhcjsKCgpleHRl
cm4gaW50IHplcm9fbGVuZ3RoX2xpbmVfZmxhZzsKZXh0ZXJuIGludCBkcml2ZXJfZXh0ZW5zaW9u
X2ZsYWc7CmV4dGVybiBpbnQgY29tcGF0aWJsZV9mbGFnOwpleHRlcm4gaW50IHNhZmVyX2ZsYWc7
CmV4dGVybiBjaGFyICpncmFwaG5hbWU7CiMgMjMgIm9iamVjdC5jcHAiIDIKIyAxICIvdmFyL3Rt
cC9wb3J0YWdlL2dyb2ZmLTEuMTkvd29yay9ncm9mZi0xLjE5L3NyYy9pbmNsdWRlL3B0YWJsZS5o
IiAxCiMgMjEgIi92YXIvdG1wL3BvcnRhZ2UvZ3JvZmYtMS4xOS93b3JrL2dyb2ZmLTEuMTkvc3Jj
L2luY2x1ZGUvcHRhYmxlLmgiCiMgMSAiL3Zhci90bXAvcG9ydGFnZS9ncm9mZi0xLjE5L3dvcmsv
Z3JvZmYtMS4xOS9zcmMvaW5jbHVkZS9hc3NlcnQuaCIgMQojIDIyICIvdmFyL3RtcC9wb3J0YWdl
L2dyb2ZmLTEuMTkvd29yay9ncm9mZi0xLjE5L3NyYy9pbmNsdWRlL3B0YWJsZS5oIiAyCiMgMzUg
Ii92YXIvdG1wL3BvcnRhZ2UvZ3JvZmYtMS4xOS93b3JrL2dyb2ZmLTEuMTkvc3JjL2luY2x1ZGUv
cHRhYmxlLmgiCmV4dGVybiB1bnNpZ25lZCBuZXh0X3B0YWJsZV9zaXplKHVuc2lnbmVkKTsKZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgaGFzaF9zdHJpbmcoY29uc3QgY2hhciAqKTsKIyAyNCAib2JqZWN0
LmNwcCIgMgojIDEgIm9iamVjdC5oIiAxCiMgMjEgIm9iamVjdC5oIgpzdHJ1Y3QgcGxhY2U7Cgpl
bnVtIG9iamVjdF90eXBlIHsKICBPVEhFUl9PQkpFQ1QsCiAgQk9YX09CSkVDVCwKICBDSVJDTEVf
T0JKRUNULAogIEVMTElQU0VfT0JKRUNULAogIEFSQ19PQkpFQ1QsCiAgU1BMSU5FX09CSkVDVCwK
ICBMSU5FX09CSkVDVCwKICBBUlJPV19PQkpFQ1QsCiAgTU9WRV9PQkpFQ1QsCiAgVEVYVF9PQkpF
Q1QsCiAgQkxPQ0tfT0JKRUNULAogIE1BUktfT0JKRUNUCiAgfTsKCnN0cnVjdCBib3VuZGluZ19i
b3g7CgpzdHJ1Y3Qgb2JqZWN0IHsKICBvYmplY3QgKnByZXY7CiAgb2JqZWN0ICpuZXh0OwogIG9i
amVjdCgpOwogIHZpcnR1YWwgfm9iamVjdCgpOwogIHZpcnR1YWwgcG9zaXRpb24gb3JpZ2luKCk7
CiAgdmlydHVhbCBkb3VibGUgd2lkdGgoKTsKICB2aXJ0dWFsIGRvdWJsZSByYWRpdXMoKTsKICB2
aXJ0dWFsIGRvdWJsZSBoZWlnaHQoKTsKICB2aXJ0dWFsIHBvc2l0aW9uIG5vcnRoKCk7CiAgdmly
dHVhbCBwb3NpdGlvbiBzb3V0aCgpOwogIHZpcnR1YWwgcG9zaXRpb24gZWFzdCgpOwogIHZpcnR1
YWwgcG9zaXRpb24gd2VzdCgpOwogIHZpcnR1YWwgcG9zaXRpb24gbm9ydGhfZWFzdCgpOwogIHZp
cnR1YWwgcG9zaXRpb24gbm9ydGhfd2VzdCgpOwogIHZpcnR1YWwgcG9zaXRpb24gc291dGhfZWFz
dCgpOwogIHZpcnR1YWwgcG9zaXRpb24gc291dGhfd2VzdCgpOwogIHZpcnR1YWwgcG9zaXRpb24g
c3RhcnQoKTsKICB2aXJ0dWFsIHBvc2l0aW9uIGVuZCgpOwogIHZpcnR1YWwgcG9zaXRpb24gY2Vu
dGVyKCk7CiAgdmlydHVhbCBwbGFjZSAqZmluZF9sYWJlbChjb25zdCBjaGFyICopOwogIHZpcnR1
YWwgdm9pZCBtb3ZlX2J5KGNvbnN0IHBvc2l0aW9uICYpOwogIHZpcnR1YWwgaW50IGJsYW5rKCk7
CiAgdmlydHVhbCB2b2lkIHVwZGF0ZV9ib3VuZGluZ19ib3goYm91bmRpbmdfYm94ICopOwogIHZp
cnR1YWwgb2JqZWN0X3R5cGUgdHlwZSgpID0gMDsKICB2aXJ0dWFsIHZvaWQgcHJpbnQoKTsKICB2
aXJ0dWFsIHZvaWQgcHJpbnRfdGV4dCgpOwp9OwoKdHlwZWRlZiBwb3NpdGlvbiAob2JqZWN0Ojoq
Y29ybmVyKSgpOwoKc3RydWN0IHBsYWNlIHsKICBvYmplY3QgKm9iajsKICBkb3VibGUgeCwgeTsK
fTsKCnN0cnVjdCBzdHJpbmdfbGlzdDsKCmNsYXNzIHBhdGggewogIHBvc2l0aW9uIHBvczsKICBj
b3JuZXIgY3JuOwogIHN0cmluZ19saXN0ICpsYWJlbF9saXN0OwogIHBhdGggKnlwYXRoOwogIGlu
dCBpc19wb3NpdGlvbjsKcHVibGljOgogIHBhdGgoY29ybmVyID0gMCk7CiAgcGF0aChwb3NpdGlv
bik7CiAgcGF0aChjaGFyICosIGNvcm5lciA9IDApOwogIH5wYXRoKCk7CiAgdm9pZCBhcHBlbmQo
Y29ybmVyKTsKICB2b2lkIGFwcGVuZChjaGFyICopOwogIHZvaWQgc2V0X3lwYXRoKHBhdGggKik7
CiAgaW50IGZvbGxvdyhjb25zdCBwbGFjZSAmLCBwbGFjZSAqKSBjb25zdDsKfTsKCnN0cnVjdCBv
YmplY3RfbGlzdCB7CiAgb2JqZWN0ICpoZWFkOwogIG9iamVjdCAqdGFpbDsKICBvYmplY3RfbGlz
dCgpOwogIHZvaWQgYXBwZW5kKG9iamVjdCAqKTsKICB2b2lkIHdyYXBfdXBfYmxvY2sob2JqZWN0
X2xpc3QgKik7Cn07CgpzdHJ1Y3QgcGxhY2VfcGFzc29jIHsgY2hhciAqa2V5OyBwbGFjZSAqdmFs
OyBwbGFjZV9wYXNzb2MoKTsgfTsgc3RydWN0IHBsYWNlX3B0YWJsZTsgY2xhc3MgcGxhY2VfcHRh
YmxlX2l0ZXJhdG9yIHsgcGxhY2VfcHRhYmxlICpwOyB1bnNpZ25lZCBpOyBwdWJsaWM6IHBsYWNl
X3B0YWJsZV9pdGVyYXRvcihwbGFjZV9wdGFibGUgKik7IGludCBuZXh0KGNvbnN0IGNoYXIgKios
IHBsYWNlICoqKTsgfTsgY2xhc3MgcGxhY2VfcHRhYmxlIHsgcGxhY2VfcGFzc29jICp2OyB1bnNp
Z25lZCBzaXplOyB1bnNpZ25lZCB1c2VkOyBlbnVtIHsgRlVMTF9OVU0gPSAyLCBGVUxMX0RFTiA9
IDMsIElOSVRJQUxfU0laRSA9IDE3IH07IHB1YmxpYzogcGxhY2VfcHRhYmxlKCk7IH5wbGFjZV9w
dGFibGUoKTsgdm9pZCBkZWZpbmUoY29uc3QgY2hhciAqLCBwbGFjZSAqKTsgcGxhY2UgKmxvb2t1
cChjb25zdCBjaGFyICopOyBmcmllbmQgY2xhc3MgcGxhY2VfcHRhYmxlX2l0ZXJhdG9yOyB9OwoK
CmVudW0gZGlyZWN0aW9uIHsKICBSSUdIVF9ESVJFQ1RJT04sCiAgVVBfRElSRUNUSU9OLAogIExF
RlRfRElSRUNUSU9OLAogIERPV05fRElSRUNUSU9OCiAgfTsKCnN0cnVjdCBncmFwaGljc19zdGF0
ZSB7CiAgZG91YmxlIHgsIHk7CiAgZGlyZWN0aW9uIGRpcjsKfTsKCnN0cnVjdCBzYXZlZF9zdGF0
ZSA6IHB1YmxpYyBncmFwaGljc19zdGF0ZSB7CiAgc2F2ZWRfc3RhdGUgKnByZXY7CiAgcGxhY2Vf
cHRhYmxlICp0Ymw7Cn07CgoKc3RydWN0IHRleHRfaXRlbSB7CiAgdGV4dF9pdGVtICpuZXh0Owog
IGNoYXIgKnRleHQ7CiAgYWRqdXN0bWVudCBhZGo7CiAgY29uc3QgY2hhciAqZmlsZW5hbWU7CiAg
aW50IGxpbmVubzsKCiAgdGV4dF9pdGVtKGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOwogIH50
ZXh0X2l0ZW0oKTsKfTsKCmNvbnN0IHVuc2lnbmVkIGxvbmcgSVNfRE9UVEVEID0gMDE7CmNvbnN0
IHVuc2lnbmVkIGxvbmcgSVNfREFTSEVEID0gMDI7CmNvbnN0IHVuc2lnbmVkIGxvbmcgSVNfQ0xP
Q0tXSVNFID0gMDQ7CmNvbnN0IHVuc2lnbmVkIGxvbmcgSVNfSU5WSVNJQkxFID0gMDIwOwpjb25z
dCB1bnNpZ25lZCBsb25nIEhBU19MRUZUX0FSUk9XX0hFQUQgPSAwNDA7CmNvbnN0IHVuc2lnbmVk
IGxvbmcgSEFTX1JJR0hUX0FSUk9XX0hFQUQgPSAwMTAwOwpjb25zdCB1bnNpZ25lZCBsb25nIEhB
U19TRUdNRU5UID0gMDIwMDsKY29uc3QgdW5zaWduZWQgbG9uZyBJU19TQU1FID0gMDQwMDsKY29u
c3QgdW5zaWduZWQgbG9uZyBIQVNfRlJPTSA9IDAxMDAwOwpjb25zdCB1bnNpZ25lZCBsb25nIEhB
U19BVCA9IDAyMDAwOwpjb25zdCB1bnNpZ25lZCBsb25nIEhBU19XSVRIID0gMDQwMDA7CmNvbnN0
IHVuc2lnbmVkIGxvbmcgSEFTX0hFSUdIVCA9IDAxMDAwMDsKY29uc3QgdW5zaWduZWQgbG9uZyBI
QVNfV0lEVEggPSAwMjAwMDA7CmNvbnN0IHVuc2lnbmVkIGxvbmcgSEFTX1JBRElVUyA9IDA0MDAw
MDsKY29uc3QgdW5zaWduZWQgbG9uZyBIQVNfVE8gPSAwMTAwMDAwOwpjb25zdCB1bnNpZ25lZCBs
b25nIElTX0NIT1BQRUQgPSAwMjAwMDAwOwpjb25zdCB1bnNpZ25lZCBsb25nIElTX0RFRkFVTFRf
Q0hPUFBFRCA9IDA0MDAwMDA7CmNvbnN0IHVuc2lnbmVkIGxvbmcgSEFTX1RISUNLTkVTUyA9IDAx
MDAwMDAwOwpjb25zdCB1bnNpZ25lZCBsb25nIElTX0ZJTExFRCA9IDAyMDAwMDAwOwpjb25zdCB1
bnNpZ25lZCBsb25nIElTX0RFRkFVTFRfRklMTEVEID0gMDQwMDAwMDA7CmNvbnN0IHVuc2lnbmVk
IGxvbmcgSVNfQUxJR05FRCA9IDAxMDAwMDAwMDsKY29uc3QgdW5zaWduZWQgbG9uZyBJU19TSEFE
RUQgPSAwMjAwMDAwMDA7CmNvbnN0IHVuc2lnbmVkIGxvbmcgSVNfT1VUTElORUQgPSAwNDAwMDAw
MDA7CgpzdHJ1Y3Qgc2VnbWVudCB7CiAgaW50IGlzX2Fic29sdXRlOwogIHBvc2l0aW9uIHBvczsK
ICBzZWdtZW50ICpuZXh0OwogIHNlZ21lbnQoY29uc3QgcG9zaXRpb24gJiwgaW50LCBzZWdtZW50
ICopOwp9OwoKc3RydWN0IHJlY3RhbmdsZV9vYmplY3Q7CnN0cnVjdCBncmFwaGljX29iamVjdDsK
c3RydWN0IGxpbmVhcl9vYmplY3Q7CgpzdHJ1Y3Qgb2JqZWN0X3NwZWMgewogIHVuc2lnbmVkIGxv
bmcgZmxhZ3M7CiAgb2JqZWN0X3R5cGUgdHlwZTsKICBvYmplY3RfbGlzdCBvYmxpc3Q7CiAgcGxh
Y2VfcHRhYmxlICp0Ymw7CiAgZG91YmxlIGRhc2hfd2lkdGg7CiAgcG9zaXRpb24gZnJvbTsKICBw
b3NpdGlvbiB0bzsKICBwb3NpdGlvbiBhdDsKICBwb3NpdGlvbiBieTsKICBwYXRoICp3aXRoOwog
IHRleHRfaXRlbSAqdGV4dDsKICBkb3VibGUgaGVpZ2h0OwogIGRvdWJsZSByYWRpdXM7CiAgZG91
YmxlIHdpZHRoOwogIGRvdWJsZSBzZWdtZW50X3dpZHRoOwogIGRvdWJsZSBzZWdtZW50X2hlaWdo
dDsKICBkb3VibGUgc3RhcnRfY2hvcDsKICBkb3VibGUgZW5kX2Nob3A7CiAgZG91YmxlIHRoaWNr
bmVzczsKICBkb3VibGUgZmlsbDsKICBjaGFyICpzaGFkZWQ7CiAgY2hhciAqb3V0bGluZWQ7CiAg
ZGlyZWN0aW9uIGRpcjsKICBzZWdtZW50ICpzZWdtZW50X2xpc3Q7CiAgcG9zaXRpb24gc2VnbWVu
dF9wb3M7CiAgaW50IHNlZ21lbnRfaXNfYWJzb2x1dGU7CgogIG9iamVjdF9zcGVjKG9iamVjdF90
eXBlKTsKICB+b2JqZWN0X3NwZWMoKTsKICBvYmplY3QgKm1ha2Vfb2JqZWN0KHBvc2l0aW9uICos
IGRpcmVjdGlvbiAqKTsKICBncmFwaGljX29iamVjdCAqbWFrZV9ib3gocG9zaXRpb24gKiwgZGly
ZWN0aW9uICopOwogIGdyYXBoaWNfb2JqZWN0ICptYWtlX2Jsb2NrKHBvc2l0aW9uICosIGRpcmVj
dGlvbiAqKTsKICBncmFwaGljX29iamVjdCAqbWFrZV90ZXh0KHBvc2l0aW9uICosIGRpcmVjdGlv
biAqKTsKICBncmFwaGljX29iamVjdCAqbWFrZV9lbGxpcHNlKHBvc2l0aW9uICosIGRpcmVjdGlv
biAqKTsKICBncmFwaGljX29iamVjdCAqbWFrZV9jaXJjbGUocG9zaXRpb24gKiwgZGlyZWN0aW9u
ICopOwogIGxpbmVhcl9vYmplY3QgKm1ha2VfbGluZShwb3NpdGlvbiAqLCBkaXJlY3Rpb24gKik7
CiAgbGluZWFyX29iamVjdCAqbWFrZV9hcmMocG9zaXRpb24gKiwgZGlyZWN0aW9uICopOwogIGdy
YXBoaWNfb2JqZWN0ICptYWtlX2xpbmVhcihwb3NpdGlvbiAqLCBkaXJlY3Rpb24gKik7CiAgZ3Jh
cGhpY19vYmplY3QgKm1ha2VfbW92ZShwb3NpdGlvbiAqLCBkaXJlY3Rpb24gKik7CiAgaW50IHBv
c2l0aW9uX3JlY3RhbmdsZShyZWN0YW5nbGVfb2JqZWN0ICpwLCBwb3NpdGlvbiAqY3VycG9zLAog
ICAgZGlyZWN0aW9uICpkaXJwKTsKfTsKCgpvYmplY3QgKm1ha2Vfb2JqZWN0KG9iamVjdF9zcGVj
ICosIHBvc2l0aW9uICosIGRpcmVjdGlvbiAqKTsKCm9iamVjdCAqbWFrZV9tYXJrX29iamVjdCgp
OwpvYmplY3QgKm1ha2VfY29tbWFuZF9vYmplY3QoY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7
CgppbnQgbG9va3VwX3ZhcmlhYmxlKGNvbnN0IGNoYXIgKm5hbWUsIGRvdWJsZSAqdmFsKTsKdm9p
ZCBkZWZpbmVfdmFyaWFibGUoY29uc3QgY2hhciAqbmFtZSwgZG91YmxlIHZhbCk7Cgp2b2lkIHBy
aW50X3BpY3R1cmUob2JqZWN0ICopOwojIDI1ICJvYmplY3QuY3BwIiAyCgp2b2lkIHByaW50X29i
amVjdF9saXN0KG9iamVjdCAqKTsKCmxpbmVfdHlwZTo6bGluZV90eXBlKCkKOiB0eXBlKHNvbGlk
KSwgdGhpY2tuZXNzKDEuMCkKewp9CgpvdXRwdXQ6Om91dHB1dCgpIDogYXJncygwKSwgZGVzaXJl
ZF9oZWlnaHQoMC4wKSwgZGVzaXJlZF93aWR0aCgwLjApCnsKfQoKb3V0cHV0Ojp+b3V0cHV0KCkK
ewogIGRlbGV0ZSBbXSBhcmdzOwp9Cgp2b2lkIG91dHB1dDo6c2V0X2Rlc2lyZWRfd2lkdGhfaGVp
Z2h0KGRvdWJsZSB3aWQsIGRvdWJsZSBodCkKewogIGRlc2lyZWRfd2lkdGggPSB3aWQ7CiAgZGVz
aXJlZF9oZWlnaHQgPSBodDsKfQoKdm9pZCBvdXRwdXQ6OnNldF9hcmdzKGNvbnN0IGNoYXIgKnMp
CnsKICBkZWxldGUgW10gYXJnczsKICBpZiAocyA9PSAwIHx8ICpzID09ICdcMCcpCiAgICBhcmdz
ID0gMDsKICBlbHNlCiAgICBhcmdzID0gc3Ryc2F2ZShzKTsKfQoKaW50IG91dHB1dDo6c3VwcG9y
dHNfZmlsbGVkX3BvbHlnb25zKCkKewogIHJldHVybiAwOwp9Cgp2b2lkIG91dHB1dDo6YmVnaW5f
YmxvY2soY29uc3QgcG9zaXRpb24gJiwgY29uc3QgcG9zaXRpb24gJikKewp9Cgp2b2lkIG91dHB1
dDo6ZW5kX2Jsb2NrKCkKewp9Cgpkb3VibGUgb3V0cHV0Ojpjb21wdXRlX3NjYWxlKGRvdWJsZSBz
YywgY29uc3QgcG9zaXRpb24gJmxsLCBjb25zdCBwb3NpdGlvbiAmdXIpCnsKICBkaXN0YW5jZSBk
aW0gPSB1ciAtIGxsOwogIGlmIChkZXNpcmVkX3dpZHRoICE9IDAuMCB8fCBkZXNpcmVkX2hlaWdo
dCAhPSAwLjApIHsKICAgIHNjID0gMC4wOwogICAgaWYgKGRlc2lyZWRfd2lkdGggIT0gMC4wKSB7
CiAgICAgIGlmIChkaW0ueCA9PSAwLjApCiBlcnJvcigid2lkdGggc3BlY2lmaWVkIGZvciBwaWN0
dXJlIHdpdGggemVybyB3aWR0aCIpOwogICAgICBlbHNlCiBzYyA9IGRpbS54L2Rlc2lyZWRfd2lk
dGg7CiAgICB9CiAgICBpZiAoZGVzaXJlZF9oZWlnaHQgIT0gMC4wKSB7CiAgICAgIGlmIChkaW0u
eSA9PSAwLjApCiBlcnJvcigiaGVpZ2h0IHNwZWNpZmllZCBmb3IgcGljdHVyZSB3aXRoIHplcm8g
aGVpZ2h0Iik7CiAgICAgIGVsc2UgewogZG91YmxlIHRlbSA9IGRpbS55L2Rlc2lyZWRfaGVpZ2h0
OwogaWYgKHRlbSA+IHNjKQogICBzYyA9IHRlbTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHNj
ID09IDAuMCA/IDEuMCA6IHNjOwogIH0KICBlbHNlIHsKICAgIGlmIChzYyA8PSAwLjApCiAgICAg
IHNjID0gMS4wOwogICAgZGlzdGFuY2Ugc2RpbSA9IGRpbS9zYzsKICAgIGRvdWJsZSBtYXhfd2lk
dGggPSAwLjA7CiAgICBsb29rdXBfdmFyaWFibGUoIm1heHBzd2lkIiwgJm1heF93aWR0aCk7CiAg
ICBkb3VibGUgbWF4X2hlaWdodCA9IDAuMDsKICAgIGxvb2t1cF92YXJpYWJsZSgibWF4cHNodCIs
ICZtYXhfaGVpZ2h0KTsKICAgIGlmICgobWF4X3dpZHRoID4gMC4wICYmIHNkaW0ueCA+IG1heF93
aWR0aCkKIHx8IChtYXhfaGVpZ2h0ID4gMC4wICYmIHNkaW0ueSA+IG1heF9oZWlnaHQpKSB7CiAg
ICAgIGRvdWJsZSB4c2NhbGUgPSBkaW0ueC9tYXhfd2lkdGg7CiAgICAgIGRvdWJsZSB5c2NhbGUg
PSBkaW0ueS9tYXhfaGVpZ2h0OwogICAgICByZXR1cm4geHNjYWxlID4geXNjYWxlID8geHNjYWxl
IDogeXNjYWxlOwogICAgfQogICAgZWxzZQogICAgICByZXR1cm4gc2M7CiAgfQp9Cgpwb3NpdGlv
bjo6cG9zaXRpb24oY29uc3QgcGxhY2UgJnBsKQp7CiAgaWYgKHBsLm9iaiAhPSAwKSB7CgogICAg
b2JqZWN0ICp0ZW0gPSBwbC5vYmo7CiAgICAqdGhpcyA9IHRlbS0+b3JpZ2luKCk7CiAgfQogIGVs
c2UgewogICAgeCA9IHBsLng7CiAgICB5ID0gcGwueTsKICB9Cn0KCnBvc2l0aW9uOjpwb3NpdGlv
bigpIDogeCgwLjApLCB5KDAuMCkKewp9Cgpwb3NpdGlvbjo6cG9zaXRpb24oZG91YmxlIGEsIGRv
dWJsZSBiKSA6IHgoYSksIHkoYikKewp9CgoKaW50IG9wZXJhdG9yPT0oY29uc3QgcG9zaXRpb24g
JmEsIGNvbnN0IHBvc2l0aW9uICZiKQp7CiAgcmV0dXJuIGEueCA9PSBiLnggJiYgYS55ID09IGIu
eTsKfQoKaW50IG9wZXJhdG9yIT0oY29uc3QgcG9zaXRpb24gJmEsIGNvbnN0IHBvc2l0aW9uICZi
KQp7CiAgcmV0dXJuIGEueCAhPSBiLnggfHwgYS55ICE9IGIueTsKfQoKcG9zaXRpb24gJnBvc2l0
aW9uOjpvcGVyYXRvcis9KGNvbnN0IHBvc2l0aW9uICZhKQp7CiAgeCArPSBhLng7CiAgeSArPSBh
Lnk7CiAgcmV0dXJuICp0aGlzOwp9Cgpwb3NpdGlvbiAmcG9zaXRpb246Om9wZXJhdG9yLT0oY29u
c3QgcG9zaXRpb24gJmEpCnsKICB4IC09IGEueDsKICB5IC09IGEueTsKICByZXR1cm4gKnRoaXM7
Cn0KCnBvc2l0aW9uICZwb3NpdGlvbjo6b3BlcmF0b3IqPShkb3VibGUgYSkKewogIHggKj0gYTsK
ICB5ICo9IGE7CiAgcmV0dXJuICp0aGlzOwp9Cgpwb3NpdGlvbiAmcG9zaXRpb246Om9wZXJhdG9y
Lz0oZG91YmxlIGEpCnsKICB4IC89IGE7CiAgeSAvPSBhOwogIHJldHVybiAqdGhpczsKfQoKcG9z
aXRpb24gb3BlcmF0b3ItKGNvbnN0IHBvc2l0aW9uICZhKQp7CiAgcmV0dXJuIHBvc2l0aW9uKC1h
LngsIC1hLnkpOwp9Cgpwb3NpdGlvbiBvcGVyYXRvcisoY29uc3QgcG9zaXRpb24gJmEsIGNvbnN0
IHBvc2l0aW9uICZiKQp7CiAgcmV0dXJuIHBvc2l0aW9uKGEueCArIGIueCwgYS55ICsgYi55KTsK
fQoKcG9zaXRpb24gb3BlcmF0b3ItKGNvbnN0IHBvc2l0aW9uICZhLCBjb25zdCBwb3NpdGlvbiAm
YikKewogIHJldHVybiBwb3NpdGlvbihhLnggLSBiLngsIGEueSAtIGIueSk7Cn0KCnBvc2l0aW9u
IG9wZXJhdG9yLyhjb25zdCBwb3NpdGlvbiAmYSwgZG91YmxlIG4pCnsKICByZXR1cm4gcG9zaXRp
b24oYS54L24sIGEueS9uKTsKfQoKcG9zaXRpb24gb3BlcmF0b3IqKGNvbnN0IHBvc2l0aW9uICZh
LCBkb3VibGUgbikKewogIHJldHVybiBwb3NpdGlvbihhLngqbiwgYS55Km4pOwp9CgoKCmRvdWJs
ZSBvcGVyYXRvciooY29uc3QgcG9zaXRpb24gJmEsIGNvbnN0IHBvc2l0aW9uICZiKQp7CiAgcmV0
dXJuIGEueCpiLnggKyBhLnkqYi55Owp9Cgpkb3VibGUgaHlwb3QoY29uc3QgcG9zaXRpb24gJmEp
CnsKICByZXR1cm4gaHlwb3QoYS54LCBhLnkpOwp9CgpzdHJ1Y3QgYXJyb3dfaGVhZF90eXBlIHsK
ICBkb3VibGUgaGVpZ2h0OwogIGRvdWJsZSB3aWR0aDsKICBpbnQgc29saWQ7Cn07Cgp2b2lkIGRy
YXdfYXJyb3coY29uc3QgcG9zaXRpb24gJnBvcywgY29uc3QgZGlzdGFuY2UgJmRpciwKICBjb25z
dCBhcnJvd19oZWFkX3R5cGUgJmFodCwgY29uc3QgbGluZV90eXBlICZsdCwKICBjaGFyICpvdXRs
aW5lX2NvbG9yX2Zvcl9maWxsKQp7CiAgZG91YmxlIGh5cCA9IGh5cG90KGRpcik7CiAgaWYgKGh5
cCA9PSAwLjApIHsKICAgIGVycm9yKCJjYW5ub3QgZHJhdyBhcnJvdyBvbiBvYmplY3Qgd2l0aCB6
ZXJvIGxlbmd0aCIpOwogICAgcmV0dXJuOwogIH0KICBwb3NpdGlvbiBiYXNlID0gLWRpcjsKICBi
YXNlICo9IGFodC5oZWlnaHQvaHlwOwogIHBvc2l0aW9uIG4oZGlyLnksIC1kaXIueCk7CiAgbiAq
PSBhaHQud2lkdGgvKGh5cCoyLjApOwogIGxpbmVfdHlwZSBzbHQgPSBsdDsKICBzbHQudHlwZSA9
IGxpbmVfdHlwZTo6c29saWQ7CiAgaWYgKGFodC5zb2xpZCAmJiBvdXQtPnN1cHBvcnRzX2ZpbGxl
ZF9wb2x5Z29ucygpKSB7CiAgICBwb3NpdGlvbiB2WzNdOwogICAgdlswXSA9IHBvczsKICAgIHZb
MV0gPSBwb3MgKyBiYXNlICsgbjsKICAgIHZbMl0gPSBwb3MgKyBiYXNlIC0gbjsKCiAgICBvdXQt
PnNldF9jb2xvcihvdXRsaW5lX2NvbG9yX2Zvcl9maWxsLCBvdXRsaW5lX2NvbG9yX2Zvcl9maWxs
KTsKICAgIG91dC0+cG9seWdvbih2LCAzLCBzbHQsIDEpOwogIH0KICBlbHNlIHsKICAgIHBvc2l0
aW9uIHZbMl07CiAgICB2WzBdID0gcG9zOwogICAgdlsxXSA9IHBvcyArIGJhc2UgKyBuOwogICAg
b3V0LT5saW5lKHBvcyArIGJhc2UgLSBuLCB2LCAyLCBzbHQpOwogIH0KfQoKb2JqZWN0OjpvYmpl
Y3QoKSA6IHByZXYoMCksIG5leHQoMCkKewp9CgpvYmplY3Q6On5vYmplY3QoKQp7Cn0KCnZvaWQg
b2JqZWN0Ojptb3ZlX2J5KGNvbnN0IHBvc2l0aW9uICYpCnsKfQoKdm9pZCBvYmplY3Q6OnByaW50
KCkKewp9Cgp2b2lkIG9iamVjdDo6cHJpbnRfdGV4dCgpCnsKfQoKaW50IG9iamVjdDo6Ymxhbmso
KQp7CiAgcmV0dXJuIDA7Cn0KCnN0cnVjdCBib3VuZGluZ19ib3ggewogIGludCBibGFuazsKICBw
b3NpdGlvbiBsbDsKICBwb3NpdGlvbiB1cjsKCiAgYm91bmRpbmdfYm94KCk7CiAgdm9pZCBlbmNv
bXBhc3MoY29uc3QgcG9zaXRpb24gJik7Cn07Cgpib3VuZGluZ19ib3g6OmJvdW5kaW5nX2JveCgp
CjogYmxhbmsoMSkKewp9Cgp2b2lkIGJvdW5kaW5nX2JveDo6ZW5jb21wYXNzKGNvbnN0IHBvc2l0
aW9uICZwb3MpCnsKICBpZiAoYmxhbmspIHsKICAgIGxsID0gcG9zOwogICAgdXIgPSBwb3M7CiAg
ICBibGFuayA9IDA7CiAgfQogIGVsc2UgewogICAgaWYgKHBvcy54IDwgbGwueCkKICAgICAgbGwu
eCA9IHBvcy54OwogICAgaWYgKHBvcy55IDwgbGwueSkKICAgICAgbGwueSA9IHBvcy55OwogICAg
aWYgKHBvcy54ID4gdXIueCkKICAgICAgdXIueCA9IHBvcy54OwogICAgaWYgKHBvcy55ID4gdXIu
eSkKICAgICAgdXIueSA9IHBvcy55OwogIH0KfQoKdm9pZCBvYmplY3Q6OnVwZGF0ZV9ib3VuZGlu
Z19ib3goYm91bmRpbmdfYm94ICopCnsKfQoKcG9zaXRpb24gb2JqZWN0OjpvcmlnaW4oKQp7CiAg
cmV0dXJuIHBvc2l0aW9uKDAuMCwwLjApOwp9Cgpwb3NpdGlvbiBvYmplY3Q6Om5vcnRoKCkKewog
IHJldHVybiBvcmlnaW4oKTsKfQoKcG9zaXRpb24gb2JqZWN0Ojpzb3V0aCgpCnsKICByZXR1cm4g
b3JpZ2luKCk7Cn0KCnBvc2l0aW9uIG9iamVjdDo6ZWFzdCgpCnsKICByZXR1cm4gb3JpZ2luKCk7
Cn0KCnBvc2l0aW9uIG9iamVjdDo6d2VzdCgpCnsKICByZXR1cm4gb3JpZ2luKCk7Cn0KCnBvc2l0
aW9uIG9iamVjdDo6bm9ydGhfZWFzdCgpCnsKICByZXR1cm4gb3JpZ2luKCk7Cn0KCnBvc2l0aW9u
IG9iamVjdDo6bm9ydGhfd2VzdCgpCnsKICByZXR1cm4gb3JpZ2luKCk7Cn0KCnBvc2l0aW9uIG9i
amVjdDo6c291dGhfZWFzdCgpCnsKICByZXR1cm4gb3JpZ2luKCk7Cn0KCnBvc2l0aW9uIG9iamVj
dDo6c291dGhfd2VzdCgpCnsKICByZXR1cm4gb3JpZ2luKCk7Cn0KCnBvc2l0aW9uIG9iamVjdDo6
c3RhcnQoKQp7CiAgcmV0dXJuIG9yaWdpbigpOwp9Cgpwb3NpdGlvbiBvYmplY3Q6OmVuZCgpCnsK
ICByZXR1cm4gb3JpZ2luKCk7Cn0KCnBvc2l0aW9uIG9iamVjdDo6Y2VudGVyKCkKewogIHJldHVy
biBvcmlnaW4oKTsKfQoKZG91YmxlIG9iamVjdDo6d2lkdGgoKQp7CiAgcmV0dXJuIDAuMDsKfQoK
ZG91YmxlIG9iamVjdDo6cmFkaXVzKCkKewogIHJldHVybiAwLjA7Cn0KCmRvdWJsZSBvYmplY3Q6
OmhlaWdodCgpCnsKICByZXR1cm4gMC4wOwp9CgpwbGFjZSAqb2JqZWN0OjpmaW5kX2xhYmVsKGNv
bnN0IGNoYXIgKikKewogIHJldHVybiAwOwp9CgpzZWdtZW50OjpzZWdtZW50KGNvbnN0IHBvc2l0
aW9uICZhLCBpbnQgbiwgc2VnbWVudCAqcCkKOiBpc19hYnNvbHV0ZShuKSwgcG9zKGEpLCBuZXh0
KHApCnsKfQoKdGV4dF9pdGVtOjp0ZXh0X2l0ZW0oY2hhciAqdCwgY29uc3QgY2hhciAqZm4sIGlu
dCBsbikKOiBuZXh0KDApLCB0ZXh0KHQpLCBmaWxlbmFtZShmbiksIGxpbmVubyhsbikKewogIGFk
ai5oID0gQ0VOVEVSX0FESlVTVDsKICBhZGoudiA9IE5PTkVfQURKVVNUOwp9Cgp0ZXh0X2l0ZW06
On50ZXh0X2l0ZW0oKQp7CiAgZGVsZXRlIFtdIHRleHQ7Cn0KCm9iamVjdF9zcGVjOjpvYmplY3Rf
c3BlYyhvYmplY3RfdHlwZSB0KSA6IHR5cGUodCkKewogIGZsYWdzID0gMDsKICB0YmwgPSAwOwog
IHNlZ21lbnRfbGlzdCA9IDA7CiAgc2VnbWVudF93aWR0aCA9IHNlZ21lbnRfaGVpZ2h0ID0gMC4w
OwogIHNlZ21lbnRfaXNfYWJzb2x1dGUgPSAwOwogIHRleHQgPSAwOwogIHNoYWRlZCA9IDA7CiAg
b3V0bGluZWQgPSAwOwogIHdpdGggPSAwOwogIGRpciA9IFJJR0hUX0RJUkVDVElPTjsKfQoKb2Jq
ZWN0X3NwZWM6On5vYmplY3Rfc3BlYygpCnsKICBkZWxldGUgdGJsOwogIHdoaWxlIChzZWdtZW50
X2xpc3QgIT0gMCkgewogICAgc2VnbWVudCAqdGVtID0gc2VnbWVudF9saXN0OwogICAgc2VnbWVu
dF9saXN0ID0gc2VnbWVudF9saXN0LT5uZXh0OwogICAgZGVsZXRlIHRlbTsKICB9CiAgb2JqZWN0
ICpwID0gb2JsaXN0LmhlYWQ7CiAgd2hpbGUgKHAgIT0gMCkgewogICAgb2JqZWN0ICp0ZW0gPSBw
OwogICAgcCA9IHAtPm5leHQ7CiAgICBkZWxldGUgdGVtOwogIH0KICB3aGlsZSAodGV4dCAhPSAw
KSB7CiAgICB0ZXh0X2l0ZW0gKnRlbSA9IHRleHQ7CiAgICB0ZXh0ID0gdGV4dC0+bmV4dDsKICAg
IGRlbGV0ZSB0ZW07CiAgfQogIGRlbGV0ZSB3aXRoOwogIGRlbGV0ZSBbXSBzaGFkZWQ7CiAgZGVs
ZXRlIFtdIG91dGxpbmVkOwp9CgpjbGFzcyBjb21tYW5kX29iamVjdCA6IHB1YmxpYyBvYmplY3Qg
ewogIGNoYXIgKnM7CiAgY29uc3QgY2hhciAqZmlsZW5hbWU7CiAgaW50IGxpbmVubzsKcHVibGlj
OgogIGNvbW1hbmRfb2JqZWN0KGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOwogIH5jb21tYW5k
X29iamVjdCgpOwogIG9iamVjdF90eXBlIHR5cGUoKSB7IHJldHVybiBPVEhFUl9PQkpFQ1Q7IH0K
ICB2b2lkIHByaW50KCk7Cn07Cgpjb21tYW5kX29iamVjdDo6Y29tbWFuZF9vYmplY3QoY2hhciAq
cCwgY29uc3QgY2hhciAqZm4sIGludCBsbikKOiBzKHApLCBmaWxlbmFtZShmbiksIGxpbmVubyhs
bikKewp9Cgpjb21tYW5kX29iamVjdDo6fmNvbW1hbmRfb2JqZWN0KCkKewogIGRlbGV0ZSBbXSBz
Owp9Cgp2b2lkIGNvbW1hbmRfb2JqZWN0OjpwcmludCgpCnsKICBvdXQtPmNvbW1hbmQocywgZmls
ZW5hbWUsIGxpbmVubyk7Cn0KCm9iamVjdCAqbWFrZV9jb21tYW5kX29iamVjdChjaGFyICpzLCBj
b25zdCBjaGFyICpmbiwgaW50IGxuKQp7CiAgcmV0dXJuIG5ldyBjb21tYW5kX29iamVjdChzLCBm
biwgbG4pOwp9CgpjbGFzcyBtYXJrX29iamVjdCA6IHB1YmxpYyBvYmplY3QgewpwdWJsaWM6CiAg
bWFya19vYmplY3QoKTsKICBvYmplY3RfdHlwZSB0eXBlKCk7Cn07CgpvYmplY3QgKm1ha2VfbWFy
a19vYmplY3QoKQp7CiAgcmV0dXJuIG5ldyBtYXJrX29iamVjdCgpOwp9CgptYXJrX29iamVjdDo6
bWFya19vYmplY3QoKQp7Cn0KCm9iamVjdF90eXBlIG1hcmtfb2JqZWN0Ojp0eXBlKCkKewogIHJl
dHVybiBNQVJLX09CSkVDVDsKfQoKb2JqZWN0X2xpc3Q6Om9iamVjdF9saXN0KCkgOiBoZWFkKDAp
LCB0YWlsKDApCnsKfQoKdm9pZCBvYmplY3RfbGlzdDo6YXBwZW5kKG9iamVjdCAqb2JqKQp7CiAg
aWYgKHRhaWwgPT0gMCkgewogICAgb2JqLT5uZXh0ID0gb2JqLT5wcmV2ID0gMDsKICAgIGhlYWQg
PSB0YWlsID0gb2JqOwogIH0KICBlbHNlIHsKICAgIG9iai0+cHJldiA9IHRhaWw7CiAgICBvYmot
Pm5leHQgPSAwOwogICAgdGFpbC0+bmV4dCA9IG9iajsKICAgIHRhaWwgPSBvYmo7CiAgfQp9Cgp2
b2lkIG9iamVjdF9saXN0Ojp3cmFwX3VwX2Jsb2NrKG9iamVjdF9saXN0ICpvbCkKewogIG9iamVj
dCAqcDsKICBmb3IgKHAgPSB0YWlsOyBwICYmIHAtPnR5cGUoKSAhPSBNQVJLX09CSkVDVDsgcCA9
IHAtPnByZXYpCiAgICA7CiAgZG9fYXNzZXJ0KHAgIT0gMCwgNTE3LCAib2JqZWN0LmNwcCIpOwog
IG9sLT5oZWFkID0gcC0+bmV4dDsKICBpZiAob2wtPmhlYWQpIHsKICAgIG9sLT50YWlsID0gdGFp
bDsKICAgIG9sLT5oZWFkLT5wcmV2ID0gMDsKICB9CiAgZWxzZQogICAgb2wtPnRhaWwgPSAwOwog
IHRhaWwgPSBwLT5wcmV2OwogIGlmICh0YWlsKQogICAgdGFpbC0+bmV4dCA9IDA7CiAgZWxzZQog
ICAgaGVhZCA9IDA7CiAgZGVsZXRlIHA7Cn0KCnRleHRfcGllY2U6OnRleHRfcGllY2UoKQo6IHRl
eHQoMCksIGZpbGVuYW1lKDApLCBsaW5lbm8oLTEpCnsKICBhZGouaCA9IENFTlRFUl9BREpVU1Q7
CiAgYWRqLnYgPSBOT05FX0FESlVTVDsKfQoKdGV4dF9waWVjZTo6fnRleHRfcGllY2UoKQp7CiAg
ZGVsZXRlIFtdIHRleHQ7Cn0KCmNsYXNzIGdyYXBoaWNfb2JqZWN0IDogcHVibGljIG9iamVjdCB7
CiAgaW50IG50ZXh0OwogIHRleHRfcGllY2UgKnRleHQ7CiAgaW50IGFsaWduZWQ7CnByb3RlY3Rl
ZDoKICBsaW5lX3R5cGUgbHQ7CiAgY2hhciAqb3V0bGluZV9jb2xvcjsKICBjaGFyICpjb2xvcl9m
aWxsOwpwdWJsaWM6CiAgZ3JhcGhpY19vYmplY3QoKTsKICB+Z3JhcGhpY19vYmplY3QoKTsKICBv
YmplY3RfdHlwZSB0eXBlKCkgPSAwOwogIHZvaWQgcHJpbnRfdGV4dCgpOwogIHZvaWQgYWRkX3Rl
eHQodGV4dF9pdGVtICosIGludCk7CiAgdm9pZCBzZXRfZG90dGVkKGRvdWJsZSk7CiAgdm9pZCBz
ZXRfZGFzaGVkKGRvdWJsZSk7CiAgdm9pZCBzZXRfdGhpY2tuZXNzKGRvdWJsZSk7CiAgdm9pZCBz
ZXRfaW52aXNpYmxlKCk7CiAgdm9pZCBzZXRfb3V0bGluZV9jb2xvcihjaGFyICopOwogIGNoYXIg
KmdldF9vdXRsaW5lX2NvbG9yKCk7CiAgdmlydHVhbCB2b2lkIHNldF9maWxsKGRvdWJsZSk7CiAg
dmlydHVhbCB2b2lkIHNldF9maWxsX2NvbG9yKGNoYXIgKik7Cn07CgpncmFwaGljX29iamVjdDo6
Z3JhcGhpY19vYmplY3QoKQo6IG50ZXh0KDApLCB0ZXh0KDApLCBhbGlnbmVkKDApLCBvdXRsaW5l
X2NvbG9yKDApLCBjb2xvcl9maWxsKDApCnsKfQoKdm9pZCBncmFwaGljX29iamVjdDo6c2V0X2Rv
dHRlZChkb3VibGUgd2lkKQp7CiAgbHQudHlwZSA9IGxpbmVfdHlwZTo6ZG90dGVkOwogIGx0LmRh
c2hfd2lkdGggPSB3aWQ7Cn0KCnZvaWQgZ3JhcGhpY19vYmplY3Q6OnNldF9kYXNoZWQoZG91Ymxl
IHdpZCkKewogIGx0LnR5cGUgPSBsaW5lX3R5cGU6OmRhc2hlZDsKICBsdC5kYXNoX3dpZHRoID0g
d2lkOwp9Cgp2b2lkIGdyYXBoaWNfb2JqZWN0OjpzZXRfdGhpY2tuZXNzKGRvdWJsZSB0aCkKewog
IGx0LnRoaWNrbmVzcyA9IHRoOwp9Cgp2b2lkIGdyYXBoaWNfb2JqZWN0OjpzZXRfZmlsbChkb3Vi
bGUpCnsKfQoKdm9pZCBncmFwaGljX29iamVjdDo6c2V0X2ZpbGxfY29sb3IoY2hhciAqYykKewog
IGNvbG9yX2ZpbGwgPSBzdHJzYXZlKGMpOwp9Cgp2b2lkIGdyYXBoaWNfb2JqZWN0OjpzZXRfb3V0
bGluZV9jb2xvcihjaGFyICpjKQp7CiAgb3V0bGluZV9jb2xvciA9IHN0cnNhdmUoYyk7Cn0KCmNo
YXIgKmdyYXBoaWNfb2JqZWN0OjpnZXRfb3V0bGluZV9jb2xvcigpCnsKICByZXR1cm4gb3V0bGlu
ZV9jb2xvcjsKfQoKdm9pZCBncmFwaGljX29iamVjdDo6c2V0X2ludmlzaWJsZSgpCnsKICBsdC50
eXBlID0gbGluZV90eXBlOjppbnZpc2libGU7Cn0KCnZvaWQgZ3JhcGhpY19vYmplY3Q6OmFkZF90
ZXh0KHRleHRfaXRlbSAqdCwgaW50IGEpCnsKICBhbGlnbmVkID0gYTsKICBpbnQgbGVuID0gMDsK
ICB0ZXh0X2l0ZW0gKnA7CiAgZm9yIChwID0gdDsgcDsgcCA9IHAtPm5leHQpCiAgICBsZW4rKzsK
ICBpZiAobGVuID09IDApCiAgICB0ZXh0ID0gMDsKICBlbHNlIHsKICAgIHRleHQgPSBuZXcgdGV4
dF9waWVjZVtsZW5dOwogICAgZm9yIChwID0gdCwgbGVuID0gMDsgcDsgcCA9IHAtPm5leHQsIGxl
bisrKSB7CiAgICAgIHRleHRbbGVuXS50ZXh0ID0gcC0+dGV4dDsKICAgICAgcC0+dGV4dCA9IDA7
CiAgICAgIHRleHRbbGVuXS5hZGogPSBwLT5hZGo7CiAgICAgIHRleHRbbGVuXS5maWxlbmFtZSA9
IHAtPmZpbGVuYW1lOwogICAgICB0ZXh0W2xlbl0ubGluZW5vID0gcC0+bGluZW5vOwogICAgfQog
IH0KICBudGV4dCA9IGxlbjsKfQoKdm9pZCBncmFwaGljX29iamVjdDo6cHJpbnRfdGV4dCgpCnsK
ICBkb3VibGUgYW5nbGUgPSAwLjA7CiAgaWYgKGFsaWduZWQpIHsKICAgIHBvc2l0aW9uIGQoZW5k
KCkgLSBzdGFydCgpKTsKICAgIGlmIChkLnggIT0gMC4wIHx8IGQueSAhPSAwLjApCiAgICAgIGFu
Z2xlID0gYXRhbjIoZC55LCBkLngpOwogIH0KICBpZiAodGV4dCAhPSAwKSB7CiAgICBvdXQtPnNl
dF9jb2xvcihjb2xvcl9maWxsLCBnZXRfb3V0bGluZV9jb2xvcigpKTsKICAgIG91dC0+dGV4dChj
ZW50ZXIoKSwgdGV4dCwgbnRleHQsIGFuZ2xlKTsKICAgIG91dC0+cmVzZXRfY29sb3IoKTsKICB9
Cn0KCmdyYXBoaWNfb2JqZWN0Ojp+Z3JhcGhpY19vYmplY3QoKQp7CiAgaWYgKHRleHQpCiAgICBk
ZWxldGUgW10gdGV4dDsKfQoKY2xhc3MgcmVjdGFuZ2xlX29iamVjdCA6IHB1YmxpYyBncmFwaGlj
X29iamVjdCB7CnByb3RlY3RlZDoKICBwb3NpdGlvbiBjZW50OwogIHBvc2l0aW9uIGRpbTsKcHVi
bGljOgogIHJlY3RhbmdsZV9vYmplY3QoY29uc3QgcG9zaXRpb24gJik7CiAgZG91YmxlIHdpZHRo
KCkgeyByZXR1cm4gZGltLng7IH0KICBkb3VibGUgaGVpZ2h0KCkgeyByZXR1cm4gZGltLnk7IH0K
ICBwb3NpdGlvbiBvcmlnaW4oKSB7IHJldHVybiBjZW50OyB9CiAgcG9zaXRpb24gY2VudGVyKCkg
eyByZXR1cm4gY2VudDsgfQogIHBvc2l0aW9uIG5vcnRoKCkgeyByZXR1cm4gcG9zaXRpb24oY2Vu
dC54LCBjZW50LnkgKyBkaW0ueS8yLjApOyB9CiAgcG9zaXRpb24gc291dGgoKSB7IHJldHVybiBw
b3NpdGlvbihjZW50LngsIGNlbnQueSAtIGRpbS55LzIuMCk7IH0KICBwb3NpdGlvbiBlYXN0KCkg
eyByZXR1cm4gcG9zaXRpb24oY2VudC54ICsgZGltLngvMi4wLCBjZW50LnkpOyB9CiAgcG9zaXRp
b24gd2VzdCgpIHsgcmV0dXJuIHBvc2l0aW9uKGNlbnQueCAtIGRpbS54LzIuMCwgY2VudC55KTsg
fQogIHBvc2l0aW9uIG5vcnRoX2Vhc3QoKSB7IHJldHVybiBwb3NpdGlvbihjZW50LnggKyBkaW0u
eC8yLjAsIGNlbnQueSArIGRpbS55LzIuMCk7IH0KICBwb3NpdGlvbiBub3J0aF93ZXN0KCkgeyBy
ZXR1cm4gcG9zaXRpb24oY2VudC54IC0gZGltLngvMi4wLCBjZW50LnkgKyBkaW0ueS8yLjApOyB9
CiAgcG9zaXRpb24gc291dGhfZWFzdCgpIHsgcmV0dXJuIHBvc2l0aW9uKGNlbnQueCArIGRpbS54
LzIuMCwgY2VudC55IC0gZGltLnkvMi4wKTsgfQogIHBvc2l0aW9uIHNvdXRoX3dlc3QoKSB7IHJl
dHVybiBwb3NpdGlvbihjZW50LnggLSBkaW0ueC8yLjAsIGNlbnQueSAtIGRpbS55LzIuMCk7IH0K
ICBvYmplY3RfdHlwZSB0eXBlKCkgPSAwOwogIHZvaWQgdXBkYXRlX2JvdW5kaW5nX2JveChib3Vu
ZGluZ19ib3ggKik7CiAgdm9pZCBtb3ZlX2J5KGNvbnN0IHBvc2l0aW9uICYpOwp9OwoKcmVjdGFu
Z2xlX29iamVjdDo6cmVjdGFuZ2xlX29iamVjdChjb25zdCBwb3NpdGlvbiAmZCkKOiBkaW0oZCkK
ewp9Cgp2b2lkIHJlY3RhbmdsZV9vYmplY3Q6OnVwZGF0ZV9ib3VuZGluZ19ib3goYm91bmRpbmdf
Ym94ICpwKQp7CiAgcC0+ZW5jb21wYXNzKGNlbnQgLSBkaW0vMi4wKTsKICBwLT5lbmNvbXBhc3Mo
Y2VudCArIGRpbS8yLjApOwp9Cgp2b2lkIHJlY3RhbmdsZV9vYmplY3Q6Om1vdmVfYnkoY29uc3Qg
cG9zaXRpb24gJmEpCnsKICBjZW50ICs9IGE7Cn0KCmNsYXNzIGNsb3NlZF9vYmplY3QgOiBwdWJs
aWMgcmVjdGFuZ2xlX29iamVjdCB7CnB1YmxpYzoKICBjbG9zZWRfb2JqZWN0KGNvbnN0IHBvc2l0
aW9uICYpOwogIG9iamVjdF90eXBlIHR5cGUoKSA9IDA7CiAgdm9pZCBzZXRfZmlsbChkb3VibGUp
OwogIHZvaWQgc2V0X2ZpbGxfY29sb3IoY2hhciAqZmlsbCk7CnByb3RlY3RlZDoKICBkb3VibGUg
ZmlsbDsKICBjaGFyICpjb2xvcl9maWxsOwp9OwoKY2xvc2VkX29iamVjdDo6Y2xvc2VkX29iamVj
dChjb25zdCBwb3NpdGlvbiAmcG9zKQo6IHJlY3RhbmdsZV9vYmplY3QocG9zKSwgZmlsbCgtMS4w
KSwgY29sb3JfZmlsbCgwKQp7Cn0KCnZvaWQgY2xvc2VkX29iamVjdDo6c2V0X2ZpbGwoZG91Ymxl
IGYpCnsKICBkb19hc3NlcnQoZiA+PSAwLjAsIDcxNSwgIm9iamVjdC5jcHAiKTsKICBmaWxsID0g
ZjsKfQoKdm9pZCBjbG9zZWRfb2JqZWN0OjpzZXRfZmlsbF9jb2xvcihjaGFyICpmaWxsKQp7CiAg
Y29sb3JfZmlsbCA9IHN0cnNhdmUoZmlsbCk7Cn0KCmNsYXNzIGJveF9vYmplY3QgOiBwdWJsaWMg
Y2xvc2VkX29iamVjdCB7CiAgZG91YmxlIHhyYWQ7CiAgZG91YmxlIHlyYWQ7CnB1YmxpYzoKICBi
b3hfb2JqZWN0KGNvbnN0IHBvc2l0aW9uICYsIGRvdWJsZSk7CiAgb2JqZWN0X3R5cGUgdHlwZSgp
IHsgcmV0dXJuIEJPWF9PQkpFQ1Q7IH0KICB2b2lkIHByaW50KCk7CiAgcG9zaXRpb24gbm9ydGhf
ZWFzdCgpOwogIHBvc2l0aW9uIG5vcnRoX3dlc3QoKTsKICBwb3NpdGlvbiBzb3V0aF9lYXN0KCk7
CiAgcG9zaXRpb24gc291dGhfd2VzdCgpOwp9OwoKYm94X29iamVjdDo6Ym94X29iamVjdChjb25z
dCBwb3NpdGlvbiAmcG9zLCBkb3VibGUgcikKOiBjbG9zZWRfb2JqZWN0KHBvcyksIHhyYWQoZGlt
LnggPiAwID8gciA6IC1yKSwgeXJhZChkaW0ueSA+IDAgPyByIDogLXIpCnsKfQoKY29uc3QgZG91
YmxlIENIT1BfRkFDVE9SID0gMS4wIC0gMS4wLzEuNDE0MjEzNTYyMzczMDk1MDQ4ODA7Cgpwb3Np
dGlvbiBib3hfb2JqZWN0Ojpub3J0aF9lYXN0KCkKewogIHJldHVybiBwb3NpdGlvbihjZW50Lngg
KyBkaW0ueC8yLjAgLSBDSE9QX0ZBQ1RPUip4cmFkLAogICAgY2VudC55ICsgZGltLnkvMi4wIC0g
Q0hPUF9GQUNUT1IqeXJhZCk7Cn0KCnBvc2l0aW9uIGJveF9vYmplY3Q6Om5vcnRoX3dlc3QoKQp7
CiAgcmV0dXJuIHBvc2l0aW9uKGNlbnQueCAtIGRpbS54LzIuMCArIENIT1BfRkFDVE9SKnhyYWQs
CiAgICBjZW50LnkgKyBkaW0ueS8yLjAgLSBDSE9QX0ZBQ1RPUip5cmFkKTsKfQoKcG9zaXRpb24g
Ym94X29iamVjdDo6c291dGhfZWFzdCgpCnsKICByZXR1cm4gcG9zaXRpb24oY2VudC54ICsgZGlt
LngvMi4wIC0gQ0hPUF9GQUNUT1IqeHJhZCwKICAgIGNlbnQueSAtIGRpbS55LzIuMCArIENIT1Bf
RkFDVE9SKnlyYWQpOwp9Cgpwb3NpdGlvbiBib3hfb2JqZWN0Ojpzb3V0aF93ZXN0KCkKewogIHJl
dHVybiBwb3NpdGlvbihjZW50LnggLSBkaW0ueC8yLjAgKyBDSE9QX0ZBQ1RPUip4cmFkLAogICAg
Y2VudC55IC0gZGltLnkvMi4wICsgQ0hPUF9GQUNUT1IqeXJhZCk7Cn0KCnZvaWQgYm94X29iamVj
dDo6cHJpbnQoKQp7CiAgaWYgKGx0LnR5cGUgPT0gbGluZV90eXBlOjppbnZpc2libGUgJiYgZmls
bCA8IDAuMCAmJiBjb2xvcl9maWxsID09IDApCiAgICByZXR1cm47CiAgb3V0LT5zZXRfY29sb3Io
Y29sb3JfZmlsbCwgZ3JhcGhpY19vYmplY3Q6OmdldF9vdXRsaW5lX2NvbG9yKCkpOwogIGlmICh4
cmFkID09IDAuMCkgewogICAgZGlzdGFuY2UgZGltMiA9IGRpbS8yLjA7CiAgICBwb3NpdGlvbiB2
ZWNbNF07CiAgICB2ZWNbMF0gPSBjZW50ICsgcG9zaXRpb24oZGltMi54LCAtZGltMi55KTsKICAg
IHZlY1sxXSA9IGNlbnQgKyBwb3NpdGlvbihkaW0yLngsIGRpbTIueSk7CiAgICB2ZWNbMl0gPSBj
ZW50ICsgcG9zaXRpb24oLWRpbTIueCwgZGltMi55KTsKICAgIHZlY1szXSA9IGNlbnQgKyBwb3Np
dGlvbigtZGltMi54LCAtZGltMi55KTsKICAgIG91dC0+cG9seWdvbih2ZWMsIDQsIGx0LCBmaWxs
KTsKICB9CiAgZWxzZSB7CiAgICBkaXN0YW5jZSBhYnNfZGltKGZhYnMoZGltLngpLCBmYWJzKGRp
bS55KSk7CiAgICBvdXQtPnJvdW5kZWRfYm94KGNlbnQsIGFic19kaW0sIGZhYnMoeHJhZCksIGx0
LCBmaWxsKTsKICB9CiAgb3V0LT5yZXNldF9jb2xvcigpOwp9CgpncmFwaGljX29iamVjdCAqb2Jq
ZWN0X3NwZWM6Om1ha2VfYm94KHBvc2l0aW9uICpjdXJwb3MsIGRpcmVjdGlvbiAqZGlycCkKewog
IHN0YXRpYyBkb3VibGUgbGFzdF9ib3hfaGVpZ2h0OwogIHN0YXRpYyBkb3VibGUgbGFzdF9ib3hf
d2lkdGg7CiAgc3RhdGljIGRvdWJsZSBsYXN0X2JveF9yYWRpdXM7CiAgc3RhdGljIGludCBoYXZl
X2xhc3RfYm94ID0gMDsKICBpZiAoIShmbGFncyAmIEhBU19IRUlHSFQpKSB7CiAgICBpZiAoKGZs
YWdzICYgSVNfU0FNRSkgJiYgaGF2ZV9sYXN0X2JveCkKICAgICAgaGVpZ2h0ID0gbGFzdF9ib3hf
aGVpZ2h0OwogICAgZWxzZQogICAgICBsb29rdXBfdmFyaWFibGUoImJveGh0IiwgJmhlaWdodCk7
CiAgfQogIGlmICghKGZsYWdzICYgSEFTX1dJRFRIKSkgewogICAgaWYgKChmbGFncyAmIElTX1NB
TUUpICYmIGhhdmVfbGFzdF9ib3gpCiAgICAgIHdpZHRoID0gbGFzdF9ib3hfd2lkdGg7CiAgICBl
bHNlCiAgICAgIGxvb2t1cF92YXJpYWJsZSgiYm94d2lkIiwgJndpZHRoKTsKICB9CiAgaWYgKCEo
ZmxhZ3MgJiBIQVNfUkFESVVTKSkgewogICAgaWYgKChmbGFncyAmIElTX1NBTUUpICYmIGhhdmVf
bGFzdF9ib3gpCiAgICAgIHJhZGl1cyA9IGxhc3RfYm94X3JhZGl1czsKICAgIGVsc2UKICAgICAg
bG9va3VwX3ZhcmlhYmxlKCJib3hyYWQiLCAmcmFkaXVzKTsKICB9CiAgbGFzdF9ib3hfd2lkdGgg
PSB3aWR0aDsKICBsYXN0X2JveF9oZWlnaHQgPSBoZWlnaHQ7CiAgbGFzdF9ib3hfcmFkaXVzID0g
cmFkaXVzOwogIGhhdmVfbGFzdF9ib3ggPSAxOwogIHJhZGl1cyA9IGZhYnMocmFkaXVzKTsKICBp
ZiAocmFkaXVzKjIuMCA+IGZhYnMod2lkdGgpKQogICAgcmFkaXVzID0gZmFicyh3aWR0aC8yLjAp
OwogIGlmIChyYWRpdXMqMi4wID4gZmFicyhoZWlnaHQpKQogICAgcmFkaXVzID0gZmFicyhoZWln
aHQvMi4wKTsKICBib3hfb2JqZWN0ICpwID0gbmV3IGJveF9vYmplY3QocG9zaXRpb24od2lkdGgs
IGhlaWdodCksIHJhZGl1cyk7CiAgaWYgKCFwb3NpdGlvbl9yZWN0YW5nbGUocCwgY3VycG9zLCBk
aXJwKSkgewogICAgZGVsZXRlIHA7CiAgICBwID0gMDsKICB9CiAgcmV0dXJuIHA7Cn0KCgoKaW50
IG9iamVjdF9zcGVjOjpwb3NpdGlvbl9yZWN0YW5nbGUocmVjdGFuZ2xlX29iamVjdCAqcCwKICAg
ICAgICBwb3NpdGlvbiAqY3VycG9zLCBkaXJlY3Rpb24gKmRpcnApCnsKICBwb3NpdGlvbiBwb3M7
CiAgZGlyID0gKmRpcnA7CiAgcG9zaXRpb24gbW90aW9uOwogIHN3aXRjaCAoZGlyKSB7CiAgY2Fz
ZSBVUF9ESVJFQ1RJT046CiAgICBtb3Rpb24ueSA9IHAtPmhlaWdodCgpLzIuMDsKICAgIGJyZWFr
OwogIGNhc2UgRE9XTl9ESVJFQ1RJT046CiAgICBtb3Rpb24ueSA9IC1wLT5oZWlnaHQoKS8yLjA7
CiAgICBicmVhazsKICBjYXNlIExFRlRfRElSRUNUSU9OOgogICAgbW90aW9uLnggPSAtcC0+d2lk
dGgoKS8yLjA7CiAgICBicmVhazsKICBjYXNlIFJJR0hUX0RJUkVDVElPTjoKICAgIG1vdGlvbi54
ID0gcC0+d2lkdGgoKS8yLjA7CiAgICBicmVhazsKICBkZWZhdWx0OgogICAgZG9fYXNzZXJ0KDAs
IDg1MiwgIm9iamVjdC5jcHAiKTsKICB9CiAgaWYgKGZsYWdzICYgSEFTX0FUKSB7CiAgICBwb3Mg
PSBhdDsKICAgIGlmIChmbGFncyAmIEhBU19XSVRIKSB7CiAgICAgIHBsYWNlIG9mZnNldDsKICAg
ICAgcGxhY2UgaGVyZTsKICAgICAgaGVyZS5vYmogPSBwOwogICAgICBpZiAoIXdpdGgtPmZvbGxv
dyhoZXJlLCAmb2Zmc2V0KSkKIHJldHVybiAwOwogICAgICBwb3MgLT0gb2Zmc2V0OwogICAgfQog
IH0KICBlbHNlIHsKICAgIHBvcyA9ICpjdXJwb3M7CiAgICBwb3MgKz0gbW90aW9uOwogIH0KICBw
LT5tb3ZlX2J5KHBvcyk7CiAgcG9zICs9IG1vdGlvbjsKICAqY3VycG9zID0gcG9zOwogIHJldHVy
biAxOwp9CgpjbGFzcyBibG9ja19vYmplY3QgOiBwdWJsaWMgcmVjdGFuZ2xlX29iamVjdCB7CiAg
b2JqZWN0X2xpc3Qgb2JsaXN0OwogIHBsYWNlX3B0YWJsZSAqdGJsOwpwdWJsaWM6CiAgYmxvY2tf
b2JqZWN0KGNvbnN0IHBvc2l0aW9uICYsIGNvbnN0IG9iamVjdF9saXN0ICZvbCwgcGxhY2VfcHRh
YmxlICp0KTsKICB+YmxvY2tfb2JqZWN0KCk7CiAgcGxhY2UgKmZpbmRfbGFiZWwoY29uc3QgY2hh
ciAqKTsKICBvYmplY3RfdHlwZSB0eXBlKCk7CiAgdm9pZCBtb3ZlX2J5KGNvbnN0IHBvc2l0aW9u
ICYpOwogIHZvaWQgcHJpbnQoKTsKfTsKCmJsb2NrX29iamVjdDo6YmxvY2tfb2JqZWN0KGNvbnN0
IHBvc2l0aW9uICZkLCBjb25zdCBvYmplY3RfbGlzdCAmb2wsCiAgICAgIHBsYWNlX3B0YWJsZSAq
dCkKOiByZWN0YW5nbGVfb2JqZWN0KGQpLCBvYmxpc3Qob2wpLCB0YmwodCkKewp9CgpibG9ja19v
YmplY3Q6On5ibG9ja19vYmplY3QoKQp7CiAgZGVsZXRlIHRibDsKICBvYmplY3QgKnAgPSBvYmxp
c3QuaGVhZDsKICB3aGlsZSAocCAhPSAwKSB7CiAgICBvYmplY3QgKnRlbSA9IHA7CiAgICBwID0g
cC0+bmV4dDsKICAgIGRlbGV0ZSB0ZW07CiAgfQp9Cgp2b2lkIGJsb2NrX29iamVjdDo6cHJpbnQo
KQp7CiAgb3V0LT5iZWdpbl9ibG9jayhzb3V0aF93ZXN0KCksIG5vcnRoX2Vhc3QoKSk7CiAgcHJp
bnRfb2JqZWN0X2xpc3Qob2JsaXN0LmhlYWQpOwogIG91dC0+ZW5kX2Jsb2NrKCk7Cn0KCnN0YXRp
YyB2b2lkIGFkanVzdF9vYmplY3RsZXNzX3BsYWNlcyhwbGFjZV9wdGFibGUgKnRibCwgY29uc3Qg
cG9zaXRpb24gJmEpCnsKCiAgcGxhY2VfcHRhYmxlX2l0ZXJhdG9yIGl0ZXIodGJsKTsKICBjb25z
dCBjaGFyICprZXk7CiAgcGxhY2UgKnBsOwogIHdoaWxlIChpdGVyLm5leHQoJmtleSwgJnBsKSkK
ICAgIGlmIChrZXkgJiYgY3N1cHBlcihrZXlbMF0pICYmIHBsLT5vYmogPT0gMCkgewogICAgICBw
bC0+eCArPSBhLng7CiAgICAgIHBsLT55ICs9IGEueTsKICAgIH0KfQoKdm9pZCBibG9ja19vYmpl
Y3Q6Om1vdmVfYnkoY29uc3QgcG9zaXRpb24gJmEpCnsKICBjZW50ICs9IGE7CiAgZm9yIChvYmpl
Y3QgKnAgPSBvYmxpc3QuaGVhZDsgcDsgcCA9IHAtPm5leHQpCiAgICBwLT5tb3ZlX2J5KGEpOwog
IGFkanVzdF9vYmplY3RsZXNzX3BsYWNlcyh0YmwsIGEpOwp9CgoKcGxhY2UgKmJsb2NrX29iamVj
dDo6ZmluZF9sYWJlbChjb25zdCBjaGFyICpuYW1lKQp7CiAgcmV0dXJuIHRibC0+bG9va3VwKG5h
bWUpOwp9CgpvYmplY3RfdHlwZSBibG9ja19vYmplY3Q6OnR5cGUoKQp7CiAgcmV0dXJuIEJMT0NL
X09CSkVDVDsKfQoKZ3JhcGhpY19vYmplY3QgKm9iamVjdF9zcGVjOjptYWtlX2Jsb2NrKHBvc2l0
aW9uICpjdXJwb3MsIGRpcmVjdGlvbiAqZGlycCkKewogIGJvdW5kaW5nX2JveCBiYjsKICBmb3Ig
KG9iamVjdCAqcCA9IG9ibGlzdC5oZWFkOyBwOyBwID0gcC0+bmV4dCkKICAgIHAtPnVwZGF0ZV9i
b3VuZGluZ19ib3goJmJiKTsKICBwb3NpdGlvbiBkaW07CiAgaWYgKCFiYi5ibGFuaykgewogICAg
cG9zaXRpb24gbSA9IC0oYmIubGwgKyBiYi51cikvMi4wOwogICAgZm9yIChvYmplY3QgKnAgPSBv
Ymxpc3QuaGVhZDsgcDsgcCA9IHAtPm5leHQpCiAgICAgIHAtPm1vdmVfYnkobSk7CiAgICBhZGp1
c3Rfb2JqZWN0bGVzc19wbGFjZXModGJsLCBtKTsKICAgIGRpbSA9IGJiLnVyIC0gYmIubGw7CiAg
fQogIGlmIChmbGFncyAmIEhBU19XSURUSCkKICAgIGRpbS54ID0gd2lkdGg7CiAgaWYgKGZsYWdz
ICYgSEFTX0hFSUdIVCkKICAgIGRpbS55ID0gaGVpZ2h0OwogIGJsb2NrX29iamVjdCAqYmxvY2sg
PSBuZXcgYmxvY2tfb2JqZWN0KGRpbSwgb2JsaXN0LCB0YmwpOwogIGlmICghcG9zaXRpb25fcmVj
dGFuZ2xlKGJsb2NrLCBjdXJwb3MsIGRpcnApKSB7CiAgICBkZWxldGUgYmxvY2s7CiAgICBibG9j
ayA9IDA7CiAgfQogIHRibCA9IDA7CiAgb2JsaXN0LmhlYWQgPSBvYmxpc3QudGFpbCA9IDA7CiAg
cmV0dXJuIGJsb2NrOwp9CgpjbGFzcyB0ZXh0X29iamVjdCA6IHB1YmxpYyByZWN0YW5nbGVfb2Jq
ZWN0IHsKcHVibGljOgogIHRleHRfb2JqZWN0KGNvbnN0IHBvc2l0aW9uICYpOwogIG9iamVjdF90
eXBlIHR5cGUoKSB7IHJldHVybiBURVhUX09CSkVDVDsgfQp9OwoKdGV4dF9vYmplY3Q6OnRleHRf
b2JqZWN0KGNvbnN0IHBvc2l0aW9uICZkKQo6IHJlY3RhbmdsZV9vYmplY3QoZCkKewp9CgpncmFw
aGljX29iamVjdCAqb2JqZWN0X3NwZWM6Om1ha2VfdGV4dChwb3NpdGlvbiAqY3VycG9zLCBkaXJl
Y3Rpb24gKmRpcnApCnsKICBpZiAoIShmbGFncyAmIEhBU19IRUlHSFQpKSB7CiAgICBsb29rdXBf
dmFyaWFibGUoInRleHRodCIsICZoZWlnaHQpOwogICAgaW50IG5pdGVtcyA9IDA7CiAgICBmb3Ig
KHRleHRfaXRlbSAqdCA9IHRleHQ7IHQ7IHQgPSB0LT5uZXh0KQogICAgICBuaXRlbXMrKzsKICAg
IGhlaWdodCAqPSBuaXRlbXM7CiAgfQogIGlmICghKGZsYWdzICYgSEFTX1dJRFRIKSkKICAgIGxv
b2t1cF92YXJpYWJsZSgidGV4dHdpZCIsICZ3aWR0aCk7CiAgdGV4dF9vYmplY3QgKnAgPSBuZXcg
dGV4dF9vYmplY3QocG9zaXRpb24od2lkdGgsIGhlaWdodCkpOwogIGlmICghcG9zaXRpb25fcmVj
dGFuZ2xlKHAsIGN1cnBvcywgZGlycCkpIHsKICAgIGRlbGV0ZSBwOwogICAgcCA9IDA7CiAgfQog
IHJldHVybiBwOwp9CgoKY2xhc3MgZWxsaXBzZV9vYmplY3QgOiBwdWJsaWMgY2xvc2VkX29iamVj
dCB7CnB1YmxpYzoKICBlbGxpcHNlX29iamVjdChjb25zdCBwb3NpdGlvbiAmKTsKICBwb3NpdGlv
biBub3J0aF9lYXN0KCkgeyByZXR1cm4gcG9zaXRpb24oY2VudC54ICsgZGltLngvKDEuNDE0MjEz
NTYyMzczMDk1MDQ4ODAqMi4wKSwKICAgICAgIGNlbnQueSArIGRpbS55LygxLjQxNDIxMzU2MjM3
MzA5NTA0ODgwKjIuMCkpOyB9CiAgcG9zaXRpb24gbm9ydGhfd2VzdCgpIHsgcmV0dXJuIHBvc2l0
aW9uKGNlbnQueCAtIGRpbS54LygxLjQxNDIxMzU2MjM3MzA5NTA0ODgwKjIuMCksCiAgICAgICBj
ZW50LnkgKyBkaW0ueS8oMS40MTQyMTM1NjIzNzMwOTUwNDg4MCoyLjApKTsgfQogIHBvc2l0aW9u
IHNvdXRoX2Vhc3QoKSB7IHJldHVybiBwb3NpdGlvbihjZW50LnggKyBkaW0ueC8oMS40MTQyMTM1
NjIzNzMwOTUwNDg4MCoyLjApLAogICAgICAgY2VudC55IC0gZGltLnkvKDEuNDE0MjEzNTYyMzcz
MDk1MDQ4ODAqMi4wKSk7IH0KICBwb3NpdGlvbiBzb3V0aF93ZXN0KCkgeyByZXR1cm4gcG9zaXRp
b24oY2VudC54IC0gZGltLngvKDEuNDE0MjEzNTYyMzczMDk1MDQ4ODAqMi4wKSwKICAgICAgIGNl
bnQueSAtIGRpbS55LygxLjQxNDIxMzU2MjM3MzA5NTA0ODgwKjIuMCkpOyB9CiAgZG91YmxlIHJh
ZGl1cygpIHsgcmV0dXJuIGRpbS54LzIuMDsgfQogIG9iamVjdF90eXBlIHR5cGUoKSB7IHJldHVy
biBFTExJUFNFX09CSkVDVDsgfQogIHZvaWQgcHJpbnQoKTsKfTsKCmVsbGlwc2Vfb2JqZWN0Ojpl
bGxpcHNlX29iamVjdChjb25zdCBwb3NpdGlvbiAmZCkKOiBjbG9zZWRfb2JqZWN0KGQpCnsKfQoK
dm9pZCBlbGxpcHNlX29iamVjdDo6cHJpbnQoKQp7CiAgaWYgKGx0LnR5cGUgPT0gbGluZV90eXBl
OjppbnZpc2libGUgJiYgZmlsbCA8IDAuMCAmJiBjb2xvcl9maWxsID09IDApCiAgICByZXR1cm47
CiAgb3V0LT5zZXRfY29sb3IoY29sb3JfZmlsbCwgZ3JhcGhpY19vYmplY3Q6OmdldF9vdXRsaW5l
X2NvbG9yKCkpOwogIG91dC0+ZWxsaXBzZShjZW50LCBkaW0sIGx0LCBmaWxsKTsKICBvdXQtPnJl
c2V0X2NvbG9yKCk7Cn0KCmdyYXBoaWNfb2JqZWN0ICpvYmplY3Rfc3BlYzo6bWFrZV9lbGxpcHNl
KHBvc2l0aW9uICpjdXJwb3MsIGRpcmVjdGlvbiAqZGlycCkKewogIHN0YXRpYyBkb3VibGUgbGFz
dF9lbGxpcHNlX2hlaWdodDsKICBzdGF0aWMgZG91YmxlIGxhc3RfZWxsaXBzZV93aWR0aDsKICBz
dGF0aWMgaW50IGhhdmVfbGFzdF9lbGxpcHNlID0gMDsKICBpZiAoIShmbGFncyAmIEhBU19IRUlH
SFQpKSB7CiAgICBpZiAoKGZsYWdzICYgSVNfU0FNRSkgJiYgaGF2ZV9sYXN0X2VsbGlwc2UpCiAg
ICAgIGhlaWdodCA9IGxhc3RfZWxsaXBzZV9oZWlnaHQ7CiAgICBlbHNlCiAgICAgIGxvb2t1cF92
YXJpYWJsZSgiZWxsaXBzZWh0IiwgJmhlaWdodCk7CiAgfQogIGlmICghKGZsYWdzICYgSEFTX1dJ
RFRIKSkgewogICAgaWYgKChmbGFncyAmIElTX1NBTUUpICYmIGhhdmVfbGFzdF9lbGxpcHNlKQog
ICAgICB3aWR0aCA9IGxhc3RfZWxsaXBzZV93aWR0aDsKICAgIGVsc2UKICAgICAgbG9va3VwX3Zh
cmlhYmxlKCJlbGxpcHNld2lkIiwgJndpZHRoKTsKICB9CiAgbGFzdF9lbGxpcHNlX3dpZHRoID0g
d2lkdGg7CiAgbGFzdF9lbGxpcHNlX2hlaWdodCA9IGhlaWdodDsKICBoYXZlX2xhc3RfZWxsaXBz
ZSA9IDE7CiAgZWxsaXBzZV9vYmplY3QgKnAgPSBuZXcgZWxsaXBzZV9vYmplY3QocG9zaXRpb24o
d2lkdGgsIGhlaWdodCkpOwogIGlmICghcG9zaXRpb25fcmVjdGFuZ2xlKHAsIGN1cnBvcywgZGly
cCkpIHsKICAgIGRlbGV0ZSBwOwogICAgcmV0dXJuIDA7CiAgfQogIHJldHVybiBwOwp9CgpjbGFz
cyBjaXJjbGVfb2JqZWN0IDogcHVibGljIGVsbGlwc2Vfb2JqZWN0IHsKcHVibGljOgogIGNpcmNs
ZV9vYmplY3QoZG91YmxlKTsKICBvYmplY3RfdHlwZSB0eXBlKCkgeyByZXR1cm4gQ0lSQ0xFX09C
SkVDVDsgfQogIHZvaWQgcHJpbnQoKTsKfTsKCmNpcmNsZV9vYmplY3Q6OmNpcmNsZV9vYmplY3Qo
ZG91YmxlIGRpYW0pCjogZWxsaXBzZV9vYmplY3QocG9zaXRpb24oZGlhbSwgZGlhbSkpCnsKfQoK
dm9pZCBjaXJjbGVfb2JqZWN0OjpwcmludCgpCnsKICBpZiAobHQudHlwZSA9PSBsaW5lX3R5cGU6
OmludmlzaWJsZSAmJiBmaWxsIDwgMC4wICYmIGNvbG9yX2ZpbGwgPT0gMCkKICAgIHJldHVybjsK
ICBvdXQtPnNldF9jb2xvcihjb2xvcl9maWxsLCBncmFwaGljX29iamVjdDo6Z2V0X291dGxpbmVf
Y29sb3IoKSk7CiAgb3V0LT5jaXJjbGUoY2VudCwgZGltLngvMi4wLCBsdCwgZmlsbCk7CiAgb3V0
LT5yZXNldF9jb2xvcigpOwp9CgpncmFwaGljX29iamVjdCAqb2JqZWN0X3NwZWM6Om1ha2VfY2ly
Y2xlKHBvc2l0aW9uICpjdXJwb3MsIGRpcmVjdGlvbiAqZGlycCkKewogIHN0YXRpYyBkb3VibGUg
bGFzdF9jaXJjbGVfcmFkaXVzOwogIHN0YXRpYyBpbnQgaGF2ZV9sYXN0X2NpcmNsZSA9IDA7CiAg
aWYgKCEoZmxhZ3MgJiBIQVNfUkFESVVTKSkgewogICAgaWYgKChmbGFncyAmIElTX1NBTUUpICYm
IGhhdmVfbGFzdF9jaXJjbGUpCiAgICAgIHJhZGl1cyA9IGxhc3RfY2lyY2xlX3JhZGl1czsKICAg
IGVsc2UKICAgICAgbG9va3VwX3ZhcmlhYmxlKCJjaXJjbGVyYWQiLCAmcmFkaXVzKTsKICB9CiAg
bGFzdF9jaXJjbGVfcmFkaXVzID0gcmFkaXVzOwogIGhhdmVfbGFzdF9jaXJjbGUgPSAxOwogIGNp
cmNsZV9vYmplY3QgKnAgPSBuZXcgY2lyY2xlX29iamVjdChyYWRpdXMqMi4wKTsKICBpZiAoIXBv
c2l0aW9uX3JlY3RhbmdsZShwLCBjdXJwb3MsIGRpcnApKSB7CiAgICBkZWxldGUgcDsKICAgIHJl
dHVybiAwOwogIH0KICByZXR1cm4gcDsKfQoKY2xhc3MgbW92ZV9vYmplY3QgOiBwdWJsaWMgZ3Jh
cGhpY19vYmplY3QgewogIHBvc2l0aW9uIHN0cnQ7CiAgcG9zaXRpb24gZW47CnB1YmxpYzoKICBt
b3ZlX29iamVjdChjb25zdCBwb3NpdGlvbiAmcywgY29uc3QgcG9zaXRpb24gJmUpOwogIHBvc2l0
aW9uIG9yaWdpbigpIHsgcmV0dXJuIGVuOyB9CiAgb2JqZWN0X3R5cGUgdHlwZSgpIHsgcmV0dXJu
IE1PVkVfT0JKRUNUOyB9CiAgdm9pZCB1cGRhdGVfYm91bmRpbmdfYm94KGJvdW5kaW5nX2JveCAq
KTsKICB2b2lkIG1vdmVfYnkoY29uc3QgcG9zaXRpb24gJik7Cn07Cgptb3ZlX29iamVjdDo6bW92
ZV9vYmplY3QoY29uc3QgcG9zaXRpb24gJnMsIGNvbnN0IHBvc2l0aW9uICZlKQo6IHN0cnQocyks
IGVuKGUpCnsKfQoKdm9pZCBtb3ZlX29iamVjdDo6dXBkYXRlX2JvdW5kaW5nX2JveChib3VuZGlu
Z19ib3ggKnApCnsKICBwLT5lbmNvbXBhc3Moc3RydCk7CiAgcC0+ZW5jb21wYXNzKGVuKTsKfQoK
dm9pZCBtb3ZlX29iamVjdDo6bW92ZV9ieShjb25zdCBwb3NpdGlvbiAmYSkKewogIHN0cnQgKz0g
YTsKICBlbiArPSBhOwp9CgpncmFwaGljX29iamVjdCAqb2JqZWN0X3NwZWM6Om1ha2VfbW92ZShw
b3NpdGlvbiAqY3VycG9zLCBkaXJlY3Rpb24gKmRpcnApCnsKICBzdGF0aWMgcG9zaXRpb24gbGFz
dF9tb3ZlOwogIHN0YXRpYyBpbnQgaGF2ZV9sYXN0X21vdmUgPSAwOwogICpkaXJwID0gZGlyOwoK
ICBwb3NpdGlvbiBzdGFydHBvcyA9IChmbGFncyAmIEhBU19GUk9NKSA/IGZyb20gOiAqY3VycG9z
OwogIGlmICghKGZsYWdzICYgSEFTX1NFR01FTlQpKSB7CiAgICBpZiAoKGZsYWdzICYgSVNfU0FN
RSkgJiYgaGF2ZV9sYXN0X21vdmUpCiAgICAgIHNlZ21lbnRfcG9zID0gbGFzdF9tb3ZlOwogICAg
ZWxzZSB7CiAgICAgIHN3aXRjaCAoZGlyKSB7CiAgICAgIGNhc2UgVVBfRElSRUNUSU9OOgogc2Vn
bWVudF9wb3MueSA9IHNlZ21lbnRfaGVpZ2h0OwogYnJlYWs7CiAgICAgIGNhc2UgRE9XTl9ESVJF
Q1RJT046CiBzZWdtZW50X3Bvcy55ID0gLXNlZ21lbnRfaGVpZ2h0OwogYnJlYWs7CiAgICAgIGNh
c2UgTEVGVF9ESVJFQ1RJT046CiBzZWdtZW50X3Bvcy54ID0gLXNlZ21lbnRfd2lkdGg7CiBicmVh
azsKICAgICAgY2FzZSBSSUdIVF9ESVJFQ1RJT046CiBzZWdtZW50X3Bvcy54ID0gc2VnbWVudF93
aWR0aDsKIGJyZWFrOwogICAgICBkZWZhdWx0OgogZG9fYXNzZXJ0KDAsIDExNTMsICJvYmplY3Qu
Y3BwIik7CiAgICAgIH0KICAgIH0KICB9CiAgc2VnbWVudF9saXN0ID0gbmV3IHNlZ21lbnQoc2Vn
bWVudF9wb3MsIHNlZ21lbnRfaXNfYWJzb2x1dGUsIHNlZ21lbnRfbGlzdCk7CgogIHNlZ21lbnQg
Km9sZCA9IHNlZ21lbnRfbGlzdDsKICBzZWdtZW50X2xpc3QgPSAwOwogIHdoaWxlIChvbGQgIT0g
MCkgewogICAgc2VnbWVudCAqdGVtID0gb2xkLT5uZXh0OwogICAgb2xkLT5uZXh0ID0gc2VnbWVu
dF9saXN0OwogICAgc2VnbWVudF9saXN0ID0gb2xkOwogICAgb2xkID0gdGVtOwogIH0KCiAgcG9z
aXRpb24gZW5kcG9zID0gc3RhcnRwb3M7CiAgZm9yIChzZWdtZW50ICpzID0gc2VnbWVudF9saXN0
OyBzOyBzID0gcy0+bmV4dCkKICAgIGlmIChzLT5pc19hYnNvbHV0ZSkKICAgICAgZW5kcG9zID0g
cy0+cG9zOwogICAgZWxzZQogICAgICBlbmRwb3MgKz0gcy0+cG9zOwogIGhhdmVfbGFzdF9tb3Zl
ID0gMTsKICBsYXN0X21vdmUgPSBlbmRwb3MgLSBzdGFydHBvczsKICBtb3ZlX29iamVjdCAqcCA9
IG5ldyBtb3ZlX29iamVjdChzdGFydHBvcywgZW5kcG9zKTsKICAqY3VycG9zID0gZW5kcG9zOwog
IHJldHVybiBwOwp9CgpjbGFzcyBsaW5lYXJfb2JqZWN0IDogcHVibGljIGdyYXBoaWNfb2JqZWN0
IHsKcHJvdGVjdGVkOgogIGNoYXIgYXJyb3dfYXRfc3RhcnQ7CiAgY2hhciBhcnJvd19hdF9lbmQ7
CiAgYXJyb3dfaGVhZF90eXBlIGFodDsKICBwb3NpdGlvbiBzdHJ0OwogIHBvc2l0aW9uIGVuOwpw
dWJsaWM6CiAgbGluZWFyX29iamVjdChjb25zdCBwb3NpdGlvbiAmcywgY29uc3QgcG9zaXRpb24g
JmUpOwogIHBvc2l0aW9uIHN0YXJ0KCkgeyByZXR1cm4gc3RydDsgfQogIHBvc2l0aW9uIGVuZCgp
IHsgcmV0dXJuIGVuOyB9CiAgdm9pZCBtb3ZlX2J5KGNvbnN0IHBvc2l0aW9uICYpOwogIHZvaWQg
dXBkYXRlX2JvdW5kaW5nX2JveChib3VuZGluZ19ib3ggKikgPSAwOwogIG9iamVjdF90eXBlIHR5
cGUoKSA9IDA7CiAgdm9pZCBhZGRfYXJyb3dzKGludCBhdF9zdGFydCwgaW50IGF0X2VuZCwgY29u
c3QgYXJyb3dfaGVhZF90eXBlICYpOwp9OwoKY2xhc3MgbGluZV9vYmplY3QgOiBwdWJsaWMgbGlu
ZWFyX29iamVjdCB7CnByb3RlY3RlZDoKICBwb3NpdGlvbiAqdjsKICBpbnQgbjsKcHVibGljOgog
IGxpbmVfb2JqZWN0KGNvbnN0IHBvc2l0aW9uICZzLCBjb25zdCBwb3NpdGlvbiAmZSwgcG9zaXRp
b24gKiwgaW50KTsKICB+bGluZV9vYmplY3QoKTsKICBwb3NpdGlvbiBvcmlnaW4oKSB7IHJldHVy
biBzdHJ0OyB9CiAgcG9zaXRpb24gY2VudGVyKCkgeyByZXR1cm4gKHN0cnQgKyBlbikvMi4wOyB9
CiAgcG9zaXRpb24gbm9ydGgoKSB7IHJldHVybiAoZW4ueSAtIHN0cnQueSkgPiAwID8gZW4gOiBz
dHJ0OyB9CiAgcG9zaXRpb24gc291dGgoKSB7IHJldHVybiAoZW4ueSAtIHN0cnQueSkgPCAwID8g
ZW4gOiBzdHJ0OyB9CiAgcG9zaXRpb24gZWFzdCgpIHsgcmV0dXJuIChlbi54IC0gc3RydC54KSA+
IDAgPyBlbiA6IHN0cnQ7IH0KICBwb3NpdGlvbiB3ZXN0KCkgeyByZXR1cm4gKGVuLnggLSBzdHJ0
LngpIDwgMCA/IGVuIDogc3RydDsgfQogIG9iamVjdF90eXBlIHR5cGUoKSB7IHJldHVybiBMSU5F
X09CSkVDVDsgfQogIHZvaWQgdXBkYXRlX2JvdW5kaW5nX2JveChib3VuZGluZ19ib3ggKik7CiAg
dm9pZCBwcmludCgpOwogIHZvaWQgbW92ZV9ieShjb25zdCBwb3NpdGlvbiAmKTsKfTsKCmNsYXNz
IGFycm93X29iamVjdCA6IHB1YmxpYyBsaW5lX29iamVjdCB7CnB1YmxpYzoKICBhcnJvd19vYmpl
Y3QoY29uc3QgcG9zaXRpb24gJiwgY29uc3QgcG9zaXRpb24gJiwgcG9zaXRpb24gKiwgaW50KTsK
ICBvYmplY3RfdHlwZSB0eXBlKCkgeyByZXR1cm4gQVJST1dfT0JKRUNUOyB9Cn07CgpjbGFzcyBz
cGxpbmVfb2JqZWN0IDogcHVibGljIGxpbmVfb2JqZWN0IHsKcHVibGljOgogIHNwbGluZV9vYmpl
Y3QoY29uc3QgcG9zaXRpb24gJiwgY29uc3QgcG9zaXRpb24gJiwgcG9zaXRpb24gKiwgaW50KTsK
ICBvYmplY3RfdHlwZSB0eXBlKCkgeyByZXR1cm4gU1BMSU5FX09CSkVDVDsgfQogIHZvaWQgcHJp
bnQoKTsKICB2b2lkIHVwZGF0ZV9ib3VuZGluZ19ib3goYm91bmRpbmdfYm94ICopOwp9OwoKbGlu
ZWFyX29iamVjdDo6bGluZWFyX29iamVjdChjb25zdCBwb3NpdGlvbiAmcywgY29uc3QgcG9zaXRp
b24gJmUpCjogYXJyb3dfYXRfc3RhcnQoMCksIGFycm93X2F0X2VuZCgwKSwgc3RydChzKSwgZW4o
ZSkKewp9Cgp2b2lkIGxpbmVhcl9vYmplY3Q6Om1vdmVfYnkoY29uc3QgcG9zaXRpb24gJmEpCnsK
ICBzdHJ0ICs9IGE7CiAgZW4gKz0gYTsKfQoKdm9pZCBsaW5lYXJfb2JqZWN0OjphZGRfYXJyb3dz
KGludCBhdF9zdGFydCwgaW50IGF0X2VuZCwKICAgICAgICAgIGNvbnN0IGFycm93X2hlYWRfdHlw
ZSAmYSkKewogIGFycm93X2F0X3N0YXJ0ID0gYXRfc3RhcnQ7CiAgYXJyb3dfYXRfZW5kID0gYXRf
ZW5kOwogIGFodCA9IGE7Cn0KCmxpbmVfb2JqZWN0OjpsaW5lX29iamVjdChjb25zdCBwb3NpdGlv
biAmcywgY29uc3QgcG9zaXRpb24gJmUsCiAgICBwb3NpdGlvbiAqcCwgaW50IGkpCjogbGluZWFy
X29iamVjdChzLCBlKSwgdihwKSwgbihpKQp7Cn0KCnZvaWQgbGluZV9vYmplY3Q6OnByaW50KCkK
ewogIGlmIChsdC50eXBlID09IGxpbmVfdHlwZTo6aW52aXNpYmxlKQogICAgcmV0dXJuOwogIG91
dC0+c2V0X2NvbG9yKDAsIGdyYXBoaWNfb2JqZWN0OjpnZXRfb3V0bGluZV9jb2xvcigpKTsKICBv
dXQtPmxpbmUoc3RydCwgdiwgbiwgbHQpOwogIGlmIChhcnJvd19hdF9zdGFydCkKICAgIGRyYXdf
YXJyb3coc3RydCwgc3RydC12WzBdLCBhaHQsIGx0LCBncmFwaGljX29iamVjdDo6Z2V0X291dGxp
bmVfY29sb3IoKSk7CiAgaWYgKGFycm93X2F0X2VuZCkKICAgIGRyYXdfYXJyb3coZW4sIHZbbi0x
XSAtIChuID4gMSA/IHZbbiAtIDJdIDogc3RydCksIGFodCwgbHQsCiAgICAgICAgZ3JhcGhpY19v
YmplY3Q6OmdldF9vdXRsaW5lX2NvbG9yKCkpOwogIG91dC0+cmVzZXRfY29sb3IoKTsKfQoKdm9p
ZCBsaW5lX29iamVjdDo6dXBkYXRlX2JvdW5kaW5nX2JveChib3VuZGluZ19ib3ggKnApCnsKICBw
LT5lbmNvbXBhc3Moc3RydCk7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCiAgICBwLT5l
bmNvbXBhc3ModltpXSk7Cn0KCnZvaWQgbGluZV9vYmplY3Q6Om1vdmVfYnkoY29uc3QgcG9zaXRp
b24gJnBvcykKewogIGxpbmVhcl9vYmplY3Q6Om1vdmVfYnkocG9zKTsKICBmb3IgKGludCBpID0g
MDsgaSA8IG47IGkrKykKICAgIHZbaV0gKz0gcG9zOwp9Cgp2b2lkIHNwbGluZV9vYmplY3Q6OnVw
ZGF0ZV9ib3VuZGluZ19ib3goYm91bmRpbmdfYm94ICpwKQp7CiAgcC0+ZW5jb21wYXNzKHN0cnQp
OwogIHAtPmVuY29tcGFzcyhlbik7CiMgMTMxMCAib2JqZWN0LmNwcCIKICBmb3IgKGludCBpID0g
MTsgaSA8IG47IGkrKykKICAgIHAtPmVuY29tcGFzcygoaSA9PSAxID8gc3RydCA6IHZbaS0yXSkq
LjEyNSArIHZbaS0xXSouNzUgKyB2W2ldKi4xMjUpOwp9CgphcnJvd19vYmplY3Q6OmFycm93X29i
amVjdChjb25zdCBwb3NpdGlvbiAmcywgY29uc3QgcG9zaXRpb24gJmUsCiAgICAgIHBvc2l0aW9u
ICpwLCBpbnQgaSkKOiBsaW5lX29iamVjdChzLCBlLCBwLCBpKQp7Cn0KCnNwbGluZV9vYmplY3Q6
OnNwbGluZV9vYmplY3QoY29uc3QgcG9zaXRpb24gJnMsIGNvbnN0IHBvc2l0aW9uICZlLAogICAg
ICAgIHBvc2l0aW9uICpwLCBpbnQgaSkKOiBsaW5lX29iamVjdChzLCBlLCBwLCBpKQp7Cn0KCnZv
aWQgc3BsaW5lX29iamVjdDo6cHJpbnQoKQp7CiAgaWYgKGx0LnR5cGUgPT0gbGluZV90eXBlOjpp
bnZpc2libGUpCiAgICByZXR1cm47CiAgb3V0LT5zZXRfY29sb3IoMCwgZ3JhcGhpY19vYmplY3Q6
OmdldF9vdXRsaW5lX2NvbG9yKCkpOwogIG91dC0+c3BsaW5lKHN0cnQsIHYsIG4sIGx0KTsKICBp
ZiAoYXJyb3dfYXRfc3RhcnQpCiAgICBkcmF3X2Fycm93KHN0cnQsIHN0cnQtdlswXSwgYWh0LCBs
dCwgZ3JhcGhpY19vYmplY3Q6OmdldF9vdXRsaW5lX2NvbG9yKCkpOwogIGlmIChhcnJvd19hdF9l
bmQpCiAgICBkcmF3X2Fycm93KGVuLCB2W24tMV0gLSAobiA+IDEgPyB2W24gLSAyXSA6IHN0cnQp
LCBhaHQsIGx0LAogICAgICAgIGdyYXBoaWNfb2JqZWN0OjpnZXRfb3V0bGluZV9jb2xvcigpKTsK
ICBvdXQtPnJlc2V0X2NvbG9yKCk7Cn0KCmxpbmVfb2JqZWN0Ojp+bGluZV9vYmplY3QoKQp7CiAg
ZGVsZXRlIFtdIHY7Cn0KCmxpbmVhcl9vYmplY3QgKm9iamVjdF9zcGVjOjptYWtlX2xpbmUocG9z
aXRpb24gKmN1cnBvcywgZGlyZWN0aW9uICpkaXJwKQp7CiAgc3RhdGljIHBvc2l0aW9uIGxhc3Rf
bGluZTsKICBzdGF0aWMgaW50IGhhdmVfbGFzdF9saW5lID0gMDsKICAqZGlycCA9IGRpcjsKCiAg
cG9zaXRpb24gc3RhcnRwb3MgPSAoZmxhZ3MgJiBIQVNfRlJPTSkgPyBmcm9tIDogKmN1cnBvczsK
ICBpZiAoIShmbGFncyAmIEhBU19TRUdNRU5UKSkgewogICAgaWYgKChmbGFncyAmIElTX1NBTUUp
ICYmICh0eXBlID09IExJTkVfT0JKRUNUIHx8IHR5cGUgPT0gQVJST1dfT0JKRUNUKQogJiYgaGF2
ZV9sYXN0X2xpbmUpCiAgICAgIHNlZ21lbnRfcG9zID0gbGFzdF9saW5lOwogICAgZWxzZQogICAg
ICBzd2l0Y2ggKGRpcikgewogICAgICBjYXNlIFVQX0RJUkVDVElPTjoKIHNlZ21lbnRfcG9zLnkg
PSBzZWdtZW50X2hlaWdodDsKIGJyZWFrOwogICAgICBjYXNlIERPV05fRElSRUNUSU9OOgogc2Vn
bWVudF9wb3MueSA9IC1zZWdtZW50X2hlaWdodDsKIGJyZWFrOwogICAgICBjYXNlIExFRlRfRElS
RUNUSU9OOgogc2VnbWVudF9wb3MueCA9IC1zZWdtZW50X3dpZHRoOwogYnJlYWs7CiAgICAgIGNh
c2UgUklHSFRfRElSRUNUSU9OOgogc2VnbWVudF9wb3MueCA9IHNlZ21lbnRfd2lkdGg7CiBicmVh
azsKICAgICAgZGVmYXVsdDoKIGRvX2Fzc2VydCgwLCAxMzcxLCAib2JqZWN0LmNwcCIpOwogICAg
ICB9CiAgfQogIHNlZ21lbnRfbGlzdCA9IG5ldyBzZWdtZW50KHNlZ21lbnRfcG9zLCBzZWdtZW50
X2lzX2Fic29sdXRlLCBzZWdtZW50X2xpc3QpOwoKICBzZWdtZW50ICpvbGQgPSBzZWdtZW50X2xp
c3Q7CiAgc2VnbWVudF9saXN0ID0gMDsKICB3aGlsZSAob2xkICE9IDApIHsKICAgIHNlZ21lbnQg
KnRlbSA9IG9sZC0+bmV4dDsKICAgIG9sZC0+bmV4dCA9IHNlZ21lbnRfbGlzdDsKICAgIHNlZ21l
bnRfbGlzdCA9IG9sZDsKICAgIG9sZCA9IHRlbTsKICB9CgogIHBvc2l0aW9uIGVuZHBvcyA9IHN0
YXJ0cG9zOwogIGludCBuc2VnbWVudHMgPSAwOwogIHNlZ21lbnQgKnM7CiAgZm9yIChzID0gc2Vn
bWVudF9saXN0OyBzOyBzID0gcy0+bmV4dCwgbnNlZ21lbnRzKyspCiAgICBpZiAocy0+aXNfYWJz
b2x1dGUpCiAgICAgIGVuZHBvcyA9IHMtPnBvczsKICAgIGVsc2UgewogICAgICBlbmRwb3MgKz0g
cy0+cG9zOwogICAgICBzLT5wb3MgPSBlbmRwb3M7CiAgICAgIHMtPmlzX2Fic29sdXRlID0gMTsK
ICAgIH0KCiAgbGluZV9vYmplY3QgKnAgPSAwOwogIHBvc2l0aW9uICp2ID0gbmV3IHBvc2l0aW9u
W25zZWdtZW50c107CiAgaW50IGkgPSAwOwogIGZvciAocyA9IHNlZ21lbnRfbGlzdDsgczsgcyA9
IHMtPm5leHQsIGkrKykKICAgIHZbaV0gPSBzLT5wb3M7CiAgaWYgKGZsYWdzICYgSVNfREVGQVVM
VF9DSE9QUEVEKSB7CiAgICBsb29rdXBfdmFyaWFibGUoImNpcmNsZXJhZCIsICZzdGFydF9jaG9w
KTsKICAgIGVuZF9jaG9wID0gc3RhcnRfY2hvcDsKICAgIGZsYWdzIHw9IElTX0NIT1BQRUQ7CiAg
fQogIGlmIChmbGFncyAmIElTX0NIT1BQRUQpIHsKICAgIHBvc2l0aW9uIHN0YXJ0X2Nob3BfdmVj
LCBlbmRfY2hvcF92ZWM7CiAgICBpZiAoc3RhcnRfY2hvcCAhPSAwLjApIHsKICAgICAgc3RhcnRf
Y2hvcF92ZWMgPSB2WzBdIC0gc3RhcnRwb3M7CiAgICAgIHN0YXJ0X2Nob3BfdmVjICo9IHN0YXJ0
X2Nob3AgLyBoeXBvdChzdGFydF9jaG9wX3ZlYyk7CiAgICB9CiAgICBpZiAoZW5kX2Nob3AgIT0g
MC4wKSB7CiAgICAgIGVuZF9jaG9wX3ZlYyA9ICh2W25zZWdtZW50cyAtIDFdCiAgICAgICAgLSAo
bnNlZ21lbnRzID4gMSA/IHZbbnNlZ21lbnRzIC0gMl0gOiBzdGFydHBvcykpOwogICAgICBlbmRf
Y2hvcF92ZWMgKj0gZW5kX2Nob3AgLyBoeXBvdChlbmRfY2hvcF92ZWMpOwogICAgfQogICAgc3Rh
cnRwb3MgKz0gc3RhcnRfY2hvcF92ZWM7CiAgICB2W25zZWdtZW50cyAtIDFdIC09IGVuZF9jaG9w
X3ZlYzsKICAgIGVuZHBvcyAtPSBlbmRfY2hvcF92ZWM7CiAgfQogIHN3aXRjaCAodHlwZSkgewog
IGNhc2UgU1BMSU5FX09CSkVDVDoKICAgIHAgPSBuZXcgc3BsaW5lX29iamVjdChzdGFydHBvcywg
ZW5kcG9zLCB2LCBuc2VnbWVudHMpOwogICAgYnJlYWs7CiAgY2FzZSBBUlJPV19PQkpFQ1Q6CiAg
ICBwID0gbmV3IGFycm93X29iamVjdChzdGFydHBvcywgZW5kcG9zLCB2LCBuc2VnbWVudHMpOwog
ICAgYnJlYWs7CiAgY2FzZSBMSU5FX09CSkVDVDoKICAgIHAgPSBuZXcgbGluZV9vYmplY3Qoc3Rh
cnRwb3MsIGVuZHBvcywgdiwgbnNlZ21lbnRzKTsKICAgIGJyZWFrOwogIGRlZmF1bHQ6CiAgICBk
b19hc3NlcnQoMCwgMTQzMywgIm9iamVjdC5jcHAiKTsKICB9CiAgaGF2ZV9sYXN0X2xpbmUgPSAx
OwogIGxhc3RfbGluZSA9IGVuZHBvcyAtIHN0YXJ0cG9zOwogICpjdXJwb3MgPSBlbmRwb3M7CiAg
cmV0dXJuIHA7Cn0KCmNsYXNzIGFyY19vYmplY3QgOiBwdWJsaWMgbGluZWFyX29iamVjdCB7CiAg
aW50IGNsb2Nrd2lzZTsKICBwb3NpdGlvbiBjZW50OwogIGRvdWJsZSByYWQ7CnB1YmxpYzoKICBh
cmNfb2JqZWN0KGludCwgY29uc3QgcG9zaXRpb24gJiwgY29uc3QgcG9zaXRpb24gJiwgY29uc3Qg
cG9zaXRpb24gJik7CiAgcG9zaXRpb24gb3JpZ2luKCkgeyByZXR1cm4gY2VudDsgfQogIHBvc2l0
aW9uIGNlbnRlcigpIHsgcmV0dXJuIGNlbnQ7IH0KICBkb3VibGUgcmFkaXVzKCkgeyByZXR1cm4g
cmFkOyB9CiAgcG9zaXRpb24gbm9ydGgoKTsKICBwb3NpdGlvbiBzb3V0aCgpOwogIHBvc2l0aW9u
IGVhc3QoKTsKICBwb3NpdGlvbiB3ZXN0KCk7CiAgcG9zaXRpb24gbm9ydGhfZWFzdCgpOwogIHBv
c2l0aW9uIG5vcnRoX3dlc3QoKTsKICBwb3NpdGlvbiBzb3V0aF9lYXN0KCk7CiAgcG9zaXRpb24g
c291dGhfd2VzdCgpOwogIHZvaWQgdXBkYXRlX2JvdW5kaW5nX2JveChib3VuZGluZ19ib3ggKik7
CiAgb2JqZWN0X3R5cGUgdHlwZSgpIHsgcmV0dXJuIEFSQ19PQkpFQ1Q7IH0KICB2b2lkIHByaW50
KCk7CiAgdm9pZCBtb3ZlX2J5KGNvbnN0IHBvc2l0aW9uICZwb3MpOwp9OwoKYXJjX29iamVjdDo6
YXJjX29iamVjdChpbnQgY3csIGNvbnN0IHBvc2l0aW9uICZzLCBjb25zdCBwb3NpdGlvbiAmZSwK
ICAgICAgICAgY29uc3QgcG9zaXRpb24gJmMpCjogbGluZWFyX29iamVjdChzLCBlKSwgY2xvY2t3
aXNlKGN3KSwgY2VudChjKQp7CiAgcmFkID0gaHlwb3QoYyAtIHMpOwp9Cgp2b2lkIGFyY19vYmpl
Y3Q6Om1vdmVfYnkoY29uc3QgcG9zaXRpb24gJnBvcykKewogIGxpbmVhcl9vYmplY3Q6Om1vdmVf
YnkocG9zKTsKICBjZW50ICs9IHBvczsKfQoKCgpwb3NpdGlvbiBhcmNfb2JqZWN0Ojpub3J0aCgp
CnsKICBwb3NpdGlvbiByZXN1bHQoY2VudCk7CiAgcmVzdWx0LnkgKz0gcmFkOwogIHJldHVybiBy
ZXN1bHQ7Cn0KCnBvc2l0aW9uIGFyY19vYmplY3Q6OnNvdXRoKCkKewogIHBvc2l0aW9uIHJlc3Vs
dChjZW50KTsKICByZXN1bHQueSAtPSByYWQ7CiAgcmV0dXJuIHJlc3VsdDsKfQoKcG9zaXRpb24g
YXJjX29iamVjdDo6ZWFzdCgpCnsKICBwb3NpdGlvbiByZXN1bHQoY2VudCk7CiAgcmVzdWx0Lngg
Kz0gcmFkOwogIHJldHVybiByZXN1bHQ7Cn0KCnBvc2l0aW9uIGFyY19vYmplY3Q6Ondlc3QoKQp7
CiAgcG9zaXRpb24gcmVzdWx0KGNlbnQpOwogIHJlc3VsdC54IC09IHJhZDsKICByZXR1cm4gcmVz
dWx0Owp9Cgpwb3NpdGlvbiBhcmNfb2JqZWN0Ojpub3J0aF9lYXN0KCkKewogIHBvc2l0aW9uIHJl
c3VsdChjZW50KTsKICByZXN1bHQueCArPSByYWQvMS40MTQyMTM1NjIzNzMwOTUwNDg4MDsKICBy
ZXN1bHQueSArPSByYWQvMS40MTQyMTM1NjIzNzMwOTUwNDg4MDsKICByZXR1cm4gcmVzdWx0Owp9
Cgpwb3NpdGlvbiBhcmNfb2JqZWN0Ojpub3J0aF93ZXN0KCkKewogIHBvc2l0aW9uIHJlc3VsdChj
ZW50KTsKICByZXN1bHQueCAtPSByYWQvMS40MTQyMTM1NjIzNzMwOTUwNDg4MDsKICByZXN1bHQu
eSArPSByYWQvMS40MTQyMTM1NjIzNzMwOTUwNDg4MDsKICByZXR1cm4gcmVzdWx0Owp9Cgpwb3Np
dGlvbiBhcmNfb2JqZWN0Ojpzb3V0aF9lYXN0KCkKewogIHBvc2l0aW9uIHJlc3VsdChjZW50KTsK
ICByZXN1bHQueCArPSByYWQvMS40MTQyMTM1NjIzNzMwOTUwNDg4MDsKICByZXN1bHQueSAtPSBy
YWQvMS40MTQyMTM1NjIzNzMwOTUwNDg4MDsKICByZXR1cm4gcmVzdWx0Owp9Cgpwb3NpdGlvbiBh
cmNfb2JqZWN0Ojpzb3V0aF93ZXN0KCkKewogIHBvc2l0aW9uIHJlc3VsdChjZW50KTsKICByZXN1
bHQueCAtPSByYWQvMS40MTQyMTM1NjIzNzMwOTUwNDg4MDsKICByZXN1bHQueSAtPSByYWQvMS40
MTQyMTM1NjIzNzMwOTUwNDg4MDsKICByZXR1cm4gcmVzdWx0Owp9CgoKdm9pZCBhcmNfb2JqZWN0
OjpwcmludCgpCnsKICBpZiAobHQudHlwZSA9PSBsaW5lX3R5cGU6OmludmlzaWJsZSkKICAgIHJl
dHVybjsKICBvdXQtPnNldF9jb2xvcigwLCBncmFwaGljX29iamVjdDo6Z2V0X291dGxpbmVfY29s
b3IoKSk7CiAgaWYgKGNsb2Nrd2lzZSkKICAgIG91dC0+YXJjKGVuLCBjZW50LCBzdHJ0LCBsdCk7
CiAgZWxzZQogICAgb3V0LT5hcmMoc3RydCwgY2VudCwgZW4sIGx0KTsKICBpZiAoYXJyb3dfYXRf
c3RhcnQpIHsKICAgIHBvc2l0aW9uIGMgPSBjZW50IC0gc3RydDsKICAgIGRyYXdfYXJyb3coc3Ry
dCwKICAgICAgICAoY2xvY2t3aXNlID8gcG9zaXRpb24oYy55LCAtYy54KSA6IHBvc2l0aW9uKC1j
LnksIGMueCkpLAogICAgICAgIGFodCwgbHQsIGdyYXBoaWNfb2JqZWN0OjpnZXRfb3V0bGluZV9j
b2xvcigpKTsKICB9CiAgaWYgKGFycm93X2F0X2VuZCkgewogICAgcG9zaXRpb24gZSA9IGVuIC0g
Y2VudDsKICAgIGRyYXdfYXJyb3coZW4sCiAgICAgICAgKGNsb2Nrd2lzZSA/IHBvc2l0aW9uKGUu
eSwgLWUueCkgOiBwb3NpdGlvbigtZS55LCBlLngpKSwKICAgICAgICBhaHQsIGx0LCBncmFwaGlj
X29iamVjdDo6Z2V0X291dGxpbmVfY29sb3IoKSk7CiAgfQogIG91dC0+cmVzZXRfY29sb3IoKTsK
fQoKaW5saW5lIGRvdWJsZSBtYXgoZG91YmxlIGEsIGRvdWJsZSBiKQp7CiAgcmV0dXJuIGEgPiBi
ID8gYSA6IGI7Cn0KCnZvaWQgYXJjX29iamVjdDo6dXBkYXRlX2JvdW5kaW5nX2JveChib3VuZGlu
Z19ib3ggKnApCnsKICBwLT5lbmNvbXBhc3Moc3RydCk7CiAgcC0+ZW5jb21wYXNzKGVuKTsKICBw
b3NpdGlvbiBzdGFydF9vZmZzZXQgPSBzdHJ0IC0gY2VudDsKICBpZiAoc3RhcnRfb2Zmc2V0Lngg
PT0gMC4wICYmIHN0YXJ0X29mZnNldC55ID09IDAuMCkKICAgIHJldHVybjsKICBwb3NpdGlvbiBl
bmRfb2Zmc2V0ID0gZW4gLSBjZW50OwogIGlmIChlbmRfb2Zmc2V0LnggPT0gMC4wICYmIGVuZF9v
ZmZzZXQueSA9PSAwLjApCiAgICByZXR1cm47CiAgZG91YmxlIHN0YXJ0X3F1YWQgPSBhdGFuMihz
dGFydF9vZmZzZXQueSwgc3RhcnRfb2Zmc2V0LngpLygzLjE0MTU5MjY1MzU4OTc5MzIzODQ2LzIu
MCk7CiAgZG91YmxlIGVuZF9xdWFkID0gYXRhbjIoZW5kX29mZnNldC55LCBlbmRfb2Zmc2V0Lngp
LygzLjE0MTU5MjY1MzU4OTc5MzIzODQ2LzIuMCk7CiAgaWYgKGNsb2Nrd2lzZSkgewogICAgZG91
YmxlIHRlbXAgPSBzdGFydF9xdWFkOwogICAgc3RhcnRfcXVhZCA9IGVuZF9xdWFkOwogICAgZW5k
X3F1YWQgPSB0ZW1wOwogIH0KICBpZiAoc3RhcnRfcXVhZCA8IDAuMCkKICAgIHN0YXJ0X3F1YWQg
Kz0gNC4wOwogIHdoaWxlIChlbmRfcXVhZCA8PSBzdGFydF9xdWFkKQogICAgZW5kX3F1YWQgKz0g
NC4wOwogIGRvdWJsZSByYWRpdXMgPSBtYXgoaHlwb3Qoc3RhcnRfb2Zmc2V0KSwgaHlwb3QoZW5k
X29mZnNldCkpOwogIGZvciAoaW50IHEgPSBpbnQoc3RhcnRfcXVhZCkgKyAxOyBxIDwgZW5kX3F1
YWQ7IHErKykgewogICAgcG9zaXRpb24gb2Zmc2V0OwogICAgc3dpdGNoIChxICUgNCkgewogICAg
Y2FzZSAwOgogICAgICBvZmZzZXQueCA9IHJhZGl1czsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE6
CiAgICAgIG9mZnNldC55ID0gcmFkaXVzOwogICAgICBicmVhazsKICAgIGNhc2UgMjoKICAgICAg
b2Zmc2V0LnggPSAtcmFkaXVzOwogICAgICBicmVhazsKICAgIGNhc2UgMzoKICAgICAgb2Zmc2V0
LnkgPSAtcmFkaXVzOwogICAgICBicmVhazsKICAgIH0KICAgIHAtPmVuY29tcGFzcyhjZW50ICsg
b2Zmc2V0KTsKICB9Cn0KCgoKbGluZWFyX29iamVjdCAqb2JqZWN0X3NwZWM6Om1ha2VfYXJjKHBv
c2l0aW9uICpjdXJwb3MsIGRpcmVjdGlvbiAqZGlycCkKewogICpkaXJwID0gZGlyOwogIGludCBj
dyA9IChmbGFncyAmIElTX0NMT0NLV0lTRSkgIT0gMDsKCiAgcG9zaXRpb24gc3RhcnRwb3M7CiAg
aWYgKGZsYWdzICYgSEFTX0ZST00pCiAgICBzdGFydHBvcyA9IGZyb207CiAgZWxzZQogICAgc3Rh
cnRwb3MgPSAqY3VycG9zOwogIGlmICghKGZsYWdzICYgSEFTX1JBRElVUykpCiAgICBsb29rdXBf
dmFyaWFibGUoImFyY3JhZCIsICZyYWRpdXMpOwoKICBwb3NpdGlvbiBlbmRwb3M7CiAgaWYgKGZs
YWdzICYgSEFTX1RPKQogICAgZW5kcG9zID0gdG87CiAgZWxzZSB7CiAgICBwb3NpdGlvbiBtKHJh
ZGl1cywgcmFkaXVzKTsKCiAgICBpZiAoY3cpIHsKICAgICAgaWYgKGRpciA9PSBET1dOX0RJUkVD
VElPTiB8fCBkaXIgPT0gTEVGVF9ESVJFQ1RJT04pCiBtLnggPSAtbS54OwogICAgICBpZiAoZGly
ID09IERPV05fRElSRUNUSU9OIHx8IGRpciA9PSBSSUdIVF9ESVJFQ1RJT04pCiBtLnkgPSAtbS55
OwogICAgICAqZGlycCA9IGRpcmVjdGlvbigoZGlyICsgMykgJSA0KTsKICAgIH0KICAgIGVsc2Ug
ewogICAgICBpZiAoZGlyID09IFVQX0RJUkVDVElPTiB8fCBkaXIgPT0gTEVGVF9ESVJFQ1RJT04p
CiBtLnggPSAtbS54OwogICAgICBpZiAoZGlyID09IERPV05fRElSRUNUSU9OIHx8IGRpciA9PSBM
RUZUX0RJUkVDVElPTikKIG0ueSA9IC1tLnk7CiAgICAgICpkaXJwID0gZGlyZWN0aW9uKChkaXIg
KyAxKSAlIDQpOwogICAgfQogICAgZW5kcG9zID0gc3RhcnRwb3MgKyBtOwogIH0KCiAgcG9zaXRp
b24gY2VudGVycG9zOwogIGlmIChmbGFncyAmIEhBU19BVCkKICAgIGNlbnRlcnBvcyA9IGF0Owog
IGVsc2UgaWYgKHN0YXJ0cG9zID09IGVuZHBvcykKICAgIGNlbnRlcnBvcyA9IHN0YXJ0cG9zOwog
IGVsc2UgewogICAgcG9zaXRpb24gaCA9IChlbmRwb3MgLSBzdGFydHBvcykvMi4wOwogICAgZG91
YmxlIGQgPSBoeXBvdChoKTsKICAgIGlmIChyYWRpdXMgPD0gMCkKICAgICAgcmFkaXVzID0gLjI1
OwoKICAgIHdoaWxlIChyYWRpdXMgPCBkKQogICAgICByYWRpdXMgKj0gMi4wOwogICAgZG91Ymxl
IGFscGhhID0gYWNvcyhkL3JhZGl1cyk7CiAgICBkb3VibGUgdGhldGEgPSBhdGFuMihoLnksIGgu
eCk7CiAgICBpZiAoY3cpCiAgICAgIHRoZXRhIC09IGFscGhhOwogICAgZWxzZQogICAgICB0aGV0
YSArPSBhbHBoYTsKICAgIGNlbnRlcnBvcyA9IHBvc2l0aW9uKGNvcyh0aGV0YSksIHNpbih0aGV0
YSkpKnJhZGl1cyArIHN0YXJ0cG9zOwogIH0KICBhcmNfb2JqZWN0ICpwID0gbmV3IGFyY19vYmpl
Y3QoY3csIHN0YXJ0cG9zLCBlbmRwb3MsIGNlbnRlcnBvcyk7CiAgKmN1cnBvcyA9IGVuZHBvczsK
ICByZXR1cm4gcDsKfQoKZ3JhcGhpY19vYmplY3QgKm9iamVjdF9zcGVjOjptYWtlX2xpbmVhcihw
b3NpdGlvbiAqY3VycG9zLCBkaXJlY3Rpb24gKmRpcnApCnsKICBsaW5lYXJfb2JqZWN0ICpvYmo7
CiAgaWYgKHR5cGUgPT0gQVJDX09CSkVDVCkKICAgIG9iaiA9IG1ha2VfYXJjKGN1cnBvcywgZGly
cCk7CiAgZWxzZQogICAgb2JqID0gbWFrZV9saW5lKGN1cnBvcywgZGlycCk7CiAgaWYgKHR5cGUg
PT0gQVJST1dfT0JKRUNUCiAgICAgICYmIChmbGFncyAmIChIQVNfTEVGVF9BUlJPV19IRUFEfEhB
U19SSUdIVF9BUlJPV19IRUFEKSkgPT0gMCkKICAgIGZsYWdzIHw9IEhBU19SSUdIVF9BUlJPV19I
RUFEOwogIGlmIChvYmogJiYgKGZsYWdzICYgKEhBU19MRUZUX0FSUk9XX0hFQUR8SEFTX1JJR0hU
X0FSUk9XX0hFQUQpKSkgewogICAgYXJyb3dfaGVhZF90eXBlIGE7CiAgICBpbnQgYXRfc3RhcnQg
PSAoZmxhZ3MgJiBIQVNfTEVGVF9BUlJPV19IRUFEKSAhPSAwOwogICAgaW50IGF0X2VuZCA9IChm
bGFncyAmIEhBU19SSUdIVF9BUlJPV19IRUFEKSAhPSAwOwogICAgaWYgKGZsYWdzICYgSEFTX0hF
SUdIVCkKICAgICAgYS5oZWlnaHQgPSBoZWlnaHQ7CiAgICBlbHNlCiAgICAgIGxvb2t1cF92YXJp
YWJsZSgiYXJyb3dodCIsICZhLmhlaWdodCk7CiAgICBpZiAoZmxhZ3MgJiBIQVNfV0lEVEgpCiAg
ICAgIGEud2lkdGggPSB3aWR0aDsKICAgIGVsc2UKICAgICAgbG9va3VwX3ZhcmlhYmxlKCJhcnJv
d3dpZCIsICZhLndpZHRoKTsKICAgIGRvdWJsZSBzb2xpZDsKICAgIGxvb2t1cF92YXJpYWJsZSgi
YXJyb3doZWFkIiwgJnNvbGlkKTsKICAgIGEuc29saWQgPSBzb2xpZCAhPSAwLjA7CiAgICBvYmot
PmFkZF9hcnJvd3MoYXRfc3RhcnQsIGF0X2VuZCwgYSk7CiAgfQogIHJldHVybiBvYmo7Cn0KCm9i
amVjdCAqb2JqZWN0X3NwZWM6Om1ha2Vfb2JqZWN0KHBvc2l0aW9uICpjdXJwb3MsIGRpcmVjdGlv
biAqZGlycCkKewogIGdyYXBoaWNfb2JqZWN0ICpvYmogPSAwOwogIHN3aXRjaCAodHlwZSkgewog
IGNhc2UgQkxPQ0tfT0JKRUNUOgogICAgb2JqID0gbWFrZV9ibG9jayhjdXJwb3MsIGRpcnApOwog
ICAgYnJlYWs7CiAgY2FzZSBCT1hfT0JKRUNUOgogICAgb2JqID0gbWFrZV9ib3goY3VycG9zLCBk
aXJwKTsKICAgIGJyZWFrOwogIGNhc2UgVEVYVF9PQkpFQ1Q6CiAgICBvYmogPSBtYWtlX3RleHQo
Y3VycG9zLCBkaXJwKTsKICAgIGJyZWFrOwogIGNhc2UgRUxMSVBTRV9PQkpFQ1Q6CiAgICBvYmog
PSBtYWtlX2VsbGlwc2UoY3VycG9zLCBkaXJwKTsKICAgIGJyZWFrOwogIGNhc2UgQ0lSQ0xFX09C
SkVDVDoKICAgIG9iaiA9IG1ha2VfY2lyY2xlKGN1cnBvcywgZGlycCk7CiAgICBicmVhazsKICBj
YXNlIE1PVkVfT0JKRUNUOgogICAgb2JqID0gbWFrZV9tb3ZlKGN1cnBvcywgZGlycCk7CiAgICBi
cmVhazsKICBjYXNlIEFSQ19PQkpFQ1Q6CiAgY2FzZSBMSU5FX09CSkVDVDoKICBjYXNlIFNQTElO
RV9PQkpFQ1Q6CiAgY2FzZSBBUlJPV19PQkpFQ1Q6CiAgICBvYmogPSBtYWtlX2xpbmVhcihjdXJw
b3MsIGRpcnApOwogICAgYnJlYWs7CiAgY2FzZSBNQVJLX09CSkVDVDoKICBjYXNlIE9USEVSX09C
SkVDVDoKICBkZWZhdWx0OgogICAgZG9fYXNzZXJ0KDAsIDE3MzYsICJvYmplY3QuY3BwIik7CiAg
ICBicmVhazsKICB9CiAgaWYgKG9iaikgewogICAgaWYgKGZsYWdzICYgSVNfSU5WSVNJQkxFKQog
ICAgICBvYmotPnNldF9pbnZpc2libGUoKTsKICAgIGlmICh0ZXh0ICE9IDApCiAgICAgIG9iai0+
YWRkX3RleHQodGV4dCwgKGZsYWdzICYgSVNfQUxJR05FRCkgIT0gMCk7CiAgICBpZiAoZmxhZ3Mg
JiBJU19ET1RURUQpCiAgICAgIG9iai0+c2V0X2RvdHRlZChkYXNoX3dpZHRoKTsKICAgIGVsc2Ug
aWYgKGZsYWdzICYgSVNfREFTSEVEKQogICAgICBvYmotPnNldF9kYXNoZWQoZGFzaF93aWR0aCk7
CiAgICBkb3VibGUgdGg7CiAgICBpZiAoZmxhZ3MgJiBIQVNfVEhJQ0tORVNTKQogICAgICB0aCA9
IHRoaWNrbmVzczsKICAgIGVsc2UKICAgICAgbG9va3VwX3ZhcmlhYmxlKCJsaW5ldGhpY2siLCAm
dGgpOwogICAgb2JqLT5zZXRfdGhpY2tuZXNzKHRoKTsKICAgIGlmIChmbGFncyAmIElTX09VVExJ
TkVEKQogICAgICBvYmotPnNldF9vdXRsaW5lX2NvbG9yKG91dGxpbmVkKTsKICAgIGlmIChmbGFn
cyAmIChJU19ERUZBVUxUX0ZJTExFRHxJU19GSUxMRUQpKSB7CiAgICAgIGlmIChmbGFncyAmIElT
X1NIQURFRCkKIG9iai0+c2V0X2ZpbGxfY29sb3Ioc2hhZGVkKTsKICAgICAgZWxzZSB7CiBpZiAo
ZmxhZ3MgJiBJU19ERUZBVUxUX0ZJTExFRCkKICAgbG9va3VwX3ZhcmlhYmxlKCJmaWxsdmFsIiwg
JmZpbGwpOwogaWYgKGZpbGwgPCAwLjApCiAgIGVycm9yKCJiYWQgZmlsbCB2YWx1ZSAlMSIsIGZp
bGwpOwogZWxzZQogICBvYmotPnNldF9maWxsKGZpbGwpOwogICAgICB9CiAgICB9CiAgfQogIHJl
dHVybiBvYmo7Cn0KCnN0cnVjdCBzdHJpbmdfbGlzdCB7CiAgc3RyaW5nX2xpc3QgKm5leHQ7CiAg
Y2hhciAqc3RyOwogIHN0cmluZ19saXN0KGNoYXIgKik7CiAgfnN0cmluZ19saXN0KCk7Cn07Cgpz
dHJpbmdfbGlzdDo6c3RyaW5nX2xpc3QoY2hhciAqcykKOiBuZXh0KDApLCBzdHIocykKewp9Cgpz
dHJpbmdfbGlzdDo6fnN0cmluZ19saXN0KCkKewogIGRlbGV0ZSBbXSBzdHI7Cn0KIyAxNzk3ICJv
YmplY3QuY3BwIgpwYXRoOjpwYXRoKGNvcm5lciBjKQo6IGNybihjKSwgbGFiZWxfbGlzdCgwKSwg
eXBhdGgoMCksIGlzX3Bvc2l0aW9uKDApCnsKfQoKcGF0aDo6cGF0aChwb3NpdGlvbiBwKQo6IGNy
bigwKSwgbGFiZWxfbGlzdCgwKSwgeXBhdGgoMCksIGlzX3Bvc2l0aW9uKDEpCnsKICBwb3MueCA9
IHAueDsKICBwb3MueSA9IHAueTsKfQoKcGF0aDo6cGF0aChjaGFyICpsLCBjb3JuZXIgYykKOiBj
cm4oYyksIHlwYXRoKDApLCBpc19wb3NpdGlvbigwKQp7CiAgbGFiZWxfbGlzdCA9IG5ldyBzdHJp
bmdfbGlzdChsKTsKfQoKcGF0aDo6fnBhdGgoKQp7CiAgd2hpbGUgKGxhYmVsX2xpc3QpIHsKICAg
IHN0cmluZ19saXN0ICp0ZW0gPSBsYWJlbF9saXN0OwogICAgbGFiZWxfbGlzdCA9IGxhYmVsX2xp
c3QtPm5leHQ7CiAgICBkZWxldGUgdGVtOwogIH0KICBkZWxldGUgeXBhdGg7Cn0KCnZvaWQgcGF0
aDo6YXBwZW5kKGNvcm5lciBjKQp7CiAgZG9fYXNzZXJ0KGNybiA9PSAwLCAxODI3LCAib2JqZWN0
LmNwcCIpOwogIGNybiA9IGM7Cn0KCnZvaWQgcGF0aDo6YXBwZW5kKGNoYXIgKnMpCnsKICBzdHJp
bmdfbGlzdCAqKnA7CiAgZm9yIChwID0gJmxhYmVsX2xpc3Q7ICpwOyBwID0gJigqcCktPm5leHQp
CiAgICA7CiAgKnAgPSBuZXcgc3RyaW5nX2xpc3Qocyk7Cn0KCnZvaWQgcGF0aDo6c2V0X3lwYXRo
KHBhdGggKnApCnsKICB5cGF0aCA9IHA7Cn0KCgoKaW50IHBhdGg6OmZvbGxvdyhjb25zdCBwbGFj
ZSAmcGwsIHBsYWNlICpyZXN1bHQpIGNvbnN0CnsKICBpZiAoaXNfcG9zaXRpb24pIHsKICAgIHJl
c3VsdC0+eCA9IHBvcy54OwogICAgcmVzdWx0LT55ID0gcG9zLnk7CiAgICByZXN1bHQtPm9iaiA9
IDA7CiAgICByZXR1cm4gMTsKICB9CiAgY29uc3QgcGxhY2UgKnAgPSAmcGw7CiAgZm9yIChzdHJp
bmdfbGlzdCAqbGIgPSBsYWJlbF9saXN0OyBsYjsgbGIgPSBsYi0+bmV4dCkKICAgIGlmIChwLT5v
YmogPT0gMCB8fCAocCA9IHAtPm9iai0+ZmluZF9sYWJlbChsYi0+c3RyKSkgPT0gMCkgewogICAg
ICBsZXhfZXJyb3IoIm9iamVjdCBkb2VzIG5vdCBjb250YWluIGEgcGxhY2UgYCUxJyIsIGxiLT5z
dHIpOwogICAgICByZXR1cm4gMDsKICAgIH0KICBpZiAoY3JuID09IDAgfHwgcC0+b2JqID09IDAp
CiAgICAqcmVzdWx0ID0gKnA7CiAgZWxzZSB7CiAgICBwb3NpdGlvbiBwcyA9ICgocC0+b2JqKS0+
Kihjcm4pKSgpOwogICAgcmVzdWx0LT54ID0gcHMueDsKICAgIHJlc3VsdC0+eSA9IHBzLnk7CiAg
ICByZXN1bHQtPm9iaiA9IDA7CiAgfQogIGlmICh5cGF0aCkgewogICAgcGxhY2UgdGVtOwogICAg
aWYgKCF5cGF0aC0+Zm9sbG93KHBsLCAmdGVtKSkKICAgICAgcmV0dXJuIDA7CiAgICByZXN1bHQt
PnkgPSB0ZW0ueTsKICAgIGlmIChyZXN1bHQtPm9iaiAhPSB0ZW0ub2JqKQogICAgICByZXN1bHQt
Pm9iaiA9IDA7CiAgfQogIHJldHVybiAxOwp9Cgp2b2lkIHByaW50X29iamVjdF9saXN0KG9iamVj
dCAqcCkKewogIGZvciAoOyBwOyBwID0gcC0+bmV4dCkgewogICAgcC0+cHJpbnQoKTsKICAgIHAt
PnByaW50X3RleHQoKTsKICB9Cn0KCnZvaWQgcHJpbnRfcGljdHVyZShvYmplY3QgKm9iaikKewog
IGJvdW5kaW5nX2JveCBiYjsKICBmb3IgKG9iamVjdCAqcCA9IG9iajsgcDsgcCA9IHAtPm5leHQp
CiAgICBwLT51cGRhdGVfYm91bmRpbmdfYm94KCZiYik7CiAgZG91YmxlIHNjYWxlOwogIGxvb2t1
cF92YXJpYWJsZSgic2NhbGUiLCAmc2NhbGUpOwogIG91dC0+c3RhcnRfcGljdHVyZShzY2FsZSwg
YmIubGwsIGJiLnVyKTsKICBwcmludF9vYmplY3RfbGlzdChvYmopOwogIG91dC0+ZmluaXNoX3Bp
Y3R1cmUoKTsKfQo=
</data>        

          </attachment>
    </bug>

</bugzilla>