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++/7472: gcc 3.1.1 has problems with STL slist


>Number:         7472
>Category:       c++
>Synopsis:       gcc 3.1.1 has problems with STL slist
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          rejects-legal
>Submitter-Id:   net
>Arrival-Date:   Fri Aug 02 08:36:01 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Steffen Goerzig
>Release:        gcc version 3.1.1
>Organization:
>Environment:
Linux version 2.4.18-4GB (root@Pentium.suse.de)
Configured with: ../gcc-3.1.1/configure --prefix=/home/goerzig/gcc-3.1.1 
Thread model: single 
>Description:
main.cpp:2: `slist' not declared 
main.cpp: In function `int main()': 
main.cpp:5: `slist' undeclared (first use this function) 
main.cpp:5: (Each undeclared identifier is reported only once for each function  
   it appears in.) 
main.cpp:5: parse error before `>' token 
>How-To-Repeat:
#include <slist>
using std::slist;
int main(void)
{
  slist<int> s;
  return 1;
}

>Fix:

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

IyAxICJtYWluLmNwcCIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21tYW5kIGxpbmU+IgojIDEg
Im1haW4uY3BwIgojIDEgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4x
L2V4dC9zbGlzdCIgMQojIDUzICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8z
LjEuMS9leHQvc2xpc3QiCiMgMSAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysv
My4xLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgNjQgIi9ob21lL2dvZXJ6aWcvZ2NjLTMu
MS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKIyAxICIvaG9tZS9n
b2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9pNjg2LXBjLWxpbnV4LWdudS9iaXRz
L2MrK2NvbmZpZy5oIiAxIDMKIyAzNCAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9j
KysvMy4xLjEvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMwojIDEgIi9ob21l
L2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2k2ODYtcGMtbGludXgtZ251L2Jp
dHMvb3NfZGVmaW5lcy5oIiAxIDMKIyAzOSAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVk
ZS9jKysvMy4xLjEvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjgzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiMgMjg0ICIvdXNyL2luY2x1
ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzEyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzCiMgMzEzICIvdXNyL2luY2x1ZGUvZmVhdHVy
ZXMuaCIgMiAzCiMgNDAgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4x
L2k2ODYtcGMtbGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5oIiAyIDMKIyAzNSAiL2hvbWUvZ29l
cnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9j
Kytjb25maWcuaCIgMiAzCiMgNjUgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysr
LzMuMS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9ob21lL2dvZXJ6aWcvZ2NjLTMu
MS4xL2luY2x1ZGUvYysrLzMuMS4xL2NzdHJpbmciIDEgMwojIDQ4ICIvaG9tZS9nb2VyemlnL2dj
Yy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9jc3RyaW5nIiAzCgojIDEgIi9ob21lL2dvZXJ6aWcv
Z2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2NzdGRkZWYiIDEgMwojIDQ3ICIvaG9tZS9nb2Vy
emlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9jc3RkZGVmIiAzCgojIDEgIi9ob21lL2dv
ZXJ6aWcvZ2NjLTMuMS4xL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1
ZGUvc3RkZGVmLmgiIDEgMwojIDE0NyAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIGlu
dCBwdHJkaWZmX3Q7CiMgMjAxICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWdu
ZWQgaW50IHNpemVfdDsKIyA0OSAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysv
My4xLjEvY3N0ZGRlZiIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OnB0cmRpZmZfdDsK
ICB1c2luZyA6OnNpemVfdDsKfQojIDUwICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRl
L2MrKy8zLjEuMS9jc3RyaW5nIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMK
IyAyOCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiAiQyIgewoKCgoKIyAxICIvaG9t
ZS9nb2VyemlnL2djYy0zLjEuMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoK
ZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhy
b3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lk
ICpfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqbWVt
Y2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBf
X3NyYywKICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhy
b3cgKCk7CgoKCgpleHRlcm4gdm9pZCAqbWVtc2V0ICh2b2lkICpfX3MsIGludCBfX2MsIHNpemVf
dCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEs
IF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9f
cywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
cHVyZV9fKSk7CgoKCgpleHRlcm4gdm9pZCAqcmF3bWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywg
aW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZv
aWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpz
dHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0
cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNo
YXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAg
ICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rl
c3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIg
Kl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2Nv
bnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f
Y29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3Qg
X19uKSB0aHJvdyAoKTsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDI4
ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAzCnR5cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVj
dAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVzWzEzXTsKCgogIGNvbnN0IHVuc2ln
bmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGludCAqX19jdHlwZV90b2xvd2VyOwog
IGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwp9ICpfX2xvY2FsZV90OwojIDEwOSAiL3Vzci9p
bmNsdWRlL3N0cmluZy5oIiAyIDMKCgpleHRlcm4gaW50IF9fc3RyY29sbF9sIChfX2NvbnN0IGNo
YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2wpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IF9fc3RyeGZybV9s
IChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBj
aGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19tYWxsb2NfXykpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAoX19jb25zdCBjaGFyICpf
X3N0cmluZywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxs
b2NfXykpOwojIDE1NSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJj
aHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50
IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hh
ciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3Qg
Y2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIg
Kl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJwYnJrIChfX2NvbnN0IGNoYXIgKl9fcywg
X19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywg
X19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmNhc2VzdHIgKF9fY29uc3QgY2hhciAqX19oYXlz
dGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cnRvayAoY2hhciAqX19yZXN0cmljdCBf
X3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKQogICAgIHRocm93ICgpOwoKCgpl
eHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoK
ZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkICptZW1tZW0gKF9f
Y29uc3Qgdm9pZCAqX19oYXlzdGFjaywgc2l6ZV90IF9faGF5c3RhY2tsZW4sCiAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19uZWVkbGUsIHNpemVfdCBfX25lZWRsZWxlbikKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHZvaWQgKl9f
bWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4
dGVybiB2b2lkICptZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhy
b3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJubGVu
IChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGlu
dCBfX2Vycm51bSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19l
cnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJu
IHZvaWQgX19iemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVzdCwgc2l6ZV90IF9f
bikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qg
dm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCgpleHRlcm4gY2hhciAqaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19j
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqcmlu
ZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgZmZzIChpbnQgX19pKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGZmc2wgKGxvbmcgaW50IF9fbCkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRl
cm4gaW50IGZmc2xsIChsb25nIGxvbmcgaW50IF9fbGwpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBzdHJjYXNlY21wIChfX2NvbnN0IGNo
YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9f
czEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gaW50IF9fc3RyY2FzZWNtcF9sIChfX2Nv
bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgpleHRlcm4gaW50IF9fc3RybmNhc2VjbXBfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2Nv
bnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBf
X2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwK
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f
Y29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsIChpbnQgX19zaWcpIHRocm93ICgpOwoKCmV4dGVy
biBjaGFyICpfX3N0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hh
ciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAg
ICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBf
X2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHBuY3B5IChjaGFyICpf
X3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cmZy
eSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1mcm9iICh2b2lk
ICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqYmFzZW5hbWUg
KF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CiMgMzY0ICIvdXNyL2luY2x1ZGUv
c3RyaW5nLmgiIDMKfQojIDUyICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8z
LjEuMS9jc3RyaW5nIiAyIDMKIyA3NyAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9j
KysvMy4xLjEvY3N0cmluZyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1lbWNweTsKICB1
c2luZyA6Om1lbW1vdmU7CiAgdXNpbmcgOjpzdHJjcHk7CiAgdXNpbmcgOjpzdHJuY3B5OwogIHVz
aW5nIDo6c3RyY2F0OwogIHVzaW5nIDo6c3RybmNhdDsKICB1c2luZyA6Om1lbWNtcDsKICB1c2lu
ZyA6OnN0cmNtcDsKICB1c2luZyA6OnN0cmNvbGw7CiAgdXNpbmcgOjpzdHJuY21wOwogIHVzaW5n
IDo6c3RyeGZybTsKICB1c2luZyA6OnN0cmNzcG47CiAgdXNpbmcgOjpzdHJzcG47CiAgdXNpbmcg
OjpzdHJ0b2s7CiAgdXNpbmcgOjptZW1zZXQ7CiAgdXNpbmcgOjpzdHJlcnJvcjsKICB1c2luZyA6
OnN0cmxlbjsKCiAgdXNpbmcgOjptZW1jaHI7CgogIGlubGluZSB2b2lkKgogIG1lbWNocih2b2lk
KiBfX3AsIGludCBfX2MsIHNpemVfdCBfX24pCiAgeyByZXR1cm4gbWVtY2hyKGNvbnN0X2Nhc3Q8
Y29uc3Qgdm9pZCo+KF9fcCksIF9fYywgX19uKTsgfQoKICB1c2luZyA6OnN0cmNocjsKCiAgaW5s
aW5lIGNoYXIqCiAgc3RyY2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWls
dGluX3N0cmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2lu
ZyA6OnN0cnBicms7CgogIGlubGluZSBjaGFyKgogIHN0cnBicmsoY2hhciogX19zMSwgY29uc3Qg
Y2hhciogX19zMikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RycGJyayhjb25zdF9jYXN0PGNvbnN0
IGNoYXIqPihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjpzdHJyY2hyOwoKICBpbmxpbmUgY2hh
cioKICBzdHJyY2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0
cnJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpz
dHJzdHI7CgogIGlubGluZSBjaGFyKgogIHN0cnN0cihjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBf
X3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJzdHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4o
X19zMSksIF9fczIpOyB9Cn0KIyA2NiAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9j
KysvMy4xLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL2hvbWUvZ29lcnppZy9nY2Mt
My4xLjEvaW5jbHVkZS9jKysvMy4xLjEvY2xpbWl0cyIgMSAzCiMgNDggIi9ob21lL2dvZXJ6aWcv
Z2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2NsaW1pdHMiIDMKCiMgMSAiL2hvbWUvZ29lcnpp
Zy9nY2MtMy4xLjEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9s
aW1pdHMuaCIgMSAzCiMgMTEgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvaG9tZS9nb2Vy
emlnL2djYy0zLjEuMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRl
L3N5c2xpbWl0cy5oIiAxIDMKCgoKCgoKIyAxICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAx
MzIgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuMS4xL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEg
MwojIDE0NCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
cG9zaXgxX2xpbS5oIiAxIDMKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAzNiAiL3Vzci9pbmNs
dWRlL2JpdHMvbG9jYWxfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvbGltaXRzLmgi
IDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzCiMgMTI3ICIvdXNy
L2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMwojIDE0NSAiL3Vzci9pbmNsdWRlL2xpbWl0
cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJfbGltLmgiIDEgMwojIDE0
OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy94
b3Blbl9saW0uaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUv
Yml0cy94b3Blbl9saW0uaCIgMiAzCiMgMTM2ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0u
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDEzNyAiL3Vzci9p
bmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDIgMwojIDE1MyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5o
IiAyIDMKIyAxMzMgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMS4xL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDggIi9ob21lL2dvZXJ6aWcv
Z2NjLTMuMS4xL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3lz
bGltaXRzLmgiIDIgMwojIDEyICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA1MCAiL2hvbWUv
Z29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvY2xpbWl0cyIgMiAzCiMgNjcgIi9o
b21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ29iYXNl
LmgiIDIgMwojIDEgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2Nz
dGRsaWIiIDEgMwojIDQ4ICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEu
MS9jc3RkbGliIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzCiMgMzMgIi91
c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvd2FpdGZsYWdzLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0dXMuaCIgMSAzCiMgNjMgIi91
c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0dXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4u
aCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL2VuZGlhbi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMKIyA2NCAi
L3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAyIDMKCnVuaW9uIHdhaXQKICB7CiAgICBp
bnQgd19zdGF0dXM7CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193
X3Rlcm1zaWc6NzsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X2NvcmVkdW1wOjE7CiAgICAgICAg
dW5zaWduZWQgaW50IF9fd19yZXRjb2RlOjg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoK
CgoKICAgICAgfSBfX3dhaXRfdGVybWluYXRlZDsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAg
IHVuc2lnbmVkIGludCBfX3dfc3RvcHZhbDo4OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3Rv
cHNpZzo4OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKICAgICAgfSBfX3dhaXRfc3Rv
cHBlZDsKICB9OwojIDQ0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDk0ICIvdXNyL2lu
Y2x1ZGUvc3RkbGliLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGlu
dCByZW07CiAgfSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90
OwogICAgbG9uZyBpbnQgcmVtOwogIH0gbGRpdl90OwoKCgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRl
ZiBzdHJ1Y3QKICB7CiAgICBsb25nIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGxvbmcgaW50IHJl
bTsKICB9IGxsZGl2X3Q7CiMgMTMzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNp
emVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRv
dWJsZSBhdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBsb25nIGludCBhdG9sIChf
X2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hh
ciAqX19ucHRyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpl
eHRlcm4gZG91YmxlIHN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGZsb2F0IHN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgp
OwoKZXh0ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25n
IGludCBzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf
X2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBp
bnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0
aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3Ry
dG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jh
c2UpCiAgICAgdGhyb3cgKCk7CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBp
bnQgc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2Up
IHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBz
dHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQg
X19iYXNlKQogICAgIHRocm93ICgpOwojIDIxNSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4
dGVybiBsb25nIGludCBfX3N0cnRvbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9j
KSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfbCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsK
Cl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2wgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNp
b25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2wgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykK
ICAgICB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfbCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0
cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBm
bG9hdCBfX3N0cnRvZl9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3Qg
X19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIF9fc3Ry
dG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9f
Z3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cg
KCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0
b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRo
cm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2ludGVybmFsIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3Jv
dXApIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0
cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwg
aW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBs
b25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cg
KCk7CiMgMzg0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxv
bmcgaW50IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29uc3QgY2hh
ciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgojIDEgIi91c3Iv
aW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg
MwpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjkg
Ii91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAxICIvaG9tZS9nb2VyemlnL2djYy0zLjEu
MS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAx
IDMKIyAzMCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiB1bnNpZ25l
ZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25nOwoK
X19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsK
X19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CiMgNDkgIi91c3Iv
aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlw
ZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9f
aW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBz
aWduZWQgaW50IF9faW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCl9f
ZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0
ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0eXBl
ZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsKdHlw
ZWRlZiBfX3VfaW50IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVmIF9f
dV9sb25nIF9faW5vX3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3VfaW50
IF9fbmxpbmtfdDsKdHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90IF9f
bG9mZl90Owp0eXBlZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5cGVk
ZWYgX191X2xvbmcgX19ybGltX3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX3JsaW02NF90Owp0eXBl
ZGVmIF9fdV9pbnQgX19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07
CiAgfSBfX2ZzaWRfdDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqX19j
YWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBf
X3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBsb25n
IGludCBfX3N3YmxrX3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCgp0eXBlZGVmIGlu
dCBfX2Nsb2NraWRfdDsKCgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoKCgoKCnR5cGVkZWYgaW50
IF9fa2V5X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKCnR5
cGVkZWYgbG9uZyBpbnQgX19ibGtzaXplX3Q7CgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrY250
X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19m
c2Jsa2NudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBf
X3VfbG9uZyBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRfdDsK
Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19pbm82NF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgX19vZmY2
NF90OwoKCnR5cGVkZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgaW50IF9fdF91c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBlZGVm
IHVuc2lnbmVkIGludCBfX3NvY2tsZW5fdDsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRo
cmVhZHR5cGVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1ZGUv
Yml0cy9zY2hlZC5oIiAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRf
cHJpb3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDIg
MwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAgaW50
IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3Qg
Kl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MKewog
IGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3NjaGVk
X3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2NvcGU7
CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAqX19z
dGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0eXBl
ZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9wdGhy
ZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0cnVj
dAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5zaWdu
ZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21fcmVz
ZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAgaW50
IF9fbV9raW5kOwogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhyZWFk
X211dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRocmVh
ZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKCgp0eXBlZGVm
IHN0cnVjdCBfcHRocmVhZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9f
cndfbG9jazsKICBpbnQgX19yd19yZWFkZXJzOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVy
OwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfcmVhZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2NyIF9f
cndfd3JpdGVfd2FpdGluZzsKICBpbnQgX19yd19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7Cn0g
cHRocmVhZF9yd2xvY2tfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2xvY2traW5kOwog
IGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVmIHZvbGF0
aWxlIGludCBwdGhyZWFkX3NwaW5sb2NrX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIHN0cnVjdCBf
cHRocmVhZF9mYXN0bG9jayBfX2JhX2xvY2s7CiAgaW50IF9fYmFfcmVxdWlyZWQ7CiAgaW50IF9f
YmFfcHJlc2VudDsKICBfcHRocmVhZF9kZXNjciBfX2JhX3dhaXRpbmc7Cn0gcHRocmVhZF9iYXJy
aWVyX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9iYXJy
aWVyYXR0cl90OwoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcHRocmVhZF90OwojIDE0
NCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMv
dHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0eXBlZGVmIF9fdV9zaG9y
dCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYgX191X2xvbmcgdV9sb25n
Owp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IHVfcXVhZF90Owp0
eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgoKCnR5cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgp0
eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5cGVkZWYgX19pbm82NF90IGlubzY0X3Q7CgoK
Cgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0
eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7CgoK
Cgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRlZiBfX29mZl90IG9mZl90OwoKCgoK
Cgp0eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwoKCgoKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoK
CgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7CgoK
CgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsK
CgoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTMyICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyA1OSAiL3Vzci9pbmNsdWRlL3Rp
bWUuaCIgMwp0eXBlZGVmIF9fY2xvY2tfdCBjbG9ja190OwojIDcwICIvdXNyL2luY2x1ZGUvdGlt
ZS5oIiAzCnR5cGVkZWYgX190aW1lX3QgdGltZV90OwojIDgyICIvdXNyL2luY2x1ZGUvdGltZS5o
IiAzCnR5cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OwojIDk0ICIvdXNyL2luY2x1ZGUvdGlt
ZS5oIiAzCnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CiMgMTMzICIvdXNyL2luY2x1ZGUvc3lz
L3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIF9fdXNlY29uZHNfdCB1c2Vjb25kc190OwoKCgp0eXBl
ZGVmIF9fc3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7CgoKCgoKIyAxICIvaG9tZS9nb2VyemlnL2dj
Yy0zLjEuMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGRl
Zi5oIiAxIDMKIyAxNDcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYg
dW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9y
dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxOTAgIi91c3IvaW5jbHVkZS9zeXMvdHlw
ZXMuaCIgMwp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJ
X18pKSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJ
X18pKSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJ
X18pKSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJ
X18pKSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9f
bW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJp
YnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQz
Ml90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVk
IGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBl
ZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7
CiMgMjE1ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lz
L3NlbGVjdC5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxl
Y3QuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiMgMjMgIi91
c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzCnR5cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoK
CgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAv
ICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKV07CiAgfSBfX3NpZ3NldF90OwojIDM1
ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgoKdHlwZWRlZiBfX3NpZ3NldF90IHNp
Z3NldF90OwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMTA2ICIvdXNyL2lu
Y2x1ZGUvdGltZS5oIiAzCnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIF9fdGltZV90IHR2X3NlYzsK
ICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsKIyA0NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3Qu
aCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMgNjcgIi91c3IvaW5j
bHVkZS9iaXRzL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXZhbAogIHsKICAgIF9fdGltZV90IHR2X3Nl
YzsKICAgIF9fc3VzZWNvbmRzX3QgdHZfdXNlYzsKICB9OwojIDQ3ICIvdXNyL2luY2x1ZGUvc3lz
L3NlbGVjdC5oIiAyIDMKIyA1NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwp0eXBlZGVm
IGxvbmcgaW50IF9fZmRfbWFzazsKCgoKCgoKCnR5cGVkZWYgc3RydWN0CiAgewoKCgogICAgX19m
ZF9tYXNrIGZkc19iaXRzWzEwMjQgLyAoOCAqIHNpemVvZiAoX19mZF9tYXNrKSldOwoKCgoKCiAg
fSBmZF9zZXQ7CgoKCgoKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CiMgOTUgIi91c3IvaW5j
bHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuICJDIiB7CgoKCgoKCmV4dGVybiBpbnQgc2VsZWN0
IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAg
ICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAgICAgICAgICBm
ZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
dGltZXZhbCAqX19yZXN0cmljdCBfX3RpbWVvdXQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQg
cHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAg
ICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAgICAgICAg
ICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCiAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0IF9fdGltZW91dCwKICAgICAgICAg
ICAgICAgICAgICBjb25zdCBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fc2lnbWFzaykgdGhyb3cg
KCk7CgoKfQojIDIxNiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3Iv
aW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwojIDIxOSAiL3Vzci9pbmNsdWRlL3N5cy90eXBl
cy5oIiAyIDMKCgoKCnR5cGVkZWYgX19ibGtzaXplX3QgYmxrc2l6ZV90OwoKCgoKCgp0eXBlZGVm
IF9fYmxrY250X3QgYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7
CgoKCnR5cGVkZWYgX19mc2ZpbGNudF90IGZzZmlsY250X3Q7CiMgMjU3ICIvdXNyL2luY2x1ZGUv
c3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX2Jsa2NudDY0X3QgYmxrY250NjRfdDsKdHlwZWRlZiBf
X2ZzYmxrY250NjRfdCBmc2Jsa2NudDY0X3Q7CnR5cGVkZWYgX19mc2ZpbGNudDY0X3QgZnNmaWxj
bnQ2NF90OwoKCn0KIyAzOTEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgoKCmV4dGVy
biBsb25nIGludCByYW5kb20gKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kb20g
KHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICppbml0c3Rh
dGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCiAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnNl
dHN0YXRlIChjaGFyICpfX3N0YXRlYnVmKSB0aHJvdyAoKTsKCgoKCgoKCnN0cnVjdCByYW5kb21f
ZGF0YQogIHsKICAgIGludDMyX3QgKmZwdHI7CiAgICBpbnQzMl90ICpycHRyOwogICAgaW50MzJf
dCAqc3RhdGU7CiAgICBpbnQgcmFuZF90eXBlOwogICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJh
bmRfc2VwOwogICAgaW50MzJfdCAqZW5kX3B0cjsKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAo
c3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAg
ICBpbnQzMl90ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3Jh
bmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSB0
aHJvdyAoKTsKCmV4dGVybiBpbnQgaW5pdHN0YXRlX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNo
YXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IF9fc3RhdGVsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAq
X19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNldHN0YXRlX3IgKGNoYXIg
Kl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFu
ZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcmFu
ZCAodm9pZCkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWduZWQgaW50IF9fc2Vl
ZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcmFuZF9yICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkg
dGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIHRocm93ICgpOwpl
eHRlcm4gZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJv
dyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBs
b25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBp
bnQganJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4
dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkgdGhyb3cgKCk7CmV4dGVybiB1
bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlsz
XSkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIGxjb25nNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3Bh
cmFtWzddKSB0aHJvdyAoKTsKCgoKCgpzdHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWdu
ZWQgc2hvcnQgaW50IF9feFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX29sZF94WzNdOwog
ICAgdW5zaWduZWQgc2hvcnQgaW50IF9fYzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2luaXQ7
CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fYTsKICB9OwoKCmV4dGVybiBpbnQgZHJhbmQ0
OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAg
ICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAg
ICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBscmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3Qg
X19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jl
c3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQg
X194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f
cmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0
cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBk
cmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBs
b25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQganJhbmQ0
OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAg
ICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAq
X19idWZmZXIpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBz
aG9ydCBpbnQgX19zZWVkMTZ2WzNdLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0
OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGxjb25nNDhfciAodW5zaWdu
ZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJh
bmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CiMgNTI3ICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDMKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkICpjYWxsb2MgKHNpemVfdCBfX25t
ZW1iLCBzaXplX3QgX19zaXplKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxv
Y19fKSk7CgoKCgoKZXh0ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19z
aXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQg
ZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAq
X19wdHIpIHRocm93ICgpOwoKCgojIDEgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAzCiMgMjUg
Ii91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMwojIDEgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoj
IDI2ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJu
IHZvaWQgKmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKfQojIDU0NyAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBf
X3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4g
aW50IHBvc2l4X21lbWFsaWduICh2b2lkICoqX19tZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwg
c2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykp
OwoKCgpleHRlcm4gdm9pZCBhYm9ydCAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
bm9yZXR1cm5fXykpOwoKCgpleHRlcm4gaW50IGF0ZXhpdCAodm9pZCAoKl9fZnVuYykgKHZvaWQp
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBf
X3N0YXR1cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAgICB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiB2b2lkIF9FeGl0IChpbnQgX19zdGF0dXMpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiBjaGFyICpnZXRl
bnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc2Vj
dXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBp
bnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzZXRl
bnYgKF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX3Jl
cGxhY2UpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB1bnNldGVudiAoX19jb25zdCBjaGFy
ICpfX25hbWUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGNsZWFyZW52ICh2b2lkKSB0aHJv
dyAoKTsKIyA2MjMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWt0ZW1w
IChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAo
Y2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjQwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi
IDMKZXh0ZXJuIGludCBta3N0ZW1wNjQgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY1
MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta2R0ZW1wIChjaGFyICpf
X3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0IGNoYXIg
Kl9fY29tbWFuZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpjYW5vbmljYWxpemVfZmls
ZV9uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CiMgNjcyICIvdXNyL2luY2x1
ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19y
ZXNvbHZlZCkgdGhyb3cgKCk7CgoKCgoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKF9f
Y29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CgoKdHlwZWRlZiBfX2NvbXBhcl9mbl90IGNv
bXBhcmlzb25fZm5fdDsKCgoKCgpleHRlcm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpf
X2tleSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
X19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVy
biB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXpl
LAogICAgICAgICAgICAgICAgICAgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBp
bnQgYWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4
dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxhYnMg
KGxvbmcgbG9uZyBpbnQgX194KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGludCBfX2Rlbm9tKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBs
ZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxsZGl2X3Qg
bGxkaXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbG9uZyBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKIyA3MjggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4g
Y2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0
IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0
LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0
cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBfX3Zh
bHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFy
ICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAg
ICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0
aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u
ZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAq
X19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91
YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0
cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwg
Y2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikg
dGhyb3cgKCk7CmV4dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0
LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0
cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBz
aXplX3QgX19sZW4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25nIGRvdWJsZSBf
X3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0
IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hh
ciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBx
ZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAg
ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAg
ICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0
aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBtYmxlbiAoX19jb25zdCBjaGFyICpfX3MsIHNpemVf
dCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fcHdjLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywg
c2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3RvbWIgKGNoYXIgKl9fcywgd2No
YXJfdCBfX3djaGFyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAod2NoYXJf
dCAqX19yZXN0cmljdCBfX3B3Y3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCB3
Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg
KCk7CgoKCgoKCgpleHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3QgY2hhciAqX19yZXNwb25zZSkg
dGhyb3cgKCk7CiMgODA4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBnZXRz
dWJvcHQgKGNoYXIgKipfX3Jlc3RyaWN0IF9fb3B0aW9ucCwKICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKl9fY29uc3QgKl9fcmVzdHJpY3QgX190b2tlbnMsCiAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICoqX19yZXN0cmljdCBfX3ZhbHVlcCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQg
c2V0a2V5IChfX2NvbnN0IGNoYXIgKl9fa2V5KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQg
cG9zaXhfb3BlbnB0IChpbnQgX19vZmxhZykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGdy
YW50cHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmxvY2twdCAoaW50IF9f
ZmQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnB0c25hbWUgKGludCBfX2ZkKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIGludCBwdHNuYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6
ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldHB0ICh2b2lkKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIGludCBnZXRsb2FkYXZnIChkb3VibGUgX19sb2FkYXZnW10sIGludCBf
X25lbGVtKSB0aHJvdyAoKTsKCgoKCgp9CiMgNTMgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2lu
Y2x1ZGUvYysrLzMuMS4xL2NzdGRsaWIiIDIgMwojIDg0ICIvaG9tZS9nb2VyemlnL2djYy0zLjEu
MS9pbmNsdWRlL2MrKy8zLjEuMS9jc3RkbGliIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6
ZGl2X3Q7CiAgdXNpbmcgOjpsZGl2X3Q7CgogIHVzaW5nIDo6YWJvcnQ7CiAgdXNpbmcgOjphYnM7
CiAgdXNpbmcgOjphdGV4aXQ7CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6YXRvaTsKICB1c2lu
ZyA6OmF0b2w7CiAgdXNpbmcgOjpic2VhcmNoOwogIHVzaW5nIDo6Y2FsbG9jOwogIHVzaW5nIDo6
ZGl2OwogIHVzaW5nIDo6ZXhpdDsKICB1c2luZyA6OmZyZWU7CiAgdXNpbmcgOjpnZXRlbnY7CiAg
dXNpbmcgOjpsYWJzOwogIHVzaW5nIDo6bGRpdjsKICB1c2luZyA6Om1hbGxvYzsKICB1c2luZyA6
Om1ibGVuOwogIHVzaW5nIDo6bWJzdG93Y3M7CiAgdXNpbmcgOjptYnRvd2M7CiAgdXNpbmcgOjpx
c29ydDsKICB1c2luZyA6OnJhbmQ7CiAgdXNpbmcgOjpyZWFsbG9jOwogIHVzaW5nIDo6c3JhbmQ7
CiAgdXNpbmcgOjpzdHJ0b2Q7CiAgdXNpbmcgOjpzdHJ0b2w7CiAgdXNpbmcgOjpzdHJ0b3VsOwog
IHVzaW5nIDo6c3lzdGVtOwogIHVzaW5nIDo6d2NzdG9tYnM7CiAgdXNpbmcgOjp3Y3RvbWI7Cgog
IGlubGluZSBsb25nCiAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9faSk7IH0KCiAgaW5s
aW5lIGxkaXZfdAogIGRpdihsb25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJuIGxkaXYoX19pLCBf
X2opOyB9Cn0KIyAxMzYgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4x
L2NzdGRsaWIiIDMKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjpsbGRpdl90OwogIHVz
aW5nIDo6X0V4aXQ7CgogIGlubGluZSBsb25nIGxvbmcKICBhYnMobG9uZyBsb25nIF9feCkgeyBy
ZXR1cm4gX194ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsb25nIGxvbmcKICBsbGFi
cyhsb25nIGxvbmcgX194KSB7IHJldHVybiBfX3ggPj0gMCA/IF9feCA6IC1fX3g7IH0KCiAgaW5s
aW5lIGxsZGl2X3QKICBkaXYobG9uZyBsb25nIF9fbiwgbG9uZyBsb25nIF9fZCkKICB7IGxsZGl2
X3QgX19xOyBfX3EucXVvdCA9IF9fbiAvIF9fZDsgX19xLnJlbSA9IF9fbiAlIF9fZDsgcmV0dXJu
IF9fcTsgfQoKICBpbmxpbmUgbGxkaXZfdAogIGxsZGl2KGxvbmcgbG9uZyBfX24sIGxvbmcgbG9u
ZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5yZW0gPSBf
X24gJSBfX2Q7IHJldHVybiBfX3E7IH0KCiAgdXNpbmcgOjphdG9sbDsKICB1c2luZyA6OnN0cnRv
ZjsKICB1c2luZyA6OnN0cnRvbGw7CiAgdXNpbmcgOjpzdHJ0b3VsbDsKICB1c2luZyA6OnN0cnRv
bGQ7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6bGxkaXZfdDsKICB1c2lu
ZyBfX2dudV9jeHg6Ol9FeGl0OwogIHVzaW5nIF9fZ251X2N4eDo6YWJzOwogIHVzaW5nIF9fZ251
X2N4eDo6bGxhYnM7CiAgdXNpbmcgX19nbnVfY3h4OjpkaXY7CiAgdXNpbmcgX19nbnVfY3h4Ojps
bGRpdjsKICB1c2luZyBfX2dudV9jeHg6OmF0b2xsOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9m
OwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9sbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvdWxs
OwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9sZDsKfQojIDY4ICIvaG9tZS9nb2VyemlnL2djYy0z
LjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL2hv
bWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvbmV3IiAxIDMKIyA0MiAiL2hv
bWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvbmV3IiAzCiMgMSAiL2hvbWUv
Z29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvZXhjZXB0aW9uIiAxIDMKIyA0MCAi
L2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvZXhjZXB0aW9uIiAzCmV4
dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICBjbGFzcyBleGNlcHRpb24KICB7
CiAgcHVibGljOgogICAgZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmV4Y2Vw
dGlvbigpIHRocm93KCk7CgoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRo
cm93KCk7CiAgfTsKCgoKICBjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbgog
IHsKICBwdWJsaWM6CiAgICBiYWRfZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVh
bCB+YmFkX2V4Y2VwdGlvbigpIHRocm93KCk7CiAgfTsKCgogIHR5cGVkZWYgdm9pZCAoKnRlcm1p
bmF0ZV9oYW5kbGVyKSAoKTsKCiAgdHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAo
KTsKCgogIHRlcm1pbmF0ZV9oYW5kbGVyIHNldF90ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIp
IHRocm93KCk7CgoKICB2b2lkIHRlcm1pbmF0ZSgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJu
X18pKTsKCgogIHVuZXhwZWN0ZWRfaGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hh
bmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHVuZXhwZWN0ZWQoKSBfX2F0dHJpYnV0ZV9fICgoX19u
b3JldHVybl9fKSk7CiMgOTggIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMu
MS4xL2V4Y2VwdGlvbiIgMwogIGJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uKCkgdGhyb3coKTsKfQoK
bmFtZXNwYWNlIF9fZ251X2N4eAp7CiMgMTExICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNs
dWRlL2MrKy8zLjEuMS9leGNlcHRpb24iIDMKICB2b2lkIF9fdmVyYm9zZV90ZXJtaW5hdGVfaGFu
ZGxlciAoKTsKfQoKfQojIDQzICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8z
LjEuMS9uZXciIDIgMwoKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCiAgY2xhc3Mg
YmFkX2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfYWxsb2Mo
KSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOwogIH07Cgog
IHN0cnVjdCBub3Rocm93X3QgeyB9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsK
CgogIHR5cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgpOwoKICBuZXdfaGFuZGxlciBzZXRfbmV3
X2hhbmRsZXIobmV3X2hhbmRsZXIpIHRocm93KCk7Cn0KIyA3OSAiL2hvbWUvZ29lcnppZy9nY2Mt
My4xLjEvaW5jbHVkZS9jKysvMy4xLjEvbmV3IiAzCnZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNp
emVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpz
aXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQq
KSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqKSB0aHJvdygpOwp2b2lkKiBv
cGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsK
dm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190Jikg
dGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190
JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiwgY29uc3Qgc3RkOjpub3Ro
cm93X3QmKSB0aHJvdygpOwoKCmlubGluZSB2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3Qs
IHZvaWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7IH0KaW5saW5lIHZvaWQqIG9wZXJhdG9y
IG5ld1tdKHN0ZDo6c2l6ZV90LCB2b2lkKiBfX3ApIHRocm93KCkgeyByZXR1cm4gX19wOyB9Cgp9
CiMgNzAgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3Rs
X2FsZ29iYXNlLmgiIDIgMwojIDEgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysr
LzMuMS4xL2lvc2Z3ZCIgMSAzCiMgNDMgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUv
YysrLzMuMS4xL2lvc2Z3ZCIgMwoKCiMgMSAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVk
ZS9jKysvMy4xLjEvYml0cy9zdHJpbmdmd2QuaCIgMSAzCiMgNDMgIi9ob21lL2dvZXJ6aWcvZ2Nj
LTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RyaW5nZndkLmgiIDMKCgoKbmFtZXNwYWNl
IHN0ZAp7CiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgogICAgc3RydWN0IGNoYXJfdHJhaXRzOwoK
ICB0ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPjsKCiAgdGVtcGxhdGU8PiBzdHJ1
Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD47CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAg
ICBjbGFzcyBhbGxvY2F0b3I7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9j
ID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nOwoKICB0eXBlZGVm
IGJhc2ljX3N0cmluZzxjaGFyPiBzdHJpbmc7CiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8d2NoYXJf
dD4gd3N0cmluZzsKfQojIDQ2ICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8z
LjEuMS9pb3Nmd2QiIDIgMwojIDEgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysr
LzMuMS4xL2JpdHMvZnBvcy5oIiAxIDMKIyA0MyAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5j
bHVkZS9jKysvMy4xLjEvYml0cy9mcG9zLmgiIDMKCiMgMSAiL2hvbWUvZ29lcnppZy9nY2MtMy4x
LjEvaW5jbHVkZS9jKysvMy4xLjEvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAxIDMK
IyAzNSAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvaTY4Ni1wYy1s
aW51eC1nbnUvYml0cy9jKytpby5oIiAzCiMgMSAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5j
bHVkZS9jKysvMy4xLjEvY3N0ZGlvIiAxIDMKIyA0OCAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEv
aW5jbHVkZS9jKysvMy4xLjEvY3N0ZGlvIiAzCgoKCgojIDEgIi9ob21lL2dvZXJ6aWcvZ2NjLTMu
MS4xL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIg
MSAzCiMgMzkgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gIkMiIHsKCgoKIyAxICIvaG9t
ZS9nb2VyemlnL2djYy0zLjEuMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0NCAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRpby5oIiAyIDMKIyA1NCAi
L2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4x
LjEvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7CiMgNjQg
Ii9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
MS4xL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMg
NzQgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAxIDMK
IyAzMiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvX0dfY29uZmln
LmgiIDEgMwojIDE0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvaG9tZS9nb2Vy
emlnL2djYy0zLjEuMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRl
L3N0ZGRlZi5oIiAxIDMKIyAzMjEgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwojIDI0
ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg
MSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL2hvbWUvZ29lcnppZy9nY2Mt
My4xLjEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyA2NyAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2NvdW50Owog
IHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAgfSBfX3Zh
bHVlOwp9IF9fbWJzdGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoK
dHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsK
fSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19wb3M7CiAgX19tYnN0
YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vzci9pbmNsdWRlL19HX2NvbmZp
Zy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUv
Z2NvbnYuaCIgMwojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAiL3Vzci9pbmNs
dWRlL3djaGFyLmgiIDMKIyAxICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9p
bmNsdWRlL3djaGFyLmgiIDIgMwojIDI5ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKIyAx
ICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIg
MwoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAogIF9fR0NP
TlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAogIF9fR0NP
TlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZfSU5DT01Q
TEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09OVl9JTlRF
Uk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEsCiAgX19H
Q09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXA7CnN0
cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdDsKc3Ry
dWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2ZjdCkgKHN0
cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29uc3QgdW5z
aWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAq
Kiwgc2l6ZV90ICosIGludCwgaW50KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9mY3Qp
IChzdHJ1Y3QgX19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9mY3Qp
IChzdHJ1Y3QgX19nY29udl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNf
ZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVk
IGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoK
dHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBfX2NvbnN0
IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBlZGVm
IGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9fY29uc3Qg
Y2hhciAqKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
Kik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29u
c3QgY2hhciAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAq
KTsKCnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBfX3Ry
YW5zX2ZjdDsKICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7
CiAgX19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7
CiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29u
dl9zdGVwCnsKICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsK
ICBfX2NvbnN0IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAqX19m
cm9tX25hbWU7CiAgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2dj
b252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCgoK
ICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBf
X21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0YXRlZnVs
OwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7CiAgdW5z
aWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7CgoKCiAg
aW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGludCBfX2lu
dGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90IF9fc3Rh
dGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoKdHlwZWRl
ZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0IF9fZ2Nv
bnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0
YSBfX2RhdGEgW107Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5o
IiAyIDMKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogIHN0cnVj
dAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2djb252X3N0
ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBlZGVmIGlu
dCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVm
IGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBl
ZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f
SElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAo
KF9fbW9kZV9fIChfX1NJX18pKSk7CiMgMzMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyA1
MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMK
IyA0MyAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4xLjEvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9f
Z251Y192YV9saXN0OwojIDU0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgMTYwICIvdXNy
L2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX2p1bXBfdDsgc3RydWN0IF9JT19GSUxFOwoj
IDE3MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoK
CgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1
Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwojIDE5MyAiL3Vzci9pbmNsdWRlL2xp
YmlvLmgiIDMKfTsKCgplbnVtIF9fY29kZWN2dF9yZXN1bHQKewogIF9fY29kZWN2dF9vaywKICBf
X2NvZGVjdnRfcGFydGlhbCwKICBfX2NvZGVjdnRfZXJyb3IsCiAgX19jb2RlY3Z0X25vY29udgp9
OwoKCgoKc3RydWN0IF9JT19jb2RlY3Z0CnsKICB2b2lkICgqX19jb2RlY3Z0X2Rlc3RyKSAoc3Ry
dWN0IF9JT19jb2RlY3Z0ICopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9k
b19vdXQpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19tYnN0YXRlX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiosIGNoYXIgKiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBjaGFy
ICoqKTsKICBlbnVtIF9fY29kZWN2dF9yZXN1bHQgKCpfX2NvZGVjdnRfZG9fdW5zaGlmdCkgKHN0
cnVjdCBfSU9fY29kZWN2dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19tYnN0YXRlX3QgKiwgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBjaGFyICoqKTsKICBlbnVtIF9fY29k
ZWN2dF9yZXN1bHQgKCpfX2NvZGVjdnRfZG9faW4pIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwg
Y29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKiosIHdjaGFyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3Y2hhcl90ICosIHdjaGFyX3QgKiopOwogIGludCAoKl9fY29kZWN2dF9k
b19lbmNvZGluZykgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKICBpbnQgKCpfX2NvZGVjdnRfZG9f
YWx3YXlzX25vY29udikgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKICBpbnQgKCpfX2NvZGVjdnRf
ZG9fbGVuZ3RoKSAoc3RydWN0IF9JT19jb2RlY3Z0ICosIF9fbWJzdGF0ZV90ICosCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3Qp
OwogIGludCAoKl9fY29kZWN2dF9kb19tYXhfbGVuZ3RoKSAoc3RydWN0IF9JT19jb2RlY3Z0ICop
OwoKICBfR19pY29udl90IF9fY2RfaW47CiAgX0dfaWNvbnZfdCBfX2NkX291dDsKfTsKCgpzdHJ1
Y3QgX0lPX3dpZGVfZGF0YQp7CiAgd2NoYXJfdCAqX0lPX3JlYWRfcHRyOwogIHdjaGFyX3QgKl9J
T19yZWFkX2VuZDsKICB3Y2hhcl90ICpfSU9fcmVhZF9iYXNlOwogIHdjaGFyX3QgKl9JT193cml0
ZV9iYXNlOwogIHdjaGFyX3QgKl9JT193cml0ZV9wdHI7CiAgd2NoYXJfdCAqX0lPX3dyaXRlX2Vu
ZDsKICB3Y2hhcl90ICpfSU9fYnVmX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX2J1Zl9lbmQ7CgogIHdj
aGFyX3QgKl9JT19zYXZlX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX2JhY2t1cF9iYXNlOwoKICB3Y2hh
cl90ICpfSU9fc2F2ZV9lbmQ7CgogIF9fbWJzdGF0ZV90IF9JT19zdGF0ZTsKICBfX21ic3RhdGVf
dCBfSU9fbGFzdF9zdGF0ZTsKICBzdHJ1Y3QgX0lPX2NvZGVjdnQgX2NvZGVjdnQ7CgogIHdjaGFy
X3QgX3Nob3J0YnVmWzFdOwoKICBzdHJ1Y3QgX0lPX2p1bXBfdCAqX3dpZGVfdnRhYmxlOwp9OwoK
CnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3JlYWRfcHRy
OwogIGNoYXIqIF9JT19yZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9J
T193cml0ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2Vu
ZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9J
T19zYXZlX2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2Vu
ZDsKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9j
aGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwogIF9fb2ZmX3QgX29sZF9vZmZz
ZXQ7CgoKCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJs
ZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CiMg
MzA1ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoKCiAgc3Ry
dWN0IF9JT19jb2RlY3Z0ICpfY29kZWN2dDsKICBzdHJ1Y3QgX0lPX3dpZGVfZGF0YSAqX3dpZGVf
ZGF0YTsKCgoKCiAgaW50IF9tb2RlOwoKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQp
IC0gMiAqIHNpemVvZiAodm9pZCAqKV07Cgp9OwoKCgoKCnN0cnVjdCBfSU9fRklMRV9wbHVzOwoK
ZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0
IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3Bs
dXMgX0lPXzJfMV9zdGRlcnJfOwojIDM0NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRl
ZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNp
emVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICh2
b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lvX3NlZWtfZm4g
KHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGlu
dCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9faW9fcmVhZF9m
biBjb29raWVfcmVhZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4gY29va2llX3dy
aXRlX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVrX2Z1bmN0aW9u
X3Q7CnR5cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25fdDsKCgp0eXBl
ZGVmIHN0cnVjdAp7CiAgX19pb19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVfZm4gKndyaXRl
OwogIF9faW9fc2Vla19mbiAqc2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsKfSBfSU9fY29v
a2llX2lvX2Z1bmN0aW9uc190Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgY29v
a2llX2lvX2Z1bmN0aW9uc190OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpleHRlcm4gdm9p
ZCBfSU9fY29va2llX2luaXQgKHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2ZpbGUsIGludCBf
X3JlYWRfd3JpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19jb29raWUs
IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19mbnMpOwoKCgoKZXh0ZXJuICJDIiB7CgoKZXh0
ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX191
ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAoX0lPX0ZJ
TEUgKiwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cgKF9JT19GSUxF
ICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAo
KTsKZXh0ZXJuIHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90KSB0aHJvdyAo
KTsKIyA0MjYgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX2dldGMgKF9J
T19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lP
X0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZW9mIChfSU9fRklMRSAqX19m
cCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnApIHRocm93
ICgpOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7
CmV4dGVybiB2b2lkIF9JT19mdW5sb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVy
biBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CiMgNDU2ICIvdXNy
L2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklMRSAqIF9f
cmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAg
ICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBf
SU9fdmZwcmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93ICgpOwpleHRl
cm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCkgdGhyb3cg
KCk7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNpemVfdCkg
dGhyb3cgKCk7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklMRSAqLCBfX29m
ZjY0X3QsIGludCwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAo
X0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgX0lPX2Zy
ZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgX0lP
X2dldHdjIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX0lPX3B1dHdj
ICh3Y2hhcl90IF9fd2MsIF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9f
ZndpZGUgKF9JT19GSUxFICpfX2ZwLCBpbnQgX19tb2RlKSB0aHJvdyAoKTsKIyA1MDUgIi91c3Iv
aW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmd3NjYW5mIChfSU9fRklMRSAqIF9f
cmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgX0lPX3Zmd3ByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93
ICgpOwpleHRlcm4gX19zc2l6ZV90IF9JT193cGFkbiAoX0lPX0ZJTEUgKiwgd2ludF90LCBfX3Nz
aXplX3QpIHRocm93ICgpOwpleHRlcm4gdm9pZCBfSU9fZnJlZV93YmFja3VwX2FyZWEgKF9JT19G
SUxFICopIHRocm93ICgpOwoKCgp9CiMgNzUgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgp0
eXBlZGVmIF9fZ251Y192YV9saXN0IF9fbm90X3ZhX2xpc3RfXzsKIyA4OSAiL2hvbWUvZ29lcnpp
Zy9nY2MtMy4xLjEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9z
dGRpby5oIiAzCnR5cGVkZWYgX0dfZnBvc190IGZwb3NfdDsKCgoKCnR5cGVkZWYgX0dfZnBvczY0
X3QgZnBvczY0X3Q7CiMgMTM4ICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzCiMgMTM5ICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoK
CgpleHRlcm4gRklMRSAqc3RkaW47CmV4dGVybiBGSUxFICpzdGRvdXQ7CmV4dGVybiBGSUxFICpz
dGRlcnI7CgoKCgoKCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUp
IHRocm93ICgpOwoKZXh0ZXJuIGludCByZW5hbWUgKF9fY29uc3QgY2hhciAqX19vbGQsIF9fY29u
c3QgY2hhciAqX19uZXcpIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGUgKHZvaWQp
IHRocm93ICgpOwojIDE2NyAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICp0bXBm
aWxlNjQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9fcykg
dGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgdGhyb3cgKCk7
CiMgMTg3ICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29u
c3QgY2hhciAqX19kaXIsIF9fY29uc3QgY2hhciAqX19wZngpCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlIChGSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZmbHVzaCAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2VhbGwgKHZvaWQpIHRocm93ICgpOwoKCgoKCmV4dGVy
biBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgp
OwoKZXh0ZXJuIEZJTEUgKmZyZW9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVu
YW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9k
ZXMsCiAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJv
dyAoKTsKIyAyMzEgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqZm9wZW42NCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CmV4dGVybiBGSUxF
ICpmcmVvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAg
ICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gRklMRSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3Qg
X19tYWdpY19jb29raWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Nvb2tpZV9p
b19mdW5jdGlvbnNfdCBfX2lvX2Z1bmNzKSB0aHJvdyAoKTsKCgpleHRlcm4gRklMRSAqZm1lbW9w
ZW4gKHZvaWQgKl9fcywgc2l6ZV90IF9fbGVuLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKm9wZW5fbWVtc3RyZWFtIChjaGFyICoqX19yZXN0cmljdCBf
X2J1ZmxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3Qg
X19zaXplbG9jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRidWYgKEZJTEUgKl9fcmVz
dHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IHNldHZidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJp
Y3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgaW50IF9fbW9kZXMsIHNpemVfdCBfX24pIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry
ZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBfX3NpemUpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBf
X3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
b3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHByaW50ZiAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcHJpbnRmIChj
aGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB2ZnByaW50ZiAo
RklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwK
ICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKZXh0
ZXJuIGludCB2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251
Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hh
ciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAg
ICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IHNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAog
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4u
LikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywg
MywgNCkpKTsKCmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6
ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKCgoKCgpleHRlcm4gaW50
IHZhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2YsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkp
KTsKZXh0ZXJuIGludCBfX2FzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykp
KTsKZXh0ZXJuIGludCBhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoK
CmV4dGVybiBpbnQgdmRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mbXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpl
eHRlcm4gaW50IGRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
bXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmlu
dGZfXywgMiwgMykpKTsKCgoKCmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9f
c3RyZWFtLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y
bWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzc2NhbmYgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdmZzY2Fu
ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h
dCwKICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCmV4dGVy
biBpbnQgdnNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192
YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf
X3NjYW5mX18sIDEsIDApKSk7CgoKZXh0ZXJuIGludCB2c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgoKCmV4dGVybiBpbnQgZmdl
dGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0aHJvdyAoKTsKCgoK
CgoKCmV4dGVybiBpbnQgZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpl
eHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu
dCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu
dCBmcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IHB1
dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dGNo
YXIgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAo
aW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdXRjX3Vu
bG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0
Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVz
dHJpY3QgX19zLCBpbnQgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93
ICgpOwoKCgpleHRlcm4gY2hhciAqZmdldHNfdW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJpY3QgX19z
LCBpbnQgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3Qg
X19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhy
b3cgKCk7CiMgNDM1ICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIF9fc3NpemVfdCBfX2dl
dGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJv
dyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBnZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5l
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24s
IGludCBfX2RlbGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jl
c3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gX19zc2l6ZV90IGdldGxpbmUgKGNo
YXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCAqX19yZXN0cmljdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpf
X3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1dHMgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZnB1dHNfdW5sb2NrZWQgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3Qg
X19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB1dHMgKF9fY29uc3QgY2hhciAqX19z
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAodm9pZCAqX19yZXN0cmljdCBfX3B0
ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAq
X19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IGZ3cml0ZSAoX19j
b25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIHRocm93ICgpOwoKCgpl
eHRlcm4gc2l6ZV90IGZyZWFkX3VubG9ja2VkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXpl
X3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxF
ICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5s
b2NrZWQgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3Qg
X19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAqX19zdHJlYW0s
IGxvbmcgaW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50
IGZ0ZWxsIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA0OTggIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRl
cm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3QgX19vZmYsIGludCBfX3doZW5j
ZSkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmZfdCBmdGVsbG8gKEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBm
cG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZzZXRw
b3MgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3NfdCAqX19wb3MpIHRocm93ICgpOwojIDUz
MiAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4xLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9fc3Ry
ZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CmV4dGVybiBfX29m
ZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZ2V0
cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0IF9f
cG9zKQogICAgIHRocm93ICgpOwpleHRlcm4gaW50IGZzZXRwb3M2NCAoRklMRSAqX19zdHJlYW0s
IF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJl
cnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVvZiAoRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCk7CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vy
cmxpc3RbXTsKCgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19j
b25zdCBfc3lzX2Vycmxpc3RbXTsKCgoKCgpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9f
Y29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHBj
bG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlk
IChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFyICpf
X3MpIHRocm93ICgpOwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGludCBvYnN0YWNrX3By
aW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhy
b3cgKCk7CmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0
cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNf
dmFfbGlzdCBfX2FyZ3MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHZvaWQgZmxvY2tmaWxlIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlIChGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKIyA2NDIgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMwp9CiMgNTMgIi9o
b21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2NzdGRpbyIgMiAzCiMgOTcg
Ii9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2NzdGRpbyIgMwpuYW1l
c3BhY2Ugc3RkCnsKICB1c2luZyA6OkZJTEU7CiAgdXNpbmcgOjpmcG9zX3Q7CgogIHVzaW5nIDo6
Y2xlYXJlcnI7CiAgdXNpbmcgOjpmY2xvc2U7CiAgdXNpbmcgOjpmZW9mOwogIHVzaW5nIDo6ZmVy
cm9yOwogIHVzaW5nIDo6ZmZsdXNoOwogIHVzaW5nIDo6ZmdldGM7CiAgdXNpbmcgOjpmZ2V0cG9z
OwogIHVzaW5nIDo6ZmdldHM7CiAgdXNpbmcgOjpmb3BlbjsKICB1c2luZyA6OmZwcmludGY7CiAg
dXNpbmcgOjpmcHV0YzsKICB1c2luZyA6OmZwdXRzOwogIHVzaW5nIDo6ZnJlYWQ7CiAgdXNpbmcg
OjpmcmVvcGVuOwogIHVzaW5nIDo6ZnNjYW5mOwogIHVzaW5nIDo6ZnNlZWs7CiAgdXNpbmcgOjpm
c2V0cG9zOwogIHVzaW5nIDo6ZnRlbGw7CiAgdXNpbmcgOjpmd3JpdGU7CiAgdXNpbmcgOjpnZXRj
OwogIHVzaW5nIDo6Z2V0Y2hhcjsKICB1c2luZyA6OmdldHM7CiAgdXNpbmcgOjpwZXJyb3I7CiAg
dXNpbmcgOjpwcmludGY7CiAgdXNpbmcgOjpwdXRjOwogIHVzaW5nIDo6cHV0Y2hhcjsKICB1c2lu
ZyA6OnB1dHM7CiAgdXNpbmcgOjpyZW1vdmU7CiAgdXNpbmcgOjpyZW5hbWU7CiAgdXNpbmcgOjpy
ZXdpbmQ7CiAgdXNpbmcgOjpzY2FuZjsKICB1c2luZyA6OnNldGJ1ZjsKICB1c2luZyA6OnNldHZi
dWY7CiAgdXNpbmcgOjpzcHJpbnRmOwogIHVzaW5nIDo6c3NjYW5mOwogIHVzaW5nIDo6dG1wZmls
ZTsKICB1c2luZyA6OnRtcG5hbTsKICB1c2luZyA6OnVuZ2V0YzsKICB1c2luZyA6OnZmcHJpbnRm
OwogIHVzaW5nIDo6dnByaW50ZjsKICB1c2luZyA6OnZzcHJpbnRmOwp9CiMgMTUzICIvaG9tZS9n
b2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9jc3RkaW8iIDMKbmFtZXNwYWNlIF9f
Z251X2N4eAp7CiAgdXNpbmcgOjpzbnByaW50ZjsKICB1c2luZyA6OnZmc2NhbmY7CiAgdXNpbmcg
Ojp2c2NhbmY7CiAgdXNpbmcgOjp2c25wcmludGY7CiAgdXNpbmcgOjp2c3NjYW5mOwp9CgpuYW1l
c3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6OnNucHJpbnRmOwogIHVzaW5nIF9fZ251X2N4
eDo6dmZzY2FuZjsKICB1c2luZyBfX2dudV9jeHg6OnZzY2FuZjsKICB1c2luZyBfX2dudV9jeHg6
OnZzbnByaW50ZjsKICB1c2luZyBfX2dudV9jeHg6OnZzc2NhbmY7Cn0KIyAzNiAiL2hvbWUvZ29l
cnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9j
Kytpby5oIiAyIDMKCiMgMSAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4x
LjEvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLmgiIDEgMwojIDEwMiAiL2hvbWUvZ29lcnpp
Zy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhy
LmgiIDMKIyAxICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9pNjg2
LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItc2luZ2xlLmgiIDEgMwojIDM0ICIvaG9tZS9nb2Vyemln
L2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIt
c2luZ2xlLmgiIDMKdHlwZWRlZiBpbnQgX19ndGhyZWFkX211dGV4X3Q7CiMgMjExICIvaG9tZS9n
b2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9pNjg2LXBjLWxpbnV4LWdudS9iaXRz
L2d0aHItc2luZ2xlLmgiIDMKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2FjdGl2ZV9wICh2
b2lkKQp7CiAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF9s
b2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqICkKewogIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5l
IGludApfX2d0aHJlYWRfbXV0ZXhfdHJ5bG9jayAoX19ndGhyZWFkX211dGV4X3QgKiApCnsKICBy
ZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X3VubG9jayAoX19n
dGhyZWFkX211dGV4X3QgKiApCnsKICByZXR1cm4gMDsKfQojIDEwMyAiL2hvbWUvZ29lcnppZy9n
Y2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLmgi
IDIgMwojIDM4ICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9pNjg2
LXBjLWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHR5cGVk
ZWYgbG9uZyBzdHJlYW1vZmY7CiAgdHlwZWRlZiBwdHJkaWZmX3Qgc3RyZWFtc2l6ZTsKCiAgdHlw
ZWRlZiBwdHJkaWZmX3Qgd3N0cmVhbXNpemU7CgogIHR5cGVkZWYgZnBvc190IF9fY19zdHJlYW1w
b3M7CgogIHR5cGVkZWYgX19ndGhyZWFkX211dGV4X3QgX19jX2xvY2s7CgoKICB0eXBlZGVmIEZJ
TEUgX19jX2ZpbGU7CgoKICBzdHJ1Y3QgX19pb3NfZmxhZ3MKICB7CiAgICB0eXBlZGVmIHNob3J0
IF9faW50X3R5cGU7CgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYm9vbGFscGhhID0g
MHgwMDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZGVjID0gMHgwMDAyOwogICAg
c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZml4ZWQgPSAweDAwMDQ7CiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU19oZXggPSAweDAwMDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU19pbnRlcm5hbCA9IDB4MDAxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2xl
ZnQgPSAweDAwMjA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vY3QgPSAweDAwNDA7
CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19yaWdodCA9IDB4MDA4MDsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX3NjaWVudGlmaWMgPSAweDAxMDA7CiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU19zaG93YmFzZSA9IDB4MDIwMDsKICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX3Nob3dwb2ludCA9IDB4MDQwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl
IF9TX3Nob3dwb3MgPSAweDA4MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19za2lw
d3MgPSAweDEwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191bml0YnVmID0gMHgy
MDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdXBwZXJjYXNlID0gMHg0MDAwOwog
ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYWRqdXN0ZmllbGQgPSAweDAwMjAgfCAweDAw
ODAgfCAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iYXNlZmllbGQgPSAw
eDAwMDIgfCAweDAwNDAgfCAweDAwMDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19m
bG9hdGZpZWxkID0gMHgwMTAwIHwgMHgwMDA0OwoKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU19iYWRiaXQgPSAweDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZW9mYml0
ID0gMHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ZhaWxiaXQgPSAweDA0OwoK
CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hcHAgPSAweDAxOwogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1NfYXRlID0gMHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl
IF9TX2JpbiA9IDB4MDQ7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19pbiA9IDB4MDg7
CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vdXQgPSAweDEwOwogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1NfdHJ1bmMgPSAweDIwOwogIH07Cn0KIyA0NSAiL2hvbWUvZ29lcnpp
Zy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9mcG9zLmgiIDIgMwojIDEgIi9ob21l
L2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2N3Y2hhciIgMSAzCiMgNDggIi9o
b21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2N3Y2hhciIgMwoKCgojIDEg
Ii9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2N0aW1lIiAxIDMKIyA0
OCAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvY3RpbWUiIDMKCgoK
IyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg
MwpleHRlcm4gIkMiIHsKCgoKCgoKCiMgMSAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzkg
Ii91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUu
aCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwojIDExOCAiL3Vzci9pbmNsdWRl
L3RpbWUuaCIgMwpzdHJ1Y3QgdG0KewogIGludCB0bV9zZWM7CiAgaW50IHRtX21pbjsKICBpbnQg
dG1faG91cjsKICBpbnQgdG1fbWRheTsKICBpbnQgdG1fbW9uOwogIGludCB0bV95ZWFyOwogIGlu
dCB0bV93ZGF5OwogIGludCB0bV95ZGF5OwogIGludCB0bV9pc2RzdDsKCgogIGxvbmcgaW50IHRt
X2dtdG9mZjsKICBfX2NvbnN0IGNoYXIgKnRtX3pvbmU7CgoKCgp9OwoKCgoKc3RydWN0IGl0aW1l
cnNwZWMKICB7CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7CiAgICBzdHJ1Y3QgdGlt
ZXNwZWMgaXRfdmFsdWU7CiAgfTsKCgpzdHJ1Y3Qgc2lnZXZlbnQ7CiMgMTYzICIvdXNyL2luY2x1
ZGUvdGltZS5oIiAzCmV4dGVybiBjbG9ja190IGNsb2NrICh2b2lkKSB0aHJvdyAoKTsKCgpleHRl
cm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJs
ZSBkaWZmdGltZSAodGltZV90IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUwKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gdGltZV90IG1rdGltZSAoc3Ry
dWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lIChjaGFy
ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBjaGFyICpzdHJwdGltZSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIHN0cnVjdCB0
bSAqX190cCkKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUgKF9f
Y29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9j
YWx0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc3Ry
dWN0IHRtICpnbXRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IgKF9fY29uc3QgdGltZV90ICpf
X3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
dG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqYXNjdGltZSAo
X19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpjdGltZSAo
X19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqYXNj
dGltZV9yIChfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAogICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hh
ciAqY3RpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGNoYXIgKl9fdHpuYW1lWzJdOwpleHRlcm4gaW50IF9fZGF5bGlnaHQ7CmV4dGVybiBsb25nIGlu
dCBfX3RpbWV6b25lOwoKCgoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgoKZXh0ZXJuIHZvaWQg
dHpzZXQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0OwpleHRlcm4gbG9u
ZyBpbnQgdGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoX19jb25zdCB0aW1lX3QgKl9f
d2hlbikgdGhyb3cgKCk7CiMgMjcxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiB0aW1l
X3QgdGltZWdtIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiB0aW1lX3QgdGlt
ZWxvY2FsIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZHlzaXplIChp
bnQgX195ZWFyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0
ZXJuIGludCBuYW5vc2xlZXAgKF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcXVlc3RlZF90
aW1lLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZykg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0cmVzIChjbG9ja2lkX3QgX19jbG9ja19p
ZCwgc3RydWN0IHRpbWVzcGVjICpfX3JlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjbG9ja19n
ZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3RwKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX3NldHRpbWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBf
X2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX190cCkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCBjbG9ja19uYW5vc2xlZXAgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBpbnQgX19mbGFncywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW0pIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0Y3B1Y2xvY2tpZCAocGlkX3QgX19waWQsIGNsb2Nr
aWRfdCAqX19jbG9ja19pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRpbWVyX2NyZWF0ZSAo
Y2xvY2tpZF90IF9fY2xvY2tfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2ln
ZXZlbnQgKl9fcmVzdHJpY3QgX19ldnAsCiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl90
ICpfX3Jlc3RyaWN0IF9fdGltZXJpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9kZWxl
dGUgKHRpbWVyX3QgX190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX3NldHRp
bWUgKHRpbWVyX3QgX190aW1lcmlkLCBpbnQgX19mbGFncywKICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9fdmFsdWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX19vdmFs
dWUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0dGltZSAodGltZXJfdCBfX3RpbWVy
aWQsIHN0cnVjdCBpdGltZXJzcGVjICpfX3ZhbHVlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgdGltZXJfZ2V0b3ZlcnJ1biAodGltZXJfdCBfX3RpbWVyaWQpIHRocm93ICgpOwojIDM0MiAi
L3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVfZXJyOwoKCgoKCmV4dGVy
biBzdHJ1Y3QgdG0gKmdldGRhdGUgKF9fY29uc3QgY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoj
IDM1NyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVfciAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IHRtICpfX3Jlc3RyaWN0IF9fcmVzYnVmcCkgdGhyb3cgKCk7CgoKCn0KIyA1MiAiL2hvbWUvZ29l
cnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvY3RpbWUiIDIgMwojIDY0ICIvaG9tZS9n
b2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9jdGltZSIgMwpuYW1lc3BhY2Ugc3Rk
CnsKICB1c2luZyA6OmNsb2NrX3Q7CiAgdXNpbmcgOjp0aW1lX3Q7CiAgdXNpbmcgOjp0bTsKCiAg
dXNpbmcgOjpjbG9jazsKICB1c2luZyA6OmRpZmZ0aW1lOwogIHVzaW5nIDo6bWt0aW1lOwogIHVz
aW5nIDo6dGltZTsKICB1c2luZyA6OmFzY3RpbWU7CiAgdXNpbmcgOjpjdGltZTsKICB1c2luZyA6
OmdtdGltZTsKICB1c2luZyA6OmxvY2FsdGltZTsKICB1c2luZyA6OnN0cmZ0aW1lOwp9CiMgNTIg
Ii9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2N3Y2hhciIgMiAzCgoK
IyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDAgIi91c3IvaW5jbHVkZS93Y2hhci5o
IiAzCiMgMSAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDEgIi91c3IvaW5jbHVkZS93Y2hh
ci5oIiAyIDMKCgoKCgoKCiMgMSAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3Iv
aW5jbHVkZS93Y2hhci5oIiAyIDMKIyA4NSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKdHlwZWRl
ZiBfX21ic3RhdGVfdCBtYnN0YXRlX3Q7CiMgMTA1ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwpz
dHJ1Y3QgdG07CgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NweSAod2NoYXJf
dCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX3NyYykgdGhyb3cgKCk7CgpleHRlcm4gd2NoYXJfdCAqd2NzbmNw
eSAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg
KCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NhdCAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3Ny
YykgdGhyb3cgKCk7CgpleHRlcm4gd2NoYXJfdCAqd2NzbmNhdCAod2NoYXJfdCAqX19yZXN0cmlj
dCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3Nj
bXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCB3Y3NuY21wIChf
X2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbikK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCB3
Y3NjYXNlY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3NuY2FzZWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Mx
LCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf
X24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgX193Y3NjYXNlY21wX2wgKF9fY29uc3Qgd2No
YXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX193Y3NuY2FzZWNt
cF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGludCB3Y3Njb2xsIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29u
c3Qgd2NoYXJfdCAqX19zMikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qgd2NzeGZybSAod2No
YXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVy
biBpbnQgX193Y3Njb2xsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90
ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIHNpemVfdCBfX3djc3hmcm1fbCAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3
Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xv
Y2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJfdCAqd2NzZHVwIChfX2NvbnN0
IHdjaGFyX3QgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoK
ZXh0ZXJuIHdjaGFyX3QgKndjc2NociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgd2NoYXJfdCBf
X3djKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdj
aGFyX3QgKndjc3JjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiB3Y2hhcl90
ICp3Y3NjaHJudWwgKF9fY29uc3Qgd2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHdjc2Nz
cG4gKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19yZWplY3QpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCB3
Y3NzcG4gKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQp
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJf
dCAqd2NzcGJyayAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX2Fj
Y2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3
Y2hhcl90ICp3Y3NzdHIgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3Y2hh
cl90ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CgoKZXh0ZXJuIHdjaGFyX3QgKndjc3djcyAoX19jb25zdCB3Y2hhcl90ICpfX2hheXN0YWNrLCBf
X2NvbnN0IHdjaGFyX3QgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2NzdG9rICh3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9f
cHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IHdjc2xlbiAoX19jb25zdCB3Y2hhcl90ICpf
X3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gc2l6ZV90
IHdjc25sZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19tYXhsZW4pCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd21l
bWNociAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgd21lbWNt
cCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAg
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jcHkg
KHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIHdjaGFyX3QgKndtZW1tb3ZlICh3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9f
czIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1zZXQg
KHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0
ZXJuIHdjaGFyX3QgKndtZW1wY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVf
dCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHdpbnRfdCBidG93YyAoaW50IF9fYykg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgd2N0b2IgKHdpbnRfdCBfX2MpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IG1ic2luaXQgKF9fY29uc3QgbWJzdGF0ZV90ICpfX3BzKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHNpemVfdCBtYnJ0b3djICh3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0
ZV90ICpfX3ApIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3Qgd2NydG9tYiAoY2hhciAqX19yZXN0
cmljdCBfX3MsIHdjaGFyX3QgX193YywKICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3Qg
Kl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCBfX21icmxlbiAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwpleHRlcm4gc2l6ZV90
IG1icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAg
ICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKIyAy
OTcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCmV4dGVybiBzaXplX3QgbWJzcnRvd2NzICh3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj
aGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAg
ICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6
ZV90IHdjc3J0b21icyAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IG1ic25ydG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmlj
dCBfX3NyYywgc2l6ZV90IF9fbm1jLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf
X2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6
ZV90IHdjc25ydG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgX19ud2MsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBpbnQgd2N3aWR0aCAod2NoYXJfdCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHdj
c3dpZHRoIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGRvdWJsZSB3Y3N0b2QgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIs
CiAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhy
b3cgKCk7CgoKCmV4dGVybiBmbG9hdCB3Y3N0b2YgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHdjc3RvbGQgKF9fY29uc3Qgd2NoYXJf
dCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90
ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgaW50IHdj
c3RvbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93
ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bCAoX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdj
aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoK
CgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2No
YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoK
Cl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAoX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCl9f
ZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgd2NzdG9sbCAoX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJf
dCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9f
ZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91bGwgKF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDQxMCAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2wgKF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2ln
bmVkIGxvbmcgaW50IF9fd2NzdG91bF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRl
cm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f
YmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1
bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fd2NzdG91bGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRo
cm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBfX3djc3RvZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGZs
b2F0IF9fd2NzdG9mX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2Nh
bGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBfX3djc3RvbGRf
bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gZG91YmxlIF9fd2NzdG9kX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0
cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBf
X3djc3RvZl9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0
ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3djc3Rv
bGRfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2ludGVybmFsIChfX2NvbnN0IHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fbnB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgp
OwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9sbF9pbnRlcm5h
bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19n
cm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgX193Y3N0b3VsbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFy
X3QgKioKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwojIDUyOCAiL3Vzci9p
bmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuIHdjaGFyX3QgKndjcGNweSAod2NoYXJfdCAqX19kZXN0
LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndj
cG5jcHkgKHdjaGFyX3QgKl9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3NyYywgc2l6ZV90IF9f
bikKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZndpZGUgKF9fRklMRSAqX19mcCwg
aW50IF9fbW9kZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZndwcmludGYgKF9fRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB3cHJp
bnRmIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJv
dyAoKSA7CgpleHRlcm4gaW50IHN3cHJpbnRmICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6
ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKCmV4dGVybiBpbnQgdmZ3cHJpbnRmIChf
X0ZJTEUgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3Zh
X2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB2d3ByaW50ZiAoX19jb25z
dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBfX2du
dWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgoKZXh0ZXJuIGludCB2c3dwcmludGYg
KHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAg
ICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKCgpleHRlcm4gaW50
IGZ3c2NhbmYgKF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAo
KSA7CgpleHRlcm4gaW50IHdzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9y
bWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCBzd3NjYW5mIChfX2NvbnN0IHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJf
dCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCgoKCmV4dGVybiBp
bnQgdmZ3c2NhbmYgKF9fRklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAg
ICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB2d3Nj
YW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAg
ICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB2
c3dzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAg
ICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgoKCgpleHRlcm4g
d2ludF90IGZnZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3Qg
Z2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgZ2V0d2No
YXIgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IGZwdXR3YyAod2NoYXJfdCBfX3dj
LCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBwdXR3YyAod2NoYXJf
dCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IHB1dHdj
aGFyICh3Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKmZnZXR3cyAo
d2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQgX19uLAogICAgICAgICAgICAgICAgICAgICAg
ICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZnB1
dHdzIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywKICAgICAgICAgICAgICAgICAg
IF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3aW50X3Qg
dW5nZXR3YyAod2ludF90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4
dGVybiB3aW50X3QgZ2V0d2NfdW5sb2NrZWQgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpl
eHRlcm4gd2ludF90IGdldHdjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4g
d2ludF90IGZnZXR3Y191bmxvY2tlZCAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIHdpbnRfdCBmcHV0d2NfdW5sb2NrZWQgKHdjaGFyX3QgX193YywgX19GSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3aW50X3QgcHV0d2NfdW5sb2NrZWQgKHdjaGFyX3QgX193
YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgcHV0d2NoYXJfdW5s
b2NrZWQgKHdjaGFyX3QgX193YykgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90ICpmZ2V0d3Nf
dW5sb2NrZWQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywgaW50IF9fbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IGZwdXR3c191bmxvY2tlZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fd3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3Qg
X19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gc2l6ZV90IHdjc2Z0aW1lICh3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKIyA2
ODAgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCn0KIyA1NSAiL2hvbWUvZ29lcnppZy9nY2MtMy4x
LjEvaW5jbHVkZS9jKysvMy4xLjEvY3djaGFyIiAyIDMKIyA2OSAiL2hvbWUvZ29lcnppZy9nY2Mt
My4xLjEvaW5jbHVkZS9jKysvMy4xLjEvY3djaGFyIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5n
IDo6bWJzdGF0ZV90Owp9CiMgMTMzICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2Mr
Ky8zLjEuMS9jd2NoYXIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjp3aW50X3Q7CgogIHVz
aW5nIDo6YnRvd2M7CiAgdXNpbmcgOjpmZ2V0d2M7CiAgdXNpbmcgOjpmZ2V0d3M7CiAgdXNpbmcg
OjpmcHV0d2M7CiAgdXNpbmcgOjpmcHV0d3M7CiAgdXNpbmcgOjpmd2lkZTsKICB1c2luZyA6OmZ3
cHJpbnRmOwogIHVzaW5nIDo6ZndzY2FuZjsKICB1c2luZyA6OmdldHdjOwogIHVzaW5nIDo6Z2V0
d2NoYXI7CiAgdXNpbmcgOjptYnJsZW47CiAgdXNpbmcgOjptYnJ0b3djOwogIHVzaW5nIDo6bWJz
aW5pdDsKICB1c2luZyA6Om1ic3J0b3djczsKICB1c2luZyA6OnB1dHdjOwogIHVzaW5nIDo6cHV0
d2NoYXI7CiAgdXNpbmcgOjpzd3ByaW50ZjsKICB1c2luZyA6OnN3c2NhbmY7CiAgdXNpbmcgOjp1
bmdldHdjOwogIHVzaW5nIDo6dmZ3cHJpbnRmOwogIHVzaW5nIDo6dmZ3c2NhbmY7CiAgdXNpbmcg
Ojp2c3dwcmludGY7CiAgdXNpbmcgOjp2c3dzY2FuZjsKICB1c2luZyA6OnZ3cHJpbnRmOwogIHVz
aW5nIDo6dndzY2FuZjsKICB1c2luZyA6OndjcnRvbWI7CiAgdXNpbmcgOjp3Y3NjYXQ7CiAgdXNp
bmcgOjp3Y3NjbXA7CiAgdXNpbmcgOjp3Y3Njb2xsOwogIHVzaW5nIDo6d2NzY3B5OwogIHVzaW5n
IDo6d2NzY3NwbjsKICB1c2luZyA6Ondjc2Z0aW1lOwogIHVzaW5nIDo6d2NzbGVuOwogIHVzaW5n
IDo6d2NzbmNhdDsKICB1c2luZyA6Ondjc25jbXA7CiAgdXNpbmcgOjp3Y3NuY3B5OwogIHVzaW5n
IDo6d2NzcnRvbWJzOwogIHVzaW5nIDo6d2Nzc3BuOwogIHVzaW5nIDo6d2NzdG9kOwogIHVzaW5n
IDo6d2NzdG9mOwogIHVzaW5nIDo6d2NzdG9rOwogIHVzaW5nIDo6d2NzdG9sOwogIHVzaW5nIDo6
d2NzdG91bDsKICB1c2luZyA6Ondjc3hmcm07CiAgdXNpbmcgOjp3Y3RvYjsKICB1c2luZyA6Ondt
ZW1jbXA7CiAgdXNpbmcgOjp3bWVtY3B5OwogIHVzaW5nIDo6d21lbW1vdmU7CiAgdXNpbmcgOjp3
bWVtc2V0OwogIHVzaW5nIDo6d3ByaW50ZjsKICB1c2luZyA6OndzY2FuZjsKCiAgdXNpbmcgOjp3
Y3NjaHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc2Nocih3Y2hhcl90KiBfX3AsIHdjaGFyX3Qg
X19jKQogIHsgcmV0dXJuIHdjc2Nocihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBf
X2MpOyB9CgogIHVzaW5nIDo6d2NzcGJyazsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzcGJyayh3
Y2hhcl90KiBfX3MxLCB3Y2hhcl90KiBfX3MyKQogIHsgcmV0dXJuIHdjc3BicmsoY29uc3RfY2Fz
dDxjb25zdCB3Y2hhcl90Kj4oX19zMSksIF9fczIpOyB9CgogIHVzaW5nIDo6d2NzcmNocjsKCiAg
aW5saW5lIHdjaGFyX3QqCiAgd2NzcmNocih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jKQogIHsg
cmV0dXJuIHdjc3JjaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jKTsgfQoK
ICB1c2luZyA6Ondjc3N0cjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2Nzc3RyKHdjaGFyX3QqIF9f
czEsIHdjaGFyX3QqIF9fczIpCiAgeyByZXR1cm4gd2Nzc3RyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2No
YXJfdCo+KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6OndtZW1jaHI7CgogIGlubGluZSB3Y2hh
cl90KgogIHdtZW1jaHIod2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikKICB7
IHJldHVybiB3bWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYywgX19u
KTsgfQp9CgoKCgoKCgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6Ondjc3RvbGQ7CiAg
dXNpbmcgOjp3Y3N0b2xsOwogIHVzaW5nIDo6d2NzdG91bGw7Cn0KCm5hbWVzcGFjZSBzdGQKewog
IHVzaW5nIF9fZ251X2N4eDo6d2NzdG9sZDsKICB1c2luZyBfX2dudV9jeHg6Ondjc3RvbGw7CiAg
dXNpbmcgX19nbnVfY3h4Ojp3Y3N0b3VsbDsKfQojIDQ2ICIvaG9tZS9nb2VyemlnL2djYy0zLjEu
MS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL2Zwb3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgZnBvcwogICAgewogICAgcHVi
bGljOgoKICAgICAgdHlwZWRlZiBfU3RhdGVUIF9fc3RhdGVfdHlwZTsKCiAgICBwcml2YXRlOgog
ICAgICBzdHJlYW1vZmYgX01fb2ZmOwogICAgICBfX3N0YXRlX3R5cGUgX01fc3Q7CgogICAgcHVi
bGljOgogICAgICBfX3N0YXRlX3R5cGUKICAgICAgc3RhdGUoKSBjb25zdCB7IHJldHVybiBfTV9z
dDsgfQoKICAgICAgdm9pZAogICAgICBzdGF0ZShfX3N0YXRlX3R5cGUgX19zdCkgeyBfTV9zdCA9
IF9fc3Q7IH0KCgoKICAgICAgZnBvcygpOiBfTV9vZmYoc3RyZWFtb2ZmKCkpLCBfTV9zdChfX3N0
YXRlX3R5cGUoKSkgeyB9CgogICAgICBmcG9zKHN0cmVhbW9mZiBfX29mZiwgX19zdGF0ZV90eXBl
IF9fc3QgPSBfX3N0YXRlX3R5cGUoKSkKICAgICAgOiBfTV9vZmYoX19vZmYpLCBfTV9zdChfX3N0
KSB7IH0KCiAgICAgIG9wZXJhdG9yIHN0cmVhbW9mZigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsg
fQoKICAgICAgZnBvcyYKICAgICAgb3BlcmF0b3IrPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2Zm
ICs9IF9fb2ZmOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yLT0o
c3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiAtPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAg
ICBmcG9zCiAgICAgIG9wZXJhdG9yKyhzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBm
cG9zIF9fdCgqdGhpcyk7CiAgICAgICAgX190ICs9IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7
CiAgICAgIH0KCiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3ItKHN0cmVhbW9mZiBfX29mZikKICAg
ICAgewogICAgICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAgICBfX3QgLT0gX19vZmY7CiAgICAg
ICAgcmV0dXJuIF9fdDsKICAgICAgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvcj09KGNvbnN0
IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgPT0gX19wb3MuX01fb2Zm
OyB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yIT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIF9NX29mZiAhPSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIHN0cmVhbW9m
ZgogICAgICBfTV9wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAgdm9p
ZAogICAgICBfTV9wb3NpdGlvbihzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmID0gX19vZmY7IH0K
ICAgIH07CgoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBzdHJlYW1wb3M7CgogIHR5cGVkZWYg
ZnBvczxtYnN0YXRlX3Q+IHdzdHJlYW1wb3M7Cgp9CiMgNDcgIi9ob21lL2dvZXJ6aWcvZ2NjLTMu
MS4xL2luY2x1ZGUvYysrLzMuMS4xL2lvc2Z3ZCIgMiAzCiMgMSAiL2hvbWUvZ29lcnppZy9nY2Mt
My4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL2hv
bWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9mdW5jdGV4Y2VwdC5o
IiAzCiMgMSAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvZXhjZXB0
aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUv
YysrLzMuMS4xL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9p
ZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9h
bGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAg
X190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3Io
Y29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciog
X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog
IHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg
X190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93
X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93
X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3Qg
Y2hhciogX19zKTsKfQojIDQ4ICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8z
LjEuMS9pb3Nmd2QiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBi
YXNpY19pb3M7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9
IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVmOwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh
clQ+ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFz
aWNfb3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
ID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pb3N0cmVhbTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No
YXJUPiwKICAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgog
ICAgY2xhc3MgYmFzaWNfc3RyaW5nYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1l
IF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJl
YW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJf
dHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9D
aGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAg
ICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNp
Y19zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZmlsZWJ1ZjsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8
X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFz
cyBiYXNpY19vZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19mc3RyZWFtOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0
czxfQ2hhclQ+ID4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3I7CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgog
ICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjsKCgoKICBjbGFzcyBpb3NfYmFzZTsKCgogIHR5
cGVkZWYgYmFzaWNfaW9zPGNoYXI+IGlvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFy
PiBzdHJlYW1idWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPGNoYXI+IGlzdHJlYW07CiAgdHlw
ZWRlZiBiYXNpY19vc3RyZWFtPGNoYXI+IG9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19pb3N0cmVh
bTxjaGFyPiBpb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1ZjxjaGFyPiBzdHJpbmdi
dWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPGNoYXI+IGlzdHJpbmdzdHJlYW07CiAg
dHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXI+IG9zdHJpbmdzdHJlYW07CiAgdHlwZWRl
ZiBiYXNpY19zdHJpbmdzdHJlYW08Y2hhcj4gc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNf
ZmlsZWJ1ZjxjaGFyPiBmaWxlYnVmOwogIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08Y2hhcj4gaWZz
dHJlYW07CiAgdHlwZWRlZiBiYXNpY19vZnN0cmVhbTxjaGFyPiBvZnN0cmVhbTsKICB0eXBlZGVm
IGJhc2ljX2ZzdHJlYW08Y2hhcj4gZnN0cmVhbTsKCiAgdHlwZWRlZiBiYXNpY19pb3M8d2NoYXJf
dD4gd2lvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiB3c3RyZWFtYnVmOwog
IHR5cGVkZWYgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiB3aXN0cmVhbTsKICB0eXBlZGVmIGJhc2lj
X29zdHJlYW08d2NoYXJfdD4gd29zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTx3Y2hh
cl90PiB3aW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8d2NoYXJfdD4gd3N0cmlu
Z2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08d2NoYXJfdD4gd2lzdHJpbmdzdHJl
YW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdvc3RyaW5nc3RyZWFt
OwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdzdHJpbmdzdHJlYW07CiAg
dHlwZWRlZiBiYXNpY19maWxlYnVmPHdjaGFyX3Q+IHdmaWxlYnVmOwogIHR5cGVkZWYgYmFzaWNf
aWZzdHJlYW08d2NoYXJfdD4gd2lmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08d2No
YXJfdD4gd29mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTx3Y2hhcl90PiB3ZnN0cmVh
bTsKfQojIDcxICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRz
L3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRl
L2MrKy8zLjEuMS9iaXRzL3N0bF9wYWlyLmgiIDEgMwojIDY0ICIvaG9tZS9nb2VyemlnL2djYy0z
LjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9wYWlyLmgiIDMKbmFtZXNwYWNlIHN0ZAp7
CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpzdHJ1Y3QgcGFpciB7CiAgdHlwZWRl
ZiBfVDEgZmlyc3RfdHlwZTsKICB0eXBlZGVmIF9UMiBzZWNvbmRfdHlwZTsKCiAgX1QxIGZpcnN0
OwogIF9UMiBzZWNvbmQ7CgoKCgogIHBhaXIoKSA6IGZpcnN0KCksIHNlY29uZCgpIHt9CgoKCgog
IHBhaXIoY29uc3QgX1QxJiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0KF9fYSksIHNlY29u
ZChfX2IpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+CiAgcGFpcihjb25z
dCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNlY29uZChfX3Auc2Vj
b25kKSB7fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1Qy
PiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA9PSBfX3kuZmlyc3QgJiYgX194LnNlY29uZCA9
PSBfX3kuc2Vjb25kOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEs
IF9UMj4mIF9feSkKewogIHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3QgfHwKICAgICAgICAg
KCEoX195LmZpcnN0IDwgX194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNlY29uZCk7Cn0K
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewog
IHJldHVybiAhKF9feCA9PSBfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1Qy
PgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3Qg
cGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgcGFpcjxf
VDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9f
eSA8IF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29s
IG9wZXJhdG9yPj0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9U
Mj4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KIyAxNDAgIi9ob21lL2dvZXJ6aWcv
Z2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX3BhaXIuaCIgMwp0ZW1wbGF0ZSA8
Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CgoKaW5saW5lIHBhaXI8X1QxLCBfVDI+IG1ha2VfcGFpcihf
VDEgX194LCBfVDIgX195KQoKCgp7CiAgcmV0dXJuIHBhaXI8X1QxLCBfVDI+KF9feCwgX195KTsK
fQoKfQojIDcyICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRz
L3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRl
L2MrKy8zLjEuMS9iaXRzL3R5cGVfdHJhaXRzLmgiIDEgMwojIDUzICIvaG9tZS9nb2VyemlnL2dj
Yy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKIyA5MCAiL2hv
bWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy90eXBlX3RyYWl0cy5o
IiAzCnN0cnVjdCBfX3RydWVfdHlwZSB7fTsKc3RydWN0IF9fZmFsc2VfdHlwZSB7fTsKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzIHsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSB0aGlzX2R1bW15X21lbWJlcl9tdXN0X2JlX2ZpcnN0OwojIDExMyAiL2hvbWUvZ29lcnpp
Zy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy90eXBlX3RyYWl0cy5oIiAzCiAgIHR5
cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk
ZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxz
ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0
czxib29sPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlw
ZV90cmFpdHM8Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50
X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj
dCBfX3R5cGVfdHJhaXRzPHNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRl
bXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgY2hhcj4gewogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNf
UE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxz
aG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVf
dHJhaXRzPHVuc2lnbmVkIHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz
c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9fdHlwZV90cmFpdHM8aW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRl
bXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgaW50PiB7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19Q
T0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZz4gewogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2ln
bmVkIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190
eXBlX3RyYWl0czxsb25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz
aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8
PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BP
RF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxmbG9hdD4gewogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGRvdWJs
ZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh
aXRzPGxvbmcgZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVm
YXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1l
bnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFz
cyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzPF9UcCo+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9
OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBfSXNfaW50ZWdlciB7CiAgdHlwZWRl
ZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVn
ZXI8Ym9vbD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8
PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Y2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn
cmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2lnbmVkIGNoYXI+IHsKICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19p
bnRlZ2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFyX3Q+IHsKICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNo
b3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0
cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBzaG9ydD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg
X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8aW50PiB7CiAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50
ZWdlcjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVk
IGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4g
c3RydWN0IF9Jc19pbnRlZ2VyPGxvbmcgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0lu
dGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZyBs
b25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+IHN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yIHsKICAgdHlwZWRlZiBfX2ZhbHNl
X3R5cGUgX05vcm1hbDsKfTsKCgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+IGNsYXNzIF9fbm9ybWFsX2l0ZXJh
dG9yOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+
CnN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yPCBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9y
PF9JdGVyYXRvciwgX0NvbnRhaW5lcj4gPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgX05vcm1h
bDsKfTsKIyA3MyAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0
cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVk
ZS9jKysvMy4xLjEvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAxIDMKIyA2OCAiL2hv
bWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfaXRlcmF0b3Jf
YmFzZV90eXBlcy5oIiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA4MCAiL2hvbWUvZ29lcnppZy9nY2Mt
My4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAz
CiAgc3RydWN0IGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IG91dHB1dF9pdGVyYXRv
cl90YWcge307CgogIHN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBpbnB1dF9p
dGVyYXRvcl90YWcge307CgogIHN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6IHB1
YmxpYyBmb3J3YXJkX2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRl
cmF0b3JfdGFnIDogcHVibGljIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9OwojIDEwMCAi
L2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfaXRlcmF0
b3JfYmFzZV90eXBlcy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NhdGVnb3J5LCB0eXBlbmFt
ZSBfVHAsIHR5cGVuYW1lIF9EaXN0YW5jZSA9IHB0cmRpZmZfdCwKICAgICAgICAgICB0eXBlbmFt
ZSBfUG9pbnRlciA9IF9UcCosIHR5cGVuYW1lIF9SZWZlcmVuY2UgPSBfVHAmPgogICAgc3RydWN0
IGl0ZXJhdG9yIHsKCiAgICAgIHR5cGVkZWYgX0NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwoK
ICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgIHR5cGVkZWYgX0Rpc3RhbmNlIGRp
ZmZlcmVuY2VfdHlwZTsKCiAgICAgIHR5cGVkZWYgX1BvaW50ZXIgcG9pbnRlcjsKCiAgICAgIHR5
cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7CiAgICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSXRlcmF0b3I+CiAgICBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfSXRlcmF0b3I6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6dmFsdWVfdHlwZSB2YWx1ZV90eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIGRpZmZl
cmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnBvaW50ZXIgcG9p
bnRlcjsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnJlZmVyZW5jZSByZWZlcmVu
Y2U7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgaXRlcmF0b3Jf
dHJhaXRzPF9UcCo+IHsKICAgICAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBp
dGVyYXRvcl9jYXRlZ29yeTsKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICAgICAgdHlw
ZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIF9UcCogcG9pbnRl
cjsKICAgICAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX1RwKj4gewogICAgICB0
eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogICAg
ICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJl
bmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVm
IGNvbnN0IF9UcCYgcmVmZXJlbmNlOwogICAgfTsKCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0l0ZXI+CiAgICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0
b3JfY2F0ZWdvcnkKICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoY29uc3QgX0l0ZXImKQogICAgeyBy
ZXR1cm4gdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnko
KTsgfQoKfQojIDc0ICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9i
aXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNs
dWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDEgMwojIDY4ICIv
aG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9pdGVyYXRv
cl9iYXNlX2Z1bmNzLmgiIDMKIyAxICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2Mr
Ky8zLjEuMS9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgMzkgIi9ob21lL2dvZXJ6aWcvZ2Nj
LTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvY29uY2VwdF9jaGVjay5oIiAzCiMgNjkgIi9o
b21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2l0ZXJhdG9y
X2Jhc2VfZnVuY3MuaCIgMiAzCgoKCgpuYW1lc3BhY2Ugc3RkCnsKdGVtcGxhdGU8dHlwZW5hbWUg
X0lucHV0SXRlcmF0b3I+CiAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ
dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgewoKICAg
CgogICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5j
ZV90eXBlIF9fbiA9IDA7CiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgKytf
X2ZpcnN0OyArK19fbjsKICAgIH0KICAgIHJldHVybiBfX247CiAgfQoKdGVtcGxhdGU8dHlwZW5h
bWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgX19kaXN0YW5jZShf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz
dCwKICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAogICAg
cmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7CiAgfQojIDExMSAiL2hvbWUvZ29lcnppZy9nY2MtMy4x
LjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCnRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogIGlubGluZSB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICBkaXN0YW5jZShfSW5w
dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgewoKICAgIHJldHVy
biBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0
KSk7CiAgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNl
PgogIGlubGluZSB2b2lkCiAgX19hZHZhbmNlKF9JbnB1dEl0ZXImIF9faSwgX0Rpc3RhbmNlIF9f
biwgaW5wdXRfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAogICAgd2hpbGUgKF9fbi0tKSArK19faTsK
ICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0eXBlbmFtZSBf
RGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBfX2FkdmFuY2UoX0JpZGlyZWN0aW9uYWxJdGVyYXRv
ciYgX19pLCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
X3RhZykKICB7CgogICAKCiAgICBpZiAoX19uID4gMCkKICAgICAgd2hpbGUgKF9fbi0tKSArK19f
aTsKICAgIGVsc2UKICAgICAgd2hpbGUgKF9fbisrKSAtLV9faTsKICB9Cgp0ZW1wbGF0ZTx0eXBl
bmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxpbmUg
dm9pZAogIF9fYWR2YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9f
biwKICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgewoKICAgCiAgICBf
X2kgKz0gX19uOwogIH0KIyAxNjQgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysr
LzMuMS4xL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMwp0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogIGlubGluZSB2b2lkCiAgYWR2
YW5jZShfSW5wdXRJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uKQogIHsKCiAgICBfX2FkdmFu
Y2UoX19pLCBfX24sIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19pKSk7CiAgfQoKfQojIDc1ICIvaG9t
ZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvYmFzZS5o
IiAyIDMKIyAxICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRz
L3N0bF9pdGVyYXRvci5oIiAxIDMKIyA2OCAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVk
ZS9jKysvMy4xLjEvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKIyA4OSAi
L2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfaXRlcmF0
b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGNsYXNzIHJldmVyc2Vf
aXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAogICAgICAgICAgICAg
ICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2Vf
dHlwZSwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl
cmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAg
X0l0ZXJhdG9yIGN1cnJlbnQ7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9JdGVyYXRvciBp
dGVyYXRvcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl
cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UgcmVmZXJl
bmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpw
b2ludGVyIHBvaW50ZXI7CgogICAgcHVibGljOgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yKCkg
eyB9CgoKCgogICAgICBleHBsaWNpdAogICAgICByZXZlcnNlX2l0ZXJhdG9yKGl0ZXJhdG9yX3R5
cGUgX194KSA6IGN1cnJlbnQoX194KSB7IH0KCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IoY29u
c3QgcmV2ZXJzZV9pdGVyYXRvciYgX194KQogICAgICA6IGN1cnJlbnQoX194LmN1cnJlbnQpIHsg
fQoKCgoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAgICAgIHJldmVyc2VfaXRl
cmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkKICAgICAgICA6IGN1cnJl
bnQoX194LmJhc2UoKSkgeyB9CgoKCgogICAgICBpdGVyYXRvcl90eXBlCiAgICAgIGJhc2UoKSBj
b25zdCB7IHJldHVybiBjdXJyZW50OyB9CgoKCgoKCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVy
YXRvciooKSBjb25zdAogICAgICB7CiAgICAgICAgX0l0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsK
ICAgICAgICByZXR1cm4gKi0tX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcG9pbnRlcgogICAg
ICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCgoKCgoKICAg
ICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAgICAgICAt
LWN1cnJlbnQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVy
c2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICByZXZlcnNl
X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAgLS1jdXJyZW50OwogICAgICAgIHJldHVy
biBfX3RtcDsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAgICBvcGVy
YXRvci0tKCkKICAgICAgewogICAgICAgICsrY3VycmVudDsKICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciBvcGVyYXRvci0tKGludCkKICAg
ICAgewogICAgICAgIHJldmVyc2VfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgICAgICArK2N1
cnJlbnQ7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2Vf
aXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoY3VycmVudCAtIF9fbik7IH0KCgoKCgoKICAgICAg
cmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19uKQog
ICAgICB7CiAgICAgICAgY3VycmVudCAtPSBfX247CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAg
ICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItKGRpZmZlcmVu
Y2VfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoY3VycmVu
dCArIF9fbik7IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3It
PShkaWZmZXJlbmNlX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY3VycmVudCArPSBfX247CiAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJlZmVyZW5jZQogICAgICBv
cGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooKnRoaXMgKyBf
X24pOyB9CiAgICB9OwojIDI2OSAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysv
My4xLjEvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRv
cj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8
X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J
dGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0
b3I8KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAg
IGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX195
LmJhc2UoKSA8IF9feC5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgog
ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh
dG9yPiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IHJldmVy
c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2Vf
aXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX195IDwgX194OyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9
KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAg
Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9f
eSA8IF9feCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yPj0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gs
CiAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQog
ICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRv
cj4KICAgIGlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZl
cmVuY2VfdHlwZQogICAgb3BlcmF0b3ItKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y
PiYgX194LAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYg
X195KQogICAgeyByZXR1cm4gX195LmJhc2UoKSAtIF9feC5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y
PgogICAgb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlm
ZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J
dGVyYXRvcj4mIF9feCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihf
X3guYmFzZSgpIC0gX19uKTsgfQojIDMyNyAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVk
ZS9jKysvMy4xLjEvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
b250YWluZXI+CiAgICBjbGFzcyBiYWNrX2luc2VydF9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRl
cmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsK
ICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOwoKICAgIHB1YmxpYzoK
CiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKCgogICAgICBleHBsaWNp
dAogICAgICBiYWNrX2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVy
KCZfX3gpIHsgfQojIDM1MyAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4x
LjEvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKICAg
ICAgb3BlcmF0b3I9KHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVl
KQogICAgICB7CiAgICAgICAgY29udGFpbmVyLT5wdXNoX2JhY2soX192YWx1ZSk7CiAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAg
IG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgYmFja19pbnNlcnRfaXRlcmF0
b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGJhY2tfaW5z
ZXJ0X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQogICAg
fTsKIyAzODQgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMv
c3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgaW5s
aW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CiAgICBiYWNrX2luc2VydGVyKF9D
b250YWluZXImIF9feCkKICAgIHsgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWlu
ZXI+KF9feCk7IH0KIyAzOTcgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMu
MS4xL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVy
PgogICAgY2xhc3MgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxv
dXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJv
dGVjdGVkOgogICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7CgogICAgcHVibGljOgoKICAgICAg
dHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCiAgICAgIGV4cGxpY2l0IGZyb250
X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHsgfQoj
IDQyMiAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxf
aXRlcmF0b3IuaCIgMwogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9y
PSh0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewog
ICAgICAgIGNvbnRhaW5lci0+cHVzaF9mcm9udChfX3ZhbHVlKTsKICAgICAgICByZXR1cm4gKnRo
aXM7CiAgICAgIH0KCgogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9y
KigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAg
ICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBmcm9udF9pbnNlcnRfaXRl
cmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9OwojIDQ1
MyAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfaXRl
cmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgZnJv
bnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CiAgICBmcm9udF9pbnNlcnRlcihfQ29udGFp
bmVyJiBfX3gpCiAgICB7IHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4o
X194KTsgfQojIDQ3MCAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEv
Yml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAg
ICBjbGFzcyBpbnNlcnRfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVy
YXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsKICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRl
cmF0b3IgaXRlcjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFp
bmVyX3R5cGU7CgoKCgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlw
ZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pKQogICAgICA6IGNvbnRhaW5lcigmX194KSwg
aXRlcihfX2kpIHt9CiMgNTEyICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8z
LjEuMS9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAg
b3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3Zh
bHVlKQogICAgICB7CiAgICAgICAgaXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIF9fdmFs
dWUpOwogICAgICAgICsraXRlcjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAg
ICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoK
ICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7
IH0KCgogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVy
biAqdGhpczsgfQogICAgfTsKIyA1NDQgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUv
YysrLzMuMS4xL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29u
dGFpbmVyLCB0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgaW5zZXJ0X2l0ZXJhdG9yPF9D
b250YWluZXI+CiAgICBpbnNlcnRlcihfQ29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpCiAg
ICB7CiAgICAgIHJldHVybiBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0
ZXJhdG9yKF9faSkpOwogICAgfQp9CgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKCgoKCgoKCiAgdXNp
bmcgc3RkOjppdGVyYXRvcl90cmFpdHM7CiAgdXNpbmcgc3RkOjppdGVyYXRvcjsKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBfX25v
cm1hbF9pdGVyYXRvcgogICAgICA6IHB1YmxpYyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAogICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6
ZGlmZmVyZW5jZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KICAgIHsKICAgIHBy
b3RlY3RlZDoKICAgICAgX0l0ZXJhdG9yIF9NX2N1cnJlbnQ7CgogICAgcHVibGljOgogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5
cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyIHBvaW50ZXI7CgogICAg
ICBfX25vcm1hbF9pdGVyYXRvcigpIDogX01fY3VycmVudChfSXRlcmF0b3IoKSkgeyB9CgogICAg
ICBleHBsaWNpdAogICAgICBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfSXRlcmF0b3ImIF9faSkg
OiBfTV9jdXJyZW50KF9faSkgeyB9CgoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAg
ICAgIGlubGluZSBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl
ciwgX0NvbnRhaW5lcj4mIF9faSkKICAgICAgICA6IF9NX2N1cnJlbnQoX19pLmJhc2UoKSkgeyB9
CgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9j
dXJyZW50OyB9CgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVy
biBfTV9jdXJyZW50OyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3Ir
KygpIHsgKytfTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJh
dG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9j
dXJyZW50KyspOyB9CgoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLS0o
KSB7IC0tX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRv
cgogICAgICBvcGVyYXRvci0tKGludCkgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3Vy
cmVudC0tKTsgfQoKCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcltdKGNvbnN0IGRpZmZl
cmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfTV9jdXJyZW50W19fbl07IH0K
CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcis9KGNvbnN0IGRpZmZlcmVu
Y2VfdHlwZSYgX19uKQogICAgICB7IF9NX2N1cnJlbnQgKz0gX19uOyByZXR1cm4gKnRoaXM7IH0K
CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNl
X3R5cGUmIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3Vy
cmVudCArIF9fbik7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci09
KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQogICAgICB7IF9NX2N1cnJlbnQgLT0gX19uOyBy
ZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLShj
b25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gX19ub3JtYWxf
aXRlcmF0b3IoX01fY3VycmVudCAtIF9fbik7IH0KCiAgICAgIGRpZmZlcmVuY2VfdHlwZQogICAg
ICBvcGVyYXRvci0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3ImIF9faSkgY29uc3QKICAgICAgeyBy
ZXR1cm4gX01fY3VycmVudCAtIF9faS5fTV9jdXJyZW50OyB9CgogICAgICBjb25zdCBfSXRlcmF0
b3ImCiAgICAgIGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9CiAgICB9OwojIDY0
OSAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfaXRl
cmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVy
YXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj09KGNv
bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAg
ICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+
JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUg
Ym9vbAogIG9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29u
dGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19y
aHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9J
dGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvciE9
KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywK
ICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWlu
ZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxp
bmUgYm9vbAogIG9wZXJhdG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBf
Q29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf
SXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0g
X19yaHMuYmFzZSgpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFt
ZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0
b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xo
cywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRh
aW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhzLmJhc2UoKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5s
aW5lIGJvb2wKICBvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBf
Q29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf
SXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPCBf
X3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUg
X0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9y
Pihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMs
CiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWlu
ZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGlu
ZSBib29sCiAgb3BlcmF0b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0Nv
bnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jo
cy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0
ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPD0o
Y29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAog
ICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5l
cj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGlu
ZSBib29sCiAgb3BlcmF0b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9D
b250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J
dGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBf
X3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUg
X0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9y
Pj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhz
LAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRh
aW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlu
bGluZSBib29sCiAgb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3Is
IF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9y
PF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+
PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFt
ZSBfQ29udGFpbmVyPgogIGlubGluZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250
YWluZXI+CiAgb3BlcmF0b3IrKHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwg
X0NvbnRhaW5lcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sCiAgICAgICAgICAgIGNvbnN0IF9fbm9y
bWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9faSkKICB7IHJldHVybiBfX25v
cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9
Cn0KIyA3NiAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9z
dGxfYWxnb2Jhc2UuaCIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7CiMgOTEgIi9ob21lL2dvZXJ6aWcv
Z2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAg
aW5saW5lIHZvaWQKICAgIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVy
MiBfX2IpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3
YXJkSXRlcjE+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMjsK
CgogICAgIAogICAgIAogICAgIAogICAgIAoKICAgICAgX1ZhbHVlVHlwZTEgX190bXAgPSAqX19h
OwogICAgICAqX19hID0gKl9fYjsKICAgICAgKl9fYiA9IF9fdG1wOwogICAgfQojIDExOCAiL2hv
bWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnb2Jhc2Uu
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKF9U
cCYgX19hLCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBfVHAgX190bXAgPSBfX2E7CiAg
ICAgIF9fYSA9IF9fYjsKICAgICAgX19iID0gX190bXA7CiAgICB9CiMgMTQ2ICIvaG9tZS9nb2Vy
emlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1pbihjb25z
dCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpCiAgICB7CgogICAgIAoKICAgICAgaWYgKF9fYiA8
IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAxNjYgIi9ob21lL2dvZXJ6aWcv
Z2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWF4KGNvbnN0IF9U
cCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBpZiAoX19hIDwgX19i
KSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDE4NiAiL2hvbWUvZ29lcnppZy9nY2Mt
My4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3QgX1RwJgog
ICAgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQog
ICAgewoKICAgICAgaWYgKF9fY29tcChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJldHVybiBfX2E7
CiAgICB9CiMgMjA0ICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9i
aXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf
Q29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNv
bnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgICBpZiAoX19jb21wKF9f
YSwgX19iKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAyMjEgIi9ob21lL2dvZXJ6
aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlu
bGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsCiAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgaW5w
dXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyAr
K19fcmVzdWx0LCArK19fZmlyc3QpCiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAg
IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz
c0l0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBf
X2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
LAogICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgIHJhbmRvbV9hY2Nl
c3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3Rh
bmNlOwogICAgICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAw
OyAtLV9fbikgewogICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICAgICsrX19maXJz
dDsKICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV90
cml2aWFsKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1
bHQpCiAgICB7CiAgICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICog
KF9fbGFzdCAtIF9fZmlyc3QpKTsKICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9f
Zmlyc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf
T3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X2F1eDIoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19maXJzdCwg
X19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxp
bmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9hdXgyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVl
X3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19p
dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog
ICAgaW5saW5lIF9UcCoKICAgIF9fY29weV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3Qs
CiAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJu
IF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAqCiAgICBfX2NvcHlfYXV4Mihjb25zdCBfVHAq
IF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LAogICAgICAgICAgICAgICAgX1RwKiBfX3Jlc3Vs
dCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xh
c3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt
ZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5w
dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0
SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVU
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46Omhh
c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwogICAgICBy
ZXR1cm4gX091dHB1dEl0ZXIoX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQuYmFzZSgpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0
cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQog
ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6
dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
X3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y
CiAgICAgICAgICBfVHJpdmlhbDsKICAgICAgcmV0dXJuIF9fY29weV9hdXgyKF9fZmlyc3QsIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgX1RyaXZpYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0
ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2Nv
cHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05v
cm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNl
KCksIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAg
IF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1h
bCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdCwgX19sYXN0LCBfX3Jl
c3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CiMgMzM5ICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9p
bmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0
ZXIKICAgIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX091dHB1
dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0lucHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAg
ICAgICByZXR1cm4gX19jb3B5X25pMShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1h
bCgpKTsKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwg
dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMj4KICAgIGlubGluZSBfQmlkaXJlY3Rpb25hbEl0
ZXIyCiAgICBfX2NvcHlfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCBfQmlk
aXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0
b3JfdGFnKQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgKi0t
X19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFs
SXRlcj4KICAgIGlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIKICAgIF9fY29weV9iYWNrd2FyZChf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAg
ICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uOwog
ICAgICBmb3IgKF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQogICAgICAg
ICotLV9fcmVzdWx0ID0gKi0tX19sYXN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgoK
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9C
aWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Jvb2xUeXBlPgogICAgc3Ry
dWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaAogICAgewogICAgICBzdGF0aWMgX0JpZGlyZWN0
aW9uYWxJdGVyMgogICAgICBjb3B5KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwgX0JpZGly
ZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jl
c3VsdCkKICAgICAgewogICAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmQoX19maXJzdCwgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgICAg
fQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9fY29weV9iYWNr
d2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgIHsKICAgICAgc3RhdGlj
IF9UcCoKICAgICAgY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBf
VHAqIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgY29uc3QgcHRyZGlmZl90IF9OdW0gPSBfX2xh
c3QgLSBfX2ZpcnN0OwogICAgICAgIG1lbW1vdmUoX19yZXN1bHQgLSBfTnVtLCBfX2ZpcnN0LCBz
aXplb2YoX1RwKSAqIF9OdW0pOwogICAgICAgIHJldHVybiBfX3Jlc3VsdCAtIF9OdW07CiAgICAg
IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfX2NvcHlfYmFj
a3dhcmRfZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICB7CiAgICAg
IHN0YXRpYyBfVHAqCiAgICAgIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9f
bGFzdCwgX1RwKiBfX3Jlc3VsdCkKICAgICAgewogICAgICAgIHJldHVybiBfX2NvcHlfYmFja3dh
cmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICAgICAgICA6OmNvcHkoX19m
aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3
YXJkX2F1eChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQogICAgewog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8dHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9CSTI+Ojp2YWx1ZV90eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpoYXNf
dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yIF9Ucml2aWFsOwogICAgICByZXR1cm4gX19jb3B5
X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFsPgogICAgICAgICAgICAgICAg
ICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlIDx0
eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9i
YWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0
LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9CSTIoX19jb3B5X2JhY2t3YXJkX2F1eChfX2Zp
cnN0LCBfX2xhc3QsIF9fcmVzdWx0LmJhc2UoKSkpOyB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBf
QkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9v
dXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNl
X3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwg
X19yZXN1bHQpOyB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgog
ICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3Io
X0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsK
ICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmly
c3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBf
X2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19y
ZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9y
bWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5
X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Tm9ybWFsKCkpOwogICAgfQojIDQ3NyAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9j
KysvMy4xLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkx
LCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIGNvcHlfYmFja3dhcmQoX0JJMSBf
X2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAg
ICAgCgoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkxPjo6
X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3Jt
YWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3JtYWwoKSk7CiAgICB9CiMgNTA5
ICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdv
YmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+
CiAgICB2b2lkCiAgICBmaWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX2Zp
cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAg
IH0KIyA1MzEgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMv
c3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5h
bWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVyCiAgICBmaWxsX24oX091dHB1
dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAg
IAoKICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgICAgICpfX2Zp
cnN0ID0gX192YWx1ZTsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCiAgaW5saW5lIHZv
aWQKICBmaWxsKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHVuc2lnbmVkIGNoYXIqIF9fbGFzdCwg
Y29uc3QgdW5zaWduZWQgY2hhciYgX19jKQogIHsKICAgIHVuc2lnbmVkIGNoYXIgX190bXAgPSBf
X2M7CiAgICBtZW1zZXQoX19maXJzdCwgX190bXAsIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAg
aW5saW5lIHZvaWQKICBmaWxsKHNpZ25lZCBjaGFyKiBfX2ZpcnN0LCBzaWduZWQgY2hhciogX19s
YXN0LCBjb25zdCBzaWduZWQgY2hhciYgX19jKQogIHsKICAgIHNpZ25lZCBjaGFyIF9fdG1wID0g
X19jOwogICAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1w
KSwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxpbmUgdm9pZAogIGZpbGwoY2hhciogX19m
aXJzdCwgY2hhciogX19sYXN0LCBjb25zdCBjaGFyJiBfX2MpCiAgewogICAgY2hhciBfX3RtcCA9
IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3Rt
cCksIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+CiAg
ICBpbmxpbmUgdW5zaWduZWQgY2hhcioKICAgIGZpbGxfbih1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0
LCBfU2l6ZSBfX24sIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKICAgIHsKICAgICAgZmlsbChf
X2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2MpOwogICAgICByZXR1cm4gX19maXJzdCArIF9fbjsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+CiAgICBpbmxpbmUgc2lnbmVkIGNoYXIq
CiAgICBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBzaWduZWQgY2hhciYg
X19jKQogICAgewogICAgICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAg
IHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4K
ICAgIGlubGluZSBjaGFyKgogICAgZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29u
c3QgY2hhciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9f
Yyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAgfQojIDYwNiAiL2hvbWUvZ29lcnpp
Zy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIHBh
aXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19m
aXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp
cnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2Zp
cnN0MSAhPSBfX2xhc3QxICYmICpfX2ZpcnN0MSA9PSAqX19maXJzdDIpIHsKICAgICAgICArK19f
Zmlyc3QxOwogICAgICAgICsrX19maXJzdDI7CiAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8X0lu
cHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOwogICAgfQojIDY0MCAi
L2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnb2Jh
c2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJ
dGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9J
bnB1dEl0ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAg
IF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAg
ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwg
Kl9fZmlyc3QyKSkgewogICAgICAgICsrX19maXJzdDE7CiAgICAgICAgKytfX2ZpcnN0MjsKICAg
ICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3Qx
LCBfX2ZpcnN0Mik7CiAgICB9CiMgNjY4ICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRl
L2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgaW5saW5lIGJvb2wKICAgIGVxdWFs
KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lu
cHV0SXRlcjIgX19maXJzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAgICBmb3Ig
KCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICAgICAg
aWYgKCEoKl9fZmlyc3QxID09ICpfX2ZpcnN0MikpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgIHJldHVybiB0cnVlOwogICAgfQojIDY5OSAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5j
bHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRp
Y2F0ZT4KICAgIGlubGluZSBib29sCiAgICBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu
cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAg
ICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCiAg
ICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikK
ICAgICAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KIyA3MzIgIi9ob21lL2dv
ZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAg
ICBib29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg
X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0
ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAg
ICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy
ICE9IF9fbGFzdDIKICAgICAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICAg
ICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19s
YXN0MjsKICAgIH0KIyA3NjcgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMu
MS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy
MSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAg
bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21w
YXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MgogICAgICAgICAgICA7ICsrX19maXJzdDEs
ICsrX19maXJzdDIpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkK
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19m
aXJzdDEpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiBfX2Zp
cnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7CiAgICB9CgogIGlubGluZSBi
b29sCiAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgdW5zaWduZWQgY2hhciogX19maXJz
dDEsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9f
bGFzdDIpCiAgewogICAgY29uc3Qgc2l6ZV90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsK
ICAgIGNvbnN0IHNpemVfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CiAgICBjb25zdCBp
bnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xl
bjIpKTsKICAgIHJldHVybiBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQgPCAwIDogX19sZW4xIDwg
X19sZW4yOwogIH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25z
dCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikKICB7Cgog
ICAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKChjb25zdCBzaWduZWQgY2hhciopIF9f
Zmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQg
Y2hhciopIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0
IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7CgoKCgoKCiAgfQoKfQojIDU0ICIvaG9t
ZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9leHQvc2xpc3QiIDIKIyAxICIv
aG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGxvYy5o
IiAxIDMKIyA4NCAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0
cy9zdGxfYWxsb2MuaCIgMwojIDEgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysr
LzMuMS4xL2Nhc3NlcnQiIDEgMwojIDQ3ICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRl
L2MrKy8zLjEuMS9jYXNzZXJ0IiAzCgojIDEgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMSAzCiMg
NjUgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwpleHRlcm4gIkMiIHsKCgpleHRlcm4gdm9pZCBf
X2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9f
ZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwgX19j
b25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25v
cmV0dXJuX18pKTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJy
bnVtLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9f
YXNzZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCn0KIyA0OSAiL2hvbWUvZ29lcnppZy9n
Y2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvY2Fzc2VydCIgMiAzCiMgODUgIi9ob21lL2dvZXJ6
aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDEg
Ii9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvZnVuY3RleGNl
cHQuaCIgMSAzCiMgMzQgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4x
L2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1
ZGUvYysrLzMuMS4xL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvaG9tZS9nb2Vyemln
L2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFt
ZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2
b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2Fz
dCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBf
X3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2Rv
bWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2Fy
Z3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihj
b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hh
ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3Mp
OwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk
CiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190
aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93
X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA4NiAiL2hvbWUvZ29lcnppZy9nY2Mt
My4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL2hvbWUv
Z29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfdGhyZWFkcy5oIiAx
IDMKIyA1NCAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9z
dGxfdGhyZWFkcy5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKICBzdHJ1Y3QgX1JlZmNvdW50X0Jh
c2UKICB7CgogICAgdHlwZWRlZiBzaXplX3QgX1JDX3Q7CgoKICAgIHZvbGF0aWxlIF9SQ190IF9N
X3JlZl9jb3VudDsKCgogICAgX19ndGhyZWFkX211dGV4X3QgX01fcmVmX2NvdW50X2xvY2s7Cgog
ICAgX1JlZmNvdW50X0Jhc2UoX1JDX3QgX19uKSA6IF9NX3JlZl9jb3VudChfX24pCiAgICB7Cgog
ICAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfX3RtcCA9IDA7CiAgICAgIF9NX3JlZl9jb3VudF9sb2Nr
ID0gX190bXA7CgoKCgoKICAgIH0KCiAgICB2b2lkCiAgICBfTV9pbmNyKCkKICAgIHsKICAgICAg
X19ndGhyZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICAgKytfTV9yZWZf
Y291bnQ7CiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsK
ICAgIH0KCiAgICBfUkNfdAogICAgX01fZGVjcigpCiAgICB7CiAgICAgIF9fZ3RocmVhZF9tdXRl
eF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICAgIHZvbGF0aWxlIF9SQ190IF9fdG1wID0g
LS1fTV9yZWZfY291bnQ7CiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3Vu
dF9sb2NrKTsKICAgICAgcmV0dXJuIF9fdG1wOwogICAgfQogIH07CiMgMTA5ICIvaG9tZS9nb2Vy
emlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICB0
ZW1wbGF0ZTxpbnQgX19kdW1teT4KICAgIHN0cnVjdCBfU3dhcF9sb2NrX3N0cnVjdAogICAgeyBz
dGF0aWMgX19ndGhyZWFkX211dGV4X3QgX1Nfc3dhcF9sb2NrOyB9OwoKICB0ZW1wbGF0ZTxpbnQg
X19kdW1teT4KICAgIF9fZ3RocmVhZF9tdXRleF90CiAgICBfU3dhcF9sb2NrX3N0cnVjdDxfX2R1
bW15Pjo6X1Nfc3dhcF9sb2NrID0gMDsKCgoKICBpbmxpbmUgdW5zaWduZWQgbG9uZwogIF9BdG9t
aWNfc3dhcCh1bnNpZ25lZCBsb25nICogX19wLCB1bnNpZ25lZCBsb25nIF9fcSkKICB7CiAgICBf
X2d0aHJlYWRfbXV0ZXhfbG9jaygmX1N3YXBfbG9ja19zdHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jayk7
CiAgICB1bnNpZ25lZCBsb25nIF9fcmVzdWx0ID0gKl9fcDsKICAgICpfX3AgPSBfX3E7CiAgICBf
X2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfU3dhcF9sb2NrX3N0cnVjdDwwPjo6X1Nfc3dhcF9sb2Nr
KTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9CiMgMTUxICIvaG9tZS9nb2VyemlnL2djYy0zLjEu
MS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICBzdHJ1Y3QgX1NUTF9t
dXRleF9sb2NrCiAgewoKCgoKCiAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9sb2NrOwoKICAgIHZv
aWQKICAgIF9NX2luaXRpYWxpemUoKQogICAgewojIDE4NCAiL2hvbWUvZ29lcnppZy9nY2MtMy4x
LjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgICB9CgogICAgdm9p
ZAogICAgX01fYWNxdWlyZV9sb2NrKCkKICAgIHsKCgoKICAgICAgX19ndGhyZWFkX211dGV4X2xv
Y2soJl9NX2xvY2spOwogICAgfQoKICAgIHZvaWQKICAgIF9NX3JlbGVhc2VfbG9jaygpCiAgICB7
CgoKCiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX2xvY2spOwogICAgfQogIH07CiMg
MjIwICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF90
aHJlYWRzLmgiIDMKICBzdHJ1Y3QgX1NUTF9hdXRvX2xvY2sKICB7CiAgICBfU1RMX211dGV4X2xv
Y2smIF9NX2xvY2s7CgogICAgX1NUTF9hdXRvX2xvY2soX1NUTF9tdXRleF9sb2NrJiBfX2xvY2sp
IDogX01fbG9jayhfX2xvY2spCiAgICB7IF9NX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0KCiAg
ICB+X1NUTF9hdXRvX2xvY2soKSB7IF9NX2xvY2suX01fcmVsZWFzZV9sb2NrKCk7IH0KCiAgcHJp
dmF0ZToKICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9TVExfYXV0b19sb2NrJik7CiAgICBfU1RM
X2F1dG9fbG9jayhjb25zdCBfU1RMX2F1dG9fbG9jayYpOwogIH07Cgp9CiMgODcgIi9ob21lL2dv
ZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwoK
bmFtZXNwYWNlIHN0ZAp7CiMgOTggIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysr
LzMuMS4xL2JpdHMvc3RsX2FsbG9jLmgiIDMKICBjbGFzcyBfX25ld19hbGxvYwogIHsKICBwdWJs
aWM6CiAgICBzdGF0aWMgdm9pZCoKICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVy
biA6Om9wZXJhdG9yIG5ldyhfX24pOyB9CgogICAgc3RhdGljIHZvaWQKICAgIGRlYWxsb2NhdGUo
dm9pZCogX19wLCBzaXplX3QpCiAgICB7IDo6b3BlcmF0b3IgZGVsZXRlKF9fcCk7IH0KICB9Owoj
IDEyMSAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxf
YWxsb2MuaCIgMwogIHRlbXBsYXRlIDxpbnQgX19pbnN0PgogICAgY2xhc3MgX19tYWxsb2NfYWxs
b2NfdGVtcGxhdGUKICAgIHsKICAgIHByaXZhdGU6CiAgICAgIHN0YXRpYyB2b2lkKiBfU19vb21f
bWFsbG9jKHNpemVfdCk7CiAgICAgIHN0YXRpYyB2b2lkKiBfU19vb21fcmVhbGxvYyh2b2lkKiwg
c2l6ZV90KTsKICAgICAgc3RhdGljIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIp
KCk7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxsb2NhdGUoc2l6ZV90
IF9fbikKICAgICAgewogICAgICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAg
ICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24pOwogICAg
ICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVh
bGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCApCiAgICAgIHsgZnJlZShfX3ApOyB9CgogICAgICBz
dGF0aWMgdm9pZCoKICAgICAgcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCAsIHNpemVfdCBf
X25ld19zeikKICAgICAgewogICAgICAgIHZvaWQqIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9f
bmV3X3N6KTsKICAgICAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fcmVh
bGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KCiAg
ICAgIHN0YXRpYyB2b2lkICgqIF9fc2V0X21hbGxvY19oYW5kbGVyKHZvaWQgKCpfX2YpKCkpKSgp
CiAgICAgIHsKICAgICAgICB2b2lkICgqIF9fb2xkKSgpID0gX19tYWxsb2NfYWxsb2Nfb29tX2hh
bmRsZXI7CiAgICAgICAgX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIgPSBfX2Y7CiAgICAgICAg
cmV0dXJuKF9fb2xkKTsKICAgICAgfQogICAgfTsKCgogIHRlbXBsYXRlIDxpbnQgX19pbnN0Pgog
ICAgdm9pZCAoKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfX21hbGxvY19hbGxv
Y19vb21faGFuZGxlcikoKSA9IDA7CgogIHRlbXBsYXRlIDxpbnQgX19pbnN0PgogICAgdm9pZCoK
ICAgIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9tYWxsb2Moc2l6ZV90
IF9fbikKICAgIHsKICAgICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICB2
b2lkKiBfX3Jlc3VsdDsKCiAgICAgIGZvciAoOzspCiAgICAgICAgewogICAgICAgICAgX19teV9t
YWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgICAgaWYg
KDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikKICAgICAgICAgICAgc3RkOjpfX3Rocm93X2JhZF9h
bGxvYygpOwogICAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgICAgX19y
ZXN1bHQgPSBtYWxsb2MoX19uKTsKICAgICAgICAgIGlmIChfX3Jlc3VsdCkKICAgICAgICAgICAg
cmV0dXJuKF9fcmVzdWx0KTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlIDxpbnQgX19pbnN0
PgogICAgdm9pZCoKICAgIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9y
ZWFsbG9jKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9pZCAoKiBfX215X21h
bGxvY19oYW5kbGVyKSgpOwogICAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICAgIGZvciAoOzspCiAg
ICAgICAgewogICAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29v
bV9oYW5kbGVyOwogICAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikKICAgICAg
ICAgICAgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOwogICAgICAgICAgKCpfX215X21hbGxvY19o
YW5kbGVyKSgpOwogICAgICAgICAgX19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uKTsKICAgICAg
ICAgIGlmIChfX3Jlc3VsdCkKICAgICAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgICAgICB9
CiAgICB9CgoKCgoKCiAgdHlwZWRlZiBfX25ld19hbGxvYyBfX21lbV9pbnRlcmZhY2U7CiMgMjE5
ICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGxv
Yy5oIiAzCiAgdGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CiAgY2xhc3MgX19zaW1w
bGVfYWxsb2MKICB7CiAgcHVibGljOgogICAgc3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90IF9f
bikKICAgIHsgcmV0dXJuIDAgPT0gX19uID8gMCA6IChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKF9f
biAqIHNpemVvZiAoX1RwKSk7IH0KCiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0ZSgpCiAgICB7IHJl
dHVybiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXplb2YgKF9UcCkpOyB9CgogICAgc3RhdGlj
IHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgaWYgKDAgIT0gX19u
KSBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YgKF9UcCkpOyB9CgogICAgc3Rh
dGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCkKICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9f
cCwgc2l6ZW9mIChfVHApKTsgfQogIH07CiMgMjUxICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9p
bmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9B
bGxvYz4KICBjbGFzcyBfX2RlYnVnX2FsbG9jCiAgewogIHByaXZhdGU6CiAgICBlbnVtIHtfU19l
eHRyYSA9IDh9OwoKCiAgcHVibGljOgoKICAgIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3Qg
X19uKQogICAgewogICAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6OmFsbG9jYXRl
KF9fbiArIChpbnQpIF9TX2V4dHJhKTsKICAgICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uOwog
ICAgICByZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRyYTsKICAgIH0KCiAgICBzdGF0aWMg
dm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsKICAgICAgY2hhciog
X19yZWFsX3AgPSAoY2hhciopX19wIC0gKGludCkgX1NfZXh0cmE7CiAgICAgIChzdGF0aWNfY2Fz
dDx2b2lkPiAoKCooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24pID8gMCA6IChfX2Fzc2VydF9mYWls
ICgiKihzaXplX3QqKV9fcmVhbF9wID09IF9fbiIsICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9p
bmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGxvYy5oIiwgMjcwLCBfX1BSRVRUWV9GVU5DVElP
Tl9fKSwgMCkpKTsKICAgICAgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcmVhbF9wLCBfX24gKyAoaW50
KSBfU19leHRyYSk7CiAgICB9CgogICAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19w
LCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeikKICAgIHsKICAgICAgY2hhciogX19y
ZWFsX3AgPSAoY2hhciopX19wIC0gKGludCkgX1NfZXh0cmE7CiAgICAgIChzdGF0aWNfY2FzdDx2
b2lkPiAoKCooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeikgPyAwIDogKF9fYXNzZXJ0X2Zh
aWwgKCIqKHNpemVfdCopX19yZWFsX3AgPT0gX19vbGRfc3oiLCAiL2hvbWUvZ29lcnppZy9nY2Mt
My4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxsb2MuaCIsIDI3NywgX19QUkVUVFlf
RlVOQ1RJT05fXyksIDApKSk7CiAgICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKQogICAgICAg
IF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyAoaW50KSBfU19leHRyYSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N6ICsgKGludCkgX1Nf
ZXh0cmEpOwogICAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX25ld19zejsKICAgICAgcmV0dXJu
IF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAgICB9CiAgfTsKIyAzMjQgIi9ob21lL2dvZXJ6
aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxh
dGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgY2xhc3MgX19kZWZhdWx0X2FsbG9jX3Rl
bXBsYXRlCiAgewogIHByaXZhdGU6CiAgICBlbnVtIHtfQUxJR04gPSA4fTsKICAgIGVudW0ge19N
QVhfQllURVMgPSAxMjh9OwogICAgZW51bSB7X05GUkVFTElTVFMgPSBfTUFYX0JZVEVTIC8gX0FM
SUdOfTsKCiAgICB1bmlvbiBfT2JqCiAgICB7CiAgICAgIHVuaW9uIF9PYmoqIF9NX2ZyZWVfbGlz
dF9saW5rOwogICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOwogICAgfTsKCiAgICBzdGF0aWMg
X09iaiogdm9sYXRpbGUgX1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsKCgogICAgc3RhdGljIGNo
YXIqIF9TX3N0YXJ0X2ZyZWU7CiAgICBzdGF0aWMgY2hhciogX1NfZW5kX2ZyZWU7CiAgICBzdGF0
aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsKCiAgICBzdGF0aWMgX1NUTF9tdXRleF9sb2NrIF9TX25v
ZGVfYWxsb2NhdG9yX2xvY2s7CgogICAgc3RhdGljIHNpemVfdAogICAgX1Nfcm91bmRfdXAoc2l6
ZV90IF9fYnl0ZXMpCiAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpIF9BTElHTi0x
KSAmIH4oKHNpemVfdCkgX0FMSUdOIC0gMSkpOyB9CgogICAgc3RhdGljIHNpemVfdAogICAgX1Nf
ZnJlZWxpc3RfaW5kZXgoc2l6ZV90IF9fYnl0ZXMpCiAgICB7IHJldHVybiAoKChfX2J5dGVzKSAr
IChzaXplX3QpX0FMSUdOLTEpLyhzaXplX3QpX0FMSUdOIC0gMSk7IH0KCgoKICAgIHN0YXRpYyB2
b2lkKgogICAgX1NfcmVmaWxsKHNpemVfdCBfX24pOwoKCgogICAgc3RhdGljIGNoYXIqCiAgICBf
U19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLCBpbnQmIF9fbm9ianMpOwoKCgogICAgY2xhc3Mg
X0xvY2sKICAgIHsKICAgIHB1YmxpYzoKICAgICAgX0xvY2soKSB7IGlmIChfX3RocmVhZHMpIF9T
X25vZGVfYWxsb2NhdG9yX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0KICAgICAgfl9Mb2NrKCkg
eyBpZiAoX190aHJlYWRzKSBfU19ub2RlX2FsbG9jYXRvcl9sb2NrLl9NX3JlbGVhc2VfbG9jaygp
OyB9CiAgICB9IF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7CiAgICBmcmllbmQgY2xhc3Mg
X0xvY2s7CgogIHB1YmxpYzoKCiAgICBzdGF0aWMgdm9pZCoKICAgIGFsbG9jYXRlKHNpemVfdCBf
X24pCiAgICB7CiAgICAgIHZvaWQqIF9fcmV0ID0gMDsKCiAgICAgIGlmIChfX24gPiAoc2l6ZV90
KSBfTUFYX0JZVEVTKQogICAgICAgIF9fcmV0ID0gX19tZW1faW50ZXJmYWNlOjphbGxvY2F0ZShf
X24pOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlf
ZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0CiAgICAgICAgICAgICsgX1NfZnJlZWxpc3RfaW5kZXgo
X19uKTsKCgoKICAgICAgICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKICAgICAgICAgIF9PYmoq
IF9fcmVzdHJpY3RfXyBfX3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgIGlmIChf
X3Jlc3VsdCA9PSAwKQogICAgICAgICAgICBfX3JldCA9IF9TX3JlZmlsbChfU19yb3VuZF91cChf
X24pKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICpfX215X2Zy
ZWVfbGlzdCA9IF9fcmVzdWx0IC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgIF9f
cmV0ID0gX19yZXN1bHQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jl
dDsKICAgIH07CgoKICAgIHN0YXRpYyB2b2lkCiAgICBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6
ZV90IF9fbikKICAgIHsKICAgICAgaWYgKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpCiAgICAg
ICAgX19tZW1faW50ZXJmYWNlOjpkZWFsbG9jYXRlKF9fcCwgX19uKTsKICAgICAgZWxzZQogICAg
ICAgIHsKICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdAogICAgICAgICAg
ICA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAgICAgICAgICBfT2Jq
KiBfX3EgPSAoX09iaiopX19wOwoKCgogICAgICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwog
ICAgICAgICAgX19xIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAg
ICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19xOwogICAgICAgIH0KICAgIH0KCiAgICBzdGF0aWMg
dm9pZCoKICAgIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBf
X25ld19zeik7CiAgfTsKCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pgog
ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mKQogICAgeyByZXR1cm4gdHJ1ZTsgfQoK
ICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGlubGluZSBib29sCiAg
ICBvcGVyYXRvciE9KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9f
aW5zdD4mLAogICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190
aHJlYWRzLCBfX2luc3Q+JikKICAgIHsgcmV0dXJuIGZhbHNlOyB9CgoKCgoKICB0ZW1wbGF0ZTxi
b29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGNoYXIqCiAgICBfX2RlZmF1bHRfYWxsb2Nf
dGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19jaHVua19hbGxvYyhzaXplX3QgX19zaXpl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50JiBfX25vYmpzKQogICAgewogICAgICBjaGFyKiBfX3Jlc3VsdDsKICAgICAg
c2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgICBzaXplX3QgX19i
eXRlc19sZWZ0ID0gX1NfZW5kX2ZyZWUgLSBfU19zdGFydF9mcmVlOwoKICAgICAgaWYgKF9fYnl0
ZXNfbGVmdCA+PSBfX3RvdGFsX2J5dGVzKQogICAgICB7CiAgICAgICAgX19yZXN1bHQgPSBfU19z
dGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAg
ICByZXR1cm4oX19yZXN1bHQpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYnl0ZXNfbGVmdCA+
PSBfX3NpemUpCiAgICAgICAgewogICAgICAgICAgX19ub2JqcyA9IChpbnQpKF9fYnl0ZXNfbGVm
dC9fX3NpemUpOwogICAgICAgICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAg
ICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgICBfU19zdGFydF9mcmVl
ICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgICAgIH0K
ICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX2J5dGVzX3RvX2dldCA9CiAg
ICAgICAgICAgIDIgKiBfX3RvdGFsX2J5dGVzICsgX1Nfcm91bmRfdXAoX1NfaGVhcF9zaXplID4+
IDQpOwoKICAgICAgICAgIGlmIChfX2J5dGVzX2xlZnQgPiAwKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0ID0KICAgICAgICAgICAgICAg
IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fYnl0ZXNfbGVmdCk7CgogICAgICAg
ICAgICAgICgoX09iaiopX1Nfc3RhcnRfZnJlZSkgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19t
eV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0
YXJ0X2ZyZWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciop
IF9fbWVtX2ludGVyZmFjZTo6YWxsb2NhdGUoX19ieXRlc190b19nZXQpOwogICAgICAgICAgaWYg
KDAgPT0gX1Nfc3RhcnRfZnJlZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVfdCBf
X2k7CiAgICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0OwogICAgICAg
ICAgICAgIF9PYmoqIF9fcDsKCgoKICAgICAgICAgICAgICBfX2kgPSBfX3NpemU7CiAgICAgICAg
ICAgICAgZm9yICg7IF9faSA8PSAoc2l6ZV90KSBfTUFYX0JZVEVTOyBfX2kgKz0gKHNpemVfdCkg
X0FMSUdOKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX215X2ZyZWVfbGlz
dCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9faSk7CiAgICAgICAgICAgICAg
ICAgIF9fcCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICAgICAgaWYgKDAgIT0gX19w
KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICpfX215X2ZyZWVf
bGlzdCA9IF9fcCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICAgICAgICAgICAgICAgIF9T
X3N0YXJ0X2ZyZWUgPSAoY2hhciopX19wOwogICAgICAgICAgICAgICAgICAgICAgX1NfZW5kX2Zy
ZWUgPSBfU19zdGFydF9mcmVlICsgX19pOwogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKF9T
X2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2JqcykpOwoKCiAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gMDsKICAgICAgICAg
ICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKV9fbWVtX2ludGVyZmFjZTo6YWxsb2NhdGUoX19i
eXRlc190b19nZXQpOwoKCiAgICAgICAgICAgIH0KICAgICAgICAgIF9TX2hlYXBfc2l6ZSArPSBf
X2J5dGVzX3RvX2dldDsKICAgICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9f
Ynl0ZXNfdG9fZ2V0OwogICAgICAgICAgcmV0dXJuKF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwgX19u
b2JqcykpOwogICAgICAgIH0KICAgIH0KCgoKCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBp
bnQgX19pbnN0PgogICAgdm9pZCoKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVh
ZHMsIF9faW5zdD46Ol9TX3JlZmlsbChzaXplX3QgX19uKQogICAgewogICAgICBpbnQgX19ub2Jq
cyA9IDIwOwogICAgICBjaGFyKiBfX2NodW5rID0gX1NfY2h1bmtfYWxsb2MoX19uLCBfX25vYmpz
KTsKICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0OwogICAgICBfT2JqKiBfX3Jl
c3VsdDsKICAgICAgX09iaiogX19jdXJyZW50X29iajsKICAgICAgX09iaiogX19uZXh0X29iajsK
ICAgICAgaW50IF9faTsKCiAgICAgIGlmICgxID09IF9fbm9ianMpIHJldHVybihfX2NodW5rKTsK
ICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChf
X24pOwoKCiAgICAgIF9fcmVzdWx0ID0gKF9PYmoqKV9fY2h1bms7CiAgICAgICpfX215X2ZyZWVf
bGlzdCA9IF9fbmV4dF9vYmogPSAoX09iaiopKF9fY2h1bmsgKyBfX24pOwogICAgICBmb3IgKF9f
aSA9IDE7IDsgX19pKyspIHsKICAgICAgICBfX2N1cnJlbnRfb2JqID0gX19uZXh0X29iajsKICAg
ICAgICBfX25leHRfb2JqID0gKF9PYmoqKSgoY2hhciopX19uZXh0X29iaiArIF9fbik7CiAgICAg
ICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkgewogICAgICAgICAgX19jdXJyZW50X29iaiAtPiBf
TV9mcmVlX2xpc3RfbGluayA9IDA7CiAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IF9fbmV4dF9vYmo7
CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICB9CgoKICB0ZW1w
bGF0ZTxib29sIHRocmVhZHMsIGludCBpbnN0PgogICAgdm9pZCoKICAgIF9fZGVmYXVsdF9hbGxv
Y190ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6cmVhbGxvY2F0ZSh2b2lkKiBfX3AsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f
b2xkX3N6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBfX25ld19zeikKICAgIHsKICAgICAgdm9pZCogX19yZXN1bHQ7CiAgICAg
IHNpemVfdCBfX2NvcHlfc3o7CgogICAgICBpZiAoX19vbGRfc3ogPiAoc2l6ZV90KSBfTUFYX0JZ
VEVTICYmIF9fbmV3X3N6ID4gKHNpemVfdCkgX01BWF9CWVRFUykgewogICAgICAgIHJldHVybihy
ZWFsbG9jKF9fcCwgX19uZXdfc3opKTsKICAgICAgfQogICAgICBpZiAoX1Nfcm91bmRfdXAoX19v
bGRfc3opID09IF9TX3JvdW5kX3VwKF9fbmV3X3N6KSkgcmV0dXJuKF9fcCk7CiAgICAgIF9fcmVz
dWx0ID0gYWxsb2NhdGUoX19uZXdfc3opOwogICAgICBfX2NvcHlfc3ogPSBfX25ld19zeiA+IF9f
b2xkX3N6PyBfX29sZF9zeiA6IF9fbmV3X3N6OwogICAgICBtZW1jcHkoX19yZXN1bHQsIF9fcCwg
X19jb3B5X3N6KTsKICAgICAgZGVhbGxvY2F0ZShfX3AsIF9fb2xkX3N6KTsKICAgICAgcmV0dXJu
KF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+
CiAgX1NUTF9tdXRleF9sb2NrCiAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywg
X19pbnN0Pjo6X1Nfbm9kZV9hbGxvY2F0b3JfbG9jawogID0geyAwIH07CgogIHRlbXBsYXRlPGJv
b2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogIGNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0
ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3N0YXJ0X2ZyZWUgPSAwOwoKICB0ZW1wbGF0ZTxib29s
IF9fdGhyZWFkcywgaW50IF9faW5zdD4KICBjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8
X190aHJlYWRzLCBfX2luc3Q+OjpfU19lbmRfZnJlZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190
aHJlYWRzLCBpbnQgX19pbnN0PgogIHNpemVfdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190
aHJlYWRzLCBfX2luc3Q+OjpfU19oZWFwX3NpemUgPSAwOwoKICB0ZW1wbGF0ZTxib29sIF9fdGhy
ZWFkcywgaW50IF9faW5zdD4KICB0eXBlbmFtZSBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190
aHJlYWRzLCBfX2luc3Q+OjpfT2JqKiB2b2xhdGlsZQogIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0
ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107CgogIHR5cGVk
ZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsIDA+IF9fYWxsb2M7CiAgdHlwZWRlZiBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8ZmFsc2UsIDA+IF9fc2luZ2xlX2NsaWVudF9hbGxvYzsK
IyA2MTMgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3Rs
X2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgYWxsb2NhdG9yCnsKICB0eXBl
ZGVmIF9fYWxsb2MgX0FsbG9jOwpwdWJsaWM6CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwog
IHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRl
cjsKICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVm
ZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBf
VHAgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewog
ICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKCiAgYWxsb2NhdG9yKCkgdGhy
b3coKSB7fQogIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3ImKSB0aHJvdygpIHt9CiAgdGVtcGxh
dGUgPGNsYXNzIF9UcDE+IGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3I8X1RwMT4mKSB0aHJvdygp
IHt9CiAgfmFsbG9jYXRvcigpIHRocm93KCkge30KCiAgcG9pbnRlciBhZGRyZXNzKHJlZmVyZW5j
ZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KICBjb25zdF9wb2ludGVyIGFkZHJlc3MoY29u
c3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKCgogIF9UcCogYWxsb2Nh
dGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKSB7CiAgICByZXR1cm4gX19uICE9IDAg
PyBzdGF0aWNfY2FzdDxfVHAqPihfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSkK
ICAgICAgICAgICAgICAgICAgICA6IDA7CiAgfQoKCiAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIg
X19wLCBzaXplX3R5cGUgX19uKQogICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBz
aXplb2YoX1RwKSk7IH0KCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKQogICAg
eyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBv
aW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2
b2lkIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRlPD4K
Y2xhc3MgYWxsb2NhdG9yPHZvaWQ+IHsKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlw
ZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkKiBw
b2ludGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZv
aWQgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewog
ICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKfTsKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgYWxsb2NhdG9y
PF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGFs
bG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9
CiMgNjk1ICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0
bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9f
YWxsb2NhdG9yCnsKICBfQWxsb2MgX191bmRlcmx5aW5nX2FsbG9jOwoKICB0eXBlZGVmIHNpemVf
dCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk
ZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5
cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5j
ZTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3Ry
dWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7
CiAgfTsKCiAgX19hbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgX19hbGxvY2F0b3IoY29uc3QgX19h
bGxvY2F0b3ImIF9fYSkgdGhyb3coKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5k
ZXJseWluZ19hbGxvYykge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBfX2FsbG9jYXRvcihj
b25zdCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93KCkKICAgIDogX191bmRl
cmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgfl9fYWxsb2NhdG9yKCkg
dGhyb3coKSB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1
cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBj
b25zdCB7IHJldHVybiAmX194OyB9CgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNv
bnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAgPyBzdGF0aWNfY2Fz
dDxfVHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQog
ICAgICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlw
ZSBfX24pCiAgICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6
ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsg
cmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2lu
dGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9p
ZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0FsbG9jPgpjbGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsKICB0eXBlZGVmIHNp
emVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5
cGVkZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7
CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1
Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsK
ICB9Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICBy
ZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJu
IF9fYTEuX191bmRlcmx5aW5nX2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9CgoK
CgoKCgp0ZW1wbGF0ZSA8aW50IGluc3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19t
YWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1w
bGF0ZSA8aW50IF9faW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19h
bGxvY190ZW1wbGF0ZTxfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21h
bGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JikKewogIHJldHVybiBmYWxzZTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2RlYnVnX2Fs
bG9jPF9BbGxvYz4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVidWdfYWxsb2M8
X0FsbG9jPiYpIHsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4g
ZmFsc2U7Cn0KIyA4NDAgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4x
L2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRv
cj4Kc3RydWN0IF9BbGxvY190cmFpdHMKewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNl
bGVzcyA9IGZhbHNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXRvcjo6dGVtcGxhdGUgcmVi
aW5kPF9UcD46Om90aGVyIGFsbG9jYXRvcl90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0FsbG9jYXRvcj4KY29uc3QgYm9vbCBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRv
cj46Ol9TX2luc3RhbmNlbGVzczsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxPgpz
dHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIGFsbG9jYXRvcjxfVHAxPiA+CnsKICBzdGF0aWMgY29u
c3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8
X1RwLCBfX2FsbG9jPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIGFsbG9jYXRvcjxfVHA+IGFsbG9j
YXRvcl90eXBlOwp9OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgaW50IF9faW5zdD4Kc3RydWN0
IF9BbGxvY190cmFpdHM8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4Kewog
IHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBfX3Np
bXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBfQWxsb2Nf
dHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8
X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGJvb2wg
X190aHJlYWRzLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fZGVmYXVs
dF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJv
b2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwg
X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAgICAgICBf
QWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3Rl
bXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRz
PF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2lu
c3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVidWdf
YWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBf
X2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoKCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9UcDEsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9U
cCwKICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2Nf
dGVtcGxhdGU8X19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVz
cyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3Rl
bXBsYXRlPF9faW5zdD4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwg
X19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGJvb2wgX190aHIsIGludCBfX2luc3Q+CnN0
cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9y
PF9UcDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlZmF1bHRfYWxsb2Nf
dGVtcGxhdGU8X190aHIsIF9faW5zdD4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0
YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRf
YWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0
eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9f
aW5zdD4gPgogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX1RwMSwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9f
YWxsb2NhdG9yPF9UcDEsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+ID4KewogIHN0YXRpYyBjb25z
dCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxf
VHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxv
Y2F0b3I8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoK
CgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBhbGxvY2F0b3I8Y2hhcj47CiAgZXh0ZXJuIHRlbXBs
YXRlIGNsYXNzIGFsbG9jYXRvcjx3Y2hhcl90PjsKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsIDA+OwoKfQojIDU1ICIvaG9tZS9nb2Vyemln
L2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9leHQvc2xpc3QiIDIKIyAxICIvaG9tZS9nb2Vy
emlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAz
CiMgNjcgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3Rs
X2NvbnN0cnVjdC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBf
VDEsIGNsYXNzIF9UMj4KICAgIGlubGluZSB2b2lkCiAgICBfQ29uc3RydWN0KF9UMSogX19wLCBj
b25zdCBfVDImIF9fdmFsdWUpCiAgICB7IG5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KF9fcCkpIF9U
MShfX3ZhbHVlKTsgfQoKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgogICAgaW5saW5lIHZv
aWQKICAgIF9Db25zdHJ1Y3QoX1QxKiBfX3ApCiAgICB7IG5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+
KF9fcCkpIF9UMSgpOyB9CiMgOTggIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysr
LzMuMS4xL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJh
dG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7
IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgX0Rlc3Ryb3koJipfX2ZpcnN0
KTsgfQojIDExMiAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0
cy9zdGxfY29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4K
ICAgIGlubGluZSB2b2lkCiAgICBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3
YXJkSXRlcmF0b3IsIF9fdHJ1ZV90eXBlKQogICAgeyB9CgoKCgoKCiAgdGVtcGxhdGUgPGNsYXNz
IF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBfRGVzdHJveShfVHAqIF9fcG9pbnRlcikKICAgIHsg
X19wb2ludGVyLT5+X1RwKCk7IH0KIyAxMzQgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1
ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX0Rlc3Ryb3koX0ZvcndhcmRJdGVy
YXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUK
ICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZV90eXBlPjo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcgogICAg
ICAgICAgICAgICAgICAgICAgIF9IYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwoKICAgICAgX19kZXN0
cm95X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9IYXNfdHJpdmlhbF9kZXN0cnVjdG9yKCkpOwogICAg
fQp9CiMgNTYgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2V4dC9z
bGlzdCIgMgojIDEgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2Jp
dHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgNjYgIi9ob21lL2dvZXJ6aWcvZ2NjLTMuMS4x
L2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwpuYW1lc3BhY2Ug
c3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9h
dXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBjb3B5KF9fZmlyc3QsIF9fbGFzdCwg
X19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9G
b3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfYXV4
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19y
ZXN1bHQ7CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf
X2ZpcnN0LCArK19fY3VyKQogICAgICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7
CiAgICAgICAgcmV0dXJuIF9fY3VyOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7
CiAgICAgICAgICBfRGVzdHJveShfX3Jlc3VsdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAg
ICAgICAgfQogICAgfQojIDEwNiAiL2hvbWUvZ29lcnppZy9nY2MtMy4xLjEvaW5jbHVkZS9jKysv
My4xLjEvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgog
ICAgdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBl
IF9Jc19QT0Q7CiAgICAgIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX19maXJzdCwg
X19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsKICAgIH0KCiAgaW5saW5lIGNoYXIqCiAgdW5p
bml0aWFsaXplZF9jb3B5KGNvbnN0IGNoYXIqIF9fZmlyc3QsIGNvbnN0IGNoYXIqIF9fbGFzdCwg
Y2hhciogX19yZXN1bHQpCiAgewogICAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgX19sYXN0
IC0gX19maXJzdCk7CiAgICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7CiAg
fQoKICBpbmxpbmUgd2NoYXJfdCoKICB1bmluaXRpYWxpemVkX2NvcHkoY29uc3Qgd2NoYXJfdCog
X19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0LAogICAgICAgICAgICAgICAgICAgICB3Y2hh
cl90KiBfX3Jlc3VsdCkKICB7CiAgICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2Yo
d2NoYXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9f
bGFzdCAtIF9fZmlyc3QpOwogIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs
IHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9h
dXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgeyBmaWxs
KF9fZmlyc3QsIF9fbGFzdCwgX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0
ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChf
Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQogICAgewogICAgICBf
Rm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogICAgICB0cnkgewogICAgICAgIGZvciAoIDsg
X19jdXIgIT0gX19sYXN0OyArK19fY3VyKQogICAgICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCBf
X3gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJv
eShfX2ZpcnN0LCBfX2N1cik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CiMgMTY0
ICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF91bmlu
aXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l
IF9UcD4KICAgIGlubGluZSB2b2lkCiAgICB1bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX194KQogICAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90
eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFs
dWVUeXBlPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAgICAgX191bmluaXRpYWxpemVkX2ZpbGxf
YXV4KF9fZmlyc3QsIF9fbGFzdCwgX194LCBfSXNfUE9EKCkpOwogICAgfQoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAg
IGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3
YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHJldHVybiBmaWxsX24o
X19maXJzdCwgX19uLCBfX3gpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0
ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9f
dW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90
eXBlKQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogICAgICB0cnkg
ewogICAgICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19jdXIpCiAgICAgICAgICBfQ29u
c3RydWN0KCYqX19jdXIsIF9feCk7CiAgICAgICAgcmV0dXJuIF9fY3VyOwogICAgICB9CiAgICAg
IGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7
CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CiMgMjEwICIvaG9tZS9nb2VyemlnL2dj
Yy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBf
VHA+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICB1bmluaXRpYWxpemVkX2ZpbGxfbihfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9feCkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlw
ZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVl
VHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRf
ZmlsbF9uX2F1eChfX2ZpcnN0LCBfX24sIF9feCwgX0lzX1BPRCgpKTsKICAgIH0KIyAyMjcgIi9o
b21lL2dvZXJ6aWcvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX3VuaW5pdGlh
bGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w
dXRJdGVyMiwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgog
ICAgX191bmluaXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIg
X19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlk
ID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAg
IHRyeSB7CiAgICAgICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0
MiwgX19taWQpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBf
RGVzdHJveShfX3Jlc3VsdCwgX19taWQpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAg
fQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlw
ZW5hbWUgX0lucHV0SXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFs
aXplZF9maWxsX2NvcHkoX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIgX19taWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0
KQogICAgewogICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19yZXN1bHQsIF9fbWlkLCBfX3gpOwog
ICAgICB0cnkgewogICAgICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19s
YXN0LCBfX21pZCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAg
IF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAg
ICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJk
SXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5pbml0aWFsaXplZF9j
b3B5X2ZpbGwoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRl
ciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkK
ICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkMiA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2Zp
cnN0MSwgX19sYXN0MSwgX19maXJzdDIpOwogICAgICB0cnkgewogICAgICAgIHVuaW5pdGlhbGl6
ZWRfZmlsbChfX21pZDIsIF9fbGFzdDIsIF9feCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQog
ICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QyLCBfX21pZDIpOwogICAgICAgICAg
dGhyb3c7CiAgICAgICAgfQogICAgfQoKfQojIDU3ICIvaG9tZS9nb2VyemlnL2djYy0zLjEuMS9p
bmNsdWRlL2MrKy8zLjEuMS9leHQvc2xpc3QiIDIKCgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKdXNp
bmcgc3RkOjpzaXplX3Q7CnVzaW5nIHN0ZDo6cHRyZGlmZl90Owp1c2luZyBzdGQ6Ol9BbGxvY190
cmFpdHM7CnVzaW5nIHN0ZDo6X0NvbnN0cnVjdDsKdXNpbmcgc3RkOjpfRGVzdHJveTsKdXNpbmcg
c3RkOjphbGxvY2F0b3I7CgpzdHJ1Y3QgX1NsaXN0X25vZGVfYmFzZQp7CiAgX1NsaXN0X25vZGVf
YmFzZSogX01fbmV4dDsKfTsKCmlubGluZSBfU2xpc3Rfbm9kZV9iYXNlKgpfX3NsaXN0X21ha2Vf
bGluayhfU2xpc3Rfbm9kZV9iYXNlKiBfX3ByZXZfbm9kZSwKICAgICAgICAgICAgICAgICAgX1Ns
aXN0X25vZGVfYmFzZSogX19uZXdfbm9kZSkKewogIF9fbmV3X25vZGUtPl9NX25leHQgPSBfX3By
ZXZfbm9kZS0+X01fbmV4dDsKICBfX3ByZXZfbm9kZS0+X01fbmV4dCA9IF9fbmV3X25vZGU7CiAg
cmV0dXJuIF9fbmV3X25vZGU7Cn0KCmlubGluZSBfU2xpc3Rfbm9kZV9iYXNlKgpfX3NsaXN0X3By
ZXZpb3VzKF9TbGlzdF9ub2RlX2Jhc2UqIF9faGVhZCwKICAgICAgICAgICAgICAgICBjb25zdCBf
U2xpc3Rfbm9kZV9iYXNlKiBfX25vZGUpCnsKICB3aGlsZSAoX19oZWFkICYmIF9faGVhZC0+X01f
bmV4dCAhPSBfX25vZGUpCiAgICBfX2hlYWQgPSBfX2hlYWQtPl9NX25leHQ7CiAgcmV0dXJuIF9f
aGVhZDsKfQoKaW5saW5lIGNvbnN0IF9TbGlzdF9ub2RlX2Jhc2UqCl9fc2xpc3RfcHJldmlvdXMo
Y29uc3QgX1NsaXN0X25vZGVfYmFzZSogX19oZWFkLAogICAgICAgICAgICAgICAgIGNvbnN0IF9T
bGlzdF9ub2RlX2Jhc2UqIF9fbm9kZSkKewogIHdoaWxlIChfX2hlYWQgJiYgX19oZWFkLT5fTV9u
ZXh0ICE9IF9fbm9kZSkKICAgIF9faGVhZCA9IF9faGVhZC0+X01fbmV4dDsKICByZXR1cm4gX19o
ZWFkOwp9CgppbmxpbmUgdm9pZCBfX3NsaXN0X3NwbGljZV9hZnRlcihfU2xpc3Rfbm9kZV9iYXNl
KiBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NsaXN0X25vZGVfYmFz
ZSogX19iZWZvcmVfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TbGlz
dF9ub2RlX2Jhc2UqIF9fYmVmb3JlX2xhc3QpCnsKICBpZiAoX19wb3MgIT0gX19iZWZvcmVfZmly
c3QgJiYgX19wb3MgIT0gX19iZWZvcmVfbGFzdCkgewogICAgX1NsaXN0X25vZGVfYmFzZSogX19m
aXJzdCA9IF9fYmVmb3JlX2ZpcnN0LT5fTV9uZXh0OwogICAgX1NsaXN0X25vZGVfYmFzZSogX19h
ZnRlciA9IF9fcG9zLT5fTV9uZXh0OwogICAgX19iZWZvcmVfZmlyc3QtPl9NX25leHQgPSBfX2Jl
Zm9yZV9sYXN0LT5fTV9uZXh0OwogICAgX19wb3MtPl9NX25leHQgPSBfX2ZpcnN0OwogICAgX19i
ZWZvcmVfbGFzdC0+X01fbmV4dCA9IF9fYWZ0ZXI7CiAgfQp9CgppbmxpbmUgdm9pZApfX3NsaXN0
X3NwbGljZV9hZnRlcihfU2xpc3Rfbm9kZV9iYXNlKiBfX3BvcywgX1NsaXN0X25vZGVfYmFzZSog
X19oZWFkKQp7CiAgX1NsaXN0X25vZGVfYmFzZSogX19iZWZvcmVfbGFzdCA9IF9fc2xpc3RfcHJl
dmlvdXMoX19oZWFkLCAwKTsKICBpZiAoX19iZWZvcmVfbGFzdCAhPSBfX2hlYWQpIHsKICAgIF9T
bGlzdF9ub2RlX2Jhc2UqIF9fYWZ0ZXIgPSBfX3Bvcy0+X01fbmV4dDsKICAgIF9fcG9zLT5fTV9u
ZXh0ID0gX19oZWFkLT5fTV9uZXh0OwogICAgX19oZWFkLT5fTV9uZXh0ID0gMDsKICAgIF9fYmVm
b3JlX2xhc3QtPl9NX25leHQgPSBfX2FmdGVyOwogIH0KfQoKaW5saW5lIF9TbGlzdF9ub2RlX2Jh
c2UqIF9fc2xpc3RfcmV2ZXJzZShfU2xpc3Rfbm9kZV9iYXNlKiBfX25vZGUpCnsKICBfU2xpc3Rf
bm9kZV9iYXNlKiBfX3Jlc3VsdCA9IF9fbm9kZTsKICBfX25vZGUgPSBfX25vZGUtPl9NX25leHQ7
CiAgX19yZXN1bHQtPl9NX25leHQgPSAwOwogIHdoaWxlKF9fbm9kZSkgewogICAgX1NsaXN0X25v
ZGVfYmFzZSogX19uZXh0ID0gX19ub2RlLT5fTV9uZXh0OwogICAgX19ub2RlLT5fTV9uZXh0ID0g
X19yZXN1bHQ7CiAgICBfX3Jlc3VsdCA9IF9fbm9kZTsKICAgIF9fbm9kZSA9IF9fbmV4dDsKICB9
CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgppbmxpbmUgc2l6ZV90IF9fc2xpc3Rfc2l6ZShfU2xpc3Rf
bm9kZV9iYXNlKiBfX25vZGUpCnsKICBzaXplX3QgX19yZXN1bHQgPSAwOwogIGZvciAoIDsgX19u
b2RlICE9IDA7IF9fbm9kZSA9IF9fbm9kZS0+X01fbmV4dCkKICAgICsrX19yZXN1bHQ7CiAgcmV0
dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX1NsaXN0X25vZGUg
OiBwdWJsaWMgX1NsaXN0X25vZGVfYmFzZQp7CiAgX1RwIF9NX2RhdGE7Cn07CgpzdHJ1Y3QgX1Ns
aXN0X2l0ZXJhdG9yX2Jhc2UKewogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVm
IHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBzdGQ6OmZvcndhcmRfaXRlcmF0
b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwoKICBfU2xpc3Rfbm9kZV9iYXNlKiBfTV9ub2RlOwoK
ICBfU2xpc3RfaXRlcmF0b3JfYmFzZShfU2xpc3Rfbm9kZV9iYXNlKiBfX3gpIDogX01fbm9kZShf
X3gpIHt9CiAgdm9pZCBfTV9pbmNyKCkgeyBfTV9ub2RlID0gX01fbm9kZS0+X01fbmV4dDsgfQoK
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgX1NsaXN0X2l0ZXJhdG9yX2Jhc2UmIF9feCkgY29uc3Qg
ewogICAgcmV0dXJuIF9NX25vZGUgPT0gX194Ll9NX25vZGU7CiAgfQogIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBfU2xpc3RfaXRlcmF0b3JfYmFzZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01f
bm9kZSAhPSBfX3guX01fbm9kZTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
UmVmLCBjbGFzcyBfUHRyPgpzdHJ1Y3QgX1NsaXN0X2l0ZXJhdG9yIDogcHVibGljIF9TbGlzdF9p
dGVyYXRvcl9iYXNlCnsKICB0eXBlZGVmIF9TbGlzdF9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+
IGl0ZXJhdG9yOwogIHR5cGVkZWYgX1NsaXN0X2l0ZXJhdG9yPF9UcCwgY29uc3QgX1RwJiwgY29u
c3QgX1RwKj4gY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiBfU2xpc3RfaXRlcmF0b3I8X1RwLCBf
UmVmLCBfUHRyPiBfU2VsZjsKCiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9Q
dHIgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWYgcmVmZXJlbmNlOwogIHR5cGVkZWYgX1NsaXN0X25v
ZGU8X1RwPiBfTm9kZTsKCiAgX1NsaXN0X2l0ZXJhdG9yKF9Ob2RlKiBfX3gpIDogX1NsaXN0X2l0
ZXJhdG9yX2Jhc2UoX194KSB7fQogIF9TbGlzdF9pdGVyYXRvcigpIDogX1NsaXN0X2l0ZXJhdG9y
X2Jhc2UoMCkge30KICBfU2xpc3RfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9feCkgOiBfU2xp
c3RfaXRlcmF0b3JfYmFzZShfX3guX01fbm9kZSkge30KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigp
IGNvbnN0IHsgcmV0dXJuICgoX05vZGUqKSBfTV9ub2RlKS0+X01fZGF0YTsgfQogIHBvaW50ZXIg
b3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogIF9TZWxmJiBv
cGVyYXRvcisrKCkKICB7CiAgICBfTV9pbmNyKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9T
ZWxmIG9wZXJhdG9yKysoaW50KQogIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICBfTV9p
bmNyKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwojIDIxMyAiL2hvbWUvZ29lcnppZy9nY2Mt
My4xLjEvaW5jbHVkZS9jKysvMy4xLjEvZXh0L3NsaXN0Igp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQWxsb2NhdG9yLCBib29sIF9Jc1N0YXRpYz4KY2xhc3MgX1NsaXN0X2FsbG9jX2Jhc2Ug
ewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCxfQWxsb2NhdG9y
Pjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90
eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvcjsgfQoK
ICBfU2xpc3RfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9NX25vZGVf
YWxsb2NhdG9yKF9fYSkge30KCnByb3RlY3RlZDoKICBfU2xpc3Rfbm9kZTxfVHA+KiBfTV9nZXRf
bm9kZSgpCiAgICB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsgfQogIHZv
aWQgX01fcHV0X25vZGUoX1NsaXN0X25vZGU8X1RwPiogX19wKQogICAgeyBfTV9ub2RlX2FsbG9j
YXRvci5kZWFsbG9jYXRlKF9fcCwgMSk7IH0KCnByb3RlY3RlZDoKICB0eXBlbmFtZSBfQWxsb2Nf
dHJhaXRzPF9TbGlzdF9ub2RlPF9UcD4sX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAg
ICAgICAgX01fbm9kZV9hbGxvY2F0b3I7CiAgX1NsaXN0X25vZGVfYmFzZSBfTV9oZWFkOwp9OwoK
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNsYXNzIF9TbGlzdF9hbGxv
Y19iYXNlPF9UcCxfQWxsb2NhdG9yLCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1l
IF9BbGxvY190cmFpdHM8X1RwLF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAg
YWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsg
cmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX1NsaXN0X2FsbG9jX2Jhc2UoY29uc3QgYWxs
b2NhdG9yX3R5cGUmKSB7fQoKcHJvdGVjdGVkOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3Ry
YWl0czxfU2xpc3Rfbm9kZTxfVHA+LCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUKICAgICAgICAg
IF9BbGxvY190eXBlOwogIF9TbGlzdF9ub2RlPF9UcD4qIF9NX2dldF9ub2RlKCkgeyByZXR1cm4g
X0FsbG9jX3R5cGU6OmFsbG9jYXRlKDEpOyB9CiAgdm9pZCBfTV9wdXRfbm9kZShfU2xpc3Rfbm9k
ZTxfVHA+KiBfX3ApIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX19wLCAxKTsgfQoKcHJvdGVj
dGVkOgogIF9TbGlzdF9ub2RlX2Jhc2UgX01faGVhZDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfU2xpc3RfYmFzZQogIDogcHVibGljIF9TbGlzdF9hbGxv
Y19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190
cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CnsKICB0eXBlZGVmIF9TbGlzdF9h
bGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9j
X3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwog
IHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoK
ICBfU2xpc3RfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfQmFzZShfX2Ep
IHsgdGhpcy0+X01faGVhZC5fTV9uZXh0ID0gMDsgfQogIH5fU2xpc3RfYmFzZSgpIHsgX01fZXJh
c2VfYWZ0ZXIoJnRoaXMtPl9NX2hlYWQsIDApOyB9Cgpwcm90ZWN0ZWQ6CgogIF9TbGlzdF9ub2Rl
X2Jhc2UqIF9NX2VyYXNlX2FmdGVyKF9TbGlzdF9ub2RlX2Jhc2UqIF9fcG9zKQogIHsKICAgIF9T
bGlzdF9ub2RlPF9UcD4qIF9fbmV4dCA9IChfU2xpc3Rfbm9kZTxfVHA+KikgKF9fcG9zLT5fTV9u
ZXh0KTsKICAgIF9TbGlzdF9ub2RlX2Jhc2UqIF9fbmV4dF9uZXh0ID0gX19uZXh0LT5fTV9uZXh0
OwogICAgX19wb3MtPl9NX25leHQgPSBfX25leHRfbmV4dDsKICAgIF9EZXN0cm95KCZfX25leHQt
Pl9NX2RhdGEpOwogICAgX01fcHV0X25vZGUoX19uZXh0KTsKICAgIHJldHVybiBfX25leHRfbmV4
dDsKICB9CiAgX1NsaXN0X25vZGVfYmFzZSogX01fZXJhc2VfYWZ0ZXIoX1NsaXN0X25vZGVfYmFz
ZSosIF9TbGlzdF9ub2RlX2Jhc2UqKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvYz4KX1NsaXN0X25vZGVfYmFzZSoKX1NsaXN0X2Jhc2U8X1RwLF9BbGxvYz46Ol9NX2VyYXNl
X2FmdGVyKF9TbGlzdF9ub2RlX2Jhc2UqIF9fYmVmb3JlX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1NsaXN0X25vZGVfYmFzZSogX19sYXN0X25vZGUpIHsK
ICBfU2xpc3Rfbm9kZTxfVHA+KiBfX2N1ciA9IChfU2xpc3Rfbm9kZTxfVHA+KikgKF9fYmVmb3Jl
X2ZpcnN0LT5fTV9uZXh0KTsKICB3aGlsZSAoX19jdXIgIT0gX19sYXN0X25vZGUpIHsKICAgIF9T
bGlzdF9ub2RlPF9UcD4qIF9fdG1wID0gX19jdXI7CiAgICBfX2N1ciA9IChfU2xpc3Rfbm9kZTxf
VHA+KikgX19jdXItPl9NX25leHQ7CiAgICBfRGVzdHJveSgmX190bXAtPl9NX2RhdGEpOwogICAg
X01fcHV0X25vZGUoX190bXApOwogIH0KICBfX2JlZm9yZV9maXJzdC0+X01fbmV4dCA9IF9fbGFz
dF9ub2RlOwogIHJldHVybiBfX2xhc3Rfbm9kZTsKfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1RwPiA+CmNsYXNzIHNsaXN0IDogcHJpdmF0ZSBf
U2xpc3RfYmFzZTxfVHAsX0FsbG9jPgp7CgogCgpwcml2YXRlOgogIHR5cGVkZWYgX1NsaXN0X2Jh
c2U8X1RwLF9BbGxvYz4gX0Jhc2U7CnB1YmxpYzoKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwog
IHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUq
IGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgdHlwZWRl
ZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBzaXplX3Qgc2l6
ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgdHlwZWRlZiBf
U2xpc3RfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPiBpdGVyYXRvcjsKICB0eXBlZGVmIF9TbGlz
dF9pdGVyYXRvcjxfVHAsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCo+IGNvbnN0X2l0ZXJhdG9yOwoK
ICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsK
ICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6Omdl
dF9hbGxvY2F0b3IoKTsgfQoKcHJpdmF0ZToKICB0eXBlZGVmIF9TbGlzdF9ub2RlPF9UcD4gX05v
ZGU7CiAgdHlwZWRlZiBfU2xpc3Rfbm9kZV9iYXNlIF9Ob2RlX2Jhc2U7CiAgdHlwZWRlZiBfU2xp
c3RfaXRlcmF0b3JfYmFzZSBfSXRlcmF0b3JfYmFzZTsKCiAgX05vZGUqIF9NX2NyZWF0ZV9ub2Rl
KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgX05vZGUqIF9fbm9kZSA9IHRoaXMtPl9NX2dl
dF9ub2RlKCk7CiAgICB0cnkgewogICAgICBfQ29uc3RydWN0KCZfX25vZGUtPl9NX2RhdGEsIF9f
eCk7CiAgICAgIF9fbm9kZS0+X01fbmV4dCA9IDA7CiAgICB9CiAgICBjYXRjaCguLi4pCiAgICAg
IHsKICAgICAgICB0aGlzLT5fTV9wdXRfbm9kZShfX25vZGUpOwogICAgICAgIHRocm93OwogICAg
ICB9CiAgICByZXR1cm4gX19ub2RlOwogIH0KCiAgX05vZGUqIF9NX2NyZWF0ZV9ub2RlKCkgewog
ICAgX05vZGUqIF9fbm9kZSA9IHRoaXMtPl9NX2dldF9ub2RlKCk7CiAgICB0cnkgewogICAgICBf
Q29uc3RydWN0KCZfX25vZGUtPl9NX2RhdGEpOwogICAgICBfX25vZGUtPl9NX25leHQgPSAwOwog
ICAgfQogICAgY2F0Y2goLi4uKQogICAgICB7CiAgICAgICAgdGhpcy0+X01fcHV0X25vZGUoX19u
b2RlKTsKICAgICAgICB0aHJvdzsKICAgICAgfQogICAgcmV0dXJuIF9fbm9kZTsKICB9CgpwdWJs
aWM6CiAgZXhwbGljaXQgc2xpc3QoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv
cl90eXBlKCkpIDogX0Jhc2UoX19hKSB7fQoKICBzbGlzdChzaXplX3R5cGUgX19uLCBjb25zdCB2
YWx1ZV90eXBlJiBfX3gsCiAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9j
YXRvcl90eXBlKCkpIDogX0Jhc2UoX19hKQogICAgeyBfTV9pbnNlcnRfYWZ0ZXJfZmlsbCgmdGhp
cy0+X01faGVhZCwgX19uLCBfX3gpOyB9CgogIGV4cGxpY2l0IHNsaXN0KHNpemVfdHlwZSBfX24p
IDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01faW5zZXJ0X2FmdGVyX2ZpbGwoJnRo
aXMtPl9NX2hlYWQsIF9fbiwgdmFsdWVfdHlwZSgpKTsgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4KICBzbGlzdChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QsCiAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv
cl90eXBlKCkpIDogX0Jhc2UoX19hKQogICAgeyBfTV9pbnNlcnRfYWZ0ZXJfcmFuZ2UoJnRoaXMt
Pl9NX2hlYWQsIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgc2xpc3QoY29uc3Qgc2xpc3QmIF9feCkg
OiBfQmFzZShfX3guZ2V0X2FsbG9jYXRvcigpKQogICAgeyBfTV9pbnNlcnRfYWZ0ZXJfcmFuZ2Uo
JnRoaXMtPl9NX2hlYWQsIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOyB9CgogIHNsaXN0JiBvcGVy
YXRvcj0gKGNvbnN0IHNsaXN0JiBfX3gpOwoKICB+c2xpc3QoKSB7fQoKcHVibGljOgoKCgoKCiAg
dm9pZCBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsgX01fZmls
bF9hc3NpZ24oX19uLCBfX3ZhbCk7IH0KCiAgdm9pZCBfTV9maWxsX2Fzc2lnbihzaXplX3R5cGUg
X19uLCBjb25zdCBfVHAmIF9fdmFsKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
PgogIHZvaWQgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46
Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwgX19s
YXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9p
ZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVl
X3R5cGUpCiAgICB7IF9NX2ZpbGxfYXNzaWduKChzaXplX3R5cGUpIF9fbiwgKF9UcCkgX192YWwp
OyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2Fzc2lnbl9k
aXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKTsKCnB1YmxpYzoKCiAgaXRlcmF0
b3IgYmVnaW4oKSB7IHJldHVybiBpdGVyYXRvcigoX05vZGUqKXRoaXMtPl9NX2hlYWQuX01fbmV4
dCk7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9p
dGVyYXRvcigoX05vZGUqKXRoaXMtPl9NX2hlYWQuX01fbmV4dCk7fQoKICBpdGVyYXRvciBlbmQo
KSB7IHJldHVybiBpdGVyYXRvcigwKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIGNvbnN0X2l0ZXJhdG9yKDApOyB9CiMgNDI0ICIvaG9tZS9nb2VyemlnL2djYy0zLjEu
MS9pbmNsdWRlL2MrKy8zLjEuMS9leHQvc2xpc3QiCiAgaXRlcmF0b3IgYmVmb3JlX2JlZ2luKCkg
eyByZXR1cm4gaXRlcmF0b3IoKF9Ob2RlKikgJnRoaXMtPl9NX2hlYWQpOyB9CiAgY29uc3RfaXRl
cmF0b3IgYmVmb3JlX2JlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKChf
Tm9kZSopICZ0aGlzLT5fTV9oZWFkKTsgfQoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIF9fc2xpc3Rfc2l6ZSh0aGlzLT5fTV9oZWFkLl9NX25leHQpOyB9CgogIHNpemVfdHlwZSBt
YXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KCiAgYm9vbCBlbXB0eSgp
IGNvbnN0IHsgcmV0dXJuIHRoaXMtPl9NX2hlYWQuX01fbmV4dCA9PSAwOyB9CgogIHZvaWQgc3dh
cChzbGlzdCYgX194KQogICAgeyBzdGQ6OnN3YXAodGhpcy0+X01faGVhZC5fTV9uZXh0LCBfX3gu
X01faGVhZC5fTV9uZXh0KTsgfQoKcHVibGljOgoKICByZWZlcmVuY2UgZnJvbnQoKSB7IHJldHVy
biAoKF9Ob2RlKikgdGhpcy0+X01faGVhZC5fTV9uZXh0KS0+X01fZGF0YTsgfQogIGNvbnN0X3Jl
ZmVyZW5jZSBmcm9udCgpIGNvbnN0CiAgICB7IHJldHVybiAoKF9Ob2RlKikgdGhpcy0+X01faGVh
ZC5fTV9uZXh0KS0+X01fZGF0YTsgfQogIHZvaWQgcHVzaF9mcm9udChjb25zdCB2YWx1ZV90eXBl
JiBfX3gpIHsKICAgIF9fc2xpc3RfbWFrZV9saW5rKCZ0aGlzLT5fTV9oZWFkLCBfTV9jcmVhdGVf
bm9kZShfX3gpKTsKICB9CiAgdm9pZCBwdXNoX2Zyb250KCkgeyBfX3NsaXN0X21ha2VfbGluaygm
dGhpcy0+X01faGVhZCwgX01fY3JlYXRlX25vZGUoKSk7IH0KICB2b2lkIHBvcF9mcm9udCgpIHsK
ICAgIF9Ob2RlKiBfX25vZGUgPSAoX05vZGUqKSB0aGlzLT5fTV9oZWFkLl9NX25leHQ7CiAgICB0
aGlzLT5fTV9oZWFkLl9NX25leHQgPSBfX25vZGUtPl9NX25leHQ7CiAgICBfRGVzdHJveSgmX19u
b2RlLT5fTV9kYXRhKTsKICAgIHRoaXMtPl9NX3B1dF9ub2RlKF9fbm9kZSk7CiAgfQoKICBpdGVy
YXRvciBwcmV2aW91cyhjb25zdF9pdGVyYXRvciBfX3BvcykgewogICAgcmV0dXJuIGl0ZXJhdG9y
KChfTm9kZSopIF9fc2xpc3RfcHJldmlvdXMoJnRoaXMtPl9NX2hlYWQsIF9fcG9zLl9NX25vZGUp
KTsKICB9CiAgY29uc3RfaXRlcmF0b3IgcHJldmlvdXMoY29uc3RfaXRlcmF0b3IgX19wb3MpIGNv
bnN0IHsKICAgIHJldHVybiBjb25zdF9pdGVyYXRvcigoX05vZGUqKSBfX3NsaXN0X3ByZXZpb3Vz
KCZ0aGlzLT5fTV9oZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19wb3MuX01fbm9kZSkpOwogIH0KCnByaXZhdGU6CiAgX05vZGUqIF9NX2lu
c2VydF9hZnRlcihfTm9kZV9iYXNlKiBfX3BvcywgY29uc3QgdmFsdWVfdHlwZSYgX194KSB7CiAg
ICByZXR1cm4gKF9Ob2RlKikgKF9fc2xpc3RfbWFrZV9saW5rKF9fcG9zLCBfTV9jcmVhdGVfbm9k
ZShfX3gpKSk7CiAgfQoKICBfTm9kZSogX01faW5zZXJ0X2FmdGVyKF9Ob2RlX2Jhc2UqIF9fcG9z
KSB7CiAgICByZXR1cm4gKF9Ob2RlKikgKF9fc2xpc3RfbWFrZV9saW5rKF9fcG9zLCBfTV9jcmVh
dGVfbm9kZSgpKSk7CiAgfQoKICB2b2lkIF9NX2luc2VydF9hZnRlcl9maWxsKF9Ob2RlX2Jhc2Uq
IF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3Qg
dmFsdWVfdHlwZSYgX194KSB7CiAgICBmb3IgKHNpemVfdHlwZSBfX2kgPSAwOyBfX2kgPCBfX247
ICsrX19pKQogICAgICBfX3BvcyA9IF9fc2xpc3RfbWFrZV9saW5rKF9fcG9zLCBfTV9jcmVhdGVf
bm9kZShfX3gpKTsKICB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0luSXRlcj4KICB2b2lkIF9NX2lu
c2VydF9hZnRlcl9yYW5nZShfTm9kZV9iYXNlKiBfX3BvcywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfSW5JdGVyIF9fZmlyc3QsIF9Jbkl0ZXIgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5
cGVuYW1lIF9Jc19pbnRlZ2VyPF9Jbkl0ZXI+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01f
aW5zZXJ0X2FmdGVyX3JhbmdlKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsK
ICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2luc2VydF9hZnRlcl9y
YW5nZShfTm9kZV9iYXNlKiBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsKICAgIF9NX2luc2VydF9hZnRl
cl9maWxsKF9fcG9zLCBfX24sIF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0luSXRlcj4K
ICB2b2lkIF9NX2luc2VydF9hZnRlcl9yYW5nZShfTm9kZV9iYXNlKiBfX3BvcywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfSW5JdGVyIF9fZmlyc3QsIF9Jbkl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgd2hpbGUgKF9fZmly
c3QgIT0gX19sYXN0KSB7CiAgICAgIF9fcG9zID0gX19zbGlzdF9tYWtlX2xpbmsoX19wb3MsIF9N
X2NyZWF0ZV9ub2RlKCpfX2ZpcnN0KSk7CiAgICAgICsrX19maXJzdDsKICAgIH0KICB9CgpwdWJs
aWM6CgogIGl0ZXJhdG9yIGluc2VydF9hZnRlcihpdGVyYXRvciBfX3BvcywgY29uc3QgdmFsdWVf
dHlwZSYgX194KSB7CiAgICByZXR1cm4gaXRlcmF0b3IoX01faW5zZXJ0X2FmdGVyKF9fcG9zLl9N
X25vZGUsIF9feCkpOwogIH0KCiAgaXRlcmF0b3IgaW5zZXJ0X2FmdGVyKGl0ZXJhdG9yIF9fcG9z
KSB7CiAgICByZXR1cm4gaW5zZXJ0X2FmdGVyKF9fcG9zLCB2YWx1ZV90eXBlKCkpOwogIH0KCiAg
dm9pZCBpbnNlcnRfYWZ0ZXIoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IHZh
bHVlX3R5cGUmIF9feCkgewogICAgX01faW5zZXJ0X2FmdGVyX2ZpbGwoX19wb3MuX01fbm9kZSwg
X19uLCBfX3gpOwogIH0KCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0luSXRlcj4KICB2b2lkIGluc2Vy
dF9hZnRlcihpdGVyYXRvciBfX3BvcywgX0luSXRlciBfX2ZpcnN0LCBfSW5JdGVyIF9fbGFzdCkg
ewogICAgX01faW5zZXJ0X2FmdGVyX3JhbmdlKF9fcG9zLl9NX25vZGUsIF9fZmlyc3QsIF9fbGFz
dCk7CiAgfQoKICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIGNvbnN0IHZhbHVlX3R5
cGUmIF9feCkgewogICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2luc2VydF9hZnRlcihfX3NsaXN0X3By
ZXZpb3VzKCZ0aGlzLT5fTV9oZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fcG9zLl9NX25vZGUpLAogICAgICAgICAgICAgICAgICAgIF9f
eCkpOwogIH0KCiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zKSB7CiAgICByZXR1cm4g
aXRlcmF0b3IoX01faW5zZXJ0X2FmdGVyKF9fc2xpc3RfcHJldmlvdXMoJnRoaXMtPl9NX2hlYWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19w
b3MuX01fbm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5
cGUoKSkpOwogIH0KCiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24s
IGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgX01faW5zZXJ0X2FmdGVyX2ZpbGwoX19zbGlz
dF9wcmV2aW91cygmdGhpcy0+X01faGVhZCwgX19wb3MuX01fbm9kZSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfX24sIF9feCk7CiAgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5JdGVyPgog
IHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5JdGVyIF9fZmlyc3QsIF9Jbkl0ZXIgX19s
YXN0KSB7CiAgICBfTV9pbnNlcnRfYWZ0ZXJfcmFuZ2UoX19zbGlzdF9wcmV2aW91cygmdGhpcy0+
X01faGVhZCwgX19wb3MuX01fbm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19maXJz
dCwgX19sYXN0KTsKICB9CgpwdWJsaWM6CiAgaXRlcmF0b3IgZXJhc2VfYWZ0ZXIoaXRlcmF0b3Ig
X19wb3MpIHsKICAgIHJldHVybiBpdGVyYXRvcigoX05vZGUqKSB0aGlzLT5fTV9lcmFzZV9hZnRl
cihfX3Bvcy5fTV9ub2RlKSk7CiAgfQogIGl0ZXJhdG9yIGVyYXNlX2FmdGVyKGl0ZXJhdG9yIF9f
YmVmb3JlX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAgIHJldHVybiBpdGVyYXRvcigoX05v
ZGUqKSB0aGlzLT5fTV9lcmFzZV9hZnRlcihfX2JlZm9yZV9maXJzdC5fTV9ub2RlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdC5fTV9ub2Rl
KSk7CiAgfQoKICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3BvcykgewogICAgcmV0dXJuIChf
Tm9kZSopIHRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fc2xpc3RfcHJldmlvdXMoJnRoaXMtPl9NX2hl
YWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3Bvcy5fTV9ub2RlKSk7CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmly
c3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgcmV0dXJuIChfTm9kZSopIHRoaXMtPl9NX2VyYXNl
X2FmdGVyKAogICAgICBfX3NsaXN0X3ByZXZpb3VzKCZ0aGlzLT5fTV9oZWFkLCBfX2ZpcnN0Ll9N
X25vZGUpLCBfX2xhc3QuX01fbm9kZSk7CiAgfQoKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgbmV3
X3NpemUsIGNvbnN0IF9UcCYgX194KTsKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgbmV3X3NpemUp
IHsgcmVzaXplKG5ld19zaXplLCBfVHAoKSk7IH0KICB2b2lkIGNsZWFyKCkgeyB0aGlzLT5fTV9l
cmFzZV9hZnRlcigmdGhpcy0+X01faGVhZCwgMCk7IH0KCnB1YmxpYzoKCgogIHZvaWQgc3BsaWNl
X2FmdGVyKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yIF9fYmVm
b3JlX2ZpcnN0LCBpdGVyYXRvciBfX2JlZm9yZV9sYXN0KQogIHsKICAgIGlmIChfX2JlZm9yZV9m
aXJzdCAhPSBfX2JlZm9yZV9sYXN0KQogICAgICBfX3NsaXN0X3NwbGljZV9hZnRlcihfX3Bvcy5f
TV9ub2RlLCBfX2JlZm9yZV9maXJzdC5fTV9ub2RlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2JlZm9yZV9sYXN0Ll9NX25vZGUpOwogIH0KCgoKICB2b2lkIHNwbGljZV9hZnRlcihpdGVy
YXRvciBfX3BvcywgaXRlcmF0b3IgX19wcmV2KQogIHsKICAgIF9fc2xpc3Rfc3BsaWNlX2FmdGVy
KF9fcG9zLl9NX25vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZXYuX01fbm9kZSwg
X19wcmV2Ll9NX25vZGUtPl9NX25leHQpOwogIH0KCgoKCgogIHZvaWQgc3BsaWNlX2FmdGVyKGl0
ZXJhdG9yIF9fcG9zLCBzbGlzdCYgX194KQogIHsKICAgIF9fc2xpc3Rfc3BsaWNlX2FmdGVyKF9f
cG9zLl9NX25vZGUsICZfX3guX01faGVhZCk7CiAgfQoKCiAgdm9pZCBzcGxpY2UoaXRlcmF0b3Ig
X19wb3MsIHNsaXN0JiBfX3gpIHsKICAgIGlmIChfX3guX01faGVhZC5fTV9uZXh0KQogICAgICBf
X3NsaXN0X3NwbGljZV9hZnRlcihfX3NsaXN0X3ByZXZpb3VzKCZ0aGlzLT5fTV9oZWFkLCBfX3Bv
cy5fTV9ub2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9feC5fTV9oZWFkLCBfX3Ns
aXN0X3ByZXZpb3VzKCZfX3guX01faGVhZCwgMCkpOwogIH0KCgogIHZvaWQgc3BsaWNlKGl0ZXJh
dG9yIF9fcG9zLCBzbGlzdCYgX194LCBpdGVyYXRvciBfX2kpIHsKICAgIF9fc2xpc3Rfc3BsaWNl
X2FmdGVyKF9fc2xpc3RfcHJldmlvdXMoJnRoaXMtPl9NX2hlYWQsIF9fcG9zLl9NX25vZGUpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgX19zbGlzdF9wcmV2aW91cygmX194Ll9NX2hlYWQsIF9f
aS5fTV9ub2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9faS5fTV9ub2RlKTsKICB9CgoK
CiAgdm9pZCBzcGxpY2UoaXRlcmF0b3IgX19wb3MsIHNsaXN0JiBfX3gsIGl0ZXJhdG9yIF9fZmly
c3QsIGl0ZXJhdG9yIF9fbGFzdCkKICB7CiAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAg
IF9fc2xpc3Rfc3BsaWNlX2FmdGVyKF9fc2xpc3RfcHJldmlvdXMoJnRoaXMtPl9NX2hlYWQsIF9f
cG9zLl9NX25vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NsaXN0X3ByZXZpb3Vz
KCZfX3guX01faGVhZCwgX19maXJzdC5fTV9ub2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19zbGlzdF9wcmV2aW91cyhfX2ZpcnN0Ll9NX25vZGUsIF9fbGFzdC5fTV9ub2RlKSk7CiAg
fQoKcHVibGljOgogIHZvaWQgcmV2ZXJzZSgpIHsKICAgIGlmICh0aGlzLT5fTV9oZWFkLl9NX25l
eHQpCiAgICAgIHRoaXMtPl9NX2hlYWQuX01fbmV4dCA9IF9fc2xpc3RfcmV2ZXJzZSh0aGlzLT5f
TV9oZWFkLl9NX25leHQpOwogIH0KCiAgdm9pZCByZW1vdmUoY29uc3QgX1RwJiBfX3ZhbCk7CiAg
dm9pZCB1bmlxdWUoKTsKICB2b2lkIG1lcmdlKHNsaXN0JiBfX3gpOwogIHZvaWQgc29ydCgpOwoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KICB2b2lkIHJlbW92ZV9pZihfUHJlZGljYXRl
IF9fcHJlZCk7CgogIHRlbXBsYXRlIDxjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgogIHZvaWQgdW5p
cXVlKF9CaW5hcnlQcmVkaWNhdGUgX19wcmVkKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9TdHJpY3RX
ZWFrT3JkZXJpbmc+CiAgdm9pZCBtZXJnZShzbGlzdCYsIF9TdHJpY3RXZWFrT3JkZXJpbmcpOwoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4KICB2b2lkIHNvcnQoX1N0cmlj
dFdlYWtPcmRlcmluZyBfX2NvbXApOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fs
bG9jPgpzbGlzdDxfVHAsX0FsbG9jPiYgc2xpc3Q8X1RwLF9BbGxvYz46Om9wZXJhdG9yPShjb25z
dCBzbGlzdDxfVHAsX0FsbG9jPiYgX194KQp7CiAgaWYgKCZfX3ggIT0gdGhpcykgewogICAgX05v
ZGVfYmFzZSogX19wMSA9ICZ0aGlzLT5fTV9oZWFkOwogICAgX05vZGUqIF9fbjEgPSAoX05vZGUq
KSB0aGlzLT5fTV9oZWFkLl9NX25leHQ7CiAgICBjb25zdCBfTm9kZSogX19uMiA9IChjb25zdCBf
Tm9kZSopIF9feC5fTV9oZWFkLl9NX25leHQ7CiAgICB3aGlsZSAoX19uMSAmJiBfX24yKSB7CiAg
ICAgIF9fbjEtPl9NX2RhdGEgPSBfX24yLT5fTV9kYXRhOwogICAgICBfX3AxID0gX19uMTsKICAg
ICAgX19uMSA9IChfTm9kZSopIF9fbjEtPl9NX25leHQ7CiAgICAgIF9fbjIgPSAoY29uc3QgX05v
ZGUqKSBfX24yLT5fTV9uZXh0OwogICAgfQogICAgaWYgKF9fbjIgPT0gMCkKICAgICAgdGhpcy0+
X01fZXJhc2VfYWZ0ZXIoX19wMSwgMCk7CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9hZnRlcl9y
YW5nZShfX3AxLCBjb25zdF9pdGVyYXRvcigoX05vZGUqKV9fbjIpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3IoMCkpOwogIH0KICByZXR1cm4gKnRoaXM7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBzbGlzdDxfVHAsIF9B
bGxvYz46Ol9NX2ZpbGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpIHsK
ICBfTm9kZV9iYXNlKiBfX3ByZXYgPSAmdGhpcy0+X01faGVhZDsKICBfTm9kZSogX19ub2RlID0g
KF9Ob2RlKikgdGhpcy0+X01faGVhZC5fTV9uZXh0OwogIGZvciAoIDsgX19ub2RlICE9IDAgJiYg
X19uID4gMCA7IC0tX19uKSB7CiAgICBfX25vZGUtPl9NX2RhdGEgPSBfX3ZhbDsKICAgIF9fcHJl
diA9IF9fbm9kZTsKICAgIF9fbm9kZSA9IChfTm9kZSopIF9fbm9kZS0+X01fbmV4dDsKICB9CiAg
aWYgKF9fbiA+IDApCiAgICBfTV9pbnNlcnRfYWZ0ZXJfZmlsbChfX3ByZXYsIF9fbiwgX192YWwp
OwogIGVsc2UKICAgIHRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fcHJldiwgMCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CnZv
aWQKc2xpc3Q8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19mYWxzZV90eXBlKQp7CiAgX05vZGVfYmFzZSogX19wcmV2ID0gJnRoaXMtPl9NX2hl
YWQ7CiAgX05vZGUqIF9fbm9kZSA9IChfTm9kZSopIHRoaXMtPl9NX2hlYWQuX01fbmV4dDsKICB3
aGlsZSAoX19ub2RlICE9IDAgJiYgX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIF9fbm9kZS0+X01f
ZGF0YSA9ICpfX2ZpcnN0OwogICAgX19wcmV2ID0gX19ub2RlOwogICAgX19ub2RlID0gKF9Ob2Rl
KikgX19ub2RlLT5fTV9uZXh0OwogICAgKytfX2ZpcnN0OwogIH0KICBpZiAoX19maXJzdCAhPSBf
X2xhc3QpCiAgICBfTV9pbnNlcnRfYWZ0ZXJfcmFuZ2UoX19wcmV2LCBfX2ZpcnN0LCBfX2xhc3Qp
OwogIGVsc2UKICAgIHRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fcHJldiwgMCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PShjb25zdCBz
bGlzdDxfVHAsX0FsbG9jPiYgX1NMMSwgY29uc3Qgc2xpc3Q8X1RwLF9BbGxvYz4mIF9TTDIpCnsK
ICB0eXBlZGVmIHR5cGVuYW1lIHNsaXN0PF9UcCxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvciBjb25z
dF9pdGVyYXRvcjsKICBjb25zdF9pdGVyYXRvciBfX2VuZDEgPSBfU0wxLmVuZCgpOwogIGNvbnN0
X2l0ZXJhdG9yIF9fZW5kMiA9IF9TTDIuZW5kKCk7CgogIGNvbnN0X2l0ZXJhdG9yIF9faTEgPSBf
U0wxLmJlZ2luKCk7CiAgY29uc3RfaXRlcmF0b3IgX19pMiA9IF9TTDIuYmVnaW4oKTsKICB3aGls
ZSAoX19pMSAhPSBfX2VuZDEgJiYgX19pMiAhPSBfX2VuZDIgJiYgKl9faTEgPT0gKl9faTIpIHsK
ICAgICsrX19pMTsKICAgICsrX19pMjsKICB9CiAgcmV0dXJuIF9faTEgPT0gX19lbmQxICYmIF9f
aTIgPT0gX19lbmQyOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxp
bmUgYm9vbApvcGVyYXRvcjwoY29uc3Qgc2xpc3Q8X1RwLF9BbGxvYz4mIF9TTDEsIGNvbnN0IHNs
aXN0PF9UcCxfQWxsb2M+JiBfU0wyKQp7CiAgcmV0dXJuIHN0ZDo6bGV4aWNvZ3JhcGhpY2FsX2Nv
bXBhcmUoX1NMMS5iZWdpbigpLCBfU0wxLmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9TTDIuYmVnaW4oKSwgX1NMMi5lbmQoKSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCBzbGlzdDxf
VHAsX0FsbG9jPiYgX1NMMSwgY29uc3Qgc2xpc3Q8X1RwLF9BbGxvYz4mIF9TTDIpIHsKICByZXR1
cm4gIShfU0wxID09IF9TTDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+
CmlubGluZSBib29sCm9wZXJhdG9yPihjb25zdCBzbGlzdDxfVHAsX0FsbG9jPiYgX1NMMSwgY29u
c3Qgc2xpc3Q8X1RwLF9BbGxvYz4mIF9TTDIpIHsKICByZXR1cm4gX1NMMiA8IF9TTDE7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PShj
b25zdCBzbGlzdDxfVHAsX0FsbG9jPiYgX1NMMSwgY29uc3Qgc2xpc3Q8X1RwLF9BbGxvYz4mIF9T
TDIpIHsKICByZXR1cm4gIShfU0wyIDwgX1NMMSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShjb25zdCBzbGlzdDxfVHAsX0FsbG9j
PiYgX1NMMSwgY29uc3Qgc2xpc3Q8X1RwLF9BbGxvYz4mIF9TTDIpIHsKICByZXR1cm4gIShfU0wx
IDwgX1NMMik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZv
aWQgc3dhcChzbGlzdDxfVHAsX0FsbG9jPiYgX194LCBzbGlzdDxfVHAsX0FsbG9jPiYgX195KSB7
CiAgX194LnN3YXAoX195KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
dm9pZCBzbGlzdDxfVHAsX0FsbG9jPjo6cmVzaXplKHNpemVfdHlwZSBfX2xlbiwgY29uc3QgX1Rw
JiBfX3gpCnsKICBfTm9kZV9iYXNlKiBfX2N1ciA9ICZ0aGlzLT5fTV9oZWFkOwogIHdoaWxlIChf
X2N1ci0+X01fbmV4dCAhPSAwICYmIF9fbGVuID4gMCkgewogICAgLS1fX2xlbjsKICAgIF9fY3Vy
ID0gX19jdXItPl9NX25leHQ7CiAgfQogIGlmIChfX2N1ci0+X01fbmV4dCkKICAgIHRoaXMtPl9N
X2VyYXNlX2FmdGVyKF9fY3VyLCAwKTsKICBlbHNlCiAgICBfTV9pbnNlcnRfYWZ0ZXJfZmlsbChf
X2N1ciwgX19sZW4sIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
dm9pZCBzbGlzdDxfVHAsX0FsbG9jPjo6cmVtb3ZlKGNvbnN0IF9UcCYgX192YWwpCnsKICBfTm9k
ZV9iYXNlKiBfX2N1ciA9ICZ0aGlzLT5fTV9oZWFkOwogIHdoaWxlIChfX2N1ciAmJiBfX2N1ci0+
X01fbmV4dCkgewogICAgaWYgKCgoX05vZGUqKSBfX2N1ci0+X01fbmV4dCktPl9NX2RhdGEgPT0g
X192YWwpCiAgICAgIHRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fY3VyKTsKICAgIGVsc2UKICAgICAg
X19jdXIgPSBfX2N1ci0+X01fbmV4dDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4Kdm9pZCBzbGlzdDxfVHAsX0FsbG9jPjo6dW5pcXVlKCkKewogIF9Ob2RlX2Jhc2Uq
IF9fY3VyID0gdGhpcy0+X01faGVhZC5fTV9uZXh0OwogIGlmIChfX2N1cikgewogICAgd2hpbGUg
KF9fY3VyLT5fTV9uZXh0KSB7CiAgICAgIGlmICgoKF9Ob2RlKilfX2N1ciktPl9NX2RhdGEgPT0K
ICAgICAgICAgICgoX05vZGUqKShfX2N1ci0+X01fbmV4dCkpLT5fTV9kYXRhKQogICAgICAgIHRo
aXMtPl9NX2VyYXNlX2FmdGVyKF9fY3VyKTsKICAgICAgZWxzZQogICAgICAgIF9fY3VyID0gX19j
dXItPl9NX25leHQ7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs
b2M+CnZvaWQgc2xpc3Q8X1RwLF9BbGxvYz46Om1lcmdlKHNsaXN0PF9UcCxfQWxsb2M+JiBfX3gp
CnsKICBfTm9kZV9iYXNlKiBfX24xID0gJnRoaXMtPl9NX2hlYWQ7CiAgd2hpbGUgKF9fbjEtPl9N
X25leHQgJiYgX194Ll9NX2hlYWQuX01fbmV4dCkgewogICAgaWYgKCgoX05vZGUqKSBfX3guX01f
aGVhZC5fTV9uZXh0KS0+X01fZGF0YSA8CiAgICAgICAgKChfTm9kZSopIF9fbjEtPl9NX25leHQp
LT5fTV9kYXRhKQogICAgICBfX3NsaXN0X3NwbGljZV9hZnRlcihfX24xLCAmX194Ll9NX2hlYWQs
IF9feC5fTV9oZWFkLl9NX25leHQpOwogICAgX19uMSA9IF9fbjEtPl9NX25leHQ7CiAgfQogIGlm
IChfX3guX01faGVhZC5fTV9uZXh0KSB7CiAgICBfX24xLT5fTV9uZXh0ID0gX194Ll9NX2hlYWQu
X01fbmV4dDsKICAgIF9feC5fTV9oZWFkLl9NX25leHQgPSAwOwogIH0KfQoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIHNsaXN0PF9UcCxfQWxsb2M+Ojpzb3J0KCkKewog
IGlmICh0aGlzLT5fTV9oZWFkLl9NX25leHQgJiYgdGhpcy0+X01faGVhZC5fTV9uZXh0LT5fTV9u
ZXh0KSB7CiAgICBzbGlzdCBfX2NhcnJ5OwogICAgc2xpc3QgX19jb3VudGVyWzY0XTsKICAgIGlu
dCBfX2ZpbGwgPSAwOwogICAgd2hpbGUgKCFlbXB0eSgpKSB7CiAgICAgIF9fc2xpc3Rfc3BsaWNl
X2FmdGVyKCZfX2NhcnJ5Ll9NX2hlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0aGlz
LT5fTV9oZWFkLCB0aGlzLT5fTV9oZWFkLl9NX25leHQpOwogICAgICBpbnQgX19pID0gMDsKICAg
ICAgd2hpbGUgKF9faSA8IF9fZmlsbCAmJiAhX19jb3VudGVyW19faV0uZW1wdHkoKSkgewogICAg
ICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY2FycnkpOwogICAgICAgIF9fY2Fycnkuc3dhcChf
X2NvdW50ZXJbX19pXSk7CiAgICAgICAgKytfX2k7CiAgICAgIH0KICAgICAgX19jYXJyeS5zd2Fw
KF9fY291bnRlcltfX2ldKTsKICAgICAgaWYgKF9faSA9PSBfX2ZpbGwpCiAgICAgICAgKytfX2Zp
bGw7CiAgICB9CgogICAgZm9yIChpbnQgX19pID0gMTsgX19pIDwgX19maWxsOyArK19faSkKICAg
ICAgX19jb3VudGVyW19faV0ubWVyZ2UoX19jb3VudGVyW19faS0xXSk7CiAgICB0aGlzLT5zd2Fw
KF9fY291bnRlcltfX2ZpbGwtMV0pOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4Kdm9pZCBzbGlzdDxfVHAsX0FsbG9j
Pjo6cmVtb3ZlX2lmKF9QcmVkaWNhdGUgX19wcmVkKQp7CiAgX05vZGVfYmFzZSogX19jdXIgPSAm
dGhpcy0+X01faGVhZDsKICB3aGlsZSAoX19jdXItPl9NX25leHQpIHsKICAgIGlmIChfX3ByZWQo
KChfTm9kZSopIF9fY3VyLT5fTV9uZXh0KS0+X01fZGF0YSkpCiAgICAgIHRoaXMtPl9NX2VyYXNl
X2FmdGVyKF9fY3VyKTsKICAgIGVsc2UKICAgICAgX19jdXIgPSBfX2N1ci0+X01fbmV4dDsKICB9
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9C
aW5hcnlQcmVkaWNhdGU+CnZvaWQgc2xpc3Q8X1RwLF9BbGxvYz46OnVuaXF1ZShfQmluYXJ5UHJl
ZGljYXRlIF9fcHJlZCkKewogIF9Ob2RlKiBfX2N1ciA9IChfTm9kZSopIHRoaXMtPl9NX2hlYWQu
X01fbmV4dDsKICBpZiAoX19jdXIpIHsKICAgIHdoaWxlIChfX2N1ci0+X01fbmV4dCkgewogICAg
ICBpZiAoX19wcmVkKCgoX05vZGUqKV9fY3VyKS0+X01fZGF0YSwKICAgICAgICAgICAgICAgICAo
KF9Ob2RlKikoX19jdXItPl9NX25leHQpKS0+X01fZGF0YSkpCiAgICAgICAgdGhpcy0+X01fZXJh
c2VfYWZ0ZXIoX19jdXIpOwogICAgICBlbHNlCiAgICAgICAgX19jdXIgPSAoX05vZGUqKSBfX2N1
ci0+X01fbmV4dDsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
Yz4gdGVtcGxhdGUgPGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+CnZvaWQgc2xpc3Q8X1RwLF9B
bGxvYz46Om1lcmdlKHNsaXN0PF9UcCxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7CiAgX05vZGVfYmFzZSogX19u
MSA9ICZ0aGlzLT5fTV9oZWFkOwogIHdoaWxlIChfX24xLT5fTV9uZXh0ICYmIF9feC5fTV9oZWFk
Ll9NX25leHQpIHsKICAgIGlmIChfX2NvbXAoKChfTm9kZSopIF9feC5fTV9oZWFkLl9NX25leHQp
LT5fTV9kYXRhLAogICAgICAgICAgICAgICAoKF9Ob2RlKikgX19uMS0+X01fbmV4dCktPl9NX2Rh
dGEpKQogICAgICBfX3NsaXN0X3NwbGljZV9hZnRlcihfX24xLCAmX194Ll9NX2hlYWQsIF9feC5f
TV9oZWFkLl9NX25leHQpOwogICAgX19uMSA9IF9fbjEtPl9NX25leHQ7CiAgfQogIGlmIChfX3gu
X01faGVhZC5fTV9uZXh0KSB7CiAgICBfX24xLT5fTV9uZXh0ID0gX194Ll9NX2hlYWQuX01fbmV4
dDsKICAgIF9feC5fTV9oZWFkLl9NX25leHQgPSAwOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4Kdm9p
ZCBzbGlzdDxfVHAsX0FsbG9jPjo6c29ydChfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkKewog
IGlmICh0aGlzLT5fTV9oZWFkLl9NX25leHQgJiYgdGhpcy0+X01faGVhZC5fTV9uZXh0LT5fTV9u
ZXh0KSB7CiAgICBzbGlzdCBfX2NhcnJ5OwogICAgc2xpc3QgX19jb3VudGVyWzY0XTsKICAgIGlu
dCBfX2ZpbGwgPSAwOwogICAgd2hpbGUgKCFlbXB0eSgpKSB7CiAgICAgIF9fc2xpc3Rfc3BsaWNl
X2FmdGVyKCZfX2NhcnJ5Ll9NX2hlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0aGlz
LT5fTV9oZWFkLCB0aGlzLT5fTV9oZWFkLl9NX25leHQpOwogICAgICBpbnQgX19pID0gMDsKICAg
ICAgd2hpbGUgKF9faSA8IF9fZmlsbCAmJiAhX19jb3VudGVyW19faV0uZW1wdHkoKSkgewogICAg
ICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY2FycnksIF9fY29tcCk7CiAgICAgICAgX19jYXJy
eS5zd2FwKF9fY291bnRlcltfX2ldKTsKICAgICAgICArK19faTsKICAgICAgfQogICAgICBfX2Nh
cnJ5LnN3YXAoX19jb3VudGVyW19faV0pOwogICAgICBpZiAoX19pID09IF9fZmlsbCkKICAgICAg
ICArK19fZmlsbDsKICAgIH0KCiAgICBmb3IgKGludCBfX2kgPSAxOyBfX2kgPCBfX2ZpbGw7ICsr
X19pKQogICAgICBfX2NvdW50ZXJbX19pXS5tZXJnZShfX2NvdW50ZXJbX19pLTFdLCBfX2NvbXAp
OwogICAgdGhpcy0+c3dhcChfX2NvdW50ZXJbX19maWxsLTFdKTsKICB9Cn0KCn0KCm5hbWVzcGFj
ZSBzdGQKewoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmNsYXNzIGluc2Vy
dF9pdGVyYXRvcjxfX2dudV9jeHg6OnNsaXN0PF9UcCwgX0FsbG9jPiA+IHsKcHJvdGVjdGVkOgog
IHR5cGVkZWYgX19nbnVfY3h4OjpzbGlzdDxfVHAsIF9BbGxvYz4gX0NvbnRhaW5lcjsKICBfQ29u
dGFpbmVyKiBjb250YWluZXI7CiAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgaXRlcjsK
cHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91
dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkIHZhbHVl
X3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgcG9p
bnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRh
aW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2kpCiAgICA6IGNvbnRh
aW5lcigmX194KSB7CiAgICBpZiAoX19pID09IF9feC5iZWdpbigpKQogICAgICBpdGVyID0gX194
LmJlZm9yZV9iZWdpbigpOwogICAgZWxzZQogICAgICBpdGVyID0gX194LnByZXZpb3VzKF9faSk7
CiAgfQoKICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5
cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsKICAgIGl0ZXIgPSBjb250
YWluZXItPmluc2VydF9hZnRlcihpdGVyLCBfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9
CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhp
czsgfQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJu
ICp0aGlzOyB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkg
eyByZXR1cm4gKnRoaXM7IH0KfTsKCn0KIyAyICJtYWluLmNwcCIgMgp1c2luZyBzdGQ6OnNsaXN0
OwppbnQgbWFpbih2b2lkKQp7CiAgc3RkOjpzbGlzdDxpbnQ+IHM7CiAgcmV0dXJuIDE7Cn0K


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