public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/3085: Internal compiler error compiling a gtk-- test prog.
@ 2001-06-08  8:46 cgw
  0 siblings, 0 replies; 2+ messages in thread
From: cgw @ 2001-06-08  8:46 UTC (permalink / raw)
  To: gcc-gnats

>Number:         3085
>Category:       c++
>Synopsis:       Internal compiler error compiling a gtk-- test prog.
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Jun 08 08:46:00 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     cgw@alum.mit.edu
>Release:        gcc version 2.95.3 20010315 (release)
>Organization:
>Environment:
SunOS 5.7 Generic_106542-12 i86pc i386 i86pc
>Description:
Got a Internal compiler error 373 compiling a trivial
test program.  (The test program is incorrect, but I don't
think that it should trigger a compiler errror).  

Also note that the page 
http://www.gnu.org/software/gcc/bugs.html
suggests the use of "gccbug" for submitting bug reports,
but as far as I can tell this program is not installed
with gcc.
>How-To-Repeat:
g++ -c t_gtk.ii
>Fix:

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

IyAxICJ0X2d0ay5jcHAiCiMgMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlz
Mi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3RyZWFtIiAxIDMKIAogCgoK
CiMgMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8u
Li8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kz
ODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1i
dWYuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoK
CiAgIAoKCgpleHRlcm4gIkMiIHsKIyAxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNv
bGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMSAzCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4
Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pMzg2LXBjLXNvbGFyaXMyLjcvaW5j
bHVkZS9fR19jb25maWcuaCIgMSAzIDQKICAKCgoKCgoKCgoKdHlwZWRlZiAgICAgICAgICBpbnQg
ICBfR19pbnQ4X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19RSV9fKSkpOwp0eXBlZGVmIHVu
c2lnbmVkIGludCAgX0dfdWludDhfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1FJX18pKSk7
CnR5cGVkZWYgICAgICAgICAgaW50ICBfR19pbnQxNl90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9f
KF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVf
XygoX19tb2RlX18oX19ISV9fKSkpOwp0eXBlZGVmICAgICAgICAgIGludCAgX0dfaW50MzJfdCBf
X2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9H
X3VpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fU0lfXykpKTsKdHlwZWRlZiAgICAg
ICAgICBpbnQgIF9HX2ludDY0X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19ESV9fKSkpOwp0
eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50NjRfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhf
X0RJX18pKSk7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIF9HX2xsb25nOwpfX2V4
dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9HX3VsbG9uZzsKCgoKCgoKCgp0
eXBlZGVmIGxvbmcgX0dfY2xvY2tfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9HX2Rldl90Owp0
eXBlZGVmIGxvbmcgX0dfZnBvc190Owp0eXBlZGVmIGxvbmcgX0dfZ2lkX3Q7CnR5cGVkZWYgdW5z
aWduZWQgbG9uZyBfR19pbm9fdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9HX21vZGVfdDsKdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIF9HX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBfR19vZmZfdDsKdHlw
ZWRlZiBsb25nIF9HX3BpZF90OwoKCgp0eXBlZGVmIGludCBfR19wdHJkaWZmX3Q7CnR5cGVkZWYg
aW50ICAgX0dfc2lnc2V0X3Q7CgoKCnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3NpemVfdDsKdHlw
ZWRlZiBsb25nIF9HX3RpbWVfdDsKdHlwZWRlZiBsb25nIF9HX3VpZF90Owp0eXBlZGVmIGxvbmcg
aW50IF9HX3djaGFyX3Q7CgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgaW50IF9HX3NzaXplX3Q7CnR5
cGVkZWYgdW5zaWduZWQgaW50IF9HX3dpbnRfdDsKdHlwZWRlZiBjaGFyICogX0dfdmFfbGlzdDsK
CgoKCgoKCgoKCgoKCgoKCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJp
czIuNy8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKCgoKCgoKIAoKCiMgMTkgIi9vcHQv
Z251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvaW5jbHVkZS9zdGRkZWYu
aCIgMyA0CgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYt
cGMtc29sYXJpczIuNy8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgoKIAoKCgoKCiAKCgoK
CgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9p
Mzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKCiAKCiAKCiMg
MTkwICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1
ZGUvc3RkZGVmLmgiIDMgNAoKCgogCgoKCgogCgojIDI3MSAiL29wdC9nbnUvbGliL2djYy1saWIv
aTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKCgojIDI4MyAi
L29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy9pbmNsdWRlL3N0
ZGRlZi5oIiAzIDQKCgogCgogCgojIDMxNyAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1z
b2xhcmlzMi43LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKCgoKCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKIyA4NiAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIu
OTUuMy8uLi8uLi8uLi8uLi9pMzg2LXBjLXNvbGFyaXMyLjcvaW5jbHVkZS9fR19jb25maWcuaCIg
MiAzIDQKCgojIDMwICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45
NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMiAzCgoKCgoKCgoKCgoKCgoK
CgoKIyA1NSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2xpYmlvLmgiIDMKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCgoKCgoKCgoKIyAxMDQgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29s
YXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9saWJpby5oIiAzCgoKCgoK
CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKc3Ry
dWN0IF9JT19qdW1wX3Q7ICBzdHJ1Y3QgX0lPX0ZJTEU7CgogCiMgMTc1ICIvb3B0L2dudS9saWIv
Z2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvbGliaW8uaCIgMwoKCgoKCgoKCgogICAgdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCgoK
IAoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1
Y3QgX0lPX0ZJTEUgKl9zYnVmOwogICAKCiAgIAogIGludCBfcG9zOwojIDIwOCAiL29wdC9nbnUv
bGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL2xpYmlvLmgiIDMKCn07CgpzdHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CQkg
CgoKICAgCiAgIAogIGNoYXIqIF9JT19yZWFkX3B0cjsJIAogIGNoYXIqIF9JT19yZWFkX2VuZDsJ
IAogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CSAKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsJIAogIGNo
YXIqIF9JT193cml0ZV9wdHI7CSAKICBjaGFyKiBfSU9fd3JpdGVfZW5kOwkgCiAgY2hhciogX0lP
X2J1Zl9iYXNlOwkgCiAgY2hhciogX0lPX2J1Zl9lbmQ7CSAKICAgCiAgY2hhciAqX0lPX3NhdmVf
YmFzZTsgIAogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsgICAKICBjaGFyICpfSU9fc2F2ZV9lbmQ7
ICAKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9j
aGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwoKCgogIF9HX29mZl90ICBfb2Zm
c2V0OwoKCgogICAKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBjaGFyIF91bnVzZWQ7
CiAgY2hhciBfc2hvcnRidWZbMV07CgogICAKCgoKCgoKCgp9OwoKCgoKCgoKCgoKCnN0cnVjdCBf
SU9fRklMRV9wbHVzOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPX3N0ZGluXywgX0lP
X3N0ZG91dF8sIF9JT19zdGRlcnJfOwoKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIF9HX3NzaXpl
X3QgICgqcmVhZCkgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgdm9pZCAqLCBfR19zc2l6ZV90ICkgIDsK
ICBfR19zc2l6ZV90ICAoKndyaXRlKSAgKHN0cnVjdCBfSU9fRklMRSAqLCBjb25zdCB2b2lkICos
IF9HX3NzaXplX3QgKSAgOwogIF9HX29mZl90ICAoKnNlZWspICAoc3RydWN0IF9JT19GSUxFICos
IF9HX29mZl90ICwgaW50KSAgOwogIGludCAoKmNsb3NlKSAgKHN0cnVjdCBfSU9fRklMRSAqKSAg
Owp9IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CgogCnN0cnVjdCBfSU9fY29va2llX2ZpbGUK
ewogIHN0cnVjdCBfSU9fRklMRSBmaWxlOwogIGNvbnN0IHZvaWQgKnZ0YWJsZTsKICB2b2lkICpj
b29raWU7CiAgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBpb19mdW5jdGlvbnM7Cn07CgoKCmV4
dGVybiAiQyIgewoKCmV4dGVybiBpbnQgX191bmRlcmZsb3cgIChfSU9fRklMRSAqKSAgOwpleHRl
cm4gaW50IF9fdWZsb3cgIChfSU9fRklMRSAqKSAgOwpleHRlcm4gaW50IF9fb3ZlcmZsb3cgIChf
SU9fRklMRSAqLCBpbnQpICA7CgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIGludCBfSU9fZ2V0YyAg
KF9JT19GSUxFICpfX2ZwKSAgOwpleHRlcm4gaW50IF9JT19wdXRjICAoaW50IF9fYywgX0lPX0ZJ
TEUgKl9fZnApICA7CmV4dGVybiBpbnQgX0lPX2Zlb2YgIChfSU9fRklMRSAqX19mcCkgIDsKZXh0
ZXJuIGludCBfSU9fZmVycm9yICAoX0lPX0ZJTEUgKl9fZnApICA7CgpleHRlcm4gaW50IF9JT19w
ZWVrY19sb2NrZWQgIChfSU9fRklMRSAqX19mcCkgIDsKCiAKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zs
b2NrZmlsZSAgKF9JT19GSUxFICopICA7CmV4dGVybiB2b2lkIF9JT19mdW5sb2NrZmlsZSAgKF9J
T19GSUxFICopICA7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAgKF9JT19GSUxFICopICA7
CgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IF9JT192ZnNjYW5mICAoX0lPX0ZJTEUgKiwgY29uc3Qg
Y2hhciAqLCBfR192YV9saXN0ICwgaW50ICopICA7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmICAo
X0lPX0ZJTEUgKiwgY29uc3QgY2hhciAqLCBfR192YV9saXN0ICkgIDsKZXh0ZXJuIF9HX3NzaXpl
X3QgIF9JT19wYWRuICAoX0lPX0ZJTEUgKiwgaW50LCBfR19zc2l6ZV90ICkgIDsKZXh0ZXJuIF9H
X3NpemVfdCAgX0lPX3NnZXRuICAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBfR19zaXplX3QgKSAgOwoK
CgoKCmV4dGVybiBfR19vZmZfdCAgX0lPX3NlZWtvZmYgIChfSU9fRklMRSAqLCBfR19vZmZfdCAs
IGludCwgaW50KSAgOwpleHRlcm4gX0dfb2ZmX3QgIF9JT19zZWVrcG9zICAoX0lPX0ZJTEUgKiwg
X0dfb2ZmX3QgLCBpbnQpICA7CgoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgIChf
SU9fRklMRSAqKSAgOwoKCn0KCgoKIyAzNiAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1z
b2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAy
IDMKCn0KIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQysrIiB7CmNsYXNzIGlz
dHJlYW07ICAKY2xhc3Mgb3N0cmVhbTsgY2xhc3Mgc3RyZWFtYnVmOwoKIAoKCgoKCgoKdHlwZWRl
ZiBfR19vZmZfdCAgc3RyZWFtb2ZmOwp0eXBlZGVmIF9HX29mZl90ICBzdHJlYW1wb3M7Cgp0eXBl
ZGVmIF9HX3NzaXplX3QgIHN0cmVhbXNpemU7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX19mbXRm
bGFnczsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9faW9zdGF0ZTsKCnN0cnVjdCBfaW9zX2ZpZWxk
cwp7ICAKICAgIHN0cmVhbWJ1ZiAqX3N0cmJ1ZjsKICAgIG9zdHJlYW0qIF90aWU7CiAgICBpbnQg
X3dpZHRoOwogICAgX19mbXRmbGFncyBfZmxhZ3M7CiAgICBzaG9ydCAgX2ZpbGw7CiAgICBfX2lv
c3RhdGUgX3N0YXRlOwogICAgX19pb3N0YXRlIF9leGNlcHRpb25zOwogICAgaW50IF9wcmVjaXNp
b247CgogICAgdm9pZCAqX2FycmF5czsgIAp9OwoKCgoKCgoKCgoKCgoKCgojIDEyNCAiL29wdC9n
bnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs
dWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAzCgoKY2xhc3MgaW9zIDogcHVibGljIF9pb3NfZmllbGRz
IHsKICBpb3MmIG9wZXJhdG9yPShpb3MmKTsgICAKICBpb3MgKGNvbnN0IGlvcyYpOyAgCiAgcHVi
bGljOgogICAgdHlwZWRlZiBfX2ZtdGZsYWdzIGZtdGZsYWdzOwogICAgdHlwZWRlZiBpbnQgaW9z
dGF0ZTsKICAgIHR5cGVkZWYgaW50IG9wZW5tb2RlOwogICAgdHlwZWRlZiBfR19zc2l6ZV90ICBz
dHJlYW1zaXplOwogICAgZW51bSBpb19zdGF0ZSB7Cglnb29kYml0ID0gMCAsCgllb2ZiaXQgPSAx
ICwKCWZhaWxiaXQgPSAyICwKCWJhZGJpdCA9IDQgIH07CiAgICBlbnVtIG9wZW5fbW9kZSB7Cglp
biA9IDEgLAoJb3V0ID0gMiAsCglhdGUgPSA0ICwKCWFwcCA9IDggLAoJdHJ1bmMgPSAxNiAsCglu
b2NyZWF0ZSA9IDMyICwKCW5vcmVwbGFjZSA9IDY0ICwKCWJpbiA9IDEyOCAsICAKCWJpbmFyeSA9
IDEyOCAgfTsKICAgIGVudW0gc2Vla19kaXIgeyBiZWcsIGN1ciwgZW5kfTsKICAgIHR5cGVkZWYg
ZW51bSBzZWVrX2RpciBzZWVrZGlyOwogICAgIAogICAgZW51bSB7IHNraXB3cz0gMDEgLAoJICAg
bGVmdD0gMDIgLCByaWdodD0gMDQgLCBpbnRlcm5hbD0gMDEwICwKCSAgIGRlYz0gMDIwICwgb2N0
PSAwNDAgLCBoZXg9IDAxMDAgLAoJICAgc2hvd2Jhc2U9IDAyMDAgLCBzaG93cG9pbnQ9IDA0MDAg
LAoJICAgdXBwZXJjYXNlPSAwMTAwMCAsIHNob3dwb3M9IDAyMDAwICwKCSAgIHNjaWVudGlmaWM9
IDA0MDAwICwgZml4ZWQ9IDAxMDAwMCAsCgkgICB1bml0YnVmPSAwMjAwMDAgLCBzdGRpbz0gMDQw
MDAwIAoKCgoJICAgfTsKICAgIGVudW0geyAgCgliYXNlZmllbGQ9ZGVjK29jdCtoZXgsCglmbG9h
dGZpZWxkID0gc2NpZW50aWZpYytmaXhlZCwKCWFkanVzdGZpZWxkID0gbGVmdCtyaWdodCtpbnRl
cm5hbAogICAgfTsKCiMgMTc3ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMy
LjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKCgogICAg
b3N0cmVhbSogdGllKCkgY29uc3QgeyByZXR1cm4gX3RpZTsgfQogICAgb3N0cmVhbSogdGllKG9z
dHJlYW0qIHZhbCkgeyBvc3RyZWFtKiBzYXZlPV90aWU7IF90aWU9dmFsOyByZXR1cm4gc2F2ZTsg
fQoKICAgICAKICAgIHNob3J0ICBmaWxsKCkgY29uc3QgeyByZXR1cm4gX2ZpbGw7IH0KICAgIHNo
b3J0ICBmaWxsKHNob3J0ICBuZXdmKQoJe3Nob3J0ICBvbGRmID0gX2ZpbGw7IF9maWxsID0gbmV3
ZjsgcmV0dXJuIG9sZGY7fQogICAgZm10ZmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBfZmxh
Z3M7IH0KICAgIGZtdGZsYWdzIGZsYWdzKGZtdGZsYWdzIG5ld192YWwpIHsKCWZtdGZsYWdzIG9s
ZF92YWwgPSBfZmxhZ3M7IF9mbGFncyA9IG5ld192YWw7IHJldHVybiBvbGRfdmFsOyB9CiAgICBp
bnQgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX3ByZWNpc2lvbjsgfQogICAgaW50IHByZWNp
c2lvbihpbnQgbmV3cCkgewoJdW5zaWduZWQgc2hvcnQgb2xkcCA9IF9wcmVjaXNpb247IF9wcmVj
aXNpb24gPSAodW5zaWduZWQgc2hvcnQpbmV3cDsKCXJldHVybiBvbGRwOyB9CiAgICBmbXRmbGFn
cyBzZXRmKGZtdGZsYWdzIHZhbCkgewoJZm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsKCV9mbGFn
cyB8PSB2YWw7IHJldHVybiBvbGRiaXRzOyB9CiAgICBmbXRmbGFncyBzZXRmKGZtdGZsYWdzIHZh
bCwgZm10ZmxhZ3MgbWFzaykgewoJZm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsKCV9mbGFncyA9
IChfZmxhZ3MgJiB+bWFzaykgfCAodmFsICYgbWFzayk7IHJldHVybiBvbGRiaXRzOyB9CiAgICBm
bXRmbGFncyB1bnNldGYoZm10ZmxhZ3MgbWFzaykgewoJZm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFn
czsKCV9mbGFncyAmPSB+bWFzazsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGludCB3aWR0aCgpIGNv
bnN0IHsgcmV0dXJuIF93aWR0aDsgfQogICAgaW50IHdpZHRoKGludCB2YWwpIHsgaW50IHNhdmUg
PSBfd2lkdGg7IF93aWR0aCA9IHZhbDsgcmV0dXJuIHNhdmU7IH0KCgoKCiAgICB2b2lkIF90aHJv
d19mYWlsdXJlKCkgY29uc3QgeyB9CgogICAgdm9pZCBjbGVhcihpb3N0YXRlIHN0YXRlID0gMCkg
ewoJX3N0YXRlID0gX3N0cmJ1ZiA/IHN0YXRlIDogc3RhdGV8YmFkYml0OwoJaWYgKF9zdGF0ZSAm
IF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICB2b2lkIHNldChpb3N0YXRlIGZs
YWcpIHsgX3N0YXRlIHw9IGZsYWc7CglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19m
YWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0c3RhdGUoaW9zdGF0ZSBmbGFnKSB7IF9zdGF0ZSB8PSBm
bGFnOyAgCglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAg
IGludCBnb29kKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlID09IDA7IH0KICAgIGludCBlb2YoKSBj
b25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmVvZmJpdDsgfQogICAgaW50IGZhaWwoKSBjb25z
dCB7IHJldHVybiBfc3RhdGUgJiAoaW9zOjpiYWRiaXR8aW9zOjpmYWlsYml0KTsgfQogICAgaW50
IGJhZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIGlvczo6YmFkYml0OyB9CiAgICBpb3N0YXRl
IHJkc3RhdGUoKSBjb25zdCB7IHJldHVybiBfc3RhdGU7IH0KICAgIG9wZXJhdG9yIHZvaWQqKCkg
Y29uc3QgeyByZXR1cm4gZmFpbCgpID8gKHZvaWQqKTAgOiAodm9pZCopKC0xKTsgfQogICAgaW50
IG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIGZhaWwoKTsgfQogICAgaW9zdGF0ZSBleGNlcHRp
b25zKCkgY29uc3QgeyByZXR1cm4gX2V4Y2VwdGlvbnM7IH0KICAgIHZvaWQgZXhjZXB0aW9ucyhp
b3N0YXRlIGVuYWJsZSkgewoJX2V4Y2VwdGlvbnMgPSBlbmFibGU7CglpZiAoX3N0YXRlICYgX2V4
Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KCiAgICBzdHJlYW1idWYqIHJkYnVmKCkgY29u
c3QgeyByZXR1cm4gX3N0cmJ1ZjsgfQogICAgc3RyZWFtYnVmKiByZGJ1ZihzdHJlYW1idWYgKl9z
KSB7CiAgICAgIHN0cmVhbWJ1ZiAqX29sZCA9IF9zdHJidWY7IF9zdHJidWYgPSBfczsgY2xlYXIg
KCk7IHJldHVybiBfb2xkOyB9CgogICAgc3RhdGljIGludCBzeW5jX3dpdGhfc3RkaW8oaW50IG9u
KTsKICAgIHN0YXRpYyB2b2lkIHN5bmNfd2l0aF9zdGRpbygpIHsgc3luY193aXRoX3N0ZGlvKDEp
OyB9CiAgICBzdGF0aWMgZm10ZmxhZ3MgYml0YWxsb2MoKTsKICAgIHN0YXRpYyBpbnQgeGFsbG9j
KCk7CiAgICB2b2lkKiYgcHdvcmQoaW50KTsKICAgIHZvaWQqIHB3b3JkKGludCkgY29uc3Q7CiAg
ICBsb25nJiBpd29yZChpbnQpOwogICAgbG9uZyBpd29yZChpbnQpIGNvbnN0OwoKCgoKCgoKCgog
ICAgIAogICAgY2xhc3MgSW5pdCB7CiAgICBwdWJsaWM6CiAgICAgIEluaXQgKCkgeyB9CiAgICB9
OwoKICBwcm90ZWN0ZWQ6CiAgICBpbmxpbmUgaW9zKHN0cmVhbWJ1Ziogc2IgPSAwLCBvc3RyZWFt
KiB0aWVfdG8gPSAwKTsKICAgIGlubGluZSB2aXJ0dWFsIH5pb3MoKTsKICAgIGlubGluZSB2b2lk
IGluaXQoc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllID0gMCk7Cn07CgoKCgp0eXBlZGVmIGlv
czo6c2Vla19kaXIgX3NlZWtfZGlyOwoKCiAKIAogCiAKIAoKIAogCmNsYXNzIHN0cmVhbW1hcmtl
ciA6IHByaXZhdGUgX0lPX21hcmtlciB7CiAgICBmcmllbmQgY2xhc3Mgc3RyZWFtYnVmOwogICAg
dm9pZCBzZXRfb2Zmc2V0KGludCBvZmZzZXQpIHsgX3BvcyA9IG9mZnNldDsgfQogIHB1YmxpYzoK
ICAgIHN0cmVhbW1hcmtlcihzdHJlYW1idWYgKnNiKTsKICAgIH5zdHJlYW1tYXJrZXIoKTsKICAg
IGludCBzYXZpbmcoKSB7IHJldHVybiAgMTsgfQogICAgaW50IGRlbHRhKHN0cmVhbW1hcmtlciYp
OwogICAgaW50IGRlbHRhKCk7Cn07CgpzdHJ1Y3Qgc3RyZWFtYnVmIDogcHVibGljIF9JT19GSUxF
IHsgIAogICAgZnJpZW5kIGNsYXNzIGlvczsKICAgIGZyaWVuZCBjbGFzcyBpc3RyZWFtOwogICAg
ZnJpZW5kIGNsYXNzIG9zdHJlYW07CiAgICBmcmllbmQgY2xhc3Mgc3RyZWFtbWFya2VyOwogICAg
Y29uc3Qgdm9pZCAqJl92dGFibGUoKSB7IHJldHVybiAqKGNvbnN0IHZvaWQqKikoKF9JT19GSUxF
Kil0aGlzICsgMSk7IH0KICBwcm90ZWN0ZWQ6CiAgICBzdGF0aWMgc3RyZWFtYnVmKiBfbGlzdF9h
bGw7ICAKICAgIF9JT19GSUxFKiYgeGNoYWluKCkgeyByZXR1cm4gX2NoYWluOyB9CiAgICB2b2lk
IF91bl9saW5rKCk7CiAgICB2b2lkIF9saW5rX2luKCk7CiAgICBjaGFyKiBncHRyKCkgY29uc3QK
ICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVh
ZF9wdHI7IH0KICAgIGNoYXIqIHBwdHIoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfcHRyOyB9
CiAgICBjaGFyKiBlZ3B0cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAgJiAweDEwMCAg
PyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgIGNoYXIqIGVwcHRyKCkgY29uc3Qg
eyByZXR1cm4gX0lPX3dyaXRlX2VuZDsgfQogICAgY2hhciogcGJhc2UoKSBjb25zdCB7IHJldHVy
biBfSU9fd3JpdGVfYmFzZTsgfQogICAgY2hhciogZWJhY2soKSBjb25zdAogICAgICB7IHJldHVy
biBfZmxhZ3MgICYgMHgxMDAgID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX2Jhc2U7fQogICAg
Y2hhciogYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfYmFzZTsgfQogICAgY2hhciogZWJ1
ZigpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfZW5kOyB9CiAgICBpbnQgYmxlbigpIGNvbnN0IHsg
cmV0dXJuIF9JT19idWZfZW5kIC0gX0lPX2J1Zl9iYXNlOyB9CiAgICB2b2lkIHhwdXRfY2hhcihj
aGFyIGMpIHsgKl9JT193cml0ZV9wdHIrKyA9IGM7IH0KICAgIGludCB4ZmxhZ3MoKSB7IHJldHVy
biBfZmxhZ3MgOyB9CiAgICBpbnQgeGZsYWdzKGludCBmKSB7aW50IGZsID0gX2ZsYWdzIDsgX2Zs
YWdzICA9IGY7IHJldHVybiBmbDt9CiAgICB2b2lkIHhzZXRmbGFncyhpbnQgZikgeyBfZmxhZ3Mg
IHw9IGY7IH0KICAgIHZvaWQgeHNldGZsYWdzKGludCBmLCBpbnQgbWFzaykKICAgICAgeyBfZmxh
Z3MgID0gKF9mbGFncyAgJiB+bWFzaykgfCAoZiAmIG1hc2spOyB9CiAgICB2b2lkIGdidW1wKGlu
dCBuKQogICAgICB7IF9mbGFncyAgJiAweDEwMCAgPyAoX0lPX3NhdmVfYmFzZSs9bik6KF9JT19y
ZWFkX3B0cis9bik7fQogICAgdm9pZCBwYnVtcChpbnQgbikgeyBfSU9fd3JpdGVfcHRyICs9IG47
IH0KICAgIHZvaWQgc2V0YihjaGFyKiBiLCBjaGFyKiBlYiwgaW50IGE9MCk7CiAgICB2b2lkIHNl
dHAoY2hhciogcCwgY2hhciogZXApCiAgICAgIHsgX0lPX3dyaXRlX2Jhc2U9X0lPX3dyaXRlX3B0
cj1wOyBfSU9fd3JpdGVfZW5kPWVwOyB9CiAgICB2b2lkIHNldGcoY2hhciogZWIsIGNoYXIqIGcs
IGNoYXIgKmVnKSB7CiAgICAgIGlmIChfZmxhZ3MgICYgMHgxMDAgKSBfSU9fZnJlZV9iYWNrdXBf
YXJlYSh0aGlzKTsgCiAgICAgIF9JT19yZWFkX2Jhc2UgPSBlYjsgX0lPX3JlYWRfcHRyID0gZzsg
X0lPX3JlYWRfZW5kID0gZWc7IH0KICAgIGNoYXIgKnNob3J0YnVmKCkgeyByZXR1cm4gX3Nob3J0
YnVmOyB9CgogICAgaW50IGluX2JhY2t1cCgpIHsgcmV0dXJuIF9mbGFncyAmIDB4MTAwIDsgfQog
ICAgIAogICAgY2hhciAqR2Jhc2UoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19zYXZlX2Jh
c2UgOiBfSU9fcmVhZF9iYXNlOyB9CiAgICAgCiAgICBjaGFyICplR3B0cigpIHsgcmV0dXJuIGlu
X2JhY2t1cCgpID8gX0lPX3NhdmVfZW5kIDogX0lPX3JlYWRfZW5kOyB9CiAgICAgCiAgICBjaGFy
ICpCYmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3JlYWRfYmFzZSA6IF9JT19zYXZl
X2Jhc2U7IH0KICAgIGNoYXIgKkJwdHIoKSB7IHJldHVybiBfSU9fYmFja3VwX2Jhc2U7IH0KICAg
ICAKICAgIGNoYXIgKmVCcHRyKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fcmVhZF9lbmQg
OiBfSU9fc2F2ZV9lbmQ7IH0KICAgIGNoYXIgKk5iYXNlKCkgeyByZXR1cm4gX0lPX3NhdmVfYmFz
ZTsgfQogICAgY2hhciAqZU5wdHIoKSB7IHJldHVybiBfSU9fc2F2ZV9lbmQ7IH0KICAgIGludCBo
YXZlX2JhY2t1cCgpIHsgcmV0dXJuIF9JT19zYXZlX2Jhc2UgIT0gX19udWxsIDsgfQogICAgaW50
IGhhdmVfbWFya2VycygpIHsgcmV0dXJuIF9tYXJrZXJzICE9IF9fbnVsbCA7IH0KICAgIHZvaWQg
ZnJlZV9iYWNrdXBfYXJlYSgpOwogICAgdm9pZCB1bnNhdmVfbWFya2VycygpOyAgCiAgICBpbnQg
cHV0X21vZGUoKSB7IHJldHVybiBfZmxhZ3MgJiAweDgwMCA7IH0KICAgIGludCBzd2l0Y2hfdG9f
Z2V0X21vZGUoKTsKICAgIAogICAgc3RyZWFtYnVmKGludCBmbGFncz0wKTsKICBwdWJsaWM6CiAg
ICBzdGF0aWMgaW50IGZsdXNoX2FsbCgpOwogICAgc3RhdGljIHZvaWQgZmx1c2hfYWxsX2xpbmVi
dWZmZXJlZCgpOyAgCiAgICB2aXJ0dWFsIH5zdHJlYW1idWYoKTsKICAgIHZpcnR1YWwgaW50IG92
ZXJmbG93KGludCBjID0gKC0xKSApOyAgCiAgICB2aXJ0dWFsIGludCB1bmRlcmZsb3coKTsgIAog
ICAgdmlydHVhbCBpbnQgdWZsb3coKTsgIAogICAgdmlydHVhbCBpbnQgcGJhY2tmYWlsKGludCBj
KTsKIAogICAgdmlydHVhbCBzdHJlYW1zaXplIHhzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1z
aXplIG4pOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHhzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXpl
IG4pOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2Rpciwg
aW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrcG9z
KHN0cmVhbXBvcyBwb3MsIGludCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCk7CgogICAgc3RyZWFt
cG9zIHB1YnNlZWtvZmYoc3RyZWFtb2ZmIG8sIF9zZWVrX2RpciBkLCBpbnQgbW9kZT1pb3M6Omlu
fGlvczo6b3V0KQogICAgICB7IHJldHVybiBfSU9fc2Vla29mZiAodGhpcywgbywgZCwgbW9kZSk7
IH0KICAgIHN0cmVhbXBvcyBwdWJzZWVrcG9zKHN0cmVhbXBvcyBwb3MsIGludCBtb2RlID0gaW9z
Ojppbnxpb3M6Om91dCkKICAgICAgeyByZXR1cm4gX0lPX3NlZWtwb3MgKHRoaXMsIHBvcywgbW9k
ZSk7IH0KICAgIHN0cmVhbXBvcyBzc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1v
ZGU9aW9zOjppbnxpb3M6Om91dCk7CiAgICBzdHJlYW1wb3Mgc3NlZWtwb3Moc3RyZWFtcG9zIHBv
cywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtYnVmKiBz
ZXRidWYoY2hhciogcCwgaW50IGxlbik7CiAgICB2aXJ0dWFsIGludCBzeW5jKCk7CiAgICB2aXJ0
dWFsIGludCBkb2FsbG9jYXRlKCk7CgogICAgaW50IHNlZWttYXJrKHN0cmVhbW1hcmtlciYgbWFy
aywgaW50IGRlbHRhID0gMCk7CiAgICBpbnQgc3B1dGJhY2tjKGNoYXIgYyk7CiAgICBpbnQgc3Vu
Z2V0YygpOwogICAgaW50IHVuYnVmZmVyZWQoKSB7IHJldHVybiBfZmxhZ3MgJiAyICA/IDEgOiAw
OyB9CiAgICBpbnQgbGluZWJ1ZmZlcmVkKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgyMDAgID8gMSA6
IDA7IH0KICAgIHZvaWQgdW5idWZmZXJlZChpbnQgaSkKCXsgaWYgKGkpIF9mbGFncyB8PSAyIDsg
ZWxzZSBfZmxhZ3MgJj0gfjIgOyB9CiAgICB2b2lkIGxpbmVidWZmZXJlZChpbnQgaSkKCXsgaWYg
KGkpIF9mbGFncyB8PSAweDIwMCA7IGVsc2UgX2ZsYWdzICY9IH4weDIwMCA7IH0KICAgIGludCBh
bGxvY2F0ZSgpIHsgIAoJaWYgKGJhc2UoKSB8fCB1bmJ1ZmZlcmVkKCkpIHJldHVybiAwOwoJZWxz
ZSByZXR1cm4gZG9hbGxvY2F0ZSgpOyB9CiAgICAgCiAgICB2b2lkIGFsbG9jYnVmKCkgeyBpZiAo
YmFzZSgpID09IF9fbnVsbCApIGRvYWxsb2NidWYoKTsgfQogICAgdm9pZCBkb2FsbG9jYnVmKCk7
CiAgICBpbnQgaW5fYXZhaWwoKSB7IHJldHVybiBfSU9fcmVhZF9lbmQgLSBfSU9fcmVhZF9wdHI7
IH0KICAgIGludCBvdXRfd2FpdGluZygpIHsgcmV0dXJuIF9JT193cml0ZV9wdHIgLSBfSU9fd3Jp
dGVfYmFzZTsgfQogICAgc3RyZWFtc2l6ZSBzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXpl
IG4pIHsgcmV0dXJuIHhzcHV0bihzLCBuKTsgfQogICAgc3RyZWFtc2l6ZSBwYWRuKGNoYXIgcGFk
LCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19wYWRuKHRoaXMsIHBhZCwgbik7IH0KICAgIHN0
cmVhbXNpemUgc2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBuKSB7IHJldHVybiBfSU9fc2dldG4o
dGhpcywgcywgbik7IH0KICAgIGludCBpZ25vcmUoaW50KTsKICAgIGludCBnZXRfY29sdW1uKCk7
CiAgICBpbnQgc2V0X2NvbHVtbihpbnQpOwogICAgbG9uZyBzZ2V0bGluZShjaGFyKiBidWYsIF9H
X3NpemVfdCAgbiwgY2hhciBkZWxpbSwgaW50IHB1dGJhY2tfZGVsaW0pOwogICAgaW50IHNwdXRj
KGludCBjKSB7IHJldHVybiBfSU9fcHV0YyhjLCB0aGlzKTsgfQogICAgaW50IHNidW1wYygpIHsg
cmV0dXJuIF9JT19nZXRjKHRoaXMpOyB9CiAgICBpbnQgc2dldGMoKSB7IHJldHVybiAoKCAgdGhp
cyAgKS0+X0lPX3JlYWRfcHRyID49ICggIHRoaXMgICktPl9JT19yZWFkX2VuZCAmJiBfX3VuZGVy
ZmxvdyAoICB0aGlzICApID09ICgtMSkgID8gKC0xKSAgOiAqKHVuc2lnbmVkIGNoYXIgKikgKCAg
dGhpcyAgKS0+X0lPX3JlYWRfcHRyKSAgOyB9CiAgICBpbnQgc25leHRjKCkgewoJaWYgKF9JT19y
ZWFkX3B0ciA+PSBfSU9fcmVhZF9lbmQgJiYgX191bmRlcmZsb3codGhpcykgPT0gKC0xKSApCgkg
IHJldHVybiAoLTEpIDsKCWVsc2UgcmV0dXJuIF9JT19yZWFkX3B0cisrLCBzZ2V0YygpOyB9CiAg
ICB2b2lkIHN0b3NzYygpIHsgaWYgKF9JT19yZWFkX3B0ciA8IF9JT19yZWFkX2VuZCkgX0lPX3Jl
YWRfcHRyKys7IH0KICAgIGludCB2c2NhbihjaGFyIGNvbnN0ICpmbXQwLCBfR192YV9saXN0ICBh
cCwgaW9zKiBzdHJlYW0gPSBfX251bGwgKTsKICAgIGludCBzY2FuKGNoYXIgY29uc3QgKmZtdDAg
Li4uKTsKICAgIGludCB2Zm9ybShjaGFyIGNvbnN0ICpmbXQwLCBfR192YV9saXN0ICBhcCk7CiAg
ICBpbnQgZm9ybShjaGFyIGNvbnN0ICpmbXQwIC4uLik7CgoKCgogICAgdmlydHVhbCBzdHJlYW1z
aXplIHN5c19yZWFkKGNoYXIqIGJ1Ziwgc3RyZWFtc2l6ZSBzaXplKTsKICAgIHZpcnR1YWwgc3Ry
ZWFtc2l6ZSBzeXNfd3JpdGUoY29uc3QgY2hhciosIHN0cmVhbXNpemUpOwogICAgdmlydHVhbCBz
dHJlYW1wb3Mgc3lzX3NlZWsoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgdmlydHVhbCBpbnQg
c3lzX2Nsb3NlKCk7CiAgICB2aXJ0dWFsIGludCBzeXNfc3RhdCh2b2lkKik7ICAKCgoKCn07Cgog
CiAKCmNsYXNzIGZpbGVidWYgOiBwdWJsaWMgc3RyZWFtYnVmIHsKICBwcm90ZWN0ZWQ6CiAgICB2
b2lkIGluaXQoKTsKICBwdWJsaWM6CiAgICBzdGF0aWMgY29uc3QgaW50IG9wZW5wcm90OyAgCiAg
ICBmaWxlYnVmKCk7CiAgICBmaWxlYnVmKGludCBmZCk7CiAgICBmaWxlYnVmKGludCBmZCwgY2hh
ciogcCwgaW50IGxlbik7CgoKCiAgICB+ZmlsZWJ1ZigpOwogICAgZmlsZWJ1ZiogYXR0YWNoKGlu
dCBmZCk7CiAgICBmaWxlYnVmKiBvcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFy
ICptb2RlKTsKICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGlvczo6b3Bl
bm1vZGUgbW9kZSwgaW50IHByb3QgPSAwNjY0KTsKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygp
OwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMgPSAoLTEpICk7CiAgICBpbnQgaXNfb3Bl
bigpIGNvbnN0IHsgcmV0dXJuIF9maWxlbm8gPj0gMDsgfQogICAgaW50IGZkKCkgY29uc3QgeyBy
ZXR1cm4gaXNfb3BlbigpID8gX2ZpbGVubyA6ICgtMSkgOyB9CiAgICBmaWxlYnVmKiBjbG9zZSgp
OwogICAgdmlydHVhbCBpbnQgZG9hbGxvY2F0ZSgpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vl
a29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7CiAg
ICB2aXJ0dWFsIHN0cmVhbWJ1Ziogc2V0YnVmKGNoYXIqIHAsIGludCBsZW4pOwogICAgc3RyZWFt
c2l6ZSB4c3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHN0cmVhbXNpemUg
eHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIGludCBzeW5jKCk7CiAg
cHJvdGVjdGVkOiAgCiAKICAgIGludCBpc19yZWFkaW5nKCkgeyByZXR1cm4gZWJhY2soKSAhPSBl
Z3B0cigpOyB9CiAgICBjaGFyKiBjdXJfcHRyKCkgeyByZXR1cm4gaXNfcmVhZGluZygpID8gIGdw
dHIoKSA6IHBwdHIoKTsgfQogICAgIAogICAgY2hhciogZmlsZV9wdHIoKSB7IHJldHVybiBlR3B0
cigpOyB9CiAgICAgCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3JlYWQoY2hhciogYnVmLCBz
dHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc3lzX3NlZWsoc3RyZWFtb2Zm
LCBfc2Vla19kaXIpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c193cml0ZShjb25zdCBjaGFy
Kiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIGludCBzeXNfc3RhdCh2b2lkKik7ICAKICAgIHZp
cnR1YWwgaW50IHN5c19jbG9zZSgpOwoKCgoKfTsKCmlubGluZSB2b2lkIGlvczo6aW5pdChzdHJl
YW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsKCQlfc3RhdGUgPSBzYiA/IGlvczo6Z29vZGJp
dCA6IGlvczo6YmFkYml0OyBfZXhjZXB0aW9ucz0wOwoJCV9zdHJidWY9c2I7IF90aWUgPSB0aWVf
dG87IF93aWR0aD0wOyBfZmlsbD0nICc7CgoJCV9mbGFncz1pb3M6OnNraXB3c3xpb3M6OmRlYzsK
CgoKCQlfcHJlY2lzaW9uPTY7IF9hcnJheXMgPSAwOyB9CgppbmxpbmUgaW9zOjppb3Moc3RyZWFt
YnVmKiBzYiwgb3N0cmVhbSogdGllX3RvKSB7IGluaXQoc2IsIHRpZV90byk7IH0KCmlubGluZSBp
b3M6On5pb3MoKSB7CgoKCiAgICAgCiAgICAgCiAgICBvcGVyYXRvciBkZWxldGVbXSAoX2FycmF5
cyk7Cn0KfSAgCgojIDMxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcv
Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaW9zdHJlYW0uaCIgMiAzCgoKZXh0ZXJu
ICJDKysiIHsKY2xhc3MgaXN0cmVhbTsgY2xhc3Mgb3N0cmVhbTsKdHlwZWRlZiBpb3MmICgqX19t
YW5pcCkoaW9zJik7CnR5cGVkZWYgaXN0cmVhbSYgKCpfX2ltYW5pcCkoaXN0cmVhbSYpOwp0eXBl
ZGVmIG9zdHJlYW0mICgqX19vbWFuaXApKG9zdHJlYW0mKTsKCmV4dGVybiBpc3RyZWFtJiB3cyhp
c3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYgb3V0cyk7CmV4dGVy
biBvc3RyZWFtJiBlbmRsKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kcyhvc3Ry
ZWFtJiBvdXRzKTsKCmNsYXNzIG9zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MKewogICAgIAog
ICAgdm9pZCBkb19vc2Z4KCk7CiAgcHVibGljOgogICAgb3N0cmVhbSgpIHsgfQogICAgb3N0cmVh
bShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVkPSBfX251bGwgKTsKICAgIGludCBvcGZ4KCkg
ewoJaWYgKCFnb29kKCkpIHJldHVybiAwOwoJZWxzZSB7IGlmIChfdGllKSBfdGllLT5mbHVzaCgp
OyAgOyByZXR1cm4gMTt9IH0KICAgIHZvaWQgb3NmeCgpIHsgIDsKCQkgIGlmIChmbGFncygpICYg
KGlvczo6dW5pdGJ1Znxpb3M6OnN0ZGlvKSkKCQkgICAgICBkb19vc2Z4KCk7IH0KICAgIG9zdHJl
YW0mIGZsdXNoKCk7CiAgICBvc3RyZWFtJiBwdXQoY2hhciBjKSB7IF9zdHJidWYtPnNwdXRjKGMp
OyByZXR1cm4gKnRoaXM7IH0KCgoKCgogICAgb3N0cmVhbSYgd3JpdGUoY29uc3QgY2hhciAqcywg
c3RyZWFtc2l6ZSBuKTsKICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMs
IHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMsIG4pO30K
ICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHNpZ25lZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pCiAg
ICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiB3cml0
ZShjb25zdCB2b2lkICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25z
dCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiBzZWVrcChzdHJlYW1wb3MpOwogICAgb3N0cmVh
bSYgc2Vla3Aoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgc3RyZWFtcG9zIHRlbGxwKCk7CiAg
ICBvc3RyZWFtJiBmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOwogICAgb3N0cmVhbSYgdmZv
cm0oY29uc3QgY2hhciAqZm9ybWF0LCBfR192YV9saXN0ICBhcmdzKTsKCiAgICBvc3RyZWFtJiBv
cGVyYXRvcjw8KGNoYXIgYyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGNoYXIg
YykgeyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8
KHNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQogICAgb3N0cmVh
bSYgb3BlcmF0b3I8PChjb25zdCBjaGFyICpzKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29u
c3QgdW5zaWduZWQgY2hhciAqcykKCXsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNoYXIqKXM7
IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgc2lnbmVkIGNoYXIgKnMpCgl7IHJldHVy
biAoKnRoaXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNv
bnN0IHZvaWQgKnApOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChpbnQgbik7CiAgICBvc3RyZWFt
JiBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9u
ZyBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBuKTsKCiAgICBfX2V4
dGVuc2lvbl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBsb25nIG4pOwogICAgX19leHRlbnNp
b25fXyBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBuKTsKCiAgICBvc3Ry
ZWFtJiBvcGVyYXRvcjw8KHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgoaW50KW4pO30KICAg
IG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgc2hvcnQgbikge3JldHVybiBvcGVyYXRvcjw8
KCh1bnNpZ25lZCBpbnQpbik7fQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoYm9vbCBiKSB7IHJl
dHVybiBvcGVyYXRvcjw8KChpbnQpYik7IH0KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGRvdWJs
ZSBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoZmxvYXQgbikgeyByZXR1cm4gb3BlcmF0b3I8
PCgoZG91YmxlKW4pOyB9CgoKCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIG4p
IHsgcmV0dXJuIG9wZXJhdG9yPDwoKGRvdWJsZSluKTsgfQoKICAgIG9zdHJlYW0mIG9wZXJhdG9y
PDwoX19vbWFuaXAgZnVuYykgeyByZXR1cm4gKCpmdW5jKSgqdGhpcyk7IH0KICAgIG9zdHJlYW0m
IG9wZXJhdG9yPDwoX19tYW5pcCBmdW5jKSB7KCpmdW5jKSgqdGhpcyk7IHJldHVybiAqdGhpczt9
CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHN0cmVhbWJ1ZiopOwoKCgp9OwoKY2xhc3MgaXN0cmVh
bSA6IHZpcnR1YWwgcHVibGljIGlvcwp7CiAgICAgCnByb3RlY3RlZDoKICAgIF9HX3NpemVfdCAg
X2djb3VudDsKCiAgICBpbnQgX3NraXBfd3MoKTsKICBwdWJsaWM6CiAgICBpc3RyZWFtKCk6IF9n
Y291bnQgKDApIHsgfQogICAgaXN0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRpZWQ9IF9f
bnVsbCApOwogICAgaXN0cmVhbSYgZ2V0KGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9
ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hh
ciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0K
ICAgIGlzdHJlYW0mIGdldChjaGFyJiBjKTsKICAgIGlzdHJlYW0mIGdldCh1bnNpZ25lZCBjaGFy
JiBjKSB7IHJldHVybiBnZXQoKGNoYXImKWMpOyB9CiAgICBpc3RyZWFtJiBnZXRsaW5lKGNoYXIq
IHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0bGluZSh1
bnNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4g
Z2V0bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgZ2V0KHNpZ25l
ZCBjaGFyJiBjKSAgeyByZXR1cm4gZ2V0KChjaGFyJiljKTsgfQogICAgaXN0cmVhbSYgZ2V0KHNp
Z25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0
KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXRsaW5lKHNpZ25lZCBj
aGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0bGluZSgo
Y2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgcmVhZChjaGFyICpwdHIsIHN0
cmVhbXNpemUgbik7CiAgICBpc3RyZWFtJiByZWFkKHVuc2lnbmVkIGNoYXIgKnB0ciwgc3RyZWFt
c2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFt
JiByZWFkKHNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVh
ZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZCh2b2lkICpwdHIsIHN0cmVhbXNp
emUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYg
Z2V0KHN0cmVhbWJ1ZiYgc2IsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldHMo
Y2hhciAqKnMsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGludCBpcGZ4KGludCBuZWVkID0gMCkg
ewoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9CgllbHNlIHsK
CSAgIDsKCSAgaWYgKF90aWUgJiYgKG5lZWQgPT0gMCB8fCByZGJ1ZigpLT5pbl9hdmFpbCgpIDwg
bmVlZCkpIF90aWUtPmZsdXNoKCk7CgkgIGlmICghbmVlZCAmJiAoZmxhZ3MoKSAmIGlvczo6c2tp
cHdzKSkgcmV0dXJuIF9za2lwX3dzKCk7CgkgIGVsc2UgcmV0dXJuIDE7Cgl9CiAgICB9CiAgICBp
bnQgaXBmeDAoKSB7ICAKCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1cm4g
MDsgfQoJZWxzZSB7CgkgICA7CgkgIGlmIChfdGllKSBfdGllLT5mbHVzaCgpOwoJICBpZiAoZmxh
Z3MoKSAmIGlvczo6c2tpcHdzKSByZXR1cm4gX3NraXBfd3MoKTsKCSAgZWxzZSByZXR1cm4gMTsK
CX0KICAgIH0KICAgIGludCBpcGZ4MSgpIHsgIAoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFp
bGJpdCk7IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUgJiYgcmRidWYoKS0+
aW5fYXZhaWwoKSA9PSAwKSBfdGllLT5mbHVzaCgpOwoJICByZXR1cm4gMTsKCX0KICAgIH0KICAg
IHZvaWQgaXNmeCgpIHsgIDsgfQogICAgaW50IGdldCgpIHsgaWYgKCFpcGZ4MSgpKSByZXR1cm4g
KC0xKSA7CgkJZWxzZSB7IGludCBjaCA9IF9zdHJidWYtPnNidW1wYygpOwoJCSAgICAgICBpZiAo
Y2ggPT0gKC0xKSApIHNldChpb3M6OmVvZmJpdCk7CgkJICAgICAgIGlzZngoKTsKCQkgICAgICAg
cmV0dXJuIGNoOwoJCSAgICAgfSB9CiAgICBpbnQgcGVlaygpOwogICAgX0dfc2l6ZV90ICBnY291
bnQoKSB7IHJldHVybiBfZ2NvdW50OyB9CiAgICBpc3RyZWFtJiBpZ25vcmUoaW50IG49MSwgaW50
IGRlbGltID0gKC0xKSApOwogICAgaW50IHN5bmMgKCk7CiAgICBpc3RyZWFtJiBzZWVrZyhzdHJl
YW1wb3MpOwogICAgaXN0cmVhbSYgc2Vla2coc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgc3Ry
ZWFtcG9zIHRlbGxnKCk7CiAgICBpc3RyZWFtJiBwdXRiYWNrKGNoYXIgY2gpIHsKCWlmIChnb29k
KCkgJiYgX3N0cmJ1Zi0+c3B1dGJhY2tjKGNoKSA9PSAoLTEpICkgY2xlYXIoaW9zOjpiYWRiaXQp
OwoJcmV0dXJuICp0aGlzO30KICAgIGlzdHJlYW0mIHVuZ2V0KCkgewoJaWYgKGdvb2QoKSAmJiBf
c3RyYnVmLT5zdW5nZXRjKCkgPT0gKC0xKSApIGNsZWFyKGlvczo6YmFkYml0KTsKCXJldHVybiAq
dGhpczt9CiAgICBpc3RyZWFtJiBzY2FuKGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOwogICAgaXN0
cmVhbSYgdnNjYW4oY29uc3QgY2hhciAqZm9ybWF0LCBfR192YV9saXN0ICBhcmdzKTsKCgoKCgoK
ICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oY2hhciopOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1
bnNpZ25lZCBjaGFyKiBwKSB7IHJldHVybiBvcGVyYXRvcj4+KChjaGFyKilwKTsgfQogICAgaXN0
cmVhbSYgb3BlcmF0b3I+PihzaWduZWQgY2hhcipwKSB7IHJldHVybiBvcGVyYXRvcj4+KChjaGFy
KilwKTsgfQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyJiBjKTsKICAgIGlzdHJlYW0mIG9w
ZXJhdG9yPj4odW5zaWduZWQgY2hhciYgYykge3JldHVybiBvcGVyYXRvcj4+KChjaGFyJiljKTt9
CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9wZXJhdG9y
Pj4oKGNoYXImKWMpO30KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oaW50Jik7CiAgICBpc3RyZWFt
JiBvcGVyYXRvcj4+KGxvbmcmKTsKCiAgICBfX2V4dGVuc2lvbl9fIGlzdHJlYW0mIG9wZXJhdG9y
Pj4obG9uZyBsb25nJik7CiAgICBfX2V4dGVuc2lvbl9fIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5z
aWduZWQgbG9uZyBsb25nJik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaG9ydCYpOwogICAg
aXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9y
Pj4odW5zaWduZWQgbG9uZyYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9y
dCYpOwoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oYm9vbCYpOwoKICAgIGlzdHJlYW0mIG9wZXJh
dG9yPj4oZmxvYXQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oZG91YmxlJik7CiAgICBpc3Ry
ZWFtJiBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KCBf
X21hbmlwIGZ1bmMpIHsoKmZ1bmMpKCp0aGlzKTsgcmV0dXJuICp0aGlzO30KICAgIGlzdHJlYW0m
IG9wZXJhdG9yPj4oX19pbWFuaXAgZnVuYykgeyByZXR1cm4gKCpmdW5jKSgqdGhpcyk7IH0KICAg
IGlzdHJlYW0mIG9wZXJhdG9yPj4oc3RyZWFtYnVmKik7Cn07CgpjbGFzcyBpb3N0cmVhbSA6IHB1
YmxpYyBpc3RyZWFtLCBwdWJsaWMgb3N0cmVhbQp7CiAgcHVibGljOgogICAgaW9zdHJlYW0oKSB7
IH0KICAgIGlvc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qdGllZD0gX19udWxsICk7Cn07
CgpjbGFzcyBfSU9faXN0cmVhbV93aXRoYXNzaWduIDogcHVibGljIGlzdHJlYW0gewpwdWJsaWM6
CiAgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KGlzdHJlYW0mKTsKICBfSU9faXN0
cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgcmhzKQog
ICAgeyByZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxpc3RyZWFtJj4gKHJocykpOyB9Cn07
CgpjbGFzcyBfSU9fb3N0cmVhbV93aXRoYXNzaWduIDogcHVibGljIG9zdHJlYW0gewpwdWJsaWM6
CiAgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KG9zdHJlYW0mKTsKICBfSU9fb3N0
cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgcmhzKQog
ICAgeyByZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxvc3RyZWFtJj4gKHJocykpOyB9Cn07
CgpleHRlcm4gX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiBjaW47CiAKZXh0ZXJuIF9JT19vc3RyZWFt
X3dpdGhhc3NpZ24gY291dCwgY2VycjsKCmV4dGVybiBfSU9fb3N0cmVhbV93aXRoYXNzaWduIGNs
b2cKCgoKOwoKZXh0ZXJuIGlzdHJlYW0mIGxvY2soaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIGlzdHJl
YW0mIHVubG9jayhpc3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVhbSYgbG9jayhvc3RyZWFtJiBv
dXRzKTsKZXh0ZXJuIG9zdHJlYW0mIHVubG9jayhvc3RyZWFtJiBvdXRzKTsKCnN0cnVjdCBJb3N0
cmVhbV9pbml0IHsgfSA7ICAgCgppbmxpbmUgaW9zJiBkZWMoaW9zJiBpKQp7IGkuc2V0Zihpb3M6
OmRlYywgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQppbmxpbmUgaW9z
JiBoZXgoaW9zJiBpKQp7IGkuc2V0Zihpb3M6OmhleCwgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpv
Y3QpOyByZXR1cm4gaTsgfQppbmxpbmUgaW9zJiBvY3QoaW9zJiBpKQp7IGkuc2V0Zihpb3M6Om9j
dCwgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQp9ICAKCgojIDYgIi9v
cHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9pb3N0cmVhbSIgMiAzCgoKIyAxICJ0X2d0ay5jcHAiIDIKCiMgMSAiL29w
dC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL2ZzdHJlYW0iIDEgMwogCiAKCgoKIyAxICIvb3B0L2dudS9saWIvZ2NjLWxp
Yi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvZnN0
cmVhbS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNl
CgoKCmV4dGVybiAiQysrIiB7CmNsYXNzIGZzdHJlYW1iYXNlIDogdmlydHVhbCBwdWJsaWMgaW9z
IHsKCiAgICBtdXRhYmxlIGZpbGVidWYgX19teV9mYjsgIAoKICAgIHZvaWQgX19mYl9pbml0ICgp
OwogIHB1YmxpYzoKICAgIGZzdHJlYW1iYXNlKCk7CiAgICBmc3RyZWFtYmFzZShpbnQgZmQpOwog
ICAgZnN0cmVhbWJhc2UoaW50IGZkLCBjaGFyICpwLCBpbnQgbCk7ICAKICAgIGZzdHJlYW1iYXNl
KGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlLCBpbnQgcHJvdD0wNjY0KTsKICAgIHZvaWQgY2xv
c2UoKTsKCiAgICBmaWxlYnVmKiByZGJ1ZigpIGNvbnN0IHsgcmV0dXJuICZfX215X2ZiOyB9CgoK
CiAgICB2b2lkIG9wZW4oY29uc3QgY2hhciAqbmFtZSwgaW50IG1vZGUsIGludCBwcm90PTA2NjQp
OwogICAgaW50IGlzX29wZW4oKSBjb25zdCB7IHJldHVybiByZGJ1ZigpLT5pc19vcGVuKCk7IH0K
ICAgIHZvaWQgc2V0YnVmKGNoYXIgKnB0ciwgaW50IGxlbikgeyByZGJ1ZigpLT5zZXRidWYocHRy
LCBsZW4pOyB9CiAgICB2b2lkIGF0dGFjaChpbnQgZmQpOwoKCgoKfTsKCmNsYXNzIGlmc3RyZWFt
IDogcHVibGljIGZzdHJlYW1iYXNlLCBwdWJsaWMgaXN0cmVhbSB7CiAgcHVibGljOgogICAgaWZz
dHJlYW0oKSA6IGZzdHJlYW1iYXNlKCkgeyB9CiAgICBpZnN0cmVhbShpbnQgZmQpIDogZnN0cmVh
bWJhc2UoZmQpIHsgfQogICAgaWZzdHJlYW0oaW50IGZkLCBjaGFyICpwLCBpbnQgbCkgOiBmc3Ry
ZWFtYmFzZShmZCwgcCwgbCkgeyB9ICAKICAgIGlmc3RyZWFtKGNvbnN0IGNoYXIgKm5hbWUsIGlu
dCBtb2RlPWlvczo6aW4sIGludCBwcm90PTA2NjQpCgk6IGZzdHJlYW1iYXNlKG5hbWUsIG1vZGUg
fCBpb3M6OmluLCBwcm90KSB7IH0KICAgIHZvaWQgb3Blbihjb25zdCBjaGFyICpuYW1lLCBpbnQg
bW9kZT1pb3M6OmluLCBpbnQgcHJvdD0wNjY0KQoJeyBmc3RyZWFtYmFzZTo6b3BlbihuYW1lLCBt
b2RlIHwgaW9zOjppbiwgcHJvdCk7IH0KfTsKCmNsYXNzIG9mc3RyZWFtIDogcHVibGljIGZzdHJl
YW1iYXNlLCBwdWJsaWMgb3N0cmVhbSB7CiAgcHVibGljOgogICAgb2ZzdHJlYW0oKSA6IGZzdHJl
YW1iYXNlKCkgeyB9CiAgICBvZnN0cmVhbShpbnQgZmQpIDogZnN0cmVhbWJhc2UoZmQpIHsgfQog
ICAgb2ZzdHJlYW0oaW50IGZkLCBjaGFyICpwLCBpbnQgbCkgOiBmc3RyZWFtYmFzZShmZCwgcCwg
bCkgeyB9ICAKICAgIG9mc3RyZWFtKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlPWlvczo6b3V0
LCBpbnQgcHJvdD0wNjY0KQoJOiBmc3RyZWFtYmFzZShuYW1lLCBtb2RlIHwgaW9zOjpvdXQsIHBy
b3QpIHsgfQogICAgdm9pZCBvcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlPWlvczo6b3V0
LCBpbnQgcHJvdD0wNjY0KQoJeyBmc3RyZWFtYmFzZTo6b3BlbihuYW1lLCBtb2RlIHwgaW9zOjpv
dXQsIHByb3QpOyB9Cn07CgpjbGFzcyBmc3RyZWFtIDogcHVibGljIGZzdHJlYW1iYXNlLCBwdWJs
aWMgaW9zdHJlYW0gewogIHB1YmxpYzoKICAgIGZzdHJlYW0oKSA6IGZzdHJlYW1iYXNlKCkgeyB9
CiAgICBmc3RyZWFtKGludCBmZCkgOiBmc3RyZWFtYmFzZShmZCkgeyB9CiAgICBmc3RyZWFtKGNv
bnN0IGNoYXIgKm5hbWUsIGludCBtb2RlLCBpbnQgcHJvdD0wNjY0KQoJOiBmc3RyZWFtYmFzZShu
YW1lLCBtb2RlLCBwcm90KSB7IH0KICAgIGZzdHJlYW0oaW50IGZkLCBjaGFyICpwLCBpbnQgbCkg
OiBmc3RyZWFtYmFzZShmZCwgcCwgbCkgeyB9ICAKICAgIHZvaWQgb3Blbihjb25zdCBjaGFyICpu
YW1lLCBpbnQgbW9kZSwgaW50IHByb3Q9MDY2NCkKCXsgZnN0cmVhbWJhc2U6Om9wZW4obmFtZSwg
bW9kZSwgcHJvdCk7IH0KfTsKfSAgCgojIDYgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMt
c29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9mc3RyZWFtIiAyIDMK
CgojIDIgInRfZ3RrLmNwcCIgMgoKIyAxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNv
bGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyaW5nIiAxIDMKIAoK
CgoKIyAxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDEgMwogCiAKCiAKIAogCiAK
IAoKIAogCiAKIAoKIAogCiAKCiAKIAogCiAKIAoKIAogCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UK
CgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9jc3RkZGVmIiAxIDMKIAogCgoKCiMgMSAiL29wdC9nbnUv
bGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAx
IDMgNAoKCgoKCgogCgoKCgoKCgogCgogCgoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvb3B0L2du
dS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgi
IDMgNAoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKCgoKCgoKCgoKIAoKCgoKIAoKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90
OwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgIHdpbnRfdDsKCgoKCiAKCiAKCiMgMzE3ICIvb3B0L2dudS9s
aWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMg
NAoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIyA2ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9p
Mzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY3N0ZGRl
ZiIgMiAzCgoKIyAzNSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIu
OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCiMgMSAi
L29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3N0ZC9zdHJhaXRzLmgiIDEgMwogCiAKCiAKIAogCiAKIAoKIAogCiAK
IAoKIAogCiAKCiAKIAogCiAKIAoKIAogCgoKCgoKIAojcHJhZ21hIGludGVyZmFjZSAic3RkL3N0
cmFpdHMuaCIKCgoKCmV4dGVybiAiQysrIiB7CnRlbXBsYXRlIDxjbGFzcyBjaGFyVD4Kc3RydWN0
IHN0cmluZ19jaGFyX3RyYWl0cyB7CiAgdHlwZWRlZiBjaGFyVCBjaGFyX3R5cGU7ICAKCiAgIAoK
ICBzdGF0aWMgdm9pZCBhc3NpZ24gKGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIp
CiAgICB7IGMxID0gYzI7IH0KICBzdGF0aWMgYm9vbCBlcSAoY29uc3QgY2hhcl90eXBlJiBjMSwg
Y29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSA9PSBjMik7IH0KICBzdGF0aWMg
Ym9vbCBuZSAoY29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsg
cmV0dXJuICEoYzEgPT0gYzIpOyB9CiAgc3RhdGljIGJvb2wgbHQgKGNvbnN0IGNoYXJfdHlwZSYg
YzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAoYzEgPCBjMik7IH0KICBzdGF0
aWMgY2hhcl90eXBlIGVvcyAoKSB7IHJldHVybiBjaGFyX3R5cGUoKTsgfSAgCiAgc3RhdGljIGJv
b2wgaXNfZGVsKGNoYXJfdHlwZSBhKSB7IHJldHVybiAwOyB9CiAgIAogIAogICAKCiAgc3RhdGlj
IGludCBjb21wYXJlIChjb25zdCBjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBz
aXplX3QgbikKICAgIHsKICAgICAgc2l6ZV90IGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyAr
K2kpCglpZiAobmUgKHMxW2ldLCBzMltpXSkpCgkgIHJldHVybiBsdCAoczFbaV0sIHMyW2ldKSA/
IC0xIDogMTsKCiAgICAgIHJldHVybiAwOwogICAgfQogICAgCiAgc3RhdGljIHNpemVfdCBsZW5n
dGggKGNvbnN0IGNoYXJfdHlwZSogcykKICAgIHsKICAgICAgc2l6ZV90IGwgPSAwOwogICAgICB3
aGlsZSAobmUgKCpzKyssIGVvcyAoKSkpCgkrK2w7CiAgICAgIHJldHVybiBsOwogICAgfQoKICBz
dGF0aWMgY2hhcl90eXBlKiBjb3B5IChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMy
LCBzaXplX3QgbikKICAgIHsKICAgICAgZm9yICg7IG4tLTsgKQoJYXNzaWduIChzMVtuXSwgczJb
bl0pOwogICAgICByZXR1cm4gczE7CiAgICB9CgogIHN0YXRpYyBjaGFyX3R5cGUqIG1vdmUgKGNo
YXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAgewogICAgICBj
aGFyX3R5cGUgYVtuXTsKICAgICAgc2l6ZV90IGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyAr
K2kpCglhc3NpZ24gKGFbaV0sIHMyW2ldKTsKICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkK
CWFzc2lnbiAoczFbaV0sIGFbaV0pOwogICAgICByZXR1cm4gczE7CiAgICB9CgogIHN0YXRpYyBj
aGFyX3R5cGUqIHNldCAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlJiBjLCBzaXplX3Qg
bikKICAgIHsKICAgICAgZm9yICg7IG4tLTsgKQoJYXNzaWduIChzMVtuXSwgYyk7CiAgICAgIHJl
dHVybiBzMTsKICAgIH0KfTsKCmNsYXNzIGlzdHJlYW07CmNsYXNzIG9zdHJlYW07CiMgMSAiL29w
dC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL2NjdHlwZSIgMSAzCiAKIAoKCgojIDEgIi91c3IvaW5jbHVkZS9jdHlwZS5o
IiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpY3R5cGUuaAkx
LjMwCTk4LzAxLzE2IFNNSSIJCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5o
IiAxIDMgNAogCgoKCgogCiAKIAoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKWZlYXR1cmVfdGVzdHMu
aAkxLjE3CTk3LzEyLzA0IFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAx
IDMgNAogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpaXNhX2RlZnMuaAkxLjE2CTk5LzA1LzI1
IFNNSSIKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgogCgoKCgoKCgoK
IAoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK
CgoKCiMgMzIzICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDMgNAoKCgoKCgoKfQoKCgoj
IDE1ICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMiAzIDQKCgoKZXh0ZXJuICJD
IiB7CgoKIAoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCn0KCgoK
IyAxOCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMyA0CgoKCmV4dGVybiAiQyIgewoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgaXNhbG51bShpbnQpOwpleHRlcm4gaW50IGlz
YWxwaGEoaW50KTsKZXh0ZXJuIGludCBpc2NudHJsKGludCk7CmV4dGVybiBpbnQgaXNkaWdpdChp
bnQpOwpleHRlcm4gaW50IGlzZ3JhcGgoaW50KTsKZXh0ZXJuIGludCBpc2xvd2VyKGludCk7CmV4
dGVybiBpbnQgaXNwcmludChpbnQpOwpleHRlcm4gaW50IGlzcHVuY3QoaW50KTsKZXh0ZXJuIGlu
dCBpc3NwYWNlKGludCk7CmV4dGVybiBpbnQgaXN1cHBlcihpbnQpOwpleHRlcm4gaW50IGlzeGRp
Z2l0KGludCk7CmV4dGVybiBpbnQgdG9sb3dlcihpbnQpOwpleHRlcm4gaW50IHRvdXBwZXIoaW50
KTsKCgoKCmV4dGVybiBpbnQgaXNhc2NpaShpbnQpOwpleHRlcm4gaW50IHRvYXNjaWkoaW50KTsK
ZXh0ZXJuIGludCBfdG9sb3dlcihpbnQpOwpleHRlcm4gaW50IF90b3VwcGVyKGludCk7CgoKCmV4
dGVybiB1bnNpZ25lZCBjaGFyCV9fY3R5cGVbXTsKZXh0ZXJuIHVuc2lnbmVkIGludAkqX19jdHlw
ZV9tYXNrOwpleHRlcm4gaW50CQkqX190cmFuc191cHBlcjsKZXh0ZXJuIGludAkJKl9fdHJhbnNf
bG93ZXI7CgogCgoKCgoKCgoKCgojIDEwMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMgNAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTYwICIvdXNyL2luY2x1ZGUvY3R5cGUu
aCIgMyA0CgoKCn0KCgoKIyA2ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMy
LjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY2N0eXBlIiAyIDMKCgojIDEwNSAi
L29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3N0ZC9zdHJhaXRzLmgiIDIgMwoKIyAxICIvb3B0L2dudS9saWIvZ2Nj
LWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
Y3N0cmluZyIgMSAzCiAKIAoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMyA0CiAK
IAoKIAogCiAKCiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzdHJpbmcuaAkxLjIyCTk3LzEy
LzIyIFNNSSIJCgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIHZv
aWQgKm1lbWNweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgKm1l
bW1vdmUodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CmV4dGVybiBjaGFyICpzdHJjcHko
Y2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqc3RybmNweShjaGFyICosIGNvbnN0
IGNoYXIgKiwgc2l6ZV90KTsKCmV4dGVybiBjaGFyICpzdHJjYXQoY2hhciAqLCBjb25zdCBjaGFy
ICopOwpleHRlcm4gY2hhciAqc3RybmNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsK
CmV4dGVybiBpbnQgbWVtY21wKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwpl
eHRlcm4gaW50IHN0cmNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQg
c3RyY29sbChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgc3RybmNtcChj
b25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJt
KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwoKZXh0ZXJuIHZvaWQgKm1lbWNocihjb25z
dCB2b2lkICosIGludCwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKnN0cmNocihjb25zdCBjaGFyICos
IGludCk7CmV4dGVybiBzaXplX3Qgc3RyY3Nwbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7
CmV4dGVybiBjaGFyICpzdHJwYnJrKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJu
IGNoYXIgKnN0cnJjaHIoY29uc3QgY2hhciAqLCBpbnQpOwpleHRlcm4gc2l6ZV90IHN0cnNwbihj
b25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpzdHJzdHIoY29uc3QgY2hh
ciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqc3RydG9rKGNoYXIgKiwgY29uc3QgY2hh
ciAqKTsKCgoKCmV4dGVybiB2b2lkICptZW1zZXQodm9pZCAqLCBpbnQsIHNpemVfdCk7CmV4dGVy
biBjaGFyICpzdHJlcnJvcihpbnQpOwpleHRlcm4gc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICop
OwoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgaW50LCBzaXpl
X3QpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbChpbnQpOwpleHRlcm4gaW50IGZmcyhpbnQp
OwpleHRlcm4gaW50IHN0cmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRl
cm4gaW50IHN0cm5jYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwoK
CgoKCmV4dGVybiBjaGFyICpzdHJkdXAoY29uc3QgY2hhciAqKTsKCgojIDE0MyAiL3Vzci9pbmNs
dWRlL3N0cmluZy5oIiAzIDQKCgoKfQoKCgojIDcgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYt
cGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9jc3RyaW5nIiAy
IDMKCgojIDk0ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4z
Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY3N0cmluZyIgMwoKCgojIDEwNiAiL29wdC9nbnUv
bGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0ZC9zdHJhaXRzLmgiIDIgMwoKCnN0cnVjdCBzdHJpbmdfY2hhcl90cmFpdHMgPGNo
YXI+IHsKICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwoKICBzdGF0aWMgdm9pZCBhc3NpZ24gKGNo
YXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IGMxID0gYzI7IH0KICBzdGF0
aWMgYm9vbCBlcSAoY29uc3QgY2hhcl90eXBlICYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAg
ICB7IHJldHVybiAoYzEgPT0gYzIpOyB9CiAgc3RhdGljIGJvb2wgbmUgKGNvbnN0IGNoYXJfdHlw
ZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAoYzEgIT0gYzIpOyB9CiAg
c3RhdGljIGJvb2wgbHQgKGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIp
CiAgICB7IHJldHVybiAoYzEgPCBjMik7IH0KICBzdGF0aWMgY2hhcl90eXBlIGVvcyAoKSB7IHJl
dHVybiAwOyB9CiAgc3RhdGljIGJvb2wgaXNfZGVsKGNoYXJfdHlwZSBhKSB7IHJldHVybiAoKF9f
Y3R5cGUgKyAxKVsgYSBdICYgMHgwMDAwMDAwOCApIDsgfQoKICBzdGF0aWMgaW50IGNvbXBhcmUg
KGNvbnN0IGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAg
eyByZXR1cm4gbWVtY21wIChzMSwgczIsIG4pOyB9CiAgc3RhdGljIHNpemVfdCBsZW5ndGggKGNv
bnN0IGNoYXJfdHlwZSogcykKICAgIHsgcmV0dXJuIHN0cmxlbiAocyk7IH0KICBzdGF0aWMgY2hh
cl90eXBlKiBjb3B5IChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3Qg
bikKICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1jcHkgKHMxLCBzMiwgbik7IH0KICBzdGF0
aWMgY2hhcl90eXBlKiBtb3ZlIChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBz
aXplX3QgbikKICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1tb3ZlIChzMSwgczIsIG4pOyB9
CiAgc3RhdGljIGNoYXJfdHlwZSogc2V0IChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUm
IGMsIHNpemVfdCBuKQogICAgeyByZXR1cm4gKGNoYXJfdHlwZSopIG1lbXNldCAoczEsIGMsIG4p
OyB9Cn07CgojIDE1OSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIu
OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9zdHJhaXRzLmgiIDMKCn0gIAoKIyAz
NiAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8u
Li8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCgogCiMgMSAiL29wdC9nbnUv
bGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL2FsbG9jLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9vcHQvZ251L2xpYi9n
Y2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst
My9zdGxfY29uZmlnLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCiAKCiAK
IAogCiAKIAogCiAKCgoKCgoKCgojIDE0OCAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1z
b2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIg
MwoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTc4ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBj
LXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2NvbmZpZy5o
IiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyMzQgIi9vcHQvZ251L2xpYi9n
Y2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst
My9zdGxfY29uZmlnLmgiIDMKCgojIDI0OCAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1z
b2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIg
MwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAogCiAKCgoKCgoKCgoKCgoK
CgoKCgoKIAogCiMgMzE2ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcv
Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2NvbmZpZy5oIiAzCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIyAxOCAiL29wdC9nbnUvbGliL2dj
Yy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L2FsbG9jLmgiIDIgMwoKCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJp
czIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMSAzCiAK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKCgoKCgoKCgoKCgoK
CiMgMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy9pbmNs
dWRlL3N0ZGRlZi5oIiAxIDMgNAojIDM0MiAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1z
b2xhcmlzMi43LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKCiMgNTMgIi9vcHQvZ251L2xp
Yi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9n
KystMy9zdGxfYWxsb2MuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzIDQK
IAoKCgoKIAogCgogCiAKIAoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXN0ZGxpYi5oCTEuNDQJOTgv
MDEvMjIgU01JIgkKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKdHlwZWRlZglzdHJ1Y3QgewoJaW50
CXF1b3Q7CglpbnQJcmVtOwp9IGRpdl90OwoKdHlwZWRlZiBzdHJ1Y3QgewoJbG9uZwlxdW90OwoJ
bG9uZwlyZW07Cn0gbGRpdl90OwoKCnR5cGVkZWYgc3RydWN0IHsKCWxvbmcgbG9uZwlxdW90OwoJ
bG9uZyBsb25nCXJlbTsKfSBsbGRpdl90OwoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBsb25nCXVp
ZF90OwkJCSAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiMgMTAxICIvdXNyL2luY2x1ZGUv
c3RkbGliLmgiIDMgNAoKCiAKIyAxMTcgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CgoKZXh0
ZXJuIHVuc2lnbmVkIGNoYXIJX19jdHlwZVtdOwoKCgpleHRlcm4gZG91YmxlIGF0b2YoY29uc3Qg
Y2hhciAqKTsKZXh0ZXJuIGludCBhdG9pKGNvbnN0IGNoYXIgKik7CmV4dGVybiBsb25nIGludCBh
dG9sKGNvbnN0IGNoYXIgKik7CmV4dGVybiBkb3VibGUgc3RydG9kKGNvbnN0IGNoYXIgKiwgY2hh
ciAqKik7CmV4dGVybiBsb25nIGludCBzdHJ0b2woY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQp
OwpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bChjb25zdCBjaGFyICosIGNoYXIgKios
IGludCk7CgpleHRlcm4gaW50IHJhbmQodm9pZCk7CmV4dGVybiB2b2lkIHNyYW5kKHVuc2lnbmVk
IGludCk7CgoKCgoKZXh0ZXJuIHZvaWQgKmNhbGxvYyhzaXplX3QsIHNpemVfdCk7CmV4dGVybiB2
b2lkIGZyZWUodm9pZCAqKTsKZXh0ZXJuIHZvaWQgKm1hbGxvYyhzaXplX3QpOwpleHRlcm4gdm9p
ZCAqcmVhbGxvYyh2b2lkICosIHNpemVfdCk7CgpleHRlcm4gdm9pZCBhYm9ydCh2b2lkKTsKZXh0
ZXJuIGludCBhdGV4aXQodm9pZCAoKikodm9pZCkpOwpleHRlcm4gdm9pZCBleGl0KGludCk7CmV4
dGVybiB2b2lkIF9leGl0aGFuZGxlKHZvaWQpOwpleHRlcm4gY2hhciAqZ2V0ZW52KGNvbnN0IGNo
YXIgKik7CmV4dGVybiBpbnQgc3lzdGVtKGNvbnN0IGNoYXIgKik7CgpleHRlcm4gdm9pZCAqYnNl
YXJjaChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsCglpbnQgKCop
KGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CmV4dGVybiB2b2lkIHFzb3J0KHZvaWQgKiwg
c2l6ZV90LCBzaXplX3QsCglpbnQgKCopKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7Cgpl
eHRlcm4gaW50IGFicyhpbnQpOwpleHRlcm4gZGl2X3QgZGl2KGludCwgaW50KTsKZXh0ZXJuIGxv
bmcgaW50IGxhYnMobG9uZyk7CmV4dGVybiBsZGl2X3QgbGRpdihsb25nLCBsb25nKTsKCmV4dGVy
biBpbnQgbWJ0b3djKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpleHRlcm4gaW50
IG1ibGVuKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGludCB3Y3RvbWIoY2hhciAqLCB3
Y2hhcl90KTsKCmV4dGVybiBzaXplX3QgbWJzdG93Y3Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICos
IHNpemVfdCk7CmV4dGVybiBzaXplX3Qgd2NzdG9tYnMoY2hhciAqLCBjb25zdCB3Y2hhcl90ICos
IHNpemVfdCk7CgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDgodm9pZCk7CmV4dGVybiBkb3VibGUg
ZXJhbmQ0OCh1bnNpZ25lZCBzaG9ydCAqKTsKZXh0ZXJuIGxvbmcganJhbmQ0OCh1bnNpZ25lZCBz
aG9ydCAqKTsKZXh0ZXJuIHZvaWQgbGNvbmc0OCh1bnNpZ25lZCBzaG9ydCAqKTsKZXh0ZXJuIGxv
bmcgbHJhbmQ0OCh2b2lkKTsKZXh0ZXJuIGxvbmcgbXJhbmQ0OCh2b2lkKTsKZXh0ZXJuIGxvbmcg
bnJhbmQ0OCh1bnNpZ25lZCBzaG9ydCAqKTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0ICpzZWVkNDgo
dW5zaWduZWQgc2hvcnQgKik7CmV4dGVybiB2b2lkIHNyYW5kNDgobG9uZyk7CmV4dGVybiBpbnQg
cHV0ZW52KGNoYXIgKik7CmV4dGVybiB2b2lkIHNldGtleShjb25zdCBjaGFyICopOwoKCgoKCmV4
dGVybiB2b2lkIHN3YWIoY29uc3QgY2hhciAqLCBjaGFyICosIGludCk7CgoKCgpleHRlcm4gaW50
CW1rc3RlbXAoY2hhciAqKTsKCgpleHRlcm4gaW50CW1rc3RlbXA2NChjaGFyICopOwoKCgoKCgpl
eHRlcm4gbG9uZyBhNjRsKGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICplY3Z0KGRvdWJsZSwg
aW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqZmN2dChkb3VibGUsIGludCwgaW50ICos
IGludCAqKTsKZXh0ZXJuIGNoYXIgKmdjdnQoZG91YmxlLCBpbnQsIGNoYXIgKik7CmV4dGVybiBp
bnQgZ2V0c3Vib3B0KGNoYXIgKiosIGNoYXIgKmNvbnN0ICosIGNoYXIgKiopOwpleHRlcm4gaW50
ICBncmFudHB0KGludCk7CmV4dGVybiBjaGFyICppbml0c3RhdGUodW5zaWduZWQsIGNoYXIgKiwg
c2l6ZV90KTsKZXh0ZXJuIGNoYXIgKmw2NGEobG9uZyk7CmV4dGVybiBjaGFyICpta3RlbXAoY2hh
ciAqKTsKZXh0ZXJuIGNoYXIgKnB0c25hbWUoaW50KTsKZXh0ZXJuIGxvbmcgcmFuZG9tKHZvaWQp
OwpleHRlcm4gY2hhciAqcmVhbHBhdGgoY29uc3QgY2hhciAqLCBjaGFyICopOwpleHRlcm4gY2hh
ciAqc2V0c3RhdGUoY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZvaWQgc3JhbmRvbSh1bnNpZ25lZCk7
CmV4dGVybiBpbnQgdHR5c2xvdCh2b2lkKTsKZXh0ZXJuIGludCAgdW5sb2NrcHQoaW50KTsKZXh0
ZXJuIHZvaWQgKnZhbGxvYyhzaXplX3QpOwoKCgoKZXh0ZXJuIGludCBkdXAyKGludCwgaW50KTsK
ZXh0ZXJuIGNoYXIgKnFlY3Z0KGxvbmcgZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7CmV4dGVy
biBjaGFyICpxZmN2dChsb25nIGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4gY2hh
ciAqcWdjdnQobG9uZyBkb3VibGUsIGludCwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmdldGN3ZChj
aGFyICosIHNpemVfdCk7CmV4dGVybiBjb25zdCBjaGFyICpnZXRleGVjbmFtZSh2b2lkKTsKZXh0
ZXJuIGNoYXIgKmdldGxvZ2luKHZvaWQpOwpleHRlcm4gaW50IGdldG9wdChpbnQsIGNoYXIgKmNv
bnN0ICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpvcHRhcmc7CmV4dGVybiBpbnQgb3B0
aW5kLCBvcHRlcnIsIG9wdG9wdDsKZXh0ZXJuIGNoYXIgKmdldHBhc3MoY29uc3QgY2hhciAqKTsK
ZXh0ZXJuIGNoYXIgKmdldHBhc3NwaHJhc2UoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBnZXRw
dyh1aWRfdCwgY2hhciAqKTsKZXh0ZXJuIGludCBpc2F0dHkoaW50KTsKZXh0ZXJuIHZvaWQgKm1l
bWFsaWduKHNpemVfdCwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKnR0eW5hbWUoaW50KTsKCgpleHRl
cm4gbG9uZyBsb25nIGF0b2xsKGNvbnN0IGNoYXIgKik7CmV4dGVybiBsb25nIGxvbmcgbGxhYnMo
bG9uZyBsb25nKTsKZXh0ZXJuIGxsZGl2X3QgbGxkaXYobG9uZyBsb25nLCBsb25nIGxvbmcpOwpl
eHRlcm4gY2hhciAqbGx0b3N0cihsb25nIGxvbmcsIGNoYXIgKik7CmV4dGVybiBsb25nIGxvbmcg
c3RydG9sbChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CmV4dGVybiB1bnNpZ25lZCBsb25n
IGxvbmcgc3RydG91bGwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwpleHRlcm4gY2hhciAq
dWxsdG9zdHIodW5zaWduZWQgbG9uZyBsb25nLCBjaGFyICopOwoKCgoKIyAzODAgIi91c3IvaW5j
bHVkZS9zdGRsaWIuaCIgMyA0CgoKCn0KCgoKIyA1NCAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4
Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxv
Yy5oIiAyIDMKCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8y
Ljk1LjMvLi4vLi4vLi4vLi4vaTM4Ni1wYy1zb2xhcmlzMi43L2luY2x1ZGUvYXNzZXJ0LmgiIDEg
MyA0CiAKCgoKCgoKCgojIDE5ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMy
LjcvMi45NS4zLy4uLy4uLy4uLy4uL2kzODYtcGMtc29sYXJpczIuNy9pbmNsdWRlL2Fzc2VydC5o
IiAzIDQKCgoKCiAKCmV4dGVybiAiQyIgewpleHRlcm4gdm9pZCBfX2VwcmludGYgKGNvbnN0IGNo
YXIgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCwgY29uc3QgY2hhciAqKQogICAgX19hdHRyaWJ1
dGVfXyAoKG5vcmV0dXJuKSk7Cn0KCgoKCgoKCgoKCgoKIyA1MiAiL29wdC9nbnUvbGliL2djYy1s
aWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pMzg2LXBjLXNvbGFyaXMy
LjcvaW5jbHVkZS9hc3NlcnQuaCIgMyA0CgoKCiMgNTYgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kz
ODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxs
b2MuaCIgMiAzCgoKCgoKCgoKCgoKIyA3OCAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1z
b2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAz
CgojIDg3ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKCiMgOTcgIi9vcHQvZ251L2xp
Yi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9n
KystMy9zdGxfYWxsb2MuaCIgMwoKIyAxMTUgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMt
c29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIg
MwoKCiAKCgoKCgoKIAoKCgoKCiAKIAoKCgoKCgoKCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4KY2xh
c3MgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGUgewoKcHJpdmF0ZToKCiAgc3RhdGljIHZvaWQqIF9T
X29vbV9tYWxsb2Moc2l6ZV90KTsKICBzdGF0aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCos
IHNpemVfdCk7CgoKICBzdGF0aWMgdm9pZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFuZGxlciko
KTsKCgpwdWJsaWM6CgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAg
IHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19y
ZXN1bHQgPSBfU19vb21fbWFsbG9jKF9fbik7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBz
dGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICApCiAgewogICAgZnJlZShf
X3ApOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgICwg
c2l6ZV90IF9fbmV3X3N6KQogIHsKICAgIHZvaWQqIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9f
bmV3X3N6KTsKICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9yZWFsbG9j
KF9fcCwgX19uZXdfc3opOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KCiAgc3RhdGljIHZvaWQg
KCogX19zZXRfbWFsbG9jX2hhbmRsZXIodm9pZCAoKl9fZikoKSkpKCkKICB7CiAgICB2b2lkICgq
IF9fb2xkKSgpID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICBfX21hbGxvY19hbGxv
Y19vb21faGFuZGxlciA9IF9fZjsKICAgIHJldHVybihfX29sZCk7CiAgfQoKfTsKCiAKCgp0ZW1w
bGF0ZSA8aW50IF9faW5zdD4Kdm9pZCAoKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+
OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7CgoKdGVtcGxhdGUgPGludCBfX2lu
c3Q+CnZvaWQqCl9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9tYWxsb2Mo
c2l6ZV90IF9fbikKewogICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgdm9p
ZCogX19yZXN1bHQ7CgogICAgZm9yICg7OykgewogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIg
PSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBpZiAoMCA9PSBfX215X21hbGxv
Y19oYW5kbGVyKSB7IGNlcnIgPDwgIm91dCBvZiBtZW1vcnkiIDw8IGVuZGw7IGV4aXQoMSkgOyB9
CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gbWFs
bG9jKF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9
Cgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19p
bnN0Pjo6X1Nfb29tX3JlYWxsb2Modm9pZCogX19wLCBzaXplX3QgX19uKQp7CiAgICB2b2lkICgq
IF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICBmb3IgKDs7
KSB7CiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5k
bGVyOwogICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpIHsgY2VyciA8PCAib3V0
IG9mIG1lbW9yeSIgPDwgZW5kbDsgZXhpdCgxKSA7IH0KICAgICAgICAoKl9fbXlfbWFsbG9jX2hh
bmRsZXIpKCk7CiAgICAgICAgX19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uKTsKICAgICAgICBp
ZiAoX19yZXN1bHQpIHJldHVybihfX3Jlc3VsdCk7CiAgICB9Cn0KCnR5cGVkZWYgX19tYWxsb2Nf
YWxsb2NfdGVtcGxhdGU8MD4gbWFsbG9jX2FsbG9jOwoKdGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+CmNsYXNzIHNpbXBsZV9hbGxvYyB7CgpwdWJsaWM6CiAgICBzdGF0aWMgX1RwKiBh
bGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7IHJldHVybiAwID09IF9fbiA/IDAgOiAoX1RwKikg
X0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YgKF9UcCkpOyB9CiAgICBzdGF0aWMgX1RwKiBh
bGxvY2F0ZSh2b2lkKQogICAgICB7IHJldHVybiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXpl
b2YgKF9UcCkpOyB9CiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3Qg
X19uKQogICAgICB7IGlmICgwICE9IF9fbikgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICog
c2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCkKICAg
ICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBzaXplb2YgKF9UcCkpOyB9Cn07CgogCiAKIAog
CiAKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xhc3MgZGVidWdfYWxsb2MgewoKcHJpdmF0ZToK
CiAgZW51bSB7X1NfZXh0cmEgPSA4fTsgICAKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgCgpwdWJsaWM6CgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShz
aXplX3QgX19uKQogIHsKICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9BbGxvYzo6YWxsb2Nh
dGUoX19uICsgX1NfZXh0cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uOwogICAgcmV0
dXJuIF9fcmVzdWx0ICsgX1NfZXh0cmE7CiAgfQoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZv
aWQqIF9fcCwgc2l6ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3Ag
LSBfU19leHRyYTsKICAgICgodm9pZCkgKCggKihzaXplX3QqKV9fcmVhbF9wID09IF9fbiApID8g
MCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLAkgICIvb3B0
L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2lu
Y2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiICwgICAyNjMgLCAgIiooc2l6ZV90KilfX3JlYWxfcCA9
PSBfX24iICksIDApICkpIDsKICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19uICsg
X1NfZXh0cmEpOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXpl
X3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChj
aGFyKilfX3AgLSBfU19leHRyYTsKICAgICgodm9pZCkgKCggKihzaXplX3QqKV9fcmVhbF9wID09
IF9fb2xkX3N6ICkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAl
cydcbiIsCSAgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMv
Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgLCAgIDI3MCAsICAiKihzaXpl
X3QqKV9fcmVhbF9wID09IF9fb2xkX3N6IiApLCAwKSApKSA7CiAgICBjaGFyKiBfX3Jlc3VsdCA9
IChjaGFyKikKICAgICAgX0FsbG9jOjpyZWFsbG9jYXRlKF9fcmVhbF9wLCBfX29sZF9zeiArIF9T
X2V4dHJhLCBfX25ld19zeiArIF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9f
bmV3X3N6OwogICAgcmV0dXJuIF9fcmVzdWx0ICsgX1NfZXh0cmE7CiAgfQoKfTsKCgoKCgoKCgoK
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAogCiAKIAogCiAKIAogCiAKCgoKCgoKCnRl
bXBsYXRlIDxib29sIHRocmVhZHMsIGludCBpbnN0PgpjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGUgewoKcHJpdmF0ZToKICAgCiAgIAoKICAgIGVudW0ge19BTElHTiA9IDh9OwogICAgZW51
bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgICBlbnVtIHtfTkZSRUVMSVNUUyA9IF9NQVhfQllURVMv
X0FMSUdOfTsKCiAgc3RhdGljIHNpemVfdAogIF9TX3JvdW5kX3VwKHNpemVfdCBfX2J5dGVzKQog
ICAgeyByZXR1cm4gKCgoX19ieXRlcykgKyBfQUxJR04tMSkgJiB+KF9BTElHTiAtIDEpKTsgfQoK
cHJpdmF0ZSA6CiAgdW5pb24gX09iaiB7CiAgICAgICAgdW5pb24gX09iaiogX01fZnJlZV9saXN0
X2xpbms7CiAgICAgICAgY2hhciBfTV9jbGllbnRfZGF0YVsxXTsgICAgIAogIH07CnByaXZhdGU6
CgoKCgogICAgc3RhdGljIF9PYmoqICAgX1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsKCiAgc3Rh
dGljICBzaXplX3QgX1NfZnJlZWxpc3RfaW5kZXgoc2l6ZV90IF9fYnl0ZXMpIHsKICAgICAgICBy
ZXR1cm4gKCgoX19ieXRlcykgKyBfQUxJR04tMSkvX0FMSUdOIC0gMSk7CiAgfQoKICAgCiAgc3Rh
dGljIHZvaWQqIF9TX3JlZmlsbChzaXplX3QgX19uKTsKICAgCiAgIAogIHN0YXRpYyBjaGFyKiBf
U19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLCBpbnQmIF9fbm9ianMpOwoKICAgCiAgc3RhdGlj
IGNoYXIqIF9TX3N0YXJ0X2ZyZWU7CiAgc3RhdGljIGNoYXIqIF9TX2VuZF9mcmVlOwogIHN0YXRp
YyBzaXplX3QgX1NfaGVhcF9zaXplOwoKCgoKCgoKCgoKCgoKCgojIDM4OSAiL29wdC9nbnUvbGli
L2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL3N0bF9hbGxvYy5oIiAzCgoKICAgIGNsYXNzIF9Mb2NrIHsKICAgICAgICBwdWJsaWM6CiAg
ICAgICAgICAgIF9Mb2NrKCkgeyAgOyB9CiAgICAgICAgICAgIH5fTG9jaygpIHsgIDsgfQogICAg
fTsKICAgIGZyaWVuZCBjbGFzcyBfTG9jazsKCnB1YmxpYzoKCiAgIAogIHN0YXRpYyB2b2lkKiBh
bGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIF9PYmoqICAqIF9fbXlfZnJlZV9saXN0OwogICAg
X09iaiogICBfX3Jlc3VsdDsKCiAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykgewog
ICAgICAgIHJldHVybihtYWxsb2NfYWxsb2M6OmFsbG9jYXRlKF9fbikpOwogICAgfQogICAgX19t
eV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwogICAg
IAogICAgIAogICAgIAoKCgoKICAgIF9fcmVzdWx0ID0gKl9fbXlfZnJlZV9saXN0OwogICAgaWYg
KF9fcmVzdWx0ID09IDApIHsKICAgICAgICB2b2lkKiBfX3IgPSBfU19yZWZpbGwoX1Nfcm91bmRf
dXAoX19uKSk7CiAgICAgICAgcmV0dXJuIF9fcjsKICAgIH0KICAgICpfX215X2ZyZWVfbGlzdCA9
IF9fcmVzdWx0IC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgcmV0dXJuIChfX3Jlc3VsdCk7CiAg
fTsKCiAgIAogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQog
IHsKICAgIF9PYmoqIF9fcSA9IChfT2JqKilfX3A7CiAgICBfT2JqKiAgKiBfX215X2ZyZWVfbGlz
dDsKCiAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykgewogICAgICAgIG1hbGxvY19h
bGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgX19t
eV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwogICAg
IAoKCgoKICAgIF9fcSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAg
ICpfX215X2ZyZWVfbGlzdCA9IF9fcTsKICAgICAKICB9CgogIHN0YXRpYyB2b2lkKiByZWFsbG9j
YXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opOwoKfSA7Cgp0
eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTwgZmFsc2UgLCAwPiBhbGxvYzsKdHlwZWRl
ZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8ZmFsc2UsIDA+IHNpbmdsZV9jbGllbnRfYWxsb2M7
CgoKCiAKIAogCiAKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFyKgpf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19jaHVua19hbGxv
YyhzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQmIF9fbm9ianMpCnsKICAgIGNoYXIqIF9fcmVzdWx0Owog
ICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgc2l6ZV90IF9f
Ynl0ZXNfbGVmdCA9IF9TX2VuZF9mcmVlIC0gX1Nfc3RhcnRfZnJlZTsKCiAgICBpZiAoX19ieXRl
c19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpIHsKICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2Zy
ZWU7CiAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAgICAgIHJldHVy
bihfX3Jlc3VsdCk7CiAgICB9IGVsc2UgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3NpemUpIHsKICAg
ICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19sZWZ0L19fc2l6ZSk7CiAgICAgICAgX190b3Rh
bF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9m
cmVlOwogICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICByZXR1
cm4oX19yZXN1bHQpOwogICAgfSBlbHNlIHsKICAgICAgICBzaXplX3QgX19ieXRlc190b19nZXQg
PQoJICAyICogX190b3RhbF9ieXRlcyArIF9TX3JvdW5kX3VwKF9TX2hlYXBfc2l6ZSA+PiA0KTsK
ICAgICAgICAgCiAgICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+IDApIHsKICAgICAgICAgICAgX09i
aiogICogX19teV9mcmVlX2xpc3QgPQogICAgICAgICAgICAgICAgICAgICAgICBfU19mcmVlX2xp
c3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2J5dGVzX2xlZnQpOwoKICAgICAgICAgICAgKChfT2Jq
KilfU19zdGFydF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsK
ICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAg
ICAgfQogICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jKF9fYnl0ZXNfdG9fZ2V0
KTsKICAgICAgICBpZiAoMCA9PSBfU19zdGFydF9mcmVlKSB7CiAgICAgICAgICAgIHNpemVfdCBf
X2k7CiAgICAgICAgICAgIF9PYmoqICAqIF9fbXlfZnJlZV9saXN0OwoJICAgIF9PYmoqIF9fcDsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgZm9y
IChfX2kgPSBfX3NpemU7IF9faSA8PSBfTUFYX0JZVEVTOyBfX2kgKz0gX0FMSUdOKSB7CiAgICAg
ICAgICAgICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2lu
ZGV4KF9faSk7CiAgICAgICAgICAgICAgICBfX3AgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAg
ICAgICAgICBpZiAoMCAhPSBfX3ApIHsKICAgICAgICAgICAgICAgICAgICAqX19teV9mcmVlX2xp
c3QgPSBfX3AgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgICAgICAgX1Nfc3Rh
cnRfZnJlZSA9IChjaGFyKilfX3A7CiAgICAgICAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSBf
U19zdGFydF9mcmVlICsgX19pOwogICAgICAgICAgICAgICAgICAgIHJldHVybihfU19jaHVua19h
bGxvYyhfX3NpemUsIF9fbm9ianMpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgkgICAgX1NfZW5kX2Zy
ZWUgPSAwOwkgCiAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jX2FsbG9j
OjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3Rv
X2dldDsKICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3RvX2dl
dDsKICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAgICB9
Cn0KCgogCiAKIAp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnZvaWQqCl9f
ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3JlZmlsbChzaXpl
X3QgX19uKQp7CiAgICBpbnQgX19ub2JqcyA9IDIwOwogICAgY2hhciogX19jaHVuayA9IF9TX2No
dW5rX2FsbG9jKF9fbiwgX19ub2Jqcyk7CiAgICBfT2JqKiAgKiBfX215X2ZyZWVfbGlzdDsKICAg
IF9PYmoqIF9fcmVzdWx0OwogICAgX09iaiogX19jdXJyZW50X29iajsKICAgIF9PYmoqIF9fbmV4
dF9vYmo7CiAgICBpbnQgX19pOwoKICAgIGlmICgxID09IF9fbm9ianMpIHJldHVybihfX2NodW5r
KTsKICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgo
X19uKTsKCiAgICAgCiAgICAgIF9fcmVzdWx0ID0gKF9PYmoqKV9fY2h1bms7CiAgICAgICpfX215
X2ZyZWVfbGlzdCA9IF9fbmV4dF9vYmogPSAoX09iaiopKF9fY2h1bmsgKyBfX24pOwogICAgICBm
b3IgKF9faSA9IDE7IDsgX19pKyspIHsKICAgICAgICBfX2N1cnJlbnRfb2JqID0gX19uZXh0X29i
ajsKICAgICAgICBfX25leHRfb2JqID0gKF9PYmoqKSgoY2hhciopX19uZXh0X29iaiArIF9fbik7
CiAgICAgICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkgewogICAgICAgICAgICBfX2N1cnJlbnRf
b2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gMDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9
IF9fbmV4dF9vYmo7CiAgICAgICAgfQogICAgICB9CiAgICByZXR1cm4oX19yZXN1bHQpOwp9Cgp0
ZW1wbGF0ZSA8Ym9vbCB0aHJlYWRzLCBpbnQgaW5zdD4Kdm9pZCoKX19kZWZhdWx0X2FsbG9jX3Rl
bXBsYXRlPHRocmVhZHMsIGluc3Q+OjpyZWFsbG9jYXRlKHZvaWQqIF9fcCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX29sZF9zeiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBfX25ld19zeikKewogICAgdm9pZCogX19yZXN1bHQ7CiAgICBzaXplX3QgX19jb3B5X3N6OwoK
ICAgIGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhfQllURVMgJiYgX19uZXdfc3ogPiAoc2l6
ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJuKHJlYWxsb2MoX19wLCBfX25ld19zeikp
OwogICAgfQogICAgaWYgKF9TX3JvdW5kX3VwKF9fb2xkX3N6KSA9PSBfU19yb3VuZF91cChfX25l
d19zeikpIHJldHVybihfX3ApOwogICAgX19yZXN1bHQgPSBhbGxvY2F0ZShfX25ld19zeik7CiAg
ICBfX2NvcHlfc3ogPSBfX25ld19zeiA+IF9fb2xkX3N6PyBfX29sZF9zeiA6IF9fbmV3X3N6Owog
ICAgbWVtY3B5KF9fcmVzdWx0LCBfX3AsIF9fY29weV9zeik7CiAgICBkZWFsbG9jYXRlKF9fcCwg
X19vbGRfc3opOwogICAgcmV0dXJuKF9fcmVzdWx0KTsKfQoKCgoKCgoKCgoKCgoKCgojIDYwMiAi
L29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCgoKIyA2ODkgIi9vcHQvZ251L2xpYi9nY2Mt
bGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9z
dGxfYWxsb2MuaCIgMwoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hh
ciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfc3RhcnRf
ZnJlZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqIF9f
ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2VuZF9mcmVlID0g
MDsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kc2l6ZV90IF9fZGVmYXVs
dF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2hlYXBfc2l6ZSA9IDA7Cgp0
ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+Cl9fZGVmYXVsdF9hbGxvY190ZW1w
bGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9PYmoqICAKX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl
PF9fdGhyZWFkcywgX19pbnN0PiA6Ol9TX2ZyZWVfbGlzdFsKICAgIF9ORlJFRUxJU1RTCl0gPSB7
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgfTsKIAogCiAK
CgoKCgoKCgoKCiAKIAogCiAKIAogCiAKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgYWxs
b2NhdG9yIHsKICB0eXBlZGVmIGFsbG9jIF9BbGxvYzsgICAgICAgICAgIApwdWJsaWM6CiAgdHlw
ZWRlZiBzaXplX3QgICAgIHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCAgZGlmZmVyZW5j
ZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1Rw
KiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICByZWZlcmVuY2U7CiAgdHlwZWRl
ZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9UcCAgICAgICAgdmFsdWVf
dHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRl
ZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKCiAgYWxsb2NhdG9yKCkgdGhyb3coKSAge30K
ICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3coKSAge30KICB0ZW1wbGF0ZSA8Y2xh
c3MgX1RwMT4gYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYpIHRocm93KCkgIHt9CiAg
fmFsbG9jYXRvcigpIHRocm93KCkgIHt9CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194
KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3Jl
ZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCiAgIAogICAKICBfVHAqIGFsbG9j
YXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAw
ID8gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkp
CiAgICAgICAgICAgICAgICAgICAgOiAwOwogIH0KCiAgIAogIHZvaWQgZGVhbGxvY2F0ZShwb2lu
dGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19u
ICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkg
CiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1
Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsg
fQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxh
dGU8PgpjbGFzcyBhbGxvY2F0b3I8dm9pZD4gewogIHR5cGVkZWYgc2l6ZV90ICAgICAgc2l6ZV90
eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9p
ZCogICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAg
dHlwZWRlZiB2b2lkICAgICAgICB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4g
c3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9Owp9
OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVy
biB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsK
ICByZXR1cm4gZmFsc2U7Cn0KCiAKIAogCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+CnN0cnVjdCBfX2FsbG9jYXRvciB7CiAgX0FsbG9jIF9fdW5kZXJseWluZ19hbGxv
YzsKCiAgdHlwZWRlZiBzaXplX3QgICAgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRp
ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNv
bnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAgcmVmZXJlbmNlOwog
IHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfVHAgICAgICAg
IHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAg
IHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9OwoKICBfX2FsbG9j
YXRvcigpIHRocm93KCkgIHt9CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3ImIF9fYSkg
dGhyb3coKSAKICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2Mp
IHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0
b3I8X1RwMSwgX0FsbG9jPiYgX19hKSB0aHJvdygpIAogICAgOiBfX3VuZGVybHlpbmdfYWxsb2Mo
X19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB+X19hbGxvY2F0b3IoKSB0aHJvdygpICB7fQoK
ICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQog
IGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVy
biAmX194OyB9CgogICAKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQq
ID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAgPyBzdGF0aWNfY2FzdDxfVHAqPihf
X3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgIDog
MDsKICB9CgogICAKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24p
CiAgICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9U
cCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkgCiAgICB7IHJldHVy
biBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBf
X3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVz
dHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9B
bGxvYz4KY2xhc3MgX19hbGxvY2F0b3I8dm9pZCwgX0FsbG9jPiB7CiAgdHlwZWRlZiBzaXplX3Qg
ICAgICBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgICBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiB2b2lkKiAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3Rf
cG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxj
bGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwg
X0FsbG9jPiBvdGhlcjsKICB9Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYg
X19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxv
Yz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2MgPT0gX19hMi5fX3Vu
ZGVybHlpbmdfYWxsb2M7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+Cmlu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2Ex
LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYg
X19hMikKewogIHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyAhPSBfX2EyLl9fdW5kZXJs
eWluZ19hbGxvYzsKfQoKCiAKIAogCgp0ZW1wbGF0ZSA8aW50IGluc3Q+CmlubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4mLAogICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JikKewogIHJl
dHVybiB0cnVlOwp9CgoKdGVtcGxhdGUgPGludCBfX2luc3Q+CmlubGluZSBib29sIG9wZXJhdG9y
IT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiYsCiAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiYpCnsKICByZXR1
cm4gZmFsc2U7Cn0KCgoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pgppbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVh
ZHMsIF9faW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxv
Y190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCgp0ZW1w
bGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk
cywgX19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9BbGxv
Yz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JiwKICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVy
biB0cnVlOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBkZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiBmYWxzZTsKfQoKCiAKIAogCiAKIAog
CgogCiAKIAogCiAKIAoKIAogCiAKIAogCiAKIAogCiAKIAogCgogCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0cwp7CiAgc3RhdGljIGNv
bnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxs
b2NhdG9yOjogICByZWJpbmQ8X1RwPjo6b3RoZXIKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4KY29uc3QgYm9vbCBfQWxs
b2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9TX2luc3RhbmNlbGVzczsKCiAKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgYWxsb2Nh
dG9yPF9UcDE+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7
CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBhbGxvYz4gX0FsbG9jX3R5cGU7CiAgdHlwZWRl
ZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0b3JfdHlwZTsKfTsKCiAKCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19tYWxsb2NfYWxsb2Nf
dGVtcGxhdGU8X19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3Mg
PSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxh
dGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21h
bGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2Nf
dHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+
CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYg
c2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p
bnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwg
X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAgICAgICBh
bGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0
cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+CnsKICBzdGF0aWMg
Y29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9j
PF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxv
Y2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgogCiAK
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxs
b2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwgX19t
YWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9T
X2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxv
Y19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9j
YXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlw
ZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBib29sIF9fdGhyLCBpbnQg
X19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAgICBf
X2FsbG9jYXRvcjxfVHAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZWZh
dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLCBfX2luc3Q+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJv
b2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9f
ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocixfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190
eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8
X190aHIsX19pbnN0PiA+CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRz
PF9UcCwgX19hbGxvY2F0b3I8X1RwMSwgZGVidWdfYWxsb2M8X0FsbG9jPiA+ID4KewogIHN0YXRp
YyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxs
b2M8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2Fs
bG9jYXRvcjxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoK
CgoKCgogCgoKCgoKIAogCiAKIyAyMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xh
cmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2FsbG9jLmgiIDIgMwoKCgoj
IDQwICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4u
Ly4uLy4uL2luY2x1ZGUvZysrLTMvYWxsb2MuaCIgMwoKCgoKIAogCiAKIyAzOSAiL29wdC9nbnUv
bGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCgpleHRlcm4gIkMrKyIgewpjbGFzcyBpc3RyZWFt
OyBjbGFzcyBvc3RyZWFtOwoKIyAxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFy
aXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaXRlcmF0b3IiIDEgMwogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2
LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3JlbG9w
cy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9UcCYgX194LCBjb25zdCBf
VHAmIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7
CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wg
b3BlcmF0b3I8PShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4gIShf
X3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49
KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7
Cn0KCiAKCgoKIAogCiAKIyAzMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlz
Mi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2l0ZXJhdG9yIiAyIDMKCiMgMSAi
L29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy9pbmNsdWRlL3N0
ZGRlZi5oIiAxIDMgNAojIDM0MiAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlz
Mi43LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKCiMgMzIgIi9vcHQvZ251L2xpYi9nY2Mt
bGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9p
dGVyYXRvciIgMiAzCgoKCgoKCiMgMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xh
cmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAx
IDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgpzdHJ1Y3QgaW5wdXRfaXRl
cmF0b3JfdGFnIHt9OwpzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGZvcndh
cmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGJp
ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9
OwpzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25h
bF9pdGVyYXRvcl90YWcge307CgogCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
RGlzdGFuY2U+IHN0cnVjdCBpbnB1dF9pdGVyYXRvciB7CiAgdHlwZWRlZiBpbnB1dF9pdGVyYXRv
cl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgdmFs
dWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAg
ICAgICAgICByZWZlcmVuY2U7Cn07CgpzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yIHsKICB0eXBlZGVm
IG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAg
ICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRp
ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0
eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvciB7CiAgdHlwZWRl
ZiBmb3J3YXJkX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAg
ICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAg
ICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICBwb2ludGVy
OwogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0
b3IgewogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdv
cnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5
cGVkZWYgX0Rpc3RhbmNlICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk
ZWYgX1RwKiAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAg
ICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9EaXN0YW5jZT4gc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3IgewogIHR5cGVkZWYg
cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBf
VHAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNl
ICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICAg
ICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAgICAgICAgICAgICAg
ICAgIHJlZmVyZW5jZTsKfTsKCiMgOTggIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29s
YXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIg
MwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9y
X2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlICAgICAg
ICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5
cGUgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnBvaW50
ZXIgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnJlZmVy
ZW5jZSAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBp
dGVyYXRvcl90cmFpdHM8X1RwKj4gewogIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90
YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICBkaWZm
ZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRl
cjsKICB0eXBlZGVmIF9UcCYgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsK
ICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog
IHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRl
ZiBwdHJkaWZmX3QgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYg
Y29uc3QgX1RwKiAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAm
ICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKIAogCiAKIAoKIAoKdGVtcGxhdGUgPGNs
YXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0
b3JfY2F0ZWdvcnkKX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYpCnsKICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9DYXRl
Z29yeTsKICByZXR1cm4gX0NhdGVnb3J5KCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5s
aW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSoKX19k
aXN0YW5jZV90eXBlKGNvbnN0IF9JdGVyJikKewogIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqPigwKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6
dmFsdWVfdHlwZSoKX192YWx1ZV90eXBlKGNvbnN0IF9JdGVyJikKewogIHJldHVybiBzdGF0aWNf
Y2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKj4oMCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cml0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJiBf
X2kpIHsgcmV0dXJuIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19pKTsgfQoKCnRlbXBsYXRlIDxjbGFz
cyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVu
Y2VfdHlwZSoKZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX2Rpc3Rh
bmNlX3R5cGUoX19pKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKdmFsdWVfdHlwZShjb25zdCBfSXRl
ciYgX19pKSB7IHJldHVybiBfX3ZhbHVlX3R5cGUoX19pKTsgfQoKCgoKCiMgMjU5ICIvb3B0L2du
dS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShfSW5wdXRJdGVyYXRv
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
X0Rpc3RhbmNlJiBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIHdoaWxlIChfX2ZpcnN0ICE9
IF9fbGFzdCkgeyArK19fZmlyc3Q7ICsrX19uOyB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh
bmNlJiBfX24sIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CiAgX19uICs9IF9fbGFzdCAt
IF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3Rh
bmNlPgppbmxpbmUgdm9pZCBkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCAKICAgICAg
ICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBfRGlzdGFuY2UmIF9fbikKewog
IF9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24sIGl0ZXJhdG9yX2NhdGVnb3J5KF9fZmly
c3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CmlubGluZSB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0
YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0
X2l0ZXJhdG9yX3RhZykKewogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRv
cj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkg
ewogICAgKytfX2ZpcnN0OyArK19fbjsKICB9CiAgcmV0dXJuIF9fbjsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5jZShfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwK
ICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIHJldHVybiBfX2xhc3Qg
LSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CmlubGluZSB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKZGlz
dGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRv
cl9jYXRlZ29yeSAKICAgIF9DYXRlZ29yeTsKICByZXR1cm4gX19kaXN0YW5jZShfX2ZpcnN0LCBf
X2xhc3QsIF9DYXRlZ29yeSgpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlz
dGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICB3aGlsZSAoX19uLS0pICsrX19pOwp9
CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9EaXN0
YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwg
X0Rpc3RhbmNlIF9fbiwgCiAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZykgewogIGlmIChfX24gPj0gMCkKICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgZWxz
ZQogICAgd2hpbGUgKF9fbisrKSAtLV9faTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9S
YW5kb21BY2Nlc3NJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLCAKICAgICAgICAgICAgICAg
ICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgX19pICs9IF9fbjsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lk
IGFkdmFuY2UoX0lucHV0SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbikgewogIF9fYWR2YW5j
ZShfX2ksIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19pKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
Q29udGFpbmVyPgpjbGFzcyBiYWNrX2luc2VydF9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29u
dGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgICAgICAgICAg
Y29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2Nh
dGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVk
ZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAg
ICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVy
ZW5jZTsKCiAgZXhwbGljaXQgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6
IGNvbnRhaW5lcigmX194KSB7fQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+Jgog
IG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVl
KSB7IAogICAgY29udGFpbmVyLT5wdXNoX2JhY2soX192YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7
CiAgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJl
dHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRv
cisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy
PiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07CgojIDM3OCAiL29wdC9nbnUv
bGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+Cmlu
bGluZSBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBiYWNrX2luc2VydGVyKF9Db250
YWluZXImIF9feCkgewogIHJldHVybiBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihf
X3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3MgZnJvbnRfaW5zZXJ0X2l0
ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIqIGNvbnRhaW5lcjsKcHVibGljOgogIHR5
cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1
dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAgICAgICAg
ICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVu
Y2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVm
IHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICBleHBsaWNpdCBmcm9udF9pbnNlcnRf
aXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7fQogIGZyb250X2lu
c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0Nv
bnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGNvbnRhaW5lci0+cHVzaF9mcm9u
dChfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9y
PF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGZyb250X2luc2Vy
dF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAg
ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1
cm4gKnRoaXM7IH0KfTsKCiMgNDE3ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFy
aXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5lIGZyb250X2luc2VydF9pdGVyYXRv
cjxfQ29udGFpbmVyPiBmcm9udF9pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpIHsKICByZXR1cm4g
ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfQ29udGFpbmVyPgpjbGFzcyBpbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRh
aW5lciogY29udGFpbmVyOwogIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CnB1
YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5cGU7CiAgdHlw
ZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9p
ZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAg
ICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7
CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKCiAgaW5zZXJ0X2l0ZXJh
dG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pKSAK
ICAgIDogY29udGFpbmVyKCZfX3gpLCBpdGVyKF9faSkge30KICBpbnNlcnRfaXRlcmF0b3I8X0Nv
bnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5
cGUmIF9fdmFsdWUpIHsgCiAgICBpdGVyID0gY29udGFpbmVyLT5pbnNlcnQoaXRlciwgX192YWx1
ZSk7CiAgICArK2l0ZXI7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGluc2VydF9pdGVyYXRvcjxf
Q29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBpbnNlcnRfaXRlcmF0
b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGluc2VydF9p
dGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07
CgojIDQ1OSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUgPGNs
YXNzIF9Db250YWluZXIsIGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIAppbnNlcnRfaXRlcmF0b3I8
X0NvbnRhaW5lcj4gaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194LCBfSXRlcmF0b3IgX19pKQp7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2l0ZXI7CiAgcmV0dXJuIGlu
c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsIF9faXRlcihfX2kpKTsKfQoKCnRlbXBsYXRl
IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWZlcmVu
Y2UgPSBfVHAmLCAKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZfdD4gCgoKCgpj
bGFzcyByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IgewogIHR5cGVkZWYgcmV2ZXJzZV9i
aWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIF9UcCwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JlZmVyZW5jZSwgX0Rpc3RhbmNl
PiAgX1NlbGY7CnByb3RlY3RlZDoKICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIGN1cnJlbnQ7CnB1
YmxpYzoKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVn
b3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0
eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl
ZGVmIF9UcCogICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVmZXJl
bmNlICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CgogIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9p
dGVyYXRvcigpIHt9CiAgZXhwbGljaXQgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKF9C
aWRpcmVjdGlvbmFsSXRlcmF0b3IgX194KQogICAgOiBjdXJyZW50KF9feCkge30KICBfQmlkaXJl
Y3Rpb25hbEl0ZXJhdG9yIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50OyB9CiAgX1JlZmVy
ZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fdG1w
ID0gY3VycmVudDsKICAgIHJldHVybiAqLS1fX3RtcDsKICB9CgogIHBvaW50ZXIgb3BlcmF0b3It
PigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogIF9TZWxmJiBvcGVyYXRvcisr
KCkgewogICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRv
cisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJl
dHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAg
ICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBf
X3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCiMg
NTUwICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4u
Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0JpSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNl
PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFs
X2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX194LCAKICAgIGNvbnN0
IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0
YW5jZT4mIF9feSkKewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCgoKIAog
CiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpjbGFzcyByZXZlcnNlX2l0ZXJhdG9y
IAp7CnByb3RlY3RlZDoKICBfSXRlcmF0b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICAg
ICAgICBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAg
ICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JdGVyYXRvcj46OnBvaW50ZXIKICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlCiAgICAgICAgICByZWZlcmVu
Y2U7CgogIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7CiAgdHlwZWRlZiByZXZlcnNl
X2l0ZXJhdG9yPF9JdGVyYXRvcj4gX1NlbGY7CgpwdWJsaWM6CiAgcmV2ZXJzZV9pdGVyYXRvcigp
IHt9CiAgZXhwbGljaXQgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJy
ZW50KF9feCkge30KCiAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCBfU2VsZiYgX194KSA6IGN1cnJl
bnQoX194LmN1cnJlbnQpIHt9CgogIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KICByZXZlcnNlX2l0
ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXI+JiBfX3gpCiAgICA6IGN1cnJlbnQo
X194LmJhc2UoKSkge30KCiAgICAKICBpdGVyYXRvcl90eXBlIGJhc2UoKSBjb25zdCB7IHJldHVy
biBjdXJyZW50OyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9JdGVyYXRv
ciBfX3RtcCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAgfQoKICBwb2ludGVyIG9w
ZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKCiAgX1NlbGYmIG9w
ZXJhdG9yKysoKSB7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxm
IG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS1jdXJyZW50
OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAgICsrY3Vy
cmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAg
IF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAg
fQoKICBfU2VsZiBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAgcmV0
dXJuIF9TZWxmKGN1cnJlbnQgLSBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3IrPShkaWZmZXJl
bmNlX3R5cGUgX19uKSB7CiAgICBjdXJyZW50IC09IF9fbjsKICAgIHJldHVybiAqdGhpczsKICB9
CiAgX1NlbGYgb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsKICAgIHJldHVy
biBfU2VsZihjdXJyZW50ICsgX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLT0oZGlmZmVyZW5j
ZV90eXBlIF9fbikgewogICAgY3VycmVudCArPSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAgfQog
IHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJu
ICooKnRoaXMgKyBfX24pOyB9ICAKfTsgCiAKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f
eCwgCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0
b3I+JiBfX3kpIHsKICByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9p
dGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsIAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX195LmJhc2UoKSA8IF9f
eC5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBy
ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpvcGVyYXRvci0oY29u
c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsIAogICAgICAgICAgY29uc3QgcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX195LmJhc2UoKSAtIF9f
eC5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4gCm9wZXJhdG9yKyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9J
dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCkgewogIHJldHVybiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
YXRvcj4oX194LmJhc2UoKSAtIF9fbik7Cn0KCiMgODA1ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9p
Mzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0
ZXJhdG9yLmgiIDMKCgogCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0ID0gcHRy
ZGlmZl90PiAKY2xhc3MgaXN0cmVhbV9pdGVyYXRvciB7CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9
PSA8PiAgKGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImKTsKcHJvdGVjdGVk
OgogIGlzdHJlYW0qIF9NX3N0cmVhbTsKICBfVHAgX01fdmFsdWU7CiAgYm9vbCBfTV9lbmRfbWFy
a2VyOwogIHZvaWQgX01fcmVhZCgpIHsKICAgIF9NX2VuZF9tYXJrZXIgPSAoKl9NX3N0cmVhbSkg
PyB0cnVlIDogZmFsc2U7CiAgICBpZiAoX01fZW5kX21hcmtlcikgKl9NX3N0cmVhbSA+PiBfTV92
YWx1ZTsKICAgIF9NX2VuZF9tYXJrZXIgPSAoKl9NX3N0cmVhbSkgPyB0cnVlIDogZmFsc2U7CiAg
fQpwdWJsaWM6CiAgdHlwZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgIGl0ZXJhdG9yX2NhdGVnb3J5
OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rp
c3QgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjb25zdCBfVHAqICAg
ICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAmICAgICAgICAgIHJlZmVyZW5jZTsK
CiAgaXN0cmVhbV9pdGVyYXRvcigpIDogX01fc3RyZWFtKCZjaW4pLCBfTV9lbmRfbWFya2VyKGZh
bHNlKSB7fQogIGlzdHJlYW1faXRlcmF0b3IoaXN0cmVhbSYgX19zKSA6IF9NX3N0cmVhbSgmX19z
KSB7IF9NX3JlYWQoKTsgfQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBf
TV92YWx1ZTsgfQoKICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJh
dG9yKigpKTsgfQoKICBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3Q+JiBvcGVyYXRvcisrKCkg
eyAKICAgIF9NX3JlYWQoKTsgCiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGlzdHJlYW1faXRlcmF0
b3I8X1RwLCBfRGlzdD4gb3BlcmF0b3IrKyhpbnQpICB7CiAgICBpc3RyZWFtX2l0ZXJhdG9yPF9U
cCwgX0Rpc3Q+IF9fdG1wID0gKnRoaXM7CiAgICBfTV9yZWFkKCk7CiAgICByZXR1cm4gX190bXA7
CiAgfQp9OwoKIyA4NjQgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8y
Ljk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYgX194LAogICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+JiBfX3kpIHsK
ICByZXR1cm4gKF9feC5fTV9zdHJlYW0gPT0gX195Ll9NX3N0cmVhbSAmJgogICAgICAgICAgX194
Ll9NX2VuZF9tYXJrZXIgPT0gX195Ll9NX2VuZF9tYXJrZXIpIHx8CiAgICAgICAgIF9feC5fTV9l
bmRfbWFya2VyID09IGZhbHNlICYmIF9feS5fTV9lbmRfbWFya2VyID09IGZhbHNlOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBvc3RyZWFtX2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIG9z
dHJlYW0qIF9NX3N0cmVhbTsKICBjb25zdCBjaGFyKiBfTV9zdHJpbmc7CnB1YmxpYzoKICB0eXBl
ZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lk
ICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAg
IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsK
ICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICBvc3RyZWFtX2l0ZXJh
dG9yKG9zdHJlYW0mIF9fcykgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZygwKSB7fQogIG9z
dHJlYW1faXRlcmF0b3Iob3N0cmVhbSYgX19zLCBjb25zdCBjaGFyKiBfX2MpIAogICAgOiBfTV9z
dHJlYW0oJl9fcyksIF9NX3N0cmluZyhfX2MpICB7fQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYg
b3BlcmF0b3I9KGNvbnN0IF9UcCYgX192YWx1ZSkgeyAKICAgICpfTV9zdHJlYW0gPDwgX192YWx1
ZTsKICAgIGlmIChfTV9zdHJpbmcpICpfTV9zdHJlYW0gPDwgX01fc3RyaW5nOwogICAgcmV0dXJu
ICp0aGlzOwogIH0KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKigpIHsgcmV0dXJu
ICp0aGlzOyB9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4g
KnRoaXM7IH0gCiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKGludCkgeyByZXR1
cm4gKnRoaXM7IH0gCn07CgojIDkwNyAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xh
cmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAz
CgoKIAoKCgogCiAKIAojIDM4ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMy
LjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaXRlcmF0b3IiIDIgMwoKCgoKIAog
CiAKIyA0NCAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCgoKCmV4dGVybiB2
b2lkIF9fb3V0X29mX3JhbmdlIChjb25zdCBjaGFyICopOwpleHRlcm4gdm9pZCBfX2xlbmd0aF9l
cnJvciAoY29uc3QgY2hhciAqKTsKCgoKCgoKCgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQs
IGNsYXNzIHRyYWl0cyA9IHN0cmluZ19jaGFyX3RyYWl0czxjaGFyVD4sCgkgIGNsYXNzIEFsbG9j
YXRvciA9IGFsbG9jID4KY2xhc3MgYmFzaWNfc3RyaW5nCnsKcHJpdmF0ZToKICBzdHJ1Y3QgUmVw
IHsKICAgIHNpemVfdCBsZW4sIHJlcywgcmVmOwogICAgYm9vbCBzZWxmaXNoOwoKICAgIGNoYXJU
KiBkYXRhICgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhclQgKj4odGhpcyArIDEpOyB9
CiAgICBjaGFyVCYgb3BlcmF0b3JbXSAoc2l6ZV90IHMpIHsgcmV0dXJuIGRhdGEgKCkgW3NdOyB9
CiAgICBjaGFyVCogZ3JhYiAoKSB7IGlmIChzZWxmaXNoKSByZXR1cm4gY2xvbmUgKCk7ICsrcmVm
OyByZXR1cm4gZGF0YSAoKTsgfQojIDEwOCAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1z
b2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5o
IiAzCgogICAgdm9pZCByZWxlYXNlICgpIHsgaWYgKC0tcmVmID09IDApIGRlbGV0ZSB0aGlzOyB9
CgoKICAgIGlubGluZSBzdGF0aWMgdm9pZCAqIG9wZXJhdG9yIG5ldyAoc2l6ZV90LCBzaXplX3Qp
OwogICAgaW5saW5lIHN0YXRpYyB2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqKTsKICAgIGlu
bGluZSBzdGF0aWMgUmVwKiBjcmVhdGUgKHNpemVfdCk7CiAgICBjaGFyVCogY2xvbmUgKCk7Cgog
ICAgaW5saW5lIHZvaWQgY29weSAoc2l6ZV90LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAg
aW5saW5lIHZvaWQgbW92ZSAoc2l6ZV90LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAgaW5s
aW5lIHZvaWQgc2V0ICAoc2l6ZV90LCBjb25zdCBjaGFyVCwgICBzaXplX3QpOwoKICAgIGlubGlu
ZSBzdGF0aWMgYm9vbCBleGNlc3Nfc2xvcCAoc2l6ZV90LCBzaXplX3QpOwogICAgaW5saW5lIHN0
YXRpYyBzaXplX3QgZnJvYl9zaXplIChzaXplX3QpOwoKICBwcml2YXRlOgogICAgUmVwICZvcGVy
YXRvcj0gKGNvbnN0IFJlcCAmKTsKICB9OwoKcHVibGljOgogCiAgdHlwZWRlZgkgICB0cmFpdHMJ
CXRyYWl0c190eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzOjpjaGFyX3R5cGUJdmFsdWVf
dHlwZTsKICB0eXBlZGVmCSAgIEFsbG9jYXRvcgkJYWxsb2NhdG9yX3R5cGU7CgogIHR5cGVkZWYg
c2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiBjaGFyVCYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgY2hhclQmIGNvbnN0X3Jl
ZmVyZW5jZTsKICB0eXBlZGVmIGNoYXJUKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgY2hhclQq
IGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBwb2ludGVyIGl0ZXJhdG9yOwogIHR5cGVkZWYgY29u
c3RfcG9pbnRlciBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRvcjxp
dGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRvcjxj
b25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICBzdGF0aWMgY29uc3Qgc2l6
ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0xKTsKCnByaXZhdGU6CiAgUmVw
ICpyZXAgKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSZXAgKj4oZGF0KSAtIDE7
IH0KICB2b2lkIHJlcHVwIChSZXAgKnApIHsgcmVwICgpLT5yZWxlYXNlICgpOyBkYXQgPSBwLT5k
YXRhICgpOyB9CgpwdWJsaWM6CiAgY29uc3QgY2hhclQqIGRhdGEgKCkgY29uc3QKICAgIHsgcmV0
dXJuIHJlcCAoKS0+ZGF0YSgpOyB9CiAgc2l6ZV90eXBlIGxlbmd0aCAoKSBjb25zdAogICAgeyBy
ZXR1cm4gcmVwICgpLT5sZW47IH0KICBzaXplX3R5cGUgc2l6ZSAoKSBjb25zdAogICAgeyByZXR1
cm4gcmVwICgpLT5sZW47IH0KICBzaXplX3R5cGUgY2FwYWNpdHkgKCkgY29uc3QKICAgIHsgcmV0
dXJuIHJlcCAoKS0+cmVzOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplICgpIGNvbnN0CiAgICB7IHJl
dHVybiAobnBvcyAtIDEpL3NpemVvZiAoY2hhclQpOyB9CQkgCiAgYm9vbCBlbXB0eSAoKSBjb25z
dAogICAgeyByZXR1cm4gc2l6ZSAoKSA9PSAwOyB9CgogCiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRv
cj0gKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyKQogICAgewogICAgICBpZiAoJnN0ciAhPSB0aGlz
KSB7IHJlcCAoKS0+cmVsZWFzZSAoKTsgZGF0ID0gc3RyLnJlcCAoKS0+Z3JhYiAoKTsgfQogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIGV4cGxpY2l0IGJhc2ljX3N0cmluZyAoKTogZGF0IChu
aWxSZXAuZ3JhYiAoKSkgeyB9CiAgYmFzaWNfc3RyaW5nIChjb25zdCBiYXNpY19zdHJpbmcmIHN0
cik6IGRhdCAoc3RyLnJlcCAoKS0+Z3JhYiAoKSkgeyB9CiAgYmFzaWNfc3RyaW5nIChjb25zdCBi
YXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4gPSBucG9zKQogICAg
OiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAoc3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNf
c3RyaW5nIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4pCiAgICA6IGRhdCAobmlsUmVwLmdy
YWIgKCkpIHsgYXNzaWduIChzLCBuKTsgfQogIGJhc2ljX3N0cmluZyAoY29uc3QgY2hhclQqIHMp
CiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChzKTsgfQogIGJhc2ljX3N0cmlu
ZyAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNz
aWduIChuLCBjKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9yPgogICAgYmFzaWNf
c3RyaW5nKElucHV0SXRlcmF0b3IgX19iZWdpbiwgSW5wdXRJdGVyYXRvciBfX2VuZCkKCgoKICAg
IDogZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyBhc3NpZ24gKF9fYmVnaW4sIF9fZW5kKTsgfQoKICB+
YmFzaWNfc3RyaW5nICgpCiAgICB7IHJlcCAoKS0+cmVsZWFzZSAoKTsgfQoKICB2b2lkIHN3YXAg
KGJhc2ljX3N0cmluZyAmcykgeyBjaGFyVCAqZCA9IGRhdDsgZGF0ID0gcy5kYXQ7IHMuZGF0ID0g
ZDsgfQoKICBiYXNpY19zdHJpbmcmIGFwcGVuZCAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNp
emVfdHlwZSBwb3MgPSAwLAoJCQlzaXplX3R5cGUgbiA9IG5wb3MpCiAgICB7IHJldHVybiByZXBs
YWNlIChsZW5ndGggKCksIDAsIHN0ciwgcG9zLCBuKTsgfQogIGJhc2ljX3N0cmluZyYgYXBwZW5k
IChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4pCiAgICB7IHJldHVybiByZXBsYWNlIChsZW5n
dGggKCksIDAsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhcHBlbmQgKGNvbnN0IGNoYXJUKiBz
KQogICAgeyByZXR1cm4gYXBwZW5kIChzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgYmFzaWNf
c3RyaW5nJiBhcHBlbmQgKHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4gcmVwbGFj
ZSAobGVuZ3RoICgpLCAwLCBuLCBjKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9y
PgogICAgYmFzaWNfc3RyaW5nJiBhcHBlbmQoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVy
YXRvciBsYXN0KQoKCgogICAgeyByZXR1cm4gcmVwbGFjZSAoaWVuZCAoKSwgaWVuZCAoKSwgZmly
c3QsIGxhc3QpOyB9CgogIHZvaWQgcHVzaF9iYWNrKGNoYXJUIF9fYykKICB7IGFwcGVuZCgxLCBf
X2MpOyB9CiAgCiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24gKGNvbnN0IGJhc2ljX3N0cmluZyYgc3Ry
LCBzaXplX3R5cGUgcG9zID0gMCwKCQkJc2l6ZV90eXBlIG4gPSBucG9zKQogICAgeyByZXR1cm4g
cmVwbGFjZSAoMCwgbnBvcywgc3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24g
KGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAgIHsgcmV0dXJuIHJlcGxhY2UgKDAsIG5w
b3MsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24gKGNvbnN0IGNoYXJUKiBzKQogICAg
eyByZXR1cm4gYXNzaWduIChzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgYmFzaWNfc3RyaW5n
JiBhc3NpZ24gKHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4gcmVwbGFjZSAoMCwg
bnBvcywgbiwgYyk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICAgIGJhc2lj
X3N0cmluZyYgYXNzaWduKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCkK
CgoKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGliZWdpbiAoKSwgaWVuZCAoKSwgZmlyc3QsIGxhc3Qp
OyB9CgogIGJhc2ljX3N0cmluZyYgb3BlcmF0b3I9IChjb25zdCBjaGFyVCogcykKICAgIHsgcmV0
dXJuIGFzc2lnbiAocyk7IH0KICBiYXNpY19zdHJpbmcmIG9wZXJhdG9yPSAoY2hhclQgYykKICAg
IHsgcmV0dXJuIGFzc2lnbiAoMSwgYyk7IH0KCiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcis9IChj
b25zdCBiYXNpY19zdHJpbmcmIHJocykKICAgIHsgcmV0dXJuIGFwcGVuZCAocmhzKTsgfQogIGJh
c2ljX3N0cmluZyYgb3BlcmF0b3IrPSAoY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiBhcHBl
bmQgKHMpOyB9CiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcis9IChjaGFyVCBjKQogICAgeyByZXR1
cm4gYXBwZW5kICgxLCBjKTsgfQoKICBiYXNpY19zdHJpbmcmIGluc2VydCAoc2l6ZV90eXBlIHBv
czEsIGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLAoJCQlzaXplX3R5cGUgcG9zMiA9IDAsIHNpemVf
dHlwZSBuID0gbnBvcykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKHBvczEsIDAsIHN0ciwgcG9zMiwg
bik7IH0KICBiYXNpY19zdHJpbmcmIGluc2VydCAoc2l6ZV90eXBlIHBvcywgY29uc3QgY2hhclQq
IHMsIHNpemVfdHlwZSBuKQogICAgeyByZXR1cm4gcmVwbGFjZSAocG9zLCAwLCBzLCBuKTsgfQog
IGJhc2ljX3N0cmluZyYgaW5zZXJ0IChzaXplX3R5cGUgcG9zLCBjb25zdCBjaGFyVCogcykKICAg
IHsgcmV0dXJuIGluc2VydCAocG9zLCBzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgYmFzaWNf
c3RyaW5nJiBpbnNlcnQgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAg
eyByZXR1cm4gcmVwbGFjZSAocG9zLCAwLCBuLCBjKTsgfQogIGl0ZXJhdG9yIGluc2VydChpdGVy
YXRvciBwLCBjaGFyVCBjKQogICAgeyBzaXplX3R5cGUgX19vID0gcCAtIGliZWdpbiAoKTsKICAg
ICAgaW5zZXJ0IChwIC0gaWJlZ2luICgpLCAxLCBjKTsgc2VsZmlzaCAoKTsKICAgICAgcmV0dXJu
IGliZWdpbiAoKSArIF9fbzsgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBwLCBzaXplX3R5
cGUgbiwgY2hhclQgYykKICAgIHsgc2l6ZV90eXBlIF9fbyA9IHAgLSBpYmVnaW4gKCk7CiAgICAg
IGluc2VydCAocCAtIGliZWdpbiAoKSwgbiwgYyk7IHNlbGZpc2ggKCk7CiAgICAgIHJldHVybiBp
YmVnaW4gKCkgKyBfX287IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICAgIHZv
aWQgaW5zZXJ0KGl0ZXJhdG9yIHAsIElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3Ig
bGFzdCkKCgoKICAgIHsgcmVwbGFjZSAocCwgcCwgZmlyc3QsIGxhc3QpOyB9CgogIGJhc2ljX3N0
cmluZyYgZXJhc2UgKHNpemVfdHlwZSBwb3MgPSAwLCBzaXplX3R5cGUgbiA9IG5wb3MpCiAgICB7
IHJldHVybiByZXBsYWNlIChwb3MsIG4sIChzaXplX3R5cGUpMCwgKGNoYXJUKTApOyB9CiAgaXRl
cmF0b3IgZXJhc2UoaXRlcmF0b3IgcCkKICAgIHsgc2l6ZV90eXBlIF9fbyA9IHAgLSBiZWdpbigp
OwogICAgICByZXBsYWNlIChfX28sIDEsIChzaXplX3R5cGUpMCwgKGNoYXJUKTApOyBzZWxmaXNo
ICgpOwogICAgICByZXR1cm4gaWJlZ2luKCkgKyBfX287IH0KICBpdGVyYXRvciBlcmFzZShpdGVy
YXRvciBmLCBpdGVyYXRvciBsKQogICAgeyBzaXplX3R5cGUgX19vID0gZiAtIGliZWdpbigpOwog
ICAgICByZXBsYWNlIChfX28sIGwtZiwgKHNpemVfdHlwZSkwLCAoY2hhclQpMCk7c2VsZmlzaCAo
KTsKICAgICAgcmV0dXJuIGliZWdpbigpICsgX19vOyB9CgogIGJhc2ljX3N0cmluZyYgcmVwbGFj
ZSAoc2l6ZV90eXBlIHBvczEsIHNpemVfdHlwZSBuMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIs
CgkJCSBzaXplX3R5cGUgcG9zMiA9IDAsIHNpemVfdHlwZSBuMiA9IG5wb3MpOwogIGJhc2ljX3N0
cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBjb25zdCBjaGFyVCog
cywKCQkJIHNpemVfdHlwZSBuMik7CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5cGUg
cG9zLCBzaXplX3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gcmVwbGFjZSAo
cG9zLCBuMSwgcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIGJhc2ljX3N0cmluZyYgcmVwbGFj
ZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBzaXplX3R5cGUgbjIsIGNoYXJUIGMpOwog
IGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4sIGNoYXJU
IGMpCiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIG4sIDEsIGMpOyB9CiAgYmFzaWNfc3RyaW5n
JiByZXBsYWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIGNvbnN0IGJhc2ljX3N0cmluZyYg
c3RyKQogICAgeyByZXR1cm4gcmVwbGFjZSAoaTEgLSBpYmVnaW4gKCksIGkyIC0gaTEsIHN0cik7
IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBpMiwgY29u
c3QgY2hhclQqIHMsIHNpemVfdHlwZSBuKQogICAgeyByZXR1cm4gcmVwbGFjZSAoaTEgLSBpYmVn
aW4gKCksIGkyIC0gaTEsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChpdGVyYXRv
ciBpMSwgaXRlcmF0b3IgaTIsIGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gcmVwbGFjZSAo
aTEgLSBpYmVnaW4gKCksIGkyIC0gaTEsIHMpOyB9CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChp
dGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1
cm4gcmVwbGFjZSAoaTEgLSBpYmVnaW4gKCksIGkyIC0gaTEsIG4sIGMpOyB9CgogIHRlbXBsYXRl
PGNsYXNzIElucHV0SXRlcmF0b3I+CiAgICBiYXNpY19zdHJpbmcmIHJlcGxhY2UoaXRlcmF0b3Ig
aTEsIGl0ZXJhdG9yIGkyLAoJCQkgIElucHV0SXRlcmF0b3IgajEsIElucHV0SXRlcmF0b3IgajIp
OwoKCgoKCnByaXZhdGU6CiAgc3RhdGljIGNoYXJUIGVvcyAoKSB7IHJldHVybiB0cmFpdHM6OmVv
cyAoKTsgfQogIHZvaWQgdW5pcXVlICgpIHsgaWYgKHJlcCAoKS0+cmVmID4gMSkgYWxsb2MgKGxl
bmd0aCAoKSwgdHJ1ZSk7IH0KICB2b2lkIHNlbGZpc2ggKCkgeyB1bmlxdWUgKCk7IHJlcCAoKS0+
c2VsZmlzaCA9IHRydWU7IH0KCnB1YmxpYzoKICBjaGFyVCBvcGVyYXRvcltdIChzaXplX3R5cGUg
cG9zKSBjb25zdAogICAgewogICAgICBpZiAocG9zID09IGxlbmd0aCAoKSkKCXJldHVybiBlb3Mg
KCk7CiAgICAgIHJldHVybiBkYXRhICgpW3Bvc107CiAgICB9CgogIHJlZmVyZW5jZSBvcGVyYXRv
cltdIChzaXplX3R5cGUgcG9zKQogICAgeyBzZWxmaXNoICgpOyByZXR1cm4gKCpyZXAgKCkpW3Bv
c107IH0KCiAgcmVmZXJlbmNlIGF0IChzaXplX3R5cGUgcG9zKQogICAgewogICAgICBkbyB7IGlm
ICggcG9zID49IGxlbmd0aCAoKSApIF9fb3V0X29mX3JhbmdlICgicG9zID49IGxlbmd0aCAoKSIp
OyB9IHdoaWxlICgwKSA7CiAgICAgIHJldHVybiAoKnRoaXMpW3Bvc107CiAgICB9CiAgY29uc3Rf
cmVmZXJlbmNlIGF0IChzaXplX3R5cGUgcG9zKSBjb25zdAogICAgewogICAgICBkbyB7IGlmICgg
cG9zID49IGxlbmd0aCAoKSApIF9fb3V0X29mX3JhbmdlICgicG9zID49IGxlbmd0aCAoKSIpOyB9
IHdoaWxlICgwKSA7CiAgICAgIHJldHVybiBkYXRhICgpW3Bvc107CiAgICB9Cgpwcml2YXRlOgog
IHZvaWQgdGVybWluYXRlICgpIGNvbnN0CiAgICB7IHRyYWl0czo6YXNzaWduICgoKnJlcCAoKSlb
bGVuZ3RoICgpXSwgZW9zICgpKTsgfQoKcHVibGljOgogIGNvbnN0IGNoYXJUKiBjX3N0ciAoKSBj
b25zdAogICAgeyBpZiAobGVuZ3RoICgpID09IDApIHJldHVybiAiIjsgdGVybWluYXRlICgpOyBy
ZXR1cm4gZGF0YSAoKTsgfQogIHZvaWQgcmVzaXplIChzaXplX3R5cGUgbiwgY2hhclQgYyk7CiAg
dm9pZCByZXNpemUgKHNpemVfdHlwZSBuKQogICAgeyByZXNpemUgKG4sIGVvcyAoKSk7IH0KICB2
b2lkIHJlc2VydmUgKHNpemVfdHlwZSkgeyB9CgogIHNpemVfdHlwZSBjb3B5IChjaGFyVCogcywg
c2l6ZV90eXBlIG4sIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdDsKCiAgc2l6ZV90eXBlIGZpbmQg
KGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsg
cmV0dXJuIGZpbmQgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlw
ZSBmaW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0
OwogIHNpemVfdHlwZSBmaW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IDApIGNv
bnN0CiAgICB7IHJldHVybiBmaW5kIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBz
aXplX3R5cGUgZmluZCAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0OwoKICBzaXpl
X3R5cGUgcmZpbmQgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gbnBv
cykgY29uc3QKICAgIHsgcmV0dXJuIHJmaW5kIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgo
KSk7IH0KICBzaXplX3R5cGUgcmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBz
aXplX3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBlIHJmaW5kIChjb25zdCBjaGFyVCogcywgc2l6
ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiByZmluZCAocywgcG9zLCB0cmFp
dHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIHJmaW5kIChjaGFyVCBjLCBzaXplX3R5cGUg
cG9zID0gbnBvcykgY29uc3Q7CgogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X29mIChjb25zdCBiYXNp
Y19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBmaW5k
X2ZpcnN0X29mIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0KICBzaXplX3R5cGUg
ZmluZF9maXJzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBu
KSBjb25zdDsKICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVf
dHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9maXJzdF9vZiAocywgcG9zLCB0
cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfb2YgKGNoYXJUIGMs
IHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZCAoYywgcG9zKTsgfQoK
ICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90
eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2xhc3Rfb2YgKHN0ci5kYXRh
KCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kX2xhc3Rfb2YgKGNvbnN0
IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBl
IGZpbmRfbGFzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25z
dAogICAgeyByZXR1cm4gZmluZF9sYXN0X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7
IH0KICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zID0gbnBv
cykgY29uc3QKICAgIHsgcmV0dXJuIHJmaW5kIChjLCBwb3MpOyB9CgogIHNpemVfdHlwZSBmaW5k
X2ZpcnN0X25vdF9vZiAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAw
KSBjb25zdAogICAgeyByZXR1cm4gZmluZF9maXJzdF9ub3Rfb2YgKHN0ci5kYXRhKCksIHBvcywg
c3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X25vdF9vZiAoY29uc3QgY2hh
clQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBzaXplX3R5cGUgZmlu
ZF9maXJzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3QK
ICAgIHsgcmV0dXJuIGZpbmRfZmlyc3Rfbm90X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChz
KSk7IH0KICBzaXplX3R5cGUgZmluZF9maXJzdF9ub3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBw
b3MgPSAwKSBjb25zdDsKCiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9ub3Rfb2YgKGNvbnN0IGJhc2lj
X3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIGZp
bmRfbGFzdF9ub3Rfb2YgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVf
dHlwZSBmaW5kX2xhc3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6
ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSBmaW5kX2xhc3Rfbm90X29mIChjb25zdCBjaGFy
VCogcywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2xhc3Rf
bm90X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUgZmluZF9s
YXN0X25vdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0OwoKICBiYXNp
Y19zdHJpbmcgc3Vic3RyIChzaXplX3R5cGUgcG9zID0gMCwgc2l6ZV90eXBlIG4gPSBucG9zKSBj
b25zdAogICAgeyByZXR1cm4gYmFzaWNfc3RyaW5nICgqdGhpcywgcG9zLCBuKTsgfQoKICBpbnQg
Y29tcGFyZSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwLCBzaXpl
X3R5cGUgbiA9IG5wb3MpIGNvbnN0OwogICAKICBpbnQgY29tcGFyZSAoY29uc3QgY2hhclQqIHMs
IHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBpbnQgY29tcGFyZSAoY29uc3Qg
Y2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gY29tcGFyZSAo
cywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CgogIGl0ZXJhdG9yIGJlZ2luICgpIHsgc2Vs
ZmlzaCAoKTsgcmV0dXJuICYoKnRoaXMpWzBdOyB9CiAgaXRlcmF0b3IgZW5kICgpIHsgc2VsZmlz
aCAoKTsgcmV0dXJuICYoKnRoaXMpW2xlbmd0aCAoKV07IH0KCnByaXZhdGU6CiAgaXRlcmF0b3Ig
aWJlZ2luICgpIGNvbnN0IHsgcmV0dXJuICYoKnJlcCAoKSlbMF07IH0KICBpdGVyYXRvciBpZW5k
ICgpIGNvbnN0IHsgcmV0dXJuICYoKnJlcCAoKSlbbGVuZ3RoICgpXTsgfQoKcHVibGljOgogIGNv
bnN0X2l0ZXJhdG9yIGJlZ2luICgpIGNvbnN0IHsgcmV0dXJuIGliZWdpbiAoKTsgfQogIGNvbnN0
X2l0ZXJhdG9yIGVuZCAoKSBjb25zdCB7IHJldHVybiBpZW5kICgpOyB9CgogIHJldmVyc2VfaXRl
cmF0b3IgICAgICAgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvciAoZW5kICgpKTsg
fQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNv
bnN0X3JldmVyc2VfaXRlcmF0b3IgKGVuZCAoKSk7IH0KICByZXZlcnNlX2l0ZXJhdG9yICAgICAg
IHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yIChiZWdpbiAoKSk7IH0KICBjb25zdF9y
ZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9p
dGVyYXRvciAoYmVnaW4gKCkpOyB9Cgpwcml2YXRlOgogIHZvaWQgYWxsb2MgKHNpemVfdHlwZSBz
aXplLCBib29sIHNhdmUpOwogIHN0YXRpYyBzaXplX3R5cGUgX2ZpbmQgKGNvbnN0IGNoYXJUKiBw
dHIsIGNoYXJUIGMsIHNpemVfdHlwZSB4cG9zLCBzaXplX3R5cGUgbGVuKTsKICBpbmxpbmUgYm9v
bCBjaGVja19yZWFsbG9jIChzaXplX3R5cGUgcykgY29uc3Q7CgogIHN0YXRpYyBSZXAgbmlsUmVw
OwogIGNoYXJUICpkYXQ7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs
IGNsYXNzIEFsbG9jYXRvcj4gdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3I+CmJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh
aXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGkyLCBJbnB1
dEl0ZXJhdG9yIGoxLCBJbnB1dEl0ZXJhdG9yIGoyKQoKCgoKCnsKICBjb25zdCBzaXplX3R5cGUg
bGVuID0gbGVuZ3RoICgpOwogIHNpemVfdHlwZSBwb3MgPSBpMSAtIGliZWdpbiAoKTsKICBzaXpl
X3R5cGUgbjEgPSBpMiAtIGkxOwogIHNpemVfdHlwZSBuMiA9IGoyIC0gajE7CgogIGRvIHsgaWYg
KCBwb3MgPiBsZW4gKSBfX291dF9vZl9yYW5nZSAoInBvcyA+IGxlbiIpOyB9IHdoaWxlICgwKSA7
CiAgaWYgKG4xID4gbGVuIC0gcG9zKQogICAgbjEgPSBsZW4gLSBwb3M7CiAgZG8geyBpZiAoIGxl
biAtIG4xID4gbWF4X3NpemUgKCkgLSBuMiApIF9fbGVuZ3RoX2Vycm9yICgibGVuIC0gbjEgPiBt
YXhfc2l6ZSAoKSAtIG4yIik7IH0gd2hpbGUgKDApIDsKICBzaXplX3QgbmV3bGVuID0gbGVuIC0g
bjEgKyBuMjsKCiAgaWYgKGNoZWNrX3JlYWxsb2MgKG5ld2xlbikpCiAgICB7CiAgICAgIFJlcCAq
cCA9IFJlcDo6Y3JlYXRlIChuZXdsZW4pOwogICAgICBwLT5jb3B5ICgwLCBkYXRhICgpLCBwb3Mp
OwogICAgICBwLT5jb3B5IChwb3MgKyBuMiwgZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9z
ICsgbjEpKTsKICAgICAgZm9yICg7IGoxICE9IGoyOyArK2oxLCArK3BvcykKCXRyYWl0czo6YXNz
aWduICgoKnApW3Bvc10sICpqMSk7CiAgICAgIHJlcHVwIChwKTsKICAgIH0KICBlbHNlCiAgICB7
CiAgICAgIHJlcCAoKS0+bW92ZSAocG9zICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0g
KHBvcyArIG4xKSk7CiAgICAgIGZvciAoOyBqMSAhPSBqMjsgKytqMSwgKytwb3MpCgl0cmFpdHM6
OmFzc2lnbiAoKCpyZXAgKCkpW3Bvc10sICpqMSk7CiAgICB9CiAgcmVwICgpLT5sZW4gPSBuZXds
ZW47CgogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp
dHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPgpvcGVyYXRvcisgKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPiYgbGhzLAoJICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+JiByaHMpCnsKICBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj4gc3RyIChsaHMpOwogIHN0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIHN0cjsKfQoKdGVtcGxh
dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPgpvcGVyYXRvcisgKGNvbnN0IGNo
YXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYg
cmhzKQp7CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAobGhz
KTsKICBzdHIuYXBwZW5kIChyaHMpOwogIHJldHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBj
aGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4Kb3BlcmF0b3IrIChjaGFyVCBsaHMsIGNvbnN0IGJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAoMSwgbGhzKTsKICBzdHIuYXBwZW5k
IChyaHMpOwogIHJldHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJh
aXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj4Kb3BlcmF0b3IrIChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPiBzdHIgKGxocyk7CiAgc3RyLmFwcGVuZCAocmhzKTsKICBy
ZXR1cm4gc3RyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg
QWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
Cm9wZXJhdG9yKyAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
JiBsaHMsIGNoYXJUIHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh
dG9yPiBzdHIgKGxocyk7CiAgc3RyLmFwcGVuZCAoMSwgcmhzKTsKICByZXR1cm4gc3RyOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxp
bmUgYm9vbApvcGVyYXRvcj09IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs
bG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs
bG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPT0gMCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGlu
ZSBib29sCm9wZXJhdG9yPT0gKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8
Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAo
bGhzKSA9PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNz
IEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PSAoY29uc3QgYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsKICByZXR1
cm4gKGxocy5jb21wYXJlIChyaHMpID09IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs
YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvciE9IChjb25z
dCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgIT0gMCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29s
Cm9wZXJhdG9yIT0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y
PiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSAh
PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j
YXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPCAw
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv
cj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19z
dHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNv
bXBhcmUgKGxocykgPiAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs
IGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8IChjb25zdCBiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewog
IHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPCAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJU
LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+IChj
b25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgPCAwKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJv
b2wKb3BlcmF0b3I+IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykg
PiAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j
YXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PSAoY29uc3QgY2hhclQqIGxocywgY29uc3QgYmFz
aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKHJo
cy5jb21wYXJlIChsaHMpID49IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRy
YWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjw9IChjb25zdCBiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJo
cykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPD0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJh
dG9yPj0gKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0
cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSA8PSAwKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4K
aW5saW5lIGJvb2wKb3BlcmF0b3I+PSAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsKICByZXR1cm4gKGxocy5jb21w
YXJlIChyaHMpID49IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywg
Y2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvciE9IChjb25zdCBiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBh
cmUgKHJocykgIT0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj
bGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPiAoY29uc3QgYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsCgkgICBjb25zdCBiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUg
KHJocykgPiAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNz
IEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PSAoY29uc3QgYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsCgkgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChy
aHMpIDw9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg
QWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj49IChjb25zdCBiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJo
cykgPj0gMCk7Cn0KCmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJlYW07CnRlbXBsYXRlIDxjbGFz
cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+IGlzdHJlYW0mCm9wZXJhdG9y
Pj4gKGlzdHJlYW0mLCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mKTsK
dGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4gb3N0
cmVhbSYKb3BlcmF0b3I8PCAob3N0cmVhbSYsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPiYpOwp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywg
Y2xhc3MgQWxsb2NhdG9yPiBpc3RyZWFtJgpnZXRsaW5lIChpc3RyZWFtJiwgYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiwgY2hhclQgZGVsaW0gPSAnXG4nKTsKCn0gIAoK
IyAxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4u
Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmNjIiAxIDMKIAogCgogCiAKIAogCiAK
CiAKIAogCiAKCiAKIAogCgogCiAKIAogCiAKCiAKIAoKZXh0ZXJuICJDKysiIHsKdGVtcGxhdGUg
PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQg
KiBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6Cm9wZXJhdG9y
IG5ldyAoc2l6ZV90IHMsIHNpemVfdCBleHRyYSkKewogIHJldHVybiBBbGxvY2F0b3I6OmFsbG9j
YXRlKHMgKyBleHRyYSAqIHNpemVvZiAoY2hhclQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJU
LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQgYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6OgpvcGVyYXRvciBkZWxldGUgKHZvaWQg
KiBwdHIpCnsKICBBbGxvY2F0b3I6OmRlYWxsb2NhdGUocHRyLCBzaXplb2YoUmVwKSArCgkJCXJl
aW50ZXJwcmV0X2Nhc3Q8UmVwICo+KHB0ciktPnJlcyAqCgkJCXNpemVvZiAoY2hhclQpKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5s
aW5lIHNpemVfdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6
CmZyb2Jfc2l6ZSAoc2l6ZV90IHMpCnsKICBzaXplX3QgaSA9IDE2OwogIHdoaWxlIChpIDwgcykg
aSAqPSAyOwogIHJldHVybiBpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0
cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+OjpSZXAgKgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46
OlJlcDo6CmNyZWF0ZSAoc2l6ZV90IGV4dHJhKQp7CiAgZXh0cmEgPSBmcm9iX3NpemUgKGV4dHJh
ICsgMSk7CiAgUmVwICpwID0gbmV3IChleHRyYSkgUmVwOwogIHAtPnJlcyA9IGV4dHJhOwogIHAt
PnJlZiA9IDE7CiAgcC0+c2VsZmlzaCA9IGZhbHNlOwogIHJldHVybiBwOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpjaGFyVCAqIGJhc2lj
X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKY2xvbmUgKCkKewogIFJl
cCAqcCA9IFJlcDo6Y3JlYXRlIChsZW4pOwogIHAtPmNvcHkgKDAsIGRhdGEgKCksIGxlbik7CiAg
cC0+bGVuID0gbGVuOwogIHJldHVybiBwLT5kYXRhICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hh
clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbCBiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CmV4Y2Vzc19zbG9wIChzaXplX3Qg
cywgc2l6ZV90IHIpCnsKICByZXR1cm4gMiAqIChzIDw9IDE2ID8gMTYgOiBzKSA8IHI7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGlu
ZSBib29sIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmNoZWNrX3Jl
YWxsb2MgKGJhc2ljX3N0cmluZzo6c2l6ZV90eXBlIHMpIGNvbnN0CnsKICBzICs9IHNpemVvZiAo
Y2hhclQpOwogIHJlcCAoKS0+c2VsZmlzaCA9IGZhbHNlOwogIHJldHVybiAocmVwICgpLT5yZWYg
PiAxCgkgIHx8IHMgPiBjYXBhY2l0eSAoKQoJICB8fCBSZXA6OmV4Y2Vzc19zbG9wIChzLCBjYXBh
Y2l0eSAoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg
QWxsb2NhdG9yPgp2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6
CmFsbG9jIChiYXNpY19zdHJpbmc6OnNpemVfdHlwZSBfX3NpemUsIGJvb2wgX19zYXZlKQp7CiAg
aWYgKCEgY2hlY2tfcmVhbGxvYyAoX19zaXplKSkKICAgIHJldHVybjsKCiAgUmVwICpwID0gUmVw
OjpjcmVhdGUgKF9fc2l6ZSk7CgogIGlmIChfX3NhdmUpCiAgICB7CiAgICAgIHAtPmNvcHkgKDAs
IGRhdGEgKCksIGxlbmd0aCAoKSk7CiAgICAgIHAtPmxlbiA9IGxlbmd0aCAoKTsKICAgIH0KICBl
bHNlCiAgICBwLT5sZW4gPSAwOwoKICByZXB1cCAocCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFy
VCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPiYKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
OjoKcmVwbGFjZSAoc2l6ZV90eXBlIHBvczEsIHNpemVfdHlwZSBuMSwKCSBjb25zdCBiYXNpY19z
dHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvczIsIHNpemVfdHlwZSBuMikKewogIGNvbnN0IHNpemVf
dCBsZW4yID0gc3RyLmxlbmd0aCAoKTsKCiAgaWYgKHBvczEgPT0gMCAmJiBuMSA+PSBsZW5ndGgg
KCkgJiYgcG9zMiA9PSAwICYmIG4yID49IGxlbjIpCiAgICByZXR1cm4gb3BlcmF0b3I9IChzdHIp
OwoKICBkbyB7IGlmICggcG9zMiA+IGxlbjIgKSBfX291dF9vZl9yYW5nZSAoInBvczIgPiBsZW4y
Iik7IH0gd2hpbGUgKDApIDsKCiAgaWYgKG4yID4gbGVuMiAtIHBvczIpCiAgICBuMiA9IGxlbjIg
LSBwb3MyOwoKICByZXR1cm4gcmVwbGFjZSAocG9zMSwgbjEsIHN0ci5kYXRhICgpICsgcG9zMiwg
bjIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgppbmxpbmUgdm9pZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46
OlJlcDo6CmNvcHkgKHNpemVfdCBwb3MsIGNvbnN0IGNoYXJUICpzLCBzaXplX3QgbikKewogIGlm
IChuKQogICAgdHJhaXRzOjpjb3B5IChkYXRhICgpICsgcG9zLCBzLCBuKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQg
YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6Ogptb3ZlIChzaXpl
X3QgcG9zLCBjb25zdCBjaGFyVCAqcywgc2l6ZV90IG4pCnsKICBpZiAobikKICAgIHRyYWl0czo6
bW92ZSAoZGF0YSAoKSArIHBvcywgcywgbik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xh
c3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPiYKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmVw
bGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBjb25zdCBjaGFyVCogcywgc2l6ZV90
eXBlIG4yKQp7CiAgY29uc3Qgc2l6ZV90eXBlIGxlbiA9IGxlbmd0aCAoKTsKICBkbyB7IGlmICgg
cG9zID4gbGVuICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MgPiBsZW4iKTsgfSB3aGlsZSAoMCkgOwog
IGlmIChuMSA+IGxlbiAtIHBvcykKICAgIG4xID0gbGVuIC0gcG9zOwogIGRvIHsgaWYgKCBsZW4g
LSBuMSA+IG1heF9zaXplICgpIC0gbjIgKSBfX2xlbmd0aF9lcnJvciAoImxlbiAtIG4xID4gbWF4
X3NpemUgKCkgLSBuMiIpOyB9IHdoaWxlICgwKSA7CiAgc2l6ZV90IG5ld2xlbiA9IGxlbiAtIG4x
ICsgbjI7CgogIGlmIChjaGVja19yZWFsbG9jIChuZXdsZW4pKQogICAgewogICAgICBSZXAgKnAg
PSBSZXA6OmNyZWF0ZSAobmV3bGVuKTsKICAgICAgcC0+Y29weSAoMCwgZGF0YSAoKSwgcG9zKTsK
ICAgICAgcC0+Y29weSAocG9zICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBvcyAr
IG4xKSk7CiAgICAgIHAtPmNvcHkgKHBvcywgcywgbjIpOwogICAgICByZXB1cCAocCk7CiAgICB9
CiAgZWxzZQogICAgewogICAgICByZXAgKCktPm1vdmUgKHBvcyArIG4yLCBkYXRhICgpICsgcG9z
ICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICByZXAgKCktPmNvcHkgKHBvcywgcywgbjIp
OwogICAgfQogIHJlcCAoKS0+bGVuID0gbmV3bGVuOwoKICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSB2
b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKc2V0IChz
aXplX3QgcG9zLCBjb25zdCBjaGFyVCBjLCBzaXplX3QgbikKewogIHRyYWl0czo6c2V0ICAoZGF0
YSAoKSArIHBvcywgYywgbik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRz
LCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y
PiYgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoc2l6
ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBzaXplX3R5cGUgbjIsIGNoYXJUIGMpCnsKICBjb25z
dCBzaXplX3QgbGVuID0gbGVuZ3RoICgpOwogIGRvIHsgaWYgKCBwb3MgPiBsZW4gKSBfX291dF9v
Zl9yYW5nZSAoInBvcyA+IGxlbiIpOyB9IHdoaWxlICgwKSA7CiAgaWYgKG4xID4gbGVuIC0gcG9z
KQogICAgbjEgPSBsZW4gLSBwb3M7CiAgZG8geyBpZiAoIGxlbiAtIG4xID4gbWF4X3NpemUgKCkg
LSBuMiApIF9fbGVuZ3RoX2Vycm9yICgibGVuIC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yIik7IH0g
d2hpbGUgKDApIDsKICBzaXplX3QgbmV3bGVuID0gbGVuIC0gbjEgKyBuMjsKCiAgaWYgKGNoZWNr
X3JlYWxsb2MgKG5ld2xlbikpCiAgICB7CiAgICAgIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChuZXds
ZW4pOwogICAgICBwLT5jb3B5ICgwLCBkYXRhICgpLCBwb3MpOwogICAgICBwLT5jb3B5IChwb3Mg
KyBuMiwgZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAgcC0+c2V0
ICAocG9zLCBjLCBuMik7CiAgICAgIHJlcHVwIChwKTsKICAgIH0KICBlbHNlCiAgICB7CiAgICAg
IHJlcCAoKS0+bW92ZSAocG9zICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBvcyAr
IG4xKSk7CiAgICAgIHJlcCAoKS0+c2V0ICAocG9zLCBjLCBuMik7CiAgICB9CiAgcmVwICgpLT5s
ZW4gPSBuZXdsZW47CgogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBj
bGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4Kdm9pZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj46OgpyZXNpemUgKHNpemVfdHlwZSBuLCBjaGFyVCBjKQp7CiAgZG8g
eyBpZiAoIG4gPiBtYXhfc2l6ZSAoKSApIF9fbGVuZ3RoX2Vycm9yICgibiA+IG1heF9zaXplICgp
Iik7IH0gd2hpbGUgKDApIDsKCiAgaWYgKG4gPiBsZW5ndGggKCkpCiAgICBhcHBlbmQgKG4gLSBs
ZW5ndGggKCksIGMpOwogIGVsc2UKICAgIGVyYXNlIChuKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNo
YXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwg
dHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+OjoKY29weSAoY2hhclQqIHMsIHNpemVfdHlwZSBuLCBzaXplX3R5cGUgcG9z
KSBjb25zdAp7CiAgZG8geyBpZiAoIHBvcyA+IGxlbmd0aCAoKSApIF9fb3V0X29mX3JhbmdlICgi
cG9zID4gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDApIDsKCiAgaWYgKG4gPiBsZW5ndGggKCkgLSBw
b3MpCiAgICBuID0gbGVuZ3RoICgpIC0gcG9zOwoKICB0cmFpdHM6OmNvcHkgKHMsIGRhdGEgKCkg
KyBwb3MsIG4pOwogIHJldHVybiBuOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRy
YWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46
OgpmaW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0
CnsKICBzaXplX3QgeHBvcyA9IHBvczsKICBmb3IgKDsgeHBvcyArIG4gPD0gbGVuZ3RoICgpOyAr
K3hwb3MpCiAgICBpZiAodHJhaXRzOjplcSAoZGF0YSAoKSBbeHBvc10sICpzKQoJJiYgdHJhaXRz
Ojpjb21wYXJlIChkYXRhICgpICsgeHBvcywgcywgbikgPT0gMCkKICAgICAgcmV0dXJuIHhwb3M7
CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj
bGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46
OgpfZmluZCAoY29uc3QgY2hhclQqIHB0ciwgY2hhclQgYywgc2l6ZV90eXBlIHhwb3MsIHNpemVf
dHlwZSBsZW4pCnsKICBmb3IgKDsgeHBvcyA8IGxlbjsgKyt4cG9zKQogICAgaWYgKHRyYWl0czo6
ZXEgKHB0ciBbeHBvc10sIGMpKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoK
dGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFz
aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZCAoY2hhclQgYywgc2l6ZV90eXBl
IHBvcykgY29uc3QKewogIHJldHVybiBfZmluZCAoZGF0YSAoKSwgYywgcG9zLCBsZW5ndGggKCkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y
PgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZmluZCAoY29uc3QgY2hhclQq
IHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgaWYgKG4gPiBsZW5ndGgg
KCkpCiAgICByZXR1cm4gbnBvczsKCiAgc2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSBuOwogIGlm
ICh4cG9zID4gcG9zKQogICAgeHBvcyA9IHBvczsKCiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7
ICkKICAgIGlmICh0cmFpdHM6OmVxIChkYXRhICgpIFt4cG9zXSwgKnMpCgkmJiB0cmFpdHM6OmNv
bXBhcmUgKGRhdGEgKCkgKyB4cG9zLCBzLCBuKSA9PSAwKQogICAgICByZXR1cm4geHBvczsKICBy
ZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNz
IEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXpl
X3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmZpbmQgKGNo
YXJUIGMsIHNpemVfdHlwZSBwb3MpIGNvbnN0CnsKICBpZiAoMSA+IGxlbmd0aCAoKSkKICAgIHJl
dHVybiBucG9zOwoKICBzaXplX3QgeHBvcyA9IGxlbmd0aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBw
b3MpCiAgICB4cG9zID0gcG9zOwoKICBmb3IgKCsreHBvczsgeHBvcy0tID4gMDsgKQogICAgaWYg
KHRyYWl0czo6ZXEgKGRhdGEgKCkgW3hwb3NdLCBjKSkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0
dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB
bGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90
eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmRfZmlyc3Rf
b2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewog
IHNpemVfdCB4cG9zID0gcG9zOwogIGZvciAoOyB4cG9zIDwgbGVuZ3RoICgpOyArK3hwb3MpCiAg
ICBpZiAoX2ZpbmQgKHMsIGRhdGEgKCkgW3hwb3NdLCAwLCBuKSAhPSBucG9zKQogICAgICByZXR1
cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0
cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxv
Y2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
OjoKZmluZF9sYXN0X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBl
IG4pIGNvbnN0CnsKICBpZiAobGVuZ3RoKCkgPT0gMCkKICAgIHJldHVybiBucG9zOwogIHNpemVf
dCB4cG9zID0gbGVuZ3RoICgpIC0gMTsKICBpZiAoeHBvcyA+IHBvcykKICAgIHhwb3MgPSBwb3M7
CiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7KQogICAgaWYgKF9maW5kIChzLCBkYXRhICgpIFt4
cG9zXSwgMCwgbikgIT0gbnBvcykKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmRfZmlyc3Rfbm90X29mIChjb25z
dCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBzaXplX3Qg
eHBvcyA9IHBvczsKICBmb3IgKDsgeHBvcyA8IGxlbmd0aCAoKTsgKyt4cG9zKQogICAgaWYgKF9m
aW5kIChzLCBkYXRhICgpIFt4cG9zXSwgMCwgbikgPT0gbnBvcykKICAgICAgcmV0dXJuIHhwb3M7
CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj
bGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6
c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmRf
Zmlyc3Rfbm90X29mIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zKSBjb25zdAp7CiAgc2l6ZV90IHhw
b3MgPSBwb3M7CiAgZm9yICg7IHhwb3MgPCBsZW5ndGggKCk7ICsreHBvcykKICAgIGlmICh0cmFp
dHM6Om5lIChkYXRhICgpIFt4cG9zXSwgYykpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBu
cG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2xhc3Rfbm90X29m
IChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBp
ZiAobGVuZ3RoKCkgPT0gMCkKICAgIHJldHVybiBucG9zOwogIHNpemVfdCB4cG9zID0gbGVuZ3Ro
ICgpIC0gMTsKICBpZiAoeHBvcyA+IHBvcykKICAgIHhwb3MgPSBwb3M7CiAgZm9yICgrK3hwb3M7
IHhwb3MtLSA+IDA7KQogICAgaWYgKF9maW5kIChzLCBkYXRhICgpIFt4cG9zXSwgMCwgbikgPT0g
bnBvcykKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPjo6CmZpbmRfbGFzdF9ub3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBw
b3MpIGNvbnN0CnsKICBpZiAobGVuZ3RoKCkgPT0gMCkKICAgIHJldHVybiBucG9zOwogIHNpemVf
dCB4cG9zID0gbGVuZ3RoICgpIC0gMTsKICBpZiAoeHBvcyA+IHBvcykKICAgIHhwb3MgPSBwb3M7
CiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7KQogICAgaWYgKHRyYWl0czo6bmUgKGRhdGEgKCkg
W3hwb3NdLCBjKSkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmludCBiYXNpY19z
dHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Ogpjb21wYXJlIChjb25zdCBiYXNpY19z
dHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBkbyB7IGlm
ICggcG9zID4gbGVuZ3RoICgpICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MgPiBsZW5ndGggKCkiKTsg
fSB3aGlsZSAoMCkgOwoKICBzaXplX3QgcmxlbiA9IGxlbmd0aCAoKSAtIHBvczsKICBpZiAocmxl
biA+IG4pCiAgICBybGVuID0gbjsKICBpZiAocmxlbiA+IHN0ci5sZW5ndGggKCkpCiAgICBybGVu
ID0gc3RyLmxlbmd0aCAoKTsKICBpbnQgciA9IHRyYWl0czo6Y29tcGFyZSAoZGF0YSAoKSArIHBv
cywgc3RyLmRhdGEgKCksIHJsZW4pOwogIGlmIChyICE9IDApCiAgICByZXR1cm4gcjsKICBpZiAo
cmxlbiA9PSBuKQogICAgcmV0dXJuIDA7CiAgcmV0dXJuIChsZW5ndGggKCkgLSBwb3MpIC0gc3Ry
Lmxlbmd0aCAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNz
IEFsbG9jYXRvcj4KaW50IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6
CmNvbXBhcmUgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29u
c3QKewogIGRvIHsgaWYgKCBwb3MgPiBsZW5ndGggKCkgKSBfX291dF9vZl9yYW5nZSAoInBvcyA+
IGxlbmd0aCAoKSIpOyB9IHdoaWxlICgwKSA7CgogIHNpemVfdCBybGVuID0gbGVuZ3RoICgpIC0g
cG9zOwogIGlmIChybGVuID4gbikKICAgIHJsZW4gPSBuOwogIGludCByID0gdHJhaXRzOjpjb21w
YXJlIChkYXRhICgpICsgcG9zLCBzLCBybGVuKTsKICBpZiAociAhPSAwKQogICAgcmV0dXJuIHI7
CiAgcmV0dXJuIChsZW5ndGggKCkgLSBwb3MpIC0gbjsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgY2hh
clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppc3RyZWFtICYKb3BlcmF0b3I+PiAo
aXN0cmVhbSAmaXMsIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiAmcykK
ewogIGludCB3ID0gaXMud2lkdGggKDApOwogIGlmIChpcy5pcGZ4MCAoKSkKICAgIHsKICAgICAg
cmVnaXN0ZXIgc3RyZWFtYnVmICpzYiA9IGlzLnJkYnVmICgpOwogICAgICBzLnJlc2l6ZSAoMCk7
CiAgICAgIHdoaWxlICgxKQoJewoJICBpbnQgY2ggPSBzYi0+c2J1bXBjICgpOwoJICBpZiAoY2gg
PT0gKC0xKSApCgkgICAgewoJICAgICAgaXMuc2V0c3RhdGUgKGlvczo6ZW9mYml0KTsKCSAgICAg
IGJyZWFrOwoJICAgIH0KCSAgZWxzZSBpZiAodHJhaXRzOjppc19kZWwgKGNoKSkKCSAgICB7Cgkg
ICAgICBzYi0+c3VuZ2V0YyAoKTsKCSAgICAgIGJyZWFrOwoJICAgIH0KCSAgcyArPSBzdGF0aWNf
Y2FzdDxjaGFyVD4gKGNoKTsKCSAgaWYgKC0tdyA9PSAxKQoJICAgIGJyZWFrOwoJfQogICAgfQoK
ICBpcy5pc2Z4ICgpOwogIGlmIChzLmxlbmd0aCAoKSA9PSAwKQogICAgaXMuc2V0c3RhdGUgKGlv
czo6ZmFpbGJpdCk7CgogIHJldHVybiBpczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFz
cyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4Kb3N0cmVhbSAmCm9wZXJhdG9yPDwgKG9zdHJlYW0g
Jm8sIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcykKewog
IHJldHVybiBvLndyaXRlIChzLmRhdGEgKCksIHMubGVuZ3RoICgpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaXN0cmVhbSYKZ2V0bGlu
ZSAoaXN0cmVhbSAmaXMsIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYg
cywgY2hhclQgZGVsaW0pCnsKICBpZiAoaXMuaXBmeDEgKCkpCiAgICB7CiAgICAgIF9HX3NpemVf
dCAgY291bnQgPSAwOwogICAgICBzdHJlYW1idWYgKnNiID0gaXMucmRidWYgKCk7CiAgICAgIHMu
cmVzaXplICgwKTsKCiAgICAgIHdoaWxlICgxKQoJewoJICBpbnQgY2ggPSBzYi0+c2J1bXBjICgp
OwoJICBpZiAoY2ggPT0gKC0xKSApCgkgICAgewoJICAgICAgaXMuc2V0c3RhdGUgKGNvdW50ID09
IDAKCQkJICAgPyAoaW9zOjpmYWlsYml0fGlvczo6ZW9mYml0KQoJCQkgICA6IGlvczo6ZW9mYml0
KTsKCSAgICAgIGJyZWFrOwoJICAgIH0KCgkgICsrY291bnQ7CgoJICBpZiAoY2ggPT0gZGVsaW0p
CgkgICAgYnJlYWs7CgoJICBzICs9IHN0YXRpY19jYXN0PGNoYXJUPiAoY2gpOwoKCSAgaWYgKHMu
bGVuZ3RoICgpID09IHMubnBvcyAtIDEpCgkgICAgewoJICAgICAgaXMuc2V0c3RhdGUgKGlvczo6
ZmFpbGJpdCk7CgkgICAgICBicmVhazsKCSAgICB9Cgl9CiAgICB9CgogICAKICAgCiAgaXMuaXNm
eCAoKTsKCiAgcmV0dXJuIGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0
cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj46OlJlcApiYXNpY19zdHJpbmc8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6bmlsUmVwID0g
eyAwLCAwLCAxLCBmYWxzZSB9OwoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs
IGNsYXNzIEFsbG9jYXRvcj4KY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxv
Y2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
OjpucG9zOwoKfSAgCiMgNjU1ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMy
LjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwoK
CgojIDYgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJpbmciIDIgMwoKCmV4dGVybiAiQysrIiB7CnR5cGVk
ZWYgYmFzaWNfc3RyaW5nIDxjaGFyPiBzdHJpbmc7CiAKfSAgCgoKIyAzICJ0X2d0ay5jcHAiIDIK
CiMgMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8u
Li8uLi8uLi9pbmNsdWRlL2crKy0zL3NzdHJlYW0iIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKIAogCgoKCgoKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgY2xhc3Mgc3RyaW5nYnVmIDogcHVibGlj
IHN0cmVhbWJ1ZgogIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIGNoYXIJY2hhcl90eXBlOwogICAg
dHlwZWRlZiBpbnQJCWludF90eXBlOwogICAgdHlwZWRlZiBzdHJlYW1wb3MJcG9zX3R5cGU7CiAg
ICB0eXBlZGVmIHN0cmVhbW9mZglvZmZfdHlwZTsKCiAgICBleHBsaWNpdAogICAgc3RyaW5nYnVm
KGludCB3aGljaD1pb3M6OmlufGlvczo6b3V0KQogICAgICA6IHN0cmVhbWJ1ZigpLCBtb2RlKHN0
YXRpY19jYXN0PGlvczo6b3Blbl9tb2RlPih3aGljaCkpLAoJc3RyZWFtKF9fbnVsbCApLCBzdHJl
YW1fbGVuKDApCiAgICB7CiAgICAgIHN0cmluZ2J1Zl9pbml0KCk7CiAgICB9CgogICAgZXhwbGlj
aXQKICAgIHN0cmluZ2J1Zihjb25zdCBzdHJpbmcgJnN0ciwgaW50IHdoaWNoPWlvczo6aW58aW9z
OjpvdXQpCiAgICAgIDogc3RyZWFtYnVmKCksIG1vZGUoc3RhdGljX2Nhc3Q8aW9zOjpvcGVuX21v
ZGU+KHdoaWNoKSksCglzdHJlYW0oX19udWxsICksIHN0cmVhbV9sZW4oMCkKICAgIHsKICAgICAg
aWYgKG1vZGUgJiAoaW9zOjppbnxpb3M6Om91dCkpCgl7CgkgIHN0cmVhbV9sZW4gPSBzdHIuc2l6
ZSgpOwoJICBzdHJlYW0gPSBuZXcgY2hhcl90eXBlW3N0cmVhbV9sZW5dOwoJICBzdHIuY29weShz
dHJlYW0sIHN0cmVhbV9sZW4pOwoJfQogICAgICBzdHJpbmdidWZfaW5pdCgpOwogICAgfQoKICAg
IHZpcnR1YWwKICAgIH5zdHJpbmdidWYoKQogICAgewogICAgICBkZWxldGVbXSBzdHJlYW07CiAg
ICB9CgogICAgc3RyaW5nCiAgICBzdHIoKSBjb25zdAogICAgewogICAgICBpZiAocGJhc2UoKSAh
PSAwKQoJcmV0dXJuIHN0cmluZyhzdHJlYW0sIHBwdHIoKS1wYmFzZSgpKTsKICAgICAgZWxzZQoJ
cmV0dXJuIHN0cmluZygpOwogICAgfQoKICAgIHZvaWQKICAgIHN0cihjb25zdCBzdHJpbmcmIHN0
cikKICAgIHsKICAgICAgZGVsZXRlW10gc3RyZWFtOwogICAgICBzdHJlYW1fbGVuID0gc3RyLnNp
emUoKTsKICAgICAgc3RyZWFtID0gbmV3IGNoYXJfdHlwZVtzdHJlYW1fbGVuXTsKICAgICAgc3Ry
LmNvcHkoc3RyZWFtLCBzdHJlYW1fbGVuKTsKICAgICAgc3RyaW5nYnVmX2luaXQoKTsKICAgIH0K
CiAgcHJvdGVjdGVkOgogICAgIAogICAgdmlydHVhbCBpbnQKICAgIHVuZGVyZmxvdygpCiAgICB7
CiAgICAgIHJldHVybiAoLTEpIDsKICAgIH0KCiAgICB2aXJ0dWFsIGludAogICAgb3ZlcmZsb3co
aW50IGMgPSAoLTEpICkKICAgIHsKICAgICAgaW50IHJlczsKICAgICAgaWYgKG1vZGUgJiBpb3M6
Om91dCkKCXsKCSAgaWYgKGMgIT0gKC0xKSApCgkgICAgewoJICAgICAgc3RyZWFtc2l6ZSBvbGRf
c3RyZWFtX2xlbiA9IHN0cmVhbV9sZW47CgkgICAgICBzdHJlYW1fbGVuICs9IDE7CgkgICAgICBj
aGFyX3R5cGUqIG5ld19zdHJlYW0gPSBuZXcgY2hhcl90eXBlW3N0cmVhbV9sZW5dOwoJICAgICAg
bWVtY3B5KG5ld19zdHJlYW0sIHN0cmVhbSwgb2xkX3N0cmVhbV9sZW4pOwoJICAgICAgZGVsZXRl
W10gc3RyZWFtOwoJICAgICAgc3RyZWFtID0gbmV3X3N0cmVhbTsKCSAgICAgIHN0cmluZ2J1Zl9z
eW5jKGdwdHIoKS1lYmFjaygpLCBwcHRyKCktcGJhc2UoKSk7CgkgICAgICBzcHV0YyhjKTsKCSAg
ICAgIHJlcyA9IGM7CgkgICAgfQoJICBlbHNlCgkgICAgcmVzID0gKC0xKSA7Cgl9CiAgICAgIGVs
c2UKCXJlcyA9IDA7CiAgICAgIHJldHVybiByZXM7CiAgICB9CgogICAgdmlydHVhbCBzdHJlYW1i
dWYqCiAgICBzZXRidWYoY2hhcl90eXBlKiBzLCBzdHJlYW1zaXplIG4pCiAgICB7CiAgICAgIGlm
IChuICE9IDApCgl7CgkgIGRlbGV0ZVtdIHN0cmVhbTsKCSAgc3RyZWFtID0gbmV3IGNoYXJfdHlw
ZVtuXTsKCSAgbWVtY3B5KHN0cmVhbSwgcywgbik7CgkgIHN0cmVhbV9sZW4gPSBuOwoJICBzdHJp
bmdidWZfc3luYygwLCAwKTsKCX0KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CgogICAgdmlydHVh
bCBwb3NfdHlwZQogICAgc2Vla29mZihvZmZfdHlwZSBvZmYsIGlvczo6c2Vla19kaXIgd2F5LCBp
bnQgd2hpY2ggPSBpb3M6OmluIHwgaW9zOjpvdXQpCiAgICB7CiAgICAgIHBvc190eXBlIHJldCA9
ICBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOwogICAgICBib29sIHRlc3RpbiA9IHdoaWNoICYgaW9z
OjppbiAmJiBtb2RlICYgaW9zOjppbjsKICAgICAgYm9vbCB0ZXN0b3V0ID0gd2hpY2ggJiBpb3M6
Om91dCAmJiBtb2RlICYgaW9zOjpvdXQ7CiAgICAgIGJvb2wgdGVzdGJvdGggPSB0ZXN0aW4gJiYg
dGVzdG91dCAmJiB3YXkgIT0gaW9zOjpjdXI7CgogICAgICBpZiAoc3RyZWFtX2xlbiAmJiAoKHRl
c3RpbiAhPSB0ZXN0b3V0KSB8fCB0ZXN0Ym90aCkpCgl7CgkgIGNoYXJfdHlwZSogYmVnID0gc3Ry
ZWFtOwoJICBjaGFyX3R5cGUqIGN1cmkgPSBfX251bGwgOwoJICBjaGFyX3R5cGUqIGN1cm8gPSBf
X251bGwgOwoJICBjaGFyX3R5cGUqIGVuZGkgPSBfX251bGwgOwoJICBjaGFyX3R5cGUqIGVuZG8g
PSBfX251bGwgOwoKCSAgaWYgKHRlc3RpbikKCSAgICB7CgkgICAgICBjdXJpID0gZ3B0cigpOwoJ
ICAgICAgZW5kaSA9IGVncHRyKCk7CgkgICAgfQoJICBpZiAodGVzdG91dCkKCSAgICB7CgkgICAg
ICBjdXJvID0gcHB0cigpOwoJICAgICAgZW5kbyA9IGVwcHRyKCk7CgkgICAgfQoKCSAgb2ZmX3R5
cGUgbmV3b2ZmaSA9IDA7CgkgIG9mZl90eXBlIG5ld29mZm8gPSAwOwoJICBpZiAod2F5ID09IGlv
czo6YmVnKQoJICAgIHsKCSAgICAgIG5ld29mZmkgPSBiZWcgLSBjdXJpOwoJICAgICAgbmV3b2Zm
byA9IGJlZyAtIGN1cm87CgkgICAgfQoJICBlbHNlIGlmICh3YXkgPT0gaW9zOjplbmQpCgkgICAg
ewoJICAgICAgbmV3b2ZmaSA9IGVuZGkgLSBjdXJpOwoJICAgICAgbmV3b2ZmbyA9IGVuZG8gLSBj
dXJvOwoJICAgIH0KCgkgIGlmICh0ZXN0aW4gJiYgbmV3b2ZmaSArIG9mZiArIGN1cmkgLSBiZWcg
Pj0gMCAmJgoJICAgICAgZW5kaSAtIGJlZyA+PSBuZXdvZmZpICsgb2ZmICsgY3VyaSAtIGJlZykK
CSAgICB7CgkgICAgICBnYnVtcChuZXdvZmZpICsgb2ZmKTsKCSAgICAgIHJldCA9IHBvc190eXBl
KG5ld29mZmkgKyBvZmYgKyBjdXJpKTsKCSAgICB9CgkgIGlmICh0ZXN0b3V0ICYmIG5ld29mZm8g
KyBvZmYgKyBjdXJvIC0gYmVnID49IDAgJiYKCSAgICAgIGVuZG8gLSBiZWcgPj0gbmV3b2ZmbyAr
IG9mZiArIGN1cm8gLSBiZWcpCgkgICAgewoJICAgICAgcGJ1bXAobmV3b2ZmbyArIG9mZik7Cgkg
ICAgICByZXQgPSBwb3NfdHlwZShuZXdvZmZvICsgb2ZmICsgY3Vybyk7CgkgICAgfQoJfQogICAg
ICByZXR1cm4gcmV0OwogICAgfQoKICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgIHNlZWtwb3MocG9z
X3R5cGUgc3AsIGludCB3aGljaCA9IGlvczo6aW4gfCBpb3M6Om91dCkKICAgIHsKICAgICAgcG9z
X3R5cGUgcmV0ID0gc2Vla29mZihzcCwgaW9zOjpiZWcsIHdoaWNoKTsKICAgICAgcmV0dXJuIHJl
dDsKICAgIH0KCiAgcHJpdmF0ZToKICAgIHZvaWQKICAgIHN0cmluZ2J1Zl9zeW5jKHN0cmVhbXNp
emUgaSwgc3RyZWFtc2l6ZSBvKQogICAgewogICAgICBpZiAobW9kZSAmIGlvczo6aW4pCglzZXRn
KHN0cmVhbSwgc3RyZWFtICsgaSwgc3RyZWFtICsgc3RyZWFtX2xlbik7CiAgICAgIGlmIChtb2Rl
ICYgaW9zOjpvdXQpCgl7CgkgIHNldHAoc3RyZWFtLCBzdHJlYW0gKyBzdHJlYW1fbGVuKTsKCSAg
cGJ1bXAobyk7Cgl9CiAgICB9CiAgICB2b2lkCiAgICBzdHJpbmdidWZfaW5pdCgpCiAgICB7CiAg
ICAgIGlmIChtb2RlICYgaW9zOjphdGUpCglzdHJpbmdidWZfc3luYygwLCBzdHJlYW1fbGVuKTsK
ICAgICAgZWxzZQoJc3RyaW5nYnVmX3N5bmMoMCwgMCk7CiAgICB9CgogIHByaXZhdGU6CiAgICBp
b3M6Om9wZW5fbW9kZQltb2RlOwogICAgY2hhcl90eXBlKgkJc3RyZWFtOwogICAgc3RyZWFtc2l6
ZQkJc3RyZWFtX2xlbjsKICB9OwoMCiAgY2xhc3MgaXN0cmluZ3N0cmVhbSA6IHB1YmxpYyBpc3Ry
ZWFtIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIGNoYXIJY2hhcl90eXBlOwogICAgdHlwZWRlZiBp
bnQJCWludF90eXBlOwogICAgdHlwZWRlZiBzdHJlYW1wb3MJcG9zX3R5cGU7CiAgICB0eXBlZGVm
IHN0cmVhbW9mZglvZmZfdHlwZTsKCiAgICBleHBsaWNpdAogICAgaXN0cmluZ3N0cmVhbShpbnQg
d2hpY2g9aW9zOjppbikKICAgICAgOiBpc3RyZWFtKCZzYiksIHNiKHdoaWNoIHwgaW9zOjppbikK
ICAgIHsgfQoKICAgIGV4cGxpY2l0CiAgICBpc3RyaW5nc3RyZWFtKGNvbnN0IHN0cmluZyYgc3Ry
LCBpbnQgd2hpY2g9aW9zOjppbikKICAgICAgOiBpc3RyZWFtKCZzYiksIHNiKHN0ciwgd2hpY2gg
fCBpb3M6OmluKQogICAgeyB9CgogICAgc3RyaW5nYnVmKgogICAgcmRidWYoKSBjb25zdAogICAg
ewogICAgICByZXR1cm4gY29uc3RfY2FzdDxzdHJpbmdidWYqPigmc2IpOwogICAgfQoKICAgIHN0
cmluZwogICAgc3RyKCkgY29uc3QKICAgIHsKICAgICAgcmV0dXJuIHJkYnVmKCktPnN0cigpOwog
ICAgfQogICAgdm9pZAogICAgc3RyKGNvbnN0IHN0cmluZyYgcykKICAgIHsKICAgICAgcmRidWYo
KS0+c3RyKHMpOwogICAgfQogIHByaXZhdGU6CiAgICBzdHJpbmdidWYgc2I7CiAgfTsKDAogIGNs
YXNzIG9zdHJpbmdzdHJlYW0gOiBwdWJsaWMgb3N0cmVhbSB7CiAgcHVibGljOgogICAgdHlwZWRl
ZiBjaGFyCWNoYXJfdHlwZTsKICAgIHR5cGVkZWYgaW50CQlpbnRfdHlwZTsKICAgIHR5cGVkZWYg
c3RyZWFtcG9zCXBvc190eXBlOwogICAgdHlwZWRlZiBzdHJlYW1vZmYJb2ZmX3R5cGU7CgogICAg
ZXhwbGljaXQKICAgIG9zdHJpbmdzdHJlYW0oaW50IHdoaWNoPWlvczo6b3V0KQogICAgICA6IG9z
dHJlYW0oJnNiKSwgc2Iod2hpY2ggfCBpb3M6Om91dCkKICAgIHsgfQoKICAgIGV4cGxpY2l0CiAg
ICBvc3RyaW5nc3RyZWFtKGNvbnN0IHN0cmluZyYgc3RyLCBpbnQgd2hpY2g9aW9zOjpvdXQpCiAg
ICAgIDogb3N0cmVhbSgmc2IpLCBzYihzdHIsIHdoaWNoIHwgaW9zOjpvdXQpCiAgICB7IH0KCiAg
ICBzdHJpbmdidWYqCiAgICByZGJ1ZigpIGNvbnN0CiAgICB7CiAgICAgIHJldHVybiBjb25zdF9j
YXN0PHN0cmluZ2J1Zio+KCZzYik7CiAgICB9CgogICAgc3RyaW5nCiAgICBzdHIoKSBjb25zdAog
ICAgewogICAgICByZXR1cm4gcmRidWYoKS0+c3RyKCk7CiAgICB9CgogICAgdm9pZCBzdHIoY29u
c3Qgc3RyaW5nJiBzKQogICAgewogICAgICByZGJ1ZigpLT5zdHIocyk7CiAgICB9CiAgcHJpdmF0
ZToKICAgIHN0cmluZ2J1ZiBzYjsKICB9OwoMCiAgY2xhc3Mgc3RyaW5nc3RyZWFtIDogcHVibGlj
IGlvc3RyZWFtIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIGNoYXIJY2hhcl90eXBlOwogICAgdHlw
ZWRlZiBpbnQJCWludF90eXBlOwogICAgdHlwZWRlZiBzdHJlYW1wb3MJcG9zX3R5cGU7CiAgICB0
eXBlZGVmIHN0cmVhbW9mZglvZmZfdHlwZTsKCiAgICBleHBsaWNpdAogICAgc3RyaW5nc3RyZWFt
KGludCB3aGljaD1pb3M6Om91dHxpb3M6OmluKQogICAgICA6IGlvc3RyZWFtKCZzYiksIHNiKHdo
aWNoKQogICAgeyB9CgogICAgZXhwbGljaXQKICAgIHN0cmluZ3N0cmVhbShjb25zdCBzdHJpbmcm
IHN0ciwgaW50IHdoaWNoPWlvczo6b3V0fGlvczo6aW4pCiAgICAgIDogaW9zdHJlYW0oJnNiKSwg
c2Ioc3RyLCB3aGljaCkKICAgIHsgfQoKICAgIHN0cmluZ2J1ZioKICAgIHJkYnVmKCkgY29uc3QK
ICAgIHsKICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8c3RyaW5nYnVmKj4oJnNiKTsKICAgIH0KCiAg
ICBzdHJpbmcKICAgIHN0cigpIGNvbnN0CiAgICB7CiAgICAgIHJldHVybiByZGJ1ZigpLT5zdHIo
KTsKICAgIH0KCiAgICB2b2lkCiAgICBzdHIoY29uc3Qgc3RyaW5nJiBzKQogICAgewogICAgICBy
ZGJ1ZigpLT5zdHIocyk7CiAgICB9CiAgcHJpdmF0ZToKICAgIHN0cmluZ2J1ZiBzYjsKICB9Owp9
OwoKCiMgNCAidF9ndGsuY3BwIiAyCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMt
c29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy92ZWN0b3IiIDEgMwog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kz
ODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxn
b2Jhc2UuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoj
IDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfcGFpci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKIAoKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBw
YWlyIHsKICB0eXBlZGVmIF9UMSBmaXJzdF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBl
OwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNlY29uZDsKICBwYWlyKCkgOiBmaXJzdChfVDEoKSksIHNl
Y29uZChfVDIoKSkge30KICBwYWlyKGNvbnN0IF9UMSYgX19hLCBjb25zdCBfVDImIF9fYikgOiBm
aXJzdChfX2EpLCBzZWNvbmQoX19iKSB7fQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xhc3Mg
X1UyPgogIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkgOiBmaXJzdChfX3AuZmlyc3Qp
LCBzZWNvbmQoX19wLnNlY29uZCkge30KCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBf
VDI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29u
c3QgcGFpcjxfVDEsIF9UMj4mIF9feSkKeyAKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJz
dCAmJiBfX3guc2Vjb25kID09IF9feS5zZWNvbmQ7IAp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBj
bGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194
LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7IAogIHJldHVybiBfX3guZmlyc3QgPCBfX3ku
Zmlyc3QgfHwgCiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29u
ZCA8IF9feS5zZWNvbmQpOyAKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxp
bmUgcGFpcjxfVDEsIF9UMj4gbWFrZV9wYWlyKGNvbnN0IF9UMSYgX194LCBjb25zdCBfVDImIF9f
eSkKewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCiAKCgoKIAogCiAKIyA0
MiAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8u
Li8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMKCgoKIyAxICIvb3B0L2dudS9s
aWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv
ZysrLTMvdHlwZV90cmFpdHMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0IF9fdHJ1ZV90eXBlIHsKfTsKCnN0cnVjdCBf
X2ZhbHNlX3R5cGUgewp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFp
dHMgeyAKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICAgdGhpc19kdW1teV9tZW1iZXJfbXVzdF9i
ZV9maXJzdDsKICAgICAgICAgICAgICAgICAgICAKCgoKCgogICAgCgoKCgoKCgoKIAoKICAgdHlw
ZWRlZiBfX2ZhbHNlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX2ZhbHNlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX2ZhbHNlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX2ZhbHNlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCiAKIAogCgoKCnRlbXBsYXRl
PD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAg
ICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
ICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
ICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlz
X1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVj
dCBfX3R5cGVfdHJhaXRzPHNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAg
ICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg
IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
ICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19Q
T0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGNo
YXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v
cGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+
ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx3Y2hhcl90PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
ICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
ICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBp
c19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8c2hvcnQ+
IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3Ry
dWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg
IGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8aW50PiB7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVj
dCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg
IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
ICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAg
ICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
ICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNf
UE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBf
X3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo
YXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg
IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg
aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAg
ICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BP
RF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGxvbmc+
IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3Ry
dWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSAgICBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8
ZmxvYXQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVu
dF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8
PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
ICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
ICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBp
c19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91
YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf
b3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgICAgaXNfUE9EX3R5cGU7Cn07CgojIDI5NSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1w
Yy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3R5cGVfdHJhaXRz
LmgiIDMKCgoKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3QgX0lzX2ludGVnZXIgewog
IHR5cGVkZWYgX19mYWxzZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0
IF9Jc19pbnRlZ2VyPGJvb2w+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsK
CgoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxzaWdu
ZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8
PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFy
X3Q+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAg
c3RydWN0IF9Jc19pbnRlZ2VyPHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdy
YWw7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcnQ+IHsK
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBf
SXNfaW50ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRl
bXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxs
b25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBz
dHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg
X0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25n
PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1
Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBfSW50ZWdyYWw7Cn07CgoKCgoKIAogCiAKIyA0NSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4
Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdv
YmFzZS5oIiAyIDMKCgoKCiMgMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlz
Mi43LzIuOTUuMy9pbmNsdWRlL2xpbWl0cy5oIiAxIDMgNAogCgoKIAoKCgoKCiAKIyAxICIvb3B0
L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvc3lzbGlt
aXRzLmgiIDEgMyA0CiAKCgoKCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29s
YXJpczIuNy8yLjk1LjMvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIAoKCiAKCiMgMTE0ICIvb3B0
L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvbGltaXRz
LmgiIDMgNAoKCgojIDEgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIAoKCgoKIAogCgog
CiAKIAoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKWxpbWl0cy5oCTEuNDgJOTgvMDcvMjAgU01JIgkK
CgoKCiAKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ludF9saW1pdHMuaCIgMSAzIDQK
IAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKWludF9saW1pdHMuaAkxLjUJOTgvMDEvMDYgU01J
IgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog
CgoKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
fQoKCgojIDMxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CgoKCgpleHRlcm4gIkMiIHsK
CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoJCQkJCSAKCgoKCgoKCgoKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgkJCQkgCgoK
CgoKCgoKCgoKCgoKCgoJCQkJCQkgCgoJCQkJCQkgCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgbG9uZwljbG9ja190OwoKCmV4dGVy
biBsb25nIF9zeXNjb25mKGludCk7CSAKCgoKCgoKCiAKCgoKCgoKCgogCgoKCiMgMzA0ICIvdXNy
L2luY2x1ZGUvbGltaXRzLmgiIDMgNAoKCgp9CgoKCiMgMTE3ICIvb3B0L2dudS9saWIvZ2NjLWxp
Yi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CgoKCgoj
IDcgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvaW5jbHVk
ZS9zeXNsaW1pdHMuaCIgMiAzIDQKCgojIDExICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBj
LXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CgoKCgoKIAoKCgogCgoK
CiAKCgoKCiAKCgoKCgogCgoKCiAKCgoKCgoKCgoKCgoKIAoKIAoKCgoKIAoKCgogCgoKCgoKCgoK
IAoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgogCgoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgoKCiMg
NDkgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKIyAxICIvb3B0L2dudS9s
aWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEg
MyA0CiMgMzQyICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4z
L2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKIyA1MSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1w
Yy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFz
ZS5oIiAyIDMKCiMgMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIu
OTUuMy9pbmNsdWRlL25ldy5oIiAxIDMgNAogCgoKCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGli
L2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvaW5jbHVkZS9uZXciIDEgMyA0CiAKIAoKCgoKI3By
YWdtYSBpbnRlcmZhY2UgIm5ldyIKIyAxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNv
bGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzQyICIvb3B0L2dudS9s
aWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMg
NAoKIyA4ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2lu
Y2x1ZGUvbmV3IiAyIDMgNAoKIyAxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFy
aXMyLjcvMi45NS4zL2luY2x1ZGUvZXhjZXB0aW9uIiAxIDMgNAogCiAKCgoKCiNwcmFnbWEgaW50
ZXJmYWNlICJleGNlcHRpb24iCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZCB7CgpjbGFz
cyBleGNlcHRpb24gewpwdWJsaWM6CiAgZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1YWwgfmV4Y2Vw
dGlvbiAoKSB7IH0KICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQgKCkgY29uc3Q7Cn07CgpjbGFz
cyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbiB7CnB1YmxpYzoKICBiYWRfZXhjZXB0
aW9uICgpIHsgfQogIHZpcnR1YWwgfmJhZF9leGNlcHRpb24gKCkgeyB9Cn07Cgp0eXBlZGVmIHZv
aWQgKCp0ZXJtaW5hdGVfaGFuZGxlcikgKCk7CnR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFu
ZGxlcikgKCk7Cgp0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRlICh0ZXJtaW5hdGVfaGFu
ZGxlcik7CnZvaWQgdGVybWluYXRlICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsK
dW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkICh1bmV4cGVjdGVkX2hhbmRsZXIpOwp2
b2lkIHVuZXhwZWN0ZWQgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwpib29sIHVu
Y2F1Z2h0X2V4Y2VwdGlvbiAoKTsKCn0gIAoKfSAgCgoKIyA5ICIvb3B0L2dudS9saWIvZ2NjLWxp
Yi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvbmV3IiAyIDMgNAoKCmV4dGVybiAi
QysrIiB7CgpuYW1lc3BhY2Ugc3RkIHsKCiAgY2xhc3MgYmFkX2FsbG9jIDogcHVibGljIGV4Y2Vw
dGlvbiB7CiAgcHVibGljOgogICAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhy
b3coKSB7IHJldHVybiAiYmFkX2FsbG9jIjsgfQogIH07CgogIHN0cnVjdCBub3Rocm93X3Qge307
CiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3dfdCBub3Rocm93OwogIHR5cGVkZWYgdm9pZCAoKm5ld19o
YW5kbGVyKSgpOwogIG5ld19oYW5kbGVyIHNldF9uZXdfaGFuZGxlciAobmV3X2hhbmRsZXIpOwoK
fSAgCgogCnZvaWQgKm9wZXJhdG9yIG5ldyAoc2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2Mp
Owp2b2lkICpvcGVyYXRvciBuZXdbXSAoc2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2
b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0
ZVtdICh2b2lkICopIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ldyAoc2l6ZV90LCBjb25zdCBz
dGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ld1tdIChzaXplX3QsIGNv
bnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGUgKHZvaWQg
KiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtd
ICh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKCiAKaW5saW5lIHZvaWQg
Km9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNl
OyB9CmlubGluZSB2b2lkICpvcGVyYXRvciBuZXdbXShzaXplX3QsIHZvaWQgKnBsYWNlKSB0aHJv
dygpIHsgcmV0dXJuIHBsYWNlOyB9Cn0gIAoKCiMgNiAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4
Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy9pbmNsdWRlL25ldy5oIiAyIDMgNAoKCnVzaW5nIHN0ZDo6
bmV3X2hhbmRsZXI7CnVzaW5nIHN0ZDo6c2V0X25ld19oYW5kbGVyOwoKCiMgNTIgIi9vcHQvZ251
L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCgoKCgogCgogCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwgY2xhc3MgX1RwPgppbmxpbmUgdm9p
ZCBfX2l0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IsIF9UcCop
IHsKICBfVHAgX190bXAgPSAqX19hOwogICpfX2EgPSAqX19iOwogICpfX2IgPSBfX3RtcDsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+CmlubGlu
ZSB2b2lkIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpIHsK
ICBfX2l0ZXJfc3dhcChfX2EsIF9fYiwgX192YWx1ZV90eXBlKCBfX2EgKSApOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikgewogIF9U
cCBfX3RtcCA9IF9fYTsKICBfX2EgPSBfX2I7CiAgX19iID0gX190bXA7Cn0KCiAKIAoKCgoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2Es
IGNvbnN0IF9UcCYgX19iKSB7CiAgcmV0dXJuIF9fYiA8IF9fYSA/IF9fYiA6IF9fYTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBj
b25zdCBfVHAmIF9fYikgewogIHJldHVybiAgX19hIDwgX19iID8gX19iIDogX19hOwp9CgoKCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtaW4o
Y29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKICByZXR1
cm4gX19jb21wKF9fYiwgX19hKSA/IF9fYiA6IF9fYTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0NvbXBhcmU+CmlubGluZSBjb25zdCBfVHAmIG1heChjb25zdCBfVHAmIF9fYSwgY29u
c3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkgewogIHJldHVybiBfX2NvbXAoX19hLCBfX2Ip
ID8gX19iIDogX19hOwp9CgogCiAKCiAKIAogCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1
dEl0ZXIgX19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yICggOyBf
X2ZpcnN0ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytfX2ZpcnN0KQogICAgKl9fcmVzdWx0ID0g
Kl9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfT3V0
cHV0SXRlcgpfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0LAogICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIHJhbmRvbV9hY2Nlc3NfaXRl
cmF0b3JfdGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yIChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0g
X19maXJzdDsgX19uID4gMDsgLS1fX24pIHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAg
KytfX2ZpcnN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1RwKgpfX2NvcHlfdHJpdmlhbChjb25zdCBfVHAqIF9f
Zmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgbWVtbW92ZShfX3Jl
c3VsdCwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJldHVy
biBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9Cb29sVHlwZT4Kc3RydWN0IF9fY29w
eV9kaXNwYXRjaCB7CiAgc3RhdGljIF9PdXRwdXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0
SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9DYXRlZ29yeTsKICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwog
ICAgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfQ2F0ZWdvcnkoKSwg
KF9EaXN0YW5jZSopIDApOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX2Nv
cHlfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CnsKICBzdGF0aWMgX1RwKiBjb3B5
KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsK
ICAgIHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2Rpc3BhdGNoPGNvbnN0IF9U
cCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9f
Zmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19j
b3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgfQp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIg
Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9UcDsKICB0eXBlZGVmIHR5cGVu
YW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgog
ICAgICAgICAgX1RyaXZpYWw7CiAgcmV0dXJuIF9fY29weV9kaXNwYXRjaDxfSW5wdXRJdGVyLCBf
T3V0cHV0SXRlciwgX1RyaXZpYWw+CiAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCk7Cn0KCiMgMjEzICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45
NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDMKCgogCiAKCnRl
bXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0
ZXIyLCAKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRl
cjIgX19jb3B5X2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f
bGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0g
X19sYXN0KQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9CaWRpcmVjdGlvbmFs
SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyIF9fY29weV9i
YWNrd2FyZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVz
dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNj
ZXNzX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7
IF9fbiA+IDA7IC0tX19uKQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9f
cmVzdWx0Owp9CgoKCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIx
LCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0Jvb2xUeXBlPgpz
dHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXIxPjo6aXRlcmF0b3JfY2F0ZWdvcnkgCiAgICAg
ICAgICBfQ2F0OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlv
bmFsSXRlcjE+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZTsKCiAgc3RhdGlj
IF9CaWRpcmVjdGlvbmFsSXRlcjIgY29weShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xh
c3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
MiBfX3Jlc3VsdCkgewogICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0LCBfQ2F0KCksIChfRGlzdGFuY2UqKSAwKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1
ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9U
cCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9f
bGFzdCAtIF9fZmlyc3Q7CiAgICBtZW1tb3ZlKF9fcmVzdWx0IC0gX051bSwgX19maXJzdCwgc2l6
ZW9mKF9UcCkgKiBfTnVtKTsKICAgIHJldHVybiBfX3Jlc3VsdCAtIF9OdW07CiAgfQp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBf
VHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBf
X2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAgcmV0dXJuICBf
X2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICAgIDo6
Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0JJMSwgY2xhc3MgX0JJMj4KaW5saW5lIF9CSTIgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3Qs
IF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVf
dHJhaXRzPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAg
ICAgICAgICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAg
ICAgICBfVHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9C
STIsIF9Ucml2aWFsPgogICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0KTsKfQoKIyAzMDMgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8y
Ljk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMwoKCiAKIAoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRl
cj4KcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4gX19jb3B5X24oX0lucHV0SXRlciBfX2Zp
cnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgZm9yICggOyBfX2NvdW50ID4gMDsgLS1fX2Nv
dW50KSB7CiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICAgICsrX19y
ZXN1bHQ7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPihfX2ZpcnN0
LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUkFJdGVyLCBjbGFzcyBfU2l6ZSwgY2xh
c3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWlyPF9SQUl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlf
bihfUkFJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgIF9PdXRwdXRJdGVyIF9f
cmVzdWx0LAogICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SQUl0ZXIg
X19sYXN0ID0gX19maXJzdCArIF9fY291bnQ7CiAgcmV0dXJuIHBhaXI8X1JBSXRlciwgX091dHB1
dEl0ZXI+KF9fbGFzdCwgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+Cmlu
bGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9TaXplIF9fY291bnQsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9f
Y29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBfX2l0
ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRl
ciwgX091dHB1dEl0ZXI+CmNvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQs
IF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fY29weV9uKF9fZmlyc3QsIF9fY291
bnQsIF9fcmVzdWx0KTsKfQoKIAogCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
c3MgX1RwPgp2b2lkIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh
c3QsIGNvbnN0IF9UcCYgX192YWx1ZSkgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr
X19maXJzdCkKICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PdXRw
dXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciBmaWxsX24oX091dHB1
dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUpIHsKICBmb3IgKCA7
IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9fdmFsdWU7CiAgcmV0
dXJuIF9fZmlyc3Q7Cn0KCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBf
SW5wdXRJdGVyMj4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1
dEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg
JiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0MikgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJz
dDI7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEs
IF9fZmlyc3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ
dGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRl
cjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVk
KSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZCgqX19maXJz
dDEsICpfX2ZpcnN0MikpIHsKICAgICsrX19maXJzdDE7CiAgICArK19fZmlyc3QyOwogIH0KICBy
ZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmlubGlu
ZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikgewogIGZvciAoIDsgX19maXJz
dDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIGlmICgqX19maXJzdDEg
IT0gKl9fZmlyc3QyKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9CaW5hcnlQ
cmVkaWNhdGU+CmlubGluZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0Jp
bmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xh
c3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2Zp
cnN0MSwgKl9fZmlyc3QyKSkKICAgICAgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9Cgog
CiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KYm9v
bCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp
cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikgewogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0
MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3Qy
KSB7CiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICByZXR1cm4gdHJ1ZTsKICAg
IGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0
dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0NvbXBhcmU+
CmJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1
dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIg
X19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0NvbXBhcmUgX19jb21wKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f
Zmlyc3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAg
IGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICByZXR1cm4gdHJ1ZTsKICAg
IGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICByZXR1cm4gZmFsc2U7CiAg
fQogIHJldHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7Cn0K
CmlubGluZSBib29sIApsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFy
KiBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciog
X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19m
aXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFz
dDIpCnsKICBjb25zdCBzaXplX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmlyc3QxOwogIGNvbnN0
IHNpemVfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CiAgY29uc3QgaW50IF9fcmVzdWx0
ID0gbWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7CiAgcmV0
dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7Cn0KCmlu
bGluZSBib29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBj
b25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikKewoKICByZXR1cm4gbGV4
aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9f
Zmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNo
YXIqKSBfX2xhc3QyKTsKCgoKCgoKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz
cyBfSW5wdXRJdGVyMj4KaW50IF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJ
dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikK
ewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsK
ICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiAtMTsKICAgIGlmICgq
X19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiAxOwogICAgKytfX2ZpcnN0MTsKICAg
ICsrX19maXJzdDI7CiAgfQogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKSB7CiAgICByZXR1cm4g
IShfX2ZpcnN0MSA9PSBfX2xhc3QxKTsKICB9CiAgZWxzZSB7CiAgICByZXR1cm4gLTE7CiAgfQp9
CgppbmxpbmUgaW50Cl9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCB1bnNpZ25l
ZCBjaGFyKiBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCnsKICBjb25zdCBwdHJkaWZmX3QgX19sZW4x
ID0gX19sYXN0MSAtIF9fZmlyc3QxOwogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjIgPSBfX2xhc3Qy
IC0gX19maXJzdDI7CiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2Zp
cnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7CiAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jl
c3VsdCAKICAgICAgICAgICAgICAgICAgICAgICA6IChfX2xlbjEgPT0gX19sZW4yID8gMCA6IChf
X2xlbjEgPCBfX2xlbjIgPyAtMSA6IDEpKTsKfQoKaW5saW5lIGludCAKX19sZXhpY29ncmFwaGlj
YWxfY29tcGFyZV8zd2F5KGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3Qx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNv
bnN0IGNoYXIqIF9fbGFzdDIpCnsKCiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVf
M3dheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIq
KSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVk
IGNoYXIqKSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBz
aWduZWQgY2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj
b25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVf
M3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIy
IF9fbGFzdDIpCnsKICByZXR1cm4gX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9fZmly
c3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7Cn0KCiAKCgoKIAogCiAKIyAzMCAiL29w
dC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3ZlY3RvciIgMiAzCgoKIyAxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2
LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2NvbnN0
cnVjdC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiAKCiAKIAoK
dGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgZGVzdHJveShfVHAqIF9fcG9pbnRlcikg
ewogIF9fcG9pbnRlci0+fl9UcCgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+
CmlubGluZSB2b2lkIGNvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKSB7CiAg
bmV3IChfX3ApIF9UMShfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMT4KaW5saW5lIHZv
aWQgY29uc3RydWN0KF9UMSogX19wKSB7CiAgbmV3IChfX3ApIF9UMSgpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQKX19kZXN0cm95X2F1eChfRm9yd2Fy
ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUp
CnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBkZXN0cm95KCYq
X19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9p
ZCBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3IsIF9fdHJ1
ZV90eXBlKSB7fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4K
aW5saW5lIHZvaWQKX19kZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJ
dGVyYXRvciBfX2xhc3QsIF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8
X1RwPjo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcgogICAgICAgICAgX1RyaXZpYWxfZGVzdHJ1Y3Rv
cjsKICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX1RyaXZpYWxfZGVzdHJ1Y3Rvcigp
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lkIGRlc3Ry
b3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkgewog
IF9fZGVzdHJveShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0K
CmlubGluZSB2b2lkIGRlc3Ryb3koY2hhciosIGNoYXIqKSB7fQppbmxpbmUgdm9pZCBkZXN0cm95
KHdjaGFyX3QqLCB3Y2hhcl90Kikge30KCiAKCgoKIAogCiAKIyAzMiAiL29wdC9nbnUvbGliL2dj
Yy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L3ZlY3RvciIgMiAzCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIu
Ny8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfdW5pbml0aWFsaXplZC5oIiAx
IDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgogCgogCiAKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRl
ciAKX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKewogIHJldHVybiBjb3B5KF9f
Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg
Y2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgCl9fdW5pbml0aWFsaXplZF9jb3B5X2F1
eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAg
X19mYWxzZV90eXBlKQp7CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7CiAgdHJ5ICB7
CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19jdXIpCiAgICAg
IGNvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7CiAgICByZXR1cm4gX19jdXI7CiAgfQogIGNh
dGNoKC4uLikgeyAgZGVzdHJveShfX3Jlc3VsdCwgX19jdXIpIDsgdGhyb3c7IH0gOwp9CgoKdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgpp
bmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf
X3Jlc3VsdCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+Ojpp
c19QT0RfdHlwZSBfSXNfUE9EOwogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX19m
aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgogIHVuaW5p
dGlhbGl6ZWRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICByZXR1cm4gX191bmlu
aXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKCBfX3Jlc3VsdCApICk7Cn0KCmlubGluZSBjaGFy
KiB1bmluaXRpYWxpemVkX2NvcHkoY29uc3QgY2hhciogX19maXJzdCwgY29uc3QgY2hhciogX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIF9fcmVzdWx0KSB7CiAg
bWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgX19sYXN0IC0gX19maXJzdCk7CiAgcmV0dXJuIF9f
cmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwp9CgppbmxpbmUgd2NoYXJfdCogCnVuaW5pdGlh
bGl6ZWRfY29weShjb25zdCB3Y2hhcl90KiBfX2ZpcnN0LCBjb25zdCB3Y2hhcl90KiBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkKewogIG1lbW1vdmUoX19yZXN1
bHQsIF9fZmlyc3QsIHNpemVvZih3Y2hhcl90KSAqIChfX2xhc3QgLSBfX2ZpcnN0KSk7CiAgcmV0
dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KcGFpcjxfSW5wdXRJ
dGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlciBfX2Zp
cnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf
X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBf
Rm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKICB0cnkgIHsKICAgIGZvciAoIDsgX19jb3Vu
dCA+IDAgOyAtLV9fY291bnQsICsrX19maXJzdCwgKytfX2N1cikgCiAgICAgIGNvbnN0cnVjdCgm
Kl9fY3VyLCAqX19maXJzdCk7CiAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0
ZXI+KF9fZmlyc3QsIF9fY3VyKTsKICB9CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fcmVzdWx0
LCBfX2N1cikgOyB0aHJvdzsgfSA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
ciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X1JhbmRvbUFj
Y2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNz
X2l0ZXJhdG9yX3RhZykgewogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBf
X2NvdW50OwogIHJldHVybiBwYWlyPF9SYW5kb21BY2Nlc3NJdGVyLCBfRm9yd2FyZEl0ZXI+KAog
ICAgICAgICAgICAgICAgIF9fbGFzdCwKICAgICAgICAgICAgICAgICB1bmluaXRpYWxpemVkX2Nv
cHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X0lucHV0
SXRlciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19m
aXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f
cmVzdWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwgX19jb3Vu
dCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9j
YXRlZ29yeSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfRm9y
d2FyZEl0ZXI+CnVuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUg
X19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7CiAg
cmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeSggX19m
aXJzdCApICk7Cn0KCiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+
CmlubGluZSB2b2lkCl9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
VHAmIF9feCwgX190cnVlX3R5cGUpCnsKICBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkCl9fdW5pbml0aWFs
aXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwg
CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQp7
CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsKICB0cnkgIHsKICAgIGZvciAoIDsgX19j
dXIgIT0gX19sYXN0OyArK19fY3VyKQogICAgICBjb25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICB9
CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fZmlyc3QsIF9fY3VyKSA7IHRocm93OyB9IDsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfVHAxPgppbmxp
bmUgdm9pZCBfX3VuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9U
cCYgX194LCBfVHAxKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHAxPjo6
aXNfUE9EX3R5cGUgX0lzX1BPRDsKICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX19maXJzdCwg
X19sYXN0LCBfX3gsIF9Jc19QT0QoKSk7CiAgICAgICAgICAgICAgICAgICAKfQoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZCB1bmluaXRpYWxpemVk
X2ZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXIgX19sYXN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IF9UcCYgX194KQp7CiAgX191bmluaXRpYWxpemVkX2ZpbGwoX19maXJzdCwgX19sYXN0LCBf
X3gsIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9f
dW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX3RydWVfdHlwZSkK
ewogIHJldHVybiBmaWxsX24oX19maXJzdCwgX19uLCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgpfRm9yd2FyZEl0ZXIKX191bmlu
aXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkKewog
IF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgdHJ5ICB7CiAgICBmb3IgKCA7IF9fbiA+
IDA7IC0tX19uLCArK19fY3VyKQogICAgICBjb25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICAgIHJl
dHVybiBfX2N1cjsKICB9CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fZmlyc3QsIF9fY3VyKSA7
IHRocm93OyB9IDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUs
IGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4KaW5saW5lIF9Gb3J3YXJkSXRlciAKX191bmluaXRpYWxp
emVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9f
eCwgX1RwMSopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwMT46OmlzX1BP
RF90eXBlIF9Jc19QT0Q7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9fZmly
c3QsIF9fbiwgX194LCBfSXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
LCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgppbmxpbmUgX0ZvcndhcmRJdGVyIAp1bmluaXRpYWxp
emVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9f
eCkKewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194LCBf
X3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9CgogCiAKCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5s
aW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9JbnB1dEl0ZXIxIF9f
Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKewogIF9Gb3J3YXJkSXRlciBfX21pZCA9
IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogIHRyeSAg
ewogICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQp
OwogIH0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3koX19yZXN1bHQsIF9fbWlkKSA7IHRocm93OyB9
IDsKfQoKIAogCiAKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFz
cyBfSW5wdXRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyIApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9j
b3B5KF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCnsKICB1bmluaXRpYWxpemVk
X2ZpbGwoX19yZXN1bHQsIF9fbWlkLCBfX3gpOwogIHRyeSAgewogICAgcmV0dXJuIHVuaW5pdGlh
bGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsKICB9CiAgY2F0Y2goLi4uKSB7ICBk
ZXN0cm95KF9fcmVzdWx0LCBfX21pZCkgOyB0aHJvdzsgfSA7Cn0KCiAKIAogCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZv
aWQKX191bmluaXRpYWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmly
c3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBfVHAmIF9feCkKewogIF9Gb3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHko
X19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsKICB0cnkgIHsKICAgIHVuaW5pdGlhbGl6ZWRf
ZmlsbChfX21pZDIsIF9fbGFzdDIsIF9feCk7CiAgfQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShf
X2ZpcnN0MiwgX19taWQyKSA7IHRocm93OyB9IDsKfQoKIAoKCgogCiAKIAojIDMzICIvb3B0L2du
dS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvdmVjdG9yIiAyIDMKCiMgMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1z
b2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF92ZWN0b3IuaCIg
MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKICAKCgoKCgoKIAogCiAKIAog
CgoKCiAKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfSXNTdGF0
aWM+CmNsYXNzIF9WZWN0b3JfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1l
IF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAg
IGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7
IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvcjsgfQoKICBfVmVjdG9yX2FsbG9jX2Jhc2UoY29uc3Qg
YWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX01fZGF0YV9hbGxvY2F0b3IoX19hKSwgX01fc3Rh
cnQoMCksIF9NX2ZpbmlzaCgwKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkgCiAge30KICAKcHJvdGVj
dGVkOgogIGFsbG9jYXRvcl90eXBlIF9NX2RhdGFfYWxsb2NhdG9yOwogIF9UcCogX01fc3RhcnQ7
CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFnZTsKCiAgX1RwKiBfTV9h
bGxvY2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3IuYWxsb2Nh
dGUoX19uKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAg
IHsgaWYgKF9fcCkgX01fZGF0YV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIF9fbik7IH0KfTsK
CiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpjbGFzcyBfVmVjdG9y
X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG9yLCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5
cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAg
ICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBj
b25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogIF9WZWN0b3JfYWxsb2NfYmFzZShj
b25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICA6IF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9N
X2VuZF9vZl9zdG9yYWdlKDApIAogIHt9CiAgCnByb3RlY3RlZDoKICBfVHAqIF9NX3N0YXJ0Owog
IF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0b3JhZ2U7CgogIHR5cGVkZWYgdHlw
ZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZSBfQWxsb2Nf
dHlwZTsKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfQWxsb2Nf
dHlwZTo6YWxsb2NhdGUoX19uKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6
ZV90IF9fbikKICAgIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX19wLCBfX24pO30KfTsKCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9WZWN0b3JfYmFzZQogIDog
cHVibGljIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4K
ewogIHR5cGVkZWYgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2Vs
ZXNzPgogICAgICAgICAgX0Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9y
X3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogIF9WZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlw
ZSYgX19hKSA6IF9CYXNlKF9fYSkge30KICBfVmVjdG9yX2Jhc2Uoc2l6ZV90IF9fbiwgY29uc3Qg
YWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHsKICAgIF9NX3N0YXJ0ID0gX01fYWxs
b2NhdGUoX19uKTsKICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0OwogICAgX01fZW5kX29mX3N0b3Jh
Z2UgPSBfTV9zdGFydCArIF9fbjsKICB9CgogIH5fVmVjdG9yX2Jhc2UoKSB7IF9NX2RlYWxsb2Nh
dGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOyB9Cn07ICAgIAoKIyAx
NTAgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfdmVjdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8IF9UcCA+ICA+CmNsYXNzIHZlY3RvciA6IHByb3Rl
Y3RlZCBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxsb2M+IAp7CnByaXZhdGU6CiAgdHlwZWRlZiBfVmVj
dG9yX2Jhc2U8X1RwLCBfQWxsb2M+IF9CYXNlOwpwdWJsaWM6CiAgdHlwZWRlZiBfVHAgdmFsdWVf
dHlwZTsKICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1
ZV90eXBlKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdmFsdWVfdHlwZSogaXRlcmF0b3I7CiAg
dHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIHZhbHVl
X3R5cGUmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVy
ZW5jZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlm
ZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBh
bGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJh
dG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgcmV2
ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCgoKCgoKCnByb3RlY3Rl
ZDoKCiAgdXNpbmcgX0Jhc2U6Ol9NX2FsbG9jYXRlOwogIHVzaW5nIF9CYXNlOjpfTV9kZWFsbG9j
YXRlOwogIHVzaW5nIF9CYXNlOjpfTV9zdGFydDsKICB1c2luZyBfQmFzZTo6X01fZmluaXNoOwog
IHVzaW5nIF9CYXNlOjpfTV9lbmRfb2Zfc3RvcmFnZTsKCgpwcm90ZWN0ZWQ6CiAgdm9pZCBfTV9p
bnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KTsKICB2b2lkIF9N
X2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbik7CgpwdWJsaWM6CiAgaXRlcmF0b3IgYmVn
aW4oKSB7IHJldHVybiBfTV9zdGFydDsgfQogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Qg
eyByZXR1cm4gX01fc3RhcnQ7IH0KICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9maW5pc2g7
IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9maW5pc2g7IH0KCiAg
cmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihl
bmQoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0CiAgICB7IHJl
dHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIHJldmVyc2VfaXRlcmF0b3Ig
cmVuZCgpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAgY29uc3Rf
cmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IoYmVnaW4oKSk7IH0KCiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdAogICAgeyByZXR1
cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBj
b25zdAogICAgeyByZXR1cm4gc2l6ZV90eXBlKC0xKSAvIHNpemVvZihfVHApOyB9CiAgc2l6ZV90
eXBlIGNhcGFjaXR5KCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlwZShfTV9lbmRfb2Zfc3Rv
cmFnZSAtIGJlZ2luKCkpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0CiAgICB7IHJldHVybiBiZWdp
bigpID09IGVuZCgpOyB9CgogIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIHsg
cmV0dXJuICooYmVnaW4oKSArIF9fbik7IH0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShz
aXplX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CgogIGV4cGxp
Y2l0IHZlY3Rvcihjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkK
ICAgIDogX0Jhc2UoX19hKSB7fQoKICB2ZWN0b3Ioc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBf
X3ZhbHVlLAogICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5
cGUoKSkgCiAgICA6IF9CYXNlKF9fbiwgX19hKQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxp
emVkX2ZpbGxfbihfTV9zdGFydCwgX19uLCBfX3ZhbHVlKTsgfQoKICBleHBsaWNpdCB2ZWN0b3Io
c2l6ZV90eXBlIF9fbikKICAgIDogX0Jhc2UoX19uLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBf
TV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19uLCBfVHAoKSk7IH0K
CiAgdmVjdG9yKGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkgCiAgICA6IF9CYXNlKF9f
eC5zaXplKCksIF9feC5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlh
bGl6ZWRfY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7IH0KCgogICAKICB0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9f
Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5
cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpIDogX0Jhc2UoX19hKSB7CiAgICB0eXBlZGVmIHR5
cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsK
ICAgIF9NX2luaXRpYWxpemVfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0K
CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01faW5pdGlhbGl6ZV9hdXgoX0lu
dGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbHVlLCBfX3RydWVfdHlwZSkgewogICAgX01fc3RhcnQg
PSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9f
bjsgCiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19uLCBf
X3ZhbHVlKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9N
X2luaXRpYWxpemVfYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgX01fcmFu
Z2VfaW5pdGlhbGl6ZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmly
c3QgKSApOwogIH0KCgoKCgoKCgogIH52ZWN0b3IoKSB7IGRlc3Ryb3koX01fc3RhcnQsIF9NX2Zp
bmlzaCk7IH0KCiAgdmVjdG9yPF9UcCwgX0FsbG9jPiYgb3BlcmF0b3I9KGNvbnN0IHZlY3Rvcjxf
VHAsIF9BbGxvYz4mIF9feCk7CiAgdm9pZCByZXNlcnZlKHNpemVfdHlwZSBfX24pIHsKICAgIGlm
IChjYXBhY2l0eSgpIDwgX19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0g
c2l6ZSgpOwogICAgICBpdGVyYXRvciBfX3RtcCA9IF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbiwg
X01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7
CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3Rh
cnQpOwogICAgICBfTV9zdGFydCA9IF9fdG1wOwogICAgICBfTV9maW5pc2ggPSBfX3RtcCArIF9f
b2xkX3NpemU7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgICB9
CiAgfQoKICAgCiAgIAogICAKICAgCgogIHZvaWQgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0
IF9UcCYgX192YWwpOwoKCiAgCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZv
aWQgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkg
ewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRl
Z3JhbCBfSW50ZWdyYWw7CiAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBf
SW50ZWdyYWwoKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9h
c3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUp
CiAgICB7IGFzc2lnbigoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IF9NX2Fzc2ln
bl9hdXgoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsg
fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fYXV4
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJz
dCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRf
aXRlcmF0b3JfdGFnKTsgCgoKCiAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2luKCk7
IH0KICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQog
IHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgY29uc3RfcmVmZXJl
bmNlIGJhY2soKSBjb25zdCB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KCiAgdm9pZCBwdXNoX2Jh
Y2soY29uc3QgX1RwJiBfX3gpIHsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3Jh
Z2UpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgX194KTsKICAgICAgKytfTV9maW5pc2g7
CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7CiAgfQogIHZv
aWQgcHVzaF9iYWNrKCkgewogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkg
ewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoKTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAg
ICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCkpOwogIH0KICB2b2lkIHN3YXAodmVjdG9y
PF9UcCwgX0FsbG9jPiYgX194KSB7CiAgICAgOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQp
OwogICAgIDo6c3dhcChfTV9maW5pc2gsIF9feC5fTV9maW5pc2gpOwogICAgIDo6c3dhcChfTV9l
bmRfb2Zfc3RvcmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICB9CgogIGl0ZXJhdG9yIGlu
c2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkgewogICAgc2l6ZV90eXBl
IF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRf
b2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAgIGNvbnN0cnVjdChfTV9m
aW5pc2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9p
bnNlcnRfYXV4KF9fcG9zaXRpb24sIF9feCk7CiAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICB9
CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgIHNpemVfdHlwZSBf
X24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29m
X3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkgewogICAgICBjb25zdHJ1Y3QoX01fZmlu
aXNoKTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9h
dXgoX19wb3NpdGlvbik7CiAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICB9CgogICAKICB0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3Ms
IF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlw
ZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50
ZWdyYWw7CiAgICBfTV9pbnNlcnRfZGlzcGF0Y2goX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX0lu
dGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01faW5z
ZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFs
LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKSB7CiAgICBpbnNlcnQoX19w
b3MsIChzaXplX3R5cGUpIF9fbiwgKF9UcCkgX192YWwpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9z
LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1
dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUp
IHsKICAgIF9NX3JhbmdlX2luc2VydChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9y
X2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKICB9CgoKCgoKICB2b2lkIGluc2VydCAoaXRlcmF0b3Ig
X19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KTsKCiAgdm9pZCBwb3BfYmFjaygp
IHsKICAgIC0tX01fZmluaXNoOwogICAgZGVzdHJveShfTV9maW5pc2gpOwogIH0KICBpdGVyYXRv
ciBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0g
ZW5kKCkpCiAgICAgIGNvcHkoX19wb3NpdGlvbiArIDEsIF9NX2ZpbmlzaCwgX19wb3NpdGlvbik7
CiAgICAtLV9NX2ZpbmlzaDsKICAgIGRlc3Ryb3koX01fZmluaXNoKTsKICAgIHJldHVybiBfX3Bv
c2l0aW9uOwogIH0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBf
X2xhc3QpIHsKICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoX19sYXN0LCBfTV9maW5pc2gsIF9fZmly
c3QpOwogICAgZGVzdHJveShfX2ksIF9NX2ZpbmlzaCk7CiAgICBfTV9maW5pc2ggPSBfTV9maW5p
c2ggLSAoX19sYXN0IC0gX19maXJzdCk7CiAgICByZXR1cm4gX19maXJzdDsKICB9CgogIHZvaWQg
cmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9feCkgewogICAgaWYgKF9f
bmV3X3NpemUgPCBzaXplKCkpIAogICAgICBlcmFzZShiZWdpbigpICsgX19uZXdfc2l6ZSwgZW5k
KCkpOwogICAgZWxzZQogICAgICBpbnNlcnQoZW5kKCksIF9fbmV3X3NpemUgLSBzaXplKCksIF9f
eCk7CiAgfQogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplKSB7IHJlc2l6ZShfX25l
d19zaXplLCBfVHAoKSk7IH0KICB2b2lkIGNsZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7
IH0KCnByb3RlY3RlZDoKCgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIGl0
ZXJhdG9yIF9NX2FsbG9jYXRlX2FuZF9jb3B5KHNpemVfdHlwZSBfX24sIF9Gb3J3YXJkSXRlcmF0
b3IgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCnsKICAgIGl0ZXJhdG9yIF9fcmVzdWx0ID0gX01f
YWxsb2NhdGUoX19uKTsKICAgIHRyeSAgewogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJz
dCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KICAgIGNh
dGNoKC4uLikgeyAgX01fZGVhbGxvY2F0ZShfX3Jlc3VsdCwgX19uKSA7IHRocm93OyB9IDsKICB9
CiMgNDQwICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3ZlY3Rvci5oIiAzCgoKCgogIHRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRl
cmF0b3IgX19maXJzdCwgIAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKICB7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0g
X19sYXN0OyArK19fZmlyc3QpCiAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAgfQoKICAgCiAg
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbml0aWFs
aXplKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogIHsKICAgIHNp
emVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOwogICAg
X01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9z
dGFydCArIF9fbjsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBf
X2xhc3QsIF9NX3N0YXJ0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K
ICB2b2lkIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9y
X3RhZyk7CgoKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJv
b2wgCm9wZXJhdG9yPT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0
b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6ZSgp
ICYmCiAgICAgICAgIGVxdWFsKF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9feS5iZWdpbigpKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCAKb3BlcmF0
b3I8KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0Fs
bG9jPiYgX195KQp7CiAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigp
LCBfX3guZW5kKCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3kuYmVnaW4o
KSwgX195LmVuZCgpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+Cmlu
bGluZSB2b2lkIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCB2ZWN0b3I8X1RwLCBfQWxs
b2M+JiBfX3kpCnsKICBfX3guc3dhcChfX3kpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4KdmVjdG9yPF9UcCxfQWxsb2M+JiAKdmVjdG9yPF9UcCxfQWxsb2M+OjpvcGVy
YXRvcj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KQp7CiAgaWYgKCZfX3ggIT0gdGhp
cykgewogICAgY29uc3Qgc2l6ZV90eXBlIF9feGxlbiA9IF9feC5zaXplKCk7CiAgICBpZiAoX194
bGVuID4gY2FwYWNpdHkoKSkgewogICAgICBpdGVyYXRvciBfX3RtcCA9IF9NX2FsbG9jYXRlX2Fu
ZF9jb3B5KF9feGxlbiwgX194LmJlZ2luKCksIF9feC5lbmQoKSk7CiAgICAgIGRlc3Ryb3koX01f
c3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9v
Zl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fdG1wOwogICAgICBfTV9l
bmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX194bGVuOwogICAgfQogICAgZWxzZSBpZiAoc2l6
ZSgpID49IF9feGxlbikgewogICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KF9feC5iZWdpbigpLCBf
X3guZW5kKCksIGJlZ2luKCkpOwogICAgICBkZXN0cm95KF9faSwgX01fZmluaXNoKTsKICAgIH0K
ICAgIGVsc2UgewogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guYmVnaW4oKSArIHNpemUoKSwg
X01fc3RhcnQpOwogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXplKCks
IF9feC5lbmQoKSwgX01fZmluaXNoKTsKICAgIH0KICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsg
X194bGVuOwogIH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+Ojphc3NpZ24oc2l6ZV90IF9fbiwgY29u
c3QgdmFsdWVfdHlwZSYgX192YWwpIHsKICBpZiAoX19uID4gY2FwYWNpdHkoKSkgewogICAgdmVj
dG9yPF9UcCwgX0FsbG9jPiBfX3RtcChfX24sIF9fdmFsLCBnZXRfYWxsb2NhdG9yKCkpOwogICAg
X190bXAuc3dhcCgqdGhpcyk7CiAgfQogIGVsc2UgaWYgKF9fbiA+IHNpemUoKSkgewogICAgZmls
bChiZWdpbigpLCBlbmQoKSwgX192YWwpOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9m
aWxsX24oX01fZmluaXNoLCBfX24gLSBzaXplKCksIF9fdmFsKTsKICB9CiAgZWxzZQogICAgZXJh
c2UoZmlsbF9uKGJlZ2luKCksIF9fbiwgX192YWwpLCBlbmQoKSk7Cn0KCgoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZCB2
ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnB1dF9pdGVyYXRvcl90YWcpIHsKICBpdGVyYXRvciBfX2N1ciA9IGJlZ2luKCk7CiAgZm9yICgg
OyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0
KQogICAgKl9fY3VyID0gKl9fZmlyc3Q7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgZXJh
c2UoX19jdXIsIGVuZCgpKTsKICBlbHNlCiAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFz
dCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlcj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgc2l6ZV90eXBlIF9f
bGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKCiAgaWYgKF9fbGVu
ID4gY2FwYWNpdHkoKSkgewogICAgaXRlcmF0b3IgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29w
eShfX2xlbiwgX19maXJzdCwgX19sYXN0KTsKICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2Zpbmlz
aCk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0
YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX2Zp
bmlzaCA9IF9NX3N0YXJ0ICsgX19sZW47CiAgfQogIGVsc2UgaWYgKHNpemUoKSA+PSBfX2xlbikg
ewogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0
YXJ0KTsKICAgIGRlc3Ryb3koX19uZXdfZmluaXNoLCBfTV9maW5pc2gpOwogICAgX01fZmluaXNo
ID0gX19uZXdfZmluaXNoOwogIH0KICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlciBfX21pZCA9IF9f
Zmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOwogICAgY29weShfX2ZpcnN0LCBfX21p
ZCwgX01fc3RhcnQpOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBf
X2xhc3QsIF9NX2ZpbmlzaCk7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvYz4Kdm9pZCAKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBf
X3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkKewogIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29m
X3N0b3JhZ2UpIHsKICAgIGNvbnN0cnVjdChfTV9maW5pc2gsICooX01fZmluaXNoIC0gMSkpOwog
ICAgKytfTV9maW5pc2g7CiAgICBfVHAgX194X2NvcHkgPSBfX3g7CiAgICBjb3B5X2JhY2t3YXJk
KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCAtIDIsIF9NX2ZpbmlzaCAtIDEpOwogICAgKl9fcG9zaXRp
b24gPSBfX3hfY29weTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6
ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/
IDIgKiBfX29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2Nh
dGUoX19sZW4pOwogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gX19uZXdfc3RhcnQ7CiAgICB0
cnkgIHsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBf
X3Bvc2l0aW9uLCBfX25ld19zdGFydCk7CiAgICAgIGNvbnN0cnVjdChfX25ld19maW5pc2gsIF9f
eCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxp
emVkX2NvcHkoX19wb3NpdGlvbiwgX01fZmluaXNoLCBfX25ld19maW5pc2gpOwogICAgfQogICAg
Y2F0Y2goLi4uKSB7ICAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCAKICAgICAg
ICAgICAgICAgICAgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydCxfX2xlbikpIDsgdGhyb3c7IH0g
OwogICAgZGVzdHJveShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0
LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19uZXdfc3Rh
cnQ7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9
IF9fbmV3X3N0YXJ0ICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+CnZvaWQgCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3Ig
X19wb3NpdGlvbikKewogIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAg
IGNvbnN0cnVjdChfTV9maW5pc2gsICooX01fZmluaXNoIC0gMSkpOwogICAgKytfTV9maW5pc2g7
CiAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9NX2ZpbmlzaCAtIDIsIF9NX2ZpbmlzaCAt
IDEpOwogICAgKl9fcG9zaXRpb24gPSBfVHAoKTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXpl
X3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9f
b2xkX3NpemUgIT0gMCA/IDIgKiBfX29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0
YXJ0ID0gX01fYWxsb2NhdGUoX19sZW4pOwogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gX19u
ZXdfc3RhcnQ7CiAgICB0cnkgIHsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9j
b3B5KF9NX3N0YXJ0LCBfX3Bvc2l0aW9uLCBfX25ld19zdGFydCk7CiAgICAgIGNvbnN0cnVjdChf
X25ld19maW5pc2gpOwogICAgICArK19fbmV3X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0g
dW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX19uZXdfZmluaXNoKTsK
ICAgIH0KICAgIGNhdGNoKC4uLikgeyAgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNo
KSwgCiAgICAgICAgICAgICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsX19sZW4pKSA7
IHRocm93OyB9IDsKICAgIGRlc3Ryb3koYmVnaW4oKSwgZW5kKCkpOwogICAgX01fZGVhbGxvY2F0
ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICBfTV9zdGFydCA9
IF9fbmV3X3N0YXJ0OwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOwogICAgX01fZW5kX29m
X3N0b3JhZ2UgPSBfX25ld19zdGFydCArIF9fbGVuOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FsbG9jPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Omluc2VydChpdGVyYXRv
ciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX1RwJiBfX3gpCnsKICBpZiAoX19uICE9IDApIHsKICAgIGlmIChzaXplX3R5
cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9maW5pc2gpID49IF9fbikgewogICAgICBfVHAgX194
X2NvcHkgPSBfX3g7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVyID0gX01fZmlu
aXNoIC0gX19wb3NpdGlvbjsKICAgICAgaXRlcmF0b3IgX19vbGRfZmluaXNoID0gX01fZmluaXNo
OwogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikgewogICAgICAgIHVuaW5pdGlhbGl6ZWRf
Y29weShfTV9maW5pc2ggLSBfX24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9m
aW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmlu
aXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19wb3Np
dGlvbiArIF9fbiwgX194X2NvcHkpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHVuaW5p
dGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gX19lbGVtc19hZnRlciwgX194X2NvcHkp
OwogICAgICAgIF9NX2ZpbmlzaCArPSBfX24gLSBfX2VsZW1zX2FmdGVyOwogICAgICAgIHVuaW5p
dGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAg
ICAgX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBf
X29sZF9maW5pc2gsIF9feF9jb3B5KTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIGNv
bnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOyAgICAgICAgCiAgICAgIGNvbnN0IHNp
emVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsKICAgICAg
aXRlcmF0b3IgX19uZXdfc3RhcnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7CiAgICAgIGl0ZXJhdG9y
IF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0OwogICAgICB0cnkgIHsKICAgICAgICBfX25ld19m
aW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX01fc3RhcnQsIF9fcG9zaXRpb24sIF9fbmV3X3N0
YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfX25ld19m
aW5pc2gsIF9fbiwgX194KTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAgICAgID0gdW5pbml0
aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX19uZXdfZmluaXNoKTsKICAgICAg
fQogICAgICBjYXRjaCguLi4pIHsgIChkZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCks
IAogICAgICAgICAgICAgICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsX19sZW4pKSA7
IHRocm93OyB9IDsKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01f
ZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAg
IF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsK
ICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydCArIF9fbGVuOwogICAgfQogIH0K
fQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4Kdm9pZCAKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0
KGl0ZXJhdG9yIF9fcG9zLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg
KytfX2ZpcnN0KSB7CiAgICBfX3BvcyA9IGluc2VydChfX3BvcywgKl9fZmlyc3QpOwogICAgKytf
X3BvczsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CnZvaWQgCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3Jh
bmdlX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewogIGlmIChfX2Zp
cnN0ICE9IF9fbGFzdCkgewogICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICBkaXN0YW5jZShfX2Zp
cnN0LCBfX2xhc3QsIF9fbik7CiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0g
X01fZmluaXNoKSA+PSBfX24pIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIg
PSBfTV9maW5pc2ggLSBfX3Bvc2l0aW9uOwogICAgICBpdGVyYXRvciBfX29sZF9maW5pc2ggPSBf
TV9maW5pc2g7CiAgICAgIGlmIChfX2VsZW1zX2FmdGVyID4gX19uKSB7CiAgICAgICAgdW5pbml0
aWFsaXplZF9jb3B5KF9NX2ZpbmlzaCAtIF9fbiwgX01fZmluaXNoLCBfTV9maW5pc2gpOwogICAg
ICAgIF9NX2ZpbmlzaCArPSBfX247CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBf
X29sZF9maW5pc2ggLSBfX24sIF9fb2xkX2ZpbmlzaCk7CiAgICAgICAgY29weShfX2ZpcnN0LCBf
X2xhc3QsIF9fcG9zaXRpb24pOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJk
SXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWQsIF9fZWxlbXNf
YWZ0ZXIpOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX21pZCwgX19sYXN0LCBfTV9maW5p
c2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX24gLSBfX2VsZW1zX2FmdGVyOwogICAgICAgIHVu
aW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7CiAg
ICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgY29weShfX2ZpcnN0LCBf
X21pZCwgX19wb3NpdGlvbik7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICBjb25zdCBz
aXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVu
ID0gX19vbGRfc2l6ZSArIG1heChfX29sZF9zaXplLCBfX24pOwogICAgICBpdGVyYXRvciBfX25l
d19zdGFydCA9IF9NX2FsbG9jYXRlKF9fbGVuKTsKICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNo
ID0gX19uZXdfc3RhcnQ7CiAgICAgIHRyeSAgewogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5p
dGlhbGl6ZWRfY29weShfTV9zdGFydCwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAg
IF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbmV3
X2ZpbmlzaCk7CiAgICAgICAgX19uZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5pdGlhbGl6ZWRf
Y29weShfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9fbmV3X2ZpbmlzaCk7CiAgICAgIH0KICAgICAg
Y2F0Y2goLi4uKSB7ICAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCAKICAgICAg
ICAgICAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LF9fbGVuKSkgOyB0aHJvdzsg
fSA7CiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2Nh
dGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFy
dCA9IF9fbmV3X3N0YXJ0OwogICAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICAgIF9N
X2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsKICAgIH0KICB9Cn0KCiMgODEw
ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4u
Ly4uL2luY2x1ZGUvZysrLTMvc3RsX3ZlY3Rvci5oIiAzCgoKCgoKCgogIAoKCgogCiAKIAojIDM0
ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4u
Ly4uL2luY2x1ZGUvZysrLTMvdmVjdG9yIiAyIDMKCiMgMSAiL29wdC9nbnUvbGliL2djYy1saWIv
aTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9i
dmVjdG9yLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAgCgpzdGF0
aWMgY29uc3QgaW50IF9fV09SRF9CSVQgPSBpbnQoOCAqc2l6ZW9mKHVuc2lnbmVkIGludCkpOwoK
CgoKCgpzdHJ1Y3QgX0JpdF9yZWZlcmVuY2UgewogIHVuc2lnbmVkIGludCogX01fcDsKICB1bnNp
Z25lZCBpbnQgX01fbWFzazsKICBfQml0X3JlZmVyZW5jZSh1bnNpZ25lZCBpbnQqIF9feCwgdW5z
aWduZWQgaW50IF9feSkgCiAgICA6IF9NX3AoX194KSwgX01fbWFzayhfX3kpIHt9CgpwdWJsaWM6
CiAgX0JpdF9yZWZlcmVuY2UoKSA6IF9NX3AoMCksIF9NX21hc2soMCkge30KICBvcGVyYXRvciBi
b29sKCkgY29uc3QgeyByZXR1cm4gISghKCpfTV9wICYgX01fbWFzaykpOyB9CiAgX0JpdF9yZWZl
cmVuY2UmIG9wZXJhdG9yPShib29sIF9feCkKICB7CiAgICBpZiAoX194KSAgKl9NX3AgfD0gX01f
bWFzazsKICAgIGVsc2UgICAgICAqX01fcCAmPSB+X01fbWFzazsKICAgIHJldHVybiAqdGhpczsK
ICB9CiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShjb25zdCBfQml0X3JlZmVyZW5jZSYgX194
KSAKICAgIHsgcmV0dXJuICp0aGlzID0gYm9vbChfX3gpOyB9CiAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBib29sKCp0aGlzKSA9
PSBib29sKF9feCk7IH0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0X3JlZmVyZW5jZSYgX194
KSBjb25zdCB7CiAgICByZXR1cm4gIWJvb2woKnRoaXMpICYmIGJvb2woX194KTsKICB9CiAgdm9p
ZCBmbGlwKCkgeyAqX01fcCBePSBfTV9tYXNrOyB9Cn07CgppbmxpbmUgdm9pZCBzd2FwKF9CaXRf
cmVmZXJlbmNlIF9feCwgX0JpdF9yZWZlcmVuY2UgX195KQp7CiAgYm9vbCBfX3RtcCA9IF9feDsK
ICBfX3ggPSBfX3k7CiAgX195ID0gX190bXA7Cn0KCnN0cnVjdCBfQml0X2l0ZXJhdG9yIDogcHVi
bGljIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3I8Ym9vbCwgcHRyZGlmZl90PiB7CiAgdHlwZWRlZiBf
Qml0X3JlZmVyZW5jZSAgcmVmZXJlbmNlOwogIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UqIHBvaW50
ZXI7CiAgdHlwZWRlZiBfQml0X2l0ZXJhdG9yICAgaXRlcmF0b3I7CgogIHVuc2lnbmVkIGludCog
X01fcDsKICB1bnNpZ25lZCBpbnQgX01fb2Zmc2V0OwogIHZvaWQgYnVtcF91cCgpIHsKICAgIGlm
IChfTV9vZmZzZXQrKyA9PSBfX1dPUkRfQklUIC0gMSkgewogICAgICBfTV9vZmZzZXQgPSAwOwog
ICAgICArK19NX3A7CiAgICB9CiAgfQogIHZvaWQgYnVtcF9kb3duKCkgewogICAgaWYgKF9NX29m
ZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0ID0gX19XT1JEX0JJVCAtIDE7CiAgICAgIC0t
X01fcDsKICAgIH0KICB9CgogIF9CaXRfaXRlcmF0b3IoKSA6IF9NX3AoMCksIF9NX29mZnNldCgw
KSB7fQogIF9CaXRfaXRlcmF0b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kp
IAogICAgOiBfTV9wKF9feCksIF9NX29mZnNldChfX3kpIHt9CiAgcmVmZXJlbmNlIG9wZXJhdG9y
KigpIGNvbnN0IHsgcmV0dXJuIHJlZmVyZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQpOyB9CiAg
aXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CiAgICBidW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7
CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0
aGlzOwogICAgYnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3Bl
cmF0b3ItLSgpIHsKICAgIGJ1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVy
YXRvciBvcGVyYXRvci0tKGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIGJ1
bXBfZG93bigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3IrPShk
aWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19pICsgX01f
b2Zmc2V0OwogICAgX01fcCArPSBfX24gLyBfX1dPUkRfQklUOwogICAgX19uID0gX19uICUgX19X
T1JEX0JJVDsKICAgIGlmIChfX24gPCAwKSB7CiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBp
bnQpIF9fbiArIF9fV09SRF9CSVQ7CiAgICAgIC0tX01fcDsKICAgIH0gZWxzZQogICAgICBfTV9v
ZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJh
dG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0aGlzICs9IC1fX2k7
CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5
cGUgX19pKSBjb25zdCB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9f
dG1wICs9IF9faTsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kp
IGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0g
X19pOwogIH0KICBkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3ItKGl0ZXJhdG9yIF9feCkgY29uc3Qg
ewogICAgcmV0dXJuIF9fV09SRF9CSVQgKiAoX01fcCAtIF9feC5fTV9wKSArIF9NX29mZnNldCAt
IF9feC5fTV9vZmZzZXQ7CiAgfQogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlw
ZSBfX2kpIHsgcmV0dXJuICooKnRoaXMgKyBfX2kpOyB9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IGl0ZXJhdG9yJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wID09IF9feC5fTV9wICYmIF9N
X29mZnNldCA9PSBfX3guX01fb2Zmc2V0OwogIH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRl
cmF0b3ImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgIT0gX194Ll9NX3AgfHwgX01fb2Zm
c2V0ICE9IF9feC5fTV9vZmZzZXQ7CiAgfQogIGJvb2wgb3BlcmF0b3I8KGl0ZXJhdG9yIF9feCkg
Y29uc3QgewogICAgcmV0dXJuIF9NX3AgPCBfX3guX01fcCB8fCAoX01fcCA9PSBfX3guX01fcCAm
JiBfTV9vZmZzZXQgPCBfX3guX01fb2Zmc2V0KTsKICB9Cn07CgpzdHJ1Y3QgX0JpdF9jb25zdF9p
dGVyYXRvcgogIDogcHVibGljIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3I8Ym9vbCwgcHRyZGlmZl90
Pgp7CiAgdHlwZWRlZiBib29sICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CiAgdHlwZWRlZiBi
b29sICAgICAgICAgICAgICAgICBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBib29s
KiAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciAgY29uc3Rf
aXRlcmF0b3I7CgogIHVuc2lnbmVkIGludCogX01fcDsKICB1bnNpZ25lZCBpbnQgX01fb2Zmc2V0
OwogIHZvaWQgYnVtcF91cCgpIHsKICAgIGlmIChfTV9vZmZzZXQrKyA9PSBfX1dPUkRfQklUIC0g
MSkgewogICAgICBfTV9vZmZzZXQgPSAwOwogICAgICArK19NX3A7CiAgICB9CiAgfQogIHZvaWQg
YnVtcF9kb3duKCkgewogICAgaWYgKF9NX29mZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0
ID0gX19XT1JEX0JJVCAtIDE7CiAgICAgIC0tX01fcDsKICAgIH0KICB9CgogIF9CaXRfY29uc3Rf
aXRlcmF0b3IoKSA6IF9NX3AoMCksIF9NX29mZnNldCgwKSB7fQogIF9CaXRfY29uc3RfaXRlcmF0
b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpIAogICAgOiBfTV9wKF9feCks
IF9NX29mZnNldChfX3kpIHt9CiAgX0JpdF9jb25zdF9pdGVyYXRvcihjb25zdCBfQml0X2l0ZXJh
dG9yJiBfX3gpIAogICAgOiBfTV9wKF9feC5fTV9wKSwgX01fb2Zmc2V0KF9feC5fTV9vZmZzZXQp
IHt9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIHJldHVybiBfQml0
X3JlZmVyZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQpOwogIH0KICBjb25zdF9pdGVyYXRvciYg
b3BlcmF0b3IrKygpIHsKICAgIGJ1bXBfdXAoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29u
c3RfaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0g
KnRoaXM7CiAgICBidW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGNvbnN0X2l0ZXJh
dG9yJiBvcGVyYXRvci0tKCkgewogICAgYnVtcF9kb3duKCk7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBjb25zdF9pdGVyYXRvciBf
X3RtcCA9ICp0aGlzOwogICAgYnVtcF9kb3duKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGNv
bnN0X2l0ZXJhdG9yJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIGRpZmZl
cmVuY2VfdHlwZSBfX24gPSBfX2kgKyBfTV9vZmZzZXQ7CiAgICBfTV9wICs9IF9fbiAvIF9fV09S
RF9CSVQ7CiAgICBfX24gPSBfX24gJSBfX1dPUkRfQklUOwogICAgaWYgKF9fbiA8IDApIHsKICAg
ICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgX19uICsgX19XT1JEX0JJVDsKICAgICAgLS1f
TV9wOwogICAgfSBlbHNlCiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbjsKICAg
IHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5j
ZV90eXBlIF9faSkgewogICAgKnRoaXMgKz0gLV9faTsKICAgIHJldHVybiAqdGhpczsKICB9CiAg
Y29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAg
IGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgKz0gX19pOwog
IH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3Qg
ewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCAtPSBf
X2k7CiAgfQogIGRpZmZlcmVuY2VfdHlwZSBvcGVyYXRvci0oY29uc3RfaXRlcmF0b3IgX194KSBj
b25zdCB7CiAgICByZXR1cm4gX19XT1JEX0JJVCAqIChfTV9wIC0gX194Ll9NX3ApICsgX01fb2Zm
c2V0IC0gX194Ll9NX29mZnNldDsKICB9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlm
ZmVyZW5jZV90eXBlIF9faSkgeyAKICAgIHJldHVybiAqKCp0aGlzICsgX19pKTsgCiAgfQogIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBjb25zdF9pdGVyYXRvciYgX194KSBjb25zdCB7CiAgICByZXR1
cm4gX01fcCA9PSBfX3guX01fcCAmJiBfTV9vZmZzZXQgPT0gX194Ll9NX29mZnNldDsKICB9CiAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX3gpIGNvbnN0IHsKICAgIHJl
dHVybiBfTV9wICE9IF9feC5fTV9wIHx8IF9NX29mZnNldCAhPSBfX3guX01fb2Zmc2V0OwogIH0K
ICBib29sIG9wZXJhdG9yPChjb25zdF9pdGVyYXRvciBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBf
TV9wIDwgX194Ll9NX3AgfHwgKF9NX3AgPT0gX194Ll9NX3AgJiYgX01fb2Zmc2V0IDwgX194Ll9N
X29mZnNldCk7CiAgfQp9OwoKIAogCgoKCiAKdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3IsIGJv
b2wgX19pc19zdGF0aWM+CmNsYXNzIF9CdmVjdG9yX2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3Jf
dHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9j
YXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9CgogIF9CdmVjdG9yX2Fs
bG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX01fZGF0YV9hbGxvY2F0
b3IoX19hKSwgX01fc3RhcnQoKSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIHt9
Cgpwcm90ZWN0ZWQ6CiAgdW5zaWduZWQgaW50KiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikgCiAg
ICB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZSgoX19uICsgX19XT1JEX0JJVCAt
IDEpL19fV09SRF9CSVQpOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKCkgewogICAgaWYgKF9NX3N0
YXJ0Ll9NX3ApCiAgICAgIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX01fc3RhcnQuX01f
cCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2Ug
LSBfTV9zdGFydC5fTV9wKTsKICB9ICAKCiAgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czx1bnNpZ25l
ZCBpbnQsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZSAKICAgICAgICAgIF9NX2RhdGFfYWxs
b2NhdG9yOwogIF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5p
c2g7CiAgdW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFnZTsKfTsKCiAKdGVtcGxhdGUgPGNs
YXNzIF9BbGxvY2F0b3I+CmNsYXNzIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jYXRvciwgdHJ1
ZT4gewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxv
Y2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2Nh
dG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7
IH0KCiAgX0J2ZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICA6IF9N
X3N0YXJ0KCksIF9NX2ZpbmlzaCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7fQoKcHJvdGVjdGVk
OgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czx1bnNpZ25lZCBpbnQsIF9BbGxvY2F0
b3I+OjpfQWxsb2NfdHlwZQogICAgICAgICAgX0FsbG9jX3R5cGU7CiAgICAgICAgICAKICB1bnNp
Z25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKSAKICAgIHsgcmV0dXJuIF9BbGxvY190
eXBlOjphbGxvY2F0ZSgoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQpOyB9CiAgdm9p
ZCBfTV9kZWFsbG9jYXRlKCkgewogICAgaWYgKF9NX3N0YXJ0Ll9NX3ApCiAgICAgIF9BbGxvY190
eXBlOjpkZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQuX01fcCk7CiAgfSAgCgogIF9CaXRfaXRl
cmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgdW5zaWduZWQgaW50
KiBfTV9lbmRfb2Zfc3RvcmFnZTsKfTsgIAoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xhc3Mg
X0J2ZWN0b3JfYmFzZQogIDogcHVibGljIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2M+Ojpf
U19pbnN0YW5jZWxlc3M+CnsKICB0eXBlZGVmIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvYz46
Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBl
bmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogIF9CdmVjdG9yX2Jh
c2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9CiAgfl9CdmVjdG9y
X2Jhc2UoKSB7IF9CYXNlOjpfTV9kZWFsbG9jYXRlKCk7IH0KfTsKCiMgMzQ4ICIvb3B0L2dudS9s
aWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv
ZysrLTMvc3RsX2J2ZWN0b3IuaCIgMwoKCiAKIAogCiAKCgoKCgoKCgoKCiAgICAgICAgCgogICAg
ICAgIAp0ZW1wbGF0ZTxjbGFzcyBfQWxsb2M+IGNsYXNzIHZlY3Rvcjxib29sLF9BbGxvYz4KICA6
IHB1YmxpYyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4KCgoKCnsKCiAgdHlwZWRlZiBfQnZlY3Rvcl9i
YXNlPF9BbGxvYz4gX0Jhc2U7CgoKCnB1YmxpYzoKICB0eXBlZGVmIGJvb2wgdmFsdWVfdHlwZTsK
ICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5j
ZV90eXBlOyAKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIGJv
b2wgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UqIHBvaW50ZXI7CiAg
dHlwZWRlZiBjb25zdCBib29sKiBjb25zdF9wb2ludGVyOwoKICB0eXBlZGVmIF9CaXRfaXRlcmF0
b3IgICAgICAgICAgICAgICAgaXRlcmF0b3I7CiAgdHlwZWRlZiBfQml0X2NvbnN0X2l0ZXJhdG9y
ICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOwoKCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNv
bnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgcmV2ZXJzZV9p
dGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCgoKCgoKCiAgdHlwZWRlZiB0eXBl
bmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5
cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7
IH0KCnByb3RlY3RlZDoKCgoKCgoKCgpwcm90ZWN0ZWQ6CiAgdm9pZCBfTV9pbml0aWFsaXplKHNp
emVfdHlwZSBfX24pIHsKICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbik7
CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19X
T1JEX0JJVDsKICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgIF9NX2ZpbmlzaCA9
IF9NX3N0YXJ0ICsgZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgfQogIHZvaWQgX01faW5zZXJ0X2F1
eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCkgewogICAgaWYgKF9NX2ZpbmlzaC5fTV9w
ICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwg
X01fZmluaXNoLCBfTV9maW5pc2ggKyAxKTsKICAgICAgKl9fcG9zaXRpb24gPSBfX3g7CiAgICAg
ICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZSB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNp
emUoKSA/IDIgKiBzaXplKCkgOiBfX1dPUkRfQklUOwogICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9
IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwg
X19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICpfX2krKyA9IF9feDsKICAgICAg
X01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsKICAgICAgX01fZGVhbGxv
Y2F0ZSgpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9fV09SRF9C
SVQgLSAxKS9fX1dPUkRfQklUOwogICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAg
ICB9CiAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5p
dGlhbGl6ZV9yYW5nZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAg
X01fc3RhcnQgPSBpdGVyYXRvcigpOwogICAgX01fZmluaXNoID0gaXRlcmF0b3IoKTsKICAgIF9N
X2VuZF9vZl9zdG9yYWdlID0gMDsKICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m
aXJzdCkgCiAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0ZvcndhcmRJdGVy
YXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwog
ICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOwogICAgX01faW5pdGlhbGl6ZShfX24p
OwogICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsKICB9CgogIHRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2VydF9yYW5nZShpdGVyYXRvciBfX3Bv
cywKICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFn
KSB7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIHsKICAgICAgX19w
b3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICAgKytfX3BvczsKICAgIH0KICB9Cgog
IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01faW5zZXJ0X3Jhbmdl
KGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy
YXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7
CiAgICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3Qs
IF9fbik7CiAgICAgIGlmIChjYXBhY2l0eSgpIC0gc2l6ZSgpID49IF9fbikgewogICAgICAgIGNv
cHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5kKCksIF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlw
ZShfX24pKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7CiAgICAg
ICAgX01fZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICB9CiAgICAgIGVsc2Ug
ewogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9fbik7CiAg
ICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAgIGl0
ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7
CiAgICAgICAgX19pID0gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9faSk7CiAgICAgICAgX01fZmlu
aXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsKICAgICAgICBfTV9kZWFsbG9jYXRl
KCk7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfX1dPUkRfQklU
IC0gMSkvX19XT1JEX0JJVDsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAg
ICAgIH0KICAgIH0KICB9ICAgICAgCgoKCnB1YmxpYzoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0
dXJuIF9NX3N0YXJ0OyB9CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBf
TV9zdGFydDsgfQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQogIGNvbnN0
X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQoKICByZXZlcnNlX2l0
ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgY29u
c3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7IAogICAgcmV0dXJuIGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IoZW5kKCkpOyAKICB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyBy
ZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0
b3IgcmVuZCgpIGNvbnN0IHsgCiAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdp
bigpKTsgCiAgfQoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZShl
bmQoKSAtIGJlZ2luKCkpOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4g
c2l6ZV90eXBlKC0xKTsgfQogIHNpemVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0IHsKICAgIHJldHVy
biBzaXplX3R5cGUoY29uc3RfaXRlcmF0b3IoX01fZW5kX29mX3N0b3JhZ2UsIDApIC0gYmVnaW4o
KSk7CiAgfQogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBiZWdpbigpID09IGVuZCgpOyB9
CiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgewogICAgcmV0dXJuICooYmVn
aW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICB9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJh
dG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QgewogICAgcmV0dXJuICooYmVnaW4oKSArIGRpZmZl
cmVuY2VfdHlwZShfX24pKTsKICB9CgogIGV4cGxpY2l0IHZlY3RvciAoY29uc3QgYWxsb2NhdG9y
X3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkge30KCiAgdmVj
dG9yIChzaXplX3R5cGUgX19uLCBib29sIF9fdmFsdWUsCiAgICAgICAgICAgIGNvbnN0IGFsbG9j
YXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpCiAgewog
ICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zf
c3RvcmFnZSwgX192YWx1ZSA/IH4wIDogMCk7CiAgfQoKICBleHBsaWNpdCB2ZWN0b3IgKHNpemVf
dHlwZSBfX24pCiAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpCiAgewogICAgX01faW5pdGlh
bGl6ZShfX24pOwogICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgMCk7
CiAgfQoKICB2ZWN0b3IgKGNvbnN0IHZlY3RvciAmIF9feCkgOiBfQmFzZShfX3guZ2V0X2FsbG9j
YXRvcigpKSB7CiAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOwogICAgY29weShfX3guYmVn
aW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7CiAgfQoKCiAgIAogIHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4KICB2ZWN0b3IgKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFs
bG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkKICB7CiAgICB0eXBlZGVmIHR5cGVuYW1l
IF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9N
X2luaXRpYWxpemVfZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQog
ICAgCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01faW5pdGlhbGl6ZV9kaXNw
YXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwgX190cnVlX3R5cGUpIHsKICAgIF9NX2lu
aXRpYWxpemUoX19uKTsKICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2Us
IF9feCA/IH4wIDogMCk7CiAgfQogICAgCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
PgogIHZvaWQgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFs
c2VfdHlwZSkgewogICAgX01faW5pdGlhbGl6ZV9yYW5nZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRl
cmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOwogIH0KIyA1ODcgIi9vcHQvZ251L2xpYi9nY2Mt
bGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9z
dGxfYnZlY3Rvci5oIiAzCgoKICB+dmVjdG9yICgpIHsgfQoKICB2ZWN0b3IgJiBvcGVyYXRvcj0o
Y29uc3QgdmVjdG9yICYgX194KSB7CiAgICBpZiAoJl9feCA9PSB0aGlzKSByZXR1cm4gKnRoaXM7
CiAgICBpZiAoX194LnNpemUoKSA+IGNhcGFjaXR5KCkpIHsKICAgICAgX01fZGVhbGxvY2F0ZSgp
OwogICAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOwogICAgfQogICAgY29weShfX3guYmVn
aW4oKSwgX194LmVuZCgpLCBiZWdpbigpKTsKICAgIF9NX2ZpbmlzaCA9IGJlZ2luKCkgKyBkaWZm
ZXJlbmNlX3R5cGUoX194LnNpemUoKSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICAgCiAgIAog
ICAKICAgCgogIHZvaWQgYXNzaWduKHNpemVfdCBfX24sIGJvb2wgX194KSB7CiAgICBpZiAoX19u
ID4gc2l6ZSgpKSB7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2Us
IF9feCA/IH4wIDogMCk7CiAgICAgIGluc2VydChlbmQoKSwgX19uIC0gc2l6ZSgpLCBfX3gpOwog
ICAgfQogICAgZWxzZSB7CiAgICAgIGVyYXNlKGJlZ2luKCkgKyBfX24sIGVuZCgpKTsKICAgICAg
ZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAg
IH0KICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgYXNzaWdu
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlw
ZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50
ZWdyYWw7CiAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwo
KSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9hc3NpZ25fZGlz
cGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICB7IGFz
c2lnbigoc2l6ZV90KSBfX24sIChib29sKSBfX3ZhbCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXI+CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgeyBfTV9hc3NpZ25fYXV4KF9fZmly
c3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7IH0KCiAgdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVy
YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
IGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgaXRlcmF0b3IgX19jdXIgPSBiZWdpbigpOwogICAg
Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytf
X2ZpcnN0KQogICAgICAqX19jdXIgPSAqX19maXJzdDsKICAgIGlmIChfX2ZpcnN0ID09IF9fbGFz
dCkKICAgICAgZXJhc2UoX19jdXIsIGVuZCgpKTsKICAgIGVsc2UKICAgICAgaW5zZXJ0KGVuZCgp
LCBfX2ZpcnN0LCBfX2xhc3QpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0
b3I+CiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zvcndh
cmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3Jf
dGFnKSB7CiAgICBzaXplX3R5cGUgX19sZW4gPSAwOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19s
YXN0LCBfX2xlbik7CiAgICBpZiAoX19sZW4gPCBzaXplKCkpCiAgICAgIGVyYXNlKGNvcHkoX19m
aXJzdCwgX19sYXN0LCBiZWdpbigpKSwgZW5kKCkpOwogICAgZWxzZSB7CiAgICAgIF9Gb3J3YXJk
SXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOwog
ICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBiZWdpbigpKTsKICAgICAgaW5zZXJ0KGVuZCgpLCBf
X21pZCwgX19sYXN0KTsKICAgIH0KICB9ICAgIAoKCgogIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUg
X19uKSB7CiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICB1bnNpZ25lZCBpbnQqIF9f
cSA9IF9NX2JpdF9hbGxvYyhfX24pOwogICAgICBfTV9maW5pc2ggPSBjb3B5KGJlZ2luKCksIGVu
ZCgpLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICBfTV9z
dGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsg
KF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgfQogIH0KCiAgcmVmZXJlbmNl
IGZyb250KCkgeyByZXR1cm4gKmJlZ2luKCk7IH0KICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBj
b25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQogIHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKihl
bmQoKSAtIDEpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJldHVybiAqKGVu
ZCgpIC0gMSk7IH0KICB2b2lkIHB1c2hfYmFjayhib29sIF9feCkgewogICAgaWYgKF9NX2Zpbmlz
aC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlKQogICAgICAqX01fZmluaXNoKysgPSBfX3g7CiAg
ICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7CiAgfQogIHZvaWQgc3dhcCh2
ZWN0b3IgJiBfX3gpIHsKICAgICA6OnN3YXAoX01fc3RhcnQsIF9feC5fTV9zdGFydCk7CiAgICAg
Ojpzd2FwKF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7CiAgICAgOjpzd2FwKF9NX2VuZF9vZl9z
dG9yYWdlLCBfX3guX01fZW5kX29mX3N0b3JhZ2UpOwogIH0KICBpdGVyYXRvciBpbnNlcnQoaXRl
cmF0b3IgX19wb3NpdGlvbiwgYm9vbCBfX3ggPSBib29sKCkpIHsKICAgIGRpZmZlcmVuY2VfdHlw
ZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBf
TV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKQogICAgICAqX01fZmluaXNo
KysgPSBfX3g7CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoX19wb3NpdGlvbiwgX194KTsK
ICAgIHJldHVybiBiZWdpbigpICsgX19uOwogIH0KCgogICAKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAg
ICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAg
IHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwg
X0ludGVncmFsOwogICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zaXRpb24sIF9fZmlyc3QsIF9f
bGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZv
aWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdlciBfX24sIF9JbnRl
Z2VyIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkgewogICAgaW5z
ZXJ0KF9fcG9zLCAoc2l6ZV90eXBlKSBfX24sIChib29sKSBfX3gpOwogIH0KCiAgdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9y
IF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs
IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNl
X3R5cGUpIHsKICAgIF9NX2luc2VydF9yYW5nZShfX3BvcywgX19maXJzdCwgX19sYXN0LCBfX2l0
ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKICB9CiMgNzYxICIvb3B0L2dudS9saWIvZ2Nj
LWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
c3RsX2J2ZWN0b3IuaCIgMwoKICAKICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBz
aXplX3R5cGUgX19uLCBib29sIF9feCkgewogICAgaWYgKF9fbiA9PSAwKSByZXR1cm47CiAgICBp
ZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24pIHsKICAgICAgY29weV9iYWNrd2FyZChfX3Bv
c2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICBm
aWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBkaWZmZXJlbmNlX3R5cGUoX19uKSwgX194KTsK
ICAgICAgX01fZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgfQogICAgZWxzZSB7
CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9fbik7CiAgICAg
IHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgaXRlcmF0b3Ig
X19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAg
ZmlsbF9uKF9faSwgX19uLCBfX3gpOwogICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24s
IGVuZCgpLCBfX2kgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgIF9NX2RlYWxsb2NhdGUo
KTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfX1dPUkRfQklUIC0g
MSkvX19XT1JEX0JJVDsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgfQog
IH0KCiAgdm9pZCBwb3BfYmFjaygpIHsgLS1fTV9maW5pc2g7IH0KICBpdGVyYXRvciBlcmFzZShp
dGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0gZW5kKCkpCiAg
ICAgIGNvcHkoX19wb3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bvc2l0aW9uKTsKICAgICAgLS1fTV9m
aW5pc2g7CiAgICByZXR1cm4gX19wb3NpdGlvbjsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0
b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICBfTV9maW5pc2ggPSBjb3B5KF9fbGFz
dCwgZW5kKCksIF9fZmlyc3QpOwogICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQogIHZvaWQgcmVzaXpl
KHNpemVfdHlwZSBfX25ld19zaXplLCBib29sIF9feCA9IGJvb2woKSkgewogICAgaWYgKF9fbmV3
X3NpemUgPCBzaXplKCkpIAogICAgICBlcmFzZShiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9f
bmV3X3NpemUpLCBlbmQoKSk7CiAgICBlbHNlCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6
ZSAtIHNpemUoKSwgX194KTsKICB9CiAgdm9pZCBjbGVhcigpIHsgZXJhc2UoYmVnaW4oKSwgZW5k
KCkpOyB9Cn07CgoKCnR5cGVkZWYgdmVjdG9yPGJvb2wsIGFsbG9jPiBiaXRfdmVjdG9yOwoKIyA4
MjIgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfYnZlY3Rvci5oIiAzCgoKCgoKCgoKCgogIAoKCgogCiAK
IAojIDM1ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvdmVjdG9yIiAyIDMKCgoKCiAKIAogCiMgNSAidF9ndGsu
Y3BwIiAyCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1
LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9hbGdvcml0aG0iIDEgMwogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29s
YXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfdGVtcGJ1Zi5oIiAx
IDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4KcGFpcjxfVHAqLCBwdHJkaWZmX3Q+IApfX2dldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRp
ZmZfdCBfX2xlbiwgX1RwKikKewogIGlmIChfX2xlbiA+IHB0cmRpZmZfdCgyMTQ3NDgzNjQ3ICAg
LyBzaXplb2YoX1RwKSkpCiAgICBfX2xlbiA9IDIxNDc0ODM2NDcgICAvIHNpemVvZihfVHApOwoK
ICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfVHAqIF9fdG1wID0gKF9UcCopIG1hbGxvYygoc2l6
ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgaWYgKF9fdG1wICE9IDApCiAgICAgIHJldHVy
biBwYWlyPF9UcCosIHB0cmRpZmZfdD4oX190bXAsIF9fbGVuKTsKICAgIF9fbGVuIC89IDI7CiAg
fQoKICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KChfVHAqKTAsIDApOwp9CgoKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CmlubGluZSBwYWlyPF9UcCosIHB0cmRpZmZfdD4gZ2V0X3RlbXBvcmFy
eV9idWZmZXIocHRyZGlmZl90IF9fbGVuKSB7CiAgcmV0dXJuIF9fZ2V0X3RlbXBvcmFyeV9idWZm
ZXIoX19sZW4sIChfVHAqKSAwKTsKfQoKCgogCiAKIAogCiAKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
aW5saW5lIHBhaXI8X1RwKiwgcHRyZGlmZl90PiBnZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZm
X3QgX19sZW4sIF9UcCopIHsKICByZXR1cm4gX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihfX2xlbiwg
KF9UcCopIDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgp2b2lkIHJldHVybl90ZW1wb3Jhcnlf
YnVmZmVyKF9UcCogX19wKSB7CiAgZnJlZShfX3ApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyYXRvciwgY2xhc3MgX1RwPgpjbGFzcyBfVGVtcG9yYXJ5X2J1ZmZlciB7CnByaXZhdGU6
CiAgcHRyZGlmZl90ICBfTV9vcmlnaW5hbF9sZW47CiAgcHRyZGlmZl90ICBfTV9sZW47CiAgX1Rw
KiAgICAgICBfTV9idWZmZXI7CgogIHZvaWQgX01fYWxsb2NhdGVfYnVmZmVyKCkgewogICAgX01f
b3JpZ2luYWxfbGVuID0gX01fbGVuOwogICAgX01fYnVmZmVyID0gMDsKCiAgICBpZiAoX01fbGVu
ID4gKHB0cmRpZmZfdCkoMjE0NzQ4MzY0NyAgIC8gc2l6ZW9mKF9UcCkpKQogICAgICBfTV9sZW4g
PSAyMTQ3NDgzNjQ3ICAgLyBzaXplb2YoX1RwKTsKCiAgICB3aGlsZSAoX01fbGVuID4gMCkgewog
ICAgICBfTV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9NX2xlbiAqIHNpemVvZihfVHApKTsKICAg
ICAgaWYgKF9NX2J1ZmZlcikKICAgICAgICBicmVhazsKICAgICAgX01fbGVuIC89IDI7CiAgICB9
CiAgfQoKICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYsIF9fdHJ1ZV90eXBl
KSB7fQogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiB2YWwsIF9fZmFsc2Vf
dHlwZSkgewogICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fYnVmZmVyLCBfTV9sZW4sIHZhbCk7
CiAgfQoKcHVibGljOgogIHB0cmRpZmZfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fbGVuOyB9
CiAgcHRyZGlmZl90IHJlcXVlc3RlZF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fb3JpZ2luYWxf
bGVuOyB9CiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9NX2J1ZmZlcjsgfQogIF9UcCogZW5kKCkg
eyByZXR1cm4gX01fYnVmZmVyICsgX01fbGVuOyB9CgogIF9UZW1wb3JhcnlfYnVmZmVyKF9Gb3J3
YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0
cnVjdG9yCiAgICAgICAgICAgIF9Ucml2aWFsOwogICAgdHJ5ICB7CiAgICAgIF9NX2xlbiA9IDA7
CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX01fbGVuKTsKICAgICAgX01fYWxsb2Nh
dGVfYnVmZmVyKCk7CiAgICAgIGlmIChfTV9sZW4gPiAwKQogICAgICAgIF9NX2luaXRpYWxpemVf
YnVmZmVyKCpfX2ZpcnN0LCBfVHJpdmlhbCgpKTsKICAgIH0KICAgIGNhdGNoKC4uLikgeyAgZnJl
ZShfTV9idWZmZXIpOyBfTV9idWZmZXIgPSAwOyBfTV9sZW4gPSAwIDsgdGhyb3c7IH0gOwogIH0K
IAogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsgIAogICAgZGVzdHJveShfTV9idWZmZXIsIF9NX2J1
ZmZlciArIF9NX2xlbik7CiAgICBmcmVlKF9NX2J1ZmZlcik7CiAgfQoKcHJpdmF0ZToKICAgCiAg
X1RlbXBvcmFyeV9idWZmZXIoY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQogIHZvaWQgb3Bl
cmF0b3I9KGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30KfTsKCiAKCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXJhdG9yLCAKICAgICAgICAgIGNsYXNzIF9UcCAKCiAgICAgICAgICAgICAg
ICAgICAgPSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVl
X3R5cGUKCiAgICAgICAgID4Kc3RydWN0IHRlbXBvcmFyeV9idWZmZXIgOiBwdWJsaWMgX1RlbXBv
cmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyYXRvciwgX1RwPgp7CiAgdGVtcG9yYXJ5X2J1ZmZlcihf
Rm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQogICAgOiBf
VGVtcG9yYXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+KF9fZmlyc3QsIF9fbGFzdCkg
e30KICB+dGVtcG9yYXJ5X2J1ZmZlcigpIHt9Cn07CiAgICAKIAoKCgogCiAKIAojIDMzICIvb3B0
L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2lu
Y2x1ZGUvZysrLTMvYWxnb3JpdGhtIiAyIDMKCiMgMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4
Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdv
LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiMgMSAiL29wdC9nbnUv
bGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0bF9oZWFwLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK
IAoKCgoKCiAKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9E
aXN0YW5jZSwgY2xhc3MgX1RwPgp2b2lkIApfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19maXJzdCwKICAgICAgICAgICAgX0Rpc3RhbmNlIF9faG9sZUluZGV4LCBfRGlzdGFuY2Ug
X190b3BJbmRleCwgX1RwIF9fdmFsdWUpCnsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xl
SW5kZXggLSAxKSAvIDI7CiAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9f
Zmlyc3QgKyBfX3BhcmVudCkgPCBfX3ZhbHVlKSB7CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRl
eCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7CiAgICBfX2hvbGVJbmRleCA9IF9fcGFyZW50Owog
ICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgfSAgICAKICAqKF9fZmlyc3Qg
KyBfX2hvbGVJbmRleCkgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgCl9fcHVz
aF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9EaXN0YW5jZSosIF9UcCopCnsKICBfX3B1
c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0
YW5jZSgwKSwgCiAgICAgICAgICAgICAgX1RwKCooX19sYXN0IC0gMSkpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHZvaWQgCnB1c2hfaGVhcChfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkK
ewogIF9fcHVzaF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9f
ZGlzdGFuY2VfdHlwZSggX19maXJzdCApICwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBj
bGFzcyBfVHAsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+CnZvaWQKX19wdXNoX2hlYXAoX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAg
ICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXAp
CnsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgd2hpbGUg
KF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiBfX2NvbXAoKihfX2ZpcnN0ICsgX19wYXJlbnQp
LCBfX3ZhbHVlKSkgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsg
X19wYXJlbnQpOwogICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAgIF9fcGFyZW50ID0gKF9f
aG9sZUluZGV4IC0gMSkgLyAyOwogIH0KICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3Zh
bHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29t
cGFyZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZCAK
X19wdXNoX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wLAogICAg
ICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX1RwKikgCnsKICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBf
RGlzdGFuY2UoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZSgwKSwgCiAgICAgICAg
ICAgICAgX1RwKCooX19sYXN0IC0gMSkpLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgCnB1c2hfaGVh
cChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
bGFzdCwKICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIF9fcHVzaF9oZWFwX2F1eChfX2Zp
cnN0LCBfX2xhc3QsIF9fY29tcCwKICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBf
X2ZpcnN0ICkgLCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4Kdm9pZCAK
X19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9f
aG9sZUluZGV4LAogICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUpCnsK
ICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4OwogIF9EaXN0YW5jZSBfX3NlY29u
ZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8IF9f
bGVuKSB7CiAgICBpZiAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCkgPCAqKF9fZmlyc3QgKyAo
X19zZWNvbmRDaGlsZCAtIDEpKSkKICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgKihfX2ZpcnN0
ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCk7CiAgICBfX2hvbGVJ
bmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENo
aWxkICsgMSk7CiAgfQogIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAqKF9fZmly
c3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKTsKICAg
IF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CiAgfQogIF9fcHVzaF9oZWFwKF9fZmly
c3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGlu
ZSB2b2lkIApfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9EaXN0YW5jZSopCnsKICAqX19yZXN1bHQgPSAqX19maXJz
dDsKICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFz
dCAtIF9fZmlyc3QpLCBfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZCAKX19wb3BfaGVhcF9hdXgoX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAg
ICAgICAgICAgIF9UcCopCnsKICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFz
dCAtIDEsIAogICAgICAgICAgICAgX1RwKCooX19sYXN0IC0gMSkpLCBfX2Rpc3RhbmNlX3R5cGUo
IF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgpp
bmxpbmUgdm9pZCBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgCiAgICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsKICBfX3BvcF9o
ZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwKICAg
ICAgICAgIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQKX19hZGp1c3RfaGVhcChfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAg
ICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKewog
IF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAgX0Rpc3RhbmNlIF9fc2Vjb25k
Q2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogIHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19s
ZW4pIHsKICAgIGlmIChfX2NvbXAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCksICooX19maXJz
dCArIChfX3NlY29uZENoaWxkIC0gMSkpKSkKICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgKihf
X2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCk7CiAgICBf
X2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICBfX3NlY29uZENoaWxkID0gMiAqIChfX3Nl
Y29uZENoaWxkICsgMSk7CiAgfQogIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAq
KF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEp
KTsKICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CiAgfQogIF9fcHVzaF9oZWFw
KF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlLCBfX2NvbXApOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9D
b21wYXJlLCAKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgCl9fcG9wX2hl
YXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2xhc3QsCiAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192
YWx1ZSwgX0NvbXBhcmUgX19jb21wLAogICAgICAgICAgIF9EaXN0YW5jZSopCnsKICAqX19yZXN1
bHQgPSAqX19maXJzdDsKICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rp
c3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCAKICAgICAgICAgICAgICAgIF9fdmFsdWUsIF9fY29t
cCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcCwg
Y2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIApfX3BvcF9oZWFwX2F1eChfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
bGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKQp7CiAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX2xh
c3QgLSAxLCBfX2xhc3QgLSAxLCBfVHAoKihfX2xhc3QgLSAxKSksIF9fY29tcCwKICAgICAgICAg
ICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCAKcG9wX2hlYXAo
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewogICAgX19wb3BfaGVhcF9hdXgoX19maXJz
dCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAsIF9fY29tcCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNl
Pgp2b2lkIApfX21ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKikKewog
IGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikgcmV0dXJuOwogIF9EaXN0YW5jZSBfX2xlbiA9IF9f
bGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKICAg
IAogIHdoaWxlICh0cnVlKSB7CiAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBf
X2xlbiwgX1RwKCooX19maXJzdCArIF9fcGFyZW50KSkpOwogICAgaWYgKF9fcGFyZW50ID09IDAp
IHJldHVybjsKICAgIF9fcGFyZW50LS07CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yPgppbmxpbmUgdm9pZCAKbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQp7CiAgX19tYWtlX2hlYXAo
X19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19maXJzdCApICwg
X19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfVHAsIGNsYXNz
IF9EaXN0YW5jZT4Kdm9pZApfX21ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgX0NvbXBhcmUgX19j
b21wLCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1
cm47CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICBfRGlzdGFuY2UgX19w
YXJlbnQgPSAoX19sZW4gLSAyKS8yOwogICAgCiAgd2hpbGUgKHRydWUpIHsKICAgIF9fYWRqdXN0
X2hlYXAoX19maXJzdCwgX19wYXJlbnQsIF9fbGVuLCBfVHAoKihfX2ZpcnN0ICsgX19wYXJlbnQp
KSwKICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIGlmIChfX3BhcmVudCA9PSAwKSByZXR1
cm47CiAgICBfX3BhcmVudC0tOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIAptYWtlX2hlYXAoX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIAogICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
bGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgX19tYWtlX2hlYXAoX19maXJzdCwgX19sYXN0LCBf
X2NvbXAsCiAgICAgICAgICAgICAgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLCBfX2Rpc3RhbmNl
X3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yPgp2b2lkIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkK
ICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgCnNvcnRfaGVhcChfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkK
ICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tLCBfX2NvbXApOwp9CgoKCgoKIAoKCgogCiAK
IAojIDM0ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ28uaCIgMiAzCgoKIAoKCgoKCiAKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CmlubGluZSBjb25zdCBfVHAmIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19h
LCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MpIHsKICBpZiAoX19hIDwgX19iKQogICAg
aWYgKF9fYiA8IF9fYykKICAgICAgcmV0dXJuIF9fYjsKICAgIGVsc2UgaWYgKF9fYSA8IF9fYykK
ICAgICAgcmV0dXJuIF9fYzsKICAgIGVsc2UKICAgICAgcmV0dXJuIF9fYTsKICBlbHNlIGlmIChf
X2EgPCBfX2MpCiAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fYiA8IF9fYykKICAgIHJldHVy
biBfX2M7CiAgZWxzZQogICAgcmV0dXJuIF9fYjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0NvbXBhcmU+CmlubGluZSBjb25zdCBfVHAmCl9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBj
b25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MsIF9Db21wYXJlIF9fY29tcCkgewogIGlmIChf
X2NvbXAoX19hLCBfX2IpKQogICAgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICAgIHJldHVybiBf
X2I7CiAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgICByZXR1cm4gX19jOwogICAg
ZWxzZQogICAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fY29tcChfX2EsIF9fYykpCiAgICBy
ZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICByZXR1cm4gX19jOwog
IGVsc2UKICAgIHJldHVybiBfX2I7Cn0KCiAKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9GdW5jdGlvbj4KX0Z1bmN0aW9uIGZvcl9lYWNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsIF9GdW5jdGlvbiBfX2YpIHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fZmlyc3QpCiAgICBfX2YoKl9fZmlyc3QpOwogIHJldHVybiBfX2Y7Cn0KCiAKCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfSW5wdXRJdGVyIGZp
bmQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0
ZXJhdG9yX3RhZykKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAqX19maXJzdCAhPSBf
X3ZhbCkKICAgICsrX19maXJzdDsKICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBfSW5wdXRJdGVyIGZpbmRfaWYo
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1
dF9pdGVyYXRvcl90YWcpCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgIV9fcHJlZCgq
X19maXJzdCkpCiAgICArK19fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCgoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIGZp
bmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICAg
ICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAg
ICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAg
OyAtLV9fdHJpcF9jb3VudCkgewogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19m
aXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBf
X2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJu
IF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1
cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICB9CgogIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0
KSB7CiAgY2FzZSAzOgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsK
ICAgICsrX19maXJzdDsKICBjYXNlIDI6CiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVy
biBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMToKICAgIGlmICgqX19maXJzdCA9PSBf
X3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAwOgogIGRlZmF1bHQ6
CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfUmFuZG9tQWNjZXNzSXRlciBmaW5kX2lmKF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKewogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBfY291bnQKICAgID0g
KF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7CgogIGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7IC0t
X190cmlwX2NvdW50KSB7CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7
CiAgICArK19fZmlyc3Q7CgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0
OwogICAgKytfX2ZpcnN0OwoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJz
dDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmly
c3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogIGNh
c2UgMzoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19m
aXJzdDsKICBjYXNlIDI6CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7
CiAgICArK19fZmlyc3Q7CiAgY2FzZSAxOgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVy
biBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMDoKICBkZWZhdWx0OgogICAgcmV0dXJu
IF9fbGFzdDsKICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcD4K
aW5saW5lIF9JbnB1dEl0ZXIgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCnsKICByZXR1cm4g
ZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0
ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cmlu
bGluZSBfSW5wdXRJdGVyIGZpbmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkgewogIHJl
dHVybiBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5
KCBfX2ZpcnN0ICkgKTsKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0Zvcndh
cmRJdGVyIGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QpIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gX19sYXN0OwogIF9G
b3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkg
ewogICAgaWYgKCpfX2ZpcnN0ID09ICpfX25leHQpCiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAg
X19maXJzdCA9IF9fbmV4dDsKICB9CiAgcmV0dXJuIF9fbGFzdDsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIGFkamFj
ZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkgewog
IGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBfX2xhc3Q7CiAgX0ZvcndhcmRJdGVy
IF9fbmV4dCA9IF9fZmlyc3Q7CiAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICBpZiAo
X19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCiAgICAgIHJldHVybiBfX2ZpcnN0Owog
ICAgX19maXJzdCA9IF9fbmV4dDsKICB9CiAgcmV0dXJuIF9fbGFzdDsKfQoKIAogCiAKIAogCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfU2l6ZT4Kdm9pZCBj
b3VudChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9f
dmFsdWUsCiAgICAgICAgICAgX1NpemUmIF9fbikgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xh
c3Q7ICsrX19maXJzdCkKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbHVlKQogICAgICArK19fbjsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9T
aXplPgp2b2lkIGNvdW50X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
IF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgIF9TaXplJiBfX24pIHsKICBmb3IgKCA7
IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkK
ICAgICAgKytfX247Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcD4K
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKY291
bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3Zh
bHVlKSB7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNl
X3R5cGUgX19uID0gMDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg
ICBpZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkKICAgICAgKytfX247CiAgcmV0dXJuIF9fbjsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CnR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCmNvdW50X2lmKF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKSB7CiAg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19u
ID0gMDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoX19w
cmVkKCpfX2ZpcnN0KSkKICAgICAgKytfX247CiAgcmV0dXJuIF9fbjsKfQoKCgoKIAoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+Cl9Gb3J3YXJkSXRl
cjEgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVy
MiBfX2xhc3QyKSAKewogICAKICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9
PSBfX2xhc3QyKQogICAgcmV0dXJuIF9fZmlyc3QxOwoKICAgCiAgX0ZvcndhcmRJdGVyMiBfX3Rt
cChfX2ZpcnN0Mik7CiAgKytfX3RtcDsKICBpZiAoX190bXAgPT0gX19sYXN0MikKICAgIHJldHVy
biBmaW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOwoKICAgCgogIF9Gb3J3YXJkSXRl
cjIgX19wMSwgX19wOwoKICBfX3AxID0gX19maXJzdDI7ICsrX19wMTsKCiAgX0ZvcndhcmRJdGVy
MSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsK
ICAgIF9fZmlyc3QxID0gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKICAgIGlm
IChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICByZXR1cm4gX19sYXN0MTsKCiAgICBfX3AgPSBf
X3AxOwogICAgX19jdXJyZW50ID0gX19maXJzdDE7IAogICAgaWYgKCsrX19jdXJyZW50ID09IF9f
bGFzdDEpCiAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgIHdoaWxlICgqX19jdXJyZW50ID09ICpf
X3ApIHsKICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3Qx
OwogICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gX19sYXN0
MTsKICAgIH0KCiAgICArK19fZmlyc3QxOwogIH0KICByZXR1cm4gX19maXJzdDE7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLCBjbGFzcyBfQmlu
YXJ5UHJlZD4KX0ZvcndhcmRJdGVyMSBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0Zv
cndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9f
Zmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9CaW5h
cnlQcmVkICBfX3ByZWRpY2F0ZSkgCnsKICAgCiAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwg
X19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBfX2ZpcnN0MTsKCiAgIAogIF9Gb3J3YXJk
SXRlcjIgX190bXAoX19maXJzdDIpOwogICsrX190bXA7CiAgaWYgKF9fdG1wID09IF9fbGFzdDIp
CiAgICByZXR1cm4gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKCiAgIAoKICBf
Rm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogIF9G
b3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBf
X2xhc3QxKSB7CiAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICBpZiAoX19w
cmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgIGJyZWFrOwogICAgICArK19f
Zmlyc3QxOwogICAgfQogICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGlj
YXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgKytfX2ZpcnN0MTsKICAgIGlmIChfX2Zp
cnN0MSA9PSBfX2xhc3QxKQogICAgICByZXR1cm4gX19sYXN0MTsKCiAgICBfX3AgPSBfX3AxOwog
ICAgX19jdXJyZW50ID0gX19maXJzdDE7IAogICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEp
IHJldHVybiBfX2xhc3QxOwoKICAgIHdoaWxlIChfX3ByZWRpY2F0ZSgqX19jdXJyZW50LCAqX19w
KSkgewogICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7
CiAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBfX2xhc3Qx
OwogICAgfQoKICAgICsrX19maXJzdDE7CiAgfQogIHJldHVybiBfX2ZpcnN0MTsKfQoKIAoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0ludGVnZXIsIGNsYXNzIF9UcD4KX0Zv
cndhcmRJdGVyIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBf
X3ZhbCkgewogIGlmIChfX2NvdW50IDw9IDApCiAgICByZXR1cm4gX19maXJzdDsKICBlbHNlIHsK
ICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwogICAgd2hpbGUgKF9f
Zmlyc3QgIT0gX19sYXN0KSB7CiAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAg
ICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIHdoaWxlIChf
X2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYmICpfX2kgPT0gX192YWwpIHsKICAgICAgICArK19f
aTsKICAgICAgICAtLV9fbjsKICAgICAgfQogICAgICBpZiAoX19uID09IDApCiAgICAgICAgcmV0
dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UKICAgICAgICBfX2ZpcnN0ID0gZmluZChfX2ksIF9fbGFz
dCwgX192YWwpOwogICAgfQogICAgcmV0dXJuIF9fbGFzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9JbnRlZ2VyLCBjbGFzcyBfVHAsIGNsYXNzIF9CaW5hcnlQ
cmVkPgpfRm9yd2FyZEl0ZXIgc2VhcmNoX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25z
dCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWQgX19iaW5hcnlf
cHJlZCkgewogIGlmIChfX2NvdW50IDw9IDApCiAgICByZXR1cm4gX19maXJzdDsKICBlbHNlIHsK
ICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICBpZiAoX19iaW5hcnlfcHJlZCgq
X19maXJzdCwgX192YWwpKQogICAgICAgIGJyZWFrOwogICAgICArK19fZmlyc3Q7CiAgICB9CiAg
ICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgX0ludGVnZXIgX19uID0gX19jb3Vu
dCAtIDE7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAg
ICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgX19iaW5hcnlfcHJlZCgqX19p
LCBfX3ZhbCkpIHsKICAgICAgICArK19faTsKICAgICAgICAtLV9fbjsKICAgICAgfQogICAgICBp
ZiAoX19uID09IDApCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UgewogICAgICAg
IHdoaWxlIChfX2kgIT0gX19sYXN0KSB7CiAgICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19p
LCBfX3ZhbCkpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgKytfX2k7CiAgICAgICAgfQog
ICAgICAgIF9fZmlyc3QgPSBfX2k7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfX2xhc3Q7CiAg
fQp9IAoKIAoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRl
cjI+Cl9Gb3J3YXJkSXRlcjIgc3dhcF9yYW5nZXMoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0Zv
cndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl
cjIgX19maXJzdDIpIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEs
ICsrX19maXJzdDIpCiAgICBpdGVyX3N3YXAoX19maXJzdDEsIF9fZmlyc3QyKTsKICByZXR1cm4g
X19maXJzdDI7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0
SXRlciwgY2xhc3MgX1VuYXJ5T3BlcmF0aW9uPgpfT3V0cHV0SXRlciB0cmFuc2Zvcm0oX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9P
dXRwdXRJdGVyIF9fcmVzdWx0LCBfVW5hcnlPcGVyYXRpb24gX19vcGVyKSB7CiAgZm9yICggOyBf
X2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgKl9fcmVzdWx0ID0g
X19vcGVyKCpfX2ZpcnN0KTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAg
ICAgY2xhc3MgX0JpbmFyeU9wZXJhdGlvbj4KX091dHB1dEl0ZXIgdHJhbnNmb3JtKF9JbnB1dEl0
ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg
X0lucHV0SXRlcjIgX19maXJzdDIsIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAg
ICAgICAgICAgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkgewogIGZvciAoIDsgX19maXJz
dDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MiwgKytfX3Jlc3VsdCkKICAgICpf
X3Jlc3VsdCA9IF9fYmluYXJ5X29wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKTsKICByZXR1cm4gX19y
ZXN1bHQ7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4Kdm9p
ZCByZXBsYWNlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkg
ewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICgqX19maXJz
dCA9PSBfX29sZF92YWx1ZSkKICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1RwPgp2b2lk
IHJlcGxhY2VfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkg
ewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmIChfX3ByZWQo
Kl9fZmlyc3QpKQogICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIg
cmVwbGFjZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUp
IHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAg
ICAqX19yZXN1bHQgPSAqX19maXJzdCA9PSBfX29sZF92YWx1ZSA/IF9fbmV3X3ZhbHVlIDogKl9f
Zmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3IsIGNs
YXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVy
IHJlcGxhY2VfY29weV9pZihJdGVyYXRvciBfX2ZpcnN0LCBJdGVyYXRvciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVl
KSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQog
ICAgKl9fcmVzdWx0ID0gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7
CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj
bGFzcyBfR2VuZXJhdG9yPgp2b2lkIGdlbmVyYXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0LCBfR2VuZXJhdG9yIF9fZ2VuKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX2dlbigpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfR2VuZXJhdG9yPgpfT3V0cHV0
SXRlciBnZW5lcmF0ZV9uKF9PdXRwdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgX0dlbmVyYXRv
ciBfX2dlbikgewogIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICpfX2Zp
cnN0ID0gX19nZW4oKTsKICByZXR1cm4gX19maXJzdDsKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIHJlbW92
ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBjb25zdCBfVHAmIF9fdmFsdWUpIHsK
ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoKl9fZmlyc3Qg
IT0gX192YWx1ZSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgKytfX3Jlc3Vs
dDsKICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
LCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX091dHB1dEl0ZXIgcmVtb3Zl
X2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9QcmVkaWNhdGUgX19wcmVk
KSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCFfX3By
ZWQoKl9fZmlyc3QpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICArK19fcmVz
dWx0OwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlciwgY2xhc3MgX1RwPgpfRm9yd2FyZEl0ZXIgcmVtb3ZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192
YWx1ZSkgewogIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZSk7CiAgX0Zv
cndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19m
aXJzdCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVfY29weSgrK19faSwgX19s
YXN0LCBfX2ZpcnN0LCBfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX1ByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIHJlbW92ZV9pZihfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGlj
YXRlIF9fcHJlZCkgewogIF9fZmlyc3QgPSBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVk
KTsKICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICByZXR1cm4gX19maXJzdCA9PSBfX2xh
c3QgPyBfX2ZpcnN0IAogICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5X2lm
KCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fcHJlZCk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciBfX3Vu
aXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9UcCopIHsKICBfVHAgX192
YWx1ZSA9ICpfX2ZpcnN0OwogICpfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgd2hpbGUgKCsrX19maXJz
dCAhPSBfX2xhc3QpCiAgICBpZiAoX192YWx1ZSAhPSAqX19maXJzdCkgewogICAgICBfX3ZhbHVl
ID0gKl9fZmlyc3Q7CiAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgIH0KICByZXR1cm4g
KytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJ
dGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0
cHV0SXRlciBfX3Jlc3VsdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dF9pdGVyYXRvcl90YWcpIHsKICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgX191bmlxdWVfY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7
CiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAg
ICBpZiAoKl9fcmVzdWx0ICE9ICpfX2ZpcnN0KSAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJl
dHVybiArK19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091
dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQpIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jl
c3VsdDsKICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAog
ICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fcmVzdWx0ICkgKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBf
QmluYXJ5UHJlZGljYXRlLAogICAgICAgICAgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciBfX3VuaXF1
ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLCBfVHAqKSB7CiAgX1RwIF9fdmFs
dWUgPSAqX19maXJzdDsKICAqX19yZXN1bHQgPSBfX3ZhbHVlOwogIHdoaWxlICgrK19fZmlyc3Qg
IT0gX19sYXN0KQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKF9fdmFsdWUsICpfX2ZpcnN0KSkgewog
ICAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAg
IH0KICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgppbmxpbmUgX091dHB1dEl0
ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9w
cmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFn
KSB7CiAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19i
aW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoIF9fZmlyc3Qg
KSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBj
bGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlu
YXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
cndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgd2hpbGUgKCsr
X19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fcmVzdWx0LCAqX19m
aXJzdCkpICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgcmV0dXJuICsrX19yZXN1bHQ7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0JpbmFy
eVByZWRpY2F0ZT4KaW5saW5lIF9PdXRwdXRJdGVyIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
T3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5h
cnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0
dXJuIF9fcmVzdWx0OwogIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19y
ZXN1bHQsIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9j
YXRlZ29yeSggX19yZXN1bHQgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgpf
Rm9yd2FyZEl0ZXIgdW5pcXVlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0KSB7CiAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0KTsKICByZXR1
cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIHVu
aXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpIHsKICBfX2ZpcnN0ID0g
YWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fYmluYXJ5X3ByZWQpOwogIHJldHVybiB1
bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QsIF9fYmluYXJ5X3ByZWQpOwp9Cgog
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgp2b2lkIF9fcmV2ZXJzZShfQmlk
aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwgCiAgICAg
ICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKSB7CiAgd2hpbGUgKHRydWUpCiAg
ICBpZiAoX19maXJzdCA9PSBfX2xhc3QgfHwgX19maXJzdCA9PSAtLV9fbGFzdCkKICAgICAgcmV0
dXJuOwogICAgZWxzZQogICAgICBpdGVyX3N3YXAoX19maXJzdCsrLCBfX2xhc3QpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CnZvaWQgX19yZXZlcnNlKF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsKICB3aGlsZSAoX19maXJzdCA8IF9fbGFzdCkK
ICAgIGl0ZXJfc3dhcChfX2ZpcnN0KyssIC0tX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9C
aWRpcmVjdGlvbmFsSXRlcj4KaW5saW5lIHZvaWQgcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIg
X19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkgewogIF9fcmV2ZXJzZShfX2ZpcnN0
LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIg
cmV2ZXJzZV9jb3B5KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19s
YXN0KSB7CiAgICAtLV9fbGFzdDsKICAgICpfX3Jlc3VsdCA9ICpfX2xhc3Q7CiAgICArK19fcmVz
dWx0OwogIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfRXVjbGlk
ZWFuUmluZ0VsZW1lbnQ+Cl9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX2djZChfRXVjbGlkZWFuUmlu
Z0VsZW1lbnQgX19tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0V1Y2xpZGVhblJpbmdF
bGVtZW50IF9fbikKewogIHdoaWxlIChfX24gIT0gMCkgewogICAgX0V1Y2xpZGVhblJpbmdFbGVt
ZW50IF9fdCA9IF9fbSAlIF9fbjsKICAgIF9fbSA9IF9fbjsKICAgIF9fbiA9IF9fdDsKICB9CiAg
cmV0dXJuIF9fbTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0Rpc3Rh
bmNlPgpfRm9yd2FyZEl0ZXIgX19yb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwK
ICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgaWYgKF9fZmly
c3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19sYXN0OwogIGlmIChfX2xhc3QgID09IF9fbWlk
ZGxlKQogICAgcmV0dXJuIF9fZmlyc3Q7CgogIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiA9IF9fbWlk
ZGxlOwogIGRvIHsKICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgaWYgKF9f
Zmlyc3QgPT0gX19taWRkbGUpCiAgICAgIF9fbWlkZGxlID0gX19maXJzdDI7CiAgfSB3aGlsZSAo
X19maXJzdDIgIT0gX19sYXN0KTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV3X21pZGRsZSA9IF9fZmly
c3Q7CgogIF9fZmlyc3QyID0gX19taWRkbGU7CgogIHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3Qp
IHsKICAgIHN3YXAgKCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsKICAgIGlmIChfX2ZpcnN0ID09
IF9fbWlkZGxlKQogICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogICAgZWxzZSBpZiAoX19maXJz
dDIgPT0gX19sYXN0KQogICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwogIH0KCiAgcmV0dXJuIF9f
bmV3X21pZGRsZTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNz
IF9EaXN0YW5jZT4KX0JpZGlyZWN0aW9uYWxJdGVyIF9fcm90YXRlKF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSosCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgewogIGlmIChf
X2ZpcnN0ID09IF9fbWlkZGxlKQogICAgcmV0dXJuIF9fbGFzdDsKICBpZiAoX19sYXN0ICA9PSBf
X21pZGRsZSkKICAgIHJldHVybiBfX2ZpcnN0OwoKICBfX3JldmVyc2UoX19maXJzdCwgIF9fbWlk
ZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICBfX3JldmVyc2UoX19taWRkbGUs
IF9fbGFzdCwgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKCiAgd2hpbGUgKF9fZmly
c3QgIT0gX19taWRkbGUgJiYgX19taWRkbGUgIT0gX19sYXN0KQogICAgc3dhcCAoKl9fZmlyc3Qr
KywgKi0tX19sYXN0KTsKCiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpIHsKICAgIF9fcmV2ZXJz
ZShfX21pZGRsZSwgX19sYXN0LCAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAg
cmV0dXJuIF9fbGFzdDsKICB9CiAgZWxzZSB7CiAgICBfX3JldmVyc2UoX19maXJzdCwgIF9fbWlk
ZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgIHJldHVybiBfX2ZpcnN0Owog
IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2Us
IGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19yb3RhdGUoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19t
aWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlICosIF9UcCAqKSB7CgogIF9E
aXN0YW5jZSBfX24gPSBfX2xhc3QgICAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fayA9IF9fbWlk
ZGxlIC0gX19maXJzdDsKICBfRGlzdGFuY2UgX19sID0gX19uIC0gX19rOwogIF9SYW5kb21BY2Nl
c3NJdGVyIF9fcmVzdWx0ID0gX19maXJzdCArIChfX2xhc3QgLSBfX21pZGRsZSk7CgogIGlmIChf
X2sgPT0gX19sKSB7CiAgICBzd2FwX3JhbmdlcyhfX2ZpcnN0LCBfX21pZGRsZSwgX19taWRkbGUp
OwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KCiAgX0Rpc3RhbmNlIF9fZCA9IF9fZ2NkKF9fbiwg
X19rKTsKCiAgZm9yIChfRGlzdGFuY2UgX19pID0gMDsgX19pIDwgX19kOyBfX2krKykgewogICAg
X1RwIF9fdG1wID0gKl9fZmlyc3Q7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3AgPSBfX2ZpcnN0
OwoKICAgIGlmIChfX2sgPCBfX2wpIHsKICAgICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19q
IDwgX19sL19fZDsgX19qKyspIHsKICAgICAgICBpZiAoX19wID4gX19maXJzdCArIF9fbCkgewog
ICAgICAgICAgKl9fcCA9ICooX19wIC0gX19sKTsKICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAg
ICAgfQoKICAgICAgICAqX19wID0gKihfX3AgKyBfX2spOwogICAgICAgIF9fcCArPSBfX2s7CiAg
ICAgIH0KICAgIH0KCiAgICBlbHNlIHsKICAgICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19q
IDwgX19rL19fZCAtIDE7IF9faiArKykgewogICAgICAgIGlmIChfX3AgPCBfX2xhc3QgLSBfX2sp
IHsKICAgICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAgICAgICBfX3AgKz0gX19rOwog
ICAgICAgIH0KCiAgICAgICAgKl9fcCA9ICogKF9fcCAtIF9fbCk7CiAgICAgICAgX19wIC09IF9f
bDsKICAgICAgfQogICAgfQoKICAgICpfX3AgPSBfX3RtcDsKICAgICsrX19maXJzdDsKICB9Cgog
IHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5l
IF9Gb3J3YXJkSXRlciByb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCkg
ewogIHJldHVybiBfX3JvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAg
ICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9fZmlyc3QgKSAsCiAgICAgICAgICAgICAgICAgIF9f
aXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIgcm90YXRlX2NvcHkoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAg
cmV0dXJuIGNvcHkoX19maXJzdCwgX19taWRkbGUsIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19y
ZXN1bHQpKTsKfQoKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfRGlz
dGFuY2UgX19yYW5kb21fbnVtYmVyKF9EaXN0YW5jZSBfX24pIHsKCgoKICByZXR1cm4gbHJhbmQ0
OCgpICUgX19uOwoKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxp
bmUgdm9pZCByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpIHsKICBpZiAoX19m
aXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9f
Zmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIGl0ZXJfc3dhcChfX2ksIF9fZmly
c3QgKyBfX3JhbmRvbV9udW1iZXIoKF9faSAtIF9fZmlyc3QpICsgMSkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CnZv
aWQgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3Im
IF9fcmFuZCkgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogIGZvciAoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAg
aXRlcl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFuZCgoX19pIC0gX19maXJzdCkgKyAxKSk7Cn0K
CiAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFz
cyBfRGlzdGFuY2U+Cl9PdXRwdXRJdGVyIHJhbmRvbV9zYW1wbGVfbihfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9P
dXRwdXRJdGVyIF9fb3V0LCBjb25zdCBfRGlzdGFuY2UgX19uKQp7CiAgX0Rpc3RhbmNlIF9fcmVt
YWluaW5nID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVtYWluaW5nKTsKICBf
RGlzdGFuY2UgX19tID0gbWluKF9fbiwgX19yZW1haW5pbmcpOwoKICB3aGlsZSAoX19tID4gMCkg
ewogICAgaWYgKF9fcmFuZG9tX251bWJlcihfX3JlbWFpbmluZykgPCBfX20pIHsKICAgICAgKl9f
b3V0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19vdXQ7CiAgICAgIC0tX19tOwogICAgfQoKICAgIC0t
X19yZW1haW5pbmc7CiAgICArK19fZmlyc3Q7CiAgfQogIHJldHVybiBfX291dDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5j
ZSwKICAgICAgICAgIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+Cl9PdXRwdXRJdGVyIHJh
bmRvbV9zYW1wbGVfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fb3V0LCBjb25zdCBfRGlz
dGFuY2UgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVy
YXRvciYgX19yYW5kKQp7CiAgX0Rpc3RhbmNlIF9fcmVtYWluaW5nID0gMDsKICBkaXN0YW5jZShf
X2ZpcnN0LCBfX2xhc3QsIF9fcmVtYWluaW5nKTsKICBfRGlzdGFuY2UgX19tID0gbWluKF9fbiwg
X19yZW1haW5pbmcpOwoKICB3aGlsZSAoX19tID4gMCkgewogICAgaWYgKF9fcmFuZChfX3JlbWFp
bmluZykgPCBfX20pIHsKICAgICAgKl9fb3V0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19vdXQ7CiAg
ICAgIC0tX19tOwogICAgfQoKICAgIC0tX19yZW1haW5pbmc7CiAgICArK19fZmlyc3Q7CiAgfQog
IHJldHVybiBfX291dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcmFuZG9t
X3NhbXBsZShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfRGlzdGFuY2UgX19uKQp7CiAgX0Rpc3Rh
bmNlIF9fbSA9IDA7CiAgX0Rpc3RhbmNlIF9fdCA9IF9fbjsKICBmb3IgKCA7IF9fZmlyc3QgIT0g
X19sYXN0ICYmIF9fbSA8IF9fbjsgKytfX20sICsrX19maXJzdCkgCiAgICBfX291dFtfX21dID0g
Kl9fZmlyc3Q7CgogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgKytfX3Q7CiAgICBf
RGlzdGFuY2UgX19NID0gX19yYW5kb21fbnVtYmVyKF9fdCk7CiAgICBpZiAoX19NIDwgX19uKQog
ICAgICBfX291dFtfX01dID0gKl9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICByZXR1cm4g
X19vdXQgKyBfX207Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlciwKICAgICAgICAgIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3IsIGNsYXNz
IF9EaXN0YW5jZT4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19yYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9EaXN0YW5jZSBfX24pCnsKICBfRGlzdGFuY2UgX19tID0g
MDsKICBfRGlzdGFuY2UgX190ID0gX19uOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYg
X19tIDwgX19uOyArK19fbSwgKytfX2ZpcnN0KQogICAgX19vdXRbX19tXSA9ICpfX2ZpcnN0OwoK
ICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICsrX190OwogICAgX0Rpc3RhbmNlIF9f
TSA9IF9fcmFuZChfX3QpOwogICAgaWYgKF9fTSA8IF9fbikKICAgICAgX19vdXRbX19NXSA9ICpf
X2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIH0KCiAgcmV0dXJuIF9fb3V0ICsgX19tOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSBf
UmFuZG9tQWNjZXNzSXRlcgpyYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXRfZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0X2xhc3QpIAp7CiAgcmV0dXJuIF9fcmFuZG9tX3NhbXBs
ZShfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9maXJzdCwg
X19vdXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
LCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgCiAgICAgICAgICBjbGFzcyBfUmFuZG9tTnVtYmVy
R2VuZXJhdG9yPgppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcmFuZG9tX3NhbXBsZShfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fb3V0X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9sYXN0LAogICAgICAg
ICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkgCnsKICByZXR1cm4gX19yYW5k
b21fc2FtcGxlKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0
X2ZpcnN0LCBfX3JhbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9sYXN0IC0gX19v
dXRfZmlyc3QpOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJl
ZGljYXRlPgpfRm9yd2FyZEl0ZXIgX19wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsCgkJ
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKCQkJIF9QcmVkaWNhdGUgICBfX3ByZWQsCgkJ
CSBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJu
IF9fZmlyc3Q7CgogIHdoaWxlIChfX3ByZWQoKl9fZmlyc3QpKQogICAgaWYgKCsrX19maXJzdCA9
PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwoKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJz
dDsKCiAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkKICAgIGlmIChfX3ByZWQoKl9fbmV4dCkp
IHsKICAgICAgc3dhcCgqX19maXJzdCwgKl9fbmV4dCk7CiAgICAgICsrX19maXJzdDsKICAgIH0K
CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIs
IGNsYXNzIF9QcmVkaWNhdGU+Cl9CaWRpcmVjdGlvbmFsSXRlciBfX3BhcnRpdGlvbihfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlciBfX2xhc3QsCgkJCSAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKCQkJICAg
ICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKSB7CiAgd2hpbGUgKHRydWUpIHsKICAgIHdo
aWxlICh0cnVlKQogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9f
Zmlyc3Q7CiAgICAgIGVsc2UgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgKytfX2ZpcnN0
OwogICAgICBlbHNlCiAgICAgICAgYnJlYWs7CiAgICAtLV9fbGFzdDsKICAgIHdoaWxlICh0cnVl
KQogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAg
ICAgIGVsc2UgaWYgKCFfX3ByZWQoKl9fbGFzdCkpCiAgICAgICAgLS1fX2xhc3Q7CiAgICAgIGVs
c2UKICAgICAgICBicmVhazsKICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgKytf
X2ZpcnN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRp
Y2F0ZT4KaW5saW5lIF9Gb3J3YXJkSXRlciBwYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
CiAgIAkJCSAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCgkJCSAgICAgIF9QcmVkaWNhdGUgICBf
X3ByZWQpIHsKICByZXR1cm4gX19wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LCBfX3ByZWQsIF9f
aXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIg
X19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9E
aXN0YW5jZSBfX2xlbikgewogIGlmIChfX2xlbiA9PSAxKQogICAgcmV0dXJuIF9fcHJlZCgqX19m
aXJzdCkgPyBfX2xhc3QgOiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmly
c3Q7CiAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsKICByZXR1cm4gcm90YXRlKF9faW5w
bGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ByZWQsIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAyKSwKICAgICAgICAg
ICAgICAgIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRp
b24oX19taWRkbGUsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIAogICAgICAgICAg
Y2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZl
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6
ZSkgCnsKICBpZiAoX19sZW4gPD0gX19idWZmZXJfc2l6ZSkgewogICAgX0ZvcndhcmRJdGVyIF9f
cmVzdWx0MSA9IF9fZmlyc3Q7CiAgICBfUG9pbnRlciBfX3Jlc3VsdDIgPSBfX2J1ZmZlcjsKICAg
IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgOyArK19fZmlyc3QpCiAgICAgIGlmIChfX3ByZWQo
Kl9fZmlyc3QpKSB7CiAgICAgICAgKl9fcmVzdWx0MSA9ICpfX2ZpcnN0OwogICAgICAgICsrX19y
ZXN1bHQxOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgICpfX3Jlc3VsdDIgPSAqX19maXJz
dDsKICAgICAgICArK19fcmVzdWx0MjsKICAgICAgfQogICAgY29weShfX2J1ZmZlciwgX19yZXN1
bHQyLCBfX3Jlc3VsdDEpOwogICAgcmV0dXJuIF9fcmVzdWx0MTsKICB9CiAgZWxzZSB7CiAgICBf
Rm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19s
ZW4gLyAyKTsKICAgIHJldHVybiByb3RhdGUoX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKAog
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ByZWQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSks
CiAgICAgICAgICAgICAgICAgICAgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgX19zdGFi
bGVfcGFydGl0aW9uX2FkYXB0aXZlKAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxl
LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAtIF9fbGVu
IC8gMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpKTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNl
PgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fc3RhYmxlX3BhcnRpdGlvbl9hdXgoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIAogICAgICAgICAgICAgICAgICAgICAgIF9Q
cmVkaWNhdGUgX19wcmVkLCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgX1RlbXBvcmFyeV9idWZmZXI8
X0ZvcndhcmRJdGVyLCBfVHA+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKF9fYnVmLnNp
emUoKSA+IDApCiAgICByZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9fZmlyc3Qs
IF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
RGlzdGFuY2UoX19idWYucmVxdWVzdGVkX3NpemUoKSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9fYnVmLnNpemUoKSk7CiAgZWxzZQogICAg
cmV0dXJuIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVk
LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19idWYu
cmVxdWVzdGVkX3NpemUoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz
cyBfUHJlZGljYXRlPgppbmxpbmUgX0ZvcndhcmRJdGVyIHN0YWJsZV9wYXJ0aXRpb24oX0Zvcndh
cmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXIgX19sYXN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Q
cmVkaWNhdGUgX19wcmVkKSB7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIF9f
Zmlyc3Q7CiAgZWxzZQogICAgcmV0dXJuIF9fc3RhYmxlX3BhcnRpdGlvbl9hdXgoX19maXJzdCwg
X19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVl
X3R5cGUoIF9fZmlyc3QgKSAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Rp
c3RhbmNlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXIsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgX191bmd1YXJkZWRfcGFydGl0aW9u
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90KSAKewogIHdoaWxlICh0cnVlKSB7CiAg
ICB3aGlsZSAoKl9fZmlyc3QgPCBfX3Bpdm90KQogICAgICArK19fZmlyc3Q7CiAgICAtLV9fbGFz
dDsKICAgIHdoaWxlIChfX3Bpdm90IDwgKl9fbGFzdCkKICAgICAgLS1fX2xhc3Q7CiAgICBpZiAo
IShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICBpdGVyX3N3YXAo
X19maXJzdCwgX19sYXN0KTsKICAgICsrX19maXJzdDsKICB9Cn0gICAgCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+Cl9SYW5kb21B
Y2Nlc3NJdGVyIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0
LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAg
X19waXZvdCwgX0NvbXBhcmUgX19jb21wKSAKewogIHdoaWxlICh0cnVlKSB7CiAgICB3aGlsZSAo
X19jb21wKCpfX2ZpcnN0LCBfX3Bpdm90KSkKICAgICAgKytfX2ZpcnN0OwogICAgLS1fX2xhc3Q7
CiAgICB3aGlsZSAoX19jb21wKF9fcGl2b3QsICpfX2xhc3QpKQogICAgICAtLV9fbGFzdDsKICAg
IGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQogICAgICByZXR1cm4gX19maXJzdDsKICAgIGl0ZXJf
c3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgKytfX2ZpcnN0OwogIH0KfQoKY29uc3QgaW50IF9f
c3RsX3RocmVzaG9sZCA9IDE2OwoKIAoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
LCBjbGFzcyBfVHA+CnZvaWQgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsIF9UcCBfX3ZhbCkgewogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9IF9f
bGFzdDsKICAtLV9fbmV4dDsKICB3aGlsZSAoX192YWwgPCAqX19uZXh0KSB7CiAgICAqX19sYXN0
ID0gKl9fbmV4dDsKICAgIF9fbGFzdCA9IF9fbmV4dDsKICAgIC0tX19uZXh0OwogIH0KICAqX19s
YXN0ID0gX192YWw7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3Mg
X1RwLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsLCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9IF9f
bGFzdDsKICAtLV9fbmV4dDsgIAogIHdoaWxlIChfX2NvbXAoX192YWwsICpfX25leHQpKSB7CiAg
ICAqX19sYXN0ID0gKl9fbmV4dDsKICAgIF9fbGFzdCA9IF9fbmV4dDsKICAgIC0tX19uZXh0Owog
IH0KICAqX19sYXN0ID0gX192YWw7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
ciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZCBfX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QsIF9UcCopIHsKICBfVHAgX192YWwgPSAqX19sYXN0OwogIGlmIChfX3ZhbCA8ICpf
X2ZpcnN0KSB7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0ICsgMSk7
CiAgICAqX19maXJzdCA9IF9fdmFsOwogIH0KICBlbHNlCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJf
aW5zZXJ0KF9fbGFzdCwgX192YWwpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIF9fbGluZWFyX2luc2Vy
dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKSB7CiAgX1Rw
IF9fdmFsID0gKl9fbGFzdDsKICBpZiAoX19jb21wKF9fdmFsLCAqX19maXJzdCkpIHsKICAgIGNv
cHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX2xhc3QgKyAxKTsKICAgICpfX2ZpcnN0ID0g
X192YWw7CiAgfQogIGVsc2UKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19sYXN0LCBf
X3ZhbCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lk
IF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0KSB7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47IAogIGZvciAo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19p
KQogICAgX19saW5lYXJfaW5zZXJ0KF9fZmlyc3QsIF9faSwgX192YWx1ZV90eXBlKCBfX2ZpcnN0
ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFy
ZT4Kdm9pZCBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29t
cCkgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogIGZvciAoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgX19saW5l
YXJfaW5zZXJ0KF9fZmlyc3QsIF9faSwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLCBfX2NvbXAp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4Kdm9pZCBf
X3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCwgX1RwKikgewogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdDsgX19p
ICE9IF9fbGFzdDsgKytfX2kpCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1Rw
KCpfX2kpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9p
ZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qp
IHsKICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Zh
bHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9u
X3NvcnRfYXV4KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9UcCosIF9Db21wYXJlIF9fY29tcCkgewogIGZvciAoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBf
X3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1RwKCpfX2kpLCBfX2NvbXApOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9p
ZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf
X2NvbXApIHsKICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX19maXJzdCwgX19sYXN0
LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9pZCBf
X2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgaWYgKF9f
bGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQo
X19maXJzdCwgX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCk7CiAgICBfX3VuZ3VhcmRlZF9pbnNl
cnRpb25fc29ydChfX2ZpcnN0ICsgX19zdGxfdGhyZXNob2xkLCBfX2xhc3QpOwogIH0KICBlbHNl
CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19maW5hbF9pbnNlcnRp
b25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYg
KF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIF9faW5zZXJ0aW9uX3Nv
cnQoX19maXJzdCwgX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19jb21wKTsKICAgIF9fdW5n
dWFyZGVkX2luc2VydGlvbl9zb3J0KF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQsIF9fbGFzdCwg
X19jb21wKTsKICB9CiAgZWxzZQogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3Qs
IF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5lIF9TaXplIF9fbGcoX1Np
emUgX19uKSB7CiAgX1NpemUgX19rOwogIGZvciAoX19rID0gMDsgX19uICE9IDE7IF9fbiA+Pj0g
MSkgKytfX2s7CiAgcmV0dXJuIF9fazsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9TaXplPgp2b2lkIF9faW50cm9zb3J0X2xvb3AoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwgX1RwKiwKICAgICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGlt
aXQpCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9fc3RsX3RocmVzaG9sZCkgewogICAg
aWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICBwYXJ0aWFsX3NvcnQoX19maXJzdCwgX19s
YXN0LCBfX2xhc3QpOwogICAgICByZXR1cm47CiAgICB9CiAgICAtLV9fZGVwdGhfbGltaXQ7CiAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihf
X2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAoX19tZWRpYW4o
Kl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2Zp
cnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7CiAgICBfX2ludHJvc29ydF9sb29wKF9fY3V0
LCBfX2xhc3QsIChfVHAqKSAwLCBfX2RlcHRoX2xpbWl0KTsKICAgIF9fbGFzdCA9IF9fY3V0Owog
IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNz
IF9TaXplLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QsIF9UcCosCiAgICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0LCBf
Q29tcGFyZSBfX2NvbXApCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9fc3RsX3RocmVz
aG9sZCkgewogICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICBwYXJ0aWFsX3NvcnQo
X19maXJzdCwgX19sYXN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIHJldHVybjsKICAgIH0KICAg
IC0tX19kZXB0aF9saW1pdDsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgX191
bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwgX19jb21wKSks
CiAgICAgICBfX2NvbXApOwogICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCAoX1Rw
KikgMCwgX19kZXB0aF9saW1pdCwgX19jb21wKTsKICAgIF9fbGFzdCA9IF9fY3V0OwogIH0KfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBzb3J0KF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkgewogIGlmIChf
X2ZpcnN0ICE9IF9fbGFzdCkgewogICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19maXJzdCApICwKICAgICAgICAg
ICAgICAgICAgICAgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIpOwogICAgX19maW5hbF9pbnNl
cnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgc29ydChfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBfX2lu
dHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX192YWx1
ZV90eXBlKCBfX2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICAgICBfX2xnKF9fbGFzdCAtIF9f
Zmlyc3QpICogMiwKICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIF9fZmluYWxfaW5z
ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogIH0KfQoKIAoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QpIHsKICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDE1KSB7CiAgICBf
X2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICByZXR1cm47CiAgfQogIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KSAvIDI7
CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlKTsKICBfX2lucGxhY2Vf
c3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCk7CiAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihf
X2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19taWRk
bGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0IC0gX19taWRkbGUp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgp2
b2lkIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJl
IF9fY29tcCkgewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAgIF9faW5zZXJ0aW9u
X3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgcmV0dXJuOwogIH0KICBfUmFuZG9t
QWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwog
IF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICBfX2lu
cGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCwgX19jb21wKTsKICBfX21lcmdlX3dp
dGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xh
c3QgLSBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjEsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyMiwK
ICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9t
QWNjZXNzSXRlcjEgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlcjEgX19sYXN0LCAKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIg
X19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSkgewogIF9EaXN0YW5jZSBfX3R3b19zdGVw
ID0gMiAqIF9fc3RlcF9zaXplOwoKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19z
dGVwKSB7CiAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6
ZSwKICAgICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsg
X190d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQpOwogICAgX19maXJzdCAr
PSBfX3R3b19zdGVwOwogIH0KCiAgX19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAt
IF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CiAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3Rl
cF9zaXplLCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAgICBfX3Jlc3VsdCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjEsIGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyMiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQg
X19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUs
CiAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgX0Rpc3RhbmNlIF9f
dHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7CgogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49
IF9fdHdvX3N0ZXApIHsKICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9f
c3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9f
Zmlyc3QgKyBfX3R3b19zdGVwLAogICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAg
ICAgICAgICAgICAgICAgX19jb21wKTsKICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKICB9CiAg
X19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6
ZSk7CgogIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICBfX2Zp
cnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAgICBfX3Jlc3VsdCwKICAgICAgICBfX2Nv
bXApOwp9Cgpjb25zdCBpbnQgX19zdGxfY2h1bmtfc2l6ZSA9IDc7CiAgICAgICAgCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fY2h1bmtf
aW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9EaXN0YW5jZSBfX2NodW5r
X3NpemUpCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsKICAg
IF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSk7CiAgICBf
X2ZpcnN0ICs9IF9fY2h1bmtfc2l6ZTsKICB9CiAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBf
X2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0
YW5jZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19jaHVua19pbnNlcnRpb25fc29ydChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBf
X2NodW5rX3NpemUsIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0
ID49IF9fY2h1bmtfc2l6ZSkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0
ICsgX19jaHVua19zaXplLCBfX2NvbXApOwogICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAg
fQogIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFu
Y2U+CnZvaWQgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlz
dGFuY2UqKSB7CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICBfUG9pbnRl
ciBfX2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgX0Rpc3RhbmNlIF9fc3RlcF9z
aXplID0gX19zdGxfY2h1bmtfc2l6ZTsKICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs
IF9fbGFzdCwgX19zdGVwX3NpemUpOwoKICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewog
ICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3Np
emUpOwogICAgX19zdGVwX3NpemUgKj0gMjsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVy
LCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSk7CiAgICBfX3N0ZXBfc2l6ZSAq
PSAyOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9p
bnRlciwgY2xhc3MgX0Rpc3RhbmNlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19t
ZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Qb2ludGVy
IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqLCBfQ29t
cGFyZSBfX2NvbXApIHsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogIF9Q
b2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOwoKICBfRGlzdGFuY2UgX19z
dGVwX3NpemUgPSBfX3N0bF9jaHVua19zaXplOwogIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX19m
aXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKCiAgd2hpbGUgKF9fc3RlcF9zaXpl
IDwgX19sZW4pIHsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19idWZm
ZXIsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgX19zdGVwX3NpemUgKj0gMjsKICAgIF9fbWVy
Z2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6
ZSwgX19jb21wKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQg
X19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIg
X19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJf
c2l6ZSkgewogIF9EaXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwog
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogIGlmIChfX2xl
biA+IF9fYnVmZmVyX3NpemUpIHsKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwg
X19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIF9fc3RhYmxlX3NvcnRfYWRh
cHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogIH0KICBl
bHNlIHsKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19i
dWZmZXIsIChfRGlzdGFuY2UqKTApOwogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlk
ZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCAoX0Rpc3RhbmNlKikwKTsKICB9CiAgX19tZXJnZV9hZGFw
dGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2Zp
cnN0KSwgCiAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19taWRkbGUpLCBf
X2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9EaXN0YW5jZSwgCiAgICAgICAgICBjbGFzcyBf
Q29tcGFyZT4Kdm9pZCBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LCBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0
YW5jZSBfX2J1ZmZlcl9zaXplLCBfQ29tcGFyZSBfX2NvbXApIHsKICBfRGlzdGFuY2UgX19sZW4g
PSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRs
ZSA9IF9fZmlyc3QgKyBfX2xlbjsKICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICBf
X3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZm
ZXJfc2l6ZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBfX3N0YWJs
ZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXpl
LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICB9CiAgZWxzZSB7CiAgICBf
X21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCAoX0Rp
c3RhbmNlKikwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIF9f
bWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgKF9EaXN0
YW5jZSopMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgfQogIF9f
bWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlk
ZGxlIC0gX19maXJzdCksIAogICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9f
bWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2Nv
bXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xh
c3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX3N0YWJsZV9zb3J0X2F1eChfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSopIHsKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFu
ZG9tQWNjZXNzSXRlciwgX1RwPiBidWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAoYnVmLmJlZ2lu
KCkgPT0gMCkKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogIGVs
c2UgCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2lu
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShidWYuc2l6ZSgpKSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlz
dGFuY2UsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX3N0YWJsZV9zb3J0X2F1eChfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5k
b21BY2Nlc3NJdGVyLCBfVHA+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChidWYuYmVnaW4o
KSA9PSAwKQogICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21w
KTsKICBlbHNlIAogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1
Zi5iZWdpbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoYnVmLnNpemUo
KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0KSB7CiAgX19zdGFibGVfc29ydF9hdXgoX19maXJzdCwgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19maXJzdCApICwKICAgICAgICAgICAgICAgICAgICBf
X2Rpc3RhbmNlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBzdGFibGVfc29ydChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkgewogIF9fc3RhYmxlX3NvcnRfYXV4KF9fZmly
c3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAs
CiAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgLCAKICAgICAg
ICAgICAgICAgICAgICBfX2NvbXApOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX3BhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopIHsKICBtYWtlX2hlYXAoX19maXJzdCwgX19t
aWRkbGUpOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9f
bGFzdDsgKytfX2kpCiAgICBpZiAoKl9faSA8ICpfX2ZpcnN0KSAKICAgICAgX19wb3BfaGVhcChf
X2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVHAoKl9faSksCiAgICAgICAgICAgICAgICAgX19kaXN0
YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lkIHBhcnRpYWxf
c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QpIHsKICBfX3BhcnRpYWxfc29ydChfX2ZpcnN0LCBfX21pZGRs
ZSwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19wYXJ0
aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19t
aWRkbGUsCiAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAq
LCBfQ29tcGFyZSBfX2NvbXApIHsKICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29t
cCk7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21pZGRsZTsgX19pIDwgX19sYXN0
OyArK19faSkKICAgIGlmIChfX2NvbXAoKl9faSwgKl9fZmlyc3QpKQogICAgICBfX3BvcF9oZWFw
KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9UcCgqX19pKSwgX19jb21wLAogICAgICAgICAgICAg
ICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICk7CiAgc29ydF9oZWFwKF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs
YXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlk
ZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBf
Q29tcGFyZSBfX2NvbXApIHsKICBfX3BhcnRpYWxfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19s
YXN0LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLAog
ICAgICAgICAgY2xhc3MgX1RwPgpfUmFuZG9tQWNjZXNzSXRlciBfX3BhcnRpYWxfc29ydF9jb3B5
KF9JbnB1dEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0
LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqLCBf
VHAqKSB7CiAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jl
c3VsdF9sYXN0OwogIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFzdCA9IF9fcmVz
dWx0X2ZpcnN0OwogIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFz
dCAhPSBfX3Jlc3VsdF9sYXN0KSB7CiAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmlyc3Q7
CiAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICsrX19maXJzdDsKICB9CiAgbWFrZV9oZWFw
KF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwogIHdoaWxlIChfX2ZpcnN0ICE9
IF9fbGFzdCkgewogICAgaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0X2ZpcnN0KSAKICAgICAgX19h
ZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlKDApLAogICAgICAgICAgICAgICAg
ICAgIF9EaXN0YW5jZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAg
ICAgICAgICAgICAgICAgX1RwKCpfX2ZpcnN0KSk7CiAgICArK19fZmlyc3Q7CiAgfQogIHNvcnRf
aGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsKICByZXR1cm4gX19yZXN1
bHRfcmVhbF9sYXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXI+CmlubGluZSBfUmFuZG9tQWNjZXNzSXRlcgpwYXJ0aWFsX3NvcnRfY29weShf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCkgewogIHJldHVybiBfX3BhcnRpYWxfc29ydF9jb3B5
KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X2xhc3QsIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19yZXN1bHRfZmlyc3QgKSAs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj
bGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgpfUmFu
ZG9tQWNjZXNzSXRlciBfX3BhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKiwgX1RwKikgewog
IGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFz
dDsKICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJz
dDsKICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19y
ZXN1bHRfbGFzdCkgewogICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgKytf
X3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICArK19fZmlyc3Q7CiAgfQogIG1ha2VfaGVhcChfX3Jlc3Vs
dF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXApOwogIHdoaWxlIChfX2ZpcnN0ICE9
IF9fbGFzdCkgewogICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0X2ZpcnN0KSkKICAg
ICAgX19hZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlKDApLAogICAgICAgICAg
ICAgICAgICAgIF9EaXN0YW5jZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCks
CiAgICAgICAgICAgICAgICAgICAgX1RwKCpfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBf
X2NvbXApOwogICAgKytfX2ZpcnN0OwogIH0KICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9f
cmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0Owp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs
YXNzIF9Db21wYXJlPgppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcGFydGlhbF9zb3J0X2NvcHko
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QsIF9Db21wYXJlIF9fY29tcCkgewogIHJldHVybiBf
X3BhcnRpYWxfc29ydF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHRfZmlyc3QsIF9fcmVz
dWx0X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19yZXN1bHRfZmlyc3QgKSAsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoK
IAoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZvaWQgX19u
dGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf
X250aCwKICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKikg
ewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykgewogICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19jdXQgPQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2Zp
cnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFz
dCAtIDEpKSkpOwogICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICBfX2ZpcnN0ID0gX19jdXQ7
CiAgICBlbHNlIAogICAgICBfX2xhc3QgPSBfX2N1dDsKICB9CiAgX19pbnNlcnRpb25fc29ydChf
X2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+Cmlu
bGluZSB2b2lkIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QpIHsKICBfX250aF9lbGVtZW50KF9fZmlyc3QsIF9fbnRoLCBfX2xhc3QsIF9fdmFs
dWVfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
ciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX250aF9lbGVtZW50KF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfQ29tcGFyZSBfX2NvbXApIHsK
ICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
Y3V0ID0KICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJz
dCkvMiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0
IC0gMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKSks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgaWYgKF9fY3V0IDw9IF9f
bnRoKQogICAgICBfX2ZpcnN0ID0gX19jdXQ7CiAgICBlbHNlIAogICAgICBfX2xhc3QgPSBfX2N1
dDsKICB9CiAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2
b2lkIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbnRoLAogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0Nv
bXBhcmUgX19jb21wKSB7CiAgX19udGhfZWxlbWVudChfX2ZpcnN0LCBfX250aCwgX19sYXN0LCBf
X3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAsIF9fY29tcCk7Cn0KCgogCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9f
bG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9EaXN0YW5jZSopIAp7
CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVu
KTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgd2hpbGUg
KF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19m
aXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoKl9fbWlkZGxlIDwg
X192YWwpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAg
IF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogICAgZWxzZQogICAgICBfX2xlbiA9
IF9faGFsZjsKICB9CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlciBsb3dlcl9ib3VuZChfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKSB7CiAgcmV0dXJuIF9fbG93ZXJfYm91bmQo
X19maXJzdCwgX19sYXN0LCBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNl
X3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz
cyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX2xv
d2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2Nv
bXAsIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmly
c3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9f
bWlkZGxlOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwog
ICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAg
IGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3ZhbCkpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxl
OwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAg
fQogICAgZWxzZQogICAgICBfX2xlbiA9IF9faGFsZjsKICB9CiAgcmV0dXJuIF9fZmlyc3Q7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+
CmlubGluZSBfRm9yd2FyZEl0ZXIgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G
b3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
X1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKSB7CiAgcmV0dXJuIF9fbG93ZXJfYm91bmQoX19m
aXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlz
dGFuY2VfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX191cHBlcl9ib3VuZChf
Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBf
X2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNl
IF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsK
ICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZh
bmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICAgICBf
X2xlbiA9IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAg
ICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgfQog
IHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
VHA+CmlubGluZSBfRm9yd2FyZEl0ZXIgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX1RwJiBfX3ZhbCkgewogIHJldHVybiBfX3VwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwg
X192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkg
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t
cGFyZSwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX191cHBlcl9ib3VuZChfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7CiAg
X0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsK
ICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgd2hpbGUgKF9f
bGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJz
dDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoX19jb21wKF9fdmFsLCAq
X19taWRkbGUpKQogICAgICBfX2xlbiA9IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2ZpcnN0
ID0gX19taWRkbGU7CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFs
ZiAtIDE7CiAgICB9CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgX0ZvcndhcmRJdGVy
IHVwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJl
IF9fY29tcCkgewogIHJldHVybiBfX3VwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWws
IF9fY29tcCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9fZmlyc3Qg
KSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9E
aXN0YW5jZT4KcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KX19lcXVhbF9yYW5nZShf
Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3Zh
bCwKICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBk
aXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9G
b3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICB3aGlsZSAoX19sZW4gPiAw
KSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAg
YWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlmICgqX19taWRkbGUgPCBfX3ZhbCkgewog
ICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBf
X2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgICBlbHNlIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkK
ICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNlIHsKICAgICAgX19sZWZ0ID0gbG93ZXJfYm91
bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsKTsKICAgICAgYWR2YW5jZShfX2ZpcnN0LCBfX2xl
bik7CiAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3Zh
bCk7CiAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQs
IF9fcmlnaHQpOwogICAgfQogIH0KICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJk
SXRlcj4oX19maXJzdCwgX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9UcD4KaW5saW5lIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CmVxdWFs
X3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBf
VHAmIF9fdmFsKSB7CiAgcmV0dXJuIF9fZXF1YWxfcmFuZ2UoX19maXJzdCwgX19sYXN0LCBfX3Zh
bCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9fZmlyc3QgKSApOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl
LCBjbGFzcyBfRGlzdGFuY2U+CnBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fZXF1
YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0
IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7
CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVu
KTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBf
X3JpZ2h0OwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwog
ICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAg
IGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3ZhbCkpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxl
OwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAg
fQogICAgZWxzZSBpZiAoX19jb21wKF9fdmFsLCAqX19taWRkbGUpKQogICAgICBfX2xlbiA9IF9f
aGFsZjsKICAgIGVsc2UgewogICAgICBfX2xlZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21p
ZGRsZSwgX192YWwsIF9fY29tcCk7CiAgICAgIGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogICAg
ICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19maXJzdCwgX192YWwsIF9fY29t
cCk7CiAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQs
IF9fcmlnaHQpOwogICAgfQogIH0KICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJk
SXRlcj4oX19maXJzdCwgX19maXJzdCk7Cn0gICAgICAgICAgIAoKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHBhaXI8X0Zvcndh
cmRJdGVyLCBfRm9yd2FyZEl0ZXI+CmVxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICBfQ29tcGFy
ZSBfX2NvbXApIHsKICByZXR1cm4gX19lcXVhbF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFs
LCBfX2NvbXAsCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0
ICkgKTsKfSAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KYm9vbCBi
aW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkgewogIF9Gb3J3YXJkSXRlciBfX2kg
PSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICByZXR1cm4gX19pICE9IF9f
bGFzdCAmJiAhKF9fdmFsIDwgKl9faSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBfRm9y
d2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21w
KTsKICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhX19jb21wKF9fdmFsLCAqX19pKTsKfQoKIAoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091
dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu
cHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQp
IHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7
CiAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp
cnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQg
PSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICArK19fcmVzdWx0OwogIH0K
ICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwg
X19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ
dGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4KX091dHB1
dEl0ZXIgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy
LAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21w
KSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0Mikg
ewogICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgKl9fcmVzdWx0
ID0gKl9fZmlyc3QyOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgZWxzZSB7CiAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgICsrX19yZXN1
bHQ7CiAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBf
X2xhc3QxLCBfX3Jlc3VsdCkpOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJ
dGVyLCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Ug
X19sZW4xLCBfRGlzdGFuY2UgX19sZW4yKSB7CiAgaWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9
PSAwKQogICAgcmV0dXJuOwogIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0gMikgewogICAgaWYgKCpf
X21pZGRsZSA8ICpfX2ZpcnN0KQogICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOwog
ICAgcmV0dXJuOwogIH0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0
OwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICBfRGlzdGFu
Y2UgX19sZW4xMSA9IDA7CiAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogIGlmIChfX2xlbjEgPiBf
X2xlbjIpIHsKICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgYWR2YW5jZShfX2ZpcnN0X2N1
dCwgX19sZW4xMSk7CiAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19s
YXN0LCAqX19maXJzdF9jdXQpOwogICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwg
X19sZW4yMik7CiAgfQogIGVsc2UgewogICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICBhZHZh
bmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5k
KF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgIGRpc3RhbmNlKF9fZmlyc3Qs
IF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICB9CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21p
ZGRsZQogICAgPSByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwog
IF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRs
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMTEsIF9fbGVuMjIpOwogIF9fbWVyZ2Vf
d2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4x
IC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNs
YXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwg
X0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f
Y29tcCkgewogIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgIHJldHVybjsKICBp
ZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCAqX19m
aXJzdCkpCiAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICByZXR1cm47CiAg
fQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogIF9EaXN0YW5jZSBfX2xlbjExID0g
MDsKICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAg
X19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsK
ICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0
X2N1dCwgX19jb21wKTsKICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVu
MjIpOwogIH0KICBlbHNlIHsKICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgYWR2YW5jZShf
X3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2Zp
cnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21wKTsKICAgIGRpc3RhbmNlKF9fZmly
c3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICB9CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3
X21pZGRsZQogICAgPSByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQp
OwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21p
ZGRsZSwgX19sZW4xMSwgX19sZW4yMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7
CiAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19s
YXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0g
X19sZW4yMiwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEs
IGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+Cl9C
aWRpcmVjdGlvbmFsSXRlcjEgX19yb3RhdGVfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyMSBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlcjEgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9z
aXplKSB7CiAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlcl9lbmQ7CiAgaWYgKF9fbGVuMSA+
IF9fbGVuMiAmJiBfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX19idWZmZXJfZW5kID0g
Y29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmly
c3QsIF9fbWlkZGxlLCBfX2xhc3QpOwogICAgcmV0dXJuIGNvcHkoX19idWZmZXIsIF9fYnVmZmVy
X2VuZCwgX19maXJzdCk7CiAgfQogIGVsc2UgaWYgKF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7
CiAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAg
ICBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogICAgcmV0dXJuIGNvcHlfYmFja3dh
cmQoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICB9CiAgZWxzZQogICAgcmV0dXJu
IHJvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9C
aWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBj
bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIzPgpfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fbWVyZ2VfYmFj
a3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f
bGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIzIF9fcmVzdWx0KSB7CiAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICByZXR1cm4g
Y29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOwogIGlmIChfX2ZpcnN0
MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEs
IF9fcmVzdWx0KTsKICAtLV9fbGFzdDE7CiAgLS1fX2xhc3QyOwogIHdoaWxlICh0cnVlKSB7CiAg
ICBpZiAoKl9fbGFzdDIgPCAqX19sYXN0MSkgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3Qx
OwogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNr
d2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAg
IH0KICAgIGVsc2UgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICBpZiAoX19m
aXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwg
KytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MjsKICAgIH0KICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIy
LAogICAgICAgICAgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMywgY2xhc3MgX0NvbXBhcmU+Cl9C
aWRpcmVjdGlvbmFsSXRlcjMgX19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f
Zmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19maXJz
dDEgPT0gX19sYXN0MSkKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xhc3Qy
LCBfX3Jlc3VsdCk7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4gY29weV9i
YWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogIC0tX19sYXN0MTsKICAtLV9f
bGFzdDI7CiAgd2hpbGUgKHRydWUpIHsKICAgIGlmIChfX2NvbXAoKl9fbGFzdDIsICpfX2xhc3Qx
KSkgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICBpZiAoX19maXJzdDEgPT0g
X19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3Qy
LCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgIH0KICAgIGVsc2UgewogICAgICAqLS1f
X3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAg
ICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAg
ICAgIC0tX19sYXN0MjsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25h
bEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1BvaW50ZXI+CnZvaWQgX19tZXJnZV9hZGFw
dGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwgCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVu
MSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVm
ZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkgewogIGlmIChfX2xlbjEgPD0gX19sZW4yICYm
IF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBj
b3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICBtZXJnZShfX2J1ZmZlciwgX19i
dWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICB9CiAgZWxzZSBpZiAoX19s
ZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHko
X19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgX19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0
LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICB9CiAgZWxzZSB7
CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgX0Rpc3RhbmNlIF9fbGVu
MTEgPSAwOwogICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgaWYgKF9fbGVuMSA+IF9fbGVu
MikgewogICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1
dCwgX19sZW4xMSk7CiAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBf
X2xhc3QsICpfX2ZpcnN0X2N1dCk7CiAgICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9j
dXQsIF9fbGVuMjIpOyAKICAgIH0KICAgIGVsc2UgewogICAgICBfX2xlbjIyID0gX19sZW4yIC8g
MjsKICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICBfX2ZpcnN0X2N1
dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgICAg
ZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgfQogICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9CiAgICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmly
c3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAg
ICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBf
X21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVu
MTEsCiAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXpl
KTsKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFz
dCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4y
MiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRp
cmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfUG9pbnRlciwKICAgICAgICAg
IGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVy
IF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlk
ZGxlLCAKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAog
ICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZl
cl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYgKF9f
bGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVy
IF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgIG1l
cmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QsIF9f
Y29tcCk7CiAgfQogIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfUG9p
bnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAg
IF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9l
bmQsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICB9CiAgZWxzZSB7CiAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgX0Rpc3RhbmNlIF9fbGVuMTEg
PSAwOwogICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgaWYgKF9fbGVuMSA+IF9fbGVuMikg
ewogICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwg
X19sZW4xMSk7CiAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xh
c3QsICpfX2ZpcnN0X2N1dCwgX19jb21wKTsKICAgICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vj
b25kX2N1dCwgX19sZW4yMik7ICAgCiAgICB9CiAgICBlbHNlIHsKICAgICAgX19sZW4yMiA9IF9f
bGVuMiAvIDI7CiAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgX19m
aXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwg
X19jb21wKTsKICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbGVuMTEpOwog
ICAgfQogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9CiAgICAgIF9fcm90YXRl
X2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjEgLSBf
X2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZm
ZXJfc2l6ZSk7CiAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25l
d19taWRkbGUsIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVy
LCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwogICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRk
bGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAg
ICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21w
KTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9UcCwg
Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2lucGxhY2VfbWVyZ2VfYXV4KF9CaWRpcmVj
dGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqKSB7CiAgX0Rpc3RhbmNl
IF9fbGVuMSA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUsIF9fbGVuMSk7CiAgX0Rp
c3RhbmNlIF9fbGVuMiA9IDA7CiAgZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCwgX19sZW4yKTsK
CiAgX1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVHA+IF9fYnVmKF9fZmly
c3QsIF9fbGFzdCk7CiAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgIF9fbWVyZ2Vfd2l0aG91
dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIpOwogIGVs
c2UKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4x
LCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZShf
X2J1Zi5zaXplKCkpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xh
c3MgX1RwLCAKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+CmlubGlu
ZSB2b2lkIF9faW5wbGFjZV9tZXJnZV9hdXgoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh
c3QsIF9UcCosIF9EaXN0YW5jZSosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKSB7CiAgX0Rpc3RhbmNlIF9fbGVuMSA9IDA7CiAgZGlzdGFuY2UoX19maXJz
dCwgX19taWRkbGUsIF9fbGVuMSk7CiAgX0Rpc3RhbmNlIF9fbGVuMiA9IDA7CiAgZGlzdGFuY2Uo
X19taWRkbGUsIF9fbGFzdCwgX19sZW4yKTsKCiAgX1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0
aW9uYWxJdGVyLCBfVHA+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKF9fYnVmLmJlZ2lu
KCkgPT0gMCkKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9f
bGFzdCwgX19sZW4xLCBfX2xlbjIsIF9fY29tcCk7CiAgZWxzZQogICAgX19tZXJnZV9hZGFwdGl2
ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAg
ICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlKF9fYnVmLnNpemUoKSksCiAgICAgICAg
ICAgICAgICAgICAgIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0
ZXI+CmlubGluZSB2b2lkIGlucGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpIHsKICBp
ZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpCiAgICByZXR1cm47
CiAgX19pbnBsYWNlX21lcmdlX2F1eChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLCBfX2Rpc3RhbmNlX3R5cGUo
IF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFz
cyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIg
X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19t
aWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFz
dCwgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwgX19taWRk
bGUgPT0gX19sYXN0KQogICAgcmV0dXJuOwogIF9faW5wbGFjZV9tZXJnZV9hdXgoX19maXJzdCwg
X19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19m
aXJzdCApICwgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICAg
ICAgX19jb21wKTsKfQoKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz
cyBfSW5wdXRJdGVyMj4KYm9vbCBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0
SXRlcjIgX19sYXN0MikgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy
ICE9IF9fbGFzdDIpCiAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICByZXR1cm4g
ZmFsc2U7CiAgICBlbHNlIGlmKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgCiAgICAgICsrX19maXJz
dDE7CiAgICBlbHNlCiAgICAgICsrX19maXJzdDEsICsrX19maXJzdDI7CgogIHJldHVybiBfX2Zp
cnN0MiA9PSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9J
bnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2Zp
cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp
cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwgX0NvbXBhcmUgX19jb21wKSB7CiAgd2hpbGUgKF9f
Zmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmIChfX2NvbXAo
Kl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBlbHNlIGlmKF9f
Y29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIAogICAgICArK19fZmlyc3QxOwogICAgZWxzZQog
ICAgICArK19fZmlyc3QxLCArK19fZmlyc3QyOwoKICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0
MjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xh
c3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0
MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIy
IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQpIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp
cnN0MiAhPSBfX2xhc3QyKSB7CiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAg
ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgIGVsc2Ug
aWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7
CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgKytf
X3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJz
dDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwg
Y2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0Nv
bXBhcmU+Cl9PdXRwdXRJdGVyIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
LCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg
X19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3Qx
ICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19m
aXJzdDIpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsK
ICAgIH0KICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAg
Kl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgZWxzZSB7
CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytf
X2ZpcnN0MjsKICAgIH0KICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBjb3B5KF9fZmlyc3Qy
LCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRl
cj4KX091dHB1dEl0ZXIgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu
cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3Qx
ICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIAogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0Mikg
CiAgICAgICsrX19maXJzdDE7CiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIAog
ICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsK
ICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3VsdDsKICAg
IH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xh
c3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBh
cmU+Cl9PdXRwdXRJdGVyIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9J
bnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRl
cjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkgewogIHdoaWxlIChf
X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21w
KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgKytfX2ZpcnN0MTsKICAgIGVsc2UgaWYgKF9f
Y29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICsrX19maXJzdDI7CiAgICBlbHNlIHsK
ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19f
Zmlyc3QyOwogICAgICArK19fcmVzdWx0OwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1
dEl0ZXI+Cl9PdXRwdXRJdGVyIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBf
SW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm
JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0Mikgewog
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19y
ZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICsr
X19maXJzdDI7CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsK
ICAgIH0KICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0
SXRlciwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4KX091dHB1dEl0ZXIgc2V0X2RpZmZlcmVu
Y2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy
LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21w
YXJlIF9fY29tcCkgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9
IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAq
X19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19yZXN1bHQ7
CiAgICB9CiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICAr
K19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7
CiAgICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1
dEl0ZXI+Cl9PdXRwdXRJdGVyIApzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEg
X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBf
SW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9f
bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJz
dDIpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAg
ICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7
CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytf
X3Jlc3VsdDsKICAgIH0KICAgIGVsc2UgewogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmly
c3QyOwogICAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3Qx
LCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNs
YXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21w
YXJlPgpfT3V0cHV0SXRlciAKc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9f
Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9D
b21wYXJlIF9fY29tcCkgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy
ICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAg
ICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19yZXN1
bHQ7CiAgICB9CiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAg
ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jl
c3VsdDsKICAgIH0KICAgIGVsc2UgewogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3Qy
OwogICAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBf
X2xhc3QxLCBfX3Jlc3VsdCkpOwp9CgogCiAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+
Cl9Gb3J3YXJkSXRlciBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCkgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAg
X0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9f
bGFzdCkgCiAgICBpZiAoKl9fcmVzdWx0IDwgKl9fZmlyc3QpCiAgICAgIF9fcmVzdWx0ID0gX19m
aXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9Db21wYXJlPgpfRm9yd2FyZEl0ZXIgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
Q29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0
OwogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAh
PSBfX2xhc3QpIAogICAgaWYgKF9fY29tcCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgX19yZXN1bHQg
PSBfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlcj4KX0ZvcndhcmRJdGVyIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0KSB7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJz
dDsKICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3Qg
IT0gX19sYXN0KSAKICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdCkKICAgICAgX19yZXN1bHQg
PSBfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlciwgY2xhc3MgX0NvbXBhcmU+Cl9Gb3J3YXJkSXRlciBtaW5fZWxlbWVudChfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Db21wYXJlIF9fY29tcCkgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9f
Zmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2Zp
cnN0ICE9IF9fbGFzdCkgCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHQpKQogICAg
ICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgogCiAKCnRlbXBsYXRl
IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CmJvb2wgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkgewogIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19pID0gX19maXJzdDsKICArK19faTsKICBpZiAoX19pID09IF9fbGFzdCkKICAgIHJldHVybiBm
YWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7OykgewogICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAtLV9faTsKICAgIGlmICgqX19pIDwgKl9faWkpIHsK
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCEoKl9f
aSA8ICotLV9faikpCiAgICAgICAge30KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAg
cmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChf
X2kgPT0gX19maXJzdCkgewogICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJl
dHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0
ZXIsIGNsYXNzIF9Db21wYXJlPgpib29sIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1
cm4gZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgKytfX2k7CiAg
aWYgKF9faSA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX19pID0gX19sYXN0OwogIC0t
X19pOwoKICBmb3IoOzspIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAg
LS1fX2k7CiAgICBpZiAoX19jb21wKCpfX2ksICpfX2lpKSkgewogICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19qID0gX19sYXN0OwogICAgICB3aGlsZSAoIV9fY29tcCgqX19pLCAqLS1fX2opKQog
ICAgICAgIHt9CiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgIHJldmVyc2UoX19paSwg
X19sYXN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoX19pID09IF9fZmlyc3Qp
IHsKICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICByZXR1cm4gZmFsc2U7CiAg
ICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgpib29sIHByZXZf
cGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2xhc3QpIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgKytfX2k7CiAgaWYgKF9faSA9PSBf
X2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX19pID0gX19sYXN0OwogIC0tX19pOwoKICBmb3Io
OzspIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgLS1fX2k7CiAgICBp
ZiAoKl9faWkgPCAqX19pKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7
CiAgICAgIHdoaWxlICghKCotLV9faiA8ICpfX2kpKQogICAgICAgIHt9CiAgICAgIGl0ZXJfc3dh
cChfX2ksIF9faik7CiAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgcmV0dXJuIHRy
dWU7CiAgICB9CiAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgcmV2ZXJzZShfX2ZpcnN0
LCBfX2xhc3QpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBwcmV2X3Blcm11dGF0
aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBf
X2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwog
IF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwogICAgaWYgKF9fY29tcCgqX19paSwgKl9faSkpIHsK
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCFfX2Nv
bXAoKi0tX19qLCAqX19pKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwog
ICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAg
aWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0lucHV0SXRlciBmaW5kX2ZpcnN0X29mKF9JbnB1dEl0
ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIpCnsKICBmb3IgKCA7
IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpIAogICAgZm9yIChfRm9yd2FyZEl0ZXIg
X19pdGVyID0gX19maXJzdDI7IF9faXRlciAhPSBfX2xhc3QyOyArK19faXRlcikKICAgICAgaWYg
KCpfX2ZpcnN0MSA9PSAqX19pdGVyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICByZXR1cm4g
X19sYXN0MTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRl
ciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0lucHV0SXRlciBmaW5kX2ZpcnN0X29mKF9JbnB1
dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKewogIGZvciAoIDsgX19m
aXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSkgCiAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0
ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICBpZiAoX19j
b21wKCpfX2ZpcnN0MSwgKl9faXRlcikpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogIHJldHVy
biBfX2xhc3QxOwp9CgoKIAogCiAKIAoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwg
Y2xhc3MgX0ZvcndhcmRJdGVyMj4KX0ZvcndhcmRJdGVyMSBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRl
cjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9y
X3RhZykKewogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIF9fbGFzdDE7CiAg
ZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgIHdoaWxlICgx
KSB7CiAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgPSBzZWFyY2goX19m
aXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgICAgaWYgKF9fbmV3X3Jlc3Vs
dCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgZWxzZSB7CiAgICAg
ICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgX19maXJzdDEgPSBfX25ld19yZXN1
bHQ7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICBjbGFzcyBf
QmluYXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIxIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBf
X2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFn
LAogICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKICBp
ZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBfX2xhc3QxOwogIGVsc2UgewogICAg
X0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICB3aGlsZSAoMSkgewogICAgICBf
Rm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xh
c3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsKICAgICAgaWYgKF9fbmV3X3Jlc3VsdCA9
PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgZWxzZSB7CiAgICAgICAg
X19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgX19maXJzdDEgPSBfX25ld19yZXN1bHQ7
CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgfQogIH0KfQoKIAoKCnRlbXBsYXRlIDxj
bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyPgpfQmlk
aXJlY3Rpb25hbEl0ZXIxCl9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwg
X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
cjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICBiaWRp
cmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCnsKICB0
eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwog
IHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7
CgogIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9f
Zmlyc3QyKTsKICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3Qx
KSwgX19ybGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19s
YXN0MiksIF9fcmxhc3QyKTsKCiAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgIHJldHVy
biBfX2xhc3QxOwogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9f
cnJlc3VsdC5iYXNlKCk7CiAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIs
IF9fbGFzdDIpKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
QmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAg
Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0JpZGlyZWN0aW9uYWxJdGVyMQpfX2ZpbmRfZW5kKF9C
aWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwK
ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0
ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGly
ZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCAKICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29t
cCkKewogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIxPiBfUmV2
SXRlcjE7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9S
ZXZJdGVyMjsKCiAgX1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmlyc3QxKTsKICBfUmV2SXRlcjIgX19y
bGFzdDIoX19maXJzdDIpOwogIF9SZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIx
KF9fbGFzdDEpLCBfX3JsYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJ
dGVyMihfX2xhc3QyKSwgX19ybGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbXApOwoKICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQogICAgcmV0dXJuIF9fbGFzdDE7
CiAgZWxzZSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0ID0gX19ycmVzdWx0LmJh
c2UoKTsKICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5jZShfX2ZpcnN0MiwgX19sYXN0Mikp
OwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KfQoKCiAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgppbmxpbmUgX0ZvcndhcmRJdGVyMSAKZmluZF9l
bmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLCAKICAgICAg
ICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQp7CiAgcmV0
dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAg
ICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QxICkgLAogICAgICAg
ICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QyICkgKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsIAogICAgICAgICAg
Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KaW5saW5lIF9Gb3J3YXJkSXRlcjEgCmZpbmRfZW5kKF9G
b3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwgCiAgICAgICAgIF9G
b3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgX0Jp
bmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKICByZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0MSwgX19s
YXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9j
YXRlZ29yeSggX19maXJzdDEgKSAsCiAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRl
Z29yeSggX19maXJzdDIgKSAsCiAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoKIAogCiAK
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpib29s
IF9faXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19uKQp7CiAg
X0Rpc3RhbmNlIF9fcGFyZW50ID0gMDsKICBmb3IgKF9EaXN0YW5jZSBfX2NoaWxkID0gMTsgX19j
aGlsZCA8IF9fbjsgKytfX2NoaWxkKSB7CiAgICBpZiAoX19maXJzdFtfX3BhcmVudF0gPCBfX2Zp
cnN0W19fY2hpbGRdKSAKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKChfX2NoaWxkICYgMSkg
PT0gMCkKICAgICAgKytfX3BhcmVudDsKICB9CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfU3RyaWN0V2Vh
a09yZGVyaW5nPgpib29sIF9faXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfU3Ry
aWN0V2Vha09yZGVyaW5nIF9fY29tcCwKICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbikKewog
IF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7CiAgZm9yIChfRGlzdGFuY2UgX19jaGlsZCA9IDE7IF9f
Y2hpbGQgPCBfX247ICsrX19jaGlsZCkgewogICAgaWYgKF9fY29tcChfX2ZpcnN0W19fcGFyZW50
XSwgX19maXJzdFtfX2NoaWxkXSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICgoX19jaGls
ZCAmIDEpID09IDApCiAgICAgICsrX19wYXJlbnQ7CiAgfQogIHJldHVybiB0cnVlOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSBib29sIGlzX2hlYXAoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CiAgcmV0dXJu
IF9faXNfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4KaW5saW5lIGJv
b2wgaXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsK
ICByZXR1cm4gX19pc19oZWFwKF9fZmlyc3QsIF9fY29tcCwgX19sYXN0IC0gX19maXJzdCk7Cn0K
CiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgpib29sIGlzX3NvcnRlZChfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKewogIGlmIChfX2ZpcnN0ID09
IF9fbGFzdCkKICAgIHJldHVybiB0cnVlOwoKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJz
dDsKICBmb3IgKCsrX19uZXh0OyBfX25leHQgIT0gX19sYXN0OyBfX2ZpcnN0ID0gX19uZXh0LCAr
K19fbmV4dCkgewogICAgaWYgKCpfX25leHQgPCAqX19maXJzdCkKICAgICAgcmV0dXJuIGZhbHNl
OwogIH0KCiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs
YXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+CmJvb2wgaXNfc29ydGVkKF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfU3RyaWN0V2Vha09yZGVy
aW5nIF9fY29tcCkKewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiB0cnVlOwoK
ICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICBmb3IgKCsrX19uZXh0OyBfX25leHQg
IT0gX19sYXN0OyBfX2ZpcnN0ID0gX19uZXh0LCArK19fbmV4dCkgewogICAgaWYgKF9fY29tcCgq
X19uZXh0LCAqX19maXJzdCkpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIHJldHVybiB0cnVl
Owp9CgoKCgoKIAoKCgogCiAKIAojIDM0ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNv
bGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxnb3JpdGhtIiAyIDMK
CgoKCiAKIAogCiMgNiAidF9ndGsuY3BwIiAyCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kz
ODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9mdW5jdGlv
bmFsIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4
Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDM0MiAiL29w
dC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy9pbmNsdWRlL3N0ZGRl
Zi5oIiAzIDQKCiMgMTkgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8y
Ljk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9mdW5jdGlvbmFsIiAyIDMKCiMgMSAiL29w
dC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3N0bF9mdW5jdGlvbi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKIAoKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0
IHVuYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcgYXJndW1lbnRfdHlwZTsKICB0eXBlZGVm
IF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9B
cmcyLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgYmluYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9B
cmcxIGZpcnN0X2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfQXJnMiBzZWNvbmRfYXJndW1lbnRf
dHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07ICAgICAgCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxf
VHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv
bnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0
IG1pbnVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVy
YXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194
IC0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbXVsdGlwbGllcyA6IHB1
YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25z
dCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAqIF9feTsgfQp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMgOiBwdWJsaWMgYmluYXJ5X2Z1
bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNv
bnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7IH0KfTsKCiAKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+IGlubGluZSBfVHAgaWRlbnRpdHlfZWxlbWVudChwbHVzPF9UcD4pIHsKICBy
ZXR1cm4gX1RwKDApOwp9CnRlbXBsYXRlIDxjbGFzcyBfVHA+IGlubGluZSBfVHAgaWRlbnRpdHlf
ZWxlbWVudChtdWx0aXBsaWVzPF9UcD4pIHsKICByZXR1cm4gX1RwKDEpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9U
cCxfVHA+IAp7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195
KSBjb25zdCB7IHJldHVybiBfX3ggJSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0
cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4gCnsKICBfVHAgb3Bl
cmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gLV9feDsgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4Kc3RydWN0IGVxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf
VHAsX1RwLGJvb2w+IAp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBf
VHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID09IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4Kc3RydWN0IG5vdF9lcXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9U
cCxib29sPiAKewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBf
X3kpIGNvbnN0IHsgcmV0dXJuIF9feCAhPSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+
CnN0cnVjdCBncmVhdGVyIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+IAp7
CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3Qg
eyByZXR1cm4gX194ID4gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVz
cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPiAKewogIGJvb2wgb3BlcmF0
b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8
IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXJfZXF1YWwgOiBw
dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShj
b25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA+PSBfX3k7
IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzX2VxdWFsIDogcHVibGljIGJp
bmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+IAp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9U
cCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDw9IF9feTsgfQp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfYW5kIDogcHVibGljIGJpbmFyeV9m
dW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs
IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJiYgX195OyB9Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9vciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248
X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBf
VHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IHx8IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4Kc3RydWN0IGxvZ2ljYWxfbm90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxib29s
Pgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAhX194
OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgdW5hcnlfbmVnYXRlCiAg
OiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlw
ZSwgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhw
bGljaXQgdW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9wcmVkKF9feCkg
e30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRf
dHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194KTsKICB9Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPiAK
bm90MShjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4gdW5hcnlfbmVnYXRlPF9Q
cmVkaWNhdGU+KF9fcHJlZCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPiAKY2xhc3Mg
YmluYXJ5X25lZ2F0ZSAKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRp
Y2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGlj
OgogIGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3By
ZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpm
aXJzdF9hcmd1bWVudF90eXBlJiBfX3gsIAogICAgICAgICAgICAgICAgICBjb25zdCB0eXBlbmFt
ZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195KSBjb25zdAogIHsKICAgIHJl
dHVybiAhX01fcHJlZChfX3gsIF9feSk7IAogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGlj
YXRlPgppbmxpbmUgYmluYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPiAKbm90Mihjb25zdCBfUHJlZGlj
YXRlJiBfX3ByZWQpCnsKICByZXR1cm4gYmluYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3ByZWQp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4gCmNsYXNzIGJpbmRlcjFzdAogIDogcHVi
bGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90
eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3Vs
dF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRp
b246OmZpcnN0X2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5kZXIxc3QoY29uc3Qg
X09wZXJhdGlvbiYgX194LAogICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpm
aXJzdF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQog
IHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBl
bmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICBy
ZXR1cm4gb3AodmFsdWUsIF9feCk7IAogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9u
LCBjbGFzcyBfVHA+CmlubGluZSBiaW5kZXIxc3Q8X09wZXJhdGlvbj4gCmJpbmQxc3QoY29uc3Qg
X09wZXJhdGlvbiYgX19vcGVyLCBjb25zdCBfVHAmIF9feCkgCnsKICB0eXBlZGVmIHR5cGVuYW1l
IF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgX0FyZzFfdHlwZTsKICByZXR1cm4gYmlu
ZGVyMXN0PF9PcGVyYXRpb24+KF9fb3BlciwgX0FyZzFfdHlwZShfX3gpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9PcGVyYXRpb24+IApjbGFzcyBiaW5kZXIybmQKICA6IHB1YmxpYyB1bmFyeV9mdW5j
dGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3Rl
Y3RlZDoKICBfT3BlcmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1
bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9f
eCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50
X3R5cGUmIF9feSkgCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9P
cGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0
aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcChfX3gs
IHZhbHVlKTsgCiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNsYXNzIF9UcD4K
aW5saW5lIGJpbmRlcjJuZDxfT3BlcmF0aW9uPiAKYmluZDJuZChjb25zdCBfT3BlcmF0aW9uJiBf
X29wZXIsIGNvbnN0IF9UcCYgX194KSAKewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6
c2Vjb25kX2FyZ3VtZW50X3R5cGUgX0FyZzJfdHlwZTsKICByZXR1cm4gYmluZGVyMm5kPF9PcGVy
YXRpb24+KF9fb3BlciwgX0FyZzJfdHlwZShfX3gpKTsKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9P
cGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMj4KY2xhc3MgdW5hcnlfY29tcG9zZQogIDogcHVi
bGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlw
ZT4gCnsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24xIF9fb3AxOwogIF9PcGVyYXRpb24yIF9fb3Ay
OwpwdWJsaWM6CiAgdW5hcnlfY29tcG9zZShjb25zdCBfT3BlcmF0aW9uMSYgX194LCBjb25zdCBf
T3BlcmF0aW9uMiYgX195KSAKICAgIDogX19vcDEoX194KSwgX19vcDIoX195KSB7fQogIHR5cGVu
YW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUg
X09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9fb3Ax
KF9fb3AyKF9feCkpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3Mg
X09wZXJhdGlvbjI+CmlubGluZSB1bmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24y
PiAKY29tcG9zZTEoY29uc3QgX09wZXJhdGlvbjEmIF9fb3AxLCBjb25zdCBfT3BlcmF0aW9uMiYg
X19vcDIpCnsKICByZXR1cm4gdW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSxfT3BlcmF0aW9uMj4o
X19vcDEsIF9fb3AyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3Bl
cmF0aW9uMiwgY2xhc3MgX09wZXJhdGlvbjM+CmNsYXNzIGJpbmFyeV9jb21wb3NlCiAgOiBwdWJs
aWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBl
PiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uMSBfTV9vcDE7CiAgX09wZXJhdGlvbjIgX01fb3Ay
OwogIF9PcGVyYXRpb24zIF9NX29wMzsKcHVibGljOgogIGJpbmFyeV9jb21wb3NlKGNvbnN0IF9P
cGVyYXRpb24xJiBfX3gsIGNvbnN0IF9PcGVyYXRpb24yJiBfX3ksIAogICAgICAgICAgICAgICAg
IGNvbnN0IF9PcGVyYXRpb24zJiBfX3opIAogICAgOiBfTV9vcDEoX194KSwgX01fb3AyKF9feSks
IF9NX29wMyhfX3opIHsgfQogIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZQogIG9w
ZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUmIF9feCkg
Y29uc3QgewogICAgcmV0dXJuIF9NX29wMShfTV9vcDIoX194KSwgX01fb3AzKF9feCkpOwogIH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjIsIGNsYXNz
IF9PcGVyYXRpb24zPgppbmxpbmUgYmluYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsIF9PcGVyYXRp
b24yLCBfT3BlcmF0aW9uMz4gCmNvbXBvc2UyKGNvbnN0IF9PcGVyYXRpb24xJiBfX29wMSwgY29u
c3QgX09wZXJhdGlvbjImIF9fb3AyLCAKICAgICAgICAgY29uc3QgX09wZXJhdGlvbjMmIF9fb3Az
KQp7CiAgcmV0dXJuIGJpbmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24yLF9PcGVy
YXRpb24zPgogICAgKF9fb3AxLCBfX29wMiwgX19vcDMpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Fy
ZywgY2xhc3MgX1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbiA6IHB1Ymxp
YyB1bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiB7CnByb3RlY3RlZDoKICBfUmVzdWx0ICgq
X01fcHRyKShfQXJnKTsKcHVibGljOgogIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oKSB7fQog
IGV4cGxpY2l0IHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZykp
IDogX01fcHRyKF9feCkge30KICBfUmVzdWx0IG9wZXJhdG9yKCkoX0FyZyBfX3gpIGNvbnN0IHsg
cmV0dXJuIF9NX3B0cihfX3gpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jl
c3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gcHRy
X2Z1bihfUmVzdWx0ICgqX194KShfQXJnKSkKewogIHJldHVybiBwb2ludGVyX3RvX3VuYXJ5X2Z1
bmN0aW9uPF9BcmcsIF9SZXN1bHQ+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xh
c3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9u
IDogCiAgcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PiB7CnByb3Rl
Y3RlZDoKICAgIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcxLCBfQXJnMik7CnB1YmxpYzoKICAgIHBv
aW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKCkge30KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9fYmlu
YXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpIAogICAgICA6IF9NX3B0
cihfX3gpIHt9CiAgICBfUmVzdWx0IG9wZXJhdG9yKCkoX0FyZzEgX194LCBfQXJnMiBfX3kpIGNv
bnN0IHsKICAgICAgcmV0dXJuIF9NX3B0cihfX3gsIF9feSk7CiAgICB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90
b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4gCnB0cl9mdW4oX1Jlc3VsdCAo
Kl9feCkoX0FyZzEsIF9BcmcyKSkgewogIHJldHVybiBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlv
bjxfQXJnMSxfQXJnMixfUmVzdWx0PihfX3gpOwp9CgogCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0
cnVjdCBfSWRlbnRpdHkgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4gewogIGNvbnN0
IF9UcCYgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3QgaWRlbnRpdHkgOiBwdWJsaWMgX0lkZW50aXR5
PF9UcD4ge307CgogCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3Qxc3QgOiBw
dWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlPiB7
CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1Bh
aXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5maXJzdDsKICB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0Mm5kIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9Q
YWlyLCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGU+CnsKICBjb25zdCB0eXBlbmFtZSBfUGFp
cjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAg
cmV0dXJuIF9feC5zZWNvbmQ7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPiBzdHJ1Y3Qg
c2VsZWN0MXN0IDogcHVibGljIF9TZWxlY3Qxc3Q8X1BhaXI+IHt9Owp0ZW1wbGF0ZSA8Y2xhc3Mg
X1BhaXI+IHN0cnVjdCBzZWxlY3QybmQgOiBwdWJsaWMgX1NlbGVjdDJuZDxfUGFpcj4ge307Cgog
CnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+CnN0cnVjdCBfUHJvamVjdDFzdCA6
IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsIF9BcmcyLCBfQXJnMT4gewogIF9BcmcxIG9w
ZXJhdG9yKCkoY29uc3QgX0FyZzEmIF9feCwgY29uc3QgX0FyZzImKSBjb25zdCB7IHJldHVybiBf
X3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+CnN0cnVjdCBfUHJv
amVjdDJuZCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsIF9BcmcyLCBfQXJnMj4gewog
IF9BcmcyIG9wZXJhdG9yKCkoY29uc3QgX0FyZzEmLCBjb25zdCBfQXJnMiYgX195KSBjb25zdCB7
IHJldHVybiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+IApz
dHJ1Y3QgcHJvamVjdDFzdCA6IHB1YmxpYyBfUHJvamVjdDFzdDxfQXJnMSwgX0FyZzI+IHt9OwoK
dGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IHByb2plY3QybmQgOiBw
dWJsaWMgX1Byb2plY3QybmQ8X0FyZzEsIF9BcmcyPiB7fTsKCiAKIAogCnRlbXBsYXRlIDxjbGFz
cyBfUmVzdWx0PgpzdHJ1Y3QgY29uc3RhbnRfdm9pZF9mdW4KewogIHR5cGVkZWYgX1Jlc3VsdCBy
ZXN1bHRfdHlwZTsKICByZXN1bHRfdHlwZSBfX3ZhbDsKICBjb25zdGFudF92b2lkX2Z1bihjb25z
dCByZXN1bHRfdHlwZSYgX192KSA6IF9fdmFsKF9fdikge30KICBjb25zdCByZXN1bHRfdHlwZSYg
b3BlcmF0b3IoKSgpIGNvbnN0IHsgcmV0dXJuIF9fdmFsOyB9Cn07ICAKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1Jlc3VsdCwgY2xhc3MgX0FyZ3VtZW50ID0gX1Jlc3VsdD4KCgoKc3RydWN0IGNvbnN0YW50
X3VuYXJ5X2Z1biA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfQXJndW1lbnQsIF9SZXN1bHQ+IHsK
ICBfUmVzdWx0IF9NX3ZhbDsKICBjb25zdGFudF91bmFyeV9mdW4oY29uc3QgX1Jlc3VsdCYgX192
KSA6IF9NX3ZhbChfX3YpIHt9CiAgY29uc3QgX1Jlc3VsdCYgb3BlcmF0b3IoKShjb25zdCBfQXJn
dW1lbnQmKSBjb25zdCB7IHJldHVybiBfTV92YWw7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl
c3VsdCwgY2xhc3MgX0FyZzEgPSBfUmVzdWx0LCBjbGFzcyBfQXJnMiA9IF9BcmcxPgoKCgpzdHJ1
Y3QgY29uc3RhbnRfYmluYXJ5X2Z1biA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsIF9B
cmcyLCBfUmVzdWx0PiB7CiAgX1Jlc3VsdCBfTV92YWw7CiAgY29uc3RhbnRfYmluYXJ5X2Z1bihj
b25zdCBfUmVzdWx0JiBfX3YpIDogX01fdmFsKF9fdikge30KICBjb25zdCBfUmVzdWx0JiBvcGVy
YXRvcigpKGNvbnN0IF9BcmcxJiwgY29uc3QgX0FyZzImKSBjb25zdCB7CiAgICByZXR1cm4gX01f
dmFsOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgppbmxpbmUgY29uc3RhbnRfdm9p
ZF9mdW48X1Jlc3VsdD4gY29uc3RhbnQwKGNvbnN0IF9SZXN1bHQmIF9fdmFsKQp7CiAgcmV0dXJu
IGNvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+KF9fdmFsKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S
ZXN1bHQ+CmlubGluZSBjb25zdGFudF91bmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0PiBjb25zdGFu
dDEoY29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4gY29uc3RhbnRfdW5hcnlfZnVuPF9S
ZXN1bHQsX1Jlc3VsdD4oX192YWwpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5saW5l
IGNvbnN0YW50X2JpbmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0LF9SZXN1bHQ+IApjb25zdGFudDIo
Y29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4gY29uc3RhbnRfYmluYXJ5X2Z1bjxfUmVz
dWx0LF9SZXN1bHQsX1Jlc3VsdD4oX192YWwpOwp9CgogCiAKY2xhc3Mgc3VidHJhY3RpdmVfcm5n
IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50PiB7CnBy
aXZhdGU6CiAgdW5zaWduZWQgaW50IF9NX3RhYmxlWzU1XTsKICBzaXplX3QgX01faW5kZXgxOwog
IHNpemVfdCBfTV9pbmRleDI7CnB1YmxpYzoKICB1bnNpZ25lZCBpbnQgb3BlcmF0b3IoKSh1bnNp
Z25lZCBpbnQgX19saW1pdCkgewogICAgX01faW5kZXgxID0gKF9NX2luZGV4MSArIDEpICUgNTU7
CiAgICBfTV9pbmRleDIgPSAoX01faW5kZXgyICsgMSkgJSA1NTsKICAgIF9NX3RhYmxlW19NX2lu
ZGV4MV0gPSBfTV90YWJsZVtfTV9pbmRleDFdIC0gX01fdGFibGVbX01faW5kZXgyXTsKICAgIHJl
dHVybiBfTV90YWJsZVtfTV9pbmRleDFdICUgX19saW1pdDsKICB9CgogIHZvaWQgX01faW5pdGlh
bGl6ZSh1bnNpZ25lZCBpbnQgX19zZWVkKQogIHsKICAgIHVuc2lnbmVkIGludCBfX2sgPSAxOwog
ICAgX01fdGFibGVbNTRdID0gX19zZWVkOwogICAgc2l6ZV90IF9faTsKICAgIGZvciAoX19pID0g
MDsgX19pIDwgNTQ7IF9faSsrKSB7CiAgICAgICAgc2l6ZV90IF9faWkgPSAoMjEgKiAoX19pICsg
MSkgJSA1NSkgLSAxOwogICAgICAgIF9NX3RhYmxlW19faWldID0gX19rOwogICAgICAgIF9fayA9
IF9fc2VlZCAtIF9fazsKICAgICAgICBfX3NlZWQgPSBfTV90YWJsZVtfX2lpXTsKICAgIH0KICAg
IGZvciAoaW50IF9fbG9vcCA9IDA7IF9fbG9vcCA8IDQ7IF9fbG9vcCsrKSB7CiAgICAgICAgZm9y
IChfX2kgPSAwOyBfX2kgPCA1NTsgX19pKyspCiAgICAgICAgICAgIF9NX3RhYmxlW19faV0gPSBf
TV90YWJsZVtfX2ldIC0gX01fdGFibGVbKDEgKyBfX2kgKyAzMCkgJSA1NV07CiAgICB9CiAgICBf
TV9pbmRleDEgPSAwOwogICAgX01faW5kZXgyID0gMzE7CiAgfQoKICBzdWJ0cmFjdGl2ZV9ybmco
dW5zaWduZWQgaW50IF9fc2VlZCkgeyBfTV9pbml0aWFsaXplKF9fc2VlZCk7IH0KICBzdWJ0cmFj
dGl2ZV9ybmcoKSB7IF9NX2luaXRpYWxpemUoMTYxODAzMzk4dSk7IH0KfTsKCgogCgogCiAKIAog
CiAKIAogCgogCiAKIAogCiAKCiAKIAogCiAKIAoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz
cyBfVHA+CmNsYXNzIG1lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLF9SZXQ+
IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpKSA6IF9N
X2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChf
X3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBs
YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdCA6IHB1Ymxp
YyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNv
bnN0X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30K
ICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipf
TV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90IDogcHVibGlj
IHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3Jl
Zl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3Io
KShfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9S
ZXQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpj
bGFzcyBjb25zdF9tZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0
PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9f
cGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAm
IF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9U
cDo6Kl9NX2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBj
bGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAq
LF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdChfUmV0IChfVHA6Oipf
X3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19wLCBf
QXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBf
UmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf
VHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1
bmN0aW9uPGNvbnN0IF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9t
ZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30K
ICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdAogICAgeyBy
ZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShf
QXJnKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9B
cmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0Fy
ZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6Oipf
X3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yLCBf
QXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9S
ZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U
cCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9m
dW4xX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30K
ICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVy
biAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZykg
Y29uc3Q7Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fdDx2b2lkLCBf
VHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGlj
aXQgbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQg
b3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgog
IHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25z
dF9tZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAq
LHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdCh2b2lkIChfVHA6Oipf
X3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1Rw
KiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6Oipf
TV9mKSgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZf
dDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoK
ICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3Bm
KSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9
CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+
CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5j
dGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdCh2
b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9y
KCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIHZv
aWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QXJnPgpjbGFzcyBtZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4gOiBwdWJsaWMgYmluYXJ5X2Z1
bmN0aW9uPF9UcCosX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KHZv
aWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCko
X1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6
CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4gCiAgOiBwdWJs
aWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBs
aWNpdCBjb25zdF9tZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9N
X2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBj
b25zdCB7IChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZiko
X0FyZykgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBt
ZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9u
PF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KHZvaWQg
KF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1Rw
JiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2
b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
cmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29u
c3RfbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihf
X3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0
IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9Bcmcp
IGNvbnN0Owp9OwoKCgogCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpp
bmxpbmUgbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7
IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0
LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1Jl
dCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9U
cD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1lbV9m
dW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSkgCiAgeyBy
ZXR1cm4gbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9S
ZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9m
dW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVu
X3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1Rw
LCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9S
ZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJn
PihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpp
bmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6
Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxf
QXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJn
PgppbmxpbmUgbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bl9yZWYoX1JldCAo
X1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJn
PihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpp
bmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4KbWVtX2Z1bl9yZWYoX1Jl
dCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV9yZWZf
dDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1Rw
LCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuMShf
UmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0Fy
Zz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4K
aW5saW5lIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bjEoX1JldCAoX1Rw
OjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1Rw
LF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9B
cmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuMV9yZWYoX1Jl
dCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxf
QXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJn
PgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4KbWVtX2Z1bjFfcmVm
KF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFf
cmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKIAoKCgogCiAKIAojIDIwICIvb3B0L2dudS9s
aWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv
ZysrLTMvZnVuY3Rpb25hbCIgMiAzCgoKCgogCiAKIAojIDcgInRfZ3RrLmNwcCIgMgoKCiMgMSAi
L3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCiAKCgoKCgoKI3By
YWdtYSBpZGVudAkiQCgjKXN0ZGlvLmgJMS42OQk5OC8wNy8xMyBTTUkiCQoKCiMgMSAiL3Vzci9p
bmNsdWRlL3N5cy92YV9saXN0LmgiIDEgMyA0CiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIyl2
YV9saXN0LmgJMS4xMQk5Ny8xMS8yMiBTTUkiCgogCgoKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgoK
dHlwZWRlZiB2b2lkICpfX3ZhX2xpc3Q7CgoKCgoKfQoKCgojIDIzICIvdXNyL2luY2x1ZGUvc3Rk
aW8uaCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvX3RhZy5oIiAxIDMgNAogCgoKCgoK
CgojcHJhZ21hIGlkZW50CSJAKCMpc3RkaW9fdGFnLmgJMS4zCTk4LzA0LzIwIFNNSSIKCgpleHRl
cm4gIkMiIHsKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBGSUxFICBfX0ZJTEU7CgoKCn0KCgoKIyAy
NCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0CgojIDEgIi91c3IvaW5jbHVkZS9zdGRpb19p
bXBsLmgiIDEgMyA0CiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzdGRpb19pbXBsLmgJMS44
CTk5LzA2LzMwIFNNSSIKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKdHlwZWRlZiBpbnQJc3NpemVf
dDsJCSAKCgoKIyAzNiAiL3Vzci9pbmNsdWRlL3N0ZGlvX2ltcGwuaCIgMyA0CgoKc3RydWN0IEZJ
TEUgCSAKewoKCgoKCXNzaXplX3QJCV9jbnQ7CSAKCXVuc2lnbmVkIGNoYXIJKl9wdHI7CSAKCgl1
bnNpZ25lZCBjaGFyCSpfYmFzZTsJIAoJdW5zaWduZWQgY2hhcglfZmxhZzsJIAoJdW5zaWduZWQg
Y2hhcglfZmlsZTsJIAoJdW5zaWduZWQJX19vcmllbnRhdGlvbjoyOyAgCgl1bnNpZ25lZAlfX2lv
bm9sb2NrOjE7CSAKCXVuc2lnbmVkCV9fZmlsbGVyOjU7Cn07CgoKCgp9CgoKCiMgMjUgIi91c3Iv
aW5jbHVkZS9zdGRpby5oIiAyIDMgNAoKCiAKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgoKCnR5cGVk
ZWYJX19GSUxFIEZJTEU7CgoKCgoKCgoKCgoKCiAKCgoKCgp0eXBlZGVmCWxvbmcgbG9uZwlfX2xv
bmdsb25nX3Q7CgoKCgoKCgoKCgoKCgp0eXBlZGVmIGxvbmcJCW9mZl90OwoKCgoKCgoKdHlwZWRl
ZiBfX2xvbmdsb25nX3QJb2ZmNjRfdDsKCgoKCgoKdHlwZWRlZiBsb25nCQlmcG9zX3Q7CgoKCgoK
Cgp0eXBlZGVmIF9fbG9uZ2xvbmdfdAlmcG9zNjRfdDsKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKZXh0ZXJuIEZJTEUJX19pb2JbNjAgXTsKCgoKCgoKCgoKCgpleHRlcm4gdW5z
aWduZWQgY2hhcgkgX3NpYnVmW10sIF9zb2J1ZltdOwoKCiAKIyAyMjcgIi91c3IvaW5jbHVkZS9z
dGRpby5oIiAzIDQKCgoKZXh0ZXJuIHVuc2lnbmVkIGNoYXIJKl9idWZlbmR0YWJbXTsKZXh0ZXJu
IEZJTEUJCSpfbGFzdGJ1ZjsKCgogCiMgMjU3ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMyA0CgoK
CgpleHRlcm4gaW50CXJlbW92ZShjb25zdCBjaGFyICopOwpleHRlcm4gaW50CXJlbmFtZShjb25z
dCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBGSUxFCSp0bXBmaWxlKHZvaWQpOwpleHRl
cm4gY2hhcgkqdG1wbmFtKGNoYXIgKik7CgoKCmV4dGVybiBpbnQJZmNsb3NlKEZJTEUgKik7CmV4
dGVybiBpbnQJZmZsdXNoKEZJTEUgKik7CmV4dGVybiBGSUxFCSpmb3Blbihjb25zdCBjaGFyICos
IGNvbnN0IGNoYXIgKik7CmV4dGVybiBGSUxFCSpmcmVvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3Qg
Y2hhciAqLCBGSUxFICopOwpleHRlcm4gdm9pZAlzZXRidWYoRklMRSAqLCBjaGFyICopOwoKCmV4
dGVybiB2b2lkIHNldGJ1ZmZlcihGSUxFICosIGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGludCBz
ZXRsaW5lYnVmKEZJTEUgKik7CgpleHRlcm4gaW50CXNldHZidWYoRklMRSAqLCBjaGFyICosIGlu
dCwgc2l6ZV90KTsKIApleHRlcm4gaW50CWZwcmludGYoRklMRSAqLCBjb25zdCBjaGFyICosIC4u
Lik7CiAKZXh0ZXJuIGludAlmc2NhbmYoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CiAKZXh0
ZXJuIGludAlwcmludGYoY29uc3QgY2hhciAqLCAuLi4pOwogCmV4dGVybiBpbnQJc2NhbmYoY29u
c3QgY2hhciAqLCAuLi4pOwoKCgogCmV4dGVybiBpbnQJc25wcmludGYoY2hhciAqLCBzaXplX3Qs
IGNvbnN0IGNoYXIgKiwgLi4uKTsKCiAKZXh0ZXJuIGludAlzcHJpbnRmKGNoYXIgKiwgY29uc3Qg
Y2hhciAqLCAuLi4pOwogCmV4dGVybiBpbnQJc3NjYW5mKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh
ciAqLCAuLi4pOwpleHRlcm4gaW50CXZmcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCBfX3Zh
X2xpc3QpOwpleHRlcm4gaW50CXZwcmludGYoY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpOwoKCgpl
eHRlcm4gaW50CXZzbnByaW50ZihjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBfX3ZhX2xp
c3QpOwoKZXh0ZXJuIGludAl2c3ByaW50ZihjaGFyICosIGNvbnN0IGNoYXIgKiwgX192YV9saXN0
KTsKZXh0ZXJuIGludAlmZ2V0YyhGSUxFICopOwpleHRlcm4gY2hhcgkqZmdldHMoY2hhciAqLCBp
bnQsIEZJTEUgKik7CmV4dGVybiBpbnQJZnB1dGMoaW50LCBGSUxFICopOwpleHRlcm4gaW50CWZw
dXRzKGNvbnN0IGNoYXIgKiwgRklMRSAqKTsKZXh0ZXJuIGludAlnZXRjKEZJTEUgKik7CmV4dGVy
biBpbnQJZ2V0Y2hhcih2b2lkKTsKZXh0ZXJuIGNoYXIJKmdldHMoY2hhciAqKTsKZXh0ZXJuIGlu
dAlwdXRjKGludCwgRklMRSAqKTsKZXh0ZXJuIGludAlwdXRjaGFyKGludCk7CmV4dGVybiBpbnQJ
cHV0cyhjb25zdCBjaGFyICopOwpleHRlcm4gaW50CXVuZ2V0YyhpbnQsIEZJTEUgKik7CmV4dGVy
biBzaXplX3QJZnJlYWQodm9pZCAqLCBzaXplX3QsIHNpemVfdCwgRklMRSAqKTsKZXh0ZXJuIHNp
emVfdAlmd3JpdGUoY29uc3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwgRklMRSAqKTsKZXh0ZXJu
IGludAlmZ2V0cG9zKEZJTEUgKiwgZnBvc190ICopOwpleHRlcm4gaW50CWZzZWVrKEZJTEUgKiwg
bG9uZywgaW50KTsKZXh0ZXJuIGludAlmc2V0cG9zKEZJTEUgKiwgY29uc3QgZnBvc190ICopOwpl
eHRlcm4gbG9uZwlmdGVsbChGSUxFICopOwpleHRlcm4gdm9pZAlyZXdpbmQoRklMRSAqKTsKZXh0
ZXJuIHZvaWQJY2xlYXJlcnIoRklMRSAqKTsKZXh0ZXJuIGludAlmZW9mKEZJTEUgKik7CmV4dGVy
biBpbnQJZmVycm9yKEZJTEUgKik7CmV4dGVybiB2b2lkCXBlcnJvcihjb25zdCBjaGFyICopOwoK
CmV4dGVybiBpbnQJX19maWxidWYoRklMRSAqKTsKZXh0ZXJuIGludAlfX2Zsc2J1ZihpbnQsIEZJ
TEUgKik7CgoKIAoKCgoKCmV4dGVybiBGSUxFCSpmZG9wZW4oaW50LCBjb25zdCBjaGFyICopOwpl
eHRlcm4gY2hhcgkqY3Rlcm1pZChjaGFyICopOwpleHRlcm4gaW50CWZpbGVubyhGSUxFICopOwoK
CgogCgoKIyAzNTggIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzIDQKCgogCgoKCgpleHRlcm4gRklM
RQkqcG9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhcgkqY3VzZXJp
ZChjaGFyICopOwpleHRlcm4gY2hhcgkqdGVtcG5hbShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg
Kik7CmV4dGVybiBpbnQJZ2V0b3B0KGludCwgY2hhciAqY29uc3QgKiwgY29uc3QgY2hhciAqKTsK
CmV4dGVybiBpbnQJZ2V0c3Vib3B0KGNoYXIgKiosIGNoYXIgKmNvbnN0ICosIGNoYXIgKiopOwoK
ZXh0ZXJuIGNoYXIJKm9wdGFyZzsKZXh0ZXJuIGludAlvcHRpbmQsIG9wdGVyciwgb3B0b3B0Owpl
eHRlcm4gaW50CWdldHcoRklMRSAqKTsKZXh0ZXJuIGludAlwdXR3KGludCwgRklMRSAqKTsKZXh0
ZXJuIGludAlwY2xvc2UoRklMRSAqKTsKCgoKIAoKCgpleHRlcm4gaW50CWZzZWVrbyhGSUxFICos
IG9mZl90LCBpbnQpOwpleHRlcm4gb2ZmX3QJZnRlbGxvKEZJTEUgKik7CgoKIAoKCgoKCmV4dGVy
biBGSUxFCSpmb3BlbjY0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIEZJTEUJ
KmZyZW9wZW42NChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgRklMRSAqKTsKZXh0ZXJuIEZJ
TEUJKnRtcGZpbGU2NCh2b2lkKTsKZXh0ZXJuIGludAlmZ2V0cG9zNjQoRklMRSAqLCBmcG9zNjRf
dCAqKTsKZXh0ZXJuIGludAlmc2V0cG9zNjQoRklMRSAqLCBjb25zdCBmcG9zNjRfdCAqKTsKZXh0
ZXJuIGludAlmc2Vla282NChGSUxFICosIG9mZjY0X3QsIGludCk7CmV4dGVybiBvZmY2NF90CWZ0
ZWxsbzY0KEZJTEUgKik7CgoKIyA1MTUgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzIDQKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDU2NyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNAoK
CgoKCn0KCgoKIyA5ICJ0X2d0ay5jcHAiIDIKCgogCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9ndGst
LS93aW5kb3cuaCIgMQogCiAKCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9vcHQvZ3Rr
L2luY2x1ZGUvZ3RrLS0vYmluLmgiIDEKIAogCgoKCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIyAx
ICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0tL2NvbnRhaW5lci5oIiAxCiAKIAoKCgogCgogCgoKCgoK
CgoKCgoKCgoKCgoKCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9ndGstLS93aWRnZXQuaCIgMQogCiAK
CgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0
ay0tL29iamVjdC5oIiAxCiAKIAoKCgogCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgojIDEgIi9v
cHQvZ3RrL2luY2x1ZGUvZ3RrLS0vYmFzZS5oIiAxCiAKIAoKCgogCgogCgoKCgoKCgoKCgoKCgoK
CgoKCiMgMSAiL29wdC9ndGsvbGliL2d0a21tL2luY2x1ZGUvZ3RrLS1jb25maWcuaCIgMQogCgoK
CiAKCgoKCiAKIyAyMSAiL29wdC9ndGsvbGliL2d0a21tL2luY2x1ZGUvZ3RrLS1jb25maWcuaCIK
CgoKCgogCgoKIAogCiAKIAoKCgoKCgoKCiAKIAoKCgoKCgoKCgoKIyAyNyAiL29wdC9ndGsvaW5j
bHVkZS9ndGstLS9iYXNlLmgiIDIKCgoKIAogCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ2RrLS0u
aCIgMQogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0
ay0xLjIvZ2RrL2dkay5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIyAxICIv
b3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ2RrL2dka3R5cGVzLmgiIDEKIAoKCgoKCgoKCgoKCgoK
CgoKCgogCgoKCgoKCgoKCgogCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ2xpYi0xLjIvZ2xpYi5o
IiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIyAxICIvb3B0L2d0ay9saWIvZ2xpYi9pbmNsdWRlL2dsaWJjb25maWcu
aCIgMQogCgoKCgoKCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIu
Ny8yLjk1LjMvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIAoKCiAKCiMgMTE0ICIvb3B0L2dudS9s
aWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvbGltaXRzLmgiIDMg
NAoKCgoKCgoKIyA5ICIvb3B0L2d0ay9saWIvZ2xpYi9pbmNsdWRlL2dsaWJjb25maWcuaCIgMgoK
IyAxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1
ZGUvZmxvYXQuaCIgMSAzIDQKIAoKCiAKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAg
CgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKCiAgICAKCgogICAg
CgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCgogICAg
CgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAK
CgoKCiMgMTAgIi9vcHQvZ3RrL2xpYi9nbGliL2luY2x1ZGUvZ2xpYmNvbmZpZy5oIiAyCgoKCgpl
eHRlcm4gIkMiIHsKCgoKCgoKCgoKCgoKCnR5cGVkZWYgc2lnbmVkIGNoYXIgZ2ludDg7CnR5cGVk
ZWYgdW5zaWduZWQgY2hhciBndWludDg7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGdpbnQxNjsKdHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydCBndWludDE2Owp0eXBlZGVmIHNpZ25lZCBpbnQgZ2ludDMyOwp0
eXBlZGVmIHVuc2lnbmVkIGludCBndWludDMyOwoKCgoKCgoKCgpfX2V4dGVuc2lvbl9fICB0eXBl
ZGVmIHNpZ25lZCBsb25nIGxvbmcgZ2ludDY0OwpfX2V4dGVuc2lvbl9fICB0eXBlZGVmIHVuc2ln
bmVkIGxvbmcgbG9uZyBndWludDY0OwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
dHlwZWRlZiBzdHJ1Y3QgX0dTdGF0aWNNdXRleCBHU3RhdGljTXV0ZXg7CnN0cnVjdCBfR1N0YXRp
Y011dGV4CnsKICBzdHJ1Y3QgX0dNdXRleCAqcnVudGltZV9tdXRleDsKICB1bmlvbiB7CiAgICBj
aGFyICAgcGFkWzI0XTsKICAgIGRvdWJsZSBkdW1teV9kb3VibGU7CiAgICB2b2lkICAqZHVtbXlf
cG9pbnRlcjsKICAgIGxvbmcgICBkdW1teV9sb25nOwogIH0gYWxpZ25lZF9wYWRfdTsKfTsKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp9CgoKCiMgNjYgIi9vcHQvZ3RrL2lu
Y2x1ZGUvZ2xpYi0xLjIvZ2xpYi5oIiAyCgoKIAoKIyAxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9p
Mzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvc3RkYXJnLmgiIDEgMyA0CiAKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKCnR5cGVkZWYgY2hhciAqX19nbnVjX3ZhX2xpc3Q7CgoKCgoKIAoKCgogCgoKCgoKCgoK
CgoKCgoKCgoKdm9pZCB2YV9lbmQgKF9fZ251Y192YV9saXN0KTsJCSAKCgogCgoKCiAKCgoKCgoK
CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK
CgoKCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKCgoKCiMgMjA3ICIvb3B0L2dudS9s
aWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvc3RkYXJnLmgiIDMg
NAoKCgoKCgojIDcwICIvb3B0L2d0ay9pbmNsdWRlL2dsaWItMS4yL2dsaWIuaCIgMgoKCiAKCgoK
CgoKIyA4OSAiL29wdC9ndGsvaW5jbHVkZS9nbGliLTEuMi9nbGliLmgiCgoKCiAKCgoKCgoKIyAx
MDcgIi9vcHQvZ3RrL2luY2x1ZGUvZ2xpYi0xLjIvZ2xpYi5oIgoKCgoKCmV4dGVybiAiQyIgewoK
CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiMgMTU3ICIvb3B0L2d0ay9pbmNs
dWRlL2dsaWItMS4yL2dsaWIuaCIKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCiMg
MjAzICIvb3B0L2d0ay9pbmNsdWRlL2dsaWItMS4yL2dsaWIuaCIKCgoKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CgoKCgoKCgogCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgojIDM2OCAiL29wdC9ndGsvaW5jbHVkZS9n
bGliLTEuMi9nbGliLmgiCgoKCgoKCgoKCiMgMzk1ICIvb3B0L2d0ay9pbmNsdWRlL2dsaWItMS4y
L2dsaWIuaCIKCgoKCgoKCgoKCgoKCgoKIyA0MjEgIi9vcHQvZ3RrL2luY2x1ZGUvZ2xpYi0xLjIv
Z2xpYi5oIgoKCiMgNDM0ICIvb3B0L2d0ay9pbmNsdWRlL2dsaWItMS4yL2dsaWIuaCIKCiMgNDYx
ICIvb3B0L2d0ay9pbmNsdWRlL2dsaWItMS4yL2dsaWIuaCIKCgoKCgogCgoKCgoKCnR5cGVkZWYg
Y2hhciAgIGdjaGFyOwp0eXBlZGVmIHNob3J0ICBnc2hvcnQ7CnR5cGVkZWYgbG9uZyAgIGdsb25n
Owp0eXBlZGVmIGludCAgICBnaW50Owp0eXBlZGVmIGdpbnQgICBnYm9vbGVhbjsKCnR5cGVkZWYg
dW5zaWduZWQgY2hhcglndWNoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQJZ3VzaG9ydDsKdHlw
ZWRlZiB1bnNpZ25lZCBsb25nCWd1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBpbnQJZ3VpbnQ7Cgp0
eXBlZGVmIGZsb2F0CWdmbG9hdDsKdHlwZWRlZiBkb3VibGUJZ2RvdWJsZTsKCiAKCgoKCgoKCgoK
CnR5cGVkZWYgdm9pZCogZ3BvaW50ZXI7CnR5cGVkZWYgY29uc3Qgdm9pZCAqZ2NvbnN0cG9pbnRl
cjsKCgp0eXBlZGVmIGdpbnQzMglnc3NpemU7CnR5cGVkZWYgZ3VpbnQzMiBnc2l6ZTsKdHlwZWRl
ZiBndWludDMyIEdRdWFyazsKdHlwZWRlZiBnaW50MzIJR1RpbWU7CgoKIAoKCgoKCgoJCgoKIAoK
CgoKCgoKCgoKIAoKCgojIDU0MiAiL29wdC9ndGsvaW5jbHVkZS9nbGliLTEuMi9nbGliLmgiCgoK
CgojIDU1NyAiL29wdC9ndGsvaW5jbHVkZS9nbGliLTEuMi9nbGliLmgiCiMgNTY4ICIvb3B0L2d0
ay9pbmNsdWRlL2dsaWItMS4yL2dsaWIuaCIKCgoKCgoKCgoKIyA1OTMgIi9vcHQvZ3RrL2luY2x1
ZGUvZ2xpYi0xLjIvZ2xpYi5oIgoKCiMgNjA5ICIvb3B0L2d0ay9pbmNsdWRlL2dsaWItMS4yL2ds
aWIuaCIKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKCiAKCgoKCgoKCgoKCgoKCmV4dGVybiAgY29uc3QgZ3VpbnQgZ2xpYl9tYWpvcl92ZXJzaW9u
OwpleHRlcm4gIGNvbnN0IGd1aW50IGdsaWJfbWlub3JfdmVyc2lvbjsKZXh0ZXJuICBjb25zdCBn
dWludCBnbGliX21pY3JvX3ZlcnNpb247CmV4dGVybiAgY29uc3QgZ3VpbnQgZ2xpYl9pbnRlcmZh
Y2VfYWdlOwpleHRlcm4gIGNvbnN0IGd1aW50IGdsaWJfYmluYXJ5X2FnZTsKCgoKCgoKCiAKCnR5
cGVkZWYgc3RydWN0IF9HQWxsb2NhdG9yCUdBbGxvY2F0b3I7CnR5cGVkZWYgc3RydWN0IF9HQXJy
YXkJCUdBcnJheTsKdHlwZWRlZiBzdHJ1Y3QgX0dCeXRlQXJyYXkJR0J5dGVBcnJheTsKdHlwZWRl
ZiBzdHJ1Y3QgX0dDYWNoZQkJR0NhY2hlOwp0eXBlZGVmIHN0cnVjdCBfR0NvbXBsZXRpb24JR0Nv
bXBsZXRpb247CnR5cGVkZWYJc3RydWN0IF9HRGF0YQkJR0RhdGE7CnR5cGVkZWYgc3RydWN0IF9H
RGVidWdLZXkJR0RlYnVnS2V5Owp0eXBlZGVmIHN0cnVjdCBfR0hhc2hUYWJsZQlHSGFzaFRhYmxl
Owp0eXBlZGVmIHN0cnVjdCBfR0hvb2sJCUdIb29rOwp0eXBlZGVmIHN0cnVjdCBfR0hvb2tMaXN0
CUdIb29rTGlzdDsKdHlwZWRlZiBzdHJ1Y3QgX0dMaXN0CQlHTGlzdDsKdHlwZWRlZiBzdHJ1Y3Qg
X0dNZW1DaHVuawlHTWVtQ2h1bms7CnR5cGVkZWYgc3RydWN0IF9HTm9kZQkJR05vZGU7CnR5cGVk
ZWYgc3RydWN0IF9HUHRyQXJyYXkJR1B0ckFycmF5Owp0eXBlZGVmIHN0cnVjdCBfR1JlbGF0aW9u
CUdSZWxhdGlvbjsKdHlwZWRlZiBzdHJ1Y3QgX0dTY2FubmVyCUdTY2FubmVyOwp0eXBlZGVmIHN0
cnVjdCBfR1NjYW5uZXJDb25maWcJR1NjYW5uZXJDb25maWc7CnR5cGVkZWYgc3RydWN0IF9HU0xp
c3QJCUdTTGlzdDsKdHlwZWRlZiBzdHJ1Y3QgX0dTdHJpbmcJCUdTdHJpbmc7CnR5cGVkZWYgc3Ry
dWN0IF9HU3RyaW5nQ2h1bmsJR1N0cmluZ0NodW5rOwp0eXBlZGVmIHN0cnVjdCBfR1RpbWVyCQlH
VGltZXI7CnR5cGVkZWYgc3RydWN0IF9HVHJlZQkJR1RyZWU7CnR5cGVkZWYgc3RydWN0IF9HVHVw
bGVzCQlHVHVwbGVzOwp0eXBlZGVmIHVuaW9uICBfR1Rva2VuVmFsdWUJR1Rva2VuVmFsdWU7CnR5
cGVkZWYgc3RydWN0IF9HSU9DaGFubmVsCUdJT0NoYW5uZWw7CgogCnR5cGVkZWYgZW51bQp7CiAg
R19UUkFWRVJTRV9MRUFGUwk9IDEgPDwgMCwKICBHX1RSQVZFUlNFX05PTl9MRUFGUwk9IDEgPDwg
MSwKICBHX1RSQVZFUlNFX0FMTAk9IEdfVFJBVkVSU0VfTEVBRlMgfCBHX1RSQVZFUlNFX05PTl9M
RUFGUywKICBHX1RSQVZFUlNFX01BU0sJPSAweDAzCn0gR1RyYXZlcnNlRmxhZ3M7CgogCnR5cGVk
ZWYgZW51bQp7CiAgR19JTl9PUkRFUiwKICBHX1BSRV9PUkRFUiwKICBHX1BPU1RfT1JERVIsCiAg
R19MRVZFTF9PUkRFUgp9IEdUcmF2ZXJzZVR5cGU7CgogCgoKCgogCgp0eXBlZGVmIGVudW0Kewog
ICAKICBHX0xPR19GTEFHX1JFQ1VSU0lPTgkJPSAxIDw8IDAsCiAgR19MT0dfRkxBR19GQVRBTAkJ
PSAxIDw8IDEsCiAgCiAgIAogIEdfTE9HX0xFVkVMX0VSUk9SCQk9IDEgPDwgMiwJIAogIEdfTE9H
X0xFVkVMX0NSSVRJQ0FMCQk9IDEgPDwgMywKICBHX0xPR19MRVZFTF9XQVJOSU5HCQk9IDEgPDwg
NCwKICBHX0xPR19MRVZFTF9NRVNTQUdFCQk9IDEgPDwgNSwKICBHX0xPR19MRVZFTF9JTkZPCQk9
IDEgPDwgNiwKICBHX0xPR19MRVZFTF9ERUJVRwkJPSAxIDw8IDcsCiAgCiAgR19MT0dfTEVWRUxf
TUFTSwkJPSB+KEdfTE9HX0ZMQUdfUkVDVVJTSU9OIHwgR19MT0dfRkxBR19GQVRBTCkKfSBHTG9n
TGV2ZWxGbGFnczsKCiAKCgoKdHlwZWRlZiBncG9pbnRlcgkoKkdDYWNoZU5ld0Z1bmMpCShncG9p
bnRlcglrZXkpOwp0eXBlZGVmIGdwb2ludGVyCSgqR0NhY2hlRHVwRnVuYykJKGdwb2ludGVyCXZh
bHVlKTsKdHlwZWRlZiB2b2lkCQkoKkdDYWNoZURlc3Ryb3lGdW5jKQkoZ3BvaW50ZXIJdmFsdWUp
Owp0eXBlZGVmIGdpbnQJCSgqR0NvbXBhcmVGdW5jKQkJKGdjb25zdHBvaW50ZXIJYSwKCQkJCQkJ
IGdjb25zdHBvaW50ZXIJYik7CnR5cGVkZWYgZ2NoYXIqCQkoKkdDb21wbGV0aW9uRnVuYykJKGdw
b2ludGVyKTsKdHlwZWRlZiB2b2lkCQkoKkdEZXN0cm95Tm90aWZ5KQkoZ3BvaW50ZXIJZGF0YSk7
CnR5cGVkZWYgdm9pZAkJKCpHRGF0YUZvcmVhY2hGdW5jKQkoR1F1YXJrCQlrZXlfaWQsCgkJCQkJ
CSBncG9pbnRlcglkYXRhLAoJCQkJCQkgZ3BvaW50ZXIJdXNlcl9kYXRhKTsKdHlwZWRlZiB2b2lk
CQkoKkdGdW5jKQkJKGdwb2ludGVyCWRhdGEsCgkJCQkJCSBncG9pbnRlcgl1c2VyX2RhdGEpOwp0
eXBlZGVmIGd1aW50CQkoKkdIYXNoRnVuYykJCShnY29uc3Rwb2ludGVyCWtleSk7CnR5cGVkZWYg
dm9pZAkJKCpHRnJlZUZ1bmMpCQkoZ3BvaW50ZXIJZGF0YSk7CnR5cGVkZWYgdm9pZAkJKCpHSEZ1
bmMpCQkoZ3BvaW50ZXIJa2V5LAoJCQkJCQkgZ3BvaW50ZXIJdmFsdWUsCgkJCQkJCSBncG9pbnRl
cgl1c2VyX2RhdGEpOwp0eXBlZGVmIGdib29sZWFuCSgqR0hSRnVuYykJCShncG9pbnRlcglrZXks
CgkJCQkJCSBncG9pbnRlcgl2YWx1ZSwKCQkJCQkJIGdwb2ludGVyCXVzZXJfZGF0YSk7CnR5cGVk
ZWYgZ2ludAkJKCpHSG9va0NvbXBhcmVGdW5jKQkoR0hvb2sJCSpuZXdfaG9vaywKCQkJCQkJIEdI
b29rCQkqc2libGluZyk7CnR5cGVkZWYgZ2Jvb2xlYW4JKCpHSG9va0ZpbmRGdW5jKQkoR0hvb2sJ
CSpob29rLAoJCQkJCQkgZ3BvaW50ZXIJIGRhdGEpOwp0eXBlZGVmIHZvaWQJCSgqR0hvb2tNYXJz
aGFsbGVyKQkoR0hvb2sJCSpob29rLAoJCQkJCQkgZ3BvaW50ZXIJIGRhdGEpOwp0eXBlZGVmIGdi
b29sZWFuCSgqR0hvb2tDaGVja01hcnNoYWxsZXIpCShHSG9vawkJKmhvb2ssCgkJCQkJCSBncG9p
bnRlcgkgZGF0YSk7CnR5cGVkZWYgdm9pZAkJKCpHSG9va0Z1bmMpCQkoZ3BvaW50ZXIJIGRhdGEp
Owp0eXBlZGVmIGdib29sZWFuCSgqR0hvb2tDaGVja0Z1bmMpCShncG9pbnRlcgkgZGF0YSk7CnR5
cGVkZWYgdm9pZAkJKCpHSG9va0ZyZWVGdW5jKQkoR0hvb2tMaXN0ICAgICAgKmhvb2tfbGlzdCwK
CQkJCQkJIEdIb29rICAgICAgICAgICpob29rKTsKdHlwZWRlZiB2b2lkCQkoKkdMb2dGdW5jKQkJ
KGNvbnN0IGdjaGFyICAgKmxvZ19kb21haW4sCgkJCQkJCSBHTG9nTGV2ZWxGbGFncwlsb2dfbGV2
ZWwsCgkJCQkJCSBjb25zdCBnY2hhciAgICptZXNzYWdlLAoJCQkJCQkgZ3BvaW50ZXIJdXNlcl9k
YXRhKTsKdHlwZWRlZiBnYm9vbGVhbgkoKkdOb2RlVHJhdmVyc2VGdW5jKQkoR05vZGUJICAgICAg
ICpub2RlLAoJCQkJCQkgZ3BvaW50ZXIJZGF0YSk7CnR5cGVkZWYgdm9pZAkJKCpHTm9kZUZvcmVh
Y2hGdW5jKQkoR05vZGUJICAgICAgICpub2RlLAoJCQkJCQkgZ3BvaW50ZXIJZGF0YSk7CnR5cGVk
ZWYgZ2ludAkJKCpHU2VhcmNoRnVuYykJCShncG9pbnRlcglrZXksCgkJCQkJCSBncG9pbnRlcglk
YXRhKTsKdHlwZWRlZiB2b2lkCQkoKkdTY2FubmVyTXNnRnVuYykJKEdTY2FubmVyICAgICAgKnNj
YW5uZXIsCgkJCQkJCSBnY2hhcgkgICAgICAgKm1lc3NhZ2UsCgkJCQkJCSBnaW50CQllcnJvcik7
CnR5cGVkZWYgZ2ludAkJKCpHVHJhdmVyc2VGdW5jKQkoZ3BvaW50ZXIJa2V5LAoJCQkJCQkgZ3Bv
aW50ZXIJdmFsdWUsCgkJCQkJCSBncG9pbnRlcglkYXRhKTsKdHlwZWRlZgl2b2lkCQkoKkdWb2lk
RnVuYykJCSh2b2lkKTsKCgpzdHJ1Y3QgX0dMaXN0CnsKICBncG9pbnRlciBkYXRhOwogIEdMaXN0
ICpuZXh0OwogIEdMaXN0ICpwcmV2Owp9OwoKc3RydWN0IF9HU0xpc3QKewogIGdwb2ludGVyIGRh
dGE7CiAgR1NMaXN0ICpuZXh0Owp9OwoKc3RydWN0IF9HU3RyaW5nCnsKICBnY2hhciAqc3RyOwog
IGdpbnQgbGVuOwp9OwoKc3RydWN0IF9HQXJyYXkKewogIGdjaGFyICpkYXRhOwogIGd1aW50IGxl
bjsKfTsKCnN0cnVjdCBfR0J5dGVBcnJheQp7CiAgZ3VpbnQ4ICpkYXRhOwogIGd1aW50CSAgbGVu
Owp9OwoKc3RydWN0IF9HUHRyQXJyYXkKewogIGdwb2ludGVyICpwZGF0YTsKICBndWludAkgICAg
bGVuOwp9OwoKc3RydWN0IF9HVHVwbGVzCnsKICBndWludCBsZW47Cn07CgpzdHJ1Y3QgX0dEZWJ1
Z0tleQp7CiAgZ2NoYXIgKmtleTsKICBndWludAkgdmFsdWU7Cn07CgoKIAoKdm9pZCAgIGdfbGlz
dF9wdXNoX2FsbG9jYXRvciAgICAoR0FsbG9jYXRvciAgICAgKmFsbG9jYXRvcik7CnZvaWQgICBn
X2xpc3RfcG9wX2FsbG9jYXRvciAgICAgKHZvaWQpOwpHTGlzdCogZ19saXN0X2FsbG9jCQkodm9p
ZCk7CnZvaWQgICBnX2xpc3RfZnJlZQkJKEdMaXN0CQkqbGlzdCk7CnZvaWQgICBnX2xpc3RfZnJl
ZV8xCQkoR0xpc3QJCSpsaXN0KTsKR0xpc3QqIGdfbGlzdF9hcHBlbmQJCShHTGlzdAkJKmxpc3Qs
CgkJCQkgZ3BvaW50ZXIJIGRhdGEpOwpHTGlzdCogZ19saXN0X3ByZXBlbmQJCShHTGlzdAkJKmxp
c3QsCgkJCQkgZ3BvaW50ZXIJIGRhdGEpOwpHTGlzdCogZ19saXN0X2luc2VydAkJKEdMaXN0CQkq
bGlzdCwKCQkJCSBncG9pbnRlcgkgZGF0YSwKCQkJCSBnaW50CQkgcG9zaXRpb24pOwpHTGlzdCog
Z19saXN0X2luc2VydF9zb3J0ZWQJKEdMaXN0CQkqbGlzdCwKCQkJCSBncG9pbnRlcgkgZGF0YSwK
CQkJCSBHQ29tcGFyZUZ1bmMJIGZ1bmMpOwpHTGlzdCogZ19saXN0X2NvbmNhdAkJKEdMaXN0CQkq
bGlzdDEsCgkJCQkgR0xpc3QJCSpsaXN0Mik7CkdMaXN0KiBnX2xpc3RfcmVtb3ZlCQkoR0xpc3QJ
CSpsaXN0LAoJCQkJIGdwb2ludGVyCSBkYXRhKTsKR0xpc3QqIGdfbGlzdF9yZW1vdmVfbGluawko
R0xpc3QJCSpsaXN0LAoJCQkJIEdMaXN0CQkqbGxpbmspOwpHTGlzdCogZ19saXN0X3JldmVyc2UJ
CShHTGlzdAkJKmxpc3QpOwpHTGlzdCogZ19saXN0X2NvcHkJCShHTGlzdAkJKmxpc3QpOwpHTGlz
dCogZ19saXN0X250aAkJKEdMaXN0CQkqbGlzdCwKCQkJCSBndWludAkJIG4pOwpHTGlzdCogZ19s
aXN0X2ZpbmQJCShHTGlzdAkJKmxpc3QsCgkJCQkgZ3BvaW50ZXIJIGRhdGEpOwpHTGlzdCogZ19s
aXN0X2ZpbmRfY3VzdG9tCShHTGlzdAkJKmxpc3QsCgkJCQkgZ3BvaW50ZXIJIGRhdGEsCgkJCQkg
R0NvbXBhcmVGdW5jCSBmdW5jKTsKZ2ludCAgIGdfbGlzdF9wb3NpdGlvbgkJKEdMaXN0CQkqbGlz
dCwKCQkJCSBHTGlzdAkJKmxsaW5rKTsKZ2ludCAgIGdfbGlzdF9pbmRleAkJKEdMaXN0CQkqbGlz
dCwKCQkJCSBncG9pbnRlcgkgZGF0YSk7CkdMaXN0KiBnX2xpc3RfbGFzdAkJKEdMaXN0CQkqbGlz
dCk7CkdMaXN0KiBnX2xpc3RfZmlyc3QJCShHTGlzdAkJKmxpc3QpOwpndWludCAgZ19saXN0X2xl
bmd0aAkJKEdMaXN0CQkqbGlzdCk7CnZvaWQgICBnX2xpc3RfZm9yZWFjaAkJKEdMaXN0CQkqbGlz
dCwKCQkJCSBHRnVuYwkJIGZ1bmMsCgkJCQkgZ3BvaW50ZXIJIHVzZXJfZGF0YSk7CkdMaXN0KiBn
X2xpc3Rfc29ydCAgICAgICAgICAgICAgKEdMaXN0ICAgICAgICAgICpsaXN0LAoJCSAgICAgICAg
ICAgICAgICAgR0NvbXBhcmVGdW5jICAgIGNvbXBhcmVfZnVuYyk7Cmdwb2ludGVyIGdfbGlzdF9u
dGhfZGF0YQkoR0xpc3QJCSpsaXN0LAoJCQkJIGd1aW50CQkgbik7CgoKCgogCgp2b2lkICAgIGdf
c2xpc3RfcHVzaF9hbGxvY2F0b3IgIChHQWxsb2NhdG9yICAgICAqYWxsb2NhdG9yKTsKdm9pZCAg
ICBnX3NsaXN0X3BvcF9hbGxvY2F0b3IgICAodm9pZCk7CkdTTGlzdCogZ19zbGlzdF9hbGxvYwkJ
KHZvaWQpOwp2b2lkCWdfc2xpc3RfZnJlZQkJKEdTTGlzdAkJKmxpc3QpOwp2b2lkCWdfc2xpc3Rf
ZnJlZV8xCQkoR1NMaXN0CQkqbGlzdCk7CkdTTGlzdCogZ19zbGlzdF9hcHBlbmQJCShHU0xpc3QJ
CSpsaXN0LAoJCQkJIGdwb2ludGVyCSBkYXRhKTsKR1NMaXN0KiBnX3NsaXN0X3ByZXBlbmQJCShH
U0xpc3QJCSpsaXN0LAoJCQkJIGdwb2ludGVyCSBkYXRhKTsKR1NMaXN0KiBnX3NsaXN0X2luc2Vy
dAkJKEdTTGlzdAkJKmxpc3QsCgkJCQkgZ3BvaW50ZXIJIGRhdGEsCgkJCQkgZ2ludAkJIHBvc2l0
aW9uKTsKR1NMaXN0KiBnX3NsaXN0X2luc2VydF9zb3J0ZWQJKEdTTGlzdAkJKmxpc3QsCgkJCQkg
Z3BvaW50ZXIJIGRhdGEsCgkJCQkgR0NvbXBhcmVGdW5jCSBmdW5jKTsKR1NMaXN0KiBnX3NsaXN0
X2NvbmNhdAkJKEdTTGlzdAkJKmxpc3QxLAoJCQkJIEdTTGlzdAkJKmxpc3QyKTsKR1NMaXN0KiBn
X3NsaXN0X3JlbW92ZQkJKEdTTGlzdAkJKmxpc3QsCgkJCQkgZ3BvaW50ZXIJIGRhdGEpOwpHU0xp
c3QqIGdfc2xpc3RfcmVtb3ZlX2xpbmsJKEdTTGlzdAkJKmxpc3QsCgkJCQkgR1NMaXN0CQkqbGxp
bmspOwpHU0xpc3QqIGdfc2xpc3RfcmV2ZXJzZQkJKEdTTGlzdAkJKmxpc3QpOwpHU0xpc3QqCWdf
c2xpc3RfY29weQkJKEdTTGlzdAkJKmxpc3QpOwpHU0xpc3QqIGdfc2xpc3RfbnRoCQkoR1NMaXN0
CQkqbGlzdCwKCQkJCSBndWludAkJIG4pOwpHU0xpc3QqIGdfc2xpc3RfZmluZAkJKEdTTGlzdAkJ
Kmxpc3QsCgkJCQkgZ3BvaW50ZXIJIGRhdGEpOwpHU0xpc3QqIGdfc2xpc3RfZmluZF9jdXN0b20J
KEdTTGlzdAkJKmxpc3QsCgkJCQkgZ3BvaW50ZXIJIGRhdGEsCgkJCQkgR0NvbXBhcmVGdW5jCSBm
dW5jKTsKZ2ludAlnX3NsaXN0X3Bvc2l0aW9uCShHU0xpc3QJCSpsaXN0LAoJCQkJIEdTTGlzdAkJ
KmxsaW5rKTsKZ2ludAlnX3NsaXN0X2luZGV4CQkoR1NMaXN0CQkqbGlzdCwKCQkJCSBncG9pbnRl
cgkgZGF0YSk7CkdTTGlzdCogZ19zbGlzdF9sYXN0CQkoR1NMaXN0CQkqbGlzdCk7Cmd1aW50CWdf
c2xpc3RfbGVuZ3RoCQkoR1NMaXN0CQkqbGlzdCk7CnZvaWQJZ19zbGlzdF9mb3JlYWNoCQkoR1NM
aXN0CQkqbGlzdCwKCQkJCSBHRnVuYwkJIGZ1bmMsCgkJCQkgZ3BvaW50ZXIJIHVzZXJfZGF0YSk7
CkdTTGlzdCogIGdfc2xpc3Rfc29ydCAgICAgICAgICAgKEdTTGlzdCAgICAgICAgICAqbGlzdCwK
CQkgICAgICAgICAgICAgICAgIEdDb21wYXJlRnVuYyAgICBjb21wYXJlX2Z1bmMpOwpncG9pbnRl
ciBnX3NsaXN0X250aF9kYXRhCShHU0xpc3QJCSpsaXN0LAoJCQkJIGd1aW50CQkgbik7CgoKCiAK
CkdIYXNoVGFibGUqIGdfaGFzaF90YWJsZV9uZXcJCShHSGFzaEZ1bmMJIGhhc2hfZnVuYywKCQkJ
CQkgR0NvbXBhcmVGdW5jCSBrZXlfY29tcGFyZV9mdW5jKTsKdm9pZAkgICAgZ19oYXNoX3RhYmxl
X2Rlc3Ryb3kJKEdIYXNoVGFibGUJKmhhc2hfdGFibGUpOwp2b2lkCSAgICBnX2hhc2hfdGFibGVf
aW5zZXJ0CQkoR0hhc2hUYWJsZQkqaGFzaF90YWJsZSwKCQkJCQkgZ3BvaW50ZXIJIGtleSwKCQkJ
CQkgZ3BvaW50ZXIJIHZhbHVlKTsKdm9pZAkgICAgZ19oYXNoX3RhYmxlX3JlbW92ZQkJKEdIYXNo
VGFibGUJKmhhc2hfdGFibGUsCgkJCQkJIGdjb25zdHBvaW50ZXIJIGtleSk7Cmdwb2ludGVyICAg
IGdfaGFzaF90YWJsZV9sb29rdXAJCShHSGFzaFRhYmxlCSpoYXNoX3RhYmxlLAoJCQkJCSBnY29u
c3Rwb2ludGVyCSBrZXkpOwpnYm9vbGVhbiAgICBnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVk
KEdIYXNoVGFibGUJKmhhc2hfdGFibGUsCgkJCQkJIGdjb25zdHBvaW50ZXIJIGxvb2t1cF9rZXks
CgkJCQkJIGdwb2ludGVyCSpvcmlnX2tleSwKCQkJCQkgZ3BvaW50ZXIJKnZhbHVlKTsKdm9pZAkg
ICAgZ19oYXNoX3RhYmxlX2ZyZWV6ZQkJKEdIYXNoVGFibGUJKmhhc2hfdGFibGUpOwp2b2lkCSAg
ICBnX2hhc2hfdGFibGVfdGhhdwkJKEdIYXNoVGFibGUJKmhhc2hfdGFibGUpOwp2b2lkCSAgICBn
X2hhc2hfdGFibGVfZm9yZWFjaAkoR0hhc2hUYWJsZQkqaGFzaF90YWJsZSwKCQkJCQkgR0hGdW5j
CQkgZnVuYywKCQkJCQkgZ3BvaW50ZXIJIHVzZXJfZGF0YSk7Cmd1aW50CSAgICBnX2hhc2hfdGFi
bGVfZm9yZWFjaF9yZW1vdmUJKEdIYXNoVGFibGUJKmhhc2hfdGFibGUsCgkJCQkJIEdIUkZ1bmMJ
IGZ1bmMsCgkJCQkJIGdwb2ludGVyCSB1c2VyX2RhdGEpOwpndWludAkgICAgZ19oYXNoX3RhYmxl
X3NpemUJCShHSGFzaFRhYmxlCSpoYXNoX3RhYmxlKTsKCgogCgpHQ2FjaGUqCSBnX2NhY2hlX25l
dwkgICAgICAgKEdDYWNoZU5ld0Z1bmMJICAgdmFsdWVfbmV3X2Z1bmMsCgkJCQlHQ2FjaGVEZXN0
cm95RnVuYyAgdmFsdWVfZGVzdHJveV9mdW5jLAoJCQkJR0NhY2hlRHVwRnVuYwkgICBrZXlfZHVw
X2Z1bmMsCgkJCQlHQ2FjaGVEZXN0cm95RnVuYyAga2V5X2Rlc3Ryb3lfZnVuYywKCQkJCUdIYXNo
RnVuYwkgICBoYXNoX2tleV9mdW5jLAoJCQkJR0hhc2hGdW5jCSAgIGhhc2hfdmFsdWVfZnVuYywK
CQkJCUdDb21wYXJlRnVuYwkgICBrZXlfY29tcGFyZV9mdW5jKTsKdm9pZAkgZ19jYWNoZV9kZXN0
cm95ICAgICAgIChHQ2FjaGUJCSAgKmNhY2hlKTsKZ3BvaW50ZXIgZ19jYWNoZV9pbnNlcnQJICAg
ICAgIChHQ2FjaGUJCSAgKmNhY2hlLAoJCQkJZ3BvaW50ZXIJICAga2V5KTsKdm9pZAkgZ19jYWNo
ZV9yZW1vdmUJICAgICAgIChHQ2FjaGUJCSAgKmNhY2hlLAoJCQkJZ3BvaW50ZXIJICAgdmFsdWUp
Owp2b2lkCSBnX2NhY2hlX2tleV9mb3JlYWNoICAgKEdDYWNoZQkJICAqY2FjaGUsCgkJCQlHSEZ1
bmMJCSAgIGZ1bmMsCgkJCQlncG9pbnRlcgkgICB1c2VyX2RhdGEpOwp2b2lkCSBnX2NhY2hlX3Zh
bHVlX2ZvcmVhY2ggKEdDYWNoZQkJICAqY2FjaGUsCgkJCQlHSEZ1bmMJCSAgIGZ1bmMsCgkJCQln
cG9pbnRlcgkgICB1c2VyX2RhdGEpOwoKCiAKCkdUcmVlKgkgZ190cmVlX25ldwkgKEdDb21wYXJl
RnVuYwkga2V5X2NvbXBhcmVfZnVuYyk7CnZvaWQJIGdfdHJlZV9kZXN0cm95CSAoR1RyZWUJCSp0
cmVlKTsKdm9pZAkgZ190cmVlX2luc2VydAkgKEdUcmVlCQkqdHJlZSwKCQkJICBncG9pbnRlcgkg
a2V5LAoJCQkgIGdwb2ludGVyCSB2YWx1ZSk7CnZvaWQJIGdfdHJlZV9yZW1vdmUJIChHVHJlZQkJ
KnRyZWUsCgkJCSAgZ3BvaW50ZXIJIGtleSk7Cmdwb2ludGVyIGdfdHJlZV9sb29rdXAJIChHVHJl
ZQkJKnRyZWUsCgkJCSAgZ3BvaW50ZXIJIGtleSk7CnZvaWQJIGdfdHJlZV90cmF2ZXJzZSAoR1Ry
ZWUJCSp0cmVlLAoJCQkgIEdUcmF2ZXJzZUZ1bmMJIHRyYXZlcnNlX2Z1bmMsCgkJCSAgR1RyYXZl
cnNlVHlwZQkgdHJhdmVyc2VfdHlwZSwKCQkJICBncG9pbnRlcgkgZGF0YSk7Cmdwb2ludGVyIGdf
dHJlZV9zZWFyY2gJIChHVHJlZQkJKnRyZWUsCgkJCSAgR1NlYXJjaEZ1bmMJIHNlYXJjaF9mdW5j
LAoJCQkgIGdwb2ludGVyCSBkYXRhKTsKZ2ludAkgZ190cmVlX2hlaWdodAkgKEdUcmVlCQkqdHJl
ZSk7CmdpbnQJIGdfdHJlZV9ubm9kZXMJIChHVHJlZQkJKnRyZWUpOwoKCgogCgpzdHJ1Y3QgX0dO
b2RlCnsKICBncG9pbnRlciBkYXRhOwogIEdOb2RlCSAgKm5leHQ7CiAgR05vZGUJICAqcHJldjsK
ICBHTm9kZQkgICpwYXJlbnQ7CiAgR05vZGUJICAqY2hpbGRyZW47Cn07CgoKCgoKCnZvaWQgICAg
IGdfbm9kZV9wdXNoX2FsbG9jYXRvciAgKEdBbGxvY2F0b3IgICAgICAgKmFsbG9jYXRvcik7CnZv
aWQgICAgIGdfbm9kZV9wb3BfYWxsb2NhdG9yICAgKHZvaWQpOwpHTm9kZSoJIGdfbm9kZV9uZXcJ
CShncG9pbnRlcgkgICBkYXRhKTsKdm9pZAkgZ19ub2RlX2Rlc3Ryb3kJCShHTm9kZQkJICAqcm9v
dCk7CnZvaWQJIGdfbm9kZV91bmxpbmsJCShHTm9kZQkJICAqbm9kZSk7CkdOb2RlKgkgZ19ub2Rl
X2luc2VydAkJKEdOb2RlCQkgICpwYXJlbnQsCgkJCQkgZ2ludAkJICAgcG9zaXRpb24sCgkJCQkg
R05vZGUJCSAgKm5vZGUpOwpHTm9kZSoJIGdfbm9kZV9pbnNlcnRfYmVmb3JlCShHTm9kZQkJICAq
cGFyZW50LAoJCQkJIEdOb2RlCQkgICpzaWJsaW5nLAoJCQkJIEdOb2RlCQkgICpub2RlKTsKR05v
ZGUqCSBnX25vZGVfcHJlcGVuZAkJKEdOb2RlCQkgICpwYXJlbnQsCgkJCQkgR05vZGUJCSAgKm5v
ZGUpOwpndWludAkgZ19ub2RlX25fbm9kZXMJCShHTm9kZQkJICAqcm9vdCwKCQkJCSBHVHJhdmVy
c2VGbGFncwkgICBmbGFncyk7CkdOb2RlKgkgZ19ub2RlX2dldF9yb290CShHTm9kZQkJICAqbm9k
ZSk7Cmdib29sZWFuIGdfbm9kZV9pc19hbmNlc3RvcgkoR05vZGUJCSAgKm5vZGUsCgkJCQkgR05v
ZGUJCSAgKmRlc2NlbmRhbnQpOwpndWludAkgZ19ub2RlX2RlcHRoCQkoR05vZGUJCSAgKm5vZGUp
OwpHTm9kZSoJIGdfbm9kZV9maW5kCQkoR05vZGUJCSAgKnJvb3QsCgkJCQkgR1RyYXZlcnNlVHlw
ZQkgICBvcmRlciwKCQkJCSBHVHJhdmVyc2VGbGFncwkgICBmbGFncywKCQkJCSBncG9pbnRlcgkg
ICBkYXRhKTsKCiAKCgoKCgoKCgoKCgogCgoKCgp2b2lkCSBnX25vZGVfdHJhdmVyc2UJKEdOb2Rl
CQkgICpyb290LAoJCQkJIEdUcmF2ZXJzZVR5cGUJICAgb3JkZXIsCgkJCQkgR1RyYXZlcnNlRmxh
Z3MJICAgZmxhZ3MsCgkJCQkgZ2ludAkJICAgbWF4X2RlcHRoLAoJCQkJIEdOb2RlVHJhdmVyc2VG
dW5jIGZ1bmMsCgkJCQkgZ3BvaW50ZXIJICAgZGF0YSk7CgogCgoKCgpndWludAkgZ19ub2RlX21h
eF9oZWlnaHQJIChHTm9kZSAqcm9vdCk7Cgp2b2lkCSBnX25vZGVfY2hpbGRyZW5fZm9yZWFjaCAo
R05vZGUJCSAgKm5vZGUsCgkJCQkgIEdUcmF2ZXJzZUZsYWdzICAgZmxhZ3MsCgkJCQkgIEdOb2Rl
Rm9yZWFjaEZ1bmMgZnVuYywKCQkJCSAgZ3BvaW50ZXIJICAgZGF0YSk7CnZvaWQJIGdfbm9kZV9y
ZXZlcnNlX2NoaWxkcmVuIChHTm9kZQkJICAqbm9kZSk7Cmd1aW50CSBnX25vZGVfbl9jaGlsZHJl
bgkgKEdOb2RlCQkgICpub2RlKTsKR05vZGUqCSBnX25vZGVfbnRoX2NoaWxkCSAoR05vZGUJCSAg
Km5vZGUsCgkJCQkgIGd1aW50CQkgICBuKTsKR05vZGUqCSBnX25vZGVfbGFzdF9jaGlsZAkgKEdO
b2RlCQkgICpub2RlKTsKR05vZGUqCSBnX25vZGVfZmluZF9jaGlsZAkgKEdOb2RlCQkgICpub2Rl
LAoJCQkJICBHVHJhdmVyc2VGbGFncyAgIGZsYWdzLAoJCQkJICBncG9pbnRlcgkgICBkYXRhKTsK
Z2ludAkgZ19ub2RlX2NoaWxkX3Bvc2l0aW9uCSAoR05vZGUJCSAgKm5vZGUsCgkJCQkgIEdOb2Rl
CQkgICpjaGlsZCk7CmdpbnQJIGdfbm9kZV9jaGlsZF9pbmRleAkgKEdOb2RlCQkgICpub2RlLAoJ
CQkJICBncG9pbnRlcgkgICBkYXRhKTsKCkdOb2RlKgkgZ19ub2RlX2ZpcnN0X3NpYmxpbmcJIChH
Tm9kZQkJICAqbm9kZSk7CkdOb2RlKgkgZ19ub2RlX2xhc3Rfc2libGluZwkgKEdOb2RlCQkgICpu
b2RlKTsKCgoKCgoKCgoKIAoKCnR5cGVkZWYgZW51bQp7CiAgR19IT09LX0ZMQUdfQUNUSVZFCT0g
MSA8PCAwLAogIEdfSE9PS19GTEFHX0lOX0NBTEwJPSAxIDw8IDEsCiAgR19IT09LX0ZMQUdfTUFT
Swk9IDB4MGYKfSBHSG9va0ZsYWdNYXNrOwoKCgpzdHJ1Y3QgX0dIb29rTGlzdAp7CiAgZ3VpbnQJ
CSBzZXFfaWQ7CiAgZ3VpbnQJCSBob29rX3NpemU7CiAgZ3VpbnQJCSBpc19zZXR1cCA6IDE7CiAg
R0hvb2sJCSpob29rczsKICBHTWVtQ2h1bmsJKmhvb2tfbWVtY2h1bms7CiAgR0hvb2tGcmVlRnVu
YwkgaG9va19mcmVlOyAgCiAgR0hvb2tGcmVlRnVuYwkgaG9va19kZXN0cm95OyAgCn07CgpzdHJ1
Y3QgX0dIb29rCnsKICBncG9pbnRlcgkgZGF0YTsKICBHSG9vawkJKm5leHQ7CiAgR0hvb2sJCSpw
cmV2OwogIGd1aW50CQkgcmVmX2NvdW50OwogIGd1aW50CQkgaG9va19pZDsKICBndWludAkJIGZs
YWdzOwogIGdwb2ludGVyCSBmdW5jOwogIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3k7Cn07CgoKCgoK
CgoKCgoKCnZvaWQJIGdfaG9va19saXN0X2luaXQJCShHSG9va0xpc3QJCSpob29rX2xpc3QsCgkJ
CQkJIGd1aW50CQkJIGhvb2tfc2l6ZSk7CnZvaWQJIGdfaG9va19saXN0X2NsZWFyCQkoR0hvb2tM
aXN0CQkqaG9va19saXN0KTsKR0hvb2sqCSBnX2hvb2tfYWxsb2MJCQkoR0hvb2tMaXN0CQkqaG9v
a19saXN0KTsKdm9pZAkgZ19ob29rX2ZyZWUJCQkoR0hvb2tMaXN0CQkqaG9va19saXN0LAoJCQkJ
CSBHSG9vawkJCSpob29rKTsKdm9pZAkgZ19ob29rX3JlZgkJCShHSG9va0xpc3QJCSpob29rX2xp
c3QsCgkJCQkJIEdIb29rCQkJKmhvb2spOwp2b2lkCSBnX2hvb2tfdW5yZWYJCQkoR0hvb2tMaXN0
CQkqaG9va19saXN0LAoJCQkJCSBHSG9vawkJCSpob29rKTsKZ2Jvb2xlYW4gZ19ob29rX2Rlc3Ry
b3kJCQkoR0hvb2tMaXN0CQkqaG9va19saXN0LAoJCQkJCSBndWludAkJCSBob29rX2lkKTsKdm9p
ZAkgZ19ob29rX2Rlc3Ryb3lfbGluawkJKEdIb29rTGlzdAkJKmhvb2tfbGlzdCwKCQkJCQkgR0hv
b2sJCQkqaG9vayk7CnZvaWQJIGdfaG9va19wcmVwZW5kCQkJKEdIb29rTGlzdAkJKmhvb2tfbGlz
dCwKCQkJCQkgR0hvb2sJCQkqaG9vayk7CnZvaWQJIGdfaG9va19pbnNlcnRfYmVmb3JlCQkoR0hv
b2tMaXN0CQkqaG9va19saXN0LAoJCQkJCSBHSG9vawkJCSpzaWJsaW5nLAoJCQkJCSBHSG9vawkJ
CSpob29rKTsKdm9pZAkgZ19ob29rX2luc2VydF9zb3J0ZWQJCShHSG9va0xpc3QJCSpob29rX2xp
c3QsCgkJCQkJIEdIb29rCQkJKmhvb2ssCgkJCQkJIEdIb29rQ29tcGFyZUZ1bmMJIGZ1bmMpOwpH
SG9vayoJIGdfaG9va19nZXQJCQkoR0hvb2tMaXN0CQkqaG9va19saXN0LAoJCQkJCSBndWludAkJ
CSBob29rX2lkKTsKR0hvb2sqCSBnX2hvb2tfZmluZAkJCShHSG9va0xpc3QJCSpob29rX2xpc3Qs
CgkJCQkJIGdib29sZWFuCQkgbmVlZF92YWxpZHMsCgkJCQkJIEdIb29rRmluZEZ1bmMJCSBmdW5j
LAoJCQkJCSBncG9pbnRlcgkJIGRhdGEpOwpHSG9vayoJIGdfaG9va19maW5kX2RhdGEJCShHSG9v
a0xpc3QJCSpob29rX2xpc3QsCgkJCQkJIGdib29sZWFuCQkgbmVlZF92YWxpZHMsCgkJCQkJIGdw
b2ludGVyCQkgZGF0YSk7CkdIb29rKgkgZ19ob29rX2ZpbmRfZnVuYwkJKEdIb29rTGlzdAkJKmhv
b2tfbGlzdCwKCQkJCQkgZ2Jvb2xlYW4JCSBuZWVkX3ZhbGlkcywKCQkJCQkgZ3BvaW50ZXIJCSBm
dW5jKTsKR0hvb2sqCSBnX2hvb2tfZmluZF9mdW5jX2RhdGEJCShHSG9va0xpc3QJCSpob29rX2xp
c3QsCgkJCQkJIGdib29sZWFuCQkgbmVlZF92YWxpZHMsCgkJCQkJIGdwb2ludGVyCQkgZnVuYywK
CQkJCQkgZ3BvaW50ZXIJCSBkYXRhKTsKIApHSG9vayoJIGdfaG9va19maXJzdF92YWxpZAkJKEdI
b29rTGlzdAkJKmhvb2tfbGlzdCwKCQkJCQkgZ2Jvb2xlYW4JCSBtYXlfYmVfaW5fY2FsbCk7CiAK
CgpHSG9vayoJIGdfaG9va19uZXh0X3ZhbGlkCQkoR0hvb2tMaXN0CQkqaG9va19saXN0LAoJCQkJ
CSBHSG9vawkJCSpob29rLAoJCQkJCSBnYm9vbGVhbgkJIG1heV9iZV9pbl9jYWxsKTsKCiAKZ2lu
dAkgZ19ob29rX2NvbXBhcmVfaWRzCQkoR0hvb2sJCQkqbmV3X2hvb2ssCgkJCQkJIEdIb29rCQkJ
KnNpYmxpbmcpOwoKIAoKCgogCgp2b2lkCSBnX2hvb2tfbGlzdF9pbnZva2UJCShHSG9va0xpc3QJ
CSpob29rX2xpc3QsCgkJCQkJIGdib29sZWFuCQkgbWF5X3JlY3Vyc2UpOwogCgoKdm9pZAkgZ19o
b29rX2xpc3RfaW52b2tlX2NoZWNrCShHSG9va0xpc3QJCSpob29rX2xpc3QsCgkJCQkJIGdib29s
ZWFuCQkgbWF5X3JlY3Vyc2UpOwogCgp2b2lkCSBnX2hvb2tfbGlzdF9tYXJzaGFsCQkoR0hvb2tM
aXN0CQkqaG9va19saXN0LAoJCQkJCSBnYm9vbGVhbgkJIG1heV9yZWN1cnNlLAoJCQkJCSBHSG9v
a01hcnNoYWxsZXIJIG1hcnNoYWxsZXIsCgkJCQkJIGdwb2ludGVyCQkgZGF0YSk7CnZvaWQJIGdf
aG9va19saXN0X21hcnNoYWxfY2hlY2sJKEdIb29rTGlzdAkJKmhvb2tfbGlzdCwKCQkJCQkgZ2Jv
b2xlYW4JCSBtYXlfcmVjdXJzZSwKCQkJCQkgR0hvb2tDaGVja01hcnNoYWxsZXIJIG1hcnNoYWxs
ZXIsCgkJCQkJIGdwb2ludGVyCQkgZGF0YSk7CgoKIAoKCgoKCgoKCnZvaWQgZ19vbl9lcnJvcl9x
dWVyeSAoY29uc3QgZ2NoYXIgKnByZ19uYW1lKTsKdm9pZCBnX29uX2Vycm9yX3N0YWNrX3RyYWNl
IChjb25zdCBnY2hhciAqcHJnX25hbWUpOwoKCiAKCmV4dGVybgkgICAgICAgIGNvbnN0IGdjaGFy
CQkqZ19sb2dfZG9tYWluX2dsaWI7Cmd1aW50CQlnX2xvZ19zZXRfaGFuZGxlcgkoY29uc3QgZ2No
YXIJKmxvZ19kb21haW4sCgkJCQkJIEdMb2dMZXZlbEZsYWdzCSBsb2dfbGV2ZWxzLAoJCQkJCSBH
TG9nRnVuYwkgbG9nX2Z1bmMsCgkJCQkJIGdwb2ludGVyCSB1c2VyX2RhdGEpOwp2b2lkCQlnX2xv
Z19yZW1vdmVfaGFuZGxlcgkoY29uc3QgZ2NoYXIJKmxvZ19kb21haW4sCgkJCQkJIGd1aW50CQkg
aGFuZGxlcl9pZCk7CnZvaWQJCWdfbG9nX2RlZmF1bHRfaGFuZGxlcgkoY29uc3QgZ2NoYXIJKmxv
Z19kb21haW4sCgkJCQkJIEdMb2dMZXZlbEZsYWdzCSBsb2dfbGV2ZWwsCgkJCQkJIGNvbnN0IGdj
aGFyCSptZXNzYWdlLAoJCQkJCSBncG9pbnRlcgkgdW51c2VkX2RhdGEpOwp2b2lkCQlnX2xvZwkJ
CShjb25zdCBnY2hhcgkqbG9nX2RvbWFpbiwKCQkJCQkgR0xvZ0xldmVsRmxhZ3MJIGxvZ19sZXZl
bCwKCQkJCQkgY29uc3QgZ2NoYXIJKmZvcm1hdCwKCQkJCQkgLi4uKSBfX2F0dHJpYnV0ZV9fKChm
b3JtYXQgKHByaW50ZiwgIDMgLCAgIDQgKSkpIDsKdm9pZAkJZ19sb2d2CQkJKGNvbnN0IGdjaGFy
CSpsb2dfZG9tYWluLAoJCQkJCSBHTG9nTGV2ZWxGbGFncwkgbG9nX2xldmVsLAoJCQkJCSBjb25z
dCBnY2hhcgkqZm9ybWF0LAoJCQkJCSB2YV9saXN0CSBhcmdzKTsKR0xvZ0xldmVsRmxhZ3MJZ19s
b2dfc2V0X2ZhdGFsX21hc2sJKGNvbnN0IGdjaGFyCSpsb2dfZG9tYWluLAoJCQkJCSBHTG9nTGV2
ZWxGbGFncwkgZmF0YWxfbWFzayk7CkdMb2dMZXZlbEZsYWdzCWdfbG9nX3NldF9hbHdheXNfZmF0
YWwJKEdMb2dMZXZlbEZsYWdzCSBmYXRhbF9tYXNrKTsKCgoKIyAxMzA3ICIvb3B0L2d0ay9pbmNs
dWRlL2dsaWItMS4yL2dsaWIuaCIKCgoKCgoKCgoKCgoKCiMgMTM0OCAiL29wdC9ndGsvaW5jbHVk
ZS9nbGliLTEuMi9nbGliLmgiCgoKdHlwZWRlZiB2b2lkCSgqR1ByaW50RnVuYykJCShjb25zdCBn
Y2hhcgkqc3RyaW5nKTsKdm9pZAkJZ19wcmludAkJCShjb25zdCBnY2hhcgkqZm9ybWF0LAoJCQkJ
CSAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAgMSAsICAgMiApKSkgOwpHUHJp
bnRGdW5jCWdfc2V0X3ByaW50X2hhbmRsZXIJKEdQcmludEZ1bmMJIGZ1bmMpOwp2b2lkCQlnX3By
aW50ZXJyCQkoY29uc3QgZ2NoYXIJKmZvcm1hdCwKCQkJCQkgLi4uKSBfX2F0dHJpYnV0ZV9fKChm
b3JtYXQgKHByaW50ZiwgIDEgLCAgIDIgKSkpIDsKR1ByaW50RnVuYwlnX3NldF9wcmludGVycl9o
YW5kbGVyCShHUHJpbnRGdW5jCSBmdW5jKTsKCiAKdHlwZWRlZiB2b2lkCQkoKkdFcnJvckZ1bmMp
CQkoY29uc3QgZ2NoYXIgKnN0cik7CnR5cGVkZWYgdm9pZAkJKCpHV2FybmluZ0Z1bmMpCQkoY29u
c3QgZ2NoYXIgKnN0cik7CkdFcnJvckZ1bmMgICBnX3NldF9lcnJvcl9oYW5kbGVyICAgKEdFcnJv
ckZ1bmMJIGZ1bmMpOwpHV2FybmluZ0Z1bmMgZ19zZXRfd2FybmluZ19oYW5kbGVyIChHV2Fybmlu
Z0Z1bmMgZnVuYyk7CkdQcmludEZ1bmMgICBnX3NldF9tZXNzYWdlX2hhbmRsZXIgKEdQcmludEZ1
bmMgZnVuYyk7CgoKIAoKCgoKCgoKCgoKZ3BvaW50ZXIgZ19tYWxsb2MgICAgICAoZ3Vsb25nCSAg
c2l6ZSk7Cmdwb2ludGVyIGdfbWFsbG9jMCAgICAgKGd1bG9uZwkgIHNpemUpOwpncG9pbnRlciBn
X3JlYWxsb2MgICAgIChncG9pbnRlciAgbWVtLAoJCQlndWxvbmcJICBzaXplKTsKdm9pZAkgZ19m
cmVlCSAgICAgICAoZ3BvaW50ZXIgIG1lbSk7CgoKCnZvaWQJIGdfbWVtX3Byb2ZpbGUgKHZvaWQp
Owp2b2lkCSBnX21lbV9jaGVjayAgIChncG9pbnRlciAgbWVtKTsKCiAKCkdBbGxvY2F0b3IqIGdf
YWxsb2NhdG9yX25ldyAgIChjb25zdCBnY2hhciAgKm5hbWUsCgkJCSAgICAgICBndWludCAgICAg
ICAgIG5fcHJlYWxsb2NzKTsKdm9pZCAgICAgICAgZ19hbGxvY2F0b3JfZnJlZSAgKEdBbGxvY2F0
b3IgICAqYWxsb2NhdG9yKTsKCgoKCgoKIAoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKR01lbUNodW5r
KiBnX21lbV9jaHVua19uZXcgICAgIChnY2hhcgkgICpuYW1lLAoJCQkJZ2ludAkgICBhdG9tX3Np
emUsCgkJCQlndWxvbmcJICAgYXJlYV9zaXplLAoJCQkJZ2ludAkgICB0eXBlKTsKdm9pZAkgICBn
X21lbV9jaHVua19kZXN0cm95IChHTWVtQ2h1bmsgKm1lbV9jaHVuayk7Cmdwb2ludGVyICAgZ19t
ZW1fY2h1bmtfYWxsb2MgICAoR01lbUNodW5rICptZW1fY2h1bmspOwpncG9pbnRlciAgIGdfbWVt
X2NodW5rX2FsbG9jMCAgKEdNZW1DaHVuayAqbWVtX2NodW5rKTsKdm9pZAkgICBnX21lbV9jaHVu
a19mcmVlICAgIChHTWVtQ2h1bmsgKm1lbV9jaHVuaywKCQkJCWdwb2ludGVyICAgbWVtKTsKdm9p
ZAkgICBnX21lbV9jaHVua19jbGVhbiAgIChHTWVtQ2h1bmsgKm1lbV9jaHVuayk7CnZvaWQJICAg
Z19tZW1fY2h1bmtfcmVzZXQgICAoR01lbUNodW5rICptZW1fY2h1bmspOwp2b2lkCSAgIGdfbWVt
X2NodW5rX3ByaW50ICAgKEdNZW1DaHVuayAqbWVtX2NodW5rKTsKdm9pZAkgICBnX21lbV9jaHVu
a19pbmZvICAgICh2b2lkKTsKCiAKCgoKCgoKCnZvaWQgZ19ibG93X2NodW5rcyAodm9pZCk7CgoK
IAoKR1RpbWVyKiBnX3RpbWVyX25ldwkodm9pZCk7CnZvaWQJZ190aW1lcl9kZXN0cm95IChHVGlt
ZXIJICp0aW1lcik7CnZvaWQJZ190aW1lcl9zdGFydAkoR1RpbWVyCSAqdGltZXIpOwp2b2lkCWdf
dGltZXJfc3RvcAkoR1RpbWVyCSAqdGltZXIpOwp2b2lkCWdfdGltZXJfcmVzZXQJKEdUaW1lcgkg
KnRpbWVyKTsKZ2RvdWJsZSBnX3RpbWVyX2VsYXBzZWQgKEdUaW1lcgkgKnRpbWVyLAoJCQkgZ3Vs
b25nCSAqbWljcm9zZWNvbmRzKTsKCgogCgoKCmdjaGFyKgkgZ19zdHJkZWxpbWl0CQkoZ2NoYXIJ
ICAgICAqc3RyaW5nLAoJCQkJIGNvbnN0IGdjaGFyICpkZWxpbWl0ZXJzLAoJCQkJIGdjaGFyCSAg
ICAgIG5ld19kZWxpbWl0ZXIpOwpnZG91YmxlCSBnX3N0cnRvZAkJKGNvbnN0IGdjaGFyICpucHRy
LAoJCQkJIGdjaGFyCSAgICAqKmVuZHB0cik7CmdjaGFyKgkgZ19zdHJlcnJvcgkJKGdpbnQJICAg
ICAgZXJybnVtKTsKZ2NoYXIqCSBnX3N0cnNpZ25hbAkJKGdpbnQJICAgICAgc2lnbnVtKTsKZ2lu
dAkgZ19zdHJjYXNlY21wCQkoY29uc3QgZ2NoYXIgKnMxLAoJCQkJIGNvbnN0IGdjaGFyICpzMik7
CmdpbnQJIGdfc3RybmNhc2VjbXAJCShjb25zdCBnY2hhciAqczEsCgkJCQkgY29uc3QgZ2NoYXIg
KnMyLAoJCQkJIGd1aW50IAkgICAgICBuKTsKdm9pZAkgZ19zdHJkb3duCQkoZ2NoYXIJICAgICAq
c3RyaW5nKTsKdm9pZAkgZ19zdHJ1cAkJKGdjaGFyCSAgICAgKnN0cmluZyk7CnZvaWQJIGdfc3Ry
cmV2ZXJzZQkJKGdjaGFyCSAgICAgKnN0cmluZyk7CiAKZ2NoYXIqICAgZ19zdHJjaHVnICAgICAg
ICAgICAgICAoZ2NoYXIgICAgICAgICpzdHJpbmcpOwogCmdjaGFyKiAgZ19zdHJjaG9tcCAgICAg
ICAgICAgICAgKGdjaGFyICAgICAgICAqc3RyaW5nKTsKIAoKCiAKCgpnY2hhcioJIGdfc3RyZHVw
CQkoY29uc3QgZ2NoYXIgKnN0cik7CmdjaGFyKgkgZ19zdHJkdXBfcHJpbnRmCShjb25zdCBnY2hh
ciAqZm9ybWF0LAoJCQkJIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsICAxICwg
ICAyICkpKSA7CmdjaGFyKgkgZ19zdHJkdXBfdnByaW50ZgkoY29uc3QgZ2NoYXIgKmZvcm1hdCwK
CQkJCSB2YV9saXN0ICAgICAgYXJncyk7CmdjaGFyKgkgZ19zdHJuZHVwCQkoY29uc3QgZ2NoYXIg
KnN0ciwKCQkJCSBndWludAkgICAgICBuKTsKZ2NoYXIqCSBnX3N0cm5maWxsCQkoZ3VpbnQJICAg
ICAgbGVuZ3RoLAoJCQkJIGdjaGFyCSAgICAgIGZpbGxfY2hhcik7CmdjaGFyKgkgZ19zdHJjb25j
YXQJCShjb25zdCBnY2hhciAqc3RyaW5nMSwKCQkJCSAuLi4pOyAgCmdjaGFyKiAgIGdfc3Ryam9p
bgkJKGNvbnN0IGdjaGFyICAqc2VwYXJhdG9yLAoJCQkJIC4uLik7ICAKZ2NoYXIqCSBnX3N0cmVz
Y2FwZQkJKGdjaGFyCSAgICAgICpzdHJpbmcpOwpncG9pbnRlciBnX21lbWR1cAkJKGdjb25zdHBv
aW50ZXIgbWVtLAoJCQkJIGd1aW50CSAgICAgICBieXRlX3NpemUpOwoKIAoKCgoKCgpnY2hhcioq
CSBnX3N0cnNwbGl0CQkoY29uc3QgZ2NoYXIgICpzdHJpbmcsCgkJCQkgY29uc3QgZ2NoYXIgICpk
ZWxpbWl0ZXIsCgkJCQkgZ2ludCAgICAgICAgICBtYXhfdG9rZW5zKTsKZ2NoYXIqICAgZ19zdHJq
b2ludgkJKGNvbnN0IGdjaGFyICAqc2VwYXJhdG9yLAoJCQkJIGdjaGFyICAgICAgICoqc3RyX2Fy
cmF5KTsKdm9pZCAgICAgZ19zdHJmcmVldgkJKGdjaGFyICAgICAgICoqc3RyX2FycmF5KTsKCgoK
IAoKZ3VpbnQJZ19wcmludGZfc3RyaW5nX3VwcGVyX2JvdW5kIChjb25zdCBnY2hhciogZm9ybWF0
LAoJCQkJICAgICB2YV9saXN0CSAgYXJncyk7CgoKIAoKZ2NoYXIqCWdfZ2V0X3VzZXJfbmFtZQkJ
KHZvaWQpOwpnY2hhcioJZ19nZXRfcmVhbF9uYW1lCQkodm9pZCk7CmdjaGFyKglnX2dldF9ob21l
X2RpcgkJKHZvaWQpOwpnY2hhcioJZ19nZXRfdG1wX2RpcgkJKHZvaWQpOwpnY2hhcioJZ19nZXRf
cHJnbmFtZQkJKHZvaWQpOwp2b2lkCWdfc2V0X3ByZ25hbWUJCShjb25zdCBnY2hhciAqcHJnbmFt
ZSk7CgoKIAoKZ3VpbnQJZ19wYXJzZV9kZWJ1Z19zdHJpbmcJKGNvbnN0IGdjaGFyICpzdHJpbmcs
CgkJCQkgR0RlYnVnS2V5ICAgKmtleXMsCgkJCQkgZ3VpbnQJICAgICAgbmtleXMpOwpnaW50CWdf
c25wcmludGYJCShnY2hhcgkgICAgICpzdHJpbmcsCgkJCQkgZ3Vsb25nCSAgICAgIG4sCgkJCQkg
Z2NoYXIgY29uc3QgKmZvcm1hdCwKCQkJCSAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJp
bnRmLCAgMyAsICAgNCApKSkgOwpnaW50CWdfdnNucHJpbnRmCQkoZ2NoYXIJICAgICAqc3RyaW5n
LAoJCQkJIGd1bG9uZwkgICAgICBuLAoJCQkJIGdjaGFyIGNvbnN0ICpmb3JtYXQsCgkJCQkgdmFf
bGlzdCAgICAgIGFyZ3MpOwpnY2hhcioJZ19iYXNlbmFtZQkJKGNvbnN0IGdjaGFyICpmaWxlX25h
bWUpOwogCmdib29sZWFuIGdfcGF0aF9pc19hYnNvbHV0ZQkoY29uc3QgZ2NoYXIgKmZpbGVfbmFt
ZSk7CiAKZ2NoYXIqICBnX3BhdGhfc2tpcF9yb290CShnY2hhciAgICAgICAqZmlsZV9uYW1lKTsK
CiAKZ2NoYXIqCWdfZGlybmFtZQkJKGNvbnN0IGdjaGFyICpmaWxlX25hbWUpOwpnY2hhcioJZ19n
ZXRfY3VycmVudF9kaXIJKHZvaWQpOwoKIAoKZ2NoYXIqICBnX2dldGVudgkJKGNvbnN0IGdjaGFy
ICp2YXJpYWJsZSk7CgoKIAoKCgoKdm9pZAlnX2F0ZXhpdAkJKEdWb2lkRnVuYyAgICBmdW5jKTsK
CgogCgpleHRlcm4gIGdpbnQJZ19iaXRfbnRoX2xzZiAoZ3VpbnQzMiBtYXNrLAoJCQkJICAgICAg
IGdpbnQgICAgbnRoX2JpdCk7CiMgMTU4OSAiL29wdC9ndGsvaW5jbHVkZS9nbGliLTEuMi9nbGli
LmgiCgoKZXh0ZXJuICBnaW50CWdfYml0X250aF9tc2YgKGd1aW50MzIgbWFzaywKCQkJCSAgICAg
ICBnaW50ICAgIG50aF9iaXQpOwojIDE2MDkgIi9vcHQvZ3RrL2luY2x1ZGUvZ2xpYi0xLjIvZ2xp
Yi5oIgoKCmV4dGVybiAgZ3VpbnQJZ19iaXRfc3RvcmFnZSAoZ3VpbnQgbnVtYmVyKTsKIyAxNjI2
ICIvb3B0L2d0ay9pbmNsdWRlL2dsaWItMS4yL2dsaWIuaCIKCgogCgpHU3RyaW5nQ2h1bmsqIGdf
c3RyaW5nX2NodW5rX25ldwkgICAoZ2ludCBzaXplKTsKdm9pZAkgICAgICBnX3N0cmluZ19jaHVu
a19mcmVlCSAgIChHU3RyaW5nQ2h1bmsgKmNodW5rKTsKZ2NoYXIqCSAgICAgIGdfc3RyaW5nX2No
dW5rX2luc2VydAkgICAoR1N0cmluZ0NodW5rICpjaHVuaywKCQkJCQkgICAgY29uc3QgZ2NoYXIJ
ICpzdHJpbmcpOwpnY2hhcioJICAgICAgZ19zdHJpbmdfY2h1bmtfaW5zZXJ0X2NvbnN0ICAoR1N0
cmluZ0NodW5rICpjaHVuaywKCQkJCQkgICAgY29uc3QgZ2NoYXIJICpzdHJpbmcpOwoKCiAKCkdT
dHJpbmcqIGdfc3RyaW5nX25ldwkgICAgKGNvbnN0IGdjaGFyICppbml0KTsKR1N0cmluZyogZ19z
dHJpbmdfc2l6ZWRfbmV3IChndWludAkgIGRmbF9zaXplKTsKdm9pZAkgZ19zdHJpbmdfZnJlZQkg
ICAgKEdTdHJpbmcJICpzdHJpbmcsCgkJCSAgICAgZ2ludAkgIGZyZWVfc2VnbWVudCk7CkdTdHJp
bmcqIGdfc3RyaW5nX2Fzc2lnbiAgICAoR1N0cmluZwkgKmx2YWwsCgkJCSAgICAgY29uc3QgZ2No
YXIgKnJ2YWwpOwpHU3RyaW5nKiBnX3N0cmluZ190cnVuY2F0ZSAgKEdTdHJpbmcJICpzdHJpbmcs
CgkJCSAgICAgZ2ludAkgIGxlbik7CkdTdHJpbmcqIGdfc3RyaW5nX2FwcGVuZCAgICAoR1N0cmlu
ZwkgKnN0cmluZywKCQkJICAgICBjb25zdCBnY2hhciAqdmFsKTsKR1N0cmluZyogZ19zdHJpbmdf
YXBwZW5kX2MgIChHU3RyaW5nCSAqc3RyaW5nLAoJCQkgICAgIGdjaGFyCSAgYyk7CkdTdHJpbmcq
IGdfc3RyaW5nX3ByZXBlbmQgICAoR1N0cmluZwkgKnN0cmluZywKCQkJICAgICBjb25zdCBnY2hh
ciAqdmFsKTsKR1N0cmluZyogZ19zdHJpbmdfcHJlcGVuZF9jIChHU3RyaW5nCSAqc3RyaW5nLAoJ
CQkgICAgIGdjaGFyCSAgYyk7CkdTdHJpbmcqIGdfc3RyaW5nX2luc2VydCAgICAoR1N0cmluZwkg
KnN0cmluZywKCQkJICAgICBnaW50CSAgcG9zLAoJCQkgICAgIGNvbnN0IGdjaGFyICp2YWwpOwpH
U3RyaW5nKiBnX3N0cmluZ19pbnNlcnRfYyAgKEdTdHJpbmcJICpzdHJpbmcsCgkJCSAgICAgZ2lu
dAkgIHBvcywKCQkJICAgICBnY2hhcgkgIGMpOwpHU3RyaW5nKiBnX3N0cmluZ19lcmFzZQkgICAg
KEdTdHJpbmcJICpzdHJpbmcsCgkJCSAgICAgZ2ludAkgIHBvcywKCQkJICAgICBnaW50CSAgbGVu
KTsKR1N0cmluZyogZ19zdHJpbmdfZG93bgkgICAgKEdTdHJpbmcJICpzdHJpbmcpOwpHU3RyaW5n
KiBnX3N0cmluZ191cAkgICAgKEdTdHJpbmcJICpzdHJpbmcpOwp2b2lkCSBnX3N0cmluZ19zcHJp
bnRmICAgKEdTdHJpbmcJICpzdHJpbmcsCgkJCSAgICAgY29uc3QgZ2NoYXIgKmZvcm1hdCwKCQkJ
ICAgICAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAgMiAsICAgMyApKSkgOwp2
b2lkCSBnX3N0cmluZ19zcHJpbnRmYSAgKEdTdHJpbmcJICpzdHJpbmcsCgkJCSAgICAgY29uc3Qg
Z2NoYXIgKmZvcm1hdCwKCQkJICAgICAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRm
LCAgMiAsICAgMyApKSkgOwoKCiAKCgoKCgoKCgoKR0FycmF5KiBnX2FycmF5X25ldwkgICAgICAg
ICAgKGdib29sZWFuCSAgICB6ZXJvX3Rlcm1pbmF0ZWQsCgkJCQkgICBnYm9vbGVhbgkgICAgY2xl
YXIsCgkJCQkgICBndWludAkgICAgZWxlbWVudF9zaXplKTsKdm9pZAlnX2FycmF5X2ZyZWUJICAg
ICAgICAgIChHQXJyYXkJICAgKmFycmF5LAoJCQkJICAgZ2Jvb2xlYW4JICAgIGZyZWVfc2VnbWVu
dCk7CkdBcnJheSogZ19hcnJheV9hcHBlbmRfdmFscyAgICAgICAoR0FycmF5CSAgICphcnJheSwK
CQkJCSAgIGdjb25zdHBvaW50ZXIgICAgZGF0YSwKCQkJCSAgIGd1aW50CSAgICBsZW4pOwpHQXJy
YXkqIGdfYXJyYXlfcHJlcGVuZF92YWxzICAgICAgKEdBcnJheQkgICAqYXJyYXksCgkJCQkgICBn
Y29uc3Rwb2ludGVyICAgIGRhdGEsCgkJCQkgICBndWludAkgICAgbGVuKTsKR0FycmF5KiBnX2Fy
cmF5X2luc2VydF92YWxzICAgICAgIChHQXJyYXkgICAgICAgICAgKmFycmF5LAoJCQkJICAgZ3Vp
bnQgICAgICAgICAgICBpbmRleCwKCQkJCSAgIGdjb25zdHBvaW50ZXIgICAgZGF0YSwKCQkJCSAg
IGd1aW50ICAgICAgICAgICAgbGVuKTsKR0FycmF5KiBnX2FycmF5X3NldF9zaXplICAgICAgICAg
IChHQXJyYXkJICAgKmFycmF5LAoJCQkJICAgZ3VpbnQJICAgIGxlbmd0aCk7CkdBcnJheSogZ19h
cnJheV9yZW1vdmVfaW5kZXgJICAoR0FycmF5CSAgICphcnJheSwKCQkJCSAgIGd1aW50CSAgICBp
bmRleCk7CkdBcnJheSogZ19hcnJheV9yZW1vdmVfaW5kZXhfZmFzdCAoR0FycmF5CSAgICphcnJh
eSwKCQkJCSAgIGd1aW50CSAgICBpbmRleCk7CgogCgoKCgoKR1B0ckFycmF5KiAgZ19wdHJfYXJy
YXlfbmV3CQkgICAodm9pZCk7CnZvaWQJICAgIGdfcHRyX2FycmF5X2ZyZWUJCSAgIChHUHRyQXJy
YXkJKmFycmF5LAoJCQkJCSAgICBnYm9vbGVhbgkgZnJlZV9zZWcpOwp2b2lkCSAgICBnX3B0cl9h
cnJheV9zZXRfc2l6ZQkgICAoR1B0ckFycmF5CSphcnJheSwKCQkJCQkgICAgZ2ludAkgbGVuZ3Ro
KTsKZ3BvaW50ZXIgICAgZ19wdHJfYXJyYXlfcmVtb3ZlX2luZGV4CSAgIChHUHRyQXJyYXkJKmFy
cmF5LAoJCQkJCSAgICBndWludAkgaW5kZXgpOwpncG9pbnRlciAgICBnX3B0cl9hcnJheV9yZW1v
dmVfaW5kZXhfZmFzdCAgKEdQdHJBcnJheQkqYXJyYXksCgkJCQkJICAgIGd1aW50CSBpbmRleCk7
Cmdib29sZWFuICAgIGdfcHRyX2FycmF5X3JlbW92ZQkJICAgKEdQdHJBcnJheQkqYXJyYXksCgkJ
CQkJICAgIGdwb2ludGVyCSBkYXRhKTsKZ2Jvb2xlYW4gICAgZ19wdHJfYXJyYXlfcmVtb3ZlX2Zh
c3QgICAgICAgIChHUHRyQXJyYXkJKmFycmF5LAoJCQkJCSAgICBncG9pbnRlcgkgZGF0YSk7CnZv
aWQJICAgIGdfcHRyX2FycmF5X2FkZAkJICAgKEdQdHJBcnJheQkqYXJyYXksCgkJCQkJICAgIGdw
b2ludGVyCSBkYXRhKTsKCiAKCgoKR0J5dGVBcnJheSogZ19ieXRlX2FycmF5X25ldwkgICAgICAg
ICAgICh2b2lkKTsKdm9pZAkgICAgZ19ieXRlX2FycmF5X2ZyZWUJICAgICAgICAgICAoR0J5dGVB
cnJheQkgKmFycmF5LAoJCQkJCSAgICBnYm9vbGVhbgkgIGZyZWVfc2VnbWVudCk7CkdCeXRlQXJy
YXkqIGdfYnl0ZV9hcnJheV9hcHBlbmQJICAgICAgICAgICAoR0J5dGVBcnJheQkgKmFycmF5LAoJ
CQkJCSAgICBjb25zdCBndWludDggKmRhdGEsCgkJCQkJICAgIGd1aW50CSAgbGVuKTsKR0J5dGVB
cnJheSogZ19ieXRlX2FycmF5X3ByZXBlbmQgICAgICAgICAgIChHQnl0ZUFycmF5CSAqYXJyYXks
CgkJCQkJICAgIGNvbnN0IGd1aW50OCAqZGF0YSwKCQkJCQkgICAgZ3VpbnQJICBsZW4pOwpHQnl0
ZUFycmF5KiBnX2J5dGVfYXJyYXlfc2V0X3NpemUgICAgICAgICAgKEdCeXRlQXJyYXkJICphcnJh
eSwKCQkJCQkgICAgZ3VpbnQJICBsZW5ndGgpOwpHQnl0ZUFycmF5KiBnX2J5dGVfYXJyYXlfcmVt
b3ZlX2luZGV4CSAgIChHQnl0ZUFycmF5CSAqYXJyYXksCgkJCQkJICAgIGd1aW50CSAgaW5kZXgp
OwpHQnl0ZUFycmF5KiBnX2J5dGVfYXJyYXlfcmVtb3ZlX2luZGV4X2Zhc3QgKEdCeXRlQXJyYXkJ
ICphcnJheSwKCQkJCQkgICAgZ3VpbnQJICBpbmRleCk7CgoKIAoKZ2ludCAgZ19zdHJfZXF1YWwg
KGdjb25zdHBvaW50ZXIgICB2LAoJCSAgIGdjb25zdHBvaW50ZXIgICB2Mik7Cmd1aW50IGdfc3Ry
X2hhc2ggIChnY29uc3Rwb2ludGVyICAgdik7CgpnaW50ICBnX2ludF9lcXVhbCAoZ2NvbnN0cG9p
bnRlciAgIHYsCgkJICAgZ2NvbnN0cG9pbnRlciAgIHYyKTsKZ3VpbnQgZ19pbnRfaGFzaCAgKGdj
b25zdHBvaW50ZXIgICB2KTsKCiAKCgoKCgpndWludCBnX2RpcmVjdF9oYXNoICAoZ2NvbnN0cG9p
bnRlciB2KTsKZ2ludCAgZ19kaXJlY3RfZXF1YWwgKGdjb25zdHBvaW50ZXIgdiwKCQkgICAgICBn
Y29uc3Rwb2ludGVyIHYyKTsKCgogCgpHUXVhcmsJICBnX3F1YXJrX3RyeV9zdHJpbmcJCShjb25z
dCBnY2hhcgkqc3RyaW5nKTsKR1F1YXJrCSAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcJKGNv
bnN0IGdjaGFyCSpzdHJpbmcpOwpHUXVhcmsJICBnX3F1YXJrX2Zyb21fc3RyaW5nCQkoY29uc3Qg
Z2NoYXIJKnN0cmluZyk7CmdjaGFyKgkgIGdfcXVhcmtfdG9fc3RyaW5nCQkoR1F1YXJrCQkgcXVh
cmspOwoKCiAKCgp2b2lkCSAgZ19kYXRhbGlzdF9pbml0CQkgKEdEYXRhCQkgKipkYXRhbGlzdCk7
CnZvaWQJICBnX2RhdGFsaXN0X2NsZWFyCQkgKEdEYXRhCQkgKipkYXRhbGlzdCk7Cmdwb2ludGVy
ICBnX2RhdGFsaXN0X2lkX2dldF9kYXRhCSAoR0RhdGEJCSAqKmRhdGFsaXN0LAoJCQkJCSAgR1F1
YXJrCSAgIGtleV9pZCk7CnZvaWQJICBnX2RhdGFsaXN0X2lkX3NldF9kYXRhX2Z1bGwJIChHRGF0
YQkJICoqZGF0YWxpc3QsCgkJCQkJICBHUXVhcmsJICAga2V5X2lkLAoJCQkJCSAgZ3BvaW50ZXIJ
ICAgZGF0YSwKCQkJCQkgIEdEZXN0cm95Tm90aWZ5ICAgZGVzdHJveV9mdW5jKTsKdm9pZAkgIGdf
ZGF0YWxpc3RfaWRfcmVtb3ZlX25vX25vdGlmeSAoR0RhdGEJCSAqKmRhdGFsaXN0LAoJCQkJCSAg
R1F1YXJrCSAgIGtleV9pZCk7CnZvaWQJICBnX2RhdGFsaXN0X2ZvcmVhY2gJCSAoR0RhdGEJCSAq
KmRhdGFsaXN0LAoJCQkJCSAgR0RhdGFGb3JlYWNoRnVuYyBmdW5jLAoJCQkJCSAgZ3BvaW50ZXIJ
ICAgdXNlcl9kYXRhKTsKCgoKCgoKCgoKCgoKCgoKCiAKCgp2b2lkCSAgZ19kYXRhc2V0X2Rlc3Ry
b3kJCShnY29uc3Rwb2ludGVyCSAgZGF0YXNldF9sb2NhdGlvbik7Cmdwb2ludGVyICBnX2RhdGFz
ZXRfaWRfZ2V0X2RhdGEJCShnY29uc3Rwb2ludGVyCSAgZGF0YXNldF9sb2NhdGlvbiwKCQkJCQkg
R1F1YXJrCQkgIGtleV9pZCk7CnZvaWQJICBnX2RhdGFzZXRfaWRfc2V0X2RhdGFfZnVsbAkoZ2Nv
bnN0cG9pbnRlcgkgIGRhdGFzZXRfbG9jYXRpb24sCgkJCQkJIEdRdWFyawkJICBrZXlfaWQsCgkJ
CQkJIGdwb2ludGVyCSAgZGF0YSwKCQkJCQkgR0Rlc3Ryb3lOb3RpZnkJICBkZXN0cm95X2Z1bmMp
Owp2b2lkCSAgZ19kYXRhc2V0X2lkX3JlbW92ZV9ub19ub3RpZnkJKGdjb25zdHBvaW50ZXIJICBk
YXRhc2V0X2xvY2F0aW9uLAoJCQkJCSBHUXVhcmsJCSAga2V5X2lkKTsKdm9pZAkgIGdfZGF0YXNl
dF9mb3JlYWNoCQkoZ2NvbnN0cG9pbnRlcgkgIGRhdGFzZXRfbG9jYXRpb24sCgkJCQkJIEdEYXRh
Rm9yZWFjaEZ1bmMgZnVuYywKCQkJCQkgZ3BvaW50ZXIJICB1c2VyX2RhdGEpOwoKCgoKCgoKCgoK
CgoKCgoKIAoKCiAKCgoKCgoKCgoKCgogCnR5cGVkZWYgZW51bQp7CiAgR19FUlJfVU5LTk9XTiwK
ICBHX0VSUl9VTkVYUF9FT0YsCiAgR19FUlJfVU5FWFBfRU9GX0lOX1NUUklORywKICBHX0VSUl9V
TkVYUF9FT0ZfSU5fQ09NTUVOVCwKICBHX0VSUl9OT05fRElHSVRfSU5fQ09OU1QsCiAgR19FUlJf
RElHSVRfUkFESVgsCiAgR19FUlJfRkxPQVRfUkFESVgsCiAgR19FUlJfRkxPQVRfTUFMRk9STUVE
Cn0gR0Vycm9yVHlwZTsKCiAKdHlwZWRlZiBlbnVtCnsKICBHX1RPS0VOX0VPRgkJCT0gICAwLAog
IAogIEdfVE9LRU5fTEVGVF9QQVJFTgkJPSAnKCcsCiAgR19UT0tFTl9SSUdIVF9QQVJFTgkJPSAn
KScsCiAgR19UT0tFTl9MRUZUX0NVUkxZCQk9ICd7JywKICBHX1RPS0VOX1JJR0hUX0NVUkxZCQk9
ICd9JywKICBHX1RPS0VOX0xFRlRfQlJBQ0UJCT0gJ1snLAogIEdfVE9LRU5fUklHSFRfQlJBQ0UJ
CT0gJ10nLAogIEdfVE9LRU5fRVFVQUxfU0lHTgkJPSAnPScsCiAgR19UT0tFTl9DT01NQQkJCT0g
JywnLAogIAogIEdfVE9LRU5fTk9ORQkJCT0gMjU2LAogIAogIEdfVE9LRU5fRVJST1IsCiAgCiAg
R19UT0tFTl9DSEFSLAogIEdfVE9LRU5fQklOQVJZLAogIEdfVE9LRU5fT0NUQUwsCiAgR19UT0tF
Tl9JTlQsCiAgR19UT0tFTl9IRVgsCiAgR19UT0tFTl9GTE9BVCwKICBHX1RPS0VOX1NUUklORywK
ICAKICBHX1RPS0VOX1NZTUJPTCwKICBHX1RPS0VOX0lERU5USUZJRVIsCiAgR19UT0tFTl9JREVO
VElGSUVSX05VTEwsCiAgCiAgR19UT0tFTl9DT01NRU5UX1NJTkdMRSwKICBHX1RPS0VOX0NPTU1F
TlRfTVVMVEksCiAgR19UT0tFTl9MQVNUCn0gR1Rva2VuVHlwZTsKCnVuaW9uCV9HVG9rZW5WYWx1
ZQp7CiAgZ3BvaW50ZXIJdl9zeW1ib2w7CiAgZ2NoYXIJCSp2X2lkZW50aWZpZXI7CiAgZ3Vsb25n
CXZfYmluYXJ5OwogIGd1bG9uZwl2X29jdGFsOwogIGd1bG9uZwl2X2ludDsKICBnZG91YmxlCXZf
ZmxvYXQ7CiAgZ3Vsb25nCXZfaGV4OwogIGdjaGFyCQkqdl9zdHJpbmc7CiAgZ2NoYXIJCSp2X2Nv
bW1lbnQ7CiAgZ3VjaGFyCXZfY2hhcjsKICBndWludAkJdl9lcnJvcjsKfTsKCnN0cnVjdAlfR1Nj
YW5uZXJDb25maWcKewogICAKCiAgZ2NoYXIJCSpjc2V0X3NraXBfY2hhcmFjdGVyczsJCSAKICBn
Y2hhcgkJKmNzZXRfaWRlbnRpZmllcl9maXJzdDsKICBnY2hhcgkJKmNzZXRfaWRlbnRpZmllcl9u
dGg7CiAgZ2NoYXIJCSpjcGFpcl9jb21tZW50X3NpbmdsZTsJCSAKICAKICAgCgogIGd1aW50CQlj
YXNlX3NlbnNpdGl2ZSA6IDE7CiAgCiAgIAoKCiAgZ3VpbnQJCXNraXBfY29tbWVudF9tdWx0aSA6
IDE7CQkgCiAgZ3VpbnQJCXNraXBfY29tbWVudF9zaW5nbGUgOiAxOwkgCiAgZ3VpbnQJCXNjYW5f
Y29tbWVudF9tdWx0aSA6IDE7CQkgCiAgZ3VpbnQJCXNjYW5faWRlbnRpZmllciA6IDE7CiAgZ3Vp
bnQJCXNjYW5faWRlbnRpZmllcl8xY2hhciA6IDE7CiAgZ3VpbnQJCXNjYW5faWRlbnRpZmllcl9O
VUxMIDogMTsKICBndWludAkJc2Nhbl9zeW1ib2xzIDogMTsKICBndWludAkJc2Nhbl9iaW5hcnkg
OiAxOwogIGd1aW50CQlzY2FuX29jdGFsIDogMTsKICBndWludAkJc2Nhbl9mbG9hdCA6IDE7CiAg
Z3VpbnQJCXNjYW5faGV4IDogMTsJCQkgCiAgZ3VpbnQJCXNjYW5faGV4X2RvbGxhciA6IDE7CQkg
CiAgZ3VpbnQJCXNjYW5fc3RyaW5nX3NxIDogMTsJCSAKICBndWludAkJc2Nhbl9zdHJpbmdfZHEg
OiAxOwkJIAogIGd1aW50CQludW1iZXJzXzJfaW50IDogMTsJCSAKICBndWludAkJaW50XzJfZmxv
YXQgOiAxOwkJIAogIGd1aW50CQlpZGVudGlmaWVyXzJfc3RyaW5nIDogMTsKICBndWludAkJY2hh
cl8yX3Rva2VuIDogMTsJCSAKICBndWludAkJc3ltYm9sXzJfdG9rZW4gOiAxOwogIGd1aW50CQlz
Y29wZV8wX2ZhbGxiYWNrIDogMTsJCSAKfTsKCnN0cnVjdAlfR1NjYW5uZXIKewogICAKICBncG9p
bnRlcgkJdXNlcl9kYXRhOwogIGd1aW50CQkJbWF4X3BhcnNlX2Vycm9yczsKICAKICAgCiAgZ3Vp
bnQJCQlwYXJzZV9lcnJvcnM7CiAgCiAgIAogIGNvbnN0IGdjaGFyCQkqaW5wdXRfbmFtZTsKICAK
ICAgCiAgZ3BvaW50ZXIJCWRlcml2ZWRfZGF0YTsKICAKICAgCiAgR1NjYW5uZXJDb25maWcJKmNv
bmZpZzsKICAKICAgCiAgR1Rva2VuVHlwZQkJdG9rZW47CiAgR1Rva2VuVmFsdWUJCXZhbHVlOwog
IGd1aW50CQkJbGluZTsKICBndWludAkJCXBvc2l0aW9uOwogIAogICAKICBHVG9rZW5UeXBlCQlu
ZXh0X3Rva2VuOwogIEdUb2tlblZhbHVlCQluZXh0X3ZhbHVlOwogIGd1aW50CQkJbmV4dF9saW5l
OwogIGd1aW50CQkJbmV4dF9wb3NpdGlvbjsKICAKICAgCiAgR0hhc2hUYWJsZQkJKnN5bWJvbF90
YWJsZTsKICBnaW50CQkJaW5wdXRfZmQ7CiAgY29uc3QgZ2NoYXIJCSp0ZXh0OwogIGNvbnN0IGdj
aGFyCQkqdGV4dF9lbmQ7CiAgZ2NoYXIJCQkqYnVmZmVyOwogIGd1aW50CQkJc2NvcGVfaWQ7CiAg
CiAgIAogIEdTY2FubmVyTXNnRnVuYwltc2dfaGFuZGxlcjsKfTsKCkdTY2FubmVyKglnX3NjYW5u
ZXJfbmV3CQkJKEdTY2FubmVyQ29uZmlnICpjb25maWdfdGVtcGwpOwp2b2lkCQlnX3NjYW5uZXJf
ZGVzdHJveQkJKEdTY2FubmVyCSpzY2FubmVyKTsKdm9pZAkJZ19zY2FubmVyX2lucHV0X2ZpbGUJ
CShHU2Nhbm5lcgkqc2Nhbm5lciwKCQkJCQkJIGdpbnQJCWlucHV0X2ZkKTsKdm9pZAkJZ19zY2Fu
bmVyX3N5bmNfZmlsZV9vZmZzZXQJKEdTY2FubmVyCSpzY2FubmVyKTsKdm9pZAkJZ19zY2FubmVy
X2lucHV0X3RleHQJCShHU2Nhbm5lcgkqc2Nhbm5lciwKCQkJCQkJIGNvbnN0CWdjaGFyCSp0ZXh0
LAoJCQkJCQkgZ3VpbnQJCXRleHRfbGVuKTsKR1Rva2VuVHlwZQlnX3NjYW5uZXJfZ2V0X25leHRf
dG9rZW4JKEdTY2FubmVyCSpzY2FubmVyKTsKR1Rva2VuVHlwZQlnX3NjYW5uZXJfcGVla19uZXh0
X3Rva2VuCShHU2Nhbm5lcgkqc2Nhbm5lcik7CkdUb2tlblR5cGUJZ19zY2FubmVyX2N1cl90b2tl
bgkJKEdTY2FubmVyCSpzY2FubmVyKTsKR1Rva2VuVmFsdWUJZ19zY2FubmVyX2N1cl92YWx1ZQkJ
KEdTY2FubmVyCSpzY2FubmVyKTsKZ3VpbnQJCWdfc2Nhbm5lcl9jdXJfbGluZQkJKEdTY2FubmVy
CSpzY2FubmVyKTsKZ3VpbnQJCWdfc2Nhbm5lcl9jdXJfcG9zaXRpb24JCShHU2Nhbm5lcgkqc2Nh
bm5lcik7Cmdib29sZWFuCWdfc2Nhbm5lcl9lb2YJCQkoR1NjYW5uZXIJKnNjYW5uZXIpOwpndWlu
dAkJZ19zY2FubmVyX3NldF9zY29wZQkJKEdTY2FubmVyCSpzY2FubmVyLAoJCQkJCQkgZ3VpbnQJ
CSBzY29wZV9pZCk7CnZvaWQJCWdfc2Nhbm5lcl9zY29wZV9hZGRfc3ltYm9sCShHU2Nhbm5lcgkq
c2Nhbm5lciwKCQkJCQkJIGd1aW50CQkgc2NvcGVfaWQsCgkJCQkJCSBjb25zdCBnY2hhcgkqc3lt
Ym9sLAoJCQkJCQkgZ3BvaW50ZXIJdmFsdWUpOwp2b2lkCQlnX3NjYW5uZXJfc2NvcGVfcmVtb3Zl
X3N5bWJvbAkoR1NjYW5uZXIJKnNjYW5uZXIsCgkJCQkJCSBndWludAkJIHNjb3BlX2lkLAoJCQkJ
CQkgY29uc3QgZ2NoYXIJKnN5bWJvbCk7Cmdwb2ludGVyCWdfc2Nhbm5lcl9zY29wZV9sb29rdXBf
c3ltYm9sCShHU2Nhbm5lcgkqc2Nhbm5lciwKCQkJCQkJIGd1aW50CQkgc2NvcGVfaWQsCgkJCQkJ
CSBjb25zdCBnY2hhcgkqc3ltYm9sKTsKdm9pZAkJZ19zY2FubmVyX3Njb3BlX2ZvcmVhY2hfc3lt
Ym9sCShHU2Nhbm5lcgkqc2Nhbm5lciwKCQkJCQkJIGd1aW50CQkgc2NvcGVfaWQsCgkJCQkJCSBH
SEZ1bmMJCSBmdW5jLAoJCQkJCQkgZ3BvaW50ZXIJIHVzZXJfZGF0YSk7Cmdwb2ludGVyCWdfc2Nh
bm5lcl9sb29rdXBfc3ltYm9sCQkoR1NjYW5uZXIJKnNjYW5uZXIsCgkJCQkJCSBjb25zdCBnY2hh
cgkqc3ltYm9sKTsKdm9pZAkJZ19zY2FubmVyX2ZyZWV6ZV9zeW1ib2xfdGFibGUJKEdTY2FubmVy
CSpzY2FubmVyKTsKdm9pZAkJZ19zY2FubmVyX3RoYXdfc3ltYm9sX3RhYmxlCShHU2Nhbm5lcgkq
c2Nhbm5lcik7CnZvaWQJCWdfc2Nhbm5lcl91bmV4cF90b2tlbgkJKEdTY2FubmVyCSpzY2FubmVy
LAoJCQkJCQkgR1Rva2VuVHlwZQlleHBlY3RlZF90b2tlbiwKCQkJCQkJIGNvbnN0IGdjaGFyCSpp
ZGVudGlmaWVyX3NwZWMsCgkJCQkJCSBjb25zdCBnY2hhcgkqc3ltYm9sX3NwZWMsCgkJCQkJCSBj
b25zdCBnY2hhcgkqc3ltYm9sX25hbWUsCgkJCQkJCSBjb25zdCBnY2hhcgkqbWVzc2FnZSwKCQkJ
CQkJIGdpbnQJCSBpc19lcnJvcik7CnZvaWQJCWdfc2Nhbm5lcl9lcnJvcgkJCShHU2Nhbm5lcgkq
c2Nhbm5lciwKCQkJCQkJIGNvbnN0IGdjaGFyCSpmb3JtYXQsCgkJCQkJCSAuLi4pIF9fYXR0cmli
dXRlX18oKGZvcm1hdCAocHJpbnRmLCAgMiAsICAzICkpKSA7CnZvaWQJCWdfc2Nhbm5lcl93YXJu
CQkJKEdTY2FubmVyCSpzY2FubmVyLAoJCQkJCQkgY29uc3QgZ2NoYXIJKmZvcm1hdCwKCQkJCQkJ
IC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsICAyICwgIDMgKSkpIDsKZ2ludAkJ
Z19zY2FubmVyX3N0YXRfbW9kZQkJKGNvbnN0IGdjaGFyCSpmaWxlbmFtZSk7CiAKCgoKCgoKCgoK
CgogCgoKc3RydWN0IF9HQ29tcGxldGlvbgp7CiAgR0xpc3QqIGl0ZW1zOwogIEdDb21wbGV0aW9u
RnVuYyBmdW5jOwogIAogIGdjaGFyKiBwcmVmaXg7CiAgR0xpc3QqIGNhY2hlOwp9OwoKR0NvbXBs
ZXRpb24qIGdfY29tcGxldGlvbl9uZXcJICAgICAgIChHQ29tcGxldGlvbkZ1bmMgZnVuYyk7CnZv
aWQJICAgICBnX2NvbXBsZXRpb25fYWRkX2l0ZW1zICAgIChHQ29tcGxldGlvbioJY21wLAoJCQkJ
CUdMaXN0KgkJaXRlbXMpOwp2b2lkCSAgICAgZ19jb21wbGV0aW9uX3JlbW92ZV9pdGVtcyAoR0Nv
bXBsZXRpb24qCWNtcCwKCQkJCQlHTGlzdCoJCWl0ZW1zKTsKdm9pZAkgICAgIGdfY29tcGxldGlv
bl9jbGVhcl9pdGVtcyAgKEdDb21wbGV0aW9uKgljbXApOwpHTGlzdCoJICAgICBnX2NvbXBsZXRp
b25fY29tcGxldGUgICAgIChHQ29tcGxldGlvbioJY21wLAoJCQkJCWdjaGFyKgkJcHJlZml4LAoJ
CQkJCWdjaGFyKioJCW5ld19wcmVmaXgpOwp2b2lkCSAgICAgZ19jb21wbGV0aW9uX2ZyZWUJICAg
ICAgIChHQ29tcGxldGlvbioJY21wKTsKCgogCgoKCgoKCgoKdHlwZWRlZiBndWludDE2IEdEYXRl
WWVhcjsKdHlwZWRlZiBndWludDggIEdEYXRlRGF5OyAgICAKdHlwZWRlZiBzdHJ1Y3QgX0dEYXRl
IEdEYXRlOwogCnN0cnVjdCB0bTsKCiAKdHlwZWRlZiBlbnVtCnsKICBHX0RBVEVfREFZICAgPSAw
LAogIEdfREFURV9NT05USCA9IDEsCiAgR19EQVRFX1lFQVIgID0gMgp9IEdEYXRlRE1ZOwoKIAp0
eXBlZGVmIGVudW0KewogIEdfREFURV9CQURfV0VFS0RBWSAgPSAwLAogIEdfREFURV9NT05EQVkg
ICAgICAgPSAxLAogIEdfREFURV9UVUVTREFZICAgICAgPSAyLAogIEdfREFURV9XRURORVNEQVkg
ICAgPSAzLAogIEdfREFURV9USFVSU0RBWSAgICAgPSA0LAogIEdfREFURV9GUklEQVkgICAgICAg
PSA1LAogIEdfREFURV9TQVRVUkRBWSAgICAgPSA2LAogIEdfREFURV9TVU5EQVkgICAgICAgPSA3
Cn0gR0RhdGVXZWVrZGF5Owp0eXBlZGVmIGVudW0KewogIEdfREFURV9CQURfTU9OVEggPSAwLAog
IEdfREFURV9KQU5VQVJZICAgPSAxLAogIEdfREFURV9GRUJSVUFSWSAgPSAyLAogIEdfREFURV9N
QVJDSCAgICAgPSAzLAogIEdfREFURV9BUFJJTCAgICAgPSA0LAogIEdfREFURV9NQVkgICAgICAg
PSA1LAogIEdfREFURV9KVU5FICAgICAgPSA2LAogIEdfREFURV9KVUxZICAgICAgPSA3LAogIEdf
REFURV9BVUdVU1QgICAgPSA4LAogIEdfREFURV9TRVBURU1CRVIgPSA5LAogIEdfREFURV9PQ1RP
QkVSICAgPSAxMCwKICBHX0RBVEVfTk9WRU1CRVIgID0gMTEsCiAgR19EQVRFX0RFQ0VNQkVSICA9
IDEyCn0gR0RhdGVNb250aDsKCgoKCgogCgoKCgpzdHJ1Y3QgX0dEYXRlCnsgCiAgZ3VpbnQganVs
aWFuX2RheXMgOiAzMjsgIAoKCgoKCiAgZ3VpbnQganVsaWFuIDogMTsgICAgIAogIGd1aW50IGRt
eSAgICA6IDE7ICAgICAKCiAgIAogIGd1aW50IGRheSAgICA6IDY7ICAKICBndWludCBtb250aCAg
OiA0OyAKICBndWludCB5ZWFyICAgOiAxNjsgCn07CgogCgoKCkdEYXRlKiAgICAgICBnX2RhdGVf
bmV3ICAgICAgICAgICAgICAgICAgICh2b2lkKTsKR0RhdGUqICAgICAgIGdfZGF0ZV9uZXdfZG15
ICAgICAgICAgICAgICAgKEdEYXRlRGF5ICAgICBkYXksIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0RhdGVNb250aCAgIG1vbnRoLCAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEYXRlWWVhciAgICB5ZWFyKTsKR0RhdGUqICAg
ICAgIGdfZGF0ZV9uZXdfanVsaWFuICAgICAgICAgICAgKGd1aW50MzIgICAgICBqdWxpYW5fZGF5
KTsKdm9pZCAgICAgICAgIGdfZGF0ZV9mcmVlICAgICAgICAgICAgICAgICAgKEdEYXRlICAgICAg
ICpkYXRlKTsKCiAKCgoKCmdib29sZWFuICAgICBnX2RhdGVfdmFsaWQgICAgICAgICAgICAgICAg
IChHRGF0ZSAgICAgICAqZGF0ZSk7Cmdib29sZWFuICAgICBnX2RhdGVfdmFsaWRfZGF5ICAgICAg
ICAgICAgIChHRGF0ZURheSAgICAgZGF5KTsKZ2Jvb2xlYW4gICAgIGdfZGF0ZV92YWxpZF9tb250
aCAgICAgICAgICAgKEdEYXRlTW9udGggICBtb250aCk7Cmdib29sZWFuICAgICBnX2RhdGVfdmFs
aWRfeWVhciAgICAgICAgICAgIChHRGF0ZVllYXIgICAgeWVhcik7Cmdib29sZWFuICAgICBnX2Rh
dGVfdmFsaWRfd2Vla2RheSAgICAgICAgIChHRGF0ZVdlZWtkYXkgd2Vla2RheSk7Cmdib29sZWFu
ICAgICBnX2RhdGVfdmFsaWRfanVsaWFuICAgICAgICAgIChndWludDMyICAgICAganVsaWFuX2Rh
dGUpOwpnYm9vbGVhbiAgICAgZ19kYXRlX3ZhbGlkX2RteSAgICAgICAgICAgICAoR0RhdGVEYXkg
ICAgIGRheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEYXRl
TW9udGggICBtb250aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdEYXRlWWVhciAgICB5ZWFyKTsKCkdEYXRlV2Vla2RheSBnX2RhdGVfd2Vla2RheSAgICAgICAg
ICAgICAgIChHRGF0ZSAgICAgICAqZGF0ZSk7CkdEYXRlTW9udGggICBnX2RhdGVfbW9udGggICAg
ICAgICAgICAgICAgIChHRGF0ZSAgICAgICAqZGF0ZSk7CkdEYXRlWWVhciAgICBnX2RhdGVfeWVh
ciAgICAgICAgICAgICAgICAgIChHRGF0ZSAgICAgICAqZGF0ZSk7CkdEYXRlRGF5ICAgICBnX2Rh
dGVfZGF5ICAgICAgICAgICAgICAgICAgIChHRGF0ZSAgICAgICAqZGF0ZSk7Cmd1aW50MzIgICAg
ICBnX2RhdGVfanVsaWFuICAgICAgICAgICAgICAgIChHRGF0ZSAgICAgICAqZGF0ZSk7Cmd1aW50
ICAgICAgICBnX2RhdGVfZGF5X29mX3llYXIgICAgICAgICAgIChHRGF0ZSAgICAgICAqZGF0ZSk7
CgogCgoKCgoKZ3VpbnQgICAgICAgIGdfZGF0ZV9tb25kYXlfd2Vla19vZl95ZWFyICAgKEdEYXRl
ICAgICAgKmRhdGUpOwpndWludCAgICAgICAgZ19kYXRlX3N1bmRheV93ZWVrX29mX3llYXIgICAo
R0RhdGUgICAgICAqZGF0ZSk7CgogCgoKCnZvaWQgICAgICAgICBnX2RhdGVfY2xlYXIgICAgICAg
ICAgICAgICAgIChHRGF0ZSAgICAgICAqZGF0ZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBndWludCAgICAgICAgbl9kYXRlcyk7CgogCgoKCnZvaWQgICAgICAg
ICBnX2RhdGVfc2V0X3BhcnNlICAgICAgICAgICAgIChHRGF0ZSAgICAgICAqZGF0ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpzdHIpOwp2
b2lkICAgICAgICAgZ19kYXRlX3NldF90aW1lICAgICAgICAgICAgICAoR0RhdGUgICAgICAgKmRh
dGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RpbWUgICAg
ICAgIHRpbWUpOwp2b2lkICAgICAgICAgZ19kYXRlX3NldF9tb250aCAgICAgICAgICAgICAoR0Rh
dGUgICAgICAgKmRhdGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0RhdGVNb250aCAgIG1vbnRoKTsKdm9pZCAgICAgICAgIGdfZGF0ZV9zZXRfZGF5ICAgICAg
ICAgICAgICAgKEdEYXRlICAgICAgICpkYXRlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdEYXRlRGF5ICAgICBkYXkpOwp2b2lkICAgICAgICAgZ19kYXRlX3Nl
dF95ZWFyICAgICAgICAgICAgICAoR0RhdGUgICAgICAgKmRhdGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHRGF0ZVllYXIgICAgeWVhcik7CnZvaWQgICAgICAg
ICBnX2RhdGVfc2V0X2RteSAgICAgICAgICAgICAgIChHRGF0ZSAgICAgICAqZGF0ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEYXRlRGF5ICAgICBkYXksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGF0ZU1vbnRoICAgbW9u
dGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGF0ZVllYXIg
ICAgeSk7CnZvaWQgICAgICAgICBnX2RhdGVfc2V0X2p1bGlhbiAgICAgICAgICAgIChHRGF0ZSAg
ICAgICAqZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1
aW50MzIgICAgICBqdWxpYW5fZGF0ZSk7Cmdib29sZWFuICAgICBnX2RhdGVfaXNfZmlyc3Rfb2Zf
bW9udGggICAgIChHRGF0ZSAgICAgICAqZGF0ZSk7Cmdib29sZWFuICAgICBnX2RhdGVfaXNfbGFz
dF9vZl9tb250aCAgICAgIChHRGF0ZSAgICAgICAqZGF0ZSk7CgogCnZvaWQgICAgICAgICBnX2Rh
dGVfYWRkX2RheXMgICAgICAgICAgICAgIChHRGF0ZSAgICAgICAqZGF0ZSwgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgbl9kYXlzKTsKdm9p
ZCAgICAgICAgIGdfZGF0ZV9zdWJ0cmFjdF9kYXlzICAgICAgICAgKEdEYXRlICAgICAgICpkYXRl
LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAg
ICBuX2RheXMpOwoKIAp2b2lkICAgICAgICAgZ19kYXRlX2FkZF9tb250aHMgICAgICAgICAgICAo
R0RhdGUgICAgICAgKmRhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBndWludCAgICAgICAgbl9tb250aHMpOwp2b2lkICAgICAgICAgZ19kYXRlX3N1YnRyYWN0
X21vbnRocyAgICAgICAoR0RhdGUgICAgICAgKmRhdGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgbl9tb250aHMpOwoKIAp2b2lkICAgICAg
ICAgZ19kYXRlX2FkZF95ZWFycyAgICAgICAgICAgICAoR0RhdGUgICAgICAgKmRhdGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgbl95ZWFy
cyk7CnZvaWQgICAgICAgICBnX2RhdGVfc3VidHJhY3RfeWVhcnMgICAgICAgIChHRGF0ZSAgICAg
ICAqZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50
ICAgICAgICBuX3llYXJzKTsKZ2Jvb2xlYW4gICAgIGdfZGF0ZV9pc19sZWFwX3llYXIgICAgICAg
ICAgKEdEYXRlWWVhciAgICB5ZWFyKTsKZ3VpbnQ4ICAgICAgIGdfZGF0ZV9kYXlzX2luX21vbnRo
ICAgICAgICAgKEdEYXRlTW9udGggICBtb250aCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHRGF0ZVllYXIgICAgeWVhcik7Cmd1aW50OCAgICAgICBnX2RhdGVf
bW9uZGF5X3dlZWtzX2luX3llYXIgIChHRGF0ZVllYXIgICAgeWVhcik7Cmd1aW50OCAgICAgICBn
X2RhdGVfc3VuZGF5X3dlZWtzX2luX3llYXIgIChHRGF0ZVllYXIgICAgeWVhcik7CgogCmdpbnQg
ICAgICAgICBnX2RhdGVfY29tcGFyZSAgICAgICAgICAgICAgIChHRGF0ZSAgICAgICAqbGhzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RhdGUgICAgICAgKnJo
cyk7CnZvaWQgICAgICAgICBnX2RhdGVfdG9fc3RydWN0X3RtICAgICAgICAgIChHRGF0ZSAgICAg
ICAqZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCB0bSAgICp0bSk7CgogCgoKZ3NpemUgICAgICAgIGdfZGF0ZV9zdHJmdGltZSAgICAgICAgICAg
ICAgKGdjaGFyICAgICAgICpzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3NpemUgICAgICAgIHNsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnY2hhciAqZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0RhdGUgICAgICAgKmRhdGUpOwoKCiAKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCkdSZWxhdGlvbiogZ19yZWxhdGlvbl9uZXcgICAgIChnaW50CSAgICBmaWVsZHMpOwp2
b2lkCSAgIGdfcmVsYXRpb25fZGVzdHJveSAoR1JlbGF0aW9uICAgKnJlbGF0aW9uKTsKdm9pZAkg
ICBnX3JlbGF0aW9uX2luZGV4ICAgKEdSZWxhdGlvbiAgICpyZWxhdGlvbiwKCQkJICAgICAgIGdp
bnQJICAgIGZpZWxkLAoJCQkgICAgICAgR0hhc2hGdW5jICAgIGhhc2hfZnVuYywKCQkJICAgICAg
IEdDb21wYXJlRnVuYyBrZXlfY29tcGFyZV9mdW5jKTsKdm9pZAkgICBnX3JlbGF0aW9uX2luc2Vy
dCAgKEdSZWxhdGlvbiAgICpyZWxhdGlvbiwKCQkJICAgICAgIC4uLik7CmdpbnQJICAgZ19yZWxh
dGlvbl9kZWxldGUgIChHUmVsYXRpb24gICAqcmVsYXRpb24sCgkJCSAgICAgICBnY29uc3Rwb2lu
dGVyICBrZXksCgkJCSAgICAgICBnaW50CSAgICBmaWVsZCk7CkdUdXBsZXMqICAgZ19yZWxhdGlv
bl9zZWxlY3QgIChHUmVsYXRpb24gICAqcmVsYXRpb24sCgkJCSAgICAgICBnY29uc3Rwb2ludGVy
ICBrZXksCgkJCSAgICAgICBnaW50CSAgICBmaWVsZCk7CmdpbnQJICAgZ19yZWxhdGlvbl9jb3Vu
dCAgIChHUmVsYXRpb24gICAqcmVsYXRpb24sCgkJCSAgICAgICBnY29uc3Rwb2ludGVyICBrZXks
CgkJCSAgICAgICBnaW50CSAgICBmaWVsZCk7Cmdib29sZWFuICAgZ19yZWxhdGlvbl9leGlzdHMg
IChHUmVsYXRpb24gICAqcmVsYXRpb24sCgkJCSAgICAgICAuLi4pOwp2b2lkCSAgIGdfcmVsYXRp
b25fcHJpbnQgICAoR1JlbGF0aW9uICAgKnJlbGF0aW9uKTsKCnZvaWQJICAgZ190dXBsZXNfZGVz
dHJveSAgIChHVHVwbGVzCSAgICp0dXBsZXMpOwpncG9pbnRlciAgIGdfdHVwbGVzX2luZGV4ICAg
ICAoR1R1cGxlcwkgICAqdHVwbGVzLAoJCQkgICAgICAgZ2ludAkgICAgaW5kZXgsCgkJCSAgICAg
ICBnaW50CSAgICBmaWVsZCk7CgoKIAoKCiAKCgoKCgpndWludAkgICBnX3NwYWNlZF9wcmltZXNf
Y2xvc2VzdCAoZ3VpbnQgbnVtKTsKCgogCgoKdHlwZWRlZiBzdHJ1Y3QgX0dJT0Z1bmNzIEdJT0Z1
bmNzOwp0eXBlZGVmIGVudW0KewogIEdfSU9fRVJST1JfTk9ORSwKICBHX0lPX0VSUk9SX0FHQUlO
LAogIEdfSU9fRVJST1JfSU5WQUwsCiAgR19JT19FUlJPUl9VTktOT1dOCn0gR0lPRXJyb3I7CnR5
cGVkZWYgZW51bQp7CiAgR19TRUVLX0NVUiwKICBHX1NFRUtfU0VULAogIEdfU0VFS19FTkQKfSBH
U2Vla1R5cGU7CnR5cGVkZWYgZW51bQp7CiAgR19JT19JTgk9MSAsCiAgR19JT19PVVQJPTQgLAog
IEdfSU9fUFJJCT0yICwKICBHX0lPX0VSUgk9OCAsCiAgR19JT19IVVAJPTE2ICwKICBHX0lPX05W
QUwJPTMyIAp9IEdJT0NvbmRpdGlvbjsKCnN0cnVjdCBfR0lPQ2hhbm5lbAp7CiAgZ3VpbnQgY2hh
bm5lbF9mbGFnczsKICBndWludCByZWZfY291bnQ7CiAgR0lPRnVuY3MgKmZ1bmNzOwp9OwoKdHlw
ZWRlZiBnYm9vbGVhbiAoKkdJT0Z1bmMpIChHSU9DaGFubmVsICAgKnNvdXJjZSwKCQkJICAgICBH
SU9Db25kaXRpb24gIGNvbmRpdGlvbiwKCQkJICAgICBncG9pbnRlciAgICAgIGRhdGEpOwpzdHJ1
Y3QgX0dJT0Z1bmNzCnsKICBHSU9FcnJvciAoKmlvX3JlYWQpICAgKEdJT0NoYW5uZWwgCSpjaGFu
bmVsLCAKCQkgICAgICAgICBnY2hhciAgICAgIAkqYnVmLCAKCQkgICAgICAgICBndWludCAgICAg
IAkgY291bnQsCgkJCSBndWludCAgICAgIAkqYnl0ZXNfcmVhZCk7CiAgR0lPRXJyb3IgKCppb193
cml0ZSkgIChHSU9DaGFubmVsIAkqY2hhbm5lbCwgCgkJIAkgZ2NoYXIgICAgICAJKmJ1ZiwgCgkJ
CSBndWludCAgICAgIAkgY291bnQsCgkJCSBndWludCAgICAgIAkqYnl0ZXNfd3JpdHRlbik7CiAg
R0lPRXJyb3IgKCppb19zZWVrKSAgIChHSU9DaGFubmVsICAgCSpjaGFubmVsLCAKCQkgCSBnaW50
ICAgICAgIAkgb2Zmc2V0LCAKCQkgIAkgR1NlZWtUeXBlICAJIHR5cGUpOwogIHZvaWQgKCppb19j
bG9zZSkgICAgICAoR0lPQ2hhbm5lbAkqY2hhbm5lbCk7CiAgZ3VpbnQgKCppb19hZGRfd2F0Y2gp
IChHSU9DaGFubmVsICAgICAqY2hhbm5lbCwKCQkJIGdpbnQgICAgICAgICAgICBwcmlvcml0eSwK
CQkJIEdJT0NvbmRpdGlvbiAgICBjb25kaXRpb24sCgkJCSBHSU9GdW5jICAgICAgICAgZnVuYywK
CQkJIGdwb2ludGVyICAgICAgICB1c2VyX2RhdGEsCgkJCSBHRGVzdHJveU5vdGlmeSAgbm90aWZ5
KTsKICB2b2lkICgqaW9fZnJlZSkgICAgICAgKEdJT0NoYW5uZWwJKmNoYW5uZWwpOwp9OwoKdm9p
ZCAgICAgICAgZ19pb19jaGFubmVsX2luaXQgICAoR0lPQ2hhbm5lbCAgICAqY2hhbm5lbCk7CnZv
aWQgICAgICAgIGdfaW9fY2hhbm5lbF9yZWYgICAgKEdJT0NoYW5uZWwgICAgKmNoYW5uZWwpOwp2
b2lkICAgICAgICBnX2lvX2NoYW5uZWxfdW5yZWYgIChHSU9DaGFubmVsICAgICpjaGFubmVsKTsK
R0lPRXJyb3IgICAgZ19pb19jaGFubmVsX3JlYWQgICAoR0lPQ2hhbm5lbCAgICAqY2hhbm5lbCwg
CgkJCSAgICAgICAgIGdjaGFyICAgICAgICAgKmJ1ZiwgCgkJCSAgICAgICAgIGd1aW50ICAgICAg
ICAgIGNvdW50LAoJCQkgICAgICAgICBndWludCAgICAgICAgICpieXRlc19yZWFkKTsKR0lPRXJy
b3IgIGdfaW9fY2hhbm5lbF93cml0ZSAgICAoR0lPQ2hhbm5lbCAgICAqY2hhbm5lbCwgCgkJCSAg
ICAgICAgIGdjaGFyICAgICAgICAgKmJ1ZiwgCgkJCSAgICAgICAgIGd1aW50ICAgICAgICAgIGNv
dW50LAoJCQkgICAgICAgICBndWludCAgICAgICAgICpieXRlc193cml0dGVuKTsKR0lPRXJyb3Ig
IGdfaW9fY2hhbm5lbF9zZWVrICAgICAoR0lPQ2hhbm5lbCAgICAqY2hhbm5lbCwKCQkJICAgICAg
ICAgZ2ludCAgICAgICAgICAgb2Zmc2V0LCAKCQkJICAgICAgICAgR1NlZWtUeXBlICAgICAgdHlw
ZSk7CnZvaWQgICAgICBnX2lvX2NoYW5uZWxfY2xvc2UgICAgKEdJT0NoYW5uZWwgICAgKmNoYW5u
ZWwpOwpndWludCAgICAgZ19pb19hZGRfd2F0Y2hfZnVsbCAgIChHSU9DaGFubmVsICAgICpjaGFu
bmVsLAoJCQkgICAgICAgICBnaW50ICAgICAgICAgICBwcmlvcml0eSwKCQkJICAgICAgICAgR0lP
Q29uZGl0aW9uICAgY29uZGl0aW9uLAoJCQkgICAgICAgICBHSU9GdW5jICAgICAgICBmdW5jLAoJ
CQkgICAgICAgICBncG9pbnRlciAgICAgICB1c2VyX2RhdGEsCgkJCSAgICAgICAgIEdEZXN0cm95
Tm90aWZ5IG5vdGlmeSk7Cmd1aW50ICAgIGdfaW9fYWRkX3dhdGNoICAgICAgICAgKEdJT0NoYW5u
ZWwgICAgKmNoYW5uZWwsCgkJCSAgICAgICAgIEdJT0NvbmRpdGlvbiAgIGNvbmRpdGlvbiwKCQkJ
ICAgICAgICAgR0lPRnVuYyAgICAgICAgZnVuYywKCQkJICAgICAgICAgZ3BvaW50ZXIgICAgICAg
dXNlcl9kYXRhKTsKCgogCgp0eXBlZGVmIHN0cnVjdCBfR1RpbWVWYWwJR1RpbWVWYWw7CnR5cGVk
ZWYgc3RydWN0IF9HU291cmNlRnVuY3MJR1NvdXJjZUZ1bmNzOwp0eXBlZGVmIHN0cnVjdCBfR01h
aW5Mb29wCUdNYWluTG9vcDsJIAoKc3RydWN0IF9HVGltZVZhbAp7CiAgZ2xvbmcgdHZfc2VjOwog
IGdsb25nIHR2X3VzZWM7Cn07CnN0cnVjdCBfR1NvdXJjZUZ1bmNzCnsKICBnYm9vbGVhbiAoKnBy
ZXBhcmUpICAoZ3BvaW50ZXIgIHNvdXJjZV9kYXRhLCAKCQkJR1RpbWVWYWwgKmN1cnJlbnRfdGlt
ZSwKCQkJZ2ludCAgICAgKnRpbWVvdXQsCgkJCWdwb2ludGVyICB1c2VyX2RhdGEpOwogIGdib29s
ZWFuICgqY2hlY2spICAgIChncG9pbnRlciAgc291cmNlX2RhdGEsCgkJCUdUaW1lVmFsICpjdXJy
ZW50X3RpbWUsCgkJCWdwb2ludGVyICB1c2VyX2RhdGEpOwogIGdib29sZWFuICgqZGlzcGF0Y2gp
IChncG9pbnRlciAgc291cmNlX2RhdGEsIAoJCQlHVGltZVZhbCAqZGlzcGF0Y2hfdGltZSwKCQkJ
Z3BvaW50ZXIgIHVzZXJfZGF0YSk7CiAgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveTsKfTsKCiAKCgoK
CgoKCnR5cGVkZWYgZ2Jvb2xlYW4gKCpHU291cmNlRnVuYykgKGdwb2ludGVyIGRhdGEpOwoKIApn
dWludCAgICBnX3NvdXJjZV9hZGQgICAgICAgICAgICAgICAgICAgICAgICAoZ2ludCAgICAgICAg
ICAgcHJpb3JpdHksIAoJCQkJCSAgICAgIGdib29sZWFuICAgICAgIGNhbl9yZWN1cnNlLAoJCQkJ
CSAgICAgIEdTb3VyY2VGdW5jcyAgKmZ1bmNzLAoJCQkJCSAgICAgIGdwb2ludGVyICAgICAgIHNv
dXJjZV9kYXRhLCAKCQkJCQkgICAgICBncG9pbnRlciAgICAgICB1c2VyX2RhdGEsCgkJCQkJICAg
ICAgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5KTsKZ2Jvb2xlYW4gZ19zb3VyY2VfcmVtb3ZlICAgICAg
ICAgICAgICAgICAgICAgKGd1aW50ICAgICAgICAgIHRhZyk7Cmdib29sZWFuIGdfc291cmNlX3Jl
bW92ZV9ieV91c2VyX2RhdGEgICAgICAgIChncG9pbnRlciAgICAgICB1c2VyX2RhdGEpOwpnYm9v
bGVhbiBnX3NvdXJjZV9yZW1vdmVfYnlfc291cmNlX2RhdGEgICAgICAoZ3BvaW50ZXIgICAgICAg
c291cmNlX2RhdGEpOwpnYm9vbGVhbiBnX3NvdXJjZV9yZW1vdmVfYnlfZnVuY3NfdXNlcl9kYXRh
ICAoR1NvdXJjZUZ1bmNzICAqZnVuY3MsCgkJCQkJICAgICAgZ3BvaW50ZXIgICAgICAgdXNlcl9k
YXRhKTsKCnZvaWQgZ19nZXRfY3VycmVudF90aW1lCQkgICAgICAgIChHVGltZVZhbAkqcmVzdWx0
KTsKCiAKR01haW5Mb29wKglnX21haW5fbmV3CQkoZ2Jvb2xlYW4JIGlzX3J1bm5pbmcpOwp2b2lk
CQlnX21haW5fcnVuCQkoR01haW5Mb29wCSpsb29wKTsKdm9pZAkJZ19tYWluX3F1aXQJCShHTWFp
bkxvb3AJKmxvb3ApOwp2b2lkCQlnX21haW5fZGVzdHJveQkJKEdNYWluTG9vcAkqbG9vcCk7Cmdi
b29sZWFuCWdfbWFpbl9pc19ydW5uaW5nCShHTWFpbkxvb3AJKmxvb3ApOwoKIAoKCmdib29sZWFu
CWdfbWFpbl9pdGVyYXRpb24JKGdib29sZWFuCW1heV9ibG9jayk7CgogCmdib29sZWFuCWdfbWFp
bl9wZW5kaW5nCQkodm9pZCk7CgogCmd1aW50CQlnX3RpbWVvdXRfYWRkX2Z1bGwJKGdpbnQgICAg
ICAgICAgIHByaW9yaXR5LAoJCQkJCSBndWludCAgICAgICAgICBpbnRlcnZhbCwgCgkJCQkJIEdT
b3VyY2VGdW5jICAgIGZ1bmN0aW9uLAoJCQkJCSBncG9pbnRlciAgICAgICBkYXRhLAoJCQkJCSBH
RGVzdHJveU5vdGlmeSBub3RpZnkpOwpndWludAkJZ190aW1lb3V0X2FkZAkJKGd1aW50ICAgICAg
ICAgIGludGVydmFsLAoJCQkJCSBHU291cmNlRnVuYyAgICBmdW5jdGlvbiwKCQkJCQkgZ3BvaW50
ZXIgICAgICAgZGF0YSk7Cmd1aW50CQlnX2lkbGVfYWRkCSAgIAkoR1NvdXJjZUZ1bmMJZnVuY3Rp
b24sCgkJCQkJIGdwb2ludGVyCWRhdGEpOwpndWludAkgICAJZ19pZGxlX2FkZF9mdWxsCQkoZ2lu
dCAgIAlwcmlvcml0eSwKCQkJCQkgR1NvdXJjZUZ1bmMJZnVuY3Rpb24sCgkJCQkJIGdwb2ludGVy
CWRhdGEsCgkJCQkJIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3kpOwpnYm9vbGVhbglnX2lkbGVfcmVt
b3ZlX2J5X2RhdGEJKGdwb2ludGVyCWRhdGEpOwoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5
cGVkZWYgc3RydWN0IF9HUG9sbEZEIEdQb2xsRkQ7CnR5cGVkZWYgZ2ludAkoKkdQb2xsRnVuYykJ
KEdQb2xsRkQgKnVmZHMsCgkJCQkgZ3VpbnQJICBuZnNkLAoJCQkJIGdpbnQgICAgIHRpbWVvdXQp
OwpzdHJ1Y3QgX0dQb2xsRkQKewogIGdpbnQJCWZkOwogIGd1c2hvcnQgCWV2ZW50czsKICBndXNo
b3J0IAlyZXZlbnRzOwp9OwoKdm9pZCAgICAgICAgZ19tYWluX2FkZF9wb2xsICAgICAgICAgIChH
UG9sbEZEICAgICpmZCwKCQkJCSAgICAgIGdpbnQgICAgICAgIHByaW9yaXR5KTsKdm9pZCAgICAg
ICAgZ19tYWluX3JlbW92ZV9wb2xsICAgICAgIChHUG9sbEZEICAgICpmZCk7CnZvaWQgICAgICAg
IGdfbWFpbl9zZXRfcG9sbF9mdW5jICAgICAoR1BvbGxGdW5jICAgZnVuYyk7CgogCgoKCgoKCgoK
CgpHSU9DaGFubmVsKiBnX2lvX2NoYW5uZWxfdW5peF9uZXcgICAgKGludCAgICAgICAgIGZkKTsK
Z2ludCAgICAgICAgZ19pb19jaGFubmVsX3VuaXhfZ2V0X2ZkIChHSU9DaGFubmVsICpjaGFubmVs
KTsKCiMgMjYxMyAiL29wdC9ndGsvaW5jbHVkZS9nbGliLTEuMi9nbGliLmgiCgoKIAoKIyAyNjcy
ICIvb3B0L2d0ay9pbmNsdWRlL2dsaWItMS4yL2dsaWIuaCIKCgoKIAoKdHlwZWRlZiBzdHJ1Y3Qg
X0dNdXRleAkJR011dGV4Owp0eXBlZGVmIHN0cnVjdCBfR0NvbmQJCUdDb25kOwp0eXBlZGVmIHN0
cnVjdCBfR1ByaXZhdGUJR1ByaXZhdGU7CnR5cGVkZWYgc3RydWN0IF9HU3RhdGljUHJpdmF0ZQlH
U3RhdGljUHJpdmF0ZTsKdHlwZWRlZiBzdHJ1Y3QgX0dUaHJlYWRGdW5jdGlvbnMgR1RocmVhZEZ1
bmN0aW9uczsKc3RydWN0IF9HVGhyZWFkRnVuY3Rpb25zCnsKICBHTXV0ZXgqICAoKm11dGV4X25l
dykgICAgICAgKHZvaWQpOwogIHZvaWQgICAgICgqbXV0ZXhfbG9jaykgICAgICAoR011dGV4CQkq
bXV0ZXgpOwogIGdib29sZWFuICgqbXV0ZXhfdHJ5bG9jaykgICAoR011dGV4CQkqbXV0ZXgpOwog
IHZvaWQgICAgICgqbXV0ZXhfdW5sb2NrKSAgICAoR011dGV4CQkqbXV0ZXgpOwogIHZvaWQgICAg
ICgqbXV0ZXhfZnJlZSkgICAgICAoR011dGV4CQkqbXV0ZXgpOwogIEdDb25kKiAgICgqY29uZF9u
ZXcpICAgICAgICAodm9pZCk7CiAgdm9pZCAgICAgKCpjb25kX3NpZ25hbCkgICAgIChHQ29uZAkJ
KmNvbmQpOwogIHZvaWQgICAgICgqY29uZF9icm9hZGNhc3QpICAoR0NvbmQJCSpjb25kKTsKICB2
b2lkICAgICAoKmNvbmRfd2FpdCkgICAgICAgKEdDb25kCQkqY29uZCwKCQkJICAgICAgIEdNdXRl
eAkJKm11dGV4KTsKICBnYm9vbGVhbiAoKmNvbmRfdGltZWRfd2FpdCkgKEdDb25kCQkqY29uZCwK
CQkJICAgICAgIEdNdXRleAkJKm11dGV4LCAKCQkJICAgICAgIEdUaW1lVmFsIAkqZW5kX3RpbWUp
OwogIHZvaWQgICAgICAoKmNvbmRfZnJlZSkgICAgICAoR0NvbmQJCSpjb25kKTsKICBHUHJpdmF0
ZSogKCpwcml2YXRlX25ldykgICAgKEdEZXN0cm95Tm90aWZ5CSBkZXN0cnVjdG9yKTsKICBncG9p
bnRlciAgKCpwcml2YXRlX2dldCkgICAgKEdQcml2YXRlCQkqcHJpdmF0ZV9rZXkpOwogIHZvaWQg
ICAgICAoKnByaXZhdGVfc2V0KSAgICAoR1ByaXZhdGUJCSpwcml2YXRlX2tleSwKCQkJICAgICAg
IGdwb2ludGVyCQkgZGF0YSk7Cn07CgpleHRlcm4gIEdUaHJlYWRGdW5jdGlvbnMJZ190aHJlYWRf
ZnVuY3Rpb25zX2Zvcl9nbGliX3VzZTsKZXh0ZXJuICBnYm9vbGVhbgkJZ190aHJlYWRfdXNlX2Rl
ZmF1bHRfaW1wbDsKZXh0ZXJuICBnYm9vbGVhbgkJZ190aHJlYWRzX2dvdF9pbml0aWFsaXplZDsK
CiAKCgoKdm9pZCAgIGdfdGhyZWFkX2luaXQgICAoR1RocmVhZEZ1bmN0aW9ucyAgICAgICAqdnRh
YmxlKTsKCiAKR011dGV4KglnX3N0YXRpY19tdXRleF9nZXRfbXV0ZXhfaW1wbAkoR011dGV4CSoq
bXV0ZXgpOwoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCnN0
cnVjdCBfR1N0YXRpY1ByaXZhdGUKewogIGd1aW50IGluZGV4Owp9OwoKZ3BvaW50ZXIgZ19zdGF0
aWNfcHJpdmF0ZV9nZXQgKEdTdGF0aWNQcml2YXRlCSpwcml2YXRlX2tleSk7CnZvaWQgICAgIGdf
c3RhdGljX3ByaXZhdGVfc2V0IChHU3RhdGljUHJpdmF0ZQkqcHJpdmF0ZV9rZXksIAoJCQkgICAg
ICAgZ3BvaW50ZXIgICAgICAgIAkgZGF0YSwKCQkJICAgICAgIEdEZXN0cm95Tm90aWZ5ICAgIG5v
dGlmeSk7CgogCgoKCgoKCgoKZXh0ZXJuIHZvaWQgZ2xpYl9kdW1teV9kZWNsICh2b2lkKTsKCgoK
CgoKCiMgMjgwOCAiL29wdC9ndGsvaW5jbHVkZS9nbGliLTEuMi9nbGliLmgiCgoKCgoKCgoKCgoK
CgoKCn0KCgoKCiMgMzMgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLTEuMi9nZGsvZ2RrdHlwZXMuaCIg
MgoKCgoKCgoKIAoKCgoKZXh0ZXJuICJDIiB7CgoKCiAKCgp0eXBlZGVmIGd1bG9uZwkJCSAgICAg
IEdka0F0b207CnR5cGVkZWYgc3RydWN0IF9HZGtDb2xvcgkgICAgICBHZGtDb2xvcjsKdHlwZWRl
ZiBzdHJ1Y3QgX0dka0NvbG9ybWFwCSAgICAgIEdka0NvbG9ybWFwOwp0eXBlZGVmIHN0cnVjdCBf
R2RrVmlzdWFsCSAgICAgIEdka1Zpc3VhbDsKdHlwZWRlZiBzdHJ1Y3QgX0dka1dpbmRvd0F0dHIJ
ICAgICAgR2RrV2luZG93QXR0cjsKdHlwZWRlZiBzdHJ1Y3QgX0dka1dpbmRvdwkgICAgICBHZGtX
aW5kb3c7CnR5cGVkZWYgc3RydWN0IF9HZGtXaW5kb3cJICAgICAgR2RrUGl4bWFwOwp0eXBlZGVm
IHN0cnVjdCBfR2RrV2luZG93CSAgICAgIEdka0JpdG1hcDsKdHlwZWRlZiBzdHJ1Y3QgX0dka1dp
bmRvdwkgICAgICBHZGtEcmF3YWJsZTsKdHlwZWRlZiBzdHJ1Y3QgX0dka0dlb21ldHJ5ICAgICAg
ICAgICBHZGtHZW9tZXRyeTsKdHlwZWRlZiBzdHJ1Y3QgX0dka0ltYWdlCSAgICAgIEdka0ltYWdl
Owp0eXBlZGVmIHN0cnVjdCBfR2RrR0NWYWx1ZXMJICAgICAgR2RrR0NWYWx1ZXM7CnR5cGVkZWYg
c3RydWN0IF9HZGtHQwkJICAgICAgR2RrR0M7CnR5cGVkZWYgc3RydWN0IF9HZGtQb2ludAkgICAg
ICBHZGtQb2ludDsKdHlwZWRlZiBzdHJ1Y3QgX0dka1JlY3RhbmdsZQkgICAgICBHZGtSZWN0YW5n
bGU7CnR5cGVkZWYgc3RydWN0IF9HZGtTZWdtZW50CSAgICAgIEdka1NlZ21lbnQ7CnR5cGVkZWYg
c3RydWN0IF9HZGtGb250CQkgICAgICBHZGtGb250Owp0eXBlZGVmIHN0cnVjdCBfR2RrQ3Vyc29y
CSAgICAgIEdka0N1cnNvcjsKdHlwZWRlZiBzdHJ1Y3QgX0dka0NvbG9yQ29udGV4dERpdGhlciBH
ZGtDb2xvckNvbnRleHREaXRoZXI7CnR5cGVkZWYgc3RydWN0IF9HZGtDb2xvckNvbnRleHQJICAg
ICAgR2RrQ29sb3JDb250ZXh0Owp0eXBlZGVmIHN0cnVjdCBfR2RrRHJhZ0NvbnRleHQgICAgICAg
IEdka0RyYWdDb250ZXh0OwoKdHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50QW55CSAgICBHZGtFdmVu
dEFueTsKdHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50RXhwb3NlCSAgICBHZGtFdmVudEV4cG9zZTsK
dHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50Tm9FeHBvc2UgICAgR2RrRXZlbnROb0V4cG9zZTsKdHlw
ZWRlZiBzdHJ1Y3QgX0dka0V2ZW50VmlzaWJpbGl0eSAgR2RrRXZlbnRWaXNpYmlsaXR5Owp0eXBl
ZGVmIHN0cnVjdCBfR2RrRXZlbnRNb3Rpb24JICAgIEdka0V2ZW50TW90aW9uOwp0eXBlZGVmIHN0
cnVjdCBfR2RrRXZlbnRCdXR0b24JICAgIEdka0V2ZW50QnV0dG9uOwp0eXBlZGVmIHN0cnVjdCBf
R2RrRXZlbnRLZXkJICAgIEdka0V2ZW50S2V5Owp0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRGb2N1
cwkgICAgR2RrRXZlbnRGb2N1czsKdHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50Q3Jvc3NpbmcgICAg
R2RrRXZlbnRDcm9zc2luZzsKdHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50Q29uZmlndXJlICAgR2Rr
RXZlbnRDb25maWd1cmU7CnR5cGVkZWYgc3RydWN0IF9HZGtFdmVudFByb3BlcnR5ICAgIEdka0V2
ZW50UHJvcGVydHk7CnR5cGVkZWYgc3RydWN0IF9HZGtFdmVudFNlbGVjdGlvbiAgIEdka0V2ZW50
U2VsZWN0aW9uOwp0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRQcm94aW1pdHkgICBHZGtFdmVudFBy
b3hpbWl0eTsKdHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50Q2xpZW50CSAgICBHZGtFdmVudENsaWVu
dDsKCnR5cGVkZWYgc3RydWN0IF9HZGtFdmVudERORCAgICAgICAgIEdka0V2ZW50RE5EOwoKdHlw
ZWRlZiB1bmlvbiAgX0dka0V2ZW50CSAgICBHZGtFdmVudDsKCnR5cGVkZWYgc3RydWN0IF9HZGtE
ZXZpY2VLZXkJICAgIEdka0RldmljZUtleTsKdHlwZWRlZiBzdHJ1Y3QgX0dka0RldmljZUluZm8J
ICAgIEdka0RldmljZUluZm87CnR5cGVkZWYgc3RydWN0IF9HZGtUaW1lQ29vcmQJICAgIEdka1Rp
bWVDb29yZDsKdHlwZWRlZiBzdHJ1Y3QgX0dka1JlZ2lvbgkgICAgR2RrUmVnaW9uOwp0eXBlZGVm
IHZvaWQgKCpHZGtFdmVudEZ1bmMpIChHZGtFdmVudCAqZXZlbnQsCgkJCSAgICAgIGdwb2ludGVy
CWRhdGEpOwoKdHlwZWRlZiBzdHJ1Y3QgX0dka0lDICAgICAgICAgICAgICAgR2RrSUM7CnR5cGVk
ZWYgc3RydWN0IF9HZGtJQ0F0dHIJICAgIEdka0lDQXR0cjsKCnR5cGVkZWYgZ3VpbnQzMgkJCSAg
ICBHZGtXQ2hhcjsKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBlbnVtCnsKICBHREtf
V0lORE9XX1JPT1QsCiAgR0RLX1dJTkRPV19UT1BMRVZFTCwKICBHREtfV0lORE9XX0NISUxELAog
IEdES19XSU5ET1dfRElBTE9HLAogIEdES19XSU5ET1dfVEVNUCwKICBHREtfV0lORE9XX1BJWE1B
UCwKICBHREtfV0lORE9XX0ZPUkVJR04KfSBHZGtXaW5kb3dUeXBlOwoKIAoKCgoKCgoKCnR5cGVk
ZWYgZW51bQp7CiAgR0RLX0lOUFVUX09VVFBVVCwKICBHREtfSU5QVVRfT05MWQp9IEdka1dpbmRv
d0NsYXNzOwoKIAoKCgoKCgoKCgp0eXBlZGVmIGVudW0KewogIEdES19JTUFHRV9OT1JNQUwsCiAg
R0RLX0lNQUdFX1NIQVJFRCwKICBHREtfSU1BR0VfRkFTVEVTVAp9IEdka0ltYWdlVHlwZTsKCiAK
CgoKCgoKCnR5cGVkZWYgZW51bQp7CiAgR0RLX1ZJU1VBTF9TVEFUSUNfR1JBWSwKICBHREtfVklT
VUFMX0dSQVlTQ0FMRSwKICBHREtfVklTVUFMX1NUQVRJQ19DT0xPUiwKICBHREtfVklTVUFMX1BT
RVVET19DT0xPUiwKICBHREtfVklTVUFMX1RSVUVfQ09MT1IsCiAgR0RLX1ZJU1VBTF9ESVJFQ1Rf
Q09MT1IKfSBHZGtWaXN1YWxUeXBlOwoKIAoKCgp0eXBlZGVmIGVudW0KewogIEdES19GT05UX0ZP
TlQsCiAgR0RLX0ZPTlRfRk9OVFNFVAp9IEdka0ZvbnRUeXBlOwoKIAoKCgoKCgoKdHlwZWRlZiBl
bnVtCnsKICBHREtfV0FfVElUTEUJICA9IDEgPDwgMSwKICBHREtfV0FfWAkgID0gMSA8PCAyLAog
IEdES19XQV9ZCSAgPSAxIDw8IDMsCiAgR0RLX1dBX0NVUlNPUgkgID0gMSA8PCA0LAogIEdES19X
QV9DT0xPUk1BUCA9IDEgPDwgNSwKICBHREtfV0FfVklTVUFMCSAgPSAxIDw8IDYsCiAgR0RLX1dB
X1dNQ0xBU1MgID0gMSA8PCA3LAogIEdES19XQV9OT1JFRElSICA9IDEgPDwgOAp9IEdka1dpbmRv
d0F0dHJpYnV0ZXNUeXBlOwoKIAoKdHlwZWRlZiBlbnVtCnsKICBHREtfSElOVF9QT1MJICAgICAg
PSAxIDw8IDAsCiAgR0RLX0hJTlRfTUlOX1NJWkUgICA9IDEgPDwgMSwKICBHREtfSElOVF9NQVhf
U0laRSAgID0gMSA8PCAyLAogIEdES19ISU5UX0JBU0VfU0laRSAgPSAxIDw8IDMsCiAgR0RLX0hJ
TlRfQVNQRUNUICAgICA9IDEgPDwgNCwKICBHREtfSElOVF9SRVNJWkVfSU5DID0gMSA8PCA1Cn0g
R2RrV2luZG93SGludHM7CgogCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBlbnVtCnsKICBHREtf
Q09QWSwKICBHREtfSU5WRVJULAogIEdES19YT1IsCiAgR0RLX0NMRUFSLAogIEdES19BTkQsCiAg
R0RLX0FORF9SRVZFUlNFLAogIEdES19BTkRfSU5WRVJULAogIEdES19OT09QLAogIEdES19PUiwK
ICBHREtfRVFVSVYsCiAgR0RLX09SX1JFVkVSU0UsCiAgR0RLX0NPUFlfSU5WRVJULAogIEdES19P
Ul9JTlZFUlQsCiAgR0RLX05BTkQsCiAgR0RLX1NFVAp9IEdka0Z1bmN0aW9uOwoKIAoKCgoKCnR5
cGVkZWYgZW51bQp7CiAgR0RLX1NPTElELAogIEdES19USUxFRCwKICBHREtfU1RJUFBMRUQsCiAg
R0RLX09QQVFVRV9TVElQUExFRAp9IEdka0ZpbGw7CgogCgoKCnR5cGVkZWYgZW51bQp7CiAgR0RL
X0VWRU5fT0REX1JVTEUsCiAgR0RLX1dJTkRJTkdfUlVMRQp9IEdka0ZpbGxSdWxlOwoKIAoKCgoK
dHlwZWRlZiBlbnVtCnsKICBHREtfTElORV9TT0xJRCwKICBHREtfTElORV9PTl9PRkZfREFTSCwK
ICBHREtfTElORV9ET1VCTEVfREFTSAp9IEdka0xpbmVTdHlsZTsKCiAKCgoKCgp0eXBlZGVmIGVu
dW0KewogIEdES19DQVBfTk9UX0xBU1QsCiAgR0RLX0NBUF9CVVRULAogIEdES19DQVBfUk9VTkQs
CiAgR0RLX0NBUF9QUk9KRUNUSU5HCn0gR2RrQ2FwU3R5bGU7CgogCgoKCgp0eXBlZGVmIGVudW0K
ewogIEdES19KT0lOX01JVEVSLAogIEdES19KT0lOX1JPVU5ELAogIEdES19KT0lOX0JFVkVMCn0g
R2RrSm9pblN0eWxlOwoKIAoKdHlwZWRlZiBlbnVtCnsKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0
ay0xLjIvZ2RrL2dka2N1cnNvcnMuaCIgMQpHREtfTlVNX0dMWVBIUyA9IDE1NCwKR0RLX1hfQ1VS
U09SID0gMCwKR0RLX0FSUk9XID0gMiwKR0RLX0JBU0VEX0FSUk9XX0RPV04gPSA0LApHREtfQkFT
RURfQVJST1dfVVAgPSA2LApHREtfQk9BVCA9IDgsCkdES19CT0dPU0lUWSA9IDEwLApHREtfQk9U
VE9NX0xFRlRfQ09STkVSID0gMTIsCkdES19CT1RUT01fUklHSFRfQ09STkVSID0gMTQsCkdES19C
T1RUT01fU0lERSA9IDE2LApHREtfQk9UVE9NX1RFRSA9IDE4LApHREtfQk9YX1NQSVJBTCA9IDIw
LApHREtfQ0VOVEVSX1BUUiA9IDIyLApHREtfQ0lSQ0xFID0gMjQsCkdES19DTE9DSyA9IDI2LApH
REtfQ09GRkVFX01VRyA9IDI4LApHREtfQ1JPU1MgPSAzMCwKR0RLX0NST1NTX1JFVkVSU0UgPSAz
MiwKR0RLX0NST1NTSEFJUiA9IDM0LApHREtfRElBTU9ORF9DUk9TUyA9IDM2LApHREtfRE9UID0g
MzgsCkdES19ET1RCT1ggPSA0MCwKR0RLX0RPVUJMRV9BUlJPVyA9IDQyLApHREtfRFJBRlRfTEFS
R0UgPSA0NCwKR0RLX0RSQUZUX1NNQUxMID0gNDYsCkdES19EUkFQRURfQk9YID0gNDgsCkdES19F
WENIQU5HRSA9IDUwLApHREtfRkxFVVIgPSA1MiwKR0RLX0dPQkJMRVIgPSA1NCwKR0RLX0dVTUJZ
ID0gNTYsCkdES19IQU5EMSA9IDU4LApHREtfSEFORDIgPSA2MCwKR0RLX0hFQVJUID0gNjIsCkdE
S19JQ09OID0gNjQsCkdES19JUk9OX0NST1NTID0gNjYsCkdES19MRUZUX1BUUiA9IDY4LApHREtf
TEVGVF9TSURFID0gNzAsCkdES19MRUZUX1RFRSA9IDcyLApHREtfTEVGVEJVVFRPTiA9IDc0LApH
REtfTExfQU5HTEUgPSA3NiwKR0RLX0xSX0FOR0xFID0gNzgsCkdES19NQU4gPSA4MCwKR0RLX01J
RERMRUJVVFRPTiA9IDgyLApHREtfTU9VU0UgPSA4NCwKR0RLX1BFTkNJTCA9IDg2LApHREtfUElS
QVRFID0gODgsCkdES19QTFVTID0gOTAsCkdES19RVUVTVElPTl9BUlJPVyA9IDkyLApHREtfUklH
SFRfUFRSID0gOTQsCkdES19SSUdIVF9TSURFID0gOTYsCkdES19SSUdIVF9URUUgPSA5OCwKR0RL
X1JJR0hUQlVUVE9OID0gMTAwLApHREtfUlRMX0xPR08gPSAxMDIsCkdES19TQUlMQk9BVCA9IDEw
NCwKR0RLX1NCX0RPV05fQVJST1cgPSAxMDYsCkdES19TQl9IX0RPVUJMRV9BUlJPVyA9IDEwOCwK
R0RLX1NCX0xFRlRfQVJST1cgPSAxMTAsCkdES19TQl9SSUdIVF9BUlJPVyA9IDExMiwKR0RLX1NC
X1VQX0FSUk9XID0gMTE0LApHREtfU0JfVl9ET1VCTEVfQVJST1cgPSAxMTYsCkdES19TSFVUVExF
ID0gMTE4LApHREtfU0laSU5HID0gMTIwLApHREtfU1BJREVSID0gMTIyLApHREtfU1BSQVlDQU4g
PSAxMjQsCkdES19TVEFSID0gMTI2LApHREtfVEFSR0VUID0gMTI4LApHREtfVENST1NTID0gMTMw
LApHREtfVE9QX0xFRlRfQVJST1cgPSAxMzIsCkdES19UT1BfTEVGVF9DT1JORVIgPSAxMzQsCkdE
S19UT1BfUklHSFRfQ09STkVSID0gMTM2LApHREtfVE9QX1NJREUgPSAxMzgsCkdES19UT1BfVEVF
ID0gMTQwLApHREtfVFJFSyA9IDE0MiwKR0RLX1VMX0FOR0xFID0gMTQ0LApHREtfVU1CUkVMTEEg
PSAxNDYsCkdES19VUl9BTkdMRSA9IDE0OCwKR0RLX1dBVENIID0gMTUwLApHREtfWFRFUk0gPSAx
NTIsCiMgMzMyICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ2RrL2dka3R5cGVzLmgiIDIKCiAg
R0RLX0xBU1RfQ1VSU09SLAogIEdES19DVVJTT1JfSVNfUElYTUFQID0gLTEKfSBHZGtDdXJzb3JU
eXBlOwoKdHlwZWRlZiBlbnVtIHsKICBHREtfRklMVEVSX0NPTlRJTlVFLAkgICAKICBHREtfRklM
VEVSX1RSQU5TTEFURSwJICAgCiAgR0RLX0ZJTFRFUl9SRU1PVkUJICAgCn0gR2RrRmlsdGVyUmV0
dXJuOwoKdHlwZWRlZiBlbnVtIHsKICBHREtfVklTSUJJTElUWV9VTk9CU0NVUkVELAogIEdES19W
SVNJQklMSVRZX1BBUlRJQUwsCiAgR0RLX1ZJU0lCSUxJVFlfRlVMTFlfT0JTQ1VSRUQKfSBHZGtW
aXNpYmlsaXR5U3RhdGU7CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgZW51bQp7CiAg
R0RLX05PVEhJTkcJCT0gLTEsCiAgR0RLX0RFTEVURQkJPSAwLAogIEdES19ERVNUUk9ZCQk9IDEs
CiAgR0RLX0VYUE9TRQkJPSAyLAogIEdES19NT1RJT05fTk9USUZZCT0gMywKICBHREtfQlVUVE9O
X1BSRVNTCT0gNCwKICBHREtfMkJVVFRPTl9QUkVTUwk9IDUsCiAgR0RLXzNCVVRUT05fUFJFU1MJ
PSA2LAogIEdES19CVVRUT05fUkVMRUFTRQk9IDcsCiAgR0RLX0tFWV9QUkVTUwkJPSA4LAogIEdE
S19LRVlfUkVMRUFTRQk9IDksCiAgR0RLX0VOVEVSX05PVElGWQk9IDEwLAogIEdES19MRUFWRV9O
T1RJRlkJPSAxMSwKICBHREtfRk9DVVNfQ0hBTkdFCT0gMTIsCiAgR0RLX0NPTkZJR1VSRQkJPSAx
MywKICBHREtfTUFQCQk9IDE0LAogIEdES19VTk1BUAkJPSAxNSwKICBHREtfUFJPUEVSVFlfTk9U
SUZZCT0gMTYsCiAgR0RLX1NFTEVDVElPTl9DTEVBUgk9IDE3LAogIEdES19TRUxFQ1RJT05fUkVR
VUVTVCA9IDE4LAogIEdES19TRUxFQ1RJT05fTk9USUZZCT0gMTksCiAgR0RLX1BST1hJTUlUWV9J
Tgk9IDIwLAogIEdES19QUk9YSU1JVFlfT1VUCT0gMjEsCiAgR0RLX0RSQUdfRU5URVIgICAgICAg
ID0gMjIsCiAgR0RLX0RSQUdfTEVBVkUgICAgICAgID0gMjMsCiAgR0RLX0RSQUdfTU9USU9OICAg
ICAgID0gMjQsCiAgR0RLX0RSQUdfU1RBVFVTICAgICAgID0gMjUsCiAgR0RLX0RST1BfU1RBUlQg
ICAgICAgID0gMjYsCiAgR0RLX0RST1BfRklOSVNIRUQgICAgID0gMjcsCiAgR0RLX0NMSUVOVF9F
VkVOVAk9IDI4LAogIEdES19WSVNJQklMSVRZX05PVElGWSA9IDI5LAogIEdES19OT19FWFBPU0UJ
CT0gMzAKfSBHZGtFdmVudFR5cGU7CgogCgoKdHlwZWRlZiBlbnVtCnsKICBHREtfRVhQT1NVUkVf
TUFTSwkJPSAxIDw8IDEsCiAgR0RLX1BPSU5URVJfTU9USU9OX01BU0sJPSAxIDw8IDIsCiAgR0RL
X1BPSU5URVJfTU9USU9OX0hJTlRfTUFTSwk9IDEgPDwgMywKICBHREtfQlVUVE9OX01PVElPTl9N
QVNLCT0gMSA8PCA0LAogIEdES19CVVRUT04xX01PVElPTl9NQVNLCT0gMSA8PCA1LAogIEdES19C
VVRUT04yX01PVElPTl9NQVNLCT0gMSA8PCA2LAogIEdES19CVVRUT04zX01PVElPTl9NQVNLCT0g
MSA8PCA3LAogIEdES19CVVRUT05fUFJFU1NfTUFTSwkJPSAxIDw8IDgsCiAgR0RLX0JVVFRPTl9S
RUxFQVNFX01BU0sJPSAxIDw8IDksCiAgR0RLX0tFWV9QUkVTU19NQVNLCQk9IDEgPDwgMTAsCiAg
R0RLX0tFWV9SRUxFQVNFX01BU0sJCT0gMSA8PCAxMSwKICBHREtfRU5URVJfTk9USUZZX01BU0sJ
CT0gMSA8PCAxMiwKICBHREtfTEVBVkVfTk9USUZZX01BU0sJCT0gMSA8PCAxMywKICBHREtfRk9D
VVNfQ0hBTkdFX01BU0sJCT0gMSA8PCAxNCwKICBHREtfU1RSVUNUVVJFX01BU0sJCT0gMSA8PCAx
NSwKICBHREtfUFJPUEVSVFlfQ0hBTkdFX01BU0sJPSAxIDw8IDE2LAogIEdES19WSVNJQklMSVRZ
X05PVElGWV9NQVNLCT0gMSA8PCAxNywKICBHREtfUFJPWElNSVRZX0lOX01BU0sJCT0gMSA8PCAx
OCwKICBHREtfUFJPWElNSVRZX09VVF9NQVNLCT0gMSA8PCAxOSwKICBHREtfU1VCU1RSVUNUVVJF
X01BU0sJCT0gMSA8PCAyMCwKICBHREtfQUxMX0VWRU5UU19NQVNLCQk9IDB4MEZGRkZGCn0gR2Rr
RXZlbnRNYXNrOwoKIAoKCgoKCgoKdHlwZWRlZiBlbnVtCnsKICBHREtfTk9USUZZX0FOQ0VTVE9S
CQk9IDAsCiAgR0RLX05PVElGWV9WSVJUVUFMCQk9IDEsCiAgR0RLX05PVElGWV9JTkZFUklPUgkJ
PSAyLAogIEdES19OT1RJRllfTk9OTElORUFSCQk9IDMsCiAgR0RLX05PVElGWV9OT05MSU5FQVJf
VklSVFVBTAk9IDQsCiAgR0RLX05PVElGWV9VTktOT1dOCQk9IDUKfSBHZGtOb3RpZnlUeXBlOwoK
IAoKCgoKdHlwZWRlZiBlbnVtCnsKICBHREtfQ1JPU1NJTkdfTk9STUFMLAogIEdES19DUk9TU0lO
R19HUkFCLAogIEdES19DUk9TU0lOR19VTkdSQUIKfSBHZGtDcm9zc2luZ01vZGU7CgogCgp0eXBl
ZGVmIGVudW0KewogIEdES19TSElGVF9NQVNLICAgID0gMSA8PCAwLAogIEdES19MT0NLX01BU0sJ
ICAgID0gMSA8PCAxLAogIEdES19DT05UUk9MX01BU0sgID0gMSA8PCAyLAogIEdES19NT0QxX01B
U0sJICAgID0gMSA8PCAzLAogIEdES19NT0QyX01BU0sJICAgID0gMSA8PCA0LAogIEdES19NT0Qz
X01BU0sJICAgID0gMSA8PCA1LAogIEdES19NT0Q0X01BU0sJICAgID0gMSA8PCA2LAogIEdES19N
T0Q1X01BU0sJICAgID0gMSA8PCA3LAogIEdES19CVVRUT04xX01BU0sgID0gMSA8PCA4LAogIEdE
S19CVVRUT04yX01BU0sgID0gMSA8PCA5LAogIEdES19CVVRUT04zX01BU0sgID0gMSA8PCAxMCwK
ICBHREtfQlVUVE9ONF9NQVNLICA9IDEgPDwgMTEsCiAgR0RLX0JVVFRPTjVfTUFTSyAgPSAxIDw8
IDEyLAogIEdES19SRUxFQVNFX01BU0sgID0gMSA8PCAxMywKICBHREtfTU9ESUZJRVJfTUFTSyA9
IDB4M2ZmZgp9IEdka01vZGlmaWVyVHlwZTsKCnR5cGVkZWYgZW51bQp7CiAgR0RLX0NMSVBfQllf
Q0hJTERSRU4JPSAwLAogIEdES19JTkNMVURFX0lORkVSSU9SUyA9IDEKfSBHZGtTdWJ3aW5kb3dN
b2RlOwoKdHlwZWRlZiBlbnVtCnsKICBHREtfSU5QVVRfUkVBRCAgICAgICA9IDEgPDwgMCwKICBH
REtfSU5QVVRfV1JJVEUgICAgICA9IDEgPDwgMSwKICBHREtfSU5QVVRfRVhDRVBUSU9OICA9IDEg
PDwgMgp9IEdka0lucHV0Q29uZGl0aW9uOwoKdHlwZWRlZiBlbnVtCnsKICBHREtfT0sJICA9IDAs
CiAgR0RLX0VSUk9SCSAgPSAtMSwKICBHREtfRVJST1JfUEFSQU0gPSAtMiwKICBHREtfRVJST1Jf
RklMRSAgPSAtMywKICBHREtfRVJST1JfTUVNCSAgPSAtNAp9IEdka1N0YXR1czsKCnR5cGVkZWYg
ZW51bQp7CiAgR0RLX0xTQl9GSVJTVCwKICBHREtfTVNCX0ZJUlNUCn0gR2RrQnl0ZU9yZGVyOwoK
dHlwZWRlZiBlbnVtCnsKICBHREtfR0NfRk9SRUdST1VORCAgICA9IDEgPDwgMCwKICBHREtfR0Nf
QkFDS0dST1VORCAgICA9IDEgPDwgMSwKICBHREtfR0NfRk9OVAkgICAgICAgPSAxIDw8IDIsCiAg
R0RLX0dDX0ZVTkNUSU9OICAgICAgPSAxIDw8IDMsCiAgR0RLX0dDX0ZJTEwJICAgICAgID0gMSA8
PCA0LAogIEdES19HQ19USUxFCSAgICAgICA9IDEgPDwgNSwKICBHREtfR0NfU1RJUFBMRSAgICAg
ICA9IDEgPDwgNiwKICBHREtfR0NfQ0xJUF9NQVNLICAgICA9IDEgPDwgNywKICBHREtfR0NfU1VC
V0lORE9XICAgICA9IDEgPDwgOCwKICBHREtfR0NfVFNfWF9PUklHSU4gICA9IDEgPDwgOSwKICBH
REtfR0NfVFNfWV9PUklHSU4gICA9IDEgPDwgMTAsCiAgR0RLX0dDX0NMSVBfWF9PUklHSU4gPSAx
IDw8IDExLAogIEdES19HQ19DTElQX1lfT1JJR0lOID0gMSA8PCAxMiwKICBHREtfR0NfRVhQT1NV
UkVTICAgICA9IDEgPDwgMTMsCiAgR0RLX0dDX0xJTkVfV0lEVEggICAgPSAxIDw8IDE0LAogIEdE
S19HQ19MSU5FX1NUWUxFICAgID0gMSA8PCAxNSwKICBHREtfR0NfQ0FQX1NUWUxFICAgICA9IDEg
PDwgMTYsCiAgR0RLX0dDX0pPSU5fU1RZTEUgICAgPSAxIDw8IDE3Cn0gR2RrR0NWYWx1ZXNNYXNr
OwoKdHlwZWRlZiBlbnVtCnsKICBHREtfU0VMRUNUSU9OX1BSSU1BUlkgPSAxLAogIEdES19TRUxF
Q1RJT05fU0VDT05EQVJZID0gMgp9IEdka1NlbGVjdGlvbjsKCnR5cGVkZWYgZW51bQp7CiAgR0RL
X1BST1BFUlRZX05FV19WQUxVRSwKICBHREtfUFJPUEVSVFlfREVMRVRFCn0gR2RrUHJvcGVydHlT
dGF0ZTsKCnR5cGVkZWYgZW51bQp7CiAgR0RLX1BST1BfTU9ERV9SRVBMQUNFLAogIEdES19QUk9Q
X01PREVfUFJFUEVORCwKICBHREtfUFJPUF9NT0RFX0FQUEVORAp9IEdka1Byb3BNb2RlOwoKIAoK
dHlwZWRlZiBlbnVtCnsKICBHREtfU09VUkNFX01PVVNFLAogIEdES19TT1VSQ0VfUEVOLAogIEdE
S19TT1VSQ0VfRVJBU0VSLAogIEdES19TT1VSQ0VfQ1VSU09SCn0gR2RrSW5wdXRTb3VyY2U7Cgp0
eXBlZGVmIGVudW0KewogIEdES19NT0RFX0RJU0FCTEVELAogIEdES19NT0RFX1NDUkVFTiwKICBH
REtfTU9ERV9XSU5ET1cKfSBHZGtJbnB1dE1vZGU7Cgp0eXBlZGVmIGVudW0KewogIEdES19BWElT
X0lHTk9SRSwKICBHREtfQVhJU19YLAogIEdES19BWElTX1ksCiAgR0RLX0FYSVNfUFJFU1NVUkUs
CiAgR0RLX0FYSVNfWFRJTFQsCiAgR0RLX0FYSVNfWVRJTFQsCiAgR0RLX0FYSVNfTEFTVAp9IEdk
a0F4aXNVc2U7CgogCgoKdHlwZWRlZiBlbnVtCnsKICBHREtfVEFSR0VUX0JJVE1BUCA9IDUsCiAg
R0RLX1RBUkdFVF9DT0xPUk1BUCA9IDcsCiAgR0RLX1RBUkdFVF9EUkFXQUJMRSA9IDE3LAogIEdE
S19UQVJHRVRfUElYTUFQID0gMjAsCiAgR0RLX1RBUkdFVF9TVFJJTkcgPSAzMQp9IEdka1Rhcmdl
dDsKCnR5cGVkZWYgZW51bQp7CiAgR0RLX1NFTEVDVElPTl9UWVBFX0FUT00gPSA0LAogIEdES19T
RUxFQ1RJT05fVFlQRV9CSVRNQVAgPSA1LAogIEdES19TRUxFQ1RJT05fVFlQRV9DT0xPUk1BUCA9
IDcsCiAgR0RLX1NFTEVDVElPTl9UWVBFX0RSQVdBQkxFID0gMTcsCiAgR0RLX1NFTEVDVElPTl9U
WVBFX0lOVEVHRVIgPSAxOSwKICBHREtfU0VMRUNUSU9OX1RZUEVfUElYTUFQID0gMjAsCiAgR0RL
X1NFTEVDVElPTl9UWVBFX1dJTkRPVyA9IDMzLAogIEdES19TRUxFQ1RJT05fVFlQRV9TVFJJTkcg
PSAzMQp9IEdka1NlbGVjdGlvblR5cGU7Cgp0eXBlZGVmIGVudW0KewogIEdES19FWFRFTlNJT05f
RVZFTlRTX05PTkUsCiAgR0RLX0VYVEVOU0lPTl9FVkVOVFNfQUxMLAogIEdES19FWFRFTlNJT05f
RVZFTlRTX0NVUlNPUgp9IEdka0V4dGVuc2lvbk1vZGU7Cgp0eXBlZGVmIGVudW0JCQkgCnsKICBH
REtfSU1fUFJFRURJVF9BUkVBCSAgID0gMHgwMDAxLCAKICBHREtfSU1fUFJFRURJVF9DQUxMQkFD
S1MgPSAweDAwMDIsIAogIEdES19JTV9QUkVFRElUX1BPU0lUSU9OICA9IDB4MDAwNCwKICBHREtf
SU1fUFJFRURJVF9OT1RISU5HICAgPSAweDAwMDgsCiAgR0RLX0lNX1BSRUVESVRfTk9ORQkgICA9
IDB4MDAxMCwKICBHREtfSU1fUFJFRURJVF9NQVNLICAgICAgPSAweDAwMWYsCgogIEdES19JTV9T
VEFUVVNfQVJFQQkgICA9IDB4MDEwMCwgCiAgR0RLX0lNX1NUQVRVU19DQUxMQkFDS1MgID0gMHgw
MjAwLAogIEdES19JTV9TVEFUVVNfTk9USElORwkgICA9IDB4MDQwMCwKICBHREtfSU1fU1RBVFVT
X05PTkUJICAgPSAweDA4MDAsCiAgR0RLX0lNX1NUQVRVU19NQVNLCSAgID0gMHgwZjAwIAp9IEdk
a0lNU3R5bGU7Cgp0eXBlZGVmIGVudW0KewogIEdES19JQ19TVFlMRQkJCT0gMSA8PCAwLAogIEdE
S19JQ19DTElFTlRfV0lORE9XCQk9IDEgPDwgMSwKICBHREtfSUNfRk9DVVNfV0lORE9XCQk9IDEg
PDwgMiwKICBHREtfSUNfRklMVEVSX0VWRU5UUwkJPSAxIDw8IDMsCiAgR0RLX0lDX1NQT1RfTE9D
QVRJT04JCT0gMSA8PCA0LAogIEdES19JQ19MSU5FX1NQQUNJTkcJCT0gMSA8PCA1LAogIEdES19J
Q19DVVJTT1IJCQk9IDEgPDwgNiwKCiAgR0RLX0lDX1BSRUVESVRfRk9OVFNFVAk9IDEgPDwgMTAs
CiAgR0RLX0lDX1BSRUVESVRfQVJFQQkJPSAxIDw8IDExLAogIEdES19JQ19QUkVFRElUX0FSRUFf
TkVFREVECT0gMSA8PCAxMiwKICBHREtfSUNfUFJFRURJVF9GT1JFR1JPVU5ECT0gMSA8PCAxMywK
ICBHREtfSUNfUFJFRURJVF9CQUNLR1JPVU5ECT0gMSA8PCAxNCwKICBHREtfSUNfUFJFRURJVF9Q
SVhNQVAJCT0gMSA8PCAxNSwKICBHREtfSUNfUFJFRURJVF9DT0xPUk1BUAk9IDEgPDwgMTYsCgog
IEdES19JQ19TVEFUVVNfRk9OVFNFVAkJPSAxIDw8IDIxLAogIEdES19JQ19TVEFUVVNfQVJFQQkJ
PSAxIDw8IDIyLAogIEdES19JQ19TVEFUVVNfQVJFQV9ORUVERUQJPSAxIDw8IDIzLAogIEdES19J
Q19TVEFUVVNfRk9SRUdST1VORAk9IDEgPDwgMjQsCiAgR0RLX0lDX1NUQVRVU19CQUNLR1JPVU5E
CT0gMSA8PCAyNSwKICBHREtfSUNfU1RBVFVTX1BJWE1BUAkJPSAxIDw8IDI2LAogIEdES19JQ19T
VEFUVVNfQ09MT1JNQVAJPSAxIDw8IDI3LAoKICBHREtfSUNfQUxMX1JFUQkJPSBHREtfSUNfU1RZ
TEUgfAogICAgCQkJCSAgR0RLX0lDX0NMSUVOVF9XSU5ET1csCgogIEdES19JQ19QUkVFRElUX0FS
RUFfUkVRCT0gR0RLX0lDX1BSRUVESVRfQVJFQSB8IAoJCQkJICBHREtfSUNfUFJFRURJVF9GT05U
U0VULAogIEdES19JQ19QUkVFRElUX1BPU0lUSU9OX1JFUQk9IEdES19JQ19QUkVFRElUX0FSRUEg
fCBHREtfSUNfU1BPVF9MT0NBVElPTiB8CgkJCQkgIEdES19JQ19QUkVFRElUX0ZPTlRTRVQsCgog
IEdES19JQ19TVEFUVVNfQVJFQV9SRVEJPSBHREtfSUNfU1RBVFVTX0FSRUEgfCAKCQkJCSAgR0RL
X0lDX1NUQVRVU19GT05UU0VUCn0gR2RrSUNBdHRyaWJ1dGVzVHlwZTsKCiAKCgoKCnR5cGVkZWYg
ZW51bQp7CiAgR0RLX0RFQ09SX0FMTAkJPSAxIDw8IDAsCiAgR0RLX0RFQ09SX0JPUkRFUgk9IDEg
PDwgMSwKICBHREtfREVDT1JfUkVTSVpFSAk9IDEgPDwgMiwKICBHREtfREVDT1JfVElUTEUJPSAx
IDw8IDMsCiAgR0RLX0RFQ09SX01FTlUJPSAxIDw8IDQsCiAgR0RLX0RFQ09SX01JTklNSVpFCT0g
MSA8PCA1LAogIEdES19ERUNPUl9NQVhJTUlaRQk9IDEgPDwgNgp9IEdka1dNRGVjb3JhdGlvbjsK
CnR5cGVkZWYgZW51bQp7CiAgR0RLX0ZVTkNfQUxMCQk9IDEgPDwgMCwKICBHREtfRlVOQ19SRVNJ
WkUJPSAxIDw8IDEsCiAgR0RLX0ZVTkNfTU9WRQkJPSAxIDw8IDIsCiAgR0RLX0ZVTkNfTUlOSU1J
WkUJPSAxIDw8IDMsCiAgR0RLX0ZVTkNfTUFYSU1JWkUJPSAxIDw8IDQsCiAgR0RLX0ZVTkNfQ0xP
U0UJPSAxIDw8IDUKfSBHZGtXTUZ1bmN0aW9uOwoKdHlwZWRlZiB2b2lkICgqR2RrSW5wdXRGdW5j
dGlvbikgKGdwb2ludGVyCSAgICBkYXRhLAoJCQkJICBnaW50CQkgICAgc291cmNlLAoJCQkJICBH
ZGtJbnB1dENvbmRpdGlvbiBjb25kaXRpb24pOwoKdHlwZWRlZiB2b2lkICgqR2RrRGVzdHJveU5v
dGlmeSkgKGdwb2ludGVyIGRhdGEpOwoKIAoKCgoKCgoKIAoKdHlwZWRlZiBlbnVtCnsKICBHREtf
Q0NfTU9ERV9VTkRFRklORUQsCiAgR0RLX0NDX01PREVfQlcsCiAgR0RLX0NDX01PREVfU1REX0NN
QVAsCiAgR0RLX0NDX01PREVfVFJVRSwKICBHREtfQ0NfTU9ERV9NWV9HUkFZLAogIEdES19DQ19N
T0RFX1BBTEVUVEUKfSBHZGtDb2xvckNvbnRleHRNb2RlOwoKIAoKCgoKCnR5cGVkZWYgZW51bQp7
CiAgR0RLX09WRVJMQVBfUkVDVEFOR0xFX0lOLAogIEdES19PVkVSTEFQX1JFQ1RBTkdMRV9PVVQs
CiAgR0RLX09WRVJMQVBfUkVDVEFOR0xFX1BBUlQKfSBHZGtPdmVybGFwVHlwZTsKCnR5cGVkZWYg
ZW51bSB7CiAgR0RLX0FDVElPTl9ERUZBVUxUID0gMSA8PCAwLAogIEdES19BQ1RJT05fQ09QWSAg
ICA9IDEgPDwgMSwKICBHREtfQUNUSU9OX01PVkUgICAgPSAxIDw8IDIsCiAgR0RLX0FDVElPTl9M
SU5LICAgID0gMSA8PCAzLAogIEdES19BQ1RJT05fUFJJVkFURSA9IDEgPDwgNCwKICBHREtfQUNU
SU9OX0FTSyAgICAgPSAxIDw8IDUKfSBHZGtEcmFnQWN0aW9uOwoKdHlwZWRlZiBlbnVtIHsKICBH
REtfRFJBR19QUk9UT19NT1RJRiwKICBHREtfRFJBR19QUk9UT19YRE5ELAogIEdES19EUkFHX1BS
T1RPX1JPT1RXSU4sCSAKCiAgR0RLX0RSQUdfUFJPVE9fTk9ORQkJIAp9IEdka0RyYWdQcm90b2Nv
bDsKCiAKCgoKCgoKc3RydWN0IF9HZGtDb2xvcgp7CiAgZ3Vsb25nICBwaXhlbDsKICBndXNob3J0
IHJlZDsKICBndXNob3J0IGdyZWVuOwogIGd1c2hvcnQgYmx1ZTsKfTsKCiAKCgpzdHJ1Y3QgX0dk
a0NvbG9ybWFwCnsKICBnaW50ICAgICAgc2l6ZTsKICBHZGtDb2xvciAqY29sb3JzOwp9OwoKIAoK
CgoKCgoKCgoKCnN0cnVjdCBfR2RrVmlzdWFsCnsKICBHZGtWaXN1YWxUeXBlIHR5cGU7CiAgZ2lu
dCBkZXB0aDsKICBHZGtCeXRlT3JkZXIgYnl0ZV9vcmRlcjsKICBnaW50IGNvbG9ybWFwX3NpemU7
CiAgZ2ludCBiaXRzX3Blcl9yZ2I7CgogIGd1aW50MzIgcmVkX21hc2s7CiAgZ2ludCByZWRfc2hp
ZnQ7CiAgZ2ludCByZWRfcHJlYzsKCiAgZ3VpbnQzMiBncmVlbl9tYXNrOwogIGdpbnQgZ3JlZW5f
c2hpZnQ7CiAgZ2ludCBncmVlbl9wcmVjOwoKICBndWludDMyIGJsdWVfbWFzazsKICBnaW50IGJs
dWVfc2hpZnQ7CiAgZ2ludCBibHVlX3ByZWM7Cn07CgpzdHJ1Y3QgX0dka1dpbmRvd0F0dHIKewog
IGdjaGFyICp0aXRsZTsKICBnaW50IGV2ZW50X21hc2s7CiAgZ2ludDE2IHgsIHk7CiAgZ2ludDE2
IHdpZHRoOwogIGdpbnQxNiBoZWlnaHQ7CiAgR2RrV2luZG93Q2xhc3Mgd2NsYXNzOwogIEdka1Zp
c3VhbCAqdmlzdWFsOwogIEdka0NvbG9ybWFwICpjb2xvcm1hcDsKICBHZGtXaW5kb3dUeXBlIHdp
bmRvd190eXBlOwogIEdka0N1cnNvciAqY3Vyc29yOwogIGdjaGFyICp3bWNsYXNzX25hbWU7CiAg
Z2NoYXIgKndtY2xhc3NfY2xhc3M7CiAgZ2Jvb2xlYW4gb3ZlcnJpZGVfcmVkaXJlY3Q7Cn07Cgpz
dHJ1Y3QgX0dka1dpbmRvdwp7CiAgZ3BvaW50ZXIgdXNlcl9kYXRhOwp9OwoKc3RydWN0IF9HZGtH
ZW9tZXRyeSB7CiAgZ2ludCBtaW5fd2lkdGg7CiAgZ2ludCBtaW5faGVpZ2h0OwogIGdpbnQgbWF4
X3dpZHRoOwogIGdpbnQgbWF4X2hlaWdodDsKICBnaW50IGJhc2Vfd2lkdGg7CiAgZ2ludCBiYXNl
X2hlaWdodDsKICBnaW50IHdpZHRoX2luYzsKICBnaW50IGhlaWdodF9pbmM7CiAgZ2RvdWJsZSBt
aW5fYXNwZWN0OwogIGdkb3VibGUgbWF4X2FzcGVjdDsKICAgCn07CgpzdHJ1Y3QgX0dka0ltYWdl
CnsKICBHZGtJbWFnZVR5cGUJdHlwZTsKICBHZGtWaXN1YWwgICAgKnZpc3VhbDsJICAgICAKICBH
ZGtCeXRlT3JkZXIJYnl0ZV9vcmRlcjsKICBndWludDE2CXdpZHRoOwogIGd1aW50MTYJaGVpZ2h0
OwogIGd1aW50MTYJZGVwdGg7CiAgZ3VpbnQxNglicHA7CSAgICAgCiAgZ3VpbnQxNglicGw7CSAg
ICAgCiAgZ3BvaW50ZXIJbWVtOwp9OwoKc3RydWN0IF9HZGtHQ1ZhbHVlcwp7CiAgR2RrQ29sb3IJ
ICAgIGZvcmVncm91bmQ7CiAgR2RrQ29sb3IJICAgIGJhY2tncm91bmQ7CiAgR2RrRm9udAkgICAq
Zm9udDsKICBHZGtGdW5jdGlvbgkgICAgZnVuY3Rpb247CiAgR2RrRmlsbAkgICAgZmlsbDsKICBH
ZGtQaXhtYXAJICAgKnRpbGU7CiAgR2RrUGl4bWFwCSAgICpzdGlwcGxlOwogIEdka1BpeG1hcAkg
ICAqY2xpcF9tYXNrOwogIEdka1N1YndpbmRvd01vZGUgIHN1YndpbmRvd19tb2RlOwogIGdpbnQJ
CSAgICB0c194X29yaWdpbjsKICBnaW50CQkgICAgdHNfeV9vcmlnaW47CiAgZ2ludAkJICAgIGNs
aXBfeF9vcmlnaW47CiAgZ2ludAkJICAgIGNsaXBfeV9vcmlnaW47CiAgZ2ludAkJICAgIGdyYXBo
aWNzX2V4cG9zdXJlczsKICBnaW50CQkgICAgbGluZV93aWR0aDsKICBHZGtMaW5lU3R5bGUJICAg
IGxpbmVfc3R5bGU7CiAgR2RrQ2FwU3R5bGUJICAgIGNhcF9zdHlsZTsKICBHZGtKb2luU3R5bGUJ
ICAgIGpvaW5fc3R5bGU7Cn07CgpzdHJ1Y3QgX0dka0dDCnsKICBnaW50IGR1bW15X3ZhcjsKfTsK
CnN0cnVjdCBfR2RrUG9pbnQKewogIGdpbnQxNiB4OwogIGdpbnQxNiB5Owp9OwoKc3RydWN0IF9H
ZGtSZWN0YW5nbGUKewogIGdpbnQxNiB4OwogIGdpbnQxNiB5OwogIGd1aW50MTYgd2lkdGg7CiAg
Z3VpbnQxNiBoZWlnaHQ7Cn07CgpzdHJ1Y3QgX0dka1NlZ21lbnQKewogIGdpbnQxNiB4MTsKICBn
aW50MTYgeTE7CiAgZ2ludDE2IHgyOwogIGdpbnQxNiB5MjsKfTsKCnN0cnVjdCBfR2RrRm9udAp7
CiAgR2RrRm9udFR5cGUgdHlwZTsKICBnaW50IGFzY2VudDsKICBnaW50IGRlc2NlbnQ7Cn07Cgpz
dHJ1Y3QgX0dka0N1cnNvcgp7CiAgR2RrQ3Vyc29yVHlwZSB0eXBlOwp9OwoKCnN0cnVjdCBfR2Rr
Q29sb3JDb250ZXh0RGl0aGVyCnsKICBnaW50IGZhc3RfcmdiWzMyXVszMl1bMzJdOyAgCiAgZ2lu
dCBmYXN0X2VyclszMl1bMzJdWzMyXTsgIAogIGdpbnQgZmFzdF9lcmdbMzJdWzMyXVszMl07CiAg
Z2ludCBmYXN0X2VyYlszMl1bMzJdWzMyXTsKfTsKCnN0cnVjdCBfR2RrQ29sb3JDb250ZXh0CnsK
ICBHZGtWaXN1YWwgKnZpc3VhbDsKICBHZGtDb2xvcm1hcCAqY29sb3JtYXA7CgogIGdpbnQgbnVt
X2NvbG9yczsJCSAKICBnaW50IG1heF9jb2xvcnM7CQkgCiAgZ2ludCBudW1fYWxsb2NhdGVkOwkJ
IAoKICBHZGtDb2xvckNvbnRleHRNb2RlIG1vZGU7CiAgZ2ludCBuZWVkX3RvX2ZyZWVfY29sb3Jt
YXA7CiAgR2RrQXRvbSBzdGRfY21hcF9hdG9tOwoKICBndWxvbmcgKmNsdXQ7CQkJIAogIEdka0Nv
bG9yICpjbWFwOwkJIAoKICBHSGFzaFRhYmxlICpjb2xvcl9oYXNoOwkgCiAgR2RrQ29sb3IgKnBh
bGV0dGU7CQkgCiAgZ2ludCBudW1fcGFsZXR0ZTsJCSAKCiAgR2RrQ29sb3JDb250ZXh0RGl0aGVy
ICpmYXN0X2RpdGhlcjsJIAoKICBzdHJ1Y3QKICB7CiAgICBnaW50IHJlZDsKICAgIGdpbnQgZ3Jl
ZW47CiAgICBnaW50IGJsdWU7CiAgfSBzaGlmdHM7CgogIHN0cnVjdAogIHsKICAgIGd1bG9uZyBy
ZWQ7CiAgICBndWxvbmcgZ3JlZW47CiAgICBndWxvbmcgYmx1ZTsKICB9IG1hc2tzOwoKICBzdHJ1
Y3QKICB7CiAgICBnaW50IHJlZDsKICAgIGdpbnQgZ3JlZW47CiAgICBnaW50IGJsdWU7CiAgfSBi
aXRzOwoKICBndWxvbmcgbWF4X2VudHJ5OwoKICBndWxvbmcgYmxhY2tfcGl4ZWw7CiAgZ3Vsb25n
IHdoaXRlX3BpeGVsOwp9OwoKIAoKc3RydWN0IF9HZGtEZXZpY2VLZXkKewogIGd1aW50IGtleXZh
bDsKICBHZGtNb2RpZmllclR5cGUgbW9kaWZpZXJzOwp9OwoKc3RydWN0IF9HZGtEZXZpY2VJbmZv
CnsKICBndWludDMyIGRldmljZWlkOwogIGdjaGFyICpuYW1lOwogIEdka0lucHV0U291cmNlIHNv
dXJjZTsKICBHZGtJbnB1dE1vZGUgbW9kZTsKICBnaW50IGhhc19jdXJzb3I7CSAKICBnaW50IG51
bV9heGVzOwogIEdka0F4aXNVc2UgKmF4ZXM7ICAgICAKICBnaW50IG51bV9rZXlzOwogIEdka0Rl
dmljZUtleSAqa2V5czsKfTsKCnN0cnVjdCBfR2RrVGltZUNvb3JkCnsKICBndWludDMyIHRpbWU7
CiAgZ2RvdWJsZSB4OwogIGdkb3VibGUgeTsKICBnZG91YmxlIHByZXNzdXJlOwogIGdkb3VibGUg
eHRpbHQ7CiAgZ2RvdWJsZSB5dGlsdDsKfTsKCiAKCgpzdHJ1Y3QgX0dka0RyYWdDb250ZXh0IHsK
ICBHZGtEcmFnUHJvdG9jb2wgcHJvdG9jb2w7CiAgCiAgZ2Jvb2xlYW4gaXNfc291cmNlOwogIAog
IEdka1dpbmRvdyAqc291cmNlX3dpbmRvdzsKICBHZGtXaW5kb3cgKmRlc3Rfd2luZG93OwoKICBH
TGlzdCAqdGFyZ2V0czsKICBHZGtEcmFnQWN0aW9uIGFjdGlvbnM7CiAgR2RrRHJhZ0FjdGlvbiBz
dWdnZXN0ZWRfYWN0aW9uOwogIEdka0RyYWdBY3Rpb24gYWN0aW9uOyAKCiAgZ3VpbnQzMiBzdGFy
dF90aW1lOwp9OwoKIAoKdHlwZWRlZiB2b2lkIEdka1hFdmVudDsJICAgCgp0eXBlZGVmIEdka0Zp
bHRlclJldHVybiAoKkdka0ZpbHRlckZ1bmMpIChHZGtYRXZlbnQgKnhldmVudCwKCQkJCQkgIEdk
a0V2ZW50ICpldmVudCwKCQkJCQkgIGdwb2ludGVyICBkYXRhKTsKCnN0cnVjdCBfR2RrRXZlbnRB
bnkKewogIEdka0V2ZW50VHlwZSB0eXBlOwogIEdka1dpbmRvdyAqd2luZG93OwogIGdpbnQ4IHNl
bmRfZXZlbnQ7Cn07CgpzdHJ1Y3QgX0dka0V2ZW50RXhwb3NlCnsKICBHZGtFdmVudFR5cGUgdHlw
ZTsKICBHZGtXaW5kb3cgKndpbmRvdzsKICBnaW50OCBzZW5kX2V2ZW50OwogIEdka1JlY3Rhbmds
ZSBhcmVhOwogIGdpbnQgY291bnQ7ICAKfTsKCnN0cnVjdCBfR2RrRXZlbnROb0V4cG9zZQp7CiAg
R2RrRXZlbnRUeXBlIHR5cGU7CiAgR2RrV2luZG93ICp3aW5kb3c7CiAgZ2ludDggc2VuZF9ldmVu
dDsKICAgCn07CgpzdHJ1Y3QgX0dka0V2ZW50VmlzaWJpbGl0eQp7CiAgR2RrRXZlbnRUeXBlIHR5
cGU7CiAgR2RrV2luZG93ICp3aW5kb3c7CiAgZ2ludDggc2VuZF9ldmVudDsKICBHZGtWaXNpYmls
aXR5U3RhdGUgc3RhdGU7Cn07CgpzdHJ1Y3QgX0dka0V2ZW50TW90aW9uCnsKICBHZGtFdmVudFR5
cGUgdHlwZTsKICBHZGtXaW5kb3cgKndpbmRvdzsKICBnaW50OCBzZW5kX2V2ZW50OwogIGd1aW50
MzIgdGltZTsKICBnZG91YmxlIHg7CiAgZ2RvdWJsZSB5OwogIGdkb3VibGUgcHJlc3N1cmU7CiAg
Z2RvdWJsZSB4dGlsdDsKICBnZG91YmxlIHl0aWx0OwogIGd1aW50IHN0YXRlOwogIGdpbnQxNiBp
c19oaW50OwogIEdka0lucHV0U291cmNlIHNvdXJjZTsKICBndWludDMyIGRldmljZWlkOwogIGdk
b3VibGUgeF9yb290LCB5X3Jvb3Q7Cn07CgpzdHJ1Y3QgX0dka0V2ZW50QnV0dG9uCnsKICBHZGtF
dmVudFR5cGUgdHlwZTsKICBHZGtXaW5kb3cgKndpbmRvdzsKICBnaW50OCBzZW5kX2V2ZW50Owog
IGd1aW50MzIgdGltZTsKICBnZG91YmxlIHg7CiAgZ2RvdWJsZSB5OwogIGdkb3VibGUgcHJlc3N1
cmU7CiAgZ2RvdWJsZSB4dGlsdDsKICBnZG91YmxlIHl0aWx0OwogIGd1aW50IHN0YXRlOwogIGd1
aW50IGJ1dHRvbjsKICBHZGtJbnB1dFNvdXJjZSBzb3VyY2U7CiAgZ3VpbnQzMiBkZXZpY2VpZDsK
ICBnZG91YmxlIHhfcm9vdCwgeV9yb290Owp9OwoKc3RydWN0IF9HZGtFdmVudEtleQp7CiAgR2Rr
RXZlbnRUeXBlIHR5cGU7CiAgR2RrV2luZG93ICp3aW5kb3c7CiAgZ2ludDggc2VuZF9ldmVudDsK
ICBndWludDMyIHRpbWU7CiAgZ3VpbnQgc3RhdGU7CiAgZ3VpbnQga2V5dmFsOwogIGdpbnQgbGVu
Z3RoOwogIGdjaGFyICpzdHJpbmc7Cn07CgpzdHJ1Y3QgX0dka0V2ZW50Q3Jvc3NpbmcKewogIEdk
a0V2ZW50VHlwZSB0eXBlOwogIEdka1dpbmRvdyAqd2luZG93OwogIGdpbnQ4IHNlbmRfZXZlbnQ7
CiAgR2RrV2luZG93ICpzdWJ3aW5kb3c7CiAgZ3VpbnQzMiB0aW1lOwogIGdkb3VibGUgeDsKICBn
ZG91YmxlIHk7CiAgZ2RvdWJsZSB4X3Jvb3Q7CiAgZ2RvdWJsZSB5X3Jvb3Q7CiAgR2RrQ3Jvc3Np
bmdNb2RlIG1vZGU7CiAgR2RrTm90aWZ5VHlwZSBkZXRhaWw7CiAgZ2Jvb2xlYW4gZm9jdXM7CiAg
Z3VpbnQgc3RhdGU7Cn07CgpzdHJ1Y3QgX0dka0V2ZW50Rm9jdXMKewogIEdka0V2ZW50VHlwZSB0
eXBlOwogIEdka1dpbmRvdyAqd2luZG93OwogIGdpbnQ4IHNlbmRfZXZlbnQ7CiAgZ2ludDE2IGlu
Owp9OwoKc3RydWN0IF9HZGtFdmVudENvbmZpZ3VyZQp7CiAgR2RrRXZlbnRUeXBlIHR5cGU7CiAg
R2RrV2luZG93ICp3aW5kb3c7CiAgZ2ludDggc2VuZF9ldmVudDsKICBnaW50MTYgeCwgeTsKICBn
aW50MTYgd2lkdGg7CiAgZ2ludDE2IGhlaWdodDsKfTsKCnN0cnVjdCBfR2RrRXZlbnRQcm9wZXJ0
eQp7CiAgR2RrRXZlbnRUeXBlIHR5cGU7CiAgR2RrV2luZG93ICp3aW5kb3c7CiAgZ2ludDggc2Vu
ZF9ldmVudDsKICBHZGtBdG9tIGF0b207CiAgZ3VpbnQzMiB0aW1lOwogIGd1aW50IHN0YXRlOwp9
OwoKc3RydWN0IF9HZGtFdmVudFNlbGVjdGlvbgp7CiAgR2RrRXZlbnRUeXBlIHR5cGU7CiAgR2Rr
V2luZG93ICp3aW5kb3c7CiAgZ2ludDggc2VuZF9ldmVudDsKICBHZGtBdG9tIHNlbGVjdGlvbjsK
ICBHZGtBdG9tIHRhcmdldDsKICBHZGtBdG9tIHByb3BlcnR5OwogIGd1aW50MzIgcmVxdWVzdG9y
OwogIGd1aW50MzIgdGltZTsKfTsKCiAKCgpzdHJ1Y3QgX0dka0V2ZW50UHJveGltaXR5CnsKICBH
ZGtFdmVudFR5cGUgdHlwZTsKICBHZGtXaW5kb3cgKndpbmRvdzsKICBnaW50OCBzZW5kX2V2ZW50
OwogIGd1aW50MzIgdGltZTsKICBHZGtJbnB1dFNvdXJjZSBzb3VyY2U7CiAgZ3VpbnQzMiBkZXZp
Y2VpZDsKfTsKCnN0cnVjdCBfR2RrRXZlbnRDbGllbnQKewogIEdka0V2ZW50VHlwZSB0eXBlOwog
IEdka1dpbmRvdyAqd2luZG93OwogIGdpbnQ4IHNlbmRfZXZlbnQ7CiAgR2RrQXRvbSBtZXNzYWdl
X3R5cGU7CiAgZ3VzaG9ydCBkYXRhX2Zvcm1hdDsKICB1bmlvbiB7CiAgICBjaGFyIGJbMjBdOwog
ICAgc2hvcnQgc1sxMF07CiAgICBsb25nIGxbNV07CiAgfSBkYXRhOwp9OwoKIAoKc3RydWN0IF9H
ZGtFdmVudERORCB7CiAgR2RrRXZlbnRUeXBlIHR5cGU7CiAgR2RrV2luZG93ICp3aW5kb3c7CiAg
Z2ludDggc2VuZF9ldmVudDsKICBHZGtEcmFnQ29udGV4dCAqY29udGV4dDsKCiAgZ3VpbnQzMiB0
aW1lOwogIGdzaG9ydCB4X3Jvb3QsIHlfcm9vdDsKfTsKCnVuaW9uIF9HZGtFdmVudAp7CiAgR2Rr
RXZlbnRUeXBlCQkgICAgdHlwZTsKICBHZGtFdmVudEFueQkJICAgIGFueTsKICBHZGtFdmVudEV4
cG9zZQkgICAgZXhwb3NlOwogIEdka0V2ZW50Tm9FeHBvc2UJICAgIG5vX2V4cG9zZTsKICBHZGtF
dmVudFZpc2liaWxpdHkJICAgIHZpc2liaWxpdHk7CiAgR2RrRXZlbnRNb3Rpb24JICAgIG1vdGlv
bjsKICBHZGtFdmVudEJ1dHRvbgkgICAgYnV0dG9uOwogIEdka0V2ZW50S2V5CQkgICAga2V5Owog
IEdka0V2ZW50Q3Jvc3NpbmcJICAgIGNyb3NzaW5nOwogIEdka0V2ZW50Rm9jdXMJCSAgICBmb2N1
c19jaGFuZ2U7CiAgR2RrRXZlbnRDb25maWd1cmUJICAgIGNvbmZpZ3VyZTsKICBHZGtFdmVudFBy
b3BlcnR5CSAgICBwcm9wZXJ0eTsKICBHZGtFdmVudFNlbGVjdGlvbgkgICAgc2VsZWN0aW9uOwog
IEdka0V2ZW50UHJveGltaXR5CSAgICBwcm94aW1pdHk7CiAgR2RrRXZlbnRDbGllbnQJICAgIGNs
aWVudDsKICBHZGtFdmVudERORCAgICAgICAgICAgICAgIGRuZDsKfTsKCnN0cnVjdCBfR2RrUmVn
aW9uCnsKICBncG9pbnRlciB1c2VyX2RhdGE7Cn07CgpzdHJ1Y3QgX0dka0lDQXR0cgp7CiAgR2Rr
SU1TdHlsZSBzdHlsZTsKICBHZGtXaW5kb3cgKmNsaWVudF93aW5kb3c7CiAgR2RrV2luZG93ICpm
b2N1c193aW5kb3c7CiAgR2RrRXZlbnRNYXNrIGZpbHRlcl9ldmVudHM7CiAgR2RrUG9pbnQgc3Bv
dF9sb2NhdGlvbjsKICBnaW50IGxpbmVfc3BhY2luZzsKICBHZGtDdXJzb3IgKmN1cnNvcjsKCiAg
R2RrRm9udCAqcHJlZWRpdF9mb250c2V0OwogIEdka1JlY3RhbmdsZSBwcmVlZGl0X2FyZWE7CiAg
R2RrUmVjdGFuZ2xlIHByZWVkaXRfYXJlYV9uZWVkZWQ7IAogIEdka0NvbG9yIHByZWVkaXRfZm9y
ZWdyb3VuZDsKICBHZGtDb2xvciBwcmVlZGl0X2JhY2tncm91bmQ7CiAgR2RrUGl4bWFwICpwcmVl
ZGl0X3BpeG1hcDsKICBHZGtDb2xvcm1hcCAqcHJlZWRpdF9jb2xvcm1hcDsKCiAgR2RrRm9udCAq
c3RhdHVzX2ZvbnRzZXQ7CiAgR2RrUmVjdGFuZ2xlIHN0YXR1c19hcmVhOwogIEdka1JlY3Rhbmds
ZSBzdGF0dXNfYXJlYV9uZWVkZWQ7IAogIEdka0NvbG9yIHN0YXR1c19mb3JlZ3JvdW5kOwogIEdk
a0NvbG9yIHN0YXR1c19iYWNrZ3JvdW5kOwogIEdka1BpeG1hcCAqc3RhdHVzX3BpeG1hcDsKICBH
ZGtDb2xvcm1hcCAqc3RhdHVzX2NvbG9ybWFwOwp9OwoKCn0KCgoKCiMgMzEgIi9vcHQvZ3RrL2lu
Y2x1ZGUvZ3RrLTEuMi9nZGsvZ2RrLmgiIDIKCgoKZXh0ZXJuICJDIiB7CgoKCiAKCgp2b2lkIAkg
IGdka19pbml0CQkgICAJKGdpbnQJICAgCSphcmdjLAoJCQkJCSBnY2hhciAgICAgICAgKioqYXJn
dik7Cmdib29sZWFuICBnZGtfaW5pdF9jaGVjayAgIAkgICAgICAgIChnaW50CSAgIAkqYXJnYywK
CQkJCQkgZ2NoYXIgICAgICAgICoqKmFyZ3YpOwp2b2lkICAJICBnZGtfZXhpdAkJICAgCShnaW50
CSAgICAJIGVycm9yX2NvZGUpOwpnY2hhcioJICBnZGtfc2V0X2xvY2FsZQkgICAJKHZvaWQpOwoK
IAoKdm9pZCAgICAgIGdka19lcnJvcl90cmFwX3B1c2ggICAgICAgICAgICh2b2lkKTsKZ2ludCAg
ICAgIGdka19lcnJvcl90cmFwX3BvcCAgICAgICAgICAgICh2b2lkKTsKCgpnYm9vbGVhbiAgZ2Rr
X2V2ZW50c19wZW5kaW5nCSAJKHZvaWQpOwpHZGtFdmVudCogZ2RrX2V2ZW50X2dldAkJCSh2b2lk
KTsKCkdka0V2ZW50KiBnZGtfZXZlbnRfcGVlayAgICAgICAgICAgICAgICAodm9pZCk7Ckdka0V2
ZW50KiBnZGtfZXZlbnRfZ2V0X2dyYXBoaWNzX2V4cG9zZSAoR2RrV2luZG93IAkqd2luZG93KTsK
dm9pZCAgICAgIGdka19ldmVudF9wdXQJIAkJKEdka0V2ZW50ICAJKmV2ZW50KTsKCkdka0V2ZW50
KiBnZGtfZXZlbnRfY29weSAgICAgCQkoR2RrRXZlbnQgCSpldmVudCk7CnZvaWQJICBnZGtfZXZl
bnRfZnJlZSAgICAgCQkoR2RrRXZlbnQgCSpldmVudCk7Cmd1aW50MzIgICBnZGtfZXZlbnRfZ2V0
X3RpbWUgCQkoR2RrRXZlbnQgCSpldmVudCk7Cgp2b2lkCSAgZ2RrX2V2ZW50X2hhbmRsZXJfc2V0
IAkoR2RrRXZlbnRGdW5jICAgIGZ1bmMsCgkJCQkJIGdwb2ludGVyICAgICAgICBkYXRhLAoJCQkJ
CSBHRGVzdHJveU5vdGlmeSAgbm90aWZ5KTsKCnZvaWQJICBnZGtfc2V0X3Nob3dfZXZlbnRzCQko
Z2Jvb2xlYW4JIHNob3dfZXZlbnRzKTsKdm9pZAkgIGdka19zZXRfdXNlX3hzaG0JCShnYm9vbGVh
bgkgdXNlX3hzaG0pOwoKZ2Jvb2xlYW4gIGdka19nZXRfc2hvd19ldmVudHMJCSh2b2lkKTsKZ2Jv
b2xlYW4gIGdka19nZXRfdXNlX3hzaG0JCSh2b2lkKTsKZ2NoYXIqCSAgZ2RrX2dldF9kaXNwbGF5
CQkodm9pZCk7CgpndWludDMyIGdka190aW1lX2dldAkgICh2b2lkKTsKZ3VpbnQzMiBnZGtfdGlt
ZXJfZ2V0CSAgKHZvaWQpOwp2b2lkCWdka190aW1lcl9zZXQJICAoZ3VpbnQzMiBtaWxsaXNlY29u
ZHMpOwp2b2lkCWdka190aW1lcl9lbmFibGUgICh2b2lkKTsKdm9pZAlnZGtfdGltZXJfZGlzYWJs
ZSAodm9pZCk7CgpnaW50IGdka19pbnB1dF9hZGRfZnVsbAkgIChnaW50CQkgICAgIHNvdXJjZSwK
CQkJICAgR2RrSW5wdXRDb25kaXRpb24gY29uZGl0aW9uLAoJCQkgICBHZGtJbnB1dEZ1bmN0aW9u
ICBmdW5jdGlvbiwKCQkJICAgZ3BvaW50ZXIJICAgICBkYXRhLAoJCQkgICBHZGtEZXN0cm95Tm90
aWZ5ICBkZXN0cm95KTsKZ2ludCBnZGtfaW5wdXRfYWRkCSAgKGdpbnQJCSAgICAgc291cmNlLAoJ
CQkgICBHZGtJbnB1dENvbmRpdGlvbiBjb25kaXRpb24sCgkJCSAgIEdka0lucHV0RnVuY3Rpb24g
IGZ1bmN0aW9uLAoJCQkgICBncG9pbnRlcgkgICAgIGRhdGEpOwp2b2lkIGdka19pbnB1dF9yZW1v
dmUJICAoZ2ludAkJICAgICB0YWcpOwoKZ2ludCAgICAgZ2RrX3BvaW50ZXJfZ3JhYiAgICAgICAo
R2RrV2luZG93ICAgICp3aW5kb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdp
bnQgICAgICAgICAgb3duZXJfZXZlbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHZGtFdmVudE1hc2sgIGV2ZW50X21hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdka1dpbmRvdyAgICAqY29uZmluZV90bywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR2RrQ3Vyc29yICAgICpjdXJzb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGd1aW50MzIgICAgICAgdGltZSk7CnZvaWQgICAgIGdka19wb2ludGVyX3VuZ3JhYiAgICAg
KGd1aW50MzIgICAgICAgdGltZSk7CmdpbnQgICAgIGdka19rZXlib2FyZF9ncmFiICAgICAgKEdk
a1dpbmRvdyAgICAqd2luZG93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9v
bGVhbiAgICAgIG93bmVyX2V2ZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z3VpbnQzMiAgICAgICB0aW1lKTsKdm9pZCAgICAgZ2RrX2tleWJvYXJkX3VuZ3JhYiAgICAoZ3Vp
bnQzMiAgICAgICB0aW1lKTsKZ2Jvb2xlYW4gZ2RrX3BvaW50ZXJfaXNfZ3JhYmJlZCAodm9pZCk7
CgoKZ2ludCBnZGtfc2NyZWVuX3dpZHRoICAodm9pZCk7CmdpbnQgZ2RrX3NjcmVlbl9oZWlnaHQg
KHZvaWQpOwoKZ2ludCBnZGtfc2NyZWVuX3dpZHRoX21tICAodm9pZCk7CmdpbnQgZ2RrX3NjcmVl
bl9oZWlnaHRfbW0gKHZvaWQpOwoKdm9pZCBnZGtfZmx1c2ggKHZvaWQpOwp2b2lkIGdka19iZWVw
ICh2b2lkKTsKCnZvaWQgZ2RrX2tleV9yZXBlYXRfZGlzYWJsZSAodm9pZCk7CnZvaWQgZ2RrX2tl
eV9yZXBlYXRfcmVzdG9yZSAodm9pZCk7CgoKIAoKZ2ludAkgICAgICBnZGtfdmlzdWFsX2dldF9i
ZXN0X2RlcHRoCSAgICAgKHZvaWQpOwpHZGtWaXN1YWxUeXBlIGdka192aXN1YWxfZ2V0X2Jlc3Rf
dHlwZQkgICAgICh2b2lkKTsKR2RrVmlzdWFsKiAgICBnZGtfdmlzdWFsX2dldF9zeXN0ZW0JICAg
ICAodm9pZCk7Ckdka1Zpc3VhbCogICAgZ2RrX3Zpc3VhbF9nZXRfYmVzdAkgICAgICh2b2lkKTsK
R2RrVmlzdWFsKiAgICBnZGtfdmlzdWFsX2dldF9iZXN0X3dpdGhfZGVwdGggKGdpbnQJICAgICBk
ZXB0aCk7Ckdka1Zpc3VhbCogICAgZ2RrX3Zpc3VhbF9nZXRfYmVzdF93aXRoX3R5cGUgIChHZGtW
aXN1YWxUeXBlICB2aXN1YWxfdHlwZSk7Ckdka1Zpc3VhbCogICAgZ2RrX3Zpc3VhbF9nZXRfYmVz
dF93aXRoX2JvdGggIChnaW50CSAgICAgZGVwdGgsCgkJCQkJICAgICAgR2RrVmlzdWFsVHlwZSAg
dmlzdWFsX3R5cGUpOwoKIApHZGtWaXN1YWwqIGdka192aXN1YWxfcmVmIChHZGtWaXN1YWwgKnZp
c3VhbCk7CnZvaWQJICAgZ2RrX3Zpc3VhbF91bnJlZiAoR2RrVmlzdWFsICp2aXN1YWwpOwoKdm9p
ZCBnZGtfcXVlcnlfZGVwdGhzCSAgICAoZ2ludAkgICAgKipkZXB0aHMsCgkJCSAgICAgZ2ludAkg
ICAgICpjb3VudCk7CnZvaWQgZ2RrX3F1ZXJ5X3Zpc3VhbF90eXBlcyAoR2RrVmlzdWFsVHlwZSAg
Kip2aXN1YWxfdHlwZXMsCgkJCSAgICAgZ2ludAkgICAgICpjb3VudCk7CgpHTGlzdCogZ2RrX2xp
c3RfdmlzdWFscyAodm9pZCk7CgoKIAoKR2RrV2luZG93KiAgICBnZGtfd2luZG93X25ldwkgICAg
IChHZGtXaW5kb3cJICAgICpwYXJlbnQsCgkJCQkgICAgICBHZGtXaW5kb3dBdHRyICphdHRyaWJ1
dGVzLAoJCQkJICAgICAgZ2ludAkgICAgIGF0dHJpYnV0ZXNfbWFzayk7Cgp2b2lkCSAgICAgIGdk
a193aW5kb3dfZGVzdHJveSAgICAgKEdka1dpbmRvdwkgICAgKndpbmRvdyk7Ckdka1dpbmRvdyog
ICAgZ2RrX3dpbmRvd19yZWYJICAgICAoR2RrV2luZG93CSAgICAqd2luZG93KTsKdm9pZAkgICAg
ICBnZGtfd2luZG93X3VucmVmCSAgICAgKEdka1dpbmRvdwkgICAgKndpbmRvdyk7CgpHZGtXaW5k
b3cqICAgIGdka193aW5kb3dfYXRfcG9pbnRlciAgKGdpbnQJICAgKndpbl94LAoJCQkJICAgICAg
Z2ludAkgICAqd2luX3kpOwp2b2lkCSAgICAgIGdka193aW5kb3dfc2hvdwkgICAgIChHZGtXaW5k
b3cJICAgKndpbmRvdyk7CnZvaWQJICAgICAgZ2RrX3dpbmRvd19oaWRlCSAgICAgKEdka1dpbmRv
dwkgICAqd2luZG93KTsKdm9pZAkgICAgICBnZGtfd2luZG93X3dpdGhkcmF3ICAgIChHZGtXaW5k
b3cJICAgKndpbmRvdyk7CnZvaWQJICAgICAgZ2RrX3dpbmRvd19tb3ZlCSAgICAgKEdka1dpbmRv
dwkgICAqd2luZG93LAoJCQkJICAgICAgZ2ludAkgICAgeCwKCQkJCSAgICAgIGdpbnQJICAgIHkp
Owp2b2lkCSAgICAgIGdka193aW5kb3dfcmVzaXplCSAgICAgKEdka1dpbmRvdwkgICAqd2luZG93
LAoJCQkJICAgICAgZ2ludAkgICAgd2lkdGgsCgkJCQkgICAgICBnaW50CSAgICBoZWlnaHQpOwp2
b2lkCSAgICAgIGdka193aW5kb3dfbW92ZV9yZXNpemUgKEdka1dpbmRvdwkgICAqd2luZG93LAoJ
CQkJICAgICAgZ2ludAkgICAgeCwKCQkJCSAgICAgIGdpbnQJICAgIHksCgkJCQkgICAgICBnaW50
CSAgICB3aWR0aCwKCQkJCSAgICAgIGdpbnQJICAgIGhlaWdodCk7CnZvaWQJICAgICAgZ2RrX3dp
bmRvd19yZXBhcmVudCAgICAoR2RrV2luZG93CSAgICp3aW5kb3csCgkJCQkgICAgICBHZGtXaW5k
b3cJICAgKm5ld19wYXJlbnQsCgkJCQkgICAgICBnaW50CSAgICB4LAoJCQkJICAgICAgZ2ludAkg
ICAgeSk7CnZvaWQJICAgICAgZ2RrX3dpbmRvd19jbGVhcgkgICAgIChHZGtXaW5kb3cJICAgKndp
bmRvdyk7CnZvaWQJICAgICAgZ2RrX3dpbmRvd19jbGVhcl9hcmVhICAoR2RrV2luZG93CSAgICp3
aW5kb3csCgkJCQkgICAgICBnaW50CSAgICB4LAoJCQkJICAgICAgZ2ludAkgICAgeSwKCQkJCSAg
ICAgIGdpbnQJICAgIHdpZHRoLAoJCQkJICAgICAgZ2ludAkgICAgaGVpZ2h0KTsKdm9pZAkgICAg
ICBnZGtfd2luZG93X2NsZWFyX2FyZWFfZShHZGtXaW5kb3cJICAgKndpbmRvdywKCQkJCSAgICAg
IGdpbnQJICAgIHgsCgkJCQkgICAgICBnaW50CSAgICB5LAoJCQkJICAgICAgZ2ludAkgICAgd2lk
dGgsCgkJCQkgICAgICBnaW50CSAgICBoZWlnaHQpOwp2b2lkCSAgICAgIGdka193aW5kb3dfY29w
eV9hcmVhICAgKEdka1dpbmRvdwkgICAqd2luZG93LAoJCQkJICAgICAgR2RrR0MJICAgKmdjLAoJ
CQkJICAgICAgZ2ludAkgICAgeCwKCQkJCSAgICAgIGdpbnQJICAgIHksCgkJCQkgICAgICBHZGtX
aW5kb3cJICAgKnNvdXJjZV93aW5kb3csCgkJCQkgICAgICBnaW50CSAgICBzb3VyY2VfeCwKCQkJ
CSAgICAgIGdpbnQJICAgIHNvdXJjZV95LAoJCQkJICAgICAgZ2ludAkgICAgd2lkdGgsCgkJCQkg
ICAgICBnaW50CSAgICBoZWlnaHQpOwp2b2lkCSAgICAgIGdka193aW5kb3dfcmFpc2UJICAgICAo
R2RrV2luZG93CSAgICp3aW5kb3cpOwp2b2lkCSAgICAgIGdka193aW5kb3dfbG93ZXIJICAgICAo
R2RrV2luZG93CSAgICp3aW5kb3cpOwoKdm9pZAkgICAgICBnZGtfd2luZG93X3NldF91c2VyX2Rh
dGEJIChHZGtXaW5kb3cJICAqd2luZG93LAoJCQkJCSAgZ3BvaW50ZXIJICAgdXNlcl9kYXRhKTsK
dm9pZAkgICAgICBnZGtfd2luZG93X3NldF9vdmVycmlkZV9yZWRpcmVjdChHZGtXaW5kb3cgICp3
aW5kb3csCgkJCQkJICAgICAgIGdib29sZWFuIG92ZXJyaWRlX3JlZGlyZWN0KTsKCnZvaWQJICAg
ICAgZ2RrX3dpbmRvd19hZGRfZmlsdGVyCShHZGtXaW5kb3cgICAgICp3aW5kb3csCgkJCQkJIEdk
a0ZpbHRlckZ1bmMJZnVuY3Rpb24sCgkJCQkJIGdwb2ludGVyCWRhdGEpOwp2b2lkCSAgICAgIGdk
a193aW5kb3dfcmVtb3ZlX2ZpbHRlcgkoR2RrV2luZG93ICAgICAqd2luZG93LAoJCQkJCSBHZGtG
aWx0ZXJGdW5jCWZ1bmN0aW9uLAoJCQkJCSBncG9pbnRlcglkYXRhKTsKCiAKCgoKCgp2b2lkIGdk
a193aW5kb3dfc2hhcGVfY29tYmluZV9tYXNrIChHZGtXaW5kb3cJICAgICp3aW5kb3csCgkJCQkg
ICAgR2RrQml0bWFwCSAgICAqc2hhcGVfbWFzaywKCQkJCSAgICBnaW50CSAgICAgb2Zmc2V0X3gs
CgkJCQkgICAgZ2ludAkgICAgIG9mZnNldF95KTsKIAoKCgoKCgp2b2lkIGdka193aW5kb3dfc2V0
X2NoaWxkX3NoYXBlcyAoR2RrV2luZG93ICp3aW5kb3cpOwoKIAoKCgoKCgp2b2lkIGdka193aW5k
b3dfbWVyZ2VfY2hpbGRfc2hhcGVzIChHZGtXaW5kb3cgKndpbmRvdyk7CgogCgoKCgoKZ2Jvb2xl
YW4gZ2RrX3dpbmRvd19pc192aXNpYmxlICAgICAoR2RrV2luZG93ICp3aW5kb3cpOwpnYm9vbGVh
biBnZGtfd2luZG93X2lzX3ZpZXdhYmxlICAgIChHZGtXaW5kb3cgKndpbmRvdyk7CgogCgoKZ2Jv
b2xlYW4gZ2RrX3dpbmRvd19zZXRfc3RhdGljX2dyYXZpdGllcyAoR2RrV2luZG93ICp3aW5kb3cs
CgkJCQkJICBnYm9vbGVhbiAgIHVzZV9zdGF0aWMpOyAgIAogCgoKCnZvaWQgZ2RrX2FkZF9jbGll
bnRfbWVzc2FnZV9maWx0ZXIgKEdka0F0b20gICAgICAgbWVzc2FnZV90eXBlLAoJCQkJICAgIEdk
a0ZpbHRlckZ1bmMgZnVuYywKCQkJCSAgICBncG9pbnRlciAgICAgIGRhdGEpOwoKIAoKR2RrRHJh
Z0NvbnRleHQgKiBnZGtfZHJhZ19jb250ZXh0X25ldyAgICAgICAgKHZvaWQpOwp2b2lkICAgICAg
ICAgICAgIGdka19kcmFnX2NvbnRleHRfcmVmICAgICAgICAoR2RrRHJhZ0NvbnRleHQgKmNvbnRl
eHQpOwp2b2lkICAgICAgICAgICAgIGdka19kcmFnX2NvbnRleHRfdW5yZWYgICAgICAoR2RrRHJh
Z0NvbnRleHQgKmNvbnRleHQpOwoKIAoKdm9pZCAgICAgICAgICAgICBnZGtfZHJhZ19zdGF0dXMg
ICAgICAgIChHZGtEcmFnQ29udGV4dCAgICpjb250ZXh0LAoJCQkJICAgICAgICAgR2RrRHJhZ0Fj
dGlvbiAgICAgYWN0aW9uLAoJCQkJCSBndWludDMyICAgICAgICAgICB0aW1lKTsKdm9pZCAgICAg
ICAgICAgICBnZGtfZHJvcF9yZXBseSAgICAgICAgIChHZGtEcmFnQ29udGV4dCAgICpjb250ZXh0
LAoJCQkJCSBnYm9vbGVhbiAgICAgICAgICBvaywKCQkJCQkgZ3VpbnQzMiAgICAgICAgICAgdGlt
ZSk7CnZvaWQgICAgICAgICAgICAgZ2RrX2Ryb3BfZmluaXNoICAgICAgICAoR2RrRHJhZ0NvbnRl
eHQgICAqY29udGV4dCwKCQkJCQkgZ2Jvb2xlYW4gICAgICAgICAgc3VjY2VzcywKCQkJCQkgZ3Vp
bnQzMiAgICAgICAgICAgdGltZSk7Ckdka0F0b20gICAgICAgICAgZ2RrX2RyYWdfZ2V0X3NlbGVj
dGlvbiAoR2RrRHJhZ0NvbnRleHQgICAqY29udGV4dCk7CgogCgpHZGtEcmFnQ29udGV4dCAqIGdk
a19kcmFnX2JlZ2luICAgICAgKEdka1dpbmRvdyAgICAgICp3aW5kb3csCgkJCQkgICAgICBHTGlz
dCAgICAgICAgICAqdGFyZ2V0cyk7Cmd1aW50MzIgICAgICAgICBnZGtfZHJhZ19nZXRfcHJvdG9j
b2wgKGd1aW50MzIgICAgICAgICAgeGlkLAoJCQkJICAgICAgIEdka0RyYWdQcm90b2NvbCAqcHJv
dG9jb2wpOwp2b2lkICAgICAgICAgICAgIGdka19kcmFnX2ZpbmRfd2luZG93IChHZGtEcmFnQ29u
dGV4dCAgICpjb250ZXh0LAoJCQkJICAgICAgIEdka1dpbmRvdyAgICAgICAqZHJhZ193aW5kb3cs
CgkJCSAJICAgICAgIGdpbnQgICAgICAgICAgICAgeF9yb290LAoJCQkJICAgICAgIGdpbnQgICAg
ICAgICAgICAgeV9yb290LAoJCQkJICAgICAgIEdka1dpbmRvdyAgICAgICoqZGVzdF93aW5kb3cs
CgkJCQkgICAgICAgR2RrRHJhZ1Byb3RvY29sICpwcm90b2NvbCk7Cmdib29sZWFuICAgICAgICBn
ZGtfZHJhZ19tb3Rpb24gICAgICAoR2RrRHJhZ0NvbnRleHQgKmNvbnRleHQsCgkJCQkgICAgICBH
ZGtXaW5kb3cgICAgICAqZGVzdF93aW5kb3csCgkJCQkgICAgICBHZGtEcmFnUHJvdG9jb2wgcHJv
dG9jb2wsCgkJCQkgICAgICBnaW50ICAgICAgICAgICAgeF9yb290LCAKCQkJCSAgICAgIGdpbnQg
ICAgICAgICAgICB5X3Jvb3QsCgkJCQkgICAgICBHZGtEcmFnQWN0aW9uICAgc3VnZ2VzdGVkX2Fj
dGlvbiwKCQkJCSAgICAgIEdka0RyYWdBY3Rpb24gICBwb3NzaWJsZV9hY3Rpb25zLAoJCQkJICAg
ICAgZ3VpbnQzMiAgICAgICAgIHRpbWUpOwp2b2lkICAgICAgICAgICAgZ2RrX2RyYWdfZHJvcCAg
ICAgICAgKEdka0RyYWdDb250ZXh0ICpjb250ZXh0LAoJCQkJICAgICAgZ3VpbnQzMiAgICAgICAg
IHRpbWUpOwp2b2lkICAgICAgICAgICAgZ2RrX2RyYWdfYWJvcnQgICAgICAgKEdka0RyYWdDb250
ZXh0ICpjb250ZXh0LAoJCQkJICAgICAgZ3VpbnQzMiAgICAgICAgIHRpbWUpOwoKIAoKdm9pZAkg
ICAgICBnZGtfd2luZG93X3NldF9oaW50cwkgKEdka1dpbmRvdwkgICp3aW5kb3csCgkJCQkJICBn
aW50CQkgICB4LAoJCQkJCSAgZ2ludAkJICAgeSwKCQkJCQkgIGdpbnQJCSAgIG1pbl93aWR0aCwK
CQkJCQkgIGdpbnQJCSAgIG1pbl9oZWlnaHQsCgkJCQkJICBnaW50CQkgICBtYXhfd2lkdGgsCgkJ
CQkJICBnaW50CQkgICBtYXhfaGVpZ2h0LAoJCQkJCSAgZ2ludAkJICAgZmxhZ3MpOwp2b2lkICAg
ICAgICAgIGdka193aW5kb3dfc2V0X2dlb21ldHJ5X2hpbnRzIChHZGtXaW5kb3cgICAgICAgICp3
aW5kb3csCgkJCQkJICAgICBHZGtHZW9tZXRyeSAgICAgICpnZW9tZXRyeSwKCQkJCQkgICAgIEdk
a1dpbmRvd0hpbnRzICAgIGZsYWdzKTsKdm9pZCAgICAgICAgICBnZGtfc2V0X3NtX2NsaWVudF9p
ZCAgICAgICAgIChjb25zdCBnY2hhciAqc21fY2xpZW50X2lkKTsKCgp2b2lkCSAgICAgIGdka193
aW5kb3dfc2V0X3RpdGxlCSAgIChHZGtXaW5kb3cJICAqd2luZG93LAoJCQkJCSAgICBjb25zdCBn
Y2hhcgkgICp0aXRsZSk7CnZvaWQgICAgICAgICAgZ2RrX3dpbmRvd19zZXRfcm9sZSAgICAgICAg
ICAoR2RrV2luZG93ICAgICAgICp3aW5kb3csCgkJCQkJICAgIGNvbnN0IGdjaGFyICAgICAqcm9s
ZSk7CnZvaWQgICAgICAgICAgZ2RrX3dpbmRvd19zZXRfdHJhbnNpZW50X2ZvciAoR2RrV2luZG93
ICAgICAgICp3aW5kb3csIAoJCQkJCSAgICBHZGtXaW5kb3cgICAgICAgKmxlYWRlcik7CnZvaWQJ
ICAgICAgZ2RrX3dpbmRvd19zZXRfYmFja2dyb3VuZAkgKEdka1dpbmRvdwkgICp3aW5kb3csCgkJ
CQkJICBHZGtDb2xvcgkgICpjb2xvcik7CnZvaWQJICAgICAgZ2RrX3dpbmRvd19zZXRfYmFja19w
aXhtYXAgKEdka1dpbmRvdwkgICp3aW5kb3csCgkJCQkJICBHZGtQaXhtYXAJICAqcGl4bWFwLAoJ
CQkJCSAgZ2Jvb2xlYW4gICAgICAgICBwYXJlbnRfcmVsYXRpdmUpOwp2b2lkCSAgICAgIGdka193
aW5kb3dfc2V0X2N1cnNvcgkgKEdka1dpbmRvdwkgICp3aW5kb3csCgkJCQkJICBHZGtDdXJzb3IJ
ICAqY3Vyc29yKTsKdm9pZAkgICAgICBnZGtfd2luZG93X3NldF9jb2xvcm1hcAkgKEdka1dpbmRv
dwkgICp3aW5kb3csCgkJCQkJICBHZGtDb2xvcm1hcAkgICpjb2xvcm1hcCk7CnZvaWQJICAgICAg
Z2RrX3dpbmRvd19nZXRfdXNlcl9kYXRhCSAoR2RrV2luZG93CSAgKndpbmRvdywKCQkJCQkgIGdw
b2ludGVyCSAgKmRhdGEpOwp2b2lkCSAgICAgIGdka193aW5kb3dfZ2V0X2dlb21ldHJ5CSAoR2Rr
V2luZG93CSAgKndpbmRvdywKCQkJCQkgIGdpbnQJCSAgKngsCgkJCQkJICBnaW50CQkgICp5LAoJ
CQkJCSAgZ2ludAkJICAqd2lkdGgsCgkJCQkJICBnaW50CQkgICpoZWlnaHQsCgkJCQkJICBnaW50
CQkgICpkZXB0aCk7CnZvaWQJICAgICAgZ2RrX3dpbmRvd19nZXRfcG9zaXRpb24JIChHZGtXaW5k
b3cJICAqd2luZG93LAoJCQkJCSAgZ2ludAkJICAqeCwKCQkJCQkgIGdpbnQJCSAgKnkpOwp2b2lk
CSAgICAgIGdka193aW5kb3dfZ2V0X3NpemUJIChHZGtXaW5kb3cJICAqd2luZG93LAoJCQkJCSAg
Z2ludAkJICAqd2lkdGgsCgkJCQkJICBnaW50CQkgICpoZWlnaHQpOwpHZGtWaXN1YWwqICAgIGdk
a193aW5kb3dfZ2V0X3Zpc3VhbAkgKEdka1dpbmRvdwkgICp3aW5kb3cpOwpHZGtDb2xvcm1hcCog
IGdka193aW5kb3dfZ2V0X2NvbG9ybWFwCSAoR2RrV2luZG93CSAgKndpbmRvdyk7Ckdka1dpbmRv
d1R5cGUgZ2RrX3dpbmRvd19nZXRfdHlwZQkgKEdka1dpbmRvdwkgICp3aW5kb3cpOwpnaW50CSAg
ICAgIGdka193aW5kb3dfZ2V0X29yaWdpbgkgKEdka1dpbmRvdwkgICp3aW5kb3csCgkJCQkJICBn
aW50CQkgICp4LAoJCQkJCSAgZ2ludAkJICAqeSk7Cmdib29sZWFuICAgICAgZ2RrX3dpbmRvd19n
ZXRfZGVza3JlbGF0aXZlX29yaWdpbiAoR2RrV2luZG93CSAgKndpbmRvdywKCQkJCQkgIGdpbnQJ
CSAgKngsCgkJCQkJICBnaW50CQkgICp5KTsKdm9pZAkgICAgICBnZGtfd2luZG93X2dldF9yb290
X29yaWdpbiAoR2RrV2luZG93CSAgKndpbmRvdywKCQkJCQkgIGdpbnQJCSAgKngsCgkJCQkJICBn
aW50CQkgICp5KTsKR2RrV2luZG93KiAgICBnZGtfd2luZG93X2dldF9wb2ludGVyCSAoR2RrV2lu
ZG93CSAgKndpbmRvdywKCQkJCQkgIGdpbnQJCSAgKngsCgkJCQkJICBnaW50CQkgICp5LAoJCQkJ
CSAgR2RrTW9kaWZpZXJUeXBlICptYXNrKTsKR2RrV2luZG93KiAgICBnZGtfd2luZG93X2dldF9w
YXJlbnQJIChHZGtXaW5kb3cJICAqd2luZG93KTsKR2RrV2luZG93KiAgICBnZGtfd2luZG93X2dl
dF90b3BsZXZlbAkgKEdka1dpbmRvdwkgICp3aW5kb3cpOwpHTGlzdCoJICAgICAgZ2RrX3dpbmRv
d19nZXRfY2hpbGRyZW4JIChHZGtXaW5kb3cJICAqd2luZG93KTsKR2RrRXZlbnRNYXNrICBnZGtf
d2luZG93X2dldF9ldmVudHMJIChHZGtXaW5kb3cJICAqd2luZG93KTsKdm9pZAkgICAgICBnZGtf
d2luZG93X3NldF9ldmVudHMJIChHZGtXaW5kb3cJICAqd2luZG93LAoJCQkJCSAgR2RrRXZlbnRN
YXNrCSAgIGV2ZW50X21hc2spOwoKdm9pZAkgICAgICBnZGtfd2luZG93X3NldF9pY29uCSAoR2Rr
V2luZG93CSAgKndpbmRvdywgCgkJCQkJICBHZGtXaW5kb3cJICAqaWNvbl93aW5kb3csCgkJCQkJ
ICBHZGtQaXhtYXAJICAqcGl4bWFwLAoJCQkJCSAgR2RrQml0bWFwCSAgKm1hc2spOwp2b2lkCSAg
ICAgIGdka193aW5kb3dfc2V0X2ljb25fbmFtZQkgKEdka1dpbmRvdwkgICp3aW5kb3csIAoJCQkJ
CSAgY29uc3QgZ2NoYXIJICAqbmFtZSk7CnZvaWQJICAgICAgZ2RrX3dpbmRvd19zZXRfZ3JvdXAJ
IChHZGtXaW5kb3cJICAqd2luZG93LCAKCQkJCQkgIEdka1dpbmRvdwkgICpsZWFkZXIpOwp2b2lk
CSAgICAgIGdka193aW5kb3dfc2V0X2RlY29yYXRpb25zIChHZGtXaW5kb3cJICAqd2luZG93LAoJ
CQkJCSAgR2RrV01EZWNvcmF0aW9uICBkZWNvcmF0aW9ucyk7CnZvaWQJICAgICAgZ2RrX3dpbmRv
d19zZXRfZnVuY3Rpb25zCSAoR2RrV2luZG93CSAgKndpbmRvdywKCQkJCQkgIEdka1dNRnVuY3Rp
b24JICAgZnVuY3Rpb25zKTsKR0xpc3QgKiAgICAgICBnZGtfd2luZG93X2dldF90b3BsZXZlbHMg
ICAodm9pZCk7Cgp2b2lkICAgICAgICAgIGdka193aW5kb3dfcmVnaXN0ZXJfZG5kICAgIChHZGtX
aW5kb3cgICAgICAgKndpbmRvdyk7Cgp2b2lkICAgICAgICAgIGdka19kcmF3YWJsZV9zZXRfZGF0
YSAgICAgIChHZGtEcmF3YWJsZSAgICAgKmRyYXdhYmxlLAoJCQkJCSAgY29uc3QgZ2NoYXIgICAg
ICprZXksCgkJCQkJICBncG9pbnRlcgkgICBkYXRhLAoJCQkJCSAgR0Rlc3Ryb3lOb3RpZnkgICBk
ZXN0cm95X2Z1bmMpOwoJCQkJCSAgCgogCgpHZGtDdXJzb3IqIGdka19jdXJzb3JfbmV3CQkgKEdk
a0N1cnNvclR5cGUJICBjdXJzb3JfdHlwZSk7Ckdka0N1cnNvciogZ2RrX2N1cnNvcl9uZXdfZnJv
bV9waXhtYXAJIChHZGtQaXhtYXAJICAqc291cmNlLAoJCQkJCSAgR2RrUGl4bWFwCSAgKm1hc2ss
CgkJCQkJICBHZGtDb2xvcgkgICpmZywKCQkJCQkgIEdka0NvbG9yCSAgKmJnLAoJCQkJCSAgZ2lu
dAkJICAgeCwKCQkJCQkgIGdpbnQJCSAgIHkpOwp2b2lkCSAgIGdka19jdXJzb3JfZGVzdHJveQkJ
IChHZGtDdXJzb3IJICpjdXJzb3IpOwoKCiAKCkdka0dDKiBnZGtfZ2NfbmV3CQkgIChHZGtXaW5k
b3cJICAgICp3aW5kb3cpOwpHZGtHQyogZ2RrX2djX25ld193aXRoX3ZhbHVlcwkgIChHZGtXaW5k
b3cJICAgICp3aW5kb3csCgkJCQkgICBHZGtHQ1ZhbHVlcwkgICAgKnZhbHVlcywKCQkJCSAgIEdk
a0dDVmFsdWVzTWFzayAgIHZhbHVlc19tYXNrKTsKR2RrR0MqIGdka19nY19yZWYJCSAgKEdka0dD
CSAgICAqZ2MpOwp2b2lkICAgZ2RrX2djX3VucmVmCQkgIChHZGtHQwkgICAgKmdjKTsKdm9pZCAg
IGdka19nY19kZXN0cm95CQkgIChHZGtHQwkgICAgKmdjKTsKdm9pZCAgIGdka19nY19nZXRfdmFs
dWVzCSAgKEdka0dDCSAgICAqZ2MsCgkJCQkgICBHZGtHQ1ZhbHVlcwkgICAgKnZhbHVlcyk7CnZv
aWQgICBnZGtfZ2Nfc2V0X2ZvcmVncm91bmQJICAoR2RrR0MJICAgICpnYywKCQkJCSAgIEdka0Nv
bG9yCSAgICAqY29sb3IpOwp2b2lkICAgZ2RrX2djX3NldF9iYWNrZ3JvdW5kCSAgKEdka0dDCSAg
ICAqZ2MsCgkJCQkgICBHZGtDb2xvcgkgICAgKmNvbG9yKTsKdm9pZCAgIGdka19nY19zZXRfZm9u
dAkJICAoR2RrR0MJICAgICpnYywKCQkJCSAgIEdka0ZvbnQJICAgICpmb250KTsKdm9pZCAgIGdk
a19nY19zZXRfZnVuY3Rpb24JICAoR2RrR0MJICAgICpnYywKCQkJCSAgIEdka0Z1bmN0aW9uCSAg
ICAgZnVuY3Rpb24pOwp2b2lkICAgZ2RrX2djX3NldF9maWxsCQkgIChHZGtHQwkgICAgKmdjLAoJ
CQkJICAgR2RrRmlsbAkgICAgIGZpbGwpOwp2b2lkICAgZ2RrX2djX3NldF90aWxlCQkgIChHZGtH
QwkgICAgKmdjLAoJCQkJICAgR2RrUGl4bWFwCSAgICAqdGlsZSk7CnZvaWQgICBnZGtfZ2Nfc2V0
X3N0aXBwbGUJICAoR2RrR0MJICAgICpnYywKCQkJCSAgIEdka1BpeG1hcAkgICAgKnN0aXBwbGUp
Owp2b2lkICAgZ2RrX2djX3NldF90c19vcmlnaW4JICAoR2RrR0MJICAgICpnYywKCQkJCSAgIGdp
bnQJCSAgICAgeCwKCQkJCSAgIGdpbnQJCSAgICAgeSk7CnZvaWQgICBnZGtfZ2Nfc2V0X2NsaXBf
b3JpZ2luCSAgKEdka0dDCSAgICAqZ2MsCgkJCQkgICBnaW50CQkgICAgIHgsCgkJCQkgICBnaW50
CQkgICAgIHkpOwp2b2lkICAgZ2RrX2djX3NldF9jbGlwX21hc2sJICAoR2RrR0MJICAgICpnYywK
CQkJCSAgIEdka0JpdG1hcAkgICAgKm1hc2spOwp2b2lkICAgZ2RrX2djX3NldF9jbGlwX3JlY3Rh
bmdsZSAgKEdka0dDCSAgICAqZ2MsCgkJCQkgICBHZGtSZWN0YW5nbGUJICAgICpyZWN0YW5nbGUp
Owp2b2lkICAgZ2RrX2djX3NldF9jbGlwX3JlZ2lvbgkgIChHZGtHQwkgICAgKmdjLAoJCQkJICAg
R2RrUmVnaW9uCSAgICAqcmVnaW9uKTsKdm9pZCAgIGdka19nY19zZXRfc3Vid2luZG93CSAgKEdk
a0dDCSAgICAqZ2MsCgkJCQkgICBHZGtTdWJ3aW5kb3dNb2RlICBtb2RlKTsKdm9pZCAgIGdka19n
Y19zZXRfZXhwb3N1cmVzCSAgKEdka0dDCSAgICAqZ2MsCgkJCQkgICBnYm9vbGVhbiAgICAgICAg
ICBleHBvc3VyZXMpOwp2b2lkICAgZ2RrX2djX3NldF9saW5lX2F0dHJpYnV0ZXMgKEdka0dDCSAg
ICAqZ2MsCgkJCQkgICBnaW50CQkgICAgIGxpbmVfd2lkdGgsCgkJCQkgICBHZGtMaW5lU3R5bGUJ
ICAgICBsaW5lX3N0eWxlLAoJCQkJICAgR2RrQ2FwU3R5bGUJICAgICBjYXBfc3R5bGUsCgkJCQkg
ICBHZGtKb2luU3R5bGUJICAgICBqb2luX3N0eWxlKTsKdm9pZCAgIGdka19nY19zZXRfZGFzaGVz
ICAgICAgICAgIChHZGtHQyAgICAgICAgICAgICpnYywKCQkJCSAgIGdpbnQJICAgICAgICAgICAg
IGRhc2hfb2Zmc2V0LAoJCQkJICAgZ2ludDggICAgICAgICAgICAgZGFzaF9saXN0W10sCgkJCQkg
ICBnaW50ICAgICAgICAgICAgICBuKTsKdm9pZCAgIGdka19nY19jb3B5CQkgIChHZGtHQwkgICAg
ICpkc3RfZ2MsCgkJCQkgICBHZGtHQwkgICAgICpzcmNfZ2MpOwoKCiAKCkdka1BpeG1hcCogZ2Rr
X3BpeG1hcF9uZXcJCShHZGtXaW5kb3cgICp3aW5kb3csCgkJCQkJIGdpbnQJICAgICB3aWR0aCwK
CQkJCQkgZ2ludAkgICAgIGhlaWdodCwKCQkJCQkgZ2ludAkgICAgIGRlcHRoKTsKR2RrQml0bWFw
KiBnZGtfYml0bWFwX2NyZWF0ZV9mcm9tX2RhdGEJKEdka1dpbmRvdyAgICp3aW5kb3csCgkJCQkJ
IGNvbnN0IGdjaGFyICpkYXRhLAoJCQkJCSBnaW50CSAgICAgIHdpZHRoLAoJCQkJCSBnaW50CSAg
ICAgIGhlaWdodCk7Ckdka1BpeG1hcCogZ2RrX3BpeG1hcF9jcmVhdGVfZnJvbV9kYXRhCShHZGtX
aW5kb3cgICAqd2luZG93LAoJCQkJCSBjb25zdCBnY2hhciAqZGF0YSwKCQkJCQkgZ2ludAkgICAg
ICB3aWR0aCwKCQkJCQkgZ2ludAkgICAgICBoZWlnaHQsCgkJCQkJIGdpbnQJICAgICAgZGVwdGgs
CgkJCQkJIEdka0NvbG9yICAgICpmZywKCQkJCQkgR2RrQ29sb3IgICAgKmJnKTsKR2RrUGl4bWFw
KiBnZGtfcGl4bWFwX2NyZWF0ZV9mcm9tX3hwbQkoR2RrV2luZG93ICAqd2luZG93LAoJCQkJCSBH
ZGtCaXRtYXAgKiptYXNrLAoJCQkJCSBHZGtDb2xvciAgICp0cmFuc3BhcmVudF9jb2xvciwKCQkJ
CQkgY29uc3QgZ2NoYXIgKmZpbGVuYW1lKTsKR2RrUGl4bWFwKiBnZGtfcGl4bWFwX2NvbG9ybWFw
X2NyZWF0ZV9mcm9tX3hwbSAoCgkJCQkJIEdka1dpbmRvdyAgICp3aW5kb3csCgkJCQkJIEdka0Nv
bG9ybWFwICpjb2xvcm1hcCwKCQkJCQkgR2RrQml0bWFwICAqKm1hc2ssCgkJCQkJIEdka0NvbG9y
ICAgICp0cmFuc3BhcmVudF9jb2xvciwKCQkJCQkgY29uc3QgZ2NoYXIgKmZpbGVuYW1lKTsKR2Rr
UGl4bWFwKiBnZGtfcGl4bWFwX2NyZWF0ZV9mcm9tX3hwbV9kIChHZGtXaW5kb3cgICp3aW5kb3cs
CgkJCQkJIEdka0JpdG1hcCAqKm1hc2ssCgkJCQkJIEdka0NvbG9yICAgKnRyYW5zcGFyZW50X2Nv
bG9yLAoJCQkJCSBnY2hhcgkgICAqKmRhdGEpOwpHZGtQaXhtYXAqIGdka19waXhtYXBfY29sb3Jt
YXBfY3JlYXRlX2Zyb21feHBtX2QgKAoJCQkJCSBHZGtXaW5kb3cgICAqd2luZG93LAoJCQkJCSBH
ZGtDb2xvcm1hcCAqY29sb3JtYXAsCgkJCQkJIEdka0JpdG1hcCAgKiptYXNrLAoJCQkJCSBHZGtD
b2xvciAgICAqdHJhbnNwYXJlbnRfY29sb3IsCgkJCQkJIGdjaGFyICAgICAqKmRhdGEpOwpHZGtQ
aXhtYXAgKmdka19waXhtYXBfcmVmCQkoR2RrUGl4bWFwICAqcGl4bWFwKTsKdm9pZAkgICBnZGtf
cGl4bWFwX3VucmVmCQkoR2RrUGl4bWFwICAqcGl4bWFwKTsKCkdka0JpdG1hcCAqZ2RrX2JpdG1h
cF9yZWYJCShHZGtCaXRtYXAgICpwaXhtYXApOwp2b2lkCSAgIGdka19iaXRtYXBfdW5yZWYJCShH
ZGtCaXRtYXAgICpwaXhtYXApOwoKCiAKCkdka0ltYWdlKiBnZGtfaW1hZ2VfbmV3X2JpdG1hcChH
ZGtWaXN1YWwgICAgICp2aXN1YWwsCgkJCQlncG9pbnRlciAgICAgIGRhdGEsCgkJCQlnaW50ICAg
ICAgICAgIHdpZHRoLAoJCQkJZ2ludCAgICAgICAgICBoZWlnaHQpOwpHZGtJbWFnZSogIGdka19p
bWFnZV9uZXcgICAgICAgKEdka0ltYWdlVHlwZSAgdHlwZSwKCQkJCUdka1Zpc3VhbCAgICAqdmlz
dWFsLAoJCQkJZ2ludAkgICAgICB3aWR0aCwKCQkJCWdpbnQJICAgICAgaGVpZ2h0KTsKR2RrSW1h
Z2UqICBnZGtfaW1hZ2VfZ2V0ICAgICAgIChHZGtXaW5kb3cgICAgKndpbmRvdywKCQkJCWdpbnQJ
ICAgICAgeCwKCQkJCWdpbnQJICAgICAgeSwKCQkJCWdpbnQJICAgICAgd2lkdGgsCgkJCQlnaW50
CSAgICAgIGhlaWdodCk7CnZvaWQJICAgZ2RrX2ltYWdlX3B1dF9waXhlbCAoR2RrSW1hZ2UgICAg
ICppbWFnZSwKCQkJCWdpbnQJICAgICAgeCwKCQkJCWdpbnQJICAgICAgeSwKCQkJCWd1aW50MzIJ
ICAgICAgcGl4ZWwpOwpndWludDMyCSAgIGdka19pbWFnZV9nZXRfcGl4ZWwgKEdka0ltYWdlICAg
ICAqaW1hZ2UsCgkJCQlnaW50CSAgICAgIHgsCgkJCQlnaW50CSAgICAgIHkpOwp2b2lkCSAgIGdk
a19pbWFnZV9kZXN0cm95ICAgKEdka0ltYWdlICAgICAqaW1hZ2UpOwoKCiAKCkdka0NvbG9ybWFw
KiBnZGtfY29sb3JtYXBfbmV3CSAgICAgICAgICAoR2RrVmlzdWFsICAgICAgKnZpc3VhbCwKCQkJ
CQkgICBnYm9vbGVhbiAgICAgICAgYWxsb2NhdGUpOwpHZGtDb2xvcm1hcCogZ2RrX2NvbG9ybWFw
X3JlZgkgICAgICAgICAgKEdka0NvbG9ybWFwICAgICpjbWFwKTsKdm9pZAkgICAgIGdka19jb2xv
cm1hcF91bnJlZgkgICAgICAgICAgKEdka0NvbG9ybWFwICAgICpjbWFwKTsKCkdka0NvbG9ybWFw
KiBnZGtfY29sb3JtYXBfZ2V0X3N5c3RlbQkgICh2b2lkKTsKZ2ludAkgICAgIGdka19jb2xvcm1h
cF9nZXRfc3lzdGVtX3NpemUgKHZvaWQpOwoKdm9pZCAgICAgICAgIGdka19jb2xvcm1hcF9jaGFu
Z2UgICAgICAgICAgKEdka0NvbG9ybWFwICAgICpjb2xvcm1hcCwKCQkJCQkgICBnaW50CQkgICBu
Y29sb3JzKTsKCnZvaWQgICAgICAgICBnZGtfY29sb3JtYXBfc3luYyAgICAgICAgICAgIChHZGtD
b2xvcm1hcCAgICAqY29sb3JtYXAsCgkJCQkJICAgZ2Jvb2xlYW4gICAgICAgIGZvcmNlKTsKZ2lu
dCAgICAgICAgIGdka19jb2xvcm1hcF9hbGxvY19jb2xvcnMgICAgKEdka0NvbG9ybWFwICAgICpj
b2xvcm1hcCwKCQkJCQkgICBHZGtDb2xvciAgICAgICAqY29sb3JzLAoJCQkJCSAgIGdpbnQgICAg
ICAgICAgICBuY29sb3JzLAoJCQkJCSAgIGdib29sZWFuICAgICAgICB3cml0ZWFibGUsCgkJCQkJ
ICAgZ2Jvb2xlYW4gICAgICAgIGJlc3RfbWF0Y2gsCgkJCQkJICAgZ2Jvb2xlYW4gICAgICAgKnN1
Y2Nlc3MpOwpnYm9vbGVhbiAgICAgZ2RrX2NvbG9ybWFwX2FsbG9jX2NvbG9yICAgICAoR2RrQ29s
b3JtYXAgICAgKmNvbG9ybWFwLAoJCQkJCSAgIEdka0NvbG9yICAgICAgICpjb2xvciwKCQkJCQkg
ICBnYm9vbGVhbiAgICAgICAgd3JpdGVhYmxlLAoJCQkJCSAgIGdib29sZWFuICAgICAgICBiZXN0
X21hdGNoKTsKdm9pZCAgICAgICAgIGdka19jb2xvcm1hcF9mcmVlX2NvbG9ycyAgICAgKEdka0Nv
bG9ybWFwICAgICpjb2xvcm1hcCwKCQkJCQkgICBHZGtDb2xvciAgICAgICAqY29sb3JzLAoJCQkJ
CSAgIGdpbnQgICAgICAgICAgICBuY29sb3JzKTsKCkdka1Zpc3VhbCogICBnZGtfY29sb3JtYXBf
Z2V0X3Zpc3VhbCAgICAgIChHZGtDb2xvcm1hcCAgICAqY29sb3JtYXApOwoKR2RrQ29sb3IqICAg
IGdka19jb2xvcl9jb3B5ICAgICAgICAgICAgICAgKGNvbnN0IEdka0NvbG9yICpjb2xvcik7CnZv
aWQgICAgICAgICBnZGtfY29sb3JfZnJlZSAgICAgICAgICAgICAgIChHZGtDb2xvciAgICAgICAq
Y29sb3IpOwoKZ2Jvb2xlYW4gICAgIGdka19jb2xvcl9wYXJzZQkgICAgICAgICAgKGNvbnN0IGdj
aGFyICAgICpzcGVjLAoJCQkJCSAgIEdka0NvbG9yICAgICAgICpjb2xvcik7Cmd1aW50ICAgICAg
ICBnZGtfY29sb3JfaGFzaCAgICAgICAgICAgICAgIChjb25zdCBHZGtDb2xvciAqY29sb3JhLAoJ
CQkJCSAgIGNvbnN0IEdka0NvbG9yICpjb2xvcmIpOwpnYm9vbGVhbiAgICAgZ2RrX2NvbG9yX2Vx
dWFsCSAgICAgICAgICAoY29uc3QgR2RrQ29sb3IgKmNvbG9yYSwKCQkJCQkgICBjb25zdCBHZGtD
b2xvciAqY29sb3JiKTsKCgogCnZvaWQgICAgIGdka19jb2xvcnNfc3RvcmUgKEdka0NvbG9ybWFw
CSpjb2xvcm1hcCwKCQkJICAgR2RrQ29sb3IJKmNvbG9ycywKCQkJICAgZ2ludAkJIG5jb2xvcnMp
OwpnYm9vbGVhbiBnZGtfY29sb3JzX2FsbG9jIChHZGtDb2xvcm1hcAkqY29sb3JtYXAsCgkJCSAg
IGdib29sZWFuICAgICAgY29udGlndW91cywKCQkJICAgZ3Vsb25nCSpwbGFuZXMsCgkJCSAgIGdp
bnQJCSBucGxhbmVzLAoJCQkgICBndWxvbmcJKnBpeGVscywKCQkJICAgZ2ludAkJIG5waXhlbHMp
Owp2b2lkICAgICBnZGtfY29sb3JzX2ZyZWUgIChHZGtDb2xvcm1hcAkqY29sb3JtYXAsCgkJCSAg
IGd1bG9uZwkqcGl4ZWxzLAoJCQkgICBnaW50CQkgbnBpeGVscywKCQkJICAgZ3Vsb25nCSBwbGFu
ZXMpOwpnYm9vbGVhbiBnZGtfY29sb3Jfd2hpdGUgIChHZGtDb2xvcm1hcAkqY29sb3JtYXAsCgkJ
CSAgIEdka0NvbG9yCSpjb2xvcik7Cmdib29sZWFuIGdka19jb2xvcl9ibGFjayAgKEdka0NvbG9y
bWFwCSpjb2xvcm1hcCwKCQkJICAgR2RrQ29sb3IJKmNvbG9yKTsKZ2Jvb2xlYW4gZ2RrX2NvbG9y
X2FsbG9jICAoR2RrQ29sb3JtYXAJKmNvbG9ybWFwLAoJCQkgICBHZGtDb2xvcgkqY29sb3IpOwpn
Ym9vbGVhbiBnZGtfY29sb3JfY2hhbmdlIChHZGtDb2xvcm1hcAkqY29sb3JtYXAsCgkJCSAgIEdk
a0NvbG9yCSpjb2xvcik7CgoKIAoKR2RrRm9udCogZ2RrX2ZvbnRfbG9hZAkgICAgKGNvbnN0IGdj
aGFyICAgICpmb250X25hbWUpOwpHZGtGb250KiBnZGtfZm9udHNldF9sb2FkICAgKGNvbnN0IGdj
aGFyICAgICpmb250c2V0X25hbWUpOwpHZGtGb250KiBnZGtfZm9udF9yZWYJICAgIChHZGtGb250
ICAgICAgICAqZm9udCk7CnZvaWQJIGdka19mb250X3VucmVmCSAgICAoR2RrRm9udCAgICAgICAg
KmZvbnQpOwpnaW50CSBnZGtfZm9udF9pZAkgICAgKGNvbnN0IEdka0ZvbnQgICpmb250KTsKZ2Jv
b2xlYW4gZ2RrX2ZvbnRfZXF1YWwJICAgIChjb25zdCBHZGtGb250ICAqZm9udGEsCgkJCSAgICAg
Y29uc3QgR2RrRm9udCAgKmZvbnRiKTsKZ2ludAkgZ2RrX3N0cmluZ193aWR0aCAgIChHZGtGb250
ICAgICAgICAqZm9udCwKCQkJICAgICBjb25zdCBnY2hhciAgICAqc3RyaW5nKTsKZ2ludAkgZ2Rr
X3RleHRfd2lkdGgJICAgIChHZGtGb250ICAgICAgICAqZm9udCwKCQkJICAgICBjb25zdCBnY2hh
ciAgICAqdGV4dCwKCQkJICAgICBnaW50ICAgICAgICAgICAgdGV4dF9sZW5ndGgpOwpnaW50CSBn
ZGtfdGV4dF93aWR0aF93YyAgKEdka0ZvbnQgICAgICAgICpmb250LAoJCQkgICAgIGNvbnN0IEdk
a1dDaGFyICp0ZXh0LAoJCQkgICAgIGdpbnQgICAgICAgICAgICB0ZXh0X2xlbmd0aCk7CmdpbnQJ
IGdka19jaGFyX3dpZHRoCSAgICAoR2RrRm9udCAgICAgICAgKmZvbnQsCgkJCSAgICAgZ2NoYXIg
ICAgICAgICAgIGNoYXJhY3Rlcik7CmdpbnQJIGdka19jaGFyX3dpZHRoX3djICAoR2RrRm9udCAg
ICAgICAgKmZvbnQsCgkJCSAgICAgR2RrV0NoYXIgICAgICAgIGNoYXJhY3Rlcik7CmdpbnQJIGdk
a19zdHJpbmdfbWVhc3VyZSAoR2RrRm9udCAgICAgICAgKmZvbnQsCgkJCSAgICAgY29uc3QgZ2No
YXIgICAgKnN0cmluZyk7CmdpbnQJIGdka190ZXh0X21lYXN1cmUgICAoR2RrRm9udCAgICAgICAg
KmZvbnQsCgkJCSAgICAgY29uc3QgZ2NoYXIgICAgKnRleHQsCgkJCSAgICAgZ2ludCAgICAgICAg
ICAgIHRleHRfbGVuZ3RoKTsKZ2ludAkgZ2RrX2NoYXJfbWVhc3VyZSAgIChHZGtGb250ICAgICAg
ICAqZm9udCwKCQkJICAgICBnY2hhciAgICAgICAgICAgY2hhcmFjdGVyKTsKZ2ludAkgZ2RrX3N0
cmluZ19oZWlnaHQgIChHZGtGb250ICAgICAgICAqZm9udCwKCQkJICAgICBjb25zdCBnY2hhciAg
ICAqc3RyaW5nKTsKZ2ludAkgZ2RrX3RleHRfaGVpZ2h0ICAgIChHZGtGb250ICAgICAgICAqZm9u
dCwKCQkJICAgICBjb25zdCBnY2hhciAgICAqdGV4dCwKCQkJICAgICBnaW50ICAgICAgICAgICAg
dGV4dF9sZW5ndGgpOwpnaW50CSBnZGtfY2hhcl9oZWlnaHQgICAgKEdka0ZvbnQgICAgICAgICpm
b250LAoJCQkgICAgIGdjaGFyICAgICAgICAgICBjaGFyYWN0ZXIpOwoKdm9pZCAgICAgZ2RrX3Rl
eHRfZXh0ZW50cyAgIChHZGtGb250ICAgICAqZm9udCwKCQkJICAgICBjb25zdCBnY2hhciAqdGV4
dCwKCQkJICAgICBnaW50ICAgICAgICAgdGV4dF9sZW5ndGgsCgkJCSAgICAgZ2ludCAgICAgICAg
KmxiZWFyaW5nLAoJCQkgICAgIGdpbnQgICAgICAgICpyYmVhcmluZywKCQkJICAgICBnaW50ICAg
ICAgICAqd2lkdGgsCgkJCSAgICAgZ2ludCAgICAgICAgKmFzY2VudCwKCQkJICAgICBnaW50ICAg
ICAgICAqZGVzY2VudCk7CnZvaWQgICAgZ2RrX3RleHRfZXh0ZW50c193YyAoR2RrRm9udCAgICAg
ICAgKmZvbnQsCgkJCSAgICAgY29uc3QgR2RrV0NoYXIgKnRleHQsCgkJCSAgICAgZ2ludCAgICAg
ICAgICAgIHRleHRfbGVuZ3RoLAoJCQkgICAgIGdpbnQgICAgICAgICAgICpsYmVhcmluZywKCQkJ
ICAgICBnaW50ICAgICAgICAgICAqcmJlYXJpbmcsCgkJCSAgICAgZ2ludCAgICAgICAgICAgKndp
ZHRoLAoJCQkgICAgIGdpbnQgICAgICAgICAgICphc2NlbnQsCgkJCSAgICAgZ2ludCAgICAgICAg
ICAgKmRlc2NlbnQpOwp2b2lkICAgICBnZGtfc3RyaW5nX2V4dGVudHMgKEdka0ZvbnQgICAgICpm
b250LAoJCQkgICAgIGNvbnN0IGdjaGFyICpzdHJpbmcsCgkJCSAgICAgZ2ludCAgICAgICAgKmxi
ZWFyaW5nLAoJCQkgICAgIGdpbnQgICAgICAgICpyYmVhcmluZywKCQkJICAgICBnaW50ICAgICAg
ICAqd2lkdGgsCgkJCSAgICAgZ2ludCAgICAgICAgKmFzY2VudCwKCQkJICAgICBnaW50ICAgICAg
ICAqZGVzY2VudCk7CgogCgp2b2lkIGdka19kcmF3X3BvaW50CSAoR2RrRHJhd2FibGUgICpkcmF3
YWJsZSwKCQkJICBHZGtHQwkgICAgICAgKmdjLAoJCQkgIGdpbnQJCXgsCgkJCSAgZ2ludAkJeSk7
CnZvaWQgZ2RrX2RyYXdfbGluZQkgKEdka0RyYXdhYmxlICAqZHJhd2FibGUsCgkJCSAgR2RrR0MJ
ICAgICAgICpnYywKCQkJICBnaW50CQl4MSwKCQkJICBnaW50CQl5MSwKCQkJICBnaW50CQl4MiwK
CQkJICBnaW50CQl5Mik7CnZvaWQgZ2RrX2RyYXdfcmVjdGFuZ2xlCSAoR2RrRHJhd2FibGUgICpk
cmF3YWJsZSwKCQkJICBHZGtHQwkgICAgICAgKmdjLAoJCQkgIGdpbnQJCWZpbGxlZCwKCQkJICBn
aW50CQl4LAoJCQkgIGdpbnQJCXksCgkJCSAgZ2ludAkJd2lkdGgsCgkJCSAgZ2ludAkJaGVpZ2h0
KTsKdm9pZCBnZGtfZHJhd19hcmMJIChHZGtEcmF3YWJsZSAgKmRyYXdhYmxlLAoJCQkgIEdka0dD
CSAgICAgICAqZ2MsCgkJCSAgZ2ludAkJZmlsbGVkLAoJCQkgIGdpbnQJCXgsCgkJCSAgZ2ludAkJ
eSwKCQkJICBnaW50CQl3aWR0aCwKCQkJICBnaW50CQloZWlnaHQsCgkJCSAgZ2ludAkJYW5nbGUx
LAoJCQkgIGdpbnQJCWFuZ2xlMik7CnZvaWQgZ2RrX2RyYXdfcG9seWdvbgkgKEdka0RyYXdhYmxl
ICAqZHJhd2FibGUsCgkJCSAgR2RrR0MJICAgICAgICpnYywKCQkJICBnaW50CQlmaWxsZWQsCgkJ
CSAgR2RrUG9pbnQgICAgICpwb2ludHMsCgkJCSAgZ2ludAkJbnBvaW50cyk7CnZvaWQgZ2RrX2Ry
YXdfc3RyaW5nCSAoR2RrRHJhd2FibGUgICpkcmF3YWJsZSwKCQkJICBHZGtGb250ICAgICAgKmZv
bnQsCgkJCSAgR2RrR0MJICAgICAgICpnYywKCQkJICBnaW50CQl4LAoJCQkgIGdpbnQJCXksCgkJ
CSAgY29uc3QgZ2NoYXIgICpzdHJpbmcpOwp2b2lkIGdka19kcmF3X3RleHQJIChHZGtEcmF3YWJs
ZSAgKmRyYXdhYmxlLAoJCQkgIEdka0ZvbnQgICAgICAqZm9udCwKCQkJICBHZGtHQwkgICAgICAg
KmdjLAoJCQkgIGdpbnQJCXgsCgkJCSAgZ2ludAkJeSwKCQkJICBjb25zdCBnY2hhciAgKnRleHQs
CgkJCSAgZ2ludAkJdGV4dF9sZW5ndGgpOwp2b2lkIGdka19kcmF3X3RleHRfd2MJIChHZGtEcmF3
YWJsZQkgKmRyYXdhYmxlLAoJCQkgIEdka0ZvbnQJICpmb250LAoJCQkgIEdka0dDCQkgKmdjLAoJ
CQkgIGdpbnQJCSAgeCwKCQkJICBnaW50CQkgIHksCgkJCSAgY29uc3QgR2RrV0NoYXIgKnRleHQs
CgkJCSAgZ2ludAkJICB0ZXh0X2xlbmd0aCk7CnZvaWQgZ2RrX2RyYXdfcGl4bWFwCSAoR2RrRHJh
d2FibGUgICpkcmF3YWJsZSwKCQkJICBHZGtHQwkgICAgICAgKmdjLAoJCQkgIEdka0RyYXdhYmxl
ICAqc3JjLAoJCQkgIGdpbnQJCXhzcmMsCgkJCSAgZ2ludAkJeXNyYywKCQkJICBnaW50CQl4ZGVz
dCwKCQkJICBnaW50CQl5ZGVzdCwKCQkJICBnaW50CQl3aWR0aCwKCQkJICBnaW50CQloZWlnaHQp
Owp2b2lkIGdka19kcmF3X2ltYWdlCSAoR2RrRHJhd2FibGUgICpkcmF3YWJsZSwKCQkJICBHZGtH
QwkgICAgICAgKmdjLAoJCQkgIEdka0ltYWdlICAgICAqaW1hZ2UsCgkJCSAgZ2ludAkJeHNyYywK
CQkJICBnaW50CQl5c3JjLAoJCQkgIGdpbnQJCXhkZXN0LAoJCQkgIGdpbnQJCXlkZXN0LAoJCQkg
IGdpbnQJCXdpZHRoLAoJCQkgIGdpbnQJCWhlaWdodCk7CnZvaWQgZ2RrX2RyYXdfcG9pbnRzCSAo
R2RrRHJhd2FibGUgICpkcmF3YWJsZSwKCQkJICBHZGtHQwkgICAgICAgKmdjLAoJCQkgIEdka1Bv
aW50ICAgICAqcG9pbnRzLAoJCQkgIGdpbnQJCW5wb2ludHMpOwp2b2lkIGdka19kcmF3X3NlZ21l
bnRzCSAoR2RrRHJhd2FibGUgICpkcmF3YWJsZSwKCQkJICBHZGtHQwkgICAgICAgKmdjLAoJCQkg
IEdka1NlZ21lbnQgICAqc2VncywKCQkJICBnaW50CQluc2Vncyk7CnZvaWQgZ2RrX2RyYXdfbGlu
ZXMgICAgICAoR2RrRHJhd2FibGUgICpkcmF3YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBHZGtHQyAgICAgICAgKmdjLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdka1BvaW50ICAg
ICAqcG9pbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgbnBvaW50
cyk7CiAKCgoKIAoKZ2Jvb2xlYW4gICBnZGtfc2VsZWN0aW9uX293bmVyX3NldCAoR2RrV2luZG93
CSAqb3duZXIsCgkJCQkgICAgR2RrQXRvbQkgIHNlbGVjdGlvbiwKCQkJCSAgICBndWludDMyCSAg
dGltZSwKCQkJCSAgICBnaW50CSAgc2VuZF9ldmVudCk7Ckdka1dpbmRvdyogZ2RrX3NlbGVjdGlv
bl9vd25lcl9nZXQgKEdka0F0b20JICBzZWxlY3Rpb24pOwp2b2lkCSAgIGdka19zZWxlY3Rpb25f
Y29udmVydCAgIChHZGtXaW5kb3cJICpyZXF1ZXN0b3IsCgkJCQkgICAgR2RrQXRvbQkgIHNlbGVj
dGlvbiwKCQkJCSAgICBHZGtBdG9tCSAgdGFyZ2V0LAoJCQkJICAgIGd1aW50MzIJICB0aW1lKTsK
Z2Jvb2xlYW4gICBnZGtfc2VsZWN0aW9uX3Byb3BlcnR5X2dldCAoR2RrV2luZG93ICAqcmVxdWVz
dG9yLAoJCQkJICAgICAgIGd1Y2hhcgkgKipkYXRhLAoJCQkJICAgICAgIEdka0F0b20JICAqcHJv
cF90eXBlLAoJCQkJICAgICAgIGdpbnQJICAqcHJvcF9mb3JtYXQpOwp2b2lkCSAgIGdka19zZWxl
Y3Rpb25fc2VuZF9ub3RpZnkgKGd1aW50MzIJICAgIHJlcXVlc3RvciwKCQkJCSAgICAgIEdka0F0
b20JICAgIHNlbGVjdGlvbiwKCQkJCSAgICAgIEdka0F0b20JICAgIHRhcmdldCwKCQkJCSAgICAg
IEdka0F0b20JICAgIHByb3BlcnR5LAoJCQkJICAgICAgZ3VpbnQzMgkgICAgdGltZSk7CgpnaW50
ICAgICAgIGdka190ZXh0X3Byb3BlcnR5X3RvX3RleHRfbGlzdCAoR2RrQXRvbSBlbmNvZGluZywg
Z2ludCBmb3JtYXQsCgkJCQkJICAgZ3VjaGFyICp0ZXh0LCBnaW50IGxlbmd0aCwKCQkJCQkgICBn
Y2hhciAqKipsaXN0KTsKdm9pZAkgICBnZGtfZnJlZV90ZXh0X2xpc3QJCSAgKGdjaGFyICoqbGlz
dCk7CmdpbnQgICAgICAgZ2RrX3N0cmluZ190b19jb21wb3VuZF90ZXh0CSAgKGNvbnN0IGdjaGFy
ICpzdHIsCgkJCQkJICAgR2RrQXRvbSAqZW5jb2RpbmcsIGdpbnQgKmZvcm1hdCwKCQkJCQkgICBn
dWNoYXIgKipjdGV4dCwgZ2ludCAqbGVuZ3RoKTsKdm9pZAkgICBnZGtfZnJlZV9jb21wb3VuZF90
ZXh0CSAgKGd1Y2hhciAqY3RleHQpOwoKIAoKR2RrQXRvbSAgZ2RrX2F0b21faW50ZXJuICAgICAo
Y29uc3QgZ2NoYXIgICphdG9tX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdp
bnQgICAgICAgICAgb25seV9pZl9leGlzdHMpOwpnY2hhciogICBnZGtfYXRvbV9uYW1lICAgICAg
IChHZGtBdG9tICAgICAgIGF0b20pOwpnYm9vbGVhbiBnZGtfcHJvcGVydHlfZ2V0ICAgIChHZGtX
aW5kb3cgICAgKndpbmRvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2RrQXRvbSAg
ICAgICBwcm9wZXJ0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2RrQXRvbSAgICAg
ICB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWxvbmcgICAgICAgIG9mZnNl
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vsb25nICAgICAgICBsZW5ndGgsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgcGRlbGV0ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR2RrQXRvbSAgICAgICphY3R1YWxfcHJvcGVydHlfdHlw
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICphY3R1YWxfZm9y
bWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgKmFjdHVhbF9s
ZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1Y2hhciAgICAgICoqZGF0YSk7
CnZvaWQgICAgIGdka19wcm9wZXJ0eV9jaGFuZ2UgKEdka1dpbmRvdyAgICAqd2luZG93LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHZGtBdG9tICAgICAgIHByb3BlcnR5LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHZGtBdG9tICAgICAgIHR5cGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgZm9ybWF0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHZGtQcm9wTW9kZSAgIG1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGd1Y2hhciAgICAgICAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2lu
dCAgICAgICAgICBuZWxlbWVudHMpOwp2b2lkICAgICBnZGtfcHJvcGVydHlfZGVsZXRlIChHZGtX
aW5kb3cgICAgKndpbmRvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2RrQXRvbSAg
ICAgICBwcm9wZXJ0eSk7CgoKCiAKCmdib29sZWFuIGdka19yZWN0YW5nbGVfaW50ZXJzZWN0IChH
ZGtSZWN0YW5nbGUgKnNyYzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZGtS
ZWN0YW5nbGUgKnNyYzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZGtSZWN0
YW5nbGUgKmRlc3QpOwp2b2lkICAgICBnZGtfcmVjdGFuZ2xlX3VuaW9uICAgICAoR2RrUmVjdGFu
Z2xlICpzcmMxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2RrUmVjdGFuZ2xl
ICpzcmMyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2RrUmVjdGFuZ2xlICpk
ZXN0KTsKCiAKCnZvaWQgICAgICAgICAgZ2RrX2lucHV0X2luaXQgICAgICAgICAgICAgICAgICh2
b2lkKTsKdm9pZCAgICAgICAgICBnZGtfaW5wdXRfZXhpdCAgICAgICAgICAgICAgICAgKHZvaWQp
OwpHTGlzdCAqICAgICAgIGdka19pbnB1dF9saXN0X2RldmljZXMgICAgICAgICAodm9pZCk7CnZv
aWQgICAgICAgICAgZ2RrX2lucHV0X3NldF9leHRlbnNpb25fZXZlbnRzIChHZGtXaW5kb3cgICAg
ICAgICp3aW5kb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnaW50ICAgICAgICAgICAgICBtYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR2RrRXh0ZW5zaW9uTW9kZSAgbW9kZSk7CnZvaWQgICAgICAgICAgZ2Rr
X2lucHV0X3NldF9zb3VyY2UgICAgICAgICAgIChndWludDMyICAgICAgICAgICBkZXZpY2VpZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdka0lucHV0U291
cmNlICAgIHNvdXJjZSk7Cmdib29sZWFuICAgICAgZ2RrX2lucHV0X3NldF9tb2RlICAgICAgICAg
ICAgIChndWludDMyICAgICAgICAgICBkZXZpY2VpZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdka0lucHV0TW9kZSAgICAgIG1vZGUpOwp2b2lkICAgICAg
ICAgIGdka19pbnB1dF9zZXRfYXhlcyAgICAgICAgICAgICAoZ3VpbnQzMiAgICAgICAgICAgZGV2
aWNlaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZGtB
eGlzVXNlICAgICAgICpheGVzKTsKdm9pZCAgICAgICAgICBnZGtfaW5wdXRfc2V0X2tleSAgICAg
ICAgICAgICAgKGd1aW50MzIgICAgICAgICAgIGRldmljZWlkLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgaW5kZXgsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAg
ICBrZXl2YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
ZGtNb2RpZmllclR5cGUgICBtb2RpZmllcnMpOwp2b2lkICAgICAgICAgIGdka19pbnB1dF93aW5k
b3dfZ2V0X3BvaW50ZXIgICAoR2RrV2luZG93ICAgICAgICAqd2luZG93LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiAgICAgICAgICAgZGV2aWNl
aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91Ymxl
ICAgICAgICAgICp4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2RvdWJsZSAgICAgICAgICAqeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdkb3VibGUgICAgICAgICAgKnByZXNzdXJlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSAgICAgICAgICAqeHRpbHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91YmxlICAgICAg
ICAgICp5dGlsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdka01vZGlmaWVyVHlwZSAgKm1hc2spOwpHZGtUaW1lQ29vcmQgKmdka19pbnB1dF9tb3Rpb25f
ZXZlbnRzICAgICAgICAoR2RrV2luZG93ICAgICAgICAqd2luZG93LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiAgICAgICAgICAgZGV2aWNlaWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDMyICAg
ICAgICAgICBzdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGd1aW50MzIgICAgICAgICAgIHN0b3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAgICpuZXZlbnRzX3JldHVybik7CgogCgoK
Z2Jvb2xlYW4gICAgIGdka19pbV9yZWFkeQkgICAodm9pZCk7Cgp2b2lkICAgICAgICAgZ2RrX2lt
X2JlZ2luCSAgIChHZGtJQyAgICAgICAgICAgICAgICppYywgCgkJCQkgICAgR2RrV2luZG93ICAg
ICAgICAgICAqd2luZG93KTsKdm9pZCAgICAgICAgIGdka19pbV9lbmQJCSAgICh2b2lkKTsKR2Rr
SU1TdHlsZSAgIGdka19pbV9kZWNpZGVfc3R5bGUgICAoR2RrSU1TdHlsZSAgICAgICAgICAgc3Vw
cG9ydGVkX3N0eWxlKTsKR2RrSU1TdHlsZSAgIGdka19pbV9zZXRfYmVzdF9zdHlsZSAoR2RrSU1T
dHlsZSAgICAgICAgICAgYmVzdF9hbGxvd2VkX3N0eWxlKTsKCkdka0lDKiAgICAgICBnZGtfaWNf
bmV3CQkgICAoR2RrSUNBdHRyIAkJKmF0dHIsCgkJCQkgICAgR2RrSUNBdHRyaWJ1dGVzVHlwZSBt
YXNrKTsKdm9pZCAgICAgICAgIGdka19pY19kZXN0cm95CSAgIChHZGtJQyAgICAgICAgICAgICAg
ICppYyk7Ckdka0lNU3R5bGUgICBnZGtfaWNfZ2V0X3N0eWxlCSAgIChHZGtJQyAgICAgICAgICAg
ICAgICppYyk7Ckdka0V2ZW50TWFzayBnZGtfaWNfZ2V0X2V2ZW50cyAgICAgKEdka0lDICAgICAg
ICAgICAgICAgKmljKTsKCkdka0lDQXR0ciogICBnZGtfaWNfYXR0cl9uZXcgICAgICAgKHZvaWQp
Owp2b2lkICAgICAgICAgZ2RrX2ljX2F0dHJfZGVzdHJveSAgIChHZGtJQ0F0dHIgKmF0dHIpOwoK
R2RrSUNBdHRyaWJ1dGVzVHlwZSAgZ2RrX2ljX3NldF9hdHRyIChHZGtJQyAgICAgICAgICAgICAg
KmljLCAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2RrSUNBdHRyICAg
ICAgICAgICphdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdka0lD
QXR0cmlidXRlc1R5cGUgbWFzayk7Ckdka0lDQXR0cmlidXRlc1R5cGUgIGdka19pY19nZXRfYXR0
ciAoR2RrSUMgICAgICAgICAgICAgICppYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR2RrSUNBdHRyICAgICAgICAgICphdHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdka0lDQXR0cmlidXRlc1R5cGUgbWFzayk7CgogCgpnY2hhciAgICAg
Kmdka193Y3N0b21icyAgICAgICAgICAoY29uc3QgR2RrV0NoYXIgICAqc3JjKTsKZ2ludCAgICAg
ICBnZGtfbWJzdG93Y3MgICAgICAgICAgKEdka1dDaGFyICAgICAgICAgKmRlc3QsCgkJCQkgIGNv
bnN0IGdjaGFyICAgICAgKnNyYywKCQkJCSAgZ2ludCAgICAgICAgICAgICAgZGVzdF9tYXgpOwoK
CiAKCkdka0NvbG9yQ29udGV4dCAqZ2RrX2NvbG9yX2NvbnRleHRfbmV3CQkJICAoR2RrVmlzdWFs
ICAgKnZpc3VhbCwKCQkJCQkJCSAgIEdka0NvbG9ybWFwICpjb2xvcm1hcCk7CgpHZGtDb2xvckNv
bnRleHQgKmdka19jb2xvcl9jb250ZXh0X25ld19tb25vCQkgIChHZGtWaXN1YWwgICAqdmlzdWFs
LAoJCQkJCQkJICAgR2RrQ29sb3JtYXAgKmNvbG9ybWFwKTsKCnZvaWQJCSBnZGtfY29sb3JfY29u
dGV4dF9mcmVlCQkJICAoR2RrQ29sb3JDb250ZXh0ICpjYyk7CgpndWxvbmcJCSBnZGtfY29sb3Jf
Y29udGV4dF9nZXRfcGl4ZWwJCSAgKEdka0NvbG9yQ29udGV4dCAqY2MsCgkJCQkJCQkgICBndXNo
b3J0CSAgICByZWQsCgkJCQkJCQkgICBndXNob3J0CSAgICBncmVlbiwKCQkJCQkJCSAgIGd1c2hv
cnQJICAgIGJsdWUsCgkJCQkJCQkgICBnaW50CQkgICAqZmFpbGVkKTsKdm9pZAkJIGdka19jb2xv
cl9jb250ZXh0X2dldF9waXhlbHMJCSAgKEdka0NvbG9yQ29udGV4dCAqY2MsCgkJCQkJCQkgICBn
dXNob3J0CSAgICpyZWRzLAoJCQkJCQkJICAgZ3VzaG9ydAkgICAqZ3JlZW5zLAoJCQkJCQkJICAg
Z3VzaG9ydAkgICAqYmx1ZXMsCgkJCQkJCQkgICBnaW50CQkgICAgbmNvbG9ycywKCQkJCQkJCSAg
IGd1bG9uZwkgICAqY29sb3JzLAoJCQkJCQkJICAgZ2ludAkJICAgKm5hbGxvY2F0ZWQpOwp2b2lk
CQkgZ2RrX2NvbG9yX2NvbnRleHRfZ2V0X3BpeGVsc19pbmNyZW1lbnRhbCAoR2RrQ29sb3JDb250
ZXh0ICpjYywKCQkJCQkJCSAgIGd1c2hvcnQJICAgKnJlZHMsCgkJCQkJCQkgICBndXNob3J0CSAg
ICpncmVlbnMsCgkJCQkJCQkgICBndXNob3J0CSAgICpibHVlcywKCQkJCQkJCSAgIGdpbnQJCSAg
ICBuY29sb3JzLAoJCQkJCQkJICAgZ2ludAkJICAgKnVzZWQsCgkJCQkJCQkgICBndWxvbmcJICAg
KmNvbG9ycywKCQkJCQkJCSAgIGdpbnQJCSAgICpuYWxsb2NhdGVkKTsKCmdpbnQJCSBnZGtfY29s
b3JfY29udGV4dF9xdWVyeV9jb2xvcgkJICAoR2RrQ29sb3JDb250ZXh0ICpjYywKCQkJCQkJCSAg
IEdka0NvbG9yCSAgICpjb2xvcik7CmdpbnQJCSBnZGtfY29sb3JfY29udGV4dF9xdWVyeV9jb2xv
cnMJCSAgKEdka0NvbG9yQ29udGV4dCAqY2MsCgkJCQkJCQkgICBHZGtDb2xvcgkgICAqY29sb3Jz
LAoJCQkJCQkJICAgZ2ludAkJICAgIG51bV9jb2xvcnMpOwoKZ2ludAkJIGdka19jb2xvcl9jb250
ZXh0X2FkZF9wYWxldHRlCQkgIChHZGtDb2xvckNvbnRleHQgKmNjLAoJCQkJCQkJICAgR2RrQ29s
b3IJICAgKnBhbGV0dGUsCgkJCQkJCQkgICBnaW50CQkgICAgbnVtX3BhbGV0dGUpOwoKdm9pZAkJ
IGdka19jb2xvcl9jb250ZXh0X2luaXRfZGl0aGVyCQkgIChHZGtDb2xvckNvbnRleHQgKmNjKTsK
dm9pZAkJIGdka19jb2xvcl9jb250ZXh0X2ZyZWVfZGl0aGVyCQkgIChHZGtDb2xvckNvbnRleHQg
KmNjKTsKCmd1bG9uZwkJIGdka19jb2xvcl9jb250ZXh0X2dldF9waXhlbF9mcm9tX3BhbGV0dGUg
KEdka0NvbG9yQ29udGV4dCAqY2MsCgkJCQkJCQkgICBndXNob3J0CSAgICpyZWQsCgkJCQkJCQkg
ICBndXNob3J0CSAgICpncmVlbiwKCQkJCQkJCSAgIGd1c2hvcnQJICAgKmJsdWUsCgkJCQkJCQkg
ICBnaW50CQkgICAqZmFpbGVkKTsKZ3VjaGFyCQkgZ2RrX2NvbG9yX2NvbnRleHRfZ2V0X2luZGV4
X2Zyb21fcGFsZXR0ZSAoR2RrQ29sb3JDb250ZXh0ICpjYywKCQkJCQkJCSAgIGdpbnQJCSAgICpy
ZWQsCgkJCQkJCQkgICBnaW50CQkgICAqZ3JlZW4sCgkJCQkJCQkgICBnaW50CQkgICAqYmx1ZSwK
CQkJCQkJCSAgIGdpbnQJCSAgICpmYWlsZWQpOwogCgoKR2RrUmVnaW9uKiAgICAgZ2RrX3JlZ2lv
bl9uZXcJICAgICh2b2lkKTsKdm9pZAkgICAgICAgZ2RrX3JlZ2lvbl9kZXN0cm95ICAgKEdka1Jl
Z2lvbgkgICAqcmVnaW9uKTsKCnZvaWQJICAgICAgIGdka19yZWdpb25fZ2V0X2NsaXBib3goR2Rr
UmVnaW9uICAgICpyZWdpb24sCgkJCQkgICAgICBHZGtSZWN0YW5nbGUgKnJlY3RhbmdsZSk7Cgpn
Ym9vbGVhbiAgICAgICBnZGtfcmVnaW9uX2VtcHR5CSAgICAoR2RrUmVnaW9uCSAgICpyZWdpb24p
OwpnYm9vbGVhbiAgICAgICBnZGtfcmVnaW9uX2VxdWFsCSAgICAoR2RrUmVnaW9uCSAgICpyZWdp
b24xLAoJCQkJICAgICBHZGtSZWdpb24JICAgKnJlZ2lvbjIpOwpnYm9vbGVhbiAgICAgICBnZGtf
cmVnaW9uX3BvaW50X2luICAoR2RrUmVnaW9uCSAgICpyZWdpb24sCgkJCQkgICAgIGludAkJICAg
eCwKCQkJCSAgICAgaW50CQkgICB5KTsKR2RrT3ZlcmxhcFR5cGUgZ2RrX3JlZ2lvbl9yZWN0X2lu
ICAgKEdka1JlZ2lvbgkgICAqcmVnaW9uLAoJCQkJICAgICBHZGtSZWN0YW5nbGUgICpyZWN0KTsK
Ckdka1JlZ2lvbiogICAgIGdka19yZWdpb25fcG9seWdvbiAgIChHZGtQb2ludCAgICAgICpwb2lu
dHMsCgkJCQkgICAgIGdpbnQgICAgICAgICAgIG5wb2ludHMsCgkJCQkgICAgIEdka0ZpbGxSdWxl
ICAgIGZpbGxfcnVsZSk7Cgp2b2lkCSAgICAgICBnZGtfcmVnaW9uX29mZnNldCAgIChHZGtSZWdp
b24JICAgKnJlZ2lvbiwKCQkJCSAgICBnaW50CSAgIGR4LAoJCQkJICAgIGdpbnQJICAgZHkpOwp2
b2lkCSAgICAgICBnZGtfcmVnaW9uX3NocmluayAgIChHZGtSZWdpb24JICAgKnJlZ2lvbiwKCQkJ
CSAgICBnaW50CSAgIGR4LAoJCQkJICAgIGdpbnQJICAgZHkpOwoKR2RrUmVnaW9uKiAgICBnZGtf
cmVnaW9uX3VuaW9uX3dpdGhfcmVjdCAgKEdka1JlZ2lvbgkgICpyZWdpb24sCgkJCQkJICAgR2Rr
UmVjdGFuZ2xlCSAgKnJlY3QpOwpHZGtSZWdpb24qICAgIGdka19yZWdpb25zX2ludGVyc2VjdAkg
IChHZGtSZWdpb24JICAqc291cmNlMSwKCQkJCQkgICBHZGtSZWdpb24JICAqc291cmNlMik7Ckdk
a1JlZ2lvbiogICAgZ2RrX3JlZ2lvbnNfdW5pb24JCSAgKEdka1JlZ2lvbgkgICpzb3VyY2UxLAoJ
CQkJCSAgIEdka1JlZ2lvbgkgICpzb3VyY2UyKTsKR2RrUmVnaW9uKiAgICBnZGtfcmVnaW9uc19z
dWJ0cmFjdAkgIChHZGtSZWdpb24JICAqc291cmNlMSwKCQkJCQkgICBHZGtSZWdpb24JICAqc291
cmNlMik7Ckdka1JlZ2lvbiogICAgZ2RrX3JlZ2lvbnNfeG9yCQkgIChHZGtSZWdpb24JICAqc291
cmNlMSwKCQkJCQkgICBHZGtSZWdpb24JICAqc291cmNlMik7CgogCnZvaWQgICAgIGdka19ldmVu
dF9zZW5kX2NsaWVudG1lc3NhZ2VfdG9hbGwgKEdka0V2ZW50ICAgICpldmVudCk7Cmdib29sZWFu
IGdka19ldmVudF9zZW5kX2NsaWVudF9tZXNzYWdlIChHZGtFdmVudCAgICAqZXZlbnQsCgkJCQkJ
Z3VpbnQzMiAgICAgIHhpZCk7CgogCgpnY2hhciogICBnZGtfa2V5dmFsX25hbWUJCSAgKGd1aW50
CWtleXZhbCk7Cmd1aW50ICAgIGdka19rZXl2YWxfZnJvbV9uYW1lCQkgIChjb25zdCBnY2hhciAq
a2V5dmFsX25hbWUpOwpndWludCAgICBnZGtfa2V5dmFsX3RvX3VwcGVyCQkgIChndWludAlrZXl2
YWwpOwpndWludCAgICBnZGtfa2V5dmFsX3RvX2xvd2VyCQkgIChndWludAlrZXl2YWwpOwpnYm9v
bGVhbiBnZGtfa2V5dmFsX2lzX3VwcGVyCQkgIChndWludAlrZXl2YWwpOwpnYm9vbGVhbiBnZGtf
a2V5dmFsX2lzX2xvd2VyCQkgIChndWludAlrZXl2YWwpOwoKIAoKCmV4dGVybiBHTXV0ZXggKmdk
a190aHJlYWRzX211dGV4OwoKdm9pZCAgICAgZ2RrX3RocmVhZHNfZW50ZXIgICAgICAgICAgICAg
ICAgKHZvaWQpOwp2b2lkICAgICBnZGtfdGhyZWFkc19sZWF2ZSAgICAgICAgICAgICAgICAodm9p
ZCk7CgoKCgoKCgoKCgoKCgoKCgp9CgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ2Rr
L2dka3JnYi5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7
CgoKdHlwZWRlZiBzdHJ1Y3QgX0dka1JnYkNtYXAgR2RrUmdiQ21hcDsKCnN0cnVjdCBfR2RrUmdi
Q21hcCB7CiAgZ3VpbnQzMiBjb2xvcnNbMjU2XTsKICBndWNoYXIgbHV0WzI1Nl07ICAKfTsKCnZv
aWQKZ2RrX3JnYl9pbml0ICh2b2lkKTsKCmd1bG9uZwpnZGtfcmdiX3hwaXhlbF9mcm9tX3JnYiAo
Z3VpbnQzMiByZ2IpOwoKdm9pZApnZGtfcmdiX2djX3NldF9mb3JlZ3JvdW5kIChHZGtHQyAqZ2Ms
IGd1aW50MzIgcmdiKTsKCnZvaWQKZ2RrX3JnYl9nY19zZXRfYmFja2dyb3VuZCAoR2RrR0MgKmdj
LCBndWludDMyIHJnYik7Cgp0eXBlZGVmIGVudW0KewogIEdES19SR0JfRElUSEVSX05PTkUsCiAg
R0RLX1JHQl9ESVRIRVJfTk9STUFMLAogIEdES19SR0JfRElUSEVSX01BWAp9IEdka1JnYkRpdGhl
cjsKCnZvaWQKZ2RrX2RyYXdfcmdiX2ltYWdlIChHZGtEcmF3YWJsZSAqZHJhd2FibGUsCgkJICAg
IEdka0dDICpnYywKCQkgICAgZ2ludCB4LAoJCSAgICBnaW50IHksCgkJICAgIGdpbnQgd2lkdGgs
CgkJICAgIGdpbnQgaGVpZ2h0LAoJCSAgICBHZGtSZ2JEaXRoZXIgZGl0aCwKCQkgICAgZ3VjaGFy
ICpyZ2JfYnVmLAoJCSAgICBnaW50IHJvd3N0cmlkZSk7Cgp2b2lkCmdka19kcmF3X3JnYl9pbWFn
ZV9kaXRoYWxpZ24gKEdka0RyYXdhYmxlICpkcmF3YWJsZSwKCQkJICAgICAgR2RrR0MgKmdjLAoJ
CQkgICAgICBnaW50IHgsCgkJCSAgICAgIGdpbnQgeSwKCQkJICAgICAgZ2ludCB3aWR0aCwKCQkJ
ICAgICAgZ2ludCBoZWlnaHQsCgkJCSAgICAgIEdka1JnYkRpdGhlciBkaXRoLAoJCQkgICAgICBn
dWNoYXIgKnJnYl9idWYsCgkJCSAgICAgIGdpbnQgcm93c3RyaWRlLAoJCQkgICAgICBnaW50IHhk
aXRoLAoJCQkgICAgICBnaW50IHlkaXRoKTsKCnZvaWQKZ2RrX2RyYXdfcmdiXzMyX2ltYWdlIChH
ZGtEcmF3YWJsZSAqZHJhd2FibGUsCgkJICAgICAgIEdka0dDICpnYywKCQkgICAgICAgZ2ludCB4
LAoJCSAgICAgICBnaW50IHksCgkJICAgICAgIGdpbnQgd2lkdGgsCgkJICAgICAgIGdpbnQgaGVp
Z2h0LAoJCSAgICAgICBHZGtSZ2JEaXRoZXIgZGl0aCwKCQkgICAgICAgZ3VjaGFyICpidWYsCgkJ
ICAgICAgIGdpbnQgcm93c3RyaWRlKTsKCnZvaWQKZ2RrX2RyYXdfZ3JheV9pbWFnZSAoR2RrRHJh
d2FibGUgKmRyYXdhYmxlLAoJCSAgICAgR2RrR0MgKmdjLAoJCSAgICAgZ2ludCB4LAoJCSAgICAg
Z2ludCB5LAoJCSAgICAgZ2ludCB3aWR0aCwKCQkgICAgIGdpbnQgaGVpZ2h0LAoJCSAgICAgR2Rr
UmdiRGl0aGVyIGRpdGgsCgkJICAgICBndWNoYXIgKmJ1ZiwKCQkgICAgIGdpbnQgcm93c3RyaWRl
KTsKCkdka1JnYkNtYXAgKgpnZGtfcmdiX2NtYXBfbmV3IChndWludDMyICpjb2xvcnMsIGdpbnQg
bl9jb2xvcnMpOwoKdm9pZApnZGtfcmdiX2NtYXBfZnJlZSAoR2RrUmdiQ21hcCAqY21hcCk7Cgp2
b2lkCmdka19kcmF3X2luZGV4ZWRfaW1hZ2UgKEdka0RyYXdhYmxlICpkcmF3YWJsZSwKCQkJR2Rr
R0MgKmdjLAoJCQlnaW50IHgsCgkJCWdpbnQgeSwKCQkJZ2ludCB3aWR0aCwKCQkJZ2ludCBoZWln
aHQsCgkJCUdka1JnYkRpdGhlciBkaXRoLAoJCQlndWNoYXIgKmJ1ZiwKCQkJZ2ludCByb3dzdHJp
ZGUsCgkJCUdka1JnYkNtYXAgKmNtYXApOwoKCiAKCmdib29sZWFuCmdka19yZ2JfZGl0aGVyYWJs
ZSAodm9pZCk7Cgp2b2lkCmdka19yZ2Jfc2V0X3ZlcmJvc2UgKGdib29sZWFuIHZlcmJvc2UpOwoK
IAp2b2lkCmdka19yZ2Jfc2V0X2luc3RhbGwgKGdib29sZWFuIGluc3RhbGwpOwoKdm9pZApnZGtf
cmdiX3NldF9taW5fY29sb3JzIChnaW50IG1pbl9jb2xvcnMpOwoKR2RrQ29sb3JtYXAgKgpnZGtf
cmdiX2dldF9jbWFwICh2b2lkKTsKCkdka1Zpc3VhbCAqCmdka19yZ2JfZ2V0X3Zpc3VhbCAodm9p
ZCk7CgoKfQoKCgoKIyAxMDA3ICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ2RrL2dkay5oIiAy
CgoKCiMgMjcgIi9vcHQvZ3RrL2luY2x1ZGUvZ2RrLS0uaCIgMgoKIyAxICIvb3B0L2d0ay9pbmNs
dWRlL2dkay0tL3R5cGVzLmgiIDEKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL29w
dC9ndGsvbGliL2d0a21tL2luY2x1ZGUvZ2RrLS1jb25maWcuaCIgMQogCgoKCiAKIyAxNiAiL29w
dC9ndGsvbGliL2d0a21tL2luY2x1ZGUvZ2RrLS1jb25maWcuaCIKCgoKCiAKCgogCiAKCgoKCgoK
CgogCiAKCgoKCgoKCiMgMjcgIi9vcHQvZ3RrL2luY2x1ZGUvZ2RrLS0vdHlwZXMuaCIgMgoKCgoK
IAoKCiAKCgogCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9ndGstMS4yL2d0ay9ndGtmZWF0dXJlcy5o
IiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgogCgoKCgoKCgoKCgoK
CgogCgoKCiAKCgoKCgogIAogCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKCiAKCgoKIAoKCgogCgoK
CiAKCgoKIAoKCgogCgoKCiAKCgoKIAoKCgogCgoKCgogCgoKCgoKfQoKCgoKIyAzOCAiL29wdC9n
dGsvaW5jbHVkZS9nZGstLS90eXBlcy5oIiAyCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCgog
CmNsYXNzIEdka19EcmF3YWJsZTsKY2xhc3MgR2RrX0JpdG1hcDsKY2xhc3MgR2RrX0NvbG9ybWFw
OwpjbGFzcyBHZGtfSW1hZ2U7CmNsYXNzIEdka19QaXhtYXA7CmNsYXNzIEdka19XaW5kb3c7CmNs
YXNzIEdka19Gb250OwpjbGFzcyBHZGtfR0M7CmNsYXNzIEdka19WaXN1YWw7IApjbGFzcyBHZGtf
Q3Vyc29yOwoKCiAKdHlwZWRlZiBHZGtBdG9tIAkJR2RrX0F0b207Cgp0eXBlZGVmIEdka1dDaGFy
IAkJR2RrX1dDaGFyOwoKCgogCmNsYXNzIEdka19Db2xvcjsKY2xhc3MgR2RrX0NvbG9yQ29udGV4
dERpdGhlcjsKY2xhc3MgR2RrX0NvbG9yQ29udGV4dDsKY2xhc3MgR2RrX0dDVmFsdWVzOwoKY2xh
c3MgR2RrX0dlb21ldHJ5OwpjbGFzcyBHZGtfSUNBdHRyOwoKY2xhc3MgR2RrX0ltYWdlOyAKY2xh
c3MgR2RrX1BvaW50OwpjbGFzcyBHZGtfUG9pbnRzOwpjbGFzcyBHZGtfUmVjdGFuZ2xlOwpjbGFz
cyBHZGtfU2VnbWVudDsKY2xhc3MgR2RrX1NlZ21lbnRzOwpjbGFzcyBHZGtfV2luZG93QXR0cjsK
CmNsYXNzIEdka19EZXZpY2VLZXk7CmNsYXNzIEdka19EZXZpY2VJbmZvOwpjbGFzcyBHZGtfVGlt
ZUNvb3JkOwpjbGFzcyBHZGtfUmVnaW9uOwoKIAp0eXBlZGVmIEdka19Db2xvckNvbnRleHREaXRo
ZXIgCUdka19Db2xvcl9Db250ZXh0X0RpdGhlcjsKdHlwZWRlZiBHZGtfQ29sb3JDb250ZXh0IAlH
ZGtfQ29sb3JfQ29udGV4dDsKdHlwZWRlZiBHZGtfVGltZUNvb3JkIAkJR2RrX1RpbWVfQ29vcmQ7
CnR5cGVkZWYgR2RrX1dpbmRvd0F0dHIgCQlHZGtfV2luZG93X0F0dHI7CnR5cGVkZWYgR2RrX0Rl
dmljZUtleSAJCUdka19EZXZpY2VfS2V5Owp0eXBlZGVmIEdka19HQ1ZhbHVlcyAJCUdka19HQ19W
YWx1ZXM7CnR5cGVkZWYgR2RrX0RldmljZUluZm8gCQlHZGtfRGV2aWNlX0luZm87Cgp0eXBlZGVm
IEdka1dDaGFyIAkJR2RrX1dfQ2hhcjsKCgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCgoKIAoKIAogCiAKIApjbGFzcyBHZGtfRHJhZ0NvbnRleHQ7
CiAKdHlwZWRlZiBHZGtfRHJhZ0NvbnRleHQgICAgICAgICBHZGtfRHJhZ19Db250ZXh0OwoKCgog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoKIAoKCiAKCiAKIAogCiAKIAogCnRlbXBsYXRl
IDxjbGFzcyBHZGtPYmo+CiAgY2xhc3MgR2RrX09iagogICAgewogICAgIHB1YmxpYzoKICAgICAg
IHR5cGVkZWYgR2RrT2JqIEJhc2VPYmplY3RUeXBlOwogICAgIHByb3RlY3RlZDoKICAgICAgIGJv
b2wgbnVsbF87CiAgICAgICBHZGtPYmogb2JqXzsKCiAgICAgICAgCiAgICAgICBHZGtfT2JqKCk6
bnVsbF8oMCkKICAgICAgICAgewogICAgICAgICB9CgogICAgIHB1YmxpYzoKICAgICAgIEdka19P
YmooR2RrT2JqICpvYmopOm51bGxfKG9iaj09IF9fbnVsbCApCiAgICAgICAgIHsKICAgICAgICAg
IGlmIChudWxsXykgCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGlmICgmb2JqXyE9b2Jq
KQogICAgICAgICAgICBtZW1jcHkoJm9ial8sb2JqLHNpemVvZihHZGtPYmopKTsKICAgICAgICAg
fQoKICAgICAgIEdka19PYmooY29uc3QgR2RrX09iaiYgb2JqKTpudWxsXygwKQogICAgICAgICB7
CiAgICAgICAgICBpZiAodGhpcyE9Jm9iaikKICAgICAgICAgICAgbWVtY3B5KCZvYmpfLCZvYmou
b2JqXyxzaXplb2YoR2RrT2JqKSk7CiAgICAgICAgIH0KCiAgICAgICB+R2RrX09iaigpIHt9OwoK
ICAgICAgIG9wZXJhdG9yIEdka09iaiogKCkKICAgICAgICAgewogICAgICAgICAgaWYgKG51bGxf
KSAKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICByZXR1cm4gJm9ial87CiAgICAgICAg
IH0KCiAgICAgICBvcGVyYXRvciBHZGtPYmoqICgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAg
IGlmIChudWxsXykgCiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgcmV0dXJuICZvYmpf
OwogICAgICAgICB9CgogICAgICAgR2RrT2JqKiBnZGtvYmooKQogICAgICAgICB7cmV0dXJuICZv
YmpfO30KICAgICAgIGNvbnN0IEdka09iaiogZ2Rrb2JqKCkgY29uc3QKICAgICAgICAge3JldHVy
biAmb2JqXzt9CgogICAgICAgR2RrT2JqKiBvcGVyYXRvciAtPiAoKQogICAgICAgICB7cmV0dXJu
ICZvYmpfO30KICAgICAgIGNvbnN0IEdka09iaiogb3BlcmF0b3IgLT4gKCkgY29uc3QKICAgICAg
ICAge3JldHVybiAmb2JqXzt9CiAgICAKICAgIH07IAoKdGVtcGxhdGUgPGNsYXNzIEdka09iaj4K
ICBjbGFzcyBHZGtfSGFuZGxlCiAgICB7CiAgICAgcHVibGljOgogICAgICAgdHlwZWRlZiBHZGtP
YmogQmFzZU9iamVjdFR5cGU7CiAgICAgcHJpdmF0ZToKICAgICAgIHZvaWQgKm9wZXJhdG9yIG5l
dyhzaXplX3QpOwogICAgIHByb3RlY3RlZDoKICAgICAgIEdka09iaiogb2JqXzsKCiAgICAgICAg
CiAgICAgICBHZGtfSGFuZGxlKCk6b2JqXygwKSB7fQoKICAgICAgICAKICAgICAgIEdka19IYW5k
bGUoR2RrT2JqKiBvYmopOm9ial8ob2JqKSB7fQoKICAgICAgICAKICAgICAgIEdka19IYW5kbGUo
Y29uc3QgR2RrX0hhbmRsZSAmb2JqKTpvYmpfKG9iai5vYmpfKSB7fQoKICAgICBwdWJsaWM6CiAg
ICAgICB2b2lkICpvcGVyYXRvciBuZXcoc2l6ZV90IHMsdm9pZCogdikge3JldHVybiA6Om9wZXJh
dG9yIG5ldyhzLHYpO30KCiAgICAgICB+R2RrX0hhbmRsZSgpIHt9CiAgICAgICAKICAgICAgIEdk
a09iaiogZ2Rrb2JqKCkgY29uc3QKICAgICAgICAge3JldHVybiBvYmpfO30KCiAgICAgICAgCiAg
ICAgICBvcGVyYXRvciBHZGtPYmoqICgpIGNvbnN0CiAgICAgICAgIHtyZXR1cm4gb2JqXzt9Cgog
ICAgICAgIAogICAgICAgYm9vbCBjb25uZWN0ZWQoKSBjb25zdAogICAgICAgICB7cmV0dXJuIChv
YmpfIT0wKTt9CgogICAgICAgIAogICAgICAgYm9vbCBvcGVyYXRvciA9PSAoY29uc3QgR2RrX0hh
bmRsZSAmb2JqKSBjb25zdAogICAgICAgICB7cmV0dXJuIChvYmpfPT1vYmoub2JqXyk7fQoKICAg
ICAgICAKICAgICAgIGJvb2wgb3BlcmF0b3IgIT0gKGNvbnN0IEdka19IYW5kbGUgJm9iaikgY29u
c3QKICAgICAgICAge3JldHVybiAob2JqXyE9b2JqLm9ial8pO30KCiMgMzMwICIvb3B0L2d0ay9p
bmNsdWRlL2dkay0tL3R5cGVzLmgiCgogICAgfTsKCiAKIAogCnRlbXBsYXRlIDxjbGFzcyBHZGtP
Ymo+CiAgaW5saW5lIHR5cGVuYW1lIEdka09iajo6QmFzZU9iamVjdFR5cGUqIGdka19jb25zdF9j
YXN0KGNvbnN0IEdka09iaiYgb2JqKSAKICAgIHtyZXR1cm4gY29uc3RfY2FzdDx0eXBlbmFtZSBH
ZGtPYmo6OkJhc2VPYmplY3RUeXBlKj4ob2JqLmdka29iaigpKTt9CgogCgpjbGFzcyBHZGtfQ29s
b3JDb250ZXh0RGl0aGVyCTpwdWJsaWMgR2RrX09iajxHZGtDb2xvckNvbnRleHREaXRoZXI+IHt9
OwpjbGFzcyBHZGtfQ29sb3JDb250ZXh0CQk6cHVibGljIEdka19PYmo8R2RrQ29sb3JDb250ZXh0
PiB7fTsKY2xhc3MgR2RrX0dDVmFsdWVzCQk6cHVibGljIEdka19PYmo8R2RrR0NWYWx1ZXM+IHt9
OwoKY2xhc3MgR2RrX0dlb21ldHJ5CQk6cHVibGljIEdka19PYmo8R2RrR2VvbWV0cnk+IHt9Owpj
bGFzcyBHZGtfSUNBdHRyCQk6cHVibGljIEdka19PYmo8R2RrSUNBdHRyPiB7fTsKY2xhc3MgR2Rr
X0RyYWdDb250ZXh0CQk6cHVibGljIEdka19PYmo8R2RrRHJhZ0NvbnRleHQ+IAp7CnB1YmxpYzoK
ICBHZGtfRHJhZ0NvbnRleHQgKCkge307CiAgR2RrX0RyYWdDb250ZXh0ICggR2RrX0RyYWdDb250
ZXh0ICZ4ICkgOiAKICAgIEdka19PYmo8R2RrRHJhZ0NvbnRleHQ+ICggeCApIHt9CiAgR2RrX0Ry
YWdDb250ZXh0ICggR2RrRHJhZ0NvbnRleHQgKnggKToKICAgIEdka19PYmo8R2RrRHJhZ0NvbnRl
eHQ+ICggeCApIHt9Cn07CgpjbGFzcyBHZGtfV2luZG93QXR0cgkJOnB1YmxpYyBHZGtfT2JqPEdk
a1dpbmRvd0F0dHI+IHt9OwpjbGFzcyBHZGtfRGV2aWNlS2V5CQk6cHVibGljIEdka19PYmo8R2Rr
RGV2aWNlS2V5PiB7fTsKY2xhc3MgR2RrX0RldmljZUluZm8JCTpwdWJsaWMgR2RrX09iajxHZGtE
ZXZpY2VJbmZvPiB7fTsKY2xhc3MgR2RrX1RpbWVDb29yZAkJOnB1YmxpYyBHZGtfT2JqPEdka1Rp
bWVDb29yZD4ge307CmNsYXNzIEdka19SZWdpb24JCTpwdWJsaWMgR2RrX09iajxHZGtSZWdpb24+
IHt9OwoKIAojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ2RrLS0vY29sb3IuaCIgMQogCiAKCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9nZGstLS90eXBl
cy5oIiAxCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNDkzICIvb3B0L2d0ay9pbmNsdWRlL2dk
ay0tL3R5cGVzLmgiCgoKIyAzMyAiL29wdC9ndGsvaW5jbHVkZS9nZGstLS9jb2xvci5oIiAyCgoK
Cm5hbWVzcGFjZSBHdGsKewogIHVzaW5nIHN0ZDo6c3RyaW5nIDsgIAp9CgogCiAKIAogCmNsYXNz
IEdka19Db2xvcjogcHVibGljIEdka0NvbG9yCiAgewogICBwdWJsaWM6CiAgICAgdHlwZWRlZiBH
ZGtDb2xvciBCYXNlT2JqZWN0VHlwZTsKCiAgIHByaXZhdGU6CiAgICAgR2RrQ29sb3IqIG9wZXJh
dG9yIC0+ICgpOwogICAgIGNvbnN0IEdka0NvbG9yKiBvcGVyYXRvciAtPiAoKSBjb25zdDsgIAoK
ICAgcHVibGljOgogICAgIEdka19Db2xvcigpOwogICAgIEdka19Db2xvcihjb25zdCBHdGs6OnN0
cmluZyAmc3RyKTsKICAgICBHZGtfQ29sb3IoY29uc3QgR2RrQ29sb3ImIGMpOwogICAgIGV4cGxp
Y2l0IEdka19Db2xvcihjb25zdCBHZGtDb2xvciogYyk7CiAgICAgR2RrX0NvbG9yKGNvbnN0IEdk
a19Db2xvciYgYyk7CiAgICAgfkdka19Db2xvcigpOwoKICAgICBHZGtDb2xvciogZ2Rrb2JqKCkg
e3JldHVybiB0aGlzO30KICAgICBjb25zdCBHZGtDb2xvciogZ2Rrb2JqKCkgY29uc3Qge3JldHVy
biB0aGlzO30KCiAgICAgYm9vbCBvcGVyYXRvciA9PSAoY29uc3QgR2RrX0NvbG9yICZjb2xvcikK
ICAgICAgIHsKICAgICAgICByZXR1cm4gZXF1YWwoY29sb3IpP3RydWU6ZmFsc2U7CiAgICAgICB9
CgogICAgIGdpbnQgZXF1YWwoY29uc3QgR2RrX0NvbG9yJiBjb2xvcikgY29uc3Q7CgogICAgIHZv
aWQgc2V0X2dyZXkoZ3VzaG9ydCBnKSAKICAgICAgIHsKICAgICAgICByZWQgPSBncmVlbiA9IGJs
dWUgPSBnOwogICAgICAgfQoKICAgICB2b2lkIHNldF9ncmV5X3AoZ2RvdWJsZSBnKSAKICAgICAg
IHsKICAgICAgICByZWQgPSBncmVlbiA9IGJsdWUgPSAoZ3VzaG9ydCkoZyo2NTUzNSk7CiAgICAg
ICB9CgogICAgIHZvaWQgc2V0X3JnYihndXNob3J0IHJlZF8sIGd1c2hvcnQgZ3JlZW5fLCBndXNo
b3J0IGJsdWVfKSAKICAgICAgIHsKICAgICAgICByZWQgPSByZWRfOwogICAgICAgIGdyZWVuID0g
Z3JlZW5fOwogICAgICAgIGJsdWUgPSBibHVlXzsKICAgICAgIH0KCiAgICAgdm9pZCBzZXRfcmdi
X3AoZ2RvdWJsZSByZWRfLCBnZG91YmxlIGdyZWVuXywgZ2RvdWJsZSBibHVlXykgCiAgICAgICB7
CiAgICAgICAgcmVkID0gKGd1c2hvcnQpKHJlZF8qNjU1MzUpOwogICAgICAgIGdyZWVuID0gKGd1
c2hvcnQpKGdyZWVuXyo2NTUzNSk7CiAgICAgICAgYmx1ZSA9IChndXNob3J0KShibHVlXyo2NTUz
NSk7CiAgICAgICB9CgogICAgIHZvaWQgc2V0X2hzdihnZG91YmxlIGgsIGdkb3VibGUgcywgZ2Rv
dWJsZSB2KTsKICAgICB2b2lkIHNldF9oc2woZ2RvdWJsZSBoLCBnZG91YmxlIHMsIGdkb3VibGUg
bCk7CgogICAgIGdpbnQgc2V0KGNvbnN0IEd0azo6c3RyaW5nICZzdHIpIDsKICAgICBnaW50IHBh
cnNlKGNvbnN0IEd0azo6c3RyaW5nJiBzcGVjKQogICAgICAge3JldHVybiBzZXQoc3BlYyk7fQoK
ICAgICBndXNob3J0IGdldF9yZWQoKSBjb25zdCAgICAgeyByZXR1cm4gcmVkOyAgIH0KICAgICBn
dXNob3J0IGdldF9ncmVlbigpIGNvbnN0ICAgeyByZXR1cm4gZ3JlZW47IH0KICAgICBndXNob3J0
IGdldF9ibHVlKCkgY29uc3QgICAgeyByZXR1cm4gYmx1ZTsgIH0KCiAgICAgdm9pZCBzZXRfcmVk
KGd1c2hvcnQgcikgICAgIHsgIHJlZCA9IHI7ICAgfQogICAgIHZvaWQgc2V0X2dyZWVuKGd1c2hv
cnQgZykgICB7ICBncmVlbiA9IGc7IH0KICAgICB2b2lkIHNldF9ibHVlKGd1c2hvcnQgYikgICAg
eyAgYmx1ZSA9IGI7ICB9CgogICAgIGd1aW50IGdldF9waXhlbCgpIGNvbnN0ICAgICB7IHJldHVy
biBwaXhlbDsgfQoKICAgICBnZG91YmxlIHJlZF9wKCkgY29uc3QgICB7IHJldHVybiByZWQgLyA2
NTUzNS47ICAgfQogICAgIGdkb3VibGUgZ3JlZW5fcCgpIGNvbnN0IHsgcmV0dXJuIGdyZWVuIC8g
NjU1MzUuOyB9CiAgICAgZ2RvdWJsZSBibHVlX3AoKSBjb25zdCAgeyByZXR1cm4gYmx1ZSAvIDY1
NTM1LjsgIH0KCiAgICAgIAogICAgIHZvaWQgc2V0X3JhbmRvbSgpOyAgCiAgICAgZ2RvdWJsZSBk
aXN0YW5jZV9yZ2JfZXVjbGlkZWFuKGNvbnN0IEdka19Db2xvciYgb2JqKSBjb25zdDsKICAgICBn
ZG91YmxlIGRpc3RhbmNlX3JnYl90YXhpY2FiKGNvbnN0IEdka19Db2xvciYgb2JqKSBjb25zdDsK
CiAgfTsKCgoKIAojIDM2NSAiL29wdC9ndGsvaW5jbHVkZS9nZGstLS90eXBlcy5oIiAyCgoKY2xh
c3MgR2RrX1BvaW50OiBwdWJsaWMgR2RrX09iajxHZGtQb2ludD4KICB7CiAgIHB1YmxpYzoKICAg
ICAgICAKICAgICAgIG9wZXJhdG9yIEdka1BvaW50ICgpIGNvbnN0IHsKCSAgIHJldHVybiBvYmpf
OwogICAgICAgfQoKICAgICBHZGtfUG9pbnQoKQogICAgICAgOkdka19PYmo8R2RrUG9pbnQ+KCkg
e30KICAgICBHZGtfUG9pbnQoR2RrUG9pbnQgKnB0KQogICAgICAgOkdka19PYmo8R2RrUG9pbnQ+
KHB0KSB7fQogICAgIEdka19Qb2ludChjb25zdCBHZGtfUG9pbnQmIHB0KQogICAgICAgOkdka19P
Ymo8R2RrUG9pbnQ+KHB0KSB7fQogICAgIEdka19Qb2ludChnaW50IHgsZ2ludCB5KQogICAgICAg
e29ial8ueD14OwogICAgICAgIG9ial8ueT15OwogICAgICAgfQogICAgIH5HZGtfUG9pbnQoKTsK
ICB9OwoKY2xhc3MgR2RrX1BvaW50cyAKICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIEdka1BvaW50
ICpwb2ludHNfOwogICAgICBpbnQgICAgICAgc2l6ZV87CiAgICAgIGJvb2wgICAgICBvd25lZF87
CgogICAgICAgCiAgICAgIEdka19Qb2ludHMmIG9wZXJhdG9yPSAoY29uc3QgR2RrX1BvaW50cyYp
OwoKICAgICAgdm9pZCBhX2FsbG9jKHNpemVfdCBzaXplKTsKICAgICAgdGVtcGxhdGUgPGNsYXNz
IEl0ZXJhdG9yPgogICAgICB2b2lkIGFfZHVwKEl0ZXJhdG9yIGIsIEl0ZXJhdG9yIGUpIDsKCiAg
ICBwdWJsaWM6CiAgICAgIG9wZXJhdG9yIEdka1BvaW50ICooKSBjb25zdCB7IHJldHVybiBwb2lu
dHNfOyB9CiAgICAgIGludCBzaXplKCkgY29uc3QgICAgICAgICAgICB7IHJldHVybiBzaXplXzsg
fQoKICAgICAgR2RrX1BvaW50cyhHZGtQb2ludCAqIHBvaW50cywgaW50IHNpemUpOwogICAgICBH
ZGtfUG9pbnRzKEdka19Qb2ludCAqIHBvaW50cywgaW50IHNpemUpOwogICAgICB+R2RrX1BvaW50
cygpOwoKCiAgICAgIHRlbXBsYXRlIDxjbGFzcyBDb250YWluZXI+CiAgICAgIEdka19Qb2ludHMo
Y29uc3QgQ29udGFpbmVyICYgYykgCiAgICAgICAgewogICAgICAgICAgYV9kdXAoYy5iZWdpbigp
LCBjLmVuZCgpKTsKICAgICAgICB9CgoKCgoKCiAgICAgIHRlbXBsYXRlIDxjbGFzcyBJdGVyYXRv
cj4KICAgICAgR2RrX1BvaW50cyhJdGVyYXRvciBiLEl0ZXJhdG9yIGUpIHsgYV9kdXAoYiwgZSk7
IH0KICB9OwoKdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yPgp2b2lkIEdka19Qb2ludHM6OmFfZHVw
KEl0ZXJhdG9yIGIsSXRlcmF0b3IgZSkKICB7CiAgICBJdGVyYXRvciBpdGVyOwoKICAgIGZvcihp
dGVyID0gYiwgc2l6ZV8gPSAwOyBpdGVyICE9IGU7ICsraXRlciwgKytzaXplXyk7CgogICAgYV9h
bGxvYyhzaXplXyk7CgogICAgdW5zaWduZWQgaW50IGk7CiAgICBmb3IoaXRlciA9IGIsIGkgPSAw
OyBpdGVyICE9IGU7ICsraXRlciwgKytpKQogICAgICAgIHBvaW50c19baV0gPSAqaXRlcjsKICB9
CgoKY2xhc3MgR2RrX1JlY3RhbmdsZTpwdWJsaWMgR2RrX09iajxHZGtSZWN0YW5nbGU+CiAgewog
ICBwdWJsaWM6CiAgICAgR2RrX1JlY3RhbmdsZSgpCiAgICAgICA6R2RrX09iajxHZGtSZWN0YW5n
bGU+KCkge30KICAgICBHZGtfUmVjdGFuZ2xlKEdka1JlY3RhbmdsZSogcmVjdCkKICAgICAgIDpH
ZGtfT2JqPEdka1JlY3RhbmdsZT4ocmVjdCkge30KICAgICBHZGtfUmVjdGFuZ2xlKGNvbnN0IEdk
a19SZWN0YW5nbGUmIHJlY3QpCiAgICAgICA6R2RrX09iajxHZGtSZWN0YW5nbGU+KHJlY3QpIHt9
CiAgICAgR2RrX1JlY3RhbmdsZShnaW50IHgsIGdpbnQgeSwgZ2ludCB3LCBnaW50IGgpCiAgICAg
ICA6R2RrX09iajxHZGtSZWN0YW5nbGU+KCkKICAgICAgIHtvYmpfLng9eDsKICAgICAgICBvYmpf
Lnk9eTsKICAgICAgICBvYmpfLndpZHRoPXc7CiAgICAgICAgb2JqXy5oZWlnaHQ9aDsKICAgICAg
IH0KICAgICB+R2RrX1JlY3RhbmdsZSgpOwoKCiAgICAgR2RrUmVjdGFuZ2xlIGpvaW4oR2RrX1Jl
Y3RhbmdsZSAmc3JjMikKICAgICAgIHtHZGtSZWN0YW5nbGUgcmVjOwogICAgICAgIGdka19yZWN0
YW5nbGVfdW5pb24oJm9ial8sJihzcmMyLm9ial8pLCZyZWMpOwogICAgICAgIHJldHVybiByZWM7
CiAgICAgICB9CgogIH07CgoKaW5saW5lIEdka1JlY3RhbmdsZSBqb2luKEdka19SZWN0YW5nbGUg
JnNyYzEsR2RrX1JlY3RhbmdsZSAmc3JjMikKICAge3JldHVybiBzcmMxLmpvaW4oc3JjMik7CiAg
IH0KCgpjbGFzcyBHZGtfU2VnbWVudDogcHVibGljIEdka19PYmo8R2RrU2VnbWVudD4KICB7CiAg
IHB1YmxpYzoKICAgICBHZGtfU2VnbWVudCgpCiAgICAgICA6R2RrX09iajxHZGtTZWdtZW50Pigp
IHt9CiAgICAgR2RrX1NlZ21lbnQoR2RrU2VnbWVudCogc2VnKQogICAgICAgOkdka19PYmo8R2Rr
U2VnbWVudD4oc2VnKSB7fQogICAgIEdka19TZWdtZW50KGNvbnN0IEdka19TZWdtZW50JiBzZWcp
CiAgICAgICA6R2RrX09iajxHZGtTZWdtZW50PihzZWcpIHt9CiAgICAgR2RrX1NlZ21lbnQoZ2lu
dCB4MSwgZ2ludCB5MSwgZ2ludCB4MiwgZ2ludCB5MikKICAgICAgIDpHZGtfT2JqPEdka1NlZ21l
bnQ+KCkKICAgICAgIHtvYmpfLngxPXgxOwogICAgICAgIG9ial8ueTE9eTE7CiAgICAgICAgb2Jq
Xy54Mj14MjsKICAgICAgICBvYmpfLnkyPXkyOwogICAgICAgfQogICAgIH5HZGtfU2VnbWVudCgp
OwogIH07ICAgCgoKCiMgMjggIi9vcHQvZ3RrL2luY2x1ZGUvZ2RrLS0uaCIgMgoKCiMgMSAiL29w
dC9ndGsvaW5jbHVkZS9nZGstLS9tYWluLmgiIDEKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ2RrLS0vY29sb3JtYXAuaCIgMQogCgogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiAKY2xhc3MgR2RrX0NvbG9ybWFwIDogcHVibGljIEdka19IYW5kbGU8
R2RrQ29sb3JtYXA+CiAgewogICBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgIAogICAgIHZvaWQgcmVm
KCk7CiAgICAgdm9pZCB1bnJlZigpOwoKIAoKCgogICBwdWJsaWM6CgogICAgICAKICAgICBHZGtf
Q29sb3JtYXAoKTsKCiAgIHB1YmxpYzoKICAgICAgCiAgICAgR2RrX0NvbG9ybWFwKEdka0NvbG9y
bWFwICpjb2xvcm1hcCk7CgogICAgICAKICAgICBHZGtfQ29sb3JtYXAoY29uc3QgR2RrX0NvbG9y
bWFwJiBjb2xvcm1hcCk7CgogICAgICAKICAgICB+R2RrX0NvbG9ybWFwKCk7CgogICAgICAKICAg
ICB2b2lkIGNyZWF0ZSgpIDsKCiAgICAgdm9pZCByZWxlYXNlKCk7CiAgICAgR2RrX0NvbG9ybWFw
JiBvcGVyYXRvciA9IChjb25zdCBHZGtfQ29sb3JtYXAmKTsKCiAgICAgIAoKICAgICAgCiAgICAg
R2RrX0NvbG9yIHdoaXRlKCk7CgogICAgICAKICAgICBHZGtfQ29sb3IgYmxhY2soKTsKCiAgICAg
Z2ludCBhbGxvYyhHZGtfQ29sb3IgJmNvbG9yKTsKCiAgICAgZ2ludCBjaGFuZ2UoR2RrX0NvbG9y
ICZjb2xvcik7CgogICAgICAKICAgICB2b2lkIGNoYW5nZShnaW50IG5jb2xvcnMpOwoKIAoKICAg
ICAgCiAgICAgIAogICAgIHN0YXRpYyBHZGtfQ29sb3JtYXAgZ2V0X3N5c3RlbSgpOwoKICAgICBz
dGF0aWMgZ2ludCBnZXRfc3lzdGVtX3NpemUoKTsKICB9OwoKCiMgMjggIi9vcHQvZ3RrL2luY2x1
ZGUvZ2RrLS0vbWFpbi5oIiAyCgoKbmFtZXNwYWNlIEd0awp7CiAgdXNpbmcgc3RkOjpzdHJpbmcg
OyAgCn0KCiAKY2xhc3MgR2RrIAogIHsKICAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluaXQo
aW50ICZhcmdjLGNoYXIqKiAmYXJndik7CiAgICAgc3RhdGljIHZvaWQgZXhpdChpbnQgZXJyb3Jf
Y29kZSk7CiAgICAgc3RhdGljIEd0azo6c3RyaW5nIHNldF9sb2NhbGUoKTsKICAgICBzdGF0aWMg
Z2ludCBldmVudHNfcGVuZGluZygpOwogICAgIHN0YXRpYyBHZGtFdmVudCogZXZlbnRfZ2V0KHZv
aWQpOwogICAgIHN0YXRpYyB2b2lkIGV2ZW50X3B1dChHZGtFdmVudCAmZXZlbnQpOwogICAgIHN0
YXRpYyBHZGtFdmVudCogZXZlbnRfY29weShHZGtFdmVudCogZXZlbnQpOwogICAgIHN0YXRpYyB2
b2lkIGV2ZW50X2ZyZWUoR2RrRXZlbnQqIGV2ZW50KTsKCgogICAgICAKICAgICBzdGF0aWMgdm9p
ZCBldmVudF9nZXRfdGltZShHZGtFdmVudCogZXZlbnQpOwoKICAgICAgCiAgICAgc3RhdGljIHZv
aWQgc2V0X3NtX2NsaWVudF9pZChjb25zdCBHdGs6OnN0cmluZyAmc21fY2xpZW50X2lkKTsKCgog
IH07CgoKIyAzMCAiL29wdC9ndGsvaW5jbHVkZS9nZGstLS5oIiAyCgojIDEgIi9vcHQvZ3RrL2lu
Y2x1ZGUvZ2RrLS0vdmlzdWFsLmgiIDEKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog
CiAKIAogCiAKY2xhc3MgR2RrX1Zpc3VhbCA6IHB1YmxpYyBHZGtfSGFuZGxlPEdka1Zpc3VhbD4K
ICB7CiAgIHByb3RlY3RlZDoKICAgICAgCiAgICAgdm9pZCByZWYoKTsKCiAgICAgIAogICAgIHZv
aWQgdW5yZWYoKTsKCiAKCgoKICAgcHVibGljOgoKICAgICAgCiAgICAgR2RrX1Zpc3VhbCgpOwoK
ICAgcHVibGljOgogICAgICAKICAgICBHZGtfVmlzdWFsKEdka1Zpc3VhbCogdmlzdWFsKTsKCiAg
ICAgIAogICAgIEdka19WaXN1YWwoY29uc3QgR2RrX1Zpc3VhbCYgdmlzdWFsKTsKICAKICAgICAg
CiAgICAgfkdka19WaXN1YWwoKTsKCiAgICAgdm9pZCByZWxlYXNlKCk7CiAgICAgR2RrX1Zpc3Vh
bCYgb3BlcmF0b3IgPSAoY29uc3QgR2RrX1Zpc3VhbCYpOwoKICAgcHJpdmF0ZToKICAgICAgICAK
ICAgICAgICAKICAgICAgICAKICAgICAgIHZvaWQgY3JlYXRlKCk7CgogICBwdWJsaWM6CiAgICAg
IAogICAgIHN0YXRpYyBnaW50IGdldF9iZXN0X2RlcHRoICh2b2lkKTsKIAogICAgICAKICAgICBz
dGF0aWMgR2RrVmlzdWFsVHlwZSBnZXRfYmVzdF90eXBlICh2b2lkKTsKIAogICAgIEdka19WaXN1
YWwmICBnZXRfc3lzdGVtICh2b2lkKTsKIAogICAgIEdka19WaXN1YWwmICBnZXRfYmVzdCAodm9p
ZCk7CiAKICAgICBHZGtfVmlzdWFsJiAgZ2V0X2Jlc3QgKGdpbnQgZGVwdGgpOwogCiAgICAgR2Rr
X1Zpc3VhbCYgIGdldF9iZXN0IChHZGtWaXN1YWxUeXBlICB2aXN1YWxfdHlwZSk7CgogICAgIEdk
a19WaXN1YWwmICBnZXRfYmVzdCAoZ2ludCBkZXB0aCwgR2RrVmlzdWFsVHlwZSAgdmlzdWFsX3R5
cGUpOwogCiAgfTsKCgojIDMxICIvb3B0L2d0ay9pbmNsdWRlL2dkay0tLmgiIDIKCiMgMSAiL29w
dC9ndGsvaW5jbHVkZS9nZGstLS9nYy5oIiAxCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ2RrLS0vZm9udC5oIiAxCiAKCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKbmFtZXNwYWNlIEd0awp7CiAgdXNpbmcgc3RkOjpzdHJpbmcgOyAgCn0K
CmNsYXNzIEdka19Gb250OiBwdWJsaWMgR2RrX0hhbmRsZTxHZGtGb250PgogIHsKICAgcHJvdGVj
dGVkOgoKICAgICAgCiAgICAgdm9pZCByZWYoKTsKCiAgICAgIAogICAgIHZvaWQgdW5yZWYoKTsK
CiAKCgoKICAgcHVibGljOgoKICAgICAgCiAgICAgR2RrX0ZvbnQoKTsKCiAgIHB1YmxpYzoKICAg
ICAgCiAgICAgR2RrX0ZvbnQoR2RrRm9udCAqZm9udCk7CiAgCiAgICAgR2RrX0ZvbnQoY29uc3Qg
R2RrX0ZvbnQmIGZvbnQpOwoKICAgICAgCiAgICAgR2RrX0ZvbnQoY29uc3QgR3RrOjpzdHJpbmcg
JmZvbnRfbmFtZSk7CgogICAgICAKICAgICB+R2RrX0ZvbnQoKTsKCiAgICAgdm9pZCBjcmVhdGUo
Y29uc3QgR3RrOjpzdHJpbmcgJmZvbnRfbmFtZSk7CgogICAgIHZvaWQgcmVsZWFzZSgpOwogICAg
IEdka19Gb250JiBvcGVyYXRvciA9IChjb25zdCBHZGtfRm9udCYpOwoKICAgICAgCiAgICAgCiAg
ICAgR2RrX0ZvbnQmIGxvYWQoY29uc3QgR3RrOjpzdHJpbmcgJmZvbnRfbmFtZSk7CgogICAgIEdk
a19Gb250JiBzZXRfbG9hZChjb25zdCBHdGs6OnN0cmluZyAmZm9udHNldF9uYW1lKTsKCiAgICAg
Z2ludCBmb250X2lkKCkgY29uc3Q7CgogICAgIGdpbnQgZXF1YWwoY29uc3QgR2RrX0ZvbnQgICZm
b250KSBjb25zdDsKCiAgICAgZ2ludCBhc2NlbnQoKSBjb25zdDsKICAgICBnaW50IGRlc2NlbnQo
KSBjb25zdDsKICAgICBnaW50IGhlaWdodCgpIGNvbnN0OwoKICAgICBnaW50IHN0cmluZ193aWR0
aChjb25zdCBHdGs6OnN0cmluZyAmc3RyKSBjb25zdCA7CgogICAgIGdpbnQgdGV4dF93aWR0aChj
b25zdCBjaGFyKiB0ZXh0LGludCBsZW5ndGgpIGNvbnN0OwoKICAgICBnaW50IGNoYXJfd2lkdGgo
Z2NoYXIgICAgIGNoYXJhY3RlcikgY29uc3Q7CgogICAgIGdpbnQgc3RyaW5nX21lYXN1cmUoY29u
c3QgR3RrOjpzdHJpbmcgJnN0cikgY29uc3Q7CgogICAgIGdpbnQgdGV4dF9tZWFzdXJlKGNvbnN0
IGNoYXIqIHRleHQsaW50IGxlbmd0aCkgY29uc3Q7CgogICAgIGdpbnQgY2hhcl9tZWFzdXJlKGdj
aGFyICAgICBjaGFyYWN0ZXIpIGNvbnN0OwoKICAgICBnaW50IHN0cmluZ19oZWlnaHQoY29uc3Qg
R3RrOjpzdHJpbmcgJnN0cikgY29uc3Q7CgogICAgIGdpbnQgdGV4dF9oZWlnaHQoY29uc3QgY2hh
ciogdGV4dCxpbnQgbGVuZ3RoKSBjb25zdDsKCiAgICAgZ2ludCBjaGFyX2hlaWdodChnY2hhciBj
aGFyYWN0ZXIpIGNvbnN0OwoKICAgICB2b2lkIHN0cmluZ19leHRlbnRzIChjb25zdCBHdGs6OnN0
cmluZyAmc3RyLAoJCQkgIGdpbnQgICAgICAgICZsYmVhcmluZywKCQkJICBnaW50ICAgICAgICAm
cmJlYXJpbmcsCgkJCSAgZ2ludCAgICAgICAgJndpZHRoLAoJCQkgIGdpbnQgICAgICAgICZhc2Nl
bnQsCgkJCSAgZ2ludCAgICAgICAgJmRlc2NlbnQpIGNvbnN0OwoKICAgICB2b2lkIHRleHRfZXh0
ZW50cyhjb25zdCBjaGFyICp0ZXh0LCAKICAgICAgICAgICAgICAgICAgICAgICBnaW50IGxlbmd0
aCwKICAgICAgICAgICAgICAgICAgICAgICBnaW50ICZsYmVhcmluZywKICAgICAgICAgICAgICAg
ICAgICAgICBnaW50ICZyYmVhcmluZywKICAgICAgICAgICAgICAgICAgICAgICBnaW50ICZ3aWR0
aCwKICAgICAgICAgICAgICAgICAgICAgICBnaW50ICZhc2NlbnQsCiAgICAgICAgICAgICAgICAg
ICAgICAgZ2ludCAmZGVzY2VudCkgY29uc3Q7CgogICAgICAKICAgICBnaW50IHRleHRfd2lkdGhf
d2MoY29uc3QgR2RrV0NoYXIqIHRleHQsZ2ludCB0ZXh0X2xlbmd0aCkgY29uc3Q7CgogICAgIGdp
bnQgY2hhcl93aWR0aF93YyhHZGtXQ2hhciBjaGFyYWN0ZXIpIGNvbnN0OwoKICAgICB2b2lkIHRl
eHRfZXh0ZW50c193YyggY29uc3QgR2RrV0NoYXIgKnRleHQsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICB0ZXh0
X2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgJmxiZWFy
aW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAmcmJlYXJpbmcs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICZ3aWR0aCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgJmFzY2VudCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgJmRlc2NlbnQpIGNvbnN0OwoKCiAgfTsKCgoj
IDMzICIvb3B0L2d0ay9pbmNsdWRlL2dkay0tL2djLmgiIDIKCgogCiAKIAogCiAKIAogCiAKIApj
bGFzcyBHZGtfR0MgOnB1YmxpYyBHZGtfSGFuZGxlPEdka0dDPgogIHsKICAgcHJvdGVjdGVkOgog
CiAgICAgIAogICAgIHZvaWQgcmVmKCk7CgogICAgICAKICAgICB2b2lkIHVucmVmKCk7CgogCgoK
CiAgIHB1YmxpYzoKCiAgICAgIAogICAgIEdka19HQygpOwoKICAgcHVibGljOgogICAgICAKICAg
ICBHZGtfR0MoR2RrR0MqIGdjKTsKCiAgICAgIAogICAgICAKICAgICBHZGtfR0MoY29uc3QgR2Rr
X0dDJiBnYyk7CiAgCiAgICAgIAogICAgICAKICAgICBHZGtfR0MoR2RrX0RyYXdhYmxlICZkcmF3
YWJsZSk7CgogICAgICAKICAgICB+R2RrX0dDKCk7CgogICAgICAKICAgICAgCiAgICAgIAogICAg
ICAKICAgICAgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgdm9pZCBjcmVhdGUoR2RrX0RyYXdh
YmxlIGNvbnN0ICZkcmF3YWJsZSk7CgogICAgIHZvaWQgcmVsZWFzZSgpOwogICAgIEdka19HQyYg
b3BlcmF0b3IgPSAoY29uc3QgR2RrX0dDJik7CgogICBwcml2YXRlOgogICAKICAgICAgCiAgICAg
IAogICAgICAKICAgICB2b2lkIGRlc3Ryb3koKTsKCiAgIHB1YmxpYzoKICAgIAoKICAgICAgCiAg
ICAgIAogICAgICAKICAgICAgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgdm9pZCBjb3B5KEdk
a19HQyAmc3JjKTsKCiAgICAgIAogICAgICAKICAgICB2b2lkIGdldF92YWx1ZXMoR2RrR0NWYWx1
ZXMgJnZhbHVlcyk7CgogICAgICAKICAgICB2b2lkIHNldF9mb3JlZ3JvdW5kKGNvbnN0IEdka19D
b2xvciYgYyk7CiAKICAgICAgCiAgICAgdm9pZCBzZXRfYmFja2dyb3VuZChjb25zdCBHZGtfQ29s
b3ImIGMpOwoKICAgICAgCiAgICAgdm9pZCBzZXRfZm9udChjb25zdCBHZGtfRm9udCYgZm9udCk7
CgkKICAgICAgCiAgICAgIAogICAgIEdka19Gb250IGdldF9mb250KCk7CiAKICAgICAgCiAgICAg
IAogICAgICAKICAgICAgCiAgICAgIAogICAgIHZvaWQgc2V0X2Z1bmN0aW9uKEdka0Z1bmN0aW9u
IGZ1bmMpOwoKICAgICAgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgIAogICAgICAKICAgICAg
CiAgICAgIAogICAgICAKICAgICAgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgIAogICAgIHZv
aWQgc2V0X2ZpbGwoR2RrRmlsbCBmaWxsKTsKCiAgICAgIAogICAgICAKICAgICAgCiAgICAgdm9p
ZCBzZXRfdGlsZShHZGtfUGl4bWFwICZ0aWxlKTsKCiAgICAgIAogICAgICAKICAgICAgCiAgICAg
IAogICAgIHZvaWQgc2V0X3N0aXBwbGUoR2RrX1BpeG1hcCAmc3RpcCk7CgogICAgICAKICAgICAg
CiAgICAgIAogICAgICAKICAgICAgCiAgICAgdm9pZCBzZXRfdHNfb3JpZ2luKGdpbnQgeCwgZ2lu
dCB5KTsKCiAgICAgIAogICAgIHZvaWQgc2V0X2NsaXBfb3JpZ2luKGdpbnQgeCwgZ2ludCB5KTsK
CiAgICAgIAogICAgICAKICAgICB2b2lkIHNldF9jbGlwX21hc2soR2RrX0JpdG1hcCAmbWFzayk7
CgogICAgICAKICAgICB2b2lkIHNldF9jbGlwX21hc2soKSA7CgogICAgICAKICAgICB2b2lkIHNl
dF9ub2NsaXAoKSA7CgogICAgICAKICAgICAgCiAgICAgIAogICAgIHZvaWQgICBzZXRfY2xpcF9y
ZWN0YW5nbGUgIChjb25zdCBHZGtfUmVjdGFuZ2xlICZyZWN0KTsKCiAgICAgIAogICAgICAKICAg
ICAgCiAgICAgdm9pZCBzZXRfY2xpcF9yZWN0YW5nbGUoZ2ludCB4LCBnaW50IHksIGdpbnQgdywg
Z2ludCBoKTsKCiAgICAgIAogICAgIHZvaWQgc2V0X2NsaXBfcmVnaW9uKEdka19SZWdpb24gJnJl
Z2lvbik7CiAgICAgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgdm9pZCBzZXRfc3Vid2luZG93
KEdka1N1YndpbmRvd01vZGUgbW9kZSk7CgogICAgICAKICAgICAgCiAgICAgIAogICAgICAKICAg
ICAgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgdm9pZCBzZXRfZXhwb3N1cmVzKGJvb2wgZXhw
KTsKCiAgICAgIAogICAgICAKICAgICAgCiAgICAgIAogICAgIHZvaWQgc2V0X2xpbmVfYXR0cmli
dXRlcyhnaW50IGxpbmVfd2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdka0xp
bmVTdHlsZSBsaW5lX3N0eWxlPUdES19MSU5FX1NPTElELAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHZGtDYXBTdHlsZSBjYXBfc3R5bGU9R0RLX0NBUF9CVVRULAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHZGtKb2luU3R5bGUgam9pbl9zdHlsZT1HREtfSk9JTl9NSVRFUik7
CgoKICAgICAKICAgICAKICAgICAKCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAKICAg
ICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAogICAg
ICB2b2lkIHNldF9saW5lX3dpZHRoKGdpbnQgbGluZV93aWR0aCk7CiAKICAgICAgIAogICAgICAg
CiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAK
ICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAog
ICAgICAgCiAgICAgIHZvaWQgc2V0X2xpbmVfc3R5bGUoR2RrTGluZVN0eWxlIGxpbmVfc3R5bGUp
OwoKICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAg
IAogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAg
CiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICB2b2lkIHNldF9j
YXBfc3R5bGUoR2RrQ2FwU3R5bGUgY2FwX3N0eWxlKTsKCiAgICAgICAKICAgICAgIAogICAgICAg
CiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAK
ICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAog
ICAgICAgCiAgICAgIHZvaWQgc2V0X2pvaW5fc3R5bGUoR2RrSm9pblN0eWxlIGpvaW5fc3R5bGUp
OwoKCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgIHZvaWQgc2V0X2Rhc2hlcyhnaW50IHNp
emUpOwogICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgIHZvaWQgc2V0
X2Rhc2hlcyhnaW50IG9uLCBnaW50IG9mZik7CiAgICAgICAgIAogCiAgICAgICAKICAgICAgIAog
ICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAgCiAg
ICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAKICAg
ICAgIAogICAgICAgCiAgICAgIHZvaWQgc2V0X2Rhc2hlcyhnaW50IGRhc2hfb2Zmc2V0LAogICAg
ICAgICAgICAgICAgICAgICAgZ2ludDggZGFzaF9saXN0W10sIAogICAgICAgICAgICAgICAgICAg
ICAgZ2ludCBkYXNoX2xpc3RfbGVuZ3RoKTsKCgogIH07CgoKIyAzMiAiL29wdC9ndGsvaW5jbHVk
ZS9nZGstLS5oIiAyCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ2RrLS0vZHJhd2FibGUuaCIgMQog
CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpuYW1lc3BhY2UgR3RrCnsKICB1c2luZyBzdGQ6
OnN0cmluZyA7ICAKfQoKIAogCiAKIAogCiAKIAogCiAKIApjbGFzcyBHZGtfRHJhd2FibGU6IHB1
YmxpYyBHZGtfSGFuZGxlPEdka0RyYXdhYmxlPgogIHtwcm90ZWN0ZWQ6CgogICAgIHZpcnR1YWwg
dm9pZCByZWYoKT0wOwogICAgIHZpcnR1YWwgdm9pZCB1bnJlZigpPTA7CgogICAgIEdka19EcmF3
YWJsZSAoKTsKCiAgIHB1YmxpYzoKICAgICBHZGtfRHJhd2FibGUgKEdka0RyYXdhYmxlICpkcmF3
YWJsZSk7CiAgICAgR2RrX0RyYXdhYmxlIChjb25zdCBHZGtfRHJhd2FibGUgJmRyYXdhYmxlKTsK
CiAgICAgIAogICAgIHZpcnR1YWwgfkdka19EcmF3YWJsZSAoKTsKCiAgICAgdm9pZCByZWxlYXNl
KCk7CiAgICAgR2RrX0RyYXdhYmxlJiBvcGVyYXRvciA9IChjb25zdCBHZGtfRHJhd2FibGUmKTsK
CiAgICAgIAogICAgIAogICAgICAKICAgICB2b2lkIGRyYXdfcG9pbnQgICAgIChjb25zdCBHZGtf
R0MgJmdjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgIHgxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgeTEpOwoKICAgICAgCiAgICAgdm9p
ZCBkcmF3X2xpbmUgICAgICAoY29uc3QgR2RrX0dDICZnYywgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2ludCAgICAgICAgICB4MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAg
ICAgICAgIHkxLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgeDIsIAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgeTIpOwoKICAgICAgCiAgICAg
IAogICAgIHZvaWQgZHJhd19yZWN0YW5nbGUgKGNvbnN0IEdka19HQyAmZ2MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICBmaWxsZWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2ludCAgICAgICAgICB4LAogICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAg
ICAgICAgeSwKICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgIHdpZHRoLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgaGVpZ2h0KTsKICAKICAgICAg
CiAgICAgdm9pZCBkcmF3X2FyYyAgICAgICAoY29uc3QgR2RrX0dDICZnYywKICAgICAgICAgICAg
ICAgICAgICAgICAgICBnaW50ICAgICAgICAgIGZpbGxlZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBnaW50ICAgICAgICAgIHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAg
ICAgICB5LAogICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgd2lkdGgsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICBoZWlnaHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICBhbmdsZTEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2ludCAgICAgICAgICBhbmdsZTIpOwoKICAgICAgCiAgICAgdm9pZCBkcmF3X3BvbHln
b24gICAoY29uc3QgR2RrX0dDICZnYywKICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAg
ICAgICAgIGZpbGxlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHZGtfUG9pbnRz
ICAgJnBvaW50cyk7CiAgICAKCiAgICAgIAogICAgIHZvaWQgZHJhd19wb2x5Z29uICAgIChjb25z
dCBHZGtfR0MgJmdjLAoJCQkgICBnaW50ICAgICAgICBmaWxsZWQsCgkJCSAgIEdka1BvaW50ICAg
ICpwb2ludHMsCgkJCSAgIGdpbnQgICAgICAgICAgbnBvaW50cyk7CiAgICAKCiAgICAgIAogICAg
ICAKICAgICB2b2lkIGRyYXdfc3RyaW5nICAgIChjb25zdCBHZGtfRm9udCAmZm9udCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBHZGtfR0MgICAmZ2MsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2ludCAgICAgICAgICB4LAogICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQg
ICAgICAgICAgeSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHdGs6OnN0cmluZyAm
c3RyKTsKIAogICAgICAKICAgICAgCiAgICAgdm9pZCBkcmF3X3RleHQgICAgICAoY29uc3QgR2Rr
X0ZvbnQgJmZvbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2RrX0dDICAgJmdj
LAogICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgeCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBnaW50ICAgICAgICAgIHksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogICB0ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAg
ICAgdGV4dF9sZW5ndGgpOwoKICAgICAgCiAgICAgdm9pZCBkcmF3X3BpeG1hcCAgICAgKGNvbnN0
IEdka19HQyAgICAgICAmZ2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdka19E
cmF3YWJsZSAmc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgIHhz
cmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgeXNyYywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICB4ZGVzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2ludCAgICAgICAgICB5ZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2ludCAgICAgICAgICB3aWR0aCA9IC0xLAogICAgICAgICAgICAgICAgICAgICAgICAgICBn
aW50ICAgICAgICAgIGhlaWdodCA9IC0xKTsKCiAgICAgIAogICAgIHZvaWQgZHJhd19iaXRtYXAg
ICAgKGNvbnN0IEdka19HQyAgICAgJmdjLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEdka19CaXRtYXAgJnNyYywKICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAg
IHhzcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICB5c3JjLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgeGRlc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2ludCAgICAgICAgICB5ZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBnaW50ICAgICAgICAgIHdpZHRoID0gLTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2lu
dCAgICAgICAgICBoZWlnaHQgPSAtMSk7CgogICAgICAKICAgICB2b2lkIGRyYXdfaW1hZ2UgICAg
IChjb25zdCBHZGtfR0MgICAgJmdjLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdk
a19JbWFnZSAmaW1hZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICB4
c3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgeXNyYywKICAgICAg
ICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgIHhkZXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgIGdpbnQgICAgICAgICAgeWRlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2ludCAgICAgICAgICB3aWR0aCA9IC0xLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQg
ICAgICAgICAgaGVpZ2h0ID0gLTEpOwoKCiAgICAgIAogICAgICAKICAgICB2b2lkIGRyYXdfcG9p
bnRzICAgIChjb25zdCBHZGtfR0MgICAgICAgICZnYywKICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBHZGtfUG9pbnRzICAgJnBvaW50cyk7CgogICAgICAKICAgICAgCiAgICAgdm9pZCBk
cmF3X3BvaW50cyAgICAoY29uc3QgR2RrX0dDICAgICAgICAmZ2MsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgR2RrUG9pbnQgICAgKnBvaW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICBn
aW50ICAgICAgICAgIG5wb2ludHMpOwoKICAgICB2b2lkIGRyYXdfc2VnbWVudHMgIChjb25zdCBH
ZGtfR0MgICAgICAgJmdjLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdka19TZWdt
ZW50cyAmc2VncywKICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgIG5zZWdz
KTsKCiAgICAgdm9pZCBkcmF3X3NlZ21lbnRzICAoY29uc3QgR2RrX0dDICAgICAgICZnYywKICAg
ICAgICAgICAgICAgICAgICAgICAgICBHZGtTZWdtZW50ICAqc2VncywKICAgICAgICAgICAgICAg
ICAgICAgICAgICBnaW50ICAgICAgICAgICAgICAgbnNlZ3MpOwoKICAgICAgCiAgICAgIAogICAg
IHZvaWQgZHJhd19saW5lcyAgICAgKGNvbnN0IEdka19HQyAgICAgICAgJmdjLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEdka19Qb2ludHMgICAmcG9pbnRzKTsKCiAgICAgIAogICAg
ICAKICAgICB2b2lkIGRyYXdfbGluZXMgICAgIChjb25zdCBHZGtfR0MgICAgICAgICZnYywKICAg
ICAgICAgICAgICAgICAgICAgICAgICBHZGtQb2ludCAgICAgKnBvaW50cywKICAgICAgICAgICAg
ICAgICAgICAgICAgICBnaW50ICAgICAgICAgIG5wb2ludHMpOwoKCiAgICAgdm9pZCBkcmF3X3Rl
eHRfd2MgICAoY29uc3QgR2RrX0ZvbnQgICAgICAmZm9udCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBHZGtfR0MgICAgICAgICZnYywKICAgICAgICAgICAgICAgICAgICAgICAgICBn
aW50ICAgICAgICAgIHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICB5
LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdka1dDaGFyICp0ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgdGV4dF9sZW5ndGgpOwoKIAogICAgIHZv
aWQgY29weV9hcmVhKGNvbnN0IEdka19HQyAmZ2MsCiAgICAgICAgICAgICAgICAgICAgZ2ludCAg
IHgsCiAgICAgICAgICAgICAgICAgICAgZ2ludCAgIHksCiAgICAgICAgICAgICAgICAgICAgY29u
c3QgR2RrX0RyYXdhYmxlJiBzcmMsCiAgICAgICAgICAgICAgICAgICAgZ2ludCAgIHNyY194LAog
ICAgICAgICAgICAgICAgICAgIGdpbnQgICBzcmNfeSwKICAgICAgICAgICAgICAgICAgICBnaW50
ICAgd2lkdGgsCiAgICAgICAgICAgICAgICAgICAgZ2ludCAgIGhlaWdodCk7CgogICAgICAKICAg
ICB2b2lkIHNldF91c2VyX2RhdGEoZ3BvaW50ZXIgZGF0YSk7CiAgICAgZ3BvaW50ZXIgZ2V0X3Vz
ZXJfZGF0YSgpOwoKCgoKCgogICAgIHZvaWQgZ2V0X3NpemUoZ2ludCAmd2lkdGgsZ2ludCAmaGVp
Z2h0KTsKICAgICB2b2lkIGdldF9wb3NpdGlvbihnaW50ICZ4LGdpbnQgJnkpOwogICAgIEdka19W
aXN1YWwgZ2V0X3Zpc3VhbCgpOwogICAgIEdka1dpbmRvd1R5cGUgZ2V0X3R5cGUoKTsKCiAKICAg
ICBnaW50IHdpZHRoKCk7CiAgICAgZ2ludCBoZWlnaHQoKTsKICAgICBnaW50IHgoKTsKICAgICBn
aW50IHkoKTsKCiAgfTsKCgojIDMzICIvb3B0L2d0ay9pbmNsdWRlL2dkay0tLmgiIDIKCiMgMSAi
L29wdC9ndGsvaW5jbHVkZS9nZGstLS93aW5kb3cuaCIgMQogCgogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKIAogCgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2dkay0tL2xpc3QuaCIgMQoKCgojIDE1
MCAiL29wdC9ndGsvaW5jbHVkZS9nZGstLS9saXN0LmgiCgoKCiMgMzEgIi9vcHQvZ3RrL2luY2x1
ZGUvZ2RrLS0vd2luZG93LmgiIDIKCgpuYW1lc3BhY2UgR3RrCnsKICB1c2luZyBzdGQ6OnN0cmlu
ZyA7ICAKfQoKIAogCiAKY2xhc3MgR2RrX1dpbmRvdzpwdWJsaWMgR2RrX0RyYXdhYmxlCiAgewog
ICBwdWJsaWM6CgoKCgogICBwcm90ZWN0ZWQ6CiAgICAgIAogICAgIHZvaWQgZGVzdHJveSgpOwoK
ICAgICAgCiAgICAgdmlydHVhbCB2b2lkIHJlZigpOwoKICAgICAgCiAgICAgIAogICAgICAKICAg
ICB2aXJ0dWFsIHZvaWQgIHVucmVmKCk7CgogCgoKCiAgIHB1YmxpYzoKCiAgICAgIAogICAgIEdk
a19XaW5kb3coKTsKICAgcHVibGljOgoKICAgICAgCiAgICAgR2RrX1dpbmRvdyhHZGtXaW5kb3cg
Kndpbik7CgogICAgICAKICAgICBHZGtfV2luZG93KGNvbnN0IEdka19XaW5kb3cmIHdpbik7Cgog
ICAgICAKICAgICBHZGtfV2luZG93KGNvbnN0IEdka19XaW5kb3cgICAgICZwYXJlbnQsCiAgICAg
ICAgICAgICAgICBjb25zdCBHZGtfV2luZG93QXR0ciAgJmF0dHJpYnV0ZXMsCiAgICAgICAgICAg
ICAgICBnaW50ICAgICAgICAgICAgYXR0cmlidXRlc19tYXNrKTsKCiAgICAgIAogICAgIEdka19X
aW5kb3coY29uc3QgR2RrX1dpbmRvd0F0dHIgICZhdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAg
Z2ludCAgICAgICAgICAgIGF0dHJpYnV0ZXNfbWFzayk7CgogICAgICAKICAgICB2aXJ0dWFsIH5H
ZGtfV2luZG93KCk7CgogICAgICAKCiAgICAgIAogICAgIHZvaWQgY3JlYXRlKGNvbnN0IEdka19X
aW5kb3cgICAgICZwYXJlbnQsCiAgICAgICAgICAgICAgICBjb25zdCBHZGtfV2luZG93QXR0ciAg
JmF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAgYXR0cmlidXRlc19t
YXNrKTsKCiAgICAgR2RrX1dpbmRvdyYgb3BlcmF0b3IgPSAoY29uc3QgR2RrX1dpbmRvdyYpOwoK
ICAgICAgCgogICAgIHZvaWQgc2hvdygpOwogICAgIHZvaWQgaGlkZSgpOwogICAgIHZvaWQgd2l0
aGRyYXcoKTsKICAgICB2b2lkIG1vdmUoZ2ludCB4LCBnaW50IHkpOwogICAgIHZvaWQgcmVzaXpl
KGdpbnQgd2lkdGgsZ2ludCBoZWlnaHQpOwogICAgIHZvaWQgbW92ZV9yZXNpemUgICAgIChnaW50
ICAgICAgICAgIHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgeSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICB3aWR0aCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICBoZWlnaHQpOwogICAgIHZvaWQgcmVwYXJl
bnQgICAgICAgIChHZGtfV2luZG93ICAgJm5ld19wYXJlbnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdpbnQgICAgICAgICAgeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAg
ICAgICAgICB5KTsKICAgICB2b2lkIGNsZWFyKCk7CiAgICAgdm9pZCBjbGVhcl9hcmVhICAgICAg
KGdpbnQgICAgICAgICAgeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAg
ICB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgIHdpZHRoLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgIGhlaWdodCk7CiAgICAgdm9pZCBj
bGVhcl9hcmVhX2UgICAgKGdpbnQgICAgICAgICAgeCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2ludCAgICAgICAgICB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAg
ICAgIHdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgIGhlaWdo
dCk7CgogICAgICAKICAgICB2b2lkIGNvcHlfYXJlYSAgICAgICAoR2RrX0dDICAgICAgICZnYywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICB4LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBnaW50ICAgICAgICAgIHksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdka19XaW5kb3cgICAmc291cmNlX3dpbmRvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2ludCAgICAgICAgICBzb3VyY2VfeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAg
ICAgICAgICBzb3VyY2VfeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAg
ICB3aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICBoZWlnaHQp
OwoKICAgICB2b2lkIHJhaXNlKCk7CiAgICAgdm9pZCBsb3dlcigpOwoKICAgICAgCiAgICAgdm9p
ZCBzZXRfdXNlcl9kYXRhICAgKGdwb2ludGVyICAgICAgICAgdXNlcl9kYXRhKTsKCiAgICAgdm9p
ZCBzZXRfb3ZlcnJpZGVfcmVkaXJlY3QoYm9vbCBvdmVycmlkZV9yZWRpcmVjdCk7CgogICAgICAK
ICAgICB2b2lkIGFkZF9maWx0ZXIgICAgICAoR2RrRmlsdGVyRnVuYyAgZnVuY3Rpb24sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgIGRhdGEpOwogICAgIHZvaWQgcmVt
b3ZlX2ZpbHRlciAgIChHZGtGaWx0ZXJGdW5jICBmdW5jdGlvbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ3BvaW50ZXIgICAgICAgZGF0YSk7CiAgICAgdm9pZCBzZXRfaGludHMgICAgICAg
KGdpbnQgICAgICAgICAgICAgeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAg
ICAgICAgICB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAgIG1p
bl93aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICBtaW5f
aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAgIG1heF93
aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICBtYXhfaGVp
Z2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAgIGZsYWdzKTsK
ICAgICB2b2lkIHNldF90aXRsZSAgICAgICAoY29uc3QgR3RrOjpzdHJpbmcgJnRpdGxlKTsKICAg
ICB2b2lkIHNldF9iYWNrZ3JvdW5kICAoY29uc3QgR2RrX0NvbG9yICAgICAgICZjb2xvcik7CiAg
ICAgdm9pZCBzZXRfYmFja19waXhtYXAgKEdka19QaXhtYXAgICAgICAmcGl4bWFwLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAgIHBhcmVudF9yZWxhdGl2ZSk7Cgog
ICAgIHZvaWQgc2V0X2N1cnNvciAgICAgIChjb25zdCBHZGtfQ3Vyc29yICAgJmN1cnNvcik7CiAg
ICAgdm9pZCBzZXRfY29sb3JtYXAgICAgKGNvbnN0IEdka19Db2xvcm1hcCAmY29sb3JtYXApOwoK
ICAgICAgCiAgICAgdm9pZCBnZXRfdXNlcl9kYXRhICAgKGdwb2ludGVyICAgICAgICAqZGF0YSk7
CgogICAgIHZvaWQgZ2V0X2dlb21ldHJ5ICAgIChnaW50ICAgICAgICAgICAgJngsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICAmeSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2ludCAgICAgICAgICAgICZ3aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2ludCAgICAgICAgICAgICZoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdp
bnQgICAgICAgICAgICAmZGVwdGgpOwogICAgIGdpbnQgZ2V0X2RlcHRoICAgICAgICgpOwoKICAg
ICAgCiAgICAgdm9pZCBnZXRfcG9zaXRpb24gICAgKGdpbnQgICAgICAgICAgICAmeCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICZ5KTsKIAogICAgICAKICAgICB2
b2lkIGdldF9zaXplICAgICAgICAoZ2ludCAgICAgICAgICAgICZ3aWR0aCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICZoZWlnaHQpOwoKICAgICAgCiAgICAgR2Rr
X1Zpc3VhbCAgICBnZXRfdmlzdWFsKCk7CgogICAgIEdka19Db2xvcm1hcCAgZ2V0X2NvbG9ybWFw
KCk7CgogICAgICAKICAgICBHZGtXaW5kb3dUeXBlIGdldF90eXBlKCk7CgogICAgIGdpbnQgZ2V0
X29yaWdpbiAgICAgIChnaW50ICAgICAgICAgICAgJngsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdpbnQgICAgICAgICAgICAmeSk7CgogICAgICAKICAgICBnaW50IGdldF9kZXNrcmVsYXRp
dmVfb3JpZ2luICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGdpbnQgICAgICAgICAg
ICAmeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICZ5KTsKCiAg
ICAgIAogICAgIHZvaWQgZ2V0X3Jvb3Rfb3JpZ2luIChnaW50ICAgICAgICAgICAgJngsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICAmeSk7CgogICAgIEdka19XaW5k
b3cgZ2V0X3BvaW50ZXIoZ2ludCAgICAgICAgICAgICZ4LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBnaW50ICAgICAgICAgICAgJnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdka01v
ZGlmaWVyVHlwZSAmbWFzayk7CiAgICAgR2RrX1dpbmRvdyBnZXRfcGFyZW50KCk7CiAgICAgR2Rr
X1dpbmRvdyBnZXRfdG9wbGV2ZWwoKTsKCgoKCgoKICAgICBHZGtFdmVudE1hc2sgIGdldF9ldmVu
dHMoKTsKICAgICB2b2lkIHNldF9ldmVudHMgICAgICAoR2RrRXZlbnRNYXNrICAgICBldmVudF9t
YXNrKTsKICAgICB2b2lkIHNldF9pY29uICAgICAgICAoR2RrX1dpbmRvdyAgICAgICAmaWNvbl93
aW5kb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdka19QaXhtYXAgICAgICAgJnBpeG1h
cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgR2RrX0JpdG1hcCAgICAgICAmbWFzayk7CiAg
ICAgdm9pZCBzZXRfaWNvbl9uYW1lICAgKGNvbnN0IEd0azo6c3RyaW5nICAgICAmbmFtZSk7CiAg
ICAgdm9pZCBzZXRfZ3JvdXAgICAgICAgKEdka19XaW5kb3cgICAgICAmbGVhZGVyKTsKICAgICB2
b2lkIHNldF9kZWNvcmF0aW9ucyAoR2RrV01EZWNvcmF0aW9uICBkZWNvcmF0aW9ucyk7CiAgICAg
dm9pZCBzZXRfZnVuY3Rpb25zICAgKEdka1dNRnVuY3Rpb24gICAgZnVuY3Rpb25zKTsKCiAgICAg
IAoKCgoKCiAgICAgIAogICAgIHZvaWQgc2V0X2dlb21ldHJ5X2hpbnRzKEdka19HZW9tZXRyeSAm
Z2VvbWV0cnksR2RrV2luZG93SGludHMgZmxhZ3MpOwoKICAgICAgCiAgICAgdm9pZCBzZXRfcm9s
ZShjb25zdCBHdGs6OnN0cmluZyYgcm9sZSk7CgogICAgICAKICAgICB2b2lkIHNldF90cmFuc2ll
bnRfZm9yKEdka19XaW5kb3cgJmxlYWRlcik7CgoKICB9OwoKCiMgMzQgIi9vcHQvZ3RrL2luY2x1
ZGUvZ2RrLS0uaCIgMgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2dkay0tL3BpeG1hcC5oIiAxCiAK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKbmFtZXNwYWNlIEd0awp7CiAgdXNpbmcgc3RkOjpz
dHJpbmcgOyAgCn0KCiAKIAogCiAKIAogCiAKIAogCiAKY2xhc3MgR2RrX1BpeG1hcDpwdWJsaWMg
R2RrX0RyYXdhYmxlCnsKICAgCiAgdmlydHVhbCB2b2lkIHJlZigpOwogIHZpcnR1YWwgdm9pZCB1
bnJlZigpOwoKCgoKcHVibGljOgoKICAgCiAgR2RrX1BpeG1hcCgpOwoKcHVibGljOgoKICAgICAg
CiAgR2RrX1BpeG1hcChHZGtQaXhtYXAgKnBpeG1hcCk7CgogICAKICBHZGtfUGl4bWFwKEdka19Q
aXhtYXAgY29uc3QgJnBpeG1hcCk7CgogICAKICBHZGtfUGl4bWFwKGNvbnN0IEdka19EcmF3YWJs
ZSAgJmRyYXdhYmxlLAoJICAgICBnaW50ICAgICAgICB3aWR0aCwgCgkgICAgIGdpbnQgICAgICAg
IGhlaWdodCwKCSAgICAgZ2ludCAgICAgICAgZGVwdGg9LTEpOwoKICAgCiAgR2RrX1BpeG1hcChn
aW50ICAgICAgICB3aWR0aCwgCgkgICAgIGdpbnQgICAgICAgIGhlaWdodCwKCSAgICAgZ2ludCAg
ICAgICAgZGVwdGg9LTEpOwoKICAgCiAgR2RrX1BpeG1hcChjb25zdCBHZGtfRHJhd2FibGUgICZk
cmF3YWJsZSwKCSAgICAgY29uc3QgZ2NoYXIgICAgICAqZGF0YSwKCSAgICAgZ2ludCAgICAgICAg
d2lkdGgsCgkgICAgIGdpbnQgICAgICAgIGhlaWdodCwKCSAgICAgZ2ludCAgICAgICAgZGVwdGgs
CgkgICAgIGNvbnN0IEdka19Db2xvciAgJmZnLAoJICAgICBjb25zdCBHZGtfQ29sb3IgICZiZyk7
CgogICAKICBHZGtfUGl4bWFwKGNvbnN0IEdka19EcmF3YWJsZSAgJmRyYXdhYmxlLAoJICAgICBj
b25zdCBHZGtfQ29sb3IgICAmdHJhbnNwYXJlbnRfY29sb3IsCgkgICAgIGNvbnN0IEd0azo6c3Ry
aW5nICAgICAgJmZpbGVuYW1lKTsKIAogICAKICBHZGtfUGl4bWFwKGNvbnN0IEdka19EcmF3YWJs
ZSAgJmRyYXdhYmxlLAoJICAgICBHZGtfQml0bWFwICAmYml0bWFwLAoJICAgICBjb25zdCBHZGtf
Q29sb3IgICAmdHJhbnNwYXJlbnRfY29sb3IsCgkgICAgIGNvbnN0IEd0azo6c3RyaW5nICAgICAg
JmZpbGVuYW1lKTsKICAgICAKICAgCiAgR2RrX1BpeG1hcChjb25zdCBHZGtfRHJhd2FibGUgICAm
ZHJhd2FibGUsCgkgICAgIEdka19Db2xvcm1hcCAmY29sb3JtYXAsCgkgICAgIEdka19CaXRtYXAg
ICAmYml0bWFwLAoJICAgICBjb25zdCBHZGtfQ29sb3IgICAgJnRyYW5zcGFyZW50X2NvbG9yLAoJ
ICAgICBjb25zdCBHdGs6OnN0cmluZyAmZmlsZW5hbWUpOwoKICAgCiAgdmlydHVhbCB+R2RrX1Bp
eG1hcCgpOwoKICBHZGtfUGl4bWFwJiBvcGVyYXRvciA9IChjb25zdCBHZGtfUGl4bWFwJik7CgoK
ICAgCiAgIAogICAKICB2b2lkIGNyZWF0ZShjb25zdCBHZGtfRHJhd2FibGUgICZkcmF3YWJsZSwK
CSAgICAgIGdpbnQgICAgICAgIHdpZHRoLAoJICAgICAgZ2ludCAgICAgICAgaGVpZ2h0LAoJICAg
ICAgZ2ludCAgICAgICAgZGVwdGg9LTEpOwogICAgCiAgIAogICAKICB2b2lkIGNyZWF0ZShnaW50
ICAgICAgIHdpZHRoLAoJICAgICAgZ2ludCAgICAgICBoZWlnaHQsCgkgICAgICBnaW50ICAgICAg
IGRlcHRoPS0xKTsKCiAgIAogIHZvaWQgY3JlYXRlX2Zyb21fZGF0YSgKCQkJY29uc3QgR2RrX0Ry
YXdhYmxlICAmZHJhd2FibGUsCgkJCWNvbnN0IGdjaGFyICpkYXRhLAoJCQlnaW50ICAgICAgICB3
aWR0aCwKCQkJZ2ludCAgICAgICAgaGVpZ2h0LAoJCQlnaW50ICAgICAgICBkZXB0aCwKCQkJY29u
c3QgR2RrX0NvbG9yICAgJmZnLAoJCQljb25zdCBHZGtfQ29sb3IgICAmYmcpOwoKICAgCiAgdm9p
ZCBjcmVhdGVfZnJvbV94cG0oCgkJICAgICAgIGNvbnN0IEdka19EcmF3YWJsZSAgJmRyYXdhYmxl
LAoJCSAgICAgICBjb25zdCBHZGtfQ29sb3IgICAmdHJhbnNwYXJlbnRfY29sb3IsCgkJICAgICAg
IGNvbnN0IEd0azo6c3RyaW5nICAgICAgJmZpbGVuYW1lKTsKCiAgIAogIHZvaWQgY3JlYXRlX2Zy
b21feHBtKAoJCSAgICAgICBjb25zdCBHZGtfRHJhd2FibGUgICZkcmF3YWJsZSwKCQkgICAgICAg
R2RrX0JpdG1hcCAgJm1hc2ssCgkJICAgICAgIGNvbnN0IEdka19Db2xvciAgICZ0cmFuc3BhcmVu
dF9jb2xvciwKCQkgICAgICAgY29uc3QgR3RrOjpzdHJpbmcgICAgICAmZmlsZW5hbWUpOwogICAg
CiAgIAogIHZvaWQgY3JlYXRlX2NvbG9ybWFwX2Zyb21feHBtKAoJCQkJY29uc3QgR2RrX0RyYXdh
YmxlICAgJmRyYXdhYmxlLAoJCQkJR2RrX0NvbG9ybWFwICZjb2xvcm1hcCwKCQkJCUdka19CaXRt
YXAgICAmYml0bWFwLAoJCQkJY29uc3QgR2RrX0NvbG9yICAgICZ0cmFuc3BhcmVudF9jb2xvciwK
CQkJCWNvbnN0IEd0azo6c3RyaW5nICZmaWxlbmFtZSk7CiAgICAgCiAgdm9pZCBjcmVhdGVfZnJv
bV94cG1fZChjb25zdCBHZGtfRHJhd2FibGUgJmRyYXdhYmxlLCAKCQkJIEdka19CaXRtYXAgICAg
ICAgJmJpdG1hcCwKCQkJIGNvbnN0IEdka19Db2xvciAgJnRyYW5zcGFyZW50X2NvbG9yLAoJCQkg
Y29uc3QgZ2NoYXIgKiBjb25zdCAqZGF0YSk7CiAgICAgCiAgdm9pZCBjcmVhdGVfY29sb3JtYXBf
ZnJvbV94cG1fZCAoY29uc3QgR2RrX0RyYXdhYmxlICAgJmRyYXdhYmxlLAoJCQkJICAgR2RrX0Nv
bG9ybWFwICZjb2xvcm1hcCwKCQkJCSAgIEdka19CaXRtYXAgICZtYXNrLAoJCQkJICAgY29uc3Qg
R2RrX0NvbG9yICAgICZ0cmFuc3BhcmVudF9jb2xvciwKCQkJCSAgIGNvbnN0IGdjaGFyICogY29u
c3QgKmRhdGEpOwoKICBzdGF0aWMgdm9pZCB3YXJuX2Fib3V0X3hwbV9maWxlX3Byb2JsZW0oY29u
c3QgR3RrOjpzdHJpbmcgJmZpbGVuYW1lKTsKCiAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0KiBk
ZWZhdWx0UGl4bWFwOwogIAp9OwoKCiMgMzUgIi9vcHQvZ3RrL2luY2x1ZGUvZ2RrLS0uaCIgMgoK
IyAxICIvb3B0L2d0ay9pbmNsdWRlL2dkay0tL2JpdG1hcC5oIiAxCiAKCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIAogCmNsYXNzIEdka19CaXRtYXA6cHVibGljIEdka19EcmF3YWJsZQogIHsK
ICAgcHJvdGVjdGVkOgogICAgICAKICAgICB2aXJ0dWFsIHZvaWQgcmVmKCk7CiAgICAgdmlydHVh
bCB2b2lkIHVucmVmKCk7CgogCgoKCiAgIHB1YmxpYzoKCiAgICAgIAogICAgIEdka19CaXRtYXAo
KTsKCiAgIHB1YmxpYzoKICAgICAgCiAgICAgR2RrX0JpdG1hcChHZGtCaXRtYXAgKmJpdG1hcCk7
CgogICAgICAKICAgICBHZGtfQml0bWFwKGNvbnN0IEdka19CaXRtYXAmIGJpdG1hcCk7CiAgICAK
ICAgICAgCiAgICAgR2RrX0JpdG1hcChHZGtfV2luZG93ICAmd2luZG93LAogICAgICAgICAgICAg
ICAgZ2NoYXIgICAgICAqZGF0YSwKICAgICAgICAgICAgICAgIGdpbnQgICAgICAgIHdpZHRoLAog
ICAgICAgICAgICAgICAgZ2ludCAgICAgICAgaGVpZ2h0KTsKICAgICAgCiAgICAgR2RrX0JpdG1h
cChjb25zdCBHZGtfRHJhd2FibGUgICZ3aW5kb3csCiAgICAgICAgICAgICAgICBnY2hhciAgICAg
ICpkYXRhLAogICAgICAgICAgICAgICAgZ2ludCAgICAgICAgd2lkdGgsCiAgICAgICAgICAgICAg
ICBnaW50ICAgICAgICBoZWlnaHQpOwoKICAgICAgCiAgICAgfkdka19CaXRtYXAoKTsKCiAgICAg
IAogICAgIHZvaWQgY3JlYXRlKEdka19XaW5kb3cgICZ3aW5kb3csCiAgICAgICAgICAgICAgICBj
b25zdCBnY2hhciAqZGF0YSwKICAgICAgICAgICAgICAgIGdpbnQgICAgICAgIHdpZHRoLAogICAg
ICAgICAgICAgICAgZ2ludCAgICAgICAgaGVpZ2h0KTsKCiAgICAgIAogICAgIHZvaWQgY3JlYXRl
KGNvbnN0IEdka19EcmF3YWJsZSAgJndpbmRvdywKICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFy
ICpkYXRhLAogICAgICAgICAgICAgICAgZ2ludCAgICAgICAgd2lkdGgsCiAgICAgICAgICAgICAg
ICBnaW50ICAgICAgICBoZWlnaHQpOwoKICAgICBHZGtfQml0bWFwJiBvcGVyYXRvciA9IChjb25z
dCBHZGtfQml0bWFwJik7CgogIH07CgoKCiMgMzYgIi9vcHQvZ3RrL2luY2x1ZGUvZ2RrLS0uaCIg
MgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2dkay0tL2ltYWdlLmgiIDEKIAoKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKY2xhc3MgR2RrX0ltYWdlIDog
cHVibGljIEdka19IYW5kbGU8R2RrSW1hZ2U+CiAgewogICBwcml2YXRlOgogICAgIHZvaWQgZGVz
dHJveSgpOwogICAgIHZvaWQgcmVmKCk7CiAgICAgdm9pZCB1bnJlZigpOwoKICAgICBHZGtfSW1h
Z2UmIG9wZXJhdG9yID0gKGNvbnN0IEdka19JbWFnZSYgaW1hZ2UpOwoKICAgcHVibGljOiAKICAg
ICAgCiAgICAgR2RrX0ltYWdlKCk7CgogICAgICAKICAgICBHZGtfSW1hZ2UoR2RrSW1hZ2UqIGlt
YWdlKTsKCiAgICAgIAogICAgICAKIAogICAgICAKICAgICBHZGtfSW1hZ2UoR2RrSW1hZ2VUeXBl
IHR5cGUsCiAgICAgICAgICAgICAgIEdka19WaXN1YWwgICAgICZ2aXN1YWwsCiAgICAgICAgICAg
ICAgIGdpbnQgICAgICAgICAgIHdpZHRoLAogICAgICAgICAgICAgICBnaW50ICAgICAgICAgICBo
ZWlnaHQpOwoKICAgICAgCiAgICAgfkdka19JbWFnZSgpOwoKICAgICAgCiAgICAgR2RrSW1hZ2Uq
IG9wZXJhdG9yIC0+ICgpOwoKICAgICAgCiAgICAgY29uc3QgR2RrSW1hZ2UqIG9wZXJhdG9yIC0+
ICgpIGNvbnN0OwoKICAgICAgCiAgICAgdm9pZCBjcmVhdGUoR2RrSW1hZ2VUeXBlIHR5cGUsCiAg
ICAgICAgICAgICAgICAgR2RrX1Zpc3VhbCYgICAgdmlzdWFsLAogICAgICAgICAgICAgICAgIGdp
bnQgICAgICAgICAgIHdpZHRoLAogICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgIGhlaWdo
dCk7CgogICAgIHZvaWQgcmVsZWFzZSgpOwoKICAgICAgCiAgICAgdm9pZCBnZXQoR2RrX0RyYXdh
YmxlICZkcmF3YWJsZSwKICAgICAgICAgICAgICBnaW50IHgsZ2ludCB5LGdpbnQgd2lkdGgsZ2lu
dCBoZWlnaHQpOwogICAgIAogICAgICAKICAgICB2b2lkIHB1dF9waXhlbChnaW50IHgsZ2ludCB5
LGd1aW50MzIgcGl4ZWwpOwoKICAgICAgCiAgICAgZ3VpbnQzMiBnZXRfcGl4ZWwoZ2ludCB4LGdp
bnQgeSkgY29uc3Q7CgogICAgICAKICAgICB2b2lkIGFzc2lnbihHZGtJbWFnZSogJmltZyk7CiAg
ICAgCiAgfTsKCgoKCgoKCgoKCgojIDM3ICIvb3B0L2d0ay9pbmNsdWRlL2dkay0tLmgiIDIKCiMg
MSAiL29wdC9ndGsvaW5jbHVkZS9nZGstLS9jdXJzb3IuaCIgMQogCgogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCiAKIAogCiAKIAogCiAKIAogCiAKY2xhc3MgR2RrX0N1cnNvcjogcHVibGljIEdk
a19IYW5kbGU8R2RrQ3Vyc29yPgogIHsKICAgcHVibGljOgogICAgIHR5cGVkZWYgR2RrQ3Vyc29y
VHlwZSBUeXBlOwoKICAgcHJvdGVjdGVkOgoKICAgICAgCiAgICAgdm9pZCByZWYoKSB7fTsKCiAg
ICAgIAogICAgIHZvaWQgdW5yZWYoKSB7fTsKCiAKCgoKICAgcHVibGljOgoKICAgICAgCiAgICAg
R2RrX0N1cnNvcigpOwoKICAgcHVibGljOgogICAgICAKICAgICBHZGtfQ3Vyc29yKEdka0N1cnNv
ciAqY3Vyc29yKTsKICAKICAgICBHZGtfQ3Vyc29yKGNvbnN0IEdka19DdXJzb3ImIGZvbnQpOwoK
ICAgICAgCiAgICAgR2RrX0N1cnNvcihUeXBlIGN1cnNvcl90eXBlKTsKCiAgICAgIAogICAgIEdk
a19DdXJzb3IgKGNvbnN0IEdka19QaXhtYXAgJnNvdXJjZSwgCgkJIGNvbnN0IEdka19QaXhtYXAg
Jm1hc2ssIAoJCSBjb25zdCBHZGtfQ29sb3IgICZmZywKCQkgY29uc3QgR2RrX0NvbG9yICAmYmcs
CiAJIAkgZ2ludCAgICAgICAgICAgICB4LAoJCSBnaW50ICAgICAgICAgICAgIHkKCQkpOwoKICAg
ICB+R2RrX0N1cnNvcigpOwoKICAgICB2b2lkIGNyZWF0ZShUeXBlIGN1cnNvcl90eXBlKTsKICAg
ICB2b2lkIGNyZWF0ZShjb25zdCBHZGtfUGl4bWFwICZzb3VyY2UsIAoJCSBjb25zdCBHZGtfUGl4
bWFwICZtYXNrLCAKCQkgY29uc3QgR2RrX0NvbG9yICAmZmcsCgkJIGNvbnN0IEdka19Db2xvciAg
JmJnLAogCSAJIGdpbnQgICAgICAgICAgICAgeCwKCQkgZ2ludCAgICAgICAgICAgICB5CgkJKTsK
CiAgICAgdm9pZCBkZXN0cm95KCk7CiAgICAgdm9pZCByZWxlYXNlKCk7CgogICAgIEdka19DdXJz
b3ImIG9wZXJhdG9yID0gKGNvbnN0IEdka19DdXJzb3ImKTsKICB9OwoKCiMgMzggIi9vcHQvZ3Rr
L2luY2x1ZGUvZ2RrLS0uaCIgMgoKCgoKIyAzMyAiL29wdC9ndGsvaW5jbHVkZS9ndGstLS9iYXNl
LmgiIDIKCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9ndGstLS9wcm94eS5oIiAxCiAKIAoKCgojIDEg
Ii9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL3NpZ25hbF9zeXN0ZW0uaCIgMQogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9zbG90LmgiIDEKIAog
CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKIyAxICIvb3B0L2d0ay9saWIvc2lnYysrL2luY2x1ZGUv
c2lnYysrY29uZmlnLmgiIDEKIAogCgoKCiMgMTggIi9vcHQvZ3RrL2xpYi9zaWdjKysvaW5jbHVk
ZS9zaWdjKytjb25maWcuaCIKCgoKCgoKIAojIDM4ICIvb3B0L2d0ay9saWIvc2lnYysrL2luY2x1
ZGUvc2lnYysrY29uZmlnLmgiCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgojIDc3ICIv
b3B0L2d0ay9saWIvc2lnYysrL2luY2x1ZGUvc2lnYysrY29uZmlnLmgiCgoKCgoKCgoKCgoKIyA5
NiAiL29wdC9ndGsvbGliL3NpZ2MrKy9pbmNsdWRlL3NpZ2MrK2NvbmZpZy5oIgoKCgoKCgojIDI1
ICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9zbG90LmgiIDIKCiMgMSAiL29wdC9ndGsvaW5jbHVk
ZS9zaWdjKysvdHlwZS5oIiAxCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKbmFtZXNwYWNlIFNp
Z0MKewoKCiAKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IFRyYWl0CiAgewogICB0eXBl
ZGVmIGNvbnN0IFQmIHJlZjsKICAgdHlwZWRlZiBUICAgICAgICB0eXBlOwogIH07Cgp0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IFRyYWl0PFQmPgogIHsKICAgdHlwZWRlZiBUJiByZWY7CiAg
IHR5cGVkZWYgVCYgdHlwZTsKICB9OwoKCgoKCgoKCgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgVHJhaXQ8
dm9pZD46cHVibGljIFRyYWl0PGludD4KICB7fTsKCgoKfQoKCgojIDI2ICIvb3B0L2d0ay9pbmNs
dWRlL3NpZ2MrKy9zbG90LmgiIDIKCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvb2JqZWN0
LmgiIDEKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysr
L3Njb3BlLmgiIDEKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCm5hbWVzcGFjZSBTaWdDCnsKCgoK
c3RydWN0ICAgU2NvcGVOb2RlIAogIHsKICAgbXV0YWJsZSBTY29wZU5vZGUgKnByZXZfOwogICBt
dXRhYmxlIFNjb3BlTm9kZSAqbmV4dF87CgogICAgCiAgIHZvaWQgcmVtb3ZlX3NlbGYoKTsKCiAg
ICAKICAgdmlydHVhbCB2b2lkIGVyYXNlKCk7CgogICAgCiAgIHZpcnR1YWwgdm9pZCBkaXNjb25u
ZWN0KGJvb2wgZGVzdHJveT0wKTsKCiAgIFNjb3BlTm9kZSgpCgoKCiAgIDpwcmV2Xyh0aGlzKSxu
ZXh0Xyh0aGlzKSB7fQoKCiAgIHZpcnR1YWwgflNjb3BlTm9kZSgpOwoKICAgcHJpdmF0ZToKICAg
ICBTY29wZU5vZGUmIG9wZXJhdG9yPShjb25zdCBTY29wZU5vZGUmKTsKICAgICBTY29wZU5vZGUo
Y29uc3QgU2NvcGVOb2RlJik7CiAgfTsKCnN0cnVjdCAgIERhdGFOb2RlOiBwdWJsaWMgU2NvcGVO
b2RlCiAgewogICB2aXJ0dWFsIHZvaWQgZXJhc2UoKTsKICAgdmlydHVhbCB+RGF0YU5vZGUoKTsK
ICB9OwoKIAoKCmNsYXNzIE9iamVjdFNjb3BlZDsKY2xhc3MgT2JqZWN0UmVmZXJlbmNlZDsKY2xh
c3MgT2JqZWN0OwpjbGFzcyBTY29wZTsKCmNsYXNzICAgUmVmZXJlbmNlCiAgewogICBwcm90ZWN0
ZWQ6CiAgICAgbXV0YWJsZSBPYmplY3RSZWZlcmVuY2VkKiBvYmpfOwogICAgIG11dGFibGUgdm9p
ZCogY2FjaGVfOwoKICAgcHVibGljOgogICAgIHZvaWQgc2V0X3NpbmsoKTsKCiAgICAgdm9pZCBp
bml0KE9iamVjdFJlZmVyZW5jZWQqIG9iaik7CiAgICAgdm9pZCBzZXQoT2JqZWN0UmVmZXJlbmNl
ZCogb2JqLHZvaWQqIGNhY2hlPTAsYm9vbCBwdHI9ZmFsc2UpOwoKICAgICBSZWZlcmVuY2UmIG9w
ZXJhdG9yPShPYmplY3RSZWZlcmVuY2VkICpvYmopIHsgc2V0KG9iaik7IHJldHVybiAqdGhpczsg
fQogICAgIFJlZmVyZW5jZSYgb3BlcmF0b3I9KE9iamVjdFJlZmVyZW5jZWQgJm9iaikgeyBzZXQo
Jm9iaik7IHJldHVybiAqdGhpczsgfQogICAgIFJlZmVyZW5jZSYgb3BlcmF0b3I9KGNvbnN0IFJl
ZmVyZW5jZSYgcmVmKSAgeyBzZXQocmVmLm9ial8pOyByZXR1cm4gKnRoaXM7IH07CgogICAgIE9i
amVjdFJlZmVyZW5jZWQqIG9iamVjdCgpIGNvbnN0IHtyZXR1cm4gb2JqXzt9CiAgICAgdm9pZCog
Y2FjaGUoKSBjb25zdCB7cmV0dXJuIGNhY2hlXzt9CgogICAgIFJlZmVyZW5jZSgpOm9ial8oMCkg
e30KICAgICBSZWZlcmVuY2UoT2JqZWN0UmVmZXJlbmNlZCAmb2JqKQogICAgICAge2luaXQoJm9i
aik7fQogICAgIFJlZmVyZW5jZShjb25zdCBSZWZlcmVuY2UmIHJlZikKICAgICAgIHtpbml0KHJl
Zi5vYmpfKTt9CiAgICAgflJlZmVyZW5jZSgpOwogIH07CiAgICAgCmNsYXNzICAgU2NvcGU6cHVi
bGljIFNjb3BlTm9kZQogIHsKICAgZnJpZW5kIGNsYXNzIE9iamVjdFNjb3BlZDsKCiAgICAgU2Nv
cGUmIG9wZXJhdG9yPShjb25zdCBTY29wZSYgc2NvcGUpOwogICAgIFNjb3BlKGNvbnN0IFNjb3Bl
JiBzY29wZSk7CgogICBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXQoT2JqZWN0U2NvcGVkKiBvYmos
dm9pZCogY2FjaGUsYm9vbCBwdHIpOwogICAgIG11dGFibGUgT2JqZWN0U2NvcGVkKiBvYmpfOwog
ICAgIG11dGFibGUgdm9pZCogY2FjaGVfOwoKICAgICB2aXJ0dWFsIHZvaWQgb25fY29ubmVjdCgp
PTA7CiAgICAgdmlydHVhbCB2b2lkIGVyYXNlKCk7CgogICAgIHZvaWQgcmVnaXN0ZXJfc2NvcGUo
T2JqZWN0U2NvcGVkICopOwogICAgIHZvaWQgcmVnaXN0ZXJfc2NvcGUoY29uc3QgU2NvcGUgKnBh
cmVudD0wKTsKICAgICB2b2lkIHVucmVnaXN0ZXJfc2NvcGUoKTsKCiAgIHB1YmxpYzoKCiAgICAg
dm9pZCByZWZlcmVuY2UoKTsKICAgICB2b2lkIHVucmVmZXJlbmNlKCk7CiAgICAgdm9pZCBzZXRf
c2luaygpOwoKICAgICBPYmplY3RTY29wZWQqIG9iamVjdCgpIGNvbnN0IHtyZXR1cm4gKE9iamVj
dFNjb3BlZCopKG9ial8pO30KICAgICB2b2lkKiBjYWNoZSgpIGNvbnN0IHtyZXR1cm4gY2FjaGVf
O30KCiAgICAgIAogICAgIHZvaWQgaW52YWxpZCgpOwoKICAgICBTY29wZSgpOm9ial8oMCksY2Fj
aGVfKDApIHt9CiAgICAgdmlydHVhbCB+U2NvcGUoKTsKICB9OwoKCiAKCgoKCgoKCgoKCgoKCgoK
CgoKc3RydWN0IFNjb3Blcwp7CgpjbGFzcyAgIFVuY291bnRlZDpwdWJsaWMgU2NvcGUKICB7CiAg
ICAgVW5jb3VudGVkJiBvcGVyYXRvcj0oY29uc3QgVW5jb3VudGVkJik7CiAgICAgVW5jb3VudGVk
KGNvbnN0IFVuY291bnRlZCYpOwogICBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5l
Y3QoYm9vbCBsZXZlbD0wKTsKICAgICBVbmNvdW50ZWQoKTpTY29wZSgpIHt9CiAgICAgdmlydHVh
bCB+VW5jb3VudGVkKCk7CiAgfTsKCmNsYXNzICAgRXh0ZW5kOnB1YmxpYyBTY29wZQogIHsKICAg
ICBFeHRlbmQmIG9wZXJhdG9yPShjb25zdCBFeHRlbmQmKTsKICAgICBFeHRlbmQoY29uc3QgRXh0
ZW5kJik7CiAgIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgb25fY29ubmVjdCgpOwogICAg
IHZpcnR1YWwgdm9pZCBlcmFzZSgpOwogICBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc2Nv
bm5lY3QoYm9vbCBsZXZlbD0wKTsKICAgICB2b2lkIHNldChPYmplY3RTY29wZWQqIG9iaix2b2lk
KiBjYWNoZSxib29sIHB0cik7CiAgICAgRXh0ZW5kKCk6U2NvcGUoKSB7fQogICAgIHZpcnR1YWwg
fkV4dGVuZCgpOwogIH07CgpjbGFzcyAgIExpbWl0OnB1YmxpYyBTY29wZQogIHsKICAgICBMaW1p
dCYgb3BlcmF0b3I9KGNvbnN0IExpbWl0Jik7CiAgICAgTGltaXQoY29uc3QgTGltaXQmKTsKICAg
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBvbl9jb25uZWN0KCk7CiAgICAgdmlydHVhbCB2
b2lkIGVyYXNlKCk7CiAgIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdChib29s
IGxldmVsPTApOwogICAgIHZvaWQgc2V0KE9iamVjdFNjb3BlZCogb2JqLHZvaWQqIGNhY2hlLGJv
b2wgcHRyKTsKICAgICBMaW1pdCgpOlNjb3BlKCkge30KICAgICB2aXJ0dWFsIH5MaW1pdCgpOwog
IH07Cgp0eXBlZGVmIEV4dGVuZCBSZWZDb3VudDsKdHlwZWRlZiBSZWZlcmVuY2UgTG9jazsKfTsK
CiAKCgogCgoKIApzdHJ1Y3QgICBTY29wZUl0ZXJhdG9yXwogIHsKICAgdHlwZWRlZiBTY29wZU5v
ZGUgTm9kZVR5cGU7CiAgIHByaXZhdGU6CiAgICAgTm9kZVR5cGUgKm5vZGVfOwogICBwdWJsaWM6
CgogICBpbmxpbmUgTm9kZVR5cGUqIG5vZGUoKSAgICAgICAgICAgICB7cmV0dXJuIG5vZGVfO30K
ICAgaW5saW5lIGNvbnN0IE5vZGVUeXBlKiBub2RlKCkgY29uc3Qge3JldHVybiBub2RlXzt9Cgog
ICBpbmxpbmUgTm9kZVR5cGUmIG9wZXJhdG9yKigpCiAgICAge3JldHVybiAqbm9kZV87CiAgICAg
fQogICBpbmxpbmUgY29uc3QgTm9kZVR5cGUmIG9wZXJhdG9yKigpIGNvbnN0CiAgICAge3JldHVy
biAqbm9kZV87CiAgICAgfQogICAKICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTY29w
ZUl0ZXJhdG9yXyYgaSkgY29uc3QgCiAgICAge3JldHVybiBub2RlXz09aS5ub2RlXzsKICAgICB9
CiAgIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgU2NvcGVJdGVyYXRvcl8mIGkpIGNvbnN0
CiAgICAge3JldHVybiBub2RlXyE9aS5ub2RlXzsKICAgICB9CgogICBpbmxpbmUgU2NvcGVJdGVy
YXRvcl8mIG9wZXJhdG9yKysoKQogICAgIHsKICAgICAgaWYgKG5vZGVfKSAKICAgICAgICBub2Rl
Xz0oTm9kZVR5cGUqKW5vZGVfLT5uZXh0XzsKICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KCiAg
IFNjb3BlSXRlcmF0b3JfIG9wZXJhdG9yKysoaW50KQogICAgIHsKICAgICAgU2NvcGVJdGVyYXRv
cl8gdG1wPSp0aGlzOwogICAgICArKyp0aGlzOwogICAgICByZXR1cm4gdG1wOwogICAgIH0KCiAg
IFNjb3BlSXRlcmF0b3JfJiBvcGVyYXRvcj0gKGNvbnN0IFNjb3BlSXRlcmF0b3JfJiBpKQogICAg
IHsKICAgICAgbm9kZV89aS5ub2RlXzsKICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KCiAgIFNj
b3BlSXRlcmF0b3JfKGNvbnN0IFNjb3BlSXRlcmF0b3JfICZuKTpub2RlXyhuLm5vZGVfKSB7fQog
ICBTY29wZUl0ZXJhdG9yXyhOb2RlVHlwZSAqbik6bm9kZV8obikge30KICAgU2NvcGVJdGVyYXRv
cl8oKTpub2RlXygwKSB7fQogIH07CgpjbGFzcyAgIFNjb3BlTGlzdAogIHsKICAgcHVibGljOgog
ICB0eXBlZGVmIFNjb3BlTm9kZSBOb2RlVHlwZTsgCiAgIHR5cGVkZWYgU2NvcGVJdGVyYXRvcl8g
SXRlcmF0b3I7CgogICBTY29wZU5vZGUgbm9kZV87ICAgCgogICBpbmxpbmUgSXRlcmF0b3IgYmVn
aW4oKSAgICAgICAgICAgICB7cmV0dXJuIEl0ZXJhdG9yKG5vZGVfLm5leHRfKTt9CiAgIGlubGlu
ZSBJdGVyYXRvciBlbmQoKSAgICAgICAgICAgICAgIHtyZXR1cm4gSXRlcmF0b3IoJm5vZGVfKTt9
CgogICAgCiAgIEl0ZXJhdG9yIGluc2VydF9kaXJlY3QoSXRlcmF0b3IgcG9zLE5vZGVUeXBlICpu
KTsKCiAgIEl0ZXJhdG9yIGVyYXNlKEl0ZXJhdG9yIHBvcyk7CiAgIHZvaWQgZXJhc2UoSXRlcmF0
b3Igc3RhcnQsSXRlcmF0b3Igc3RvcCkKICAgICB7IHdoaWxlIChzdGFydCE9c3RvcCkgc3RhcnQ9
ZXJhc2Uoc3RhcnQpOyB9CiAgIHZvaWQgc3dhcF9lbGVtZW50cyhJdGVyYXRvciBwMSxJdGVyYXRv
ciBwMik7CgogICB2b2lkIGNsZWFyKCkKICAgICB7IGVyYXNlKGJlZ2luKCksZW5kKCkpOyB9Cgog
ICBib29sIGVtcHR5KCkgY29uc3Qge3JldHVybiBub2RlXy5uZXh0Xz09Jm5vZGVfO30gCiAgIAog
ICBTY29wZUxpc3QoKTpub2RlXygpIHt9CiAgIH5TY29wZUxpc3QoKSB7IGNsZWFyKCk7IH0KCiAg
IHByaXZhdGU6CiAgICAgU2NvcGVMaXN0KGNvbnN0IFNjb3BlTGlzdCYpOwogIH07CgoKCgp9ICAK
CgoKIyAyMiAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvb2JqZWN0LmgiIDIKCgoKCm5hbWVzcGFj
ZSBTaWdDCnsKCgpleHRlcm4gaW50IHNpZ2NfbWljcm9fdmVyc2lvbjsKZXh0ZXJuIGludCBzaWdj
X21pbm9yX3ZlcnNpb247CmV4dGVybiBpbnQgc2lnY19tYWpvcl92ZXJzaW9uOwoKY2xhc3MgSW52
YWxpZF87CmNsYXNzICAgT2JqZWN0UmVmZXJlbmNlZAogIHsKICAgZnJpZW5kIGNsYXNzIFJlZmVy
ZW5jZTsKICAgZnJpZW5kIGNsYXNzIFNjb3BlOwogICBmcmllbmQgY2xhc3MgSW52YWxpZF87CgoK
ICAgdGVtcGxhdGUgPGNsYXNzIFQ+CiAgICAgZnJpZW5kIFQqIG1hbmFnZShUKik7CgoKICAgcHJv
dGVjdGVkOgogICAgICAKICAgICB1bnNpZ25lZCBpbnQgb2JqX2NvdW50XyAgICA6MjQ7CgogICAg
ICAKICAgICB1bnNpZ25lZCBpbnQgb2JqX2R5bmFtaWNfICA6MTsKCiAgICAgIAogICAgIHVuc2ln
bmVkIGludCBvYmpfb3duZWRfICAgIDoxOwoKICAgICAgCiAgICAgdW5zaWduZWQgaW50IG9ial9m
bG9hdGluZ18gOjE7CgogICAgICAKICAgICB1bnNpZ25lZCBpbnQgb2JqX3RyYW5zZmVyXyA6MTsK
CiAgICAgIAogICAgIHVuc2lnbmVkIGludCBvYmpfaW52YWxpZF8gIDoxOwoKICAgICAgCiAgICAg
dW5zaWduZWQgaW50IG9ial9kZXN0cm95ZWRfIDoxOwoKICAgICAgCiAgICAgdW5zaWduZWQgaW50
IG9ial93ZWFrXyA6MTsKCgogICAgCgogICBwcm90ZWN0ZWQ6CgoKCiAgICAgIAogICAgIHZpcnR1
YWwgdm9pZCBzZXRfZHluYW1pYygpOyAKICAgICBpbmxpbmUgdm9pZCBzZXRfc2luaygpIHtvYmpf
ZmxvYXRpbmdfPTA7fQoKICAgcHJvdGVjdGVkOgoKICAgICBpbmxpbmUgdm9pZCByZWdpc3Rlcl9y
ZWYoUmVmZXJlbmNlICopCiAgICAgICB7ICAKICAgICAgICBpZiAob2JqX3RyYW5zZmVyXykgCiAg
ICAgICAgIHsKICAgICAgICAgIG9ial90cmFuc2Zlcl89MDsKICAgICAgICAgIG9ial9vd25lZF89
MDsKICAgICAgICAgfQogICAgICAgfQogIAogICBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJl
ZmVyZW5jZSgpOwogICAgIHZpcnR1YWwgdm9pZCB1bnJlZmVyZW5jZSgpOwoKICAgICBpbmxpbmUg
Ym9vbCBpc19keW5hbWljKCkgIHtyZXR1cm4gb2JqX2R5bmFtaWNfO30KICAgICBpbmxpbmUgYm9v
bCBpc19mbG9hdGluZygpIHtyZXR1cm4gb2JqX2Zsb2F0aW5nXzt9CgogICAgIE9iamVjdFJlZmVy
ZW5jZWQoKTsKICAgICB2aXJ0dWFsIH5PYmplY3RSZWZlcmVuY2VkKCk7CiAgfTsKCgpjbGFzcyAg
IE9iamVjdFNjb3BlZCA6cHVibGljIE9iamVjdFJlZmVyZW5jZWQKICB7CiAgIGZyaWVuZCBjbGFz
cyBTY29wZTsKICAgdHlwZWRlZiBTY29wZUxpc3QgTGlzdF87CgogICBwcml2YXRlOgogICAgIG11
dGFibGUgTGlzdF8gbGlzdF87CgogICAgCiAgICAgdm9pZCByZWdpc3Rlcl9zY29wZShTY29wZSAq
c2NvcGUsY29uc3QgU2NvcGUgKnBhcmVudD0wKTsKICAgICB2b2lkIHVucmVnaXN0ZXJfc2NvcGUo
U2NvcGUgKnNjb3BlKTsKCiAgIHByb3RlY3RlZDoKICAgICAgCiAgICAgdm9pZCBzZXRfd2Vhaygp
OwoKICAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJfZGF0YShTY29wZU5vZGUqIGRhdGEpOwoK
ICAgICAgCiAgICAgdm9pZCBpbnZhbGlkKGJvb2wgZGVzdHJveT0wKTsKCiAgICAgT2JqZWN0U2Nv
cGVkKCk7CiAgICAgdmlydHVhbCB+T2JqZWN0U2NvcGVkKCk7CiAgfTsKCgogCmNsYXNzICAgT2Jq
ZWN0OiBwdWJsaWMgdmlydHVhbCBPYmplY3RTY29wZWQgCiAgewogICBwdWJsaWM6CiAgICAgT2Jq
ZWN0KCkge30KICAgICB2aXJ0dWFsIH5PYmplY3QoKTsKICB9OwoKIAp0ZW1wbGF0ZSA8Y2xhc3Mg
VD4KaW5saW5lIFQqIG1hbmFnZShUKiB0KQogIHsgCiAgIGlmICh0KSB0LT5zZXRfZHluYW1pYygp
OwogICByZXR1cm4gdDsKICB9CgoKCn0gIAoKCgojIDI3ICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2Mr
Ky9zbG90LmgiIDIKCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvaGFuZGxlLmgiIDEKCgoK
CgpuYW1lc3BhY2UgU2lnQwp7CgoKIAp0ZW1wbGF0ZSA8Y2xhc3MgT2JqLGNsYXNzIFNjb3BlXz4K
ICBjbGFzcyBIYW5kbGUKICB7CiAgIHByb3RlY3RlZDoKICAgICBTY29wZV8gc2NvcGVfOwogICBw
dWJsaWM6CiAgICAgIAogICAgIE9iaiogb2JqKCkKICAgICAgIHsKICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8T2JqKj4oc2NvcGVfLmNhY2hlKCkpOwogICAgICAgfQogICAgIE9iaiogb2JqKCkg
Y29uc3QKICAgICAgIHsKICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8T2JqKj4oc2NvcGVfLmNh
Y2hlKCkpOwogICAgICAgfQoKICAgICBib29sIGNvbm5lY3RlZCgpIGNvbnN0CiAgICAgICB7cmV0
dXJuICAoc2NvcGVfLm9iamVjdCgpIT0wKTt9CiAgICAgb3BlcmF0b3IgT2JqKigpIAogICAgICAg
e3JldHVybiAgKG9iaigpKTt9CiAgICAgb3BlcmF0b3IgT2JqKigpIGNvbnN0CiAgICAgICB7cmV0
dXJuICAob2JqKCkpO30KCiAgICAgT2JqJiBvcGVyYXRvciooKSBjb25zdAogICAgICAge3JldHVy
biAqKG9iaigpKTt9CiAgICAgT2JqKiBvcGVyYXRvci0+KCkgY29uc3QKICAgICAgIHtyZXR1cm4g
IChvYmooKSk7fQoKICAgICBTY29wZV8mIHNjb3BlKCkKICAgICAgIHtyZXR1cm4gc2NvcGVfO30K
ICAgICBjb25zdCBTY29wZV8mIHNjb3BlKCkgY29uc3QKICAgICAgIHtyZXR1cm4gc2NvcGVfO30K
CiAgICAgdm9pZCBkaXNjb25uZWN0KCkKICAgICAgIHtzY29wZV8uZGlzY29ubmVjdCgwKTt9Cgog
ICAgICAKICAgICBIYW5kbGUmIG9wZXJhdG9yID0oT2JqKiBvYmopCiAgICAgICB7c2NvcGVfLnNl
dChvYmosb2JqLHRydWUpOyByZXR1cm4gKnRoaXM7fQogICAgIEhhbmRsZSYgb3BlcmF0b3IgPShP
YmomIG9iaikKICAgICAgIHtzY29wZV8uc2V0KCZvYmosJm9iaixmYWxzZSk7IHJldHVybiAqdGhp
czt9CgogICAgIEhhbmRsZSYgb3BlcmF0b3IgPShjb25zdCBIYW5kbGUmIGhhbmRsZSkKICAgICAg
IHsKICAgICAgICBPYmogKm89aGFuZGxlLm9iaigpOwogICAgICAgIHNjb3BlXy5zZXQobyxvLGZh
bHNlKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICB9CgogICAgIHRlbXBsYXRlIDxjbGFz
cyBPYmoyLGNsYXNzIFNjb3BlMj4KICAgICAgIEhhbmRsZSYgb3BlcmF0b3IgPSAoY29uc3QgSGFu
ZGxlPE9iajIsU2NvcGUyPiYgaGFuZGxlKQogICAgICAgewogICAgICAgIE9iaiAqbz1oYW5kbGUu
b2JqKCk7CiAgICAgICAgc2NvcGVfLnNldChvLG8sZmFsc2UpOwogICAgICAgIHJldHVybiAqdGhp
czsKICAgICAgIH0KCiAgICAgIAogICAgIEhhbmRsZSgpOnNjb3BlXygpICAgICAgICAgICB7fQog
ICAgIEhhbmRsZShPYmogKm9iaik6c2NvcGVfKCkgICB7c2NvcGVfLnNldChvYmosb2JqLHRydWUp
O30KICAgICBIYW5kbGUoT2JqICZvYmopOnNjb3BlXygpICAge3Njb3BlXy5zZXQoJm9iaiwmb2Jq
LGZhbHNlKTt9CgogICAgIEhhbmRsZShjb25zdCBIYW5kbGUmIGhhbmRsZSkKICAgICAgIDpzY29w
ZV8oKSAKICAgICAgIHsKICAgICAgICBPYmogKm89aGFuZGxlLm9iaigpOwogICAgICAgIHNjb3Bl
Xy5zZXQobyxvLGZhbHNlKTsKICAgICAgIH0KCiAgICAgdGVtcGxhdGUgPGNsYXNzIE9iajIsY2xh
c3MgU2NvcGUyPgogICAgIEhhbmRsZShjb25zdCBIYW5kbGU8T2JqMixTY29wZTI+JiBoYW5kbGUp
CiAgICAgICA6c2NvcGVfKCkKICAgICAgIHsKICAgICAgICBPYmogKm89aGFuZGxlLm9iaigpOwog
ICAgICAgIHNjb3BlXy5zZXQobyxvLGZhbHNlKTsKICAgICAgIH0KICB9OwoKCiMgMTAyICIvb3B0
L2d0ay9pbmNsdWRlL3NpZ2MrKy9oYW5kbGUuaCIKCiAKIAogCiAKIAoKCn0gIAoKCgojIDI4ICIv
b3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9zbG90LmgiIDIKCgoKbmFtZXNwYWNlIFNpZ0MKewoKCiAK
IApzdHJ1Y3QgICBTbG90Tm9kZQogIHsKICAgdm9pZCAqbmV4dF87CiAgIFNsb3ROb2RlKCk7CiAg
IHZpcnR1YWwgflNsb3ROb2RlKCk9MDsKICB9OwoKc3RydWN0ICAgU2xvdEl0ZXJhdG9yXwogIHsK
CXR5cGVkZWYgU2xvdE5vZGUgTm9kZVR5cGU7CiAgIHR5cGVkZWYgU2xvdEl0ZXJhdG9yXyBJdGVy
YXRvcjsKICAgTm9kZVR5cGUgKm5vZGVfOwoKICAgTm9kZVR5cGUqIG5vZGUoKSAgICAgICAgICAg
ICB7cmV0dXJuIG5vZGVfO30KICAgY29uc3QgTm9kZVR5cGUqIG5vZGUoKSBjb25zdCB7cmV0dXJu
IG5vZGVfO30KCiAgIE5vZGVUeXBlJiBvcGVyYXRvciooKQogICAgIHtyZXR1cm4gKm5vZGVfOwog
ICAgIH0KICAgY29uc3QgTm9kZVR5cGUmIG9wZXJhdG9yKigpIGNvbnN0CiAgICAge3JldHVybiAq
bm9kZV87CiAgICAgfQoKICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEl0ZXJhdG9yJiBpKSBjb25z
dAogICAgIHtyZXR1cm4gbm9kZV89PWkubm9kZV87CiAgICAgfQogICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgSXRlcmF0b3ImIGkpIGNvbnN0CiAgICAge3JldHVybiBub2RlXyE9aS5ub2RlXzsKICAg
ICB9CgogICBJdGVyYXRvciYgb3BlcmF0b3IrKygpCiAgICAgewogICAgICBpZiAobm9kZV8pCiAg
ICAgICAgbm9kZV89KE5vZGVUeXBlKilub2RlXy0+bmV4dF87CiAgICAgIHJldHVybiAqdGhpczsK
ICAgICB9CgogICBJdGVyYXRvciBvcGVyYXRvcisrKGludCkKICAgICB7SXRlcmF0b3IgdG1wPSp0
aGlzOwogICAgICArKyp0aGlzOwogICAgICByZXR1cm4gdG1wOwogICAgIH0KCiAgIEl0ZXJhdG9y
JiBvcGVyYXRvcj0gKGNvbnN0IEl0ZXJhdG9yJiBpKQogICAgIHsKICAgICAgbm9kZV89aS5ub2Rl
XzsKICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KCiAgIFNsb3RJdGVyYXRvcl8oKTpub2RlXygw
KSB7fQogICBTbG90SXRlcmF0b3JfKE5vZGVUeXBlICpub2RlKTpub2RlXyhub2RlKSB7fQogIH07
CgogCnN0cnVjdCAgIFNsb3RMaXN0XwogIHsKICAgdHlwZWRlZiBTbG90Tm9kZSBOb2RlVHlwZTsK
ICAgdHlwZWRlZiBTbG90SXRlcmF0b3JfIEl0ZXJhdG9yOwogICBOb2RlVHlwZSogaGVhZF87Cgog
ICBJdGVyYXRvciBiZWdpbigpICAgICAgICAgICAgIHtyZXR1cm4gKChOb2RlVHlwZSopaGVhZF8p
O30KICAgSXRlcmF0b3IgZW5kKCkgICAgICAgICAgICAgICB7cmV0dXJuIEl0ZXJhdG9yKCk7fQog
ICBjb25zdCBJdGVyYXRvciBiZWdpbigpIGNvbnN0IHtyZXR1cm4gKChOb2RlVHlwZSopaGVhZF8p
O30KICAgY29uc3QgSXRlcmF0b3IgZW5kKCkgICBjb25zdCB7cmV0dXJuIEl0ZXJhdG9yKCk7fQoK
ICAgIAogICBJdGVyYXRvciBpbnNlcnRfZGlyZWN0KEl0ZXJhdG9yIHBvcyxOb2RlVHlwZSAqbik7
CgogICB2b2lkIGNsZWFyKCk7CiAgIGJvb2wgZW1wdHkoKSBjb25zdCB7cmV0dXJuIGhlYWRfPT0w
O30KCiAgIFNsb3RMaXN0XygpOmhlYWRfKDApCiAgICAge30KICAgflNsb3RMaXN0XygpCiAgICAg
e2NsZWFyKCk7fQoKICAgcHJpdmF0ZToKICAgICBTbG90TGlzdF8oY29uc3QgU2xvdExpc3RfJik7
CiAgfTsKCgpzdHJ1Y3QgU2xvdERhdGE7CgogCiAKc3RydWN0ICAgU2xvdERlcGVuZGVudDpwdWJs
aWMgU2NvcGVOb2RlCiAgewogICBzdHJ1Y3QgICBEZXA6IHB1YmxpYyBTY29wZU5vZGUKICAgICB7
CiAgICAgIFNsb3REYXRhICpwYXJlbnQ7CiAgICAgIHZpcnR1YWwgdm9pZCBlcmFzZSgpOwogICAg
ICBEZXAoKSB7fQogICAgICB2aXJ0dWFsIH5EZXAoKTsKICAgICB9IGRlcDsKCiAgIFNjb3BlTm9k
ZSogcmVjZWl2ZXIoKSB7cmV0dXJuICZkZXA7fQogICBTY29wZU5vZGUqIHNlbmRlcigpICAge3Jl
dHVybiB0aGlzO30KICAgU2xvdERhdGEqICBwYXJlbnQoKSAgIHtyZXR1cm4gZGVwLnBhcmVudDt9
CgogICBib29sIGNvbm5lY3RlZCgpCiAgICAge3JldHVybiAobmV4dF8hPXRoaXMpO30KCiAgIHZp
cnR1YWwgdm9pZCBlcmFzZSgpOwoKICAgdm9pZCBzZXRfcGFyZW50KFNsb3REYXRhICpzKQogICAg
IHtkZXAucGFyZW50PXM7fQoKICAgU2xvdERlcGVuZGVudChTbG90RGF0YSAmcykKICAgICB7ZGVw
LnBhcmVudD0mczt9CgogICBTbG90RGVwZW5kZW50KCkKICAgICB7fQoKICAgdmlydHVhbCB+U2xv
dERlcGVuZGVudCgpOwogIH07CgogCnN0cnVjdCBDYWxsYmFja18KICB7CiAgICAKICAgdm9pZCog
KCpmdW5jXykodm9pZCopOwoKICAgc3RydWN0IE87CiAgIHN0cnVjdCBDMQogICAgIHsKICAgICAg
dm9pZCogKCpmMSkodm9pZCopOwogICAgIH07CiAgIHN0cnVjdCBDMgogICAgIHsKICAgICAgTyog
bzsKICAgICAgdm9pZCAoTzo6KnYpKHZvaWQpOwogICAgIH07CgogICAgCiAgIHVuaW9uIHtDMSBh
MTsgQzIgYTI7fTsKICB9OwoKIApzdHJ1Y3QgICBTbG90RGF0YTpwdWJsaWMgT2JqZWN0U2NvcGVk
CiAgewogICB0eXBlZGVmIFNsb3RMaXN0XyBMaXN0OwoKICAgU2xvdERlcGVuZGVudCBkZXBfOwoK
ICAgU2NvcGVOb2RlKiByZWNlaXZlcigpIHtyZXR1cm4gZGVwXy5yZWNlaXZlcigpO30KICAgU2Nv
cGVOb2RlKiBzZW5kZXIoKSAgIHtyZXR1cm4gZGVwXy5zZW5kZXIoKTt9CgogICAgCiAgICAKICAg
dm9pZCBjb25uZWN0KCk7CgogICBMaXN0IGxpc3RfOwogICBDYWxsYmFja18gZGF0YV87CgogICBD
YWxsYmFja18mIGNhbGxiYWNrKCkge3JldHVybiBkYXRhXzt9CgogICBTbG90RGF0YSgpCiAgICAg
e2RlcF8uc2V0X3BhcmVudCh0aGlzKTt9CiAgIHZpcnR1YWwgflNsb3REYXRhKCk7CiAgfTsKCgp0
eXBlZGVmIFNjb3Blczo6RXh0ZW5kIFNsb3RFeHRlbmQ7CgoKCgpjbGFzcyAgIENvbm5lY3Rpb246
cHJvdGVjdGVkIEhhbmRsZTxTbG90RGF0YSxTbG90RXh0ZW5kPgogIHsKICAgdHlwZWRlZiBIYW5k
bGU8U2xvdERhdGEsU2xvdEV4dGVuZD4gQmFzZTsKICAgcHVibGljOgogICAgICAKICAgICB2b2lk
IGRpc2Nvbm5lY3QoKSB7aWYgKG9iaigpKSBvYmooKS0+aW52YWxpZCgpO30KICAgICBib29sIGNv
bm5lY3RlZCgpIHtyZXR1cm4gQmFzZTo6Y29ubmVjdGVkICgpO30KCiAgICAgQ29ubmVjdGlvbigp
OkJhc2UoKSB7fQogICAgIENvbm5lY3Rpb24oU2xvdERhdGEgKnMpOkJhc2Uocykge30KICAgICBD
b25uZWN0aW9uKGNvbnN0IENvbm5lY3Rpb24mIHMpOkJhc2Uocykge30KICB9OwoKIAp0ZW1wbGF0
ZSA8Y2xhc3MgQyxjbGFzcyBGPgpzdHJ1Y3QgQ2FsbERhdGFGdW5jCiAgewogICBDIGNhbGxiYWNr
OwogICBGIGZ1bmM7CiAgfTsKCnRlbXBsYXRlIDxjbGFzcyBDLGNsYXNzIE8+CnN0cnVjdCBDYWxs
RGF0YU9iajIKICB7CiAgIEMgY2FsbGJhY2s7CiAgIE8gKm9iajsKICB9OwoKdGVtcGxhdGUgPGNs
YXNzIEMsY2xhc3MgTyxjbGFzcyBGPgpzdHJ1Y3QgQ2FsbERhdGFPYmozCiAgeyAKICAgQyAgIGNh
bGxiYWNrOwogICBPKiAgb2JqOwogICBGICAgZnVuYzsKICB9OwoKIAogCiAKCgoKIAoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgUj4Kc3RydWN0IENhbGxiYWNrMDpwdWJsaWMgQ2FsbGJhY2tfCiAgewoKICAg
dHlwZWRlZiBSIFJUeXBlOwoKCgogICB0eXBlZGVmIFJUeXBlICgqRnVuYykodm9pZCopOwogICBp
bmxpbmUgUlR5cGUgY2FsbCgpCiAgICAge3JldHVybiAoKEZ1bmMpKGZ1bmNfKSkoKHZvaWQqKXRo
aXMpO30KICAgaW5saW5lIFJUeXBlIG9wZXJhdG9yKCkoKQogICAgIHtyZXR1cm4gKChGdW5jKShm
dW5jXykpKCh2b2lkKil0aGlzKTt9CiAgfTsKCnRlbXBsYXRlIDxjbGFzcyBSPgpjbGFzcyBTbG90
MAogICA6cHVibGljIEhhbmRsZTxTbG90RGF0YSxTbG90RXh0ZW5kPgogIHsKICAgcHVibGljOgog
ICAgIHR5cGVkZWYgSGFuZGxlPFNsb3REYXRhLFNsb3RFeHRlbmQ+IEJhc2U7CiAgICAgdHlwZWRl
ZiBDYWxsYmFjazA8Uj4gQ2FsbGJhY2s7CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBDYWxsYmFjazo6
UlR5cGUgUlR5cGU7CiAgICAgdHlwZWRlZiBSVHlwZSAoKkZ1bmMpKHZvaWQqKTsKCiAgICAgU2xv
dERhdGEqIGRhdGEoKSAgICAgY29uc3Qge3JldHVybiAoU2xvdERhdGEqKShzY29wZV8ub2JqZWN0
KCkpO30KCiAgICAgU2xvdDAoKSB7fQogICAgIFNsb3QwKFNsb3REYXRhICpzKTpCYXNlKHMpICAg
IHt9CiAgICAgU2xvdDAoY29uc3QgU2xvdDAmIHMpOkJhc2Uocy5vYmooKSkge30KCiAgICAgaW5s
aW5lIFJUeXBlIGNhbGwoKSAKICAgICAgICB7CiAgICAgICAgIGlmIChjb25uZWN0ZWQoKSkgCiAg
ICAgICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShkYXRhKCktPmNhbGxiYWNrKCkpKS5jYWxsKCk7
CiAgICAgICAgIHJldHVybiBSVHlwZSgpOwogICAgICAgIH0KICAgICBpbmxpbmUgUlR5cGUgb3Bl
cmF0b3IoKSgpIAogICAgICAgIHsKICAgICAgICAgaWYgKGNvbm5lY3RlZCgpKSAKICAgICAgICAg
ICByZXR1cm4gKChDYWxsYmFjayYpKGRhdGEoKS0+Y2FsbGJhY2soKSkpLmNhbGwoKTsKICAgICAg
ICAgcmV0dXJuIFJUeXBlKCk7CiAgICAgICAgfQogIH07CgoKIyAzNDEgIi9vcHQvZ3RrL2luY2x1
ZGUvc2lnYysrL3Nsb3QuaCIKCgoKIAoKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMT4Kc3Ry
dWN0IENhbGxiYWNrMTpwdWJsaWMgQ2FsbGJhY2tfCiAgewoKICAgdHlwZWRlZiBSIFJUeXBlOwoK
CgogICB0eXBlZGVmIFJUeXBlICgqRnVuYykodm9pZCosUDEpOwogICBpbmxpbmUgUlR5cGUgY2Fs
bCh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSkKICAgICB7cmV0dXJuICgoRnVuYykoZnVuY18p
KSgodm9pZCopdGhpcyxwMSk7fQogICBpbmxpbmUgUlR5cGUgb3BlcmF0b3IoKSh0eXBlbmFtZSBU
cmFpdDxQMT46OnJlZiBwMSkKICAgICB7cmV0dXJuICgoRnVuYykoZnVuY18pKSgodm9pZCopdGhp
cyxwMSk7fQogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMT4KY2xhc3MgU2xvdDEKICAg
OnB1YmxpYyBIYW5kbGU8U2xvdERhdGEsU2xvdEV4dGVuZD4KICB7CiAgIHB1YmxpYzoKICAgICB0
eXBlZGVmIEhhbmRsZTxTbG90RGF0YSxTbG90RXh0ZW5kPiBCYXNlOwogICAgIHR5cGVkZWYgQ2Fs
bGJhY2sxPFIsUDE+IENhbGxiYWNrOwogICAgIHR5cGVkZWYgdHlwZW5hbWUgQ2FsbGJhY2s6OlJU
eXBlIFJUeXBlOwogICAgIHR5cGVkZWYgUlR5cGUgKCpGdW5jKSh2b2lkKixQMSk7CgogICAgIFNs
b3REYXRhKiBkYXRhKCkgICAgIGNvbnN0IHtyZXR1cm4gKFNsb3REYXRhKikoc2NvcGVfLm9iamVj
dCgpKTt9CgogICAgIFNsb3QxKCkge30KICAgICBTbG90MShTbG90RGF0YSAqcyk6QmFzZShzKSAg
ICB7fQogICAgIFNsb3QxKGNvbnN0IFNsb3QxJiBzKTpCYXNlKHMub2JqKCkpIHt9CgogICAgIGlu
bGluZSBSVHlwZSBjYWxsKHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAxKSAKICAgICAgICB7CiAg
ICAgICAgIGlmIChjb25uZWN0ZWQoKSkgCiAgICAgICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShk
YXRhKCktPmNhbGxiYWNrKCkpKS5jYWxsKHAxKTsKICAgICAgICAgcmV0dXJuIFJUeXBlKCk7CiAg
ICAgICAgfQogICAgIGlubGluZSBSVHlwZSBvcGVyYXRvcigpKHR5cGVuYW1lIFRyYWl0PFAxPjo6
cmVmIHAxKSAKICAgICAgICB7CiAgICAgICAgIGlmIChjb25uZWN0ZWQoKSkgCiAgICAgICAgICAg
cmV0dXJuICgoQ2FsbGJhY2smKShkYXRhKCktPmNhbGxiYWNrKCkpKS5jYWxsKHAxKTsKICAgICAg
ICAgcmV0dXJuIFJUeXBlKCk7CiAgICAgICAgfQogIH07CgoKIyA0MzkgIi9vcHQvZ3RrL2luY2x1
ZGUvc2lnYysrL3Nsb3QuaCIKCgoKIAoKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFz
cyBQMj4Kc3RydWN0IENhbGxiYWNrMjpwdWJsaWMgQ2FsbGJhY2tfCiAgewoKICAgdHlwZWRlZiBS
IFJUeXBlOwoKCgogICB0eXBlZGVmIFJUeXBlICgqRnVuYykodm9pZCosUDEsUDIpOwogICBpbmxp
bmUgUlR5cGUgY2FsbCh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQ
Mj46OnJlZiBwMikKICAgICB7cmV0dXJuICgoRnVuYykoZnVuY18pKSgodm9pZCopdGhpcyxwMSxw
Mik7fQogICBpbmxpbmUgUlR5cGUgb3BlcmF0b3IoKSh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBw
MSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMikKICAgICB7cmV0dXJuICgoRnVuYykoZnVuY18p
KSgodm9pZCopdGhpcyxwMSxwMik7fQogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxj
bGFzcyBQMj4KY2xhc3MgU2xvdDIKICAgOnB1YmxpYyBIYW5kbGU8U2xvdERhdGEsU2xvdEV4dGVu
ZD4KICB7CiAgIHB1YmxpYzoKICAgICB0eXBlZGVmIEhhbmRsZTxTbG90RGF0YSxTbG90RXh0ZW5k
PiBCYXNlOwogICAgIHR5cGVkZWYgQ2FsbGJhY2syPFIsUDEsUDI+IENhbGxiYWNrOwogICAgIHR5
cGVkZWYgdHlwZW5hbWUgQ2FsbGJhY2s6OlJUeXBlIFJUeXBlOwogICAgIHR5cGVkZWYgUlR5cGUg
KCpGdW5jKSh2b2lkKixQMSxQMik7CgogICAgIFNsb3REYXRhKiBkYXRhKCkgICAgIGNvbnN0IHty
ZXR1cm4gKFNsb3REYXRhKikoc2NvcGVfLm9iamVjdCgpKTt9CgogICAgIFNsb3QyKCkge30KICAg
ICBTbG90MihTbG90RGF0YSAqcyk6QmFzZShzKSAgICB7fQogICAgIFNsb3QyKGNvbnN0IFNsb3Qy
JiBzKTpCYXNlKHMub2JqKCkpIHt9CgogICAgIGlubGluZSBSVHlwZSBjYWxsKHR5cGVuYW1lIFRy
YWl0PFAxPjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyKSAKICAgICAgICB7CiAg
ICAgICAgIGlmIChjb25uZWN0ZWQoKSkgCiAgICAgICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShk
YXRhKCktPmNhbGxiYWNrKCkpKS5jYWxsKHAxLHAyKTsKICAgICAgICAgcmV0dXJuIFJUeXBlKCk7
CiAgICAgICAgfQogICAgIGlubGluZSBSVHlwZSBvcGVyYXRvcigpKHR5cGVuYW1lIFRyYWl0PFAx
Pjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyKSAKICAgICAgICB7CiAgICAgICAg
IGlmIChjb25uZWN0ZWQoKSkgCiAgICAgICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShkYXRhKCkt
PmNhbGxiYWNrKCkpKS5jYWxsKHAxLHAyKTsKICAgICAgICAgcmV0dXJuIFJUeXBlKCk7CiAgICAg
ICAgfQogIH07CgoKIyA1MzcgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL3Nsb3QuaCIKCgoKIAoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMz4Kc3RydWN0IENh
bGxiYWNrMzpwdWJsaWMgQ2FsbGJhY2tfCiAgewoKICAgdHlwZWRlZiBSIFJUeXBlOwoKCgogICB0
eXBlZGVmIFJUeXBlICgqRnVuYykodm9pZCosUDEsUDIsUDMpOwogICBpbmxpbmUgUlR5cGUgY2Fs
bCh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMix0
eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBwMykKICAgICB7cmV0dXJuICgoRnVuYykoZnVuY18pKSgo
dm9pZCopdGhpcyxwMSxwMixwMyk7fQogICBpbmxpbmUgUlR5cGUgb3BlcmF0b3IoKSh0eXBlbmFt
ZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMix0eXBlbmFtZSBU
cmFpdDxQMz46OnJlZiBwMykKICAgICB7cmV0dXJuICgoRnVuYykoZnVuY18pKSgodm9pZCopdGhp
cyxwMSxwMixwMyk7fQogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixj
bGFzcyBQMz4KY2xhc3MgU2xvdDMKICAgOnB1YmxpYyBIYW5kbGU8U2xvdERhdGEsU2xvdEV4dGVu
ZD4KICB7CiAgIHB1YmxpYzoKICAgICB0eXBlZGVmIEhhbmRsZTxTbG90RGF0YSxTbG90RXh0ZW5k
PiBCYXNlOwogICAgIHR5cGVkZWYgQ2FsbGJhY2szPFIsUDEsUDIsUDM+IENhbGxiYWNrOwogICAg
IHR5cGVkZWYgdHlwZW5hbWUgQ2FsbGJhY2s6OlJUeXBlIFJUeXBlOwogICAgIHR5cGVkZWYgUlR5
cGUgKCpGdW5jKSh2b2lkKixQMSxQMixQMyk7CgogICAgIFNsb3REYXRhKiBkYXRhKCkgICAgIGNv
bnN0IHtyZXR1cm4gKFNsb3REYXRhKikoc2NvcGVfLm9iamVjdCgpKTt9CgogICAgIFNsb3QzKCkg
e30KICAgICBTbG90MyhTbG90RGF0YSAqcyk6QmFzZShzKSAgICB7fQogICAgIFNsb3QzKGNvbnN0
IFNsb3QzJiBzKTpCYXNlKHMub2JqKCkpIHt9CgogICAgIGlubGluZSBSVHlwZSBjYWxsKHR5cGVu
YW1lIFRyYWl0PFAxPjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1l
IFRyYWl0PFAzPjo6cmVmIHAzKSAKICAgICAgICB7CiAgICAgICAgIGlmIChjb25uZWN0ZWQoKSkg
CiAgICAgICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShkYXRhKCktPmNhbGxiYWNrKCkpKS5jYWxs
KHAxLHAyLHAzKTsKICAgICAgICAgcmV0dXJuIFJUeXBlKCk7CiAgICAgICAgfQogICAgIGlubGlu
ZSBSVHlwZSBvcGVyYXRvcigpKHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAxLHR5cGVuYW1lIFRy
YWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6cmVmIHAzKSAKICAgICAgICB7CiAg
ICAgICAgIGlmIChjb25uZWN0ZWQoKSkgCiAgICAgICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShk
YXRhKCktPmNhbGxiYWNrKCkpKS5jYWxsKHAxLHAyLHAzKTsKICAgICAgICAgcmV0dXJuIFJUeXBl
KCk7CiAgICAgICAgfQogIH07CgoKIyA2MzUgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL3Nsb3Qu
aCIKCgoKIAoKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxj
bGFzcyBQND4Kc3RydWN0IENhbGxiYWNrNDpwdWJsaWMgQ2FsbGJhY2tfCiAgewoKICAgdHlwZWRl
ZiBSIFJUeXBlOwoKCgogICB0eXBlZGVmIFJUeXBlICgqRnVuYykodm9pZCosUDEsUDIsUDMsUDQp
OwogICBpbmxpbmUgUlR5cGUgY2FsbCh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFt
ZSBUcmFpdDxQMj46OnJlZiBwMix0eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBU
cmFpdDxQND46OnJlZiBwNCkKICAgICB7cmV0dXJuICgoRnVuYykoZnVuY18pKSgodm9pZCopdGhp
cyxwMSxwMixwMyxwNCk7fQogICBpbmxpbmUgUlR5cGUgb3BlcmF0b3IoKSh0eXBlbmFtZSBUcmFp
dDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMix0eXBlbmFtZSBUcmFpdDxQ
Mz46OnJlZiBwMyx0eXBlbmFtZSBUcmFpdDxQND46OnJlZiBwNCkKICAgICB7cmV0dXJuICgoRnVu
YykoZnVuY18pKSgodm9pZCopdGhpcyxwMSxwMixwMyxwNCk7fQogIH07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQND4KY2xhc3MgU2xvdDQKICAg
OnB1YmxpYyBIYW5kbGU8U2xvdERhdGEsU2xvdEV4dGVuZD4KICB7CiAgIHB1YmxpYzoKICAgICB0
eXBlZGVmIEhhbmRsZTxTbG90RGF0YSxTbG90RXh0ZW5kPiBCYXNlOwogICAgIHR5cGVkZWYgQ2Fs
bGJhY2s0PFIsUDEsUDIsUDMsUDQ+IENhbGxiYWNrOwogICAgIHR5cGVkZWYgdHlwZW5hbWUgQ2Fs
bGJhY2s6OlJUeXBlIFJUeXBlOwogICAgIHR5cGVkZWYgUlR5cGUgKCpGdW5jKSh2b2lkKixQMSxQ
MixQMyxQNCk7CgogICAgIFNsb3REYXRhKiBkYXRhKCkgICAgIGNvbnN0IHtyZXR1cm4gKFNsb3RE
YXRhKikoc2NvcGVfLm9iamVjdCgpKTt9CgogICAgIFNsb3Q0KCkge30KICAgICBTbG90NChTbG90
RGF0YSAqcyk6QmFzZShzKSAgICB7fQogICAgIFNsb3Q0KGNvbnN0IFNsb3Q0JiBzKTpCYXNlKHMu
b2JqKCkpIHt9CgogICAgIGlubGluZSBSVHlwZSBjYWxsKHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVm
IHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6cmVmIHAz
LHR5cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0KSAKICAgICAgICB7CiAgICAgICAgIGlmIChjb25u
ZWN0ZWQoKSkgCiAgICAgICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShkYXRhKCktPmNhbGxiYWNr
KCkpKS5jYWxsKHAxLHAyLHAzLHA0KTsKICAgICAgICAgcmV0dXJuIFJUeXBlKCk7CiAgICAgICAg
fQogICAgIGlubGluZSBSVHlwZSBvcGVyYXRvcigpKHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAx
LHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6cmVmIHAzLHR5
cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0KSAKICAgICAgICB7CiAgICAgICAgIGlmIChjb25uZWN0
ZWQoKSkgCiAgICAgICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShkYXRhKCktPmNhbGxiYWNrKCkp
KS5jYWxsKHAxLHAyLHAzLHA0KTsKICAgICAgICAgcmV0dXJuIFJUeXBlKCk7CiAgICAgICAgfQog
IH07CgoKIyA3MzMgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL3Nsb3QuaCIKCgoKIAoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQ
NT4Kc3RydWN0IENhbGxiYWNrNTpwdWJsaWMgQ2FsbGJhY2tfCiAgewoKICAgdHlwZWRlZiBSIFJU
eXBlOwoKCgogICB0eXBlZGVmIFJUeXBlICgqRnVuYykodm9pZCosUDEsUDIsUDMsUDQsUDUpOwog
ICBpbmxpbmUgUlR5cGUgY2FsbCh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBU
cmFpdDxQMj46OnJlZiBwMix0eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBUcmFp
dDxQND46OnJlZiBwNCx0eXBlbmFtZSBUcmFpdDxQNT46OnJlZiBwNSkKICAgICB7cmV0dXJuICgo
RnVuYykoZnVuY18pKSgodm9pZCopdGhpcyxwMSxwMixwMyxwNCxwNSk7fQogICBpbmxpbmUgUlR5
cGUgb3BlcmF0b3IoKSh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQ
Mj46OnJlZiBwMix0eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBUcmFpdDxQND46
OnJlZiBwNCx0eXBlbmFtZSBUcmFpdDxQNT46OnJlZiBwNSkKICAgICB7cmV0dXJuICgoRnVuYyko
ZnVuY18pKSgodm9pZCopdGhpcyxwMSxwMixwMyxwNCxwNSk7fQogIH07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQNT4KY2xhc3Mg
U2xvdDUKICAgOnB1YmxpYyBIYW5kbGU8U2xvdERhdGEsU2xvdEV4dGVuZD4KICB7CiAgIHB1Ymxp
YzoKICAgICB0eXBlZGVmIEhhbmRsZTxTbG90RGF0YSxTbG90RXh0ZW5kPiBCYXNlOwogICAgIHR5
cGVkZWYgQ2FsbGJhY2s1PFIsUDEsUDIsUDMsUDQsUDU+IENhbGxiYWNrOwogICAgIHR5cGVkZWYg
dHlwZW5hbWUgQ2FsbGJhY2s6OlJUeXBlIFJUeXBlOwogICAgIHR5cGVkZWYgUlR5cGUgKCpGdW5j
KSh2b2lkKixQMSxQMixQMyxQNCxQNSk7CgogICAgIFNsb3REYXRhKiBkYXRhKCkgICAgIGNvbnN0
IHtyZXR1cm4gKFNsb3REYXRhKikoc2NvcGVfLm9iamVjdCgpKTt9CgogICAgIFNsb3Q1KCkge30K
ICAgICBTbG90NShTbG90RGF0YSAqcyk6QmFzZShzKSAgICB7fQogICAgIFNsb3Q1KGNvbnN0IFNs
b3Q1JiBzKTpCYXNlKHMub2JqKCkpIHt9CgogICAgIGlubGluZSBSVHlwZSBjYWxsKHR5cGVuYW1l
IFRyYWl0PFAxPjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRy
YWl0PFAzPjo6cmVmIHAzLHR5cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0LHR5cGVuYW1lIFRyYWl0
PFA1Pjo6cmVmIHA1KSAKICAgICAgICB7CiAgICAgICAgIGlmIChjb25uZWN0ZWQoKSkgCiAgICAg
ICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShkYXRhKCktPmNhbGxiYWNrKCkpKS5jYWxsKHAxLHAy
LHAzLHA0LHA1KTsKICAgICAgICAgcmV0dXJuIFJUeXBlKCk7CiAgICAgICAgfQogICAgIGlubGlu
ZSBSVHlwZSBvcGVyYXRvcigpKHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAxLHR5cGVuYW1lIFRy
YWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6cmVmIHAzLHR5cGVuYW1lIFRyYWl0
PFA0Pjo6cmVmIHA0LHR5cGVuYW1lIFRyYWl0PFA1Pjo6cmVmIHA1KSAKICAgICAgICB7CiAgICAg
ICAgIGlmIChjb25uZWN0ZWQoKSkgCiAgICAgICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShkYXRh
KCktPmNhbGxiYWNrKCkpKS5jYWxsKHAxLHAyLHAzLHA0LHA1KTsKICAgICAgICAgcmV0dXJuIFJU
eXBlKCk7CiAgICAgICAgfQogIH07CgoKIyA4MzEgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL3Ns
b3QuaCIKCgoKIAoKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQ
MyxjbGFzcyBQNCxjbGFzcyBQNSxjbGFzcyBQNj4Kc3RydWN0IENhbGxiYWNrNjpwdWJsaWMgQ2Fs
bGJhY2tfCiAgewoKICAgdHlwZWRlZiBSIFJUeXBlOwoKCgogICB0eXBlZGVmIFJUeXBlICgqRnVu
Yykodm9pZCosUDEsUDIsUDMsUDQsUDUsUDYpOwogICBpbmxpbmUgUlR5cGUgY2FsbCh0eXBlbmFt
ZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMix0eXBlbmFtZSBU
cmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBUcmFpdDxQND46OnJlZiBwNCx0eXBlbmFtZSBUcmFp
dDxQNT46OnJlZiBwNSx0eXBlbmFtZSBUcmFpdDxQNj46OnJlZiBwNikKICAgICB7cmV0dXJuICgo
RnVuYykoZnVuY18pKSgodm9pZCopdGhpcyxwMSxwMixwMyxwNCxwNSxwNik7fQogICBpbmxpbmUg
UlR5cGUgb3BlcmF0b3IoKSh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFp
dDxQMj46OnJlZiBwMix0eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBUcmFpdDxQ
ND46OnJlZiBwNCx0eXBlbmFtZSBUcmFpdDxQNT46OnJlZiBwNSx0eXBlbmFtZSBUcmFpdDxQNj46
OnJlZiBwNikKICAgICB7cmV0dXJuICgoRnVuYykoZnVuY18pKSgodm9pZCopdGhpcyxwMSxwMixw
MyxwNCxwNSxwNik7fQogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixj
bGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQNSxjbGFzcyBQNj4KY2xhc3MgU2xvdDYKICAgOnB1Ymxp
YyBIYW5kbGU8U2xvdERhdGEsU2xvdEV4dGVuZD4KICB7CiAgIHB1YmxpYzoKICAgICB0eXBlZGVm
IEhhbmRsZTxTbG90RGF0YSxTbG90RXh0ZW5kPiBCYXNlOwogICAgIHR5cGVkZWYgQ2FsbGJhY2s2
PFIsUDEsUDIsUDMsUDQsUDUsUDY+IENhbGxiYWNrOwogICAgIHR5cGVkZWYgdHlwZW5hbWUgQ2Fs
bGJhY2s6OlJUeXBlIFJUeXBlOwogICAgIHR5cGVkZWYgUlR5cGUgKCpGdW5jKSh2b2lkKixQMSxQ
MixQMyxQNCxQNSxQNik7CgogICAgIFNsb3REYXRhKiBkYXRhKCkgICAgIGNvbnN0IHtyZXR1cm4g
KFNsb3REYXRhKikoc2NvcGVfLm9iamVjdCgpKTt9CgogICAgIFNsb3Q2KCkge30KICAgICBTbG90
NihTbG90RGF0YSAqcyk6QmFzZShzKSAgICB7fQogICAgIFNsb3Q2KGNvbnN0IFNsb3Q2JiBzKTpC
YXNlKHMub2JqKCkpIHt9CgogICAgIGlubGluZSBSVHlwZSBjYWxsKHR5cGVuYW1lIFRyYWl0PFAx
Pjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6
cmVmIHAzLHR5cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0LHR5cGVuYW1lIFRyYWl0PFA1Pjo6cmVm
IHA1LHR5cGVuYW1lIFRyYWl0PFA2Pjo6cmVmIHA2KSAKICAgICAgICB7CiAgICAgICAgIGlmIChj
b25uZWN0ZWQoKSkgCiAgICAgICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShkYXRhKCktPmNhbGxi
YWNrKCkpKS5jYWxsKHAxLHAyLHAzLHA0LHA1LHA2KTsKICAgICAgICAgcmV0dXJuIFJUeXBlKCk7
CiAgICAgICAgfQogICAgIGlubGluZSBSVHlwZSBvcGVyYXRvcigpKHR5cGVuYW1lIFRyYWl0PFAx
Pjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6
cmVmIHAzLHR5cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0LHR5cGVuYW1lIFRyYWl0PFA1Pjo6cmVm
IHA1LHR5cGVuYW1lIFRyYWl0PFA2Pjo6cmVmIHA2KSAKICAgICAgICB7CiAgICAgICAgIGlmIChj
b25uZWN0ZWQoKSkgCiAgICAgICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShkYXRhKCktPmNhbGxi
YWNrKCkpKS5jYWxsKHAxLHAyLHAzLHA0LHA1LHA2KTsKICAgICAgICAgcmV0dXJuIFJUeXBlKCk7
CiAgICAgICAgfQogIH07CgoKIyA5MjkgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL3Nsb3QuaCIK
CgoKIAoKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFz
cyBQNCxjbGFzcyBQNSxjbGFzcyBQNixjbGFzcyBQNz4Kc3RydWN0IENhbGxiYWNrNzpwdWJsaWMg
Q2FsbGJhY2tfCiAgewoKICAgdHlwZWRlZiBSIFJUeXBlOwoKCgogICB0eXBlZGVmIFJUeXBlICgq
RnVuYykodm9pZCosUDEsUDIsUDMsUDQsUDUsUDYsUDcpOwogICBpbmxpbmUgUlR5cGUgY2FsbCh0
eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMix0eXBl
bmFtZSBUcmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBUcmFpdDxQND46OnJlZiBwNCx0eXBlbmFt
ZSBUcmFpdDxQNT46OnJlZiBwNSx0eXBlbmFtZSBUcmFpdDxQNj46OnJlZiBwNix0eXBlbmFtZSBU
cmFpdDxQNz46OnJlZiBwNykKICAgICB7cmV0dXJuICgoRnVuYykoZnVuY18pKSgodm9pZCopdGhp
cyxwMSxwMixwMyxwNCxwNSxwNixwNyk7fQogICBpbmxpbmUgUlR5cGUgb3BlcmF0b3IoKSh0eXBl
bmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMix0eXBlbmFt
ZSBUcmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBUcmFpdDxQND46OnJlZiBwNCx0eXBlbmFtZSBU
cmFpdDxQNT46OnJlZiBwNSx0eXBlbmFtZSBUcmFpdDxQNj46OnJlZiBwNix0eXBlbmFtZSBUcmFp
dDxQNz46OnJlZiBwNykKICAgICB7cmV0dXJuICgoRnVuYykoZnVuY18pKSgodm9pZCopdGhpcyxw
MSxwMixwMyxwNCxwNSxwNixwNyk7fQogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxj
bGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQNSxjbGFzcyBQNixjbGFzcyBQNz4KY2xh
c3MgU2xvdDcKICAgOnB1YmxpYyBIYW5kbGU8U2xvdERhdGEsU2xvdEV4dGVuZD4KICB7CiAgIHB1
YmxpYzoKICAgICB0eXBlZGVmIEhhbmRsZTxTbG90RGF0YSxTbG90RXh0ZW5kPiBCYXNlOwogICAg
IHR5cGVkZWYgQ2FsbGJhY2s3PFIsUDEsUDIsUDMsUDQsUDUsUDYsUDc+IENhbGxiYWNrOwogICAg
IHR5cGVkZWYgdHlwZW5hbWUgQ2FsbGJhY2s6OlJUeXBlIFJUeXBlOwogICAgIHR5cGVkZWYgUlR5
cGUgKCpGdW5jKSh2b2lkKixQMSxQMixQMyxQNCxQNSxQNixQNyk7CgogICAgIFNsb3REYXRhKiBk
YXRhKCkgICAgIGNvbnN0IHtyZXR1cm4gKFNsb3REYXRhKikoc2NvcGVfLm9iamVjdCgpKTt9Cgog
ICAgIFNsb3Q3KCkge30KICAgICBTbG90NyhTbG90RGF0YSAqcyk6QmFzZShzKSAgICB7fQogICAg
IFNsb3Q3KGNvbnN0IFNsb3Q3JiBzKTpCYXNlKHMub2JqKCkpIHt9CgogICAgIGlubGluZSBSVHlw
ZSBjYWxsKHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVm
IHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6cmVmIHAzLHR5cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0
LHR5cGVuYW1lIFRyYWl0PFA1Pjo6cmVmIHA1LHR5cGVuYW1lIFRyYWl0PFA2Pjo6cmVmIHA2LHR5
cGVuYW1lIFRyYWl0PFA3Pjo6cmVmIHA3KSAKICAgICAgICB7CiAgICAgICAgIGlmIChjb25uZWN0
ZWQoKSkgCiAgICAgICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShkYXRhKCktPmNhbGxiYWNrKCkp
KS5jYWxsKHAxLHAyLHAzLHA0LHA1LHA2LHA3KTsKICAgICAgICAgcmV0dXJuIFJUeXBlKCk7CiAg
ICAgICAgfQogICAgIGlubGluZSBSVHlwZSBvcGVyYXRvcigpKHR5cGVuYW1lIFRyYWl0PFAxPjo6
cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6cmVm
IHAzLHR5cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0LHR5cGVuYW1lIFRyYWl0PFA1Pjo6cmVmIHA1
LHR5cGVuYW1lIFRyYWl0PFA2Pjo6cmVmIHA2LHR5cGVuYW1lIFRyYWl0PFA3Pjo6cmVmIHA3KSAK
ICAgICAgICB7CiAgICAgICAgIGlmIChjb25uZWN0ZWQoKSkgCiAgICAgICAgICAgcmV0dXJuICgo
Q2FsbGJhY2smKShkYXRhKCktPmNhbGxiYWNrKCkpKS5jYWxsKHAxLHAyLHAzLHA0LHA1LHA2LHA3
KTsKICAgICAgICAgcmV0dXJuIFJUeXBlKCk7CiAgICAgICAgfQogIH07CgoKIyAxMDI3ICIvb3B0
L2d0ay9pbmNsdWRlL3NpZ2MrKy9zbG90LmgiCgoKCgoKfSAgCgoKCiMgMjggIi9vcHQvZ3RrL2lu
Y2x1ZGUvc2lnYysrL3NpZ25hbF9zeXN0ZW0uaCIgMgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL3Np
Z2MrKy9vYmplY3Rfc2xvdC5oIiAxCiAKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCm5h
bWVzcGFjZSBTaWdDCnsKCgoKCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBPYmo+CnN0cnVj
dCBPYmplY3RTbG90MF8KICB7CgogICB0eXBlZGVmIFIgUlR5cGU7CgoKCiAgIHR5cGVkZWYgUiAg
ICAgKE9iajo6KkluRnVuYykoKTsKICAgdHlwZWRlZiBSVHlwZSAoT2JqOjoqRnVuYykoKTsKICAg
dHlwZWRlZiBTbG90MDxSPiBTbG90VHlwZTsKICAgdHlwZWRlZiBDYWxsRGF0YU9iajM8dHlwZW5h
bWUgU2xvdFR5cGU6OkZ1bmMsT2JqLEZ1bmM+IENhbGxEYXRhOwoKICAgc3RhdGljIFJUeXBlIGNh
bGxiYWNrKHZvaWQqIGQpCiAgICAgewogICAgICBDYWxsRGF0YSogZGF0YT0oQ2FsbERhdGEqKWQ7
CiAgICAgIHJldHVybiAoKGRhdGEtPm9iaiktPiooZGF0YS0+ZnVuYykpKCk7CiAgICAgfQoKICAg
c3RhdGljIFNsb3REYXRhKiBjcmVhdGUoT2JqKiBvYmosSW5GdW5jIGZ1bmMpCiAgICAgewogICAg
ICBpZiAoIW9iaikgcmV0dXJuIDA7CiAgICAgIFNsb3REYXRhKiB0bXA9bWFuYWdlKG5ldyBTbG90
RGF0YSgpKTsKICAgICAgQ2FsbERhdGEgJmRhdGE9cmVpbnRlcnByZXRfY2FzdDxDYWxsRGF0YSY+
KHRtcC0+ZGF0YV8pOwogICAgICBkYXRhLmNhbGxiYWNrPSZjYWxsYmFjazsKICAgICAgZGF0YS5v
Ymo9b2JqOwogICAgICBkYXRhLmZ1bmM9KEZ1bmMpZnVuYzsKICAgICAgb2JqLT5yZWdpc3Rlcl9k
YXRhKHRtcC0+cmVjZWl2ZXIoKSk7CiAgICAgIHJldHVybiB0bXA7CiAgICAgfQogIH07CgoKCiMg
MTA2ICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9vYmplY3Rfc2xvdC5oIgoKCnRlbXBsYXRlIDxj
bGFzcyBSLGNsYXNzIE8sY2xhc3MgTzI+CmlubGluZSBTbG90MDxSPgogIHNsb3QoTyogJm9iaixS
IChPMjo6KmZ1bmMpKCkpCiAgewogICAgcmV0dXJuIE9iamVjdFNsb3QwXzxSLE8yPgogICAgICAg
ICAgICAgOjpjcmVhdGUob2JqLGZ1bmMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIE8s
Y2xhc3MgTzI+CmlubGluZSBTbG90MDxSPgogIHNsb3QoTyogY29uc3QgJm9iaixSIChPMjo6KmZ1
bmMpKCkpCiAgewogICAgcmV0dXJuIE9iamVjdFNsb3QwXzxSLE8yPgogICAgICAgICAgICAgOjpj
cmVhdGUob2JqLGZ1bmMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIE8sY2xhc3MgTzI+
CmlubGluZSBTbG90MDxSPgogIHNsb3QoTyAmb2JqLFIgKE8yOjoqZnVuYykoKSkKICB7CiAgICBy
ZXR1cm4gT2JqZWN0U2xvdDBfPFIsTzI+CiAgICAgICAgICAgICA6OmNyZWF0ZSgmb2JqLGZ1bmMp
OwogIH0KCgoKIAoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIE9iaj4Kc3RydWN0
IE9iamVjdFNsb3QxXwogIHsKCiAgIHR5cGVkZWYgUiBSVHlwZTsKCgoKICAgdHlwZWRlZiBSICAg
ICAoT2JqOjoqSW5GdW5jKShQMSk7CiAgIHR5cGVkZWYgUlR5cGUgKE9iajo6KkZ1bmMpKFAxKTsK
ICAgdHlwZWRlZiBTbG90MTxSLFAxPiBTbG90VHlwZTsKICAgdHlwZWRlZiBDYWxsRGF0YU9iajM8
dHlwZW5hbWUgU2xvdFR5cGU6OkZ1bmMsT2JqLEZ1bmM+IENhbGxEYXRhOwoKICAgc3RhdGljIFJU
eXBlIGNhbGxiYWNrKHZvaWQqIGQsUDEgcDEpCiAgICAgewogICAgICBDYWxsRGF0YSogZGF0YT0o
Q2FsbERhdGEqKWQ7CiAgICAgIHJldHVybiAoKGRhdGEtPm9iaiktPiooZGF0YS0+ZnVuYykpKHAx
KTsKICAgICB9CgogICBzdGF0aWMgU2xvdERhdGEqIGNyZWF0ZShPYmoqIG9iaixJbkZ1bmMgZnVu
YykKICAgICB7CiAgICAgIGlmICghb2JqKSByZXR1cm4gMDsKICAgICAgU2xvdERhdGEqIHRtcD1t
YW5hZ2UobmV3IFNsb3REYXRhKCkpOwogICAgICBDYWxsRGF0YSAmZGF0YT1yZWludGVycHJldF9j
YXN0PENhbGxEYXRhJj4odG1wLT5kYXRhXyk7CiAgICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNr
OwogICAgICBkYXRhLm9iaj1vYmo7CiAgICAgIGRhdGEuZnVuYz0oRnVuYylmdW5jOwogICAgICBv
YmotPnJlZ2lzdGVyX2RhdGEodG1wLT5yZWNlaXZlcigpKTsKICAgICAgcmV0dXJuIHRtcDsKICAg
ICB9CiAgfTsKCgoKIyAyMDMgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL29iamVjdF9zbG90Lmgi
CgoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgUDEsY2xhc3MgTyxjbGFzcyBPMj4KaW5saW5lIFNs
b3QxPFIsUDE+CiAgc2xvdChPKiAmb2JqLFIgKE8yOjoqZnVuYykoUDEpKQogIHsKICAgIHJldHVy
biBPYmplY3RTbG90MV88UixQMSxPMj4KICAgICAgICAgICAgIDo6Y3JlYXRlKG9iaixmdW5jKTsK
ICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBPLGNsYXNzIE8yPgppbmxpbmUg
U2xvdDE8UixQMT4KICBzbG90KE8qIGNvbnN0ICZvYmosUiAoTzI6OipmdW5jKShQMSkpCiAgewog
ICAgcmV0dXJuIE9iamVjdFNsb3QxXzxSLFAxLE8yPgogICAgICAgICAgICAgOjpjcmVhdGUob2Jq
LGZ1bmMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIE8sY2xhc3MgTzI+
CmlubGluZSBTbG90MTxSLFAxPgogIHNsb3QoTyAmb2JqLFIgKE8yOjoqZnVuYykoUDEpKQogIHsK
ICAgIHJldHVybiBPYmplY3RTbG90MV88UixQMSxPMj4KICAgICAgICAgICAgIDo6Y3JlYXRlKCZv
YmosZnVuYyk7CiAgfQoKCgogCgoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgUDEsY2xhc3MgUDIs
Y2xhc3MgT2JqPgpzdHJ1Y3QgT2JqZWN0U2xvdDJfCiAgewoKICAgdHlwZWRlZiBSIFJUeXBlOwoK
CgogICB0eXBlZGVmIFIgICAgIChPYmo6OipJbkZ1bmMpKFAxLFAyKTsKICAgdHlwZWRlZiBSVHlw
ZSAoT2JqOjoqRnVuYykoUDEsUDIpOwogICB0eXBlZGVmIFNsb3QyPFIsUDEsUDI+IFNsb3RUeXBl
OwogICB0eXBlZGVmIENhbGxEYXRhT2JqMzx0eXBlbmFtZSBTbG90VHlwZTo6RnVuYyxPYmosRnVu
Yz4gQ2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZCxQMSBwMSxQMiBw
MikKICAgICB7CiAgICAgIENhbGxEYXRhKiBkYXRhPShDYWxsRGF0YSopZDsKICAgICAgcmV0dXJu
ICgoZGF0YS0+b2JqKS0+KihkYXRhLT5mdW5jKSkocDEscDIpOwogICAgIH0KCiAgIHN0YXRpYyBT
bG90RGF0YSogY3JlYXRlKE9iaiogb2JqLEluRnVuYyBmdW5jKQogICAgIHsKICAgICAgaWYgKCFv
YmopIHJldHVybiAwOwogICAgICBTbG90RGF0YSogdG1wPW1hbmFnZShuZXcgU2xvdERhdGEoKSk7
CiAgICAgIENhbGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEmPih0bXAtPmRh
dGFfKTsKICAgICAgZGF0YS5jYWxsYmFjaz0mY2FsbGJhY2s7CiAgICAgIGRhdGEub2JqPW9iajsK
ICAgICAgZGF0YS5mdW5jPShGdW5jKWZ1bmM7CiAgICAgIG9iai0+cmVnaXN0ZXJfZGF0YSh0bXAt
PnJlY2VpdmVyKCkpOwogICAgICByZXR1cm4gdG1wOwogICAgIH0KICB9OwoKCgojIDMwMCAiL29w
dC9ndGsvaW5jbHVkZS9zaWdjKysvb2JqZWN0X3Nsb3QuaCIKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixj
bGFzcyBQMSxjbGFzcyBQMixjbGFzcyBPLGNsYXNzIE8yPgppbmxpbmUgU2xvdDI8UixQMSxQMj4K
ICBzbG90KE8qICZvYmosUiAoTzI6OipmdW5jKShQMSxQMikpCiAgewogICAgcmV0dXJuIE9iamVj
dFNsb3QyXzxSLFAxLFAyLE8yPgogICAgICAgICAgICAgOjpjcmVhdGUob2JqLGZ1bmMpOwogIH0K
CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIE8sY2xhc3MgTzI+Cmlu
bGluZSBTbG90MjxSLFAxLFAyPgogIHNsb3QoTyogY29uc3QgJm9iaixSIChPMjo6KmZ1bmMpKFAx
LFAyKSkKICB7CiAgICByZXR1cm4gT2JqZWN0U2xvdDJfPFIsUDEsUDIsTzI+CiAgICAgICAgICAg
ICA6OmNyZWF0ZShvYmosZnVuYyk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgUDEsY2xh
c3MgUDIsY2xhc3MgTyxjbGFzcyBPMj4KaW5saW5lIFNsb3QyPFIsUDEsUDI+CiAgc2xvdChPICZv
YmosUiAoTzI6OipmdW5jKShQMSxQMikpCiAgewogICAgcmV0dXJuIE9iamVjdFNsb3QyXzxSLFAx
LFAyLE8yPgogICAgICAgICAgICAgOjpjcmVhdGUoJm9iaixmdW5jKTsKICB9CgoKCiAKCgp0ZW1w
bGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBPYmo+CnN0cnVj
dCBPYmplY3RTbG90M18KICB7CgogICB0eXBlZGVmIFIgUlR5cGU7CgoKCiAgIHR5cGVkZWYgUiAg
ICAgKE9iajo6KkluRnVuYykoUDEsUDIsUDMpOwogICB0eXBlZGVmIFJUeXBlIChPYmo6OipGdW5j
KShQMSxQMixQMyk7CiAgIHR5cGVkZWYgU2xvdDM8UixQMSxQMixQMz4gU2xvdFR5cGU7CiAgIHR5
cGVkZWYgQ2FsbERhdGFPYmozPHR5cGVuYW1lIFNsb3RUeXBlOjpGdW5jLE9iaixGdW5jPiBDYWxs
RGF0YTsKCiAgIHN0YXRpYyBSVHlwZSBjYWxsYmFjayh2b2lkKiBkLFAxIHAxLFAyIHAyLFAzIHAz
KQogICAgIHsKICAgICAgQ2FsbERhdGEqIGRhdGE9KENhbGxEYXRhKilkOwogICAgICByZXR1cm4g
KChkYXRhLT5vYmopLT4qKGRhdGEtPmZ1bmMpKShwMSxwMixwMyk7CiAgICAgfQoKICAgc3RhdGlj
IFNsb3REYXRhKiBjcmVhdGUoT2JqKiBvYmosSW5GdW5jIGZ1bmMpCiAgICAgewogICAgICBpZiAo
IW9iaikgcmV0dXJuIDA7CiAgICAgIFNsb3REYXRhKiB0bXA9bWFuYWdlKG5ldyBTbG90RGF0YSgp
KTsKICAgICAgQ2FsbERhdGEgJmRhdGE9cmVpbnRlcnByZXRfY2FzdDxDYWxsRGF0YSY+KHRtcC0+
ZGF0YV8pOwogICAgICBkYXRhLmNhbGxiYWNrPSZjYWxsYmFjazsKICAgICAgZGF0YS5vYmo9b2Jq
OwogICAgICBkYXRhLmZ1bmM9KEZ1bmMpZnVuYzsKICAgICAgb2JqLT5yZWdpc3Rlcl9kYXRhKHRt
cC0+cmVjZWl2ZXIoKSk7CiAgICAgIHJldHVybiB0bXA7CiAgICAgfQogIH07CgoKCiMgMzk3ICIv
b3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9vYmplY3Rfc2xvdC5oIgoKCnRlbXBsYXRlIDxjbGFzcyBS
LGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIE8sY2xhc3MgTzI+CmlubGluZSBTbG90
MzxSLFAxLFAyLFAzPgogIHNsb3QoTyogJm9iaixSIChPMjo6KmZ1bmMpKFAxLFAyLFAzKSkKICB7
CiAgICByZXR1cm4gT2JqZWN0U2xvdDNfPFIsUDEsUDIsUDMsTzI+CiAgICAgICAgICAgICA6OmNy
ZWF0ZShvYmosZnVuYyk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgUDEsY2xhc3MgUDIs
Y2xhc3MgUDMsY2xhc3MgTyxjbGFzcyBPMj4KaW5saW5lIFNsb3QzPFIsUDEsUDIsUDM+CiAgc2xv
dChPKiBjb25zdCAmb2JqLFIgKE8yOjoqZnVuYykoUDEsUDIsUDMpKQogIHsKICAgIHJldHVybiBP
YmplY3RTbG90M188UixQMSxQMixQMyxPMj4KICAgICAgICAgICAgIDo6Y3JlYXRlKG9iaixmdW5j
KTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFz
cyBPLGNsYXNzIE8yPgppbmxpbmUgU2xvdDM8UixQMSxQMixQMz4KICBzbG90KE8gJm9iaixSIChP
Mjo6KmZ1bmMpKFAxLFAyLFAzKSkKICB7CiAgICByZXR1cm4gT2JqZWN0U2xvdDNfPFIsUDEsUDIs
UDMsTzI+CiAgICAgICAgICAgICA6OmNyZWF0ZSgmb2JqLGZ1bmMpOwogIH0KCgoKIAoKCnRlbXBs
YXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0LGNsYXNzIE9i
aj4Kc3RydWN0IE9iamVjdFNsb3Q0XwogIHsKCiAgIHR5cGVkZWYgUiBSVHlwZTsKCgoKICAgdHlw
ZWRlZiBSICAgICAoT2JqOjoqSW5GdW5jKShQMSxQMixQMyxQNCk7CiAgIHR5cGVkZWYgUlR5cGUg
KE9iajo6KkZ1bmMpKFAxLFAyLFAzLFA0KTsKICAgdHlwZWRlZiBTbG90NDxSLFAxLFAyLFAzLFA0
PiBTbG90VHlwZTsKICAgdHlwZWRlZiBDYWxsRGF0YU9iajM8dHlwZW5hbWUgU2xvdFR5cGU6OkZ1
bmMsT2JqLEZ1bmM+IENhbGxEYXRhOwoKICAgc3RhdGljIFJUeXBlIGNhbGxiYWNrKHZvaWQqIGQs
UDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQpCiAgICAgewogICAgICBDYWxsRGF0YSogZGF0YT0oQ2Fs
bERhdGEqKWQ7CiAgICAgIHJldHVybiAoKGRhdGEtPm9iaiktPiooZGF0YS0+ZnVuYykpKHAxLHAy
LHAzLHA0KTsKICAgICB9CgogICBzdGF0aWMgU2xvdERhdGEqIGNyZWF0ZShPYmoqIG9iaixJbkZ1
bmMgZnVuYykKICAgICB7CiAgICAgIGlmICghb2JqKSByZXR1cm4gMDsKICAgICAgU2xvdERhdGEq
IHRtcD1tYW5hZ2UobmV3IFNsb3REYXRhKCkpOwogICAgICBDYWxsRGF0YSAmZGF0YT1yZWludGVy
cHJldF9jYXN0PENhbGxEYXRhJj4odG1wLT5kYXRhXyk7CiAgICAgIGRhdGEuY2FsbGJhY2s9JmNh
bGxiYWNrOwogICAgICBkYXRhLm9iaj1vYmo7CiAgICAgIGRhdGEuZnVuYz0oRnVuYylmdW5jOwog
ICAgICBvYmotPnJlZ2lzdGVyX2RhdGEodG1wLT5yZWNlaXZlcigpKTsKICAgICAgcmV0dXJuIHRt
cDsKICAgICB9CiAgfTsKCgoKIyA0OTQgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL29iamVjdF9z
bG90LmgiCgoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsY2xh
c3MgUDQsY2xhc3MgTyxjbGFzcyBPMj4KaW5saW5lIFNsb3Q0PFIsUDEsUDIsUDMsUDQ+CiAgc2xv
dChPKiAmb2JqLFIgKE8yOjoqZnVuYykoUDEsUDIsUDMsUDQpKQogIHsKICAgIHJldHVybiBPYmpl
Y3RTbG90NF88UixQMSxQMixQMyxQNCxPMj4KICAgICAgICAgICAgIDo6Y3JlYXRlKG9iaixmdW5j
KTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFz
cyBQNCxjbGFzcyBPLGNsYXNzIE8yPgppbmxpbmUgU2xvdDQ8UixQMSxQMixQMyxQND4KICBzbG90
KE8qIGNvbnN0ICZvYmosUiAoTzI6OipmdW5jKShQMSxQMixQMyxQNCkpCiAgewogICAgcmV0dXJu
IE9iamVjdFNsb3Q0XzxSLFAxLFAyLFAzLFA0LE8yPgogICAgICAgICAgICAgOjpjcmVhdGUob2Jq
LGZ1bmMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAz
LGNsYXNzIFA0LGNsYXNzIE8sY2xhc3MgTzI+CmlubGluZSBTbG90NDxSLFAxLFAyLFAzLFA0Pgog
IHNsb3QoTyAmb2JqLFIgKE8yOjoqZnVuYykoUDEsUDIsUDMsUDQpKQogIHsKICAgIHJldHVybiBP
YmplY3RTbG90NF88UixQMSxQMixQMyxQNCxPMj4KICAgICAgICAgICAgIDo6Y3JlYXRlKCZvYmos
ZnVuYyk7CiAgfQoKCgogCgoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgUDEsY2xhc3MgUDIsY2xh
c3MgUDMsY2xhc3MgUDQsY2xhc3MgUDUsY2xhc3MgT2JqPgpzdHJ1Y3QgT2JqZWN0U2xvdDVfCiAg
ewoKICAgdHlwZWRlZiBSIFJUeXBlOwoKCgogICB0eXBlZGVmIFIgICAgIChPYmo6OipJbkZ1bmMp
KFAxLFAyLFAzLFA0LFA1KTsKICAgdHlwZWRlZiBSVHlwZSAoT2JqOjoqRnVuYykoUDEsUDIsUDMs
UDQsUDUpOwogICB0eXBlZGVmIFNsb3Q1PFIsUDEsUDIsUDMsUDQsUDU+IFNsb3RUeXBlOwogICB0
eXBlZGVmIENhbGxEYXRhT2JqMzx0eXBlbmFtZSBTbG90VHlwZTo6RnVuYyxPYmosRnVuYz4gQ2Fs
bERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMixQMyBw
MyxQNCBwNCxQNSBwNSkKICAgICB7CiAgICAgIENhbGxEYXRhKiBkYXRhPShDYWxsRGF0YSopZDsK
ICAgICAgcmV0dXJuICgoZGF0YS0+b2JqKS0+KihkYXRhLT5mdW5jKSkocDEscDIscDMscDQscDUp
OwogICAgIH0KCiAgIHN0YXRpYyBTbG90RGF0YSogY3JlYXRlKE9iaiogb2JqLEluRnVuYyBmdW5j
KQogICAgIHsKICAgICAgaWYgKCFvYmopIHJldHVybiAwOwogICAgICBTbG90RGF0YSogdG1wPW1h
bmFnZShuZXcgU2xvdERhdGEoKSk7CiAgICAgIENhbGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nh
c3Q8Q2FsbERhdGEmPih0bXAtPmRhdGFfKTsKICAgICAgZGF0YS5jYWxsYmFjaz0mY2FsbGJhY2s7
CiAgICAgIGRhdGEub2JqPW9iajsKICAgICAgZGF0YS5mdW5jPShGdW5jKWZ1bmM7CiAgICAgIG9i
ai0+cmVnaXN0ZXJfZGF0YSh0bXAtPnJlY2VpdmVyKCkpOwogICAgICByZXR1cm4gdG1wOwogICAg
IH0KICB9OwoKCgojIDU5MSAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvb2JqZWN0X3Nsb3QuaCIK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxj
bGFzcyBQNSxjbGFzcyBPLGNsYXNzIE8yPgppbmxpbmUgU2xvdDU8UixQMSxQMixQMyxQNCxQNT4K
ICBzbG90KE8qICZvYmosUiAoTzI6OipmdW5jKShQMSxQMixQMyxQNCxQNSkpCiAgewogICAgcmV0
dXJuIE9iamVjdFNsb3Q1XzxSLFAxLFAyLFAzLFA0LFA1LE8yPgogICAgICAgICAgICAgOjpjcmVh
dGUob2JqLGZ1bmMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNs
YXNzIFAzLGNsYXNzIFA0LGNsYXNzIFA1LGNsYXNzIE8sY2xhc3MgTzI+CmlubGluZSBTbG90NTxS
LFAxLFAyLFAzLFA0LFA1PgogIHNsb3QoTyogY29uc3QgJm9iaixSIChPMjo6KmZ1bmMpKFAxLFAy
LFAzLFA0LFA1KSkKICB7CiAgICByZXR1cm4gT2JqZWN0U2xvdDVfPFIsUDEsUDIsUDMsUDQsUDUs
TzI+CiAgICAgICAgICAgICA6OmNyZWF0ZShvYmosZnVuYyk7CiAgfQoKdGVtcGxhdGUgPGNsYXNz
IFIsY2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsY2xhc3MgUDQsY2xhc3MgUDUsY2xhc3MgTyxj
bGFzcyBPMj4KaW5saW5lIFNsb3Q1PFIsUDEsUDIsUDMsUDQsUDU+CiAgc2xvdChPICZvYmosUiAo
TzI6OipmdW5jKShQMSxQMixQMyxQNCxQNSkpCiAgewogICAgcmV0dXJuIE9iamVjdFNsb3Q1XzxS
LFAxLFAyLFAzLFA0LFA1LE8yPgogICAgICAgICAgICAgOjpjcmVhdGUoJm9iaixmdW5jKTsKICB9
CgoKCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFz
cyBQNCxjbGFzcyBQNSxjbGFzcyBQNixjbGFzcyBPYmo+CnN0cnVjdCBPYmplY3RTbG90Nl8KICB7
CgogICB0eXBlZGVmIFIgUlR5cGU7CgoKCiAgIHR5cGVkZWYgUiAgICAgKE9iajo6KkluRnVuYyko
UDEsUDIsUDMsUDQsUDUsUDYpOwogICB0eXBlZGVmIFJUeXBlIChPYmo6OipGdW5jKShQMSxQMixQ
MyxQNCxQNSxQNik7CiAgIHR5cGVkZWYgU2xvdDY8UixQMSxQMixQMyxQNCxQNSxQNj4gU2xvdFR5
cGU7CiAgIHR5cGVkZWYgQ2FsbERhdGFPYmozPHR5cGVuYW1lIFNsb3RUeXBlOjpGdW5jLE9iaixG
dW5jPiBDYWxsRGF0YTsKCiAgIHN0YXRpYyBSVHlwZSBjYWxsYmFjayh2b2lkKiBkLFAxIHAxLFAy
IHAyLFAzIHAzLFA0IHA0LFA1IHA1LFA2IHA2KQogICAgIHsKICAgICAgQ2FsbERhdGEqIGRhdGE9
KENhbGxEYXRhKilkOwogICAgICByZXR1cm4gKChkYXRhLT5vYmopLT4qKGRhdGEtPmZ1bmMpKShw
MSxwMixwMyxwNCxwNSxwNik7CiAgICAgfQoKICAgc3RhdGljIFNsb3REYXRhKiBjcmVhdGUoT2Jq
KiBvYmosSW5GdW5jIGZ1bmMpCiAgICAgewogICAgICBpZiAoIW9iaikgcmV0dXJuIDA7CiAgICAg
IFNsb3REYXRhKiB0bXA9bWFuYWdlKG5ldyBTbG90RGF0YSgpKTsKICAgICAgQ2FsbERhdGEgJmRh
dGE9cmVpbnRlcnByZXRfY2FzdDxDYWxsRGF0YSY+KHRtcC0+ZGF0YV8pOwogICAgICBkYXRhLmNh
bGxiYWNrPSZjYWxsYmFjazsKICAgICAgZGF0YS5vYmo9b2JqOwogICAgICBkYXRhLmZ1bmM9KEZ1
bmMpZnVuYzsKICAgICAgb2JqLT5yZWdpc3Rlcl9kYXRhKHRtcC0+cmVjZWl2ZXIoKSk7CiAgICAg
IHJldHVybiB0bXA7CiAgICAgfQogIH07CgoKCiMgNjg4ICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2Mr
Ky9vYmplY3Rfc2xvdC5oIgoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNs
YXNzIFAzLGNsYXNzIFA0LGNsYXNzIFA1LGNsYXNzIFA2LGNsYXNzIE8sY2xhc3MgTzI+CmlubGlu
ZSBTbG90NjxSLFAxLFAyLFAzLFA0LFA1LFA2PgogIHNsb3QoTyogJm9iaixSIChPMjo6KmZ1bmMp
KFAxLFAyLFAzLFA0LFA1LFA2KSkKICB7CiAgICByZXR1cm4gT2JqZWN0U2xvdDZfPFIsUDEsUDIs
UDMsUDQsUDUsUDYsTzI+CiAgICAgICAgICAgICA6OmNyZWF0ZShvYmosZnVuYyk7CiAgfQoKdGVt
cGxhdGUgPGNsYXNzIFIsY2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsY2xhc3MgUDQsY2xhc3Mg
UDUsY2xhc3MgUDYsY2xhc3MgTyxjbGFzcyBPMj4KaW5saW5lIFNsb3Q2PFIsUDEsUDIsUDMsUDQs
UDUsUDY+CiAgc2xvdChPKiBjb25zdCAmb2JqLFIgKE8yOjoqZnVuYykoUDEsUDIsUDMsUDQsUDUs
UDYpKQogIHsKICAgIHJldHVybiBPYmplY3RTbG90Nl88UixQMSxQMixQMyxQNCxQNSxQNixPMj4K
ICAgICAgICAgICAgIDo6Y3JlYXRlKG9iaixmdW5jKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixj
bGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQNSxjbGFzcyBQNixjbGFz
cyBPLGNsYXNzIE8yPgppbmxpbmUgU2xvdDY8UixQMSxQMixQMyxQNCxQNSxQNj4KICBzbG90KE8g
Jm9iaixSIChPMjo6KmZ1bmMpKFAxLFAyLFAzLFA0LFA1LFA2KSkKICB7CiAgICByZXR1cm4gT2Jq
ZWN0U2xvdDZfPFIsUDEsUDIsUDMsUDQsUDUsUDYsTzI+CiAgICAgICAgICAgICA6OmNyZWF0ZSgm
b2JqLGZ1bmMpOwogIH0KCgoKIAoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAy
LGNsYXNzIFAzLGNsYXNzIFA0LGNsYXNzIFA1LGNsYXNzIFA2LGNsYXNzIFA3LGNsYXNzIE9iaj4K
c3RydWN0IE9iamVjdFNsb3Q3XwogIHsKCiAgIHR5cGVkZWYgUiBSVHlwZTsKCgoKICAgdHlwZWRl
ZiBSICAgICAoT2JqOjoqSW5GdW5jKShQMSxQMixQMyxQNCxQNSxQNixQNyk7CiAgIHR5cGVkZWYg
UlR5cGUgKE9iajo6KkZ1bmMpKFAxLFAyLFAzLFA0LFA1LFA2LFA3KTsKICAgdHlwZWRlZiBTbG90
NzxSLFAxLFAyLFAzLFA0LFA1LFA2LFA3PiBTbG90VHlwZTsKICAgdHlwZWRlZiBDYWxsRGF0YU9i
ajM8dHlwZW5hbWUgU2xvdFR5cGU6OkZ1bmMsT2JqLEZ1bmM+IENhbGxEYXRhOwoKICAgc3RhdGlj
IFJUeXBlIGNhbGxiYWNrKHZvaWQqIGQsUDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQsUDUgcDUsUDYg
cDYsUDcgcDcpCiAgICAgewogICAgICBDYWxsRGF0YSogZGF0YT0oQ2FsbERhdGEqKWQ7CiAgICAg
IHJldHVybiAoKGRhdGEtPm9iaiktPiooZGF0YS0+ZnVuYykpKHAxLHAyLHAzLHA0LHA1LHA2LHA3
KTsKICAgICB9CgogICBzdGF0aWMgU2xvdERhdGEqIGNyZWF0ZShPYmoqIG9iaixJbkZ1bmMgZnVu
YykKICAgICB7CiAgICAgIGlmICghb2JqKSByZXR1cm4gMDsKICAgICAgU2xvdERhdGEqIHRtcD1t
YW5hZ2UobmV3IFNsb3REYXRhKCkpOwogICAgICBDYWxsRGF0YSAmZGF0YT1yZWludGVycHJldF9j
YXN0PENhbGxEYXRhJj4odG1wLT5kYXRhXyk7CiAgICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNr
OwogICAgICBkYXRhLm9iaj1vYmo7CiAgICAgIGRhdGEuZnVuYz0oRnVuYylmdW5jOwogICAgICBv
YmotPnJlZ2lzdGVyX2RhdGEodG1wLT5yZWNlaXZlcigpKTsKICAgICAgcmV0dXJuIHRtcDsKICAg
ICB9CiAgfTsKCgoKIyA3ODUgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL29iamVjdF9zbG90Lmgi
CgoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsY2xhc3MgUDQs
Y2xhc3MgUDUsY2xhc3MgUDYsY2xhc3MgUDcsY2xhc3MgTyxjbGFzcyBPMj4KaW5saW5lIFNsb3Q3
PFIsUDEsUDIsUDMsUDQsUDUsUDYsUDc+CiAgc2xvdChPKiAmb2JqLFIgKE8yOjoqZnVuYykoUDEs
UDIsUDMsUDQsUDUsUDYsUDcpKQogIHsKICAgIHJldHVybiBPYmplY3RTbG90N188UixQMSxQMixQ
MyxQNCxQNSxQNixQNyxPMj4KICAgICAgICAgICAgIDo6Y3JlYXRlKG9iaixmdW5jKTsKICB9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFz
cyBQNSxjbGFzcyBQNixjbGFzcyBQNyxjbGFzcyBPLGNsYXNzIE8yPgppbmxpbmUgU2xvdDc8UixQ
MSxQMixQMyxQNCxQNSxQNixQNz4KICBzbG90KE8qIGNvbnN0ICZvYmosUiAoTzI6OipmdW5jKShQ
MSxQMixQMyxQNCxQNSxQNixQNykpCiAgewogICAgcmV0dXJuIE9iamVjdFNsb3Q3XzxSLFAxLFAy
LFAzLFA0LFA1LFA2LFA3LE8yPgogICAgICAgICAgICAgOjpjcmVhdGUob2JqLGZ1bmMpOwogIH0K
CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0LGNs
YXNzIFA1LGNsYXNzIFA2LGNsYXNzIFA3LGNsYXNzIE8sY2xhc3MgTzI+CmlubGluZSBTbG90NzxS
LFAxLFAyLFAzLFA0LFA1LFA2LFA3PgogIHNsb3QoTyAmb2JqLFIgKE8yOjoqZnVuYykoUDEsUDIs
UDMsUDQsUDUsUDYsUDcpKQogIHsKICAgIHJldHVybiBPYmplY3RTbG90N188UixQMSxQMixQMyxQ
NCxQNSxQNixQNyxPMj4KICAgICAgICAgICAgIDo6Y3JlYXRlKCZvYmosZnVuYyk7CiAgfQoKCgoK
Cn0gIAoKCgojIDI5ICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9zaWduYWxfc3lzdGVtLmgiIDIK
CiMgMSAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvZnVuY19zbG90LmgiIDEKIAogCgoKCgoKIAoK
CgoKCgoKCgoKCgoKCgpuYW1lc3BhY2UgU2lnQwp7CgoKIAogCgoKCiAKCgp0ZW1wbGF0ZSA8Y2xh
c3MgUj4Kc3RydWN0IEZ1bmNTbG90MF8KICB7CgogICB0eXBlZGVmIFIgUlR5cGU7CgoKCiAgIHR5
cGVkZWYgUiAgICAgKCpJbkZ1bmMpKCk7CiAgIHR5cGVkZWYgUlR5cGUgKCpGdW5jKSgpOwogICB0
eXBlZGVmIFNsb3QwPFI+IFNsb3RUeXBlOwoKICAgdHlwZWRlZiBDYWxsRGF0YUZ1bmM8dHlwZW5h
bWUgU2xvdFR5cGU6OkZ1bmMsRnVuYz4gQ2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2FsbGJh
Y2sodm9pZCogZGF0YSkKICAgICB7CiAgICAgIHJldHVybiAoKChDYWxsRGF0YSopZGF0YSktPmZ1
bmMpKCk7CiAgICAgfQoKICAgc3RhdGljIFNsb3REYXRhKiBjcmVhdGUoSW5GdW5jIGZ1bmMpCiAg
ICAgewogICAgICBTbG90RGF0YSogdG1wPW1hbmFnZShuZXcgU2xvdERhdGEoKSk7CiAgICAgIENh
bGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEmPih0bXAtPmRhdGFfKTsKICAg
ICAgZGF0YS5jYWxsYmFjaz0mY2FsbGJhY2s7CiAgICAgIGRhdGEuZnVuYz0oRnVuYylmdW5jOwog
ICAgICByZXR1cm4gdG1wOwogICAgIH0KICB9OwoKCiMgOTQgIi9vcHQvZ3RrL2luY2x1ZGUvc2ln
YysrL2Z1bmNfc2xvdC5oIgoKCnRlbXBsYXRlIDxjbGFzcyBSPgppbmxpbmUgU2xvdDA8Uj4KICBz
bG90KFIgKCpmdW5jKSgpKQogIHsKICAgcmV0dXJuIEZ1bmNTbG90MF88Uj46OmNyZWF0ZShmdW5j
KTsKICB9CgoKIAoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxPgpzdHJ1Y3QgRnVuY1Nsb3Qx
XwogIHsKCiAgIHR5cGVkZWYgUiBSVHlwZTsKCgoKICAgdHlwZWRlZiBSICAgICAoKkluRnVuYyko
UDEpOwogICB0eXBlZGVmIFJUeXBlICgqRnVuYykoUDEpOwogICB0eXBlZGVmIFNsb3QxPFIsUDE+
IFNsb3RUeXBlOwoKICAgdHlwZWRlZiBDYWxsRGF0YUZ1bmM8dHlwZW5hbWUgU2xvdFR5cGU6OkZ1
bmMsRnVuYz4gQ2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZGF0YSxQ
MSBwMSkKICAgICB7CiAgICAgIHJldHVybiAoKChDYWxsRGF0YSopZGF0YSktPmZ1bmMpKHAxKTsK
ICAgICB9CgogICBzdGF0aWMgU2xvdERhdGEqIGNyZWF0ZShJbkZ1bmMgZnVuYykKICAgICB7CiAg
ICAgIFNsb3REYXRhKiB0bXA9bWFuYWdlKG5ldyBTbG90RGF0YSgpKTsKICAgICAgQ2FsbERhdGEg
JmRhdGE9cmVpbnRlcnByZXRfY2FzdDxDYWxsRGF0YSY+KHRtcC0+ZGF0YV8pOwogICAgICBkYXRh
LmNhbGxiYWNrPSZjYWxsYmFjazsKICAgICAgZGF0YS5mdW5jPShGdW5jKWZ1bmM7CiAgICAgIHJl
dHVybiB0bXA7CiAgICAgfQogIH07CgoKIyAxNjUgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL2Z1
bmNfc2xvdC5oIgoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxPgppbmxpbmUgU2xvdDE8UixQ
MT4KICBzbG90KFIgKCpmdW5jKShQMSkpCiAgewogICByZXR1cm4gRnVuY1Nsb3QxXzxSLFAxPjo6
Y3JlYXRlKGZ1bmMpOwogIH0KCgogCgoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgUDEsY2xhc3Mg
UDI+CnN0cnVjdCBGdW5jU2xvdDJfCiAgewoKICAgdHlwZWRlZiBSIFJUeXBlOwoKCgogICB0eXBl
ZGVmIFIgICAgICgqSW5GdW5jKShQMSxQMik7CiAgIHR5cGVkZWYgUlR5cGUgKCpGdW5jKShQMSxQ
Mik7CiAgIHR5cGVkZWYgU2xvdDI8UixQMSxQMj4gU2xvdFR5cGU7CgogICB0eXBlZGVmIENhbGxE
YXRhRnVuYzx0eXBlbmFtZSBTbG90VHlwZTo6RnVuYyxGdW5jPiBDYWxsRGF0YTsKCiAgIHN0YXRp
YyBSVHlwZSBjYWxsYmFjayh2b2lkKiBkYXRhLFAxIHAxLFAyIHAyKQogICAgIHsKICAgICAgcmV0
dXJuICgoKENhbGxEYXRhKilkYXRhKS0+ZnVuYykocDEscDIpOwogICAgIH0KCiAgIHN0YXRpYyBT
bG90RGF0YSogY3JlYXRlKEluRnVuYyBmdW5jKQogICAgIHsKICAgICAgU2xvdERhdGEqIHRtcD1t
YW5hZ2UobmV3IFNsb3REYXRhKCkpOwogICAgICBDYWxsRGF0YSAmZGF0YT1yZWludGVycHJldF9j
YXN0PENhbGxEYXRhJj4odG1wLT5kYXRhXyk7CiAgICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNr
OwogICAgICBkYXRhLmZ1bmM9KEZ1bmMpZnVuYzsKICAgICAgcmV0dXJuIHRtcDsKICAgICB9CiAg
fTsKCgojIDIzNiAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvZnVuY19zbG90LmgiCgoKdGVtcGxh
dGUgPGNsYXNzIFIsY2xhc3MgUDEsY2xhc3MgUDI+CmlubGluZSBTbG90MjxSLFAxLFAyPgogIHNs
b3QoUiAoKmZ1bmMpKFAxLFAyKSkKICB7CiAgIHJldHVybiBGdW5jU2xvdDJfPFIsUDEsUDI+Ojpj
cmVhdGUoZnVuYyk7CiAgfQoKCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQ
MixjbGFzcyBQMz4Kc3RydWN0IEZ1bmNTbG90M18KICB7CgogICB0eXBlZGVmIFIgUlR5cGU7CgoK
CiAgIHR5cGVkZWYgUiAgICAgKCpJbkZ1bmMpKFAxLFAyLFAzKTsKICAgdHlwZWRlZiBSVHlwZSAo
KkZ1bmMpKFAxLFAyLFAzKTsKICAgdHlwZWRlZiBTbG90MzxSLFAxLFAyLFAzPiBTbG90VHlwZTsK
CiAgIHR5cGVkZWYgQ2FsbERhdGFGdW5jPHR5cGVuYW1lIFNsb3RUeXBlOjpGdW5jLEZ1bmM+IENh
bGxEYXRhOwoKICAgc3RhdGljIFJUeXBlIGNhbGxiYWNrKHZvaWQqIGRhdGEsUDEgcDEsUDIgcDIs
UDMgcDMpCiAgICAgewogICAgICByZXR1cm4gKCgoQ2FsbERhdGEqKWRhdGEpLT5mdW5jKShwMSxw
MixwMyk7CiAgICAgfQoKICAgc3RhdGljIFNsb3REYXRhKiBjcmVhdGUoSW5GdW5jIGZ1bmMpCiAg
ICAgewogICAgICBTbG90RGF0YSogdG1wPW1hbmFnZShuZXcgU2xvdERhdGEoKSk7CiAgICAgIENh
bGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEmPih0bXAtPmRhdGFfKTsKICAg
ICAgZGF0YS5jYWxsYmFjaz0mY2FsbGJhY2s7CiAgICAgIGRhdGEuZnVuYz0oRnVuYylmdW5jOwog
ICAgICByZXR1cm4gdG1wOwogICAgIH0KICB9OwoKCiMgMzA3ICIvb3B0L2d0ay9pbmNsdWRlL3Np
Z2MrKy9mdW5jX3Nsb3QuaCIKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixj
bGFzcyBQMz4KaW5saW5lIFNsb3QzPFIsUDEsUDIsUDM+CiAgc2xvdChSICgqZnVuYykoUDEsUDIs
UDMpKQogIHsKICAgcmV0dXJuIEZ1bmNTbG90M188UixQMSxQMixQMz46OmNyZWF0ZShmdW5jKTsK
ICB9CgoKIAoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNs
YXNzIFA0PgpzdHJ1Y3QgRnVuY1Nsb3Q0XwogIHsKCiAgIHR5cGVkZWYgUiBSVHlwZTsKCgoKICAg
dHlwZWRlZiBSICAgICAoKkluRnVuYykoUDEsUDIsUDMsUDQpOwogICB0eXBlZGVmIFJUeXBlICgq
RnVuYykoUDEsUDIsUDMsUDQpOwogICB0eXBlZGVmIFNsb3Q0PFIsUDEsUDIsUDMsUDQ+IFNsb3RU
eXBlOwoKICAgdHlwZWRlZiBDYWxsRGF0YUZ1bmM8dHlwZW5hbWUgU2xvdFR5cGU6OkZ1bmMsRnVu
Yz4gQ2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZGF0YSxQMSBwMSxQ
MiBwMixQMyBwMyxQNCBwNCkKICAgICB7CiAgICAgIHJldHVybiAoKChDYWxsRGF0YSopZGF0YSkt
PmZ1bmMpKHAxLHAyLHAzLHA0KTsKICAgICB9CgogICBzdGF0aWMgU2xvdERhdGEqIGNyZWF0ZShJ
bkZ1bmMgZnVuYykKICAgICB7CiAgICAgIFNsb3REYXRhKiB0bXA9bWFuYWdlKG5ldyBTbG90RGF0
YSgpKTsKICAgICAgQ2FsbERhdGEgJmRhdGE9cmVpbnRlcnByZXRfY2FzdDxDYWxsRGF0YSY+KHRt
cC0+ZGF0YV8pOwogICAgICBkYXRhLmNhbGxiYWNrPSZjYWxsYmFjazsKICAgICAgZGF0YS5mdW5j
PShGdW5jKWZ1bmM7CiAgICAgIHJldHVybiB0bXA7CiAgICAgfQogIH07CgoKIyAzNzggIi9vcHQv
Z3RrL2luY2x1ZGUvc2lnYysrL2Z1bmNfc2xvdC5oIgoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNz
IFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0PgppbmxpbmUgU2xvdDQ8UixQMSxQMixQMyxQ
ND4KICBzbG90KFIgKCpmdW5jKShQMSxQMixQMyxQNCkpCiAgewogICByZXR1cm4gRnVuY1Nsb3Q0
XzxSLFAxLFAyLFAzLFA0Pjo6Y3JlYXRlKGZ1bmMpOwogIH0KCgogCgoKdGVtcGxhdGUgPGNsYXNz
IFIsY2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsY2xhc3MgUDQsY2xhc3MgUDU+CnN0cnVjdCBG
dW5jU2xvdDVfCiAgewoKICAgdHlwZWRlZiBSIFJUeXBlOwoKCgogICB0eXBlZGVmIFIgICAgICgq
SW5GdW5jKShQMSxQMixQMyxQNCxQNSk7CiAgIHR5cGVkZWYgUlR5cGUgKCpGdW5jKShQMSxQMixQ
MyxQNCxQNSk7CiAgIHR5cGVkZWYgU2xvdDU8UixQMSxQMixQMyxQNCxQNT4gU2xvdFR5cGU7Cgog
ICB0eXBlZGVmIENhbGxEYXRhRnVuYzx0eXBlbmFtZSBTbG90VHlwZTo6RnVuYyxGdW5jPiBDYWxs
RGF0YTsKCiAgIHN0YXRpYyBSVHlwZSBjYWxsYmFjayh2b2lkKiBkYXRhLFAxIHAxLFAyIHAyLFAz
IHAzLFA0IHA0LFA1IHA1KQogICAgIHsKICAgICAgcmV0dXJuICgoKENhbGxEYXRhKilkYXRhKS0+
ZnVuYykocDEscDIscDMscDQscDUpOwogICAgIH0KCiAgIHN0YXRpYyBTbG90RGF0YSogY3JlYXRl
KEluRnVuYyBmdW5jKQogICAgIHsKICAgICAgU2xvdERhdGEqIHRtcD1tYW5hZ2UobmV3IFNsb3RE
YXRhKCkpOwogICAgICBDYWxsRGF0YSAmZGF0YT1yZWludGVycHJldF9jYXN0PENhbGxEYXRhJj4o
dG1wLT5kYXRhXyk7CiAgICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNrOwogICAgICBkYXRhLmZ1
bmM9KEZ1bmMpZnVuYzsKICAgICAgcmV0dXJuIHRtcDsKICAgICB9CiAgfTsKCgojIDQ0OSAiL29w
dC9ndGsvaW5jbHVkZS9zaWdjKysvZnVuY19zbG90LmgiCgoKdGVtcGxhdGUgPGNsYXNzIFIsY2xh
c3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsY2xhc3MgUDQsY2xhc3MgUDU+CmlubGluZSBTbG90NTxS
LFAxLFAyLFAzLFA0LFA1PgogIHNsb3QoUiAoKmZ1bmMpKFAxLFAyLFAzLFA0LFA1KSkKICB7CiAg
IHJldHVybiBGdW5jU2xvdDVfPFIsUDEsUDIsUDMsUDQsUDU+OjpjcmVhdGUoZnVuYyk7CiAgfQoK
CiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQ
NCxjbGFzcyBQNSxjbGFzcyBQNj4Kc3RydWN0IEZ1bmNTbG90Nl8KICB7CgogICB0eXBlZGVmIFIg
UlR5cGU7CgoKCiAgIHR5cGVkZWYgUiAgICAgKCpJbkZ1bmMpKFAxLFAyLFAzLFA0LFA1LFA2KTsK
ICAgdHlwZWRlZiBSVHlwZSAoKkZ1bmMpKFAxLFAyLFAzLFA0LFA1LFA2KTsKICAgdHlwZWRlZiBT
bG90NjxSLFAxLFAyLFAzLFA0LFA1LFA2PiBTbG90VHlwZTsKCiAgIHR5cGVkZWYgQ2FsbERhdGFG
dW5jPHR5cGVuYW1lIFNsb3RUeXBlOjpGdW5jLEZ1bmM+IENhbGxEYXRhOwoKICAgc3RhdGljIFJU
eXBlIGNhbGxiYWNrKHZvaWQqIGRhdGEsUDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQsUDUgcDUsUDYg
cDYpCiAgICAgewogICAgICByZXR1cm4gKCgoQ2FsbERhdGEqKWRhdGEpLT5mdW5jKShwMSxwMixw
MyxwNCxwNSxwNik7CiAgICAgfQoKICAgc3RhdGljIFNsb3REYXRhKiBjcmVhdGUoSW5GdW5jIGZ1
bmMpCiAgICAgewogICAgICBTbG90RGF0YSogdG1wPW1hbmFnZShuZXcgU2xvdERhdGEoKSk7CiAg
ICAgIENhbGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEmPih0bXAtPmRhdGFf
KTsKICAgICAgZGF0YS5jYWxsYmFjaz0mY2FsbGJhY2s7CiAgICAgIGRhdGEuZnVuYz0oRnVuYylm
dW5jOwogICAgICByZXR1cm4gdG1wOwogICAgIH0KICB9OwoKCiMgNTIwICIvb3B0L2d0ay9pbmNs
dWRlL3NpZ2MrKy9mdW5jX3Nsb3QuaCIKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFz
cyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQNSxjbGFzcyBQNj4KaW5saW5lIFNsb3Q2PFIs
UDEsUDIsUDMsUDQsUDUsUDY+CiAgc2xvdChSICgqZnVuYykoUDEsUDIsUDMsUDQsUDUsUDYpKQog
IHsKICAgcmV0dXJuIEZ1bmNTbG90Nl88UixQMSxQMixQMyxQNCxQNSxQNj46OmNyZWF0ZShmdW5j
KTsKICB9CgoKIAoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAz
LGNsYXNzIFA0LGNsYXNzIFA1LGNsYXNzIFA2LGNsYXNzIFA3PgpzdHJ1Y3QgRnVuY1Nsb3Q3Xwog
IHsKCiAgIHR5cGVkZWYgUiBSVHlwZTsKCgoKICAgdHlwZWRlZiBSICAgICAoKkluRnVuYykoUDEs
UDIsUDMsUDQsUDUsUDYsUDcpOwogICB0eXBlZGVmIFJUeXBlICgqRnVuYykoUDEsUDIsUDMsUDQs
UDUsUDYsUDcpOwogICB0eXBlZGVmIFNsb3Q3PFIsUDEsUDIsUDMsUDQsUDUsUDYsUDc+IFNsb3RU
eXBlOwoKICAgdHlwZWRlZiBDYWxsRGF0YUZ1bmM8dHlwZW5hbWUgU2xvdFR5cGU6OkZ1bmMsRnVu
Yz4gQ2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZGF0YSxQMSBwMSxQ
MiBwMixQMyBwMyxQNCBwNCxQNSBwNSxQNiBwNixQNyBwNykKICAgICB7CiAgICAgIHJldHVybiAo
KChDYWxsRGF0YSopZGF0YSktPmZ1bmMpKHAxLHAyLHAzLHA0LHA1LHA2LHA3KTsKICAgICB9Cgog
ICBzdGF0aWMgU2xvdERhdGEqIGNyZWF0ZShJbkZ1bmMgZnVuYykKICAgICB7CiAgICAgIFNsb3RE
YXRhKiB0bXA9bWFuYWdlKG5ldyBTbG90RGF0YSgpKTsKICAgICAgQ2FsbERhdGEgJmRhdGE9cmVp
bnRlcnByZXRfY2FzdDxDYWxsRGF0YSY+KHRtcC0+ZGF0YV8pOwogICAgICBkYXRhLmNhbGxiYWNr
PSZjYWxsYmFjazsKICAgICAgZGF0YS5mdW5jPShGdW5jKWZ1bmM7CiAgICAgIHJldHVybiB0bXA7
CiAgICAgfQogIH07CgoKIyA1OTEgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL2Z1bmNfc2xvdC5o
IgoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0
LGNsYXNzIFA1LGNsYXNzIFA2LGNsYXNzIFA3PgppbmxpbmUgU2xvdDc8UixQMSxQMixQMyxQNCxQ
NSxQNixQNz4KICBzbG90KFIgKCpmdW5jKShQMSxQMixQMyxQNCxQNSxQNixQNykpCiAgewogICBy
ZXR1cm4gRnVuY1Nsb3Q3XzxSLFAxLFAyLFAzLFA0LFA1LFA2LFA3Pjo6Y3JlYXRlKGZ1bmMpOwog
IH0KCgoKCn0gIAoKCgojIDMwICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9zaWduYWxfc3lzdGVt
LmgiIDIKCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvYmFzaWNfc2lnbmFsLmgiIDEKIAog
CgoKCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvbWFyc2hhbC5oIiAxCgoKCgoKCgoKCgoK
CgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL3RocmVhZC5oIiAxCiAKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNAogCiAKCiAKIAog
CgogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpdGltZS5oCTEuMzYJOTgvMDMvMjcgU01JIgkK
CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoK
CgoKI3ByYWdtYSBpZGVudAkiQCgjKXR5cGVzLmgJMS42Mwk5OC8wNC8yOCBTTUkiCgoKCgogCgoK
IyAxICIvdXNyL2luY2x1ZGUvc3lzL21hY2h0eXBlcy5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoK
CgoKCgojcHJhZ21hIGlkZW50CSJAKCMpbWFjaHR5cGVzLmgJMS43CTk2LzA1LzIzIFNNSSIKCgoK
CmV4dGVybiAiQyIgewoKCiAKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCAgX3BoeXNhZHJfdCB7IGlu
dCByWzFdOyB9ICpwaHlzYWRyX3Q7Cgp0eXBlZGVmCXN0cnVjdAlfbGFiZWxfdCB7IGludAl2YWxb
Nl07IH0gbGFiZWxfdDsKCgoKdHlwZWRlZgl1bnNpZ25lZCBjaGFyCWxvY2tfdDsJCSAKCgp9CgoK
CiMgMjQgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKCgogCgoKCgoKCgoKCiMgMSAi
L3Vzci9pbmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMSAzIDQKIAoKCgoKCgoKI3ByYWdtYSBpZGVu
dAkiQCgjKWludF90eXBlcy5oCTEuNgk5Ny8wOC8yMCBTTUkiCgogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCiAKCgoKCgoKCgoKCgoKCnR5cGVkZWYgY2hh
cgkJCWludDhfdDsKCgoKCgp0eXBlZGVmIHNob3J0CQkJaW50MTZfdDsKdHlwZWRlZiBpbnQJCQlp
bnQzMl90OwoKCgoKdHlwZWRlZglsb25nIGxvbmcJCWludDY0X3Q7CgoKCnR5cGVkZWYgdW5zaWdu
ZWQgY2hhcgkJdWludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkJdWludDE2X3Q7CnR5cGVk
ZWYgdW5zaWduZWQgaW50CQl1aW50MzJfdDsKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25n
CXVpbnQ2NF90OwoKCgogCgoKCgp0eXBlZGVmIGludDY0X3QJCQlpbnRtYXhfdDsKdHlwZWRlZiB1
aW50NjRfdAkJdWludG1heF90OwoKCgoKCiAKCgoKCgoKCgp0eXBlZGVmCWludAkJCWludHB0cl90
Owp0eXBlZGVmCXVuc2lnbmVkIGludAkJdWludHB0cl90OwoKCiAKCgoKCnR5cGVkZWYgY2hhcgkJ
CWludF9sZWFzdDhfdDsKCgoKCgp0eXBlZGVmIHNob3J0CQkJaW50X2xlYXN0MTZfdDsKdHlwZWRl
ZiBpbnQJCQlpbnRfbGVhc3QzMl90OwoKCgoKdHlwZWRlZiBsb25nIGxvbmcJCWludF9sZWFzdDY0
X3Q7CgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhcgkJdWludF9sZWFzdDhfdDsKdHlwZWRlZiB1bnNp
Z25lZCBzaG9ydAkJdWludF9sZWFzdDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50CQl1aW50X2xl
YXN0MzJfdDsKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nCXVpbnRfbGVhc3Q2NF90OwoK
CgoKfQoKCgojIDM2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgoKCgoKCgoKZXh0
ZXJuICJDIiB7CgoKIAoKCgoKCnR5cGVkZWYJbG9uZyBsb25nCQlsb25nbG9uZ190Owp0eXBlZGVm
CXVuc2lnbmVkIGxvbmcgbG9uZwl1X2xvbmdsb25nX3Q7CiMgNjUgIi91c3IvaW5jbHVkZS9zeXMv
dHlwZXMuaCIgMyA0CgoKIAoKCgoKCgoKCnR5cGVkZWYgbG9uZwkJdF9zY2FsYXJfdDsJIAp0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcJdF91c2NhbGFyX3Q7CgoKIAoKCnR5cGVkZWYJdW5zaWduZWQgY2hh
cgl1Y2hhcl90Owp0eXBlZGVmCXVuc2lnbmVkIHNob3J0CXVzaG9ydF90Owp0eXBlZGVmCXVuc2ln
bmVkIGludAl1aW50X3Q7CnR5cGVkZWYJdW5zaWduZWQgbG9uZwl1bG9uZ190OwoKdHlwZWRlZglj
aGFyCQkqY2FkZHJfdDsJIAp0eXBlZGVmCWxvbmcJCWRhZGRyX3Q7CSAKdHlwZWRlZglzaG9ydAkJ
Y250X3Q7CQkgCgoKdHlwZWRlZgl1bG9uZ190CQlwYWRkcl90OwkgCgoKCgoKCgoKCgoKIAoKCnR5
cGVkZWYJdWxvbmdfdAkJcGZuX3Q7CQkgCnR5cGVkZWYJdWxvbmdfdAkJcGdjbnRfdDsJIAp0eXBl
ZGVmCWxvbmcJCXNwZ2NudF90OwkgCgp0eXBlZGVmCXVjaGFyX3QJCXVzZV90OwkJIAp0eXBlZGVm
CXNob3J0CQlzeXNpZF90Owp0eXBlZGVmCXNob3J0CQlpbmRleF90Owp0eXBlZGVmIHZvaWQJCSp0
aW1lb3V0X2lkX3Q7CSAKdHlwZWRlZiB2b2lkCQkqYnVmY2FsbF9pZF90OwkgCgogCgoKCgoKCgoj
IDE0MyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKCgoKdHlwZWRlZiB1bG9uZ190CQlp
bm9fdDsJCSAKdHlwZWRlZiBsb25nCQlibGtjbnRfdDsJIAp0eXBlZGVmIHVsb25nX3QJCWZzYmxr
Y250X3Q7CSAKdHlwZWRlZiB1bG9uZ190CQlmc2ZpbGNudF90OwkgCgoKCgoKCgoKCgoKCgoKdHlw
ZWRlZiB1X2xvbmdsb25nX3QJaW5vNjRfdDsJIAp0eXBlZGVmIGxvbmdsb25nX3QJYmxrY250NjRf
dDsJIAp0eXBlZGVmIHVfbG9uZ2xvbmdfdAlmc2Jsa2NudDY0X3Q7CSAKdHlwZWRlZiB1X2xvbmds
b25nX3QJZnNmaWxjbnQ2NF90OwkgCgoKCgoKCnR5cGVkZWYJbG9uZwkJYmxrc2l6ZV90OwkgCgoK
CgoKdHlwZWRlZiBlbnVtIHsgQl9GQUxTRSwgQl9UUlVFIH0gYm9vbGVhbl90OwoKCiAKCgoKCgoK
CnR5cGVkZWYgaW50NjRfdAkJcGFkNjRfdDsKdHlwZWRlZgl1aW50NjRfdAl1cGFkNjRfdDsKIyAy
MDIgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CgoKdHlwZWRlZglsb25nbG9uZ190CW9m
ZnNldF90Owp0eXBlZGVmCXVfbG9uZ2xvbmdfdAl1X29mZnNldF90Owp0eXBlZGVmIHVfbG9uZ2xv
bmdfdAlsZW5fdDsKdHlwZWRlZglsb25nbG9uZ190CWRpc2thZGRyX3Q7CgogCgoKCgoKdHlwZWRl
ZiB1bmlvbiB7CglvZmZzZXRfdAlfZjsJIAoJc3RydWN0IHsKCQlpbnQzMl90CV9sOwkgCgkJaW50
MzJfdAlfdTsJIAoJfSBfcDsKfSBsbG9mZl90OwoKCiMgMjMyICIvdXNyL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDMgNAoKCgp0eXBlZGVmIHVuaW9uIHsKCWRpc2thZGRyX3QJX2Y7CSAKCXN0cnVjdCB7
CgkJaW50MzJfdAlfbDsJIAoJCWludDMyX3QJX3U7CSAKCX0gX3A7Cn0gbGxkYWRkcl90OwoKCiMg
MjUyICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAoKCnR5cGVkZWYgdWludF90IGtfZmx0
c2V0X3Q7CSAKCiAKCgoKCgoKCgoKCgoKCnR5cGVkZWYJbG9uZwkJaWRfdDsJCSAKCgogCgoKCnR5
cGVkZWYgdWludF90CQl1c2Vjb25kc190OwkgCgoKCnR5cGVkZWYgbG9uZwlzdXNlY29uZHNfdDsJ
IAoKCiAKCgoKCgoKdHlwZWRlZiB1bG9uZ190CW1ham9yX3Q7CSAKdHlwZWRlZiB1bG9uZ190CW1p
bm9yX3Q7CSAKCgogCgoKdHlwZWRlZiBzaG9ydAlwcmlfdDsKCiAKCgoKCgoKCgoKCnR5cGVkZWYJ
dXNob3J0X3Qgb19tb2RlX3Q7CQkgCnR5cGVkZWYgc2hvcnQJb19kZXZfdDsJCSAKdHlwZWRlZgl1
c2hvcnRfdCBvX3VpZF90OwkJIAp0eXBlZGVmCW9fdWlkX3QJb19naWRfdDsJCSAKdHlwZWRlZglz
aG9ydAlvX25saW5rX3Q7CQkgCnR5cGVkZWYgc2hvcnQJb19waWRfdDsJCSAKdHlwZWRlZiB1c2hv
cnRfdCBvX2lub190OwkJIAoKCiAKCgp0eXBlZGVmCWludAlrZXlfdDsJCQkgCgoKCnR5cGVkZWYJ
dWxvbmdfdAltb2RlX3Q7CQkJIAoKCgoKCgoKCgoKCnR5cGVkZWYJdWlkX3QJZ2lkX3Q7CQkJIAoK
IAoKCgoKdHlwZWRlZgl1bnNpZ25lZCBpbnQJcHRocmVhZF90OwkgCnR5cGVkZWYJdW5zaWduZWQg
aW50CXB0aHJlYWRfa2V5X3Q7CSAKCnR5cGVkZWYJc3RydWN0CV9wdGhyZWFkX211dGV4IHsJCSAK
CXN0cnVjdCB7CgkJdWludDhfdAkJX19wdGhyZWFkX211dGV4X2ZsYWdbNF07CgkJdWludDMyX3Qg
CV9fcHRocmVhZF9tdXRleF90eXBlOwoJfSBfX3B0aHJlYWRfbXV0ZXhfZmxhZ3M7Cgl1bmlvbiB7
CgkJc3RydWN0IHsKCQkJdWludDhfdAlfX3B0aHJlYWRfbXV0ZXhfcGFkWzhdOwoJCX0gX19wdGhy
ZWFkX211dGV4X2xvY2s2NDsKCQl1cGFkNjRfdCBfX3B0aHJlYWRfbXV0ZXhfb3duZXI2NDsKCX0g
X19wdGhyZWFkX211dGV4X2xvY2s7Cgl1cGFkNjRfdCBfX3B0aHJlYWRfbXV0ZXhfZGF0YTsKfSBw
dGhyZWFkX211dGV4X3Q7Cgp0eXBlZGVmCXN0cnVjdAlfcHRocmVhZF9jb25kIHsJCSAKCXN0cnVj
dCB7CgkJdWludDhfdAkJX19wdGhyZWFkX2NvbmRfZmxhZ1s0XTsKCQl1aW50MzJfdCAJX19wdGhy
ZWFkX2NvbmRfdHlwZTsKCX0gX19wdGhyZWFkX2NvbmRfZmxhZ3M7Cgl1cGFkNjRfdCBfX3B0aHJl
YWRfY29uZF9kYXRhOwp9IHB0aHJlYWRfY29uZF90OwoKIAoKCnR5cGVkZWYJc3RydWN0IF9wdGhy
ZWFkX3J3bG9jayB7CSAKCWludDMyX3QJCV9fcHRocmVhZF9yd2xvY2tfcmVhZGVyczsKCXVpbnQx
Nl90CV9fcHRocmVhZF9yd2xvY2tfdHlwZTsKCXVpbnQxNl90CV9fcHRocmVhZF9yd2xvY2tfbWFn
aWM7Cgl1cGFkNjRfdAlfX3B0aHJlYWRfcndsb2NrX3BhZDFbM107Cgl1cGFkNjRfdAlfX3B0aHJl
YWRfcndsb2NrX3BhZDJbMl07Cgl1cGFkNjRfdAlfX3B0aHJlYWRfcndsb2NrX3BhZDNbMl07Cn0g
cHRocmVhZF9yd2xvY2tfdDsKCiAKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9hdHRyIHsKCXZv
aWQJKl9fcHRocmVhZF9hdHRycDsKfSBwdGhyZWFkX2F0dHJfdDsKCgogCgoKdHlwZWRlZiBzdHJ1
Y3QgX3B0aHJlYWRfbXV0ZXhhdHRyIHsKCXZvaWQJKl9fcHRocmVhZF9tdXRleGF0dHJwOwp9IHB0
aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKIAoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2NvbmRhdHRy
IHsKCXZvaWQJKl9fcHRocmVhZF9jb25kYXR0cnA7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKIAoK
CnR5cGVkZWYJc3RydWN0CV9vbmNlIHsKCXVwYWQ2NF90CV9fcHRocmVhZF9vbmNlX3BhZFs0XTsK
fSBwdGhyZWFkX29uY2VfdDsKCiAKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrYXR0
ciB7Cgl2b2lkCSpfX3B0aHJlYWRfcndsb2NrYXR0cnA7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7
Cgp0eXBlZGVmIHVsb25nX3QJZGV2X3Q7CQkJIAoKCgoKCnR5cGVkZWYJdWxvbmdfdAlubGlua190
OwkJIAp0eXBlZGVmCWxvbmcJcGlkX3Q7CQkJIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRl
Zglsb25nCQl0aW1lX3Q7CSAKCgoKCgoKCgoKdHlwZWRlZglpbnQJY2xvY2tpZF90OwkgCgoKCgp0
eXBlZGVmCWludAl0aW1lcl90OwkgCgoKCgoKIAp0eXBlZGVmCXVuc2lnbmVkIGNoYXIJdW5jaGFy
Owp0eXBlZGVmCXVuc2lnbmVkIHNob3J0CXVzaG9ydDsKdHlwZWRlZgl1bnNpZ25lZCBpbnQJdWlu
dDsKdHlwZWRlZgl1bnNpZ25lZCBsb25nCXVsb25nOwogCgojIDUwMSAiL3Vzci9pbmNsdWRlL3N5
cy90eXBlcy5oIiAzIDQKCgoKCiAKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAp0eXBlZGVmIHVuc2ln
bmVkIGNoYXIJdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0CXVfc2hvcnQ7CnR5cGVkZWYg
dW5zaWduZWQgaW50CXVfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcJdV9sb25nOwp0eXBlZGVm
IHN0cnVjdCBfcXVhZCB7IGludCB2YWxbMl07IH0gcXVhZF90OwkgCnR5cGVkZWYgcXVhZF90CQlx
dWFkOwkJCSAKIAoKIAoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMyA0CiAK
IAogCgogCiAKIAoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXNlbGVjdC5oCTEuMTYJOTgvMDQvMjcg
U01JIgkKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDEgMyA0CiAKIAoKIAogCiAK
CiAKCgoKCgogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpdGltZS5oCTIuNjIJOTgvMDIvMDQg
U01JIgkKCgoKIAoKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCgoKCgoKc3RydWN0IHRpbWV2
YWwgewoJdGltZV90CQl0dl9zZWM7CQkgCglzdXNlY29uZHNfdAl0dl91c2VjOwkgCn07CgojIDc0
ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0CgoKCgoKCgoKc3RydWN0IHRpbWV6b25lIHsK
CWludAl0el9taW51dGVzd2VzdDsJIAoJaW50CXR6X2RzdHRpbWU7CSAKfTsKCgoKCgp9CgoKIAoK
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoK
CgojIDU1OSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKCiMgMTAwICIvdXNyL2luY2x1
ZGUvc3lzL3RpbWUuaCIgMiAzIDQKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoJCQkJIAoJCQkJIAoKCQkJCSAKCQkJCSAKCgpzdHJ1
Y3QJaXRpbWVydmFsIHsKCXN0cnVjdAl0aW1ldmFsIGl0X2ludGVydmFsOwkgCglzdHJ1Y3QJdGlt
ZXZhbCBpdF92YWx1ZTsJIAp9OwoKIyAxODEgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQK
CgoKCgoKCiAKCgoKCgoKCgoKCgogCgoKdHlwZWRlZglsb25nbG9uZ190CWhydGltZV90OwoKIyAz
MTAgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKCgoKCgppbnQgYWRqdGltZShzdHJ1Y3Qg
dGltZXZhbCAqLCBzdHJ1Y3QgdGltZXZhbCAqKTsKCgoKCgoKCgoKCmludCBnZXRpdGltZXIoaW50
LCBzdHJ1Y3QgaXRpbWVydmFsICopOwppbnQgdXRpbWVzKGNvbnN0IGNoYXIgKiwgY29uc3Qgc3Ry
dWN0IHRpbWV2YWwgKik7CgoKCmludCBzZXRpdGltZXIoaW50LCBzdHJ1Y3QgaXRpbWVydmFsICos
IHN0cnVjdCBpdGltZXJ2YWwgKik7CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCmlu
dCBzZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKiwgdm9pZCAqKTsKCmhydGltZV90CWdldGhy
dGltZSh2b2lkKTsKaHJ0aW1lX3QJZ2V0aHJ2dGltZSh2b2lkKTsKCgoKCgoKCgoKCgoKCgoKCmlu
dCBnZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKiwgdm9pZCAqKTsKCgoKCgoKCiAKCgoKCgoK
CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgoj
IDMzNyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CgojIDQwNSAiL3Vzci9pbmNsdWRlL3N5cy90
aW1lLmgiIDIgMyA0CgoKCiAKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5o
IiAxIDMgNAogCiAKIAoKIAogCiAKCiMgMTA3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAz
IDQKCiMgNDE4ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzIDQKCgoKCgoKfQoKCgojIDE3
ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMgNAoKCgoKZXh0ZXJuICJDIiB7CgoKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYJbG9uZwlmZF9tYXNrOwoKdHlwZWRlZglsb25nCWZk
c19tYXNrOwoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYJc3RydWN0IGZkX3NldCB7
CgoKCglsb25nCWZkc19iaXRzWygoKCAxMDI0ICApKygoICAoc2l6ZW9mIChmZHNfbWFzaykgKiA4
ICkgICktMSkpLyggIChzaXplb2YgKGZkc19tYXNrKSAqIDggKSAgKSkgXTsKfSBmZF9zZXQ7CgoK
CgoKCgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgc2VsZWN0KGludCwgZmRfc2V0ICosIGZkX3NldCAq
LCBmZF9zZXQgKiwgc3RydWN0IHRpbWV2YWwgKik7CgoKCgoKCn0KCgoKIyA1MzkgIi91c3IvaW5j
bHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKCgoKCiAKCgoKCgoKCgogCgoKCn0KCgoKIyAxOSAiL3Vz
ci9pbmNsdWRlL3RpbWUuaCIgMiAzIDQKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0CXRtIHsJIAoJaW50CXRtX3NlYzsKCWludAl0
bV9taW47CglpbnQJdG1faG91cjsKCWludAl0bV9tZGF5OwoJaW50CXRtX21vbjsKCWludAl0bV95
ZWFyOwoJaW50CXRtX3dkYXk7CglpbnQJdG1feWRheTsKCWludAl0bV9pc2RzdDsKfTsKCgoKZXh0
ZXJuIGNsb2NrX3QgY2xvY2sodm9pZCk7CmV4dGVybiBkb3VibGUgZGlmZnRpbWUodGltZV90LCB0
aW1lX3QpOwpleHRlcm4gdGltZV90IG1rdGltZShzdHJ1Y3QgdG0gKik7CmV4dGVybiB0aW1lX3Qg
dGltZSh0aW1lX3QgKik7CmV4dGVybiBjaGFyICphc2N0aW1lKGNvbnN0IHN0cnVjdCB0bSAqKTsK
ZXh0ZXJuIGNoYXIgKmN0aW1lKGNvbnN0IHRpbWVfdCAqKTsKZXh0ZXJuIHN0cnVjdCB0bSAqZ210
aW1lKGNvbnN0IHRpbWVfdCAqKTsKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lKGNvbnN0IHRp
bWVfdCAqKTsKZXh0ZXJuIHNpemVfdCBzdHJmdGltZShjaGFyICosIHNpemVfdCwgY29uc3QgY2hh
ciAqLCBjb25zdCBzdHJ1Y3QgdG0gKik7CgoKCgoKCgoKCgpleHRlcm4gY2hhciAqc3RycHRpbWUo
Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHN0cnVjdCB0bSAqKTsKCgoKCgojIDEgIi91c3Iv
aW5jbHVkZS9zeXMvdGltZV9pbXBsLmgiIDEgMyA0CiAKCgoKCiAKCgoKCgoKCgojcHJhZ21hIGlk
ZW50CSJAKCMpdGltZV9pbXBsLmgJMS4zCTk4LzAyLzEzIFNNSSIKCgoKCmV4dGVybiAiQyIgewoK
CgoKCgoKCgogCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgIHRpbWVzcGVjIHsJCSAKCXRpbWVfdAkJdHZf
c2VjOwkJIAoJbG9uZwkJdHZfbnNlYzsJIAp9IHRpbWVzcGVjX3Q7CgojIDU4ICIvdXNyL2luY2x1
ZGUvc3lzL3RpbWVfaW1wbC5oIiAzIDQKCgp0eXBlZGVmIHN0cnVjdCB0aW1lc3BlYyB0aW1lc3Ry
dWNfdDsJIAoKCgogCgoKCgoKCgoKCiAKCgoKCnR5cGVkZWYgc3RydWN0IGl0aW1lcnNwZWMgewkJ
IAoJc3RydWN0IHRpbWVzcGVjCWl0X2ludGVydmFsOwkgCglzdHJ1Y3QgdGltZXNwZWMJaXRfdmFs
dWU7CSAKfSBpdGltZXJzcGVjX3Q7CgojIDEwMCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lX2ltcGwu
aCIgMyA0CgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgp9CgoKCiMgMTAzICIvdXNyL2lu
Y2x1ZGUvdGltZS5oIiAyIDMgNAoKCiAKCgoKCgoKCgoKCgoKdW5pb24gc2lndmFsIHsKCWludAlz
aXZhbF9pbnQ7CSAKCXZvaWQJKnNpdmFsX3B0cjsJIAp9OwoKCgoKc3RydWN0IHNpZ2V2ZW50IHsK
CWludAkJc2lnZXZfbm90aWZ5OwkgCglpbnQJCXNpZ2V2X3NpZ25vOwkgCgl1bmlvbiBzaWd2YWwJ
c2lnZXZfdmFsdWU7CSAKCXZvaWQJCSgqc2lnZXZfbm90aWZ5X2Z1bmN0aW9uKSh1bmlvbiBzaWd2
YWwpOwoJcHRocmVhZF9hdHRyX3QJKnNpZ2V2X25vdGlmeV9hdHRyaWJ1dGVzOwoJaW50CQlfX3Np
Z2V2X3BhZDI7Cn07CgoKZXh0ZXJuIGludCBjbG9ja19nZXRyZXMoY2xvY2tpZF90LCBzdHJ1Y3Qg
dGltZXNwZWMgKik7CmV4dGVybiBpbnQgY2xvY2tfZ2V0dGltZShjbG9ja2lkX3QsIHN0cnVjdCB0
aW1lc3BlYyAqKTsKZXh0ZXJuIGludCBjbG9ja19zZXR0aW1lKGNsb2NraWRfdCwgY29uc3Qgc3Ry
dWN0IHRpbWVzcGVjICopOwpleHRlcm4gaW50IHRpbWVyX2NyZWF0ZShjbG9ja2lkX3QsIHN0cnVj
dCBzaWdldmVudCAqLCB0aW1lcl90ICopOwpleHRlcm4gaW50IHRpbWVyX2RlbGV0ZSh0aW1lcl90
KTsKZXh0ZXJuIGludCB0aW1lcl9nZXRvdmVycnVuKHRpbWVyX3QpOwpleHRlcm4gaW50IHRpbWVy
X2dldHRpbWUodGltZXJfdCwgc3RydWN0IGl0aW1lcnNwZWMgKik7CmV4dGVybiBpbnQgdGltZXJf
c2V0dGltZSh0aW1lcl90LCBpbnQsIGNvbnN0IHN0cnVjdCBpdGltZXJzcGVjICosCgkJc3RydWN0
IGl0aW1lcnNwZWMgKik7CmV4dGVybiBpbnQgbmFub3NsZWVwKGNvbnN0IHN0cnVjdCB0aW1lc3Bl
YyAqLCBzdHJ1Y3QgdGltZXNwZWMgKik7CgoKCgpleHRlcm4gdm9pZCB0enNldCh2b2lkKTsKCmV4
dGVybiBjaGFyICp0em5hbWVbMl07CgoKCgoKCgoKCmV4dGVybiBsb25nIHRpbWV6b25lOwpleHRl
cm4gaW50IGRheWxpZ2h0OwoKCgoKCmV4dGVybiBpbnQgY2Z0aW1lKGNoYXIgKiwgY2hhciAqLCBj
b25zdCB0aW1lX3QgKik7CmV4dGVybiBpbnQgYXNjZnRpbWUoY2hhciAqLCBjb25zdCBjaGFyICos
IGNvbnN0IHN0cnVjdCB0bSAqKTsKZXh0ZXJuIGxvbmcgYWx0em9uZTsKCgoKCmV4dGVybiBzdHJ1
Y3QgdG0gKmdldGRhdGUoY29uc3QgY2hhciAqKTsKCgoKCgoKZXh0ZXJuIGludCBnZXRkYXRlX2Vy
cjsKCgoKIyAyMjIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAoKCiAKCgoKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiMgMzMxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKCgoKfQoK
CgojIDI4ICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy90aHJlYWQuaCIgMgoKCgoKbmFtZXNwYWNl
IFNpZ0MKewpuYW1lc3BhY2UgVGhyZWFkcwp7CgoKCgojIDU0ICIvb3B0L2d0ay9pbmNsdWRlL3Np
Z2MrKy90aHJlYWQuaCIKCmNsYXNzIENvbmRBdHRyIHt1bnNpZ25lZCBjaGFyIGR1bW15WzQgXTt9
OwpjbGFzcyBDb25kSW1wbCB7dW5zaWduZWQgY2hhciBkdW1teVsxNiBdO307CmNsYXNzIE11dGV4
QXR0ciB7dW5zaWduZWQgY2hhciBkdW1teVs0IF07fTsKY2xhc3MgTXV0ZXhJbXBsIHt1bnNpZ25l
ZCBjaGFyIGR1bW15WzI0IF07fTsKY2xhc3MgVGhyZWFkQXR0ciB7dW5zaWduZWQgY2hhciBkdW1t
eVs0IF07fTsKY2xhc3MgVGhyZWFkSW1wbCB7dW5zaWduZWQgY2hhciBkdW1teVs0IF07fTsKY2xh
c3MgS2V5SW1wbCB7dW5zaWduZWQgY2hhciBkdW1teVs0IF07fTsKCgogCmNsYXNzIE11dGV4CiAg
ewogICB0eXBlZGVmIE11dGV4SW1wbCBJbXBsOwogICBwcml2YXRlOgogICAgIEltcGwgbXV0ZXhf
OwogICAgIGludCBkZXN0cm95KCk7CgogICBwdWJsaWM6CiAgICAgc3RhdGljIE11dGV4QXR0ciBE
ZWZhdWx0OwoKCgoKICAgICBNdXRleChjb25zdCBNdXRleEF0dHIgYXR0cj1EZWZhdWx0KTsgCgog
ICAgICAKICAgICB+TXV0ZXgoKTsKCiAgICAgaW50IGxvY2soKTsKICAgICBpbnQgdHJ5bG9jaygp
OwogICAgIGludCB1bmxvY2soKTsKICB9OwoKIApzdHJ1Y3QgTUxvY2sKICB7CiAgIE11dGV4ICZt
dXRleF87CiAgIE1Mb2NrKE11dGV4JiBtdXRleCk6bXV0ZXhfKG11dGV4KSB7bXV0ZXhfLmxvY2so
KTt9CiAgIH5NTG9jaygpICAgICAgICAgICAgICAgICAgICAgICAgICB7bXV0ZXhfLnVubG9jaygp
O30KICB9OwoKIApzdHJ1Y3QgQ29uZGl0aW9uCiAgewogICB0eXBlZGVmIENvbmRJbXBsIEltcGw7
CiAgIHByaXZhdGU6CiAgICAgSW1wbCBjb25kXzsKCiAgICAgaW50IGRlc3Ryb3koKTsKICAgcHVi
bGljOgogICAgIHN0YXRpYyBDb25kQXR0ciBEZWZhdWx0OwoKCgoKICAgICBDb25kaXRpb24oY29u
c3QgQ29uZEF0dHIgJmF0dHI9RGVmYXVsdCk7CiAgICAgfkNvbmRpdGlvbigpOwoKICAgICAgCiAg
ICAgaW50IHNpZ25hbCgpOwoKICAgICAgCiAgICAgaW50IGJyb2FkY2FzdCgpOwoKICAgICAgCiAg
ICAgaW50IHdhaXQoTXV0ZXggJm0pOwoKICAgICAgCiAgICAgIAogICAgIGludCB3YWl0KE11dGV4
ICZtLHN0cnVjdCB0aW1lc3BlYyogc3BlYyk7CgogIH07CgogCnN0cnVjdCBTZW1hcGhvcmUKICB7
CiAgIGludCB2YWx1ZV87CiAgIENvbmRpdGlvbiBzaWdfOwogICBNdXRleCBhY2Nlc3NfOwoKICAg
dm9pZCB1cCgpOwogICB2b2lkIGRvd24oKTsKICAgCiAgIFNlbWFwaG9yZShpbnQgdmFsdWU9MSk7
CiAgIH5TZW1hcGhvcmUoKTsKICB9OwoKc3RydWN0IFByaXZhdGVfCiAgewogICAgS2V5SW1wbCBr
ZXlfOwogICAgdm9pZCogZ2V0KCk7CiAgICB2b2lkIHNldCh2b2lkICp2YWx1ZSk7CiAgICB2b2lk
IGNyZWF0ZSh2b2lkICgqZHRvcikodm9pZCopKTsKICAgIHZvaWQgZGVzdHJveSgpOwogIH07Cgog
CnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBQcml2YXRlIDogcHJpdmF0ZSBQcml2YXRlXwogIHsK
ICAgIHByaXZhdGU6CiAgICAgIHN0YXRpYyB2b2lkIGR0b3Iodm9pZCogdikKICAgICAgICB7CiAg
ICAgICAgICBUKiBvYmo9KFQqKXY7CiAgICAgICAgICBkZWxldGUgb2JqOwogICAgICAgIH0KCiAg
ICBwdWJsaWM6CgogICAgICBUJiBvcGVyYXRvciA9KGNvbnN0IFQmIHQpCiAgICAgICAge3JldHVy
biAoKChUJikqdGhpcyk9dCk7fQoKICAgICAgb3BlcmF0b3IgVCYgKCkKICAgICAgICB7CiAgICAg
ICAgICBUICp2YWx1ZT0oVCopZ2V0KCk7CiAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAg
ICBzZXQoKHZvaWQqKSh2YWx1ZT1uZXcgVCgpKSk7ICAKICAgICAgICAgIHJldHVybiAqKHZhbHVl
KTsKICAgICAgICB9CgogICAgICBQcml2YXRlKCkgIHsgY3JlYXRlKCZkdG9yKTsgfQogICAgICB+
UHJpdmF0ZSgpIHsgZGVzdHJveSgpOyB9CiAgfTsKCiAKdGVtcGxhdGUgPD4KY2xhc3MgUHJpdmF0
ZTxpbnQ+IDogcHJpdmF0ZSBQcml2YXRlXwogIHsKICAgIHByaXZhdGU6CiAgICAgIHN0YXRpYyB2
b2lkIGR0b3Iodm9pZCogdikKICAgICAgICB7CiAgICAgICAgICBpbnQqIG9iaj0oaW50Kil2Owog
ICAgICAgICAgZGVsZXRlIG9iajsKICAgICAgICB9CgogICAgICBwdWJsaWM6CiAgICAgICAgaW50
JiBvcGVyYXRvciA9KGNvbnN0IGludCYgdCkKICAgICAgICAgIHtyZXR1cm4gKCgoaW50JikqdGhp
cyk9dCk7fQoKICAgICAgICBvcGVyYXRvciBpbnQmICgpCiAgICAgICAgICB7CiAgICAgICAgICAg
aW50ICp2YWx1ZT0oaW50KilnZXQoKTsKICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAg
ICAgc2V0KCh2b2lkKikodmFsdWU9bmV3IGludCgwKSkpOyAgCiAgICAgICAgICAgcmV0dXJuICoo
dmFsdWUpOyAKICAgICAgICAgIH0KCiAgICAgICAgUHJpdmF0ZSgpIHsgY3JlYXRlKCZkdG9yKTsg
fQogICAgICAgIH5Qcml2YXRlKCkgeyBkZXN0cm95KCk7IH0KICB9OwoKc3RydWN0IFRocmVhZAog
IHsKICAgcHJvdGVjdGVkOgogICAgIHR5cGVkZWYgVGhyZWFkSW1wbCBJbXBsOwogICAgIEltcGwg
dGhyZWFkXzsKICAgICB2b2lkKiAgICAgYXJnXzsKICAgICBUaHJlYWRBdHRyIGF0dHJfOwoKICAg
ICBzdGF0aWMgdm9pZCogY2FsbF9tYWluXyh2b2lkKiBvYmopOwoKICAgcHVibGljOgoKCgoKICAg
ICB2aXJ0dWFsIHZvaWQqIG1haW4odm9pZCopPTA7CiAgICAgaW50IGRldGFjaCgpOwoKICAgICBz
dGF0aWMgVGhyZWFkQXR0ciBEZWZhdWx0OwoKICAgICAgCiAgICAgIAogICAgICAKICAgICBpbnQg
c3RhcnQodm9pZCogYXJnPTApOwogICAgIAogICAgIFRocmVhZChjb25zdCBUaHJlYWRBdHRyICZh
dHRyPURlZmF1bHQpOwogICAgIHZpcnR1YWwgflRocmVhZCgpOwogIH07CgoKCn0gIAp9ICAKCgoK
CiMgMTQgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL21hcnNoYWwuaCIgMgoKCgoKbmFtZXNwYWNl
IFNpZ0MKewoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgogCiAKY2xhc3MgICBSZXRD
b2RlCiAgewogICBwdWJsaWM6CiAgICAgc3RhdGljIGludCBjaGVja19pZ25vcmUoKTsKICAgICBz
dGF0aWMgdm9pZCBpZ25vcmUoKTsKICB9OwoKIAp0ZW1wbGF0ZSA8dHlwZW5hbWUgUj4KY2xhc3Mg
TWFyc2hhbAogIHsKICAgcHVibGljOgogICAgIHR5cGVkZWYgUiBPdXRUeXBlOwoKICAgICB0eXBl
ZGVmIFIgSW5UeXBlOwogICBwcm90ZWN0ZWQ6CiAgICAgdHlwZWRlZiBPdXRUeXBlIE91dFR5cGVf
OwoKCgoKCiAgICAgT3V0VHlwZV8gdmFsdWVfOwogICBwdWJsaWM6CiAgICAgT3V0VHlwZV8mIHZh
bHVlKCkge3JldHVybiB2YWx1ZV87fQoKICAgICBzdGF0aWMgT3V0VHlwZV8gZGVmYXVsdF92YWx1
ZSgpIAoKICAgICAgIHtyZXR1cm4gT3V0VHlwZV8oKTt9CgoKCgogICAgICAKICAgICBib29sIG1h
cnNoYWwoY29uc3QgSW5UeXBlJiBuZXd2YWwpCiAgICAgICB7CiAgICAgICAgaWYgKCFSZXRDb2Rl
OjpjaGVja19pZ25vcmUoKSkgdmFsdWVfPW5ld3ZhbDsKICAgICAgICByZXR1cm4gMDsgICAKICAg
ICAgIH07CiAgICAgTWFyc2hhbCgpCgogICAgICAgOnZhbHVlXygpCiAgICAgICB7UmV0Q29kZTo6
Y2hlY2tfaWdub3JlKCk7fQoKCgoKCgogIH07CgoKIAp0ZW1wbGF0ZSA8dHlwZW5hbWUgUj4KY2xh
c3MgTWFyc2hhbDxSJj4KICB7CiAgICBwdWJsaWM6CiAgICAgdHlwZWRlZiBSJiBPdXRUeXBlOwog
ICAgIHR5cGVkZWYgUiYgSW5UeXBlOwogICAgIFIqIHZhbHVlXzsKICAgICBPdXRUeXBlIHZhbHVl
KCkge3JldHVybiB2YWx1ZV87fQogICAgIHN0YXRpYyBPdXRUeXBlIGRlZmF1bHRfdmFsdWUoKSB7
cmV0dXJuIERlZmF1bHQ7fQogICAgIHN0YXRpYyBSIERlZmF1bHQ7CgogICAgICAKICAgICBib29s
IG1hcnNoYWwoSW5UeXBlIG5ld3ZhbCkKICAgICAgIHsKICAgICAgICBpZiAoIVJldENvZGU6OmNo
ZWNrX2lnbm9yZSgpKSB2YWx1ZV89Jm5ld3ZhbDsKICAgICAgICByZXR1cm4gMDsgICAKICAgICAg
IH07CiAgICAgTWFyc2hhbCgpCiAgICAgICA6dmFsdWVfKCZEZWZhdWx0KQogICAgICAge1JldENv
ZGU6OmNoZWNrX2lnbm9yZSgpO30KICAgICB+TWFyc2hhbCgpCiAgICAgICB7fQogIH07Cgp0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gVCBNYXJzaGFsPFQmPjo6RGVmYXVsdDsKCgoKIAp0ZW1wbGF0ZSA8
PgpjbGFzcyBNYXJzaGFsPHZvaWQ+CiAgewogICBwdWJsaWM6CiAgIE1hcnNoYWwoKSAKICAgICB7
fQogICB+TWFyc2hhbCgpCiAgICAge30KICB9OwoKCgogCnRlbXBsYXRlIDxjbGFzcyBSLFIgaW5p
dGlhbD4KY2xhc3MgRml4ZWRNYXJzaGFsCiAgewogICAgcHVibGljOgogICAgIHR5cGVkZWYgUiBP
dXRUeXBlOwogICAgIHR5cGVkZWYgUiBJblR5cGU7CiAgICAgUiB2YWx1ZV87CiAgICAgT3V0VHlw
ZSYgdmFsdWUoKSB7cmV0dXJuIHZhbHVlXzt9CiAgICAgc3RhdGljIE91dFR5cGUgZGVmYXVsdF92
YWx1ZSgpIHsgcmV0dXJuIGluaXRpYWw7IH0KCiAgICAgYm9vbCBtYXJzaGFsKGNvbnN0IEluVHlw
ZSYgbmV3dmFsKQogICAgICAgewogICAgICAgIGlmICghUmV0Q29kZTo6Y2hlY2tfaWdub3JlKCkp
IHZhbHVlXz1uZXd2YWw7CiAgICAgICAgcmV0dXJuIDA7ICAgCiAgICAgICB9OwoKICAgICBGaXhl
ZE1hcnNoYWwoKQogICAgICAgOnZhbHVlXyhpbml0aWFsKSAKICAgICAgIHtSZXRDb2RlOjpjaGVj
a19pZ25vcmUoKTt9CiAgICAgfkZpeGVkTWFyc2hhbCgpCiAgICAgICB7fQogIH07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgUj4Kc3RydWN0IEZhc3RNYXJzaGFsCiAgewogICAgIHR5cGVkZWYgUiBPdXRUeXBl
OwogICAgIHR5cGVkZWYgUiBJblR5cGU7CgogICAgIFIgdmFsdWVfOwogICAgIE91dFR5cGUmIHZh
bHVlKCkge3JldHVybiB2YWx1ZV87fQogICAgIHN0YXRpYyBPdXRUeXBlIGRlZmF1bHRfdmFsdWUo
KSAKCiAgICAgICB7cmV0dXJuIFIoKTt9CgoKCgogICAgIGJvb2wgbWFyc2hhbChjb25zdCBJblR5
cGUmIG5ld3ZhbCkKICAgICAgIHsKICAgICAgICB2YWx1ZV89bmV3dmFsOwogICAgICAgIHJldHVy
biAwOyAgIAogICAgICAgfTsKCiAgICAgRmFzdE1hcnNoYWwoKQoKICAgICAgIDp2YWx1ZV8oKQog
ICAgICAge30KCgoKICAgICB+RmFzdE1hcnNoYWwoKQogICAgICAge30KICB9OwoKCgoKfSAgCgoK
CiMgNiAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvYmFzaWNfc2lnbmFsLmgiIDIKCgoKIAoKCgoK
CgoKCgoKCgpuYW1lc3BhY2UgU2lnQwp7CgoKIAoKCgogCmNsYXNzICAgU2lnbmFsXwogIHsKICAg
IHByaXZhdGU6CiAgICAgIFNpZ25hbF8oY29uc3QgU2lnbmFsXyYpOwoKICAgIHByb3RlY3RlZDoK
ICAgICAgdHlwZWRlZiBTY29wZUxpc3QgTGlzdDsKICAgCiAgICAgIHN0cnVjdCAgIEltcGwgCiAg
ICAgICAgeyAKICAgICAgICAgIHR5cGVkZWYgU2NvcGVMaXN0IExpc3Q7CiAgICAgICAgICBMaXN0
IGluY29taW5nXzsKICAgICAgICAgIExpc3Qgb3V0Z29pbmdfOwogICAgICAgICAgSW1wbCgpOwog
ICAgICAgICAgfkltcGwoKTsKICAgICAgICB9OwoKICAgICAgSW1wbCAqaW1wbDsKCiAgICAgIFNs
b3REYXRhKiBpbl9jb25uZWN0KCk7CiAgICAgIFNsb3REYXRhKiBvdXRfY29ubmVjdChTbG90RGF0
YSAqcyk7CgogICAgICBTaWduYWxfKCk7CiAgICAgIH5TaWduYWxfKCk7CgogICAgcHVibGljOgog
ICAgICBib29sIGVtcHR5KCkgY29uc3Q7CiAgICAgIHZvaWQgY2xlYXIoKTsKICB9OwoKCiAKCgoK
dGVtcGxhdGUgPGNsYXNzIFIsdHlwZW5hbWUgTWFyc2g9TWFyc2hhbDxSPiA+CiAgY2xhc3MgU2ln
bmFsMDpwdWJsaWMgU2lnbmFsXwogIHsKICAgcHVibGljOgogICAgIHR5cGVkZWYgU2xvdDA8Uj4g
ICAgICAgICAgICAgICAgICAgICAgIEluU2xvdFR5cGU7CiAgICAgdHlwZWRlZiBTbG90MDx0eXBl
bmFtZSBNYXJzaDo6T3V0VHlwZT4gT3V0U2xvdFR5cGU7CgogICBwcml2YXRlOgoKICAgICB0eXBl
ZGVmIHR5cGVuYW1lIE1hcnNoOjpPdXRUeXBlIFNUeXBlOwogICAgIHR5cGVkZWYgUiBSVHlwZTsK
CgoKCiAgICAgdHlwZWRlZiB0eXBlbmFtZSBJblNsb3RUeXBlOjpDYWxsYmFjayBDYWxsYmFjazsK
ICAgICB0eXBlZGVmIFNpZ25hbDA8UixNYXJzaD4gU2VsZjsKICAgICB0eXBlZGVmIENhbGxEYXRh
T2JqMjx0eXBlbmFtZSBPdXRTbG90VHlwZTo6RnVuYyxTZWxmPiBDYWxsRGF0YTsKCiAgICAgc3Rh
dGljIFNUeXBlIGNhbGxiYWNrKHZvaWQqIGQpCiAgICAgICB7CiAgICAgICAgQ2FsbERhdGEqIGRh
dGE9KENhbGxEYXRhKilkOwogICAgICAgIHJldHVybiBkYXRhLT5vYmotPmVtaXQoKTsKICAgICAg
IH0KCiAgIHB1YmxpYzoKICAgICBPdXRTbG90VHlwZSBzbG90KCkKICAgICAgIHsKICAgICAgICBT
bG90RGF0YSogdG1wPWluX2Nvbm5lY3QoKTsKICAgICAgICBDYWxsRGF0YSAmZGF0YT1yZWludGVy
cHJldF9jYXN0PENhbGxEYXRhJj4odG1wLT5kYXRhXyk7CiAgICAgICAgZGF0YS5jYWxsYmFjaz0o
dHlwZW5hbWUgT3V0U2xvdFR5cGU6OkZ1bmMpY2FsbGJhY2s7CiAgICAgICAgZGF0YS5vYmo9dGhp
czsKICAgICAgICByZXR1cm4gdG1wOwogICAgICAgfQoKICAgICBDb25uZWN0aW9uIGNvbm5lY3Qo
Y29uc3QgSW5TbG90VHlwZSAmcykKICAgICAgIHsKICAgICAgICByZXR1cm4gb3V0X2Nvbm5lY3Qo
cy5kYXRhKCkpOwogICAgICAgfQoKICAgICBTVHlwZSBlbWl0KCk7CiAgICAgU1R5cGUgb3BlcmF0
b3IoKSgpCiAgICAgICB7cmV0dXJuIGVtaXQoKTt9CgogICAgIFNpZ25hbDAoKSB7fQogICAgIFNp
Z25hbDAoY29uc3QgSW5TbG90VHlwZSAmcykge2Nvbm5lY3Qocyk7fQogICAgIH5TaWduYWwwKCkg
e30KICB9OwoKCiAKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgTWFyc2g+CnR5cGVuYW1lICBTaWdu
YWwwPFIsTWFyc2g+OjpTVHlwZSBTaWduYWwwPFIsTWFyc2g+OjoKICBlbWl0KCkKICB7CiAgIGlm
ICghaW1wbHx8aW1wbC0+b3V0Z29pbmdfLmVtcHR5KCkpIHJldHVybiBNYXJzaDo6ZGVmYXVsdF92
YWx1ZSgpOwogICBMaXN0ICZvdXQ9aW1wbC0+b3V0Z29pbmdfOyAKICAgTWFyc2ggcmM7CiAgIFNs
b3REYXRhICpkYXRhOwogICBMaXN0OjpJdGVyYXRvciBpPW91dC5iZWdpbigpOwogICB3aGlsZSAo
aSE9b3V0LmVuZCgpKQogICAgIHsKICAgICAgZGF0YT0oKFNsb3REZXBlbmRlbnQqKShpLm5vZGUo
KSkpLT5wYXJlbnQoKTsKICAgICAgKytpOwogICAgICBDYWxsYmFjayYgcz0oQ2FsbGJhY2smKShk
YXRhLT5jYWxsYmFjaygpKTsKICAgICAgaWYgKHJjLm1hcnNoYWwocy5jYWxsKCkpKSByZXR1cm4g
cmMudmFsdWUoKTsKICAgICB9IAogICByZXR1cm4gcmMudmFsdWUoKTsKICB9CgoKdGVtcGxhdGUg
PGNsYXNzIE1hcnNoPgpjbGFzcyBTaWduYWwwPHZvaWQsTWFyc2g+CiAgOnB1YmxpYyBTaWduYWxf
CiAgewogICBwdWJsaWM6CiAgICAgdHlwZWRlZiBTbG90MDx2b2lkPiBJblNsb3RUeXBlOwogICAg
IHR5cGVkZWYgU2xvdDA8dm9pZD4gT3V0U2xvdFR5cGU7CiAgIHByaXZhdGU6CiAgICAgdHlwZWRl
ZiBJblNsb3RUeXBlOjpDYWxsYmFjayBDYWxsYmFjazsKICAgICB0eXBlZGVmIFNpZ25hbDA8dm9p
ZCxNYXJzaD4gU2VsZjsKICAgICB0eXBlZGVmIENhbGxEYXRhT2JqMjxPdXRTbG90VHlwZTo6RnVu
YyxTZWxmPiBDYWxsRGF0YTsKCiAgICAgc3RhdGljIHZvaWQgY2FsbGJhY2sodm9pZCogZCkKICAg
ICAgIHsKICAgICAgICBDYWxsRGF0YSogZGF0YT0oQ2FsbERhdGEqKWQ7CiAgICAgICAgZGF0YS0+
b2JqLT5lbWl0KCk7CiAgICAgICB9CgogICBwdWJsaWM6CiAgICAgT3V0U2xvdFR5cGUgc2xvdCgp
CiAgICAgICB7CiAgICAgICAgU2xvdERhdGEqIHRtcD1pbl9jb25uZWN0KCk7CiAgICAgICAgQ2Fs
bERhdGEmIGRhdGE9cmVpbnRlcnByZXRfY2FzdDxDYWxsRGF0YSY+KHRtcC0+ZGF0YV8pOwogICAg
ICAgIGRhdGEuY2FsbGJhY2s9Y2FsbGJhY2s7CiAgICAgICAgZGF0YS5vYmo9dGhpczsKICAgICAg
ICByZXR1cm4gdG1wOwogICAgICAgfQoKICAgICBDb25uZWN0aW9uIGNvbm5lY3QoY29uc3QgSW5T
bG90VHlwZSAmcykKICAgICAgIHsKICAgICAgICByZXR1cm4gb3V0X2Nvbm5lY3Qocy5kYXRhKCkp
OwogICAgICAgfQoKICAgICB2b2lkIGVtaXQoKTsKICAgICB2b2lkIG9wZXJhdG9yKCkoKQogICAg
ICAge2VtaXQoKTt9CgogICAgIFNpZ25hbDAoKSB7fQogICAgIFNpZ25hbDAoY29uc3QgSW5TbG90
VHlwZSAmcykge2Nvbm5lY3Qocyk7fQogICAgIH5TaWduYWwwKCkge30KICB9OwoKCiAKdGVtcGxh
dGUgPGNsYXNzIE1hcnNoPgp2b2lkIFNpZ25hbDA8dm9pZCxNYXJzaD46OgogIGVtaXQoKQogIHsK
ICAgaWYgKCFpbXBsfHxpbXBsLT5vdXRnb2luZ18uZW1wdHkoKSkgcmV0dXJuOwogICBMaXN0ICZv
dXQ9aW1wbC0+b3V0Z29pbmdfOyAKICAgU2xvdERhdGEgKmRhdGE7CiAgIExpc3Q6Okl0ZXJhdG9y
IGk9b3V0LmJlZ2luKCk7CiAgIHdoaWxlIChpIT1vdXQuZW5kKCkpCiAgICAgewogICAgICBkYXRh
PSgoU2xvdERlcGVuZGVudCopKGkubm9kZSgpKSktPnBhcmVudCgpOwogICAgICArK2k7CiAgICAg
IENhbGxiYWNrJiBzPShDYWxsYmFjayYpKGRhdGEtPmNhbGxiYWNrKCkpOwogICAgICBzLmNhbGwo
KTsKICAgICB9CiAgfQoKCgoKIAoKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSx0eXBlbmFt
ZSBNYXJzaD1NYXJzaGFsPFI+ID4KICBjbGFzcyBTaWduYWwxOnB1YmxpYyBTaWduYWxfCiAgewog
ICBwdWJsaWM6CiAgICAgdHlwZWRlZiBTbG90MTxSLFAxPiAgICAgICAgICAgICAgICAgICAgICAg
SW5TbG90VHlwZTsKICAgICB0eXBlZGVmIFNsb3QxPHR5cGVuYW1lIE1hcnNoOjpPdXRUeXBlLFAx
PiBPdXRTbG90VHlwZTsKCiAgIHByaXZhdGU6CgogICAgIHR5cGVkZWYgdHlwZW5hbWUgTWFyc2g6
Ok91dFR5cGUgU1R5cGU7CiAgICAgdHlwZWRlZiBSIFJUeXBlOwoKCgoKICAgICB0eXBlZGVmIHR5
cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNrIENhbGxiYWNrOwogICAgIHR5cGVkZWYgU2lnbmFs
MTxSLFAxLE1hcnNoPiBTZWxmOwogICAgIHR5cGVkZWYgQ2FsbERhdGFPYmoyPHR5cGVuYW1lIE91
dFNsb3RUeXBlOjpGdW5jLFNlbGY+IENhbGxEYXRhOwoKICAgICBzdGF0aWMgU1R5cGUgY2FsbGJh
Y2sodm9pZCogZCxQMSBwMSkKICAgICAgIHsKICAgICAgICBDYWxsRGF0YSogZGF0YT0oQ2FsbERh
dGEqKWQ7CiAgICAgICAgcmV0dXJuIGRhdGEtPm9iai0+ZW1pdChwMSk7CiAgICAgICB9CgogICBw
dWJsaWM6CiAgICAgT3V0U2xvdFR5cGUgc2xvdCgpCiAgICAgICB7CiAgICAgICAgU2xvdERhdGEq
IHRtcD1pbl9jb25uZWN0KCk7CiAgICAgICAgQ2FsbERhdGEgJmRhdGE9cmVpbnRlcnByZXRfY2Fz
dDxDYWxsRGF0YSY+KHRtcC0+ZGF0YV8pOwogICAgICAgIGRhdGEuY2FsbGJhY2s9KHR5cGVuYW1l
IE91dFNsb3RUeXBlOjpGdW5jKWNhbGxiYWNrOwogICAgICAgIGRhdGEub2JqPXRoaXM7CiAgICAg
ICAgcmV0dXJuIHRtcDsKICAgICAgIH0KCiAgICAgQ29ubmVjdGlvbiBjb25uZWN0KGNvbnN0IElu
U2xvdFR5cGUgJnMpCiAgICAgICB7CiAgICAgICAgcmV0dXJuIG91dF9jb25uZWN0KHMuZGF0YSgp
KTsKICAgICAgIH0KCiAgICAgU1R5cGUgZW1pdCh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSk7
CiAgICAgU1R5cGUgb3BlcmF0b3IoKSh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSkKICAgICAg
IHtyZXR1cm4gZW1pdChwMSk7fQoKICAgICBTaWduYWwxKCkge30KICAgICBTaWduYWwxKGNvbnN0
IEluU2xvdFR5cGUgJnMpIHtjb25uZWN0KHMpO30KICAgICB+U2lnbmFsMSgpIHt9CiAgfTsKCgog
CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIE1hcnNoPgp0eXBlbmFtZSAgU2lnbmFs
MTxSLFAxLE1hcnNoPjo6U1R5cGUgU2lnbmFsMTxSLFAxLE1hcnNoPjo6CiAgZW1pdCh0eXBlbmFt
ZSBUcmFpdDxQMT46OnJlZiBwMSkKICB7CiAgIGlmICghaW1wbHx8aW1wbC0+b3V0Z29pbmdfLmVt
cHR5KCkpIHJldHVybiBNYXJzaDo6ZGVmYXVsdF92YWx1ZSgpOwogICBMaXN0ICZvdXQ9aW1wbC0+
b3V0Z29pbmdfOyAKICAgTWFyc2ggcmM7CiAgIFNsb3REYXRhICpkYXRhOwogICBMaXN0OjpJdGVy
YXRvciBpPW91dC5iZWdpbigpOwogICB3aGlsZSAoaSE9b3V0LmVuZCgpKQogICAgIHsKICAgICAg
ZGF0YT0oKFNsb3REZXBlbmRlbnQqKShpLm5vZGUoKSkpLT5wYXJlbnQoKTsKICAgICAgKytpOwog
ICAgICBDYWxsYmFjayYgcz0oQ2FsbGJhY2smKShkYXRhLT5jYWxsYmFjaygpKTsKICAgICAgaWYg
KHJjLm1hcnNoYWwocy5jYWxsKHAxKSkpIHJldHVybiByYy52YWx1ZSgpOwogICAgIH0gCiAgIHJl
dHVybiByYy52YWx1ZSgpOwogIH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgUDEsY2xhc3MgTWFyc2g+CmNs
YXNzIFNpZ25hbDE8dm9pZCxQMSxNYXJzaD4KICA6cHVibGljIFNpZ25hbF8KICB7CiAgIHB1Ymxp
YzoKICAgICB0eXBlZGVmIFNsb3QxPHZvaWQsUDE+IEluU2xvdFR5cGU7CiAgICAgdHlwZWRlZiBT
bG90MTx2b2lkLFAxPiBPdXRTbG90VHlwZTsKICAgcHJpdmF0ZToKICAgICB0eXBlZGVmIHR5cGVu
YW1lIEluU2xvdFR5cGU6OkNhbGxiYWNrIENhbGxiYWNrOwogICAgIHR5cGVkZWYgU2lnbmFsMTx2
b2lkLFAxLE1hcnNoPiBTZWxmOwogICAgIHR5cGVkZWYgQ2FsbERhdGFPYmoyPHR5cGVuYW1lIE91
dFNsb3RUeXBlOjpGdW5jLFNlbGY+IENhbGxEYXRhOwoKICAgICBzdGF0aWMgdm9pZCBjYWxsYmFj
ayh2b2lkKiBkLFAxIHAxKQogICAgICAgewogICAgICAgIENhbGxEYXRhKiBkYXRhPShDYWxsRGF0
YSopZDsKICAgICAgICBkYXRhLT5vYmotPmVtaXQocDEpOwogICAgICAgfQoKICAgcHVibGljOgog
ICAgIE91dFNsb3RUeXBlIHNsb3QoKQogICAgICAgewogICAgICAgIFNsb3REYXRhKiB0bXA9aW5f
Y29ubmVjdCgpOwogICAgICAgIENhbGxEYXRhJiBkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERh
dGEmPih0bXAtPmRhdGFfKTsKICAgICAgICBkYXRhLmNhbGxiYWNrPWNhbGxiYWNrOwogICAgICAg
IGRhdGEub2JqPXRoaXM7CiAgICAgICAgcmV0dXJuIHRtcDsKICAgICAgIH0KCiAgICAgQ29ubmVj
dGlvbiBjb25uZWN0KGNvbnN0IEluU2xvdFR5cGUgJnMpCiAgICAgICB7CiAgICAgICAgcmV0dXJu
IG91dF9jb25uZWN0KHMuZGF0YSgpKTsKICAgICAgIH0KCiAgICAgdm9pZCBlbWl0KHR5cGVuYW1l
IFRyYWl0PFAxPjo6cmVmIHAxKTsKICAgICB2b2lkIG9wZXJhdG9yKCkodHlwZW5hbWUgVHJhaXQ8
UDE+OjpyZWYgcDEpCiAgICAgICB7ZW1pdChwMSk7fQoKICAgICBTaWduYWwxKCkge30KICAgICBT
aWduYWwxKGNvbnN0IEluU2xvdFR5cGUgJnMpIHtjb25uZWN0KHMpO30KICAgICB+U2lnbmFsMSgp
IHt9CiAgfTsKCgogCnRlbXBsYXRlIDxjbGFzcyBQMSxjbGFzcyBNYXJzaD4Kdm9pZCBTaWduYWwx
PHZvaWQsUDEsTWFyc2g+OjoKICBlbWl0KHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAxKQogIHsK
ICAgaWYgKCFpbXBsfHxpbXBsLT5vdXRnb2luZ18uZW1wdHkoKSkgcmV0dXJuOwogICBMaXN0ICZv
dXQ9aW1wbC0+b3V0Z29pbmdfOyAKICAgU2xvdERhdGEgKmRhdGE7CiAgIExpc3Q6Okl0ZXJhdG9y
IGk9b3V0LmJlZ2luKCk7CiAgIHdoaWxlIChpIT1vdXQuZW5kKCkpCiAgICAgewogICAgICBkYXRh
PSgoU2xvdERlcGVuZGVudCopKGkubm9kZSgpKSktPnBhcmVudCgpOwogICAgICArK2k7CiAgICAg
IENhbGxiYWNrJiBzPShDYWxsYmFjayYpKGRhdGEtPmNhbGxiYWNrKCkpOwogICAgICBzLmNhbGwo
cDEpOwogICAgIH0KICB9CgoKCgogCgoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNz
IFAyLHR5cGVuYW1lIE1hcnNoPU1hcnNoYWw8Uj4gPgogIGNsYXNzIFNpZ25hbDI6cHVibGljIFNp
Z25hbF8KICB7CiAgIHB1YmxpYzoKICAgICB0eXBlZGVmIFNsb3QyPFIsUDEsUDI+ICAgICAgICAg
ICAgICAgICAgICAgICBJblNsb3RUeXBlOwogICAgIHR5cGVkZWYgU2xvdDI8dHlwZW5hbWUgTWFy
c2g6Ok91dFR5cGUsUDEsUDI+IE91dFNsb3RUeXBlOwoKICAgcHJpdmF0ZToKCiAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBNYXJzaDo6T3V0VHlwZSBTVHlwZTsKICAgICB0eXBlZGVmIFIgUlR5cGU7CgoK
CgogICAgIHR5cGVkZWYgdHlwZW5hbWUgSW5TbG90VHlwZTo6Q2FsbGJhY2sgQ2FsbGJhY2s7CiAg
ICAgdHlwZWRlZiBTaWduYWwyPFIsUDEsUDIsTWFyc2g+IFNlbGY7CiAgICAgdHlwZWRlZiBDYWxs
RGF0YU9iajI8dHlwZW5hbWUgT3V0U2xvdFR5cGU6OkZ1bmMsU2VsZj4gQ2FsbERhdGE7CgogICAg
IHN0YXRpYyBTVHlwZSBjYWxsYmFjayh2b2lkKiBkLFAxIHAxLFAyIHAyKQogICAgICAgewogICAg
ICAgIENhbGxEYXRhKiBkYXRhPShDYWxsRGF0YSopZDsKICAgICAgICByZXR1cm4gZGF0YS0+b2Jq
LT5lbWl0KHAxLHAyKTsKICAgICAgIH0KCiAgIHB1YmxpYzoKICAgICBPdXRTbG90VHlwZSBzbG90
KCkKICAgICAgIHsKICAgICAgICBTbG90RGF0YSogdG1wPWluX2Nvbm5lY3QoKTsKICAgICAgICBD
YWxsRGF0YSAmZGF0YT1yZWludGVycHJldF9jYXN0PENhbGxEYXRhJj4odG1wLT5kYXRhXyk7CiAg
ICAgICAgZGF0YS5jYWxsYmFjaz0odHlwZW5hbWUgT3V0U2xvdFR5cGU6OkZ1bmMpY2FsbGJhY2s7
CiAgICAgICAgZGF0YS5vYmo9dGhpczsKICAgICAgICByZXR1cm4gdG1wOwogICAgICAgfQoKICAg
ICBDb25uZWN0aW9uIGNvbm5lY3QoY29uc3QgSW5TbG90VHlwZSAmcykKICAgICAgIHsKICAgICAg
ICByZXR1cm4gb3V0X2Nvbm5lY3Qocy5kYXRhKCkpOwogICAgICAgfQoKICAgICBTVHlwZSBlbWl0
KHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyKTsK
ICAgICBTVHlwZSBvcGVyYXRvcigpKHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAxLHR5cGVuYW1l
IFRyYWl0PFAyPjo6cmVmIHAyKQogICAgICAge3JldHVybiBlbWl0KHAxLHAyKTt9CgogICAgIFNp
Z25hbDIoKSB7fQogICAgIFNpZ25hbDIoY29uc3QgSW5TbG90VHlwZSAmcykge2Nvbm5lY3Qocyk7
fQogICAgIH5TaWduYWwyKCkge30KICB9OwoKCiAKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgUDEs
Y2xhc3MgUDIsY2xhc3MgTWFyc2g+CnR5cGVuYW1lICBTaWduYWwyPFIsUDEsUDIsTWFyc2g+OjpT
VHlwZSBTaWduYWwyPFIsUDEsUDIsTWFyc2g+OjoKICBlbWl0KHR5cGVuYW1lIFRyYWl0PFAxPjo6
cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyKQogIHsKICAgaWYgKCFpbXBsfHxpbXBs
LT5vdXRnb2luZ18uZW1wdHkoKSkgcmV0dXJuIE1hcnNoOjpkZWZhdWx0X3ZhbHVlKCk7CiAgIExp
c3QgJm91dD1pbXBsLT5vdXRnb2luZ187IAogICBNYXJzaCByYzsKICAgU2xvdERhdGEgKmRhdGE7
CiAgIExpc3Q6Okl0ZXJhdG9yIGk9b3V0LmJlZ2luKCk7CiAgIHdoaWxlIChpIT1vdXQuZW5kKCkp
CiAgICAgewogICAgICBkYXRhPSgoU2xvdERlcGVuZGVudCopKGkubm9kZSgpKSktPnBhcmVudCgp
OwogICAgICArK2k7CiAgICAgIENhbGxiYWNrJiBzPShDYWxsYmFjayYpKGRhdGEtPmNhbGxiYWNr
KCkpOwogICAgICBpZiAocmMubWFyc2hhbChzLmNhbGwocDEscDIpKSkgcmV0dXJuIHJjLnZhbHVl
KCk7CiAgICAgfSAKICAgcmV0dXJuIHJjLnZhbHVlKCk7CiAgfQoKCnRlbXBsYXRlIDxjbGFzcyBQ
MSxjbGFzcyBQMixjbGFzcyBNYXJzaD4KY2xhc3MgU2lnbmFsMjx2b2lkLFAxLFAyLE1hcnNoPgog
IDpwdWJsaWMgU2lnbmFsXwogIHsKICAgcHVibGljOgogICAgIHR5cGVkZWYgU2xvdDI8dm9pZCxQ
MSxQMj4gSW5TbG90VHlwZTsKICAgICB0eXBlZGVmIFNsb3QyPHZvaWQsUDEsUDI+IE91dFNsb3RU
eXBlOwogICBwcml2YXRlOgogICAgIHR5cGVkZWYgdHlwZW5hbWUgSW5TbG90VHlwZTo6Q2FsbGJh
Y2sgQ2FsbGJhY2s7CiAgICAgdHlwZWRlZiBTaWduYWwyPHZvaWQsUDEsUDIsTWFyc2g+IFNlbGY7
CiAgICAgdHlwZWRlZiBDYWxsRGF0YU9iajI8dHlwZW5hbWUgT3V0U2xvdFR5cGU6OkZ1bmMsU2Vs
Zj4gQ2FsbERhdGE7CgogICAgIHN0YXRpYyB2b2lkIGNhbGxiYWNrKHZvaWQqIGQsUDEgcDEsUDIg
cDIpCiAgICAgICB7CiAgICAgICAgQ2FsbERhdGEqIGRhdGE9KENhbGxEYXRhKilkOwogICAgICAg
IGRhdGEtPm9iai0+ZW1pdChwMSxwMik7CiAgICAgICB9CgogICBwdWJsaWM6CiAgICAgT3V0U2xv
dFR5cGUgc2xvdCgpCiAgICAgICB7CiAgICAgICAgU2xvdERhdGEqIHRtcD1pbl9jb25uZWN0KCk7
CiAgICAgICAgQ2FsbERhdGEmIGRhdGE9cmVpbnRlcnByZXRfY2FzdDxDYWxsRGF0YSY+KHRtcC0+
ZGF0YV8pOwogICAgICAgIGRhdGEuY2FsbGJhY2s9Y2FsbGJhY2s7CiAgICAgICAgZGF0YS5vYmo9
dGhpczsKICAgICAgICByZXR1cm4gdG1wOwogICAgICAgfQoKICAgICBDb25uZWN0aW9uIGNvbm5l
Y3QoY29uc3QgSW5TbG90VHlwZSAmcykKICAgICAgIHsKICAgICAgICByZXR1cm4gb3V0X2Nvbm5l
Y3Qocy5kYXRhKCkpOwogICAgICAgfQoKICAgICB2b2lkIGVtaXQodHlwZW5hbWUgVHJhaXQ8UDE+
OjpyZWYgcDEsdHlwZW5hbWUgVHJhaXQ8UDI+OjpyZWYgcDIpOwogICAgIHZvaWQgb3BlcmF0b3Io
KSh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMikK
ICAgICAgIHtlbWl0KHAxLHAyKTt9CgogICAgIFNpZ25hbDIoKSB7fQogICAgIFNpZ25hbDIoY29u
c3QgSW5TbG90VHlwZSAmcykge2Nvbm5lY3Qocyk7fQogICAgIH5TaWduYWwyKCkge30KICB9OwoK
CiAKdGVtcGxhdGUgPGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIE1hcnNoPgp2b2lkIFNpZ25hbDI8
dm9pZCxQMSxQMixNYXJzaD46OgogIGVtaXQodHlwZW5hbWUgVHJhaXQ8UDE+OjpyZWYgcDEsdHlw
ZW5hbWUgVHJhaXQ8UDI+OjpyZWYgcDIpCiAgewogICBpZiAoIWltcGx8fGltcGwtPm91dGdvaW5n
Xy5lbXB0eSgpKSByZXR1cm47CiAgIExpc3QgJm91dD1pbXBsLT5vdXRnb2luZ187IAogICBTbG90
RGF0YSAqZGF0YTsKICAgTGlzdDo6SXRlcmF0b3IgaT1vdXQuYmVnaW4oKTsKICAgd2hpbGUgKGkh
PW91dC5lbmQoKSkKICAgICB7CiAgICAgIGRhdGE9KChTbG90RGVwZW5kZW50KikoaS5ub2RlKCkp
KS0+cGFyZW50KCk7CiAgICAgICsraTsKICAgICAgQ2FsbGJhY2smIHM9KENhbGxiYWNrJikoZGF0
YS0+Y2FsbGJhY2soKSk7CiAgICAgIHMuY2FsbChwMSxwMik7CiAgICAgfQogIH0KCgoKCiAKCgoK
dGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsdHlwZW5hbWUgTWFy
c2g9TWFyc2hhbDxSPiA+CiAgY2xhc3MgU2lnbmFsMzpwdWJsaWMgU2lnbmFsXwogIHsKICAgcHVi
bGljOgogICAgIHR5cGVkZWYgU2xvdDM8UixQMSxQMixQMz4gICAgICAgICAgICAgICAgICAgICAg
IEluU2xvdFR5cGU7CiAgICAgdHlwZWRlZiBTbG90Mzx0eXBlbmFtZSBNYXJzaDo6T3V0VHlwZSxQ
MSxQMixQMz4gT3V0U2xvdFR5cGU7CgogICBwcml2YXRlOgoKICAgICB0eXBlZGVmIHR5cGVuYW1l
IE1hcnNoOjpPdXRUeXBlIFNUeXBlOwogICAgIHR5cGVkZWYgUiBSVHlwZTsKCgoKCiAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBJblNsb3RUeXBlOjpDYWxsYmFjayBDYWxsYmFjazsKICAgICB0eXBlZGVm
IFNpZ25hbDM8UixQMSxQMixQMyxNYXJzaD4gU2VsZjsKICAgICB0eXBlZGVmIENhbGxEYXRhT2Jq
Mjx0eXBlbmFtZSBPdXRTbG90VHlwZTo6RnVuYyxTZWxmPiBDYWxsRGF0YTsKCiAgICAgc3RhdGlj
IFNUeXBlIGNhbGxiYWNrKHZvaWQqIGQsUDEgcDEsUDIgcDIsUDMgcDMpCiAgICAgICB7CiAgICAg
ICAgQ2FsbERhdGEqIGRhdGE9KENhbGxEYXRhKilkOwogICAgICAgIHJldHVybiBkYXRhLT5vYmot
PmVtaXQocDEscDIscDMpOwogICAgICAgfQoKICAgcHVibGljOgogICAgIE91dFNsb3RUeXBlIHNs
b3QoKQogICAgICAgewogICAgICAgIFNsb3REYXRhKiB0bXA9aW5fY29ubmVjdCgpOwogICAgICAg
IENhbGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEmPih0bXAtPmRhdGFfKTsK
ICAgICAgICBkYXRhLmNhbGxiYWNrPSh0eXBlbmFtZSBPdXRTbG90VHlwZTo6RnVuYyljYWxsYmFj
azsKICAgICAgICBkYXRhLm9iaj10aGlzOwogICAgICAgIHJldHVybiB0bXA7CiAgICAgICB9Cgog
ICAgIENvbm5lY3Rpb24gY29ubmVjdChjb25zdCBJblNsb3RUeXBlICZzKQogICAgICAgewogICAg
ICAgIHJldHVybiBvdXRfY29ubmVjdChzLmRhdGEoKSk7CiAgICAgICB9CgogICAgIFNUeXBlIGVt
aXQodHlwZW5hbWUgVHJhaXQ8UDE+OjpyZWYgcDEsdHlwZW5hbWUgVHJhaXQ8UDI+OjpyZWYgcDIs
dHlwZW5hbWUgVHJhaXQ8UDM+OjpyZWYgcDMpOwogICAgIFNUeXBlIG9wZXJhdG9yKCkodHlwZW5h
bWUgVHJhaXQ8UDE+OjpyZWYgcDEsdHlwZW5hbWUgVHJhaXQ8UDI+OjpyZWYgcDIsdHlwZW5hbWUg
VHJhaXQ8UDM+OjpyZWYgcDMpCiAgICAgICB7cmV0dXJuIGVtaXQocDEscDIscDMpO30KCiAgICAg
U2lnbmFsMygpIHt9CiAgICAgU2lnbmFsMyhjb25zdCBJblNsb3RUeXBlICZzKSB7Y29ubmVjdChz
KTt9CiAgICAgflNpZ25hbDMoKSB7fQogIH07CgoKIAp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQ
MSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBNYXJzaD4KdHlwZW5hbWUgIFNpZ25hbDM8UixQMSxQ
MixQMyxNYXJzaD46OlNUeXBlIFNpZ25hbDM8UixQMSxQMixQMyxNYXJzaD46OgogIGVtaXQodHlw
ZW5hbWUgVHJhaXQ8UDE+OjpyZWYgcDEsdHlwZW5hbWUgVHJhaXQ8UDI+OjpyZWYgcDIsdHlwZW5h
bWUgVHJhaXQ8UDM+OjpyZWYgcDMpCiAgewogICBpZiAoIWltcGx8fGltcGwtPm91dGdvaW5nXy5l
bXB0eSgpKSByZXR1cm4gTWFyc2g6OmRlZmF1bHRfdmFsdWUoKTsKICAgTGlzdCAmb3V0PWltcGwt
Pm91dGdvaW5nXzsgCiAgIE1hcnNoIHJjOwogICBTbG90RGF0YSAqZGF0YTsKICAgTGlzdDo6SXRl
cmF0b3IgaT1vdXQuYmVnaW4oKTsKICAgd2hpbGUgKGkhPW91dC5lbmQoKSkKICAgICB7CiAgICAg
IGRhdGE9KChTbG90RGVwZW5kZW50KikoaS5ub2RlKCkpKS0+cGFyZW50KCk7CiAgICAgICsraTsK
ICAgICAgQ2FsbGJhY2smIHM9KENhbGxiYWNrJikoZGF0YS0+Y2FsbGJhY2soKSk7CiAgICAgIGlm
IChyYy5tYXJzaGFsKHMuY2FsbChwMSxwMixwMykpKSByZXR1cm4gcmMudmFsdWUoKTsKICAgICB9
IAogICByZXR1cm4gcmMudmFsdWUoKTsKICB9CgoKdGVtcGxhdGUgPGNsYXNzIFAxLGNsYXNzIFAy
LGNsYXNzIFAzLGNsYXNzIE1hcnNoPgpjbGFzcyBTaWduYWwzPHZvaWQsUDEsUDIsUDMsTWFyc2g+
CiAgOnB1YmxpYyBTaWduYWxfCiAgewogICBwdWJsaWM6CiAgICAgdHlwZWRlZiBTbG90Mzx2b2lk
LFAxLFAyLFAzPiBJblNsb3RUeXBlOwogICAgIHR5cGVkZWYgU2xvdDM8dm9pZCxQMSxQMixQMz4g
T3V0U2xvdFR5cGU7CiAgIHByaXZhdGU6CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBJblNsb3RUeXBl
OjpDYWxsYmFjayBDYWxsYmFjazsKICAgICB0eXBlZGVmIFNpZ25hbDM8dm9pZCxQMSxQMixQMyxN
YXJzaD4gU2VsZjsKICAgICB0eXBlZGVmIENhbGxEYXRhT2JqMjx0eXBlbmFtZSBPdXRTbG90VHlw
ZTo6RnVuYyxTZWxmPiBDYWxsRGF0YTsKCiAgICAgc3RhdGljIHZvaWQgY2FsbGJhY2sodm9pZCog
ZCxQMSBwMSxQMiBwMixQMyBwMykKICAgICAgIHsKICAgICAgICBDYWxsRGF0YSogZGF0YT0oQ2Fs
bERhdGEqKWQ7CiAgICAgICAgZGF0YS0+b2JqLT5lbWl0KHAxLHAyLHAzKTsKICAgICAgIH0KCiAg
IHB1YmxpYzoKICAgICBPdXRTbG90VHlwZSBzbG90KCkKICAgICAgIHsKICAgICAgICBTbG90RGF0
YSogdG1wPWluX2Nvbm5lY3QoKTsKICAgICAgICBDYWxsRGF0YSYgZGF0YT1yZWludGVycHJldF9j
YXN0PENhbGxEYXRhJj4odG1wLT5kYXRhXyk7CiAgICAgICAgZGF0YS5jYWxsYmFjaz1jYWxsYmFj
azsKICAgICAgICBkYXRhLm9iaj10aGlzOwogICAgICAgIHJldHVybiB0bXA7CiAgICAgICB9Cgog
ICAgIENvbm5lY3Rpb24gY29ubmVjdChjb25zdCBJblNsb3RUeXBlICZzKQogICAgICAgewogICAg
ICAgIHJldHVybiBvdXRfY29ubmVjdChzLmRhdGEoKSk7CiAgICAgICB9CgogICAgIHZvaWQgZW1p
dCh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMix0
eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBwMyk7CiAgICAgdm9pZCBvcGVyYXRvcigpKHR5cGVuYW1l
IFRyYWl0PFAxPjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRy
YWl0PFAzPjo6cmVmIHAzKQogICAgICAge2VtaXQocDEscDIscDMpO30KCiAgICAgU2lnbmFsMygp
IHt9CiAgICAgU2lnbmFsMyhjb25zdCBJblNsb3RUeXBlICZzKSB7Y29ubmVjdChzKTt9CiAgICAg
flNpZ25hbDMoKSB7fQogIH07CgoKIAp0ZW1wbGF0ZSA8Y2xhc3MgUDEsY2xhc3MgUDIsY2xhc3Mg
UDMsY2xhc3MgTWFyc2g+CnZvaWQgU2lnbmFsMzx2b2lkLFAxLFAyLFAzLE1hcnNoPjo6CiAgZW1p
dCh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMix0
eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBwMykKICB7CiAgIGlmICghaW1wbHx8aW1wbC0+b3V0Z29p
bmdfLmVtcHR5KCkpIHJldHVybjsKICAgTGlzdCAmb3V0PWltcGwtPm91dGdvaW5nXzsgCiAgIFNs
b3REYXRhICpkYXRhOwogICBMaXN0OjpJdGVyYXRvciBpPW91dC5iZWdpbigpOwogICB3aGlsZSAo
aSE9b3V0LmVuZCgpKQogICAgIHsKICAgICAgZGF0YT0oKFNsb3REZXBlbmRlbnQqKShpLm5vZGUo
KSkpLT5wYXJlbnQoKTsKICAgICAgKytpOwogICAgICBDYWxsYmFjayYgcz0oQ2FsbGJhY2smKShk
YXRhLT5jYWxsYmFjaygpKTsKICAgICAgcy5jYWxsKHAxLHAyLHAzKTsKICAgICB9CiAgfQoKCgoK
IAoKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQ
NCx0eXBlbmFtZSBNYXJzaD1NYXJzaGFsPFI+ID4KICBjbGFzcyBTaWduYWw0OnB1YmxpYyBTaWdu
YWxfCiAgewogICBwdWJsaWM6CiAgICAgdHlwZWRlZiBTbG90NDxSLFAxLFAyLFAzLFA0PiAgICAg
ICAgICAgICAgICAgICAgICAgSW5TbG90VHlwZTsKICAgICB0eXBlZGVmIFNsb3Q0PHR5cGVuYW1l
IE1hcnNoOjpPdXRUeXBlLFAxLFAyLFAzLFA0PiBPdXRTbG90VHlwZTsKCiAgIHByaXZhdGU6Cgog
ICAgIHR5cGVkZWYgdHlwZW5hbWUgTWFyc2g6Ok91dFR5cGUgU1R5cGU7CiAgICAgdHlwZWRlZiBS
IFJUeXBlOwoKCgoKICAgICB0eXBlZGVmIHR5cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNrIENh
bGxiYWNrOwogICAgIHR5cGVkZWYgU2lnbmFsNDxSLFAxLFAyLFAzLFA0LE1hcnNoPiBTZWxmOwog
ICAgIHR5cGVkZWYgQ2FsbERhdGFPYmoyPHR5cGVuYW1lIE91dFNsb3RUeXBlOjpGdW5jLFNlbGY+
IENhbGxEYXRhOwoKICAgICBzdGF0aWMgU1R5cGUgY2FsbGJhY2sodm9pZCogZCxQMSBwMSxQMiBw
MixQMyBwMyxQNCBwNCkKICAgICAgIHsKICAgICAgICBDYWxsRGF0YSogZGF0YT0oQ2FsbERhdGEq
KWQ7CiAgICAgICAgcmV0dXJuIGRhdGEtPm9iai0+ZW1pdChwMSxwMixwMyxwNCk7CiAgICAgICB9
CgogICBwdWJsaWM6CiAgICAgT3V0U2xvdFR5cGUgc2xvdCgpCiAgICAgICB7CiAgICAgICAgU2xv
dERhdGEqIHRtcD1pbl9jb25uZWN0KCk7CiAgICAgICAgQ2FsbERhdGEgJmRhdGE9cmVpbnRlcnBy
ZXRfY2FzdDxDYWxsRGF0YSY+KHRtcC0+ZGF0YV8pOwogICAgICAgIGRhdGEuY2FsbGJhY2s9KHR5
cGVuYW1lIE91dFNsb3RUeXBlOjpGdW5jKWNhbGxiYWNrOwogICAgICAgIGRhdGEub2JqPXRoaXM7
CiAgICAgICAgcmV0dXJuIHRtcDsKICAgICAgIH0KCiAgICAgQ29ubmVjdGlvbiBjb25uZWN0KGNv
bnN0IEluU2xvdFR5cGUgJnMpCiAgICAgICB7CiAgICAgICAgcmV0dXJuIG91dF9jb25uZWN0KHMu
ZGF0YSgpKTsKICAgICAgIH0KCiAgICAgU1R5cGUgZW1pdCh0eXBlbmFtZSBUcmFpdDxQMT46OnJl
ZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMix0eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBw
Myx0eXBlbmFtZSBUcmFpdDxQND46OnJlZiBwNCk7CiAgICAgU1R5cGUgb3BlcmF0b3IoKSh0eXBl
bmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMix0eXBlbmFt
ZSBUcmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBUcmFpdDxQND46OnJlZiBwNCkKICAgICAgIHty
ZXR1cm4gZW1pdChwMSxwMixwMyxwNCk7fQoKICAgICBTaWduYWw0KCkge30KICAgICBTaWduYWw0
KGNvbnN0IEluU2xvdFR5cGUgJnMpIHtjb25uZWN0KHMpO30KICAgICB+U2lnbmFsNCgpIHt9CiAg
fTsKCgogCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNz
IFA0LGNsYXNzIE1hcnNoPgp0eXBlbmFtZSAgU2lnbmFsNDxSLFAxLFAyLFAzLFA0LE1hcnNoPjo6
U1R5cGUgU2lnbmFsNDxSLFAxLFAyLFAzLFA0LE1hcnNoPjo6CiAgZW1pdCh0eXBlbmFtZSBUcmFp
dDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMix0eXBlbmFtZSBUcmFpdDxQ
Mz46OnJlZiBwMyx0eXBlbmFtZSBUcmFpdDxQND46OnJlZiBwNCkKICB7CiAgIGlmICghaW1wbHx8
aW1wbC0+b3V0Z29pbmdfLmVtcHR5KCkpIHJldHVybiBNYXJzaDo6ZGVmYXVsdF92YWx1ZSgpOwog
ICBMaXN0ICZvdXQ9aW1wbC0+b3V0Z29pbmdfOyAKICAgTWFyc2ggcmM7CiAgIFNsb3REYXRhICpk
YXRhOwogICBMaXN0OjpJdGVyYXRvciBpPW91dC5iZWdpbigpOwogICB3aGlsZSAoaSE9b3V0LmVu
ZCgpKQogICAgIHsKICAgICAgZGF0YT0oKFNsb3REZXBlbmRlbnQqKShpLm5vZGUoKSkpLT5wYXJl
bnQoKTsKICAgICAgKytpOwogICAgICBDYWxsYmFjayYgcz0oQ2FsbGJhY2smKShkYXRhLT5jYWxs
YmFjaygpKTsKICAgICAgaWYgKHJjLm1hcnNoYWwocy5jYWxsKHAxLHAyLHAzLHA0KSkpIHJldHVy
biByYy52YWx1ZSgpOwogICAgIH0gCiAgIHJldHVybiByYy52YWx1ZSgpOwogIH0KCgp0ZW1wbGF0
ZSA8Y2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsY2xhc3MgUDQsY2xhc3MgTWFyc2g+CmNsYXNz
IFNpZ25hbDQ8dm9pZCxQMSxQMixQMyxQNCxNYXJzaD4KICA6cHVibGljIFNpZ25hbF8KICB7CiAg
IHB1YmxpYzoKICAgICB0eXBlZGVmIFNsb3Q0PHZvaWQsUDEsUDIsUDMsUDQ+IEluU2xvdFR5cGU7
CiAgICAgdHlwZWRlZiBTbG90NDx2b2lkLFAxLFAyLFAzLFA0PiBPdXRTbG90VHlwZTsKICAgcHJp
dmF0ZToKICAgICB0eXBlZGVmIHR5cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNrIENhbGxiYWNr
OwogICAgIHR5cGVkZWYgU2lnbmFsNDx2b2lkLFAxLFAyLFAzLFA0LE1hcnNoPiBTZWxmOwogICAg
IHR5cGVkZWYgQ2FsbERhdGFPYmoyPHR5cGVuYW1lIE91dFNsb3RUeXBlOjpGdW5jLFNlbGY+IENh
bGxEYXRhOwoKICAgICBzdGF0aWMgdm9pZCBjYWxsYmFjayh2b2lkKiBkLFAxIHAxLFAyIHAyLFAz
IHAzLFA0IHA0KQogICAgICAgewogICAgICAgIENhbGxEYXRhKiBkYXRhPShDYWxsRGF0YSopZDsK
ICAgICAgICBkYXRhLT5vYmotPmVtaXQocDEscDIscDMscDQpOwogICAgICAgfQoKICAgcHVibGlj
OgogICAgIE91dFNsb3RUeXBlIHNsb3QoKQogICAgICAgewogICAgICAgIFNsb3REYXRhKiB0bXA9
aW5fY29ubmVjdCgpOwogICAgICAgIENhbGxEYXRhJiBkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2Fs
bERhdGEmPih0bXAtPmRhdGFfKTsKICAgICAgICBkYXRhLmNhbGxiYWNrPWNhbGxiYWNrOwogICAg
ICAgIGRhdGEub2JqPXRoaXM7CiAgICAgICAgcmV0dXJuIHRtcDsKICAgICAgIH0KCiAgICAgQ29u
bmVjdGlvbiBjb25uZWN0KGNvbnN0IEluU2xvdFR5cGUgJnMpCiAgICAgICB7CiAgICAgICAgcmV0
dXJuIG91dF9jb25uZWN0KHMuZGF0YSgpKTsKICAgICAgIH0KCiAgICAgdm9pZCBlbWl0KHR5cGVu
YW1lIFRyYWl0PFAxPjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1l
IFRyYWl0PFAzPjo6cmVmIHAzLHR5cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0KTsKICAgICB2b2lk
IG9wZXJhdG9yKCkodHlwZW5hbWUgVHJhaXQ8UDE+OjpyZWYgcDEsdHlwZW5hbWUgVHJhaXQ8UDI+
OjpyZWYgcDIsdHlwZW5hbWUgVHJhaXQ8UDM+OjpyZWYgcDMsdHlwZW5hbWUgVHJhaXQ8UDQ+Ojpy
ZWYgcDQpCiAgICAgICB7ZW1pdChwMSxwMixwMyxwNCk7fQoKICAgICBTaWduYWw0KCkge30KICAg
ICBTaWduYWw0KGNvbnN0IEluU2xvdFR5cGUgJnMpIHtjb25uZWN0KHMpO30KICAgICB+U2lnbmFs
NCgpIHt9CiAgfTsKCgogCnRlbXBsYXRlIDxjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFz
cyBQNCxjbGFzcyBNYXJzaD4Kdm9pZCBTaWduYWw0PHZvaWQsUDEsUDIsUDMsUDQsTWFyc2g+OjoK
ICBlbWl0KHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVm
IHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6cmVmIHAzLHR5cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0
KQogIHsKICAgaWYgKCFpbXBsfHxpbXBsLT5vdXRnb2luZ18uZW1wdHkoKSkgcmV0dXJuOwogICBM
aXN0ICZvdXQ9aW1wbC0+b3V0Z29pbmdfOyAKICAgU2xvdERhdGEgKmRhdGE7CiAgIExpc3Q6Okl0
ZXJhdG9yIGk9b3V0LmJlZ2luKCk7CiAgIHdoaWxlIChpIT1vdXQuZW5kKCkpCiAgICAgewogICAg
ICBkYXRhPSgoU2xvdERlcGVuZGVudCopKGkubm9kZSgpKSktPnBhcmVudCgpOwogICAgICArK2k7
CiAgICAgIENhbGxiYWNrJiBzPShDYWxsYmFjayYpKGRhdGEtPmNhbGxiYWNrKCkpOwogICAgICBz
LmNhbGwocDEscDIscDMscDQpOwogICAgIH0KICB9CgoKCgogCgoKCnRlbXBsYXRlIDxjbGFzcyBS
LGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0LGNsYXNzIFA1LHR5cGVuYW1lIE1h
cnNoPU1hcnNoYWw8Uj4gPgogIGNsYXNzIFNpZ25hbDU6cHVibGljIFNpZ25hbF8KICB7CiAgIHB1
YmxpYzoKICAgICB0eXBlZGVmIFNsb3Q1PFIsUDEsUDIsUDMsUDQsUDU+ICAgICAgICAgICAgICAg
ICAgICAgICBJblNsb3RUeXBlOwogICAgIHR5cGVkZWYgU2xvdDU8dHlwZW5hbWUgTWFyc2g6Ok91
dFR5cGUsUDEsUDIsUDMsUDQsUDU+IE91dFNsb3RUeXBlOwoKICAgcHJpdmF0ZToKCiAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBNYXJzaDo6T3V0VHlwZSBTVHlwZTsKICAgICB0eXBlZGVmIFIgUlR5cGU7
CgoKCgogICAgIHR5cGVkZWYgdHlwZW5hbWUgSW5TbG90VHlwZTo6Q2FsbGJhY2sgQ2FsbGJhY2s7
CiAgICAgdHlwZWRlZiBTaWduYWw1PFIsUDEsUDIsUDMsUDQsUDUsTWFyc2g+IFNlbGY7CiAgICAg
dHlwZWRlZiBDYWxsRGF0YU9iajI8dHlwZW5hbWUgT3V0U2xvdFR5cGU6OkZ1bmMsU2VsZj4gQ2Fs
bERhdGE7CgogICAgIHN0YXRpYyBTVHlwZSBjYWxsYmFjayh2b2lkKiBkLFAxIHAxLFAyIHAyLFAz
IHAzLFA0IHA0LFA1IHA1KQogICAgICAgewogICAgICAgIENhbGxEYXRhKiBkYXRhPShDYWxsRGF0
YSopZDsKICAgICAgICByZXR1cm4gZGF0YS0+b2JqLT5lbWl0KHAxLHAyLHAzLHA0LHA1KTsKICAg
ICAgIH0KCiAgIHB1YmxpYzoKICAgICBPdXRTbG90VHlwZSBzbG90KCkKICAgICAgIHsKICAgICAg
ICBTbG90RGF0YSogdG1wPWluX2Nvbm5lY3QoKTsKICAgICAgICBDYWxsRGF0YSAmZGF0YT1yZWlu
dGVycHJldF9jYXN0PENhbGxEYXRhJj4odG1wLT5kYXRhXyk7CiAgICAgICAgZGF0YS5jYWxsYmFj
az0odHlwZW5hbWUgT3V0U2xvdFR5cGU6OkZ1bmMpY2FsbGJhY2s7CiAgICAgICAgZGF0YS5vYmo9
dGhpczsKICAgICAgICByZXR1cm4gdG1wOwogICAgICAgfQoKICAgICBDb25uZWN0aW9uIGNvbm5l
Y3QoY29uc3QgSW5TbG90VHlwZSAmcykKICAgICAgIHsKICAgICAgICByZXR1cm4gb3V0X2Nvbm5l
Y3Qocy5kYXRhKCkpOwogICAgICAgfQoKICAgICBTVHlwZSBlbWl0KHR5cGVuYW1lIFRyYWl0PFAx
Pjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6
cmVmIHAzLHR5cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0LHR5cGVuYW1lIFRyYWl0PFA1Pjo6cmVm
IHA1KTsKICAgICBTVHlwZSBvcGVyYXRvcigpKHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAxLHR5
cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6cmVmIHAzLHR5cGVu
YW1lIFRyYWl0PFA0Pjo6cmVmIHA0LHR5cGVuYW1lIFRyYWl0PFA1Pjo6cmVmIHA1KQogICAgICAg
e3JldHVybiBlbWl0KHAxLHAyLHAzLHA0LHA1KTt9CgogICAgIFNpZ25hbDUoKSB7fQogICAgIFNp
Z25hbDUoY29uc3QgSW5TbG90VHlwZSAmcykge2Nvbm5lY3Qocyk7fQogICAgIH5TaWduYWw1KCkg
e30KICB9OwoKCiAKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMs
Y2xhc3MgUDQsY2xhc3MgUDUsY2xhc3MgTWFyc2g+CnR5cGVuYW1lICBTaWduYWw1PFIsUDEsUDIs
UDMsUDQsUDUsTWFyc2g+OjpTVHlwZSBTaWduYWw1PFIsUDEsUDIsUDMsUDQsUDUsTWFyc2g+OjoK
ICBlbWl0KHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVm
IHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6cmVmIHAzLHR5cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0
LHR5cGVuYW1lIFRyYWl0PFA1Pjo6cmVmIHA1KQogIHsKICAgaWYgKCFpbXBsfHxpbXBsLT5vdXRn
b2luZ18uZW1wdHkoKSkgcmV0dXJuIE1hcnNoOjpkZWZhdWx0X3ZhbHVlKCk7CiAgIExpc3QgJm91
dD1pbXBsLT5vdXRnb2luZ187IAogICBNYXJzaCByYzsKICAgU2xvdERhdGEgKmRhdGE7CiAgIExp
c3Q6Okl0ZXJhdG9yIGk9b3V0LmJlZ2luKCk7CiAgIHdoaWxlIChpIT1vdXQuZW5kKCkpCiAgICAg
ewogICAgICBkYXRhPSgoU2xvdERlcGVuZGVudCopKGkubm9kZSgpKSktPnBhcmVudCgpOwogICAg
ICArK2k7CiAgICAgIENhbGxiYWNrJiBzPShDYWxsYmFjayYpKGRhdGEtPmNhbGxiYWNrKCkpOwog
ICAgICBpZiAocmMubWFyc2hhbChzLmNhbGwocDEscDIscDMscDQscDUpKSkgcmV0dXJuIHJjLnZh
bHVlKCk7CiAgICAgfSAKICAgcmV0dXJuIHJjLnZhbHVlKCk7CiAgfQoKCnRlbXBsYXRlIDxjbGFz
cyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQNSxjbGFzcyBNYXJzaD4KY2xh
c3MgU2lnbmFsNTx2b2lkLFAxLFAyLFAzLFA0LFA1LE1hcnNoPgogIDpwdWJsaWMgU2lnbmFsXwog
IHsKICAgcHVibGljOgogICAgIHR5cGVkZWYgU2xvdDU8dm9pZCxQMSxQMixQMyxQNCxQNT4gSW5T
bG90VHlwZTsKICAgICB0eXBlZGVmIFNsb3Q1PHZvaWQsUDEsUDIsUDMsUDQsUDU+IE91dFNsb3RU
eXBlOwogICBwcml2YXRlOgogICAgIHR5cGVkZWYgdHlwZW5hbWUgSW5TbG90VHlwZTo6Q2FsbGJh
Y2sgQ2FsbGJhY2s7CiAgICAgdHlwZWRlZiBTaWduYWw1PHZvaWQsUDEsUDIsUDMsUDQsUDUsTWFy
c2g+IFNlbGY7CiAgICAgdHlwZWRlZiBDYWxsRGF0YU9iajI8dHlwZW5hbWUgT3V0U2xvdFR5cGU6
OkZ1bmMsU2VsZj4gQ2FsbERhdGE7CgogICAgIHN0YXRpYyB2b2lkIGNhbGxiYWNrKHZvaWQqIGQs
UDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQsUDUgcDUpCiAgICAgICB7CiAgICAgICAgQ2FsbERhdGEq
IGRhdGE9KENhbGxEYXRhKilkOwogICAgICAgIGRhdGEtPm9iai0+ZW1pdChwMSxwMixwMyxwNCxw
NSk7CiAgICAgICB9CgogICBwdWJsaWM6CiAgICAgT3V0U2xvdFR5cGUgc2xvdCgpCiAgICAgICB7
CiAgICAgICAgU2xvdERhdGEqIHRtcD1pbl9jb25uZWN0KCk7CiAgICAgICAgQ2FsbERhdGEmIGRh
dGE9cmVpbnRlcnByZXRfY2FzdDxDYWxsRGF0YSY+KHRtcC0+ZGF0YV8pOwogICAgICAgIGRhdGEu
Y2FsbGJhY2s9Y2FsbGJhY2s7CiAgICAgICAgZGF0YS5vYmo9dGhpczsKICAgICAgICByZXR1cm4g
dG1wOwogICAgICAgfQoKICAgICBDb25uZWN0aW9uIGNvbm5lY3QoY29uc3QgSW5TbG90VHlwZSAm
cykKICAgICAgIHsKICAgICAgICByZXR1cm4gb3V0X2Nvbm5lY3Qocy5kYXRhKCkpOwogICAgICAg
fQoKICAgICB2b2lkIGVtaXQodHlwZW5hbWUgVHJhaXQ8UDE+OjpyZWYgcDEsdHlwZW5hbWUgVHJh
aXQ8UDI+OjpyZWYgcDIsdHlwZW5hbWUgVHJhaXQ8UDM+OjpyZWYgcDMsdHlwZW5hbWUgVHJhaXQ8
UDQ+OjpyZWYgcDQsdHlwZW5hbWUgVHJhaXQ8UDU+OjpyZWYgcDUpOwogICAgIHZvaWQgb3BlcmF0
b3IoKSh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBw
Mix0eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBUcmFpdDxQND46OnJlZiBwNCx0
eXBlbmFtZSBUcmFpdDxQNT46OnJlZiBwNSkKICAgICAgIHtlbWl0KHAxLHAyLHAzLHA0LHA1KTt9
CgogICAgIFNpZ25hbDUoKSB7fQogICAgIFNpZ25hbDUoY29uc3QgSW5TbG90VHlwZSAmcykge2Nv
bm5lY3Qocyk7fQogICAgIH5TaWduYWw1KCkge30KICB9OwoKCiAKdGVtcGxhdGUgPGNsYXNzIFAx
LGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0LGNsYXNzIFA1LGNsYXNzIE1hcnNoPgp2b2lkIFNp
Z25hbDU8dm9pZCxQMSxQMixQMyxQNCxQNSxNYXJzaD46OgogIGVtaXQodHlwZW5hbWUgVHJhaXQ8
UDE+OjpyZWYgcDEsdHlwZW5hbWUgVHJhaXQ8UDI+OjpyZWYgcDIsdHlwZW5hbWUgVHJhaXQ8UDM+
OjpyZWYgcDMsdHlwZW5hbWUgVHJhaXQ8UDQ+OjpyZWYgcDQsdHlwZW5hbWUgVHJhaXQ8UDU+Ojpy
ZWYgcDUpCiAgewogICBpZiAoIWltcGx8fGltcGwtPm91dGdvaW5nXy5lbXB0eSgpKSByZXR1cm47
CiAgIExpc3QgJm91dD1pbXBsLT5vdXRnb2luZ187IAogICBTbG90RGF0YSAqZGF0YTsKICAgTGlz
dDo6SXRlcmF0b3IgaT1vdXQuYmVnaW4oKTsKICAgd2hpbGUgKGkhPW91dC5lbmQoKSkKICAgICB7
CiAgICAgIGRhdGE9KChTbG90RGVwZW5kZW50KikoaS5ub2RlKCkpKS0+cGFyZW50KCk7CiAgICAg
ICsraTsKICAgICAgQ2FsbGJhY2smIHM9KENhbGxiYWNrJikoZGF0YS0+Y2FsbGJhY2soKSk7CiAg
ICAgIHMuY2FsbChwMSxwMixwMyxwNCxwNSk7CiAgICAgfQogIH0KCgoKCiAKCgoKdGVtcGxhdGUg
PGNsYXNzIFIsY2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsY2xhc3MgUDQsY2xhc3MgUDUsY2xh
c3MgUDYsdHlwZW5hbWUgTWFyc2g9TWFyc2hhbDxSPiA+CiAgY2xhc3MgU2lnbmFsNjpwdWJsaWMg
U2lnbmFsXwogIHsKICAgcHVibGljOgogICAgIHR5cGVkZWYgU2xvdDY8UixQMSxQMixQMyxQNCxQ
NSxQNj4gICAgICAgICAgICAgICAgICAgICAgIEluU2xvdFR5cGU7CiAgICAgdHlwZWRlZiBTbG90
Njx0eXBlbmFtZSBNYXJzaDo6T3V0VHlwZSxQMSxQMixQMyxQNCxQNSxQNj4gT3V0U2xvdFR5cGU7
CgogICBwcml2YXRlOgoKICAgICB0eXBlZGVmIHR5cGVuYW1lIE1hcnNoOjpPdXRUeXBlIFNUeXBl
OwogICAgIHR5cGVkZWYgUiBSVHlwZTsKCgoKCiAgICAgdHlwZWRlZiB0eXBlbmFtZSBJblNsb3RU
eXBlOjpDYWxsYmFjayBDYWxsYmFjazsKICAgICB0eXBlZGVmIFNpZ25hbDY8UixQMSxQMixQMyxQ
NCxQNSxQNixNYXJzaD4gU2VsZjsKICAgICB0eXBlZGVmIENhbGxEYXRhT2JqMjx0eXBlbmFtZSBP
dXRTbG90VHlwZTo6RnVuYyxTZWxmPiBDYWxsRGF0YTsKCiAgICAgc3RhdGljIFNUeXBlIGNhbGxi
YWNrKHZvaWQqIGQsUDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQsUDUgcDUsUDYgcDYpCiAgICAgICB7
CiAgICAgICAgQ2FsbERhdGEqIGRhdGE9KENhbGxEYXRhKilkOwogICAgICAgIHJldHVybiBkYXRh
LT5vYmotPmVtaXQocDEscDIscDMscDQscDUscDYpOwogICAgICAgfQoKICAgcHVibGljOgogICAg
IE91dFNsb3RUeXBlIHNsb3QoKQogICAgICAgewogICAgICAgIFNsb3REYXRhKiB0bXA9aW5fY29u
bmVjdCgpOwogICAgICAgIENhbGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEm
Pih0bXAtPmRhdGFfKTsKICAgICAgICBkYXRhLmNhbGxiYWNrPSh0eXBlbmFtZSBPdXRTbG90VHlw
ZTo6RnVuYyljYWxsYmFjazsKICAgICAgICBkYXRhLm9iaj10aGlzOwogICAgICAgIHJldHVybiB0
bXA7CiAgICAgICB9CgogICAgIENvbm5lY3Rpb24gY29ubmVjdChjb25zdCBJblNsb3RUeXBlICZz
KQogICAgICAgewogICAgICAgIHJldHVybiBvdXRfY29ubmVjdChzLmRhdGEoKSk7CiAgICAgICB9
CgogICAgIFNUeXBlIGVtaXQodHlwZW5hbWUgVHJhaXQ8UDE+OjpyZWYgcDEsdHlwZW5hbWUgVHJh
aXQ8UDI+OjpyZWYgcDIsdHlwZW5hbWUgVHJhaXQ8UDM+OjpyZWYgcDMsdHlwZW5hbWUgVHJhaXQ8
UDQ+OjpyZWYgcDQsdHlwZW5hbWUgVHJhaXQ8UDU+OjpyZWYgcDUsdHlwZW5hbWUgVHJhaXQ8UDY+
OjpyZWYgcDYpOwogICAgIFNUeXBlIG9wZXJhdG9yKCkodHlwZW5hbWUgVHJhaXQ8UDE+OjpyZWYg
cDEsdHlwZW5hbWUgVHJhaXQ8UDI+OjpyZWYgcDIsdHlwZW5hbWUgVHJhaXQ8UDM+OjpyZWYgcDMs
dHlwZW5hbWUgVHJhaXQ8UDQ+OjpyZWYgcDQsdHlwZW5hbWUgVHJhaXQ8UDU+OjpyZWYgcDUsdHlw
ZW5hbWUgVHJhaXQ8UDY+OjpyZWYgcDYpCiAgICAgICB7cmV0dXJuIGVtaXQocDEscDIscDMscDQs
cDUscDYpO30KCiAgICAgU2lnbmFsNigpIHt9CiAgICAgU2lnbmFsNihjb25zdCBJblNsb3RUeXBl
ICZzKSB7Y29ubmVjdChzKTt9CiAgICAgflNpZ25hbDYoKSB7fQogIH07CgoKIAp0ZW1wbGF0ZSA8
Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQNSxjbGFz
cyBQNixjbGFzcyBNYXJzaD4KdHlwZW5hbWUgIFNpZ25hbDY8UixQMSxQMixQMyxQNCxQNSxQNixN
YXJzaD46OlNUeXBlIFNpZ25hbDY8UixQMSxQMixQMyxQNCxQNSxQNixNYXJzaD46OgogIGVtaXQo
dHlwZW5hbWUgVHJhaXQ8UDE+OjpyZWYgcDEsdHlwZW5hbWUgVHJhaXQ8UDI+OjpyZWYgcDIsdHlw
ZW5hbWUgVHJhaXQ8UDM+OjpyZWYgcDMsdHlwZW5hbWUgVHJhaXQ8UDQ+OjpyZWYgcDQsdHlwZW5h
bWUgVHJhaXQ8UDU+OjpyZWYgcDUsdHlwZW5hbWUgVHJhaXQ8UDY+OjpyZWYgcDYpCiAgewogICBp
ZiAoIWltcGx8fGltcGwtPm91dGdvaW5nXy5lbXB0eSgpKSByZXR1cm4gTWFyc2g6OmRlZmF1bHRf
dmFsdWUoKTsKICAgTGlzdCAmb3V0PWltcGwtPm91dGdvaW5nXzsgCiAgIE1hcnNoIHJjOwogICBT
bG90RGF0YSAqZGF0YTsKICAgTGlzdDo6SXRlcmF0b3IgaT1vdXQuYmVnaW4oKTsKICAgd2hpbGUg
KGkhPW91dC5lbmQoKSkKICAgICB7CiAgICAgIGRhdGE9KChTbG90RGVwZW5kZW50KikoaS5ub2Rl
KCkpKS0+cGFyZW50KCk7CiAgICAgICsraTsKICAgICAgQ2FsbGJhY2smIHM9KENhbGxiYWNrJiko
ZGF0YS0+Y2FsbGJhY2soKSk7CiAgICAgIGlmIChyYy5tYXJzaGFsKHMuY2FsbChwMSxwMixwMyxw
NCxwNSxwNikpKSByZXR1cm4gcmMudmFsdWUoKTsKICAgICB9IAogICByZXR1cm4gcmMudmFsdWUo
KTsKICB9CgoKdGVtcGxhdGUgPGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0LGNs
YXNzIFA1LGNsYXNzIFA2LGNsYXNzIE1hcnNoPgpjbGFzcyBTaWduYWw2PHZvaWQsUDEsUDIsUDMs
UDQsUDUsUDYsTWFyc2g+CiAgOnB1YmxpYyBTaWduYWxfCiAgewogICBwdWJsaWM6CiAgICAgdHlw
ZWRlZiBTbG90Njx2b2lkLFAxLFAyLFAzLFA0LFA1LFA2PiBJblNsb3RUeXBlOwogICAgIHR5cGVk
ZWYgU2xvdDY8dm9pZCxQMSxQMixQMyxQNCxQNSxQNj4gT3V0U2xvdFR5cGU7CiAgIHByaXZhdGU6
CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBJblNsb3RUeXBlOjpDYWxsYmFjayBDYWxsYmFjazsKICAg
ICB0eXBlZGVmIFNpZ25hbDY8dm9pZCxQMSxQMixQMyxQNCxQNSxQNixNYXJzaD4gU2VsZjsKICAg
ICB0eXBlZGVmIENhbGxEYXRhT2JqMjx0eXBlbmFtZSBPdXRTbG90VHlwZTo6RnVuYyxTZWxmPiBD
YWxsRGF0YTsKCiAgICAgc3RhdGljIHZvaWQgY2FsbGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMixQ
MyBwMyxQNCBwNCxQNSBwNSxQNiBwNikKICAgICAgIHsKICAgICAgICBDYWxsRGF0YSogZGF0YT0o
Q2FsbERhdGEqKWQ7CiAgICAgICAgZGF0YS0+b2JqLT5lbWl0KHAxLHAyLHAzLHA0LHA1LHA2KTsK
ICAgICAgIH0KCiAgIHB1YmxpYzoKICAgICBPdXRTbG90VHlwZSBzbG90KCkKICAgICAgIHsKICAg
ICAgICBTbG90RGF0YSogdG1wPWluX2Nvbm5lY3QoKTsKICAgICAgICBDYWxsRGF0YSYgZGF0YT1y
ZWludGVycHJldF9jYXN0PENhbGxEYXRhJj4odG1wLT5kYXRhXyk7CiAgICAgICAgZGF0YS5jYWxs
YmFjaz1jYWxsYmFjazsKICAgICAgICBkYXRhLm9iaj10aGlzOwogICAgICAgIHJldHVybiB0bXA7
CiAgICAgICB9CgogICAgIENvbm5lY3Rpb24gY29ubmVjdChjb25zdCBJblNsb3RUeXBlICZzKQog
ICAgICAgewogICAgICAgIHJldHVybiBvdXRfY29ubmVjdChzLmRhdGEoKSk7CiAgICAgICB9Cgog
ICAgIHZvaWQgZW1pdCh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQ
Mj46OnJlZiBwMix0eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBUcmFpdDxQND46
OnJlZiBwNCx0eXBlbmFtZSBUcmFpdDxQNT46OnJlZiBwNSx0eXBlbmFtZSBUcmFpdDxQNj46OnJl
ZiBwNik7CiAgICAgdm9pZCBvcGVyYXRvcigpKHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAxLHR5
cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6cmVmIHAzLHR5cGVu
YW1lIFRyYWl0PFA0Pjo6cmVmIHA0LHR5cGVuYW1lIFRyYWl0PFA1Pjo6cmVmIHA1LHR5cGVuYW1l
IFRyYWl0PFA2Pjo6cmVmIHA2KQogICAgICAge2VtaXQocDEscDIscDMscDQscDUscDYpO30KCiAg
ICAgU2lnbmFsNigpIHt9CiAgICAgU2lnbmFsNihjb25zdCBJblNsb3RUeXBlICZzKSB7Y29ubmVj
dChzKTt9CiAgICAgflNpZ25hbDYoKSB7fQogIH07CgoKIAp0ZW1wbGF0ZSA8Y2xhc3MgUDEsY2xh
c3MgUDIsY2xhc3MgUDMsY2xhc3MgUDQsY2xhc3MgUDUsY2xhc3MgUDYsY2xhc3MgTWFyc2g+CnZv
aWQgU2lnbmFsNjx2b2lkLFAxLFAyLFAzLFA0LFA1LFA2LE1hcnNoPjo6CiAgZW1pdCh0eXBlbmFt
ZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMix0eXBlbmFtZSBU
cmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBUcmFpdDxQND46OnJlZiBwNCx0eXBlbmFtZSBUcmFp
dDxQNT46OnJlZiBwNSx0eXBlbmFtZSBUcmFpdDxQNj46OnJlZiBwNikKICB7CiAgIGlmICghaW1w
bHx8aW1wbC0+b3V0Z29pbmdfLmVtcHR5KCkpIHJldHVybjsKICAgTGlzdCAmb3V0PWltcGwtPm91
dGdvaW5nXzsgCiAgIFNsb3REYXRhICpkYXRhOwogICBMaXN0OjpJdGVyYXRvciBpPW91dC5iZWdp
bigpOwogICB3aGlsZSAoaSE9b3V0LmVuZCgpKQogICAgIHsKICAgICAgZGF0YT0oKFNsb3REZXBl
bmRlbnQqKShpLm5vZGUoKSkpLT5wYXJlbnQoKTsKICAgICAgKytpOwogICAgICBDYWxsYmFjayYg
cz0oQ2FsbGJhY2smKShkYXRhLT5jYWxsYmFjaygpKTsKICAgICAgcy5jYWxsKHAxLHAyLHAzLHA0
LHA1LHA2KTsKICAgICB9CiAgfQoKCgoKIAoKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxj
bGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQNSxjbGFzcyBQNixjbGFzcyBQNyx0eXBl
bmFtZSBNYXJzaD1NYXJzaGFsPFI+ID4KICBjbGFzcyBTaWduYWw3OnB1YmxpYyBTaWduYWxfCiAg
ewogICBwdWJsaWM6CiAgICAgdHlwZWRlZiBTbG90NzxSLFAxLFAyLFAzLFA0LFA1LFA2LFA3PiAg
ICAgICAgICAgICAgICAgICAgICAgSW5TbG90VHlwZTsKICAgICB0eXBlZGVmIFNsb3Q3PHR5cGVu
YW1lIE1hcnNoOjpPdXRUeXBlLFAxLFAyLFAzLFA0LFA1LFA2LFA3PiBPdXRTbG90VHlwZTsKCiAg
IHByaXZhdGU6CgogICAgIHR5cGVkZWYgdHlwZW5hbWUgTWFyc2g6Ok91dFR5cGUgU1R5cGU7CiAg
ICAgdHlwZWRlZiBSIFJUeXBlOwoKCgoKICAgICB0eXBlZGVmIHR5cGVuYW1lIEluU2xvdFR5cGU6
OkNhbGxiYWNrIENhbGxiYWNrOwogICAgIHR5cGVkZWYgU2lnbmFsNzxSLFAxLFAyLFAzLFA0LFA1
LFA2LFA3LE1hcnNoPiBTZWxmOwogICAgIHR5cGVkZWYgQ2FsbERhdGFPYmoyPHR5cGVuYW1lIE91
dFNsb3RUeXBlOjpGdW5jLFNlbGY+IENhbGxEYXRhOwoKICAgICBzdGF0aWMgU1R5cGUgY2FsbGJh
Y2sodm9pZCogZCxQMSBwMSxQMiBwMixQMyBwMyxQNCBwNCxQNSBwNSxQNiBwNixQNyBwNykKICAg
ICAgIHsKICAgICAgICBDYWxsRGF0YSogZGF0YT0oQ2FsbERhdGEqKWQ7CiAgICAgICAgcmV0dXJu
IGRhdGEtPm9iai0+ZW1pdChwMSxwMixwMyxwNCxwNSxwNixwNyk7CiAgICAgICB9CgogICBwdWJs
aWM6CiAgICAgT3V0U2xvdFR5cGUgc2xvdCgpCiAgICAgICB7CiAgICAgICAgU2xvdERhdGEqIHRt
cD1pbl9jb25uZWN0KCk7CiAgICAgICAgQ2FsbERhdGEgJmRhdGE9cmVpbnRlcnByZXRfY2FzdDxD
YWxsRGF0YSY+KHRtcC0+ZGF0YV8pOwogICAgICAgIGRhdGEuY2FsbGJhY2s9KHR5cGVuYW1lIE91
dFNsb3RUeXBlOjpGdW5jKWNhbGxiYWNrOwogICAgICAgIGRhdGEub2JqPXRoaXM7CiAgICAgICAg
cmV0dXJuIHRtcDsKICAgICAgIH0KCiAgICAgQ29ubmVjdGlvbiBjb25uZWN0KGNvbnN0IEluU2xv
dFR5cGUgJnMpCiAgICAgICB7CiAgICAgICAgcmV0dXJuIG91dF9jb25uZWN0KHMuZGF0YSgpKTsK
ICAgICAgIH0KCiAgICAgU1R5cGUgZW1pdCh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBl
bmFtZSBUcmFpdDxQMj46OnJlZiBwMix0eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBwMyx0eXBlbmFt
ZSBUcmFpdDxQND46OnJlZiBwNCx0eXBlbmFtZSBUcmFpdDxQNT46OnJlZiBwNSx0eXBlbmFtZSBU
cmFpdDxQNj46OnJlZiBwNix0eXBlbmFtZSBUcmFpdDxQNz46OnJlZiBwNyk7CiAgICAgU1R5cGUg
b3BlcmF0b3IoKSh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46
OnJlZiBwMix0eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBUcmFpdDxQND46OnJl
ZiBwNCx0eXBlbmFtZSBUcmFpdDxQNT46OnJlZiBwNSx0eXBlbmFtZSBUcmFpdDxQNj46OnJlZiBw
Nix0eXBlbmFtZSBUcmFpdDxQNz46OnJlZiBwNykKICAgICAgIHtyZXR1cm4gZW1pdChwMSxwMixw
MyxwNCxwNSxwNixwNyk7fQoKICAgICBTaWduYWw3KCkge30KICAgICBTaWduYWw3KGNvbnN0IElu
U2xvdFR5cGUgJnMpIHtjb25uZWN0KHMpO30KICAgICB+U2lnbmFsNygpIHt9CiAgfTsKCgogCnRl
bXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0LGNsYXNz
IFA1LGNsYXNzIFA2LGNsYXNzIFA3LGNsYXNzIE1hcnNoPgp0eXBlbmFtZSAgU2lnbmFsNzxSLFAx
LFAyLFAzLFA0LFA1LFA2LFA3LE1hcnNoPjo6U1R5cGUgU2lnbmFsNzxSLFAxLFAyLFAzLFA0LFA1
LFA2LFA3LE1hcnNoPjo6CiAgZW1pdCh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFt
ZSBUcmFpdDxQMj46OnJlZiBwMix0eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBU
cmFpdDxQND46OnJlZiBwNCx0eXBlbmFtZSBUcmFpdDxQNT46OnJlZiBwNSx0eXBlbmFtZSBUcmFp
dDxQNj46OnJlZiBwNix0eXBlbmFtZSBUcmFpdDxQNz46OnJlZiBwNykKICB7CiAgIGlmICghaW1w
bHx8aW1wbC0+b3V0Z29pbmdfLmVtcHR5KCkpIHJldHVybiBNYXJzaDo6ZGVmYXVsdF92YWx1ZSgp
OwogICBMaXN0ICZvdXQ9aW1wbC0+b3V0Z29pbmdfOyAKICAgTWFyc2ggcmM7CiAgIFNsb3REYXRh
ICpkYXRhOwogICBMaXN0OjpJdGVyYXRvciBpPW91dC5iZWdpbigpOwogICB3aGlsZSAoaSE9b3V0
LmVuZCgpKQogICAgIHsKICAgICAgZGF0YT0oKFNsb3REZXBlbmRlbnQqKShpLm5vZGUoKSkpLT5w
YXJlbnQoKTsKICAgICAgKytpOwogICAgICBDYWxsYmFjayYgcz0oQ2FsbGJhY2smKShkYXRhLT5j
YWxsYmFjaygpKTsKICAgICAgaWYgKHJjLm1hcnNoYWwocy5jYWxsKHAxLHAyLHAzLHA0LHA1LHA2
LHA3KSkpIHJldHVybiByYy52YWx1ZSgpOwogICAgIH0gCiAgIHJldHVybiByYy52YWx1ZSgpOwog
IH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsY2xhc3MgUDQsY2xhc3Mg
UDUsY2xhc3MgUDYsY2xhc3MgUDcsY2xhc3MgTWFyc2g+CmNsYXNzIFNpZ25hbDc8dm9pZCxQMSxQ
MixQMyxQNCxQNSxQNixQNyxNYXJzaD4KICA6cHVibGljIFNpZ25hbF8KICB7CiAgIHB1YmxpYzoK
ICAgICB0eXBlZGVmIFNsb3Q3PHZvaWQsUDEsUDIsUDMsUDQsUDUsUDYsUDc+IEluU2xvdFR5cGU7
CiAgICAgdHlwZWRlZiBTbG90Nzx2b2lkLFAxLFAyLFAzLFA0LFA1LFA2LFA3PiBPdXRTbG90VHlw
ZTsKICAgcHJpdmF0ZToKICAgICB0eXBlZGVmIHR5cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNr
IENhbGxiYWNrOwogICAgIHR5cGVkZWYgU2lnbmFsNzx2b2lkLFAxLFAyLFAzLFA0LFA1LFA2LFA3
LE1hcnNoPiBTZWxmOwogICAgIHR5cGVkZWYgQ2FsbERhdGFPYmoyPHR5cGVuYW1lIE91dFNsb3RU
eXBlOjpGdW5jLFNlbGY+IENhbGxEYXRhOwoKICAgICBzdGF0aWMgdm9pZCBjYWxsYmFjayh2b2lk
KiBkLFAxIHAxLFAyIHAyLFAzIHAzLFA0IHA0LFA1IHA1LFA2IHA2LFA3IHA3KQogICAgICAgewog
ICAgICAgIENhbGxEYXRhKiBkYXRhPShDYWxsRGF0YSopZDsKICAgICAgICBkYXRhLT5vYmotPmVt
aXQocDEscDIscDMscDQscDUscDYscDcpOwogICAgICAgfQoKICAgcHVibGljOgogICAgIE91dFNs
b3RUeXBlIHNsb3QoKQogICAgICAgewogICAgICAgIFNsb3REYXRhKiB0bXA9aW5fY29ubmVjdCgp
OwogICAgICAgIENhbGxEYXRhJiBkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEmPih0bXAt
PmRhdGFfKTsKICAgICAgICBkYXRhLmNhbGxiYWNrPWNhbGxiYWNrOwogICAgICAgIGRhdGEub2Jq
PXRoaXM7CiAgICAgICAgcmV0dXJuIHRtcDsKICAgICAgIH0KCiAgICAgQ29ubmVjdGlvbiBjb25u
ZWN0KGNvbnN0IEluU2xvdFR5cGUgJnMpCiAgICAgICB7CiAgICAgICAgcmV0dXJuIG91dF9jb25u
ZWN0KHMuZGF0YSgpKTsKICAgICAgIH0KCiAgICAgdm9pZCBlbWl0KHR5cGVuYW1lIFRyYWl0PFAx
Pjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6
cmVmIHAzLHR5cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0LHR5cGVuYW1lIFRyYWl0PFA1Pjo6cmVm
IHA1LHR5cGVuYW1lIFRyYWl0PFA2Pjo6cmVmIHA2LHR5cGVuYW1lIFRyYWl0PFA3Pjo6cmVmIHA3
KTsKICAgICB2b2lkIG9wZXJhdG9yKCkodHlwZW5hbWUgVHJhaXQ8UDE+OjpyZWYgcDEsdHlwZW5h
bWUgVHJhaXQ8UDI+OjpyZWYgcDIsdHlwZW5hbWUgVHJhaXQ8UDM+OjpyZWYgcDMsdHlwZW5hbWUg
VHJhaXQ8UDQ+OjpyZWYgcDQsdHlwZW5hbWUgVHJhaXQ8UDU+OjpyZWYgcDUsdHlwZW5hbWUgVHJh
aXQ8UDY+OjpyZWYgcDYsdHlwZW5hbWUgVHJhaXQ8UDc+OjpyZWYgcDcpCiAgICAgICB7ZW1pdChw
MSxwMixwMyxwNCxwNSxwNixwNyk7fQoKICAgICBTaWduYWw3KCkge30KICAgICBTaWduYWw3KGNv
bnN0IEluU2xvdFR5cGUgJnMpIHtjb25uZWN0KHMpO30KICAgICB+U2lnbmFsNygpIHt9CiAgfTsK
CgogCnRlbXBsYXRlIDxjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQ
NSxjbGFzcyBQNixjbGFzcyBQNyxjbGFzcyBNYXJzaD4Kdm9pZCBTaWduYWw3PHZvaWQsUDEsUDIs
UDMsUDQsUDUsUDYsUDcsTWFyc2g+OjoKICBlbWl0KHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAx
LHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6cmVmIHAzLHR5
cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0LHR5cGVuYW1lIFRyYWl0PFA1Pjo6cmVmIHA1LHR5cGVu
YW1lIFRyYWl0PFA2Pjo6cmVmIHA2LHR5cGVuYW1lIFRyYWl0PFA3Pjo6cmVmIHA3KQogIHsKICAg
aWYgKCFpbXBsfHxpbXBsLT5vdXRnb2luZ18uZW1wdHkoKSkgcmV0dXJuOwogICBMaXN0ICZvdXQ9
aW1wbC0+b3V0Z29pbmdfOyAKICAgU2xvdERhdGEgKmRhdGE7CiAgIExpc3Q6Okl0ZXJhdG9yIGk9
b3V0LmJlZ2luKCk7CiAgIHdoaWxlIChpIT1vdXQuZW5kKCkpCiAgICAgewogICAgICBkYXRhPSgo
U2xvdERlcGVuZGVudCopKGkubm9kZSgpKSktPnBhcmVudCgpOwogICAgICArK2k7CiAgICAgIENh
bGxiYWNrJiBzPShDYWxsYmFjayYpKGRhdGEtPmNhbGxiYWNrKCkpOwogICAgICBzLmNhbGwocDEs
cDIscDMscDQscDUscDYscDcpOwogICAgIH0KICB9CgoKCgoKCn0gIAoKCgoKCgoKCgojIDMxICIv
b3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9zaWduYWxfc3lzdGVtLmgiIDIKCgoKCiAKCiMgNiAiL29w
dC9ndGsvaW5jbHVkZS9ndGstLS9wcm94eS5oIiAyCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvc2ln
YysrL2JpbmQuaCIgMQogCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL2FkYXB0b3IuaCIgMQogCiAKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKbmFtZXNwYWNlIFNpZ0MKewoKCnN0cnVjdCAgIEFkYXB0b3JOb2RlIDog
cHVibGljIFNsb3ROb2RlCiAgewogICBDYWxsYmFja18gZGF0YV87CiAgfTsKCnN0cnVjdCAgIEFk
YXB0b3JTbG90XwogIHsKICAgc3RhdGljIHZvaWQgY29weV9jYWxsYmFjayhTbG90RGF0YSogc2Rh
dGEsQWRhcHRvck5vZGUqIG5vZGUpOwogIH07CgoKfSAgCgoKCgojIDQ2ICIvb3B0L2d0ay9pbmNs
dWRlL3NpZ2MrKy9iaW5kLmgiIDIKCgoKCm5hbWVzcGFjZSBTaWdDCnsKCgoKCgoKCgoKCgoKCiAK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgUiwKICAgY2xhc3MgQzE+CnN0cnVjdCBBZGFwdG9yQmluZFNsb3Qw
XzE6IHB1YmxpYyBBZGFwdG9yU2xvdF8KICB7CgogICB0eXBlZGVmIFIgUlR5cGU7CgoKCiAgIHR5
cGVkZWYgU2xvdDA8Uj4gU2xvdFR5cGU7CiAgIHR5cGVkZWYgU2xvdDE8UixDMT4gSW5TbG90VHlw
ZTsKCiAgIHN0cnVjdCBOb2RlOnB1YmxpYyBBZGFwdG9yTm9kZQogICAgIHsKICAgICAgQzEgYzFf
OwoKICAgICAgTm9kZShDMSBjMSkKCTogYzFfKGMxKQogCXsgfQogICAgIH07CgogICB0eXBlZGVm
IENhbGxEYXRhT2JqMjx0eXBlbmFtZSBTbG90VHlwZTo6RnVuYyxOb2RlPiBDYWxsRGF0YTsKCiAg
IHN0YXRpYyBSVHlwZSBjYWxsYmFjayh2b2lkKiBkKQogICAgIHsKICAgICAgQ2FsbERhdGEqIGRh
dGE9KENhbGxEYXRhKilkOwogICAgICBOb2RlKiBub2RlPWRhdGEtPm9iajsKICAgICAgcmV0dXJu
ICgodHlwZW5hbWUgSW5TbG90VHlwZTo6Q2FsbGJhY2smKShub2RlLT5kYXRhXykpKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+YzFfKTsKICAgICB9CiAgIHN0YXRp
YyBTbG90RGF0YSogY3JlYXRlKFNsb3REYXRhICpzLEMxIGMxKQogICAgIHsKICAgICAgTm9kZSAq
bm9kZT1uZXcgTm9kZShjMSk7CiAgICAgIGNvcHlfY2FsbGJhY2socyxub2RlKTsKICAgICAgQ2Fs
bERhdGEgJmRhdGE9cmVpbnRlcnByZXRfY2FzdDxDYWxsRGF0YSY+KHMtPmRhdGFfKTsKICAgICAg
ZGF0YS5jYWxsYmFjaz0mY2FsbGJhY2s7CiAgICAgIGRhdGEub2JqPW5vZGU7CiAgICAgIHJldHVy
biBzOwogICAgIH0KICB9OwoKCiMgMTUyICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9iaW5kLmgi
CgoKdGVtcGxhdGUgPGNsYXNzIEExLAogICAgY2xhc3MgUiwKICAgIGNsYXNzIEMxPgppbmxpbmUK
U2xvdDA8Uj4KICBiaW5kKGNvbnN0IFNsb3QxPFIsQzE+ICZzLAogICAgICAgQTEgYTEpCiAge3Jl
dHVybiBBZGFwdG9yQmluZFNsb3QwXzE8UiwKICAgICAgICAgICBDMT46OmNyZWF0ZShzLmRhdGEo
KSxhMSk7CiAgfQoKCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwKICAgY2xhc3MgUDEsCiAgIGNsYXNz
IEMxPgpzdHJ1Y3QgQWRhcHRvckJpbmRTbG90MV8xOiBwdWJsaWMgQWRhcHRvclNsb3RfCiAgewoK
ICAgdHlwZWRlZiBSIFJUeXBlOwoKCgogICB0eXBlZGVmIFNsb3QxPFIsUDE+IFNsb3RUeXBlOwog
ICB0eXBlZGVmIFNsb3QyPFIsUDEsQzE+IEluU2xvdFR5cGU7CgogICBzdHJ1Y3QgTm9kZTpwdWJs
aWMgQWRhcHRvck5vZGUKICAgICB7CiAgICAgIEMxIGMxXzsKCiAgICAgIE5vZGUoQzEgYzEpCgk6
IGMxXyhjMSkKIAl7IH0KICAgICB9OwoKICAgdHlwZWRlZiBDYWxsRGF0YU9iajI8dHlwZW5hbWUg
U2xvdFR5cGU6OkZ1bmMsTm9kZT4gQ2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2FsbGJhY2so
dm9pZCogZCxQMSBwMSkKICAgICB7CiAgICAgIENhbGxEYXRhKiBkYXRhPShDYWxsRGF0YSopZDsK
ICAgICAgTm9kZSogbm9kZT1kYXRhLT5vYmo7CiAgICAgIHJldHVybiAoKHR5cGVuYW1lIEluU2xv
dFR5cGU6OkNhbGxiYWNrJikobm9kZS0+ZGF0YV8pKShwMSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmMxXyk7CiAgICAgfQogICBzdGF0aWMgU2xvdERhdGEqIGNy
ZWF0ZShTbG90RGF0YSAqcyxDMSBjMSkKICAgICB7CiAgICAgIE5vZGUgKm5vZGU9bmV3IE5vZGUo
YzEpOwogICAgICBjb3B5X2NhbGxiYWNrKHMsbm9kZSk7CiAgICAgIENhbGxEYXRhICZkYXRhPXJl
aW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEmPihzLT5kYXRhXyk7CiAgICAgIGRhdGEuY2FsbGJhY2s9
JmNhbGxiYWNrOwogICAgICBkYXRhLm9iaj1ub2RlOwogICAgICByZXR1cm4gczsKICAgICB9CiAg
fTsKCgojIDI1NCAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvYmluZC5oIgoKCnRlbXBsYXRlIDxj
bGFzcyBBMSwKICAgIGNsYXNzIFIsCiAgICBjbGFzcyBQMSwKICAgIGNsYXNzIEMxPgppbmxpbmUK
U2xvdDE8UixQMT4KICBiaW5kKGNvbnN0IFNsb3QyPFIsUDEsQzE+ICZzLAogICAgICAgQTEgYTEp
CiAge3JldHVybiBBZGFwdG9yQmluZFNsb3QxXzE8UiwKICAgICAgICAgICBQMSwKICAgICAgICAg
ICBDMT46OmNyZWF0ZShzLmRhdGEoKSxhMSk7CiAgfQoKCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwK
ICAgY2xhc3MgUDEsY2xhc3MgUDIsCiAgIGNsYXNzIEMxPgpzdHJ1Y3QgQWRhcHRvckJpbmRTbG90
Ml8xOiBwdWJsaWMgQWRhcHRvclNsb3RfCiAgewoKICAgdHlwZWRlZiBSIFJUeXBlOwoKCgogICB0
eXBlZGVmIFNsb3QyPFIsUDEsUDI+IFNsb3RUeXBlOwogICB0eXBlZGVmIFNsb3QzPFIsUDEsUDIs
QzE+IEluU2xvdFR5cGU7CgogICBzdHJ1Y3QgTm9kZTpwdWJsaWMgQWRhcHRvck5vZGUKICAgICB7
CiAgICAgIEMxIGMxXzsKCiAgICAgIE5vZGUoQzEgYzEpCgk6IGMxXyhjMSkKIAl7IH0KICAgICB9
OwoKICAgdHlwZWRlZiBDYWxsRGF0YU9iajI8dHlwZW5hbWUgU2xvdFR5cGU6OkZ1bmMsTm9kZT4g
Q2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMikK
ICAgICB7CiAgICAgIENhbGxEYXRhKiBkYXRhPShDYWxsRGF0YSopZDsKICAgICAgTm9kZSogbm9k
ZT1kYXRhLT5vYmo7CiAgICAgIHJldHVybiAoKHR5cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNr
Jikobm9kZS0+ZGF0YV8pKShwMSxwMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmMxXyk7CiAgICAgfQogICBzdGF0aWMgU2xvdERhdGEqIGNyZWF0ZShTbG90RGF0
YSAqcyxDMSBjMSkKICAgICB7CiAgICAgIE5vZGUgKm5vZGU9bmV3IE5vZGUoYzEpOwogICAgICBj
b3B5X2NhbGxiYWNrKHMsbm9kZSk7CiAgICAgIENhbGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nh
c3Q8Q2FsbERhdGEmPihzLT5kYXRhXyk7CiAgICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNrOwog
ICAgICBkYXRhLm9iaj1ub2RlOwogICAgICByZXR1cm4gczsKICAgICB9CiAgfTsKCgojIDM1OCAi
L29wdC9ndGsvaW5jbHVkZS9zaWdjKysvYmluZC5oIgoKCnRlbXBsYXRlIDxjbGFzcyBBMSwKICAg
IGNsYXNzIFIsCiAgICBjbGFzcyBQMSxjbGFzcyBQMiwKICAgIGNsYXNzIEMxPgppbmxpbmUKU2xv
dDI8UixQMSxQMj4KICBiaW5kKGNvbnN0IFNsb3QzPFIsUDEsUDIsQzE+ICZzLAogICAgICAgQTEg
YTEpCiAge3JldHVybiBBZGFwdG9yQmluZFNsb3QyXzE8UiwKICAgICAgICAgICBQMSxQMiwKICAg
ICAgICAgICBDMT46OmNyZWF0ZShzLmRhdGEoKSxhMSk7CiAgfQoKCiAKCgp0ZW1wbGF0ZSA8Y2xh
c3MgUiwKICAgY2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsCiAgIGNsYXNzIEMxPgpzdHJ1Y3Qg
QWRhcHRvckJpbmRTbG90M18xOiBwdWJsaWMgQWRhcHRvclNsb3RfCiAgewoKICAgdHlwZWRlZiBS
IFJUeXBlOwoKCgogICB0eXBlZGVmIFNsb3QzPFIsUDEsUDIsUDM+IFNsb3RUeXBlOwogICB0eXBl
ZGVmIFNsb3Q0PFIsUDEsUDIsUDMsQzE+IEluU2xvdFR5cGU7CgogICBzdHJ1Y3QgTm9kZTpwdWJs
aWMgQWRhcHRvck5vZGUKICAgICB7CiAgICAgIEMxIGMxXzsKCiAgICAgIE5vZGUoQzEgYzEpCgk6
IGMxXyhjMSkKIAl7IH0KICAgICB9OwoKICAgdHlwZWRlZiBDYWxsRGF0YU9iajI8dHlwZW5hbWUg
U2xvdFR5cGU6OkZ1bmMsTm9kZT4gQ2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2FsbGJhY2so
dm9pZCogZCxQMSBwMSxQMiBwMixQMyBwMykKICAgICB7CiAgICAgIENhbGxEYXRhKiBkYXRhPShD
YWxsRGF0YSopZDsKICAgICAgTm9kZSogbm9kZT1kYXRhLT5vYmo7CiAgICAgIHJldHVybiAoKHR5
cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNrJikobm9kZS0+ZGF0YV8pKShwMSxwMixwMywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmMxXyk7CiAgICAgfQogICBz
dGF0aWMgU2xvdERhdGEqIGNyZWF0ZShTbG90RGF0YSAqcyxDMSBjMSkKICAgICB7CiAgICAgIE5v
ZGUgKm5vZGU9bmV3IE5vZGUoYzEpOwogICAgICBjb3B5X2NhbGxiYWNrKHMsbm9kZSk7CiAgICAg
IENhbGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEmPihzLT5kYXRhXyk7CiAg
ICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNrOwogICAgICBkYXRhLm9iaj1ub2RlOwogICAgICBy
ZXR1cm4gczsKICAgICB9CiAgfTsKCgojIDQ2MiAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvYmlu
ZC5oIgoKCnRlbXBsYXRlIDxjbGFzcyBBMSwKICAgIGNsYXNzIFIsCiAgICBjbGFzcyBQMSxjbGFz
cyBQMixjbGFzcyBQMywKICAgIGNsYXNzIEMxPgppbmxpbmUKU2xvdDM8UixQMSxQMixQMz4KICBi
aW5kKGNvbnN0IFNsb3Q0PFIsUDEsUDIsUDMsQzE+ICZzLAogICAgICAgQTEgYTEpCiAge3JldHVy
biBBZGFwdG9yQmluZFNsb3QzXzE8UiwKICAgICAgICAgICBQMSxQMixQMywKICAgICAgICAgICBD
MT46OmNyZWF0ZShzLmRhdGEoKSxhMSk7CiAgfQoKCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwKICAg
Y2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsY2xhc3MgUDQsCiAgIGNsYXNzIEMxPgpzdHJ1Y3Qg
QWRhcHRvckJpbmRTbG90NF8xOiBwdWJsaWMgQWRhcHRvclNsb3RfCiAgewoKICAgdHlwZWRlZiBS
IFJUeXBlOwoKCgogICB0eXBlZGVmIFNsb3Q0PFIsUDEsUDIsUDMsUDQ+IFNsb3RUeXBlOwogICB0
eXBlZGVmIFNsb3Q1PFIsUDEsUDIsUDMsUDQsQzE+IEluU2xvdFR5cGU7CgogICBzdHJ1Y3QgTm9k
ZTpwdWJsaWMgQWRhcHRvck5vZGUKICAgICB7CiAgICAgIEMxIGMxXzsKCiAgICAgIE5vZGUoQzEg
YzEpCgk6IGMxXyhjMSkKIAl7IH0KICAgICB9OwoKICAgdHlwZWRlZiBDYWxsRGF0YU9iajI8dHlw
ZW5hbWUgU2xvdFR5cGU6OkZ1bmMsTm9kZT4gQ2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2Fs
bGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMixQMyBwMyxQNCBwNCkKICAgICB7CiAgICAgIENhbGxE
YXRhKiBkYXRhPShDYWxsRGF0YSopZDsKICAgICAgTm9kZSogbm9kZT1kYXRhLT5vYmo7CiAgICAg
IHJldHVybiAoKHR5cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNrJikobm9kZS0+ZGF0YV8pKShw
MSxwMixwMyxwNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmMx
Xyk7CiAgICAgfQogICBzdGF0aWMgU2xvdERhdGEqIGNyZWF0ZShTbG90RGF0YSAqcyxDMSBjMSkK
ICAgICB7CiAgICAgIE5vZGUgKm5vZGU9bmV3IE5vZGUoYzEpOwogICAgICBjb3B5X2NhbGxiYWNr
KHMsbm9kZSk7CiAgICAgIENhbGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEm
PihzLT5kYXRhXyk7CiAgICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNrOwogICAgICBkYXRhLm9i
aj1ub2RlOwogICAgICByZXR1cm4gczsKICAgICB9CiAgfTsKCgojIDU2NiAiL29wdC9ndGsvaW5j
bHVkZS9zaWdjKysvYmluZC5oIgoKCnRlbXBsYXRlIDxjbGFzcyBBMSwKICAgIGNsYXNzIFIsCiAg
ICBjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCwKICAgIGNsYXNzIEMxPgppbmxp
bmUKU2xvdDQ8UixQMSxQMixQMyxQND4KICBiaW5kKGNvbnN0IFNsb3Q1PFIsUDEsUDIsUDMsUDQs
QzE+ICZzLAogICAgICAgQTEgYTEpCiAge3JldHVybiBBZGFwdG9yQmluZFNsb3Q0XzE8UiwKICAg
ICAgICAgICBQMSxQMixQMyxQNCwKICAgICAgICAgICBDMT46OmNyZWF0ZShzLmRhdGEoKSxhMSk7
CiAgfQoKCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwKICAgY2xhc3MgUDEsY2xhc3MgUDIsY2xhc3Mg
UDMsY2xhc3MgUDQsY2xhc3MgUDUsCiAgIGNsYXNzIEMxPgpzdHJ1Y3QgQWRhcHRvckJpbmRTbG90
NV8xOiBwdWJsaWMgQWRhcHRvclNsb3RfCiAgewoKICAgdHlwZWRlZiBSIFJUeXBlOwoKCgogICB0
eXBlZGVmIFNsb3Q1PFIsUDEsUDIsUDMsUDQsUDU+IFNsb3RUeXBlOwogICB0eXBlZGVmIFNsb3Q2
PFIsUDEsUDIsUDMsUDQsUDUsQzE+IEluU2xvdFR5cGU7CgogICBzdHJ1Y3QgTm9kZTpwdWJsaWMg
QWRhcHRvck5vZGUKICAgICB7CiAgICAgIEMxIGMxXzsKCiAgICAgIE5vZGUoQzEgYzEpCgk6IGMx
XyhjMSkKIAl7IH0KICAgICB9OwoKICAgdHlwZWRlZiBDYWxsRGF0YU9iajI8dHlwZW5hbWUgU2xv
dFR5cGU6OkZ1bmMsTm9kZT4gQ2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9p
ZCogZCxQMSBwMSxQMiBwMixQMyBwMyxQNCBwNCxQNSBwNSkKICAgICB7CiAgICAgIENhbGxEYXRh
KiBkYXRhPShDYWxsRGF0YSopZDsKICAgICAgTm9kZSogbm9kZT1kYXRhLT5vYmo7CiAgICAgIHJl
dHVybiAoKHR5cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNrJikobm9kZS0+ZGF0YV8pKShwMSxw
MixwMyxwNCxwNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmMx
Xyk7CiAgICAgfQogICBzdGF0aWMgU2xvdERhdGEqIGNyZWF0ZShTbG90RGF0YSAqcyxDMSBjMSkK
ICAgICB7CiAgICAgIE5vZGUgKm5vZGU9bmV3IE5vZGUoYzEpOwogICAgICBjb3B5X2NhbGxiYWNr
KHMsbm9kZSk7CiAgICAgIENhbGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEm
PihzLT5kYXRhXyk7CiAgICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNrOwogICAgICBkYXRhLm9i
aj1ub2RlOwogICAgICByZXR1cm4gczsKICAgICB9CiAgfTsKCgojIDY3MCAiL29wdC9ndGsvaW5j
bHVkZS9zaWdjKysvYmluZC5oIgoKCnRlbXBsYXRlIDxjbGFzcyBBMSwKICAgIGNsYXNzIFIsCiAg
ICBjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQNSwKICAgIGNsYXNz
IEMxPgppbmxpbmUKU2xvdDU8UixQMSxQMixQMyxQNCxQNT4KICBiaW5kKGNvbnN0IFNsb3Q2PFIs
UDEsUDIsUDMsUDQsUDUsQzE+ICZzLAogICAgICAgQTEgYTEpCiAge3JldHVybiBBZGFwdG9yQmlu
ZFNsb3Q1XzE8UiwKICAgICAgICAgICBQMSxQMixQMyxQNCxQNSwKICAgICAgICAgICBDMT46OmNy
ZWF0ZShzLmRhdGEoKSxhMSk7CiAgfQoKCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwKICAgY2xhc3Mg
UDEsY2xhc3MgUDIsY2xhc3MgUDMsY2xhc3MgUDQsY2xhc3MgUDUsY2xhc3MgUDYsCiAgIGNsYXNz
IEMxPgpzdHJ1Y3QgQWRhcHRvckJpbmRTbG90Nl8xOiBwdWJsaWMgQWRhcHRvclNsb3RfCiAgewoK
ICAgdHlwZWRlZiBSIFJUeXBlOwoKCgogICB0eXBlZGVmIFNsb3Q2PFIsUDEsUDIsUDMsUDQsUDUs
UDY+IFNsb3RUeXBlOwogICB0eXBlZGVmIFNsb3Q3PFIsUDEsUDIsUDMsUDQsUDUsUDYsQzE+IElu
U2xvdFR5cGU7CgogICBzdHJ1Y3QgTm9kZTpwdWJsaWMgQWRhcHRvck5vZGUKICAgICB7CiAgICAg
IEMxIGMxXzsKCiAgICAgIE5vZGUoQzEgYzEpCgk6IGMxXyhjMSkKIAl7IH0KICAgICB9OwoKICAg
dHlwZWRlZiBDYWxsRGF0YU9iajI8dHlwZW5hbWUgU2xvdFR5cGU6OkZ1bmMsTm9kZT4gQ2FsbERh
dGE7CgogICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMixQMyBwMyxQ
NCBwNCxQNSBwNSxQNiBwNikKICAgICB7CiAgICAgIENhbGxEYXRhKiBkYXRhPShDYWxsRGF0YSop
ZDsKICAgICAgTm9kZSogbm9kZT1kYXRhLT5vYmo7CiAgICAgIHJldHVybiAoKHR5cGVuYW1lIElu
U2xvdFR5cGU6OkNhbGxiYWNrJikobm9kZS0+ZGF0YV8pKShwMSxwMixwMyxwNCxwNSxwNiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmMxXyk7CiAgICAgfQogICBz
dGF0aWMgU2xvdERhdGEqIGNyZWF0ZShTbG90RGF0YSAqcyxDMSBjMSkKICAgICB7CiAgICAgIE5v
ZGUgKm5vZGU9bmV3IE5vZGUoYzEpOwogICAgICBjb3B5X2NhbGxiYWNrKHMsbm9kZSk7CiAgICAg
IENhbGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEmPihzLT5kYXRhXyk7CiAg
ICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNrOwogICAgICBkYXRhLm9iaj1ub2RlOwogICAgICBy
ZXR1cm4gczsKICAgICB9CiAgfTsKCgojIDc3NCAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvYmlu
ZC5oIgoKCnRlbXBsYXRlIDxjbGFzcyBBMSwKICAgIGNsYXNzIFIsCiAgICBjbGFzcyBQMSxjbGFz
cyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQNSxjbGFzcyBQNiwKICAgIGNsYXNzIEMxPgpp
bmxpbmUKU2xvdDY8UixQMSxQMixQMyxQNCxQNSxQNj4KICBiaW5kKGNvbnN0IFNsb3Q3PFIsUDEs
UDIsUDMsUDQsUDUsUDYsQzE+ICZzLAogICAgICAgQTEgYTEpCiAge3JldHVybiBBZGFwdG9yQmlu
ZFNsb3Q2XzE8UiwKICAgICAgICAgICBQMSxQMixQMyxQNCxQNSxQNiwKICAgICAgICAgICBDMT46
OmNyZWF0ZShzLmRhdGEoKSxhMSk7CiAgfQoKCgogCgoKdGVtcGxhdGUgPGNsYXNzIFIsCiAgIGNs
YXNzIEMxLGNsYXNzIEMyPgpzdHJ1Y3QgQWRhcHRvckJpbmRTbG90MF8yOiBwdWJsaWMgQWRhcHRv
clNsb3RfCiAgewoKICAgdHlwZWRlZiBSIFJUeXBlOwoKCgogICB0eXBlZGVmIFNsb3QwPFI+IFNs
b3RUeXBlOwogICB0eXBlZGVmIFNsb3QyPFIsQzEsQzI+IEluU2xvdFR5cGU7CgogICBzdHJ1Y3Qg
Tm9kZTpwdWJsaWMgQWRhcHRvck5vZGUKICAgICB7CiAgICAgIEMxIGMxXzsKICAgICAgQzIgYzJf
OwoKICAgICAgTm9kZShDMSBjMSxDMiBjMikKCTogYzFfKGMxKSxjMl8oYzIpCiAJeyB9CiAgICAg
fTsKCiAgIHR5cGVkZWYgQ2FsbERhdGFPYmoyPHR5cGVuYW1lIFNsb3RUeXBlOjpGdW5jLE5vZGU+
IENhbGxEYXRhOwoKICAgc3RhdGljIFJUeXBlIGNhbGxiYWNrKHZvaWQqIGQpCiAgICAgewogICAg
ICBDYWxsRGF0YSogZGF0YT0oQ2FsbERhdGEqKWQ7CiAgICAgIE5vZGUqIG5vZGU9ZGF0YS0+b2Jq
OwogICAgICByZXR1cm4gKCh0eXBlbmFtZSBJblNsb3RUeXBlOjpDYWxsYmFjayYpKG5vZGUtPmRh
dGFfKSkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jMV8sbm9k
ZS0+YzJfKTsKICAgICB9CiAgIHN0YXRpYyBTbG90RGF0YSogY3JlYXRlKFNsb3REYXRhICpzLEMx
IGMxLEMyIGMyKQogICAgIHsKICAgICAgTm9kZSAqbm9kZT1uZXcgTm9kZShjMSxjMik7CiAgICAg
IGNvcHlfY2FsbGJhY2socyxub2RlKTsKICAgICAgQ2FsbERhdGEgJmRhdGE9cmVpbnRlcnByZXRf
Y2FzdDxDYWxsRGF0YSY+KHMtPmRhdGFfKTsKICAgICAgZGF0YS5jYWxsYmFjaz0mY2FsbGJhY2s7
CiAgICAgIGRhdGEub2JqPW5vZGU7CiAgICAgIHJldHVybiBzOwogICAgIH0KICB9OwoKCiMgODgw
ICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9iaW5kLmgiCgoKdGVtcGxhdGUgPGNsYXNzIEExLGNs
YXNzIEEyLAogICAgY2xhc3MgUiwKICAgIGNsYXNzIEMxLGNsYXNzIEMyPgppbmxpbmUKU2xvdDA8
Uj4KICBiaW5kKGNvbnN0IFNsb3QyPFIsQzEsQzI+ICZzLAogICAgICAgQTEgYTEsQTIgYTIpCiAg
e3JldHVybiBBZGFwdG9yQmluZFNsb3QwXzI8UiwKICAgICAgICAgICBDMSxDMj46OmNyZWF0ZShz
LmRhdGEoKSxhMSxhMik7CiAgfQoKCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwKICAgY2xhc3MgUDEs
CiAgIGNsYXNzIEMxLGNsYXNzIEMyPgpzdHJ1Y3QgQWRhcHRvckJpbmRTbG90MV8yOiBwdWJsaWMg
QWRhcHRvclNsb3RfCiAgewoKICAgdHlwZWRlZiBSIFJUeXBlOwoKCgogICB0eXBlZGVmIFNsb3Qx
PFIsUDE+IFNsb3RUeXBlOwogICB0eXBlZGVmIFNsb3QzPFIsUDEsQzEsQzI+IEluU2xvdFR5cGU7
CgogICBzdHJ1Y3QgTm9kZTpwdWJsaWMgQWRhcHRvck5vZGUKICAgICB7CiAgICAgIEMxIGMxXzsK
ICAgICAgQzIgYzJfOwoKICAgICAgTm9kZShDMSBjMSxDMiBjMikKCTogYzFfKGMxKSxjMl8oYzIp
CiAJeyB9CiAgICAgfTsKCiAgIHR5cGVkZWYgQ2FsbERhdGFPYmoyPHR5cGVuYW1lIFNsb3RUeXBl
OjpGdW5jLE5vZGU+IENhbGxEYXRhOwoKICAgc3RhdGljIFJUeXBlIGNhbGxiYWNrKHZvaWQqIGQs
UDEgcDEpCiAgICAgewogICAgICBDYWxsRGF0YSogZGF0YT0oQ2FsbERhdGEqKWQ7CiAgICAgIE5v
ZGUqIG5vZGU9ZGF0YS0+b2JqOwogICAgICByZXR1cm4gKCh0eXBlbmFtZSBJblNsb3RUeXBlOjpD
YWxsYmFjayYpKG5vZGUtPmRhdGFfKSkocDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jMV8sbm9kZS0+YzJfKTsKICAgICB9CiAgIHN0YXRpYyBTbG90RGF0YSog
Y3JlYXRlKFNsb3REYXRhICpzLEMxIGMxLEMyIGMyKQogICAgIHsKICAgICAgTm9kZSAqbm9kZT1u
ZXcgTm9kZShjMSxjMik7CiAgICAgIGNvcHlfY2FsbGJhY2socyxub2RlKTsKICAgICAgQ2FsbERh
dGEgJmRhdGE9cmVpbnRlcnByZXRfY2FzdDxDYWxsRGF0YSY+KHMtPmRhdGFfKTsKICAgICAgZGF0
YS5jYWxsYmFjaz0mY2FsbGJhY2s7CiAgICAgIGRhdGEub2JqPW5vZGU7CiAgICAgIHJldHVybiBz
OwogICAgIH0KICB9OwoKCiMgOTg0ICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9iaW5kLmgiCgoK
dGVtcGxhdGUgPGNsYXNzIEExLGNsYXNzIEEyLAogICAgY2xhc3MgUiwKICAgIGNsYXNzIFAxLAog
ICAgY2xhc3MgQzEsY2xhc3MgQzI+CmlubGluZQpTbG90MTxSLFAxPgogIGJpbmQoY29uc3QgU2xv
dDM8UixQMSxDMSxDMj4gJnMsCiAgICAgICBBMSBhMSxBMiBhMikKICB7cmV0dXJuIEFkYXB0b3JC
aW5kU2xvdDFfMjxSLAogICAgICAgICAgIFAxLAogICAgICAgICAgIEMxLEMyPjo6Y3JlYXRlKHMu
ZGF0YSgpLGExLGEyKTsKICB9CgoKIAoKCnRlbXBsYXRlIDxjbGFzcyBSLAogICBjbGFzcyBQMSxj
bGFzcyBQMiwKICAgY2xhc3MgQzEsY2xhc3MgQzI+CnN0cnVjdCBBZGFwdG9yQmluZFNsb3QyXzI6
IHB1YmxpYyBBZGFwdG9yU2xvdF8KICB7CgogICB0eXBlZGVmIFIgUlR5cGU7CgoKCiAgIHR5cGVk
ZWYgU2xvdDI8UixQMSxQMj4gU2xvdFR5cGU7CiAgIHR5cGVkZWYgU2xvdDQ8UixQMSxQMixDMSxD
Mj4gSW5TbG90VHlwZTsKCiAgIHN0cnVjdCBOb2RlOnB1YmxpYyBBZGFwdG9yTm9kZQogICAgIHsK
ICAgICAgQzEgYzFfOwogICAgICBDMiBjMl87CgogICAgICBOb2RlKEMxIGMxLEMyIGMyKQoJOiBj
MV8oYzEpLGMyXyhjMikKIAl7IH0KICAgICB9OwoKICAgdHlwZWRlZiBDYWxsRGF0YU9iajI8dHlw
ZW5hbWUgU2xvdFR5cGU6OkZ1bmMsTm9kZT4gQ2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2Fs
bGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMikKICAgICB7CiAgICAgIENhbGxEYXRhKiBkYXRhPShD
YWxsRGF0YSopZDsKICAgICAgTm9kZSogbm9kZT1kYXRhLT5vYmo7CiAgICAgIHJldHVybiAoKHR5
cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNrJikobm9kZS0+ZGF0YV8pKShwMSxwMiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmMxXyxub2RlLT5jMl8pOwogICAg
IH0KICAgc3RhdGljIFNsb3REYXRhKiBjcmVhdGUoU2xvdERhdGEgKnMsQzEgYzEsQzIgYzIpCiAg
ICAgewogICAgICBOb2RlICpub2RlPW5ldyBOb2RlKGMxLGMyKTsKICAgICAgY29weV9jYWxsYmFj
ayhzLG5vZGUpOwogICAgICBDYWxsRGF0YSAmZGF0YT1yZWludGVycHJldF9jYXN0PENhbGxEYXRh
Jj4ocy0+ZGF0YV8pOwogICAgICBkYXRhLmNhbGxiYWNrPSZjYWxsYmFjazsKICAgICAgZGF0YS5v
Ymo9bm9kZTsKICAgICAgcmV0dXJuIHM7CiAgICAgfQogIH07CgoKIyAxMDkwICIvb3B0L2d0ay9p
bmNsdWRlL3NpZ2MrKy9iaW5kLmgiCgoKdGVtcGxhdGUgPGNsYXNzIEExLGNsYXNzIEEyLAogICAg
Y2xhc3MgUiwKICAgIGNsYXNzIFAxLGNsYXNzIFAyLAogICAgY2xhc3MgQzEsY2xhc3MgQzI+Cmlu
bGluZQpTbG90MjxSLFAxLFAyPgogIGJpbmQoY29uc3QgU2xvdDQ8UixQMSxQMixDMSxDMj4gJnMs
CiAgICAgICBBMSBhMSxBMiBhMikKICB7cmV0dXJuIEFkYXB0b3JCaW5kU2xvdDJfMjxSLAogICAg
ICAgICAgIFAxLFAyLAogICAgICAgICAgIEMxLEMyPjo6Y3JlYXRlKHMuZGF0YSgpLGExLGEyKTsK
ICB9CgoKIAoKCnRlbXBsYXRlIDxjbGFzcyBSLAogICBjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQ
MywKICAgY2xhc3MgQzEsY2xhc3MgQzI+CnN0cnVjdCBBZGFwdG9yQmluZFNsb3QzXzI6IHB1Ymxp
YyBBZGFwdG9yU2xvdF8KICB7CgogICB0eXBlZGVmIFIgUlR5cGU7CgoKCiAgIHR5cGVkZWYgU2xv
dDM8UixQMSxQMixQMz4gU2xvdFR5cGU7CiAgIHR5cGVkZWYgU2xvdDU8UixQMSxQMixQMyxDMSxD
Mj4gSW5TbG90VHlwZTsKCiAgIHN0cnVjdCBOb2RlOnB1YmxpYyBBZGFwdG9yTm9kZQogICAgIHsK
ICAgICAgQzEgYzFfOwogICAgICBDMiBjMl87CgogICAgICBOb2RlKEMxIGMxLEMyIGMyKQoJOiBj
MV8oYzEpLGMyXyhjMikKIAl7IH0KICAgICB9OwoKICAgdHlwZWRlZiBDYWxsRGF0YU9iajI8dHlw
ZW5hbWUgU2xvdFR5cGU6OkZ1bmMsTm9kZT4gQ2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2Fs
bGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMixQMyBwMykKICAgICB7CiAgICAgIENhbGxEYXRhKiBk
YXRhPShDYWxsRGF0YSopZDsKICAgICAgTm9kZSogbm9kZT1kYXRhLT5vYmo7CiAgICAgIHJldHVy
biAoKHR5cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNrJikobm9kZS0+ZGF0YV8pKShwMSxwMixw
MywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmMxXyxub2RlLT5j
Ml8pOwogICAgIH0KICAgc3RhdGljIFNsb3REYXRhKiBjcmVhdGUoU2xvdERhdGEgKnMsQzEgYzEs
QzIgYzIpCiAgICAgewogICAgICBOb2RlICpub2RlPW5ldyBOb2RlKGMxLGMyKTsKICAgICAgY29w
eV9jYWxsYmFjayhzLG5vZGUpOwogICAgICBDYWxsRGF0YSAmZGF0YT1yZWludGVycHJldF9jYXN0
PENhbGxEYXRhJj4ocy0+ZGF0YV8pOwogICAgICBkYXRhLmNhbGxiYWNrPSZjYWxsYmFjazsKICAg
ICAgZGF0YS5vYmo9bm9kZTsKICAgICAgcmV0dXJuIHM7CiAgICAgfQogIH07CgoKIyAxMTk2ICIv
b3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9iaW5kLmgiCgoKdGVtcGxhdGUgPGNsYXNzIEExLGNsYXNz
IEEyLAogICAgY2xhc3MgUiwKICAgIGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLAogICAgY2xh
c3MgQzEsY2xhc3MgQzI+CmlubGluZQpTbG90MzxSLFAxLFAyLFAzPgogIGJpbmQoY29uc3QgU2xv
dDU8UixQMSxQMixQMyxDMSxDMj4gJnMsCiAgICAgICBBMSBhMSxBMiBhMikKICB7cmV0dXJuIEFk
YXB0b3JCaW5kU2xvdDNfMjxSLAogICAgICAgICAgIFAxLFAyLFAzLAogICAgICAgICAgIEMxLEMy
Pjo6Y3JlYXRlKHMuZGF0YSgpLGExLGEyKTsKICB9CgoKIAoKCnRlbXBsYXRlIDxjbGFzcyBSLAog
ICBjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCwKICAgY2xhc3MgQzEsY2xhc3Mg
QzI+CnN0cnVjdCBBZGFwdG9yQmluZFNsb3Q0XzI6IHB1YmxpYyBBZGFwdG9yU2xvdF8KICB7Cgog
ICB0eXBlZGVmIFIgUlR5cGU7CgoKCiAgIHR5cGVkZWYgU2xvdDQ8UixQMSxQMixQMyxQND4gU2xv
dFR5cGU7CiAgIHR5cGVkZWYgU2xvdDY8UixQMSxQMixQMyxQNCxDMSxDMj4gSW5TbG90VHlwZTsK
CiAgIHN0cnVjdCBOb2RlOnB1YmxpYyBBZGFwdG9yTm9kZQogICAgIHsKICAgICAgQzEgYzFfOwog
ICAgICBDMiBjMl87CgogICAgICBOb2RlKEMxIGMxLEMyIGMyKQoJOiBjMV8oYzEpLGMyXyhjMikK
IAl7IH0KICAgICB9OwoKICAgdHlwZWRlZiBDYWxsRGF0YU9iajI8dHlwZW5hbWUgU2xvdFR5cGU6
OkZ1bmMsTm9kZT4gQ2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZCxQ
MSBwMSxQMiBwMixQMyBwMyxQNCBwNCkKICAgICB7CiAgICAgIENhbGxEYXRhKiBkYXRhPShDYWxs
RGF0YSopZDsKICAgICAgTm9kZSogbm9kZT1kYXRhLT5vYmo7CiAgICAgIHJldHVybiAoKHR5cGVu
YW1lIEluU2xvdFR5cGU6OkNhbGxiYWNrJikobm9kZS0+ZGF0YV8pKShwMSxwMixwMyxwNCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmMxXyxub2RlLT5jMl8pOwog
ICAgIH0KICAgc3RhdGljIFNsb3REYXRhKiBjcmVhdGUoU2xvdERhdGEgKnMsQzEgYzEsQzIgYzIp
CiAgICAgewogICAgICBOb2RlICpub2RlPW5ldyBOb2RlKGMxLGMyKTsKICAgICAgY29weV9jYWxs
YmFjayhzLG5vZGUpOwogICAgICBDYWxsRGF0YSAmZGF0YT1yZWludGVycHJldF9jYXN0PENhbGxE
YXRhJj4ocy0+ZGF0YV8pOwogICAgICBkYXRhLmNhbGxiYWNrPSZjYWxsYmFjazsKICAgICAgZGF0
YS5vYmo9bm9kZTsKICAgICAgcmV0dXJuIHM7CiAgICAgfQogIH07CgoKIyAxMzAyICIvb3B0L2d0
ay9pbmNsdWRlL3NpZ2MrKy9iaW5kLmgiCgoKdGVtcGxhdGUgPGNsYXNzIEExLGNsYXNzIEEyLAog
ICAgY2xhc3MgUiwKICAgIGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0LAogICAg
Y2xhc3MgQzEsY2xhc3MgQzI+CmlubGluZQpTbG90NDxSLFAxLFAyLFAzLFA0PgogIGJpbmQoY29u
c3QgU2xvdDY8UixQMSxQMixQMyxQNCxDMSxDMj4gJnMsCiAgICAgICBBMSBhMSxBMiBhMikKICB7
cmV0dXJuIEFkYXB0b3JCaW5kU2xvdDRfMjxSLAogICAgICAgICAgIFAxLFAyLFAzLFA0LAogICAg
ICAgICAgIEMxLEMyPjo6Y3JlYXRlKHMuZGF0YSgpLGExLGEyKTsKICB9CgoKIAoKCnRlbXBsYXRl
IDxjbGFzcyBSLAogICBjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQ
NSwKICAgY2xhc3MgQzEsY2xhc3MgQzI+CnN0cnVjdCBBZGFwdG9yQmluZFNsb3Q1XzI6IHB1Ymxp
YyBBZGFwdG9yU2xvdF8KICB7CgogICB0eXBlZGVmIFIgUlR5cGU7CgoKCiAgIHR5cGVkZWYgU2xv
dDU8UixQMSxQMixQMyxQNCxQNT4gU2xvdFR5cGU7CiAgIHR5cGVkZWYgU2xvdDc8UixQMSxQMixQ
MyxQNCxQNSxDMSxDMj4gSW5TbG90VHlwZTsKCiAgIHN0cnVjdCBOb2RlOnB1YmxpYyBBZGFwdG9y
Tm9kZQogICAgIHsKICAgICAgQzEgYzFfOwogICAgICBDMiBjMl87CgogICAgICBOb2RlKEMxIGMx
LEMyIGMyKQoJOiBjMV8oYzEpLGMyXyhjMikKIAl7IH0KICAgICB9OwoKICAgdHlwZWRlZiBDYWxs
RGF0YU9iajI8dHlwZW5hbWUgU2xvdFR5cGU6OkZ1bmMsTm9kZT4gQ2FsbERhdGE7CgogICBzdGF0
aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMixQMyBwMyxQNCBwNCxQNSBwNSkK
ICAgICB7CiAgICAgIENhbGxEYXRhKiBkYXRhPShDYWxsRGF0YSopZDsKICAgICAgTm9kZSogbm9k
ZT1kYXRhLT5vYmo7CiAgICAgIHJldHVybiAoKHR5cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNr
Jikobm9kZS0+ZGF0YV8pKShwMSxwMixwMyxwNCxwNSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmMxXyxub2RlLT5jMl8pOwogICAgIH0KICAgc3RhdGljIFNsb3RE
YXRhKiBjcmVhdGUoU2xvdERhdGEgKnMsQzEgYzEsQzIgYzIpCiAgICAgewogICAgICBOb2RlICpu
b2RlPW5ldyBOb2RlKGMxLGMyKTsKICAgICAgY29weV9jYWxsYmFjayhzLG5vZGUpOwogICAgICBD
YWxsRGF0YSAmZGF0YT1yZWludGVycHJldF9jYXN0PENhbGxEYXRhJj4ocy0+ZGF0YV8pOwogICAg
ICBkYXRhLmNhbGxiYWNrPSZjYWxsYmFjazsKICAgICAgZGF0YS5vYmo9bm9kZTsKICAgICAgcmV0
dXJuIHM7CiAgICAgfQogIH07CgoKIyAxNDA4ICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9iaW5k
LmgiCgoKdGVtcGxhdGUgPGNsYXNzIEExLGNsYXNzIEEyLAogICAgY2xhc3MgUiwKICAgIGNsYXNz
IFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0LGNsYXNzIFA1LAogICAgY2xhc3MgQzEsY2xh
c3MgQzI+CmlubGluZQpTbG90NTxSLFAxLFAyLFAzLFA0LFA1PgogIGJpbmQoY29uc3QgU2xvdDc8
UixQMSxQMixQMyxQNCxQNSxDMSxDMj4gJnMsCiAgICAgICBBMSBhMSxBMiBhMikKICB7cmV0dXJu
IEFkYXB0b3JCaW5kU2xvdDVfMjxSLAogICAgICAgICAgIFAxLFAyLFAzLFA0LFA1LAogICAgICAg
ICAgIEMxLEMyPjo6Y3JlYXRlKHMuZGF0YSgpLGExLGEyKTsKICB9CgoKCgp9ICAKCgoKIyA3ICIv
b3B0L2d0ay9pbmNsdWRlL2d0ay0tL3Byb3h5LmgiIDIKCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9z
aWdjKysvY29udmVydC5oIiAxCiAKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKbmFtZXNw
YWNlIFNpZ0MKewoKCgoKIAoKCnRlbXBsYXRlIDxjbGFzcyBSMSxjbGFzcyBQMSwKICAgICAgICAg
IGNsYXNzIFIyLGNsYXNzIFExPgpzdHJ1Y3QgQWRhcHRvckNvbnZlcnRTbG90MV8xOiBwdWJsaWMg
QWRhcHRvclNsb3RfCiAgewoKICAgdHlwZWRlZiBSMSBSVHlwZTsKCgoKICAgdHlwZWRlZiBTbG90
MTxSMSxQMT4gU2xvdFR5cGU7CiAgIHR5cGVkZWYgU2xvdDE8UjIsUTE+IEluU2xvdFR5cGU7CiAg
IHR5cGVkZWYgdHlwZW5hbWUgSW5TbG90VHlwZTo6Q2FsbGJhY2sgQ2FsbGJhY2s7CiAgIHR5cGVk
ZWYgUlR5cGUgKCpGdW5jKSAgKENhbGxiYWNrKixQMSk7CiAgIHR5cGVkZWYgUjEgICAgKCpJbkZ1
bmMpKENhbGxiYWNrKixQMSk7CiAgIHR5cGVkZWYgQ2FsbERhdGFPYmozPHR5cGVuYW1lIFNsb3RU
eXBlOjpGdW5jLENhbGxiYWNrLEZ1bmM+IENhbGxEYXRhOwoKICAgc3RhdGljIFJUeXBlIGNhbGxi
YWNrKHZvaWQqIGQsUDEgcDEpCiAgICAgewogICAgICBDYWxsRGF0YSogZGF0YT0oQ2FsbERhdGEq
KWQ7CiAgICAgIHJldHVybiAoZGF0YS0+ZnVuYykoZGF0YS0+b2JqLHAxKTsKICAgICB9CgogICBz
dGF0aWMgU2xvdERhdGEqIGNyZWF0ZShTbG90RGF0YSAqcyxJbkZ1bmMgZnVuYykKICAgICB7CiAg
ICAgIFNsb3REYXRhKiB0bXA9KFNsb3REYXRhKilzOwogICAgICBBZGFwdG9yTm9kZSAqbm9kZT1u
ZXcgQWRhcHRvck5vZGUoKTsKICAgICAgY29weV9jYWxsYmFjayh0bXAsbm9kZSk7CiAgICAgIENh
bGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEmPih0bXAtPmRhdGFfKTsKICAg
ICAgZGF0YS5jYWxsYmFjaz0mY2FsbGJhY2s7CiAgICAgIGRhdGEuZnVuYz0oRnVuYylmdW5jOwog
ICAgICBkYXRhLm9iaj0oQ2FsbGJhY2sqKSYobm9kZS0+ZGF0YV8pOwogICAgICByZXR1cm4gdG1w
OwogICAgIH0KICB9OwoKCgojIDExNCAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvY29udmVydC5o
IgoKCnRlbXBsYXRlIDxjbGFzcyBSMSxjbGFzcyBQMSwKICAgICAgICAgIGNsYXNzIFIyLGNsYXNz
IFExPgpTbG90MTxSMSxQMT4KICBjb252ZXJ0KGNvbnN0IFNsb3QxPFIyLFExPiAmcywKICAgICAg
ICAgIFIxICgqZnVuYykoQ2FsbGJhY2sxPFIyLFExPiosUDEpKQogIHtyZXR1cm4gQWRhcHRvckNv
bnZlcnRTbG90MV8xPFIxLFAxLAogICAgICAgICAgIFIyLFExPjo6Y3JlYXRlKHMub2JqKCksZnVu
Yyk7CiAgfQoKCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgUjEsY2xhc3MgUDEsY2xhc3MgUDIsCiAgICAg
ICAgICBjbGFzcyBSMixjbGFzcyBRMSxjbGFzcyBRMj4Kc3RydWN0IEFkYXB0b3JDb252ZXJ0U2xv
dDJfMjogcHVibGljIEFkYXB0b3JTbG90XwogIHsKCiAgIHR5cGVkZWYgUjEgUlR5cGU7CgoKCiAg
IHR5cGVkZWYgU2xvdDI8UjEsUDEsUDI+IFNsb3RUeXBlOwogICB0eXBlZGVmIFNsb3QyPFIyLFEx
LFEyPiBJblNsb3RUeXBlOwogICB0eXBlZGVmIHR5cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNr
IENhbGxiYWNrOwogICB0eXBlZGVmIFJUeXBlICgqRnVuYykgIChDYWxsYmFjayosUDEsUDIpOwog
ICB0eXBlZGVmIFIxICAgICgqSW5GdW5jKShDYWxsYmFjayosUDEsUDIpOwogICB0eXBlZGVmIENh
bGxEYXRhT2JqMzx0eXBlbmFtZSBTbG90VHlwZTo6RnVuYyxDYWxsYmFjayxGdW5jPiBDYWxsRGF0
YTsKCiAgIHN0YXRpYyBSVHlwZSBjYWxsYmFjayh2b2lkKiBkLFAxIHAxLFAyIHAyKQogICAgIHsK
ICAgICAgQ2FsbERhdGEqIGRhdGE9KENhbGxEYXRhKilkOwogICAgICByZXR1cm4gKGRhdGEtPmZ1
bmMpKGRhdGEtPm9iaixwMSxwMik7CiAgICAgfQoKICAgc3RhdGljIFNsb3REYXRhKiBjcmVhdGUo
U2xvdERhdGEgKnMsSW5GdW5jIGZ1bmMpCiAgICAgewogICAgICBTbG90RGF0YSogdG1wPShTbG90
RGF0YSopczsKICAgICAgQWRhcHRvck5vZGUgKm5vZGU9bmV3IEFkYXB0b3JOb2RlKCk7CiAgICAg
IGNvcHlfY2FsbGJhY2sodG1wLG5vZGUpOwogICAgICBDYWxsRGF0YSAmZGF0YT1yZWludGVycHJl
dF9jYXN0PENhbGxEYXRhJj4odG1wLT5kYXRhXyk7CiAgICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxi
YWNrOwogICAgICBkYXRhLmZ1bmM9KEZ1bmMpZnVuYzsKICAgICAgZGF0YS5vYmo9KENhbGxiYWNr
KikmKG5vZGUtPmRhdGFfKTsKICAgICAgcmV0dXJuIHRtcDsKICAgICB9CiAgfTsKCgoKIyAyMDQg
Ii9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL2NvbnZlcnQuaCIKCgp0ZW1wbGF0ZSA8Y2xhc3MgUjEs
Y2xhc3MgUDEsY2xhc3MgUDIsCiAgICAgICAgICBjbGFzcyBSMixjbGFzcyBRMSxjbGFzcyBRMj4K
U2xvdDI8UjEsUDEsUDI+CiAgY29udmVydChjb25zdCBTbG90MjxSMixRMSxRMj4gJnMsCiAgICAg
ICAgICBSMSAoKmZ1bmMpKENhbGxiYWNrMjxSMixRMSxRMj4qLFAxLFAyKSkKICB7cmV0dXJuIEFk
YXB0b3JDb252ZXJ0U2xvdDJfMjxSMSxQMSxQMiwKICAgICAgICAgICBSMixRMSxRMj46OmNyZWF0
ZShzLm9iaigpLGZ1bmMpOwogIH0KCgogCgoKdGVtcGxhdGUgPGNsYXNzIFIxLGNsYXNzIFAxLGNs
YXNzIFAyLGNsYXNzIFAzLAogICAgICAgICAgY2xhc3MgUjIsY2xhc3MgUTEsY2xhc3MgUTIsY2xh
c3MgUTM+CnN0cnVjdCBBZGFwdG9yQ29udmVydFNsb3QzXzM6IHB1YmxpYyBBZGFwdG9yU2xvdF8K
ICB7CgogICB0eXBlZGVmIFIxIFJUeXBlOwoKCgogICB0eXBlZGVmIFNsb3QzPFIxLFAxLFAyLFAz
PiBTbG90VHlwZTsKICAgdHlwZWRlZiBTbG90MzxSMixRMSxRMixRMz4gSW5TbG90VHlwZTsKICAg
dHlwZWRlZiB0eXBlbmFtZSBJblNsb3RUeXBlOjpDYWxsYmFjayBDYWxsYmFjazsKICAgdHlwZWRl
ZiBSVHlwZSAoKkZ1bmMpICAoQ2FsbGJhY2sqLFAxLFAyLFAzKTsKICAgdHlwZWRlZiBSMSAgICAo
KkluRnVuYykoQ2FsbGJhY2sqLFAxLFAyLFAzKTsKICAgdHlwZWRlZiBDYWxsRGF0YU9iajM8dHlw
ZW5hbWUgU2xvdFR5cGU6OkZ1bmMsQ2FsbGJhY2ssRnVuYz4gQ2FsbERhdGE7CgogICBzdGF0aWMg
UlR5cGUgY2FsbGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMixQMyBwMykKICAgICB7CiAgICAgIENh
bGxEYXRhKiBkYXRhPShDYWxsRGF0YSopZDsKICAgICAgcmV0dXJuIChkYXRhLT5mdW5jKShkYXRh
LT5vYmoscDEscDIscDMpOwogICAgIH0KCiAgIHN0YXRpYyBTbG90RGF0YSogY3JlYXRlKFNsb3RE
YXRhICpzLEluRnVuYyBmdW5jKQogICAgIHsKICAgICAgU2xvdERhdGEqIHRtcD0oU2xvdERhdGEq
KXM7CiAgICAgIEFkYXB0b3JOb2RlICpub2RlPW5ldyBBZGFwdG9yTm9kZSgpOwogICAgICBjb3B5
X2NhbGxiYWNrKHRtcCxub2RlKTsKICAgICAgQ2FsbERhdGEgJmRhdGE9cmVpbnRlcnByZXRfY2Fz
dDxDYWxsRGF0YSY+KHRtcC0+ZGF0YV8pOwogICAgICBkYXRhLmNhbGxiYWNrPSZjYWxsYmFjazsK
ICAgICAgZGF0YS5mdW5jPShGdW5jKWZ1bmM7CiAgICAgIGRhdGEub2JqPShDYWxsYmFjayopJihu
b2RlLT5kYXRhXyk7CiAgICAgIHJldHVybiB0bXA7CiAgICAgfQogIH07CgoKCiMgMjk0ICIvb3B0
L2d0ay9pbmNsdWRlL3NpZ2MrKy9jb252ZXJ0LmgiCgoKdGVtcGxhdGUgPGNsYXNzIFIxLGNsYXNz
IFAxLGNsYXNzIFAyLGNsYXNzIFAzLAogICAgICAgICAgY2xhc3MgUjIsY2xhc3MgUTEsY2xhc3Mg
UTIsY2xhc3MgUTM+ClNsb3QzPFIxLFAxLFAyLFAzPgogIGNvbnZlcnQoY29uc3QgU2xvdDM8UjIs
UTEsUTIsUTM+ICZzLAogICAgICAgICAgUjEgKCpmdW5jKShDYWxsYmFjazM8UjIsUTEsUTIsUTM+
KixQMSxQMixQMykpCiAge3JldHVybiBBZGFwdG9yQ29udmVydFNsb3QzXzM8UjEsUDEsUDIsUDMs
CiAgICAgICAgICAgUjIsUTEsUTIsUTM+OjpjcmVhdGUocy5vYmooKSxmdW5jKTsKICB9CgoKIAoK
CnRlbXBsYXRlIDxjbGFzcyBSMSxjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCwK
ICAgICAgICAgIGNsYXNzIFIyLGNsYXNzIFExLGNsYXNzIFEyLGNsYXNzIFEzLGNsYXNzIFE0Pgpz
dHJ1Y3QgQWRhcHRvckNvbnZlcnRTbG90NF80OiBwdWJsaWMgQWRhcHRvclNsb3RfCiAgewoKICAg
dHlwZWRlZiBSMSBSVHlwZTsKCgoKICAgdHlwZWRlZiBTbG90NDxSMSxQMSxQMixQMyxQND4gU2xv
dFR5cGU7CiAgIHR5cGVkZWYgU2xvdDQ8UjIsUTEsUTIsUTMsUTQ+IEluU2xvdFR5cGU7CiAgIHR5
cGVkZWYgdHlwZW5hbWUgSW5TbG90VHlwZTo6Q2FsbGJhY2sgQ2FsbGJhY2s7CiAgIHR5cGVkZWYg
UlR5cGUgKCpGdW5jKSAgKENhbGxiYWNrKixQMSxQMixQMyxQNCk7CiAgIHR5cGVkZWYgUjEgICAg
KCpJbkZ1bmMpKENhbGxiYWNrKixQMSxQMixQMyxQNCk7CiAgIHR5cGVkZWYgQ2FsbERhdGFPYmoz
PHR5cGVuYW1lIFNsb3RUeXBlOjpGdW5jLENhbGxiYWNrLEZ1bmM+IENhbGxEYXRhOwoKICAgc3Rh
dGljIFJUeXBlIGNhbGxiYWNrKHZvaWQqIGQsUDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQpCiAgICAg
ewogICAgICBDYWxsRGF0YSogZGF0YT0oQ2FsbERhdGEqKWQ7CiAgICAgIHJldHVybiAoZGF0YS0+
ZnVuYykoZGF0YS0+b2JqLHAxLHAyLHAzLHA0KTsKICAgICB9CgogICBzdGF0aWMgU2xvdERhdGEq
IGNyZWF0ZShTbG90RGF0YSAqcyxJbkZ1bmMgZnVuYykKICAgICB7CiAgICAgIFNsb3REYXRhKiB0
bXA9KFNsb3REYXRhKilzOwogICAgICBBZGFwdG9yTm9kZSAqbm9kZT1uZXcgQWRhcHRvck5vZGUo
KTsKICAgICAgY29weV9jYWxsYmFjayh0bXAsbm9kZSk7CiAgICAgIENhbGxEYXRhICZkYXRhPXJl
aW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEmPih0bXAtPmRhdGFfKTsKICAgICAgZGF0YS5jYWxsYmFj
az0mY2FsbGJhY2s7CiAgICAgIGRhdGEuZnVuYz0oRnVuYylmdW5jOwogICAgICBkYXRhLm9iaj0o
Q2FsbGJhY2sqKSYobm9kZS0+ZGF0YV8pOwogICAgICByZXR1cm4gdG1wOwogICAgIH0KICB9OwoK
CgojIDM4NCAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvY29udmVydC5oIgoKCnRlbXBsYXRlIDxj
bGFzcyBSMSxjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCwKICAgICAgICAgIGNs
YXNzIFIyLGNsYXNzIFExLGNsYXNzIFEyLGNsYXNzIFEzLGNsYXNzIFE0PgpTbG90NDxSMSxQMSxQ
MixQMyxQND4KICBjb252ZXJ0KGNvbnN0IFNsb3Q0PFIyLFExLFEyLFEzLFE0PiAmcywKICAgICAg
ICAgIFIxICgqZnVuYykoQ2FsbGJhY2s0PFIyLFExLFEyLFEzLFE0PiosUDEsUDIsUDMsUDQpKQog
IHtyZXR1cm4gQWRhcHRvckNvbnZlcnRTbG90NF80PFIxLFAxLFAyLFAzLFA0LAogICAgICAgICAg
IFIyLFExLFEyLFEzLFE0Pjo6Y3JlYXRlKHMub2JqKCksZnVuYyk7CiAgfQoKCiAKCgp0ZW1wbGF0
ZSA8Y2xhc3MgUjEsY2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsY2xhc3MgUDQsY2xhc3MgUDUs
CiAgICAgICAgICBjbGFzcyBSMixjbGFzcyBRMSxjbGFzcyBRMixjbGFzcyBRMyxjbGFzcyBRNCxj
bGFzcyBRNT4Kc3RydWN0IEFkYXB0b3JDb252ZXJ0U2xvdDVfNTogcHVibGljIEFkYXB0b3JTbG90
XwogIHsKCiAgIHR5cGVkZWYgUjEgUlR5cGU7CgoKCiAgIHR5cGVkZWYgU2xvdDU8UjEsUDEsUDIs
UDMsUDQsUDU+IFNsb3RUeXBlOwogICB0eXBlZGVmIFNsb3Q1PFIyLFExLFEyLFEzLFE0LFE1PiBJ
blNsb3RUeXBlOwogICB0eXBlZGVmIHR5cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNrIENhbGxi
YWNrOwogICB0eXBlZGVmIFJUeXBlICgqRnVuYykgIChDYWxsYmFjayosUDEsUDIsUDMsUDQsUDUp
OwogICB0eXBlZGVmIFIxICAgICgqSW5GdW5jKShDYWxsYmFjayosUDEsUDIsUDMsUDQsUDUpOwog
ICB0eXBlZGVmIENhbGxEYXRhT2JqMzx0eXBlbmFtZSBTbG90VHlwZTo6RnVuYyxDYWxsYmFjayxG
dW5jPiBDYWxsRGF0YTsKCiAgIHN0YXRpYyBSVHlwZSBjYWxsYmFjayh2b2lkKiBkLFAxIHAxLFAy
IHAyLFAzIHAzLFA0IHA0LFA1IHA1KQogICAgIHsKICAgICAgQ2FsbERhdGEqIGRhdGE9KENhbGxE
YXRhKilkOwogICAgICByZXR1cm4gKGRhdGEtPmZ1bmMpKGRhdGEtPm9iaixwMSxwMixwMyxwNCxw
NSk7CiAgICAgfQoKICAgc3RhdGljIFNsb3REYXRhKiBjcmVhdGUoU2xvdERhdGEgKnMsSW5GdW5j
IGZ1bmMpCiAgICAgewogICAgICBTbG90RGF0YSogdG1wPShTbG90RGF0YSopczsKICAgICAgQWRh
cHRvck5vZGUgKm5vZGU9bmV3IEFkYXB0b3JOb2RlKCk7CiAgICAgIGNvcHlfY2FsbGJhY2sodG1w
LG5vZGUpOwogICAgICBDYWxsRGF0YSAmZGF0YT1yZWludGVycHJldF9jYXN0PENhbGxEYXRhJj4o
dG1wLT5kYXRhXyk7CiAgICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNrOwogICAgICBkYXRhLmZ1
bmM9KEZ1bmMpZnVuYzsKICAgICAgZGF0YS5vYmo9KENhbGxiYWNrKikmKG5vZGUtPmRhdGFfKTsK
ICAgICAgcmV0dXJuIHRtcDsKICAgICB9CiAgfTsKCgoKIyA0NzQgIi9vcHQvZ3RrL2luY2x1ZGUv
c2lnYysrL2NvbnZlcnQuaCIKCgp0ZW1wbGF0ZSA8Y2xhc3MgUjEsY2xhc3MgUDEsY2xhc3MgUDIs
Y2xhc3MgUDMsY2xhc3MgUDQsY2xhc3MgUDUsCiAgICAgICAgICBjbGFzcyBSMixjbGFzcyBRMSxj
bGFzcyBRMixjbGFzcyBRMyxjbGFzcyBRNCxjbGFzcyBRNT4KU2xvdDU8UjEsUDEsUDIsUDMsUDQs
UDU+CiAgY29udmVydChjb25zdCBTbG90NTxSMixRMSxRMixRMyxRNCxRNT4gJnMsCiAgICAgICAg
ICBSMSAoKmZ1bmMpKENhbGxiYWNrNTxSMixRMSxRMixRMyxRNCxRNT4qLFAxLFAyLFAzLFA0LFA1
KSkKICB7cmV0dXJuIEFkYXB0b3JDb252ZXJ0U2xvdDVfNTxSMSxQMSxQMixQMyxQNCxQNSwKICAg
ICAgICAgICBSMixRMSxRMixRMyxRNCxRNT46OmNyZWF0ZShzLm9iaigpLGZ1bmMpOwogIH0KCgog
CgoKdGVtcGxhdGUgPGNsYXNzIFIxLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0
LGNsYXNzIFA1LGNsYXNzIFA2LAogICAgICAgICAgY2xhc3MgUjIsY2xhc3MgUTEsY2xhc3MgUTIs
Y2xhc3MgUTMsY2xhc3MgUTQsY2xhc3MgUTUsY2xhc3MgUTY+CnN0cnVjdCBBZGFwdG9yQ29udmVy
dFNsb3Q2XzY6IHB1YmxpYyBBZGFwdG9yU2xvdF8KICB7CgogICB0eXBlZGVmIFIxIFJUeXBlOwoK
CgogICB0eXBlZGVmIFNsb3Q2PFIxLFAxLFAyLFAzLFA0LFA1LFA2PiBTbG90VHlwZTsKICAgdHlw
ZWRlZiBTbG90NjxSMixRMSxRMixRMyxRNCxRNSxRNj4gSW5TbG90VHlwZTsKICAgdHlwZWRlZiB0
eXBlbmFtZSBJblNsb3RUeXBlOjpDYWxsYmFjayBDYWxsYmFjazsKICAgdHlwZWRlZiBSVHlwZSAo
KkZ1bmMpICAoQ2FsbGJhY2sqLFAxLFAyLFAzLFA0LFA1LFA2KTsKICAgdHlwZWRlZiBSMSAgICAo
KkluRnVuYykoQ2FsbGJhY2sqLFAxLFAyLFAzLFA0LFA1LFA2KTsKICAgdHlwZWRlZiBDYWxsRGF0
YU9iajM8dHlwZW5hbWUgU2xvdFR5cGU6OkZ1bmMsQ2FsbGJhY2ssRnVuYz4gQ2FsbERhdGE7Cgog
ICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMixQMyBwMyxQNCBwNCxQ
NSBwNSxQNiBwNikKICAgICB7CiAgICAgIENhbGxEYXRhKiBkYXRhPShDYWxsRGF0YSopZDsKICAg
ICAgcmV0dXJuIChkYXRhLT5mdW5jKShkYXRhLT5vYmoscDEscDIscDMscDQscDUscDYpOwogICAg
IH0KCiAgIHN0YXRpYyBTbG90RGF0YSogY3JlYXRlKFNsb3REYXRhICpzLEluRnVuYyBmdW5jKQog
ICAgIHsKICAgICAgU2xvdERhdGEqIHRtcD0oU2xvdERhdGEqKXM7CiAgICAgIEFkYXB0b3JOb2Rl
ICpub2RlPW5ldyBBZGFwdG9yTm9kZSgpOwogICAgICBjb3B5X2NhbGxiYWNrKHRtcCxub2RlKTsK
ICAgICAgQ2FsbERhdGEgJmRhdGE9cmVpbnRlcnByZXRfY2FzdDxDYWxsRGF0YSY+KHRtcC0+ZGF0
YV8pOwogICAgICBkYXRhLmNhbGxiYWNrPSZjYWxsYmFjazsKICAgICAgZGF0YS5mdW5jPShGdW5j
KWZ1bmM7CiAgICAgIGRhdGEub2JqPShDYWxsYmFjayopJihub2RlLT5kYXRhXyk7CiAgICAgIHJl
dHVybiB0bXA7CiAgICAgfQogIH07CgoKCiMgNTY0ICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9j
b252ZXJ0LmgiCgoKdGVtcGxhdGUgPGNsYXNzIFIxLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAz
LGNsYXNzIFA0LGNsYXNzIFA1LGNsYXNzIFA2LAogICAgICAgICAgY2xhc3MgUjIsY2xhc3MgUTEs
Y2xhc3MgUTIsY2xhc3MgUTMsY2xhc3MgUTQsY2xhc3MgUTUsY2xhc3MgUTY+ClNsb3Q2PFIxLFAx
LFAyLFAzLFA0LFA1LFA2PgogIGNvbnZlcnQoY29uc3QgU2xvdDY8UjIsUTEsUTIsUTMsUTQsUTUs
UTY+ICZzLAogICAgICAgICAgUjEgKCpmdW5jKShDYWxsYmFjazY8UjIsUTEsUTIsUTMsUTQsUTUs
UTY+KixQMSxQMixQMyxQNCxQNSxQNikpCiAge3JldHVybiBBZGFwdG9yQ29udmVydFNsb3Q2XzY8
UjEsUDEsUDIsUDMsUDQsUDUsUDYsCiAgICAgICAgICAgUjIsUTEsUTIsUTMsUTQsUTUsUTY+Ojpj
cmVhdGUocy5vYmooKSxmdW5jKTsKICB9CgoKIAoKCnRlbXBsYXRlIDxjbGFzcyBSMSxjbGFzcyBQ
MSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQNSxjbGFzcyBQNixjbGFzcyBQNywK
ICAgICAgICAgIGNsYXNzIFIyLGNsYXNzIFExLGNsYXNzIFEyLGNsYXNzIFEzLGNsYXNzIFE0LGNs
YXNzIFE1LGNsYXNzIFE2LGNsYXNzIFE3PgpzdHJ1Y3QgQWRhcHRvckNvbnZlcnRTbG90N183OiBw
dWJsaWMgQWRhcHRvclNsb3RfCiAgewoKICAgdHlwZWRlZiBSMSBSVHlwZTsKCgoKICAgdHlwZWRl
ZiBTbG90NzxSMSxQMSxQMixQMyxQNCxQNSxQNixQNz4gU2xvdFR5cGU7CiAgIHR5cGVkZWYgU2xv
dDc8UjIsUTEsUTIsUTMsUTQsUTUsUTYsUTc+IEluU2xvdFR5cGU7CiAgIHR5cGVkZWYgdHlwZW5h
bWUgSW5TbG90VHlwZTo6Q2FsbGJhY2sgQ2FsbGJhY2s7CiAgIHR5cGVkZWYgUlR5cGUgKCpGdW5j
KSAgKENhbGxiYWNrKixQMSxQMixQMyxQNCxQNSxQNixQNyk7CiAgIHR5cGVkZWYgUjEgICAgKCpJ
bkZ1bmMpKENhbGxiYWNrKixQMSxQMixQMyxQNCxQNSxQNixQNyk7CiAgIHR5cGVkZWYgQ2FsbERh
dGFPYmozPHR5cGVuYW1lIFNsb3RUeXBlOjpGdW5jLENhbGxiYWNrLEZ1bmM+IENhbGxEYXRhOwoK
ICAgc3RhdGljIFJUeXBlIGNhbGxiYWNrKHZvaWQqIGQsUDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQs
UDUgcDUsUDYgcDYsUDcgcDcpCiAgICAgewogICAgICBDYWxsRGF0YSogZGF0YT0oQ2FsbERhdGEq
KWQ7CiAgICAgIHJldHVybiAoZGF0YS0+ZnVuYykoZGF0YS0+b2JqLHAxLHAyLHAzLHA0LHA1LHA2
LHA3KTsKICAgICB9CgogICBzdGF0aWMgU2xvdERhdGEqIGNyZWF0ZShTbG90RGF0YSAqcyxJbkZ1
bmMgZnVuYykKICAgICB7CiAgICAgIFNsb3REYXRhKiB0bXA9KFNsb3REYXRhKilzOwogICAgICBB
ZGFwdG9yTm9kZSAqbm9kZT1uZXcgQWRhcHRvck5vZGUoKTsKICAgICAgY29weV9jYWxsYmFjayh0
bXAsbm9kZSk7CiAgICAgIENhbGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEm
Pih0bXAtPmRhdGFfKTsKICAgICAgZGF0YS5jYWxsYmFjaz0mY2FsbGJhY2s7CiAgICAgIGRhdGEu
ZnVuYz0oRnVuYylmdW5jOwogICAgICBkYXRhLm9iaj0oQ2FsbGJhY2sqKSYobm9kZS0+ZGF0YV8p
OwogICAgICByZXR1cm4gdG1wOwogICAgIH0KICB9OwoKCgojIDY1NCAiL29wdC9ndGsvaW5jbHVk
ZS9zaWdjKysvY29udmVydC5oIgoKCnRlbXBsYXRlIDxjbGFzcyBSMSxjbGFzcyBQMSxjbGFzcyBQ
MixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQNSxjbGFzcyBQNixjbGFzcyBQNywKICAgICAgICAg
IGNsYXNzIFIyLGNsYXNzIFExLGNsYXNzIFEyLGNsYXNzIFEzLGNsYXNzIFE0LGNsYXNzIFE1LGNs
YXNzIFE2LGNsYXNzIFE3PgpTbG90NzxSMSxQMSxQMixQMyxQNCxQNSxQNixQNz4KICBjb252ZXJ0
KGNvbnN0IFNsb3Q3PFIyLFExLFEyLFEzLFE0LFE1LFE2LFE3PiAmcywKICAgICAgICAgIFIxICgq
ZnVuYykoQ2FsbGJhY2s3PFIyLFExLFEyLFEzLFE0LFE1LFE2LFE3PiosUDEsUDIsUDMsUDQsUDUs
UDYsUDcpKQogIHtyZXR1cm4gQWRhcHRvckNvbnZlcnRTbG90N183PFIxLFAxLFAyLFAzLFA0LFA1
LFA2LFA3LAogICAgICAgICAgIFIyLFExLFEyLFEzLFE0LFE1LFE2LFE3Pjo6Y3JlYXRlKHMub2Jq
KCksZnVuYyk7CiAgfQoKCgoKfSAgCgoKCiMgOCAiL29wdC9ndGsvaW5jbHVkZS9ndGstLS9wcm94
eS5oIiAyCgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a29iamVjdC5oIiAx
CiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0
ay0xLjIvZ3RrL2d0a2FyZy5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIyAx
ICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a3R5cGV1dGlscy5oIiAxCiAKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgogCgp0eXBlZGVmIGVu
dW0KewogIEdUS19UWVBFX0lOVkFMSUQsCiAgR1RLX1RZUEVfTk9ORSwKICAKICAgCiAgR1RLX1RZ
UEVfQ0hBUiwKICBHVEtfVFlQRV9VQ0hBUiwKICBHVEtfVFlQRV9CT09MLAogIEdUS19UWVBFX0lO
VCwKICBHVEtfVFlQRV9VSU5ULAogIEdUS19UWVBFX0xPTkcsCiAgR1RLX1RZUEVfVUxPTkcsCiAg
R1RLX1RZUEVfRkxPQVQsCiAgR1RLX1RZUEVfRE9VQkxFLAogIEdUS19UWVBFX1NUUklORywKICBH
VEtfVFlQRV9FTlVNLAogIEdUS19UWVBFX0ZMQUdTLAogIEdUS19UWVBFX0JPWEVELAogIEdUS19U
WVBFX1BPSU5URVIsCiAgCiAgIAogIEdUS19UWVBFX1NJR05BTCwKICBHVEtfVFlQRV9BUkdTLAog
IEdUS19UWVBFX0NBTExCQUNLLAogIEdUS19UWVBFX0NfQ0FMTEJBQ0ssCiAgR1RLX1RZUEVfRk9S
RUlHTiwKICAKICAgCiAgR1RLX1RZUEVfT0JKRUNUCn0gR3RrRnVuZGFtZW50YWxUeXBlOwoKIAoK
CgoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCnR5cGVk
ZWYgZ3VpbnQgR3RrVHlwZTsKCnR5cGVkZWYgc3RydWN0IF9HdGtUeXBlT2JqZWN0CUd0a1R5cGVP
YmplY3Q7CnR5cGVkZWYgc3RydWN0IF9HdGtUeXBlQ2xhc3MJR3RrVHlwZUNsYXNzOwoKCgp9CgoK
IAoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a3R5cGVidWlsdGlucy5oIiAx
CiAKCmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX0FDQ0VMX0ZMQUdTOwpleHRlcm4gR3RrVHlwZSBH
VEtfVFlQRV9DQUxFTkRBUl9ESVNQTEFZX09QVElPTlM7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBF
X0NFTExfVFlQRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfQ0xJU1RfRFJBR19QT1M7CmV4dGVy
biBHdGtUeXBlIEdUS19UWVBFX0JVVFRPTl9BQ1RJT047CmV4dGVybiBHdGtUeXBlIEdUS19UWVBF
X0NUUkVFX1BPUzsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfQ1RSRUVfTElORV9TVFlMRTsKZXh0
ZXJuIEd0a1R5cGUgR1RLX1RZUEVfQ1RSRUVfRVhQQU5ERVJfU1RZTEU7CmV4dGVybiBHdGtUeXBl
IEdUS19UWVBFX0NUUkVFX0VYUEFOU0lPTl9UWVBFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9E
RUJVR19GTEFHOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9ERVNUX0RFRkFVTFRTOwpleHRlcm4g
R3RrVHlwZSBHVEtfVFlQRV9UQVJHRVRfRkxBR1M7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX0FS
Uk9XX1RZUEU7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX0FUVEFDSF9PUFRJT05TOwpleHRlcm4g
R3RrVHlwZSBHVEtfVFlQRV9CVVRUT05fQk9YX1NUWUxFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQ
RV9DVVJWRV9UWVBFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9ESVJFQ1RJT05fVFlQRTsKZXh0
ZXJuIEd0a1R5cGUgR1RLX1RZUEVfSlVTVElGSUNBVElPTjsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZ
UEVfTUFUQ0hfVFlQRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfTUVOVV9ESVJFQ1RJT05fVFlQ
RTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfTUVOVV9GQUNUT1JZX1RZUEU7CmV4dGVybiBHdGtU
eXBlIEdUS19UWVBFX01FVFJJQ19UWVBFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9PUklFTlRB
VElPTjsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfQ09STkVSX1RZUEU7CmV4dGVybiBHdGtUeXBl
IEdUS19UWVBFX1BBQ0tfVFlQRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfUEFUSF9QUklPUklU
WV9UWVBFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9QQVRIX1RZUEU7CmV4dGVybiBHdGtUeXBl
IEdUS19UWVBFX1BPTElDWV9UWVBFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9QT1NJVElPTl9U
WVBFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9QUkVWSUVXX1RZUEU7CmV4dGVybiBHdGtUeXBl
IEdUS19UWVBFX1JFTElFRl9TVFlMRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfUkVTSVpFX01P
REU7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX1NJR05BTF9SVU5fVFlQRTsKZXh0ZXJuIEd0a1R5
cGUgR1RLX1RZUEVfU0NST0xMX1RZUEU7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX1NFTEVDVElP
Tl9NT0RFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9TSEFET1dfVFlQRTsKZXh0ZXJuIEd0a1R5
cGUgR1RLX1RZUEVfU1RBVEVfVFlQRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfU1VCTUVOVV9E
SVJFQ1RJT047CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX1NVQk1FTlVfUExBQ0VNRU5UOwpleHRl
cm4gR3RrVHlwZSBHVEtfVFlQRV9UT09MQkFSX1NUWUxFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQ
RV9UUk9VR0hfVFlQRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfVVBEQVRFX1RZUEU7CmV4dGVy
biBHdGtUeXBlIEdUS19UWVBFX1ZJU0lCSUxJVFk7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX1dJ
TkRPV19QT1NJVElPTjsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfV0lORE9XX1RZUEU7CmV4dGVy
biBHdGtUeXBlIEdUS19UWVBFX1NPUlRfVFlQRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfRk9O
VF9NRVRSSUNfVFlQRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfRk9OVF9UWVBFOwpleHRlcm4g
R3RrVHlwZSBHVEtfVFlQRV9GT05UX0ZJTFRFUl9UWVBFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQ
RV9PQkpFQ1RfRkxBR1M7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX0FSR19GTEFHUzsKZXh0ZXJu
IEd0a1R5cGUgR1RLX1RZUEVfUEFDS0VSX09QVElPTlM7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBF
X1NJREVfVFlQRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfQU5DSE9SX1RZUEU7CmV4dGVybiBH
dGtUeXBlIEdUS19UWVBFX1BSSVZBVEVfRkxBR1M7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX1BS
T0dSRVNTX0JBUl9TVFlMRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfUFJPR1JFU1NfQkFSX09S
SUVOVEFUSU9OOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9SQ19GTEFHUzsKZXh0ZXJuIEd0a1R5
cGUgR1RLX1RZUEVfUkNfVE9LRU5fVFlQRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfU1BJTl9C
VVRUT05fVVBEQVRFX1BPTElDWTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfU1BJTl9UWVBFOwpl
eHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9UT09MQkFSX0NISUxEX1RZUEU7CmV4dGVybiBHdGtUeXBl
IEdUS19UWVBFX1RPT0xCQVJfU1BBQ0VfU1RZTEU7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX1RS
RUVfVklFV19NT0RFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9GVU5EQU1FTlRBTF9UWVBFOwpl
eHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9XSURHRVRfRkxBR1M7CmV4dGVybiBHdGtUeXBlIEdUS19U
WVBFX0dES19XSU5ET1dfVFlQRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX1dJTkRPV19D
TEFTUzsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX0lNQUdFX1RZUEU7CmV4dGVybiBHdGtU
eXBlIEdUS19UWVBFX0dES19WSVNVQUxfVFlQRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RL
X0ZPTlRfVFlQRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX1dJTkRPV19BVFRSSUJVVEVT
X1RZUEU7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX0dES19XSU5ET1dfSElOVFM7CmV4dGVybiBH
dGtUeXBlIEdUS19UWVBFX0dES19GVU5DVElPTjsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RL
X0ZJTEw7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX0dES19GSUxMX1JVTEU7CmV4dGVybiBHdGtU
eXBlIEdUS19UWVBFX0dES19MSU5FX1NUWUxFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9HREtf
Q0FQX1NUWUxFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9HREtfSk9JTl9TVFlMRTsKZXh0ZXJu
IEd0a1R5cGUgR1RLX1RZUEVfR0RLX0NVUlNPUl9UWVBFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQ
RV9HREtfRklMVEVSX1JFVFVSTjsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX1ZJU0lCSUxJ
VFlfU1RBVEU7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX0dES19FVkVOVF9UWVBFOwpleHRlcm4g
R3RrVHlwZSBHVEtfVFlQRV9HREtfRVZFTlRfTUFTSzsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVf
R0RLX05PVElGWV9UWVBFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9HREtfQ1JPU1NJTkdfTU9E
RTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX01PRElGSUVSX1RZUEU7CmV4dGVybiBHdGtU
eXBlIEdUS19UWVBFX0dES19TVUJXSU5ET1dfTU9ERTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVf
R0RLX0lOUFVUX0NPTkRJVElPTjsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX1NUQVRVUzsK
ZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX0JZVEVfT1JERVI7CmV4dGVybiBHdGtUeXBlIEdU
S19UWVBFX0dES19HQ19WQUxVRVNfTUFTSzsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX1NF
TEVDVElPTjsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX1BST1BFUlRZX1NUQVRFOwpleHRl
cm4gR3RrVHlwZSBHVEtfVFlQRV9HREtfUFJPUF9NT0RFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQ
RV9HREtfSU5QVVRfU09VUkNFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9HREtfSU5QVVRfTU9E
RTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX0FYSVNfVVNFOwpleHRlcm4gR3RrVHlwZSBH
VEtfVFlQRV9HREtfVEFSR0VUOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9HREtfU0VMRUNUSU9O
X1RZUEU7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX0dES19FWFRFTlNJT05fTU9ERTsKZXh0ZXJu
IEd0a1R5cGUgR1RLX1RZUEVfR0RLX0lNX1NUWUxFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9H
REtfSUNfQVRUUklCVVRFU19UWVBFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9HREtfV01fREVD
T1JBVElPTjsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX1dNX0ZVTkNUSU9OOwpleHRlcm4g
R3RrVHlwZSBHVEtfVFlQRV9HREtfQ09MT1JfQ09OVEVYVF9NT0RFOwpleHRlcm4gR3RrVHlwZSBH
VEtfVFlQRV9HREtfT1ZFUkxBUF9UWVBFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9HREtfRFJB
R19BQ1RJT047CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX0dES19EUkFHX1BST1RPQ09MOwpleHRl
cm4gR3RrVHlwZSBHVEtfVFlQRV9HREtfUkdCX0RJVEhFUjsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZ
UEVfQUNDRUxfR1JPVVA7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX1NFTEVDVElPTl9EQVRBOwpl
eHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9TVFlMRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfQ1RS
RUVfTk9ERTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX0NPTE9STUFQOwpleHRlcm4gR3Rr
VHlwZSBHVEtfVFlQRV9HREtfVklTVUFMOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9HREtfRk9O
VDsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX1dJTkRPVzsKZXh0ZXJuIEd0a1R5cGUgR1RL
X1RZUEVfR0RLX0RSQUdfQ09OVEVYVDsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX0VWRU5U
OwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9HREtfQ09MT1I7CgoKIyAxMzUgIi9vcHQvZ3RrL2lu
Y2x1ZGUvZ3RrLTEuMi9ndGsvZ3RrdHlwZXV0aWxzLmgiIDIKCgoKZXh0ZXJuICJDIiB7CgoKCkd0
a1R5cGUJCWd0a19pZGVudGlmaWVyX2dldF90eXBlCQkodm9pZCk7CgogCgoKCgoKdHlwZWRlZiBz
dHJ1Y3QgX0d0a0FyZwkgICAgICAgR3RrQXJnOwp0eXBlZGVmIHN0cnVjdCBfR3RrT2JqZWN0ICAg
ICAgR3RrT2JqZWN0OyAgICAKdHlwZWRlZiBzdHJ1Y3QgX0d0a1R5cGVJbmZvICAgIEd0a1R5cGVJ
bmZvOwp0eXBlZGVmIHN0cnVjdCBfR3RrVHlwZVF1ZXJ5ICAgR3RrVHlwZVF1ZXJ5Owp0eXBlZGVm
IHN0cnVjdCBfR3RrRW51bVZhbHVlICAgR3RrRW51bVZhbHVlOwp0eXBlZGVmIHN0cnVjdCBfR3Rr
RW51bVZhbHVlICAgR3RrRmxhZ1ZhbHVlOwoKCgoKdHlwZWRlZiB2b2lkICgqR3RrQ2xhc3NJbml0
RnVuYykgICAoZ3BvaW50ZXIgICBrbGFzcyk7CnR5cGVkZWYgdm9pZCAoKkd0a09iamVjdEluaXRG
dW5jKSAgKGdwb2ludGVyICAgb2JqZWN0LAoJCQkJICAgIGdwb2ludGVyICAga2xhc3MpOwp0eXBl
ZGVmIHZvaWQgKCpHdGtTaWduYWxGdW5jKSAgICAgICgpOwp0eXBlZGVmIGdpbnQgKCpHdGtGdW5j
dGlvbikJICAgKGdwb2ludGVyICAgZGF0YSk7CnR5cGVkZWYgdm9pZCAoKkd0a0Rlc3Ryb3lOb3Rp
ZnkpICAgKGdwb2ludGVyICAgZGF0YSk7CnR5cGVkZWYgdm9pZCAoKkd0a0NhbGxiYWNrTWFyc2hh
bCkgKEd0a09iamVjdCAqb2JqZWN0LAoJCQkJICAgIGdwb2ludGVyICAgZGF0YSwKCQkJCSAgICBn
dWludCAgICAgIG5fYXJncywKCQkJCSAgICBHdGtBcmcgICAgKmFyZ3MpOwp0eXBlZGVmIHZvaWQg
KCpHdGtTaWduYWxNYXJzaGFsbGVyKSAoR3RrT2JqZWN0ICAgICAgKm9iamVjdCwKCQkJCSAgICAg
R3RrU2lnbmFsRnVuYyAgIGZ1bmMsCgkJCQkgICAgIGdwb2ludGVyICAgICAgICBmdW5jX2RhdGEs
CgkJCQkgICAgIEd0a0FyZyAgICAgICAgICphcmdzKTsKCiAKdHlwZWRlZiB2b2lkICgqR3RrQXJn
R2V0RnVuYykJICAgKEd0a09iamVjdCosIEd0a0FyZyosIGd1aW50KTsKdHlwZWRlZiB2b2lkICgq
R3RrQXJnU2V0RnVuYykJICAgKEd0a09iamVjdCosIEd0a0FyZyosIGd1aW50KTsKCgogCgoKCgpz
dHJ1Y3QgX0d0a1R5cGVPYmplY3QKewogICAKCgoKICBHdGtUeXBlQ2xhc3MJKmtsYXNzOwp9OwoK
CiAKCgoKCnN0cnVjdCBfR3RrVHlwZUNsYXNzCnsKICAgCgoKICBHdGtUeXBlIHR5cGU7Cn07CgoK
c3RydWN0IF9HdGtBcmcKewogIEd0a1R5cGUgdHlwZTsKICBnY2hhciAqbmFtZTsKICAKICAgCgoK
CgoKICB1bmlvbiB7CiAgICAgCiAgICBnY2hhciBjaGFyX2RhdGE7CiAgICBndWNoYXIgdWNoYXJf
ZGF0YTsKICAgIGdib29sZWFuIGJvb2xfZGF0YTsKICAgIGdpbnQgaW50X2RhdGE7CiAgICBndWlu
dCB1aW50X2RhdGE7CiAgICBnbG9uZyBsb25nX2RhdGE7CiAgICBndWxvbmcgdWxvbmdfZGF0YTsK
ICAgIGdmbG9hdCBmbG9hdF9kYXRhOwogICAgZ2RvdWJsZSBkb3VibGVfZGF0YTsKICAgIGdjaGFy
ICpzdHJpbmdfZGF0YTsKICAgIGdwb2ludGVyIHBvaW50ZXJfZGF0YTsKICAgIEd0a09iamVjdCAq
b2JqZWN0X2RhdGE7CiAgICAKICAgICAKICAgIHN0cnVjdCB7CiAgICAgIEd0a1NpZ25hbEZ1bmMg
ZjsKICAgICAgZ3BvaW50ZXIgZDsKICAgIH0gc2lnbmFsX2RhdGE7CiAgICBzdHJ1Y3QgewogICAg
ICBnaW50IG5fYXJnczsKICAgICAgR3RrQXJnICphcmdzOwogICAgfSBhcmdzX2RhdGE7CiAgICBz
dHJ1Y3QgewogICAgICBHdGtDYWxsYmFja01hcnNoYWwgbWFyc2hhbDsKICAgICAgZ3BvaW50ZXIg
ZGF0YTsKICAgICAgR3RrRGVzdHJveU5vdGlmeSBub3RpZnk7CiAgICB9IGNhbGxiYWNrX2RhdGE7
CiAgICBzdHJ1Y3QgewogICAgICBHdGtGdW5jdGlvbiBmdW5jOwogICAgICBncG9pbnRlciBmdW5j
X2RhdGE7CiAgICB9IGNfY2FsbGJhY2tfZGF0YTsKICAgIHN0cnVjdCB7CiAgICAgIGdwb2ludGVy
IGRhdGE7CiAgICAgIEd0a0Rlc3Ryb3lOb3RpZnkgbm90aWZ5OwogICAgfSBmb3JlaWduX2RhdGE7
CiAgfSBkOwp9OwoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgoKCgogCgoKCgoK
CgoKCgoKCgoKCgpzdHJ1Y3QgX0d0a1R5cGVJbmZvCnsKICBnY2hhcgkJCSp0eXBlX25hbWU7CiAg
Z3VpbnQJCQkgb2JqZWN0X3NpemU7CiAgZ3VpbnQJCQkgY2xhc3Nfc2l6ZTsKICBHdGtDbGFzc0lu
aXRGdW5jCSBjbGFzc19pbml0X2Z1bmM7CiAgR3RrT2JqZWN0SW5pdEZ1bmMJIG9iamVjdF9pbml0
X2Z1bmM7CiAgZ3BvaW50ZXIJCSByZXNlcnZlZF8xOwogIGdwb2ludGVyCQkgcmVzZXJ2ZWRfMjsK
ICBHdGtDbGFzc0luaXRGdW5jCSBiYXNlX2NsYXNzX2luaXRfZnVuYzsKfTsKCnN0cnVjdCBfR3Rr
VHlwZVF1ZXJ5CnsKICBHdGtUeXBlCQkgdHlwZTsKICBjb25zdCBnY2hhcgkJKnR5cGVfbmFtZTsK
ICBndWludAkJCSBvYmplY3Rfc2l6ZTsKICBndWludAkJCSBjbGFzc19zaXplOwp9OwoKc3RydWN0
IF9HdGtFbnVtVmFsdWUKewogIGd1aW50CSB2YWx1ZTsKICBnY2hhcgkqdmFsdWVfbmFtZTsKICBn
Y2hhciAqdmFsdWVfbmljazsKfTsKCgp2b2lkCQlndGtfdHlwZV9pbml0CQkJKHZvaWQpOwpHdGtU
eXBlCQlndGtfdHlwZV91bmlxdWUJCQkoR3RrVHlwZQkgICBwYXJlbnRfdHlwZSwKCQkJCQkJIGNv
bnN0IEd0a1R5cGVJbmZvICp0eXBlX2luZm8pOwp2b2lkCQlndGtfdHlwZV9zZXRfY2h1bmtfYWxs
b2MJKEd0a1R5cGUJIHR5cGUsCgkJCQkJCSBndWludAkJIG5fY2h1bmtzKTsKZ2NoYXIqCQlndGtf
dHlwZV9uYW1lCQkJKGd1aW50CQkgdHlwZSk7Ckd0a1R5cGUJCWd0a190eXBlX2Zyb21fbmFtZQkJ
KGNvbnN0IGdjaGFyCSpuYW1lKTsKR3RrVHlwZQkJZ3RrX3R5cGVfcGFyZW50CQkJKEd0a1R5cGUJ
IHR5cGUpOwpncG9pbnRlcglndGtfdHlwZV9jbGFzcwkJCShHdGtUeXBlCSB0eXBlKTsKZ3BvaW50
ZXIJZ3RrX3R5cGVfcGFyZW50X2NsYXNzCQkoR3RrVHlwZQkgdHlwZSk7CkdMaXN0KgkJZ3RrX3R5
cGVfY2hpbGRyZW5fdHlwZXMJCShHdGtUeXBlCSB0eXBlKTsKZ3BvaW50ZXIJZ3RrX3R5cGVfbmV3
CQkJKEd0a1R5cGUJIHR5cGUpOwp2b2lkCQlndGtfdHlwZV9mcmVlCQkJKEd0a1R5cGUJIHR5cGUs
CgkJCQkJCSBncG9pbnRlcgkgbWVtKTsKdm9pZAkJZ3RrX3R5cGVfZGVzY3JpYmVfaGVyaXRhZ2UJ
KEd0a1R5cGUJIHR5cGUpOwp2b2lkCQlndGtfdHlwZV9kZXNjcmliZV90cmVlCQkoR3RrVHlwZQkg
dHlwZSwKCQkJCQkJIGdib29sZWFuCSBzaG93X3NpemUpOwpnYm9vbGVhbglndGtfdHlwZV9pc19h
CQkJKEd0a1R5cGUJIHR5cGUsCgkJCQkJCSBHdGtUeXBlCSBpc19hX3R5cGUpOwpHdGtUeXBlT2Jq
ZWN0KglndGtfdHlwZV9jaGVja19vYmplY3RfY2FzdAkoR3RrVHlwZU9iamVjdAkqdHlwZV9vYmpl
Y3QsCgkJCQkJCSBHdGtUeXBlICAgICAgICAgY2FzdF90eXBlKTsKR3RrVHlwZUNsYXNzKglndGtf
dHlwZV9jaGVja19jbGFzc19jYXN0CShHdGtUeXBlQ2xhc3MJKmtsYXNzLAoJCQkJCQkgR3RrVHlw
ZSAgICAgICAgIGNhc3RfdHlwZSk7Ckd0a1R5cGUJCWd0a190eXBlX3JlZ2lzdGVyX2VudW0JCShj
b25zdCBnY2hhcgkqdHlwZV9uYW1lLAoJCQkJCQkgR3RrRW51bVZhbHVlCSp2YWx1ZXMpOwpHdGtU
eXBlCQlndGtfdHlwZV9yZWdpc3Rlcl9mbGFncwkJKGNvbnN0IGdjaGFyCSp0eXBlX25hbWUsCgkJ
CQkJCSBHdGtGbGFnVmFsdWUJKnZhbHVlcyk7Ckd0a0VudW1WYWx1ZSoJZ3RrX3R5cGVfZW51bV9n
ZXRfdmFsdWVzCShHdGtUeXBlCSBlbnVtX3R5cGUpOwpHdGtGbGFnVmFsdWUqCWd0a190eXBlX2Zs
YWdzX2dldF92YWx1ZXMJKEd0a1R5cGUJIGZsYWdzX3R5cGUpOwpHdGtFbnVtVmFsdWUqCWd0a190
eXBlX2VudW1fZmluZF92YWx1ZQkoR3RrVHlwZQkgZW51bV90eXBlLAoJCQkJCQkgY29uc3QgZ2No
YXIJKnZhbHVlX25hbWUpOwpHdGtGbGFnVmFsdWUqCWd0a190eXBlX2ZsYWdzX2ZpbmRfdmFsdWUJ
KEd0a1R5cGUJIGZsYWdfdHlwZSwKCQkJCQkJIGNvbnN0IGdjaGFyCSp2YWx1ZV9uYW1lKTsKIAp2
b2lkCQlndGtfdHlwZV9zZXRfdmFyYXJnc190eXBlCShHdGtUeXBlCWZvcmVpZ25fdHlwZSwKCQkJ
CQkJIEd0a1R5cGUJdmFyYXJnc190eXBlKTsKR3RrVHlwZQkJZ3RrX3R5cGVfZ2V0X3ZhcmFyZ3Nf
dHlwZQkoR3RrVHlwZQlmb3JlaWduX3R5cGUpOwogCgoKCkd0a1R5cGVRdWVyeSoJZ3RrX3R5cGVf
cXVlcnkJCQkoR3RrVHlwZQl0eXBlKTsKCgoKCn0KCgoKCiMgMzEgIi9vcHQvZ3RrL2luY2x1ZGUv
Z3RrLTEuMi9ndGsvZ3RrYXJnLmgiIDIKCgoKCmV4dGVybiAiQyIgewoKCgoKCnR5cGVkZWYgc3Ry
dWN0IF9HdGtBcmdJbmZvCSBHdGtBcmdJbmZvOwoKc3RydWN0IF9HdGtBcmdJbmZvCnsKICAgCiAg
R3RrVHlwZSBjbGFzc190eXBlOwogIGdjaGFyICpuYW1lOwogIAogIEd0a1R5cGUgdHlwZTsKICBn
dWludCBhcmdfZmxhZ3M7CiAgZ2NoYXIgKmZ1bGxfbmFtZTsKICAKICAgCiAgZ3VpbnQgYXJnX2lk
OwogIGd1aW50IHNlcV9pZDsKfTsKCgogCgpHdGtBcmcqCQlndGtfYXJnX25ldwkJIChHdGtUeXBl
CWFyZ190eXBlKTsKR3RrQXJnKgkJZ3RrX2FyZ19jb3B5CQkgKEd0a0FyZyAgICAgICAqc3JjX2Fy
ZywKCQkJCQkgIEd0a0FyZyAgICAgICAqZGVzdF9hcmcpOwp2b2lkCQlndGtfYXJnX2ZyZWUJCSAo
R3RrQXJnICAgICAgICphcmcsCgkJCQkJICBnYm9vbGVhbglmcmVlX2NvbnRlbnRzKTsKdm9pZAkJ
Z3RrX2FyZ19yZXNldAkJIChHdGtBcmcgICAgICAgKmFyZyk7Cmdib29sZWFuCWd0a19hcmdfdmFs
dWVzX2VxdWFsCSAoY29uc3QgR3RrQXJnICphcmcxLAoJCQkJCSAgY29uc3QgR3RrQXJnICphcmcy
KTsKZ2NoYXIqCQlndGtfYXJnc19jb2xsZWN0CSAoR3RrVHlwZQlvYmplY3RfdHlwZSwKCQkJCQkg
IEdIYXNoVGFibGUgICAgKmFyZ19pbmZvX2hhc2hfdGFibGUsCgkJCQkJICBHU0xpc3QgICAgICAq
KmFyZ19saXN0X3AsCgkJCQkJICBHU0xpc3QgICAgICAqKmluZm9fbGlzdF9wLAoJCQkJCSAgY29u
c3QgZ2NoYXIgICAqZmlyc3RfYXJnX25hbWUsCgkJCQkJICB2YV9saXN0CXZhcl9hcmdzKTsKdm9p
ZAkJZ3RrX2FyZ3NfY29sbGVjdF9jbGVhbnVwIChHU0xpc3QgICAgICAgKmFyZ19saXN0LAoJCQkJ
CSAgR1NMaXN0ICAgICAgICppbmZvX2xpc3QpOwpnY2hhcioJCWd0a19hcmdfZ2V0X2luZm8JIChH
dGtUeXBlCW9iamVjdF90eXBlLAoJCQkJCSAgR0hhc2hUYWJsZSAgICAqYXJnX2luZm9faGFzaF90
YWJsZSwKCQkJCQkgIGNvbnN0IGdjaGFyICAgKmFyZ19uYW1lLAoJCQkJCSAgR3RrQXJnSW5mbyAg
ICoqaW5mb19wKTsKR3RrQXJnSW5mbyoJZ3RrX2FyZ190eXBlX25ld19zdGF0aWMJIChHdGtUeXBl
CWJhc2VfY2xhc3NfdHlwZSwKCQkJCQkgIGNvbnN0IGdjaGFyICAgKmFyZ19uYW1lLAoJCQkJCSAg
Z3VpbnQJCWNsYXNzX25fYXJnc19vZmZzZXQsCgkJCQkJICBHSGFzaFRhYmxlICAgICphcmdfaW5m
b19oYXNoX3RhYmxlLAoJCQkJCSAgR3RrVHlwZQlhcmdfdHlwZSwKCQkJCQkgIGd1aW50CQlhcmdf
ZmxhZ3MsCgkJCQkJICBndWludAkJYXJnX2lkKTsKR3RrQXJnKgkJZ3RrX2FyZ3NfcXVlcnkJCSAo
R3RrVHlwZQljbGFzc190eXBlLAoJCQkJCSAgR0hhc2hUYWJsZSAgICAqYXJnX2luZm9faGFzaF90
YWJsZSwKCQkJCQkgIGd1aW50MzIgICAgICAqKmFyZ19mbGFncywKCQkJCQkgIGd1aW50CSAgICAg
ICAqbl9hcmdzX3ApOwpnY2hhcioJCWd0a19hcmdfbmFtZV9zdHJpcF90eXBlCSAoY29uc3QgZ2No
YXIgICAqYXJnX25hbWUpOwpnaW50CQlndGtfYXJnX2luZm9fZXF1YWwJIChnY29uc3Rwb2ludGVy
CSBhcmdfaW5mb18xLAoJCQkJCSAgZ2NvbnN0cG9pbnRlcgkgYXJnX2luZm9fMik7Cmd1aW50CQln
dGtfYXJnX2luZm9faGFzaAkgKGdjb25zdHBvaW50ZXIJIGFyZ19pbmZvKTsKdm9pZAkJZ3RrX2Fy
Z190b192YWx1ZWxvYwkgKEd0a0FyZwkqYXJnLAoJCQkJCSAgZ3BvaW50ZXIJIHZhbHVlX3BvaW50
ZXIpOwogICAgICAgCgoKCgp9CgoKCgojIDMxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3Rr
L2d0a29iamVjdC5oIiAyCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLTEuMi9ndGsvZ3RrZW51
bXMuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCiAK
dHlwZWRlZiBlbnVtCnsKICBHVEtfQVJST1dfVVAsCiAgR1RLX0FSUk9XX0RPV04sCiAgR1RLX0FS
Uk9XX0xFRlQsCiAgR1RLX0FSUk9XX1JJR0hUCn0gR3RrQXJyb3dUeXBlOwoKIAp0eXBlZGVmIGVu
dW0KewogIEdUS19FWFBBTkQgPSAxIDw8IDAsCiAgR1RLX1NIUklOSyA9IDEgPDwgMSwKICBHVEtf
RklMTCAgID0gMSA8PCAyCn0gR3RrQXR0YWNoT3B0aW9uczsKCiAKdHlwZWRlZiBlbnVtIAp7CiAg
R1RLX0JVVFRPTkJPWF9ERUZBVUxUX1NUWUxFLAogIEdUS19CVVRUT05CT1hfU1BSRUFELAogIEdU
S19CVVRUT05CT1hfRURHRSwKICBHVEtfQlVUVE9OQk9YX1NUQVJULAogIEdUS19CVVRUT05CT1hf
RU5ECn0gR3RrQnV0dG9uQm94U3R5bGU7CgogCnR5cGVkZWYgZW51bQp7CiAgR1RLX0NVUlZFX1RZ
UEVfTElORUFSLCAgICAgICAgCiAgR1RLX0NVUlZFX1RZUEVfU1BMSU5FLCAgICAgICAgCiAgR1RL
X0NVUlZFX1RZUEVfRlJFRSAgICAgICAgICAgCn0gR3RrQ3VydmVUeXBlOwogCiAKdHlwZWRlZiBl
bnVtCnsKICBHVEtfRElSX1RBQl9GT1JXQVJELAogIEdUS19ESVJfVEFCX0JBQ0tXQVJELAogIEdU
S19ESVJfVVAsCiAgR1RLX0RJUl9ET1dOLAogIEdUS19ESVJfTEVGVCwKICBHVEtfRElSX1JJR0hU
Cn0gR3RrRGlyZWN0aW9uVHlwZTsKCiAKdHlwZWRlZiBlbnVtCnsKICBHVEtfSlVTVElGWV9MRUZU
LAogIEdUS19KVVNUSUZZX1JJR0hULAogIEdUS19KVVNUSUZZX0NFTlRFUiwKICBHVEtfSlVTVElG
WV9GSUxMCn0gR3RrSnVzdGlmaWNhdGlvbjsKCiAKdHlwZWRlZiBlbnVtCnsKICBHVEtfTUFUQ0hf
QUxMLCAgICAgICAgCiAgR1RLX01BVENIX0FMTF9UQUlMLCAgIAogIEdUS19NQVRDSF9IRUFELCAg
ICAgICAKICBHVEtfTUFUQ0hfVEFJTCwgICAgICAgCiAgR1RLX01BVENIX0VYQUNULCAgICAgIAog
IEdUS19NQVRDSF9MQVNUCn0gR3RrTWF0Y2hUeXBlOwoKIAp0eXBlZGVmIGVudW0KewogIEdUS19N
RU5VX0RJUl9QQVJFTlQsCiAgR1RLX01FTlVfRElSX0NISUxELAogIEdUS19NRU5VX0RJUl9ORVhU
LAogIEdUS19NRU5VX0RJUl9QUkVWCn0gR3RrTWVudURpcmVjdGlvblR5cGU7Cgp0eXBlZGVmIGVu
dW0KewogIEdUS19NRU5VX0ZBQ1RPUllfTUVOVSwKICBHVEtfTUVOVV9GQUNUT1JZX01FTlVfQkFS
LAogIEdUS19NRU5VX0ZBQ1RPUllfT1BUSU9OX01FTlUKfSBHdGtNZW51RmFjdG9yeVR5cGU7Cgp0
eXBlZGVmIGVudW0KewogIEdUS19QSVhFTFMsCiAgR1RLX0lOQ0hFUywKICBHVEtfQ0VOVElNRVRF
UlMKfSBHdGtNZXRyaWNUeXBlOwoKIAp0eXBlZGVmIGVudW0KewogIEdUS19PUklFTlRBVElPTl9I
T1JJWk9OVEFMLAogIEdUS19PUklFTlRBVElPTl9WRVJUSUNBTAp9IEd0a09yaWVudGF0aW9uOwoK
IAp0eXBlZGVmIGVudW0KewogIEdUS19DT1JORVJfVE9QX0xFRlQsCiAgR1RLX0NPUk5FUl9CT1RU
T01fTEVGVCwKICBHVEtfQ09STkVSX1RPUF9SSUdIVCwKICBHVEtfQ09STkVSX0JPVFRPTV9SSUdI
VAp9IEd0a0Nvcm5lclR5cGU7CgogCnR5cGVkZWYgZW51bQp7CiAgR1RLX1BBQ0tfU1RBUlQsCiAg
R1RLX1BBQ0tfRU5ECn0gR3RrUGFja1R5cGU7CgogCnR5cGVkZWYgZW51bQp7CiAgR1RLX1BBVEhf
UFJJT19MT1dFU1QgICAgICA9IDAsCiAgR1RLX1BBVEhfUFJJT19HVEsJICAgID0gNCwKICBHVEtf
UEFUSF9QUklPX0FQUExJQ0FUSU9OID0gOCwKICBHVEtfUEFUSF9QUklPX1JDICAgICAgICAgID0g
MTIsCiAgR1RLX1BBVEhfUFJJT19ISUdIRVNUICAgICA9IDE1LAogIEdUS19QQVRIX1BSSU9fTUFT
SyAgICAgICAgPSAweDBmCn0gR3RrUGF0aFByaW9yaXR5VHlwZTsKCiAKdHlwZWRlZiBlbnVtCnsK
ICBHVEtfUEFUSF9XSURHRVQsCiAgR1RLX1BBVEhfV0lER0VUX0NMQVNTLAogIEdUS19QQVRIX0NM
QVNTCn0gR3RrUGF0aFR5cGU7CgogCnR5cGVkZWYgZW51bQp7CiAgR1RLX1BPTElDWV9BTFdBWVMs
CiAgR1RLX1BPTElDWV9BVVRPTUFUSUMsCiAgR1RLX1BPTElDWV9ORVZFUgp9IEd0a1BvbGljeVR5
cGU7Cgp0eXBlZGVmIGVudW0KewogIEdUS19QT1NfTEVGVCwKICBHVEtfUE9TX1JJR0hULAogIEdU
S19QT1NfVE9QLAogIEdUS19QT1NfQk9UVE9NCn0gR3RrUG9zaXRpb25UeXBlOwoKdHlwZWRlZiBl
bnVtCnsKICBHVEtfUFJFVklFV19DT0xPUiwKICBHVEtfUFJFVklFV19HUkFZU0NBTEUKfSBHdGtQ
cmV2aWV3VHlwZTsKCiAKdHlwZWRlZiBlbnVtCnsKICBHVEtfUkVMSUVGX05PUk1BTCwKICBHVEtf
UkVMSUVGX0hBTEYsCiAgR1RLX1JFTElFRl9OT05FCn0gR3RrUmVsaWVmU3R5bGU7CgogCnR5cGVk
ZWYgZW51bQp7CiAgR1RLX1JFU0laRV9QQVJFTlQsCQkgCiAgR1RLX1JFU0laRV9RVUVVRSwJCSAK
ICBHVEtfUkVTSVpFX0lNTUVESUFURQkJIAp9IEd0a1Jlc2l6ZU1vZGU7CgogCnR5cGVkZWYgZW51
bQkJCSAKewogIEdUS19SVU5fRklSU1QgICAgICA9IDEgPDwgMCwKICBHVEtfUlVOX0xBU1QgICAg
ICAgPSAxIDw8IDEsCiAgR1RLX1JVTl9CT1RIICAgICAgID0gKEdUS19SVU5fRklSU1QgfCBHVEtf
UlVOX0xBU1QpLAogIEdUS19SVU5fTk9fUkVDVVJTRSA9IDEgPDwgMiwKICBHVEtfUlVOX0FDVElP
TiAgICAgPSAxIDw8IDMsCiAgR1RLX1JVTl9OT19IT09LUyAgID0gMSA8PCA0Cn0gR3RrU2lnbmFs
UnVuVHlwZTsKCiAKdHlwZWRlZiBlbnVtCnsKICBHVEtfU0NST0xMX05PTkUsCiAgR1RLX1NDUk9M
TF9TVEVQX0JBQ0tXQVJELAogIEdUS19TQ1JPTExfU1RFUF9GT1JXQVJELAogIEdUS19TQ1JPTExf
UEFHRV9CQUNLV0FSRCwKICBHVEtfU0NST0xMX1BBR0VfRk9SV0FSRCwKICBHVEtfU0NST0xMX0pV
TVAKfSBHdGtTY3JvbGxUeXBlOwoKIAp0eXBlZGVmIGVudW0KewogIEdUS19TRUxFQ1RJT05fU0lO
R0xFLAogIEdUS19TRUxFQ1RJT05fQlJPV1NFLAogIEdUS19TRUxFQ1RJT05fTVVMVElQTEUsCiAg
R1RLX1NFTEVDVElPTl9FWFRFTkRFRAp9IEd0a1NlbGVjdGlvbk1vZGU7CgogCnR5cGVkZWYgZW51
bQp7CiAgR1RLX1NIQURPV19OT05FLAogIEdUS19TSEFET1dfSU4sCiAgR1RLX1NIQURPV19PVVQs
CiAgR1RLX1NIQURPV19FVENIRURfSU4sCiAgR1RLX1NIQURPV19FVENIRURfT1VUCn0gR3RrU2hh
ZG93VHlwZTsKCiAKdHlwZWRlZiBlbnVtCnsKICBHVEtfU1RBVEVfTk9STUFMLAogIEdUS19TVEFU
RV9BQ1RJVkUsCiAgR1RLX1NUQVRFX1BSRUxJR0hULAogIEdUS19TVEFURV9TRUxFQ1RFRCwKICBH
VEtfU1RBVEVfSU5TRU5TSVRJVkUKfSBHdGtTdGF0ZVR5cGU7CgogCnR5cGVkZWYgZW51bQp7CiAg
R1RLX0RJUkVDVElPTl9MRUZULAogIEdUS19ESVJFQ1RJT05fUklHSFQKfSBHdGtTdWJtZW51RGly
ZWN0aW9uOwoKIAp0eXBlZGVmIGVudW0KewogIEdUS19UT1BfQk9UVE9NLAogIEdUS19MRUZUX1JJ
R0hUCn0gR3RrU3VibWVudVBsYWNlbWVudDsKCiAKdHlwZWRlZiBlbnVtCnsKICBHVEtfVE9PTEJB
Ul9JQ09OUywKICBHVEtfVE9PTEJBUl9URVhULAogIEdUS19UT09MQkFSX0JPVEgKfSBHdGtUb29s
YmFyU3R5bGU7CgogCnR5cGVkZWYgZW51bQp7CiAgR1RLX1RST1VHSF9OT05FLAogIEdUS19UUk9V
R0hfU1RBUlQsCiAgR1RLX1RST1VHSF9FTkQsCiAgR1RLX1RST1VHSF9KVU1QCn0gR3RrVHJvdWdo
VHlwZTsKCiAKdHlwZWRlZiBlbnVtCnsKICBHVEtfVVBEQVRFX0NPTlRJTlVPVVMsCiAgR1RLX1VQ
REFURV9ESVNDT05USU5VT1VTLAogIEdUS19VUERBVEVfREVMQVlFRAp9IEd0a1VwZGF0ZVR5cGU7
CgogCnR5cGVkZWYgZW51bQp7CiAgR1RLX1ZJU0lCSUxJVFlfTk9ORSwKICBHVEtfVklTSUJJTElU
WV9QQVJUSUFMLAogIEdUS19WSVNJQklMSVRZX0ZVTEwKfSBHdGtWaXNpYmlsaXR5OwoKIAp0eXBl
ZGVmIGVudW0KewogIEdUS19XSU5fUE9TX05PTkUsCiAgR1RLX1dJTl9QT1NfQ0VOVEVSLAogIEdU
S19XSU5fUE9TX01PVVNFLAogIEdUS19XSU5fUE9TX0NFTlRFUl9BTFdBWVMKfSBHdGtXaW5kb3dQ
b3NpdGlvbjsKCiAKdHlwZWRlZiBlbnVtCnsKICBHVEtfV0lORE9XX1RPUExFVkVMLAogIEdUS19X
SU5ET1dfRElBTE9HLAogIEdUS19XSU5ET1dfUE9QVVAKfSBHdGtXaW5kb3dUeXBlOwoKIAp0eXBl
ZGVmIGVudW0KewogIEdUS19TT1JUX0FTQ0VORElORywKICBHVEtfU09SVF9ERVNDRU5ESU5HCn0g
R3RrU29ydFR5cGU7CgoKfQoKCgoKIyAzMiAiL29wdC9ndGsvaW5jbHVkZS9ndGstMS4yL2d0ay9n
dGtvYmplY3QuaCIgMgoKCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9ndGstMS4yL2d0ay9ndGtkZWJ1
Zy5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKdHlw
ZWRlZiBlbnVtIHsKICBHVEtfREVCVUdfT0JKRUNUUyAgICA9IDEgPDwgMCwKICBHVEtfREVCVUdf
TUlTQyAgICAgICA9IDEgPDwgMSwKICBHVEtfREVCVUdfU0lHTkFMUyAgICA9IDEgPDwgMiwKICBH
VEtfREVCVUdfRE5EICAgICAgICA9IDEgPDwgMywKICBHVEtfREVCVUdfUExVR1NPQ0tFVCA9IDEg
PDwgNAp9IEd0a0RlYnVnRmxhZzsKCgoKCgoKCgoKCiAgICAgIAoKCmV4dGVybiBndWludCBndGtf
ZGVidWdfZmxhZ3M7CgoKfQoKCgoKIyAzNCAiL29wdC9ndGsvaW5jbHVkZS9ndGstMS4yL2d0ay9n
dGtvYmplY3QuaCIgMgoKCgoKZXh0ZXJuICJDIiB7CgoKCgogCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CgoKCgoKIAoKCgoKCiAKCgoKCnR5cGVkZWYgZW51bQp7CiAgR1RLX0RFU1RST1lFRAkJPSAxIDw8
IDAsCiAgR1RLX0ZMT0FUSU5HCQk9IDEgPDwgMSwKICBHVEtfQ09OTkVDVEVECQk9IDEgPDwgMiwK
ICBHVEtfQ09OU1RSVUNURUQJPSAxIDw8IDMKfSBHdGtPYmplY3RGbGFnczsKCiAKCgoKCgoKCiAK
CgoKCiAKCnR5cGVkZWYgZW51bQp7CiAgR1RLX0FSR19SRUFEQUJMRQkgPSAxIDw8IDAsCiAgR1RL
X0FSR19XUklUQUJMRQkgPSAxIDw8IDEsCiAgR1RLX0FSR19DT05TVFJVQ1QJID0gMSA8PCAyLAog
IEdUS19BUkdfQ09OU1RSVUNUX09OTFkgPSAxIDw8IDMsCiAgR1RLX0FSR19DSElMRF9BUkcJID0g
MSA8PCA0LAogIEdUS19BUkdfTUFTSwkJID0gMHgxZiwKICAKICAgCgogIEdUS19BUkdfUkVBRFdS
SVRFCSA9IEdUS19BUkdfUkVBREFCTEUgfCBHVEtfQVJHX1dSSVRBQkxFCn0gR3RrQXJnRmxhZ3M7
Cgp0eXBlZGVmIHN0cnVjdCBfR3RrT2JqZWN0Q2xhc3MJR3RrT2JqZWN0Q2xhc3M7CgoKIAoKCgoK
c3RydWN0IF9HdGtPYmplY3QKewogICAKICBHdGtPYmplY3RDbGFzcyAqa2xhc3M7CiAgCiAgCiAg
IAoKCgoKICBndWludDMyIGZsYWdzOwogIAogICAKCgogIGd1aW50IHJlZl9jb3VudDsKICAKICAg
CgoKICBHRGF0YSAqb2JqZWN0X2RhdGE7Cn07CgogCgoKCgoKCnN0cnVjdCBfR3RrT2JqZWN0Q2xh
c3MKewogICAKICBHdGtUeXBlIHR5cGU7CiAgCiAgCiAgIAoKCiAgZ3VpbnQgKnNpZ25hbHM7CiAg
CiAgIAoKICBndWludCBuc2lnbmFsczsKICAKICAgCgogIGd1aW50IG5fYXJnczsKICBHU0xpc3Qg
KmNvbnN0cnVjdF9hcmdzOwogIAogICAKICB2b2lkICgqc2V0X2FyZykgKEd0a09iamVjdCAqb2Jq
ZWN0LAoJCSAgIEd0a0FyZyAgICAqYXJnLAoJCSAgIGd1aW50ICAgICAgYXJnX2lkKTsKICB2b2lk
ICgqZ2V0X2FyZykgKEd0a09iamVjdCAqb2JqZWN0LAoJCSAgIEd0a0FyZyAgICAqYXJnLAoJCSAg
IGd1aW50ICAgICAgYXJnX2lkKTsKICAKICAgCgoKCgoKCgogIHZvaWQgKCogc2h1dGRvd24pIChH
dGtPYmplY3QgKm9iamVjdCk7CiAgdm9pZCAoKiBkZXN0cm95KSAgKEd0a09iamVjdCAqb2JqZWN0
KTsKICAKICB2b2lkICgqIGZpbmFsaXplKSAoR3RrT2JqZWN0ICpvYmplY3QpOwp9OwoKCgogCgpH
dGtUeXBlCWd0a19vYmplY3RfZ2V0X3R5cGUJCSh2b2lkKTsKCiAKZ3VpbnQJZ3RrX29iamVjdF9j
bGFzc191c2VyX3NpZ25hbF9uZXcgIChHdGtPYmplY3RDbGFzcyAgICAgKmtsYXNzLAoJCQkJCSAg
IGNvbnN0IGdjaGFyCSAgICAgICpuYW1lLAoJCQkJCSAgIEd0a1NpZ25hbFJ1blR5cGUgICAgc2ln
bmFsX2ZsYWdzLAoJCQkJCSAgIEd0a1NpZ25hbE1hcnNoYWxsZXIgbWFyc2hhbGxlciwKCQkJCQkg
ICBHdGtUeXBlCSAgICAgICByZXR1cm5fdmFsLAoJCQkJCSAgIGd1aW50CSAgICAgICBucGFyYW1z
LAoJCQkJCSAgIC4uLik7Cmd1aW50CWd0a19vYmplY3RfY2xhc3NfdXNlcl9zaWduYWxfbmV3diAo
R3RrT2JqZWN0Q2xhc3MgICAgICprbGFzcywKCQkJCQkgICBjb25zdCBnY2hhcgkgICAgICAqbmFt
ZSwKCQkJCQkgICBHdGtTaWduYWxSdW5UeXBlICAgIHNpZ25hbF9mbGFncywKCQkJCQkgICBHdGtT
aWduYWxNYXJzaGFsbGVyIG1hcnNoYWxsZXIsCgkJCQkJICAgR3RrVHlwZQkgICAgICAgcmV0dXJu
X3ZhbCwKCQkJCQkgICBndWludAkgICAgICAgbnBhcmFtcywKCQkJCQkgICBHdGtUeXBlCSAgICAg
ICpwYXJhbXMpOwpHdGtPYmplY3QqCWd0a19vYmplY3RfbmV3CQkgIChHdGtUeXBlCSAgICAgICB0
eXBlLAoJCQkJCSAgIGNvbnN0IGdjaGFyCSAgICAgICpmaXJzdF9hcmdfbmFtZSwKCQkJCQkgICAu
Li4pOwpHdGtPYmplY3QqCWd0a19vYmplY3RfbmV3dgkJICAoR3RrVHlwZQkgICAgICAgb2JqZWN0
X3R5cGUsCgkJCQkJICAgZ3VpbnQJICAgICAgIG5fYXJncywKCQkJCQkgICBHdGtBcmcJICAgICAg
KmFyZ3MpOwp2b2lkIGd0a19vYmplY3RfZGVmYXVsdF9jb25zdHJ1Y3QgICAgICAgICAoR3RrT2Jq
ZWN0CSAgICAgICpvYmplY3QpOwp2b2lkIGd0a19vYmplY3RfY29uc3RydWN0ZWQJCSAgKEd0a09i
amVjdAkgICAgICAqb2JqZWN0KTsKdm9pZCBndGtfb2JqZWN0X3NpbmsJICAoR3RrT2JqZWN0CSAg
ICAqb2JqZWN0KTsKdm9pZCBndGtfb2JqZWN0X3JlZgkgIChHdGtPYmplY3QJICAgICpvYmplY3Qp
Owp2b2lkIGd0a19vYmplY3RfdW5yZWYJICAoR3RrT2JqZWN0CSAgICAqb2JqZWN0KTsKdm9pZCBn
dGtfb2JqZWN0X3dlYWtyZWYJICAoR3RrT2JqZWN0CSAgICAqb2JqZWN0LAoJCQkgICBHdGtEZXN0
cm95Tm90aWZ5ICBub3RpZnksCgkJCSAgIGdwb2ludGVyCSAgICAgZGF0YSk7CnZvaWQgZ3RrX29i
amVjdF93ZWFrdW5yZWYgKEd0a09iamVjdAkgICAgKm9iamVjdCwKCQkJICAgR3RrRGVzdHJveU5v
dGlmeSAgbm90aWZ5LAoJCQkgICBncG9pbnRlcgkgICAgIGRhdGEpOwp2b2lkIGd0a19vYmplY3Rf
ZGVzdHJveQkgIChHdGtPYmplY3QgKm9iamVjdCk7CgogCgoKCgp2b2lkCWd0a19vYmplY3RfZ2V0
dgkJKEd0a09iamVjdAkqb2JqZWN0LAoJCQkJIGd1aW50CQluX2FyZ3MsCgkJCQkgR3RrQXJnCQkq
YXJncyk7CiAKCgoKCnZvaWQJZ3RrX29iamVjdF9nZXQJCShHdGtPYmplY3QJKm9iamVjdCwKCQkJ
CSBjb25zdCBnY2hhcgkqZmlyc3RfYXJnX25hbWUsCgkJCQkgLi4uKTsKCiAKCgoKCnZvaWQJZ3Rr
X29iamVjdF9zZXQJCShHdGtPYmplY3QJKm9iamVjdCwKCQkJCSBjb25zdCBnY2hhcgkqZmlyc3Rf
YXJnX25hbWUsCgkJCQkgLi4uKTsKdm9pZAlndGtfb2JqZWN0X3NldHYJCShHdGtPYmplY3QJKm9i
amVjdCwKCQkJCSBndWludAkJbl9hcmdzLAoJCQkJIEd0a0FyZwkJKmFyZ3MpOwoKIAoKCgoKCgoK
R3RrQXJnKiBndGtfb2JqZWN0X3F1ZXJ5X2FyZ3MJKEd0a1R5cGUJICBjbGFzc190eXBlLAoJCQkJ
IGd1aW50MzIJKiphcmdfZmxhZ3MsCgkJCQkgZ3VpbnQJCSAqbl9hcmdzKTsKCiAKCgoKCgoKCgoK
Cgp2b2lkCSBndGtfb2JqZWN0X3NldF9kYXRhCSAgICAgKEd0a09iamVjdAkgICAgICpvYmplY3Qs
CgkJCQkgICAgICBjb25zdCBnY2hhciAgICAqa2V5LAoJCQkJICAgICAgZ3BvaW50ZXIJICAgICAg
ZGF0YSk7CnZvaWQJIGd0a19vYmplY3Rfc2V0X2RhdGFfZnVsbCAgICAoR3RrT2JqZWN0CSAgICAg
Km9iamVjdCwKCQkJCSAgICAgIGNvbnN0IGdjaGFyICAgICprZXksCgkJCQkgICAgICBncG9pbnRl
cgkgICAgICBkYXRhLAoJCQkJICAgICAgR3RrRGVzdHJveU5vdGlmeSBkZXN0cm95KTsKdm9pZAkg
Z3RrX29iamVjdF9yZW1vdmVfZGF0YQkgICAgIChHdGtPYmplY3QJICAgICAqb2JqZWN0LAoJCQkJ
ICAgICAgY29uc3QgZ2NoYXIgICAgKmtleSk7Cmdwb2ludGVyIGd0a19vYmplY3RfZ2V0X2RhdGEJ
ICAgICAoR3RrT2JqZWN0CSAgICAgKm9iamVjdCwKCQkJCSAgICAgIGNvbnN0IGdjaGFyICAgICpr
ZXkpOwp2b2lkCSBndGtfb2JqZWN0X3JlbW92ZV9ub19ub3RpZnkgKEd0a09iamVjdAkgICAgICpv
YmplY3QsCgkJCQkgICAgICBjb25zdCBnY2hhciAgICAqa2V5KTsKCiAKCgoKCnZvaWQJIGd0a19v
YmplY3Rfc2V0X3VzZXJfZGF0YSAoR3RrT2JqZWN0CSpvYmplY3QsCgkJCQkgICBncG9pbnRlcgkg
ZGF0YSk7Cmdwb2ludGVyIGd0a19vYmplY3RfZ2V0X3VzZXJfZGF0YSAoR3RrT2JqZWN0CSpvYmpl
Y3QpOwoKCiAKCiAKdm9pZAlndGtfb2JqZWN0X2NsYXNzX2FkZF9zaWduYWxzCShHdGtPYmplY3RD
bGFzcwkqa2xhc3MsCgkJCQkJIGd1aW50CQkqc2lnbmFscywKCQkJCQkgZ3VpbnQJCSBuc2lnbmFs
cyk7CiAKdm9pZAlndGtfb2JqZWN0X2FkZF9hcmdfdHlwZQkJKGNvbnN0IGdjaGFyCSphcmdfbmFt
ZSwKCQkJCQkgR3RrVHlwZQkgYXJnX3R5cGUsCgkJCQkJIGd1aW50CQkgYXJnX2ZsYWdzLAoJCQkJ
CSBndWludAkJIGFyZ19pZCk7CgogCnZvaWQgZ3RrX29iamVjdF9zZXRfZGF0YV9ieV9pZAkJKEd0
a09iamVjdAkgKm9iamVjdCwKCQkJCQkgR1F1YXJrCQkgIGRhdGFfaWQsCgkJCQkJIGdwb2ludGVy
CSAgZGF0YSk7CnZvaWQgZ3RrX29iamVjdF9zZXRfZGF0YV9ieV9pZF9mdWxsCShHdGtPYmplY3QJ
ICpvYmplY3QsCgkJCQkJIEdRdWFyawkJICBkYXRhX2lkLAoJCQkJCSBncG9pbnRlcgkgIGRhdGEs
CgkJCQkJIEd0a0Rlc3Ryb3lOb3RpZnkgZGVzdHJveSk7Cmdwb2ludGVyIGd0a19vYmplY3RfZ2V0
X2RhdGFfYnlfaWQJKEd0a09iamVjdAkgKm9iamVjdCwKCQkJCQkgR1F1YXJrCQkgIGRhdGFfaWQp
Owp2b2lkICBndGtfb2JqZWN0X3JlbW92ZV9kYXRhX2J5X2lkCShHdGtPYmplY3QJICpvYmplY3Qs
CgkJCQkJIEdRdWFyawkJICBkYXRhX2lkKTsKdm9pZCAgZ3RrX29iamVjdF9yZW1vdmVfbm9fbm90
aWZ5X2J5X2lkCShHdGtPYmplY3QJICpvYmplY3QsCgkJCQkJIEdRdWFyawkJICBrZXlfaWQpOwoK
CgoKIAoKdm9pZAlndGtfb2JqZWN0X2FyZ19zZXQJKEd0a09iamVjdCAgICpvYmplY3QsCgkJCQkg
R3RrQXJnCSAgICAgKmFyZywKCQkJCSBHdGtBcmdJbmZvICAqaW5mbyk7CnZvaWQJZ3RrX29iamVj
dF9hcmdfZ2V0CShHdGtPYmplY3QgICAqb2JqZWN0LAoJCQkJIEd0a0FyZwkgICAgICphcmcsCgkJ
CQkgR3RrQXJnSW5mbyAgKmluZm8pOwpnY2hhcioJZ3RrX29iamVjdF9hcmdzX2NvbGxlY3QgKEd0
a1R5cGUgICAgICBvYmplY3RfdHlwZSwKCQkJCSBHU0xpc3QJICAgICoqYXJnX2xpc3RfcCwKCQkJ
CSBHU0xpc3QJICAgICoqaW5mb19saXN0X3AsCgkJCQkgY29uc3QgZ2NoYXIgKmZpcnN0X2FyZ19u
YW1lLAoJCQkJIHZhX2xpc3QgICAgICB2YXJfYXJncyk7CmdjaGFyKglndGtfb2JqZWN0X2FyZ19n
ZXRfaW5mbyAoR3RrVHlwZSAgICAgIG9iamVjdF90eXBlLAoJCQkJIGNvbnN0IGdjaGFyICphcmdf
bmFtZSwKCQkJCSBHdGtBcmdJbmZvICoqaW5mb19wKTsKdm9pZAlndGtfdHJhY2VfcmVmZXJlbmNp
bmcJKEd0a09iamVjdCAgICpvYmplY3QsCgkJCQkgY29uc3QgZ2NoYXIgKmZ1bmMsCgkJCQkgZ3Vp
bnQJICAgICAgZHVtbXksCgkJCQkgZ3VpbnQJICAgICAgbGluZSwKCQkJCSBnYm9vbGVhbiAgICAg
ZG9fcmVmKTsKCgoKCgoKCgoKCgoKCn0KCgoKCiMgMTAgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLS0v
cHJveHkuaCIgMgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a3NpZ25hbC5o
IiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKIyAxICIvb3B0L2d0ay9pbmNs
dWRlL2d0ay0xLjIvZ3RrL2d0a21hcnNoYWwuaCIgMQoKCgoKCgoKZXh0ZXJuICJDIgp7CgoKCgog
IHZvaWQgZ3RrX21hcnNoYWxfQk9PTF9fTk9ORSAoR3RrT2JqZWN0ICogb2JqZWN0LAoJCQkgICAg
ICAgR3RrU2lnbmFsRnVuYyBmdW5jLAoJCQkgICAgICAgZ3BvaW50ZXIgZnVuY19kYXRhLCBHdGtB
cmcgKiBhcmdzKTsKCiAgdm9pZCBndGtfbWFyc2hhbF9CT09MX19QT0lOVEVSIChHdGtPYmplY3Qg
KiBvYmplY3QsCgkJCQkgIEd0a1NpZ25hbEZ1bmMgZnVuYywKCQkJCSAgZ3BvaW50ZXIgZnVuY19k
YXRhLCBHdGtBcmcgKiBhcmdzKTsKCiAgdm9pZCBndGtfbWFyc2hhbF9CT09MX19QT0lOVEVSX1BP
SU5URVJfSU5UX0lOVCAoR3RrT2JqZWN0ICogb2JqZWN0LAoJCQkJCQkgIEd0a1NpZ25hbEZ1bmMg
ZnVuYywKCQkJCQkJICBncG9pbnRlciBmdW5jX2RhdGEsCgkJCQkJCSAgR3RrQXJnICogYXJncyk7
CgogIHZvaWQgZ3RrX21hcnNoYWxfQk9PTF9fUE9JTlRFUl9JTlRfSU5UIChHdGtPYmplY3QgKiBv
YmplY3QsCgkJCQkJICBHdGtTaWduYWxGdW5jIGZ1bmMsCgkJCQkJICBncG9pbnRlciBmdW5jX2Rh
dGEsIEd0a0FyZyAqIGFyZ3MpOwoKCgogIHZvaWQgZ3RrX21hcnNoYWxfQk9PTF9fUE9JTlRFUl9J
TlRfSU5UX0lOVCAoR3RrT2JqZWN0ICogb2JqZWN0LAoJCQkJCSAgICAgIEd0a1NpZ25hbEZ1bmMg
ZnVuYywKCQkJCQkgICAgICBncG9pbnRlciBmdW5jX2RhdGEsCgkJCQkJICAgICAgR3RrQXJnICog
YXJncyk7CgoKCiAgdm9pZCBndGtfbWFyc2hhbF9CT09MX19QT0lOVEVSX1BPSU5URVJfUE9JTlRF
Ul9QT0lOVEVSIChHdGtPYmplY3QgKiBvYmplY3QsCgkJCQkJCQkgIEd0a1NpZ25hbEZ1bmMgZnVu
YywKCQkJCQkJCSAgZ3BvaW50ZXIgZnVuY19kYXRhLAoJCQkJCQkJICBHdGtBcmcgKiBhcmdzKTsK
CgoKICB2b2lkIGd0a19tYXJzaGFsX0lOVF9fSU5UIChHdGtPYmplY3QgKiBvYmplY3QsCgkJCSAg
ICAgR3RrU2lnbmFsRnVuYyBmdW5jLAoJCQkgICAgIGdwb2ludGVyIGZ1bmNfZGF0YSwgR3RrQXJn
ICogYXJncyk7CgogIHZvaWQgZ3RrX21hcnNoYWxfSU5UX19QT0lOVEVSIChHdGtPYmplY3QgKiBv
YmplY3QsCgkJCQkgR3RrU2lnbmFsRnVuYyBmdW5jLAoJCQkJIGdwb2ludGVyIGZ1bmNfZGF0YSwg
R3RrQXJnICogYXJncyk7CgogIHZvaWQgZ3RrX21hcnNoYWxfSU5UX19QT0lOVEVSX0NIQVJfQ0hB
UiAoR3RrT2JqZWN0ICogb2JqZWN0LAoJCQkJCSAgIEd0a1NpZ25hbEZ1bmMgZnVuYywKCQkJCQkg
ICBncG9pbnRlciBmdW5jX2RhdGEsIEd0a0FyZyAqIGFyZ3MpOwoKICB2b2lkIGd0a19tYXJzaGFs
X05PTkVfX0JPT0wgKEd0a09iamVjdCAqIG9iamVjdCwKCQkJICAgICAgIEd0a1NpZ25hbEZ1bmMg
ZnVuYywKCQkJICAgICAgIGdwb2ludGVyIGZ1bmNfZGF0YSwgR3RrQXJnICogYXJncyk7CgoKCiAg
dm9pZCBndGtfbWFyc2hhbF9OT05FX19QT0lOVEVSIChHdGtPYmplY3QgKiBvYmplY3QsCgkJCQkg
IEd0a1NpZ25hbEZ1bmMgZnVuYywKCQkJCSAgZ3BvaW50ZXIgZnVuY19kYXRhLCBHdGtBcmcgKiBh
cmdzKTsKCiAgdm9pZCBndGtfbWFyc2hhbF9OT05FX19DX0NBTExCQUNLIChHdGtPYmplY3QgKiBv
YmplY3QsCgkJCQkgICAgIEd0a1NpZ25hbEZ1bmMgZnVuYywKCQkJCSAgICAgZ3BvaW50ZXIgZnVu
Y19kYXRhLCBHdGtBcmcgKiBhcmdzKTsKCiAgdm9pZCBndGtfbWFyc2hhbF9OT05FX19DX0NBTExC
QUNLX0NfQ0FMTEJBQ0sgKEd0a09iamVjdCAqIG9iamVjdCwKCQkJCQkJR3RrU2lnbmFsRnVuYyBm
dW5jLAoJCQkJCQlncG9pbnRlciBmdW5jX2RhdGEsCgkJCQkJCUd0a0FyZyAqIGFyZ3MpOwoKCgog
IHZvaWQgZ3RrX21hcnNoYWxfTk9ORV9fSU5UIChHdGtPYmplY3QgKiBvYmplY3QsCgkJCSAgICAg
IEd0a1NpZ25hbEZ1bmMgZnVuYywKCQkJICAgICAgZ3BvaW50ZXIgZnVuY19kYXRhLCBHdGtBcmcg
KiBhcmdzKTsKCgoKICB2b2lkIGd0a19tYXJzaGFsX05PTkVfX0lOVF9GTE9BVCAoR3RrT2JqZWN0
ICogb2JqZWN0LAoJCQkJICAgIEd0a1NpZ25hbEZ1bmMgZnVuYywKCQkJCSAgICBncG9pbnRlciBm
dW5jX2RhdGEsIEd0a0FyZyAqIGFyZ3MpOwoKCgogIHZvaWQgZ3RrX21hcnNoYWxfTk9ORV9fSU5U
X0ZMT0FUX0JPT0wgKEd0a09iamVjdCAqIG9iamVjdCwKCQkJCQkgR3RrU2lnbmFsRnVuYyBmdW5j
LAoJCQkJCSBncG9pbnRlciBmdW5jX2RhdGEsIEd0a0FyZyAqIGFyZ3MpOwoKICB2b2lkIGd0a19t
YXJzaGFsX05PTkVfX0lOVF9JTlQgKEd0a09iamVjdCAqIG9iamVjdCwKCQkJCSAgR3RrU2lnbmFs
RnVuYyBmdW5jLAoJCQkJICBncG9pbnRlciBmdW5jX2RhdGEsIEd0a0FyZyAqIGFyZ3MpOwoKICB2
b2lkIGd0a19tYXJzaGFsX05PTkVfX0lOVF9JTlRfUE9JTlRFUiAoR3RrT2JqZWN0ICogb2JqZWN0
LAoJCQkJCSAgR3RrU2lnbmFsRnVuYyBmdW5jLAoJCQkJCSAgZ3BvaW50ZXIgZnVuY19kYXRhLCBH
dGtBcmcgKiBhcmdzKTsKCiAgdm9pZCBndGtfbWFyc2hhbF9OT05FX19OT05FIChHdGtPYmplY3Qg
KiBvYmplY3QsCgkJCSAgICAgICBHdGtTaWduYWxGdW5jIGZ1bmMsCgkJCSAgICAgICBncG9pbnRl
ciBmdW5jX2RhdGEsIEd0a0FyZyAqIGFyZ3MpOwoKCgogIHZvaWQgZ3RrX21hcnNoYWxfTk9ORV9f
UE9JTlRFUl9JTlQgKEd0a09iamVjdCAqIG9iamVjdCwKCQkJCSAgICAgIEd0a1NpZ25hbEZ1bmMg
ZnVuYywKCQkJCSAgICAgIGdwb2ludGVyIGZ1bmNfZGF0YSwgR3RrQXJnICogYXJncyk7CgogIHZv
aWQgZ3RrX21hcnNoYWxfTk9ORV9fUE9JTlRFUl9QT0lOVEVSIChHdGtPYmplY3QgKiBvYmplY3Qs
CgkJCQkJICBHdGtTaWduYWxGdW5jIGZ1bmMsCgkJCQkJICBncG9pbnRlciBmdW5jX2RhdGEsIEd0
a0FyZyAqIGFyZ3MpOwoKICB2b2lkIGd0a19tYXJzaGFsX05PTkVfX1BPSU5URVJfUE9JTlRFUl9Q
T0lOVEVSIChHdGtPYmplY3QgKiBvYmplY3QsCgkJCQkJCSAgR3RrU2lnbmFsRnVuYyBmdW5jLAoJ
CQkJCQkgIGdwb2ludGVyIGZ1bmNfZGF0YSwKCQkJCQkJICBHdGtBcmcgKiBhcmdzKTsKCgoKCgoK
CiAgdm9pZCBndGtfbWFyc2hhbF9OT05FX19QT0lOVEVSX0lOVF9JTlQgKEd0a09iamVjdCAqIG9i
amVjdCwKCQkJCQkgIEd0a1NpZ25hbEZ1bmMgZnVuYywKCQkJCQkgIGdwb2ludGVyIGZ1bmNfZGF0
YSwgR3RrQXJnICogYXJncyk7CgoKCiAgdm9pZCBndGtfbWFyc2hhbF9OT05FX19QT0lOVEVSX1BP
SU5URVJfSU5UX0lOVCAoR3RrT2JqZWN0ICogb2JqZWN0LAoJCQkJCQkgIEd0a1NpZ25hbEZ1bmMg
ZnVuYywKCQkJCQkJICBncG9pbnRlciBmdW5jX2RhdGEsCgkJCQkJCSAgR3RrQXJnICogYXJncyk7
CgoKCiAgdm9pZCBndGtfbWFyc2hhbF9OT05FX19QT0lOVEVSX0lOVF9JTlRfUE9JTlRFUl9JTlRf
SU5UIChHdGtPYmplY3QgKiBvYmplY3QsCgkJCQkJCQkgIEd0a1NpZ25hbEZ1bmMgZnVuYywKCQkJ
CQkJCSAgZ3BvaW50ZXIgZnVuY19kYXRhLAoJCQkJCQkJICBHdGtBcmcgKiBhcmdzKTsKCgoKCgoK
CiAgdm9pZCBndGtfbWFyc2hhbF9OT05FX19QT0lOVEVSX0lOVF9QT0lOVEVSIChHdGtPYmplY3Qg
KiBvYmplY3QsCgkJCQkJICAgICAgR3RrU2lnbmFsRnVuYyBmdW5jLAoJCQkJCSAgICAgIGdwb2lu
dGVyIGZ1bmNfZGF0YSwKCQkJCQkgICAgICBHdGtBcmcgKiBhcmdzKTsKCgoKCgogIHZvaWQgZ3Rr
X21hcnNoYWxfTk9ORV9fSU5UX1BPSU5URVJfSU5UX0lOVF9JTlRfUE9JTlRFUiAoR3RrT2JqZWN0
ICogb2JqZWN0LAoJCQkJCQkJICBHdGtTaWduYWxGdW5jIGZ1bmMsCgkJCQkJCQkgIGdwb2ludGVy
IGZ1bmNfZGF0YSwKCQkJCQkJCSAgR3RrQXJnICogYXJncyk7CgoKCiAgdm9pZCBndGtfbWFyc2hh
bF9OT05FX19JTlRfUE9JTlRFUl9JTlRfSU5UX0lOVCAoR3RrT2JqZWN0ICogb2JqZWN0LAoJCQkJ
CQkgIEd0a1NpZ25hbEZ1bmMgZnVuYywKCQkJCQkJICBncG9pbnRlciBmdW5jX2RhdGEsCgkJCQkJ
CSAgR3RrQXJnICogYXJncyk7CgoKCiAgdm9pZCBndGtfbWFyc2hhbF9OT05FX19JTlRfUE9JTlRF
UiAoR3RrT2JqZWN0ICogb2JqZWN0LAoJCQkJICAgICAgR3RrU2lnbmFsRnVuYyBmdW5jLAoJCQkJ
ICAgICAgZ3BvaW50ZXIgZnVuY19kYXRhLCBHdGtBcmcgKiBhcmdzKTsKCgoKfQoKCgojIDM0ICIv
b3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a3NpZ25hbC5oIiAyCgoKCmV4dGVybiAiQyIg
ewoKCiAgCgogIAogIAp0eXBlZGVmIHZvaWQgICAgKCpHdGtTaWduYWxNYXJzaGFsKSAoR3RrT2Jq
ZWN0CSAgICAqb2JqZWN0LAoJCQkJICAgICBncG9pbnRlcgkgICAgIGRhdGEsCgkJCQkgICAgIGd1
aW50CSAgICAgbnBhcmFtcywKCQkJCSAgICAgR3RrQXJnCSAgICAqYXJncywKCQkJCSAgICAgR3Rr
VHlwZQkgICAgKmFyZ190eXBlcywKCQkJCSAgICAgR3RrVHlwZQkgICAgIHJldHVybl90eXBlKTsK
dHlwZWRlZiB2b2lkICAgICgqR3RrU2lnbmFsRGVzdHJveSkgKGdwb2ludGVyCSAgICAgZGF0YSk7
CnR5cGVkZWYgZ2Jvb2xlYW4gKCpHdGtFbWlzc2lvbkhvb2spIChHdGtPYmplY3QJICAgICpvYmpl
Y3QsCgkJCQkgICAgIGd1aW50ICAgICAgICAgICBzaWduYWxfaWQsCgkJCQkgICAgIGd1aW50CSAg
ICAgbl9wYXJhbXMsCgkJCQkgICAgIEd0a0FyZwkgICAgKnBhcmFtcywKCQkJCSAgICAgZ3BvaW50
ZXIgICAgICAgIGRhdGEpOwoKdHlwZWRlZiBzdHJ1Y3QgX0d0a1NpZ25hbFF1ZXJ5CQlHdGtTaWdu
YWxRdWVyeTsKCnN0cnVjdAlfR3RrU2lnbmFsUXVlcnkKewogIEd0a1R5cGUJICAgb2JqZWN0X3R5
cGU7CiAgZ3VpbnQJCSAgIHNpZ25hbF9pZDsKICBjb25zdCBnY2hhcgkgICpzaWduYWxfbmFtZTsK
ICBndWludAkJICAgaXNfdXNlcl9zaWduYWwgOiAxOwogIEd0a1NpZ25hbFJ1blR5cGUgc2lnbmFs
X2ZsYWdzOwogIEd0a1R5cGUJICAgcmV0dXJuX3ZhbDsKICBndWludAkJICAgbnBhcmFtczsKICBj
b25zdCBHdGtUeXBlCSAgKnBhcmFtczsKfTsKCgogCmd1aW50ICBndGtfc2lnbmFsX2xvb2t1cAkJ
ICAoY29uc3QgZ2NoYXIJICAgICAgICpuYW1lLAoJCQkJCSAgIEd0a1R5cGUJCW9iamVjdF90eXBl
KTsKZ2NoYXIqIGd0a19zaWduYWxfbmFtZQkJCSAgKGd1aW50CQlzaWduYWxfaWQpOwpndWludCAg
Z3RrX3NpZ25hbF9uX2VtaXNzaW9ucwkJICAoR3RrT2JqZWN0ICAgCSAgICAgICAqb2JqZWN0LAoJ
CQkJCSAgIGd1aW50ICAgICAgICAgICAgICAgIHNpZ25hbF9pZCk7Cmd1aW50ICBndGtfc2lnbmFs
X25fZW1pc3Npb25zX2J5X25hbWUJICAoR3RrT2JqZWN0ICAgCSAgICAgICAqb2JqZWN0LAoJCQkJ
CSAgIGNvbnN0IGdjaGFyICAgICAgICAgKm5hbWUpOwp2b2lkICAgZ3RrX3NpZ25hbF9lbWl0X3N0
b3AJCSAgKEd0a09iamVjdAkgICAgICAgKm9iamVjdCwKCQkJCQkgICBndWludAkJc2lnbmFsX2lk
KTsKdm9pZCAgIGd0a19zaWduYWxfZW1pdF9zdG9wX2J5X25hbWUJICAoR3RrT2JqZWN0CSAgICAg
ICAqb2JqZWN0LAoJCQkJCSAgIGNvbnN0IGdjaGFyCSAgICAgICAqbmFtZSk7Cmd1aW50ICBndGtf
c2lnbmFsX2Nvbm5lY3QJCSAgKEd0a09iamVjdAkgICAgICAgKm9iamVjdCwKCQkJCQkgICBjb25z
dCBnY2hhcgkgICAgICAgKm5hbWUsCgkJCQkJICAgR3RrU2lnbmFsRnVuYwlmdW5jLAoJCQkJCSAg
IGdwb2ludGVyCQlmdW5jX2RhdGEpOwpndWludCAgZ3RrX3NpZ25hbF9jb25uZWN0X2FmdGVyCQkg
IChHdGtPYmplY3QJICAgICAgICpvYmplY3QsCgkJCQkJICAgY29uc3QgZ2NoYXIJICAgICAgICpu
YW1lLAoJCQkJCSAgIEd0a1NpZ25hbEZ1bmMJZnVuYywKCQkJCQkgICBncG9pbnRlcgkJZnVuY19k
YXRhKTsKZ3VpbnQgIGd0a19zaWduYWxfY29ubmVjdF9vYmplY3QJICAoR3RrT2JqZWN0CSAgICAg
ICAqb2JqZWN0LAoJCQkJCSAgIGNvbnN0IGdjaGFyCSAgICAgICAqbmFtZSwKCQkJCQkgICBHdGtT
aWduYWxGdW5jCWZ1bmMsCgkJCQkJICAgR3RrT2JqZWN0CSAgICAgICAqc2xvdF9vYmplY3QpOwpn
dWludCAgZ3RrX3NpZ25hbF9jb25uZWN0X29iamVjdF9hZnRlcgkgIChHdGtPYmplY3QJICAgICAg
ICpvYmplY3QsCgkJCQkJICAgY29uc3QgZ2NoYXIJICAgICAgICpuYW1lLAoJCQkJCSAgIEd0a1Np
Z25hbEZ1bmMJZnVuYywKCQkJCQkgICBHdGtPYmplY3QJICAgICAgICpzbG90X29iamVjdCk7Cmd1
aW50ICBndGtfc2lnbmFsX2Nvbm5lY3RfZnVsbAkJICAoR3RrT2JqZWN0CSAgICAgICAqb2JqZWN0
LAoJCQkJCSAgIGNvbnN0IGdjaGFyCSAgICAgICAqbmFtZSwKCQkJCQkgICBHdGtTaWduYWxGdW5j
CWZ1bmMsCgkJCQkJICAgR3RrQ2FsbGJhY2tNYXJzaGFsCW1hcnNoYWwsCgkJCQkJICAgZ3BvaW50
ZXIJCWRhdGEsCgkJCQkJICAgR3RrRGVzdHJveU5vdGlmeQlkZXN0cm95X2Z1bmMsCgkJCQkJICAg
Z2ludAkJCW9iamVjdF9zaWduYWwsCgkJCQkJICAgZ2ludAkJCWFmdGVyKTsKCnZvaWQgICBndGtf
c2lnbmFsX2Nvbm5lY3Rfb2JqZWN0X3doaWxlX2FsaXZlIChHdGtPYmplY3QJICAgICAgICpvYmpl
Y3QsCgkJCQkJICAgICAgY29uc3QgZ2NoYXIgICAgICAqc2lnbmFsLAoJCQkJCSAgICAgIEd0a1Np
Z25hbEZ1bmMJZnVuYywKCQkJCQkgICAgICBHdGtPYmplY3QJICAgICAgICphbGl2ZV9vYmplY3Qp
Owp2b2lkICAgZ3RrX3NpZ25hbF9jb25uZWN0X3doaWxlX2FsaXZlCSAgICAgKEd0a09iamVjdAkg
ICAgICAgKm9iamVjdCwKCQkJCQkgICAgICBjb25zdCBnY2hhciAgICAgICpzaWduYWwsCgkJCQkJ
ICAgICAgR3RrU2lnbmFsRnVuYwlmdW5jLAoJCQkJCSAgICAgIGdwb2ludGVyCQlmdW5jX2RhdGEs
CgkJCQkJICAgICAgR3RrT2JqZWN0CSAgICAgICAqYWxpdmVfb2JqZWN0KTsKCnZvaWQgICBndGtf
c2lnbmFsX2Rpc2Nvbm5lY3QJCSAgKEd0a09iamVjdAkgICAgICAgKm9iamVjdCwKCQkJCQkgICBn
dWludAkJaGFuZGxlcl9pZCk7CnZvaWQgICBndGtfc2lnbmFsX2Rpc2Nvbm5lY3RfYnlfZnVuYwkg
IChHdGtPYmplY3QJICAgICAgICpvYmplY3QsCgkJCQkJICAgR3RrU2lnbmFsRnVuYwlmdW5jLAoJ
CQkJCSAgIGdwb2ludGVyCQlkYXRhKTsKdm9pZCAgIGd0a19zaWduYWxfZGlzY29ubmVjdF9ieV9k
YXRhCSAgKEd0a09iamVjdAkgICAgICAgKm9iamVjdCwKCQkJCQkgICBncG9pbnRlcgkJZGF0YSk7
CnZvaWQgICBndGtfc2lnbmFsX2hhbmRsZXJfYmxvY2sJCSAgKEd0a09iamVjdAkgICAgICAgKm9i
amVjdCwKCQkJCQkgICBndWludAkJaGFuZGxlcl9pZCk7CnZvaWQgICBndGtfc2lnbmFsX2hhbmRs
ZXJfYmxvY2tfYnlfZnVuYwkgIChHdGtPYmplY3QJICAgICAgICpvYmplY3QsCgkJCQkJICAgR3Rr
U2lnbmFsRnVuYwlmdW5jLAoJCQkJCSAgIGdwb2ludGVyCQlkYXRhKTsKdm9pZCAgIGd0a19zaWdu
YWxfaGFuZGxlcl9ibG9ja19ieV9kYXRhCSAgKEd0a09iamVjdAkgICAgICAgKm9iamVjdCwKCQkJ
CQkgICBncG9pbnRlcgkJZGF0YSk7CnZvaWQgICBndGtfc2lnbmFsX2hhbmRsZXJfdW5ibG9jawkg
IChHdGtPYmplY3QJICAgICAgICpvYmplY3QsCgkJCQkJICAgZ3VpbnQJCWhhbmRsZXJfaWQpOwp2
b2lkICAgZ3RrX3NpZ25hbF9oYW5kbGVyX3VuYmxvY2tfYnlfZnVuYyAoR3RrT2JqZWN0CSAgICAg
ICAqb2JqZWN0LAoJCQkJCSAgIEd0a1NpZ25hbEZ1bmMJZnVuYywKCQkJCQkgICBncG9pbnRlcgkJ
ZGF0YSk7CnZvaWQgICBndGtfc2lnbmFsX2hhbmRsZXJfdW5ibG9ja19ieV9kYXRhIChHdGtPYmpl
Y3QJICAgICAgICpvYmplY3QsCgkJCQkJICAgZ3BvaW50ZXIJCWRhdGEpOwpndWludCAgZ3RrX3Np
Z25hbF9oYW5kbGVyX3BlbmRpbmcJICAoR3RrT2JqZWN0CSAgICAgICAqb2JqZWN0LAoJCQkJCSAg
IGd1aW50CQlzaWduYWxfaWQsCgkJCQkJICAgZ2Jvb2xlYW4JCW1heV9iZV9ibG9ja2VkKTsKZ3Vp
bnQgIGd0a19zaWduYWxfaGFuZGxlcl9wZW5kaW5nX2J5X2Z1bmMgKEd0a09iamVjdAkgICAgICAg
Km9iamVjdCwKCQkJCQkgICBndWludAkJc2lnbmFsX2lkLAoJCQkJCSAgIGdib29sZWFuCQltYXlf
YmVfYmxvY2tlZCwKCQkJCQkgICBHdGtTaWduYWxGdW5jCWZ1bmMsCgkJCQkJICAgZ3BvaW50ZXIJ
CWRhdGEpOwpnaW50ICAgZ3RrX3NpZ25hbF9oYW5kbGVyX3BlbmRpbmdfYnlfaWQgICAoR3RrT2Jq
ZWN0CSAgICAgICAqb2JqZWN0LAoJCQkJCSAgIGd1aW50CQloYW5kbGVyX2lkLAoJCQkJCSAgIGdi
b29sZWFuCQltYXlfYmVfYmxvY2tlZCk7Cmd1aW50ICBndGtfc2lnbmFsX2FkZF9lbWlzc2lvbl9o
b29rCSAgKGd1aW50CQlzaWduYWxfaWQsCgkJCQkJICAgR3RrRW1pc3Npb25Ib29rCWhvb2tfZnVu
YywKCQkJCQkgICBncG9pbnRlciAgICAgICAJZGF0YSk7Cmd1aW50ICBndGtfc2lnbmFsX2FkZF9l
bWlzc2lvbl9ob29rX2Z1bGwgIChndWludAkJc2lnbmFsX2lkLAoJCQkJCSAgIEd0a0VtaXNzaW9u
SG9vawlob29rX2Z1bmMsCgkJCQkJICAgZ3BvaW50ZXIgICAgICAgCWRhdGEsCgkJCQkJICAgR0Rl
c3Ryb3lOb3RpZnkJZGVzdHJveSk7CnZvaWQgICBndGtfc2lnbmFsX3JlbW92ZV9lbWlzc2lvbl9o
b29rCSAgKGd1aW50CQlzaWduYWxfaWQsCgkJCQkJICAgZ3VpbnQJCWhvb2tfaWQpOwoKIAoKCgpH
dGtTaWduYWxRdWVyeSogZ3RrX3NpZ25hbF9xdWVyeQkgIChndWludAkJc2lnbmFsX2lkKTsKCgog
CnZvaWQgICBndGtfc2lnbmFsX2luaXQJCQkgICh2b2lkKTsKZ3VpbnQgIGd0a19zaWduYWxfbmV3
CQkJICAoY29uc3QgZ2NoYXIJICAgICAgICpuYW1lLAoJCQkJCSAgIEd0a1NpZ25hbFJ1blR5cGUJ
c2lnbmFsX2ZsYWdzLAoJCQkJCSAgIEd0a1R5cGUJCW9iamVjdF90eXBlLAoJCQkJCSAgIGd1aW50
CQlmdW5jdGlvbl9vZmZzZXQsCgkJCQkJICAgR3RrU2lnbmFsTWFyc2hhbGxlcgltYXJzaGFsbGVy
LAoJCQkJCSAgIEd0a1R5cGUJCXJldHVybl92YWwsCgkJCQkJICAgZ3VpbnQJCW5wYXJhbXMsCgkJ
CQkJICAgLi4uKTsKZ3VpbnQgIGd0a19zaWduYWxfbmV3dgkJCSAgKGNvbnN0IGdjaGFyCSAgICAg
ICAqbmFtZSwKCQkJCQkgICBHdGtTaWduYWxSdW5UeXBlCXNpZ25hbF9mbGFncywKCQkJCQkgICBH
dGtUeXBlCQlvYmplY3RfdHlwZSwKCQkJCQkgICBndWludAkJZnVuY3Rpb25fb2Zmc2V0LAoJCQkJ
CSAgIEd0a1NpZ25hbE1hcnNoYWxsZXIJbWFyc2hhbGxlciwKCQkJCQkgICBHdGtUeXBlCQlyZXR1
cm5fdmFsLAoJCQkJCSAgIGd1aW50CQlucGFyYW1zLAoJCQkJCSAgIEd0a1R5cGUJICAgICAgICpw
YXJhbXMpOwp2b2lkICAgZ3RrX3NpZ25hbF9lbWl0CQkJICAoR3RrT2JqZWN0CSAgICAgICAqb2Jq
ZWN0LAoJCQkJCSAgIGd1aW50CQlzaWduYWxfaWQsCgkJCQkJICAgLi4uKTsKdm9pZCAgIGd0a19z
aWduYWxfZW1pdF9ieV9uYW1lCQkgIChHdGtPYmplY3QJICAgICAgICpvYmplY3QsCgkJCQkJICAg
Y29uc3QgZ2NoYXIJICAgICAgICpuYW1lLAoJCQkJCSAgIC4uLik7CnZvaWQgICBndGtfc2lnbmFs
X2VtaXR2CQkJICAoR3RrT2JqZWN0ICAgICAgICAgICAqb2JqZWN0LAoJCQkJCSAgIGd1aW50ICAg
ICAgICAgICAgICAgIHNpZ25hbF9pZCwKCQkJCQkgICBHdGtBcmcgICAgICAgICAgICAgICpwYXJh
bXMpOwp2b2lkICAgZ3RrX3NpZ25hbF9lbWl0dl9ieV9uYW1lCQkgIChHdGtPYmplY3QgICAgICAg
ICAgICpvYmplY3QsCgkJCQkJICAgY29uc3QgZ2NoYXIJICAgICAgICpuYW1lLAoJCQkJCSAgIEd0
a0FyZyAgICAgICAgICAgICAgKnBhcmFtcyk7CiAKdm9pZCAgIGd0a19zaWduYWxfaGFuZGxlcnNf
ZGVzdHJveQkgIChHdGtPYmplY3QJICAgICAgICpvYmplY3QpOwp2b2lkICAgZ3RrX3NpZ25hbF9z
ZXRfZnVuY3MJCSAgKEd0a1NpZ25hbE1hcnNoYWwJbWFyc2hhbF9mdW5jLAoJCQkJCSAgIEd0a1Np
Z25hbERlc3Ryb3kJZGVzdHJveV9mdW5jKTsKICAgICAgIAoKCgp9CgoKCgojIDExICIvb3B0L2d0
ay9pbmNsdWRlL2d0ay0tL3Byb3h5LmgiIDIKCgpuYW1lc3BhY2UgR3RrCnsKCnVzaW5nIFNpZ0M6
OkNvbm5lY3Rpb247CnVzaW5nIFNpZ0M6Om1hbmFnZTsKCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKIAoKIApjbGFzcyBPYmplY3Q7CgpzdHJ1Y3QgUHJveHlOb2RlIDogcHVibGljIFNp
Z0M6OlNsb3ROb2RlCiAgewogICBzdGF0aWMgdm9pZCBjb25uZWN0KE9iamVjdCosCiAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciosCiAgICAgICAgICAgICAgICAgICAgICAgR3RrU2ln
bmFsRnVuYywKICAgICAgICAgICAgICAgICAgICAgICBTaWdDOjpTbG90RGF0YSosCiAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCk7CiAgIHN0YXRpYyB2b2lkIG5vdGlmeShncG9pbnRlcik7Cgog
ICBHdGtPYmplY3QgKm9ial87CiAgIFNpZ0M6OlNsb3REYXRhKiBzbG90XzsKICAgdm9pZCogY2Fs
bGJhY2tfOwogICBpbnQgY29ubmlkXzsKCiAgIFByb3h5Tm9kZSgpIHt9CiAgIHZpcnR1YWwgflBy
b3h5Tm9kZSgpOwogIH07CgoKCiAKCgoKdGVtcGxhdGUgPGNsYXNzIFIsCiAgICAgICAgICBjbGFz
cyBPYmosY2xhc3MgZ09iaixpbnQgaW5kZXg+CmNsYXNzIFByb3h5U2lnbmFsMAogIHsKICAgIHB1
YmxpYzoKICAgICAgdHlwZWRlZiBTaWdDOjpDYWxsYmFjazA8Uj4gQ2FsbGJhY2s7CiAgICAgIHR5
cGVkZWYgU2lnQzo6U2xvdDA8Uj4gU2xvdFR5cGU7CgoKICAgIHByb3RlY3RlZDoKICAgICAgT2Jq
ICpvYmo7CgoKCgoKCiAgICAgIHR5cGVkZWYgUiBSVHlwZTsKCgoKCiAgICAgIHN0YXRpYyBSVHlw
ZSBndGtfY2FsbGJhY2soR3RrT2JqZWN0Kix2b2lkICpkKQogICAgICAgIHsKICAgICAgICAgIFBy
b3h5Tm9kZSAqbm9kZT0oUHJveHlOb2RlKilkOwogICAgICAgICAgQ2FsbGJhY2sqIGRhdGE9KENh
bGxiYWNrKikobm9kZS0+Y2FsbGJhY2tfKTsKICAgICAgICAgIHJldHVybiBkYXRhLT5jYWxsKCk7
CiAgICAgICAgfQoKICAgIHB1YmxpYzoKCiAgICAgIENvbm5lY3Rpb24gY29ubmVjdChjb25zdCBT
bG90VHlwZSAmcykKICAgICAgICB7CiAgICAgICAgIFNpZ0M6OlNsb3REYXRhKiBkPXMuZGF0YSgp
OwogICAgICAgICBQcm94eU5vZGU6OmNvbm5lY3Qob2JqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb2JqLT5zaWduYWxfbmFtZXNbaW5kZXhdLAoJCQkgICAgKEd0a1NpZ25hbEZ1bmMpZ3Rr
X2NhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZCwKCQkJICAgIGZhbHNlKTsK
ICAgICAgICAgcmV0dXJuIGQ7CiAgICAgICAgfQoKICAgICAgQ29ubmVjdGlvbiBjb25uZWN0X2Fm
dGVyKGNvbnN0IFNsb3RUeXBlICZzKQogICAgICAgIHsKICAgICAgICAgU2lnQzo6U2xvdERhdGEq
IGQ9cy5kYXRhKCk7CiAgICAgICAgIFByb3h5Tm9kZTo6Y29ubmVjdChvYmosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvYmotPnNpZ25hbF9uYW1lc1tpbmRleF0sCgkJCSAgICAoR3RrU2ln
bmFsRnVuYylndGtfY2FsbGJhY2ssCgkJCSAgICBkLAoJCQkgICAgdHJ1ZSk7CiAgICAgICAgIHJl
dHVybiBkOwogICAgICAgIH0KCiAgfTsKCnRlbXBsYXRlIDxjbGFzcyBSLAogICAgICAgICAgY2xh
c3MgT2JqLGNsYXNzIGdPYmosaW50IGluZGV4LAogICAgICAgICAgUiAoKmVtaXRfZnVuYykoZ09i
aiopPgpjbGFzcyBFbWl0UHJveHlTaWduYWwwCiAgOiBwdWJsaWMgUHJveHlTaWduYWwwIAogICAg
PFIsT2JqLGdPYmosaW5kZXg+CiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIEVtaXRQcm94
eVNpZ25hbDA8UixPYmosZ09iaixpbmRleCxlbWl0X2Z1bmM+IFNlbGY7CiAgICAgIHR5cGVkZWYg
U2lnQzo6U2xvdDA8Uj4gU2xvdFR5cGU7CiAgICAgIHR5cGVkZWYgU2lnQzo6Q2FsbERhdGFPYmoy
PHR5cGVuYW1lIFNsb3RUeXBlOjpGdW5jLFNlbGY+IERhdGE7CgogICAgcHJpdmF0ZToKCgogICAg
ICB0eXBlZGVmIFIgUlR5cGU7CgoKCgogICAgICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCog
ZCkKICAgICAgICB7CiAgICAgICAgICBEYXRhKiBkYXRhPShEYXRhKilkOwogICAgICAgICAgcmV0
dXJuIGRhdGEtPm9iai0+ZW1pdCgpOwogICAgICAgIH0KCiAgICBwdWJsaWM6CiAgICAgIFNsb3RU
eXBlIHNsb3QoKQogICAgICAgIHsKICAgICAgICAgIFNpZ0M6OlNsb3REYXRhKiB0bXA9bWFuYWdl
KG5ldyBTaWdDOjpTbG90RGF0YSgpKTsKICAgICAgICAgIERhdGEmIGRhdGE9cmVpbnRlcnByZXRf
Y2FzdDxEYXRhJj4odG1wLT5kYXRhXyk7CiAgICAgICAgICBkYXRhLmNhbGxiYWNrPSZjYWxsYmFj
azsKICAgICAgICAgIGRhdGEub2JqPXRoaXM7CiAgICAgICAgICBTaWdDOjpTY29wZU5vZGUqIG5v
ZGU9dG1wLT5yZWNlaXZlcigpOwogICAgICAgICAgb2JqLT5yZWdpc3Rlcl9kYXRhKG5vZGUpOwog
ICAgICAgICAgcmV0dXJuIHRtcDsKICAgICAgICB9CgogICAgICBSVHlwZSBlbWl0KCkKICAgICAg
ICB7CiAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSVHlwZSAoKikoZ09iaiopPgog
ICAgICAgICAgICAoZW1pdF9mdW5jKSAob2JqLT5ndGtvYmooKSk7CiAgICAgICAgfQoKICAgICAg
UlR5cGUgb3BlcmF0b3IoKSgpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8UlR5cGUgKCopKGdPYmoqKT4KICAgICAgICAgICAgKGVtaXRfZnVuYykgKG9iai0+Z3Rr
b2JqKCkpOwogICAgICAgIH0KCiAgfTsKCgogCgoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAx
LAogICAgICAgICAgY2xhc3MgT2JqLGNsYXNzIGdPYmosaW50IGluZGV4PgpjbGFzcyBQcm94eVNp
Z25hbDEKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgU2lnQzo6Q2FsbGJhY2sxPFIsUDE+
IENhbGxiYWNrOwogICAgICB0eXBlZGVmIFNpZ0M6OlNsb3QxPFIsUDE+IFNsb3RUeXBlOwoKCiAg
ICBwcm90ZWN0ZWQ6CiAgICAgIE9iaiAqb2JqOwoKCgoKCgogICAgICB0eXBlZGVmIFIgUlR5cGU7
CgoKCgogICAgICBzdGF0aWMgUlR5cGUgZ3RrX2NhbGxiYWNrKEd0a09iamVjdCosUDEgcDEsdm9p
ZCAqZCkKICAgICAgICB7CiAgICAgICAgICBQcm94eU5vZGUgKm5vZGU9KFByb3h5Tm9kZSopZDsK
ICAgICAgICAgIENhbGxiYWNrKiBkYXRhPShDYWxsYmFjayopKG5vZGUtPmNhbGxiYWNrXyk7CiAg
ICAgICAgICByZXR1cm4gZGF0YS0+Y2FsbChwMSk7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKCiAg
ICAgIENvbm5lY3Rpb24gY29ubmVjdChjb25zdCBTbG90VHlwZSAmcykKICAgICAgICB7CiAgICAg
ICAgIFNpZ0M6OlNsb3REYXRhKiBkPXMuZGF0YSgpOwogICAgICAgICBQcm94eU5vZGU6OmNvbm5l
Y3Qob2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLT5zaWduYWxfbmFtZXNbaW5k
ZXhdLAoJCQkgICAgKEd0a1NpZ25hbEZ1bmMpZ3RrX2NhbGxiYWNrLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZCwKCQkJICAgIGZhbHNlKTsKICAgICAgICAgcmV0dXJuIGQ7CiAgICAgICAg
fQoKICAgICAgQ29ubmVjdGlvbiBjb25uZWN0X2FmdGVyKGNvbnN0IFNsb3RUeXBlICZzKQogICAg
ICAgIHsKICAgICAgICAgU2lnQzo6U2xvdERhdGEqIGQ9cy5kYXRhKCk7CiAgICAgICAgIFByb3h5
Tm9kZTo6Y29ubmVjdChvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmotPnNpZ25h
bF9uYW1lc1tpbmRleF0sCgkJCSAgICAoR3RrU2lnbmFsRnVuYylndGtfY2FsbGJhY2ssCgkJCSAg
ICBkLAoJCQkgICAgdHJ1ZSk7CiAgICAgICAgIHJldHVybiBkOwogICAgICAgIH0KCiAgfTsKCnRl
bXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLAogICAgICAgICAgY2xhc3MgT2JqLGNsYXNzIGdPYmos
aW50IGluZGV4LAogICAgICAgICAgUiAoKmVtaXRfZnVuYykoZ09iaiosUDEpPgpjbGFzcyBFbWl0
UHJveHlTaWduYWwxCiAgOiBwdWJsaWMgUHJveHlTaWduYWwxIAogICAgPFIsUDEsT2JqLGdPYmos
aW5kZXg+CiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIEVtaXRQcm94eVNpZ25hbDE8UixQ
MSxPYmosZ09iaixpbmRleCxlbWl0X2Z1bmM+IFNlbGY7CiAgICAgIHR5cGVkZWYgU2lnQzo6U2xv
dDE8UixQMT4gU2xvdFR5cGU7CiAgICAgIHR5cGVkZWYgU2lnQzo6Q2FsbERhdGFPYmoyPHR5cGVu
YW1lIFNsb3RUeXBlOjpGdW5jLFNlbGY+IERhdGE7CgogICAgcHJpdmF0ZToKCgogICAgICB0eXBl
ZGVmIFIgUlR5cGU7CgoKCgogICAgICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZCxQMSBw
MSkKICAgICAgICB7CiAgICAgICAgICBEYXRhKiBkYXRhPShEYXRhKilkOwogICAgICAgICAgcmV0
dXJuIGRhdGEtPm9iai0+ZW1pdChwMSk7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAgU2xv
dFR5cGUgc2xvdCgpCiAgICAgICAgewogICAgICAgICAgU2lnQzo6U2xvdERhdGEqIHRtcD1tYW5h
Z2UobmV3IFNpZ0M6OlNsb3REYXRhKCkpOwogICAgICAgICAgRGF0YSYgZGF0YT1yZWludGVycHJl
dF9jYXN0PERhdGEmPih0bXAtPmRhdGFfKTsKICAgICAgICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxi
YWNrOwogICAgICAgICAgZGF0YS5vYmo9dGhpczsKICAgICAgICAgIFNpZ0M6OlNjb3BlTm9kZSog
bm9kZT10bXAtPnJlY2VpdmVyKCk7CiAgICAgICAgICBvYmotPnJlZ2lzdGVyX2RhdGEobm9kZSk7
CiAgICAgICAgICByZXR1cm4gdG1wOwogICAgICAgIH0KCiAgICAgIFJUeXBlIGVtaXQoUDEgcDEp
CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UlR5cGUgKCopKGdP
YmoqLFAxKT4KICAgICAgICAgICAgKGVtaXRfZnVuYykgKG9iai0+Z3Rrb2JqKCkscDEpOwogICAg
ICAgIH0KCiAgICAgIFJUeXBlIG9wZXJhdG9yKCkoUDEgcDEpCiAgICAgICAgewogICAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UlR5cGUgKCopKGdPYmoqLFAxKT4KICAgICAgICAgICAg
KGVtaXRfZnVuYykgKG9iai0+Z3Rrb2JqKCkscDEpOwogICAgICAgIH0KCiAgfTsKCgogCgoKCnRl
bXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLAogICAgICAgICAgY2xhc3MgT2JqLGNs
YXNzIGdPYmosaW50IGluZGV4PgpjbGFzcyBQcm94eVNpZ25hbDIKICB7CiAgICBwdWJsaWM6CiAg
ICAgIHR5cGVkZWYgU2lnQzo6Q2FsbGJhY2syPFIsUDEsUDI+IENhbGxiYWNrOwogICAgICB0eXBl
ZGVmIFNpZ0M6OlNsb3QyPFIsUDEsUDI+IFNsb3RUeXBlOwoKCiAgICBwcm90ZWN0ZWQ6CiAgICAg
IE9iaiAqb2JqOwoKCgoKCgogICAgICB0eXBlZGVmIFIgUlR5cGU7CgoKCgogICAgICBzdGF0aWMg
UlR5cGUgZ3RrX2NhbGxiYWNrKEd0a09iamVjdCosUDEgcDEsUDIgcDIsdm9pZCAqZCkKICAgICAg
ICB7CiAgICAgICAgICBQcm94eU5vZGUgKm5vZGU9KFByb3h5Tm9kZSopZDsKICAgICAgICAgIENh
bGxiYWNrKiBkYXRhPShDYWxsYmFjayopKG5vZGUtPmNhbGxiYWNrXyk7CiAgICAgICAgICByZXR1
cm4gZGF0YS0+Y2FsbChwMSxwMik7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKCiAgICAgIENvbm5l
Y3Rpb24gY29ubmVjdChjb25zdCBTbG90VHlwZSAmcykKICAgICAgICB7CiAgICAgICAgIFNpZ0M6
OlNsb3REYXRhKiBkPXMuZGF0YSgpOwogICAgICAgICBQcm94eU5vZGU6OmNvbm5lY3Qob2JqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLT5zaWduYWxfbmFtZXNbaW5kZXhdLAoJCQkg
ICAgKEd0a1NpZ25hbEZ1bmMpZ3RrX2NhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZCwKCQkJICAgIGZhbHNlKTsKICAgICAgICAgcmV0dXJuIGQ7CiAgICAgICAgfQoKICAgICAg
Q29ubmVjdGlvbiBjb25uZWN0X2FmdGVyKGNvbnN0IFNsb3RUeXBlICZzKQogICAgICAgIHsKICAg
ICAgICAgU2lnQzo6U2xvdERhdGEqIGQ9cy5kYXRhKCk7CiAgICAgICAgIFByb3h5Tm9kZTo6Y29u
bmVjdChvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmotPnNpZ25hbF9uYW1lc1tp
bmRleF0sCgkJCSAgICAoR3RrU2lnbmFsRnVuYylndGtfY2FsbGJhY2ssCgkJCSAgICBkLAoJCQkg
ICAgdHJ1ZSk7CiAgICAgICAgIHJldHVybiBkOwogICAgICAgIH0KCiAgfTsKCnRlbXBsYXRlIDxj
bGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLAogICAgICAgICAgY2xhc3MgT2JqLGNsYXNzIGdPYmos
aW50IGluZGV4LAogICAgICAgICAgUiAoKmVtaXRfZnVuYykoZ09iaiosUDEsUDIpPgpjbGFzcyBF
bWl0UHJveHlTaWduYWwyCiAgOiBwdWJsaWMgUHJveHlTaWduYWwyIAogICAgPFIsUDEsUDIsT2Jq
LGdPYmosaW5kZXg+CiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIEVtaXRQcm94eVNpZ25h
bDI8UixQMSxQMixPYmosZ09iaixpbmRleCxlbWl0X2Z1bmM+IFNlbGY7CiAgICAgIHR5cGVkZWYg
U2lnQzo6U2xvdDI8UixQMSxQMj4gU2xvdFR5cGU7CiAgICAgIHR5cGVkZWYgU2lnQzo6Q2FsbERh
dGFPYmoyPHR5cGVuYW1lIFNsb3RUeXBlOjpGdW5jLFNlbGY+IERhdGE7CgogICAgcHJpdmF0ZToK
CgogICAgICB0eXBlZGVmIFIgUlR5cGU7CgoKCgogICAgICBzdGF0aWMgUlR5cGUgY2FsbGJhY2so
dm9pZCogZCxQMSBwMSxQMiBwMikKICAgICAgICB7CiAgICAgICAgICBEYXRhKiBkYXRhPShEYXRh
KilkOwogICAgICAgICAgcmV0dXJuIGRhdGEtPm9iai0+ZW1pdChwMSxwMik7CiAgICAgICAgfQoK
ICAgIHB1YmxpYzoKICAgICAgU2xvdFR5cGUgc2xvdCgpCiAgICAgICAgewogICAgICAgICAgU2ln
Qzo6U2xvdERhdGEqIHRtcD1tYW5hZ2UobmV3IFNpZ0M6OlNsb3REYXRhKCkpOwogICAgICAgICAg
RGF0YSYgZGF0YT1yZWludGVycHJldF9jYXN0PERhdGEmPih0bXAtPmRhdGFfKTsKICAgICAgICAg
IGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNrOwogICAgICAgICAgZGF0YS5vYmo9dGhpczsKICAgICAg
ICAgIFNpZ0M6OlNjb3BlTm9kZSogbm9kZT10bXAtPnJlY2VpdmVyKCk7CiAgICAgICAgICBvYmot
PnJlZ2lzdGVyX2RhdGEobm9kZSk7CiAgICAgICAgICByZXR1cm4gdG1wOwogICAgICAgIH0KCiAg
ICAgIFJUeXBlIGVtaXQoUDEgcDEsUDIgcDIpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8UlR5cGUgKCopKGdPYmoqLFAxLFAyKT4KICAgICAgICAgICAgKGVtaXRf
ZnVuYykgKG9iai0+Z3Rrb2JqKCkscDEscDIpOwogICAgICAgIH0KCiAgICAgIFJUeXBlIG9wZXJh
dG9yKCkoUDEgcDEsUDIgcDIpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8UlR5cGUgKCopKGdPYmoqLFAxLFAyKT4KICAgICAgICAgICAgKGVtaXRfZnVuYykgKG9i
ai0+Z3Rrb2JqKCkscDEscDIpOwogICAgICAgIH0KCiAgfTsKCgogCgoKCnRlbXBsYXRlIDxjbGFz
cyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLAogICAgICAgICAgY2xhc3MgT2JqLGNsYXNz
IGdPYmosaW50IGluZGV4PgpjbGFzcyBQcm94eVNpZ25hbDMKICB7CiAgICBwdWJsaWM6CiAgICAg
IHR5cGVkZWYgU2lnQzo6Q2FsbGJhY2szPFIsUDEsUDIsUDM+IENhbGxiYWNrOwogICAgICB0eXBl
ZGVmIFNpZ0M6OlNsb3QzPFIsUDEsUDIsUDM+IFNsb3RUeXBlOwoKCiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIE9iaiAqb2JqOwoKCgoKCgogICAgICB0eXBlZGVmIFIgUlR5cGU7CgoKCgogICAgICBzdGF0
aWMgUlR5cGUgZ3RrX2NhbGxiYWNrKEd0a09iamVjdCosUDEgcDEsUDIgcDIsUDMgcDMsdm9pZCAq
ZCkKICAgICAgICB7CiAgICAgICAgICBQcm94eU5vZGUgKm5vZGU9KFByb3h5Tm9kZSopZDsKICAg
ICAgICAgIENhbGxiYWNrKiBkYXRhPShDYWxsYmFjayopKG5vZGUtPmNhbGxiYWNrXyk7CiAgICAg
ICAgICByZXR1cm4gZGF0YS0+Y2FsbChwMSxwMixwMyk7CiAgICAgICAgfQoKICAgIHB1YmxpYzoK
CiAgICAgIENvbm5lY3Rpb24gY29ubmVjdChjb25zdCBTbG90VHlwZSAmcykKICAgICAgICB7CiAg
ICAgICAgIFNpZ0M6OlNsb3REYXRhKiBkPXMuZGF0YSgpOwogICAgICAgICBQcm94eU5vZGU6OmNv
bm5lY3Qob2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLT5zaWduYWxfbmFtZXNb
aW5kZXhdLAoJCQkgICAgKEd0a1NpZ25hbEZ1bmMpZ3RrX2NhbGxiYWNrLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZCwKCQkJICAgIGZhbHNlKTsKICAgICAgICAgcmV0dXJuIGQ7CiAgICAg
ICAgfQoKICAgICAgQ29ubmVjdGlvbiBjb25uZWN0X2FmdGVyKGNvbnN0IFNsb3RUeXBlICZzKQog
ICAgICAgIHsKICAgICAgICAgU2lnQzo6U2xvdERhdGEqIGQ9cy5kYXRhKCk7CiAgICAgICAgIFBy
b3h5Tm9kZTo6Y29ubmVjdChvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmotPnNp
Z25hbF9uYW1lc1tpbmRleF0sCgkJCSAgICAoR3RrU2lnbmFsRnVuYylndGtfY2FsbGJhY2ssCgkJ
CSAgICBkLAoJCQkgICAgdHJ1ZSk7CiAgICAgICAgIHJldHVybiBkOwogICAgICAgIH0KCiAgfTsK
CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLAogICAgICAgICAg
Y2xhc3MgT2JqLGNsYXNzIGdPYmosaW50IGluZGV4LAogICAgICAgICAgUiAoKmVtaXRfZnVuYyko
Z09iaiosUDEsUDIsUDMpPgpjbGFzcyBFbWl0UHJveHlTaWduYWwzCiAgOiBwdWJsaWMgUHJveHlT
aWduYWwzIAogICAgPFIsUDEsUDIsUDMsT2JqLGdPYmosaW5kZXg+CiAgewogICAgcHVibGljOgog
ICAgICB0eXBlZGVmIEVtaXRQcm94eVNpZ25hbDM8UixQMSxQMixQMyxPYmosZ09iaixpbmRleCxl
bWl0X2Z1bmM+IFNlbGY7CiAgICAgIHR5cGVkZWYgU2lnQzo6U2xvdDM8UixQMSxQMixQMz4gU2xv
dFR5cGU7CiAgICAgIHR5cGVkZWYgU2lnQzo6Q2FsbERhdGFPYmoyPHR5cGVuYW1lIFNsb3RUeXBl
OjpGdW5jLFNlbGY+IERhdGE7CgogICAgcHJpdmF0ZToKCgogICAgICB0eXBlZGVmIFIgUlR5cGU7
CgoKCgogICAgICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMixQMyBw
MykKICAgICAgICB7CiAgICAgICAgICBEYXRhKiBkYXRhPShEYXRhKilkOwogICAgICAgICAgcmV0
dXJuIGRhdGEtPm9iai0+ZW1pdChwMSxwMixwMyk7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKICAg
ICAgU2xvdFR5cGUgc2xvdCgpCiAgICAgICAgewogICAgICAgICAgU2lnQzo6U2xvdERhdGEqIHRt
cD1tYW5hZ2UobmV3IFNpZ0M6OlNsb3REYXRhKCkpOwogICAgICAgICAgRGF0YSYgZGF0YT1yZWlu
dGVycHJldF9jYXN0PERhdGEmPih0bXAtPmRhdGFfKTsKICAgICAgICAgIGRhdGEuY2FsbGJhY2s9
JmNhbGxiYWNrOwogICAgICAgICAgZGF0YS5vYmo9dGhpczsKICAgICAgICAgIFNpZ0M6OlNjb3Bl
Tm9kZSogbm9kZT10bXAtPnJlY2VpdmVyKCk7CiAgICAgICAgICBvYmotPnJlZ2lzdGVyX2RhdGEo
bm9kZSk7CiAgICAgICAgICByZXR1cm4gdG1wOwogICAgICAgIH0KCiAgICAgIFJUeXBlIGVtaXQo
UDEgcDEsUDIgcDIsUDMgcDMpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8UlR5cGUgKCopKGdPYmoqLFAxLFAyLFAzKT4KICAgICAgICAgICAgKGVtaXRfZnVuYykg
KG9iai0+Z3Rrb2JqKCkscDEscDIscDMpOwogICAgICAgIH0KCiAgICAgIFJUeXBlIG9wZXJhdG9y
KCkoUDEgcDEsUDIgcDIsUDMgcDMpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8UlR5cGUgKCopKGdPYmoqLFAxLFAyLFAzKT4KICAgICAgICAgICAgKGVtaXRfZnVu
YykgKG9iai0+Z3Rrb2JqKCkscDEscDIscDMpOwogICAgICAgIH0KCiAgfTsKCgogCgoKCnRlbXBs
YXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0LAogICAgICAg
ICAgY2xhc3MgT2JqLGNsYXNzIGdPYmosaW50IGluZGV4PgpjbGFzcyBQcm94eVNpZ25hbDQKICB7
CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgU2lnQzo6Q2FsbGJhY2s0PFIsUDEsUDIsUDMsUDQ+
IENhbGxiYWNrOwogICAgICB0eXBlZGVmIFNpZ0M6OlNsb3Q0PFIsUDEsUDIsUDMsUDQ+IFNsb3RU
eXBlOwoKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIE9iaiAqb2JqOwoKCgoKCgogICAgICB0eXBlZGVm
IFIgUlR5cGU7CgoKCgogICAgICBzdGF0aWMgUlR5cGUgZ3RrX2NhbGxiYWNrKEd0a09iamVjdCos
UDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQsdm9pZCAqZCkKICAgICAgICB7CiAgICAgICAgICBQcm94
eU5vZGUgKm5vZGU9KFByb3h5Tm9kZSopZDsKICAgICAgICAgIENhbGxiYWNrKiBkYXRhPShDYWxs
YmFjayopKG5vZGUtPmNhbGxiYWNrXyk7CiAgICAgICAgICByZXR1cm4gZGF0YS0+Y2FsbChwMSxw
MixwMyxwNCk7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKCiAgICAgIENvbm5lY3Rpb24gY29ubmVj
dChjb25zdCBTbG90VHlwZSAmcykKICAgICAgICB7CiAgICAgICAgIFNpZ0M6OlNsb3REYXRhKiBk
PXMuZGF0YSgpOwogICAgICAgICBQcm94eU5vZGU6OmNvbm5lY3Qob2JqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb2JqLT5zaWduYWxfbmFtZXNbaW5kZXhdLAoJCQkgICAgKEd0a1NpZ25h
bEZ1bmMpZ3RrX2NhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZCwKCQkJICAg
IGZhbHNlKTsKICAgICAgICAgcmV0dXJuIGQ7CiAgICAgICAgfQoKICAgICAgQ29ubmVjdGlvbiBj
b25uZWN0X2FmdGVyKGNvbnN0IFNsb3RUeXBlICZzKQogICAgICAgIHsKICAgICAgICAgU2lnQzo6
U2xvdERhdGEqIGQ9cy5kYXRhKCk7CiAgICAgICAgIFByb3h5Tm9kZTo6Y29ubmVjdChvYmosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvYmotPnNpZ25hbF9uYW1lc1tpbmRleF0sCgkJCSAg
ICAoR3RrU2lnbmFsRnVuYylndGtfY2FsbGJhY2ssCgkJCSAgICBkLAoJCQkgICAgdHJ1ZSk7CiAg
ICAgICAgIHJldHVybiBkOwogICAgICAgIH0KCiAgfTsKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNz
IFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0LAogICAgICAgICAgY2xhc3MgT2JqLGNsYXNz
IGdPYmosaW50IGluZGV4LAogICAgICAgICAgUiAoKmVtaXRfZnVuYykoZ09iaiosUDEsUDIsUDMs
UDQpPgpjbGFzcyBFbWl0UHJveHlTaWduYWw0CiAgOiBwdWJsaWMgUHJveHlTaWduYWw0IAogICAg
PFIsUDEsUDIsUDMsUDQsT2JqLGdPYmosaW5kZXg+CiAgewogICAgcHVibGljOgogICAgICB0eXBl
ZGVmIEVtaXRQcm94eVNpZ25hbDQ8UixQMSxQMixQMyxQNCxPYmosZ09iaixpbmRleCxlbWl0X2Z1
bmM+IFNlbGY7CiAgICAgIHR5cGVkZWYgU2lnQzo6U2xvdDQ8UixQMSxQMixQMyxQND4gU2xvdFR5
cGU7CiAgICAgIHR5cGVkZWYgU2lnQzo6Q2FsbERhdGFPYmoyPHR5cGVuYW1lIFNsb3RUeXBlOjpG
dW5jLFNlbGY+IERhdGE7CgogICAgcHJpdmF0ZToKCgogICAgICB0eXBlZGVmIFIgUlR5cGU7CgoK
CgogICAgICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMixQMyBwMyxQ
NCBwNCkKICAgICAgICB7CiAgICAgICAgICBEYXRhKiBkYXRhPShEYXRhKilkOwogICAgICAgICAg
cmV0dXJuIGRhdGEtPm9iai0+ZW1pdChwMSxwMixwMyxwNCk7CiAgICAgICAgfQoKICAgIHB1Ymxp
YzoKICAgICAgU2xvdFR5cGUgc2xvdCgpCiAgICAgICAgewogICAgICAgICAgU2lnQzo6U2xvdERh
dGEqIHRtcD1tYW5hZ2UobmV3IFNpZ0M6OlNsb3REYXRhKCkpOwogICAgICAgICAgRGF0YSYgZGF0
YT1yZWludGVycHJldF9jYXN0PERhdGEmPih0bXAtPmRhdGFfKTsKICAgICAgICAgIGRhdGEuY2Fs
bGJhY2s9JmNhbGxiYWNrOwogICAgICAgICAgZGF0YS5vYmo9dGhpczsKICAgICAgICAgIFNpZ0M6
OlNjb3BlTm9kZSogbm9kZT10bXAtPnJlY2VpdmVyKCk7CiAgICAgICAgICBvYmotPnJlZ2lzdGVy
X2RhdGEobm9kZSk7CiAgICAgICAgICByZXR1cm4gdG1wOwogICAgICAgIH0KCiAgICAgIFJUeXBl
IGVtaXQoUDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQpCiAgICAgICAgewogICAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8UlR5cGUgKCopKGdPYmoqLFAxLFAyLFAzLFA0KT4KICAgICAgICAg
ICAgKGVtaXRfZnVuYykgKG9iai0+Z3Rrb2JqKCkscDEscDIscDMscDQpOwogICAgICAgIH0KCiAg
ICAgIFJUeXBlIG9wZXJhdG9yKCkoUDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQpCiAgICAgICAgewog
ICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UlR5cGUgKCopKGdPYmoqLFAxLFAyLFAz
LFA0KT4KICAgICAgICAgICAgKGVtaXRfZnVuYykgKG9iai0+Z3Rrb2JqKCkscDEscDIscDMscDQp
OwogICAgICAgIH0KCiAgfTsKCgogCgoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNz
IFAyLGNsYXNzIFAzLGNsYXNzIFA0LGNsYXNzIFA1LAogICAgICAgICAgY2xhc3MgT2JqLGNsYXNz
IGdPYmosaW50IGluZGV4PgpjbGFzcyBQcm94eVNpZ25hbDUKICB7CiAgICBwdWJsaWM6CiAgICAg
IHR5cGVkZWYgU2lnQzo6Q2FsbGJhY2s1PFIsUDEsUDIsUDMsUDQsUDU+IENhbGxiYWNrOwogICAg
ICB0eXBlZGVmIFNpZ0M6OlNsb3Q1PFIsUDEsUDIsUDMsUDQsUDU+IFNsb3RUeXBlOwoKCiAgICBw
cm90ZWN0ZWQ6CiAgICAgIE9iaiAqb2JqOwoKCgoKCgogICAgICB0eXBlZGVmIFIgUlR5cGU7CgoK
CgogICAgICBzdGF0aWMgUlR5cGUgZ3RrX2NhbGxiYWNrKEd0a09iamVjdCosUDEgcDEsUDIgcDIs
UDMgcDMsUDQgcDQsUDUgcDUsdm9pZCAqZCkKICAgICAgICB7CiAgICAgICAgICBQcm94eU5vZGUg
Km5vZGU9KFByb3h5Tm9kZSopZDsKICAgICAgICAgIENhbGxiYWNrKiBkYXRhPShDYWxsYmFjayop
KG5vZGUtPmNhbGxiYWNrXyk7CiAgICAgICAgICByZXR1cm4gZGF0YS0+Y2FsbChwMSxwMixwMyxw
NCxwNSk7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKCiAgICAgIENvbm5lY3Rpb24gY29ubmVjdChj
b25zdCBTbG90VHlwZSAmcykKICAgICAgICB7CiAgICAgICAgIFNpZ0M6OlNsb3REYXRhKiBkPXMu
ZGF0YSgpOwogICAgICAgICBQcm94eU5vZGU6OmNvbm5lY3Qob2JqLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb2JqLT5zaWduYWxfbmFtZXNbaW5kZXhdLAoJCQkgICAgKEd0a1NpZ25hbEZ1
bmMpZ3RrX2NhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZCwKCQkJICAgIGZh
bHNlKTsKICAgICAgICAgcmV0dXJuIGQ7CiAgICAgICAgfQoKICAgICAgQ29ubmVjdGlvbiBjb25u
ZWN0X2FmdGVyKGNvbnN0IFNsb3RUeXBlICZzKQogICAgICAgIHsKICAgICAgICAgU2lnQzo6U2xv
dERhdGEqIGQ9cy5kYXRhKCk7CiAgICAgICAgIFByb3h5Tm9kZTo6Y29ubmVjdChvYmosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvYmotPnNpZ25hbF9uYW1lc1tpbmRleF0sCgkJCSAgICAo
R3RrU2lnbmFsRnVuYylndGtfY2FsbGJhY2ssCgkJCSAgICBkLAoJCQkgICAgdHJ1ZSk7CiAgICAg
ICAgIHJldHVybiBkOwogICAgICAgIH0KCiAgfTsKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAx
LGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0LGNsYXNzIFA1LAogICAgICAgICAgY2xhc3MgT2Jq
LGNsYXNzIGdPYmosaW50IGluZGV4LAogICAgICAgICAgUiAoKmVtaXRfZnVuYykoZ09iaiosUDEs
UDIsUDMsUDQsUDUpPgpjbGFzcyBFbWl0UHJveHlTaWduYWw1CiAgOiBwdWJsaWMgUHJveHlTaWdu
YWw1IAogICAgPFIsUDEsUDIsUDMsUDQsUDUsT2JqLGdPYmosaW5kZXg+CiAgewogICAgcHVibGlj
OgogICAgICB0eXBlZGVmIEVtaXRQcm94eVNpZ25hbDU8UixQMSxQMixQMyxQNCxQNSxPYmosZ09i
aixpbmRleCxlbWl0X2Z1bmM+IFNlbGY7CiAgICAgIHR5cGVkZWYgU2lnQzo6U2xvdDU8UixQMSxQ
MixQMyxQNCxQNT4gU2xvdFR5cGU7CiAgICAgIHR5cGVkZWYgU2lnQzo6Q2FsbERhdGFPYmoyPHR5
cGVuYW1lIFNsb3RUeXBlOjpGdW5jLFNlbGY+IERhdGE7CgogICAgcHJpdmF0ZToKCgogICAgICB0
eXBlZGVmIFIgUlR5cGU7CgoKCgogICAgICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZCxQ
MSBwMSxQMiBwMixQMyBwMyxQNCBwNCxQNSBwNSkKICAgICAgICB7CiAgICAgICAgICBEYXRhKiBk
YXRhPShEYXRhKilkOwogICAgICAgICAgcmV0dXJuIGRhdGEtPm9iai0+ZW1pdChwMSxwMixwMyxw
NCxwNSk7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAgU2xvdFR5cGUgc2xvdCgpCiAgICAg
ICAgewogICAgICAgICAgU2lnQzo6U2xvdERhdGEqIHRtcD1tYW5hZ2UobmV3IFNpZ0M6OlNsb3RE
YXRhKCkpOwogICAgICAgICAgRGF0YSYgZGF0YT1yZWludGVycHJldF9jYXN0PERhdGEmPih0bXAt
PmRhdGFfKTsKICAgICAgICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNrOwogICAgICAgICAgZGF0
YS5vYmo9dGhpczsKICAgICAgICAgIFNpZ0M6OlNjb3BlTm9kZSogbm9kZT10bXAtPnJlY2VpdmVy
KCk7CiAgICAgICAgICBvYmotPnJlZ2lzdGVyX2RhdGEobm9kZSk7CiAgICAgICAgICByZXR1cm4g
dG1wOwogICAgICAgIH0KCiAgICAgIFJUeXBlIGVtaXQoUDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQs
UDUgcDUpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UlR5cGUg
KCopKGdPYmoqLFAxLFAyLFAzLFA0LFA1KT4KICAgICAgICAgICAgKGVtaXRfZnVuYykgKG9iai0+
Z3Rrb2JqKCkscDEscDIscDMscDQscDUpOwogICAgICAgIH0KCiAgICAgIFJUeXBlIG9wZXJhdG9y
KCkoUDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQsUDUgcDUpCiAgICAgICAgewogICAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UlR5cGUgKCopKGdPYmoqLFAxLFAyLFAzLFA0LFA1KT4KICAg
ICAgICAgICAgKGVtaXRfZnVuYykgKG9iai0+Z3Rrb2JqKCkscDEscDIscDMscDQscDUpOwogICAg
ICAgIH0KCiAgfTsKCgogCgoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNs
YXNzIFAzLGNsYXNzIFA0LGNsYXNzIFA1LGNsYXNzIFA2LAogICAgICAgICAgY2xhc3MgT2JqLGNs
YXNzIGdPYmosaW50IGluZGV4PgpjbGFzcyBQcm94eVNpZ25hbDYKICB7CiAgICBwdWJsaWM6CiAg
ICAgIHR5cGVkZWYgU2lnQzo6Q2FsbGJhY2s2PFIsUDEsUDIsUDMsUDQsUDUsUDY+IENhbGxiYWNr
OwogICAgICB0eXBlZGVmIFNpZ0M6OlNsb3Q2PFIsUDEsUDIsUDMsUDQsUDUsUDY+IFNsb3RUeXBl
OwoKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIE9iaiAqb2JqOwoKCgoKCgogICAgICB0eXBlZGVmIFIg
UlR5cGU7CgoKCgogICAgICBzdGF0aWMgUlR5cGUgZ3RrX2NhbGxiYWNrKEd0a09iamVjdCosUDEg
cDEsUDIgcDIsUDMgcDMsUDQgcDQsUDUgcDUsUDYgcDYsdm9pZCAqZCkKICAgICAgICB7CiAgICAg
ICAgICBQcm94eU5vZGUgKm5vZGU9KFByb3h5Tm9kZSopZDsKICAgICAgICAgIENhbGxiYWNrKiBk
YXRhPShDYWxsYmFjayopKG5vZGUtPmNhbGxiYWNrXyk7CiAgICAgICAgICByZXR1cm4gZGF0YS0+
Y2FsbChwMSxwMixwMyxwNCxwNSxwNik7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKCiAgICAgIENv
bm5lY3Rpb24gY29ubmVjdChjb25zdCBTbG90VHlwZSAmcykKICAgICAgICB7CiAgICAgICAgIFNp
Z0M6OlNsb3REYXRhKiBkPXMuZGF0YSgpOwogICAgICAgICBQcm94eU5vZGU6OmNvbm5lY3Qob2Jq
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLT5zaWduYWxfbmFtZXNbaW5kZXhdLAoJ
CQkgICAgKEd0a1NpZ25hbEZ1bmMpZ3RrX2NhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZCwKCQkJICAgIGZhbHNlKTsKICAgICAgICAgcmV0dXJuIGQ7CiAgICAgICAgfQoKICAg
ICAgQ29ubmVjdGlvbiBjb25uZWN0X2FmdGVyKGNvbnN0IFNsb3RUeXBlICZzKQogICAgICAgIHsK
ICAgICAgICAgU2lnQzo6U2xvdERhdGEqIGQ9cy5kYXRhKCk7CiAgICAgICAgIFByb3h5Tm9kZTo6
Y29ubmVjdChvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmotPnNpZ25hbF9uYW1l
c1tpbmRleF0sCgkJCSAgICAoR3RrU2lnbmFsRnVuYylndGtfY2FsbGJhY2ssCgkJCSAgICBkLAoJ
CQkgICAgdHJ1ZSk7CiAgICAgICAgIHJldHVybiBkOwogICAgICAgIH0KCiAgfTsKCnRlbXBsYXRl
IDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0LGNsYXNzIFA1LGNs
YXNzIFA2LAogICAgICAgICAgY2xhc3MgT2JqLGNsYXNzIGdPYmosaW50IGluZGV4LAogICAgICAg
ICAgUiAoKmVtaXRfZnVuYykoZ09iaiosUDEsUDIsUDMsUDQsUDUsUDYpPgpjbGFzcyBFbWl0UHJv
eHlTaWduYWw2CiAgOiBwdWJsaWMgUHJveHlTaWduYWw2IAogICAgPFIsUDEsUDIsUDMsUDQsUDUs
UDYsT2JqLGdPYmosaW5kZXg+CiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIEVtaXRQcm94
eVNpZ25hbDY8UixQMSxQMixQMyxQNCxQNSxQNixPYmosZ09iaixpbmRleCxlbWl0X2Z1bmM+IFNl
bGY7CiAgICAgIHR5cGVkZWYgU2lnQzo6U2xvdDY8UixQMSxQMixQMyxQNCxQNSxQNj4gU2xvdFR5
cGU7CiAgICAgIHR5cGVkZWYgU2lnQzo6Q2FsbERhdGFPYmoyPHR5cGVuYW1lIFNsb3RUeXBlOjpG
dW5jLFNlbGY+IERhdGE7CgogICAgcHJpdmF0ZToKCgogICAgICB0eXBlZGVmIFIgUlR5cGU7CgoK
CgogICAgICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMixQMyBwMyxQ
NCBwNCxQNSBwNSxQNiBwNikKICAgICAgICB7CiAgICAgICAgICBEYXRhKiBkYXRhPShEYXRhKilk
OwogICAgICAgICAgcmV0dXJuIGRhdGEtPm9iai0+ZW1pdChwMSxwMixwMyxwNCxwNSxwNik7CiAg
ICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAgU2xvdFR5cGUgc2xvdCgpCiAgICAgICAgewogICAg
ICAgICAgU2lnQzo6U2xvdERhdGEqIHRtcD1tYW5hZ2UobmV3IFNpZ0M6OlNsb3REYXRhKCkpOwog
ICAgICAgICAgRGF0YSYgZGF0YT1yZWludGVycHJldF9jYXN0PERhdGEmPih0bXAtPmRhdGFfKTsK
ICAgICAgICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNrOwogICAgICAgICAgZGF0YS5vYmo9dGhp
czsKICAgICAgICAgIFNpZ0M6OlNjb3BlTm9kZSogbm9kZT10bXAtPnJlY2VpdmVyKCk7CiAgICAg
ICAgICBvYmotPnJlZ2lzdGVyX2RhdGEobm9kZSk7CiAgICAgICAgICByZXR1cm4gdG1wOwogICAg
ICAgIH0KCiAgICAgIFJUeXBlIGVtaXQoUDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQsUDUgcDUsUDYg
cDYpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UlR5cGUgKCop
KGdPYmoqLFAxLFAyLFAzLFA0LFA1LFA2KT4KICAgICAgICAgICAgKGVtaXRfZnVuYykgKG9iai0+
Z3Rrb2JqKCkscDEscDIscDMscDQscDUscDYpOwogICAgICAgIH0KCiAgICAgIFJUeXBlIG9wZXJh
dG9yKCkoUDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQsUDUgcDUsUDYgcDYpCiAgICAgICAgewogICAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UlR5cGUgKCopKGdPYmoqLFAxLFAyLFAzLFA0
LFA1LFA2KT4KICAgICAgICAgICAgKGVtaXRfZnVuYykgKG9iai0+Z3Rrb2JqKCkscDEscDIscDMs
cDQscDUscDYpOwogICAgICAgIH0KCiAgfTsKCgoKCn0KCgoKCiMgMzQgIi9vcHQvZ3RrL2luY2x1
ZGUvZ3RrLS0vYmFzZS5oIiAyCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLS0vbWFyc2hhbC5o
IiAxCgoKCiAKCgoKZ3VpbnQgZ3RrbW1fc2lnbmFsX3NldF9tYXJzaGFsKGd1aW50LEd0a1NpZ25h
bE1hcnNoYWxsZXIpOwpib29sIGd0a21tX2NsZWFyX2lnbm9yZSgpOwp2b2lkIGd0a21tX3NldF9p
Z25vcmUoKTsKCiAKCgoKCgoKCgoKCgogICAgCnZvaWQgZ3RrbW1fbWFyc2hhbF9CT09MX19OT05F
IChHdGtPYmplY3QgKiBvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtT
aWduYWxGdW5jIGZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBm
dW5jX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtBcmcgKiBhcmdzKTsK
CnZvaWQgZ3RrbW1fbWFyc2hhbF9CT09MX19QT0lOVEVSIChHdGtPYmplY3QgKiBvYmplY3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtTaWduYWxGdW5jIGZ1bmMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBmdW5jX2RhdGEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtBcmcgKiBhcmdzKTsKCnZvaWQgZ3RrbW1fbWFy
c2hhbF9CT09MX19QT0lOVEVSX1BPSU5URVJfSU5UX0lOVCAoR3RrT2JqZWN0ICogb2JqZWN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEd0a1NpZ25h
bEZ1bmMgZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBncG9pbnRlciBmdW5jX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR3RrQXJnICogYXJncyk7Cgp2b2lkIGd0a21tX21hcnNoYWxfQk9P
TF9fUE9JTlRFUl9JTlRfSU5UIChHdGtPYmplY3QgKiBvYmplY3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEd0a1NpZ25hbEZ1bmMgZnVuYywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZnVuY19kYXRhLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtBcmcgKiBhcmdzKTsKdm9pZCBn
dGttbV9tYXJzaGFsX0JPT0xfX1BPSU5URVJfSU5UX0lOVF9JTlQgKEd0a09iamVjdCAqIG9iamVj
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEd0a1NpZ25h
bEZ1bmMgZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdwb2ludGVyIGZ1bmNfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEd0a0FyZyAqIGFyZ3MpOwp2b2lkIGd0a21tX21hcnNoYWxfQk9PTF9fUE9JTlRF
Ul9QT0lOVEVSX1BPSU5URVJfUE9JTlRFUiAoR3RrT2JqZWN0ICogb2JqZWN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3RrU2lnbmFs
RnVuYyBmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3BvaW50ZXIgZnVuY19kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3RrQXJnICogYXJncyk7Cgp2b2lkIGd0
a21tX21hcnNoYWxfSU5UX19JTlQgKEd0a09iamVjdCAqIG9iamVjdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHdGtTaWduYWxGdW5jIGZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3BvaW50ZXIgZnVuY19kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEd0
a0FyZyAqIGFyZ3MpOwoKdm9pZCBndGttbV9tYXJzaGFsX0lOVF9fUE9JTlRFUiAoR3RrT2JqZWN0
ICogb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtTaWduYWxGdW5j
IGZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGZ1bmNfZGF0
YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3RrQXJnICogYXJncyk7Cgp2b2lk
IGd0a21tX21hcnNoYWxfSU5UX19QT0lOVEVSX0NIQVJfQ0hBUiAoR3RrT2JqZWN0ICogb2JqZWN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3RrU2lnbmFsRnVu
YyBmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50
ZXIgZnVuY19kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R3RrQXJnICogYXJncyk7CgoKIyAzNSAiL29wdC9ndGsvaW5jbHVkZS9ndGstLS9iYXNlLmgiIDIK
CgoKCgoKCiAKCgogCgoKCgoKCgoKCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCgoKCgoK
CgpuYW1lc3BhY2UgR3RrCnsKdXNpbmcgc3RkOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA7
ICAKdXNpbmcgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyA7CnVzaW5nIHN0ZDo6aW5wdXRfaXRl
cmF0b3JfdGFnIDsgCnVzaW5nIHN0ZDo6c3RyaW5nIDsgCn0KCgoKIAoKc3RydWN0IF9HdGtPYmpl
Y3Q7CgpuYW1lc3BhY2UgR3RrCnsKCgogCmV4dGVybiBHUXVhcmsgcXVhcmtfOwoKIAoKIAoKCgoK
CgpjbGFzcyBPYmplY3Q7CmNsYXNzIE9iamVjdENsYXNzOwp0eXBlZGVmIE9iamVjdCogKCpXcmFw
X0Z1bmMpKF9HdGtPYmplY3QqKTsKCiAKT2JqZWN0KiB3cmFwX2F1dG8oX0d0a09iamVjdCopOwoK
IAp2b2lkIHdyYXBfcmVnaXN0ZXIoY29uc3Qgc3RyaW5nJixXcmFwX0Z1bmMpOwoKIAp0ZW1wbGF0
ZSA8Y2xhc3MgQ3BwPgpDcHAqIHdyYXBfbmV3KHR5cGVuYW1lIENwcDo6QmFzZU9iamVjdFR5cGUq
IG8pCiAgewogICByZXR1cm4gKHR5cGVuYW1lIENwcDo6Q3BwQ2xhc3NUeXBlOjp3cmFwX25ldyhv
KSk7CiAgfQoKIAogCgoKCgoKCgogCgogCnN0cnVjdCBHdGtCYXNlIHsgfTsKc3RydWN0IEd0a0Jh
c2VDbGFzcyB7IH07CgpjbGFzcyBCYXNlOwpzdHJ1Y3QgQmFzZV9DbGFzcwogIHsgCiAgICB0eXBl
ZGVmIEJhc2UgQ3BwT2JqZWN0VHlwZTsKICAgIHN0YXRpYyB2b2lkIGNsYXNzX2luaXRfZnVuY3Rp
b24oIEd0a0Jhc2VDbGFzcyAqYikKICAgICAgeyh2b2lkKWI7fQogIH07CgogCgoKCgoKCgpjbGFz
cyBCYXNlIDogcHVibGljIHZpcnR1YWwgU2lnQzo6T2JqZWN0CgogIHsKICAgIHB1YmxpYzoKICAg
ICAgdHlwZWRlZiBCYXNlICAgICAgICAgIENwcE9iamVjdFR5cGU7CiAgICAgIHR5cGVkZWYgQmFz
ZV9DbGFzcyAgICBDcHBDbGFzc1R5cGU7CgogICAgICB+QmFzZSgpOwoKICAgIHByb3RlY3RlZDoK
ICAgICAgZnJpZW5kIGNsYXNzIE9iamVjdF9DbGFzczsKICAgICAgc3RhdGljIGludCBnZXRfdHlw
ZSgpIHtyZXR1cm4gMDt9CiAgfTsKCiAKCiAKIAogCiAKY2xhc3MgbnN0cmluZyA6IHB1YmxpYyBz
dHJpbmcgewogIGJvb2wgbnVsbF87CnB1YmxpYzoKICBleHBsaWNpdCBuc3RyaW5nKCk7CiAgbnN0
cmluZyhzdHJpbmcgc3RyKTsKICAgCiAgbnN0cmluZyhjb25zdCBjaGFyICpzKTsKICB+bnN0cmlu
ZygpOwoKICAgCiAgIAogIGNvbnN0IGNoYXIgKiBnY19zdHIoKSBjb25zdDsKCiAgIAogIGludCBu
dWxsKCkgIGNvbnN0CiAgICB7cmV0dXJuIG51bGxfO30KfTsKCiAKfSAgCgp0ZW1wbGF0ZSA8Y2xh
c3MgVD4gc3RydWN0IEdfTGlzdF9JdGVyYXRvcjsKdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBH
X0xpc3RfQ29uc3RJdGVyYXRvcjsKdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBHX0xpc3RfUmV2
ZXJzZUl0ZXJhdG9yOwoKIAogCgogCmNsYXNzIEdfTGlzdEltcGwKewogIEdMaXN0ICpsaXN0XzsK
ICBHX0xpc3RJbXBsKGNvbnN0IEdfTGlzdEltcGwmKTsKcHVibGljOgogIEdfTGlzdEltcGwoKTog
bGlzdF8oMCkge30KICB+R19MaXN0SW1wbCgpICAgICAgICAge2dfbGlzdF9mcmVlKGxpc3RfKTt9
CgogIEdMaXN0KiBjb25zdCAmICBsaXN0KCkgY29uc3Qge3JldHVybiBsaXN0Xzt9CiAgR0xpc3Qq
JiBsaXN0KCkge3JldHVybiBsaXN0Xzt9ICAKCiAgaW50IGluZGV4X29mKGdwb2ludGVyIGRhdGEp
CiAgICB7cmV0dXJuIGdfbGlzdF9pbmRleChsaXN0XyxkYXRhKTt9CiAgaW50IHBvc2l0aW9uKEdM
aXN0ICpwb3MpCiAgICB7cmV0dXJuIGdfbGlzdF9wb3NpdGlvbihsaXN0Xyxwb3MpO30KICBHTGlz
dCogZmlyc3QoKSBjb25zdAogICAge3JldHVybiBnX2xpc3RfZmlyc3QobGlzdF8pO30KICBHTGlz
dCogbGFzdCgpIGNvbnN0CiAgICB7cmV0dXJuIGdfbGlzdF9sYXN0KGxpc3RfKTt9CgogIHNpemVf
dCBzaXplKCkgY29uc3QKICAgIHsgcmV0dXJuIGdfbGlzdF9sZW5ndGgobGlzdF8pOyB9CiAgYm9v
bCBlbXB0eSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplKCk9PTA7IH0KCiAgdm9pZCByZXZlcnNl
KCkKICAgIHtsaXN0Xz1nX2xpc3RfcmV2ZXJzZShsaXN0Xyk7fQoKICBHTGlzdCogaW5zZXJ0KEdM
aXN0KiBwb3MsZ3BvaW50ZXIgZGF0YSk7CgogIHZvaWQgcmVtb3ZlKGdwb2ludGVyIGRhdGEpCiAg
ICB7bGlzdF89Z19saXN0X3JlbW92ZShsaXN0XyxkYXRhKTt9CgogIEdMaXN0KiBlcmFzZShHTGlz
dCogcG9zKTsKCiAgdm9pZCBjbGVhcigpCiAgICB7CiAgICAgIGdfbGlzdF9mcmVlKGxpc3RfKTsK
ICAgICAgbGlzdF89MDsKICAgIH0KfTsKCiAKY2xhc3MgR19MaXN0V3JhcAp7CiAgR0xpc3QqJiBs
aXN0XzsKcHVibGljOgogIEdfTGlzdFdyYXAoR0xpc3QqJiBsKSAgICAgICAgICAgOiBsaXN0Xyhs
KSAgICAgICB7fQogIEdfTGlzdFdyYXAoY29uc3QgR19MaXN0V3JhcCYgbCkgOiBsaXN0XyhsLmxp
c3RfKSB7fQoKICBHTGlzdComIGxpc3QoKSB7cmV0dXJuIGxpc3RfO30KICBHTGlzdCogY29uc3Qm
IGxpc3QoKSBjb25zdCB7cmV0dXJuIGxpc3RfO30KCiAgaW50IGluZGV4X29mKGdwb2ludGVyIGRh
dGEpCiAgICB7cmV0dXJuIGdfbGlzdF9pbmRleChsaXN0XyxkYXRhKTt9CiAgaW50IHBvc2l0aW9u
KEdMaXN0ICpwb3MpCiAgICB7cmV0dXJuIGdfbGlzdF9wb3NpdGlvbihsaXN0Xyxwb3MpO30KICBH
TGlzdCogZmlyc3QoKQogICAge3JldHVybiBnX2xpc3RfZmlyc3QobGlzdF8pO30KICBHTGlzdCog
bGFzdCgpCiAgICB7cmV0dXJuIGdfbGlzdF9sYXN0KGxpc3RfKTt9CgogIHNpemVfdCBzaXplKCkg
Y29uc3QKICAgIHsgcmV0dXJuIGdfbGlzdF9sZW5ndGgobGlzdF8pOyB9CiAgYm9vbCBlbXB0eSgp
IGNvbnN0CiAgICB7IHJldHVybiBzaXplKCk9PTA7IH0KCiAgdm9pZCByZXZlcnNlKCkKICAgIHts
aXN0Xz1nX2xpc3RfcmV2ZXJzZShsaXN0Xyk7fQoKICBHTGlzdCogaW5zZXJ0KEdMaXN0KiBwb3Ms
Z3BvaW50ZXIgZGF0YSk7CgogIHZvaWQgcmVtb3ZlKGdwb2ludGVyIGRhdGEpCiAgICB7bGlzdF89
Z19saXN0X3JlbW92ZShsaXN0XyxkYXRhKTt9CgogIEdMaXN0KiBlcmFzZShHTGlzdCogcG9zKTsK
CiAgdm9pZCBjbGVhcigpCiAgICB7CiAgICAgIGdfbGlzdF9mcmVlKGxpc3RfKTsKICAgICAgbGlz
dF89MDsKICAgIH0KfTsKCiAKIAogCiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgVCxjbGFzcyBJbXBsPUdf
TGlzdEltcGw+CmNsYXNzIEdfTGlzdAp7CnB1YmxpYzoKICB0eXBlZGVmIEdfTGlzdDxULEltcGw+
ICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGY7CiAgdHlwZWRlZiBHX0xpc3RfSXRlcmF0b3I8
VD4gICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcjsKICB0eXBlZGVmIEdfTGlzdF9Db25zdEl0
ZXJhdG9yPGl0ZXJhdG9yPiAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgR19MaXN0
X1JldmVyc2VJdGVyYXRvcjxpdGVyYXRvcj4gICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBl
ZGVmIEdfTGlzdF9SZXZlcnNlSXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IHJldmVyc2VfY29uc3Rf
aXRlcmF0b3I7CiAgdHlwZWRlZiBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3R5cGU7Cgpwcml2YXRlOgogIEltcGwgaW1wbDsKICBHX0xpc3QoY29uc3QgU2VsZiYg
eCk7CgogIGdwb2ludGVyIHRvX3BvaW50ZXIoY29uc3QgVCYgZCkKICAgIHsgcmV0dXJuIGNvbnN0
X2Nhc3Q8Z3BvaW50ZXImPihyZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQqIGNvbnN0Jj4oZCkp
OyB9CgpwdWJsaWM6CiAgR19MaXN0KCkgICAgICAgICAgICAgIDogaW1wbCgpICB7fQogIEdfTGlz
dChjb25zdCBJbXBsJiBpKSA6IGltcGwoaSkge30KICB+R19MaXN0KCkgICAgICAgICAgICAgICAg
ICAgICAgIHt9CgogIEdMaXN0KiAmIGdsaXN0KCkgY29uc3QgeyByZXR1cm4gaW1wbC5saXN0KCk7
IH0KCiAgaXRlcmF0b3IgYmVnaW4oKSAgICAgICAgICAgICB7IHJldHVybiBpdGVyYXRvcihpbXBs
Lmxpc3QoKSxpbXBsLmZpcnN0KCkpOyB9CiAgaXRlcmF0b3IgZW5kKCkgICAgICAgICAgICAgICB7
IHJldHVybiBpdGVyYXRvcihpbXBsLmxpc3QoKSwoR0xpc3QqKTApOyB9CiAgY29uc3RfaXRlcmF0
b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvcihpbXBsLmxpc3QoKSxpbXBs
LmZpcnN0KCkpOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgICBjb25zdCB7IHJldHVybiBjb25z
dF9pdGVyYXRvcihpbXBsLmxpc3QoKSwoR0xpc3QqKTApOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciBy
YmVnaW4oKSAgICB7IHJldHVybiByZXZlcnNlX2NvbnN0X2l0ZXJhdG9yKGVuZCgpKTsgfQogIHJl
dmVyc2VfaXRlcmF0b3IgcmVuZCgpICAgICAgeyByZXR1cm4gcmV2ZXJzZV9jb25zdF9pdGVyYXRv
cihiZWdpbigpKTsgfQogIHJldmVyc2VfY29uc3RfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gcmV2ZXJzZV9jb25zdF9pdGVyYXRvcihlbmQoKSk7fQogIHJldmVyc2VfY29uc3RfaXRl
cmF0b3IgcmVuZCgpICAgY29uc3QgeyByZXR1cm4gcmV2ZXJzZV9jb25zdF9pdGVyYXRvcihiZWdp
bigpKTt9CgogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBwb3MsY29uc3QgVCYgZGF0YSkKICAg
IHsgcmV0dXJuIGl0ZXJhdG9yKGltcGwubGlzdCgpLGltcGwuaW5zZXJ0KHBvcy5ub2RlLHRvX3Bv
aW50ZXIoZGF0YSkpKTsgfQoKICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBwb3MpCiAgICB7IHJl
dHVybiBpdGVyYXRvcihpbXBsLmVyYXNlKHBvcykpO30KICB2b2lkIHJlbW92ZShjb25zdCBUJiBk
YXRhKQogICAgeyBpbXBsLnJlbW92ZSh0b19wb2ludGVyKGRhdGEpKTsgfQogIHZvaWQgY2xlYXIo
KSB7aW1wbC5jbGVhcigpO30KCiAgdm9pZCBwdXNoX2Zyb250KGNvbnN0IFQmIGRhdGEpIHsgaW5z
ZXJ0KGJlZ2luKCksIGRhdGEpOyB9CiAgdm9pZCBwdXNoX2JhY2soY29uc3QgVCYgZGF0YSkgIHsg
aW5zZXJ0KGVuZCgpLCBkYXRhKTsgfQogIHZvaWQgcG9wX2Zyb250KCkgICAgICAgICAgICAgICB7
IGVyYXNlKGJlZ2luKCkpOyB9CiAgdm9pZCBwb3BfYmFjaygpICAgICAgICAgICAgICAgIHsgZXJh
c2UoaW1wbC5sYXN0KCkpO30KCiAgdm9pZCByZXZlcnNlKCkgICAgICAgICAgICAgICAgIHsgaW1w
bC5yZXZlcnNlKCk7fQoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0ICAgICAgICAgeyByZXR1cm4g
aW1wbC5zaXplKCk7IH0KICBib29sIGVtcHR5KCkgY29uc3QgICAgICAgICAgICAgeyByZXR1cm4g
aW1wbC5lbXB0eSgpOyB9Cgp9OwoKCiAKCgpleHRlcm4gZ3BvaW50ZXIgZ3RrbW1fbnVsbF9wb2lu
dGVyOwoKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBHX0xpc3RfSXRlcmF0b3IKewogIHR5cGVk
ZWYgR3RrOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0
eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90
eXBlOwoKICB0eXBlZGVmIFQgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBUKiBwb2ludGVyOwogIHR5
cGVkZWYgVCYgcmVmZXJlbmNlOwoKICBHTGlzdCAqIGNvbnN0ICpoZWFkOwogIEdMaXN0ICogbm9k
ZTsKCiAgdHlwZWRlZiBHX0xpc3RfSXRlcmF0b3I8VD4gU2VsZjsKCiAgR19MaXN0X0l0ZXJhdG9y
KEdMaXN0KiBjb25zdCYgaCxHTGlzdCAqbikgOiBoZWFkKCZoKSAgICAsbm9kZShuKSAgICAgIHt9
CiAgR19MaXN0X0l0ZXJhdG9yKCkgICAgICAgICAgICAgICAgICAgOiBoZWFkKDApICAgICAsbm9k
ZSgwKSAgICAgIHt9CiAgR19MaXN0X0l0ZXJhdG9yKGNvbnN0IFNlbGYmIHgpICAgICAgOiBoZWFk
KHguaGVhZCksbm9kZSh4Lm5vZGUpIHt9CgogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTZWxmJiB4
KSBjb25zdCB7IHJldHVybiBub2RlID09IHgubm9kZTsgfQogIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBTZWxmJiB4KSBjb25zdCB7IHJldHVybiBub2RlICE9IHgubm9kZTsgfQoKICBTZWxmJiAgb3Bl
cmF0b3IrKygpCiAgewogICAgaWYgKCFub2RlKQogICAgICBub2RlPWdfbGlzdF9maXJzdCgqaGVh
ZCk7CiAgICBlbHNlCiAgICAgIG5vZGU9KEdMaXN0KikoKCBub2RlICkgPyAoKChHTGlzdCAqKSgg
bm9kZSApKS0+bmV4dCkgOiBfX251bGwgKSA7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBTZWxm
IG9wZXJhdG9yKysoaW50KQogIHsKICAgIFNlbGYgdG1wID0gKnRoaXM7CiAgICArKyp0aGlzOwog
ICAgcmV0dXJuIHRtcDsKICB9CgogIFNlbGYmICBvcGVyYXRvci0tKCkKICB7CiAgICBpZiAoIW5v
ZGUpCiAgICAgIG5vZGU9Z19saXN0X2xhc3QoKmhlYWQpOwogICAgZWxzZQogICAgICBub2RlPShH
TGlzdCopKCggbm9kZSApID8gKCgoR0xpc3QgKikoIG5vZGUgKSktPnByZXYpIDogX19udWxsICkg
OwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgU2VsZiBvcGVyYXRvci0tKGludCkKICB7CiAgICBT
ZWxmIHRtcCA9ICp0aGlzOwogICAgLS0qdGhpczsKICAgIHJldHVybiB0bXA7CiAgfQoKICByZWZl
cmVuY2Ugb3BlcmF0b3IqKCkgIGNvbnN0IAogIHsgCiAgICByZXR1cm4gKFQmKSgobm9kZSk/KCpu
b2RlKS5kYXRhOmd0a21tX251bGxfcG9pbnRlcik7IAogIH0KICAKICBwb2ludGVyIG9wZXJhdG9y
IC0+ICgpIGNvbnN0IHsgcmV0dXJuICZvcGVyYXRvciooKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNz
IFQ+CnN0cnVjdCBHX1NMaXN0X0l0ZXJhdG9yCnsKICB0eXBlZGVmIEd0azo6Zm9yd2FyZF9pdGVy
YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwog
IHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgdHlwZWRlZiBUICB2YWx1ZV90
eXBlOwogIHR5cGVkZWYgVCogcG9pbnRlcjsKICB0eXBlZGVmIFQmIHJlZmVyZW5jZTsKCiAgR1NM
aXN0ICpub2RlOwogIHR5cGVkZWYgR19TTGlzdF9JdGVyYXRvcjxUPiBTZWxmOwoKICBHX1NMaXN0
X0l0ZXJhdG9yKEdTTGlzdCAqbikgICAgIDogbm9kZShuKSAgICAgIHt9CiAgR19TTGlzdF9JdGVy
YXRvcigpICAgICAgICAgICAgICA6IG5vZGUoMCkgICAgICB7fQogIEdfU0xpc3RfSXRlcmF0b3Io
Y29uc3QgU2VsZiYgeCkgOiBub2RlKHgubm9kZSkge30KCiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFNlbGYmIHgpIGNvbnN0IHsgcmV0dXJuIG5vZGUgPT0geC5ub2RlOyB9CiAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFNlbGYmIHgpIGNvbnN0IHsgcmV0dXJuIG5vZGUgIT0geC5ub2RlOyB9CgogIFNl
bGYmICBvcGVyYXRvcisrKCkKICB7CiAgICBub2RlID0gKCggbm9kZSApID8gKCgoR1NMaXN0ICop
KCBub2RlICkpLT5uZXh0KSA6IF9fbnVsbCApIDsKICAgIHJldHVybiAqdGhpczsKICB9CgogIFNl
bGYgb3BlcmF0b3IrKyhpbnQpCiAgewogICAgU2VsZiB0bXAgPSAqdGhpczsKICAgICsrKnRoaXM7
CiAgICByZXR1cm4gdG1wOwogIH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpICBjb25zdCB7IHJl
dHVybiByZWludGVycHJldF9jYXN0PFQmPigobm9kZSk/KCpub2RlKS5kYXRhOmd0a21tX251bGxf
cG9pbnRlcik7IH0KICBwb2ludGVyIG9wZXJhdG9yIC0+ICgpIGNvbnN0IHsgcmV0dXJuICZvcGVy
YXRvciooKTsgfQp9OwoKIAogCiAKdGVtcGxhdGU8Y2xhc3MgaW1wbCwgY2xhc3MgaW50ZXJmPgpz
dHJ1Y3QgR19MaXN0X0NwcF9JdGVyYXRvciB7CiAgdHlwZWRlZiBHdGs6OmlucHV0X2l0ZXJhdG9y
X3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlw
ZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIGludGVyZiogIHZhbHVl
X3R5cGU7CiAgdHlwZWRlZiBpbnRlcmYqKiBwb2ludGVyOwogIHR5cGVkZWYgaW50ZXJmKiYgcmVm
ZXJlbmNlOwoKICB0eXBlZGVmIEdfTGlzdF9DcHBfSXRlcmF0b3I8aW1wbCxpbnRlcmY+IFNlbGY7
CgogIEdMaXN0ICoqaGVhZDsKICBHTGlzdCAqbm9kZTsKCiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFNlbGYmIHgpIGNvbnN0IHsgcmV0dXJuIG5vZGUgPT0geC5ub2RlOyB9CiAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFNlbGYmIHgpIGNvbnN0IHsgcmV0dXJuIG5vZGUgIT0geC5ub2RlOyB9CgogIEdf
TGlzdF9DcHBfSXRlcmF0b3IoR0xpc3QqJiBoLEdMaXN0ICpuKSA6IGhlYWQoJmgpICAgICxub2Rl
KG4pICAgICAge30KICBHX0xpc3RfQ3BwX0l0ZXJhdG9yKCkgICAgICAgICAgICAgICAgICAgOiBo
ZWFkKDApICAgICAsbm9kZSgwKSAgICAgIHt9CiAgR19MaXN0X0NwcF9JdGVyYXRvcihjb25zdCBT
ZWxmJiB4KSAgICAgIDogaGVhZCh4LmhlYWQpLG5vZGUoeC5ub2RlKSB7fQoKICB2YWx1ZV90eXBl
IG9wZXJhdG9yKigpIGNvbnN0CiAgewogICAgaWYgKG5vZGUgJiYgbm9kZS0+ZGF0YSkKICAgICAg
cmV0dXJuIEd0azo6d3JhcChzdGF0aWNfY2FzdDxpbXBsKj4oKCpub2RlKS5kYXRhKSk7CiAgICBy
ZXR1cm4gMDsKICB9CgogIFNlbGYmICBvcGVyYXRvcisrKCkKICB7CiAgICBpZiAoIW5vZGUpCiAg
ICAgIG5vZGU9Z19saXN0X2ZpcnN0KCpoZWFkKTsKICAgIGVsc2UKICAgICAgbm9kZSA9IChHTGlz
dCAqKSgoIG5vZGUgKSA/ICgoKEdMaXN0ICopKCBub2RlICkpLT5uZXh0KSA6IF9fbnVsbCApIDsK
ICAgIHJldHVybiAqdGhpczsKICB9CgogIFNlbGYgb3BlcmF0b3IrKyhpbnQpCiAgewogICAgU2Vs
ZiB0bXAgPSAqdGhpczsKICAgICsrKnRoaXM7CiAgICByZXR1cm4gdG1wOwogIH0KCiAgU2VsZiYg
IG9wZXJhdG9yLS0oKQogIHsKICAgIGlmICghbm9kZSkKICAgICAgbm9kZT1nX2xpc3RfbGFzdCgq
aGVhZCk7CiAgICBlbHNlCiAgICAgIG5vZGUgPSAoR0xpc3QgKikoKCBub2RlICkgPyAoKChHTGlz
dCAqKSggbm9kZSApKS0+cHJldikgOiBfX251bGwgKSA7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoK
ICBTZWxmIG9wZXJhdG9yLS0oaW50KQogIHsKICAgIFNlbGYgdG1wID0gKnRoaXM7CiAgICAtLSp0
aGlzOwogICAgcmV0dXJuIHRtcDsKICB9Cgp9OwoKdGVtcGxhdGUgPGNsYXNzIEI+CnN0cnVjdCBH
X0xpc3RfUmV2ZXJzZUl0ZXJhdG9yOiBwcml2YXRlIEIKewogIHR5cGVkZWYgdHlwZW5hbWUgQjo6
aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBC
OjpzaXplX3R5cGUgICAgICAgICBzaXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBCOjpkaWZm
ZXJlbmNlX3R5cGUgICBkaWZmZXJlbmNlX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgQjo6dmFs
dWVfdHlwZSAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIEI6OnBvaW50ZXIg
ICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBCOjpyZWZlcmVuY2UgICAgICAg
ICByZWZlcmVuY2U7CgogIHR5cGVkZWYgR19MaXN0X1JldmVyc2VJdGVyYXRvcjxCPiAgICBTZWxm
OwoKICBib29sIG9wZXJhdG9yPT0oY29uc3QgU2VsZiYgeCkgY29uc3QgeyByZXR1cm4gQjo6b3Bl
cmF0b3I9PSh4KTsgfQogIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTZWxmJiB4KSBjb25zdCB7IHJl
dHVybiBCOjpvcGVyYXRvciE9KHgpOyB9CgogIEdfTGlzdF9SZXZlcnNlSXRlcmF0b3IoR0xpc3Qq
IGNvbnN0JiBoLEdMaXN0ICpuKSA6IEIoaCxuKSB7fQogIEdfTGlzdF9SZXZlcnNlSXRlcmF0b3Io
KSAgICAgICAgICAgICAgICAgICA6IEIoKSAgICB7fQogIEdfTGlzdF9SZXZlcnNlSXRlcmF0b3Io
Y29uc3QgU2VsZiYgeCkgICAgICA6IEIoeCkgICB7fQogIEdfTGlzdF9SZXZlcnNlSXRlcmF0b3Io
Y29uc3QgQiYgeCkgICAgICAgICA6IEIoeCkgICB7ICsrKCp0aGlzKTsgfQoKICBTZWxmJiBvcGVy
YXRvcisrKCkgICB7Qjo6b3BlcmF0b3ItLSgpOyByZXR1cm4gKnRoaXM7fQogIFNlbGYmIG9wZXJh
dG9yLS0oKSAgIHtCOjpvcGVyYXRvcisrKCk7IHJldHVybiAqdGhpczt9CiAgU2VsZiBvcGVyYXRv
cisrKGludCkge1NlbGYgcz0qdGhpczsgQjo6b3BlcmF0b3ItLSgpOyByZXR1cm4gczt9CiAgU2Vs
ZiBvcGVyYXRvci0tKGludCkge1NlbGYgcz0qdGhpczsgQjo6b3BlcmF0b3IrKygpOyByZXR1cm4g
czt9CgogIHJlZmVyZW5jZSBvcGVyYXRvciooKSAgY29uc3QgeyByZXR1cm4gQjo6b3BlcmF0b3Iq
KCk7IH0KICBwb2ludGVyIG9wZXJhdG9yIC0+ICgpIGNvbnN0IHsgcmV0dXJuIEI6Om9wZXJhdG9y
LT4oKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIEI+CnN0cnVjdCBHX0xpc3RfQ29uc3RJdGVyYXRv
cjogcHVibGljIEIKewogIHR5cGVkZWYgdHlwZW5hbWUgQjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRl
cmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBCOjpzaXplX3R5cGUgICAgICAgICBz
aXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBCOjpkaWZmZXJlbmNlX3R5cGUgICBkaWZmZXJl
bmNlX3R5cGU7CgogIHR5cGVkZWYgY29uc3QgdHlwZW5hbWUgQjo6dmFsdWVfdHlwZSAgdmFsdWVf
dHlwZTsKICB0eXBlZGVmIGNvbnN0IHR5cGVuYW1lIEI6OnBvaW50ZXIgICAgIHBvaW50ZXI7CiAg
dHlwZWRlZiBjb25zdCB0eXBlbmFtZSBCOjpyZWZlcmVuY2UgICByZWZlcmVuY2U7CgogIHR5cGVk
ZWYgR19MaXN0X0NvbnN0SXRlcmF0b3I8Qj4gICAgU2VsZjsKCiAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFNlbGYmIHgpIGNvbnN0IHsgcmV0dXJuIEI6Om9wZXJhdG9yPT0oeCk7IH0KICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgU2VsZiYgeCkgY29uc3QgeyByZXR1cm4gQjo6b3BlcmF0b3IhPSh4KTsg
fQoKICBHX0xpc3RfQ29uc3RJdGVyYXRvcihHTGlzdCogY29uc3QmIGgsR0xpc3QgKm4pIDogQiho
LG4pIHt9CiAgR19MaXN0X0NvbnN0SXRlcmF0b3IoKSAgICAgICAgICAgICAgICAgICA6IEIoKSAg
ICB7fQogIEdfTGlzdF9Db25zdEl0ZXJhdG9yKGNvbnN0IFNlbGYmIHgpICAgICAgOiBCKHgpICAg
e30KICBHX0xpc3RfQ29uc3RJdGVyYXRvcihjb25zdCBCJiB4KSAgICAgICAgIDogQih4KSAgIHt9
CgogIFNlbGYmIG9wZXJhdG9yKysoKSAgIHtCOjpvcGVyYXRvcisrKCk7IHJldHVybiAqdGhpczt9
CiAgU2VsZiYgb3BlcmF0b3ItLSgpICAge0I6Om9wZXJhdG9yLS0oKTsgcmV0dXJuICp0aGlzO30K
ICBTZWxmIG9wZXJhdG9yKysoaW50KSB7U2VsZiBzPSp0aGlzOyBCOjpvcGVyYXRvcisrKCk7IHJl
dHVybiBzO30KICBTZWxmIG9wZXJhdG9yLS0oaW50KSB7U2VsZiBzPSp0aGlzOyBCOjpvcGVyYXRv
ci0tKCk7IHJldHVybiBzO30KCiAgdmFsdWVfdHlwZSBvcGVyYXRvciooKSAgY29uc3QgeyByZXR1
cm4gQjo6b3BlcmF0b3IqKCk7IH0KICBwb2ludGVyIG9wZXJhdG9yIC0+ICgpIGNvbnN0IHsgcmV0
dXJuIEI6Om9wZXJhdG9yLT4oKTsgfQp9OwoKIAp0eXBlZGVmIEdfTGlzdDxpbnQ+IEdfSW50TGlz
dDsKdHlwZWRlZiBHX0xpc3RfSXRlcmF0b3I8aW50PiBHX0ludExpc3RfSXRlcmF0b3I7CgogCgoK
bmFtZXNwYWNlIEd0awp7CgogCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUgY29uc3QgY2hhciog
Z3RrbW1fdG9fY3N0cmluZyAoY29uc3QgVCYgdCkKICB7IHJldHVybiB0OyB9Cgp0ZW1wbGF0ZSA8
PgppbmxpbmUgY29uc3QgY2hhciogZ3RrbW1fdG9fY3N0cmluZzxzdHJpbmc+KGNvbnN0IHN0cmlu
ZyYgdCkKICB7IHJldHVybiB0LmNfc3RyKCk7IH0KCnRlbXBsYXRlIDw+CmlubGluZSBjb25zdCBj
aGFyKiBndGttbV90b19jc3RyaW5nPG5zdHJpbmc+KGNvbnN0IG5zdHJpbmcmIHQpCiAgeyByZXR1
cm4gdC5nY19zdHIoKTsgfQoKCm5hbWVzcGFjZSBTQXJyYXlfSGVscGVycwp7Cgp0eXBlZGVmIGNv
bnN0IGNoYXIqIGNzdHJpbmc7CgogCnRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcj4Kc2l6ZV90IGNv
dW50X3N0cmluZ3MoSXRlcmF0b3IgaXRlcikKewogIHNpemVfdCBzID0gMDsKICBmb3IgKDsgKml0
ZXIgIT0gMDsgKytpdGVyLCArK3MpOwogIHJldHVybiBzOwp9CgogCiAKIAp0ZW1wbGF0ZSA8Y2xh
c3MgSXRlcmF0b3I+CmNvbnN0IGNoYXIqIGNvbnN0KiBjcmVhdGVfYXJyYXkoSXRlcmF0b3IgaXRl
ciwgc2l6ZV90IHNpemUpCnsKICBjc3RyaW5nKiBkYXRhID0gbmV3IGNzdHJpbmdbc2l6ZSArIDFd
OwogIGRhdGFbc2l6ZV0gPSAwOwogIAogIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
dGVyLCArK2kpCiAgICBkYXRhW2ldID0gZ3RrbW1fdG9fY3N0cmluZygqaXRlcik7CgogIHJldHVy
biBkYXRhOwp9CgoKIAogCiAKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBUcmFpdHMKewogIHN0
YXRpYyBib29sIGdldF9vd25lZCgpIHsgcmV0dXJuIHRydWU7IH0KICBzdGF0aWMgY29uc3QgY2hh
ciogY29uc3QqIGdldF9kYXRhKGNvbnN0IFQmIHQpCiAgICB7IHJldHVybiBjcmVhdGVfYXJyYXko
dC5iZWdpbigpLCB0LnNpemUoKSk7IH0KIHN0YXRpYyBzaXplX3QgZ2V0X3NpemUoY29uc3QgVCYg
dCkgeyByZXR1cm4gdC5zaXplKCk7IH0KfTsKCiAKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBU
cmFpdHM8VCo+CnsKICBzdGF0aWMgYm9vbCBnZXRfb3duZWQoKSB7IHJldHVybiBmYWxzZTsgfQog
IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCogZ2V0X2RhdGEoY29uc3QgVCogdCkKICAgIHsgcmV0
dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgY2hhciogY29uc3QqPih0KTsgfQogIHN0YXRpYyBzaXplX3Qg
Z2V0X3NpemUoY29uc3QgVCogdCkgeyByZXR1cm4gY291bnRfc3RyaW5ncyh0KTsgfQp9OwogCiAK
IAogCnRlbXBsYXRlIDxjbGFzcyBULCBzaXplX3QgTj4Kc3RydWN0IFRyYWl0czxUW05dPiA6IFRy
YWl0czxUKj4KewogIHN0YXRpYyBzaXplX3QgZ2V0X3NpemUoY29uc3QgVCopIHsgcmV0dXJuIE4g
LSAxOyB9Cn07CgoKIAogCiAKIAogCiAKIAogCiAKY2xhc3MgU0FycmF5CnsKICBTQXJyYXkmIG9w
ZXJhdG9yPShjb25zdCBTQXJyYXkmIGMpOyAgCgogIGNvbnN0IGJvb2wgb3duZWRfOwogIGNvbnN0
IHNpemVfdCBzaXplXzsKICBjb25zdCBjc3RyaW5nKiBjb25zdCBkYXRhXzsKCnB1YmxpYzoKICAg
CiAgdHlwZWRlZiBjb25zdCBjaGFyKiB2YWx1ZV90eXBlOwogIHR5cGVkZWYgY29uc3QgY2hhciog
Y29uc3QqIGl0ZXJhdG9yOwogIHR5cGVkZWYgY29uc3QgY2hhciogY29uc3QqIGNvbnN0X2l0ZXJh
dG9yOwogIHR5cGVkZWYgY29uc3QgY2hhciogY29uc3QqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25z
dCBjaGFyKiBjb25zdCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7
CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICAgCiAgU0FycmF5KGNvbnN0
IFNBcnJheSYgYykKICAgIDogb3duZWRfKGZhbHNlKSwgc2l6ZV8oYy5zaXplXyksIGRhdGFfKGMu
ZGF0YV8pIHsgfQoKCiAgIAogIHRlbXBsYXRlIDxjbGFzcyBUPgogIFNBcnJheShjb25zdCBUJiB0
KQogICAgOiBvd25lZF8oVHJhaXRzPFQ+OjpnZXRfb3duZWQoKSksIHNpemVfKFRyYWl0czxUPjo6
Z2V0X3NpemUodCkpLAogICAgIGRhdGFfKFRyYWl0czxUPjo6Z2V0X2RhdGEodCkpCiAgICB7IH0K
IyA3MjkgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLS0vYmFzZS5oIgoKCiAgIAogIHRlbXBsYXRlIDxj
bGFzcyBJdGVyYXRvcj4KICBTQXJyYXkoSXRlcmF0b3IgYixJdGVyYXRvciBlKQogICAgOiBvd25l
ZF8odHJ1ZSksIHNpemVfKHN0ZDo6ZGlzdGFuY2UoYiwgZSkpLCBkYXRhXyhjcmVhdGVfYXJyYXko
Yiwgc2l6ZV8pKQogICAgeyB9CgogIH5TQXJyYXkoKQogICAgeyBpZiAob3duZWRfKSBkZWxldGUg
W10gY29uc3RfY2FzdDxjb25zdCBjaGFyKio+KGRhdGFfKTsgfQoKICBvcGVyYXRvciBjb25zdCBj
aGFyKiogKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcioqPihkYXRh
Xyk7IH0KCiAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplXzsgfQoKICBjb25zdCBj
aGFyKiBjb25zdCogYmVnaW4oKSBjb25zdAogICAgeyByZXR1cm4gZGF0YV87IH0KICBjb25zdCBj
aGFyKiBjb25zdCogZW5kKCkgY29uc3QKICAgIHsgcmV0dXJuIGRhdGFfICsgc2l6ZV87IH0KICBj
b25zdCBjaGFyKiBvcGVyYXRvcltdKHNpemVfdCBuKSBjb25zdAogICAgeyByZXR1cm4gZGF0YV9b
bl07IH0KfTsKICAKaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTQXJyYXkmIHgsIGNvbnN0
IFNBcnJheSYgeSkKewogIHJldHVybiB4LmJlZ2luKCkgPT0geS5iZWdpbigpOwp9CiAgCn0gIAoK
dXNpbmcgU0FycmF5X0hlbHBlcnM6OlNBcnJheTsKCiMgODM0ICIvb3B0L2d0ay9pbmNsdWRlL2d0
ay0tL2Jhc2UuaCIKCgogCgoKIAogCiAKdGVtcGxhdGUgPGNsYXNzIGl0ZXJhdG9yPgpHTGlzdCog
Z3RrbW1fYnVpbGRfZ2xpc3QoaXRlcmF0b3Igc3RhcnQsaXRlcmF0b3Igc3RvcCkKICB7CiAgICBH
TGlzdCAqaXRlbXM9MDsKICAgIHdoaWxlIChzdGFydCE9c3RvcCkKICAgICAgewogICAgICAgIGlm
ICgqc3RhcnQpCiAgICAgICAgICB7CiAgICAgICAgICAgaWYgKCFpdGVtcykKICAgICAgICAgICAg
IGl0ZW1zPWdfbGlzdF9hcHBlbmQoaXRlbXMsKCpzdGFydCktPmd0a29iaigpKTsKICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGdfbGlzdF9hcHBlbmQoaXRlbXMs
KCpzdGFydCktPmd0a29iaigpKTsKICAgICAgICAgICAgICAgaXRlbXM9aXRlbXMtPm5leHQ7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgKytzdGFydDsKICAgICAgfQogICAgaWYg
KGl0ZW1zKSByZXR1cm4gZ19saXN0X2ZpcnN0KGl0ZW1zKTsKICAgIHJldHVybiAwOwogIH0KCn0g
IAoKCgojIDMwICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0tL29iamVjdC5oIiAyCgoKCnZvaWQgZ3Rr
bW1fb2JqZWN0X2Rlc3Ryb3koR3RrT2JqZWN0KiBvKTsKCm5hbWVzcGFjZSBHdGsgewpjbGFzcyBP
YmplY3Q7CmNsYXNzIE9iamVjdF9DbGFzczsKfQpuYW1lc3BhY2UgR3RrIHsgR3RrOjpPYmplY3Qg
KndyYXAgKEd0a09iamVjdCAqbyk7IH0KbmFtZXNwYWNlIEd0awp7CgpjbGFzcyBBcmdCYXNlOwoK
Y2xhc3MgV2lkZ2V0OwoKIApjbGFzcyBPYmplY3QgOiBwdWJsaWMgQmFzZQp7CgpwdWJsaWM6CiAg
dHlwZWRlZiBPYmplY3QgICAgICAgICAgQ3BwT2JqZWN0VHlwZTsKICB0eXBlZGVmIE9iamVjdF9D
bGFzcyAgICBDcHBDbGFzc1R5cGU7CiAgdHlwZWRlZiBHdGtPYmplY3QgICAgICAgICAgIEJhc2VP
YmplY3RUeXBlOwogIHR5cGVkZWYgR3RrT2JqZWN0Q2xhc3MgICAgICBCYXNlQ2xhc3NUeXBlOwoK
cHJpdmF0ZToKICBmcmllbmQgY2xhc3MgT2JqZWN0X0NsYXNzOwogIHN0YXRpYyBDcHBDbGFzc1R5
cGUgb2JqZWN0X2NsYXNzOwoKICBPYmplY3QoY29uc3QgT2JqZWN0Jik7CiAgT2JqZWN0JiBvcGVy
YXRvcj0oY29uc3QgT2JqZWN0Jik7ICAKCnByb3RlY3RlZDoKICB2b2lkICAgaW5pdGlhbGl6ZV9j
bGFzcygpOwogIGV4cGxpY2l0IE9iamVjdChHdGtPYmplY3QgKmNhc3RpdGVtKTsKCnB1YmxpYzoK
ICBzdGF0aWMgR3RrVHlwZSBnZXRfdHlwZSgpOwogIEd0a09iamVjdCogZ3Rrb2JqKCkgICAgICAg
ICAgICAgeyByZXR1cm4gKEd0a09iamVjdCopKGd0a29iamVjdCk7IH0KICBjb25zdCBHdGtPYmpl
Y3QqIGd0a29iaigpIGNvbnN0IHsgcmV0dXJuIChHdGtPYmplY3QqKShndGtvYmplY3QpOyB9CiAg
c3RhdGljIGJvb2wgaXNBKE9iamVjdCAqY2hlY2tjYXN0KTsKCiAgIAogIHN0YXRpYyBjb25zdCBj
aGFyKiBjb25zdCBzaWduYWxfbmFtZXNbXTsKCiAgdmlydHVhbCB+T2JqZWN0KCk7Cgpwcml2YXRl
OgoKcHJpdmF0ZToKICBmcmllbmQgY2xhc3MgR3RrOjpXaWRnZXQ7CiAgIAoKcHVibGljOgoKICBn
dWludCogc2lnbmFscygpIHsgcmV0dXJuICgoICggKCAgIGd0a29iaigpICAgKSAhPSBfX251bGwg
ICYmICggKCAoKEd0a09iamVjdCopICggICBndGtvYmooKSAgICkpLT5rbGFzcyApICE9IF9fbnVs
bCAgJiYgKChHdGtGdW5kYW1lbnRhbFR5cGUpICgoICgoR3RrT2JqZWN0Q2xhc3MqKSAoICgoR3Rr
T2JqZWN0KikgKCAgIGd0a29iaigpICAgKSktPmtsYXNzICkpLT50eXBlICkgJiAweEZGKSkgID09
IEdUS19UWVBFX09CSkVDVCApICApICA/IChHdGtPYmplY3QqKSAoICBndGtvYmooKSAgKSA6IChH
dGtPYmplY3QqKSBndGtfdHlwZV9jaGVja19vYmplY3RfY2FzdCAoKEd0a1R5cGVPYmplY3QqKSAo
ICBndGtvYmooKSAgKSwgR1RLX1RZUEVfT0JKRUNUKSApIC0+a2xhc3MtPnNpZ25hbHMpIDsgfQog
IGdpbnQgbnNpZ25hbHMoKSB7IHJldHVybiAoKCAoICggICBndGtvYmooKSAgICkgIT0gX19udWxs
ICAmJiAoICggKChHdGtPYmplY3QqKSAoICAgZ3Rrb2JqKCkgICApKS0+a2xhc3MgKSAhPSBfX251
bGwgICYmICgoR3RrRnVuZGFtZW50YWxUeXBlKSAoKCAoKEd0a09iamVjdENsYXNzKikgKCAoKEd0
a09iamVjdCopICggICBndGtvYmooKSAgICkpLT5rbGFzcyApKS0+dHlwZSApICYgMHhGRikpICA9
PSBHVEtfVFlQRV9PQkpFQ1QgKSAgKSAgPyAoR3RrT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICkgOiAo
R3RrT2JqZWN0KikgZ3RrX3R5cGVfY2hlY2tfb2JqZWN0X2Nhc3QgKChHdGtUeXBlT2JqZWN0Kikg
KCAgZ3Rrb2JqKCkgICksIEdUS19UWVBFX09CSkVDVCkgKSAtPmtsYXNzLT5uc2lnbmFscykgOyB9
CgogIGd1aW50IHR5cGUoKSB7IHJldHVybiAoKCAoICggICBndGtvYmooKSAgICkgIT0gX19udWxs
ICAmJiAoICggKChHdGtPYmplY3QqKSAoICAgZ3Rrb2JqKCkgICApKS0+a2xhc3MgKSAhPSBfX251
bGwgICYmICgoR3RrRnVuZGFtZW50YWxUeXBlKSAoKCAoKEd0a09iamVjdENsYXNzKikgKCAoKEd0
a09iamVjdCopICggICBndGtvYmooKSAgICkpLT5rbGFzcyApKS0+dHlwZSApICYgMHhGRikpICA9
PSBHVEtfVFlQRV9PQkpFQ1QgKSAgKSAgPyAoR3RrT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICkgOiAo
R3RrT2JqZWN0KikgZ3RrX3R5cGVfY2hlY2tfb2JqZWN0X2Nhc3QgKChHdGtUeXBlT2JqZWN0Kikg
KCAgZ3Rrb2JqKCkgICksIEdUS19UWVBFX09CSkVDVCkgKSAtPmtsYXNzLT50eXBlKSA7IH0KCiAg
IAogICAKICAgCiAgIAogICAKCiAgdm9pZCBkZXN0cm95XygpOwoKCiAgdm9pZCBzZXRfdXNlcl9k
YXRhKGdwb2ludGVyIGRhdGEpOwoKICBncG9pbnRlciBnZXRfdXNlcl9kYXRhKCkgY29uc3Q7CgoK
CiAgdm9pZCBzZXRfZGF0YShjb25zdCBzdHJpbmcmIGtleSxncG9pbnRlciBkYXRhKTsKCiAgZ3Bv
aW50ZXIgZ2V0X2RhdGEoY29uc3Qgc3RyaW5nJiBrZXkpIGNvbnN0OwoKICBncG9pbnRlciBnZXRf
ZGF0YV9ieV9pZChHUXVhcmsgZGF0YV9pZCkgY29uc3Q7CgogICAKICAgCiAgIAoKICAgCiAgIAog
ICAKICAgCgoKCgoKICB2b2lkIHNldF9kYXRhX2Z1bGwoY29uc3Qgc3RyaW5nJiBrZXksZ3BvaW50
ZXIgZGF0YSxHdGtEZXN0cm95Tm90aWZ5IGRlc3Ryb3kpOwoKCgogIHZvaWQgc2V0X2RhdGFfYnlf
aWQoR1F1YXJrIGRhdGFfaWQsZ3BvaW50ZXIgZGF0YSk7CgoKCgoKICB2b2lkIHNldF9kYXRhX2J5
X2lkX2Z1bGwoR1F1YXJrIGRhdGFfaWQsZ3BvaW50ZXIgZGF0YSxHdGtEZXN0cm95Tm90aWZ5IGRl
c3Ryb3kpOwoKCiAgdm9pZCByZW1vdmVfZGF0YShjb25zdCBzdHJpbmcmIGtleSk7CgogIHZvaWQg
cmVtb3ZlX25vX25vdGlmeShjb25zdCBzdHJpbmcmIGtleSk7CgogIHZvaWQgcmVtb3ZlX2RhdGFf
YnlfaWQoR1F1YXJrIGRhdGFfaWQpOwoKICB2b2lkIHJlbW92ZV9ub19ub3RpZnlfYnlfaWQoR1F1
YXJrIGRhdGFfaWQpOwoKCiAgIAoKICAgCiAgdmlydHVhbCB2b2lkIHNldF9keW5hbWljKCk7Cgpw
cm90ZWN0ZWQ6CiAgR3RrT2JqZWN0ICpndGtvYmplY3Q7CgogICAKICB2aXJ0dWFsIHZvaWQgcmVm
ZXJlbmNlKCk7CiAgdmlydHVhbCB2b2lkIHVucmVmZXJlbmNlKCk7CgogICAKICBib29sIHJlZmVy
ZW5jZWRfOwogIGJvb2wgZGVzdHJveWVkXzsKCiAgIAoKICBzdGF0aWMgdm9pZCBkZXN0cm95X25v
dGlmeV8oZ3BvaW50ZXIgcyk7CgoKCgoKICB2b2lkIHdlYWtyZWYoR3RrRGVzdHJveU5vdGlmeSBu
b3RpZnksZ3BvaW50ZXIgZGF0YSk7CgoKCgogIHZvaWQgd2Vha3VucmVmKEd0a0Rlc3Ryb3lOb3Rp
Znkgbm90aWZ5LGdwb2ludGVyIGRhdGEpOwoKICBzdGF0aWMgdm9pZCBndGttbV9zaWdzZWd2KGNv
bnN0IGNoYXIgKm5hbWUpOwoKcHJvdGVjdGVkOgogIHZvaWQgc2V0X3R5cGUoR3RrVHlwZSB0eXBl
KTsKCnB1YmxpYzoKCiAgdW5pb24KICAgIHsKICAgICAgQ3BwT2JqZWN0VHlwZSAqIG9iamVjdF9z
ZWxmOwogICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDA8dm9pZCxDcHBPYmplY3RUeXBlLEJhc2VP
YmplY3RUeXBlLDAsJmd0a21tX29iamVjdF9kZXN0cm95PiBkZXN0cm95OwogICAgfTsKCnByb3Rl
Y3RlZDoKICAgCgp9OwoKIAppbmxpbmUgR3RrT2JqZWN0KiB1bndyYXAoR3RrOjpPYmplY3Qqbykg
eyByZXR1cm4gbz9vLT5ndGtvYmooKTowOyB9CgoKfQoKCiAKIAogCiAKIAogCiAKIAogCiAKCiAK
IAogCiAKIAogCiAKCiAKIAogCiAKIAogCiAKCgojIDMyICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0t
L3dpZGdldC5oIiAyCgogCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9ndGstMS4yL2d0ay9ndGtkbmQu
aCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgojIDEgIi9vcHQvZ3RrL2luY2x1
ZGUvZ3RrLTEuMi9ndGsvZ3Rrd2lkZ2V0LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK
CgoKCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLTEuMi9ndGsvZ3RrYWNjZWxncm91cC5oIiAx
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoK
CnR5cGVkZWYgc3RydWN0IF9HdGtBY2NlbEdyb3VwCUd0a0FjY2VsR3JvdXA7CnR5cGVkZWYgc3Ry
dWN0IF9HdGtBY2NlbEVudHJ5CUd0a0FjY2VsRW50cnk7Cgp0eXBlZGVmIGVudW0KewogICAKCgog
IEdUS19BQ0NFTF9WSVNJQkxFICAgICAgICA9IDEgPDwgMCwKICAgCgoKICBHVEtfQUNDRUxfU0lH
TkFMX1ZJU0lCTEUgPSAxIDw8IDEsCiAgIAoKCiAgR1RLX0FDQ0VMX0xPQ0tFRCAgICAgICAgID0g
MSA8PCAyLAogIEdUS19BQ0NFTF9NQVNLICAgICAgICAgICA9IDB4MDcKfSBHdGtBY2NlbEZsYWdz
OwoKc3RydWN0IF9HdGtBY2NlbEdyb3VwCnsKICBndWludAkgICAgICAgICAgcmVmX2NvdW50Owog
IGd1aW50CSAgICAgICAgICBsb2NrX2NvdW50OwogIEdka01vZGlmaWVyVHlwZSBtb2RpZmllcl9t
YXNrOwogIEdTTGlzdCAgICAgICAgICphdHRhY2hfb2JqZWN0czsKfTsKCnN0cnVjdCBfR3RrQWNj
ZWxFbnRyeQp7CiAgIAoKICBHdGtBY2NlbEdyb3VwCQkqYWNjZWxfZ3JvdXA7CiAgZ3VpbnQJCQkg
YWNjZWxlcmF0b3Jfa2V5OwogIEdka01vZGlmaWVyVHlwZQkgYWNjZWxlcmF0b3JfbW9kczsKICAK
ICBHdGtBY2NlbEZsYWdzCQkgYWNjZWxfZmxhZ3M7CiAgR3RrT2JqZWN0CQkqb2JqZWN0OwogIGd1
aW50CQkJIHNpZ25hbF9pZDsKfTsKCgogCgpnYm9vbGVhbiBndGtfYWNjZWxlcmF0b3JfdmFsaWQJ
CSAgICAgIChndWludAkgICAgICAgIGtleXZhbCwKCQkJCQkgICAgICAgR2RrTW9kaWZpZXJUeXBl
ICBtb2RpZmllcnMpOwp2b2lkCSBndGtfYWNjZWxlcmF0b3JfcGFyc2UJCSAgICAgIChjb25zdCBn
Y2hhciAgICAgKmFjY2VsZXJhdG9yLAoJCQkJCSAgICAgICBndWludAkgICAgICAgKmFjY2VsZXJh
dG9yX2tleSwKCQkJCQkgICAgICAgR2RrTW9kaWZpZXJUeXBlICphY2NlbGVyYXRvcl9tb2RzKTsK
Z2NoYXIqCSBndGtfYWNjZWxlcmF0b3JfbmFtZQkJICAgICAgKGd1aW50CSAgICAgICAgYWNjZWxl
cmF0b3Jfa2V5LAoJCQkJCSAgICAgICBHZGtNb2RpZmllclR5cGUgIGFjY2VsZXJhdG9yX21vZHMp
Owp2b2lkCSBndGtfYWNjZWxlcmF0b3Jfc2V0X2RlZmF1bHRfbW9kX21hc2sgKEdka01vZGlmaWVy
VHlwZSAgZGVmYXVsdF9tb2RfbWFzayk7Cmd1aW50CSBndGtfYWNjZWxlcmF0b3JfZ2V0X2RlZmF1
bHRfbW9kX21hc2sgKHZvaWQpOwoKCiAKCkd0a0FjY2VsR3JvdXAqICBndGtfYWNjZWxfZ3JvdXBf
bmV3CSAgICAgIAkodm9pZCk7Ckd0a0FjY2VsR3JvdXAqICBndGtfYWNjZWxfZ3JvdXBfZ2V0X2Rl
ZmF1bHQgICAgCSh2b2lkKTsKR3RrQWNjZWxHcm91cCogIGd0a19hY2NlbF9ncm91cF9yZWYJICAg
ICAJKEd0a0FjY2VsR3JvdXAJKmFjY2VsX2dyb3VwKTsKdm9pZAkgICAgICAgIGd0a19hY2NlbF9n
cm91cF91bnJlZgkgICAgICAJKEd0a0FjY2VsR3JvdXAJKmFjY2VsX2dyb3VwKTsKdm9pZAkJZ3Rr
X2FjY2VsX2dyb3VwX2xvY2sJCShHdGtBY2NlbEdyb3VwCSphY2NlbF9ncm91cCk7CnZvaWQJCWd0
a19hY2NlbF9ncm91cF91bmxvY2sJCShHdGtBY2NlbEdyb3VwCSphY2NlbF9ncm91cCk7Cmdib29s
ZWFuICAgICAgICBndGtfYWNjZWxfZ3JvdXBzX2FjdGl2YXRlICAgICAgCShHdGtPYmplY3QJKm9i
amVjdCwKCQkJCQkJIGd1aW50CQkgYWNjZWxfa2V5LAoJCQkJCQkgR2RrTW9kaWZpZXJUeXBlIGFj
Y2VsX21vZHMpOwoKIAoKZ2Jvb2xlYW4gICAgICAgIGd0a19hY2NlbF9ncm91cF9hY3RpdmF0ZQko
R3RrQWNjZWxHcm91cAkqYWNjZWxfZ3JvdXAsCgkJCQkJCSBndWludAkJIGFjY2VsX2tleSwKCQkJ
CQkJIEdka01vZGlmaWVyVHlwZSBhY2NlbF9tb2RzKTsKdm9pZAkJZ3RrX2FjY2VsX2dyb3VwX2F0
dGFjaAkJKEd0a0FjY2VsR3JvdXAJKmFjY2VsX2dyb3VwLAoJCQkJCQkgR3RrT2JqZWN0CSpvYmpl
Y3QpOwp2b2lkCQlndGtfYWNjZWxfZ3JvdXBfZGV0YWNoCQkoR3RrQWNjZWxHcm91cAkqYWNjZWxf
Z3JvdXAsCgkJCQkJCSBHdGtPYmplY3QJKm9iamVjdCk7CgogCgpHdGtBY2NlbEVudHJ5KiAJZ3Rr
X2FjY2VsX2dyb3VwX2dldF9lbnRyeSAgICAgIAkoR3RrQWNjZWxHcm91cCAgKmFjY2VsX2dyb3Vw
LAoJCQkJCQkgZ3VpbnQgICAgICAgICAgIGFjY2VsX2tleSwKCQkJCQkJIEdka01vZGlmaWVyVHlw
ZSBhY2NlbF9tb2RzKTsKdm9pZAkJZ3RrX2FjY2VsX2dyb3VwX2xvY2tfZW50cnkJKEd0a0FjY2Vs
R3JvdXAJKmFjY2VsX2dyb3VwLAoJCQkJCQkgZ3VpbnQJCSBhY2NlbF9rZXksCgkJCQkJCSBHZGtN
b2RpZmllclR5cGUgYWNjZWxfbW9kcyk7CnZvaWQJCWd0a19hY2NlbF9ncm91cF91bmxvY2tfZW50
cnkJKEd0a0FjY2VsR3JvdXAJKmFjY2VsX2dyb3VwLAoJCQkJCQkgZ3VpbnQJCSBhY2NlbF9rZXks
CgkJCQkJCSBHZGtNb2RpZmllclR5cGUgYWNjZWxfbW9kcyk7CnZvaWQJCWd0a19hY2NlbF9ncm91
cF9hZGQJCShHdGtBY2NlbEdyb3VwCSphY2NlbF9ncm91cCwKCQkJCQkJIGd1aW50CQkgYWNjZWxf
a2V5LAoJCQkJCQkgR2RrTW9kaWZpZXJUeXBlIGFjY2VsX21vZHMsCgkJCQkJCSBHdGtBY2NlbEZs
YWdzCSBhY2NlbF9mbGFncywKCQkJCQkJIEd0a09iamVjdAkqb2JqZWN0LAoJCQkJCQkgY29uc3Qg
Z2NoYXIJKmFjY2VsX3NpZ25hbCk7CnZvaWQJCWd0a19hY2NlbF9ncm91cF9yZW1vdmUJCShHdGtB
Y2NlbEdyb3VwCSphY2NlbF9ncm91cCwKCQkJCQkJIGd1aW50CQkgYWNjZWxfa2V5LAoJCQkJCQkg
R2RrTW9kaWZpZXJUeXBlIGFjY2VsX21vZHMsCgkJCQkJCSBHdGtPYmplY3QJKm9iamVjdCk7Cgog
Cgp2b2lkCQlndGtfYWNjZWxfZ3JvdXBfaGFuZGxlX2FkZAkoR3RrT2JqZWN0CSpvYmplY3QsCgkJ
CQkJCSBndWludAkJIGFjY2VsX3NpZ25hbF9pZCwKCQkJCQkJIEd0a0FjY2VsR3JvdXAJKmFjY2Vs
X2dyb3VwLAoJCQkJCQkgZ3VpbnQJCSBhY2NlbF9rZXksCgkJCQkJCSBHZGtNb2RpZmllclR5cGUg
YWNjZWxfbW9kcywKCQkJCQkJIEd0a0FjY2VsRmxhZ3MgICBhY2NlbF9mbGFncyk7CnZvaWQJCWd0
a19hY2NlbF9ncm91cF9oYW5kbGVfcmVtb3ZlCShHdGtPYmplY3QJKm9iamVjdCwKCQkJCQkJIEd0
a0FjY2VsR3JvdXAJKmFjY2VsX2dyb3VwLAoJCQkJCQkgZ3VpbnQJCSBhY2NlbF9rZXksCgkJCQkJ
CSBHZGtNb2RpZmllclR5cGUgYWNjZWxfbW9kcyk7Cmd1aW50CQlndGtfYWNjZWxfZ3JvdXBfY3Jl
YXRlX2FkZAkoR3RrVHlwZQkgY2xhc3NfdHlwZSwKCQkJCQkJIEd0a1NpZ25hbFJ1blR5cGUgc2ln
bmFsX2ZsYWdzLAoJCQkJCQkgZ3VpbnQJCSBoYW5kbGVyX29mZnNldCk7Cmd1aW50CQlndGtfYWNj
ZWxfZ3JvdXBfY3JlYXRlX3JlbW92ZQkoR3RrVHlwZQkgY2xhc3NfdHlwZSwKCQkJCQkJIEd0a1Np
Z25hbFJ1blR5cGUgc2lnbmFsX2ZsYWdzLAoJCQkJCQkgZ3VpbnQJCSBoYW5kbGVyX29mZnNldCk7
CgogCgpHU0xpc3QqCWd0a19hY2NlbF9ncm91cHNfZnJvbV9vYmplY3QJCShHdGtPYmplY3QJKm9i
amVjdCk7CkdTTGlzdCoJZ3RrX2FjY2VsX2dyb3VwX2VudHJpZXNfZnJvbV9vYmplY3QJKEd0a09i
amVjdAkqb2JqZWN0KTsKCgoKCn0KCgoKCiMgMzEgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLTEuMi9n
dGsvZ3Rrd2lkZ2V0LmgiIDIKCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLTEuMi9ndGsvZ3Rr
YWRqdXN0bWVudC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiMgMSAiL29w
dC9ndGsvaW5jbHVkZS9ndGstMS4yL2d0ay9ndGtkYXRhLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoK
CgogCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0
IF9HdGtEYXRhICAgICAgIEd0a0RhdGE7CnR5cGVkZWYgc3RydWN0IF9HdGtEYXRhQ2xhc3MgIEd0
a0RhdGFDbGFzczsKCnN0cnVjdCBfR3RrRGF0YQp7CiAgR3RrT2JqZWN0IG9iamVjdDsKfTsKCnN0
cnVjdCBfR3RrRGF0YUNsYXNzCnsKICBHdGtPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CgogIHZv
aWQgKCogZGlzY29ubmVjdCkgKEd0a0RhdGEgKmRhdGEpOwp9OwoKCkd0a1R5cGUgZ3RrX2RhdGFf
Z2V0X3R5cGUgKHZvaWQpOwoKCgp9CgoKCgojIDMyICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIv
Z3RrL2d0a2FkanVzdG1lbnQuaCIgMgoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgp0eXBlZGVm
IHN0cnVjdCBfR3RrQWRqdXN0bWVudAkgICAgR3RrQWRqdXN0bWVudDsKdHlwZWRlZiBzdHJ1Y3Qg
X0d0a0FkanVzdG1lbnRDbGFzcyAgR3RrQWRqdXN0bWVudENsYXNzOwoKc3RydWN0IF9HdGtBZGp1
c3RtZW50CnsKICBHdGtEYXRhIGRhdGE7CiAgCiAgZ2Zsb2F0IGxvd2VyOwogIGdmbG9hdCB1cHBl
cjsKICBnZmxvYXQgdmFsdWU7CiAgZ2Zsb2F0IHN0ZXBfaW5jcmVtZW50OwogIGdmbG9hdCBwYWdl
X2luY3JlbWVudDsKICBnZmxvYXQgcGFnZV9zaXplOwp9OwoKc3RydWN0IF9HdGtBZGp1c3RtZW50
Q2xhc3MKewogIEd0a0RhdGFDbGFzcyBwYXJlbnRfY2xhc3M7CiAgCiAgdm9pZCAoKiBjaGFuZ2Vk
KQkgKEd0a0FkanVzdG1lbnQgKmFkanVzdG1lbnQpOwogIHZvaWQgKCogdmFsdWVfY2hhbmdlZCkg
KEd0a0FkanVzdG1lbnQgKmFkanVzdG1lbnQpOwp9OwoKCkd0a1R5cGUJICAgZ3RrX2FkanVzdG1l
bnRfZ2V0X3R5cGUJCSh2b2lkKTsKR3RrT2JqZWN0KiBndGtfYWRqdXN0bWVudF9uZXcJCQkoZ2Zs
b2F0CQkgIHZhbHVlLAoJCQkJCQkgZ2Zsb2F0CQkgIGxvd2VyLAoJCQkJCQkgZ2Zsb2F0CQkgIHVw
cGVyLAoJCQkJCQkgZ2Zsb2F0CQkgIHN0ZXBfaW5jcmVtZW50LAoJCQkJCQkgZ2Zsb2F0CQkgIHBh
Z2VfaW5jcmVtZW50LAoJCQkJCQkgZ2Zsb2F0CQkgIHBhZ2Vfc2l6ZSk7CnZvaWQJICAgZ3RrX2Fk
anVzdG1lbnRfY2hhbmdlZAkJKEd0a0FkanVzdG1lbnQJICphZGp1c3RtZW50KTsKdm9pZAkgICBn
dGtfYWRqdXN0bWVudF92YWx1ZV9jaGFuZ2VkCQkoR3RrQWRqdXN0bWVudAkgKmFkanVzdG1lbnQp
Owp2b2lkCSAgIGd0a19hZGp1c3RtZW50X2NsYW1wX3BhZ2UJCShHdGtBZGp1c3RtZW50CSAqYWRq
dXN0bWVudCwKCQkJCQkJIGdmbG9hdAkJICBsb3dlciwKCQkJCQkJIGdmbG9hdAkJICB1cHBlcik7
CnZvaWQJICAgZ3RrX2FkanVzdG1lbnRfc2V0X3ZhbHVlCQkoR3RrQWRqdXN0bWVudAkgKmFkanVz
dG1lbnQsCgkJCQkJCSBnZmxvYXQJCSAgdmFsdWUpOwoKCn0KCgoKCiMgMzMgIi9vcHQvZ3RrL2lu
Y2x1ZGUvZ3RrLTEuMi9ndGsvZ3Rrd2lkZ2V0LmgiIDIKCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9n
dGstMS4yL2d0ay9ndGtzdHlsZS5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoK
CgoKCmV4dGVybiAiQyIgewoKCnR5cGVkZWYgc3RydWN0IF9HdGtTdHlsZSAgICAgICBHdGtTdHls
ZTsKdHlwZWRlZiBzdHJ1Y3QgX0d0a1N0eWxlQ2xhc3MgIEd0a1N0eWxlQ2xhc3M7CgogCgoKdHlw
ZWRlZiBzdHJ1Y3QgX0d0a1RoZW1lRW5naW5lIEd0a1RoZW1lRW5naW5lOwp0eXBlZGVmIHN0cnVj
dCBfR3RrUmNTdHlsZSAgICAgR3RrUmNTdHlsZTsKCgogCgoKdHlwZWRlZiBzdHJ1Y3QgX0d0a1dp
ZGdldCAgICAgIEd0a1dpZGdldDsKCiAKCgoKCgoKc3RydWN0IF9HdGtTdHlsZQp7CiAgR3RrU3R5
bGVDbGFzcyAqa2xhc3M7CgogIEdka0NvbG9yIGZnWzVdOwogIEdka0NvbG9yIGJnWzVdOwogIEdk
a0NvbG9yIGxpZ2h0WzVdOwogIEdka0NvbG9yIGRhcmtbNV07CiAgR2RrQ29sb3IgbWlkWzVdOwog
IEdka0NvbG9yIHRleHRbNV07CiAgR2RrQ29sb3IgYmFzZVs1XTsKICAKICBHZGtDb2xvciBibGFj
azsKICBHZGtDb2xvciB3aGl0ZTsKICBHZGtGb250ICpmb250OwogIAogIEdka0dDICpmZ19nY1s1
XTsKICBHZGtHQyAqYmdfZ2NbNV07CiAgR2RrR0MgKmxpZ2h0X2djWzVdOwogIEdka0dDICpkYXJr
X2djWzVdOwogIEdka0dDICptaWRfZ2NbNV07CiAgR2RrR0MgKnRleHRfZ2NbNV07CiAgR2RrR0Mg
KmJhc2VfZ2NbNV07CiAgR2RrR0MgKmJsYWNrX2djOwogIEdka0dDICp3aGl0ZV9nYzsKICAKICBH
ZGtQaXhtYXAgKmJnX3BpeG1hcFs1XTsKICAKICAgCiAgCiAgZ2ludCByZWZfY291bnQ7CiAgZ2lu
dCBhdHRhY2hfY291bnQ7CiAgCiAgZ2ludCBkZXB0aDsKICBHZGtDb2xvcm1hcCAqY29sb3JtYXA7
CiAgCiAgR3RrVGhlbWVFbmdpbmUgKmVuZ2luZTsKICAKICBncG9pbnRlcgkgIGVuZ2luZV9kYXRh
OwogIAogIEd0a1JjU3R5bGUJICpyY19zdHlsZTsJIAoKCiAgR1NMaXN0CSAqc3R5bGVzOwp9OwoK
c3RydWN0IF9HdGtTdHlsZUNsYXNzCnsKICBnaW50IHh0aGlja25lc3M7CiAgZ2ludCB5dGhpY2tu
ZXNzOwogIAogIHZvaWQgKCpkcmF3X2hsaW5lKQkJKEd0a1N0eWxlCQkqc3R5bGUsCgkJCQkgR2Rr
V2luZG93CQkqd2luZG93LAoJCQkJIEd0a1N0YXRlVHlwZQkJIHN0YXRlX3R5cGUsCgkJCQkgR2Rr
UmVjdGFuZ2xlCQkqYXJlYSwKCQkJCSBHdGtXaWRnZXQJCSp3aWRnZXQsCgkJCQkgZ2NoYXIJCQkq
ZGV0YWlsLAoJCQkJIGdpbnQJCQkgeDEsCgkJCQkgZ2ludAkJCSB4MiwKCQkJCSBnaW50CQkJIHkp
OwogIHZvaWQgKCpkcmF3X3ZsaW5lKQkJKEd0a1N0eWxlCQkqc3R5bGUsCgkJCQkgR2RrV2luZG93
CQkqd2luZG93LAoJCQkJIEd0a1N0YXRlVHlwZQkJIHN0YXRlX3R5cGUsCgkJCQkgR2RrUmVjdGFu
Z2xlCQkqYXJlYSwKCQkJCSBHdGtXaWRnZXQJCSp3aWRnZXQsCgkJCQkgZ2NoYXIJCQkqZGV0YWls
LAoJCQkJIGdpbnQJCQkgeTEsCgkJCQkgZ2ludAkJCSB5MiwKCQkJCSBnaW50CQkJIHgpOwogIHZv
aWQgKCpkcmF3X3NoYWRvdykJCShHdGtTdHlsZQkJKnN0eWxlLAoJCQkJIEdka1dpbmRvdwkJKndp
bmRvdywKCQkJCSBHdGtTdGF0ZVR5cGUJCSBzdGF0ZV90eXBlLAoJCQkJIEd0a1NoYWRvd1R5cGUJ
CSBzaGFkb3dfdHlwZSwKCQkJCSBHZGtSZWN0YW5nbGUJCSphcmVhLAoJCQkJIEd0a1dpZGdldAkJ
KndpZGdldCwKCQkJCSBnY2hhcgkJCSpkZXRhaWwsCgkJCQkgZ2ludAkJCSB4LAoJCQkJIGdpbnQJ
CQkgeSwKCQkJCSBnaW50CQkJIHdpZHRoLAoJCQkJIGdpbnQJCQkgaGVpZ2h0KTsKICB2b2lkICgq
ZHJhd19wb2x5Z29uKQkJKEd0a1N0eWxlCQkqc3R5bGUsCgkJCQkgR2RrV2luZG93CQkqd2luZG93
LAoJCQkJIEd0a1N0YXRlVHlwZQkJIHN0YXRlX3R5cGUsCgkJCQkgR3RrU2hhZG93VHlwZQkJIHNo
YWRvd190eXBlLAoJCQkJIEdka1JlY3RhbmdsZQkJKmFyZWEsCgkJCQkgR3RrV2lkZ2V0CQkqd2lk
Z2V0LAoJCQkJIGdjaGFyCQkJKmRldGFpbCwKCQkJCSBHZGtQb2ludAkJKnBvaW50LAoJCQkJIGdp
bnQJCQkgbnBvaW50cywKCQkJCSBnYm9vbGVhbgkJIGZpbGwpOwogIHZvaWQgKCpkcmF3X2Fycm93
KQkJKEd0a1N0eWxlCQkqc3R5bGUsCgkJCQkgR2RrV2luZG93CQkqd2luZG93LAoJCQkJIEd0a1N0
YXRlVHlwZQkJIHN0YXRlX3R5cGUsCgkJCQkgR3RrU2hhZG93VHlwZQkJIHNoYWRvd190eXBlLAoJ
CQkJIEdka1JlY3RhbmdsZQkJKmFyZWEsCgkJCQkgR3RrV2lkZ2V0CQkqd2lkZ2V0LAoJCQkJIGdj
aGFyCQkJKmRldGFpbCwKCQkJCSBHdGtBcnJvd1R5cGUJCSBhcnJvd190eXBlLAoJCQkJIGdib29s
ZWFuCQkgZmlsbCwKCQkJCSBnaW50CQkJIHgsCgkJCQkgZ2ludAkJCSB5LAoJCQkJIGdpbnQJCQkg
d2lkdGgsCgkJCQkgZ2ludAkJCSBoZWlnaHQpOwogIHZvaWQgKCpkcmF3X2RpYW1vbmQpCQkoR3Rr
U3R5bGUJCSpzdHlsZSwKCQkJCSBHZGtXaW5kb3cJCSp3aW5kb3csCgkJCQkgR3RrU3RhdGVUeXBl
CQkgc3RhdGVfdHlwZSwKCQkJCSBHdGtTaGFkb3dUeXBlCQkgc2hhZG93X3R5cGUsCgkJCQkgR2Rr
UmVjdGFuZ2xlCQkqYXJlYSwKCQkJCSBHdGtXaWRnZXQJCSp3aWRnZXQsCgkJCQkgZ2NoYXIJCQkq
ZGV0YWlsLAoJCQkJIGdpbnQJCQkgeCwKCQkJCSBnaW50CQkJIHksCgkJCQkgZ2ludAkJCSB3aWR0
aCwKCQkJCSBnaW50CQkJIGhlaWdodCk7CiAgdm9pZCAoKmRyYXdfb3ZhbCkJCShHdGtTdHlsZQkJ
KnN0eWxlLAoJCQkJIEdka1dpbmRvdwkJKndpbmRvdywKCQkJCSBHdGtTdGF0ZVR5cGUJCSBzdGF0
ZV90eXBlLAoJCQkJIEd0a1NoYWRvd1R5cGUJCSBzaGFkb3dfdHlwZSwKCQkJCSBHZGtSZWN0YW5n
bGUJCSphcmVhLAoJCQkJIEd0a1dpZGdldAkJKndpZGdldCwKCQkJCSBnY2hhcgkJCSpkZXRhaWws
CgkJCQkgZ2ludAkJCSB4LAoJCQkJIGdpbnQJCQkgeSwKCQkJCSBnaW50CQkJIHdpZHRoLAoJCQkJ
IGdpbnQJCQkgaGVpZ2h0KTsKICB2b2lkICgqZHJhd19zdHJpbmcpCQkoR3RrU3R5bGUJCSpzdHls
ZSwKCQkJCSBHZGtXaW5kb3cJCSp3aW5kb3csCgkJCQkgR3RrU3RhdGVUeXBlCQkgc3RhdGVfdHlw
ZSwKCQkJCSBHZGtSZWN0YW5nbGUJCSphcmVhLAoJCQkJIEd0a1dpZGdldAkJKndpZGdldCwKCQkJ
CSBnY2hhcgkJCSpkZXRhaWwsCgkJCQkgZ2ludAkJCSB4LAoJCQkJIGdpbnQJCQkgeSwKCQkJCSBj
b25zdCBnY2hhcgkJKnN0cmluZyk7CiAgdm9pZCAoKmRyYXdfYm94KQkJKEd0a1N0eWxlCQkqc3R5
bGUsCgkJCQkgR2RrV2luZG93CQkqd2luZG93LAoJCQkJIEd0a1N0YXRlVHlwZQkJIHN0YXRlX3R5
cGUsCgkJCQkgR3RrU2hhZG93VHlwZQkJIHNoYWRvd190eXBlLAoJCQkJIEdka1JlY3RhbmdsZQkJ
KmFyZWEsCgkJCQkgR3RrV2lkZ2V0CQkqd2lkZ2V0LAoJCQkJIGdjaGFyCQkJKmRldGFpbCwKCQkJ
CSBnaW50CQkJIHgsCgkJCQkgZ2ludAkJCSB5LAoJCQkJIGdpbnQJCQkgd2lkdGgsCgkJCQkgZ2lu
dAkJCSBoZWlnaHQpOwogIHZvaWQgKCpkcmF3X2ZsYXRfYm94KQkJKEd0a1N0eWxlCQkqc3R5bGUs
CgkJCQkgR2RrV2luZG93CQkqd2luZG93LAoJCQkJIEd0a1N0YXRlVHlwZQkJIHN0YXRlX3R5cGUs
CgkJCQkgR3RrU2hhZG93VHlwZQkJIHNoYWRvd190eXBlLAoJCQkJIEdka1JlY3RhbmdsZQkJKmFy
ZWEsCgkJCQkgR3RrV2lkZ2V0CQkqd2lkZ2V0LAoJCQkJIGdjaGFyCQkJKmRldGFpbCwKCQkJCSBn
aW50CQkJIHgsCgkJCQkgZ2ludAkJCSB5LAoJCQkJIGdpbnQJCQkgd2lkdGgsCgkJCQkgZ2ludAkJ
CSBoZWlnaHQpOwogIHZvaWQgKCpkcmF3X2NoZWNrKQkJKEd0a1N0eWxlCQkqc3R5bGUsCgkJCQkg
R2RrV2luZG93CQkqd2luZG93LAoJCQkJIEd0a1N0YXRlVHlwZQkJIHN0YXRlX3R5cGUsCgkJCQkg
R3RrU2hhZG93VHlwZQkJIHNoYWRvd190eXBlLAoJCQkJIEdka1JlY3RhbmdsZQkJKmFyZWEsCgkJ
CQkgR3RrV2lkZ2V0CQkqd2lkZ2V0LAoJCQkJIGdjaGFyCQkJKmRldGFpbCwKCQkJCSBnaW50CQkJ
IHgsCgkJCQkgZ2ludAkJCSB5LAoJCQkJIGdpbnQJCQkgd2lkdGgsCgkJCQkgZ2ludAkJCSBoZWln
aHQpOwogIHZvaWQgKCpkcmF3X29wdGlvbikJCShHdGtTdHlsZQkJKnN0eWxlLAoJCQkJIEdka1dp
bmRvdwkJKndpbmRvdywKCQkJCSBHdGtTdGF0ZVR5cGUJCSBzdGF0ZV90eXBlLAoJCQkJIEd0a1No
YWRvd1R5cGUJCSBzaGFkb3dfdHlwZSwKCQkJCSBHZGtSZWN0YW5nbGUJCSphcmVhLAoJCQkJIEd0
a1dpZGdldAkJKndpZGdldCwKCQkJCSBnY2hhcgkJCSpkZXRhaWwsCgkJCQkgZ2ludAkJCSB4LAoJ
CQkJIGdpbnQJCQkgeSwKCQkJCSBnaW50CQkJIHdpZHRoLAoJCQkJIGdpbnQJCQkgaGVpZ2h0KTsK
ICB2b2lkICgqZHJhd19jcm9zcykJCShHdGtTdHlsZQkJKnN0eWxlLAoJCQkJIEdka1dpbmRvdwkJ
KndpbmRvdywKCQkJCSBHdGtTdGF0ZVR5cGUJCSBzdGF0ZV90eXBlLAoJCQkJIEd0a1NoYWRvd1R5
cGUJCSBzaGFkb3dfdHlwZSwKCQkJCSBHZGtSZWN0YW5nbGUJCSphcmVhLAoJCQkJIEd0a1dpZGdl
dAkJKndpZGdldCwKCQkJCSBnY2hhcgkJCSpkZXRhaWwsCgkJCQkgZ2ludAkJCSB4LAoJCQkJIGdp
bnQJCQkgeSwKCQkJCSBnaW50CQkJIHdpZHRoLAoJCQkJIGdpbnQJCQkgaGVpZ2h0KTsKICB2b2lk
ICgqZHJhd19yYW1wKQkJKEd0a1N0eWxlCQkqc3R5bGUsCgkJCQkgR2RrV2luZG93CQkqd2luZG93
LAoJCQkJIEd0a1N0YXRlVHlwZQkJIHN0YXRlX3R5cGUsCgkJCQkgR3RrU2hhZG93VHlwZQkJIHNo
YWRvd190eXBlLAoJCQkJIEdka1JlY3RhbmdsZQkJKmFyZWEsCgkJCQkgR3RrV2lkZ2V0CQkqd2lk
Z2V0LAoJCQkJIGdjaGFyCQkJKmRldGFpbCwKCQkJCSBHdGtBcnJvd1R5cGUJCSBhcnJvd190eXBl
LAoJCQkJIGdpbnQJCQkgeCwKCQkJCSBnaW50CQkJIHksCgkJCQkgZ2ludAkJCSB3aWR0aCwKCQkJ
CSBnaW50CQkJIGhlaWdodCk7CiAgdm9pZCAoKmRyYXdfdGFiKQkJKEd0a1N0eWxlCQkqc3R5bGUs
CgkJCQkgR2RrV2luZG93CQkqd2luZG93LAoJCQkJIEd0a1N0YXRlVHlwZQkJIHN0YXRlX3R5cGUs
CgkJCQkgR3RrU2hhZG93VHlwZQkJIHNoYWRvd190eXBlLAoJCQkJIEdka1JlY3RhbmdsZQkJKmFy
ZWEsCgkJCQkgR3RrV2lkZ2V0CQkqd2lkZ2V0LAoJCQkJIGdjaGFyCQkJKmRldGFpbCwKCQkJCSBn
aW50CQkJIHgsCgkJCQkgZ2ludAkJCSB5LAoJCQkJIGdpbnQJCQkgd2lkdGgsCgkJCQkgZ2ludAkJ
CSBoZWlnaHQpOyAKICB2b2lkICgqZHJhd19zaGFkb3dfZ2FwKQkoR3RrU3R5bGUJCSpzdHlsZSwK
CQkJCSBHZGtXaW5kb3cJCSp3aW5kb3csCgkJCQkgR3RrU3RhdGVUeXBlCQkgc3RhdGVfdHlwZSwK
CQkJCSBHdGtTaGFkb3dUeXBlCQkgc2hhZG93X3R5cGUsCgkJCQkgR2RrUmVjdGFuZ2xlCQkqYXJl
YSwKCQkJCSBHdGtXaWRnZXQJCSp3aWRnZXQsCgkJCQkgZ2NoYXIJCQkqZGV0YWlsLAoJCQkJIGdp
bnQJCQkgeCwKCQkJCSBnaW50CQkJIHksCgkJCQkgZ2ludAkJCSB3aWR0aCwKCQkJCSBnaW50CQkJ
IGhlaWdodCwKCQkJCSBHdGtQb3NpdGlvblR5cGUJIGdhcF9zaWRlLAoJCQkJIGdpbnQJCQkgZ2Fw
X3gsCgkJCQkgZ2ludAkJCSBnYXBfd2lkdGgpOwogIHZvaWQgKCpkcmF3X2JveF9nYXApCQkoR3Rr
U3R5bGUJCSpzdHlsZSwKCQkJCSBHZGtXaW5kb3cJCSp3aW5kb3csCgkJCQkgR3RrU3RhdGVUeXBl
CQkgc3RhdGVfdHlwZSwKCQkJCSBHdGtTaGFkb3dUeXBlCQkgc2hhZG93X3R5cGUsCgkJCQkgR2Rr
UmVjdGFuZ2xlCQkqYXJlYSwKCQkJCSBHdGtXaWRnZXQJCSp3aWRnZXQsCgkJCQkgZ2NoYXIJCQkq
ZGV0YWlsLAoJCQkJIGdpbnQJCQkgeCwKCQkJCSBnaW50CQkJIHksCgkJCQkgZ2ludAkJCSB3aWR0
aCwKCQkJCSBnaW50CQkJIGhlaWdodCwKCQkJCSBHdGtQb3NpdGlvblR5cGUJIGdhcF9zaWRlLAoJ
CQkJIGdpbnQJCQkgZ2FwX3gsCgkJCQkgZ2ludAkJCSBnYXBfd2lkdGgpOwogIHZvaWQgKCpkcmF3
X2V4dGVuc2lvbikJKEd0a1N0eWxlCQkqc3R5bGUsCgkJCQkgR2RrV2luZG93CQkqd2luZG93LAoJ
CQkJIEd0a1N0YXRlVHlwZQkJIHN0YXRlX3R5cGUsCgkJCQkgR3RrU2hhZG93VHlwZQkJIHNoYWRv
d190eXBlLAoJCQkJIEdka1JlY3RhbmdsZQkJKmFyZWEsCgkJCQkgR3RrV2lkZ2V0CQkqd2lkZ2V0
LAoJCQkJIGdjaGFyCQkJKmRldGFpbCwKCQkJCSBnaW50CQkJIHgsCgkJCQkgZ2ludAkJCSB5LAoJ
CQkJIGdpbnQJCQkgd2lkdGgsCgkJCQkgZ2ludAkJCSBoZWlnaHQsCgkJCQkgR3RrUG9zaXRpb25U
eXBlCSBnYXBfc2lkZSk7CiAgdm9pZCAoKmRyYXdfZm9jdXMpCQkoR3RrU3R5bGUJCSpzdHlsZSwK
CQkJCSBHZGtXaW5kb3cJCSp3aW5kb3csCgkJCQkgR2RrUmVjdGFuZ2xlCQkqYXJlYSwKCQkJCSBH
dGtXaWRnZXQJCSp3aWRnZXQsCgkJCQkgZ2NoYXIJCQkqZGV0YWlsLAoJCQkJIGdpbnQJCQkgeCwK
CQkJCSBnaW50CQkJIHksCgkJCQkgZ2ludAkJCSB3aWR0aCwKCQkJCSBnaW50CQkJIGhlaWdodCk7
CiAgdm9pZCAoKmRyYXdfc2xpZGVyKQkJKEd0a1N0eWxlCQkqc3R5bGUsCgkJCQkgR2RrV2luZG93
CQkqd2luZG93LAoJCQkJIEd0a1N0YXRlVHlwZQkJIHN0YXRlX3R5cGUsCgkJCQkgR3RrU2hhZG93
VHlwZQkJIHNoYWRvd190eXBlLAoJCQkJIEdka1JlY3RhbmdsZQkJKmFyZWEsCgkJCQkgR3RrV2lk
Z2V0CQkqd2lkZ2V0LAoJCQkJIGdjaGFyCQkJKmRldGFpbCwKCQkJCSBnaW50CQkJIHgsCgkJCQkg
Z2ludAkJCSB5LAoJCQkJIGdpbnQJCQkgd2lkdGgsCgkJCQkgZ2ludAkJCSBoZWlnaHQsCgkJCQkg
R3RrT3JpZW50YXRpb24JCSBvcmllbnRhdGlvbik7CiAgdm9pZCAoKmRyYXdfaGFuZGxlKQkJKEd0
a1N0eWxlCQkqc3R5bGUsCgkJCQkgR2RrV2luZG93CQkqd2luZG93LAoJCQkJIEd0a1N0YXRlVHlw
ZQkJIHN0YXRlX3R5cGUsCgkJCQkgR3RrU2hhZG93VHlwZQkJIHNoYWRvd190eXBlLAoJCQkJIEdk
a1JlY3RhbmdsZQkJKmFyZWEsCgkJCQkgR3RrV2lkZ2V0CQkqd2lkZ2V0LAoJCQkJIGdjaGFyCQkJ
KmRldGFpbCwKCQkJCSBnaW50CQkJIHgsCgkJCQkgZ2ludAkJCSB5LAoJCQkJIGdpbnQJCQkgd2lk
dGgsCgkJCQkgZ2ludAkJCSBoZWlnaHQsCgkJCQkgR3RrT3JpZW50YXRpb24JCSBvcmllbnRhdGlv
bik7Cn07CgpHdGtTdHlsZSogZ3RrX3N0eWxlX25ldwkJCSAgICAgKHZvaWQpOwpHdGtTdHlsZSog
Z3RrX3N0eWxlX2NvcHkJCSAgICAgKEd0a1N0eWxlCSAgICAqc3R5bGUpOwpHdGtTdHlsZSogZ3Rr
X3N0eWxlX2F0dGFjaAkJICAgICAoR3RrU3R5bGUJICAgICpzdHlsZSwKCQkJCQkgICAgICBHZGtX
aW5kb3cJICAgICp3aW5kb3cpOwp2b2lkCSAgZ3RrX3N0eWxlX2RldGFjaAkJICAgICAoR3RrU3R5
bGUJICAgKnN0eWxlKTsKR3RrU3R5bGUqIGd0a19zdHlsZV9yZWYJCQkgICAgIChHdGtTdHlsZQkg
ICAqc3R5bGUpOwp2b2lkCSAgZ3RrX3N0eWxlX3VucmVmCQkgICAgIChHdGtTdHlsZQkgICAqc3R5
bGUpOwp2b2lkCSAgZ3RrX3N0eWxlX3NldF9iYWNrZ3JvdW5kCSAgICAgKEd0a1N0eWxlCSAgICpz
dHlsZSwKCQkJCQkgICAgICBHZGtXaW5kb3cJICAgKndpbmRvdywKCQkJCQkgICAgICBHdGtTdGF0
ZVR5cGUgIHN0YXRlX3R5cGUpOwp2b2lkCSAgZ3RrX3N0eWxlX2FwcGx5X2RlZmF1bHRfYmFja2dy
b3VuZCAoR3RrU3R5bGUJICAgKnN0eWxlLAoJCQkJCSAgICAgIEdka1dpbmRvdwkgICAqd2luZG93
LAoJCQkJCSAgICAgIGdib29sZWFuCSAgICBzZXRfYmcsCgkJCQkJICAgICAgR3RrU3RhdGVUeXBl
ICBzdGF0ZV90eXBlLCAKCQkJCQkgICAgICBHZGtSZWN0YW5nbGUgKmFyZWEsIAoJCQkJCSAgICAg
IGdpbnQJICAgIHgsIAoJCQkJCSAgICAgIGdpbnQJICAgIHksIAoJCQkJCSAgICAgIGdpbnQJICAg
IHdpZHRoLCAKCQkJCQkgICAgICBnaW50CSAgICBoZWlnaHQpOwoKdm9pZCBndGtfZHJhd19obGlu
ZSAgIChHdGtTdHlsZQkgICAgICpzdHlsZSwKCQkgICAgICAgR2RrV2luZG93ICAgICAqd2luZG93
LAoJCSAgICAgICBHdGtTdGF0ZVR5cGUgICBzdGF0ZV90eXBlLAoJCSAgICAgICBnaW50CSAgICAg
IHgxLAoJCSAgICAgICBnaW50CSAgICAgIHgyLAoJCSAgICAgICBnaW50CSAgICAgIHkpOwp2b2lk
IGd0a19kcmF3X3ZsaW5lICAgKEd0a1N0eWxlCSAgICAgKnN0eWxlLAoJCSAgICAgICBHZGtXaW5k
b3cgICAgICp3aW5kb3csCgkJICAgICAgIEd0a1N0YXRlVHlwZSAgIHN0YXRlX3R5cGUsCgkJICAg
ICAgIGdpbnQJICAgICAgeTEsCgkJICAgICAgIGdpbnQJICAgICAgeTIsCgkJICAgICAgIGdpbnQJ
ICAgICAgeCk7CnZvaWQgZ3RrX2RyYXdfc2hhZG93ICAoR3RrU3R5bGUJICAgICAqc3R5bGUsCgkJ
ICAgICAgIEdka1dpbmRvdyAgICAgKndpbmRvdywKCQkgICAgICAgR3RrU3RhdGVUeXBlICAgc3Rh
dGVfdHlwZSwKCQkgICAgICAgR3RrU2hhZG93VHlwZSAgc2hhZG93X3R5cGUsCgkJICAgICAgIGdp
bnQJICAgICAgeCwKCQkgICAgICAgZ2ludAkgICAgICB5LAoJCSAgICAgICBnaW50CSAgICAgIHdp
ZHRoLAoJCSAgICAgICBnaW50CSAgICAgIGhlaWdodCk7CnZvaWQgZ3RrX2RyYXdfcG9seWdvbiAo
R3RrU3R5bGUJICAgICAqc3R5bGUsCgkJICAgICAgIEdka1dpbmRvdyAgICAgKndpbmRvdywKCQkg
ICAgICAgR3RrU3RhdGVUeXBlICAgc3RhdGVfdHlwZSwKCQkgICAgICAgR3RrU2hhZG93VHlwZSAg
c2hhZG93X3R5cGUsCgkJICAgICAgIEdka1BvaW50CSAgICAgKnBvaW50cywKCQkgICAgICAgZ2lu
dAkgICAgICBucG9pbnRzLAoJCSAgICAgICBnYm9vbGVhbgkgICAgICBmaWxsKTsKdm9pZCBndGtf
ZHJhd19hcnJvdyAgIChHdGtTdHlsZQkgICAgICpzdHlsZSwKCQkgICAgICAgR2RrV2luZG93ICAg
ICAqd2luZG93LAoJCSAgICAgICBHdGtTdGF0ZVR5cGUgICBzdGF0ZV90eXBlLAoJCSAgICAgICBH
dGtTaGFkb3dUeXBlICBzaGFkb3dfdHlwZSwKCQkgICAgICAgR3RrQXJyb3dUeXBlICAgYXJyb3df
dHlwZSwKCQkgICAgICAgZ2Jvb2xlYW4JICAgICAgZmlsbCwKCQkgICAgICAgZ2ludAkgICAgICB4
LAoJCSAgICAgICBnaW50CSAgICAgIHksCgkJICAgICAgIGdpbnQJICAgICAgd2lkdGgsCgkJICAg
ICAgIGdpbnQJICAgICAgaGVpZ2h0KTsKdm9pZCBndGtfZHJhd19kaWFtb25kIChHdGtTdHlsZQkg
ICAgICpzdHlsZSwKCQkgICAgICAgR2RrV2luZG93ICAgICAqd2luZG93LAoJCSAgICAgICBHdGtT
dGF0ZVR5cGUgICBzdGF0ZV90eXBlLAoJCSAgICAgICBHdGtTaGFkb3dUeXBlICBzaGFkb3dfdHlw
ZSwKCQkgICAgICAgZ2ludAkgICAgICB4LAoJCSAgICAgICBnaW50CSAgICAgIHksCgkJICAgICAg
IGdpbnQJICAgICAgd2lkdGgsCgkJICAgICAgIGdpbnQJICAgICAgaGVpZ2h0KTsKdm9pZCBndGtf
ZHJhd19vdmFsICAgIChHdGtTdHlsZQkgICAgICpzdHlsZSwKCQkgICAgICAgR2RrV2luZG93ICAg
ICAqd2luZG93LAoJCSAgICAgICBHdGtTdGF0ZVR5cGUgICBzdGF0ZV90eXBlLAoJCSAgICAgICBH
dGtTaGFkb3dUeXBlICBzaGFkb3dfdHlwZSwKCQkgICAgICAgZ2ludAkgICAgICB4LAoJCSAgICAg
ICBnaW50CSAgICAgIHksCgkJICAgICAgIGdpbnQJICAgICAgd2lkdGgsCgkJICAgICAgIGdpbnQJ
ICAgICAgaGVpZ2h0KTsKdm9pZCBndGtfZHJhd19zdHJpbmcgIChHdGtTdHlsZQkgICAgICpzdHls
ZSwKCQkgICAgICAgR2RrV2luZG93ICAgICAqd2luZG93LAoJCSAgICAgICBHdGtTdGF0ZVR5cGUg
ICBzdGF0ZV90eXBlLAoJCSAgICAgICBnaW50CSAgICAgIHgsCgkJICAgICAgIGdpbnQJICAgICAg
eSwKCQkgICAgICAgY29uc3QgZ2NoYXIgICAqc3RyaW5nKTsKdm9pZCBndGtfZHJhd19ib3ggICAg
IChHdGtTdHlsZQkgICAgICpzdHlsZSwKCQkgICAgICAgR2RrV2luZG93ICAgICAqd2luZG93LAoJ
CSAgICAgICBHdGtTdGF0ZVR5cGUgICBzdGF0ZV90eXBlLAoJCSAgICAgICBHdGtTaGFkb3dUeXBl
ICBzaGFkb3dfdHlwZSwKCQkgICAgICAgZ2ludAkgICAgICB4LAoJCSAgICAgICBnaW50CSAgICAg
IHksCgkJICAgICAgIGdpbnQJICAgICAgd2lkdGgsCgkJICAgICAgIGdpbnQJICAgICAgaGVpZ2h0
KTsKdm9pZCBndGtfZHJhd19mbGF0X2JveCAoR3RrU3R5bGUgICAgICAqc3R5bGUsCgkJCUdka1dp
bmRvdyAgICAgKndpbmRvdywKCQkJR3RrU3RhdGVUeXBlICAgc3RhdGVfdHlwZSwKCQkJR3RrU2hh
ZG93VHlwZSAgc2hhZG93X3R5cGUsCgkJCWdpbnQJICAgICAgIHgsCgkJCWdpbnQJICAgICAgIHks
CgkJCWdpbnQJICAgICAgIHdpZHRoLAoJCQlnaW50CSAgICAgICBoZWlnaHQpOwp2b2lkIGd0a19k
cmF3X2NoZWNrICAgKEd0a1N0eWxlCSAgICAgKnN0eWxlLAoJCSAgICAgICBHZGtXaW5kb3cgICAg
ICp3aW5kb3csCgkJICAgICAgIEd0a1N0YXRlVHlwZSAgIHN0YXRlX3R5cGUsCgkJICAgICAgIEd0
a1NoYWRvd1R5cGUgIHNoYWRvd190eXBlLAoJCSAgICAgICBnaW50CSAgICAgIHgsCgkJICAgICAg
IGdpbnQJICAgICAgeSwKCQkgICAgICAgZ2ludAkgICAgICB3aWR0aCwKCQkgICAgICAgZ2ludAkg
ICAgICBoZWlnaHQpOwp2b2lkIGd0a19kcmF3X29wdGlvbiAgKEd0a1N0eWxlCSAgICAgKnN0eWxl
LAoJCSAgICAgICBHZGtXaW5kb3cgICAgICp3aW5kb3csCgkJICAgICAgIEd0a1N0YXRlVHlwZSAg
IHN0YXRlX3R5cGUsCgkJICAgICAgIEd0a1NoYWRvd1R5cGUgIHNoYWRvd190eXBlLAoJCSAgICAg
ICBnaW50CSAgICAgIHgsCgkJICAgICAgIGdpbnQJICAgICAgeSwKCQkgICAgICAgZ2ludAkgICAg
ICB3aWR0aCwKCQkgICAgICAgZ2ludAkgICAgICBoZWlnaHQpOwp2b2lkIGd0a19kcmF3X2Nyb3Nz
ICAgKEd0a1N0eWxlCSAgICAgKnN0eWxlLAoJCSAgICAgICBHZGtXaW5kb3cgICAgICp3aW5kb3cs
CgkJICAgICAgIEd0a1N0YXRlVHlwZSAgIHN0YXRlX3R5cGUsCgkJICAgICAgIEd0a1NoYWRvd1R5
cGUgIHNoYWRvd190eXBlLAoJCSAgICAgICBnaW50CSAgICAgIHgsCgkJICAgICAgIGdpbnQJICAg
ICAgeSwKCQkgICAgICAgZ2ludAkgICAgICB3aWR0aCwKCQkgICAgICAgZ2ludAkgICAgICBoZWln
aHQpOwp2b2lkIGd0a19kcmF3X3JhbXAgICAgKEd0a1N0eWxlCSAgICAgKnN0eWxlLAoJCSAgICAg
ICBHZGtXaW5kb3cgICAgICp3aW5kb3csCgkJICAgICAgIEd0a1N0YXRlVHlwZSAgIHN0YXRlX3R5
cGUsCgkJICAgICAgIEd0a1NoYWRvd1R5cGUgIHNoYWRvd190eXBlLAoJCSAgICAgICBHdGtBcnJv
d1R5cGUgICBhcnJvd190eXBlLAoJCSAgICAgICBnaW50CSAgICAgIHgsCgkJICAgICAgIGdpbnQJ
ICAgICAgeSwKCQkgICAgICAgZ2ludAkgICAgICB3aWR0aCwKCQkgICAgICAgZ2ludAkgICAgICBo
ZWlnaHQpOwp2b2lkIGd0a19kcmF3X3RhYiAgICAgKEd0a1N0eWxlCSAgICAgKnN0eWxlLAoJCSAg
ICAgICBHZGtXaW5kb3cgICAgICp3aW5kb3csCgkJICAgICAgIEd0a1N0YXRlVHlwZSAgIHN0YXRl
X3R5cGUsCgkJICAgICAgIEd0a1NoYWRvd1R5cGUgIHNoYWRvd190eXBlLAoJCSAgICAgICBnaW50
CSAgICAgIHgsCgkJICAgICAgIGdpbnQJICAgICAgeSwKCQkgICAgICAgZ2ludAkgICAgICB3aWR0
aCwKCQkgICAgICAgZ2ludAkgICAgICBoZWlnaHQpOwp2b2lkIGd0a19kcmF3X3NoYWRvd19nYXAg
KEd0a1N0eWxlCSAqc3R5bGUsCgkJCSAgR2RrV2luZG93CSAqd2luZG93LAoJCQkgIEd0a1N0YXRl
VHlwZQkgIHN0YXRlX3R5cGUsCgkJCSAgR3RrU2hhZG93VHlwZQkgIHNoYWRvd190eXBlLAoJCQkg
IGdpbnQJCSAgeCwKCQkJICBnaW50CQkgIHksCgkJCSAgZ2ludAkJICB3aWR0aCwKCQkJICBnaW50
CQkgIGhlaWdodCwKCQkJICBHdGtQb3NpdGlvblR5cGUgZ2FwX3NpZGUsCgkJCSAgZ2ludAkJICBn
YXBfeCwKCQkJICBnaW50CQkgIGdhcF93aWR0aCk7CnZvaWQgZ3RrX2RyYXdfYm94X2dhcCAoR3Rr
U3R5bGUJICAgICAgKnN0eWxlLAoJCSAgICAgICBHZGtXaW5kb3cgICAgICAqd2luZG93LAoJCSAg
ICAgICBHdGtTdGF0ZVR5cGUgICAgc3RhdGVfdHlwZSwKCQkgICAgICAgR3RrU2hhZG93VHlwZSAg
IHNoYWRvd190eXBlLAoJCSAgICAgICBnaW50CSAgICAgICB4LAoJCSAgICAgICBnaW50CSAgICAg
ICB5LAoJCSAgICAgICBnaW50CSAgICAgICB3aWR0aCwKCQkgICAgICAgZ2ludAkgICAgICAgaGVp
Z2h0LAoJCSAgICAgICBHdGtQb3NpdGlvblR5cGUgZ2FwX3NpZGUsCgkJICAgICAgIGdpbnQJICAg
ICAgIGdhcF94LAoJCSAgICAgICBnaW50CSAgICAgICBnYXBfd2lkdGgpOwp2b2lkIGd0a19kcmF3
X2V4dGVuc2lvbiAoR3RrU3R5bGUJKnN0eWxlLAoJCQkgR2RrV2luZG93CSp3aW5kb3csCgkJCSBH
dGtTdGF0ZVR5cGUJIHN0YXRlX3R5cGUsCgkJCSBHdGtTaGFkb3dUeXBlCSBzaGFkb3dfdHlwZSwK
CQkJIGdpbnQJCSB4LAoJCQkgZ2ludAkJIHksCgkJCSBnaW50CQkgd2lkdGgsCgkJCSBnaW50CQkg
aGVpZ2h0LAoJCQkgR3RrUG9zaXRpb25UeXBlIGdhcF9zaWRlKTsKdm9pZCBndGtfZHJhd19mb2N1
cyAgIChHdGtTdHlsZQkgICAgICpzdHlsZSwKCQkgICAgICAgR2RrV2luZG93ICAgICAqd2luZG93
LAoJCSAgICAgICBnaW50CSAgICAgIHgsCgkJICAgICAgIGdpbnQJICAgICAgeSwKCQkgICAgICAg
Z2ludAkgICAgICB3aWR0aCwKCQkgICAgICAgZ2ludAkgICAgICBoZWlnaHQpOwp2b2lkIGd0a19k
cmF3X3NsaWRlciAgKEd0a1N0eWxlCSAgICAgKnN0eWxlLAoJCSAgICAgICBHZGtXaW5kb3cgICAg
ICp3aW5kb3csCgkJICAgICAgIEd0a1N0YXRlVHlwZSAgIHN0YXRlX3R5cGUsCgkJICAgICAgIEd0
a1NoYWRvd1R5cGUgIHNoYWRvd190eXBlLAoJCSAgICAgICBnaW50CSAgICAgIHgsCgkJICAgICAg
IGdpbnQJICAgICAgeSwKCQkgICAgICAgZ2ludAkgICAgICB3aWR0aCwKCQkgICAgICAgZ2ludAkg
ICAgICBoZWlnaHQsCgkJICAgICAgIEd0a09yaWVudGF0aW9uIG9yaWVudGF0aW9uKTsKdm9pZCBn
dGtfZHJhd19oYW5kbGUgIChHdGtTdHlsZQkgICAgICpzdHlsZSwKCQkgICAgICAgR2RrV2luZG93
ICAgICAqd2luZG93LAoJCSAgICAgICBHdGtTdGF0ZVR5cGUgICBzdGF0ZV90eXBlLAoJCSAgICAg
ICBHdGtTaGFkb3dUeXBlICBzaGFkb3dfdHlwZSwKCQkgICAgICAgZ2ludAkgICAgICB4LAoJCSAg
ICAgICBnaW50CSAgICAgIHksCgkJICAgICAgIGdpbnQJICAgICAgd2lkdGgsCgkJICAgICAgIGdp
bnQJICAgICAgaGVpZ2h0LAoJCSAgICAgICBHdGtPcmllbnRhdGlvbiBvcmllbnRhdGlvbik7Cgp2
b2lkIGd0a19wYWludF9obGluZSAgIChHdGtTdHlsZSAgICAgICpzdHlsZSwKCQkJR2RrV2luZG93
ICAgICAqd2luZG93LAoJCQlHdGtTdGF0ZVR5cGUgICBzdGF0ZV90eXBlLAoJCQlHZGtSZWN0YW5n
bGUgICphcmVhLAoJCQlHdGtXaWRnZXQgICAgICp3aWRnZXQsCgkJCWdjaGFyCSAgICAgICpkZXRh
aWwsCgkJCWdpbnQJICAgICAgIHgxLAoJCQlnaW50CSAgICAgICB4MiwKCQkJZ2ludAkgICAgICAg
eSk7CnZvaWQgZ3RrX3BhaW50X3ZsaW5lICAgKEd0a1N0eWxlICAgICAgKnN0eWxlLAoJCQlHZGtX
aW5kb3cgICAgICp3aW5kb3csCgkJCUd0a1N0YXRlVHlwZSAgIHN0YXRlX3R5cGUsCgkJCUdka1Jl
Y3RhbmdsZSAgKmFyZWEsCgkJCUd0a1dpZGdldCAgICAgKndpZGdldCwKCQkJZ2NoYXIJICAgICAg
KmRldGFpbCwKCQkJZ2ludAkgICAgICAgeTEsCgkJCWdpbnQJICAgICAgIHkyLAoJCQlnaW50CSAg
ICAgICB4KTsKdm9pZCBndGtfcGFpbnRfc2hhZG93ICAoR3RrU3R5bGUgICAgICpzdHlsZSwKCQkJ
R2RrV2luZG93ICAgICp3aW5kb3csCgkJCUd0a1N0YXRlVHlwZSAgc3RhdGVfdHlwZSwKCQkJR3Rr
U2hhZG93VHlwZSBzaGFkb3dfdHlwZSwKCQkJR2RrUmVjdGFuZ2xlICAqYXJlYSwKCQkJR3RrV2lk
Z2V0ICAgICAqd2lkZ2V0LAoJCQlnY2hhcgkgICAgICAqZGV0YWlsLAoJCQlnaW50CSAgICAgICB4
LAoJCQlnaW50CSAgICAgICB5LAoJCQlnaW50CSAgICAgICB3aWR0aCwKCQkJZ2ludAkgICAgICAg
aGVpZ2h0KTsKdm9pZCBndGtfcGFpbnRfcG9seWdvbiAoR3RrU3R5bGUgICAgICAqc3R5bGUsCgkJ
CUdka1dpbmRvdyAgICAgKndpbmRvdywKCQkJR3RrU3RhdGVUeXBlICAgc3RhdGVfdHlwZSwKCQkJ
R3RrU2hhZG93VHlwZSAgc2hhZG93X3R5cGUsCgkJCUdka1JlY3RhbmdsZSAgKmFyZWEsCgkJCUd0
a1dpZGdldCAgICAgKndpZGdldCwKCQkJZ2NoYXIJICAgICAgKmRldGFpbCwKCQkJR2RrUG9pbnQg
ICAgICAqcG9pbnRzLAoJCQlnaW50CSAgICAgICBucG9pbnRzLAoJCQlnYm9vbGVhbiAgICAgICBm
aWxsKTsKdm9pZCBndGtfcGFpbnRfYXJyb3cgICAoR3RrU3R5bGUgICAgICAqc3R5bGUsCgkJCUdk
a1dpbmRvdyAgICAgKndpbmRvdywKCQkJR3RrU3RhdGVUeXBlICAgc3RhdGVfdHlwZSwKCQkJR3Rr
U2hhZG93VHlwZSAgc2hhZG93X3R5cGUsCgkJCUdka1JlY3RhbmdsZSAgKmFyZWEsCgkJCUd0a1dp
ZGdldCAgICAgKndpZGdldCwKCQkJZ2NoYXIJICAgICAgKmRldGFpbCwKCQkJR3RrQXJyb3dUeXBl
ICAgYXJyb3dfdHlwZSwKCQkJZ2Jvb2xlYW4gICAgICAgZmlsbCwKCQkJZ2ludAkgICAgICAgeCwK
CQkJZ2ludAkgICAgICAgeSwKCQkJZ2ludAkgICAgICAgd2lkdGgsCgkJCWdpbnQJICAgICAgIGhl
aWdodCk7CnZvaWQgZ3RrX3BhaW50X2RpYW1vbmQgKEd0a1N0eWxlICAgICAgKnN0eWxlLAoJCQlH
ZGtXaW5kb3cgICAgICp3aW5kb3csCgkJCUd0a1N0YXRlVHlwZSAgIHN0YXRlX3R5cGUsCgkJCUd0
a1NoYWRvd1R5cGUgIHNoYWRvd190eXBlLAoJCQlHZGtSZWN0YW5nbGUgICphcmVhLAoJCQlHdGtX
aWRnZXQgICAgICp3aWRnZXQsCgkJCWdjaGFyCSAgICAgICpkZXRhaWwsCgkJCWdpbnQJICAgICAg
IHgsCgkJCWdpbnQJICAgICAgIHksCgkJCWdpbnQJICAgICAgIHdpZHRoLAoJCQlnaW50CSAgICAg
ICBoZWlnaHQpOwp2b2lkIGd0a19wYWludF9vdmFsICAgIChHdGtTdHlsZSAgICAgICpzdHlsZSwK
CQkJR2RrV2luZG93ICAgICAqd2luZG93LAoJCQlHdGtTdGF0ZVR5cGUgICBzdGF0ZV90eXBlLAoJ
CQlHdGtTaGFkb3dUeXBlICBzaGFkb3dfdHlwZSwKCQkJR2RrUmVjdGFuZ2xlICAqYXJlYSwKCQkJ
R3RrV2lkZ2V0ICAgICAqd2lkZ2V0LAoJCQlnY2hhcgkgICAgICAqZGV0YWlsLAoJCQlnaW50CSAg
ICAgICB4LAoJCQlnaW50CSAgICAgICB5LAoJCQlnaW50CSAgICAgICB3aWR0aCwKCQkJZ2ludAkg
ICAgICAgaGVpZ2h0KTsKdm9pZCBndGtfcGFpbnRfc3RyaW5nICAoR3RrU3R5bGUgICAgICAqc3R5
bGUsCgkJCUdka1dpbmRvdyAgICAgKndpbmRvdywKCQkJR3RrU3RhdGVUeXBlICAgc3RhdGVfdHlw
ZSwKCQkJR2RrUmVjdGFuZ2xlICAqYXJlYSwKCQkJR3RrV2lkZ2V0ICAgICAqd2lkZ2V0LAoJCQln
Y2hhcgkgICAgICAqZGV0YWlsLAoJCQlnaW50CSAgICAgICB4LAoJCQlnaW50CSAgICAgICB5LAoJ
CQljb25zdCBnY2hhciAgICpzdHJpbmcpOwp2b2lkIGd0a19wYWludF9ib3ggICAgIChHdGtTdHls
ZSAgICAgICpzdHlsZSwKCQkJR2RrV2luZG93ICAgICAqd2luZG93LAoJCQlHdGtTdGF0ZVR5cGUg
ICBzdGF0ZV90eXBlLAoJCQlHdGtTaGFkb3dUeXBlICBzaGFkb3dfdHlwZSwKCQkJR2RrUmVjdGFu
Z2xlICAqYXJlYSwKCQkJR3RrV2lkZ2V0ICAgICAqd2lkZ2V0LAoJCQlnY2hhcgkgICAgICAqZGV0
YWlsLAoJCQlnaW50CSAgICAgICB4LAoJCQlnaW50CSAgICAgICB5LAoJCQlnaW50CSAgICAgICB3
aWR0aCwKCQkJZ2ludAkgICAgICAgaGVpZ2h0KTsKdm9pZCBndGtfcGFpbnRfZmxhdF9ib3ggKEd0
a1N0eWxlICAgICAgKnN0eWxlLAoJCQkgR2RrV2luZG93ICAgICAqd2luZG93LAoJCQkgR3RrU3Rh
dGVUeXBlCXN0YXRlX3R5cGUsCgkJCSBHdGtTaGFkb3dUeXBlCXNoYWRvd190eXBlLAoJCQkgR2Rr
UmVjdGFuZ2xlICAqYXJlYSwKCQkJIEd0a1dpZGdldCAgICAgKndpZGdldCwKCQkJIGdjaGFyCSAg
ICAgICAqZGV0YWlsLAoJCQkgZ2ludAkJeCwKCQkJIGdpbnQJCXksCgkJCSBnaW50CQl3aWR0aCwK
CQkJIGdpbnQJCWhlaWdodCk7CnZvaWQgZ3RrX3BhaW50X2NoZWNrICAgKEd0a1N0eWxlICAgICAg
KnN0eWxlLAoJCQlHZGtXaW5kb3cgICAgICp3aW5kb3csCgkJCUd0a1N0YXRlVHlwZSAgIHN0YXRl
X3R5cGUsCgkJCUd0a1NoYWRvd1R5cGUgIHNoYWRvd190eXBlLAoJCQlHZGtSZWN0YW5nbGUgICph
cmVhLAoJCQlHdGtXaWRnZXQgICAgICp3aWRnZXQsCgkJCWdjaGFyCSAgICAgICpkZXRhaWwsCgkJ
CWdpbnQJICAgICAgIHgsCgkJCWdpbnQJICAgICAgIHksCgkJCWdpbnQJICAgICAgIHdpZHRoLAoJ
CQlnaW50CSAgICAgICBoZWlnaHQpOwp2b2lkIGd0a19wYWludF9vcHRpb24gIChHdGtTdHlsZSAg
ICAgICpzdHlsZSwKCQkJR2RrV2luZG93ICAgICAqd2luZG93LAoJCQlHdGtTdGF0ZVR5cGUgICBz
dGF0ZV90eXBlLAoJCQlHdGtTaGFkb3dUeXBlICBzaGFkb3dfdHlwZSwKCQkJR2RrUmVjdGFuZ2xl
ICAqYXJlYSwKCQkJR3RrV2lkZ2V0ICAgICAqd2lkZ2V0LAoJCQlnY2hhcgkgICAgICAqZGV0YWls
LAoJCQlnaW50CSAgICAgICB4LAoJCQlnaW50CSAgICAgICB5LAoJCQlnaW50CSAgICAgICB3aWR0
aCwKCQkJZ2ludAkgICAgICAgaGVpZ2h0KTsKdm9pZCBndGtfcGFpbnRfY3Jvc3MgICAoR3RrU3R5
bGUgICAgICAqc3R5bGUsCgkJCUdka1dpbmRvdyAgICAgKndpbmRvdywKCQkJR3RrU3RhdGVUeXBl
ICAgc3RhdGVfdHlwZSwKCQkJR3RrU2hhZG93VHlwZSAgc2hhZG93X3R5cGUsCgkJCUdka1JlY3Rh
bmdsZSAgKmFyZWEsCgkJCUd0a1dpZGdldCAgICAgKndpZGdldCwKCQkJZ2NoYXIJICAgICAgKmRl
dGFpbCwKCQkJZ2ludAkgICAgICAgeCwKCQkJZ2ludAkgICAgICAgeSwKCQkJZ2ludAkgICAgICAg
d2lkdGgsCgkJCWdpbnQJICAgICAgIGhlaWdodCk7CnZvaWQgZ3RrX3BhaW50X3JhbXAgICAgKEd0
a1N0eWxlICAgICAgKnN0eWxlLAoJCQlHZGtXaW5kb3cgICAgICp3aW5kb3csCgkJCUd0a1N0YXRl
VHlwZSAgIHN0YXRlX3R5cGUsCgkJCUd0a1NoYWRvd1R5cGUgIHNoYWRvd190eXBlLAoJCQlHZGtS
ZWN0YW5nbGUgICphcmVhLAoJCQlHdGtXaWRnZXQgICAgICp3aWRnZXQsCgkJCWdjaGFyCSAgICAg
ICpkZXRhaWwsCgkJCUd0a0Fycm93VHlwZSAgIGFycm93X3R5cGUsCgkJCWdpbnQJICAgICAgIHgs
CgkJCWdpbnQJICAgICAgIHksCgkJCWdpbnQJICAgICAgIHdpZHRoLAoJCQlnaW50CSAgICAgICBo
ZWlnaHQpOwp2b2lkIGd0a19wYWludF90YWIgICAgIChHdGtTdHlsZSAgICAgICpzdHlsZSwKCQkJ
R2RrV2luZG93ICAgICAqd2luZG93LAoJCQlHdGtTdGF0ZVR5cGUgICBzdGF0ZV90eXBlLAoJCQlH
dGtTaGFkb3dUeXBlICBzaGFkb3dfdHlwZSwKCQkJR2RrUmVjdGFuZ2xlICAqYXJlYSwKCQkJR3Rr
V2lkZ2V0ICAgICAqd2lkZ2V0LAoJCQlnY2hhcgkgICAgICAqZGV0YWlsLAoJCQlnaW50CSAgICAg
ICB4LAoJCQlnaW50CSAgICAgICB5LAoJCQlnaW50CSAgICAgICB3aWR0aCwKCQkJZ2ludAkgICAg
ICAgaGVpZ2h0KTsKdm9pZCBndGtfcGFpbnRfc2hhZG93X2dhcCAoR3RrU3R5bGUJICAqc3R5bGUs
CgkJCSAgIEdka1dpbmRvdwkgICp3aW5kb3csCgkJCSAgIEd0a1N0YXRlVHlwZQkgICBzdGF0ZV90
eXBlLAoJCQkgICBHdGtTaGFkb3dUeXBlICAgc2hhZG93X3R5cGUsCgkJCSAgIEdka1JlY3Rhbmds
ZQkgICphcmVhLAoJCQkgICBHdGtXaWRnZXQJICAqd2lkZ2V0LAoJCQkgICBnY2hhcgkgICpkZXRh
aWwsCgkJCSAgIGdpbnQJCSAgIHgsCgkJCSAgIGdpbnQJCSAgIHksCgkJCSAgIGdpbnQJCSAgIHdp
ZHRoLAoJCQkgICBnaW50CQkgICBoZWlnaHQsCgkJCSAgIEd0a1Bvc2l0aW9uVHlwZSBnYXBfc2lk
ZSwKCQkJICAgZ2ludAkJICAgZ2FwX3gsCgkJCSAgIGdpbnQJCSAgIGdhcF93aWR0aCk7CnZvaWQg
Z3RrX3BhaW50X2JveF9nYXAgKEd0a1N0eWxlICAgICAgICpzdHlsZSwKCQkJR2RrV2luZG93ICAg
ICAgKndpbmRvdywKCQkJR3RrU3RhdGVUeXBlCXN0YXRlX3R5cGUsCgkJCUd0a1NoYWRvd1R5cGUJ
c2hhZG93X3R5cGUsCgkJCUdka1JlY3RhbmdsZSAgICphcmVhLAoJCQlHdGtXaWRnZXQgICAgICAq
d2lkZ2V0LAoJCQlnY2hhcgkgICAgICAgKmRldGFpbCwKCQkJZ2ludAkJeCwKCQkJZ2ludAkJeSwK
CQkJZ2ludAkJd2lkdGgsCgkJCWdpbnQJCWhlaWdodCwKCQkJR3RrUG9zaXRpb25UeXBlIGdhcF9z
aWRlLAoJCQlnaW50CQlnYXBfeCwKCQkJZ2ludAkJZ2FwX3dpZHRoKTsKdm9pZCBndGtfcGFpbnRf
ZXh0ZW5zaW9uIChHdGtTdHlsZQkgKnN0eWxlLAoJCQkgIEdka1dpbmRvdwkgKndpbmRvdywKCQkJ
ICBHdGtTdGF0ZVR5cGUJICBzdGF0ZV90eXBlLAoJCQkgIEd0a1NoYWRvd1R5cGUJICBzaGFkb3df
dHlwZSwKCQkJICBHZGtSZWN0YW5nbGUJICphcmVhLAoJCQkgIEd0a1dpZGdldAkgKndpZGdldCwK
CQkJICBnY2hhcgkJICpkZXRhaWwsCgkJCSAgZ2ludAkJICB4LAoJCQkgIGdpbnQJCSAgeSwKCQkJ
ICBnaW50CQkgIHdpZHRoLAoJCQkgIGdpbnQJCSAgaGVpZ2h0LAoJCQkgIEd0a1Bvc2l0aW9uVHlw
ZSBnYXBfc2lkZSk7CnZvaWQgZ3RrX3BhaW50X2ZvY3VzICAgKEd0a1N0eWxlICAgICAgKnN0eWxl
LAoJCQlHZGtXaW5kb3cgICAgICp3aW5kb3csCgkJCUdka1JlY3RhbmdsZSAgKmFyZWEsCgkJCUd0
a1dpZGdldCAgICAgKndpZGdldCwKCQkJZ2NoYXIJICAgICAgKmRldGFpbCwKCQkJZ2ludAkgICAg
ICAgeCwKCQkJZ2ludAkgICAgICAgeSwKCQkJZ2ludAkgICAgICAgd2lkdGgsCgkJCWdpbnQJICAg
ICAgIGhlaWdodCk7CnZvaWQgZ3RrX3BhaW50X3NsaWRlciAgKEd0a1N0eWxlICAgICAgKnN0eWxl
LAoJCQlHZGtXaW5kb3cgICAgICp3aW5kb3csCgkJCUd0a1N0YXRlVHlwZSAgIHN0YXRlX3R5cGUs
CgkJCUd0a1NoYWRvd1R5cGUgIHNoYWRvd190eXBlLAoJCQlHZGtSZWN0YW5nbGUgICphcmVhLAoJ
CQlHdGtXaWRnZXQgICAgICp3aWRnZXQsCgkJCWdjaGFyCSAgICAgICpkZXRhaWwsCgkJCWdpbnQJ
ICAgICAgIHgsCgkJCWdpbnQJICAgICAgIHksCgkJCWdpbnQJICAgICAgIHdpZHRoLAoJCQlnaW50
CSAgICAgICBoZWlnaHQsCgkJCUd0a09yaWVudGF0aW9uIG9yaWVudGF0aW9uKTsKdm9pZCBndGtf
cGFpbnRfaGFuZGxlICAoR3RrU3R5bGUgICAgICAqc3R5bGUsCgkJCUdka1dpbmRvdyAgICAgKndp
bmRvdywKCQkJR3RrU3RhdGVUeXBlICAgc3RhdGVfdHlwZSwKCQkJR3RrU2hhZG93VHlwZSAgc2hh
ZG93X3R5cGUsCgkJCUdka1JlY3RhbmdsZSAgKmFyZWEsCgkJCUd0a1dpZGdldCAgICAgKndpZGdl
dCwKCQkJZ2NoYXIJICAgICAgKmRldGFpbCwKCQkJZ2ludAkgICAgICAgeCwKCQkJZ2ludAkgICAg
ICAgeSwKCQkJZ2ludAkgICAgICAgd2lkdGgsCgkJCWdpbnQJICAgICAgIGhlaWdodCwKCQkJR3Rr
T3JpZW50YXRpb24gb3JpZW50YXRpb24pOwoKCiAKCgp2b2lkIGd0a19zdHlsZV9zZXRfcHJvcF9l
eHBlcmltZW50YWwgKEd0a1N0eWxlICAgICpzdHlsZSwKCQkJCSAgICAgIGNvbnN0IGdjaGFyICpu
YW1lLAoJCQkJICAgICAgZ2ludCAgICAgICAgIHZhbHVlKTsKZ2ludCBndGtfc3R5bGVfZ2V0X3By
b3BfZXhwZXJpbWVudGFsIChHdGtTdHlsZSAgICAqc3R5bGUsCgkJCQkgICAgICBjb25zdCBnY2hh
ciAqbmFtZSwKCQkJCSAgICAgIGdpbnQgICAgICAgICBkZWZhdWx0X3ZhbHVlKTsKCgp9CgoKCgoj
IDM0ICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a3dpZGdldC5oIiAyCgoKCgpleHRl
cm4gIkMiIHsKCgoKIAoKCnR5cGVkZWYgZW51bQp7CiAgR1RLX1RPUExFVkVMICAgICAgICAgPSAx
IDw8IDQsCiAgR1RLX05PX1dJTkRPVyAgICAgICAgPSAxIDw8IDUsCiAgR1RLX1JFQUxJWkVEICAg
ICAgICAgPSAxIDw8IDYsCiAgR1RLX01BUFBFRCAgICAgICAgICAgPSAxIDw8IDcsCiAgR1RLX1ZJ
U0lCTEUgICAgICAgICAgPSAxIDw8IDgsCiAgR1RLX1NFTlNJVElWRSAgICAgICAgPSAxIDw8IDks
CiAgR1RLX1BBUkVOVF9TRU5TSVRJVkUgPSAxIDw8IDEwLAogIEdUS19DQU5fRk9DVVMgICAgICAg
ID0gMSA8PCAxMSwKICBHVEtfSEFTX0ZPQ1VTICAgICAgICA9IDEgPDwgMTIsCiAKICAgCgogIEdU
S19DQU5fREVGQVVMVCAgICAgID0gMSA8PCAxMywKCiAgIAoKICBHVEtfSEFTX0RFRkFVTFQgICAg
ICA9IDEgPDwgMTQsCgogIEdUS19IQVNfR1JBQgkgICAgICAgPSAxIDw8IDE1LAogIEdUS19SQ19T
VFlMRQkgICAgICAgPSAxIDw8IDE2LAogIEdUS19DT01QT1NJVEVfQ0hJTEQgID0gMSA8PCAxNywK
ICBHVEtfTk9fUkVQQVJFTlQgICAgICA9IDEgPDwgMTgsCiAgR1RLX0FQUF9QQUlOVEFCTEUgICAg
PSAxIDw8IDE5LAogCiAgIAoKICBHVEtfUkVDRUlWRVNfREVGQVVMVCA9IDEgPDwgMjAKfSBHdGtX
aWRnZXRGbGFnczsKCiAKCgoKCgoKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogIAog
CgoKCiAgCiAgCiAgCnR5cGVkZWYgc3RydWN0IF9HdGtSZXF1aXNpdGlvbgkgIEd0a1JlcXVpc2l0
aW9uOwp0eXBlZGVmIHN0cnVjdCBfR3RrQWxsb2NhdGlvbgkgIEd0a0FsbG9jYXRpb247CnR5cGVk
ZWYgc3RydWN0IF9HdGtTZWxlY3Rpb25EYXRhIEd0a1NlbGVjdGlvbkRhdGE7CnR5cGVkZWYgc3Ry
dWN0IF9HdGtXaWRnZXRDbGFzcwkgIEd0a1dpZGdldENsYXNzOwp0eXBlZGVmIHN0cnVjdCBfR3Rr
V2lkZ2V0QXV4SW5mbyAgR3RrV2lkZ2V0QXV4SW5mbzsKdHlwZWRlZiBzdHJ1Y3QgX0d0a1dpZGdl
dFNoYXBlSW5mbyBHdGtXaWRnZXRTaGFwZUluZm87Cgp0eXBlZGVmIHZvaWQgKCpHdGtDYWxsYmFj
aykgKEd0a1dpZGdldCAqd2lkZ2V0LAoJCQkgICAgIGdwb2ludGVyCWRhdGEpOwoKIAoKCnN0cnVj
dCBfR3RrUmVxdWlzaXRpb24KewogIGdpbnQxNiB3aWR0aDsKICBnaW50MTYgaGVpZ2h0Owp9OwoK
IAoKCgpzdHJ1Y3QgX0d0a0FsbG9jYXRpb24KewogIGdpbnQxNiB4OwogIGdpbnQxNiB5OwogIGd1
aW50MTYgd2lkdGg7CiAgZ3VpbnQxNiBoZWlnaHQ7Cn07CgogCgoKCgoKCgoKc3RydWN0IF9HdGtT
ZWxlY3Rpb25EYXRhCnsKICBHZGtBdG9tIHNlbGVjdGlvbjsKICBHZGtBdG9tIHRhcmdldDsKICBH
ZGtBdG9tIHR5cGU7CiAgZ2ludAkgIGZvcm1hdDsKICBndWNoYXIgKmRhdGE7CiAgZ2ludAkgIGxl
bmd0aDsKfTsKCiAKCgoKCnN0cnVjdCBfR3RrV2lkZ2V0CnsKICAgCgoKCgoKICBHdGtPYmplY3Qg
b2JqZWN0OwogIAogICAKCgoKCiAgZ3VpbnQxNiBwcml2YXRlX2ZsYWdzOwogIAogICAKCgogIGd1
aW50OCBzdGF0ZTsKICAKICAgCgoKCgoKICBndWludDggc2F2ZWRfc3RhdGU7CiAgCiAgIAoKCgoK
CiAgZ2NoYXIgKm5hbWU7CiAgCiAgIAoKCgoKICBHdGtTdHlsZSAqc3R5bGU7CiAgCiAgIAoKICBH
dGtSZXF1aXNpdGlvbiByZXF1aXNpdGlvbjsKICAKICAgCgogIEd0a0FsbG9jYXRpb24gYWxsb2Nh
dGlvbjsKICAKICAgCgoKCiAgR2RrV2luZG93ICp3aW5kb3c7CiAgCiAgIAoKICBHdGtXaWRnZXQg
KnBhcmVudDsKfTsKCnN0cnVjdCBfR3RrV2lkZ2V0Q2xhc3MKewogICAKCgoKCgogIEd0a09iamVj
dENsYXNzIHBhcmVudF9jbGFzczsKICAKICAgCgoKCiAgZ3VpbnQgYWN0aXZhdGVfc2lnbmFsOwoK
ICAgCgoKCgogIGd1aW50IHNldF9zY3JvbGxfYWRqdXN0bWVudHNfc2lnbmFsOwogIAogICAKICB2
b2lkICgqIHNob3cpCQkgICAgICAgKEd0a1dpZGdldCAgICAgICp3aWRnZXQpOwogIHZvaWQgKCog
c2hvd19hbGwpICAgICAgICAgICAgKEd0a1dpZGdldCAgICAgICp3aWRnZXQpOwogIHZvaWQgKCog
aGlkZSkJCSAgICAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCk7CiAgdm9pZCAoKiBoaWRlX2Fs
bCkgICAgICAgICAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCk7CiAgdm9pZCAoKiBtYXApCQkg
ICAgICAgKEd0a1dpZGdldCAgICAgICp3aWRnZXQpOwogIHZvaWQgKCogdW5tYXApCSAgICAgICAo
R3RrV2lkZ2V0ICAgICAgKndpZGdldCk7CiAgdm9pZCAoKiByZWFsaXplKQkgICAgICAgKEd0a1dp
ZGdldCAgICAgICp3aWRnZXQpOwogIHZvaWQgKCogdW5yZWFsaXplKQkgICAgICAgKEd0a1dpZGdl
dCAgICAgICp3aWRnZXQpOwogIHZvaWQgKCogZHJhdykJCSAgICAgICAoR3RrV2lkZ2V0ICAgICAg
KndpZGdldCwKCQkJCUdka1JlY3RhbmdsZSAgICphcmVhKTsKICB2b2lkICgqIGRyYXdfZm9jdXMp
CSAgICAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCk7CiAgdm9pZCAoKiBkcmF3X2RlZmF1bHQp
CSAgICAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCk7CiAgdm9pZCAoKiBzaXplX3JlcXVlc3Qp
CSAgICAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCwKCQkJCUd0a1JlcXVpc2l0aW9uICpyZXF1
aXNpdGlvbik7CiAgdm9pZCAoKiBzaXplX2FsbG9jYXRlKSAgICAgICAoR3RrV2lkZ2V0ICAgICAg
KndpZGdldCwKCQkJCUd0a0FsbG9jYXRpb24gICphbGxvY2F0aW9uKTsKICB2b2lkICgqIHN0YXRl
X2NoYW5nZWQpICAgICAgIChHdGtXaWRnZXQgICAgICAqd2lkZ2V0LAoJCQkJR3RrU3RhdGVUeXBl
CXByZXZpb3VzX3N0YXRlKTsKICB2b2lkICgqIHBhcmVudF9zZXQpCSAgICAgICAoR3RrV2lkZ2V0
ICAgICAgKndpZGdldCwKCQkJCUd0a1dpZGdldCAgICAgICpwcmV2aW91c19wYXJlbnQpOwogIHZv
aWQgKCogc3R5bGVfc2V0KQkgICAgICAgKEd0a1dpZGdldCAgICAgICp3aWRnZXQsCgkJCQlHdGtT
dHlsZSAgICAgICAqcHJldmlvdXNfc3R5bGUpOwogIAogICAKICBnaW50ICgqIGFkZF9hY2NlbGVy
YXRvcikgICAgIChHdGtXaWRnZXQgICAgICAqd2lkZ2V0LAoJCQkJZ3VpbnQgICAgICAgICAgIGFj
Y2VsX3NpZ25hbF9pZCwKCQkJCUd0a0FjY2VsR3JvdXAgICphY2NlbF9ncm91cCwKCQkJCWd1aW50
ICAgICAgICAgICBhY2NlbF9rZXksCgkJCQlHZGtNb2RpZmllclR5cGUgYWNjZWxfbW9kcywKCQkJ
CUd0a0FjY2VsRmxhZ3MgICBhY2NlbF9mbGFncyk7CiAgdm9pZCAoKiByZW1vdmVfYWNjZWxlcmF0
b3IpICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCwKCQkJCUd0a0FjY2VsR3JvdXAgICphY2NlbF9n
cm91cCwKCQkJCWd1aW50ICAgICAgICAgICBhY2NlbF9rZXksCgkJCQlHZGtNb2RpZmllclR5cGUg
YWNjZWxfbW9kcyk7CgogICAKICB2b2lkICgqIGdyYWJfZm9jdXMpICAgICAgICAgIChHdGtXaWRn
ZXQgICAgICAqd2lkZ2V0KTsKICAKICAgCiAgZ2ludCAoKiBldmVudCkJCSAgIChHdGtXaWRnZXQJ
ICAgICAgICp3aWRnZXQsCgkJCQkgICAgR2RrRXZlbnQJICAgICAgICpldmVudCk7CiAgZ2ludCAo
KiBidXR0b25fcHJlc3NfZXZlbnQpCSAgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQsCgkJCQkg
ICAgR2RrRXZlbnRCdXR0b24gICAgICpldmVudCk7CiAgZ2ludCAoKiBidXR0b25fcmVsZWFzZV9l
dmVudCkJICAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJCSAgICBHZGtFdmVudEJ1dHRv
biAgICAgKmV2ZW50KTsKICBnaW50ICgqIG1vdGlvbl9ub3RpZnlfZXZlbnQpCSAgIChHdGtXaWRn
ZXQJICAgICAgICp3aWRnZXQsCgkJCQkgICAgR2RrRXZlbnRNb3Rpb24gICAgICpldmVudCk7CiAg
Z2ludCAoKiBkZWxldGVfZXZlbnQpCQkgICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJ
ICAgIEdka0V2ZW50QW55CSAgICAgICAqZXZlbnQpOwogIGdpbnQgKCogZGVzdHJveV9ldmVudCkJ
ICAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJCSAgICBHZGtFdmVudEFueQkgICAgICAg
KmV2ZW50KTsKICBnaW50ICgqIGV4cG9zZV9ldmVudCkJCSAgIChHdGtXaWRnZXQJICAgICAgICp3
aWRnZXQsCgkJCQkgICAgR2RrRXZlbnRFeHBvc2UgICAgICpldmVudCk7CiAgZ2ludCAoKiBrZXlf
cHJlc3NfZXZlbnQpCSAgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQsCgkJCQkgICAgR2RrRXZl
bnRLZXkJICAgICAgICpldmVudCk7CiAgZ2ludCAoKiBrZXlfcmVsZWFzZV9ldmVudCkJICAgKEd0
a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJCSAgICBHZGtFdmVudEtleQkgICAgICAgKmV2ZW50
KTsKICBnaW50ICgqIGVudGVyX25vdGlmeV9ldmVudCkJICAgKEd0a1dpZGdldAkgICAgICAgKndp
ZGdldCwKCQkJCSAgICBHZGtFdmVudENyb3NzaW5nICAgKmV2ZW50KTsKICBnaW50ICgqIGxlYXZl
X25vdGlmeV9ldmVudCkJICAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJCSAgICBHZGtF
dmVudENyb3NzaW5nICAgKmV2ZW50KTsKICBnaW50ICgqIGNvbmZpZ3VyZV9ldmVudCkJICAgKEd0
a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJCSAgICBHZGtFdmVudENvbmZpZ3VyZSAgKmV2ZW50
KTsKICBnaW50ICgqIGZvY3VzX2luX2V2ZW50KQkgICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0
LAoJCQkJICAgIEdka0V2ZW50Rm9jdXMgICAgICAqZXZlbnQpOwogIGdpbnQgKCogZm9jdXNfb3V0
X2V2ZW50KQkgICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJICAgIEdka0V2ZW50Rm9j
dXMgICAgICAqZXZlbnQpOwogIGdpbnQgKCogbWFwX2V2ZW50KQkJICAgKEd0a1dpZGdldAkgICAg
ICAgKndpZGdldCwKCQkJCSAgICBHZGtFdmVudEFueQkgICAgICAgKmV2ZW50KTsKICBnaW50ICgq
IHVubWFwX2V2ZW50KQkJICAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJCSAgICBHZGtF
dmVudEFueQkgICAgICAgKmV2ZW50KTsKICBnaW50ICgqIHByb3BlcnR5X25vdGlmeV9ldmVudCkg
ICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJICAgIEdka0V2ZW50UHJvcGVydHkgICAq
ZXZlbnQpOwogIGdpbnQgKCogc2VsZWN0aW9uX2NsZWFyX2V2ZW50KSAgIChHdGtXaWRnZXQJICAg
ICAgICp3aWRnZXQsCgkJCQkgICAgR2RrRXZlbnRTZWxlY3Rpb24gICpldmVudCk7CiAgZ2ludCAo
KiBzZWxlY3Rpb25fcmVxdWVzdF9ldmVudCkgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJ
CSAgICBHZGtFdmVudFNlbGVjdGlvbiAgKmV2ZW50KTsKICBnaW50ICgqIHNlbGVjdGlvbl9ub3Rp
ZnlfZXZlbnQpICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJICAgIEdka0V2ZW50U2Vs
ZWN0aW9uICAqZXZlbnQpOwogIGdpbnQgKCogcHJveGltaXR5X2luX2V2ZW50KQkgICAoR3RrV2lk
Z2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJICAgIEdka0V2ZW50UHJveGltaXR5ICAqZXZlbnQpOwog
IGdpbnQgKCogcHJveGltaXR5X291dF9ldmVudCkJICAgKEd0a1dpZGdldAkgICAgICAgKndpZGdl
dCwKCQkJCSAgICBHZGtFdmVudFByb3hpbWl0eSAgKmV2ZW50KTsKICBnaW50ICgqIHZpc2liaWxp
dHlfbm90aWZ5X2V2ZW50KSAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJCSAgICAgR2Rr
RXZlbnRWaXNpYmlsaXR5ICpldmVudCk7CiAgZ2ludCAoKiBjbGllbnRfZXZlbnQpCQkgICAoR3Rr
V2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJICAgIEdka0V2ZW50Q2xpZW50ICAgICAqZXZlbnQp
OwogIGdpbnQgKCogbm9fZXhwb3NlX2V2ZW50KQkgICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0
LAoJCQkJICAgIEdka0V2ZW50QW55CSAgICAgICAqZXZlbnQpOwoKICAgCiAgdm9pZCAoKiBzZWxl
Y3Rpb25fZ2V0KSAgICAgICAgICAgKEd0a1dpZGdldCAgICAgICAgICAqd2lkZ2V0LAoJCQkJICAg
IEd0a1NlbGVjdGlvbkRhdGEgICAqc2VsZWN0aW9uX2RhdGEsCgkJCQkgICAgZ3VpbnQgICAgICAg
ICAgICAgICBpbmZvLAoJCQkJICAgIGd1aW50ICAgICAgICAgICAgICAgdGltZSk7CiAgdm9pZCAo
KiBzZWxlY3Rpb25fcmVjZWl2ZWQpICAgICAgKEd0a1dpZGdldCAgICAgICAgICAqd2lkZ2V0LAoJ
CQkJICAgIEd0a1NlbGVjdGlvbkRhdGEgICAqc2VsZWN0aW9uX2RhdGEsCgkJCQkgICAgZ3VpbnQg
ICAgICAgICAgICAgICB0aW1lKTsKCiAgIAogIHZvaWQgKCogZHJhZ19iZWdpbikJICAgICAgICAg
ICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJICAgIEdka0RyYWdDb250ZXh0ICAgICAq
Y29udGV4dCk7CiAgdm9pZCAoKiBkcmFnX2VuZCkJICAgICAgICAgICAoR3RrV2lkZ2V0CSAgICAg
ICAqd2lkZ2V0LAoJCQkJICAgIEdka0RyYWdDb250ZXh0ICAgICAqY29udGV4dCk7CiAgdm9pZCAo
KiBkcmFnX2RhdGFfZ2V0KSAgICAgICAgICAgKEd0a1dpZGdldCAgICAgICAgICAqd2lkZ2V0LAoJ
CQkJICAgIEdka0RyYWdDb250ZXh0ICAgICAqY29udGV4dCwKCQkJCSAgICBHdGtTZWxlY3Rpb25E
YXRhICAgKnNlbGVjdGlvbl9kYXRhLAoJCQkJICAgIGd1aW50ICAgICAgICAgICAgICAgaW5mbywK
CQkJCSAgICBndWludCAgICAgICAgICAgICAgIHRpbWUpOwogIHZvaWQgKCogZHJhZ19kYXRhX2Rl
bGV0ZSkgICAgICAgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQsCgkJCQkgICAgR2RrRHJhZ0Nv
bnRleHQgICAgICpjb250ZXh0KTsKCiAgIAogIHZvaWQgKCogZHJhZ19sZWF2ZSkJICAgICAgICAg
ICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJICAgIEdka0RyYWdDb250ZXh0ICAgICAq
Y29udGV4dCwKCQkJCSAgICBndWludCAgICAgICAgICAgICAgIHRpbWUpOwogIGdib29sZWFuICgq
IGRyYWdfbW90aW9uKSAgICAgICAgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQsCgkJCQkgICAg
R2RrRHJhZ0NvbnRleHQgICAgICpjb250ZXh0LAoJCQkJICAgIGdpbnQgICAgICAgICAgICAgICAg
eCwKCQkJCSAgICBnaW50ICAgICAgICAgICAgICAgIHksCgkJCQkgICAgZ3VpbnQgICAgICAgICAg
ICAgICB0aW1lKTsKICBnYm9vbGVhbiAoKiBkcmFnX2Ryb3ApICAgICAgICAgICAoR3RrV2lkZ2V0
CSAgICAgICAqd2lkZ2V0LAoJCQkJICAgIEdka0RyYWdDb250ZXh0ICAgICAqY29udGV4dCwKCQkJ
CSAgICBnaW50ICAgICAgICAgICAgICAgIHgsCgkJCQkgICAgZ2ludCAgICAgICAgICAgICAgICB5
LAoJCQkJICAgIGd1aW50ICAgICAgICAgICAgICAgdGltZSk7CiAgdm9pZCAoKiBkcmFnX2RhdGFf
cmVjZWl2ZWQpICAgICAgKEd0a1dpZGdldCAgICAgICAgICAqd2lkZ2V0LAoJCQkJICAgIEdka0Ry
YWdDb250ZXh0ICAgICAqY29udGV4dCwKCQkJCSAgICBnaW50ICAgICAgICAgICAgICAgIHgsCgkJ
CQkgICAgZ2ludCAgICAgICAgICAgICAgICB5LAoJCQkJICAgIEd0a1NlbGVjdGlvbkRhdGEgICAq
c2VsZWN0aW9uX2RhdGEsCgkJCQkgICAgZ3VpbnQgICAgICAgICAgICAgICBpbmZvLAoJCQkJICAg
IGd1aW50ICAgICAgICAgICAgICAgdGltZSk7CiAgCiAgIAogIHZvaWQgKCogZGVidWdfbXNnKQkJ
ICAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJCSAgICBjb25zdCBnY2hhcgkgICAgICAg
KnN0cmluZyk7CgogICAKICBHdGtGdW5jdGlvbiBwYWQxOwogIEd0a0Z1bmN0aW9uIHBhZDI7CiAg
R3RrRnVuY3Rpb24gcGFkMzsKICBHdGtGdW5jdGlvbiBwYWQ0Owp9OwoKc3RydWN0IF9HdGtXaWRn
ZXRBdXhJbmZvCnsKICBnaW50MTYgIHg7CiAgZ2ludDE2ICB5OwogIGdpbnQxNiB3aWR0aDsKICBn
aW50MTYgaGVpZ2h0Owp9OwoKc3RydWN0IF9HdGtXaWRnZXRTaGFwZUluZm8KewogIGdpbnQxNiAg
ICAgb2Zmc2V0X3g7CiAgZ2ludDE2ICAgICBvZmZzZXRfeTsKICBHZGtCaXRtYXAgKnNoYXBlX21h
c2s7Cn07CgoKR3RrVHlwZQkgICBndGtfd2lkZ2V0X2dldF90eXBlCQkgICh2b2lkKTsKR3RrV2lk
Z2V0KiBndGtfd2lkZ2V0X25ldwkJICAoR3RrVHlwZQkJdHlwZSwKCQkJCQkgICBjb25zdCBnY2hh
cgkgICAgICAgKmZpcnN0X2FyZ19uYW1lLAoJCQkJCSAgIC4uLik7Ckd0a1dpZGdldCogZ3RrX3dp
ZGdldF9uZXd2CQkgIChHdGtUeXBlCQl0eXBlLAoJCQkJCSAgIGd1aW50CQluYXJncywKCQkJCQkg
ICBHdGtBcmcJICAgICAgICphcmdzKTsKdm9pZAkgICBndGtfd2lkZ2V0X3JlZgkJICAoR3RrV2lk
Z2V0CSAgICAgICAqd2lkZ2V0KTsKdm9pZAkgICBndGtfd2lkZ2V0X3VucmVmCQkgIChHdGtXaWRn
ZXQJICAgICAgICp3aWRnZXQpOwp2b2lkCSAgIGd0a193aWRnZXRfZGVzdHJveQkJICAoR3RrV2lk
Z2V0CSAgICAgICAqd2lkZ2V0KTsKdm9pZAkgICBndGtfd2lkZ2V0X2Rlc3Ryb3llZAkJICAoR3Rr
V2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJCSAgIEd0a1dpZGdldAkgICAgICAqKndpZGdldF9w
b2ludGVyKTsKdm9pZAkgICBndGtfd2lkZ2V0X2dldAkJICAoR3RrV2lkZ2V0CSAgICAgICAqd2lk
Z2V0LAoJCQkJCSAgIEd0a0FyZwkgICAgICAgKmFyZyk7CnZvaWQJICAgZ3RrX3dpZGdldF9nZXR2
CQkgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQsCgkJCQkJICAgZ3VpbnQJCW5hcmdzLAoJCQkJ
CSAgIEd0a0FyZwkgICAgICAgKmFyZ3MpOwp2b2lkCSAgIGd0a193aWRnZXRfc2V0CQkgIChHdGtX
aWRnZXQJICAgICAgICp3aWRnZXQsCgkJCQkJICAgY29uc3QgZ2NoYXIgICAgICAgICAqZmlyc3Rf
YXJnX25hbWUsCgkJCQkJICAgLi4uKTsKdm9pZAkgICBndGtfd2lkZ2V0X3NldHYJCSAgKEd0a1dp
ZGdldAkgICAgICAgKndpZGdldCwKCQkJCQkgICBndWludAkJbmFyZ3MsCgkJCQkJICAgR3RrQXJn
CSAgICAgICAqYXJncyk7CnZvaWQJICAgZ3RrX3dpZGdldF91bnBhcmVudAkJICAoR3RrV2lkZ2V0
CSAgICAgICAqd2lkZ2V0KTsKdm9pZAkgICBndGtfd2lkZ2V0X3Nob3cJCSAgKEd0a1dpZGdldAkg
ICAgICAgKndpZGdldCk7CnZvaWQgICAgICAgZ3RrX3dpZGdldF9zaG93X25vdyAgICAgICAgICAg
IChHdGtXaWRnZXQgICAgICAgICAgICp3aWRnZXQpOwp2b2lkCSAgIGd0a193aWRnZXRfaGlkZQkJ
ICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0KTsKdm9pZAkgICBndGtfd2lkZ2V0X3Nob3dfYWxs
CQkgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQpOwp2b2lkCSAgIGd0a193aWRnZXRfaGlkZV9h
bGwJCSAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCk7CnZvaWQJICAgZ3RrX3dpZGdldF9tYXAJ
CSAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCk7CnZvaWQJICAgZ3RrX3dpZGdldF91bm1hcAkJ
ICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0KTsKdm9pZAkgICBndGtfd2lkZ2V0X3JlYWxpemUJ
CSAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCk7CnZvaWQJICAgZ3RrX3dpZGdldF91bnJlYWxp
emUJCSAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCk7CgogCnZvaWQJICAgZ3RrX3dpZGdldF9x
dWV1ZV9kcmF3CSAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCk7CnZvaWQJICAgZ3RrX3dpZGdl
dF9xdWV1ZV9kcmF3X2FyZWEJICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJCSAgIGdp
bnQgICAgICAgICAgICAgICAgIHgsCgkJCQkJICAgZ2ludCAgICAgICAgICAgICAgICAgeSwKCQkJ
CQkgICBnaW50ICAgICAgICAgICAgICAgICB3aWR0aCwKCQkJCQkgICBnaW50ICAgICAgICAgICAg
ICAgICBoZWlnaHQpOwp2b2lkCSAgIGd0a193aWRnZXRfcXVldWVfY2xlYXIJICAoR3RrV2lkZ2V0
CSAgICAgICAqd2lkZ2V0KTsKdm9pZAkgICBndGtfd2lkZ2V0X3F1ZXVlX2NsZWFyX2FyZWEJICAo
R3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJCSAgIGdpbnQgICAgICAgICAgICAgICAgIHgs
CgkJCQkJICAgZ2ludCAgICAgICAgICAgICAgICAgeSwKCQkJCQkgICBnaW50ICAgICAgICAgICAg
ICAgICB3aWR0aCwKCQkJCQkgICBnaW50ICAgICAgICAgICAgICAgICBoZWlnaHQpOwoKCnZvaWQJ
ICAgZ3RrX3dpZGdldF9xdWV1ZV9yZXNpemUJICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0KTsK
dm9pZAkgICBndGtfd2lkZ2V0X2RyYXcJCSAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJ
CQkgICBHZGtSZWN0YW5nbGUJICAgICAgICphcmVhKTsKdm9pZAkgICBndGtfd2lkZ2V0X2RyYXdf
Zm9jdXMJICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0KTsKdm9pZAkgICBndGtfd2lkZ2V0X2Ry
YXdfZGVmYXVsdAkgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQpOwp2b2lkCSAgIGd0a193aWRn
ZXRfc2l6ZV9yZXF1ZXN0CSAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJCQkgICBHdGtS
ZXF1aXNpdGlvbiAgICAgICpyZXF1aXNpdGlvbik7CnZvaWQJICAgZ3RrX3dpZGdldF9zaXplX2Fs
bG9jYXRlCSAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJCQkgICBHdGtBbGxvY2F0aW9u
ICAgICAgICphbGxvY2F0aW9uKTsKdm9pZCAgICAgICBndGtfd2lkZ2V0X2dldF9jaGlsZF9yZXF1
aXNpdGlvbiAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJCSAgICAgR3RrUmVxdWlzaXRp
b24gICAgKnJlcXVpc2l0aW9uKTsKdm9pZAkgICBndGtfd2lkZ2V0X2FkZF9hY2NlbGVyYXRvcgkg
IChHdGtXaWRnZXQgICAgICAgICAgICp3aWRnZXQsCgkJCQkJICAgY29uc3QgZ2NoYXIgICAgICAg
ICAqYWNjZWxfc2lnbmFsLAoJCQkJCSAgIEd0a0FjY2VsR3JvdXAgICAgICAgKmFjY2VsX2dyb3Vw
LAoJCQkJCSAgIGd1aW50ICAgICAgICAgICAgICAgIGFjY2VsX2tleSwKCQkJCQkgICBndWludCAg
ICAgICAgICAgICAgICBhY2NlbF9tb2RzLAoJCQkJCSAgIEd0a0FjY2VsRmxhZ3MgICAgICAgIGFj
Y2VsX2ZsYWdzKTsKdm9pZAkgICBndGtfd2lkZ2V0X3JlbW92ZV9hY2NlbGVyYXRvciAgKEd0a1dp
ZGdldCAgICAgICAgICAgKndpZGdldCwKCQkJCQkgICBHdGtBY2NlbEdyb3VwICAgICAgICphY2Nl
bF9ncm91cCwKCQkJCQkgICBndWludCAgICAgICAgICAgICAgICBhY2NlbF9rZXksCgkJCQkJICAg
Z3VpbnQgICAgICAgICAgICAgICAgYWNjZWxfbW9kcyk7CnZvaWQJICAgZ3RrX3dpZGdldF9yZW1v
dmVfYWNjZWxlcmF0b3JzIChHdGtXaWRnZXQgICAgICAgICAgICp3aWRnZXQsCgkJCQkJICAgY29u
c3QgZ2NoYXIJICAgICAgICphY2NlbF9zaWduYWwsCgkJCQkJICAgZ2Jvb2xlYW4JCXZpc2libGVf
b25seSk7Cmd1aW50CSAgIGd0a193aWRnZXRfYWNjZWxlcmF0b3Jfc2lnbmFsICAoR3RrV2lkZ2V0
ICAgICAgICAgICAqd2lkZ2V0LAoJCQkJCSAgIEd0a0FjY2VsR3JvdXAgICAgICAgKmFjY2VsX2dy
b3VwLAoJCQkJCSAgIGd1aW50ICAgICAgICAgICAgICAgIGFjY2VsX2tleSwKCQkJCQkgICBndWlu
dCAgICAgICAgICAgICAgICBhY2NlbF9tb2RzKTsKdm9pZAkgICBndGtfd2lkZ2V0X2xvY2tfYWNj
ZWxlcmF0b3JzICAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCk7CnZvaWQJICAgZ3RrX3dpZGdl
dF91bmxvY2tfYWNjZWxlcmF0b3JzIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQpOwpnYm9vbGVh
biAgIGd0a193aWRnZXRfYWNjZWxlcmF0b3JzX2xvY2tlZCAoR3RrV2lkZ2V0CSAgICAgICAqd2lk
Z2V0KTsKZ2ludAkgICBndGtfd2lkZ2V0X2V2ZW50CQkgIChHdGtXaWRnZXQJICAgICAgICp3aWRn
ZXQsCgkJCQkJICAgR2RrRXZlbnQJICAgICAgICpldmVudCk7CgpnYm9vbGVhbiAgIGd0a193aWRn
ZXRfYWN0aXZhdGUJCSAgICAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCk7Cmdib29sZWFuICAg
Z3RrX3dpZGdldF9zZXRfc2Nyb2xsX2FkanVzdG1lbnRzIChHdGtXaWRnZXQgICAgICAgICp3aWRn
ZXQsCgkJCQkJICAgICAgR3RrQWRqdXN0bWVudCAgICAqaGFkanVzdG1lbnQsCgkJCQkJICAgICAg
R3RrQWRqdXN0bWVudCAgICAqdmFkanVzdG1lbnQpOwogICAgIAp2b2lkCSAgIGd0a193aWRnZXRf
cmVwYXJlbnQJCSAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJCQkgICBHdGtXaWRnZXQJ
ICAgICAgICpuZXdfcGFyZW50KTsKdm9pZAkgICBndGtfd2lkZ2V0X3BvcHVwCQkgIChHdGtXaWRn
ZXQJICAgICAgICp3aWRnZXQsCgkJCQkJICAgZ2ludAkJCXgsCgkJCQkJICAgZ2ludAkJCXkpOwpn
aW50CSAgIGd0a193aWRnZXRfaW50ZXJzZWN0CQkgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQs
CgkJCQkJICAgR2RrUmVjdGFuZ2xlCSAgICAgICAqYXJlYSwKCQkJCQkgICBHZGtSZWN0YW5nbGUJ
ICAgICAgICppbnRlcnNlY3Rpb24pOwoKdm9pZAkgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMJICAo
R3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0KTsKdm9pZAkgICBndGtfd2lkZ2V0X2dyYWJfZGVmYXVs
dAkgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQpOwoKdm9pZAkgICBndGtfd2lkZ2V0X3NldF9u
YW1lCQkgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQsCgkJCQkJICAgY29uc3QgZ2NoYXIJICAg
ICAgICpuYW1lKTsKZ2NoYXIqCSAgIGd0a193aWRnZXRfZ2V0X25hbWUJCSAgKEd0a1dpZGdldAkg
ICAgICAgKndpZGdldCk7CnZvaWQJICAgZ3RrX3dpZGdldF9zZXRfc3RhdGUJCSAgKEd0a1dpZGdl
dAkgICAgICAgKndpZGdldCwKCQkJCQkgICBHdGtTdGF0ZVR5cGUJCXN0YXRlKTsKdm9pZAkgICBn
dGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUJICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJ
CSAgIGdib29sZWFuCQlzZW5zaXRpdmUpOwp2b2lkCSAgIGd0a193aWRnZXRfc2V0X2FwcF9wYWlu
dGFibGUJICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJCSAgIGdib29sZWFuCQlhcHBf
cGFpbnRhYmxlKTsKdm9pZAkgICBndGtfd2lkZ2V0X3NldF9wYXJlbnQJICAoR3RrV2lkZ2V0CSAg
ICAgICAqd2lkZ2V0LAoJCQkJCSAgIEd0a1dpZGdldAkgICAgICAgKnBhcmVudCk7CnZvaWQJICAg
Z3RrX3dpZGdldF9zZXRfcGFyZW50X3dpbmRvdwkgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQs
CgkJCQkJICAgR2RrV2luZG93CSAgICAgICAqcGFyZW50X3dpbmRvdyk7Ckdka1dpbmRvdyAqZ3Rr
X3dpZGdldF9nZXRfcGFyZW50X3dpbmRvdwkgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQpOwp2
b2lkCSAgIGd0a193aWRnZXRfc2V0X3Vwb3NpdGlvbgkgIChHdGtXaWRnZXQJICAgICAgICp3aWRn
ZXQsCgkJCQkJICAgZ2ludAkJCXgsCgkJCQkJICAgZ2ludAkJCXkpOwp2b2lkCSAgIGd0a193aWRn
ZXRfc2V0X3VzaXplCQkgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQsCgkJCQkJICAgZ2ludAkJ
CXdpZHRoLAoJCQkJCSAgIGdpbnQJCQloZWlnaHQpOwp2b2lkCSAgIGd0a193aWRnZXRfc2V0X2V2
ZW50cwkgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQsCgkJCQkJICAgZ2ludAkJCWV2ZW50cyk7
CnZvaWQgICAgICAgZ3RrX3dpZGdldF9hZGRfZXZlbnRzICAgICAgICAgIChHdGtXaWRnZXQgICAg
ICAgICAgICp3aWRnZXQsCgkJCQkJICAgZ2ludAkgICAgICAgICAgICAgICAgZXZlbnRzKTsKdm9p
ZAkgICBndGtfd2lkZ2V0X3NldF9leHRlbnNpb25fZXZlbnRzIChHdGtXaWRnZXQJCSp3aWRnZXQs
CgkJCQkJICAgIEdka0V4dGVuc2lvbk1vZGUJbW9kZSk7CgpHZGtFeHRlbnNpb25Nb2RlIGd0a193
aWRnZXRfZ2V0X2V4dGVuc2lvbl9ldmVudHMgKEd0a1dpZGdldAkqd2lkZ2V0KTsKR3RrV2lkZ2V0
KiAgIGd0a193aWRnZXRfZ2V0X3RvcGxldmVsCShHdGtXaWRnZXQJKndpZGdldCk7Ckd0a1dpZGdl
dCogICBndGtfd2lkZ2V0X2dldF9hbmNlc3RvcgkoR3RrV2lkZ2V0CSp3aWRnZXQsCgkJCQkJIEd0
a1R5cGUJd2lkZ2V0X3R5cGUpOwpHZGtDb2xvcm1hcCogZ3RrX3dpZGdldF9nZXRfY29sb3JtYXAJ
KEd0a1dpZGdldAkqd2lkZ2V0KTsKR2RrVmlzdWFsKiAgIGd0a193aWRnZXRfZ2V0X3Zpc3VhbAko
R3RrV2lkZ2V0CSp3aWRnZXQpOwoKIAoKCgoKCnZvaWQgICAgICAgICBndGtfd2lkZ2V0X3NldF9j
b2xvcm1hcCAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCwKCQkJCQkgR2RrQ29sb3JtYXAgICAg
KmNvbG9ybWFwKTsKdm9pZCAgICAgICAgIGd0a193aWRnZXRfc2V0X3Zpc3VhbCAgICAgIChHdGtX
aWRnZXQgICAgICAqd2lkZ2V0LCAKCQkJCQkgR2RrVmlzdWFsICAgICAgKnZpc3VhbCk7CgoKZ2lu
dAkgICAgIGd0a193aWRnZXRfZ2V0X2V2ZW50cwkoR3RrV2lkZ2V0CSp3aWRnZXQpOwp2b2lkCSAg
ICAgZ3RrX3dpZGdldF9nZXRfcG9pbnRlcgkoR3RrV2lkZ2V0CSp3aWRnZXQsCgkJCQkJIGdpbnQJ
CSp4LAoJCQkJCSBnaW50CQkqeSk7CgpnYm9vbGVhbiAgICAgZ3RrX3dpZGdldF9pc19hbmNlc3Rv
cgkoR3RrV2lkZ2V0CSp3aWRnZXQsCgkJCQkJIEd0a1dpZGdldAkqYW5jZXN0b3IpOwoKIAoKZ2lu
dAkgICBndGtfd2lkZ2V0X2hpZGVfb25fZGVsZXRlCShHdGtXaWRnZXQJKndpZGdldCk7CgogCgp2
b2lkCSAgIGd0a193aWRnZXRfc2V0X3N0eWxlCQkoR3RrV2lkZ2V0CSp3aWRnZXQsCgkJCQkJIEd0
a1N0eWxlCSpzdHlsZSk7CnZvaWQJICAgZ3RrX3dpZGdldF9zZXRfcmNfc3R5bGUJKEd0a1dpZGdl
dAkqd2lkZ2V0KTsKdm9pZAkgICBndGtfd2lkZ2V0X2Vuc3VyZV9zdHlsZQkoR3RrV2lkZ2V0CSp3
aWRnZXQpOwpHdGtTdHlsZSogIGd0a193aWRnZXRfZ2V0X3N0eWxlCQkoR3RrV2lkZ2V0CSp3aWRn
ZXQpOwp2b2lkCSAgIGd0a193aWRnZXRfcmVzdG9yZV9kZWZhdWx0X3N0eWxlIChHdGtXaWRnZXQJ
KndpZGdldCk7Cgp2b2lkICAgICAgIGd0a193aWRnZXRfbW9kaWZ5X3N0eWxlICAgICAgKEd0a1dp
ZGdldCAgICAgICp3aWRnZXQsCgkJCQkJIEd0a1JjU3R5bGUgICAgICpzdHlsZSk7CgogCgoKdm9p
ZCAgIGd0a193aWRnZXRfc2V0X2NvbXBvc2l0ZV9uYW1lCShHdGtXaWRnZXQJKndpZGdldCwKCQkJ
CQkgY29uc3QgZ2NoYXIgICAJKm5hbWUpOwpnY2hhciogZ3RrX3dpZGdldF9nZXRfY29tcG9zaXRl
X25hbWUJKEd0a1dpZGdldAkqd2lkZ2V0KTsKICAgICAKIAp2b2lkICAgICAgIGd0a193aWRnZXRf
cmVzZXRfcmNfc3R5bGVzICAgKEd0a1dpZGdldCAgICAgICp3aWRnZXQpOwoKIAoKCgp2b2lkCSAg
ICAgZ3RrX3dpZGdldF9wdXNoX3N0eWxlCSAgICAgKEd0a1N0eWxlCSAqc3R5bGUpOwp2b2lkCSAg
ICAgZ3RrX3dpZGdldF9wdXNoX2NvbG9ybWFwCSAgICAgKEdka0NvbG9ybWFwICpjbWFwKTsKdm9p
ZAkgICAgIGd0a193aWRnZXRfcHVzaF92aXN1YWwJICAgICAoR2RrVmlzdWFsCSAqdmlzdWFsKTsK
dm9pZAkgICAgIGd0a193aWRnZXRfcHVzaF9jb21wb3NpdGVfY2hpbGQgKHZvaWQpOwp2b2lkCSAg
ICAgZ3RrX3dpZGdldF9wb3BfY29tcG9zaXRlX2NoaWxkICAodm9pZCk7CnZvaWQJICAgICBndGtf
d2lkZ2V0X3BvcF9zdHlsZQkgICAgICh2b2lkKTsKdm9pZAkgICAgIGd0a193aWRnZXRfcG9wX2Nv
bG9ybWFwCSAgICAgKHZvaWQpOwp2b2lkCSAgICAgZ3RrX3dpZGdldF9wb3BfdmlzdWFsCSAgICAg
KHZvaWQpOwoKIAoKdm9pZAkgICAgIGd0a193aWRnZXRfc2V0X2RlZmF1bHRfc3R5bGUgICAgKEd0
a1N0eWxlCSAgKnN0eWxlKTsKdm9pZAkgICAgIGd0a193aWRnZXRfc2V0X2RlZmF1bHRfY29sb3Jt
YXAgKEdka0NvbG9ybWFwICpjb2xvcm1hcCk7CnZvaWQJICAgICBndGtfd2lkZ2V0X3NldF9kZWZh
dWx0X3Zpc3VhbCAgIChHZGtWaXN1YWwJICAqdmlzdWFsKTsKR3RrU3R5bGUqICAgIGd0a193aWRn
ZXRfZ2V0X2RlZmF1bHRfc3R5bGUgICAgKHZvaWQpOwpHZGtDb2xvcm1hcCogZ3RrX3dpZGdldF9n
ZXRfZGVmYXVsdF9jb2xvcm1hcCAodm9pZCk7Ckdka1Zpc3VhbCogICBndGtfd2lkZ2V0X2dldF9k
ZWZhdWx0X3Zpc3VhbCAgICh2b2lkKTsKCiAKCnZvaWQJICAgICBndGtfd2lkZ2V0X3NoYXBlX2Nv
bWJpbmVfbWFzayAoR3RrV2lkZ2V0ICp3aWRnZXQsCgkJCQkJICAgIEdka0JpdG1hcCAqc2hhcGVf
bWFzaywKCQkJCQkgICAgZ2ludCAgICAgICBvZmZzZXRfeCwKCQkJCQkgICAgZ2ludCAgICAgICBv
ZmZzZXRfeSk7CgogCnZvaWQJICAgICBndGtfd2lkZ2V0X3Jlc2V0X3NoYXBlcwkgICAoR3RrV2lk
Z2V0ICp3aWRnZXQpOwoKIAoKCnZvaWQJICAgICBndGtfd2lkZ2V0X3BhdGgJCSAgIChHdGtXaWRn
ZXQgKndpZGdldCwKCQkJCQkgICAgZ3VpbnQgICAgICpwYXRoX2xlbmd0aCwKCQkJCQkgICAgZ2No
YXIgICAgKipwYXRoLAoJCQkJCSAgICBnY2hhciAgICAqKnBhdGhfcmV2ZXJzZWQpOwp2b2lkCSAg
ICAgZ3RrX3dpZGdldF9jbGFzc19wYXRoCSAgIChHdGtXaWRnZXQgKndpZGdldCwKCQkJCQkgICAg
Z3VpbnQgICAgICpwYXRoX2xlbmd0aCwKCQkJCQkgICAgZ2NoYXIgICAgKipwYXRoLAoJCQkJCSAg
ICBnY2hhciAgICAqKnBhdGhfcmV2ZXJzZWQpOwoKCgoKCgoKCgp9CgoKCgojIDMyICIvb3B0L2d0
ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a2RuZC5oIiAyCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUv
Z3RrLTEuMi9ndGsvZ3Rrc2VsZWN0aW9uLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK
CgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCnR5cGVkZWYgc3RydWN0IF9HdGtTZWxlY3Rpb25EYXRh
IEd0a1NlbGVjdGlvRGF0YTsKdHlwZWRlZiBzdHJ1Y3QgX0d0a1RhcmdldExpc3QgICAgR3RrVGFy
Z2V0TGlzdDsKdHlwZWRlZiBzdHJ1Y3QgX0d0a1RhcmdldEVudHJ5ICAgR3RrVGFyZ2V0RW50cnk7
CgpzdHJ1Y3QgX0d0a1RhcmdldEVudHJ5IHsKICBnY2hhciAqdGFyZ2V0OwogIGd1aW50ICBmbGFn
czsKICBndWludCAgaW5mbzsKfTsKCiAKCgoKdHlwZWRlZiBzdHJ1Y3QgX0d0a1RhcmdldFBhaXIg
R3RrVGFyZ2V0UGFpcjsKCiAKc3RydWN0IF9HdGtUYXJnZXRMaXN0IHsKICBHTGlzdCAqbGlzdDsK
ICBndWludCByZWZfY291bnQ7Cn07CgpzdHJ1Y3QgX0d0a1RhcmdldFBhaXIgewogIEdka0F0b20g
ICB0YXJnZXQ7CiAgZ3VpbnQgICAgIGZsYWdzOwogIGd1aW50ICAgICBpbmZvOwp9OwoKR3RrVGFy
Z2V0TGlzdCAqZ3RrX3RhcmdldF9saXN0X25ldyAgICAgICAoY29uc3QgR3RrVGFyZ2V0RW50cnkg
KnRhcmdldHMsCgkJCQkJICBndWludCAgICAgICAgICAgICAgICAgbnRhcmdldHMpOwp2b2lkICAg
ICAgICAgICBndGtfdGFyZ2V0X2xpc3RfcmVmICAgICAgIChHdGtUYXJnZXRMaXN0ICAqbGlzdCk7
CnZvaWQgICAgICAgICAgIGd0a190YXJnZXRfbGlzdF91bnJlZiAgICAgKEd0a1RhcmdldExpc3Qg
ICpsaXN0KTsKdm9pZCAgICAgICAgICAgZ3RrX3RhcmdldF9saXN0X2FkZCAgICAgICAoR3RrVGFy
Z2V0TGlzdCAgKmxpc3QsCgkJCQkgIAkgIEdka0F0b20gICAgICAgICB0YXJnZXQsCgkJCQkJICBn
dWludCAgICAgICAgICAgZmxhZ3MsCgkJCQkJICBndWludCAgICAgICAgICAgaW5mbyk7CnZvaWQg
ICAgICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGRfdGFibGUgKEd0a1RhcmdldExpc3QgICAgICAg
ICpsaXN0LAoJCQkJCSAgY29uc3QgR3RrVGFyZ2V0RW50cnkgKnRhcmdldHMsCgkJCQkJICBndWlu
dCAgICAgICAgICAgICAgICAgbnRhcmdldHMpOwp2b2lkICAgICAgICAgICBndGtfdGFyZ2V0X2xp
c3RfcmVtb3ZlICAgIChHdGtUYXJnZXRMaXN0ICAqbGlzdCwKCQkJCQkgIEdka0F0b20gICAgICAg
ICB0YXJnZXQpOwpnYm9vbGVhbiAgICAgICBndGtfdGFyZ2V0X2xpc3RfZmluZCAgICAgIChHdGtU
YXJnZXRMaXN0ICAqbGlzdCwKCQkJCQkgIEdka0F0b20gICAgICAgICB0YXJnZXQsCgkJCQkJICBn
dWludCAgICAgICAgICAqaW5mbyk7CgogCgpnaW50IGd0a19zZWxlY3Rpb25fb3duZXJfc2V0IChH
dGtXaWRnZXQgCSAgKndpZGdldCwKCQkJICAgICAgR2RrQXRvbSAgICAJICAgc2VsZWN0aW9uLAoJ
CQkgICAgICBndWludDMyICAgIAkgICB0aW1lKTsKdm9pZCBndGtfc2VsZWN0aW9uX2FkZF90YXJn
ZXQgKEd0a1dpZGdldCAgICAgICAgICAgKndpZGdldCwgCgkJCSAgICAgICBHZGtBdG9tICAgICAg
ICAgICAgICBzZWxlY3Rpb24sCgkJCSAgICAgICBHZGtBdG9tICAgICAgICAgICAgICB0YXJnZXQs
CgkJCSAgICAgICBndWludCAgICAgICAgICAgICAgICBpbmZvKTsKdm9pZCBndGtfc2VsZWN0aW9u
X2FkZF90YXJnZXRzIChHdGtXaWRnZXQgICAgICAgICAgICAqd2lkZ2V0LCAKCQkJCUdka0F0b20g
ICAgICAgICAgICAgICBzZWxlY3Rpb24sCgkJCQljb25zdCBHdGtUYXJnZXRFbnRyeSAqdGFyZ2V0
cywKCQkJCWd1aW50ICAgICAgICAgICAgICAgICBudGFyZ2V0cyk7CmdpbnQgZ3RrX3NlbGVjdGlv
bl9jb252ZXJ0ICAgKEd0a1dpZGdldCAJICAqd2lkZ2V0LCAKCQkJICAgICAgR2RrQXRvbSAgICAJ
ICAgc2VsZWN0aW9uLCAKCQkJICAgICAgR2RrQXRvbSAgICAJICAgdGFyZ2V0LAoJCQkgICAgICBn
dWludDMyICAgIAkgICB0aW1lKTsKCgp2b2lkIGd0a19zZWxlY3Rpb25fZGF0YV9zZXQgKEd0a1Nl
bGVjdGlvbkRhdGEgKnNlbGVjdGlvbl9kYXRhLAoJCQkgICAgIEdka0F0b20gICAgICAgICAgIHR5
cGUsCgkJCSAgICAgZ2ludCAgICAgICAgICAgICAgZm9ybWF0LAoJCQkgICAgIGNvbnN0IGd1Y2hh
ciAgICAgKmRhdGEsCgkJCSAgICAgZ2ludCAgICAgICAgICAgICAgbGVuZ3RoKTsKCiAKCnZvaWQg
Z3RrX3NlbGVjdGlvbl9yZW1vdmVfYWxsICAgICAgKEd0a1dpZGdldCAqd2lkZ2V0KTsKCiAKCmdp
bnQgZ3RrX3NlbGVjdGlvbl9jbGVhciAgICAgICAgICAgKEd0a1dpZGdldCAJICAgICAgKndpZGdl
dCwKCQkJCSAgICBHZGtFdmVudFNlbGVjdGlvbiAqZXZlbnQpOwpnaW50IGd0a19zZWxlY3Rpb25f
cmVxdWVzdCAgICAgICAgIChHdGtXaWRnZXQgIAkgICAgICAqd2lkZ2V0LAoJCQkJICAgIEdka0V2
ZW50U2VsZWN0aW9uICpldmVudCk7CmdpbnQgZ3RrX3NlbGVjdGlvbl9pbmNyX2V2ZW50ICAgICAg
KEdka1dpbmRvdyAgICAgICAgICp3aW5kb3csCgkJCQkgICAgR2RrRXZlbnRQcm9wZXJ0eSAgKmV2
ZW50KTsKZ2ludCBndGtfc2VsZWN0aW9uX25vdGlmeSAgICAgICAgICAoR3RrV2lkZ2V0ICAgICAg
ICAgKndpZGdldCwKCQkJCSAgICBHZGtFdmVudFNlbGVjdGlvbiAqZXZlbnQpOwpnaW50IGd0a19z
ZWxlY3Rpb25fcHJvcGVydHlfbm90aWZ5IChHdGtXaWRnZXQgICAgICAgICAqd2lkZ2V0LAoJCQkJ
ICAgIEdka0V2ZW50UHJvcGVydHkgICpldmVudCk7Ckd0a1NlbGVjdGlvRGF0YSAqZ3RrX3NlbGVj
dGlvbl9kYXRhX2NvcHkgKEd0a1NlbGVjdGlvbkRhdGEgKmRhdGEpOwp2b2lkCQkgZ3RrX3NlbGVj
dGlvbl9kYXRhX2ZyZWUgKEd0a1NlbGVjdGlvbkRhdGEgKmRhdGEpOwoKCgoKfQoKCgoKIyAzMyAi
L29wdC9ndGsvaW5jbHVkZS9ndGstMS4yL2d0ay9ndGtkbmQuaCIgMgoKCgpleHRlcm4gIkMiIHsK
Cgp0eXBlZGVmIGVudW0gewogIEdUS19ERVNUX0RFRkFVTFRfTU9USU9OICAgICA9IDEgPDwgMCwg
IAogIEdUS19ERVNUX0RFRkFVTFRfSElHSExJR0hUICA9IDEgPDwgMSwgIAogIEdUS19ERVNUX0RF
RkFVTFRfRFJPUCAgICAgICA9IDEgPDwgMiwgIAogIEdUS19ERVNUX0RFRkFVTFRfQUxMICAgICAg
ICA9IDB4MDcKfSBHdGtEZXN0RGVmYXVsdHM7CgogCgp0eXBlZGVmIGVudW0gewogIEdUS19UQVJH
RVRfU0FNRV9BUFAgPSAxIDw8IDAsICAgICAKICBHVEtfVEFSR0VUX1NBTUVfV0lER0VUID0gMSA8
PCAxICAgCn0gR3RrVGFyZ2V0RmxhZ3M7CgogCgp2b2lkIGd0a19kcmFnX2dldF9kYXRhIChHdGtX
aWRnZXQgICAgICAqd2lkZ2V0LAoJCQlHZGtEcmFnQ29udGV4dCAqY29udGV4dCwKCQkJR2RrQXRv
bSAgICAgICAgIHRhcmdldCwKCQkJZ3VpbnQzMiAgICAgICAgIHRpbWUpOwp2b2lkIGd0a19kcmFn
X2ZpbmlzaCAgIChHZGtEcmFnQ29udGV4dCAqY29udGV4dCwKCQkJZ2Jvb2xlYW4gICAgICAgIHN1
Y2Nlc3MsCgkJCWdib29sZWFuICAgICAgICBkZWwsCgkJCWd1aW50MzIgICAgICAgICB0aW1lKTsK
Ckd0a1dpZGdldCAqZ3RrX2RyYWdfZ2V0X3NvdXJjZV93aWRnZXQgKEdka0RyYWdDb250ZXh0ICpj
b250ZXh0KTsKCnZvaWQgZ3RrX2RyYWdfaGlnaGxpZ2h0ICAgKEd0a1dpZGdldCAgKndpZGdldCk7
CnZvaWQgZ3RrX2RyYWdfdW5oaWdobGlnaHQgKEd0a1dpZGdldCAgKndpZGdldCk7Cgp2b2lkIGd0
a19kcmFnX2Rlc3Rfc2V0ICAgKEd0a1dpZGdldCAgICAgICAgICAgICp3aWRnZXQsCgkJCSAgR3Rr
RGVzdERlZmF1bHRzICAgICAgIGZsYWdzLAogIAkJICAgICAgICAgIGNvbnN0IEd0a1RhcmdldEVu
dHJ5ICp0YXJnZXRzLAoJCQkgIGdpbnQgICAgICAgICAgICAgICAgICBuX3RhcmdldHMsCgkJCSAg
R2RrRHJhZ0FjdGlvbiAgICAgICAgIGFjdGlvbnMpOwoKdm9pZCBndGtfZHJhZ19kZXN0X3NldF9w
cm94eSAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCwKCQkJICAgICAgR2RrV2luZG93ICAgICAgKnBy
b3h5X3dpbmRvdywKCQkJICAgICAgR2RrRHJhZ1Byb3RvY29sIHByb3RvY29sLAoJCQkgICAgICBn
Ym9vbGVhbiAgICAgICAgdXNlX2Nvb3JkaW5hdGVzKTsKCiAKCgoKdm9pZCBndGtfZHJhZ19kZXN0
X3Vuc2V0IChHdGtXaWRnZXQgICAgICAgICAgKndpZGdldCk7CgogCgp2b2lkIGd0a19kcmFnX3Nv
dXJjZV9zZXQgIChHdGtXaWRnZXQgICAgICAgICAgICAqd2lkZ2V0LAoJCQkgICBHZGtNb2RpZmll
clR5cGUgICAgICAgc3RhcnRfYnV0dG9uX21hc2ssCgkJCSAgIGNvbnN0IEd0a1RhcmdldEVudHJ5
ICp0YXJnZXRzLAoJCQkgICBnaW50ICAgICAgICAgICAgICAgICAgbl90YXJnZXRzLAoJCQkgICBH
ZGtEcmFnQWN0aW9uICAgICAgICAgYWN0aW9ucyk7Cgp2b2lkIGd0a19kcmFnX3NvdXJjZV91bnNl
dCAoR3RrV2lkZ2V0ICAgICAgICAqd2lkZ2V0KTsKCnZvaWQgZ3RrX2RyYWdfc291cmNlX3NldF9p
Y29uIChHdGtXaWRnZXQgICAgICp3aWRnZXQsCgkJCSAgICAgICBHZGtDb2xvcm1hcCAgICpjb2xv
cm1hcCwKCQkJICAgICAgIEdka1BpeG1hcCAgICAgKnBpeG1hcCwKCQkJICAgICAgIEdka0JpdG1h
cCAgICAgKm1hc2spOwoKIAoKCgpHZGtEcmFnQ29udGV4dCAqZ3RrX2RyYWdfYmVnaW4gKEd0a1dp
ZGdldCAgICAgICAgICp3aWRnZXQsCgkJCQlHdGtUYXJnZXRMaXN0ICAgICAqdGFyZ2V0cywKCQkJ
CUdka0RyYWdBY3Rpb24gICAgICBhY3Rpb25zLAoJCQkJZ2ludCAgICAgICAgICAgICAgIGJ1dHRv
biwKCQkJCUdka0V2ZW50ICAgICAgICAgICpldmVudCk7CgogCgp2b2lkIGd0a19kcmFnX3NldF9p
Y29uX3dpZGdldCAgKEdka0RyYWdDb250ZXh0ICAgICpjb250ZXh0LAoJCQkJR3RrV2lkZ2V0ICAg
ICAgICAgKndpZGdldCwKCQkJCWdpbnQgICAgICAgICAgICAgICBob3RfeCwKCQkJCWdpbnQgICAg
ICAgICAgICAgICBob3RfeSk7Cgp2b2lkIGd0a19kcmFnX3NldF9pY29uX3BpeG1hcCAgKEdka0Ry
YWdDb250ZXh0ICAgICpjb250ZXh0LAoJCQkJR2RrQ29sb3JtYXAgICAgICAgKmNvbG9ybWFwLAoJ
CQkJR2RrUGl4bWFwICAgICAgICAgKnBpeG1hcCwKCQkJCUdka0JpdG1hcCAgICAgICAgICptYXNr
LAoJCQkJZ2ludCAgICAgICAgICAgICAgIGhvdF94LAoJCQkJZ2ludCAgICAgICAgICAgICAgIGhv
dF95KTsKCnZvaWQgZ3RrX2RyYWdfc2V0X2ljb25fZGVmYXVsdCAoR2RrRHJhZ0NvbnRleHQgICAg
KmNvbnRleHQpOwoKdm9pZCBndGtfZHJhZ19zZXRfZGVmYXVsdF9pY29uIChHZGtDb2xvcm1hcCAg
ICpjb2xvcm1hcCwKCQkJCUdka1BpeG1hcCAgICAgKnBpeG1hcCwKCQkJCUdka0JpdG1hcCAgICAg
Km1hc2ssCgkJCSAgICAgICAgZ2ludCAgICAgICAgICAgaG90X3gsCgkJCSAgICAgICAgZ2ludCAg
ICAgICAgICAgaG90X3kpOwoKCiAKdm9pZCBndGtfZHJhZ19zb3VyY2VfaGFuZGxlX2V2ZW50IChH
dGtXaWRnZXQgKndpZGdldCwKCQkJCSAgIEdka0V2ZW50ICAqZXZlbnQpOwp2b2lkIGd0a19kcmFn
X2Rlc3RfaGFuZGxlX2V2ZW50IChHdGtXaWRnZXQgKnRvcGxldmVsLAoJCQkJIEdka0V2ZW50ICAq
ZXZlbnQpOwoKCn0KCgoKCgoKIyAzNCAiL29wdC9ndGsvaW5jbHVkZS9ndGstLS93aWRnZXQuaCIg
MgoKCgp0eXBlZGVmIHN0cnVjdCBfR3RrVGFyZ2V0RW50cnkgR3RrVGFyZ2V0RW50cnk7CnR5cGVk
ZWYgc3RydWN0IF9HdGtUYXJnZXRMaXN0IEd0a1RhcmdldExpc3Q7CgpuYW1lc3BhY2UgR3RrIHsK
Y2xhc3MgV2lkZ2V0OwpjbGFzcyBXaWRnZXRfQ2xhc3M7Cn0KbmFtZXNwYWNlIEd0ayB7IEd0azo6
V2lkZ2V0ICp3cmFwIChHdGtXaWRnZXQgKm8pOyB9CmV4dGVybiAiQyIgZ2ludCBndGttbV93aWRn
ZXRfYnV0dG9uX3ByZXNzX2V2ZW50KEd0a1dpZGdldCosR2RrRXZlbnRCdXR0b24qIHAwKTsKZXh0
ZXJuICJDIiBnaW50IGd0a21tX3dpZGdldF9idXR0b25fcmVsZWFzZV9ldmVudChHdGtXaWRnZXQq
LEdka0V2ZW50QnV0dG9uKiBwMCk7CmV4dGVybiAiQyIgZ2ludCBndGttbV93aWRnZXRfbW90aW9u
X25vdGlmeV9ldmVudChHdGtXaWRnZXQqLEdka0V2ZW50TW90aW9uKiBwMCk7CmV4dGVybiAiQyIg
Z2ludCBndGttbV93aWRnZXRfZGVsZXRlX2V2ZW50KEd0a1dpZGdldCosR2RrRXZlbnRBbnkqIHAw
KTsKZXh0ZXJuICJDIiBnaW50IGd0a21tX3dpZGdldF9leHBvc2VfZXZlbnQoR3RrV2lkZ2V0KixH
ZGtFdmVudEV4cG9zZSogcDApOwpleHRlcm4gIkMiIGdpbnQgZ3RrbW1fd2lkZ2V0X2tleV9wcmVz
c19ldmVudChHdGtXaWRnZXQqLEdka0V2ZW50S2V5KiBwMCk7CmV4dGVybiAiQyIgZ2ludCBndGtt
bV93aWRnZXRfa2V5X3JlbGVhc2VfZXZlbnQoR3RrV2lkZ2V0KixHZGtFdmVudEtleSogcDApOwpl
eHRlcm4gIkMiIGdpbnQgZ3RrbW1fd2lkZ2V0X2VudGVyX25vdGlmeV9ldmVudChHdGtXaWRnZXQq
LEdka0V2ZW50Q3Jvc3NpbmcqIHAwKTsKZXh0ZXJuICJDIiBnaW50IGd0a21tX3dpZGdldF9sZWF2
ZV9ub3RpZnlfZXZlbnQoR3RrV2lkZ2V0KixHZGtFdmVudENyb3NzaW5nKiBwMCk7CmV4dGVybiAi
QyIgZ2ludCBndGttbV93aWRnZXRfY29uZmlndXJlX2V2ZW50KEd0a1dpZGdldCosR2RrRXZlbnRD
b25maWd1cmUqIHAwKTsKZXh0ZXJuICJDIiBnaW50IGd0a21tX3dpZGdldF9mb2N1c19pbl9ldmVu
dChHdGtXaWRnZXQqLEdka0V2ZW50Rm9jdXMqIHAwKTsKZXh0ZXJuICJDIiBnaW50IGd0a21tX3dp
ZGdldF9mb2N1c19vdXRfZXZlbnQoR3RrV2lkZ2V0KixHZGtFdmVudEZvY3VzKiBwMCk7CmV4dGVy
biAiQyIgZ2ludCBndGttbV93aWRnZXRfbWFwX2V2ZW50KEd0a1dpZGdldCosR2RrRXZlbnRBbnkq
IHAwKTsKZXh0ZXJuICJDIiBnaW50IGd0a21tX3dpZGdldF91bm1hcF9ldmVudChHdGtXaWRnZXQq
LEdka0V2ZW50QW55KiBwMCk7CmV4dGVybiAiQyIgZ2ludCBndGttbV93aWRnZXRfcHJvcGVydHlf
bm90aWZ5X2V2ZW50KEd0a1dpZGdldCosR2RrRXZlbnRQcm9wZXJ0eSogcDApOwpleHRlcm4gIkMi
IGdpbnQgZ3RrbW1fd2lkZ2V0X3NlbGVjdGlvbl9jbGVhcl9ldmVudChHdGtXaWRnZXQqLEdka0V2
ZW50U2VsZWN0aW9uKiBwMCk7CmV4dGVybiAiQyIgZ2ludCBndGttbV93aWRnZXRfc2VsZWN0aW9u
X3JlcXVlc3RfZXZlbnQoR3RrV2lkZ2V0KixHZGtFdmVudFNlbGVjdGlvbiogcDApOwpleHRlcm4g
IkMiIGdpbnQgZ3RrbW1fd2lkZ2V0X3NlbGVjdGlvbl9ub3RpZnlfZXZlbnQoR3RrV2lkZ2V0KixH
ZGtFdmVudFNlbGVjdGlvbiogcDApOwpleHRlcm4gIkMiIGdpbnQgZ3RrbW1fd2lkZ2V0X3Byb3hp
bWl0eV9pbl9ldmVudChHdGtXaWRnZXQqLEdka0V2ZW50UHJveGltaXR5KiBwMCk7CmV4dGVybiAi
QyIgZ2ludCBndGttbV93aWRnZXRfcHJveGltaXR5X291dF9ldmVudChHdGtXaWRnZXQqLEdka0V2
ZW50UHJveGltaXR5KiBwMCk7CmV4dGVybiAiQyIgZ2ludCBndGttbV93aWRnZXRfY2xpZW50X2V2
ZW50KEd0a1dpZGdldCosR2RrRXZlbnRDbGllbnQqIHAwKTsKZXh0ZXJuICJDIiBnaW50IGd0a21t
X3dpZGdldF9ub19leHBvc2VfZXZlbnQoR3RrV2lkZ2V0KixHZGtFdmVudEFueSogcDApOwpleHRl
cm4gIkMiIGdpbnQgZ3RrbW1fd2lkZ2V0X3Zpc2liaWxpdHlfbm90aWZ5X2V2ZW50KEd0a1dpZGdl
dCosR2RrRXZlbnRWaXNpYmlsaXR5KiBwMCk7Cm5hbWVzcGFjZSBHdGsKewpjbGFzcyBTdHlsZTsK
Y2xhc3MgQWNjZWxHcm91cDsKY2xhc3MgQWRqdXN0bWVudDsKY2xhc3MgV2luZG93OwoKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKY2xhc3MgV2lkZ2V0IDogcHVibGljIE9iamVjdCB7Cgpw
dWJsaWM6CiAgdHlwZWRlZiBXaWRnZXQgICAgICAgICAgQ3BwT2JqZWN0VHlwZTsKICB0eXBlZGVm
IFdpZGdldF9DbGFzcyAgICBDcHBDbGFzc1R5cGU7CiAgdHlwZWRlZiBHdGtXaWRnZXQgICAgICAg
ICAgIEJhc2VPYmplY3RUeXBlOwogIHR5cGVkZWYgR3RrV2lkZ2V0Q2xhc3MgICAgICBCYXNlQ2xh
c3NUeXBlOwoKcHJpdmF0ZToKICBmcmllbmQgY2xhc3MgV2lkZ2V0X0NsYXNzOwogIHN0YXRpYyBD
cHBDbGFzc1R5cGUgd2lkZ2V0X2NsYXNzOwoKICBXaWRnZXQoY29uc3QgV2lkZ2V0Jik7CiAgV2lk
Z2V0JiBvcGVyYXRvcj0oY29uc3QgV2lkZ2V0Jik7ICAKCnByb3RlY3RlZDoKICB2b2lkICAgaW5p
dGlhbGl6ZV9jbGFzcygpOwogIGV4cGxpY2l0IFdpZGdldChHdGtXaWRnZXQgKmNhc3RpdGVtKTsK
CnB1YmxpYzoKICBzdGF0aWMgR3RrVHlwZSBnZXRfdHlwZSgpOwogIEd0a1dpZGdldCogZ3Rrb2Jq
KCkgICAgICAgICAgICAgeyByZXR1cm4gKEd0a1dpZGdldCopKGd0a29iamVjdCk7IH0KICBjb25z
dCBHdGtXaWRnZXQqIGd0a29iaigpIGNvbnN0IHsgcmV0dXJuIChHdGtXaWRnZXQqKShndGtvYmpl
Y3QpOyB9CiAgc3RhdGljIGJvb2wgaXNBKE9iamVjdCAqY2hlY2tjYXN0KTsKCiAgIAogIHN0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBzaWduYWxfbmFtZXNbXTsKCiAgdmlydHVhbCB+V2lkZ2V0KCk7
Cgpwcml2YXRlOgoKcHVibGljOgogIGZyaWVuZCBjbGFzcyBNYWluOwoKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgogIHZvaWQgdW5wYXJlbnQoKTsKCgoKICB2b2lkIHNob3dfbm93
KCk7CgoKIAoKCiAgdm9pZCBxdWV1ZV9kcmF3KCk7CgogIHZvaWQgcXVldWVfZHJhd19hcmVhKGdp
bnQgeCxnaW50IHksZ2ludCB3aWR0aCxnaW50IGhlaWdodCk7CgoKCiAgdm9pZCBxdWV1ZV9jbGVh
cigpOwoKICB2b2lkIHF1ZXVlX2NsZWFyX2FyZWEoZ2ludCB4LGdpbnQgeSxnaW50IHdpZHRoLGdp
bnQgaGVpZ2h0KTsKCgoKICB2b2lkIHF1ZXVlX3Jlc2l6ZSgpOwoKCiAKCiAKIAogCiAKIAogCgoK
ICB2b2lkIGxvY2tfYWNjZWxlcmF0b3JzKCk7CgoKICB2b2lkIHVubG9ja19hY2NlbGVyYXRvcnMo
KTsKCgogICAKICBib29sIGFjY2VsZXJhdG9yc19sb2NrZWQoKTsKCgogICAKCiAgdm9pZCBhZGRf
YWNjZWxlcmF0b3IoY29uc3QgbnN0cmluZyYgYWNjZWxfc2lnbmFsLEd0azo6QWNjZWxHcm91cCYg
YWNjZWxfZ3JvdXAsZ3VpbnQgYWNjZWxfa2V5LGd1aW50IGFjY2VsX21vZHMsR3RrQWNjZWxGbGFn
cyBhY2NlbF9mbGFncyk7CgogICAKCgoKCiAgdm9pZCByZW1vdmVfYWNjZWxlcmF0b3IoR3RrOjpB
Y2NlbEdyb3VwJiBhY2NlbF9ncm91cCxndWludCBhY2NlbF9rZXksZ3VpbnQgYWNjZWxfbW9kcyk7
CgogICAKCgoKICB2b2lkIHJlbW92ZV9hY2NlbGVyYXRvcnMoY29uc3QgbnN0cmluZyYgYWNjZWxf
c2lnbmFsLGJvb2wgdmlzaWJsZV9vbmx5KTsKCgoKICBib29sIGFjdGl2YXRlKCk7CgoKICAgCiAg
IAogICAKICAgCiAgIAogICAKCgogIHZvaWQgcmVwYXJlbnQoR3RrOjpXaWRnZXQmIG5ld3BhcmVu
dCk7CgoKCgogIHZvaWQgcG9wdXAoZ2ludCB4LGdpbnQgeSk7CgoKCgogIGdpbnQgaW50ZXJzZWN0
KGNvbnN0IEdka19SZWN0YW5nbGUmIGFyZWEsY29uc3QgR2RrX1JlY3RhbmdsZSYgaW50ZXJzZWN0
aW9uKSBjb25zdDsKCgoKICB2b2lkIGdyYWJfZGVmYXVsdCgpOwoKCgogIHZvaWQgc2V0X25hbWUo
Y29uc3QgbnN0cmluZyYgbmFtZSk7CgogICAKCgogIEd0azo6bnN0cmluZyBnZXRfbmFtZSgpIGNv
bnN0OwoKICBHdGtTdGF0ZVR5cGUgZ2V0X3N0YXRlKCkgY29uc3Q7CgoKICB2b2lkIHNldF9zdGF0
ZShHdGtTdGF0ZVR5cGUgc3RhdGUpOwoKCgogIHZvaWQgc2V0X3NlbnNpdGl2ZShib29sIHNlbnNp
dGl2ZSk7CgoKCiAgdm9pZCBzZXRfYXBwX3BhaW50YWJsZShib29sIGFwcF9wYWludGFibGUpOwoK
ICAgCiAgR3RrOjpXaWRnZXQqIGdldF9wYXJlbnQoKSBjb25zdDsKCgoKICB2b2lkIHNldF9wYXJl
bnRfd2luZG93KGNvbnN0IEdka19XaW5kb3cmIHBhcmVudF93aW5kb3cpOwoKICAgCgoKICBHZGtf
V2luZG93IGdldF9wYXJlbnRfd2luZG93KCkgY29uc3Q7CgoKCgoKICB2b2lkIHNldF91cG9zaXRp
b24oZ2ludCB4LGdpbnQgeSk7CgogICAKCgoKICB2b2lkIHNldF91c2l6ZShnaW50IHgsZ2ludCB5
KTsKCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAoK
CiAgdm9pZCBzZXRfZXZlbnRzKGdpbnQgZXZlbnRzKTsKCgoKICB2b2lkIGFkZF9ldmVudHMoZ2lu
dCBldmVudHMpOwoKCgogIHZvaWQgc2V0X2V4dGVuc2lvbl9ldmVudHMoR2RrRXh0ZW5zaW9uTW9k
ZSBtb2RlKTsKCgoKICBHZGtFeHRlbnNpb25Nb2RlIGdldF9leHRlbnNpb25fZXZlbnRzKCkgY29u
c3Q7CgogICAKICAgCgoKICBHdGs6OldpbmRvdyogZ2V0X3RvcGxldmVsKCk7CgogICAKICAgCgoK
ICBHdGs6OldpZGdldCogZ2V0X2FuY2VzdG9yKEd0a1R5cGUgdHlwZSkgY29uc3Q7CgogICAKCgog
IEdka19Db2xvcm1hcCBnZXRfY29sb3JtYXAoKSBjb25zdDsKCiAgIAoKCiAgR2RrX1Zpc3VhbCBn
ZXRfdmlzdWFsKCkgY29uc3Q7CgogICAKICAgCiAgIAogICAKICAgCiAgIAoKCiAgdm9pZCBzZXRf
Y29sb3JtYXAoY29uc3QgR2RrX0NvbG9ybWFwJiBjb2xvcm1hcCk7CgogICAKICAgCiAgIAogICAK
ICAgCiAgIAoKCiAgdm9pZCBzZXRfdmlzdWFsKGNvbnN0IEdka19WaXN1YWwmIHZpc3VhbCk7Cgog
ICAKCgogIGdpbnQgZ2V0X2V2ZW50cygpIGNvbnN0OwoKCgogIHZvaWQgZ2V0X3BvaW50ZXIoZ2lu
dCYgeCxnaW50JiB5KSBjb25zdDsKCgoKICBib29sIGlzX2FuY2VzdG9yKEd0azo6V2lkZ2V0JiB3
aWRnZXQpIGNvbnN0OwoKCgogIHZvaWQgc2V0X3N0eWxlKEd0azo6U3R5bGUmIHN0eWxlKTsKCgoK
ICB2b2lkIHNldF9yY19zdHlsZSgpOwoKCgogIHZvaWQgZW5zdXJlX3N0eWxlKCk7CgogICAKICAg
CgoKICBHdGs6OlN0eWxlKiBnZXRfc3R5bGUoKSBjb25zdDsKCgoKICB2b2lkIHJlc3RvcmVfZGVm
YXVsdF9zdHlsZSgpOwoKCgogIHZvaWQgc2V0X2NvbXBvc2l0ZV9uYW1lKGNvbnN0IG5zdHJpbmcm
IG5hbWUpOwoKCgogIEd0azo6bnN0cmluZyBnZXRfY29tcG9zaXRlX25hbWUoKTsKCgoKICB2b2lk
IHJlc2V0X3JjX3N0eWxlcygpOwoKCgogCgoKICBzdGF0aWMgdm9pZCBwdXNoX3N0eWxlKEd0azo6
U3R5bGUmIHN0eWxlKTsKCgoKICBzdGF0aWMgdm9pZCBwdXNoX2NvbG9ybWFwKGNvbnN0IEdka19D
b2xvcm1hcCYgY21hcCk7CgoKCiAgc3RhdGljIHZvaWQgcHVzaF92aXN1YWwoY29uc3QgR2RrX1Zp
c3VhbCYgdmlzdWFsKTsKCgoKICBzdGF0aWMgdm9pZCBwdXNoX2NvbXBvc2l0ZV9jaGlsZCgpOwoK
CgogIHN0YXRpYyB2b2lkIHBvcF9zdHlsZSgpOwoKCgogIHN0YXRpYyB2b2lkIHBvcF9jb2xvcm1h
cCgpOwoKCgogIHN0YXRpYyB2b2lkIHBvcF92aXN1YWwoKTsKCgoKICBzdGF0aWMgdm9pZCBwb3Bf
Y29tcG9zaXRlX2NoaWxkKCk7CgoKCiAKCgogIHN0YXRpYyB2b2lkIHNldF9kZWZhdWx0X3N0eWxl
KEd0azo6U3R5bGUmIHN0eWxlKTsKCgoKICBzdGF0aWMgdm9pZCBzZXRfZGVmYXVsdF9jb2xvcm1h
cChjb25zdCBHZGtfQ29sb3JtYXAmIGNvbG9ybWFwKTsKCgoKICBzdGF0aWMgdm9pZCBzZXRfZGVm
YXVsdF92aXN1YWwoY29uc3QgR2RrX1Zpc3VhbCYgdmlzdWFsKTsKCgoKICBzdGF0aWMgR3RrOjpT
dHlsZSogZ2V0X2RlZmF1bHRfc3R5bGUoKTsKCgoKICBzdGF0aWMgR2RrX0NvbG9ybWFwIGdldF9k
ZWZhdWx0X2NvbG9ybWFwKCk7CgoKCiAgc3RhdGljIEdka19WaXN1YWwgZ2V0X2RlZmF1bHRfdmlz
dWFsKCk7CgoKIAogCiAKCiAKIAogCgogCiAKIAoKCgoKICB2b2lkIHNoYXBlX2NvbWJpbmVfbWFz
ayhjb25zdCBHZGtfQml0bWFwJiBzaGFwZV9tYXNrLGdpbnQgb2Zmc2V0X3gsZ2ludCBvZmZzZXRf
eSk7CnByaXZhdGU6CiAgIAoKCiAgdm9pZCByZXNldF9zaGFwZXMoKTsKCnB1YmxpYzoKCiAgIAog
ICAKICB2b2lkIHBhdGgJCSAgIChzdHJpbmcgICAgJnBhdGgsCgkJCSAgICBzdHJpbmcgICAgJnBh
dGhfcmV2ZXJzZWQpOwoKICAgCiAgIAogIHZvaWQgY2xhc3NfcGF0aAkgICAoc3RyaW5nICAgICZw
YXRoLAoJCQkgICAgc3RyaW5nICAgICZwYXRoX3JldmVyc2VkKTsKCgoKICAgCiAgR2RrX1dpbmRv
dyBnZXRfd2luZG93ICAgICAgICAoKSBjb25zdDsKCgoKIAoKCiAgR2RrRHJhZ0NvbnRleHQqIGd0
a21tX2RyYWdfYmVnaW4oR3RrVGFyZ2V0TGlzdCogcDAsR2RrRHJhZ0FjdGlvbiBwMSxnaW50IHAy
LEdka0V2ZW50KiBwMyk7CgogICAKCgoKCiAgdm9pZCBkcmFnX2dldF9kYXRhKEdka19EcmFnX0Nv
bnRleHQmIGNvbnRleHQsR2RrX0F0b20gdGFyZ2V0LGd1aW50MzIgdGltZSk7CiAgIAoKCgoKCiAg
c3RhdGljIHZvaWQgZHJhZ19maW5pc2goR2RrX0RyYWdfQ29udGV4dCYgY29udGV4dCxib29sIHN1
Y2Nlc3MsYm9vbCBkZWwsZ3VpbnQzMiB0aW1lKTsKCiAgIAoKCiAgdm9pZCBkcmFnX2hpZ2hsaWdo
dCgpOwoKICAgCgoKICB2b2lkIGRyYWdfdW5oaWdobGlnaHQoKTsKCiAgIAoKICB2b2lkIGRyYWdf
ZGVzdF9zZXQoR3RrRGVzdERlZmF1bHRzIGZsYWdzLGNvbnN0IEd0a1RhcmdldEVudHJ5KiB0YXJn
ZXRzLGdpbnQgbl90YXJnZXRzLEdka0RyYWdBY3Rpb24gYWN0aW9ucyk7CgogICAKCgoKCgogIHZv
aWQgZHJhZ19kZXN0X3NldF9wcm94eShHZGtfV2luZG93JiBwcm94eV93aW5kb3csR2RrRHJhZ1By
b3RvY29sIHByb3RvY29sLGJvb2wgdXNlX2Nvb3JkaW5hdGVzKTsKCiAgIAoKCiAgdm9pZCBkcmFn
X2Rlc3RfdW5zZXQoKTsKCiAgIAoKICB2b2lkIGRyYWdfc291cmNlX3NldChHZGtNb2RpZmllclR5
cGUgc3RhcnRfYnV0dG9uX21hc2ssY29uc3QgR3RrVGFyZ2V0RW50cnkqIHRhcmdldHMsZ2ludCBu
X3RhcmdldHMsR2RrRHJhZ0FjdGlvbiBhY3Rpb25zKTsKCiAgIAoKCiAgdm9pZCBkcmFnX3NvdXJj
ZV91bnNldCgpOwoKCiAgIAoKCgoKCiAgdm9pZCBkcmFnX3NvdXJjZV9zZXRfaWNvbihHZGtfQ29s
b3JtYXAmIGNvbG9ybWFwLEdka19QaXhtYXAmIHBpeG1hcCxHZGtfQml0bWFwJiBtYXNrKTsKCiAg
IAoKCgoKCgoKICBzdGF0aWMgR3RrOjpXaWRnZXQqIGRyYWdfZ2V0X3NvdXJjZV93aWRnZXQoR2Rr
RHJhZ0NvbnRleHQqIGNvbnRleHQpOwoKCiAgIAoKCgoKCiAgc3RhdGljIHZvaWQgZHJhZ19zZXRf
aWNvbl93aWRnZXQoR2RrX0RyYWdfQ29udGV4dCYgY29udGV4dCxHdGs6OldpZGdldCYgd2lkZ2V0
LGdpbnQgaG90X3gsZ2ludCBob3RfeSk7CgogICAKCiAgc3RhdGljIHZvaWQgZHJhZ19zZXRfaWNv
bl9waXhtYXAoR2RrX0RyYWdfQ29udGV4dCYgY29udGV4dCxHZGtfQ29sb3JtYXAmIGNvbG9ybWFw
LEdka19QaXhtYXAmIHBpeG1hcCxHZGtfQml0bWFwJiBtYXNrLGdpbnQgaG90X3gsZ2ludCBob3Rf
eSk7CgogICAKICAgCgoKICBzdGF0aWMgdm9pZCBkcmFnX3NldF9pY29uX2RlZmF1bHQoR2RrX0Ry
YWdfQ29udGV4dCYgY29udGV4dCk7CgogICAKCiAgc3RhdGljIHZvaWQgZHJhZ19zZXRfZGVmYXVs
dF9pY29uKEdka19Db2xvcm1hcCYgY29sb3JtYXAsR2RrX1BpeG1hcCYgcGl4bWFwLEdka19CaXRt
YXAmIG1hc2ssZ2ludCBob3RfeCxnaW50IGhvdF95KTsKCgoKIAogICAKICBib29sIGlzX3RvcGxl
dmVsKCkgY29uc3QKICAgIHsgcmV0dXJuICgoKCAoICggICBndGtvYmooKSAgICkgIT0gX19udWxs
ICAmJiAoICggKChHdGtPYmplY3QqKSAoICAgZ3Rrb2JqKCkgICApKS0+a2xhc3MgKSAhPSBfX251
bGwgICYmICgoR3RrRnVuZGFtZW50YWxUeXBlKSAoKCAoKEd0a09iamVjdENsYXNzKikgKCAoKEd0
a09iamVjdCopICggICBndGtvYmooKSAgICkpLT5rbGFzcyApKS0+dHlwZSApICYgMHhGRikpICA9
PSBHVEtfVFlQRV9PQkpFQ1QgKSAgKSAgPyAoR3RrT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICkgOiAo
R3RrT2JqZWN0KikgZ3RrX3R5cGVfY2hlY2tfb2JqZWN0X2Nhc3QgKChHdGtUeXBlT2JqZWN0Kikg
KCAgZ3Rrb2JqKCkgICksIEdUS19UWVBFX09CSkVDVCkgKSAtPmZsYWdzKSAgJiBHVEtfVE9QTEVW
RUwpP3RydWU6ZmFsc2U7IH0KCiAgIAogIGJvb2wgaGFzX25vX3dpbmRvdygpIGNvbnN0CiAgICB7
IHJldHVybiAoKCggKCAoICAgZ3Rrb2JqKCkgICApICE9IF9fbnVsbCAgJiYgKCAoICgoR3RrT2Jq
ZWN0KikgKCAgIGd0a29iaigpICAgKSktPmtsYXNzICkgIT0gX19udWxsICAmJiAoKEd0a0Z1bmRh
bWVudGFsVHlwZSkgKCggKChHdGtPYmplY3RDbGFzcyopICggKChHdGtPYmplY3QqKSAoICAgZ3Rr
b2JqKCkgICApKS0+a2xhc3MgKSktPnR5cGUgKSAmIDB4RkYpKSAgPT0gR1RLX1RZUEVfT0JKRUNU
ICkgICkgID8gKEd0a09iamVjdCopICggIGd0a29iaigpICApIDogKEd0a09iamVjdCopIGd0a190
eXBlX2NoZWNrX29iamVjdF9jYXN0ICgoR3RrVHlwZU9iamVjdCopICggIGd0a29iaigpICApLCBH
VEtfVFlQRV9PQkpFQ1QpICkgLT5mbGFncykgICYgR1RLX05PX1dJTkRPVyk/dHJ1ZTpmYWxzZTsg
fQoKICAgCiAgYm9vbCBpc19yZWFsaXplZCgpIGNvbnN0CiAgICB7IHJldHVybiAoKCggKCAoICAg
Z3Rrb2JqKCkgICApICE9IF9fbnVsbCAgJiYgKCAoICgoR3RrT2JqZWN0KikgKCAgIGd0a29iaigp
ICAgKSktPmtsYXNzICkgIT0gX19udWxsICAmJiAoKEd0a0Z1bmRhbWVudGFsVHlwZSkgKCggKChH
dGtPYmplY3RDbGFzcyopICggKChHdGtPYmplY3QqKSAoICAgZ3Rrb2JqKCkgICApKS0+a2xhc3Mg
KSktPnR5cGUgKSAmIDB4RkYpKSAgPT0gR1RLX1RZUEVfT0JKRUNUICkgICkgID8gKEd0a09iamVj
dCopICggIGd0a29iaigpICApIDogKEd0a09iamVjdCopIGd0a190eXBlX2NoZWNrX29iamVjdF9j
YXN0ICgoR3RrVHlwZU9iamVjdCopICggIGd0a29iaigpICApLCBHVEtfVFlQRV9PQkpFQ1QpICkg
LT5mbGFncykgICYgR1RLX1JFQUxJWkVEKT90cnVlOmZhbHNlOyB9CgogICAKICBib29sIGlzX21h
cHBlZCgpIGNvbnN0CiAgICB7IHJldHVybiAoKCggKCAoICAgZ3Rrb2JqKCkgICApICE9IF9fbnVs
bCAgJiYgKCAoICgoR3RrT2JqZWN0KikgKCAgIGd0a29iaigpICAgKSktPmtsYXNzICkgIT0gX19u
dWxsICAmJiAoKEd0a0Z1bmRhbWVudGFsVHlwZSkgKCggKChHdGtPYmplY3RDbGFzcyopICggKChH
dGtPYmplY3QqKSAoICAgZ3Rrb2JqKCkgICApKS0+a2xhc3MgKSktPnR5cGUgKSAmIDB4RkYpKSAg
PT0gR1RLX1RZUEVfT0JKRUNUICkgICkgID8gKEd0a09iamVjdCopICggIGd0a29iaigpICApIDog
KEd0a09iamVjdCopIGd0a190eXBlX2NoZWNrX29iamVjdF9jYXN0ICgoR3RrVHlwZU9iamVjdCop
ICggIGd0a29iaigpICApLCBHVEtfVFlQRV9PQkpFQ1QpICkgLT5mbGFncykgICYgR1RLX01BUFBF
RCk/dHJ1ZTpmYWxzZTsgfQoKICAgCiAgYm9vbCBpc192aXNpYmxlKCkgY29uc3QKICAgIHsgcmV0
dXJuICgoKCAoICggICBndGtvYmooKSAgICkgIT0gX19udWxsICAmJiAoICggKChHdGtPYmplY3Qq
KSAoICAgZ3Rrb2JqKCkgICApKS0+a2xhc3MgKSAhPSBfX251bGwgICYmICgoR3RrRnVuZGFtZW50
YWxUeXBlKSAoKCAoKEd0a09iamVjdENsYXNzKikgKCAoKEd0a09iamVjdCopICggICBndGtvYmoo
KSAgICkpLT5rbGFzcyApKS0+dHlwZSApICYgMHhGRikpICA9PSBHVEtfVFlQRV9PQkpFQ1QgKSAg
KSAgPyAoR3RrT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICkgOiAoR3RrT2JqZWN0KikgZ3RrX3R5cGVf
Y2hlY2tfb2JqZWN0X2Nhc3QgKChHdGtUeXBlT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICksIEdUS19U
WVBFX09CSkVDVCkgKSAtPmZsYWdzKSAgJiBHVEtfVklTSUJMRSk/dHJ1ZTpmYWxzZTsgfQoKICAg
CiAgIAogICAKICBib29sIGlzX2RyYXdhYmxlKCkgY29uc3QKICAgIHsgcmV0dXJuIChpc192aXNp
YmxlKCkgJiYgaXNfbWFwcGVkKCkpP3RydWU6ZmFsc2U7IH0KCiAgIAogICAKICBib29sIHNlbnNp
dGl2ZSgpIGNvbnN0CiAgICB7IHJldHVybiAoKCggKCAoICAgZ3Rrb2JqKCkgICApICE9IF9fbnVs
bCAgJiYgKCAoICgoR3RrT2JqZWN0KikgKCAgIGd0a29iaigpICAgKSktPmtsYXNzICkgIT0gX19u
dWxsICAmJiAoKEd0a0Z1bmRhbWVudGFsVHlwZSkgKCggKChHdGtPYmplY3RDbGFzcyopICggKChH
dGtPYmplY3QqKSAoICAgZ3Rrb2JqKCkgICApKS0+a2xhc3MgKSktPnR5cGUgKSAmIDB4RkYpKSAg
PT0gR1RLX1RZUEVfT0JKRUNUICkgICkgID8gKEd0a09iamVjdCopICggIGd0a29iaigpICApIDog
KEd0a09iamVjdCopIGd0a190eXBlX2NoZWNrX29iamVjdF9jYXN0ICgoR3RrVHlwZU9iamVjdCop
ICggIGd0a29iaigpICApLCBHVEtfVFlQRV9PQkpFQ1QpICkgLT5mbGFncykgICYgR1RLX1NFTlNJ
VElWRSk/dHJ1ZTpmYWxzZTsgfQoKICBib29sIHBhcmVudF9zZW5zaXRpdmUoKSBjb25zdAogICAg
eyByZXR1cm4gKCgoICggKCAgIGd0a29iaigpICAgKSAhPSBfX251bGwgICYmICggKCAoKEd0a09i
amVjdCopICggICBndGtvYmooKSAgICkpLT5rbGFzcyApICE9IF9fbnVsbCAgJiYgKChHdGtGdW5k
YW1lbnRhbFR5cGUpICgoICgoR3RrT2JqZWN0Q2xhc3MqKSAoICgoR3RrT2JqZWN0KikgKCAgIGd0
a29iaigpICAgKSktPmtsYXNzICkpLT50eXBlICkgJiAweEZGKSkgID09IEdUS19UWVBFX09CSkVD
VCApICApICA/IChHdGtPYmplY3QqKSAoICBndGtvYmooKSAgKSA6IChHdGtPYmplY3QqKSBndGtf
dHlwZV9jaGVja19vYmplY3RfY2FzdCAoKEd0a1R5cGVPYmplY3QqKSAoICBndGtvYmooKSAgKSwg
R1RLX1RZUEVfT0JKRUNUKSApIC0+ZmxhZ3MpICAmIEdUS19QQVJFTlRfU0VOU0lUSVZFKT90cnVl
OmZhbHNlOyB9CiAgYm9vbCBpc19zZW5zaXRpdmUoKSBjb25zdAogICAgeyByZXR1cm4gKCgoKCgo
KCAoICggICAgICAoKCggIEd0a1dpZGdldCAqKSBndGtfdHlwZV9jaGVja19vYmplY3RfY2FzdCAo
KEd0a1R5cGVPYmplY3QqKSAoICggZ3Rrb2JqKCkgKSApLCAoICAoZ3RrX3dpZGdldF9nZXRfdHlw
ZSAoKSkgICkpKSApICAgICAgICkgIT0gX19udWxsICAmJiAoICggKChHdGtPYmplY3QqKSAoICAg
ICAgKCgoICBHdGtXaWRnZXQgKikgZ3RrX3R5cGVfY2hlY2tfb2JqZWN0X2Nhc3QgKChHdGtUeXBl
T2JqZWN0KikgKCAoIGd0a29iaigpICkgKSwgKCAgKGd0a193aWRnZXRfZ2V0X3R5cGUgKCkpICAp
KSkgKSAgICAgICApKS0+a2xhc3MgKSAhPSBfX251bGwgICYmICgoR3RrRnVuZGFtZW50YWxUeXBl
KSAoKCAoKEd0a09iamVjdENsYXNzKikgKCAoKEd0a09iamVjdCopICggICAgICAoKCggIEd0a1dp
ZGdldCAqKSBndGtfdHlwZV9jaGVja19vYmplY3RfY2FzdCAoKEd0a1R5cGVPYmplY3QqKSAoICgg
Z3Rrb2JqKCkgKSApLCAoICAoZ3RrX3dpZGdldF9nZXRfdHlwZSAoKSkgICkpKSApICAgICAgICkp
LT5rbGFzcyApKS0+dHlwZSApICYgMHhGRikpICA9PSBHVEtfVFlQRV9PQkpFQ1QgKSAgKSAgPyAo
R3RrT2JqZWN0KikgKCAgICAgKCgoICBHdGtXaWRnZXQgKikgZ3RrX3R5cGVfY2hlY2tfb2JqZWN0
X2Nhc3QgKChHdGtUeXBlT2JqZWN0KikgKCAoIGd0a29iaigpICkgKSwgKCAgKGd0a193aWRnZXRf
Z2V0X3R5cGUgKCkpICApKSkgKSAgICAgICkgOiAoR3RrT2JqZWN0KikgZ3RrX3R5cGVfY2hlY2tf
b2JqZWN0X2Nhc3QgKChHdGtUeXBlT2JqZWN0KikgKCAgICAgKCgoICBHdGtXaWRnZXQgKikgZ3Rr
X3R5cGVfY2hlY2tfb2JqZWN0X2Nhc3QgKChHdGtUeXBlT2JqZWN0KikgKCAoIGd0a29iaigpICkg
KSwgKCAgKGd0a193aWRnZXRfZ2V0X3R5cGUgKCkpICApKSkgKSAgICAgICksIEdUS19UWVBFX09C
SkVDVCkgKSAtPmZsYWdzKSApICAmIEdUS19TRU5TSVRJVkUpICE9IDApICAmJiAoKCgoKCAoICgg
ICAgICAoKCggIEd0a1dpZGdldCAqKSBndGtfdHlwZV9jaGVja19vYmplY3RfY2FzdCAoKEd0a1R5
cGVPYmplY3QqKSAoICggZ3Rrb2JqKCkgKSApLCAoICAoZ3RrX3dpZGdldF9nZXRfdHlwZSAoKSkg
ICkpKSApICAgICAgICkgIT0gX19udWxsICAmJiAoICggKChHdGtPYmplY3QqKSAoICAgICAgKCgo
ICBHdGtXaWRnZXQgKikgZ3RrX3R5cGVfY2hlY2tfb2JqZWN0X2Nhc3QgKChHdGtUeXBlT2JqZWN0
KikgKCAoIGd0a29iaigpICkgKSwgKCAgKGd0a193aWRnZXRfZ2V0X3R5cGUgKCkpICApKSkgKSAg
ICAgICApKS0+a2xhc3MgKSAhPSBfX251bGwgICYmICgoR3RrRnVuZGFtZW50YWxUeXBlKSAoKCAo
KEd0a09iamVjdENsYXNzKikgKCAoKEd0a09iamVjdCopICggICAgICAoKCggIEd0a1dpZGdldCAq
KSBndGtfdHlwZV9jaGVja19vYmplY3RfY2FzdCAoKEd0a1R5cGVPYmplY3QqKSAoICggZ3Rrb2Jq
KCkgKSApLCAoICAoZ3RrX3dpZGdldF9nZXRfdHlwZSAoKSkgICkpKSApICAgICAgICkpLT5rbGFz
cyApKS0+dHlwZSApICYgMHhGRikpICA9PSBHVEtfVFlQRV9PQkpFQ1QgKSAgKSAgPyAoR3RrT2Jq
ZWN0KikgKCAgICAgKCgoICBHdGtXaWRnZXQgKikgZ3RrX3R5cGVfY2hlY2tfb2JqZWN0X2Nhc3Qg
KChHdGtUeXBlT2JqZWN0KikgKCAoIGd0a29iaigpICkgKSwgKCAgKGd0a193aWRnZXRfZ2V0X3R5
cGUgKCkpICApKSkgKSAgICAgICkgOiAoR3RrT2JqZWN0KikgZ3RrX3R5cGVfY2hlY2tfb2JqZWN0
X2Nhc3QgKChHdGtUeXBlT2JqZWN0KikgKCAgICAgKCgoICBHdGtXaWRnZXQgKikgZ3RrX3R5cGVf
Y2hlY2tfb2JqZWN0X2Nhc3QgKChHdGtUeXBlT2JqZWN0KikgKCAoIGd0a29iaigpICkgKSwgKCAg
KGd0a193aWRnZXRfZ2V0X3R5cGUgKCkpICApKSkgKSAgICAgICksIEdUS19UWVBFX09CSkVDVCkg
KSAtPmZsYWdzKSApICAmIEdUS19QQVJFTlRfU0VOU0lUSVZFKSAhPSAwKSApICk/dHJ1ZTpmYWxz
ZTsgfQogIGJvb2wgY2FuX2ZvY3VzKCkgY29uc3QKICAgIHsgcmV0dXJuICgoKCAoICggICBndGtv
YmooKSAgICkgIT0gX19udWxsICAmJiAoICggKChHdGtPYmplY3QqKSAoICAgZ3Rrb2JqKCkgICAp
KS0+a2xhc3MgKSAhPSBfX251bGwgICYmICgoR3RrRnVuZGFtZW50YWxUeXBlKSAoKCAoKEd0a09i
amVjdENsYXNzKikgKCAoKEd0a09iamVjdCopICggICBndGtvYmooKSAgICkpLT5rbGFzcyApKS0+
dHlwZSApICYgMHhGRikpICA9PSBHVEtfVFlQRV9PQkpFQ1QgKSAgKSAgPyAoR3RrT2JqZWN0Kikg
KCAgZ3Rrb2JqKCkgICkgOiAoR3RrT2JqZWN0KikgZ3RrX3R5cGVfY2hlY2tfb2JqZWN0X2Nhc3Qg
KChHdGtUeXBlT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICksIEdUS19UWVBFX09CSkVDVCkgKSAtPmZs
YWdzKSAgJiBHVEtfQ0FOX0ZPQ1VTKT90cnVlOmZhbHNlOyB9CiAgYm9vbCBoYXNfZm9jdXMoKSBj
b25zdAogICAgeyByZXR1cm4gKCgoICggKCAgIGd0a29iaigpICAgKSAhPSBfX251bGwgICYmICgg
KCAoKEd0a09iamVjdCopICggICBndGtvYmooKSAgICkpLT5rbGFzcyApICE9IF9fbnVsbCAgJiYg
KChHdGtGdW5kYW1lbnRhbFR5cGUpICgoICgoR3RrT2JqZWN0Q2xhc3MqKSAoICgoR3RrT2JqZWN0
KikgKCAgIGd0a29iaigpICAgKSktPmtsYXNzICkpLT50eXBlICkgJiAweEZGKSkgID09IEdUS19U
WVBFX09CSkVDVCApICApICA/IChHdGtPYmplY3QqKSAoICBndGtvYmooKSAgKSA6IChHdGtPYmpl
Y3QqKSBndGtfdHlwZV9jaGVja19vYmplY3RfY2FzdCAoKEd0a1R5cGVPYmplY3QqKSAoICBndGtv
YmooKSAgKSwgR1RLX1RZUEVfT0JKRUNUKSApIC0+ZmxhZ3MpICAmIEdUS19IQVNfRk9DVVMpP3Ry
dWU6ZmFsc2U7IH0KICBib29sIGNhbl9kZWZhdWx0KCkgY29uc3QKICAgIHsgcmV0dXJuICgoKCAo
ICggICBndGtvYmooKSAgICkgIT0gX19udWxsICAmJiAoICggKChHdGtPYmplY3QqKSAoICAgZ3Rr
b2JqKCkgICApKS0+a2xhc3MgKSAhPSBfX251bGwgICYmICgoR3RrRnVuZGFtZW50YWxUeXBlKSAo
KCAoKEd0a09iamVjdENsYXNzKikgKCAoKEd0a09iamVjdCopICggICBndGtvYmooKSAgICkpLT5r
bGFzcyApKS0+dHlwZSApICYgMHhGRikpICA9PSBHVEtfVFlQRV9PQkpFQ1QgKSAgKSAgPyAoR3Rr
T2JqZWN0KikgKCAgZ3Rrb2JqKCkgICkgOiAoR3RrT2JqZWN0KikgZ3RrX3R5cGVfY2hlY2tfb2Jq
ZWN0X2Nhc3QgKChHdGtUeXBlT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICksIEdUS19UWVBFX09CSkVD
VCkgKSAtPmZsYWdzKSAgJiBHVEtfQ0FOX0RFRkFVTFQpP3RydWU6ZmFsc2U7IH0KICBib29sIGhh
c19kZWZhdWx0KCkgY29uc3QKICAgIHsgcmV0dXJuICgoKCAoICggICBndGtvYmooKSAgICkgIT0g
X19udWxsICAmJiAoICggKChHdGtPYmplY3QqKSAoICAgZ3Rrb2JqKCkgICApKS0+a2xhc3MgKSAh
PSBfX251bGwgICYmICgoR3RrRnVuZGFtZW50YWxUeXBlKSAoKCAoKEd0a09iamVjdENsYXNzKikg
KCAoKEd0a09iamVjdCopICggICBndGtvYmooKSAgICkpLT5rbGFzcyApKS0+dHlwZSApICYgMHhG
RikpICA9PSBHVEtfVFlQRV9PQkpFQ1QgKSAgKSAgPyAoR3RrT2JqZWN0KikgKCAgZ3Rrb2JqKCkg
ICkgOiAoR3RrT2JqZWN0KikgZ3RrX3R5cGVfY2hlY2tfb2JqZWN0X2Nhc3QgKChHdGtUeXBlT2Jq
ZWN0KikgKCAgZ3Rrb2JqKCkgICksIEdUS19UWVBFX09CSkVDVCkgKSAtPmZsYWdzKSAgJiBHVEtf
SEFTX0RFRkFVTFQpP3RydWU6ZmFsc2U7IH0KICBib29sIHJjX3N0eWxlKCkgY29uc3QKICAgIHsg
cmV0dXJuICgoKCAoICggICBndGtvYmooKSAgICkgIT0gX19udWxsICAmJiAoICggKChHdGtPYmpl
Y3QqKSAoICAgZ3Rrb2JqKCkgICApKS0+a2xhc3MgKSAhPSBfX251bGwgICYmICgoR3RrRnVuZGFt
ZW50YWxUeXBlKSAoKCAoKEd0a09iamVjdENsYXNzKikgKCAoKEd0a09iamVjdCopICggICBndGtv
YmooKSAgICkpLT5rbGFzcyApKS0+dHlwZSApICYgMHhGRikpICA9PSBHVEtfVFlQRV9PQkpFQ1Qg
KSAgKSAgPyAoR3RrT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICkgOiAoR3RrT2JqZWN0KikgZ3RrX3R5
cGVfY2hlY2tfb2JqZWN0X2Nhc3QgKChHdGtUeXBlT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICksIEdU
S19UWVBFX09CSkVDVCkgKSAtPmZsYWdzKSAgJiBHVEtfUkNfU1RZTEUpP3RydWU6ZmFsc2U7IH0K
ICBib29sIGhhc19ncmFiKCkgY29uc3QKICAgIHsgcmV0dXJuICgoKCAoICggICBndGtvYmooKSAg
ICkgIT0gX19udWxsICAmJiAoICggKChHdGtPYmplY3QqKSAoICAgZ3Rrb2JqKCkgICApKS0+a2xh
c3MgKSAhPSBfX251bGwgICYmICgoR3RrRnVuZGFtZW50YWxUeXBlKSAoKCAoKEd0a09iamVjdENs
YXNzKikgKCAoKEd0a09iamVjdCopICggICBndGtvYmooKSAgICkpLT5rbGFzcyApKS0+dHlwZSAp
ICYgMHhGRikpICA9PSBHVEtfVFlQRV9PQkpFQ1QgKSAgKSAgPyAoR3RrT2JqZWN0KikgKCAgZ3Rr
b2JqKCkgICkgOiAoR3RrT2JqZWN0KikgZ3RrX3R5cGVfY2hlY2tfb2JqZWN0X2Nhc3QgKChHdGtU
eXBlT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICksIEdUS19UWVBFX09CSkVDVCkgKSAtPmZsYWdzKSAg
JiBHVEtfSEFTX0dSQUIpP3RydWU6ZmFsc2U7IH0KICBib29sIGlzX2NvbXBvc2l0ZV9jaGlsZCgp
IGNvbnN0CiAgICB7IHJldHVybiAoKCggKCAoICAgZ3Rrb2JqKCkgICApICE9IF9fbnVsbCAgJiYg
KCAoICgoR3RrT2JqZWN0KikgKCAgIGd0a29iaigpICAgKSktPmtsYXNzICkgIT0gX19udWxsICAm
JiAoKEd0a0Z1bmRhbWVudGFsVHlwZSkgKCggKChHdGtPYmplY3RDbGFzcyopICggKChHdGtPYmpl
Y3QqKSAoICAgZ3Rrb2JqKCkgICApKS0+a2xhc3MgKSktPnR5cGUgKSAmIDB4RkYpKSAgPT0gR1RL
X1RZUEVfT0JKRUNUICkgICkgID8gKEd0a09iamVjdCopICggIGd0a29iaigpICApIDogKEd0a09i
amVjdCopIGd0a190eXBlX2NoZWNrX29iamVjdF9jYXN0ICgoR3RrVHlwZU9iamVjdCopICggIGd0
a29iaigpICApLCBHVEtfVFlQRV9PQkpFQ1QpICkgLT5mbGFncykgICYgR1RLX0NPTVBPU0lURV9D
SElMRCk/dHJ1ZTpmYWxzZTsgfQogIGJvb2wgYXBwX3BhaW50YWJsZSgpICAgICAgY29uc3QKICAg
IHsgcmV0dXJuICgoKCAoICggICBndGtvYmooKSAgICkgIT0gX19udWxsICAmJiAoICggKChHdGtP
YmplY3QqKSAoICAgZ3Rrb2JqKCkgICApKS0+a2xhc3MgKSAhPSBfX251bGwgICYmICgoR3RrRnVu
ZGFtZW50YWxUeXBlKSAoKCAoKEd0a09iamVjdENsYXNzKikgKCAoKEd0a09iamVjdCopICggICBn
dGtvYmooKSAgICkpLT5rbGFzcyApKS0+dHlwZSApICYgMHhGRikpICA9PSBHVEtfVFlQRV9PQkpF
Q1QgKSAgKSAgPyAoR3RrT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICkgOiAoR3RrT2JqZWN0KikgZ3Rr
X3R5cGVfY2hlY2tfb2JqZWN0X2Nhc3QgKChHdGtUeXBlT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICks
IEdUS19UWVBFX09CSkVDVCkgKSAtPmZsYWdzKSAgJiBHVEtfQVBQX1BBSU5UQUJMRSk/dHJ1ZTpm
YWxzZTsgfQogIGJvb2wgcmVjaWV2ZXNfZGVmYXVsdCgpICAgY29uc3QKICAgIHsgcmV0dXJuICgo
KCAoICggICBndGtvYmooKSAgICkgIT0gX19udWxsICAmJiAoICggKChHdGtPYmplY3QqKSAoICAg
Z3Rrb2JqKCkgICApKS0+a2xhc3MgKSAhPSBfX251bGwgICYmICgoR3RrRnVuZGFtZW50YWxUeXBl
KSAoKCAoKEd0a09iamVjdENsYXNzKikgKCAoKEd0a09iamVjdCopICggICBndGtvYmooKSAgICkp
LT5rbGFzcyApKS0+dHlwZSApICYgMHhGRikpICA9PSBHVEtfVFlQRV9PQkpFQ1QgKSAgKSAgPyAo
R3RrT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICkgOiAoR3RrT2JqZWN0KikgZ3RrX3R5cGVfY2hlY2tf
b2JqZWN0X2Nhc3QgKChHdGtUeXBlT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICksIEdUS19UWVBFX09C
SkVDVCkgKSAtPmZsYWdzKSAgJiBHVEtfUkVDRUlWRVNfREVGQVVMVCk/dHJ1ZTpmYWxzZTsgfQoK
ICAgCiAgdm9pZCBzZXRfZmxhZ3MoZ2ludCBmbGFnKSB7IGlmICgxKSB7ICgoKCAoICggICAgZ3Rr
b2JqKCkgICAgKSAhPSBfX251bGwgICYmICggKCAoKEd0a09iamVjdCopICggICAgZ3Rrb2JqKCkg
ICAgKSktPmtsYXNzICkgIT0gX19udWxsICAmJiAoKEd0a0Z1bmRhbWVudGFsVHlwZSkgKCggKChH
dGtPYmplY3RDbGFzcyopICggKChHdGtPYmplY3QqKSAoICAgIGd0a29iaigpICAgICkpLT5rbGFz
cyApKS0+dHlwZSApICYgMHhGRikpICA9PSBHVEtfVFlQRV9PQkpFQ1QgKSAgKSAgPyAoR3RrT2Jq
ZWN0KikgKCAgIGd0a29iaigpICAgKSA6IChHdGtPYmplY3QqKSBndGtfdHlwZV9jaGVja19vYmpl
Y3RfY2FzdCAoKEd0a1R5cGVPYmplY3QqKSAoICAgZ3Rrb2JqKCkgICApLCBHVEtfVFlQRV9PQkpF
Q1QpICkgLT5mbGFncykgIHw9ICggIGZsYWcgKSk7IH1lbHNlICh2b2lkKTAgIDsgfQoKICAgCiAg
dm9pZCB1bnNldF9mbGFncyhnaW50IGZsYWcpIHsgaWYgKDEpIHsgKCgoICggKCAgICBndGtvYmoo
KSAgICApICE9IF9fbnVsbCAgJiYgKCAoICgoR3RrT2JqZWN0KikgKCAgICBndGtvYmooKSAgICAp
KS0+a2xhc3MgKSAhPSBfX251bGwgICYmICgoR3RrRnVuZGFtZW50YWxUeXBlKSAoKCAoKEd0a09i
amVjdENsYXNzKikgKCAoKEd0a09iamVjdCopICggICAgZ3Rrb2JqKCkgICAgKSktPmtsYXNzICkp
LT50eXBlICkgJiAweEZGKSkgID09IEdUS19UWVBFX09CSkVDVCApICApICA/IChHdGtPYmplY3Qq
KSAoICAgZ3Rrb2JqKCkgICApIDogKEd0a09iamVjdCopIGd0a190eXBlX2NoZWNrX29iamVjdF9j
YXN0ICgoR3RrVHlwZU9iamVjdCopICggICBndGtvYmooKSAgICksIEdUS19UWVBFX09CSkVDVCkg
KSAtPmZsYWdzKSAgJj0gfiggIGZsYWcgKSk7IH1lbHNlICh2b2lkKTAgIDsgfQoKCiAKCiAgIAog
ICAKICAgCgoKICAgCiAgdm9pZCBzaG93X2FsbCgpOwoKICAgCgoKICAgCiAgdm9pZCBoaWRlX2Fs
bCgpOwoKICAgCiAgIAoKCiAgIAoKCiAgIAogICAKICAgCiAgIAogICAKCgogICAKICAgCgoKCiAg
IAogICAKICAgCiAgdm9pZCBkcmF3KEdka1JlY3RhbmdsZSogcDApOwoKICAgCgoKICAgCgogCiAK
IAogCgogICAKICAgCgoKICAgCiAgIAogICAKCgogICAKICAgCgoKCgogICAKCgogICAKCgogICAK
CgogICAKCgogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAoKCiAgIAoKCiAgIAoK
CiAgIAoKCiAgIAoKCiAgIAoKIAoKICAgCiAgZ2ludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIGd0
a29iaigpLT5hbGxvY2F0aW9uLndpZHRoOyB9CgogICAKICBnaW50IGhlaWdodCgpIGNvbnN0IHsg
cmV0dXJuIGd0a29iaigpLT5hbGxvY2F0aW9uLmhlaWdodDsgfQoKcHJvdGVjdGVkOgogIHZvaWQg
cmVhbGl6ZV9pZl9uZWVkZWQoKTsKICBXaWRnZXQoKTsKCnB1YmxpYzoKCiAgICBjbGFzcyBQcm94
eV9wYXJlbnRfY2hhbmdlZAogICAgICA6IHB1YmxpYyBQcm94eVNpZ25hbDE8dm9pZCxHdGtXaWRn
ZXQqLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsMTQ+CiAgICAgIHsKICAgICAgICAgIHR5
cGVkZWYgUHJveHlTaWduYWwxPHZvaWQsR3RrV2lkZ2V0KixDcHBPYmplY3RUeXBlLEJhc2VPYmpl
Y3RUeXBlLDE0PiBCYXNlVHlwZTsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICBDb25uZWN0aW9u
IGNvbm5lY3QoY29uc3QgU2lnQzo6U2xvdDE8dm9pZCxHdGs6OldpZGdldCo+ICZzKTsKICAgICAg
fTsKICAgIGNsYXNzIFByb3h5X3N0eWxlX2NoYW5nZWQKICAgICAgOiBwdWJsaWMgUHJveHlTaWdu
YWwxPHZvaWQsR3RrU3R5bGUqLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsMTU+CiAgICAg
IHsKICAgICAgICAgIHR5cGVkZWYgUHJveHlTaWduYWwxPHZvaWQsR3RrU3R5bGUqLENwcE9iamVj
dFR5cGUsQmFzZU9iamVjdFR5cGUsMTU+IEJhc2VUeXBlOwogICAgICAgIHB1YmxpYzoKICAgICAg
ICAgIENvbm5lY3Rpb24gY29ubmVjdChjb25zdCBTaWdDOjpTbG90MTx2b2lkLEd0azo6U3R5bGUq
PiAmcyk7CiAgICAgIH07CiAgdW5pb24KICAgIHsKICAgICAgQ3BwT2JqZWN0VHlwZSAqIHdpZGdl
dF9zZWxmOwogICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDA8dm9pZCxDcHBPYmplY3RUeXBlLEJh
c2VPYmplY3RUeXBlLDAsJmd0a193aWRnZXRfc2hvdz4gc2hvdzsKICAgICAgR3RrOjpFbWl0UHJv
eHlTaWduYWwwPHZvaWQsQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwyLCZndGtfd2lkZ2V0
X2hpZGU+IGhpZGU7CiAgICAgIEd0azo6RW1pdFByb3h5U2lnbmFsMDx2b2lkLENwcE9iamVjdFR5
cGUsQmFzZU9iamVjdFR5cGUsNCwmZ3RrX3dpZGdldF9tYXA+IG1hcF87CiAgICAgIEd0azo6RW1p
dFByb3h5U2lnbmFsMDx2b2lkLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsNSwmZ3RrX3dp
ZGdldF91bm1hcD4gdW5tYXBfOwogICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDA8dm9pZCxDcHBP
YmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDYsJmd0a193aWRnZXRfcmVhbGl6ZT4gcmVhbGl6ZTsK
ICAgICAgR3RrOjpFbWl0UHJveHlTaWduYWwwPHZvaWQsQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0
VHlwZSw3LCZndGtfd2lkZ2V0X2dyYWJfZm9jdXM+IGdyYWJfZm9jdXM7CiAgICAgIEd0azo6RW1p
dFByb3h5U2lnbmFsMDx2b2lkLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsOSwmZ3RrX3dp
ZGdldF9kcmF3X2ZvY3VzPiBkcmF3X2ZvY3VzOwogICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDA8
dm9pZCxDcHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDEwLCZndGtfd2lkZ2V0X2RyYXdfZGVm
YXVsdD4gZHJhd19kZWZhdWx0OwogICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDE8dm9pZCxHdGtS
ZXF1aXNpdGlvbiosQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwxMSwmZ3RrX3dpZGdldF9z
aXplX3JlcXVlc3Q+IHNpemVfcmVxdWVzdDsKICAgICAgR3RrOjpFbWl0UHJveHlTaWduYWwxPHZv
aWQsR3RrQWxsb2NhdGlvbiosQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwxMiwmZ3RrX3dp
ZGdldF9zaXplX2FsbG9jYXRlPiBzaXplX2FsbG9jYXRlOwogICAgICBHdGs6OlByb3h5U2lnbmFs
MTx2b2lkLEd0a1N0YXRlVHlwZSxDcHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDEzPiBzdGF0
ZV9jaGFuZ2VkOwogICAgICBQcm94eV9wYXJlbnRfY2hhbmdlZCBwYXJlbnRfY2hhbmdlZDsKICAg
ICAgUHJveHlfc3R5bGVfY2hhbmdlZCBzdHlsZV9jaGFuZ2VkOwogICAgICBHdGs6OkVtaXRQcm94
eVNpZ25hbDE8Z2ludCxHZGtFdmVudCosQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwxNiwm
Z3RrX3dpZGdldF9ldmVudD4gZXZlbnQ7CiAgICAgIEd0azo6RW1pdFByb3h5U2lnbmFsMTxnaW50
LEdka0V2ZW50QnV0dG9uKixDcHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDE3LCZndGttbV93
aWRnZXRfYnV0dG9uX3ByZXNzX2V2ZW50PiBidXR0b25fcHJlc3NfZXZlbnQ7CiAgICAgIEd0azo6
RW1pdFByb3h5U2lnbmFsMTxnaW50LEdka0V2ZW50QnV0dG9uKixDcHBPYmplY3RUeXBlLEJhc2VP
YmplY3RUeXBlLDE4LCZndGttbV93aWRnZXRfYnV0dG9uX3JlbGVhc2VfZXZlbnQ+IGJ1dHRvbl9y
ZWxlYXNlX2V2ZW50OwogICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDE8Z2ludCxHZGtFdmVudE1v
dGlvbiosQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwxOSwmZ3RrbW1fd2lkZ2V0X21vdGlv
bl9ub3RpZnlfZXZlbnQ+IG1vdGlvbl9ub3RpZnlfZXZlbnQ7CiAgICAgIEd0azo6RW1pdFByb3h5
U2lnbmFsMTxnaW50LEdka0V2ZW50QW55KixDcHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDIw
LCZndGttbV93aWRnZXRfZGVsZXRlX2V2ZW50PiBkZWxldGVfZXZlbnQ7CiAgICAgIEd0azo6RW1p
dFByb3h5U2lnbmFsMTxnaW50LEdka0V2ZW50RXhwb3NlKixDcHBPYmplY3RUeXBlLEJhc2VPYmpl
Y3RUeXBlLDIxLCZndGttbV93aWRnZXRfZXhwb3NlX2V2ZW50PiBleHBvc2VfZXZlbnQ7CiAgICAg
IEd0azo6RW1pdFByb3h5U2lnbmFsMTxnaW50LEdka0V2ZW50S2V5KixDcHBPYmplY3RUeXBlLEJh
c2VPYmplY3RUeXBlLDIyLCZndGttbV93aWRnZXRfa2V5X3ByZXNzX2V2ZW50PiBrZXlfcHJlc3Nf
ZXZlbnQ7CiAgICAgIEd0azo6RW1pdFByb3h5U2lnbmFsMTxnaW50LEdka0V2ZW50S2V5KixDcHBP
YmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDIzLCZndGttbV93aWRnZXRfa2V5X3JlbGVhc2VfZXZl
bnQ+IGtleV9yZWxlYXNlX2V2ZW50OwogICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDE8Z2ludCxH
ZGtFdmVudENyb3NzaW5nKixDcHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDI0LCZndGttbV93
aWRnZXRfZW50ZXJfbm90aWZ5X2V2ZW50PiBlbnRlcl9ub3RpZnlfZXZlbnQ7CiAgICAgIEd0azo6
RW1pdFByb3h5U2lnbmFsMTxnaW50LEdka0V2ZW50Q3Jvc3NpbmcqLENwcE9iamVjdFR5cGUsQmFz
ZU9iamVjdFR5cGUsMjUsJmd0a21tX3dpZGdldF9sZWF2ZV9ub3RpZnlfZXZlbnQ+IGxlYXZlX25v
dGlmeV9ldmVudDsKICAgICAgR3RrOjpFbWl0UHJveHlTaWduYWwxPGdpbnQsR2RrRXZlbnRDb25m
aWd1cmUqLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsMjYsJmd0a21tX3dpZGdldF9jb25m
aWd1cmVfZXZlbnQ+IGNvbmZpZ3VyZV9ldmVudDsKICAgICAgR3RrOjpFbWl0UHJveHlTaWduYWwx
PGdpbnQsR2RrRXZlbnRGb2N1cyosQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwyNywmZ3Rr
bW1fd2lkZ2V0X2ZvY3VzX2luX2V2ZW50PiBmb2N1c19pbl9ldmVudDsKICAgICAgR3RrOjpFbWl0
UHJveHlTaWduYWwxPGdpbnQsR2RrRXZlbnRGb2N1cyosQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0
VHlwZSwyOCwmZ3RrbW1fd2lkZ2V0X2ZvY3VzX291dF9ldmVudD4gZm9jdXNfb3V0X2V2ZW50Owog
ICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDE8Z2ludCxHZGtFdmVudEFueSosQ3BwT2JqZWN0VHlw
ZSxCYXNlT2JqZWN0VHlwZSwyOSwmZ3RrbW1fd2lkZ2V0X21hcF9ldmVudD4gbWFwX2V2ZW50Owog
ICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDE8Z2ludCxHZGtFdmVudEFueSosQ3BwT2JqZWN0VHlw
ZSxCYXNlT2JqZWN0VHlwZSwzMCwmZ3RrbW1fd2lkZ2V0X3VubWFwX2V2ZW50PiB1bm1hcF9ldmVu
dDsKICAgICAgR3RrOjpFbWl0UHJveHlTaWduYWwxPGdpbnQsR2RrRXZlbnRQcm9wZXJ0eSosQ3Bw
T2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwzMSwmZ3RrbW1fd2lkZ2V0X3Byb3BlcnR5X25vdGlm
eV9ldmVudD4gcHJvcGVydHlfbm90aWZ5X2V2ZW50OwogICAgICBHdGs6OkVtaXRQcm94eVNpZ25h
bDE8Z2ludCxHZGtFdmVudFNlbGVjdGlvbiosQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwz
MiwmZ3RrbW1fd2lkZ2V0X3NlbGVjdGlvbl9jbGVhcl9ldmVudD4gc2VsZWN0aW9uX2NsZWFyX2V2
ZW50OwogICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDE8Z2ludCxHZGtFdmVudFNlbGVjdGlvbios
Q3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwzMywmZ3RrbW1fd2lkZ2V0X3NlbGVjdGlvbl9y
ZXF1ZXN0X2V2ZW50PiBzZWxlY3Rpb25fcmVxdWVzdF9ldmVudDsKICAgICAgR3RrOjpFbWl0UHJv
eHlTaWduYWwxPGdpbnQsR2RrRXZlbnRTZWxlY3Rpb24qLENwcE9iamVjdFR5cGUsQmFzZU9iamVj
dFR5cGUsMzQsJmd0a21tX3dpZGdldF9zZWxlY3Rpb25fbm90aWZ5X2V2ZW50PiBzZWxlY3Rpb25f
bm90aWZ5X2V2ZW50OwogICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDE8Z2ludCxHZGtFdmVudFBy
b3hpbWl0eSosQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwzNSwmZ3RrbW1fd2lkZ2V0X3By
b3hpbWl0eV9pbl9ldmVudD4gcHJveGltaXR5X2luX2V2ZW50OwogICAgICBHdGs6OkVtaXRQcm94
eVNpZ25hbDE8Z2ludCxHZGtFdmVudFByb3hpbWl0eSosQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0
VHlwZSwzNiwmZ3RrbW1fd2lkZ2V0X3Byb3hpbWl0eV9vdXRfZXZlbnQ+IHByb3hpbWl0eV9vdXRf
ZXZlbnQ7CiAgICAgIEd0azo6RW1pdFByb3h5U2lnbmFsMTxnaW50LEdka0V2ZW50Q2xpZW50KixD
cHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDM3LCZndGttbV93aWRnZXRfY2xpZW50X2V2ZW50
PiBjbGllbnRfZXZlbnQ7CiAgICAgIEd0azo6RW1pdFByb3h5U2lnbmFsMTxnaW50LEdka0V2ZW50
QW55KixDcHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDM4LCZndGttbV93aWRnZXRfbm9fZXhw
b3NlX2V2ZW50PiBub19leHBvc2VfZXZlbnQ7CiAgICAgIEd0azo6RW1pdFByb3h5U2lnbmFsMTxn
aW50LEdka0V2ZW50VmlzaWJpbGl0eSosQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwzOSwm
Z3RrbW1fd2lkZ2V0X3Zpc2liaWxpdHlfbm90aWZ5X2V2ZW50PiB2aXNpYmlsaXR5X25vdGlmeV9l
dmVudDsKICAgICAgR3RrOjpQcm94eVNpZ25hbDE8dm9pZCxjb25zdCBnY2hhciosQ3BwT2JqZWN0
VHlwZSxCYXNlT2JqZWN0VHlwZSw0MD4gZGVidWdfbXNnOwogICAgICBHdGs6OlByb3h5U2lnbmFs
Mzx2b2lkLEd0a1NlbGVjdGlvbkRhdGEqLGd1aW50LGd1aW50LENwcE9iamVjdFR5cGUsQmFzZU9i
amVjdFR5cGUsNDE+IHNlbGVjdGlvbl9nZXQ7CiAgICAgIEd0azo6UHJveHlTaWduYWwyPHZvaWQs
R3RrU2VsZWN0aW9uRGF0YSosZ3VpbnQsQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSw0Mj4g
c2VsZWN0aW9uX3JlY2VpdmVkOwogICAgICBHdGs6OlByb3h5U2lnbmFsMTx2b2lkLEdka0RyYWdD
b250ZXh0KixDcHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDQzPiBkcmFnX2JlZ2luOwogICAg
ICBHdGs6OlByb3h5U2lnbmFsMTx2b2lkLEdka0RyYWdDb250ZXh0KixDcHBPYmplY3RUeXBlLEJh
c2VPYmplY3RUeXBlLDQ0PiBkcmFnX2VuZDsKICAgICAgR3RrOjpQcm94eVNpZ25hbDQ8dm9pZCxH
ZGtEcmFnQ29udGV4dCosR3RrU2VsZWN0aW9uRGF0YSosZ3VpbnQsZ3VpbnQsQ3BwT2JqZWN0VHlw
ZSxCYXNlT2JqZWN0VHlwZSw0NT4gZHJhZ19kYXRhX2dldDsKICAgICAgR3RrOjpQcm94eVNpZ25h
bDE8dm9pZCxHZGtEcmFnQ29udGV4dCosQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSw0Nj4g
ZHJhZ19kYXRhX2RlbGV0ZTsKICAgICAgR3RrOjpQcm94eVNpZ25hbDI8dm9pZCxHZGtEcmFnQ29u
dGV4dCosZ3VpbnQsQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSw0Nz4gZHJhZ19sZWF2ZTsK
ICAgICAgR3RrOjpQcm94eVNpZ25hbDQ8Z2Jvb2xlYW4sR2RrRHJhZ0NvbnRleHQqLGdpbnQsZ2lu
dCxndWludCxDcHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDQ4PiBkcmFnX21vdGlvbjsKICAg
ICAgR3RrOjpQcm94eVNpZ25hbDQ8Z2Jvb2xlYW4sR2RrRHJhZ0NvbnRleHQqLGdpbnQsZ2ludCxn
dWludCxDcHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDQ5PiBkcmFnX2Ryb3A7CiAgICAgIEd0
azo6UHJveHlTaWduYWw2PHZvaWQsR2RrRHJhZ0NvbnRleHQqLGdpbnQsZ2ludCxHdGtTZWxlY3Rp
b25EYXRhKixndWludCxndWludDMyLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsNTA+IGRy
YWdfZGF0YV9yZWNlaXZlZDsKICAgIH07Cgpwcm90ZWN0ZWQ6CiAgIAogICAgdmlydHVhbCB2b2lk
IHNob3dfaW1wbCgpOwogICAgdmlydHVhbCB2b2lkIHNob3dfYWxsX2ltcGwoKTsKICAgIHZpcnR1
YWwgdm9pZCBoaWRlX2ltcGwoKTsKICAgIHZpcnR1YWwgdm9pZCBoaWRlX2FsbF9pbXBsKCk7CiAg
ICB2aXJ0dWFsIHZvaWQgbWFwX19pbXBsKCk7CiAgICB2aXJ0dWFsIHZvaWQgdW5tYXBfX2ltcGwo
KTsKICAgIHZpcnR1YWwgdm9pZCByZWFsaXplX2ltcGwoKTsKICAgIHZpcnR1YWwgdm9pZCBncmFi
X2ZvY3VzX2ltcGwoKTsKICAgIHZpcnR1YWwgdm9pZCBkcmF3X2ltcGwoR2RrUmVjdGFuZ2xlKiBw
MCk7CiAgICB2aXJ0dWFsIHZvaWQgZHJhd19mb2N1c19pbXBsKCk7CiAgICB2aXJ0dWFsIHZvaWQg
ZHJhd19kZWZhdWx0X2ltcGwoKTsKICAgIHZpcnR1YWwgdm9pZCBzaXplX3JlcXVlc3RfaW1wbChH
dGtSZXF1aXNpdGlvbiogcDApOwogICAgdmlydHVhbCB2b2lkIHNpemVfYWxsb2NhdGVfaW1wbChH
dGtBbGxvY2F0aW9uKiBwMCk7CiAgICB2aXJ0dWFsIHZvaWQgc3RhdGVfY2hhbmdlZF9pbXBsKEd0
a1N0YXRlVHlwZSBwMCk7CiAgICB2aXJ0dWFsIHZvaWQgcGFyZW50X2NoYW5nZWRfaW1wbChHdGs6
OldpZGdldCogcDApOwogICAgdmlydHVhbCB2b2lkIHN0eWxlX2NoYW5nZWRfaW1wbChHdGs6OlN0
eWxlKiBwMCk7CiAgICB2aXJ0dWFsIGdpbnQgZXZlbnRfaW1wbChHZGtFdmVudCogcDApOwogICAg
dmlydHVhbCBnaW50IGJ1dHRvbl9wcmVzc19ldmVudF9pbXBsKEdka0V2ZW50QnV0dG9uKiBwMCk7
CiAgICB2aXJ0dWFsIGdpbnQgYnV0dG9uX3JlbGVhc2VfZXZlbnRfaW1wbChHZGtFdmVudEJ1dHRv
biogcDApOwogICAgdmlydHVhbCBnaW50IG1vdGlvbl9ub3RpZnlfZXZlbnRfaW1wbChHZGtFdmVu
dE1vdGlvbiogcDApOwogICAgdmlydHVhbCBnaW50IGRlbGV0ZV9ldmVudF9pbXBsKEdka0V2ZW50
QW55KiBwMCk7CiAgICB2aXJ0dWFsIGdpbnQgZXhwb3NlX2V2ZW50X2ltcGwoR2RrRXZlbnRFeHBv
c2UqIHAwKTsKICAgIHZpcnR1YWwgZ2ludCBrZXlfcHJlc3NfZXZlbnRfaW1wbChHZGtFdmVudEtl
eSogcDApOwogICAgdmlydHVhbCBnaW50IGtleV9yZWxlYXNlX2V2ZW50X2ltcGwoR2RrRXZlbnRL
ZXkqIHAwKTsKICAgIHZpcnR1YWwgZ2ludCBlbnRlcl9ub3RpZnlfZXZlbnRfaW1wbChHZGtFdmVu
dENyb3NzaW5nKiBwMCk7CiAgICB2aXJ0dWFsIGdpbnQgbGVhdmVfbm90aWZ5X2V2ZW50X2ltcGwo
R2RrRXZlbnRDcm9zc2luZyogcDApOwogICAgdmlydHVhbCBnaW50IGNvbmZpZ3VyZV9ldmVudF9p
bXBsKEdka0V2ZW50Q29uZmlndXJlKiBwMCk7CiAgICB2aXJ0dWFsIGdpbnQgZm9jdXNfaW5fZXZl
bnRfaW1wbChHZGtFdmVudEZvY3VzKiBwMCk7CiAgICB2aXJ0dWFsIGdpbnQgZm9jdXNfb3V0X2V2
ZW50X2ltcGwoR2RrRXZlbnRGb2N1cyogcDApOwogICAgdmlydHVhbCBnaW50IG1hcF9ldmVudF9p
bXBsKEdka0V2ZW50QW55KiBwMCk7CiAgICB2aXJ0dWFsIGdpbnQgdW5tYXBfZXZlbnRfaW1wbChH
ZGtFdmVudEFueSogcDApOwogICAgdmlydHVhbCBnaW50IHByb3BlcnR5X25vdGlmeV9ldmVudF9p
bXBsKEdka0V2ZW50UHJvcGVydHkqIHAwKTsKICAgIHZpcnR1YWwgZ2ludCBzZWxlY3Rpb25fY2xl
YXJfZXZlbnRfaW1wbChHZGtFdmVudFNlbGVjdGlvbiogcDApOwogICAgdmlydHVhbCBnaW50IHNl
bGVjdGlvbl9yZXF1ZXN0X2V2ZW50X2ltcGwoR2RrRXZlbnRTZWxlY3Rpb24qIHAwKTsKICAgIHZp
cnR1YWwgZ2ludCBzZWxlY3Rpb25fbm90aWZ5X2V2ZW50X2ltcGwoR2RrRXZlbnRTZWxlY3Rpb24q
IHAwKTsKICAgIHZpcnR1YWwgZ2ludCBwcm94aW1pdHlfaW5fZXZlbnRfaW1wbChHZGtFdmVudFBy
b3hpbWl0eSogcDApOwogICAgdmlydHVhbCBnaW50IHByb3hpbWl0eV9vdXRfZXZlbnRfaW1wbChH
ZGtFdmVudFByb3hpbWl0eSogcDApOwogICAgdmlydHVhbCBnaW50IGNsaWVudF9ldmVudF9pbXBs
KEdka0V2ZW50Q2xpZW50KiBwMCk7CiAgICB2aXJ0dWFsIGdpbnQgbm9fZXhwb3NlX2V2ZW50X2lt
cGwoR2RrRXZlbnRBbnkqIHAwKTsKICAgIHZpcnR1YWwgZ2ludCB2aXNpYmlsaXR5X25vdGlmeV9l
dmVudF9pbXBsKEdka0V2ZW50VmlzaWJpbGl0eSogcDApOwogICAgdmlydHVhbCB2b2lkIGRlYnVn
X21zZ19pbXBsKGNvbnN0IGdjaGFyKiBwMCk7CiAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uX2dl
dF9pbXBsKEd0a1NlbGVjdGlvbkRhdGEqIHAwLGd1aW50IHAxLGd1aW50IHAyKTsKICAgIHZpcnR1
YWwgdm9pZCBzZWxlY3Rpb25fcmVjZWl2ZWRfaW1wbChHdGtTZWxlY3Rpb25EYXRhKiBwMCxndWlu
dCBwMSk7CiAgICB2aXJ0dWFsIHZvaWQgZHJhZ19iZWdpbl9pbXBsKEdka0RyYWdDb250ZXh0KiBw
MCk7CiAgICB2aXJ0dWFsIHZvaWQgZHJhZ19lbmRfaW1wbChHZGtEcmFnQ29udGV4dCogcDApOwog
ICAgdmlydHVhbCB2b2lkIGRyYWdfZGF0YV9nZXRfaW1wbChHZGtEcmFnQ29udGV4dCogcDAsR3Rr
U2VsZWN0aW9uRGF0YSogcDEsZ3VpbnQgcDIsZ3VpbnQgcDMpOwogICAgdmlydHVhbCB2b2lkIGRy
YWdfZGF0YV9kZWxldGVfaW1wbChHZGtEcmFnQ29udGV4dCogcDApOwogICAgdmlydHVhbCB2b2lk
IGRyYWdfbGVhdmVfaW1wbChHZGtEcmFnQ29udGV4dCogcDAsZ3VpbnQgcDEpOwogICAgdmlydHVh
bCBnYm9vbGVhbiBkcmFnX21vdGlvbl9pbXBsKEdka0RyYWdDb250ZXh0KiBwMCxnaW50IHAxLGdp
bnQgcDIsZ3VpbnQgcDMpOwogICAgdmlydHVhbCBnYm9vbGVhbiBkcmFnX2Ryb3BfaW1wbChHZGtE
cmFnQ29udGV4dCogcDAsZ2ludCBwMSxnaW50IHAyLGd1aW50IHAzKTsKICAgIHZpcnR1YWwgdm9p
ZCBkcmFnX2RhdGFfcmVjZWl2ZWRfaW1wbChHZGtEcmFnQ29udGV4dCogcDAsZ2ludCBwMSxnaW50
IHAyLEd0a1NlbGVjdGlvbkRhdGEqIHAzLGd1aW50IHA0LGd1aW50MzIgcDUpOwoKfTsKCn0KCiAK
IAogCiAKIAogCgogCiAKIAogCiAKCiAKIAogCiAKIAogCiAKIAoKIAogCiAKIAogCgogCiAKIAog
CiAKIAogCiAKCiAKIAogCiAKIAoKIAogCiAKIAogCiAKIAoKIAogCiAKIAogCiAKCiAKIAogCiAK
IAogCiAKIAogCiAKCiAKIAogCiAKIAogCiAKIAogCiAKCiAKIAogCiAKIAogCiAKIAoKIAogCiAK
IAogCiAKIAogCiAKCiAKIAogCiAKIAogCiAKIAoKIAogCiAKIAogCiAKIAogCgogCiAKIAogCiAK
IAogCiAKCiAKIAogCiAKIAoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAogCiAKIAogCiAK
IAogCiAKIAoKIAogCiAKIAogCiAKIAoKCgoKIyAyNyAiL29wdC9ndGsvaW5jbHVkZS9ndGstLS9j
b250YWluZXIuaCIgMgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a2NvbnRh
aW5lci5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAi
QyIgewoKCgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfR3RrQ29udGFpbmVyCSAgIEd0a0NvbnRh
aW5lcjsKdHlwZWRlZiBzdHJ1Y3QgX0d0a0NvbnRhaW5lckNsYXNzICBHdGtDb250YWluZXJDbGFz
czsKCnN0cnVjdCBfR3RrQ29udGFpbmVyCnsKICBHdGtXaWRnZXQgd2lkZ2V0OwogIAogIEd0a1dp
ZGdldCAqZm9jdXNfY2hpbGQ7CiAgCiAgZ3VpbnQgYm9yZGVyX3dpZHRoIDogMTY7CiAgZ3VpbnQg
bmVlZF9yZXNpemUgOiAxOwogIGd1aW50IHJlc2l6ZV9tb2RlIDogMjsKICBndWludCByZWFsbG9j
YXRlX3JlZHJhd3MgOiAxOwogIAogICAKCiAgR1NMaXN0ICpyZXNpemVfd2lkZ2V0czsKfTsKCnN0
cnVjdCBfR3RrQ29udGFpbmVyQ2xhc3MKewogIEd0a1dpZGdldENsYXNzIHBhcmVudF9jbGFzczsK
ICAKICBndWludCAgIG5fY2hpbGRfYXJnczsKCiAgdm9pZCAoKiBhZGQpCSAgICAgICAJCShHdGtD
b250YWluZXIJICpjb250YWluZXIsCgkJCQkgR3RrV2lkZ2V0CSAqd2lkZ2V0KTsKICB2b2lkICgq
IHJlbW92ZSkgICAgICAJCShHdGtDb250YWluZXIJICpjb250YWluZXIsCgkJCQkgR3RrV2lkZ2V0
CSAqd2lkZ2V0KTsKICB2b2lkICgqIGNoZWNrX3Jlc2l6ZSkJCShHdGtDb250YWluZXIJICpjb250
YWluZXIpOwogIHZvaWQgKCogZm9yYWxsKSAgICAgCQkoR3RrQ29udGFpbmVyCSAqY29udGFpbmVy
LAoJCQkJIGdib29sZWFuCSAgaW5jbHVkZV9pbnRlcm5hbHMsCgkJCQkgR3RrQ2FsbGJhY2sJICBj
YWxsYmFjaywKCQkJCSBncG9pbnRlcgkgIGNhbGxiYWJja19kYXRhKTsKICBnaW50ICgqIGZvY3Vz
KSAgICAgICAJCShHdGtDb250YWluZXIJICpjb250YWluZXIsCgkJCQkgR3RrRGlyZWN0aW9uVHlw
ZSAgZGlyZWN0aW9uKTsKICB2b2lkICgqIHNldF9mb2N1c19jaGlsZCkJKEd0a0NvbnRhaW5lcgkg
KmNvbnRhaW5lciwKCQkJCSBHdGtXaWRnZXQJICp3aWRnZXQpOwogIEd0a1R5cGUgKCpjaGlsZF90
eXBlKQkJKEd0a0NvbnRhaW5lcgkqY29udGFpbmVyKTsKICB2b2lkICAgICgqc2V0X2NoaWxkX2Fy
ZykJKEd0a0NvbnRhaW5lciAJKmNvbnRhaW5lciwKCQkJCSBHdGtXaWRnZXQgICAgCSpjaGlsZCwK
CQkJCSBHdGtBcmcgICAgICAgCSphcmcsCgkJCQkgZ3VpbnQgICAgICAgIAkgYXJnX2lkKTsKICB2
b2lkICAgICgqZ2V0X2NoaWxkX2FyZykJKEd0a0NvbnRhaW5lcgkqY29udGFpbmVyLAoJCQkJIEd0
a1dpZGdldCAgICAJKmNoaWxkLAoJCQkJIEd0a0FyZyAgICAgICAJKmFyZywKCQkJCSBndWludCAg
ICAgICAgCSBhcmdfaWQpOwogIGdjaGFyKiAgKCpjb21wb3NpdGVfbmFtZSkJKEd0a0NvbnRhaW5l
cgkqY29udGFpbmVyLAoJCQkJIEd0a1dpZGdldAkqY2hpbGQpOwoKICAgCiAgR3RrRnVuY3Rpb24g
cGFkMTsKICBHdGtGdW5jdGlvbiBwYWQyOwp9OwoKIAoKR3RrVHlwZSBndGtfY29udGFpbmVyX2dl
dF90eXBlCQkgKHZvaWQpOwp2b2lkICAgIGd0a19jb250YWluZXJfc2V0X2JvcmRlcl93aWR0aAkg
KEd0a0NvbnRhaW5lcgkgICAqY29udGFpbmVyLAoJCQkJCSAgZ3VpbnQJCSAgICBib3JkZXJfd2lk
dGgpOwp2b2lkICAgIGd0a19jb250YWluZXJfYWRkCQkgKEd0a0NvbnRhaW5lcgkgICAqY29udGFp
bmVyLAoJCQkJCSAgR3RrV2lkZ2V0CSAgICp3aWRnZXQpOwp2b2lkICAgIGd0a19jb250YWluZXJf
cmVtb3ZlCQkgKEd0a0NvbnRhaW5lcgkgICAqY29udGFpbmVyLAoJCQkJCSAgR3RrV2lkZ2V0CSAg
ICp3aWRnZXQpOwoKdm9pZCAgICBndGtfY29udGFpbmVyX3NldF9yZXNpemVfbW9kZSAgICAoR3Rr
Q29udGFpbmVyICAgICAqY29udGFpbmVyLAoJCQkJCSAgR3RrUmVzaXplTW9kZSAgICAgcmVzaXpl
X21vZGUpOwoKdm9pZCAgICBndGtfY29udGFpbmVyX2NoZWNrX3Jlc2l6ZSAgICAgICAoR3RrQ29u
dGFpbmVyICAgICAqY29udGFpbmVyKTsKCnZvaWQgICAgZ3RrX2NvbnRhaW5lcl9mb3JlYWNoCQkg
KEd0a0NvbnRhaW5lcgkgICAqY29udGFpbmVyLAoJCQkJCSAgR3RrQ2FsbGJhY2sJICAgIGNhbGxi
YWNrLAoJCQkJCSAgZ3BvaW50ZXIJICAgIGNhbGxiYWNrX2RhdGEpOwp2b2lkICAgIGd0a19jb250
YWluZXJfZm9yZWFjaF9mdWxsCSAoR3RrQ29udGFpbmVyCSAgICpjb250YWluZXIsCgkJCQkJICBH
dGtDYWxsYmFjawkgICAgY2FsbGJhY2ssCgkJCQkJICBHdGtDYWxsYmFja01hcnNoYWwgbWFyc2hh
bCwKCQkJCQkgIGdwb2ludGVyCSAgICBjYWxsYmFja19kYXRhLAoJCQkJCSAgR3RrRGVzdHJveU5v
dGlmeSAgbm90aWZ5KTsKR0xpc3QqIGd0a19jb250YWluZXJfY2hpbGRyZW4JCSAoR3RrQ29udGFp
bmVyCSAgICpjb250YWluZXIpOwpnaW50ICAgZ3RrX2NvbnRhaW5lcl9mb2N1cwkJICAgKEd0a0Nv
bnRhaW5lciAgICAgKmNvbnRhaW5lciwKCQkJCQkgICAgR3RrRGlyZWN0aW9uVHlwZSAgZGlyZWN0
aW9uKTsKCiAKCnZvaWQgICBndGtfY29udGFpbmVyX3NldF9yZWFsbG9jYXRlX3JlZHJhd3MgKEd0
a0NvbnRhaW5lciAgICAqY29udGFpbmVyLAoJCQkJCSAgICAgZ2Jvb2xlYW4gICAgICAgICBuZWVk
c19yZWRyYXdzKTsKdm9pZCAgIGd0a19jb250YWluZXJfc2V0X2ZvY3VzX2NoaWxkCSAgIChHdGtD
b250YWluZXIgICAgICpjb250YWluZXIsCgkJCQkJICAgIEd0a1dpZGdldAkgICAgICpjaGlsZCk7
CnZvaWQgICBndGtfY29udGFpbmVyX3NldF9mb2N1c192YWRqdXN0bWVudCAoR3RrQ29udGFpbmVy
ICAgICAqY29udGFpbmVyLAoJCQkJCSAgICBHdGtBZGp1c3RtZW50ICAgICphZGp1c3RtZW50KTsK
dm9pZCAgIGd0a19jb250YWluZXJfc2V0X2ZvY3VzX2hhZGp1c3RtZW50IChHdGtDb250YWluZXIg
ICAgICpjb250YWluZXIsCgkJCQkJICAgIEd0a0FkanVzdG1lbnQgICAgKmFkanVzdG1lbnQpOwp2
b2lkICAgIGd0a19jb250YWluZXJfcmVnaXN0ZXJfdG9wbGV2ZWwJICAgKEd0a0NvbnRhaW5lciAg
ICAgKmNvbnRhaW5lcik7CnZvaWQgICAgZ3RrX2NvbnRhaW5lcl91bnJlZ2lzdGVyX3RvcGxldmVs
ICAoR3RrQ29udGFpbmVyICAgICAqY29udGFpbmVyKTsKR0xpc3QqICBndGtfY29udGFpbmVyX2dl
dF90b3BsZXZlbHMgICAgICAgICh2b2lkKTsKCnZvaWQgICAgZ3RrX2NvbnRhaW5lcl9yZXNpemVf
Y2hpbGRyZW4gICAgICAoR3RrQ29udGFpbmVyICAgICAqY29udGFpbmVyKTsKCkd0a1R5cGUgZ3Rr
X2NvbnRhaW5lcl9jaGlsZF90eXBlCSAgIChHdGtDb250YWluZXIgICAgICpjb250YWluZXIpOwoK
IAp2b2lkICAgIGd0a19jb250YWluZXJfYWRkX2NoaWxkX2FyZ190eXBlICAgKGNvbnN0IGdjaGFy
ICAgICAgKmFyZ19uYW1lLAoJCQkJCSAgICBHdGtUeXBlICAgICAgICAgICBhcmdfdHlwZSwKCQkJ
CQkgICAgZ3VpbnQgICAgICAgICAgICAgYXJnX2ZsYWdzLAoJCQkJCSAgICBndWludCAgICAgICAg
ICAgICBhcmdfaWQpOwogICAgIAogCgoKCgoKCgoKR3RrQXJnKiBndGtfY29udGFpbmVyX3F1ZXJ5
X2NoaWxkX2FyZ3MJICAgKEd0a1R5cGUJICAgICAgIGNsYXNzX3R5cGUsCgkJCQkJICAgIGd1aW50
MzIgICAgICAgICAgKiphcmdfZmxhZ3MsCgkJCQkJICAgIGd1aW50ICAgICAgICAgICAgICpuYXJn
cyk7CgogCgoKCgp2b2lkICAgIGd0a19jb250YWluZXJfY2hpbGRfZ2V0dgkgICAoR3RrQ29udGFp
bmVyICAgICAgKmNvbnRhaW5lciwKCQkJCQkgICAgR3RrV2lkZ2V0CSAgICAgICpjaGlsZCwKCQkJ
CQkgICAgZ3VpbnQJICAgICAgIG5fYXJncywKCQkJCQkgICAgR3RrQXJnCSAgICAgICphcmdzKTsK
dm9pZCAgICBndGtfY29udGFpbmVyX2NoaWxkX3NldHYgICAJICAgKEd0a0NvbnRhaW5lciAgICAg
ICpjb250YWluZXIsCgkJCQkJICAgIEd0a1dpZGdldAkgICAgICAqY2hpbGQsCgkJCQkJICAgIGd1
aW50CSAgICAgICBuX2FyZ3MsCgkJCQkJICAgIEd0a0FyZwkgICAgICAqYXJncyk7CgogCgoKCgp2
b2lkICAgIGd0a19jb250YWluZXJfYWRkX3dpdGhfYXJncwkgICAoR3RrQ29udGFpbmVyICAgICAg
KmNvbnRhaW5lciwKCQkJCQkgICAgR3RrV2lkZ2V0CSAgICAgICp3aWRnZXQsCgkJCQkJICAgIGNv
bnN0IGdjaGFyCSAgICAgICpmaXJzdF9hcmdfbmFtZSwKCQkJCQkgICAgLi4uKTsKdm9pZCAgICBn
dGtfY29udGFpbmVyX2FkZHYJCSAgIChHdGtDb250YWluZXIgICAgICAqY29udGFpbmVyLAoJCQkJ
CSAgICBHdGtXaWRnZXQJICAgICAgKndpZGdldCwKCQkJCQkgICAgZ3VpbnQJICAgICAgIG5fYXJn
cywKCQkJCQkgICAgR3RrQXJnCSAgICAgICphcmdzKTsKdm9pZAlndGtfY29udGFpbmVyX2NoaWxk
X3NldAkJICAgKEd0a0NvbnRhaW5lciAgICAgICpjb250YWluZXIsCgkJCQkJICAgIEd0a1dpZGdl
dCAgICAgICAgICpjaGlsZCwKCQkJCQkgICAgY29uc3QgZ2NoYXIJICAgICAgKmZpcnN0X2FyZ19u
YW1lLAoJCQkJCSAgICAuLi4pOwogICAgIAoKIAoKdm9pZAlndGtfY29udGFpbmVyX3F1ZXVlX3Jl
c2l6ZQkgICAgIChHdGtDb250YWluZXIgKmNvbnRhaW5lcik7CnZvaWQgICAgZ3RrX2NvbnRhaW5l
cl9jbGVhcl9yZXNpemVfd2lkZ2V0cyAgIChHdGtDb250YWluZXIgKmNvbnRhaW5lcik7CnZvaWQg
ICAgZ3RrX2NvbnRhaW5lcl9hcmdfc2V0CQkgICAgIChHdGtDb250YWluZXIgKmNvbnRhaW5lciwK
CQkJCQkgICAgICBHdGtXaWRnZXQJICAgKmNoaWxkLAoJCQkJCSAgICAgIEd0a0FyZyAgICAgICAq
YXJnLAoJCQkJCSAgICAgIEd0a0FyZ0luZm8gICAqaW5mbyk7CnZvaWQgICAgZ3RrX2NvbnRhaW5l
cl9hcmdfZ2V0CQkgICAgIChHdGtDb250YWluZXIgKmNvbnRhaW5lciwKCQkJCQkgICAgICBHdGtX
aWRnZXQJICAgKmNoaWxkLAoJCQkJCSAgICAgIEd0a0FyZyAgICAgICAqYXJnLAoJCQkJCSAgICAg
IEd0a0FyZ0luZm8gICAqaW5mbyk7CmdjaGFyKglndGtfY29udGFpbmVyX2NoaWxkX2FyZ3NfY29s
bGVjdCAgICAgKEd0a1R5cGUgICAgICAgb2JqZWN0X3R5cGUsCgkJCQkJICAgICAgR1NMaXN0ICAg
ICAgKiphcmdfbGlzdF9wLAoJCQkJCSAgICAgIEdTTGlzdCAgICAgICoqaW5mb19saXN0X3AsCgkJ
CQkJICAgICAgY29uc3QgZ2NoYXIgICpmaXJzdF9hcmdfbmFtZSwKCQkJCQkgICAgICB2YV9saXN0
ICAgICAgIGFyZ3MpOwpnY2hhciogIGd0a19jb250YWluZXJfY2hpbGRfYXJnX2dldF9pbmZvICAg
ICAoR3RrVHlwZSAgICAgICBvYmplY3RfdHlwZSwKCQkJCQkgICAgICBjb25zdCBnY2hhciAgKmFy
Z19uYW1lLAoJCQkJCSAgICAgIEd0a0FyZ0luZm8gICoqaW5mb19wKTsKdm9pZCAgICBndGtfY29u
dGFpbmVyX2ZvcmFsbAkJICAgICAoR3RrQ29udGFpbmVyICpjb250YWluZXIsCgkJCQkJICAgICAg
R3RrQ2FsbGJhY2sgICBjYWxsYmFjaywKCQkJCQkgICAgICBncG9pbnRlcgkgICAgY2FsbGJhY2tf
ZGF0YSk7CmdjaGFyKglndGtfY29udGFpbmVyX2NoaWxkX2NvbXBvc2l0ZV9uYW1lICAgKEd0a0Nv
bnRhaW5lciAqY29udGFpbmVyLAoJCQkJCSAgICAgIEd0a1dpZGdldAkgICAqY2hpbGQpOwp2b2lk
ICAgIGd0a19jb250YWluZXJfZGVxdWV1ZV9yZXNpemVfaGFuZGxlciAoR3RrQ29udGFpbmVyICpj
b250YWluZXIpOwoKCn0KCgoKCiMgMjggIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLS0vY29udGFpbmVy
LmgiIDIKCiAKCgoKCm5hbWVzcGFjZSBHdGsgewpjbGFzcyBDb250YWluZXI7CmNsYXNzIENvbnRh
aW5lcl9DbGFzczsKfQpuYW1lc3BhY2UgR3RrIHsgR3RrOjpDb250YWluZXIgKndyYXAgKEd0a0Nv
bnRhaW5lciAqbyk7IH0KbmFtZXNwYWNlIEd0awp7CmNsYXNzIEFkanVzdG1lbnQ7CmNsYXNzIExh
YmVsOwoKIAogCiAKIAogCiAKIAogCiAKIApjbGFzcyBDb250YWluZXI7CmNsYXNzIENvbnRhaW5l
ciA6IHB1YmxpYyBXaWRnZXQKewoKcHVibGljOgogIHR5cGVkZWYgQ29udGFpbmVyICAgICAgICAg
IENwcE9iamVjdFR5cGU7CiAgdHlwZWRlZiBDb250YWluZXJfQ2xhc3MgICAgQ3BwQ2xhc3NUeXBl
OwogIHR5cGVkZWYgR3RrQ29udGFpbmVyICAgICAgICAgICBCYXNlT2JqZWN0VHlwZTsKICB0eXBl
ZGVmIEd0a0NvbnRhaW5lckNsYXNzICAgICAgQmFzZUNsYXNzVHlwZTsKCnByaXZhdGU6CiAgZnJp
ZW5kIGNsYXNzIENvbnRhaW5lcl9DbGFzczsKICBzdGF0aWMgQ3BwQ2xhc3NUeXBlIGNvbnRhaW5l
cl9jbGFzczsKCiAgQ29udGFpbmVyKGNvbnN0IENvbnRhaW5lciYpOwogIENvbnRhaW5lciYgb3Bl
cmF0b3I9KGNvbnN0IENvbnRhaW5lciYpOyAgCgpwcm90ZWN0ZWQ6CiAgdm9pZCAgIGluaXRpYWxp
emVfY2xhc3MoKTsKICBleHBsaWNpdCBDb250YWluZXIoR3RrQ29udGFpbmVyICpjYXN0aXRlbSk7
CgpwdWJsaWM6CiAgc3RhdGljIEd0a1R5cGUgZ2V0X3R5cGUoKTsKICBHdGtDb250YWluZXIqIGd0
a29iaigpICAgICAgICAgICAgIHsgcmV0dXJuIChHdGtDb250YWluZXIqKShndGtvYmplY3QpOyB9
CiAgY29uc3QgR3RrQ29udGFpbmVyKiBndGtvYmooKSBjb25zdCB7IHJldHVybiAoR3RrQ29udGFp
bmVyKikoZ3Rrb2JqZWN0KTsgfQogIHN0YXRpYyBib29sIGlzQShPYmplY3QgKmNoZWNrY2FzdCk7
CgogICAKICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc2lnbmFsX25hbWVzW107CgogIHZpcnR1
YWwgfkNvbnRhaW5lcigpOwoKcHJpdmF0ZToKCnByaXZhdGU6CiAgIAogIHZvaWQgYWRkKFdpZGdl
dCopOwoKcHVibGljOgoKIAoKCgogICAKCgogIHZvaWQgc2V0X2JvcmRlcl93aWR0aChndWludCB3
aWR0aCk7CgogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAog
ICAKICAgCiAgIAoKICB2b2lkIGFkZChHdGs6OldpZGdldCYgcDApOwoKCiAgIAogICAKCiAgdm9p
ZCByZW1vdmUoR3RrOjpXaWRnZXQmIHAwKTsKCiAgIAoKCiAgdm9pZCBzZXRfcmVzaXplX21vZGUo
R3RrUmVzaXplTW9kZSByZXNpemVfbW9kZSk7CgogICAKCgogICAKICAgCiAgIAogICAKICAgCiAg
IAogICAKICAgCiAgdHlwZWRlZiBTaWdDOjpTbG90MTx2b2lkLCBHdGs6OldpZGdldCY+IEZvcmVh
Y2hDYWxsYmFjazsKICB2b2lkIGZvcmVhY2goY29uc3QgRm9yZWFjaENhbGxiYWNrJik7CgogICAK
CgogIHZvaWQgZm9yZWFjaF8oR3RrQ2FsbGJhY2sgY2FsbGJhY2ssZ3BvaW50ZXIgZGF0YSk7Cgog
ICAKCgoKCiAgdm9pZCBmb3JlYWNoX2Z1bGxfKEd0a0NhbGxiYWNrIGNhbGxiYWNrLEd0a0NhbGxi
YWNrTWFyc2hhbCBtYXJzaGFsLGdwb2ludGVyIGRhdGEsR3RrRGVzdHJveU5vdGlmeSBub3RpZnkp
OwoKCiAgIAogICAKICAgCgoKCgogCgogICAKICB2b2lkIHNldF9mb2N1c19jaGlsZChHdGs6Oldp
ZGdldCogcDApOwogICAKCgogIHZvaWQgc2V0X2ZvY3VzX2NoaWxkKEd0azo6V2lkZ2V0JiBwMCk7
CgoKCiAgdm9pZCBzZXRfZm9jdXNfdmFkanVzdG1lbnQoR3RrOjpBZGp1c3RtZW50JiBhZGp1c3Rt
ZW50KTsKCgoKICB2b2lkIHNldF9mb2N1c19oYWRqdXN0bWVudChHdGs6OkFkanVzdG1lbnQmIGFk
anVzdG1lbnQpOwoKCgogIHZvaWQgcmVnaXN0ZXJfdG9wbGV2ZWwoKTsKCgoKICB2b2lkIHVucmVn
aXN0ZXJfdG9wbGV2ZWwoKTsKCiAgIAoKCgogIHZvaWQgcmVzaXplX2NoaWxkcmVuKCk7CgoKICBH
dGtUeXBlIGNoaWxkX3R5cGUoKTsKcHJvdGVjdGVkOgogIENvbnRhaW5lcigpOwoKcHVibGljOgoK
ICB1bmlvbgogICAgewogICAgICBDcHBPYmplY3RUeXBlICogY29udGFpbmVyX3NlbGY7CiAgICAg
IEd0azo6RW1pdFByb3h5U2lnbmFsMDx2b2lkLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUs
MiwmZ3RrX2NvbnRhaW5lcl9jaGVja19yZXNpemU+IGNoZWNrX3Jlc2l6ZTsKICAgICAgR3RrOjpF
bWl0UHJveHlTaWduYWwxPGdpbnQsR3RrRGlyZWN0aW9uVHlwZSxDcHBPYmplY3RUeXBlLEJhc2VP
YmplY3RUeXBlLDMsJmd0a19jb250YWluZXJfZm9jdXM+IGZvY3VzOwogICAgfTsKCnByb3RlY3Rl
ZDoKICAgCiAgICB2aXJ0dWFsIHZvaWQgYWRkX2ltcGwoR3RrOjpXaWRnZXQmIHAwKTsKICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVfaW1wbChHdGs6OldpZGdldCYgcDApOwogICAgdmlydHVhbCB2b2lk
IGNoZWNrX3Jlc2l6ZV9pbXBsKCk7CiAgICB2aXJ0dWFsIGdpbnQgZm9jdXNfaW1wbChHdGtEaXJl
Y3Rpb25UeXBlIHAwKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRfZm9jdXNfY2hpbGRfaW1wbChHdGs6
OldpZGdldCogcDApOwogICAgdmlydHVhbCBHdGtUeXBlIGNoaWxkX3R5cGVfaW1wbCgpOwoKfTsK
Cn0KCgogCiAKIAogCiAKIAoKIAogCiAKIAogCgogCiAKIAogCiAKCiAKIAogCiAKIAoKIAogCiAK
IAogCiAKCgojIDI3ICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0tL2Jpbi5oIiAyCgojIDEgIi9vcHQv
Z3RrL2luY2x1ZGUvZ3RrLTEuMi9ndGsvZ3RrYmluLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgog
CgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0d0
a0JpbiAgICAgICBHdGtCaW47CnR5cGVkZWYgc3RydWN0IF9HdGtCaW5DbGFzcyAgR3RrQmluQ2xh
c3M7CgpzdHJ1Y3QgX0d0a0Jpbgp7CiAgR3RrQ29udGFpbmVyIGNvbnRhaW5lcjsKCiAgR3RrV2lk
Z2V0ICpjaGlsZDsKfTsKCnN0cnVjdCBfR3RrQmluQ2xhc3MKewogIEd0a0NvbnRhaW5lckNsYXNz
IHBhcmVudF9jbGFzczsKfTsKCgpHdGtUeXBlICBndGtfYmluX2dldF90eXBlICAgKHZvaWQpOwoK
Cgp9CgoKCgojIDI4ICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0tL2Jpbi5oIiAyCgoKbmFtZXNwYWNl
IEd0ayB7CmNsYXNzIEJpbjsKY2xhc3MgQmluX0NsYXNzOwp9Cm5hbWVzcGFjZSBHdGsgeyBHdGs6
OkJpbiAqd3JhcCAoR3RrQmluICpvKTsgfQpuYW1lc3BhY2UgR3RrCnsKIAogCiAKIApjbGFzcyBC
aW4gOiBwdWJsaWMgQ29udGFpbmVyIHsKCnB1YmxpYzoKICB0eXBlZGVmIEJpbiAgICAgICAgICBD
cHBPYmplY3RUeXBlOwogIHR5cGVkZWYgQmluX0NsYXNzICAgIENwcENsYXNzVHlwZTsKICB0eXBl
ZGVmIEd0a0JpbiAgICAgICAgICAgQmFzZU9iamVjdFR5cGU7CiAgdHlwZWRlZiBHdGtCaW5DbGFz
cyAgICAgIEJhc2VDbGFzc1R5cGU7Cgpwcml2YXRlOgogIGZyaWVuZCBjbGFzcyBCaW5fQ2xhc3M7
CiAgc3RhdGljIENwcENsYXNzVHlwZSBiaW5fY2xhc3M7CgogIEJpbihjb25zdCBCaW4mKTsKICBC
aW4mIG9wZXJhdG9yPShjb25zdCBCaW4mKTsgIAoKcHJvdGVjdGVkOgogIHZvaWQgICBpbml0aWFs
aXplX2NsYXNzKCk7CiAgZXhwbGljaXQgQmluKEd0a0JpbiAqY2FzdGl0ZW0pOwoKcHVibGljOgog
IHN0YXRpYyBHdGtUeXBlIGdldF90eXBlKCk7CiAgR3RrQmluKiBndGtvYmooKSAgICAgICAgICAg
ICB7IHJldHVybiAoR3RrQmluKikoZ3Rrb2JqZWN0KTsgfQogIGNvbnN0IEd0a0JpbiogZ3Rrb2Jq
KCkgY29uc3QgeyByZXR1cm4gKEd0a0JpbiopKGd0a29iamVjdCk7IH0KICBzdGF0aWMgYm9vbCBp
c0EoT2JqZWN0ICpjaGVja2Nhc3QpOwoKICAgCiAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNp
Z25hbF9uYW1lc1tdOwoKICB2aXJ0dWFsIH5CaW4oKTsKCnByaXZhdGU6CgpwdWJsaWM6CgoKCgog
ICAKICAgCiAgIAogIEd0azo6V2lkZ2V0KiBnZXRfY2hpbGQoKSBjb25zdDsKCiAgIAogICAKICAg
CiAgdm9pZCByZW1vdmUoKTsKCiAgdm9pZCBhZGRfbGFiZWwoY29uc3Qgc3RyaW5nICZsYWJlbCwK
ICAgICAgICAgICAgICAgICAgICBnZmxvYXQgeD0wLjAsCiAgICAgICAgICAgICAgICAgICAgZ2Zs
b2F0IHk9MC41KTsKCiAgdm9pZCBhZGRfcGl4bWFwKGNvbnN0IEdka19QaXhtYXAgJnBpeG1hcCwK
ICAgICAgICAgICAgICAgICAgICBjb25zdCBHZGtfQml0bWFwICZiaXRtYXApOwoKICB2b2lkIGFk
ZF9waXhsYWJlbChjb25zdCBHZGtfUGl4bWFwICZwaXhtYXAsCiAgICAgICAgICAgICAgICAgICAg
Y29uc3QgR2RrX0JpdG1hcCAmYml0bWFwLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmlu
ZyAmbGFiZWwsCiAgICAgICAgICAgICAgICAgICAgZ2Zsb2F0IHg9MC4wLAogICAgICAgICAgICAg
ICAgICAgIGdmbG9hdCB5PTAuNSk7CgogIHZvaWQgYWRkX3BpeGxhYmVsKGNvbnN0IHN0cmluZyAm
cGl4ZmlsZSwKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcgJmxhYmVsLAogICAgICAg
ICAgICAgICAgICAgIGdmbG9hdCB4PTAuMCwKICAgICAgICAgICAgICAgICAgICBnZmxvYXQgeT0w
LjUpOwpwcm90ZWN0ZWQ6CiAgQmluKCk7CgpwdWJsaWM6Cgpwcm90ZWN0ZWQ6CiAgIAoKfTsKCn0K
CgogCiAKIAogCiAKIAoKIyAyNyAiL29wdC9ndGsvaW5jbHVkZS9ndGstLS93aW5kb3cuaCIgMgoK
IyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a3dpbmRvdy5oIiAxCiAKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKdHlw
ZWRlZiBzdHJ1Y3QgX0d0a1dpbmRvdyAgICAgICBHdGtXaW5kb3c7CnR5cGVkZWYgc3RydWN0IF9H
dGtXaW5kb3dDbGFzcyAgR3RrV2luZG93Q2xhc3M7CgpzdHJ1Y3QgX0d0a1dpbmRvdwp7CiAgR3Rr
QmluIGJpbjsKCiAgZ2NoYXIgKnRpdGxlOwogIGdjaGFyICp3bWNsYXNzX25hbWU7CiAgZ2NoYXIg
KndtY2xhc3NfY2xhc3M7CiAgR3RrV2luZG93VHlwZSB0eXBlOwoKICBHdGtXaWRnZXQgKmZvY3Vz
X3dpZGdldDsKICBHdGtXaWRnZXQgKmRlZmF1bHRfd2lkZ2V0OwogIEd0a1dpbmRvdyAqdHJhbnNp
ZW50X3BhcmVudDsKCiAgZ3VzaG9ydCByZXNpemVfY291bnQ7CiAgZ3VpbnQgYWxsb3dfc2hyaW5r
IDogMTsKICBndWludCBhbGxvd19ncm93IDogMTsKICBndWludCBhdXRvX3NocmluayA6IDE7CiAg
Z3VpbnQgaGFuZGxpbmdfcmVzaXplIDogMTsKICBndWludCBwb3NpdGlvbiA6IDI7CgogICAKCgoK
CgogIGd1aW50IHVzZV91cG9zaXRpb24gOiAxOwogIGd1aW50IG1vZGFsIDogMTsKCiAgIAoKICBn
dWludCB3aW5kb3dfaGFzX2ZvY3VzIDogMTsKICAKICAgCgoKCiAgZ3VpbnQgd2luZG93X2hhc19w
b2ludGVyX2ZvY3VzIDogMTsKfTsKCnN0cnVjdCBfR3RrV2luZG93Q2xhc3MKewogIEd0a0JpbkNs
YXNzIHBhcmVudF9jbGFzczsKCiAgdm9pZCAoKiBzZXRfZm9jdXMpICAgKEd0a1dpbmRvdyAqd2lu
ZG93LAoJCQlHdGtXaWRnZXQgKmZvY3VzKTsKfTsKCgpHdGtUeXBlICAgIGd0a193aW5kb3dfZ2V0
X3R5cGUgICAgICAgICAgICAgICAgICh2b2lkKTsKR3RrV2lkZ2V0KiBndGtfd2luZG93X25ldyAg
ICAgICAgICAgICAgICAgICAgICAoR3RrV2luZG93VHlwZSAgICAgICAgdHlwZSk7CnZvaWQgICAg
ICAgZ3RrX3dpbmRvd19zZXRfdGl0bGUgICAgICAgICAgICAgICAgKEd0a1dpbmRvdyAgICAgICAg
ICAgKndpbmRvdywKCQkJCQkJY29uc3QgZ2NoYXIgICAgICAgICAqdGl0bGUpOwp2b2lkICAgICAg
IGd0a193aW5kb3dfc2V0X3dtY2xhc3MgICAgICAgICAgICAgIChHdGtXaW5kb3cgICAgICAgICAg
ICp3aW5kb3csCgkJCQkJCWNvbnN0IGdjaGFyICAgICAgICAgKndtY2xhc3NfbmFtZSwKCQkJCQkJ
Y29uc3QgZ2NoYXIgICAgICAgICAqd21jbGFzc19jbGFzcyk7CnZvaWQgICAgICAgZ3RrX3dpbmRv
d19zZXRfcG9saWN5ICAgICAgICAgICAgICAgKEd0a1dpbmRvdyAgICAgICAgICAgKndpbmRvdywK
CQkJCQkJZ2ludCAgICAgICAgICAgICAgICAgYWxsb3dfc2hyaW5rLAoJCQkJCQlnaW50ICAgICAg
ICAgICAgICAgICBhbGxvd19ncm93LAoJCQkJCQlnaW50ICAgICAgICAgICAgICAgICBhdXRvX3No
cmluayk7CnZvaWQgICAgICAgZ3RrX3dpbmRvd19hZGRfYWNjZWxfZ3JvdXAgICAgICAgICAgKEd0
a1dpbmRvdyAgICAgICAgICAgKndpbmRvdywKCQkJCQkJR3RrQWNjZWxHcm91cAkgICAgKmFjY2Vs
X2dyb3VwKTsKdm9pZCAgICAgICBndGtfd2luZG93X3JlbW92ZV9hY2NlbF9ncm91cCAgICAgICAo
R3RrV2luZG93ICAgICAgICAgICAqd2luZG93LAoJCQkJCQlHdGtBY2NlbEdyb3VwCSAgICAqYWNj
ZWxfZ3JvdXApOwp2b2lkICAgICAgIGd0a193aW5kb3dfc2V0X3Bvc2l0aW9uICAgICAgICAgICAg
IChHdGtXaW5kb3cgICAgICAgICAgICp3aW5kb3csCgkJCQkJCUd0a1dpbmRvd1Bvc2l0aW9uICAg
IHBvc2l0aW9uKTsKZ2ludAkgICBndGtfd2luZG93X2FjdGl2YXRlX2ZvY3VzCSAgICAgICAoR3Rr
V2luZG93ICAgICAgICAgICAqd2luZG93KTsKZ2ludAkgICBndGtfd2luZG93X2FjdGl2YXRlX2Rl
ZmF1bHQJICAgICAgIChHdGtXaW5kb3cgICAgICAgICAgICp3aW5kb3cpOwoKdm9pZCAgICAgICBn
dGtfd2luZG93X3NldF90cmFuc2llbnRfZm9yICAgICAgICAoR3RrV2luZG93ICAgICAgICAgICAq
d2luZG93LCAKCQkJCQkJR3RrV2luZG93ICAgICAgICAgICAqcGFyZW50KTsKdm9pZCAgICAgICBn
dGtfd2luZG93X3NldF9nZW9tZXRyeV9oaW50cyAgICAgICAoR3RrV2luZG93ICAgICAgICAgICAq
d2luZG93LAoJCQkJCQlHdGtXaWRnZXQgICAgICAgICAgICpnZW9tZXRyeV93aWRnZXQsCgkJCQkJ
CUdka0dlb21ldHJ5ICAgICAgICAgKmdlb21ldHJ5LAoJCQkJCQlHZGtXaW5kb3dIaW50cyAgICAg
ICBnZW9tX21hc2spOwogCgoKCnZvaWQgICAgICAgZ3RrX3dpbmRvd19zZXRfZGVmYXVsdF9zaXpl
ICAgICAgICAgKEd0a1dpbmRvdyAgICAgICAgICAgKndpbmRvdywKCQkJCQkJZ2ludCAgICAgICAg
ICAgICAgICAgd2lkdGgsCgkJCQkJCWdpbnQgICAgICAgICAgICAgICAgIGhlaWdodCk7CgogCnZv
aWQgICAgICAgZ3RrX3dpbmRvd19zZXRfbW9kYWwgICAgICAgICAgICAgICAgKEd0a1dpbmRvdyAg
ICAgICAgICAgKndpbmRvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgbW9kYWwpOwoKIAp2b2lkICAgICAgIGd0a193
aW5kb3dfc2V0X2ZvY3VzICAgICAgICAgICAgICAgIChHdGtXaW5kb3cgICAgICAgICAgICp3aW5k
b3csCgkJCQkJCUd0a1dpZGdldCAgICAgICAgICAgKmZvY3VzKTsKdm9pZCAgICAgICBndGtfd2lu
ZG93X3NldF9kZWZhdWx0ICAgICAgICAgICAgICAoR3RrV2luZG93ICAgICAgICAgICAqd2luZG93
LAoJCQkJCQlHdGtXaWRnZXQgICAgICAgICAgICpkZWZhdWx0dyk7CnZvaWQgICAgICAgZ3RrX3dp
bmRvd19yZW1vdmVfZW1iZWRkZWRfeGlkICAgICAgKEd0a1dpbmRvdyAgICAgICAgICAgKndpbmRv
dywKCQkJCSAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICB4aWQpOwp2b2lkICAg
ICAgIGd0a193aW5kb3dfYWRkX2VtYmVkZGVkX3hpZCAgICAgICAgIChHdGtXaW5kb3cgICAgICAg
ICAgICp3aW5kb3csCgkJCQkJCWd1aW50ICAgICAgICAgICAgICAgIHhpZCk7CnZvaWQgICAgICAg
Z3RrX3dpbmRvd19yZXBvc2l0aW9uICAgICAgICAgICAgICAgKEd0a1dpbmRvdyAgICAgICAgICAg
KndpbmRvdywKCQkJCQkJZ2ludCAgICAgICAgICAgICAgICAgeCwKCQkJCQkJZ2ludCAgICAgICAg
ICAgICAgICAgeSk7CgoKfQoKCgoKIyAyOCAiL29wdC9ndGsvaW5jbHVkZS9ndGstLS93aW5kb3cu
aCIgMgoKCm5hbWVzcGFjZSBHdGsgewpjbGFzcyBXaW5kb3c7CmNsYXNzIFdpbmRvd19DbGFzczsK
fQpuYW1lc3BhY2UgR3RrIHsgR3RrOjpXaW5kb3cgKndyYXAgKEd0a1dpbmRvdyAqbyk7IH0KbmFt
ZXNwYWNlIEd0awp7CmNsYXNzIEFjY2VsR3JvdXA7CgogCiAKIAogCiAKIAogCmNsYXNzIFdpbmRv
dyA6IHB1YmxpYyBCaW4gewoKcHVibGljOgogIHR5cGVkZWYgV2luZG93ICAgICAgICAgIENwcE9i
amVjdFR5cGU7CiAgdHlwZWRlZiBXaW5kb3dfQ2xhc3MgICAgQ3BwQ2xhc3NUeXBlOwogIHR5cGVk
ZWYgR3RrV2luZG93ICAgICAgICAgICBCYXNlT2JqZWN0VHlwZTsKICB0eXBlZGVmIEd0a1dpbmRv
d0NsYXNzICAgICAgQmFzZUNsYXNzVHlwZTsKCnByaXZhdGU6CiAgZnJpZW5kIGNsYXNzIFdpbmRv
d19DbGFzczsKICBzdGF0aWMgQ3BwQ2xhc3NUeXBlIHdpbmRvd19jbGFzczsKCiAgV2luZG93KGNv
bnN0IFdpbmRvdyYpOwogIFdpbmRvdyYgb3BlcmF0b3I9KGNvbnN0IFdpbmRvdyYpOyAgCgpwcm90
ZWN0ZWQ6CiAgdm9pZCAgIGluaXRpYWxpemVfY2xhc3MoKTsKICBleHBsaWNpdCBXaW5kb3coR3Rr
V2luZG93ICpjYXN0aXRlbSk7CgpwdWJsaWM6CiAgc3RhdGljIEd0a1R5cGUgZ2V0X3R5cGUoKTsK
ICBHdGtXaW5kb3cqIGd0a29iaigpICAgICAgICAgICAgIHsgcmV0dXJuIChHdGtXaW5kb3cqKShn
dGtvYmplY3QpOyB9CiAgY29uc3QgR3RrV2luZG93KiBndGtvYmooKSBjb25zdCB7IHJldHVybiAo
R3RrV2luZG93KikoZ3Rrb2JqZWN0KTsgfQogIHN0YXRpYyBib29sIGlzQShPYmplY3QgKmNoZWNr
Y2FzdCk7CgogICAKICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc2lnbmFsX25hbWVzW107Cgog
IHZpcnR1YWwgfldpbmRvdygpOwoKcHJpdmF0ZToKCnB1YmxpYzoKCiAgIAogICAKICBleHBsaWNp
dCBXaW5kb3coR3RrV2luZG93VHlwZSB0eXBlPUdUS19XSU5ET1dfVE9QTEVWRUwpOwoKICBib29s
IGlzX3RvcGxldmVsKCkge3JldHVybiBndGtvYmooKS0+dHlwZT09R1RLX1dJTkRPV19UT1BMRVZF
TDt9CiAgYm9vbCBpc19kaWFsb2coKSAgIHtyZXR1cm4gZ3Rrb2JqKCktPnR5cGU9PUdUS19XSU5E
T1dfRElBTE9HO30KICBib29sIGlzX3BvcHVwKCkgICAge3JldHVybiBndGtvYmooKS0+dHlwZT09
R1RLX1dJTkRPV19QT1BVUDt9CgogIEd0a1dpbmRvd1R5cGUgZ2V0X3dpbmRvd190eXBlKCkgY29u
c3Q7CgogICAKCgogIHZvaWQgc2V0X3RpdGxlKGNvbnN0IG5zdHJpbmcmIHRpdGxlKTsKCiAgIAog
ICAKCgoKICB2b2lkIHNldF93bWNsYXNzKGNvbnN0IG5zdHJpbmcmIHdtY2xhc3NfbmFtZSxjb25z
dCBuc3RyaW5nJiB3bWNsYXNzX2NsYXNzKTsKCiAgIAogICAKCgoKCiAgdm9pZCBzZXRfcG9saWN5
KGdpbnQgYWxsb3dfc2hyaW5rLGdpbnQgYWxsb3dfZ3JvdyxnaW50IGF1dG9fc2hyaW5rKTsKCiAg
IAoKCiAgdm9pZCBzZXRfcG9zaXRpb24oR3RrV2luZG93UG9zaXRpb24gcG9zaXRpb24pOwoKCgog
IGdpbnQgYWN0aXZhdGVfZm9jdXMoKTsKCgoKICBnaW50IGFjdGl2YXRlX2RlZmF1bHQoKTsKCgoK
ICB2b2lkIHNldF90cmFuc2llbnRfZm9yKEd0azo6V2luZG93JiBwYXJlbnQpOwoKCgoKCiAgdm9p
ZCBzZXRfZ2VvbWV0cnlfaGludHMoR3RrOjpXaWRnZXQmIGdlb21ldHJ5X3dpZGdldCxHZGtHZW9t
ZXRyeSogZ2VvbWV0cnksR2RrV2luZG93SGludHMgZ2VvbV9tYXNrKTsKCgoKCiAgdm9pZCBzZXRf
ZGVmYXVsdF9zaXplKGdpbnQgd2lkdGgsZ2ludCBoZWlnaHQpOwoKCgogIHZvaWQgc2V0X21vZGFs
KGJvb2wgbW9kYWwpOwoKICAgCgogICAKCgogIHZvaWQgYWRkX2FjY2VsX2dyb3VwKEd0azo6QWNj
ZWxHcm91cCYgYWNjZWxfZ3JvdXApOwoKICAgCgoKICB2b2lkIHJlbW92ZV9hY2NlbF9ncm91cChH
dGs6OkFjY2VsR3JvdXAmIGFjY2VsX2dyb3VwKTsKCgogCgogICAgCiAgICAKICAgIAogICBBY2Nl
bEdyb3VwKiBnZXRfYWNjZWxfZ3JvdXAoKTsKCnByaXZhdGU6CiAgIEFjY2VsR3JvdXAgKmFjY2Vs
X2dyb3VwXzsKCnB1YmxpYzoKCnByb3RlY3RlZDoKICAgCgp9OwoKfQoKCiAKIAogCiAKIAogCiAK
IAogCiAKCiAKIAogCiAKIAoKIAogCiAKIAogCgogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAog
CiAKIAogCgogCiAKIAogCiAKCiAKIAogCiAKIAoKIAogCiAKIAogCgogCiAKIAogCiAKCiAKIAog
CiAKIAoKIAogCiAKIAogCgogCiAKIAogCiAKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCiAK
IAogCiAKIAogCiAKIAogCiAKCiAKIAogCiAKIAogCiAKCgogCiAKIAogCiAKIAoKIAogCiAKIAog
CiAKIAogCiAKIAoKIAogCiAKIAogCiAKCgogCiAKIAogCgogCiAKIAogCiAKCiAKIAogCiAKIAog
CiAKIAogCiAKCgoKIyAxMiAidF9ndGsuY3BwIiAyCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ3Rr
LS0vc2Nyb2xsZWR3aW5kb3cuaCIgMQogCiAKCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIyAx
ICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a3Njcm9sbGVkd2luZG93LmgiIDEKIAoK
CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0x
LjIvZ3RrL2d0a2hzY3JvbGxiYXIuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK
CgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLTEuMi9ndGsvZ3Rrc2Nyb2xsYmFyLmgiIDEKIAoK
CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0x
LjIvZ3RrL2d0a3JhbmdlLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgpleHRlcm4gIkMiIHsKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9HdGtSYW5nZSAgICAgICAg
R3RrUmFuZ2U7CnR5cGVkZWYgc3RydWN0IF9HdGtSYW5nZUNsYXNzICAgR3RrUmFuZ2VDbGFzczsK
CnN0cnVjdCBfR3RrUmFuZ2UKewogIEd0a1dpZGdldCB3aWRnZXQ7CgogIEdka1dpbmRvdyAqdHJv
dWdoOwogIEdka1dpbmRvdyAqc2xpZGVyOwogIEdka1dpbmRvdyAqc3RlcF9mb3J3OwogIEdka1dp
bmRvdyAqc3RlcF9iYWNrOwoKICBnaW50MTYgeF9jbGlja19wb2ludDsKICBnaW50MTYgeV9jbGlj
a19wb2ludDsKCiAgZ3VpbnQ4IGJ1dHRvbjsKICBnaW50OCBkaWdpdHM7CiAgZ3VpbnQgcG9saWN5
IDogMjsKICBndWludCBzY3JvbGxfdHlwZSA6IDM7CiAgZ3VpbnQgaW5fY2hpbGQgOiAzOwogIGd1
aW50IGNsaWNrX2NoaWxkIDogMzsKICBndWludCBuZWVkX3RpbWVyIDogMTsKCiAgZ3VpbnQzMiB0
aW1lcjsKCiAgZ2Zsb2F0IG9sZF92YWx1ZTsKICBnZmxvYXQgb2xkX2xvd2VyOwogIGdmbG9hdCBv
bGRfdXBwZXI7CiAgZ2Zsb2F0IG9sZF9wYWdlX3NpemU7CgogIEd0a0FkanVzdG1lbnQgKmFkanVz
dG1lbnQ7Cn07CgpzdHJ1Y3QgX0d0a1JhbmdlQ2xhc3MKewogIEd0a1dpZGdldENsYXNzIHBhcmVu
dF9jbGFzczsKCiAgZ2ludCBzbGlkZXJfd2lkdGg7CiAgZ2ludCBzdGVwcGVyX3NpemU7CiAgZ2lu
dCBzdGVwcGVyX3NsaWRlcl9zcGFjaW5nOwogIGdpbnQgbWluX3NsaWRlcl9zaXplOwoKICBndWlu
dDggdHJvdWdoOwogIGd1aW50OCBzbGlkZXI7CiAgZ3VpbnQ4IHN0ZXBfZm9ydzsKICBndWludDgg
c3RlcF9iYWNrOwoKICB2b2lkICgqIGRyYXdfYmFja2dyb3VuZCkgIChHdGtSYW5nZSAqcmFuZ2Up
OwogIHZvaWQgKCogY2xlYXJfYmFja2dyb3VuZCkgKEd0a1JhbmdlICpyYW5nZSk7CiAgdm9pZCAo
KiBkcmF3X3Ryb3VnaCkgICAgIChHdGtSYW5nZSAqcmFuZ2UpOwogIHZvaWQgKCogZHJhd19zbGlk
ZXIpICAgICAoR3RrUmFuZ2UgKnJhbmdlKTsKICB2b2lkICgqIGRyYXdfc3RlcF9mb3J3KSAgKEd0
a1JhbmdlICpyYW5nZSk7CiAgdm9pZCAoKiBkcmF3X3N0ZXBfYmFjaykgIChHdGtSYW5nZSAqcmFu
Z2UpOwogIHZvaWQgKCogc2xpZGVyX3VwZGF0ZSkgICAoR3RrUmFuZ2UgKnJhbmdlKTsKICBnaW50
ICgqIHRyb3VnaF9jbGljaykgICAgKEd0a1JhbmdlICpyYW5nZSwKCQkJICAgIGdpbnQgICAgICB4
LAoJCQkgICAgZ2ludCAgICAgIHksCgkJCSAgICBnZmxvYXQgICAqanVtcF9wZXJjKTsKICBnaW50
ICgqIHRyb3VnaF9rZXlzKSAgICAgKEd0a1JhbmdlICpyYW5nZSwKCQkJICAgIEdka0V2ZW50S2V5
ICprZXksCgkJCSAgICBHdGtTY3JvbGxUeXBlICpzY3JvbGwsCgkJCSAgICBHdGtUcm91Z2hUeXBl
ICp0cm91Z2gpOwogIHZvaWQgKCogbW90aW9uKSAgICAgICAgICAoR3RrUmFuZ2UgKnJhbmdlLAoJ
CQkgICAgZ2ludCAgICAgIHhkZWx0YSwKCQkJICAgIGdpbnQgICAgICB5ZGVsdGEpOwogIGdpbnQg
KCogdGltZXIpICAgICAgICAgICAoR3RrUmFuZ2UgKnJhbmdlKTsKfTsKCgpHdGtUeXBlICAgICAg
ICBndGtfcmFuZ2VfZ2V0X3R5cGUgICAgICAgICAgICAgICAodm9pZCk7Ckd0a0FkanVzdG1lbnQq
IGd0a19yYW5nZV9nZXRfYWRqdXN0bWVudCAgICAgICAgIChHdGtSYW5nZSAgICAgICpyYW5nZSk7
CnZvaWQgICAgICAgICAgIGd0a19yYW5nZV9zZXRfdXBkYXRlX3BvbGljeSAgICAgIChHdGtSYW5n
ZSAgICAgICpyYW5nZSwKCQkJCQkJIEd0a1VwZGF0ZVR5cGUgIHBvbGljeSk7CnZvaWQgICAgICAg
ICAgIGd0a19yYW5nZV9zZXRfYWRqdXN0bWVudCAgICAgICAgIChHdGtSYW5nZSAgICAgICpyYW5n
ZSwKCQkJCQkJIEd0a0FkanVzdG1lbnQgKmFkanVzdG1lbnQpOwoKdm9pZCAgICAgICAgICAgZ3Rr
X3JhbmdlX2RyYXdfYmFja2dyb3VuZCAgICAgICAgKEd0a1JhbmdlICAgICAgKnJhbmdlKTsKdm9p
ZCAgICAgICAgICAgZ3RrX3JhbmdlX2NsZWFyX2JhY2tncm91bmQgICAgICAgIChHdGtSYW5nZSAg
ICAgICpyYW5nZSk7CnZvaWQgICAgICAgICAgIGd0a19yYW5nZV9kcmF3X3Ryb3VnaCAgICAgICAg
ICAgIChHdGtSYW5nZSAgICAgICpyYW5nZSk7CnZvaWQgICAgICAgICAgIGd0a19yYW5nZV9kcmF3
X3NsaWRlciAgICAgICAgICAgIChHdGtSYW5nZSAgICAgICpyYW5nZSk7CnZvaWQgICAgICAgICAg
IGd0a19yYW5nZV9kcmF3X3N0ZXBfZm9ydyAgICAgICAgIChHdGtSYW5nZSAgICAgICpyYW5nZSk7
CnZvaWQgICAgICAgICAgIGd0a19yYW5nZV9kcmF3X3N0ZXBfYmFjayAgICAgICAgIChHdGtSYW5n
ZSAgICAgICpyYW5nZSk7CnZvaWQgICAgICAgICAgIGd0a19yYW5nZV9zbGlkZXJfdXBkYXRlICAg
ICAgICAgIChHdGtSYW5nZSAgICAgICpyYW5nZSk7CmdpbnQgICAgICAgICAgIGd0a19yYW5nZV90
cm91Z2hfY2xpY2sgICAgICAgICAgIChHdGtSYW5nZSAgICAgICpyYW5nZSwKCQkJCQkJIGdpbnQg
ICAgICAgICAgIHgsCgkJCQkJCSBnaW50ICAgICAgICAgICB5LAoJCQkJCQkgZ2Zsb2F0CSAgICAg
ICAqanVtcF9wZXJjKTsKCnZvaWQgICAgICAgICAgIGd0a19yYW5nZV9kZWZhdWx0X2hzbGlkZXJf
dXBkYXRlIChHdGtSYW5nZSAgICAgICpyYW5nZSk7CnZvaWQgICAgICAgICAgIGd0a19yYW5nZV9k
ZWZhdWx0X3ZzbGlkZXJfdXBkYXRlIChHdGtSYW5nZSAgICAgICpyYW5nZSk7CmdpbnQgICAgICAg
ICAgIGd0a19yYW5nZV9kZWZhdWx0X2h0cm91Z2hfY2xpY2sgIChHdGtSYW5nZSAgICAgICpyYW5n
ZSwKCQkJCQkJIGdpbnQgICAgICAgICAgIHgsCgkJCQkJCSBnaW50ICAgICAgICAgICB5LAoJCQkJ
CQkgZ2Zsb2F0CSAgICAgICAqanVtcF9wZXJjKTsKZ2ludCAgICAgICAgICAgZ3RrX3JhbmdlX2Rl
ZmF1bHRfdnRyb3VnaF9jbGljayAgKEd0a1JhbmdlICAgICAgKnJhbmdlLAoJCQkJCQkgZ2ludCAg
ICAgICAgICAgeCwKCQkJCQkJIGdpbnQgICAgICAgICAgIHksCgkJCQkJCSBnZmxvYXQJICAgICAg
ICpqdW1wX3BlcmMpOwp2b2lkICAgICAgICAgICBndGtfcmFuZ2VfZGVmYXVsdF9obW90aW9uICAg
ICAgICAoR3RrUmFuZ2UgICAgICAqcmFuZ2UsCgkJCQkJCSBnaW50ICAgICAgICAgICB4ZGVsdGEs
CgkJCQkJCSBnaW50ICAgICAgICAgICB5ZGVsdGEpOwp2b2lkICAgICAgICAgICBndGtfcmFuZ2Vf
ZGVmYXVsdF92bW90aW9uICAgICAgICAoR3RrUmFuZ2UgICAgICAqcmFuZ2UsCgkJCQkJCSBnaW50
ICAgICAgICAgICB4ZGVsdGEsCgkJCQkJCSBnaW50ICAgICAgICAgICB5ZGVsdGEpOwoKdm9pZCBf
Z3RrX3JhbmdlX2dldF9wcm9wcyAoR3RrUmFuZ2UgKnJhbmdlLAoJCQkgICBnaW50ICAgICAqc2xp
ZGVyX3dpZHRoLAoJCQkgICBnaW50ICAgICAqdHJvdWdoX2JvcmRlciwKCQkJICAgZ2ludCAgICAg
KnN0ZXBwZXJfc2l6ZSwKCQkJICAgZ2ludCAgICAgKnN0ZXBwZXJfc3BhY2luZyk7CgoKfQoKCgoK
IyAzMiAiL29wdC9ndGsvaW5jbHVkZS9ndGstMS4yL2d0ay9ndGtzY3JvbGxiYXIuaCIgMgoKCgoK
ZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfR3RrU2Nyb2xsYmFyICAgICAg
ICBHdGtTY3JvbGxiYXI7CnR5cGVkZWYgc3RydWN0IF9HdGtTY3JvbGxiYXJDbGFzcyAgIEd0a1Nj
cm9sbGJhckNsYXNzOwoKc3RydWN0IF9HdGtTY3JvbGxiYXIKewogIEd0a1JhbmdlIHJhbmdlOwp9
OwoKc3RydWN0IF9HdGtTY3JvbGxiYXJDbGFzcwp7CiAgR3RrUmFuZ2VDbGFzcyBwYXJlbnRfY2xh
c3M7Cn07CgoKR3RrVHlwZSBndGtfc2Nyb2xsYmFyX2dldF90eXBlICh2b2lkKTsKCgoKfQoKCgoK
IyAzMiAiL29wdC9ndGsvaW5jbHVkZS9ndGstMS4yL2d0ay9ndGtoc2Nyb2xsYmFyLmgiIDIKCgoK
CmV4dGVybiAiQyIgewoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0d0a0hTY3JvbGxiYXIgICAg
ICAgR3RrSFNjcm9sbGJhcjsKdHlwZWRlZiBzdHJ1Y3QgX0d0a0hTY3JvbGxiYXJDbGFzcyAgR3Rr
SFNjcm9sbGJhckNsYXNzOwoKc3RydWN0IF9HdGtIU2Nyb2xsYmFyCnsKICBHdGtTY3JvbGxiYXIg
c2Nyb2xsYmFyOwp9OwoKc3RydWN0IF9HdGtIU2Nyb2xsYmFyQ2xhc3MKewogIEd0a1Njcm9sbGJh
ckNsYXNzIHBhcmVudF9jbGFzczsKfTsKCgpHdGtUeXBlICAgIGd0a19oc2Nyb2xsYmFyX2dldF90
eXBlICh2b2lkKTsKR3RrV2lkZ2V0KiBndGtfaHNjcm9sbGJhcl9uZXcgICAgICAoR3RrQWRqdXN0
bWVudCAqYWRqdXN0bWVudCk7CgoKCn0KCgoKCiMgMzIgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLTEu
Mi9ndGsvZ3Rrc2Nyb2xsZWR3aW5kb3cuaCIgMgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0x
LjIvZ3RrL2d0a3ZzY3JvbGxiYXIuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0d0a1ZTY3JvbGxiYXIgICAgICAgR3RrVlNjcm9s
bGJhcjsKdHlwZWRlZiBzdHJ1Y3QgX0d0a1ZTY3JvbGxiYXJDbGFzcyAgR3RrVlNjcm9sbGJhckNs
YXNzOwoKc3RydWN0IF9HdGtWU2Nyb2xsYmFyCnsKICBHdGtTY3JvbGxiYXIgc2Nyb2xsYmFyOwp9
OwoKc3RydWN0IF9HdGtWU2Nyb2xsYmFyQ2xhc3MKewogIEd0a1Njcm9sbGJhckNsYXNzIHBhcmVu
dF9jbGFzczsKfTsKCgoKZXh0ZXJuICJDIiB7CgoKCkd0a1R5cGUgICAgZ3RrX3ZzY3JvbGxiYXJf
Z2V0X3R5cGUgKHZvaWQpOwpHdGtXaWRnZXQqIGd0a192c2Nyb2xsYmFyX25ldyAgICAgIChHdGtB
ZGp1c3RtZW50ICphZGp1c3RtZW50KTsKCgoKfQoKCgoKIyAzMyAiL29wdC9ndGsvaW5jbHVkZS9n
dGstMS4yL2d0ay9ndGtzY3JvbGxlZHdpbmRvdy5oIiAyCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUv
Z3RrLTEuMi9ndGsvZ3Rrdmlld3BvcnQuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK
CgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0d0a1ZpZXdw
b3J0ICAgICAgIEd0a1ZpZXdwb3J0Owp0eXBlZGVmIHN0cnVjdCBfR3RrVmlld3BvcnRDbGFzcyAg
R3RrVmlld3BvcnRDbGFzczsKCnN0cnVjdCBfR3RrVmlld3BvcnQKewogIEd0a0JpbiBiaW47Cgog
IEd0a1NoYWRvd1R5cGUgc2hhZG93X3R5cGU7CiAgR2RrV2luZG93ICp2aWV3X3dpbmRvdzsKICBH
ZGtXaW5kb3cgKmJpbl93aW5kb3c7CiAgR3RrQWRqdXN0bWVudCAqaGFkanVzdG1lbnQ7CiAgR3Rr
QWRqdXN0bWVudCAqdmFkanVzdG1lbnQ7Cn07CgpzdHJ1Y3QgX0d0a1ZpZXdwb3J0Q2xhc3MKewog
IEd0a0JpbkNsYXNzIHBhcmVudF9jbGFzczsKCiAgdm9pZAkoKnNldF9zY3JvbGxfYWRqdXN0bWVu
dHMpCShHdGtWaWV3cG9ydAkqdmlld3BvcnQsCgkJCQkJIEd0a0FkanVzdG1lbnQJKmhhZGp1c3Rt
ZW50LAoJCQkJCSBHdGtBZGp1c3RtZW50CSp2YWRqdXN0bWVudCk7Cn07CgoKR3RrVHlwZSAgICAg
ICAgZ3RrX3ZpZXdwb3J0X2dldF90eXBlICAgICAgICAodm9pZCk7Ckd0a1dpZGdldCogICAgIGd0
a192aWV3cG9ydF9uZXcgICAgICAgICAgICAgKEd0a0FkanVzdG1lbnQgKmhhZGp1c3RtZW50LAoJ
CQkJCSAgICAgR3RrQWRqdXN0bWVudCAqdmFkanVzdG1lbnQpOwpHdGtBZGp1c3RtZW50KiBndGtf
dmlld3BvcnRfZ2V0X2hhZGp1c3RtZW50IChHdGtWaWV3cG9ydCAgICp2aWV3cG9ydCk7Ckd0a0Fk
anVzdG1lbnQqIGd0a192aWV3cG9ydF9nZXRfdmFkanVzdG1lbnQgKEd0a1ZpZXdwb3J0ICAgKnZp
ZXdwb3J0KTsKdm9pZCAgICAgICAgICAgZ3RrX3ZpZXdwb3J0X3NldF9oYWRqdXN0bWVudCAoR3Rr
Vmlld3BvcnQgICAqdmlld3BvcnQsCgkJCQkJICAgICBHdGtBZGp1c3RtZW50ICphZGp1c3RtZW50
KTsKdm9pZCAgICAgICAgICAgZ3RrX3ZpZXdwb3J0X3NldF92YWRqdXN0bWVudCAoR3RrVmlld3Bv
cnQgICAqdmlld3BvcnQsCgkJCQkJICAgICBHdGtBZGp1c3RtZW50ICphZGp1c3RtZW50KTsKdm9p
ZCAgICAgICAgICAgZ3RrX3ZpZXdwb3J0X3NldF9zaGFkb3dfdHlwZSAoR3RrVmlld3BvcnQgICAq
dmlld3BvcnQsCgkJCQkJICAgICBHdGtTaGFkb3dUeXBlICB0eXBlKTsKCgoKfQoKCgoKIyAzNCAi
L29wdC9ndGsvaW5jbHVkZS9ndGstMS4yL2d0ay9ndGtzY3JvbGxlZHdpbmRvdy5oIiAyCgoKCgpl
eHRlcm4gIkMiIHsKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9HdGtTY3JvbGxlZFdpbmRvdyAg
ICAgICBHdGtTY3JvbGxlZFdpbmRvdzsKdHlwZWRlZiBzdHJ1Y3QgX0d0a1Njcm9sbGVkV2luZG93
Q2xhc3MgIEd0a1Njcm9sbGVkV2luZG93Q2xhc3M7CgpzdHJ1Y3QgX0d0a1Njcm9sbGVkV2luZG93
CnsKICBHdGtCaW4gY29udGFpbmVyOwoKICBHdGtXaWRnZXQgKmhzY3JvbGxiYXI7CiAgR3RrV2lk
Z2V0ICp2c2Nyb2xsYmFyOwoKICBndWludCBoc2Nyb2xsYmFyX3BvbGljeSAgICAgIDogMjsKICBn
dWludCB2c2Nyb2xsYmFyX3BvbGljeSAgICAgIDogMjsKICBndWludCBoc2Nyb2xsYmFyX3Zpc2li
bGUgICAgIDogMTsKICBndWludCB2c2Nyb2xsYmFyX3Zpc2libGUgICAgIDogMTsKICBndWludCB3
aW5kb3dfcGxhY2VtZW50ICAgICAgIDogMjsKfTsKCnN0cnVjdCBfR3RrU2Nyb2xsZWRXaW5kb3dD
bGFzcwp7CiAgR3RrQmluQ2xhc3MgcGFyZW50X2NsYXNzOwogIAogIGdpbnQgc2Nyb2xsYmFyX3Nw
YWNpbmc7Cn07CgoKR3RrVHlwZSAgICAgICAgZ3RrX3Njcm9sbGVkX3dpbmRvd19nZXRfdHlwZSAg
ICAgICAgICAodm9pZCk7Ckd0a1dpZGdldCogICAgIGd0a19zY3JvbGxlZF93aW5kb3dfbmV3ICAg
ICAgICAgICAgICAgKEd0a0FkanVzdG1lbnQgICAgICpoYWRqdXN0bWVudCwKCQkJCQkJICAgICAg
R3RrQWRqdXN0bWVudCAgICAgKnZhZGp1c3RtZW50KTsKdm9pZCAgICAgICAgICAgZ3RrX3Njcm9s
bGVkX3dpbmRvd19zZXRfaGFkanVzdG1lbnQgICAoR3RrU2Nyb2xsZWRXaW5kb3cgKnNjcm9sbGVk
X3dpbmRvdywKCQkJCQkJICAgICAgR3RrQWRqdXN0bWVudCAgICAgKmhhZGp1c3RtZW50KTsKdm9p
ZCAgICAgICAgICAgZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfdmFkanVzdG1lbnQgICAoR3RrU2Ny
b2xsZWRXaW5kb3cgKnNjcm9sbGVkX3dpbmRvdywKCQkJCQkJICAgICAgR3RrQWRqdXN0bWVudCAg
ICAgKmhhZGp1c3RtZW50KTsKR3RrQWRqdXN0bWVudCogZ3RrX3Njcm9sbGVkX3dpbmRvd19nZXRf
aGFkanVzdG1lbnQgICAoR3RrU2Nyb2xsZWRXaW5kb3cgKnNjcm9sbGVkX3dpbmRvdyk7Ckd0a0Fk
anVzdG1lbnQqIGd0a19zY3JvbGxlZF93aW5kb3dfZ2V0X3ZhZGp1c3RtZW50ICAgKEd0a1Njcm9s
bGVkV2luZG93ICpzY3JvbGxlZF93aW5kb3cpOwp2b2lkICAgICAgICAgICBndGtfc2Nyb2xsZWRf
d2luZG93X3NldF9wb2xpY3kgICAgICAgIChHdGtTY3JvbGxlZFdpbmRvdyAqc2Nyb2xsZWRfd2lu
ZG93LAoJCQkJCQkgICAgICBHdGtQb2xpY3lUeXBlICAgICAgaHNjcm9sbGJhcl9wb2xpY3ksCgkJ
CQkJCSAgICAgIEd0a1BvbGljeVR5cGUgICAgICB2c2Nyb2xsYmFyX3BvbGljeSk7CnZvaWQgICAg
ICAgICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BsYWNlbWVudCAgICAgKEd0a1Njcm9sbGVk
V2luZG93ICpzY3JvbGxlZF93aW5kb3csCgkJCQkJCSAgICAgIEd0a0Nvcm5lclR5cGUgICAgICB3
aW5kb3dfcGxhY2VtZW50KTsKdm9pZAkgICAgICAgZ3RrX3Njcm9sbGVkX3dpbmRvd19hZGRfd2l0
aF92aWV3cG9ydCAoR3RrU2Nyb2xsZWRXaW5kb3cgKnNjcm9sbGVkX3dpbmRvdywKCQkJCQkJICAg
ICAgR3RrV2lkZ2V0CQkqY2hpbGQpOwoKCgp9CgoKCgojIDI4ICIvb3B0L2d0ay9pbmNsdWRlL2d0
ay0tL3Njcm9sbGVkd2luZG93LmgiIDIKCgpuYW1lc3BhY2UgR3RrIHsKY2xhc3MgU2Nyb2xsZWRX
aW5kb3c7CmNsYXNzIFNjcm9sbGVkV2luZG93X0NsYXNzOwp9Cm5hbWVzcGFjZSBHdGsgeyBHdGs6
OlNjcm9sbGVkV2luZG93ICp3cmFwIChHdGtTY3JvbGxlZFdpbmRvdyAqbyk7IH0KbmFtZXNwYWNl
IEd0awp7CmNsYXNzIEFkanVzdG1lbnQ7CmNsYXNzIEhTY3JvbGxiYXI7CmNsYXNzIFZTY3JvbGxi
YXI7CgpjbGFzcyBTY3JvbGxlZFdpbmRvdyA6IHB1YmxpYyBCaW4gewoKcHVibGljOgogIHR5cGVk
ZWYgU2Nyb2xsZWRXaW5kb3cgICAgICAgICAgQ3BwT2JqZWN0VHlwZTsKICB0eXBlZGVmIFNjcm9s
bGVkV2luZG93X0NsYXNzICAgIENwcENsYXNzVHlwZTsKICB0eXBlZGVmIEd0a1Njcm9sbGVkV2lu
ZG93ICAgICAgICAgICBCYXNlT2JqZWN0VHlwZTsKICB0eXBlZGVmIEd0a1Njcm9sbGVkV2luZG93
Q2xhc3MgICAgICBCYXNlQ2xhc3NUeXBlOwoKcHJpdmF0ZToKICBmcmllbmQgY2xhc3MgU2Nyb2xs
ZWRXaW5kb3dfQ2xhc3M7CiAgc3RhdGljIENwcENsYXNzVHlwZSBzY3JvbGxlZF93aW5kb3dfY2xh
c3M7CgogIFNjcm9sbGVkV2luZG93KGNvbnN0IFNjcm9sbGVkV2luZG93Jik7CiAgU2Nyb2xsZWRX
aW5kb3cmIG9wZXJhdG9yPShjb25zdCBTY3JvbGxlZFdpbmRvdyYpOyAgCgpwcm90ZWN0ZWQ6CiAg
dm9pZCAgIGluaXRpYWxpemVfY2xhc3MoKTsKICBleHBsaWNpdCBTY3JvbGxlZFdpbmRvdyhHdGtT
Y3JvbGxlZFdpbmRvdyAqY2FzdGl0ZW0pOwoKcHVibGljOgogIHN0YXRpYyBHdGtUeXBlIGdldF90
eXBlKCk7CiAgR3RrU2Nyb2xsZWRXaW5kb3cqIGd0a29iaigpICAgICAgICAgICAgIHsgcmV0dXJu
IChHdGtTY3JvbGxlZFdpbmRvdyopKGd0a29iamVjdCk7IH0KICBjb25zdCBHdGtTY3JvbGxlZFdp
bmRvdyogZ3Rrb2JqKCkgY29uc3QgeyByZXR1cm4gKEd0a1Njcm9sbGVkV2luZG93KikoZ3Rrb2Jq
ZWN0KTsgfQogIHN0YXRpYyBib29sIGlzQShPYmplY3QgKmNoZWNrY2FzdCk7CgogICAKICBzdGF0
aWMgY29uc3QgY2hhciogY29uc3Qgc2lnbmFsX25hbWVzW107CgogIHZpcnR1YWwgflNjcm9sbGVk
V2luZG93KCk7Cgpwcml2YXRlOgoKcHVibGljOgoKICAgCiAgIAogIFNjcm9sbGVkV2luZG93KEFk
anVzdG1lbnQgJmhhZGp1c3RtZW50LAoJCSAgICAgQWRqdXN0bWVudCAmdmFkanVzdG1lbnQpOwog
IFNjcm9sbGVkV2luZG93KCk7CgoKCgoKICB2b2lkIHNldF9oYWRqdXN0bWVudChHdGs6OkFkanVz
dG1lbnQqIGhhZGp1c3RtZW50PTApOwoKCgogIHZvaWQgc2V0X3ZhZGp1c3RtZW50KEd0azo6QWRq
dXN0bWVudCogdmFkanVzdG1lbnQ9MCk7CgoKCiAgdm9pZCBzZXRfaGFkanVzdG1lbnQoR3RrOjpB
ZGp1c3RtZW50JiBoYWRqdXN0bWVudCk7CgoKCiAgdm9pZCBzZXRfdmFkanVzdG1lbnQoR3RrOjpB
ZGp1c3RtZW50JiB2YWRqdXN0bWVudCk7CgogICAKCgogIEd0azo6QWRqdXN0bWVudCogZ2V0X2hh
ZGp1c3RtZW50KCkgY29uc3Q7CgoKCiAgR3RrOjpBZGp1c3RtZW50KiBnZXRfdmFkanVzdG1lbnQo
KSBjb25zdDsKCgogIEd0a1BvbGljeVR5cGUgZ2V0X2hzY3JvbGxiYXJfcG9saWN5KCkgY29uc3Q7
CgogIEd0a1BvbGljeVR5cGUgZ2V0X3ZzY3JvbGxiYXJfcG9saWN5KCkgY29uc3Q7CgogIHZvaWQg
c2V0X3BvbGljeShHdGtQb2xpY3lUeXBlIGhzY3JvbGxiYXJfcG9saWN5LEd0a1BvbGljeVR5cGUg
dnNjcm9sbGJhcl9wb2xpY3kpOwoKCiAgR3RrQ29ybmVyVHlwZSBnZXRfcGxhY2VtZW50KCkgY29u
c3Q7CgogIHZvaWQgc2V0X3BsYWNlbWVudChHdGtDb3JuZXJUeXBlIHdpbmRvd19wbGFjZW1lbnQp
OwoKCgogIHZvaWQgYWRkX3dpdGhfdmlld3BvcnQoR3RrOjpXaWRnZXQmIGNoaWxkKTsKCgogIGJv
b2wgZ2V0X3ZzY3JvbGxiYXJfdmlzaWJsZSgpIGNvbnN0OwoKICBib29sIGdldF9oc2Nyb2xsYmFy
X3Zpc2libGUoKSBjb25zdDsKCiAgR3RrOjpIU2Nyb2xsYmFyKiBnZXRfaHNjcm9sbGJhcigpIGNv
bnN0OwoKICBHdGs6OlZTY3JvbGxiYXIqIGdldF92c2Nyb2xsYmFyKCkgY29uc3Q7CgpwdWJsaWM6
Cgpwcm90ZWN0ZWQ6CiAgIAoKfTsKCn0KCgogCiAKIAogCiAKIAoKIAogCiAKIAogCgogCiAKIAog
CiAKCiAKIAogCiAKIAoKIAogCiAKIAogCgogCiAKIAogCiAKCiAKIAogCiAKIAoKCiMgMTMgInRf
Z3RrLmNwcCIgMgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0tL2NsaXN0LmgiIDEKIAogCgoK
CiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKCiMgMSAiL29wdC9n
dGsvaW5jbHVkZS9ndGstMS4yL2d0ay9ndGtjbGlzdC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCgoKCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLTEuMi9ndGsvZ3RrYWxpZ25t
ZW50LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIg
ewoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0d0a0FsaWdubWVudCAgICAgICBHdGtBbGlnbm1l
bnQ7CnR5cGVkZWYgc3RydWN0IF9HdGtBbGlnbm1lbnRDbGFzcyAgR3RrQWxpZ25tZW50Q2xhc3M7
CgpzdHJ1Y3QgX0d0a0FsaWdubWVudAp7CiAgR3RrQmluIGJpbjsKCiAgZ2Zsb2F0IHhhbGlnbjsK
ICBnZmxvYXQgeWFsaWduOwogIGdmbG9hdCB4c2NhbGU7CiAgZ2Zsb2F0IHlzY2FsZTsKfTsKCnN0
cnVjdCBfR3RrQWxpZ25tZW50Q2xhc3MKewogIEd0a0JpbkNsYXNzIHBhcmVudF9jbGFzczsKfTsK
CgpHdGtUeXBlICAgIGd0a19hbGlnbm1lbnRfZ2V0X3R5cGUgICAodm9pZCk7Ckd0a1dpZGdldCog
Z3RrX2FsaWdubWVudF9uZXcgICAgICAgIChnZmxvYXQgICAgICAgICAgICAgeGFsaWduLAoJCQkJ
ICAgICBnZmxvYXQgICAgICAgICAgICAgeWFsaWduLAoJCQkJICAgICBnZmxvYXQgICAgICAgICAg
ICAgeHNjYWxlLAoJCQkJICAgICBnZmxvYXQgICAgICAgICAgICAgeXNjYWxlKTsKdm9pZCAgICAg
ICBndGtfYWxpZ25tZW50X3NldCAgICAgICAgKEd0a0FsaWdubWVudCAgICAgICphbGlnbm1lbnQs
CgkJCQkgICAgIGdmbG9hdCAgICAgICAgICAgICB4YWxpZ24sCgkJCQkgICAgIGdmbG9hdCAgICAg
ICAgICAgICB5YWxpZ24sCgkJCQkgICAgIGdmbG9hdCAgICAgICAgICAgICB4c2NhbGUsCgkJCQkg
ICAgIGdmbG9hdCAgICAgICAgICAgICB5c2NhbGUpOwoKCgp9CgoKCgojIDMzICIvb3B0L2d0ay9p
bmNsdWRlL2d0ay0xLjIvZ3RrL2d0a2NsaXN0LmgiIDIKCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9n
dGstMS4yL2d0ay9ndGtsYWJlbC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoK
IyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a21pc2MuaCIgMQogCgoKCgoKCgoK
CgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgp0eXBlZGVm
IHN0cnVjdCBfR3RrTWlzYwkgICAgICBHdGtNaXNjOwp0eXBlZGVmIHN0cnVjdCBfR3RrTWlzY0Ns
YXNzICBHdGtNaXNjQ2xhc3M7CgpzdHJ1Y3QgX0d0a01pc2MKewogIEd0a1dpZGdldCB3aWRnZXQ7
CiAgCiAgZ2Zsb2F0IHhhbGlnbjsKICBnZmxvYXQgeWFsaWduOwogIAogIGd1aW50MTYgeHBhZDsK
ICBndWludDE2IHlwYWQ7Cn07CgpzdHJ1Y3QgX0d0a01pc2NDbGFzcwp7CiAgR3RrV2lkZ2V0Q2xh
c3MgcGFyZW50X2NsYXNzOwp9OwoKCkd0a1R5cGUgZ3RrX21pc2NfZ2V0X3R5cGUgICAgICAodm9p
ZCk7CnZvaWQJZ3RrX21pc2Nfc2V0X2FsaWdubWVudCAoR3RrTWlzYyAqbWlzYywKCQkJCWdmbG9h
dAkgeGFsaWduLAoJCQkJZ2Zsb2F0CSB5YWxpZ24pOwp2b2lkCWd0a19taXNjX3NldF9wYWRkaW5n
ICAgKEd0a01pc2MgKm1pc2MsCgkJCQlnaW50CSB4cGFkLAoJCQkJZ2ludAkgeXBhZCk7CgoKCn0K
CgoKCiMgMzEgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLTEuMi9ndGsvZ3RrbGFiZWwuaCIgMgoKCgoK
ZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfR3RrTGFiZWwgICAgICAgR3Rr
TGFiZWw7CnR5cGVkZWYgc3RydWN0IF9HdGtMYWJlbENsYXNzICBHdGtMYWJlbENsYXNzOwoKdHlw
ZWRlZiBzdHJ1Y3QgX0d0a0xhYmVsV29yZCAgIEd0a0xhYmVsV29yZDsKCnN0cnVjdCBfR3RrTGFi
ZWwKewogIEd0a01pc2MgbWlzYzsKCiAgZ2NoYXIgICAgKmxhYmVsOwogIEdka1dDaGFyICpsYWJl
bF93YzsKICBnY2hhciAgICAqcGF0dGVybjsKCiAgR3RrTGFiZWxXb3JkICp3b3JkczsKCiAgZ3Vp
bnQJICBtYXhfd2lkdGggOiAxNjsKICBndWludCAgIGp0eXBlIDogMjsKICBnYm9vbGVhbiB3cmFw
Owp9OwoKc3RydWN0IF9HdGtMYWJlbENsYXNzCnsKICBHdGtNaXNjQ2xhc3MgcGFyZW50X2NsYXNz
Owp9OwoKCkd0a1R5cGUgICAgZ3RrX2xhYmVsX2dldF90eXBlICAgICAgKHZvaWQpOwpHdGtXaWRn
ZXQqIGd0a19sYWJlbF9uZXcgICAgICAgICAgIChjb25zdCBnY2hhciAgICAgICAqc3RyKTsKdm9p
ZCAgICAgICBndGtfbGFiZWxfc2V0X3RleHQgICAgICAoR3RrTGFiZWwgICAgICAgICAgKmxhYmVs
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAq
c3RyKTsKdm9pZCAgICAgICBndGtfbGFiZWxfc2V0X2p1c3RpZnkgICAoR3RrTGFiZWwgICAgICAg
ICAgKmxhYmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtKdXN0aWZp
Y2F0aW9uICAganR5cGUpOwp2b2lkCSAgIGd0a19sYWJlbF9zZXRfcGF0dGVybiAgIChHdGtMYWJl
bAkgICAgICAqbGFiZWwsCgkJCQkgICAgY29uc3QgZ2NoYXIJICAgICAgKnBhdHRlcm4pOwp2b2lk
CSAgIGd0a19sYWJlbF9zZXRfbGluZV93cmFwIChHdGtMYWJlbAkgICAgICAqbGFiZWwsCgkJCQkg
ICAgZ2Jvb2xlYW4gICAgICAgICAgIHdyYXApOwp2b2lkICAgICAgIGd0a19sYWJlbF9nZXQgICAg
ICAgICAgIChHdGtMYWJlbCAgICAgICAgICAqbGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdjaGFyICAgICAgICAgICAgKipzdHIpOwoKIAoKCgpndWludCAgICAgIGd0
a19sYWJlbF9wYXJzZV91bGluZSAgICAoR3RrTGFiZWwgICAgICAgICAqbGFiZWwsCgkJCQkgICAg
IGNvbnN0IGdjaGFyICAgICAgKnN0cmluZyk7CgoKCgoKCn0KCgoKCiMgMzQgIi9vcHQvZ3RrL2lu
Y2x1ZGUvZ3RrLTEuMi9ndGsvZ3RrY2xpc3QuaCIgMgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0
ay0xLjIvZ3RrL2d0a2J1dHRvbi5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoK
CgoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9HdGtCdXR0b24gICAg
ICAgR3RrQnV0dG9uOwp0eXBlZGVmIHN0cnVjdCBfR3RrQnV0dG9uQ2xhc3MgIEd0a0J1dHRvbkNs
YXNzOwoKc3RydWN0IF9HdGtCdXR0b24KewogIEd0a0JpbiBiaW47CgogIEd0a1dpZGdldCAqY2hp
bGQgIAoKOwoKICBndWludCBpbl9idXR0b24gOiAxOwogIGd1aW50IGJ1dHRvbl9kb3duIDogMTsK
ICBndWludCByZWxpZWYgOiAyOwp9OwoKc3RydWN0IF9HdGtCdXR0b25DbGFzcwp7CiAgR3RrQmlu
Q2xhc3MgICAgICAgIHBhcmVudF9jbGFzczsKICAKICB2b2lkICgqIHByZXNzZWQpICAoR3RrQnV0
dG9uICpidXR0b24pOwogIHZvaWQgKCogcmVsZWFzZWQpIChHdGtCdXR0b24gKmJ1dHRvbik7CiAg
dm9pZCAoKiBjbGlja2VkKSAgKEd0a0J1dHRvbiAqYnV0dG9uKTsKICB2b2lkICgqIGVudGVyKSAg
ICAoR3RrQnV0dG9uICpidXR0b24pOwogIHZvaWQgKCogbGVhdmUpICAgIChHdGtCdXR0b24gKmJ1
dHRvbik7Cn07CgoKR3RrVHlwZSAgICAgICAgZ3RrX2J1dHRvbl9nZXRfdHlwZSAgICAgICAodm9p
ZCk7Ckd0a1dpZGdldCogICAgIGd0a19idXR0b25fbmV3ICAgICAgICAgICAgKHZvaWQpOwpHdGtX
aWRnZXQqICAgICBndGtfYnV0dG9uX25ld193aXRoX2xhYmVsIChjb25zdCBnY2hhciAqbGFiZWwp
Owp2b2lkICAgICAgICAgICBndGtfYnV0dG9uX3ByZXNzZWQgICAgICAgIChHdGtCdXR0b24gKmJ1
dHRvbik7CnZvaWQgICAgICAgICAgIGd0a19idXR0b25fcmVsZWFzZWQgICAgICAgKEd0a0J1dHRv
biAqYnV0dG9uKTsKdm9pZCAgICAgICAgICAgZ3RrX2J1dHRvbl9jbGlja2VkICAgICAgICAoR3Rr
QnV0dG9uICpidXR0b24pOwp2b2lkICAgICAgICAgICBndGtfYnV0dG9uX2VudGVyICAgICAgICAg
IChHdGtCdXR0b24gKmJ1dHRvbik7CnZvaWQgICAgICAgICAgIGd0a19idXR0b25fbGVhdmUgICAg
ICAgICAgKEd0a0J1dHRvbiAqYnV0dG9uKTsKdm9pZCAgICAgICAgICAgZ3RrX2J1dHRvbl9zZXRf
cmVsaWVmICAgICAoR3RrQnV0dG9uICpidXR0b24sCgkJCQkJICBHdGtSZWxpZWZTdHlsZSBuZXdz
dHlsZSk7Ckd0a1JlbGllZlN0eWxlIGd0a19idXR0b25fZ2V0X3JlbGllZiAgICAgIChHdGtCdXR0
b24gKmJ1dHRvbik7CgoKCn0KCgoKCiMgMzUgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLTEuMi9ndGsv
Z3RrY2xpc3QuaCIgMgoKCgoKCgpleHRlcm4gIkMiIHsKCgogCmVudW0gewogIEdUS19DTElTVF9J
Tl9EUkFHICAgICAgICAgICAgID0gMSA8PCAgMCwKICBHVEtfQ0xJU1RfUk9XX0hFSUdIVF9TRVQg
ICAgICA9IDEgPDwgIDEsCiAgR1RLX0NMSVNUX1NIT1dfVElUTEVTICAgICAgICAgPSAxIDw8ICAy
LAogIEdUS19DTElTVF9DSElMRF9IQVNfRk9DVVMgICAgID0gMSA8PCAgMywKICBHVEtfQ0xJU1Rf
QUREX01PREUgICAgICAgICAgICA9IDEgPDwgIDQsCiAgR1RLX0NMSVNUX0FVVE9fU09SVCAgICAg
ICAgICAgPSAxIDw8ICA1LAogIEdUS19DTElTVF9BVVRPX1JFU0laRV9CTE9DS0VEID0gMSA8PCAg
NiwKICBHVEtfQ0xJU1RfUkVPUkRFUkFCTEUgICAgICAgICA9IDEgPDwgIDcsCiAgR1RLX0NMSVNU
X1VTRV9EUkFHX0lDT05TICAgICAgPSAxIDw8ICA4LAogIEdUS19DTElTVF9EUkFXX0RSQUdfTElO
RSAgICAgID0gMSA8PCAgOSwKICBHVEtfQ0xJU1RfRFJBV19EUkFHX1JFQ1QgICAgICA9IDEgPDwg
MTAKfTsgCgogCnR5cGVkZWYgZW51bQp7CiAgR1RLX0NFTExfRU1QVFksCiAgR1RLX0NFTExfVEVY
VCwKICBHVEtfQ0VMTF9QSVhNQVAsCiAgR1RLX0NFTExfUElYVEVYVCwKICBHVEtfQ0VMTF9XSURH
RVQKfSBHdGtDZWxsVHlwZTsKCnR5cGVkZWYgZW51bQp7CiAgR1RLX0NMSVNUX0RSQUdfTk9ORSwK
ICBHVEtfQ0xJU1RfRFJBR19CRUZPUkUsCiAgR1RLX0NMSVNUX0RSQUdfSU5UTywKICBHVEtfQ0xJ
U1RfRFJBR19BRlRFUgp9IEd0a0NMaXN0RHJhZ1BvczsKCnR5cGVkZWYgZW51bQp7CiAgR1RLX0JV
VFRPTl9JR05PUkVEID0gMCwKICBHVEtfQlVUVE9OX1NFTEVDVFMgPSAxIDw8IDAsCiAgR1RLX0JV
VFRPTl9EUkFHUyAgID0gMSA8PCAxLAogIEdUS19CVVRUT05fRVhQQU5EUyA9IDEgPDwgMgp9IEd0
a0J1dHRvbkFjdGlvbjsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgp0eXBlZGVmIHN0
cnVjdCBfR3RrQ0xpc3QgR3RrQ0xpc3Q7CnR5cGVkZWYgc3RydWN0IF9HdGtDTGlzdENsYXNzIEd0
a0NMaXN0Q2xhc3M7CnR5cGVkZWYgc3RydWN0IF9HdGtDTGlzdENvbHVtbiBHdGtDTGlzdENvbHVt
bjsKdHlwZWRlZiBzdHJ1Y3QgX0d0a0NMaXN0Um93IEd0a0NMaXN0Um93OwoKdHlwZWRlZiBzdHJ1
Y3QgX0d0a0NlbGwgR3RrQ2VsbDsKdHlwZWRlZiBzdHJ1Y3QgX0d0a0NlbGxUZXh0IEd0a0NlbGxU
ZXh0Owp0eXBlZGVmIHN0cnVjdCBfR3RrQ2VsbFBpeG1hcCBHdGtDZWxsUGl4bWFwOwp0eXBlZGVm
IHN0cnVjdCBfR3RrQ2VsbFBpeFRleHQgR3RrQ2VsbFBpeFRleHQ7CnR5cGVkZWYgc3RydWN0IF9H
dGtDZWxsV2lkZ2V0IEd0a0NlbGxXaWRnZXQ7Cgp0eXBlZGVmIGdpbnQgKCpHdGtDTGlzdENvbXBh
cmVGdW5jKSAoR3RrQ0xpc3QgICAgICpjbGlzdCwKCQkJCSAgICAgZ2NvbnN0cG9pbnRlciBwdHIx
LAoJCQkJICAgICBnY29uc3Rwb2ludGVyIHB0cjIpOwoKdHlwZWRlZiBzdHJ1Y3QgX0d0a0NMaXN0
Q2VsbEluZm8gR3RrQ0xpc3RDZWxsSW5mbzsKdHlwZWRlZiBzdHJ1Y3QgX0d0a0NMaXN0RGVzdElu
Zm8gR3RrQ0xpc3REZXN0SW5mbzsKCnN0cnVjdCBfR3RrQ0xpc3RDZWxsSW5mbwp7CiAgZ2ludCBy
b3c7CiAgZ2ludCBjb2x1bW47Cn07CgpzdHJ1Y3QgX0d0a0NMaXN0RGVzdEluZm8KewogIEd0a0NM
aXN0Q2VsbEluZm8gY2VsbDsKICBHdGtDTGlzdERyYWdQb3MgIGluc2VydF9wb3M7Cn07CgpzdHJ1
Y3QgX0d0a0NMaXN0CnsKICBHdGtDb250YWluZXIgY29udGFpbmVyOwogIAogIGd1aW50MTYgZmxh
Z3M7CiAgCiAgIAogIEdNZW1DaHVuayAqcm93X21lbV9jaHVuazsKICBHTWVtQ2h1bmsgKmNlbGxf
bWVtX2NodW5rOwoKICBndWludCBmcmVlemVfY291bnQ7CiAgCiAgIAoKICBHZGtSZWN0YW5nbGUg
aW50ZXJuYWxfYWxsb2NhdGlvbjsKICAKICAgCiAgZ2ludCByb3dzOwogIGdpbnQgcm93X2NlbnRl
cl9vZmZzZXQ7CiAgZ2ludCByb3dfaGVpZ2h0OwogIEdMaXN0ICpyb3dfbGlzdDsKICBHTGlzdCAq
cm93X2xpc3RfZW5kOwogIAogICAKICBnaW50IGNvbHVtbnM7CiAgR2RrUmVjdGFuZ2xlIGNvbHVt
bl90aXRsZV9hcmVhOwogIEdka1dpbmRvdyAqdGl0bGVfd2luZG93OwogIAogICAKICBHdGtDTGlz
dENvbHVtbiAqY29sdW1uOwogIAogICAKCiAgR2RrV2luZG93ICpjbGlzdF93aW5kb3c7CiAgZ2lu
dCBjbGlzdF93aW5kb3dfd2lkdGg7CiAgZ2ludCBjbGlzdF93aW5kb3dfaGVpZ2h0OwogIAogICAK
ICBnaW50IGhvZmZzZXQ7CiAgZ2ludCB2b2Zmc2V0OwogIAogICAKICBHdGtTaGFkb3dUeXBlIHNo
YWRvd190eXBlOwogIAogICAKICBHdGtTZWxlY3Rpb25Nb2RlIHNlbGVjdGlvbl9tb2RlOwogIAog
ICAKICBHTGlzdCAqc2VsZWN0aW9uOwogIEdMaXN0ICpzZWxlY3Rpb25fZW5kOwogIAogIEdMaXN0
ICp1bmRvX3NlbGVjdGlvbjsKICBHTGlzdCAqdW5kb191bnNlbGVjdGlvbjsKICBnaW50IHVuZG9f
YW5jaG9yOwogIAogICAKICBndWludDggYnV0dG9uX2FjdGlvbnNbNV07CgogIGd1aW50OCBkcmFn
X2J1dHRvbjsKCiAgIAogIEd0a0NMaXN0Q2VsbEluZm8gY2xpY2tfY2VsbDsKCiAgIAogIEd0a0Fk
anVzdG1lbnQgKmhhZGp1c3RtZW50OwogIEd0a0FkanVzdG1lbnQgKnZhZGp1c3RtZW50OwogIAog
ICAKICBHZGtHQyAqeG9yX2djOwogIAogICAKICBHZGtHQyAqZmdfZ2M7CiAgR2RrR0MgKmJnX2dj
OwogIAogICAKICBHZGtDdXJzb3IgKmN1cnNvcl9kcmFnOwogIAogICAKICBnaW50IHhfZHJhZzsK
ICAKICAgCiAgZ2ludCBmb2N1c19yb3c7CiAgCiAgIAogIGdpbnQgYW5jaG9yOwogIEd0a1N0YXRl
VHlwZSBhbmNob3Jfc3RhdGU7CiAgZ2ludCBkcmFnX3BvczsKICBnaW50IGh0aW1lcjsKICBnaW50
IHZ0aW1lcjsKICAKICBHdGtTb3J0VHlwZSBzb3J0X3R5cGU7CiAgR3RrQ0xpc3RDb21wYXJlRnVu
YyBjb21wYXJlOwogIGdpbnQgc29ydF9jb2x1bW47Cn07CgpzdHJ1Y3QgX0d0a0NMaXN0Q2xhc3MK
ewogIEd0a0NvbnRhaW5lckNsYXNzIHBhcmVudF9jbGFzczsKICAKICB2b2lkICAoKnNldF9zY3Jv
bGxfYWRqdXN0bWVudHMpIChHdGtDTGlzdCAgICAgICAqY2xpc3QsCgkJCQkgICBHdGtBZGp1c3Rt
ZW50ICAqaGFkanVzdG1lbnQsCgkJCQkgICBHdGtBZGp1c3RtZW50ICAqdmFkanVzdG1lbnQpOwog
IHZvaWQgICAoKnJlZnJlc2gpICAgICAgICAgICAgIChHdGtDTGlzdCAgICAgICAqY2xpc3QpOwog
IHZvaWQgICAoKnNlbGVjdF9yb3cpICAgICAgICAgIChHdGtDTGlzdCAgICAgICAqY2xpc3QsCgkJ
CQkgZ2ludCAgICAgICAgICAgIHJvdywKCQkJCSBnaW50ICAgICAgICAgICAgY29sdW1uLAoJCQkJ
IEdka0V2ZW50ICAgICAgICpldmVudCk7CiAgdm9pZCAgICgqdW5zZWxlY3Rfcm93KSAgICAgICAg
KEd0a0NMaXN0ICAgICAgICpjbGlzdCwKCQkJCSBnaW50ICAgICAgICAgICAgcm93LAoJCQkJIGdp
bnQgICAgICAgICAgICBjb2x1bW4sCgkJCQkgR2RrRXZlbnQgICAgICAgKmV2ZW50KTsKICB2b2lk
ICAgKCpyb3dfbW92ZSkgICAgICAgICAgICAoR3RrQ0xpc3QgICAgICAgKmNsaXN0LAoJCQkJIGdp
bnQgICAgICAgICAgICBzb3VyY2Vfcm93LAoJCQkJIGdpbnQgICAgICAgICAgICBkZXN0X3Jvdyk7
CiAgdm9pZCAgICgqY2xpY2tfY29sdW1uKSAgICAgICAgKEd0a0NMaXN0ICAgICAgICpjbGlzdCwK
CQkJCSBnaW50ICAgICAgICAgICAgY29sdW1uKTsKICB2b2lkICAgKCpyZXNpemVfY29sdW1uKSAg
ICAgICAoR3RrQ0xpc3QgICAgICAgKmNsaXN0LAoJCQkJIGdpbnQgICAgICAgICAgICBjb2x1bW4s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICB3aWR0aCk7
CiAgdm9pZCAgICgqdG9nZ2xlX2ZvY3VzX3JvdykgICAgKEd0a0NMaXN0ICAgICAgICpjbGlzdCk7
CiAgdm9pZCAgICgqc2VsZWN0X2FsbCkgICAgICAgICAgKEd0a0NMaXN0ICAgICAgICpjbGlzdCk7
CiAgdm9pZCAgICgqdW5zZWxlY3RfYWxsKSAgICAgICAgKEd0a0NMaXN0ICAgICAgICpjbGlzdCk7
CiAgdm9pZCAgICgqdW5kb19zZWxlY3Rpb24pICAgICAgKEd0a0NMaXN0ICAgICAgICpjbGlzdCk7
CiAgdm9pZCAgICgqc3RhcnRfc2VsZWN0aW9uKSAgICAgKEd0a0NMaXN0ICAgICAgICpjbGlzdCk7
CiAgdm9pZCAgICgqZW5kX3NlbGVjdGlvbikgICAgICAgKEd0a0NMaXN0ICAgICAgICpjbGlzdCk7
CiAgdm9pZCAgICgqZXh0ZW5kX3NlbGVjdGlvbikgICAgKEd0a0NMaXN0ICAgICAgICpjbGlzdCwK
CQkJCSBHdGtTY3JvbGxUeXBlICAgc2Nyb2xsX3R5cGUsCgkJCQkgZ2Zsb2F0ICAgICAgICAgIHBv
c2l0aW9uLAoJCQkJIGdib29sZWFuICAgICAgICBhdXRvX3N0YXJ0X3NlbGVjdGlvbik7CiAgdm9p
ZCAgICgqc2Nyb2xsX2hvcml6b250YWwpICAgKEd0a0NMaXN0ICAgICAgICpjbGlzdCwKCQkJCSBH
dGtTY3JvbGxUeXBlICAgc2Nyb2xsX3R5cGUsCgkJCQkgZ2Zsb2F0ICAgICAgICAgIHBvc2l0aW9u
KTsKICB2b2lkICAgKCpzY3JvbGxfdmVydGljYWwpICAgICAoR3RrQ0xpc3QgICAgICAgKmNsaXN0
LAoJCQkJIEd0a1Njcm9sbFR5cGUgICBzY3JvbGxfdHlwZSwKCQkJCSBnZmxvYXQgICAgICAgICAg
cG9zaXRpb24pOwogIHZvaWQgICAoKnRvZ2dsZV9hZGRfbW9kZSkgICAgIChHdGtDTGlzdCAgICAg
ICAqY2xpc3QpOwogIHZvaWQgICAoKmFib3J0X2NvbHVtbl9yZXNpemUpIChHdGtDTGlzdCAgICAg
ICAqY2xpc3QpOwogIHZvaWQgICAoKnJlc3luY19zZWxlY3Rpb24pICAgIChHdGtDTGlzdCAgICAg
ICAqY2xpc3QsCgkJCQkgR2RrRXZlbnQgICAgICAgKmV2ZW50KTsKICBHTGlzdCogKCpzZWxlY3Rp
b25fZmluZCkgICAgICAoR3RrQ0xpc3QgICAgICAgKmNsaXN0LAoJCQkJIGdpbnQgICAgICAgICAg
ICByb3dfbnVtYmVyLAoJCQkJIEdMaXN0ICAgICAgICAgICpyb3dfbGlzdF9lbGVtZW50KTsKICB2
b2lkICAgKCpkcmF3X3JvdykgICAgICAgICAgICAoR3RrQ0xpc3QgICAgICAgKmNsaXN0LAoJCQkJ
IEdka1JlY3RhbmdsZSAgICphcmVhLAoJCQkJIGdpbnQgICAgICAgICAgICByb3csCgkJCQkgR3Rr
Q0xpc3RSb3cgICAgKmNsaXN0X3Jvdyk7CiAgdm9pZCAgICgqZHJhd19kcmFnX2hpZ2hsaWdodCkg
KEd0a0NMaXN0ICAgICAgICAqY2xpc3QsCgkJCQkgR3RrQ0xpc3RSb3cgICAgICp0YXJnZXRfcm93
LAoJCQkJIGdpbnQgICAgICAgICAgICAgdGFyZ2V0X3Jvd19udW1iZXIsCgkJCQkgR3RrQ0xpc3RE
cmFnUG9zICBkcmFnX3Bvcyk7CiAgdm9pZCAgICgqY2xlYXIpICAgICAgICAgICAgICAgKEd0a0NM
aXN0ICAgICAgICpjbGlzdCk7CiAgdm9pZCAgICgqZmFrZV91bnNlbGVjdF9hbGwpICAgKEd0a0NM
aXN0ICAgICAgICpjbGlzdCwKCQkJCSBnaW50ICAgICAgICAgICAgcm93KTsKICB2b2lkICAgKCpz
b3J0X2xpc3QpICAgICAgICAgICAoR3RrQ0xpc3QgICAgICAgKmNsaXN0KTsKICBnaW50ICAgKCpp
bnNlcnRfcm93KSAgICAgICAgICAoR3RrQ0xpc3QgICAgICAgKmNsaXN0LAoJCQkJIGdpbnQgICAg
ICAgICAgICByb3csCgkJCQkgZ2NoYXIgICAgICAgICAgKnRleHRbXSk7CiAgdm9pZCAgICgqcmVt
b3ZlX3JvdykgICAgICAgICAgKEd0a0NMaXN0ICAgICAgICpjbGlzdCwKCQkJCSBnaW50ICAgICAg
ICAgICAgcm93KTsKICB2b2lkICAgKCpzZXRfY2VsbF9jb250ZW50cykgICAoR3RrQ0xpc3QgICAg
ICAgKmNsaXN0LAoJCQkJIEd0a0NMaXN0Um93ICAgICpjbGlzdF9yb3csCgkJCQkgZ2ludCAgICAg
ICAgICAgIGNvbHVtbiwKCQkJCSBHdGtDZWxsVHlwZSAgICAgdHlwZSwKCQkJCSBjb25zdCBnY2hh
ciAgICAqdGV4dCwKCQkJCSBndWludDggICAgICAgICAgc3BhY2luZywKCQkJCSBHZGtQaXhtYXAg
ICAgICAqcGl4bWFwLAoJCQkJIEdka0JpdG1hcCAgICAgICptYXNrKTsKICB2b2lkICAgKCpjZWxs
X3NpemVfcmVxdWVzdCkgICAoR3RrQ0xpc3QgICAgICAgKmNsaXN0LAoJCQkJIEd0a0NMaXN0Um93
ICAgICpjbGlzdF9yb3csCgkJCQkgZ2ludCAgICAgICAgICAgIGNvbHVtbiwKCQkJCSBHdGtSZXF1
aXNpdGlvbiAqcmVxdWlzaXRpb24pOwoKfTsKCnN0cnVjdCBfR3RrQ0xpc3RDb2x1bW4KewogIGdj
aGFyICp0aXRsZTsKICBHZGtSZWN0YW5nbGUgYXJlYTsKICAKICBHdGtXaWRnZXQgKmJ1dHRvbjsK
ICBHZGtXaW5kb3cgKndpbmRvdzsKICAKICBnaW50IHdpZHRoOwogIGdpbnQgbWluX3dpZHRoOwog
IGdpbnQgbWF4X3dpZHRoOwogIEd0a0p1c3RpZmljYXRpb24ganVzdGlmaWNhdGlvbjsKICAKICBn
dWludCB2aXNpYmxlICAgICAgICA6IDE7ICAKICBndWludCB3aWR0aF9zZXQgICAgICA6IDE7CiAg
Z3VpbnQgcmVzaXplYWJsZSAgICAgOiAxOwogIGd1aW50IGF1dG9fcmVzaXplICAgIDogMTsKICBn
dWludCBidXR0b25fcGFzc2l2ZSA6IDE7Cn07CgpzdHJ1Y3QgX0d0a0NMaXN0Um93CnsKICBHdGtD
ZWxsICpjZWxsOwogIEd0a1N0YXRlVHlwZSBzdGF0ZTsKICAKICBHZGtDb2xvciBmb3JlZ3JvdW5k
OwogIEdka0NvbG9yIGJhY2tncm91bmQ7CiAgCiAgR3RrU3R5bGUgKnN0eWxlOwoKICBncG9pbnRl
ciBkYXRhOwogIEd0a0Rlc3Ryb3lOb3RpZnkgZGVzdHJveTsKICAKICBndWludCBmZ19zZXQgICAg
IDogMTsKICBndWludCBiZ19zZXQgICAgIDogMTsKICBndWludCBzZWxlY3RhYmxlIDogMTsKfTsK
CiAKc3RydWN0IF9HdGtDZWxsVGV4dAp7CiAgR3RrQ2VsbFR5cGUgdHlwZTsKICAKICBnaW50MTYg
dmVydGljYWw7CiAgZ2ludDE2IGhvcml6b250YWw7CiAgCiAgR3RrU3R5bGUgKnN0eWxlOwoKICBn
Y2hhciAqdGV4dDsKfTsKCnN0cnVjdCBfR3RrQ2VsbFBpeG1hcAp7CiAgR3RrQ2VsbFR5cGUgdHlw
ZTsKICAKICBnaW50MTYgdmVydGljYWw7CiAgZ2ludDE2IGhvcml6b250YWw7CiAgCiAgR3RrU3R5
bGUgKnN0eWxlOwoKICBHZGtQaXhtYXAgKnBpeG1hcDsKICBHZGtCaXRtYXAgKm1hc2s7Cn07Cgpz
dHJ1Y3QgX0d0a0NlbGxQaXhUZXh0CnsKICBHdGtDZWxsVHlwZSB0eXBlOwogIAogIGdpbnQxNiB2
ZXJ0aWNhbDsKICBnaW50MTYgaG9yaXpvbnRhbDsKICAKICBHdGtTdHlsZSAqc3R5bGU7CgogIGdj
aGFyICp0ZXh0OwogIGd1aW50OCBzcGFjaW5nOwogIEdka1BpeG1hcCAqcGl4bWFwOwogIEdka0Jp
dG1hcCAqbWFzazsKfTsKCnN0cnVjdCBfR3RrQ2VsbFdpZGdldAp7CiAgR3RrQ2VsbFR5cGUgdHlw
ZTsKICAKICBnaW50MTYgdmVydGljYWw7CiAgZ2ludDE2IGhvcml6b250YWw7CiAgCiAgR3RrU3R5
bGUgKnN0eWxlOwoKICBHdGtXaWRnZXQgKndpZGdldDsKfTsKCnN0cnVjdCBfR3RrQ2VsbAp7CiAg
R3RrQ2VsbFR5cGUgdHlwZTsKICAKICBnaW50MTYgdmVydGljYWw7CiAgZ2ludDE2IGhvcml6b250
YWw7CiAgCiAgR3RrU3R5bGUgKnN0eWxlOwoKICB1bmlvbiB7CiAgICBnY2hhciAqdGV4dDsKICAg
IAogICAgc3RydWN0IHsKICAgICAgR2RrUGl4bWFwICpwaXhtYXA7CiAgICAgIEdka0JpdG1hcCAq
bWFzazsKICAgIH0gcG07CiAgICAKICAgIHN0cnVjdCB7CiAgICAgIGdjaGFyICp0ZXh0OwogICAg
ICBndWludDggc3BhY2luZzsKICAgICAgR2RrUGl4bWFwICpwaXhtYXA7CiAgICAgIEdka0JpdG1h
cCAqbWFzazsKICAgIH0gcHQ7CiAgICAKICAgIEd0a1dpZGdldCAqd2lkZ2V0OwogIH0gdTsKfTsK
Ckd0a1R5cGUgZ3RrX2NsaXN0X2dldF90eXBlICh2b2lkKTsKCiAKdm9pZCBndGtfY2xpc3RfY29u
c3RydWN0IChHdGtDTGlzdCAqY2xpc3QsCgkJCSAgZ2ludCAgICAgIGNvbHVtbnMsCgkJCSAgZ2No
YXIgICAgKnRpdGxlc1tdKTsKCiAKR3RrV2lkZ2V0KiBndGtfY2xpc3RfbmV3ICAgICAgICAgICAg
IChnaW50ICAgY29sdW1ucyk7Ckd0a1dpZGdldCogZ3RrX2NsaXN0X25ld193aXRoX3RpdGxlcyAo
Z2ludCAgIGNvbHVtbnMsCgkJCQkgICAgICBnY2hhciAqdGl0bGVzW10pOwoKIAp2b2lkIGd0a19j
bGlzdF9zZXRfaGFkanVzdG1lbnQgKEd0a0NMaXN0ICAgICAgKmNsaXN0LAoJCQkJR3RrQWRqdXN0
bWVudCAqYWRqdXN0bWVudCk7CnZvaWQgZ3RrX2NsaXN0X3NldF92YWRqdXN0bWVudCAoR3RrQ0xp
c3QgICAgICAqY2xpc3QsCgkJCQlHdGtBZGp1c3RtZW50ICphZGp1c3RtZW50KTsKCiAKR3RrQWRq
dXN0bWVudCogZ3RrX2NsaXN0X2dldF9oYWRqdXN0bWVudCAoR3RrQ0xpc3QgKmNsaXN0KTsKR3Rr
QWRqdXN0bWVudCogZ3RrX2NsaXN0X2dldF92YWRqdXN0bWVudCAoR3RrQ0xpc3QgKmNsaXN0KTsK
CiAKdm9pZCBndGtfY2xpc3Rfc2V0X3NoYWRvd190eXBlIChHdGtDTGlzdCAgICAgICpjbGlzdCwK
CQkJCUd0a1NoYWRvd1R5cGUgIHR5cGUpOwoKIAp2b2lkIGd0a19jbGlzdF9zZXRfc2VsZWN0aW9u
X21vZGUgKEd0a0NMaXN0ICAgICAgICAgKmNsaXN0LAoJCQkJICAgR3RrU2VsZWN0aW9uTW9kZSAg
bW9kZSk7CgogCnZvaWQgZ3RrX2NsaXN0X3NldF9yZW9yZGVyYWJsZSAoR3RrQ0xpc3QgKmNsaXN0
LAoJCQkJZ2Jvb2xlYW4gIHJlb3JkZXJhYmxlKTsKdm9pZCBndGtfY2xpc3Rfc2V0X3VzZV9kcmFn
X2ljb25zIChHdGtDTGlzdCAqY2xpc3QsCgkJCQkgICBnYm9vbGVhbiAgdXNlX2ljb25zKTsKdm9p
ZCBndGtfY2xpc3Rfc2V0X2J1dHRvbl9hY3Rpb25zIChHdGtDTGlzdCAqY2xpc3QsCgkJCQkgICBn
dWludCAgICAgYnV0dG9uLAoJCQkJICAgZ3VpbnQ4ICAgIGJ1dHRvbl9hY3Rpb25zKTsKCiAKCgoK
dm9pZCBndGtfY2xpc3RfZnJlZXplIChHdGtDTGlzdCAqY2xpc3QpOwp2b2lkIGd0a19jbGlzdF90
aGF3ICAgKEd0a0NMaXN0ICpjbGlzdCk7CgogCnZvaWQgZ3RrX2NsaXN0X2NvbHVtbl90aXRsZXNf
c2hvdyAoR3RrQ0xpc3QgKmNsaXN0KTsKdm9pZCBndGtfY2xpc3RfY29sdW1uX3RpdGxlc19oaWRl
IChHdGtDTGlzdCAqY2xpc3QpOwoKIAoKCgp2b2lkIGd0a19jbGlzdF9jb2x1bW5fdGl0bGVfYWN0
aXZlICAgKEd0a0NMaXN0ICpjbGlzdCwKCQkJCSAgICAgIGdpbnQgICAgICBjb2x1bW4pOwp2b2lk
IGd0a19jbGlzdF9jb2x1bW5fdGl0bGVfcGFzc2l2ZSAgKEd0a0NMaXN0ICpjbGlzdCwKCQkJCSAg
ICAgIGdpbnQgICAgICBjb2x1bW4pOwp2b2lkIGd0a19jbGlzdF9jb2x1bW5fdGl0bGVzX2FjdGl2
ZSAgKEd0a0NMaXN0ICpjbGlzdCk7CnZvaWQgZ3RrX2NsaXN0X2NvbHVtbl90aXRsZXNfcGFzc2l2
ZSAoR3RrQ0xpc3QgKmNsaXN0KTsKCiAKdm9pZCBndGtfY2xpc3Rfc2V0X2NvbHVtbl90aXRsZSAo
R3RrQ0xpc3QgICAgKmNsaXN0LAoJCQkJIGdpbnQgICAgICAgICBjb2x1bW4sCgkJCQkgY29uc3Qg
Z2NoYXIgKnRpdGxlKTsKCiAKZ2NoYXIgKiBndGtfY2xpc3RfZ2V0X2NvbHVtbl90aXRsZSAoR3Rr
Q0xpc3QgKmNsaXN0LAoJCQkJICAgIGdpbnQgICAgICBjb2x1bW4pOwoKIAp2b2lkIGd0a19jbGlz
dF9zZXRfY29sdW1uX3dpZGdldCAoR3RrQ0xpc3QgICpjbGlzdCwKCQkJCSAgZ2ludCAgICAgICBj
b2x1bW4sCgkJCQkgIEd0a1dpZGdldCAqd2lkZ2V0KTsKCiAKR3RrV2lkZ2V0ICogZ3RrX2NsaXN0
X2dldF9jb2x1bW5fd2lkZ2V0IChHdGtDTGlzdCAqY2xpc3QsCgkJCQkJIGdpbnQgICAgICBjb2x1
bW4pOwoKIAp2b2lkIGd0a19jbGlzdF9zZXRfY29sdW1uX2p1c3RpZmljYXRpb24gKEd0a0NMaXN0
ICAgICAgICAgKmNsaXN0LAoJCQkJCSBnaW50ICAgICAgICAgICAgICBjb2x1bW4sCgkJCQkJIEd0
a0p1c3RpZmljYXRpb24gIGp1c3RpZmljYXRpb24pOwoKIAp2b2lkIGd0a19jbGlzdF9zZXRfY29s
dW1uX3Zpc2liaWxpdHkgKEd0a0NMaXN0ICpjbGlzdCwKCQkJCSAgICAgIGdpbnQgICAgICBjb2x1
bW4sCgkJCQkgICAgICBnYm9vbGVhbiAgdmlzaWJsZSk7CgogCnZvaWQgZ3RrX2NsaXN0X3NldF9j
b2x1bW5fcmVzaXplYWJsZSAoR3RrQ0xpc3QgKmNsaXN0LAoJCQkJICAgICAgZ2ludCAgICAgIGNv
bHVtbiwKCQkJCSAgICAgIGdib29sZWFuICByZXNpemVhYmxlKTsKCiAKdm9pZCBndGtfY2xpc3Rf
c2V0X2NvbHVtbl9hdXRvX3Jlc2l6ZSAoR3RrQ0xpc3QgKmNsaXN0LAoJCQkJICAgICAgIGdpbnQg
ICAgICBjb2x1bW4sCgkJCQkgICAgICAgZ2Jvb2xlYW4gIGF1dG9fcmVzaXplKTsKCmdpbnQgZ3Rr
X2NsaXN0X2NvbHVtbnNfYXV0b3NpemUgKEd0a0NMaXN0ICpjbGlzdCk7CgogCmdpbnQgZ3RrX2Ns
aXN0X29wdGltYWxfY29sdW1uX3dpZHRoIChHdGtDTGlzdCAqY2xpc3QsCgkJCQkgICAgIGdpbnQg
ICAgICBjb2x1bW4pOwoKIAoKCgp2b2lkIGd0a19jbGlzdF9zZXRfY29sdW1uX3dpZHRoIChHdGtD
TGlzdCAqY2xpc3QsCgkJCQkgZ2ludCAgICAgIGNvbHVtbiwKCQkJCSBnaW50ICAgICAgd2lkdGgp
OwoKIAp2b2lkIGd0a19jbGlzdF9zZXRfY29sdW1uX21pbl93aWR0aCAoR3RrQ0xpc3QgKmNsaXN0
LAoJCQkJICAgICBnaW50ICAgICAgY29sdW1uLAoJCQkJICAgICBnaW50ICAgICAgbWluX3dpZHRo
KTsKdm9pZCBndGtfY2xpc3Rfc2V0X2NvbHVtbl9tYXhfd2lkdGggKEd0a0NMaXN0ICpjbGlzdCwK
CQkJCSAgICAgZ2ludCAgICAgIGNvbHVtbiwKCQkJCSAgICAgZ2ludCAgICAgIG1heF93aWR0aCk7
CgogCgoKdm9pZCBndGtfY2xpc3Rfc2V0X3Jvd19oZWlnaHQgKEd0a0NMaXN0ICpjbGlzdCwKCQkJ
ICAgICAgIGd1aW50ICAgICBoZWlnaHQpOwoKIAoKCgoKdm9pZCBndGtfY2xpc3RfbW92ZXRvIChH
dGtDTGlzdCAqY2xpc3QsCgkJICAgICAgIGdpbnQgICAgICByb3csCgkJICAgICAgIGdpbnQgICAg
ICBjb2x1bW4sCgkJICAgICAgIGdmbG9hdCAgICByb3dfYWxpZ24sCgkJICAgICAgIGdmbG9hdCAg
ICBjb2xfYWxpZ24pOwoKIApHdGtWaXNpYmlsaXR5IGd0a19jbGlzdF9yb3dfaXNfdmlzaWJsZSAo
R3RrQ0xpc3QgKmNsaXN0LAoJCQkJCWdpbnQgICAgICByb3cpOwoKIApHdGtDZWxsVHlwZSBndGtf
Y2xpc3RfZ2V0X2NlbGxfdHlwZSAoR3RrQ0xpc3QgKmNsaXN0LAoJCQkJICAgICBnaW50ICAgICAg
cm93LAoJCQkJICAgICBnaW50ICAgICAgY29sdW1uKTsKCiAKdm9pZCBndGtfY2xpc3Rfc2V0X3Rl
eHQgKEd0a0NMaXN0ICAgICpjbGlzdCwKCQkJIGdpbnQgICAgICAgICByb3csCgkJCSBnaW50ICAg
ICAgICAgY29sdW1uLAoJCQkgY29uc3QgZ2NoYXIgKnRleHQpOwoKIAoKCmdpbnQgZ3RrX2NsaXN0
X2dldF90ZXh0IChHdGtDTGlzdCAgKmNsaXN0LAoJCQkgZ2ludCAgICAgICByb3csCgkJCSBnaW50
ICAgICAgIGNvbHVtbiwKCQkJIGdjaGFyICAgICoqdGV4dCk7CgogCnZvaWQgZ3RrX2NsaXN0X3Nl
dF9waXhtYXAgKEd0a0NMaXN0ICAqY2xpc3QsCgkJCSAgIGdpbnQgICAgICAgcm93LAoJCQkgICBn
aW50ICAgICAgIGNvbHVtbiwKCQkJICAgR2RrUGl4bWFwICpwaXhtYXAsCgkJCSAgIEdka0JpdG1h
cCAqbWFzayk7CgpnaW50IGd0a19jbGlzdF9nZXRfcGl4bWFwIChHdGtDTGlzdCAgICpjbGlzdCwK
CQkJICAgZ2ludCAgICAgICAgcm93LAoJCQkgICBnaW50ICAgICAgICBjb2x1bW4sCgkJCSAgIEdk
a1BpeG1hcCAqKnBpeG1hcCwKCQkJICAgR2RrQml0bWFwICoqbWFzayk7CgogCnZvaWQgZ3RrX2Ns
aXN0X3NldF9waXh0ZXh0IChHdGtDTGlzdCAgICAqY2xpc3QsCgkJCSAgICBnaW50ICAgICAgICAg
cm93LAoJCQkgICAgZ2ludCAgICAgICAgIGNvbHVtbiwKCQkJICAgIGNvbnN0IGdjaGFyICp0ZXh0
LAoJCQkgICAgZ3VpbnQ4ICAgICAgIHNwYWNpbmcsCgkJCSAgICBHZGtQaXhtYXAgICAqcGl4bWFw
LAoJCQkgICAgR2RrQml0bWFwICAgKm1hc2spOwoKZ2ludCBndGtfY2xpc3RfZ2V0X3BpeHRleHQg
KEd0a0NMaXN0ICAgKmNsaXN0LAoJCQkgICAgZ2ludCAgICAgICAgcm93LAoJCQkgICAgZ2ludCAg
ICAgICAgY29sdW1uLAoJCQkgICAgZ2NoYXIgICAgICoqdGV4dCwKCQkJICAgIGd1aW50OCAgICAg
KnNwYWNpbmcsCgkJCSAgICBHZGtQaXhtYXAgKipwaXhtYXAsCgkJCSAgICBHZGtCaXRtYXAgKipt
YXNrKTsKCiAKCgp2b2lkIGd0a19jbGlzdF9zZXRfZm9yZWdyb3VuZCAoR3RrQ0xpc3QgKmNsaXN0
LAoJCQkgICAgICAgZ2ludCAgICAgIHJvdywKCQkJICAgICAgIEdka0NvbG9yICpjb2xvcik7Cgog
CgoKdm9pZCBndGtfY2xpc3Rfc2V0X2JhY2tncm91bmQgKEd0a0NMaXN0ICpjbGlzdCwKCQkJICAg
ICAgIGdpbnQgICAgICByb3csCgkJCSAgICAgICBHZGtDb2xvciAqY29sb3IpOwoKIAp2b2lkIGd0
a19jbGlzdF9zZXRfY2VsbF9zdHlsZSAoR3RrQ0xpc3QgKmNsaXN0LAoJCQkgICAgICAgZ2ludCAg
ICAgIHJvdywKCQkJICAgICAgIGdpbnQgICAgICBjb2x1bW4sCgkJCSAgICAgICBHdGtTdHlsZSAq
c3R5bGUpOwoKR3RrU3R5bGUgKmd0a19jbGlzdF9nZXRfY2VsbF9zdHlsZSAoR3RrQ0xpc3QgKmNs
aXN0LAoJCQkJICAgIGdpbnQgICAgICByb3csCgkJCQkgICAgZ2ludCAgICAgIGNvbHVtbik7Cgp2
b2lkIGd0a19jbGlzdF9zZXRfcm93X3N0eWxlIChHdGtDTGlzdCAqY2xpc3QsCgkJCSAgICAgIGdp
bnQgICAgICByb3csCgkJCSAgICAgIEd0a1N0eWxlICpzdHlsZSk7CgpHdGtTdHlsZSAqZ3RrX2Ns
aXN0X2dldF9yb3dfc3R5bGUgKEd0a0NMaXN0ICpjbGlzdCwKCQkJCSAgIGdpbnQgICAgICByb3cp
OwoKIAoKCgp2b2lkIGd0a19jbGlzdF9zZXRfc2hpZnQgKEd0a0NMaXN0ICpjbGlzdCwKCQkJICBn
aW50ICAgICAgcm93LAoJCQkgIGdpbnQgICAgICBjb2x1bW4sCgkJCSAgZ2ludCAgICAgIHZlcnRp
Y2FsLAoJCQkgIGdpbnQgICAgICBob3Jpem9udGFsKTsKCiAKdm9pZCBndGtfY2xpc3Rfc2V0X3Nl
bGVjdGFibGUgKEd0a0NMaXN0ICpjbGlzdCwKCQkJICAgICAgIGdpbnQgICAgICByb3csCgkJCSAg
ICAgICBnYm9vbGVhbiAgc2VsZWN0YWJsZSk7Cmdib29sZWFuIGd0a19jbGlzdF9nZXRfc2VsZWN0
YWJsZSAoR3RrQ0xpc3QgKmNsaXN0LAoJCQkJICAgZ2ludCAgICAgIHJvdyk7CgogCgoKZ2ludCBn
dGtfY2xpc3RfcHJlcGVuZCAoR3RrQ0xpc3QgICAgKmNsaXN0LAoJCSAgICAgICAgZ2NoYXIgICAg
ICAgKnRleHRbXSk7CmdpbnQgZ3RrX2NsaXN0X2FwcGVuZCAgKEd0a0NMaXN0ICAgICpjbGlzdCwK
CQkJZ2NoYXIgICAgICAgKnRleHRbXSk7CgogCgoKZ2ludCBndGtfY2xpc3RfaW5zZXJ0IChHdGtD
TGlzdCAgICAqY2xpc3QsCgkJICAgICAgIGdpbnQgICAgICAgICByb3csCgkJICAgICAgIGdjaGFy
ICAgICAgICp0ZXh0W10pOwoKIAp2b2lkIGd0a19jbGlzdF9yZW1vdmUgKEd0a0NMaXN0ICpjbGlz
dCwKCQkgICAgICAgZ2ludCAgICAgIHJvdyk7CgogCnZvaWQgZ3RrX2NsaXN0X3NldF9yb3dfZGF0
YSAoR3RrQ0xpc3QgKmNsaXN0LAoJCQkgICAgIGdpbnQgICAgICByb3csCgkJCSAgICAgZ3BvaW50
ZXIgIGRhdGEpOwoKIAp2b2lkIGd0a19jbGlzdF9zZXRfcm93X2RhdGFfZnVsbCAoR3RrQ0xpc3Qg
ICAgICAgICAqY2xpc3QsCgkJCSAgICAgICAgICBnaW50ICAgICAgICAgICAgICByb3csCgkJCSAg
ICAgICAgICBncG9pbnRlciAgICAgICAgICBkYXRhLAoJCQkJICBHdGtEZXN0cm95Tm90aWZ5ICBk
ZXN0cm95KTsKCiAKZ3BvaW50ZXIgZ3RrX2NsaXN0X2dldF9yb3dfZGF0YSAoR3RrQ0xpc3QgKmNs
aXN0LAoJCQkJIGdpbnQgICAgICByb3cpOwoKIAoKCmdpbnQgZ3RrX2NsaXN0X2ZpbmRfcm93X2Zy
b21fZGF0YSAoR3RrQ0xpc3QgKmNsaXN0LAoJCQkJICAgZ3BvaW50ZXIgIGRhdGEpOwoKIAp2b2lk
IGd0a19jbGlzdF9zZWxlY3Rfcm93IChHdGtDTGlzdCAqY2xpc3QsCgkJCSAgIGdpbnQgICAgICBy
b3csCgkJCSAgIGdpbnQgICAgICBjb2x1bW4pOwoKIAp2b2lkIGd0a19jbGlzdF91bnNlbGVjdF9y
b3cgKEd0a0NMaXN0ICpjbGlzdCwKCQkJICAgICBnaW50ICAgICAgcm93LAoJCQkgICAgIGdpbnQg
ICAgICBjb2x1bW4pOwoKIAp2b2lkIGd0a19jbGlzdF91bmRvX3NlbGVjdGlvbiAoR3RrQ0xpc3Qg
KmNsaXN0KTsKCiAKCgp2b2lkIGd0a19jbGlzdF9jbGVhciAoR3RrQ0xpc3QgKmNsaXN0KTsKCiAK
CgoKZ2ludCBndGtfY2xpc3RfZ2V0X3NlbGVjdGlvbl9pbmZvIChHdGtDTGlzdCAqY2xpc3QsCgkJ
CSAgICAgCSAgIGdpbnQgICAgICB4LAoJCQkgICAgIAkgICBnaW50ICAgICAgeSwKCQkJICAgICAJ
ICAgZ2ludCAgICAgKnJvdywKCQkJICAgICAJICAgZ2ludCAgICAgKmNvbHVtbik7CgogCnZvaWQg
Z3RrX2NsaXN0X3NlbGVjdF9hbGwgKEd0a0NMaXN0ICpjbGlzdCk7CgogCnZvaWQgZ3RrX2NsaXN0
X3Vuc2VsZWN0X2FsbCAoR3RrQ0xpc3QgKmNsaXN0KTsKCiAKdm9pZCBndGtfY2xpc3Rfc3dhcF9y
b3dzIChHdGtDTGlzdCAqY2xpc3QsCgkJCSAgZ2ludCAgICAgIHJvdzEsCgkJCSAgZ2ludCAgICAg
IHJvdzIpOwoKIAp2b2lkIGd0a19jbGlzdF9yb3dfbW92ZSAoR3RrQ0xpc3QgKmNsaXN0LAoJCQkg
Z2ludCAgICAgIHNvdXJjZV9yb3csCgkJCSBnaW50ICAgICAgZGVzdF9yb3cpOwoKIAp2b2lkIGd0
a19jbGlzdF9zZXRfY29tcGFyZV9mdW5jIChHdGtDTGlzdCAgICAgICAgICAgICpjbGlzdCwKCQkJ
CSBHdGtDTGlzdENvbXBhcmVGdW5jICBjbXBfZnVuYyk7CgogCnZvaWQgZ3RrX2NsaXN0X3NldF9z
b3J0X2NvbHVtbiAoR3RrQ0xpc3QgKmNsaXN0LAoJCQkJZ2ludCAgICAgIGNvbHVtbik7CgogCnZv
aWQgZ3RrX2NsaXN0X3NldF9zb3J0X3R5cGUgKEd0a0NMaXN0ICAgICpjbGlzdCwKCQkJICAgICAg
R3RrU29ydFR5cGUgIHNvcnRfdHlwZSk7CgogCnZvaWQgZ3RrX2NsaXN0X3NvcnQgKEd0a0NMaXN0
ICpjbGlzdCk7CgogCnZvaWQgZ3RrX2NsaXN0X3NldF9hdXRvX3NvcnQgKEd0a0NMaXN0ICpjbGlz
dCwKCQkJICAgICAgZ2Jvb2xlYW4gIGF1dG9fc29ydCk7CgoKCn0KCgoKIyA0NyAiL29wdC9ndGsv
aW5jbHVkZS9ndGstLS9jbGlzdC5oIiAyCgoKbmFtZXNwYWNlIEd0ayB7CmNsYXNzIENMaXN0Owpj
bGFzcyBDTGlzdF9DbGFzczsKfQpuYW1lc3BhY2UgR3RrIHsgR3RrOjpDTGlzdCAqd3JhcCAoR3Rr
Q0xpc3QgKm8pOyB9CmV4dGVybiAiQyIgdm9pZCBndGttbV9jbGlzdF9jbGlja19jb2x1bW4oR3Rr
Q0xpc3QqLGdpbnQgcDApOwpleHRlcm4gIkMiIHZvaWQgZ3RrX2NsaXN0X3NldF9zY3JvbGxfYWRq
dXN0bWVudHMoR3RrQ0xpc3QqLEd0a0FkanVzdG1lbnQqIHAxLEd0a0FkanVzdG1lbnQqIHAyKTsK
bmFtZXNwYWNlIEd0awp7CgpjbGFzcyBDTGlzdDsKbmFtZXNwYWNlIENMaXN0X0hlbHBlcnMgewoK
Y2xhc3MgRnJlZXplCiAgewogICAgQ0xpc3QgKmNsaXN0XzsKICAgIHB1YmxpYzoKICAgICAgRnJl
ZXplKENMaXN0JiBjbGlzdCk7CiAgICAgIH5GcmVlemUoKTsKICB9OwoKIApjbGFzcyBSb3c7CmNs
YXNzIENlbGxJdGVyYXRvcjsKY2xhc3MgQ2VsbAogIHsKICAgIHByb3RlY3RlZDoKICAgICAgZnJp
ZW5kIENMaXN0OwogICAgICBmcmllbmQgUm93OwoKICAgICAgR3RrQ0xpc3QgICAgKnBhcmVudF87
CiAgICAgIEd0a0NMaXN0Um93ICpyb3dfXzsKICAgICAgZ2ludCAgICAgICAgIG51bWJlcl9fOwog
ICAgICBnaW50ICAgICAgICAgY29sdW1uXzsKCiAgICAgIEd0a0NlbGwqIGdldF9jZWxsKCk7CiAg
ICAgIEd0a0NlbGwqIGdldF9jZWxsKCkgY29uc3Q7CiAgICAgIEd0a0NMaXN0Um93KiBnZXRfcm93
KCk7CiAgICAgIEd0a0NMaXN0Um93KiBnZXRfcm93KCkgY29uc3Q7CiAgICAgIGdpbnQgZ2V0X3Jv
d19udW0oKTsKICAgICAgZ2ludCBnZXRfcm93X251bSgpIGNvbnN0OwoKICAgICAgQ2VsbChHdGtD
TGlzdCAqLEd0a0NMaXN0Um93ICosZ2ludCk7CiAgICAgIENlbGwoR3RrQ0xpc3QgKixnaW50LGdp
bnQpOwogICAgICBDZWxsKCk7CgogICAgICB2b2lkIHJlZHJhdygpOwoKICAgIHB1YmxpYzoKICAg
ICAgR3RrQ2VsbFR5cGUgZ2V0X3R5cGUoKSBjb25zdDsKICAgICAgR3RrOjpTdHlsZSogZ2V0X3N0
eWxlKCkgY29uc3Q7CiAgICAgIG5zdHJpbmcgZ2V0X3RleHQoKSBjb25zdDsKICAgICAgZ3VpbnQ4
IGdldF9zcGFjaW5nKCkgY29uc3Q7CiAgICAgIEdka19QaXhtYXAgZ2V0X3BpeG1hcCgpIGNvbnN0
OwogICAgICBHZGtfQml0bWFwIGdldF9tYXNrKCkgY29uc3Q7CgogICAgICAgCiAgICAgIHZvaWQg
Y2xlYXIoKTsKCiAgICAgICAKICAgICAgdm9pZCBzZXRfc3R5bGUoR3RrOjpTdHlsZSYpOwoKICAg
ICAgIAogICAgICB2b2lkIHNldF9zcGFjaW5nKGd1aW50OCk7CgogICAgICAgCiAgICAgIHZvaWQg
c2V0X3RleHQobnN0cmluZyk7CgogICAgICAgCiAgICAgIHZvaWQgc2V0X3BpeG1hcChjb25zdCBH
ZGtfUGl4bWFwJiBwaXhtYXAsY29uc3QgR2RrX0JpdG1hcCYgbWFzaz0wKTsKCiAgICAgIHZvaWQg
c2V0X3NoaWZ0KGdpbnQgdmVydGljYWwsZ2ludCBob3Jpem9udGFsKTsKCiAgICAgIHZvaWQgc2Vs
ZWN0KCk7CiAgICAgIHZvaWQgdW5zZWxlY3QoKTsKICAgICAgdm9pZCBtb3ZldG8oZ2Zsb2F0IHJv
d19hbGlnbj0wLjUsZ2Zsb2F0IGNvbF9hbGlnbj0wLjUpOwoKICB9OwoKY2xhc3MgQ2VsbEl0ZXJh
dG9yOiBwcml2YXRlIENlbGwKICB7CiAgICBwcml2YXRlOgogICAgICBmcmllbmQgY2xhc3MgUm93
OwogICAgICBDZWxsSXRlcmF0b3IoR3RrQ0xpc3QqIHBhcmVudCwgR3RrQ0xpc3RSb3cqIHJvdywg
Z2ludCBjb2x1bW4pCiAgICAgICAgOiBDZWxsKHBhcmVudCxyb3csY29sdW1uKQogICAgICAgIHt9
CgogICAgcHVibGljOgogICAgICBDZWxsSXRlcmF0b3IoKQogICAgICAgIDogQ2VsbCgpCiAgICAg
ICAge30KCiAgICAgIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3Jf
Y2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBw
dHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICAgICAgdHlwZWRlZiBDZWxsICB2YWx1ZV90eXBl
OwogICAgICB0eXBlZGVmIENlbGwqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgQ2VsbCYgcmVmZXJl
bmNlOwogICAgICB0eXBlZGVmIENlbGxJdGVyYXRvciBTZWxmOwoKICAgICAgU2VsZiYgIG9wZXJh
dG9yKysoKTsKICAgICAgU2VsZiYgIG9wZXJhdG9yLS0oKTsKICAgICAgU2VsZiAgIG9wZXJhdG9y
KysoaW50KSB7U2VsZiB0PSp0aGlzOyBTZWxmOjpvcGVyYXRvcisrKCk7IHJldHVybiB0O30KICAg
ICAgU2VsZiAgIG9wZXJhdG9yLS0oaW50KSB7U2VsZiB0PSp0aGlzOyBTZWxmOjpvcGVyYXRvci0t
KCk7IHJldHVybiB0O30KCiAgICAgIHJlZmVyZW5jZSBvcGVyYXRvciooKSAgY29uc3Q7CiAgICAg
IHBvaW50ZXIgb3BlcmF0b3IgLT4gKCkgY29uc3Q7CgogICAgICBib29sIG9wZXJhdG9yID09KGNv
bnN0IFNlbGYmIGNlbGwpIGNvbnN0IHtyZXR1cm4gY29sdW1uXz09Y2VsbC5jb2x1bW5fO30KICAg
ICAgYm9vbCBvcGVyYXRvciAhPShjb25zdCBTZWxmJiBjZWxsKSBjb25zdCB7cmV0dXJuIGNvbHVt
bl8hPWNlbGwuY29sdW1uXzt9CiAgfTsKCiAKCiAKY2xhc3MgQ29sdW1uVmVjdG9yOwpjbGFzcyBD
b2x1bW5JdGVyYXRvcjsKY2xhc3MgQ29sdW1uCiAgewogICAgcHJvdGVjdGVkOgogICAgICBmcmll
bmQgY2xhc3MgQ29sdW1uVmVjdG9yOwogICAgICBHdGtDTGlzdCogcGFyZW50XzsKICAgICAgZ2lu
dCBjb2x1bW5fOwoKICAgICAgQ29sdW1uKEd0a0NMaXN0KiBwYXJlbnQsZ2ludCBudW1iZXIpOwog
ICAgICBDb2x1bW4oKTsKCiAgICBwdWJsaWM6CgogICAgICB2b2lkIHNldF9hY3RpdmUoKTsKICAg
ICAgdm9pZCBzZXRfcGFzc2l2ZSgpOwoKICAgICAgdm9pZCBzZXRfdGl0bGUoY29uc3Qgc3RyaW5n
JiB0aXRsZSk7CiAgICAgIHN0cmluZyBnZXRfdGl0bGUoKTsKCiAgICAgIHZvaWQgc2V0X3dpZGdl
dChHdGs6OldpZGdldCogd2lkZ2V0PTApOwogICAgICB2b2lkIHNldF93aWRnZXQoR3RrOjpXaWRn
ZXQmIHdpZGdldCk7CiAgICAgIEd0azo6V2lkZ2V0KiBnZXRfd2lkZ2V0KCk7CiAgICAgIHZvaWQg
c2V0X2p1c3RpZmljYXRpb24oR3RrSnVzdGlmaWNhdGlvbik7CiAgICAgIHZvaWQgc2V0X3Zpc2li
bGl0eShib29sKTsKICAgICAgdm9pZCBzZXRfcmVzaXphYmxlKGJvb2wpOwogICAgICB2b2lkIHNl
dF9hdXRvX3Jlc2l6ZShib29sKTsKICAgICAgZ2ludCBnZXRfb3B0aW1hbF93aWR0aCgpOwoKICAg
ICAgdm9pZCBzZXRfd2lkdGgoZ2ludCk7CiAgICAgIHZvaWQgc2V0X21pbl93aWR0aChnaW50KTsK
ICAgICAgdm9pZCBzZXRfbWF4X3dpZHRoKGdpbnQpOwogICAgICB2b2lkIG1vdmV0byhnZmxvYXQg
cm93X2FsaWduPTAuNSxnZmxvYXQgY29sX2FsaWduPTAuNSk7CiAgfTsKCmNsYXNzIFNlbGVjdGlv
bkxpc3Q7CmNsYXNzIFJvd0xpc3Q7CmNsYXNzIFJvd0l0ZXJhdG9yOwpjbGFzcyBSb3cKICB7CiAg
ICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgQ2VsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHZhbHVlX3R5cGUgJiAgICAgICAgICAgICAgICAg
ICAgICAgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUgJiAgICAgICAg
ICAgICAgICAgY29uc3RfcmVmZXJlbmNlOwoKICAgICAgdHlwZWRlZiBDZWxsSXRlcmF0b3IgICAg
ICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIEdfTGlzdF9Db25zdEl0
ZXJhdG9yPGl0ZXJhdG9yPiAgICAgY29uc3RfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgR19MaXN0
X1JldmVyc2VJdGVyYXRvcjxpdGVyYXRvcj4gICByZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBl
ZGVmIEdfTGlzdF9Db25zdEl0ZXJhdG9yPHJldmVyc2VfaXRlcmF0b3I+ICAgY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvcjsKCiAgICAgIHR5cGVkZWYgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgc2l6ZV90ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3R5cGU7CgogICAgcHJvdGVjdGVkOgogICAgICBmcmllbmQgY2xh
c3MgU2VsZWN0aW9uTGlzdDsKICAgICAgZnJpZW5kIGNsYXNzIFJvd0xpc3Q7CgogICAgICBHdGtD
TGlzdCogICAgcGFyZW50XzsKICAgICAgR3RrQ0xpc3RSb3cqIHJvd19fOyAgICAgCiAgICAgIGdp
bnQgICAgICAgICBudW1iZXJfXzsgIAoKICAgICAgR3RrQ0xpc3RSb3cqIGdldF9yb3coKTsKICAg
ICAgR3RrQ0xpc3RSb3cqIGdldF9yb3coKSBjb25zdDsKCiAgICAgIFJvdyhHdGtDTGlzdCosR3Rr
Q0xpc3RSb3cqKTsKICAgICAgUm93KEd0a0NMaXN0KixnaW50KTsKICAgICAgUm93KCk7CgogICAg
ICBpdGVyYXRvciBiZWdpbl8oKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKHBhcmVu
dF8sZ2V0X3JvdygpLDApOyB9CiAgICAgIGl0ZXJhdG9yIGVuZF8oKSBjb25zdAogICAgICAgIHsg
cmV0dXJuIGl0ZXJhdG9yKHBhcmVudF8sZ2V0X3JvdygpLHBhcmVudF8tPmNvbHVtbnMpOyB9Cgog
ICAgICBSb3cmIG9wZXJhdG9yID0gKGNvbnN0IFJvdyYgcikKICAgICAgICB7IHBhcmVudF89ci5w
YXJlbnRfOyByb3dfXz1yLnJvd19fOyBudW1iZXJfXz1yLm51bWJlcl9fOyByZXR1cm4gKnRoaXM7
IH0KCiAgICBwdWJsaWM6CiAgICAgIFJvdyhjb25zdCBSb3cmIHIpCiAgICAgICAgOiBwYXJlbnRf
KHIucGFyZW50XyksIHJvd19fKHIucm93X18pLCBudW1iZXJfXyhyLm51bWJlcl9fKQogICAgICAg
IHt9CgogICAgICB+Um93KCkge30KCiAgICAgIGdpbnQgZ2V0X3Jvd19udW0oKTsKICAgICAgZ2lu
dCBnZXRfcm93X251bSgpIGNvbnN0OwoKICAgICAgR3RrVmlzaWJpbGl0eSBpc192aXNpYmxlKCk7
CgogICAgICBHdGs6OlN0eWxlKiBnZXRfc3R5bGUoKSBjb25zdDsKICAgICAgZ3BvaW50ZXIgZ2V0
X2RhdGEoKSBjb25zdDsKICAgICAgYm9vbCBnZXRfc2VsZWN0YWJsZSgpIGNvbnN0OwogICAgICB2
b2lkIG1vdmV0byhnZmxvYXQgcm93X2FsaWduPTAuNSxnZmxvYXQgY29sX2FsaWduPTAuNSk7Cgog
ICAgICB2b2lkIHNldF9zdHlsZShHdGs6OlN0eWxlJik7CiAgICAgIHZvaWQgc2V0X2RhdGEoZ3Bv
aW50ZXIpOwogICAgICB2b2lkIHNldF9kYXRhKGdwb2ludGVyLEd0a0Rlc3Ryb3lOb3RpZnkpOwog
ICAgICB2b2lkIHNldF9zZWxlY3RhYmxlKGJvb2wgc2VsZWN0YWJsZSk7CiAgICAgIHZvaWQgc2V0
X2ZvcmVncm91bmQoY29uc3QgR2RrX0NvbG9yJiBjb2xvcik7CiAgICAgIHZvaWQgc2V0X2JhY2tn
cm91bmQoY29uc3QgR2RrX0NvbG9yJiBjb2xvcik7CgogICAgICB2b2lkIGZvY3VzKCk7CiAgICAg
IHZvaWQgc2VsZWN0KGdpbnQgY29sdW1uPS0xKTsKICAgICAgdm9pZCB1bnNlbGVjdChnaW50IGNv
bHVtbj0tMSk7CgogICAgICAgCiAgICAgIFJvdyYgb3BlcmF0b3IgKigpICAgICAgICAgICAgICB7
IHJldHVybiAqdGhpczsgfQogICAgICBjb25zdCBSb3cmIG9wZXJhdG9yICooKSBjb25zdCAgeyBy
ZXR1cm4gKnRoaXM7IH0KICAgICAgUm93KiBvcGVyYXRvciAtPigpICAgICAgICAgICAgIHsgcmV0
dXJuIHRoaXM7IH0KICAgICAgY29uc3QgUm93KiBvcGVyYXRvciAtPigpIGNvbnN0IHsgcmV0dXJu
IHRoaXM7IH0KCgogICAgICAgCgogICAgICBpdGVyYXRvciBiZWdpbigpCiAgICAgICAge3JldHVy
biBiZWdpbl8oKTt9CiAgICAgIGl0ZXJhdG9yIGVuZCgpCiAgICAgICAge3JldHVybiBlbmRfKCk7
fQoKICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGNv
bnN0X2l0ZXJhdG9yKGJlZ2luXygpKTsgfQogICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25z
dAogICAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKGVuZF8oKSk7IH0KCiAgICAgIHJldmVy
c2VfaXRlcmF0b3IgcmJlZ2luKCkKICAgICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVu
ZF8oKSk7IH0KICAgICAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkKICAgICAgICB7IHJldHVybiBy
ZXZlcnNlX2l0ZXJhdG9yKGJlZ2luXygpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRv
ciByYmVnaW4oKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Io
cmV2ZXJzZV9pdGVyYXRvcihlbmRfKCkpKTsgfQogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
IHJlbmQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IocmV2
ZXJzZV9pdGVyYXRvcihiZWdpbl8oKSkpOyB9CgogICAgICBzaXplX3R5cGUgc2l6ZSh2b2lkKSBj
b25zdAogICAgICAgIHsgcmV0dXJuIHNpemVfdHlwZShwYXJlbnRfLT5jb2x1bW5zKTsgfQogICAg
ICBzaXplX3R5cGUgbWF4X3NpemUodm9pZCkKICAgICAgICB7IHJldHVybiBzaXplX3R5cGUocGFy
ZW50Xy0+Y29sdW1ucyk7IH0KICAgICAgYm9vbCBlbXB0eSh2b2lkKQogICAgICAgIHsgcmV0dXJu
IGZhbHNlOyB9CgogICAgICB2YWx1ZV90eXBlIG9wZXJhdG9yW10oc2l6ZV90eXBlIGwpIGNvbnN0
CiAgICAgICAgeyByZXR1cm4gQ2VsbChwYXJlbnRfLCBnZXRfcm93KCksIGwpOyB9CgogIH07CgoK
IApjbGFzcyBDb2x1bW5JdGVyYXRvcjogcHJpdmF0ZSBDb2x1bW4KICB7CiAgICBwcml2YXRlOgog
ICAgICBmcmllbmQgY2xhc3MgQ29sdW1uVmVjdG9yOwogICAgICBDb2x1bW5JdGVyYXRvcihHdGtD
TGlzdCogcGFyZW50LGdpbnQgbnVtYmVyKQogICAgICAgIDogQ29sdW1uKHBhcmVudCxudW1iZXIp
CiAgICAgICAge30KCiAgICBwdWJsaWM6CiAgICAgIENvbHVtbkl0ZXJhdG9yKCkKICAgICAgICA6
IENvbHVtbigpCiAgICAgICAge30KCiAgICAgIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRv
cl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsK
ICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICAgICAgdHlwZWRlZiBD
b2x1bW4gIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgQ29sdW1uKiBwb2ludGVyOwogICAgICB0
eXBlZGVmIENvbHVtbiYgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIENvbHVtbkl0ZXJhdG9yIFNl
bGY7CgogICAgICBTZWxmJiAgb3BlcmF0b3IrKygpOwogICAgICBTZWxmJiAgb3BlcmF0b3ItLSgp
OwogICAgICBTZWxmICAgb3BlcmF0b3IrKyhpbnQpIHtTZWxmIHQ9KnRoaXM7IFNlbGY6Om9wZXJh
dG9yKysoKTsgcmV0dXJuIHQ7fQogICAgICBTZWxmICAgb3BlcmF0b3ItLShpbnQpIHtTZWxmIHQ9
KnRoaXM7IFNlbGY6Om9wZXJhdG9yLS0oKTsgcmV0dXJuIHQ7fQoKICAgICAgcmVmZXJlbmNlIG9w
ZXJhdG9yKigpIGNvbnN0OwogICAgICBwb2ludGVyIG9wZXJhdG9yIC0+ICgpIGNvbnN0OwoKICAg
ICAgYm9vbCBvcGVyYXRvciA9PShjb25zdCBTZWxmJiBjb2wpIGNvbnN0IHtyZXR1cm4gY29sdW1u
Xz09Y29sLmNvbHVtbl87fQogICAgICBib29sIG9wZXJhdG9yICE9KGNvbnN0IFNlbGYmIGNvbCkg
Y29uc3Qge3JldHVybiBjb2x1bW5fIT1jb2wuY29sdW1uXzt9CgogIH07CgpjbGFzcyBSb3dJdGVy
YXRvcjogcHJvdGVjdGVkIFJvdwogIHsKICAgIHByb3RlY3RlZDoKICAgICAgZnJpZW5kIGNsYXNz
IFJvd0xpc3Q7CiAgICAgIEdMaXN0KiBub2RlXzsKCiAgICAgIFJvd0l0ZXJhdG9yKEd0a0NMaXN0
KixHTGlzdCopOwogICAgICBSb3dJdGVyYXRvcihHdGtDTGlzdCosZ2ludCk7CiAgICBwdWJsaWM6
CgogICAgICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVn
b3J5OwogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlm
Zl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgICAgIHR5cGVkZWYgUm93ICB2YWx1ZV90eXBlOwogICAg
ICB0eXBlZGVmIFJvdyogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBSb3cmIHJlZmVyZW5jZTsKCiAg
ICAgIHR5cGVkZWYgUm93SXRlcmF0b3IgU2VsZjsKCiAgICAgIFJvd0l0ZXJhdG9yKCk7CiAgICAg
IFJvd0l0ZXJhdG9yKGNvbnN0IFNlbGYmIHMpCiAgICAgICAgOiBSb3cocyksIG5vZGVfKHMubm9k
ZV8pIHt9CgogICAgICBTZWxmJiBvcGVyYXRvcj0gKGNvbnN0IFNlbGYmIHMpCiAgICAgICAgeyBS
b3c6Om9wZXJhdG9yPShzKTsgbm9kZV89cy5ub2RlXzsgcmV0dXJuICp0aGlzOyB9CgogICAgICBT
ZWxmJiAgb3BlcmF0b3IrKygpOwogICAgICBTZWxmJiAgb3BlcmF0b3ItLSgpOwogICAgICBTZWxm
ICAgb3BlcmF0b3IrKyhpbnQpIHtTZWxmIHQ9KnRoaXM7IFNlbGY6Om9wZXJhdG9yKysoKTsgcmV0
dXJuIHQ7fQogICAgICBTZWxmICAgb3BlcmF0b3ItLShpbnQpIHtTZWxmIHQ9KnRoaXM7IFNlbGY6
Om9wZXJhdG9yLS0oKTsgcmV0dXJuIHQ7fQoKICAgICAgcmVmZXJlbmNlIG9wZXJhdG9yKigpICBj
b25zdDsKICAgICAgcG9pbnRlciBvcGVyYXRvciAtPiAoKSBjb25zdDsKCiAgICAgIGJvb2wgb3Bl
cmF0b3IgPT0oY29uc3QgU2VsZiYgcm93KSBjb25zdCB7cmV0dXJuIG5vZGVfPT1yb3cubm9kZV87
fQogICAgICBib29sIG9wZXJhdG9yICE9KGNvbnN0IFNlbGYmIHJvdykgY29uc3Qge3JldHVybiBu
b2RlXyE9cm93Lm5vZGVfO30KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIEdMaXN0KiBnZXRfbm9kZSgp
IGNvbnN0OwogICAgICBHdGtDTGlzdFJvdyogZ2V0X3JvdygpIGNvbnN0OwogICAgICBnaW50IGdl
dF9yb3dfbnVtKCkgY29uc3Q7CiAgfTsKCmNsYXNzIFNlbGVjdGlvbkl0ZXJhdG9yOiBwcm90ZWN0
ZWQgUm93CiAgewogICAgcHJpdmF0ZToKICAgICAgZnJpZW5kIGNsYXNzIFNlbGVjdGlvbkxpc3Q7
CiAgICAgIEdMaXN0KiBub2RlXzsKCiAgICAgIFNlbGVjdGlvbkl0ZXJhdG9yKEd0a0NMaXN0KiBw
YXJlbnQsR0xpc3QqIG5vZGUpCiAgICAgICAgOiBSb3cocGFyZW50LDApLCBub2RlXyhub2RlKQog
ICAgICAgIHt9CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0
b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7
CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgICAgIHR5cGVkZWYg
Um93ICB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIFJvdyogcG9pbnRlcjsKICAgICAgdHlwZWRl
ZiBSb3cmIHJlZmVyZW5jZTsKCiAgICAgIHR5cGVkZWYgU2VsZWN0aW9uSXRlcmF0b3IgU2VsZjsK
CiAgICAgIFNlbGVjdGlvbkl0ZXJhdG9yKCkKICAgICAgICB7fQoKICAgICAgU2VsZWN0aW9uSXRl
cmF0b3IoY29uc3QgU2VsZiYgcykKICAgICAgICA6IFJvdyhzKSwgbm9kZV8ocy5ub2RlXykge30K
CiAgICAgIFNlbGYmIG9wZXJhdG9yPSAoY29uc3QgU2VsZiYgcykKICAgICAgICB7IFJvdzo6b3Bl
cmF0b3I9KHMpOyBub2RlXz1zLm5vZGVfOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIHJlZmVyZW5j
ZSBvcGVyYXRvciooKSAgY29uc3Q7CiAgICAgIHBvaW50ZXIgb3BlcmF0b3IgLT4gKCkgY29uc3Q7
CgogICAgICBTZWxmJiAgb3BlcmF0b3IrKygpOwogICAgICBTZWxmJiAgb3BlcmF0b3ItLSgpOwog
ICAgICBTZWxmICAgb3BlcmF0b3IrKyhpbnQpIHtTZWxmIHQ9KnRoaXM7IFNlbGY6Om9wZXJhdG9y
KysoKTsgcmV0dXJuIHQ7fQogICAgICBTZWxmICAgb3BlcmF0b3ItLShpbnQpIHtTZWxmIHQ9KnRo
aXM7IFNlbGY6Om9wZXJhdG9yLS0oKTsgcmV0dXJuIHQ7fQoKICAgICAgYm9vbCBvcGVyYXRvciA9
PShjb25zdCBTZWxmJiByb3cpIGNvbnN0IHtyZXR1cm4gbm9kZV89PXJvdy5ub2RlXzt9CiAgICAg
IGJvb2wgb3BlcmF0b3IgIT0oY29uc3QgU2VsZiYgcm93KSBjb25zdCB7cmV0dXJuIG5vZGVfIT1y
b3cubm9kZV87fQogIH07CgogCgpjbGFzcyBDb2x1bW5WZWN0b3IKICB7CiAgICBwdWJsaWM6CiAg
ICAgIHR5cGVkZWYgQ29sdW1uICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBl
OwogICAgICB0eXBlZGVmIHZhbHVlX3R5cGUgJiAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJl
bmNlOwogICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUgJiAgICAgICAgICAgICAgICAgY29u
c3RfcmVmZXJlbmNlOwoKICAgICAgdHlwZWRlZiBDb2x1bW5JdGVyYXRvciAgICAgICAgICAgICAg
ICAgICAgIGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIEdfTGlzdF9Db25zdEl0ZXJhdG9yPGl0ZXJh
dG9yPiAgICAgY29uc3RfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgR19MaXN0X1JldmVyc2VJdGVy
YXRvcjxpdGVyYXRvcj4gICByZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIEdfTGlzdF9D
b25zdEl0ZXJhdG9yPHJldmVyc2VfaXRlcmF0b3I+ICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsK
CiAgICAgIHR5cGVkZWYgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJl
bmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgZnJpZW5kIENMaXN0OwogICAgICBHdGs6
OkNMaXN0ICpwYXJlbnRfOyAgCgogICAgICBpdGVyYXRvciBiZWdpbl8oKSBjb25zdDsKICAgICAg
aXRlcmF0b3IgZW5kXygpIGNvbnN0OwoKICAgIHB1YmxpYzoKCiAgICAgIGl0ZXJhdG9yIGJlZ2lu
KCkKICAgICAgICB7cmV0dXJuIGJlZ2luXygpO30KICAgICAgaXRlcmF0b3IgZW5kKCkKICAgICAg
ICB7cmV0dXJuIGVuZF8oKTt9CgogICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0CiAg
ICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoYmVnaW5fKCkpOyB9CiAgICAgIGNvbnN0X2l0
ZXJhdG9yIGVuZCgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoZW5kXygp
KTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKQogICAgICAgIHsgcmV0dXJuIHJl
dmVyc2VfaXRlcmF0b3IoZW5kXygpKTsgfQogICAgICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKQog
ICAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW5fKCkpOyB9CgogICAgICBjb25z
dF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gY29uc3Rf
cmV2ZXJzZV9pdGVyYXRvcihyZXZlcnNlX2l0ZXJhdG9yKGVuZF8oKSkpOyB9CiAgICAgIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gY29uc3RfcmV2
ZXJzZV9pdGVyYXRvcihyZXZlcnNlX2l0ZXJhdG9yKGJlZ2luXygpKSk7IH0KCiAgICAgIHZhbHVl
X3R5cGUgZnJvbnQoKSBjb25zdCAgICAgeyByZXR1cm4gKmJlZ2luKCk7IH0KICAgICAgdmFsdWVf
dHlwZSBiYWNrKCkgY29uc3QgICAgICB7IHJldHVybiAqKC0tZW5kKCkpOyB9CgogICAgICB2YWx1
ZV90eXBlIG9wZXJhdG9yW10oc2l6ZV90eXBlIGwpIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlIHNp
emUodm9pZCkgY29uc3Q7CiAgICAgIHNpemVfdHlwZSBtYXhfc2l6ZSh2b2lkKSBjb25zdDsKICAg
ICAgYm9vbCBlbXB0eSh2b2lkKQogICAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CgogICAgICAgCiAg
ICAgICAKCiAgfTsKCmNsYXNzIFNlbGVjdGlvbkxpc3QKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5
cGVkZWYgUm93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogICAg
ICB0eXBlZGVmIHZhbHVlX3R5cGUgJiAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwog
ICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUgJiAgICAgICAgICAgICAgICAgY29uc3RfcmVm
ZXJlbmNlOwoKICAgICAgdHlwZWRlZiBTZWxlY3Rpb25JdGVyYXRvciAgICAgICAgICAgICAgICAg
IGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIEdfTGlzdF9Db25zdEl0ZXJhdG9yPGl0ZXJhdG9yPiAg
ICAgY29uc3RfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgR19MaXN0X1JldmVyc2VJdGVyYXRvcjxp
dGVyYXRvcj4gICByZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIEdfTGlzdF9Db25zdEl0
ZXJhdG9yPHJldmVyc2VfaXRlcmF0b3I+ICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICAg
IHR5cGVkZWYgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5
cGU7CiAgICAgIHR5cGVkZWYgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgZnJpZW5kIENMaXN0OwogICAgICBHdGs6OkNMaXN0
ICpwYXJlbnRfOyAgCgogICAgICBpdGVyYXRvciBiZWdpbl8oKSBjb25zdDsKICAgICAgaXRlcmF0
b3IgZW5kXygpIGNvbnN0OwoKICAgICAgR0xpc3QqJiBnbGlzdCgpIGNvbnN0OwoKICAgIHB1Ymxp
YzoKICAgICAgaXRlcmF0b3IgYmVnaW4oKQogICAgICAgIHtyZXR1cm4gYmVnaW5fKCk7fQogICAg
ICBpdGVyYXRvciBlbmQoKQogICAgICAgIHtyZXR1cm4gZW5kXygpO30KCiAgICAgIGNvbnN0X2l0
ZXJhdG9yIGJlZ2luKCkgY29uc3QKICAgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihiZWdp
bl8oKSk7IH0KICAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKICAgICAgICB7IHJldHVy
biBjb25zdF9pdGVyYXRvcihlbmRfKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdp
bigpCiAgICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmRfKCkpOyB9CiAgICAgIHJl
dmVyc2VfaXRlcmF0b3IgcmVuZCgpCiAgICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihi
ZWdpbl8oKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QK
ICAgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHJldmVyc2VfaXRlcmF0b3Io
ZW5kXygpKSk7IH0KICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QKICAg
ICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHJldmVyc2VfaXRlcmF0b3IoYmVn
aW5fKCkpKTsgfQoKICAgICAgdmFsdWVfdHlwZSBmcm9udCgpIGNvbnN0ICAgICB7IHJldHVybiAq
YmVnaW4oKTsgfQogICAgICB2YWx1ZV90eXBlIGJhY2soKSBjb25zdCAgICAgIHsgcmV0dXJuICoo
LS1lbmQoKSk7IH0KCiAgICAgICAKICAgICAgdmFsdWVfdHlwZSBvcGVyYXRvcltdKHNpemVfdHlw
ZSBsKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZSBzaXplKHZvaWQpIGNvbnN0OwogICAgICBzaXpl
X3R5cGUgbWF4X3NpemUodm9pZCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQogICAg
ICBib29sIGVtcHR5KHZvaWQpIHsgcmV0dXJuIGdsaXN0KCkgPT0gMDsgfQoKICAgICAgdm9pZCBh
bGwoKTsKICAgICAgdm9pZCBjbGVhcigpOwogICAgICB2b2lkIHVuZG8oKTsKCiAgICAgICAKICB9
OwoKY2xhc3MgUm93TGlzdAogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBSb3cgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdmFsdWVf
dHlwZSAmICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgY29u
c3QgdmFsdWVfdHlwZSAmICAgICAgICAgICAgICAgICBjb25zdF9yZWZlcmVuY2U7CgogICAgICB0
eXBlZGVmIFJvd0l0ZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3I7CiAgICAg
IHR5cGVkZWYgR19MaXN0X0NvbnN0SXRlcmF0b3I8aXRlcmF0b3I+ICAgICBjb25zdF9pdGVyYXRv
cjsKICAgICAgdHlwZWRlZiBHX0xpc3RfUmV2ZXJzZUl0ZXJhdG9yPGl0ZXJhdG9yPiAgIHJldmVy
c2VfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgR19MaXN0X0NvbnN0SXRlcmF0b3I8cmV2ZXJzZV9p
dGVyYXRvcj4gICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwoKICAgICAgdHlwZWRlZiBzaXplX3Qg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRl
ZiBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZTsKCiAgICBwcml2
YXRlOgogICAgICBmcmllbmQgQ0xpc3Q7CiAgICAgIEd0azo6Q0xpc3QgKiBwYXJlbnRfOyAgCgog
ICAgICBpdGVyYXRvciBiZWdpbl8oKSBjb25zdDsKICAgICAgaXRlcmF0b3IgZW5kXygpIGNvbnN0
OwoKICAgICAgR0xpc3QqJiBnbGlzdCgpIGNvbnN0OwoKICAgIHB1YmxpYzoKICAgICAgaXRlcmF0
b3IgYmVnaW4oKQogICAgICAgIHtyZXR1cm4gYmVnaW5fKCk7fQogICAgICBpdGVyYXRvciBlbmQo
KQogICAgICAgIHtyZXR1cm4gZW5kXygpO30KCiAgICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QKICAgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihiZWdpbl8oKSk7IH0KICAgICAg
Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKICAgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRv
cihlbmRfKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpCiAgICAgICAgeyBy
ZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmRfKCkpOyB9CiAgICAgIHJldmVyc2VfaXRlcmF0b3Ig
cmVuZCgpCiAgICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbl8oKSk7IH0KCiAg
ICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgICAgICB7IHJldHVy
biBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHJldmVyc2VfaXRlcmF0b3IoZW5kXygpKSk7IH0KICAg
ICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QKICAgICAgICB7IHJldHVybiBj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yKHJldmVyc2VfaXRlcmF0b3IoYmVnaW5fKCkpKTsgfQoKICAg
ICAgdmFsdWVfdHlwZSBmcm9udCgpIGNvbnN0ICAgICB7IHJldHVybiAqYmVnaW4oKTsgfQogICAg
ICB2YWx1ZV90eXBlIGJhY2soKSBjb25zdCAgICAgIHsgcmV0dXJuICooLS1lbmQoKSk7IH0KCiAg
ICAgICAKICAgICAgdmFsdWVfdHlwZSBvcGVyYXRvcltdKHNpemVfdHlwZSBsKSBjb25zdDsKCiAg
ICAgIHNpemVfdHlwZSBzaXplKHZvaWQpIGNvbnN0OwogICAgICBzaXplX3R5cGUgbWF4X3NpemUo
dm9pZCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQogICAgICBib29sIGVtcHR5KHZv
aWQpIHsgcmV0dXJuIGdsaXN0KCkgPT0gMDsgfQoKICAgICAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJh
dG9yIHBvc2l0aW9uLCBjb25zdCBHdGs6OlNBcnJheSYgZSk7CiAgICAgIGl0ZXJhdG9yIGluc2Vy
dChjb25zdF9yZWZlcmVuY2UgcG9zaXRpb24sIGNvbnN0IEd0azo6U0FycmF5JiBlKTsKCiAgICAg
IHZvaWQgcHVzaF9mcm9udChjb25zdCBHdGs6OlNBcnJheSYgZSk7CiAgICAgIHZvaWQgcHVzaF9i
YWNrKGNvbnN0IEd0azo6U0FycmF5JiBlKTsKICAgICAgdm9pZCBwb3BfZnJvbnQoKSAgICAgICAg
ICAgICAgICAgIHsgZXJhc2UoYmVnaW4oKSk7IH0KICAgICAgdm9pZCBwb3BfYmFjaygpICAgICAg
ICAgICAgICAgICAgIHsgZXJhc2UoLS1lbmQoKSk7IH0KCiAgICAgIHZvaWQgY2xlYXIoKTsKCiAg
ICAgIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yKTsKICAgICAgdm9pZCBlcmFzZShpdGVyYXRvciBz
dGFydCwgaXRlcmF0b3Igc3RvcCk7CiAgICAgIHZvaWQgcmVtb3ZlKGNvbnN0X3JlZmVyZW5jZSk7
CgogICAgICB2b2lkIHN3YXAoaXRlcmF0b3IsIGl0ZXJhdG9yKTsKICAgICAgdm9pZCBtb3ZlKGl0
ZXJhdG9yLCBpdGVyYXRvcik7CiAgICAgIHZvaWQgc3dhcChjb25zdF9yZWZlcmVuY2UsIGNvbnN0
X3JlZmVyZW5jZSk7CiAgICAgIHZvaWQgbW92ZShjb25zdF9yZWZlcmVuY2UsIGNvbnN0X3JlZmVy
ZW5jZSk7CgogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICBpdGVyYXRvciBmaW5kX2RhdGEo
Z3BvaW50ZXIpOwogIH07Cn0KCgpjbGFzcyBBZGp1c3RtZW50OwpjbGFzcyBTdHlsZTsKCiAKY2xh
c3MgQ0xpc3QgOiBwdWJsaWMgQ29udGFpbmVyCnsKCnB1YmxpYzoKICB0eXBlZGVmIENMaXN0ICAg
ICAgICAgIENwcE9iamVjdFR5cGU7CiAgdHlwZWRlZiBDTGlzdF9DbGFzcyAgICBDcHBDbGFzc1R5
cGU7CiAgdHlwZWRlZiBHdGtDTGlzdCAgICAgICAgICAgQmFzZU9iamVjdFR5cGU7CiAgdHlwZWRl
ZiBHdGtDTGlzdENsYXNzICAgICAgQmFzZUNsYXNzVHlwZTsKCnByaXZhdGU6CiAgZnJpZW5kIGNs
YXNzIENMaXN0X0NsYXNzOwogIHN0YXRpYyBDcHBDbGFzc1R5cGUgY2xpc3RfY2xhc3M7CgogIENM
aXN0KGNvbnN0IENMaXN0Jik7CiAgQ0xpc3QmIG9wZXJhdG9yPShjb25zdCBDTGlzdCYpOyAgCgpw
cm90ZWN0ZWQ6CiAgdm9pZCAgIGluaXRpYWxpemVfY2xhc3MoKTsKICBleHBsaWNpdCBDTGlzdChH
dGtDTGlzdCAqY2FzdGl0ZW0pOwoKcHVibGljOgogIHN0YXRpYyBHdGtUeXBlIGdldF90eXBlKCk7
CiAgR3RrQ0xpc3QqIGd0a29iaigpICAgICAgICAgICAgIHsgcmV0dXJuIChHdGtDTGlzdCopKGd0
a29iamVjdCk7IH0KICBjb25zdCBHdGtDTGlzdCogZ3Rrb2JqKCkgY29uc3QgeyByZXR1cm4gKEd0
a0NMaXN0KikoZ3Rrb2JqZWN0KTsgfQogIHN0YXRpYyBib29sIGlzQShPYmplY3QgKmNoZWNrY2Fz
dCk7CgogICAKICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc2lnbmFsX25hbWVzW107CgogIHZp
cnR1YWwgfkNMaXN0KCk7Cgpwcml2YXRlOgoKcHVibGljOgogICAKICB0eXBlZGVmIEd0azo6Q0xp
c3RfSGVscGVyczo6RnJlZXplIEZyZWV6ZTsKCiAgdHlwZWRlZiBHdGs6OkNMaXN0X0hlbHBlcnM6
OkNlbGwgQ2VsbDsKICB0eXBlZGVmIEd0azo6Q0xpc3RfSGVscGVyczo6Q2VsbEl0ZXJhdG9yIENl
bGxJdGVyYXRvcjsKCiAgdHlwZWRlZiBHdGs6OkNMaXN0X0hlbHBlcnM6OkNvbHVtbiBDb2x1bW47
CiAgdHlwZWRlZiBHdGs6OkNMaXN0X0hlbHBlcnM6OkNvbHVtblZlY3RvciBDb2x1bW5WZWN0b3I7
CgogIHR5cGVkZWYgR3RrOjpDTGlzdF9IZWxwZXJzOjpSb3cgUm93OwogIHR5cGVkZWYgR3RrOjpD
TGlzdF9IZWxwZXJzOjpSb3dJdGVyYXRvciBSb3dJdGVyYXRvcjsKICB0eXBlZGVmIEd0azo6Q0xp
c3RfSGVscGVyczo6Um93TGlzdCBSb3dMaXN0OwoKICB0eXBlZGVmIEd0azo6Q0xpc3RfSGVscGVy
czo6U2VsZWN0aW9uSXRlcmF0b3IgIFNlbGVjdGlvbkl0ZXJhdG9yIDsKICB0eXBlZGVmIEd0azo6
Q0xpc3RfSGVscGVyczo6U2VsZWN0aW9uTGlzdCBTZWxlY3Rpb25MaXN0OwoKCiAgQ0xpc3QoaW50
IGNvbHVtbnMsIGNvbnN0IGdjaGFyICogdGl0bGVzW10gPSAwKTsKICBDTGlzdChjb25zdCBTQXJy
YXkgJnRpdGxlcyk7CgoKIAoKCiAgIAoKCiAgdm9pZCBzZXRfaGFkanVzdG1lbnQoR3RrOjpBZGp1
c3RtZW50KiBhZGp1c3RtZW50PTApOwoKCiAgdm9pZCBzZXRfdmFkanVzdG1lbnQoR3RrOjpBZGp1
c3RtZW50KiBhZGp1c3RtZW50PTApOwoKCiAgdm9pZCBzZXRfaGFkanVzdG1lbnQoR3RrOjpBZGp1
c3RtZW50JiBhZGp1c3RtZW50KTsKCgogIHZvaWQgc2V0X3ZhZGp1c3RtZW50KEd0azo6QWRqdXN0
bWVudCYgYWRqdXN0bWVudCk7CgogICAKICBHdGs6OkFkanVzdG1lbnQqIGdldF9oYWRqdXN0bWVu
dCgpIGNvbnN0OwoKICBHdGs6OkFkanVzdG1lbnQqIGdldF92YWRqdXN0bWVudCgpIGNvbnN0OwoK
CgogCgogICAKICAgCiAgIAogICAKICAgCiAgIAoKCiAgdm9pZCBzZXRfc2hhZG93X3R5cGUoR3Rr
U2hhZG93VHlwZSB0eXBlKTsKCiAgIAogICAKICAgCiAgIAogICAKCgogIHZvaWQgc2V0X3NlbGVj
dGlvbl9tb2RlKEd0a1NlbGVjdGlvbk1vZGUgbW9kZSk7CgoKICBHdGtTZWxlY3Rpb25Nb2RlIGdl
dF9zZWxlY3Rpb25fbW9kZSgpIGNvbnN0OwoKICAgCgoKICB2b2lkIHNldF9yZW9yZGVyYWJsZShi
b29sIHJlb3JkZXJhYmxlKTsKCgogIHZvaWQgc2V0X3VzZV9kcmFnX2ljb25zKGJvb2wgdXNlX2lj
b25zKTsKCgogIHZvaWQgc2V0X2J1dHRvbl9hY3Rpb25zKGd1aW50IGJ1dHRvbixndWludDggYnV0
dG9uX2FjdGlvbnMpOwoKICAgCiAgIAogICAKICAgCgoKICB2b2lkIGZyZWV6ZSgpOwoKICAgCgoK
ICB2b2lkIHRoYXcoKTsKCiAgIAoKCiAgdm9pZCBjb2x1bW5fdGl0bGVzX3Nob3coKTsKCiAgIAoK
CiAgdm9pZCBjb2x1bW5fdGl0bGVzX2hpZGUoKTsKCiAgIAogICAKCgogIHZvaWQgY29sdW1uX3Rp
dGxlc19hY3RpdmUoKTsKCiAgIAogICAKICAgCgoKICB2b2lkIGNvbHVtbl90aXRsZXNfcGFzc2l2
ZSgpOwoKCgogIGdpbnQgY29sdW1uc19hdXRvc2l6ZSgpOwoKICAgCiAgIAoKCiAgdm9pZCBzZXRf
cm93X2hlaWdodChndWludCBoZWlnaHQpOwoKCiAgZ2ludCBnZXRfcm93X2hlaWdodCgpIGNvbnN0
OwoKCgogCgogICAKCgogIHZvaWQgc2V0X2NvbXBhcmVfZnVuYyhHdGtDTGlzdENvbXBhcmVGdW5j
IGNtcF9mdW5jKTsKCiAgIAoKCiAgdm9pZCBzZXRfc29ydF9jb2x1bW4oZ2ludCBjb2x1bW4pOwoK
ICAgCgoKICB2b2lkIHNldF9zb3J0X3R5cGUoR3RrU29ydFR5cGUgc29ydF90eXBlKTsKCiAgIAoK
CiAgdm9pZCBzb3J0KCk7CgogICAKCgogIHZvaWQgc2V0X2F1dG9fc29ydChib29sIGF1dG9fc29y
dCk7CgoKIAogIFJvd0xpc3QmIHJvd3MoKQogICAgewogICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxSb3dMaXN0Jj4oY2xpc3Rfc2VsZik7CiAgICAgICAKICAgICAgIAogICAgICAgCiAgICB9
CiAgY29uc3QgUm93TGlzdCYgcm93cygpIGNvbnN0CiAgICB7CiAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNvbnN0IFJvd0xpc3QmPihjbGlzdF9zZWxmKTsKICAgICAgIAogICAgICAgCiAg
ICAgICAKICAgIH0KICBSb3cgcm93KGludCByKSB7IHJldHVybiByb3dzKClbcl07IH0KICBjb25z
dCBSb3cgcm93KGludCByKSBjb25zdCB7IHJldHVybiByb3dzKClbcl07IH0KCiAgU2VsZWN0aW9u
TGlzdCYgc2VsZWN0aW9uKCkKICAgIHsKICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U2Vs
ZWN0aW9uTGlzdCY+KGNsaXN0X3NlbGYpOwogICAgICAgCiAgICAgICAKICAgICAgIAogICAgfQog
IGNvbnN0IFNlbGVjdGlvbkxpc3QmIHNlbGVjdGlvbigpIGNvbnN0CiAgICB7CiAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGNvbnN0IFNlbGVjdGlvbkxpc3QmPihjbGlzdF9zZWxmKTsKICAg
ICAgIAogICAgICAgCiAgICAgICAKICAgIH0KCiAgQ29sdW1uVmVjdG9yJiBjb2x1bW5zKCkKICAg
IHsKICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29sdW1uVmVjdG9yJj4oY2xpc3Rfc2Vs
Zik7CiAgICAgICAKICAgICAgIAogICAgICAgCiAgICB9CiAgY29uc3QgQ29sdW1uVmVjdG9yJiBj
b2x1bW5zKCkgY29uc3QKICAgIHsKICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Q29sdW1uVmVjdG9yJj4oY2xpc3Rfc2VsZik7CiAgICAgICAKICAgICAgIAogICAgICAgCiAgICB9
CiAgQ29sdW1uIGNvbHVtbihpbnQgYykgeyByZXR1cm4gY29sdW1ucygpW2NdOyB9CiAgY29uc3Qg
Q29sdW1uIGNvbHVtbihpbnQgYykgY29uc3QgeyByZXR1cm4gY29sdW1ucygpW2NdOyB9CgogIENl
bGwgY2VsbChnaW50IHJvdywgZ2ludCBjb2x1bW4pOwogIGNvbnN0IENlbGwgY2VsbChnaW50IHJv
dywgZ2ludCBjb2x1bW4pIGNvbnN0OwoKIAoKICAgCiAgIAoKICAKICAKCiAgIAogICAKCgoKICBn
aW50IGdldF9zZWxlY3Rpb25faW5mbyhnaW50IHgsZ2ludCB5LGdpbnQqIHJvdyxnaW50KiBjb2x1
bW4pIGNvbnN0OwoKICAgCiAgIAogICAKCgoKICAgCgoKCiAgIAogICAKCgoKIAoKICAgCiAgIAog
ICAKCgogIHZvaWQgY29sdW1uX3RpdGxlX2FjdGl2ZShnaW50IGNvbHVtbik7CgogICAKICAgCgoK
ICB2b2lkIGNvbHVtbl90aXRsZV9wYXNzaXZlKGdpbnQgY29sdW1uKTsKCiAgIAogICAKCgogIHZv
aWQgc2V0X2NvbHVtbl90aXRsZShnaW50IGNvbHVtbixjb25zdCBzdHJpbmcmIHRpdGxlKTsKCiAg
IAogICAKCgogIHN0cmluZyBnZXRfY29sdW1uX3RpdGxlKGdpbnQgY29sdW1uKSBjb25zdDsKCiAg
IAogICAKCgogIHZvaWQgc2V0X2NvbHVtbl93aWRnZXQoZ2ludCBjb2x1bW4sR3RrOjpXaWRnZXQm
IHdpZGdldCk7CgogICAKICAgCgoKICBHdGs6OldpZGdldCogZ2V0X2NvbHVtbl93aWRnZXQoZ2lu
dCBjb2x1bW4pIGNvbnN0OwoKCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAoKCiAgdm9pZCBz
ZXRfY29sdW1uX2p1c3RpZmljYXRpb24oZ2ludCBjb2x1bW4sR3RrSnVzdGlmaWNhdGlvbiBqdXN0
aWZpY2F0aW9uKTsKCiAgIAogICAKCgogIHZvaWQgc2V0X2NvbHVtbl92aXNpYmlsaXR5KGdpbnQg
Y29sdW1uLGJvb2wgdmlzaWJsZSk7CgogICAKICAgCgoKICB2b2lkIHNldF9jb2x1bW5fcmVzaXpl
YWJsZShnaW50IGNvbHVtbixib29sIHJlc2l6ZWFibGUpOwoKICAgCiAgIAoKCiAgdm9pZCBzZXRf
Y29sdW1uX2F1dG9fcmVzaXplKGdpbnQgY29sdW1uLGJvb2wgYXV0b19yZXNpemUpOwoKICAgCiAg
IAoKCiAgZ2ludCBvcHRpbWFsX2NvbHVtbl93aWR0aChnaW50IGNvbHVtbikgY29uc3Q7CgogICAK
ICAgCiAgIAogICAKCgogIHZvaWQgc2V0X2NvbHVtbl93aWR0aChnaW50IGNvbHVtbixnaW50IHdp
ZHRoKTsKCiAgIAogICAKICAgCiAgZ2ludCBnZXRfY29sdW1uX3dpZHRoKGdpbnQgY29sdW1uKSBj
b25zdDsKCiAgIAogICAKCgogIHZvaWQgc2V0X2NvbHVtbl9taW5fd2lkdGgoZ2ludCBjb2x1bW4s
Z2ludCBtaW5fd2lkdGgpOwoKICAgCiAgIAoKCiAgdm9pZCBzZXRfY29sdW1uX21heF93aWR0aChn
aW50IGNvbHVtbixnaW50IG1heF93aWR0aCk7CgogICAKCgogCiAgIAogICAKICAgCgoKICBnaW50
IHByZXBlbmRfcm93KGNvbnN0IFNBcnJheSYgdGV4dCk7CgoKICBnaW50IHByZXBlbmQoY29uc3Qg
U0FycmF5JiB0ZXh0KTsKCiAgIAogICAKICAgCgoKICBnaW50IGFwcGVuZF9yb3coY29uc3QgU0Fy
cmF5JiB0ZXh0KTsKCgogIGdpbnQgYXBwZW5kKGNvbnN0IFNBcnJheSYgdGV4dCk7CgogICAKICAg
CiAgIAoKCiAgZ2ludCBpbnNlcnRfcm93KGdpbnQgcm93LGNvbnN0IFNBcnJheSYgdGV4dCk7CgoK
ICBnaW50IGluc2VydChnaW50IHJvdyxjb25zdCBTQXJyYXkmIHRleHQpOwoKICAgCiAgIAogICAK
CgogIHZvaWQgY2xlYXIoKTsKCiAgIAogICAKICBnaW50IGdldF9yb3dzKCkgY29uc3Q7CgogICAK
ICAgCgoKICB2b2lkIHN3YXBfcm93cyhnaW50IHJvdzEsZ2ludCByb3cyKTsKCiAgIAogICAKCgog
ICAKICAgCiAgIAoKCiAgZ2ludCBmaW5kX3Jvd19mcm9tX2RhdGEoZ3BvaW50ZXIgZGF0YSkgY29u
c3Q7CgoKCiAKICAgCiAgIAoKCiAgR3RrVmlzaWJpbGl0eSByb3dfaXNfdmlzaWJsZShnaW50IHJv
dykgY29uc3Q7CgogICAKICAgCiAgIAoKCiAgdm9pZCBzZXRfZm9yZWdyb3VuZChnaW50IHJvdyxj
b25zdCBHZGtfQ29sb3ImIGNvbG9yKTsKCiAgIAogICAKICAgCgoKICB2b2lkIHNldF9iYWNrZ3Jv
dW5kKGdpbnQgcm93LGNvbnN0IEdka19Db2xvciYgY29sb3IpOwoKICAgCgoKICB2b2lkIHNldF9y
b3dfc3R5bGUoZ2ludCByb3csR3RrOjpTdHlsZSYgc3R5bGUpOwoKICAgCgoKICBHdGs6OlN0eWxl
KiBnZXRfcm93X3N0eWxlKGdpbnQgcm93KSBjb25zdDsKCiAgIAoKCiAgYm9vbCBnZXRfc2VsZWN0
YWJsZShnaW50IHJvdykgY29uc3Q7CgogICAKICAgCgoKICB2b2lkIHNldF9zZWxlY3RhYmxlKGdp
bnQgcm93LGJvb2wgc2VsZWN0YWJsZSk7CgogICAKICAgCiAgIAogICAKCgogIHZvaWQgcmVtb3Zl
X3JvdyhnaW50IHJvdyk7CgogICAKICAgCgoKICB2b2lkIHNldF9yb3dfZGF0YShnaW50IHJvdyxn
cG9pbnRlciBkYXRhKTsKCiAgIAogICAKCgogIGdwb2ludGVyIGdldF9yb3dfZGF0YShnaW50IHJv
dykgY29uc3Q7CgogICAKICAgCgoKCiAgdm9pZCBzZXRfcm93X2RhdGFfZnVsbChnaW50IHJvdyxn
cG9pbnRlciBkYXRhLEd0a0Rlc3Ryb3lOb3RpZnkgZGVzdHJveSk7CgoKCiAKICAgCiAgIAogICAK
ICAgCiAgIAogICAKICAgCgoKCiAgdm9pZCBtb3ZldG8oZ2ludCByb3csZ2ludCBjb2x1bW4sZ2Zs
b2F0IHJvd19hbGlnbj0wLjUsZ2Zsb2F0IGNvbF9hbGlnbj0wLjUpOwoKCiAgIAogICAKICAgCiAg
IAogICAKICAgCiAgIAoKCiAgR3RrQ2VsbFR5cGUgZ2V0X2NlbGxfdHlwZShnaW50IHJvdyxnaW50
IGNvbHVtbikgY29uc3Q7CgogICAKICAgCgoKICB2b2lkIHNldF90ZXh0KGdpbnQgcm93LGdpbnQg
Y29sdW1uLGNvbnN0IHN0cmluZyYgdGV4dCk7CgogICAKICAgCiAgIAogIGJvb2wgICAgICAgICBn
ZXRfdGV4dChnaW50IHJvdywgZ2ludCBjb2x1bW4sIG5zdHJpbmcgKnRleHQpIGNvbnN0OwogIGJv
b2wgICAgICAgICBnZXRfdGV4dChnaW50IHJvdywgZ2ludCBjb2x1bW4sIHN0cmluZyAmdGV4dCkg
Y29uc3Q7CiAgbnN0cmluZyBnZXRfdGV4dChnaW50IHJvdywgZ2ludCBjb2x1bW4pIGNvbnN0OwoK
ICAgCiAgIAoKCgogIHZvaWQgc2V0X3BpeG1hcChnaW50IHJvdyxnaW50IGNvbHVtbixjb25zdCBH
ZGtfUGl4bWFwJiBwaXhtYXAsY29uc3QgR2RrX0JpdG1hcCYgbWFzayk7CgogICAKICAgCiAgZ2lu
dCBnZXRfcGl4bWFwKGdpbnQgcm93LCBnaW50IGNvbHVtbiwKICAgICAgICAgICAgICAgICAgR2Rr
X1BpeG1hcCAmcGl4bWFwLCBHZGtfQml0bWFwICZtYXNrKSBjb25zdDsKCiAgIAogICAKCiAgdm9p
ZCBzZXRfcGl4dGV4dChnaW50IHJvdyxnaW50IGNvbHVtbixjb25zdCBzdHJpbmcmIHRleHQsZ3Vp
bnQ4IHNwYWNpbmcsY29uc3QgR2RrX1BpeG1hcCYgcGl4bWFwLGNvbnN0IEdka19CaXRtYXAmIG1h
c2spOwoKICAgCiAgIAogICAKICAgCiAgYm9vbCBnZXRfcGl4dGV4dChnaW50IHJvdywgZ2ludCBj
b2x1bW4sIHN0cmluZyYgdGV4dCwKICAgICAgICAgICAgICAgICAgIGd1aW50OCAmc3BhY2luZywK
ICAgICAgICAgICAgICAgICAgIEdka19QaXhtYXAgJnBpeG1hcCwgR2RrX0JpdG1hcCAmbWFzaykg
Y29uc3Q7CgogICAKICAgCgoKICB2b2lkIHNldF9jZWxsX3N0eWxlKGdpbnQgcm93LGdpbnQgY29s
dW1uLEd0azo6U3R5bGUmIHN0eWxlKTsKCiAgIAogICAKCgogIEd0azo6U3R5bGUqIGdldF9jZWxs
X3N0eWxlKGdpbnQgcm93LGdpbnQgY29sdW1uKSBjb25zdDsKCiAgIAogICAKICAgCiAgIAoKCgog
IHZvaWQgc2V0X3NoaWZ0KGdpbnQgcm93LGdpbnQgY29sdW1uLGdpbnQgdmVydGljYWwsZ2ludCBo
b3Jpem9udGFsKTsKCgoKIAoKIAoKICAgICAgICAgICAgICAgCgoKCgoKcHJpdmF0ZToKICB2aXJ0
dWFsIGJvb2wgY2hlY2tfc2VsaXRlcmF0b3JfdHlwZSgpIGNvbnN0OwoKcHVibGljOgoKICAgIGNs
YXNzIFByb3h5X3NlbGVjdF9yb3cKICAgICAgOiBwdWJsaWMgUHJveHlTaWduYWwzPHZvaWQsZ2lu
dCxnaW50LEdka0V2ZW50KixDcHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDA+CiAgICAgIHsK
ICAgICAgICAgIHR5cGVkZWYgUHJveHlTaWduYWwzPHZvaWQsZ2ludCxnaW50LEdka0V2ZW50KixD
cHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDA+IEJhc2VUeXBlOwogICAgICAgIHB1YmxpYzoK
ICAgICAgICAgIENvbm5lY3Rpb24gY29ubmVjdChjb25zdCBTaWdDOjpTbG90Mzx2b2lkLGdpbnQs
Z2ludCxHZGtFdmVudCo+ICZzKTsKICAgICAgICAgdm9pZCBvcGVyYXRvciAoKShnaW50IHJvdywg
Z2ludCBjb2x1bW49LTEpCiAgICAgICAgICAgICB7ZW1pdChyb3csY29sdW1uKTt9CiAgICAgICAg
IHZvaWQgZW1pdChnaW50IHJvdywgZ2ludCBjb2x1bW49LTEpOwoKICAgICAgfTsKICAgIGNsYXNz
IFByb3h5X3Vuc2VsZWN0X3JvdwogICAgICA6IHB1YmxpYyBQcm94eVNpZ25hbDM8dm9pZCxnaW50
LGdpbnQsR2RrRXZlbnQqLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsMT4KICAgICAgewog
ICAgICAgICAgdHlwZWRlZiBQcm94eVNpZ25hbDM8dm9pZCxnaW50LGdpbnQsR2RrRXZlbnQqLENw
cE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsMT4gQmFzZVR5cGU7CiAgICAgICAgcHVibGljOgog
ICAgICAgICAgQ29ubmVjdGlvbiBjb25uZWN0KGNvbnN0IFNpZ0M6OlNsb3QzPHZvaWQsZ2ludCxn
aW50LEdka0V2ZW50Kj4gJnMpOwogICAgICAgICAgIHZvaWQgb3BlcmF0b3IgKCkoZ2ludCByb3cs
IGdpbnQgY29sdW1uPS0xKQogICAgICAgICAgICAge2VtaXQocm93LGNvbHVtbik7fQogICAgICAg
ICAgIHZvaWQgZW1pdChnaW50IHJvdywgZ2ludCBjb2x1bW49LTEpOwoKICAgICAgfTsKICAgIGNs
YXNzIFByb3h5X3NldF9zY3JvbGxfYWRqdXN0bWVudHMKICAgICAgOiBwdWJsaWMgR3RrOjpFbWl0
UHJveHlTaWduYWwyPHZvaWQsR3RrQWRqdXN0bWVudCosR3RrQWRqdXN0bWVudCosQ3BwT2JqZWN0
VHlwZSxCYXNlT2JqZWN0VHlwZSwxNiwmZ3RrX2NsaXN0X3NldF9zY3JvbGxfYWRqdXN0bWVudHM+
CiAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgR3RrOjpFbWl0UHJveHlTaWduYWwyPHZvaWQsR3Rr
QWRqdXN0bWVudCosR3RrQWRqdXN0bWVudCosQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwx
NiwmZ3RrX2NsaXN0X3NldF9zY3JvbGxfYWRqdXN0bWVudHM+IEJhc2VUeXBlOwogICAgICAgIHB1
YmxpYzoKICAgICAgICAgIHZvaWQgb3BlcmF0b3IgKCkoR3RrOjpBZGp1c3RtZW50KixHdGs6OkFk
anVzdG1lbnQqKTsKICAgICAgICAgIHZvaWQgZW1pdChHdGs6OkFkanVzdG1lbnQqLEd0azo6QWRq
dXN0bWVudCopOwogICAgICAgICAgQ29ubmVjdGlvbiBjb25uZWN0KGNvbnN0IFNpZ0M6OlNsb3Qy
PHZvaWQsR3RrOjpBZGp1c3RtZW50KixHdGs6OkFkanVzdG1lbnQqPiAmcyk7CiAgICAgIH07CiAg
dW5pb24KICAgIHsKICAgICAgQ3BwT2JqZWN0VHlwZSAqIGNsaXN0X3NlbGY7CiAgICAgIFByb3h5
X3NlbGVjdF9yb3cgc2VsZWN0X3JvdzsKICAgICAgUHJveHlfdW5zZWxlY3Rfcm93IHVuc2VsZWN0
X3JvdzsKICAgICAgR3RrOjpFbWl0UHJveHlTaWduYWwwPHZvaWQsQ3BwT2JqZWN0VHlwZSxCYXNl
T2JqZWN0VHlwZSwyLCZndGtfY2xpc3Rfc2VsZWN0X2FsbD4gc2VsZWN0X2FsbDsKICAgICAgR3Rr
OjpFbWl0UHJveHlTaWduYWwwPHZvaWQsQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwzLCZn
dGtfY2xpc3RfdW5zZWxlY3RfYWxsPiB1bnNlbGVjdF9hbGw7CiAgICAgIEd0azo6RW1pdFByb3h5
U2lnbmFsMDx2b2lkLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsNCwmZ3RrX2NsaXN0X3Vu
ZG9fc2VsZWN0aW9uPiB1bmRvX3NlbGVjdGlvbjsKICAgICAgR3RrOjpFbWl0UHJveHlTaWduYWwx
PHZvaWQsZ2ludCxDcHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDUsJmd0a21tX2NsaXN0X2Ns
aWNrX2NvbHVtbj4gY2xpY2tfY29sdW1uOwogICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDI8dm9p
ZCxnaW50LGdpbnQsQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSw2LCZndGtfY2xpc3Rfcm93
X21vdmU+IHJvd19tb3ZlOwogICAgICBHdGs6OlByb3h5U2lnbmFsMjx2b2lkLGdpbnQsZ2ludCxD
cHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDc+IHJlc2l6ZV9jb2x1bW47CiAgICAgIEd0azo6
UHJveHlTaWduYWwwPHZvaWQsQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSw4PiB0b2dnbGVf
Zm9jdXNfcm93OwogICAgICBHdGs6OlByb3h5U2lnbmFsMDx2b2lkLENwcE9iamVjdFR5cGUsQmFz
ZU9iamVjdFR5cGUsOT4gdG9nZ2xlX2FkZF9tb2RlOwogICAgICBHdGs6OlByb3h5U2lnbmFsMDx2
b2lkLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsMTA+IHN0YXJ0X3NlbGVjdGlvbjsKICAg
ICAgR3RrOjpQcm94eVNpZ25hbDA8dm9pZCxDcHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDEx
PiBlbmRfc2VsZWN0aW9uOwogICAgICBHdGs6OlByb3h5U2lnbmFsMzx2b2lkLEd0a1Njcm9sbFR5
cGUsZ2Zsb2F0LGdib29sZWFuLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsMTI+IGV4dGVu
ZF9zZWxlY3Rpb247CiAgICAgIEd0azo6UHJveHlTaWduYWwyPHZvaWQsR3RrU2Nyb2xsVHlwZSxn
ZmxvYXQsQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwxMz4gc2Nyb2xsX3ZlcnRpY2FsOwog
ICAgICBHdGs6OlByb3h5U2lnbmFsMjx2b2lkLEd0a1Njcm9sbFR5cGUsZ2Zsb2F0LENwcE9iamVj
dFR5cGUsQmFzZU9iamVjdFR5cGUsMTQ+IHNjcm9sbF9ob3Jpem9udGFsOwogICAgICBHdGs6OlBy
b3h5U2lnbmFsMDx2b2lkLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsMTU+IGFib3J0X2Nv
bHVtbl9yZXNpemU7CiAgICAgIFByb3h5X3NldF9zY3JvbGxfYWRqdXN0bWVudHMgc2V0X3Njcm9s
bF9hZGp1c3RtZW50czsKICAgIH07Cgpwcm90ZWN0ZWQ6CiAgIAogICAgdmlydHVhbCB2b2lkIHNl
bGVjdF9yb3dfaW1wbChnaW50IHAwLGdpbnQgcDEsR2RrRXZlbnQqIHAyKTsKICAgIHZpcnR1YWwg
dm9pZCB1bnNlbGVjdF9yb3dfaW1wbChnaW50IHAwLGdpbnQgcDEsR2RrRXZlbnQqIHAyKTsKICAg
IHZpcnR1YWwgdm9pZCBzZWxlY3RfYWxsX2ltcGwoKTsKICAgIHZpcnR1YWwgdm9pZCB1bnNlbGVj
dF9hbGxfaW1wbCgpOwogICAgdmlydHVhbCB2b2lkIHVuZG9fc2VsZWN0aW9uX2ltcGwoKTsKICAg
IHZpcnR1YWwgdm9pZCBjbGlja19jb2x1bW5faW1wbChnaW50IHAwKTsKICAgIHZpcnR1YWwgdm9p
ZCByb3dfbW92ZV9pbXBsKGdpbnQgcDAsZ2ludCBwMSk7CiAgICB2aXJ0dWFsIHZvaWQgcmVzaXpl
X2NvbHVtbl9pbXBsKGdpbnQgcDAsZ2ludCBwMSk7CiAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlX2Zv
Y3VzX3Jvd19pbXBsKCk7CiAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlX2FkZF9tb2RlX2ltcGwoKTsK
ICAgIHZpcnR1YWwgdm9pZCBzdGFydF9zZWxlY3Rpb25faW1wbCgpOwogICAgdmlydHVhbCB2b2lk
IGVuZF9zZWxlY3Rpb25faW1wbCgpOwogICAgdmlydHVhbCB2b2lkIGV4dGVuZF9zZWxlY3Rpb25f
aW1wbChHdGtTY3JvbGxUeXBlIHAwLGdmbG9hdCBwMSxnYm9vbGVhbiBwMik7CiAgICB2aXJ0dWFs
IHZvaWQgc2Nyb2xsX3ZlcnRpY2FsX2ltcGwoR3RrU2Nyb2xsVHlwZSBwMCxnZmxvYXQgcDEpOwog
ICAgdmlydHVhbCB2b2lkIHNjcm9sbF9ob3Jpem9udGFsX2ltcGwoR3RrU2Nyb2xsVHlwZSBwMCxn
ZmxvYXQgcDEpOwogICAgdmlydHVhbCB2b2lkIGFib3J0X2NvbHVtbl9yZXNpemVfaW1wbCgpOwog
ICAgdmlydHVhbCB2b2lkIHNldF9zY3JvbGxfYWRqdXN0bWVudHNfaW1wbChHdGs6OkFkanVzdG1l
bnQqIHAwLEd0azo6QWRqdXN0bWVudCogcDEpOwogICAgdmlydHVhbCBpbnQgaW5zZXJ0X3Jvd19p
bXBsKGdpbnQgcm93LGdjaGFyKiogcDEpOwogICAgdmlydHVhbCB2b2lkIHJlbW92ZV9yb3dfaW1w
bChnaW50IHJvdyk7CiAgICB2aXJ0dWFsIHZvaWQgY2xlYXJfaW1wbCgpOwogICAgdmlydHVhbCB2
b2lkIHNvcnRfbGlzdF9pbXBsKCk7Cgp9Owp0eXBlZGVmIENMaXN0IENvbHVtbkxpc3Q7Cgp9CgoK
IyAxNCAidF9ndGsuY3BwIiAyCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLS0vYm94LmgiIDEK
IAogCgoKCiAKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ3Rr
LTEuMi9ndGsvZ3RrYm94LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoK
CmV4dGVybiAiQyIgewoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0d0a0JveAkgICAgICBHdGtC
b3g7CnR5cGVkZWYgc3RydWN0IF9HdGtCb3hDbGFzcyAgIEd0a0JveENsYXNzOwp0eXBlZGVmIHN0
cnVjdCBfR3RrQm94Q2hpbGQgICBHdGtCb3hDaGlsZDsKCnN0cnVjdCBfR3RrQm94CnsKICBHdGtD
b250YWluZXIgY29udGFpbmVyOwogIAogIEdMaXN0ICpjaGlsZHJlbjsKICBnaW50MTYgc3BhY2lu
ZzsKICBndWludCBob21vZ2VuZW91cyA6IDE7Cn07CgpzdHJ1Y3QgX0d0a0JveENsYXNzCnsKICBH
dGtDb250YWluZXJDbGFzcyBwYXJlbnRfY2xhc3M7Cn07CgpzdHJ1Y3QgX0d0a0JveENoaWxkCnsK
ICBHdGtXaWRnZXQgKndpZGdldDsKICBndWludDE2IHBhZGRpbmc7CiAgZ3VpbnQgZXhwYW5kIDog
MTsKICBndWludCBmaWxsIDogMTsKICBndWludCBwYWNrIDogMTsKfTsKCgpHdGtUeXBlCSAgIGd0
a19ib3hfZ2V0X3R5cGUJICAgICAgICh2b2lkKTsKdm9pZAkgICBndGtfYm94X3BhY2tfc3RhcnQJ
ICAgICAgIChHdGtCb3gJICAgICAqYm94LAoJCQkJCUd0a1dpZGdldCAgICAqY2hpbGQsCgkJCQkJ
Z2Jvb2xlYW4gICAgICBleHBhbmQsCgkJCQkJZ2Jvb2xlYW4gICAgICBmaWxsLAoJCQkJCWd1aW50
CSAgICAgIHBhZGRpbmcpOwp2b2lkCSAgIGd0a19ib3hfcGFja19lbmQJICAgICAgIChHdGtCb3gJ
ICAgICAqYm94LAoJCQkJCUd0a1dpZGdldCAgICAqY2hpbGQsCgkJCQkJZ2Jvb2xlYW4gICAgICBl
eHBhbmQsCgkJCQkJZ2Jvb2xlYW4gICAgICBmaWxsLAoJCQkJCWd1aW50CSAgICAgIHBhZGRpbmcp
Owp2b2lkCSAgIGd0a19ib3hfcGFja19zdGFydF9kZWZhdWx0cyAoR3RrQm94CSAgICAgKmJveCwK
CQkJCQlHdGtXaWRnZXQgICAgKndpZGdldCk7CnZvaWQJICAgZ3RrX2JveF9wYWNrX2VuZF9kZWZh
dWx0cyAgIChHdGtCb3gJICAgICAqYm94LAoJCQkJCUd0a1dpZGdldCAgICAqd2lkZ2V0KTsKdm9p
ZAkgICBndGtfYm94X3NldF9ob21vZ2VuZW91cyAgICAgKEd0a0JveAkgICAgICpib3gsCgkJCQkJ
Z2Jvb2xlYW4gICAgICBob21vZ2VuZW91cyk7CnZvaWQJICAgZ3RrX2JveF9zZXRfc3BhY2luZwkg
ICAgICAgKEd0a0JveAkgICAgICpib3gsCgkJCQkJZ2ludAkgICAgICBzcGFjaW5nKTsKdm9pZAkg
ICBndGtfYm94X3Jlb3JkZXJfY2hpbGQgICAgICAgKEd0a0JveAkgICAgICpib3gsCgkJCQkJR3Rr
V2lkZ2V0ICAgICpjaGlsZCwKCQkJCQlnaW50CSAgICAgIHBvc2l0aW9uKTsKdm9pZAkgICBndGtf
Ym94X3F1ZXJ5X2NoaWxkX3BhY2tpbmcgKEd0a0JveAkgICAgICpib3gsCgkJCQkJR3RrV2lkZ2V0
ICAgICpjaGlsZCwKCQkJCQlnYm9vbGVhbiAgICAgKmV4cGFuZCwKCQkJCQlnYm9vbGVhbiAgICAg
KmZpbGwsCgkJCQkJZ3VpbnQJICAgICAqcGFkZGluZywKCQkJCQlHdGtQYWNrVHlwZSAgKnBhY2tf
dHlwZSk7CnZvaWQJICAgZ3RrX2JveF9zZXRfY2hpbGRfcGFja2luZyAgIChHdGtCb3gJICAgICAq
Ym94LAoJCQkJCUd0a1dpZGdldCAgICAqY2hpbGQsCgkJCQkJZ2Jvb2xlYW4gICAgICBleHBhbmQs
CgkJCQkJZ2Jvb2xlYW4gICAgICBmaWxsLAoJCQkJCWd1aW50CSAgICAgIHBhZGRpbmcsCgkJCQkJ
R3RrUGFja1R5cGUgICBwYWNrX3R5cGUpOwoKCgoKfQoKCgoKIyAyOSAiL29wdC9ndGsvaW5jbHVk
ZS9ndGstLS9ib3guaCIgMgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a3Zi
b3guaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7
CgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfR3RrVkJveAkgICAgICBHdGtWQm94Owp0eXBlZGVm
IHN0cnVjdCBfR3RrVkJveENsYXNzICBHdGtWQm94Q2xhc3M7CgpzdHJ1Y3QgX0d0a1ZCb3gKewog
IEd0a0JveCBib3g7Cn07CgpzdHJ1Y3QgX0d0a1ZCb3hDbGFzcwp7CiAgR3RrQm94Q2xhc3MgcGFy
ZW50X2NsYXNzOwp9OwoKCkd0a1R5cGUJICAgZ3RrX3Zib3hfZ2V0X3R5cGUgKHZvaWQpOwpHdGtX
aWRnZXQqIGd0a192Ym94X25ldwkgICAgIChnYm9vbGVhbiBob21vZ2VuZW91cywKCQkJICAgICAg
Z2ludCBzcGFjaW5nKTsKCgoKfQoKCgoKIyAzMCAiL29wdC9ndGsvaW5jbHVkZS9ndGstLS9ib3gu
aCIgMgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a2hib3guaCIgMQogCgoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgp0
eXBlZGVmIHN0cnVjdCBfR3RrSEJveAkgICAgICBHdGtIQm94Owp0eXBlZGVmIHN0cnVjdCBfR3Rr
SEJveENsYXNzICBHdGtIQm94Q2xhc3M7CgpzdHJ1Y3QgX0d0a0hCb3gKewogIEd0a0JveCBib3g7
Cn07CgpzdHJ1Y3QgX0d0a0hCb3hDbGFzcwp7CiAgR3RrQm94Q2xhc3MgcGFyZW50X2NsYXNzOwp9
OwoKCkd0a1R5cGUJICAgZ3RrX2hib3hfZ2V0X3R5cGUgKHZvaWQpOwpHdGtXaWRnZXQqIGd0a19o
Ym94X25ldwkgICAgIChnYm9vbGVhbiBob21vZ2VuZW91cywKCQkJICAgICAgZ2ludCBzcGFjaW5n
KTsKCgoKfQoKCgoKIyAzMSAiL29wdC9ndGsvaW5jbHVkZS9ndGstLS9ib3guaCIgMgoKCm5hbWVz
cGFjZSBHdGsgewpjbGFzcyBCb3g7CmNsYXNzIEJveF9DbGFzczsKfQpuYW1lc3BhY2UgR3RrIHsg
R3RrOjpCb3ggKndyYXAgKEd0a0JveCAqbyk7IH0KbmFtZXNwYWNlIEd0ayB7CmNsYXNzIFZCb3g7
CmNsYXNzIFZCb3hfQ2xhc3M7Cn0KbmFtZXNwYWNlIEd0ayB7IEd0azo6VkJveCAqd3JhcCAoR3Rr
VkJveCAqbyk7IH0KbmFtZXNwYWNlIEd0ayB7CmNsYXNzIEhCb3g7CmNsYXNzIEhCb3hfQ2xhc3M7
Cn0KbmFtZXNwYWNlIEd0ayB7IEd0azo6SEJveCAqd3JhcCAoR3RrSEJveCAqbyk7IH0KbmFtZXNw
YWNlIEd0awp7CgpuYW1lc3BhY2UgQm94X0hlbHBlcnMKewogIGNsYXNzIENoaWxkIDogcHJvdGVj
dGVkIF9HdGtCb3hDaGlsZAogICAgewogICAgICBwdWJsaWM6CiAgICAgICAgaW5saW5lIF9HdGtC
b3hDaGlsZCogZ3Rrb2JqKCkge3JldHVybiAodGhpcyk7fQogICAgICAgIGlubGluZSBjb25zdCBf
R3RrQm94Q2hpbGQqIGd0a29iaigpIGNvbnN0IHtyZXR1cm4gKHRoaXMpO30KCiAgICAgIHByaXZh
dGU6CiAgICAgICAgQ2hpbGQmIG9wZXJhdG9yPShjb25zdCBDaGlsZCYpOwogICAgICAgIENoaWxk
KGNvbnN0IENoaWxkJik7CgogICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgQ2hpbGQodm9pZCogZG9f
bm90X2Rlcml2ZV90aGlzKTsKCiAgICAgICAgaW5saW5lIEd0a0JveCogcGFyZW50KCkKICAgICAg
ICAgIHtyZXR1cm4gKCgoICBHdGtCb3ggKikgZ3RrX3R5cGVfY2hlY2tfb2JqZWN0X2Nhc3QgKChH
dGtUeXBlT2JqZWN0KikgKCAoIGd0a29iaigpLT53aWRnZXQtPnBhcmVudCApICksICggIChndGtf
Ym94X2dldF90eXBlICgpKSAgKSkpICkgO30KICAgICAgICB2b2lkIHJlZHJhdygpOwoKICAgICAg
cHVibGljOgogICAgICAgIFdpZGdldCogZ2V0X3dpZGdldCgpIGNvbnN0OwoKICAgICAgICBpbmxp
bmUgZ3VpbnQxNiBnZXRfcGFkZGluZygpIGNvbnN0ICAgeyByZXR1cm4gKGd0a29iaigpLT5wYWRk
aW5nKTsgfQogICAgICAgIGlubGluZSBib29sIGdldF9leHBhbmQoKSBjb25zdCAgICAgICB7IHJl
dHVybiAoZ3Rrb2JqKCktPmV4cGFuZCk7IH0KICAgICAgICBpbmxpbmUgYm9vbCBnZXRfZmlsbCgp
IGNvbnN0ICAgICAgICAgeyByZXR1cm4gKGd0a29iaigpLT5maWxsKTsgfQogICAgICAgIGlubGlu
ZSBib29sIGdldF9wYWNrKCkgY29uc3QgICAgICAgICB7IHJldHVybiAoZ3Rrb2JqKCktPnBhY2sp
OyB9CgogICAgICAgIHZvaWQgc2V0X29wdGlvbnMoYm9vbCBleHBhbmQsYm9vbCBmaWxsLGd1aW50
IHBhZGRpbmcpOwogICAgICAgIHZvaWQgc2V0X3BhY2soR3RrUGFja1R5cGUgcGFjayk7CiAgICB9
OwoKICBzdHJ1Y3QgRWxlbWVudAogICAgewogICAgICBXaWRnZXQqIHdpZGdldF87CiAgICAgIGJv
b2wgZXhwYW5kXzsKICAgICAgYm9vbCBmaWxsXzsKICAgICAgZ3VpbnQgcGFkZGluZ187CiAgICAg
IEd0a1BhY2tUeXBlIHBhY2tfOwoKICAgICAgRWxlbWVudChXaWRnZXQmIHdpZGdldCwKICAgICAg
ICAgICAgICBib29sIGV4cGFuZD10cnVlLAogICAgICAgICAgICAgIGJvb2wgZmlsbD10cnVlLAog
ICAgICAgICAgICAgIGd1aW50IHBhZGRpbmc9MCwKICAgICAgICAgICAgICBHdGtQYWNrVHlwZSBw
YWNrPUdUS19QQUNLX1NUQVJUKQogICAgICAgICAgOiB3aWRnZXRfKCZ3aWRnZXQpLGV4cGFuZF8o
ZXhwYW5kKSxmaWxsXyhmaWxsKSwKICAgICAgICAgICAgcGFkZGluZ18ocGFkZGluZykscGFja18o
cGFjaykKICAgICAgICB7fQogICAgfTsKCiAgdHlwZWRlZiBFbGVtZW50IFN0YXJ0RWxlbTsKCiAg
c3RydWN0IEVuZEVsZW0gOiBwdWJsaWMgRWxlbWVudAogICAgewogICAgICBFbmRFbGVtKFdpZGdl
dCYgd2lkZ2V0LAogICAgICAgICAgICAgIGJvb2wgZXhwYW5kPXRydWUsCiAgICAgICAgICAgICAg
Ym9vbCBmaWxsPXRydWUsCiAgICAgICAgICAgICAgZ3VpbnQgcGFkZGluZz0wKQogICAgICAgICAg
OiBFbGVtZW50ICh3aWRnZXQsZXhwYW5kLGZpbGwscGFkZGluZyxHVEtfUEFDS19FTkQpCiAgICAg
ICAge30KICAgIH07CgogIGNsYXNzIEJveExpc3QKICAgIHsKICAgICAgcHVibGljOgogICAgICAg
IHR5cGVkZWYgQ2hpbGQqICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogICAgICAg
IHR5cGVkZWYgdmFsdWVfdHlwZSAmICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CiAg
ICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlICYgICAgICAgICAgICAgICAgIGNvbnN0X3Jl
ZmVyZW5jZTsKCiAgICAgICAgdHlwZWRlZiBHX0xpc3RfSXRlcmF0b3I8dmFsdWVfdHlwZT4gICAg
ICAgIGl0ZXJhdG9yOwogICAgICAgIHR5cGVkZWYgR19MaXN0X0NvbnN0SXRlcmF0b3I8aXRlcmF0
b3I+ICAgICBjb25zdF9pdGVyYXRvcjsKICAgICAgICB0eXBlZGVmIEdfTGlzdF9SZXZlcnNlSXRl
cmF0b3I8aXRlcmF0b3I+ICAgcmV2ZXJzZV9pdGVyYXRvcjsKICAgICAgICB0eXBlZGVmIEdfTGlz
dF9Db25zdEl0ZXJhdG9yPHJldmVyc2VfaXRlcmF0b3I+ICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRv
cjsKCiAgICAgICAgdHlwZWRlZiBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRp
ZmZlcmVuY2VfdHlwZTsKICAgICAgICB0eXBlZGVmIHNpemVfdCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90eXBlOwoKICAgICAgcHJpdmF0ZToKICAgICAgICBmcmllbmQgY2xhc3Mg
R3RrOjpCb3g7CiAgICAgICAgR3RrOjpCb3ggKnBhcmVudF87CiAgICAgICAgZXhwbGljaXQgQm94
TGlzdChCb3gqIHBhcmVudCk6IHBhcmVudF8ocGFyZW50KSB7fQoKICAgICAgICBHTGlzdComIGds
aXN0KCkgY29uc3Q7ICAgICAgIAoKICAgICAgICBpdGVyYXRvciBiZWdpbl8oKSBjb25zdDsKICAg
ICAgICBpdGVyYXRvciBlbmRfKCkgY29uc3Q7CgogICAgICBwdWJsaWM6CiAgICAgICAgfkJveExp
c3QoKSB7fQoKICAgICAgICBpbmxpbmUgaXRlcmF0b3IgYmVnaW4oKQogICAgICAgICAge3JldHVy
biBiZWdpbl8oKTt9CiAgICAgICAgaW5saW5lIGl0ZXJhdG9yIGVuZCgpCiAgICAgICAgICB7cmV0
dXJuIGVuZF8oKTt9CgogICAgICAgIGlubGluZSBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0
CiAgICAgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihiZWdpbl8oKSk7IH0KICAgICAgICBp
bmxpbmUgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKICAgICAgICAgIHsgcmV0dXJuIGNvbnN0
X2l0ZXJhdG9yKGVuZF8oKSk7IH0KCiAgICAgICAgaW5saW5lIHJldmVyc2VfaXRlcmF0b3IgcmJl
Z2luKCkKICAgICAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kXygpKTsgfQogICAg
ICAgIGlubGluZSByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKQogICAgICAgICAgeyByZXR1cm4gcmV2
ZXJzZV9pdGVyYXRvcihiZWdpbl8oKSk7IH0KCiAgICAgICAgaW5saW5lIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgICAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IocmV2ZXJzZV9pdGVyYXRvcihlbmRfKCkpKTsgfQogICAgICAgIGlubGluZSBjb25z
dF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgICAgICAgeyByZXR1cm4gY29uc3Rf
cmV2ZXJzZV9pdGVyYXRvcihyZXZlcnNlX2l0ZXJhdG9yKGJlZ2luXygpKSk7IH0KCiAgICAgICAg
c2l6ZV90eXBlIHNpemUodm9pZCkgY29uc3Q7CiAgICAgICAgaW5saW5lIHNpemVfdHlwZSBtYXhf
c2l6ZSh2b2lkKSB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CiAgICAgICAgaW5saW5lIGJvb2wg
ZW1wdHkodm9pZCkgeyByZXR1cm4gZ2xpc3QoKSA9PSAwOyB9CgogICAgICAgIGl0ZXJhdG9yIGlu
c2VydChpdGVyYXRvciBwb3NpdGlvbiwgY29uc3QgRWxlbWVudCYgZSk7CiAgICAgICAgdGVtcGxh
dGUgPGNsYXNzIElucHV0SXRlcmF0b3I+CiAgICAgICAgaW5saW5lIHZvaWQgaW5zZXJ0KGl0ZXJh
dG9yIHBvc2l0aW9uLCBJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpCiAg
ICAgICAgICB7IGZvciAoO2ZpcnN0IT1sYXN0OysrZmlyc3QpIHBvc2l0aW9uPWluc2VydChwb3Np
dGlvbiwqZmlyc3QpOyB9CgogICAgICAgIGlubGluZSB2b2lkIHB1c2hfZnJvbnQoY29uc3QgRWxl
bWVudCYgZSkgeyBpbnNlcnQoYmVnaW4oKSwgZSk7IH0KICAgICAgICBpbmxpbmUgdm9pZCBwdXNo
X2JhY2soY29uc3QgRWxlbWVudCYgZSkgIHsgaW5zZXJ0KGVuZCgpLCBlKTsgfQogICAgICAgIGlu
bGluZSB2b2lkIHBvcF9mcm9udCgpICAgICAgICAgICAgICAgICAgeyBlcmFzZShiZWdpbigpKTsg
fQogICAgICAgIGlubGluZSB2b2lkIHBvcF9iYWNrKCkgICAgICAgICAgICAgICAgICAgeyBlcmFz
ZSgtLWVuZCgpKTsgfQoKICAgICAgICB2b2lkIGNsZWFyKCk7CgogICAgICAgIGl0ZXJhdG9yIGVy
YXNlKGl0ZXJhdG9yKTsKICAgICAgICB2b2lkIGVyYXNlKGl0ZXJhdG9yIHN0YXJ0LCBpdGVyYXRv
ciBzdG9wKTsKICAgICAgICB2b2lkIHJlbW92ZShjb25zdF9yZWZlcmVuY2UpOwoKICAgICAgICBp
dGVyYXRvciBmaW5kKGNvbnN0X3JlZmVyZW5jZSBjKTsKICAgICAgICBpdGVyYXRvciBmaW5kKFdp
ZGdldCYpOwoKICAgICAgICB2b2lkIHJlbW92ZShXaWRnZXQmIHcpOwoKICAgICAgICAgCiAgICAg
ICAgdm9pZCByZW9yZGVyKGl0ZXJhdG9yIGxvYyxpdGVyYXRvciBwb3MpOwogICAgIH07Cn07Cgog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKY2xhc3MgQm94IDog
cHVibGljIENvbnRhaW5lciB7CgpwdWJsaWM6CiAgdHlwZWRlZiBCb3ggICAgICAgICAgQ3BwT2Jq
ZWN0VHlwZTsKICB0eXBlZGVmIEJveF9DbGFzcyAgICBDcHBDbGFzc1R5cGU7CiAgdHlwZWRlZiBH
dGtCb3ggICAgICAgICAgIEJhc2VPYmplY3RUeXBlOwogIHR5cGVkZWYgR3RrQm94Q2xhc3MgICAg
ICBCYXNlQ2xhc3NUeXBlOwoKcHJpdmF0ZToKICBmcmllbmQgY2xhc3MgQm94X0NsYXNzOwogIHN0
YXRpYyBDcHBDbGFzc1R5cGUgYm94X2NsYXNzOwoKICBCb3goY29uc3QgQm94Jik7CiAgQm94JiBv
cGVyYXRvcj0oY29uc3QgQm94Jik7ICAKCnByb3RlY3RlZDoKICB2b2lkICAgaW5pdGlhbGl6ZV9j
bGFzcygpOwogIGV4cGxpY2l0IEJveChHdGtCb3ggKmNhc3RpdGVtKTsKCnB1YmxpYzoKICBzdGF0
aWMgR3RrVHlwZSBnZXRfdHlwZSgpOwogIEd0a0JveCogZ3Rrb2JqKCkgICAgICAgICAgICAgeyBy
ZXR1cm4gKEd0a0JveCopKGd0a29iamVjdCk7IH0KICBjb25zdCBHdGtCb3gqIGd0a29iaigpIGNv
bnN0IHsgcmV0dXJuIChHdGtCb3gqKShndGtvYmplY3QpOyB9CiAgc3RhdGljIGJvb2wgaXNBKE9i
amVjdCAqY2hlY2tjYXN0KTsKCiAgIAogIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzaWduYWxf
bmFtZXNbXTsKCiAgdmlydHVhbCB+Qm94KCk7Cgpwcml2YXRlOgoKcHVibGljOgoKICB0eXBlZGVm
IEJveF9IZWxwZXJzOjpCb3hMaXN0IEJveExpc3Q7CgoKCgogICAKICAgCiAgIAogICAKICAgCiAg
IAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKCgoK
CgogIHZvaWQgcGFja19zdGFydChHdGs6OldpZGdldCYgY2hpbGQsYm9vbCBleHBhbmQ9dHJ1ZSxi
b29sIGZpbGw9dHJ1ZSxndWludCBwYWRkaW5nPTApOwoKICAgCgoKCgoKICB2b2lkIHBhY2tfZW5k
KEd0azo6V2lkZ2V0JiBjaGlsZCxib29sIGV4cGFuZD10cnVlLGJvb2wgZmlsbD10cnVlLGd1aW50
IHBhZGRpbmc9MCk7CgogICAKICAgCiAgIAoKCiAgdm9pZCBzZXRfaG9tb2dlbmVvdXMoYm9vbCBo
b21vZ2VuZW91cyk7CgogICAKCgogIHZvaWQgc2V0X3NwYWNpbmcoZ2ludCBzcGFjaW5nKTsKCiAg
IAoKCiAgdm9pZCByZW9yZGVyX2NoaWxkKEd0azo6V2lkZ2V0JiBjaGlsZCxnaW50IHBvcyk7CgoK
IAogCiAKIAogCiAKIAogCiAKIAogCiAgQm94TGlzdCYgY2hpbGRyZW4oKQogICAge3JldHVybiBy
ZWludGVycHJldF9jYXN0PEJveExpc3QmPih3aWRnZXRfc2VsZik7IH0KICBjb25zdCBCb3hMaXN0
JiBjaGlsZHJlbigpIGNvbnN0CiAgICB7cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQm94
TGlzdCY+KHdpZGdldF9zZWxmKTsgfQoKcHJvdGVjdGVkOgogIEJveCgpOwoKcHVibGljOgoKcHJv
dGVjdGVkOgogICAKCn07CgoKIAogCiAKIAogCiAKIAogCmNsYXNzIFZCb3ggOiBwdWJsaWMgQm94
CnsKCnB1YmxpYzoKICB0eXBlZGVmIFZCb3ggICAgICAgICAgQ3BwT2JqZWN0VHlwZTsKICB0eXBl
ZGVmIFZCb3hfQ2xhc3MgICAgQ3BwQ2xhc3NUeXBlOwogIHR5cGVkZWYgR3RrVkJveCAgICAgICAg
ICAgQmFzZU9iamVjdFR5cGU7CiAgdHlwZWRlZiBHdGtWQm94Q2xhc3MgICAgICBCYXNlQ2xhc3NU
eXBlOwoKcHJpdmF0ZToKICBmcmllbmQgY2xhc3MgVkJveF9DbGFzczsKICBzdGF0aWMgQ3BwQ2xh
c3NUeXBlIHZib3hfY2xhc3M7CgogIFZCb3goY29uc3QgVkJveCYpOwogIFZCb3gmIG9wZXJhdG9y
PShjb25zdCBWQm94Jik7ICAKCnByb3RlY3RlZDoKICB2b2lkICAgaW5pdGlhbGl6ZV9jbGFzcygp
OwogIGV4cGxpY2l0IFZCb3goR3RrVkJveCAqY2FzdGl0ZW0pOwoKcHVibGljOgogIHN0YXRpYyBH
dGtUeXBlIGdldF90eXBlKCk7CiAgR3RrVkJveCogZ3Rrb2JqKCkgICAgICAgICAgICAgeyByZXR1
cm4gKEd0a1ZCb3gqKShndGtvYmplY3QpOyB9CiAgY29uc3QgR3RrVkJveCogZ3Rrb2JqKCkgY29u
c3QgeyByZXR1cm4gKEd0a1ZCb3gqKShndGtvYmplY3QpOyB9CiAgc3RhdGljIGJvb2wgaXNBKE9i
amVjdCAqY2hlY2tjYXN0KTsKCiAgIAogIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzaWduYWxf
bmFtZXNbXTsKCiAgdmlydHVhbCB+VkJveCgpOwoKcHJpdmF0ZToKCnB1YmxpYzoKCiAgIAogICAK
ICBWQm94KGJvb2wgaG9tb2dlbmVvdXM9ZmFsc2UsIGdpbnQgc3BhY2luZz0wKTsKCnB1YmxpYzoK
CnByb3RlY3RlZDoKICAgCgp9OwoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIApjbGFzcyBIQm94
IDogcHVibGljIEJveAp7CgpwdWJsaWM6CiAgdHlwZWRlZiBIQm94ICAgICAgICAgIENwcE9iamVj
dFR5cGU7CiAgdHlwZWRlZiBIQm94X0NsYXNzICAgIENwcENsYXNzVHlwZTsKICB0eXBlZGVmIEd0
a0hCb3ggICAgICAgICAgIEJhc2VPYmplY3RUeXBlOwogIHR5cGVkZWYgR3RrSEJveENsYXNzICAg
ICAgQmFzZUNsYXNzVHlwZTsKCnByaXZhdGU6CiAgZnJpZW5kIGNsYXNzIEhCb3hfQ2xhc3M7CiAg
c3RhdGljIENwcENsYXNzVHlwZSBoYm94X2NsYXNzOwoKICBIQm94KGNvbnN0IEhCb3gmKTsKICBI
Qm94JiBvcGVyYXRvcj0oY29uc3QgSEJveCYpOyAgCgpwcm90ZWN0ZWQ6CiAgdm9pZCAgIGluaXRp
YWxpemVfY2xhc3MoKTsKICBleHBsaWNpdCBIQm94KEd0a0hCb3ggKmNhc3RpdGVtKTsKCnB1Ymxp
YzoKICBzdGF0aWMgR3RrVHlwZSBnZXRfdHlwZSgpOwogIEd0a0hCb3gqIGd0a29iaigpICAgICAg
ICAgICAgIHsgcmV0dXJuIChHdGtIQm94KikoZ3Rrb2JqZWN0KTsgfQogIGNvbnN0IEd0a0hCb3gq
IGd0a29iaigpIGNvbnN0IHsgcmV0dXJuIChHdGtIQm94KikoZ3Rrb2JqZWN0KTsgfQogIHN0YXRp
YyBib29sIGlzQShPYmplY3QgKmNoZWNrY2FzdCk7CgogICAKICBzdGF0aWMgY29uc3QgY2hhciog
Y29uc3Qgc2lnbmFsX25hbWVzW107CgogIHZpcnR1YWwgfkhCb3goKTsKCnByaXZhdGU6CgpwdWJs
aWM6CgogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgSEJveChib29sIGhvbW9nZW5l
b3VzPWZhbHNlLCBnaW50IHNwYWNpbmc9MCk7CgogICAKCnB1YmxpYzoKCnByb3RlY3RlZDoKICAg
Cgp9OwoKCn0KCgogCiAKIAogCiAKIAoKIAogCiAKIAogCgogCiAKIAogCiAKCgojIDE1ICJ0X2d0
ay5jcHAiIDIKCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9ndGstLS9idXR0b24uaCIgMQogCiAKCgoK
IAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgpuYW1lc3BhY2UgR3RrIHsKY2xhc3MgQnV0dG9uOwpj
bGFzcyBCdXR0b25fQ2xhc3M7Cn0KbmFtZXNwYWNlIEd0ayB7IEd0azo6QnV0dG9uICp3cmFwIChH
dGtCdXR0b24gKm8pOyB9Cm5hbWVzcGFjZSBHdGsKewpjbGFzcyBCdXR0b24gOiBwdWJsaWMgQmlu
IHsKCnB1YmxpYzoKICB0eXBlZGVmIEJ1dHRvbiAgICAgICAgICBDcHBPYmplY3RUeXBlOwogIHR5
cGVkZWYgQnV0dG9uX0NsYXNzICAgIENwcENsYXNzVHlwZTsKICB0eXBlZGVmIEd0a0J1dHRvbiAg
ICAgICAgICAgQmFzZU9iamVjdFR5cGU7CiAgdHlwZWRlZiBHdGtCdXR0b25DbGFzcyAgICAgIEJh
c2VDbGFzc1R5cGU7Cgpwcml2YXRlOgogIGZyaWVuZCBjbGFzcyBCdXR0b25fQ2xhc3M7CiAgc3Rh
dGljIENwcENsYXNzVHlwZSBidXR0b25fY2xhc3M7CgogIEJ1dHRvbihjb25zdCBCdXR0b24mKTsK
ICBCdXR0b24mIG9wZXJhdG9yPShjb25zdCBCdXR0b24mKTsgIAoKcHJvdGVjdGVkOgogIHZvaWQg
ICBpbml0aWFsaXplX2NsYXNzKCk7CiAgZXhwbGljaXQgQnV0dG9uKEd0a0J1dHRvbiAqY2FzdGl0
ZW0pOwoKcHVibGljOgogIHN0YXRpYyBHdGtUeXBlIGdldF90eXBlKCk7CiAgR3RrQnV0dG9uKiBn
dGtvYmooKSAgICAgICAgICAgICB7IHJldHVybiAoR3RrQnV0dG9uKikoZ3Rrb2JqZWN0KTsgfQog
IGNvbnN0IEd0a0J1dHRvbiogZ3Rrb2JqKCkgY29uc3QgeyByZXR1cm4gKEd0a0J1dHRvbiopKGd0
a29iamVjdCk7IH0KICBzdGF0aWMgYm9vbCBpc0EoT2JqZWN0ICpjaGVja2Nhc3QpOwoKICAgCiAg
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNpZ25hbF9uYW1lc1tdOwoKICB2aXJ0dWFsIH5CdXR0
b24oKTsKCnByaXZhdGU6CgpwdWJsaWM6CiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAK
ICBCdXR0b24oKTsKCgoKICAgCiAgIAogICAKICAgCiAgZXhwbGljaXQgQnV0dG9uKGNvbnN0IHN0
cmluZyAmbGFiZWwsZ2Zsb2F0IHg9MC41LGdmbG9hdCB5PTAuNSk7CgogICAKCgogIHZvaWQgc2V0
X3JlbGllZihHdGtSZWxpZWZTdHlsZSBuZXdzdHlsZSk7CgogICAKCgogIEd0a1JlbGllZlN0eWxl
IGdldF9yZWxpZWYoKSBjb25zdDsKCiAgIAogICAKICAgCgoKICAgCgoKICAgCiAgIAogICAKCgog
ICAKCgogICAKCnB1YmxpYzoKCiAgdW5pb24KICAgIHsKICAgICAgQ3BwT2JqZWN0VHlwZSAqIGJ1
dHRvbl9zZWxmOwogICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDA8dm9pZCxDcHBPYmplY3RUeXBl
LEJhc2VPYmplY3RUeXBlLDAsJmd0a19idXR0b25fcHJlc3NlZD4gcHJlc3NlZDsKICAgICAgR3Rr
OjpFbWl0UHJveHlTaWduYWwwPHZvaWQsQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwxLCZn
dGtfYnV0dG9uX3JlbGVhc2VkPiByZWxlYXNlZDsKICAgICAgR3RrOjpFbWl0UHJveHlTaWduYWww
PHZvaWQsQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwyLCZndGtfYnV0dG9uX2NsaWNrZWQ+
IGNsaWNrZWQ7CiAgICAgIEd0azo6RW1pdFByb3h5U2lnbmFsMDx2b2lkLENwcE9iamVjdFR5cGUs
QmFzZU9iamVjdFR5cGUsMywmZ3RrX2J1dHRvbl9lbnRlcj4gZW50ZXI7CiAgICAgIEd0azo6RW1p
dFByb3h5U2lnbmFsMDx2b2lkLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsNCwmZ3RrX2J1
dHRvbl9sZWF2ZT4gbGVhdmU7CiAgICB9OwoKcHJvdGVjdGVkOgogICAKICAgIHZpcnR1YWwgdm9p
ZCBwcmVzc2VkX2ltcGwoKTsKICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlZF9pbXBsKCk7CiAgICB2
aXJ0dWFsIHZvaWQgY2xpY2tlZF9pbXBsKCk7CiAgICB2aXJ0dWFsIHZvaWQgZW50ZXJfaW1wbCgp
OwogICAgdmlydHVhbCB2b2lkIGxlYXZlX2ltcGwoKTsKCn07Cgp9CgoKIAogCiAKIAogCiAKIAoK
CiMgMTYgInRfZ3RrLmNwcCIgMgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0tL21haW4uaCIg
MQogCiAKCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ3Rr
LTEuMi9ndGsvZ3RrbWFpbi5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK
CgpleHRlcm4gIkMiIHsKCgogCgoKCgogCgoKCgoKCnR5cGVkZWYgdm9pZAkoKkd0a01vZHVsZUlu
aXRGdW5jKQkoZ2ludAkJKmFyZ2MsCgkJCQkJIGdjaGFyCSAgICAgICoqKmFyZ3YpOwp0eXBlZGVm
IGdpbnQJKCpHdGtLZXlTbm9vcEZ1bmMpCShHdGtXaWRnZXQJKmdyYWJfd2lkZ2V0LAoJCQkJCSBH
ZGtFdmVudEtleQkqZXZlbnQsCgkJCQkJIGdwb2ludGVyCSBmdW5jX2RhdGEpOwoKIAoKZXh0ZXJu
IGNvbnN0IGd1aW50IGd0a19tYWpvcl92ZXJzaW9uOwpleHRlcm4gY29uc3QgZ3VpbnQgZ3RrX21p
bm9yX3ZlcnNpb247CmV4dGVybiBjb25zdCBndWludCBndGtfbWljcm9fdmVyc2lvbjsKZXh0ZXJu
IGNvbnN0IGd1aW50IGd0a19iaW5hcnlfYWdlOwpleHRlcm4gY29uc3QgZ3VpbnQgZ3RrX2ludGVy
ZmFjZV9hZ2U7CmdjaGFyKiBndGtfY2hlY2tfdmVyc2lvbiAoZ3VpbnQJcmVxdWlyZWRfbWFqb3Is
CgkJCSAgZ3VpbnQJcmVxdWlyZWRfbWlub3IsCgkJCSAgZ3VpbnQJcmVxdWlyZWRfbWljcm8pOwoK
CiAKCnZvaWQJICAgZ3RrX2luaXQJCSAoaW50CSAgICAgICAqYXJnYywKCQkJCSAgY2hhcgkgICAg
ICoqKmFyZ3YpOwpnYm9vbGVhbiAgIGd0a19pbml0X2NoZWNrICAgICAgICAoaW50CSAgICAgICAq
YXJnYywKCQkJCSAgY2hhcgkgICAgICoqKmFyZ3YpOwp2b2lkCSAgIGd0a19leGl0CQkgKGdpbnQJ
CWVycm9yX2NvZGUpOwpnY2hhcioJICAgZ3RrX3NldF9sb2NhbGUJICh2b2lkKTsKZ2ludAkgICBn
dGtfZXZlbnRzX3BlbmRpbmcJICh2b2lkKTsKCiAKCgoKdm9pZCAgZ3RrX21haW5fZG9fZXZlbnQg
ICAgICAgICAgKEdka0V2ZW50ICAgICAgICAgICAqZXZlbnQpOwoKdm9pZAkgICBndGtfbWFpbgkJ
ICh2b2lkKTsKZ3VpbnQJICAgZ3RrX21haW5fbGV2ZWwJICh2b2lkKTsKdm9pZAkgICBndGtfbWFp
bl9xdWl0CSAodm9pZCk7CmdpbnQJICAgZ3RrX21haW5faXRlcmF0aW9uCSAodm9pZCk7CiAKZ2lu
dAkgICBndGtfbWFpbl9pdGVyYXRpb25fZG8gKGdib29sZWFuIGJsb2NraW5nKTsKCmdpbnQJICAg
Z3RrX3RydWUJCSAgICh2b2lkKTsKZ2ludAkgICBndGtfZmFsc2UJCSAgICh2b2lkKTsKCnZvaWQJ
ICAgZ3RrX2dyYWJfYWRkCQkgICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0KTsKR3RrV2lkZ2V0
KiBndGtfZ3JhYl9nZXRfY3VycmVudAkgICAodm9pZCk7CnZvaWQJICAgZ3RrX2dyYWJfcmVtb3Zl
CSAgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQpOwoKdm9pZAkgICBndGtfaW5pdF9hZGQJCSAg
IChHdGtGdW5jdGlvbgkgICAgICAgZnVuY3Rpb24sCgkJCQkgICAgZ3BvaW50ZXIJICAgICAgIGRh
dGEpOwp2b2lkCSAgIGd0a19xdWl0X2FkZF9kZXN0cm95CSAgIChndWludAkgICAgICAgbWFpbl9s
ZXZlbCwKCQkJCSAgICBHdGtPYmplY3QJICAgICAgKm9iamVjdCk7Cmd1aW50CSAgIGd0a19xdWl0
X2FkZAkJICAgKGd1aW50CSAgICAgICBtYWluX2xldmVsLAoJCQkJICAgIEd0a0Z1bmN0aW9uCSAg
ICAgICBmdW5jdGlvbiwKCQkJCSAgICBncG9pbnRlcgkgICAgICAgZGF0YSk7Cmd1aW50CSAgIGd0
a19xdWl0X2FkZF9mdWxsCSAgIChndWludAkgICAgICAgbWFpbl9sZXZlbCwKCQkJCSAgICBHdGtG
dW5jdGlvbgkgICAgICAgZnVuY3Rpb24sCgkJCQkgICAgR3RrQ2FsbGJhY2tNYXJzaGFsIG1hcnNo
YWwsCgkJCQkgICAgZ3BvaW50ZXIJICAgICAgIGRhdGEsCgkJCQkgICAgR3RrRGVzdHJveU5vdGlm
eSAgIGRlc3Ryb3kpOwp2b2lkCSAgIGd0a19xdWl0X3JlbW92ZQkgICAoZ3VpbnQJICAgICAgIHF1
aXRfaGFuZGxlcl9pZCk7CnZvaWQJICAgZ3RrX3F1aXRfcmVtb3ZlX2J5X2RhdGEgKGdwb2ludGVy
CSAgICAgICBkYXRhKTsKZ3VpbnQJICAgZ3RrX3RpbWVvdXRfYWRkCSAgIChndWludDMyCSAgICAg
ICBpbnRlcnZhbCwKCQkJCSAgICBHdGtGdW5jdGlvbgkgICAgICAgZnVuY3Rpb24sCgkJCQkgICAg
Z3BvaW50ZXIJICAgICAgIGRhdGEpOwpndWludAkgICBndGtfdGltZW91dF9hZGRfZnVsbAkgICAo
Z3VpbnQzMgkgICAgICAgaW50ZXJ2YWwsCgkJCQkgICAgR3RrRnVuY3Rpb24JICAgICAgIGZ1bmN0
aW9uLAoJCQkJICAgIEd0a0NhbGxiYWNrTWFyc2hhbCBtYXJzaGFsLAoJCQkJICAgIGdwb2ludGVy
CSAgICAgICBkYXRhLAoJCQkJICAgIEd0a0Rlc3Ryb3lOb3RpZnkgICBkZXN0cm95KTsKdm9pZAkg
ICBndGtfdGltZW91dF9yZW1vdmUJICAgKGd1aW50CSAgICAgICB0aW1lb3V0X2hhbmRsZXJfaWQp
OwoKZ3VpbnQJICAgZ3RrX2lkbGVfYWRkCQkgICAoR3RrRnVuY3Rpb24JICAgICAgIGZ1bmN0aW9u
LAoJCQkJICAgIGdwb2ludGVyCSAgICAgICBkYXRhKTsKZ3VpbnQJICAgZ3RrX2lkbGVfYWRkX3By
aW9yaXR5ICAgKGdpbnQJICAgICAgIHByaW9yaXR5LAoJCQkJICAgIEd0a0Z1bmN0aW9uCSAgICAg
ICBmdW5jdGlvbiwKCQkJCSAgICBncG9pbnRlcgkgICAgICAgZGF0YSk7Cmd1aW50CSAgIGd0a19p
ZGxlX2FkZF9mdWxsCSAgIChnaW50CSAgICAgICBwcmlvcml0eSwKCQkJCSAgICBHdGtGdW5jdGlv
bgkgICAgICAgZnVuY3Rpb24sCgkJCQkgICAgR3RrQ2FsbGJhY2tNYXJzaGFsIG1hcnNoYWwsCgkJ
CQkgICAgZ3BvaW50ZXIJICAgICAgIGRhdGEsCgkJCQkgICAgR3RrRGVzdHJveU5vdGlmeSAgIGRl
c3Ryb3kpOwp2b2lkCSAgIGd0a19pZGxlX3JlbW92ZQkgICAoZ3VpbnQJICAgICAgIGlkbGVfaGFu
ZGxlcl9pZCk7CnZvaWQJICAgZ3RrX2lkbGVfcmVtb3ZlX2J5X2RhdGEgKGdwb2ludGVyCSAgICAg
ICBkYXRhKTsKZ3VpbnQJICAgZ3RrX2lucHV0X2FkZF9mdWxsCSAgIChnaW50CSAgICAgICBzb3Vy
Y2UsCgkJCQkgICAgR2RrSW5wdXRDb25kaXRpb24gIGNvbmRpdGlvbiwKCQkJCSAgICBHZGtJbnB1
dEZ1bmN0aW9uICAgZnVuY3Rpb24sCgkJCQkgICAgR3RrQ2FsbGJhY2tNYXJzaGFsIG1hcnNoYWws
CgkJCQkgICAgZ3BvaW50ZXIJICAgICAgIGRhdGEsCgkJCQkgICAgR3RrRGVzdHJveU5vdGlmeSAg
IGRlc3Ryb3kpOwp2b2lkCSAgIGd0a19pbnB1dF9yZW1vdmUJICAgKGd1aW50CSAgICAgICBpbnB1
dF9oYW5kbGVyX2lkKTsKCgpndWludAkgICBndGtfa2V5X3Nub29wZXJfaW5zdGFsbCAoR3RrS2V5
U25vb3BGdW5jIHNub29wZXIsCgkJCQkgICAgZ3BvaW50ZXIJICAgIGZ1bmNfZGF0YSk7CnZvaWQJ
ICAgZ3RrX2tleV9zbm9vcGVyX3JlbW92ZSAgKGd1aW50CSAgICBzbm9vcGVyX2hhbmRsZXJfaWQp
OwogIApHZGtFdmVudCogIGd0a19nZXRfY3VycmVudF9ldmVudCAgICh2b2lkKTsKR3RrV2lkZ2V0
KiBndGtfZ2V0X2V2ZW50X3dpZGdldAkgICAoR2RrRXZlbnQJICAgKmV2ZW50KTsKCgogCgp2b2lk
ICAgICAgIGd0a19wcm9wYWdhdGVfZXZlbnQgICAgIChHdGtXaWRnZXQgICAgICAgICAqd2lkZ2V0
LAoJCQkJICAgIEdka0V2ZW50ICAgICAgICAgICpldmVudCk7CgoKfQoKCgoKIyAyNyAiL29wdC9n
dGsvaW5jbHVkZS9ndGstLS9tYWluLmgiIDIKCgoKCm5hbWVzcGFjZSBHdGsKewpjbGFzcyBXaWRn
ZXQ7CgogCgogCmNsYXNzIElkbGVTaWcKewpwdWJsaWM6CiAgdHlwZWRlZiBTaWdDOjpDYWxsYmFj
azA8Z2ludD4gQ2FsbGJhY2s7CiAgdHlwZWRlZiBTaWdDOjpTbG90MDxnaW50PiBTbG90VHlwZTsK
CnByb3RlY3RlZDoKICBzdGF0aWMgZ2ludCBndGtfY2FsbGJhY2soZ3BvaW50ZXIgZCk7CgpwdWJs
aWM6CiAgQ29ubmVjdGlvbiBjb25uZWN0KGNvbnN0IFNsb3RUeXBlICZzZCxnaW50IHByaW9yaXR5
ID0gMjAwICApOwp9OwoKIApjbGFzcyBUaW1lb3V0U2lnCnsKcHVibGljOgogIHR5cGVkZWYgU2ln
Qzo6Q2FsbGJhY2swPGdpbnQ+IENhbGxiYWNrOwogIHR5cGVkZWYgU2lnQzo6U2xvdDA8Z2ludD4g
U2xvdFR5cGU7Cgpwcm90ZWN0ZWQ6CiAgc3RhdGljIGdpbnQgZ3RrX2NhbGxiYWNrKGdwb2ludGVy
IGQpOwoKcHVibGljOgogIENvbm5lY3Rpb24gY29ubmVjdChjb25zdCBTbG90VHlwZSAmc2QsZ3Vp
bnQzMiBpbnRlcnZhbCk7Cn07CgogCmNsYXNzIEtleVNub29wZXJTaWcKewpwdWJsaWM6CiAgdHlw
ZWRlZiBTaWdDOjpDYWxsYmFjazI8Z2ludCxXaWRnZXQqLEdka0V2ZW50S2V5Kj4gICAgICAgICBD
YWxsYmFjazsKICB0eXBlZGVmIFNpZ0M6OlNsb3QyPGdpbnQsV2lkZ2V0KixHZGtFdmVudEtleSo+
ICAgICAgICAgICAgIFNsb3RUeXBlOwoKcHJvdGVjdGVkOgogIHN0YXRpYyBnaW50IGd0a19jYWxs
YmFjayhHdGtXaWRnZXQqIHcsR2RrRXZlbnRLZXkqIGssZ3BvaW50ZXIgZCk7CgpwdWJsaWM6CiAg
Q29ubmVjdGlvbiBjb25uZWN0KGNvbnN0IFNsb3RUeXBlICZzZCk7Cn07CgogCmNsYXNzIElucHV0
U2lnCnsKcHVibGljOgogCiAKIAogCiAKCiAgdHlwZWRlZiBTaWdDOjpDYWxsYmFjazI8dm9pZCxn
aW50LEdka0lucHV0Q29uZGl0aW9uPiAgICAgICAgIENhbGxiYWNrOwogIHR5cGVkZWYgU2lnQzo6
U2xvdDI8dm9pZCxnaW50LEdka0lucHV0Q29uZGl0aW9uPiAgICAgICAgICAgICBTbG90VHlwZTsK
CnByb3RlY3RlZDoKICBzdGF0aWMgdm9pZCBndGtfY2FsbGJhY2soZ3BvaW50ZXIgICAgICAgICAg
ZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICAgc291cmNl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBHZGtJbnB1dENvbmRpdGlvbiBjb25kaXRpb24p
OwoKcHVibGljOgogIENvbm5lY3Rpb24gY29ubmVjdChjb25zdCBTbG90VHlwZSAmc2QsCiAgICAg
ICAgICAgICAgICAgICAgIGdpbnQgc291cmNlLAogICAgICAgICAgICAgICAgICAgICBHZGtJbnB1
dENvbmRpdGlvbiBjb25kaXRpb24pOwp9OwoKIApjbGFzcyBRdWl0U2lnCnsKcHVibGljOgogIHR5
cGVkZWYgU2lnQzo6Q2FsbGJhY2swPGdpbnQ+IENhbGxiYWNrOwogIHR5cGVkZWYgdm9pZCBTVHlw
ZTsKICB0eXBlZGVmIGdpbnQgUlR5cGU7CiAgdHlwZWRlZiBTaWdDOjpTbG90MDxTVHlwZT4gT3V0
U2xvdFR5cGU7CiAgdHlwZWRlZiBTaWdDOjpTbG90MDxSVHlwZT4gSW5TbG90VHlwZTsKICB0eXBl
ZGVmIFNpZ0M6OkNhbGxEYXRhT2JqMjxPdXRTbG90VHlwZTo6RnVuYyxnaW50PiBEYXRhOwoKcHJv
dGVjdGVkOgogIHN0YXRpYyBnaW50IGd0a19jYWxsYmFjayhncG9pbnRlciAgICAgICAgICBkYXRh
KTsKICBzdGF0aWMgdm9pZCBjYWxsYmFjayh2b2lkKiBkYXRhKTsKCnB1YmxpYzoKICBDb25uZWN0
aW9uIGNvbm5lY3QoY29uc3QgSW5TbG90VHlwZSAmc2QsZ3VpbnQgbWFpbl9sZXZlbD0wKTsKICBP
dXRTbG90VHlwZSBzbG90KCk7CiAgdm9pZCBlbWl0KCkgICAgICAgeyBjYWxsYmFjaygwKTsgfQog
IHZvaWQgb3BlcmF0b3IoKSgpIHsgY2FsbGJhY2soMCk7IH0KfTsKCgoKIAoKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCmNsYXNzIE1haW4gOiBwdWJsaWMgU2ln
Qzo6T2JqZWN0IHsKICBmcmllbmQgY2xhc3MgUXVpdFNpZzsKcHJvdGVjdGVkOgogIHN0YXRpYyBN
YWluICppbnN0YW5jZV87CnB1YmxpYzoKICAgCiAgc3RhdGljIE1haW4gKmluc3RhbmNlKCkgeyBy
ZXR1cm4gaW5zdGFuY2VfOyB9CgogIE1haW4oaW50ICphcmdjLCBjaGFyICoqKmFyZ3YsIGJvb2wg
aGF2ZV9sb2NhbGU9ZmFsc2UpOwogIE1haW4oaW50ICZhcmdjLCBjaGFyICoqJmFyZ3YsIGJvb2wg
aGF2ZV9sb2NhbGU9ZmFsc2UpOwogIH5NYWluKCk7CgogICAKICAgCiAgIAogICAKICBzdGF0aWMg
dm9pZCBydW4oKSAgICAgICAgICAgICB7aW5zdGFuY2VfLT5ydW5faW1wbCgpO30KICBzdGF0aWMg
dm9pZCBpdGVyYXRpb24oYm9vbCBibG9ja2luZz0gKCEgKDApICkgKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHtpbnN0YW5jZV8tPml0ZXJhdGlvbl9pbXBsKGJsb2NraW5nKTt9CiAg
c3RhdGljIGdpbnQgZXZlbnRzX3BlbmRpbmcoKSAge3JldHVybiBpbnN0YW5jZV8tPmV2ZW50c19w
ZW5kaW5nX2ltcGwoKTt9CgogICAKICAgCiAgIAogIHN0YXRpYyB2b2lkIGdyYWJfYWRkKFdpZGdl
dCAmd2lkZ2V0KTsKCiAgIAogIHN0YXRpYyB2b2lkIGdyYWJfcmVtb3ZlKFdpZGdldCAmd2lkZ2V0
KTsKCiAgIAogIHN0YXRpYyBXaWRnZXQqIGdyYWJfZ2V0X2N1cnJlbnQoKTsKCiAgc3RhdGljIHZv
aWQgZ3RrX3RydWUoKTsKICBzdGF0aWMgdm9pZCBndGtfZmFsc2UoKTsKCiAgIAogICAKICAgCiAg
IAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICBz
dGF0aWMgSWRsZVNpZyBpZGxlOwoKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAK
ICAgCiAgIAogICAKICAgCiAgc3RhdGljIFRpbWVvdXRTaWcgdGltZW91dDsKCiAgIAogICAKICAg
CiAgIAogICAKICAgCiAgIAogICAKICBzdGF0aWMgS2V5U25vb3BlclNpZyBrZXlfc25vb3BlcjsK
CiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAK
ICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogIHN0YXRpYyBJbnB1dFNpZyBpbnB1dDsK
CiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAK
ICAgCiAgIAogICAKICAgCiAgIAogIHN0YXRpYyBRdWl0U2lnIHF1aXQ7Cgpwcm90ZWN0ZWQ6CiAg
TWFpbigpOwoKICB2b2lkIGluaXQoaW50ICphcmdjLCBjaGFyICoqKmFyZ3YsCgkgICAgYm9vbCBo
YXZlX2xvY2FsZSk7CgogIHZvaWQgaW5pdF9ndGttbV9pbnRlcm5hbHMoKTsKCiAgdmlydHVhbCB2
b2lkIHJ1bl9pbXBsKCk7CiAgdmlydHVhbCB2b2lkIHF1aXRfaW1wbCgpOwogIHZpcnR1YWwgdm9p
ZCBpdGVyYXRpb25faW1wbChib29sIGJsb2NraW5nKTsKICB2aXJ0dWFsIGdpbnQgZXZlbnRzX3Bl
bmRpbmdfaW1wbCgpOwp9OwoKdHlwZWRlZiBNYWluIEtpdDsKCn0KCgoKIyAxNyAidF9ndGsuY3Bw
IiAyCgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIERhdHVtCnsKcHVibGljOgogICAgRGF0
dW0oY29uc3Qgc3RyaW5nICZzKTsKICAgIHN0cmluZyBhc19zdHJpbmcoKSBjb25zdDsKICAgIG9w
ZXJhdG9yIHN0cmluZygpIGNvbnN0OwogICAgb3BlcmF0b3IgY29uc3QgY2hhciAqKCkgY29uc3Q7
CiAgICBib29sIG9wZXJhdG9yPChjb25zdCBEYXR1bSAmb3RoZXIpIGNvbnN0IHsKCWlmICh0eXBl
PT1vdGhlci50eXBlKXsKCSAgICBzd2l0Y2ggKHR5cGUpewoJICAgIGNhc2UgSU5UOiByZXR1cm4g
aXZhbCA8IG90aGVyLml2YWw7CgkgICAgY2FzZSBET1VCTEU6IHJldHVybiBkdmFsIDwgb3RoZXIu
ZHZhbDsKCSAgICBjYXNlIFNUUklORzogcmV0dXJuIHN2YWwgPCBvdGhlci5zdmFsOwoJICAgIH0K
CX0gZWxzZSB7CgkgICAgcmV0dXJuIHR5cGUgPCBvdGhlci50eXBlOwoJfQogICAgfQpwcml2YXRl
OgogICAgZW51bSB7IElOVCwgRE9VQkxFLCBTVFJJTkd9IHR5cGU7CiAgICBpbnQgaXZhbDsKICAg
IGRvdWJsZSBkdmFsOwogICAgc3RyaW5nIHN2YWw7Cn07CgpEYXR1bTo6RGF0dW0oY29uc3Qgc3Ry
aW5nICZzKToKICAgIHN2YWwocykKewogICAgaXN0cmluZ3N0cmVhbSBpbihzKTsKICAgIHN0cmlu
ZyByZXN0OwoKICAgIGlmIChpbiA+PiBpdmFsICYmICEgKGluID4+IHJlc3QpKSB7Cgl0eXBlID0g
SU5UOwogICAgfSBlbHNlIHsKCWluLmNsZWFyKCk7Cglpbi5zZWVrZygwKTsKCWlmIChpbiA+PiBk
dmFsICYmICEgKGluID4+IHJlc3QpKXsKCSAgICB0eXBlID0gRE9VQkxFOwoJfSBlbHNlIHsKCSAg
ICB0eXBlID0gU1RSSU5HOwoJfQogICAgfQp9CgpEYXR1bTo6b3BlcmF0b3Igc3RyaW5nICgpIGNv
bnN0CnsKICAgIHJldHVybiB0aGlzLT5zdmFsOwp9CgpEYXR1bTo6b3BlcmF0b3IgY29uc3QgY2hh
ciAqICgpIGNvbnN0CnsKICAgIHJldHVybiB0aGlzLT5zdmFsLmNfc3RyKCk7Cn0KCnR5cGVkZWYg
dmVjdG9yPERhdHVtPiBSb3c7CgpjbGFzcyBDb21wYXJhdG9yIDogYmluYXJ5X2Z1bmN0aW9uPFJv
dyxSb3csYm9vbD4KewpwdWJsaWM6CiAgICBDb21wYXJhdG9yKGludCBzKTogc2xvdChzKSB7fTsK
ICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBSb3cgJnIxLCBjb25zdCBSb3cgJnIyKXsKCXJldHVy
biByMVtzbG90XSA8IHIyW3Nsb3RdOwogICAgfQpwcml2YXRlOgogICAgaW50IHNsb3Q7Cn07CgoK
Y2xhc3MgRGVtbwp7CnB1YmxpYzoKICAgIERlbW8oaW50IGFyZ2MsIGNoYXIgKiphcmd2KTogYXJn
YyhhcmdjKSwgYXJndihhcmd2KSB7fTsKICAgIGludCBtYWluKCk7CiAgICB2b2lkIGNvbHVtbl9j
bGlja2VkKGludCk7CnByaXZhdGU6CiAgICBpbnQgYXJnYzsKICAgIGNoYXIgKiphcmd2Owp9OwoK
dm9pZCBEZW1vOjpjb2x1bW5fY2xpY2tlZChpbnQgd2hpY2gpCnsKICAgIGNvdXQgPDwgd2hpY2gg
PDwgZW5kbDsKfQoKCmludCBEZW1vOjptYWluKCkKewogICAgaWYgKGFyZ2MgPCAyKXsKCWNlcnIg
PDwgIlVzYWdlOiAiIDw8IGFyZ3ZbMF0gPDwgIiBkYXRhZmlsZSIgPDwgZW5kbDsKCXJldHVybiAt
MTsKICAgIH0KICAgIEd0azo6TWFpbiBtYWluKGFyZ2MsIGFyZ3YpOwoKICAgIGNoYXIgKmZpbGVu
YW1lID0gYXJndlsxXTsKCiAgICBpZnN0cmVhbSBpbnB1dChmaWxlbmFtZSk7CiAgICBpZiAoIWlu
cHV0KXsKCXBlcnJvcihmaWxlbmFtZSk7CglleGl0KC0xKTsKICAgIH0KICAgIGNvbnN0IGludCBi
dWZzaXplPTIwMDsKICAgIGNoYXIgbGluZWJ1ZltidWZzaXplXTsKICAgIHZlY3RvciA8Um93PiBk
YXRhOwogICAgdmVjdG9yIDxzdHJpbmc+IGNvbHVtbkhlYWRlcnM7CiAgICBib29sIGZpcnN0Um93
ID0gdHJ1ZTsKICAgIGludCBuQ29sczsKICAgIAogICAgd2hpbGUgKGlucHV0LmdldGxpbmUobGlu
ZWJ1ZiwgYnVmc2l6ZSkpewoJaXN0cmluZ3N0cmVhbSBsaW5lKGxpbmVidWYpOwoJc3RyaW5nIHRv
a2VuOwoJUm93IHI7CgkgCgl3aGlsZSAobGluZSA+PiB0b2tlbikgewoJICAgIGlmIChmaXJzdFJv
dyl7CgkJY29sdW1uSGVhZGVycy5wdXNoX2JhY2sodG9rZW4pOwoJICAgIH0gZWxzZSB7CgkJRGF0
dW0gZCh0b2tlbik7CgkJci5wdXNoX2JhY2soZCk7CgkgICAgfQoJfQoJaWYgKCFmaXJzdFJvdykK
CSAgICBkYXRhLnB1c2hfYmFjayhyKTsKCWZpcnN0Um93ID0gZmFsc2U7CiAgICB9CgogICAgbkNv
bHMgPSBjb2x1bW5IZWFkZXJzLnNpemUoKTsKCiAgICBHdGs6OkNMaXN0ICpjbGlzdCA9IG1hbmFn
ZShuZXcgR3RrOjpDTGlzdChjb2x1bW5IZWFkZXJzKSk7CiAgICBmb3IgKGludCBpPTA7IGk8bkNv
bHM7ICsraSl7CgljbGlzdC0+Y29sdW1uKGkpLnNldF9hY3RpdmUoKTsKICAgIH0KCiAgICAgCiAg
ICAgCiAgICBmb3IgKHZlY3RvcjxSb3c+OjppdGVyYXRvciByaSA9IGRhdGEuYmVnaW4oKTsKCSBy
aSA8IGRhdGEuZW5kKCk7ICsrcmkpewoJY2xpc3QtPnJvd3MoKS5wdXNoX2JhY2soICpyaSApOwog
ICAgfQoKICAgIGNsaXN0LT5jbGlja19jb2x1bW4uY29ubmVjdChTaWdDOjpiaW5kPGludD5TaWdD
OjpzbG90KHRoaXMsICZEZW1vOjpjb2x1bW5fY2xpY2tlZCkpOwogICAgR3RrOjpTY3JvbGxlZFdp
bmRvdyAqc2Nyb2xsZWRfd2luZG93ID0gbWFuYWdlKG5ldyBHdGs6OlNjcm9sbGVkV2luZG93KCkp
OwoKICAgIHNjcm9sbGVkX3dpbmRvdy0+c2V0X3BvbGljeShHVEtfUE9MSUNZX0FVVE9NQVRJQywg
R1RLX1BPTElDWV9BTFdBWVMpOwogICAgc2Nyb2xsZWRfd2luZG93LT5hZGQoKmNsaXN0KTsKCiAg
ICBHdGs6OldpbmRvdyAqd2luZG93ID0gbWFuYWdlKG5ldyBHdGs6OldpbmRvdyhHVEtfV0lORE9X
X1RPUExFVkVMKSk7CiAgICB3aW5kb3ctPnNldF91c2l6ZSgzMDAsIDE1MCk7CiAgICB3aW5kb3ct
PnNldF90aXRsZSgiRXhhbXBsZSIpOwogICAgd2luZG93LT5hZGQoKnNjcm9sbGVkX3dpbmRvdyk7
CiAgICB3aW5kb3ctPnNob3dfYWxsKCk7CiAgICBtYWluLnJ1bigpOwogICAgcmV0dXJuIDA7Cn0K
CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpewogICAgRGVtbyBkKGFyZ2MsIGFyZ3Yp
OwogICAgcmV0dXJuIGQubWFpbigpOwp9Cg==


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: c++/3085: Internal compiler error compiling a gtk-- test prog.
@ 2001-06-14 19:33 rodrigc
  0 siblings, 0 replies; 2+ messages in thread
From: rodrigc @ 2001-06-14 19:33 UTC (permalink / raw)
  To: cgw, gcc-bugs, gcc-prs, nobody

Synopsis: Internal compiler error compiling a gtk-- test prog.

State-Changed-From-To: open->closed
State-Changed-By: rodrigc
State-Changed-When: Thu Jun 14 19:33:07 2001
State-Changed-Why:
    With gcc version 3.0 20010614 (prerelease),
    your example does not result in an Internal Compiler Error,
    but it results in the compilation error:
    With: gcc version 3.0 20010614 (prerelease) 
    your test case does not result in an Internal Compiler Error.
    However, it does not compile due to many compilation errors.
    
    You may wish to try a binary snapshot of a current gcc release at:
    http://www.codesourcery.com/gcc_binary_snapshots

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view&pr=3085&database=gcc


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2001-06-14 19:33 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-06-08  8:46 c++/3085: Internal compiler error compiling a gtk-- test prog cgw
2001-06-14 19:33 rodrigc

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).