This is the mail archive of the
gcc-prs@gcc.gnu.org
mailing list for the GCC project.
c++/1923: Internal compiler error in extract_insn
- To: gcc-gnats at gcc dot gnu dot org
- Subject: c++/1923: Internal compiler error in extract_insn
- From: markd at cse dot ucsc dot edu
- Date: 9 Feb 2001 17:31:42 -0000
- Reply-To: markd at cse dot ucsc dot edu
>Number: 1923
>Category: c++
>Synopsis: Internal compiler error in extract_insn
>Confidential: no
>Severity: serious
>Priority: high
>Responsible: unassigned
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Fri Feb 09 09:36:01 PST 2001
>Closed-Date:
>Last-Modified:
>Originator: markd@cse.ucsc.edu
>Release: 2.96 20000731
>Organization:
>Environment:
Red Hat Linux 7.0
>Description:
g++ -frtti -c BUG.cc
../../../src/framework/dp-structs/ProbMatrixAllocator.h: In method `void
ProbMatrixAllocatorTmpl<PROBARRAY>::allocArrays (int, ProbArray **) [with PROBARRAY = ProbArray]':
/usr/include/g++-3/stl_alloc.h:161: instantiated from here
../../../src/framework/dp-structs/ProbMatrixAllocator.h:85: Unrecognizable insn:
(insn 160 380 162 (set (reg:DI 68)
(mem/s/u (symbol_ref:SI ("_4Prob.ZERO")) 0)) -1 (nil)
(nil))
../../../src/framework/dp-structs/ProbMatrixAllocator.h:85: Internal compiler error in extract_insn, \
at
recog.c:2106
Please submit a full bug report.
>How-To-Repeat:
g++ -frtti -c BUG.cc
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="BUG.cc"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="BUG.cc"
IyAxICJQcm9iTWF0cml4LmNjIgojIDE3ICJQcm9iTWF0cml4LmNjIgojIDE5ICJQcm9iTWF0cml4
LmgiIDEKIyAxNiAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2IuaCIgMQojIDI4ICIv
dXNyL2luY2x1ZGUvbWF0aC5oIiAxIDMKIyAyODQgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAx
IDMKIyAzMTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMjggIi91c3IvaW5jbHVkZS9t
YXRoLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgoKIyA2NCAiL3Vzci9pbmNsdWRlL21h
dGguaCIgMwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCmV4dGVybiBk
b3VibGUgYWNvcyAoIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYWNvcyAo
IGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhc2luICggZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hc2luICggZG91YmxlIF9feCkgdGhyb3cgKCk7Cgpl
eHRlcm4gZG91YmxlIGF0YW4gKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X2F0YW4gKCBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbjIgKCBkb3Vi
bGUgX195LCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4yICggZG91
YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBjb3MgKCBkb3Vi
bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NvcyAoIGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKZXh0ZXJuIGRvdWJsZSBzaW4gKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX3NpbiAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW4gKCBk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3RhbiAoIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKIyA3OCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGRv
dWJsZSBjb3NoICggZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19jb3NoICgg
ZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHNpbmggKCBkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpbmggKCBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4
dGVybiBkb3VibGUgdGFuaCAoIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
dGFuaCAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGFjb3NoICggZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hY29zaCAoIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhc2luaCAoIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gZG91YmxlIF9fYXNpbmggKCBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUg
YXRhbmggKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW5oICggZG91
YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBleHAgKCBkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cCAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKIyAx
MDYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBkb3VibGUgZnJleHAg
KCBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
ZnJleHAgKCBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBk
b3VibGUgbGRleHAgKCBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX19sZGV4cCAoIGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsK
CgpleHRlcm4gZG91YmxlIGxvZyAoIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fbG9nICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxMCAoIGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nMTAgKCBkb3VibGUgX194KSB0
aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG1vZGYgKCBkb3VibGUgX194LCBkb3VibGUgKl9faXB0
cikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19tb2RmICggZG91YmxlIF9feCwgZG91YmxlICpf
X2lwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGV4cG0xICggZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19leHBtMSAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4
dGVybiBkb3VibGUgbG9nMXAgKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X2xvZzFwICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2diICggZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2diICggZG91YmxlIF9feCkgdGhy
b3cgKCk7CiMgMTQzICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZG91
YmxlIHBvdyAoIGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fcG93ICggZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJs
ZSBzcXJ0ICggZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zcXJ0ICggZG91
YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgaHlwb3QgKCBkb3VibGUgX194LCBk
b3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2h5cG90ICggZG91YmxlIF9feCwg
ZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGNicnQgKCBkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NicnQgKCBkb3VibGUgX194KSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGRvdWJsZSBjZWlsICggZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19jZWlsICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmYWJz
ICggZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRl
cm4gZG91YmxlIF9fZmFicyAoIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGZsb29yICggZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19mbG9vciAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBk
b3VibGUgZm1vZCAoIGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91
YmxlIF9fZm1vZCAoIGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGludCBfX2lzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mIChkb3Vi
bGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVy
biBpbnQgZmluaXRlIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBpbmZuYW4gKGludCBfX2Vycm9yKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19pbmZuYW4g
KGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0
ZXJuIGRvdWJsZSBkcmVtICggZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX19kcmVtICggZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4
dGVybiBkb3VibGUgc2lnbmlmaWNhbmQgKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX3NpZ25pZmljYW5kICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91
YmxlIGNvcHlzaWduICggZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fY29weXNpZ24gKCBkb3VibGUgX194
LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgMjE3
ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gaW50IF9faXNuYW4gKGRv
dWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4
dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX19qMCAoIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgajEgKCBkb3Vi
bGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fajEgKCBkb3VibGUpIHRocm93ICgpOwpleHRl
cm4gZG91YmxlIGpuIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qbiAo
aW50LCBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIHkwICggZG91YmxlKSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX3kwICggZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5
MSAoIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195MSAoIGRvdWJsZSkgdGhyb3cg
KCk7CmV4dGVybiBkb3VibGUgeW4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX3luIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBlcmYgKCBk
b3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXJmICggZG91YmxlKSB0aHJvdyAoKTsK
ZXh0ZXJuIGRvdWJsZSBlcmZjICggZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Vy
ZmMgKCBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAoIGRvdWJsZSkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19sZ2FtbWEgKCBkb3VibGUpIHRocm93ICgpOwojIDI0NiAi
L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGRvdWJsZSBnYW1tYSAoIGRv
dWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19nYW1tYSAoIGRvdWJsZSkgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBkb3VibGUgbGdhbW1hX3IgKCBkb3VibGUsIGludCAqX19zaWduZ2FtcCkg
dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sZ2FtbWFfciAoIGRvdWJsZSwgaW50ICpfX3NpZ25n
YW1wKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSByaW50ICggZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19yaW50ICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGRvdWJsZSBuZXh0YWZ0ZXIgKCBkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uZXh0YWZ0ZXIgKCBk
b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCgoKZXh0ZXJuIGRvdWJsZSByZW1haW5kZXIgKCBkb3VibGUgX194LCBkb3VibGUgX195
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JlbWFpbmRlciAoIGRvdWJsZSBfX3gsIGRvdWJs
ZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHNjYWxiICggZG91YmxlIF9feCwgZG91
YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zY2FsYiAoIGRvdWJsZSBfX3gsIGRv
dWJsZSBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKCBkb3VibGUgX194
LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxibiAoIGRvdWJsZSBfX3gs
IGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2diIChkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGludCBfX2lsb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsKIyA2NCAiL3Vz
ci9pbmNsdWRlL21hdGguaCIgMiAzCiMgODMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyA1NCAi
L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwpleHRlcm4gZmxvYXQgYWNvc2YgKCBm
bG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hY29zZiAoIGZsb2F0IF9feCkgdGhy
b3cgKCk7CgpleHRlcm4gZmxvYXQgYXNpbmYgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4g
ZmxvYXQgX19hc2luZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbmYg
KCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hdGFuZiAoIGZsb2F0IF9feCkg
dGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbjJmICggZmxvYXQgX195LCBmbG9hdCBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19hdGFuMmYgKCBmbG9hdCBfX3ksIGZsb2F0IF9feCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGNvc2YgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4g
ZmxvYXQgX19jb3NmICggZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBzaW5mICgg
ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2luZiAoIGZsb2F0IF9feCkgdGhy
b3cgKCk7CgpleHRlcm4gZmxvYXQgdGFuZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX3RhbmYgKCBmbG9hdCBfX3gpIHRocm93ICgpOwoKIyA3OCAiL3Vzci9pbmNsdWRlL2Jp
dHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZsb2F0IGNvc2hmICggZmxvYXQgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGZsb2F0IF9fY29zaGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZs
b2F0IHNpbmhmICggZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2luaGYgKCBm
bG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHRhbmhmICggZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuaGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRl
cm4gZmxvYXQgYWNvc2hmICggZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYWNv
c2hmICggZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luaGYgKCBmbG9hdCBf
X3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hc2luaGYgKCBmbG9hdCBfX3gpIHRocm93ICgp
OwoKZXh0ZXJuIGZsb2F0IGF0YW5oZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX2F0YW5oZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGV4cGYg
KCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBmICggZmxvYXQgX194KSB0
aHJvdyAoKTsKCiMgMTA2ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4g
ZmxvYXQgZnJleHBmICggZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19mcmV4cGYgKCBmbG9hdCBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAoIGZsb2F0IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19sZGV4cGYgKCBmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KSB0
aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX2xvZ2YgKCBmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cx
MGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cxMGYgKCBmbG9hdCBf
X3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBtb2RmZiAoIGZsb2F0IF9feCwgZmxvYXQgKl9f
aXB0cikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX21vZGZmICggZmxvYXQgX194LCBmbG9hdCAq
X19pcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGV4cG0xZiAoIGZsb2F0IF9feCkgdGhy
b3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cG0xZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGZsb2F0IGxvZzFwZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xv
ZzFwZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2JmICggZmxvYXQg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nYmYgKCBmbG9hdCBfX3gpIHRocm93ICgp
OwojIDE0MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZsb2F0IHBv
d2YgKCBmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Bvd2Yg
KCBmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IHNxcnRmICgg
ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc3FydGYgKCBmbG9hdCBfX3gpIHRo
cm93ICgpOwoKCgpleHRlcm4gZmxvYXQgaHlwb3RmICggZmxvYXQgX194LCBmbG9hdCBfX3kpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19oeXBvdGYgKCBmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgY2JydGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19jYnJ0ZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9h
dCBjZWlsZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2NlaWxmICggZmxv
YXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgZmFic2YgKCBmbG9hdCBfX3gpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fZmFic2YgKCBm
bG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g
ZmxvYXQgZmxvb3JmICggZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZmxvb3Jm
ICggZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgZm1vZGYgKCBmbG9hdCBfX3gs
IGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Ztb2RmICggZmxvYXQgX194LCBm
bG9hdCBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mZiAoZmxvYXQgX192YWx1
ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19m
aW5pdGVmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCgpleHRlcm4gaW50IGlzaW5mZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlZiAoZmxvYXQgX192YWx1
ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGZs
b2F0IGluZm5hbmYgKGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7IGV4dGVybiBmbG9hdCBfX2luZm5hbmYgKGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGRyZW1mICggZmxvYXQgX194
LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19kcmVtZiAoIGZsb2F0IF9feCwg
ZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHNpZ25pZmljYW5kZiAoIGZsb2F0
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NpZ25pZmljYW5kZiAoIGZsb2F0IF9feCkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgY29weXNpZ25mICggZmxvYXQgX194LCBmbG9hdCBf
X3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9f
Y29weXNpZ25mICggZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKIyAyMTcgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4
dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbmYgKGZsb2F0IF9fdmFsdWUpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgajBmICggZmxv
YXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19qMGYgKCBmbG9hdCkgdGhyb3cgKCk7CmV4dGVy
biBmbG9hdCBqMWYgKCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2oxZiAoIGZsb2F0
KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGpuZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX2puZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MGYgKCBm
bG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3kwZiAoIGZsb2F0KSB0aHJvdyAoKTsKZXh0
ZXJuIGZsb2F0IHkxZiAoIGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9feTFmICggZmxv
YXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgeW5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsgZXh0
ZXJuIGZsb2F0IF9feW5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQg
ZXJmZiAoIGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXJmZiAoIGZsb2F0KSB0aHJv
dyAoKTsKZXh0ZXJuIGZsb2F0IGVyZmNmICggZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19lcmZjZiAoIGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGxnYW1tYWYgKCBmbG9hdCkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWYgKCBmbG9hdCkgdGhyb3cgKCk7CiMgMjQ2
ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZmxvYXQgZ2FtbWFmICgg
ZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19nYW1tYWYgKCBmbG9hdCkgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBmbG9hdCBsZ2FtbWFmX3IgKCBmbG9hdCwgaW50ICpfX3NpZ25nYW1wKSB0
aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZl9yICggZmxvYXQsIGludCAqX19zaWduZ2Ft
cCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCByaW50ZiAoIGZsb2F0IF9feCkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX3JpbnRmICggZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g
ZmxvYXQgbmV4dGFmdGVyZiAoIGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHRhZnRlcmYgKCBmbG9hdCBf
X3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoK
CmV4dGVybiBmbG9hdCByZW1haW5kZXJmICggZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgp
OyBleHRlcm4gZmxvYXQgX19yZW1haW5kZXJmICggZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93
ICgpOwoKCgpleHRlcm4gZmxvYXQgc2NhbGJmICggZmxvYXQgX194LCBmbG9hdCBfX24pIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYmYgKCBmbG9hdCBfX3gsIGZsb2F0IF9fbikgdGhyb3cg
KCk7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJuZiAoIGZsb2F0IF9feCwgaW50IF9fbikgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX3NjYWxibmYgKCBmbG9hdCBfX3gsIGludCBfX24pIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IGlsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBf
X2lsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKIyA4MyAiL3Vzci9pbmNsdWRlL21hdGguaCIg
MiAzCiMgMTAwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgNTQgIi91c3IvaW5jbHVkZS9iaXRz
L21hdGhjYWxscy5oIiAxIDMKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NsICggbG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2wgKCBsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5sICggbG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmwgKCBsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5sICggbG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmwgKCBsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW4ybCAoIGxvbmcgZG91YmxlIF9feSwgbG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbjJsICggbG9u
ZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRv
dWJsZSBjb3NsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fY29zbCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUg
c2lubCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Np
bmwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmwg
KCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5sICgg
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCiMgNzggIi91c3IvaW5jbHVkZS9iaXRzL21hdGhj
YWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJsZSBjb3NobCAoIGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nvc2hsICggbG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzaW5obCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpbmhsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5obCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX3RhbmhsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NobCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NobCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmhsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmhsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK
CmV4dGVybiBsb25nIGRvdWJsZSBhdGFuaGwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19hdGFuaGwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7Cgoj
IDEwNiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcgZG91Ymxl
IGZyZXhwbCAoIGxvbmcgZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fZnJleHBsICggbG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25l
bnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsZGV4cGwgKCBsb25nIGRvdWJsZSBf
X3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGRleHBs
ICggbG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv
bmcgZG91YmxlIGxvZ2wgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19sb2dsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBk
b3VibGUgbG9nMTBsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fbG9nMTBsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBk
b3VibGUgbW9kZmwgKCBsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19tb2RmbCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBk
b3VibGUgKl9faXB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBtMWwgKCBs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBtMWwgKCBs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cxcGwgKCBs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cxcGwgKCBs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dibCAoIGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2JsICggbG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKIyAxNDMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxs
cy5oIiAzCmV4dGVybiBsb25nIGRvdWJsZSBwb3dsICggbG9uZyBkb3VibGUgX194LCBsb25nIGRv
dWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3dsICggbG9uZyBkb3Vi
bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBz
cXJ0bCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Nx
cnRsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGh5
cG90bCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9faHlwb3RsICggbG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNicnRsICggbG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2JydGwgKCBsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY2VpbGwgKCBsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jZWlsbCAoIGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZhYnNsICggbG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2ZhYnNsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZsb29ybCAoIGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Zsb29ybCAoIGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtb2RsICggbG9uZyBkb3VibGUgX194LCBs
b25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbW9kbCAoIGxv
bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg
X19pc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2lu
ZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBp
bmZuYW5sIChpbnQgX19lcnJvcikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19pbmZuYW5sIChpbnQgX19lcnJvcikgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBkcmVtbCAoIGxv
bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fZHJlbWwgKCBsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7
CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzaWduaWZpY2FuZGwgKCBsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zaWduaWZpY2FuZGwgKCBsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvcHlzaWdubCAoIGxvbmcgZG91
YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NvcHlzaWdubCAoIGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMg
MjE3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gaW50IF9faXNuYW5s
IChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCmV4dGVybiBpbnQgaXNuYW5sIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGowbCAoIGxv
bmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajBsICggbG9uZyBkb3Vi
bGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgajFsICggbG9uZyBkb3VibGUpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qMWwgKCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4
dGVybiBsb25nIGRvdWJsZSBqbmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19qbmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9u
ZyBkb3VibGUgeTBsICggbG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg
X195MGwgKCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSB5MWwgKCBs
b25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kxbCAoIGxvbmcgZG91
YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHlubCAoaW50LCBsb25nIGRvdWJsZSkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3lubCAoaW50LCBsb25nIGRvdWJsZSkgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGVyZmwgKCBsb25nIGRvdWJsZSkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2VyZmwgKCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4
dGVybiBsb25nIGRvdWJsZSBlcmZjbCAoIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fZXJmY2wgKCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRv
dWJsZSBsZ2FtbWFsICggbG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19sZ2FtbWFsICggbG9uZyBkb3VibGUpIHRocm93ICgpOwojIDI0NiAiL3Vzci9pbmNsdWRlL2Jp
dHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcgZG91YmxlIGdhbW1hbCAoIGxvbmcgZG91Ymxl
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZ2FtbWFsICggbG9uZyBkb3VibGUpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbF9yICggbG9uZyBkb3VibGUs
IGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWxf
ciAoIGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOwoKCgoKCgpleHRlcm4g
bG9uZyBkb3VibGUgcmludGwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19yaW50bCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv
bmcgZG91YmxlIG5leHRhZnRlcmwgKCBsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19uZXh0YWZ0ZXJsICggbG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmVt
YWluZGVybCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWluZGVybCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi
bGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibCAoIGxvbmcgZG91
YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
c2NhbGJsICggbG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKCBsb25nIGRvdWJsZSBfX3gsIGludCBfX24pIHRo
cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYm5sICggbG9uZyBkb3VibGUgX194LCBp
bnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYmwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
CiMgMTAwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyAxMTMgIi91c3IvaW5jbHVkZS9tYXRo
LmgiIDMKZXh0ZXJuIGludCBzaWduZ2FtOwojIDIzNiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwp0
eXBlZGVmIGVudW0KewogIF9JRUVFXyA9IC0xLAogIF9TVklEXywKICBfWE9QRU5fLAogIF9QT1NJ
WF8sCiAgX0lTT0NfCn0gX0xJQl9WRVJTSU9OX1RZUEU7CgoKCgpleHRlcm4gX0xJQl9WRVJTSU9O
X1RZUEUgX0xJQl9WRVJTSU9OOwojIDI1OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpzdHJ1Y3Qg
X19leGNlcHRpb24KCgoKICB7CiAgICBpbnQgdHlwZTsKICAgIGNoYXIgKm5hbWU7CiAgICBkb3Vi
bGUgYXJnMTsKICAgIGRvdWJsZSBhcmcyOwogICAgZG91YmxlIHJldHZhbDsKICB9OwoKCmV4dGVy
biBpbnQgbWF0aGVyciAoc3RydWN0IF9fZXhjZXB0aW9uICpfX2V4YykgdGhyb3cgKCk7CiMgMjkw
ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgNzkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRo
YXQtbGludXgvMi45Ni9pbmNsdWRlL2Zsb2F0LmgiIDEgMwp1bmlvbiBfX2NvbnZlcnRfbG9uZ19k
b3VibGUgewogIHVuc2lnbmVkIF9fY29udmVydF9sb25nX2RvdWJsZV9pWzRdOwogIGxvbmcgZG91
YmxlIF9fY29udmVydF9sb25nX2RvdWJsZV9kOwp9OwojIDI5MCAiL3Vzci9pbmNsdWRlL21hdGgu
aCIgMiAzCiMgNDA5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCn0KCgojIDE2ICIuLi8uLi8uLi9z
cmMvZnJhbWV3b3JrL3V0aWwvUHJvYi5oIiAyCgojIDU4ICIvdXNyL2luY2x1ZGUvYXNzZXJ0Lmgi
IDEgMwpleHRlcm4gIkMiIHsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0IGNo
YXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgpleHRlcm4gdm9p
ZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9fZmls
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rp
b24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0
ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBjb25zdCBjaGFyICpf
X2ZpbGUsIGludCBfX2xpbmUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1
cm5fXykpOwoKCn0KCiMgMTcgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iLmgiIDIK
CiMgMjcgIi91c3IvaW5jbHVkZS9nKystMy9pb3N0cmVhbS5oIiAxIDMKI3ByYWdtYSBpbnRlcmZh
Y2UKIyAyNyAiL3Vzci9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDMKCgoKCgojIDI4ICIvdXNy
L2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDEgMwojcHJhZ21hIGludGVyZmFjZQojIDI4ICIv
dXNyL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKCgoKCgoKCmV4dGVybiAiQyIgewoKIyAz
MSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMwojIDEwICIvdXNyL2luY2x1ZGUvX0dfY29uZmln
LmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAxOTkgIi91c3Iv
bGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDMwICIvdXNyL2luY2x1ZGUvYml0cy90eXBl
cy5oIiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWdu
ZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVm
IHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQg
bG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25n
IGludCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVm
IHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0
eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0
IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVu
c2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25n
IGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
bG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVk
ZWYgX191X3F1YWRfdCBfX2Rldl90Owp0eXBlZGVmIF9fdV9pbnQgX191aWRfdDsKdHlwZWRlZiBf
X3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191X2xvbmcgX19pbm9fdDsKdHlwZWRlZiBfX3VfaW50
IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9pbnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9f
b2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5
cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsKdHlwZWRlZiBf
X3VfcXVhZF90IF9fcmxpbTY0X3Q7CnR5cGVkZWYgX191X2ludCBfX2lkX3Q7Cgp0eXBlZGVmIHN0
cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9IF9fZnNpZF90OwoKCnR5cGVkZWYgaW50IF9f
ZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190aW1l
X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBf
X3N1c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3dibGtfdDsKCnR5cGVkZWYgbG9uZyBp
bnQgX19jbG9ja190OwoKCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9f
dGltZXJfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2ZkX21hc2s7CgoKIyAxMDkg
Ii91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CgoKCgoKCiAg
ICBfX2ZkX21hc2sgX19mZHNfYml0c1sxMDI0IC8gKDggKiBzaXplb2YgKF9fZmRfbWFzaykpXTsK
CgogIH0gX19mZF9zZXQ7CgoKdHlwZWRlZiBpbnQgX19rZXlfdDsKCgp0eXBlZGVmIHVuc2lnbmVk
IHNob3J0IGludCBfX2lwY19waWRfdDsKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa3NpemVfdDsK
CgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2Nu
dDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgX191X3F1YWRf
dCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRl
ZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVkZWYgX191X3F1YWRfdCBfX2lubzY0
X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgoKdHlwZWRlZiBsb25nIGludCBfX3Rf
c2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCgp0eXBl
ZGVmIGludCBfX2ludHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90OwoK
CgoKCiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyA2OCAiL3Vz
ci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAg
aW50IHNjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0
eXBlcy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3Rh
dHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVz
Y3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9f
ZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRfcGFyYW0g
X19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsKICBzaXpl
X3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0YWNrYWRk
cjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVkZWYgc3Ry
dWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRfZGVz
Y3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBp
bnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
cHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZlZDsK
ICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQgX19tX2tp
bmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRfbXV0ZXhf
dDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4
YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgojIDE0MCAiL3Vzci9pbmNs
dWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhy
ZWFkX3Q7CgojIDE2NiAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCiMgMTAgIi91c3Iv
aW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgoKCgoKIyAzMTIgIi91c3IvbGliL2djYy1saWIvaTM4
Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwojIDI1ICIv
dXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyA0NiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEg
MwoKCiMgNjQgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnR5cGVkZWYgc3RydWN0CnsKICBpbnQg
X19jb3VudDsKICB1bmlvbgogIHsKICAgIHdpbnRfdCBfX3djaDsKICAgIGNoYXIgX193Y2hiWzRd
OwogIH0gX192YWx1ZTsKfSBfX21ic3RhdGVfdDsKIyAyNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZp
Zy5oIiAyIDMKCnR5cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9zOwogIF9fbWJzdGF0ZV90
IF9fc3RhdGU7Cn0gX0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmY2NF90IF9fcG9z
OwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CiMgNDUgIi91c3IvaW5jbHVk
ZS9fR19jb25maWcuaCIgMwojIDI5ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMSAzCiMgNDYgIi91
c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoK
CgoKCgoKZW51bQp7CiAgX19HQ09OVl9PSyA9IDAsCiAgX19HQ09OVl9OT0NPTlYsCiAgX19HQ09O
Vl9OT0RCLAogIF9fR0NPTlZfTk9NRU0sCgogIF9fR0NPTlZfRU1QVFlfSU5QVVQsCiAgX19HQ09O
Vl9GVUxMX09VVFBVVCwKICBfX0dDT05WX0lMTEVHQUxfSU5QVVQsCiAgX19HQ09OVl9JTkNPTVBM
RVRFX0lOUFVULAoKICBfX0dDT05WX0lMTEVHQUxfREVTQ1JJUFRPUiwKICBfX0dDT05WX0lOVEVS
TkFMX0VSUk9SCn07CgoKCmVudW0KewogIF9fR0NPTlZfSVNfTEFTVCA9IDB4MDAwMSwKICBfX0dD
T05WX0lHTk9SRV9FUlJPUlMgPSAweDAwMDIKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsKc3Ry
dWN0IF9fZ2NvbnZfc3RlcF9kYXRhOwpzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0OwpzdHJ1
Y3QgX19nY29udl90cmFuc19kYXRhOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3Ry
dWN0IF9fZ2NvbnZfc3RlcCAqLCBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwgX19jb25zdCB1bnNp
Z25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoq
LCBzaXplX3QgKiwgaW50LCBpbnQpOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl9pbml0X2ZjdCkg
KHN0cnVjdCBfX2djb252X3N0ZXAgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2ZjdCkg
KHN0cnVjdCBfX2djb252X3N0ZXAgKik7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19m
Y3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwgdm9pZCAqLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQg
Y2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0
eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QpICh2b2lkICosIF9fY29uc3Qg
dW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOwoKCnR5cGVkZWYg
aW50ICgqX19nY29udl90cmFuc19xdWVyeV9mY3QpIChfX2NvbnN0IGNoYXIgKiwgX19jb25zdCBj
aGFyICoqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAq
KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25z
dCBjaGFyICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lkICop
OwoKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YQp7CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJh
bnNfZmN0OwogIF9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsK
ICBfX2djb252X3RyYW5zX2VuZF9mY3QgX190cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsK
ICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX25leHQ7Cn07CgoKCnN0cnVjdCBfX2djb252
X3N0ZXAKewogIHN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwog
IF9fY29uc3QgY2hhciAqX19tb2RuYW1lOwoKICBpbnQgX19jb3VudGVyOwoKICBfX2NvbnN0IGNo
YXIgKl9fZnJvbV9uYW1lOwogIF9fY29uc3QgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2Zj
dCBfX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0
IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRl
ZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgog
IGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0
ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19v
dXRidWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVy
OwoKCgogIGludCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9f
bWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFu
czsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7
CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBf
X2djb252X3N0ZXBfZGF0YSBfX2RhdGFbMF07Cn0gKl9fZ2NvbnZfdDsKCiMgNDUgIi91c3IvaW5j
bHVkZS9fR19jb25maWcuaCIgMiAzCnR5cGVkZWYgdW5pb24KewogIHN0cnVjdCBfX2djb252X2lu
Zm8gX19jZDsKICBzdHJ1Y3QKICB7CiAgICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgICBz
dHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhOwogIH0gX19jb21iaW5lZDsKfSBfR19pY29u
dl90OwoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f
SElfXykpKTsKdHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18g
KF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVf
XyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90
IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwoKIyAzMSAiL3Vzci9pbmNsdWRl
L2xpYmlvLmgiIDIgMwojIDUyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDQzICIvdXNyL2xp
Yi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCnR5
cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgNTIgIi91c3IvaW5jbHVk
ZS9saWJpby5oIiAyIDMKIyAxNTggIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9f
anVtcF90OyBzdHJ1Y3QgX0lPX0ZJTEU7CgoKCgoKCgoKCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190
OwoKCgoKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAg
c3RydWN0IF9JT19GSUxFICpfc2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTEgIi91c3IvaW5jbHVk
ZS9saWJpby5oIiAzCn07CgoKZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVjdnRfb2ss
CiAgX19jb2RlY3Z0X3BhcnRpYWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2dF9ub2Nv
bnYKfTsKCiMgMjYzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX0ZJTEUgewog
IGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9JT19yZWFkX3B0cjsKICBjaGFyKiBfSU9fcmVhZF9l
bmQ7CiAgY2hhciogX0lPX3JlYWRfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsKICBjaGFy
KiBfSU9fd3JpdGVfcHRyOwogIGNoYXIqIF9JT193cml0ZV9lbmQ7CiAgY2hhciogX0lPX2J1Zl9i
YXNlOwogIGNoYXIqIF9JT19idWZfZW5kOwoKICBjaGFyICpfSU9fc2F2ZV9iYXNlOwogIGNoYXIg
Kl9JT19iYWNrdXBfYmFzZTsKICBjaGFyICpfSU9fc2F2ZV9lbmQ7CgogIHN0cnVjdCBfSU9fbWFy
a2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpfY2hhaW47CgogIGludCBfZmlsZW5v
OwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90IF9vbGRfb2Zmc2V0OwoKCgogIHVuc2lnbmVkIHNo
b3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIgX3No
b3J0YnVmWzFdOwoKCgogIF9JT19sb2NrX3QgKl9sb2NrOwojIDMwNyAiL3Vzci9pbmNsdWRlL2xp
YmlvLmgiIDMKICBfX29mZjY0X3QgX29mZnNldDsKCgoKCgogIHZvaWQgKl9fcGFkMTsKICB2b2lk
ICpfX3BhZDI7CgogIGludCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAqIHNpemVvZiAoaW50
KSAtIDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsK
CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVj
dCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9w
bHVzIF9JT18yXzFfc3RkZXJyXzsKIyAzNDYgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVk
ZWYgX19zc2l6ZV90IF9faW9fcmVhZF9mbiAodm9pZCAqX19jb29raWUsIGNoYXIgKl9fYnVmLCBz
aXplX3QgX19uYnl0ZXMpOwoKCgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAo
dm9pZCAqX19jb29raWUsIF9fY29uc3QgY2hhciAqX19idWYsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBfX24pOwoKCgoKCgoKdHlwZWRlZiBpbnQgX19pb19zZWVrX2Zu
ICh2b2lkICpfX2Nvb2tpZSwgX19vZmY2NF90ICpfX3BvcywgaW50IF9fdyk7CgoKdHlwZWRlZiBp
bnQgX19pb19jbG9zZV9mbiAodm9pZCAqX19jb29raWUpOwoKCiMgMzk1ICIvdXNyL2luY2x1ZGUv
bGliaW8uaCIgMwpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklM
RSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgpOwpleHRlcm4g
d2ludF90IF9fd3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3Qg
X193dWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93
IChfSU9fRklMRSAqLCB3aW50X3QpIHRocm93ICgpOwoKIyA0MjggIi91c3IvaW5jbHVkZS9saWJp
by5oIiAzCmV4dGVybiBpbnQgX0lPX2dldGMgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRl
cm4gaW50IF9JT19mZW9mIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lP
X2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoKZXh0ZXJuIGludCBfSU9fcGVla2Nf
bG9ja2VkIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zs
b2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB2b2lkIF9JT19mdW5sb2NrZmls
ZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAoX0lP
X0ZJTEUgKikgdGhyb3cgKCk7CgojIDQ1OCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJu
IGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19y
ZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19y
ZXN0cmljdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19y
ZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAg
IF9fZ251Y192YV9saXN0KSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fcGFkbiAoX0lP
X0ZJTEUgKiwgaW50LCBfX3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0
biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmNjRf
dCBfSU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkgdGhyb3cgKCk7
CmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50
KSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChfSU9fRklMRSAq
KSB0aHJvdyAoKTsKCiMgNTE0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp9CiMgMzcgIi91c3Iv
aW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMiAzCn0KCgoKIyAxMTAgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKdHlwZWRlZiBf
X2dudWNfdmFfbGlzdCB2YV9saXN0OwojIDQxICIvdXNyL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVm
LmgiIDIgMwojIDY1ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKZXh0ZXJuICJD
KysiIHsKY2xhc3MgaXN0cmVhbTsKY2xhc3Mgb3N0cmVhbTsgY2xhc3Mgc3RyZWFtYnVmOwoKCgoK
Cgp0eXBlZGVmIF9fb2ZmNjRfdCBzdHJlYW1vZmY7CnR5cGVkZWYgX19vZmY2NF90IHN0cmVhbXBv
czsKCgoKCnR5cGVkZWYgX19zc2l6ZV90IHN0cmVhbXNpemU7Cgp0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgX19mbXRmbGFnczsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9faW9zdGF0ZTsKCnN0cnVjdCBf
aW9zX2ZpZWxkcwp7CiAgICBzdHJlYW1idWYgKl9zdHJidWY7CiAgICBvc3RyZWFtKiBfdGllOwog
ICAgaW50IF93aWR0aDsKICAgIF9fZm10ZmxhZ3MgX2ZsYWdzOwogICAgd2NoYXJfdCBfZmlsbDsK
ICAgIF9faW9zdGF0ZSBfc3RhdGU7CiAgICBfX2lvc3RhdGUgX2V4Y2VwdGlvbnM7CiAgICBpbnQg
X3ByZWNpc2lvbjsKCiAgICB2b2lkICpfYXJyYXlzOwp9OwoKIyAxMjYgIi91c3IvaW5jbHVkZS9n
KystMy9zdHJlYW1idWYuaCIgMwpjbGFzcyBpb3MgOiBwdWJsaWMgX2lvc19maWVsZHMgewogIGlv
cyYgb3BlcmF0b3I9KGlvcyYpOwogIGlvcyAoY29uc3QgaW9zJik7CiAgcHVibGljOgogICAgdHlw
ZWRlZiBfX2ZtdGZsYWdzIGZtdGZsYWdzOwogICAgdHlwZWRlZiBpbnQgaW9zdGF0ZTsKICAgIHR5
cGVkZWYgaW50IG9wZW5tb2RlOwogICAgdHlwZWRlZiBfX3NzaXplX3Qgc3RyZWFtc2l6ZTsKICAg
IGVudW0gaW9fc3RhdGUgewogICAgICAgIGdvb2RiaXQgPSAwLAogICAgICAgIGVvZmJpdCA9IDEs
CiAgICAgICAgZmFpbGJpdCA9IDIsCiAgICAgICAgYmFkYml0ID0gNCB9OwogICAgZW51bSBvcGVu
X21vZGUgewogICAgICAgIGluID0gMSwKICAgICAgICBvdXQgPSAyLAogICAgICAgIGF0ZSA9IDQs
CiAgICAgICAgYXBwID0gOCwKICAgICAgICB0cnVuYyA9IDE2LAogICAgICAgIG5vY3JlYXRlID0g
MzIsCiAgICAgICAgbm9yZXBsYWNlID0gNjQsCiAgICAgICAgYmluID0gMTI4LAogICAgICAgIGJp
bmFyeSA9IDEyOCB9OwogICAgZW51bSBzZWVrX2RpciB7IGJlZywgY3VyLCBlbmR9OwogICAgdHlw
ZWRlZiBlbnVtIHNlZWtfZGlyIHNlZWtkaXI7CgogICAgZW51bSB7IHNraXB3cz0wMSwKICAgICAg
ICAgICBsZWZ0PTAyLCByaWdodD0wNCwgaW50ZXJuYWw9MDEwLAogICAgICAgICAgIGRlYz0wMjAs
IG9jdD0wNDAsIGhleD0wMTAwLAogICAgICAgICAgIHNob3diYXNlPTAyMDAsIHNob3dwb2ludD0w
NDAwLAogICAgICAgICAgIHVwcGVyY2FzZT0wMTAwMCwgc2hvd3Bvcz0wMjAwMCwKICAgICAgICAg
ICBzY2llbnRpZmljPTA0MDAwLCBmaXhlZD0wMTAwMDAsCiAgICAgICAgICAgdW5pdGJ1Zj0wMjAw
MDAsIHN0ZGlvPTA0MDAwMAoKCgogICAgICAgICAgIH07CiAgICBlbnVtIHsKICAgICAgICBiYXNl
ZmllbGQ9ZGVjK29jdCtoZXgsCiAgICAgICAgZmxvYXRmaWVsZCA9IHNjaWVudGlmaWMrZml4ZWQs
CiAgICAgICAgYWRqdXN0ZmllbGQgPSBsZWZ0K3JpZ2h0K2ludGVybmFsCiAgICB9OwoKIyAxNzkg
Ii91c3IvaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMwogICAgb3N0cmVhbSogdGllKCkgY29u
c3QgeyByZXR1cm4gX3RpZTsgfQogICAgb3N0cmVhbSogdGllKG9zdHJlYW0qIHZhbCkgeyBvc3Ry
ZWFtKiBzYXZlPV90aWU7IF90aWU9dmFsOyByZXR1cm4gc2F2ZTsgfQoKCiAgICB3Y2hhcl90IGZp
bGwoKSBjb25zdCB7IHJldHVybiBfZmlsbDsgfQogICAgd2NoYXJfdCBmaWxsKHdjaGFyX3QgbmV3
ZikKICAgICAgICB7d2NoYXJfdCBvbGRmID0gX2ZpbGw7IF9maWxsID0gbmV3ZjsgcmV0dXJuIG9s
ZGY7fQogICAgZm10ZmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBfZmxhZ3M7IH0KICAgIGZt
dGZsYWdzIGZsYWdzKGZtdGZsYWdzIG5ld192YWwpIHsKICAgICAgICBmbXRmbGFncyBvbGRfdmFs
ID0gX2ZsYWdzOyBfZmxhZ3MgPSBuZXdfdmFsOyByZXR1cm4gb2xkX3ZhbDsgfQogICAgaW50IHBy
ZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIF9wcmVjaXNpb247IH0KICAgIGludCBwcmVjaXNpb24o
aW50IG5ld3ApIHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBvbGRwID0gX3ByZWNpc2lvbjsgX3By
ZWNpc2lvbiA9ICh1bnNpZ25lZCBzaG9ydCluZXdwOwogICAgICAgIHJldHVybiBvbGRwOyB9CiAg
ICBmbXRmbGFncyBzZXRmKGZtdGZsYWdzIHZhbCkgewogICAgICAgIGZtdGZsYWdzIG9sZGJpdHMg
PSBfZmxhZ3M7CiAgICAgICAgX2ZsYWdzIHw9IHZhbDsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGZt
dGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFsLCBmbXRmbGFncyBtYXNrKSB7CiAgICAgICAgZm10Zmxh
Z3Mgb2xkYml0cyA9IF9mbGFnczsKICAgICAgICBfZmxhZ3MgPSAoX2ZsYWdzICYgfm1hc2spIHwg
KHZhbCAmIG1hc2spOyByZXR1cm4gb2xkYml0czsgfQogICAgZm10ZmxhZ3MgdW5zZXRmKGZtdGZs
YWdzIG1hc2spIHsKICAgICAgICBmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwogICAgICAgIF9m
bGFncyAmPSB+bWFzazsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGludCB3aWR0aCgpIGNvbnN0IHsg
cmV0dXJuIF93aWR0aDsgfQogICAgaW50IHdpZHRoKGludCB2YWwpIHsgaW50IHNhdmUgPSBfd2lk
dGg7IF93aWR0aCA9IHZhbDsgcmV0dXJuIHNhdmU7IH0KCgoKCiAgICB2b2lkIF90aHJvd19mYWls
dXJlKCkgY29uc3QgeyB9CgogICAgdm9pZCBjbGVhcihpb3N0YXRlIHN0YXRlID0gMCkgewogICAg
ICAgIF9zdGF0ZSA9IF9zdHJidWYgPyBzdGF0ZSA6IHN0YXRlfGJhZGJpdDsKICAgICAgICBpZiAo
X3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0KGlv
c3RhdGUgZmxhZykgeyBfc3RhdGUgfD0gZmxhZzsKICAgICAgICBpZiAoX3N0YXRlICYgX2V4Y2Vw
dGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0c3RhdGUoaW9zdGF0ZSBmbGFn
KSB7IF9zdGF0ZSB8PSBmbGFnOwogICAgICAgIGlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Ro
cm93X2ZhaWx1cmUoKTsgfQogICAgaW50IGdvb2QoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgPT0g
MDsgfQogICAgaW50IGVvZigpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIGlvczo6ZW9mYml0OyB9
CiAgICBpbnQgZmFpbCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIChpb3M6OmJhZGJpdHxpb3M6
OmZhaWxiaXQpOyB9CiAgICBpbnQgYmFkKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjpi
YWRiaXQ7IH0KICAgIGlvc3RhdGUgcmRzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZTsgfQog
ICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdCB7IHJldHVybiBmYWlsKCkgPyAodm9pZCopMCA6ICh2
b2lkKikoLTEpOyB9CiAgICBpbnQgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gZmFpbCgpOyB9
CiAgICBpb3N0YXRlIGV4Y2VwdGlvbnMoKSBjb25zdCB7IHJldHVybiBfZXhjZXB0aW9uczsgfQog
ICAgdm9pZCBleGNlcHRpb25zKGlvc3RhdGUgZW5hYmxlKSB7CiAgICAgICAgX2V4Y2VwdGlvbnMg
PSBlbmFibGU7CiAgICAgICAgaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVy
ZSgpOyB9CgogICAgc3RyZWFtYnVmKiByZGJ1ZigpIGNvbnN0IHsgcmV0dXJuIF9zdHJidWY7IH0K
ICAgIHN0cmVhbWJ1ZiogcmRidWYoc3RyZWFtYnVmICpfcykgewogICAgICBzdHJlYW1idWYgKl9v
bGQgPSBfc3RyYnVmOyBfc3RyYnVmID0gX3M7IGNsZWFyICgpOyByZXR1cm4gX29sZDsgfQoKICAg
IHN0YXRpYyBpbnQgc3luY193aXRoX3N0ZGlvKGludCBvbik7CiAgICBzdGF0aWMgdm9pZCBzeW5j
X3dpdGhfc3RkaW8oKSB7IHN5bmNfd2l0aF9zdGRpbygxKTsgfQogICAgc3RhdGljIGZtdGZsYWdz
IGJpdGFsbG9jKCk7CiAgICBzdGF0aWMgaW50IHhhbGxvYygpOwogICAgdm9pZComIHB3b3JkKGlu
dCk7CiAgICB2b2lkKiBwd29yZChpbnQpIGNvbnN0OwogICAgbG9uZyYgaXdvcmQoaW50KTsKICAg
IGxvbmcgaXdvcmQoaW50KSBjb25zdDsKCiMgMjUxICIvdXNyL2luY2x1ZGUvZysrLTMvc3RyZWFt
YnVmLmgiIDMKICAgIGNsYXNzIEluaXQgewogICAgcHVibGljOgogICAgICBJbml0ICgpIHsgfQog
ICAgfTsKCiAgcHJvdGVjdGVkOgogICAgaW5saW5lIGlvcyhzdHJlYW1idWYqIHNiID0gMCwgb3N0
cmVhbSogdGllX3RvID0gMCk7CiAgICBpbmxpbmUgdmlydHVhbCB+aW9zKCk7CiAgICBpbmxpbmUg
dm9pZCBpbml0KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZSA9IDApOwp9OwoKCgoKdHlwZWRl
ZiBpb3M6OnNlZWtfZGlyIF9zZWVrX2RpcjsKIyAyNzYgIi91c3IvaW5jbHVkZS9nKystMy9zdHJl
YW1idWYuaCIgMwpjbGFzcyBzdHJlYW1tYXJrZXIgOiBwcml2YXRlIF9JT19tYXJrZXIgewogICAg
ZnJpZW5kIGNsYXNzIHN0cmVhbWJ1ZjsKICAgIHZvaWQgc2V0X29mZnNldChpbnQgb2Zmc2V0KSB7
IF9wb3MgPSBvZmZzZXQ7IH0KICBwdWJsaWM6CiAgICBzdHJlYW1tYXJrZXIoc3RyZWFtYnVmICpz
Yik7CiAgICB+c3RyZWFtbWFya2VyKCk7CiAgICBpbnQgc2F2aW5nKCkgeyByZXR1cm4gMTsgfQog
ICAgaW50IGRlbHRhKHN0cmVhbW1hcmtlciYpOwogICAgaW50IGRlbHRhKCk7Cn07CgpzdHJ1Y3Qg
c3RyZWFtYnVmIDogcHVibGljIF9JT19GSUxFIHsKICAgIGZyaWVuZCBjbGFzcyBpb3M7CiAgICBm
cmllbmQgY2xhc3MgaXN0cmVhbTsKICAgIGZyaWVuZCBjbGFzcyBvc3RyZWFtOwogICAgZnJpZW5k
IGNsYXNzIHN0cmVhbW1hcmtlcjsKICAgIGNvbnN0IHZvaWQgKiZfdnRhYmxlKCkgeyByZXR1cm4g
Kihjb25zdCB2b2lkKiopKChfSU9fRklMRSopdGhpcyArIDEpOyB9CiAgcHJvdGVjdGVkOgogICAg
c3RhdGljIHN0cmVhbWJ1ZiogX2xpc3RfYWxsOwogICAgX0lPX0ZJTEUqJiB4Y2hhaW4oKSB7IHJl
dHVybiBfY2hhaW47IH0KICAgIHZvaWQgX3VuX2xpbmsoKTsKICAgIHZvaWQgX2xpbmtfaW4oKTsK
ICAgIGNoYXIqIGdwdHIoKSBjb25zdAogICAgICB7IHJldHVybiBfZmxhZ3MgJiAweDEwMCA/IF9J
T19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9wdHI7IH0KICAgIGNoYXIqIHBwdHIoKSBjb25zdCB7IHJl
dHVybiBfSU9fd3JpdGVfcHRyOyB9CiAgICBjaGFyKiBlZ3B0cigpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIF9mbGFncyAmIDB4MTAwID8gX0lPX3NhdmVfZW5kIDogX0lPX3JlYWRfZW5kOyB9CiAgICBj
aGFyKiBlcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9lbmQ7IH0KICAgIGNoYXIqIHBi
YXNlKCkgY29uc3QgeyByZXR1cm4gX0lPX3dyaXRlX2Jhc2U7IH0KICAgIGNoYXIqIGViYWNrKCkg
Y29uc3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICYgMHgxMDAgPyBfSU9fc2F2ZV9iYXNlIDogX0lP
X3JlYWRfYmFzZTt9CiAgICBjaGFyKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9iYXNl
OyB9CiAgICBjaGFyKiBlYnVmKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9lbmQ7IH0KICAgIGlu
dCBibGVuKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9lbmQgLSBfSU9fYnVmX2Jhc2U7IH0KICAg
IHZvaWQgeHB1dF9jaGFyKGNoYXIgYykgeyAqX0lPX3dyaXRlX3B0cisrID0gYzsgfQogICAgaW50
IHhmbGFncygpIHsgcmV0dXJuIF9mbGFnczsgfQogICAgaW50IHhmbGFncyhpbnQgZikge2ludCBm
bCA9IF9mbGFnczsgX2ZsYWdzID0gZjsgcmV0dXJuIGZsO30KICAgIHZvaWQgeHNldGZsYWdzKGlu
dCBmKSB7IF9mbGFncyB8PSBmOyB9CiAgICB2b2lkIHhzZXRmbGFncyhpbnQgZiwgaW50IG1hc2sp
CiAgICAgIHsgX2ZsYWdzID0gKF9mbGFncyAmIH5tYXNrKSB8IChmICYgbWFzayk7IH0KICAgIHZv
aWQgZ2J1bXAoaW50IG4pCiAgICAgIHsgX2ZsYWdzICYgMHgxMDAgPyAoX0lPX3NhdmVfYmFzZSs9
bik6KF9JT19yZWFkX3B0cis9bik7fQogICAgdm9pZCBwYnVtcChpbnQgbikgeyBfSU9fd3JpdGVf
cHRyICs9IG47IH0KICAgIHZvaWQgc2V0YihjaGFyKiBiLCBjaGFyKiBlYiwgaW50IGE9MCk7CiAg
ICB2b2lkIHNldHAoY2hhciogcCwgY2hhciogZXApCiAgICAgIHsgX0lPX3dyaXRlX2Jhc2U9X0lP
X3dyaXRlX3B0cj1wOyBfSU9fd3JpdGVfZW5kPWVwOyB9CiAgICB2b2lkIHNldGcoY2hhciogZWIs
IGNoYXIqIGcsIGNoYXIgKmVnKSB7CiAgICAgIGlmIChfZmxhZ3MgJiAweDEwMCkgX0lPX2ZyZWVf
YmFja3VwX2FyZWEodGhpcyk7CiAgICAgIF9JT19yZWFkX2Jhc2UgPSBlYjsgX0lPX3JlYWRfcHRy
ID0gZzsgX0lPX3JlYWRfZW5kID0gZWc7IH0KICAgIGNoYXIgKnNob3J0YnVmKCkgeyByZXR1cm4g
X3Nob3J0YnVmOyB9CgogICAgaW50IGluX2JhY2t1cCgpIHsgcmV0dXJuIF9mbGFncyAmIDB4MTAw
OyB9CgogICAgY2hhciAqR2Jhc2UoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19zYXZlX2Jh
c2UgOiBfSU9fcmVhZF9iYXNlOyB9CgogICAgY2hhciAqZUdwdHIoKSB7IHJldHVybiBpbl9iYWNr
dXAoKSA/IF9JT19zYXZlX2VuZCA6IF9JT19yZWFkX2VuZDsgfQoKICAgIGNoYXIgKkJiYXNlKCkg
eyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fcmVhZF9iYXNlIDogX0lPX3NhdmVfYmFzZTsgfQog
ICAgY2hhciAqQnB0cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFzZTsgfQoKICAgIGNoYXIgKmVC
cHRyKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fcmVhZF9lbmQgOiBfSU9fc2F2ZV9lbmQ7
IH0KICAgIGNoYXIgKk5iYXNlKCkgeyByZXR1cm4gX0lPX3NhdmVfYmFzZTsgfQogICAgY2hhciAq
ZU5wdHIoKSB7IHJldHVybiBfSU9fc2F2ZV9lbmQ7IH0KICAgIGludCBoYXZlX2JhY2t1cCgpIHsg
cmV0dXJuIF9JT19zYXZlX2Jhc2UgIT0gX19udWxsOyB9CiAgICBpbnQgaGF2ZV9tYXJrZXJzKCkg
eyByZXR1cm4gX21hcmtlcnMgIT0gX19udWxsOyB9CiAgICB2b2lkIGZyZWVfYmFja3VwX2FyZWEo
KTsKICAgIHZvaWQgdW5zYXZlX21hcmtlcnMoKTsKICAgIGludCBwdXRfbW9kZSgpIHsgcmV0dXJu
IF9mbGFncyAmIDB4ODAwOyB9CiAgICBpbnQgc3dpdGNoX3RvX2dldF9tb2RlKCk7CgogICAgc3Ry
ZWFtYnVmKGludCBmbGFncz0wKTsKICBwdWJsaWM6CiAgICBzdGF0aWMgaW50IGZsdXNoX2FsbCgp
OwogICAgc3RhdGljIHZvaWQgZmx1c2hfYWxsX2xpbmVidWZmZXJlZCgpOwogICAgdmlydHVhbCB+
c3RyZWFtYnVmKCk7CiAgICB2aXJ0dWFsIGludCBvdmVyZmxvdyhpbnQgYyA9ICgtMSkpOwogICAg
dmlydHVhbCBpbnQgdW5kZXJmbG93KCk7CiAgICB2aXJ0dWFsIGludCB1ZmxvdygpOwogICAgdmly
dHVhbCBpbnQgcGJhY2tmYWlsKGludCBjKTsKCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNwdXRu
KGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNn
ZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2Zm
KHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZp
cnR1YWwgc3RyZWFtcG9zIHNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6Omlu
fGlvczo6b3V0KTsKCiAgICBzdHJlYW1wb3MgcHVic2Vla29mZihzdHJlYW1vZmYgbywgX3NlZWtf
ZGlyIGQsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpCiAgICAgIHsgcmV0dXJuIF9JT19zZWVr
b2ZmICh0aGlzLCBvLCBkLCBtb2RlKTsgfQogICAgc3RyZWFtcG9zIHB1YnNlZWtwb3Moc3RyZWFt
cG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KQogICAgICB7IHJldHVybiBfSU9f
c2Vla3BvcyAodGhpcywgcG9zLCBtb2RlKTsgfQogICAgc3RyZWFtcG9zIHNzZWVrb2ZmKHN0cmVh
bW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHN0cmVhbXBv
cyBzc2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOwog
ICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1ZihjaGFyKiBwLCBpbnQgbGVuKTsKICAgIHZpcnR1
YWwgaW50IHN5bmMoKTsKICAgIHZpcnR1YWwgaW50IGRvYWxsb2NhdGUoKTsKCiAgICBpbnQgc2Vl
a21hcmsoc3RyZWFtbWFya2VyJiBtYXJrLCBpbnQgZGVsdGEgPSAwKTsKICAgIGludCBzcHV0YmFj
a2MoY2hhciBjKTsKICAgIGludCBzdW5nZXRjKCk7CiAgICBpbnQgdW5idWZmZXJlZCgpIHsgcmV0
dXJuIF9mbGFncyAmIDIgPyAxIDogMDsgfQogICAgaW50IGxpbmVidWZmZXJlZCgpIHsgcmV0dXJu
IF9mbGFncyAmIDB4MjAwID8gMSA6IDA7IH0KICAgIHZvaWQgdW5idWZmZXJlZChpbnQgaSkKICAg
ICAgICB7IGlmIChpKSBfZmxhZ3MgfD0gMjsgZWxzZSBfZmxhZ3MgJj0gfjI7IH0KICAgIHZvaWQg
bGluZWJ1ZmZlcmVkKGludCBpKQogICAgICAgIHsgaWYgKGkpIF9mbGFncyB8PSAweDIwMDsgZWxz
ZSBfZmxhZ3MgJj0gfjB4MjAwOyB9CiAgICBpbnQgYWxsb2NhdGUoKSB7CiAgICAgICAgaWYgKGJh
c2UoKSB8fCB1bmJ1ZmZlcmVkKCkpIHJldHVybiAwOwogICAgICAgIGVsc2UgcmV0dXJuIGRvYWxs
b2NhdGUoKTsgfQoKICAgIHZvaWQgYWxsb2NidWYoKSB7IGlmIChiYXNlKCkgPT0gX19udWxsKSBk
b2FsbG9jYnVmKCk7IH0KICAgIHZvaWQgZG9hbGxvY2J1ZigpOwogICAgaW50IGluX2F2YWlsKCkg
eyByZXR1cm4gX0lPX3JlYWRfZW5kIC0gX0lPX3JlYWRfcHRyOyB9CiAgICBpbnQgb3V0X3dhaXRp
bmcoKSB7IHJldHVybiBfSU9fd3JpdGVfcHRyIC0gX0lPX3dyaXRlX2Jhc2U7IH0KICAgIHN0cmVh
bXNpemUgc3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBuKSB7IHJldHVybiB4c3B1dG4o
cywgbik7IH0KICAgIHN0cmVhbXNpemUgcGFkbihjaGFyIHBhZCwgc3RyZWFtc2l6ZSBuKSB7IHJl
dHVybiBfSU9fcGFkbih0aGlzLCBwYWQsIG4pOyB9CiAgICBzdHJlYW1zaXplIHNnZXRuKGNoYXIq
IHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4gX0lPX3NnZXRuKHRoaXMsIHMsIG4pOyB9CiAgICBp
bnQgaWdub3JlKGludCk7CiAgICBpbnQgZ2V0X2NvbHVtbigpOwogICAgaW50IHNldF9jb2x1bW4o
aW50KTsKICAgIGxvbmcgc2dldGxpbmUoY2hhciogYnVmLCBzaXplX3QgbiwgY2hhciBkZWxpbSwg
aW50IHB1dGJhY2tfZGVsaW0pOwogICAgaW50IHNwdXRjKGludCBjKSB7IHJldHVybiBfSU9fcHV0
YyhjLCB0aGlzKTsgfQogICAgaW50IHNidW1wYygpIHsgcmV0dXJuIF9JT19nZXRjKHRoaXMpOyB9
CiAgICBpbnQgc2dldGMoKSB7IHJldHVybiAoKHRoaXMpLT5fSU9fcmVhZF9wdHIgPj0gKHRoaXMp
LT5fSU9fcmVhZF9lbmQgJiYgX191bmRlcmZsb3cgKHRoaXMpID09ICgtMSkgPyAoLTEpIDogKih1
bnNpZ25lZCBjaGFyICopICh0aGlzKS0+X0lPX3JlYWRfcHRyKTsgfQogICAgaW50IHNuZXh0Yygp
IHsKICAgICAgICBpZiAoX0lPX3JlYWRfcHRyID49IF9JT19yZWFkX2VuZCAmJiBfX3VuZGVyZmxv
dyh0aGlzKSA9PSAoLTEpKQogICAgICAgICAgcmV0dXJuICgtMSk7CiAgICAgICAgZWxzZSByZXR1
cm4gX0lPX3JlYWRfcHRyKyssIHNnZXRjKCk7IH0KICAgIHZvaWQgc3Rvc3NjKCkgeyBpZiAoX0lP
X3JlYWRfcHRyIDwgX0lPX3JlYWRfZW5kKSBfSU9fcmVhZF9wdHIrKzsgfQogICAgaW50IHZzY2Fu
KGNoYXIgY29uc3QgKmZtdDAsIF9fZ251Y192YV9saXN0IGFwLCBpb3MqIHN0cmVhbSA9IF9fbnVs
bCk7CiAgICBpbnQgc2NhbihjaGFyIGNvbnN0ICpmbXQwIC4uLik7CiAgICBpbnQgdmZvcm0oY2hh
ciBjb25zdCAqZm10MCwgX19nbnVjX3ZhX2xpc3QgYXApOwogICAgaW50IGZvcm0oY2hhciBjb25z
dCAqZm10MCAuLi4pOwoKCgoKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfcmVhZChjaGFyKiBi
dWYsIHN0cmVhbXNpemUgc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3dyaXRlKGNv
bnN0IGNoYXIqLCBzdHJlYW1zaXplKTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHN5c19zZWVrKHN0
cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHZpcnR1YWwgaW50IHN5c19jbG9zZSgpOwogICAgdmly
dHVhbCBpbnQgc3lzX3N0YXQodm9pZCopOwoKICAgIHZpcnR1YWwgaW50IHNob3dtYW55YygpOwog
ICAgdmlydHVhbCB2b2lkIGltYnVlKHZvaWQgKik7Cgp9OwoKCgoKY2xhc3MgZmlsZWJ1ZiA6IHB1
YmxpYyBzdHJlYW1idWYgewogIHByb3RlY3RlZDoKICAgIHZvaWQgaW5pdCgpOwogIHB1YmxpYzoK
ICAgIHN0YXRpYyBjb25zdCBpbnQgb3BlbnByb3Q7CiAgICBmaWxlYnVmKCk7CiAgICBmaWxlYnVm
KGludCBmZCk7CiAgICBmaWxlYnVmKGludCBmZCwgY2hhciogcCwgaW50IGxlbik7CgoKCiAgICB+
ZmlsZWJ1ZigpOwogICAgZmlsZWJ1ZiogYXR0YWNoKGludCBmZCk7CiAgICBmaWxlYnVmKiBvcGVu
KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICptb2RlKTsKICAgIGZpbGVidWYqIG9w
ZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGlvczo6b3Blbm1vZGUgbW9kZSwgaW50IHByb3QgPSAw
NjY0KTsKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZs
b3coaW50IGMgPSAoLTEpKTsKICAgIGludCBpc19vcGVuKCkgY29uc3QgeyByZXR1cm4gX2ZpbGVu
byA+PSAwOyB9CiAgICBpbnQgZmQoKSBjb25zdCB7IHJldHVybiBpc19vcGVuKCkgPyBfZmlsZW5v
IDogKC0xKTsgfQogICAgZmlsZWJ1ZiogY2xvc2UoKTsKICAgIHZpcnR1YWwgaW50IGRvYWxsb2Nh
dGUoKTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIs
IGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1
ZihjaGFyKiBwLCBpbnQgbGVuKTsKICAgIHN0cmVhbXNpemUgeHNwdXRuKGNvbnN0IGNoYXIqIHMs
IHN0cmVhbXNpemUgbik7CiAgICBzdHJlYW1zaXplIHhzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXpl
IG4pOwogICAgdmlydHVhbCBpbnQgc3luYygpOwogIHByb3RlY3RlZDoKCiAgICBpbnQgaXNfcmVh
ZGluZygpIHsgcmV0dXJuIGViYWNrKCkgIT0gZWdwdHIoKTsgfQogICAgY2hhciogY3VyX3B0cigp
IHsgcmV0dXJuIGlzX3JlYWRpbmcoKSA/IGdwdHIoKSA6IHBwdHIoKTsgfQoKICAgIGNoYXIqIGZp
bGVfcHRyKCkgeyByZXR1cm4gZUdwdHIoKTsgfQoKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNf
cmVhZChjaGFyKiBidWYsIHN0cmVhbXNpemUgc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBz
eXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lz
X3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJlYW1zaXplKTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0
KHZvaWQqKTsKICAgIHZpcnR1YWwgaW50IHN5c19jbG9zZSgpOwoKCgoKfTsKCmlubGluZSB2b2lk
IGlvczo6aW5pdChzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsKICAgICAgICAgICAg
ICAgIF9zdGF0ZSA9IHNiID8gaW9zOjpnb29kYml0IDogaW9zOjpiYWRiaXQ7IF9leGNlcHRpb25z
PTA7CiAgICAgICAgICAgICAgICBfc3RyYnVmPXNiOyBfdGllID0gdGllX3RvOyBfd2lkdGg9MDsg
X2ZpbGw9JyAnOwoKICAgICAgICAgICAgICAgIF9mbGFncz1pb3M6OnNraXB3c3xpb3M6OmRlYzsK
CgoKICAgICAgICAgICAgICAgIF9wcmVjaXNpb249NjsgX2FycmF5cyA9IDA7IH0KCmlubGluZSBp
b3M6OmlvcyhzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsgaW5pdChzYiwgdGllX3Rv
KTsgfQoKaW5saW5lIGlvczo6fmlvcygpIHsKCgoKCgogICAgb3BlcmF0b3IgZGVsZXRlW10gKF9h
cnJheXMpOwp9Cn0KIyAzMiAiL3Vzci9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDIgMwoKZXh0
ZXJuICJDKysiIHsKY2xhc3MgaXN0cmVhbTsgY2xhc3Mgb3N0cmVhbTsKdHlwZWRlZiBpb3MmICgq
X19tYW5pcCkoaW9zJik7CnR5cGVkZWYgaXN0cmVhbSYgKCpfX2ltYW5pcCkoaXN0cmVhbSYpOwp0
eXBlZGVmIG9zdHJlYW0mICgqX19vbWFuaXApKG9zdHJlYW0mKTsKCmV4dGVybiBpc3RyZWFtJiB3
cyhpc3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYgb3V0cyk7CmV4
dGVybiBvc3RyZWFtJiBlbmRsKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kcyhv
c3RyZWFtJiBvdXRzKTsKCmNsYXNzIG9zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MKewoKICAg
IHZvaWQgZG9fb3NmeCgpOwogIHB1YmxpYzoKICAgIG9zdHJlYW0oKSB7IH0KICAgIG9zdHJlYW0o
c3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllZD1fX251bGwpOwogICAgaW50IG9wZngoKSB7CiAg
ICAgICAgaWYgKCFnb29kKCkpIHJldHVybiAwOwogICAgICAgIGVsc2UgeyBpZiAoX3RpZSkgX3Rp
ZS0+Zmx1c2goKTs7IHJldHVybiAxO30gfQogICAgdm9pZCBvc2Z4KCkgezsKICAgICAgICAgICAg
ICAgICAgaWYgKGZsYWdzKCkgJiAoaW9zOjp1bml0YnVmfGlvczo6c3RkaW8pKQogICAgICAgICAg
ICAgICAgICAgICAgZG9fb3NmeCgpOyB9CiAgICBvc3RyZWFtJiBmbHVzaCgpOwogICAgb3N0cmVh
bSYgcHV0KGNoYXIgYykgeyBfc3RyYnVmLT5zcHV0YyhjKTsgcmV0dXJuICp0aGlzOyB9CgoKCgoK
ICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IGNoYXIgKnMsIHN0cmVhbXNpemUgbik7CiAgICBvc3Ry
ZWFtJiB3cml0ZShjb25zdCB1bnNpZ25lZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsg
cmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiB3cml0ZShjb25z
dCBzaWduZWQgY2hhciAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29u
c3QgY2hhciopcywgbik7fQogICAgb3N0cmVhbSYgd3JpdGUoY29uc3Qgdm9pZCAqcywgc3RyZWFt
c2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0
cmVhbSYgc2Vla3Aoc3RyZWFtcG9zKTsKICAgIG9zdHJlYW0mIHNlZWtwKHN0cmVhbW9mZiwgX3Nl
ZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0ZWxscCgpOwogICAgb3N0cmVhbSYgZm9ybShjb25zdCBj
aGFyICpmb3JtYXQgLi4uKTsKICAgIG9zdHJlYW0mIHZmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCwg
X19nbnVjX3ZhX2xpc3QgYXJncyk7CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjaGFyIGMpOwog
ICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykg
PDwgKGNoYXIpYzsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzaWduZWQgY2hhciBjKSB7IHJl
dHVybiAoKnRoaXMpIDw8IChjaGFyKWM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qg
Y2hhciAqcyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMp
CiAgICAgICAgeyByZXR1cm4gKCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsgfQogICAgb3N0cmVh
bSYgb3BlcmF0b3I8PChjb25zdCBzaWduZWQgY2hhciAqcykKICAgICAgICB7IHJldHVybiAoKnRo
aXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHZv
aWQgKnApOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChpbnQgbik7CiAgICBvc3RyZWFtJiBvcGVy
YXRvcjw8KHVuc2lnbmVkIGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBuKTsK
ICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBuKTsKCiAgICBfX2V4dGVuc2lv
bl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBsb25nIG4pOwogICAgX19leHRlbnNpb25fXyBv
c3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBuKTsKCiAgICBvc3RyZWFtJiBv
cGVyYXRvcjw8KHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgoaW50KW4pO30KICAgIG9zdHJl
YW0mIG9wZXJhdG9yPDwodW5zaWduZWQgc2hvcnQgbikge3JldHVybiBvcGVyYXRvcjw8KCh1bnNp
Z25lZCBpbnQpbik7fQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoYm9vbCBiKSB7IHJldHVybiBv
cGVyYXRvcjw8KChpbnQpYik7IH0KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGRvdWJsZSBuKTsK
ICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoZmxvYXQgbikgeyByZXR1cm4gb3BlcmF0b3I8PCgoZG91
YmxlKW4pOyB9CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIGRvdWJsZSBuKTsKCgoKICAg
IG9zdHJlYW0mIG9wZXJhdG9yPDwoX19vbWFuaXAgZnVuYykgeyByZXR1cm4gKCpmdW5jKSgqdGhp
cyk7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoX19tYW5pcCBmdW5jKSB7KCpmdW5jKSgqdGhp
cyk7IHJldHVybiAqdGhpczt9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHN0cmVhbWJ1ZiopOwoK
Cgp9OwoKY2xhc3MgaXN0cmVhbSA6IHZpcnR1YWwgcHVibGljIGlvcwp7Cgpwcm90ZWN0ZWQ6CiAg
ICBzaXplX3QgX2djb3VudDsKCiAgICBpbnQgX3NraXBfd3MoKTsKICBwdWJsaWM6CiAgICBpc3Ry
ZWFtKCk6IF9nY291bnQgKDApIHsgfQogICAgaXN0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFt
KnRpZWQ9X19udWxsKTsKICAgIGlzdHJlYW0mIGdldChjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIg
ZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldCh1bnNpZ25lZCBjaGFyKiBwdHIsIGludCBs
ZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQogICAgICAgIHsgcmV0dXJuIGdldCgoY2hhciopcHRyLCBs
ZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgZ2V0KGNoYXImIGMpOwogICAgaXN0cmVhbSYgZ2V0
KHVuc2lnbmVkIGNoYXImIGMpIHsgcmV0dXJuIGdldCgoY2hhciYpYyk7IH0KICAgIGlzdHJlYW0m
IGdldGxpbmUoY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAgICBpc3Ry
ZWFtJiBnZXRsaW5lKHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdc
bicpCiAgICAgICAgeyByZXR1cm4gZ2V0bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQog
ICAgaXN0cmVhbSYgZ2V0KHNpZ25lZCBjaGFyJiBjKSB7IHJldHVybiBnZXQoKGNoYXImKWMpOyB9
CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9
ICdcbicpCiAgICAgICAgeyByZXR1cm4gZ2V0KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAg
ICBpc3RyZWFtJiBnZXRsaW5lKHNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0g
PSAnXG4nKQogICAgICAgIHsgcmV0dXJuIGdldGxpbmUoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7
IH0KICAgIGlzdHJlYW0mIHJlYWQoY2hhciAqcHRyLCBzdHJlYW1zaXplIG4pOwogICAgaXN0cmVh
bSYgcmVhZCh1bnNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4g
cmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZChzaWduZWQgY2hhciAqcHRy
LCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0KICAg
IGlzdHJlYW0mIHJlYWQodm9pZCAqcHRyLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHJl
YWQoKGNoYXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIGdldChzdHJlYW1idWYmIHNiLCBjaGFy
IGRlbGltID0gJ1xuJyk7CiAgICBpc3RyZWFtJiBnZXRzKGNoYXIgKipzLCBjaGFyIGRlbGltID0g
J1xuJyk7CiAgICBpbnQgaXBmeChpbnQgbmVlZCA9IDApIHsKICAgICAgICBpZiAoIWdvb2QoKSkg
eyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0KICAgICAgICBlbHNlIHsKOwogICAgICAg
ICAgaWYgKF90aWUgJiYgKG5lZWQgPT0gMCB8fCByZGJ1ZigpLT5pbl9hdmFpbCgpIDwgbmVlZCkp
IF90aWUtPmZsdXNoKCk7CiAgICAgICAgICBpZiAoIW5lZWQgJiYgKGZsYWdzKCkgJiBpb3M6OnNr
aXB3cykpIHJldHVybiBfc2tpcF93cygpOwogICAgICAgICAgZWxzZSByZXR1cm4gMTsKICAgICAg
ICB9CiAgICB9CiAgICBpbnQgaXBmeDAoKSB7CiAgICAgICAgaWYgKCFnb29kKCkpIHsgc2V0KGlv
czo6ZmFpbGJpdCk7IHJldHVybiAwOyB9CiAgICAgICAgZWxzZSB7CjsKICAgICAgICAgIGlmIChf
dGllKSBfdGllLT5mbHVzaCgpOwogICAgICAgICAgaWYgKGZsYWdzKCkgJiBpb3M6OnNraXB3cykg
cmV0dXJuIF9za2lwX3dzKCk7CiAgICAgICAgICBlbHNlIHJldHVybiAxOwogICAgICAgIH0KICAg
IH0KICAgIGludCBpcGZ4MSgpIHsKICAgICAgICBpZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWls
Yml0KTsgcmV0dXJuIDA7IH0KICAgICAgICBlbHNlIHsKOwogICAgICAgICAgaWYgKF90aWUgJiYg
cmRidWYoKS0+aW5fYXZhaWwoKSA9PSAwKSBfdGllLT5mbHVzaCgpOwogICAgICAgICAgcmV0dXJu
IDE7CiAgICAgICAgfQogICAgfQogICAgdm9pZCBpc2Z4KCkgezsgfQogICAgaW50IGdldCgpIHsg
aWYgKCFpcGZ4MSgpKSByZXR1cm4gKC0xKTsKICAgICAgICAgICAgICAgIGVsc2UgeyBpbnQgY2gg
PSBfc3RyYnVmLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gKC0x
KSkgc2V0KGlvczo6ZW9mYml0KTsKICAgICAgICAgICAgICAgICAgICAgICBpc2Z4KCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoOwogICAgICAgICAgICAgICAgICAgICB9IH0KICAg
IGludCBwZWVrKCk7CiAgICBzaXplX3QgZ2NvdW50KCkgeyByZXR1cm4gX2djb3VudDsgfQogICAg
aXN0cmVhbSYgaWdub3JlKGludCBuPTEsIGludCBkZWxpbSA9ICgtMSkpOwogICAgaW50IHN5bmMg
KCk7CiAgICBpc3RyZWFtJiBzZWVrZyhzdHJlYW1wb3MpOwogICAgaXN0cmVhbSYgc2Vla2coc3Ry
ZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgc3RyZWFtcG9zIHRlbGxnKCk7CiAgICBpc3RyZWFtJiBw
dXRiYWNrKGNoYXIgY2gpIHsKICAgICAgICBpZiAoZ29vZCgpICYmIF9zdHJidWYtPnNwdXRiYWNr
YyhjaCkgPT0gKC0xKSkgY2xlYXIoaW9zOjpiYWRiaXQpOwogICAgICAgIHJldHVybiAqdGhpczt9
CiAgICBpc3RyZWFtJiB1bmdldCgpIHsKICAgICAgICBpZiAoZ29vZCgpICYmIF9zdHJidWYtPnN1
bmdldGMoKSA9PSAoLTEpKSBjbGVhcihpb3M6OmJhZGJpdCk7CiAgICAgICAgcmV0dXJuICp0aGlz
O30KICAgIGlzdHJlYW0mIHNjYW4oY29uc3QgY2hhciAqZm9ybWF0IC4uLik7CiAgICBpc3RyZWFt
JiB2c2Nhbihjb25zdCBjaGFyICpmb3JtYXQsIF9fZ251Y192YV9saXN0IGFyZ3MpOwoKCgoKCgog
ICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyKik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVu
c2lnbmVkIGNoYXIqIHApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3Ry
ZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyKnApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIq
KXApOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXImIGMpOwogICAgaXN0cmVhbSYgb3Bl
cmF0b3I+Pih1bnNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9wZXJhdG9yPj4oKGNoYXImKWMpO30K
ICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+
PigoY2hhciYpYyk7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihpbnQmKTsKICAgIGlzdHJlYW0m
IG9wZXJhdG9yPj4obG9uZyYpOwoKICAgIF9fZXh0ZW5zaW9uX18gaXN0cmVhbSYgb3BlcmF0b3I+
Pihsb25nIGxvbmcmKTsKICAgIF9fZXh0ZW5zaW9uX18gaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNp
Z25lZCBsb25nIGxvbmcmKTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNob3J0Jik7CiAgICBp
c3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+
Pih1bnNpZ25lZCBsb25nJik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0
Jik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihib29sJik7CgogICAgaXN0cmVhbSYgb3BlcmF0
b3I+PihmbG9hdCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihkb3VibGUmKTsKICAgIGlzdHJl
YW0mIG9wZXJhdG9yPj4obG9uZyBkb3VibGUmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oIF9f
bWFuaXAgZnVuYykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYg
b3BlcmF0b3I+PihfX2ltYW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0aGlzKTsgfQogICAg
aXN0cmVhbSYgb3BlcmF0b3I+PihzdHJlYW1idWYqKTsKfTsKCmNsYXNzIGlvc3RyZWFtIDogcHVi
bGljIGlzdHJlYW0sIHB1YmxpYyBvc3RyZWFtCnsKICBwdWJsaWM6CiAgICBpb3N0cmVhbSgpIHsg
fQogICAgaW9zdHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSp0aWVkPV9fbnVsbCk7Cn07Cgpj
bGFzcyBfSU9faXN0cmVhbV93aXRoYXNzaWduIDogcHVibGljIGlzdHJlYW0gewpwdWJsaWM6CiAg
X0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KGlzdHJlYW0mKTsKICBfSU9faXN0cmVh
bV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgcmhzKQogICAg
eyByZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxpc3RyZWFtJj4gKHJocykpOyB9Cn07Cgpj
bGFzcyBfSU9fb3N0cmVhbV93aXRoYXNzaWduIDogcHVibGljIG9zdHJlYW0gewpwdWJsaWM6CiAg
X0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KG9zdHJlYW0mKTsKICBfSU9fb3N0cmVh
bV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgcmhzKQogICAg
eyByZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxvc3RyZWFtJj4gKHJocykpOyB9Cn07Cgpl
eHRlcm4gX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiBjaW47CgpleHRlcm4gX0lPX29zdHJlYW1fd2l0
aGFzc2lnbiBjb3V0LCBjZXJyOwoKZXh0ZXJuIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24gY2xvZwoK
Cgo7CgpleHRlcm4gaXN0cmVhbSYgbG9jayhpc3RyZWFtJiBpbnMpOwpleHRlcm4gaXN0cmVhbSYg
dW5sb2NrKGlzdHJlYW0mIGlucyk7CmV4dGVybiBvc3RyZWFtJiBsb2NrKG9zdHJlYW0mIG91dHMp
OwpleHRlcm4gb3N0cmVhbSYgdW5sb2NrKG9zdHJlYW0mIG91dHMpOwoKc3RydWN0IElvc3RyZWFt
X2luaXQgeyB9IDsKCmlubGluZSBpb3MmIGRlYyhpb3MmIGkpCnsgaS5zZXRmKGlvczo6ZGVjLCBp
b3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9CmlubGluZSBpb3MmIGhleChp
b3MmIGkpCnsgaS5zZXRmKGlvczo6aGV4LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJl
dHVybiBpOyB9CmlubGluZSBpb3MmIG9jdChpb3MmIGkpCnsgaS5zZXRmKGlvczo6b2N0LCBpb3M6
OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9Cn0KCiMgMTggIi4uLy4uLy4uL3Ny
Yy9mcmFtZXdvcmsvdXRpbC9Qcm9iLmgiIDIKCiMgMjcgIi91c3IvaW5jbHVkZS9nKystMy9pb21h
bmlwLmgiIDEgMwojcHJhZ21hIGludGVyZmFjZQojIDI3ICIvdXNyL2luY2x1ZGUvZysrLTMvaW9t
YW5pcC5oIiAzCgoKCgoKCmV4dGVybiAiQysrIiB7CiMgNDIgIi91c3IvaW5jbHVkZS9nKystMy9p
b21hbmlwLmgiIDMKdGVtcGxhdGU8Y2xhc3MgVFA+IGNsYXNzIHNtYW5pcDsKCnRlbXBsYXRlPGNs
YXNzIFRQPiBjbGFzcyBzYXBwIHsKICAgIGlvcyYgKCpfZikoaW9zJiwgVFApOwpwdWJsaWM6CiAg
ICBzYXBwKGlvcyYgKCpmKShpb3MmLCBUUCkpIDogX2YoZikge30KCiAgICBzbWFuaXA8VFA+IG9w
ZXJhdG9yKCkoVFAgYSkKICAgICAgeyByZXR1cm4gc21hbmlwPFRQPihfZiwgYSk7IH0KfTsKCnRl
bXBsYXRlPGNsYXNzIFRQPgppbmxpbmUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiBpLCBj
b25zdCBzbWFuaXA8VFA+JiBtKTsKdGVtcGxhdGU8Y2xhc3MgVFA+CmlubGluZSBvc3RyZWFtJiBv
cGVyYXRvcjw8KG9zdHJlYW0mIG8sIGNvbnN0IHNtYW5pcDxUUD4mIG0pOwoKdGVtcGxhdGUgPGNs
YXNzIFRQPiBjbGFzcyBzbWFuaXAgewogICAgaW9zJiAoKl9mKShpb3MmLCBUUCk7CiAgICBUUCBf
YTsKcHVibGljOgogICAgc21hbmlwKGlvcyYgKCpmKShpb3MmLCBUUCksIFRQIGEpIDogX2YoZiks
IF9hKGEpIHt9CgogICAgZnJpZW5kCiAgICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4gPD4oaXN0cmVh
bSYgaSwgY29uc3Qgc21hbmlwPFRQPiYgbSk7CiAgICBmcmllbmQKICAgICAgb3N0cmVhbSYgb3Bl
cmF0b3I8PCA8Pihvc3RyZWFtJiBvLCBjb25zdCBzbWFuaXA8VFA+JiBtKTsKfTsKCgpfX2V4dGVu
c2lvbl9fIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBzbWFuaXA8aW50PjsKX19leHRlbnNpb25fXyBl
eHRlcm4gdGVtcGxhdGUgY2xhc3Mgc21hbmlwPGlvczo6Zm10ZmxhZ3M+OwoKCnRlbXBsYXRlPGNs
YXNzIFRQPgppbmxpbmUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiBpLCBjb25zdCBzbWFu
aXA8VFA+JiBtKQp7ICgqbS5fZikoaSwgbS5fYSk7IHJldHVybiBpOyB9Cgp0ZW1wbGF0ZTxjbGFz
cyBUUD4KaW5saW5lIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgbywgY29uc3Qgc21hbmlw
PFRQPiYgbSkKeyAoKm0uX2YpKG8sIG0uX2EpOyByZXR1cm4gbzt9CgoKX19leHRlbnNpb25fXyBl
eHRlcm4KdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgY29uc3Qgc21hbmlw
PGludD4mKTsKX19leHRlbnNpb25fXyBleHRlcm4KdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+
Pihpc3RyZWFtJiwgY29uc3Qgc21hbmlwPGlvczo6Zm10ZmxhZ3M+Jik7Cl9fZXh0ZW5zaW9uX18g
ZXh0ZXJuCnRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IHNtYW5p
cDxpbnQ+Jik7Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuCnRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9y
PDwob3N0cmVhbSYsIGNvbnN0IHNtYW5pcDxpb3M6OmZtdGZsYWdzPiYpOwoKCgoKCgp0ZW1wbGF0
ZTxjbGFzcyBUUD4gY2xhc3MgaW1hbmlwOwoKdGVtcGxhdGU8Y2xhc3MgVFA+IGNsYXNzIGlhcHAg
ewogICAgaXN0cmVhbSYgKCpfZikoaXN0cmVhbSYsIFRQKTsKcHVibGljOgogICAgaWFwcChpc3Ry
ZWFtJiAoKmYpKGlzdHJlYW0mLFRQKSkgOiBfZihmKSB7fQoKICAgIGltYW5pcDxUUD4gb3BlcmF0
b3IoKShUUCBhKQogICAgICAgeyByZXR1cm4gaW1hbmlwPFRQPihfZiwgYSk7IH0KfTsKCnRlbXBs
YXRlIDxjbGFzcyBUUD4KaW5saW5lIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNvbnN0
IGltYW5pcDxUUD4mKTsKCnRlbXBsYXRlIDxjbGFzcyBUUD4gY2xhc3MgaW1hbmlwIHsKICAgIGlz
dHJlYW0mICgqX2YpKGlzdHJlYW0mLCBUUCk7CiAgICBUUCBfYTsKcHVibGljOgogICAgaW1hbmlw
KGlzdHJlYW0mICgqZikoaXN0cmVhbSYsIFRQKSwgVFAgYSkgOiBfZihmKSwgX2EoYSkge30KCiAjĀ:Bm llbmQKICAgIC BpLCBjb25zdCBp
bWFuaXA8VFA+JiBtKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBUUjĀ:W5 W5lIGlzdHJlY aW1hbmlwPFRQPiYgbSkKeyByZXR1cm4gKCptLl9m
KSggaSwgbS5fYSk7IH0KCgo 0ZW1wbGF0ZTxjbGFzcyBUUD4gY2xhc3Mgb21hbmlwOwoKdGVt
cGxhdGU8Y2xhc3MgVFA+IGNsYXNzIG9hcHAgewogICAgb3N0cmVhbSYgKCpfZikob3N0cmVhbS FRQKTsKcHVibGljOgogICAgb2FwcChvc3RyZWFtJiAoKmYpKG9zdHJlYW0mLFRQKSkgOiBfZihm
KSB7fQoKICAgIG9tYW5pcDxUUD4gb3BlcmF0b3IoKShUUCBh ICAgICB7IHJldHVybiBvbWFu
aXA8VFA+KF9mLCBhKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIFRQPgppbmxpbmUgb3N0cmVhbSYg
b3BlcmF0b3I8PChvc3RyZW wgY29uc3Qgb21hbmlwPFRQPiYpOwoKdGVtcGxhdGUgPGNsYXNz
IFRQPiBjbGFzcyBvbWFuaXAgewogICAgb3N0cmVhbSYgKCpfZikob3N0cmVhbSYsIFRQKTsKIjĀ:IF IF9hOwpwdWJs ZWFtJiwgVFApLCBU
UCBhKSA6IF9mKGYpLCBfYShhKSB7fQoKICAgIGZyaWVuZAo gICBvc3RyZWFtJiBvcGVyYXRv
cjw8IDw+KG9zdHJlYW0mIG8sIGNvbnN0IG9tYW5pcDxUUD4mIG0pOwp9OwoKdGVtcGxhdGUgPGNs
YXNzIFRQPgppbmxpbmUgbjĀ:mV SYgb3BlcmF0b JiBtKQp7IHJldHVybiAoKm0uX2YpKG8sIG0uX2EpOyB9CiMgMTY2ICIvdXNyL2lu
ZGUvZysrLTMvaW9tYW5pcC5oIiAzCgoKCgoKZXh0ZXJuIGlvcyYgX19pb21hbmlwX3NldGJhc2Ug
KGlvcyYsIGludCk7IGlubGluZSBzbWFuaXA8aW50PiBzZX NlIChpbnQgbikgeyByZXR1cm4g
c21hbmlwPGludD4gKF9faW9tYW5pcF9zZXRiYXNlLCBuKTsgfQpleHRlcm4gaW9zJiBfX2lvbWFu
aXBfc2V0ZmlsbCAoaW9z aW50KTsgaW5saW5lIHNtYW5pcDxpbnQ+IHNldGZpbGwgKGludCBu
KSB7IHJldHVybiBzbWFuaXA8aW50PiAoX19pb21hbmlwX3NldGZpbGwsIG4pOyB9CmV4dGV p
b3MmIF9faW9tYW5pcF9zZXRwcmVjaXNpb24gKGlvcyYsIGludCk7IGlubGluZSBzbWFuaXA8aW50
PiBzZXRwcmVjaXNpb24gKGludCBuKSB7IHJldHVybiBzbjĀ:XA W50PiAoX19pb IGlvcyYgX19pb21hbmlwX3NldHcgKGlvcyYsIGludCk7
IGlubGluZSBzbWFuaXAjĀ:0P zZXR3IChpbnQ 5pcF9zZXR3LCBuKTsgfQoKZXh0ZXJuIGlvcyYgX19pb21hbmlwX3Jlc2V0aW9zZm Mg
KGlvcyYsIGlvczo6Zm10ZmxhZ3MpOyBpbmxpbmUgc21hbmlwPGlvczo6Zm10ZmxhZ3M+IHJlc2V0
aW9zZmxhZ3MgKGlvczo6Zm10ZmxhZ3MgbikgeyByZXR1 c21hbmlwPGlvczo6Zm10ZmxhZ3M+
IChfX2lvbWFuaXBfcmVzZXRpb3NmbGFncywgbik7IH0KZXh0ZXJuIGlvcyYgX19pb21hbmlwX3Nl
dGlvc2ZsYWdzIChpb3 Bpb3M6OmZtdGZsYWdzKTsgaW5saW5lIHNtYW5pcDxpb3M6OmZtdGZs
YWdzPiBzZXRpb3NmbGFncyAoaW9zOjpmbXRmbGFncyBuKSB7IHJldHVybiBzbWFuaXA8ajĀ:jp bXRmbGFncz4g IyAxOSAiLi4vLi4vLi4v
c3JjL2ZyYW1ld29yay91dGlsL1Byb2IuaCIgMgojIDMjĀ:uL uLi8uLi9zcmM 9iOwp0eXBlZGVmIFByb2IgUEdGUHJvYjsKIyA0OCAiLi4v
Li4vLi4vc3JjL2ZyY 29yay91dGlsL1Byb2IuaCIKY2xhc3MgZnJvbV9kb3VibGUKewpwdWJs
aWM6CiAgZG91YmxlIHZhbDsKICBmcm9tX2RvdWJsZShjb25zdCBkb3VibGUgZCkge3ZhjĀ:IG
fQp9OwoKCgp lIHZhbDsKICBmcm9tX2xv
Zyhjb25zdCBkb3VibGUgZCkge3ZhbCA9IGQ7fQp9Ow MgMTAyICIuLi8uLi8uLi9zcmMvZnJh
bWV3b3JrL3V0aWwvUHJvYi5oIgojIDI2ICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJv
Ykd1dHMuaCIgMQpjjĀ:cy aG9ydFByb2I7 mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIgpjbGFzcyBQcm9iQmFzZQp7CnB1Ymx KCiAg
dHlwZWRlZiBlbnVtIHtPbmU9MSwgVW5pdHkgPSBPbmUsIFplcm8gPSAwLEludmFsaWQgPSAtMX0g
Q29uc3RQcm9iOwoKcHJvdGVjdGVkOgoKICBkb3Vib mFsOwojIDcyICIuLi8uLi8uLi9zcmMv
ZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIKICBzdGF0aWMgaW5saW5lIGRvdWJsZSBfbG9nVmFs
aWQodm9pZCkge3J ybiAtMWUzNzt9CiAgc3RhdGljIGlubGluZSBkb3VibGUgX2xvZ0ludmFs
aWQodm9pZCkge3JldHVybiAtMmUzNzt9CiAgc3RhdGljIGlubGluZSBkb3VibGUgX2 plcm8o
dm9pZCkge3JldHVybiAtMmUzNTt9CiAgc3RhdGljIGlubGluZSBkb3VibGUgX2xvZ0Vwc2lsb24o
dm9pZCkge3JldHVybiAtNzA4O30KCgoKCiAgc3Rh IGlubGluZSBkb3VibGUgX21heERpZmYo
dm9pZCkge3JldHVybiAzNy40O30KCgoKCgogIHN0YXRpYyBpbmxpbmUgZG91YmxlIF9hcHByb3hE
aWZmKHZvaWQpIH R1cm4gMWUtNzt9CiAgc3RhdGljIGlubGluZSBkb3VibGUgX2NhbGNMb2co
ZG91YmxlIHYpCiAgewogICAgICAgIHJldHVybiAodiA8IHJldF9lcHNpbG9uKCkpIjĀ:2x 1pl
cm8oKSA6 Ly4uL3NyYy9mcmFtZXdvcmsv
dXRpbC9Qcm9iR3V0cy5oIgogIHN0YXRpYyBkb3VjĀ:gc 0X2Vwc2lsb24 4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5o
IgogIGludCB2Y Ch2b2lkKSBjb25zdCB7CiAgICAgIHJldHVybiAodmFsID4gX2xvZ1ZhbGlk
KCkpICYmICh2YWwgPT0gdmFsKTsKICB9CgoKCgoKCiAgaW50IG5vbl9wcm9iKHZv IGNvbnN0
IHtyZXR1cm4gIXZhbGlkKCkgfHwgdmFsID4gMC4wO30KCgoKCiAgaW50IGlzX3plcm8odm9pZCkg
Y29uc3Qge3JldHVybiAodmFsIDw9IF9sb2daZX kpO30KCgoKCiAgaW50IGlzX29uZSh2b2lk
KSBjb25zdCB7cmV0dXJuIHZhbD09MC4wO30KCgoKCiAgZG91YmxlIHJldF9sb2codm9pZCkgY29u
c3Qge3JldHVy YWw7fQoKCgoKICBkb3VibGUgcmV0X2RvdWJsZSh2b2lkKSBjb25zdAogICAg
e3JldHVybiAodmFsIDwgX2xvZ0Vwc2lsb24oKSkgPyAwLjAgOiBleHAodmFsKTtjĀ:KC gIHZv
aWQgc2 QpICgodmFsID09IHZhbCkgPyAw
IDogKF9fYXNzZXJ0X2ZhaWwgKCJ2YWwgPT0gd iwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsv
dXRpbC9Qcm9iR3V0cy5oIiwgMTQ0LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTt9CgoKCgog
IHZvaWQgc2V vdWJsZSAoZG91YmxlIGYpIHt2YWwgPSBfY2FsY0xvZyhmKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAoKHZhbCA9PSB2YW 8gMCA6IChf
X2Fzc2VydF9mYWlsICgidmFsID09IHZhbCIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwv
UHJvYkd1dHMuaCIsIDE1MCwgX19QUkVUVFlfjĀ:Q1 T05fXyksIDAp 0UHJvYiBjKSB7CiAgICAgIHNldF9sb2cgKGMgPT0gT25lID8gMCA6
IGMgPT0gWmjĀ:A/ AgICAgICAgIC sK
ICAgICAgKCh2b2lkKSAoKHZhbCA9PSB2YWwpID8gMCA6IChfX2Fzc2VydF9mYjĀ:Cg mFsID09
IHZh UHJvYkd1dHMuaCIsIDE1OSwgX19Q
UkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiA KCgoKCgoKICBkb3VibGUgZW50cm9weSh2b2lk
KSBjb25zdCB7cmV0dXJuICgtKHJldF9kb3VibGUoKSAqIHZhbCkpOyB9OwoKCgoKCgogIFByb2JC
YXNlIG9wZ G9yfih2b2lkKSBjb25zdCB7CiAgICAgICgodm9pZCkgKCh2YWwgPT0gdmFsKSA/
IDAgOiAoX19hc3NlcnRfZmFpbCAoInZhbCA9PSB2YWwiLCAiLi4vLi4vLi4v L2ZyYW1ld29y
ay91dGlsL1Byb2JHdXRzLmgiLCAxNzYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAg
ICBQcm9iQmFzZSB4OwogICAgICB4LnNldF VibGUoMS4wLXJldF9kb3VibGUoKSk7CiAgICAg
ICgodm9pZCkgKCh4LnJldF9sb2coKSA9PXgucmV0X2xvZygpKSA/IDAgOiAoX19hc3NlcnRfZmFp
bCAoIngujĀ:X2 ZygpID09eC5y ay91
dGlsL1Byb2JHdXRzLmgiLCAxNzksIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCA pOwogICAgICBy
ZXR1cm4geDsKICB9CgoKCgoKCiBpbmxpbmUgUHJvYkJhc2Ugb3BlcmF0b3IqPShQcm9iQmFzZSB4
KTsKCgoKCiBpbmxpbmUgUHJvYkJhc2UgJ GVyYXRvci89KGNvbnN0IFByb2JCYXNlJiB4KTsK
CgoKCiBpbmxpbmUgUHJvYkJhc2UgJiBvcGVyYXRvcis9KGNvbnN0IFByb2JCYXNlJiB4KTsKCgoK
CiBpbmx gUHJvYkJhc2UgJiBvcGVyYXRvci09KGNvbnN0IFByb2JCYXNlJiB4KTsKCgoKCiBm
cmllbmQgaW5saW5lIFByb2JCYXNlIG9wZXJhdG9yKihjb25zdCBQcm9iQm YsY29uc3QgUHJv
YkJhc2UmKTsKIGZyaWVuZCBpbmxpbmUgUHJvYkJhc2Ugb3BlcmF0b3IvKGNvbnN0IFByb2JCYXNl
Jixjb25zdCBQcm9iQmFzZSYpOwogZnJp IGlubGluZSBQcm9iQmFzZSBvcGVyYXRvcisoY29u
c3QgUHJvYkJhc2UmLGNvbnN0IFByb2JCYXNlJik7CiBmcmllbmQgaW5saW5lIFByb2JCYXNlIG9w
ZXJhdG hjb25zdCBQcm9iQmFzZSYsY29uc3QgUHJvYkJhc2UmKTsKIyAyMjAgIi4uLy4uLy4u
L3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIgogZnJpZW5kIGlub SBpbnQgYXBwcm94
RXF1YWwoUHJvYkJhc2UgY29uc3QgJixQcm9iQmFzZSBjb25zdCAmKTsKCgoKCgoKIGZyaWVuZCBp
bmxpbmUgUHJvYkJhc2UgcG93KFByb2J lIGNvbnN0ICYsIGRvdWJsZSk7CgoKCgoKIGZyaWVu
ZCBpbmxpbmUgUHJvYkJhc2UgcG93KFByb2JCYXNlIGNvbnN0ICZhLCBpbnQgaSkgewogICAgIHJl
dHVyb 3coYSwgKGRvdWJsZSlpKSk7CiB9OwoKCgoKCgogZnJpZW5kIGlubGluZSBkb3VibGUg
cG93X2RvdWJsZShQcm9iQmFzZSBjb25zdCAmLCBkb3VibGUpOwp9OwoKjĀ:Cg bmxpbmUgZG91 gICgodm9pZCkgKChhLnJldF9sb2coKSA9
PWEucmV0X2xvZygpKSA/IDAgOiAoX1 NlcnRfZmFpbCAoImEucmV0X2xvZygpID09YS5yZXRf
bG9nKCkiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCAyNTQsIF9f
UFJF X0ZVTkNUSU9OX18pLCAwKSkpOwogIHJldHVybiBhLnJldF9sb2coKSAvIDAuNjkzMTQ3
MTgwNTU5OTQ1MzA5NDI7Cn0KCgoKCmlubGluZSBkb3VibGUKbG9nKFB CYXNlIGNvbnN0ICYg
YSkKCnsKICAoKHZvaWQpICgoYS5yZXRfbG9nKCkgPT1hLnJldF9sb2coKSkgPyAwIDogKF9fYXNz
ZXJ0X2ZhaWwgKCJhLnJldF9sb2coK WEucmV0X2xvZygpIiwgIi4uLy4uLy4uL3NyYy9mcmFt
ZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIiwgMjY1LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsK
ICB 1cm4gYS5yZXRfbG9nKCk7Cn0KCgoKCgppbmxpbmUgUHJvYkJhc2UKbWluKFByb2JCYXNl
IGNvbnN0ICYgYSwKICAgIFByb2JCYXNlIGNvbnN0ICYgYikKewogIC 9pZCkgKChhLnJldF9s
b2coKSA9PWEucmV0X2xvZygpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoImEucmV0X2xvZygpID09
YS5yZXRfbG9nKCkiLCAiLi4vLi4vjĀ:c3 L2ZyYW1ld29y ZX0ZVTkNUSU9OX18pLCAwKSkpOwogICgodm9pZCkgKChiLnJldF9sb2coKSA9
PWjĀ:V0 xvZygpKSA/ID 09Yi5yZXRf
bG9nKCkiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb XRzLmgiLCAyNzgsIF9f
UFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogIGlmIChiLnJldF9sb2coKSA8IGEucmV0X2xvZygp
KQogICAgcmV0dXJuIGI7CiAgZWx gICAgcmV0dXJuIGE7Cn0KCgoKCmlubGluZSBQcm9iQmFz
ZQptYXgoUHJvYkJhc2UgY29uc3QgJiBhLAogICAgUHJvYkJhc2UgY29uc3QgJiBiKQp7CiAgKCh2
b SAoKGEucmV0X2xvZygpID09YS5yZXRfbG9nKCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgi
YS5yZXRfbG9nKCkgPT1hLnJldF9sb2coKSIsICIuLi8uLi8uLi9z ZnJhbWV3b3JrL3V0aWwv
UHJvYkd1dHMuaCIsIDI5MiwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgKCh2b2lkKSAo
KGIucmV0X2xvZygpID09Yi5yZX 9nKCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiYi5yZXRf
bG9nKCkgPT1iLnJldF9sb2coKSIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJvYkd1
jĀ:aC IDI5MywgX19Q cmV0X2xvZygp
ID4gYS5yZXRfbG9nKCkpCiAgICByZXR1cm4gYjsKICBlbHNlCiA yZXR1cm4gYTsKfQoKCgpp
bmxpbmUgUHJvYkJhc2UKUHJvYkJhc2U6Om9wZXJhdG9yKj0oUHJvYkJhc2UgeCkKewogICgodm9p
ZCkgKCh2YWwgPT0gdmFsKSA/I iAoX19hc3NlcnRfZmFpbCAoInZhbCA9PSB2YWwiLCAiLi4v
Li4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCAzMDUsIF9fUFJFVFRZX0ZVTkNUjĀ:OX pLCAwKSkpOwo vZygpKSA/IDAg
OiAoX19hc3NlcnRfZmFpbCAoIngucmV0X2xvZygpID09eC5yZX 9nKCkiLCAiLi4vLi4vLi4v
c3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCAzMDYsIF9fUFJFVFRZX0ZVTkNUSU9OX18p
LCAwKSkpOwoKCgoKCiAgdmFs IHgudmFsOwogICgodm9pZCkgKCh2YWwgPT0gdmFsKSA/IDAg
OiAoX19hc3NlcnRfZmFpbCAoInZhbCA9PSB2YWwiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay9 lsL1Byb2JHdXRzLmgiLCAzMTMsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogIHJldHVy
biAqdGhpczsKfQoKaW5saW5lIFByb2JCYXNlICYKUHJvYkJhcjĀ:m9 XJhdG9yLz0oY dmFsID09IHZhbCkgPyAwIDogKF9fYXNzZXJ0X2Zh
aWwgKCJ2YWwgPT0gdmFsIiwjĀ:uL uLy4uL3NyYy9 BfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAoKHZvaWQpICgoeC5yZXRfbG CkgPT14LnJldF9sb2coKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ4LnJldF9sb2coKSA9PXgu
cmV0X2xvZygpIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsv bC9Qcm9iR3V0cy5oIiwgMzIx
LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAoKHZvaWQpICgoIXguaXNfemVybygpKSA/
IDAgOiAoX19hc3NlcnRfZm AoIiF4LmlzX3plcm8oKSIsICIuLi8uLi8uLi9zcmMvZnJhbWV3
b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDMyMiwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7C CgoKICAgIHZhbCAtPSB4LnZhbDsKICAoKHZvaWQpICgodmFsID09IHZhbCkgPyAwIDogKF9fYXNz
ZXJ0X2ZhaWwgKCJ2YWwgPT0gdmFsIiwgIi4uLy4uLy4uL3NjĀ:mc tZXdvcmsvdXR 5DVElPTl9fKSwgMCkpKTsKICByZXR1cm4gKnRoaXM7
Cn0KCgoKaW5saW5lIFByb XNlCm9wZXJhdG9yKihjb25zdCBQcm9iQmFzZSYgeGFyZywKICAg
ICAgICAgIGNvbnN0IFByb2JCYXNlJiB5KQp7CiAgUHJvYkJhc2UgeCA9eGFyZzsKICAoKHZvjĀ:
I oeC5yZXRfbG9 0X2ZhaWwgKCJ4LnJl
dF9sb2coKSA9PXgucmV0X2xvZygpIiwgIi4uLy4uLy4uL3 9mcmFtZXdvcmsvdXRpbC9Qcm9i
R3V0cy5oIiwgMzQwLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAoKHZvaWQpICgoeS5y
ZXRfbG9nKCkgPT15LnJl b2coKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ5LnJldF9sb2co
KSA9PXkucmV0X2xvZygpIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V o
IiwgMzQxLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICB4ICo9IHk7CiAgKCh2b2lkKSAo
KHgucmV0X2xvZygpID09eC5yZXRfbG9nKCkpID8gMCA6I 2Fzc2VydF9mYWlsICgieC5yZXRf
bG9nKCkgPT14LnJldF9sb2coKSIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJvYkd1
dHMuaCIsIDM0MywgX19 UVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgcmV0dXJuIHg7Cn0KCmlu
bGluZSBQcm9iQmFzZQpvcGVyYXRvci8oY29uc3QgUHJvYkJhc2UmIHhhcmcsCiAgICAgIC Bj
b25zdCBQcm9iQmFzZSYgeSkKewogIFByb2JCYXNlIHg9eGFyZzsKICAoKHZvaWQpICgoeC5yZXRf
bG9nKCkgPT14LnJldF9sb2coKSkgPyAwIDogKF9fYXNz X2ZhaWwgKCJ4LnJldF9sb2coKSA9
PXgucmV0X2xvZygpIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIiwg
MzUyLCBfX1BSRVRUWV 5DVElPTl9fKSwgMCkpKTsKICAoKHZvaWQpICgoeS5yZXRfbG9nKCkg
PT15LnJldF9sb2coKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ5LnJldF9sb2coKSA9PjĀ:mV X2xvZygpIiwg R3V0cy5oIiwgMzUzLCBf
X1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICB4IC8jĀ:7C gKCh2b2lkKSA A6IChfX2Fzc2VydF9mYWlsICgieC5yZXRfbG9nKCkgPT14
LnJldF9sb2coKSIsI i8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDM1
NSwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgcmV0dXJuIHg7Cn0KCmlubGlu cm9i
QmFzZQpvcGVyYXRvcisoY29uc3QgUHJvYkJhc2UmIHgsCiAgICAgICAgICBjb25zdCBQcm9iQmFz
ZSYgeSkKewogICgodm9pZCkgKCh4LnJldF9sb2coKS gucmV0X2xvZygpKSA/IDAgOiAoX19h
c3NlcnRfZmFpbCAoIngucmV0X2xvZygpID09eC5yZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3JjL2Zy
YW1ld29yay91dGls b2JHdXRzLmgiLCAzNjMsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkp
OwogICgodm9pZCkgKCh5LnJldF9sb2coKSA9PXkucmV0X2xvZygpKSA/IDAgOiAoX19 lcnRf
ZmFpbCAoInkucmV0X2xvZygpID09eS5yZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29y
ay91dGlsL1Byb2JHdXRzLmgiLCAzNjQsIF9fUFJFV 0ZVTkNUSU9OX18pLCAwKSkpOwogIGlm
ICh4LmlzX3plcm8oKSkKICAgIHJldHVybiB5OwogIGVsc2UgaWYgKHkuaXNfemVybygpKQogICAg
cmV0dXJuIHg7CgojĀ:vd sZSB2YWwsIGR ZhbCA9IHgudmFsOwogICAgZGlmID0geS52YWwgLSB4LnZhbDsKICB9IGVsc2Ugew AgdmFs
ID0geS52YWw7CiAgICBkaWYgPSB4LnZhbCAtIHkudmFsOwogIH0KICAoKHZvaWQpICgoZGlmIDw9
IDApID8gMCA6IChfX2Fzc2VydF9mYWlsICgiZGlm IDAiLCAiLi4vLi4vLi4vc3JjL2ZyYW1l
d29yay91dGlsL1Byb2JHdXRzLmgiLCAzNzksIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoK
CgogIGlmICgtZGjĀ:wg JvYkJhc2U6Ol yBleHAoZGlmKSk7CgoKCiAgUHJvYkJhc2UgUDsKICBQLnZhbCA9IHZhbDsKICAoK WQpICgo
UC5yZXRfbG9nKCkgPT1QLnJldF9sb2coKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJQLnJldF9s
b2coKSA9PVAucmV0X2xvZygpIiwgIi4uLy4uLy4 yYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0
cy5oIiwgMzkwLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICByZXR1cm4gUDsKfQoKCmlu
bGluZSBQcm9iQjĀ:Qp GVyYXRvci0oY dCBQcm9iQmFzZSYgeSkKewogICgodm9pZCkgKCh4LnJldF9sb2coKSA9PXgucmV0jĀ:Zy KSA/
IDAgOiA yZXRfbG9nKCkiLCAiLi4vLi4v
Li4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdX giLCAzOTksIF9fUFJFVFRZX0ZVTkNUSU9O
X18pLCAwKSkpOwogICgodm9pZCkgKCh5LnJldF9sb2coKSA9PXkucmV0X2xvZygpKSA/IDAgOiAo
X19hc3NlcnRfjĀ:bC InkucmV0X2xv
L2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCA0MDAsIF9fUFJFVFRZX0ZVTkNjĀ:OX pLCAw
KSkpOw 4geDsKICB9CgogIFByb2JCYXNl
IHJldHVyblZhbHVlOwogIGlmIChhcHByb3hFc CAoeCwgeSkpIHsKICAgICAgcmV0dXJuVmFs
dWUuc2V0X2NvbnN0KFByb2JCYXNlOjpaZXJvKTsKICB9IGVsc2UgewogICAgICByZXR1cm5WYWx1
ZS52YWwgPSB iQmFzZTo6X2NhbGNMb2coZXhwKHgudmFsKSAtIGV4cCh5LnZhbCkpOwogIH0K
ICAoKHZvaWQpICgocmV0dXJuVmFsdWUucmV0X2xvZygpID09cmV0dXJuVmFsdW V0X2xvZygp
KSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoInJldHVyblZhbHVlLnJldF9sb2coKSA9PXJldHVyblZh
bHVlLnJldF9sb2coKSIsICIuLi8uLi8uLi9z ZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIs
IDQxMSwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgcmV0dXJuIHJldHVyblZhbHVlOwp9
Cgppbmxpbm JvYkJhc2UgJgpQcm9iQmFzZTo6b3BlcmF0b3IrPShjb25zdCBQcm9iQmFzZSYg
eCkKewogICgodm9pZCkgKCh2YWwgPT0gdmFsKSA/IDAgOiAoX19hc3NlcnRfZjĀ:CA nZhbCA9
PSB2 L1Byb2JHdXRzLmgiLCA0MTgsIF9f
UFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwo odm9pZCkgKCh4LnJldF9sb2coKSA9PXgucmV0
X2xvZygpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIngucmV0X2xvZygpID09eC5yZXRfbG9nKCki
LCAiLi4vL i4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCA0MTksIF9fUFJFVFRZ
X0ZVTkNUSU9OX18pLCAwKSkpOwoKICAqdGhpcyA9ICp0aGlzICsgeDsKICAojĀ:aW ICgodmFs
ID0 gPT0gdmFsIiwgIi4uLy4uLy4uL3Ny
Yy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy wgNDIyLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwg
MCkpKTsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBQcm9iQmFzZSAmClByb2JCYXNlOjpvcGVy
YXRvci09jĀ:bn IFByb2JCYXNl MCA6
IChfX2Fzc2VydF9mYWlsICgidmFsID09IHZhbCIsICIuLi8uLi8uLi9zcmMjĀ:hb 3b3JrL3V0
aW RJT05fXyksIDApKSk7CiAgKCh2b2lk
KSAoKHgucmV0X2xvZygpID09eC5yZXRfb CkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgieC5y
ZXRfbG9nKCkgPT14LnJldF9sb2coKSIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJv
Ykd1dHM sIDQzMCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CgogICp0aGlzID0gKnRo
aXMgLSB4OwogICgodm9pZCkgKCh2YWwgPT0gdmFsKSA/IDAgOiAoX19hc3 RfZmFpbCAoInZh
bCA9PSB2YWwiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCA0MzMs
IF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAw OwogIHJldHVybiAqdGhpczsKfQoKCmlubGluZSBj
bGFzcyBvc3RyZWFtICYKb3BlcmF0b3I8PChjbGFzcyBvc3RyZWFtICZvLFByb2JCYXNlIGNvbnN0
ICZwKQ JldHVybiBwLnZhbGlkKCkgPyAobyA8PCBwLnJldF9kb3VibGUoKSkgOiAobyA8PCAi
Pz8iKTt9CgppbmxpbmUgaW50IG9wZXJhdG9yID09KGNvbnN0IFByb2JCY CYgeCxjb25zdCBQ
cm9iQmFzZSAmIHkpIHsgKCh2b2lkKSAoKHgucmV0X2xvZygpID09eC5yZXRfbG9nKCkpID8gMCA6
IChfX2Fzc2VydF9mYWlsICgieC5yZXR nKCkgPT14LnJldF9sb2coKSIsICIuLi8uLi8uLi9z
cmMvZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDQ0MiwgX19QUkVUVFlfRlVOQ1RJT05fXyks
IDApKjĀ:Cg m9pZCkgKCh5L 19hc3Nl
cnRfZmFpbCAoInkucmV0X2xvZygpID09eS5yZXRfbG9nKCkiLCAiLi4v Li4vc3JjL2ZyYW1l
d29yay91dGlsL1Byb2JHdXRzLmgiLCA0NDIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOyBy
ZXR1cm4geC5yZXRfbG9nKCkgPT0geS RfbG9nKCk7IH0KaW5saW5lIGludCBvcGVyYXRvciA8
PShjb25zdCBQcm9iQmFzZSAmIHgsY29uc3QgUHJvYkJhc2UgJiB5KSB7ICgodm9pZCkgKCh4LnJl
dF9s KSA9PXgucmV0X2xvZygpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIngucmV0X2xvZygp
ID09eC5yZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay9 sL1Byb2JHdXRzLmgi
LCA0NDMsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOyAoKHZvaWQpICgoeS5yZXRfbG9nKCkg
PT15LnJldF9sb2coKSkgPyAwIDogK XNzZXJ0X2ZhaWwgKCJ5LnJldF9sb2coKSA9PXkucmV0
X2xvZygpIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIiwgNDQzLCBf
X1B UWV9GVU5DVElPTl9fKSwgMCkpKTsgcmV0dXJuIHgucmV0X2xvZygpIDw9IHkucmV0X2xv
ZygpOyB9CmlubGluZSBpbnQgb3BlcmF0b3IgPj0oY29uc3QgUHJvYk UgJiB4LGNvbnN0IFBy
b2JCYXNlICYgeSkgeyAoKHZvaWQpICgoeC5yZXRfbG9nKCkgPT14LnJldF9sb2coKSkgPyAwIDog
KF9fYXNzZXJ0X2ZhaWwgKCJ4LnJl b2coKSA9PXgucmV0X2xvZygpIiwgIi4uLy4uLy4uL3Ny
Yy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIiwgNDQ0LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwg
MC sgKCh2b2lkKSAoKHkucmV0X2xvZygpID09eS5yZXRfbG9nKCkpID8gMCA6IChfX2Fzc2Vy
dF9mYWlsICgieS5yZXRfbG9nKCkgPT15LnJldF9sb2coKSIsICIuLjĀ:i8 i9zcmMvZnJhb UkVUVFlfRlVOQ1RJT05fXyksIDApKSk7IHJl
dHVybiB4LnJldF9sb2coKSA+PSBjĀ:ld sb2coKTsgfQp Jhc2UgJiB4LGNvbnN0IFByb2JCYXNlICYgeSkgeyAoKHZvaWQpICgoeC5yZXRf
b CkgPT14LnJldF9sb2coKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ4LnJldF9sb2coKSA9
PXgucmV0X2xvZygpIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsv bC9Qcm9iR3V0cy5oIiwg
NDQ1LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsgKCh2b2lkKSAoKHkucmV0X2xvZygpID09
eS5yZXRfbG9nKCkpID8gMCA6IC Fzc2VydF9mYWlsICgieS5yZXRfbG9nKCkgPT15LnJldF9s
b2coKSIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDQ0NSwgX19Q
jĀ:VF RlVOQ1RJT05f cmV0X2xvZygp
OyB9CmlubGluZSBpbnQgb3BlcmF0b3IgPihjb25zdCBQcm9iQmF mIHgsY29uc3QgUHJvYkJh
c2UgJiB5KSB7ICgodm9pZCkgKCh4LnJldF9sb2coKSA9PXgucmV0X2xvZygpKSA/IDAgOiAoX19h
c3NlcnRfZmFpbCAoIngucmV0X ygpID09eC5yZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3JjL2Zy
YW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCA0NDYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkp oKHZvaWQpICgoeS5yZXRfbG9nKCkgPT15LnJldF9sb2coKSkgPyAwIDogKF9fYXNzZXJ0X2Zh
aWwgKCJ5LnJldF9sb2coKSA9PXkucmV0X2xvZygpIiwgIi4uLy 4uL3NyYy9mcmFtZXdvcmsv
dXRpbC9Qcm9iR3V0cy5oIiwgNDQ2LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsgcmV0dXJu
IHgucmV0X2xvZygpID4geS5y bG9nKCk7IH0KaW5saW5lIGludCBvcGVyYXRvciAhPShjb25z
dCBQcm9iQmFzZSAmIHgsY29uc3QgUHJvYkJhc2UgJiB5KSB7ICgodm9pZCkgKCh4LnJldF9sb2c A9PXgucmV0X2xvZygpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIngucmV0X2xvZygpID09eC5y
ZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91djĀ:1B 2JHdXRzLmgiL OyAoKHZvaWQpICgoeS5yZXRfbG9nKCkgPT15LnJl
dF9sb2coKSkgPyAwIDogKF9 zZXJ0X2ZhaWwgKCJ5LnJldF9sb2coKSA9PXkucmV0X2xvZygp
IiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIiwgNDQ3LCBfX1BSRV V9GVU5DVElPTl9fKSwgMCkpKTsgcmV0dXJuIHgucmV0X2xvZygpICE9IHkucmV0X2xvZygpOyB9
CgoKCmlubGluZSBpbnQKYXBwcm94RXF1YWwoUHJvYkJhc2Ug c3QgJiBhLCBQcm9iQmFzZSBj
b25zdCAmIGIpCgp7CiAgKCh2b2lkKSAoKGEucmV0X2xvZygpID09YS5yZXRfbG9nKCkpID8gMCA6
IChfX2Fzc2VydF9mYWlsIC 5yZXRfbG9nKCkgPT1hLnJldF9sb2coKSIsICIuLi8uLi8uLi9z
cmMvZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDQ1NSwgX19QUkVUVFlfRlVOQ1RJT05fX IDApKSk7CiAgKCh2b2lkKSAoKGIucmV0X2xvZygpID09Yi5yZXRfbG9nKCkpID8gMCA6IChfX2Fz
c2VydF9mYWlsICgiYi5yZXRfbG9nKCkgPT1iLnJldF9sb2cjĀ:sI uLi8uLi8uLi9 Q1NiwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7
CiAgaWYgKGEuaXNfemVybjĀ:CY GIuaXNfemVyb ICByZXR1cm4gKGEudmFsLWIudmFsKSA8IFByb2JCYXNlOjpfYXBwcm94RGlmZigp
IGVsc2UKICAgIHJldHVybiAoYi52YWwtYS52YWwpIDwgUHJvYkJhc2U6Ol9hcHByb3hEaWZmKCk7
Cn0KCgppbmxpbmUgaW50CmFwcHJveEVxdWFsIChQcm9iQm Bjb25zdCAmYSwgZnJvbV9kb3Vi
bGUgY29uc3QgJmIpCnsgUHJvYkJhc2UgdG1wOwogICAgdG1wLnNldF9kb3VibGUoYi52YWwpOwog
ICAgcmV0dXJuIGFwcHJvjĀ:dW IChhLCB0bXAp tX2RvdWJsZSBjb25zdCAmYiwgUHJvYkJhc2UgY29uc3QgJmEpCnsgUHJvYkJhc2UjĀ:w
ogICAgdG1wLn JveEVxdWFsIChhLHRt
cCk7Cn0KCmlubGluZSBQcm9iQmFzZQpwb3coUHJvYkJhcjĀ:29 3QgJmEsIGRvd aWQpICgoYS5yZXRfbG9nKCkgPT1hLnJldF9sb2coKSkg
PyAwIDogKF9fYXNzZXJ haWwgKCJhLnJldF9sb2coKSA9PWEucmV0X2xvZygpIiwgIi4uLy4u
Ly4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIiwgNDg1LCBfX1BSRVRUWV9GVU lP
Tl9fKSwgMCkpKTsKICBpZiAociA+PSAwLjApCiAgeyB0bXAuc2V0X2xvZyhhLnZhbCAqIHIpOwog
ICAgICAoKHZvaWQpICgodG1wLnJldF9sb2coKSA9PXRt ZXRfbG9nKCkpID8gMCA6IChfX2Fz
c2VydF9mYWlsICgidG1wLnJldF9sb2coKSA9PXRtcC5yZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3Jj
L2ZyYW1ld29yay91dG Byb2JHdXRzLmgiLCA0ODgsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAw
KSkpOwogICAgICByZXR1cm4gdG1wOwogIH0KCiAgdG1wLnNldF9sb2coUHJvYkJhc2U6O 2dJ
bnZhbGlkKCkpOwogIHJldHVybiB0bXA7Cn0KCmlubGluZSBkb3VibGUKcG93X2RvdWJsZShQcm9i
QmFzZSBjb25zdCAmYSwgZG91YmxlIHIpCgp7CiAgKCh kKSAoKGEucmV0X2xvZygpID09YS5y
ZXRfbG9nKCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiYS5yZXRfbG9nKCkgPT1hLnJldF9sb2co
KSIsICIuLi8uLi8uL mMvZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDUwMCwgX19QUkVU
VFlfRlVOQ1RJT05fXyksIDApKSk7CiAgZG91YmxlIHg7CiAgaWYgKHIgPj0gMC4wKSB7 ICB4
ID0gKGEudmFsICogcik7CiAgICBpZiAoeCA8IFByb2JCYXNlOjpfbG9nRXBzaWxvbigpKSB7Cgog
ICAgICByZXR1cm4oUHJvYkJhc2U6OnJldF9lcHNpbG kpOwogICAgfQogICAgcmV0dXJuKGV4
cCh4KSk7CiAgfQoKICB4ID0gKGEudmFsICogcik7CiAgaWYgKHggPiAtUHJvYkJhc2U6Ol9sb2dF
cHNpbG9uKCkpIHsK ICAgIHJldHVybigtUHJvYkJhc2U6OnJldF9lcHNpbG9uKCkpOwogIH0K
ICByZXR1cm4oZXhwKHgpKTsKfQojIDUzMSAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay9 sL1By
b2JHdXRzLmgiCmNsYXNzIFByb2IgOiBwdWJsaWMgUHJvYkJhc2UgewpwdWJsaWM6CgoKCiAgc3Rh
dGljIGNvbnN0IFByb2IgWkVSTzsKCgoKCiAgc3Rhd GNvbnN0IFByb2IgT05FOwoKICBpbmxp
bmUgUHJvYihjb25zdCBTaG9ydFByb2IgcCk7CiAgaW5saW5lIFByb2IoUHJvYkJhc2UgY29uc3Qg
JiBPdGhlclByb2I KICAgICgodm9pZCkgKChPdGhlclByb2IucmV0X2xvZygpID09T3RoZXJQ
cm9iLnJldF9sb2coKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJPdGhlclByb2Iucm xvZygp
ID09T3RoZXJQcm9iLnJldF9sb2coKSIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJv
Ykd1dHMuaCIsIDU0NSwgX19QUkVUVFlfRlVOQ1RJ XyksIDApKSk7CiAgICBzZXRfbG9nIChP
dGhlclByb2IucmV0X2xvZygpKTsKICB9CiAgaW5saW5lIFByb2Iodm9pZCkge3NldF9sb2cgKFBy
b2JCYXNlOjpfbGjĀ:Vy gpKTt9CiAgaW 3NldF9kb3VibGUgKFByb2JWYWwudmFsKTt9CiAgaW5saW5lIFByb2IoZnJvbV9sb G9nVmFs
KSB7c2V0X2xvZyAobG9nVmFsLnZhbCk7fQogIGlubGluZSBQcm9iKENvbnN0UHJvYiBjKSB7c2V0
X2NvbnN0IChjKTt9CnByaXZhdGU6CgoKICBpbmx gUHJvYiAoY29uc3QgZG91YmxlIGQpIHso
KHZvaWQpICgoMCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIwIiwgIi4uLy4uLy4uL3NyYy9mcmFt
ZXdvcmsvdXRpb m9iR3V0cy5oIiwgNTU1LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTt9
Cn07CiMgMTAyICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJvYi5oIiAy MTE2ICIu
Li8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJvYi5oIgojIDI2ICIuLi8uLi8uLi9zcmMvZnJh
bWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIgMQpjbG BQcm9iOwpjbGFzcyBTaG9ydFByb2I7CiMg
MzkgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIgpjbGFzcyBTaG9ydFBy
b2JCYXNlCnsK bGljOgoKICB0eXBlZGVmIGVudW0ge09uZT0xLCBVbml0eSA9IE9uZSwgWmVy
byA9IDAsSW52YWxpZCA9IC0xfSBDb25zdFByb2I7Cgpwcm90ZWN0ZWQ6CgogIGZ 0IHZhbDsK
IyA3MiAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiCiAgc3RhdGljIGlu
bGluZSBmbG9hdCBfbG9nVmFsaWQodm9pZCkge HVybiAtMWUzNzt9CiAgc3RhdGljIGlubGlu
ZSBmbG9hdCBfbG9nSW52YWxpZCh2b2lkKSB7cmV0dXJuIC0yZTM3O30KICBzdGF0aWMgaW5saW5l
IGZsb2F0IF9 aZXJvKHZvaWQpIHtyZXR1cm4gLTJlMzU7fQogIHN0YXRpYyBpbmxpbmUgZmxv
YXQgX2xvZ0Vwc2lsb24odm9pZCkge3JldHVybiAtNzA4O30KCgoKCiAgc3RhdG lubGluZSBm
bG9hdCBfbWF4RGlmZih2b2lkKSB7cmV0dXJuIDE2LjY7fQoKCgoKCiAgc3RhdGljIGlubGluZSBm
bG9hdCBfYXBwcm94RGlmZih2b2lkKSB7cmV0jĀ:ID LTc7fQogIHN0 lIHYpCiAgewogICAgICAgIHJldHVybiAodiA8IHJldF9lcHNpbG9u
KCkpID8gX2 plcm8oKSA6IGxvZyh2KTsKICB9CnB1YmxpYzoKIyAxMDAgIi4uLy4uLy4uL3Ny
Yy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIgogIHN0YXRpYyBkb3VibGUgcjĀ:2V 2lsb24o
dm9p Ly4uL3NyYy9mcmFtZXdvcmsvdXRp
bC9Qcm9iR3V0cy5oIgogIGludCB2YWxpZChjĀ:kK jb25zdCB7CiA YmICh2YWwgPT0gdmFsKTsKICB9CgoKCgoKCiAgaW50IG5vbl9wcm9i
KHZvaWQpI nN0IHtyZXR1cm4gIXZhbGlkKCkgfHwgdmFsID4gMC4wO30KCgoKCiAgaW50IGlz
X3plcm8odm9pZCkgY29uc3Qge3JldHVybiAodmFsIDw9IF9sb2daZXJvKCkpjĀ:Cg CiAgaW50
IGl wO30KCgoKCiAgZG91YmxlIHJldF9s
b2codm9pZCkgY29uc3Qge3JldHVybiB2YW oKCgoKICBkb3VibGUgcmV0X2RvdWJsZSh2b2lk
KSBjb25zdAogICAge3JldHVybiAodmFsIDwgX2xvZ0Vwc2lsb24oKSkgPyAwLjAgOiBleHAodmFs
KTt9CgoKjĀ:IH aWQgc2V0X2xv dmFs
ID09IHZhbCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ2YWwgPT0gdmFsIiwjĀ:uL uLy4uL3Ny
Yy BfX1BSRVRUWV9GVU5DVElPTl9fKSwg
MCkpKTt9CgoKCgogIHZvaWQgc2V0X2Rvd SAoZG91YmxlIGYpIHt2YWwgPSBfY2FsY0xvZyhm
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkKSAoKHZhbCA9PSB2
YWwpID8jĀ:6I fX2Fzc2VydF9 vZnJh
bWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDE1MCwgX19QUkVUVFlfRlVOQ1 5fXyksIDApKSk7
fQoKCgoKCiAgdm9pZCBzZXRfY29uc3QgKENvbnN0UHJvYiBjKSB7CiAgICAgIHNldF9sb2cgKGMg
PT0gT25lID8gMCA6IGMgPT0gWmVybyA/jĀ:IC ICAgICAgICAg gICAgKCh2b2lkKSAoKHZhbCA9PSB2YWwpID8gMCA6IChfX2Fzc2VydF9m
YWlsIC FsID09IHZhbCIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMu
aCIsIDE1OSwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgfQoKC goKICBkb3VibGUg
ZW50cm9weSh2b2lkKSBjb25zdCB7cmV0dXJuICgtKHJldF9kb3VibGUoKSAqIHZhbCkpOyB9OwoK
CgoKCgogIFNob3J0UHJvYkJhc2Ugb3B 0b3J+KHZvaWQpIGNvbnN0IHsKICAgICAgKCh2b2lk
KSAoKHZhbCA9PSB2YWwpID8gMCA6IChfX2Fzc2VydF9mYWlsICgidmFsID09IHZhbCIsICIuLi8u
Li8uL mMvZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDE3NiwgX19QUkVUVFlfRlVOQ1RJ
T05fXyksIDApKSk7CiAgICAgIFNob3J0UHJvYkJhc2UgeDsKICAgICAg ZXRfZG91YmxlKDEu
MC1yZXRfZG91YmxlKCkpOwogICAgICAoKHZvaWQpICgoeC5yZXRfbG9nKCkgPT14LnJldF9sb2co
KSkgPyAwIDogKF9fYXNzZXJ0X2ZhaW J4LnJldF9sb2coKSA9PXgucmV0X2xvZygpIiwgIi4u
Ly4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIiwgMTc5LCBfX1BSRVRUWV9GVU5D
VElPjĀ:KS MCkpKTsKICAg b3J0UHJv
YkJhc2Ugb3BlcmF0b3IqPShTaG9ydFByb2JCYXNlIHgpOwoKCgoKIGl uZSBTaG9ydFByb2JC
YXNlICYgb3BlcmF0b3IvPShjb25zdCBTaG9ydFByb2JCYXNlJiB4KTsKCgoKCiBpbmxpbmUgU2hv
cnRQcm9iQmFzZSAmIG9wZXJhdG9yKjĀ:29 3QgU2hvcnRQc YkJhc2UgJiBvcGVyYXRvci09KGNvbnN0IFNob3J0UHJvYkJhc2UmIHgpOwoK
Cgo yaWVuZCBpbmxpbmUgU2hvcnRQcm9iQmFzZSBvcGVyYXRvciooY29uc3QgU2hvcnRQcm9i
QmFzZSYsY29uc3QgU2hvcnRQcm9iQmFzZSYpOwogZnJpZW5kIGlubG BTaG9ydFByb2JCYXNl
IG9wZXJhdG9yLyhjb25zdCBTaG9ydFByb2JCYXNlJixjb25zdCBTaG9ydFByb2JCYXNlJik7CiBm
cmllbmQgaW5saW5lIFNob3J0UHJv c2Ugb3BlcmF0b3IrKGNvbnN0IFNob3J0UHJvYkJhc2Um
LGNvbnN0IFNob3J0UHJvYkJhc2UmKTsKIGZyaWVuZCBpbmxpbmUgU2hvcnRQcm9iQmFzZSBvcGVy
YX 0oY29uc3QgU2hvcnRQcm9iQmFzZSYsY29uc3QgU2hvcnRQcm9iQmFzZSYpOwojIDIyMCAi
Li4vLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiC mllbmQgaW5saW5lIGlu
dCBhcHByb3hFcXVhbChTaG9ydFByb2JCYXNlIGNvbnN0ICYsU2hvcnRQcm9iQmFzZSBjb25zdCAm
KTsKCgoKCgoKIGZyaWVuZCBpbmxjĀ:gU vcnRQcm9iQmF VibGUpOwoKCgoKCiBmcmllbmQgaW5saW5lIFNob3J0UHJvYkJhc2UgcG93KFNo
b HJvYkJhc2UgY29uc3QgJmEsIGludCBpKSB7CiAgICAgcmV0dXJuKHBvdyhhLCAoZG91Ymxl
KWkpKTsKIH07CgoKCgoKCiBmcmllbmQgaW5saW5lIGRvdWJsZSBw ZG91YmxlKFNob3J0UHJv
YkJhc2UgY29uc3QgJiwgZG91YmxlKTsKfTsKCgoKCgoKaW5saW5lIGRvdWJsZQpsb2cyKFNob3J0
UHJvYkJhc2UgY29uc3QgJiBhKQ ogICgodm9pZCkgKChhLnJldF9sb2coKSA9PWEucmV0X2xv
ZygpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoImEucmV0X2xvZygpID09YS5yZXRfbG9nKCkiLCAi
Li4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCAyNTQsIF9fUFJFVFRZX0ZV
TkNUSU9OX18pLCAwKSkpOwogIHJldHVybiBhLnJldF9sb2coKSA uNjkzMTQ3MTgwNTU5OTQ1
MzA5NDI7Cn0KCgoKCmlubGluZSBkb3VibGUKbG9nKFNob3J0UHJvYkJhc2UgY29uc3QgJiBhKQoK
ewogICgodm9pZCkgKChhLnJld 2coKSA9PWEucmV0X2xvZygpKSA/IDAgOiAoX19hc3NlcnRf
ZmFpbCAoImEucmV0X2xvZygpID09YS5yZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29y 1dGlsL1Byb2JHdXRzLmgiLCAyNjUsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogIHJl
dHVybiBhLnJldF9sb2coKTsKfQoKCgoKCmlubGluZSBTaG9ydFjĀ:JC NlCm1pbihTaG HJvYkJhc2UgY29uc3QgJiBiKQp7CiAgKCh2b2lk
KSAoKGEucmV0X2xvZygpID09jĀ:ZX bG9nKCkpID8g gPT1hLnJldF9sb2coKSIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJ d1dHMuaCIsIDI3NywgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgKCh2b2lkKSAoKGIu
cmV0X2xvZygpID09Yi5yZXRfbG9nKCkpID8gMCA6IChfX2Fzc F9mYWlsICgiYi5yZXRfbG9n
KCkgPT1iLnJldF9sb2coKSIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMu
aCIsIDI3OCwgX19QUkVUVFljĀ:OQ JT05fXyksIDA 9nKCkpCiAgICByZXR1cm4gYjsKICBlbHNlCiAgICByZXR1cm4gYTsKfQoKCgoKaW W5lIFNob3J0UHJvYkJhc2UKbWF4KFNob3J0UHJvYkJhc2UgY29uc3QgJiBhLAogICAgU2hvcnRQ
cm9iQmFzZSBjb25zdCAmIGIpCnsKICAoKHZvaWQpICgoYS5yjĀ:bG KCkgPT1hLnJl hLnJldF9sb2coKSA9PWEucmV0X2xvZygpIiwgIi4u
Ly4uLy4uL3NyYy9mcmFtZX svdXRpbC9Qcm9iR3V0cy5oIiwgMjkyLCBfX1BSRVRUWV9GVU5D
VElPTl9fKSwgMCkpKTsKICAoKHZvaWQpICgoYi5yZXRfbG9nKCkgPT1iLnJldF9sb2coKSkgP IDogKF9fYXNzZXJ0X2ZhaWwgKCJiLnJldF9sb2coKSA9PWIucmV0X2xvZygpIiwgIi4uLy4uLy4u
L3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIiwgMjk fX1BSRVRUWV9GVU5DVElPTl9f
KSwgMCkpKTsKICBpZiAoYi5yZXRfbG9nKCkgPiBhLnJldF9sb2coKSkKICAgIHJldHVybiBiOwog
IGVsc2UKICAgIHJldHVyb wp9CgoKCmlubGluZSBTaG9ydFByb2JCYXNlClNob3J0UHJvYkJh
c2U6Om9wZXJhdG9yKj0oU2hvcnRQcm9iQmFzZSB4KQp7CiAgKCh2b2lkKSAoKHZhbCA9PSB2
ID8gMCA6IChfX2Fzc2VydF9mYWlsICgidmFsID09IHZhbCIsICIuLi8uLi8uLi9zcmMvZnJhbWV3
b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDMwNSwgX19QUkVUVF VOQ1RJT05fXyksIDApKSk7CiAg
KCh2b2lkKSAoKHgucmV0X2xvZygpID09eC5yZXRfbG9nKCkpID8gMCA6IChfX2Fzc2VydF9mYWls
ICgieC5yZXRfbG9nKCkgjĀ:Ln dF9sb2coKSIs vYkd1dHMuaCIsIDMwNiwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CgoKCgo 2
YWwgKz0geC52YWw7CiAgKCh2b2lkKSAoKHZhbCA9PSB2YWwpID8gMCA6IChfX2Fzc2VydF9mYWls
ICgidmFsID09IHZhbCIsICIuLi8uLi8uLi9zcmMvZnJhb 3JrL3V0aWwvUHJvYkd1dHMuaCIs
IDMxMywgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgcmV0dXJuICp0aGlzOwp9Cgppbmxp
bmUgU2hvcnRQcm9iQmF mClNob3J0UHJvYkJhc2U6Om9wZXJhdG9yLz0oY29uc3QgU2hvcnRQ
cm9iQmFzZSYgeCkKewogICgodm9pZCkgKCh2YWwgPT0gdmFsKSA/IDAgOiAoX19hc3Nlcn Fp
bCAoInZhbCA9PSB2YWwiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgi
LCAzMjAsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkp ICgodm9pZCkgKCh4LnJldF9sb2co
KSA9PXgucmV0X2xvZygpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIngucmV0X2xvZygpID09eC5y
ZXRfbG9nKCkiLCAiLi 4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCAzMjEs
IF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICgodm9pZCkgKCgheC5pc196ZXJvK D8g
MCA6IChfX2Fzc2VydF9mYWlsICgiIXguaXNfemVybygpIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdv
cmsvdXRpbC9Qcm9iR3V0cy5oIiwgMzIyLCBfX1BSRVRjĀ:GV DVElPTl9fKSw godm9pZCkgKCh2YWwgPT0gdmFsKSA/IDAgOiAoX19hc3Nl
cnRfZmFpbCAoInZhb SB2YWwiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JH
dXRzLmgiLCAzMjksIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogIHJldHVybiAq czsK
fQoKCgppbmxpbmUgU2hvcnRQcm9iQmFzZQpvcGVyYXRvciooY29uc3QgU2hvcnRQcm9iQmFzZSYg
eGFyZywKICAgICAgICAgIGNvbnN0IFNob3J0UHJvYk UmIHkpCnsKICBTaG9ydFByb2JCYXNl
IHggPXhhcmc7CiAgKCh2b2lkKSAoKHgucmV0X2xvZygpID09eC5yZXRfbG9nKCkpID8gMCA6IChf
X2Fzc2VydF9mYWls eC5yZXRfbG9nKCkgPT14LnJldF9sb2coKSIsICIuLi8uLi8uLi9zcmMv
ZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDM0MCwgX19QUkVUVFlfRlVOQ1RJT05 sIDAp
KSk7CiAgKCh2b2lkKSAoKHkucmV0X2xvZygpID09eS5yZXRfbG9nKCkpID8gMCA6IChfX2Fzc2Vy
dF9mYWlsICgieS5yZXRfbG9nKCkgPT15LnJldF9sb SIsICIuLi8uLi8uLi9zcmMvZnJhbWV3
b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDM0MSwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAg
eCAqPSB5OwogICg pZCkgKCh4LnJldF9sb2coKSA9PXgucmV0X2xvZygpKSA/IDAgOiAoX19h
c3NlcnRfZmFpbCAoIngucmV0X2xvZygpID09eC5yZXRfbG9nKCkiLCAiLi4vLi4vLi JjL2Zy
YW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCAzNDMsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkp
OwogIHJldHVybiB4Owp9CgppbmxpbmUgU2hvcnRQ QmFzZQpvcGVyYXRvci8oY29uc3QgU2hv
cnRQcm9iQmFzZSYgeGFyZywKICAgICAgICAgIGNvbnN0IFNob3J0UHJvYkJhc2UmIHkpCnsKICBT
aG9ydFByb2JCYXjĀ:g9 FyZzsKICAoKH SkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ4LnJldF9sb2coKSA9PXgucmV0X2xvZ iwgIi4u
Ly4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIiwgMzUyLCBfX1BSRVRUWV9GVU5D
VElPTl9fKSwgMCkpKTsKICAoKHZvaWQpICgoeS5jĀ:fb nKCkgPT15LnJ J5LnJldF9sb2coKSA9PXkucmV0X2xvZygpIiwgIi4uLy4uLy4u
L3NyYy9mcmFtZ msvdXRpbC9Qcm9iR3V0cy5oIiwgMzUzLCBfX1BSRVRUWV9GVU5DVElPTl9f
KSwgMCkpKTsKICB4IC89IHk7CiAgKCh2b2lkKSAoKHgucmV0X2xvZygpID09eC5y bG9nKCkp
ID8gMCA6IChfX2Fzc2VydF9mYWlsICgieC5yZXRfbG9nKCkgPT14LnJldF9sb2coKSIsICIuLi8u
Li8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJvYk MuaCIsIDM1NSwgX19QUkVUVFlfRlVOQ1RJ
T05fXyksIDApKSk7CiAgcmV0dXJuIHg7Cn0KCmlubGluZSBTaG9ydFByb2JCYXNlCm9wZXJhdG9y
Kyhjb25zdCBTjĀ:dF b2JCYXNlJiB4
eSkKewogICgodm9pZCkgKCh4LnJldF9sb2coKSA9PXgucmV0X2xvZygpKSA/IDA oX19hc3Nl
cnRfZmFpbCAoIngucmV0X2xvZygpID09eC5yZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3JjL2ZyYW1l
d29yay91dGlsL1Byb2JHdXRzLmgiLCAzNjMsIjĀ:FJ FRZX0ZVTkNUS b2coKSA9PXkucmV0X2xvZygpKSA/IDAgOiAoX19hc3NlcnRfZmFp
bCAoInkucmV vZygpID09eS5yZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91
dGlsL1Byb2JHdXRzLmgiLCAzNjQsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKS ogIGlmICh4
LmlzX3plcm8oKSkKICAgIHJldHVybiB5OwogIGVsc2UgaWYgKHkuaXNfemVybygpKQogICAgcmV0
dXJuIHg7CgogIGRvdWJsZSB2YWwsIGRpZjsK aWYgKHgudmFsID4geS52YWwpIHsKICAgIHZh
bCA9IHgudmFsOwogICAgZGlmID0geS52YWwgLSB4LnZhbDsKICB9IGVsc2UgewogICAgdmFsID0g
eS52YWw7Ci BkaWYgPSB4LnZhbCAtIHkudmFsOwogIH0KICAoKHZvaWQpICgoZGlmIDw9IDAp
ID8gMCA6IChfX2Fzc2VydF9mYWlsICgiZGlmIDw9IDAiLCAiLi4vLi4vLi4vcjĀ:2Z W1ld29y
ay91 TkNUSU9OX18pLCAwKSkpOwoKCgog
IGlmICgtZGlmIDwgU2hvcnRQcm9iQmFzZTo heERpZmYoKSkKICAgIHZhbCArPSBsb2cgKDEu
MCArIGV4cChkaWYpKTsKCgoKICBTaG9ydFByb2JCYXNlIFA7CiAgUC52YWwgPSB2YWw7CiAgKCh2
b2lkKSAoK mV0X2xvZygpID09UC5yZXRfbG9nKCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgi
UC5yZXRfbG9nKCkgPT1QLnJldF9sb2coKSIsICIuLi8uLi8uLi9zcmMvZnJh b3JrL3V0aWwv
UHJvYkd1dHMuaCIsIDM5MCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgcmV0dXJuIFA7
Cn0KCgppbmxpbmUgU2hvcnRQcm9iQmFzZQ VyYXRvci0oY29uc3QgU2hvcnRQcm9iQmFzZSYg
eCwKICAgICAgICAgIGNvbnN0IFNob3J0UHJvYkJhc2UmIHkpCnsKICAoKHZvaWQpICgoeC5yZXRf
bG9nKCkg LnJldF9sb2coKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ4LnJldF9sb2coKSA9
PXgucmV0X2xvZygpIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9 iR3V0cy5oIiwg
Mzk5LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAoKHZvaWQpICgoeS5yZXRfbG9nKCkg
PT15LnJldF9sb2coKSkgPyAwIDogKF9fY XJ0X2ZhaWwgKCJ5LnJldF9sb2coKSA9PXkucmV0
X2xvZygpIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIiwgNDAwLCBf
X1BSRVR GVU5DVElPTl9fKSwgMCkpKTsKICBpZiAoeS5pc196ZXJvKCkpIHsKICAgICAgcmV0
dXJuIHg7CiAgfQoKICBTaG9ydFByb2JCYXNlIHJldHVyblZhbHVlOwogIG hhcHByb3hFcXVh
bCAoeCwgeSkpIHsKICAgICAgcmV0dXJuVmFsdWUuc2V0X2NvbnN0KFNob3J0UHJvYkJhc2U6Olpl
cm8pOwogIH0gZWxzZSB7CiAgICAgIHJl blZhbHVlLnZhbCA9IFNob3J0UHJvYkJhc2U6Ol9j
YWxjTG9nKGV4cCh4LnZhbCkgLSBleHAoeS52YWwpKTsKICB9CiAgKCh2b2lkKSAoKHJldHVyblZh
bHVlLnjĀ:9s coKSA9PXJldH J0X2Zh
aWwgKCJyZXR1cm5WYWx1ZS5yZXRfbG9nKCkgPT1yZXR1cm5WYWx1ZS5yZ G9nKCkiLCAiLi4v
Li4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCA0MTEsIF9fUFJFVFRZX0ZVTkNU
SU9OX18pLCAwKSkpOwogIHJldHVybiBjĀ:1c WYWx1ZTsKfQo JCYXNlOjpvcGVyYXRvcis9KGNvbnN0IFNob3J0UHJvYkJhc2UmIHgpCnsK
ICAoK WQpICgodmFsID09IHZhbCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ2YWwgPT0gdmFs
IiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5o NDE4LCBfX1BSRVRU
WV9GVU5DVElPTl9fKSwgMCkpKTsKICAoKHZvaWQpICgoeC5yZXRfbG9nKCkgPT14LnJldF9sb2co
KSkgPyAwIDogKF9fYXNzZXJ0X2ZhaW J4LnJldF9sb2coKSA9PXgucmV0X2xvZygpIiwgIi4u
Ly4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIiwgNDE5LCBfX1BSRVRUWV9GVU5D
VElPjĀ:KS MCkpKTsKCiAg bCA9PSB2
YWwpID8gMCA6IChfX2Fzc2VydF9mYWlsICgidmFsID09IHZhbCIsICI uLi8uLi9zcmMvZnJh
bWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDQyMiwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7
CiAgcmV0dXJuICp0aGlzOwp9CgppbjĀ:mU 2hvcnRQcm9iQ Y29uc3QgU2hvcnRQcm9iQmFzZSYgeCkKewogICgodm9pZCkgKCh2YWwgPT0g
dmFjĀ:/I gOiAoX19hc3N vc3JjL2Zy
YW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCA0MjksIF9fUFJFVFRZX0 NUSU9OX18pLCAwKSkp
OwogICgodm9pZCkgKCh4LnJldF9sb2coKSA9PXgucmV0X2xvZygpKSA/IDAgOiAoX19hc3NlcnRf
ZmFpbCAoIngucmV0X2xvZygpID09 ZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29y
ay91dGlsL1Byb2JHdXRzLmgiLCA0MzAsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKICAq
dGjĀ:A9 p0aGlzIC0geD 9fYXNzZXJ0
X2ZhaWwgKCJ2YWwgPT0gdmFsIiwgIi4uLy4uLy4uL3NyYy9mcmFtZ msvdXRpbC9Qcm9iR3V0
cy5oIiwgNDMzLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICByZXR1cm4gKnRoaXM7Cn0K
CgppbmxpbmUgY2xhc3Mgb3N0cmV mCm9wZXJhdG9yPDwoY2xhc3Mgb3N0cmVhbSAmbyxTaG9y
dFByb2JCYXNlIGNvbnN0ICZwKQp7IHJldHVybiBwLnZhbGlkKCkgPyAobyA8PCBwLnJldF9kb3Vi
b SkgOiAobyA8PCAiPz8iKTt9CgppbmxpbmUgaW50IG9wZXJhdG9yID09KGNvbnN0IFNob3J0
UHJvYkJhc2UgJiB4LGNvbnN0IFNob3J0UHJvYkJhc2UgJiB5KSB7jĀ:dm ZCkgKCh4LnJl hc3NlcnRfZmFpbCAoIngucmV0X2xvZygpID09
eC5yZXRfbG9nKCkiLCAiLi4vLi 4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCA0
NDIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOyAoKHZvaWQpICgoeS5yZXRfbG9nKCkgPT15
dF9sb2coKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ5LnJldF9sb2coKSA9PXkucmV0X2xv
ZygpIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9 0cy5oIiwgNDQyLCBfX1BS
RVRUWV9GVU5DVElPTl9fKSwgMCkpKTsgcmV0dXJuIHgucmV0X2xvZygpID09IHkucmV0X2xvZygp
OyB9CmlubGluZSBpbnQgb3Blc 3IgPD0oY29uc3QgU2hvcnRQcm9iQmFzZSAmIHgsY29uc3Qg
U2hvcnRQcm9iQmFzZSAmIHkpIHsgKCh2b2lkKSAoKHgucmV0X2xvZygpID09eC5yZXRfbG9nKCkpjĀ:gM 6IChfX2Fzc2V oKSIsICIuLi8u
Li8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIsID wgX19QUkVUVFlfRlVOQ1RJ
T05fXyksIDApKSk7ICgodm9pZCkgKCh5LnJldF9sb2coKSA9PXkucmV0X2xvZygpKSA/IDAgOiAo
X19hc3NlcnRfZmFpbCAoInku X2xvZygpID09eS5yZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3Jj
L2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCA0NDMsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCA kpOyByZXR1cm4geC5yZXRfbG9nKCkgPD0geS5yZXRfbG9nKCk7IH0KaW5saW5lIGludCBvcGVy
YXRvciA+PShjb25zdCBTaG9ydFByb2JCYXNlICYgeCxjb25zdjĀ:G9 FByb2JCYXNlI LnJldF9sb2coKSkgPyAwIDogKF9fYXNzZXJ0X2Zh
aWwgKCJ4LnJldF9sb2coKSAjĀ:uc 0X2xvZygpIiw 9iR3V0cy5oIiwgNDQ0LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsgKCh2b2 SAoKHkucmV0X2xvZygpID09eS5yZXRfbG9nKCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgieS5y
ZXRfbG9nKCkgPT15LnJldF9sb2coKSIsICIuLi8uLi8uLi9z ZnJhbWV3b3JrL3V0aWwvUHJv
Ykd1dHMuaCIsIDQ0NCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7IHJldHVybiB4LnJldF9s
b2coKSA+PSB5LnJldF9sb2 sgfQppbmxpbmUgaW50IG9wZXJhdG9yIDwoY29uc3QgU2hvcnRQ
cm9iQmFzZSAmIHgsY29uc3QgU2hvcnRQcm9iQmFzZSAmIHkpIHsgKCh2b2lkKSAoKHgucmV0X ZygpID09eC5yZXRfbG9nKCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgieC5yZXRfbG9nKCkgPT14
LnJldF9sb2coKSIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JjĀ:0a vUHJvYkd1dHM ApKSk7ICgodm9pZCkgKCh5LnJldF9sb2coKSA9PXku
cmV0X2xvZygpKSA/IDAgO 19hc3NlcnRfZmFpbCAoInkucmV0X2xvZygpID09eS5yZXRfbG9n
KCkiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCA0NDUsIF9f
VFRZX0ZVTkNUSU9OX18pLCAwKSkpOyByZXR1cm4geC5yZXRfbG9nKCkgPCB5LnJldF9sb2coKTsg
fQppbmxpbmUgaW50IG9wZXJhdG9yID4oY29uc3QgU2hvcn 9iQmFzZSAmIHgsY29uc3QgU2hv
cnRQcm9iQmFzZSAmIHkpIHsgKCh2b2lkKSAoKHgucmV0X2xvZygpID09eC5yZXRfbG9nKCkpID8g
MCA6IChfX2Fzc2VydF9mjĀ:IC eC5yZXRfbG9n vZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDQ0NiwgX19QUkVUVFlfRlVOQ1R f
XyksIDApKSk7ICgodm9pZCkgKCh5LnJldF9sb2coKSA9PXkucmV0X2xvZygpKSA/IDAgOiAoX19h
c3NlcnRfZmFpbCAoInkucmV0X2xvZygpID09eS5yZXRfb CkiLCAiLi4vLi4vLi4vc3JjL2Zy
YW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCA0NDYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkp
OyByZXR1cm4geC5yZXRjĀ:nK gPiB5LnJldF9 NvbnN0IFNob3J0UHJvYkJhc2UgJiB4LGNvbnN0IFNob3J0UHJvYkJhc2UgJiB5KS go
dm9pZCkgKCh4LnJldF9sb2coKSA9PXgucmV0X2xvZygpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAo
IngucmV0X2xvZygpID09eC5yZXRfbG9nKCkiLCAiLi4v Li4vc3JjL2ZyYW1ld29yay91dGls
L1Byb2JHdXRzLmgiLCA0NDcsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOyAoKHZvaWQpICgo
eS5yZXRfbG9nKCkgPT JldF9sb2coKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ5LnJldF9s
b2coKSA9PXkucmV0X2xvZygpIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9QcjĀ:3V cy5oIiwgNDQ3 dXJuIHgucmV0X2xvZygp
ICE9IHkucmV0X2xvZygpOyB9CgoKCmlubGluZSBpbnQjĀ:wc 4RXF1YWwoU2h Jhc2UgY29uc3QgJiBiKQoKewogICgodm9pZCkgKChhLnJl
dF9sb2coKSA9PWEuc 2xvZygpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoImEucmV0X2xvZygp
ID09YS5yZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JH Lmgi
LCA0NTUsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICgodm9pZCkgKChiLnJldF9sb2co
KSA9PWIucmV0X2xvZygpKSA/IDAgOiAoX19hc3Nlcn FpbCAoImIucmV0X2xvZygpID09Yi5y
ZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL1Byb2JHdXRzLmgiLCA0NTYs
IF9fUFJFVFRZX0ZV SU9OX18pLCAwKSkpOwogIGlmIChhLmlzX3plcm8oKSAmJiBiLmlzX3pl
cm8oKSkKICAgIHJldHVybiAxOwogIGlmIChhPj1iKQogICAgcmV0dXJuIChhLnZhbC1 hbCkg
PCBTaG9ydFByb2JCYXNlOjpfYXBwcm94RGlmZigpOwogIGVsc2UKICAgIHJldHVybiAoYi52YWwt
YS52YWwpIDwgU2hvcnRQcm9iQmFzZTo6X2FwcHJve mYoKTsKfQoKCmlubGluZSBpbnQKYXBw
cm94RXF1YWwgKFNob3J0UHJvYkJhc2UgY29uc3QgJmEsIGZyb21fZG91YmxlIGNvbnN0ICZiKQp7
IFNob3J0UHJvYkJ gdG1wOwogICAgdG1wLnNldF9kb3VibGUoYi52YWwpOwogICAgcmV0dXJu
IGFwcHJveEVxdWFsIChhLCB0bXApOwp9CgppbmxpbmUgaW50CmFwcHJveEVxdWFsIC 9tX2Rv
dWJsZSBjb25zdCAmYiwgU2hvcnRQcm9iQmFzZSBjb25zdCAmYSkKeyBTaG9ydFByb2JCYXNlIHRt
cDsKICAgIHRtcC5zZXRfZG91YmxlKGIudmFsKTsKjĀ:IH dHVybiBhcHBy Qcm9iQmFzZQpwb3coU2hvcnRQcm9iQmFzZSBjb25zdCAmYSwg
ZG91YmxlIHIpCg AgU2hvcnRQcm9iQmFzZSB0bXA7CiAgKCh2b2lkKSAoKGEucmV0X2xvZygp
ID09YS5yZXRfbG9nKCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiYS5yZXRfbG9nK T1hLnJl
dF9sb2coKSIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0aWwvUHJvYkd1dHMuaCIsIDQ4NSwg
X19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiA gKHIgPj0gMC4wKQogIHsgdG1wLnNldF9s
b2coYS52YWwgKiByKTsKICAgICAgKCh2b2lkKSAoKHRtcC5yZXRfbG9nKCkgPT10bXAucmV0X2xv
ZygpKSA/IDAgO 19hc3NlcnRfZmFpbCAoInRtcC5yZXRfbG9nKCkgPT10bXAucmV0X2xvZygp
IiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIiwgNDg4 X1BSRVRU
WV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICAgcmV0dXJuIHRtcDsKICB9CgogIHRtcC5zZXRfbG9n
KFNob3J0UHJvYkJhc2U6Ol9sb2dJbnZhbGlkKC ogIHJldHVybiB0bXA7Cn0KCmlubGluZSBk
b3VibGUKcG93X2RvdWJsZShTaG9ydFByb2JCYXNlIGNvbnN0ICZhLCBkb3VibGUgcikKCnsKICAo
KHZvaWQpICgo ZXRfbG9nKCkgPT1hLnJldF9sb2coKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwg
KCJhLnJldF9sb2coKSA9PWEucmV0X2xvZygpIiwgIi4uLy4uLy4uL3NyYy9mcmFjĀ:vc vdXRp
bC9Qcm 9fKSwgMCkpKTsKICBkb3VibGUg
eDsKICBpZiAociA+PSAwLjApIHsKICAgIHggPjĀ:S5 WwgKiByKTsKI c2lsb24oKSkgewoKICAgICAgcmV0dXJuKFNob3J0UHJvYkJhc2U6
OnJldF9lcHN uKCkpOwogICAgfQogICAgcmV0dXJuKGV4cCh4KSk7CiAgfQoKICB4ID0gKGEu
dmFsICogcik7CiAgaWYgKHggPiAtU2hvcnRQcm9iQmFzZTo6X2xvZ0Vwc2lsb2 kgewoKICAg
ICAgcmV0dXJuKC1TaG9ydFByb2JCYXNlOjpyZXRfZXBzaWxvbigpKTsKICB9CiAgcmV0dXJuKGV4
cCh4KSk7Cn0KIyA1MzEgIi4uLy4uLy4uL3Ny cmFtZXdvcmsvdXRpbC9Qcm9iR3V0cy5oIgpj
bGFzcyBTaG9ydFByb2IgOiBwdWJsaWMgU2hvcnRQcm9iQmFzZSB7CnB1YmxpYzoKCgoKICBzdGF0
aWMgY29uc3jĀ:hv RQcm9iIFpFUk 5F
OwoKICBpbmxpbmUgU2hvcnRQcm9iKGNvbnN0IFByb2IgcCk7CiAgaW5saW5lIjĀ:3J HJvYihT
aG9y ICAoKHZvaWQpICgoT3RoZXJQcm9i
LnJldF9sb2coKSA9PU90aGVyUHJvYi5yZXR nKCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgi
T3RoZXJQcm9iLnJldF9sb2coKSA9PU90aGVyUHJvYi5yZXRfbG9nKCkiLCAiLi4vLi4vLi4vc3Jj
L2ZyYW1ld y91dGlsL1Byb2JHdXRzLmgiLCA1NDUsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAw
KSkpOwogICAgc2V0X2xvZyAoT3RoZXJQcm9iLnJldF9sb2coKSk7CiAgfQogjĀ:bG ZSBTaG9y
dFB 6Ol9sb2daZXJvKCkpO30KICBpbmxp
bmUgU2hvcnRQcm9iKGZyb21fZG91YmxlIF JWYWwpIHtzZXRfZG91YmxlIChQcm9iVmFsLnZh
bCk7fQogIGlubGluZSBTaG9ydFByb2IoZnJvbV9sb2cgbG9nVmFsKSB7c2V0X2xvZyAobG9nVmFs
LnZhbCk7jĀ:IG bGluZSBTaG9y O30K
cHJpdmF0ZToKCgogIGlubGluZSBTaG9ydFByb2IgKGNvbnN0IGRvdWJsZSBjĀ:7K 2b2lkKSAo
KD 8uLi8uLi9zcmMvZnJhbWV3b3JrL3V0
aWwvUHJvYkd1dHMuaCIsIDU1NSwgX19QUjĀ:Fl lVOQ1RJT05fX L2ZyYW1ld29yay91dGlsL1Byb2IuaCIgMgoKCgoKCgoKaW5saW5lIFBy
b2I6OlB oY29uc3QgU2hvcnRQcm9iIHApIHsKICAoKHZvaWQpICgocC5yZXRfbG9nKCkgPT1w
LnJldF9sb2coKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJwLnJldF9sb2 A9PXAucmV0X2xv
ZygpIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Qcm9iLmgiLCAxMjQsIF9fUFJFVFRZ
X0ZVTkNUSU9OX18pLCAwKSkpOwogIHNl b2cgKHAucmV0X2xvZygpKTsKICAoKHZvaWQpICgo
dmFsID09IHZhbCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ2YWwgPT0gdmFsIiwgIi4uLy4uLy4u
L3NyYyjĀ:Ft dvcmsvdXRpbC 8pLCAw
KSkpOwp9CmlubGluZSBTaG9ydFByb2I6OlNob3J0UHJvYihjb25zdCBQcjĀ:HA HsKICAoKHZv
PyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJw
LnJldF9sb2coKSA9PXAucmV0X2xvZygjĀ:gI uLy4uLy4uL3N 9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogIHNldF9sb2cgKHAucmV0
X2xvZ TsKICAoKHZvaWQpICgodmFsID09IHZhbCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ2
YWwgPT0gdmFsIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Q LmgiLCAxMzEsIF9f
UFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwp9CgojIDE5ICJQcm9iTWF0cml4LmgiIDIKCiMgMjAg
Ii4uLy4uLy4uL3NyYy9mcmFtZXdvcm Atc3RydWN0cy9Qcm9iQXJyYXkuaCIgMQojIDU4ICIv
dXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwpleHRlcm4gIkMiIHsKCgpleHRlcm4gdm9pZCBfX2Fz
c2Vy YWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9fZmls
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5jĀ:fb uZSwgX19jb25 gpIF9fYXR0cmlidXRlX18gKChfX25vcmV0
dXJuX18pKTsKCgpleHRlcm4gdm9pZ 2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJybnVt
LCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVjĀ:nb kIGludCBfX2x gICAgICBf
X2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX1 RyaWJ1dGVfXyAoKF9f
bm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9fYXNz
ZXJ0aW9uLCBjb25zdCBjaGFyICpfjĀ:bG IGludCBfX2xp oKF9fbm9yZXR1cm5fXykpOwoKCn0KCiMgMjAgIi4uLy4uLy4uL3NyYy9mcmFt
ZXjĀ:sv Atc3RydWN0cy MvZnJhbWV3
b3JrL3V0aWwvTWVtSW5mby5oIiAxCiMgMzggIi91c3IvbGliL2djY WIvaTM4Ni1yZWRoYXQt
bGludXgvMi45Ni9pbmNsdWRlL3R5cGVpbmZvIiAxIDMKI3ByYWdtYSBpbnRlcmZhY2UgInR5cGVp
bmZvIgojIDM4ICIvdXNyL2xpYi9jĀ:tb iL2kzODYtcmV IgMwoKCgojIDMzICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4
L TYvaW5jbHVkZS9leGNlcHRpb24iIDEgMwojcHJhZ21hIGludGVyZmFjZSAiZXhjZXB0aW9u
IgojIDMzICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxp LzIuOTYvaW5jbHVkZS9l
eGNlcHRpb24iIDMKCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZCB7CgpjbGFzcyBleGNl
cHRpb24gewpwdWJsaWM6CiAgZX B0aW9uICgpIHsgfQogIHZpcnR1YWwgfmV4Y2VwdGlvbiAo
KSB7IH0KICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQgKCkgY29uc3Q7Cn07CgpjbGFzcyBiYWRf
ZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbiB7CnB1YmxpYzoKICBiYWRfZXhjZXB0aW9uICgp
IHsgfQogIHZpcnR1YWwgfmJhZF9leGNlcHRpb24gKCkgeyB9Cn0 0eXBlZGVmIHZvaWQgKCp0
ZXJtaW5hdGVfaGFuZGxlcikgKCk7CnR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikg
KCk7Cgp0ZXJtaW5hdGVfaGFuZ iBzZXRfdGVybWluYXRlICh0ZXJtaW5hdGVfaGFuZGxlcik7
CnZvaWQgdGVybWluYXRlICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKdW5leHBl lZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkICh1bmV4cGVjdGVkX2hhbmRsZXIpOwp2b2lkIHVu
ZXhwZWN0ZWQgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm kpOwpib29sIHVuY2F1Z2h0
X2V4Y2VwdGlvbiAoKTsKCn0KCn0KCiMgNDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQt
bGludXgvMi45Ni9pbmNsdWRl cGVpbmZvIiAyIDMKCmV4dGVybiAiQysrIiB7CgoKCgoKCgoK
bmFtZXNwYWNlIHN0ZCB7CgpjbGFzcyB0eXBlX2luZm8gewpwdWJsaWM6CgoKCgogIHZpcnR1YWwjĀ:R5 VfaW5mbyAoKT I9IChjb25zdCB0
eXBlX2luZm8mKTsKICB0eXBlX2luZm8gKGNvbnN0IHR5cGVfa yYpOwoKcHJvdGVjdGVkOgog
IGNvbnN0IGNoYXIgKl9fbmFtZTsKCnByb3RlY3RlZDoKICBleHBsaWNpdCB0eXBlX2luZm8gKGNv
bnN0IGNoYXIgKl9fbik6IF9jĀ:tZ oX19uKSB7IH0 N0IHR5cGVfaW5mbyYgYXJnKSBjb25zdDsKICBjb25zdCBjaGFyKiBuYW1lICgpIG nN0CiAgICB7IHJldHVybiBfX25hbWU7IH0KICBib29sIG9wZXJhdG9yPT0gKGNvbnN0IHR5cGVf
aW5mbyYgX19hcmcpIGNvbnN0OwogIGJvb2wgb3BlcmF0b3IhjĀ:Y2 c3QgdHlwZV9p vcGVyYXRvcj09IChfX2FyZyk7IH0KCiMgMTE3ICIv
dXNyL2xpYi9nY2MtbGliL2 YtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS90eXBlaW5mbyIg
Mwp9OwoKY2xhc3MgYmFkX2Nhc3QgOiBwdWJsaWMgZXhjZXB0aW9uIHsKcHVibGljOgogIGJhZ YXN0KCkgeyB9CiAgdmlydHVhbCB+YmFkX2Nhc3QoKSB7IH0KfTsKCmNsYXNzIGJhZF90eXBlaWQg
OiBwdWJsaWMgZXhjZXB0aW9uIHsKIHB1YmxpYzoKICBiYWRjĀ:wZ kICgpIHsgfQo p9Cgp9CiMgNSAiLi4vLi4vLi4vc3JjL2ZyYW1ld29y
ay91dGlsL01lbUluZm8ua goKIyAzMSAiL3Vzci9pbmNsdWRlL2crKy0zL3ZlY3RvciIgMSAz
CiMgMzcgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMSAzCgoKCiMgMzQgjĀ:
c vaW5jbHVkZS9 lIDxjbGFzcyBfVHA+
CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX1RwJi gsIGNvbnN0IF9UcCYgX195KSB7
CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBi
b29sIG9wZXJhdG9yPihj dCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4g
X195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXR 9
KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBibjĀ:G9 XJhdG9yPj0oY CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKIyA0MCAi
L3Vzci9pbmNsdWRlL2cjĀ:zL 0bF9hbGdvYmF crKy0zL3N0bF9wYWlyLmgiIDEgMwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYX 9U
Mj4Kc3RydWN0IHBhaXIgewogIHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7CiAgdHlwZWRlZiBfVDIg
c2Vjb25kX3R5cGU7CgogIF9UMSBmaXJzdDsKICBfVDIg b25kOwogIHBhaXIoKSA6IGZpcnN0
KF9UMSgpKSwgc2Vjb25kKF9UMigpKSB7fQogIHBhaXIoY29uc3QgX1QxJiBfX2EsIGNvbnN0IF9U
MiYgX19iKSA6IGZpcn 9fYSksIHNlY29uZChfX2IpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X1UxLCBjbGFzcyBfVTI+CiAgcGFpcihjb25zdCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6I nN0
KF9fcC5maXJzdCksIHNlY29uZChfX3Auc2Vjb25kKSB7fQoKfTsKCnRlbXBsYXRlIDxjbGFzcyBf
VDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF 9PShjb25zdCBwYWlyPF9UMSwgX1Qy
PiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA9
PSBfX3kuZmlyc3QgJ 194LnNlY29uZCA9PSBfX3kuc2Vjb25kOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyjĀ:MS
X1QyPiYgX19 gcmV0dXJuIF9feC5maXJz
dCA8IF9feS5maXJzdCB8fAogICAgICAgICAoIShfX3 lyc3QgPCBfX3guZmlyc3QpICYmIF9f
eC5zZWNvbmQgPCBfX3kuc2Vjb25kKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1Qy
PgppbmxpbmUgcGFp VDEsIF9UMj4gbWFrZV9wYWlyKGNvbnN0IF9UMSYgX194LCBjb25zdCBf
VDImIF9feSkKewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCiM gIi91
c3IvaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCiMgNTUgIi91c3IvaW5jbHVk
ZS9nKystMy90eXBlX3RyYWl0cy5oIiAxIDMKc3Ryd F9fdHJ1ZV90eXBlIHsKfTsKCnN0cnVj
dCBfX2ZhbHNlX3R5cGUgewp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90
cmFpdHMgewogICB lZGVmIF9fdHJ1ZV90eXBlIHRoaXNfZHVtbXlfbWVtYmVyX211c3RfYmVf
Zmlyc3Q7CiMgODEgIi91c3IvaW5jbHVkZS9nKystMy90eXBlX3RyYWl0cy5oIiAzCi R5cGVk
ZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2NvjĀ:Y2 c3RydWN0b3I7 2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg
X19mYWxzZV90eX hhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90
eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKCgoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfXjĀ:GV HJh
aXRzPGJv dHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV9 lIGhhc190cml2aWFsX2NvcHlfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsKICAgd WRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+ cnVjdCBf
X3R5cGVfdHJhaXRzPGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZG 9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Nv
cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdu
bWVudF9vcGVyjĀ:cj ICAgdHlwZWRl
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGV hdGU8PiBz
dHJ1Y3QgX190eXBlX3RyYWl0czxzaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ryd 3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9 pZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE R5cGU7Cn07
Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGNoYXI+IHsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhjĀ:ZW dWx0X2NvbnN0 hc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3 UgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmI HJ1ZV90eXBl
IGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFy
X3Q+IHsKICAgdHlwZWRlZiBfX3RydWVfdHl oYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7
CiAgIHR5c WYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9y ICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVf
dHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZW 90cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs
dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2Nv
bnN0cnVj OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf
b3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWx zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0
IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgcjĀ:nQ HsKICAgdHlwZ dWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml sX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydW lwZSBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoK
dGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBl YWl0czxpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGjĀ:90 l2aWFsX2NvcH R5cGUg
aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZ 3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBl
Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Q 0eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0
eXBlZ F9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy cjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGlzX1BPRF90eXBlOwp9OwoKdG xhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25n
PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rv
cjsK dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1 fb3BlcmF0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBpc19QT0RfdHlwZ TsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFp
dHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
ZmF fY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29w
eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYX JpdmlhbF9hc3NpZ25t
ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVljĀ:cG aXNfUE9EX3R5 wZV90cmFpdHM8bG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aG RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmI HJ1ZV90eXBlIGhhc190
cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICA wZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAg
I GVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvjĀ:cn dG9yOwogICB0 zc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3 ZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxm
dD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZ fY29weV9jb25zdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZjĀ:XB Ghhc190cml2a X3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfjĀ:ha zPGRvdWJsZT4 2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cG FzX3RyaXZpYWxfY29weV9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50
X29wZXJhdG9yOwogICB0eXBl IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnV BfX3R5cGVfdHJhaXRzPGxvbmcgZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZjĀ:iB 3RydWVfdHlwZ ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2Fzc2lnbm1lbnRfb3B 0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCg GVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf c3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdH lhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5c aXNfUE9EX3R5cGU7Cn07CgojIDMwMSAiL3Vzci9pbmNsdWRlL2crKy0zL3R5cGVfdHJhaXRzLmgi
IDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9Jc19 lZ2VyIHsKICB0eXBlZGVmIF9f
ZmFsc2VfdHlwZSBfSW50ZWdyYWw7Cn07CgoKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2Vy
PGJvb2w+IHsKICB0eXBlZjĀ:F9 HJ1ZV90eXBlI Y3QgX0lzX2ludGVnZXI8Y2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0lu
cmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2lnbmVkIGNoYXI+IHsKICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnjĀ:Bs RlPD4gc3RydW CB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCgoKdGVtcGxhdGU8 dHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJfdD4gewogIHR5cGVkZWYg
X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW5jĀ:l
xzaG9ydD4gew p9OwoKdGVtcGxhdGU8
PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcjĀ:Hs CB0eXBlZGVmI YXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGludD4gewog
IHR5cGVkZWYgX190cnVjĀ:5c gX0ludGVncmF VnZXI8dW5zaWduZWQgaW50PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZW w7
Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nPiB7CiAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ cnVjdCBfSXNfaW50ZWdlcjx1bnNp
Z25lZCBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CgoKCnRlbXBs
YXRlPD4gc3RydWN0IF 9pbnRlZ2VyPGxvbmcgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5
cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5za WQg
bG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CgojIDQ2ICIv
dXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmg gMwoKCgojIDI4ICIvdXNyL2luY2x1
ZGUvc3RyaW5nLmgiIDEgMwpleHRlcm4gIkMiIHsKCgoKCgoKCgpleHRlcm4gdm9pZCAqbWVtY3B5
ICh2b2lkICpfX3Jlc WN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2
b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRljĀ:dm
ZCAqbWVtbW9 fc3JjLCBzaXplX3QgX19u
KQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2jĀ:pt 1jY3B5ICh2b2 2lkICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAg
ICAgICAgICAgaW50jĀ:Yy c2l6ZV90IF9f kICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3c 7CgoK
ZXh0ZXJuIGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3My
LCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYjĀ:ml XRlX18gKChfX KF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3Qg
X19uKQogICAgICB vdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCiMgNzcgIi91
c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyY3B5IChjaGFyIC Jlc3Ry
aWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgp
OwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIg cmVzdHJpY3QgX19kZXN0LAogICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19u
KSB0aHJvdyAoKT pleHRlcm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVz
dCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpO Xh0ZXJu
IGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAjĀ:gI gICBzaXplX3Q NtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg
Kl9fczIpCiAgI Ghyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4g
aW50IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpf LCBzaXpl
X3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy
biBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFyIC MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0
cnhmcm0gKGNo Kl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3c 7CgojIDEy
MCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3Qg
Y2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYjĀ:V9 CgoX19tYWxsb Zy5oIiAzCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hh
ciAqX19zLCB gX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4
dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYy hyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgojIDE2NyAiL3Vzci9pbmNsdWRlL3N0cmluZy5o
IiAzCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAo b25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hh
ciAqX19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK
ZXh0ZXJuIHjĀ:Vf BzdHJzcG4gKF 9f
YWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfX woKZXh0ZXJu
IGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRjĀ:gK fX3B1cmVfXyk BjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxl
KQogICAgI m93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKIyAxODkgIi91c3Iv
aW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RydG9rIChjaGFy X3Jlc3RyaWN0
IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgdGhyb3cgKCk7CgoK
CmV4dGVybiBjaGFyICpfX3N0cnRva19yIC FyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAg
ICAgICAg ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7
CgpleHRlcm4gY2hhciAqc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19jĀ:fX vbnN0IGNo
YX AgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdjĀ:Ts yAyMjAgIi91c ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9f
YXR0cml lX18gKChfX3B1cmVfXykpOwoKIyAyMzEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIg
MwpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgdGhyb3 k7CgoKCmV4dGVy
biBjaGFyICpfX3N0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBf
X2J1ZmxlbikgdGhyb3cgKCk7CmV4dGVyjĀ:aG ICpzdHJlcnJv zaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQg
X19iem Aodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQg
YmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVzdCwgc V90IF9fbikgdGhy
b3cgKCk7CgoKZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBiY21wICh vbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAq
X19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKC HRlcm4gY2hhciAqaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4g ciAqcmluZGV4IChf
X2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgoKCmV4dGVybiBpbnQgX1jĀ:Mg ludCBfX2kpIH wpleHRlcm4gaW50IGZmcyAoaW50IF9faSkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVf KGNvbnN0KSk7CgoKCiMgMjc2ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJu
IGludCBfX3N0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19 zdCBjaGFyICpfX3My
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwpleHRlcm4gaW50IHN0
cmNhc2VjbXAgKF9fY29uc3QgY2hhcjĀ:19 SwgX19jb25zd cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RybmNhc2Vj
bXA fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOw MwMCAiL3Vzci9pbmNs
dWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9f
c3RyaW5ncCwKICAgICAgICAgICAgjĀ:IC ICAgX19jb25z 3ICgpOwojIDM2OSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCn0KCiMgNDkg
IijĀ:Iv 5jbHVkZS9nKy NyL2xpYi9n
Y2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9sajĀ:HM CIgMSAzCiMgO aW51eC8yLjk2L2luY2x1ZGUvc3lzbGltaXRz
LmgiIDEgMwojIDEzMSAiL3Vzci9jĀ:vZ jLWxpYi9pMzg RzLmgiIDEgMwojIDE0MyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAx
M i91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVk
ZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAxMjcgIi91c3IvaW5j ZS9iaXRzL3Bvc2l4MV9s
aW0uaCIgMiAzCiMgMTQzICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgoKIyAxMzEgIi91
c3IvbGliL2djYy1saWIvaTM4Ni RoYXQtbGludXgvMi45Ni9pbmNsdWRlL2xpbWl0cy5oIiAy
IDMKIyA4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9z
jĀ:aW dHMuaCIgMiAz YXQtbGludXgv
Mi45Ni9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA1MCAiL3Vzci9jĀ:sd lL2crKy0zL3N 5jbHVkZS9zdGRsaWIuaCIgMSAzCgpleHRlcm4g
IkMiIHsKCiMgOTQgIi91c3Iva HVkZS9zdGRsaWIuaCIgMwp0eXBlZGVmIHN0cnVjdAogIHsK
ICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAog KICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2X3Q7CiMgMTMz
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNpem BfX2N0eXBlX2dldF9tYl9j
dXJfbWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBhdG9mIChfX2NvbnN0IGNo
YXIgKl9fbnB0cikgdGhyb3cg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4g
aW50IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICg 9wdXJlX18pKTsKCmV4dGVybiBsb25nIGludCBhdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CjĀ:l9 Xh0ZW5zaW9uX Y29uc3QgY2hhciAqX19ucHRyKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18jĀ:fX 1cmVfXykpOwo BjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIG XIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCiMgMTYzICIvdXNyL2luY2x1ZGUv
c3RkbGliLmgiIDMKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAo b25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsIGludCBfX2Jhc2 Rocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0
cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgIjĀ:IC ICAgICAgICAg aW50IF9fYmFzZSkK
ICAgICB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHR gbG9uZyBsb25nIGludCBzdHJ0
b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKjĀ:mV HJpY3QgX19lb eHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3Vx
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2 B0ciwgaW50IF9fYmFzZSkKICAg
ICB0aHJvdyAoKTsKCgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0
b2xsIChfX2NvbnN0IGNo Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGh g
KCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxs
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyL CAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2Up
CiAgICAgdGhyb3cgKCkjĀ:gM wICIvdXNyL2l BfX3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbn wK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpljĀ:cm ZmxvYXQgX19z yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQog
ICAgIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIjĀ:2N bnN0IGNoYXIg ICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2V 0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcg
aW50IF9fc3RydG9sX GVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 ZW5k
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBf
X2dyb3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2jĀ:Vk xvbmcgaW50IF CpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgjĀ:IC ICAgICAgICAg gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjĀ:hc s
IGludCBfX2 8KZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgX19zdHJ0b2xsX2ludGVybmFsIChfX2Nvb GNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHR gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwjĀ:Rl 4g
dW5zaWduZ mFsIChfX2NvbnN0IGNoYXIg
KgogICAgICAgICAgICAgICAgICAgICAgICAgICAgjĀ:IC ICAgICAgICAg gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2jĀ:Aq 9fcmVzdHJpY3 CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfXjĀ:3V Qog
ICAgIHRo Yi5oIiAzCmV4dGVybiBjaGFy
ICpsNjRhIChsb25nIGludCBfX24pIHRocm93ICg KCmV4dGVybiBsb25nIGludCBhNjRsIChf
X2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK
CiMgMjggIi91c W5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCmV4dGVybiAiQyIgewoKCgoKdHlw
ZWRlZiBfX3VfY2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7 cGVkZWYg
X191X2ludCB1X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3Qg
cXVhZF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV FkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNp
ZF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7
CiMgNTggIi91 aW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7
CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV9 vZGVfdDsK
CgoKCnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7
CgoKCgoKdHlwZWRlZiBfX29mZl90IG9mZl90OjĀ:Dk CIvdXNyL2luY ZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoK
CnR5cGVkZWYjĀ:zc 6ZV90IHNzaXp 0
Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgp0eXBlZGVmIF9fa2V5X3 V5X3Q7CiMg
MTI3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyA3MCAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMSAzCnR5cGVkZWYgX190aW1lX3QgdGlt OwoKIyA4MiAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMwp0eXBlZGVmIF9fY2xvY2tpZF90IGNsb2NraWRfdDsKCiMgOTQgIi91c3IvaW5jbHVkZS90
aW1lLmgiID lwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKCiMgMTI3ICIvdXNyL2luY2x1ZGUv
c3lzL3R5cGVzLmgiIDIgMwojIDE0MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcjĀ:iA goKCnR5
cGVk ZWYgdW5zaWduZWQgc2hvcnQgaW50
IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCB gdWludDsKIyAxODQgIi91c3IvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMwp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f
IChfX1FJX Sk7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f
IChfX0hJX18pKSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVf KF9fbW9kZV9f
IChfX1NJX18pKSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f
IChfX0RJX18pKSk7CgoKdHlwZWRlZiB1bn 5lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVf
XyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBf
X2F0dHJp ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
dV9pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSk 0eXBlZGVmIHVu
c2lnbmVkIGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7
Cgp0eXBlZGVmIGludCByZWdpc3Rlcl90I XR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3Jk
X18pKSk7CgoKCgoKCgoKCgoKIyAzOCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAyMDcg
Ii91c3IjĀ:jb kZS9zeXMvdHl zeXMv
c2VsZWN0LmgiIDEgMwoKCgojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaW QuaCIgMSAzCnR5
cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNp
Z25lZCBsb25nIGludCBfX3ZhbFsoMTAyjĀ:IC ICogc2l6ZW9m pZ3NldF90OwoKIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIg
MiAzCg ojIDEwNiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCnN0cnVjdCB0aW1lc3BlYwog
IHsKICAgIGxvbmcgaW50IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZ iAgfTsKCiMgMzkg
Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKc3RydWN0
IHRpbWV2YWw7Cgp0eXBlZGVmIF9fZmRjĀ:za mZF9tYXNrOwo QgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuIGludCBz
ZWxlY GludCBfX25mZHMsIF9fZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAg
ICAgICAgICAgICAgIF9fZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVm CiAgICAgICAgICAg
ICAgICAgICBfX2ZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCB0aW1ldmFsICpfX3 RyaWN0IF9fdGltZW91dCkgdGhyb3cgKCk7CgojIDky
ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCn0KCiMgMjEwICIvdXNyL2luY2x1ZGUvc3lz
L3R5 LmgiIDIgMwoKCgojIDIyNCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVk
ZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzYmx 0X3QgZnNibGtjbnRf
dDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsKIyAyNTYgIi91c3IvaW5jbHVk
ZS9zeXMvdHlwZXMuaCIgMwp9CgojI iAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoK
CgoKZXh0ZXJuIGludDMyX3QgcmFuZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBz
cmFjĀ:tI 1bnNpZ25lZCB gY2hhciAq
aW5pdHN0YXRlICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3 RlYnVmLAogICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBj
aGFyICpzZXRzdGF0ZSAoY2hhciAq dGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoKCgpzdHJ1Y3Qg
cmFuZG9tX2RhdGEKICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAg
IG MyX3QgKnN0YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAg
IGludCByYW5kX3NlcDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgf mV4dGVybiBpbnQgcmFu
ZG9tX3IgKHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAg
ICAgICAgICAgaW50MzJfdCAqX19jĀ:0c jdCBfX3Jlc3V 1fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpf
X ikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19z
ZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAg ICAgICAgICAgICAgICAg
IHNpemVfdCBfX3N0YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9t
X2RhdGEgKl9fcmVzdHJpY3QgX1 YpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9y
IChjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgc3Ry
jĀ:IH bmRvbV9kYXRh CgpleHRlcm4g
aW50IHJhbmQgKHZvaWQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQjĀ:hb gKHVuc2lnbmV 4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpf
X3NlZWQpIHRocm93ICgpOwoKC goKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKSB0aHJv
dyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszjĀ:gd yb3cgKCk7Cgo ocm93ICgpOwpl
eHRlcm4gbG9uZyBpbnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcn 50IF9feHN1YmlbM10pIHRo
cm93ICgpOwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJu
IGxvbmcgaW50IGpyYW5kNDgg c2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAo
KTsKCgpleHRlcm4gdm9pZCBzcmFuZDQ4IChsb25nIGludCBfX3NlZWR2YWwpIHRocm93ICgpOwp Rlcm4gdW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3Nl
ZWQxNnZbM10pIHRocm93ICgpOwpleHRlcm4gdm9pZCBsY29uZ Ch1bnNpZ25lZCBzaG9ydCBp
bnQgX19wYXJhbVs3XSkgdGhyb3cgKCk7CgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsKICAgIHVu
c2lnbmVkIHNob3J0IGludCB dOwogICAgdW5zaWduZWQgc2hvcnQgaW50IGFbM107CiAgICB1
bnNpZ25lZCBzaG9ydCBpbnQgYzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBvbGRfeFszXTsKIC GludCBpbml0OwogIH07CgoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9k
YXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAg ICAgICAgICAgZG91YmxlICpf
X3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2ln
bmVkIHNob3J0IGludCBfX3 JpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRy
YW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIjĀ:dW ZSAqX19yZXN0 IGludCBscmFuZDQ4
X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3Q idWZmZXIsCiAgICAgICAgICAg
ICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgbnJhbmQ0OF9yIjĀ:nN 25lZCBzaG9yd ICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsjĀ:
I gICAgICAgICA lc3VsdCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdC FuZDQ4X2RhdGEgKl9fcmVzdHJp
Y3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBf
X3Jlc3VsdCkgdGhyb3cg CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBp
bnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2R g
Kl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19y
ZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0Z GludCBzcmFuZDQ4X3IgKGxvbmcg
aW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAgdGhyb3cg
KCk7CgpleHRlcm4gaW5jĀ:lZ 0OF9yICh1bnN AgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlci hy
b3cgKCk7CgpleHRlcm4gaW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1b
N10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgjĀ:bm OF9kYXRhICpf uY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgKm1h
bGxvYyAoc2l6ZV90IF l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18p
KTsKCmV4dGVybiB2b2lkICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19za Qog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKZXh0ZXJuIHZv
aWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QjĀ:za lKSB0aHJvdyA oKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19wdHIpIHRo
cm93ICgpOwoKCgple m4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgoK
IyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAxIDMKCmV4dGVybiAiQyIgewoKCgoKjĀ:dG
biB2b2lkICp KCgoKCn0KCiMgNTQ2ICIv
dXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKZX JuIHZvaWQgKnZhbGxvYyAoc2l6ZV90
IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyA1NjAgIi91
c3IvaW5jbHVkZS9z aWIuaCIgMwpleHRlcm4gdm9pZCBhYm9ydCAodm9pZCkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgpleHRlcm4gaW50IGF0ZXh odm9p
ZCAoKl9fZnVuYykgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19vbl9leGl0ICh2
b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b CpfX2FyZyksIHZvaWQgKl9fYXJnKQog
ICAgIHRocm93ICgpOwpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19z
dGF0dXMsIHZvaWQ fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV goX19u
b3JldHVybl9fKSk7CgojIDU4OCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFy
ICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1l aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIg
Kl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCmV4
dGVybiBpbnQgcHjĀ:52 hjaGFyICpfX3 CBzZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9fdjĀ:WU Glu
dCBfX3Jl aWQgdW5zZXRlbnYgKF9fY29u
c3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgojĀ:KZ 0ZXJuIGludCB IvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIg
Km1rdGVtcCAoY iAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IG1r
c3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY1MSAiL3Vzci9p dWRlL3N0
ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta2R0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBpbnQgc3lzdGVtIChfX2 N0IGNoYXIgKl9fY29tbWFuZCkgdGhyb3cg
KCk7CgoKIyA2NzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBh
dGggKF9fY29u Y2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqX19yZXN0cmljdCBfX3Jlc29sdmVkKSB0aHJvdyAoKTsKCgoKCgo wZWRlZiBp
bnQgKCpfX2NvbXBhcl9mbl90KSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKTsKCgoK
CgoKCgpleHRlcm4gdm9pZCAqYnNlYXJjaCAoX 25zdCB2b2lkICpfX2tleSwgX19jb25zdCB2
b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90
IF9fc2l6ZSw jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2
b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogIC AgICAgICAg
ICAgICAgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo b25zdF9fKSk7CmV4dGVybiBsb25nIGludCBs
YWJzIChsb25nIGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
IyA3MTEgIi IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19u
dW1lciwgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfX F9fY29uc3Rf
XykpOwpleHRlcm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVu
b20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ fXyAoKF9fY29uc3RfXykpOwojIDcyOSAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwg
aW50IF9fb 2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAg
IGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJujĀ:YX KmZjdnQg
KGR qX19yZXN0cmljdCBfX2RlY3B0LAog
ICAgICAgICAgICAgICAgICAgaW50ICpfX3 RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19i
dWYpIHRo ICgpOwoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwg
aW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXNjĀ:jd fX2RlY3B0
LC sKZXh0ZXJuIGNoYXIgKnFmY3Z0IChs
b25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgXjĀ:Gl XQsCiAgICAgI ZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpl
eHRlcm4 hciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hh
ciAqX19idWYpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZWN2dF9yIC VibGUgX192YWx1
ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAg
ICAgIGludCAqX19yZXN0cmljdCBfX3Np IGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAg
ICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IGZjdnRfciAo
ZG91YmjĀ:9f FsdWUsIGludC QsCiAg
ICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjajĀ:Cp 3Jlc3RyaWN0
IF9fbGVuKSB0aHJvdyAoKTsKCmV4dGVy
biBpbnQgcWVjdnRfciAobG9uZyBkb3V gX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAg
ICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19z
aWduL CAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBf
X2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBk bGUgX192YWx1ZSwg
aW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0
LCBpbnQgKl9fcmVzdHJpY3QgX19zaW ogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVz
dHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgbWJs
ZW4g Y29uc3QgY2hhciAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IG1idG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywKICAgICA gICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgd2N0b21iIChjaGFyICpfXjĀ:Hd GFyX3QgX193Y bWJzdG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLAogICAgICAg
ICA gICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19u
KSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYX 9fcmVzdHJpY3QgX19z
LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19w
d2NzLCBzaXplX3QgX19uKQogICAg cm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBycG1hdGNo
IChfX2NvbnN0IGNoYXIgKl9fcmVzcG9uc2UpIHRocm93ICgpOwojIDg1MSAiL3Vzci9pbmNsdWRl
L3jĀ:xp 5oIiAzCmV4dG F2Z1tdLCBp
bnQgX19uZWxlbSkgdGhyb3cgKCk7CgoKCgoKfQoKIyA1MSAiL3Vzc mNsdWRlL2crKy0zL3N0
bF9hbGdvYmFzZS5oIiAyIDMKCiMgMTQ3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxp
bnV4LzIuOTYvaW5jbHVkZS9zdGRjĀ:ua gMSAzCnR5cGV NsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMzQgIi91c3IvbGli
L y1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL25ldy5oIiAxIDMKIyAzMyAi
L3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8yLjk2jĀ:Y2 ZGUvbmV3IiAx iL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhh
dC1saW51eC8yLjk2L2luY2x1ZG V3IiAzCgoKCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNl
IHN0ZCB7CgogIGNsYXNzIGJhZF9hbGxvYyA6IHB1YmxpYyBleGNlcHRpb24gewogIHB1YmxpYzoK
IHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gImJh
ZF9hbGxvYyI7IH0KICB9OwoKICBzdHJ1Y3Qgbm90aHJvd190IHt gIGV4dGVybiBjb25zdCBu
b3Rocm93X3Qgbm90aHJvdzsKICB0eXBlZGVmIHZvaWQgKCpuZXdfaGFuZGxlcikoKTsKICBuZXdf
aGFuZGxlciBzZXRfbmV3X2hhb XIgKG5ld19oYW5kbGVyKTsKCn0KCgp2b2lkICpvcGVyYXRv
ciBuZXcgKHNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCAqb3BlcmF0b3IgbmV3jĀ:gK pemVfdCkgdGh vciBkZWxldGUg
KHZvaWQgKikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldG Aodm9pZCAqKSB0aHJvdygp
Owp2b2lkICpvcGVyYXRvciBuZXcgKHNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJv
dygpOwp2b2lkICpvcGVyYXRv ZXdbXSAoc2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYp
IHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJ 90JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSAodm9pZCAqLCBjb25zdCBzdGQ6
Om5vdGhyb3dfdCYpIHRocm93KCk7CgoKaW5saW5lIHZvaWQgK XJhdG9yIG5ldyhzaXplX3Qs
IHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9CmlubGluZSB2b2lkICpvcGVy
YXRvciBuZXdbXShzaXplX3Q vaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9
Cn0KCiMgMzQgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdW 25ldy5oIiAyIDMKCnVzaW5nIHN0ZDo6bmV3X2hhbmRsZXI7CnVzaW5nIHN0ZDo6c2V0X25ld19o
YW5kbGVyOwoKIyA1MyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0 bGdvYmFzZS5oIiAyIDMKCgoK
CiMgMzQgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMSAzCgoKc3RydWN0IGlu
cHV0X2l0ZXJhdG9yX3RhZy sKc3RydWN0IG91dHB1dF9pdGVyYXRvcl90YWcge307CnN0cnVj
dCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBpbnB1dF9pdGVyYXRvcl90YWcge307C cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBmb3J3YXJkX2l0ZXJhdG9y
X3RhZyB7fTsKc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF fdGFnIDogcHVibGljIGJpZGly
ZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9OwoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfRGlzdGFuY2U+IHN0cjĀ:CB nB1dF9pdGVyY YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKjĀ:
e lZGVmIF9EaXN fVHAqIHBvaW50ZXI7
CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCnN0cn BvdXRwdXRfaXRlcmF0b3Igewog
IHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVm
IHZvaWQgdmFsdWVfdHlwjĀ:IC eXBlZGVmIHZv pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF 8
Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yIHsKICB0
eXBlZGVmIGZvcndhcmRfaXRlcmF0b3JfdGFnIGl0ZXJhdjĀ:2N GVnb3J5OwogI ZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5
cGVkZWYgX1RwKiBwb2l yOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07CgoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgYmlkaXJlY3Rpb25hbF Vy
YXRvciB7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRl
Z29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogjĀ:cG ZWYgX0Rpc3Rh UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJl
bmNlOwp9OwoKdGVtcG UgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgcmFu
ZG9tX2FjY2Vzc19pdGVyYXRvciB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhd 3Rh
ZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYg
X0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXB mIF9UcCogcG9pbnRlcjsKICB0eXBl
ZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9DYXRlZ29yeSwgY2xhc3Mg
X1RwLCBjbGFzcyBfR GFuY2UgPSBwdHJkaWZmX3QsCiAgICAgICAgICBjbGFzcyBfUG9pbnRl
ciA9IF9UcCosIGNsYXNzIF9SZWZlcmVuY2UgPSBfVHAmPgpzdHJ1Y3QgaXRlcmF0b3IgjĀ:IH
cGVkZWYgX0N kZWYgX1RwIHZhbHVlX3R5
cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW 90eXBlOwogIHR5cGVkZWYgX1BvaW50
ZXIgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWZlcmVuY2UgcmVmZXJlbmNlOwp9OwoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0l0jĀ:dG PgpzdHJ1Y3Qg uYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWd 7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6ZGlmZmVyZ V90eXBlIGRpZmZlcmVuY2VfdHlwZTsK
ICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciBwb2ludGVyOwogIHR5cGVkZWYg
dHlwZW5hbWUgX0l hdG9yOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAgdHlwZWRlZi 5kb21f
YWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1
ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRp cmVuY2VfdHlwZTsKICB0eXBlZGVmIF9U
cCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4Kc3RydW l0ZXJhdG9yX3RyYWl0czxjb25zdCBfVHAqPiB7CiAgdHlwZWRlZiByYW5k
b21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZ F9UcCB2
YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm
IGNvbnN0IF9UcCogcG9pbnRlcjsKICB0eXBlZGV vbnN0IF9UcCYgcmVmZXJlbmNlOwp9Owoj
IDEzNCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFz
cyBfSXRlcj4Ka W5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9y
X2NhdGVnb3J5Cl9faXRlcmF0b3JfY2F0ZWdvcnkoY29uc3QgX0l0ZXImKQp7CiAg ZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdv
cnk7CiAgcmV0dXJuIF9DYXRlZ29yeSgpOwp9CgjĀ:1w F0ZSA8Y2xhc3 l90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqCl9fZGlz
dGFuY2VfdHlw b25zdCBfSXRlciYpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlKj4oMCk7Cn0 lbXBsYXRl
IDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZh
bHVlX3R5cGUqCl9fdmFsdWVfdHlwZShjb25zdjĀ:XR iYpCnsKICByZ b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSo+KDApOwp9Cgp0
ZW1wbGF0ZSA hc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0
ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQppdGVyYXRvcl9jYXRlZ29yeShjb25zdC RlciYgX19p
KSB7IHJldHVybiBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9faSk7IH0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVy cl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNl
X3R5cGUqCmRpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX19kaXN0YW5j
ZV90eXBlKF k7IH0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqCnZhbHVlX3R5cGUoY 3QgX0l0ZXIm
IF9faSkgeyByZXR1cm4gX192YWx1ZV90eXBlKF9faSk7IH0KCiMgMjU5ICIvdXNyL2luY2x1ZGUv
ZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKdGV hdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBj
bGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX HV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0
YW5jZSYgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICB3aGlsZSAoX19m dCAhPSBfX2xh
c3QpIHsgKytfX2ZpcnN0OyArK19fbjsgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2 lubGluZSB2b2lkIF9fZGlzdGFuY2UoX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0jĀ:dG IF9fbGFzdCwK IF9f
biwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKICBfX24gKz0gX19jĀ:0I gX19maXJz
dD 9yLCBjbGFzcyBfRGlzdGFuY2U+Cmlu
bGluZSB2b2lkIGRpc3RhbmNlKF9JbnB1d XJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAg
ICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX0Rpc3RhbmNlJiBfX24pCnsKICBfX2Rpc3Rh
bmNlKF9jĀ:yc sIF9fbGFzdCw 7Cn0K
CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgppbmxpbmUgdH 5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCl9fZGlzdGFuY2UoX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lu SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRv
cl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZm
ZXJlbm R5cGUgX19uID0gMDsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICsr
X19maXJzdDsgKytfX247CiAgfQogIHJldHVybiBfX247Cn0KCnRlbXBsYjĀ:Dx GFzcyBfUmFu
ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmV jZV90eXBlCl9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAg
ICAgc G9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsKICByZXR1cm4gX19sYXN0IC0gX19maXJz
dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgppbmxpjĀ:dH ZW5hbWUgaXRl mZmVyZW5jZV90eXBlCmRpc3RhbmNlKF9J
bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF B1dEl0ZXJhdG9yIF9fbGFzdCkgewogIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdv
cnkKjĀ:IF YXRlZ29yeTsK c3QsIF9D
YXRlZ29yeSgpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXR gY2xhc3MgX0Rpc3Rh
bmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19u
LCBpbnB1dF9pdGVyYXRvcl90YWcpI CB3aGlsZSAoX19uLS0pICsrX19pOwp9CgoKCgoKdGVt
cGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5s
aW5 vaWQgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNl
IF9fbiwKICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYW RlcmF0b3JfdGFnKSB7
CiAgaWYgKF9fbiA+PSAwKQogICAgd2hpbGUgKF9fbi0tKSArK19faTsKICBlbHNlCiAgICB3aGls
ZSAoX19uKyspIC0tX19pOwp9CgoK dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vz
c0 JhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICByYW5k
b21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9faSArPSBfX247C nRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBhZHZhbmNlKF9J
bnB1dEl0ZXJhdG9yJiBfX2ksIF9 0YW5jZSBfX24pIHsKICBfX2FkdmFuY2UoX19pLCBfX24s
IGl0ZXJhdG9yX2NhdGVnb3J5KF9faSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4K
Y 3MgYmFja19pbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29u
dGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNv aW5lcl90eXBlOwogIHR5
cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZv
aWQgdmFsdWVfdHlwZTsKICB0eX VmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYg
dm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGJhY2tf
ZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkge30KICBi
YWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGV vcj0oY29uc3QgdHlwZW5h
bWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgewogICAgY29udGFpbmVyLT5wdXNo
X2JhY2soX192YWx1ZSk7CiAgI XR1cm4gKnRoaXM7CiAgfQogIGJhY2tfaW5zZXJ0X2l0ZXJh
dG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5z 0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0K
ICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3 F0b3IrKyhpbnQpIHsgcmV0
dXJuICp0aGlzOyB9Cn07CgojIDM3OCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5o
IiAzCnRlbXBsYXRlIDxjbGFz Q29udGFpbmVyPgppbmxpbmUgYmFja19pbnNlcnRfaXRlcmF0
b3I8X0NvbnRhaW5lcj4gYmFja19pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpIHsKICByZXR1cm4 Fja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9Db250YWluZXI+CmNsYXNzIGZyb250X2luc2VydF9pdGVyY iB7CnByb3RlY3RlZDoKICBf
Q29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgY29udGFp
bmVyX3R5cGU7CiAgdHlwZWR vdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5
OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3 GU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAg
ZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9Db250 ZXImIF9feCkgOiBjb250YWlu
ZXIoJl9feCkge30KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0
b3I9KGNvbnN0IHR5cGVuYW 9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsKICAg
IGNvbnRhaW5lci0+cHVzaF9mcm9udChfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9C ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAq
dGhpczsgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29 pbmVyPiYgb3BlcmF0b3IrKygp
IHsgcmV0dXJuICp0aGlzOyB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBv
cGVyYXRvcisrKGludCkge XR1cm4gKnRoaXM7IH0KfTsKCiMgNDE3ICIvdXNyL2luY2x1ZGUv
ZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmlujĀ:
Z mcm9udF9pbnN zZXJ0ZXIoX0NvbnRh
aW5lciYgX194KSB7CiAgcmV0dXJuIGZyb250X2luc2VydF VyYXRvcjxfQ29udGFpbmVyPihf
X3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3MgaW5zZXJ0X2l0ZXJhdG9y
IHsKcHJvdGVjdGVkOgogjĀ:b2 YWluZXIqIGNv pdGVyYXRvciBpdGVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnR l
cl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK
ICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZ HZvaWQgZGlmZmVyZW5jZV90eXBl
OwogIHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGlu
c2VydF9pdGVyYXRvcih udGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJh
dG9yIF9faSkKICAgIDogY29udGFpbmVyKCZfX3gpLCBpdGVyKF9faSkge30KICBpbnNlcn Rl
cmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6
OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsKICAgIGl0ZXIg b250YWluZXItPmluc2VydChpdGVy
LCBfX3ZhbHVlKTsKICAgICsraXRlcjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5zZXJ0X2l0
ZXJhdG9yPF9Db250YW I+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGluc2Vy
dF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzO iAg
aW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRo
aXM7IH0KfTsKCiMgNDU5ICIvdXNyL2luY2x1ZGUvZys vc3RsX2l0ZXJhdG9yLmgiIDMKdGVt
cGxhdGUgPGNsYXNzIF9Db250YWluZXIsIGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lCmluc2VydF9p
dGVyYXRvcjxfQ29ud mVyPiBpbnNlcnRlcihfQ29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBf
X2kpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faXRl ICBy
ZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCwgX19pdGVyKF9faSkpOwp9CgoK
dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXjĀ:F0 IsIGNsYXNzIF CAgICAgICBjbGFzcyBfRGlzdGFuY2UgPSBwdHJkaWZmX3Q+
CgoKCgpjbGFzcyBy cnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IgewogIHR5cGVkZWYgcmV2
ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3I UcCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmVmZXJlbmNlLCBfRGlz
dGFuY2U+IF9TZWxmOwpwcm90ZWN0ZWQ6CiAgX0JpZ WN0aW9uYWxJdGVyYXRvciBjdXJyZW50
OwpwdWJsaWM6CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j
YXRlZ29yeTsKICB lZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRp
ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF ZlcmVu
Y2UgcmVmZXJlbmNlOwoKICByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoKSB7fQogIGV4
cGxpY2l0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9p YXRvcihfQmlkaXJlY3Rpb25hbEl0ZXJh
dG9yIF9feCkKICAgIDogY3VycmVudChfX3gpIHt9CiAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBi
YXNlKCkgY29uc3 ByZXR1cm4gY3VycmVudDsgfQogIF9SZWZlcmVuY2Ugb3BlcmF0b3IqKCkg
Y29uc3QgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3RtcCA9IGN1cnJlbjĀ:iA CBy
ZXR1cm4g LT4oKSBjb25zdCB7IHJldHVy
biAmKG9wZXJhdG9yKigpKTsgfQoKICBfU2VsZiYjĀ:lc 0b3IrKygpIHs sKICB9CiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQpIHsKICAgIF9T
ZWxmIF9fdG1wI nRoaXM7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQog
IF9TZWxmJiBvcGVyYXRvci0tKCkgewogICAgKytjdXJyZW50OwogICAgcmV0dXJu aGlzOwog
IH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAg
ICsrY3VycmVudDsKICAgIHJldHVybiBfX3RtcD B9Cn07CgojIDU1MCAiL3Vzci9pbmNsdWRl
L2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQmlJdGVyLCBjbGFzcyBf
VHAsIGNsYXNzjĀ:ZW CiAgICAgICAg
ZXJhdG9yPT0oCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF 8X0JpSXRl
ciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3gsCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0
aW9uYWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLjĀ:mV CBfRGlzdGFuY PSBfX3kuYmFzZSgpOwp9CgojIDU2NyAiL3Vzci9pbmNsdWRlL2cr
Ky0zL3N0bF9 yYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmNsYXNzIHJl
dmVyc2VfaXRlcmF0b3IKewpwcm90ZWN0ZWQ6CiAgX0l0ZXJhdG9yIGN1cnJlbn B1YmxpYzoK
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9j
YXRlZ29yeQogICAgICAgICAgaXRlcmF0b3JfjĀ:ZW cnk7CiAgdHlw 0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgdmFsdWVfdHlw
ZTsKICB0eX VmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJl
bmNlX3R5cGUKICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmI GVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyCiAgICAgICAgICBwb2ludGVyOwogIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJ zPF9JdGVyYXRvcj46OnJlZmVyZW5jZQogICAg
ICAgICAgcmVmZXJlbmNlOwoKICB0eXBlZGVmIF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOwogIHR5
cGVkZWYgc XJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+IF9TZWxmOwoKcHVibGljOgogIHJldmVy
c2VfaXRlcmF0b3IoKSB7fQogIGV4cGxpY2l0IHJldmVyc2VfaXRlcmF0b3Io cmF0b3JfdHlw
ZSBfX3gpIDogY3VycmVudChfX3gpIHt9CgogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgX1NlbGYm
IF9feCkgOiBjdXJyZW50KF9feC5jdXJyZW B7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+
CiAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQog
ICAgOiBj ZW50KF9feC5iYXNlKCkpIHt9CgoKICBpdGVyYXRvcl90eXBlIGJhc2UoKSBjb25z
dCB7IHJldHVybiBjdXJyZW50OyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKig vbnN0IHsKICAg
IF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAgfQoKICBw
b2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdjĀ:HJ HVybiAmKG9wZ KysoKSB7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQogIF9 mIG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAg
LS1jdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3 F0b3ItLSgpIHsK
ICAgICsrY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShp
bnQpIHsKICAgIF9TZWxmIF9fdG1wID0gjĀ:aX CiAgICArK2N1 fU2VsZiBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3Qg
ewogIC V0dXJuIF9TZWxmKGN1cnJlbnQgLSBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3Ir
PShkaWZmZXJlbmNlX3R5cGUgX19uKSB7CiAgICBjdXJyZW50IC09IF9fbjĀ:CA HJldHVybiAq
cmVuY2VfdHlwZSBfX24pIGNvbnN0IHsK
ICAgIHJldHVybiBfU2VsZihjdXJyZW5 gX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLT0o
ZGlmZmVyZW5jZV90eXBlIF9fbikgewogICAgY3VycmVudCArPSBfX247CiAgICByZXR1cm4gKnRo
aXM7C QogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0
IHsgcmV0dXJuICooKnRoaXMgKyBfX24pOyB9Cn07Cgp0ZW1wbGF0ZSA8 c3MgX0l0ZXJhdG9y
PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y
PiYgX194LAogICAgICAgICAgICAgIC AgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0
ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsKfQoKdGVt
cGxh PGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHJldmVy
c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAjĀ:gI gICAgY29uc3Q kpIHsKICByZXR1cm4gX195LmJhc2UoKSA8
IF9feC5iYXNlKCk7Cn0KCnRlbXBsYjĀ:Dx GFzcyBfSXRlc ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpvcGVyYXRvci0o
Y29 gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICBjb25zdCBy
ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldH BfX3kuYmFzZSgpIC0g
X194LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIHJldmVyc2Vf
aXRlcmF0b3I8X0l0ZXJhdG9yPgpv YXRvcisodHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxf
SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgY29uc3QgcmV2ZXJzZV9p
dG RvcjxfSXRlcmF0b3I+JiBfX3gpIHsKICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+KF9feC5iYXNlKCkgLSBfX24pOwp9CgojIDgwOCAiL3Vzc mNsdWRlL2crKy0zL3N0
bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0ID0gcHRyZGlm
Zl90PgpjbGFzcyBpc3RyZWFtX2l hdG9yIHsKICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IDw+
IChjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
I CAgICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJik7CnByb3RlY3RlZDoKICBp
c3RyZWFtKiBfTV9zdHJlYW07CiAgX1RwIF9NX3ZhbHVlOwogIGJvjĀ:X0 ZW5kX21hcmtl fbWFya2VyID0gKCpfTV9zdHJlYW0pID8gdHJ1
ZSA6IGZhbHNlOwogICAgaWYgKF VuZF9tYXJrZXIpICpfTV9zdHJlYW0gPj4gX01fdmFsdWU7
CiAgICBfTV9lbmRfbWFya2VyID0gKCpfTV9zdHJlYW0pID8gdHJ1ZSA6IGZhbHNlOwogIH0KcHVi
OgogIHR5cGVkZWYgaW5wdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5
cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdCB mZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5j
ZTsKCiAgaXN0cmVhbV9pdGVyYjĀ:ig DogX01fc3RyZ fQogIGlzdHJlYW1faXRlcmF0b3IoaXN0cmVhbSYgX19zKSA6IF9NX3N0cmVhbSgm zKSB7IF9NX3JlYWQoKTsgfQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVy
biBfTV92YWx1ZTsgfQoKICBwb2ludGVyIG9wZXJhdG9yLT4oKS 5zdCB7IHJldHVybiAmKG9w
ZXJhdG9yKigpKTsgfQoKICBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3Q+JiBvcGVyYXRvcisr
KCkgewogICAgX01fcmVhZCgp ICAgcmV0dXJuICp0aGlzOwogIH0KICBpc3RyZWFtX2l0ZXJh
dG9yPF9UcCwgX0Rpc3Q+IG9wZXJhdG9yKysoaW50KSB7CiAgICBpc3RyZWFtX2l0ZXJhdG9yPF9 wgX0Rpc3Q+IF9fdG1wID0gKnRoaXM7CiAgICBfTV9yZWFkKCk7CiAgICByZXR1cm4gX190bXA7
CiAgfQp9OwoKIyA4NjQgIi91c3IvaW5jbHVkZS9nKystMy9zd XRlcmF0b3IuaCIgMwp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgaXN0cmVhbV9pdGV vcjxfVHAsIF9EaXN0YW5jZT4mIF9feCwKICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYgX195KS iAgcmV0dXJuIChfX3guX01fc3RyZWFtID09IF9feS5fTV9zdHJlYW0gJiYKICAgICAgICAgIF9f
eC5fTV9lbmRfbWFya2VyID09IF9feS5fTV9lbmRfbWFya2Vy fAogICAgICAgICBfX3guX01f
ZW5kX21hcmtlciA9PSBmYWxzZSAmJiBfX3kuX01fZW5kX21hcmtlciA9PSBmYWxzZTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9UcD xhc3Mgb3N0cmVhbV9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBv
c3RyZWFtKiBfTV9zdHJlYW07CiAgY29uc3QgY2hhciogX01fc3RyaW5nOwpwdWJsaWM6CiAgd ZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9p
ZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJ lX3R5cGU7CiAgdHlwZWRlZiB2
b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgb3N0cmVhbV9pdGVyYXRv
cihvc3RyZWFtJiBfX3MpI 01fc3RyZWFtKCZfX3MpLCBfTV9zdHJpbmcoMCkge30KICBvc3Ry
ZWFtX2l0ZXJhdG9yKG9zdHJlYW0mIF9fcywgY29uc3QgY2hhciogX19jKQogICAgOiBfTV9z
YW0oJl9fcyksIF9NX3N0cmluZyhfX2MpIHt9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVy
YXRvcj0oY29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAgICAqX0 RyZWFtIDw8IF9fdmFsdWU7CiAg
ICBpZiAoX01fc3RyaW5nKSAqX01fc3RyZWFtIDw8IF9NX3N0cmluZzsKICAgIHJldHVybiAqdGhp
czsKICB9CiAgb3N0cmVh dGVyYXRvcjxfVHA+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhp
czsgfQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICpjĀ:z
B9CiAgb3N0cm kgeyByZXR1cm4gKnRo
aXM7IH0KfTsKCiMgOTA3ICIvdXNyL2luY2x1ZGUvZysrLjĀ:3R 2l0ZXJhdG9yL bF9hbGdvYmFzZS5oIiAyIDMKCgoKCgoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJ lcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9UcD4KaW5s
aW5lIHZvaWQgX19pdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcj 9i
LCBfVHAqKSB7CiAgX1RwIF9fdG1wID0gKl9fYTsKICAqX19hID0gKl9fYjsKICAqX19iID0gX190
bXA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0jĀ:LC bGFzcyBfRm9y oX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIg
X19iKSB7CiAgX19pdG N3YXAoX19hLCBfX2IsIF9fdmFsdWVfdHlwZShfX2EpKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgc3dhcChfVHAmIF9fYSwgX1RwJiBfXjĀ:Hs ICBfVHAgX190 dG1wOwp9CgoKCgoKCgoK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBjb25 fVHAmIG1pbihjb25zdCBfVHAmIF9f
YSwgY29uc3QgX1RwJiBfX2IpIHsKICByZXR1cm4gX19iIDwgX19hID8gX19iIDogX19hOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc 1RwPgppbmxpbmUgY29uc3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2Es
IGNvbnN0IF9UcCYgX19iKSB7CiAgcmV0dXJuIF9fYSA8IF9fYiA/IF9fYiA6IF9fYTsK Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIGNvbnN0IF9UcCYgbWlu
KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYi NvbXBhcmUgX19jb21wKSB7CiAgcmV0
dXJuIF9fY29tcChfX2IsIF9fYSkgPyBfX2IgOiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9Db21wjĀ:Pg bmxpbmUgY29u 0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKICByZXR1cm4gX19jb21wKF9 gX19i
KSA/IF9fYiA6IF9fYTsKfQojIDEyMyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5o
IiAzCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLjĀ:GF yBfT3V0cHV0S dHB1dEl0ZXIgX19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBjĀ:hc sCiAgICAgICA 9yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3 FnLCBf
RGlzdGFuY2UqKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytf
X2ZpcnN0KQogICAgKl9fcmVzdWx0ID0gKl9fZmly CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFz
cyBfRGlzdGFuY2 lubGluZSBfT3V0cHV0SXRlcgpfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgX091dHB1d XIgX19y
ZXN1bHQsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yIChf
RGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJ gX19uID4gMDsgLS1fX24pIHsKICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAg
cmV0dXJuIF9fc Wx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1RwKgpfX2Nv
cHlfdHJpdmlhbChjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0 VHAqIF9f
cmVzdWx0KSB7CiAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiAoX19s
YXN0IC0gX19maXJzdCkpOwogIHJldHVybiBfX3 VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsK
fQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNz
IF9Cb29sVHlwjĀ:c3 dWN0IF9fY29w
IGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICA gICAgICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjĀ:ml XJhdG9yX2Nhd ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZm
ZXJlbmNlX3R gX0Rpc3RhbmNlOwogICAgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0LCBfQ2F0ZWdvcnkoKSwgKF9EaXN0YW5jZSopIDApOwogIH0KfT RlbXBsYXRl
IDxjbGFzcyBfVHA+CnN0cnVjdCBfX2NvcHlfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5
cGU+CnsKICBzdGF0aWMgX1RwKiBjb3B5KGNv IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBf
X2xhc3QsIF9UcCogX19yZXN1bHQpIHsKICAgIHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0
LCBfX2xhc3 9fcmVzdWx0KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qg
X19jb3B5X2Rpc3BhdGNoPGNvbnN0IF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlP iAgc3RhdGlj
IF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9f
cmVzdWx0KSB7CiAgICByZXR1cm4gX19jb3BjĀ:ya pYWwoX19maXJ VtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJ
dGVyPgppb mUgX091dHB1dEl0ZXIgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRljĀ:X3 c3VsdCkg
ewo zPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90
eXBlIF9UcDsKICB0eXBlZGVmIHR5cGVuYW 9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZp
YWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAgICAgICAgX1RyaXZpYWw7CiAgcmV0dXJuIF9fY29w
eV9kaXNwjĀ:aD SW5wdXRJdGVy cHko
X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0KCiMgMjE4ICIvdXNyL2ljĀ:1Z vZysrLTMv
c3 9CaWRpcmVjdGlvbmFsSXRlcjEsIGNs
YXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsC CAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGlu
ZSBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIx
IF9fZml sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAg
ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgjĀ:aW cmVjdGlvbmFs gICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSopCnsKICB3
aGlsZS 9maXJzdCAhPSBfX2xhc3QpCiAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICBy
ZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQ XNzSXRlciwgY2xh
c3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19jb3B5X2JhY2t3YXJ SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzd CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgjĀ:IC ICAgICAgICAg KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0Rpc3 NlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9f
bGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xh
c3Q7 cmV0dXJuIF9fcmVzdWx0Owp9CgoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVj
dGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiA gICAgICBjbGFzcyBf
Qm9vbFR5cGU+CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2gKewogIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzP WRpcmVjdGlvbmFsSXRlcjE+OjppdGVyYXRvcl9jYXRl
Z29yeQogICAgICAgICAgX0NhdDsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
QmljĀ:lY pb25hbEl0ZXI zdGFuY2U7
CgogIHN0YXRpYyBfQmlkaXJlY3Rpb25hbEl0ZXIyIGNvcHkoX0JpZG N0aW9uYWxJdGVyMSBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyMSBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIyIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkKF9fZmlyc3Qs
IF FzdCwgX19yZXN1bHQsIF9DYXQoKSwgKF9EaXN0YW5jZSopIDApOwogIH0KfTsKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZjĀ:GF 2g8X1RwKiwgX KiBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwg
Y29uc3QgX1RwKiBfX2xhc3QsIF9 gX19yZXN1bHQpIHsKICAgIGNvbnN0IHB0cmRpZmZfdCBf
TnVtID0gX19sYXN0IC0gX19maXJzdDsKICAgIG1lbW1vdmUoX19yZXN1bHQgLSBfTnVtLCBfX2Zp
c CBzaXplb2YoX1RwKSAqIF9OdW0pOwogICAgcmV0dXJuIF9fcmVzdWx0IC0gX051bTsKICB9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5 Y2t3YXJkX2Rpc3BhdGNo
PGNvbnN0IF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25z
dCBfVHAqIF9fZmlyc3QsIGNvbn 9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICBy
ZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgog
ICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgfQp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9CSTEsIGNsYXNzIF9CSTI+CmlubGluZSBfQkkyIGNjĀ:fY ja3dhcmQoX0J Jlc3VsdCkgewogIHR5cGVkZWYgdHlwZW5hbWUg
X190eXBlX3RyYWl0czx0eXBlbjĀ:SB GVyYXRvcl90c ICAgICAgICAgICAgICAgIDo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv gICAgICAgICAgX1RyaXZpYWw7CiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxf
QkkxLCBfQkkyLCBfVHJpdmlhbD4KICAgICAgICAgICAgICA6Om koX19maXJzdCwgX19sYXN0
LCBfX3Jlc3VsdCk7Cn0KCiMgMzA4ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgi
IDMKdGVtcGxhdGUgPGNsYXNzjĀ:bn dEl0ZXIsIGNs pcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4gX19jb3B5X24oX0lucHV0SXRlciB ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgI CAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgZm9yICggOyBfX2NvdW50ID4gMDsgLS1f
X2NvdW50KSB7CiAgICAqX19 1bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICAgICsr
X19yZXN1bHQ7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPihfX2 nN0LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUkFJdGVyLCBjbGFzcyBfU2l6ZSwg
Y2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWlyPF9SQUl0jĀ:IF dXRwdXRJdGVy lIF9fY291bnQsCiAgICAgICAgIF9PdXRwdXRJdGVy
IF9fcmVzdWx0LAogICAgIC ByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SQUl0
ZXIgX19sYXN0ID0gX19maXJzdCArIF9fY291bnQ7CiAgcmV0dXJuIHBhaXI8X1JBSXRlciwgXjĀ:dH dEl0ZXI+KF9f dWx0KSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l gY2xhc3MgX091dHB1dEl0ZXI+
CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfSW5wdXRJdGVy
IF9fZmlyc3QsIF9TaXplI 291bnQsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJu
IF9fY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgjĀ:
X 0ZXJhdG9yX2N sYXNzIF9JbnB1dEl0
ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj 5saW5lIHBhaXI8X0lucHV0SXRl
ciwgX091dHB1dEl0ZXI+CmNvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQs
IF9PdXRwdXRJdGVyIF9fjĀ:dW KSB7CiAgcmV0 fcmVzdWx0KTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGN z
IF9UcD4Kdm9pZCBmaWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
LCBjb25zdCBfVHAmIF9fdmFsdWUpIHsKICBmb3IgKCA7I mlyc3QgIT0gX19sYXN0OyArK19f
Zmlyc3QpCiAgICAqX19maXJzdCA9IF9fdmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3V0cHV0
SXRlciwgY2xhc3MgX1N sIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgZmlsbF9uKF9PdXRwdXRJ
dGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAgZm9yIC Bf
X24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogIHJldHVy
biBfX2ZpcnN0Owp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg cHV0SXRlcjEsIGNsYXNzIF9JbnB1
dEl0ZXIyPgpwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4gbWlzbWF0Y2goX0lucHV0SXRl
cjEgX19maXJzdDEsCi AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjĀ:CA X0lucHV0SXRl IT0gX19sYXN0MSAmJiAq
X19maXJzdDEgPT0gKl9fZmlyc3QyKSB7CiAgICArK19 yc3QxOwogICAgKytfX2ZpcnN0MjsK
ICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19m
aXJzdDIpOwp9Cgp0Z GF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIy
LCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJjĀ:Mj
bWlzbWF0Y2g gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyMSBfX2xhc3 ogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgjĀ:IC ICAgICBfQmlu 3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2Z 0MSwg
Kl9fZmlyc3QyKSkgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIHJldHVy
biBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMjĀ:19 XJzdDEsIF9fZ dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KaW5saW5lIGJv
b2wgZXF1YWwoX0ljĀ:0S lcjEgX19maXJ AgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKSB7CiAgZm9yICggOyBfX2 N0MSAh
PSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCpfX2ZpcnN0MSAhPSAq
X19maXJzdDIpCiAgICAgIHJldHVybiBmYWxzZTsKjĀ:ZX cm4gdHJ1ZTsK jbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRp
Y2F0ZT4KaW5saW Jvb2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyL mluYXJ5
UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7
ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICB oIV9fYmluYXJ5X3ByZWQoKl9fZmlyc3Qx
LCAqX19maXJzdDIpKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCgoKCgp0
ZW1wbGF0ZSA8YjĀ:3M 0lucHV0SXRlc b2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ MSBfX2xh
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBf
SW5wdXRJdGVyMiBfX2xhc3QyKSB7CiAgZm9yIC BfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f
Zmlyc3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAg
IGlmICgqX19m dDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKCpf
X2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICBjĀ:1c gX19m
aXJzdD QyOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1djĀ:XI CBjbGFzcyBfQ cGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg
X19sYXN0MSw gICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgIC AgICBfQ29t
cGFyZSBfX2NvbXApIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIg
IT0gX19sYXN0MgogICAgICAgIDsgKytfX2ZpjĀ:MS KytfX2ZpcnN0 fX2ZpcnN0MikpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKF9f
Y29tcCgqX1 JzdDIsICpfX2ZpcnN0MSkpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0
dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjĀ:Qo W5saW5l
IGJv dW5zaWduZWQgY2hhciogX19maXJz
dDEsCiAgICAgICAgICAgICAgICAgICAgICAjĀ:vb 0IHVuc2lnbmV AgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLAog
ICAgICAgI CAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QyKQp7CiAg
Y29uc3Qgc2l6ZV90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsKICBj dCBzaXplX3Qg
X19sZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOwogIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNt
cChfX2ZpcnN0MSwgX19maXJzdDIsIG1pbi xlbjEsIF9fbGVuMikpOwogIHJldHVybiBfX3Jl
c3VsdCAhPSAwID8gX19yZXN1bHQgPCAwIDogX19sZW4xIDwgX19sZW4yOwp9CgppbmxpbmUgYm9v
bCBsZXhp cmFwaGljYWxfY29tcGFyZShjb25zdCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hh
ciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjĀ:gY uc3QgY2hh
ci sKCiAgcmV0dXJuIGxleGljb2dyYXBo
aWNhbF9jb21wYXJlKChjb25zdCBzaWduZjĀ:2h iopIF9fZmlyc ICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAg
ICAgICAjĀ:gI gICAgICAgICA 0MiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ2 BjaGFyKikgX19s
YXN0Mik7CgoKCgoKCn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0
SXRlcjI+CmludCBfX2xleGljb2dyYXBojĀ:bF b21wYXJlXzN3 0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICjĀ:lu V0SXRlcjIgX1 B3aGls
ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc SB7CiAgICBpZiAo
Kl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICByZXR1cm4gLTE7CiAgICBpZiAoKl9fZmlyc3Qy
IDwgKl9fZmlyc3QxKQogICAgICByZXR gMTsKICAgICsrX19maXJzdDE7CiAgICArK19fZmly
c3QyOwogIH0KICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikgewogICAgcmV0dXJuICEoX19maXJz
dDEgP 19sYXN0MSk7CiAgfQogIGVsc2UgewogICAgcmV0dXJuIC0xOwogIH0KfQoKaW5saW5l
IGludApfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoY29uc3Qg aWduZWQgY2hhciog
X19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBj
aGFyKiBfX2xhc3QxLAogICAgICAgIC AgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgY2hhciogX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1
bnNpjĀ:ZC aGFyKiBfX2xh IF9fbGFz
dDEgLSBfX2ZpcnN0MTsKICBjb25zdCBwdHJkaWZmX3QgX19sZW4yID0 sYXN0MiAtIF9fZmly
c3QyOwogIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIG1p
bihfX2xlbjEsIF9fbGVuMikpOwogIjĀ:HV iBfX3Jlc3Vsd ICAgICAgICA6IChfX2xlbjEgPT0gX19sZW4yID8gMCA6IChfX2xlbjEgPCBf
X2xjĀ:gP tMSA6IDEpKTs jb21wYXJl
XzN3YXkoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF FzdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciog
X19sYXN0MikKewoKICByZXR1cm4g ZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3Qx
LA AgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9f
bGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKjĀ:nN HNpZ25lZCBja ICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25l
ZCBjaGFyKikgX19sYXN0Mik7CgojĀ:KC KCnRlbXBsYXR V0SXRlcjI+CmludCBsZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1
d XIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu SXRlcjIgX19sYXN0MikK
ewogIHJldHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX19maXJzdDEsIF9fbGFz
dDEsIF9fZmlyc3QyLCBfX2xhc3 sKfQoKIyAzMSAiL3Vzci9pbmNsdWRlL2crKy0zL3ZlY3Rv
ciIgMiAzCgojIDU0ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDEgMwoKCgojIDU4
dXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwpleHRlcm4gIkMiIHsKCgpleHRlcm4gdm9pZCBf
X2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9 fX2NvbnN0IGNoYXIgKl9f
ZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwgX19j
b25zdCBjaGFyICpfX2Z1bmN0ajĀ:Qo CAgIHRocm93I KTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJy tLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgIC AgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fbm9yZXR1cm5fXykpOwoK ZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9f
YXNzZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgdGhyb3cgKCkjĀ:9h RyaWJ1dGVfXy IvaW5jbHVkZS9n
KystMy9zdGxfYWxsb2MuaCIgMiAzCiMgNzIgIi91c3IvaW5jbjĀ:S9 ystMy9zdGxfY cmVhZC5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRl
L3NjaGVkLmgiIDEgMwoKCgo 3ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKc3Ry
dWN0IHNjaGVkX3BhcmFtCiAgewogICAgaW50IHNjaGVkX3ByaW9yaXR5OwogIH07CgpleHRlcm kMiIHsKCgoKZXh0ZXJuIGludCBjbG9uZSAoaW50ICgqX19mbikgKHZvaWQgKl9fYXJnKSwgdm9p
ZCAqX19jaGlsZF9zdGFjaywKICAgICAgICAgICAgICAgICAgjĀ:IF ZmxhZ3MsIHZv vdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgpleHRl
cm4gIkMiIHsKCgpleHRlcm 50IHNjaGVkX3NldHBhcmFtIChfX3BpZF90IF9fcGlkLCBfX2Nv
bnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkKICAgICB0aHJvdyAoKTsKCgpleHRlcjĀ:aW IHNjaGVkX2dl ZWRfcGFyYW0gKl9f
cGFyYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWR 0c2NoZWR1bGVyIChfX3BpZF90
IF9fcGlkLCBpbnQgX19wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHN0cnVjdCBzY2hlZjĀ:XJ SAqX19wYXJhb ZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQpIHRocm93ICgpOwoKCmV4dGVybiBpjĀ:
c oZWRfeWllbGQ oZWRfZ2V0X3ByaW9y
aXR5X21heCAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAoKT pleHRlcm4gaW50IHNjaGVkX2dl
dF9wcmlvcml0eV9taW4gKGludCBfX2FsZ29yaXRobSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBz
Y2hlZF9ycl9nZXRfaW50 YWwgKF9fcGlkX3QgX19waWQsIHN0cnVjdCB0aW1lc3BlYyAqX190
KSB0aHJvdyAoKTsKCn0KCiMgMjEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoKIyA i
L3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCgojIDU5ICIv
dXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX19jbjĀ:19 GNsb2NrX3Q7C dHJ1Y3QgdG0KewogIGludCB0bV9zZWM7CiAgaW50IHRt
X21pbjsKICBpbnQgdG1 1cjsKICBpbnQgdG1fbWRheTsKICBpbnQgdG1fbW9uOwogIGludCB0
bV95ZWFyOwogIGludCB0bV93ZGF5OwogIGludCB0bV95ZGF5OwogIGludCB0bV9pc2RzdD og
IGxvbmcgaW50IHRtX2dtdG9mZjsKICBfX2NvbnN0IGNoYXIgKnRtX3pvbmU7CgoKCgp9OwoKCgoK
c3RydWN0IGl0aW1lcnNwZWMKICB7CiAgICBzdHJ1Y3QgjĀ:ZX ZWMgaXRfaW50 sdWU7CiAgfTsKCgpzdHJ1Y3Qgc2lnZXZlbnQ7CgojIDE2
MyAiL3Vzci9pbmNsdW RpbWUuaCIgMwpleHRlcm4gY2xvY2tfdCBjbG9jayAodm9pZCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lICh0aW1lX3QgKl9fdGltZXIpIHRocm93I woK
CmV4dGVybiBkb3VibGUgZGlmZnRpbWUgKHRpbWVfdCBfX3RpbWUxLCB0aW1lX3QgX190aW1lMCkK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19 zdF9fKSk7CgoKZXh0ZXJuIHRpbWVf
dCBta3RpbWUgKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVfdCBz
dHJmdGltZSAoY2hhc 19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUsCiAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwK ICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhy
b3cgKCk7CgojIDE5NCAiL3Vzci9pbmNsdWRlL3RpbW IgMwpleHRlcm4gc3RydWN0IHRtICpn
bXRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVj
dCB0bSAqbG9jYWx0 IChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gc3RydWN0IHRtICpnbXRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJ gX190
aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBf
X3RwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjd SAqbG9jYWx0aW1lX3IgKF9fY29uc3Qg
dGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgdG0jĀ:fc zdHJpY3QgX19 NjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dG BjaGFy
ICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4g
Y2hhciAqYXNjdGltZV9yIChfX2NvbnN0IHN0cnVjjĀ:bS X19yZXN0cmlj jaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgpl
eHRlcm4gY2hhcijĀ:Rp VfciAoX19jb2 CAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocjĀ:Cg woK
CgoKZXh0 IF9fZGF5bGlnaHQ7CmV4dGVy
biBsb25nIGludCBfX3RpbWV6b25lOwoKCgoKZXh uIGNoYXIgKnR6bmFtZVsyXTsKCgoKZXh0
ZXJuIHZvaWQgdHpzZXQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0Owpl
eHRlcm4gbG9uZ nQgdGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoX19jb25zdCB0
aW1lX3QgKl9fd2hlbikgdGhyb3cgKCk7CiMgMjcxICIvdXNyL2luY2x1ZGUvdGlt IiAzCmV4
dGVybiB0aW1lX3QgdGltZWdtIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiB0
aW1lX3QgdGltZWxvY2FsIChzdHJ1Y3QgdG0gKl ApIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
ZHlzaXplIChpbnQgX195ZWFyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCgoKZXh0 IGludCBuYW5vc2xlZXAgKF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jl
cXVlc3RlZF90aW1lLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVjĀ:jI fX3Jl
bWFpbm tfZ2V0cmVzIChjbG9ja2lkX3Qg
X19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjI 3JlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBjbG9ja19nZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpf
X3RwKSB0aHJjĀ:oK KCgpleHRlcm4 s
b2NrX2lkLCBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX190cCkKICAgICB0aH AoKTsKCiMg
MzA5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgdGltZXJfY3JlYXRlIChjbG9j
a2lkX3QgX19jbG9ja19pZCwKICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBzaWdldmVu
dCAqX19yZXN0cmljdCBfX2V2cCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3QgKl9f
cmVzdHJpY3 90aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2RlbGV0ZSAo
dGltZXJfdCBfX3RpbWVyaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZ 2V0dGltZSAo
dGltZXJfdCBfX3RpbWVyaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3Qgc3RydWN0IGl0aW1lcnNwZWM fcmVzdHJpY3QgX192YWx1ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX292YWx1ZSkg
dGhyb3cgK goKZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwg
c3RydWN0IGl0aW1lcnNwZWMgKl9fdmFsdWUpCiAgICAgdGhyb3cgKCk7CgoKjĀ:ZX IGludCB0
aW1 gdGhyb3cgKCk7CiMgMzYyICIvdXNy
L2luY2x1ZGUvdGltZS5oIiAzCn0KCiMgMj 91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoK
CgojIDMxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDEgMwpleHRlcm4gIkMiIHsKCgojIDQ5ICIv
dXNyL2lu ZGUvc2lnbmFsLmgiIDMKdHlwZWRlZiBfX3NpZ3NldF90IHNpZ3NldF90OwojIDM3
MyAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCn0KCiMgMjUgIi91c3IvaW5jĀ:kZ wdGhyZWFk
Lm Vzci9pbmNsdWRlL3B0aHJlYWQuaCIg
MwplbnVtCnsKICBQVEhSRUFEX0NSRUFURjĀ:0l UJMRSwKCiAgU CnsKICBQVEhSRUFEX0lOSEVSSVRfU0NIRUQsCgogIFBUSFJFQURfRVhQ
TElDSVRjĀ:IR KCn07CgplbnV IUkVB
RF9TQ09QRV9QUk9DRVNTCgp9OwoKZW51bQp7CiAgUFRIUkVBRF9NVVRFWF 1FRF9OUCwKICBQ
VEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAs
CiAgUFRIUkVBRF9NVVRFWF9BREFQVElWjĀ:UA IDk5ICIvdXNy KICBQVEhSRUFEX1BST0NFU1NfUFJJVkFURSwKCiAgUFRIUkVBRF9QUk9D
RVNTX1 JFRAoKfTsKCiMgMTMwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCnN0cnVjdCBf
cHRocmVhZF9jbGVhbnVwX2J1ZmZlcgp7CiAgdm9pZCAoKl9fcm91dGluZ HZvaWQgKik7CiAg
dm9pZCAqX19hcmc7CiAgaW50IF9fY2FuY2VsdHlwZTsKICBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51
cF9idWZmZXIgKl9fcHJldjsKfTsKCgojĀ:1b 7CiAgUFRIUkV NFTF9ESVNBQkxFCgp9OwplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9ERUZF
UlJFRjĀ:iA FRIUkVBRF9DQ i9pbmNs
dWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfY3JlYXRljĀ:dG ZWFkX3QgKl9f gICAgICAgICAgICAgIF9fY29uc3QgcHRo
cmVhZF9hdHRyX3QgKl9fcmVzdHJpY3 9hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkICooKl9fc3RhcnRfcm91dGluZSkgKHZvaWQgKiksCiAgICAgICAgICAgICAgICAgICAg
ICAgjĀ:IH aWQgKl9fcmVz dGhyZWFk
X3QgcHRocmVhZF9zZWxmICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4 0IHB0aHJlYWRfZXF1
YWwgKHB0aHJlYWRfdCBfX3RocmVhZDEsIHB0aHJlYWRfdCBfX3RocmVhZDIpIHRocm93ICgpOwoK
CmV4dGVybiB2b2lkIHB0aHJlYWRfZjĀ:CA m9pZCAqX19yZ XyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2pv
aW4jĀ:0a lYWRfdCBfX3R oKTsKCgoK
CgpleHRlcm4gaW50IHB0aHJlYWRfZGV0YWNoIChwdGhyZWFkX3QgX1 kgdGhyb3cgKCk7CgoK
CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9pbml0IChwdGhyZWFkX2F0dHJfdCAqX19hdHRy
KSB0aHJvdyAoKTsKCgpleHRlcm4g IHB0aHJlYWRfYXR0cl9kZXN0cm95IChwdGhyZWFkX2F0
dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRkZXRh
Y2 F0ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBfX2RldGFjaHN0YXRlKSB0aHJvdjĀ:Ts gpleHRlcm4ga X19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19h
dHRyLAogICAgICAgICAgICAgICAjĀ:gI gICAgICAgICA JvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBhcmFt
I GhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVk cmFtICpfX3Jlc3RyaWN0
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcGFyYW0pIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgcHRocm 9hdHRyX2dldHNjaGVkcGFyYW0gKF9fY29uc3QgcHRocmVh
ZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
jĀ:X1 dHRyLAogICAg ICBzdHJ1Y3Qg
c2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QgX19wYXJhbSkKICAgICB vdyAoKTsKCgpleHRlcm4g
aW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwg
aW50IF9fcG9saWN5KQogICAgI m93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dl
dHNjaGVkcG9saWN5IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAg gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBf
X3BvbGljeSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHjĀ:Jl RfYXR0cl9zZX 2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgjĀ:IF aW5oZXJpdCkg 0dHJfZ2V0aW5oZXJpdHNjaGVkIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3J RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBp
bnQgKl9fcmVzdHJpY3QgX19pbmhlcml0KQogICAgIHRocm93I woKCmV4dGVybiBpbnQgcHRo
cmVhZF9hdHRyX3NldHNjb3BlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19zY29wZSkK
ICAgICB0aHJvdyAoKTsKCgpjĀ:lc gaW50IHB0aHJ FkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgIC CAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zY29wZSkgdGhyb3cgKCk7CgojIDI1OSAi
L3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50jĀ:aH YWRfYXR0cl9z 0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZC 9zdGFja2FkZHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9hdHRyX2dldHN0YWNrYWRkciAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cjĀ:dA ICAgICAgICAg ciwgdm9pZCAqKl9f
cmVzdHJpY3QgX19zdGFja2FkZHIpCiAgICAgdGhyb3cgKCkjĀ:jI 4MyAiL3Vzci9 B0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUgKHB0aHJl
YWRfYXR0cl90ICpfX2F0d iAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0
ZXRzdGFja3NpemUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dH NpemVfdCAqX19yZXN0cmljdCBf
X3N0YWNrc2l6ZSkKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0c2No
ZWRwYXJhbSAocHRocmVh IF9fdGFyZ2V0X3RocmVhZCwgaW50IF9fcG9saWN5LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0 f
cGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldHNjaGVkcGFyYW0g
KHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsCiAgICAgI CAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgKl9fcmVzdHJpY3QgX19wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QjĀ:oZ fcGFyYW0gKl9 sKCiMgMzI1ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcH Vh
ZF9tdXRleF9pbml0IChwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgjĀ:cm ZF9tdXRleGF0 gICAgICAgICAgICAgICAgX19tdXRleF9hdHRyKSB0aHJv
dyAoKTsKCgpleHRlcm 50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90
ICpfX211dGV4KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bjĀ:yA cHRocmVhZF9t cm4gaW50IHB0aHJlYWRf
bXV0ZXhfbG9jayAocHRocmVhZF9tdXRleF90ICpfX21 4KSB0aHJvdyAoKTsKCiMgMzQ2ICIv
dXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF91bmxvY2sg
KHB0aHJlYWRfbXV0Z CAqX19tdXRleCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRo
cmVhZF9tdXRleGF0dHJfaW5pdCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0jĀ:dy
KTsKCgpleHR gKHB0aHJlYWRfbXV0ZXhh
dHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZX ludCBwdGhyZWFkX211dGV4YXR0cl9n
ZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgjĀ:IC ICAgICAgIF9f gICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGF pIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZCAocHRocmVh
ZF9tdXRleGF0dHJfdCAqX19hdHRyLAogICAgICAgI CAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKIyAzODQgIi91c3IvaW5jbHVkZS9wdGhy
ZWFkLmgiIDMKZXhjĀ:uI udCBwdGhyZWF VzdHJpY3QgX19jb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2 N0IHB0
aHJlYWRfY29uZGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbmRfYXR0cikgdGhyb3cgKCk7CgoKZXh0jĀ:IG dCBwdGhyZWFk fY29uZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X2NvbmRfc2lnbm hwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHB0aHJlYWRfY29uZF9icm9hZGNhc3QgKHB0aHJlYWRfY29uZF90ICpfX2Nvb HRocm93
ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF93YWl0IChwdGhyZWFkX2NvbmRfdCAqX19y
ZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAjĀ:gI gICAgICAgICA 11dGV4KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJl
YWRfY29uZF90a HdhaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29uZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3QgjĀ:cm dHJp
Y3QgX19 gICAgICAgICBfX2NvbnN0IHN0
cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogIC AgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJf
aW5pdCAocHRojĀ:ZF b25kYXR0cl90
cHRocmVhZF9jb25kYXR0cl9kZXN0cm95IChwdGhyZWFkX2NvbmRhdHRyX3QgKl9 0cikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2dldHBzaGFyZWQgKF9fY29uc3Qg
cHRocmVhZF9jb25kYXR0cl90ICoKICAgICAgI CAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5jĀ:fX lc3RyaWN0IF9 w
dGhyZWFkX2NvbmRhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfY29uZGF0dHJfdC 9hdHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhy
b3cgKCk7CgoKIyA1NTAgIi91c3IvaW5jbHVk dGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhy
ZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICjĀ:Ag 9pZCAoKl9fZG sK
CgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0ZSAocHRocmVhZF9rZXlfdjĀ:2t SkgdGhy
b3cg ZmljIChwdGhyZWFkX2tleV90IF9f
a2V5LAogICAgICAgICAgICAgICAgICAgICAjĀ:gI gICAgIF9fY29 pleHRlcm4gdm9pZCAqcHRocmVhZF9nZXRzcGVjaWZpYyAocHRocmVh
ZF9rZXlfd 2tleSkgdGhyb3cgKCk7CiMgNTcwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAz
CmV4dGVybiBpbnQgcHRocmVhZF9vbmNlIChwdGhyZWFkX29uY2VfdCAqX19v X2NvbnRyb2ws
CiAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19pbml0X3JvdXRpbmUpICh2b2lkKSkg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnjĀ:Ro VhZF9zZXRjYW GRzdGF0ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9z
ZXRjYW5j eXBlIChpbnQgX190eXBlLCBpbnQgKl9fb2xkdHlwZSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdGhyZWFkX2NhbmNlbCAocHRocmVhZF90IF9fdGhyZWFkKSB vdyAoKTsKCgoK
CmV4dGVybiB2b2lkIHB0aHJlYWRfdGVzdGNhbmNlbCAodm9pZCkgdGhyb3cgKCk7CiMgNjAwICIv
dXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzC gpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVw
X3B1c2ggKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAg
ICAgICA gICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcm Rocm93ICgpOwoK
CgoKCgoKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBfcHRocmVhZF9j
bGVhbnVwX2J1ZmZlciAqX19idWZmZXIs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19leGVjdXRlKSB0aHJvdyAoKTsKCgoKCiMgNjUwICIvdXNyL2luY2x1ZGUvcHRocmVh
ZC5oIi MgMzEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAxIDMKZXh0ZXJuIGlu
dCBwdGhyZWFkX3NpZ21hc2sgKGludCBfX2hvdywKICAgICAgICAgICAgI CAgICAgICAgICAg
IF9fY29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX25ld21hc2ssCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3NpZ3NldF9jĀ:fX lc3RyaWN0IF9 B0aHJlYWRfa2lsbCAocHRocmVhZF90IF9fdGhyZWFkLCBpbnQgX19zaWdu
bykgd 3cgKCk7CgojIDY1MCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCiMgNjY1ICIv
dXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhjĀ:dG cmsgKHZvaWQg gICAgICAgICAgICAgICAgdm9pZCAoKl9f
cGFyZW50KSAodm9pZCksCiAgICAgIC AgICAgICAgICAgICAgICAgIHZvaWQgKCpfX2NoaWxk
KSAodm9pZCkpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9raWxsX290aGVyX3Ro
cmVh bnAgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBfX3B0aHJlYWRfaW5pdGlh
bGl6ZSAodm9pZCkgdGhyb3cgKCk7Cgp9CgojIDcyICIvdXNyL2luY2xjĀ:vZ rLTMvc3RsX2F crKy0zL3N0bF9hbGxvYy5oIiAzCiMgMTQx
ICIvdXNyL2luY2x1ZGUvZysrLTMvc 2FsbG9jLmgiIDMKdGVtcGxhdGUgPGludCBfX2luc3Q+
CmNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlIHsKCnByaXZhdGU6CgogIHN0YXRpYyB2b2lk
KiBjĀ:vb fbWFsbG9jKHN sbG9jKHZv
aWQqLCBzaXplX3QpOwoKCiAgc3RhdGljIHZvaWQgKCogX19tYWxsb2 xsb2Nfb29tX2hhbmRs
ZXIpKCk7CgoKcHVibGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7
CiAgICB2b2lkKiBfX3Jlc3VsdCA9 bGxvYyhfX24pOwogICAgaWYgKDAgPT0gX19yZXN1bHQp
IF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24pOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0K
Ci RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCApCiAgewogICAgZnJl
ZShfX3ApOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUod CogX19wLCBzaXplX3Qg
LCBzaXplX3QgX19uZXdfc3opCiAgewogICAgdm9pZCogX19yZXN1bHQgPSByZWFsbG9jKF9fcCwg
X19uZXdfc3opOwogICAgaWYgKDA gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxs
b2MoX19wLCBfX25ld19zeik7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBzdGF0aWMgdm9p
ZjĀ:iB 3NldF9tYWxsb CAgIHZvaWQg
KCogX19vbGQpKCkgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxljĀ:IC IF9fbWFsbG9j 0dXJuKF9fb2xkKTsKICB9Cgp9OwoKCgoKdGVt
cGxhdGUgPGludCBfX2luc3Q+Cn QgKCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0
Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCkgPSAwOwoKCnRlbXBsYXRlIDxpbnQgX19p
jĀ:Pg b2lkKgpfX21h b21fbWFsbG9j
KHNpemVfdCBfX24pCnsKICAgIHZvaWQgKCogX19teV9tYWxsb2NjĀ:uZ lcikoKTsKICA sKICAgICAgICBfX215X21hbGxvY19oYW5kbGVy
ID0gX19tYWxsb2NfYWxsb2Nfb 2hhbmRsZXI7CiAgICAgICAgaWYgKDAgPT0gX19teV9tYWxs
b2NfaGFuZGxlcikgeyBjZXJyIDw8ICJvdXQgb2YgbWVtb3J5IiA8PCBlbmRsOyBleGl0KDEpOyB9 gICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gbWFs
bG9jKF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm 9yZXN1bHQpOwogICAgfQp9
Cgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19p
bnN0Pjo6X1Nfb29tX3JlYWxs dm9pZCogX19wLCBzaXplX3QgX19uKQp7CiAgICB2b2lkICgq
IF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICBmb3IgKDs B7CiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5k
bGVyOwogICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhb XIpIHsgY2VyciA8PCAib3V0
IG9mIG1lbW9yeSIgPDwgZW5kbDsgZXhpdCgxKTsgfQogICAgICAgICgqX19teV9tYWxsb2NfaGFu
ZGxlcikoKTsKICAgICAgICB lc3VsdCA9IHJlYWxsb2MoX19wLCBfX24pOwogICAgICAgIGlm
IChfX3Jlc3VsdCkgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KfQoKdHlwZWRlZiBfX21hbGxvY1 GxvY190ZW1wbGF0ZTwwPiBtYWxsb2NfYWxsb2M7Cgp0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4KY2xhc3Mgc2ltcGxlX2FsbG9jIHsKCnB1Ymxp ICAgIHN0YXRpYyBfVHAqIGFs
bG9jYXRlKHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIDAgPT0gX19uID8gMCA6IChfVHAqKSBf
QWxsb2M6OmFsbG9jYXRlKF AqIHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyBfVHAqIGFs
bG9jYXRlKHZvaWQpCiAgICAgIHsgcmV0dXJuIChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKHNpejĀ:Zi X1RwKSk7IH0K X3AsIHNpemVfdCBf
X24pCiAgICAgIHsgaWYgKDAgIT0gX19uKSBfQWxsb2M6OmR sb2NhdGUoX19wLCBfX24gKiBz
aXplb2YgKF9UcCkpOyB9CiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wKQogICAg
ICB7IF9BbGxvYzo6ZGVhbjĀ:2F ShfX3AsIHNpe PGNsYXNzIF9BbGxvYz4KY2xhc3MgZGVidWdfYWxsb2MgewoKcHJpdmF0ZToKCiAg
bSB7X1NfZXh0cmEgPSA4fTsKCgoKcHVibGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6
ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3Jlc3VsdCA9IC FyKilfQWxsb2M6OmFsbG9jYXRl
KF9fbiArIF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsKICAgIHJldHVy
biBfX3Jlc3VsdCArIF9T dHJhOwogIH0KCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lk
KiBfX3AsIHNpemVfdCBfX24pCiAgewogICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19 g
X1NfZXh0cmE7CiAgICAoKHZvaWQpICgoKihzaXplX3QqKV9fcmVhbF9wID09IF9fbikgPyAwIDog
KF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsXjĀ:T0 19uIiwgIi91c MywgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAg
ICBfQWxsb2M6OmRlYWxjĀ:hd oX19yZWFsX3A B2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaX Qg
X19uZXdfc3opCiAgewogICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gX1NfZXh0cmE7
CiAgICAoKHZvaWQpICgoKihzaXplX3QqKV9fcmVhbF9w IF9fb2xkX3N6KSA/IDAgOiAoX19h
c3NlcnRfZmFpbCAoIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeiIsICIvdXNyL2luY2x1
ZGUvZysrLTMvc3RsX2 9jLmgiLCAyNzAsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwog
ICAgY2hhciogX19yZXN1bHQgPSAoY2hhciopCiAgICAgIF9BbGxvYzo6cmVhbGxvY2F0Z 3Jl
YWxfcCwgX19vbGRfc3ogKyBfU19leHRyYSwgX19uZXdfc3ogKyBfU19leHRyYSk7CiAgICAqKHNp
emVfdCopX19yZXN1bHQgPSBfX25ld19zejsKICAgIHJ ybiBfX3Jlc3VsdCArIF9TX2V4dHJh
OwogIH0KCn07CgoKIyAzMTkgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwp0ZW1w
bGF0ZSA8Ym9vbCB0a WRzLCBpbnQgaW5zdD4KY2xhc3MgX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlIHsKCnByaXZhdGU6CgoKCiAgICBlbnVtIHtfQUxJR04gPSA4fTsKICAgIGVudW0g QVhf
QllURVMgPSAxMjh9OwogICAgZW51bSB7X05GUkVFTElTVFMgPSBfTUFYX0JZVEVTL19BTElHTn07
CgogIHN0YXRpYyBzaXplX3QKICBfU19yb3VuZF91cCjĀ:pl QgX19ieXRlcy UdOLTEpICYgfihfQUxJR04gLSAxKSk7IH0KCnByaXZhdGU6
CiAgdW5pb24gX09i CiAgICAgICAgdW5pb24gX09iaiogX01fZnJlZV9saXN0X2xpbms7CiAg
ICAgICAgY2hhciBfTV9jbGllbnRfZGF0YVsxXTsKICB9Owpwcml2YXRlOgoKCgoKICA 0YXRp
YyBfT2JqKiB2b2xhdGlsZSBfU19mcmVlX2xpc3RbX05GUkVFTElTVFNdOwoKICBzdGF0aWMgc2l6
ZV90IF9TX2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX GVzKSB7CiAgICAgICAgcmV0dXJuICgo
KF9fYnl0ZXMpICsgX0FMSUdOLTEpL19BTElHTiAtIDEpOwogIH0KCgogIHN0YXRpYyB2b2lkKiBf
U19yZWZpbGwoc2l 0IF9fbik7CgoKICBzdGF0aWMgY2hhciogX1NfY2h1bmtfYWxsb2Moc2l6
ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCgogIHN0YXRpYyBjaGFyKiBfU19zdG 9mcmVl
OwogIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICBzdGF0aWMgc2l6ZV90IF9TX2hlYXBfc2l6
ZTsKCgoKCgoKCgogICAgc3RhdGljIHB0aHJlYWRf ZXhfdCBfU19ub2RlX2FsbG9jYXRvcl9s
b2NrOwojIDM5MSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCiAgICBjbGFzcyBf
TG9jayB7CiAgIC AgcHVibGljOgogICAgICAgICAgICBfTG9jaygpIHsgaWYgKHRocmVhZHMp
IHB0aHJlYWRfbXV0ZXhfbG9jaygmX1Nfbm9kZV9hbGxvY2F0b3JfbG9jayk7IH0KIjĀ:CA CAg
ICAgfl9M eF91bmxvY2soJl9TX25vZGVf
YWxsb2NhdG9yX2xvY2spOyB9CiAgICB9OwogICAjĀ:pZ kIGNsYXNzIF9 FsbG9jYXRlKHNpemVfdCBfX24pCiAgewogICAgX09iaiogdm9s
YXRpbGUqIF9fb nJlZV9saXN0OwogICAgX09iaiogX19yZXN1bHQ7CgogICAgaWYgKF9fbiA+
IChzaXplX3QpIF9NQVhfQllURVMpIHsKICAgICAgICByZXR1cm4obWFsbG9jX2Fs OjphbGxv
Y2F0ZShfX24pKTsKICAgIH0KICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1Nf
ZnJlZWxpc3RfaW5kZXgoX19uKTsKCgoKCgogIC AgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsK
CiAgICBfX3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsKICAgIGlmIChfX3Jlc3VsdCA9PSAwKSB7
CiAgICAgICAgjĀ:ZC X19yID0gX1Nf
IHJldHVybiBfX3I7CiAgICB9CiAgICAqX19teV9mcmVlX2xpc3QgPSBfX3Jlc3V tPiBfTV9m
cmVlX2xpc3RfbGluazsKICAgIHJldHVybiAoX19yZXN1bHQpOwogIH07CgoKICBzdGF0aWMgdm9p
ZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6Z F9fbikKICB7CiAgICBfT2JqKiBfX3EgPSAo
X09iaiopX19wOwogICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0OwoKICAgIGlmIChf
X24gPiAoc2ljĀ:0K fTUFYX0JZVEV j
YXRlKF9fcCwgX19uKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBfX215X2 VfbGlzdCA9
IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKCiAgICAgICAgX0xvY2sg
X19sb2NrX2luc3RhbmNlOwoKICAgIF9fcSAt TV9mcmVlX2xpc3RfbGluayA9ICpfX215X2Zy
ZWVfbGlzdDsKICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcTsKCiAgfQoKICBzdGF0aWMgdm9pZCog
cmVhbGxvY2 h2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KTsK
Cn0gOwoKdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwgM Wxsb2M7CnR5
cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPGZhbHNlLCAwPiBzaW5nbGVfY2xpZW50X2Fs
bG9jOwoKCgoKCgoKdGVtcGxhdGUgPGJvb2w 0aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFyKgpf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19jaHVua19hbGxv
YyhzaXplX 19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQmIF9fbm9ianMpCnsKICAgIGNoYXIq cmVzdWx0Owog
ICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgc2l6ZV90IF9f
Ynl0ZXNfbGVmdCA9IF9TX2VuZF9mcmVlIC Nfc3RhcnRfZnJlZTsKCiAgICBpZiAoX19ieXRl
c19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpIHsKICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2Zy
ZWU7CiAgjĀ:IC X1Nfc3RhcnRf dHVy
bihfX3Jlc3VsdCk7CiAgICB9IGVsc2UgaWYgKF9fYnl0ZXNfbGVmdCA+PSB pemUpIHsKICAg
ICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19sZWZ0L19fc2l6ZSk7CiAgICAgICAgX190b3Rh
bF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ia iAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9m
cmVlOwogICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICByZXR1
cm4oX19jĀ:1b pOwogICAgfSB nZXQg
PQogICAgICAgICAgMiAqIF9fdG90YWxfYnl0ZXMgKyBfU19yb3VuZF91cC 9oZWFwX3NpemUg
Pj4gNCk7CgogICAgICAgIGlmIChfX2J5dGVzX2xlZnQgPiAwKSB7CiAgICAgICAgICAgIF9PYmoq
IHZvbGF0aWxlKiBfX215X2ZyZWVfbGlz CiAgICAgICAgICAgICAgICAgICAgICAgIF9TX2Zy
ZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fYnl0ZXNfbGVmdCk7CgogICAgICAgICAgICAo
KF9PYmjĀ:9T N0YXJ0X2ZyZW JlZV9s
aXN0OwogICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSAoX09iaiopX 3RhcnRfZnJlZTsK
ICAgICAgICB9CiAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKiltYWxsb2MoX19ieXRlc190
b19nZXQpOwogICAgICAgIGlmICgwID0jĀ:TX 0YXJ0X2ZyZWU AgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0OwogICAg
ICAgI CBfT2JqKiBfX3A7CgoKCiAgICAgICAgICAgIGZvciAoX19pID0gX19zaXplOyBfX2kg
PD0gX01BWF9CWVRFUzsgX19pICs9IF9BTElHTikgewogICAgICAgICAg ICAgX19teV9mcmVl
X2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2kpOwogICAgICAgICAg
ICAgICAgX19wID0gKl9fbXlfZnJlZV N0OwogICAgICAgICAgICAgICAgaWYgKDAgIT0gX19w
KSB7CiAgICAgICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVf
bGlz aW5rOwogICAgICAgICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19w
OwogICAgICAgICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3R fZnJlZSArIF9faTsK
ICAgICAgICAgICAgICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpz
KSk7CgoKICAgICAgICAgICAgICAgIjĀ:CA CAgICAgICAgf ICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jX2FsbG9j
Ojp vY2F0ZShfX2J5dGVzX3RvX2dldCk7CgoKCiAgICAgICAgfQogICAgICAgIF9TX2hlYXBf
c2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAgICAgICBfU19lbmRfZn A9IF9TX3N0YXJ0X2Zy
ZWUgKyBfX2J5dGVzX3RvX2dldDsKICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXpl
LCBfX25vYmpzKSk7CiAgICB9Cn0K Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBf
X2luc3Q+CnZvaWQqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46
Ol JlZmlsbChzaXplX3QgX19uKQp7CiAgICBpbnQgX19ub2JqcyA9IDIwOwogICAgY2hhciog
X19jaHVuayA9IF9TX2NodW5rX2FsbG9jKF9fbiwgX19ub2Jqcyk7C CBfT2JqKiB2b2xhdGls
ZSogX19teV9mcmVlX2xpc3Q7CiAgICBfT2JqKiBfX3Jlc3VsdDsKICAgIF9PYmoqIF9fY3VycmVu
dF9vYmo7CiAgICBfT2JqKiBfX25jĀ:fb qOwogICAgaW5 R1cm4oX19jaHVuayk7CiAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlz
d F9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKICAgICAgX19yZXN1bHQgPSAoX09iaiopX19j
aHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0X29i IChfT2JqKikoX19jaHVu
ayArIF9fbik7CiAgICAgIGZvciAoX19pID0gMTsgOyBfX2krKykgewogICAgICAgIF9fY3VycmVu
dF9vYmogPSBfX25leHRfb2JqOw AgICAgIF9fbmV4dF9vYmogPSAoX09iaiopKChjaGFyKilf
X25leHRfb2JqICsgX19uKTsKICAgICAgICBpZiAoX19ub2JqcyAtIDEgPT0gX19pKSB7CiAgICAg
ICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSAwOwogICAgICAgICAg
ICBicmVhazsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB 1cnJlbnRfb2JqIC0+IF9N
X2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29iajsKICAgICAgICB9CiAgICAgIH0KICAgIHJldHVy
bihfX3Jlc3VsdCk7Cn0KCnRlbjĀ:XR Dxib29sIHRoc YWxsb2NfdGVtcGxhdGU8dGhyZWFkcywgaW5zdD46OnJlYWxsb2NhdGUodm9pZCog wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fb2xkX3N6LAogICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IF9fbmV3X3N6KQp7CiAgICB2b2lkKiBfX3Jlc3VsdDsKICAgIHNp
emVfdCBfX2NvcHlfc3o7CgogjĀ:aW KF9fb2xkX3N6 zeiA+IChzaXplX3QpIF9NQVhfQllURVMpIHsKICAgICAgICByZXR1cm4ocmVhbGxjĀ:hf AsIF9fbmV3X3 9vbGRfc3opID09
IF9TX3JvdW5kX3VwKF9fbmV3X3N6KSkgcmV0dXJuKF9fcCk7C CBfX3Jlc3VsdCA9IGFsbG9j
YXRlKF9fbmV3X3N6KTsKICAgIF9fY29weV9zeiA9IF9fbmV3X3N6ID4gX19vbGRfc3o/IF9fb2xk
X3N6IDogX19uZXdfc3o7CiAjĀ:tZ jcHkoX19yZXN NhdGUoX19wLCBfX29sZF9zeik7CiAgICByZXR1cm4oX19yZXN1bHQpOwp9CgoKIC HRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIHB0aHJlYWRfbXV0ZXhf
dAogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy cywgX19pbnN0Pjo6X1Nfbm9k
ZV9hbGxvY2F0b3JfbG9jawogICAgICAgID0gezAsIDAsIDAsIFBUSFJFQURfTVVURVhfVElNRURf
TlAsIHswLCAwfX07CiMgNj IvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKdGVt
cGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFyKiBfX2RlZmF1bHRfYWxsbjĀ:dG cGxhdGU8X190 MDsKCnRlbXBsYXRl
IDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hhciojĀ:kZ hdWx0X2FsbG9 NfZW5kX2ZyZWUgPSAwOwoKdGVtcGxhdGUgPGJvb2wg
X190aHJlYWRzLCBpbnQgX nN0PgpzaXplX3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f
dGhyZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsKCnRlbXBsYXRlIDxib29sIF9f
ZWFkcywgaW50IF9faW5zdD4KX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p
bnN0Pjo6X09iaiogdm9sYXRpbGUKX19kZWZhdWx0X2FsbGjĀ:Rl BsYXRlPF9fdG CAgIF9ORlJFRUxJU1RTCl0gPSB7MCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgjĀ:MC MCwgMCwgMCwg vZysrLTMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3M s
b2NhdG9yIHsKICB0eXBlZGVmIGFsbG9jIF9BbGxvYzsKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90
IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBka XJlbmNlX3R5cGU7CiAgdHlwZWRl
ZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlw
ZWRlZiBfVHAmIHJlZmV jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNl
OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPi J1
Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07CgogIGFs
bG9jYXRvcigpIHt9CiAgYWxsb2NhdG9yKGNvbnN0IGFs YXRvciYpIHt9CiAgdGVtcGxhdGUg
PGNsYXNzIF9UcDE+IGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3I8X1RwMT4mKSB7fQogIH5hbGxv
Y2F0b3IoKSB7fQoKIC ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1
cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX SBj
b25zdCB7IHJldHVybiAmX194OyB9CgoKCiAgX1RwKiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBj
b25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVybiBfX24jĀ:gM /IHN0YXRpY19 ogc2l6ZW9mKF9UcCkpKQogICAgICAgICAgICAgICAgICAg
IDogMDsKICB9CgoKI 2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24p
CiAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsgjĀ:IC
aXplX3R5cGU 6ZV90KC0xKSAvIHNpemVv
ZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBvaW IgX19wLCBjb25zdCBfVHAmIF9fdmFs
KSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2b2lkIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsg
X19wLT5+X1RwKCk7 fTsKCnRlbXBsYXRlPD4KY2xhc3MgYWxsb2NhdG9yPHZvaWQ+IHsKICB0
eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmV jZV90
eXBlOwogIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0
X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX GU7CgogIHRlbXBsYXRlIDxjbGFzcyBf
VHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwog
IH07Cn07CgoKdGV hdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj p7CiAg
cmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8 PiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+
JikKewogIHJldHVybiBmYWxzZTsKfQojIDgwMyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGxv
Yy5oIiAzCnRlbX RlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2Nh
dG9yIHsKICBfQWxsb2MgX191bmRlcmx5aW5nX2FsbG9jOwoKICB0eXBlZGVmIHNpe CBzaXpl
X3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1Rw
KiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1R jb25zdF9wb2ludGVyOwogIHR5cGVkZWYg
X1RwJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0
eXBlZGVmIF9UcjĀ:Wx V90eXBlOwoKI YmluZCB7CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RojĀ:Ci fTsK
CiAgX19 0IF9fYWxsb2NhdG9yJiBfX2Ep
CiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2 91bmRlcmx5aW5nX2FsbG9jKSB7fQogIHRl
bXBsYXRlIDxjbGFzcyBfVHAxPgogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yPF9UcDEs
IF9BbGxvYz4m YSkKICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdf
YWxsb2MpIHt9CiAgfl9fYWxsb2NhdG9yKCkge30KCiAgcG9pbnRlciBhZGRyZXN lZmVyZW5j
ZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KICBjb25zdF9wb2ludGVyIGFkZHJlc3MoY29u
c3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZ m4gJl9feDsgfQoKCiAgX1RwKiBhbGxvY2F0
ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVybiBfX24gIT0gMAog
ICAgICAgID8 hdGljX2Nhc3Q8X1RwKj4oX191bmRlcmx5aW5nX2FsbG9jLmFsbG9jYXRlKF9f
biAqIHNpemVvZihfVHApKSkKICAgICAgICA6IDA7CiAgfQoKCiAgdm9pZCBkZW 9jYXRlKHBv
aW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQogICAgeyBfX3VuZGVybHlpbmdfYWxsb2MuZGVhbGxv
Y2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHAp fQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBj
b25zdAogICAgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogIHZvaWQgY29u
c3RydWN0KH 50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3Zh
bCk7IH0KICB2b2lkIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKjĀ:H0 TsKCnRl
bXBs dG9yPHZvaWQsIF9BbGxvYz4gewog
IHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTs 0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl
X3R5cGU7CiAgdHlwZWRlZiB2b2lkKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29u
c3RfcG9pb jsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNz
IF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRlZiBfX2FsbG9jYXRv VHAxLCBfQWxs
b2M+IG90aGVyOwogIH07Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+Cmlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3 9hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2Ex
LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYg
X19hMikKjĀ:IH dHVybiBfX2Ex ZXJs
eWluZ19hbGxvYzsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9 vYz4KaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAg
ICAgICAgICAgICAgICAgICAgICAgY29ucjĀ:19 GxvY2F0b3I8X YTEuX191bmRlcmx5aW5nX2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5n
X2FsbG9 9CgoKCgoKCnRlbXBsYXRlIDxpbnQgaW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0PiYsCiAgIC AgICAgICAgICAg
ICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4mKQp7CiAgcmV0dXJuIHRy
dWU7Cn0KCgp0ZW1wbGF0ZSA8aW50IF9f dD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAg
ICBjb2jĀ:Bf 1hbGxvY19hbG BmYWxz
ZTsKfQoKCgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc mlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p
bnN0PiYsCiAgICAgICAgICAgICAgICAjĀ:gI gY29uc3QgX19 wgX19pbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoKCnRlbXBsYXRlIDxi
b29sI GhyZWFkcywgaW50IF9faW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+jĀ:IC ICAgICAgICAg fdGVtcGxhdGU8X190aHJlYWRzLCBfX2lu
c3Q+JikKewogIHJldHVybiBmYWxzZT oKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAgICAg
ICAg ICAgICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mKSB7CiAgcmV0dXJuIHRydWU7
Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCB yYXRvciE9KGNvbnN0
IGRlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVn
X2FsbG9jPF9BbGxvYz4mKSB7CiAgc XJuIGZhbHNlOwp9CiMgOTU3ICIvdXNyL2luY2x1ZGUv
ZysrLTMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRv
cj4 ydWN0IF9BbGxvY190cmFpdHMKewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNl
bGVzcyA9IGZhbHNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYX o6IHJlYmluZDxfVHA+
OjpvdGhlcgogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2NhdG9yPgpj dCBib29sIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2Nh
dG9yPjo6X1NfaW5zdGFuY2VsZXNzOwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAx
PgjĀ:J1 QgX0FsbG9jX3 BzdGF0aWMg
Y29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cjĀ:WY 2ltcGxlX2Fsb cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2Nh
dG9yX3R5cGU7Cn07CgoKCnRlbXB lIDxjbGFzcyBfVHAsIGludCBfX2luc3Q+CnN0cnVjdCBf
QWxsb2NfdHJhaXRzPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+CnsKICBz
d WMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxl
X2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19p PiA+IF9BbGxvY190eXBl
OwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2lu
c3Q+ID4gYWxsb2NhdG9yX3R5cG 07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3Ro
cmVhZHMsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2Fs
X3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBf
U19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxjĀ:sb jPF9UcCwgX19 wgX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2Nf
dHlwZTsKICB0eXBlZGVmIF9fY 2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl
PF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wjĀ:0Z 8Y2xhc3MgX1R haXRzPF9UcCwg
ZGVidWdfYWxsb2M8X0FsbG9jPiA+CnsKICBzdGF0aWMgY29uc3jĀ:9v BfU19pbnN0YW 2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9j
PiA+IF9BbGxvY190eXBlOwogjĀ:cG ZWYgX19hbGxv gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGF BfVHAxLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAg
ICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsIF9fbWFsbG9jX G9jX3RlbXBsYXRlPF9faW5z
dD4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5
cGVkZWYgc2ltcGxlX2FsbG9 UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+
IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY1 W1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5z c3RydWN0IF9BbGxvY190cmFp
dHM8X1RwLAogICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwKICAgICAgICAg
ICAgICAgICAgICAgICAgIC AgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Rociwg
X19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRyd CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190
aHIsX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsjĀ:0e lZGVmIF9fYWx BsYXRlPF9fdGhyLF9faW5zdD4gPgogICAgICAgICAg
YWxsb2NhdG9yX3R5cGU7C goKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgY2xh
c3MgX0FsbG9jPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxsb2NhdG9yPF9UcDEs
YnVnX2FsbG9jPF9BbGxvYz4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxl
c3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF wgZGVidWdfYWxsb2M8X0FsbG9j
PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxf
QWxsb2M+ID4gYWxsb2Nh X3R5cGU7Cn07CgoKCgoKCgoKIyAzMiAiL3Vzci9pbmNsdWRlL2cr
Ky0zL3ZlY3RvciIgMiAzCgojIDM2ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2NvbnN0cnVjĀ:o
AxIDMKCgoKCg BkZXN0cm95KF9UcCog
X19wb2ludGVyKSB7CiAgX19wb2ludGVyLT5+X1RwKCk7C nRlbXBsYXRlIDxjbGFzcyBfVDEs
IGNsYXNzIF9UMj4KaW5saW5lIHZvaWQgY29uc3RydWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9f
dmFsdWUpIHsKICBuZXc fcCkgX1QxKF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx
PgppbmxpbmUgdm9pZCBjb25zdHJ1Y3QoX1QxKiBfX3ApIHsKICBuZXcgKF9fcCkgX1QxKC 0K
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZApfX2Rlc3Ryb3lf
YXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zv cmRJdGVyYXRvciBfX2xhc3QsIF9f
ZmFsc2VfdHlwZSkKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAg
IGRlc3Ryb3koJipfX2 N0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+
CmlubGluZSB2b2lkIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0Zvcndhc GVy
YXRvciwgX190cnVlX3R5cGUpIHt9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwg
Y2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX2Rlc3Ryb3k vcndhcmRJdGVyYXRvciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190
eXBlX3RyYWl0czxfV jpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAgICBfVHJpdmlh
bF9kZXN0cnVjdG9yOwogIF9fZGVzdHJveV9hdXgoX19maXJzdCwgX19sYXN0LCBfVHJpjĀ:bF
ZXN0cnVjdG9 JdGVyYXRvcj4KaW5saW5l
IHZvaWQgZGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF lyc3QsIF9Gb3J3YXJkSXRlcmF0b3Ig
X19sYXN0KSB7CiAgX19kZXN0cm95KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmly
c3QpKTsKfQoKaW5s IHZvaWQgZGVzdHJveShjaGFyKiwgY2hhciopIHt9CmlubGluZSB2b2lk
IGRlc3Ryb3kod2NoYXJfdCosIHdjaGFyX3QqKSB7fQoKIyAzMyAiL3Vzci9pbmNsdWRjĀ:rK z
L3ZlY3Rvci RsX3VuaW5pdGlhbGl6ZWQu
aCIgMSAzCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfSjĀ:XR GVyLCBjbGFzc ZXIKX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0
ZXIgX19maXJzdCwjĀ:uc 0SXRlciBfX2x 9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3 VfdHlw
ZSkKewogIHJldHVybiBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Zv cmRJdGVyPgpfRm9yd2FyZEl0ZXIKX191
bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgIC AgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0Z 19jdXIg
PSBfX3Jlc3VsdDsKIHsKICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwg
KytfX2N1cikKICAgICAgY29uc3RydWN0KCYqX19 sICpfX2ZpcnN0KTsKICAgIHJldHVybiBf
X2N1cjsKICB9CjsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2Fy
ZEl0ZXIsIGNsY F9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAg
ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9f
dHlwZV90cmFpdHM8X1RwPjo6aXNfUE9EX3R5cG lzX1BPRDsKICByZXR1cm4gX191bmluaXRp
YWxpemVkX2NvcHlfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9Jc19QT0QoKSk7Cn0K
CnRlbXBsYXRl bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBf
Rm9yd2FyZEl0ZXIKICB1bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2Z 0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0
KQp7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZ 3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1
bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX3Jlc3VsdCkp
Owp9Cgppbmx gY2hhciogdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IGNoYXIqIF9fZmlyc3Qs
IGNvbnN0IGNoYXIqIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIC AgICBjaGFy
KiBfX3Jlc3VsdCkgewogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIF9fbGFzdCAtIF9fZmly
c3QpOwogIHJldHVybiBfX3Jlc3VsdCArIChf c3QgLSBfX2ZpcnN0KTsKfQoKaW5saW5lIHdj
aGFyX3QqCnVuaW5pdGlhbGl6ZWRfY29weShjb25zdCB3Y2hhcl90KiBfX2ZpcnN0LCBjb25zdCB3
Y2hhcl90Ki xhc3QsCiAgICAgICAgICAgICAgICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkKewog
IG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZih3Y2hhcl90KSAqI 2xhc3QgLSBf
X2ZpcnN0KSk7CiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwp9CgoKCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCB zcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVy
PgpwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihf
SW5wdXRJd F9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgjĀ:cH X2l0ZXJh
dG9 fcmVzdWx0OwogewogICAgZm9yICgg
OyBfX2NvdW50ID4gMCA7IC0tX19jb3VudC tfX2ZpcnN0LCArK19fY3VyKQogICAgICBjb25z
dHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgcmV0dXJuIHBhaXI8X0lucHV0SXRlciwgX0Zv
cndhcmRJ PihfX2ZpcnN0LCBfX2N1cik7CiAgfQo7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXR KaW5saW5lIHBh
aXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlf
bihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcjĀ:CB 2l6ZSBfX2Nvd YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICBy
YW5kb21jĀ:jZ zX2l0ZXJhdG9 zdCA9
IF9fZmlyc3QgKyBfX2NvdW50OwogIHJldHVybiBwYWlyPF9SYW5kb21BY2 NJdGVyLCBfRm9y
d2FyZEl0ZXI+KAogICAgICAgICAgICAgICAgIF9fbGFzdCwKICAgICAgICAgICAgICAgICB1bmlu
aXRpYWxpemVkX2NvcHkoX19maXJzdCwg YXN0LCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5l
IHBhaX lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9J
bnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgI CAgICAgICAgX0Zv
cndhcmRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19m
aXJzdCwgX19jb3VudCwgX19yZXN1bHQ gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyL GFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJ
dGVyLCBfRm9yd2FyZEl0ZXI+CnVuaW5pdGlhbGl6ZWRfY29weV9uKF9JjĀ:dE ZXIgX19maXJz gICAgICAgX0ZvcndhcmRJdGVyIF9fcmVz
dWx0KSB7CiAgcmV0dXJuIF9fdW5pbm FsaXplZF9jb3B5X24oX19maXJzdCwgX19jb3VudCwg
X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRl
Z29y X2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg
X1RwPgppbmxpbmUgdm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXg vcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBfVHAmIF9feCwgX190cnVlX3R5c nsKICBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkCl9fdW5pbml0
aWF lZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX1 BfX2ZhbHNlX3R5cGUp
CnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogewogICAgZm9yICggOyBfX2N1ciAh
PSBfX2xhc3Q7ICsrX19jdXIpCiAg IGNvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogIH0KOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9UcDE+Cmlu
bG B2b2lkIF9fdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZjĀ:19 XN0LCBjb25zd cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwMT46
OmlzX1BPRF90eXBlIF9Jc19QT0Q gX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9fZmlyc3Qs
IF9fbGFzdCwgX194LCBfSXNfUE9EKCkpOwoKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
c 2xhc3MgX1RwPgppbmxpbmUgdm9pZCB1bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgjĀ:Rm d2FyZEl0ZXIg gICAgICAgY29uc3QgX1RwJiBfX3gpCnsKICBf
X3VuaW5pdGlhbGl6ZWRfZmlsbC ZpcnN0LCBfX2xhc3QsIF9feCwgX192YWx1ZV90eXBlKF9f
Zmlyc3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwg
jĀ:c3 X1RwPgppbmxp aWxsX25fYXV4
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICA gICAgICAgICAgICAgICAg
ICAgIGNvbnN0IF9UcCYgX194LCBfX3RydWVfdHlwZSkKewogIHJldHVybiBmaWxsX24oX19maXJz
dCwgX19uLCBfX3gpOwp9Cgp0Z GF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6
ZSwgY2xhc3MgX1RwPgpfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0Zv hcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkKewogIF9Gb3 JkSXRlciBfX2N1ciA9IF9f
Zmlyc3Q7CiB7CiAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fY3VyKQogICAgICBjb25z
dHJ1Y3QoJipfX2N1ciwgX194 ICAgIHJldHVybiBfX2N1cjsKICB9CjsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4 5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194LCBfVjĀ:ik wogIHR5cGVkZ aXNfUE9EX3R5cGUgX0lzX1BPRDsKICByZXR1cm4g
X191bmluaXRpYWxpemVkX2Z fbl9hdXgoX19maXJzdCwgX19uLCBfX3gsIF9Jc19QT0QoKSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVH mlubGluZSBfRm9yd2FyZEl0ZXIKdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gpCnsK ZXR1cm4gX191bmluaXRpYWxp
emVkX2ZpbGxfbihfX2ZpcnN0LCBfX24sIF9feCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoj
IDIyOCAiL3Vzci9pbmNsdW crKy0zL3N0bF91bmluaXRpYWxpemVkLmgiIDMKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0ZvcndhcmRJd PgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9jb3B5X2NvcHkoX0lucHV0SXRl
cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiA gICAgICAgICAgICAgICAgICAg
ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgXjĀ:nd mRJdGVyIF9fc dW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7
CiAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBfX21pZCk7
CiAgfQo7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2 l0ZXIsIGNsYXNzIF9UcCwgY2xh
c3MgX0lucHV0SXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9j
b3B5KF9Gb3J3YXJkSXRl X3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICAgICAgICAgICAgICAjĀ:g
9JbnB1dEl0ZX B1bmluaXRpYWxpemVk
X2ZpbGwoX19yZXN1bHQsIF9fbWlkLCBfX3gpOwogewogI mV0dXJuIHVuaW5pdGlhbGl6ZWRf
Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsKICB9CjsKfQoKCgoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIsIGNjĀ:zI Gb3J3YXJkSXR 5pdGlhbGl6ZWRfY29weV9maWxsKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dE Ig
X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIs
IF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IF9U
cCYgX194KQp7CiAgX0ZvcndhcmRJdGVyIF9fbWlkMiA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2Zp
cnN0MSwgX19sYXN0MS 9maXJzdDIpOwogewogICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlk
MiwgX19sYXN0MiwgX194KTsKICB9CjsKfQoKIyAzNCAiL3Vzci9pbmNsdWRlL2crKy0zL 3Rv
ciIgMiAzCgojIDM0ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX3ZlY3Rvci5oIiAxIDMKIyA1MCAi
L3Vzci9pbmNsdWRlL2crKy0zL3N0bF92ZWN0b3IuaCIjĀ:0Z wbGF0ZSA8Y2x 9Jc1N0YXRpYz4KY2xhc3MgX1ZlY3Rvcl9hbGxvY19iYXNl
IHsKcHVibGljOgogI GVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0
b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsjĀ:dG
X3R5cGUgZ2V hdGFfYWxsb2NhdG9yOyB9
CgogIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbG F0b3JfdHlwZSYgX19hKQogICAgOiBf
TV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRf
b2Zfc3RvcmFnZSgw IHt9Cgpwcm90ZWN0ZWQ6CiAgYWxsb2NhdG9yX3R5cGUgX01fZGF0YV9h
bGxvY2F0b3I7CiAgX1RwKiBfTV9zdGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfVHA NX2Vu
ZF9vZl9zdG9yYWdlOwoKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVy
biBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZShfX yB9CiAgdm9pZCBfTV9kZWFsbG9jYXRl
KF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBpZiAoX19wKSBfTV9kYXRhX2FsbG9jYXRvci5k
ZWFsbG9jYXRlKF9 gX19uKTsgfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2NhdG9yPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG B0cnVl
PiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2Nh
dG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAg bG9jYXRvcl90eXBlOwogIGFsbG9jYXRv
cl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9
CgogIF9WZWN0b3jĀ:xs NfYmFzZShjb2 XJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAge30KC 3RlY3Rl
ZDoKICBfVHAqIF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0
b3JhZ2U7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0F jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+
OjpfQWxsb2NfdHlwZSBfQWxsb2NfdHlwZTsKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24p
CiAgICB7IHJld iBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoX19uKTsgfQogIHZvaWQgX01fZGVh
bGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgX0FsbG9jX3R5cGU6jĀ:YW b2Nh
dGUoX19 sIGNsYXNzIF9BbGxvYz4Kc3Ry
dWN0IF9WZWN0b3JfYmFzZQogIDogcHVibGljIF N0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxv
YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxv
Yz46Ol9TX2lu bmNlbGVzcz4KewogIHR5cGVkZWYgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwg
X0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFjĀ:8X wLCBf
QWxsb2 FzZTsKICB0eXBlZGVmIHR5cGVu
YW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhb 2F0b3JfdHlwZTsKCiAgX1ZlY3Rvcl9iYXNl
KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIF9WZWN0b3JfYmFz
ZShzaXplX3Q uLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkgewog
ICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZmluaXNoID 1fc3RhcnQ7
CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogIH0KCiAgfl9WZWN0b3Jf
YmFzZSgpIHsgX01fZGVhbGxvY2F0ZShfTV9zjĀ:dC X01fZW5kX29m yICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX3ZlY3Rvci5oIiAzCnRl
bXBsYXRlIDjĀ:Fz BfVHAsIGNsYX Mg
dmVjdG9yIDogcHJvdGVjdGVkIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4Ke ml2YXRlOgog
IHR5cGVkZWYgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPiBfQmFzZTsKcHVibGljOgogIHR5cGVk
ZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWR 2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5cGVk
ZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZhbHVlX3R5cGUq
IGl0ZXJhd wogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfaXRlcmF0b3I7CiAg
dHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25z YWx1ZV90eXBl
JiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYg
cHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZT AgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxs
b2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRv
cigpIGNvjĀ:IH cmV0dXJuIF9C ZWYg
cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJ pdGVyYXRvcjsK
ICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgoK
CgoKCgpwcm90ZWN0ZWQ6CgogIHVzaW5nIjĀ:XN jpfTV9hbGxvY ZTsKICB1c2luZyBfQmFzZTo6X01fc3RhcnQ7CiAgdXNpbmcgX0Jhc2U6
Ol9NX2Z zaDsKICB1c2luZyBfQmFzZTo6X01fZW5kX29mX3N0b3JhZ2U7CgoKcHJvdGVjdGVk
OgogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLC 5zdCBfVHAmIF9f
eCk7CiAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24pOwoKcHVibGljOgog
IGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1jĀ:X0 c3RhcnQ7IH0K gcmV0dXJuIF9NX3N0YXJ0OyB9CiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1
cm4gX0jĀ:lu NoOyB9CiAgY2 4gX01f
ZmluaXNoOyB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkKICAgIjĀ:mV XJuIHJldmVy
ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBj
b25zdAogICAgeyByZXR1cm4gY29uc3R 2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICByZXZl
cnNlX2l0ZXJhdG9yIHJlbmQoKQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigp
KTsgf GNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0CiAgICB7IHJldHVybiBj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CgogIHNpemVfjĀ:ZS aXplKCkgY29u tIGJlZ2luKCkpOyB9CiAgc2l6ZV90eXBl
IG1heF9zaXplKCkgY29uc3QKICAgIH V0dXJuIHNpemVfdHlwZSgtMSkgLyBzaXplb2YoX1Rw
KTsgfQogIHNpemVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUo
X01fjĀ:X2 X3N0b3JhZ2Ug dAogICAg
eyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQoKICByZWZlcmVuY2U lcmF0b3JbXShzaXpl
X3R5cGUgX19uKSB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CiAgY29uc3RfcmVmZXJlbmNl
IG9wZXJhdG9yW10oc2l6ZV90eXBlI ikgY29uc3QgeyByZXR1cm4gKihiZWdpbigpICsgX19u
KTsgfQoKICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9j
YXRjĀ:0e lKCkpCiAgICA wZSBfX24s
IGNvbnN0IF9UcCYgX192YWx1ZSwKICAgICAgICAgY29uc3QgYWxsb2 9yX3R5cGUmIF9fYSA9
IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fbiwgX19hKQogICAgeyBfTV9maW5pc2gg
PSB1bmluaXRpYWxpemVkX2ZpbGxf TV9zdGFydCwgX19uLCBfX3ZhbHVlKTsgfQoKICBleHBs
aWNpdCB2ZWN0b3Ioc2l6ZV90eXBlIF9fbikKICAgIDogX0Jhc2UoX19uLCBhbGxvY2F0b3JfdHlw
ZS ogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19u
LCBfVHAoKSk7IH0KCiAgdmVjdG9yKGNvbnN0IHZlY3RvcjxfVHAsIjĀ:Gx z4mIF9feCkKI bGxvY2F0b3IoKSkKICAgIHsgX01fZmluaXNo
ID0gdW5pbml0aWFsaXplZF9jb3B feC5iZWdpbigpLCBfX3guZW5kKCksIF9NX3N0YXJ0KTsg
fQoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2ZWN0b3IoX0lucHV0SXRl
c 3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICBjb25zdCBhbGxv
Y2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfjĀ:ZS X2EpIHsKICAg ucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0lu
dGVncmFsOwogICAgX01faW5pdG l6ZV9hdXgoX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwo
KSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbml0aWFsaXpl
jĀ:eC SW50ZWdlciBf KSB7CiAgICBf
TV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9lbmR fc3RvcmFnZSA9IF9NX3N0
YXJ0ICsgX19uOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQs
IF9fbiwgX192YWx1ZSk7CiAgf CB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAg
dm9pZCBfTV9pbml0aWFsaXplX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy vciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAg
IF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0LC l0ZXJhdG9yX2NhdGVnb3J5
KF9fZmlyc3QpKTsKICB9CgoKCgoKCgoKICB+dmVjdG9yKCkgeyBkZXN0cm95KF9NX3N0YXJ0LCBf
TV9maW5pc2gpOyB9CgogIHZl cjxfVHAsIF9BbGxvYz4mIG9wZXJhdG9yPShjb25zdCB2ZWN0
b3I8X1RwLCBfQWxsb2M+JiBfX3gpOwogIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7CiA BpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6
ZSA9IHNpemUoKTsKICAgICAgaXRlcmF0b3IgX190bXAgPSBfTjĀ:Gx 2F0ZV9hbmRfY ICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5p
c2gpOwogICAgICBfTV9kZWFjĀ:jY lKF9NX3N0YXJ sKICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgX01fZmluaXNoID0gX190bX yBfX29sZF9zaXplOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwog
ICAgfQogIH0KCgoKCgoKICB2b2lkIGFzc2lnbihzaXplX3R5jĀ:X1 LCBjb25zdCBf gX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBhc3NpZ24o
X0lucHV0SXRlcmF0b3IgX1 JzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9Jb Z3JhbDsKICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgp
KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4 2b2lkIF9NX2Fzc2lnbl9kaXNw
YXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgIHsgYXNz
aWduKChzaXplX3R5cGUpI iwgKF9UcCkgX192YWwpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJz
X0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgIHsgX01fYXNzaWduX2F1eChfX2Zp
cnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX1 JzdCkpOyB9CgogIHRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0lu SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBp
bnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXR K
ICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIjĀ:m9 2FyZF9pdGVyY IHsgcmV0dXJuICpiZWdpbigpOyB9CiAgY29uc3RfcmVm
ZXJlbmNlIGZyb250KCk uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KICByZWZlcmVuY2UgYmFj
aygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKC 9u
c3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CgogIHZvaWQgcHVzaF9iYWNrKGNvbnN0IF9UcCYg
X194KSB7CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2Vu Zl9zdG9yYWdlKSB7CiAgICAgIGNv
bnN0cnVjdChfTV9maW5pc2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxz
ZQogICAgICBfTV9pbn RfYXV4KGVuZCgpLCBfX3gpOwogIH0KICB2b2lkIHB1c2hfYmFjaygp
IHsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgYjĀ:3R dWN0KF9NX2Zp ICAgZWxzZQogICAgICBf
TV9pbnNlcnRfYXV4KGVuZCgpKTsKICB9CiAgdm9pZCBjĀ:wK lY3RvcjxfVHA QsIF9feC5fTV9zdGFydCk7Cjo6c3dhcChfTV9maW5pc2gs
IF9feC5fTV9maW5pc wo6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9lbmRfb2Zf
c3RvcmFnZSk7CiAgfQoKICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlv Y29u
c3QgX1RwJiBfX3gpIHsKICAgIHNpemVfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsK
ICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3 JhZ2UgJiYgX19wb3NpdGlvbiA9PSBl
bmQoKSkgewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwogICAgICArK19NX2Zpbmlz
aDsKICAgIH0KICAg c2UKICAgICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBfX3gpOwog
ICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGV vciBf
X3Bvc2l0aW9uKSB7CiAgICBzaXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAg
ICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdjĀ:Wd CYmIF9fcG9za KF9NX2ZpbmlzaCk7CiAgICAgICsrX01fZmluaXNoOwogICAg
fQogICAgZWxzZQojĀ:gI fTV9pbnNlcnR luKCkgKyBfX247CiAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG ogIHZv
aWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgjĀ:ZW bWUgX0lzX2lu gX0ludGVncmFsOwogICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9f
cG9zLCBfX2ZpcnjĀ:Bf xhc3QsIF9Jbn yBfSW50ZWdlcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX ywgX0lu
dGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Ry
dWVfdHlwZSkgewogICAgaW5zZXJ0KF9fcG9zLCA 6ZV90eXBlKSBfX24sIChfVHApIF9fdmFs
KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2Vy
dF9kaXNwYXRja GVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAg ICAgICAg
ICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbnNlcnQoX19wb3MsIF9f
Zmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYX 9yeShfX2ZpcnN0KSk7CiAgfQoKCgoKCiAg
dm9pZCBpbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9f
eCk7CgogIHZvjĀ:cG X2JhY2soKSB7
ZmluaXNoKTsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGl gewogICAg
aWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQogICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBf
TV9maW5pc2gsIF9fcG9zaXRpb24pOwogICAgL V9maW5pc2g7CiAgICBkZXN0cm95KF9NX2Zp
bmlzaCk7CiAgICByZXR1cm4gX19wb3NpdGlvbjsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0
b3IgX19maXJ gaXRlcmF0b3IgX19sYXN0KSB7CiAgICBpdGVyYXRvciBfX2kgPSBjb3B5KF9f
bGFzdCwgX01fZmluaXNoLCBfX2ZpcnN0KTsKICAgIGRlc3Ryb3koX19pLCBfTV 5pc2gpOwog
ICAgX01fZmluaXNoID0gX01fZmluaXNoIC0gKF9fbGFzdCAtIF9fZmlyc3QpOwogICAgcmV0dXJu
IF9fZmlyc3Q7CiAgfQoKICB2b2lkIHJlc2l6 aXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3Qg
X1RwJiBfX3gpIHsKICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKQogICAgICBlcmFzZShiZWdp
bigpICsgX1 dfc2l6ZSwgZW5kKCkpOwogICAgZWxzZQogICAgICBpbnNlcnQoZW5kKCksIF9f
bmV3X3NpemUgLSBzaXplKCksIF9feCk7CiAgfQogIHZvaWQgcmVzaXplKHNpe HlwZSBfX25l
d19zaXplKSB7IHJlc2l6ZShfX25ld19zaXplLCBfVHAoKSk7IH0KICB2b2lkIGNsZWFyKCkgeyBl
cmFzZShiZWdpbigpLCBlbmQoKSk7IH0KCnBjĀ:lY lZDoKCgogIHR ogIGl0ZXJhdG9yIF9NX2FsbG9jYXRlX2FuZF9jb3B5KHNpemVfdHlw
ZSBfX24sI 3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzjĀ:ew ICAgaXRl
cmF gewogICAgICB1bmluaXRpYWxpemVk
X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3 VsdCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsK
ICAgIH0KOwogIH0KIyA0NDQgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfdmVjdG9yLmgiIDMKICB0
ZW1wbGF0 Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbml0aWFsaXpl
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAjĀ:gI gIF9JbnB1
dE FnKQogIHsKICAgIGZvciAoIDsgX19m
aXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzd CAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKICB9
CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2lu
aXRpYWx oX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgZm9yd2FyZF9pdGVyYX 90YWcpCiAgewog
ICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7
CiAgICBfTV9zdGFydCA9IF9NX2FsbG9jjĀ:KF bik7CiAgICBf uOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmly
c3QsIF FzdCwgX01fc3RhcnQpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogIHZvaWQgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zL CAgICAgICAgICAg
ICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICBjĀ:1d pdGVyYXRvcl9 RJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBf
X3Bvc CAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9G
b3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgjĀ:IG cndhcmRfaXRl zIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxp
bmUgYm9vbApvcGVyYXRvcj09KGNvbn ZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3Qg
dmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIF9feC5zaXplKCkgPT0gX195LnNp
emUo JgogICAgICAgICBlcXVhbChfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfX3kuYmVnaW4o
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4jĀ:sa lIGJvb2wKb3B 4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwg
X0FsbG9jPiYgX195KQp7CiAgcmV0d GxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdp
bigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdp
bigjĀ:fX uZW5kKCkpOwp BbGxvYz4K
aW5saW5lIHZvaWQgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3 ZlY3RvcjxfVHAsIF9B
bGxvYz4mIF9feSkKewogIF9feC5zd2FwKF9feSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0FsbG9jPgp2ZWN0b3I8 LF9BbGxvYz4mCnZlY3RvcjxfVHAsX0FsbG9jPjo6b3Bl
cmF0b3I9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkKewogIGlmICgmX194ICE9IHRo
aXjĀ:sK AgIGNvbnN0IH AgaWYgKF9f
eGxlbiA+IGNhcGFjaXR5KCkpIHsKICAgICAgaXRlcmF0b3IgX190bjĀ:SB V9hbGxvY2F0Z X3guZW5kKCkpOwogICAgICBkZXN0cm95KF9N
X3N0YXJ0LCBfTV9maW5pc2gpOwojĀ:gI fTV9kZWFsbG9 AtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgX01f
Z 29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9feGxlbjsKICAgIH0KICAgIGVsc2UgaWYgKHNp
emUoKSA+PSBfX3hsZW4pIHsKICAgICAgaXRlcmF0b3IgX19pID0g eShfX3guYmVnaW4oKSwg
X194LmVuZCgpLCBiZWdpbigpKTsKICAgICAgZGVzdHJveShfX2ksIF9NX2ZpbmlzaCk7CiAgICB9
CiAgICBlbHNlIHsKICAgICAgY2 hfX3guYmVnaW4oKSwgX194LmJlZ2luKCkgKyBzaXplKCks
IF9NX3N0YXJ0KTsKICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigpICsgc2l6ZSgp
X3guZW5kKCksIF9NX2ZpbmlzaCk7CiAgICB9CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydCAr
IF9feGxlbjsKICB9CiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF 8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6YXNzaWduKHNpemVfdCBfX24sIGNv
bnN0IHZhbHVlX3R5cGUmIF9fd SB7CiAgaWYgKF9fbiA+IGNhcGFjaXR5KCkpIHsKICAgIHZl
Y3RvcjxfVHAsIF9BbGxvYz4gX190bXAoX19uLCBfX3ZhbCwgZ2V0X2FsbG9jYXRvcigpKTsKICAgjĀ:fd wLnN3YXAoKnR pIHsKICAgIGZp
bGwoYmVnaW4oKSwgZW5kKCksIF9fdmFsKTsKICAgIF9NX2Zpbm A9IHVuaW5pdGlhbGl6ZWRf
ZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gc2l6ZSgpLCBfX3ZhbCk7CiAgfQogIGVsc2UKICAgIGVy
YXNlKGZpbGxfbihiZWdpbigpjĀ:X2 IF9fdmFsKSwg sIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CnZvaWQ VjdG9yPF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIjĀ:CA CAgICAgICAgI cmF0b3IgX19jdXIgPSBiZWdpbigpOwogIGZvciAo
IDsgX19maXJzdCAhPSBfX2x gJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJz
dCkKICAgICpfX2N1ciA9ICpfX2ZpcnN0OwogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIG XNlKF9fY3VyLCBlbmQoKSk7CiAgZWxzZQogICAgaW5zZXJ0KGVuZCgpLCBfX2ZpcnN0LCBfX2xh
c3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf b2M+IHRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXI+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2F1eChf
Rm9yd2FyZEl0ZXIgX19maX wgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogIHNpemVfdHlwZ X2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CgogIGlmIChfX2xl
biA+IGNhcGFjaXR5KCkpIHsKICAgIGl0ZXJhdG9yIF9fdG1jĀ:gX fYWxsb2NhdGV k7CiAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5p
c2gpOwogICAgX01fZGVhb 2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z
dGFydCk7CiAgICBfTV9zdGFydCA9IF9fdG1wOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBf
aW5pc2ggPSBfTV9zdGFydCArIF9fbGVuOwogIH0KICBlbHNlIGlmIChzaXplKCkgPj0gX19sZW4p
IHsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IGNvcH 9maXJzdCwgX19sYXN0LCBfTV9z
dGFydCk7CiAgICBkZXN0cm95KF9fbmV3X2ZpbmlzaCwgX01fZmluaXNoKTsKICAgIF9NX2Zpbmlz
aCA9IF9fbmV3X2ZpbmlzjĀ:IC CiAgZWxzZSB7 0OwogICAgYWR2YW5jZShfX21pZCwgc2l6ZSgpKTsKICAgIGNvcHkoX19maXJzdCwjĀ:t
QsIF9NX3N0YX RfY29weShfX21pZCwg
X19sYXN0LCBfTV9maW5pc2gpOwogIH0KfQoKCgp0ZW1wb SA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBf
X3Bvc2l0aW9uLCBjb25 fVHAmIF9feCkKewogIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29m
X3N0b3JhZ2UpIHsKICAgIGNvbnN0cnVjdChfTV9maW5pc2gsICooX01fZmluaXNoIC0gMS og
ICAgKytfTV9maW5pc2g7CiAgICBfVHAgX194X2NvcHkgPSBfX3g7CiAgICBjb3B5X2JhY2t3YXJk
KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCAtIDIsIF9NX2Zp aCAtIDEpOwogICAgKl9fcG9zaXRp
b24gPSBfX3hfY29weTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6
ZSA9IHNpemUoKTsKIC NvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/
IDIgKiBfX29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fY 2Nh
dGUoX19sZW4pOwogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gX19uZXdfc3RhcnQ7CiB7CiAg
ICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRjĀ:we fTV9zdGFydCw Bjb25zdHJ1Y3QoX19uZXdfZmluaXNoLCBfX3gpOwogICAg
ICArK19fbmV3X2Zpb DsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5
KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX19uZXdfZmluaXNoKTsKICAgIH0KCjsKICAg c3Ry
b3koYmVnaW4oKSwgZW5kKCkpOwogICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29m
X3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICBfTV9zdG A9IF9fbmV3X3N0YXJ0OwogICAgX01f
ZmluaXNoID0gX19uZXdfZmluaXNoOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFy
dCArIF9fbGVuOwogjĀ:fQ dGVtcGxhdGUg lY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3N vbikK
ewogIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgIGNvbnN0cnVjdChf
TV9maW5pc2gsICooX01fZmluaXNoIC0gMSkpOwogI ytfTV9maW5pc2g7CiAgICBjb3B5X2Jh
Y2t3YXJkKF9fcG9zaXRpb24sIF9NX2ZpbmlzaCAtIDIsIF9NX2ZpbmlzaCAtIDEpOwogICAgKl9f
cG9zaXRpb24gPSB oKTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRf
c2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3 UgIT0g
MCA/IDIgKiBfX29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fYWxs
b2NhdGUoX19sZW4pOwogICAgaXRlcmF0b3IgX19ujĀ:Zm aXNoID0gX19u 9IHVuaW5pdGlhbGl6ZWRfY29weShfTV9zdGFydCwgX19wb3Np
dGlvbiwgX19uZX RhcnQpOwogICAgICBjb25zdHJ1Y3QoX19uZXdfZmluaXNoKTsKICAgICAg
KytfX25ld19maW5pc2g7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZjĀ:29 Shf
X3Bvc2l0 ICB9Cgo7CiAgICBkZXN0cm95
KGJlZ2luKCksIGVuZCgpKTsKICAgIF9NX2RlYWxjĀ:hd oX01fc3RhcnQ ogICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsKICAgIF9NX2Zp
bmlzaCA9IF9fbjĀ:2Z mlzaDsKICAgI KyBfX2xlbjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvjĀ:dm ZCB2
ZWN0b3I wb3NpdGlvbiwgc2l6ZV90eXBl
IF9fbiwKICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgY29uc3QgX1RwJiBfX3gpCnsK
ICBpZiAoX19uICE9IDApIHsKICAgIGlmIChzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBf
TV9maW5pc2gp IF9fbikgewogICAgICBfVHAgX194X2NvcHkgPSBfX3g7CiAgICAgIGNvbnN0
IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVyID0gX01fZmluaXNoIC0gX19wb3NpdGl KICAgICAg
aXRlcmF0b3IgX19vbGRfZmluaXNoID0gX01fZmluaXNoOwogICAgICBpZiAoX19lbGVtc19hZnRl
ciA+IF9fbikgewogICAgICAgIHVuaW5pdGlhbjĀ:WR 29weShfTV9ma KTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNv
cHlfYmFja3djĀ:oX wb3NpdGlvbiw p
OwogICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIF9fbiwgX1 NvcHkpOwog
ICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2Zpbmlz
aCwgX19uIC0gX19lbGVtc19hZnRlciwgX194jĀ:cH OwogICAgICAg yOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9u
LCBfX29sZF 5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNf
YWZ0ZXI7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIjĀ:F9 3B5KTsK
ICAg IHNpemVfdHlwZSBfX29sZF9zaXpl
ID0gc2l6ZSgpOwogICAgICBjb25zdCBzaXpjĀ:5c gX19sZW4gPSB k7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2Nh
dGUoX19sZ wogICAgICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBfX25ld19zdGFydDsKIHsK
ICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX01f cnQsIF9fcG9z
aXRpb24sIF9fbmV3X3N0YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVk
X2ZpbGxfbihfX25ld19maW5pc2gsIF9fbi 94KTsKICAgICAgICBfX25ld19maW5pc2gKICAg
ICAgICAgID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX19uZXdf
ZmluaXNo ICAgICAgfQoKOwogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwog
ICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmF tIF9NX3N0YXJ0
KTsKICAgICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsKICAgICAgX01fZmluaXNoID0gX19uZXdf
ZmluaXNoOwogICAgICBfTV9lbmRfb2ZfcjĀ:mF SA9IF9fbmV3X bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUg
PGNsYXNjĀ:Jb 1dEl0ZXJhdG9 hbmdl
X2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyYXRvciBf c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0Oy 9fZmlyc3QpIHsKICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAg
ICArK19fcG9zOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhcjĀ:0F G9jPiB0ZW1w
ZAp2ZWN0b3I8X1RwLCBfQWxsb2M+Ojpf
TV9yYW5nZV9pbnNlcnQoaXRlcmF0b3I wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgI CAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRv YWcpCnsKICBpZiAo
X19maXJzdCAhPSBfX2xhc3QpIHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFuY2Uo
X19maXJzdCwgX19sYXN0LCBfX24pOw AgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFn
ZSAtIF9NX2ZpbmlzaCkgPj0gX19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2Fm
dGVyjĀ:X0 ZmluaXNoIC0g ZmluaXNo
ID0gX01fZmluaXNoOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9 gewogICAgICAgIHVu
aW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsK
ICAgICAgICBfTV9maW5pc2ggKz0gXjĀ:wo CAgICAgIGNvc aXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgIGNvcHkoX19maXJz
dCwjĀ:sY 0LCBfX3Bvc2l gICBfRm9y
d2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgICBhZH NlKF9fbWlkLCBfX2Vs
ZW1zX2FmdGVyKTsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01f
ZmluaXNo zdGFydCk7CiAgICAgIF9 0YXJ0ID0gX19uZXdfc3Rh
cnQ7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgICAgX01fZW5kX29mX3N0b3Jh
Z2UgPSBfX25ld19zdGFydCArIjĀ:GV wogICAgfQogI dGxfdmVjdG9yLmgiIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2crKy0zL3ZlY3RvciIg zCgojIDM0ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2J2ZWN0b3IuaCIgMSAzCgoKc3RhdGlj
IGNvbnN0IGludCBfX1dPUkRfQklUID0gaW50KDgqc2l6ZW9mKH lnbmVkIGludCkpOwoKCgoK
CgpzdHJ1Y3QgX0JpdF9yZWZlcmVuY2UgewogIHVuc2lnbmVkIGludCogX01fcDsKICB1bnNpZ25l
ZCBpbnQgX01fbWFzazsKICBf X3JlZmVyZW5jZSh1bnNpZ25lZCBpbnQqIF9feCwgdW5zaWdu
ZWQgaW50IF9feSkKICAgIDogX01fcChfX3gpLCBfTV9tYXNrKF9feSkge30KCnB1YmxpYzoKICB l0X3JlZmVyZW5jZSgpIDogX01fcCgwKSwgX01fbWFzaygwKSB7fQogIG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiAhKCEoKl9NX3AgJiBfTV9tYXNrK H0KICBfQml0X3JlZmVyZW5j
ZSYgb3BlcmF0b3I9KGJvb2wgX194KQogIHsKICAgIGlmIChfX3gpICpfTV9wIHw9IF9NX21hc2s7
CiAgICBlbHNlICpfTV9wICYjĀ:fT tYXNrOwogICA 5jZSYgb3BlcmF0b3I9KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpCiAgICB7IH HVybiAqdGhpcyA9IGJvb2woX194KTsgfQogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfQml0X3Jl
ZmVyZW5jZSYgX194KSBjb25zdAogICAgeyByZXR1cm4gYm9vjĀ:dG cykgPT0gYm9v gX0JpdF9yZWZlcmVuY2UmIF9feCkgY29uc3Qgewog
ICAgcmV0dXJuICFib29sKC lzKSAmJiBib29sKF9feCk7CiAgfQogIHZvaWQgZmxpcCgpIHsg
Kl9NX3AgXj0gX01fbWFzazsgfQp9OwoKaW5saW5lIHZvaWQgc3dhcChfQml0X3JlZmVyZW5jZ X3gsIF9CaXRfcmVmZXJlbmNlIF9feSkKewogIGJvb2wgX190bXAgPSBfX3g7CiAgX194ID0gX195
OwogIF9feSA9IF9fdG1wOwp9CgpzdHJ1Y3QgX0JpdF9pdGV vciA6IHB1YmxpYyByYW5kb21f
YWNjZXNzX2l0ZXJhdG9yPGJvb2wsIHB0cmRpZmZfdD4gewogIHR5cGVkZWYgX0JpdF9yZWZlcmVu
Y2UgcmVmZXJlbmNlOwogI GVkZWYgX0JpdF9yZWZlcmVuY2UqIHBvaW50ZXI7CiAgdHlwZWRl
ZiBfQml0X2l0ZXJhdG9yIGl0ZXJhdG9yOwoKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAgdW5z
ZWQgaW50IF9NX29mZnNldDsKICB2b2lkIGJ1bXBfdXAoKSB7CiAgICBpZiAoX01fb2Zmc2V0Kysg
PT0gX19XT1JEX0JJVCAtIDEpIHsKICAgICAgX01fb2Zmc2jĀ:0g sKICAgICAgKy igpIHsKICAgIGlmIChfTV9vZmZzZXQtLSA9PSAwKSB7
CiAgICAgIF9NX29mZnNl IF9fV09SRF9CSVQgLSAxOwogICAgICAtLV9NX3A7CiAgICB9CiAg
fQoKICBfQml0X2l0ZXJhdG9yKCkgOiBfTV9wKDApLCBfTV9vZmZzZXQoMCkge30KICBfQml 0
ZXJhdG9yKHVuc2lnbmVkIGludCogX194LCB1bnNpZ25lZCBpbnQgX195KQogICAgOiBfTV9wKF9f
eCksIF9NX29mZnNldChfX3kpIHt9CiAgcmVmZXJlbmNlI XJhdG9yKigpIGNvbnN0IHsgcmV0
dXJuIHJlZmVyZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQpOyB9CiAgaXRlcmF0b3ImIG9wZXJh
dG9yKysoKSB7CiAgICB wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9y
IG9wZXJhdG9yKysoaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgYn 91
cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3ItLSgpIHsKICAg
IGJ1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwog ICBpdGVyYXRvciBvcGVyYXRvci0t
KGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIGJ1bXBfZG93bigpOwogICAg
cmV0dXJuIF9fdG1wOw 0KICBpdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUg
X19pKSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19pICsgX01fb2Zmc2V0OwogI 01f
cCArPSBfX24gLyBfX1dPUkRfQklUOwogICAgX19uID0gX19uICUgX19XT1JEX0JJVDsKICAgIGlm
IChfX24gPCAwKSB7CiAgICAgIF9NX29mZnNldCA9IChjĀ:pZ lZCBpbnQpIF9 AgIH0gZWxzZQogICAgICBfTV9vZmZzZXQgPSAodW5zaWdu
ZWQgaW50KSBfX247C CByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRvci09
KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0aGlzICs9IC1fX2k7CiAgICByZXR1jĀ:Kn
aXM7CiAgfQo 5cGUgX19pKSBjb25zdCB7
CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogIC V0dXJuIF9fdG1wICs9IF9faTsKICB9
CiAgaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGl0
ZXJhdG9yIF9fdG1w KnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0gX19pOwogIH0KICBkaWZm
ZXJlbmNlX3R5cGUgb3BlcmF0b3ItKGl0ZXJhdG9yIF9feCkgY29uc3QgewogICAgcmV uIF9f
V09SRF9CSVQgKiAoX01fcCAtIF9feC5fTV9wKSArIF9NX29mZnNldCAtIF9feC5fTV9vZmZzZXQ7
CiAgfQogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZjĀ:mV 2VfdHlwZSBfX Ym9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBfX3gp
IGNvbnN0IHsKICA ldHVybiBfTV9wID09IF9feC5fTV9wICYmIF9NX29mZnNldCA9PSBfX3gu
X01fb2Zmc2V0OwogIH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIF kgY29u
c3QgewogICAgcmV0dXJuIF9NX3AgIT0gX194Ll9NX3AgfHwgX01fb2Zmc2V0ICE9IF9feC5fTV9v
ZmZzZXQ7CiAgfQogIGJvb2wgb3BlcmF0b3I8KGl0 dG9yIF9feCkgY29uc3QgewogICAgcmV0
dXJuIF9NX3AgPCBfX3guX01fcCB8fCAoX01fcCA9PSBfX3guX01fcCAmJiBfTV9vZmZzZXQgPCBf
X3guX01fb2Zmc2 sKICB9Cn07CgpzdHJ1Y3QgX0JpdF9jb25zdF9pdGVyYXRvcgogIDogcHVi
bGljIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3I8Ym9vbCwgcHRyZGlmZl90Pgp7CiAgd WRlZiBi
b29sIHJlZmVyZW5jZTsKICB0eXBlZGVmIGJvb2wgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYg
Y29uc3QgYm9vbCogcG9pbnRlcjsKICB0eXBlZGV CaXRfY29uc3RfaXRlcmF0b3IgY29uc3Rf
aXRlcmF0b3I7CgogIHVuc2lnbmVkIGludCogX01fcDsKICB1bnNpZ25lZCBpbnQgX01fb2Zmc2V0
OwogIHZvaWQgY F91cCgpIHsKICAgIGlmIChfTV9vZmZzZXQrKyA9PSBfX1dPUkRfQklUIC0g
MSkgewogICAgICBfTV9vZmZzZXQgPSAwOwogICAgICArK19NX3A7CiAgICB9CiAg IHZvaWQg
YnVtcF9kb3duKCkgewogICAgaWYgKF9NX29mZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0
ID0gX19XT1JEX0JJVCAtIDE7CiAgICAgIC0tX0 sKICAgIH0KICB9CgogIF9CaXRfY29uc3Rf
aXRlcmF0b3IoKSA6IF9NX3AoMCksIF9NX29mZnNldCgwKSB7fQogIF9CaXRfY29uc3RfaXRlcmF0
b3IodW5zaWdu aW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9NX3AoX194KSwg
X01fb2Zmc2V0KF9feSkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9yKGNvbnN0IF9 faXRlcmF0
b3ImIF9feCkKICAgIDogX01fcChfX3guX01fcCksIF9NX29mZnNldChfX3guX01fb2Zmc2V0KSB7
fQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvc SBjb25zdCB7CiAgICByZXR1cm4gX0JpdF9y
ZWZlcmVuY2UoX01fcCwgMVUgPDwgX01fb2Zmc2V0KTsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9w
ZXJhdG9yKys 7CiAgICBidW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0
X2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBjb25zdF9pdGVyYXRvci RtcCA9ICp0
aGlzOwogICAgYnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBjb25zdF9pdGVyYXRv
ciYgb3BlcmF0b3ItLSgpIHsKICAgIGJ1bXBf bigpOwogICAgcmV0dXJuICp0aGlzOwogIH0K
ICBjb25zdF9pdGVyYXRvciBvcGVyYXRvci0tKGludCkgewogICAgY29uc3RfaXRlcmF0b3IgX190
bXAgPSAqdG sKICAgIGJ1bXBfZG93bigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBjb25z
dF9pdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CjĀ:CB WZmZXJl
bmNl X01fcCArPSBfX24gLyBfX1dPUkRf
QklUOwogICAgX19uID0gX19uICUgX19XT1JjĀ:JV KICAgIGlmICh NpZ25lZCBpbnQpIF9fbiArIF9fV09SRF9CSVQ7CiAgICAgIC0tX01f
cDsKICAgI WxzZQogICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX247CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvci09jĀ:Zm cmVuY2Vf
dHl yZXR1cm4gKnRoaXM7CiAgfQogIGNv
bnN0X2l0ZXJhdG9yIG9wZXJhdG9yKyhkaW JlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBj
b25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wICs9IF9faTsKICB9
CiAgY29u aXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsK
ICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4 0bXAgLT0gX19p
OwogIH0KICBkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3ItKGNvbnN0X2l0ZXJhdG9yIF9feCkgY29u
c3QgewogICAgcmV0dXJuIF9fV09SRF9CS iAoX01fcCAtIF9feC5fTV9wKSArIF9NX29mZnNl
dCAtIF9feC5fTV9vZmZzZXQ7CiAgfQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZl
cmVuY2V wZSBfX2kpIHsKICAgIHJldHVybiAqKCp0aGlzICsgX19pKTsKICB9CiAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX3gpIGNvbnN0IH AgIHJldHVybiBf
TV9wID09IF9feC5fTV9wICYmIF9NX29mZnNldCA9PSBfX3guX01fb2Zmc2V0OwogIH0KICBib29s
IG9wZXJhdG9yIT0oY29uc3QgY29uc3Rf cmF0b3ImIF9feCkgY29uc3QgewogICAgcmV0dXJu
IF9NX3AgIT0gX194Ll9NX3AgfHwgX01fb2Zmc2V0ICE9IF9feC5fTV9vZmZzZXQ7CiAgfQogIGJv
b2wgb3jĀ:F0 I8KGNvbnN0X2 9NX3Ag
PCBfX3guX01fcCB8fCAoX01fcCA9PSBfX3guX01fcCAmJiBfTV9vZmZzZ CBfX3guX01fb2Zm
c2V0KTsKICB9Cn07CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfX2lz
X3N0YXRpYz4KY2xhc3MgX0J2ZWN0b3J sb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5
cGVuYW1lIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAg
ICAgI CBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkg
Y29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX0J2 b3JfYWxsb2NfYmFz
ZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihfX2Ep
LCBfTV9zdGFydCgpLCBfTV9maW5pc2 wgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3Rl
Y3RlZDoKICB1bnNpZ25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKQogICAgeyByZXR1
cm4g ZGF0YV9hbGxvY2F0b3IuYWxsb2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dP
UkRfQklUKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZSgpIHsKICAgIGl fTV9zdGFydC5fTV9w
KQogICAgICBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIjĀ:CA CAgX01fZW5kX CgogIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQgaW50LCBfQWxs
b2N yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIF9NX2RhdGFfYWxsb2NhdG9yOwogIF9C
aXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV 5pc2g7CiAgdW5zaWdu
ZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFnZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRv
cj4KY2xhc3MgX0J2ZWN0b3JfYWxs YmFzZTxfQWxsb2NhdG9yLCB0cnVlPiB7CnB1YmxpYzoK
ICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9j
YX 90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRf
YWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5c TsgfQoKICBfQnZlY3Rv
cl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3RhcnQoKSwgX01f
ZmluaXNoKCksIF9NX2VuZF9vZl9jĀ:yY lKDApIHt9Cgp xsb2NfdHJhaXRzPHVuc2lnbmVkIGludCwgX0FsbG9jYXRvcj46Ol9BbGxvY190
e iAgICAgICAgICBfQWxsb2NfdHlwZTsKCiAgdW5zaWduZWQgaW50KiBfTV9iaXRfYWxsb2Mo
c2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphjĀ:Y2 ZSgoX19uICsg gdm9pZCBfTV9kZWFsbG9jYXRlKCkgewogICAg
aWYgKF9NX3N0YXJ0Ll9NX3ApCijĀ:Ag 9BbGxvY190eX CAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0g
c3RhcnQuX01fcCk7CiAgfQoKICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0OwogIF9CaXRfaXRl
cmF0b3IgX01fZmluaXNoOwogIHVuc2lnbmVkIGludCogX01fZW5 mX3N0b3JhZ2U7Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfQnZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX0J2
ZWN0b3JfYWxsb2NfYmFzZTxfQjĀ:2M iAgICAgICAgI aXRzPGJvb2wsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYg 2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdG VsZXNzPgogICAgICAgICAg
X0Jhc2U7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBh
bGxvY2F0b3JfdHlwZTsKCiAg ZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19h
KSA6IF9CYXNlKF9fYSkge30KICB+X0J2ZWN0b3JfYmFzZSgpIHsgX0Jhc2U6Ol9NX2RlYWxsb2N UoKTsgfQp9OwoKIyAzNjQgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfYnZlY3Rvci5oIiAzCgoK
CnRlbXBsYXRlPGNsYXNzIF9BbGxvYz4gY2xhc3MgdmVjdG9yP 2wsX0FsbG9jPgogIDogcHVi
bGljIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPgoKCgoKewoKICB0eXBlZGVmIF9CdmVjdG9yX2Jhc2U8
X0FsbG9jPiBfQmFzZTsKCgo ibGljOgogIHR5cGVkZWYgYm9vbCB2YWx1ZV90eXBlOwogIHR5
cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3 GU7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiBib29sIGNv
bnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9CaXRfcmVmZXJljĀ:Ki b2ludGVyOwog lcjsKCiAgdHlwZWRlZiBfQml0X2l0ZXJhdG9yIGl0
ZXJhdG9yOwogIHR5cGVkZW JpdF9jb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCgog
IHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZ dGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRl
cmF0b3I7CgoKCgoKCgogIHR5cGVkZWYgdHlwZW5hbWUgX0J 6OmFsbG9jYXRvcl90eXBlIGFs
bG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJl
dHVybiBfQmFzZTo6Z2V0X G9jYXRvcigpOyB9Cgpwcm90ZWN0ZWQ6CiMgNDEzICIvdXNyL2lu
Y2x1ZGUvZysrLTMvc3RsX2J2ZWN0b3IuaCIgMwpwcm90ZWN0ZWQ6CiAgdm9pZCBfTV9pbml0
aXplKHNpemVfdHlwZSBfX24pIHsKICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9j
KF9fbik7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcS hfX24gKyBfX1dPUkRfQklUIC0g
MSkvX19XT1JEX0JJVDsKICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgIF9NX2Zp
bmlzaCA9IF9NX3N0YXJ0 ZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgfQogIHZvaWQgX01faW5z
ZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCkgewogICAgaWYgKF9NX2Z z
aC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgIGNvcHlfYmFja3dhcmQoX19wb3Np
dGlvbiwgX01fZmluaXNoLCBfTV9maW5pc2ggKyAxKTsKI CAgKl9fcG9zaXRpb24gPSBfX3g7
CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZSB7CiAgICAgIHNpemVfdHlwZSBfX2xl
biA9IHNpemUoKSA/IDI zaXplKCkgOiBfX1dPUkRfQklUOwogICAgICB1bnNpZ25lZCBpbnQq
IF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcH Vn
aW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICpfX2krKyA9IF9feDsK
ICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0aW9u bmQoKSwgX19pKTsKICAgICAgX01f
ZGVhbGxvY2F0ZSgpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9f
V09SRF9CSVQgLSAxKS dPUkRfQklUOwogICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwg
MCk7CiAgICB9CiAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIjĀ:WQ X01faW5pdGlh LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAjĀ:gI ucHV0X2l0ZXJ RvcigpOwogICAgX01fZmluaXNoID0gaXRlcmF0b3IoKTsK
ICAgIF9NX2VuZF9vZjĀ:G9 WdlID0gMDsKI X19maXJzdCkKICAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKICB9CgogIHRlbXBs IDxj
bGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01faW5pdGlhbGl6ZV9yYW5nZShfRm9yd2Fy
ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcm IgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgc2l6ZV90eXBlIF9fbiA9
IDA7CiAgICBkaXN0jĀ:ZS X2ZpcnN0LCBf fbik7CiAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogIH0KCiA tcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9y
IF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgIjĀ:nB El0ZXJhdG9yI ICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRv
cl90YWcpIHsKICA vciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewogICAg
ICBfX3BvcyA9IGluc2VydChfX3BvcywgKl9fZmlyc3QpOwogICAgICArK19fcG9zOw AgfQog
IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRf
cmFuZ2UoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAg ICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgIGjĀ:dh RfaXRlcmF0b3 3QpIHsKICAgICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICAgIGRpc3RhbmNlKF9fZjĀ:3Q F9f
bGFzdCwg KCkgPj0gX19uKSB7CiAgICAg
ICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCB oKSwgX01fZmluaXNoICsgZGlmZmVyZW5j
ZV90eXBlKF9fbikpOwogICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsK
ICAgICAgICBfT W5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgIH0KICAgICAg
ZWxzZSB7CiAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsgbWF4KHNp KSwgX19u
KTsKICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAg
ICAgaXRlcmF0b3IgX19pID0gY29weShiZWdpbi BfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3Es
IDApKTsKICAgICAgICBfX2kgPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19pKTsKICAgICAgICBf
TV9maW5pc2ggjĀ:b3 KF9fcG9zaXRp
b2NhdGUoKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2x rIF9fV09S
RF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAw
KTsKICAgICAgfQogICAgfQogIH0KCgoKcHVibjĀ:go Gl0ZXJhdG9yI b25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9N
X3N0YXJ0OyB gaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01fZmluaXNoOyB9CiAgY29uc3Rf
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNoOyB9CgogIH Vyc2VfaXRl
cmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICBjb25z
dF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigp bnN0IHsKICAgIHJldHVybiBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yKGVuZCgpKTsKICB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1
cm4gcmV2ZX 9pdGVyYXRvcihiZWdpbigpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Ig
cmVuZCgpIGNvbnN0IHsKICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhd GJlZ2luKCkp
OwogIH0KCiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoZW5kKCkg
LSBiZWdpbigpKTsgfQogIHNpemVfdHlwZSB fc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVf
dHlwZSgtMSk7IH0KICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25zdCB7CiAgICByZXR1cm4gc2l6
ZV90eXBlK nN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdlLCAwKSAtIGJlZ2luKCkpOwog
IH0KICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gYmVnaW4oKSA9PSBl KTsgfQogIHJl
ZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIHsKICAgIHJldHVybiAqKGJlZ2luKCkg
KyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7Ci ogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltd
KHNpemVfdHlwZSBfX24pIGNvbnN0IHsKICAgIHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNl
X3R5cGUo KSk7CiAgfQoKICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUm
IF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkge30jĀ:gd jdG9yKHNp
em AgICAgY29uc3QgYWxsb2NhdG9yX3R5
cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKjĀ:iA CA6IF9CYXNlK CiAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdl
LCBfX3Z lID8gfjAgOiAwKTsKICB9CgogIGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUgX19u
KQogICAgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKQogIHsKICAgIF9NX2 RpYWxpemUoX19u
KTsKICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIDApOwogIH0KCiAg
dmVjdG9yKGNvbnN0IHZlY3RvciYgX194 IF9CYXNlKF9feC5nZXRfYWxsb2NhdG9yKCkpIHsK
ICAgIF9NX2luaXRpYWxpemUoX194LnNpemUoKSk7CiAgICBjb3B5KF9feC5iZWdpbigpLCBfX3gu
ZW5kKC 9NX3N0YXJ0KTsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
PgogIHZlY3RvcihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJd XRvciBfX2xhc3Qs
CiAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgp
KQogICAgOiBfQmFzZShfX2EpCiAgewo gdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxf
SW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9pbml0aWFsaXplX2Rp
c3Bhd F9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNs
YXNzIF9JbnRlZ2VyPgogIHZvaWQgX01faW5pdGlhbGl6ZV9kaXNwYXRjjĀ:SW ZWdlciBfX24s gIF9NX2luaXRpYWxpemUoX19uKTsKICAg
IGZpbGwoX01fc3RhcnQuX01fcCwgX0 5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAg
fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbml0aWFsaXpl
X2Rp dGNoKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBjĀ:7C gICBfTV9pbml 9pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0
KSk7CiAgfQojIDU4OSAiL3Vzci9pb WRlL2crKy0zL3N0bF9idmVjdG9yLmgiIDMKICB+dmVj
dG9yKCkgeyB9CgogIHZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IHZlY3RvciYgX194KSB7CiAgICBp
ZiA feCA9PSB0aGlzKSByZXR1cm4gKnRoaXM7CiAgICBpZiAoX194LnNpemUoKSA+IGNhcGFj
aXR5KCkpIHsKICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICBfTV l0aWFsaXplKF9feC5z
aXplKCkpOwogICAgfQogICAgY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBiZWdpbigpKTsK
ICAgIF9NX2ZpbmlzaCA9IGJlZ2lu KyBkaWZmZXJlbmNlX3R5cGUoX194LnNpemUoKSk7CiAg
ICByZXR1cm4gKnRoaXM7CiAgfQoKCgoKCgogIHZvaWQgYXNzaWduKHNpemVfdCBfX24sIGJvb2wg
X1 B7CiAgICBpZiAoX19uID4gc2l6ZSgpKSB7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwg
X01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICAgI 2VydChlbmQoKSwgX19u
IC0gc2l6ZSgpLCBfX3gpOwogICAgfQogICAgZWxzZSB7CiAgICAgIGVyYXNlKGJlZ2luKCkgKyBf
X24sIGVuZCgpKTsKICAgICAgZml fTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwg
X194ID8gfjAgOiAwKTsKICAgIH0KICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
d gogIHZvaWQgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y
IF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50 cjxfSW5wdXRJdGVyYXRv
cj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwg
X19sYXN0LCBfSW50ZWdyYWwoKS AgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAg
dm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190
X3R5cGUpCiAgICB7IGFzc2lnbigoc2l6ZV90KSBfX24sIChib29sKSBfX3ZhbCk7IH0KCiAg
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CiAgdm9pZCBfTV9 pZ25fZGlzcGF0Y2goX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgeyBf
TV9hc3NpZ25fYXV4KF9fZmlycjĀ:F9 GFzdCwgX19pd dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWdujĀ:1e fSW5wdXRJdGV hc3QsCiAgICAg
ICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgew AgaXRlcmF0b3IgX19jdXIg
PSBiZWdpbigpOwogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQo
KTsgKytfX2N1ciwgKytfX2Zp KQogICAgICAqX19jdXIgPSAqX19maXJzdDsKICAgIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkKICAgICAgZXJhc2UoX19jdXIsIGVuZCgpKTsKICAgIGVsc2UKICAjĀ:Ag 5zZXJ0KGVuZC xhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fY F9Gb3J3YXJkSXRlcmF0b3Ig
X19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGZv
cndhcmRfaXRlcmF0b3JfdGF 7CiAgICBzaXplX3R5cGUgX19sZW4gPSAwOwogICAgZGlzdGFu
Y2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgICBpZiAoX19sZW4gPCBzaXplKCkpCiAgIC GVyYXNlKGNvcHkoX19maXJzdCwgX19sYXN0LCBiZWdpbigpKSwgZW5kKCkpOwogICAgZWxzZSB7
CiAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2Zp OwogICAgICBhZHZhbmNlKF9f
bWlkLCBzaXplKCkpOwogICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBiZWdpbigpKTsKICAgICAg
aW5zZXJ0KGVuZCgpLCBfX2 wgX19sYXN0KTsKICAgIH0KICB9CgoKCiAgdm9pZCByZXNlcnZl
KHNpemVfdHlwZSBfX24pIHsKICAgIGlmIChjYXBhY2l0eSgpIDwgX19uKSB7CiAgICAgIHVuc bmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbik7CiAgICAgIF9NX2ZpbmlzaCA9IGNvcHko
YmVnaW4oKSwgZW5kKCksIGl0ZXJhdG9yKF9fcSwgMCkpOwo gICBfTV9kZWFsbG9jYXRlKCk7
CiAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgX01fZW5kX29mX3N0b3Jh
Z2UgPSBfX3EgKyAoX19uI 19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICB9CiAgfQoK
ICByZWZlcmVuY2UgZnJvbnQoKSB7IHJldHVybiAqYmVnaW4oKTsgfQogIGNvbnN0X3JlZmVy
ZSBmcm9udCgpIGNvbnN0IHsgcmV0dXJuICpiZWdpbigpOyB9CiAgcmVmZXJlbmNlIGJhY2soKSB7
IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KICBjb25zdF9yZW VuY2UgYmFjaygpIGNvbnN0IHsg
cmV0dXJuICooZW5kKCkgLSAxKTsgfQogIHZvaWQgcHVzaF9iYWNrKGJvb2wgX194KSB7CiAgICBp
ZiAoX01fZmluaXNoLl9N IT0gX01fZW5kX29mX3N0b3JhZ2UpCiAgICAgICpfTV9maW5pc2gr
KyA9IF9feDsKICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChlbmQoKSwgX194KTsKICB g
dm9pZCBzd2FwKHZlY3RvciYgX194KSB7Cjo6c3dhcChfTV9zdGFydCwgX194Ll9NX3N0YXJ0KTsK
Ojpzd2FwKF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7C 3dhcChfTV9lbmRfb2Zfc3RvcmFn
ZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICB9CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9y
IF9fcG9zaXRpb24sIGJjĀ:gX 4ID0gYm9vbCg 9wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX0 5k
X29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkKICAgICAgKl9NX2ZpbmlzaCsrID0g
X194OwogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4jĀ:cG aXRpb24sIF9f 9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogIHZvaWQgaW J0KGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0e GVm
IHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3Jh
bDsKICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3Bvc2l uLCBfX2ZpcnN0LCBfX2xhc3QsIF9J
bnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2lu
c2VydF9kaXNwYXRja GVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsKICAgIGluc2VyjĀ:X3
cywgKHNpemV lbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2VydF NwYXRjaChpdGVyYXRvciBfX3BvcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xh CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7
CiAgICBfTV9pbnNlcnRfcmFuZ2UoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVjĀ:vc j
YXRlZ29yeS RlL2crKy0zL3N0bF9idmVj
dG9yLmgiIDMKICB2b2lkIGluc2VydChpdGVyYXRvc 3Bvc2l0aW9uLCBzaXplX3R5cGUgX19u
LCBib29sIF9feCkgewogICAgaWYgKF9fbiA9PSAwKSByZXR1cm47CiAgICBpZiAoY2FwYWNpdHko
KSAtIHNpemUoKSAjĀ:fX pIHsKICAgICA wgX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICBmaWxsKF 9zaXRp
b24sIF9fcG9zaXRpb24gKyBkaWZmZXJlbmNlX3R5cGUoX19uKSwgX194KTsKICAgICAgX01fZmlu
aXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOwog fQogICAgZWxzZSB7CiAgICAgIHNpemVf
dHlwZSBfX2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9fbik7CiAgICAgIHVuc2lnbmVkIGlu
dCogX19xID0gX0jĀ:l0 FsbG9jKF9fbG WdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgZmlsbjĀ:F9 Swg
X19uLCBf aXRpb24sIGVuZCgpLCBfX2kg
KyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICA NX2RlYWxsb2NhdGUoKTsKICAgICAgX01f
ZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJ
VDsKICAgICAgXjĀ:3R nQgPSBpdGVyY b3BfYmFjaygpIHsgLS1fTV9maW5pc2g7IH0KICBpdGVyYXRvciBlcmFzZShpdGVy ciBfX3Bv
c2l0aW9uKSB7CiAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0gZW5kKCkpCiAgICAgIGNvcHkoX19w
b3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bvc2l0aW sKICAgICAgLS1fTV9maW5pc2g7CiAgICBy
ZXR1cm4gX19wb3NpdGlvbjsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwg
aXRlcmF0b3IgjĀ:YX KSB7CiAgICBf
Zmlyc3QpOwogICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQogIHZvaWQgcmVzaXplKHNjĀ:fd wZSBf
X25ld1 YgKF9fbmV3X3NpemUgPCBzaXpl
KCkpCiAgICAgIGVyYXNlKGJlZ2luKCkgKyBkajĀ:XJ mNlX3R5cGUoX ICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXplIC0gc2l6ZSgpLCBf
X3gpOwogIH0 2b2lkIGNsZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KfTsKCgoK
dHlwZWRlZiB2ZWN0b3I8Ym9vbCwgYWxsb2M+IGJpdF92ZWN0b3I7CgojIDgzMi Vzci9pbmNs
dWRlL2crKy0zL3N0bF9idmVjdG9yLmgiIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2crKy0zL3ZlY3Rv
ciIgMiAzCiMgNiAiLi4vLi4vLi4vc3JjL2Zy d29yay91dGlsL01lbUluZm8uaCIgMgoKIyA3
ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RyaW5nIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2crKy0z
L3N0ZC9iYXjĀ:lu 5oIiAxIDMKI3 Rl
L2crKy0zL3N0ZC9iYXN0cmluZy5oIiAzCgoKCgojIDcgIi91c3IvaW5jbHVkZ ystMy9jc3Rk
ZGVmIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCiMg
MzMgIi91c3IvaW5jbHVkZS9nKystMy9zdGQ yYWl0cy5oIiAxIDMKI3ByYWdtYSBpbnRlcmZh
Y2UgInN0ZC9zdHJhaXRzLmgiCiMgMzMgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvc3RyYWl0cy5o
IiAzCgoKC Xh0ZXJuICJDKysiIHsKdGVtcGxhdGUgPGNsYXNzIGNoYXJUPgpzdHJ1Y3Qgc3Ry
aW5nX2NoYXJfdHJhaXRzIHsKICB0eXBlZGVmIGNoYXJUIGNoYXJfdHlwZTsK ICBzdGF0aWMg
dm9pZCBhc3NpZ24gKGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IGMx
ID0gYzI7IH0KICBzdGF0aWMgYm9vbCBlcS 9uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hh
cl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSA9PSBjMik7IH0KICBzdGF0aWMgYm9vbCBuZSAo
Y29uc3Qg cl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuICEo
YzEgPT0gYzIpOyB9CiAgc3RhdGljIGJvb2wgbHQgKGNvbnN0IGNoYXJfdHljĀ:gY sIGNvbnN0
IG BjMik7IH0KICBzdGF0aWMgY2hhcl90
eXBlIGVvcyAoKSB7IHJldHVybiBjaGFyXjĀ:GU TsgfQogIHN0Y ZXR1cm4gMDsgfQoKCgoKICBzdGF0aWMgaW50IGNvbXBhcmUgKGNvbnN0
IGNoYXJ wZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAgewogICAg
ICBzaXplX3QgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkKIC AgICBpZiAobmUg
KHMxW2ldLCBzMltpXSkpCiAgICAgICAgICByZXR1cm4gbHQgKHMxW2ldLCBzMltpXSkgPyAtMSA6
IDE7CgogICAgICByZXR1cm4gMDsKICAgjĀ:Ci c3RhdGljIHNp KICAgIHsKICAgICAgc2l6ZV90IGwgPSAwOwogICAgICB3aGlsZSAobmUg
KCpzKy VvcyAoKSkpCiAgICAgICAgKytsOwogICAgICByZXR1cm4gbDsKICAgIH0KCiAgc3Rh
dGljIGNoYXJfdHlwZSogY29weSAoY2hhcl90eXBlKiBzMSwgY29uc3QgYjĀ:l9 XBlKiBzMiwg
ICkKICAgICAgICBhc3NpZ24gKHMxW25d
LCBzMltuXSk7CiAgICAgIHJldHVybiBjĀ:KI gIH0KCiAgc3R BzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7CiAg
ICAgI XJfdHlwZSBhW25dOwogICAgICBzaXplX3QgaTsKICAgICAgZm9yIChpID0gMDsgaSA8
IG47ICsraSkKICAgICAgICBhc3NpZ24gKGFbaV0sIHMyW2ldKTsKICAg Zm9yIChpID0gMDsg
aSA8IG47ICsraSkKICAgICAgICBhc3NpZ24gKHMxW2ldLCBhW2ldKTsKICAgICAgcmV0dXJuIHMx
OwogICAgfQoKICBzdGF0aWMgY2hhcljĀ:Bl BzZXQgKGNoYX 2l6ZV90IG4pCiAgICB7CiAgICAgIGZvciAoOyBuLS07ICkKICAgICAgICBh
c3Np KHMxW25dLCBjKTsKICAgICAgcmV0dXJuIHMxOwogICAgfQp9OwoKY2xhc3MgaXN0cmVh
bTsKY2xhc3Mgb3N0cmVhbTsKCiMgNyAiL3Vzci9pbmNsdWRlL2crKy0 jdHlwZSIgMSAzCiMg
MjkgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMKZXh0ZXJuICJDIiB7CgojIDQ3ICIvdXNyL2lu
Y2x1ZGUvY3R5cGUuaCIgMwplbnVtC CBfSVN1cHBlciA9ICgoMCkgPCA4ID8gKCgxIDw8ICgw
KSkgPDwgOCkgOiAoKDEgPDwgKDApKSA+PiA4KSksCiAgX0lTbG93ZXIgPSAoKDEpIDwgOCA/ICgo
MSAjĀ:oM pIDw8IDgpIDo gKCgyKSA8
IDggPyAoKDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8PCAoMikpID4+ID wKICBfSVNkaWdpdCA9
ICgoMykgPCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkgOiAoKDEgPDwgKDMpKSA+PiA4KSksCiAgX0lT
eGRpZ2l0ID0gKCg0KSA8IDggPyAojĀ:PD KDQpKSA8PCA4 jZSA9ICgoNSkgPCA4ID8gKCgxIDw8ICg1KSkgPDwgOCkgOiAoKDEgPDwgKDUp
KSjĀ:A4 ksCiAgX0lTcH gpIDogKCgx
IDw8ICg2KSkgPj4gOCkpLAogIF9JU2dyYXBoID0gKCg3KSA8IDggPjĀ:DE DwgKDcpKSA8P bGFuayA9ICgoOCkgPCA4ID8gKCgxIDw8ICg4
KSkgPDwgOCkgOiAoKDEgPDwgKDgjĀ:+P 4KSksCiAgX0l w8IDgpIDogKCgxIDw8ICg5KSkgPj4gOCkpLAogIF9JU3B1bmN0ID0gKCgxMCkg
P D8gKCgxIDw8ICgxMCkpIDw8IDgpIDogKCgxIDw8ICgxMCkpID4+IDgpKSwKICBfSVNhbG51
bSA9ICgoMTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8PCA4KSA6ICgo PCAoMTEpKSA+PiA4KSkK
fTsKIyA3NSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIF9fY29uc3QgdW5zaWduZWQg
c2hvcnQgaW50ICpfX2N0eXBlX2 V4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90
b2xvd2VyOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG91cHBlcjsKCiMgOTEg
c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQgaXNhbG51bSAoaW50KSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIHRocm93ICgpOwp lcm4gaW50IGlzY250cmwg
KGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNkaWdpdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBpc2xvd2VyIChpbnQpIjĀ:m9 CgpOwpleHRlc dGVybiBpbnQgaXNwcmludCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3B1 0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzc3BhY2UgKGludCkgdGhyb3cgKCk7CmV4
dGVybiBpbnQgaXN1cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZX ludCBpc3hkaWdpdCAoaW50
KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgdG9sb3dlciAoaW50IF9fYykgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCB0b3Vw IChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGlu
dCBpc2FzY2lpIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB0b2FzY2lpIChpbnQ 9jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfdG91cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBfdG9sb3dlciAoaW50KSB0aHJvdyAoKTsKIyAyNjĀ:i9 3IvaW5jbHVkZ L2crKy0zL2NjdHlwZSIgMiAzCiMgMTA2ICIvdXNy
L2luY2x1ZGUvZysrLTMvc3R 0cmFpdHMuaCIgMiAzCgoKc3RydWN0IHN0cmluZ19jaGFyX3Ry
YWl0cyA8Y2hhcj4gewogIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CgogIHN0YXRpYyB2b2lkIG 2lnbiAoY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgYzEgPSBjMjsg
fQogIHN0YXRpYyBib29sIGVxIChjb25zdCBjaGFyX3R5cGUg MSwgY29uc3QgY2hhcl90eXBl
JiBjMikKICAgIHsgcmV0dXJuIChjMSA9PSBjMik7IH0KICBzdGF0aWMgYm9vbCBuZSAoY29uc3Qg
Y2hhcl90eXBlJiBjMSwgY2 QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSAhPSBj
Mik7IH0KICBzdGF0aWMgYm9vbCBsdCAoY29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcjĀ:eX JiBjMikKICAg aGFyX3R5cGUgZW9z
ICgpIHsgcmV0dXJuIDA7IH0KICBzdGF0aWMgYm9vbCBpc19 oY2hhcl90eXBlIGEpIHsgcmV0
dXJuIChfX2N0eXBlX2JbKGludCkgKChhKSldICYgKHVuc2lnbmVkIHNob3J0IGludCkgX0lTc3Bh
Y2UpOyB9CgogIHN0YXRpY nQgY29tcGFyZSAoY29uc3QgY2hhcl90eXBlKiBzMSwgY29uc3Qg
Y2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7IHJldHVybiBtZW1jbXAgKHMxLCBzMiwg
IH0KICBzdGF0aWMgc2l6ZV90IGxlbmd0aCAoY29uc3QgY2hhcl90eXBlKiBzKQogICAgeyByZXR1
cm4gc3RybGVuIChzKTsgfQogIHN0YXRpYyBjaGFyX3R5cG NvcHkgKGNoYXJfdHlwZSogczEs
IGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAgeyByZXR1cm4gKGNoYXJfdHlwZSop
IG1lbWNweSAoczEsIHMyjĀ:KT fQogIHN0YXRp sIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQo Bf
X2Vycm51bSwgX19jb CBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLAogICAgICAgICAgICAgICAgICAgICAgjĀ:IC
ICAgICAgX19 3ICgpIF9fYXR0cmlidXRl
X18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybi lkIF9fYXNzZXJ0IChjb25zdCBjaGFy
ICpfX2Fzc2VydGlvbiwgY29uc3QgY2hhciAqX19maWxlLCBpbnQgX19saW5lKQogICAgIHRocm93
ICgpIF9fYXR0cmli X18gKChfX25vcmV0dXJuX18pKTsKCgp9CgojIDcgIi91c3IvaW5jbHVk
ZS9nKystMy9jYXNzZXJ0IiAyIDMKIyA1OSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9 0cmlu
Zy5oIiAyIDMKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cyA9IHN0cmlu
Z19jaGFyX3RyYWl0czxjaGFyVD4sCiAgICAgICAgIjĀ:GF yBBbGxvY2F0b CnByaXZhdGU6CiAgc3RydWN0IFJlcCB7CiAgICBzaXplX3Qg
bGVuLCByZXMsIHJ KICAgIGJvb2wgc2VsZmlzaDsKCiAgICBjaGFyVCogZGF0YSAoKSB7IHJl
dHVybiByZWludGVycHJldF9jYXN0PGNoYXJUICo+KHRoaXMgKyAxKTsgfQogICAgY2 QmIG9w
ZXJhdG9yW10gKHNpemVfdCBzKSB7IHJldHVybiBkYXRhICgpIFtzXTsgfQogICAgY2hhclQqIGdy
YWIgKCkgeyBpZiAoc2VsZmlzaCkgcmV0dXJuIGNs ICgpOyArK3JlZjsgcmV0dXJuIGRhdGEg
KCk7IH0KIyAxMTQgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMwogICAgdm9p
ZCByZWxlYXNlIC sgaWYgKC0tcmVmID09IDApIGRlbGV0ZSB0aGlzOyB9CgoKICAgIGlubGlu
ZSBzdGF0aWMgdm9pZCAqIG9wZXJhdG9yIG5ldyAoc2l6ZV90LCBzaXplX3QpOwogI W5saW5l
IHN0YXRpYyB2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqKTsKICAgIGlubGluZSBzdGF0aWMg
UmVwKiBjcmVhdGUgKHNpemVfdCk7CiAgICBjaGF gY2xvbmUgKCk7CgogICAgaW5saW5lIHZv
aWQgY29weSAoc2l6ZV90LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQg
bW92ZSAoc2l6Z CBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQgc2V0
IChzaXplX3QsIGNvbnN0IGNoYXJULCBzaXplX3QpOwoKICAgIGlubGluZSBzdGF0jĀ:Ym bCBl
eGNlc3N lIHN0YXRpYyBzaXplX3QgZnJv
Yl9zaXplIChzaXplX3QpOwoKICBwcml2YXRlOg AgUmVwICZvcGVyYXRvcj0gKGNvbnN0IFJl
cCAmKTsKICB9OwoKcHVibGljOgoKICB0eXBlZGVmIHRyYWl0cyB0cmFpdHNfdHlwZTsKICB0eXBl
ZGVmIHR5cGVujĀ:IH YWl0czo6Y2hh
Y2F0b3IgYWxsb2NhdG9yX3R5cGU7CgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHl KICB0eXBl
ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjaGFyVCYgcmVmZXJlbmNl
OwogIHR5cGVkZWYgY29uc3QgY2hhclQmIGNvb 3JlZmVyZW5jZTsKICB0eXBlZGVmIGNoYXJU
KiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgY2hhclQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRl
ZiBwb2ludGVjĀ:0Z hdG9yOwogIHR v
cjsKICB0eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZX 9pdGVyYXRv
cjsKICB0eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2
ZXJzZV9pdGVyYXRvcjsKICBzdGF0aWMgY29u c2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2Fz
dDxzaXplX3R5cGU+KC0xKTsKCnByaXZhdGU6CiAgUmVwICpyZXAgKCkgY29uc3QgeyByZXR1cm4g
cmVpbnRlcn RfY2FzdDxSZXAgKj4oZGF0KSAtIDE7IH0KICB2b2lkIHJlcHVwIChSZXAgKnAp
IHsgcmVwICgpLT5yZWxlYXNlICgpOyBkYXQgPSBwLT5kYXRhICgpOyB9Cgpwd WM6CiAgY29u
c3QgY2hhclQqIGRhdGEgKCkgY29uc3QKICAgIHsgcmV0dXJuIHJlcCAoKS0+ZGF0YSgpOyB9CiAg
c2l6ZV90eXBlIGxlbmd0aCAoKSBjb25zdAo geyByZXR1cm4gcmVwICgpLT5sZW47IH0KICBz
aXplX3R5cGUgc2l6ZSAoKSBjb25zdAogICAgeyByZXR1cm4gcmVwICgpLT5sZW47IH0KICBzaXpl
X3R5cGUgYjĀ:WN HkgKCkgY29uc 2l6
ZV90eXBlIG1heF9zaXplICgpIGNvbnN0CiAgICB7IHJldHVybiAobnBvcyAtjĀ:L3 emVvZiAo
Y2h geyByZXR1cm4gc2l6ZSAoKSA9PSAw
OyB9CgoKICBiYXNpY19zdHJpbmcmIG9wZX 9yPSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIp
CiAgICB7CiAgICAgIGlmICgmc3RyICE9IHRoaXMpIHsgcmVwICgpLT5yZWxlYXNlICgpOyBkYXQg
PSBzdHIu ICgpLT5ncmFiICgpOyB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgZXhw
bGljaXQgYmFzaWNfc3RyaW5nICgpOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB KICBiYXNpY19z
dHJpbmcgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyKTogZGF0IChzdHIucmVwICgpLT5ncmFiICgp
KSB7IH0KICBiYXNpY19zdHJpbmcgKGNvbjĀ:GJ 2ljX3N0cmluZ biA9IG5wb3MpCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNz
aWduIChjĀ:sI vcywgbik7IH0 zaXpl
X3R5cGUgbikKICAgIDogZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyBhc3NpZ2 MsIG4pOyB9CiAg
YmFzaWNfc3RyaW5nIChjb25zdCBjaGFyVCogcykKICAgIDogZGF0IChuaWxSZXAuZ3JhYiAoKSkg
eyBhc3NpZ24gKHMpOyB9CiAgYmFzaWNfjĀ:aW IChzaXplX3R5 uZ3JhYiAoKSkgeyBhc3NpZ24gKG4sIGMpOyB9CgogIHRlbXBsYXRlPGNs
YXNzIE V0SXRlcmF0b3I+CiAgICBiYXNpY19zdHJpbmcoSW5wdXRJdGVyYXRvciBfX2JlZ2lu
LCBJbnB1dEl0ZXJhdG9yIF9fZW5kKQoKCgogICAgOiBkYXQgKG5pbFJlcjĀ:mF CgpKSB7IGFz
Y19zdHJpbmcgKCkKICAgIHsgcmVwICgp
LT5yZWxlYXNlICgpOyB9CgogIHZvaWQjĀ:hc oYmFzaWNfc3R BzLmRhdDsgcy5kYXQgPSBkOyB9CgogIGJhc2ljX3N0cmluZyYgYXBwZW5k
IChjb CBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAsCiAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdHlwZSBuID0gbnBvcykKICAgIHsgcmV0 IHJlcGxhY2UgKGxl
bmd0aCAoKSwgMCwgc3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhcHBlbmQgKGNvbnN0
IGNoYXJUKiBzLCBzaXplX3R5cGUgbi AgIHsgcmV0dXJuIHJlcGxhY2UgKGxlbmd0aCAoKSwg
MCwgcywgbik7IH0KICBiYXNpY19zdHJpbmcmIGFwcGVuZCAoY29uc3QgY2hhclQqIHMpCiAgICB7
IHJl biBhcHBlbmQgKHMsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBiYXNpY19zdHJpbmcm
IGFwcGVuZCAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7IHJldHVjĀ:yZ sYWNlIChsZW5 NsYXNzIElucHV0SXRlcmF0b3I+CiAgICBi
YXNpY19zdHJpbmcmIGFwcGVuZChJbjĀ:El XJhdG9yIGZpc IHJldHVybiByZXBsYWNlIChpZW5kICgpLCBpZW5kICgpLCBmaXJzdCwgbGFz
dCkjĀ:KC gdm9pZCBwdXN fYyk7IH0K
CiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24gKGNvbnN0IGJhc2ljX3N0cm Ygc3RyLCBzaXplX3R5
cGUgcG9zID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIG4gPSBucG9zKQog
ICAgeyByZXR1cm4gcmVwbGFjZSAo bnBvcywgc3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNfc3Ry
aW5nJiBhc3NpZ24gKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAgIHsgcmV0dXJuIHJl
cGjĀ:Ug AsIG5wb3MsIH NvbnN0IGNo
YXJUKiBzKQogICAgeyByZXR1cm4gYXNzaWduIChzLCB0cmFpdHM6O md0aCAocykpOyB9CiAg
YmFzaWNfc3RyaW5nJiBhc3NpZ24gKHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4g
cmVwbGFjZSAoMCwgbnBvcywgbiw 7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRv
cj4KICAgIGJhc2ljX3N0cmluZyYgYXNzaWduKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRl
c 3IgbGFzdCkKCgoKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGliZWdpbiAoKSwgaWVuZCAoKSwg
Zmlyc3QsIGxhc3QpOyB9CgogIGJhc2ljX3N0cmluZyYgb3BlcmF0 IChjb25zdCBjaGFyVCog
cykKICAgIHsgcmV0dXJuIGFzc2lnbiAocyk7IH0KICBiYXNpY19zdHJpbmcmIG9wZXJhdG9yPSAo
Y2hhclQgYykKICAgIHsgcmV0dX Fzc2lnbiAoMSwgYyk7IH0KCiAgYmFzaWNfc3RyaW5nJiBv
cGVyYXRvcis9IChjb25zdCBiYXNpY19zdHJpbmcmIHJocykKICAgIHsgcmV0dXJuIGFwcGVuZCAo
KTsgfQogIGJhc2ljX3N0cmluZyYgb3BlcmF0b3IrPSAoY29uc3QgY2hhclQqIHMpCiAgICB7
IHJldHVybiBhcHBlbmQgKHMpOyB9CiAgYmFzaWNfc3RyaW5nJiB yYXRvcis9IChjaGFyVCBj
KQogICAgeyByZXR1cm4gYXBwZW5kICgxLCBjKTsgfQoKICBiYXNpY19zdHJpbmcmIGluc2VydCAo
c2l6ZV90eXBlIHBvczEsIGNvb GJhc2ljX3N0cmluZyYgc3RyLAogICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3R5cGUgcG9zMiA9IDAsIHNpemVfdHlwZSBuID0gbnBvcykKICAgIHsgcmV0 uIHJlcGxhY2UgKHBvczEsIDAsIHN0ciwgcG9zMiwgbik7IH0KICBiYXNpY19zdHJpbmcmIGlu
c2VydCAoc2l6ZV90eXBlIHBvcywgY29uc3QgY2hhclQqIHMsIH VfdHlwZSBuKQogICAgeyBy
ZXR1cm4gcmVwbGFjZSAocG9zLCAwLCBzLCBuKTsgfQogIGJhc2ljX3N0cmluZyYgaW5zZXJ0IChz
aXplX3R5cGUgcG9zLCBjb25z aGFyVCogcykKICAgIHsgcmV0dXJuIGluc2VydCAocG9zLCBz
LCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgYmFzaWNfc3RyaW5nJiBpbnNlcnQgKHNpemVfdHl Bwb3MsIHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4gcmVwbGFjZSAocG9zLCAw
LCBuLCBjKTsgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvc CBjaGFyVCBjKQogICAgeyBz
aXplX3R5cGUgX19vID0gcCAtIGliZWdpbiAoKTsKICAgICAgaW5zZXJ0IChwIC0gaWJlZ2luICgp
LCAxLCBjKTsgc2VsZmlzaCAjĀ:KI gICAgcmV0dXJ luc2VydChpdGVyYXRvciBwLCBzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIHsgc2 V90eXBlIF9fbyA9IHAgLSBpYmVnaW4gKCk7CiAgICAgIGluc2VydCAocCAtIGliZWdpbiAoKSwg
biwgYyk7IHNlbGZpc2ggKCk7CiAgICAgIHJldHVybiBpYmVnjĀ:KC KyBfX287IH0K KICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIHAsIElu
cHV0SXRlcmF0b3IgZmlyc3 lucHV0SXRlcmF0b3IgbGFzdCkKCgoKICAgIHsgcmVwbGFjZSAo
cCwgcCwgZmlyc3QsIGxhc3QpOyB9CgogIGJhc2ljX3N0cmluZyYgZXJhc2UgKHNpemVfdHlwZjĀ:b3 PSAwLCBzaXpl YWNlIChwb3MsIG4s
IChzaXplX3R5cGUpMCwgKGNoYXJUKTApOyB9CiAgaXRlcmFjĀ:gZ hc2UoaXRlcmF BiZWdpbigpOwogICAgICByZXBsYWNlIChfX28sIDEs
IChzaXplX3R5cGUpMCwgK XJUKTApOyBzZWxmaXNoICgpOwogICAgICByZXR1cm4gaWJlZ2lu
KCkgKyBfX287IH0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBmLCBpdGVyYXRvciBsKQogjĀ:
e zaXplX3R5cGU lIChfX28sIGwtZiwg
KHNpemVfdHlwZSkwLCAoY2hhclQpMCk7c2VsZmlzaCAoKT AgICAgcmV0dXJuIGliZWdpbigp
ICsgX19vOyB9CgogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvczEsIHNpemVf
dHlwZSBuMSwgY29uc3QgjĀ:aW c3RyaW5nJiBz lX3R5cGUgcG9zMiA9IDAsIHNpemVfdHlwZSBuMiA9IG5wb3MpOwogIGJhc2ljX3N u
ZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBjb25zdCBjaGFyVCogcywK
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZjĀ:ik iAgYmFzaWNfc aXplX3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzKQogICAg
eyByZXR1cm4gcmVwbGF ocG9zLCBuMSwgcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIGJh
c2ljX3N0cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBzaX R5
cGUgbjIsIGNoYXJUIGMpOwogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywg
c2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7IHJldHVyjĀ:ZX YWNlIChwb3Ms sYWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIGNv
bnN0IGJhc2ljX3N0cm Ygc3RyKQogICAgeyByZXR1cm4gcmVwbGFjZSAoaTEgLSBpYmVnaW4g
KCksIGkyIC0gaTEsIHN0cik7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdjĀ:Gk LCBpdGVyYXRv KQogICAgeyByZXR1cm4g
cmVwbGFjZSAoaTEgLSBpYmVnaW4gKCksIGkyIC0gaTE sIG4pOyB9CiAgYmFzaWNfc3RyaW5n
JiByZXBsYWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIGNvbnN0IGNoYXJUKiBzKQogICAg
eyByZXR1cm4gcmVwb SAoaTEgLSBpYmVnaW4gKCksIGkyIC0gaTEsIHMpOyB9CiAgYmFzaWNf
c3RyaW5nJiByZXBsYWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIHNpemVfdHlw LCBj
aGFyVCBjKQogICAgeyByZXR1cm4gcmVwbGFjZSAoaTEgLSBpYmVnaW4gKCksIGkyIC0gaTEsIG4s
IGMpOyB9CgogIHRlbXBsYXRlPGNsYXNzIElucHV0SX F0b3I+CiAgICBiYXNpY19zdHJpbmcm
IHJlcGxhY2UoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGkyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIElucHV0SXRljĀ:b3 ajEsIElucHV0 hdGljIGNoYXJUIGVvcyAoKSB7IHJldHVybiB0cmFpdHM6OmVvcyAoKTsgfQogIHZjĀ:gd p
cXVlICgpIH d0aCAoKSwgdHJ1ZSk7IH0K
ICB2b2lkIHNlbGZpc2ggKCkgeyB1bmlxdWUgKCk7I CAoKS0+c2VsZmlzaCA9IHRydWU7IH0K
CnB1YmxpYzoKICBjaGFyVCBvcGVyYXRvcltdIChzaXplX3R5cGUgcG9zKSBjb25zdAogICAgewog
ICAgICBpZiAocG9 9IGxlbmd0aCAoKSkKICAgICAgICByZXR1cm4gZW9zICgpOwogICAgICBy
ZXR1cm4gZGF0YSAoKVtwb3NdOwogICAgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3JbXS l6ZV90
eXBlIHBvcykKICAgIHsgc2VsZmlzaCAoKTsgcmV0dXJuICgqcmVwICgpKVtwb3NdOyB9CgogIHJl
ZmVyZW5jZSBhdCAoc2l6ZV90eXBlIHBvcykKICAg ICAgICAgKCh2b2lkKSAoKCEocG9zID49
IGxlbmd0aCAoKSkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiIShwb3MgPj0gbGVuZ3RoICgpKSIs
ICIvdXNyL2luY2jĀ:Uv srLTMvc3RkL2 U9OX18pLCAwKSkpOwogICAgICByZXR1cm4gKCp0aGlzKVtwb3NdOwogICAgfQogI nN0X3Jl
ZmVyZW5jZSBhdCAoc2l6ZV90eXBlIHBvcykgY29uc3QKICAgIHsKICAgICAgKCh2b2lkKSAoKCEo
cG9zID49IGxlbmd0aCAoKSkpID8gMCA6IChfX2FjĀ:yd mYWlsICgiISh UvZysrLTMvc3RkL2Jhc3RyaW5nLmgiLCAzMzMsIF9fUFJFVFRZ
X0ZVTkNUSU9OXjĀ:CA SkpOwogICAgI dmF0ZToKICB2b2lkIHRlcm1pbmF0ZSAoKSBjb25zdAogICAgeyB0cmFpdHM6OmFzjĀ:bi KCpy
ZXAgKCk KICBjb25zdCBjaGFyVCogY19z
dHIgKCkgY29uc3QKICAgIHsgaWYgKGxlbmd0aC A9PSAwKSByZXR1cm4gIiI7IHRlcm1pbmF0
ZSAoKTsgcmV0dXJuIGRhdGEgKCk7IH0KICB2b2lkIHJlc2l6ZSAoc2l6ZV90eXBlIG4sIGNoYXJU
IGMpOwogIHZvjĀ:cm aXplIChzaXpl
OyB9CiAgdm9pZCByZXNlcnZlIChzaXplX3R5cGUpIHsgfQoKICBzaXplX3R5cGU weSAoY2hh
clQqIHMsIHNpemVfdHlwZSBuLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3Q7CgogIHNpemVfdHlw
ZSBmaW5kIChjb25zdCBiYXNpY19zdHJpbmcmIjĀ:iw 2l6ZV90eXBlI IChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0KICBz
aXplX3R5cGUjĀ:uZ oY29uc3QgY2h u
KSBjb25zdDsKICBzaXplX3R5cGUgZmluZCAoY29uc3QgY2hhclQqIHMsIHNpem lwZSBwb3Mg
PSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZCAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykp
OyB9CiAgc2l6ZV90eXBlIGZpbmQgKGNoYXJU IHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdDsK
CiAgc2l6ZV90eXBlIHJmaW5kIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBv
cyA9IG5wb3 NvbnN0CiAgICB7IHJldHVybiByZmluZCAoc3RyLmRhdGEoKSwgcG9zLCBzdHIu
bGVuZ3RoKCkpOyB9CiAgc2l6ZV90eXBlIHJmaW5kIChjb25zdCBjaGFyVCogc 2l6ZV90eXBl
IHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSByZmluZCAoY29uc3QgY2hhclQq
IHMsIHNpemVfdHlwZSBwb3MgPSBucG9zKSB zdAogICAgeyByZXR1cm4gcmZpbmQgKHMsIHBv
cywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSByZmluZCAoY2hhclQgYywgc2l6
ZV90eXBlI yA9IG5wb3MpIGNvbnN0OwoKICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAoY29u
c3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25z ICAgeyByZXR1
cm4gZmluZF9maXJzdF9vZiAoc3RyLmRhdGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6
ZV90eXBlIGZpbmRfZmlyc3Rfb2YgKGNvbn NoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXpl
X3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfb2YgKGNvbnN0IGNoYXJUKiBz
LCBzaXpljĀ:cG cG9zID0gMCkg KHMs
IHBvcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSBmaW5jĀ:pc 0X29mIChj
aG AgIHsgcmV0dXJuIGZpbmQgKGMsIHBv
cyk7IH0KCiAgc2l6ZV90eXBlIGZpbmRfb F9vZiAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIs
IHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9sYXN0X29mIChz
dHIuZGF pLCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0KICBzaXplX3R5cGUgZmluZF9sYXN0X29m
IChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG NvbnN0OwogIHNp
emVfdHlwZSBmaW5kX2xhc3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gbnBv
cykgY29uc3QKICAgIHsgcmV0dXJuIGZpjĀ:bG dF9vZiAocywg 6ZV90eXBlIGZpbmRfbGFzdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBv
cyA9IG MpIGNvbnN0CiAgICB7IHJldHVybiByZmluZCAoYywgcG9zKTsgfQoKICBzaXplX3R5
cGUgZmluZF9maXJzdF9ub3Rfb2YgKGNvbnN0IGJhc2ljX3N0cmluZyYgcjĀ:CB XplX3R5cGUg
Zmlyc3Rfbm90X29mIChzdHIuZGF0YSgp
LCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0 zaXplX3R5cGUgZmluZF9maXJzdF9ub3Rfb2YgKGNv
bnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90
eXBlI mRfZmlyc3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IDAp
IGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2ZpcnN0X25vdF9vZiAocywg LCB0cmFpdHM6Omxl
bmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfbm90X29mIChjaGFyVCBjLCBzaXpl
X3R5cGUgcG9zID0gMCkgY29uc3Q7Cg NpemVfdHlwZSBmaW5kX2xhc3Rfbm90X29mIChjb25z
dCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJl
dHVyjĀ:aW X2xhc3Rfbm90 KSk7IH0K
ICBzaXplX3R5cGUgZmluZF9sYXN0X25vdF9vZiAoY29uc3QgY2hhclQ sIHNpemVfdHlwZSBw
b3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBzaXplX3R5cGUgZmluZF9sYXN0X25vdF9vZiAoY29u
c3QgY2hhclQqIHMsIHNpemVfdHlwZ 3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gZmlu
ZF9sYXN0X25vdF9vZiAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90eXBl
IGZ fbGFzdF9ub3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdDsK
CiAgYmFzaWNfc3RyaW5nIHN1YnN0ciAoc2l6ZV90eXBlIHBvcyA9ID NpemVfdHlwZSBuID0g
bnBvcykgY29uc3QKICAgIHsgcmV0dXJuIGJhc2ljX3N0cmluZyAoKnRoaXMsIHBvcywgbik7IH0K
CiAgaW50IGNvbXBhcmUgKGNvbnN0jĀ:c2 X3N0cmluZyYg lIG4gPSBucG9zKSBjb25zdDsKCiAgaW50IGNvbXBhcmUgKGNvbnN0IGNoYXJU
KijĀ:Bz plX3R5cGUgcG BhcmUgKGNv
bnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3QKI HsgcmV0dXJuIGNvbXBh
cmUgKHMsIHBvcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQoKICBpdGVyYXRvciBiZWdpbiAoKSB7
IHNlbGZpc2ggKCk7IHJldHVybiA 0aGlzKVswXTsgfQogIGl0ZXJhdG9yIGVuZCAoKSB7IHNl
bGZpc2ggKCk7IHJldHVybiAmKCp0aGlzKVtsZW5ndGggKCldOyB9Cgpwcml2YXRlOgogIGl0ZXJh
d GliZWdpbiAoKSBjb25zdCB7IHJldHVybiAmKCpyZXAgKCkpWzBdOyB9CiAgaXRlcmF0b3Ig
aWVuZCAoKSBjb25zdCB7IHJldHVybiAmKCpyZXAgKCkpW2xlbmd0jĀ:KV IH0KCnB1Ymxp zdCB7IHJldHVybiBpYmVnaW4gKCk7IH0KICBj
b25zdF9pdGVyYXRvciBlbmQgKC 9uc3QgeyByZXR1cm4gaWVuZCAoKTsgfQoKICByZXZlcnNl
X2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IgKGVuZCAoKSk7IH0K
jĀ:b2 dF9yZXZlcnNl dHVybiBjb25z
dF9yZXZlcnNlX2l0ZXJhdG9yIChlbmQgKCkpOyB9CiAgcmV2ZXJjĀ:pd yYXRvciByZW5 VnaW4gKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9p
dGVyYXRvciByZW5kKCkgY29uc CAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Ig
KGJlZ2luICgpKTsgfQoKcHJpdmF0ZToKICB2b2lkIGFsbG9jIChzaXplX3R5cGUgc2l6ZSwgYm9v zYXZlKTsKICBzdGF0aWMgc2l6ZV90eXBlIF9maW5kIChjb25zdCBjaGFyVCogcHRyLCBjaGFy
VCBjLCBzaXplX3R5cGUgeHBvcywgc2l6ZV90eXBlIGxlbik7Ci 5saW5lIGJvb2wgY2hlY2tf
cmVhbGxvYyAoc2l6ZV90eXBlIHMpIGNvbnN0OwoKICBzdGF0aWMgUmVwIG5pbFJlcDsKICBjaGFy
VCAqZGF0Owp9OwoKCnRlbXBsjĀ:ID bGFzcyBjaGFy +IHRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yPgpiYXNpY19zdHJpbmcgPGN JULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPjo6CnJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYjĀ:iB iwgSW5wdXRJd Cgp7CiAgY29uc3Qgc2l6ZV90eXBlIGxlbiA9IGxl
bmd0aCAoKTsKICBzaXplX3R gcG9zID0gaTEgLSBpYmVnaW4gKCk7CiAgc2l6ZV90eXBlIG4x
ID0gaTIgLSBpMTsKICBzaXplX3R5cGUgbjIgPSBqMiAtIGoxOwoKICAoKHZvaWQpICgoIShwb3 iBsZW4pKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiEocG9zID4gbGVuKSIsICIvdXNyL2luY2x1
ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiLCA0NDYsIF9fUFJF X0ZVTkNUSU9OX18pLCAwKSkp
OwogIGlmIChuMSA+IGxlbiAtIHBvcykKICAgIG4xID0gbGVuIC0gcG9zOwogICgodm9pZCkgKCgh
KGxlbiAtIG4xID4gbWF4X3 UgKCkgLSBuMikpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiIShs
ZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIpIiwgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvY dHJpbmcuaCIsIDQ0OSwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgc2l6ZV90IG5ld2xl
biA9IGxlbiAtIG4xICsgbjI7CgogIGlmIChjaGVja19yZWFjĀ:jI uZXdsZW4pKQo AobmV3bGVuKTsKICAgICAgcC0+Y29weSAoMCwgZGF0
YSAoKSwgcG9zKTsKICAgIjĀ:C0 29weSAocG9zI KHBvcyArIG4xKSk7CiAgICAgIGZvciAoOyBqMSAhPSBqMjsgKytqMSwgKytwb3Mp
ICAgICAgdHJhaXRzOjphc3NpZ24gKCgqcClbcG9zXSwgKmoxKTsKICAgICAgcmVwdXAgKHApOwog
ICAgfQogIGVsc2UKICAgIHsKICAgICAgcmVwICgpLT5tb3 hwb3MgKyBuMiwgZGF0YSAoKSAr
IHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAgZm9yICg7IGoxICE9IGoyOyArK2ox
LCArK3BvcykKICAgICAgjĀ:cm dHM6OmFzc2ln gcmVwICgpLT5sZW4gPSBuZXdsZW47CgogIHJldHVybiAqdGhpczsKfQoKdGVtcGx g
PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2lj
X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yP GVyYXRvcisgKGNvbnN0IGJhc2lj
X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAogICAgICAgICAgIGNvbnN0
IGJhc2ljX3N0cmluZyAjĀ:hc sIHRyYWl0cyw 5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAobGhzKTsKICBzdHIuYX 5k
IChyaHMpOwogIHJldHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJh
aXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNp dHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj4Kb3BlcmF0b3IrIChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJp
bmcgPGNoYXJULCB0cm MsIEFsbG9jYXRvcj4mIHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPiBzdHIgKGxocyk7CiAgc3RyLmFwcGVuZCAocmhzK CBy
ZXR1cm4gc3RyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg
QWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDx yVCwgdHJhaXRzLCBBbGxvY2F0b3I+
Cm9wZXJhdG9yKyAoY2hhclQgbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj4mI ykKewogIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh
dG9yPiBzdHIgKDEsIGxocyk7CiAgc3RyLmFwcGVuZCAocmhzKTsKICByZXR1cm4gc3Ry Cgp0
ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxp
bmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLC xvY2F0b3I+Cm9wZXJhdG9yKyAoY29u
c3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNo
YXJUKiByaHMpCnsKjĀ:YX Y19zdHJpbmcg saHMpOwogIHN0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIHN0cjsKfQoKdGVtcGxjĀ:gP s
YXNzIGNoYX 4KaW5saW5lIGJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yP GVyYXRvcisgKGNvbnN0IGJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjaGFyVCByaHMpCnsKICBiYXNp
Y19zdHJpbmcgPGN ULCB0cmFpdHMsIEFsbG9jYXRvcj4gc3RyIChsaHMpOwogIHN0ci5hcHBl
bmQgKDEsIHJocyk7CiAgcmV0dXJuIHN0cjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYX BjbGFz
cyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PSAoY29uc3Qg
YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBjĀ:Y2 b3I+JiBsaHMs 8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAg
cmV0dXJuIChsaHjĀ:9t FyZSAocmhzKS CBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PSAo
Y29uc3QgY2hhclQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxv
Y2F0b3I+JiByaHMpCnsKICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpID09IDApOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUg
Ym9vbApvcGVyYXRvcj09IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJo
cykgPT0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB
bGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yIT0gKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0
IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJu
IChyaHMuY29tcGFyZSAobGhzKSAhPSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFz
cyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPSAoY29uc3Qg
YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJU
KiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpICE9IDApOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApv
cGVyYXRvcjwgKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYg
bGhzLAogICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPCAwKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJv
b2wKb3BlcmF0b3I8IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykg
PiAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j
YXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhz
LmNvbXBhcmUgKHJocykgPCAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp
dHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+IChjb25zdCBjaGFyVCog
bGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykK
ewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgPCAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNo
YXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+
IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29u
c3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPiAwKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5l
IGJvb2wKb3BlcmF0b3I8PSAoY29uc3QgY2hhclQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKHJocy5jb21wYXJlIChs
aHMpID49IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg
QWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjw9IChjb25zdCBiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVy
biAobGhzLmNvbXBhcmUgKHJocykgPD0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xh
c3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPj0gKGNvbnN0
IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y
PiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSA8PSAwKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wK
b3BlcmF0b3I+PSAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpID49
IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgppbmxpbmUgYm9vbApvcGVyYXRvciE9IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChy
aHMpICE9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg
QWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj4gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAogICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu
ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFy
ZSAocmhzKSA+IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xh
c3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjw9IChjb25zdCBiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKICAgICAgICAgICAgY29uc3QgYmFzaWNf
c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKGxocy5j
b21wYXJlIChyaHMpIDw9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0
cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj49IChjb25zdCBiYXNpY19z
dHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKICAgICAgICAgICAgY29uc3Qg
YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4g
KGxocy5jb21wYXJlIChyaHMpID49IDApOwp9CgpjbGFzcyBpc3RyZWFtOyBjbGFzcyBvc3RyZWFt
Owp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPiBp
c3RyZWFtJgpvcGVyYXRvcj4+IChpc3RyZWFtJiwgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+Jik7CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz
cyBBbGxvY2F0b3I+IG9zdHJlYW0mCm9wZXJhdG9yPDwgKG9zdHJlYW0mLCBjb25zdCBiYXNpY19z
dHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mKTsKdGVtcGxhdGUgPGNsYXNzIGNoYXJU
LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4gaXN0cmVhbSYKZ2V0bGluZSAoaXN0cmVh
bSYsIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYsIGNoYXJUIGRlbGlt
ID0gJ1xuJyk7Cgp9CgoKIyAyOCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5jYyIg
MSAzCmV4dGVybiAiQysrIiB7CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj
bGFzcyBBbGxvY2F0b3I+CmlubGluZSB2b2lkICogYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+OjpSZXA6OgpvcGVyYXRvciBuZXcgKHNpemVfdCBzLCBzaXplX3QgZXh0cmEp
CnsKICByZXR1cm4gQWxsb2NhdG9yOjphbGxvY2F0ZShzICsgZXh0cmEgKiBzaXplb2YgKGNoYXJU
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0
b3I+CmlubGluZSB2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6
UmVwOjoKb3BlcmF0b3IgZGVsZXRlICh2b2lkICogcHRyKQp7CiAgQWxsb2NhdG9yOjpkZWFsbG9j
YXRlKHB0ciwgc2l6ZW9mKFJlcCkgKwogICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJl
dF9jYXN0PFJlcCAqPihwdHIpLT5yZXMgKgogICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yg
KGNoYXJUKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB
bGxvY2F0b3I+CmlubGluZSBzaXplX3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxv
Y2F0b3I+OjpSZXA6Ogpmcm9iX3NpemUgKHNpemVfdCBzKQp7CiAgc2l6ZV90IGkgPSAxNjsKICB3
aGlsZSAoaSA8IHMpIGkgKj0gMjsKICByZXR1cm4gaTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJU
LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwICoKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+OjpSZXA6OgpjcmVhdGUgKHNpemVfdCBleHRyYSkKewogIGV4dHJhID0gZnJv
Yl9zaXplIChleHRyYSArIDEpOwogIFJlcCAqcCA9IG5ldyAoZXh0cmEpIFJlcDsKICBwLT5yZXMg
PSBleHRyYTsKICBwLT5yZWYgPSAxOwogIHAtPnNlbGZpc2ggPSBmYWxzZTsKICByZXR1cm4gcDsK
fQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4K
Y2hhclQgKiBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CmNs
b25lICgpCnsKICBSZXAgKnAgPSBSZXA6OmNyZWF0ZSAobGVuKTsKICBwLT5jb3B5ICgwLCBkYXRh
ICgpLCBsZW4pOwogIHAtPmxlbiA9IGxlbjsKICByZXR1cm4gcC0+ZGF0YSAoKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJv
b2wgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6OgpleGNlc3Nf
c2xvcCAoc2l6ZV90IHMsIHNpemVfdCByKQp7CiAgcmV0dXJuIDIgKiAocyA8PSAxNiA/IDE2IDog
cykgPCByOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxs
b2NhdG9yPgppbmxpbmUgYm9vbCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj46OgpjaGVja19yZWFsbG9jIChiYXNpY19zdHJpbmc6OnNpemVfdHlwZSBzKSBjb25zdAp7CiAg
cyArPSBzaXplb2YgKGNoYXJUKTsKICByZXAgKCktPnNlbGZpc2ggPSBmYWxzZTsKICByZXR1cm4g
KHJlcCAoKS0+cmVmID4gMQogICAgICAgICAgfHwgcyA+IGNhcGFjaXR5ICgpCiAgICAgICAgICB8
fCBSZXA6OmV4Y2Vzc19zbG9wIChzLCBjYXBhY2l0eSAoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
Y2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgp2b2lkIGJhc2ljX3N0cmluZyA8
Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmFsbG9jIChiYXNpY19zdHJpbmc6OnNpemVfdHlw
ZSBfX3NpemUsIGJvb2wgX19zYXZlKQp7CiAgaWYgKCEgY2hlY2tfcmVhbGxvYyAoX19zaXplKSkK
ICAgIHJldHVybjsKCiAgUmVwICpwID0gUmVwOjpjcmVhdGUgKF9fc2l6ZSk7CgogIGlmIChfX3Nh
dmUpCiAgICB7CiAgICAgIHAtPmNvcHkgKDAsIGRhdGEgKCksIGxlbmd0aCAoKSk7CiAgICAgIHAt
PmxlbiA9IGxlbmd0aCAoKTsKICAgIH0KICBlbHNlCiAgICBwLT5sZW4gPSAwOwoKICByZXB1cCAo
cCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0
b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYKYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoc2l6ZV90eXBlIHBvczEsIHNp
emVfdHlwZSBuMSwKICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBw
b3MyLCBzaXplX3R5cGUgbjIpCnsKICBjb25zdCBzaXplX3QgbGVuMiA9IHN0ci5sZW5ndGggKCk7
CgogIGlmIChwb3MxID09IDAgJiYgbjEgPj0gbGVuZ3RoICgpICYmIHBvczIgPT0gMCAmJiBuMiA+
PSBsZW4yKQogICAgcmV0dXJuIG9wZXJhdG9yPSAoc3RyKTsKCiAgKCh2b2lkKSAoKCEocG9zMiA+
IGxlbjIpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiEocG9zMiA+IGxlbjIpIiwgIi91c3IvaW5j
bHVkZS9nKystMy9zdGQvYmFzdHJpbmcuY2MiLCAxMjYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAw
KSkpOwoKICBpZiAobjIgPiBsZW4yIC0gcG9zMikKICAgIG4yID0gbGVuMiAtIHBvczI7CgogIHJl
dHVybiByZXBsYWNlIChwb3MxLCBuMSwgc3RyLmRhdGEgKCkgKyBwb3MyLCBuMik7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSB2
b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKY29weSAo
c2l6ZV90IHBvcywgY29uc3QgY2hhclQgKnMsIHNpemVfdCBuKQp7CiAgaWYgKG4pCiAgICB0cmFp
dHM6OmNvcHkgKGRhdGEgKCkgKyBwb3MsIHMsIG4pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQs
IGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9pZCBiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6Cm1vdmUgKHNpemVfdCBwb3MsIGNvbnN0
IGNoYXJUICpzLCBzaXplX3QgbikKewogIGlmIChuKQogICAgdHJhaXRzOjptb3ZlIChkYXRhICgp
ICsgcG9zLCBzLCBuKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs
YXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Jgpi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZXBsYWNlIChzaXplX3R5
cGUgcG9zLCBzaXplX3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbjIpCnsKICBj
b25zdCBzaXplX3R5cGUgbGVuID0gbGVuZ3RoICgpOwogICgodm9pZCkgKCghKHBvcyA+IGxlbikp
ID8gMCA6IChfX2Fzc2VydF9mYWlsICgiIShwb3MgPiBsZW4pIiwgIi91c3IvaW5jbHVkZS9nKyst
My9zdGQvYmFzdHJpbmcuY2MiLCAxNTYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogIGlm
IChuMSA+IGxlbiAtIHBvcykKICAgIG4xID0gbGVuIC0gcG9zOwogICgodm9pZCkgKCghKGxlbiAt
IG4xID4gbWF4X3NpemUgKCkgLSBuMikpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiIShsZW4gLSBu
MSA+IG1heF9zaXplICgpIC0gbjIpIiwgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcu
Y2MiLCAxNTksIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogIHNpemVfdCBuZXdsZW4gPSBs
ZW4gLSBuMSArIG4yOwoKICBpZiAoY2hlY2tfcmVhbGxvYyAobmV3bGVuKSkKICAgIHsKICAgICAg
UmVwICpwID0gUmVwOjpjcmVhdGUgKG5ld2xlbik7CiAgICAgIHAtPmNvcHkgKDAsIGRhdGEgKCks
IHBvcyk7CiAgICAgIHAtPmNvcHkgKHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxlbiAt
IChwb3MgKyBuMSkpOwogICAgICBwLT5jb3B5IChwb3MsIHMsIG4yKTsKICAgICAgcmVwdXAgKHAp
OwogICAgfQogIGVsc2UKICAgIHsKICAgICAgcmVwICgpLT5tb3ZlIChwb3MgKyBuMiwgZGF0YSAo
KSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAgcmVwICgpLT5jb3B5IChwb3Ms
IHMsIG4yKTsKICAgI aW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcu
Y2MiLCAxOTUsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogIHNpemVfdCBuZXdsZW4gPSBs
ZW4gLSBuMSArIG4yOwoKICBpZiAoY2hlY2tfcmVhbGxvYyAobmV3bGVuKSkKICAgIHsKICAgICAg
UmVwICpwID0gUmVwOjpjcmVhdGUgKG5ld2xlbik7CiAgICAgIHAtPmNvcHkgKDAsIGRhdGEgKCks
IHBvcyk7CiAgICAgIHAtPmNvcHkgKHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxlbiAt
IChwb3MgKyBuMSkpOwogICAgICBwLT5zZXQgKHBvcywgYywgbjIpOwogICAgICByZXB1cCAocCk7
CiAgICB9CiAgZWxzZQogICAgewogICAgICByZXAgKCktPm1vdmUgKHBvcyArIG4yLCBkYXRhICgp
ICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICByZXAgKCktPnNldCAocG9zLCBj
LCBuMik7CiAgICB9CiAgcmVwICgpLT5sZW4gPSBuZXdsZW47CgogIHJldHVybiAqdGhpczsKfQoK
dGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4Kdm9p
ZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZXNpemUgKHNpemVf
dHlwZSBuLCBjaGFyVCBjKQp7CiAgKCh2b2lkKSAoKCEobiA+IG1heF9zaXplICgpKSkgPyAwIDog
KF9fYXNzZXJ0X2ZhaWwgKCIhKG4gPiBtYXhfc2l6ZSAoKSkiLCAiL3Vzci9pbmNsdWRlL2crKy0z
L3N0ZC9iYXN0cmluZy5jYyIsIDIyMCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CgogIGlm
IChuID4gbGVuZ3RoICgpKQogICAgYXBwZW5kIChuIC0gbGVuZ3RoICgpLCBjKTsKICBlbHNlCiAg
ICBlcmFzZSAobik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz
cyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6
ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmNvcHkgKGNo
YXJUKiBzLCBzaXplX3R5cGUgbiwgc2l6ZV90eXBlIHBvcykgY29uc3QKewogICgodm9pZCkgKCgh
KHBvcyA+IGxlbmd0aCAoKSkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiIShwb3MgPiBsZW5ndGgg
KCkpIiwgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuY2MiLCAyMzMsIF9fUFJFVFRZ
X0ZVTkNUSU9OX18pLCAwKSkpOwoKICBpZiAobiA+IGxlbmd0aCAoKSAtIHBvcykKICAgIG4gPSBs
ZW5ndGggKCkgLSBwb3M7CgogIHRyYWl0czo6Y29weSAocywgZGF0YSAoKSArIHBvcywgbik7CiAg
cmV0dXJuIG47Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB
bGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90
eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmQgKGNvbnN0
IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIHNpemVfdCB4
cG9zID0gcG9zOwogIGZvciAoOyB4cG9zICsgbiA8PSBsZW5ndGggKCk7ICsreHBvcykKICAgIGlm
ICh0cmFpdHM6OmVxIChkYXRhICgpIFt4cG9zXSwgKnMpCiAgICAgICAgJiYgdHJhaXRzOjpjb21w
YXJlIChkYXRhICgpICsgeHBvcywgcywgbikgPT0gMCkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0
dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB
bGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46
OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpfZmlu
ZCAoY29uc3QgY2hhclQqIHB0ciwgY2hhclQgYywgc2l6ZV90eXBlIHhwb3MsIHNpemVfdHlwZSBs
ZW4pCnsKICBmb3IgKDsgeHBvcyA8IGxlbjsgKyt4cG9zKQogICAgaWYgKHRyYWl0czo6ZXEgKHB0
ciBbeHBvc10sIGMpKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxh
dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZCAoY2hhclQgYywgc2l6ZV90eXBlIHBvcykg
Y29uc3QKewogIHJldHVybiBfZmluZCAoZGF0YSAoKSwgYywgcG9zLCBsZW5ndGggKCkpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZmluZCAoY29uc3QgY2hhclQqIHMsIHNp
emVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgaWYgKG4gPiBsZW5ndGggKCkpCiAg
ICByZXR1cm4gbnBvczsKCiAgc2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSBuOwogIGlmICh4cG9z
ID4gcG9zKQogICAgeHBvcyA9IHBvczsKCiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7ICkKICAg
IGlmICh0cmFpdHM6OmVxIChkYXRhICgpIFt4cG9zXSwgKnMpCiAgICAgICAgJiYgdHJhaXRzOjpj
b21wYXJlIChkYXRhICgpICsgeHBvcywgcywgbikgPT0gMCkKICAgICAgcmV0dXJuIHhwb3M7CiAg
cmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz
cyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6
ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJmaW5kIChj
aGFyVCBjLCBzaXplX3R5cGUgcG9zKSBjb25zdAp7CiAgaWYgKDEgPiBsZW5ndGggKCkpCiAgICBy
ZXR1cm4gbnBvczsKCiAgc2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSAxOwogIGlmICh4cG9zID4g
cG9zKQogICAgeHBvcyA9IHBvczsKCiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7ICkKICAgIGlm
ICh0cmFpdHM6OmVxIChkYXRhICgpIFt4cG9zXSwgYykpCiAgICAgIHJldHVybiB4cG9zOwogIHJl
dHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg
QWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVf
dHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0
X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsK
ICBzaXplX3QgeHBvcyA9IHBvczsKICBmb3IgKDsgeHBvcyA8IGxlbmd0aCAoKTsgKyt4cG9zKQog
ICAgaWYgKF9maW5kIChzLCBkYXRhICgpIFt4cG9zXSwgMCwgbikgIT0gbnBvcykKICAgICAgcmV0
dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg
dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y
Pjo6CmZpbmRfbGFzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlw
ZSBuKSBjb25zdAp7CiAgaWYgKGxlbmd0aCgpID09IDApCiAgICByZXR1cm4gbnBvczsKICBzaXpl
X3QgeHBvcyA9IGxlbmd0aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9z
OwogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOykKICAgIGlmIChfZmluZCAocywgZGF0YSAoKSBb
eHBvc10sIDAsIG4pICE9IG5wb3MpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19z
dHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0X25vdF9vZiAoY29u
c3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgc2l6ZV90
IHhwb3MgPSBwb3M7CiAgZm9yICg7IHhwb3MgPCBsZW5ndGggKCk7ICsreHBvcykKICAgIGlmIChf
ZmluZCAocywgZGF0YSAoKSBbeHBvc10sIDAsIG4pID09IG5wb3MpCiAgICAgIHJldHVybiB4cG9z
OwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywg
Y2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46
OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5k
X2ZpcnN0X25vdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcykgY29uc3QKewogIHNpemVfdCB4
cG9zID0gcG9zOwogIGZvciAoOyB4cG9zIDwgbGVuZ3RoICgpOyArK3hwb3MpCiAgICBpZiAodHJh
aXRzOjpuZSAoZGF0YSAoKSBbeHBvc10sIGMpKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4g
bnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j
YXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUK
YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9sYXN0X25vdF9v
ZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAg
aWYgKGxlbmd0aCgpID09IDApCiAgICByZXR1cm4gbnBvczsKICBzaXplX3QgeHBvcyA9IGxlbmd0
aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwogIGZvciAoKyt4cG9z
OyB4cG9zLS0gPiAwOykKICAgIGlmIChfZmluZCAocywgZGF0YSAoKSBbeHBvc10sIDAsIG4pID09
IG5wb3MpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2xhc3Rfbm90X29mIChjaGFyVCBjLCBzaXplX3R5cGUg
cG9zKSBjb25zdAp7CiAgaWYgKGxlbmd0aCgpID09IDApCiAgICByZXR1cm4gbnBvczsKICBzaXpl
X3QgeHBvcyA9IGxlbmd0aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9z
OwogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOykKICAgIGlmICh0cmFpdHM6Om5lIChkYXRhICgp
IFt4cG9zXSwgYykpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbnQgYmFzaWNf
c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKY29tcGFyZSAoY29uc3QgYmFzaWNf
c3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgKCh2b2lk
KSAoKCEocG9zID4gbGVuZ3RoICgpKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIhKHBvcyA+IGxl
bmd0aCAoKSkiLCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5jYyIsIDM5OSwgX19Q
UkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CgogIHNpemVfdCBybGVuID0gbGVuZ3RoICgpIC0gcG9z
OwogIGlmIChybGVuID4gbikKICAgIHJsZW4gPSBuOwogIGlmIChybGVuID4gc3RyLmxlbmd0aCAo
KSkKICAgIHJsZW4gPSBzdHIubGVuZ3RoICgpOwogIGludCByID0gdHJhaXRzOjpjb21wYXJlIChk
YXRhICgpICsgcG9zLCBzdHIuZGF0YSAoKSwgcmxlbik7CiAgaWYgKHIgIT0gMCkKICAgIHJldHVy
biByOwogIGlmIChybGVuID09IG4pCiAgICByZXR1cm4gMDsKICByZXR1cm4gKGxlbmd0aCAoKSAt
IHBvcykgLSBzdHIubGVuZ3RoICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRy
YWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbnQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+OjoKY29tcGFyZSAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVf
dHlwZSBuKSBjb25zdAp7CiAgKCh2b2lkKSAoKCEocG9zID4gbGVuZ3RoICgpKSkgPyAwIDogKF9f
YXNzZXJ0X2ZhaWwgKCIhKHBvcyA+IGxlbmd0aCAoKSkiLCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0
ZC9iYXN0cmluZy5jYyIsIDQxOCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CgogIHNpemVf
dCBybGVuID0gbGVuZ3RoICgpIC0gcG9zOwogIGlmIChybGVuID4gbikKICAgIHJsZW4gPSBuOwog
IGludCByID0gdHJhaXRzOjpjb21wYXJlIChkYXRhICgpICsgcG9zLCBzLCBybGVuKTsKICBpZiAo
ciAhPSAwKQogICAgcmV0dXJuIHI7CiAgcmV0dXJuIChsZW5ndGggKCkgLSBwb3MpIC0gbjsKfQoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpp
c3RyZWFtICYKb3BlcmF0b3I+PiAoaXN0cmVhbSAmaXMsIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPiAmcykKewogIGludCB3ID0gaXMud2lkdGggKDApOwogIGlmIChpcy5p
cGZ4MCAoKSkKICAgIHsKICAgICAgcmVnaXN0ZXIgc3RyZWFtYnVmICpzYiA9IGlzLnJkYnVmICgp
OwogICAgICBzLnJlc2l6ZSAoMCk7CiAgICAgIHdoaWxlICgxKQogICAgICAgIHsKICAgICAgICAg
IGludCBjaCA9IHNiLT5zYnVtcGMgKCk7CiAgICAgICAgICBpZiAoY2ggPT0gKC0xKSkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIGlzLnNldHN0YXRlIChpb3M6OmVvZmJpdCk7CiAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKHRyYWl0czo6aXNf
ZGVsIChjaCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzYi0+c3VuZ2V0YyAoKTsKICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgcyArPSBzdGF0aWNfY2Fz
dDxjaGFyVD4gKGNoKTsKICAgICAgICAgIGlmICgtLXcgPT0gMSkKICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgfQogICAgfQoKICBpcy5pc2Z4ICgpOwogIGlmIChzLmxlbmd0aCAoKSA9PSAwKQog
ICAgaXMuc2V0c3RhdGUgKGlvczo6ZmFpbGJpdCk7CgogIHJldHVybiBpczsKfQoKdGVtcGxhdGUg
PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4Kb3N0cmVhbSAmCm9w
ZXJhdG9yPDwgKG9zdHJlYW0gJm8sIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPiYgcykKewogIHJldHVybiBvLndyaXRlIChzLmRhdGEgKCksIHMubGVuZ3RoICgp
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv
cj4KaXN0cmVhbSYKZ2V0bGluZSAoaXN0cmVhbSAmaXMsIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPiYgcywgY2hhclQgZGVsaW0pCnsKICBpZiAoaXMuaXBmeDEgKCkpCiAg
ICB7CiAgICAgIHNpemVfdCBjb3VudCA9IDA7CiAgICAgIHN0cmVhbWJ1ZiAqc2IgPSBpcy5yZGJ1
ZiAoKTsKICAgICAgcy5yZXNpemUgKDApOwoKICAgICAgd2hpbGUgKDEpCiAgICAgICAgewogICAg
ICAgICAgaW50IGNoID0gc2ItPnNidW1wYyAoKTsKICAgICAgICAgIGlmIChjaCA9PSAoLTEpKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaXMuc2V0c3RhdGUgKGNvdW50ID09IDAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPyAoaW9zOjpmYWlsYml0fGlvczo6ZW9mYml0KQogICAgICAg
ICAgICAgICAgICAgICAgICAgICA6IGlvczo6ZW9mYml0KTsKICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgfQoKICAgICAgICAgICsrY291bnQ7CgogICAgICAgICAgaWYgKGNoID09IGRl
bGltKQogICAgICAgICAgICBicmVhazsKCiAgICAgICAgICBzICs9IHN0YXRpY19jYXN0PGNoYXJU
PiAoY2gpOwoKICAgICAgICAgIGlmIChzLmxlbmd0aCAoKSA9PSBzLm5wb3MgLSAxKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgaXMuc2V0c3RhdGUgKGlvczo6ZmFpbGJpdCk7CiAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgoKCiAgaXMuaXNmeCAo
KTsKCiAgcmV0dXJuIGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywg
Y2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46
OlJlcApiYXNpY19zdHJpbmc8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6bmlsUmVwID0geyAw
LCAwLCAxLCBmYWxzZSB9OwoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs
YXNzIEFsbG9jYXRvcj4KY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Ojpu
cG9zOwoKfQojIDY2MSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKIyA3
ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RyaW5nIiAyIDMKCmV4dGVybiAiQysrIiB7CnR5cGVkZWYg
YmFzaWNfc3RyaW5nIDxjaGFyPiBzdHJpbmc7Cgp9CgojIDcgIi4uLy4uLy4uL3NyYy9mcmFtZXdv
cmsvdXRpbC9NZW1JbmZvLmgiIDIKCgoKCgoKCmNsYXNzIE1lbUluZm8gewpwdWJsaWM6CgoKCgog
ICAgY2xhc3MgUHJvY01lbSB7CiAgICAgIHB1YmxpYzoKICAgICAgICBsb25nIGRhdGFTaXplOwog
ICAgICAgIGxvbmcgcmVzaWRlbnREYXRhU2l6ZTsKICAgICAgICBsb25nIHJlc2lkZW50U3RhY2tT
aXplOwogICAgfTsKCgoKCiAgICB2aXJ0dWFsIGludCBtZW1Vc2FnZSgpIGNvbnN0ID0gMDsKCgoK
CgogICAgdGVtcGxhdGU8Y2xhc3MgRUxFTUVOVD4KICAgIHN0YXRpYyBpbnQgdmVjdG9yU2l6ZShj
b25zdCB2ZWN0b3I8RUxFTUVOVD4mIHZlY3QpIHsKICAgICAgICByZXR1cm4gc2l6ZW9mKHZlY3Rv
cjxFTEVNRU5UPikgKyAodmVjdC5jYXBhY2l0eSgpICogc2l6ZW9mKEVMRU1FTlQpKTsKICAgIH0K
CgoKCgogICAgdGVtcGxhdGU8Y2xhc3MgRUxFTUVOVD4KICAgIHN0YXRpYyBpbnQgdmVjdG9ySW5m
byhjb25zdCB2ZWN0b3I8RUxFTUVOVD4mIHZlY3QpIHsKCiAgICAgICAgaW50IHRvdGFsID0gc2l6
ZW9mKHZlY3RvcjxFTEVNRU5UPikKICAgICAgICAgICAgKyAodmVjdC5jYXBhY2l0eSgpICogc2l6
ZW9mKEVMRU1FTlQpKTsKICAgICAgICBpbnQgbGVuID0gdmVjdC5zaXplKCk7CiAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICB0b3RhbCArPSAodmVjdFtp
XSkubWVtVXNhZ2UoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRvdGFsOwogICAgfQoKCgoK
CiAgICB0ZW1wbGF0ZTxjbGFzcyBFTEVNRU5UPgogICAgc3RhdGljIGludCBwdHJWZWN0b3JJbmZv
KGNvbnN0IHZlY3RvcjxFTEVNRU5UPiYgdmVjdCkgewoKICAgICAgICBpbnQgdG90YWwgPSBzaXpl
b2YodmVjdG9yPEVMRU1FTlQ+KQogICAgICAgICAgICArICh2ZWN0LmNhcGFjaXR5KCkgKiBzaXpl
b2YoRUxFTUVOVCkpOwogICAgICAgIGludCBsZW4gPSB2ZWN0LnNpemUoKTsKICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgIHRvdGFsICs9ICh2ZWN0W2ld
KS0+bWVtVXNhZ2UoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRvdGFsOwogICAgfQoKCgoK
ICAgIHN0YXRpYyBpbnQgb2JqU2l6ZShjb25zdCBzdHJpbmcmIHN0cikgewogICAgICAgIHJldHVy
biBzaXplb2Yoc3RyaW5nKSArIHN0ci5jYXBhY2l0eSgpOwogICAgfQoKCgoKICAgIHN0YXRpYyBQ
cm9jTWVtIGdldFByb2NNZW1TaXplKCk7Cn07CgojIDIxICIuLi8uLi8uLi9zcmMvZnJhbWV3b3Jr
L2RwLXN0cnVjdHMvUHJvYkFycmF5LmgiIDIKIyAzMCAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay9k
cC1zdHJ1Y3RzL1Byb2JBcnJheS5oIgpjbGFzcyBQcm9iQXJyYXk6IHB1YmxpYyBNZW1JbmZvIHsK
IHByaXZhdGU6CiAgICBpbnQgbGVuZ3RoOwogICAgaW50IGVsZW1lbnREaXN0OwogICAgUEdGUHJv
YiogcHJvYnM7CiAgICBib29sIG93bk1lbW9yeTsKCiAgcHVibGljOgoKCgoKCgogICAgUHJvYkFy
cmF5KGludCBsZW4gPSAwLAogICAgICAgICAgICAgIFBHRlByb2IgaW5pdFByb2IgPSBQR0ZQcm9i
OjpaRVJPKToKICAgICAgICBsZW5ndGgobGVuKSwKICAgICAgICBlbGVtZW50RGlzdCgxKSwKICAg
ICAgICBwcm9icyhfX251bGwpLAogICAgICAgIG93bk1lbW9yeSh0cnVlKSB7CiAgICAgICAgaWYg
KGxlbiA+IDApIHsKICAgICAgICAgICAgcHJvYnMgPSBuZXcgUEdGUHJvYltsZW5dKGluaXRQcm9i
KTsKICAgICAgICB9CiAgICB9CgoKCgogICAgUHJvYkFycmF5KGNvbnN0IFByb2JBcnJheSYgc3Jj
KTsKCgoKCgogICAgdm9pZCBzZXRTdG9yYWdlKGludCBsZW4sCiAgICAgICAgICAgICAgICAgICAg
UEdGUHJvYiogc3RvcmFnZSwKICAgICAgICAgICAgICAgICAgICBpbnQgY2VsbERpc3QgPSAxKSB7
CiAgICAgICAgaWYgKG93bk1lbW9yeSAmJiAocHJvYnMgIT0gX19udWxsKSkgewogICAgICAgICAg
ICBkZWxldGVbXSBwcm9iczsKICAgICAgICB9CiAgICAgICAgbGVuZ3RoPSBsZW47CiAgICAgICAg
ZWxlbWVudERpc3QgPSBjZWxsRGlzdDsKICAgICAgICBwcm9icyA9IHN0b3JhZ2U7CiAgICAgICAg
b3duTWVtb3J5ID0gZmFsc2U7CiAgICB9CgoKCgoKCiAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKGlu
dCBuZXdMZW4pOwoKCgoKICAgIHZpcnR1YWwgflByb2JBcnJheSgpOwoKCgoKICAgIGlubGluZSBp
bnQgZ2V0TGVuZ3RoKCkgY29uc3QgewogICAgICAgIHJldHVybiBsZW5ndGg7CiAgICB9CgoKCgog
ICAgaW5saW5lIGNvbnN0IFBHRlByb2ImIG9wZXJhdG9yW10oaW50IGlkeCkgY29uc3QgewogICAg
ICAgICgodm9pZCkgKCgoaWR4ID49IDApICYmIChpZHggPCBsZW5ndGgpKSA/IDAgOiAoX19hc3Nl
cnRfZmFpbCAoIihpZHggPj0gMCkgJiYgKGlkeCA8IGxlbmd0aCkiLCAiLi4vLi4vLi4vc3JjL2Zy
YW1ld29yay9kcC1zdHJ1Y3RzL1Byb2JBcnJheS5oIiwgOTksIF9fUFJFVFRZX0ZVTkNUSU9OX18p
LCAwKSkpOwogICAgICAgIHJldHVybiBwcm9ic1tpZHgqZWxlbWVudERpc3RdOwogICAgfQoKCgoK
ICAgIGlubGluZSBQR0ZQcm9iJiBvcGVyYXRvcltdKGludCBpZHgpIHsKICAgICAgICAoKHZvaWQp
ICgoKGlkeCA+PSAwKSAmJiAoaWR4IDwgbGVuZ3RoKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIo
aWR4ID49IDApICYmIChpZHggPCBsZW5ndGgpIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvZHAt
c3RydWN0cy9Qcm9iQXJyYXkuaCIsIDEwNywgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAg
ICAgICAgcmV0dXJuIHByb2JzW2lkeCplbGVtZW50RGlzdF07CiAgICB9CgoKCgogICAgaW5saW5l
IGNvbnN0IFBHRlByb2ImIGdldChpbnQgaWR4KSBjb25zdCB7CiAgICAgICAgKCh2b2lkKSAoKChp
ZHggPj0gMCkgJiYgKGlkeCA8IGxlbmd0aCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiKGlkeCA+
PSAwKSAmJiAoaWR4IDwgbGVuZ3RoKSIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL2RwLXN0cnVj
dHMvUHJvYkFycmF5LmgiLCAxMTUsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgICAg
IHJldHVybiBwcm9ic1tpZHgqZWxlbWVudERpc3RdOwogICAgfQoKCgoKICAgIGlubGluZSBQR0ZQ
cm9iJiBnZXQoaW50IGlkeCkgewogICAgICAgICgodm9pZCkgKChpZHggPj0gMCkgPyAwIDogKF9f
YXNzZXJ0X2ZhaWwgKCJpZHggPj0gMCIsICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL2RwLXN0cnVj
dHMvUHJvYkFycmF5LmgiLCAxMjMsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgICAg
ICgodm9pZCkgKChpZHggPCBsZW5ndGgpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiaWR4IDwgbGVu
Z3RoIiwgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvZHAtc3RydWN0cy9Qcm9iQXJyYXkuaCIsIDEy
NCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgICAgcmV0dXJuIHByb2JzW2lkeCpl
bGVtZW50RGlzdF07CiAgICB9CgoKCgogICAgdm9pZCB6ZXJvKCk7CgoKCgoKCiAgICBpbmxpbmUg
UEdGUHJvYiBpbmNyKGludCBpZHgsIFBHRlByb2IgdmFsdWUpIHsKICAgICAgICBQR0ZQcm9iJiBw
cm9iID0gZ2V0KGlkeCk7CiAgICAgICAgcHJvYiArPSB2YWx1ZTsKICAgICAgICByZXR1cm4gcHJv
YjsKICAgIH07CiMgMTUyICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL2RwLXN0cnVjdHMvUHJvYkFy
cmF5LmgiCiAgICB2b2lkIGFkZChjb25zdCBQcm9iQXJyYXkmIGFycmF5Mik7CiMgMTYxICIuLi8u
Li8uLi9zcmMvZnJhbWV3b3JrL2RwLXN0cnVjdHMvUHJvYkFycmF5LmgiCiAgICB2b2lkIGVsZW1l
bnRQcm9kdWN0KGNvbnN0IFByb2JBcnJheSYgYXJyYXkyKTsKCgoKCiAgICB2b2lkIG5vcm1hbGl6
ZSgpOwoKCgoKCgoKICAgIFBHRlByb2Igc3F1YXJlRGlmZihjb25zdCBQcm9iQXJyYXkmIGFycmF5
MikgY29uc3Q7CiMgMTg0ICIuLi8uLi8uLi9zcmMvZnJhbWV3b3JrL2RwLXN0cnVjdHMvUHJvYkFy
cmF5LmgiCiAgICB2b2lkIG1peChkb3VibGUgbWl4UGVyY2VudCwKICAgICAgICAgICAgIGNvbnN0
IFByb2JBcnJheSYgYXJyYXkyKTsKCgoKCiAgICB2b2lkIHByaW50KG9zdHJlYW0mIG91dGZpbGUp
OwoKCgoKCiAgICB2aXJ0dWFsIGludCBtZW1Vc2FnZSgpIGNvbnN0Owp9OwoKCgojIDIwICIuLi8u
Li8uLi9zcmMvZnJhbWV3b3JrL2RwLXN0cnVjdHMvUHJvYk1hdHJpeEFsbG9jYXRvci5oIiAxCmNs
YXNzIFByb2JBcnJheTsKCgoKCmNsYXNzIFByb2JNYXRyaXhBbGxvY2F0b3IgewogIHB1YmxpYzoK
CgoKCiAgICB2aXJ0dWFsIH5Qcm9iTWF0cml4QWxsb2NhdG9yKCkgewogICAgfQojIDQ0ICIuLi8u
Li8uLi9zcmMvZnJhbWV3b3JrL2RwLXN0cnVjdHMvUHJvYk1hdHJpeEFsbG9jYXRvci5oIgogICAg
dmlydHVhbCB2b2lkIGFsbG9jQXJyYXlzKGludCBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUHJvYkFycmF5KiBhcnJheVB0cnNbXSkgPSAwOwoKfTsKCgoKCnRlbXBsYXRlPGNsYXNz
IFBST0JBUlJBWT4KY2xhc3MgUHJvYk1hdHJpeEFsbG9jYXRvclRtcGw6IHB1YmxpYyBQcm9iTWF0
cml4QWxsb2NhdG9yIHsKICBwcml2YXRlOgogICAgUFJPQkFSUkFZKiBwcm9iQXJyYXlPYmpzOwog
IHB1YmxpYzoKCgoKICAgIFByb2JNYXRyaXhBbGxvY2F0b3JUbXBsKCk6CiAgICAgICAgcHJvYkFy
cmF5T2JqcyhfX251bGwpIHsKICAgIH0KCgoKCiAgICB+UHJvYk1hdHJpeEFsbG9jYXRvclRtcGwo
KSB7CiAgICAgICAgaWYgKHByb2JBcnJheU9ianMgIT0gX19udWxsKSB7CiAgICAgICAgICAgIGRl
bGV0ZVtdIHByb2JBcnJheU9ianM7CiAgICAgICAgfQogICAgfQoKCgoKICAgIHZpcnR1YWwgdm9p
ZCBhbGxvY0FycmF5cyhpbnQgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2JB
cnJheSogYXJyYXlQdHJzW10pIHsKICAgICAgICBpZiAocHJvYkFycmF5T2JqcyAhPSBfX251bGwp
IHsKICAgICAgICAgICAgZGVsZXRlW10gcHJvYkFycmF5T2JqczsKICAgICAgICAgICAgcHJvYkFy
cmF5T2JqcyA9IF9fbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKGxlbiA+IDApIHsKICAgICAg
ICAgICAgcHJvYkFycmF5T2JqcyA9IG5ldyBQUk9CQVJSQVlbbGVuXTsKICAgICAgICAgICAgZm9y
IChpbnQgaWR4ID0gMDsgaWR4IDwgbGVuOyBpZHgrKykgewogICAgICAgICAgICAgICAgYXJyYXlQ
dHJzW2lkeF0gPSAmKHByb2JBcnJheU9ianNbaWR4XSk7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICB9Cn07CgojIDIwMSAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay9kcC1zdHJ1Y3RzL1Byb2JB
cnJheS5oIiAyCgoKCgoKCmNsYXNzIFByb2JBcnJheUFsbG9jOiBwdWJsaWMgUHJvYk1hdHJpeEFs
bG9jYXRvclRtcGw8UHJvYkFycmF5PiB7CiAgcHVibGljOgoKCgogICAgaW5saW5lIFByb2JBcnJh
eUFsbG9jKCkgewogICAgfQp9OwoKIyAyMCAiUHJvYk1hdHJpeC5oIiAyCgoKCiMgNTggIi91c3Iv
aW5jbHVkZS9hc3NlcnQuaCIgMSAzCmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0
X2ZhaWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNo
YXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5f
XykpOwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9f
Y29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IF9fbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3Jl
dHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3NlcnRp
b24sIGNvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fbGluZSkKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKfQoKIyAyMyAiUHJvYk1hdHJpeC5oIiAyCiMgMzgg
IlByb2JNYXRyaXguaCIKY2xhc3MgUHJvYk1hdHJpeDogcHVibGljIE1lbUluZm8gewogIHByaXZh
dGU6CiAgICBpbnQgbnVtUm93czsKICAgIGludCBudW1Db2x1bW5zOwoKCiAgICBQR0ZQcm9iKiBt
ZW1vcnk7CgoKICAgIFByb2JBcnJheSoqIHJvd3M7CiAgICBQcm9iQXJyYXkqKiBjb2x1bW5zOwoK
CiAgICBQcm9iTWF0cml4QWxsb2NhdG9yKiByb3dBbGxvY2F0b3I7CiAgICBQcm9iTWF0cml4QWxs
b2NhdG9yKiBjb2x1bW5BbGxvY2F0b3I7CgoKCgogICAgdm9pZCByZWxlYXNlKCk7CgogIHB1Ymxp
YzoKIyA3MCAiUHJvYk1hdHJpeC5oIgogICAgUHJvYk1hdHJpeChpbnQgbnVtTWF0cml4Um93cyA9
IDAsCiAgICAgICAgICAgICAgIGludCBudW1NYXRyaXhDb2x1bW5zID0gMCwKICAgICAgICAgICAg
ICAgUHJvYk1hdHJpeEFsbG9jYXRvciogcm93QWxsb2MgPSBfX251bGwsCiAgICAgICAgICAgICAg
IFByb2JNYXRyaXhBbGxvY2F0b3IqIGNvbHVtbkFsbG9jID0gX19udWxsKTsKCgoKCiAgICB2aXJ0
dWFsIH5Qcm9iTWF0cml4KCk7CgoKCgoKICAgIHZvaWQgcmVzaXplKGludCBudW1NYXRyaXhSb3dz
LAogICAgICAgICAgICAgICAgaW50IG51bU1hdHJpeENvbHVtbnMpOwoKCgoKICAgIGlubGluZSBp
bnQgZ2V0TnVtUm93cygpIGNvbnN0IHsKICAgICAgICByZXR1cm4gbnVtUm93czsKICAgIH0KCgoK
CiAgICBpbmxpbmUgY29uc3QgUHJvYkFycmF5KiBnZXRSb3dPYmooaW50IHJvdykgY29uc3Qgewog
ICAgICAgICgodm9pZCkgKCgocm93ID49IDApICYmIChyb3cgPCBudW1Sb3dzKSkgPyAwIDogKF9f
YXNzZXJ0X2ZhaWwgKCIocm93ID49IDApICYmIChyb3cgPCBudW1Sb3dzKSIsICJQcm9iTWF0cml4
LmgiLCA5OCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgICAgcmV0dXJuIHJvd3Nb
cm93XTsKICAgIH0KCgoKCiAgICBpbmxpbmUgUHJvYkFycmF5KiBnZXRSb3dPYmooaW50IHJvdykg
ewogICAgICAgICgodm9pZCkgKCgocm93ID49IDApICYmIChyb3cgPCBudW1Sb3dzKSkgPyAwIDog
KF9fYXNzZXJ0X2ZhaWwgKCIocm93ID49IDApICYmIChyb3cgPCBudW1Sb3dzKSIsICJQcm9iTWF0
cml4LmgiLCAxMDYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgICAgIHJldHVybiBy
b3dzW3Jvd107CiAgICB9CgoKCgoKICAgIGlubGluZSBQR0ZQcm9iJiBnZXQoaW50IHJvdywgaW50
IGNvbHVtbikgewogICAgICAgIHJldHVybiBnZXRDb2x1bW5PYmooY29sdW1uKS0+Z2V0KHJvdyk7
CiAgICB9CgoKCgogICAgaW5saW5lIGludCBnZXROdW1Db2x1bW5zKCkgY29uc3QgewogICAgICAg
IHJldHVybiBudW1Db2x1bW5zOwogICAgfQoKCgoKICAgIGlubGluZSBQcm9iQXJyYXkqIGdldENv
bHVtbk9iaihpbnQgY29sdW1uKSB7CiAgICAgICAgKCh2b2lkKSAoKChjb2x1bW4gPj0gMCkgJiYg
KGNvbHVtbiA8IG51bUNvbHVtbnMpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIihjb2x1bW4gPj0g
MCkgJiYgKGNvbHVtbiA8IG51bUNvbHVtbnMpIiwgIlByb2JNYXRyaXguaCIsIDEyOSwgX19QUkVU
VFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgICAgcmV0dXJuIGNvbHVtbnNbY29sdW1uXTsKICAg
IH0KCgoKCiAgICBpbmxpbmUgY29uc3QgUHJvYkFycmF5KiBnZXRDb2x1bW5PYmooaW50IGNvbHVt
bikgY29uc3QgewogICAgICAgICgodm9pZCkgKCgoY29sdW1uID49IDApICYmIChjb2x1bW4gPCBu
dW1Db2x1bW5zKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIoY29sdW1uID49IDApICYmIChjb2x1
bW4gPCBudW1Db2x1bW5zKSIsICJQcm9iTWF0cml4LmgiLCAxMzcsIF9fUFJFVFRZX0ZVTkNUSU9O
X18pLCAwKSkpOwogICAgICAgIHJldHVybiBjb2x1bW5zW2NvbHVtbl07CiAgICB9CgoKCgoKICAg
IGlubGluZSBjb25zdCBQR0ZQcm9iJiBnZXQoaW50IHJvdywgaW50IGNvbHVtbikgY29uc3QgewoK
ICAgICAgICByZXR1cm4gZ2V0Q29sdW1uT2JqKGNvbHVtbiktPmdldChyb3cpOwogICAgfQoKCgoK
CgogICAgaW5saW5lIFBHRlByb2IgaW5jcihpbnQgcm93LAogICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgY29sdW1uLAogICAgICAgICAgICAgICAgICAgICAgICBQR0ZQcm9iIHZhbHVlKSB7CiAg
ICAgICAgUEdGUHJvYiYgY2VsbCA9IGdldChyb3csIGNvbHVtbik7CiAgICAgICAgY2VsbCArPSB2
YWx1ZTsKICAgICAgICByZXR1cm4gY2VsbDsKICAgIH0KCgoKCiAgICB2b2lkIHplcm8oKTsKIyAx
NzcgIlByb2JNYXRyaXguaCIKICAgIHZvaWQgYWRkKGNvbnN0IFByb2JNYXRyaXgmIG1hdHJpeDIp
OwojIDE4NyAiUHJvYk1hdHJpeC5oIgogICAgdm9pZCBlbGVtZW50UHJvZHVjdChjb25zdCBQcm9i
TWF0cml4JiBtYXRyaXgyKTsKCgoKCiAgICB2b2lkIG5vcm1hbGl6ZUNvbHVtbnMoKTsKCgoKCiAg
ICB2b2lkIG5vcm1hbGl6ZVJvd3MoKTsKCgoKCiAgICB2b2lkIHByaW50KG9zdHJlYW0mIG91dGZp
bGUpIGNvbnN0OwoKCgoKCiAgICB2aXJ0dWFsIGludCBtZW1Vc2FnZSgpIGNvbnN0Owp9OwoKIyAx
NyAiUHJvYk1hdHJpeC5jYyIgMgoKCgojIDYgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9G
YXRhbEVycm9yLmgiIDEKIyAzMiAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZGV4Y2VwdCIgMSAzCiNw
cmFnbWEgaW50ZXJmYWNlICJzdGRleGNlcHQiCiMgMzIgIi91c3IvaW5jbHVkZS9nKystMy9zdGRl
eGNlcHQiIDMKCgoKCgoKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQgewoKY2xhc3MgbG9n
aWNfZXJyb3IgOiBwdWJsaWMgZXhjZXB0aW9uIHsKICBzdHJpbmcgX3doYXQ7CnB1YmxpYzoKICBs
b2dpY19lcnJvcihjb25zdCBzdHJpbmcmIHdoYXRfYXJnKTogX3doYXQgKHdoYXRfYXJnKSB7IH0K
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQgKCkgY29uc3QgeyByZXR1cm4gX3doYXQuY19zdHIg
KCk7IH0KfTsKCmNsYXNzIGRvbWFpbl9lcnJvciA6IHB1YmxpYyBsb2dpY19lcnJvciB7CnB1Ymxp
YzoKICBkb21haW5fZXJyb3IgKGNvbnN0IHN0cmluZyYgd2hhdF9hcmcpOiBsb2dpY19lcnJvciAo
d2hhdF9hcmcpIHsgfQp9OwoKY2xhc3MgaW52YWxpZF9hcmd1bWVudCA6IHB1YmxpYyBsb2dpY19l
cnJvciB7CnB1YmxpYzoKICBpbnZhbGlkX2FyZ3VtZW50IChjb25zdCBzdHJpbmcmIHdoYXRfYXJn
KTogbG9naWNfZXJyb3IgKHdoYXRfYXJnKSB7IH0KfTsKCmNsYXNzIGxlbmd0aF9lcnJvciA6IHB1
YmxpYyBsb2dpY19lcnJvciB7CnB1YmxpYzoKICBsZW5ndGhfZXJyb3IgKGNvbnN0IHN0cmluZyYg
d2hhdF9hcmcpOiBsb2dpY19lcnJvciAod2hhdF9hcmcpIHsgfQp9OwoKY2xhc3Mgb3V0X29mX3Jh
bmdlIDogcHVibGljIGxvZ2ljX2Vycm9yIHsKcHVibGljOgogIG91dF9vZl9yYW5nZSAoY29uc3Qg
c3RyaW5nJiB3aGF0X2FyZyk6IGxvZ2ljX2Vycm9yICh3aGF0X2FyZykgeyB9Cn07CgpjbGFzcyBy
dW50aW1lX2Vycm9yIDogcHVibGljIGV4Y2VwdGlvbiB7CiAgc3RyaW5nIF93aGF0OwpwdWJsaWM6
CiAgcnVudGltZV9lcnJvcihjb25zdCBzdHJpbmcmIHdoYXRfYXJnKTogX3doYXQgKHdoYXRfYXJn
KSB7IH0KICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQgKCkgY29uc3QgeyByZXR1cm4gX3doYXQu
Y19zdHIgKCk7IH0KcHJvdGVjdGVkOgogIHJ1bnRpbWVfZXJyb3IoKTogZXhjZXB0aW9uICgpIHsg
fQp9OwoKY2xhc3MgcmFuZ2VfZXJyb3IgOiBwdWJsaWMgcnVudGltZV9lcnJvciB7CnB1YmxpYzoK
ICByYW5nZV9lcnJvciAoY29uc3Qgc3RyaW5nJiB3aGF0X2FyZyk6IHJ1bnRpbWVfZXJyb3IgKHdo
YXRfYXJnKSB7IH0KfTsKCmNsYXNzIG92ZXJmbG93X2Vycm9yIDogcHVibGljIHJ1bnRpbWVfZXJy
b3IgewpwdWJsaWM6CiAgb3ZlcmZsb3dfZXJyb3IgKGNvbnN0IHN0cmluZyYgd2hhdF9hcmcpOiBy
dW50aW1lX2Vycm9yICh3aGF0X2FyZykgeyB9Cn07CgpjbGFzcyB1bmRlcmZsb3dfZXJyb3IgOiBw
dWJsaWMgcnVudGltZV9lcnJvciB7CnB1YmxpYzoKICB1bmRlcmZsb3dfZXJyb3IgKGNvbnN0IHN0
cmluZyYgd2hhdF9hcmcpOiBydW50aW1lX2Vycm9yICh3aGF0X2FyZykgeyB9Cn07Cgp9Cgp9Cgoj
IDYgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9GYXRhbEVycm9yLmgiIDIKCgoKIyAxNCAi
Li4vLi4vLi4vc3JjL2ZyYW1ld29yay91dGlsL0V4Y2VwdGlvbi5oIiAxCmNsYXNzIEV4Y2VwdGlv
bjogcHVibGljIGV4Y2VwdGlvbiB7CnByaXZhdGU6CiAgICBzdHJpbmcgZXJyb3JEZXNjOwoKCgoK
CgoKICAgIHZvaWQgZGlzcGxheUV4Y2VwdGlvbigpOwoKcHVibGljOgoKCgoKCiAgICBFeGNlcHRp
b24oY29uc3Qgc3RyaW5nJiBlcnJEZXNjKTogZXJyb3JEZXNjKGVyckRlc2MpIHsKICAgICAgICBk
aXNwbGF5RXhjZXB0aW9uKCk7CiAgICB9CgoKCgogICAgdmlydHVhbCB+RXhjZXB0aW9uKCkgewog
ICAgfQoKCgoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHsKICAgICAgICBy
ZXR1cm4gZXJyb3JEZXNjLmNfc3RyKCk7CiAgICB9Cn07CgojIDkgIi4uLy4uLy4uL3NyYy9mcmFt
ZXdvcmsvdXRpbC9GYXRhbEVycm9yLmgiIDIKIyAxNyAiLi4vLi4vLi4vc3JjL2ZyYW1ld29yay91
dGlsL0ZhdGFsRXJyb3IuaCIKY2xhc3MgRmF0YWxFcnJvcjogcHVibGljIEV4Y2VwdGlvbiB7CnB1
YmxpYzoKCgoKCgogICAgRmF0YWxFcnJvcihjb25zdCBzdHJpbmcmIGVyckRlc2MpOiBFeGNlcHRp
b24oZXJyRGVzYykgewogICAgfQoKCgoKICAgIHZpcnR1YWwgfkZhdGFsRXJyb3IoKSB7CiAgICB9
Cn07CgojIDIwICJQcm9iTWF0cml4LmNjIiAyCgojIDYgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsv
dXRpbC9QR0ZVdGlscy5oIiAxCmNsYXNzIFN0cmluZ1ZlY3RvcjsKIyAyMCAiLi4vLi4vLi4vc3Jj
L2ZyYW1ld29yay91dGlsL1BHRlV0aWxzLmgiCiMgMjggIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsv
dXRpbC9QR0ZVdGlscy5oIgpjbGFzcyBQR0ZVdGlscyB7CnByaXZhdGU6CgoKCiAgICBQR0ZVdGls
cygpIHsKICAgIH0KCnB1YmxpYzoKCgoKCgoKCiAgICBzdGF0aWMgdm9pZCBmYXRhbChjb25zdCBj
aGFyKiBmb3JtYXRTdHIsIC4uLik7CiMgNTQgIi4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvdXRpbC9Q
R0ZVdGlscy5oIgogICAgc3RhdGljIHN0cmluZyBmb3JtYXQoY29uc3QgY2hhciogZm9ybWF0U3Ry
LCAuLi4pOwoKCgoKICAgIHN0YXRpYyBzdHJpbmcgdG9TdHJpbmcoaW50IG51bSk7CgoKCgogICAg
c3RhdGljIGludCB0b0ludChjb25zdCBjaGFyKiBzdHIpOwoKCgoKICAgIHN0YXRpYyBpbnQgdG9J
bnQoY29uc3Qgc3RyaW5nJiBzdHIpIHsKICAgICAgICByZXR1cm4gdG9JbnQoc3RyLmNfc3RyKCkp
OwogICAgfQoKCgoKICAgIHN0YXRpYyBzdHJpbmcgdG9TdHJpbmcoZG91YmxlIG51bSk7CgoKCgoK
ICAgIHN0YXRpYyBzdHJpbmcgdG9GaXhlZFdpZHRoU3RyaW5nKGRvdWJsZSBudW0sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RyV2lkdGgpOwoKCgoKICAgIHN0YXRp
YyBkb3VibGUgdG9Eb3VibGUoY29uc3QgY2hhciogc3RyKTsKCgoKCiAgICBzdGF0aWMgZG91Ymxl
IHRvRG91YmxlKGNvbnN0IHN0cmluZyYgc3RyKSB7CiAgICAgICAgcmV0dXJuIHRvRG91YmxlKHN0
ci5jX3N0cigpKTsKICAgIH0KCgoKCiAgICBzdGF0aWMgc3RyaW5nIHRvU3RyaW5nKGJvb2wgdmFs
KTsKCgoKCgogICAgc3RhdGljIGJvb2wgdG9Cb29sKGNvbnN0IGNoYXIqIHN0cik7CgoKCgoKICAg
IHN0YXRpYyBib29sIHRvQm9vbChjb25zdCBzdHJpbmcmIHN0cikgewogICAgICAgIHJldHVybiB0
b0Jvb2woc3RyLmNfc3RyKCkpOwogICAgfQoKCgoKICAgIHN0YXRpYyBzdHJpbmcgdHJpbVRyYWls
aW5nQmxhbmtzKGNvbnN0IHN0cmluZyYgc3RyKTsKCgoKCiAgICBzdGF0aWMgc3RyaW5nIFBHRlV0
aWxzOjp0cmltQmxhbmtzKGNvbnN0IHN0cmluZyYgc3RyKTsKCgoKCiAgICBzdGF0aWMgYm9vbCBj
b250YWluc1NwYWNlcyhjb25zdCBzdHJpbmcmIHN0cik7CgoKCgoKICAgIHN0YXRpYyBTdHJpbmdW
ZWN0b3Igc3BsaXQoY29uc3Qgc3RyaW5nJiBzdHIsIGNoYXIgc2VwYXJhdG9yKTsKCgoKCgogICAg
c3RhdGljIFN0cmluZ1ZlY3RvciBzcGxpdE9uV2hpdGVTcGFjZShjb25zdCBzdHJpbmcmIHN0cik7
CgoKCgogICAgc3RhdGljIGJvb2wgcHJlZml4KGNvbnN0IHN0cmluZyYgc3RyLCBjb25zdCBzdHJp
bmcmIHByZSkgewogICAgICAgIHVuc2lnbmVkIHByZUxlbiA9IHByZS5zaXplKCk7CiAgICAgICAg
aWYgKHN0ci5zaXplKCkgPCBwcmVMZW4pIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgIH0KICAgICAgICBmb3IgKHVuc2lnbmVkIGlkeCA9IDA7IGlkeCA8IHByZUxlbjsgaWR4Kysp
IHsKICAgICAgICAgICAgaWYgKHN0cltpZHhdICE9IHByZVtpZHhdKSB7CiAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICB9CgoKCgogICAgc3RhdGljIHZvaWQgcHJpbnRMaW5lc0luZGVudGVkKG9zdHJlYW0m
IG91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIHN0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZW50ID0gMCk7Cn07
CgojIDIxICJQcm9iTWF0cml4LmNjIiAyCgoKCgp2b2lkIFByb2JNYXRyaXg6OnJlbGVhc2UoKSB7
CiAgICBpZiAoY29sdW1ucyAhPSBfX251bGwpIHsKICAgICAgICBjb2x1bW5BbGxvY2F0b3ItPmFs
bG9jQXJyYXlzKDAsIF9fbnVsbCk7CiAgICAgICAgZGVsZXRlW10gY29sdW1uczsKICAgICAgICBj
b2x1bW5zID0gX19udWxsOwogICAgfQogICAgaWYgKHJvd3MgIT0gX19udWxsKSB7CiAgICAgICAg
cm93QWxsb2NhdG9yLT5hbGxvY0FycmF5cygwLCBfX251bGwpOwogICAgICAgIGRlbGV0ZVtdIHJv
d3M7CiAgICAgICAgcm93cyA9IF9fbnVsbDsKICAgIH0KICAgIGlmIChtZW1vcnkgIT0gX19udWxs
KSB7CiAgICAgICAgZGVsZXRlW10gbWVtb3J5OwogICAgICAgIG1lbW9yeSA9IF9fbnVsbDsKICAg
IH0KICAgIG51bVJvd3MgPSAwOwogICAgbnVtQ29sdW1ucyA9IDA7Cn0KCgoKClByb2JNYXRyaXg6
OlByb2JNYXRyaXgoaW50IG51bU1hdHJpeFJvd3MgPSAwLAogICAgICAgICAgICAgICAgICAgICAg
IGludCBudW1NYXRyaXhDb2x1bW5zID0gMCwKICAgICAgICAgICAgICAgICAgICAgICBQcm9iTWF0
cml4QWxsb2NhdG9yKiByb3dBbGxvYyA9IF9fbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICBQ
cm9iTWF0cml4QWxsb2NhdG9yKiBjb2x1bW5BbGxvYyA9IF9fbnVsbCkgewogICAgY29sdW1ucyA9
IF9fbnVsbDsKICAgIHJvd3MgPSBfX251bGw7CiAgICBtZW1vcnkgPSBfX251bGw7CiAgICBudW1S
b3dzID0gMDsKICAgIG51bUNvbHVtbnMgPSAwOwoKICAgIHJvd0FsbG9jYXRvciA9IChyb3dBbGxv
YyA9PSBfX251bGwpID8gbmV3IFByb2JBcnJheUFsbG9jKCkgOiByb3dBbGxvYzsKICAgIGNvbHVt
bkFsbG9jYXRvciA9IChjb2x1bW5BbGxvYyA9PSBfX251bGwpID8gbmV3IFByb2JBcnJheUFsbG9j
KCkgOiBjb2x1bW5BbGxvYzsKCiAgICByZXNpemUobnVtTWF0cml4Um93cywgbnVtTWF0cml4Q29s
dW1ucyk7Cn0KCgoKClByb2JNYXRyaXg6On5Qcm9iTWF0cml4KCkgewogICAgcmVsZWFzZSgpOwog
ICAgZGVsZXRlIHJvd0FsbG9jYXRvcjsKICAgIGRlbGV0ZSBjb2x1bW5BbGxvY2F0b3I7Cn0KCgoK
CnZvaWQgUHJvYk1hdHJpeDo6cmVzaXplKGludCBuZXdOdW1Sb3dzLAogICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgbmV3TnVtQ29sdW1ucykgewogICAgKCh2b2lkKSAoKG5ld051bVJvd3MgPj0g
MCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJuZXdOdW1Sb3dzID49IDAiLCAiUHJvYk1hdHJpeC5j
YyIsIDc3LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICgodm9pZCkgKChuZXdOdW1D
b2x1bW5zID49IDApID8gMCA6IChfX2Fzc2VydF9mYWlsICgibmV3TnVtQ29sdW1ucyA+PSAwIiwg
IlByb2JNYXRyaXguY2MiLCA3OCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CgogICAgcmVs
ZWFzZSgpOwoKICAgIG51bVJvd3MgPSBuZXdOdW1Sb3dzOwogICAgbnVtQ29sdW1ucyA9IG5ld051
bUNvbHVtbnM7CgoKICAgIGlmIChudW1Sb3dzKm51bUNvbHVtbnMgPiAwKSB7CiAgICAgICAgbWVt
b3J5ID0gbmV3IFBHRlByb2JbbnVtUm93cypudW1Db2x1bW5zXTsKICAgIH0KCgoKCiAgICBpZiAo
bnVtUm93cyA+IDApIHsKICAgICAgICByb3dzID0gbmV3IFByb2JBcnJheSpbbnVtUm93c107CiAg
ICAgICAgcm93QWxsb2NhdG9yLT5hbGxvY0FycmF5cyhudW1Sb3dzLCByb3dzKTsKICAgICAgICBm
b3IgKGludCByb3dJZHggPSAwOyByb3dJZHggPCBudW1Sb3dzOyByb3dJZHgrKykgewogICAgICAg
ICAgICByb3dzW3Jvd0lkeF0tPnNldFN0b3JhZ2UobnVtQ29sdW1ucywgJihtZW1vcnlbcm93SWR4
Km51bUNvbHVtbnNdKSwgMSk7CiAgICAgICAgfQogICAgfQoKICAgIGlmIChudW1Db2x1bW5zID4g
MCkgewogICAgICAgIGNvbHVtbnMgPSBuZXcgUHJvYkFycmF5KltudW1Db2x1bW5zXTsKICAgICAg
ICBjb2x1bW5BbGxvY2F0b3ItPmFsbG9jQXJyYXlzKG51bUNvbHVtbnMsIGNvbHVtbnMpOwogICAg
ICAgIGZvciAoaW50IGNvbElkeCA9IDA7IGNvbElkeCA8IG51bUNvbHVtbnM7IGNvbElkeCsrKSB7
CiAgICAgICAgICAgIGNvbHVtbnNbY29sSWR4XS0+c2V0U3RvcmFnZShudW1S ggPSAwOyBjb2xJZHggPCBudW1Db2x1bW5zOyBjb2xJZHgrKykgewogICAgICAgIGNvbHVt
bnNbY29sSWR4XS0+ZWxlbWVudFByb2R1Y3QoKm1hdHJpeDIuY29sdW1uc1tjb2xJZHhdKTsKICAg
IH0KfQoKCgoKdm9pZCBQcm9iTWF0cml4OjpwcmludChvc3RyZWFtJiBvdXRmaWxlKSBjb25zdCB7
CiAgICBmb3IgKGludCByb3dJZHggPSAwOyByb3dJZHggPCBudW1Sb3dzOyByb3dJZHgrKykgewog
ICAgICAgIGZvciAoaW50IGNvbElkeCA9IDA7IGNvbElkeCA8IG51bUNvbHVtbnM7IGNvbElkeCsr
KSB7CiAgICAgICAgICAgIGlmIChjb2xJZHggPiAwKSB7CiAgICAgICAgICAgICAgICBvdXRmaWxl
IDw8ICIgICI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZG91YmxlIG51bSA9IGdldChyb3dJ
ZHgsIGNvbElkeCkucmV0X2RvdWJsZSgpOwogICAgICAgICAgICBvdXRmaWxlIDw8IFBHRlV0aWxz
Ojp0b0ZpeGVkV2lkdGhTdHJpbmcobnVtLCA4KTsKICAgICAgICB9CiAgICAgICAgb3V0ZmlsZSA8
PCBlbmRsOwogICAgfQp9CgoKCgp2b2lkIFByb2JNYXRyaXg6Om5vcm1hbGl6ZUNvbHVtbnMoKSB7
CiAgICBmb3IgKGludCBjb2xJZHggPSAwOyBjb2xJZHggPCBudW1Db2x1bW5zOyBjb2xJZHgrKykg
ewogICAgICAgIGNvbHVtbnNbY29sSWR4XS0+bm9ybWFsaXplKCk7CiAgICB9Cn0KCgoKCnZvaWQg
UHJvYk1hdHJpeDo6bm9ybWFsaXplUm93cygpIHsKICAgIGZvciAoaW50IHJvd0lkeCA9IDA7IHJv
d0lkeCA8IG51bVJvd3M7IHJvd0lkeCsrKSB7CiAgICAgICAgcm93c1tyb3dJZHhdLT5ub3JtYWxp
emUoKTsKICAgIH0KfQoKCgoKaW50IFByb2JNYXRyaXg6Om1lbVVzYWdlKCkgY29uc3QgewoKICAg
IGludCB0b3RhbCA9IHNpemVvZihQcm9iTWF0cml4KSArIChudW1Sb3dzICogbnVtQ29sdW1ucyAq
IHNpemVvZihQR0ZQcm9iKSkKICAgICAgICArICgyICogc2l6ZW9mKFByb2JNYXRyaXhBbGxvY2F0
b3IpKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUm93czsgaSsrKSB7CiAgICAgICAgdG90
YWwgKz0gcm93c1tpXS0+bWVtVXNhZ2UoKTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bnVtQ29sdW1uczsgaSsrKSB7CiAgICAgICAgdG90YWwgKz0gY29sdW1uc1tpXS0+bWVtVXNhZ2Uo
KTsKICAgIH0KICAgIHJldHVybiB0b3RhbDsKfQo=