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


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

c/9525: incorrect code generation on SSE2 intrinsics


>Number:         9525
>Category:       c
>Synopsis:       incorrect code generation on SSE2 intrinsics
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          wrong-code
>Submitter-Id:   net
>Arrival-Date:   Fri Jan 31 14:36:01 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     D Huen
>Release:        gcc version 3.3 20030117 (prerelease)
>Organization:
>Environment:
intel P4 on RH8.1 chandler beta
>Description:
The test file is a compilable snippet from a large program.  Wrong code generation still occurs in this snippet although the error is different.

When compiled this wrong code is generated:-
main:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $72, %esp
        movdqa  (%eax), %xmm0
        andl    $-16, %esp
        movdqa  %xmm0, -40(%ebp)
        movaps  %xmm0, %xmm2
        movdqa  -24(%ebp), %xmm0
        pcmpeqd %xmm0, %xmm2
        movdqa  %xmm0, %xmm1
        movdqa  %xmm2, %xmm0
        pand    %xmm2, %xmm1
        pandn   -40(%ebp), %xmm0
        por     %xmm0, %xmm1

The _mm_add_epi32 is eliminated and the pandn then picks up the wrong value.  In the original program from which this snippet came , the arguments of pandn are correct but swapped.
>How-To-Repeat:
gcc -O2 -S -march=pentium4 -mmmx -msse -msse2 test.c
>Fix:
I have worked around with inline assembler.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="test.i"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="test.i"

IyAxICJ0ZXN0LmMiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBsaW5lPiIKIyAxICJ0
ZXN0LmMiCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMv
aW5jbHVkZS94bW1pbnRyaW4uaCIgMSAzIDQKIyAzOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS94bW1pbnRyaW4uaCIgMyA0CiMgMSAiL3Vzci9s
b2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9tbWludHJpbi5o
IiAxIDMgNAojIDM3ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
My9pbmNsdWRlL21taW50cmluLmgiIDMgNAp0eXBlZGVmIGludCBfX202NCBfX2F0dHJpYnV0ZV9f
ICgoX19tb2RlX18gKF9fVjJTSV9fKSkpOwoKCnR5cGVkZWYgaW50IF9fdjJzaSBfX2F0dHJpYnV0
ZV9fICgoX19tb2RlX18gKF9fVjJTSV9fKSkpOwp0eXBlZGVmIGludCBfX3Y0aGkgX19hdHRyaWJ1
dGVfXyAoKF9fbW9kZV9fIChfX1Y0SElfXykpKTsKdHlwZWRlZiBpbnQgX192OHFpIF9fYXR0cmli
dXRlX18gKChfX21vZGVfXyAoX19WOFFJX18pKSk7CgoKc3RhdGljIF9faW5saW5lIHZvaWQKX21t
X2VtcHR5ICh2b2lkKQp7CiAgX19idWlsdGluX2lhMzJfZW1tcyAoKTsKfQoKCnN0YXRpYyBfX2lu
bGluZSBfX202NApfbW1fY3Z0c2kzMl9zaTY0IChpbnQgX19pKQp7CiAgbG9uZyBsb25nIF9fdG1w
ID0gKHVuc2lnbmVkIGludClfX2k7CiAgcmV0dXJuIChfX202NCkgX190bXA7Cn0KCgpzdGF0aWMg
X19pbmxpbmUgaW50Cl9tbV9jdnRzaTY0X3NpMzIgKF9fbTY0IF9faSkKewogIGxvbmcgbG9uZyBf
X3RtcCA9IChsb25nIGxvbmcpX19pOwogIHJldHVybiBfX3RtcDsKfQoKCgoKc3RhdGljIF9faW5s
aW5lIF9fbTY0Cl9tbV9wYWNrc19waTE2IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0
dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcGFja3Nzd2IgKChfX3Y0aGkpX19tMSwgKF9fdjRo
aSlfX20yKTsKfQoKCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9wYWNrc19waTMyIChfX202
NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcGFj
a3NzZHcgKChfX3Yyc2kpX19tMSwgKF9fdjJzaSlfX20yKTsKfQoKCgoKc3RhdGljIF9faW5saW5l
IF9fbTY0Cl9tbV9wYWNrc19wdTE2IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJu
IChfX202NCkgX19idWlsdGluX2lhMzJfcGFja3Vzd2IgKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlf
X20yKTsKfQoKCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX3VucGFja2hpX3BpOCAoX19tNjQg
X19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3B1bnBj
a2hidyAoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOwp9CgoKCnN0YXRpYyBfX2lubGluZSBf
X202NApfbW1fdW5wYWNraGlfcGkxNiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVy
biAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2h3ZCAoKF9fdjRoaSlfX20xLCAoX192NGhp
KV9fbTIpOwp9CgoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fdW5wYWNraGlfcGkzMiAoX19t
NjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3B1
bnBja2hkcSAoKF9fdjJzaSlfX20xLCAoX192MnNpKV9fbTIpOwp9CgoKCnN0YXRpYyBfX2lubGlu
ZSBfX202NApfbW1fdW5wYWNrbG9fcGk4IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0
dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHVucGNrbGJ3ICgoX192OHFpKV9fbTEsIChfX3Y4
cWkpX19tMik7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV91bnBhY2tsb19waTE2IChf
X202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJf
cHVucGNrbHdkICgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cn0KCgoKc3RhdGljIF9faW5s
aW5lIF9fbTY0Cl9tbV91bnBhY2tsb19waTMyIChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAg
cmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHVucGNrbGRxICgoX192MnNpKV9fbTEsIChf
X3Yyc2kpX19tMik7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX2FkZF9waTggKF9fbTY0
IF9fbTEsIF9fbTY0IF9fbTIpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wYWRk
YiAoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTY0
Cl9tbV9hZGRfcGkxNiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQp
IF9fYnVpbHRpbl9pYTMyX3BhZGR3ICgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cn0KCgpz
dGF0aWMgX19pbmxpbmUgX19tNjQKX21tX2FkZF9waTMyIChfX202NCBfX20xLCBfX202NCBfX20y
KQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcGFkZGQgKChfX3Yyc2kpX19tMSwg
KF9fdjJzaSlfX20yKTsKfQoKCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX2FkZHNfcGk4IChf
X202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJf
cGFkZHNiICgoX192OHFpKV9fbTEsIChfX3Y4cWkpX19tMik7Cn0KCgoKc3RhdGljIF9faW5saW5l
IF9fbTY0Cl9tbV9hZGRzX3BpMTYgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCnsKICByZXR1cm4g
KF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wYWRkc3cgKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20y
KTsKfQoKCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX2FkZHNfcHU4IChfX202NCBfX20xLCBf
X202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcGFkZHVzYiAoKF9f
djhxaSlfX20xLCAoX192OHFpKV9fbTIpOwp9CgoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1f
YWRkc19wdTE2IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19i
dWlsdGluX2lhMzJfcGFkZHVzdyAoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOwp9CgoKc3Rh
dGljIF9faW5saW5lIF9fbTY0Cl9tbV9zdWJfcGk4IChfX202NCBfX20xLCBfX202NCBfX20yKQp7
CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHN1YmIgKChfX3Y4cWkpX19tMSwgKF9f
djhxaSlfX20yKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fc3ViX3BpMTYgKF9fbTY0
IF9fbTEsIF9fbTY0IF9fbTIpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wc3Vi
dyAoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTY0
Cl9tbV9zdWJfcGkzMiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQp
IF9fYnVpbHRpbl9pYTMyX3BzdWJkICgoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7Cn0KCgoK
c3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zdWJzX3BpOCAoX19tNjQgX19tMSwgX19tNjQgX19t
MikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzdWJzYiAoKF9fdjhxaSlfX20x
LCAoX192OHFpKV9fbTIpOwp9CgoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fc3Vic19waTE2
IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lh
MzJfcHN1YnN3ICgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cn0KCgoKc3RhdGljIF9faW5s
aW5lIF9fbTY0Cl9tbV9zdWJzX3B1OCAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVy
biAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c2IgKChfX3Y4cWkpX19tMSwgKF9fdjhxaSlf
X20yKTsKfQoKCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX3N1YnNfcHUxNiAoX19tNjQgX19t
MSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c3cg
KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKfQoKCgoKc3RhdGljIF9faW5saW5lIF9fbTY0
Cl9tbV9tYWRkX3BpMTYgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCnsKICByZXR1cm4gKF9fbTY0
KSBfX2J1aWx0aW5faWEzMl9wbWFkZHdkICgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cn0K
CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9tdWxoaV9waTE2IChfX202NCBfX20xLCBfX202
NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcG11bGh3ICgoX192NGhp
KV9fbTEsIChfX3Y0aGkpX19tMik7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9tdWxs
b19waTE2IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWls
dGluX2lhMzJfcG11bGx3ICgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cn0KCgpzdGF0aWMg
X19pbmxpbmUgX19tNjQKX21tX3NsbF9waTE2IChfX202NCBfX20sIF9fbTY0IF9fY291bnQpCnsK
ICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wc2xsdyAoKF9fdjRoaSlfX20sIChsb25n
IGxvbmcpX19jb3VudCk7Cn0KCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fc2xsaV9waTE2IChf
X202NCBfX20sIGludCBfX2NvdW50KQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJf
cHNsbHcgKChfX3Y0aGkpX19tLCBfX2NvdW50KTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202NApf
bW1fc2xsX3BpMzIgKF9fbTY0IF9fbSwgX19tNjQgX19jb3VudCkKewogIHJldHVybiAoX19tNjQp
IF9fYnVpbHRpbl9pYTMyX3BzbGxkICgoX192MnNpKV9fbSwgKGxvbmcgbG9uZylfX2NvdW50KTsK
fQoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zbGxpX3BpMzIgKF9fbTY0IF9fbSwgaW50IF9f
Y291bnQpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wc2xsZCAoKF9fdjJzaSlf
X20sIF9fY291bnQpOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zbGxfc2k2NCAoX19t
NjQgX19tLCBfX202NCBfX2NvdW50KQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJf
cHNsbHEgKChsb25nIGxvbmcpX19tLCAobG9uZyBsb25nKV9fY291bnQpOwp9CgpzdGF0aWMgX19p
bmxpbmUgX19tNjQKX21tX3NsbGlfc2k2NCAoX19tNjQgX19tLCBpbnQgX19jb3VudCkKewogIHJl
dHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzbGxxICgobG9uZyBsb25nKV9fbSwgKGxvbmcg
bG9uZylfX2NvdW50KTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fc3JhX3BpMTYgKF9f
bTY0IF9fbSwgX19tNjQgX19jb3VudCkKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMy
X3BzcmF3ICgoX192NGhpKV9fbSwgKGxvbmcgbG9uZylfX2NvdW50KTsKfQoKc3RhdGljIF9faW5s
aW5lIF9fbTY0Cl9tbV9zcmFpX3BpMTYgKF9fbTY0IF9fbSwgaW50IF9fY291bnQpCnsKICByZXR1
cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wc3JhdyAoKF9fdjRoaSlfX20sIF9fY291bnQpOwp9
CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zcmFfcGkzMiAoX19tNjQgX19tLCBfX202NCBf
X2NvdW50KQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHNyYWQgKChfX3Yyc2kp
X19tLCAobG9uZyBsb25nKV9fY291bnQpOwp9CgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX3Ny
YWlfcGkzMiAoX19tNjQgX19tLCBpbnQgX19jb3VudCkKewogIHJldHVybiAoX19tNjQpIF9fYnVp
bHRpbl9pYTMyX3BzcmFkICgoX192MnNpKV9fbSwgX19jb3VudCk7Cn0KCgpzdGF0aWMgX19pbmxp
bmUgX19tNjQKX21tX3NybF9waTE2IChfX202NCBfX20sIF9fbTY0IF9fY291bnQpCnsKICByZXR1
cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wc3JsdyAoKF9fdjRoaSlfX20sIChsb25nIGxvbmcp
X19jb3VudCk7Cn0KCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fc3JsaV9waTE2IChfX202NCBf
X20sIGludCBfX2NvdW50KQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHNybHcg
KChfX3Y0aGkpX19tLCBfX2NvdW50KTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fc3Js
X3BpMzIgKF9fbTY0IF9fbSwgX19tNjQgX19jb3VudCkKewogIHJldHVybiAoX19tNjQpIF9fYnVp
bHRpbl9pYTMyX3BzcmxkICgoX192MnNpKV9fbSwgKGxvbmcgbG9uZylfX2NvdW50KTsKfQoKc3Rh
dGljIF9faW5saW5lIF9fbTY0Cl9tbV9zcmxpX3BpMzIgKF9fbTY0IF9fbSwgaW50IF9fY291bnQp
CnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wc3JsZCAoKF9fdjJzaSlfX20sIF9f
Y291bnQpOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zcmxfc2k2NCAoX19tNjQgX19t
LCBfX202NCBfX2NvdW50KQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHNybHEg
KChsb25nIGxvbmcpX19tLCAobG9uZyBsb25nKV9fY291bnQpOwp9CgpzdGF0aWMgX19pbmxpbmUg
X19tNjQKX21tX3NybGlfc2k2NCAoX19tNjQgX19tLCBpbnQgX19jb3VudCkKewogIHJldHVybiAo
X19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzcmxxICgobG9uZyBsb25nKV9fbSwgKGxvbmcgbG9uZylf
X2NvdW50KTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fYW5kX3NpNjQgKF9fbTY0IF9f
bTEsIF9fbTY0IF9fbTIpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wYW5kICgo
bG9uZyBsb25nKV9fbTEsIChsb25nIGxvbmcpX19tMik7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9f
bTY0Cl9tbV9hbmRub3Rfc2k2NCAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAo
X19tNjQpIF9fYnVpbHRpbl9pYTMyX3BhbmRuICgobG9uZyBsb25nKV9fbTEsIChsb25nIGxvbmcp
X19tMik7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX29yX3NpNjQgKF9fbTY0IF9fbTEs
IF9fbTY0IF9fbTIpCnsKICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BvciAoKGxvbmcg
bG9uZylfX20xLCAobG9uZyBsb25nKV9fbTIpOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9t
bV94b3Jfc2k2NCAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQpX19i
dWlsdGluX2lhMzJfcHhvciAoKGxvbmcgbG9uZylfX20xLCAobG9uZyBsb25nKV9fbTIpOwp9CgoK
CnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fY21wZXFfcGk4IChfX202NCBfX20xLCBfX202NCBf
X20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcGNtcGVxYiAoKF9fdjhxaSlf
X20xLCAoX192OHFpKV9fbTIpOwp9CgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX2NtcGd0X3Bp
OCAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9p
YTMyX3BjbXBndGIgKChfX3Y4cWkpX19tMSwgKF9fdjhxaSlfX20yKTsKfQoKCgpzdGF0aWMgX19p
bmxpbmUgX19tNjQKX21tX2NtcGVxX3BpMTYgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCnsKICBy
ZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wY21wZXF3ICgoX192NGhpKV9fbTEsIChfX3Y0
aGkpX19tMik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fY21wZ3RfcGkxNiAoX19tNjQg
X19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BjbXBn
dHcgKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKfQoKCgpzdGF0aWMgX19pbmxpbmUgX19t
NjQKX21tX2NtcGVxX3BpMzIgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCnsKICByZXR1cm4gKF9f
bTY0KSBfX2J1aWx0aW5faWEzMl9wY21wZXFkICgoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7
Cn0KCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fY21wZ3RfcGkzMiAoX19tNjQgX19tMSwgX19t
NjQgX19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BjbXBndGQgKChfX3Yy
c2kpX19tMSwgKF9fdjJzaSlfX20yKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fc2V0
emVyb19zaTY0ICh2b2lkKQp7CiAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9tbXhfemVy
byAoKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fc2V0X3BpMzIgKGludCBfX2kxLCBp
bnQgX19pMCkKewogIHVuaW9uIHsKICAgIF9fbTY0IF9fcTsKICAgIHN0cnVjdCB7CiAgICAgIHVu
c2lnbmVkIGludCBfX2kwOwogICAgICB1bnNpZ25lZCBpbnQgX19pMTsKICAgIH0gX19zOwogIH0g
X191OwoKICBfX3UuX19zLl9faTAgPSBfX2kwOwogIF9fdS5fX3MuX19pMSA9IF9faTE7CgogIHJl
dHVybiBfX3UuX19xOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zZXRfcGkxNiAoc2hv
cnQgX193Mywgc2hvcnQgX193Miwgc2hvcnQgX193MSwgc2hvcnQgX193MCkKewogIHVuc2lnbmVk
IGludCBfX2kxID0gKHVuc2lnbmVkIHNob3J0KV9fdzMgPDwgMTYgfCAodW5zaWduZWQgc2hvcnQp
X193MjsKICB1bnNpZ25lZCBpbnQgX19pMCA9ICh1bnNpZ25lZCBzaG9ydClfX3cxIDw8IDE2IHwg
KHVuc2lnbmVkIHNob3J0KV9fdzA7CiAgcmV0dXJuIF9tbV9zZXRfcGkzMiAoX19pMSwgX19pMCk7
Cgp9CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zZXRfcGk4IChjaGFyIF9fYjcsIGNoYXIg
X19iNiwgY2hhciBfX2I1LCBjaGFyIF9fYjQsCiAgICAgICAgICAgICBjaGFyIF9fYjMsIGNoYXIg
X19iMiwgY2hhciBfX2IxLCBjaGFyIF9fYjApCnsKICB1bnNpZ25lZCBpbnQgX19pMSwgX19pMDsK
CiAgX19pMSA9ICh1bnNpZ25lZCBjaGFyKV9fYjc7CiAgX19pMSA9IF9faTEgPDwgOCB8ICh1bnNp
Z25lZCBjaGFyKV9fYjY7CiAgX19pMSA9IF9faTEgPDwgOCB8ICh1bnNpZ25lZCBjaGFyKV9fYjU7
CiAgX19pMSA9IF9faTEgPDwgOCB8ICh1bnNpZ25lZCBjaGFyKV9fYjQ7CgogIF9faTAgPSAodW5z
aWduZWQgY2hhcilfX2IzOwogIF9faTAgPSBfX2kwIDw8IDggfCAodW5zaWduZWQgY2hhcilfX2Iy
OwogIF9faTAgPSBfX2kwIDw8IDggfCAodW5zaWduZWQgY2hhcilfX2IxOwogIF9faTAgPSBfX2kw
IDw8IDggfCAodW5zaWduZWQgY2hhcilfX2IwOwoKICByZXR1cm4gX21tX3NldF9waTMyIChfX2kx
LCBfX2kwKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fc2V0cl9waTMyIChpbnQgX19p
MCwgaW50IF9faTEpCnsKICByZXR1cm4gX21tX3NldF9waTMyIChfX2kxLCBfX2kwKTsKfQoKc3Rh
dGljIF9faW5saW5lIF9fbTY0Cl9tbV9zZXRyX3BpMTYgKHNob3J0IF9fdzAsIHNob3J0IF9fdzEs
IHNob3J0IF9fdzIsIHNob3J0IF9fdzMpCnsKICByZXR1cm4gX21tX3NldF9waTE2IChfX3czLCBf
X3cyLCBfX3cxLCBfX3cwKTsKfQoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zZXRyX3BpOCAo
Y2hhciBfX2IwLCBjaGFyIF9fYjEsIGNoYXIgX19iMiwgY2hhciBfX2IzLAogICAgICAgICAgICAg
IGNoYXIgX19iNCwgY2hhciBfX2I1LCBjaGFyIF9fYjYsIGNoYXIgX19iNykKewogIHJldHVybiBf
bW1fc2V0X3BpOCAoX19iNywgX19iNiwgX19iNSwgX19iNCwgX19iMywgX19iMiwgX19iMSwgX19i
MCk7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX3NldDFfcGkzMiAoaW50IF9faSkKewog
IHJldHVybiBfbW1fc2V0X3BpMzIgKF9faSwgX19pKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202
NApfbW1fc2V0MV9waTE2IChzaG9ydCBfX3cpCnsKICB1bnNpZ25lZCBpbnQgX19pID0gKHVuc2ln
bmVkIHNob3J0KV9fdyA8PCAxNiB8ICh1bnNpZ25lZCBzaG9ydClfX3c7CiAgcmV0dXJuIF9tbV9z
ZXQxX3BpMzIgKF9faSk7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX3NldDFfcGk4IChj
aGFyIF9fYikKewogIHVuc2lnbmVkIGludCBfX3cgPSAodW5zaWduZWQgY2hhcilfX2IgPDwgOCB8
ICh1bnNpZ25lZCBjaGFyKV9fYjsKICB1bnNpZ25lZCBpbnQgX19pID0gX193IDw8IDE2IHwgX193
OwogIHJldHVybiBfbW1fc2V0MV9waTMyIChfX2kpOwp9CiMgMzkgIi91c3IvbG9jYWwvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUveG1taW50cmluLmgiIDIgMyA0CgoK
dHlwZWRlZiBpbnQgX19tMTI4IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyhfX1Y0U0ZfXykpKTsK
Cgp0eXBlZGVmIGludCBfX3Y0c2YgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fKF9fVjRTRl9fKSkp
Owp0eXBlZGVmIGludCBfX3Y0c2kgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fKF9fVjRTSV9fKSkp
OwoKCgoKCgplbnVtIF9tbV9oaW50CnsKICBfTU1fSElOVF9UMCA9IDMsCiAgX01NX0hJTlRfVDEg
PSAyLAogIF9NTV9ISU5UX1QyID0gMSwKICBfTU1fSElOVF9OVEEgPSAwCn07CiMgOTEgIi91c3Iv
bG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUveG1taW50cmlu
LmgiIDMgNApzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9hZGRfc3MgKF9fbTEyOCBfX0EsIF9f
bTEyOCBfX0IpCnsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfYWRkc3MgKChfX3Y0
c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX3N1Yl9z
cyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5f
aWEzMl9zdWJzcyAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsKfQoKc3RhdGljIF9faW5saW5l
IF9fbTEyOApfbW1fbXVsX3NzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIChf
X20xMjgpIF9fYnVpbHRpbl9pYTMyX211bHNzICgoX192NHNmKV9fQSwgKF9fdjRzZilfX0IpOwp9
CgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9kaXZfc3MgKF9fbTEyOCBfX0EsIF9fbTEyOCBf
X0IpCnsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfZGl2c3MgKChfX3Y0c2YpX19B
LCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX3NxcnRfc3MgKF9f
bTEyOCBfX0EpCnsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfc3FydHNzICgoX192
NHNmKV9fQSk7Cn0KCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX3JjcF9zcyAoX19tMTI4IF9f
QSkKewogIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9yY3BzcyAoKF9fdjRzZilfX0Ep
Owp9CgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9yc3FydF9zcyAoX19tMTI4IF9fQSkKewog
IHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9yc3FydHNzICgoX192NHNmKV9fQSk7Cn0K
CnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX21pbl9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9f
QikKewogIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9taW5zcyAoKF9fdjRzZilfX0Es
IChfX3Y0c2YpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fbTEyOApfbW1fbWF4X3NzIChfX20x
MjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX21h
eHNzICgoX192NHNmKV9fQSwgKF9fdjRzZilfX0IpOwp9CgoKCnN0YXRpYyBfX2lubGluZSBfX20x
MjgKX21tX2FkZF9wcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVybiAoX19tMTI4
KSBfX2J1aWx0aW5faWEzMl9hZGRwcyAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsKfQoKc3Rh
dGljIF9faW5saW5lIF9fbTEyOApfbW1fc3ViX3BzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7
CiAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3N1YnBzICgoX192NHNmKV9fQSwgKF9f
djRzZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9tdWxfcHMgKF9fbTEyOCBf
X0EsIF9fbTEyOCBfX0IpCnsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbXVscHMg
KChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21t
X2Rpdl9wcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVybiAoX19tMTI4KSBfX2J1
aWx0aW5faWEzMl9kaXZwcyAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsKfQoKc3RhdGljIF9f
aW5saW5lIF9fbTEyOApfbW1fc3FydF9wcyAoX19tMTI4IF9fQSkKewogIHJldHVybiAoX19tMTI4
KSBfX2J1aWx0aW5faWEzMl9zcXJ0cHMgKChfX3Y0c2YpX19BKTsKfQoKc3RhdGljIF9faW5saW5l
IF9fbTEyOApfbW1fcmNwX3BzIChfX20xMjggX19BKQp7CiAgcmV0dXJuIChfX20xMjgpIF9fYnVp
bHRpbl9pYTMyX3JjcHBzICgoX192NHNmKV9fQSk7Cn0KCnN0YXRpYyBfX2lubGluZSBfX20xMjgK
X21tX3JzcXJ0X3BzIChfX20xMjggX19BKQp7CiAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9p
YTMyX3JzcXJ0cHMgKChfX3Y0c2YpX19BKTsKfQoKc3RhdGljIF9faW5saW5lIF9fbTEyOApfbW1f
bWluX3BzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIChfX20xMjgpIF9fYnVp
bHRpbl9pYTMyX21pbnBzICgoX192NHNmKV9fQSwgKF9fdjRzZilfX0IpOwp9CgpzdGF0aWMgX19p
bmxpbmUgX19tMTI4Cl9tbV9tYXhfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCnsKICByZXR1
cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbWF4cHMgKChfX3Y0c2YpX19BLCAoX192NHNmKV9f
Qik7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9fbTEyOApfbW1fYW5kX3BzIChfX20xMjggX19BLCBf
X20xMjggX19CKQp7CiAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2FuZHBzIChfX0EsIF9fQik7Cn0K
CnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX2FuZG5vdF9wcyAoX19tMTI4IF9fQSwgX19tMTI4
IF9fQikKewogIHJldHVybiBfX2J1aWx0aW5faWEzMl9hbmRucHMgKF9fQSwgX19CKTsKfQoKc3Rh
dGljIF9faW5saW5lIF9fbTEyOApfbW1fb3JfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCnsK
ICByZXR1cm4gX19idWlsdGluX2lhMzJfb3JwcyAoX19BLCBfX0IpOwp9CgpzdGF0aWMgX19pbmxp
bmUgX19tMTI4Cl9tbV94b3JfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCnsKICByZXR1cm4g
X19idWlsdGluX2lhMzJfeG9ycHMgKF9fQSwgX19CKTsKfQoKCgoKCnN0YXRpYyBfX2lubGluZSBf
X20xMjgKX21tX2NtcGVxX3NzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIChf
X20xMjgpIF9fYnVpbHRpbl9pYTMyX2NtcGVxc3MgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7
Cn0KCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX2NtcGx0X3NzIChfX20xMjggX19BLCBfX20x
MjggX19CKQp7CiAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2NtcGx0c3MgKChfX3Y0
c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX2NtcGxl
X3NzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRp
bl9pYTMyX2NtcGxlc3MgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lu
bGluZSBfX20xMjgKX21tX2NtcGd0X3NzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0
dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX21vdnNzICgoX192NHNmKSBfX0EsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19idWlsdGluX2lhMzJfY21wbHRzcyAoKF9fdjRzZikg
X19CLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKF9fdjRzZikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQSkpOwp9CgpzdGF0aWMgX19pbmxpbmUgX19t
MTI4Cl9tbV9jbXBnZV9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVybiAoX19t
MTI4KSBfX2J1aWx0aW5faWEzMl9tb3ZzcyAoKF9fdjRzZikgX19BLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fYnVpbHRpbl9pYTMyX2NtcGxlc3MgKChfX3Y0c2YpIF9fQiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChfX3Y0c2YpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX0EpKTsKfQoKc3RhdGljIF9faW5saW5lIF9fbTEyOApfbW1f
Y21wbmVxX3NzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIChfX20xMjgpIF9f
YnVpbHRpbl9pYTMyX2NtcG5lcXNzICgoX192NHNmKV9fQSwgKF9fdjRzZilfX0IpOwp9CgpzdGF0
aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9jbXBubHRfc3MgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0Ip
CnsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY21wbmx0c3MgKChfX3Y0c2YpX19B
LCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX2NtcG5sZV9zcyAo
X19tMTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEz
Ml9jbXBubGVzcyAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsKfQoKc3RhdGljIF9faW5saW5l
IF9fbTEyOApfbW1fY21wbmd0X3NzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJu
IChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX21vdnNzICgoX192NHNmKSBfX0EsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19idWlsdGluX2lhMzJfY21wbmx0c3MgKChfX3Y0c2YpIF9f
QiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoX192NHNmKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQSkpOwp9CgpzdGF0aWMgX19pbmxpbmUgX19t
MTI4Cl9tbV9jbXBuZ2Vfc3MgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCnsKICByZXR1cm4gKF9f
bTEyOCkgX19idWlsdGluX2lhMzJfbW92c3MgKChfX3Y0c2YpIF9fQSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2J1aWx0aW5faWEzMl9jbXBubGVzcyAoKF9fdjRzZikgX19CLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChfX3Y0c2YpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19BKSk7Cn0KCnN0YXRpYyBfX2lubGluZSBfX20xMjgK
X21tX2NtcG9yZF9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVybiAoX19tMTI4
KSBfX2J1aWx0aW5faWEzMl9jbXBvcmRzcyAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsKfQoK
c3RhdGljIF9faW5saW5lIF9fbTEyOApfbW1fY21wdW5vcmRfc3MgKF9fbTEyOCBfX0EsIF9fbTEy
OCBfX0IpCnsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY21wdW5vcmRzcyAoKF9f
djRzZilfX0EsIChfX3Y0c2YpX19CKTsKfQoKCgoKCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21t
X2NtcGVxX3BzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIChfX20xMjgpIF9f
YnVpbHRpbl9pYTMyX2NtcGVxcHMgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRp
YyBfX2lubGluZSBfX20xMjgKX21tX2NtcGx0X3BzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7
CiAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2NtcGx0cHMgKChfX3Y0c2YpX19BLCAo
X192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX2NtcGxlX3BzIChfX20x
MjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2Nt
cGxlcHMgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX20x
MjgKX21tX2NtcGd0X3BzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIChfX20x
MjgpIF9fYnVpbHRpbl9pYTMyX2NtcGd0cHMgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0K
CnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX2NtcGdlX3BzIChfX20xMjggX19BLCBfX20xMjgg
X19CKQp7CiAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2NtcGdlcHMgKChfX3Y0c2Yp
X19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX2NtcG5lcV9w
cyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5f
aWEzMl9jbXBuZXFwcyAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsKfQoKc3RhdGljIF9faW5s
aW5lIF9fbTEyOApfbW1fY21wbmx0X3BzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0
dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2NtcG5sdHBzICgoX192NHNmKV9fQSwgKF9fdjRz
ZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9jbXBubGVfcHMgKF9fbTEyOCBf
X0EsIF9fbTEyOCBfX0IpCnsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY21wbmxl
cHMgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX20xMjgK
X21tX2NtcG5ndF9wcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVybiAoX19tMTI4
KSBfX2J1aWx0aW5faWEzMl9jbXBuZ3RwcyAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsKfQoK
c3RhdGljIF9faW5saW5lIF9fbTEyOApfbW1fY21wbmdlX3BzIChfX20xMjggX19BLCBfX20xMjgg
X19CKQp7CiAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2NtcG5nZXBzICgoX192NHNm
KV9fQSwgKF9fdjRzZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9jbXBvcmRf
cHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCnsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGlu
X2lhMzJfY21wb3JkcHMgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lu
bGluZSBfX20xMjgKX21tX2NtcHVub3JkX3BzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAg
cmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2NtcHVub3JkcHMgKChfX3Y0c2YpX19BLCAo
X192NHNmKV9fQik7Cn0KCgoKCnN0YXRpYyBfX2lubGluZSBpbnQKX21tX2NvbWllcV9zcyAoX19t
MTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVybiBfX2J1aWx0aW5faWEzMl9jb21pZXEgKChf
X3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBpbnQKX21tX2NvbWls
dF9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVybiBfX2J1aWx0aW5faWEzMl9j
b21pbHQgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBpbnQK
X21tX2NvbWlsZV9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVybiBfX2J1aWx0
aW5faWEzMl9jb21pbGUgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lu
bGluZSBpbnQKX21tX2NvbWlndF9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVy
biBfX2J1aWx0aW5faWEzMl9jb21pZ3QgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0
YXRpYyBfX2lubGluZSBpbnQKX21tX2NvbWlnZV9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikK
ewogIHJldHVybiBfX2J1aWx0aW5faWEzMl9jb21pZ2UgKChfX3Y0c2YpX19BLCAoX192NHNmKV9f
Qik7Cn0KCnN0YXRpYyBfX2lubGluZSBpbnQKX21tX2NvbWluZXFfc3MgKF9fbTEyOCBfX0EsIF9f
bTEyOCBfX0IpCnsKICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taW5lcSAoKF9fdjRzZilfX0Es
IChfX3Y0c2YpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIGludApfbW1fdWNvbWllcV9zcyAoX19t
MTI4IF9fQSwgX19tMTI4IF9fQikKewogIHJldHVybiBfX2J1aWx0aW5faWEzMl91Y29taWVxICgo
X192NHNmKV9fQSwgKF9fdjRzZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgaW50Cl9tbV91Y29t
aWx0X3NzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIF9fYnVpbHRpbl9pYTMy
X3Vjb21pbHQgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBp
bnQKX21tX3Vjb21pbGVfc3MgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCnsKICByZXR1cm4gX19i
dWlsdGluX2lhMzJfdWNvbWlsZSAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsKfQoKc3RhdGlj
IF9faW5saW5lIGludApfbW1fdWNvbWlndF9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKewog
IHJldHVybiBfX2J1aWx0aW5faWEzMl91Y29taWd0ICgoX192NHNmKV9fQSwgKF9fdjRzZilfX0Ip
Owp9CgpzdGF0aWMgX19pbmxpbmUgaW50Cl9tbV91Y29taWdlX3NzIChfX20xMjggX19BLCBfX20x
MjggX19CKQp7CiAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pZ2UgKChfX3Y0c2YpX19BLCAo
X192NHNmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBpbnQKX21tX3Vjb21pbmVxX3NzIChfX20x
MjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pbmVxICgo
X192NHNmKV9fQSwgKF9fdjRzZilfX0IpOwp9CgoKCnN0YXRpYyBfX2lubGluZSBpbnQKX21tX2N2
dHNzX3NpMzIgKF9fbTEyOCBfX0EpCnsKICByZXR1cm4gX19idWlsdGluX2lhMzJfY3Z0c3Myc2kg
KChfX3Y0c2YpIF9fQSk7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9jdnRwc19waTMy
IChfX20xMjggX19BKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfY3Z0cHMycGkg
KChfX3Y0c2YpIF9fQSk7Cn0KCgpzdGF0aWMgX19pbmxpbmUgaW50Cl9tbV9jdnR0c3Nfc2kzMiAo
X19tMTI4IF9fQSkKewogIHJldHVybiBfX2J1aWx0aW5faWEzMl9jdnR0c3Myc2kgKChfX3Y0c2Yp
IF9fQSk7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9jdnR0cHNfcGkzMiAoX19tMTI4
IF9fQSkKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJwaSAoKF9fdjRz
ZikgX19BKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX2N2dHNpMzJfc3MgKF9fbTEy
OCBfX0EsIGludCBfX0IpCnsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0c2ky
c3MgKChfX3Y0c2YpIF9fQSwgX19CKTsKfQoKCgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9j
dnRwaTMyX3BzIChfX20xMjggX19BLCBfX202NCBfX0IpCnsKICByZXR1cm4gKF9fbTEyOCkgX19i
dWlsdGluX2lhMzJfY3Z0cGkycHMgKChfX3Y0c2YpIF9fQSwgKF9fdjJzaSlfX0IpOwp9CgoKc3Rh
dGljIF9faW5saW5lIF9fbTEyOApfbW1fY3Z0cGkxNl9wcyAoX19tNjQgX19BKQp7CiAgX192NGhp
IF9fc2lnbjsKICBfX3Yyc2kgX19oaXNpLCBfX2xvc2k7CiAgX192NHNmIF9fcjsKCgoKCiAgX19z
aWduID0gKF9fdjRoaSkgX19idWlsdGluX2lhMzJfbW14X3plcm8gKCk7CiAgX19zaWduID0gX19i
dWlsdGluX2lhMzJfcGNtcGd0dyAoX19zaWduLCAoX192NGhpKV9fQSk7CgoKICBfX2hpc2kgPSAo
X192MnNpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2tod2QgKChfX3Y0aGkpX19BLCBfX3NpZ24pOwog
IF9fbG9zaSA9IChfX3Yyc2kpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2x3ZCAoKF9fdjRoaSlfX0Es
IF9fc2lnbik7CgoKICBfX3IgPSAoX192NHNmKSBfX2J1aWx0aW5faWEzMl9zZXR6ZXJvcHMgKCk7
CiAgX19yID0gX19idWlsdGluX2lhMzJfY3Z0cGkycHMgKF9fciwgX19oaXNpKTsKICBfX3IgPSBf
X2J1aWx0aW5faWEzMl9tb3ZsaHBzIChfX3IsIF9fcik7CiAgX19yID0gX19idWlsdGluX2lhMzJf
Y3Z0cGkycHMgKF9fciwgX19sb3NpKTsKCiAgcmV0dXJuIChfX20xMjgpIF9fcjsKfQoKCnN0YXRp
YyBfX2lubGluZSBfX20xMjgKX21tX2N2dHB1MTZfcHMgKF9fbTY0IF9fQSkKewogIF9fdjRoaSBf
X3plcm8gPSAoX192NGhpKSBfX2J1aWx0aW5faWEzMl9tbXhfemVybyAoKTsKICBfX3Yyc2kgX19o
aXNpLCBfX2xvc2k7CiAgX192NHNmIF9fcjsKCgogIF9faGlzaSA9IChfX3Yyc2kpIF9fYnVpbHRp
bl9pYTMyX3B1bnBja2h3ZCAoKF9fdjRoaSlfX0EsIF9femVybyk7CiAgX19sb3NpID0gKF9fdjJz
aSkgX19idWlsdGluX2lhMzJfcHVucGNrbHdkICgoX192NGhpKV9fQSwgX196ZXJvKTsKCgogIF9f
ciA9IChfX3Y0c2YpIF9fYnVpbHRpbl9pYTMyX3NldHplcm9wcyAoKTsKICBfX3IgPSBfX2J1aWx0
aW5faWEzMl9jdnRwaTJwcyAoX19yLCBfX2hpc2kpOwogIF9fciA9IF9fYnVpbHRpbl9pYTMyX21v
dmxocHMgKF9fciwgX19yKTsKICBfX3IgPSBfX2J1aWx0aW5faWEzMl9jdnRwaTJwcyAoX19yLCBf
X2xvc2kpOwoKICByZXR1cm4gKF9fbTEyOCkgX19yOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTEy
OApfbW1fY3Z0cGk4X3BzIChfX202NCBfX0EpCnsKICBfX3Y4cWkgX19zaWduOwoKCgoKICBfX3Np
Z24gPSAoX192OHFpKSBfX2J1aWx0aW5faWEzMl9tbXhfemVybyAoKTsKICBfX3NpZ24gPSBfX2J1
aWx0aW5faWEzMl9wY21wZ3RiIChfX3NpZ24sIChfX3Y4cWkpX19BKTsKCgogIF9fQSA9IChfX202
NCkgX19idWlsdGluX2lhMzJfcHVucGNrbGJ3ICgoX192OHFpKV9fQSwgX19zaWduKTsKCiAgcmV0
dXJuIF9tbV9jdnRwaTE2X3BzKF9fQSk7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9j
dnRwdThfcHMoX19tNjQgX19BKQp7CiAgX192OHFpIF9femVybyA9IChfX3Y4cWkpIF9fYnVpbHRp
bl9pYTMyX21teF96ZXJvICgpOwogIF9fQSA9IChfX202NCkgX19idWlsdGluX2lhMzJfcHVucGNr
bGJ3ICgoX192OHFpKV9fQSwgX196ZXJvKTsKICByZXR1cm4gX21tX2N2dHB1MTZfcHMoX19BKTsK
fQoKCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX2N2dHBpMzJ4Ml9wcyhfX202NCBfX0EsIF9f
bTY0IF9fQikKewogIF9fdjRzZiBfX3plcm8gPSAoX192NHNmKSBfX2J1aWx0aW5faWEzMl9zZXR6
ZXJvcHMgKCk7CiAgX192NHNmIF9fc2ZhID0gX19idWlsdGluX2lhMzJfY3Z0cGkycHMgKF9femVy
bywgKF9fdjJzaSlfX0EpOwogIF9fdjRzZiBfX3NmYiA9IF9fYnVpbHRpbl9pYTMyX2N2dHBpMnBz
IChfX3plcm8sIChfX3Yyc2kpX19CKTsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJf
bW92bGhwcyAoX19zZmEsIF9fc2ZiKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fY3Z0
cHNfcGkxNihfX20xMjggX19BKQp7CiAgX192NHNmIF9faGlzZiA9IChfX3Y0c2YpX19BOwogIF9f
djRzZiBfX2xvc2YgPSBfX2J1aWx0aW5faWEzMl9tb3ZobHBzIChfX2hpc2YsIF9faGlzZik7CiAg
X192MnNpIF9faGlzaSA9IF9fYnVpbHRpbl9pYTMyX2N2dHBzMnBpIChfX2hpc2YpOwogIF9fdjJz
aSBfX2xvc2kgPSBfX2J1aWx0aW5faWEzMl9jdnRwczJwaSAoX19sb3NmKTsKICByZXR1cm4gKF9f
bTY0KSBfX2J1aWx0aW5faWEzMl9wYWNrc3NkdyAoX19oaXNpLCBfX2xvc2kpOwp9CgoKc3RhdGlj
IF9faW5saW5lIF9fbTY0Cl9tbV9jdnRwc19waTgoX19tMTI4IF9fQSkKewogIF9fdjRoaSBfX3Rt
cCA9IChfX3Y0aGkpIF9tbV9jdnRwc19waTE2IChfX0EpOwogIF9fdjRoaSBfX3plcm8gPSAoX192
NGhpKSBfX2J1aWx0aW5faWEzMl9tbXhfemVybyAoKTsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0
aW5faWEzMl9wYWNrc3N3YiAoX190bXAsIF9femVybyk7Cn0KIyA2MzUgIi91c3IvbG9jYWwvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUveG1taW50cmluLmgiIDMgNApz
dGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV91bnBhY2toaV9wcyAoX19tMTI4IF9fQSwgX19tMTI4
IF9fQikKewogIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl91bnBja2hwcyAoKF9fdjRz
ZilfX0EsIChfX3Y0c2YpX19CKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX3VucGFj
a2xvX3BzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIChfX20xMjgpIF9fYnVp
bHRpbl9pYTMyX3VucGNrbHBzICgoX192NHNmKV9fQSwgKF9fdjRzZilfX0IpOwp9CgoKCnN0YXRp
YyBfX2lubGluZSBfX20xMjgKX21tX2xvYWRoX3BpIChfX20xMjggX19BLCBfX202NCBjb25zdCAq
X19QKQp7CiAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2xvYWRocHMgKChfX3Y0c2Yp
X19BLCAoX192MnNpICopX19QKTsKfQoKCnN0YXRpYyBfX2lubGluZSB2b2lkCl9tbV9zdG9yZWhf
cGkgKF9fbTY0ICpfX1AsIF9fbTEyOCBfX0EpCnsKICBfX2J1aWx0aW5faWEzMl9zdG9yZWhwcyAo
KF9fdjJzaSAqKV9fUCwgKF9fdjRzZilfX0EpOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTEyOApf
bW1fbW92ZWhsX3BzIChfX20xMjggX19BLCBfX20xMjggX19CKQp7CiAgcmV0dXJuIChfX20xMjgp
IF9fYnVpbHRpbl9pYTMyX21vdmhscHMgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KCgpz
dGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9tb3ZlbGhfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBf
X0IpCnsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbW92bGhwcyAoKF9fdjRzZilf
X0EsIChfX3Y0c2YpX19CKTsKfQoKCgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9sb2FkbF9w
aSAoX19tMTI4IF9fQSwgX19tNjQgY29uc3QgKl9fUCkKewogIHJldHVybiAoX19tMTI4KSBfX2J1
aWx0aW5faWEzMl9sb2FkbHBzICgoX192NHNmKV9fQSwgKF9fdjJzaSAqKV9fUCk7Cn0KCgpzdGF0
aWMgX19pbmxpbmUgdm9pZApfbW1fc3RvcmVsX3BpIChfX202NCAqX19QLCBfX20xMjggX19BKQp7
CiAgX19idWlsdGluX2lhMzJfc3RvcmVscHMgKChfX3Yyc2kgKilfX1AsIChfX3Y0c2YpX19BKTsK
fQoKCnN0YXRpYyBfX2lubGluZSBpbnQKX21tX21vdmVtYXNrX3BzIChfX20xMjggX19BKQp7CiAg
cmV0dXJuIF9fYnVpbHRpbl9pYTMyX21vdm1za3BzICgoX192NHNmKV9fQSk7Cn0KCgpzdGF0aWMg
X19pbmxpbmUgdW5zaWduZWQgaW50Cl9tbV9nZXRjc3IgKHZvaWQpCnsKICByZXR1cm4gX19idWls
dGluX2lhMzJfc3RteGNzciAoKTsKfQoKCnN0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKX01N
X0dFVF9FWENFUFRJT05fU1RBVEUgKHZvaWQpCnsKICByZXR1cm4gX21tX2dldGNzcigpICYgMHgw
MDNmOwp9CgpzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50Cl9NTV9HRVRfRVhDRVBUSU9OX01B
U0sgKHZvaWQpCnsKICByZXR1cm4gX21tX2dldGNzcigpICYgMHgxZjgwOwp9CgpzdGF0aWMgX19p
bmxpbmUgdW5zaWduZWQgaW50Cl9NTV9HRVRfUk9VTkRJTkdfTU9ERSAodm9pZCkKewogIHJldHVy
biBfbW1fZ2V0Y3NyKCkgJiAweDYwMDA7Cn0KCnN0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQK
X01NX0dFVF9GTFVTSF9aRVJPX01PREUgKHZvaWQpCnsKICByZXR1cm4gX21tX2dldGNzcigpICYg
MHg4MDAwOwp9CgoKc3RhdGljIF9faW5saW5lIHZvaWQKX21tX3NldGNzciAodW5zaWduZWQgaW50
IF9fSSkKewogIF9fYnVpbHRpbl9pYTMyX2xkbXhjc3IgKF9fSSk7Cn0KCgpzdGF0aWMgX19pbmxp
bmUgdm9pZApfTU1fU0VUX0VYQ0VQVElPTl9TVEFURSh1bnNpZ25lZCBpbnQgX19tYXNrKQp7CiAg
X21tX3NldGNzcigoX21tX2dldGNzcigpICYgfjB4MDAzZikgfCBfX21hc2spOwp9CgpzdGF0aWMg
X19pbmxpbmUgdm9pZApfTU1fU0VUX0VYQ0VQVElPTl9NQVNLICh1bnNpZ25lZCBpbnQgX19tYXNr
KQp7CiAgX21tX3NldGNzcigoX21tX2dldGNzcigpICYgfjB4MWY4MCkgfCBfX21hc2spOwp9Cgpz
dGF0aWMgX19pbmxpbmUgdm9pZApfTU1fU0VUX1JPVU5ESU5HX01PREUgKHVuc2lnbmVkIGludCBf
X21vZGUpCnsKICBfbW1fc2V0Y3NyKChfbW1fZ2V0Y3NyKCkgJiB+MHg2MDAwKSB8IF9fbW9kZSk7
Cn0KCnN0YXRpYyBfX2lubGluZSB2b2lkCl9NTV9TRVRfRkxVU0hfWkVST19NT0RFICh1bnNpZ25l
ZCBpbnQgX19tb2RlKQp7CiAgX21tX3NldGNzcigoX21tX2dldGNzcigpICYgfjB4ODAwMCkgfCBf
X21vZGUpOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTEyOApfbW1fbG9hZF9zcyAoZmxvYXQgY29u
c3QgKl9fUCkKewogIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9sb2Fkc3MgKF9fUCk7
Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9sb2FkMV9wcyAoZmxvYXQgY29uc3QgKl9f
UCkKewogIF9fdjRzZiBfX3RtcCA9IF9fYnVpbHRpbl9pYTMyX2xvYWRzcyAoX19QKTsKICByZXR1
cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfc2h1ZnBzIChfX3RtcCwgX190bXAsICgoKDApIDw8
IDYpIHwgKCgwKSA8PCA0KSB8ICgoMCkgPDwgMikgfCAoMCkpKTsKfQoKc3RhdGljIF9faW5saW5l
IF9fbTEyOApfbW1fbG9hZF9wczEgKGZsb2F0IGNvbnN0ICpfX1ApCnsKICByZXR1cm4gX21tX2xv
YWQxX3BzIChfX1ApOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTEyOApfbW1fbG9hZF9wcyAoZmxv
YXQgY29uc3QgKl9fUCkKewogIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9sb2FkYXBz
IChfX1ApOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTEyOApfbW1fbG9hZHVfcHMgKGZsb2F0IGNv
bnN0ICpfX1ApCnsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbG9hZHVwcyAoX19Q
KTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX2xvYWRyX3BzIChmbG9hdCBjb25zdCAq
X19QKQp7CiAgX192NHNmIF9fdG1wID0gX19idWlsdGluX2lhMzJfbG9hZGFwcyAoX19QKTsKICBy
ZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfc2h1ZnBzIChfX3RtcCwgX190bXAsICgoKDAp
IDw8IDYpIHwgKCgxKSA8PCA0KSB8ICgoMikgPDwgMikgfCAoMykpKTsKfQoKCnN0YXRpYyBfX2lu
bGluZSBfX20xMjgKX21tX3NldF9zcyAoZmxvYXQgX19GKQp7CiAgcmV0dXJuIChfX20xMjgpIF9f
YnVpbHRpbl9pYTMyX2xvYWRzcyAoJl9fRik7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9t
bV9zZXQxX3BzIChmbG9hdCBfX0YpCnsKICBfX3Y0c2YgX190bXAgPSBfX2J1aWx0aW5faWEzMl9s
b2Fkc3MgKCZfX0YpOwogIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9zaHVmcHMgKF9f
dG1wLCBfX3RtcCwgKCgoMCkgPDwgNikgfCAoKDApIDw8IDQpIHwgKCgwKSA8PCAyKSB8ICgwKSkp
Owp9CgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9zZXRfcHMxIChmbG9hdCBfX0YpCnsKICBy
ZXR1cm4gX21tX3NldDFfcHMgKF9fRik7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9z
ZXRfcHMgKGZsb2F0IF9fWiwgZmxvYXQgX19ZLCBmbG9hdCBfX1gsIGZsb2F0IF9fVykKewogIHVu
aW9uIHsKICAgIGZsb2F0IF9fYVs0XTsKICAgIF9fbTEyOCBfX3Y7CiAgfSBfX3U7CgogIF9fdS5f
X2FbMF0gPSBfX1c7CiAgX191Ll9fYVsxXSA9IF9fWDsKICBfX3UuX19hWzJdID0gX19ZOwogIF9f
dS5fX2FbM10gPSBfX1o7CgogIHJldHVybiBfX3UuX192Owp9CgoKc3RhdGljIF9faW5saW5lIF9f
bTEyOApfbW1fc2V0cl9wcyAoZmxvYXQgX19aLCBmbG9hdCBfX1ksIGZsb2F0IF9fWCwgZmxvYXQg
X19XKQp7CiAgcmV0dXJuIF9tbV9zZXRfcHMgKF9fVywgX19YLCBfX1ksIF9fWik7Cn0KCgpzdGF0
aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9zZXR6ZXJvX3BzICh2b2lkKQp7CiAgcmV0dXJuIChfX20x
MjgpIF9fYnVpbHRpbl9pYTMyX3NldHplcm9wcyAoKTsKfQoKCnN0YXRpYyBfX2lubGluZSB2b2lk
Cl9tbV9zdG9yZV9zcyAoZmxvYXQgKl9fUCwgX19tMTI4IF9fQSkKewogIF9fYnVpbHRpbl9pYTMy
X3N0b3Jlc3MgKF9fUCwgKF9fdjRzZilfX0EpOwp9CgoKc3RhdGljIF9faW5saW5lIHZvaWQKX21t
X3N0b3JlMV9wcyAoZmxvYXQgKl9fUCwgX19tMTI4IF9fQSkKewogIF9fdjRzZiBfX3ZhID0gKF9f
djRzZilfX0E7CiAgX192NHNmIF9fdG1wID0gX19idWlsdGluX2lhMzJfc2h1ZnBzIChfX3ZhLCBf
X3ZhLCAoKCgwKSA8PCA2KSB8ICgoMCkgPDwgNCkgfCAoKDApIDw8IDIpIHwgKDApKSk7CiAgX19i
dWlsdGluX2lhMzJfc3RvcmVhcHMgKF9fUCwgX190bXApOwp9CgpzdGF0aWMgX19pbmxpbmUgdm9p
ZApfbW1fc3RvcmVfcHMxIChmbG9hdCAqX19QLCBfX20xMjggX19BKQp7CiAgX21tX3N0b3JlMV9w
cyAoX19QLCBfX0EpOwp9CgoKc3RhdGljIF9faW5saW5lIHZvaWQKX21tX3N0b3JlX3BzIChmbG9h
dCAqX19QLCBfX20xMjggX19BKQp7CiAgX19idWlsdGluX2lhMzJfc3RvcmVhcHMgKF9fUCwgKF9f
djRzZilfX0EpOwp9CgoKc3RhdGljIF9faW5saW5lIHZvaWQKX21tX3N0b3JldV9wcyAoZmxvYXQg
Kl9fUCwgX19tMTI4IF9fQSkKewogIF9fYnVpbHRpbl9pYTMyX3N0b3JldXBzIChfX1AsIChfX3Y0
c2YpX19BKTsKfQoKCnN0YXRpYyBfX2lubGluZSB2b2lkCl9tbV9zdG9yZXJfcHMgKGZsb2F0ICpf
X1AsIF9fbTEyOCBfX0EpCnsKICBfX3Y0c2YgX192YSA9IChfX3Y0c2YpX19BOwogIF9fdjRzZiBf
X3RtcCA9IF9fYnVpbHRpbl9pYTMyX3NodWZwcyAoX192YSwgX192YSwgKCgoMCkgPDwgNikgfCAo
KDEpIDw8IDQpIHwgKCgyKSA8PCAyKSB8ICgzKSkpOwogIF9fYnVpbHRpbl9pYTMyX3N0b3JlYXBz
IChfX1AsIF9fdG1wKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX20xMjgKX21tX21vdmVfc3MgKF9f
bTEyOCBfX0EsIF9fbTEyOCBfX0IpCnsKICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJf
bW92c3MgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7Cn0KIyA5MzYgIi91c3IvbG9jYWwvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUveG1taW50cmluLmgiIDMgNApz
dGF0aWMgX19pbmxpbmUgX19tNjQKX21tX21heF9waTE2IChfX202NCBfX0EsIF9fbTY0IF9fQikK
ewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BtYXhzdyAoKF9fdjRoaSlfX0EsIChf
X3Y0aGkpX19CKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fbWF4X3B1OCAoX19tNjQg
X19BLCBfX202NCBfX0IpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wbWF4dWIg
KChfX3Y4cWkpX19BLCAoX192OHFpKV9fQik7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21t
X21pbl9waTE2IChfX202NCBfX0EsIF9fbTY0IF9fQikKewogIHJldHVybiAoX19tNjQpIF9fYnVp
bHRpbl9pYTMyX3BtaW5zdyAoKF9fdjRoaSlfX0EsIChfX3Y0aGkpX19CKTsKfQoKCnN0YXRpYyBf
X2lubGluZSBfX202NApfbW1fbWluX3B1OCAoX19tNjQgX19BLCBfX202NCBfX0IpCnsKICByZXR1
cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wbWludWIgKChfX3Y4cWkpX19BLCAoX192OHFpKV9f
Qik7Cn0KCgpzdGF0aWMgX19pbmxpbmUgaW50Cl9tbV9tb3ZlbWFza19waTggKF9fbTY0IF9fQSkK
ewogIHJldHVybiBfX2J1aWx0aW5faWEzMl9wbW92bXNrYiAoKF9fdjhxaSlfX0EpOwp9CgoKCnN0
YXRpYyBfX2lubGluZSBfX202NApfbW1fbXVsaGlfcHUxNiAoX19tNjQgX19BLCBfX202NCBfX0Ip
CnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wbXVsaHV3ICgoX192NGhpKV9fQSwg
KF9fdjRoaSlfX0IpOwp9CiMgOTk0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMy9pbmNsdWRlL3htbWludHJpbi5oIiAzIDQKc3RhdGljIF9faW5saW5lIHZvaWQK
X21tX21hc2ttb3ZlX3NpNjQgKF9fbTY0IF9fQSwgX19tNjQgX19OLCBjaGFyICpfX1ApCnsKICBf
X2J1aWx0aW5faWEzMl9tYXNrbW92cSAoKF9fdjhxaSlfX0EsIChfX3Y4cWkpX19OLCBfX1ApOwp9
CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9hdmdfcHU4IChfX202NCBfX0EsIF9fbTY0IF9f
QikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BhdmdiICgoX192OHFpKV9fQSwg
KF9fdjhxaSlfX0IpOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9hdmdfcHUxNiAoX19t
NjQgX19BLCBfX202NCBfX0IpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wYXZn
dyAoKF9fdjRoaSlfX0EsIChfX3Y0aGkpX19CKTsKfQoKCgoKc3RhdGljIF9faW5saW5lIF9fbTY0
Cl9tbV9zYWRfcHU4IChfX202NCBfX0EsIF9fbTY0IF9fQikKewogIHJldHVybiAoX19tNjQpIF9f
YnVpbHRpbl9pYTMyX3BzYWRidyAoKF9fdjhxaSlfX0EsIChfX3Y4cWkpX19CKTsKfQojIDEwMzcg
Ii91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUveG1t
aW50cmluLmgiIDMgNApzdGF0aWMgX19pbmxpbmUgdm9pZApfbW1fc3RyZWFtX3BpIChfX202NCAq
X19QLCBfX202NCBfX0EpCnsKICBfX2J1aWx0aW5faWEzMl9tb3ZudHEgKCh1bnNpZ25lZCBsb25n
IGxvbmcgKilfX1AsICh1bnNpZ25lZCBsb25nIGxvbmcpX19BKTsKfQoKCnN0YXRpYyBfX2lubGlu
ZSB2b2lkCl9tbV9zdHJlYW1fcHMgKGZsb2F0ICpfX1AsIF9fbTEyOCBfX0EpCnsKICBfX2J1aWx0
aW5faWEzMl9tb3ZudHBzIChfX1AsIChfX3Y0c2YpX19BKTsKfQoKCgpzdGF0aWMgX19pbmxpbmUg
dm9pZApfbW1fc2ZlbmNlICh2b2lkKQp7CiAgX19idWlsdGluX2lhMzJfc2ZlbmNlICgpOwp9CgoK
CgpzdGF0aWMgX19pbmxpbmUgdm9pZApfbW1fcGF1c2UgKHZvaWQpCnsKICBfX2FzbV9fIF9fdm9s
YXRpbGVfXyAoInJlcDsgbm9wIiA6IDogKTsKfQojIDEwODMgIi91c3IvbG9jYWwvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUveG1taW50cmluLmgiIDMgNAp0eXBlZGVm
IGludCBfX3YyZGYgX19hdHRyaWJ1dGVfXyAoKG1vZGUgKFYyREYpKSk7CnR5cGVkZWYgaW50IF9f
djJkaSBfX2F0dHJpYnV0ZV9fICgobW9kZSAoVjJESSkpKTsKdHlwZWRlZiBpbnQgX192NHNpIF9f
YXR0cmlidXRlX18gKChtb2RlIChWNFNJKSkpOwp0eXBlZGVmIGludCBfX3Y4aGkgX19hdHRyaWJ1
dGVfXyAoKG1vZGUgKFY4SEkpKSk7CnR5cGVkZWYgaW50IF9fdjE2cWkgX19hdHRyaWJ1dGVfXyAo
KG1vZGUgKFYxNlFJKSkpOwojIDEwOTcgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4zL2luY2x1ZGUveG1taW50cmluLmgiIDMgNApzdGF0aWMgX19pbmxpbmUgX192
MmRmCl9tbV9sb2FkX3NkIChkb3VibGUgY29uc3QgKl9fUCkKewogIHJldHVybiAoX192MmRmKSBf
X2J1aWx0aW5faWEzMl9sb2Fkc2QgKF9fUCk7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX192MmRmCl9t
bV9sb2FkMV9wZCAoZG91YmxlIGNvbnN0ICpfX1ApCnsKICBfX3YyZGYgX190bXAgPSBfX2J1aWx0
aW5faWEzMl9sb2Fkc2QgKF9fUCk7CiAgcmV0dXJuIChfX3YyZGYpIF9fYnVpbHRpbl9pYTMyX3No
dWZwZCAoX190bXAsIF9fdG1wLCAoKCgwKSA8PCAxKSB8ICgwKSkpOwp9CgpzdGF0aWMgX19pbmxp
bmUgX192MmRmCl9tbV9sb2FkX3BkMSAoZG91YmxlIGNvbnN0ICpfX1ApCnsKICByZXR1cm4gX21t
X2xvYWQxX3BkIChfX1ApOwp9CgoKc3RhdGljIF9faW5saW5lIF9fdjJkZgpfbW1fbG9hZF9wZCAo
ZG91YmxlIGNvbnN0ICpfX1ApCnsKICByZXR1cm4gKF9fdjJkZikgX19idWlsdGluX2lhMzJfbG9h
ZGFwZCAoX19QKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX3YyZGYKX21tX2xvYWR1X3BkIChkb3Vi
bGUgY29uc3QgKl9fUCkKewogIHJldHVybiAoX192MmRmKSBfX2J1aWx0aW5faWEzMl9sb2FkdXBk
IChfX1ApOwp9CgoKc3RhdGljIF9faW5saW5lIF9fdjJkZgpfbW1fbG9hZHJfcGQgKGRvdWJsZSBj
b25zdCAqX19QKQp7CiAgX192MmRmIF9fdG1wID0gX19idWlsdGluX2lhMzJfbG9hZGFwZCAoX19Q
KTsKICByZXR1cm4gKF9fdjJkZikgX19idWlsdGluX2lhMzJfc2h1ZnBkIChfX3RtcCwgX190bXAs
ICgoKDApIDw8IDEpIHwgKDEpKSk7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX192MmRmCl9tbV9zZXRf
c2QgKGRvdWJsZSBfX0YpCnsKICByZXR1cm4gKF9fdjJkZikgX19idWlsdGluX2lhMzJfbG9hZHNk
ICgmX19GKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX3YyZGYKX21tX3NldDFfcGQgKGRvdWJsZSBf
X0YpCnsKICBfX3YyZGYgX190bXAgPSBfX2J1aWx0aW5faWEzMl9sb2Fkc2QgKCZfX0YpOwogIHJl
dHVybiAoX192MmRmKSBfX2J1aWx0aW5faWEzMl9zaHVmcGQgKF9fdG1wLCBfX3RtcCwgKCgoMCkg
PDwgMSkgfCAoMCkpKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkZgpfbW1fc2V0X3BkMSAoZG91
YmxlIF9fRikKewogIHJldHVybiBfbW1fc2V0MV9wZCAoX19GKTsKfQoKCnN0YXRpYyBfX2lubGlu
ZSBfX3YyZGYKX21tX3NldF9wZCAoZG91YmxlIF9fWiwgZG91YmxlIF9fWSkKewogIHVuaW9uIHsK
ICAgIGRvdWJsZSBfX2FbMl07CiAgICBfX3YyZGYgX192OwogIH0gX191OwoKICBfX3UuX19hWzBd
ID0gX19ZOwogIF9fdS5fX2FbMV0gPSBfX1o7CgogIHJldHVybiBfX3UuX192Owp9CgoKc3RhdGlj
IF9faW5saW5lIF9fdjJkZgpfbW1fc2V0cl9wZCAoZG91YmxlIF9fWiwgZG91YmxlIF9fWSkKewog
IHJldHVybiBfbW1fc2V0X3BkIChfX1ksIF9fWik7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX192MmRm
Cl9tbV9zZXR6ZXJvX3BkICh2b2lkKQp7CiAgcmV0dXJuIChfX3YyZGYpIF9fYnVpbHRpbl9pYTMy
X3NldHplcm9wZCAoKTsKfQoKCnN0YXRpYyBfX2lubGluZSB2b2lkCl9tbV9zdG9yZV9zZCAoZG91
YmxlICpfX1AsIF9fdjJkZiBfX0EpCnsKICBfX2J1aWx0aW5faWEzMl9zdG9yZXNkIChfX1AsIChf
X3YyZGYpX19BKTsKfQoKCnN0YXRpYyBfX2lubGluZSB2b2lkCl9tbV9zdG9yZTFfcGQgKGRvdWJs
ZSAqX19QLCBfX3YyZGYgX19BKQp7CiAgX192MmRmIF9fdmEgPSAoX192MmRmKV9fQTsKICBfX3Yy
ZGYgX190bXAgPSBfX2J1aWx0aW5faWEzMl9zaHVmcGQgKF9fdmEsIF9fdmEsICgoKDApIDw8IDEp
IHwgKDApKSk7CiAgX19idWlsdGluX2lhMzJfc3RvcmVhcGQgKF9fUCwgX190bXApOwp9CgpzdGF0
aWMgX19pbmxpbmUgdm9pZApfbW1fc3RvcmVfcGQxIChkb3VibGUgKl9fUCwgX192MmRmIF9fQSkK
ewogIF9tbV9zdG9yZTFfcGQgKF9fUCwgX19BKTsKfQoKCnN0YXRpYyBfX2lubGluZSB2b2lkCl9t
bV9zdG9yZV9wZCAoZG91YmxlICpfX1AsIF9fdjJkZiBfX0EpCnsKICBfX2J1aWx0aW5faWEzMl9z
dG9yZWFwZCAoX19QLCAoX192MmRmKV9fQSk7Cn0KCgpzdGF0aWMgX19pbmxpbmUgdm9pZApfbW1f
c3RvcmV1X3BkIChkb3VibGUgKl9fUCwgX192MmRmIF9fQSkKewogIF9fYnVpbHRpbl9pYTMyX3N0
b3JldXBkIChfX1AsIChfX3YyZGYpX19BKTsKfQoKCnN0YXRpYyBfX2lubGluZSB2b2lkCl9tbV9z
dG9yZXJfcGQgKGRvdWJsZSAqX19QLCBfX3YyZGYgX19BKQp7CiAgX192MmRmIF9fdmEgPSAoX192
MmRmKV9fQTsKICBfX3YyZGYgX190bXAgPSBfX2J1aWx0aW5faWEzMl9zaHVmcGQgKF9fdmEsIF9f
dmEsICgoKDApIDw8IDEpIHwgKDEpKSk7CiAgX19idWlsdGluX2lhMzJfc3RvcmVhcGQgKF9fUCwg
X190bXApOwp9CgoKc3RhdGljIF9faW5saW5lIF9fdjJkZgpfbW1fbW92ZV9zZCAoX192MmRmIF9f
QSwgX192MmRmIF9fQikKewogIHJldHVybiAoX192MmRmKSBfX2J1aWx0aW5faWEzMl9tb3ZzZCAo
KF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX3YyZGYKX21t
X2FkZF9wZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikKewogIHJldHVybiAoX192MmRmKV9fYnVp
bHRpbl9pYTMyX2FkZHBkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19p
bmxpbmUgX192MmRmCl9tbV9hZGRfc2QgKF9fdjJkZiBfX0EsIF9fdjJkZiBfX0IpCnsKICByZXR1
cm4gKF9fdjJkZilfX2J1aWx0aW5faWEzMl9hZGRzZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19C
KTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkZgpfbW1fc3ViX3BkIChfX3YyZGYgX19BLCBfX3Yy
ZGYgX19CKQp7CiAgcmV0dXJuIChfX3YyZGYpX19idWlsdGluX2lhMzJfc3VicGQgKChfX3YyZGYp
X19BLCAoX192MmRmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGYKX21tX3N1Yl9zZCAo
X192MmRmIF9fQSwgX192MmRmIF9fQikKewogIHJldHVybiAoX192MmRmKV9fYnVpbHRpbl9pYTMy
X3N1YnNkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192
MmRmCl9tbV9tdWxfcGQgKF9fdjJkZiBfX0EsIF9fdjJkZiBfX0IpCnsKICByZXR1cm4gKF9fdjJk
ZilfX2J1aWx0aW5faWEzMl9tdWxwZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKfQoKc3Rh
dGljIF9faW5saW5lIF9fdjJkZgpfbW1fbXVsX3NkIChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7
CiAgcmV0dXJuIChfX3YyZGYpX19idWlsdGluX2lhMzJfbXVsc2QgKChfX3YyZGYpX19BLCAoX192
MmRmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGYKX21tX2Rpdl9wZCAoX192MmRmIF9f
QSwgX192MmRmIF9fQikKewogIHJldHVybiAoX192MmRmKV9fYnVpbHRpbl9pYTMyX2RpdnBkICgo
X192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRmCl9tbV9k
aXZfc2QgKF9fdjJkZiBfX0EsIF9fdjJkZiBfX0IpCnsKICByZXR1cm4gKF9fdjJkZilfX2J1aWx0
aW5faWEzMl9kaXZzZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKfQoKc3RhdGljIF9faW5s
aW5lIF9fdjJkZgpfbW1fc3FydF9wZCAoX192MmRmIF9fQSkKewogIHJldHVybiAoX192MmRmKV9f
YnVpbHRpbl9pYTMyX3NxcnRwZCAoKF9fdjJkZilfX0EpOwp9CgoKc3RhdGljIF9faW5saW5lIF9f
djJkZgpfbW1fc3FydF9zZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikKewogIF9fdjJkZiBfX3Rt
cCA9IF9fYnVpbHRpbl9pYTMyX21vdnNkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwogIHJl
dHVybiAoX192MmRmKV9fYnVpbHRpbl9pYTMyX3NxcnRzZCAoKF9fdjJkZilfX3RtcCk7Cn0KCnN0
YXRpYyBfX2lubGluZSBfX3YyZGYKX21tX21pbl9wZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikK
ewogIHJldHVybiAoX192MmRmKV9fYnVpbHRpbl9pYTMyX21pbnBkICgoX192MmRmKV9fQSwgKF9f
djJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRmCl9tbV9taW5fc2QgKF9fdjJkZiBf
X0EsIF9fdjJkZiBfX0IpCnsKICByZXR1cm4gKF9fdjJkZilfX2J1aWx0aW5faWEzMl9taW5zZCAo
KF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkZgpfbW1f
bWF4X3BkIChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7CiAgcmV0dXJuIChfX3YyZGYpX19idWls
dGluX2lhMzJfbWF4cGQgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7Cn0KCnN0YXRpYyBfX2lu
bGluZSBfX3YyZGYKX21tX21heF9zZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikKewogIHJldHVy
biAoX192MmRmKV9fYnVpbHRpbl9pYTMyX21heHNkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0Ip
Owp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRmCl9tbV9hbmRfcGQgKF9fdjJkZiBfX0EsIF9fdjJk
ZiBfX0IpCnsKICByZXR1cm4gKF9fdjJkZilfX2J1aWx0aW5faWEzMl9hbmRwZCAoKF9fdjJkZilf
X0EsIChfX3YyZGYpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkZgpfbW1fYW5kbm90X3Bk
IChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7CiAgcmV0dXJuIChfX3YyZGYpX19idWlsdGluX2lh
MzJfYW5kbnBkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUg
X192MmRmCl9tbV9vcl9wZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikKewogIHJldHVybiAoX192
MmRmKV9fYnVpbHRpbl9pYTMyX29ycGQgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7Cn0KCnN0
YXRpYyBfX2lubGluZSBfX3YyZGYKX21tX3hvcl9wZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikK
ewogIHJldHVybiAoX192MmRmKV9fYnVpbHRpbl9pYTMyX3hvcnBkICgoX192MmRmKV9fQSwgKF9f
djJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRmCl9tbV9jbXBlcV9wZCAoX192MmRm
IF9fQSwgX192MmRmIF9fQikKewogIHJldHVybiAoX192MmRmKV9fYnVpbHRpbl9pYTMyX2NtcGVx
cGQgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGYK
X21tX2NtcGx0X3BkIChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7CiAgcmV0dXJuIChfX3YyZGYp
X19idWlsdGluX2lhMzJfY21wbHRwZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKfQoKc3Rh
dGljIF9faW5saW5lIF9fdjJkZgpfbW1fY21wbGVfcGQgKF9fdjJkZiBfX0EsIF9fdjJkZiBfX0Ip
CnsKICByZXR1cm4gKF9fdjJkZilfX2J1aWx0aW5faWEzMl9jbXBsZXBkICgoX192MmRmKV9fQSwg
KF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRmCl9tbV9jbXBndF9wZCAoX192
MmRmIF9fQSwgX192MmRmIF9fQikKewogIHJldHVybiAoX192MmRmKV9fYnVpbHRpbl9pYTMyX2Nt
cGd0cGQgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3Yy
ZGYKX21tX2NtcGdlX3BkIChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7CiAgcmV0dXJuIChfX3Yy
ZGYpX19idWlsdGluX2lhMzJfY21wZ2VwZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKfQoK
c3RhdGljIF9faW5saW5lIF9fdjJkZgpfbW1fY21wbmVxX3BkIChfX3YyZGYgX19BLCBfX3YyZGYg
X19CKQp7CiAgcmV0dXJuIChfX3YyZGYpX19idWlsdGluX2lhMzJfY21wbmVxcGQgKChfX3YyZGYp
X19BLCAoX192MmRmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGYKX21tX2NtcG5sdF9w
ZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikKewogIHJldHVybiAoX192MmRmKV9fYnVpbHRpbl9p
YTMyX2NtcG5sdHBkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxp
bmUgX192MmRmCl9tbV9jbXBubGVfcGQgKF9fdjJkZiBfX0EsIF9fdjJkZiBfX0IpCnsKICByZXR1
cm4gKF9fdjJkZilfX2J1aWx0aW5faWEzMl9jbXBubGVwZCAoKF9fdjJkZilfX0EsIChfX3YyZGYp
X19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkZgpfbW1fY21wbmd0X3BkIChfX3YyZGYgX19B
LCBfX3YyZGYgX19CKQp7CiAgcmV0dXJuIChfX3YyZGYpX19idWlsdGluX2lhMzJfY21wbmd0cGQg
KChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGYKX21t
X2NtcG5nZV9wZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikKewogIHJldHVybiAoX192MmRmKV9f
YnVpbHRpbl9pYTMyX2NtcG5nZXBkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0
aWMgX19pbmxpbmUgX192MmRmCl9tbV9jbXBvcmRfcGQgKF9fdjJkZiBfX0EsIF9fdjJkZiBfX0Ip
CnsKICByZXR1cm4gKF9fdjJkZilfX2J1aWx0aW5faWEzMl9jbXBvcmRwZCAoKF9fdjJkZilfX0Es
IChfX3YyZGYpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkZgpfbW1fY21wdW5vcmRfcGQg
KF9fdjJkZiBfX0EsIF9fdjJkZiBfX0IpCnsKICByZXR1cm4gKF9fdjJkZilfX2J1aWx0aW5faWEz
Ml9jbXB1bm9yZHBkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxp
bmUgX192MmRmCl9tbV9jbXBlcV9zZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikKewogIHJldHVy
biAoX192MmRmKV9fYnVpbHRpbl9pYTMyX2NtcGVxc2QgKChfX3YyZGYpX19BLCAoX192MmRmKV9f
Qik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGYKX21tX2NtcGx0X3NkIChfX3YyZGYgX19BLCBf
X3YyZGYgX19CKQp7CiAgcmV0dXJuIChfX3YyZGYpX19idWlsdGluX2lhMzJfY21wbHRzZCAoKF9f
djJkZilfX0EsIChfX3YyZGYpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkZgpfbW1fY21w
bGVfc2QgKF9fdjJkZiBfX0EsIF9fdjJkZiBfX0IpCnsKICByZXR1cm4gKF9fdjJkZilfX2J1aWx0
aW5faWEzMl9jbXBsZXNkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19p
bmxpbmUgX192MmRmCl9tbV9jbXBndF9zZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikKewogIHJl
dHVybiAoX192MmRmKSBfX2J1aWx0aW5faWEzMl9tb3ZzZCAoKF9fdjJkZikgX19BLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWlsdGluX2lhMzJfY21wbHRzZCAoKF9fdjJk
ZikgX19CLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChfX3YyZGYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BKSk7Cn0KCnN0YXRpYyBfX2lubGlu
ZSBfX3YyZGYKX21tX2NtcGdlX3NkIChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7CiAgcmV0dXJu
IChfX3YyZGYpIF9fYnVpbHRpbl9pYTMyX21vdnNkICgoX192MmRmKSBfX0EsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2J1aWx0aW5faWEzMl9jbXBsZXNkICgoX192MmRmKSBf
X0IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKF9fdjJkZikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0EpKTsKfQoKc3RhdGljIF9faW5saW5lIF9f
djJkZgpfbW1fY21wbmVxX3NkIChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7CiAgcmV0dXJuIChf
X3YyZGYpX19idWlsdGluX2lhMzJfY21wbmVxc2QgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7
Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGYKX21tX2NtcG5sdF9zZCAoX192MmRmIF9fQSwgX192
MmRmIF9fQikKewogIHJldHVybiAoX192MmRmKV9fYnVpbHRpbl9pYTMyX2NtcG5sdHNkICgoX192
MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRmCl9tbV9jbXBu
bGVfc2QgKF9fdjJkZiBfX0EsIF9fdjJkZiBfX0IpCnsKICByZXR1cm4gKF9fdjJkZilfX2J1aWx0
aW5faWEzMl9jbXBubGVzZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKfQoKc3RhdGljIF9f
aW5saW5lIF9fdjJkZgpfbW1fY21wbmd0X3NkIChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7CiAg
cmV0dXJuIChfX3YyZGYpIF9fYnVpbHRpbl9pYTMyX21vdnNkICgoX192MmRmKSBfX0EsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1aWx0aW5faWEzMl9jbXBubHRzZCAoKF9f
djJkZikgX19CLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoX192MmRmKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0EpKTsKfQoKc3RhdGljIF9f
aW5saW5lIF9fdjJkZgpfbW1fY21wbmdlX3NkIChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7CiAg
cmV0dXJuIChfX3YyZGYpIF9fYnVpbHRpbl9pYTMyX21vdnNkICgoX192MmRmKSBfX0EsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1aWx0aW5faWEzMl9jbXBubGVzZCAoKF9f
djJkZikgX19CLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoX192MmRmKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0EpKTsKfQoKc3RhdGljIF9f
aW5saW5lIF9fdjJkZgpfbW1fY21wb3JkX3NkIChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7CiAg
cmV0dXJuIChfX3YyZGYpX19idWlsdGluX2lhMzJfY21wb3Jkc2QgKChfX3YyZGYpX19BLCAoX192
MmRmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGYKX21tX2NtcHVub3JkX3NkIChfX3Yy
ZGYgX19BLCBfX3YyZGYgX19CKQp7CiAgcmV0dXJuIChfX3YyZGYpX19idWlsdGluX2lhMzJfY21w
dW5vcmRzZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIGlu
dApfbW1fY29taWVxX3NkIChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7CiAgcmV0dXJuIF9fYnVp
bHRpbl9pYTMyX2NvbWlzZGVxICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMg
X19pbmxpbmUgaW50Cl9tbV9jb21pbHRfc2QgKF9fdjJkZiBfX0EsIF9fdjJkZiBfX0IpCnsKICBy
ZXR1cm4gX19idWlsdGluX2lhMzJfY29taXNkbHQgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7
Cn0KCnN0YXRpYyBfX2lubGluZSBpbnQKX21tX2NvbWlsZV9zZCAoX192MmRmIF9fQSwgX192MmRm
IF9fQikKewogIHJldHVybiBfX2J1aWx0aW5faWEzMl9jb21pc2RsZSAoKF9fdjJkZilfX0EsIChf
X3YyZGYpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIGludApfbW1fY29taWd0X3NkIChfX3YyZGYg
X19BLCBfX3YyZGYgX19CKQp7CiAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2NvbWlzZGd0ICgoX192
MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgaW50Cl9tbV9jb21pZ2Vf
c2QgKF9fdjJkZiBfX0EsIF9fdjJkZiBfX0IpCnsKICByZXR1cm4gX19idWlsdGluX2lhMzJfY29t
aXNkZ2UgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBpbnQK
X21tX2NvbWluZXFfc2QgKF9fdjJkZiBfX0EsIF9fdjJkZiBfX0IpCnsKICByZXR1cm4gX19idWls
dGluX2lhMzJfY29taXNkbmVxICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMg
X19pbmxpbmUgaW50Cl9tbV91Y29taWVxX3NkIChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7CiAg
cmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pc2RlcSAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19C
KTsKfQoKc3RhdGljIF9faW5saW5lIGludApfbW1fdWNvbWlsdF9zZCAoX192MmRmIF9fQSwgX192
MmRmIF9fQikKewogIHJldHVybiBfX2J1aWx0aW5faWEzMl91Y29taXNkbHQgKChfX3YyZGYpX19B
LCAoX192MmRmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBpbnQKX21tX3Vjb21pbGVfc2QgKF9f
djJkZiBfX0EsIF9fdjJkZiBfX0IpCnsKICByZXR1cm4gX19idWlsdGluX2lhMzJfdWNvbWlzZGxl
ICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgaW50Cl9tbV91
Y29taWd0X3NkIChfX3YyZGYgX19BLCBfX3YyZGYgX19CKQp7CiAgcmV0dXJuIF9fYnVpbHRpbl9p
YTMyX3Vjb21pc2RndCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKfQoKc3RhdGljIF9faW5s
aW5lIGludApfbW1fdWNvbWlnZV9zZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikKewogIHJldHVy
biBfX2J1aWx0aW5faWEzMl91Y29taXNkZ2UgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7Cn0K
CnN0YXRpYyBfX2lubGluZSBpbnQKX21tX3Vjb21pbmVxX3NkIChfX3YyZGYgX19BLCBfX3YyZGYg
X19CKQp7CiAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pc2RuZXEgKChfX3YyZGYpX19BLCAo
X192MmRmKV9fQik7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fbG9hZF9zaTEyOCAo
X192MmRpIGNvbnN0ICpfX1ApCnsKICByZXR1cm4gKF9fdjJkaSkgX19idWlsdGluX2lhMzJfbG9h
ZGRxYSAoKGNoYXIgY29uc3QgKilfX1ApOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9s
b2FkdV9zaTEyOCAoX192MmRpIGNvbnN0ICpfX1ApCnsKICByZXR1cm4gKF9fdjJkaSkgX19idWls
dGluX2lhMzJfbG9hZGRxdSAoKGNoYXIgY29uc3QgKilfX1ApOwp9CgpzdGF0aWMgX19pbmxpbmUg
X192MmRpCl9tbV9sb2FkbF9lcGk2NCAoX192MmRpIGNvbnN0ICpfX1ApCnsKICByZXR1cm4gKF9f
djJkaSkgX19idWlsdGluX2lhMzJfbW92cTJkcSAoKih1bnNpZ25lZCBsb25nIGxvbmcgKilfX1Ap
Owp9CgpzdGF0aWMgX19pbmxpbmUgdm9pZApfbW1fc3RvcmVfc2kxMjggKF9fdjJkaSAqX19QLCBf
X3YyZGkgX19CKQp7CiAgX19idWlsdGluX2lhMzJfc3RvcmVkcWEgKChjaGFyICopX19QLCAoX192
MTZxaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgdm9pZApfbW1fc3RvcmV1X3NpMTI4IChfX3Yy
ZGkgKl9fUCwgX192MmRpIF9fQikKewogIF9fYnVpbHRpbl9pYTMyX3N0b3JlZHF1ICgoY2hhciAq
KV9fUCwgKF9fdjE2cWkpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIHZvaWQKX21tX3N0b3JlbF9l
cGk2NCAoX192MmRpICpfX1AsIF9fdjJkaSBfX0IpCnsKICAqKGxvbmcgbG9uZyAqKV9fUCA9IF9f
YnVpbHRpbl9pYTMyX21vdmRxMnEgKChfX3YyZGkpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9f
djJkaQpfbW1fbW92ZV9lcGk2NCAoX192MmRpIF9fQSkKewogIHJldHVybiAoX192MmRpKSBfX2J1
aWx0aW5faWEzMl9tb3ZxICgoX192MmRpKV9fQSk7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX192MmRp
Cl9tbV9zZXR6ZXJvX3NpMTI4ICh2b2lkKQp7CiAgcmV0dXJuIChfX3YyZGkpIF9fYnVpbHRpbl9p
YTMyX3NldHplcm8xMjggKCk7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX3NldF9lcGk2
NCAoX19tNjQgX19BLCBfX202NCBfX0IpCnsKICBfX3YyZGkgX190bXAgPSAoX192MmRpKV9fYnVp
bHRpbl9pYTMyX21vdnEyZHEgKCh1bnNpZ25lZCBsb25nIGxvbmcpX19BKTsKICBfX3YyZGkgX190
bXAyID0gKF9fdjJkaSlfX2J1aWx0aW5faWEzMl9tb3ZxMmRxICgodW5zaWduZWQgbG9uZyBsb25n
KV9fQik7CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcHVucGNrbHFkcTEyOCAoX190
bXAyLCBfX3RtcCk7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9zZXRfZXBpMzIgKGlu
dCBfX1osIGludCBfX1ksIGludCBfX1gsIGludCBfX1cpCnsKICB1bmlvbiB7CiAgICBpbnQgX19h
WzRdOwogICAgX192MmRpIF9fdjsKICB9IF9fdTsKCiAgX191Ll9fYVswXSA9IF9fVzsKICBfX3Uu
X19hWzFdID0gX19YOwogIF9fdS5fX2FbMl0gPSBfX1k7CiAgX191Ll9fYVszXSA9IF9fWjsKCiAg
cmV0dXJuIF9fdS5fX3Y7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX3NldF9lcGkxNiAo
c2hvcnQgX19aLCBzaG9ydCBfX1ksIHNob3J0IF9fWCwgc2hvcnQgX19XLAogICAgICAgICAgICAg
ICBzaG9ydCBfX1YsIHNob3J0IF9fVSwgc2hvcnQgX19ULCBzaG9ydCBfX1MpCnsKICB1bmlvbiB7
CiAgICBzaG9ydCBfX2FbOF07CiAgICBfX3YyZGkgX192OwogIH0gX191OwoKICBfX3UuX19hWzBd
ID0gX19TOwogIF9fdS5fX2FbMV0gPSBfX1Q7CiAgX191Ll9fYVsyXSA9IF9fVTsKICBfX3UuX19h
WzNdID0gX19WOwogIF9fdS5fX2FbNF0gPSBfX1c7CiAgX191Ll9fYVs1XSA9IF9fWDsKICBfX3Uu
X19hWzZdID0gX19ZOwogIF9fdS5fX2FbN10gPSBfX1o7CgogIHJldHVybiBfX3UuX192Owp9CgoK
c3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fc2V0X2VwaTggKGNoYXIgX19aLCBjaGFyIF9fWSwg
Y2hhciBfX1gsIGNoYXIgX19XLAogICAgICAgICAgICAgIGNoYXIgX19WLCBjaGFyIF9fVSwgY2hh
ciBfX1QsIGNoYXIgX19TLAogICAgICAgICAgICAgIGNoYXIgX19aMSwgY2hhciBfX1kxLCBjaGFy
IF9fWDEsIGNoYXIgX19XMSwKICAgICAgICAgICAgICBjaGFyIF9fVjEsIGNoYXIgX19VMSwgY2hh
ciBfX1QxLCBjaGFyIF9fUzEpCnsKICB1bmlvbiB7CiAgICBjaGFyIF9fYVsxNl07CiAgICBfX3Yy
ZGkgX192OwogIH0gX191OwoKICBfX3UuX19hWzBdID0gX19TMTsKICBfX3UuX19hWzFdID0gX19U
MTsKICBfX3UuX19hWzJdID0gX19VMTsKICBfX3UuX19hWzNdID0gX19WMTsKICBfX3UuX19hWzRd
ID0gX19XMTsKICBfX3UuX19hWzVdID0gX19YMTsKICBfX3UuX19hWzZdID0gX19ZMTsKICBfX3Uu
X19hWzddID0gX19aMTsKICBfX3UuX19hWzhdID0gX19TOwogIF9fdS5fX2FbOV0gPSBfX1Q7CiAg
X191Ll9fYVsxMF0gPSBfX1U7CiAgX191Ll9fYVsxMV0gPSBfX1Y7CiAgX191Ll9fYVsxMl0gPSBf
X1c7CiAgX191Ll9fYVsxM10gPSBfX1g7CiAgX191Ll9fYVsxNF0gPSBfX1k7CiAgX191Ll9fYVsx
NV0gPSBfX1o7CgogIHJldHVybiBfX3UuX192Owp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9t
bV9zZXQxX2VwaTY0IChfX202NCBfX0EpCnsKICBfX3YyZGkgX190bXAgPSAoX192MmRpKV9fYnVp
bHRpbl9pYTMyX21vdnEyZHEgKCh1bnNpZ25lZCBsb25nIGxvbmcpX19BKTsKICByZXR1cm4gKF9f
djJkaSlfX2J1aWx0aW5faWEzMl9wdW5wY2tscWRxMTI4IChfX3RtcCwgX190bXApOwp9CgpzdGF0
aWMgX19pbmxpbmUgX192MmRpCl9tbV9zZXQxX2VwaTMyIChpbnQgX19BKQp7CiAgX192NHNpIF9f
dG1wID0gKF9fdjRzaSlfX2J1aWx0aW5faWEzMl9sb2FkZCAoJl9fQSk7CiAgcmV0dXJuIChfX3Yy
ZGkpIF9fYnVpbHRpbl9pYTMyX3BzaHVmZCAoKF9fdjRzaSlfX3RtcCwgKCgoMCkgPDwgNikgfCAo
KDApIDw8IDQpIHwgKCgwKSA8PCAyKSB8ICgwKSkpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRp
Cl9tbV9zZXQxX2VwaTE2IChzaG9ydCBfX0EpCnsKICBpbnQgX19BY29weSA9ICh1bnNpZ25lZCBz
aG9ydClfX0E7CiAgX192NHNpIF9fdG1wID0gKF9fdjRzaSlfX2J1aWx0aW5faWEzMl9sb2FkZCAo
Jl9fQWNvcHkpOwogIF9fdG1wID0gKF9fdjRzaSlfX2J1aWx0aW5faWEzMl9wdW5wY2tsd2QxMjgg
KChfX3Y4aGkpX190bXAsIChfX3Y4aGkpX190bXApOwogIHJldHVybiAoX192MmRpKSBfX2J1aWx0
aW5faWEzMl9wc2h1ZmQgKChfX3Y0c2kpX190bXAsICgoKDApIDw8IDYpIHwgKCgwKSA8PCA0KSB8
ICgoMCkgPDwgMikgfCAoMCkpKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fc2V0MV9l
cGk4IChjaGFyIF9fQSkKewogIGludCBfX0Fjb3B5ID0gKHVuc2lnbmVkIGNoYXIpX19BOwogIF9f
djRzaSBfX3RtcCA9IChfX3Y0c2kpX19idWlsdGluX2lhMzJfbG9hZGQgKCZfX0Fjb3B5KTsKICBf
X3RtcCA9IChfX3Y0c2kpX19idWlsdGluX2lhMzJfcHVucGNrbGJ3MTI4ICgoX192MTZxaSlfX3Rt
cCwgKF9fdjE2cWkpX190bXApOwogIF9fdG1wID0gKF9fdjRzaSlfX2J1aWx0aW5faWEzMl9wdW5w
Y2tsYncxMjggKChfX3YxNnFpKV9fdG1wLCAoX192MTZxaSlfX3RtcCk7CiAgcmV0dXJuIChfX3Yy
ZGkpIF9fYnVpbHRpbl9pYTMyX3BzaHVmZCAoKF9fdjRzaSlfX3RtcCwgKCgoMCkgPDwgNikgfCAo
KDApIDw8IDQpIHwgKCgwKSA8PCAyKSB8ICgwKSkpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRp
Cl9tbV9zZXRyX2VwaTY0IChfX202NCBfX0EsIF9fbTY0IF9fQikKewogIF9fdjJkaSBfX3RtcCA9
IChfX3YyZGkpX19idWlsdGluX2lhMzJfbW92cTJkcSAoKHVuc2lnbmVkIGxvbmcgbG9uZylfX0Ep
OwogIF9fdjJkaSBfX3RtcDIgPSAoX192MmRpKV9fYnVpbHRpbl9pYTMyX21vdnEyZHEgKCh1bnNp
Z25lZCBsb25nIGxvbmcpX19CKTsKICByZXR1cm4gKF9fdjJkaSlfX2J1aWx0aW5faWEzMl9wdW5w
Y2tscWRxMTI4IChfX3RtcCwgX190bXAyKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21t
X3NldHJfZXBpMzIgKGludCBfX1csIGludCBfX1gsIGludCBfX1ksIGludCBfX1opCnsKICB1bmlv
biB7CiAgICBpbnQgX19hWzRdOwogICAgX192MmRpIF9fdjsKICB9IF9fdTsKCiAgX191Ll9fYVsw
XSA9IF9fVzsKICBfX3UuX19hWzFdID0gX19YOwogIF9fdS5fX2FbMl0gPSBfX1k7CiAgX191Ll9f
YVszXSA9IF9fWjsKCiAgcmV0dXJuIF9fdS5fX3Y7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkK
X21tX3NldHJfZXBpMTYgKHNob3J0IF9fUywgc2hvcnQgX19ULCBzaG9ydCBfX1UsIHNob3J0IF9f
ViwKICAgICAgICAgICAgICAgIHNob3J0IF9fVywgc2hvcnQgX19YLCBzaG9ydCBfX1ksIHNob3J0
IF9fWikKewogIHVuaW9uIHsKICAgIHNob3J0IF9fYVs4XTsKICAgIF9fdjJkaSBfX3Y7CiAgfSBf
X3U7CgogIF9fdS5fX2FbMF0gPSBfX1M7CiAgX191Ll9fYVsxXSA9IF9fVDsKICBfX3UuX19hWzJd
ID0gX19VOwogIF9fdS5fX2FbM10gPSBfX1Y7CiAgX191Ll9fYVs0XSA9IF9fVzsKICBfX3UuX19h
WzVdID0gX19YOwogIF9fdS5fX2FbNl0gPSBfX1k7CiAgX191Ll9fYVs3XSA9IF9fWjsKCiAgcmV0
dXJuIF9fdS5fX3Y7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9zZXRyX2VwaTggKGNo
YXIgX19TMSwgY2hhciBfX1QxLCBjaGFyIF9fVTEsIGNoYXIgX19WMSwKICAgICAgICAgICAgICAg
Y2hhciBfX1cxLCBjaGFyIF9fWDEsIGNoYXIgX19ZMSwgY2hhciBfX1oxLAogICAgICAgICAgICAg
ICBjaGFyIF9fUywgY2hhciBfX1QsIGNoYXIgX19VLCBjaGFyIF9fViwKICAgICAgICAgICAgICAg
Y2hhciBfX1csIGNoYXIgX19YLCBjaGFyIF9fWSwgY2hhciBfX1opCnsKICB1bmlvbiB7CiAgICBj
aGFyIF9fYVsxNl07CiAgICBfX3YyZGkgX192OwogIH0gX191OwoKICBfX3UuX19hWzBdID0gX19T
MTsKICBfX3UuX19hWzFdID0gX19UMTsKICBfX3UuX19hWzJdID0gX19VMTsKICBfX3UuX19hWzNd
ID0gX19WMTsKICBfX3UuX19hWzRdID0gX19XMTsKICBfX3UuX19hWzVdID0gX19YMTsKICBfX3Uu
X19hWzZdID0gX19ZMTsKICBfX3UuX19hWzddID0gX19aMTsKICBfX3UuX19hWzhdID0gX19TOwog
IF9fdS5fX2FbOV0gPSBfX1Q7CiAgX191Ll9fYVsxMF0gPSBfX1U7CiAgX191Ll9fYVsxMV0gPSBf
X1Y7CiAgX191Ll9fYVsxMl0gPSBfX1c7CiAgX191Ll9fYVsxM10gPSBfX1g7CiAgX191Ll9fYVsx
NF0gPSBfX1k7CiAgX191Ll9fYVsxNV0gPSBfX1o7CgogIHJldHVybiBfX3UuX192Owp9CgpzdGF0
aWMgX19pbmxpbmUgX192MmRmCl9tbV9jdnRlcGkzMl9wZCAoX192MmRpIF9fQSkKewogIHJldHVy
biAoX192MmRmKV9fYnVpbHRpbl9pYTMyX2N2dGRxMnBkICgoX192NHNpKSBfX0EpOwp9CgpzdGF0
aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9jdnRlcGkzMl9wcyAoX192MmRpIF9fQSkKewogIHJldHVy
biAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2N2dGRxMnBzICgoX192NHNpKSBfX0EpOwp9CgpzdGF0
aWMgX19pbmxpbmUgX192MmRpCl9tbV9jdnRwZF9lcGkzMiAoX192MmRmIF9fQSkKewogIHJldHVy
biAoX192MmRpKV9fYnVpbHRpbl9pYTMyX2N2dHBkMmRxICgoX192MmRmKSBfX0EpOwp9CgpzdGF0
aWMgX19pbmxpbmUgX19tNjQKX21tX2N2dHBkX3BpMzIgKF9fdjJkZiBfX0EpCnsKICByZXR1cm4g
KF9fbTY0KV9fYnVpbHRpbl9pYTMyX2N2dHBkMnBpICgoX192MmRmKSBfX0EpOwp9CgpzdGF0aWMg
X19pbmxpbmUgX19tMTI4Cl9tbV9jdnRwZF9wcyAoX192MmRmIF9fQSkKewogIHJldHVybiAoX19t
MTI4KV9fYnVpbHRpbl9pYTMyX2N2dHBkMnBzICgoX192MmRmKSBfX0EpOwp9CgpzdGF0aWMgX19p
bmxpbmUgX192MmRpCl9tbV9jdnR0cGRfZXBpMzIgKF9fdjJkZiBfX0EpCnsKICByZXR1cm4gKF9f
djJkaSlfX2J1aWx0aW5faWEzMl9jdnR0cGQyZHEgKChfX3YyZGYpIF9fQSk7Cn0KCnN0YXRpYyBf
X2lubGluZSBfX202NApfbW1fY3Z0dHBkX3BpMzIgKF9fdjJkZiBfX0EpCnsKICByZXR1cm4gKF9f
bTY0KV9fYnVpbHRpbl9pYTMyX2N2dHRwZDJwaSAoKF9fdjJkZikgX19BKTsKfQoKc3RhdGljIF9f
aW5saW5lIF9fdjJkZgpfbW1fY3Z0cGkzMl9wZCAoX19tNjQgX19BKQp7CiAgcmV0dXJuIChfX3Yy
ZGYpX19idWlsdGluX2lhMzJfY3Z0cGkycGQgKChfX3Yyc2kpIF9fQSk7Cn0KCnN0YXRpYyBfX2lu
bGluZSBfX3YyZGkKX21tX2N2dHBzX2VwaTMyIChfX20xMjggX19BKQp7CiAgcmV0dXJuIChfX3Yy
ZGkpX19idWlsdGluX2lhMzJfY3Z0cHMyZHEgKChfX3Y0c2YpIF9fQSk7Cn0KCnN0YXRpYyBfX2lu
bGluZSBfX3YyZGkKX21tX2N2dHRwc19lcGkzMiAoX19tMTI4IF9fQSkKewogIHJldHVybiAoX192
MmRpKV9fYnVpbHRpbl9pYTMyX2N2dHRwczJkcSAoKF9fdjRzZikgX19BKTsKfQoKc3RhdGljIF9f
aW5saW5lIF9fdjJkZgpfbW1fY3Z0cHNfcGQgKF9fbTEyOCBfX0EpCnsKICByZXR1cm4gKF9fdjJk
ZilfX2J1aWx0aW5faWEzMl9jdnRwczJwZCAoKF9fdjRzZikgX19BKTsKfQoKc3RhdGljIF9faW5s
aW5lIGludApfbW1fY3Z0c2Rfc2kzMiAoX192MmRmIF9fQSkKewogIHJldHVybiBfX2J1aWx0aW5f
aWEzMl9jdnRzZDJzaSAoKF9fdjJkZikgX19BKTsKfQoKc3RhdGljIF9faW5saW5lIGludApfbW1f
Y3Z0dHNkX3NpMzIgKF9fdjJkZiBfX0EpCnsKICByZXR1cm4gX19idWlsdGluX2lhMzJfY3Z0dHNk
MnNpICgoX192MmRmKSBfX0EpOwp9CgpzdGF0aWMgX19pbmxpbmUgX19tMTI4Cl9tbV9jdnRzZF9z
cyAoX19tMTI4IF9fQSwgX192MmRmIF9fQikKewogIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9p
YTMyX2N2dHNkMnNzICgoX192NHNmKSBfX0EsIChfX3YyZGYpIF9fQik7Cn0KCnN0YXRpYyBfX2lu
bGluZSBfX3YyZGYKX21tX2N2dHNpMzJfc2QgKF9fdjJkZiBfX0EsIGludCBfX0IpCnsKICByZXR1
cm4gKF9fdjJkZilfX2J1aWx0aW5faWEzMl9jdnRzaTJzZCAoKF9fdjJkZikgX19BLCBfX0IpOwp9
CgpzdGF0aWMgX19pbmxpbmUgX192MmRmCl9tbV9jdnRzc19zZCAoX192MmRmIF9fQSwgX19tMTI4
IF9fQikKewogIHJldHVybiAoX192MmRmKV9fYnVpbHRpbl9pYTMyX2N2dHNzMnNkICgoX192MmRm
KSBfX0EsIChfX3Y0c2YpX19CKTsKfQoKCgpzdGF0aWMgX19pbmxpbmUgX192MmRmCl9tbV91bnBh
Y2toaV9wZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikKewogIHJldHVybiAoX192MmRmKV9fYnVp
bHRpbl9pYTMyX3VucGNraHBkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMg
X19pbmxpbmUgX192MmRmCl9tbV91bnBhY2tsb19wZCAoX192MmRmIF9fQSwgX192MmRmIF9fQikK
ewogIHJldHVybiAoX192MmRmKV9fYnVpbHRpbl9pYTMyX3VucGNrbHBkICgoX192MmRmKV9fQSwg
KF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRmCl9tbV9sb2FkaF9wZCAoX192
MmRmIF9fQSwgZG91YmxlIGNvbnN0ICpfX0IpCnsKICByZXR1cm4gKF9fdjJkZilfX2J1aWx0aW5f
aWEzMl9sb2FkaHBkICgoX192MmRmKV9fQSwgKF9fdjJzaSAqKV9fQik7Cn0KCnN0YXRpYyBfX2lu
bGluZSB2b2lkCl9tbV9zdG9yZWhfcGQgKGRvdWJsZSAqX19BLCBfX3YyZGYgX19CKQp7CiAgX19i
dWlsdGluX2lhMzJfc3RvcmVocGQgKChfX3Yyc2kgKilfX0EsIChfX3YyZGYpX19CKTsKfQoKc3Rh
dGljIF9faW5saW5lIF9fdjJkZgpfbW1fbG9hZGxfcGQgKF9fdjJkZiBfX0EsIGRvdWJsZSBjb25z
dCAqX19CKQp7CiAgcmV0dXJuIChfX3YyZGYpX19idWlsdGluX2lhMzJfbG9hZGxwZCAoKF9fdjJk
ZilfX0EsIChfX3Yyc2kgKilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgdm9pZApfbW1fc3RvcmVs
X3BkIChkb3VibGUgKl9fQSwgX192MmRmIF9fQikKewogIF9fYnVpbHRpbl9pYTMyX3N0b3JlbHBk
ICgoX192MnNpICopX19BLCAoX192MmRmKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBpbnQKX21t
X21vdmVtYXNrX3BkIChfX3YyZGYgX19BKQp7CiAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX21vdm1z
a3BkICgoX192MmRmKV9fQSk7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX3BhY2tzX2Vw
aTE2IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGlu
X2lhMzJfcGFja3Nzd2IxMjggKChfX3Y4aGkpX19BLCAoX192OGhpKV9fQik7Cn0KCnN0YXRpYyBf
X2lubGluZSBfX3YyZGkKX21tX3BhY2tzX2VwaTMyIChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7
CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcGFja3NzZHcxMjggKChfX3Y0c2kpX19B
LCAoX192NHNpKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX3BhY2t1c19lcGkx
NiAoX192MmRpIF9fQSwgX192MmRpIF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9p
YTMyX3BhY2t1c3diMTI4ICgoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IpOwp9CgpzdGF0aWMgX19p
bmxpbmUgX192MmRpCl9tbV91bnBhY2toaV9lcGk4IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7
CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcHVucGNraGJ3MTI4ICgoX192MTZxaSlf
X0EsIChfX3YxNnFpKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX3VucGFja2hp
X2VwaTE2IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWls
dGluX2lhMzJfcHVucGNraHdkMTI4ICgoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IpOwp9CgpzdGF0
aWMgX19pbmxpbmUgX192MmRpCl9tbV91bnBhY2toaV9lcGkzMiAoX192MmRpIF9fQSwgX192MmRp
IF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3B1bnBja2hkcTEyOCAoKF9f
djRzaSlfX0EsIChfX3Y0c2kpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fdW5w
YWNraGlfZXBpNjQgKF9fdjJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICByZXR1cm4gKF9fdjJkaSlf
X2J1aWx0aW5faWEzMl9wdW5wY2tocWRxMTI4ICgoX192MmRpKV9fQSwgKF9fdjJkaSlfX0IpOwp9
CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV91bnBhY2tsb19lcGk4IChfX3YyZGkgX19BLCBf
X3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcHVucGNrbGJ3MTI4
ICgoX192MTZxaSlfX0EsIChfX3YxNnFpKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkK
X21tX3VucGFja2xvX2VwaTE2IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChf
X3YyZGkpX19idWlsdGluX2lhMzJfcHVucGNrbHdkMTI4ICgoX192OGhpKV9fQSwgKF9fdjhoaSlf
X0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV91bnBhY2tsb19lcGkzMiAoX192MmRp
IF9fQSwgX192MmRpIF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3B1bnBj
a2xkcTEyOCAoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9f
djJkaQpfbW1fdW5wYWNrbG9fZXBpNjQgKF9fdjJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICByZXR1
cm4gKF9fdjJkaSlfX2J1aWx0aW5faWEzMl9wdW5wY2tscWRxMTI4ICgoX192MmRpKV9fQSwgKF9f
djJkaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9hZGRfZXBpOCAoX192MmRp
IF9fQSwgX192MmRpIF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3BhZGRi
MTI4ICgoX192MTZxaSlfX0EsIChfX3YxNnFpKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3Yy
ZGkKX21tX2FkZF9lcGkxNiAoX192MmRpIF9fQSwgX192MmRpIF9fQikKewogIHJldHVybiAoX192
MmRpKV9fYnVpbHRpbl9pYTMyX3BhZGR3MTI4ICgoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IpOwp9
CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9hZGRfZXBpMzIgKF9fdjJkaSBfX0EsIF9fdjJk
aSBfX0IpCnsKICByZXR1cm4gKF9fdjJkaSlfX2J1aWx0aW5faWEzMl9wYWRkZDEyOCAoKF9fdjRz
aSlfX0EsIChfX3Y0c2kpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fYWRkX2Vw
aTY0IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGlu
X2lhMzJfcGFkZHExMjggKChfX3Y0c2kpX19BLCAoX192NHNpKV9fQik7Cn0KCnN0YXRpYyBfX2lu
bGluZSBfX3YyZGkKX21tX2FkZHNfZXBpOCAoX192MmRpIF9fQSwgX192MmRpIF9fQikKewogIHJl
dHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3BhZGRzYjEyOCAoKF9fdjE2cWkpX19BLCAoX192
MTZxaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9hZGRzX2VwaTE2IChfX3Yy
ZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcGFk
ZHN3MTI4ICgoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192
MmRpCl9tbV9hZGRzX2VwdTggKF9fdjJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICByZXR1cm4gKF9f
djJkaSlfX2J1aWx0aW5faWEzMl9wYWRkdXNiMTI4ICgoX192MTZxaSlfX0EsIChfX3YxNnFpKV9f
Qik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX2FkZHNfZXB1MTYgKF9fdjJkaSBfX0Es
IF9fdjJkaSBfX0IpCnsKICByZXR1cm4gKF9fdjJkaSlfX2J1aWx0aW5faWEzMl9wYWRkdXN3MTI4
ICgoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9t
bV9zdWJfZXBpOCAoX192MmRpIF9fQSwgX192MmRpIF9fQikKewogIHJldHVybiAoX192MmRpKV9f
YnVpbHRpbl9pYTMyX3BzdWJiMTI4ICgoX192MTZxaSlfX0EsIChfX3YxNnFpKV9fQik7Cn0KCnN0
YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX3N1Yl9lcGkxNiAoX192MmRpIF9fQSwgX192MmRpIF9f
QikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3BzdWJ3MTI4ICgoX192OGhpKV9f
QSwgKF9fdjhoaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9zdWJfZXBpMzIg
KF9fdjJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICByZXR1cm4gKF9fdjJkaSlfX2J1aWx0aW5faWEz
Ml9wc3ViZDEyOCAoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19CKTsKfQoKc3RhdGljIF9faW5saW5l
IF9fdjJkaQpfbW1fc3ViX2VwaTY0IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJu
IChfX3YyZGkpX19idWlsdGluX2lhMzJfcHN1YnExMjggKChfX3Y0c2kpX19BLCAoX192NHNpKV9f
Qik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX3N1YnNfZXBpOCAoX192MmRpIF9fQSwg
X192MmRpIF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3BzdWJzYjEyOCAo
KF9fdjE2cWkpX19BLCAoX192MTZxaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9t
bV9zdWJzX2VwaTE2IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkp
X19idWlsdGluX2lhMzJfcHN1YnN3MTI4ICgoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IpOwp9Cgpz
dGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9zdWJzX2VwdTggKF9fdjJkaSBfX0EsIF9fdjJkaSBf
X0IpCnsKICByZXR1cm4gKF9fdjJkaSlfX2J1aWx0aW5faWEzMl9wc3VidXNiMTI4ICgoX192MTZx
aSlfX0EsIChfX3YxNnFpKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX3N1YnNf
ZXB1MTYgKF9fdjJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICByZXR1cm4gKF9fdjJkaSlfX2J1aWx0
aW5faWEzMl9wc3VidXN3MTI4ICgoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IpOwp9CgpzdGF0aWMg
X19pbmxpbmUgX192MmRpCl9tbV9tYWRkX2VwaTE2IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7
CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcG1hZGR3ZDEyOCAoKF9fdjhoaSlfX0Es
IChfX3Y4aGkpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fbXVsaGlfZXBpMTYg
KF9fdjJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICByZXR1cm4gKF9fdjJkaSlfX2J1aWx0aW5faWEz
Ml9wbXVsaHcxMjggKChfX3Y4aGkpX19BLCAoX192OGhpKV9fQik7Cn0KCnN0YXRpYyBfX2lubGlu
ZSBfX3YyZGkKX21tX211bGxvX2VwaTE2IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0
dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcG11bGx3MTI4ICgoX192OGhpKV9fQSwgKF9fdjho
aSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX211bF9wdTE2IChfX202NCBfX0Es
IF9fbTY0IF9fQikKewogIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcG11bHVkcSAoKF9f
djJzaSlfX0EsIChfX3Yyc2kpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fbXVs
X2VwdTMyIChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWls
dGluX2lhMzJfcG11bHVkcTEyOCAoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19CKTsKfQoKc3RhdGlj
IF9faW5saW5lIF9fdjJkaQpfbW1fc2xsX2VwaTE2IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7
CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcHNsbHcxMjggKChfX3Y4aGkpX19BLCAo
X192MmRpKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX3NsbF9lcGkzMiAoX192
MmRpIF9fQSwgX192MmRpIF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3Bz
bGxkMTI4ICgoX192NHNpKV9fQSwgKF9fdjJkaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192
MmRpCl9tbV9zbGxfZXBpNjQgKF9fdjJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICByZXR1cm4gKF9f
djJkaSlfX2J1aWx0aW5faWEzMl9wc2xscTEyOCAoKF9fdjJkaSlfX0EsIChfX3YyZGkpX19CKTsK
fQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fc3JhX2VwaTE2IChfX3YyZGkgX19BLCBfX3Yy
ZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcHNyYXcxMjggKChfX3Y4
aGkpX19BLCAoX192MmRpKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX3NyYV9l
cGkzMiAoX192MmRpIF9fQSwgX192MmRpIF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRp
bl9pYTMyX3BzcmFkMTI4ICgoX192NHNpKV9fQSwgKF9fdjJkaSlfX0IpOwp9CgpzdGF0aWMgX19p
bmxpbmUgX192MmRpCl9tbV9zcmxfZXBpMTYgKF9fdjJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICBy
ZXR1cm4gKF9fdjJkaSlfX2J1aWx0aW5faWEzMl9wc3JsdzEyOCAoKF9fdjhoaSlfX0EsIChfX3Yy
ZGkpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fc3JsX2VwaTMyIChfX3YyZGkg
X19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcHNybGQx
MjggKChfX3Y0c2kpX19BLCAoX192MmRpKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkK
X21tX3NybF9lcGk2NCAoX192MmRpIF9fQSwgX192MmRpIF9fQikKewogIHJldHVybiAoX192MmRp
KV9fYnVpbHRpbl9pYTMyX3BzcmxxMTI4ICgoX192MmRpKV9fQSwgKF9fdjJkaSlfX0IpOwp9Cgpz
dGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9zbGxpX2VwaTE2IChfX3YyZGkgX19BLCBpbnQgX19C
KQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcHNsbHdpMTI4ICgoX192OGhpKV9f
QSwgX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fc2xsaV9lcGkzMiAoX192MmRp
IF9fQSwgaW50IF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3BzbGxkaTEy
OCAoKF9fdjRzaSlfX0EsIF9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX3NsbGlf
ZXBpNjQgKF9fdjJkaSBfX0EsIGludCBfX0IpCnsKICByZXR1cm4gKF9fdjJkaSlfX2J1aWx0aW5f
aWEzMl9wc2xscWkxMjggKChfX3YyZGkpX19BLCBfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192
MmRpCl9tbV9zcmFpX2VwaTE2IChfX3YyZGkgX19BLCBpbnQgX19CKQp7CiAgcmV0dXJuIChfX3Yy
ZGkpX19idWlsdGluX2lhMzJfcHNyYXdpMTI4ICgoX192OGhpKV9fQSwgX19CKTsKfQoKc3RhdGlj
IF9faW5saW5lIF9fdjJkaQpfbW1fc3JhaV9lcGkzMiAoX192MmRpIF9fQSwgaW50IF9fQikKewog
IHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3BzcmFkaTEyOCAoKF9fdjRzaSlfX0EsIF9f
Qik7Cn0KIyAyMjUwICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
My9pbmNsdWRlL3htbWludHJpbi5oIiAzIDQKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fc3Js
aV9lcGkxNiAoX192MmRpIF9fQSwgaW50IF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRp
bl9pYTMyX3Bzcmx3aTEyOCAoKF9fdjhoaSlfX0EsIF9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBf
X3YyZGkKX21tX3NybGlfZXBpMzIgKF9fdjJkaSBfX0EsIGludCBfX0IpCnsKICByZXR1cm4gKF9f
djJkaSlfX2J1aWx0aW5faWEzMl9wc3JsZGkxMjggKChfX3Y0c2kpX19BLCBfX0IpOwp9CgpzdGF0
aWMgX19pbmxpbmUgX192MmRpCl9tbV9zcmxpX2VwaTY0IChfX3YyZGkgX19BLCBpbnQgX19CKQp7
CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcHNybHFpMTI4ICgoX192MmRpKV9fQSwg
X19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fYW5kX3NpMTI4IChfX3YyZGkgX19B
LCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcGFuZDEyOCAo
KF9fdjJkaSlfX0EsIChfX3YyZGkpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1f
YW5kbm90X3NpMTI4IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkp
X19idWlsdGluX2lhMzJfcGFuZG4xMjggKChfX3YyZGkpX19BLCAoX192MmRpKV9fQik7Cn0KCnN0
YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX29yX3NpMTI4IChfX3YyZGkgX19BLCBfX3YyZGkgX19C
KQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcG9yMTI4ICgoX192MmRpKV9fQSwg
KF9fdjJkaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV94b3Jfc2kxMjggKF9f
djJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICByZXR1cm4gKF9fdjJkaSlfX2J1aWx0aW5faWEzMl9w
eG9yMTI4ICgoX192MmRpKV9fQSwgKF9fdjJkaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192
MmRpCl9tbV9jbXBlcV9lcGk4IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChf
X3YyZGkpX19idWlsdGluX2lhMzJfcGNtcGVxYjEyOCAoKF9fdjE2cWkpX19BLCAoX192MTZxaSlf
X0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9jbXBlcV9lcGkxNiAoX192MmRpIF9f
QSwgX192MmRpIF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3BjbXBlcXcx
MjggKChfX3Y4aGkpX19BLCAoX192OGhpKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkK
X21tX2NtcGVxX2VwaTMyIChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3Yy
ZGkpX19idWlsdGluX2lhMzJfcGNtcGVxZDEyOCAoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19CKTsK
fQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fY21wbHRfZXBpOCAoX192MmRpIF9fQSwgX192
MmRpIF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3BjbXBndGIxMjggKChf
X3YxNnFpKV9fQiwgKF9fdjE2cWkpX19BKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1f
Y21wbHRfZXBpMTYgKF9fdjJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICByZXR1cm4gKF9fdjJkaSlf
X2J1aWx0aW5faWEzMl9wY21wZ3R3MTI4ICgoX192OGhpKV9fQiwgKF9fdjhoaSlfX0EpOwp9Cgpz
dGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9jbXBsdF9lcGkzMiAoX192MmRpIF9fQSwgX192MmRp
IF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3BjbXBndGQxMjggKChfX3Y0
c2kpX19CLCAoX192NHNpKV9fQSk7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX2NtcGd0
X2VwaTggKF9fdjJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICByZXR1cm4gKF9fdjJkaSlfX2J1aWx0
aW5faWEzMl9wY21wZ3RiMTI4ICgoX192MTZxaSlfX0EsIChfX3YxNnFpKV9fQik7Cn0KCnN0YXRp
YyBfX2lubGluZSBfX3YyZGkKX21tX2NtcGd0X2VwaTE2IChfX3YyZGkgX19BLCBfX3YyZGkgX19C
KQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcGNtcGd0dzEyOCAoKF9fdjhoaSlf
X0EsIChfX3Y4aGkpX19CKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdjJkaQpfbW1fY21wZ3RfZXBp
MzIgKF9fdjJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICByZXR1cm4gKF9fdjJkaSlfX2J1aWx0aW5f
aWEzMl9wY21wZ3RkMTI4ICgoX192NHNpKV9fQSwgKF9fdjRzaSlfX0IpOwp9CgoKCgoKc3RhdGlj
IF9faW5saW5lIF9fdjJkaQpfbW1fbWF4X2VwaTE2IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7
CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcG1heHN3MTI4ICgoX192OGhpKV9fQSwg
KF9fdjhoaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9tYXhfZXB1OCAoX192
MmRpIF9fQSwgX192MmRpIF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3Bt
YXh1YjEyOCAoKF9fdjE2cWkpX19BLCAoX192MTZxaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUg
X192MmRpCl9tbV9taW5fZXBpMTYgKF9fdjJkaSBfX0EsIF9fdjJkaSBfX0IpCnsKICByZXR1cm4g
KF9fdjJkaSlfX2J1aWx0aW5faWEzMl9wbWluc3cxMjggKChfX3Y4aGkpX19BLCAoX192OGhpKV9f
Qik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX21pbl9lcHU4IChfX3YyZGkgX19BLCBf
X3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWlsdGluX2lhMzJfcG1pbnViMTI4ICgo
X192MTZxaSlfX0EsIChfX3YxNnFpKV9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSBpbnQKX21tX21v
dmVtYXNrX2VwaTggKF9fdjJkaSBfX0EpCnsKICByZXR1cm4gX19idWlsdGluX2lhMzJfcG1vdm1z
a2IxMjggKChfX3YxNnFpKV9fQSk7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3YyZGkKX21tX211bGhp
X2VwdTE2IChfX3YyZGkgX19BLCBfX3YyZGkgX19CKQp7CiAgcmV0dXJuIChfX3YyZGkpX19idWls
dGluX2lhMzJfcG11bGh1dzEyOCAoKF9fdjhoaSlfX0EsIChfX3Y4aGkpX19CKTsKfQoKCgoKCnN0
YXRpYyBfX2lubGluZSB2b2lkCl9tbV9tYXNrbW92ZXVfc2kxMjggKF9fdjJkaSBfX0EsIF9fdjJk
aSBfX0IsIGNoYXIgKl9fQykKewogIF9fYnVpbHRpbl9pYTMyX21hc2ttb3ZkcXUgKChfX3YxNnFp
KV9fQSwgKF9fdjE2cWkpX19CLCBfX0MpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9h
dmdfZXB1OCAoX192MmRpIF9fQSwgX192MmRpIF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVp
bHRpbl9pYTMyX3BhdmdiMTI4ICgoX192MTZxaSlfX0EsIChfX3YxNnFpKV9fQik7Cn0KCnN0YXRp
YyBfX2lubGluZSBfX3YyZGkKX21tX2F2Z19lcHUxNiAoX192MmRpIF9fQSwgX192MmRpIF9fQikK
ewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3Bhdmd3MTI4ICgoX192OGhpKV9fQSwg
KF9fdjhoaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9tbV9zYWRfZXB1OCAoX192
MmRpIF9fQSwgX192MmRpIF9fQikKewogIHJldHVybiAoX192MmRpKV9fYnVpbHRpbl9pYTMyX3Bz
YWRidzEyOCAoKF9fdjE2cWkpX19BLCAoX192MTZxaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUg
dm9pZApfbW1fc3RyZWFtX3NpMzIgKGludCAqX19BLCBpbnQgX19CKQp7CiAgX19idWlsdGluX2lh
MzJfbW92bnRpIChfX0EsIF9fQik7Cn0KCnN0YXRpYyBfX2lubGluZSB2b2lkCl9tbV9zdHJlYW1f
c2kxMjggKF9fdjJkaSAqX19BLCBfX3YyZGkgX19CKQp7CiAgX19idWlsdGluX2lhMzJfbW92bnRk
cSAoKF9fdjJkaSAqKV9fQSwgKF9fdjJkaSlfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgdm9pZApf
bW1fc3RyZWFtX3BkIChkb3VibGUgKl9fQSwgX192MmRmIF9fQikKewogIF9fYnVpbHRpbl9pYTMy
X21vdm50cGQgKF9fQSwgKF9fdjJkZilfX0IpOwp9CgpzdGF0aWMgX19pbmxpbmUgX192MmRpCl9t
bV9tb3ZwaTY0X2VwaTY0IChfX202NCBfX0EpCnsKICByZXR1cm4gKF9fdjJkaSlfX2J1aWx0aW5f
aWEzMl9tb3ZxMmRxICgodW5zaWduZWQgbG9uZyBsb25nKV9fQSk7Cn0KCnN0YXRpYyBfX2lubGlu
ZSB2b2lkCl9tbV9jbGZsdXNoICh2b2lkIGNvbnN0ICpfX0EpCnsKICByZXR1cm4gX19idWlsdGlu
X2lhMzJfY2xmbHVzaCAoX19BKTsKfQoKc3RhdGljIF9faW5saW5lIHZvaWQKX21tX2xmZW5jZSAo
dm9pZCkKewogIF9fYnVpbHRpbl9pYTMyX2xmZW5jZSAoKTsKfQoKc3RhdGljIF9faW5saW5lIHZv
aWQKX21tX21mZW5jZSAodm9pZCkKewogIF9fYnVpbHRpbl9pYTMyX21mZW5jZSAoKTsKfQoKc3Rh
dGljIF9faW5saW5lIF9fdjJkaQpfbW1fY3Z0c2kzMl9zaTEyOCAoaW50IF9fQSkKewogIHJldHVy
biAoX192MmRpKSBfX2J1aWx0aW5faWEzMl9sb2FkZCAoJl9fQSk7Cn0KCnN0YXRpYyBfX2lubGlu
ZSBpbnQKX21tX2N2dHNpMTI4X3NpMzIgKF9fdjJkaSBfX0EpCnsKICBpbnQgX190bXA7CiAgX19i
dWlsdGluX2lhMzJfc3RvcmVkICgmX190bXAsIChfX3Y0c2kpX19BKTsKICByZXR1cm4gX190bXA7
Cn0KIyAyICJ0ZXN0LmMiIDIKCnR5cGVkZWYgdW5pb24gewpfX3YyZGkgdjsKaW50IGlbNF07Cn0g
aXZlY3RvcjsKCgp2b2lkIHByaW50dmVjKF9fdjJkaSB6KQp7CiAgICBpdmVjdG9yIHE7CiAgICBx
LnY9ejsKCiAgICBwcmludGYoIiVkICAlZCAgJWQgICVkXG4iLHEuaVswXSxxLmlbMV0scS5pWzJd
LHEuaVszXSk7Cn0KCmludCBtYWluKHZvaWQpCnsKX192MmRpIHhtbTM7Cl9fdjJkaSB4bW01Owpf
X3YyZGkgeG1tNzsKX192MmRpIHZfbG93c2NvcmU7CmludCAqIG1zY2k7CgogICAgICAgICAgICB4
bW0zID0gX21tX2xvYWRfc2kxMjgoKF9fdjJkaSAqKSBtc2NpKTsKICAgICAgICAgICAgeG1tNyA9
IF9tbV9hZGRfZXBpMzIoeG1tNywgeG1tMyk7CiAgICAgICAgICAgIHhtbTUgPSBfbW1fbG9hZF9z
aTEyOCgoX192MmRpICopICZ2X2xvd3Njb3JlKTsKICAgICAgICAgICAgeG1tMyA9IF9tbV9jbXBl
cV9lcGkzMih4bW0zLCB4bW01KTsKICAgICAgICAgICAgeG1tNSA9IF9tbV9hbmRfc2kxMjgoeG1t
NSwgeG1tMyk7CiAgICAgICAgICAgIHhtbTMgPSBfbW1fYW5kbm90X3NpMTI4KHhtbTMsIHhtbTcp
OwogICAgICAgICAgICB4bW01ID0gX21tX29yX3NpMTI4KHhtbTUsIHhtbTMpOwogICAgICAgICAg
ICBwcmludHZlYyh4bW0zKTsgcHJpbnR2ZWMoeG1tNSk7IHByaW50dmVjKHhtbTcpOwp9Cg==


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