public inbox for gcc-prs@sourceware.org help / color / mirror / Atom feed
From: lpage@draper.com To: gcc-gnats@gcc.gnu.org Cc: lance.page@ieee.org Subject: c++/3180: ICE on bad code. (calling some undefined functions). Date: Wed, 13 Jun 2001 15:36:00 -0000 [thread overview] Message-ID: <20010613222748.24752.qmail@sourceware.cygnus.com> (raw) >Number: 3180 >Category: c++ >Synopsis: ICE on bad code. (calling some undefined functions). >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-illegal-code >Submitter-Id: net >Arrival-Date: Wed Jun 13 15:36:01 PDT 2001 >Closed-Date: >Last-Modified: >Originator: Lance Page (lpage@draper.com) >Release: 2.95.3 19991030 (prerelease) >Organization: >Environment: Linux Mandrake kernel 2.2.17-21mdksmp #1 SMP Thu Oct 5 13:03:01 CEST 2000 i686 unknown >Description: ICE on bad code. Maybe a function-overloading problem. Called set(double,double,double) on an object with several set() functions but none that take double,double,double. >How-To-Repeat: Preprocessed source code (bug.ii) is attached. Here is the command line and its output: g++ -v -save-temps -D_LINUX_ -DDEBUG -I. -I/u/lpage/workarea/root/usr/simlab/release/autonomousSystems1.1.1/include -g -Wall -O2 -c bug.cc -o bug.o Reading specs from /usr/lib/gcc-lib/i586-mandrake-linux/2.95.3/specs gcc version 2.95.3 19991030 (prerelease) /usr/lib/gcc-lib/i586-mandrake-linux/2.95.3/cpp -lang-c++ -v -I. -I/u/lpage/workarea/root/usr/simlab/release/autonomousSystems1.1.1/include -D__GNUC__=2 -D__GNUG__=2 -D__GNUC_MINOR__=95 -D__cplusplus -D__ELF__ -Dunix -D__i386__ -Dlinux -D__ELF__ -D__unix__ -D__i386__ -D__linux__ -D__unix -D__linux -Asystem(posix) -D__EXCEPTIONS -D__OPTIMIZE__ -g -Wall -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -Di586 -Dpentium -D__i586 -D__i586__ -D__pentium -D__pentium__ -D_LINUX_ -DDEBUG bug.cc bug.ii GNU CPP version 2.95.3 19991030 (prerelease) (i386 Linux/ELF) #include "..." search starts here: #include <...> search starts here: . /u/lpage/workarea/root/usr/simlab/release/autonomousSystems1.1.1/include /usr/lib/gcc-lib/i586-mandrake-linux/2.95.3/../../../../include/g++-3 /usr/lib/gcc-lib/i586-mandrake-linux/2.95.3/../../../../i586-mandrake-linux/include /usr/lib/gcc-lib/i586-mandrake-linux/2.95.3/include /usr/include End of search list. The following default directories have been omitted from the search path: /usr/local/include End of omitted list. /usr/lib/gcc-lib/i586-mandrake-linux/2.95.3/cc1plus bug.ii -quiet -dumpbase bug.cc -g -O2 -Wall -version -o bug.s GNU C++ version 2.95.3 19991030 (prerelease) (i586-mandrake-linux) compiled by GNU C version 2.95.3 19991030 (prerelease). bug.cc: In function `void blah()': bug.cc:17: Internal compiler error. bug.cc:17: Please submit a full bug report. bug.cc:17: See <URL: http://www.gnu.org/software/gcc/bugs.html > for instructions. >Fix: Replace the statement... rawpath[p].set(xform.indexToNorth(rawpath[p].x), xform.indexToEast(rawpath[p].y), moveDB->zIndexToValue(rawpath[p].z)); with... nedpath[p].set(xform.indexToNorth(rawpath[p].x), xform.indexToEast(rawpath[p].y), moveDB->zIndexToValue(rawpath[p].z)); >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="bug.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="bug.ii" IyAxICJidWcuY2MiCiMgMSAiUG9zZVRvU3RhdGVYZm9ybS5oIiAxCiAKCgoKCgoKIyAxICIvdXNy L2luY2x1ZGUvbWF0aC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiMgMSAiL3Vz ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgoKCiAKCgoKCgoKCiAKIyAxMzggIi91c3IvaW5jbHVk ZS9mZWF0dXJlcy5oIiAzCgoKIAoKCgoKCgoKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgojIDE5NiAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIAoKCgoKCgoKCiAKCgoKCiAKCiMgMSAiL3Vzci9pbmNs dWRlL3N5cy9jZGVmcy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKCgog CgoKCgoKCgoKIAoKCgoKIyA3MSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAzCgoKIAoKCgoK CgoKIAoKCgojIDEwMyAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAzCgoKCiAKCgoKCgoKCgog CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCgogCgoKCgoKCgoj IDI1MCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwoKCiAKCgoKCgoKCgogCgoKCgoKIAoK IAoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIAoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjc4ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu aCIgMiAzCgoKCgojIDI3ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgpleHRlcm4gIkMiIHsg CgogCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDEgMwogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgogCgojIDY4ICIvdXNyL2luY2x1ZGUvYml0cy9o dWdlX3ZhbC5oIiAzCgojIDMzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgogCgoKCiAKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoK CiMgNDcgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMwoKIyA0MCAiL3Vzci9pbmNsdWRl L21hdGguaCIgMiAzCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvbWF0aGNhbGxzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKIAoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgYWNvcyAgICAgICAg ICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19hY29zICAgICAg ICAgIChkb3VibGUgIF9feCkgICAgICA7CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGFzaW4g ICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fYXNp biAgICAgICAgICAoZG91YmxlICBfX3gpICAgICAgOwogCmV4dGVybiAgIGRvdWJsZSAgICAgICAg ICBhdGFuICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAg ICBfX2F0YW4gICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKIApleHRlcm4gICBkb3VibGUg ICAgICAgICAgYXRhbjIgICAgICAgICAgKGRvdWJsZSAgX195LCBkb3VibGUgIF9feCkgICAgOyBl eHRlcm4gICBkb3VibGUgICAgICAgICBfX2F0YW4yICAgICAgICAgIChkb3VibGUgIF9feSwgZG91 YmxlICBfX3gpICAgICAgOwoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgY29zICAgICAgICAg IChkb3VibGUgIF9feCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2NvcyAgICAgICAg ICAoZG91YmxlICBfX3gpICAgICAgOwogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBzaW4gICAg ICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fc2luICAg ICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIHRh biAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX190 YW4gICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKCgoKCgoKCiAKCiAKZXh0ZXJuICAgZG91 YmxlICAgICAgICAgIGNvc2ggICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRv dWJsZSAgICAgICAgIF9fY29zaCAgICAgICAgICAoZG91YmxlICBfX3gpICAgICAgOwogCmV4dGVy biAgIGRvdWJsZSAgICAgICAgICBzaW5oICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRl cm4gICBkb3VibGUgICAgICAgICBfX3NpbmggICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsK IApleHRlcm4gICBkb3VibGUgICAgICAgICAgdGFuaCAgICAgICAgICAoZG91YmxlICBfX3gpICAg IDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX190YW5oICAgICAgICAgIChkb3VibGUgIF9feCkg ICAgICA7CgoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgYWNvc2ggICAgICAgICAgKGRvdWJs ZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fYWNvc2ggICAgICAgICAgKGRv dWJsZSAgX194KSAgICAgIDsKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgYXNpbmggICAgICAg ICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fYXNpbmggICAg ICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgYXRh bmggICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9f YXRhbmggICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKCgogCgogCmV4dGVybiAgIGRvdWJs ZSAgICAgICAgICBleHAgICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJs ZSAgICAgICAgIF9fZXhwICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CgoKCgoKCgoKIApl eHRlcm4gICBkb3VibGUgICAgICAgICAgZnJleHAgICAgICAgICAgKGRvdWJsZSAgX194LCBpbnQg Kl9fZXhwb25lbnQpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19mcmV4cCAgICAgICAg ICAoZG91YmxlICBfX3gsIGludCAqX19leHBvbmVudCkgICAgICA7CgogCmV4dGVybiAgIGRvdWJs ZSAgICAgICAgICBsZGV4cCAgICAgICAgICAoZG91YmxlICBfX3gsIGludCBfX2V4cG9uZW50KSAg ICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fbGRleHAgICAgICAgICAgKGRvdWJsZSAgX194 LCBpbnQgX19leHBvbmVudCkgICAgICA7CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBsb2cg ICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fbG9n ICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAg ICBsb2cxMCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAg ICAgX19sb2cxMCAgICAgICAgICAoZG91YmxlICBfX3gpICAgICAgOwoKIApleHRlcm4gICBkb3Vi bGUgICAgICAgICAgbW9kZiAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgKl9faXB0cikg ICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX21vZGYgICAgICAgICAgKGRvdWJsZSAgX194 LCBkb3VibGUgICpfX2lwdHIpICAgICAgOwoKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGV4 cG0xICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBf X2V4cG0xICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CgogCmV4dGVybiAgIGRvdWJsZSAg ICAgICAgICBsb2cxcCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91Ymxl ICAgICAgICAgX19sb2cxcCAgICAgICAgICAoZG91YmxlICBfX3gpICAgICAgOwoKIApleHRlcm4g ICBkb3VibGUgICAgICAgICAgbG9nYiAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJu ICAgZG91YmxlICAgICAgICAgX19sb2diICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CgoK CgoKCgoKCgoKIAoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgcG93ICAgICAgICAgIChkb3Vi bGUgIF9feCwgZG91YmxlICBfX3kpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19wb3cg ICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgICA7CgogCmV4dGVybiAgIGRv dWJsZSAgICAgICAgICBzcXJ0ICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4gICBk b3VibGUgICAgICAgICBfX3NxcnQgICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKCgogCmV4 dGVybiAgIGRvdWJsZSAgICAgICAgICBoeXBvdCAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJs ZSAgX195KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9faHlwb3QgICAgICAgICAgKGRv dWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgICA7CgoKCiAKZXh0ZXJuICAgZG91YmxlICAgICAg ICAgIGNicnQgICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAg ICAgIF9fY2JydCAgICAgICAgICAoZG91YmxlICBfX3gpICAgICAgOwoKCgogCgogCmV4dGVybiAg IGRvdWJsZSAgICAgICAgICBjZWlsICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4g ICBkb3VibGUgICAgICAgICBfX2NlaWwgICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKCiAK ZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGZhYnMgICAgICAgICAgKGRvdWJsZSAgX194KSAgICAg X19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApOyBleHRlcm4gICBkb3VibGUgICAgICAg ICBfX2ZhYnMgICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChf X2NvbnN0X18pICApICA7CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBmbG9vciAgICAgICAg ICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19mbG9vciAgICAg ICAgICAoZG91YmxlICBfX3gpICAgICAgOwoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgZm1v ZCAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICA7IGV4dGVybiAgIGRvdWJs ZSAgICAgICAgIF9fZm1vZCAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICAg IDsKCgogCgpleHRlcm4gIGludCAgICAgX19pc2luZiAgICAgIChkb3VibGUgIF9fdmFsdWUpICAg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIApleHRlcm4gIGludCAgICAgX19maW5pdGUg ICAgICAoZG91YmxlICBfX3ZhbHVlKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgog CgpleHRlcm4gIGludCAgICAgaXNpbmYgICAgICAoZG91YmxlICBfX3ZhbHVlKSAgIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCiAKZXh0ZXJuICBpbnQgICAgIGZpbml0ZSAgICAgIChkb3Vi bGUgIF9fdmFsdWUpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIAoKCgoKCmV4dGVy biAgIGRvdWJsZSAgICAgICAgICBpbmZuYW4gICAgICAgICAgKGludCBfX2Vycm9yKSAgICAgX19h dHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApOyBleHRlcm4gICBkb3VibGUgICAgICAgICBf X2luZm5hbiAgICAgICAgICAoaW50IF9fZXJyb3IpICAgICBfX2F0dHJpYnV0ZV9fICggICAgKF9f Y29uc3RfXykgICkgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGRyZW0gICAgICAgICAg KGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBf X2RyZW0gICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgICA7CgoKIApleHRl cm4gICBkb3VibGUgICAgICAgICAgc2lnbmlmaWNhbmQgICAgICAgICAgKGRvdWJsZSAgX194KSAg ICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fc2lnbmlmaWNhbmQgICAgICAgICAgKGRvdWJs ZSAgX194KSAgICAgIDsKCgoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgY29weXNpZ24gICAg ICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgIF9fYXR0cmlidXRlX18gKCAgICAo X19jb25zdF9fKSAgKTsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19jb3B5c2lnbiAgICAgICAg ICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2Nv bnN0X18pICApICA7CgoKCgoKCgoKIApleHRlcm4gIGludCAgICAgX19pc25hbiAgICAgIChkb3Vi bGUgIF9fdmFsdWUpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCiAKZXh0ZXJuICBp bnQgICAgIGlzbmFuICAgICAgKGRvdWJsZSAgX192YWx1ZSkgICBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBqMCAgICAgICAgICAoZG91Ymxl ICkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2owICAgICAgICAgIChkb3VibGUgKSAg ICAgIDsKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGoxICAgICAgICAgIChkb3VibGUgKSAgICA7 IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fajEgICAgICAgICAgKGRvdWJsZSApICAgICAgOwpl eHRlcm4gICBkb3VibGUgICAgICAgICAgam4gICAgICAgICAgKGludCwgZG91YmxlICkgICAgOyBl eHRlcm4gICBkb3VibGUgICAgICAgICBfX2puICAgICAgICAgIChpbnQsIGRvdWJsZSApICAgICAg OwpleHRlcm4gICBkb3VibGUgICAgICAgICAgeTAgICAgICAgICAgKGRvdWJsZSApICAgIDsgZXh0 ZXJuICAgZG91YmxlICAgICAgICAgX195MCAgICAgICAgICAoZG91YmxlICkgICAgICA7CmV4dGVy biAgIGRvdWJsZSAgICAgICAgICB5MSAgICAgICAgICAoZG91YmxlICkgICAgOyBleHRlcm4gICBk b3VibGUgICAgICAgICBfX3kxICAgICAgICAgIChkb3VibGUgKSAgICAgIDsKZXh0ZXJuICAgZG91 YmxlICAgICAgICAgIHluICAgICAgICAgIChpbnQsIGRvdWJsZSApICAgIDsgZXh0ZXJuICAgZG91 YmxlICAgICAgICAgX195biAgICAgICAgICAoaW50LCBkb3VibGUgKSAgICAgIDsKCgoKCiAKZXh0 ZXJuICAgZG91YmxlICAgICAgICAgIGVyZiAgICAgICAgICAoZG91YmxlICkgICAgOyBleHRlcm4g ICBkb3VibGUgICAgICAgICBfX2VyZiAgICAgICAgICAoZG91YmxlICkgICAgICA7CmV4dGVybiAg IGRvdWJsZSAgICAgICAgICBlcmZjICAgICAgICAgIChkb3VibGUgKSAgICA7IGV4dGVybiAgIGRv dWJsZSAgICAgICAgIF9fZXJmYyAgICAgICAgICAoZG91YmxlICkgICAgICA7CmV4dGVybiAgIGRv dWJsZSAgICAgICAgICBsZ2FtbWEgICAgICAgICAgKGRvdWJsZSApICAgIDsgZXh0ZXJuICAgZG91 YmxlICAgICAgICAgX19sZ2FtbWEgICAgICAgICAgKGRvdWJsZSApICAgICAgOwpleHRlcm4gICBk b3VibGUgICAgICAgICAgdGdhbW1hICAgICAgICAgIChkb3VibGUgKSAgICA7IGV4dGVybiAgIGRv dWJsZSAgICAgICAgIF9fdGdhbW1hICAgICAgICAgIChkb3VibGUgKSAgICAgIDsKCgoKIApleHRl cm4gICBkb3VibGUgICAgICAgICAgZ2FtbWEgICAgICAgICAgKGRvdWJsZSApICAgIDsgZXh0ZXJu ICAgZG91YmxlICAgICAgICAgX19nYW1tYSAgICAgICAgICAoZG91YmxlICkgICAgICA7CgoKCiAK CgpleHRlcm4gICBkb3VibGUgICAgICAgICAgbGdhbW1hX3IgICAgICAgICAgICAgIChkb3VibGUg LCBpbnQgKl9fc2lnbmdhbXApICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19sZ2FtbWFf ciAgICAgICAgICAgICAgKGRvdWJsZSAsIGludCAqX19zaWduZ2FtcCkgICAgICA7CgoKCgogCgpl eHRlcm4gICBkb3VibGUgICAgICAgICAgcmludCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsg ZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19yaW50ICAgICAgICAgIChkb3VibGUgIF9feCkgICAg ICA7CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBuZXh0YWZ0ZXIgICAgICAgICAgKGRvdWJs ZSAgX194LCBkb3VibGUgIF9feSkgICAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAg KTsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19uZXh0YWZ0ZXIgICAgICAgICAgKGRvdWJsZSAg X194LCBkb3VibGUgIF9feSkgICAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKSAg OwoKCgoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgcmVtYWluZGVyICAgICAgICAgIChkb3Vi bGUgIF9feCwgZG91YmxlICBfX3kpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19yZW1h aW5kZXIgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgICA7CgoKIApleHRl cm4gICBkb3VibGUgICAgICAgICAgc2NhbGIgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUg IF9fbikgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX3NjYWxiICAgICAgICAgIChkb3Vi bGUgIF9feCwgZG91YmxlICBfX24pICAgICAgOwoKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAg IHNjYWxibiAgICAgICAgICAoZG91YmxlICBfX3gsIGludCBfX24pICAgIDsgZXh0ZXJuICAgZG91 YmxlICAgICAgICAgX19zY2FsYm4gICAgICAgICAgKGRvdWJsZSAgX194LCBpbnQgX19uKSAgICAg IDsKCiAKZXh0ZXJuICAgaW50ICAgICAgICBpbG9nYiAgICAgICAgKGRvdWJsZSAgX194KSAgIDsg ZXh0ZXJuICAgaW50ICAgICAgICBfX2lsb2diICAgICAgICAoZG91YmxlICBfX3gpICAgIDsKCgoj IDMzNiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKCiMgNjMgIi91c3IvaW5jbHVk ZS9tYXRoLmgiIDIgMwoKCgoKCgoKIAoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv bWF0aGNhbGxzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKIAoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBhY29zZiAgICAgICAgIChm bG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fYWNvc2YgICAgICAgICAo ZmxvYXQgICBfX3gpICAgICAgOwogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGFzaW5mICAgICAg ICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19hc2luZiAgICAg ICAgIChmbG9hdCAgIF9feCkgICAgICA7CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgYXRhbmYg ICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2F0YW5m ICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBh dGFuMmYgICAgICAgICAoZmxvYXQgICBfX3ksIGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZs b2F0ICAgICAgICAgX19hdGFuMmYgICAgICAgICAoZmxvYXQgICBfX3ksIGZsb2F0ICAgX194KSAg ICAgIDsKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgY29zZiAgICAgICAgIChmbG9hdCAgIF9f eCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fY29zZiAgICAgICAgIChmbG9hdCAgIF9f eCkgICAgICA7CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgc2luZiAgICAgICAgIChmbG9hdCAg IF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fc2luZiAgICAgICAgIChmbG9hdCAg IF9feCkgICAgICA7CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgdGFuZiAgICAgICAgIChmbG9h dCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fdGFuZiAgICAgICAgIChmbG9h dCAgIF9feCkgICAgICA7CgoKCgoKCgogCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGNvc2hm ICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19jb3No ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAg c2luaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBf X3NpbmhmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKIApleHRlcm4gICBmbG9hdCAgICAg ICAgICB0YW5oZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAg ICAgIF9fdGFuaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAgOwoKCiAKZXh0ZXJuICAgZmxv YXQgICAgICAgICAgYWNvc2hmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZs b2F0ICAgICAgICAgX19hY29zaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAgOwogCmV4dGVy biAgIGZsb2F0ICAgICAgICAgIGFzaW5oZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRl cm4gICBmbG9hdCAgICAgICAgIF9fYXNpbmhmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsK IApleHRlcm4gICBmbG9hdCAgICAgICAgICBhdGFuaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAg IDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2F0YW5oZiAgICAgICAgIChmbG9hdCAgIF9feCkg ICAgICA7CgoKIAoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBleHBmICAgICAgICAgKGZsb2F0 ICAgX194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19leHBmICAgICAgICAgKGZsb2F0 ICAgX194KSAgICAgIDsKCgoKCgoKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGZyZXhwZiAg ICAgICAgIChmbG9hdCAgIF9feCwgaW50ICpfX2V4cG9uZW50KSAgICA7IGV4dGVybiAgIGZsb2F0 ICAgICAgICAgX19mcmV4cGYgICAgICAgICAoZmxvYXQgICBfX3gsIGludCAqX19leHBvbmVudCkg ICAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGxkZXhwZiAgICAgICAgIChmbG9hdCAg IF9feCwgaW50IF9fZXhwb25lbnQpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2xkZXhw ZiAgICAgICAgIChmbG9hdCAgIF9feCwgaW50IF9fZXhwb25lbnQpICAgICAgOwoKIApleHRlcm4g ICBmbG9hdCAgICAgICAgICBsb2dmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAg IGZsb2F0ICAgICAgICAgX19sb2dmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKCiAKZXh0 ZXJuICAgZmxvYXQgICAgICAgICAgbG9nMTBmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4 dGVybiAgIGZsb2F0ICAgICAgICAgX19sb2cxMGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAg OwoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBtb2RmZiAgICAgICAgIChmbG9hdCAgIF9feCwg ZmxvYXQgICAqX19pcHRyKSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19tb2RmZiAgICAg ICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICAqX19pcHRyKSAgICAgIDsKCgogCmV4dGVybiAgIGZs b2F0ICAgICAgICAgIGV4cG0xZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBm bG9hdCAgICAgICAgIF9fZXhwbTFmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKCiAKZXh0 ZXJuICAgZmxvYXQgICAgICAgICAgbG9nMXBmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4 dGVybiAgIGZsb2F0ICAgICAgICAgX19sb2cxcGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAg OwoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBsb2diZiAgICAgICAgIChmbG9hdCAgIF9feCkg ICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbG9nYmYgICAgICAgICAoZmxvYXQgICBfX3gp ICAgICAgOwoKCgoKCgoKCgoKCiAKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgcG93ZiAgICAg ICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAg ICBfX3Bvd2YgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICAgIDsKCiAKZXh0 ZXJuICAgZmxvYXQgICAgICAgICAgc3FydGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0 ZXJuICAgZmxvYXQgICAgICAgICBfX3NxcnRmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsK CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGh5cG90ZiAgICAgICAgIChmbG9hdCAgIF9feCwg ZmxvYXQgICBfX3kpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2h5cG90ZiAgICAgICAg IChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAgICAgOwoKCgogCmV4dGVybiAgIGZsb2F0ICAg ICAgICAgIGNicnRmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAg ICAgICAgX19jYnJ0ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CgoKCiAKCiAKZXh0ZXJu ICAgZmxvYXQgICAgICAgICAgY2VpbGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJu ICAgZmxvYXQgICAgICAgICBfX2NlaWxmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKCiAK ZXh0ZXJuICAgZmxvYXQgICAgICAgICAgZmFic2YgICAgICAgICAoZmxvYXQgICBfX3gpICAgICBf X2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICk7IGV4dGVybiAgIGZsb2F0ICAgICAgICAg X19mYWJzZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgIF9fYXR0cmlidXRlX18gKCAgICAoX19j b25zdF9fKSAgKSAgOwoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBmbG9vcmYgICAgICAgICAo ZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2Zsb29yZiAgICAgICAg IChmbG9hdCAgIF9feCkgICAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGZtb2RmICAg ICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgOyBleHRlcm4gICBmbG9hdCAgICAg ICAgIF9fZm1vZGYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICAgIDsKCgog CgpleHRlcm4gIGludCAgICBfX2lzaW5mZiAgICAgKGZsb2F0ICAgX192YWx1ZSkgICBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgogCmV4dGVybiAgaW50ICAgIF9fZmluaXRlZiAgICAgKGZs b2F0ICAgX192YWx1ZSkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKIAoKZXh0ZXJu ICBpbnQgICAgaXNpbmZmICAgICAoZmxvYXQgICBfX3ZhbHVlKSAgIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKCiAKZXh0ZXJuICBpbnQgICAgZmluaXRlZiAgICAgKGZsb2F0ICAgX192YWx1 ZSkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgogCgoKCgoKZXh0ZXJuICAgZmxvYXQg ICAgICAgICAgaW5mbmFuZiAgICAgICAgIChpbnQgX19lcnJvcikgICAgIF9fYXR0cmlidXRlX18g KCAgICAoX19jb25zdF9fKSAgKTsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2luZm5hbmYgICAg ICAgICAoaW50IF9fZXJyb3IpICAgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICkg IDsKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgZHJlbWYgICAgICAgICAoZmxvYXQgICBfX3gs IGZsb2F0ICAgX195KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19kcmVtZiAgICAgICAg IChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAgICAgOwoKCiAKZXh0ZXJuICAgZmxvYXQgICAg ICAgICAgc2lnbmlmaWNhbmRmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZs b2F0ICAgICAgICAgX19zaWduaWZpY2FuZGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAgOwoK CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGNvcHlzaWduZiAgICAgICAgIChmbG9hdCAgIF9f eCwgZmxvYXQgICBfX3kpICAgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICk7IGV4 dGVybiAgIGZsb2F0ICAgICAgICAgX19jb3B5c2lnbmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZs b2F0ICAgX195KSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgoKCgoK CgoKIApleHRlcm4gIGludCAgICBfX2lzbmFuZiAgICAgKGZsb2F0ICAgX192YWx1ZSkgICBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKIApleHRlcm4gIGludCAgICBpc25hbmYgICAgIChm bG9hdCAgIF9fdmFsdWUpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIApleHRlcm4g ICBmbG9hdCAgICAgICAgICBqMGYgICAgICAgICAoZmxvYXQgICkgICAgOyBleHRlcm4gICBmbG9h dCAgICAgICAgIF9fajBmICAgICAgICAgKGZsb2F0ICApICAgICAgOwpleHRlcm4gICBmbG9hdCAg ICAgICAgICBqMWYgICAgICAgICAoZmxvYXQgICkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAg IF9fajFmICAgICAgICAgKGZsb2F0ICApICAgICAgOwpleHRlcm4gICBmbG9hdCAgICAgICAgICBq bmYgICAgICAgICAoaW50LCBmbG9hdCAgKSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19q bmYgICAgICAgICAoaW50LCBmbG9hdCAgKSAgICAgIDsKZXh0ZXJuICAgZmxvYXQgICAgICAgICAg eTBmICAgICAgICAgKGZsb2F0ICApICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3kwZiAg ICAgICAgIChmbG9hdCAgKSAgICAgIDsKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgeTFmICAgICAg ICAgKGZsb2F0ICApICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3kxZiAgICAgICAgIChm bG9hdCAgKSAgICAgIDsKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgeW5mICAgICAgICAgKGludCwg ZmxvYXQgICkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9feW5mICAgICAgICAgKGludCwg ZmxvYXQgICkgICAgICA7CgoKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGVyZmYgICAgICAg ICAoZmxvYXQgICkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fZXJmZiAgICAgICAgIChm bG9hdCAgKSAgICAgIDsKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgZXJmY2YgICAgICAgICAoZmxv YXQgICkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fZXJmY2YgICAgICAgICAoZmxvYXQg ICkgICAgICA7CmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGxnYW1tYWYgICAgICAgICAoZmxvYXQg ICkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbGdhbW1hZiAgICAgICAgIChmbG9hdCAg KSAgICAgIDsKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgdGdhbW1hZiAgICAgICAgIChmbG9hdCAg KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX190Z2FtbWFmICAgICAgICAgKGZsb2F0ICAp ICAgICAgOwoKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGdhbW1hZiAgICAgICAgIChmbG9h dCAgKSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19nYW1tYWYgICAgICAgICAoZmxvYXQg ICkgICAgICA7CgoKCiAKCgpleHRlcm4gICBmbG9hdCAgICAgICAgICBsZ2FtbWFmX3IgICAgICAg ICAgICAoZmxvYXQgICwgaW50ICpfX3NpZ25nYW1wKSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAg ICAgX19sZ2FtbWFmX3IgICAgICAgICAgICAoZmxvYXQgICwgaW50ICpfX3NpZ25nYW1wKSAgICAg IDsKCgoKCiAKCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHJpbnRmICAgICAgICAgKGZsb2F0ICAg X194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19yaW50ZiAgICAgICAgIChmbG9hdCAg IF9feCkgICAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIG5leHRhZnRlcmYgICAgICAg ICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2Nv bnN0X18pICApOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbmV4dGFmdGVyZiAgICAgICAgIChm bG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3Rf XykgICkgIDsKCgoKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgcmVtYWluZGVyZiAgICAgICAg IChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBf X3JlbWFpbmRlcmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICAgIDsKCgog CmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHNjYWxiZiAgICAgICAgIChmbG9hdCAgIF9feCwgZmxv YXQgICBfX24pICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3NjYWxiZiAgICAgICAgIChm bG9hdCAgIF9feCwgZmxvYXQgICBfX24pICAgICAgOwoKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAg ICAgc2NhbGJuZiAgICAgICAgIChmbG9hdCAgIF9feCwgaW50IF9fbikgICAgOyBleHRlcm4gICBm bG9hdCAgICAgICAgIF9fc2NhbGJuZiAgICAgICAgIChmbG9hdCAgIF9feCwgaW50IF9fbikgICAg ICA7CgogCmV4dGVybiAgIGludCAgICAgICBpbG9nYmYgICAgICAgKGZsb2F0ICAgX194KSAgIDsg ZXh0ZXJuICAgaW50ICAgICAgIF9faWxvZ2JmICAgICAgIChmbG9hdCAgIF9feCkgICAgOwoKCiMg MzM2ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwoKIyA4MiAiL3Vzci9pbmNsdWRl L21hdGguaCIgMiAzCgoKCgoKIAoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0 aGNhbGxzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKIAoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBhY29zbCAgICAgICAg IChsb25nIGRvdWJsZSAgIF9feCkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9f YWNvc2wgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgICAgOwogCmV4dGVybiAgIGxvbmcg ZG91YmxlICAgICAgICAgIGFzaW5sICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICA7IGV4 dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19hc2lubCAgICAgICAgIChsb25nIGRvdWJsZSAg IF9feCkgICAgICA7CiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgYXRhbmwgICAgICAg ICAobG9uZyBkb3VibGUgICBfX3gpICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBf X2F0YW5sICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICAgIDsKIApleHRlcm4gICBsb25n IGRvdWJsZSAgICAgICAgICBhdGFuMmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3ksIGxvbmcg ZG91YmxlICAgX194KSAgICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19hdGFuMmwg ICAgICAgICAobG9uZyBkb3VibGUgICBfX3ksIGxvbmcgZG91YmxlICAgX194KSAgICAgIDsKCiAK ZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgY29zbCAgICAgICAgIChsb25nIGRvdWJsZSAg IF9feCkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fY29zbCAgICAgICAgIChs b25nIGRvdWJsZSAgIF9feCkgICAgICA7CiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAg c2lubCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgOyBleHRlcm4gICBsb25nIGRvdWJs ZSAgICAgICAgIF9fc2lubCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgICA7CiAKZXh0 ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgdGFubCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9f eCkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fdGFubCAgICAgICAgIChsb25n IGRvdWJsZSAgIF9feCkgICAgICA7CgoKCgoKCgogCgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAg ICAgICAgIGNvc2hsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICA7IGV4dGVybiAgIGxv bmcgZG91YmxlICAgICAgICAgX19jb3NobCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAg ICA7CiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgc2luaGwgICAgICAgICAobG9uZyBk b3VibGUgICBfX3gpICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3NpbmhsICAg ICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICAgIDsKIApleHRlcm4gICBsb25nIGRvdWJsZSAg ICAgICAgICB0YW5obCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgOyBleHRlcm4gICBs b25nIGRvdWJsZSAgICAgICAgIF9fdGFuaGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAg ICAgOwoKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgYWNvc2hsICAgICAgICAgKGxv bmcgZG91YmxlICAgX194KSAgICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19hY29z aGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgICAgOwogCmV4dGVybiAgIGxvbmcgZG91 YmxlICAgICAgICAgIGFzaW5obCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgOyBleHRl cm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fYXNpbmhsICAgICAgICAgKGxvbmcgZG91YmxlICAg X194KSAgICAgIDsKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBhdGFuaGwgICAgICAg ICAobG9uZyBkb3VibGUgICBfX3gpICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBf X2F0YW5obCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgICA7CgoKIAoKIApleHRlcm4g ICBsb25nIGRvdWJsZSAgICAgICAgICBleHBsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAg ICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19leHBsICAgICAgICAgKGxvbmcgZG91 YmxlICAgX194KSAgICAgIDsKCgoKCgoKCgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAg IGZyZXhwbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgaW50ICpfX2V4cG9uZW50KSAgICA7 IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19mcmV4cGwgICAgICAgICAobG9uZyBkb3Vi bGUgICBfX3gsIGludCAqX19leHBvbmVudCkgICAgICA7CgogCmV4dGVybiAgIGxvbmcgZG91Ymxl ICAgICAgICAgIGxkZXhwbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgaW50IF9fZXhwb25l bnQpICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2xkZXhwbCAgICAgICAgIChs b25nIGRvdWJsZSAgIF9feCwgaW50IF9fZXhwb25lbnQpICAgICAgOwoKIApleHRlcm4gICBsb25n IGRvdWJsZSAgICAgICAgICBsb2dsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICA7IGV4 dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19sb2dsICAgICAgICAgKGxvbmcgZG91YmxlICAg X194KSAgICAgIDsKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgbG9nMTBsICAgICAg ICAgKGxvbmcgZG91YmxlICAgX194KSAgICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAg X19sb2cxMGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgICAgOwoKIApleHRlcm4gICBs b25nIGRvdWJsZSAgICAgICAgICBtb2RmbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9u ZyBkb3VibGUgICAqX19pcHRyKSAgICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19t b2RmbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICAqX19pcHRyKSAg ICAgIDsKCgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGV4cG0xbCAgICAgICAgIChs b25nIGRvdWJsZSAgIF9feCkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fZXhw bTFsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICAgIDsKCiAKZXh0ZXJuICAgbG9uZyBk b3VibGUgICAgICAgICAgbG9nMXBsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICA7IGV4 dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19sb2cxcGwgICAgICAgICAobG9uZyBkb3VibGUg ICBfX3gpICAgICAgOwoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBsb2dibCAgICAg ICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAg IF9fbG9nYmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgICAgOwoKCgoKCgoKCgoKCiAK CiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgcG93bCAgICAgICAgIChsb25nIGRvdWJs ZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kpICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAg ICAgICBfX3Bvd2wgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAgX195 KSAgICAgIDsKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgc3FydGwgICAgICAgICAo bG9uZyBkb3VibGUgICBfX3gpICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3Nx cnRsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICAgIDsKCgogCmV4dGVybiAgIGxvbmcg ZG91YmxlICAgICAgICAgIGh5cG90bCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBk b3VibGUgICBfX3kpICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2h5cG90bCAg ICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kpICAgICAgOwoKCgog CmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGNicnRsICAgICAgICAgKGxvbmcgZG91Ymxl ICAgX194KSAgICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19jYnJ0bCAgICAgICAg IChsb25nIGRvdWJsZSAgIF9feCkgICAgICA7CgoKCiAKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUg ICAgICAgICAgY2VpbGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIDsgZXh0ZXJuICAg bG9uZyBkb3VibGUgICAgICAgICBfX2NlaWxsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAg ICAgIDsKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgZmFic2wgICAgICAgICAobG9u ZyBkb3VibGUgICBfX3gpICAgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICk7IGV4 dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19mYWJzbCAgICAgICAgIChsb25nIGRvdWJsZSAg IF9feCkgICAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKSAgOwoKIApleHRlcm4g ICBsb25nIGRvdWJsZSAgICAgICAgICBmbG9vcmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gp ICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2Zsb29ybCAgICAgICAgIChsb25n IGRvdWJsZSAgIF9feCkgICAgICA7CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGZt b2RsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194LCBsb25nIGRvdWJsZSAgIF9feSkgICAgOyBl eHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fZm1vZGwgICAgICAgICAobG9uZyBkb3VibGUg ICBfX3gsIGxvbmcgZG91YmxlICAgX195KSAgICAgIDsKCgogCgpleHRlcm4gIGludCAgICBfX2lz aW5mbCAgICAgKGxvbmcgZG91YmxlICAgX192YWx1ZSkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgogCmV4dGVybiAgaW50ICAgIF9fZmluaXRlbCAgICAgKGxvbmcgZG91YmxlICAgX192 YWx1ZSkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKIAoKZXh0ZXJuICBpbnQgICAg aXNpbmZsICAgICAobG9uZyBkb3VibGUgICBfX3ZhbHVlKSAgIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCiAKZXh0ZXJuICBpbnQgICAgZmluaXRlbCAgICAgKGxvbmcgZG91YmxlICAgX192 YWx1ZSkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgogCgoKCgoKZXh0ZXJuICAgbG9u ZyBkb3VibGUgICAgICAgICAgaW5mbmFubCAgICAgICAgIChpbnQgX19lcnJvcikgICAgIF9fYXR0 cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKTsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAg ICBfX2luZm5hbmwgICAgICAgICAoaW50IF9fZXJyb3IpICAgICBfX2F0dHJpYnV0ZV9fICggICAg KF9fY29uc3RfXykgICkgIDsKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgZHJlbWwg ICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAgX195KSAgICA7IGV4dGVy biAgIGxvbmcgZG91YmxlICAgICAgICAgX19kcmVtbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9f eCwgbG9uZyBkb3VibGUgICBfX3kpICAgICAgOwoKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAg ICAgICAgc2lnbmlmaWNhbmRsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICA7IGV4dGVy biAgIGxvbmcgZG91YmxlICAgICAgICAgX19zaWduaWZpY2FuZGwgICAgICAgICAobG9uZyBkb3Vi bGUgICBfX3gpICAgICAgOwoKCgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGNvcHlz aWdubCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kpICAgICBf X2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICk7IGV4dGVybiAgIGxvbmcgZG91YmxlICAg ICAgICAgX19jb3B5c2lnbmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcgZG91Ymxl ICAgX195KSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgoKCgoKCgoK IApleHRlcm4gIGludCAgICBfX2lzbmFubCAgICAgKGxvbmcgZG91YmxlICAgX192YWx1ZSkgICBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKIApleHRlcm4gIGludCAgICBpc25hbmwgICAg IChsb25nIGRvdWJsZSAgIF9fdmFsdWUpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK IApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBqMGwgICAgICAgICAobG9uZyBkb3VibGUg ICkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fajBsICAgICAgICAgKGxvbmcg ZG91YmxlICApICAgICAgOwpleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBqMWwgICAgICAg ICAobG9uZyBkb3VibGUgICkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fajFs ICAgICAgICAgKGxvbmcgZG91YmxlICApICAgICAgOwpleHRlcm4gICBsb25nIGRvdWJsZSAgICAg ICAgICBqbmwgICAgICAgICAoaW50LCBsb25nIGRvdWJsZSAgKSAgICA7IGV4dGVybiAgIGxvbmcg ZG91YmxlICAgICAgICAgX19qbmwgICAgICAgICAoaW50LCBsb25nIGRvdWJsZSAgKSAgICAgIDsK ZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgeTBsICAgICAgICAgKGxvbmcgZG91YmxlICAp ICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3kwbCAgICAgICAgIChsb25nIGRv dWJsZSAgKSAgICAgIDsKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgeTFsICAgICAgICAg KGxvbmcgZG91YmxlICApICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3kxbCAg ICAgICAgIChsb25nIGRvdWJsZSAgKSAgICAgIDsKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAg ICAgeW5sICAgICAgICAgKGludCwgbG9uZyBkb3VibGUgICkgICAgOyBleHRlcm4gICBsb25nIGRv dWJsZSAgICAgICAgIF9feW5sICAgICAgICAgKGludCwgbG9uZyBkb3VibGUgICkgICAgICA7CgoK CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGVyZmwgICAgICAgICAobG9uZyBkb3Vi bGUgICkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fZXJmbCAgICAgICAgIChs b25nIGRvdWJsZSAgKSAgICAgIDsKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgZXJmY2wg ICAgICAgICAobG9uZyBkb3VibGUgICkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAg IF9fZXJmY2wgICAgICAgICAobG9uZyBkb3VibGUgICkgICAgICA7CmV4dGVybiAgIGxvbmcgZG91 YmxlICAgICAgICAgIGxnYW1tYWwgICAgICAgICAobG9uZyBkb3VibGUgICkgICAgOyBleHRlcm4g ICBsb25nIGRvdWJsZSAgICAgICAgIF9fbGdhbW1hbCAgICAgICAgIChsb25nIGRvdWJsZSAgKSAg ICAgIDsKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgdGdhbW1hbCAgICAgICAgIChsb25n IGRvdWJsZSAgKSAgICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX190Z2FtbWFsICAg ICAgICAgKGxvbmcgZG91YmxlICApICAgICAgOwoKCgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAg ICAgICAgIGdhbW1hbCAgICAgICAgIChsb25nIGRvdWJsZSAgKSAgICA7IGV4dGVybiAgIGxvbmcg ZG91YmxlICAgICAgICAgX19nYW1tYWwgICAgICAgICAobG9uZyBkb3VibGUgICkgICAgICA7CgoK CiAKCgpleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBsZ2FtbWFsX3IgICAgICAgICAgICAo bG9uZyBkb3VibGUgICwgaW50ICpfX3NpZ25nYW1wKSAgICA7IGV4dGVybiAgIGxvbmcgZG91Ymxl ICAgICAgICAgX19sZ2FtbWFsX3IgICAgICAgICAgICAobG9uZyBkb3VibGUgICwgaW50ICpfX3Np Z25nYW1wKSAgICAgIDsKCgoKCiAKCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIHJpbnRs ICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAg ICAgICAgX19yaW50bCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgICA7CgogCmV4dGVy biAgIGxvbmcgZG91YmxlICAgICAgICAgIG5leHRhZnRlcmwgICAgICAgICAobG9uZyBkb3VibGUg ICBfX3gsIGxvbmcgZG91YmxlICAgX195KSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0 X18pICApOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fbmV4dGFmdGVybCAgICAgICAg IChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kpICAgICBfX2F0dHJpYnV0ZV9f ICggICAgKF9fY29uc3RfXykgICkgIDsKCgoKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAg ICAgcmVtYWluZGVybCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBf X3kpICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3JlbWFpbmRlcmwgICAgICAg ICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAgX195KSAgICAgIDsKCgogCmV4dGVy biAgIGxvbmcgZG91YmxlICAgICAgICAgIHNjYWxibCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9f eCwgbG9uZyBkb3VibGUgICBfX24pICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBf X3NjYWxibCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX24pICAg ICAgOwoKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgc2NhbGJubCAgICAgICAgIChs b25nIGRvdWJsZSAgIF9feCwgaW50IF9fbikgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAg ICAgIF9fc2NhbGJubCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgaW50IF9fbikgICAgICA7 CgogCmV4dGVybiAgIGludCAgICAgICBpbG9nYmwgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAg IDsgZXh0ZXJuICAgaW50ICAgICAgIF9faWxvZ2JsICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkg ICAgOwoKCiMgMzM2ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwoKIyA5OSAiL3Vz ci9pbmNsdWRlL21hdGguaCIgMiAzCgoKCgoKCgoKCgoKCgogCmV4dGVybiBpbnQgc2lnbmdhbTsK CgoKIAojIDIzMiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwoKCgogCnR5cGVkZWYgZW51bQp7CiAg X0lFRUVfID0gLTEsCSAKICBfU1ZJRF8sCSAKICBfWE9QRU5fLAkgCiAgX1BPU0lYXywKICBfSVNP Q18JIAp9IF9MSUJfVkVSU0lPTl9UWVBFOwoKIAoKCmV4dGVybiBfTElCX1ZFUlNJT05fVFlQRSBf TElCX1ZFUlNJT047CgoKCgogCgoKCgoKc3RydWN0IF9fZXhjZXB0aW9uCgoKCiAgewogICAgaW50 IHR5cGU7CiAgICBjaGFyICpuYW1lOwogICAgZG91YmxlIGFyZzE7CiAgICBkb3VibGUgYXJnMjsK ICAgIGRvdWJsZSByZXR2YWw7CiAgfTsKCgpleHRlcm4gaW50IG1hdGhlcnIgIChzdHJ1Y3QgX19l eGNlcHRpb24gKl9fZXhjKSAgdGhyb3cgKCkgIDsKCgoKCgoKIAoKCgoKCgoKIAoKIyAxICIvdXNy L2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvZmxvYXQuaCIg MSAzCiAKCgoKIAoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAg IAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAg IAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKCiAgICAKCgogICAgCgoKICAg IAoKCgp1bmlvbiBfX2NvbnZlcnRfbG9uZ19kb3VibGUgewogIHVuc2lnbmVkIF9fY29udmVydF9s b25nX2RvdWJsZV9pWzRdOwogIGxvbmcgZG91YmxlIF9fY29udmVydF9sb25nX2RvdWJsZV9kOwp9 OwoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCgoKIyAyODkgIi91 c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCiMgMjk5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCgoK CiAKCgoKCgoKCgoKCgoKCgoKCiAKCgojIDMzNiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwoKCgog CgoKCgoKCiAKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAxIDMKIAoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEzNiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlu bGluZS5oIiAzCgoKCiAKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKX19p bmxpbmUgICBkb3VibGUgICAgIF9fc2duICAgKCBkb3VibGUgKTsJX19pbmxpbmUgICBkb3VibGUg ICAgIF9fc2duICAgKCBkb3VibGUgICAgICBfX3ggICkJewkgICAgICByZXR1cm4gX194ID09IDAu MCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKSAgOwl9IAlfX2lubGluZSAgIGZsb2F0 ICAgICAgX19zZ25mICAgICggZmxvYXQgKTsJX19pbmxpbmUgICBmbG9hdCAgICAgIF9fc2duZiAg ICAoIGZsb2F0ICAgICAgX194ICApCXsJICAgICAgcmV0dXJuIF9feCA9PSAwLjAgPyAwLjAgOiAo X194ID4gMC4wID8gMS4wIDogLTEuMCkgIDsJfSAJX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICAg IF9fc2dubCAgICAoIGxvbmcgZG91YmxlICk7CV9faW5saW5lICAgbG9uZyBkb3VibGUgICAgICBf X3NnbmwgICAgKCBsb25nIGRvdWJsZSAgICAgIF9feCAgKQl7CSAgICAgIHJldHVybiBfX3ggPT0g MC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjApICA7CX0gIAoKCl9faW5saW5lICAg ZG91YmxlICAgICBfX3BvdzIgICAoIGRvdWJsZSApOwlfX2lubGluZSAgIGRvdWJsZSAgICAgX19w b3cyICAgKCBkb3VibGUgICAgICBfX3ggICkJewkgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBf X3ZhbHVlOwkJCQkJCSAgICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsJCQkJ CSAgICAgICAgX19leHRlbnNpb25fXyBsb25nIGxvbmcgaW50IF9fcCA9IChsb25nIGxvbmcgaW50 KSBfX3g7CQkgICAgICAgIGlmIChfX3ggPT0gKGxvbmcgZG91YmxlKSBfX3ApCQkJCQkJICAgICAg ICAgIHsJCQkJCQkJCQkgICAgICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlX18JCQkJCQkgICAgICAJ KCJmc2NhbGUiCQkJCQkJCSAgICAgIAkgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoMS4wKSwgInUi IChfX3gpKTsJCQkgICAgICAgICAgICByZXR1cm4gX192YWx1ZTsJCQkJCQkJICAgICAgICAgIH0J CQkJCQkJCQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGVfXwkJCQkJCQkgICAgICAgICAgKCJmbGQJ JSVzdCgwKVxuXHQiCQkJCQkJICAgICAgICAgICAiZnJuZGludAkJCSMgaW50KHgpXG5cdCIJCQkJ ICAgICAgICAgICAiZnhjaFxuXHQiCQkJCQkJCQkgICAgICAgICAgICJmc3ViCSUlc3QoMSkJCSMg ZnJhY3QoeClcblx0IgkJCQkgICAgICAgICAgICJmMnhtMQkJCSMgMl4oZnJhY3QoeCkpIC0gMVxu XHQiCQkJICAgICAgICAgICA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIw IiAoX194KSk7CQkJICAgICAgICBfX3ZhbHVlICs9IDEuMDsJCQkJCQkJICAgICAgICBfX2FzbSBf X3ZvbGF0aWxlX18JCQkJCQkJICAgICAgICAgICgiZnNjYWxlIgkJCQkJCQkJICAgICAgICAgICA6 ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3ZhbHVlKSwgInUiIChfX2V4cG9uZW50KSk7CQkgICAg ICAgIHJldHVybiBfX3ZhbHVlICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICBfX3BvdzJmICAg ICggZmxvYXQgKTsJX19pbmxpbmUgICBmbG9hdCAgICAgIF9fcG93MmYgICAgKCBmbG9hdCAgICAg IF9feCAgKQl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7CQkJCQkJICAgICAg ICByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OwkJCQkJICAgICAgICBfX2V4dGVuc2lv bl9fIGxvbmcgbG9uZyBpbnQgX19wID0gKGxvbmcgbG9uZyBpbnQpIF9feDsJCSAgICAgICAgaWYg KF9feCA9PSAobG9uZyBkb3VibGUpIF9fcCkJCQkJCQkgICAgICAgICAgewkJCQkJCQkJCSAgICAg ICAgICAgIF9fYXNtIF9fdm9sYXRpbGVfXwkJCQkJCSAgICAgIAkoImZzY2FsZSIJCQkJCQkJICAg ICAgCSA6ICI9dCIgKF9fdmFsdWUpIDogIjAiICgxLjApLCAidSIgKF9feCkpOwkJCSAgICAgICAg ICAgIHJldHVybiBfX3ZhbHVlOwkJCQkJCQkgICAgICAgICAgfQkJCQkJCQkJCSAgICAgICAgX19h c20gX192b2xhdGlsZV9fCQkJCQkJCSAgICAgICAgICAoImZsZAklJXN0KDApXG5cdCIJCQkJCQkg ICAgICAgICAgICJmcm5kaW50CQkJIyBpbnQoeClcblx0IgkJCQkgICAgICAgICAgICJmeGNoXG5c dCIJCQkJCQkJCSAgICAgICAgICAgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4KVxuXHQiCQkJCSAg ICAgICAgICAgImYyeG0xCQkJIyAyXihmcmFjdCh4KSkgLSAxXG5cdCIJCQkgICAgICAgICAgIDog Ij10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsJCQkgICAgICAg IF9fdmFsdWUgKz0gMS4wOwkJCQkJCQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGVfXwkJCQkJCQkg ICAgICAgICAgKCJmc2NhbGUiCQkJCQkJCQkgICAgICAgICAgIDogIj10IiAoX192YWx1ZSkgOiAi MCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsJCSAgICAgICAgcmV0dXJuIF9fdmFsdWUg IDsJfSAJX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICAgIF9fcG93MmwgICAgKCBsb25nIGRvdWJs ZSApOwlfX2lubGluZSAgIGxvbmcgZG91YmxlICAgICAgX19wb3cybCAgICAoIGxvbmcgZG91Ymxl ICAgICAgX194ICApCXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJCQkg ICAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7CQkJCQkgICAgICAgIF9fZXh0 ZW5zaW9uX18gbG9uZyBsb25nIGludCBfX3AgPSAobG9uZyBsb25nIGludCkgX194OwkJICAgICAg ICBpZiAoX194ID09IChsb25nIGRvdWJsZSkgX19wKQkJCQkJCSAgICAgICAgICB7CQkJCQkJCQkJ ICAgICAgICAgICAgX19hc20gX192b2xhdGlsZV9fCQkJCQkJICAgICAgCSgiZnNjYWxlIgkJCQkJ CQkgICAgICAJIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKDEuMCksICJ1IiAoX194KSk7CQkJICAg ICAgICAgICAgcmV0dXJuIF9fdmFsdWU7CQkJCQkJCSAgICAgICAgICB9CQkJCQkJCQkJICAgICAg ICBfX2FzbSBfX3ZvbGF0aWxlX18JCQkJCQkJICAgICAgICAgICgiZmxkCSUlc3QoMClcblx0IgkJ CQkJCSAgICAgICAgICAgImZybmRpbnQJCQkjIGludCh4KVxuXHQiCQkJCSAgICAgICAgICAgImZ4 Y2hcblx0IgkJCQkJCQkJICAgICAgICAgICAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHgpXG5cdCIJ CQkJICAgICAgICAgICAiZjJ4bTEJCQkjIDJeKGZyYWN0KHgpKSAtIDFcblx0IgkJCSAgICAgICAg ICAgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOwkJCSAg ICAgICAgX192YWx1ZSArPSAxLjA7CQkJCQkJCSAgICAgICAgX19hc20gX192b2xhdGlsZV9fCQkJ CQkJCSAgICAgICAgICAoImZzY2FsZSIJCQkJCQkJCSAgICAgICAgICAgOiAiPXQiIChfX3ZhbHVl KSA6ICIwIiAoX192YWx1ZSksICJ1IiAoX19leHBvbmVudCkpOwkJICAgICAgICByZXR1cm4gX192 YWx1ZSAgOwl9ICAKIyAyNjAgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwoKCiMg MjgyICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKCl9faW5saW5lICB2b2lkIF9f c2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gpOwpfX2lu bGluZSAgdm9pZApfX3NpbmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJsZSAq X19jb3N4KQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19jb3NyOwlyZWdpc3RlciBsb25nIGRv dWJsZSBfX3NpbnI7CV9fYXNtIF9fdm9sYXRpbGVfXwkoImZzaW5jb3Ncblx0IgkiZm5zdHN3CSUl YXhcblx0IgkidGVzdGwJJDB4NDAwLCAlJWVheFxuXHQiCSJqegkxZlxuXHQiCSJmbGRwaVxuXHQi CSJmYWRkCSUlc3QoMClcblx0IgkiZnhjaAklJXN0KDEpXG5cdCIJIjI6IGZwcmVtMVxuXHQiCSJm bnN0c3cJJSVheFxuXHQiCSJ0ZXN0bAkkMHg0MDAsICUlZWF4XG5cdCIJImpuegkyYlxuXHQiCSJm c3RwCSUlc3QoMSlcblx0IgkiZnNpbmNvc1xuXHQiCSIxOiIJOiAiPXQiIChfX2Nvc3IpLCAiPXUi IChfX3NpbnIpIDogIjAiIChfX3gpKTsJKl9fc2lueCA9IF9fc2lucjsJKl9fY29zeCA9IF9fY29z ciA7Cn0KCl9faW5saW5lICB2b2lkIF9fc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54 LCBmbG9hdCAqX19jb3N4KTsKX19pbmxpbmUgIHZvaWQKX19zaW5jb3NmIChmbG9hdCBfX3gsIGZs b2F0ICpfX3NpbngsIGZsb2F0ICpfX2Nvc3gpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX2Nv c3I7CXJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fc2lucjsJX19hc20gX192b2xhdGlsZV9fCSgiZnNp bmNvc1xuXHQiCSJmbnN0c3cJJSVheFxuXHQiCSJ0ZXN0bAkkMHg0MDAsICUlZWF4XG5cdCIJImp6 CTFmXG5cdCIJImZsZHBpXG5cdCIJImZhZGQJJSVzdCgwKVxuXHQiCSJmeGNoCSUlc3QoMSlcblx0 IgkiMjogZnByZW0xXG5cdCIJImZuc3RzdwklJWF4XG5cdCIJInRlc3RsCSQweDQwMCwgJSVlYXhc blx0Igkiam56CTJiXG5cdCIJImZzdHAJJSVzdCgxKVxuXHQiCSJmc2luY29zXG5cdCIJIjE6Igk6 ICI9dCIgKF9fY29zciksICI9dSIgKF9fc2lucikgOiAiMCIgKF9feCkpOwkqX19zaW54ID0gX19z aW5yOwkqX19jb3N4ID0gX19jb3NyIDsKfQoKX19pbmxpbmUgIHZvaWQgX19zaW5jb3NsIChsb25n IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsCgkJCSAgICAgIGxvbmcgZG91YmxlICpf X2Nvc3gpOwpfX2lubGluZSAgdm9pZApfX3NpbmNvc2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk b3VibGUgKl9fc2lueCwgbG9uZyBkb3VibGUgKl9fY29zeCkKewogIHJlZ2lzdGVyIGxvbmcgZG91 YmxlIF9fY29zcjsJcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19zaW5yOwlfX2FzbSBfX3ZvbGF0aWxl X18JKCJmc2luY29zXG5cdCIJImZuc3RzdwklJWF4XG5cdCIJInRlc3RsCSQweDQwMCwgJSVlYXhc blx0IgkianoJMWZcblx0IgkiZmxkcGlcblx0IgkiZmFkZAklJXN0KDApXG5cdCIJImZ4Y2gJJSVz dCgxKVxuXHQiCSIyOiBmcHJlbTFcblx0IgkiZm5zdHN3CSUlYXhcblx0IgkidGVzdGwJJDB4NDAw LCAlJWVheFxuXHQiCSJqbnoJMmJcblx0IgkiZnN0cAklJXN0KDEpXG5cdCIJImZzaW5jb3Ncblx0 IgkiMToiCTogIj10IiAoX19jb3NyKSwgIj11IiAoX19zaW5yKSA6ICIwIiAoX194KSk7CSpfX3Np bnggPSBfX3NpbnI7CSpfX2Nvc3ggPSBfX2Nvc3IgOwp9CgoKIAoKCgojIDMyOCAiL3Vzci9pbmNs dWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lICAgbG9uZyBkb3VibGUgICAgX19leHBt MWwgICggbG9uZyBkb3VibGUgKTsJX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICBfX2V4cG0xbCAg KCBsb25nIGRvdWJsZSAgICBfX3ggKQl7CSAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJ cmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsJcmVnaXN0ZXIgbG9uZyBkb3VibGUgX190 ZW1wOwlfX2FzbSBfX3ZvbGF0aWxlX18JKCJmbGRsMmUJCQkjIGVeeCAtIDEgPSAyXih4ICogbG9n MihlKSkgLSAxXG5cdCIJImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQiCSJmc3QJJSVz dCgxKVxuXHQiCSJmcm5kaW50CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIJImZ4Y2hcblx0Igki ZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUpKVxuXHQiCSJmMnhtMQkJCSMgMl4oZnJh Y3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0IgkiZnNjYWxlCQkJIyAyXih4ICogbG9nMihlKSkgLSAy XihpbnQoeCAqIGxvZzIoZSkpKVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25l bnQpIDogIjAiIChfX3gpKTsJX19hc20gX192b2xhdGlsZV9fCSgiZnNjYWxlCQkJIyAyXmludCh4 ICogbG9nMihlKSlcblx0Igk6ICI9dCIgKF9fdGVtcCkgOiAiMCIgKDEuMCksICJ1IiAoX19leHBv bmVudCkpOwlfX3RlbXAgLT0gMS4wOwlyZXR1cm4gX190ZW1wICsgX192YWx1ZSAgOwl9IAoKCgoj IDM0OCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lICAgZG91Ymxl ICAgICBleHAgICAoIGRvdWJsZSApOwlfX2lubGluZSAgIGRvdWJsZSAgICAgZXhwICAgKCBkb3Vi bGUgICAgICBfX3ggICkJewkgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJcmVnaXN0 ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsJX19hc20gX192b2xhdGlsZV9fCSgiZmxkbDJlCQkJ IyBlXnggPSAyXih4ICogbG9nMihlKSlcblx0IgkiZm11bAklJXN0KDEpCQkjIHggKiBsb2cyKGUp XG5cdCIJImZzdAklJXN0KDEpXG5cdCIJImZybmRpbnQJCQkjIGludCh4ICogbG9nMihlKSlcblx0 IgkiZnhjaFxuXHQiCSJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5cdCIJImYy eG0xCQkJIyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiCTogIj10IiAoX192YWx1ZSks ICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsJX192YWx1ZSArPSAxLjA7CV9fYXNtIF9f dm9sYXRpbGVfXwkoImZzY2FsZSIJOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX192YWx1ZSksICJ1 IiAoX19leHBvbmVudCkpOwlyZXR1cm4gX192YWx1ZSAgIDsJfSAJX19pbmxpbmUgICBmbG9hdCAg ICAgIGV4cGYgICAgKCBmbG9hdCApOwlfX2lubGluZSAgIGZsb2F0ICAgICAgZXhwZiAgICAoIGZs b2F0ICAgICAgX194ICApCXsJICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7CXJlZ2lz dGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7CV9fYXNtIF9fdm9sYXRpbGVfXwkoImZsZGwyZQkJ CSMgZV54ID0gMl4oeCAqIGxvZzIoZSkpXG5cdCIJImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihl KVxuXHQiCSJmc3QJJSVzdCgxKVxuXHQiCSJmcm5kaW50CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5c dCIJImZ4Y2hcblx0IgkiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUpKVxuXHQiCSJm MnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0Igk6ICI9dCIgKF9fdmFsdWUp LCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7CV9fdmFsdWUgKz0gMS4wOwlfX2FzbSBf X3ZvbGF0aWxlX18JKCJmc2NhbGUiCTogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAi dSIgKF9fZXhwb25lbnQpKTsJcmV0dXJuIF9fdmFsdWUgICA7CX0gCV9faW5saW5lICAgbG9uZyBk b3VibGUgICAgICBleHBsICAgICggbG9uZyBkb3VibGUgKTsJX19pbmxpbmUgICBsb25nIGRvdWJs ZSAgICAgIGV4cGwgICAgKCBsb25nIGRvdWJsZSAgICAgIF9feCAgKQl7CSAgICByZWdpc3RlciBs b25nIGRvdWJsZSBfX3ZhbHVlOwlyZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OwlfX2Fz bSBfX3ZvbGF0aWxlX18JKCJmbGRsMmUJCQkjIGVeeCA9IDJeKHggKiBsb2cyKGUpKVxuXHQiCSJm bXVsCSUlc3QoMSkJCSMgeCAqIGxvZzIoZSlcblx0IgkiZnN0CSUlc3QoMSlcblx0IgkiZnJuZGlu dAkJCSMgaW50KHggKiBsb2cyKGUpKVxuXHQiCSJmeGNoXG5cdCIJImZzdWIJJSVzdCgxKQkJIyBm cmFjdCh4ICogbG9nMihlKSlcblx0IgkiZjJ4bTEJCQkjIDJeKGZyYWN0KHggKiBsb2cyKGUpKSkg LSAxXG5cdCIJOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkp OwlfX3ZhbHVlICs9IDEuMDsJX19hc20gX192b2xhdGlsZV9fCSgiZnNjYWxlIgk6ICI9dCIgKF9f dmFsdWUpIDogIjAiIChfX3ZhbHVlKSwgInUiIChfX2V4cG9uZW50KSk7CXJldHVybiBfX3ZhbHVl ICAgOwl9ICAKX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICBfX2V4cGwgICggbG9uZyBkb3VibGUg KTsJX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICBfX2V4cGwgICggbG9uZyBkb3VibGUgICAgX194 ICkJewkgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7CXJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fZXhwb25lbnQ7CV9fYXNtIF9fdm9sYXRpbGVfXwkoImZsZGwyZQkJCSMgZV54ID0gMl4oeCAq IGxvZzIoZSkpXG5cdCIJImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQiCSJmc3QJJSVz dCgxKVxuXHQiCSJmcm5kaW50CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIJImZ4Y2hcblx0Igki ZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUpKVxuXHQiCSJmMnhtMQkJCSMgMl4oZnJh Y3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0Igk6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9u ZW50KSA6ICIwIiAoX194KSk7CV9fdmFsdWUgKz0gMS4wOwlfX2FzbSBfX3ZvbGF0aWxlX18JKCJm c2NhbGUiCTogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQp KTsJcmV0dXJuIF9fdmFsdWUgIDsJfSAKCgpfX2lubGluZSAgIGRvdWJsZSAgICAgdGFuICAgKCBk b3VibGUgKTsJX19pbmxpbmUgICBkb3VibGUgICAgIHRhbiAgICggZG91YmxlICAgICAgX194ICAp CXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJCQkgICAgICAgIHJlZ2lz dGVyIGxvbmcgZG91YmxlIF9fdmFsdWUyIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7CQkg ICAgICAgIF9fYXNtIF9fdm9sYXRpbGVfXwkJCQkJCQkgICAgICAgICAgKCJmcHRhbiIJCQkJCQkJ CSAgICAgICAgICAgOiAiPXQiIChfX3ZhbHVlMiksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gp KTsJCQkgICAgICAgIHJldHVybiBfX3ZhbHVlICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICB0 YW5mICAgICggZmxvYXQgKTsJX19pbmxpbmUgICBmbG9hdCAgICAgIHRhbmYgICAgKCBmbG9hdCAg ICAgIF9feCAgKQl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7CQkJCQkJICAg ICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlMiBfX2F0dHJpYnV0ZV9fICgoX191bnVz ZWRfXykpOwkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlX18JCQkJCQkJICAgICAgICAgICgiZnB0 YW4iCQkJCQkJCQkgICAgICAgICAgIDogIj10IiAoX192YWx1ZTIpLCAiPXUiIChfX3ZhbHVlKSA6 ICIwIiAoX194KSk7CQkJICAgICAgICByZXR1cm4gX192YWx1ZSAgOwl9IAlfX2lubGluZSAgIGxv bmcgZG91YmxlICAgICAgdGFubCAgICAoIGxvbmcgZG91YmxlICk7CV9faW5saW5lICAgbG9uZyBk b3VibGUgICAgICB0YW5sICAgICggbG9uZyBkb3VibGUgICAgICBfX3ggICkJewkgICAgICByZWdp c3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOwkJCQkJCSAgICAgICAgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX192YWx1ZTIgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKTsJCSAgICAgICAgX19hc20g X192b2xhdGlsZV9fCQkJCQkJCSAgICAgICAgICAoImZwdGFuIgkJCQkJCQkJICAgICAgICAgICA6 ICI9dCIgKF9fdmFsdWUyKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOwkJCSAgICAgICAg cmV0dXJuIF9fdmFsdWUgIDsJfSAgCgoKCgoKCgoKCgoKCgoKX19pbmxpbmUgICBkb3VibGUgICAg IGF0YW4yICAgKCBkb3VibGUgLCAgZG91YmxlICk7CV9faW5saW5lICAgZG91YmxlICAgICBhdGFu MiAgICggZG91YmxlICAgICAgX195ICAsICBkb3VibGUgICAgICBfX3ggICkJewkgICAgcmVnaXN0 ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJX19hc20gX192b2xhdGlsZV9fCSgiZnBhdGFuIgk6ICI9 dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSkiKTsJcmV0dXJuIF9f dmFsdWUgICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICBhdGFuMmYgICAgKCBmbG9hdCAsICBm bG9hdCApOwlfX2lubGluZSAgIGZsb2F0ICAgICAgYXRhbjJmICAgICggZmxvYXQgICAgICBfX3kg ICwgIGZsb2F0ICAgICAgX194ICApCXsJICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7 CV9fYXNtIF9fdm9sYXRpbGVfXwkoImZwYXRhbiIJOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194 KSwgInUiIChfX3kpIDogInN0KDEpIik7CXJldHVybiBfX3ZhbHVlICAgOwl9IAlfX2lubGluZSAg IGxvbmcgZG91YmxlICAgICAgYXRhbjJsICAgICggbG9uZyBkb3VibGUgLCAgbG9uZyBkb3VibGUg KTsJX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICAgIGF0YW4ybCAgICAoIGxvbmcgZG91YmxlICAg ICAgX195ICAsICBsb25nIGRvdWJsZSAgICAgIF9feCAgKQl7CSAgICByZWdpc3RlciBsb25nIGRv dWJsZSBfX3ZhbHVlOwlfX2FzbSBfX3ZvbGF0aWxlX18JKCJmcGF0YW4iCTogIj10IiAoX192YWx1 ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOwlyZXR1cm4gX192YWx1ZSAgIDsJ fSAgCl9faW5saW5lICAgbG9uZyBkb3VibGUgICAgX19hdGFuMmwgICggbG9uZyBkb3VibGUgLCAg bG9uZyBkb3VibGUgKTsJX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICBfX2F0YW4ybCAgKCBsb25n IGRvdWJsZSAgICBfX3kgLCAgbG9uZyBkb3VibGUgICAgX194ICkJewkgIHJlZ2lzdGVyIGxvbmcg ZG91YmxlIF9fdmFsdWU7CV9fYXNtIF9fdm9sYXRpbGVfXwkoImZwYXRhbiIJOiAiPXQiIChfX3Zh bHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7CXJldHVybiBfX3ZhbHVlICA7 CX0gCgoKX19pbmxpbmUgICBkb3VibGUgICAgIGZtb2QgICAoIGRvdWJsZSAsICBkb3VibGUgKTsJ X19pbmxpbmUgICBkb3VibGUgICAgIGZtb2QgICAoIGRvdWJsZSAgICAgIF9feCAgLCAgZG91Ymxl ICAgICAgX195ICApCXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJCQkg ICAgICAgIF9fYXNtIF9fdm9sYXRpbGVfXwkJCQkJCQkgICAgICAgICAgKCIxOglmcHJlbVxuXHQi CQkJCQkJICAgICAgICAgICAiZm5zdHN3CSUlYXhcblx0IgkJCQkJCSAgICAgICAgICAgInNhaGZc blx0IgkJCQkJCQkJICAgICAgICAgICAianAJMWIiCQkJCQkJCSAgICAgICAgICAgOiAiPXQiIChf X3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImF4IiwgImNjIik7CQkgICAgICAgIHJl dHVybiBfX3ZhbHVlICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICBmbW9kZiAgICAoIGZsb2F0 ICwgIGZsb2F0ICk7CV9faW5saW5lICAgZmxvYXQgICAgICBmbW9kZiAgICAoIGZsb2F0ICAgICAg X194ICAsICBmbG9hdCAgICAgIF9feSAgKQl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f dmFsdWU7CQkJCQkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlX18JCQkJCQkJICAgICAgICAgICgi MToJZnByZW1cblx0IgkJCQkJCSAgICAgICAgICAgImZuc3RzdwklJWF4XG5cdCIJCQkJCQkgICAg ICAgICAgICJzYWhmXG5cdCIJCQkJCQkJCSAgICAgICAgICAgImpwCTFiIgkJCQkJCQkgICAgICAg ICAgIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJheCIsICJjYyIp OwkJICAgICAgICByZXR1cm4gX192YWx1ZSAgOwl9IAlfX2lubGluZSAgIGxvbmcgZG91YmxlICAg ICAgZm1vZGwgICAgKCBsb25nIGRvdWJsZSAsICBsb25nIGRvdWJsZSApOwlfX2lubGluZSAgIGxv bmcgZG91YmxlICAgICAgZm1vZGwgICAgKCBsb25nIGRvdWJsZSAgICAgIF9feCAgLCAgbG9uZyBk b3VibGUgICAgICBfX3kgICkJewkgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOwkJ CQkJCSAgICAgICAgX19hc20gX192b2xhdGlsZV9fCQkJCQkJCSAgICAgICAgICAoIjE6CWZwcmVt XG5cdCIJCQkJCQkgICAgICAgICAgICJmbnN0c3cJJSVheFxuXHQiCQkJCQkJICAgICAgICAgICAi c2FoZlxuXHQiCQkJCQkJCQkgICAgICAgICAgICJqcAkxYiIJCQkJCQkJICAgICAgICAgICA6ICI9 dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsJCSAgICAg ICAgcmV0dXJuIF9fdmFsdWUgIDsJfSAgCiMgMzgwICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5s aW5lLmgiIDMKCgpfX2lubGluZSAgIGRvdWJsZSAgICAgcG93ICAgKCBkb3VibGUgLCAgZG91Ymxl ICk7CV9faW5saW5lICAgZG91YmxlICAgICBwb3cgICAoIGRvdWJsZSAgICAgIF9feCAgLCAgZG91 YmxlICAgICAgX195ICApCXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJ CQkgICAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7CQkJCQkgICAgICAgIF9f ZXh0ZW5zaW9uX18gbG9uZyBsb25nIGludCBfX3AgPSAobG9uZyBsb25nIGludCkgX195OwkJICAg ICAgICBpZiAoX194ID09IDAuMCAmJiBfX3kgPiAwLjApCQkJCQkJICAgICAgICAgIHJldHVybiAw LjA7CQkJCQkJCQkgICAgICAgIGlmIChfX3kgPT0gKGRvdWJsZSkgX19wKQkJCQkJCSAgICAgICAg ICB7CQkJCQkJCQkJICAgICAgICAgICAgbG9uZyBkb3VibGUgX19yID0gMS4wOwkJCQkJCSAgICAg ICAgICAgIGlmIChfX3AgPT0gMCkJCQkJCQkJICAgICAgCXJldHVybiAxLjA7CQkJCQkJCSAgICAg ICAgICAgIGlmIChfX3AgPCAwKQkJCQkJCQkgICAgICAJewkJCQkJCQkJICAgICAgCSAgX19wID0g LV9fcDsJCQkJCQkJICAgICAgCSAgX194ID0gMS4wIC8gX194OwkJCQkJCSAgICAgIAl9CQkJCQkJ CQkgICAgICAgICAgICB3aGlsZSAoMSkJCQkJCQkJCSAgICAgIAl7CQkJCQkJCQkgICAgICAJICBp ZiAoX19wICYgMSkJCQkJCQkJICAgICAgCSAgICBfX3IgKj0gX194OwkJCQkJCQkgICAgICAJICBf X3AgPj49IDE7CQkJCQkJCSAgICAgIAkgIGlmIChfX3AgPT0gMCkJCQkJCQkJICAgICAgCSAgICBy ZXR1cm4gX19yOwkJCQkJCQkgICAgICAJICBfX3ggKj0gX194OwkJCQkJCQkgICAgICAJfQkJCQkJ CQkJICAgICAgICAgICAgIAkJCQkJCQkgICAgICAgICAgfQkJCQkJCQkJCSAgICAgICAgX19hc20g X192b2xhdGlsZV9fCQkJCQkJCSAgICAgICAgICAoImZ5bDJ4IiA6ICI9dCIgKF9fdmFsdWUpIDog IjAiIChfX3gpLCAidSIgKDEuMCkgOiAic3QoMSkiKTsJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxl X18JCQkJCQkJICAgICAgICAgICgiZm11bAklJXN0KDEpCQkjIHkgKiBsb2cyKHgpXG5cdCIJCQkg ICAgICAgICAgICJmc3QJJSVzdCgxKVxuXHQiCQkJCQkJICAgICAgICAgICAiZnJuZGludAkJCSMg aW50KHkgKiBsb2cyKHgpKVxuXHQiCQkJICAgICAgICAgICAiZnhjaFxuXHQiCQkJCQkJCQkgICAg ICAgICAgICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeSAqIGxvZzIoeCkpXG5cdCIJCSAgICAgICAg ICAgImYyeG0xCQkJIyAyXihmcmFjdCh5ICogbG9nMih4KSkpIC0gMVxuXHQiCSAgICAgICAgICAg OiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feSksICIxIiAoX192 YWx1ZSkpOwkgICAgICAgIF9fdmFsdWUgKz0gMS4wOwkJCQkJCQkgICAgICAgIF9fYXNtIF9fdm9s YXRpbGVfXwkJCQkJCQkgICAgICAgICAgKCJmc2NhbGUiCQkJCQkJCQkgICAgICAgICAgIDogIj10 IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsJCSAgICAgICAg cmV0dXJuIF9fdmFsdWUgIDsJfSAJX19pbmxpbmUgICBmbG9hdCAgICAgIHBvd2YgICAgKCBmbG9h dCAsICBmbG9hdCApOwlfX2lubGluZSAgIGZsb2F0ICAgICAgcG93ZiAgICAoIGZsb2F0ICAgICAg X194ICAsICBmbG9hdCAgICAgIF9feSAgKQl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f dmFsdWU7CQkJCQkJICAgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OwkJCQkJ ICAgICAgICBfX2V4dGVuc2lvbl9fIGxvbmcgbG9uZyBpbnQgX19wID0gKGxvbmcgbG9uZyBpbnQp IF9feTsJCSAgICAgICAgaWYgKF9feCA9PSAwLjAgJiYgX195ID4gMC4wKQkJCQkJCSAgICAgICAg ICByZXR1cm4gMC4wOwkJCQkJCQkJICAgICAgICBpZiAoX195ID09IChkb3VibGUpIF9fcCkJCQkJ CQkgICAgICAgICAgewkJCQkJCQkJCSAgICAgICAgICAgIGxvbmcgZG91YmxlIF9fciA9IDEuMDsJ CQkJCQkgICAgICAgICAgICBpZiAoX19wID09IDApCQkJCQkJCSAgICAgIAlyZXR1cm4gMS4wOwkJ CQkJCQkgICAgICAgICAgICBpZiAoX19wIDwgMCkJCQkJCQkJICAgICAgCXsJCQkJCQkJCSAgICAg IAkgIF9fcCA9IC1fX3A7CQkJCQkJCSAgICAgIAkgIF9feCA9IDEuMCAvIF9feDsJCQkJCQkgICAg ICAJfQkJCQkJCQkJICAgICAgICAgICAgd2hpbGUgKDEpCQkJCQkJCQkgICAgICAJewkJCQkJCQkJ ICAgICAgCSAgaWYgKF9fcCAmIDEpCQkJCQkJCSAgICAgIAkgICAgX19yICo9IF9feDsJCQkJCQkJ ICAgICAgCSAgX19wID4+PSAxOwkJCQkJCQkgICAgICAJICBpZiAoX19wID09IDApCQkJCQkJCSAg ICAgIAkgICAgcmV0dXJuIF9fcjsJCQkJCQkJICAgICAgCSAgX194ICo9IF9feDsJCQkJCQkJICAg ICAgCX0JCQkJCQkJCSAgICAgICAgICAgICAJCQkJCQkJICAgICAgICAgIH0JCQkJCQkJCQkgICAg ICAgIF9fYXNtIF9fdm9sYXRpbGVfXwkJCQkJCQkgICAgICAgICAgKCJmeWwyeCIgOiAiPXQiIChf X3ZhbHVlKSA6ICIwIiAoX194KSwgInUiICgxLjApIDogInN0KDEpIik7CSAgICAgICAgX19hc20g X192b2xhdGlsZV9fCQkJCQkJCSAgICAgICAgICAoImZtdWwJJSVzdCgxKQkJIyB5ICogbG9nMih4 KVxuXHQiCQkJICAgICAgICAgICAiZnN0CSUlc3QoMSlcblx0IgkJCQkJCSAgICAgICAgICAgImZy bmRpbnQJCQkjIGludCh5ICogbG9nMih4KSlcblx0IgkJCSAgICAgICAgICAgImZ4Y2hcblx0IgkJ CQkJCQkJICAgICAgICAgICAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHkgKiBsb2cyKHgpKVxuXHQi CQkgICAgICAgICAgICJmMnhtMQkJCSMgMl4oZnJhY3QoeSAqIGxvZzIoeCkpKSAtIDFcblx0Igkg ICAgICAgICAgIDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3kp LCAiMSIgKF9fdmFsdWUpKTsJICAgICAgICBfX3ZhbHVlICs9IDEuMDsJCQkJCQkJICAgICAgICBf X2FzbSBfX3ZvbGF0aWxlX18JCQkJCQkJICAgICAgICAgICgiZnNjYWxlIgkJCQkJCQkJICAgICAg ICAgICA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3ZhbHVlKSwgInUiIChfX2V4cG9uZW50KSk7 CQkgICAgICAgIHJldHVybiBfX3ZhbHVlICA7CX0gCV9faW5saW5lICAgbG9uZyBkb3VibGUgICAg ICBwb3dsICAgICggbG9uZyBkb3VibGUgLCAgbG9uZyBkb3VibGUgKTsJX19pbmxpbmUgICBsb25n IGRvdWJsZSAgICAgIHBvd2wgICAgKCBsb25nIGRvdWJsZSAgICAgIF9feCAgLCAgbG9uZyBkb3Vi bGUgICAgICBfX3kgICkJewkgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOwkJCQkJ CSAgICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsJCQkJCSAgICAgICAgX19l eHRlbnNpb25fXyBsb25nIGxvbmcgaW50IF9fcCA9IChsb25nIGxvbmcgaW50KSBfX3k7CQkgICAg ICAgIGlmIChfX3ggPT0gMC4wICYmIF9feSA+IDAuMCkJCQkJCQkgICAgICAgICAgcmV0dXJuIDAu MDsJCQkJCQkJCSAgICAgICAgaWYgKF9feSA9PSAoZG91YmxlKSBfX3ApCQkJCQkJICAgICAgICAg IHsJCQkJCQkJCQkgICAgICAgICAgICBsb25nIGRvdWJsZSBfX3IgPSAxLjA7CQkJCQkJICAgICAg ICAgICAgaWYgKF9fcCA9PSAwKQkJCQkJCQkgICAgICAJcmV0dXJuIDEuMDsJCQkJCQkJICAgICAg ICAgICAgaWYgKF9fcCA8IDApCQkJCQkJCSAgICAgIAl7CQkJCQkJCQkgICAgICAJICBfX3AgPSAt X19wOwkJCQkJCQkgICAgICAJICBfX3ggPSAxLjAgLyBfX3g7CQkJCQkJICAgICAgCX0JCQkJCQkJ CSAgICAgICAgICAgIHdoaWxlICgxKQkJCQkJCQkJICAgICAgCXsJCQkJCQkJCSAgICAgIAkgIGlm IChfX3AgJiAxKQkJCQkJCQkgICAgICAJICAgIF9fciAqPSBfX3g7CQkJCQkJCSAgICAgIAkgIF9f cCA+Pj0gMTsJCQkJCQkJICAgICAgCSAgaWYgKF9fcCA9PSAwKQkJCQkJCQkgICAgICAJICAgIHJl dHVybiBfX3I7CQkJCQkJCSAgICAgIAkgIF9feCAqPSBfX3g7CQkJCQkJCSAgICAgIAl9CQkJCQkJ CQkgICAgICAgICAgICAgCQkJCQkJCSAgICAgICAgICB9CQkJCQkJCQkJICAgICAgICBfX2FzbSBf X3ZvbGF0aWxlX18JCQkJCQkJICAgICAgICAgICgiZnlsMngiIDogIj10IiAoX192YWx1ZSkgOiAi MCIgKF9feCksICJ1IiAoMS4wKSA6ICJzdCgxKSIpOwkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGVf XwkJCQkJCQkgICAgICAgICAgKCJmbXVsCSUlc3QoMSkJCSMgeSAqIGxvZzIoeClcblx0IgkJCSAg ICAgICAgICAgImZzdAklJXN0KDEpXG5cdCIJCQkJCQkgICAgICAgICAgICJmcm5kaW50CQkJIyBp bnQoeSAqIGxvZzIoeCkpXG5cdCIJCQkgICAgICAgICAgICJmeGNoXG5cdCIJCQkJCQkJCSAgICAg ICAgICAgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh5ICogbG9nMih4KSlcblx0IgkJICAgICAgICAg ICAiZjJ4bTEJCQkjIDJeKGZyYWN0KHkgKiBsb2cyKHgpKSkgLSAxXG5cdCIJICAgICAgICAgICA6 ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX195KSwgIjEiIChfX3Zh bHVlKSk7CSAgICAgICAgX192YWx1ZSArPSAxLjA7CQkJCQkJCSAgICAgICAgX19hc20gX192b2xh dGlsZV9fCQkJCQkJCSAgICAgICAgICAoImZzY2FsZSIJCQkJCQkJCSAgICAgICAgICAgOiAiPXQi IChfX3ZhbHVlKSA6ICIwIiAoX192YWx1ZSksICJ1IiAoX19leHBvbmVudCkpOwkJICAgICAgICBy ZXR1cm4gX192YWx1ZSAgOwl9ICAKIyA0MjQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUu aCIgMwoKCl9faW5saW5lICAgIGRvdWJsZSAgICAgICAgc3FydCAgICAoICBkb3VibGUgICk7CV9f aW5saW5lICAgIGRvdWJsZSAgICAgICAgc3FydCAgICAoICBkb3VibGUgICBfX3gpCXsJcmVnaXN0 ZXIgICBkb3VibGUgICBfX3Jlc3VsdDsJX19hc20gX192b2xhdGlsZV9fICggICAgICAiZnNxcnQi ICAgIDogIj10IiAoX19yZXN1bHQpIDogICAiMCIgKF9feCkgKTsJcmV0dXJuIF9fcmVzdWx0Owl9 ICAJX19pbmxpbmUgICAgZmxvYXQgICAgICAgICBzcXJ0ZiAgICAgKCAgZmxvYXQgICk7CV9faW5s aW5lICAgIGZsb2F0ICAgICAgICAgc3FydGYgICAgICggIGZsb2F0ICAgX194KQl7CXJlZ2lzdGVy ICAgZmxvYXQgICBfX3Jlc3VsdDsJX19hc20gX192b2xhdGlsZV9fICggICAgICAiZnNxcnQiICAg IDogIj10IiAoX19yZXN1bHQpIDogICAiMCIgKF9feCkgKTsJcmV0dXJuIF9fcmVzdWx0Owl9ICAJ X19pbmxpbmUgICAgbG9uZyBkb3VibGUgICAgICAgICBzcXJ0bCAgICAgKCAgbG9uZyBkb3VibGUg ICk7CV9faW5saW5lICAgIGxvbmcgZG91YmxlICAgICAgICAgc3FydGwgICAgICggIGxvbmcgZG91 YmxlICAgX194KQl7CXJlZ2lzdGVyICAgbG9uZyBkb3VibGUgICBfX3Jlc3VsdDsJX19hc20gX192 b2xhdGlsZV9fICggICAgICAiZnNxcnQiICAgIDogIj10IiAoX19yZXN1bHQpIDogICAiMCIgKF9f eCkgKTsJcmV0dXJuIF9fcmVzdWx0Owl9ICAgCl9faW5saW5lICAgIGxvbmcgZG91YmxlICAgICAg IF9fc3FydGwgICAoICBsb25nIGRvdWJsZSAgKTsJX19pbmxpbmUgICAgbG9uZyBkb3VibGUgICAg ICAgX19zcXJ0bCAgICggIGxvbmcgZG91YmxlICAgX194KQl7CXJlZ2lzdGVyICAgbG9uZyBkb3Vi bGUgICBfX3Jlc3VsdDsJX19hc20gX192b2xhdGlsZV9fICggICAgImZzcXJ0IiAgIDogIj10IiAo X19yZXN1bHQpIDogICAiMCIgKF9feCkgKTsJcmV0dXJuIF9fcmVzdWx0Owl9ICAKCgpfX2lubGlu ZSAgIGRvdWJsZSAgICBmYWJzICAoIGRvdWJsZSApOwlfX2lubGluZSAgIGRvdWJsZSAgICBmYWJz ICAoIGRvdWJsZSAgICBfX3ggKQl7CSAgcmV0dXJuIF9fYnVpbHRpbl9mYWJzIChfX3gpIDsJfSAK X19pbmxpbmUgICBmbG9hdCAgICBmYWJzZiAgKCBmbG9hdCApOwlfX2lubGluZSAgIGZsb2F0ICAg IGZhYnNmICAoIGZsb2F0ICAgIF9feCApCXsJICByZXR1cm4gX19idWlsdGluX2ZhYnNmIChfX3gp IDsJfSAKX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICBmYWJzbCAgKCBsb25nIGRvdWJsZSApOwlf X2lubGluZSAgIGxvbmcgZG91YmxlICAgIGZhYnNsICAoIGxvbmcgZG91YmxlICAgIF9feCApCXsJ ICByZXR1cm4gX19idWlsdGluX2ZhYnNsIChfX3gpIDsJfSAKX19pbmxpbmUgICBsb25nIGRvdWJs ZSAgICBfX2ZhYnNsICAoIGxvbmcgZG91YmxlICk7CV9faW5saW5lICAgbG9uZyBkb3VibGUgICAg X19mYWJzbCAgKCBsb25nIGRvdWJsZSAgICBfX3ggKQl7CSAgcmV0dXJuIF9fYnVpbHRpbl9mYWJz bCAoX194KSA7CX0gCgoKCgoKIApfX2lubGluZSAgICBkb3VibGUgICAgICAgIHNpbiAgICAoICBk b3VibGUgICk7CV9faW5saW5lICAgIGRvdWJsZSAgICAgICAgc2luICAgICggIGRvdWJsZSAgIF9f eCkJewlyZWdpc3RlciAgIGRvdWJsZSAgIF9fcmVzdWx0OwlfX2FzbSBfX3ZvbGF0aWxlX18gKCAg ICAgICJmc2luIiAgICA6ICI9dCIgKF9fcmVzdWx0KSA6ICAgIjAiIChfX3gpICk7CXJldHVybiBf X3Jlc3VsdDsJfSAgCV9faW5saW5lICAgIGZsb2F0ICAgICAgICAgc2luZiAgICAgKCAgZmxvYXQg ICk7CV9faW5saW5lICAgIGZsb2F0ICAgICAgICAgc2luZiAgICAgKCAgZmxvYXQgICBfX3gpCXsJ cmVnaXN0ZXIgICBmbG9hdCAgIF9fcmVzdWx0OwlfX2FzbSBfX3ZvbGF0aWxlX18gKCAgICAgICJm c2luIiAgICA6ICI9dCIgKF9fcmVzdWx0KSA6ICAgIjAiIChfX3gpICk7CXJldHVybiBfX3Jlc3Vs dDsJfSAgCV9faW5saW5lICAgIGxvbmcgZG91YmxlICAgICAgICAgc2lubCAgICAgKCAgbG9uZyBk b3VibGUgICk7CV9faW5saW5lICAgIGxvbmcgZG91YmxlICAgICAgICAgc2lubCAgICAgKCAgbG9u ZyBkb3VibGUgICBfX3gpCXsJcmVnaXN0ZXIgICBsb25nIGRvdWJsZSAgIF9fcmVzdWx0OwlfX2Fz bSBfX3ZvbGF0aWxlX18gKCAgICAgICJmc2luIiAgICA6ICI9dCIgKF9fcmVzdWx0KSA6ICAgIjAi IChfX3gpICk7CXJldHVybiBfX3Jlc3VsdDsJfSAgIAogCl9faW5saW5lICAgIGRvdWJsZSAgICAg ICAgY29zICAgICggIGRvdWJsZSAgKTsJX19pbmxpbmUgICAgZG91YmxlICAgICAgICBjb3MgICAg KCAgZG91YmxlICAgX194KQl7CXJlZ2lzdGVyICAgZG91YmxlICAgX19yZXN1bHQ7CV9fYXNtIF9f dm9sYXRpbGVfXyAoICAgICAgImZjb3MiICAgIDogIj10IiAoX19yZXN1bHQpIDogICAiMCIgKF9f eCkgKTsJcmV0dXJuIF9fcmVzdWx0Owl9ICAJX19pbmxpbmUgICAgZmxvYXQgICAgICAgICBjb3Nm ICAgICAoICBmbG9hdCAgKTsJX19pbmxpbmUgICAgZmxvYXQgICAgICAgICBjb3NmICAgICAoICBm bG9hdCAgIF9feCkJewlyZWdpc3RlciAgIGZsb2F0ICAgX19yZXN1bHQ7CV9fYXNtIF9fdm9sYXRp bGVfXyAoICAgICAgImZjb3MiICAgIDogIj10IiAoX19yZXN1bHQpIDogICAiMCIgKF9feCkgKTsJ cmV0dXJuIF9fcmVzdWx0Owl9ICAJX19pbmxpbmUgICAgbG9uZyBkb3VibGUgICAgICAgICBjb3Ns ICAgICAoICBsb25nIGRvdWJsZSAgKTsJX19pbmxpbmUgICAgbG9uZyBkb3VibGUgICAgICAgICBj b3NsICAgICAoICBsb25nIGRvdWJsZSAgIF9feCkJewlyZWdpc3RlciAgIGxvbmcgZG91YmxlICAg X19yZXN1bHQ7CV9fYXNtIF9fdm9sYXRpbGVfXyAoICAgICAgImZjb3MiICAgIDogIj10IiAoX19y ZXN1bHQpIDogICAiMCIgKF9feCkgKTsJcmV0dXJuIF9fcmVzdWx0Owl9ICAgCgpfX2lubGluZSAg IGRvdWJsZSAgICAgYXRhbiAgICggZG91YmxlICk7CV9faW5saW5lICAgZG91YmxlICAgICBhdGFu ICAgKCBkb3VibGUgIF9feCkJewlyZWdpc3RlciAgZG91YmxlICBfX3Jlc3VsdDsJX19hc20gX192 b2xhdGlsZV9fICggICAgImZsZDE7IGZwYXRhbiIgICA6ICI9dCIgKF9fcmVzdWx0KSA6ICAgICAi MCIgKF9feCkgOiAic3QoMSkiICApOwlyZXR1cm4gX19yZXN1bHQ7CX0gCV9faW5saW5lICAgZmxv YXQgICAgICBhdGFuZiAgICAoIGZsb2F0ICk7CV9faW5saW5lICAgZmxvYXQgICAgICBhdGFuZiAg ICAoIGZsb2F0ICBfX3gpCXsJcmVnaXN0ZXIgIGZsb2F0ICBfX3Jlc3VsdDsJX19hc20gX192b2xh dGlsZV9fICggICAgImZsZDE7IGZwYXRhbiIgICA6ICI9dCIgKF9fcmVzdWx0KSA6ICAgICAiMCIg KF9feCkgOiAic3QoMSkiICApOwlyZXR1cm4gX19yZXN1bHQ7CX0gCV9faW5saW5lICAgbG9uZyBk b3VibGUgICAgICBhdGFubCAgICAoIGxvbmcgZG91YmxlICk7CV9faW5saW5lICAgbG9uZyBkb3Vi bGUgICAgICBhdGFubCAgICAoIGxvbmcgZG91YmxlICBfX3gpCXsJcmVnaXN0ZXIgIGxvbmcgZG91 YmxlICBfX3Jlc3VsdDsJX19hc20gX192b2xhdGlsZV9fICggICAgImZsZDE7IGZwYXRhbiIgICA6 ICI9dCIgKF9fcmVzdWx0KSA6ICAgICAiMCIgKF9feCkgOiAic3QoMSkiICApOwlyZXR1cm4gX19y ZXN1bHQ7CX0gIApfX2lubGluZSAgIGRvdWJsZSAgICAgbG9nICAgKCBkb3VibGUgKTsJX19pbmxp bmUgICBkb3VibGUgICAgIGxvZyAgICggZG91YmxlICBfX3gpCXsJcmVnaXN0ZXIgIGRvdWJsZSAg X19yZXN1bHQ7CV9fYXNtIF9fdm9sYXRpbGVfXyAoICAgICJmbGRsbjI7IGZ4Y2g7IGZ5bDJ4IiAg IDogIj10IiAoX19yZXN1bHQpIDogICAgICIwIiAoX194KSA6ICJzdCgxKSIgICk7CXJldHVybiBf X3Jlc3VsdDsJfSAJX19pbmxpbmUgICBmbG9hdCAgICAgIGxvZ2YgICAgKCBmbG9hdCApOwlfX2lu bGluZSAgIGZsb2F0ICAgICAgbG9nZiAgICAoIGZsb2F0ICBfX3gpCXsJcmVnaXN0ZXIgIGZsb2F0 ICBfX3Jlc3VsdDsJX19hc20gX192b2xhdGlsZV9fICggICAgImZsZGxuMjsgZnhjaDsgZnlsMngi ICAgOiAiPXQiIChfX3Jlc3VsdCkgOiAgICAgIjAiIChfX3gpIDogInN0KDEpIiAgKTsJcmV0dXJu IF9fcmVzdWx0Owl9IAlfX2lubGluZSAgIGxvbmcgZG91YmxlICAgICAgbG9nbCAgICAoIGxvbmcg ZG91YmxlICk7CV9faW5saW5lICAgbG9uZyBkb3VibGUgICAgICBsb2dsICAgICggbG9uZyBkb3Vi bGUgIF9feCkJewlyZWdpc3RlciAgbG9uZyBkb3VibGUgIF9fcmVzdWx0OwlfX2FzbSBfX3ZvbGF0 aWxlX18gKCAgICAiZmxkbG4yOyBmeGNoOyBmeWwyeCIgICA6ICI9dCIgKF9fcmVzdWx0KSA6ICAg ICAiMCIgKF9feCkgOiAic3QoMSkiICApOwlyZXR1cm4gX19yZXN1bHQ7CX0gIApfX2lubGluZSAg IGRvdWJsZSAgICAgbG9nMTAgICAoIGRvdWJsZSApOwlfX2lubGluZSAgIGRvdWJsZSAgICAgbG9n MTAgICAoIGRvdWJsZSAgX194KQl7CXJlZ2lzdGVyICBkb3VibGUgIF9fcmVzdWx0OwlfX2FzbSBf X3ZvbGF0aWxlX18gKCAgICAiZmxkbGcyOyBmeGNoOyBmeWwyeCIgICA6ICI9dCIgKF9fcmVzdWx0 KSA6ICAgICAiMCIgKF9feCkgOiAic3QoMSkiICApOwlyZXR1cm4gX19yZXN1bHQ7CX0gCV9faW5s aW5lICAgZmxvYXQgICAgICBsb2cxMGYgICAgKCBmbG9hdCApOwlfX2lubGluZSAgIGZsb2F0ICAg ICAgbG9nMTBmICAgICggZmxvYXQgIF9feCkJewlyZWdpc3RlciAgZmxvYXQgIF9fcmVzdWx0Owlf X2FzbSBfX3ZvbGF0aWxlX18gKCAgICAiZmxkbGcyOyBmeGNoOyBmeWwyeCIgICA6ICI9dCIgKF9f cmVzdWx0KSA6ICAgICAiMCIgKF9feCkgOiAic3QoMSkiICApOwlyZXR1cm4gX19yZXN1bHQ7CX0g CV9faW5saW5lICAgbG9uZyBkb3VibGUgICAgICBsb2cxMGwgICAgKCBsb25nIGRvdWJsZSApOwlf X2lubGluZSAgIGxvbmcgZG91YmxlICAgICAgbG9nMTBsICAgICggbG9uZyBkb3VibGUgIF9feCkJ ewlyZWdpc3RlciAgbG9uZyBkb3VibGUgIF9fcmVzdWx0OwlfX2FzbSBfX3ZvbGF0aWxlX18gKCAg ICAiZmxkbGcyOyBmeGNoOyBmeWwyeCIgICA6ICI9dCIgKF9fcmVzdWx0KSA6ICAgICAiMCIgKF9f eCkgOiAic3QoMSkiICApOwlyZXR1cm4gX19yZXN1bHQ7CX0gIAoKX19pbmxpbmUgICBkb3VibGUg ICAgIGFzaW4gICAoIGRvdWJsZSApOwlfX2lubGluZSAgIGRvdWJsZSAgICAgYXNpbiAgICggZG91 YmxlICAgICAgX194ICApCXsJICAgIHJldHVybiBfX2F0YW4ybCAoX194LCBfX3NxcnRsICgxLjAg LSBfX3ggKiBfX3gpKSAgOwl9IAlfX2lubGluZSAgIGZsb2F0ICAgICAgYXNpbmYgICAgKCBmbG9h dCApOwlfX2lubGluZSAgIGZsb2F0ICAgICAgYXNpbmYgICAgKCBmbG9hdCAgICAgIF9feCAgKQl7 CSAgICByZXR1cm4gX19hdGFuMmwgKF9feCwgX19zcXJ0bCAoMS4wIC0gX194ICogX194KSkgIDsJ fSAJX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICAgIGFzaW5sICAgICggbG9uZyBkb3VibGUgKTsJ X19pbmxpbmUgICBsb25nIGRvdWJsZSAgICAgIGFzaW5sICAgICggbG9uZyBkb3VibGUgICAgICBf X3ggICkJewkgICAgcmV0dXJuIF9fYXRhbjJsIChfX3gsIF9fc3FydGwgKDEuMCAtIF9feCAqIF9f eCkpICA7CX0gIApfX2lubGluZSAgIGRvdWJsZSAgICAgYWNvcyAgICggZG91YmxlICk7CV9faW5s aW5lICAgZG91YmxlICAgICBhY29zICAgKCBkb3VibGUgICAgICBfX3ggICkJewkgICAgcmV0dXJu IF9fYXRhbjJsIChfX3NxcnRsICgxLjAgLSBfX3ggKiBfX3gpLCBfX3gpICA7CX0gCV9faW5saW5l ICAgZmxvYXQgICAgICBhY29zZiAgICAoIGZsb2F0ICk7CV9faW5saW5lICAgZmxvYXQgICAgICBh Y29zZiAgICAoIGZsb2F0ICAgICAgX194ICApCXsJICAgIHJldHVybiBfX2F0YW4ybCAoX19zcXJ0 bCAoMS4wIC0gX194ICogX194KSwgX194KSAgOwl9IAlfX2lubGluZSAgIGxvbmcgZG91YmxlICAg ICAgYWNvc2wgICAgKCBsb25nIGRvdWJsZSApOwlfX2lubGluZSAgIGxvbmcgZG91YmxlICAgICAg YWNvc2wgICAgKCBsb25nIGRvdWJsZSAgICAgIF9feCAgKQl7CSAgICByZXR1cm4gX19hdGFuMmwg KF9fc3FydGwgKDEuMCAtIF9feCAqIF9feCksIF9feCkgIDsJfSAgCgpfX2lubGluZSAgIGxvbmcg ZG91YmxlICAgIF9fc2duMWwgICggbG9uZyBkb3VibGUgKTsJX19pbmxpbmUgICBsb25nIGRvdWJs ZSAgICBfX3NnbjFsICAoIGxvbmcgZG91YmxlICAgIF9feCApCXsJICByZXR1cm4gX194ID49IDAu MCA/IDEuMCA6IC0xLjAgOwl9IAoKCiAKX19pbmxpbmUgICBkb3VibGUgICAgIHNpbmggICAoIGRv dWJsZSApOwlfX2lubGluZSAgIGRvdWJsZSAgICAgc2luaCAgICggZG91YmxlICAgICAgX194ICAp CXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKF9fZmFic2wg KF9feCkpOwkJICAgICAgICByZXR1cm4gMC41ICogKF9fZXhtMSAvIChfX2V4bTEgKyAxLjApICsg X19leG0xKSAqIF9fc2duMWwgKF9feCkgIDsJfSAJX19pbmxpbmUgICBmbG9hdCAgICAgIHNpbmhm ICAgICggZmxvYXQgKTsJX19pbmxpbmUgICBmbG9hdCAgICAgIHNpbmhmICAgICggZmxvYXQgICAg ICBfX3ggICkJewkgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAo X19mYWJzbCAoX194KSk7CQkgICAgICAgIHJldHVybiAwLjUgKiAoX19leG0xIC8gKF9fZXhtMSAr IDEuMCkgKyBfX2V4bTEpICogX19zZ24xbCAoX194KSAgOwl9IAlfX2lubGluZSAgIGxvbmcgZG91 YmxlICAgICAgc2luaGwgICAgKCBsb25nIGRvdWJsZSApOwlfX2lubGluZSAgIGxvbmcgZG91Ymxl ICAgICAgc2luaGwgICAgKCBsb25nIGRvdWJsZSAgICAgIF9feCAgKQl7CSAgICAgIHJlZ2lzdGVy IGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsIChfX2ZhYnNsIChfX3gpKTsJCSAgICAgICAg cmV0dXJuIDAuNSAqIChfX2V4bTEgLyAoX19leG0xICsgMS4wKSArIF9fZXhtMSkgKiBfX3NnbjFs IChfX3gpICA7CX0gIAoKCgpfX2lubGluZSAgIGRvdWJsZSAgICAgY29zaCAgICggZG91YmxlICk7 CV9faW5saW5lICAgZG91YmxlICAgICBjb3NoICAgKCBkb3VibGUgICAgICBfX3ggICkJewkgICAg ICByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4ID0gX19leHBsIChfX3gpOwkJCQkgICAgICAgIHJl dHVybiAwLjUgKiAoX19leCArIDEuMCAvIF9fZXgpICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAg ICBjb3NoZiAgICAoIGZsb2F0ICk7CV9faW5saW5lICAgZmxvYXQgICAgICBjb3NoZiAgICAoIGZs b2F0ICAgICAgX194ICApCXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leCA9IF9fZXhw bCAoX194KTsJCQkJICAgICAgICByZXR1cm4gMC41ICogKF9fZXggKyAxLjAgLyBfX2V4KSAgOwl9 IAlfX2lubGluZSAgIGxvbmcgZG91YmxlICAgICAgY29zaGwgICAgKCBsb25nIGRvdWJsZSApOwlf X2lubGluZSAgIGxvbmcgZG91YmxlICAgICAgY29zaGwgICAgKCBsb25nIGRvdWJsZSAgICAgIF9f eCAgKQl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXggPSBfX2V4cGwgKF9feCk7CQkJ CSAgICAgICAgcmV0dXJuIDAuNSAqIChfX2V4ICsgMS4wIC8gX19leCkgIDsJfSAgCgoKCl9faW5s aW5lICAgZG91YmxlICAgICB0YW5oICAgKCBkb3VibGUgKTsJX19pbmxpbmUgICBkb3VibGUgICAg IHRhbmggICAoIGRvdWJsZSAgICAgIF9feCAgKQl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fZXhtMSA9IF9fZXhwbTFsICgtX19mYWJzbCAoX194ICsgX194KSk7CSAgICAgICAgcmV0dXJu IF9fZXhtMSAvIChfX2V4bTEgKyAyLjApICogX19zZ24xbCAoLV9feCkgIDsJfSAJX19pbmxpbmUg ICBmbG9hdCAgICAgIHRhbmhmICAgICggZmxvYXQgKTsJX19pbmxpbmUgICBmbG9hdCAgICAgIHRh bmhmICAgICggZmxvYXQgICAgICBfX3ggICkJewkgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBf X2V4bTEgPSBfX2V4cG0xbCAoLV9fZmFic2wgKF9feCArIF9feCkpOwkgICAgICAgIHJldHVybiBf X2V4bTEgLyAoX19leG0xICsgMi4wKSAqIF9fc2duMWwgKC1fX3gpICA7CX0gCV9faW5saW5lICAg bG9uZyBkb3VibGUgICAgICB0YW5obCAgICAoIGxvbmcgZG91YmxlICk7CV9faW5saW5lICAgbG9u ZyBkb3VibGUgICAgICB0YW5obCAgICAoIGxvbmcgZG91YmxlICAgICAgX194ICApCXsJICAgICAg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKC1fX2ZhYnNsIChfX3ggKyBf X3gpKTsJICAgICAgICByZXR1cm4gX19leG0xIC8gKF9fZXhtMSArIDIuMCkgKiBfX3NnbjFsICgt X194KSAgOwl9ICAKCgoKCl9faW5saW5lICAgZG91YmxlICAgICBmbG9vciAgICggZG91YmxlICk7 CV9faW5saW5lICAgZG91YmxlICAgICBmbG9vciAgICggZG91YmxlICAgICAgX194ICApCXsJICAg ICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJCQkgICAgICAgIF9fdm9sYXRpbGUg dW5zaWduZWQgc2hvcnQgaW50IF9fY3c7CQkJCQkgICAgICAgIF9fdm9sYXRpbGUgdW5zaWduZWQg c2hvcnQgaW50IF9fY3d0bXA7CQkJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAl MCIgOiAiPW0iIChfX2N3KSk7CQkJCSAgICAgICAgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8 IDB4MDQwMDsgIAkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIg KF9fY3d0bXApKTsJCQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIg KF9fdmFsdWUpIDogIjAiIChfX3gpKTsJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZsZGN3 ICUwIiA6IDogIm0iIChfX2N3KSk7CQkJCSAgICAgICAgcmV0dXJuIF9fdmFsdWUgIDsJfSAJX19p bmxpbmUgICBmbG9hdCAgICAgIGZsb29yZiAgICAoIGZsb2F0ICk7CV9faW5saW5lICAgZmxvYXQg ICAgICBmbG9vcmYgICAgKCBmbG9hdCAgICAgIF9feCAgKQl7CSAgICAgIHJlZ2lzdGVyIGxvbmcg ZG91YmxlIF9fdmFsdWU7CQkJCQkJICAgICAgICBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGlu dCBfX2N3OwkJCQkJICAgICAgICBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1w OwkJCQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykp OwkJCQkgICAgICAgIF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0MDA7ICAJCSAgICAg ICAgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7CQkJICAg ICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAo X194KSk7CQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19j dykpOwkJCQkgICAgICAgIHJldHVybiBfX3ZhbHVlICA7CX0gCV9faW5saW5lICAgbG9uZyBkb3Vi bGUgICAgICBmbG9vcmwgICAgKCBsb25nIGRvdWJsZSApOwlfX2lubGluZSAgIGxvbmcgZG91Ymxl ICAgICAgZmxvb3JsICAgICggbG9uZyBkb3VibGUgICAgICBfX3ggICkJewkgICAgICByZWdpc3Rl ciBsb25nIGRvdWJsZSBfX3ZhbHVlOwkJCQkJCSAgICAgICAgX192b2xhdGlsZSB1bnNpZ25lZCBz aG9ydCBpbnQgX19jdzsJCQkJCSAgICAgICAgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQg X19jd3RtcDsJCQkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIg KF9fY3cpKTsJCQkJICAgICAgICBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyAg CQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkp OwkJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkg OiAiMCIgKF9feCkpOwkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAi bSIgKF9fY3cpKTsJCQkJICAgICAgICByZXR1cm4gX192YWx1ZSAgOwl9ICAKIyA0NzggIi91c3Iv aW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwoKX19pbmxpbmUgICBkb3VibGUgICAgIGNlaWwg ICAoIGRvdWJsZSApOwlfX2lubGluZSAgIGRvdWJsZSAgICAgY2VpbCAgICggZG91YmxlICAgICAg X194ICApCXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJCQkgICAgICAg IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7CQkJCQkgICAgICAgIF9fdm9sYXRp bGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7CQkJCSAgICAgICAgX19hc20gX192b2xhdGls ZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7CQkJCSAgICAgICAgX19jd3RtcCA9IChfX2N3 ICYgMHhmM2ZmKSB8IDB4MDgwMDsgIAkJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZsZGN3 ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7CQkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiZnJu ZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7CQkgICAgICAgIF9fYXNtIF9fdm9s YXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOwkJCQkgICAgICAgIHJldHVybiBfX3Zh bHVlICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICBjZWlsZiAgICAoIGZsb2F0ICk7CV9faW5s aW5lICAgZmxvYXQgICAgICBjZWlsZiAgICAoIGZsb2F0ICAgICAgX194ICApCXsJICAgICAgcmVn aXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJCQkgICAgICAgIF9fdm9sYXRpbGUgdW5zaWdu ZWQgc2hvcnQgaW50IF9fY3c7CQkJCQkgICAgICAgIF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQg aW50IF9fY3d0bXA7CQkJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAi PW0iIChfX2N3KSk7CQkJCSAgICAgICAgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgw MDsgIAkJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3 dG1wKSk7CQkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3Zh bHVlKSA6ICIwIiAoX194KSk7CQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIg OiA6ICJtIiAoX19jdykpOwkJCQkgICAgICAgIHJldHVybiBfX3ZhbHVlICA7CX0gCV9faW5saW5l ICAgbG9uZyBkb3VibGUgICAgICBjZWlsbCAgICAoIGxvbmcgZG91YmxlICk7CV9faW5saW5lICAg bG9uZyBkb3VibGUgICAgICBjZWlsbCAgICAoIGxvbmcgZG91YmxlICAgICAgX194ICApCXsJICAg ICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJCQkgICAgICAgIF9fdm9sYXRpbGUg dW5zaWduZWQgc2hvcnQgaW50IF9fY3c7CQkJCQkgICAgICAgIF9fdm9sYXRpbGUgdW5zaWduZWQg c2hvcnQgaW50IF9fY3d0bXA7CQkJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAl MCIgOiAiPW0iIChfX2N3KSk7CQkJCSAgICAgICAgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8 IDB4MDgwMDsgIAkJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0i IChfX2N3dG1wKSk7CQkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQi IChfX3ZhbHVlKSA6ICIwIiAoX194KSk7CQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRj dyAlMCIgOiA6ICJtIiAoX19jdykpOwkJCQkgICAgICAgIHJldHVybiBfX3ZhbHVlICA7CX0gIAoj IDQ4OSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCgoKCgoKCgoKX19pbmxpbmUg IGRvdWJsZSBsZGV4cCAoZG91YmxlIF9feCwgaW50IF9feSk7Cl9faW5saW5lICBkb3VibGUKbGRl eHAgKGRvdWJsZSBfX3gsIGludCBfX3kpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVl OwlfX2FzbSBfX3ZvbGF0aWxlX18JKCJmc2NhbGUiCTogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9f eCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsJcmV0dXJuIF9fdmFsdWUgOwp9CgoKIAoKCl9f aW5saW5lICAgZG91YmxlICAgICBleHBtMSAgICggZG91YmxlICk7CV9faW5saW5lICAgZG91Ymxl ICAgICBleHBtMSAgICggZG91YmxlICAgICAgX194ICApCXsJICAgIHJlZ2lzdGVyIGxvbmcgZG91 YmxlIF9fdmFsdWU7CXJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7CXJlZ2lzdGVyIGxv bmcgZG91YmxlIF9fdGVtcDsJX19hc20gX192b2xhdGlsZV9fCSgiZmxkbDJlCQkJIyBlXnggLSAx ID0gMl4oeCAqIGxvZzIoZSkpIC0gMVxuXHQiCSJmbXVsCSUlc3QoMSkJCSMgeCAqIGxvZzIoZSlc blx0IgkiZnN0CSUlc3QoMSlcblx0IgkiZnJuZGludAkJCSMgaW50KHggKiBsb2cyKGUpKVxuXHQi CSJmeGNoXG5cdCIJImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4ICogbG9nMihlKSlcblx0IgkiZjJ4 bTEJCQkjIDJeKGZyYWN0KHggKiBsb2cyKGUpKSkgLSAxXG5cdCIJImZzY2FsZQkJCSMgMl4oeCAq IGxvZzIoZSkpIC0gMl4oaW50KHggKiBsb2cyKGUpKSlcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAi PXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7CV9fYXNtIF9fdm9sYXRpbGVfXwkoImZzY2Fs ZQkJCSMgMl5pbnQoeCAqIGxvZzIoZSkpXG5cdCIJOiAiPXQiIChfX3RlbXApIDogIjAiICgxLjAp LCAidSIgKF9fZXhwb25lbnQpKTsJX190ZW1wIC09IDEuMDsJcmV0dXJuIF9fdGVtcCArIF9fdmFs dWUgICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICBleHBtMWYgICAgKCBmbG9hdCApOwlfX2lu bGluZSAgIGZsb2F0ICAgICAgZXhwbTFmICAgICggZmxvYXQgICAgICBfX3ggICkJewkgICAgcmVn aXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVu dDsJcmVnaXN0ZXIgbG9uZyBkb3VibGUgX190ZW1wOwlfX2FzbSBfX3ZvbGF0aWxlX18JKCJmbGRs MmUJCQkjIGVeeCAtIDEgPSAyXih4ICogbG9nMihlKSkgLSAxXG5cdCIJImZtdWwJJSVzdCgxKQkJ IyB4ICogbG9nMihlKVxuXHQiCSJmc3QJJSVzdCgxKVxuXHQiCSJmcm5kaW50CQkJIyBpbnQoeCAq IGxvZzIoZSkpXG5cdCIJImZ4Y2hcblx0IgkiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cy KGUpKVxuXHQiCSJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0IgkiZnNj YWxlCQkJIyAyXih4ICogbG9nMihlKSkgLSAyXihpbnQoeCAqIGxvZzIoZSkpKVxuXHQiIDogIj10 IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsJX19hc20gX192b2xh dGlsZV9fCSgiZnNjYWxlCQkJIyAyXmludCh4ICogbG9nMihlKSlcblx0Igk6ICI9dCIgKF9fdGVt cCkgOiAiMCIgKDEuMCksICJ1IiAoX19leHBvbmVudCkpOwlfX3RlbXAgLT0gMS4wOwlyZXR1cm4g X190ZW1wICsgX192YWx1ZSAgIDsJfSAJX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICAgIGV4cG0x bCAgICAoIGxvbmcgZG91YmxlICk7CV9faW5saW5lICAgbG9uZyBkb3VibGUgICAgICBleHBtMWwg ICAgKCBsb25nIGRvdWJsZSAgICAgIF9feCAgKQl7CSAgICByZWdpc3RlciBsb25nIGRvdWJsZSBf X3ZhbHVlOwlyZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OwlyZWdpc3RlciBsb25nIGRv dWJsZSBfX3RlbXA7CV9fYXNtIF9fdm9sYXRpbGVfXwkoImZsZGwyZQkJCSMgZV54IC0gMSA9IDJe KHggKiBsb2cyKGUpKSAtIDFcblx0IgkiZm11bAklJXN0KDEpCQkjIHggKiBsb2cyKGUpXG5cdCIJ ImZzdAklJXN0KDEpXG5cdCIJImZybmRpbnQJCQkjIGludCh4ICogbG9nMihlKSlcblx0IgkiZnhj aFxuXHQiCSJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5cdCIJImYyeG0xCQkJ IyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiCSJmc2NhbGUJCQkjIDJeKHggKiBsb2cy KGUpKSAtIDJeKGludCh4ICogbG9nMihlKSkpXG5cdCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAo X19leHBvbmVudCkgOiAiMCIgKF9feCkpOwlfX2FzbSBfX3ZvbGF0aWxlX18JKCJmc2NhbGUJCQkj IDJeaW50KHggKiBsb2cyKGUpKVxuXHQiCTogIj10IiAoX190ZW1wKSA6ICIwIiAoMS4wKSwgInUi IChfX2V4cG9uZW50KSk7CV9fdGVtcCAtPSAxLjA7CXJldHVybiBfX3RlbXAgKyBfX3ZhbHVlICAg Owl9ICAKCiAKCgoKX19pbmxpbmUgICBkb3VibGUgICAgIGxvZzFwICAgKCBkb3VibGUgKTsJX19p bmxpbmUgICBkb3VibGUgICAgIGxvZzFwICAgKCBkb3VibGUgICAgICBfX3ggICkJewkgICAgICBy ZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOwkJCQkJCSAgICAgICAgaWYgKF9fZmFic2wgKF9f eCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwgKQkJCQkgICAgICAgICAg X192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7CQkJCQkJICAgICAgICBlbHNlCQkJCQkJCQkJICAg ICAgICAgIF9fYXNtIF9fdm9sYXRpbGVfXwkJCQkJCQkgICAgICAgICAgICAoImZsZGxuMlxuXHQi CQkJCQkJCSAgICAgICAgICAgICAiZnhjaFxuXHQiCQkJCQkJCSAgICAgICAgICAgICAiZnlsMnhw MSIJCQkJCQkJICAgICAgICAgICAgIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3Qo MSkiKTsJCQkJICAgICAgICByZXR1cm4gX192YWx1ZSAgOwl9IAlfX2lubGluZSAgIGZsb2F0ICAg ICAgbG9nMXBmICAgICggZmxvYXQgKTsJX19pbmxpbmUgICBmbG9hdCAgICAgIGxvZzFwZiAgICAo IGZsb2F0ICAgICAgX194ICApCXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJ CQkJCQkgICAgICAgIGlmIChfX2ZhYnNsIChfX3gpID49IDEuMCAtIDAuNSAqIDEuNDE0MjEzNTYy MzczMDk1MDQ4ODBMICkJCQkJICAgICAgICAgIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOwkJ CQkJCSAgICAgICAgZWxzZQkJCQkJCQkJCSAgICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlX18JCQkJ CQkJICAgICAgICAgICAgKCJmbGRsbjJcblx0IgkJCQkJCQkgICAgICAgICAgICAgImZ4Y2hcblx0 IgkJCQkJCQkgICAgICAgICAgICAgImZ5bDJ4cDEiCQkJCQkJCSAgICAgICAgICAgICA6ICI9dCIg KF9fdmFsdWUpIDogIjAiIChfX3gpIDogInN0KDEpIik7CQkJCSAgICAgICAgcmV0dXJuIF9fdmFs dWUgIDsJfSAJX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICAgIGxvZzFwbCAgICAoIGxvbmcgZG91 YmxlICk7CV9faW5saW5lICAgbG9uZyBkb3VibGUgICAgICBsb2cxcGwgICAgKCBsb25nIGRvdWJs ZSAgICAgIF9feCAgKQl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7CQkJCQkJ ICAgICAgICBpZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAwLjUgKiAxLjQxNDIxMzU2MjM3MzA5 NTA0ODgwTCApCQkJCSAgICAgICAgICBfX3ZhbHVlID0gbG9nbCAoMS4wICsgX194KTsJCQkJCQkg ICAgICAgIGVsc2UJCQkJCQkJCQkgICAgICAgICAgX19hc20gX192b2xhdGlsZV9fCQkJCQkJCSAg ICAgICAgICAgICgiZmxkbG4yXG5cdCIJCQkJCQkJICAgICAgICAgICAgICJmeGNoXG5cdCIJCQkJ CQkJICAgICAgICAgICAgICJmeWwyeHAxIgkJCQkJCQkgICAgICAgICAgICAgOiAiPXQiIChfX3Zh bHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOwkJCQkgICAgICAgIHJldHVybiBfX3ZhbHVlICA7 CX0gIAojIDUyNSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCgoKIApfX2lubGlu ZSAgIGRvdWJsZSAgICAgYXNpbmggICAoIGRvdWJsZSApOwlfX2lubGluZSAgIGRvdWJsZSAgICAg YXNpbmggICAoIGRvdWJsZSAgICAgIF9feCAgKQl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91Ymxl ICBfX3kgPSBfX2ZhYnNsIChfX3gpOwkJCQkgICAgICAgIHJldHVybiAobG9nMXBsIChfX3kgKiBf X3kgLyAoX19zcXJ0bCAoX195ICogX195ICsgMS4wKSArIDEuMCkgKyBfX3kpCSAgICAgIAkgICog X19zZ24xbCAoX194KSkgIDsJfSAJX19pbmxpbmUgICBmbG9hdCAgICAgIGFzaW5oZiAgICAoIGZs b2F0ICk7CV9faW5saW5lICAgZmxvYXQgICAgICBhc2luaGYgICAgKCBmbG9hdCAgICAgIF9feCAg KQl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlICBfX3kgPSBfX2ZhYnNsIChfX3gpOwkJCQkg ICAgICAgIHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAoX195ICogX195ICsg MS4wKSArIDEuMCkgKyBfX3kpCSAgICAgIAkgICogX19zZ24xbCAoX194KSkgIDsJfSAJX19pbmxp bmUgICBsb25nIGRvdWJsZSAgICAgIGFzaW5obCAgICAoIGxvbmcgZG91YmxlICk7CV9faW5saW5l ICAgbG9uZyBkb3VibGUgICAgICBhc2luaGwgICAgKCBsb25nIGRvdWJsZSAgICAgIF9feCAgKQl7 CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlICBfX3kgPSBfX2ZhYnNsIChfX3gpOwkJCQkgICAg ICAgIHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAoX195ICogX195ICsgMS4w KSArIDEuMCkgKyBfX3kpCSAgICAgIAkgICogX19zZ24xbCAoX194KSkgIDsJfSAgCgoKCgpfX2lu bGluZSAgIGRvdWJsZSAgICAgYWNvc2ggICAoIGRvdWJsZSApOwlfX2lubGluZSAgIGRvdWJsZSAg ICAgYWNvc2ggICAoIGRvdWJsZSAgICAgIF9feCAgKQl7CSAgICAgIHJldHVybiBsb2dsIChfX3gg KyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSkgIDsJfSAJX19pbmxp bmUgICBmbG9hdCAgICAgIGFjb3NoZiAgICAoIGZsb2F0ICk7CV9faW5saW5lICAgZmxvYXQgICAg ICBhY29zaGYgICAgKCBmbG9hdCAgICAgIF9feCAgKQl7CSAgICAgIHJldHVybiBsb2dsIChfX3gg KyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSkgIDsJfSAJX19pbmxp bmUgICBsb25nIGRvdWJsZSAgICAgIGFjb3NobCAgICAoIGxvbmcgZG91YmxlICk7CV9faW5saW5l ICAgbG9uZyBkb3VibGUgICAgICBhY29zaGwgICAgKCBsb25nIGRvdWJsZSAgICAgIF9feCAgKQl7 CSAgICAgIHJldHVybiBsb2dsIChfX3ggKyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAo X194ICsgMS4wKSkgIDsJfSAgCgoKX19pbmxpbmUgICBkb3VibGUgICAgIGF0YW5oICAgKCBkb3Vi bGUgKTsJX19pbmxpbmUgICBkb3VibGUgICAgIGF0YW5oICAgKCBkb3VibGUgICAgICBfX3ggICkJ ewkgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOwkJCQkgICAg ICAgIHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195KSkgKiBf X3NnbjFsIChfX3gpICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICBhdGFuaGYgICAgKCBmbG9h dCApOwlfX2lubGluZSAgIGZsb2F0ICAgICAgYXRhbmhmICAgICggZmxvYXQgICAgICBfX3ggICkJ ewkgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOwkJCQkgICAg ICAgIHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195KSkgKiBf X3NnbjFsIChfX3gpICA7CX0gCV9faW5saW5lICAgbG9uZyBkb3VibGUgICAgICBhdGFuaGwgICAg KCBsb25nIGRvdWJsZSApOwlfX2lubGluZSAgIGxvbmcgZG91YmxlICAgICAgYXRhbmhsICAgICgg bG9uZyBkb3VibGUgICAgICBfX3ggICkJewkgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kg PSBfX2ZhYnNsIChfX3gpOwkJCQkgICAgICAgIHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSAr IF9feSkgLyAoMS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gpICA7CX0gIAoKCgogCl9faW5saW5l ICAgZG91YmxlICAgICBoeXBvdCAgICggZG91YmxlICwgIGRvdWJsZSApOwlfX2lubGluZSAgIGRv dWJsZSAgICAgaHlwb3QgICAoIGRvdWJsZSAgICAgIF9feCAgLCAgZG91YmxlICAgICAgX195ICAp CXsJICAgIHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpICA7CX0gCV9faW5s aW5lICAgZmxvYXQgICAgICBoeXBvdGYgICAgKCBmbG9hdCAsICBmbG9hdCApOwlfX2lubGluZSAg IGZsb2F0ICAgICAgaHlwb3RmICAgICggZmxvYXQgICAgICBfX3ggICwgIGZsb2F0ICAgICAgX195 ICApCXsJICAgIHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpICA7CX0gCV9f aW5saW5lICAgbG9uZyBkb3VibGUgICAgICBoeXBvdGwgICAgKCBsb25nIGRvdWJsZSAsICBsb25n IGRvdWJsZSApOwlfX2lubGluZSAgIGxvbmcgZG91YmxlICAgICAgaHlwb3RsICAgICggbG9uZyBk b3VibGUgICAgICBfX3ggICwgIGxvbmcgZG91YmxlICAgICAgX195ICApCXsJICAgIHJldHVybiBf X3NxcnRsIChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpICA7CX0gIAoKX19pbmxpbmUgICBkb3VibGUg ICAgIGxvZ2IgICAoIGRvdWJsZSApOwlfX2lubGluZSAgIGRvdWJsZSAgICAgbG9nYiAgICggZG91 YmxlICAgICAgX194ICApCXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJ CQkgICAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fanVuazsJCQkJCQkgICAgICAgIF9fYXNt IF9fdm9sYXRpbGVfXwkJCQkJCQkgICAgICAgICAgKCJmeHRyYWN0XG5cdCIJCQkJCQkJICAgICAg ICAgICA6ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsJCQkgICAg ICAgIHJldHVybiBfX3ZhbHVlICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICBsb2diZiAgICAo IGZsb2F0ICk7CV9faW5saW5lICAgZmxvYXQgICAgICBsb2diZiAgICAoIGZsb2F0ICAgICAgX194 ICApCXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJCQkgICAgICAgIHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9fanVuazsJCQkJCQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGVf XwkJCQkJCQkgICAgICAgICAgKCJmeHRyYWN0XG5cdCIJCQkJCQkJICAgICAgICAgICA6ICI9dCIg KF9fanVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsJCQkgICAgICAgIHJldHVybiBf X3ZhbHVlICA7CX0gCV9faW5saW5lICAgbG9uZyBkb3VibGUgICAgICBsb2dibCAgICAoIGxvbmcg ZG91YmxlICk7CV9faW5saW5lICAgbG9uZyBkb3VibGUgICAgICBsb2dibCAgICAoIGxvbmcgZG91 YmxlICAgICAgX194ICApCXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJ CQkgICAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fanVuazsJCQkJCQkgICAgICAgIF9fYXNt IF9fdm9sYXRpbGVfXwkJCQkJCQkgICAgICAgICAgKCJmeHRyYWN0XG5cdCIJCQkJCQkJICAgICAg ICAgICA6ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsJCQkgICAg ICAgIHJldHVybiBfX3ZhbHVlICA7CX0gIAoKCgoKCgoKCgojIDYyMCAiL3Vzci9pbmNsdWRlL2Jp dHMvbWF0aGlubGluZS5oIiAzCgoKCgoKX19pbmxpbmUgICBkb3VibGUgICAgIGRyZW0gICAoIGRv dWJsZSAsICBkb3VibGUgKTsJX19pbmxpbmUgICBkb3VibGUgICAgIGRyZW0gICAoIGRvdWJsZSAg ICAgIF9feCAgLCAgZG91YmxlICAgICAgX195ICApCXsJICAgICAgcmVnaXN0ZXIgZG91YmxlIF9f dmFsdWU7CQkJCQkJICAgICAgICByZWdpc3RlciBpbnQgX19jbG9iYmVyZWQ7CQkJCQkJICAgICAg ICBfX2FzbSBfX3ZvbGF0aWxlX18JCQkJCQkJICAgICAgICAgICgiMToJZnByZW0xXG5cdCIJCQkJ CQkgICAgICAgICAgICJmc3RzdwklJWF4XG5cdCIJCQkJCQkgICAgICAgICAgICJzYWhmXG5cdCIJ CQkJCQkJCSAgICAgICAgICAgImpwCTFiIgkJCQkJCQkgICAgICAgICAgIDogIj10IiAoX192YWx1 ZSksICI9JmEiIChfX2Nsb2JiZXJlZCkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyAg ICAgIHJldHVybiBfX3ZhbHVlICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICBkcmVtZiAgICAo IGZsb2F0ICwgIGZsb2F0ICk7CV9faW5saW5lICAgZmxvYXQgICAgICBkcmVtZiAgICAoIGZsb2F0 ICAgICAgX194ICAsICBmbG9hdCAgICAgIF9feSAgKQl7CSAgICAgIHJlZ2lzdGVyIGRvdWJsZSBf X3ZhbHVlOwkJCQkJCSAgICAgICAgcmVnaXN0ZXIgaW50IF9fY2xvYmJlcmVkOwkJCQkJCSAgICAg ICAgX19hc20gX192b2xhdGlsZV9fCQkJCQkJCSAgICAgICAgICAoIjE6CWZwcmVtMVxuXHQiCQkJ CQkJICAgICAgICAgICAiZnN0c3cJJSVheFxuXHQiCQkJCQkJICAgICAgICAgICAic2FoZlxuXHQi CQkJCQkJCQkgICAgICAgICAgICJqcAkxYiIJCQkJCQkJICAgICAgICAgICA6ICI9dCIgKF9fdmFs dWUpLCAiPSZhIiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2MiKTsg ICAgICByZXR1cm4gX192YWx1ZSAgOwl9IAlfX2lubGluZSAgIGxvbmcgZG91YmxlICAgICAgZHJl bWwgICAgKCBsb25nIGRvdWJsZSAsICBsb25nIGRvdWJsZSApOwlfX2lubGluZSAgIGxvbmcgZG91 YmxlICAgICAgZHJlbWwgICAgKCBsb25nIGRvdWJsZSAgICAgIF9feCAgLCAgbG9uZyBkb3VibGUg ICAgICBfX3kgICkJewkgICAgICByZWdpc3RlciBkb3VibGUgX192YWx1ZTsJCQkJCQkgICAgICAg IHJlZ2lzdGVyIGludCBfX2Nsb2JiZXJlZDsJCQkJCQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGVf XwkJCQkJCQkgICAgICAgICAgKCIxOglmcHJlbTFcblx0IgkJCQkJCSAgICAgICAgICAgImZzdHN3 CSUlYXhcblx0IgkJCQkJCSAgICAgICAgICAgInNhaGZcblx0IgkJCQkJCQkJICAgICAgICAgICAi anAJMWIiCQkJCQkJCSAgICAgICAgICAgOiAiPXQiIChfX3ZhbHVlKSwgIj0mYSIgKF9fY2xvYmJl cmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7ICAgICAgcmV0dXJuIF9fdmFsdWUg IDsJfSAgCiMgNjM1ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKCgogCl9faW5s aW5lICBpbnQgX19maW5pdGUgKGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKX19pbmxpbmUgIGludApfX2Zpbml0ZSAoZG91YmxlIF9feCkKewogIHJldHVybiAoX19leHRl bnNpb25fXwoJICAoKCgoKHVuaW9uIHsgZG91YmxlIF9fZDsgaW50IF9faVsyXTsgfSkge19fZDog X194fSkuX19pWzFdCgkgICAgIHwgMHg4MDBmZmZmZnUpICsgMSkgPj4gMzEpKTsKfQoKIAoKX19p bmxpbmUgICBkb3VibGUgICAgIF9fY29zaG0xICAgKCBkb3VibGUgKTsJX19pbmxpbmUgICBkb3Vi bGUgICAgIF9fY29zaG0xICAgKCBkb3VibGUgICAgICBfX3ggICkJewkgICAgICByZWdpc3RlciBs b25nIGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAoX19mYWJzbCAoX194KSk7CQkgICAgICAgIHJl dHVybiAwLjUgKiAoX19leG0xIC8gKF9fZXhtMSArIDEuMCkpICogX19leG0xICA7CX0gCV9faW5s aW5lICAgZmxvYXQgICAgICBfX2Nvc2htMWYgICAgKCBmbG9hdCApOwlfX2lubGluZSAgIGZsb2F0 ICAgICAgX19jb3NobTFmICAgICggZmxvYXQgICAgICBfX3ggICkJewkgICAgICByZWdpc3RlciBs b25nIGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAoX19mYWJzbCAoX194KSk7CQkgICAgICAgIHJl dHVybiAwLjUgKiAoX19leG0xIC8gKF9fZXhtMSArIDEuMCkpICogX19leG0xICA7CX0gCV9faW5s aW5lICAgbG9uZyBkb3VibGUgICAgICBfX2Nvc2htMWwgICAgKCBsb25nIGRvdWJsZSApOwlfX2lu bGluZSAgIGxvbmcgZG91YmxlICAgICAgX19jb3NobTFsICAgICggbG9uZyBkb3VibGUgICAgICBf X3ggICkJewkgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAoX19m YWJzbCAoX194KSk7CQkgICAgICAgIHJldHVybiAwLjUgKiAoX19leG0xIC8gKF9fZXhtMSArIDEu MCkpICogX19leG0xICA7CX0gIAoKCgpfX2lubGluZSAgIGRvdWJsZSAgICAgX19hY29zaDFwICAg KCBkb3VibGUgKTsJX19pbmxpbmUgICBkb3VibGUgICAgIF9fYWNvc2gxcCAgICggZG91YmxlICAg ICAgX194ICApCXsJICAgICAgcmV0dXJuIGxvZzFwbCAoX194ICsgX19zcXJ0bCAoX194KSAqIF9f c3FydGwgKF9feCArIDIuMCkpICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICBfX2Fjb3NoMXBm ICAgICggZmxvYXQgKTsJX19pbmxpbmUgICBmbG9hdCAgICAgIF9fYWNvc2gxcGYgICAgKCBmbG9h dCAgICAgIF9feCAgKQl7CSAgICAgIHJldHVybiBsb2cxcGwgKF9feCArIF9fc3FydGwgKF9feCkg KiBfX3NxcnRsIChfX3ggKyAyLjApKSAgOwl9IAlfX2lubGluZSAgIGxvbmcgZG91YmxlICAgICAg X19hY29zaDFwbCAgICAoIGxvbmcgZG91YmxlICk7CV9faW5saW5lICAgbG9uZyBkb3VibGUgICAg ICBfX2Fjb3NoMXBsICAgICggbG9uZyBkb3VibGUgICAgICBfX3ggICkJewkgICAgICByZXR1cm4g bG9nMXBsIChfX3ggKyBfX3NxcnRsIChfX3gpICogX19zcXJ0bCAoX194ICsgMi4wKSkgIDsJfSAg CgoKCgogCgoKCgoKCgoKIAojIDY3NiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAz CgoKCiMgMzQ4ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgoKCiMgNDA3ICIvdXNyL2luY2x1 ZGUvbWF0aC5oIiAzCgoKfSAKCgoKIyA4ICJQb3NlVG9TdGF0ZVhmb3JtLmgiIDIKCiMgMSAiL3Uv bHBhZ2Uvd29ya2FyZWEvcm9vdC91c3Ivc2ltbGFiL3JlbGVhc2UvYXV0b25vbW91c1N5c3RlbXMx LjEuMS9pbmNsdWRlL1JhbmdlLmgiIDEKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFu ZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyaW5nIiAxIDMK IAoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4u Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDEgMwogCiAKCiAKIAogCiAK IAoKIAogCiAKIAoKIAogCiAKCiAKIAogCiAKIAoKIAogCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UK CgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4v Li4vLi4vaW5jbHVkZS9nKystMy9jc3RkZGVmIiAxIDMKIAogCgoKCiMgMSAiL3Vzci9saWIvZ2Nj LWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoK CgoKIAoKCgoKCgoKIAoKIAoKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxp Yi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoK CiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlw ZWRlZiBpbnQgcHRyZGlmZl90OwoKCgoKCgoKCgogCgoKCgogCgogCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CgoKCgoKCgoKCgoK CgoKCgoKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHVuc2ln bmVkIGludCAgd2ludF90OwoKCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTU4Ni1t YW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoK CgoKIAoKCgoKCgoKIyA2ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45 NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY3N0ZGRlZiIgMiAzCgoKIyAzNSAiL3Vzci9s aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl L2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1h bmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9zdHJhaXRz LmgiIDEgMwogCiAKCiAKIAogCiAKIAoKIAogCiAKIAoKIAogCiAKCiAKIAogCiAKIAoKIAogCgoK CgoKIAojcHJhZ21hIGludGVyZmFjZSAic3RkL3N0cmFpdHMuaCIKCgoKCmV4dGVybiAiQysrIiB7 CnRlbXBsYXRlIDxjbGFzcyBjaGFyVD4Kc3RydWN0IHN0cmluZ19jaGFyX3RyYWl0cyB7CiAgdHlw ZWRlZiBjaGFyVCBjaGFyX3R5cGU7ICAKCiAgIAoKICBzdGF0aWMgdm9pZCBhc3NpZ24gKGNoYXJf dHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IGMxID0gYzI7IH0KICBzdGF0aWMg Ym9vbCBlcSAoY29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsg cmV0dXJuIChjMSA9PSBjMik7IH0KICBzdGF0aWMgYm9vbCBuZSAoY29uc3QgY2hhcl90eXBlJiBj MSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuICEoYzEgPT0gYzIpOyB9CiAgc3Rh dGljIGJvb2wgbHQgKGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAg ICB7IHJldHVybiAoYzEgPCBjMik7IH0KICBzdGF0aWMgY2hhcl90eXBlIGVvcyAoKSB7IHJldHVy biBjaGFyX3R5cGUoKTsgfSAgCiAgc3RhdGljIGJvb2wgaXNfZGVsKGNoYXJfdHlwZSBhKSB7IHJl dHVybiAwOyB9CiAgIAogIAogICAKCiAgc3RhdGljIGludCBjb21wYXJlIChjb25zdCBjaGFyX3R5 cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbikKICAgIHsKICAgICAgc2l6ZV90 IGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCglpZiAobmUgKHMxW2ldLCBzMltpXSkp CgkgIHJldHVybiBsdCAoczFbaV0sIHMyW2ldKSA/IC0xIDogMTsKCiAgICAgIHJldHVybiAwOwog ICAgfQogICAgCiAgc3RhdGljIHNpemVfdCBsZW5ndGggKGNvbnN0IGNoYXJfdHlwZSogcykKICAg IHsKICAgICAgc2l6ZV90IGwgPSAwOwogICAgICB3aGlsZSAobmUgKCpzKyssIGVvcyAoKSkpCgkr K2w7CiAgICAgIHJldHVybiBsOwogICAgfQoKICBzdGF0aWMgY2hhcl90eXBlKiBjb3B5IChjaGFy X3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbikKICAgIHsKICAgICAgZm9y ICg7IG4tLTsgKQoJYXNzaWduIChzMVtuXSwgczJbbl0pOwogICAgICByZXR1cm4gczE7CiAgICB9 CgogIHN0YXRpYyBjaGFyX3R5cGUqIG1vdmUgKGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlw ZSogczIsIHNpemVfdCBuKQogICAgewogICAgICBjaGFyX3R5cGUgYVtuXTsKICAgICAgc2l6ZV90 IGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCglhc3NpZ24gKGFbaV0sIHMyW2ldKTsK ICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkKCWFzc2lnbiAoczFbaV0sIGFbaV0pOwogICAg ICByZXR1cm4gczE7CiAgICB9CgogIHN0YXRpYyBjaGFyX3R5cGUqIHNldCAoY2hhcl90eXBlKiBz MSwgY29uc3QgY2hhcl90eXBlJiBjLCBzaXplX3QgbikKICAgIHsKICAgICAgZm9yICg7IG4tLTsg KQoJYXNzaWduIChzMVtuXSwgYyk7CiAgICAgIHJldHVybiBzMTsKICAgIH0KfTsKCmNsYXNzIGlz dHJlYW07CmNsYXNzIG9zdHJlYW07CiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtl LWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NjdHlwZSIgMSAzCiAKIAoK CgojIDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoK CgogCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIu OTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1s aWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoK IAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45 NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoK CgoKIAoKIAoKCiMgMTI2ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45 NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgogCgogCgoKIyAxODggIi91c3IvbGliL2dj Yy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoK CiAKCgoKCiAKCgojIDI2OSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIu OTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKCgoKCgoKCgoKCgogCgogCgojIDMxNyAiL3Vz ci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5o IiAzCgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy90 eXBlcy5oIiAyIDMKCgogCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1 bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5 cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNp Z25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25n IGxvbmcgaW50IF9fcXVhZF90OwojIDQ4ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCgp0 eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50 OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVk IHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBl ZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25l ZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVk IGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsK CnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90OwkJIAp0eXBlZGVmIF9fdV9pbnQgX191aWRfdDsJ CSAKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CQkgCnR5cGVkZWYgX191X2xvbmcgX19pbm9fdDsJ CSAKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90OwkJIAp0eXBlZGVmIF9fdV9pbnQgX19ubGlua190 OyAJCSAKdHlwZWRlZiBsb25nIGludCBfX29mZl90OwkJIAp0eXBlZGVmIF9fcXVhZF90IF9fbG9m Zl90OwkJIAp0eXBlZGVmIGludCBfX3BpZF90OwkJCSAKdHlwZWRlZiBpbnQgX19zc2l6ZV90OwkJ CSAKdHlwZWRlZiBsb25nIGludCBfX3JsaW1fdDsJCSAKdHlwZWRlZiBfX3F1YWRfdCBfX3JsaW02 NF90OwkJIAp0eXBlZGVmIF9fdV9pbnQgX19pZF90OwkJCSAKCnR5cGVkZWYgc3RydWN0CiAgewog ICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CQkJCSAKCiAKdHlwZWRlZiBpbnQgX19kYWRk cl90OwkJCSAKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190aW1l X3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190OwkJIAoMCnR5cGVkZWYgbG9uZyBpbnQgX19j bG9ja190OwoKIAp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fZmRfbWFzazsKCiAKCgogCgoK CgogCnR5cGVkZWYgc3RydWN0CiAgewogICAgIAoKCgoKCiAgICBfX2ZkX21hc2sgX19mZHNfYml0 c1sxMDI0ICAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKSBdOwoKCiAgfSBfX2ZkX3NldDsKCgp0 eXBlZGVmIGludCBfX2tleV90OwoKIAp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19w aWRfdDsKCgogCgogCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRf dCBfX2Jsa2NudDY0X3Q7CgogCnR5cGVkZWYgX191X2xvbmcgX19mc2Jsa2NudF90Owp0eXBlZGVm IF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgogCnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNu dF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgogCnR5cGVkZWYgX191X2xv bmcgX19pbm82NF90OwoKIAp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsKCiAKdHlwZWRlZiBs b25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX190X3VzY2Fs YXJfdDsKCiAKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgogCgoKCgoKIyAyNyAiL3Vzci9pbmNs dWRlL2N0eXBlLmgiIDIgMwoKCmV4dGVybiAiQyIgeyAKCgogCgoKCgoKCgojIDEgIi91c3IvaW5j bHVkZS9lbmRpYW4uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAoj IDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAxIDMKIAoKCgoKCgojIDM1ICIvdXNyL2lu Y2x1ZGUvZW5kaWFuLmgiIDIgMwoKCiAKCgoKCgoKCgoKCgoKCiMgNDAgIi91c3IvaW5jbHVkZS9j dHlwZS5oIiAyIDMKCgoKCgoKCmVudW0KewogIF9JU3VwcGVyID0gKCggMCApIDwgOCA/ICgoMSA8 PCAoIDAgKSkgPDwgOCkgOiAoKDEgPDwgKCAwICkpID4+IDgpKSAsCSAKICBfSVNsb3dlciA9ICgo IDEgKSA8IDggPyAoKDEgPDwgKCAxICkpIDw8IDgpIDogKCgxIDw8ICggMSApKSA+PiA4KSkgLAkg CiAgX0lTYWxwaGEgPSAoKCAyICkgPCA4ID8gKCgxIDw8ICggMiApKSA8PCA4KSA6ICgoMSA8PCAo IDIgKSkgPj4gOCkpICwJIAogIF9JU2RpZ2l0ID0gKCggMyApIDwgOCA/ICgoMSA8PCAoIDMgKSkg PDwgOCkgOiAoKDEgPDwgKCAzICkpID4+IDgpKSAsCSAKICBfSVN4ZGlnaXQgPSAoKCA0ICkgPCA4 ID8gKCgxIDw8ICggNCApKSA8PCA4KSA6ICgoMSA8PCAoIDQgKSkgPj4gOCkpICwJIAogIF9JU3Nw YWNlID0gKCggNSApIDwgOCA/ICgoMSA8PCAoIDUgKSkgPDwgOCkgOiAoKDEgPDwgKCA1ICkpID4+ IDgpKSAsCSAKICBfSVNwcmludCA9ICgoIDYgKSA8IDggPyAoKDEgPDwgKCA2ICkpIDw8IDgpIDog KCgxIDw8ICggNiApKSA+PiA4KSkgLAkgCiAgX0lTZ3JhcGggPSAoKCA3ICkgPCA4ID8gKCgxIDw8 ICggNyApKSA8PCA4KSA6ICgoMSA8PCAoIDcgKSkgPj4gOCkpICwJIAogIF9JU2JsYW5rID0gKCgg OCApIDwgOCA/ICgoMSA8PCAoIDggKSkgPDwgOCkgOiAoKDEgPDwgKCA4ICkpID4+IDgpKSAsCSAK ICBfSVNjbnRybCA9ICgoIDkgKSA8IDggPyAoKDEgPDwgKCA5ICkpIDw8IDgpIDogKCgxIDw8ICgg OSApKSA+PiA4KSkgLAkgCiAgX0lTcHVuY3QgPSAoKCAxMCApIDwgOCA/ICgoMSA8PCAoIDEwICkp IDw8IDgpIDogKCgxIDw8ICggMTAgKSkgPj4gOCkpICwJIAogIF9JU2FsbnVtID0gKCggMTEgKSA8 IDggPyAoKDEgPDwgKCAxMSApKSA8PCA4KSA6ICgoMSA8PCAoIDExICkpID4+IDgpKSAJIAp9OwoK CiAKCgoKCgoKCgoKCmV4dGVybiBfX2NvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9i OwkgCmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b2xvd2VyOyAgCmV4dGVybiBf X2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b3VwcGVyOyAgCgoKCgoKCgoKCiAKCgoKZXh0ZXJu IGludCAgaXNhbG51bSAgIChpbnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgaXNhbHBoYSAg IChpbnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgaXNjbnRybCAgIChpbnQpICB0aHJvdyAo KSAgIDsKZXh0ZXJuIGludCAgaXNkaWdpdCAgIChpbnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGlu dCAgaXNsb3dlciAgIChpbnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgaXNncmFwaCAgIChp bnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgaXNwcmludCAgIChpbnQpICB0aHJvdyAoKSAg IDsKZXh0ZXJuIGludCAgaXNwdW5jdCAgIChpbnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAg aXNzcGFjZSAgIChpbnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgaXN1cHBlciAgIChpbnQp ICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgaXN4ZGlnaXQgICAoaW50KSAgdGhyb3cgKCkgICA7 CgoKCgoKCiAKZXh0ZXJuIGludCB0b2xvd2VyICAoaW50IF9fYykgIHRocm93ICgpICA7CgogCmV4 dGVybiBpbnQgdG91cHBlciAgKGludCBfX2MpICB0aHJvdyAoKSAgOwoKCgoKIAoKZXh0ZXJuIGlu dCBpc2FzY2lpICAoaW50IF9fYykgIHRocm93ICgpICA7CgogCgpleHRlcm4gaW50IHRvYXNjaWkg IChpbnQgX19jKSAgdGhyb3cgKCkgIDsKCgoKCiAKCmV4dGVybiBpbnQgIF90b3VwcGVyICAgKGlu dCkgIHRocm93ICgpICAgOwpleHRlcm4gaW50ICBfdG9sb3dlciAgIChpbnQpICB0aHJvdyAoKSAg IDsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIF9faW5saW5lIGludAp0b2xvd2VyIChpbnQg X19jKSB0aHJvdyAoKSAKewogIHJldHVybiBfX2MgPj0gLTEyOCAmJiBfX2MgPCAyNTYgPyBfX2N0 eXBlX3RvbG93ZXJbX19jXSA6IF9fYzsKfQoKZXh0ZXJuIF9faW5saW5lIGludAp0b3VwcGVyIChp bnQgX19jKSB0aHJvdyAoKSAKewogIHJldHVybiBfX2MgPj0gLTEyOCAmJiBfX2MgPCAyNTYgPyBf X2N0eXBlX3RvdXBwZXJbX19jXSA6IF9fYzsKfQoKCiMgMTg2ICIvdXNyL2luY2x1ZGUvY3R5cGUu aCIgMwoKCgoKCgoKCgoKCgoKIyAyNzMgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCgoKfSAKCgoj IDYgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4v Li4vaW5jbHVkZS9nKystMy9jY3R5cGUiIDIgMwoKCiMgMTA1ICIvdXNyL2xpYi9nY2MtbGliL2k1 ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL3N0 cmFpdHMuaCIgMiAzCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8y Ljk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9jc3RyaW5nIiAxIDMKIAogCgoKCgojIDEg Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK ZXh0ZXJuICJDIiB7IAoKIAoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxp bnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGli L2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoK CgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGlu dXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK CgogCgoKCgoKIAoKIAoKCiMgMTI2ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGlu dXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgogCgogCgoKIyAxODggIi91c3Iv bGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIg MwoKCgoKCiAKCgoKCiAKCgojIDI2OSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxp bnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKCgoKCgoKCgoKCgogCgogCgojIDMx NyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0 ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDMzICIvdXNyL2luY2x1ZGUv c3RyaW5nLmgiIDIgMwoKCgogCmV4dGVybiB2b2lkICogIG1lbWNweSAgKHZvaWQgKiAgX19yZXN0 cmljdCBfX2Rlc3QsCgkJCSAgICBfX2NvbnN0IHZvaWQgKiAgX19yZXN0cmljdCBfX3NyYywgc2l6 ZV90IF9fbikgIHRocm93ICgpICA7CiAKCmV4dGVybiB2b2lkICogIG1lbW1vdmUgICh2b2lkICog IF9fZGVzdCwgX19jb25zdCB2b2lkICogIF9fc3JjLAoJCQkgICAgIHNpemVfdCBfX24pICB0aHJv dyAoKSAgOwoKIAoKCgpleHRlcm4gdm9pZCAqICBtZW1jY3B5ICAodm9pZCAqICBfX2Rlc3QsIF9f Y29uc3Qgdm9pZCAqICBfX3NyYywKCQkJICAgICBpbnQgX19jLCBzaXplX3QgX19uKSAgdGhyb3cg KCkgIDsKCgoKIApleHRlcm4gdm9pZCAqICBtZW1zZXQgICh2b2lkICogIF9fcywgaW50IF9fYywg c2l6ZV90IF9fbikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgbWVtY21wICAoX19jb25zdCB2 b2lkICogIF9fczEsIF9fY29uc3Qgdm9pZCAqICBfX3MyLAoJCQlzaXplX3QgX19uKSAgdGhyb3cg KCkgIDsKCiAKZXh0ZXJuIHZvaWQgKiAgbWVtY2hyICAoX19jb25zdCB2b2lkICogIF9fcywgaW50 IF9fYywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgoKCgoKCgoKIApleHRlcm4gY2hhciAqc3Ry Y3B5ICAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCgkJCSAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fc3JjKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gY2hhciAqc3RybmNweSAgKGNoYXIgKl9f cmVzdHJpY3QgX19kZXN0LAoJCQkgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNp emVfdCBfX24pICB0aHJvdyAoKSAgOwoKIApleHRlcm4gY2hhciAqc3RyY2F0ICAoY2hhciAqX19y ZXN0cmljdCBfX2Rlc3QsCgkJCSAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKSAgdGhy b3cgKCkgIDsKIApleHRlcm4gY2hhciAqc3RybmNhdCAgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0 LAoJCQkgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pICB0aHJv dyAoKSAgOwoKIApleHRlcm4gaW50IHN0cmNtcCAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25z dCBjaGFyICpfX3MyKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gaW50IHN0cm5jbXAgIChfX2NvbnN0 IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikgIHRocm93ICgpICA7 CgogCmV4dGVybiBpbnQgc3RyY29sbCAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFy ICpfX3MyKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gc2l6ZV90IHN0cnhmcm0gIChjaGFyICpfX3Jl c3RyaWN0IF9fZGVzdCwKCQkJICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6 ZV90IF9fbikgIHRocm93ICgpICA7CgojIDEwNyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCgoK CiAKZXh0ZXJuIGNoYXIgKl9fc3RyZHVwICAoX19jb25zdCBjaGFyICpfX3MpICB0aHJvdyAoKSAg OwpleHRlcm4gY2hhciAqc3RyZHVwICAoX19jb25zdCBjaGFyICpfX3MpICB0aHJvdyAoKSAgOwoK CiAKCgoKCgoKIyAxNDMgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCiAKZXh0ZXJuIGNoYXIg KnN0cmNociAgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSAgdGhyb3cgKCkgIDsKIApleHRl cm4gY2hhciAqc3RycmNociAgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSAgdGhyb3cgKCkg IDsKCgoKCgoKCiAKCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAgKF9fY29uc3QgY2hhciAqX19zLCBf X2NvbnN0IGNoYXIgKl9fcmVqZWN0KSAgdGhyb3cgKCkgIDsKIAoKZXh0ZXJuIHNpemVfdCBzdHJz cG4gIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkgIHRocm93ICgp ICA7CiAKZXh0ZXJuIGNoYXIgKnN0cnBicmsgIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBj aGFyICpfX2FjY2VwdCkgIHRocm93ICgpICA7CiAKZXh0ZXJuIGNoYXIgKnN0cnN0ciAgKF9fY29u c3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkgIHRocm93ICgpICA7 CgoKCgoKCgoKCiAKZXh0ZXJuIGNoYXIgKnN0cnRvayAgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAoJ CQkgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSAgdGhyb3cgKCkgIDsKCiAKCmV4 dGVybiBjaGFyICpfX3N0cnRva19yICAoY2hhciAqX19yZXN0cmljdCBfX3MsCgkJCSAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAoJCQkgICAgICBjaGFyICoqX19yZXN0cmlj dCBfX3NhdmVfcHRyKSAgdGhyb3cgKCkgIDsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAgKGNoYXIg Kl9fcmVzdHJpY3QgX19zLAoJCQkgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0s CgkJCSAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSAgdGhyb3cgKCkgIDsKCgojIDIw MyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCgoKCiAKZXh0ZXJuIHNpemVfdCBzdHJsZW4gIChf X2NvbnN0IGNoYXIgKl9fcykgIHRocm93ICgpICA7CgoKCgoKCgoKIApleHRlcm4gY2hhciAqc3Ry ZXJyb3IgIChpbnQgX19lcnJudW0pICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIGNoYXIgKl9fc3Ry ZXJyb3JfciAgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgIHRo cm93ICgpICA7CmV4dGVybiBjaGFyICpzdHJlcnJvcl9yICAoaW50IF9fZXJybnVtLCBjaGFyICpf X2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSAgdGhyb3cgKCkgIDsKCgogCgpleHRlcm4gdm9pZCBfX2J6 ZXJvICAodm9pZCAqICBfX3MsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIHZv aWQgYmNvcHkgIChfX2NvbnN0IHZvaWQgKiAgX19zcmMsIHZvaWQgKiAgX19kZXN0LCBzaXplX3Qg X19uKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgYnplcm8gICh2b2lkICogIF9fcywgc2l6 ZV90IF9fbikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgYmNtcCAgKF9fY29uc3Qgdm9pZCAq ICBfX3MxLCBfX2NvbnN0IHZvaWQgKiAgX19zMiwgc2l6ZV90IF9fbikgIHRocm93ICgpICA7Cgog CmV4dGVybiBjaGFyICppbmRleCAgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSAgdGhyb3cg KCkgIDsKCiAKZXh0ZXJuIGNoYXIgKnJpbmRleCAgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19j KSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiBpbnQgX19mZnMgIChpbnQgX19pKSAgdGhyb3cgKCkg ICBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKZXh0ZXJuIGludCBmZnMgIChpbnQgX19pKSAgdGhy b3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCiAKCgoKCgoKCgoKIApleHRlcm4gaW50 IF9fc3RyY2FzZWNtcCAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKSAg dGhyb3cgKCkgIDsKZXh0ZXJuIGludCBzdHJjYXNlY21wICAoX19jb25zdCBjaGFyICpfX3MxLCBf X2NvbnN0IGNoYXIgKl9fczIpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHN0cm5jYXNlY21w ICAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCgkJCSAgICAgc2l6ZV90 IF9fbikgIHRocm93ICgpICA7CgoKIyAyNzcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgog CgpleHRlcm4gY2hhciAqc3Ryc2VwICAoY2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAoJCQkg IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSAgdGhyb3cgKCkgIDsKCgojIDMxOSAi L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCgoKCgojIDM0NyAiL3Vzci9pbmNsdWRlL3N0cmluZy5o IiAzCgoKCn0gCgoKIyA3ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45 NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY3N0cmluZyIgMiAzCgoKIyA5NCAiL3Vzci9s aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl L2crKy0zL2NzdHJpbmciIDMKCgoKIyAxMDYgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFr ZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvc3RyYWl0cy5oIiAy IDMKCgpzdHJ1Y3Qgc3RyaW5nX2NoYXJfdHJhaXRzIDxjaGFyPiB7CiAgdHlwZWRlZiBjaGFyIGNo YXJfdHlwZTsKCiAgc3RhdGljIHZvaWQgYXNzaWduIChjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFy X3R5cGUmIGMyKQogICAgeyBjMSA9IGMyOyB9CiAgc3RhdGljIGJvb2wgZXEgKGNvbnN0IGNoYXJf dHlwZSAmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gKGMxID09IGMyKTsg fQogIHN0YXRpYyBib29sIG5lIChjb25zdCBjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUm IGMyKQogICAgeyByZXR1cm4gKGMxICE9IGMyKTsgfQogIHN0YXRpYyBib29sIGx0IChjb25zdCBj aGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gKGMxIDwgYzIp OyB9CiAgc3RhdGljIGNoYXJfdHlwZSBlb3MgKCkgeyByZXR1cm4gMDsgfQogIHN0YXRpYyBib29s IGlzX2RlbChjaGFyX3R5cGUgYSkgeyByZXR1cm4gKF9fY3R5cGVfYlsoaW50KSAoICggYSApICld ICYgKHVuc2lnbmVkIHNob3J0IGludCkgICBfSVNzcGFjZSApICA7IH0KCiAgc3RhdGljIGludCBj b21wYXJlIChjb25zdCBjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3Qg bikKICAgIHsgcmV0dXJuIG1lbWNtcCAoczEsIHMyLCBuKTsgfQogIHN0YXRpYyBzaXplX3QgbGVu Z3RoIChjb25zdCBjaGFyX3R5cGUqIHMpCiAgICB7IHJldHVybiBzdHJsZW4gKHMpOyB9CiAgc3Rh dGljIGNoYXJfdHlwZSogY29weSAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwg c2l6ZV90IG4pCiAgICB7IHJldHVybiAoY2hhcl90eXBlKikgbWVtY3B5IChzMSwgczIsIG4pOyB9 CiAgc3RhdGljIGNoYXJfdHlwZSogbW92ZSAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBl KiBzMiwgc2l6ZV90IG4pCiAgICB7IHJldHVybiAoY2hhcl90eXBlKikgbWVtbW92ZSAoczEsIHMy LCBuKTsgfQogIHN0YXRpYyBjaGFyX3R5cGUqIHNldCAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hh cl90eXBlJiBjLCBzaXplX3QgbikKICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1zZXQgKHMx LCBjLCBuKTsgfQp9OwoKIyAxNTkgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51 eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvc3RyYWl0cy5oIiAzCgp9ICAK CiMgMzYgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4v Li4vLi4vaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMiAzCgoKIAojIDEgIi91c3IvbGli L2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9n KystMy9hbGxvYy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGli L2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rs X2NvbmZpZy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKCgogCiAKIAogCiAKIAogCiAKIAogCiAKCgogCgogCiAKIAog CiAKIAogCgoKCgoKCgoKIyAxNDggIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51 eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgiIDMKCgoKIyAx ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwogCgoKCgoKIAoKCgoKCgojIDEgIi91c3Iv bGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIg MSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgv Mi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9s aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAz CgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL3Vzci9s aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAz CgoKIAoKCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGlu dXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKIyAyNjkgIi91c3Iv bGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIg MwoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5k cmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoK IAoKCgoKCgoKIyAxNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCgoKCgoKCgoKCgoK CgoKCgoKCgoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18g KF9fSElfXykpKTsKdHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl X18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1 dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQz Ml90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwoKCgoKIAoKCgoKCgoKCgoK CgoKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKIyAxNTEgIi91c3IvbGliL2djYy1saWIvaTU4 Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29u ZmlnLmgiIDIgMwoKCgoKCgoKCgoKCgoKCgoKCgogICAgICAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiMgMjM0ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2Ut bGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2NvbmZpZy5oIiAzCgoK IyAyNDggIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4v Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgiIDMKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgogCiAKIAogCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAojIDMxNiAiL3Vzci9s aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl L2crKy0zL3N0bF9jb25maWcuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCiAKIAogCiMgMTggIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1 LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9hbGxvYy5oIiAyIDMKCgoKIyAxICIvdXNyL2xp Yi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv ZysrLTMvc3RsX2FsbG9jLmgiIDEgMwogCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK CiAKIAogCiAKIAogCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgv Mi45NS4zL2luY2x1ZGUvbmV3IiAxIDMKIAogCgoKCgojcHJhZ21hIGludGVyZmFjZSAibmV3Igoj IDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9z dGRkZWYuaCIgMSAzCiMgMzQyICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgv Mi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCiMgOCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1h bmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL25ldyIgMiAzCgojIDEgIi91c3IvbGliL2djYy1s aWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9leGNlcHRpb24iIDEgMwogCiAK CgoKCiNwcmFnbWEgaW50ZXJmYWNlICJleGNlcHRpb24iCgpleHRlcm4gIkMrKyIgewoKbmFtZXNw YWNlIHN0ZCB7CgpjbGFzcyBleGNlcHRpb24gewpwdWJsaWM6CiAgZXhjZXB0aW9uICgpIHsgfQog IHZpcnR1YWwgfmV4Y2VwdGlvbiAoKSB7IH0KICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQgKCkg Y29uc3Q7Cn07CgpjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbiB7CnB1Ymxp YzoKICBiYWRfZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1YWwgfmJhZF9leGNlcHRpb24gKCkgeyB9 Cn07Cgp0eXBlZGVmIHZvaWQgKCp0ZXJtaW5hdGVfaGFuZGxlcikgKCk7CnR5cGVkZWYgdm9pZCAo KnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7Cgp0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRl ICh0ZXJtaW5hdGVfaGFuZGxlcik7CnZvaWQgdGVybWluYXRlICgpIF9fYXR0cmlidXRlX18gKChf X25vcmV0dXJuX18pKTsKdW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkICh1bmV4cGVj dGVkX2hhbmRsZXIpOwp2b2lkIHVuZXhwZWN0ZWQgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1 cm5fXykpOwpib29sIHVuY2F1Z2h0X2V4Y2VwdGlvbiAoKTsKCn0gIAoKfSAgCgoKIyA5ICIvdXNy L2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvbmV3IiAyIDMK CgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZCB7CgogIGNsYXNzIGJhZF9hbGxvYyA6IHB1 YmxpYyBleGNlcHRpb24gewogIHB1YmxpYzoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgp IGNvbnN0IHRocm93KCkgeyByZXR1cm4gImJhZF9hbGxvYyI7IH0KICB9OwoKICBzdHJ1Y3Qgbm90 aHJvd190IHt9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKICB0eXBlZGVmIHZv aWQgKCpuZXdfaGFuZGxlcikoKTsKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIgKG5ld19o YW5kbGVyKTsKCn0gIAoKIAp2b2lkICpvcGVyYXRvciBuZXcgKHNpemVfdCkgdGhyb3cgKHN0ZDo6 YmFkX2FsbG9jKTsKdm9pZCAqb3BlcmF0b3IgbmV3W10gKHNpemVfdCkgdGhyb3cgKHN0ZDo6YmFk X2FsbG9jKTsKdm9pZCBvcGVyYXRvciBkZWxldGUgKHZvaWQgKikgdGhyb3coKTsKdm9pZCBvcGVy YXRvciBkZWxldGVbXSAodm9pZCAqKSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXcgKHNpemVf dCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXdbXSAo c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVs ZXRlICh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRv ciBkZWxldGVbXSAodm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CgogCmlu bGluZSB2b2lkICpvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJl dHVybiBwbGFjZTsgfQppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3W10oc2l6ZV90LCB2b2lkICpw bGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQp9ICAKCgojIDQyICIvdXNyL2xpYi9nY2Mt bGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv c3RsX2FsbG9jLmgiIDIgMwoKCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1h bmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNDIgIi91c3IvbGli L2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoK IyA1MyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8u Li8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL3N0 ZGxpYi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgojIDEgIi91c3Iv bGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIg MSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgv Mi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9s aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAz CgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL3Vzci9s aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAz CgoKIAoKCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGlu dXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKIyAyNjkgIi91c3Iv bGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIg MwoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5k cmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoK IAoKCgoKCgoKIyAzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgpleHRlcm4gIkMiIHsg CgoKCgogCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IHF1b3Q7CQkJIAogICAgaW50IHJlbTsJ CQkgCiAgfSBkaXZfdDsKCiAKCnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsJ CSAKICAgIGxvbmcgaW50IHJlbTsJCSAKICB9IGxkaXZfdDsKCgoKIyA2NSAiL3Vzci9pbmNsdWRl L3N0ZGxpYi5oIiAzCgoKCiAKCgoKIAoKCgoKCiAKCmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRf bWJfY3VyX21heCAgKHZvaWQpICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGRvdWJsZSBhdG9mICAo X19jb25zdCBjaGFyICpfX25wdHIpICB0aHJvdyAoKSAgOwogCmV4dGVybiBpbnQgYXRvaSAgKF9f Y29uc3QgY2hhciAqX19ucHRyKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gbG9uZyBpbnQgYXRvbCAg KF9fY29uc3QgY2hhciAqX19ucHRyKSAgdGhyb3cgKCkgIDsKCgogCl9fZXh0ZW5zaW9uX18gZXh0 ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgIHRocm93ICgp ICA7CgoKIApleHRlcm4gZG91YmxlIHN0cnRvZCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsCgkJCSAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSAgdGhyb3cgKCkgIDsKCgoK CgoKCgoKCiAKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsCgkJCSAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2Up ICB0aHJvdyAoKSAgOwogCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsICAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCSAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwKCQkJCSAgICAgICBpbnQgX19iYXNlKSAgdGhyb3cgKCkgIDsKCgogCl9fZXh0ZW5z aW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xICAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbnB0ciwKCQkJCSAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2Up ICB0aHJvdyAoKSAgOwogCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBp bnQgc3RydG91cSAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkJICAgIGNo YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJCQkJCSAgICBpbnQgX19iYXNlKSAgdGhyb3cgKCkg IDsKCgoKIAoKIApfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGwgIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJICAgY2hhciAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsIGludCBfX2Jhc2UpICB0aHJvdyAoKSAgOwogCl9fZXh0ZW5zaW9uX18KZXh0ZXJu IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19ucHRyLAoJCQkJCSAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkJCQkJICAg ICBpbnQgX19iYXNlKSAgdGhyb3cgKCkgIDsKCgoKIyAxOTAgIi91c3IvaW5jbHVkZS9zdGRsaWIu aCIgMwoKCgogCgoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9pbnRlcm5hbCAgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwKCQkJCSAgICAgIGludCBfX2dyb3VwKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGZsb2F0IF9fc3Ry dG9mX2ludGVybmFsICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCSAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKSAgdGhyb3cgKCkgIDsKZXh0 ZXJuIGxvbmcgZG91YmxlICBfX3N0cnRvbGRfaW50ZXJuYWwgIChfX2NvbnN0IGNoYXIgKgoJCQkJ CQlfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQkJY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkJ CQkJCWludCBfX2dyb3VwKSAgdGhyb3cgKCkgIDsKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9p bnRlcm5hbCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkJY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsCgkJCQkJaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApICB0aHJvdyAo KSAgOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2ludGVybmFsICAoX19j b25zdCBjaGFyICoKCQkJCQkJICBfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQkJICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwKCQkJCQkJICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgIHRocm93 ICgpICA7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9p bnRlcm5hbCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkJICAgICAgY2hh ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkJCQkJICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3Jv dXApICB0aHJvdyAoKSAgOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxv bmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwgIChfX2NvbnN0IGNoYXIgKgoJCQkJCQkJX19yZXN0 cmljdCBfX25wdHIsCgkJCQkJCQljaGFyICoqCgkJCQkJCQlfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJ CQkJCQkJaW50IF9fYmFzZSwKCQkJCQkJCWludCBfX2dyb3VwKSAgdGhyb3cgKCkgIDsKCgoKCgoK IAoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZQpzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKSAKewogIHJldHVy biBfX3N0cnRvZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5s aW5lIGxvbmcgaW50CnN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hh ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCglpbnQgX19iYXNlKSB0aHJvdyAoKSAKewogIHJldHVy biBfX3N0cnRvbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpleHRl cm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBpbnQKc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkgaW50IF9fYmFzZSkg dGhyb3cgKCkgCnsKICByZXR1cm4gX19zdHJ0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRy LCBfX2Jhc2UsIDApOwp9CgojIDI3MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCgoKCl9fZXh0 ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9xIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCWludCBf X2Jhc2UpIHRocm93ICgpIAp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19ucHRyLCBf X2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNp Z25lZCBsb25nIGxvbmcgaW50CnN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJIGludCBfX2Jhc2UpIHRocm93ICgpIAp7 CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwg MCk7Cn0KCgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludApzdHJ0 b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwKCSBpbnQgX19iYXNlKSB0aHJvdyAoKSAKewogIHJldHVybiBfX3N0cnRvbGxfaW50 ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRl cm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludApzdHJ0b3VsbCAoX19jb25zdCBjaGFy ICogX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJICBpbnQg X19iYXNlKSB0aHJvdyAoKSAKewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIs IF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZQphdG9mIChf X2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgCnsKICByZXR1cm4gc3RydG9kIChfX25wdHIs IChjaGFyICoqKSBfX251bGwgKTsKfQpleHRlcm4gX19pbmxpbmUgaW50CmF0b2kgKF9fY29uc3Qg Y2hhciAqX19ucHRyKSB0aHJvdyAoKSAKewogIHJldHVybiAoaW50KSBzdHJ0b2wgKF9fbnB0ciwg KGNoYXIgKiopIF9fbnVsbCAsIDEwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKYXRvbCAo X19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIAp7CiAgcmV0dXJuIHN0cnRvbCAoX19ucHRy LCAoY2hhciAqKikgX19udWxsICwgMTApOwp9CgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxp bmUgbG9uZyBsb25nIGludAphdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIAp7 CiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCAsIDEwKTsKfQoKCgoK CiAKCgpleHRlcm4gY2hhciAqbDY0YSAgKGxvbmcgaW50IF9fbikgIHRocm93ICgpICA7CgogCmV4 dGVybiBsb25nIGludCBhNjRsICAoX19jb25zdCBjaGFyICpfX3MpICB0aHJvdyAoKSAgOwoKCiMg MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK CgoKCgpleHRlcm4gIkMiIHsgCgoKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBf X3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25n IHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1 YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7 CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoKCgoKCgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2 X3Q7CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVf dDsKCgoKCnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlk X3Q7CgoKCgoKdHlwZWRlZiBfX29mZl90IG9mZl90OwoKCgoKCgoKCgoKCnR5cGVkZWYgX19waWRf dCBwaWRfdDsKCgoKCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCnR5cGVkZWYgX19zc2l6ZV90IHNz aXplX3Q7CgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBj YWRkcl90OwoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CgoKCgoKCgojIDEgIi91c3IvaW5jbHVk ZS90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCiMgNTEgIi91 c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyA2MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoK CgoKCiAKdHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CgoKCgoKIyA4OSAiL3Vzci9pbmNsdWRlL3Rp bWUuaCIgMwoKCgoKIyAyNzkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyAxMjMgIi91c3Iv aW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1h bmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkg Ii91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRk ZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFu ZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoK CgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKCiMgMTI2ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFu ZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgogCgogCgoKIyAx ODggIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9z dGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCgojIDI2OSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1h bmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKCgoKCgoKCgoKCgog CgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9p bmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDEyNiAiL3Vz ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50 IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWdu ZWQgaW50IHVpbnQ7CgoKIAoKIyAxNjAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwoKCiAK CgoKCgoKCnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19R SV9fICkpKSA7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICgg IF9fSElfXyApKSkgOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVf XyAoICBfX1NJX18gKSkpIDsKdHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19t b2RlX18gKCAgX19ESV9fICkpKSA7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19h dHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fUUlfXyApKSkgOwp0eXBlZGVmIHVuc2lnbmVkIGlu dCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fSElfXyApKSkgOwp0eXBl ZGVmIHVuc2lnbmVkIGludCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9f U0lfXyApKSkgOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAo KF9fbW9kZV9fICggIF9fRElfXyApKSkgOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJp YnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwoKCiAKCgoKCgoKIAoKCiAKIyAxICIvdXNy L2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAK CgogCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMwoKCgoKCgoKCgoK CgojIDU2ICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMwoKIyA3MiAiL3Vzci9pbmNsdWRl L2JpdHMvc2VsZWN0LmgiIDMKCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoK CiAKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoK CgoKCgoKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgogCgoKdHlwZWRlZiBzdHJ1Y3QKICB7 CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25l ZCBsb25nIGludCkpKSBdOwogIH0gX19zaWdzZXRfdDsKCgoKCiAKCgoKCgojIDEyNSAiL3Vzci9p bmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKCiMgMzQgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi IDIgMwoKCiAKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoK CgogCgoKCgoKCgoKCgoKCgoKIyA1MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDYyICIv dXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgNzMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoK CgoKCgogCgpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBsb25nIGludCB0dl9zZWM7CQkgCiAgICBs b25nIGludCB0dl9uc2VjOwkJIAogIH07CgoKCgoKIyAyNzkgIi91c3IvaW5jbHVkZS90aW1lLmgi IDMKCgoKIyAzOCAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKZXh0ZXJuICJDIiB7 IAoKIAoKCgpzdHJ1Y3QgdGltZXZhbDsKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CgogCnR5 cGVkZWYgX19mZF9zZXQgZmRfc2V0OwoKIAoKCgogCgoKCgogCgoKCgoKCiAKCgoKCmV4dGVybiBp bnQgX19zZWxlY3QgIChpbnQgX19uZmRzLCBfX2ZkX3NldCAqX19yZWFkZmRzLAoJCQkgIF9fZmRf c2V0ICpfX3dyaXRlZmRzLCBfX2ZkX3NldCAqX19leGNlcHRmZHMsCgkJCSAgc3RydWN0IHRpbWV2 YWwgKl9fdGltZW91dCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgc2VsZWN0ICAoaW50IF9fbmZk cywgX19mZF9zZXQgKl9fcmVhZGZkcywKCQkJX19mZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0 ICpfX2V4Y2VwdGZkcywKCQkJc3RydWN0IHRpbWV2YWwgKl9fdGltZW91dCkgIHRocm93ICgpICA7 CgojIDkxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCgoKfSAKCgojIDE5NSAiL3Vzci9p bmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgogCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNy b3MuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiMgNDcgIi91c3IvaW5j bHVkZS9zeXMvc3lzbWFjcm9zLmgiIDMKCgoKIyAxOTggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu aCIgMiAzCgoKCgogCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CSAgCnR5cGVkZWYgX19m c2Jsa2NudF90IGZzYmxrY250X3Q7ICAKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsg IAoKCgoKCgoKCgoKCgp9IAoKCiMgMzM5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCiAK CgoKIApleHRlcm4gaW50MzJfdCByYW5kb20gICh2b2lkKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJu IHZvaWQgc3JhbmRvbSAgKHVuc2lnbmVkIGludCBfX3NlZWQpICB0aHJvdyAoKSAgOwoKIAoKCgpl eHRlcm4gdm9pZCAqICBpbml0c3RhdGUgICh1bnNpZ25lZCBpbnQgX19zZWVkLCB2b2lkICogIF9f c3RhdGVidWYsCgkJCSAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgIHRocm93ICgpICA7CgogCgpl eHRlcm4gdm9pZCAqICBzZXRzdGF0ZSAgKHZvaWQgKiAgX19zdGF0ZWJ1ZikgIHRocm93ICgpICA7 CgoKCiAKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsJCSAKICAg IGludDMyX3QgKnJwdHI7CQkgCiAgICBpbnQzMl90ICpzdGF0ZTsJCSAKICAgIGludCByYW5kX3R5 cGU7CQkgCiAgICBpbnQgcmFuZF9kZWc7CQkgCiAgICBpbnQgcmFuZF9zZXA7CQkgCiAgICBpbnQz Ml90ICplbmRfcHRyOwkJIAogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yICAoc3RydWN0IHJhbmRv bV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmLAoJCQkgIGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1 bHQpICB0aHJvdyAoKSAgOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgICh1bnNpZ25lZCBpbnQgX19z ZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSAgdGhyb3cgKCkgIDsKCmV4dGVybiBpbnQg aW5pdHN0YXRlX3IgICh1bnNpZ25lZCBpbnQgX19zZWVkLAoJCQkgICAgIHZvaWQgKiAgX19yZXN0 cmljdCBfX3N0YXRlYnVmLAoJCQkgICAgIHNpemVfdCBfX3N0YXRlbGVuLAoJCQkgICAgIHN0cnVj dCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgIHRocm93ICgpICA7CgpleHRlcm4gaW50 IHNldHN0YXRlX3IgICh2b2lkICogIF9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKCQkJICAgIHN0cnVj dCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgIHRocm93ICgpICA7CgoKCgogCmV4dGVy biBpbnQgcmFuZCAgKHZvaWQpICB0aHJvdyAoKSAgOwogCmV4dGVybiB2b2lkIHNyYW5kICAodW5z aWduZWQgaW50IF9fc2VlZCkgIHRocm93ICgpICA7CgoKIApleHRlcm4gaW50IHJhbmRfciAgKHVu c2lnbmVkIGludCAqX19zZWVkKSAgdGhyb3cgKCkgIDsKCgoKCiAKCiAKZXh0ZXJuIGRvdWJsZSBk cmFuZDQ4ICAodm9pZCkgIHRocm93ICgpICA7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAgKHVuc2ln bmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGxvbmcgaW50 IGxyYW5kNDggICh2b2lkKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggICh1 bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgIHRocm93ICgpICA7CgogCmV4dGVybiBsb25n IGludCBtcmFuZDQ4ICAodm9pZCkgIHRocm93ICgpICA7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4 ICAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pICB0aHJvdyAoKSAgOwoKIApleHRlcm4g dm9pZCBzcmFuZDQ4ICAobG9uZyBpbnQgX19zZWVkdmFsKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIHVu c2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlsz XSkgIHRocm93ICgpICA7CmV4dGVybiB2b2lkIGxjb25nNDggICh1bnNpZ25lZCBzaG9ydCBpbnQg X19wYXJhbVs3XSkgIHRocm93ICgpICA7CgogCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1 bnNpZ25lZCBzaG9ydCBpbnQgeFszXTsJIAogICAgdW5zaWduZWQgc2hvcnQgaW50IGFbM107CSAK ICAgIHVuc2lnbmVkIHNob3J0IGludCBjOwkgCiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgb2xkX3hb M107ICAKICAgIGludCBpbml0OwkJCSAKICB9OwoKCiAKZXh0ZXJuIGludCBkcmFuZDQ4X3IgIChz dHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAoJCQkgICBkb3VibGUgKl9f cmVzdHJpY3QgX19yZXN1bHQpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IGVyYW5kNDhfciAgKHVu c2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAoJCQkgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf X3Jlc3RyaWN0IF9fYnVmZmVyLAoJCQkgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpICB0 aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IGxyYW5kNDhfciAgKHN0cnVjdCBkcmFuZDQ4X2RhdGEg Kl9fcmVzdHJpY3QgX19idWZmZXIsCgkJCSAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0 KSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBucmFuZDQ4X3IgICh1bnNpZ25lZCBzaG9ydCBpbnQg X194c3ViaVszXSwKCQkJICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZl ciwKCQkJICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpICB0aHJvdyAoKSAgOwoKIApl eHRlcm4gaW50IG1yYW5kNDhfciAgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19i dWZmZXIsCgkJCSAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSAgdGhyb3cgKCkgIDsK ZXh0ZXJuIGludCBqcmFuZDQ4X3IgICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKCQkJ ICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKCQkJICAgbG9uZyBp bnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHNyYW5k NDhfciAgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIp ICB0aHJvdyAoKSAgOwoKZXh0ZXJuIGludCBzZWVkNDhfciAgKHVuc2lnbmVkIHNob3J0IGludCBf X3NlZWQxNnZbM10sCgkJCSAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpICB0aHJvdyAo KSAgOwoKZXh0ZXJuIGludCBsY29uZzQ4X3IgICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3 XSwKCQkJICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpICB0aHJvdyAoKSAgOwoKCgoK CgoKIApleHRlcm4gdm9pZCAqICBtYWxsb2MgIChzaXplX3QgX19zaXplKSAgdGhyb3cgKCkgIDsK IApleHRlcm4gdm9pZCAqICBjYWxsb2MgIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkg IHRocm93ICgpICA7CgoKCiAKCmV4dGVybiB2b2lkICogIHJlYWxsb2MgICh2b2lkICogIF9fcHRy LCBzaXplX3QgX19zaXplKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gdm9pZCBmcmVlICAodm9pZCAq ICBfX3B0cikgIHRocm93ICgpICA7CgoKIApleHRlcm4gdm9pZCBjZnJlZSAgKHZvaWQgKiAgX19w dHIpICB0aHJvdyAoKSAgOwoKCgojIDEgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAzCiAKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1s aW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xp Yi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMK CgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxp bnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK CgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxp bnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKIAoKIAoKCiMgMTg4ICIvdXNy L2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgi IDMKCgoKCgogCgoKCgogCgoKIyAyNjkgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1s aW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAz MTcgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9z dGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIyAyNSAiL3Vzci9pbmNsdWRl L2FsbG9jYS5oIiAyIDMKCgpleHRlcm4gIkMiIHsgCgogCgoKIApleHRlcm4gdm9pZCAqICBhbGxv Y2EgIChzaXplX3QgX19zaXplKSAgdGhyb3cgKCkgIDsKCgoKCgp9IAoKCiMgNDkyICIvdXNyL2lu Y2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKIApleHRlcm4gdm9pZCAqICB2YWxsb2MgIChzaXplX3Qg X19zaXplKSAgdGhyb3cgKCkgIDsKCgoKIApleHRlcm4gdm9pZCBhYm9ydCAgKHZvaWQpICB0aHJv dyAoKSAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogCmV4dGVybiBpbnQgYXRl eGl0ICAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSAgdGhyb3cgKCkgIDsKCgogCgpleHRlcm4gaW50 IF9fb25fZXhpdCAgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKiAgX19hcmcp LAoJCQkgICB2b2lkICogIF9fYXJnKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBvbl9leGl0ICAo dm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqICBfX2FyZyksCgkJCSB2b2lkICog IF9fYXJnKSAgdGhyb3cgKCkgIDsKCgogCgoKZXh0ZXJuIHZvaWQgZXhpdCAgKGludCBfX3N0YXR1 cykgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCgoKCiAK ZXh0ZXJuIGNoYXIgKmdldGVudiAgKF9fY29uc3QgY2hhciAqX19uYW1lKSAgdGhyb3cgKCkgIDsK CiAKCmV4dGVybiBjaGFyICpfX3NlY3VyZV9nZXRlbnYgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkg IHRocm93ICgpICA7CgoKIAogCgpleHRlcm4gaW50IHB1dGVudiAgKGNoYXIgKl9fc3RyaW5nKSAg dGhyb3cgKCkgIDsKCgoKIAoKZXh0ZXJuIGludCBzZXRlbnYgIChfX2NvbnN0IGNoYXIgKl9fbmFt ZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLAoJCQlpbnQgX19yZXBsYWNlKSAgdGhyb3cgKCkgIDsK CiAKZXh0ZXJuIHZvaWQgdW5zZXRlbnYgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgIHRocm93ICgp ICA7CgoKCiAKCgpleHRlcm4gaW50IGNsZWFyZW52ICAodm9pZCkgIHRocm93ICgpICA7CgoKCgog CgoKCmV4dGVybiBjaGFyICpta3RlbXAgIChjaGFyICpfX3RlbXBsYXRlKSAgdGhyb3cgKCkgIDsK CiAKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAgKGNoYXIgKl9fdGVtcGxhdGUpICB0aHJvdyAoKSAg OwoKCgogCmV4dGVybiBpbnQgc3lzdGVtICAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQpICB0aHJv dyAoKSAgOwoKCgoKCgoKCgoKIAoKCgoKCmV4dGVybiBjaGFyICpyZWFscGF0aCAgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX25hbWUsCgkJCSAgICBjaGFyICpfX3Jlc3RyaWN0IF9fcmVzb2x2 ZWQpICB0aHJvdyAoKSAgOwoKCgogCgoKdHlwZWRlZiBpbnQgKCpfX2NvbXBhcl9mbl90KSAgKF9f Y29uc3Qgdm9pZCAqICwgX19jb25zdCB2b2lkICogKSAgOwoKCgoKCgogCgpleHRlcm4gdm9pZCAq ICBic2VhcmNoICAoX19jb25zdCB2b2lkICogIF9fa2V5LCBfX2NvbnN0IHZvaWQgKiAgX19iYXNl LAoJCQkgICAgICAgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCgkJCSAgICAgICBfX2Nv bXBhcl9mbl90IF9fY29tcGFyKSAgOwoKIAoKZXh0ZXJuIHZvaWQgcXNvcnQgICh2b2lkICogIF9f YmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCgkJCSAgX19jb21wYXJfZm5fdCBf X2NvbXBhcikgIDsKCgogCmV4dGVybiBpbnQgYWJzICAoaW50IF9feCkgIHRocm93ICgpICAgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbG9uZyBpbnQgbGFicyAgKGxvbmcgaW50 IF9feCkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgogCgog CmV4dGVybiBkaXZfdCBkaXYgIChpbnQgX19udW1lciwgaW50IF9fZGVub20pICB0aHJvdyAoKSAg IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBsZGl2ICAobG9uZyBp bnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkgIHRocm93ICgpICAKICAgICBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCgoKIAoKCiAKCgpleHRlcm4gY2hhciAqZWN2dCAgKGRv dWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAoJCQlp bnQgKl9fcmVzdHJpY3QgX19zaWduKSAgdGhyb3cgKCkgIDsKCiAKCgpleHRlcm4gY2hhciAqZmN2 dCAgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0 LAoJCQlpbnQgKl9fcmVzdHJpY3QgX19zaWduKSAgdGhyb3cgKCkgIDsKCiAKCgpleHRlcm4gY2hh ciAqZ2N2dCAgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSAgdGhy b3cgKCkgIDsKCiAKZXh0ZXJuIGNoYXIgKnFlY3Z0ICAobG9uZyBkb3VibGUgIF9fdmFsdWUsIGlu dCBfX25kaWdpdCwKCQkJIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3Qg X19zaWduKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGNoYXIgKnFmY3Z0ICAobG9uZyBkb3VibGUgIF9f dmFsdWUsIGludCBfX25kaWdpdCwKCQkJIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9f cmVzdHJpY3QgX19zaWduKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGNoYXIgKnFnY3Z0ICAobG9uZyBk b3VibGUgIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpICB0aHJvdyAoKSAgOwoK CgogCgpleHRlcm4gaW50IGVjdnRfciAgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGlu dCAqX19yZXN0cmljdCBfX2RlY3B0LAoJCQlpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpf X3Jlc3RyaWN0IF9fYnVmLAoJCQlzaXplX3QgX19sZW4pICB0aHJvdyAoKSAgOwpleHRlcm4gaW50 IGZjdnRfciAgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBf X2RlY3B0LAoJCQlpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm LAoJCQlzaXplX3QgX19sZW4pICB0aHJvdyAoKSAgOwoKZXh0ZXJuIGludCBxZWN2dF9yICAobG9u ZyBkb3VibGUgIF9fdmFsdWUsIGludCBfX25kaWdpdCwKCQkJIGludCAqX19yZXN0cmljdCBfX2Rl Y3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAoJCQkgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwg c2l6ZV90IF9fbGVuKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBxZmN2dF9yICAobG9uZyBkb3Vi bGUgIF9fdmFsdWUsIGludCBfX25kaWdpdCwKCQkJIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBp bnQgKl9fcmVzdHJpY3QgX19zaWduLAoJCQkgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90 IF9fbGVuKSAgdGhyb3cgKCkgIDsKCgoKCiAKCmV4dGVybiBpbnQgbWJsZW4gIChfX2NvbnN0IGNo YXIgKl9fcywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CiAKCmV4dGVybiBpbnQgbWJ0b3djICAo d2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywKCQkJX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f cywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CiAKCmV4dGVybiBpbnQgd2N0b21iICAoY2hhciAq X19zLCB3Y2hhcl90IF9fd2NoYXIpICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIHNpemVfdCBtYnN0 b3djcyAgKHdjaGFyX3QgKl9fcmVzdHJpY3QgIF9fcHdjcywKCQkJICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gc2l6ZV90 IHdjc3RvbWJzICAoY2hhciAqX19yZXN0cmljdCBfX3MsCgkJCSAgICAgX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgoKCiAKCgoKZXh0 ZXJuIGludCBycG1hdGNoICAoX19jb25zdCBjaGFyICpfX3Jlc3BvbnNlKSAgdGhyb3cgKCkgIDsK CgoKIyA3MzIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCgojIDc1NiAiL3Vzci9pbmNsdWRl L3N0ZGxpYi5oIiAzCgoKIyA3NjYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCgoKCn0gCgoK IyA1NCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8u Li8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9h c3NlcnQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiMgMzIgIi91c3IvaW5jbHVkZS9h c3NlcnQuaCIgMwoKCgoKCiAKCgoKCiMgNTYgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwoKCmV4 dGVybiAiQyIgeyAKCiAKZXh0ZXJuIHZvaWQgX19hc3NlcnRfZmFpbCAgKF9fY29uc3QgY2hhciAq X19hc3NlcnRpb24sCgkJCQlfX2NvbnN0IGNoYXIgKl9fZmlsZSwKCQkJCXVuc2lnbmVkIGludCBf X2xpbmUsCgkJCQlfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pICB0aHJvdyAoKSAgCiAgICAgX19h dHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKIApleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJy b3JfZmFpbCAgKGludCBfX2Vycm51bSwKCQkJCSAgICAgICBfX2NvbnN0IGNoYXIgKl9fZmlsZSwK CQkJCSAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLAoJCQkJICAgICAgIF9fY29uc3QgY2hhciAq X19mdW5jdGlvbikgIHRocm93ICgpICAKICAgICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f KSk7Cgp9IAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDU2ICIvdXNyL2xp Yi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv ZysrLTMvc3RsX2FsbG9jLmgiIDIgMwoKCgoKCgoKCgoKCgogICAgIAogICAgIAogICAgIAojIDEg Ii91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMwogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoK CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKIAoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK IAoKCgoKCgoKCgoKCgoKCiMgNTEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyA2MiAiL3Vz ci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDczICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCgoj IDg5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCgojIDI3OSAiL3Vzci9pbmNsdWRlL3RpbWUu aCIgMwoKCgojIDI5ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoKIAojIDEgIi91c3IvaW5j bHVkZS9iaXRzL3NjaGVkLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK CiAKCgoKCgoKCgoKCgogCnN0cnVjdCBzY2hlZF9wYXJhbQogIHsKICAgIGludCBzY2hlZF9wcmlv cml0eTsKICB9OwoKZXh0ZXJuICJDIiB7IAoKIAoKZXh0ZXJuIGludCBjbG9uZSAgKGludCAoKl9f Zm4pICh2b2lkICpfX2FyZyksIHZvaWQgKl9fY2hpbGRfc3RhY2ssCgkJICAgICAgIGludCBfX2Zs YWdzLCB2b2lkICpfX2FyZykgIHRocm93ICgpICA7CgoKfSAKCgoKCgoKIApzdHJ1Y3QgX19zY2hl ZF9wYXJhbQogIHsKICAgIGludCBzY2hlZF9wcmlvcml0eTsKICB9OwoKCiMgMzIgIi91c3IvaW5j bHVkZS9zY2hlZC5oIiAyIDMKCgpleHRlcm4gIkMiIHsgCgogCmV4dGVybiBpbnQgX19zY2hlZF9z ZXRwYXJhbSAgKF9fcGlkX3QgX19waWQsCgkJCQkgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFt ICpfX3BhcmFtKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBzY2hlZF9zZXRwYXJhbSAgKF9fcGlk X3QgX19waWQsCgkJCQlfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIHRocm93 ICgpICA7CgogCmV4dGVybiBpbnQgX19zY2hlZF9nZXRwYXJhbSAgKF9fcGlkX3QgX19waWQsIHN0 cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgc2NoZWRf Z2V0cGFyYW0gIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pICB0 aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IF9fc2NoZWRfc2V0c2NoZWR1bGVyICAoX19waWRfdCBf X3BpZCwgaW50IF9fcG9saWN5LAoJCQkJICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0g Kl9fcGFyYW0pICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHNjaGVkX3NldHNjaGVkdWxlciAgKF9f cGlkX3QgX19waWQsIGludCBfX3BvbGljeSwKCQkJCSAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9w YXJhbSAqX19wYXJhbSkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgX19zY2hlZF9nZXRzY2hl ZHVsZXIgIChfX3BpZF90IF9fcGlkKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBzY2hlZF9nZXRz Y2hlZHVsZXIgIChfX3BpZF90IF9fcGlkKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBfX3Nj aGVkX3lpZWxkICAodm9pZCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgc2NoZWRfeWllbGQgICh2 b2lkKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBfX3NjaGVkX2dldF9wcmlvcml0eV9tYXgg IChpbnQgX19hbGdvcml0aG0pICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHNjaGVkX2dldF9wcmlv cml0eV9tYXggIChpbnQgX19hbGdvcml0aG0pICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IF9f c2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgKGludCBfX2FsZ29yaXRobSkgIHRocm93ICgpICA7CmV4 dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgKGludCBfX2FsZ29yaXRobSkgIHRocm93 ICgpICA7CgogCmV4dGVybiBpbnQgX19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgIChfX3BpZF90IF9f cGlkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgc2NoZWRf cnJfZ2V0X2ludGVydmFsICAoX19waWRfdCBfX3BpZCwgc3RydWN0IHRpbWVzcGVjICpfX3QpICB0 aHJvdyAoKSAgOwoKfSAKCgojIDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCiMgMSAi L3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgpl eHRlcm4gIkMiIHsgCgoKCgogCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2Ut bGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9s aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAz CgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1s aW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoK CgoKCiAKCgoKCgogCgogCgoKIyAxMjYgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1s aW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCiAKCiAKCgojIDE4OCAiL3Vz ci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5o IiAzCgoKCgoKIAoKCgoKIAoKCiMgMjY5ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2Ut bGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCiMg MzE3ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUv c3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiMgMzggIi91c3IvaW5jbHVk ZS90aW1lLmgiIDIgMwoKCiAKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIAoK CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgogCgoKIAoKCgoKCiAKCgoKCgoKCiMgNTkgIi91c3Iv aW5jbHVkZS9iaXRzL3RpbWUuaCIgMwogCiMgNDIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoK CiAKCgoKCgoKCgoKCgoKCgogCnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CgoKCgojIDczICIv dXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCgojIDg5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoK CgoKIApzdHJ1Y3QgdG0KewogIGludCB0bV9zZWM7CQkJIAogIGludCB0bV9taW47CQkJIAogIGlu dCB0bV9ob3VyOwkJCSAKICBpbnQgdG1fbWRheTsJCQkgCiAgaW50IHRtX21vbjsJCQkgCiAgaW50 IHRtX3llYXI7CQkJIAogIGludCB0bV93ZGF5OwkJCSAKICBpbnQgdG1feWRheTsJCQkgCiAgaW50 IHRtX2lzZHN0OwkJCSAKCgogIGxvbmcgaW50IHRtX2dtdG9mZjsJCSAKICBfX2NvbnN0IGNoYXIg KnRtX3pvbmU7CSAKCgoKCn07CgoKIAoKZXh0ZXJuIGNsb2NrX3QgY2xvY2sgICh2b2lkKSAgdGhy b3cgKCkgIDsKCiAKZXh0ZXJuIHRpbWVfdCB0aW1lICAodGltZV90ICpfX3RpbWVyKSAgdGhyb3cg KCkgIDsKCiAKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAgKHRpbWVfdCBfX3RpbWUxLCB0aW1lX3Qg X190aW1lMCkgIHRocm93ICgpICAKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7Cgog CmV4dGVybiB0aW1lX3QgbWt0aW1lICAoc3RydWN0IHRtICpfX3RwKSAgdGhyb3cgKCkgIDsKCgog CgoKZXh0ZXJuIHNpemVfdCBzdHJmdGltZSAgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg X19tYXhzaXplLAoJCQkgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKCQkJ ICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSAgdGhyb3cgKCkgIDsKCgoK CgoKCgoKIAoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lICAoX19jb25zdCB0aW1lX3QgKl9fdGlt ZXIpICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lICAoX19jb25z dCB0aW1lX3QgKl9fdGltZXIpICB0aHJvdyAoKSAgOwoKCiAKCmV4dGVybiBzdHJ1Y3QgdG0gKl9f Z210aW1lX3IgIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAoJCQkJICAgc3Ry dWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApICB0aHJvdyAoKSAgOwpleHRlcm4gc3RydWN0IHRtICpn bXRpbWVfciAgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCgkJCQkgc3RydWN0 IHRtICpfX3Jlc3RyaWN0IF9fdHApICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIHN0cnVjdCB0bSAq bG9jYWx0aW1lX3IgIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAoJCQkJICAg IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSAgdGhyb3cgKCkgIDsKCgogCgpleHRlcm4gY2hh ciAqYXNjdGltZSAgKF9fY29uc3Qgc3RydWN0IHRtICpfX3RwKSAgdGhyb3cgKCkgIDsKCiAKZXh0 ZXJuIGNoYXIgKmN0aW1lICAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpICB0aHJvdyAoKSAgOwoK CiAKCiAKCmV4dGVybiBjaGFyICphc2N0aW1lX3IgIChfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0 cmljdCBfX3RwLAoJCQkgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpICB0aHJvdyAoKSAgOwoK IApleHRlcm4gY2hhciAqY3RpbWVfciAgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGlt ZXIsCgkJCSAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpICB0aHJvdyAoKSAgOwoKCgogCmV4dGVy biBjaGFyICpfX3R6bmFtZVsyXTsJIApleHRlcm4gaW50IF9fZGF5bGlnaHQ7CQkgCmV4dGVybiBs b25nIGludCBfX3RpbWV6b25lOwkgCgoKCiAKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCiAKCmV4 dGVybiB2b2lkIHR6c2V0ICAodm9pZCkgIHRocm93ICgpICA7CgoKCmV4dGVybiBpbnQgZGF5bGln aHQ7CmV4dGVybiBsb25nIGludCB0aW1lem9uZTsKCgoKIAoKZXh0ZXJuIGludCBzdGltZSAgKF9f Y29uc3QgdGltZV90ICpfX3doZW4pICB0aHJvdyAoKSAgOwoKCgogCgoKCgoKCiAKCgogCmV4dGVy biB0aW1lX3QgdGltZWdtICAoc3RydWN0IHRtICpfX3RwKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJu IHRpbWVfdCB0aW1lbG9jYWwgIChzdHJ1Y3QgdG0gKl9fdHApICB0aHJvdyAoKSAgOwoKIApleHRl cm4gaW50IGR5c2l6ZSAgKGludCBfX3llYXIpICB0aHJvdyAoKSAgOwoKCgoKIApleHRlcm4gaW50 IG5hbm9zbGVlcCAgKF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcXVlc3RlZF90aW1lLAoJ CQkgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSAgdGhyb3cgKCkgIDsKCgoKIyAyNjQg Ii91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgojIDI3NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoK Cgp9IAoKCgoKIyAyMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKCiMgMSAiL3Vzci9p bmNsdWRlL3NpZ25hbC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgpleHRl cm4gIkMiIHsgCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIAoKCgoKCgoK CgoKCgoKCgoKCgojIDMzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwoKCgogCgoKCgoK IyAxMjUgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzCgojIDMzICIvdXNyL2luY2x1ZGUv c2lnbmFsLmgiIDIgMwoKCiAKCgoKCgoKCgoKCgoKCnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRf dDsKCgoKIyAzNjAgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwoKCn0gCgoKIyAyNCAiL3Vzci9p bmNsdWRlL3B0aHJlYWQuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBl cy5oIiAxIDMKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKCgojIDEgIi91c3IvaW5j bHVkZS9iaXRzL3NjaGVkLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgojIDYyICIvdXNyL2lu Y2x1ZGUvYml0cy9zY2hlZC5oIiAzCgoKIyA3MyAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIg MwoKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDIgMwoKCiAKc3RydWN0 IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsgICAgICAgICAgICAgCiAg aW50IF9fc3BpbmxvY2s7ICAgICAgICAgICAgICAgIAp9OwoKCiAKdHlwZWRlZiBzdHJ1Y3QgX3B0 aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QK ewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3Nj aGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2Nv cGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAq X19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCiAK dHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsgIAog IF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOyAgICAgICAgIAp9IHB0aHJlYWRfY29uZF90OwoK CiAKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsK CiAKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgogCiAKCnR5cGVkZWYgc3Ry dWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOyAgICAgICAgICAgICAgICAKICBpbnQgX19tX2NvdW50 OyAgICAgICAgICAgICAgICAgICAKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7ICAgICAgICAK ICBpbnQgX19tX2tpbmQ7ICAgICAgICAgICAgICAgICAgICAKICBzdHJ1Y3QgX3B0aHJlYWRfZmFz dGxvY2sgX19tX2xvY2s7ICAKfSBwdGhyZWFkX211dGV4X3Q7CgoKIAp0eXBlZGVmIHN0cnVjdAp7 CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKIAp0eXBlZGVmIGlu dCBwdGhyZWFkX29uY2VfdDsKCgojIDExNiAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVz LmgiIDMKCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKCgojIDI1ICIv dXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCgoKZXh0ZXJuICJDIiB7IAoKIAoKCgoKCgoKCgoK CgoKCgoKIAoKZW51bQp7CiAgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUsCgogIFBUSFJFQURfQ1JF QVRFX0RFVEFDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9JTkhFUklUX1NDSEVELAoKICBQVEhS RUFEX0VYUExJQ0lUX1NDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9TQ09QRV9TWVNURU0sCgog IFBUSFJFQURfU0NPUEVfUFJPQ0VTUwoKfTsKCmVudW0KewogIFBUSFJFQURfTVVURVhfRkFTVF9O UCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hF Q0tfTlAKCgoKCgoKCn07CgplbnVtCnsKICBQVEhSRUFEX1BST0NFU1NfUFJJVkFURSwKCiAgUFRI UkVBRF9QUk9DRVNTX1NIQVJFRAoKfTsKCiMgMTAzICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAz CgoKCgogCgpzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIKewogIHZvaWQgKCpfX3JvdXRp bmUpICAodm9pZCAqKSAgOwkgICAKICB2b2lkICpfX2FyZzsJCQkJICAgCiAgaW50IF9fY2FuY2Vs dHlwZTsJCQkgICAKICBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fcHJldjsgIAp9 OwoKIAoKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfRU5BQkxFLAoKICBQVEhSRUFEX0NBTkNFTF9E SVNBQkxFCgp9OwplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9ERUZFUlJFRCwKCiAgUFRIUkVBRF9D QU5DRUxfQVNZTkNIUk9OT1VTCgp9OwoKCgogCgogCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0 ZSAgKHB0aHJlYWRfdCAqX190aHJlYWQsCgkJCQlfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0 dHIsCgkJCQl2b2lkICooKl9fc3RhcnRfcm91dGluZSkgKHZvaWQgKiksCgkJCQl2b2lkICpfX2Fy ZykgIHRocm93ICgpICA7CgogCmV4dGVybiBwdGhyZWFkX3QgcHRocmVhZF9zZWxmICAodm9pZCkg IHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9lcXVhbCAgKHB0aHJlYWRfdCBfX3Ro cmVhZDEsIHB0aHJlYWRfdCBfX3RocmVhZDIpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gdm9pZCBw dGhyZWFkX2V4aXQgICh2b2lkICpfX3JldHZhbCkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAo KF9fbm9yZXR1cm5fXykpOwoKIAoKCmV4dGVybiBpbnQgcHRocmVhZF9qb2luICAocHRocmVhZF90 IF9fdGgsIHZvaWQgKipfX3RocmVhZF9yZXR1cm4pICB0aHJvdyAoKSAgOwoKIAoKCgpleHRlcm4g aW50IHB0aHJlYWRfZGV0YWNoICAocHRocmVhZF90IF9fdGgpICB0aHJvdyAoKSAgOwoKCiAKCiAK CgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9pbml0ICAocHRocmVhZF9hdHRyX3QgKl9fYXR0cikg IHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgIChwdGhyZWFk X2F0dHJfdCAqX19hdHRyKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf c2V0ZGV0YWNoc3RhdGUgIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAoJCQkJCSAgICAgaW50IF9f ZGV0YWNoc3RhdGUpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRk ZXRhY2hzdGF0ZSAgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKCQkJCQkgICAgIGlu dCAqX19kZXRhY2hzdGF0ZSkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy X3NldHNjaGVkcGFyYW0gIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAoJCQkJICAgICAgICBfX2Nv bnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIHRocm93ICgpICA7CgogCmV4dGVybiBp bnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcGFyYW0gIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpf X2F0dHIsCgkJCQkJICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIHRocm93ICgpICA7 CgogCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcG9saWN5ICAocHRocmVhZF9hdHRy X3QgKl9fYXR0ciwKCQkJCQkgICAgIGludCBfX3BvbGljeSkgIHRocm93ICgpICA7CgogCmV4dGVy biBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcG9saWN5ICAoX19jb25zdCBwdGhyZWFkX2F0dHJf dCAqX19hdHRyLAoJCQkJCSAgICAgaW50ICpfX3BvbGljeSkgIHRocm93ICgpICA7CgogCmV4dGVy biBpbnQgcHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZCAgKHB0aHJlYWRfYXR0cl90ICpfX2F0 dHIsCgkJCQkJICAgICAgaW50IF9faW5oZXJpdCkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQg cHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZCAgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9f YXR0ciwKCQkJCQkgICAgICBpbnQgKl9faW5oZXJpdCkgIHRocm93ICgpICA7CgogCmV4dGVybiBp bnQgcHRocmVhZF9hdHRyX3NldHNjb3BlICAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9f c2NvcGUpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY29wZSAg KF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKCQkJCSAgICAgICBpbnQgKl9fc2NvcGUp ICB0aHJvdyAoKSAgOwoKIyAyMjQgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKCgogCgoKCmV4 dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrYWRkciAgKHB0aHJlYWRfYXR0cl90ICpfX2F0 dHIsCgkJCQkJICAgdm9pZCAqX19zdGFja2FkZHIpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50 IHB0aHJlYWRfYXR0cl9nZXRzdGFja2FkZHIgIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0 dHIsCgkJCQkJICAgdm9pZCAqKl9fc3RhY2thZGRyKSAgdGhyb3cgKCkgIDsKCiAKCgpleHRlcm4g aW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUgIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAoJ CQkJCSAgIHNpemVfdCBfX3N0YWNrc2l6ZSkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgcHRo cmVhZF9hdHRyX2dldHN0YWNrc2l6ZSAgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwK CQkJCQkgICBzaXplX3QgKl9fc3RhY2tzaXplKSAgdGhyb3cgKCkgIDsKCiAKCiAKCmV4dGVybiBp bnQgcHRocmVhZF9zZXRzY2hlZHBhcmFtICAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwgaW50 IF9fcG9saWN5LAoJCQkJICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFt KSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2dldHNjaGVkcGFyYW0gIChwdGhy ZWFkX3QgX190YXJnZXRfdGhyZWFkLAoJCQkJICAgICAgIGludCAqX19wb2xpY3ksCgkJCQkgICAg ICAgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSAgdGhyb3cgKCkgIDsKCgoKCgoKCgoKIAoK IAoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhfaW5pdCAgKHB0aHJlYWRfbXV0ZXhfdCAqX19t dXRleCwKCQkJCSAgIF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19tdXRleF9hdHRyKSAg dGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2luaXQgIChwdGhyZWFkX211dGV4 X3QgKl9fbXV0ZXgsCgkJCQkgICBfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fbXV0ZXhf YXR0cikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4X2Rlc3Ryb3kg IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHB0aHJl YWRfbXV0ZXhfZGVzdHJveSAgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgIHRocm93ICgpICA7 CgogCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4X3RyeWxvY2sgIChwdGhyZWFkX211dGV4X3Qg Kl9fbXV0ZXgpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAg KHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgX19w dGhyZWFkX211dGV4X2xvY2sgIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpICB0aHJvdyAoKSAg OwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfbG9jayAgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRl eCkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4X3VubG9jayAgKHB0 aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgcHRocmVhZF9t dXRleF91bmxvY2sgIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpICB0aHJvdyAoKSAgOwoKCiAK CiAKCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4YXR0cl9pbml0ICAocHRocmVhZF9tdXRleGF0 dHJfdCAqX19hdHRyKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9p bml0ICAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJu IGludCBfX3B0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgIChwdGhyZWFkX211dGV4YXR0cl90ICpf X2F0dHIpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kg IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpICB0aHJvdyAoKSAgOwoKIyAzMTYgIi91c3Iv aW5jbHVkZS9wdGhyZWFkLmgiIDMKCgoKIAoKIAoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfaW5p dCAgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQsCgkJCQkgICBfX2NvbnN0IHB0aHJlYWRfY29uZGF0 dHJfdCAqX19jb25kX2F0dHIpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfY29u ZF9kZXN0cm95ICAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgIHRocm93ICgpICA7CgogCmV4dGVy biBpbnQgcHRocmVhZF9jb25kX3NpZ25hbCAgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpICB0aHJv dyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfY29uZF9icm9hZGNhc3QgIChwdGhyZWFkX2Nv bmRfdCAqX19jb25kKSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3dh aXQgIChwdGhyZWFkX2NvbmRfdCAqX19jb25kLAoJCQkJICAgcHRocmVhZF9tdXRleF90ICpfX211 dGV4KSAgdGhyb3cgKCkgIDsKCiAKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0 ICAocHRocmVhZF9jb25kX3QgKl9fY29uZCwKCQkJCQlwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgs CgkJCQkJX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fYWJzdGltZSkgIHRocm93ICgpICA7Cgog CgogCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9pbml0ICAocHRocmVhZF9jb25kYXR0cl90 ICpfX2F0dHIpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfZGVz dHJveSAgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSAgdGhyb3cgKCkgIDsKCgojIDQwOSAi L3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwoKCgogCgogCgoKCgoKZXh0ZXJuIGludCBfX3B0aHJl YWRfa2V5X2NyZWF0ZSAgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LAoJCQkJICAgICAgdm9pZCAoKl9f ZGVzdHJfZnVuY3Rpb24pICh2b2lkICopKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdGhyZWFk X2tleV9jcmVhdGUgIChwdGhyZWFkX2tleV90ICpfX2tleSwKCQkJCSAgICB2b2lkICgqX19kZXN0 cl9mdW5jdGlvbikgKHZvaWQgKikpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRf a2V5X2RlbGV0ZSAgKHB0aHJlYWRfa2V5X3QgX19rZXkpICB0aHJvdyAoKSAgOwoKIApleHRlcm4g aW50IF9fcHRocmVhZF9zZXRzcGVjaWZpYyAgKHB0aHJlYWRfa2V5X3QgX19rZXksCgkJCQkgICAg ICAgX19jb25zdCB2b2lkICpfX3BvaW50ZXIpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHB0aHJl YWRfc2V0c3BlY2lmaWMgIChwdGhyZWFkX2tleV90IF9fa2V5LAoJCQkJICAgICBfX2NvbnN0IHZv aWQgKl9fcG9pbnRlcikgIHRocm93ICgpICA7CgogCmV4dGVybiB2b2lkICpfX3B0aHJlYWRfZ2V0 c3BlY2lmaWMgIChwdGhyZWFkX2tleV90IF9fa2V5KSAgdGhyb3cgKCkgIDsKZXh0ZXJuIHZvaWQg KnB0aHJlYWRfZ2V0c3BlY2lmaWMgIChwdGhyZWFkX2tleV90IF9fa2V5KSAgdGhyb3cgKCkgIDsK CgogCgogCgoKCmV4dGVybiBpbnQgX19wdGhyZWFkX29uY2UgIChwdGhyZWFkX29uY2VfdCAqX19v bmNlX2NvbnRyb2wsCgkJCQl2b2lkICgqX19pbml0X3JvdXRpbmUpICh2b2lkKSkgIHRocm93ICgp ICA7CmV4dGVybiBpbnQgcHRocmVhZF9vbmNlICAocHRocmVhZF9vbmNlX3QgKl9fb25jZV9jb250 cm9sLAoJCQkgICAgICB2b2lkICgqX19pbml0X3JvdXRpbmUpICh2b2lkKSkgIHRocm93ICgpICA7 CgoKIAoKIAoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHN0YXRlICAoaW50IF9fc3RhdGUs IGludCAqX19vbGRzdGF0ZSkgIHRocm93ICgpICA7CgogCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0 Y2FuY2VsdHlwZSAgKGludCBfX3R5cGUsIGludCAqX19vbGR0eXBlKSAgdGhyb3cgKCkgIDsKCiAK ZXh0ZXJuIGludCBwdGhyZWFkX2NhbmNlbCAgKHB0aHJlYWRfdCBfX3RocmVhZCkgIHRocm93ICgp ICA7CgogCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0Y2FuY2VsICAodm9pZCkgIHRocm93ICgp ICA7CgoKIAoKCgoKCgoKCgoKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoICAoc3Ry dWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKCQkJCQl2b2lkICgqX19yb3V0 aW5lKSAodm9pZCAqKSwKCQkJCQl2b2lkICpfX2FyZykgIHRocm93ICgpICA7CgogCgoKCgoKZXh0 ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9i dWZmZXIgKl9fYnVmZmVyLAoJCQkJICAgICAgIGludCBfX2V4ZWN1dGUpICB0aHJvdyAoKSAgOwoK IAoKCiMgNTE1ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCgoKIAojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL3NpZ3RocmVhZC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKIAoK ZXh0ZXJuIGludCBwdGhyZWFkX3NpZ21hc2sgIChpbnQgX19ob3csIF9fY29uc3QgX19zaWdzZXRf dCAqX19uZXdtYXNrLAoJCQkJIF9fc2lnc2V0X3QgKl9fb2xkbWFzaykgIHRocm93ICgpICA7Cgog CmV4dGVybiBpbnQgcHRocmVhZF9raWxsICAocHRocmVhZF90IF9fdGhyZWFkLCBpbnQgX19zaWdu bykgIHRocm93ICgpICA7CgoKIyA1MTggIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoKCgog CgogCgoKCgoKCgoKCgpleHRlcm4gaW50IF9fcHRocmVhZF9hdGZvcmsgICh2b2lkICgqX19wcmVw YXJlKSAodm9pZCksCgkJCQkgIHZvaWQgKCpfX3BhcmVudCkgKHZvaWQpLAoJCQkJICB2b2lkICgq X19jaGlsZCkgKHZvaWQpKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdGhyZWFkX2F0Zm9yayAg KHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwKCQkJCXZvaWQgKCpfX3BhcmVudCkgKHZvaWQpLAoJ CQkJdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgIHRocm93ICgpICA7CgogCgoKZXh0ZXJuIHZvaWQg cHRocmVhZF9raWxsX290aGVyX3RocmVhZHNfbnAgICh2b2lkKSAgdGhyb3cgKCkgIDsKCgogCmV4 dGVybiB2b2lkIF9fcHRocmVhZF9pbml0aWFsaXplICAodm9pZCkgIHRocm93ICgpICA7Cgp9IAoK CiMgNzEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4v Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMiAzCgoKCgoKCgoKIyA4NyAiL3Vzci9s aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl L2crKy0zL3N0bF9hbGxvYy5oIiAzCgojIDk3ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJh a2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMK CiMgMTE1ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4u Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKCgoKCgoKCgoKIAoKCgoKCiAKIAoK CgoKCgoKCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4KY2xhc3MgX19tYWxsb2NfYWxsb2NfdGVtcGxh dGUgewoKcHJpdmF0ZToKCiAgc3RhdGljIHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6ZV90KTsKICBz dGF0aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCosIHNpemVfdCk7CgoKICBzdGF0aWMgdm9p ZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKTsKCgpwdWJsaWM6CgogIHN0YXRpYyB2 b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9j KF9fbik7CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fbWFsbG9jKF9f bik7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZv aWQqIF9fcCwgc2l6ZV90ICApCiAgewogICAgZnJlZShfX3ApOwogIH0KCiAgc3RhdGljIHZvaWQq IHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgICwgc2l6ZV90IF9fbmV3X3N6KQogIHsKICAg IHZvaWQqIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgIGlmICgwID09IF9f cmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9yZWFsbG9jKF9fcCwgX19uZXdfc3opOwogICAgcmV0 dXJuIF9fcmVzdWx0OwogIH0KCiAgc3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hhbmRsZXIo dm9pZCAoKl9fZikoKSkpKCkKICB7CiAgICB2b2lkICgqIF9fb2xkKSgpID0gX19tYWxsb2NfYWxs b2Nfb29tX2hhbmRsZXI7CiAgICBfX21hbGxvY19hbGxvY19vb21faGFuZGxlciA9IF9fZjsKICAg IHJldHVybihfX29sZCk7CiAgfQoKfTsKCiAKCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCAo KiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfX21hbGxvY19hbGxvY19vb21faGFu ZGxlcikoKSA9IDA7CgoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQqCl9fbWFsbG9jX2FsbG9j X3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9tYWxsb2Moc2l6ZV90IF9fbikKewogICAgdm9pZCAo KiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgdm9pZCogX19yZXN1bHQ7CgogICAgZm9yICg7 OykgewogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFu ZGxlcjsKICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7IHRocm93IGJhZF9h bGxvYygpIDsgfQogICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICBfX3Jl c3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgIGlmIChfX3Jlc3VsdCkgcmV0dXJuKF9fcmVzdWx0 KTsKICAgIH0KfQoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQqIF9fbWFsbG9jX2FsbG9jX3Rl bXBsYXRlPF9faW5zdD46Ol9TX29vbV9yZWFsbG9jKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKewog ICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgdm9pZCogX19yZXN1bHQ7Cgog ICAgZm9yICg7OykgewogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxv Y19vb21faGFuZGxlcjsKICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7IHRo cm93IGJhZF9hbGxvYygpIDsgfQogICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAg ICAgICBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX24pOwogICAgICAgIGlmIChfX3Jlc3VsdCkg cmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KfQoKdHlwZWRlZiBfX21hbGxvY19hbGxvY190ZW1wbGF0 ZTwwPiBtYWxsb2NfYWxsb2M7Cgp0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KY2xh c3Mgc2ltcGxlX2FsbG9jIHsKCnB1YmxpYzoKICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKHNpemVf dCBfX24pCiAgICAgIHsgcmV0dXJuIDAgPT0gX19uID8gMCA6IChfVHAqKSBfQWxsb2M6OmFsbG9j YXRlKF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKHZvaWQp CiAgICAgIHsgcmV0dXJuIChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKHNpemVvZiAoX1RwKSk7IH0K ICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICAgIHsg aWYgKDAgIT0gX19uKSBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YgKF9UcCkp OyB9CiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wKQogICAgICB7IF9BbGxvYzo6 ZGVhbGxvY2F0ZShfX3AsIHNpemVvZiAoX1RwKSk7IH0KfTsKCiAKIAogCiAKIAp0ZW1wbGF0ZSA8 Y2xhc3MgX0FsbG9jPgpjbGFzcyBkZWJ1Z19hbGxvYyB7Cgpwcml2YXRlOgoKICBlbnVtIHtfU19l eHRyYSA9IDh9OyAgIAogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg ICAgICAgICAKCnB1YmxpYzoKCiAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAg ewogICAgY2hhciogX19yZXN1bHQgPSAoY2hhciopX0FsbG9jOjphbGxvY2F0ZShfX24gKyBfU19l eHRyYSk7CiAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX247CiAgICByZXR1cm4gX19yZXN1bHQg KyBfU19leHRyYTsKICB9CgogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXpl X3QgX19uKQogIHsKICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIF9TX2V4dHJhOwog ICAgKCh2b2lkKSAoKCAqKHNpemVfdCopX19yZWFsX3AgPT0gX19uICkgPyAwIDoJKF9fYXNzZXJ0 X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsX3AgPT0gX19uIiAsCSIvdXNyL2xpYi9nY2MtbGliL2k1 ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2Fs bG9jLmgiLCAyNjMsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CiAgICBfQWxsb2M6OmRl YWxsb2NhdGUoX19yZWFsX3AsIF9fbiArIF9TX2V4dHJhKTsKICB9CgogIHN0YXRpYyB2b2lkKiBy ZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opCiAg ewogICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gX1NfZXh0cmE7CiAgICAoKHZvaWQp ICgoICooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeiApID8gMCA6CShfX2Fzc2VydF9mYWls ICgiKihzaXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6IiAsCSIvdXNyL2xpYi9nY2MtbGliL2k1 ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2Fs bG9jLmgiLCAyNzAsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CiAgICBjaGFyKiBfX3Jl c3VsdCA9IChjaGFyKikKICAgICAgX0FsbG9jOjpyZWFsbG9jYXRlKF9fcmVhbF9wLCBfX29sZF9z eiArIF9TX2V4dHJhLCBfX25ld19zeiArIF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3Vs dCA9IF9fbmV3X3N6OwogICAgcmV0dXJuIF9fcmVzdWx0ICsgX1NfZXh0cmE7CiAgfQoKfTsKCgoK CgoKCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAogCiAKIAogCiAKIAogCiAKCgoK CgoKCnRlbXBsYXRlIDxib29sIHRocmVhZHMsIGludCBpbnN0PgpjbGFzcyBfX2RlZmF1bHRfYWxs b2NfdGVtcGxhdGUgewoKcHJpdmF0ZToKICAgCiAgIAoKICAgIGVudW0ge19BTElHTiA9IDh9Owog ICAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgICBlbnVtIHtfTkZSRUVMSVNUUyA9IF9NQVhf QllURVMvX0FMSUdOfTsKCiAgc3RhdGljIHNpemVfdAogIF9TX3JvdW5kX3VwKHNpemVfdCBfX2J5 dGVzKQogICAgeyByZXR1cm4gKCgoX19ieXRlcykgKyBfQUxJR04tMSkgJiB+KF9BTElHTiAtIDEp KTsgfQoKcHJpdmF0ZSA6CiAgdW5pb24gX09iaiB7CiAgICAgICAgdW5pb24gX09iaiogX01fZnJl ZV9saXN0X2xpbms7CiAgICAgICAgY2hhciBfTV9jbGllbnRfZGF0YVsxXTsgICAgIAogIH07CnBy aXZhdGU6CgoKCgogICAgc3RhdGljIF9PYmoqIHZvbGF0aWxlICBfU19mcmVlX2xpc3RbX05GUkVF TElTVFNdOwoKICBzdGF0aWMgIHNpemVfdCBfU19mcmVlbGlzdF9pbmRleChzaXplX3QgX19ieXRl cykgewogICAgICAgIHJldHVybiAoKChfX2J5dGVzKSArIF9BTElHTi0xKS9fQUxJR04gLSAxKTsK ICB9CgogICAKICBzdGF0aWMgdm9pZCogX1NfcmVmaWxsKHNpemVfdCBfX24pOwogICAKICAgCiAg c3RhdGljIGNoYXIqIF9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jqcyk7 CgogICAKICBzdGF0aWMgY2hhciogX1Nfc3RhcnRfZnJlZTsKICBzdGF0aWMgY2hhciogX1NfZW5k X2ZyZWU7CiAgc3RhdGljIHNpemVfdCBfU19oZWFwX3NpemU7CgoKCgoKCgoKICAgIHN0YXRpYyBw dGhyZWFkX211dGV4X3QgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jazsKCgoKCgoKIyAzODkgIi91c3Iv bGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk ZS9nKystMy9zdGxfYWxsb2MuaCIgMwoKCiAgICBjbGFzcyBfTG9jayB7CiAgICAgICAgcHVibGlj OgogICAgICAgICAgICBfTG9jaygpIHsgaWYgKHRocmVhZHMpIHB0aHJlYWRfbXV0ZXhfbG9jaygm X1Nfbm9kZV9hbGxvY2F0b3JfbG9jaykgOyB9CiAgICAgICAgICAgIH5fTG9jaygpIHsgaWYgKHRo cmVhZHMpIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfU19ub2RlX2FsbG9jYXRvcl9sb2NrKSA7IH0K ICAgIH07CiAgICBmcmllbmQgY2xhc3MgX0xvY2s7CgpwdWJsaWM6CgogICAKICBzdGF0aWMgdm9p ZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAgICBfT2JqKiB2b2xhdGlsZSAqIF9fbXlfZnJl ZV9saXN0OwogICAgX09iaiogICBfX3Jlc3VsdDsKCiAgICBpZiAoX19uID4gKHNpemVfdCkgX01B WF9CWVRFUykgewogICAgICAgIHJldHVybihtYWxsb2NfYWxsb2M6OmFsbG9jYXRlKF9fbikpOwog ICAgfQogICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRl eChfX24pOwogICAgIAogICAgIAogICAgIAoKICAgICAgICAgCiAgICAgICAgX0xvY2sgX19sb2Nr X2luc3RhbmNlOwoKICAgIF9fcmVzdWx0ID0gKl9fbXlfZnJlZV9saXN0OwogICAgaWYgKF9fcmVz dWx0ID09IDApIHsKICAgICAgICB2b2lkKiBfX3IgPSBfU19yZWZpbGwoX1Nfcm91bmRfdXAoX19u KSk7CiAgICAgICAgcmV0dXJuIF9fcjsKICAgIH0KICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcmVz dWx0IC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgcmV0dXJuIChfX3Jlc3VsdCk7CiAgfTsKCiAg IAogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogIHsKICAg IF9PYmoqIF9fcSA9IChfT2JqKilfX3A7CiAgICBfT2JqKiB2b2xhdGlsZSAqIF9fbXlfZnJlZV9s aXN0OwoKICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgbWFsbG9j X2FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBf X215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAg ICAgCgogICAgICAgICAKICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7CgogICAgX19xIC0+ IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgKl9fbXlfZnJlZV9saXN0 ID0gX19xOwogICAgIAogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBz aXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeik7Cgp9IDsKCnR5cGVkZWYgX19kZWZhdWx0 X2FsbG9jX3RlbXBsYXRlPCB0cnVlICwgMD4gYWxsb2M7CnR5cGVkZWYgX19kZWZhdWx0X2FsbG9j X3RlbXBsYXRlPGZhbHNlLCAwPiBzaW5nbGVfY2xpZW50X2FsbG9jOwoKCgogCiAKIAogCnRlbXBs YXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hhcioKX19kZWZhdWx0X2FsbG9jX3Rl bXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50JiBfX25vYmpzKQp7CiAgICBjaGFyKiBfX3Jlc3VsdDsKICAgIHNpemVfdCBfX3RvdGFs X2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgIHNpemVfdCBfX2J5dGVzX2xlZnQgPSBfU19l bmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7CgogICAgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFs X2J5dGVzKSB7CiAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0 YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAg fSBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKSB7CiAgICAgICAgX19ub2JqcyA9IChp bnQpKF9fYnl0ZXNfbGVmdC9fX3NpemUpOwogICAgICAgIF9fdG90YWxfYnl0ZXMgPSBfX3NpemUg KiBfX25vYmpzOwogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICBfU19z dGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAg IH0gZWxzZSB7CiAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0ID0KCSAgMiAqIF9fdG90YWxf Ynl0ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3NpemUgPj4gNCk7CiAgICAgICAgIAogICAgICAg IGlmIChfX2J5dGVzX2xlZnQgPiAwKSB7CiAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxlICogX19t eV9mcmVlX2xpc3QgPQogICAgICAgICAgICAgICAgICAgICAgICBfU19mcmVlX2xpc3QgKyBfU19m cmVlbGlzdF9pbmRleChfX2J5dGVzX2xlZnQpOwoKICAgICAgICAgICAgKChfT2JqKilfU19zdGFy dF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAg ICAgKl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgfQogICAg ICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jKF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAg ICBpZiAoMCA9PSBfU19zdGFydF9mcmVlKSB7CiAgICAgICAgICAgIHNpemVfdCBfX2k7CiAgICAg ICAgICAgIF9PYmoqIHZvbGF0aWxlICogX19teV9mcmVlX2xpc3Q7CgkgICAgX09iaiogX19wOwog ICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICBmb3Ig KF9faSA9IF9fc2l6ZTsgX19pIDw9IF9NQVhfQllURVM7IF9faSArPSBfQUxJR04pIHsKICAgICAg ICAgICAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5k ZXgoX19pKTsKICAgICAgICAgICAgICAgIF9fcCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAg ICAgICAgIGlmICgwICE9IF9fcCkgewogICAgICAgICAgICAgICAgICAgICpfX215X2ZyZWVfbGlz dCA9IF9fcCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICAgICAgICAgICAgICBfU19zdGFy dF9mcmVlID0gKGNoYXIqKV9fcDsKICAgICAgICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IF9T X3N0YXJ0X2ZyZWUgKyBfX2k7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuKF9TX2NodW5rX2Fs bG9jKF9fc2l6ZSwgX19ub2JqcykpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg ICAgICAgICAgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCSAgICBfU19lbmRfZnJl ZSA9IDA7CSAKICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKiltYWxsb2NfYWxsb2M6 OmFsbG9jYXRlKF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAg ICAgICAgICAgICAKICAgICAgICB9CiAgICAgICAgX1NfaGVhcF9zaXplICs9IF9fYnl0ZXNfdG9f Z2V0OwogICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9fYnl0ZXNfdG9fZ2V0 OwogICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpKTsKICAgIH0K fQoKCiAKIAogCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kdm9pZCoKX19k ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxsKHNpemVf dCBfX24pCnsKICAgIGludCBfX25vYmpzID0gMjA7CiAgICBjaGFyKiBfX2NodW5rID0gX1NfY2h1 bmtfYWxsb2MoX19uLCBfX25vYmpzKTsKICAgIF9PYmoqIHZvbGF0aWxlICogX19teV9mcmVlX2xp c3Q7CiAgICBfT2JqKiBfX3Jlc3VsdDsKICAgIF9PYmoqIF9fY3VycmVudF9vYmo7CiAgICBfT2Jq KiBfX25leHRfb2JqOwogICAgaW50IF9faTsKCiAgICBpZiAoMSA9PSBfX25vYmpzKSByZXR1cm4o X19jaHVuayk7CiAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0 X2luZGV4KF9fbik7CgogICAgIAogICAgICBfX3Jlc3VsdCA9IChfT2JqKilfX2NodW5rOwogICAg ICAqX19teV9mcmVlX2xpc3QgPSBfX25leHRfb2JqID0gKF9PYmoqKShfX2NodW5rICsgX19uKTsK ICAgICAgZm9yIChfX2kgPSAxOyA7IF9faSsrKSB7CiAgICAgICAgX19jdXJyZW50X29iaiA9IF9f bmV4dF9vYmo7CiAgICAgICAgX19uZXh0X29iaiA9IChfT2JqKikoKGNoYXIqKV9fbmV4dF9vYmog KyBfX24pOwogICAgICAgIGlmIChfX25vYmpzIC0gMSA9PSBfX2kpIHsKICAgICAgICAgICAgX19j dXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IDA7CiAgICAgICAgICAgIGJyZWFrOwog ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0 X2xpbmsgPSBfX25leHRfb2JqOwogICAgICAgIH0KICAgICAgfQogICAgcmV0dXJuKF9fcmVzdWx0 KTsKfQoKdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CnZvaWQqCl9fZGVmYXVsdF9h bGxvY190ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6cmVhbGxvY2F0ZSh2b2lkKiBfX3AsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19v bGRfc3osCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3QgX19uZXdfc3opCnsKICAgIHZvaWQqIF9fcmVzdWx0OwogICAgc2l6ZV90IF9fY29w eV9zejsKCiAgICBpZiAoX19vbGRfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTICYmIF9fbmV3X3N6 ID4gKHNpemVfdCkgX01BWF9CWVRFUykgewogICAgICAgIHJldHVybihyZWFsbG9jKF9fcCwgX19u ZXdfc3opKTsKICAgIH0KICAgIGlmIChfU19yb3VuZF91cChfX29sZF9zeikgPT0gX1Nfcm91bmRf dXAoX19uZXdfc3opKSByZXR1cm4oX19wKTsKICAgIF9fcmVzdWx0ID0gYWxsb2NhdGUoX19uZXdf c3opOwogICAgX19jb3B5X3N6ID0gX19uZXdfc3ogPiBfX29sZF9zej8gX19vbGRfc3ogOiBfX25l d19zejsKICAgIG1lbWNweShfX3Jlc3VsdCwgX19wLCBfX2NvcHlfc3opOwogICAgZGVhbGxvY2F0 ZShfX3AsIF9fb2xkX3N6KTsKICAgIHJldHVybihfX3Jlc3VsdCk7Cn0KCgogICAgdGVtcGxhdGUg PGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgcHRocmVhZF9tdXRleF90CiAgICBfX2Rl ZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19ub2RlX2FsbG9jYXRv cl9sb2NrCiAgICAgICAgPSB7MCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9GQVNUX05QLCB7MCwgMH19 IDsKCgoKCgoKCgoKIyA2MDIgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8y Ljk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwoKCiMgNjg5ICIv dXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2lu Y2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKCgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGlu dCBfX2luc3Q+CmNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5z dD46Ol9TX3N0YXJ0X2ZyZWUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19p bnN0PgpjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+Ojpf U19lbmRfZnJlZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnNp emVfdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19oZWFw X3NpemUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpfX2RlZmF1 bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfT2JqKiB2b2xhdGlsZSAKX19k ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA6Ol9TX2ZyZWVfbGlzdFsK ICAgIF9ORlJFRUxJU1RTCl0gPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg MCwgMCwgMCwgMCwgfTsKIAogCiAKCgoKCgoKCgoKCiAKIAogCiAKIAogCiAKCgoKdGVtcGxhdGUg PGNsYXNzIF9UcD4KY2xhc3MgYWxsb2NhdG9yIHsKICB0eXBlZGVmIGFsbG9jIF9BbGxvYzsgICAg ICAgICAgIApwdWJsaWM6CiAgdHlwZWRlZiBzaXplX3QgICAgIHNpemVfdHlwZTsKICB0eXBlZGVm IHB0cmRpZmZfdCAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICBwb2ludGVy OwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiAgICAg ICByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBl ZGVmIF9UcCAgICAgICAgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVj dCByZWJpbmQgewogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKCiAgYWxs b2NhdG9yKCkgdGhyb3coKSAge30KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3co KSAge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxf VHAxPiYpIHRocm93KCkgIHt9CiAgfmFsbG9jYXRvcigpIHRocm93KCkgIHt9CgogIHBvaW50ZXIg YWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9p bnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0K CiAgIAogICAKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkg ewogICAgcmV0dXJuIF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0 ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgICAgICAgICAgICAgOiAwOwogIH0KCiAgIAog IHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX0FsbG9j OjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhf c2l6ZSgpIGNvbnN0IHRocm93KCkgCiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9U cCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsg bmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3At Pn5fVHAoKTsgfQp9OwoKdGVtcGxhdGU8PgpjbGFzcyBhbGxvY2F0b3I8dm9pZD4gewogIHR5cGVk ZWYgc2l6ZV90ICAgICAgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICAgZGlmZmVyZW5j ZV90eXBlOwogIHR5cGVkZWYgdm9pZCogICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZv aWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAgICB2YWx1ZV90eXBlOwoKICB0 ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFsbG9jYXRv cjxfVHAxPiBvdGhlcjsKICB9Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4K aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9j YXRvcjxfVDI+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFz cyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25z dCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCiAKIAogCiAKIAogCgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfX2FsbG9jYXRvciB7CiAgX0Fs bG9jIF9fdW5kZXJseWluZ19hbGxvYzsKCiAgdHlwZWRlZiBzaXplX3QgICAgc2l6ZV90eXBlOwog IHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAg cG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9U cCYgICAgICAgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7 CiAgdHlwZWRlZiBfVHAgICAgICAgIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAx PiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBv dGhlcjsKICB9OwoKICBfX2FsbG9jYXRvcigpIHRocm93KCkgIHt9CiAgX19hbGxvY2F0b3IoY29u c3QgX19hbGxvY2F0b3ImIF9fYSkgdGhyb3coKSAKICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9f YS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+CiAgX19hbGxv Y2F0b3IoY29uc3QgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiYgX19hKSB0aHJvdygpIAogICAg OiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB+X19hbGxv Y2F0b3IoKSB0aHJvdygpICB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29u c3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVu Y2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgogICAKICBfVHAqIGFsbG9jYXRlKHNpemVf dHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAg PyBzdGF0aWNfY2FzdDxfVHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6 ZW9mKF9UcCkpKQogICAgICAgIDogMDsKICB9CgogICAKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRl ciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRl KF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0 IHRocm93KCkgCiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9p ZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1Rw KF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9 OwoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xhc3MgX19hbGxvY2F0b3I8dm9pZCwgX0FsbG9j PiB7CiAgdHlwZWRlZiBzaXplX3QgICAgICBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3Qg ICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkKiAgICAgICBwb2ludGVyOwogIHR5cGVk ZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgIHZhbHVl X3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVk ZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9Owp9OwoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fYWxs b2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf X2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlp bmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19hbGxvY2F0 b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxs b2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19h bGxvYyAhPSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsKfQoKCiAKIAogCgp0ZW1wbGF0ZSA8aW50 IGluc3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxh dGU8aW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3Rl bXBsYXRlPGluc3Q+JikKewogIHJldHVybiB0cnVlOwp9CgoKdGVtcGxhdGUgPGludCBfX2luc3Q+ CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19p bnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxh dGU8X19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCgoKdGVtcGxhdGUgPGJvb2wgX190aHJl YWRzLCBpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fZGVmYXVsdF9h bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mKQp7CiAg cmV0dXJuIHRydWU7Cn0KCgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+Cmlu bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy ZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2Fs bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCgoK dGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBkZWJ1 Z19hbGxvYzxfQWxsb2M+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1Z19hbGxv YzxfQWxsb2M+JikgewogIHJldHVybiB0cnVlOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4K aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JiwKICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiBm YWxzZTsKfQoKCiAKIAogCiAKIAogCgogCiAKIAogCiAKIAoKIAogCiAKIAogCiAKIAogCiAKIAog CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3QgX0FsbG9j X3RyYWl0cwp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7CiAg dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjogICByZWJpbmQ8X1RwPjo6b3RoZXIKICAgICAg ICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j YXRvcj4KY29uc3QgYm9vbCBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9TX2luc3Rh bmNlbGVzczsKCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBfQWxs b2NfdHJhaXRzPF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9T X2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBhbGxvYz4g X0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0b3JfdHlwZTsKfTsK CiAKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRz PF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3Qg Ym9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwg X19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYg X19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2Nh dG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMsIGludCBf X2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl PF9fdGhyZWFkcywgX19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxl c3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3Rl bXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0eXBl ZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywg X19pbnN0PiA+CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgZGVidWdfYWxsb2M8 X0FsbG9jPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwog IHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190 eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxs b2NhdG9yX3R5cGU7Cn07CgogCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGlu dCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAgICAgICAgICAg X19hbGxvY2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+ID4Kewog IHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1w bGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5 cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9f aW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf VHAxLCBib29sIF9fdGhyLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAg ICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLCBfX2luc3Q+ID4g Pgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVm IHNpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocixfX2luc3Q+ ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2Rl ZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBhbGxvY2F0b3Jf dHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBjbGFzcyBfQWxsb2M+ CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1RwMSwgZGVidWdfYWxsb2M8 X0FsbG9jPiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7 CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9j X3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBh bGxvY2F0b3JfdHlwZTsKfTsKCgoKCgoKCgogCgoKCgoKIAogCiAKIyAyMSAiL3Vzci9saWIvZ2Nj LWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z L2FsbG9jLmgiIDIgMwoKCgojIDQwICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGlu dXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxsb2MuaCIgMwoKCgoKIAogCiAK IyAzOSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8u Li8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCgpleHRlcm4gIkMrKyIgewpj bGFzcyBpc3RyZWFtOyBjbGFzcyBvc3RyZWFtOwoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYt bWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaXRlcmF0b3Ii IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGli L2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rs X3JlbG9wcy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9UcCYgX194LCBj b25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg X195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5l IGJvb2wgb3BlcmF0b3I8PShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1 cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVy YXRvcj49KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feCA8 IF9feSk7Cn0KCiAKCgoKIAogCiAKIyAzMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtl LWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2l0ZXJhdG9yIiAyIDMKCiMg MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0 ZGRlZi5oIiAxIDMKIyAzNDIgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8y Ljk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKIyAzMiAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1h bmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2l0ZXJhdG9yIiAy IDMKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8u Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4 Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1i dWYuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoK CiAgIAoKCgpleHRlcm4gIkMiIHsKIyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAzCiAKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgojIDEgIi91c3IvbGli L2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRhcmcuaCIgMSAz CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCiAKCgoKCgoKdHlwZWRlZiB2b2lkICpfX2dudWNfdmFfbGlzdDsKCgoKIAoKIyAx MjIgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9z dGRhcmcuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjA5ICIvdXNyL2xpYi9nY2MtbGliL2k1 ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkYXJnLmgiIDMKCgoKCiMgNDggIi91 c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKCgoKCgoKCiMgNjcgIi91c3IvaW5jbHVkZS9saWJpby5o IiAzCgoKIAoKCgoKCgoKCgoKCgoKCgoKCiMgOTggIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCgoK CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgpz dHJ1Y3QgX0lPX2p1bXBfdDsgIHN0cnVjdCBfSU9fRklMRTsKCiAKCgoKCgoKCnR5cGVkZWYgdm9p ZCBfSU9fbG9ja190OwoKCgogCgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJr ZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CiAgIAoKICAgCiAgaW50IF9wb3M7 CiMgMTg2ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwoKfTsKCnN0cnVjdCBfSU9fRklMRSB7CiAg aW50IF9mbGFnczsJCSAKCgogICAKICAgCiAgY2hhciogX0lPX3JlYWRfcHRyOwkgCiAgY2hhciog X0lPX3JlYWRfZW5kOwkgCiAgY2hhciogX0lPX3JlYWRfYmFzZTsJIAogIGNoYXIqIF9JT193cml0 ZV9iYXNlOwkgCiAgY2hhciogX0lPX3dyaXRlX3B0cjsJIAogIGNoYXIqIF9JT193cml0ZV9lbmQ7 CSAKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CSAKICBjaGFyKiBfSU9fYnVmX2VuZDsJIAogICAKICBj aGFyICpfSU9fc2F2ZV9iYXNlOyAgCiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOyAgIAogIGNoYXIg Kl9JT19zYXZlX2VuZDsgIAoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVj dCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKICBpbnQgX2Jsa3NpemU7CiAgX19v ZmZfdCAgIF9vbGRfb2Zmc2V0OyAgCgoKICAgCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47 CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgogICAK CiAgX0lPX2xvY2tfdCAqX2xvY2s7CgoKCgoKCgoKICBfX29mZjY0X3QgICBfb2Zmc2V0OwogICAK ICBpbnQgX3VudXNlZDJbMTZdOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKZXh0ZXJu IHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19G SUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lP XzJfMV9zdGRlcnJfOwoKCgoKCgoKCgoKCiAKCiAKCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fcmVh ZF9mbiAgKHZvaWQgKiAgX19jb29raWUsIGNoYXIgKl9fYnVmLAoJCQkJICAgICAgIHNpemVfdCBf X25ieXRlcykgIDsKCiAKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICAodm9p ZCAqICBfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKCQkJCSAgICAgIHNpemVfdCBfX24p ICA7CgogCgoKCgoKdHlwZWRlZiBpbnQgX19pb19zZWVrX2ZuICAodm9pZCAqICBfX2Nvb2tpZSwg X19vZmZfdCAgIF9fcG9zLCBpbnQgX193KSAgOwoKIAp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2Zu ICAodm9pZCAqICBfX2Nvb2tpZSkgIDsKCgojIDMxMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMK CgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgX191bmRlcmZsb3cgIChfSU9fRklMRSAqKSAg dGhyb3cgKCkgIDsKZXh0ZXJuIGludCBfX3VmbG93ICAoX0lPX0ZJTEUgKikgIHRocm93ICgpICA7 CmV4dGVybiBpbnQgX19vdmVyZmxvdyAgKF9JT19GSUxFICosIGludCkgIHRocm93ICgpICA7CgoK CgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IF9JT19nZXRjICAoX0lPX0ZJTEUgKl9fZnApICB0aHJv dyAoKSAgOwpleHRlcm4gaW50IF9JT19wdXRjICAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApICB0 aHJvdyAoKSAgOwpleHRlcm4gaW50IF9JT19mZW9mICAoX0lPX0ZJTEUgKl9fZnApICB0aHJvdyAo KSAgOwpleHRlcm4gaW50IF9JT19mZXJyb3IgIChfSU9fRklMRSAqX19mcCkgIHRocm93ICgpICA7 CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgIChfSU9fRklMRSAqX19mcCkgIHRocm93ICgp ICA7CgogCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgIChfSU9fRklMRSAqKSAgdGhyb3cg KCkgIDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIHRocm93ICgp ICA7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAgKF9JT19GSUxFICopICB0aHJvdyAoKSAg OwoKCgoKCgoKCgoKCgpleHRlcm4gaW50IF9JT192ZnNjYW5mICAoX0lPX0ZJTEUgKiBfX3Jlc3Ry aWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwKCQkJICAgICBfX2dudWNfdmFfbGlzdCAsIGlu dCAqX19yZXN0cmljdCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmICAoX0lP X0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsCgkJCSAgICAgIF9fZ251 Y192YV9saXN0ICkgIHRocm93ICgpICA7CmV4dGVybiBfX3NzaXplX3QgICBfSU9fcGFkbiAgKF9J T19GSUxFICosIGludCwgX19zc2l6ZV90ICApICB0aHJvdyAoKSAgOwpleHRlcm4gc2l6ZV90ICAg X0lPX3NnZXRuICAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QgICkgIHRocm93ICgpICA7Cgpl eHRlcm4gX19vZmY2NF90ICAgX0lPX3NlZWtvZmYgIChfSU9fRklMRSAqLCBfX29mZjY0X3QgICwg aW50LCBpbnQpICB0aHJvdyAoKSAgOwpleHRlcm4gX19vZmY2NF90ICAgX0lPX3NlZWtwb3MgIChf SU9fRklMRSAqLCBfX29mZjY0X3QgICwgaW50KSAgdGhyb3cgKCkgIDsKCmV4dGVybiB2b2lkIF9J T19mcmVlX2JhY2t1cF9hcmVhICAoX0lPX0ZJTEUgKikgIHRocm93ICgpICA7CgoKfQoKCgojIDM2 ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4u L2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDIgMwoKfQogCgojIDEgIi91c3IvbGliL2djYy1s aWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiAKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCiAKCgoKCgoKCgoKCiAKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCnZvaWQgdmFfZW5kIChfX2du dWNfdmFfbGlzdCk7CQkgCgoKIAoKCgogCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgogCiAKCgoKCgoKCgoKCgoKCiMgMTc1ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJh a2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkYXJnLmgiIDMKCgogCgoKCgogCgogCgogCgp0eXBl ZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNDAg Ii91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4v aW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpl eHRlcm4gIkMrKyIgewpjbGFzcyBpc3RyZWFtOyAgCmNsYXNzIG9zdHJlYW07IGNsYXNzIHN0cmVh bWJ1ZjsKCiAKCgoKCnR5cGVkZWYgX19vZmY2NF90ICAgc3RyZWFtb2ZmOwp0eXBlZGVmIF9fb2Zm NjRfdCAgIHN0cmVhbXBvczsKCgoKCnR5cGVkZWYgX19zc2l6ZV90ICAgc3RyZWFtc2l6ZTsKCnR5 cGVkZWYgdW5zaWduZWQgbG9uZyBfX2ZtdGZsYWdzOwp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX19p b3N0YXRlOwoKc3RydWN0IF9pb3NfZmllbGRzCnsgIAogICAgc3RyZWFtYnVmICpfc3RyYnVmOwog ICAgb3N0cmVhbSogX3RpZTsKICAgIGludCBfd2lkdGg7CiAgICBfX2ZtdGZsYWdzIF9mbGFnczsK ICAgIHdjaGFyX3QgICBfZmlsbDsKICAgIF9faW9zdGF0ZSBfc3RhdGU7CiAgICBfX2lvc3RhdGUg X2V4Y2VwdGlvbnM7CiAgICBpbnQgX3ByZWNpc2lvbjsKCiAgICB2b2lkICpfYXJyYXlzOyAgCn07 CgoKCgoKCgoKCgoKCgoKCiMgMTI0ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGlu dXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKCgpjbGFz cyBpb3MgOiBwdWJsaWMgX2lvc19maWVsZHMgewogIGlvcyYgb3BlcmF0b3I9KGlvcyYpOyAgIAog IGlvcyAoY29uc3QgaW9zJik7ICAKICBwdWJsaWM6CiAgICB0eXBlZGVmIF9fZm10ZmxhZ3MgZm10 ZmxhZ3M7CiAgICB0eXBlZGVmIGludCBpb3N0YXRlOwogICAgdHlwZWRlZiBpbnQgb3Blbm1vZGU7 CiAgICB0eXBlZGVmIF9fc3NpemVfdCAgIHN0cmVhbXNpemU7CiAgICBlbnVtIGlvX3N0YXRlIHsK CWdvb2RiaXQgPSAwICwKCWVvZmJpdCA9IDEgLAoJZmFpbGJpdCA9IDIgLAoJYmFkYml0ID0gNCAg fTsKICAgIGVudW0gb3Blbl9tb2RlIHsKCWluID0gMSAsCglvdXQgPSAyICwKCWF0ZSA9IDQgLAoJ YXBwID0gOCAsCgl0cnVuYyA9IDE2ICwKCW5vY3JlYXRlID0gMzIgLAoJbm9yZXBsYWNlID0gNjQg LAoJYmluID0gMTI4ICwgIAoJYmluYXJ5ID0gMTI4ICB9OwogICAgZW51bSBzZWVrX2RpciB7IGJl ZywgY3VyLCBlbmR9OwogICAgdHlwZWRlZiBlbnVtIHNlZWtfZGlyIHNlZWtkaXI7CiAgICAgCiAg ICBlbnVtIHsgc2tpcHdzPSAwMSAsCgkgICBsZWZ0PSAwMiAsIHJpZ2h0PSAwNCAsIGludGVybmFs PSAwMTAgLAoJICAgZGVjPSAwMjAgLCBvY3Q9IDA0MCAsIGhleD0gMDEwMCAsCgkgICBzaG93YmFz ZT0gMDIwMCAsIHNob3dwb2ludD0gMDQwMCAsCgkgICB1cHBlcmNhc2U9IDAxMDAwICwgc2hvd3Bv cz0gMDIwMDAgLAoJICAgc2NpZW50aWZpYz0gMDQwMDAgLCBmaXhlZD0gMDEwMDAwICwKCSAgIHVu aXRidWY9IDAyMDAwMCAsIHN0ZGlvPSAwNDAwMDAgCgoKCgkgICB9OwogICAgZW51bSB7ICAKCWJh c2VmaWVsZD1kZWMrb2N0K2hleCwKCWZsb2F0ZmllbGQgPSBzY2llbnRpZmljK2ZpeGVkLAoJYWRq dXN0ZmllbGQgPSBsZWZ0K3JpZ2h0K2ludGVybmFsCiAgICB9OwoKIyAxNzcgIi91c3IvbGliL2dj Yy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst My9zdHJlYW1idWYuaCIgMwoKCiAgICBvc3RyZWFtKiB0aWUoKSBjb25zdCB7IHJldHVybiBfdGll OyB9CiAgICBvc3RyZWFtKiB0aWUob3N0cmVhbSogdmFsKSB7IG9zdHJlYW0qIHNhdmU9X3RpZTsg X3RpZT12YWw7IHJldHVybiBzYXZlOyB9CgogICAgIAogICAgd2NoYXJfdCAgIGZpbGwoKSBjb25z dCB7IHJldHVybiBfZmlsbDsgfQogICAgd2NoYXJfdCAgIGZpbGwod2NoYXJfdCAgIG5ld2YpCgl7 d2NoYXJfdCAgIG9sZGYgPSBfZmlsbDsgX2ZpbGwgPSBuZXdmOyByZXR1cm4gb2xkZjt9CiAgICBm bXRmbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIF9mbGFnczsgfQogICAgZm10ZmxhZ3MgZmxh Z3MoZm10ZmxhZ3MgbmV3X3ZhbCkgewoJZm10ZmxhZ3Mgb2xkX3ZhbCA9IF9mbGFnczsgX2ZsYWdz ID0gbmV3X3ZhbDsgcmV0dXJuIG9sZF92YWw7IH0KICAgIGludCBwcmVjaXNpb24oKSBjb25zdCB7 IHJldHVybiBfcHJlY2lzaW9uOyB9CiAgICBpbnQgcHJlY2lzaW9uKGludCBuZXdwKSB7Cgl1bnNp Z25lZCBzaG9ydCBvbGRwID0gX3ByZWNpc2lvbjsgX3ByZWNpc2lvbiA9ICh1bnNpZ25lZCBzaG9y dCluZXdwOwoJcmV0dXJuIG9sZHA7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFsKSB7 CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzIHw9IHZhbDsgcmV0dXJuIG9sZGJp dHM7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFsLCBmbXRmbGFncyBtYXNrKSB7Cglm bXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzID0gKF9mbGFncyAmIH5tYXNrKSB8ICh2 YWwgJiBtYXNrKTsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGZtdGZsYWdzIHVuc2V0ZihmbXRmbGFn cyBtYXNrKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzICY9IH5tYXNrOyBy ZXR1cm4gb2xkYml0czsgfQogICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gX3dpZHRoOyB9 CiAgICBpbnQgd2lkdGgoaW50IHZhbCkgeyBpbnQgc2F2ZSA9IF93aWR0aDsgX3dpZHRoID0gdmFs OyByZXR1cm4gc2F2ZTsgfQoKCgoKICAgIHZvaWQgX3Rocm93X2ZhaWx1cmUoKSBjb25zdCB7IH0K CiAgICB2b2lkIGNsZWFyKGlvc3RhdGUgc3RhdGUgPSAwKSB7Cglfc3RhdGUgPSBfc3RyYnVmID8g c3RhdGUgOiBzdGF0ZXxiYWRiaXQ7CglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19m YWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0KGlvc3RhdGUgZmxhZykgeyBfc3RhdGUgfD0gZmxhZzsK CWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAgdm9pZCBz ZXRzdGF0ZShpb3N0YXRlIGZsYWcpIHsgX3N0YXRlIHw9IGZsYWc7ICAKCWlmIChfc3RhdGUgJiBf ZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAgaW50IGdvb2QoKSBjb25zdCB7IHJl dHVybiBfc3RhdGUgPT0gMDsgfQogICAgaW50IGVvZigpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAm IGlvczo6ZW9mYml0OyB9CiAgICBpbnQgZmFpbCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIChp b3M6OmJhZGJpdHxpb3M6OmZhaWxiaXQpOyB9CiAgICBpbnQgYmFkKCkgY29uc3QgeyByZXR1cm4g X3N0YXRlICYgaW9zOjpiYWRiaXQ7IH0KICAgIGlvc3RhdGUgcmRzdGF0ZSgpIGNvbnN0IHsgcmV0 dXJuIF9zdGF0ZTsgfQogICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdCB7IHJldHVybiBmYWlsKCkg PyAodm9pZCopMCA6ICh2b2lkKikoLTEpOyB9CiAgICBpbnQgb3BlcmF0b3IhKCkgY29uc3QgeyBy ZXR1cm4gZmFpbCgpOyB9CiAgICBpb3N0YXRlIGV4Y2VwdGlvbnMoKSBjb25zdCB7IHJldHVybiBf ZXhjZXB0aW9uczsgfQogICAgdm9pZCBleGNlcHRpb25zKGlvc3RhdGUgZW5hYmxlKSB7CglfZXhj ZXB0aW9ucyA9IGVuYWJsZTsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1 cmUoKTsgfQoKICAgIHN0cmVhbWJ1ZiogcmRidWYoKSBjb25zdCB7IHJldHVybiBfc3RyYnVmOyB9 CiAgICBzdHJlYW1idWYqIHJkYnVmKHN0cmVhbWJ1ZiAqX3MpIHsKICAgICAgc3RyZWFtYnVmICpf b2xkID0gX3N0cmJ1ZjsgX3N0cmJ1ZiA9IF9zOyBjbGVhciAoKTsgcmV0dXJuIF9vbGQ7IH0KCiAg ICBzdGF0aWMgaW50IHN5bmNfd2l0aF9zdGRpbyhpbnQgb24pOwogICAgc3RhdGljIHZvaWQgc3lu Y193aXRoX3N0ZGlvKCkgeyBzeW5jX3dpdGhfc3RkaW8oMSk7IH0KICAgIHN0YXRpYyBmbXRmbGFn cyBiaXRhbGxvYygpOwogICAgc3RhdGljIGludCB4YWxsb2MoKTsKICAgIHZvaWQqJiBwd29yZChp bnQpOwogICAgdm9pZCogcHdvcmQoaW50KSBjb25zdDsKICAgIGxvbmcmIGl3b3JkKGludCk7CiAg ICBsb25nIGl3b3JkKGludCkgY29uc3Q7CgoKCgoKCgoKCiAgICAgCiAgICBjbGFzcyBJbml0IHsK ICAgIHB1YmxpYzoKICAgICAgSW5pdCAoKSB7IH0KICAgIH07CgogIHByb3RlY3RlZDoKICAgIGlu bGluZSBpb3Moc3RyZWFtYnVmKiBzYiA9IDAsIG9zdHJlYW0qIHRpZV90byA9IDApOwogICAgaW5s aW5lIHZpcnR1YWwgfmlvcygpOwogICAgaW5saW5lIHZvaWQgaW5pdChzdHJlYW1idWYqIHNiLCBv c3RyZWFtKiB0aWUgPSAwKTsKfTsKCgoKCnR5cGVkZWYgaW9zOjpzZWVrX2RpciBfc2Vla19kaXI7 CgoKIAogCiAKIAogCgogCiAKY2xhc3Mgc3RyZWFtbWFya2VyIDogcHJpdmF0ZSBfSU9fbWFya2Vy IHsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1idWY7CiAgICB2b2lkIHNldF9vZmZzZXQoaW50IG9m ZnNldCkgeyBfcG9zID0gb2Zmc2V0OyB9CiAgcHVibGljOgogICAgc3RyZWFtbWFya2VyKHN0cmVh bWJ1ZiAqc2IpOwogICAgfnN0cmVhbW1hcmtlcigpOwogICAgaW50IHNhdmluZygpIHsgcmV0dXJu ICAxOyB9CiAgICBpbnQgZGVsdGEoc3RyZWFtbWFya2VyJik7CiAgICBpbnQgZGVsdGEoKTsKfTsK CnN0cnVjdCBzdHJlYW1idWYgOiBwdWJsaWMgX0lPX0ZJTEUgeyAgCiAgICBmcmllbmQgY2xhc3Mg aW9zOwogICAgZnJpZW5kIGNsYXNzIGlzdHJlYW07CiAgICBmcmllbmQgY2xhc3Mgb3N0cmVhbTsK ICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1tYXJrZXI7CiAgICBjb25zdCB2b2lkIComX3Z0YWJsZSgp IHsgcmV0dXJuICooY29uc3Qgdm9pZCoqKSgoX0lPX0ZJTEUqKXRoaXMgKyAxKTsgfQogIHByb3Rl Y3RlZDoKICAgIHN0YXRpYyBzdHJlYW1idWYqIF9saXN0X2FsbDsgIAogICAgX0lPX0ZJTEUqJiB4 Y2hhaW4oKSB7IHJldHVybiBfY2hhaW47IH0KICAgIHZvaWQgX3VuX2xpbmsoKTsKICAgIHZvaWQg X2xpbmtfaW4oKTsKICAgIGNoYXIqIGdwdHIoKSBjb25zdAogICAgICB7IHJldHVybiBfZmxhZ3Mg ICYgMHgxMDAgID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX3B0cjsgfQogICAgY2hhciogcHB0 cigpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9wdHI7IH0KICAgIGNoYXIqIGVncHRyKCkgY29u c3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2VuZCA6IF9JT19y ZWFkX2VuZDsgfQogICAgY2hhciogZXBwdHIoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfZW5k OyB9CiAgICBjaGFyKiBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9iYXNlOyB9CiAg ICBjaGFyKiBlYmFjaygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAgJiAweDEwMCAgPyBf SU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfYmFzZTt9CiAgICBjaGFyKiBiYXNlKCkgY29uc3QgeyBy ZXR1cm4gX0lPX2J1Zl9iYXNlOyB9CiAgICBjaGFyKiBlYnVmKCkgY29uc3QgeyByZXR1cm4gX0lP X2J1Zl9lbmQ7IH0KICAgIGludCBibGVuKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9lbmQgLSBf SU9fYnVmX2Jhc2U7IH0KICAgIHZvaWQgeHB1dF9jaGFyKGNoYXIgYykgeyAqX0lPX3dyaXRlX3B0 cisrID0gYzsgfQogICAgaW50IHhmbGFncygpIHsgcmV0dXJuIF9mbGFncyA7IH0KICAgIGludCB4 ZmxhZ3MoaW50IGYpIHtpbnQgZmwgPSBfZmxhZ3MgOyBfZmxhZ3MgID0gZjsgcmV0dXJuIGZsO30K ICAgIHZvaWQgeHNldGZsYWdzKGludCBmKSB7IF9mbGFncyAgfD0gZjsgfQogICAgdm9pZCB4c2V0 ZmxhZ3MoaW50IGYsIGludCBtYXNrKQogICAgICB7IF9mbGFncyAgPSAoX2ZsYWdzICAmIH5tYXNr KSB8IChmICYgbWFzayk7IH0KICAgIHZvaWQgZ2J1bXAoaW50IG4pCiAgICAgIHsgX2ZsYWdzICAm IDB4MTAwICA/IChfSU9fc2F2ZV9iYXNlKz1uKTooX0lPX3JlYWRfcHRyKz1uKTt9CiAgICB2b2lk IHBidW1wKGludCBuKSB7IF9JT193cml0ZV9wdHIgKz0gbjsgfQogICAgdm9pZCBzZXRiKGNoYXIq IGIsIGNoYXIqIGViLCBpbnQgYT0wKTsKICAgIHZvaWQgc2V0cChjaGFyKiBwLCBjaGFyKiBlcCkK ICAgICAgeyBfSU9fd3JpdGVfYmFzZT1fSU9fd3JpdGVfcHRyPXA7IF9JT193cml0ZV9lbmQ9ZXA7 IH0KICAgIHZvaWQgc2V0ZyhjaGFyKiBlYiwgY2hhciogZywgY2hhciAqZWcpIHsKICAgICAgaWYg KF9mbGFncyAgJiAweDEwMCApIF9JT19mcmVlX2JhY2t1cF9hcmVhKHRoaXMpOyAKICAgICAgX0lP X3JlYWRfYmFzZSA9IGViOyBfSU9fcmVhZF9wdHIgPSBnOyBfSU9fcmVhZF9lbmQgPSBlZzsgfQog ICAgY2hhciAqc2hvcnRidWYoKSB7IHJldHVybiBfc2hvcnRidWY7IH0KCiAgICBpbnQgaW5fYmFj a3VwKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgxMDAgOyB9CiAgICAgCiAgICBjaGFyICpHYmFzZSgp IHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX2Jhc2U7IH0K ICAgICAKICAgIGNoYXIgKmVHcHRyKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fc2F2ZV9l bmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgICAKICAgIGNoYXIgKkJiYXNlKCkgeyByZXR1cm4gaW5f YmFja3VwKCkgPyBfSU9fcmVhZF9iYXNlIDogX0lPX3NhdmVfYmFzZTsgfQogICAgY2hhciAqQnB0 cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFzZTsgfQogICAgIAogICAgY2hhciAqZUJwdHIoKSB7 IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2VuZCA6IF9JT19zYXZlX2VuZDsgfQogICAg Y2hhciAqTmJhc2UoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlOyB9CiAgICBjaGFyICplTnB0cigp IHsgcmV0dXJuIF9JT19zYXZlX2VuZDsgfQogICAgaW50IGhhdmVfYmFja3VwKCkgeyByZXR1cm4g X0lPX3NhdmVfYmFzZSAhPSBfX251bGwgOyB9CiAgICBpbnQgaGF2ZV9tYXJrZXJzKCkgeyByZXR1 cm4gX21hcmtlcnMgIT0gX19udWxsIDsgfQogICAgdm9pZCBmcmVlX2JhY2t1cF9hcmVhKCk7CiAg ICB2b2lkIHVuc2F2ZV9tYXJrZXJzKCk7ICAKICAgIGludCBwdXRfbW9kZSgpIHsgcmV0dXJuIF9m bGFncyAmIDB4ODAwIDsgfQogICAgaW50IHN3aXRjaF90b19nZXRfbW9kZSgpOwogICAgCiAgICBz dHJlYW1idWYoaW50IGZsYWdzPTApOwogIHB1YmxpYzoKICAgIHN0YXRpYyBpbnQgZmx1c2hfYWxs KCk7CiAgICBzdGF0aWMgdm9pZCBmbHVzaF9hbGxfbGluZWJ1ZmZlcmVkKCk7ICAKICAgIHZpcnR1 YWwgfnN0cmVhbWJ1ZigpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMgPSAoLTEpICk7 ICAKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCB1Zmxvdygp OyAgCiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwoaW50IGMpOwogCiAgICB2aXJ0dWFsIHN0cmVh bXNpemUgeHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIHN0 cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIHN0cmVh bXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6 b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1v ZGUgPSBpb3M6OmlufGlvczo6b3V0KTsKCiAgICBzdHJlYW1wb3MgcHVic2Vla29mZihzdHJlYW1v ZmYgbywgX3NlZWtfZGlyIGQsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpCiAgICAgIHsgcmV0 dXJuIF9JT19zZWVrb2ZmICh0aGlzLCBvLCBkLCBtb2RlKTsgfQogICAgc3RyZWFtcG9zIHB1YnNl ZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KQogICAgICB7 IHJldHVybiBfSU9fc2Vla3BvcyAodGhpcywgcG9zLCBtb2RlKTsgfQogICAgc3RyZWFtcG9zIHNz ZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsK ICAgIHN0cmVhbXBvcyBzc2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58 aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1ZihjaGFyKiBwLCBpbnQgbGVu KTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICAgIHZpcnR1YWwgaW50IGRvYWxsb2NhdGUoKTsK CiAgICBpbnQgc2Vla21hcmsoc3RyZWFtbWFya2VyJiBtYXJrLCBpbnQgZGVsdGEgPSAwKTsKICAg IGludCBzcHV0YmFja2MoY2hhciBjKTsKICAgIGludCBzdW5nZXRjKCk7CiAgICBpbnQgdW5idWZm ZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDIgID8gMSA6IDA7IH0KICAgIGludCBsaW5lYnVmZmVy ZWQoKSB7IHJldHVybiBfZmxhZ3MgJiAweDIwMCAgPyAxIDogMDsgfQogICAgdm9pZCB1bmJ1ZmZl cmVkKGludCBpKQoJeyBpZiAoaSkgX2ZsYWdzIHw9IDIgOyBlbHNlIF9mbGFncyAmPSB+MiA7IH0K ICAgIHZvaWQgbGluZWJ1ZmZlcmVkKGludCBpKQoJeyBpZiAoaSkgX2ZsYWdzIHw9IDB4MjAwIDsg ZWxzZSBfZmxhZ3MgJj0gfjB4MjAwIDsgfQogICAgaW50IGFsbG9jYXRlKCkgeyAgCglpZiAoYmFz ZSgpIHx8IHVuYnVmZmVyZWQoKSkgcmV0dXJuIDA7CgllbHNlIHJldHVybiBkb2FsbG9jYXRlKCk7 IH0KICAgICAKICAgIHZvaWQgYWxsb2NidWYoKSB7IGlmIChiYXNlKCkgPT0gX19udWxsICkgZG9h bGxvY2J1ZigpOyB9CiAgICB2b2lkIGRvYWxsb2NidWYoKTsKICAgIGludCBpbl9hdmFpbCgpIHsg cmV0dXJuIF9JT19yZWFkX2VuZCAtIF9JT19yZWFkX3B0cjsgfQogICAgaW50IG91dF93YWl0aW5n KCkgeyByZXR1cm4gX0lPX3dyaXRlX3B0ciAtIF9JT193cml0ZV9iYXNlOyB9CiAgICBzdHJlYW1z aXplIHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4geHNwdXRuKHMs IG4pOyB9CiAgICBzdHJlYW1zaXplIHBhZG4oY2hhciBwYWQsIHN0cmVhbXNpemUgbikgeyByZXR1 cm4gX0lPX3BhZG4odGhpcywgcGFkLCBuKTsgfQogICAgc3RyZWFtc2l6ZSBzZ2V0bihjaGFyKiBz LCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19zZ2V0bih0aGlzLCBzLCBuKTsgfQogICAgaW50 IGlnbm9yZShpbnQpOwogICAgaW50IGdldF9jb2x1bW4oKTsKICAgIGludCBzZXRfY29sdW1uKGlu dCk7CiAgICBsb25nIHNnZXRsaW5lKGNoYXIqIGJ1Ziwgc2l6ZV90ICAgbiwgY2hhciBkZWxpbSwg aW50IHB1dGJhY2tfZGVsaW0pOwogICAgaW50IHNwdXRjKGludCBjKSB7IHJldHVybiBfSU9fcHV0 YyhjLCB0aGlzKTsgfQogICAgaW50IHNidW1wYygpIHsgcmV0dXJuIF9JT19nZXRjKHRoaXMpOyB9 CiAgICBpbnQgc2dldGMoKSB7IHJldHVybiAoKCAgdGhpcyAgKS0+X0lPX3JlYWRfcHRyID49ICgg IHRoaXMgICktPl9JT19yZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyAoICB0aGlzICApID09ICgtMSkg ID8gKC0xKSAgOiAqKHVuc2lnbmVkIGNoYXIgKikgKCAgdGhpcyAgKS0+X0lPX3JlYWRfcHRyKSAg OyB9CiAgICBpbnQgc25leHRjKCkgewoJaWYgKF9JT19yZWFkX3B0ciA+PSBfSU9fcmVhZF9lbmQg JiYgX191bmRlcmZsb3codGhpcykgPT0gKC0xKSApCgkgIHJldHVybiAoLTEpIDsKCWVsc2UgcmV0 dXJuIF9JT19yZWFkX3B0cisrLCBzZ2V0YygpOyB9CiAgICB2b2lkIHN0b3NzYygpIHsgaWYgKF9J T19yZWFkX3B0ciA8IF9JT19yZWFkX2VuZCkgX0lPX3JlYWRfcHRyKys7IH0KICAgIGludCB2c2Nh bihjaGFyIGNvbnN0ICpmbXQwLCBfX2dudWNfdmFfbGlzdCAgYXAsIGlvcyogc3RyZWFtID0gX19u dWxsICk7CiAgICBpbnQgc2NhbihjaGFyIGNvbnN0ICpmbXQwIC4uLik7CiAgICBpbnQgdmZvcm0o Y2hhciBjb25zdCAqZm10MCwgX19nbnVjX3ZhX2xpc3QgIGFwKTsKICAgIGludCBmb3JtKGNoYXIg Y29uc3QgKmZtdDAgLi4uKTsKCgoKCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3JlYWQoY2hh ciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c193cml0 ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2Vl ayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIGludCBzeXNfY2xvc2UoKTsKICAg IHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAoKICAgIHZpcnR1YWwgaW50IHNob3dtYW55 YygpOwogICAgdmlydHVhbCB2b2lkIGltYnVlKHZvaWQgKik7Cgp9OwoKIAogCgpjbGFzcyBmaWxl YnVmIDogcHVibGljIHN0cmVhbWJ1ZiB7CiAgcHJvdGVjdGVkOgogICAgdm9pZCBpbml0KCk7CiAg cHVibGljOgogICAgc3RhdGljIGNvbnN0IGludCBvcGVucHJvdDsgIAogICAgZmlsZWJ1ZigpOwog ICAgZmlsZWJ1ZihpbnQgZmQpOwogICAgZmlsZWJ1ZihpbnQgZmQsIGNoYXIqIHAsIGludCBsZW4p OwoKCgogICAgfmZpbGVidWYoKTsKICAgIGZpbGVidWYqIGF0dGFjaChpbnQgZmQpOwogICAgZmls ZWJ1Ziogb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSk7CiAgICBm aWxlYnVmKiBvcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpb3M6Om9wZW5tb2RlIG1vZGUsIGlu dCBwcm90ID0gMDY2NCk7CiAgICB2aXJ0dWFsIGludCB1bmRlcmZsb3coKTsKICAgIHZpcnR1YWwg aW50IG92ZXJmbG93KGludCBjID0gKC0xKSApOwogICAgaW50IGlzX29wZW4oKSBjb25zdCB7IHJl dHVybiBfZmlsZW5vID49IDA7IH0KICAgIGludCBmZCgpIGNvbnN0IHsgcmV0dXJuIGlzX29wZW4o KSA/IF9maWxlbm8gOiAoLTEpIDsgfQogICAgZmlsZWJ1ZiogY2xvc2UoKTsKICAgIHZpcnR1YWwg aW50IGRvYWxsb2NhdGUoKTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtvZmYoc3RyZWFtb2Zm LCBfc2Vla19kaXIsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJl YW1idWYqIHNldGJ1ZihjaGFyKiBwLCBpbnQgbGVuKTsKICAgIHN0cmVhbXNpemUgeHNwdXRuKGNv bnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICBzdHJlYW1zaXplIHhzZ2V0bihjaGFyKiBz LCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVhbCBpbnQgc3luYygpOwogIHByb3RlY3RlZDogIAog CiAgICBpbnQgaXNfcmVhZGluZygpIHsgcmV0dXJuIGViYWNrKCkgIT0gZWdwdHIoKTsgfQogICAg Y2hhciogY3VyX3B0cigpIHsgcmV0dXJuIGlzX3JlYWRpbmcoKSA/ICBncHRyKCkgOiBwcHRyKCk7 IH0KICAgICAKICAgIGNoYXIqIGZpbGVfcHRyKCkgeyByZXR1cm4gZUdwdHIoKTsgfQogICAgIAog ICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c19yZWFkKGNoYXIqIGJ1Ziwgc3RyZWFtc2l6ZSBzaXpl KTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHN5c19zZWVrKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsK ICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfd3JpdGUoY29uc3QgY2hhciosIHN0cmVhbXNpemUp OwogICAgdmlydHVhbCBpbnQgc3lzX3N0YXQodm9pZCopOyAgCiAgICB2aXJ0dWFsIGludCBzeXNf Y2xvc2UoKTsKCgoKCn07CgppbmxpbmUgdm9pZCBpb3M6OmluaXQoc3RyZWFtYnVmKiBzYiwgb3N0 cmVhbSogdGllX3RvKSB7CgkJX3N0YXRlID0gc2IgPyBpb3M6Omdvb2RiaXQgOiBpb3M6OmJhZGJp dDsgX2V4Y2VwdGlvbnM9MDsKCQlfc3RyYnVmPXNiOyBfdGllID0gdGllX3RvOyBfd2lkdGg9MDsg X2ZpbGw9JyAnOwoKCQlfZmxhZ3M9aW9zOjpza2lwd3N8aW9zOjpkZWM7CgoKCgkJX3ByZWNpc2lv bj02OyBfYXJyYXlzID0gMDsgfQoKaW5saW5lIGlvczo6aW9zKHN0cmVhbWJ1Ziogc2IsIG9zdHJl YW0qIHRpZV90bykgeyBpbml0KHNiLCB0aWVfdG8pOyB9CgppbmxpbmUgaW9zOjp+aW9zKCkgewoK CgogICAgIAogICAgIAogICAgb3BlcmF0b3IgZGVsZXRlW10gKF9hcnJheXMpOwp9Cn0gIAoKIyAz MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8u Li9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDIgMwoKCmV4dGVybiAiQysrIiB7CmNsYXNzIGlz dHJlYW07IGNsYXNzIG9zdHJlYW07CnR5cGVkZWYgaW9zJiAoKl9fbWFuaXApKGlvcyYpOwp0eXBl ZGVmIGlzdHJlYW0mICgqX19pbWFuaXApKGlzdHJlYW0mKTsKdHlwZWRlZiBvc3RyZWFtJiAoKl9f b21hbmlwKShvc3RyZWFtJik7CgpleHRlcm4gaXN0cmVhbSYgd3MoaXN0cmVhbSYgaW5zKTsKZXh0 ZXJuIG9zdHJlYW0mIGZsdXNoKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kbChv c3RyZWFtJiBvdXRzKTsKZXh0ZXJuIG9zdHJlYW0mIGVuZHMob3N0cmVhbSYgb3V0cyk7CgpjbGFz cyBvc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgaW9zCnsKICAgICAKICAgIHZvaWQgZG9fb3NmeCgp OwogIHB1YmxpYzoKICAgIG9zdHJlYW0oKSB7IH0KICAgIG9zdHJlYW0oc3RyZWFtYnVmKiBzYiwg b3N0cmVhbSogdGllZD0gX19udWxsICk7CiAgICBpbnQgb3BmeCgpIHsKCWlmICghZ29vZCgpKSBy ZXR1cm4gMDsKCWVsc2UgeyBpZiAoX3RpZSkgX3RpZS0+Zmx1c2goKTsgIDsgcmV0dXJuIDE7fSB9 CiAgICB2b2lkIG9zZngoKSB7ICA7CgkJICBpZiAoZmxhZ3MoKSAmIChpb3M6OnVuaXRidWZ8aW9z OjpzdGRpbykpCgkJICAgICAgZG9fb3NmeCgpOyB9CiAgICBvc3RyZWFtJiBmbHVzaCgpOwogICAg b3N0cmVhbSYgcHV0KGNoYXIgYykgeyBfc3RyYnVmLT5zcHV0YyhjKTsgcmV0dXJuICp0aGlzOyB9 CgoKCgoKICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IGNoYXIgKnMsIHN0cmVhbXNpemUgbik7CiAg ICBvc3RyZWFtJiB3cml0ZShjb25zdCB1bnNpZ25lZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pCiAg ICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiB3cml0 ZShjb25zdCBzaWduZWQgY2hhciAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0 ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVhbSYgd3JpdGUoY29uc3Qgdm9pZCAqcywg c3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQog ICAgb3N0cmVhbSYgc2Vla3Aoc3RyZWFtcG9zKTsKICAgIG9zdHJlYW0mIHNlZWtwKHN0cmVhbW9m ZiwgX3NlZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0ZWxscCgpOwogICAgb3N0cmVhbSYgZm9ybShj b25zdCBjaGFyICpmb3JtYXQgLi4uKTsKICAgIG9zdHJlYW0mIHZmb3JtKGNvbnN0IGNoYXIgKmZv cm1hdCwgX19nbnVjX3ZhX2xpc3QgIGFyZ3MpOwoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY2hh ciBjKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiAo KnRoaXMpIDw8IChjaGFyKWM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc2lnbmVkIGNoYXIg YykgeyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8 KGNvbnN0IGNoYXIgKnMpOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCB1bnNpZ25lZCBj aGFyICpzKQoJeyByZXR1cm4gKCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsgfQogICAgb3N0cmVh bSYgb3BlcmF0b3I8PChjb25zdCBzaWduZWQgY2hhciAqcykKCXsgcmV0dXJuICgqdGhpcykgPDwg KGNvbnN0IGNoYXIqKXM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgdm9pZCAqcCk7 CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwo dW5zaWduZWQgaW50IG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIG4pOwogICAgb3N0 cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIG4pOwoKICAgIF9fZXh0ZW5zaW9uX18gb3N0 cmVhbSYgb3BlcmF0b3I8PChsb25nIGxvbmcgbik7CiAgICBfX2V4dGVuc2lvbl9fIG9zdHJlYW0m IG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIG4pOwoKICAgIG9zdHJlYW0mIG9wZXJhdG9y PDwoc2hvcnQgbikge3JldHVybiBvcGVyYXRvcjw8KChpbnQpbik7fQogICAgb3N0cmVhbSYgb3Bl cmF0b3I8PCh1bnNpZ25lZCBzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKHVuc2lnbmVkIGlu dCluKTt9CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChib29sIGIpIHsgcmV0dXJuIG9wZXJhdG9y PDwoKGludCliKTsgfQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoZG91YmxlIG4pOwogICAgb3N0 cmVhbSYgb3BlcmF0b3I8PChmbG9hdCBuKSB7IHJldHVybiBvcGVyYXRvcjw8KChkb3VibGUpbik7 IH0KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIG4pOwoKCgogICAgb3N0cmVh bSYgb3BlcmF0b3I8PChfX29tYW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0aGlzKTsgfQog ICAgb3N0cmVhbSYgb3BlcmF0b3I8PChfX21hbmlwIGZ1bmMpIHsoKmZ1bmMpKCp0aGlzKTsgcmV0 dXJuICp0aGlzO30KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc3RyZWFtYnVmKik7CgoKCn07Cgpj bGFzcyBpc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgaW9zCnsKICAgICAKcHJvdGVjdGVkOgogICAg c2l6ZV90ICAgX2djb3VudDsKCiAgICBpbnQgX3NraXBfd3MoKTsKICBwdWJsaWM6CiAgICBpc3Ry ZWFtKCk6IF9nY291bnQgKDApIHsgfQogICAgaXN0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFt KnRpZWQ9IF9fbnVsbCApOwogICAgaXN0cmVhbSYgZ2V0KGNoYXIqIHB0ciwgaW50IGxlbiwgY2hh ciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50 IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNoYXIqKXB0ciwgbGVuLCBk ZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdldChjaGFyJiBjKTsKICAgIGlzdHJlYW0mIGdldCh1bnNp Z25lZCBjaGFyJiBjKSB7IHJldHVybiBnZXQoKGNoYXImKWMpOyB9CiAgICBpc3RyZWFtJiBnZXRs aW5lKGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYg Z2V0bGluZSh1bnNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJ eyByZXR1cm4gZ2V0bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYg Z2V0KHNpZ25lZCBjaGFyJiBjKSAgeyByZXR1cm4gZ2V0KChjaGFyJiljKTsgfQogICAgaXN0cmVh bSYgZ2V0KHNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyBy ZXR1cm4gZ2V0KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXRsaW5l KHNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4g Z2V0bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgcmVhZChjaGFy ICpwdHIsIHN0cmVhbXNpemUgbik7CiAgICBpc3RyZWFtJiByZWFkKHVuc2lnbmVkIGNoYXIgKnB0 ciwgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAg ICBpc3RyZWFtJiByZWFkKHNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyBy ZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZCh2b2lkICpwdHIs IHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAg aXN0cmVhbSYgZ2V0KHN0cmVhbWJ1ZiYgc2IsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJl YW0mIGdldHMoY2hhciAqKnMsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGludCBpcGZ4KGludCBu ZWVkID0gMCkgewoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9 CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUgJiYgKG5lZWQgPT0gMCB8fCByZGJ1ZigpLT5pbl9h dmFpbCgpIDwgbmVlZCkpIF90aWUtPmZsdXNoKCk7CgkgIGlmICghbmVlZCAmJiAoZmxhZ3MoKSAm IGlvczo6c2tpcHdzKSkgcmV0dXJuIF9za2lwX3dzKCk7CgkgIGVsc2UgcmV0dXJuIDE7Cgl9CiAg ICB9CiAgICBpbnQgaXBmeDAoKSB7ICAKCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQp OyByZXR1cm4gMDsgfQoJZWxzZSB7CgkgICA7CgkgIGlmIChfdGllKSBfdGllLT5mbHVzaCgpOwoJ ICBpZiAoZmxhZ3MoKSAmIGlvczo6c2tpcHdzKSByZXR1cm4gX3NraXBfd3MoKTsKCSAgZWxzZSBy ZXR1cm4gMTsKCX0KICAgIH0KICAgIGludCBpcGZ4MSgpIHsgIAoJaWYgKCFnb29kKCkpIHsgc2V0 KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUgJiYg cmRidWYoKS0+aW5fYXZhaWwoKSA9PSAwKSBfdGllLT5mbHVzaCgpOwoJICByZXR1cm4gMTsKCX0K ICAgIH0KICAgIHZvaWQgaXNmeCgpIHsgIDsgfQogICAgaW50IGdldCgpIHsgaWYgKCFpcGZ4MSgp KSByZXR1cm4gKC0xKSA7CgkJZWxzZSB7IGludCBjaCA9IF9zdHJidWYtPnNidW1wYygpOwoJCSAg ICAgICBpZiAoY2ggPT0gKC0xKSApIHNldChpb3M6OmVvZmJpdCk7CgkJICAgICAgIGlzZngoKTsK CQkgICAgICAgcmV0dXJuIGNoOwoJCSAgICAgfSB9CiAgICBpbnQgcGVlaygpOwogICAgc2l6ZV90 ICAgZ2NvdW50KCkgeyByZXR1cm4gX2djb3VudDsgfQogICAgaXN0cmVhbSYgaWdub3JlKGludCBu PTEsIGludCBkZWxpbSA9ICgtMSkgKTsKICAgIGludCBzeW5jICgpOwogICAgaXN0cmVhbSYgc2Vl a2coc3RyZWFtcG9zKTsKICAgIGlzdHJlYW0mIHNlZWtnKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsK ICAgIHN0cmVhbXBvcyB0ZWxsZygpOwogICAgaXN0cmVhbSYgcHV0YmFjayhjaGFyIGNoKSB7Cglp ZiAoZ29vZCgpICYmIF9zdHJidWYtPnNwdXRiYWNrYyhjaCkgPT0gKC0xKSApIGNsZWFyKGlvczo6 YmFkYml0KTsKCXJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiB1bmdldCgpIHsKCWlmIChnb29k KCkgJiYgX3N0cmJ1Zi0+c3VuZ2V0YygpID09ICgtMSkgKSBjbGVhcihpb3M6OmJhZGJpdCk7Cgly ZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgc2Nhbihjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsK ICAgIGlzdHJlYW0mIHZzY2FuKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgIGFy Z3MpOwoKCgoKCgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyKik7CiAgICBpc3RyZWFtJiBv cGVyYXRvcj4+KHVuc2lnbmVkIGNoYXIqIHApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXAp OyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyKnApIHsgcmV0dXJuIG9wZXJh dG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXImIGMpOwogICAg aXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9wZXJhdG9yPj4o KGNoYXImKWMpO30KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXImIGMpIHtyZXR1 cm4gb3BlcmF0b3I+PigoY2hhciYpYyk7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihpbnQmKTsK ICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyYpOwoKICAgIF9fZXh0ZW5zaW9uX18gaXN0cmVh bSYgb3BlcmF0b3I+Pihsb25nIGxvbmcmKTsKICAgIF9fZXh0ZW5zaW9uX18gaXN0cmVhbSYgb3Bl cmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmKTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNo b3J0Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYpOwogICAgaXN0cmVh bSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVu c2lnbmVkIHNob3J0Jik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihib29sJik7CgogICAgaXN0 cmVhbSYgb3BlcmF0b3I+PihmbG9hdCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihkb3VibGUm KTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyBkb3VibGUmKTsKICAgIGlzdHJlYW0mIG9w ZXJhdG9yPj4oIF9fbWFuaXAgZnVuYykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7fQog ICAgaXN0cmVhbSYgb3BlcmF0b3I+PihfX2ltYW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0 aGlzKTsgfQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzdHJlYW1idWYqKTsKfTsKCmNsYXNzIGlv c3RyZWFtIDogcHVibGljIGlzdHJlYW0sIHB1YmxpYyBvc3RyZWFtCnsKICBwdWJsaWM6CiAgICBp b3N0cmVhbSgpIHsgfQogICAgaW9zdHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSp0aWVkPSBf X251bGwgKTsKfTsKCmNsYXNzIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24gOiBwdWJsaWMgaXN0cmVh bSB7CnB1YmxpYzoKICBfSU9faXN0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oaXN0cmVhbSYp OwogIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShfSU9faXN0cmVhbV93aXRoYXNz aWduJiByaHMpCiAgICB7IHJldHVybiBvcGVyYXRvcj0gKHN0YXRpY19jYXN0PGlzdHJlYW0mPiAo cmhzKSk7IH0KfTsKCmNsYXNzIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24gOiBwdWJsaWMgb3N0cmVh bSB7CnB1YmxpYzoKICBfSU9fb3N0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0ob3N0cmVhbSYp OwogIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShfSU9fb3N0cmVhbV93aXRoYXNz aWduJiByaHMpCiAgICB7IHJldHVybiBvcGVyYXRvcj0gKHN0YXRpY19jYXN0PG9zdHJlYW0mPiAo cmhzKSk7IH0KfTsKCmV4dGVybiBfSU9faXN0cmVhbV93aXRoYXNzaWduIGNpbjsKIApleHRlcm4g X0lPX29zdHJlYW1fd2l0aGFzc2lnbiBjb3V0LCBjZXJyOwoKZXh0ZXJuIF9JT19vc3RyZWFtX3dp dGhhc3NpZ24gY2xvZwoKCgo7CgpleHRlcm4gaXN0cmVhbSYgbG9jayhpc3RyZWFtJiBpbnMpOwpl eHRlcm4gaXN0cmVhbSYgdW5sb2NrKGlzdHJlYW0mIGlucyk7CmV4dGVybiBvc3RyZWFtJiBsb2Nr KG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgdW5sb2NrKG9zdHJlYW0mIG91dHMpOwoK c3RydWN0IElvc3RyZWFtX2luaXQgeyB9IDsgICAKCmlubGluZSBpb3MmIGRlYyhpb3MmIGkpCnsg aS5zZXRmKGlvczo6ZGVjLCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9 CmlubGluZSBpb3MmIGhleChpb3MmIGkpCnsgaS5zZXRmKGlvczo6aGV4LCBpb3M6OmRlY3xpb3M6 OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9CmlubGluZSBpb3MmIG9jdChpb3MmIGkpCnsgaS5z ZXRmKGlvczo6b2N0LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9Cn0g IAoKCiMgMzYgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4v Li4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvciIgMiAzCgoKIyAxICIvdXNyL2xpYi9nY2Mt bGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv c3RsX2l0ZXJhdG9yLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAK CnN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFn IHt9OwpzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3Jf dGFnIHt9OwpzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9yd2Fy ZF9pdGVyYXRvcl90YWcge307CnN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1 YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKCiAKIAogCiAKCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGlucHV0X2l0ZXJhdG9yIHsKICB0eXBl ZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAg ICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAgIGRp ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICBwb2ludGVyOwogIHR5 cGVkZWYgX1RwJiAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnN0cnVjdCBvdXRwdXRfaXRl cmF0b3IgewogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK ICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQg ICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAg ICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBmb3J3YXJkX2l0 ZXJhdG9yIHsKICB0eXBlZGVmIGZvcndhcmRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5 OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9E aXN0YW5jZSAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAg ICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgICAgICAgICAgICByZWZlcmVu Y2U7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgYmlk aXJlY3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh ZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAg IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBkaWZmZXJl bmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOwog IHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKdGVtcGxh dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVy YXRvciB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRl Z29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAg dHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw ZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiAg ICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKIyA5OCAiL3Vzci9saWIvZ2NjLWxp Yi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0 bF9pdGVyYXRvci5oIiAzCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpzdHJ1Y3QgaXRl cmF0b3JfdHJhaXRzIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0 ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZh bHVlX3R5cGUgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6 OmRpZmZlcmVuY2VfdHlwZSAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9J dGVyYXRvcjo6cG9pbnRlciAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9J dGVyYXRvcjo6cmVmZXJlbmNlICAgICAgICAgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNz IF9UcD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNj ZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAg ICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICAgICAgICAg ICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAg ICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgIHJl ZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8 Y29uc3QgX1RwKj4gewogIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0 b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVf dHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5 cGU7CiAgdHlwZWRlZiBjb25zdCBfVHAqICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBl ZGVmIGNvbnN0IF9UcCYgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07CgogCiAKIAogCgog Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQpfX2l0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVy JikKewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3Jf Y2F0ZWdvcnkgX0NhdGVnb3J5OwogIHJldHVybiBfQ2F0ZWdvcnkoKTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVy ZW5jZV90eXBlKgpfX2Rpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXImKQp7CiAgcmV0dXJuIHN0YXRp Y19jYXN0PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSo+ KDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKgpfX3ZhbHVlX3R5cGUoY29uc3QgX0l0ZXImKQp7CiAg cmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVl X3R5cGUqPigwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKaXRlcmF0b3JfY2F0ZWdvcnko Y29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX19pdGVyYXRvcl9jYXRlZ29yeShfX2kpOyB9CgoK dGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J dGVyPjo6ZGlmZmVyZW5jZV90eXBlKgpkaXN0YW5jZV90eXBlKGNvbnN0IF9JdGVyJiBfX2kpIHsg cmV0dXJuIF9fZGlzdGFuY2VfdHlwZShfX2kpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+Cmlu bGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKgp2YWx1ZV90 eXBlKGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fdmFsdWVfdHlwZShfX2kpOyB9CgoKCgoK IyAyNTkgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4v Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2Rpc3RhbmNlKF9J bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICBfRGlzdGFuY2UmIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgd2hpbGUg KF9fZmlyc3QgIT0gX19sYXN0KSB7ICsrX19maXJzdDsgKytfX247IH0KfQoKdGVtcGxhdGUgPGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBf X2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAg ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCAKICAgICAgICAgICAgICAgICAg ICAgICBfRGlzdGFuY2UmIF9fbiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKICBfX24g Kz0gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBj bGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmly c3QsIAogICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9EaXN0YW5j ZSYgX19uKQp7CiAgX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbiwgaXRlcmF0b3JfY2F0 ZWdvcnkoX19maXJzdCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KaW5s aW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2Vf dHlwZQpfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J bnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgd2hpbGUgKF9fZmlyc3Qg IT0gX19sYXN0KSB7CiAgICArK19fZmlyc3Q7ICsrX19uOwogIH0KICByZXR1cm4gX19uOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rp c3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0 b3IgX19sYXN0LAogICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgcmV0 dXJuIF9fbGFzdCAtIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K aW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVu Y2VfdHlwZQpkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf X2xhc3QpIHsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRv cj46Oml0ZXJhdG9yX2NhdGVnb3J5IAogICAgX0NhdGVnb3J5OwogIHJldHVybiBfX2Rpc3RhbmNl KF9fZmlyc3QsIF9fbGFzdCwgX0NhdGVnb3J5KCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfSW5wdXRJdGVy JiBfX2ksIF9EaXN0YW5jZSBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykgewogIHdoaWxlIChfX24t LSkgKytfX2k7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwg Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX0JpZGlyZWN0aW9uYWxJdGVy YXRvciYgX19pLCBfRGlzdGFuY2UgX19uLCAKICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0 aW9uYWxfaXRlcmF0b3JfdGFnKSB7CiAgaWYgKF9fbiA+PSAwKQogICAgd2hpbGUgKF9fbi0tKSAr K19faTsKICBlbHNlCiAgICB3aGlsZSAoX19uKyspIC0tX19pOwp9CgoKCgoKdGVtcGxhdGUgPGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBf X2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sIAogICAg ICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsKICBfX2kgKz0g X19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4K aW5saW5lIHZvaWQgYWR2YW5jZShfSW5wdXRJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uKSB7 CiAgX19hZHZhbmNlKF9faSwgX19uLCBpdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yIHsKcHJvdGVj dGVkOgogIF9Db250YWluZXIqIGNvbnRhaW5lcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5l ciAgICAgICAgICBjb250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcg aXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5 cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl ZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAg ICAgICAgcmVmZXJlbmNlOwoKICBleHBsaWNpdCBiYWNrX2luc2VydF9pdGVyYXRvcihfQ29udGFp bmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHt9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0Nv bnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5 cGUmIF9fdmFsdWUpIHsgCiAgICBjb250YWluZXItPnB1c2hfYmFjayhfX3ZhbHVlKTsKICAgIHJl dHVybiAqdGhpczsKICB9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJh dG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l cj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9y PF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCiMgMzc4 ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4u L2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRh aW5lcj4KaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGJhY2tfaW5zZXJ0 ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250 YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBmcm9udF9p bnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwpwdWJs aWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyICAgICAgICAgIGNvbnRhaW5lcl90eXBlOwogIHR5cGVk ZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQg ICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAg ZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwog IHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGZyb250 X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHt9CiAg ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBl bmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7IAogICAgY29udGFpbmVyLT5w dXNoX2Zyb250KF9fdmFsdWUpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBmcm9udF9pbnNlcnRf aXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgZnJv bnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRo aXM7IH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50 KSB7IHJldHVybiAqdGhpczsgfQp9OwoKIyA0MTcgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5k cmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3Iu aCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUgZnJvbnRfaW5zZXJ0X2l0 ZXJhdG9yPF9Db250YWluZXI+IGZyb250X2luc2VydGVyKF9Db250YWluZXImIF9feCkgewogIHJl dHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGluc2VydF9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBf Q29udGFpbmVyKiBjb250YWluZXI7CiAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgaXRl cjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJfdHlwZTsK ICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRl ZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAg ICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9p bnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICBpbnNlcnRf aXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBf X2kpIAogICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQogIGluc2VydF9pdGVyYXRv cjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFs dWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChpdGVyLCBf X3ZhbHVlKTsKICAgICsraXRlcjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5zZXJ0X2l0ZXJh dG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGluc2VydF9p dGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5z ZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7 IH0KfTsKCiMgNDU5ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4z Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX0NvbnRhaW5lciwgY2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgCmluc2VydF9pdGVyYXRv cjxfQ29udGFpbmVyPiBpbnNlcnRlcihfQ29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpCnsK ICB0eXBlZGVmIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faXRlcjsKICByZXR1cm4g aW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCwgX19pdGVyKF9faSkpOwp9CgoKdGVtcGxh dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZmVy ZW5jZSA9IF9UcCYsIAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90PiAKCgoK CmNsYXNzIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiByZXZlcnNl X2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgX1RwLCAKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmVmZXJlbmNlLCBfRGlzdGFu Y2U+ICBfU2VsZjsKcHJvdGVjdGVkOgogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgY3VycmVudDsK cHVibGljOgogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0 ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwog IHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5 cGVkZWYgX1RwKiAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWZl cmVuY2UgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKCiAgcmV2ZXJzZV9iaWRpcmVjdGlvbmFs X2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3Io X0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3gpCiAgICA6IGN1cnJlbnQoX194KSB7fQogIF9CaWRp cmVjdGlvbmFsSXRlcmF0b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICBfUmVm ZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX190 bXAgPSBjdXJyZW50OwogICAgcmV0dXJuICotLV9fdG1wOwogIH0KCiAgcG9pbnRlciBvcGVyYXRv ci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgX1NlbGYmIG9wZXJhdG9y KysoKSB7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJh dG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS1jdXJyZW50OwogICAg cmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAgICsrY3VycmVudDsK ICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxm IF9fdG1wID0gKnRoaXM7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwoK IyA1NTAgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4v Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBf QmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+ CmlubGluZSBib29sIG9wZXJhdG9yPT0oCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxf aXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3gsIAogICAgY29uc3Qg cmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3Rh bmNlPiYgX195KQp7CiAgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsKfQoKCgogCiAK IAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmNsYXNzIHJldmVyc2VfaXRlcmF0b3Ig CnsKcHJvdGVjdGVkOgogIF9JdGVyYXRvciBjdXJyZW50OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgICAg ICAgIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9JdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAg ICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0l0ZXJhdG9yPjo6cG9pbnRlcgogICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UKICAgICAgICAgIHJlZmVyZW5j ZTsKCiAgdHlwZWRlZiBfSXRlcmF0b3IgaXRlcmF0b3JfdHlwZTsKICB0eXBlZGVmIHJldmVyc2Vf aXRlcmF0b3I8X0l0ZXJhdG9yPiBfU2VsZjsKCnB1YmxpYzoKICByZXZlcnNlX2l0ZXJhdG9yKCkg e30KICBleHBsaWNpdCByZXZlcnNlX2l0ZXJhdG9yKGl0ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJl bnQoX194KSB7fQoKICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IF9TZWxmJiBfX3gpIDogY3VycmVu dChfX3guY3VycmVudCkge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgogIHJldmVyc2VfaXRl cmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkKICAgIDogY3VycmVudChf X3guYmFzZSgpKSB7fQoKICAgIAogIGl0ZXJhdG9yX3R5cGUgYmFzZSgpIGNvbnN0IHsgcmV0dXJu IGN1cnJlbnQ7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgX0l0ZXJhdG9y IF9fdG1wID0gY3VycmVudDsKICAgIHJldHVybiAqLS1fX3RtcDsKICB9CgogIHBvaW50ZXIgb3Bl cmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgoKICBfU2VsZiYgb3Bl cmF0b3IrKygpIHsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYg b3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAtLWN1cnJlbnQ7 CiAgICByZXR1cm4gX190bXA7CiAgfQogIF9TZWxmJiBvcGVyYXRvci0tKCkgewogICAgKytjdXJy ZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewogICAg X1NlbGYgX190bXAgPSAqdGhpczsKICAgICsrY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9 CgogIF9TZWxmIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAgICByZXR1 cm4gX1NlbGYoY3VycmVudCAtIF9fbik7CiAgfQogIF9TZWxmJiBvcGVyYXRvcis9KGRpZmZlcmVu Y2VfdHlwZSBfX24pIHsKICAgIGN1cnJlbnQgLT0gX19uOwogICAgcmV0dXJuICp0aGlzOwogIH0K ICBfU2VsZiBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAgcmV0dXJu IF9TZWxmKGN1cnJlbnQgKyBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItPShkaWZmZXJlbmNl X3R5cGUgX19uKSB7CiAgICBjdXJyZW50ICs9IF9fbjsKICAgIHJldHVybiAqdGhpczsKICB9CiAg cmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4g KigqdGhpcyArIF9fbik7IH0gIAp9OyAKIAp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxp bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194 LCAKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRv cj4mIF9feSkgewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCByZXZlcnNlX2l0 ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwgCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZl cnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIDwgX194 LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIHJl dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCm9wZXJhdG9yLShjb25z dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwgCiAgICAgICAgICBjb25zdCByZXZl cnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIC0gX194 LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIHJldmVyc2VfaXRl cmF0b3I8X0l0ZXJhdG9yPiAKb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0 ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRl cmF0b3I8X0l0ZXJhdG9yPiYgX194KSB7CiAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh dG9yPihfX3guYmFzZSgpIC0gX19uKTsKfQoKIyA4MDUgIi91c3IvbGliL2djYy1saWIvaTU4Ni1t YW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0 b3IuaCIgMwoKCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3QgPSBwdHJkaWZm X3Q+IApjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yIHsKICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IDw+ ICAoY29uc3QgaXN0cmVhbV9pdGVyYXRvciYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvciYpOwpwcm90ZWN0ZWQ6CiAg aXN0cmVhbSogX01fc3RyZWFtOwogIF9UcCBfTV92YWx1ZTsKICBib29sIF9NX2VuZF9tYXJrZXI7 CiAgdm9pZCBfTV9yZWFkKCkgewogICAgX01fZW5kX21hcmtlciA9ICgqX01fc3RyZWFtKSA/IHRy dWUgOiBmYWxzZTsKICAgIGlmIChfTV9lbmRfbWFya2VyKSAqX01fc3RyZWFtID4+IF9NX3ZhbHVl OwogICAgX01fZW5kX21hcmtlciA9ICgqX01fc3RyZWFtKSA/IHRydWUgOiBmYWxzZTsKICB9CnB1 YmxpYzoKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyAgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg dHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdCAg ICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0IF9UcCogICAgICAg ICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYgICAgICAgICAgcmVmZXJlbmNlOwoKICBp c3RyZWFtX2l0ZXJhdG9yKCkgOiBfTV9zdHJlYW0oJmNpbiksIF9NX2VuZF9tYXJrZXIoZmFsc2Up IHt9CiAgaXN0cmVhbV9pdGVyYXRvcihpc3RyZWFtJiBfX3MpIDogX01fc3RyZWFtKCZfX3MpIHsg X01fcmVhZCgpOyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9NX3Zh bHVlOyB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3Iq KCkpOyB9CgogIGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdD4mIG9wZXJhdG9yKysoKSB7IAog ICAgX01fcmVhZCgpOyAKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXN0cmVhbV9pdGVyYXRvcjxf VHAsIF9EaXN0PiBvcGVyYXRvcisrKGludCkgIHsKICAgIGlzdHJlYW1faXRlcmF0b3I8X1RwLCBf RGlzdD4gX190bXAgPSAqdGhpczsKICAgIF9NX3JlYWQoKTsKICAgIHJldHVybiBfX3RtcDsKICB9 Cn07CgojIDg2NCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8u Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGlz dHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mIF9feSkgewogIHJldHVy biAoX194Ll9NX3N0cmVhbSA9PSBfX3kuX01fc3RyZWFtICYmCiAgICAgICAgICBfX3guX01fZW5k X21hcmtlciA9PSBfX3kuX01fZW5kX21hcmtlcikgfHwKICAgICAgICAgX194Ll9NX2VuZF9tYXJr ZXIgPT0gZmFsc2UgJiYgX195Ll9NX2VuZF9tYXJrZXIgPT0gZmFsc2U7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfVHA+CmNsYXNzIG9zdHJlYW1faXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgb3N0cmVhbSog X01fc3RyZWFtOwogIGNvbnN0IGNoYXIqIF9NX3N0cmluZzsKcHVibGljOgogIHR5cGVkZWYgb3V0 cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAg ICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVy ZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVk ZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7CgogIG9zdHJlYW1faXRlcmF0b3Iob3N0 cmVhbSYgX19zKSA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKDApIHt9CiAgb3N0cmVhbV9p dGVyYXRvcihvc3RyZWFtJiBfX3MsIGNvbnN0IGNoYXIqIF9fYykgCiAgICA6IF9NX3N0cmVhbSgm X19zKSwgX01fc3RyaW5nKF9fYykgIHt9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRv cj0oY29uc3QgX1RwJiBfX3ZhbHVlKSB7IAogICAgKl9NX3N0cmVhbSA8PCBfX3ZhbHVlOwogICAg aWYgKF9NX3N0cmluZykgKl9NX3N0cmVhbSA8PCBfTV9zdHJpbmc7CiAgICByZXR1cm4gKnRoaXM7 CiAgfQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7 IH0KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsg fSAKICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhp czsgfSAKfTsKCiMgOTA3ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45 NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgogCgoKCiAK IAogCiMgMzggIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4v Li4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvciIgMiAzCgoKCgogCiAKIAojIDQ0ICIvdXNy L2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1 ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQgX19vdXRfb2ZfcmFu Z2UgKGNvbnN0IGNoYXIgKik7CmV4dGVybiB2b2lkIF9fbGVuZ3RoX2Vycm9yIChjb25zdCBjaGFy ICopOwoKCgoKCgoKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzID0g c3RyaW5nX2NoYXJfdHJhaXRzPGNoYXJUPiwKCSAgY2xhc3MgQWxsb2NhdG9yID0gYWxsb2MgPgpj bGFzcyBiYXNpY19zdHJpbmcKewpwcml2YXRlOgogIHN0cnVjdCBSZXAgewogICAgc2l6ZV90IGxl biwgcmVzLCByZWY7CiAgICBib29sIHNlbGZpc2g7CgogICAgY2hhclQqIGRhdGEgKCkgeyByZXR1 cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyVCAqPih0aGlzICsgMSk7IH0KICAgIGNoYXJUJiBvcGVy YXRvcltdIChzaXplX3QgcykgeyByZXR1cm4gZGF0YSAoKSBbc107IH0KICAgIGNoYXJUKiBncmFi ICgpIHsgaWYgKHNlbGZpc2gpIHJldHVybiBjbG9uZSAoKTsgKytyZWY7IHJldHVybiBkYXRhICgp OyB9CgogICAgdm9pZCByZWxlYXNlICgpCiAgICAgIHsKCXNpemVfdCBfX3ZhbDsKCSAKCSAKCSAK CSAKCWFzbSAoIi5ieXRlIDB4ZjAsIDB4MGYsIDB4YzEsIDB4MDIiICAKCSAgICA6ICI9YSIgKF9f dmFsKQoJICAgIDogIjAiICgtMSksICJtIiAocmVmKSwgImQiICgmcmVmKQoJICAgIDogIm1lbW9y eSIpOwoKCWlmIChfX3ZhbCA9PSAxKQoJICBkZWxldGUgdGhpczsKICAgICAgfQojIDExMCAiL3Vz ci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs dWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAzCgoKICAgIGlubGluZSBzdGF0aWMgdm9pZCAqIG9w ZXJhdG9yIG5ldyAoc2l6ZV90LCBzaXplX3QpOwogICAgaW5saW5lIHN0YXRpYyB2b2lkIG9wZXJh dG9yIGRlbGV0ZSAodm9pZCAqKTsKICAgIGlubGluZSBzdGF0aWMgUmVwKiBjcmVhdGUgKHNpemVf dCk7CiAgICBjaGFyVCogY2xvbmUgKCk7CgogICAgaW5saW5lIHZvaWQgY29weSAoc2l6ZV90LCBj b25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQgbW92ZSAoc2l6ZV90LCBjb25z dCBjaGFyVCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQgc2V0ICAoc2l6ZV90LCBjb25zdCBj aGFyVCwgICBzaXplX3QpOwoKICAgIGlubGluZSBzdGF0aWMgYm9vbCBleGNlc3Nfc2xvcCAoc2l6 ZV90LCBzaXplX3QpOwogICAgaW5saW5lIHN0YXRpYyBzaXplX3QgZnJvYl9zaXplIChzaXplX3Qp OwoKICBwcml2YXRlOgogICAgUmVwICZvcGVyYXRvcj0gKGNvbnN0IFJlcCAmKTsKICB9OwoKcHVi bGljOgogCiAgdHlwZWRlZgkgICB0cmFpdHMJCXRyYWl0c190eXBlOwogIHR5cGVkZWYgdHlwZW5h bWUgdHJhaXRzOjpjaGFyX3R5cGUJdmFsdWVfdHlwZTsKICB0eXBlZGVmCSAgIEFsbG9jYXRvcgkJ YWxsb2NhdG9yX3R5cGU7CgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0 cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjaGFyVCYgcmVmZXJlbmNlOwogIHR5 cGVkZWYgY29uc3QgY2hhclQmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIGNoYXJUKiBwb2lu dGVyOwogIHR5cGVkZWYgY29uc3QgY2hhclQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBwb2lu dGVyIGl0ZXJhdG9yOwogIHR5cGVkZWYgY29uc3RfcG9pbnRlciBjb25zdF9pdGVyYXRvcjsKICB0 eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICB0 eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9p dGVyYXRvcjsKICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXpl X3R5cGU+KC0xKTsKCnByaXZhdGU6CiAgUmVwICpyZXAgKCkgY29uc3QgeyByZXR1cm4gcmVpbnRl cnByZXRfY2FzdDxSZXAgKj4oZGF0KSAtIDE7IH0KICB2b2lkIHJlcHVwIChSZXAgKnApIHsgcmVw ICgpLT5yZWxlYXNlICgpOyBkYXQgPSBwLT5kYXRhICgpOyB9CgpwdWJsaWM6CiAgY29uc3QgY2hh clQqIGRhdGEgKCkgY29uc3QKICAgIHsgcmV0dXJuIHJlcCAoKS0+ZGF0YSgpOyB9CiAgc2l6ZV90 eXBlIGxlbmd0aCAoKSBjb25zdAogICAgeyByZXR1cm4gcmVwICgpLT5sZW47IH0KICBzaXplX3R5 cGUgc2l6ZSAoKSBjb25zdAogICAgeyByZXR1cm4gcmVwICgpLT5sZW47IH0KICBzaXplX3R5cGUg Y2FwYWNpdHkgKCkgY29uc3QKICAgIHsgcmV0dXJuIHJlcCAoKS0+cmVzOyB9CiAgc2l6ZV90eXBl IG1heF9zaXplICgpIGNvbnN0CiAgICB7IHJldHVybiAobnBvcyAtIDEpL3NpemVvZiAoY2hhclQp OyB9CQkgCiAgYm9vbCBlbXB0eSAoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZSAoKSA9PSAwOyB9 CgogCiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcj0gKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyKQog ICAgewogICAgICBpZiAoJnN0ciAhPSB0aGlzKSB7IHJlcCAoKS0+cmVsZWFzZSAoKTsgZGF0ID0g c3RyLnJlcCAoKS0+Z3JhYiAoKTsgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIGV4cGxp Y2l0IGJhc2ljX3N0cmluZyAoKTogZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyB9CiAgYmFzaWNfc3Ry aW5nIChjb25zdCBiYXNpY19zdHJpbmcmIF9zdHIpOiBkYXQgKF9zdHIucmVwICgpLT5ncmFiICgp KSB7IH0KICBiYXNpY19zdHJpbmcgKGNvbnN0IGJhc2ljX3N0cmluZyYgX3N0ciwgc2l6ZV90eXBl IHBvcywgc2l6ZV90eXBlIG4gPSBucG9zKQogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFz c2lnbiAoX3N0ciwgcG9zLCBuKTsgfQogIGJhc2ljX3N0cmluZyAoY29uc3QgY2hhclQqIHMsIHNp emVfdHlwZSBuKQogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAocywgbik7IH0K ICBiYXNpY19zdHJpbmcgKGNvbnN0IGNoYXJUKiBzKQogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgp KSB7IGFzc2lnbiAocyk7IH0KICBiYXNpY19zdHJpbmcgKHNpemVfdHlwZSBuLCBjaGFyVCBjKQog ICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAobiwgYyk7IH0KCiAgdGVtcGxhdGU8 Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICAgIGJhc2ljX3N0cmluZyhJbnB1dEl0ZXJhdG9yIF9fYmVn aW4sIElucHV0SXRlcmF0b3IgX19lbmQpCgoKCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsg YXNzaWduIChfX2JlZ2luLCBfX2VuZCk7IH0KCiAgfmJhc2ljX3N0cmluZyAoKQogICAgeyByZXAg KCktPnJlbGVhc2UgKCk7IH0KCiAgdm9pZCBzd2FwIChiYXNpY19zdHJpbmcgJnMpIHsgY2hhclQg KmQgPSBkYXQ7IGRhdCA9IHMuZGF0OyBzLmRhdCA9IGQ7IH0KCiAgYmFzaWNfc3RyaW5nJiBhcHBl bmQgKGNvbnN0IGJhc2ljX3N0cmluZyYgX3N0ciwgc2l6ZV90eXBlIHBvcyA9IDAsCgkJCXNpemVf dHlwZSBuID0gbnBvcykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGxlbmd0aCAoKSwgMCwgX3N0ciwg cG9zLCBuKTsgfQogIGJhc2ljX3N0cmluZyYgYXBwZW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90 eXBlIG4pCiAgICB7IHJldHVybiByZXBsYWNlIChsZW5ndGggKCksIDAsIHMsIG4pOyB9CiAgYmFz aWNfc3RyaW5nJiBhcHBlbmQgKGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gYXBwZW5kIChz LCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgYmFzaWNfc3RyaW5nJiBhcHBlbmQgKHNpemVfdHlw ZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4gcmVwbGFjZSAobGVuZ3RoICgpLCAwLCBuLCBjKTsg fQoKICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9yPgogICAgYmFzaWNfc3RyaW5nJiBhcHBl bmQoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KQoKCgogICAgeyByZXR1 cm4gcmVwbGFjZSAoaWVuZCAoKSwgaWVuZCAoKSwgZmlyc3QsIGxhc3QpOyB9CgogIGJhc2ljX3N0 cmluZyYgYXNzaWduIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAs CgkJCXNpemVfdHlwZSBuID0gbnBvcykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKDAsIG5wb3MsIHN0 ciwgcG9zLCBuKTsgfQogIGJhc2ljX3N0cmluZyYgYXNzaWduIChjb25zdCBjaGFyVCogcywgc2l6 ZV90eXBlIG4pCiAgICB7IHJldHVybiByZXBsYWNlICgwLCBucG9zLCBzLCBuKTsgfQogIGJhc2lj X3N0cmluZyYgYXNzaWduIChjb25zdCBjaGFyVCogcykKICAgIHsgcmV0dXJuIGFzc2lnbiAocywg dHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIGJhc2ljX3N0cmluZyYgYXNzaWduIChzaXplX3R5cGUg biwgY2hhclQgYykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKDAsIG5wb3MsIG4sIGMpOyB9CgogIHRl bXBsYXRlPGNsYXNzIElucHV0SXRlcmF0b3I+CiAgICBiYXNpY19zdHJpbmcmIGFzc2lnbihJbnB1 dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpCgoKCiAgICB7IHJldHVybiByZXBs YWNlIChpYmVnaW4gKCksIGllbmQgKCksIGZpcnN0LCBsYXN0KTsgfQoKICBiYXNpY19zdHJpbmcm IG9wZXJhdG9yPSAoY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiBhc3NpZ24gKHMpOyB9CiAg YmFzaWNfc3RyaW5nJiBvcGVyYXRvcj0gKGNoYXJUIGMpCiAgICB7IHJldHVybiBhc3NpZ24gKDEs IGMpOyB9CgogIGJhc2ljX3N0cmluZyYgb3BlcmF0b3IrPSAoY29uc3QgYmFzaWNfc3RyaW5nJiBy aHMpCiAgICB7IHJldHVybiBhcHBlbmQgKHJocyk7IH0KICBiYXNpY19zdHJpbmcmIG9wZXJhdG9y Kz0gKGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gYXBwZW5kIChzKTsgfQogIGJhc2ljX3N0 cmluZyYgb3BlcmF0b3IrPSAoY2hhclQgYykKICAgIHsgcmV0dXJuIGFwcGVuZCAoMSwgYyk7IH0K CiAgYmFzaWNfc3RyaW5nJiBpbnNlcnQgKHNpemVfdHlwZSBwb3MxLCBjb25zdCBiYXNpY19zdHJp bmcmIHN0ciwKCQkJc2l6ZV90eXBlIHBvczIgPSAwLCBzaXplX3R5cGUgbiA9IG5wb3MpCiAgICB7 IHJldHVybiByZXBsYWNlIChwb3MxLCAwLCBzdHIsIHBvczIsIG4pOyB9CiAgYmFzaWNfc3RyaW5n JiBpbnNlcnQgKHNpemVfdHlwZSBwb3MsIGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAg IHsgcmV0dXJuIHJlcGxhY2UgKHBvcywgMCwgcywgbik7IH0KICBiYXNpY19zdHJpbmcmIGluc2Vy dCAoc2l6ZV90eXBlIHBvcywgY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiBpbnNlcnQgKHBv cywgcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIGJhc2ljX3N0cmluZyYgaW5zZXJ0IChzaXpl X3R5cGUgcG9zLCBzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKHBv cywgMCwgbiwgYyk7IH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgcCwgY2hhclQgYykKICAg IHsgc2l6ZV90eXBlIF9fbyA9IHAgLSBpYmVnaW4gKCk7CiAgICAgIGluc2VydCAocCAtIGliZWdp biAoKSwgMSwgYyk7IHNlbGZpc2ggKCk7CiAgICAgIHJldHVybiBpYmVnaW4gKCkgKyBfX287IH0K ICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgcCwgc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7 IHNpemVfdHlwZSBfX28gPSBwIC0gaWJlZ2luICgpOwogICAgICBpbnNlcnQgKHAgLSBpYmVnaW4g KCksIG4sIGMpOyBzZWxmaXNoICgpOwogICAgICByZXR1cm4gaWJlZ2luICgpICsgX19vOyB9Cgog IHRlbXBsYXRlPGNsYXNzIElucHV0SXRlcmF0b3I+CiAgICB2b2lkIGluc2VydChpdGVyYXRvciBw LCBJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpCgoKCiAgICB7IHJlcGxh Y2UgKHAsIHAsIGZpcnN0LCBsYXN0KTsgfQoKICBiYXNpY19zdHJpbmcmIGVyYXNlIChzaXplX3R5 cGUgcG9zID0gMCwgc2l6ZV90eXBlIG4gPSBucG9zKQogICAgeyByZXR1cm4gcmVwbGFjZSAocG9z LCBuLCAoc2l6ZV90eXBlKTAsIChjaGFyVCkwKTsgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9y IHApCiAgICB7IHNpemVfdHlwZSBfX28gPSBwIC0gYmVnaW4oKTsKICAgICAgcmVwbGFjZSAoX19v LCAxLCAoc2l6ZV90eXBlKTAsIChjaGFyVCkwKTsgc2VsZmlzaCAoKTsKICAgICAgcmV0dXJuIGli ZWdpbigpICsgX19vOyB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgZiwgaXRlcmF0b3IgbCkK ICAgIHsgc2l6ZV90eXBlIF9fbyA9IGYgLSBpYmVnaW4oKTsKICAgICAgcmVwbGFjZSAoX19vLCBs LWYsIChzaXplX3R5cGUpMCwgKGNoYXJUKTApO3NlbGZpc2ggKCk7CiAgICAgIHJldHVybiBpYmVn aW4oKSArIF9fbzsgfQoKICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKHNpemVfdHlwZSBwb3MxLCBz aXplX3R5cGUgbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLAoJCQkgc2l6ZV90eXBlIHBvczIg PSAwLCBzaXplX3R5cGUgbjIgPSBucG9zKTsKICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKHNpemVf dHlwZSBwb3MsIHNpemVfdHlwZSBuMSwgY29uc3QgY2hhclQqIHMsCgkJCSBzaXplX3R5cGUgbjIp OwogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBj b25zdCBjaGFyVCogcykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKHBvcywgbjEsIHMsIHRyYWl0czo6 bGVuZ3RoIChzKSk7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKHNpemVfdHlwZSBwb3MsIHNp emVfdHlwZSBuMSwgc2l6ZV90eXBlIG4yLCBjaGFyVCBjKTsKICBiYXNpY19zdHJpbmcmIHJlcGxh Y2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4gcmVw bGFjZSAocG9zLCBuLCAxLCBjKTsgfQogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoaXRlcmF0b3Ig aTEsIGl0ZXJhdG9yIGkyLCBjb25zdCBiYXNpY19zdHJpbmcmIHN0cikKICAgIHsgcmV0dXJuIHJl cGxhY2UgKGkxIC0gaWJlZ2luICgpLCBpMiAtIGkxLCBzdHIpOyB9CiAgYmFzaWNfc3RyaW5nJiBy ZXBsYWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5 cGUgbikKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGkxIC0gaWJlZ2luICgpLCBpMiAtIGkxLCBzLCBu KTsgfQogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGkyLCBj b25zdCBjaGFyVCogcykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGkxIC0gaWJlZ2luICgpLCBpMiAt IGkxLCBzKTsgfQogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoaXRlcmF0b3IgaTEsIGl0ZXJhdG9y IGkyLCBzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGkxIC0gaWJl Z2luICgpLCBpMiAtIGkxLCBuLCBjKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9y PgogICAgYmFzaWNfc3RyaW5nJiByZXBsYWNlKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBpMiwKCQkJ ICBJbnB1dEl0ZXJhdG9yIGoxLCBJbnB1dEl0ZXJhdG9yIGoyKTsKCgoKCgpwcml2YXRlOgogIHN0 YXRpYyBjaGFyVCBlb3MgKCkgeyByZXR1cm4gdHJhaXRzOjplb3MgKCk7IH0KICB2b2lkIHVuaXF1 ZSAoKSB7IGlmIChyZXAgKCktPnJlZiA+IDEpIGFsbG9jIChsZW5ndGggKCksIHRydWUpOyB9CiAg dm9pZCBzZWxmaXNoICgpIHsgdW5pcXVlICgpOyByZXAgKCktPnNlbGZpc2ggPSB0cnVlOyB9Cgpw dWJsaWM6CiAgY2hhclQgb3BlcmF0b3JbXSAoc2l6ZV90eXBlIHBvcykgY29uc3QKICAgIHsKICAg ICAgaWYgKHBvcyA9PSBsZW5ndGggKCkpCglyZXR1cm4gZW9zICgpOwogICAgICByZXR1cm4gZGF0 YSAoKVtwb3NdOwogICAgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3JbXSAoc2l6ZV90eXBlIHBvcykK ICAgIHsgc2VsZmlzaCAoKTsgcmV0dXJuICgqcmVwICgpKVtwb3NdOyB9CgogIHJlZmVyZW5jZSBh dCAoc2l6ZV90eXBlIHBvcykKICAgIHsKICAgICAgZG8geyBpZiAoIHBvcyA+PSBsZW5ndGggKCkg KSBfX291dF9vZl9yYW5nZSAoInBvcyA+PSBsZW5ndGggKCkiKTsgfSB3aGlsZSAoMCkgOwogICAg ICByZXR1cm4gKCp0aGlzKVtwb3NdOwogICAgfQogIGNvbnN0X3JlZmVyZW5jZSBhdCAoc2l6ZV90 eXBlIHBvcykgY29uc3QKICAgIHsKICAgICAgZG8geyBpZiAoIHBvcyA+PSBsZW5ndGggKCkgKSBf X291dF9vZl9yYW5nZSAoInBvcyA+PSBsZW5ndGggKCkiKTsgfSB3aGlsZSAoMCkgOwogICAgICBy ZXR1cm4gZGF0YSAoKVtwb3NdOwogICAgfQoKcHJpdmF0ZToKICB2b2lkIHRlcm1pbmF0ZSAoKSBj b25zdAogICAgeyB0cmFpdHM6OmFzc2lnbiAoKCpyZXAgKCkpW2xlbmd0aCAoKV0sIGVvcyAoKSk7 IH0KCnB1YmxpYzoKICBjb25zdCBjaGFyVCogY19zdHIgKCkgY29uc3QKICAgIHsgY29uc3QgY2hh clQqIG51bGxfc3RyID0gIiI7IAogICAgICBpZiAobGVuZ3RoICgpID09IDApIHJldHVybiBudWxs X3N0cjsgdGVybWluYXRlICgpOyByZXR1cm4gZGF0YSAoKTsgfQogIHZvaWQgcmVzaXplIChzaXpl X3R5cGUgbiwgY2hhclQgYyk7CiAgdm9pZCByZXNpemUgKHNpemVfdHlwZSBuKQogICAgeyByZXNp emUgKG4sIGVvcyAoKSk7IH0KICB2b2lkIHJlc2VydmUgKHNpemVfdHlwZSkgeyB9CgogIHNpemVf dHlwZSBjb3B5IChjaGFyVCogcywgc2l6ZV90eXBlIG4sIHNpemVfdHlwZSBwb3MgPSAwKSBjb25z dDsKCiAgc2l6ZV90eXBlIGZpbmQgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUg cG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZpbmQgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxl bmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBv cywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSBmaW5kIChjb25zdCBjaGFyVCogcywg c2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBmaW5kIChzLCBwb3MsIHRyYWl0 czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUgZmluZCAoY2hhclQgYywgc2l6ZV90eXBlIHBv cyA9IDApIGNvbnN0OwoKICBzaXplX3R5cGUgcmZpbmQgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3Ry LCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIHJmaW5kIChzdHIuZGF0 YSgpLCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0KICBzaXplX3R5cGUgcmZpbmQgKGNvbnN0IGNoYXJU KiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBlIHJmaW5k IChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVy biByZmluZCAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIHJmaW5k IChjaGFyVCBjLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3Q7CgogIHNpemVfdHlwZSBmaW5k X2ZpcnN0X29mIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDApIGNv bnN0CiAgICB7IHJldHVybiBmaW5kX2ZpcnN0X29mIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5n dGgoKSk7IH0KICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVf dHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAo Y29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmlu ZF9maXJzdF9vZiAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIGZp bmRfZmlyc3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1 cm4gZmluZCAoYywgcG9zKTsgfQoKICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjb25zdCBiYXNp Y19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiBm aW5kX2xhc3Rfb2YgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlw ZSBmaW5kX2xhc3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUg bikgY29uc3Q7CiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVf dHlwZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9sYXN0X29mIChzLCBwb3Ms IHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjaGFyVCBj LCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIHJmaW5kIChjLCBwb3Mp OyB9CgogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X25vdF9vZiAoY29uc3QgYmFzaWNfc3RyaW5nJiBz dHIsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9maXJzdF9ub3Rf b2YgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kX2Zp cnN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBj b25zdDsKICBzaXplX3R5cGUgZmluZF9maXJzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXpl X3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfZmlyc3Rfbm90X29mIChzLCBw b3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUgZmluZF9maXJzdF9ub3Rfb2Yg KGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdDsKCiAgc2l6ZV90eXBlIGZpbmRfbGFz dF9ub3Rfb2YgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gbnBvcykg Y29uc3QKICAgIHsgcmV0dXJuIGZpbmRfbGFzdF9ub3Rfb2YgKHN0ci5kYXRhKCksIHBvcywgc3Ry Lmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kX2xhc3Rfbm90X29mIChjb25zdCBjaGFyVCog cywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSBmaW5kX2xh c3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAg ICB7IHJldHVybiBmaW5kX2xhc3Rfbm90X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7 IH0KICBzaXplX3R5cGUgZmluZF9sYXN0X25vdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9 IG5wb3MpIGNvbnN0OwoKICBiYXNpY19zdHJpbmcgc3Vic3RyIChzaXplX3R5cGUgcG9zID0gMCwg c2l6ZV90eXBlIG4gPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gYmFzaWNfc3RyaW5nICgqdGhp cywgcG9zLCBuKTsgfQoKICBpbnQgY29tcGFyZSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNp emVfdHlwZSBwb3MgPSAwLCBzaXplX3R5cGUgbiA9IG5wb3MpIGNvbnN0OwogICAKICBpbnQgY29t cGFyZSAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsK ICBpbnQgY29tcGFyZSAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAog ICAgeyByZXR1cm4gY29tcGFyZSAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CgogIGl0 ZXJhdG9yIGJlZ2luICgpIHsgc2VsZmlzaCAoKTsgcmV0dXJuICYoKnRoaXMpWzBdOyB9CiAgaXRl cmF0b3IgZW5kICgpIHsgc2VsZmlzaCAoKTsgcmV0dXJuICYoKnRoaXMpW2xlbmd0aCAoKV07IH0K CnByaXZhdGU6CiAgaXRlcmF0b3IgaWJlZ2luICgpIGNvbnN0IHsgcmV0dXJuICYoKnJlcCAoKSlb MF07IH0KICBpdGVyYXRvciBpZW5kICgpIGNvbnN0IHsgcmV0dXJuICYoKnJlcCAoKSlbbGVuZ3Ro ICgpXTsgfQoKcHVibGljOgogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luICgpIGNvbnN0IHsgcmV0dXJu IGliZWdpbiAoKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCAoKSBjb25zdCB7IHJldHVybiBpZW5k ICgpOyB9CgogIHJldmVyc2VfaXRlcmF0b3IgICAgICAgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJz ZV9pdGVyYXRvciAoZW5kICgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkg Y29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgKGVuZCAoKSk7IH0KICBy ZXZlcnNlX2l0ZXJhdG9yICAgICAgIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yIChi ZWdpbiAoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyBy ZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvciAoYmVnaW4gKCkpOyB9Cgpwcml2YXRlOgogIHZv aWQgYWxsb2MgKHNpemVfdHlwZSBzaXplLCBib29sIHNhdmUpOwogIHN0YXRpYyBzaXplX3R5cGUg X2ZpbmQgKGNvbnN0IGNoYXJUKiBwdHIsIGNoYXJUIGMsIHNpemVfdHlwZSB4cG9zLCBzaXplX3R5 cGUgbGVuKTsKICBpbmxpbmUgYm9vbCBjaGVja19yZWFsbG9jIChzaXplX3R5cGUgcykgY29uc3Q7 CgogIHN0YXRpYyBSZXAgbmlsUmVwOwogIGNoYXJUICpkYXQ7Cn07CgoKdGVtcGxhdGUgPGNsYXNz IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4gdGVtcGxhdGUgPGNsYXNzIElu cHV0SXRlcmF0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgYmFz aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoaXRlcmF0b3Ig aTEsIGl0ZXJhdG9yIGkyLCBJbnB1dEl0ZXJhdG9yIGoxLCBJbnB1dEl0ZXJhdG9yIGoyKQoKCgoK CnsKICBjb25zdCBzaXplX3R5cGUgbGVuID0gbGVuZ3RoICgpOwogIHNpemVfdHlwZSBwb3MgPSBp MSAtIGliZWdpbiAoKTsKICBzaXplX3R5cGUgbjEgPSBpMiAtIGkxOwogIHNpemVfdHlwZSBuMiA9 IGoyIC0gajE7CgogIGRvIHsgaWYgKCBwb3MgPiBsZW4gKSBfX291dF9vZl9yYW5nZSAoInBvcyA+ IGxlbiIpOyB9IHdoaWxlICgwKSA7CiAgaWYgKG4xID4gbGVuIC0gcG9zKQogICAgbjEgPSBsZW4g LSBwb3M7CiAgZG8geyBpZiAoIGxlbiAtIG4xID4gbWF4X3NpemUgKCkgLSBuMiApIF9fbGVuZ3Ro X2Vycm9yICgibGVuIC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yIik7IH0gd2hpbGUgKDApIDsKICBz aXplX3QgbmV3bGVuID0gbGVuIC0gbjEgKyBuMjsKCiAgaWYgKGNoZWNrX3JlYWxsb2MgKG5ld2xl bikpCiAgICB7CiAgICAgIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChuZXdsZW4pOwogICAgICBwLT5j b3B5ICgwLCBkYXRhICgpLCBwb3MpOwogICAgICBwLT5jb3B5IChwb3MgKyBuMiwgZGF0YSAoKSAr IHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAgZm9yICg7IGoxICE9IGoyOyArK2ox LCArK3BvcykKCXRyYWl0czo6YXNzaWduICgoKnApW3Bvc10sICpqMSk7CiAgICAgIHJlcHVwIChw KTsKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIHJlcCAoKS0+bW92ZSAocG9zICsgbjIsIGRhdGEg KCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7CiAgICAgIGZvciAoOyBqMSAhPSBqMjsg KytqMSwgKytwb3MpCgl0cmFpdHM6OmFzc2lnbiAoKCpyZXAgKCkpW3Bvc10sICpqMSk7CiAgICB9 CiAgcmVwICgpLT5sZW4gPSBuZXdsZW47CgogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNs YXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0 cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPgpvcGVyYXRvcisgKGNvbnN0IGJhc2ljX3N0 cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAoJICAgY29uc3QgYmFzaWNfc3Ry aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICBiYXNpY19zdHJpbmcgPGNo YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gX3N0ciAobGhzKTsKICBfc3RyLmFwcGVuZCAocmhzKTsK ICByZXR1cm4gX3N0cjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs YXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh dG9yPgpvcGVyYXRvcisgKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hh clQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh aXRzLCBBbGxvY2F0b3I+IF9zdHIgKGxocyk7CiAgX3N0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJu IF9zdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxv Y2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4Kb3Bl cmF0b3IrIChjaGFyVCBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs b2NhdG9yPiYgcmhzKQp7CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+ IF9zdHIgKDEsIGxocyk7CiAgX3N0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIF9zdHI7Cn0KCnRl bXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGlu ZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4Kb3BlcmF0b3IrIChjb25z dCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hh clQqIHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiBfc3Ry IChsaHMpOwogIF9zdHIuYXBwZW5kIChyaHMpOwogIHJldHVybiBfc3RyOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNf c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Cm9wZXJhdG9yKyAoY29uc3QgYmFzaWNf c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNoYXJUIHJocykKewogIGJh c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiBzdHIgKGxocyk7CiAgc3RyLmFw cGVuZCAoMSwgcmhzKTsKICByZXR1cm4gc3RyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj09IChjb25z dCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25z dCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVy biAobGhzLmNvbXBhcmUgKHJocykgPT0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xh c3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPT0gKGNvbnN0 IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y PiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSA9PSAwKTsKfQoKdGVtcGxhdGUg PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wK b3BlcmF0b3I9PSAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+ JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpID09 IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh dG9yPgppbmxpbmUgYm9vbApvcGVyYXRvciE9IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNp Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhz LmNvbXBhcmUgKGxocykgIT0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJh aXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yIT0gKGNvbnN0IGJhc2lj X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhz KQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSAhPSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNz IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0 b3I8IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywK CSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykK ewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPCAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNo YXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8 IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs bG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgPiAwKTsKfQoKdGVt cGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5l IGJvb2wKb3BlcmF0b3I8IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j YXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJo cykgPCAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs bG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBi YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAo cmhzLmNvbXBhcmUgKGxocykgPCAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0 cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+IChjb25zdCBiYXNp Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJo cykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPiAwKTsKfQoKdGVtcGxhdGUgPGNsYXNz IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0 b3I8PSAoY29uc3QgY2hhclQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz LCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpID49IDApOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpp bmxpbmUgYm9vbApvcGVyYXRvcjw9IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs IEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBh cmUgKHJocykgPD0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj bGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPj0gKGNvbnN0IGNoYXJUKiBsaHMs IGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAg cmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSA8PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJU LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PSAo Y29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0 IGNoYXJUKiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpID49IDApOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUg Ym9vbApvcGVyYXRvciE9IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j YXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j YXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgIT0gMCk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBi b29sCm9wZXJhdG9yPiAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0 b3I+JiBsaHMsCgkgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv cj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPiAwKTsKfQoKdGVtcGxhdGUg PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wK b3BlcmF0b3I8PSAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+ JiBsaHMsCgkgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+ JiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpIDw9IDApOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApv cGVyYXRvcj49IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4m IGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4m IHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPj0gMCk7Cn0KCmNsYXNzIGlzdHJl YW07IGNsYXNzIG9zdHJlYW07CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj bGFzcyBBbGxvY2F0b3I+IGlzdHJlYW0mCm9wZXJhdG9yPj4gKGlzdHJlYW0mLCBiYXNpY19zdHJp bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mKTsKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBj bGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4gb3N0cmVhbSYKb3BlcmF0b3I8PCAob3N0cmVh bSYsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYpOwp0ZW1w bGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPiBpc3RyZWFt JgpnZXRsaW5lIChpc3RyZWFtJiwgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0 b3I+JiwgY2hhclQgZGVsaW0gPSAnXG4nKTsKCn0gIAoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1 ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jh c3RyaW5nLmNjIiAxIDMKIAogCgogCiAKIAogCiAKCiAKIAogCiAKCiAKIAogCgogCiAKIAogCiAK CiAKIAoKZXh0ZXJuICJDKysiIHsKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs IGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQgKiBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp dHMsIEFsbG9jYXRvcj46OlJlcDo6Cm9wZXJhdG9yIG5ldyAoc2l6ZV90IHMsIHNpemVfdCBleHRy YSkKewogIHJldHVybiBBbGxvY2F0b3I6OmFsbG9jYXRlKHMgKyBleHRyYSAqIHNpemVvZiAoY2hh clQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j YXRvcj4KaW5saW5lIHZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+ OjpSZXA6OgpvcGVyYXRvciBkZWxldGUgKHZvaWQgKiBwdHIpCnsKICBBbGxvY2F0b3I6OmRlYWxs b2NhdGUocHRyLCBzaXplb2YoUmVwKSArCgkJCXJlaW50ZXJwcmV0X2Nhc3Q8UmVwICo+KHB0cikt PnJlcyAqCgkJCXNpemVvZiAoY2hhclQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFz cyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHNpemVfdCBiYXNpY19zdHJpbmcgPGNo YXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CmZyb2Jfc2l6ZSAoc2l6ZV90IHMpCnsKICBz aXplX3QgaSA9IDE2OwogIHdoaWxlIChpIDwgcykgaSAqPSAyOwogIHJldHVybiBpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUg YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXAgKgpiYXNpY19zdHJp bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CmNyZWF0ZSAoc2l6ZV90IGV4dHJh KQp7CiAgZXh0cmEgPSBmcm9iX3NpemUgKGV4dHJhICsgMSk7CiAgUmVwICpwID0gbmV3IChleHRy YSkgUmVwOwogIHAtPnJlcyA9IGV4dHJhOwogIHAtPnJlZiA9IDE7CiAgcC0+c2VsZmlzaCA9IGZh bHNlOwogIHJldHVybiBwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywg Y2xhc3MgQWxsb2NhdG9yPgpjaGFyVCAqIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs b2NhdG9yPjo6UmVwOjoKY2xvbmUgKCkKewogIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChsZW4pOwog IHAtPmNvcHkgKDAsIGRhdGEgKCksIGxlbik7CiAgcC0+bGVuID0gbGVuOwogIHJldHVybiBwLT5k YXRhICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxs b2NhdG9yPgppbmxpbmUgYm9vbCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv cj46OlJlcDo6CmV4Y2Vzc19zbG9wIChzaXplX3Qgcywgc2l6ZV90IHIpCnsKICByZXR1cm4gMiAq IChzIDw9IDE2ID8gMTYgOiBzKSA8IHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sIGJhc2ljX3N0cmluZyA8Y2hhclQs IHRyYWl0cywgQWxsb2NhdG9yPjo6CmNoZWNrX3JlYWxsb2MgKGJhc2ljX3N0cmluZzo6c2l6ZV90 eXBlIHMpIGNvbnN0CnsKICBzICs9IHNpemVvZiAoY2hhclQpOwogIHJlcCAoKS0+c2VsZmlzaCA9 IGZhbHNlOwogIHJldHVybiAocmVwICgpLT5yZWYgPiAxCgkgIHx8IHMgPiBjYXBhY2l0eSAoKQoJ ICB8fCBSZXA6OmV4Y2Vzc19zbG9wIChzLCBjYXBhY2l0eSAoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgp2b2lkIGJhc2ljX3N0cmlu ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmFsbG9jIChiYXNpY19zdHJpbmc6OnNpemVf dHlwZSBfX3NpemUsIGJvb2wgX19zYXZlKQp7CiAgaWYgKCEgY2hlY2tfcmVhbGxvYyAoX19zaXpl KSkKICAgIHJldHVybjsKCiAgUmVwICpwID0gUmVwOjpjcmVhdGUgKF9fc2l6ZSk7CgogIGlmIChf X3NhdmUpCiAgICB7CiAgICAgIHAtPmNvcHkgKDAsIGRhdGEgKCksIGxlbmd0aCAoKSk7CiAgICAg IHAtPmxlbiA9IGxlbmd0aCAoKTsKICAgIH0KICBlbHNlCiAgICBwLT5sZW4gPSAwOwoKICByZXB1 cCAocCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxv Y2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYKYmFzaWNfc3Ry aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoc2l6ZV90eXBlIHBvczEs IHNpemVfdHlwZSBuMSwKCSBjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvczIs IHNpemVfdHlwZSBuMikKewogIGNvbnN0IHNpemVfdCBsZW4yID0gc3RyLmxlbmd0aCAoKTsKCiAg aWYgKHBvczEgPT0gMCAmJiBuMSA+PSBsZW5ndGggKCkgJiYgcG9zMiA9PSAwICYmIG4yID49IGxl bjIpCiAgICByZXR1cm4gb3BlcmF0b3I9IChzdHIpOwoKICBkbyB7IGlmICggcG9zMiA+IGxlbjIg KSBfX291dF9vZl9yYW5nZSAoInBvczIgPiBsZW4yIik7IH0gd2hpbGUgKDApIDsKCiAgaWYgKG4y ID4gbGVuMiAtIHBvczIpCiAgICBuMiA9IGxlbjIgLSBwb3MyOwoKICByZXR1cm4gcmVwbGFjZSAo cG9zMSwgbjEsIHN0ci5kYXRhICgpICsgcG9zMiwgbjIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hh clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9pZCBiYXNpY19zdHJp bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CmNvcHkgKHNpemVfdCBwb3MsIGNv bnN0IGNoYXJUICpzLCBzaXplX3QgbikKewogIGlmIChuKQogICAgdHJhaXRzOjpjb3B5IChkYXRh ICgpICsgcG9zLCBzLCBuKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs IGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz LCBBbGxvY2F0b3I+OjpSZXA6Ogptb3ZlIChzaXplX3QgcG9zLCBjb25zdCBjaGFyVCAqcywgc2l6 ZV90IG4pCnsKICBpZiAobikKICAgIHRyYWl0czo6bW92ZSAoZGF0YSAoKSArIHBvcywgcywgbik7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+ CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYKYmFzaWNfc3RyaW5nIDxj aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90 eXBlIG4xLCBjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4yKQp7CiAgY29uc3Qgc2l6ZV90eXBl IGxlbiA9IGxlbmd0aCAoKTsKICBkbyB7IGlmICggcG9zID4gbGVuICkgX19vdXRfb2ZfcmFuZ2Ug KCJwb3MgPiBsZW4iKTsgfSB3aGlsZSAoMCkgOwogIGlmIChuMSA+IGxlbiAtIHBvcykKICAgIG4x ID0gbGVuIC0gcG9zOwogIGRvIHsgaWYgKCBsZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIgKSBf X2xlbmd0aF9lcnJvciAoImxlbiAtIG4xID4gbWF4X3NpemUgKCkgLSBuMiIpOyB9IHdoaWxlICgw KSA7CiAgc2l6ZV90IG5ld2xlbiA9IGxlbiAtIG4xICsgbjI7CgogIGlmIChjaGVja19yZWFsbG9j IChuZXdsZW4pKQogICAgewogICAgICBSZXAgKnAgPSBSZXA6OmNyZWF0ZSAobmV3bGVuKTsKICAg ICAgcC0+Y29weSAoMCwgZGF0YSAoKSwgcG9zKTsKICAgICAgcC0+Y29weSAocG9zICsgbjIsIGRh dGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7CiAgICAgIHAtPmNvcHkgKHBvcywg cywgbjIpOwogICAgICByZXB1cCAocCk7CiAgICB9CiAgZWxzZQogICAgewogICAgICByZXAgKCkt Pm1vdmUgKHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwog ICAgICByZXAgKCktPmNvcHkgKHBvcywgcywgbjIpOwogICAgfQogIHJlcCAoKS0+bGVuID0gbmV3 bGVuOwoKICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJh aXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSB2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy YWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKc2V0IChzaXplX3QgcG9zLCBjb25zdCBjaGFyVCBjLCBz aXplX3QgbikKewogIHRyYWl0czo6c2V0ICAoZGF0YSAoKSArIHBvcywgYywgbik7Cn0KCnRlbXBs YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0 cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh aXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBz aXplX3R5cGUgbjIsIGNoYXJUIGMpCnsKICBjb25zdCBzaXplX3QgbGVuID0gbGVuZ3RoICgpOwog IGRvIHsgaWYgKCBwb3MgPiBsZW4gKSBfX291dF9vZl9yYW5nZSAoInBvcyA+IGxlbiIpOyB9IHdo aWxlICgwKSA7CiAgaWYgKG4xID4gbGVuIC0gcG9zKQogICAgbjEgPSBsZW4gLSBwb3M7CiAgZG8g eyBpZiAoIGxlbiAtIG4xID4gbWF4X3NpemUgKCkgLSBuMiApIF9fbGVuZ3RoX2Vycm9yICgibGVu IC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yIik7IH0gd2hpbGUgKDApIDsKICBzaXplX3QgbmV3bGVu ID0gbGVuIC0gbjEgKyBuMjsKCiAgaWYgKGNoZWNrX3JlYWxsb2MgKG5ld2xlbikpCiAgICB7CiAg ICAgIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChuZXdsZW4pOwogICAgICBwLT5jb3B5ICgwLCBkYXRh ICgpLCBwb3MpOwogICAgICBwLT5jb3B5IChwb3MgKyBuMiwgZGF0YSAoKSArIHBvcyArIG4xLCBs ZW4gLSAocG9zICsgbjEpKTsKICAgICAgcC0+c2V0ICAocG9zLCBjLCBuMik7CiAgICAgIHJlcHVw IChwKTsKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIHJlcCAoKS0+bW92ZSAocG9zICsgbjIsIGRh dGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7CiAgICAgIHJlcCAoKS0+c2V0ICAo cG9zLCBjLCBuMik7CiAgICB9CiAgcmVwICgpLT5sZW4gPSBuZXdsZW47CgogIHJldHVybiAqdGhp czsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv cj4Kdm9pZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZXNpemUg KHNpemVfdHlwZSBuLCBjaGFyVCBjKQp7CiAgZG8geyBpZiAoIG4gPiBtYXhfc2l6ZSAoKSApIF9f bGVuZ3RoX2Vycm9yICgibiA+IG1heF9zaXplICgpIik7IH0gd2hpbGUgKDApIDsKCiAgaWYgKG4g PiBsZW5ndGggKCkpCiAgICBhcHBlbmQgKG4gLSBsZW5ndGggKCksIGMpOwogIGVsc2UKICAgIGVy YXNlIChuKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs bG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5 cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKY29weSAoY2hhclQq IHMsIHNpemVfdHlwZSBuLCBzaXplX3R5cGUgcG9zKSBjb25zdAp7CiAgZG8geyBpZiAoIHBvcyA+ IGxlbmd0aCAoKSApIF9fb3V0X29mX3JhbmdlICgicG9zID4gbGVuZ3RoICgpIik7IH0gd2hpbGUg KDApIDsKCiAgaWYgKG4gPiBsZW5ndGggKCkgLSBwb3MpCiAgICBuID0gbGVuZ3RoICgpIC0gcG9z OwoKICB0cmFpdHM6OmNvcHkgKHMsIGRhdGEgKCkgKyBwb3MsIG4pOwogIHJldHVybiBuOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNp Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJp bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kIChjb25zdCBjaGFyVCogcywgc2l6 ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBzaXplX3QgeHBvcyA9IHBvczsKICBm b3IgKDsgeHBvcyArIG4gPD0gbGVuZ3RoICgpOyArK3hwb3MpCiAgICBpZiAodHJhaXRzOjplcSAo ZGF0YSAoKSBbeHBvc10sICpzKQoJJiYgdHJhaXRzOjpjb21wYXJlIChkYXRhICgpICsgeHBvcywg cywgbikgPT0gMCkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRl IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNp Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJp bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpfZmluZCAoY29uc3QgY2hhclQqIHB0ciwg Y2hhclQgYywgc2l6ZV90eXBlIHhwb3MsIHNpemVfdHlwZSBsZW4pCnsKICBmb3IgKDsgeHBvcyA8 IGxlbjsgKyt4cG9zKQogICAgaWYgKHRyYWl0czo6ZXEgKHB0ciBbeHBvc10sIGMpKQogICAgICBy ZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFz cyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB bGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0 b3I+OjoKZmluZCAoY2hhclQgYywgc2l6ZV90eXBlIHBvcykgY29uc3QKewogIHJldHVybiBfZmlu ZCAoZGF0YSAoKSwgYywgcG9zLCBsZW5ndGggKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQs IGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp dHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs bG9jYXRvcj46OgpyZmluZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlw ZSBuKSBjb25zdAp7CiAgaWYgKG4gPiBsZW5ndGggKCkpCiAgICByZXR1cm4gbnBvczsKCiAgc2l6 ZV90IHhwb3MgPSBsZW5ndGggKCkgLSBuOwogIGlmICh4cG9zID4gcG9zKQogICAgeHBvcyA9IHBv czsKCiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7ICkKICAgIGlmICh0cmFpdHM6OmVxIChkYXRh ICgpIFt4cG9zXSwgKnMpCgkmJiB0cmFpdHM6OmNvbXBhcmUgKGRhdGEgKCkgKyB4cG9zLCBzLCBu KSA9PSAwKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNs YXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxj aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwg dHJhaXRzLCBBbGxvY2F0b3I+OjoKcmZpbmQgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MpIGNvbnN0 CnsKICBpZiAoMSA+IGxlbmd0aCAoKSkKICAgIHJldHVybiBucG9zOwoKICBzaXplX3QgeHBvcyA9 IGxlbmd0aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwoKICBmb3Ig KCsreHBvczsgeHBvcy0tID4gMDsgKQogICAgaWYgKHRyYWl0czo6ZXEgKGRhdGEgKCkgW3hwb3Nd LCBjKSkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFz cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hh clQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRy YWl0cywgQWxsb2NhdG9yPjo6CmZpbmRfZmlyc3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5 cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIHNpemVfdCB4cG9zID0gcG9zOwogIGZvciAo OyB4cG9zIDwgbGVuZ3RoICgpOyArK3hwb3MpCiAgICBpZiAoX2ZpbmQgKHMsIGRhdGEgKCkgW3hw b3NdLCAwLCBuKSAhPSBucG9zKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoK dGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFz aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3Ry aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9sYXN0X29mIChjb25zdCBjaGFy VCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBpZiAobGVuZ3RoKCkg PT0gMCkKICAgIHJldHVybiBucG9zOwogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gMTsKICBp ZiAoeHBvcyA+IHBvcykKICAgIHhwb3MgPSBwb3M7CiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7 KQogICAgaWYgKF9maW5kIChzLCBkYXRhICgpIFt4cG9zXSwgMCwgbikgIT0gbnBvcykKICAgICAg cmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xh c3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg QWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh dG9yPjo6CmZpbmRfZmlyc3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywg c2l6ZV90eXBlIG4pIGNvbnN0CnsKICBzaXplX3QgeHBvcyA9IHBvczsKICBmb3IgKDsgeHBvcyA8 IGxlbmd0aCAoKTsgKyt4cG9zKQogICAgaWYgKF9maW5kIChzLCBkYXRhICgpIFt4cG9zXSwgMCwg bikgPT0gbnBvcykKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRl IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmlu ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hh clQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmRfZmlyc3Rfbm90X29mIChjaGFyVCBjLCBzaXpl X3R5cGUgcG9zKSBjb25zdAp7CiAgc2l6ZV90IHhwb3MgPSBwb3M7CiAgZm9yICg7IHhwb3MgPCBs ZW5ndGggKCk7ICsreHBvcykKICAgIGlmICh0cmFpdHM6Om5lIChkYXRhICgpIFt4cG9zXSwgYykp CiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hh clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0 cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs IEFsbG9jYXRvcj46OgpmaW5kX2xhc3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBl IHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBpZiAobGVuZ3RoKCkgPT0gMCkKICAgIHJldHVy biBucG9zOwogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gMTsKICBpZiAoeHBvcyA+IHBvcykK ICAgIHhwb3MgPSBwb3M7CiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7KQogICAgaWYgKF9maW5k IChzLCBkYXRhICgpIFt4cG9zXSwgMCwgbikgPT0gbnBvcykKICAgICAgcmV0dXJuIHhwb3M7CiAg cmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz cyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6 ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmRfbGFz dF9ub3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MpIGNvbnN0CnsKICBpZiAobGVuZ3RoKCkg PT0gMCkKICAgIHJldHVybiBucG9zOwogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gMTsKICBp ZiAoeHBvcyA+IHBvcykKICAgIHhwb3MgPSBwb3M7CiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7 KQogICAgaWYgKHRyYWl0czo6bmUgKGRhdGEgKCkgW3hwb3NdLCBjKSkKICAgICAgcmV0dXJuIHhw b3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRz LCBjbGFzcyBBbGxvY2F0b3I+CmludCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j YXRvcj46Ogpjb21wYXJlIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcywg c2l6ZV90eXBlIG4pIGNvbnN0CnsKICBkbyB7IGlmICggcG9zID4gbGVuZ3RoICgpICkgX19vdXRf b2ZfcmFuZ2UgKCJwb3MgPiBsZW5ndGggKCkiKTsgfSB3aGlsZSAoMCkgOwoKICBzaXplX3Qgcmxl biA9IGxlbmd0aCAoKSAtIHBvczsKICBpZiAocmxlbiA+IG4pCiAgICBybGVuID0gbjsKICBpZiAo cmxlbiA+IHN0ci5sZW5ndGggKCkpCiAgICBybGVuID0gc3RyLmxlbmd0aCAoKTsKICBpbnQgciA9 IHRyYWl0czo6Y29tcGFyZSAoZGF0YSAoKSArIHBvcywgc3RyLmRhdGEgKCksIHJsZW4pOwogIGlm IChyICE9IDApCiAgICByZXR1cm4gcjsKICBpZiAocmxlbiA9PSBuKQogICAgcmV0dXJuIDA7CiAg cmV0dXJuIChsZW5ndGggKCkgLSBwb3MpIC0gc3RyLmxlbmd0aCAoKTsKfQoKdGVtcGxhdGUgPGNs YXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW50IGJhc2ljX3N0cmlu ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmNvbXBhcmUgKGNvbnN0IGNoYXJUKiBzLCBz aXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIGRvIHsgaWYgKCBwb3MgPiBsZW5n dGggKCkgKSBfX291dF9vZl9yYW5nZSAoInBvcyA+IGxlbmd0aCAoKSIpOyB9IHdoaWxlICgwKSA7 CgogIHNpemVfdCBybGVuID0gbGVuZ3RoICgpIC0gcG9zOwogIGlmIChybGVuID4gbikKICAgIHJs ZW4gPSBuOwogIGludCByID0gdHJhaXRzOjpjb21wYXJlIChkYXRhICgpICsgcG9zLCBzLCBybGVu KTsKICBpZiAociAhPSAwKQogICAgcmV0dXJuIHI7CiAgcmV0dXJuIChsZW5ndGggKCkgLSBwb3Mp IC0gbjsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxs b2NhdG9yPgppc3RyZWFtICYKb3BlcmF0b3I+PiAoaXN0cmVhbSAmaXMsIGJhc2ljX3N0cmluZyA8 Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiAmcykKewogIGludCB3ID0gaXMud2lkdGggKDApOwog IGlmIChpcy5pcGZ4MCAoKSkKICAgIHsKICAgICAgcmVnaXN0ZXIgc3RyZWFtYnVmICpzYiA9IGlz LnJkYnVmICgpOwogICAgICBzLnJlc2l6ZSAoMCk7CiAgICAgIHdoaWxlICgxKQoJewoJICBpbnQg Y2ggPSBzYi0+c2J1bXBjICgpOwoJICBpZiAoY2ggPT0gKC0xKSApCgkgICAgewoJICAgICAgaXMu c2V0c3RhdGUgKGlvczo6ZW9mYml0KTsKCSAgICAgIGJyZWFrOwoJICAgIH0KCSAgZWxzZSBpZiAo dHJhaXRzOjppc19kZWwgKGNoKSkKCSAgICB7CgkgICAgICBzYi0+c3VuZ2V0YyAoKTsKCSAgICAg IGJyZWFrOwoJICAgIH0KCSAgcyArPSBzdGF0aWNfY2FzdDxjaGFyVD4gKGNoKTsKCSAgaWYgKC0t dyA9PSAxKQoJICAgIGJyZWFrOwoJfQogICAgfQoKICBpcy5pc2Z4ICgpOwogIGlmIChzLmxlbmd0 aCAoKSA9PSAwKQogICAgaXMuc2V0c3RhdGUgKGlvczo6ZmFpbGJpdCk7CgogIHJldHVybiBpczsK fQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4K b3N0cmVhbSAmCm9wZXJhdG9yPDwgKG9zdHJlYW0gJm8sIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hh clQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcykKewogIHJldHVybiBvLndyaXRlIChzLmRhdGEgKCks IHMubGVuZ3RoICgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs YXNzIEFsbG9jYXRvcj4KaXN0cmVhbSYKZ2V0bGluZSAoaXN0cmVhbSAmaXMsIGJhc2ljX3N0cmlu ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcywgY2hhclQgZGVsaW0pCnsKICBpZiAoaXMu aXBmeDEgKCkpCiAgICB7CiAgICAgIHNpemVfdCAgIGNvdW50ID0gMDsKICAgICAgc3RyZWFtYnVm ICpzYiA9IGlzLnJkYnVmICgpOwogICAgICBzLnJlc2l6ZSAoMCk7CgogICAgICB3aGlsZSAoMSkK CXsKCSAgaW50IGNoID0gc2ItPnNidW1wYyAoKTsKCSAgaWYgKGNoID09ICgtMSkgKQoJICAgIHsK CSAgICAgIGlzLnNldHN0YXRlIChjb3VudCA9PSAwCgkJCSAgID8gKGlvczo6ZmFpbGJpdHxpb3M6 OmVvZmJpdCkKCQkJICAgOiBpb3M6OmVvZmJpdCk7CgkgICAgICBicmVhazsKCSAgICB9CgoJICAr K2NvdW50OwoKCSAgaWYgKGNoID09IGRlbGltKQoJICAgIGJyZWFrOwoKCSAgcyArPSBzdGF0aWNf Y2FzdDxjaGFyVD4gKGNoKTsKCgkgIGlmIChzLmxlbmd0aCAoKSA9PSBzLm5wb3MgLSAxKQoJICAg IHsKCSAgICAgIGlzLnNldHN0YXRlIChpb3M6OmZhaWxiaXQpOwoJICAgICAgYnJlYWs7CgkgICAg fQoJfQogICAgfQoKICAgCiAgIAogIGlzLmlzZnggKCk7CgogIHJldHVybiBpczsKfQoKdGVtcGxh dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3Ry aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXAKYmFzaWNfc3RyaW5nPGNoYXJULCB0 cmFpdHMsIEFsbG9jYXRvcj46Om5pbFJlcCA9IHsgMCwgMCwgMSwgZmFsc2UgfTsKCnRlbXBsYXRl IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmNvbnN0IGJhc2lj X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmlu ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6bnBvczsKCn0gIAojIDY1MyAiL3Vzci9saWIv Z2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr Ky0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCgoKIyA2ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFu ZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyaW5nIiAyIDMK CgpleHRlcm4gIkMrKyIgewp0eXBlZGVmIGJhc2ljX3N0cmluZyA8Y2hhcj4gc3RyaW5nOwoKCgp9 ICAKCgojIDQgIi91L2xwYWdlL3dvcmthcmVhL3Jvb3QvdXNyL3NpbWxhYi9yZWxlYXNlL2F1dG9u b21vdXNTeXN0ZW1zMS4xLjEvaW5jbHVkZS9SYW5nZS5oIiAyCgojIDEgIi91c3IvbGliL2djYy1s aWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9p b3N0cmVhbSIgMSAzCiAKIAoKCgoKCiMgNSAiL3UvbHBhZ2Uvd29ya2FyZWEvcm9vdC91c3Ivc2lt bGFiL3JlbGVhc2UvYXV0b25vbW91c1N5c3RlbXMxLjEuMS9pbmNsdWRlL1JhbmdlLmgiIDIKCiMg MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8u Li9pbmNsdWRlL2crKy0zL2FsZ29yaXRobSIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8u Li8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1h bmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9wYWlyLmgi IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCnRlbXBsYXRlIDxjbGFz cyBfVDEsIGNsYXNzIF9UMj4Kc3RydWN0IHBhaXIgewogIHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7 CiAgdHlwZWRlZiBfVDIgc2Vjb25kX3R5cGU7CgogIF9UMSBmaXJzdDsKICBfVDIgc2Vjb25kOwog IHBhaXIoKSA6IGZpcnN0KF9UMSgpKSwgc2Vjb25kKF9UMigpKSB7fQogIHBhaXIoY29uc3QgX1Qx JiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0KF9fYSksIHNlY29uZChfX2IpIHt9CgoKICB0 ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+CiAgcGFpcihjb25zdCBwYWlyPF9VMSwgX1Uy PiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNlY29uZChfX3Auc2Vjb25kKSB7fQoKfTsKCnRl bXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z dCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7IAogIHJl dHVybiBfX3guZmlyc3QgPT0gX195LmZpcnN0ICYmIF9feC5zZWNvbmQgPT0gX195LnNlY29uZDsg Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8 KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsg CiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8fCAKICAgICAgICAgKCEoX195LmZpcnN0 IDwgX194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNlY29uZCk7IAp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIoY29u c3QgX1QxJiBfX3gsIGNvbnN0IF9UMiYgX195KQp7CiAgcmV0dXJuIHBhaXI8X1QxLCBfVDI+KF9f eCwgX195KTsKfQoKIAoKCgogCiAKIAojIDQyICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJh a2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgi IDIgMwoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMv Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy90eXBlX3RyYWl0cy5oIiAxIDMKIAoKCgoKCgoKCgoK CgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgX190cnVl X3R5cGUgewp9OwoKc3RydWN0IF9fZmFsc2VfdHlwZSB7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7IAogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgICB0aGlz X2R1bW15X21lbWJlcl9tdXN0X2JlX2ZpcnN0OwogICAgICAgICAgICAgICAgICAgIAoKCgoKCiAg ICAKCgoKCgoKCgogCgogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZh dWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlhbF9j b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlhbF9h c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlh bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsK CgoKIAogCiAKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9vbD4gewogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBf X3R5cGVfdHJhaXRzPGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2 aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9 OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNoYXI+IHsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlw ZV90cmFpdHM8dW5zaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190 cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5 cGU7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3Qg X190eXBlX3RyYWl0czxzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2 aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190 cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7 Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBzaG9ydD4gewog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3Qg X190eXBlX3RyYWl0czxpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2 aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9 OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgaW50PiB7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5 cGVfdHJhaXRzPGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9k ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxf YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoK dGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5 cGVfdHJhaXRzPGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2 aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190 cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7 Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nIGxvbmc+ IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+ICBz dHJ1Y3QgX190eXBlX3RyYWl0czxmbG9hdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9E X3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxkb3VibGU+IHsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9f dHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90 eXBlOwp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0czxfVHAq PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCiMgMjk1ICIvdXNyL2xp Yi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv ZysrLTMvdHlwZV90cmFpdHMuaCIgMwoKCgogCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVj dCBfSXNfaW50ZWdlciB7CiAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0 ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8Ym9vbD4gewogIHR5cGVkZWYgX190cnVlX3R5 cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8Y2hhcj4g ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0 IF9Jc19pbnRlZ2VyPHNpZ25lZCBjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdy YWw7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4gewog IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3Qg X0lzX2ludGVnZXI8d2NoYXJfdD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9 OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9f dHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjx1 bnNpZ25lZCBzaG9ydD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVt cGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPGludD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGlu dD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiAgc3Ry dWN0IF9Jc19pbnRlZ2VyPGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK fTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nPiB7CiAgdHlw ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNf aW50ZWdlcjxsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsK CnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKCgogCiAKIAojIDQ1ICIvdXNyL2xp Yi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv ZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYt bWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvbGltaXRzLmgiIDEgMwogCgoKIAoKCgoKCiAK IyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUv c3lzbGltaXRzLmgiIDEgMwogCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJh a2UtbGludXgvMi45NS4zL2luY2x1ZGUvbGltaXRzLmgiIDEgMwogCgoKIAoKIyAxMTQgIi91c3Iv bGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9saW1pdHMuaCIg MwoKCgojIDEgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgog CgoKCgoKCgoKCiAKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDEgMwogCgoK CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgogCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoK IAoKCgogCgoKIAoKCiAKCgogCgoKIAoKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoK CiAKCgogCgoKIAoKCiAKCgoKIAoKCiAKCgogCgoKIAoKCiAKCgoKIAojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAojIDEg Ii91c3IvaW5jbHVkZS9saW51eC9saW1pdHMuaCIgMSAzCgoKCgoKCgoKCgoKCgoKCgoKCgojIDI3 ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzCgoKIAoKCgoKCiAKCiAKCgogCgog CgoKIAoKIAoKCiAKCgoKIAoKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIg MiAzCgoKCgoKCgoKIAoKCgoKCgoKIyAzMCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoK CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoK CgoKCiAKCgoKCgoKCiAKCgogCgoKIAoKCiAKCgogCgoKCgogCgoKCgogCgoKCiAKCgogCgoKCiAK CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIyAzNCAiL3Vzci9pbmNs dWRlL2xpbWl0cy5oIiAyIDMKCgoKCgoKCgogCgoKCgoKIAoKIyAxMjEgIi91c3IvaW5jbHVkZS9s aW1pdHMuaCIgMwoKCgoKICAKCgoKCgoKCgojIDExNyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1h bmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKCiMgNyAiL3Vzci9s aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N5c2xpbWl0cy5o IiAyIDMKCgojIDExICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4z L2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgoKCiAKCgoKIAoKCgogCgoKCgogCgoKCgoKIAoKCgog CgoKCgoKCgoKCgoKCiAKCiAKCgoKCiAKCgoKIAoKCgoKCgoKCiAKCgoKIAoKCgoKCgoKCgoKCgoK IAoKCgojIDEwNyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9p bmNsdWRlL2xpbWl0cy5oIiAzCgoKCgogCgoKCgoKCgoKCiMgNDkgIi91c3IvbGliL2djYy1saWIv aTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxf YWxnb2Jhc2UuaCIgMiAzCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGlu dXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0MiAiL3Vzci9saWIvZ2NjLWxpYi9p NTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgojIDUxICIvdXNy L2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1 ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYt bWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvbmV3LmgiIDEgMwogCgoKCgoKCnVzaW5nIHN0 ZDo6bmV3X2hhbmRsZXI7CnVzaW5nIHN0ZDo6c2V0X25ld19oYW5kbGVyOwoKCiMgNTIgIi91c3Iv bGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk ZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCgoKCgogCgogCgp0ZW1wbGF0ZSA8Y2xhc3Mg X0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwgY2xhc3MgX1RwPgppbmxpbmUgdm9p ZCBfX2l0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IsIF9UcCop IHsKICBfVHAgX190bXAgPSAqX19hOwogICpfX2EgPSAqX19iOwogICpfX2IgPSBfX3RtcDsKfQoK dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+CmlubGlu ZSB2b2lkIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpIHsK ICBfX2l0ZXJfc3dhcChfX2EsIF9fYiwgX192YWx1ZV90eXBlKCBfX2EgKSApOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikgewogIF9U cCBfX3RtcCA9IF9fYTsKICBfX2EgPSBfX2I7CiAgX19iID0gX190bXA7Cn0KCiAKIAoKCgoKCgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2Es IGNvbnN0IF9UcCYgX19iKSB7CiAgcmV0dXJuIF9fYiA8IF9fYSA/IF9fYiA6IF9fYTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBj b25zdCBfVHAmIF9fYikgewogIHJldHVybiAgX19hIDwgX19iID8gX19iIDogX19hOwp9CgoKCnRl bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtaW4o Y29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKICByZXR1 cm4gX19jb21wKF9fYiwgX19hKSA/IF9fYiA6IF9fYTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg Y2xhc3MgX0NvbXBhcmU+CmlubGluZSBjb25zdCBfVHAmIG1heChjb25zdCBfVHAmIF9fYSwgY29u c3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkgewogIHJldHVybiBfX2NvbXAoX19hLCBfX2Ip ID8gX19iIDogX19hOwp9CgogCiAKCiAKIAogCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1 dEl0ZXIgX19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yICggOyBf X2ZpcnN0ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytfX2ZpcnN0KQogICAgKl9fcmVzdWx0ID0g Kl9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfT3V0 cHV0SXRlcgpfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19sYXN0LAogICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIHJhbmRvbV9hY2Nlc3NfaXRl cmF0b3JfdGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yIChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0g X19maXJzdDsgX19uID4gMDsgLS1fX24pIHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAg KytfX2ZpcnN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1RwKgpfX2NvcHlfdHJpdmlhbChjb25zdCBfVHAqIF9f Zmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgbWVtbW92ZShfX3Jl c3VsdCwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJldHVy biBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9Cb29sVHlwZT4Kc3RydWN0IF9fY29w eV9kaXNwYXRjaCB7CiAgc3RhdGljIF9PdXRwdXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl ciBfX3Jlc3VsdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0 SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9DYXRlZ29yeTsKICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwog ICAgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfQ2F0ZWdvcnkoKSwg KF9EaXN0YW5jZSopIDApOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX2Nv cHlfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CnsKICBzdGF0aWMgX1RwKiBjb3B5 KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsK ICAgIHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9 Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2Rpc3BhdGNoPGNvbnN0IF9U cCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9f Zmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19j b3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgfQp9OwoKdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIg Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9UcDsKICB0eXBlZGVmIHR5cGVu YW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgog ICAgICAgICAgX1RyaXZpYWw7CiAgcmV0dXJuIF9fY29weV9kaXNwYXRjaDxfSW5wdXRJdGVyLCBf T3V0cHV0SXRlciwgX1RyaXZpYWw+CiAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs dCk7Cn0KCiMgMjEzICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4z Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDMKCgogCiAKCnRlbXBs YXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIy LCAKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcjIg X19jb3B5X2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwgCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFz dCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19s YXN0KQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRl ciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyIF9fY29weV9iYWNr d2FyZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCAKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNz X2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9f biA+IDA7IC0tX19uKQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVz dWx0Owp9CgoKCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBj bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0Jvb2xUeXBlPgpzdHJ1 Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXIxPjo6aXRlcmF0b3JfY2F0ZWdvcnkgCiAgICAgICAg ICBfQ2F0OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFs SXRlcjE+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZTsKCiAgc3RhdGljIF9C aWRpcmVjdGlvbmFsSXRlcjIgY29weShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3Qs IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBf X3Jlc3VsdCkgewogICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9f cmVzdWx0LCBfQ2F0KCksIChfRGlzdGFuY2UqKSAwKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwPgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90 eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCog X19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9fbGFz dCAtIF9fZmlyc3Q7CiAgICBtZW1tb3ZlKF9fcmVzdWx0IC0gX051bSwgX19maXJzdCwgc2l6ZW9m KF9UcCkgKiBfTnVtKTsKICAgIHJldHVybiBfX3Jlc3VsdCAtIF9OdW07CiAgfQp9OwoKdGVtcGxh dGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAq LCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2Zp cnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAgcmV0dXJuICBfX2Nv cHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICAgIDo6Y29w eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JJ MSwgY2xhc3MgX0JJMj4KaW5saW5lIF9CSTIgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9C STEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh aXRzPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAgICAg ICAgICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAg ICBfVHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIs IF9Ucml2aWFsPgogICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0 KTsKfQoKIyAzMDMgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMv Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMwoKCiAKIAoKdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KcGFp cjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4gX19jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBf U2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0 cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgZm9yICggOyBfX2NvdW50ID4gMDsgLS1fX2NvdW50KSB7 CiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICAgICsrX19yZXN1bHQ7 CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPihfX2ZpcnN0LCBfX3Jl c3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUkFJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091 dHB1dEl0ZXI+CmlubGluZSBwYWlyPF9SQUl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfUkFJ dGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0 LAogICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SQUl0ZXIgX19sYXN0 ID0gX19maXJzdCArIF9fY291bnQ7CiAgcmV0dXJuIHBhaXI8X1JBSXRlciwgX091dHB1dEl0ZXI+ KF9fbGFzdCwgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBw YWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3Qs IF9TaXplIF9fY291bnQsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fY29weV9u KF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9y X2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs YXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091 dHB1dEl0ZXI+CmNvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsIF9PdXRw dXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9f cmVzdWx0KTsKfQoKIAogCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1Rw Pgp2b2lkIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNv bnN0IF9UcCYgX192YWx1ZSkgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz dCkKICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJdGVy LCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciBmaWxsX24oX091dHB1dEl0ZXIg X19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUpIHsKICBmb3IgKCA7IF9fbiA+ IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9fdmFsdWU7CiAgcmV0dXJuIF9f Zmlyc3Q7Cn0KCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ dGVyMj4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIx IF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0 SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J bnB1dEl0ZXIyIF9fZmlyc3QyKSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgKl9f Zmlyc3QxID09ICpfX2ZpcnN0MikgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAg fQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmly c3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwg Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1p c21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAg d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpf X2ZpcnN0MikpIHsKICAgICsrX19maXJzdDE7CiAgICArK19fZmlyc3QyOwogIH0KICByZXR1cm4g cGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmlubGluZSBib29s IGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAg ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikgewogIGZvciAoIDsgX19maXJzdDEgIT0g X19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIGlmICgqX19maXJzdDEgIT0gKl9f Zmlyc3QyKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVkaWNh dGU+CmlubGluZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf X2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0JpbmFyeVBy ZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyAr K19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwg Kl9fZmlyc3QyKSkKICAgICAgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9CgogCiAKIAoK dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KYm9vbCBsZXhp Y29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg X0lucHV0SXRlcjIgX19sYXN0MikgewogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBf X2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAg ICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmICgq X19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIF9f Zmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKfQoKdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0NvbXBhcmU+CmJvb2wg bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz dDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Nv bXBhcmUgX19jb21wKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy ICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlmIChf X2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChf X2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJl dHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7Cn0KCmlubGlu ZSBib29sIApsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2Zp cnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0 MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIs CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCnsK ICBjb25zdCBzaXplX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmlyc3QxOwogIGNvbnN0IHNpemVf dCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVt Y21wKF9fZmlyc3QxLCBfX2ZpcnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7CiAgcmV0dXJuIF9f cmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7Cn0KCmlubGluZSBi b29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBj aGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikKewoKICByZXR1cm4gbGV4aWNvZ3Jh cGhpY2FsX2NvbXBhcmUoKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3Qy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBf X2xhc3QyKTsKCgoKCgoKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5w dXRJdGVyMj4KaW50IF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBf X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKewogIHdo aWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlm ICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiAtMTsKICAgIGlmICgqX19maXJz dDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiAxOwogICAgKytfX2ZpcnN0MTsKICAgICsrX19m aXJzdDI7CiAgfQogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKSB7CiAgICByZXR1cm4gIShfX2Zp cnN0MSA9PSBfX2xhc3QxKTsKICB9CiAgZWxzZSB7CiAgICByZXR1cm4gLTE7CiAgfQp9Cgppbmxp bmUgaW50Cl9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCB1bnNpZ25lZCBjaGFy KiBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk IGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp Z25lZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCnsKICBjb25zdCBwdHJkaWZmX3QgX19sZW4xID0gX19s YXN0MSAtIF9fZmlyc3QxOwogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19m aXJzdDI7CiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0Miwg bWluKF9fbGVuMSwgX19sZW4yKSk7CiAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCAK ICAgICAgICAgICAgICAgICAgICAgICA6IChfX2xlbjEgPT0gX19sZW4yID8gMCA6IChfX2xlbjEg PCBfX2xlbjIgPyAtMSA6IDEpKTsKfQoKaW5saW5lIGludCAKX19sZXhpY29ncmFwaGljYWxfY29t cGFyZV8zd2F5KGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNo YXIqIF9fbGFzdDIpCnsKCiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheSgK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2Zp cnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIq KSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQg Y2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBz aWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl cjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShf SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFz dDIpCnsKICByZXR1cm4gX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9fZmlyc3QxLCBf X2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7Cn0KCiAKCgoKIAogCiAKIyAzMCAiL3Vzci9saWIv Z2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr Ky0zL2FsZ29yaXRobSIgMiAzCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1s aW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uc3RydWN0LmgiIDEg MwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIAoKIAogCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBkZXN0cm95KF9UcCogX19wb2ludGVyKSB7CiAgX19wb2lu dGVyLT5+X1RwKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIHZv aWQgY29uc3RydWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpIHsKICBuZXcgKF9fcCkg X1QxKF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgppbmxpbmUgdm9pZCBjb25zdHJ1 Y3QoX1QxKiBfX3ApIHsKICBuZXcgKF9fcCkgX1QxKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9y d2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZApfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3Ig X19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKewogIGZvciAo IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGRlc3Ryb3koJipfX2ZpcnN0KTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lkIF9fZGVzdHJv eV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX190cnVlX3R5cGUpIHt9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgppbmxpbmUgdm9p ZApfX2Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9f bGFzdCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNf dHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAgICBfVHJpdmlhbF9kZXN0cnVjdG9yOwogIF9fZGVz dHJveV9hdXgoX19maXJzdCwgX19sYXN0LCBfVHJpdmlhbF9kZXN0cnVjdG9yKCkpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQgZGVzdHJveShfRm9yd2Fy ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CiAgX19kZXN0cm95 KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKaW5saW5lIHZv aWQgZGVzdHJveShjaGFyKiwgY2hhciopIHt9CmlubGluZSB2b2lkIGRlc3Ryb3kod2NoYXJfdCos IHdjaGFyX3QqKSB7fQoKIAoKCgogCiAKIAojIDMxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFu ZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxnb3JpdGhtIiAy IDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8u Li8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwogCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCiAKCiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyIApfX3VuaW5pdGlh bGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg ICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIGNvcHkoX19maXJzdCwgX19sYXN0 LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2Fy ZEl0ZXI+Cl9Gb3J3YXJkSXRlciAKX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9y d2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUp CnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKICB0cnkgIHsKICAgIGZvciAoIDsg X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX2N1cikKICAgICAgY29uc3RydWN0KCYq X19jdXIsICpfX2ZpcnN0KTsKICAgIHJldHVybiBfX2N1cjsKICB9CiAgY2F0Y2goLi4uKSB7ICBk ZXN0cm95KF9fcmVzdWx0LCBfX2N1cikgOyB0aHJvdzsgfSA7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2Fy ZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfVHAq KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46OmlzX1BPRF90eXBlIF9J c19QT0Q7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3Qs IF9fcmVzdWx0LCBfSXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh c3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCiAgdW5pbml0aWFsaXplZF9jb3B5 KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29w eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3ZhbHVlX3R5cGUoIF9fcmVzdWx0ICkgKTsKfQoKaW5saW5lIGNoYXIqIHVuaW5pdGlhbGl6 ZWRfY29weShjb25zdCBjaGFyKiBfX2ZpcnN0LCBjb25zdCBjaGFyKiBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogX19yZXN1bHQpIHsKICBtZW1tb3ZlKF9fcmVz dWx0LCBfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKICByZXR1cm4gX19yZXN1bHQgKyAoX19s YXN0IC0gX19maXJzdCk7Cn0KCmlubGluZSB3Y2hhcl90KiAKdW5pbml0aWFsaXplZF9jb3B5KGNv bnN0IHdjaGFyX3QqIF9fZmlyc3QsIGNvbnN0IHdjaGFyX3QqIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgIHdjaGFyX3QqIF9fcmVzdWx0KQp7CiAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwg c2l6ZW9mKHdjaGFyX3QpICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICByZXR1cm4gX19yZXN1bHQg KyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj bGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgpwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJk SXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9f Y291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAg ICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIF9Gb3J3YXJkSXRlciBf X2N1ciA9IF9fcmVzdWx0OwogIHRyeSAgewogICAgZm9yICggOyBfX2NvdW50ID4gMCA7IC0tX19j b3VudCwgKytfX2ZpcnN0LCArK19fY3VyKSAKICAgICAgY29uc3RydWN0KCYqX19jdXIsICpfX2Zp cnN0KTsKICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwg X19jdXIpOwogIH0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3koX19yZXN1bHQsIF9fY3VyKSA7IHRo cm93OyB9IDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfU2l6 ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFpcjxfUmFuZG9tQWNjZXNzSXRlciwgX0Zv cndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn KSB7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0ID0gX19maXJzdCArIF9fY291bnQ7CiAgcmV0 dXJuIHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4oCiAgICAgICAgICAgICAg ICAgX19sYXN0LAogICAgICAgICAgICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBf X2xhc3QsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBf U2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2Fy ZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBf X2NvdW50LAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpIHsKICBy ZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3VsdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2Zp cnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFz cyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4KdW5p bml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAg ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpIHsKICByZXR1cm4gX191bmlu aXRpYWxpemVkX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3VsdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKfQoK IAogCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQK X191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0 ZXIgX19sYXN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX3Ry dWVfdHlwZSkKewogIGZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CnZvaWQKX191bmluaXRpYWxpemVkX2ZpbGxfYXV4 KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCAKICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0 ZXIgX19jdXIgPSBfX2ZpcnN0OwogIHRyeSAgewogICAgZm9yICggOyBfX2N1ciAhPSBfX2xhc3Q7 ICsrX19jdXIpCiAgICAgIGNvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogIH0KICBjYXRjaCguLi4p IHsgIGRlc3Ryb3koX19maXJzdCwgX19jdXIpIDsgdGhyb3c7IH0gOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CmlubGluZSB2b2lkIF9fdW5p bml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gsIF9UcDEq KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19QT0RfdHlwZSBf SXNfUE9EOwogIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwg X0lzX1BPRCgpKTsKICAgICAgICAgICAgICAgICAgIAp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh cmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkIHVuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2Fy ZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl ciBfX2xhc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gp CnsKICBfX3VuaW5pdGlhbGl6ZWRfZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX192YWx1ZV90 eXBlKCBfX2ZpcnN0ICkgKTsKfQoKIAogCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs YXNzIF9TaXplLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVk X2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIGZp bGxfbihfX2ZpcnN0LCBfX24sIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs IGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmls bF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQp7CiAgX0ZvcndhcmRJdGVy IF9fY3VyID0gX19maXJzdDsKICB0cnkgIHsKICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsr X19jdXIpCiAgICAgIGNvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogICAgcmV0dXJuIF9fY3VyOwog IH0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3koX19maXJzdCwgX19jdXIpIDsgdGhyb3c7IH0gOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwLCBj bGFzcyBfVHAxPgppbmxpbmUgX0ZvcndhcmRJdGVyIApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKF9G b3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194LCBfVHAxKikKewog IHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHAxPjo6aXNfUE9EX3R5cGUgX0lzX1BP RDsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX19maXJzdCwgX19uLCBfX3gs IF9Jc19QT0QoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXpl LCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIgCnVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9G b3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194KQp7CiAgcmV0dXJu IF9fdW5pbml0aWFsaXplZF9maWxsX24oX19maXJzdCwgX19uLCBfX3gsIF9fdmFsdWVfdHlwZSgg X19maXJzdCApICk7Cn0KCiAKIAoKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIx LCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJ dGVyCl9fdW5pbml0aWFsaXplZF9jb3B5X2NvcHkoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1 dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m aXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zv cndhcmRJdGVyIF9fcmVzdWx0KQp7CiAgX0ZvcndhcmRJdGVyIF9fbWlkID0gdW5pbml0aWFsaXpl ZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgdHJ5ICB7CiAgICByZXR1cm4g dW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBfX21pZCk7CiAgfQogIGNhdGNo KC4uLikgeyAgZGVzdHJveShfX3Jlc3VsdCwgX19taWQpIDsgdGhyb3c7IH0gOwp9CgogCiAKIAp0 ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9JbnB1dEl0ZXI+ CmlubGluZSBfRm9yd2FyZEl0ZXIgCl9fdW5pbml0aWFsaXplZF9maWxsX2NvcHkoX0ZvcndhcmRJ dGVyIF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIgX19taWQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgX1RwJiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBf X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCkKewogIHVuaW5pdGlhbGl6ZWRfZmlsbChfX3Jlc3Vs dCwgX19taWQsIF9feCk7CiAgdHJ5ICB7CiAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9f Zmlyc3QsIF9fbGFzdCwgX19taWQpOwogIH0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3koX19yZXN1 bHQsIF9fbWlkKSA7IHRocm93OyB9IDsKfQoKIAogCiAKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0 ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3VuaW5pdGlh bGl6ZWRfY29weV9maWxsKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwK ICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJk SXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQp7 CiAgX0ZvcndhcmRJdGVyIF9fbWlkMiA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19s YXN0MSwgX19maXJzdDIpOwogIHRyeSAgewogICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlkMiwg X19sYXN0MiwgX194KTsKICB9CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fZmlyc3QyLCBfX21p ZDIpIDsgdGhyb3c7IH0gOwp9CgogCgoKCiAKIAogCiMgMzIgIi91c3IvbGliL2djYy1saWIvaTU4 Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9hbGdvcml0 aG0iIDIgMwoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4z Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3RlbXBidWYuaCIgMSAzCiAKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnBhaXI8X1Rw KiwgcHRyZGlmZl90PiAKX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9U cCopCnsKICBpZiAoX19sZW4gPiBwdHJkaWZmX3QoMjE0NzQ4MzY0NyAgIC8gc2l6ZW9mKF9UcCkp KQogICAgX19sZW4gPSAyMTQ3NDgzNjQ3ICAgLyBzaXplb2YoX1RwKTsKCiAgd2hpbGUgKF9fbGVu ID4gMCkgewogICAgX1RwKiBfX3RtcCA9IChfVHAqKSBtYWxsb2MoKHNpemVfdClfX2xlbiAqIHNp emVvZihfVHApKTsKICAgIGlmIChfX3RtcCAhPSAwKQogICAgICByZXR1cm4gcGFpcjxfVHAqLCBw dHJkaWZmX3Q+KF9fdG1wLCBfX2xlbik7CiAgICBfX2xlbiAvPSAyOwogIH0KCiAgcmV0dXJuIHBh aXI8X1RwKiwgcHRyZGlmZl90PigoX1RwKikwLCAwKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgppbmxpbmUgcGFpcjxfVHAqLCBwdHJkaWZmX3Q+IGdldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRp ZmZfdCBfX2xlbikgewogIHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVuLCAoX1Rw KikgMCk7Cn0KCgoKIAogCiAKIAogCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBwYWlyPF9U cCosIHB0cmRpZmZfdD4gZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAq KSB7CiAgcmV0dXJuIF9fZ2V0X3RlbXBvcmFyeV9idWZmZXIoX19sZW4sIChfVHAqKSAwKTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9UcD4Kdm9pZCByZXR1cm5fdGVtcG9yYXJ5X2J1ZmZlcihfVHAqIF9f cCkgewogIGZyZWUoX19wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNs YXNzIF9UcD4KY2xhc3MgX1RlbXBvcmFyeV9idWZmZXIgewpwcml2YXRlOgogIHB0cmRpZmZfdCAg X01fb3JpZ2luYWxfbGVuOwogIHB0cmRpZmZfdCAgX01fbGVuOwogIF9UcCogICAgICAgX01fYnVm ZmVyOwoKICB2b2lkIF9NX2FsbG9jYXRlX2J1ZmZlcigpIHsKICAgIF9NX29yaWdpbmFsX2xlbiA9 IF9NX2xlbjsKICAgIF9NX2J1ZmZlciA9IDA7CgogICAgaWYgKF9NX2xlbiA+IChwdHJkaWZmX3Qp KDIxNDc0ODM2NDcgICAvIHNpemVvZihfVHApKSkKICAgICAgX01fbGVuID0gMjE0NzQ4MzY0NyAg IC8gc2l6ZW9mKF9UcCk7CgogICAgd2hpbGUgKF9NX2xlbiA+IDApIHsKICAgICAgX01fYnVmZmVy ID0gKF9UcCopIG1hbGxvYyhfTV9sZW4gKiBzaXplb2YoX1RwKSk7CiAgICAgIGlmIChfTV9idWZm ZXIpCiAgICAgICAgYnJlYWs7CiAgICAgIF9NX2xlbiAvPSAyOwogICAgfQogIH0KCiAgdm9pZCBf TV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmLCBfX3RydWVfdHlwZSkge30KICB2b2lkIF9N X2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYgdmFsLCBfX2ZhbHNlX3R5cGUpIHsKICAgIHVu aW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2J1ZmZlciwgX01fbGVuLCB2YWwpOwogIH0KCnB1YmxpYzoK ICBwdHJkaWZmX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2xlbjsgfQogIHB0cmRpZmZfdCBy ZXF1ZXN0ZWRfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX29yaWdpbmFsX2xlbjsgfQogIF9UcCog YmVnaW4oKSB7IHJldHVybiBfTV9idWZmZXI7IH0KICBfVHAqIGVuZCgpIHsgcmV0dXJuIF9NX2J1 ZmZlciArIF9NX2xlbjsgfQoKICBfVGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9yIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9f dHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcgogICAgICAg ICAgICBfVHJpdmlhbDsKICAgIHRyeSAgewogICAgICBfTV9sZW4gPSAwOwogICAgICBkaXN0YW5j ZShfX2ZpcnN0LCBfX2xhc3QsIF9NX2xlbik7CiAgICAgIF9NX2FsbG9jYXRlX2J1ZmZlcigpOwog ICAgICBpZiAoX01fbGVuID4gMCkKICAgICAgICBfTV9pbml0aWFsaXplX2J1ZmZlcigqX19maXJz dCwgX1RyaXZpYWwoKSk7CiAgICB9CiAgICBjYXRjaCguLi4pIHsgIGZyZWUoX01fYnVmZmVyKTsg X01fYnVmZmVyID0gMDsgX01fbGVuID0gMCA7IHRocm93OyB9IDsKICB9CiAKICB+X1RlbXBvcmFy eV9idWZmZXIoKSB7ICAKICAgIGRlc3Ryb3koX01fYnVmZmVyLCBfTV9idWZmZXIgKyBfTV9sZW4p OwogICAgZnJlZShfTV9idWZmZXIpOwogIH0KCnByaXZhdGU6CiAgIAogIF9UZW1wb3JhcnlfYnVm ZmVyKGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30KICB2b2lkIG9wZXJhdG9yPShjb25zdCBf VGVtcG9yYXJ5X2J1ZmZlciYpIHt9Cn07CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy YXRvciwgCiAgICAgICAgICBjbGFzcyBfVHAgCgogICAgICAgICAgICAgICAgICAgID0gdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCgogICAgICAg ICA+CnN0cnVjdCB0ZW1wb3JhcnlfYnVmZmVyIDogcHVibGljIF9UZW1wb3JhcnlfYnVmZmVyPF9G b3J3YXJkSXRlcmF0b3IsIF9UcD4KewogIHRlbXBvcmFyeV9idWZmZXIoX0ZvcndhcmRJdGVyYXRv ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKICAgIDogX1RlbXBvcmFyeV9idWZm ZXI8X0ZvcndhcmRJdGVyYXRvciwgX1RwPihfX2ZpcnN0LCBfX2xhc3QpIHt9CiAgfnRlbXBvcmFy eV9idWZmZXIoKSB7fQp9OwogICAgCiAKCgoKIAogCiAKIyAzMyAiL3Vzci9saWIvZ2NjLWxpYi9p NTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2FsZ29y aXRobSIgMiAzCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1 LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnby5oIiAxIDMKIAoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFr ZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaGVhcC5oIiAxIDMK IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xh c3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4Kdm9p ZCAKX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAg IF9EaXN0YW5jZSBfX2hvbGVJbmRleCwgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVl KQp7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIHdoaWxl IChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgKihfX2ZpcnN0ICsgX19wYXJlbnQpIDwgX192 YWx1ZSkgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJl bnQpOwogICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAgIF9fcGFyZW50ID0gKF9faG9sZUlu ZGV4IC0gMSkgLyAyOwogIH0gICAgCiAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1 ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3Rh bmNlLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkIApfX3B1c2hfaGVhcF9hdXgoX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19sYXN0LCBfRGlzdGFuY2UqLCBfVHAqKQp7CiAgX19wdXNoX2hlYXAoX19maXJzdCwgX0Rpc3Rh bmNlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2UoMCksIAogICAgICAgICAgICAg IF9UcCgqKF9fbGFzdCAtIDEpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl cmF0b3I+CmlubGluZSB2b2lkIApwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly c3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsKICBfX3B1c2hfaGVhcF9hdXgoX19m aXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9fZmlyc3Qg KSAsIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t QWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwLCAKICAgICAgICAgIGNs YXNzIF9Db21wYXJlPgp2b2lkCl9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2Zp cnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgIF9EaXN0YW5jZSBfX3RvcElu ZGV4LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQp7CiAgX0Rpc3RhbmNlIF9fcGFyZW50 ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5k ZXggJiYgX19jb21wKCooX19maXJzdCArIF9fcGFyZW50KSwgX192YWx1ZSkpIHsKICAgICooX19m aXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgIF9faG9sZUlu ZGV4ID0gX19wYXJlbnQ7CiAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICB9 CiAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBf RGlzdGFuY2UsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgCl9fcHVzaF9oZWFwX2F1eChfUmFuZG9t QWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCwKICAgICAgICAgICAgICAgIF9EaXN0YW5jZSos IF9UcCopIAp7CiAgX19wdXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKChfX2xhc3QgLSBfX2Zp cnN0KSAtIDEpLCBfRGlzdGFuY2UoMCksIAogICAgICAgICAgICAgIF9UcCgqKF9fbGFzdCAtIDEp KSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xh c3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIApwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICBfQ29tcGFy ZSBfX2NvbXApCnsKICBfX3B1c2hfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0LCBfX2NvbXAsCiAg ICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICwgX192YWx1ZV90eXBl KCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwg Y2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+CnZvaWQgCl9fYWRqdXN0X2hlYXAoX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAg ICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlKQp7CiAgX0Rpc3RhbmNlIF9fdG9wSW5kZXgg PSBfX2hvbGVJbmRleDsKICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRl eCArIDI7CiAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikgewogICAgaWYgKCooX19maXJz dCArIF9fc2Vjb25kQ2hpbGQpIDwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpCiAg ICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19m aXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwog ICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogIH0KICBpZiAoX19z ZWNvbmRDaGlsZCA9PSBfX2xlbikgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihf X2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25k Q2hpbGQgLSAxOwogIH0KICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJ bmRleCwgX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3Is IGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCAKX19wb3BfaGVhcChfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwK ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlLCBf RGlzdGFuY2UqKQp7CiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgX19hZGp1c3RfaGVhcChfX2Zp cnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX192YWx1ZSk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcD4KaW5s aW5lIHZvaWQgCl9fcG9wX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBf UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICBfVHAqKQp7CiAgX19w b3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSAxLCBfX2xhc3QgLSAxLCAKICAgICAgICAgICAgIF9U cCgqKF9fbGFzdCAtIDEpKSwgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHZvaWQgcG9wX2hlYXAoX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICBfUmFuZG9t QWNjZXNzSXRlcmF0b3IgX19sYXN0KQp7CiAgX19wb3BfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0 LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfVHAsIGNsYXNz IF9Db21wYXJlPgp2b2lkCl9fYWRqdXN0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly c3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4s IF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX190b3BJbmRleCA9 IF9faG9sZUluZGV4OwogIF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4 ICsgMjsKICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICBpZiAoX19jb21wKCoo X19maXJzdCArIF9fc2Vjb25kQ2hpbGQpLCAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEp KSkpCiAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9 ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENo aWxkOwogICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogIH0KICBp ZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xlbikgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgp ID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICBfX2hvbGVJbmRleCA9IF9f c2Vjb25kQ2hpbGQgLSAxOwogIH0KICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwg X190b3BJbmRleCwgX192YWx1ZSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B Y2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgCiAgICAgICAgICBjbGFz cyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIApfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRv ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIF9SYW5k b21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCwK ICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgX19hZGp1 c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0 KSwgCiAgICAgICAgICAgICAgICBfX3ZhbHVlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUg dm9pZCAKX19wb3BfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAg ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9UcCosIF9Db21wYXJlIF9f Y29tcCkKewogIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwgX1Rw KCooX19sYXN0IC0gMSkpLCBfX2NvbXAsCiAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9f Zmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFz cyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgCnBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf X2ZpcnN0LAogICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBf X2NvbXApCnsKICAgIF9fcG9wX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBl KCBfX2ZpcnN0ICkgLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCAKX19tYWtlX2hlYXAoX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSopCnsKICBpZiAoX19sYXN0IC0gX19maXJzdCA8 IDIpIHJldHVybjsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogIF9EaXN0 YW5jZSBfX3BhcmVudCA9IChfX2xlbiAtIDIpLzI7CiAgICAKICB3aGlsZSAodHJ1ZSkgewogICAg X19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sIF9UcCgqKF9fZmlyc3QgKyBf X3BhcmVudCkpKTsKICAgIGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47CiAgICBfX3BhcmVudC0t OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHZv aWQgCm1ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yIF9fbGFzdCkKewogIF9fbWFrZV9oZWFwKF9fZmlyc3QsIF9fbGFzdCwKICAgICAg ICAgICAgICBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAsIF9fZGlzdGFuY2VfdHlwZSggX19maXJz dCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9D b21wYXJlLAogICAgICAgICAgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQKX19tYWtl X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRv ciBfX2xhc3QsCiAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCwgX1RwKiwgX0Rpc3RhbmNlKikK ewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikgcmV0dXJuOwogIF9EaXN0YW5jZSBfX2xlbiA9 IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsK ICAgIAogIHdoaWxlICh0cnVlKSB7CiAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50 LCBfX2xlbiwgX1RwKCooX19maXJzdCArIF9fcGFyZW50KSksCiAgICAgICAgICAgICAgICAgIF9f Y29tcCk7CiAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOwogICAgX19wYXJlbnQtLTsKICB9 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJl PgppbmxpbmUgdm9pZCAKbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCAK ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkK ewogIF9fbWFrZV9oZWFwKF9fZmlyc3QsIF9fbGFzdCwgX19jb21wLAogICAgICAgICAgICAgIF9f dmFsdWVfdHlwZSggX19maXJzdCApICwgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4Kdm9pZCBzb3J0X2hlYXAoX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qp CnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCiAgICBwb3BfaGVhcChfX2ZpcnN0LCBf X2xhc3QtLSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNz IF9Db21wYXJlPgp2b2lkIApzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs CiAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXAp CnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCiAgICBwb3BfaGVhcChfX2ZpcnN0LCBf X2xhc3QtLSwgX19jb21wKTsKfQoKCgoKCiAKCgoKIAogCiAKIyAzNCAiL3Vzci9saWIvZ2NjLWxp Yi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0 bF9hbGdvLmgiIDIgMwoKCiAKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29u c3QgX1RwJiBfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9U cCYgX19jKSB7CiAgaWYgKF9fYSA8IF9fYikKICAgIGlmIChfX2IgPCBfX2MpCiAgICAgIHJldHVy biBfX2I7CiAgICBlbHNlIGlmIChfX2EgPCBfX2MpCiAgICAgIHJldHVybiBfX2M7CiAgICBlbHNl CiAgICAgIHJldHVybiBfX2E7CiAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgcmV0dXJuIF9fYTsK ICBlbHNlIGlmIChfX2IgPCBfX2MpCiAgICByZXR1cm4gX19jOwogIGVsc2UKICAgIHJldHVybiBf X2I7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3Qg X1RwJgpfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYg X19jLCBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19jb21wKF9fYSwgX19iKSkKICAgIGlmIChf X2NvbXAoX19iLCBfX2MpKQogICAgICByZXR1cm4gX19iOwogICAgZWxzZSBpZiAoX19jb21wKF9f YSwgX19jKSkKICAgICAgcmV0dXJuIF9fYzsKICAgIGVsc2UKICAgICAgcmV0dXJuIF9fYTsKICBl bHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgcmV0dXJuIF9fYTsKICBlbHNlIGlmIChfX2Nv bXAoX19iLCBfX2MpKQogICAgcmV0dXJuIF9fYzsKICBlbHNlCiAgICByZXR1cm4gX19iOwp9Cgog CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRnVuY3Rpb24+Cl9GdW5jdGlvbiBm b3JfZWFjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfRnVuY3Rpb24g X19mKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgX19mKCpf X2ZpcnN0KTsKICByZXR1cm4gX19mOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg Y2xhc3MgX1RwPgppbmxpbmUgX0lucHV0SXRlciBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwK ICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICB3aGlsZSAoX19m aXJzdCAhPSBfX2xhc3QgJiYgKl9fZmlyc3QgIT0gX192YWwpCiAgICArK19fZmlyc3Q7CiAgcmV0 dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGlj YXRlPgppbmxpbmUgX0lucHV0SXRlciBmaW5kX2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0 SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgd2hpbGUg KF9fZmlyc3QgIT0gX19sYXN0ICYmICFfX3ByZWQoKl9fZmlyc3QpKQogICAgKytfX2ZpcnN0Owog IHJldHVybiBfX2ZpcnN0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg Y2xhc3MgX1RwPgpfUmFuZG9tQWNjZXNzSXRlciBmaW5kKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0 b3JfdGFnKQp7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6 ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgPSAoX19sYXN0IC0gX19maXJzdCkgPj4g MjsKCiAgZm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAgIGlm ICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAg aWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAg ICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoK ICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7 CiAgfQoKICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogIGNhc2UgMzoKICAgIGlmICgqX19m aXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAyOgog ICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsK ICBjYXNlIDE6CiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAg KytfX2ZpcnN0OwogIGNhc2UgMDoKICBkZWZhdWx0OgogICAgcmV0dXJuIF9fbGFzdDsKICB9Cn0K CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX1Jh bmRvbUFjY2Vzc0l0ZXIgZmluZF9pZihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBf X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90 YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZm ZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoK ICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgewogICAgaWYgKF9f cHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmIChf X3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAo X19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYg KF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIH0KCiAg c3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICBjYXNlIDM6CiAgICBpZiAoX19wcmVkKCpfX2Zp cnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAyOgogICAgaWYgKF9f cHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMToK ICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsK ICBjYXNlIDA6CiAgZGVmYXVsdDoKICAgIHJldHVybiBfX2xhc3Q7CiAgfQp9CgoKCnRlbXBsYXRl IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfSW5wdXRJdGVyIGZpbmQoX0lu cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBfVHAmIF9fdmFsKQp7CiAgcmV0dXJuIGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3Zh bCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgX0lucHV0SXRlciBmaW5kX2lmKF9J bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpIHsKICByZXR1cm4gZmluZF9pZihfX2ZpcnN0LCBfX2xh c3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7Cn0KCiAKCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBhZGphY2VudF9maW5kKF9Gb3J3 YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KSB7CiAgaWYgKF9fZmlyc3QgPT0g X19sYXN0KQogICAgcmV0dXJuIF9fbGFzdDsKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJz dDsKICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgIGlmICgqX19maXJzdCA9PSAqX19u ZXh0KQogICAgICByZXR1cm4gX19maXJzdDsKICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgfQogIHJl dHVybiBfX2xhc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5h cnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBfX2Zp cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlu YXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAg ICByZXR1cm4gX19sYXN0OwogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIHdoaWxl KCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpf X25leHQpKQogICAgICByZXR1cm4gX19maXJzdDsKICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgfQog IHJldHVybiBfX2xhc3Q7Cn0KCiAKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs IGNsYXNzIF9UcCwgY2xhc3MgX1NpemU+CnZvaWQgY291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBf SW5wdXRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlLAogICAgICAgICAgIF9TaXplJiBf X24pIHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoKl9f Zmlyc3QgPT0gX192YWx1ZSkKICAgICAgKytfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfU2l6ZT4Kdm9pZCBjb3VudF9pZihfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAg ICAgICAgICBfU2l6ZSYgX19uKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2Zp cnN0KQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICsrX19uOwp9CgoKCnRlbXBsYXRl IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+CnR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCmNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu cHV0SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkgewogIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgZm9yICggOyBf X2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsdWUp CiAgICAgICsrX19uOwogIHJldHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy LCBjbGFzcyBfUHJlZGljYXRlPgp0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46 OmRpZmZlcmVuY2VfdHlwZQpjb3VudF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg X19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCkgewogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgZm9yICggOyBfX2ZpcnN0ICE9 IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICsrX19u OwogIHJldHVybiBfX247Cn0KCgoKCiAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBj bGFzcyBfRm9yd2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIxIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9f Zmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3 YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikgCnsKICAgCiAgaWYgKF9f Zmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBfX2Zp cnN0MTsKCiAgIAogIF9Gb3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwogICsrX190bXA7CiAg aWYgKF9fdG1wID09IF9fbGFzdDIpCiAgICByZXR1cm4gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwg Kl9fZmlyc3QyKTsKCiAgIAoKICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgX19wMSA9IF9f Zmlyc3QyOyArK19fcDE7CgogIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7Cgog IHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICBfX2ZpcnN0MSA9IGZpbmQoX19maXJz dDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CiAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAg ICAgcmV0dXJuIF9fbGFzdDE7CgogICAgX19wID0gX19wMTsKICAgIF9fY3VycmVudCA9IF9fZmly c3QxOyAKICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICByZXR1cm4gX19sYXN0 MTsKCiAgICB3aGlsZSAoKl9fY3VycmVudCA9PSAqX19wKSB7CiAgICAgIGlmICgrK19fcCA9PSBf X2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgaWYgKCsrX19jdXJyZW50ID09 IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9CgogICAgKytfX2ZpcnN0MTsK ICB9CiAgcmV0dXJuIF9fZmlyc3QxOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwg Y2xhc3MgX0ZvcndhcmRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWQ+Cl9Gb3J3YXJkSXRlcjEgc2Vh cmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAg ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xh c3QyLAogICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZCAgX19wcmVkaWNhdGUpIAp7CiAg IAogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICBy ZXR1cm4gX19maXJzdDE7CgogICAKICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICAr K19fdG1wOwogIGlmIChfX3RtcCA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGZpbmQoX19maXJzdDEs IF9fbGFzdDEsICpfX2ZpcnN0Mik7CgogICAKCiAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7Cgog IF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9f Zmlyc3QxOwoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgd2hpbGUgKF9fZmly c3QxICE9IF9fbGFzdDEpIHsKICAgICAgaWYgKF9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmly c3QyKSkKICAgICAgICBicmVhazsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgIHdoaWxlIChf X2ZpcnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0Mikp CiAgICAgICsrX19maXJzdDE7CiAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgcmV0 dXJuIF9fbGFzdDE7CgogICAgX19wID0gX19wMTsKICAgIF9fY3VycmVudCA9IF9fZmlyc3QxOyAK ICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKSByZXR1cm4gX19sYXN0MTsKCiAgICB3aGls ZSAoX19wcmVkaWNhdGUoKl9fY3VycmVudCwgKl9fcCkpIHsKICAgICAgaWYgKCsrX19wID09IF9f bGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICBpZiAoKytfX2N1cnJlbnQgPT0g X19sYXN0MSkKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KCiAgICArK19fZmlyc3QxOwog IH0KICByZXR1cm4gX19maXJzdDE7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs IGNsYXNzIF9JbnRlZ2VyLCBjbGFzcyBfVHA+Cl9Gb3J3YXJkSXRlciBzZWFyY2hfbihfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg IF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwpIHsKICBpZiAoX19jb3VudCA8PSAw KQogICAgcmV0dXJuIF9fZmlyc3Q7CiAgZWxzZSB7CiAgICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0 LCBfX2xhc3QsIF9fdmFsKTsKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICBf SW50ZWdlciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmly c3Q7CiAgICAgICsrX19pOwogICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24gIT0gMCAm JiAqX19pID09IF9fdmFsKSB7CiAgICAgICAgKytfX2k7CiAgICAgICAgLS1fX247CiAgICAgIH0K ICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlCiAg ICAgICAgX19maXJzdCA9IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFsKTsKICAgIH0KICAgIHJldHVy biBfX2xhc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfSW50 ZWdlciwgY2xhc3MgX1RwLCBjbGFzcyBfQmluYXJ5UHJlZD4KX0ZvcndhcmRJdGVyIHNlYXJjaF9u KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAg ICAgICAgICAgIF9CaW5hcnlQcmVkIF9fYmluYXJ5X3ByZWQpIHsKICBpZiAoX19jb3VudCA8PSAw KQogICAgcmV0dXJuIF9fZmlyc3Q7CiAgZWxzZSB7CiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xh c3QpIHsKICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkKICAgICAgICBi cmVhazsKICAgICAgKytfX2ZpcnN0OwogICAgfQogICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0 KSB7CiAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAgICBfRm9yd2FyZEl0ZXIg X19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYm IF9fbiAhPSAwICYmIF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKSB7CiAgICAgICAgKytfX2k7 CiAgICAgICAgLS1fX247CiAgICAgIH0KICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgIHJldHVy biBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCkgewog ICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKQogICAgICAgICAgICBicmVh azsKICAgICAgICAgICsrX19pOwogICAgICAgIH0KICAgICAgICBfX2ZpcnN0ID0gX19pOwogICAg ICB9CiAgICB9CiAgICByZXR1cm4gX19sYXN0OwogIH0KfSAKCiAKCnRlbXBsYXRlIDxjbGFzcyBf Rm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIyIHN3YXBfcmFu Z2VzKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAg ICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyKSB7CiAgZm9yICggOyBf X2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaXRlcl9zd2Fw KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgcmV0dXJuIF9fZmlyc3QyOwp9CgogCgp0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9VbmFyeU9wZXJhdGlv bj4KX091dHB1dEl0ZXIgdHJhbnNmb3JtKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1VuYXJ5 T3BlcmF0aW9uIF9fb3BlcikgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz dCwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9IF9fb3BlcigqX19maXJzdCk7CiAgcmV0dXJu IF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0 ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlPcGVyYXRpb24+ Cl9PdXRwdXRJdGVyIHRyYW5zZm9ybShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfT3V0 cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlPcGVyYXRpb24g X19iaW5hcnlfb3ApIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEs ICsrX19maXJzdDIsICsrX19yZXN1bHQpCiAgICAqX19yZXN1bHQgPSBfX2JpbmFyeV9vcCgqX19m aXJzdDEsICpfX2ZpcnN0Mik7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgogCgp0ZW1wbGF0ZSA8Y2xh c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CnZvaWQgcmVwbGFjZShfRm9yd2FyZEl0ZXIgX19m aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRf dmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpIHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s YXN0OyArK19fZmlyc3QpCiAgICBpZiAoKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUpCiAgICAgICpf X2ZpcnN0ID0gX19uZXdfdmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs YXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9UcD4Kdm9pZCByZXBsYWNlX2lmKF9Gb3J3YXJkSXRlciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBf X3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpIHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s YXN0OyArK19fZmlyc3QpCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgKl9fZmlyc3Qg PSBfX25ld192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRw dXRJdGVyLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIHJlcGxhY2VfY29weShfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1 dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xk X3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9f bGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QgPT0g X19vbGRfdmFsdWUgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsK fQoKdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1By ZWRpY2F0ZSwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciByZXBsYWNlX2NvcHlfaWYoSXRlcmF0b3Ig X19maXJzdCwgSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX091 dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRl IF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkgewogIGZvciAoIDsgX19maXJzdCAhPSBf X2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9IF9fcHJlZCgqX19m aXJzdCkgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKIAoK dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0dlbmVyYXRvcj4Kdm9pZCBnZW5l cmF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgX0dlbmVyYXRv ciBfX2dlbikgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICpf X2ZpcnN0ID0gX19nZW4oKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBf U2l6ZSwgY2xhc3MgX0dlbmVyYXRvcj4KX091dHB1dEl0ZXIgZ2VuZXJhdGVfbihfT3V0cHV0SXRl ciBfX2ZpcnN0LCBfU2l6ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4pIHsKICBmb3IgKCA7IF9fbiA+ IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9fZ2VuKCk7CiAgcmV0dXJuIF9f Zmlyc3Q7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRl ciwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciByZW1vdmVfY29weShfSW5wdXRJdGVyIF9fZmlyc3Qs IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf X3Jlc3VsdCwgY29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz dDsgKytfX2ZpcnN0KQogICAgaWYgKCpfX2ZpcnN0ICE9IF9fdmFsdWUpIHsKICAgICAgKl9fcmVz dWx0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0 Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNz IF9QcmVkaWNhdGU+Cl9PdXRwdXRJdGVyIHJlbW92ZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19maXJz dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ dGVyIF9fcmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCkgewogIGZvciAoIDsgX19maXJzdCAhPSBf X2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICghX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAqX19y ZXN1bHQgPSAqX19maXJzdDsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICByZXR1cm4gX19yZXN1 bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KX0ZvcndhcmRJ dGVyIHJlbW92ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsdWUpIHsKICBfX2ZpcnN0ID0gZmluZChf X2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWUpOwogIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0Owog IHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QgCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIDogcmVtb3ZlX2NvcHkoKytfX2ksIF9fbGFzdCwgX19maXJzdCwgX192YWx1ZSk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9Gb3J3YXJk SXRlciByZW1vdmVfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpIHsKICBfX2ZpcnN0ID0g ZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7CiAgX0ZvcndhcmRJdGVyIF9faSA9IF9f Zmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdCAKICAgICAgICAgICAg ICAgICAgICAgICAgICAgOiByZW1vdmVfY29weV9pZigrK19faSwgX19sYXN0LCBfX2ZpcnN0LCBf X3ByZWQpOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0 ZXIsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmly c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ dGVyIF9fcmVzdWx0LCBfVHAqKSB7CiAgX1RwIF9fdmFsdWUgPSAqX19maXJzdDsKICAqX19yZXN1 bHQgPSBfX3ZhbHVlOwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKF9fdmFs dWUgIT0gKl9fZmlyc3QpIHsKICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAqKytfX3Jl c3VsdCA9IF9fdmFsdWU7CiAgICB9CiAgcmV0dXJuICsrX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIF9f dW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKSB7CiAgcmV0dXJu IF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX192YWx1ZV90eXBlKCBf X2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJk SXRlcj4KX0ZvcndhcmRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f cmVzdWx0LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Owog IHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCpfX3Jlc3VsdCAhPSAqX19maXJz dCkgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0 ZXIgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgaWYg KF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgcmV0dXJuIF9fdW5pcXVlX2Nv cHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2l0 ZXJhdG9yX2NhdGVnb3J5KCBfX3Jlc3VsdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZSwKICAgICAgICAg IGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3Qs IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19i aW5hcnlfcHJlZCwgX1RwKikgewogIF9UcCBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgKl9fcmVzdWx0 ID0gX192YWx1ZTsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICghX19iaW5h cnlfcHJlZChfX3ZhbHVlLCAqX19maXJzdCkpIHsKICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0Owog ICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICB9CiAgcmV0dXJuICsrX19yZXN1bHQ7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Jp bmFyeVByZWRpY2F0ZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRl ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykgewogIHJldHVybiBfX3VuaXF1ZV9jb3B5 KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAg ICAgICAgICAgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0Zv cndhcmRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVk LAogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICpf X3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYg KCFfX2JpbmFyeV9wcmVkKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSAqKytfX3Jlc3VsdCA9ICpfX2Zp cnN0OwogIHJldHVybiArK19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CmlubGluZSBfT3V0cHV0 SXRlciB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQp IHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsKICByZXR1cm4gX191 bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2JpbmFyeV9wcmVkLAogICAg ICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fcmVzdWx0ICkgKTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIHVuaXF1ZShfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkgewogIF9fZmlyc3QgPSBhZGphY2Vu dF9maW5kKF9fZmlyc3QsIF9fbGFzdCk7CiAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9f bGFzdCwgX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9C aW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0 ZSBfX2JpbmFyeV9wcmVkKSB7CiAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19s YXN0LCBfX2JpbmFyeV9wcmVkKTsKICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0 LCBfX2ZpcnN0LCBfX2JpbmFyeV9wcmVkKTsKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVj dGlvbmFsSXRlcj4Kdm9pZCBfX3JldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9C aWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIAogICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0 ZXJhdG9yX3RhZykgewogIHdoaWxlICh0cnVlKQogICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0IHx8 IF9fZmlyc3QgPT0gLS1fX2xhc3QpCiAgICAgIHJldHVybjsKICAgIGVsc2UKICAgICAgaXRlcl9z d2FwKF9fZmlyc3QrKywgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ dGVyPgp2b2lkIF9fcmV2ZXJzZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNj ZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn KSB7CiAgd2hpbGUgKF9fZmlyc3QgPCBfX2xhc3QpCiAgICBpdGVyX3N3YXAoX19maXJzdCsrLCAt LV9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CmlubGluZSB2 b2lkIHJldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRl ciBfX2xhc3QpIHsKICBfX3JldmVyc2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVn b3J5KCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwg Y2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHJldmVyc2VfY29weShfQmlkaXJlY3Rpb25h bEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl c3VsdCkgewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgLS1fX2xhc3Q7CiAgICAq X19yZXN1bHQgPSAqX19sYXN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIF9fcmVzdWx0 Owp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0V1Y2xpZGVhblJpbmdFbGVtZW50PgpfRXVjbGlkZWFu UmluZ0VsZW1lbnQgX19nY2QoX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX24pCnsKICB3aGlsZSAoX19u ICE9IDApIHsKICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX3QgPSBfX20gJSBfX247CiAgICBf X20gPSBfX247CiAgICBfX24gPSBfX3Q7CiAgfQogIHJldHVybiBfX207Cn0KCnRlbXBsYXRlIDxj bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fcm90YXRl KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy IF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSosCiAgICAgICAgICAgICAgICAgICAgICBmb3J3 YXJkX2l0ZXJhdG9yX3RhZykgewogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgcmV0dXJu IF9fbGFzdDsKICBpZiAoX19sYXN0ICA9PSBfX21pZGRsZSkKICAgIHJldHVybiBfX2ZpcnN0OwoK ICBfRm9yd2FyZEl0ZXIgX19maXJzdDIgPSBfX21pZGRsZTsKICBkbyB7CiAgICBzd2FwKCpfX2Zp cnN0KyssICpfX2ZpcnN0MisrKTsKICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICBf X21pZGRsZSA9IF9fZmlyc3QyOwogIH0gd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCk7CgogIF9G b3J3YXJkSXRlciBfX25ld19taWRkbGUgPSBfX2ZpcnN0OwoKICBfX2ZpcnN0MiA9IF9fbWlkZGxl OwoKICB3aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KSB7CiAgICBzd2FwICgqX19maXJzdCsrLCAq X19maXJzdDIrKyk7CiAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAgX19taWRkbGUg PSBfX2ZpcnN0MjsKICAgIGVsc2UgaWYgKF9fZmlyc3QyID09IF9fbGFzdCkKICAgICAgX19maXJz dDIgPSBfX21pZGRsZTsKICB9CgogIHJldHVybiBfX25ld19taWRkbGU7Cn0KCgp0ZW1wbGF0ZSA8 Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+Cl9CaWRpcmVjdGlvbmFs SXRlciBfX3JvdGF0ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfRGlzdGFuY2UqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJl Y3Rpb25hbF9pdGVyYXRvcl90YWcpIHsKICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgIHJl dHVybiBfX2xhc3Q7CiAgaWYgKF9fbGFzdCAgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19maXJz dDsKCiAgX19yZXZlcnNlKF9fZmlyc3QsICBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRv cl90YWcoKSk7CiAgX19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsICAgYmlkaXJlY3Rpb25hbF9p dGVyYXRvcl90YWcoKSk7CgogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxlICYmIF9fbWlkZGxl ICE9IF9fbGFzdCkKICAgIHN3YXAgKCpfX2ZpcnN0KyssICotLV9fbGFzdCk7CgogIGlmIChfX2Zp cnN0ID09IF9fbWlkZGxlKSB7CiAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgICBiaWRp cmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgIHJldHVybiBfX2xhc3Q7CiAgfQogIGVsc2Ug ewogICAgX19yZXZlcnNlKF9fZmlyc3QsICBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRv cl90YWcoKSk7CiAgICByZXR1cm4gX19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu ZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJ dGVyIF9fcm90YXRlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAg ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9EaXN0YW5jZSAqLCBfVHAgKikgewoKICBfRGlzdGFuY2UgX19uID0gX19sYXN0ICAgLSBf X2ZpcnN0OwogIF9EaXN0YW5jZSBfX2sgPSBfX21pZGRsZSAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNl IF9fbCA9IF9fbiAtIF9fazsKICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Qg KyAoX19sYXN0IC0gX19taWRkbGUpOwoKICBpZiAoX19rID09IF9fbCkgewogICAgc3dhcF9yYW5n ZXMoX19maXJzdCwgX19taWRkbGUsIF9fbWlkZGxlKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9 CgogIF9EaXN0YW5jZSBfX2QgPSBfX2djZChfX24sIF9fayk7CgogIGZvciAoX0Rpc3RhbmNlIF9f aSA9IDA7IF9faSA8IF9fZDsgX19pKyspIHsKICAgIF9UcCBfX3RtcCA9ICpfX2ZpcnN0OwogICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19wID0gX19maXJzdDsKCiAgICBpZiAoX19rIDwgX19sKSB7CiAg ICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fbC9fX2Q7IF9faisrKSB7CiAgICAg ICAgaWYgKF9fcCA+IF9fZmlyc3QgKyBfX2wpIHsKICAgICAgICAgICpfX3AgPSAqKF9fcCAtIF9f bCk7CiAgICAgICAgICBfX3AgLT0gX19sOwogICAgICAgIH0KCiAgICAgICAgKl9fcCA9ICooX19w ICsgX19rKTsKICAgICAgICBfX3AgKz0gX19rOwogICAgICB9CiAgICB9CgogICAgZWxzZSB7CiAg ICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fay9fX2QgLSAxOyBfX2ogKyspIHsK ICAgICAgICBpZiAoX19wIDwgX19sYXN0IC0gX19rKSB7CiAgICAgICAgICAqX19wID0gKihfX3Ag KyBfX2spOwogICAgICAgICAgX19wICs9IF9fazsKICAgICAgICB9CgogICAgICAgICpfX3AgPSAq IChfX3AgLSBfX2wpOwogICAgICAgIF9fcCAtPSBfX2w7CiAgICAgIH0KICAgIH0KCiAgICAqX19w ID0gX190bXA7CiAgICArK19fZmlyc3Q7CiAgfQoKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIgcm90YXRlKF9Gb3J3 YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QpIHsKICByZXR1cm4gX19yb3RhdGUoX19maXJz dCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBf X2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0 ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX091dHB1dEl0ZXI+ Cl9PdXRwdXRJdGVyIHJvdGF0ZV9jb3B5KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0 ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19s YXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHJldHVybiBjb3B5KF9fZmlyc3QsIF9fbWlk ZGxlLCBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCiAKIAogCgp0ZW1wbGF0 ZSA8Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0Rpc3RhbmNlIF9fcmFuZG9tX251bWJlcihfRGlz dGFuY2UgX19uKSB7CgoKCiAgcmV0dXJuIGxyYW5kNDgoKSAlIF9fbjsKCn0KCiAKCnRlbXBsYXRl IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgcmFuZG9tX3NodWZmbGUoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAg Zm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsg KytfX2kpCiAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kb21fbnVtYmVyKChfX2kg LSBfX2ZpcnN0KSArIDEpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj bGFzcyBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgp2b2lkIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21B Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpIHsKICBpZiAoX19maXJzdCA9 PSBfX2xhc3QpIHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Qg KyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBf X3JhbmQoKF9faSAtIF9fZmlyc3QpICsgMSkpOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh cmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfT3V0cHV0SXRlciBy YW5kb21fc2FtcGxlX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX291dCwgY29uc3QgX0Rp c3RhbmNlIF9fbikKewogIF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9IDA7CiAgZGlzdGFuY2UoX19m aXJzdCwgX19sYXN0LCBfX3JlbWFpbmluZyk7CiAgX0Rpc3RhbmNlIF9fbSA9IG1pbihfX24sIF9f cmVtYWluaW5nKTsKCiAgd2hpbGUgKF9fbSA+IDApIHsKICAgIGlmIChfX3JhbmRvbV9udW1iZXIo X19yZW1haW5pbmcpIDwgX19tKSB7CiAgICAgICpfX291dCA9ICpfX2ZpcnN0OwogICAgICArK19f b3V0OwogICAgICAtLV9fbTsKICAgIH0KCiAgICAtLV9fcmVtYWluaW5nOwogICAgKytfX2ZpcnN0 OwogIH0KICByZXR1cm4gX19vdXQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs YXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfUmFuZG9t TnVtYmVyR2VuZXJhdG9yPgpfT3V0cHV0SXRlciByYW5kb21fc2FtcGxlX24oX0ZvcndhcmRJdGVy IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfT3V0cHV0SXRlciBfX291dCwgY29uc3QgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKewogIF9EaXN0YW5j ZSBfX3JlbWFpbmluZyA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX3JlbWFpbmlu Zyk7CiAgX0Rpc3RhbmNlIF9fbSA9IG1pbihfX24sIF9fcmVtYWluaW5nKTsKCiAgd2hpbGUgKF9f bSA+IDApIHsKICAgIGlmIChfX3JhbmQoX19yZW1haW5pbmcpIDwgX19tKSB7CiAgICAgICpfX291 dCA9ICpfX2ZpcnN0OwogICAgICArK19fb3V0OwogICAgICAtLV9fbTsKICAgIH0KCiAgICAtLV9f cmVtYWluaW5nOwogICAgKytfX2ZpcnN0OwogIH0KICByZXR1cm4gX19vdXQ7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3Rh bmNlPgpfUmFuZG9tQWNjZXNzSXRlciBfX3JhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S YW5kb21BY2Nlc3NJdGVyIF9fb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgX0Rpc3RhbmNlIF9fbikKewogIF9EaXN0YW5jZSBfX20gPSAwOwogIF9EaXN0YW5jZSBf X3QgPSBfX247CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX20gPCBfX247ICsrX19t LCArK19fZmlyc3QpIAogICAgX19vdXRbX19tXSA9ICpfX2ZpcnN0OwoKICB3aGlsZSAoX19maXJz dCAhPSBfX2xhc3QpIHsKICAgICsrX190OwogICAgX0Rpc3RhbmNlIF9fTSA9IF9fcmFuZG9tX251 bWJlcihfX3QpOwogICAgaWYgKF9fTSA8IF9fbikKICAgICAgX19vdXRbX19NXSA9ICpfX2ZpcnN0 OwogICAgKytfX2ZpcnN0OwogIH0KCiAgcmV0dXJuIF9fb3V0ICsgX19tOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsCiAgICAgICAgICBjbGFz cyBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+Cl9SYW5kb21BY2Nlc3NJ dGVyIF9fcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19v dXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJh dG9yJiBfX3JhbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfRGlz dGFuY2UgX19uKQp7CiAgX0Rpc3RhbmNlIF9fbSA9IDA7CiAgX0Rpc3RhbmNlIF9fdCA9IF9fbjsK ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fbSA8IF9fbjsgKytfX20sICsrX19maXJz dCkKICAgIF9fb3V0W19fbV0gPSAqX19maXJzdDsKCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0 KSB7CiAgICArK19fdDsKICAgIF9EaXN0YW5jZSBfX00gPSBfX3JhbmQoX190KTsKICAgIGlmIChf X00gPCBfX24pCiAgICAgIF9fb3V0W19fTV0gPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICB9 CgogIHJldHVybiBfX291dCArIF9fbTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcmFuZG9tX3Nh bXBsZShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9s YXN0KSAKewogIHJldHVybiBfX3JhbmRvbV9zYW1wbGUoX19maXJzdCwgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgX19vdXRfZmlyc3QsIF9fb3V0X2xhc3QgLSBfX291dF9maXJzdCk7 Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIs IAogICAgICAgICAgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KaW5saW5lIF9SYW5kb21B Y2Nlc3NJdGVyCnJhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXIgX19vdXRfbGFzdCwKICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJh dG9yJiBfX3JhbmQpIAp7CiAgcmV0dXJuIF9fcmFuZG9tX3NhbXBsZShfX2ZpcnN0LCBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9maXJzdCwgX19yYW5kLAogICAgICAgICAg ICAgICAgICAgICAgICAgX19vdXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsKfQoKIAoKdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIF9fcGFy dGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAoJCSAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xh c3QsCgkJCSBfUHJlZGljYXRlICAgX19wcmVkLAoJCQkgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsK ICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwoKICB3aGlsZSAoX19wcmVk KCpfX2ZpcnN0KSkKICAgIGlmICgrK19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsK CiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CgogIHdoaWxlICgrK19fbmV4dCAhPSBf X2xhc3QpCiAgICBpZiAoX19wcmVkKCpfX25leHQpKSB7CiAgICAgIHN3YXAoKl9fZmlyc3QsICpf X25leHQpOwogICAgICArK19fZmlyc3Q7CiAgICB9CgogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfQmlkaXJl Y3Rpb25hbEl0ZXIgX19wYXJ0aXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAoJCQkg ICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCgkJCSAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y X3RhZykgewogIHdoaWxlICh0cnVlKSB7CiAgICB3aGlsZSAodHJ1ZSkKICAgICAgaWYgKF9fZmly c3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIGlmIChfX3By ZWQoKl9fZmlyc3QpKQogICAgICAgICsrX19maXJzdDsKICAgICAgZWxzZQogICAgICAgIGJyZWFr OwogICAgLS1fX2xhc3Q7CiAgICB3aGlsZSAodHJ1ZSkKICAgICAgaWYgKF9fZmlyc3QgPT0gX19s YXN0KQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIGlmICghX19wcmVkKCpfX2xh c3QpKQogICAgICAgIC0tX19sYXN0OwogICAgICBlbHNlCiAgICAgICAgYnJlYWs7CiAgICBpdGVy X3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAgICsrX19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxj bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBfRm9yd2FyZEl0ZXIg cGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAJCQkgICAgICBfRm9yd2FyZEl0ZXIg X19sYXN0LAoJCQkgICAgICBfUHJlZGljYXRlICAgX19wcmVkKSB7CiAgcmV0dXJuIF9fcGFydGl0 aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0 ICkgKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUs IGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9u KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4pIHsKICBpZiAoX19s ZW4gPT0gMSkKICAgIHJldHVybiBfX3ByZWQoKl9fZmlyc3QpID8gX19sYXN0IDogX19maXJzdDsK ICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0OwogIGFkdmFuY2UoX19taWRkbGUsIF9f bGVuIC8gMik7CiAgcmV0dXJuIHJvdGF0ZShfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2Zp cnN0LCBfX21pZGRsZSwgX19wcmVkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fbGVuIC8gMiksCiAgICAgICAgICAgICAgICBfX21pZGRsZSwKICAgICAgICAg ICAgICAgIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fbWlkZGxlLCBfX2xhc3QsIF9fcHJl ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19s ZW4gLyAyKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Qb2ludGVy LCBjbGFzcyBfUHJlZGljYXRlLCAKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJ dGVyIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19w cmVkLCBfRGlzdGFuY2UgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpIAp7CiAgaWYgKF9fbGVuIDw9IF9fYnVm ZmVyX3NpemUpIHsKICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdDEgPSBfX2ZpcnN0OwogICAgX1Bv aW50ZXIgX19yZXN1bHQyID0gX19idWZmZXI7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0 IDsgKytfX2ZpcnN0KQogICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAgICpfX3Jl c3VsdDEgPSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0MTsKICAgICAgfQogICAgICBlbHNl IHsKICAgICAgICAqX19yZXN1bHQyID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdDI7CiAg ICAgIH0KICAgIGNvcHkoX19idWZmZXIsIF9fcmVzdWx0MiwgX19yZXN1bHQxKTsKICAgIHJldHVy biBfX3Jlc3VsdDE7CiAgfQogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19m aXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgICByZXR1cm4gcm90YXRl KF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICBf X2ZpcnN0LCBfX21pZGRsZSwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVu IC8gMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpLAogICAgICAgICAgICAgICAgICAgIF9fbWlk ZGxlLAogICAgICAgICAgICAgICAgICAgIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZSgKICAg ICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9z aXplKSk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGlj YXRlLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3N0 YWJsZV9wYXJ0aXRpb25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s YXN0LCAKICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX1RwKiwgX0Rp c3RhbmNlKikKewogIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlciwgX1RwPiBfX2J1Zihf X2ZpcnN0LCBfX2xhc3QpOwogIGlmIChfX2J1Zi5zaXplKCkgPiAwKQogICAgcmV0dXJuIF9fc3Rh YmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fYnVmLnJlcXVlc3RlZF9z aXplKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdp bigpLCBfX2J1Zi5zaXplKCkpOwogIGVsc2UKICAgIHJldHVybiBfX2lucGxhY2Vfc3RhYmxlX3Bh cnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpKTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIF9Gb3J3 YXJkSXRlciBzdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkgewogIGlmIChf X2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBfX2ZpcnN0OwogIGVsc2UKICAgIHJldHVybiBf X3N0YWJsZV9wYXJ0aXRpb25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+Cl9SYW5kb21B Y2Nlc3NJdGVyIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0 LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAg X19waXZvdCkgCnsKICB3aGlsZSAodHJ1ZSkgewogICAgd2hpbGUgKCpfX2ZpcnN0IDwgX19waXZv dCkKICAgICAgKytfX2ZpcnN0OwogICAgLS1fX2xhc3Q7CiAgICB3aGlsZSAoX19waXZvdCA8ICpf X2xhc3QpCiAgICAgIC0tX19sYXN0OwogICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAgICAg IHJldHVybiBfX2ZpcnN0OwogICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICArK19f Zmlyc3Q7CiAgfQp9ICAgIAoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz cyBfVHAsIGNsYXNzIF9Db21wYXJlPgpfUmFuZG9tQWNjZXNzSXRlciBfX3VuZ3VhcmRlZF9wYXJ0 aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2b3QsIF9Db21wYXJlIF9fY29tcCkg CnsKICB3aGlsZSAodHJ1ZSkgewogICAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19waXZvdCkp CiAgICAgICsrX19maXJzdDsKICAgIC0tX19sYXN0OwogICAgd2hpbGUgKF9fY29tcChfX3Bpdm90 LCAqX19sYXN0KSkKICAgICAgLS1fX2xhc3Q7CiAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkK ICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAg ICsrX19maXJzdDsKICB9Cn0KCmNvbnN0IGludCBfX3N0bF90aHJlc2hvbGQgPSAxNjsKCiAKCnRl bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fdW5ndWFy ZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwpIHsK ICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAgLS1fX25leHQ7CiAgd2hpbGUg KF9fdmFsIDwgKl9fbmV4dCkgewogICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICBfX2xhc3QgPSBf X25leHQ7CiAgICAtLV9fbmV4dDsKICB9CiAgKl9fbGFzdCA9IF9fdmFsOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQg X191bmd1YXJkZWRfbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBf X3ZhbCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsK ICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAgLS1fX25leHQ7ICAKICB3aGls ZSAoX19jb21wKF9fdmFsLCAqX19uZXh0KSkgewogICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICBf X2xhc3QgPSBfX25leHQ7CiAgICAtLV9fbmV4dDsKICB9CiAgKl9fbGFzdCA9IF9fdmFsOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQg X19saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKSB7CiAgX1RwIF9f dmFsID0gKl9fbGFzdDsKICBpZiAoX192YWwgPCAqX19maXJzdCkgewogICAgY29weV9iYWNrd2Fy ZChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCArIDEpOwogICAgKl9fZmlyc3QgPSBfX3ZhbDsKICB9 CiAgZWxzZQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2xhc3QsIF9fdmFsKTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w YXJlPgppbmxpbmUgdm9pZCBfX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz dCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs IF9UcCosIF9Db21wYXJlIF9fY29tcCkgewogIF9UcCBfX3ZhbCA9ICpfX2xhc3Q7CiAgaWYgKF9f Y29tcChfX3ZhbCwgKl9fZmlyc3QpKSB7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFz dCwgX19sYXN0ICsgMSk7CiAgICAqX19maXJzdCA9IF9fdmFsOwogIH0KICBlbHNlCiAgICBfX3Vu Z3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9fbGFzdCwgX192YWwsIF9fY29tcCk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9pZCBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21B Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkgewogIGlmIChfX2Zp cnN0ID09IF9fbGFzdCkgcmV0dXJuOyAKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9f Zmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIF9fbGluZWFyX2luc2VydChfX2Zp cnN0LCBfX2ksIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19pbnNlcnRpb25fc29ydChf UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19maXJzdCA9PSBfX2xh c3QpIHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBf X2kgIT0gX19sYXN0OyArK19faSkKICAgIF9fbGluZWFyX2luc2VydChfX2ZpcnN0LCBfX2ksIF9f dmFsdWVfdHlwZSggX19maXJzdCApICwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k b21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRf YXV4KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopIHsKICBmb3IgKF9SYW5k b21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgX191 bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9UcCgqX19pKSk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3Nv cnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgX191bmd1YXJkZWRfaW5zZXJ0aW9u X3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w YXJlPgp2b2lkIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRl ciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAq LCBfQ29tcGFyZSBfX2NvbXApIHsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmly c3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChf X2ksIF9UcCgqX19pKSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ dGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3Nv cnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgX191bmd1YXJkZWRfaW5z ZXJ0aW9uX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkg LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CnZvaWQgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5k b21BY2Nlc3NJdGVyIF9fbGFzdCkgewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhy ZXNob2xkKSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0bF90 aHJlc2hvbGQpOwogICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9fc3Rs X3RocmVzaG9sZCwgX19sYXN0KTsKICB9CiAgZWxzZQogICAgX19pbnNlcnRpb25fc29ydChfX2Zp cnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz IF9Db21wYXJlPgp2b2lkIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg X19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QsIF9Db21wYXJlIF9fY29tcCkgewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxf dGhyZXNob2xkKSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0 bF90aHJlc2hvbGQsIF9fY29tcCk7CiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2Zp cnN0ICsgX19zdGxfdGhyZXNob2xkLCBfX2xhc3QsIF9fY29tcCk7CiAgfQogIGVsc2UKICAgIF9f aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1NpemU+CmlubGluZSBfU2l6ZSBfX2xnKF9TaXplIF9fbikgewogIF9TaXplIF9fazsKICBm b3IgKF9fayA9IDA7IF9fbiAhPSAxOyBfX24gPj49IDEpICsrX19rOwogIHJldHVybiBfX2s7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfU2l6 ZT4Kdm9pZCBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAg ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosCiAgICAgICAg ICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0KQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9f Zmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsK ICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0KTsKICAgICAgcmV0dXJu OwogICAgfQogICAgLS1fX2RlcHRoX2xpbWl0OwogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQg PQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8y KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEp KSkpOwogICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCAoX1RwKikgMCwgX19kZXB0 aF9saW1pdCk7CiAgICBfX2xhc3QgPSBfX2N1dDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu ZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0NvbXBhcmU+CnZv aWQgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAg ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLAogICAgICAgICAgICAg ICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgd2hpbGUg KF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIGlmIChfX2RlcHRoX2xp bWl0ID09IDApIHsKICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBf X2NvbXApOwogICAgICByZXR1cm47CiAgICB9CiAgICAtLV9fZGVwdGhfbGltaXQ7CiAgICBfUmFu ZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0 LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAoX19tZWRpYW4oKl9fZmly c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsg KF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICooX19sYXN0IC0gMSksIF9fY29tcCkpLAogICAgICAgX19jb21wKTsKICAgIF9faW50 cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgKF9UcCopIDAsIF9fZGVwdGhfbGltaXQsIF9fY29t cCk7CiAgICBfX2xhc3QgPSBfX2N1dDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj ZXNzSXRlcj4KaW5saW5lIHZvaWQgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu ZG9tQWNjZXNzSXRlciBfX2xhc3QpIHsKICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIF9f aW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfX3Zh bHVlX3R5cGUoIF9fZmlyc3QgKSAsCiAgICAgICAgICAgICAgICAgICAgIF9fbGcoX19sYXN0IC0g X19maXJzdCkgKiAyKTsKICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0 KTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBh cmU+CmlubGluZSB2b2lkIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIGlm IChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19maXJzdCApICwKICAgICAg ICAgICAgICAgICAgICAgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIsCiAgICAgICAgICAgICAg ICAgICAgIF9fY29tcCk7CiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFz dCwgX19jb21wKTsKICB9Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4K dm9pZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgaWYg KF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBf X2xhc3QpOwogICAgcmV0dXJuOwogIH0KICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9f Zmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogIF9faW5wbGFjZV9zdGFibGVfc29ydChf X2ZpcnN0LCBfX21pZGRsZSk7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xh c3QpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k b21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQo X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19sYXN0IC0g X19maXJzdCA8IDE1KSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19j b21wKTsKICAgIHJldHVybjsKICB9CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2Zp cnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19m aXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxl LCBfX2xhc3QsIF9fY29tcCk7CiAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21p ZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0IC0gX19taWRkbGUsCiAgICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0 ZXIxLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+ CnZvaWQgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwgCiAgICAgICAgICAg ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVw X3NpemUpIHsKICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgd2hp bGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3RlcCkgewogICAgX19yZXN1bHQgPSBtZXJn ZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIF9f Zmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAg ICAgICAgIF9fcmVzdWx0KTsKICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKICB9CgogIF9fc3Rl cF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwog IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fc3RlcF9z aXplLCBfX2xhc3QsCiAgICAgICAgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv bUFjY2Vzc0l0ZXIxLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICBjbGFzcyBf RGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21B Y2Nlc3NJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyMSBfX2xhc3QsIAogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBf X3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgIF9D b21wYXJlIF9fY29tcCkgewogIF9EaXN0YW5jZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXpl OwoKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICBfX3Jlc3Vs dCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAg ICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAg ICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAg ICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgfQogIF9fc3RlcF9zaXplID0gbWluKF9EaXN0YW5j ZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwoKICBtZXJnZShfX2ZpcnN0LCBfX2Zp cnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3Qs CiAgICAgICAgX19yZXN1bHQsCiAgICAgICAgX19jb21wKTsKfQoKY29uc3QgaW50IF9fc3RsX2No dW5rX3NpemUgPSA3OwogICAgICAgIAp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIs IGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nl c3NJdGVyIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0LCBfRGlzdGFuY2UgX19jaHVua19zaXplKQp7CiAgd2hpbGUgKF9fbGFzdCAt IF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs IF9fZmlyc3QgKyBfX2NodW5rX3NpemUpOwogICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAg fQogIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgp2b2lk IF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplLCBfQ29tcGFyZSBfX2Nv bXApCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsKICAgIF9f aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSwgX19jb21wKTsK ICAgIF9fZmlyc3QgKz0gX19jaHVua19zaXplOwogIH0KICBfX2luc2VydGlvbl9zb3J0KF9fZmly c3QsIF9fbGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy LCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fbWVyZ2Vfc29ydF93aXRo X2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlKikgewogIF9EaXN0YW5jZSBfX2xl biA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVy ICsgX19sZW47CgogIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9fc3RsX2NodW5rX3NpemU7CiAg X19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplKTsKCiAg d2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmly c3QsIF9fbGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplKTsKICAgIF9fc3RlcF9zaXplICo9IDI7 CiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwg X19zdGVwX3NpemUpOwogICAgX19zdGVwX3NpemUgKj0gMjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFz cyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAg ICAgICAgIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX0NvbXBhcmUgX19jb21wKSB7CiAgX0Rpc3RhbmNl IF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19i dWZmZXIgKyBfX2xlbjsKCiAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX19zdGxfY2h1bmtfc2l6 ZTsKICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUs IF9fY29tcCk7CgogIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKSB7CiAgICBfX21lcmdlX3Nv cnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsK ICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19i dWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CiAgICBfX3N0ZXBfc2l6 ZSAqPSAyOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBf UG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFu ZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpIHsKICBfRGlzdGFuY2UgX19sZW4g PSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRs ZSA9IF9fZmlyc3QgKyBfX2xlbjsKICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICBf X3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZm ZXJfc2l6ZSk7CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9f YnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICB9CiAgZWxzZSB7CiAgICBfX21lcmdlX3NvcnRfd2l0 aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCAoX0Rpc3RhbmNlKikwKTsKICAg IF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgKF9E aXN0YW5jZSopMCk7CiAgfQogIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9f bGFzdCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksIAogICAgICAgICAgICAgICAgICAg X0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFz cyBfRGlzdGFuY2UsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19zdGFibGVfc29y dF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIgX19idWZmZXIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwgX0NvbXBh cmUgX19jb21wKSB7CiAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAv IDI7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47CiAgaWYg KF9fbGVuID4gX19idWZmZXJfc2l6ZSkgewogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2Zp cnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIAogICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbXApOwogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwg X19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29tcCk7CiAgfQogIGVsc2UgewogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9f Zmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgKF9EaXN0YW5jZSopMCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19t aWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIChfRGlzdGFuY2UqKTAsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbXApOwogIH0KICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9f bWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLCAKICAgICAgICAg ICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZl cl9zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S YW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQg X19zdGFibGVfc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFu Y2UqKSB7CiAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9UcD4gYnVmKF9f Zmlyc3QsIF9fbGFzdCk7CiAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICBfX2lucGxhY2Vfc3Rh YmxlX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICBlbHNlIAogICAgX19zdGFibGVfc29ydF9hZGFw dGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLAogICAgICAgICAgICAgICAgICAgICAg ICAgICBfRGlzdGFuY2UoYnVmLnNpemUoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4KaW5s aW5lIHZvaWQgX19zdGFibGVfc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAq LCBfRGlzdGFuY2UqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2Nv bXApIHsKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1RwPiBidWYoX19m aXJzdCwgX19sYXN0KTsKICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkKICAgIF9faW5wbGFjZV9zdGFi bGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgZWxzZSAKICAgIF9fc3RhYmxlX3Nv cnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0Rpc3RhbmNlKGJ1Zi5zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGlu ZSB2b2lkIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkgewogIF9fc3RhYmxlX3NvcnRf YXV4KF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoIF9f Zmlyc3QgKSAsCiAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkg KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4K aW5saW5lIHZvaWQgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2Nv bXApIHsKICBfX3N0YWJsZV9zb3J0X2F1eChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICAgIF9fZGlz dGFuY2VfdHlwZSggX19maXJzdCApICwgCiAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoK IAoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZvaWQgX19w YXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg X19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBf VHAqKSB7CiAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICBmb3IgKF9SYW5kb21BY2Nl c3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgaWYgKCpfX2kg PCAqX19maXJzdCkgCiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1Rw KCpfX2kpLAogICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICk7CiAg c29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B Y2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxl LAogICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAg X19wYXJ0aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBf X2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBf VHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKSB7CiAgbWFr ZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0 ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICBpZiAoX19jb21wKCpf X2ksICpfX2ZpcnN0KSkKICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBf VHAoKl9faSksIF9fY29tcCwKICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9fZmly c3QgKSApOwogIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQg cGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKSB7CiAgX19wYXJ0 aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0 ICkgLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRv bUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9UcD4KX1JhbmRv bUFjY2Vzc0l0ZXIgX19wYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX1RwKikgewogIGlmIChfX3Jlc3VsdF9maXJz dCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICBfUmFuZG9tQWNjZXNz SXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKICB3aGlsZShfX2ZpcnN0 ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAg Kl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7 CiAgICArK19fZmlyc3Q7CiAgfQogIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRf cmVhbF9sYXN0KTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGlmICgqX19maXJz dCA8ICpfX3Jlc3VsdF9maXJzdCkgCiAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3Qs IF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19yZXN1bHRfcmVh bF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9UcCgqX19maXJz dCkpOwogICAgKytfX2ZpcnN0OwogIH0KICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVz dWx0X3JlYWxfbGFzdCk7CiAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKfQoKdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgX1JhbmRv bUFjY2Vzc0l0ZXIKcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRf Zmlyc3QsCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3Qp IHsKICByZXR1cm4gX19wYXJ0aWFsX3NvcnRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0 X2ZpcnN0LCBfX3Jlc3VsdF9sYXN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Rp c3RhbmNlX3R5cGUoIF9fcmVzdWx0X2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBj bGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19wYXJ0aWFsX3Nv cnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1 bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFy ZSBfX2NvbXAsIF9EaXN0YW5jZSosIF9UcCopIHsKICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19y ZXN1bHRfbGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19y ZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgd2hpbGUoX19maXJzdCAhPSBfX2xh c3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICpfX3Jlc3Vs dF9yZWFsX2xhc3QgPSAqX19maXJzdDsKICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAgKytf X2ZpcnN0OwogIH0KICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFz dCwgX19jb21wKTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGlmIChfX2NvbXAo Kl9fZmlyc3QsICpfX3Jlc3VsdF9maXJzdCkpCiAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRf Zmlyc3QsIF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19yZXN1 bHRfcmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9UcCgq X19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICsrX19maXJzdDsKICB9 CiAgc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7 CiAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0 ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIF9SYW5k b21BY2Nlc3NJdGVyCnBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0 SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0 X2ZpcnN0LAogICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0 LCBfQ29tcGFyZSBfX2NvbXApIHsKICByZXR1cm4gX19wYXJ0aWFsX3NvcnRfY29weShfX2ZpcnN0 LCBfX2xhc3QsIF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29tcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3Rh bmNlX3R5cGUoIF9fcmVzdWx0X2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t QWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0 ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICAgICBf UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopIHsKICB3aGlsZSAoX19sYXN0IC0gX19maXJz dCA+IDMpIHsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgX191bmd1YXJkZWRf cGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9U cChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSkpKTsKICAgIGlmIChfX2N1dCA8 PSBfX250aCkKICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgZWxzZSAKICAgICAgX19sYXN0ID0g X19jdXQ7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBudGhfZWxlbWVudChfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAg ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgX19udGhfZWxlbWVu dChfX2ZpcnN0LCBfX250aCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBh cmU+CnZvaWQgX19udGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f bGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKSB7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3Qg PiAzKSB7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3Bh cnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAo X19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLCAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCkpLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jb21wKTsKICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgX19maXJzdCA9IF9fY3V0 OwogICAgZWxzZSAKICAgICAgX19sYXN0ID0gX19jdXQ7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQo X19maXJzdCwgX19sYXN0LCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz c0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBudGhfZWxlbWVudChfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAg ICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkgewogIF9fbnRoX2Vs ZW1lbnQoX19maXJzdCwgX19udGgsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLCBf X2NvbXApOwp9CgoKIAoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBj bGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX2xvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBfVHAmIF9fdmFsLCBfRGlzdGFuY2UqKSAKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAg ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBf Rm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9 IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxl LCBfX2hhbGYpOwogICAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7CiAgICAgIF9fZmlyc3QgPSBf X21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0g MTsKICAgIH0KICAgIGVsc2UKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgfQogIHJldHVybiBfX2Zp cnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBf Rm9yd2FyZEl0ZXIgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBf X3ZhbCkgewogIHJldHVybiBfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsCiAg ICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xh c3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19sb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19m aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3Rh bmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlz dGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgd2hpbGUgKF9fbGVuID4g MCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAg IGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192 YWwpKSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBf X2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UKICAgICAgX19sZW4gPSBf X2hhbGY7CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgX0ZvcndhcmRJdGVyIGxvd2Vy X2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29t cCkgewogIHJldHVybiBfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29t cCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9fZmlyc3QgKSApOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5j ZT4KX0ZvcndhcmRJdGVyIF9fdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192 YWwsIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmly c3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9f bWlkZGxlOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwog ICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAg IGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNlIHsK ICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0g X19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogIH0KICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0ZvcndhcmRJdGVyIHVw cGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpIHsKICByZXR1cm4g X191cHBlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAogICAgICAgICAgICAgICAgICAg ICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9y d2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4KX0Zv cndhcmRJdGVyIF9fdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9D b21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlz dGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9y d2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9f bGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBf X2hhbGYpOwogICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgX19sZW4gPSBf X2hhbGY7CiAgICBlbHNlIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmly c3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogIH0KICByZXR1cm4g X19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFz cyBfQ29tcGFyZT4KaW5saW5lIF9Gb3J3YXJkSXRlciB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIg X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApIHsKICByZXR1cm4gX191cHBl cl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXAsCiAgICAgICAgICAgICAgICAg ICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9G b3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CnBhaXI8X0ZvcndhcmRJdGVy LCBfRm9yd2FyZEl0ZXI+Cl9fZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgX0Rpc3RhbmNl KikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBf X2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVm dCwgX19yaWdodDsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4g MTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7 CiAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwog ICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQog ICAgZWxzZSBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgIF9fbGVuID0gX19oYWxmOwogICAg ZWxzZSB7CiAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3Zh bCk7CiAgICAgIGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogICAgICBfX3JpZ2h0ID0gdXBwZXJf Ym91bmQoKytfX21pZGRsZSwgX19maXJzdCwgX192YWwpOwogICAgICByZXR1cm4gcGFpcjxfRm9y d2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgIH0KICB9CiAgcmV0 dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBwYWlyPF9G b3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgplcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCkgewogIHJldHVybiBfX2Vx dWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAg X19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Rpc3RhbmNlPgpwYWlyPF9G b3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgpfX2VxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2Zp cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAg IF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAg ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBf Rm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsKCiAgd2hpbGUgKF9fbGVuID4g MCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAg IGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192 YWwpKSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBf X2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UgaWYgKF9fY29tcChfX3Zh bCwgKl9fbWlkZGxlKSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNlIHsKICAgICAgX19s ZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsLCBfX2NvbXApOwogICAg ICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsr X19taWRkbGUsIF9fZmlyc3QsIF9fdmFsLCBfX2NvbXApOwogICAgICByZXR1cm4gcGFpcjxfRm9y d2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgIH0KICB9CiAgcmV0 dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwp9 ICAgICAgICAgICAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xh c3MgX0NvbXBhcmU+CmlubGluZSBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgplcXVh bF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3Qg X1RwJiBfX3ZhbCwKICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgcmV0dXJuIF9fZXF1 YWxfcmFuZ2UoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wLAogICAgICAgICAgICAgICAg ICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICk7Cn0gCgp0ZW1wbGF0ZSA8Y2xhc3Mg X0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmJvb2wgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIg X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9U cCYgX192YWwpIHsKICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19s YXN0LCBfX3ZhbCk7CiAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIShfX3ZhbCA8ICpfX2kpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl Pgpib29sIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAg ICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5k KF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCk7CiAgcmV0dXJuIF9faSAhPSBfX2xhc3Qg JiYgIV9fY29tcChfX3ZhbCwgKl9faSk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy MSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBtZXJn ZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAg ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9f bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2Zp cnN0MSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAg ICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmly c3QxOwogICAgfQogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9f bGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAog ICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRwdXRJdGVyIG1lcmdlKF9JbnB1dEl0ZXIxIF9f Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgX091dHB1 dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBf X2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qy LCAqX19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2Zp cnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAg ICsrX19maXJzdDE7CiAgICB9CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gY29weShfX2Zp cnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKIAoK dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lk IF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMikg ewogIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgIHJldHVybjsKICBpZiAoX19s ZW4xICsgX19sZW4yID09IDIpIHsKICAgIGlmICgqX19taWRkbGUgPCAqX19maXJzdCkKICAgICAg aXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgIHJldHVybjsKICB9CiAgX0JpZGlyZWN0 aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19z ZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogIF9EaXN0YW5j ZSBfX2xlbjIyID0gMDsKICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICBfX2xlbjExID0gX19s ZW4xIC8gMjsKICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgX19zZWNvbmRf Y3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsKICAgIGRp c3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogIH0KICBlbHNlIHsKICAg IF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIp OwogICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vj b25kX2N1dCk7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAg fQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUKICAgID0gcm90YXRlKF9fZmlyc3Rf Y3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9f Zmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAg ICBfX2xlbjExLCBfX2xlbjIyKTsKICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fbmV3X21pZGRs ZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAg ICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVj dGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21lcmdl X3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19sZW4xID09IDAg fHwgX19sZW4yID09IDApCiAgICByZXR1cm47CiAgaWYgKF9fbGVuMSArIF9fbGVuMiA9PSAyKSB7 CiAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgKl9fZmlyc3QpKQogICAgICBpdGVyX3N3YXAoX19m aXJzdCwgX19taWRkbGUpOwogICAgcmV0dXJuOwogIH0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19m aXJzdF9jdXQgPSBfX2ZpcnN0OwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBf X21pZGRsZTsKICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAw OwogIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAg YWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9i b3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICBkaXN0YW5j ZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICB9CiAgZWxzZSB7CiAgICBfX2xl bjIyID0gX19sZW4yIC8gMjsKICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAg IF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9j dXQsIF9fY29tcCk7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7 CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUKICAgID0gcm90YXRlKF9fZmly c3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICBfX21lcmdlX3dpdGhvdXRfYnVmZmVy KF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsIF9fbGVuMjIsCiAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIo X19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAg ICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fY29tcCk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIy LAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgpfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcm90YXRl X2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbWlkZGxlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEs IF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkgewogIF9CaWRpcmVjdGlvbmFsSXRl cjIgX19idWZmZXJfZW5kOwogIGlmIChfX2xlbjEgPiBfX2xlbjIgJiYgX19sZW4yIDw9IF9fYnVm ZmVyX3NpemUpIHsKICAgIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19i dWZmZXIpOwogICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsKICAg IHJldHVybiBjb3B5KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fZmlyc3QpOwogIH0KICBlbHNl IGlmIChfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX19idWZmZXJfZW5kID0gY29weShf X2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgY29weShfX21pZGRsZSwgX19sYXN0LCBf X2ZpcnN0KTsKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQs IF9fbGFzdCk7CiAgfQogIGVsc2UKICAgIHJldHVybiByb3RhdGUoX19maXJzdCwgX19taWRkbGUs IF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBf QmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMz4K X0JpZGlyZWN0aW9uYWxJdGVyMyBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEg X19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCkgewogIGlmIChf X2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsIF9f bGFzdDIsIF9fcmVzdWx0KTsKICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBj b3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgLS1fX2xhc3QxOwog IC0tX19sYXN0MjsKICB3aGlsZSAodHJ1ZSkgewogICAgaWYgKCpfX2xhc3QyIDwgKl9fbGFzdDEp IHsKICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAgICAgaWYgKF9fZmlyc3QxID09IF9f bGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0Miwg X19yZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKi0tX19y ZXN1bHQgPSAqX19sYXN0MjsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAg cmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAg ICAtLV9fbGFzdDI7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJ dGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9CaWRpcmVj dGlvbmFsSXRlcjMsIGNsYXNzIF9Db21wYXJlPgpfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fbWVyZ2Vf YmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIy IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIzIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0NvbXBhcmUgX19jb21wKSB7CiAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICByZXR1cm4g Y29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOwogIGlmIChfX2ZpcnN0 MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEs IF9fcmVzdWx0KTsKICAtLV9fbGFzdDE7CiAgLS1fX2xhc3QyOwogIHdoaWxlICh0cnVlKSB7CiAg ICBpZiAoX19jb21wKCpfX2xhc3QyLCAqX19sYXN0MSkpIHsKICAgICAgKi0tX19yZXN1bHQgPSAq X19sYXN0MTsKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNv cHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAtLV9fbGFz dDE7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsKICAgICAg aWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19m aXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDI7CiAgICB9CiAgfQp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNs YXNzIF9Qb2ludGVyPgp2b2lkIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9f Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUs IAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAg ICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3Np emUpIHsKICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkg ewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19i dWZmZXIpOwogICAgbWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFz dCwgX19maXJzdCk7CiAgfQogIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAg ICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVy KTsKICAgIF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1 ZmZlcl9lbmQsIF9fbGFzdCk7CiAgfQogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f Zmlyc3RfY3V0ID0gX19maXJzdDsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQg PSBfX21pZGRsZTsKICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgIF9EaXN0YW5jZSBfX2xl bjIyID0gMDsKICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgX19sZW4xMSA9IF9fbGVu MSAvIDI7CiAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICBfX3NlY29u ZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAg ICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsgCiAgICB9CiAgICBl bHNlIHsKICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgIGFkdmFuY2UoX19zZWNvbmRf Y3V0LCBfX2xlbjIyKTsKICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBf X21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3Rf Y3V0LCBfX2xlbjExKTsKICAgIH0KICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUg PQogICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25k X2N1dCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwg X19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBf X2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICBf X2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBfX21lcmdlX2FkYXB0aXZlKF9f bmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAg ICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXpl KTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0 YW5jZSwgY2xhc3MgX1BvaW50ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21l cmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAg ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwgCiAgICAgICAgICAgICAgICAgICAg ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh bmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgIF9Qb2lu dGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAg ICAgIF9Db21wYXJlIF9fY29tcCkgewogIGlmIChfX2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8 PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmly c3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJfZW5k LCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0LCBfX2NvbXApOwogIH0KICBlbHNlIGlmIChfX2xl bjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShf X21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3Qs IF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgIF9fY29tcCk7CiAgfQogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmly c3RfY3V0ID0gX19maXJzdDsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBf X21pZGRsZTsKICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgIF9EaXN0YW5jZSBfX2xlbjIy ID0gMDsKICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgX19sZW4xMSA9IF9fbGVuMSAv IDI7CiAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICBfX3NlY29uZF9j dXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7 CiAgICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIpOyAgIAogICAg fQogICAgZWxzZSB7CiAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICBhZHZhbmNlKF9f c2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19m aXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICAgIGRpc3RhbmNlKF9f Zmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgIH0KICAgIF9CaWRpcmVjdGlvbmFsSXRl ciBfX25ld19taWRkbGUgPQogICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19t aWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAg ICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19tZXJnZV9hZGFw dGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAg ICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsK ICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwg X19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwg X19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZv aWQgX19pbnBsYWNlX21lcmdlX2F1eChfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwg X1RwKiwgX0Rpc3RhbmNlKikgewogIF9EaXN0YW5jZSBfX2xlbjEgPSAwOwogIGRpc3RhbmNlKF9f Zmlyc3QsIF9fbWlkZGxlLCBfX2xlbjEpOwogIF9EaXN0YW5jZSBfX2xlbjIgPSAwOwogIGRpc3Rh bmNlKF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMik7CgogIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRp cmVjdGlvbmFsSXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChfX2J1Zi5i ZWdpbigpID09IDApCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxl LCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yKTsKICBlbHNlCiAgICBfX21lcmdlX2FkYXB0aXZlKF9f Zmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAgICAg ICAgICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFuY2UoX19idWYuc2l6ZSgpKSk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9UcCwgCiAgICAgICAgICBjbGFzcyBf RGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX2lucGxhY2VfbWVyZ2VfYXV4 KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIF9EaXN0YW5j ZSBfX2xlbjEgPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xlbjEpOwogIF9E aXN0YW5jZSBfX2xlbjIgPSAwOwogIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMik7 CgogIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1RwPiBfX2J1ZihfX2Zp cnN0LCBfX2xhc3QpOwogIGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAgICBfX21lcmdlX3dpdGhv dXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLCBfX2Nv bXApOwogIGVsc2UKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFz dCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9E aXN0YW5jZShfX2J1Zi5zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgppbmxpbmUgdm9pZCBpbnBsYWNlX21l cmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KSB7CiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwg X19taWRkbGUgPT0gX19sYXN0KQogICAgcmV0dXJuOwogIF9faW5wbGFjZV9tZXJnZV9hdXgoX19m aXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlw ZSggX19maXJzdCApICwgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIGlu cGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAg ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkgewogIGlm IChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlkZGxlID09IF9fbGFzdCkKICAgIHJldHVybjsK ICBfX2lucGxhY2VfbWVyZ2VfYXV4KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAsIF9fZGlzdGFuY2VfdHlwZSgg X19maXJzdCApICwKICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCiAKIAogCiAKCnRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmJvb2wgaW5jbHVk ZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpIHsKICB3aGlsZSAo X19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2Zp cnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZWxzZSBpZigqX19maXJz dDEgPCAqX19maXJzdDIpIAogICAgICArK19fZmlyc3QxOwogICAgZWxzZQogICAgICArK19fZmly c3QxLCArK19fZmlyc3QyOwoKICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKfQoKdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0NvbXBhcmU+ CmJvb2wgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEs CiAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIs IF9Db21wYXJlIF9fY29tcCkgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmly c3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAg ICAgcmV0dXJuIGZhbHNlOwogICAgZWxzZSBpZihfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIp KSAKICAgICAgKytfX2ZpcnN0MTsKICAgIGVsc2UKICAgICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0 MjsKCiAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRl ciBzZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s YXN0MiwKICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgd2hp bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYg KCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAg ICAgICsrX19maXJzdDE7CiAgICB9CiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEp IHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICArK19fZmlyc3QyOwogICAgfQog ICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsK ICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBjb3B5 KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBf T3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBzZXRfdW5p b24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAg ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXAp IHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7 CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAqX19yZXN1bHQg PSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICBlbHNlIGlmIChfX2NvbXAo Kl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAg ICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJz dDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICArK19fcmVz dWx0OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwg X19sYXN0MSwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz cyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHNldF9pbnRlcnNl Y3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f bGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQp IHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSAK ICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIAogICAgICArK19fZmlyc3QxOwogICAgZWxz ZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSAKICAgICAgKytfX2ZpcnN0MjsKICAgIGVsc2Ug ewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsr X19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0 cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBzZXRfaW50ZXJz ZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf X2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0 LCBfQ29tcGFyZSBfX2NvbXApIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp cnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAg ICAgICsrX19maXJzdDE7CiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEp KQogICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0 MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3VsdDsK ICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwg Y2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBzZXRfZGlm ZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f bGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7 CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAg IGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx OwogICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAo Kl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAg ICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgcmV0dXJuIGNvcHkoX19maXJz dDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBj bGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsIAogICAgICAgICAgY2xhc3MgX0Nv bXBhcmU+Cl9PdXRwdXRJdGVyIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBf SW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApIHsKICB3aGlsZSAoX19m aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgq X19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAg ICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAoX19jb21w KCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgKytfX2ZpcnN0MjsKICAgIGVsc2UgewogICAg ICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogIHJldHVybiBjb3B5KF9fZmly c3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwg Y2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciAKc2V0X3N5 bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xh c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1 dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl c3VsdCkgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFz dDIpCiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpf X2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVs c2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJz dDI7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIHsK ICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICByZXR1cm4gY29weShf X2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091 dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4KX091dHB1dEl0ZXIgCnNldF9zeW1t ZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0 MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJ dGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1 bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICB3aGlsZSAo X19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29t cCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwog ICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAoX19j b21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7 CiAgICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIHsKICAg ICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICByZXR1cm4gY29weShfX2Zp cnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKIAog Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgbWF4X2VsZW1lbnQo X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpIHsKICBpZiAoX19maXJz dCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9f Zmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpIAogICAgaWYgKCpfX3Jlc3VsdCA8 ICpfX2ZpcnN0KQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQ29tcGFyZT4KX0ZvcndhcmRJ dGVyIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYgKF9f Zmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQg PSBfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KSAKICAgIGlmIChfX2NvbXAo Kl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4gX19yZXN1 bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBtaW5fZWxl bWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkgewogIGlmIChf X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0 ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkgCiAgICBpZiAoKl9fZmly c3QgPCAqX19yZXN1bHQpCiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4gX19yZXN1 bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Db21wYXJlPgpfRm9y d2FyZEl0ZXIgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBp ZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jl c3VsdCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpIAogICAgaWYgKF9f Y29tcCgqX19maXJzdCwgKl9fcmVzdWx0KSkKICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHJl dHVybiBfX3Jlc3VsdDsKfQoKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVy Pgpib29sIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRp cmVjdGlvbmFsSXRlciBfX2xhc3QpIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1 cm4gZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgKytfX2k7CiAg aWYgKF9faSA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX19pID0gX19sYXN0OwogIC0t X19pOwoKICBmb3IoOzspIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAg LS1fX2k7CiAgICBpZiAoKl9faSA8ICpfX2lpKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf X2ogPSBfX2xhc3Q7CiAgICAgIHdoaWxlICghKCpfX2kgPCAqLS1fX2opKQogICAgICAgIHt9CiAg ICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAg ICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgcmV2 ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBu ZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25h bEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAg aWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFs SXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0 dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlk aXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwogICAgaWYgKF9fY29tcCgqX19p LCAqX19paSkpIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAg d2hpbGUgKCFfX2NvbXAoKl9faSwgKi0tX19qKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAo X19pLCBfX2opOwogICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVl OwogICAgfQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwg X19sYXN0KTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNz IF9CaWRpcmVjdGlvbmFsSXRlcj4KYm9vbCBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFs SXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KSB7CiAgaWYgKF9fZmlyc3Qg PT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBf X2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwog IF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwogICAgaWYgKCpfX2lpIDwgKl9faSkgewogICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICB3aGlsZSAoISgqLS1fX2ogPCAq X19pKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICByZXZlcnNl KF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKF9faSA9PSBf X2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgcmV0dXJuIGZh bHNlOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xh c3MgX0NvbXBhcmU+CmJvb2wgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19m aXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9D b21wYXJlIF9fY29tcCkgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxz ZTsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBpZiAoX19p ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7Cgog IGZvcig7OykgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAtLV9faTsK ICAgIGlmIChfX2NvbXAoKl9faWksICpfX2kpKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf X2ogPSBfX2xhc3Q7CiAgICAgIHdoaWxlICghX19jb21wKCotLV9faiwgKl9faSkpCiAgICAgICAg e30KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3Qp OwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAg ICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9 Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9J bnB1dEl0ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9f bGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9G b3J3YXJkSXRlciBfX2xhc3QyKQp7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19f Zmlyc3QxKSAKICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIg IT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgIGlmICgqX19maXJzdDEgPT0gKl9faXRlcikKICAg ICAgICByZXR1cm4gX19maXJzdDE7CiAgcmV0dXJuIF9fbGFzdDE7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+ Cl9JbnB1dEl0ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVy IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIs IF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVBy ZWRpY2F0ZSBfX2NvbXApCnsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJz dDEpIAogICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRlciAhPSBf X2xhc3QyOyArK19faXRlcikKICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2l0ZXIpKQog ICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICByZXR1cm4gX19sYXN0MTsKfQoKCiAKIAogCiAKCiAK dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+Cl9Gb3J3 YXJkSXRlcjEgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIx IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3Qy LCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJk X2l0ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAoX19maXJzdDIgPT0g X19sYXN0MikKICAgIHJldHVybiBfX2xhc3QxOwogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyMSBf X3Jlc3VsdCA9IF9fbGFzdDE7CiAgICB3aGlsZSAoMSkgewogICAgICBfRm9yd2FyZEl0ZXIxIF9f bmV3X3Jlc3VsdAogICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Miwg X19sYXN0Mik7CiAgICAgIGlmIChfX25ld19yZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICByZXR1 cm4gX19yZXN1bHQ7CiAgICAgIGVsc2UgewogICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0 OwogICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICsrX19maXJzdDE7CiAg ICAgIH0KICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBf Rm9yd2FyZEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0ZvcndhcmRJ dGVyMSBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19s YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9G b3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRl cmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAg IF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQp7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAg ICByZXR1cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlcjEgX19yZXN1bHQgPSBf X2xhc3QxOwogICAgd2hpbGUgKDEpIHsKICAgICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQK ICAgICAgICA9IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsIF9f Y29tcCk7CiAgICAgIGlmIChfX25ld19yZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4g X19yZXN1bHQ7CiAgICAgIGVsc2UgewogICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0Owog ICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICsrX19maXJzdDE7CiAgICAg IH0KICAgIH0KICB9Cn0KCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwg Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMj4KX0JpZGlyZWN0aW9uYWxJdGVyMQpfX2ZpbmRfZW5k KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0 MSwKICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25h bEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJp ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQp7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9C aWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8 X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICBfUmV2SXRlcjEgX19ybGFzdDEoX19m aXJzdDEpOwogIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgX1Jldkl0ZXIxIF9fcnJl c3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0Mik7CgogIGlmIChf X3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICByZXR1cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9C aWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgpOwogICAgYWR2YW5j ZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICByZXR1cm4gX19y ZXN1bHQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3Mg X0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9C aWRpcmVjdGlvbmFsSXRlcjEKX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3Qx LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgIGJp ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgCiAg ICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKICB0eXBlZGVmIHJldmVyc2VfaXRl cmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogIHR5cGVkZWYgcmV2ZXJzZV9p dGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogIF9SZXZJdGVyMSBfX3Js YXN0MShfX2ZpcnN0MSk7CiAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICBfUmV2SXRl cjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKCiAgaWYgKF9fcnJlc3VsdCA9 PSBfX3JsYXN0MSkKICAgIHJldHVybiBfX2xhc3QxOwogIGVsc2UgewogICAgX0JpZGlyZWN0aW9u YWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAgICBhZHZhbmNlKF9fcmVzdWx0 LCAtZGlzdGFuY2UoX19maXJzdDIsIF9fbGFzdDIpKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9 Cn0KCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVy Mj4KaW5saW5lIF9Gb3J3YXJkSXRlcjEgCmZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEs IF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwgCiAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIs IF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKewogIHJldHVybiBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBf X2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9y X2NhdGVnb3J5KCBfX2ZpcnN0MSApICwKICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2Nh dGVnb3J5KCBfX2ZpcnN0MiApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBj bGFzcyBfRm9yd2FyZEl0ZXIyLCAKICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cmlu bGluZSBfRm9yd2FyZEl0ZXIxIApmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9y d2FyZEl0ZXIxIF9fbGFzdDEsIAogICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9y d2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQp7CiAg cmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAog ICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QxICkgLAogICAg ICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QyICkgLAogICAgICAg ICAgICAgICAgICAgIF9fY29tcCk7Cn0KCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KYm9vbCBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0 ZXIgX19maXJzdCwgX0Rpc3RhbmNlIF9fbikKewogIF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7CiAg Zm9yIChfRGlzdGFuY2UgX19jaGlsZCA9IDE7IF9fY2hpbGQgPCBfX247ICsrX19jaGlsZCkgewog ICAgaWYgKF9fZmlyc3RbX19wYXJlbnRdIDwgX19maXJzdFtfX2NoaWxkXSkgCiAgICAgIHJldHVy biBmYWxzZTsKICAgIGlmICgoX19jaGlsZCAmIDEpID09IDApCiAgICAgICsrX19wYXJlbnQ7CiAg fQogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs YXNzIF9EaXN0YW5jZSwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4KYm9vbCBfX2lzX2hlYXAo X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXAsCiAg ICAgICAgICAgICAgIF9EaXN0YW5jZSBfX24pCnsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAwOwog IGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAxOyBfX2NoaWxkIDwgX19uOyArK19fY2hpbGQpIHsK ICAgIGlmIChfX2NvbXAoX19maXJzdFtfX3BhcmVudF0sIF9fZmlyc3RbX19jaGlsZF0pKQogICAg ICByZXR1cm4gZmFsc2U7CiAgICBpZiAoKF9fY2hpbGQgJiAxKSA9PSAwKQogICAgICArK19fcGFy ZW50OwogIH0KICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ dGVyPgppbmxpbmUgYm9vbCBpc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k b21BY2Nlc3NJdGVyIF9fbGFzdCkKewogIHJldHVybiBfX2lzX2hlYXAoX19maXJzdCwgX19sYXN0 IC0gX19maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz IF9TdHJpY3RXZWFrT3JkZXJpbmc+CmlubGluZSBib29sIGlzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0 ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg IF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7CiAgcmV0dXJuIF9faXNfaGVhcChfX2ZpcnN0 LCBfX2NvbXAsIF9fbGFzdCAtIF9fZmlyc3QpOwp9CgogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9G b3J3YXJkSXRlcj4KYm9vbCBpc19zb3J0ZWQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk SXRlciBfX2xhc3QpCnsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gdHJ1ZTsK CiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgZm9yICgrK19fbmV4dDsgX19uZXh0 ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25leHQpIHsKICAgIGlmICgqX19uZXh0 IDwgKl9fZmlyc3QpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIHJldHVybiB0cnVlOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPgpi b29sIGlzX3NvcnRlZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsKICBpZiAoX19maXJz dCA9PSBfX2xhc3QpCiAgICByZXR1cm4gdHJ1ZTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9f Zmlyc3Q7CiAgZm9yICgrK19fbmV4dDsgX19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4 dCwgKytfX25leHQpIHsKICAgIGlmIChfX2NvbXAoKl9fbmV4dCwgKl9fZmlyc3QpKQogICAgICBy ZXR1cm4gZmFsc2U7CiAgfQoKICByZXR1cm4gdHJ1ZTsKfQoKCgoKCiAKCgoKIAogCiAKIyAzNCAi L3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9p bmNsdWRlL2crKy0zL2FsZ29yaXRobSIgMiAzCgoKCgogCiAKIAojIDYgIi91L2xwYWdlL3dvcmth cmVhL3Jvb3QvdXNyL3NpbWxhYi9yZWxlYXNlL2F1dG9ub21vdXNTeXN0ZW1zMS4xLjEvaW5jbHVk ZS9SYW5nZS5oIiAyCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBSYW5nZSB7CiBwcml2 YXRlOgogIFQgX21pbjsKICBUIF9tYXg7CiBwdWJsaWM6CiAgc3RhdGljIGNvbnN0IFJhbmdlIGVt cHR5X3JuZzsKICBzdGF0aWMgY29uc3QgY2hhciAqVF9uYW1lOwogICAKICAgCiAgIAogICAKICBz dGF0aWMgc3RkOjpzdHJpbmcgcm5nX25hbWUoKTsgIAogcHVibGljOgogIAogIFJhbmdlKCkgICAg ICAgICAgICAgICA6IF9taW4oZW1wdHlfcm5nLl9taW4pLCBfbWF4KGVtcHR5X3JuZy5fbWF4KSB7 fSAgCiAgUmFuZ2UoVCBtaW5fLCBUIG1heF8pIDogX21pbihtaW5fKSwgX21heChtYXhfKSAgICAg e30KICBSYW5nZShjb25zdCBSYW5nZSAmcikgOiBfbWluKHIuX21pbiksIF9tYXgoci5fbWF4KSB7 fQoKICBSYW5nZSAmb3BlcmF0b3I9KGNvbnN0IFJhbmdlICZyKSB7IF9taW49ci5fbWluOyBfbWF4 PXIuX21heDsgcmV0dXJuICp0aGlzOyB9CiAgUmFuZ2UgJnNldChUIG1pbl8sIFQgbWF4XykgICAg ICAgeyBfbWluPW1pbl87IF9tYXg9bWF4XzsgcmV0dXJuICp0aGlzOyB9CiAgUmFuZ2UgJnNldE9y ZGVyZWQoVCB2MSwgVCB2Mik7ICAgIAogIFJhbmdlICZzZXRFbXB0eSgpICAgICAgICAgICAgICAg IHsgcmV0dXJuICgqdGhpcyA9IGVtcHR5X3JuZyk7IH0KCiAgVCAgbWluKCkgY29uc3QgeyByZXR1 cm4gX21pbjsgfQogIFQgIG1heCgpIGNvbnN0IHsgcmV0dXJuIF9tYXg7IH0KICBUICZtaW4oKSAg ICAgICB7IHJldHVybiBfbWluOyB9CiAgVCAmbWF4KCkgICAgICAgeyByZXR1cm4gX21heDsgfQoK ICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmFuZ2UgJnIyKSBjb25zdCB7CiAgICAgCiAgICAgIGlm IChpc0VtcHR5KCkpCiAgICAgICAgcmV0dXJuIHIyLmlzRW1wdHkoKTsKICAgICAgZWxzZSAgICAg ICAgICAgIAogICAgICAgIHJldHVybiAoKG1pbigpPT1yMi5taW4oKSkmJihtYXgoKT09cjIubWF4 KCkpKTsgCiAgfQogICAgCiAgYm9vbCBjb250YWlucyhUIHZhbCkgY29uc3QgewogICAgcmV0dXJu ICgobWluKCkgPD0gdmFsKSAmJiAodmFsIDw9IG1heCgpKSk7IH0KCiAgVCBjbGFtcCAoVCB2YWwp IGNvbnN0IHsKICAgICAKICAgIGlmICh2YWwgPD0gX21pbikKICAgICAgcmV0dXJuIF9taW47CiAg ICBlbHNlIGlmICh2YWwgPj0gX21heCkgCiAgICAgIHJldHVybiBfbWF4OwogICAgcmV0dXJuIHZh bDsKICB9CiAgCiAgUmFuZ2UgZGlsYXRlZEJ5KFQgdmFsKSBjb25zdCB7CiAgICByZXR1cm4gUmFu Z2UoX21pbi12YWwsIF9tYXgrdmFsKTsKICB9CgogIFJhbmdlIGNvbnRyYWN0ZWRCeShUIHZhbCkg Y29uc3QgewogICAgcmV0dXJuIFJhbmdlKF9taW4rdmFsLCBfbWF4LXZhbCk7CiAgfQoKICBUICAg IGxlbmd0aCgpICBjb25zdCB7IHJldHVybiBfbWF4IC0gX21pbjsgfQogICAKCiAgYm9vbCBpc0Vt cHR5KCkgY29uc3QgeyByZXR1cm4gKG1pbigpID4gbWF4KCkpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh c3MgVD4KUmFuZ2U8VD4gcGx1c01pbnVzKFQgcG9zVmFsKTsKCnRlbXBsYXRlIDxjbGFzcyBUPgpi b29sIGRvX2ludGVyc2VjdChjb25zdCBSYW5nZTxUPiAmcjEsIGNvbnN0IFJhbmdlPFQ+ICZyMik7 CiAKCnRlbXBsYXRlIDxjbGFzcyBUPgpSYW5nZTxUPiBpbnRlcnNlY3Rpb24oY29uc3QgUmFuZ2U8 VD4gJnIxLCBjb25zdCBSYW5nZTxUPiAmcjIpOwoKdGVtcGxhdGUgPGNsYXNzIFQ+ClJhbmdlPFQ+ IGNvbnZvbHZlKGNvbnN0IFJhbmdlPFQ+ICZyMSwgY29uc3QgUmFuZ2U8VD4gJnIyKTsKCnRlbXBs YXRlIDxjbGFzcyBUPgpvc3RyZWFtICZvcGVyYXRvcjw8KG9zdHJlYW0gJm9zLCBjb25zdCBSYW5n ZTxUPiAmcik7Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaXN0cmVhbSAmb3BlcmF0b3I+Pihpc3RyZWFt ICZpcywgUmFuZ2U8VD4gJnIpOwoKDAogCiAKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKc3Rk OjpzdHJpbmcgUmFuZ2U8VD46OnJuZ19uYW1lKCkKewogIHJldHVybiAoc3RkOjpzdHJpbmcoIlJh bmdlPCIpICsgVF9uYW1lICsgIj4iKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKUmFu Z2U8VD4gJlJhbmdlPFQ+OjpzZXRPcmRlcmVkKFQgdjEsIFQgdjIpCnsKICBpZiAodjEgPCB2MikK ICAgIHNldCh2MSwgdjIpOwogIGVsc2UKICAgIHNldCh2MiwgdjEpOwogIHJldHVybiAqdGhpczsK fQoKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKUmFuZ2U8VD4gcGx1c01pbnVzKFQgcG9zVmFs KQp7CiAgcmV0dXJuIFJhbmdlPFQ+KC1wb3NWYWwsIHBvc1ZhbCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xh c3MgVD4KaW5saW5lCmJvb2wgZG9faW50ZXJzZWN0KGNvbnN0IFJhbmdlPFQ+ICZyMSwgY29uc3Qg UmFuZ2U8VD4gJnIyKQp7CiAgcmV0dXJuICggIXIxLmlzRW1wdHkoKSAmJiAhcjIuaXNFbXB0eSgp ICYmIAogICAgICAgICAgIChyMS5taW4oKSA8PSByMi5tYXgoKSkgJiYgCiAgICAgICAgICAgKHIy Lm1pbigpIDw9IHIxLm1heCgpKSApOwp9CgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpSYW5n ZTxUPiBpbnRlcnNlY3Rpb24oY29uc3QgUmFuZ2U8VD4gJnIxLCBjb25zdCBSYW5nZTxUPiAmcjIp CnsKICBpZiAoZG9faW50ZXJzZWN0KHIxLHIyKSkKICAgIHJldHVybiBSYW5nZTxUPihzdGQ6Om1h eChyMS5taW4oKSxyMi5taW4oKSksCiAgICAgICAgICAgICAgICAgICAgc3RkOjptaW4ocjEubWF4 KCkscjIubWF4KCkpKTsgCiAgcmV0dXJuIFJhbmdlPFQ+OjplbXB0eV9ybmc7Cn0KCgp0ZW1wbGF0 ZSA8Y2xhc3MgVD4KaW5saW5lClJhbmdlPFQ+IGNvbnZvbHZlKGNvbnN0IFJhbmdlPFQ+ICZyMSwg Y29uc3QgUmFuZ2U8VD4gJnIyKQp7CiAgaWYgKHIxLmlzRW1wdHkoKSB8fCByMi5pc0VtcHR5KCkp CiAgICByZXR1cm4gUmFuZ2U8VD46OmVtcHR5X3JuZzsKICByZXR1cm4gUmFuZ2U8VD4ocjEubWlu KCkgKyByMi5taW4oKSwgcjEubWF4KCkgKyByMi5tYXgoKSk7IAp9CgoKCiMgMSAiL3UvbHBhZ2Uv d29ya2FyZWEvcm9vdC91c3Ivc2ltbGFiL3JlbGVhc2UvYXV0b25vbW91c1N5c3RlbXMxLjEuMS9p bmNsdWRlL1N0cmVhbU1vZGUuaCIgMQogCiAKIAogCgoKCgoKCgogCiAKIAogCiAKIAogCmNsYXNz IFN0cmVhbU1vZGUgewogcHVibGljOgogIGVudW0gU3R5bGUgeyBQTEFJTiwgICAgICAgIAoJICAg ICAgIEFHR1JFR0FURSwgICAgCgkgICAgICAgQ09OU1RSVUNUT1IsICAKCSAgICAgICBNRU1CRVJf TEFCRUwsIAoJICAgICAgIEFSUkFZX0xBQkVMLCAgCgkgICAgICAgQkVZT05EIH07ICAgICAKCiAg U3RyZWFtTW9kZSgpIHt9ICAgICAgICAgICAgIAogcHJpdmF0ZToKICAgCiAgIAogICAKICAgCiAg IAogIFN0cmVhbU1vZGUoU3RyZWFtTW9kZSAmbSk7ICAKIHB1YmxpYzoKICBzdGF0aWMgU3RyZWFt TW9kZSAmZ2V0SW5zdGFuY2UoKTsgICAKICBjb25zdCBjaGFyICppbmRlbnQoKTsKICBpbnQgICAg ICAgICBpbmRlbnRMZXZlbCgpICAgICAgIHsgcmV0dXJuIGQuaW5kZW50TGV2ZWw7IH0KICBpbnQg ICAgICAgICBpbmRlbnRMZW4oKTsgIAogIHZvaWQgaW5jSW5kZW50TGV2ZWwoKTsKICB2b2lkIGRl Y0luZGVudExldmVsKCk7CgogIFN0eWxlICBzdHlsZSgpICAgICAgICAgICAgICAgICAgeyByZXR1 cm4gZC5zdHlsZVN0YWNrLnRvcCgpOyB9CiAgdm9pZCAgIHB1c2hTdHlsZShTdHlsZSBzdCkgICAg ICB7IGQuc3R5bGVTdGFjay5wdXNoKHN0KTsgfQogIHZvaWQgICBwb3BTdHlsZSgpICAgICAgICAg ICAgICAgeyBkLnN0eWxlU3RhY2sucG9wKCk7IH0KICB2b2lkICAgc2V0U3R5bGUoU3R5bGUgc3Qp ICAgICAgIHsgcmV0dXJuIGQuc3R5bGVTdGFjay5zZXRUb3Aoc3QpOyB9CgogIGJvb2wgICByZXR1 cm5Nb2RlKCkgICAgICAgICAgICAgeyByZXR1cm4gKHN0eWxlKCk+PWQucmV0dXJuTW9kZVN0YWNr LnRvcCgpKTt9CiAgdm9pZCAgIHB1c2hSZXR1cm5Nb2RlKFN0eWxlIHN0KSB7IGQucmV0dXJuTW9k ZVN0YWNrLnB1c2goc3QpOyB9CiAgdm9pZCAgIHBvcFJldHVybk1vZGUoKSAgICAgICAgICB7IGQu cmV0dXJuTW9kZVN0YWNrLnBvcCgpOyB9CiBwdWJsaWM6CiAgIAogICAKICAgCiAgIAogICAKICAg CiAgIAogICAKICBjbGFzcyBJbmRlbnRUaGlzQ29udGV4dCB7CiAgICBTdHJlYW1Nb2RlICZzbTsK ICBwdWJsaWM6CiAgICBJbmRlbnRUaGlzQ29udGV4dCgpICAgICAgOiBzbShnZXRJbnN0YW5jZSgp KSB7IHNtLmluY0luZGVudExldmVsKCk7IH0KICAgIEluZGVudFRoaXNDb250ZXh0KFN0cmVhbU1v ZGUgJnNtXykgOiBzbShzbV8pIHsgc20uaW5jSW5kZW50TGV2ZWwoKTsgfQogICAgfkluZGVudFRo aXNDb250ZXh0KCkgICAgICAgICAgICAgICAgICAgICAgICAgeyBzbS5kZWNJbmRlbnRMZXZlbCgp OyB9CiAgfTsKICBjbGFzcyBTdHlsZVRoaXNDb250ZXh0IHsgCiAgICBTdHJlYW1Nb2RlICZzbTsK ICBwdWJsaWM6CiAgICBTdHlsZVRoaXNDb250ZXh0KFN0eWxlIHN0KSA6ICAgICAgICBzbShnZXRJ bnN0YW5jZSgpKSB7IHNtLnB1c2hTdHlsZShzdCk7IH0KICAgIFN0eWxlVGhpc0NvbnRleHQoU3Ry ZWFtTW9kZSAmc21fLCBTdHlsZSBzdCkgOiBzbShzbV8pIHsgc20ucHVzaFN0eWxlKHN0KTsgfQog ICAgflN0eWxlVGhpc0NvbnRleHQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg eyBzbS5wb3BTdHlsZSgpOyB9CiAgfTsKICBjbGFzcyBDaGVja1RoaXNDb250ZXh0IHsKICAgIFN0 cmVhbU1vZGUgJnNtOwogICAgaW50IHN0eWxlTGV2ZWw7CiAgICBpbnQgcmV0dXJuTGV2ZWw7CiAg ICBpbnQgaW5kZW50TGV2ZWw7CiAgcHVibGljOgogICAgQ2hlY2tUaGlzQ29udGV4dChTdHJlYW1N b2RlICZzbV8pOwogICAgfkNoZWNrVGhpc0NvbnRleHQoKTsKICB9OwogIGZyaWVuZCBjbGFzcyBT dHJlYW1Nb2RlOjpDaGVja1RoaXNDb250ZXh0OwogcHJpdmF0ZToKICAgCiAgIAogICAKICAgCiAg IAogIGNsYXNzIGFnZ3Jfc3RhcnRfaGxwIHsKICAgcHVibGljOgogICAgU3RyZWFtTW9kZSAgICAg ICAmc207CiAgICBjb25zdCBjaGFyICAgICAgICpuYW1lOwogICAgY29uc3QgY2hhciAgICAgICAq YnJhY2tldDsKICAgIFN0cmVhbU1vZGU6OlN0eWxlIGVuZGxTdHlsZTsKICAgIGFnZ3Jfc3RhcnRf aGxwKFN0cmVhbU1vZGUgICAgICAgJnNtXywgCgkJICAgY29uc3QgY2hhciAgICAgICAqdHlwZU5h bWUsCgkJICAgU3RyZWFtTW9kZTo6U3R5bGUgc3RfPVN0cmVhbU1vZGU6Ok1FTUJFUl9MQUJFTCwK ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgKmJyYWNrZXRfID0gIigiICkKICAg IDogc20oc21fKSwgbmFtZSh0eXBlTmFtZSksIGJyYWNrZXQoYnJhY2tldF8pLCBlbmRsU3R5bGUo c3RfKSB7fQogIH07CiAgY2xhc3MgYWdncl9zcGFjZV9obHAgewogICBwdWJsaWM6CiAgICBTdHJl YW1Nb2RlICAgICAgICZzbTsKICAgIGNvbnN0IGNoYXIgICAgICAgKmRlbGltOwogICAgU3RyZWFt TW9kZTo6U3R5bGUgc3BlY2lhbEVuZGxTdHlsZTsKICAgIGFnZ3Jfc3BhY2VfaGxwKFN0cmVhbU1v ZGUgJnNtXywgY29uc3QgY2hhciAqZGVsaW1fLAogICAgICAgICAgICAgICAgICAgU3RyZWFtTW9k ZTo6U3R5bGUgc3BlY2lhbFN0Xz1TdHJlYW1Nb2RlOjpCRVlPTkQpCiAgICAgIDogc20oc21fKSwg ZGVsaW0oZGVsaW1fKSwgc3BlY2lhbEVuZGxTdHlsZShzcGVjaWFsU3RfKSB7fQogIH07CiAgY2xh c3MgYWdncl9maW5pc2hfaGxwIHsKICAgcHVibGljOgogICAgU3RyZWFtTW9kZSAgICAgICAmc207 CiAgICBjb25zdCBjaGFyICAgICAgICpicmFja2V0OwogICAgYWdncl9maW5pc2hfaGxwKFN0cmVh bU1vZGUgJnNtXywgY29uc3QgY2hhciAqYnJhY2tldF8gPSAiKSIgKSAKICAgICAgOiBzbShzbV8p LCBicmFja2V0KGJyYWNrZXRfKSB7fQogIH07CiAgY2xhc3MgbWVtYmVyX2hscCB7CiAgIHB1Ymxp YzoKICAgIFN0cmVhbU1vZGUgICZzbTsKICAgIGNvbnN0IGNoYXIgICpzdHI7CiAgICBtZW1iZXJf aGxwKFN0cmVhbU1vZGUgJnNtXywgY29uc3QgY2hhciAqdHlwZU5hbWUpIAogICAgICA6IHNtKHNt XyksIHN0cih0eXBlTmFtZSkge30KICB9OwogIGNsYXNzIGFycmF5X2luZGV4X2hscCB7CiAgIHB1 YmxpYzoKICAgIFN0cmVhbU1vZGUgJnNtOwogICAgaW50ICAgICAgICAgaTsKICAgIGludCAgICAg ICAgIGo7CiAgICBib29sICAgICAgICB1c2VKOwogICAgYXJyYXlfaW5kZXhfaGxwKFN0cmVhbU1v ZGUgJnNtXywgaW50IGlfLCBib29sIHVzZUpfLCBpbnQgal8pCiAgICAgIDogc20oc21fKSwgaShp XyksIGooal8pLCB1c2VKKHVzZUpfKSB7fQogIH07CiBwdWJsaWM6CiAgIAogICAKICAgCiAgIAog IGFnZ3Jfc3RhcnRfaGxwICBhZ2dyX3N0YXJ0KGNvbnN0IGNoYXIgKmNsYXNzTmFtZSwgCgkJCSAg ICAgU3R5bGUgICAgICAgZW5kbFN0eWxlPU1FTUJFUl9MQUJFTCk7CiAgIAogICAKICAgCiAgIAoK ICBtZW1iZXJfaGxwICAgICAgbWVtYmVyX25hbWUoY29uc3QgY2hhciAqbWVtYmVyTmFtZSk7CiAg YWdncl9zcGFjZV9obHAgIGFnZ3Jfc3BhY2UoY29uc3QgY2hhciAqZGVsaW09IiwiLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFN0eWxlICAgICAgIHNwZWNpYWxFbmRsU3R5bGU9QkVZT05E KTsKICAgCiAgIAogICAKICAgCiAgIAogICAKCiAgYWdncl9maW5pc2hfaGxwIGFnZ3JfZmluaXNo KCk7CSAgICAgCgogIGFnZ3Jfc3RhcnRfaGxwICBhcnJheV9zdGFydChjb25zdCBjaGFyICpjbGFz c05hbWUsIAoJCQkgICAgICBTdHlsZSAgICAgICBlbmRsU3R5bGU9Q09OU1RSVUNUT1IsCgkJCSAg ICAgIGNvbnN0IGNoYXIgKmJyYWNrZXQ9IlsiKTsKICBhcnJheV9pbmRleF9obHAgYXJyYXlfaW5k ZXgoaW50IGkpOwogIGFycmF5X2luZGV4X2hscCBhcnJheV9pbmRleChpbnQgaSwgaW50IGopOwog IGFnZ3Jfc3BhY2VfaGxwICBhcnJheV9zcGFjZSAoY29uc3QgY2hhciAqZGVsaW0gID0iLCIpOwog IGFnZ3JfZmluaXNoX2hscCBhcnJheV9maW5pc2goY29uc3QgY2hhciAqYnJhY2tldD0iXSIpOwoK IHByaXZhdGU6CiAgIAogIAogIAogIAoKICAKCiAgY2xhc3MgU3R5bGVTdGFjayB7CiAgICAgCiAg ICAgCiAgICAgCiAgICAgCiAgICBTdHlsZSAgc3RhY2tbMTYgXTsKICAgIGludCAgICBpbmRleDsK ICAgIGludCAgICBpbmRleERlc2lyZWQ7ICAKICBwdWJsaWM6CiAgICBTdHlsZVN0YWNrKCk7CiAg ICB2b2lkICBwdXNoKFN0eWxlIHN0KTsKICAgIHZvaWQgIHBvcCgpOwogICAgU3R5bGUgdG9wKCkg Y29uc3Q7CiAgICB2b2lkICBzZXRUb3AoU3R5bGUgc3QpOwogICAgaW50ICAgZ2V0SW5kZXgoKSBj b25zdDsgIAogIH07CiAgc3RydWN0IERhdGEgewogICAgU3R5bGVTdGFjayBzdHlsZVN0YWNrOyAg ICAgICAKICAgIFN0eWxlU3RhY2sgcmV0dXJuTW9kZVN0YWNrOwogICAgaW50ICAgICAgICBpbmRl bnRMZXZlbDsKICAgIERhdGEoKTsKICB9OwogIERhdGEgZDsgCiAgc3RhdGljIGNoYXIgYmxhbmtz WzgwIF07Cn07Cgpjb25zdCBjaGFyICp0b1N0cmluZyhTdHJlYW1Nb2RlOjpTdHlsZSBzdCk7Cgpv c3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG9zLCBjb25zdCBTdHJlYW1Nb2RlOjphZ2dyX3N0 YXJ0X2hscCAgJm0pOwpvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG9zLCBjb25zdCBTdHJl YW1Nb2RlOjphZ2dyX3NwYWNlX2hscCAgJm0pOwpvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0m IG9zLCBjb25zdCBTdHJlYW1Nb2RlOjphZ2dyX2ZpbmlzaF9obHAgJm0pOwpvc3RyZWFtJiBvcGVy YXRvcjw8KG9zdHJlYW0mIG9zLCBjb25zdCBTdHJlYW1Nb2RlOjptZW1iZXJfaGxwICAgICAgJm0p Owpvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG9zLCBjb25zdCBTdHJlYW1Nb2RlOjphcnJh eV9pbmRleF9obHAgJm0pOwoKCgoKDAogCgppbmxpbmUgU3RyZWFtTW9kZTo6U3R5bGVTdGFjazo6 U3R5bGVTdGFjaygpIAp7IAogIGluZGV4ID0gaW5kZXhEZXNpcmVkID0gMDsKICBzdGFja1swXSA9 IENPTlNUUlVDVE9SOyAKfQoKaW5saW5lIFN0cmVhbU1vZGU6OlN0eWxlIFN0cmVhbU1vZGU6OlN0 eWxlU3RhY2s6OnRvcCgpIGNvbnN0CnsKICByZXR1cm4gc3RhY2tbaW5kZXhdOwp9CgppbmxpbmUg dm9pZCBTdHJlYW1Nb2RlOjpTdHlsZVN0YWNrOjpzZXRUb3AoU3RyZWFtTW9kZTo6U3R5bGUgc3Qp CnsKICBzdGFja1tpbmRleF0gPSBzdDsKfQoKaW5saW5lIGludCBTdHJlYW1Nb2RlOjpTdHlsZVN0 YWNrOjpnZXRJbmRleCgpIGNvbnN0CnsKICByZXR1cm4gaW5kZXg7Cn0KCgwKIAogCiAKCmlubGlu ZSBjb25zdCBjaGFyICpTdHJlYW1Nb2RlOjppbmRlbnQoKQp7CiAgcmV0dXJuIGJsYW5rcyArICg4 MCAgLSAxIC0gaW5kZW50TGVuKCkpOwp9CgppbmxpbmUgaW50IFN0cmVhbU1vZGU6OmluZGVudExl bigpCnsKICByZXR1cm4gZC5pbmRlbnRMZXZlbCAqIDMgOwp9CgppbmxpbmUgdm9pZCBTdHJlYW1N b2RlOjppbmNJbmRlbnRMZXZlbCgpCnsKICBpbnQgdGVtcD1kLmluZGVudExldmVsOwogIGlmICh0 ZW1wIDwgKCg4MCAtMSkgLyAzICkgKQogICAgZC5pbmRlbnRMZXZlbCA9IHRlbXArMTsKICBlbHNl IAogICAgc3RkOjpjZXJyIDw8ICIqKiBXQVJOSU5HOiAqKiAgU3RyZWFtTW9kZSBtYXggaW5kZW50 LWxldmVsIGV4Y2VlZGVkLiIKCSAgICAgIDw8IGVuZGw7Cn0KCmlubGluZSB2b2lkIFN0cmVhbU1v ZGU6OmRlY0luZGVudExldmVsKCkKewogIGludCB0ZW1wPWQuaW5kZW50TGV2ZWw7CiAgaWYgKHRl bXAgPiAwKQogICAgZC5pbmRlbnRMZXZlbCA9IHRlbXAtMTsKICBlbHNlIAogICAgc3RkOjpjZXJy IDw8ICIqKiBXQVJOSU5HOiAqKiAgU3RyZWFtTW9kZSBpbmRlbnQtbGV2ZWwgJ3VuZGVyZmxvdycu IiAKCSAgICAgIDw8IGVuZGw7Cn0KCgppbmxpbmUgU3RyZWFtTW9kZTo6YWdncl9zdGFydF9obHAK U3RyZWFtTW9kZTo6YWdncl9zdGFydChjb25zdCBjaGFyICpjbGFzc05hbWUsIAoJCSAgICAgICBT dHJlYW1Nb2RlOjpTdHlsZSBlbmRsU3R5bGUpCnsKICByZXR1cm4gYWdncl9zdGFydF9obHAoKnRo aXMsIGNsYXNzTmFtZSwgZW5kbFN0eWxlLCAiKCIpOwp9CgppbmxpbmUgU3RyZWFtTW9kZTo6bWVt YmVyX2hscCBTdHJlYW1Nb2RlOjptZW1iZXJfbmFtZShjb25zdCBjaGFyICptZW1iZXJOYW1lKQp7 CiAgcmV0dXJuIG1lbWJlcl9obHAoKnRoaXMsIG1lbWJlck5hbWUpOwp9CgppbmxpbmUgU3RyZWFt TW9kZTo6YWdncl9zcGFjZV9obHAgIFN0cmVhbU1vZGU6OmFnZ3Jfc3BhY2UoY29uc3QgY2hhciAq ZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTdHJlYW1Nb2RlOjpTdHlsZSBzcGVjaWFsRW5kbFN0eWxlKQp7CiAgcmV0dXJuIGFn Z3Jfc3BhY2VfaGxwKCp0aGlzLGRlbGltLHNwZWNpYWxFbmRsU3R5bGUpOwp9CgppbmxpbmUgU3Ry ZWFtTW9kZTo6YWdncl9maW5pc2hfaGxwIFN0cmVhbU1vZGU6OmFnZ3JfZmluaXNoKCkKewogIHJl dHVybiBhZ2dyX2ZpbmlzaF9obHAoKnRoaXMsICIpIik7Cn0KCmlubGluZSBTdHJlYW1Nb2RlOjph Z2dyX3N0YXJ0X2hscApTdHJlYW1Nb2RlOjphcnJheV9zdGFydChjb25zdCBjaGFyICpjbGFzc05h bWUsICAKCQkJU3RyZWFtTW9kZTo6U3R5bGUgZW5kbFN0eWxlLAoJCQljb25zdCBjaGFyICpicmFj a2V0KQp7CiAgcmV0dXJuIGFnZ3Jfc3RhcnRfaGxwKCp0aGlzLCBjbGFzc05hbWUsIGVuZGxTdHls ZSwgYnJhY2tldCk7Cn0KICAKaW5saW5lIFN0cmVhbU1vZGU6OmFycmF5X2luZGV4X2hscCBTdHJl YW1Nb2RlOjphcnJheV9pbmRleChpbnQgaSkKewogIHJldHVybiBhcnJheV9pbmRleF9obHAoKnRo aXMsIGksIGZhbHNlLCAwKTsKfQoKaW5saW5lIFN0cmVhbU1vZGU6OmFycmF5X2luZGV4X2hscCBT dHJlYW1Nb2RlOjphcnJheV9pbmRleChpbnQgaSwgaW50IGopCnsKICByZXR1cm4gYXJyYXlfaW5k ZXhfaGxwKCp0aGlzLCBpLCB0cnVlLCBqKTsKfQoKaW5saW5lIFN0cmVhbU1vZGU6OmFnZ3Jfc3Bh Y2VfaGxwICBTdHJlYW1Nb2RlOjphcnJheV9zcGFjZShjb25zdCBjaGFyICpkZWxpbSkKewogIHJl dHVybiBhZ2dyX3NwYWNlX2hscCgqdGhpcywgZGVsaW0pOwp9CgppbmxpbmUgU3RyZWFtTW9kZTo6 YWdncl9maW5pc2hfaGxwIFN0cmVhbU1vZGU6OmFycmF5X2ZpbmlzaChjb25zdCBjaGFyICpicmFr KQp7CiAgcmV0dXJuIGFnZ3JfZmluaXNoX2hscCgqdGhpcywgYnJhayk7Cn0KCgoKCiMgMTU4ICIv dS9scGFnZS93b3JrYXJlYS9yb290L3Vzci9zaW1sYWIvcmVsZWFzZS9hdXRvbm9tb3VzU3lzdGVt czEuMS4xL2luY2x1ZGUvUmFuZ2UuaCIgMgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCm9z dHJlYW0gJm9wZXJhdG9yPDwob3N0cmVhbSAmb3MsIGNvbnN0IFJhbmdlPFQ+ICZyKQp7CgogIFN0 cmVhbU1vZGUgJnNtKFN0cmVhbU1vZGU6OmdldEluc3RhbmNlKCkpOwogIG9zIDw8IHNtLmFnZ3Jf c3RhcnQoUmFuZ2U8VD46OnJuZ19uYW1lKCkuY19zdHIoKSwgU3RyZWFtTW9kZTo6QkVZT05EKQog ICAgIDw8IHNtLm1lbWJlcl9uYW1lKCJtaW4iKSA8PCByLm1pbigpIDw8IHNtLmFnZ3Jfc3BhY2Uo KQogICAgIDw8IHNtLm1lbWJlcl9uYW1lKCJtYXgiKSA8PCByLm1heCgpIDw8IHNtLmFnZ3JfZmlu aXNoKCk7CgoKCiAgcmV0dXJuIG9zOwp9CgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQppc3Ry ZWFtICZvcGVyYXRvcj4+KGlzdHJlYW0gJmlzLCBSYW5nZTxUPiAmcikKewogIGlzID4+IHIubWlu KCkgPj4gci5tYXgoKTsKICByZXR1cm4gaXM7Cn0KCgoKCiMgOSAiUG9zZVRvU3RhdGVYZm9ybS5o IiAyCgojIDEgIi91L2xwYWdlL3dvcmthcmVhL3Jvb3QvdXNyL3NpbWxhYi9yZWxlYXNlL2F1dG9u b21vdXNTeXN0ZW1zMS4xLjEvaW5jbHVkZS9Cb3VuZGluZ0JveC5oIiAxCgoKIAogCiAKIAogCiAK IAogCiAKIAogCiAKCiMgMSAiL3UvbHBhZ2Uvd29ya2FyZWEvcm9vdC91c3Ivc2ltbGFiL3JlbGVh c2UvYXV0b25vbW91c1N5c3RlbXMxLjEuMS9pbmNsdWRlL1BvaW50LmgiIDEKCgogCiAKIAogCiAK IAogCiAKIAogCiAKIAoKCmNsYXNzIFBvaW50IAp7CgogcHVibGljOgogIGRvdWJsZSB4OwogIGRv dWJsZSB5OwogIGlubGluZSAgUG9pbnQgKCk6IHggKDApLCB5ICgwKSB7IH0gOyAKICBpbmxpbmUg IFBvaW50IChkb3VibGUgeDAsIGRvdWJsZSB5MCk6IHggKHgwKSwgeSAoeTApIHsgfSA7IAogIHZv aWQgc2V0KGRvdWJsZSB4MCwgZG91YmxlIHkwKSB7eD14MDt5PXkwO307CiAgflBvaW50ICgpIHt9 OwoKICBkb3VibGUgZGlzdChQb2ludCBwKSBjb25zdDsgICAgICAgIAogIGRvdWJsZSBDcm9zcyhQ b2ludCBwMSwgUG9pbnQgcDIpIGNvbnN0OwogICAKICAgCiAgIAogICAKfTsKaXN0cmVhbSYgb3Bl cmF0b3I+Pihpc3RyZWFtJiBzLCBQb2ludCYgcCk7Cm9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVh bSYgcywgY29uc3QgUG9pbnQmIHApOwoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CgoKCiMgMTYgIi91L2xwYWdlL3dvcmthcmVhL3Jvb3QvdXNyL3NpbWxhYi9yZWxlYXNlL2F1dG9u b21vdXNTeXN0ZW1zMS4xLjEvaW5jbHVkZS9Cb3VuZGluZ0JveC5oIiAyCgoKCmNsYXNzIEJvdW5k aW5nQm94IAp7CiBwdWJsaWM6CiAgdm9pZCBTZXRFbXB0eSgpOwogIHZvaWQgU2V0KGNvbnN0IFBv aW50ICZwMSwgY29uc3QgUG9pbnQgJnAyKTsgIAogIHZvaWQgUmVjb21wdXRlKGNvbnN0IFBvaW50 ICpwLCBpbnQgbik7ICAgICAgIAogIHZvaWQgVXBkYXRlKGNvbnN0IFBvaW50ICZwKTsgICAgICAg ICAgICAgICAgIAoKICBQb2ludCBnZXRfTEwoKSBjb25zdCB7cmV0dXJuIExMO30KICBQb2ludCBn ZXRfVVIoKSBjb25zdCB7cmV0dXJuIFVSO30KICB2b2lkICBzZXRfTEwoY29uc3QgUG9pbnQgJmxs KSB7IExMPWxsOyB9CiAgdm9pZCAgc2V0X1VSKGNvbnN0IFBvaW50ICZ1cikgeyBVUj11cjsgfQoK ICBSYW5nZTxkb3VibGU+IGdldFhSYW5nZSgpIGNvbnN0OwogIFJhbmdlPGRvdWJsZT4gZ2V0WVJh bmdlKCkgY29uc3Q7CiAgdm9pZCBzZXRYUmFuZ2UoY29uc3QgUmFuZ2U8ZG91YmxlPiAmcik7CiAg dm9pZCBzZXRZUmFuZ2UoY29uc3QgUmFuZ2U8ZG91YmxlPiAmcik7CgogIGJvb2wgIENvbnRhaW5z IChjb25zdCBQb2ludCAmcCkgY29uc3Q7ICAgICAgICAgIAogIGJvb2wgIElzRW1wdHkoKSBjb25z dDsgICAgICAgICAgICAgICAgICAgICAgICAgIAogIFBvaW50IFRydW5jYXRlSW50b1JhbmdlKGNv bnN0IFBvaW50ICZwKSBjb25zdDsgIAogIAogIEJvdW5kaW5nQm94KCk7CiAgQm91bmRpbmdCb3go Y29uc3QgUG9pbnQgJnAxLCBjb25zdCBQb2ludCAmcDIpICB7IFNldChwMSxwMik7IH0KICB+Qm91 bmRpbmdCb3goKTsKICAKIHByaXZhdGU6CiAgUG9pbnQgTEw7CiAgUG9pbnQgVVI7Cn07CgogCgoK Y2xhc3Mgc3RkOjpvc3RyZWFtOwpzdGQ6Om9zdHJlYW0gJm9wZXJhdG9yPDwoc3RkOjpvc3RyZWFt ICZvcywgY29uc3QgQm91bmRpbmdCb3ggJmIpOwoKCgwKIAogCgppbmxpbmUgClJhbmdlPGRvdWJs ZT4gQm91bmRpbmdCb3g6OmdldFhSYW5nZSgpIGNvbnN0CnsKICByZXR1cm4gUmFuZ2U8ZG91Ymxl PihMTC54LCBVUi54KTsKfQoKaW5saW5lIApSYW5nZTxkb3VibGU+IEJvdW5kaW5nQm94OjpnZXRZ UmFuZ2UoKSBjb25zdAp7CiAgcmV0dXJuIFJhbmdlPGRvdWJsZT4oTEwueSwgVVIueSk7Cn0KCmlu bGluZSAKdm9pZCBCb3VuZGluZ0JveDo6c2V0WFJhbmdlKGNvbnN0IFJhbmdlPGRvdWJsZT4gJnIp CnsKICBMTC54ID0gci5taW4oKTsKICBVUi54ID0gci5tYXgoKTsKfQoKaW5saW5lIAp2b2lkIEJv dW5kaW5nQm94OjpzZXRZUmFuZ2UoY29uc3QgUmFuZ2U8ZG91YmxlPiAmcikKewogIExMLnkgPSBy Lm1pbigpOwogIFVSLnkgPSByLm1heCgpOwp9CgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCgojIDEwICJQb3NlVG9TdGF0ZVhmb3JtLmgiIDIKCiMgMSAiL3UvbHBhZ2Uvd29ya2Fy ZWEvcm9vdC91c3Ivc2ltbGFiL3JlbGVhc2UvYXV0b25vbW91c1N5c3RlbXMxLjEuMS9pbmNsdWRl L1ZlY3RvcjIuaCIgMQoKCiAKIAogCiAKIAogCiAKIAoKCmNsYXNzIEFuZ2xlOwoKY2xhc3MgVmVj dG9yMiB7CiBwdWJsaWM6CiAgZG91YmxlIHg7CiAgZG91YmxlIHk7CgogcHVibGljOgogICAKICBj bGFzcyBOb3JtYWxpemVaZXJvTGVuZ3RoRXhjZXB0aW9uIHt9OwogIAogICAKICBzdGF0aWMgY29u c3QgVmVjdG9yMiB6ZXJvOyAgICAgCiAgc3RhdGljIGNvbnN0IFZlY3RvcjIgZWxlbVsyXTsgIAoK ICAgCiAgVmVjdG9yMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fSAgCiAgVmVj dG9yMihkb3VibGUgeF8sIGRvdWJsZSB5XykgICAgICAgICAgICA6IHgoeF8pLCB5KHlfKSB7fQog IGV4cGxpY2l0IFZlY3RvcjIoY29uc3QgZG91YmxlICp2YWxzKSAgICAgOiB4KHZhbHNbMF0pLCB5 KHZhbHNbMV0pIHt9CgogIFZlY3RvcjIgJnNldChkb3VibGUgeF8sIGRvdWJsZSB5XykgICAgICAg eyB4PXhfOyB5PXlfOyByZXR1cm4gKnRoaXM7IH0KICBWZWN0b3IyICZzZXQoY29uc3QgZG91Ymxl ICp2YWxzKSAgICAgICAgIHsgcmV0dXJuIHNldCh2YWxzWzBdLHZhbHNbMV0pOyB9CgogICAKICAg CgogIGRvdWJsZSAmb3BlcmF0b3JbXShpbnQgaSkgICAgICAgICAgICAgICAgeyByZXR1cm4gKigm eCArIGkpOyB9CiAgZG91YmxlICBvcGVyYXRvcltdKGludCBpKSBjb25zdCAgICAgICAgICB7IHJl dHVybiAqKCZ4ICsgaSk7IH0KCiAgIAogIGRvdWJsZSAgICAgICAqYmVnaW4oKSAgICAgICAgICAg ICAgICAgICAgeyByZXR1cm4gJng7IH0KICBjb25zdCBkb3VibGUgKmJlZ2luKCkgY29uc3QgICAg ICAgICAgICAgIHsgcmV0dXJuICZ4OyB9CiAgZG91YmxlICAgICAgICplbmQoKSAgICAgICAgICAg ICAgICAgICAgICB7IHJldHVybiAoJngpKzI7IH0KICBjb25zdCBkb3VibGUgKmVuZCgpICAgY29u c3QgICAgICAgICAgICAgIHsgcmV0dXJuICgmeCkrMjsgfQoKICAgCiAgZG91YmxlICBtYWduaXR1 ZGUoKSBjb25zdDsKICBkb3VibGUgIG1hZ25pdHVkZVNxdWFyZWQoKSBjb25zdDsKICBWZWN0b3Iy IHVuaXRWZWN0b3IoKSBjb25zdAogICAgdGhyb3cgKE5vcm1hbGl6ZVplcm9MZW5ndGhFeGNlcHRp b24pOwoKICBWZWN0b3IyIHJvdGF0ZWRCeShBbmdsZSBhbmcpIGNvbnN0OwogIFZlY3RvcjIgcm90 YXRlZDkwKCkgY29uc3Q7CgogIFZlY3RvcjIgb3BlcmF0b3ItKCkgY29uc3Q7CiAgVmVjdG9yMiBv cGVyYXRvcisoY29uc3QgVmVjdG9yMiAmdikgY29uc3Q7CiAgVmVjdG9yMiBvcGVyYXRvci0oY29u c3QgVmVjdG9yMiAmdikgY29uc3Q7CiAgVmVjdG9yMiBvcGVyYXRvciooZG91YmxlIGEpIGNvbnN0 OwogIFZlY3RvcjIgb3BlcmF0b3IvKGRvdWJsZSBhKSBjb25zdDsKCiAgYm9vbCAgICBvcGVyYXRv cj09KGNvbnN0IFZlY3RvcjIgJnYpIGNvbnN0OwoKICAgCiAgdm9pZCBub3JtYWxpemUoKSB0aHJv dyAoTm9ybWFsaXplWmVyb0xlbmd0aEV4Y2VwdGlvbik7CiAgdm9pZCBzY2FsZShkb3VibGUgcyk7 CgogIFZlY3RvcjIgJm9wZXJhdG9yKj0oZG91YmxlIGEpOwogIFZlY3RvcjIgJm9wZXJhdG9yLz0o ZG91YmxlIGEpOwogIFZlY3RvcjIgJm9wZXJhdG9yKz0oY29uc3QgVmVjdG9yMiAmdik7CiAgVmVj dG9yMiAmb3BlcmF0b3ItPShjb25zdCBWZWN0b3IyICZ2KTsKfTsKClZlY3RvcjIgb3BlcmF0b3Iq KGRvdWJsZSBhLCBjb25zdCBWZWN0b3IyICZ2KTsKCmRvdWJsZSAgY3Jvc3NQcm9kdWN0KGNvbnN0 IFZlY3RvcjIgJnYxLCBjb25zdCBWZWN0b3IyICZ2Mik7CiAKCmRvdWJsZSAgaW5uZXJQcm9kdWN0 KGNvbnN0IFZlY3RvcjIgJnYxLCBjb25zdCBWZWN0b3IyICZ2Mik7CiAKCmJvb2wgZXF1YWxzV2l0 aGluKGRvdWJsZSB2MSwgICAgICAgICBkb3VibGUgdjIsICAgICAgICAgZG91YmxlIHRvbCk7CmJv b2wgZXF1YWxzV2l0aGluKGNvbnN0IFZlY3RvcjIgJnYxLCBjb25zdCBWZWN0b3IyICZ2MiwgZG91 YmxlIHRvbCk7IAoKc3RkOjpvc3RyZWFtICZvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSAmb3MsIGNv bnN0IFZlY3RvcjIgJnYpOwpzdGQ6OmlzdHJlYW0gJm9wZXJhdG9yPj4oc3RkOjppc3RyZWFtICZp cywgVmVjdG9yMiAmdik7CgoMCiAKIAoKaW5saW5lIGRvdWJsZSAgVmVjdG9yMjo6bWFnbml0dWRl KCkgY29uc3QKeyByZXR1cm4gc3FydCh4KnggKyB5KnkpOyB9CgppbmxpbmUgZG91YmxlICBWZWN0 b3IyOjptYWduaXR1ZGVTcXVhcmVkKCkgY29uc3QKeyByZXR1cm4gKHgqeCArIHkqeSk7IH0KCmlu bGluZSBWZWN0b3IyIFZlY3RvcjI6OnVuaXRWZWN0b3IoKSBjb25zdAp0aHJvdyAoTm9ybWFsaXpl WmVyb0xlbmd0aEV4Y2VwdGlvbikKewogIGRvdWJsZSBtYWcobWFnbml0dWRlKCkpOwogIGlmICht YWcgPT0gMC4pIHRocm93IE5vcm1hbGl6ZVplcm9MZW5ndGhFeGNlcHRpb24oKTsKICByZXR1cm4g KCp0aGlzIC8gbWFnKTsKfQoKaW5saW5lIFZlY3RvcjIgVmVjdG9yMjo6cm90YXRlZDkwKCkgY29u c3QKeyByZXR1cm4gVmVjdG9yMigteSwgeCk7IH0KCmlubGluZSBWZWN0b3IyIFZlY3RvcjI6Om9w ZXJhdG9yLSgpIGNvbnN0CnsgcmV0dXJuIFZlY3RvcjIoLXgsIC15KTsgfQoKaW5saW5lIFZlY3Rv cjIgVmVjdG9yMjo6b3BlcmF0b3IrKGNvbnN0IFZlY3RvcjIgJnYpIGNvbnN0CnsgcmV0dXJuIFZl Y3RvcjIoeCt2LngsICB5K3YueSk7IH0KCmlubGluZSBWZWN0b3IyIFZlY3RvcjI6Om9wZXJhdG9y LShjb25zdCBWZWN0b3IyICZ2KSBjb25zdAp7IHJldHVybiBWZWN0b3IyKHgtdi54LCAgeS12Lnkp OyB9CgppbmxpbmUgVmVjdG9yMiBWZWN0b3IyOjpvcGVyYXRvciooZG91YmxlIGEpIGNvbnN0Cnsg cmV0dXJuIFZlY3RvcjIoeCphLCB5KmEpOyB9CgppbmxpbmUgVmVjdG9yMiBWZWN0b3IyOjpvcGVy YXRvci8oZG91YmxlIGEpIGNvbnN0CnsgcmV0dXJuIFZlY3RvcjIoeC9hLCB5L2EpOyB9Cgppbmxp bmUgYm9vbCBWZWN0b3IyOjpvcGVyYXRvcj09KGNvbnN0IFZlY3RvcjIgJnYpIGNvbnN0CnsgcmV0 dXJuICgoeD09di54KSAmJiAoeT09di55KSk7IH0KCmlubGluZSB2b2lkIFZlY3RvcjI6Om5vcm1h bGl6ZSgpIHRocm93IChOb3JtYWxpemVaZXJvTGVuZ3RoRXhjZXB0aW9uKQp7CiAgZG91YmxlIG1h ZyhtYWduaXR1ZGUoKSk7CiAgaWYgKG1hZyA9PSAwLikgdGhyb3cgTm9ybWFsaXplWmVyb0xlbmd0 aEV4Y2VwdGlvbigpOwogIHNjYWxlKDEgLyBtYWcpOwp9CgppbmxpbmUgdm9pZCBWZWN0b3IyOjpz Y2FsZShkb3VibGUgcykKewogIHggKj0gczsKICB5ICo9IHM7Cn0KCmlubGluZSBWZWN0b3IyICZW ZWN0b3IyOjpvcGVyYXRvcio9KGRvdWJsZSBhKSAKeyAKICBzY2FsZShhKTsgCiAgcmV0dXJuICp0 aGlzOyAKfQoKaW5saW5lIFZlY3RvcjIgJlZlY3RvcjI6Om9wZXJhdG9yLz0oZG91YmxlIGEpCnsK ICBzY2FsZSgxL2EpOwogIHJldHVybiAqdGhpczsgCn0KCmlubGluZSBWZWN0b3IyICZWZWN0b3Iy OjpvcGVyYXRvcis9KGNvbnN0IFZlY3RvcjIgJnYpCnsKICB4ICs9IHYueDsKICB5ICs9IHYueTsK ICByZXR1cm4gKnRoaXM7IAp9CgppbmxpbmUgVmVjdG9yMiAmVmVjdG9yMjo6b3BlcmF0b3ItPShj b25zdCBWZWN0b3IyICZ2KQp7CiAgeCAtPSB2Lng7CiAgeSAtPSB2Lnk7CiAgcmV0dXJuICp0aGlz OyAKfQoKaW5saW5lIFZlY3RvcjIgb3BlcmF0b3IqKGRvdWJsZSBhLCBjb25zdCBWZWN0b3IyICZ2 KSAKeyByZXR1cm4gdiphOyB9CgppbmxpbmUgZG91YmxlICBpbm5lclByb2R1Y3QoY29uc3QgVmVj dG9yMiAmdjEsIGNvbnN0IFZlY3RvcjIgJnYyKQp7IHJldHVybiB2MS54KnYyLnggKyB2MS55KnYy Lnk7IH0KCmlubGluZSBkb3VibGUgY3Jvc3NQcm9kdWN0KGNvbnN0IFZlY3RvcjIgJnYxLCBjb25z dCBWZWN0b3IyICZ2MikKeyByZXR1cm4gdjEueCp2Mi55IC0gdjEueSp2Mi54OyB9CgppbmxpbmUg Ym9vbCBlcXVhbHNXaXRoaW4oZG91YmxlIHYxLCBkb3VibGUgdjIsIGRvdWJsZSB0b2wpCnsgcmV0 dXJuICgodjEgPj0gdjItdG9sKSAmJiAodjEgPD0gdjIrdG9sKSk7IH0KCmlubGluZSBib29sIGVx dWFsc1dpdGhpbihjb25zdCBWZWN0b3IyICZ2MSwgY29uc3QgVmVjdG9yMiAmdjIsIGRvdWJsZSB0 b2wpCnsgcmV0dXJuICggZXF1YWxzV2l0aGluKHYxLngsdjIueCx0b2wpICYmIGVxdWFsc1dpdGhp bih2MS55LHYyLnksdG9sKSApOyB9CgoKIyAxMSAiUG9zZVRvU3RhdGVYZm9ybS5oIiAyCgoKY2xh c3MgUG9zZVRvU3RhdGVYZm9ybSB7CiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKIHB1 YmxpYzoKICBQb3NlVG9TdGF0ZVhmb3JtKCk7CiAgUG9zZVRvU3RhdGVYZm9ybShjb25zdCBCb3Vu ZGluZ0JveCAmdGVzdGJveF8sCiAgICAgICAgICAgICAgICAgICBkb3VibGUgZ3JpZFJlc29sdXRp b25fZnRfKTsKCiAgdm9pZCBzZXRSZXNvbHV0aW9uKGRvdWJsZSBncmlkUmVzb2x1dGlvbl9mdF8p OwogIHZvaWQgc2V0VGVzdEJveChjb25zdCBCb3VuZGluZ0JveCAmdGVzdGJveF8pOwogIGRvdWJs ZSAgICAgICAgICAgICBnZXRSZXNvbHV0aW9uKCkgY29uc3Q7CiAgY29uc3QgQm91bmRpbmdCb3gg JmdldFRlc3RCb3goKSBjb25zdDsKCiAgIAogIGNvbnN0IFJhbmdlPHNob3J0PiAmZ2V0WFJhbmdl KCkgY29uc3QgIHsgcmV0dXJuIHhSYW5nZTsgfQogIGNvbnN0IFJhbmdlPHNob3J0PiAmZ2V0WVJh bmdlKCkgY29uc3QgIHsgcmV0dXJuIHlSYW5nZTsgfQoKICBzaG9ydCBtYXhYKCkgY29uc3Q7CiAg c2hvcnQgbWF4WSgpIGNvbnN0OwogIHNob3J0IG51bVgoKSBjb25zdDsKICBzaG9ydCBudW1ZKCkg Y29uc3Q7CiAgCiAgc2hvcnQgbm9ydGhUb0luZGV4KGRvdWJsZSBOLCBib29sIHRydW5jYXRlPWZh bHNlKSBjb25zdDsgIAogIHNob3J0IGVhc3RUb0luZGV4IChkb3VibGUgRSwgYm9vbCB0cnVuY2F0 ZT1mYWxzZSkgY29uc3Q7ICAKICAgCgogIGRvdWJsZSBpbmRleFRvTm9ydGggKHNob3J0IHgpIGNv bnN0OwogIGRvdWJsZSBpbmRleFRvRWFzdCAgKHNob3J0IHkpIGNvbnN0OwoKICAgCiAgUmFuZ2U8 c2hvcnQ+IG5vcnRoVG9JbmRleChjb25zdCBSYW5nZTxkb3VibGU+ICZOLCBib29sIHRydW5jYXRl KSBjb25zdDsgCiAgUmFuZ2U8c2hvcnQ+IGVhc3RUb0luZGV4IChjb25zdCBSYW5nZTxkb3VibGU+ ICZFLCBib29sIHRydW5jYXRlKSBjb25zdDsgIAogICAKICAgCgoKICBCb3VuZGluZ0JveCBORURU b0luZGV4VHJ1bmNhdGVkKGNvbnN0IEJvdW5kaW5nQm94ICZuZWRib3gpOwogICAKICAgCiAgIAog ICAKCiAgIAogICAKCiAgIAogICAKCiBwcml2YXRlOgogIEJvdW5kaW5nQm94IHRlc3Rib3g7ICAg CiAgZG91YmxlICAgICAgZ3JpZFJlc29sdXRpb247CgogICAKICB2b2lkIGRlcml2ZVJhbmdlcygp OwogIFZlY3RvcjIgICAgICBMTF9vZl9ncmlkOyAgCiAgUmFuZ2U8c2hvcnQ+IHhSYW5nZTsKICBS YW5nZTxzaG9ydD4geVJhbmdlOwp9OwoKb3N0cmVhbSAmb3BlcmF0b3I+Pihvc3RyZWFtICZvcywg Y29uc3QgUG9zZVRvU3RhdGVYZm9ybSAmcCk7CgoMCiAKIAoKCmlubGluZSB2b2lkIFBvc2VUb1N0 YXRlWGZvcm06OnNldFJlc29sdXRpb24oZG91YmxlIGdyaWRSZXNvbHV0aW9uX2Z0XykKewogIGdy aWRSZXNvbHV0aW9uID0gZ3JpZFJlc29sdXRpb25fZnRfOwogIGRlcml2ZVJhbmdlcygpOwp9CgoK aW5saW5lIHZvaWQgUG9zZVRvU3RhdGVYZm9ybTo6c2V0VGVzdEJveChjb25zdCBCb3VuZGluZ0Jv eCAmdGVzdGJveF8pCnsKICB0ZXN0Ym94ID0gdGVzdGJveF87CiAgZGVyaXZlUmFuZ2VzKCk7Cn0K CgppbmxpbmUgZG91YmxlIFBvc2VUb1N0YXRlWGZvcm06OmdldFJlc29sdXRpb24oKSBjb25zdAp7 CiAgcmV0dXJuIGdyaWRSZXNvbHV0aW9uOwp9CgoKaW5saW5lIGNvbnN0IEJvdW5kaW5nQm94ICZQ b3NlVG9TdGF0ZVhmb3JtOjpnZXRUZXN0Qm94KCkgY29uc3QKewogIHJldHVybiB0ZXN0Ym94Owp9 CgoKaW5saW5lIHNob3J0IFBvc2VUb1N0YXRlWGZvcm06Om1heFgoKSBjb25zdCAKewogIHJldHVy biB4UmFuZ2UubWF4KCk7Cn0KCgppbmxpbmUgc2hvcnQgUG9zZVRvU3RhdGVYZm9ybTo6bWF4WSgp IGNvbnN0CnsKICByZXR1cm4geVJhbmdlLm1heCgpOwp9CgoKaW5saW5lIHNob3J0IFBvc2VUb1N0 YXRlWGZvcm06Om51bVgoKSBjb25zdAp7CiAgcmV0dXJuIG1heFgoKSsxOwp9CgoKaW5saW5lIHNo b3J0IFBvc2VUb1N0YXRlWGZvcm06Om51bVkoKSBjb25zdAp7CiAgcmV0dXJuIG1heFkoKSsxOwp9 CgoKaW5saW5lIHNob3J0IFBvc2VUb1N0YXRlWGZvcm06Om5vcnRoVG9JbmRleChkb3VibGUgTiwg Ym9vbCB0cnVuY2F0ZSkgIGNvbnN0CnsKICBzaG9ydCB1bnNhZmVJbmRleCA9IHNob3J0KHJpbnQo IChOIC0gTExfb2ZfZ3JpZC54KSAvIGdyaWRSZXNvbHV0aW9uICkpOwogIGlmICh0cnVuY2F0ZSkg CiAgICByZXR1cm4geFJhbmdlLmNsYW1wKHVuc2FmZUluZGV4KTsKICBlbHNlCiAgICByZXR1cm4g dW5zYWZlSW5kZXg7Cn0KCgppbmxpbmUgc2hvcnQgUG9zZVRvU3RhdGVYZm9ybTo6ZWFzdFRvSW5k ZXggKGRvdWJsZSBFLCBib29sIHRydW5jYXRlKSAgY29uc3QKewogIHNob3J0IHVuc2FmZUluZGV4 ID0gc2hvcnQocmludCggKEUgLSBMTF9vZl9ncmlkLnkpIC8gZ3JpZFJlc29sdXRpb24gKSk7CiAg aWYgKHRydW5jYXRlKSAKICAgIHJldHVybiB5UmFuZ2UuY2xhbXAodW5zYWZlSW5kZXgpOwogIGVs c2UKICAgIHJldHVybiB1bnNhZmVJbmRleDsKfQoKCmlubGluZSBkb3VibGUgUG9zZVRvU3RhdGVY Zm9ybTo6aW5kZXhUb05vcnRoIChzaG9ydCB4KSAgIGNvbnN0CnsKICByZXR1cm4gTExfb2ZfZ3Jp ZC54ICsgZ3JpZFJlc29sdXRpb24qeDsKfQoKCmlubGluZSBkb3VibGUgUG9zZVRvU3RhdGVYZm9y bTo6aW5kZXhUb0Vhc3QgICAoc2hvcnQgeSkgICBjb25zdAp7CiAgcmV0dXJuIExMX29mX2dyaWQu eSArIGdyaWRSZXNvbHV0aW9uKnk7Cn0KCgppbmxpbmUgClJhbmdlPHNob3J0PiBQb3NlVG9TdGF0 ZVhmb3JtOjpub3J0aFRvSW5kZXgoY29uc3QgUmFuZ2U8ZG91YmxlPiAmTiwgCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB0cnVuY2F0ZSkgY29uc3QKewog IHJldHVybiBSYW5nZTxzaG9ydD4obm9ydGhUb0luZGV4KE4ubWluKCksIHRydW5jYXRlKSwKICAg ICAgICAgICAgICAgICAgICAgIG5vcnRoVG9JbmRleChOLm1heCgpLCB0cnVuY2F0ZSkpOwp9CgoK aW5saW5lIApSYW5nZTxzaG9ydD4gUG9zZVRvU3RhdGVYZm9ybTo6ZWFzdFRvSW5kZXggKGNvbnN0 IFJhbmdlPGRvdWJsZT4gJkUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJvb2wgdHJ1bmNhdGUpIGNvbnN0CnsKICByZXR1cm4gUmFuZ2U8c2hvcnQ+KGVhc3RU b0luZGV4KEUubWluKCksIHRydW5jYXRlKSwKICAgICAgICAgICAgICAgICAgICAgIGVhc3RUb0lu ZGV4KEUubWF4KCksIHRydW5jYXRlKSk7Cn0KCgoKIyAxICJidWcuY2MiIDIKCgojIDEgIk1vdmVE Qi5oIiAxCgoKCiAKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRy YWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3ZlY3RvciIgMSAzCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4 Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfdmVj dG9yLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAgCgoKCgoKCiAK IAogCiAKIAoKCgogCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3IsIGJvb2wg X0lzU3RhdGljPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0 eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAg ICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkg Y29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX1ZlY3Rvcl9hbGxvY19iYXNl KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9fYSks IF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIAogIHt9CiAg CnByb3RlY3RlZDoKICBhbGxvY2F0b3JfdHlwZSBfTV9kYXRhX2FsbG9jYXRvcjsKICBfVHAqIF9N X3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0b3JhZ2U7CgogIF9U cCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9y LmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBf X24pCiAgICB7IGlmIChfX3ApIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCBfX24p OyB9Cn07CgogCiAKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4KY2xhc3Mg X1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jYXRvciwgdHJ1ZT4gewpwdWJsaWM6CiAgdHlw ZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90 eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2Nh dG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICBfVmVjdG9yX2FsbG9j X2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQogICAgOiBfTV9zdGFydCgwKSwgX01fZmluaXNo KDApLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSAKICB7fQogIApwcm90ZWN0ZWQ6CiAgX1RwKiBfTV9z dGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfVHAqIF9NX2VuZF9vZl9zdG9yYWdlOwoKICB0eXBl ZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUg X0FsbG9jX3R5cGU7CiAgX1RwKiBfTV9hbGxvY2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4g X0FsbG9jX3R5cGU6OmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBf X3AsIHNpemVfdCBfX24pCiAgICB7IF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwgX19uKTt9 Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfVmVjdG9yX2Jh c2UKICA6IHB1YmxpYyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5j ZWxlc3M+CnsKICB0eXBlZGVmIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2lu c3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFs bG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfVmVjdG9yX2Jhc2UoY29uc3QgYWxsb2Nh dG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9CiAgX1ZlY3Rvcl9iYXNlKHNpemVfdCBfX24s IGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7CiAgICBfTV9zdGFydCA9 IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydDsKICAgIF9NX2VuZF9v Zl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgfQoKICB+X1ZlY3Rvcl9iYXNlKCkgeyBfTV9k ZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsgfQp9OyAg ICAKCiMgMTUwICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4u Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3ZlY3Rvci5oIiAzCgoKdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPCBfVHAgPiAgPgpjbGFzcyB2ZWN0b3IgOiBw cm90ZWN0ZWQgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPiAKewpwcml2YXRlOgogIHR5cGVkZWYg X1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPiBfQmFzZTsKcHVibGljOgogIHR5cGVkZWYgX1RwIHZh bHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qg dmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZhbHVlX3R5cGUqIGl0ZXJhdG9y OwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB2 YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9y ZWZlcmVuY2U7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90 IGRpZmZlcmVuY2VfdHlwZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5 cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0 IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KCgogIHR5cGVkZWYgcmV2ZXJzZV9p dGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVm IHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgoKCgoKCgpwcm90 ZWN0ZWQ6CgogIHVzaW5nIF9CYXNlOjpfTV9hbGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01fZGVh bGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01fc3RhcnQ7CiAgdXNpbmcgX0Jhc2U6Ol9NX2Zpbmlz aDsKICB1c2luZyBfQmFzZTo6X01fZW5kX29mX3N0b3JhZ2U7CgoKcHJvdGVjdGVkOgogIHZvaWQg X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCk7CiAgdm9p ZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24pOwoKcHVibGljOgogIGl0ZXJhdG9y IGJlZ2luKCkgeyByZXR1cm4gX01fc3RhcnQ7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNv bnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01fZmlu aXNoOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNoOyB9 CgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0 b3IoZW5kKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdAogICAg eyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICByZXZlcnNlX2l0ZXJh dG9yIHJlbmQoKQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQogIGNv bnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZl cnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CgogIHNpemVfdHlwZSBzaXplKCkgY29uc3QKICAgIHsg cmV0dXJuIHNpemVfdHlwZShlbmQoKSAtIGJlZ2luKCkpOyB9CiAgc2l6ZV90eXBlIG1heF9zaXpl KCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlwZSgtMSkgLyBzaXplb2YoX1RwKTsgfQogIHNp emVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUoX01fZW5kX29m X3N0b3JhZ2UgLSBiZWdpbigpKTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdAogICAgeyByZXR1cm4g YmVnaW4oKSA9PSBlbmQoKTsgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19u KSB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9y W10oc2l6ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKihiZWdpbigpICsgX19uKTsgfQoKICBl eHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBl KCkpCiAgICA6IF9CYXNlKF9fYSkge30KCiAgdmVjdG9yKHNpemVfdHlwZSBfX24sIGNvbnN0IF9U cCYgX192YWx1ZSwKICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv cl90eXBlKCkpIAogICAgOiBfQmFzZShfX24sIF9fYSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0 aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7IH0KCiAgZXhwbGljaXQgdmVj dG9yKHNpemVfdHlwZSBfX24pCiAgICA6IF9CYXNlKF9fbiwgYWxsb2NhdG9yX3R5cGUoKSkKICAg IHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX1RwKCkp OyB9CgogIHZlY3Rvcihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpIAogICAgOiBfQmFz ZShfX3guc2l6ZSgpLCBfX3guZ2V0X2FsbG9jYXRvcigpKQogICAgeyBfTV9maW5pc2ggPSB1bmlu aXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX01fc3RhcnQpOyB9CgoKICAg CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZlY3RvcihfSW5wdXRJdGVyYXRv ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IGFsbG9jYXRv cl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKSA6IF9CYXNlKF9fYSkgewogICAgdHlwZWRl ZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdy YWw7CiAgICBfTV9pbml0aWFsaXplX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsK ICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2luaXRpYWxpemVfYXV4 KF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWx1ZSwgX190cnVlX3R5cGUpIHsKICAgIF9NX3N0 YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQg KyBfX247IAogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9f biwgX192YWx1ZSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9p ZCBfTV9pbml0aWFsaXplX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgIF9N X3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBf X2ZpcnN0ICkgKTsKICB9CgoKCgoKCgoKICB+dmVjdG9yKCkgeyBkZXN0cm95KF9NX3N0YXJ0LCBf TV9maW5pc2gpOyB9CgogIHZlY3RvcjxfVHAsIF9BbGxvYz4mIG9wZXJhdG9yPShjb25zdCB2ZWN0 b3I8X1RwLCBfQWxsb2M+JiBfX3gpOwogIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7CiAg ICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6 ZSA9IHNpemUoKTsKICAgICAgaXRlcmF0b3IgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShf X24sIF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5p c2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9N X3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgX01fZmluaXNoID0gX190bXAg KyBfX29sZF9zaXplOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwog ICAgfQogIH0KCiAgIAogICAKICAgCiAgIAoKICB2b2lkIGFzc2lnbihzaXplX3R5cGUgX19uLCBj b25zdCBfVHAmIF9fdmFsKTsKCgogIAogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K ICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xh c3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+Ojpf SW50ZWdyYWwgX0ludGVncmFsOwogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFz dCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQg X01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90 eXBlKQogICAgeyBhc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAgdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgeyBfTV9h c3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCAp ICk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWdu X2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBf Rm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBmb3J3 YXJkX2l0ZXJhdG9yX3RhZyk7IAoKCgogIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdp bigpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7 IH0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQogIGNvbnN0X3Jl ZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CgogIHZvaWQgcHVz aF9iYWNrKGNvbnN0IF9UcCYgX194KSB7CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9z dG9yYWdlKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gsIF9feCk7CiAgICAgICsrX01fZmlu aXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOwogIH0K ICB2b2lkIHB1c2hfYmFjaygpIHsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3Jh Z2UpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCk7CiAgICAgICsrX01fZmluaXNoOwogICAg fQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpKTsKICB9CiAgdm9pZCBzd2FwKHZl Y3RvcjxfVHAsIF9BbGxvYz4mIF9feCkgewogICAgIDo6c3dhcChfTV9zdGFydCwgX194Ll9NX3N0 YXJ0KTsKICAgICA6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNoKTsKICAgICA6OnN3YXAo X01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9lbmRfb2Zfc3RvcmFnZSk7CiAgfQoKICBpdGVyYXRv ciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpIHsKICAgIHNpemVf dHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKICAgIGlmIChfTV9maW5pc2ggIT0gX01f ZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkgewogICAgICBjb25zdHJ1Y3Qo X01fZmluaXNoLCBfX3gpOwogICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAg X01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBfX3gpOwogICAgcmV0dXJuIGJlZ2luKCkgKyBfX247 CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICBzaXplX3R5 cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2Vu ZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpIHsKICAgICAgY29uc3RydWN0KF9N X2ZpbmlzaCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNl cnRfYXV4KF9fcG9zaXRpb24pOwogICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgfQoKICAgCiAg dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9f cG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAg IHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwg X0ludGVncmFsOwogICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3Qs IF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9N X2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBf X3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkgewogICAgaW5zZXJ0 KF9fcG9zLCAoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsKICB9CgogIHRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBf X3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf SW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90 eXBlKSB7CiAgICBfTV9yYW5nZV9pbnNlcnQoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVy YXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7CiAgfQoKCgoKCiAgdm9pZCBpbnNlcnQgKGl0ZXJh dG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCk7CgogIHZvaWQgcG9wX2Jh Y2soKSB7CiAgICAtLV9NX2ZpbmlzaDsKICAgIGRlc3Ryb3koX01fZmluaXNoKTsKICB9CiAgaXRl cmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgaWYgKF9fcG9zaXRpb24gKyAx ICE9IGVuZCgpKQogICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBfTV9maW5pc2gsIF9fcG9zaXRp b24pOwogICAgLS1fTV9maW5pc2g7CiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7CiAgICByZXR1cm4g X19wb3NpdGlvbjsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0 b3IgX19sYXN0KSB7CiAgICBpdGVyYXRvciBfX2kgPSBjb3B5KF9fbGFzdCwgX01fZmluaXNoLCBf X2ZpcnN0KTsKICAgIGRlc3Ryb3koX19pLCBfTV9maW5pc2gpOwogICAgX01fZmluaXNoID0gX01f ZmluaXNoIC0gKF9fbGFzdCAtIF9fZmlyc3QpOwogICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQoKICB2 b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gpIHsKICAgIGlm IChfX25ld19zaXplIDwgc2l6ZSgpKSAKICAgICAgZXJhc2UoYmVnaW4oKSArIF9fbmV3X3NpemUs IGVuZCgpKTsKICAgIGVsc2UKICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXplIC0gc2l6ZSgp LCBfX3gpOwogIH0KICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSkgeyByZXNpemUo X19uZXdfc2l6ZSwgX1RwKCkpOyB9CiAgdm9pZCBjbGVhcigpIHsgZXJhc2UoYmVnaW4oKSwgZW5k KCkpOyB9Cgpwcm90ZWN0ZWQ6CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4K ICBpdGVyYXRvciBfTV9hbGxvY2F0ZV9hbmRfY29weShzaXplX3R5cGUgX19uLCBfRm9yd2FyZEl0 ZXJhdG9yIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQp7CiAgICBpdGVyYXRvciBfX3Jlc3VsdCA9 IF9NX2FsbG9jYXRlKF9fbik7CiAgICB0cnkgIHsKICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9f Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiAg ICBjYXRjaCguLi4pIHsgIF9NX2RlYWxsb2NhdGUoX19yZXN1bHQsIF9fbikgOyB0aHJvdzsgfSA7 CiAgfQojIDQ0MCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8u Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF92ZWN0b3IuaCIgMwoKCgoKICB0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbml0aWFsaXplKF9JbnB1dEl0 ZXJhdG9yIF9fZmlyc3QsICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0 b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgewogICAgZm9yICggOyBfX2ZpcnN0ICE9 IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICBwdXNoX2JhY2soKl9fZmlyc3QpOwogIH0KCiAgIAog IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5pdGlh bGl6ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICB7CiAgICBz aXplX3R5cGUgX19uID0gMDsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAg IF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01f c3RhcnQgKyBfX247CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwg X19sYXN0LCBfTV9zdGFydCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+ CiAgdm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAg ICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9z LAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zvcndh cmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRv cl90YWcpOwoKCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi b29sIApvcGVyYXRvcj09KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVj dG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIF9feC5zaXplKCkgPT0gX195LnNpemUo KSAmJgogICAgICAgICBlcXVhbChfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfX3kuYmVnaW4oKSk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgCm9wZXJh dG9yPChjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9B bGxvYz4mIF9feSkKewogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4o KSwgX194LmVuZCgpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2lu KCksIF9feS5lbmQoKSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpp bmxpbmUgdm9pZCBzd2FwKHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgdmVjdG9yPF9UcCwgX0Fs bG9jPiYgX195KQp7CiAgX194LnN3YXAoX195KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfQWxsb2M+CnZlY3RvcjxfVHAsX0FsbG9jPiYgCnZlY3RvcjxfVHAsX0FsbG9jPjo6b3Bl cmF0b3I9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkKewogIGlmICgmX194ICE9IHRo aXMpIHsKICAgIGNvbnN0IHNpemVfdHlwZSBfX3hsZW4gPSBfX3guc2l6ZSgpOwogICAgaWYgKF9f eGxlbiA+IGNhcGFjaXR5KCkpIHsKICAgICAgaXRlcmF0b3IgX190bXAgPSBfTV9hbGxvY2F0ZV9h bmRfY29weShfX3hsZW4sIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOwogICAgICBkZXN0cm95KF9N X3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRf b2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgX01f ZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9feGxlbjsKICAgIH0KICAgIGVsc2UgaWYgKHNp emUoKSA+PSBfX3hsZW4pIHsKICAgICAgaXRlcmF0b3IgX19pID0gY29weShfX3guYmVnaW4oKSwg X194LmVuZCgpLCBiZWdpbigpKTsKICAgICAgZGVzdHJveShfX2ksIF9NX2ZpbmlzaCk7CiAgICB9 CiAgICBlbHNlIHsKICAgICAgY29weShfX3guYmVnaW4oKSwgX194LmJlZ2luKCkgKyBzaXplKCks IF9NX3N0YXJ0KTsKICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigpICsgc2l6ZSgp LCBfX3guZW5kKCksIF9NX2ZpbmlzaCk7CiAgICB9CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydCAr IF9feGxlbjsKICB9CiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6YXNzaWduKHNpemVfdCBfX24sIGNv bnN0IHZhbHVlX3R5cGUmIF9fdmFsKSB7CiAgaWYgKF9fbiA+IGNhcGFjaXR5KCkpIHsKICAgIHZl Y3RvcjxfVHAsIF9BbGxvYz4gX190bXAoX19uLCBfX3ZhbCwgZ2V0X2FsbG9jYXRvcigpKTsKICAg IF9fdG1wLnN3YXAoKnRoaXMpOwogIH0KICBlbHNlIGlmIChfX24gPiBzaXplKCkpIHsKICAgIGZp bGwoYmVnaW4oKSwgZW5kKCksIF9fdmFsKTsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRf ZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gc2l6ZSgpLCBfX3ZhbCk7CiAgfQogIGVsc2UKICAgIGVy YXNlKGZpbGxfbihiZWdpbigpLCBfX24sIF9fdmFsKSwgZW5kKCkpOwp9CgoKCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CnZvaWQg dmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9J bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgaXRlcmF0b3IgX19jdXIgPSBiZWdpbigpOwogIGZvciAo IDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJz dCkKICAgICpfX2N1ciA9ICpfX2ZpcnN0OwogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIGVy YXNlKF9fY3VyLCBlbmQoKSk7CiAgZWxzZQogICAgaW5zZXJ0KGVuZCgpLCBfX2ZpcnN0LCBfX2xh c3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXI+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2F1eChf Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogIHNpemVfdHlwZSBf X2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CgogIGlmIChfX2xl biA+IGNhcGFjaXR5KCkpIHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2Nv cHkoX19sZW4sIF9fZmlyc3QsIF9fbGFzdCk7CiAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5p c2gpOwogICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z dGFydCk7CiAgICBfTV9zdGFydCA9IF9fdG1wOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9m aW5pc2ggPSBfTV9zdGFydCArIF9fbGVuOwogIH0KICBlbHNlIGlmIChzaXplKCkgPj0gX19sZW4p IHsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IGNvcHkoX19maXJzdCwgX19sYXN0LCBfTV9z dGFydCk7CiAgICBkZXN0cm95KF9fbmV3X2ZpbmlzaCwgX01fZmluaXNoKTsKICAgIF9NX2Zpbmlz aCA9IF9fbmV3X2ZpbmlzaDsKICB9CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIgX19taWQgPSBf X2ZpcnN0OwogICAgYWR2YW5jZShfX21pZCwgc2l6ZSgpKTsKICAgIGNvcHkoX19maXJzdCwgX19t aWQsIF9NX3N0YXJ0KTsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX21pZCwg X19sYXN0LCBfTV9maW5pc2gpOwogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf QWxsb2M+CnZvaWQgCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3Ig X19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpCnsKICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9v Zl9zdG9yYWdlKSB7CiAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsK ICAgICsrX01fZmluaXNoOwogICAgX1RwIF9feF9jb3B5ID0gX194OwogICAgY29weV9iYWNrd2Fy ZChfX3Bvc2l0aW9uLCBfTV9maW5pc2ggLSAyLCBfTV9maW5pc2ggLSAxKTsKICAgICpfX3Bvc2l0 aW9uID0gX194X2NvcHk7CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3Np emUgPSBzaXplKCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICE9IDAg PyAyICogX19vbGRfc2l6ZSA6IDE7CiAgICBpdGVyYXRvciBfX25ld19zdGFydCA9IF9NX2FsbG9j YXRlKF9fbGVuKTsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0OwogICAg dHJ5ICB7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfTV9zdGFydCwg X19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICBjb25zdHJ1Y3QoX19uZXdfZmluaXNoLCBf X3gpOwogICAgICArK19fbmV3X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFs aXplZF9jb3B5KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX19uZXdfZmluaXNoKTsKICAgIH0KICAg IGNhdGNoKC4uLikgeyAgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgCiAgICAg ICAgICAgICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsX19sZW4pKSA7IHRocm93OyB9 IDsKICAgIGRlc3Ryb3koYmVnaW4oKSwgZW5kKCkpOwogICAgX01fZGVhbGxvY2F0ZShfTV9zdGFy dCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICBfTV9zdGFydCA9IF9fbmV3X3N0 YXJ0OwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOwogICAgX01fZW5kX29mX3N0b3JhZ2Ug PSBfX25ld19zdGFydCArIF9fbGVuOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg X0FsbG9jPgp2b2lkIAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9y IF9fcG9zaXRpb24pCnsKICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAg ICBjb25zdHJ1Y3QoX01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmluaXNo OwogICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfTV9maW5pc2ggLSAyLCBfTV9maW5pc2gg LSAxKTsKICAgICpfX3Bvc2l0aW9uID0gX1RwKCk7CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6 ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBf X29sZF9zaXplICE9IDAgPyAyICogX19vbGRfc2l6ZSA6IDE7CiAgICBpdGVyYXRvciBfX25ld19z dGFydCA9IF9NX2FsbG9jYXRlKF9fbGVuKTsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9f bmV3X3N0YXJ0OwogICAgdHJ5ICB7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRf Y29weShfTV9zdGFydCwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICBjb25zdHJ1Y3Qo X19uZXdfZmluaXNoKTsKICAgICAgKytfX25ld19maW5pc2g7CiAgICAgIF9fbmV3X2ZpbmlzaCA9 IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9fbmV3X2ZpbmlzaCk7 CiAgICB9CiAgICBjYXRjaCguLi4pIHsgIChkZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2Zpbmlz aCksIAogICAgICAgICAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LF9fbGVuKSkg OyB0aHJvdzsgfSA7CiAgICBkZXN0cm95KGJlZ2luKCksIGVuZCgpKTsKICAgIF9NX2RlYWxsb2Nh dGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQg PSBfX25ld19zdGFydDsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgIF9NX2VuZF9v Zl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjppbnNlcnQoaXRlcmF0 b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IF9UcCYgX194KQp7CiAgaWYgKF9fbiAhPSAwKSB7CiAgICBpZiAoc2l6ZV90 eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsKICAgICAgX1RwIF9f eF9jb3B5ID0gX194OwogICAgICBjb25zdCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9IF9NX2Zp bmlzaCAtIF9fcG9zaXRpb247CiAgICAgIGl0ZXJhdG9yIF9fb2xkX2ZpbmlzaCA9IF9NX2Zpbmlz aDsKICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24pIHsKICAgICAgICB1bmluaXRpYWxpemVk X2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01f ZmluaXNoICs9IF9fbjsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9fb2xkX2Zp bmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAgICBmaWxsKF9fcG9zaXRpb24sIF9fcG9z aXRpb24gKyBfX24sIF9feF9jb3B5KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICB1bmlu aXRpYWxpemVkX2ZpbGxfbihfTV9maW5pc2gsIF9fbiAtIF9fZWxlbXNfYWZ0ZXIsIF9feF9jb3B5 KTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uIC0gX19lbGVtc19hZnRlcjsKICAgICAgICB1bmlu aXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoLCBfTV9maW5pc2gpOwogICAg ICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOwogICAgICAgIGZpbGwoX19wb3NpdGlvbiwg X19vbGRfZmluaXNoLCBfX3hfY29weSk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICBj b25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsgICAgICAgIAogICAgICBjb25zdCBz aXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7CiAgICAg IGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19sZW4pOwogICAgICBpdGVyYXRv ciBfX25ld19maW5pc2ggPSBfX25ld19zdGFydDsKICAgICAgdHJ5ICB7CiAgICAgICAgX19uZXdf ZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBfX3Bvc2l0aW9uLCBfX25ld19z dGFydCk7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX19uZXdf ZmluaXNoLCBfX24sIF9feCk7CiAgICAgICAgX19uZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5p dGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9fbmV3X2ZpbmlzaCk7CiAgICAg IH0KICAgICAgY2F0Y2goLi4uKSB7ICAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gp LCAKICAgICAgICAgICAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LF9fbGVuKSkg OyB0aHJvdzsgfSA7CiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9N X2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAg ICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7 CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsKICAgIH0KICB9 Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlcmF0b3I+CnZvaWQgCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2luc2Vy dChpdGVyYXRvciBfX3BvcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7 ICsrX19maXJzdCkgewogICAgX19wb3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICsr X19wb3M7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRl IDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgp2b2lkIAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9y YW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAoX19m aXJzdCAhPSBfX2xhc3QpIHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFuY2UoX19m aXJzdCwgX19sYXN0LCBfX24pOwogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAt IF9NX2ZpbmlzaCkgPj0gX19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVy ID0gX01fZmluaXNoIC0gX19wb3NpdGlvbjsKICAgICAgaXRlcmF0b3IgX19vbGRfZmluaXNoID0g X01fZmluaXNoOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikgewogICAgICAgIHVuaW5p dGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAg ICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwg X19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgIGNvcHkoX19maXJzdCwg X19sYXN0LCBfX3Bvc2l0aW9uKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2Fy ZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkLCBfX2VsZW1z X2FmdGVyKTsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmlu aXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uIC0gX19lbGVtc19hZnRlcjsKICAgICAgICB1 bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoLCBfTV9maW5pc2gpOwog ICAgICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOwogICAgICAgIGNvcHkoX19maXJzdCwg X19taWQsIF9fcG9zaXRpb24pOwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29uc3Qg c2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xl biA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsKICAgICAgaXRlcmF0b3IgX19u ZXdfc3RhcnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X2Zpbmlz aCA9IF9fbmV3X3N0YXJ0OwogICAgICB0cnkgIHsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmlu aXRpYWxpemVkX2NvcHkoX01fc3RhcnQsIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsKICAgICAg ICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX25l d19maW5pc2gpOwogICAgICAgIF9fbmV3X2ZpbmlzaAogICAgICAgICAgPSB1bmluaXRpYWxpemVk X2NvcHkoX19wb3NpdGlvbiwgX01fZmluaXNoLCBfX25ld19maW5pc2gpOwogICAgICB9CiAgICAg IGNhdGNoKC4uLikgeyAgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgCiAgICAg ICAgICAgICAgICAgICAgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydCxfX2xlbikpIDsgdGhyb3c7 IH0gOwogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9j YXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3Rh cnQgPSBfX25ld19zdGFydDsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOwogICAgICBf TV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CiAgICB9CiAgfQp9CgojIDgx MCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8u Li9pbmNsdWRlL2crKy0zL3N0bF92ZWN0b3IuaCIgMwoKCgoKCgoKICAKCgoKIAogCiAKIyAzNCAi L3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9p bmNsdWRlL2crKy0zL3ZlY3RvciIgMiAzCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5k cmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYnZlY3Rvci5o IiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogIAoKc3RhdGljIGNvbnN0 IGludCBfX1dPUkRfQklUID0gaW50KDggKnNpemVvZih1bnNpZ25lZCBpbnQpKTsKCgoKCgoKc3Ry dWN0IF9CaXRfcmVmZXJlbmNlIHsKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAgdW5zaWduZWQgaW50 IF9NX21hc2s7CiAgX0JpdF9yZWZlcmVuY2UodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGlu dCBfX3kpIAogICAgOiBfTV9wKF9feCksIF9NX21hc2soX195KSB7fQoKcHVibGljOgogIF9CaXRf cmVmZXJlbmNlKCkgOiBfTV9wKDApLCBfTV9tYXNrKDApIHt9CiAgb3BlcmF0b3IgYm9vbCgpIGNv bnN0IHsgcmV0dXJuICEoISgqX01fcCAmIF9NX21hc2spKTsgfQogIF9CaXRfcmVmZXJlbmNlJiBv cGVyYXRvcj0oYm9vbCBfX3gpCiAgewogICAgaWYgKF9feCkgICpfTV9wIHw9IF9NX21hc2s7CiAg ICBlbHNlICAgICAgKl9NX3AgJj0gfl9NX21hc2s7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9C aXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkgCiAgICB7 IHJldHVybiAqdGhpcyA9IGJvb2woX194KTsgfQogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfQml0 X3JlZmVyZW5jZSYgX194KSBjb25zdAogICAgeyByZXR1cm4gYm9vbCgqdGhpcykgPT0gYm9vbChf X3gpOyB9CiAgYm9vbCBvcGVyYXRvcjwoY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkgY29uc3Qg ewogICAgcmV0dXJuICFib29sKCp0aGlzKSAmJiBib29sKF9feCk7CiAgfQogIHZvaWQgZmxpcCgp IHsgKl9NX3AgXj0gX01fbWFzazsgfQp9OwoKaW5saW5lIHZvaWQgc3dhcChfQml0X3JlZmVyZW5j ZSBfX3gsIF9CaXRfcmVmZXJlbmNlIF9feSkKewogIGJvb2wgX190bXAgPSBfX3g7CiAgX194ID0g X195OwogIF9feSA9IF9fdG1wOwp9CgpzdHJ1Y3QgX0JpdF9pdGVyYXRvciA6IHB1YmxpYyByYW5k b21fYWNjZXNzX2l0ZXJhdG9yPGJvb2wsIHB0cmRpZmZfdD4gewogIHR5cGVkZWYgX0JpdF9yZWZl cmVuY2UgIHJlZmVyZW5jZTsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogIHR5 cGVkZWYgX0JpdF9pdGVyYXRvciAgIGl0ZXJhdG9yOwoKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAg dW5zaWduZWQgaW50IF9NX29mZnNldDsKICB2b2lkIGJ1bXBfdXAoKSB7CiAgICBpZiAoX01fb2Zm c2V0KysgPT0gX19XT1JEX0JJVCAtIDEpIHsKICAgICAgX01fb2Zmc2V0ID0gMDsKICAgICAgKytf TV9wOwogICAgfQogIH0KICB2b2lkIGJ1bXBfZG93bigpIHsKICAgIGlmIChfTV9vZmZzZXQtLSA9 PSAwKSB7CiAgICAgIF9NX29mZnNldCA9IF9fV09SRF9CSVQgLSAxOwogICAgICAtLV9NX3A7CiAg ICB9CiAgfQoKICBfQml0X2l0ZXJhdG9yKCkgOiBfTV9wKDApLCBfTV9vZmZzZXQoMCkge30KICBf Qml0X2l0ZXJhdG9yKHVuc2lnbmVkIGludCogX194LCB1bnNpZ25lZCBpbnQgX195KSAKICAgIDog X01fcChfX3gpLCBfTV9vZmZzZXQoX195KSB7fQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25z dCB7IHJldHVybiByZWZlcmVuY2UoX01fcCwgMVUgPDwgX01fb2Zmc2V0KTsgfQogIGl0ZXJhdG9y JiBvcGVyYXRvcisrKCkgewogICAgYnVtcF91cCgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBp dGVyYXRvciBvcGVyYXRvcisrKGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAg IGJ1bXBfdXAoKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yLS0o KSB7CiAgICBidW1wX2Rvd24oKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3Bl cmF0b3ItLShpbnQpIHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBidW1wX2Rvd24o KTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5j ZV90eXBlIF9faSkgewogICAgZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9faSArIF9NX29mZnNldDsK ICAgIF9NX3AgKz0gX19uIC8gX19XT1JEX0JJVDsKICAgIF9fbiA9IF9fbiAlIF9fV09SRF9CSVQ7 CiAgICBpZiAoX19uIDwgMCkgewogICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX24g KyBfX1dPUkRfQklUOwogICAgICAtLV9NX3A7CiAgICB9IGVsc2UKICAgICAgX01fb2Zmc2V0ID0g KHVuc2lnbmVkIGludCkgX19uOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciYgb3Bl cmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICAqdGhpcyArPSAtX19pOwogICAgcmV0 dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9faSkg Y29uc3QgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCArPSBf X2k7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7 CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wIC09IF9faTsKICB9 CiAgZGlmZmVyZW5jZV90eXBlIG9wZXJhdG9yLShpdGVyYXRvciBfX3gpIGNvbnN0IHsKICAgIHJl dHVybiBfX1dPUkRfQklUICogKF9NX3AgLSBfX3guX01fcCkgKyBfTV9vZmZzZXQgLSBfX3guX01f b2Zmc2V0OwogIH0KICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19pKSB7 IHJldHVybiAqKCp0aGlzICsgX19pKTsgfQogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRv ciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fcCA9PSBfX3guX01fcCAmJiBfTV9vZmZzZXQg PT0gX194Ll9NX29mZnNldDsKICB9CiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBf X3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wICE9IF9feC5fTV9wIHx8IF9NX29mZnNldCAhPSBf X3guX01fb2Zmc2V0OwogIH0KICBib29sIG9wZXJhdG9yPChpdGVyYXRvciBfX3gpIGNvbnN0IHsK ICAgIHJldHVybiBfTV9wIDwgX194Ll9NX3AgfHwgKF9NX3AgPT0gX194Ll9NX3AgJiYgX01fb2Zm c2V0IDwgX194Ll9NX29mZnNldCk7CiAgfQp9OwoKc3RydWN0IF9CaXRfY29uc3RfaXRlcmF0b3IK ICA6IHB1YmxpYyByYW5kb21fYWNjZXNzX2l0ZXJhdG9yPGJvb2wsIHB0cmRpZmZfdD4KewogIHR5 cGVkZWYgYm9vbCAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwogIHR5cGVkZWYgYm9vbCAgICAg ICAgICAgICAgICAgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgYm9vbCogICAgICAg ICAgcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgIGNvbnN0X2l0ZXJhdG9y OwoKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAgdW5zaWduZWQgaW50IF9NX29mZnNldDsKICB2b2lk IGJ1bXBfdXAoKSB7CiAgICBpZiAoX01fb2Zmc2V0KysgPT0gX19XT1JEX0JJVCAtIDEpIHsKICAg ICAgX01fb2Zmc2V0ID0gMDsKICAgICAgKytfTV9wOwogICAgfQogIH0KICB2b2lkIGJ1bXBfZG93 bigpIHsKICAgIGlmIChfTV9vZmZzZXQtLSA9PSAwKSB7CiAgICAgIF9NX29mZnNldCA9IF9fV09S RF9CSVQgLSAxOwogICAgICAtLV9NX3A7CiAgICB9CiAgfQoKICBfQml0X2NvbnN0X2l0ZXJhdG9y KCkgOiBfTV9wKDApLCBfTV9vZmZzZXQoMCkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9yKHVuc2ln bmVkIGludCogX194LCB1bnNpZ25lZCBpbnQgX195KSAKICAgIDogX01fcChfX3gpLCBfTV9vZmZz ZXQoX195KSB7fQogIF9CaXRfY29uc3RfaXRlcmF0b3IoY29uc3QgX0JpdF9pdGVyYXRvciYgX194 KSAKICAgIDogX01fcChfX3guX01fcCksIF9NX29mZnNldChfX3guX01fb2Zmc2V0KSB7fQogIGNv bnN0X3JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICByZXR1cm4gX0JpdF9yZWZlcmVu Y2UoX01fcCwgMVUgPDwgX01fb2Zmc2V0KTsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9y KysoKSB7CiAgICBidW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJh dG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwog ICAgYnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3Bl cmF0b3ItLSgpIHsKICAgIGJ1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25z dF9pdGVyYXRvciBvcGVyYXRvci0tKGludCkgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAq dGhpczsKICAgIGJ1bXBfZG93bigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBjb25zdF9pdGVy YXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICBkaWZmZXJlbmNlX3R5 cGUgX19uID0gX19pICsgX01fb2Zmc2V0OwogICAgX01fcCArPSBfX24gLyBfX1dPUkRfQklUOwog ICAgX19uID0gX19uICUgX19XT1JEX0JJVDsKICAgIGlmIChfX24gPCAwKSB7CiAgICAgIF9NX29m ZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbiArIF9fV09SRF9CSVQ7CiAgICAgIC0tX01fcDsKICAg IH0gZWxzZQogICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX247CiAgICByZXR1cm4g KnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBf X2kpIHsKICAgICp0aGlzICs9IC1fX2k7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0 ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBjb25zdF9p dGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wICs9IF9faTsKICB9CiAgY29u c3RfaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGNv bnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0gX19pOwogIH0K ICBkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3ItKGNvbnN0X2l0ZXJhdG9yIF9feCkgY29uc3Qgewog ICAgcmV0dXJuIF9fV09SRF9CSVQgKiAoX01fcCAtIF9feC5fTV9wKSArIF9NX29mZnNldCAtIF9f eC5fTV9vZmZzZXQ7CiAgfQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2Vf dHlwZSBfX2kpIHsgCiAgICByZXR1cm4gKigqdGhpcyArIF9faSk7IAogIH0KICBib29sIG9wZXJh dG9yPT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3Ag PT0gX194Ll9NX3AgJiYgX01fb2Zmc2V0ID09IF9feC5fTV9vZmZzZXQ7CiAgfQogIGJvb2wgb3Bl cmF0b3IhPShjb25zdCBjb25zdF9pdGVyYXRvciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01f cCAhPSBfX3guX01fcCB8fCBfTV9vZmZzZXQgIT0gX194Ll9NX29mZnNldDsKICB9CiAgYm9vbCBv cGVyYXRvcjwoY29uc3RfaXRlcmF0b3IgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fcCA8IF9f eC5fTV9wIHx8IChfTV9wID09IF9feC5fTV9wICYmIF9NX29mZnNldCA8IF9feC5fTV9vZmZzZXQp OwogIH0KfTsKCiAKIAoKCgogCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yLCBib29sIF9faXNf c3RhdGljPgpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlIHsKcHVibGljOgogIHR5cGVkZWYgdHlw ZW5hbWUgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAg ICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBj b25zdCB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvcjsgfQoKICBfQnZlY3Rvcl9hbGxvY19iYXNl KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9fYSks IF9NX3N0YXJ0KCksIF9NX2ZpbmlzaCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7fQoKcHJvdGVj dGVkOgogIHVuc2lnbmVkIGludCogX01fYml0X2FsbG9jKHNpemVfdCBfX24pIAogICAgeyByZXR1 cm4gX01fZGF0YV9hbGxvY2F0b3IuYWxsb2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dP UkRfQklUKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9w KQogICAgICBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsIAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3Rh cnQuX01fcCk7CiAgfSAgCgogIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQgaW50LCBf QWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUgCiAgICAgICAgICBfTV9kYXRhX2FsbG9jYXRvcjsK ICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0OwogIF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOwogIHVu c2lnbmVkIGludCogX01fZW5kX29mX3N0b3JhZ2U7Cn07CgogCnRlbXBsYXRlIDxjbGFzcyBfQWxs b2NhdG9yPgpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvY2F0b3IsIHRydWU+IHsKcHVi bGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2NhdG9yPjo6 YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBl IGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogIF9C dmVjdG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQogICAgOiBfTV9zdGFydCgp LCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3RlY3RlZDoKICB0eXBl ZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQgaW50LCBfQWxsb2NhdG9yPjo6X0Fs bG9jX3R5cGUKICAgICAgICAgIF9BbGxvY190eXBlOwogICAgICAgICAgCiAgdW5zaWduZWQgaW50 KiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikgCiAgICB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxs b2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUKTsgfQogIHZvaWQgX01fZGVh bGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9wKQogICAgICBfQWxsb2NfdHlwZTo6ZGVh bGxvY2F0ZShfTV9zdGFydC5fTV9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9l bmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0Ll9NX3ApOwogIH0gIAoKICBfQml0X2l0ZXJhdG9yIF9N X3N0YXJ0OwogIF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOwogIHVuc2lnbmVkIGludCogX01fZW5k X29mX3N0b3JhZ2U7Cn07ICAKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9CdmVjdG9y X2Jhc2UKICA6IHB1YmxpYyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFu Y2VsZXNzPgp7CiAgdHlwZWRlZiBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2M+OjpfU19pbnN0 YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jh c2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfQnZlY3Rvcl9iYXNlKGNvbnN0 IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIH5fQnZlY3Rvcl9iYXNlKCkg eyBfQmFzZTo6X01fZGVhbGxvY2F0ZSgpOyB9Cn07CgojIDM0OCAiL3Vzci9saWIvZ2NjLWxpYi9p NTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9i dmVjdG9yLmgiIDMKCgogCiAKIAogCgoKCgoKCgoKCgogICAgICAgIAoKICAgICAgICAKdGVtcGxh dGU8Y2xhc3MgX0FsbG9jPiBjbGFzcyB2ZWN0b3I8Ym9vbCxfQWxsb2M+CiAgOiBwdWJsaWMgX0J2 ZWN0b3JfYmFzZTxfQWxsb2M+CgoKCgp7CgogIHR5cGVkZWYgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+ IF9CYXNlOwoKCgpwdWJsaWM6CiAgdHlwZWRlZiBib29sIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBz aXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsgCiAg dHlwZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiBib29sIGNvbnN0X3Jl ZmVyZW5jZTsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogIHR5cGVkZWYgY29u c3QgYm9vbCogY29uc3RfcG9pbnRlcjsKCiAgdHlwZWRlZiBfQml0X2l0ZXJhdG9yICAgICAgICAg ICAgICAgIGl0ZXJhdG9yOwogIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciAgICAgICAgICBj b25zdF9pdGVyYXRvcjsKCgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRv cj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRl cmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgoKCgoKCgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6 OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxv Y2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9Cgpwcm90ZWN0 ZWQ6CgoKCgoKCgoKcHJvdGVjdGVkOgogIHZvaWQgX01faW5pdGlhbGl6ZShzaXplX3R5cGUgX19u KSB7CiAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX24pOwogICAgX01fZW5k X29mX3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAg ICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydCAr IGRpZmZlcmVuY2VfdHlwZShfX24pOwogIH0KICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3Ig X19wb3NpdGlvbiwgYm9vbCBfX3gpIHsKICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRf b2Zfc3RvcmFnZSkgewogICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwg X01fZmluaXNoICsgMSk7CiAgICAgICpfX3Bvc2l0aW9uID0gX194OwogICAgICArK19NX2Zpbmlz aDsKICAgIH0KICAgIGVsc2UgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgPyAyICog c2l6ZSgpIDogX19XT1JEX0JJVDsKICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxs b2MoX19sZW4pOwogICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24s IGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAqX19pKysgPSBfX3g7CiAgICAgIF9NX2ZpbmlzaCA9 IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAg ICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfX1dPUkRfQklUIC0gMSkvX19X T1JEX0JJVDsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgfQogIH0KCgog IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luaXRpYWxpemVfcmFu Z2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgIF9NX3N0YXJ0ID0g aXRlcmF0b3IoKTsKICAgIF9NX2ZpbmlzaCA9IGl0ZXJhdG9yKCk7CiAgICBfTV9lbmRfb2Zfc3Rv cmFnZSA9IDA7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIAogICAg ICBwdXNoX2JhY2soKl9fZmlyc3QpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl cmF0b3I+CiAgdm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJz dCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv cndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICBzaXplX3R5cGUgX19uID0gMDsKICAgIGRpc3RhbmNl KF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgIGNvcHko X19maXJzdCwgX19sYXN0LCBfTV9zdGFydCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3MsCiAgICAgICAg ICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgZm9y ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSB7CiAgICAgIF9fcG9zID0gaW5zZXJ0 KF9fcG9zLCAqX19maXJzdCk7CiAgICAgICsrX19wb3M7CiAgICB9CiAgfQoKICB0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2VydF9yYW5nZShpdGVyYXRvciBf X3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJz dCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgZm9yd2Fy ZF9pdGVyYXRvcl90YWcpIHsKICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICBzaXpl X3R5cGUgX19uID0gMDsKICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOwogICAg ICBpZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24pIHsKICAgICAgICBjb3B5X2JhY2t3YXJk KF9fcG9zaXRpb24sIGVuZCgpLCBfTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAg ICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9zaXRpb24pOwogICAgICAgIF9NX2Zpbmlz aCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBz aXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAgICAgIHVuc2ln bmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICBpdGVyYXRvciBfX2kg PSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgIF9f aSA9IGNvcHkoX19maXJzdCwgX19sYXN0LCBfX2kpOwogICAgICAgIF9NX2ZpbmlzaCA9IGNvcHko X19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAg IF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09S RF9CSVQ7CiAgICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICB9CiAgICB9 CiAgfSAgICAgIAoKCgpwdWJsaWM6CiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV9zdGFy dDsgfQogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fc3RhcnQ7IH0K ICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9maW5pc2g7IH0KICBjb25zdF9pdGVyYXRvciBl bmQoKSBjb25zdCB7IHJldHVybiBfTV9maW5pc2g7IH0KCiAgcmV2ZXJzZV9pdGVyYXRvciByYmVn aW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIGNvbnN0X3JldmVyc2Vf aXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyAKICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJh dG9yKGVuZCgpKTsgCiAgfQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVy c2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBj b25zdCB7IAogICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IAogIH0K CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoZW5kKCkgLSBiZWdp bigpKTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZSgt MSk7IH0KICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25zdCB7CiAgICByZXR1cm4gc2l6ZV90eXBl KGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdlLCAwKSAtIGJlZ2luKCkpOwogIH0KICBi b29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQogIHJlZmVyZW5j ZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIHsKICAgIHJldHVybiAqKGJlZ2luKCkgKyBkaWZm ZXJlbmNlX3R5cGUoX19uKSk7CiAgfQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVf dHlwZSBfX24pIGNvbnN0IHsKICAgIHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUo X19uKSk7CiAgfQoKICBleHBsaWNpdCB2ZWN0b3IgKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2Eg PSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpIHt9CgogIHZlY3RvciAoc2l6ZV90 eXBlIF9fbiwgYm9vbCBfX3ZhbHVlLAogICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYg X19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hKQogIHsKICAgIF9NX2luaXRp YWxpemUoX19uKTsKICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9f dmFsdWUgPyB+MCA6IDApOwogIH0KCiAgZXhwbGljaXQgdmVjdG9yIChzaXplX3R5cGUgX19uKQog ICAgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKQogIHsKICAgIF9NX2luaXRpYWxpemUoX19uKTsK ICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIDApOwogIH0KCiAgdmVj dG9yIChjb25zdCB2ZWN0b3IgJiBfX3gpIDogX0Jhc2UoX194LmdldF9hbGxvY2F0b3IoKSkgewog ICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5l bmQoKSwgX01fc3RhcnQpOwogIH0KCgogICAKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0 b3I+CiAgdmVjdG9yIChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xh c3QsCiAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlw ZSgpKQogICAgOiBfQmFzZShfX2EpCiAgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdl cjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9pbml0aWFsaXpl X2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KICAgIAogIHRlbXBs YXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVn ZXIgX19uLCBfSW50ZWdlciBfX3gsIF9fdHJ1ZV90eXBlKSB7CiAgICBfTV9pbml0aWFsaXplKF9f bik7CiAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6 IDApOwogIH0KICAgIAogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9N X2luaXRpYWxpemVfZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0 b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsK ICAgIF9NX2luaXRpYWxpemVfcmFuZ2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVn b3J5KCBfX2ZpcnN0ICkgKTsKICB9CiMgNTg3ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJh a2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2J2ZWN0b3IuaCIg MwoKCiAgfnZlY3RvciAoKSB7IH0KCiAgdmVjdG9yICYgb3BlcmF0b3I9KGNvbnN0IHZlY3RvciAm IF9feCkgewogICAgaWYgKCZfX3ggPT0gdGhpcykgcmV0dXJuICp0aGlzOwogICAgaWYgKF9feC5z aXplKCkgPiBjYXBhY2l0eSgpKSB7CiAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgX01faW5p dGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgIH0KICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQo KSwgYmVnaW4oKSk7CiAgICBfTV9maW5pc2ggPSBiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9f eC5zaXplKCkpOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgIAogICAKICAgCiAgIAoKICB2b2lk IGFzc2lnbihzaXplX3QgX19uLCBib29sIF9feCkgewogICAgaWYgKF9fbiA+IHNpemUoKSkgewog ICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDAp OwogICAgICBpbnNlcnQoZW5kKCksIF9fbiAtIHNpemUoKSwgX194KTsKICAgIH0KICAgIGVsc2Ug ewogICAgICBlcmFzZShiZWdpbigpICsgX19uLCBlbmQoKSk7CiAgICAgIGZpbGwoX01fc3RhcnQu X01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICB9CiAgfQoKCgogIHRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRv ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUg X0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01f YXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVt cGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2Vy IF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgeyBhc3NpZ24oKHNpemVfdCkg X19uLCAoYm9vbCkgX192YWwpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgogIHZv aWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh c3QsIF9fZmFsc2VfdHlwZSkKICAgIHsgX01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9f aXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyYXRvcj4KICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwg X0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRv cl90YWcpIHsKICAgIGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsKICAgIGZvciAoIDsgX19maXJz dCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJzdCkKICAgICAg Kl9fY3VyID0gKl9fZmlyc3Q7CiAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgIGVyYXNl KF9fY3VyLCBlbmQoKSk7CiAgICBlbHNlCiAgICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19s YXN0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01f YXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgc2l6 ZV90eXBlIF9fbGVuID0gMDsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwog ICAgaWYgKF9fbGVuIDwgc2l6ZSgpKQogICAgICBlcmFzZShjb3B5KF9fZmlyc3QsIF9fbGFzdCwg YmVnaW4oKSksIGVuZCgpKTsKICAgIGVsc2UgewogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlk ID0gX19maXJzdDsKICAgICAgYWR2YW5jZShfX21pZCwgc2l6ZSgpKTsKICAgICAgY29weShfX2Zp cnN0LCBfX21pZCwgYmVnaW4oKSk7CiAgICAgIGluc2VydChlbmQoKSwgX19taWQsIF9fbGFzdCk7 CiAgICB9CiAgfSAgICAKCgoKICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIF9fbikgewogICAgaWYg KGNhcGFjaXR5KCkgPCBfX24pIHsKICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxs b2MoX19uKTsKICAgICAgX01fZmluaXNoID0gY29weShiZWdpbigpLCBlbmQoKSwgaXRlcmF0b3Io X19xLCAwKSk7CiAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRv cihfX3EsIDApOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24gKyBfX1dPUkRf QklUIC0gMSkvX19XT1JEX0JJVDsKICAgIH0KICB9CgogIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0 dXJuICpiZWdpbigpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4g KmJlZ2luKCk7IH0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQog IGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAg dm9pZCBwdXNoX2JhY2soYm9vbCBfX3gpIHsKICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9l bmRfb2Zfc3RvcmFnZSkKICAgICAgKl9NX2ZpbmlzaCsrID0gX194OwogICAgZWxzZQogICAgICBf TV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOwogIH0KICB2b2lkIHN3YXAodmVjdG9yICYgX194KSB7 CiAgICAgOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgIDo6c3dhcChfTV9maW5p c2gsIF9feC5fTV9maW5pc2gpOwogICAgIDo6c3dhcChfTV9lbmRfb2Zfc3RvcmFnZSwgX194Ll9N X2VuZF9vZl9zdG9yYWdlKTsKICB9CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRp b24sIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19wb3Np dGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX01fZW5kX29mX3N0b3Jh Z2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkKICAgICAgKl9NX2ZpbmlzaCsrID0gX194OwogICAg ZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRpb24sIF9feCk7CiAgICByZXR1cm4gYmVn aW4oKSArIF9fbjsKICB9CgoKICAgCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgog IHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgX0lucHV0SXRl cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVu YW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAg IF9NX2luc2VydF9kaXNwYXRjaChfX3Bvc2l0aW9uLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3Jh bCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2luc2VydF9k aXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsKICAgIGluc2VydChfX3BvcywgKHNp emVfdHlwZSkgX19uLCAoYm9vbCkgX194KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyYXRvcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywKICAgICAg ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBf TV9pbnNlcnRfcmFuZ2UoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29y eSggX19maXJzdCApICk7CiAgfQojIDc2MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtl LWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9idmVjdG9yLmgiIDMK CiAgCiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgYm9v bCBfX3gpIHsKICAgIGlmIChfX24gPT0gMCkgcmV0dXJuOwogICAgaWYgKGNhcGFjaXR5KCkgLSBz aXplKCkgPj0gX19uKSB7CiAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5kKCksIF9N X2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAgZmlsbChfX3Bvc2l0aW9uLCBf X3Bvc2l0aW9uICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9feCk7CiAgICAgIF9NX2ZpbmlzaCAr PSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgIH0KICAgIGVsc2UgewogICAgICBzaXplX3R5cGUg X19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAgICB1bnNpZ25lZCBpbnQqIF9f cSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4o KSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgIGZpbGxfbihfX2ksIF9fbiwg X194KTsKICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pICsgZGlm ZmVyZW5jZV90eXBlKF9fbikpOwogICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgIF9NX2VuZF9v Zl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAg ICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgIH0KICB9CgogIHZvaWQgcG9wX2Jh Y2soKSB7IC0tX01fZmluaXNoOyB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlv bikgewogICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQogICAgICBjb3B5KF9fcG9zaXRp b24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAgIC0tX01fZmluaXNoOwogICAgcmV0dXJu IF9fcG9zaXRpb247CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJh dG9yIF9fbGFzdCkgewogICAgX01fZmluaXNoID0gY29weShfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0 KTsKICAgIHJldHVybiBfX2ZpcnN0OwogIH0KICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdf c2l6ZSwgYm9vbCBfX3ggPSBib29sKCkpIHsKICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKSAK ICAgICAgZXJhc2UoYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX25ld19zaXplKSwgZW5kKCkp OwogICAgZWxzZQogICAgICBpbnNlcnQoZW5kKCksIF9fbmV3X3NpemUgLSBzaXplKCksIF9feCk7 CiAgfQogIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQp9OwoKCgp0eXBl ZGVmIHZlY3Rvcjxib29sLCBhbGxvYz4gYml0X3ZlY3RvcjsKCiMgODIyICIvdXNyL2xpYi9nY2Mt bGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv c3RsX2J2ZWN0b3IuaCIgMwoKCgoKCgoKCgoKICAKCgoKIAogCiAKIyAzNSAiL3Vzci9saWIvZ2Nj LWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z L3ZlY3RvciIgMiAzCgoKCgogCiAKIAojIDE4ICJNb3ZlREIuaCIgMgoKIyAxICIvdXNyL2xpYi9n Y2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr LTMvc2V0IiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIv Z2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr Ky0zL3N0bF90cmVlLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJh a2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2Z1bmN0aW9uLmgi IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCnRlbXBsYXRlIDxjbGFz cyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYg X0FyZyBhcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKCnRl bXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBi aW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsKICB0 eXBlZGVmIF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1 bHRfdHlwZTsKfTsgICAgICAKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBwbHVzIDogcHVi bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0 IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICsgX195OyB9Cn07 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbWludXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0 aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0 IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFz cyBfVHA+CnN0cnVjdCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1Rw LF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg Y29uc3QgeyByZXR1cm4gX194ICogX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1 Y3QgZGl2aWRlcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAg b3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJu IF9feCAvIF9feTsgfQp9OwoKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gaW5saW5lIF9UcCBpZGVu dGl0eV9lbGVtZW50KHBsdXM8X1RwPikgewogIHJldHVybiBfVHAoMCk7Cn0KdGVtcGxhdGUgPGNs YXNzIF9UcD4gaW5saW5lIF9UcCBpZGVudGl0eV9lbGVtZW50KG11bHRpcGxpZXM8X1RwPikgewog IHJldHVybiBfVHAoMSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtb2R1bHVzIDog cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gCnsKICBfVHAgb3BlcmF0b3IoKShj b25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsg fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5lZ2F0ZSA6IHB1YmxpYyB1bmFyeV9m dW5jdGlvbjxfVHAsX1RwPiAKewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25z dCB7IHJldHVybiAtX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZXF1YWxf dG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4gCnsKICBib29sIG9wZXJh dG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3gg PT0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qgbm90X2VxdWFsX3RvIDog cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+IAp7CiAgYm9vbCBvcGVyYXRvcigp KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICE9IF9f eTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXIgOiBwdWJsaWMgYmlu YXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4gCnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1Rw JiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPiBfX3k7IH0KfTsKCnRl bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf VHAsX1RwLGJvb2w+IAp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBf VHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDwgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwPgpzdHJ1Y3QgZ3JlYXRlcl9lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9U cCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9f eSkgY29uc3QgeyByZXR1cm4gX194ID49IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K c3RydWN0IGxlc3NfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4g CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25z dCB7IHJldHVybiBfX3ggPD0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qg bG9naWNhbF9hbmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJv b2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0 dXJuIF9feCAmJiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2Fs X29yIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJh dG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3gg fHwgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9ub3QgOiBw dWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3Qg X1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuICFfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUHJl ZGljYXRlPgpjbGFzcyB1bmFyeV9uZWdhdGUKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBl bmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90eXBlLCBib29sPiB7CnByb3RlY3RlZDoKICBfUHJl ZGljYXRlIF9NX3ByZWQ7CnB1YmxpYzoKICBleHBsaWNpdCB1bmFyeV9uZWdhdGUoY29uc3QgX1By ZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0 eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVy biAhX01fcHJlZChfX3gpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxp bmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+IApub3QxKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJl ZCkKewogIHJldHVybiB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9QcmVkaWNhdGU+IApjbGFzcyBiaW5hcnlfbmVnYXRlIAogIDogcHVibGljIGJp bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJn dW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbD4gewpwcm90ZWN0ZWQ6 CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgYmluYXJ5X25lZ2F0ZShj b25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRvcigp KGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCwgCiAg ICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVu dF90eXBlJiBfX3kpIGNvbnN0CiAgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsgCiAg fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBiaW5hcnlfbmVnYXRlPF9Q cmVkaWNhdGU+IApub3QyKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJldHVybiBiaW5h cnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0 aW9uPiAKY2xhc3MgYmluZGVyMXN0CiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUg X09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVy YXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSB2YWx1 ZTsKcHVibGljOgogIGJpbmRlcjFzdChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAg IGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feSkKICAg ICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0 X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1 bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsgCiAgfQp9 OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5saW5lIGJpbmRlcjFz dDxfT3BlcmF0aW9uPiAKYmluZDFzdChjb25zdCBfT3BlcmF0aW9uJiBfX29wZXIsIGNvbnN0IF9U cCYgX194KSAKewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRf dHlwZSBfQXJnMV90eXBlOwogIHJldHVybiBiaW5kZXIxc3Q8X09wZXJhdGlvbj4oX19vcGVyLCBf QXJnMV90eXBlKF9feCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4gCmNsYXNzIGJp bmRlcjJuZAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OmZp cnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09w ZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlw ZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBi aW5kZXIybmQoY29uc3QgX09wZXJhdGlvbiYgX194LAogICAgICAgICAgICBjb25zdCB0eXBlbmFt ZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195KSAKICAgICAgOiBvcChfX3gp LCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVy YXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9f eCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFsdWUpOyAKICB9Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMm5kPF9PcGVyYXRpb24+ IApiaW5kMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9fb3BlciwgY29uc3QgX1RwJiBfX3gpIAp7CiAg dHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSBfQXJnMl90 eXBlOwogIHJldHVybiBiaW5kZXIybmQ8X09wZXJhdGlvbj4oX19vcGVyLCBfQXJnMl90eXBlKF9f eCkpOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24y PgpjbGFzcyB1bmFyeV9jb21wb3NlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUg X09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw ZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlPiAKewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlv bjEgX19vcDE7CiAgX09wZXJhdGlvbjIgX19vcDI7CnB1YmxpYzoKICB1bmFyeV9jb21wb3NlKGNv bnN0IF9PcGVyYXRpb24xJiBfX3gsIGNvbnN0IF9PcGVyYXRpb24yJiBfX3kpIAogICAgOiBfX29w MShfX3gpLCBfX29wMihfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBl CiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSYg X194KSBjb25zdCB7CiAgICByZXR1cm4gX19vcDEoX19vcDIoX194KSk7CiAgfQp9OwoKdGVtcGxh dGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMj4KaW5saW5lIHVuYXJ5X2Nv bXBvc2U8X09wZXJhdGlvbjEsX09wZXJhdGlvbjI+IApjb21wb3NlMShjb25zdCBfT3BlcmF0aW9u MSYgX19vcDEsIGNvbnN0IF9PcGVyYXRpb24yJiBfX29wMikKewogIHJldHVybiB1bmFyeV9jb21w b3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24yPihfX29wMSwgX19vcDIpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yLCBjbGFzcyBfT3BlcmF0aW9uMz4K Y2xhc3MgYmluYXJ5X2NvbXBvc2UKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBf T3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBl bmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24x IF9NX29wMTsKICBfT3BlcmF0aW9uMiBfTV9vcDI7CiAgX09wZXJhdGlvbjMgX01fb3AzOwpwdWJs aWM6CiAgYmluYXJ5X2NvbXBvc2UoY29uc3QgX09wZXJhdGlvbjEmIF9feCwgY29uc3QgX09wZXJh dGlvbjImIF9feSwgCiAgICAgICAgICAgICAgICAgY29uc3QgX09wZXJhdGlvbjMmIF9feikgCiAg ICA6IF9NX29wMShfX3gpLCBfTV9vcDIoX195KSwgX01fb3AzKF9feikgeyB9CiAgdHlwZW5hbWUg X09wZXJhdGlvbjE6OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3Bl cmF0aW9uMjo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fb3AxKF9N X29wMihfX3gpLCBfTV9vcDMoX194KSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRp b24xLCBjbGFzcyBfT3BlcmF0aW9uMiwgY2xhc3MgX09wZXJhdGlvbjM+CmlubGluZSBiaW5hcnlf Y29tcG9zZTxfT3BlcmF0aW9uMSwgX09wZXJhdGlvbjIsIF9PcGVyYXRpb24zPiAKY29tcG9zZTIo Y29uc3QgX09wZXJhdGlvbjEmIF9fb3AxLCBjb25zdCBfT3BlcmF0aW9uMiYgX19vcDIsIAogICAg ICAgICBjb25zdCBfT3BlcmF0aW9uMyYgX19vcDMpCnsKICByZXR1cm4gYmluYXJ5X2NvbXBvc2U8 X09wZXJhdGlvbjEsX09wZXJhdGlvbjIsX09wZXJhdGlvbjM+CiAgICAoX19vcDEsIF9fb3AyLCBf X29wMyk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2lu dGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1 bHQ+IHsKcHJvdGVjdGVkOgogIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcpOwpwdWJsaWM6CiAgcG9p bnRlcl90b191bmFyeV9mdW5jdGlvbigpIHt9CiAgZXhwbGljaXQgcG9pbnRlcl90b191bmFyeV9m dW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnKSkgOiBfTV9wdHIoX194KSB7fQogIF9SZXN1bHQg b3BlcmF0b3IoKShfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gX01fcHRyKF9feCk7IH0KfTsKCnRl bXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b191bmFy eV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiBwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcpKQp7 CiAgcmV0dXJuIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4oX194KTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KY2xh c3MgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24gOiAKICBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9u PF9BcmcxLF9BcmcyLF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogICAgX1Jlc3VsdCAoKl9NX3B0ciko X0FyZzEsIF9BcmcyKTsKcHVibGljOgogICAgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oKSB7 fQogICAgZXhwbGljaXQgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCko X0FyZzEsIF9BcmcyKSkgCiAgICAgIDogX01fcHRyKF9feCkge30KICAgIF9SZXN1bHQgb3BlcmF0 b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9feSkgY29uc3QgewogICAgICByZXR1cm4gX01fcHRyKF9f eCwgX195KTsKICAgIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNs YXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJn MixfUmVzdWx0PiAKcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKSB7CiAgcmV0 dXJuIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+KF9feCk7 Cn0KCiAKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9JZGVudGl0eSA6IHB1YmxpYyB1bmFy eV9mdW5jdGlvbjxfVHAsX1RwPiB7CiAgY29uc3QgX1RwJiBvcGVyYXRvcigpKGNvbnN0IF9UcCYg X194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVj dCBpZGVudGl0eSA6IHB1YmxpYyBfSWRlbnRpdHk8X1RwPiB7fTsKCiAKdGVtcGxhdGUgPGNsYXNz IF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDFzdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwg dHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGU+IHsKICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6Zmly c3RfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4g X194LmZpcnN0OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3Qy bmQgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRf dHlwZT4KewogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShj b25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LnNlY29uZDsKICB9Cn07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+IHN0cnVjdCBzZWxlY3Qxc3QgOiBwdWJsaWMgX1NlbGVjdDFz dDxfUGFpcj4ge307CnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4gc3RydWN0IHNlbGVjdDJuZCA6IHB1 YmxpYyBfU2VsZWN0Mm5kPF9QYWlyPiB7fTsKCiAKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFz cyBfQXJnMj4Kc3RydWN0IF9Qcm9qZWN0MXN0IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJn MSwgX0FyZzIsIF9BcmcxPiB7CiAgX0FyZzEgb3BlcmF0b3IoKShjb25zdCBfQXJnMSYgX194LCBj b25zdCBfQXJnMiYpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9B cmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IF9Qcm9qZWN0Mm5kIDogcHVibGljIGJpbmFyeV9mdW5j dGlvbjxfQXJnMSwgX0FyZzIsIF9BcmcyPiB7CiAgX0FyZzIgb3BlcmF0b3IoKShjb25zdCBfQXJn MSYsIGNvbnN0IF9BcmcyJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feTsgfQp9OwoKdGVtcGxhdGUg PGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4gCnN0cnVjdCBwcm9qZWN0MXN0IDogcHVibGljIF9Q cm9qZWN0MXN0PF9BcmcxLCBfQXJnMj4ge307Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNz IF9BcmcyPgpzdHJ1Y3QgcHJvamVjdDJuZCA6IHB1YmxpYyBfUHJvamVjdDJuZDxfQXJnMSwgX0Fy ZzI+IHt9OwoKIAogCiAKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBjb25zdGFudF92 b2lkX2Z1bgp7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwogIHJlc3VsdF90eXBlIF9f dmFsOwogIGNvbnN0YW50X3ZvaWRfZnVuKGNvbnN0IHJlc3VsdF90eXBlJiBfX3YpIDogX192YWwo X192KSB7fQogIGNvbnN0IHJlc3VsdF90eXBlJiBvcGVyYXRvcigpKCkgY29uc3QgeyByZXR1cm4g X192YWw7IH0KfTsgIAoKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJndW1lbnQg PSBfUmVzdWx0PgoKCgpzdHJ1Y3QgY29uc3RhbnRfdW5hcnlfZnVuIDogcHVibGljIHVuYXJ5X2Z1 bmN0aW9uPF9Bcmd1bWVudCwgX1Jlc3VsdD4gewogIF9SZXN1bHQgX01fdmFsOwogIGNvbnN0YW50 X3VuYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpIDogX01fdmFsKF9fdikge30KICBjb25zdCBf UmVzdWx0JiBvcGVyYXRvcigpKGNvbnN0IF9Bcmd1bWVudCYpIGNvbnN0IHsgcmV0dXJuIF9NX3Zh bDsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJnMSA9IF9SZXN1bHQs IGNsYXNzIF9BcmcyID0gX0FyZzE+CgoKCnN0cnVjdCBjb25zdGFudF9iaW5hcnlfZnVuIDogcHVi bGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSwgX0FyZzIsIF9SZXN1bHQ+IHsKICBfUmVzdWx0IF9N X3ZhbDsKICBjb25zdGFudF9iaW5hcnlfZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikgOiBfTV92YWwo X192KSB7fQogIGNvbnN0IF9SZXN1bHQmIG9wZXJhdG9yKCkoY29uc3QgX0FyZzEmLCBjb25zdCBf QXJnMiYpIGNvbnN0IHsKICAgIHJldHVybiBfTV92YWw7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNz IF9SZXN1bHQ+CmlubGluZSBjb25zdGFudF92b2lkX2Z1bjxfUmVzdWx0PiBjb25zdGFudDAoY29u c3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4gY29uc3RhbnRfdm9pZF9mdW48X1Jlc3VsdD4o X192YWwpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50X3VuYXJ5 X2Z1bjxfUmVzdWx0LF9SZXN1bHQ+IGNvbnN0YW50MShjb25zdCBfUmVzdWx0JiBfX3ZhbCkKewog IHJldHVybiBjb25zdGFudF91bmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0PihfX3ZhbCk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfUmVzdWx0PgppbmxpbmUgY29uc3RhbnRfYmluYXJ5X2Z1bjxfUmVzdWx0 LF9SZXN1bHQsX1Jlc3VsdD4gCmNvbnN0YW50Mihjb25zdCBfUmVzdWx0JiBfX3ZhbCkKewogIHJl dHVybiBjb25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdCxfUmVzdWx0PihfX3ZhbCk7 Cn0KCiAKIApjbGFzcyBzdWJ0cmFjdGl2ZV9ybmcgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dW5z aWduZWQgaW50LCB1bnNpZ25lZCBpbnQ+IHsKcHJpdmF0ZToKICB1bnNpZ25lZCBpbnQgX01fdGFi bGVbNTVdOwogIHNpemVfdCBfTV9pbmRleDE7CiAgc2l6ZV90IF9NX2luZGV4MjsKcHVibGljOgog IHVuc2lnbmVkIGludCBvcGVyYXRvcigpKHVuc2lnbmVkIGludCBfX2xpbWl0KSB7CiAgICBfTV9p bmRleDEgPSAoX01faW5kZXgxICsgMSkgJSA1NTsKICAgIF9NX2luZGV4MiA9IChfTV9pbmRleDIg KyAxKSAlIDU1OwogICAgX01fdGFibGVbX01faW5kZXgxXSA9IF9NX3RhYmxlW19NX2luZGV4MV0g LSBfTV90YWJsZVtfTV9pbmRleDJdOwogICAgcmV0dXJuIF9NX3RhYmxlW19NX2luZGV4MV0gJSBf X2xpbWl0OwogIH0KCiAgdm9pZCBfTV9pbml0aWFsaXplKHVuc2lnbmVkIGludCBfX3NlZWQpCiAg ewogICAgdW5zaWduZWQgaW50IF9fayA9IDE7CiAgICBfTV90YWJsZVs1NF0gPSBfX3NlZWQ7CiAg ICBzaXplX3QgX19pOwogICAgZm9yIChfX2kgPSAwOyBfX2kgPCA1NDsgX19pKyspIHsKICAgICAg ICBzaXplX3QgX19paSA9ICgyMSAqIChfX2kgKyAxKSAlIDU1KSAtIDE7CiAgICAgICAgX01fdGFi bGVbX19paV0gPSBfX2s7CiAgICAgICAgX19rID0gX19zZWVkIC0gX19rOwogICAgICAgIF9fc2Vl ZCA9IF9NX3RhYmxlW19faWldOwogICAgfQogICAgZm9yIChpbnQgX19sb29wID0gMDsgX19sb29w IDwgNDsgX19sb29wKyspIHsKICAgICAgICBmb3IgKF9faSA9IDA7IF9faSA8IDU1OyBfX2krKykK ICAgICAgICAgICAgX01fdGFibGVbX19pXSA9IF9NX3RhYmxlW19faV0gLSBfTV90YWJsZVsoMSAr IF9faSArIDMwKSAlIDU1XTsKICAgIH0KICAgIF9NX2luZGV4MSA9IDA7CiAgICBfTV9pbmRleDIg PSAzMTsKICB9CgogIHN1YnRyYWN0aXZlX3JuZyh1bnNpZ25lZCBpbnQgX19zZWVkKSB7IF9NX2lu aXRpYWxpemUoX19zZWVkKTsgfQogIHN1YnRyYWN0aXZlX3JuZygpIHsgX01faW5pdGlhbGl6ZSgx NjE4MDMzOTh1KTsgfQp9OwoKCiAKCiAKIAogCiAKIAogCiAKCiAKIAogCiAKIAoKIAogCiAKIAog CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVi bGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1 bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3Io KShfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBf UmV0IChfVHA6OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4K Y2xhc3MgY29uc3RfbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCos X1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9f cGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAq IF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChf VHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+ CmNsYXNzIG1lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsK cHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBf TV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAo X19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBs YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3QgOiBw dWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0 X21lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9 CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipf TV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCnRlbXBs YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Qg OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBs aWNpdCBtZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30K ICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19w LT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoK dGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3Rf bWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLF9SZXQ+ IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZiko X0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAq IF9fcCwgX0FyZyBfX3gpIGNvbnN0CiAgICB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpw cml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNs YXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfcmVmX3QgOiBw dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0 IG1lbV9mdW4xX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30K ICBfUmV0IG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19y LipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9t ZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpw dWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZiko X0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAm IF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0 ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgoKdGVtcGxhdGUgPGNsYXNz IF9UcD4KY2xhc3MgbWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248 X1RwKix2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19w ZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7 IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCnRl bXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVi bGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQg Y29uc3RfbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7 fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZiko KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlf ZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3Qodm9p ZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCYg X19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9m KSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdDx2 b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBl eHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDog X01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QgeyAo X19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsK CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Q8dm9pZCwg X1RwLCBfQXJnPiA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLHZvaWQ+IHsKcHVi bGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01f ZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsg KF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsK fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4x X3Q8dm9pZCwgX1RwLCBfQXJnPiAKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1Rw KixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAo X1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3Io KShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0K cHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0Fy Zz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAg ZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihf X3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9f ci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoK dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVm X3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyx2 b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZfdCh2b2lkIChfVHA6 OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNv bnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyAoX19yLipfTV9mKShfX3gpOyB9CnByaXZh dGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoKCiAKIAogCiAKCnRlbXBs YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3Q8X1JldCxfVHA+IG1l bV9mdW4oX1JldCAoX1RwOjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9mdW5fdDxfUmV0LF9UcD4o X19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0X21l bV9mdW5fdDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyBy ZXR1cm4gY29uc3RfbWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9y ZWYoX1JldCAoX1RwOjoqX19mKSgpKSAKICB7IHJldHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1Rw PihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3Rf bWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNv bnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRl bXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVu MV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJl dHVybiBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBf UmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQs X1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVy biBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFz cyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0 LF9UcCxfQXJnPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJu IG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBf UmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxf UmV0LF9UcCxfQXJnPgptZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQog IHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRl bXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVu MV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4xKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyBy ZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxfUmV0 LF9UcCxfQXJnPiBtZW1fZnVuMShfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0 dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNs YXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3JlZl90PF9S ZXQsX1RwLF9Bcmc+IG1lbV9mdW4xX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0 dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFz cyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZf dDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuMV9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25z dCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9 CgogCgoKCiAKIAogCiMgNTkgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8y Ljk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfdHJlZS5oIiAyIDMKCgogIAoKCgoK CnR5cGVkZWYgYm9vbCBfUmJfdHJlZV9Db2xvcl90eXBlOwpjb25zdCBfUmJfdHJlZV9Db2xvcl90 eXBlIF9TX3JiX3RyZWVfcmVkID0gZmFsc2U7CmNvbnN0IF9SYl90cmVlX0NvbG9yX3R5cGUgX1Nf cmJfdHJlZV9ibGFjayA9IHRydWU7CgpzdHJ1Y3QgX1JiX3RyZWVfbm9kZV9iYXNlCnsKICB0eXBl ZGVmIF9SYl90cmVlX0NvbG9yX3R5cGUgX0NvbG9yX3R5cGU7CiAgdHlwZWRlZiBfUmJfdHJlZV9u b2RlX2Jhc2UqIF9CYXNlX3B0cjsKCiAgX0NvbG9yX3R5cGUgX01fY29sb3I7IAogIF9CYXNlX3B0 ciBfTV9wYXJlbnQ7CiAgX0Jhc2VfcHRyIF9NX2xlZnQ7CiAgX0Jhc2VfcHRyIF9NX3JpZ2h0OwoK ICBzdGF0aWMgX0Jhc2VfcHRyIF9TX21pbmltdW0oX0Jhc2VfcHRyIF9feCkKICB7CiAgICB3aGls ZSAoX194LT5fTV9sZWZ0ICE9IDApIF9feCA9IF9feC0+X01fbGVmdDsKICAgIHJldHVybiBfX3g7 CiAgfQoKICBzdGF0aWMgX0Jhc2VfcHRyIF9TX21heGltdW0oX0Jhc2VfcHRyIF9feCkKICB7CiAg ICB3aGlsZSAoX194LT5fTV9yaWdodCAhPSAwKSBfX3ggPSBfX3gtPl9NX3JpZ2h0OwogICAgcmV0 dXJuIF9feDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlPgpzdHJ1Y3QgX1JiX3RyZWVf bm9kZSA6IHB1YmxpYyBfUmJfdHJlZV9ub2RlX2Jhc2UKewogIHR5cGVkZWYgX1JiX3RyZWVfbm9k ZTxfVmFsdWU+KiBfTGlua190eXBlOwogIF9WYWx1ZSBfTV92YWx1ZV9maWVsZDsKfTsKCgpzdHJ1 Y3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvcgp7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2U6 Ol9CYXNlX3B0ciBfQmFzZV9wdHI7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh ZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7 CiAgX0Jhc2VfcHRyIF9NX25vZGU7CgogIHZvaWQgX01faW5jcmVtZW50KCkKICB7CiAgICBpZiAo X01fbm9kZS0+X01fcmlnaHQgIT0gMCkgewogICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fcmln aHQ7CiAgICAgIHdoaWxlIChfTV9ub2RlLT5fTV9sZWZ0ICE9IDApCiAgICAgICAgX01fbm9kZSA9 IF9NX25vZGUtPl9NX2xlZnQ7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX0Jhc2VfcHRyIF9feSA9 IF9NX25vZGUtPl9NX3BhcmVudDsKICAgICAgd2hpbGUgKF9NX25vZGUgPT0gX195LT5fTV9yaWdo dCkgewogICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAgICAgX195ID0gX195LT5fTV9wYXJlbnQ7 CiAgICAgIH0KICAgICAgaWYgKF9NX25vZGUtPl9NX3JpZ2h0ICE9IF9feSkKICAgICAgICBfTV9u b2RlID0gX195OwogICAgfQogIH0KCiAgdm9pZCBfTV9kZWNyZW1lbnQoKQogIHsKICAgIGlmIChf TV9ub2RlLT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCAmJgogICAgICAgIF9NX25vZGUtPl9N X3BhcmVudC0+X01fcGFyZW50ID09IF9NX25vZGUpCiAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5f TV9yaWdodDsKICAgIGVsc2UgaWYgKF9NX25vZGUtPl9NX2xlZnQgIT0gMCkgewogICAgICBfQmFz ZV9wdHIgX195ID0gX01fbm9kZS0+X01fbGVmdDsKICAgICAgd2hpbGUgKF9feS0+X01fcmlnaHQg IT0gMCkKICAgICAgICBfX3kgPSBfX3ktPl9NX3JpZ2h0OwogICAgICBfTV9ub2RlID0gX195Owog ICAgfQogICAgZWxzZSB7CiAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9wYXJlbnQ7 CiAgICAgIHdoaWxlIChfTV9ub2RlID09IF9feS0+X01fbGVmdCkgewogICAgICAgIF9NX25vZGUg PSBfX3k7CiAgICAgICAgX195ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgIH0KICAgICAgX01fbm9k ZSA9IF9feTsKICAgIH0KICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfUmVm LCBjbGFzcyBfUHRyPgpzdHJ1Y3QgX1JiX3RyZWVfaXRlcmF0b3IgOiBwdWJsaWMgX1JiX3RyZWVf YmFzZV9pdGVyYXRvcgp7CiAgdHlwZWRlZiBfVmFsdWUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9S ZWYgcmVmZXJlbmNlOwogIHR5cGVkZWYgX1B0ciBwb2ludGVyOwogIHR5cGVkZWYgX1JiX3RyZWVf aXRlcmF0b3I8X1ZhbHVlLCBfVmFsdWUmLCBfVmFsdWUqPiAgICAgICAgICAgICAKICAgIGl0ZXJh dG9yOwogIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBjb25zdCBfVmFsdWUmLCBj b25zdCBfVmFsdWUqPiAKICAgIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgX1JiX3RyZWVfaXRl cmF0b3I8X1ZhbHVlLCBfUmVmLCBfUHRyPiAgICAgICAgICAgICAgICAgICAKICAgIF9TZWxmOwog IHR5cGVkZWYgX1JiX3RyZWVfbm9kZTxfVmFsdWU+KiBfTGlua190eXBlOwoKICBfUmJfdHJlZV9p dGVyYXRvcigpIHt9CiAgX1JiX3RyZWVfaXRlcmF0b3IoX0xpbmtfdHlwZSBfX3gpIHsgX01fbm9k ZSA9IF9feDsgfQogIF9SYl90cmVlX2l0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJiBfX2l0KSB7IF9N X25vZGUgPSBfX2l0Ll9NX25vZGU7IH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsg cmV0dXJuIF9MaW5rX3R5cGUoX01fbm9kZSktPl9NX3ZhbHVlX2ZpZWxkOyB9CgogIHBvaW50ZXIg b3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgoKICBfU2VsZiYg b3BlcmF0b3IrKygpIHsgX01faW5jcmVtZW50KCk7IHJldHVybiAqdGhpczsgfQogIF9TZWxmIG9w ZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgX01faW5jcmVtZW50 KCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogICAgCiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7IF9N X2RlY3JlbWVudCgpOyByZXR1cm4gKnRoaXM7IH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewog ICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIF9NX2RlY3JlbWVudCgpOwogICAgcmV0dXJuIF9f dG1wOwogIH0KfTsKCmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWVfYmFzZV9p dGVyYXRvciYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2Jhc2Vf aXRlcmF0b3ImIF9feSkgewogIHJldHVybiBfX3guX01fbm9kZSA9PSBfX3kuX01fbm9kZTsKfQoK aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yJiBfX3gs CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvciYgX195 KSB7CiAgcmV0dXJuIF9feC5fTV9ub2RlICE9IF9feS5fTV9ub2RlOwp9CgojIDIxNCAiL3Vzci9s aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl L2crKy0zL3N0bF90cmVlLmgiIDMKCgppbmxpbmUgdm9pZCAKX1JiX3RyZWVfcm90YXRlX2xlZnQo X1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKewog IF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9yaWdodDsKICBfX3gtPl9NX3JpZ2h0 ID0gX195LT5fTV9sZWZ0OwogIGlmIChfX3ktPl9NX2xlZnQgIT0wKQogICAgX195LT5fTV9sZWZ0 LT5fTV9wYXJlbnQgPSBfX3g7CiAgX195LT5fTV9wYXJlbnQgPSBfX3gtPl9NX3BhcmVudDsKCiAg aWYgKF9feCA9PSBfX3Jvb3QpCiAgICBfX3Jvb3QgPSBfX3k7CiAgZWxzZSBpZiAoX194ID09IF9f eC0+X01fcGFyZW50LT5fTV9sZWZ0KQogICAgX194LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7 CiAgZWxzZQogICAgX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX195OwogIF9feS0+X01fbGVm dCA9IF9feDsKICBfX3gtPl9NX3BhcmVudCA9IF9feTsKfQoKaW5saW5lIHZvaWQgCl9SYl90cmVl X3JvdGF0ZV9yaWdodChfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9kZV9iYXNl KiYgX19yb290KQp7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX2xlZnQ7CiAg X194LT5fTV9sZWZ0ID0gX195LT5fTV9yaWdodDsKICBpZiAoX195LT5fTV9yaWdodCAhPSAwKQog ICAgX195LT5fTV9yaWdodC0+X01fcGFyZW50ID0gX194OwogIF9feS0+X01fcGFyZW50ID0gX194 LT5fTV9wYXJlbnQ7CgogIGlmIChfX3ggPT0gX19yb290KQogICAgX19yb290ID0gX195OwogIGVs c2UgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQpCiAgICBfX3gtPl9NX3BhcmVu dC0+X01fcmlnaHQgPSBfX3k7CiAgZWxzZQogICAgX194LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBf X3k7CiAgX195LT5fTV9yaWdodCA9IF9feDsKICBfX3gtPl9NX3BhcmVudCA9IF9feTsKfQoKaW5s aW5lIHZvaWQgCl9SYl90cmVlX3JlYmFsYW5jZShfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwgX1Ji X3RyZWVfbm9kZV9iYXNlKiYgX19yb290KQp7CiAgX194LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVf cmVkOwogIHdoaWxlIChfX3ggIT0gX19yb290ICYmIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9 PSBfU19yYl90cmVlX3JlZCkgewogICAgaWYgKF9feC0+X01fcGFyZW50ID09IF9feC0+X01fcGFy ZW50LT5fTV9wYXJlbnQtPl9NX2xlZnQpIHsKICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kg PSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9yaWdodDsKICAgICAgaWYgKF9feSAmJiBf X3ktPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVkKSB7CiAgICAgICAgX194LT5fTV9wYXJlbnQt Pl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICBfX3ktPl9NX2NvbG9yID0gX1Nf cmJfdHJlZV9ibGFjazsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xv ciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJl bnQ7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVu dC0+X01fcmlnaHQpIHsKICAgICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50OwogICAgICAgICAg X1JiX3RyZWVfcm90YXRlX2xlZnQoX194LCBfX3Jvb3QpOwogICAgICAgIH0KICAgICAgICBfX3gt Pl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feC0+X01f cGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgX1Ji X3RyZWVfcm90YXRlX3JpZ2h0KF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQsIF9fcm9vdCk7CiAg ICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9f eC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgIGlmIChfX3kgJiYgX195LT5f TV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkgewogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9j b2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX195LT5fTV9jb2xvciA9IF9TX3JiX3Ry ZWVfYmxhY2s7CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBf U19yYl90cmVlX3JlZDsKICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50Owog ICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9N X2xlZnQpIHsKICAgICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50OwogICAgICAgICAgX1JiX3Ry ZWVfcm90YXRlX3JpZ2h0KF9feCwgX19yb290KTsKICAgICAgICB9CiAgICAgICAgX194LT5fTV9w YXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICBfX3gtPl9NX3BhcmVu dC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgIF9SYl90cmVl X3JvdGF0ZV9sZWZ0KF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQsIF9fcm9vdCk7CiAgICAgIH0K ICAgIH0KICB9CiAgX19yb290LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7Cn0KCmlubGlu ZSBfUmJfdHJlZV9ub2RlX2Jhc2UqCl9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UoX1JiX3Ry ZWVfbm9kZV9iYXNlKiBfX3osCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVf bm9kZV9iYXNlKiYgX19yb290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVl X25vZGVfYmFzZSomIF9fbGVmdG1vc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Ji X3RyZWVfbm9kZV9iYXNlKiYgX19yaWdodG1vc3QpCnsKICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9f eSA9IF9fejsKICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCA9IDA7CiAgX1JiX3RyZWVfbm9kZV9i YXNlKiBfX3hfcGFyZW50ID0gMDsKICBpZiAoX195LT5fTV9sZWZ0ID09IDApICAgICAgCiAgICBf X3ggPSBfX3ktPl9NX3JpZ2h0OyAgICAgIAogIGVsc2UKICAgIGlmIChfX3ktPl9NX3JpZ2h0ID09 IDApICAgCiAgICAgIF9feCA9IF9feS0+X01fbGVmdDsgICAgIAogICAgZWxzZSB7ICAgICAgICAg ICAgICAgICAgICAKICAgICAgX195ID0gX195LT5fTV9yaWdodDsgICAgCiAgICAgIHdoaWxlIChf X3ktPl9NX2xlZnQgIT0gMCkKICAgICAgICBfX3kgPSBfX3ktPl9NX2xlZnQ7CiAgICAgIF9feCA9 IF9feS0+X01fcmlnaHQ7CiAgICB9CiAgaWYgKF9feSAhPSBfX3opIHsgICAgICAgICAgIAogICAg X196LT5fTV9sZWZ0LT5fTV9wYXJlbnQgPSBfX3k7IAogICAgX195LT5fTV9sZWZ0ID0gX196LT5f TV9sZWZ0OwogICAgaWYgKF9feSAhPSBfX3otPl9NX3JpZ2h0KSB7CiAgICAgIF9feF9wYXJlbnQg PSBfX3ktPl9NX3BhcmVudDsKICAgICAgaWYgKF9feCkgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9N X3BhcmVudDsKICAgICAgX195LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3g7ICAgICAgIAogICAg ICBfX3ktPl9NX3JpZ2h0ID0gX196LT5fTV9yaWdodDsKICAgICAgX196LT5fTV9yaWdodC0+X01f cGFyZW50ID0gX195OwogICAgfQogICAgZWxzZQogICAgICBfX3hfcGFyZW50ID0gX195OyAgCiAg ICBpZiAoX19yb290ID09IF9feikKICAgICAgX19yb290ID0gX195OwogICAgZWxzZSBpZiAoX196 LT5fTV9wYXJlbnQtPl9NX2xlZnQgPT0gX196KQogICAgICBfX3otPl9NX3BhcmVudC0+X01fbGVm dCA9IF9feTsKICAgIGVsc2UgCiAgICAgIF9fei0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsK ICAgIF9feS0+X01fcGFyZW50ID0gX196LT5fTV9wYXJlbnQ7CiAgICAgOjpzd2FwKF9feS0+X01f Y29sb3IsIF9fei0+X01fY29sb3IpOwogICAgX195ID0gX196OwogICAgIAogIH0KICBlbHNlIHsg ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICBfX3hfcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7 CiAgICBpZiAoX194KSBfX3gtPl9NX3BhcmVudCA9IF9feS0+X01fcGFyZW50OyAgIAogICAgaWYg KF9fcm9vdCA9PSBfX3opCiAgICAgIF9fcm9vdCA9IF9feDsKICAgIGVsc2UgCiAgICAgIGlmIChf X3otPl9NX3BhcmVudC0+X01fbGVmdCA9PSBfX3opCiAgICAgICAgX196LT5fTV9wYXJlbnQtPl9N X2xlZnQgPSBfX3g7CiAgICAgIGVsc2UKICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fcmlnaHQg PSBfX3g7CiAgICBpZiAoX19sZWZ0bW9zdCA9PSBfX3opIAogICAgICBpZiAoX196LT5fTV9yaWdo dCA9PSAwKSAgICAgICAgIAogICAgICAgIF9fbGVmdG1vc3QgPSBfX3otPl9NX3BhcmVudDsKICAg ICAKICAgICAgZWxzZQogICAgICAgIF9fbGVmdG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9T X21pbmltdW0oX194KTsKICAgIGlmIChfX3JpZ2h0bW9zdCA9PSBfX3opICAKICAgICAgaWYgKF9f ei0+X01fbGVmdCA9PSAwKSAgICAgICAgICAKICAgICAgICBfX3JpZ2h0bW9zdCA9IF9fei0+X01f cGFyZW50OyAgCiAgICAgCiAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg IF9fcmlnaHRtb3N0ID0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9feCk7CiAgfQog IGlmIChfX3ktPl9NX2NvbG9yICE9IF9TX3JiX3RyZWVfcmVkKSB7IAogICAgd2hpbGUgKF9feCAh PSBfX3Jvb3QgJiYgKF9feCA9PSAwIHx8IF9feC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFj aykpCiAgICAgIGlmIChfX3ggPT0gX194X3BhcmVudC0+X01fbGVmdCkgewogICAgICAgIF9SYl90 cmVlX25vZGVfYmFzZSogX193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgaWYgKF9f dy0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAgICAgIF9fdy0+X01fY29sb3Ig PSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfU19y Yl90cmVlX3JlZDsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feF9wYXJlbnQsIF9f cm9vdCk7CiAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICB9CiAg ICAgICAgaWYgKChfX3ctPl9NX2xlZnQgPT0gMCB8fCAKICAgICAgICAgICAgIF9fdy0+X01fbGVm dC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykgJiYKICAgICAgICAgICAgKF9fdy0+X01f cmlnaHQgPT0gMCB8fCAKICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9T X3JiX3RyZWVfYmxhY2spKSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9y ZWQ7CiAgICAgICAgICBfX3ggPSBfX3hfcGFyZW50OwogICAgICAgICAgX194X3BhcmVudCA9IF9f eF9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKF9fdy0+ X01fcmlnaHQgPT0gMCB8fCAKICAgICAgICAgICAgICBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9 PSBfU19yYl90cmVlX2JsYWNrKSB7CiAgICAgICAgICAgIGlmIChfX3ctPl9NX2xlZnQpIF9fdy0+ X01fbGVmdC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgICBfX3ctPl9N X2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdo dChfX3csIF9fcm9vdCk7CiAgICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0Owog ICAgICAgICAgfQogICAgICAgICAgX193LT5fTV9jb2xvciA9IF9feF9wYXJlbnQtPl9NX2NvbG9y OwogICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAg ICAgICAgaWYgKF9fdy0+X01fcmlnaHQpIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID0gX1NfcmJf dHJlZV9ibGFjazsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feF9wYXJlbnQsIF9f cm9vdCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7ICAgICAgICAg ICAgICAgICAgIAogICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX193ID0gX194X3BhcmVudC0+ X01fbGVmdDsKICAgICAgICBpZiAoX193LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkgewog ICAgICAgICAgX193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfX3hf cGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgICAgX1JiX3RyZWVfcm90 YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50 LT5fTV9sZWZ0OwogICAgICAgIH0KICAgICAgICBpZiAoKF9fdy0+X01fcmlnaHQgPT0gMCB8fCAK ICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2sp ICYmCiAgICAgICAgICAgIChfX3ctPl9NX2xlZnQgPT0gMCB8fCAKICAgICAgICAgICAgIF9fdy0+ X01fbGVmdC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykpIHsKICAgICAgICAgIF9fdy0+ X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICAgIF9feCA9IF9feF9wYXJlbnQ7CiAg ICAgICAgICBfX3hfcGFyZW50ID0gX194X3BhcmVudC0+X01fcGFyZW50OwogICAgICAgIH0gZWxz ZSB7CiAgICAgICAgICBpZiAoX193LT5fTV9sZWZ0ID09IDAgfHwgCiAgICAgICAgICAgICAgX193 LT5fTV9sZWZ0LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrKSB7CiAgICAgICAgICAgIGlm IChfX3ctPl9NX3JpZ2h0KSBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxh Y2s7CiAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICAg ICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX193LCBfX3Jvb3QpOwogICAgICAgICAgICBfX3cgPSBf X3hfcGFyZW50LT5fTV9sZWZ0OwogICAgICAgICAgfQogICAgICAgICAgX193LT5fTV9jb2xvciA9 IF9feF9wYXJlbnQtPl9NX2NvbG9yOwogICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBf U19yYl90cmVlX2JsYWNrOwogICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCkgX193LT5fTV9sZWZ0 LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVf cmlnaHQoX194X3BhcmVudCwgX19yb290KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAg ICAgfQogICAgaWYgKF9feCkgX194LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgfQog IHJldHVybiBfX3k7Cn0KCiAKIAogCiAKCgoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf QWxsb2MsIGJvb2wgX1NfaW5zdGFuY2VsZXNzPgpjbGFzcyBfUmJfdHJlZV9hbGxvY19iYXNlIHsK cHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46OmFs bG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0 b3IoKSBjb25zdCB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvcjsgfQoKICBfUmJfdHJlZV9hbGxv Y19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX25vZGVfYWxsb2NhdG9y KF9fYSksIF9NX2hlYWRlcigwKSB7fQoKcHJvdGVjdGVkOgogIHR5cGVuYW1lIF9BbGxvY190cmFp dHM8X1JiX3RyZWVfbm9kZTxfVHA+LCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAg IF9NX25vZGVfYWxsb2NhdG9yOwogIF9SYl90cmVlX25vZGU8X1RwPiogX01faGVhZGVyOwoKICBf UmJfdHJlZV9ub2RlPF9UcD4qIF9NX2dldF9ub2RlKCkgCiAgICB7IHJldHVybiBfTV9ub2RlX2Fs bG9jYXRvci5hbGxvY2F0ZSgxKTsgfQogIHZvaWQgX01fcHV0X25vZGUoX1JiX3RyZWVfbm9kZTxf VHA+KiBfX3ApIAogICAgeyBfTV9ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgMSk7IH0K fTsKCiAKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBfUmJfdHJlZV9h bGxvY19iYXNlPF9UcCwgX0FsbG9jLCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1l IF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlw ZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2Nh dG9yX3R5cGUoKTsgfQoKICBfUmJfdHJlZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBl JikgOiBfTV9oZWFkZXIoMCkge30KCnByb3RlY3RlZDoKICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9N X2hlYWRlcjsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9SYl90cmVlX25vZGU8 X1RwPiwgX0FsbG9jPjo6X0FsbG9jX3R5cGUKICAgICAgICAgIF9BbGxvY190eXBlOwoKICBfUmJf dHJlZV9ub2RlPF9UcD4qIF9NX2dldF9ub2RlKCkKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjph bGxvY2F0ZSgxKTsgfQogIHZvaWQgX01fcHV0X25vZGUoX1JiX3RyZWVfbm9kZTxfVHA+KiBfX3Ap CiAgICB7IF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwgMSk7IH0KfTsKCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9SYl90cmVlX2Jhc2UKICA6IHB1YmxpYyBf UmJfdHJlZV9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5 cGVkZWYgX1JiX3RyZWVfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4K ICAgICAgICAgIF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBl IGFsbG9jYXRvcl90eXBlOwoKICBfUmJfdHJlZV9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBf X2EpIAogICAgOiBfQmFzZShfX2EpIHsgX01faGVhZGVyID0gX01fZ2V0X25vZGUoKTsgfQogIH5f UmJfdHJlZV9iYXNlKCkgeyBfTV9wdXRfbm9kZShfTV9oZWFkZXIpOyB9Cgp9OwoKIyA1MTkgIi91 c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5j bHVkZS9nKystMy9zdGxfdHJlZS5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9W YWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIGNsYXNzIF9Db21wYXJlLAogICAgICAgICAgY2xhc3Mg X0FsbG9jID0gYWxsb2NhdG9yPCBfVmFsdWUgPiAgPgpjbGFzcyBfUmJfdHJlZSA6IHByb3RlY3Rl ZCBfUmJfdHJlZV9iYXNlPF9WYWx1ZSwgX0FsbG9jPiB7CiAgdHlwZWRlZiBfUmJfdHJlZV9iYXNl PF9WYWx1ZSwgX0FsbG9jPiBfQmFzZTsKcHJvdGVjdGVkOgogIHR5cGVkZWYgX1JiX3RyZWVfbm9k ZV9iYXNlKiBfQmFzZV9wdHI7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWx1ZT4gX1JiX3Ry ZWVfbm9kZTsKICB0eXBlZGVmIF9SYl90cmVlX0NvbG9yX3R5cGUgX0NvbG9yX3R5cGU7CnB1Ymxp YzoKICB0eXBlZGVmIF9LZXkga2V5X3R5cGU7CiAgdHlwZWRlZiBfVmFsdWUgdmFsdWVfdHlwZTsK ICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBl KiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogIHR5cGVk ZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1JiX3RyZWVf bm9kZSogX0xpbmtfdHlwZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBw dHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxv Y2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9y KCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKcHJvdGVjdGVkOgoK CgoKCgpwcm90ZWN0ZWQ6CgogIF9MaW5rX3R5cGUgX01fY3JlYXRlX25vZGUoY29uc3QgdmFsdWVf dHlwZSYgX194KQogIHsKICAgIF9MaW5rX3R5cGUgX190bXAgPSBfTV9nZXRfbm9kZSgpOwogICAg dHJ5ICB7CiAgICAgIGNvbnN0cnVjdCgmX190bXAtPl9NX3ZhbHVlX2ZpZWxkLCBfX3gpOwogICAg fQogICAgY2F0Y2goLi4uKSB7ICBfTV9wdXRfbm9kZShfX3RtcCkgOyB0aHJvdzsgfSA7CiAgICBy ZXR1cm4gX190bXA7CiAgfQoKICBfTGlua190eXBlIF9NX2Nsb25lX25vZGUoX0xpbmtfdHlwZSBf X3gpCiAgewogICAgX0xpbmtfdHlwZSBfX3RtcCA9IF9NX2NyZWF0ZV9ub2RlKF9feC0+X01fdmFs dWVfZmllbGQpOwogICAgX190bXAtPl9NX2NvbG9yID0gX194LT5fTV9jb2xvcjsKICAgIF9fdG1w LT5fTV9sZWZ0ID0gMDsKICAgIF9fdG1wLT5fTV9yaWdodCA9IDA7CiAgICByZXR1cm4gX190bXA7 CiAgfQoKICB2b2lkIGRlc3Ryb3lfbm9kZShfTGlua190eXBlIF9fcCkKICB7CiAgICBkZXN0cm95 KCZfX3AtPl9NX3ZhbHVlX2ZpZWxkKTsKICAgIF9NX3B1dF9ub2RlKF9fcCk7CiAgfQoKcHJvdGVj dGVkOgogIHNpemVfdHlwZSBfTV9ub2RlX2NvdW50OyAgCiAgX0NvbXBhcmUgX01fa2V5X2NvbXBh cmU7CgogIF9MaW5rX3R5cGUmIF9NX3Jvb3QoKSBjb25zdCAKICAgIHsgcmV0dXJuIChfTGlua190 eXBlJikgX01faGVhZGVyLT5fTV9wYXJlbnQ7IH0KICBfTGlua190eXBlJiBfTV9sZWZ0bW9zdCgp IGNvbnN0IAogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9NX2xlZnQ7IH0K ICBfTGlua190eXBlJiBfTV9yaWdodG1vc3QoKSBjb25zdCAKICAgIHsgcmV0dXJuIChfTGlua190 eXBlJikgX01faGVhZGVyLT5fTV9yaWdodDsgfQoKICBzdGF0aWMgX0xpbmtfdHlwZSYgX1NfbGVm dChfTGlua190eXBlIF9feCkKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9sZWZ0 KTsgfQogIHN0YXRpYyBfTGlua190eXBlJiBfU19yaWdodChfTGlua190eXBlIF9feCkKICAgIHsg cmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9yaWdodCk7IH0KICBzdGF0aWMgX0xpbmtfdHlw ZSYgX1NfcGFyZW50KF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShf X3gtPl9NX3BhcmVudCk7IH0KICBzdGF0aWMgcmVmZXJlbmNlIF9TX3ZhbHVlKF9MaW5rX3R5cGUg X194KQogICAgeyByZXR1cm4gX194LT5fTV92YWx1ZV9maWVsZDsgfQogIHN0YXRpYyBjb25zdCBf S2V5JiBfU19rZXkoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiBfS2V5T2ZWYWx1ZSgpKF9T X3ZhbHVlKF9feCkpOyB9CiAgc3RhdGljIF9Db2xvcl90eXBlJiBfU19jb2xvcihfTGlua190eXBl IF9feCkKICAgIHsgcmV0dXJuIChfQ29sb3JfdHlwZSYpKF9feC0+X01fY29sb3IpOyB9CgogIHN0 YXRpYyBfTGlua190eXBlJiBfU19sZWZ0KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiAoX0xp bmtfdHlwZSYpKF9feC0+X01fbGVmdCk7IH0KICBzdGF0aWMgX0xpbmtfdHlwZSYgX1NfcmlnaHQo X0Jhc2VfcHRyIF9feCkKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9yaWdodCk7 IH0KICBzdGF0aWMgX0xpbmtfdHlwZSYgX1NfcGFyZW50KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJl dHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fcGFyZW50KTsgfQogIHN0YXRpYyByZWZlcmVuY2Ug X1NfdmFsdWUoX0Jhc2VfcHRyIF9feCkKICAgIHsgcmV0dXJuICgoX0xpbmtfdHlwZSlfX3gpLT5f TV92YWx1ZV9maWVsZDsgfQogIHN0YXRpYyBjb25zdCBfS2V5JiBfU19rZXkoX0Jhc2VfcHRyIF9f eCkKICAgIHsgcmV0dXJuIF9LZXlPZlZhbHVlKCkoX1NfdmFsdWUoX0xpbmtfdHlwZShfX3gpKSk7 fSAKICBzdGF0aWMgX0NvbG9yX3R5cGUmIF9TX2NvbG9yKF9CYXNlX3B0ciBfX3gpCiAgICB7IHJl dHVybiAoX0NvbG9yX3R5cGUmKShfTGlua190eXBlKF9feCktPl9NX2NvbG9yKTsgfQoKICBzdGF0 aWMgX0xpbmtfdHlwZSBfU19taW5pbXVtKF9MaW5rX3R5cGUgX194KSAKICAgIHsgcmV0dXJuIChf TGlua190eXBlKSAgX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19taW5pbXVtKF9feCk7IH0KCiAgc3Rh dGljIF9MaW5rX3R5cGUgX1NfbWF4aW11bShfTGlua190eXBlIF9feCkKICAgIHsgcmV0dXJuIChf TGlua190eXBlKSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX194KTsgfQoKcHVibGlj OgogIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8dmFsdWVfdHlwZSwgcmVmZXJlbmNlLCBwb2lu dGVyPiBpdGVyYXRvcjsKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPHZhbHVlX3R5cGUsIGNv bnN0X3JlZmVyZW5jZSwgY29uc3RfcG9pbnRlcj4gCiAgICAgICAgICBjb25zdF9pdGVyYXRvcjsK CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJz ZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2Vf aXRlcmF0b3I7CgoKCgoKCgogCgpwcml2YXRlOgogIGl0ZXJhdG9yIF9NX2luc2VydChfQmFzZV9w dHIgX194LCBfQmFzZV9wdHIgX195LCBjb25zdCB2YWx1ZV90eXBlJiBfX3YpOwogIF9MaW5rX3R5 cGUgX01fY29weShfTGlua190eXBlIF9feCwgX0xpbmtfdHlwZSBfX3ApOwogIHZvaWQgX01fZXJh c2UoX0xpbmtfdHlwZSBfX3gpOwoKcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKICBfUmJfdHJlZSgpCiAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpLCBfTV9ub2Rl X2NvdW50KDApLCBfTV9rZXlfY29tcGFyZSgpCiAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsg fQoKICBfUmJfdHJlZShjb25zdCBfQ29tcGFyZSYgX19jb21wKQogICAgOiBfQmFzZShhbGxvY2F0 b3JfdHlwZSgpKSwgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoX19jb21wKSAKICAg IHsgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOyB9CgogIF9SYl90cmVlKGNvbnN0IF9Db21wYXJlJiBf X2NvbXAsIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9CYXNlKF9fYSksIF9NX25v ZGVfY291bnQoMCksIF9NX2tleV9jb21wYXJlKF9fY29tcCkgCiAgICB7IF9NX2VtcHR5X2luaXRp YWxpemUoKTsgfQoKICBfUmJfdHJlZShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZW YWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIAogICAgOiBfQmFzZShfX3guZ2V0X2FsbG9jYXRv cigpKSwKICAgICAgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoX194Ll9NX2tleV9j b21wYXJlKQogIHsgCiAgICBpZiAoX194Ll9NX3Jvb3QoKSA9PSAwKQogICAgICBfTV9lbXB0eV9p bml0aWFsaXplKCk7CiAgICBlbHNlIHsKICAgICAgX1NfY29sb3IoX01faGVhZGVyKSA9IF9TX3Ji X3RyZWVfcmVkOwogICAgICBfTV9yb290KCkgPSBfTV9jb3B5KF9feC5fTV9yb290KCksIF9NX2hl YWRlcik7CiAgICAgIF9NX2xlZnRtb3N0KCkgPSBfU19taW5pbXVtKF9NX3Jvb3QoKSk7CiAgICAg IF9NX3JpZ2h0bW9zdCgpID0gX1NfbWF4aW11bShfTV9yb290KCkpOwogICAgfQogICAgX01fbm9k ZV9jb3VudCA9IF9feC5fTV9ub2RlX2NvdW50OwogIH0KICB+X1JiX3RyZWUoKSB7IGNsZWFyKCk7 IH0KICBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiAK ICBvcGVyYXRvcj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBh cmUsX0FsbG9jPiYgX194KTsKCnByaXZhdGU6CiAgdm9pZCBfTV9lbXB0eV9pbml0aWFsaXplKCkg ewogICAgX1NfY29sb3IoX01faGVhZGVyKSA9IF9TX3JiX3RyZWVfcmVkOyAgCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIF9NX3Jvb3QoKSA9IDA7CiAgICBf TV9sZWZ0bW9zdCgpID0gX01faGVhZGVyOwogICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7 CiAgfQoKcHVibGljOiAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgX0Nv bXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV9rZXlfY29tcGFyZTsgfQogIGl0ZXJh dG9yIGJlZ2luKCkgeyByZXR1cm4gX01fbGVmdG1vc3QoKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGJl Z2luKCkgY29uc3QgeyByZXR1cm4gX01fbGVmdG1vc3QoKTsgfQogIGl0ZXJhdG9yIGVuZCgpIHsg cmV0dXJuIF9NX2hlYWRlcjsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu IF9NX2hlYWRlcjsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJz ZV9pdGVyYXRvcihlbmQoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNv bnN0IHsgCiAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IAogIH0KICBy ZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkp OyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyAKICAgIHJldHVybiBj b25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOwogIH0gCiAgYm9vbCBlbXB0eSgpIGNvbnN0 IHsgcmV0dXJuIF9NX25vZGVfY291bnQgPT0gMDsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3Qg eyByZXR1cm4gX01fbm9kZV9jb3VudDsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsg cmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KCiAgdm9pZCBzd2FwKF9SYl90cmVlPF9LZXksX1ZhbHVl LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9fdCkgewogICAgIDo6c3dhcChfTV9oZWFk ZXIsIF9fdC5fTV9oZWFkZXIpOwogICAgIDo6c3dhcChfTV9ub2RlX2NvdW50LCBfX3QuX01fbm9k ZV9jb3VudCk7CiAgICAgOjpzd2FwKF9NX2tleV9jb21wYXJlLCBfX3QuX01fa2V5X2NvbXBhcmUp OwogIH0KICAgIApwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIHBh aXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0X3VuaXF1ZShjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwog IGl0ZXJhdG9yIGluc2VydF9lcXVhbChjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKICBpdGVyYXRv ciBpbnNlcnRfdW5pcXVlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9f eCk7CiAgaXRlcmF0b3IgaW5zZXJ0X2VxdWFsKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZh bHVlX3R5cGUmIF9feCk7CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9p ZCBpbnNlcnRfdW5pcXVlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCk7CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0X2Vx dWFsKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCk7CgoKCgoK CgogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbik7CiAgc2l6ZV90eXBlIGVyYXNlKGNv bnN0IGtleV90eXBlJiBfX3gpOwogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0 b3IgX19sYXN0KTsKICB2b2lkIGVyYXNlKGNvbnN0IGtleV90eXBlKiBfX2ZpcnN0LCBjb25zdCBr ZXlfdHlwZSogX19sYXN0KTsKICB2b2lkIGNsZWFyKCkgewogICAgaWYgKF9NX25vZGVfY291bnQg IT0gMCkgewogICAgICBfTV9lcmFzZShfTV9yb290KCkpOwogICAgICBfTV9sZWZ0bW9zdCgpID0g X01faGVhZGVyOwogICAgICBfTV9yb290KCkgPSAwOwogICAgICBfTV9yaWdodG1vc3QoKSA9IF9N X2hlYWRlcjsKICAgICAgX01fbm9kZV9jb3VudCA9IDA7CiAgICB9CiAgfSAgICAgIAoKcHVibGlj OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBpdGVyYXRvciBmaW5kKGNvbnN0 IGtleV90eXBlJiBfX3gpOwogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9f eCkgY29uc3Q7CiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0Owog IGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpOwogIGNvbnN0X2l0ZXJh dG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwogIGl0ZXJhdG9yIHVw cGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpOwogIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2Jv dW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwogIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+ IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpOwogIHBhaXI8Y29uc3RfaXRlcmF0b3Is IGNvbnN0X2l0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsK CnB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgYm9vbCBfX3JiX3Zl cmlmeSgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xh c3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4K aW5saW5lIGJvb2wgCm9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9m VmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LCAKICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxf S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4g X194LnNpemUoKSA9PSBfX3kuc2l6ZSgpICYmCiAgICAgICAgIGVxdWFsKF9feC5iZWdpbigpLCBf X3guZW5kKCksIF9feS5iZWdpbigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9W YWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNz IF9BbGxvYz4KaW5saW5lIGJvb2wgCm9wZXJhdG9yPChjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1 ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsIAogICAgICAgICAgY29uc3QgX1Ji X3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQp7CiAg cmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksIAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsK fQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1 ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCAK c3dhcChfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBf X3gsIAogICAgIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv Yz4mIF9feSkKewogIF9feC5zd2FwKF9feSk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj bGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJl LCBjbGFzcyBfQWxsb2M+Cl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJl LF9BbGxvYz4mIApfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs b2M+CiAgOjpvcGVyYXRvcj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUs X0NvbXBhcmUsX0FsbG9jPiYgX194KQp7CiAgaWYgKHRoaXMgIT0gJl9feCkgewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKICAgIGNsZWFyKCk7CiAgICBfTV9ub2RlX2NvdW50ID0g MDsKICAgIF9NX2tleV9jb21wYXJlID0gX194Ll9NX2tleV9jb21wYXJlOyAgICAgICAgCiAgICBp ZiAoX194Ll9NX3Jvb3QoKSA9PSAwKSB7CiAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAgIF9NX2xl ZnRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwog ICAgfQogICAgZWxzZSB7CiAgICAgIF9NX3Jvb3QoKSA9IF9NX2NvcHkoX194Ll9NX3Jvb3QoKSwg X01faGVhZGVyKTsKICAgICAgX01fbGVmdG1vc3QoKSA9IF9TX21pbmltdW0oX01fcm9vdCgpKTsK ICAgICAgX01fcmlnaHRtb3N0KCkgPSBfU19tYXhpbXVtKF9NX3Jvb3QoKSk7CiAgICAgIF9NX25v ZGVfY291bnQgPSBfX3guX01fbm9kZV9jb3VudDsKICAgIH0KICB9CiAgcmV0dXJuICp0aGlzOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwg CiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJl ZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpfUmJf dHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpfTV9pbnNl cnQoX0Jhc2VfcHRyIF9feF8sIF9CYXNlX3B0ciBfX3lfLCBjb25zdCBfVmFsdWUmIF9fdikKewog IF9MaW5rX3R5cGUgX194ID0gKF9MaW5rX3R5cGUpIF9feF87CiAgX0xpbmtfdHlwZSBfX3kgPSAo X0xpbmtfdHlwZSkgX195XzsKICBfTGlua190eXBlIF9fejsKCiAgaWYgKF9feSA9PSBfTV9oZWFk ZXIgfHwgX194ICE9IDAgfHwgCiAgICAgIF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192 KSwgX1Nfa2V5KF9feSkpKSB7CiAgICBfX3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwogICAgX1Nf bGVmdChfX3kpID0gX196OyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCiAgICBpZiAoX195ID09IF9NX2hlYWRlcikgewogICAgICBfTV9yb290 KCkgPSBfX3o7CiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX196OwogICAgfQogICAgZWxzZSBpZiAo X195ID09IF9NX2xlZnRtb3N0KCkpCiAgICAgIF9NX2xlZnRtb3N0KCkgPSBfX3o7ICAgIAogIH0K ICBlbHNlIHsKICAgIF9feiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAgICBfU19yaWdodChfX3kp ID0gX196OwogICAgaWYgKF9feSA9PSBfTV9yaWdodG1vc3QoKSkKICAgICAgX01fcmlnaHRtb3N0 KCkgPSBfX3o7ICAgCiAgfQogIF9TX3BhcmVudChfX3opID0gX195OwogIF9TX2xlZnQoX196KSA9 IDA7CiAgX1NfcmlnaHQoX196KSA9IDA7CiAgX1JiX3RyZWVfcmViYWxhbmNlKF9feiwgX01faGVh ZGVyLT5fTV9wYXJlbnQpOwogICsrX01fbm9kZV9jb3VudDsKICByZXR1cm4gaXRlcmF0b3IoX196 KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFs dWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1Ji X3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IK X1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6aW5z ZXJ0X2VxdWFsKGNvbnN0IF9WYWx1ZSYgX192KQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFk ZXI7CiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CiAgd2hpbGUgKF9feCAhPSAwKSB7CiAg ICBfX3kgPSBfX3g7CiAgICBfX3ggPSBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiks IF9TX2tleShfX3gpKSA/IAogICAgICAgICAgICBfU19sZWZ0KF9feCkgOiBfU19yaWdodChfX3gp OwogIH0KICByZXR1cm4gX01faW5zZXJ0KF9feCwgX195LCBfX3YpOwp9CgoKdGVtcGxhdGUgPGNs YXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xh c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9W YWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciwgCiAgICAgYm9vbD4K X1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6aW5z ZXJ0X3VuaXF1ZShjb25zdCBfVmFsdWUmIF9fdikKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVh ZGVyOwogIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwogIGJvb2wgX19jb21wID0gdHJ1ZTsK ICB3aGlsZSAoX194ICE9IDApIHsKICAgIF9feSA9IF9feDsKICAgIF9fY29tcCA9IF9NX2tleV9j b21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feCkpOwogICAgX194ID0gX19jb21w ID8gX1NfbGVmdChfX3gpIDogX1NfcmlnaHQoX194KTsKICB9CiAgaXRlcmF0b3IgX19qID0gaXRl cmF0b3IoX195KTsgICAKICBpZiAoX19jb21wKQogICAgaWYgKF9faiA9PSBiZWdpbigpKSAgICAg CiAgICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLGJvb2w+KF9NX2luc2VydChfX3gsIF9feSwgX192 KSwgdHJ1ZSk7CiAgICBlbHNlCiAgICAgIC0tX19qOwogIGlmIChfTV9rZXlfY29tcGFyZShfU19r ZXkoX19qLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgcmV0dXJuIHBhaXI8aXRl cmF0b3IsYm9vbD4oX01faW5zZXJ0KF9feCwgX195LCBfX3YpLCB0cnVlKTsKICByZXR1cm4gcGFp cjxpdGVyYXRvcixib29sPihfX2osIGZhbHNlKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj bGFzcyBfVmFsLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwg Y2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwg X0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJhdG9yIApfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZW YWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4KICA6Omluc2VydF91bmlxdWUoaXRlcmF0b3IgX19wb3Np dGlvbiwgY29uc3QgX1ZhbCYgX192KQp7CiAgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9o ZWFkZXItPl9NX2xlZnQpIHsgIAogICAgaWYgKHNpemUoKSA+IDAgJiYgCiAgICAgICAgX01fa2V5 X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSkp CiAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9N X25vZGUsIF9fdik7CiAgICAgCiAgICBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9f dikuZmlyc3Q7CiAgfSBlbHNlIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyKSB7 ICAKICAgIGlmIChfTV9rZXlfY29tcGFyZShfU19rZXkoX01fcmlnaHRtb3N0KCkpLCBfS2V5T2ZW YWx1ZSgpKF9fdikpKQogICAgICByZXR1cm4gX01faW5zZXJ0KDAsIF9NX3JpZ2h0bW9zdCgpLCBf X3YpOwogICAgZWxzZQogICAgICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OwogIH0g ZWxzZSB7CiAgICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9zaXRpb247CiAgICAtLV9fYmVmb3Jl OwogICAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tleShfX2JlZm9yZS5fTV9ub2RlKSwgX0tleU9m VmFsdWUoKShfX3YpKSAKICAgICAgICAmJiBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9f diksIF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpKSkgewogICAgICBpZiAoX1NfcmlnaHQoX19i ZWZvcmUuX01fbm9kZSkgPT0gMCkKICAgICAgICByZXR1cm4gX01faW5zZXJ0KDAsIF9fYmVmb3Jl Ll9NX25vZGUsIF9fdik7IAogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bv c2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKICAgICAKICAgIH0gZWxz ZQogICAgICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OwogIH0KfQoKdGVtcGxhdGUg PGNsYXNzIF9LZXksIGNsYXNzIF9WYWwsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNs YXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxf S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciAKX1JiX3RyZWU8X0tleSxfVmFs LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6Omluc2VydF9lcXVhbChpdGVyYXRvciBf X3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBfX3YpCnsKICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09 IF9NX2hlYWRlci0+X01fbGVmdCkgeyAgCiAgICBpZiAoc2l6ZSgpID4gMCAmJiAKICAgICAgICBf TV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3Bvc2l0aW9uLl9NX25v ZGUpKSkKICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRp b24uX01fbm9kZSwgX192KTsKICAgICAKICAgIGVsc2UKICAgICAgcmV0dXJuIGluc2VydF9lcXVh bChfX3YpOwogIH0gZWxzZSBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlcikgeyAK ICAgIGlmICghX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX01fcmln aHRtb3N0KCkpKSkKICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfTV9yaWdodG1vc3QoKSwgX192 KTsKICAgIGVsc2UKICAgICAgcmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwogIH0gZWxzZSB7CiAg ICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9zaXRpb247CiAgICAtLV9fYmVmb3JlOwogICAgaWYg KCFfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX2JlZm9yZS5fTV9u b2RlKSkKICAgICAgICAmJiAhX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9k ZSksIF9LZXlPZlZhbHVlKCkoX192KSkpIHsKICAgICAgaWYgKF9TX3JpZ2h0KF9fYmVmb3JlLl9N X25vZGUpID09IDApCiAgICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfX2JlZm9yZS5fTV9ub2Rl LCBfX3YpOyAKICAgICAgZWxzZQogICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5f TV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CiAgICAgCiAgICB9IGVsc2UKICAgICAg cmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwg Y2xhc3MgX1ZhbCwgY2xhc3MgX0tvViwgY2xhc3MgX0NtcCwgY2xhc3MgX0FsbG9jPgogIHRlbXBs YXRlPGNsYXNzIF9JST4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tvVixfQ21wLF9BbGxvYz4K ICA6Omluc2VydF9lcXVhbChfSUkgX19maXJzdCwgX0lJIF9fbGFzdCkKewogIGZvciAoIDsgX19m aXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGluc2VydF9lcXVhbCgqX19maXJzdCk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBjbGFzcyBfS29WLCBjbGFzcyBfQ21w LCBjbGFzcyBfQWxsb2M+IAogIHRlbXBsYXRlPGNsYXNzIF9JST4Kdm9pZCBfUmJfdHJlZTxfS2V5 LF9WYWwsX0tvVixfQ21wLF9BbGxvYz4KICA6Omluc2VydF91bmlxdWUoX0lJIF9fZmlyc3QsIF9J SSBfX2xhc3QpIHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBp bnNlcnRfdW5pcXVlKCpfX2ZpcnN0KTsKfQoKIyAxMDIxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYt bWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3RyZWUu aCIgMwoKICAgICAgICAgCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNz IF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cmlu bGluZSB2b2lkIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv Yz4KICA6OmVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCnsKICBfTGlua190eXBlIF9feSA9IAog ICAgKF9MaW5rX3R5cGUpIF9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UoX19wb3NpdGlvbi5f TV9ub2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01f aGVhZGVyLT5fTV9wYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfTV9oZWFkZXItPl9NX2xlZnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9NX3JpZ2h0KTsKICBkZXN0cm95X25vZGUoX195 KTsKICAtLV9NX25vZGVfY291bnQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFs dWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf QWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJl LF9BbGxvYz46OnNpemVfdHlwZSAKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv bXBhcmUsX0FsbG9jPjo6ZXJhc2UoY29uc3QgX0tleSYgX194KQp7CiAgcGFpcjxpdGVyYXRvcixp dGVyYXRvcj4gX19wID0gZXF1YWxfcmFuZ2UoX194KTsKICBzaXplX3R5cGUgX19uID0gMDsKICBk aXN0YW5jZShfX3AuZmlyc3QsIF9fcC5zZWNvbmQsIF9fbik7CiAgZXJhc2UoX19wLmZpcnN0LCBf X3Auc2Vjb25kKTsKICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg X1ZhbCwgY2xhc3MgX0tvViwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUg X1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46Ol9MaW5rX3R5cGUg Cl9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9Db21wYXJlLF9BbGxvYz4KICA6Ol9NX2NvcHkoX0xp bmtfdHlwZSBfX3gsIF9MaW5rX3R5cGUgX19wKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAK ICBfTGlua190eXBlIF9fdG9wID0gX01fY2xvbmVfbm9kZShfX3gpOwogIF9fdG9wLT5fTV9wYXJl bnQgPSBfX3A7CiAKICB0cnkgIHsKICAgIGlmIChfX3gtPl9NX3JpZ2h0KQogICAgICBfX3RvcC0+ X01fcmlnaHQgPSBfTV9jb3B5KF9TX3JpZ2h0KF9feCksIF9fdG9wKTsKICAgIF9fcCA9IF9fdG9w OwogICAgX194ID0gX1NfbGVmdChfX3gpOwoKICAgIHdoaWxlIChfX3ggIT0gMCkgewogICAgICBf TGlua190eXBlIF9feSA9IF9NX2Nsb25lX25vZGUoX194KTsKICAgICAgX19wLT5fTV9sZWZ0ID0g X195OwogICAgICBfX3ktPl9NX3BhcmVudCA9IF9fcDsKICAgICAgaWYgKF9feC0+X01fcmlnaHQp CiAgICAgICAgX195LT5fTV9yaWdodCA9IF9NX2NvcHkoX1NfcmlnaHQoX194KSwgX195KTsKICAg ICAgX19wID0gX195OwogICAgICBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICB9CiAgfQogIGNhdGNo KC4uLikgeyAgX01fZXJhc2UoX190b3ApIDsgdGhyb3c7IH0gOwoKICByZXR1cm4gX190b3A7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAK ICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnZvaWQgX1JiX3RyZWU8X0tl eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6X01fZXJhc2UoX0xpbmtf dHlwZSBfX3gpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgd2hpbGUgKF9f eCAhPSAwKSB7CiAgICBfTV9lcmFzZShfU19yaWdodChfX3gpKTsKICAgIF9MaW5rX3R5cGUgX195 ID0gX1NfbGVmdChfX3gpOwogICAgZGVzdHJveV9ub2RlKF9feCk7CiAgICBfX3ggPSBfX3k7CiAg fQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1 ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp2b2lkIF9SYl90cmVl PF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OmVyYXNlKGl0ZXJh dG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKewogIGlmIChfX2ZpcnN0ID09IGJlZ2luKCkg JiYgX19sYXN0ID09IGVuZCgpKQogICAgY2xlYXIoKTsKICBlbHNlCiAgICB3aGlsZSAoX19maXJz dCAhPSBfX2xhc3QpIGVyYXNlKF9fZmlyc3QrKyk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj bGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJl LCBjbGFzcyBfQWxsb2M+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv bXBhcmUsX0FsbG9jPgogIDo6ZXJhc2UoY29uc3QgX0tleSogX19maXJzdCwgY29uc3QgX0tleSog X19sYXN0KSAKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgZXJhc2UoKl9fZmlyc3QrKyk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVl LCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90 cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yIApf UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpmaW5kKGNv bnN0IF9LZXkmIF9faykKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOyAgICAgICAKICBf TGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsgICAgICAgCgogIHdoaWxlIChfX3ggIT0gMCkgCiAg ICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gs IF9feCA9IF9TX2xlZnQoX194KTsKICAgIGVsc2UKICAgICAgX194ID0gX1NfcmlnaHQoX194KTsK CiAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsgICAKICByZXR1cm4gKF9faiA9PSBlbmQo KSB8fCBfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX2ouX01fbm9kZSkpKSA/IAogICAgIGVu ZCgpIDogX19qOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBf S2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBl bmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpj b25zdF9pdGVyYXRvciAKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUs X0FsbG9jPjo6ZmluZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICBfTGlua190eXBlIF9feSA9 IF9NX2hlYWRlcjsgIAogIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOyAgCgogIHdoaWxlIChf X3ggIT0gMCkgewogICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAg ICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBlbHNlCiAgICAgIF9feCA9IF9T X3JpZ2h0KF9feCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIF9faiA9IGNvbnN0X2l0ZXJhdG9yKF9f eSk7ICAgCiAgcmV0dXJuIChfX2ogPT0gZW5kKCkgfHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19r ZXkoX19qLl9NX25vZGUpKSkgPwogICAgZW5kKCkgOiBfX2o7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf S2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9D b21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlP ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OnNpemVfdHlwZSAKX1JiX3RyZWU8X0tleSxfVmFsdWUs X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6Y291bnQoY29uc3QgX0tleSYgX19rKSBj b25zdAp7CiAgcGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+IF9fcCA9IGVxdWFs X3JhbmdlKF9fayk7CiAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgZGlzdGFuY2UoX19wLmZpcnN0LCBf X3Auc2Vjb25kLCBfX24pOwogIHJldHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj bGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJl LCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVl LF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yIApfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZW YWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpsb3dlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spCnsK ICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsgIAogIF9MaW5rX3R5cGUgX194ID0gX01fcm9v dCgpOyAgCgogIHdoaWxlIChfX3ggIT0gMCkgCiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tl eShfX3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgIGVs c2UKICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgcmV0dXJuIGl0ZXJhdG9yKF9feSk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAK ICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVl PF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9y IApfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjps b3dlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICBfTGlua190eXBlIF9feSA9IF9N X2hlYWRlcjsgIAogIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOyAgCgogIHdoaWxlIChfX3gg IT0gMCkgCiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICBf X3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgIGVsc2UKICAgICAgX194ID0gX1Nfcmln aHQoX194KTsKCiAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNz IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9L ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yIApfUmJfdHJlZTxfS2V5LF9WYWx1 ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjp1cHBlcl9ib3VuZChjb25zdCBfS2V5 JiBfX2spCnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsgIAogIF9MaW5rX3R5cGUgX194 ID0gX01fcm9vdCgpOyAgCgogICB3aGlsZSAoX194ICE9IDApIAogICAgIGlmIChfTV9rZXlfY29t cGFyZShfX2ssIF9TX2tleShfX3gpKSkKICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChf X3gpOwogICAgIGVsc2UKICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogICByZXR1cm4gaXRl cmF0b3IoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3Mg X0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlw ZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6 Y29uc3RfaXRlcmF0b3IgCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJl LF9BbGxvYz4KICA6OnVwcGVyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykgY29uc3QKewogIF9MaW5r X3R5cGUgX195ID0gX01faGVhZGVyOyAgCiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7ICAK CiAgIHdoaWxlIChfX3ggIT0gMCkgCiAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5 KF9feCkpKQogICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgZWxzZQog ICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgIHJldHVybiBjb25zdF9pdGVyYXRvcihfX3kp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1 ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgCnBhaXI8 dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j Pjo6aXRlcmF0b3IsCiAgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFs dWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3I+Cl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlP ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OmVxdWFsX3JhbmdlKGNvbnN0IF9LZXkmIF9faykK ewogIHJldHVybiBwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4obG93ZXJfYm91bmQoX19rKSwgdXBw ZXJfYm91bmQoX19rKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNs YXNzIF9Lb1YsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSAKcGFpcjx0eXBl bmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+Ojpjb25z dF9pdGVyYXRvciwKICAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9Lb1YsIF9D b21wYXJlLCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcj4KX1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBf S29WLCBfQ29tcGFyZSwgX0FsbG9jPgogIDo6ZXF1YWxfcmFuZ2UoY29uc3QgX0tleSYgX19rKSBj b25zdAp7CiAgcmV0dXJuIHBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+KGxvd2Vy X2JvdW5kKF9fayksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVwcGVyX2JvdW5kKF9faykpOwp9CgppbmxpbmUgaW50IApfX2JsYWNrX2NvdW50KF9SYl90cmVl X25vZGVfYmFzZSogX19ub2RlLCBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fcm9vdCkKewogIGlmIChf X25vZGUgPT0gMCkKICAgIHJldHVybiAwOwogIGVsc2UgewogICAgaW50IF9fYmMgPSBfX25vZGUt Pl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2sgPyAxIDogMDsKICAgIGlmIChfX25vZGUgPT0g X19yb290KQogICAgICByZXR1cm4gX19iYzsKICAgIGVsc2UKICAgICAgcmV0dXJuIF9fYmMgKyBf X2JsYWNrX2NvdW50KF9fbm9kZS0+X01fcGFyZW50LCBfX3Jvb3QpOwogIH0KfQoKdGVtcGxhdGUg PGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAg Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KYm9vbCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpfX3JiX3ZlcmlmeSgpIGNvbnN0CnsKICBpZiAo X01fbm9kZV9jb3VudCA9PSAwIHx8IGJlZ2luKCkgPT0gZW5kKCkpCiAgICByZXR1cm4gX01fbm9k ZV9jb3VudCA9PSAwICYmIGJlZ2luKCkgPT0gZW5kKCkgJiYKICAgICAgX01faGVhZGVyLT5fTV9s ZWZ0ID09IF9NX2hlYWRlciAmJiBfTV9oZWFkZXItPl9NX3JpZ2h0ID09IF9NX2hlYWRlcjsKICAK ICBpbnQgX19sZW4gPSBfX2JsYWNrX2NvdW50KF9NX2xlZnRtb3N0KCksIF9NX3Jvb3QoKSk7CiAg Zm9yIChjb25zdF9pdGVyYXRvciBfX2l0ID0gYmVnaW4oKTsgX19pdCAhPSBlbmQoKTsgKytfX2l0 KSB7CiAgICBfTGlua190eXBlIF9feCA9IChfTGlua190eXBlKSBfX2l0Ll9NX25vZGU7CiAgICBf TGlua190eXBlIF9fTCA9IF9TX2xlZnQoX194KTsKICAgIF9MaW5rX3R5cGUgX19SID0gX1Nfcmln aHQoX194KTsKCiAgICBpZiAoX194LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkKICAgICAg aWYgKChfX0wgJiYgX19MLT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkgfHwKICAgICAgICAg IChfX1IgJiYgX19SLT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkpCiAgICAgICAgcmV0dXJu IGZhbHNlOwoKICAgIGlmIChfX0wgJiYgX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9TX2tl eShfX0wpKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKF9fUiAmJiBfTV9rZXlfY29tcGFy ZShfU19rZXkoX19SKSwgX1Nfa2V5KF9feCkpKQogICAgICByZXR1cm4gZmFsc2U7CgogICAgaWYg KCFfX0wgJiYgIV9fUiAmJiBfX2JsYWNrX2NvdW50KF9feCwgX01fcm9vdCgpKSAhPSBfX2xlbikK ICAgICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgaWYgKF9NX2xlZnRtb3N0KCkgIT0gX1JiX3RyZWVf bm9kZV9iYXNlOjpfU19taW5pbXVtKF9NX3Jvb3QoKSkpCiAgICByZXR1cm4gZmFsc2U7CiAgaWYg KF9NX3JpZ2h0bW9zdCgpICE9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11bShfTV9yb290 KCkpKQogICAgcmV0dXJuIGZhbHNlOwoKICByZXR1cm4gdHJ1ZTsKfQoKIAogCgp0ZW1wbGF0ZSA8 Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgY2xhc3MgX0NvbXBh cmUsCiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8IF9WYWx1ZSA+ICA+CnN0cnVj dCByYl90cmVlIDogcHVibGljIF9SYl90cmVlPF9LZXksIF9WYWx1ZSwgX0tleU9mVmFsdWUsIF9D b21wYXJlLCBfQWxsb2M+CnsKICB0eXBlZGVmIF9SYl90cmVlPF9LZXksIF9WYWx1ZSwgX0tleU9m VmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+IF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6 OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICByYl90cmVlKGNvbnN0IF9Db21wYXJl JiBfX2NvbXAgPSBfQ29tcGFyZSgpLAogICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9f YSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fY29tcCwgX19hKSB7fQogIAogIH5y Yl90cmVlKCkge30KfTsKCgoKCgogIAoKCgogCiAKIAojIDMxICIvdXNyL2xpYi9nY2MtbGliL2k1 ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc2V0IiAy IDMKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4v Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfc2V0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29t cGFyZSA9IGxlc3M8X0tleT4sCiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8IF9L ZXkgPiAgPgoKCgoKY2xhc3Mgc2V0IHsKcHVibGljOgogICAKCiAgdHlwZWRlZiBfS2V5ICAgICBr ZXlfdHlwZTsKICB0eXBlZGVmIF9LZXkgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfQ29tcGFy ZSBrZXlfY29tcGFyZTsKICB0eXBlZGVmIF9Db21wYXJlIHZhbHVlX2NvbXBhcmU7CnByaXZhdGU6 CiAgdHlwZWRlZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwgCiAgICAgICAgICAgICAg ICAgIF9JZGVudGl0eTx2YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90eXBl OwogIF9SZXBfdHlwZSBfTV90OyAgIApwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5 cGU6OmNvbnN0X3BvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6 Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl Ojpjb25zdF9yZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl Ojpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1Jl cF90eXBlOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBf dHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBf UmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBl ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZl cnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5cGUgc2l6 ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlm ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjphbGxvY2F0b3JfdHlw ZSBhbGxvY2F0b3JfdHlwZTsKCiAgIAoKICBzZXQoKSA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2Nh dG9yX3R5cGUoKSkge30KICBleHBsaWNpdCBzZXQoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAg ICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkp CiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl cmF0b3I+CiAgc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz dCkKICAgIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV90Lmlu c2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlcmF0b3I+CiAgc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCwgY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUm IF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsgX01fdC5p bnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KIyAxMDcgIi91c3IvbGliL2djYy1saWIv aTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxf c2V0LmgiIDMKCgogIHNldChjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIDog X01fdChfX3guX01fdCkge30KICBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBvcGVyYXRvcj0o Y29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gpCiAgeyAKICAgIF9NX3QgPSBf X3guX01fdDsgCiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICAgCgogIGtleV9jb21wYXJlIGtleV9j b21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgdmFsdWVfY29tcGFyZSB2 YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgYWxsb2NhdG9y X3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigp OyB9CgogIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CiAg aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQogIHJldmVyc2VfaXRl cmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfSAKICByZXZlcnNl X2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LnJlbmQoKTsgfQogIGJvb2wgZW1w dHkoKSBjb25zdCB7IHJldHVybiBfTV90LmVtcHR5KCk7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNv bnN0IHsgcmV0dXJuIF9NX3Quc2l6ZSgpOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3Qg eyByZXR1cm4gX01fdC5tYXhfc2l6ZSgpOyB9CiAgdm9pZCBzd2FwKHNldDxfS2V5LF9Db21wYXJl LF9BbGxvYz4mIF9feCkgeyBfTV90LnN3YXAoX194Ll9NX3QpOyB9CgogICAKICBwYWlyPGl0ZXJh dG9yLGJvb2w+IGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsgCiAgICBwYWlyPHR5cGVu YW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IsIGJvb2w+IF9fcCA9IF9NX3QuaW5zZXJ0X3VuaXF1ZShf X3gpOyAKICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLCBib29sPihfX3AuZmlyc3QsIF9fcC5zZWNv bmQpOwogIH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFs dWVfdHlwZSYgX194KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3Ig X1JlcF9pdGVyYXRvcjsKICAgIHJldHVybiBfTV90Lmluc2VydF91bmlxdWUoKF9SZXBfaXRlcmF0 b3ImKV9fcG9zaXRpb24sIF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0 b3I+CiAgdm9pZCBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig X19sYXN0KSB7CiAgICBfTV90Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsKICB9CgoK CgoKCgoKICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsgCiAgICB0eXBlZGVmIHR5 cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgX1JlcF9pdGVyYXRvcjsKICAgIF9NX3QuZXJhc2Uo KF9SZXBfaXRlcmF0b3ImKV9fcG9zaXRpb24pOyAKICB9CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0 IGtleV90eXBlJiBfX3gpIHsgCiAgICByZXR1cm4gX01fdC5lcmFzZShfX3gpOyAKICB9CiAgdm9p ZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsgCiAgICB0eXBlZGVm IHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgX1JlcF9pdGVyYXRvcjsKICAgIF9NX3QuZXJh c2UoKF9SZXBfaXRlcmF0b3ImKV9fZmlyc3QsIChfUmVwX2l0ZXJhdG9yJilfX2xhc3QpOyAKICB9 CiAgdm9pZCBjbGVhcigpIHsgX01fdC5jbGVhcigpOyB9CgogICAKCiAgaXRlcmF0b3IgZmluZChj b25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQogIHNp emVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmNv dW50KF9feCk7IH0KICBpdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBj b25zdCB7CiAgICByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOwogIH0KICBpdGVyYXRvciB1 cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC51 cHBlcl9ib3VuZChfX3gpOyAKICB9CiAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFu Z2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFu Z2UoX194KTsKICB9CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSA8PiAgKGNvbnN0IHNldCYsIGNv bnN0IHNldCYpOwogIGZyaWVuZCBib29sIG9wZXJhdG9yPCA8PiAgKGNvbnN0IHNldCYsIGNvbnN0 IHNldCYpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf QWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0Fs bG9jPiYgX194LCAKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXQ8X0tleSxfQ29tcGFy ZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v bCBvcGVyYXRvcjwoY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LCAKICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewog IHJldHVybiBfX3guX01fdCA8IF9feS5fTV90Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj bGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKHNldDxfS2V5LF9D b21wYXJlLF9BbGxvYz4mIF9feCwgCiAgICAgICAgICAgICAgICAgc2V0PF9LZXksX0NvbXBhcmUs X0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195KTsKfQoKCgoKCgoKCiAKCgoKIAogCiAKIyAz MyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8u Li9pbmNsdWRlL2crKy0zL3NldCIgMiAzCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5k cmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfbXVsdGlzZXQu aCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKdGVtcGxh dGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlID0gbGVzczxfS2V5PiwgCiAgICAgICAgICBj bGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8IF9LZXkgPiAgPgoKCgoKY2xhc3MgbXVsdGlzZXQgewpw dWJsaWM6CiAgIAoKICB0eXBlZGVmIF9LZXkgICAgIGtleV90eXBlOwogIHR5cGVkZWYgX0tleSAg ICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21wYXJlOwogIHR5cGVkZWYg X0NvbXBhcmUgdmFsdWVfY29tcGFyZTsKcHJpdmF0ZToKICB0eXBlZGVmIF9SYl90cmVlPGtleV90 eXBlLCB2YWx1ZV90eXBlLCAKICAgICAgICAgICAgICAgICAgX0lkZW50aXR5PHZhbHVlX3R5cGU+ LCBrZXlfY29tcGFyZSwgX0FsbG9jPiBfUmVwX3R5cGU7CiAgX1JlcF90eXBlIF9NX3Q7ICAgCnB1 YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBwb2ludGVy OwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50 ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSByZWZlcmVu Y2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9y ZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0 ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciBjb25z dF9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9p dGVyYXRvciByZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpj b25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0 eXBlbmFtZSBfUmVwX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFt ZSBfUmVwX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0 eXBlbmFtZSBfUmVwX3R5cGU6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICAgCgog IG11bHRpc2V0KCkgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CiAgZXhw bGljaXQgbXVsdGlzZXQoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgICAgICAgICAgICAg ICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01f dChfX2NvbXAsIF9fYSkge30KCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAg bXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQog ICAgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX3QuaW5zZXJ0 X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh dG9yPgogIG11bHRpc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCwKICAgICAgICAgICBjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAgIGNvbnN0 IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29t cCwgX19hKSB7IF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7IH0KCiMgMTEzICIv dXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2lu Y2x1ZGUvZysrLTMvc3RsX211bHRpc2V0LmgiIDMKCgogIG11bHRpc2V0KGNvbnN0IG11bHRpc2V0 PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3QoX194Ll9NX3QpIHt9CiAgbXVsdGlz ZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JgogIG9wZXJhdG9yPShjb25zdCBtdWx0aXNldDxfS2V5 LF9Db21wYXJlLF9BbGxvYz4mIF9feCkgewogICAgX01fdCA9IF9feC5fTV90OyAKICAgIHJldHVy biAqdGhpczsKICB9CgogICAKCiAga2V5X2NvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVy biBfTV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAoKSBjb25zdCB7 IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9y KCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0KCiAgaXRlcmF0b3IgYmVn aW4oKSBjb25zdCB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KICBpdGVyYXRvciBlbmQoKSBjb25z dCB7IHJldHVybiBfTV90LmVuZCgpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25z dCB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9IAogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNv bnN0IHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJu IF9NX3QuZW1wdHkoKTsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5z aXplKCk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9z aXplKCk7IH0KICB2b2lkIHN3YXAobXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gp IHsgX01fdC5zd2FwKF9feC5fTV90KTsgfQoKICAgCiAgaXRlcmF0b3IgaW5zZXJ0KGNvbnN0IHZh bHVlX3R5cGUmIF9feCkgeyAKICAgIHJldHVybiBfTV90Lmluc2VydF9lcXVhbChfX3gpOwogIH0K ICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYg X194KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgX1JlcF9pdGVy YXRvcjsKICAgIHJldHVybiBfTV90Lmluc2VydF9lcXVhbCgoX1JlcF9pdGVyYXRvciYpX19wb3Np dGlvbiwgX194KTsKICB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9p ZCBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7 CiAgICBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOwogIH0KCgoKCgoKCgogIHZv aWQgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgeyAKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1Jl cF90eXBlOjppdGVyYXRvciBfUmVwX2l0ZXJhdG9yOwogICAgX01fdC5lcmFzZSgoX1JlcF9pdGVy YXRvciYpX19wb3NpdGlvbik7IAogIH0KICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUm IF9feCkgeyAKICAgIHJldHVybiBfTV90LmVyYXNlKF9feCk7IAogIH0KICB2b2lkIGVyYXNlKGl0 ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgeyAKICAgIHR5cGVkZWYgdHlwZW5hbWUg X1JlcF90eXBlOjppdGVyYXRvciBfUmVwX2l0ZXJhdG9yOwogICAgX01fdC5lcmFzZSgoX1JlcF9p dGVyYXRvciYpX19maXJzdCwgKF9SZXBfaXRlcmF0b3ImKV9fbGFzdCk7IAogIH0KICB2b2lkIGNs ZWFyKCkgeyBfTV90LmNsZWFyKCk7IH0KCiAgIAoKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90 eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgc2l6ZV90eXBlIGNv dW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuY291bnQoX194KTsg fQogIGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAg IHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7CiAgfQogIGl0ZXJhdG9yIHVwcGVyX2JvdW5k KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LnVwcGVyX2JvdW5k KF9feCk7IAogIH0KICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBr ZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOwog IH0KICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IDw+ICAoY29uc3QgbXVsdGlzZXQmLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpc2V0Jik7 CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8IDw+ICAoY29uc3QgbXVsdGlzZXQmLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQmKTsKfTsK CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxp bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYg X194LCAKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJl LF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsKfQoKdGVtcGxh dGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s IG9wZXJhdG9yPChjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwgCiAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4m IF9feSkgewogIHJldHVybiBfX3guX01fdCA8IF9feS5fTV90Owp9CgoKCnRlbXBsYXRlIDxjbGFz cyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKG11 bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LCAKICAgICAgICAgICAgICAgICBtdWx0 aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIF9feC5zd2FwKF9feSk7Cn0KCgoK CgoKCgogCgoKCiAKIAogCiMgMzQgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51 eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zZXQiIDIgMwoKCgoKIAogCiAKIyAx OSAiTW92ZURCLmgiIDIKCgojIDEgInN0YXRlLmgiIDEKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8u Li8uLi8uLi9pbmNsdWRlL2crKy0zL2lvbWFuaXAuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCgoKZXh0ZXJuICJDKysiIHsKIAogCiAKCiAKIAog CiAKdGVtcGxhdGU8Y2xhc3MgVFA+IGNsYXNzIHNtYW5pcDsgIAoKdGVtcGxhdGU8Y2xhc3MgVFA+ IGNsYXNzIHNhcHAgewogICAgaW9zJiAoKl9mKShpb3MmLCBUUCk7CnB1YmxpYzogCiAgICBzYXBw KGlvcyYgKCpmKShpb3MmLCBUUCkpIDogX2YoZikge30KICAgICAKICAgIHNtYW5pcDxUUD4gb3Bl cmF0b3IoKShUUCBhKSAKICAgICAgeyByZXR1cm4gc21hbmlwPFRQPihfZiwgYSk7IH0KfTsKCnRl bXBsYXRlPGNsYXNzIFRQPgppbmxpbmUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiBpLCBj b25zdCBzbWFuaXA8VFA+JiBtKTsKdGVtcGxhdGU8Y2xhc3MgVFA+CmlubGluZSBvc3RyZWFtJiBv cGVyYXRvcjw8KG9zdHJlYW0mIG8sIGNvbnN0IHNtYW5pcDxUUD4mIG0pOwoKdGVtcGxhdGUgPGNs YXNzIFRQPiBjbGFzcyBzbWFuaXAgewogICAgaW9zJiAoKl9mKShpb3MmLCBUUCk7CiAgICBUUCBf YTsKcHVibGljOgogICAgc21hbmlwKGlvcyYgKCpmKShpb3MmLCBUUCksIFRQIGEpIDogX2YoZiks IF9hKGEpIHt9CiAgICAgCiAgICBmcmllbmQgCiAgICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4gPD4o aXN0cmVhbSYgaSwgY29uc3Qgc21hbmlwPFRQPiYgbSk7CiAgICBmcmllbmQKICAgICAgb3N0cmVh bSYgb3BlcmF0b3I8PCA8Pihvc3RyZWFtJiBvLCBjb25zdCBzbWFuaXA8VFA+JiBtKTsKfTsKCgpf X2V4dGVuc2lvbl9fIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBzbWFuaXA8aW50PjsKX19leHRlbnNp b25fXyBleHRlcm4gdGVtcGxhdGUgY2xhc3Mgc21hbmlwPGlvczo6Zm10ZmxhZ3M+OwoKCnRlbXBs YXRlPGNsYXNzIFRQPgppbmxpbmUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiBpLCBjb25z dCBzbWFuaXA8VFA+JiBtKQp7ICgqbS5fZikoaSwgbS5fYSk7IHJldHVybiBpOyB9Cgp0ZW1wbGF0 ZTxjbGFzcyBUUD4KaW5saW5lIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgbywgY29uc3Qg c21hbmlwPFRQPiYgbSkKeyAoKm0uX2YpKG8sIG0uX2EpOyByZXR1cm4gbzt9CgoKX19leHRlbnNp b25fXyBleHRlcm4gCnRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNvbnN0 IHNtYW5pcDxpbnQ+Jik7Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIAp0ZW1wbGF0ZSBpc3RyZWFtJiBv cGVyYXRvcj4+KGlzdHJlYW0mLCBjb25zdCBzbWFuaXA8aW9zOjpmbXRmbGFncz4mKTsKX19leHRl bnNpb25fXyBleHRlcm4gCnRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNv bnN0IHNtYW5pcDxpbnQ+Jik7Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIAp0ZW1wbGF0ZSBvc3RyZWFt JiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCBzbWFuaXA8aW9zOjpmbXRmbGFncz4mKTsKCgog CiAKIAogCnRlbXBsYXRlPGNsYXNzIFRQPiBjbGFzcyBpbWFuaXA7IAoKdGVtcGxhdGU8Y2xhc3Mg VFA+IGNsYXNzIGlhcHAgewogICAgaXN0cmVhbSYgKCpfZikoaXN0cmVhbSYsIFRQKTsKcHVibGlj OiAKICAgIGlhcHAoaXN0cmVhbSYgKCpmKShpc3RyZWFtJixUUCkpIDogX2YoZikge30KICAgICAK ICAgIGltYW5pcDxUUD4gb3BlcmF0b3IoKShUUCBhKQogICAgICAgeyByZXR1cm4gaW1hbmlwPFRQ PihfZiwgYSk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBUUD4KaW5saW5lIGlzdHJlYW0mIG9wZXJh dG9yPj4oaXN0cmVhbSYsIGNvbnN0IGltYW5pcDxUUD4mKTsKCnRlbXBsYXRlIDxjbGFzcyBUUD4g Y2xhc3MgaW1hbmlwIHsKICAgIGlzdHJlYW0mICgqX2YpKGlzdHJlYW0mLCBUUCk7CiAgICBUUCBf YTsKcHVibGljOgogICAgaW1hbmlwKGlzdHJlYW0mICgqZikoaXN0cmVhbSYsIFRQKSwgVFAgYSkg OiBfZihmKSwgX2EoYSkge30KICAgICAKICAgIGZyaWVuZAogICAgICBpc3RyZWFtJiBvcGVyYXRv cj4+IDw+KGlzdHJlYW0mIGksIGNvbnN0IGltYW5pcDxUUD4mIG0pOwp9OwoKdGVtcGxhdGUgPGNs YXNzIFRQPgppbmxpbmUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiBpLCBjb25zdCBpbWFu aXA8VFA+JiBtKQp7IHJldHVybiAoKm0uX2YpKCBpLCBtLl9hKTsgfQoKIAogCiAKIAp0ZW1wbGF0 ZTxjbGFzcyBUUD4gY2xhc3Mgb21hbmlwOyAKCnRlbXBsYXRlPGNsYXNzIFRQPiBjbGFzcyBvYXBw IHsKICAgIG9zdHJlYW0mICgqX2YpKG9zdHJlYW0mLCBUUCk7CnB1YmxpYzogCiAgICBvYXBwKG9z dHJlYW0mICgqZikob3N0cmVhbSYsVFApKSA6IF9mKGYpIHt9CiAgICAgCiAgICBvbWFuaXA8VFA+ IG9wZXJhdG9yKCkoVFAgYSkKICAgICAgeyByZXR1cm4gb21hbmlwPFRQPihfZiwgYSk7IH0KfTsK CnRlbXBsYXRlIDxjbGFzcyBUUD4KaW5saW5lIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYs IGNvbnN0IG9tYW5pcDxUUD4mKTsKCnRlbXBsYXRlIDxjbGFzcyBUUD4gY2xhc3Mgb21hbmlwIHsK ICAgIG9zdHJlYW0mICgqX2YpKG9zdHJlYW0mLCBUUCk7CiAgICBUUCBfYTsKcHVibGljOgogICAg b21hbmlwKG9zdHJlYW0mICgqZikob3N0cmVhbSYsIFRQKSwgVFAgYSkgOiBfZihmKSwgX2EoYSkg e30KICAgICAKICAgIGZyaWVuZAogICAgICBvc3RyZWFtJiBvcGVyYXRvcjw8IDw+KG9zdHJlYW0m IG8sIGNvbnN0IG9tYW5pcDxUUD4mIG0pOwp9OwoKdGVtcGxhdGUgPGNsYXNzIFRQPgppbmxpbmUg b3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiBvLCBjb25zdCBvbWFuaXA8VFA+JiBtKQp7IHJl dHVybiAoKm0uX2YpKG8sIG0uX2EpOyB9CgogCiAKIAoKIAogCiAKIAoKCgoKCmV4dGVybiBpb3Mm IF9faW9tYW5pcF9zZXRiYXNlICAoaW9zJiwgICBpbnQgKTsgaW5saW5lICAgc21hbmlwIDwgIGlu dCA+ICAgc2V0YmFzZSAgKCAgaW50ICBuKSB7IHJldHVybiAgIHNtYW5pcCA8ICBpbnQgPiAoX19p b21hbmlwX3NldGJhc2UgLCBuKTsgfSAKZXh0ZXJuIGlvcyYgX19pb21hbmlwX3NldGZpbGwgIChp b3MmLCAgIGludCApOyBpbmxpbmUgICBzbWFuaXAgPCAgaW50ID4gICBzZXRmaWxsICAoICBpbnQg IG4pIHsgcmV0dXJuICAgc21hbmlwIDwgIGludCA+IChfX2lvbWFuaXBfc2V0ZmlsbCAsIG4pOyB9 IApleHRlcm4gaW9zJiBfX2lvbWFuaXBfc2V0cHJlY2lzaW9uICAoaW9zJiwgICBpbnQgKTsgaW5s aW5lICAgc21hbmlwIDwgIGludCA+ICAgc2V0cHJlY2lzaW9uICAoICBpbnQgIG4pIHsgcmV0dXJu ICAgc21hbmlwIDwgIGludCA+IChfX2lvbWFuaXBfc2V0cHJlY2lzaW9uICwgbik7IH0gCmV4dGVy biBpb3MmIF9faW9tYW5pcF9zZXR3ICAoaW9zJiwgICBpbnQgKTsgaW5saW5lICAgc21hbmlwIDwg IGludCA+ICAgc2V0dyAgKCAgaW50ICBuKSB7IHJldHVybiAgIHNtYW5pcCA8ICBpbnQgPiAoX19p b21hbmlwX3NldHcgLCBuKTsgfSAKCmV4dGVybiBpb3MmIF9faW9tYW5pcF9yZXNldGlvc2ZsYWdz ICAoaW9zJiwgICBpb3M6OmZtdGZsYWdzICk7IGlubGluZSAgIHNtYW5pcCA8ICBpb3M6OmZtdGZs YWdzID4gICByZXNldGlvc2ZsYWdzICAoICBpb3M6OmZtdGZsYWdzICBuKSB7IHJldHVybiAgIHNt YW5pcCA8ICBpb3M6OmZtdGZsYWdzID4gKF9faW9tYW5pcF9yZXNldGlvc2ZsYWdzICwgbik7IH0g CmV4dGVybiBpb3MmIF9faW9tYW5pcF9zZXRpb3NmbGFncyAgKGlvcyYsICAgaW9zOjpmbXRmbGFn cyApOyBpbmxpbmUgICBzbWFuaXAgPCAgaW9zOjpmbXRmbGFncyA+ICAgc2V0aW9zZmxhZ3MgICgg IGlvczo6Zm10ZmxhZ3MgIG4pIHsgcmV0dXJuICAgc21hbmlwIDwgIGlvczo6Zm10ZmxhZ3MgPiAo X19pb21hbmlwX3NldGlvc2ZsYWdzICwgbik7IH0gCn0gIAoKCiMgMjggInN0YXRlLmgiIDIKCgpj bGFzcyBQbGFuR3JpZENlbGw7ICAgCmNsYXNzIEdyaWRTdGF0ZURpbWVuc2lvbnM7CgoKY2xhc3Mg U3RhdGUKewogcHVibGljOgogIHR5cGVkZWYgc2hvcnQgaHR5cGU7ICAKICB0eXBlZGVmIGNoYXIg IHp0eXBlOyAgCiAgdHlwZWRlZiBzaG9ydCBhdHlwZTsgIAoKIHB1YmxpYzoKICAgCiAgIAogIGh0 eXBlIHg7CiAgaHR5cGUgeTsKICB6dHlwZSB6OwogIGF0eXBlIHBzaTsKICBQbGFuR3JpZENlbGwg ICpwOyAgIAoKICBTdGF0ZSgpICAgICAgICAgICAgICAgICAgICAgOiB6KDApLCBwc2koMCksIHAo MCkge30KICBTdGF0ZShodHlwZSB4XywKICAgICAgICBodHlwZSB5XykgICAgICAgICAgICAgOiB4 KHhfKSwgeSh5XyksIHooMCksIHBzaSgwKSwgcCgwKSB7fQogIFN0YXRlKGh0eXBlIHhfLAogICAg ICAgIGh0eXBlIHlfLAogICAgICAgIHp0eXBlIHpfLAogICAgICAgIGF0eXBlIHBzaV8pICAgICAg ICAgICA6IHgoeF8pLCB5KHlfKSwgeih6XyksIHBzaShwc2lfKSwgcCgwKSB7fQogIFN0YXRlJiBh c3NpZ24gICAgIChodHlwZSB4XywgaHR5cGUgeV8pICAgICAgICAgICAgIHsgcmV0dXJuIGFzc2ln bih4Xyx5XywgMCwgMCk7IH0KICBTdGF0ZSYgYXNzaWduWFlaICAoaHR5cGUgeF8sIGh0eXBlIHlf LCB6dHlwZSB6XykgICB7IHJldHVybiBhc3NpZ24oeF8seV8sel8sIDApOyB9CiAgU3RhdGUmIGFz c2lnblhZWWF3KGh0eXBlIHhfLCBodHlwZSB5XywgYXR5cGUgcHNpXykgeyByZXR1cm4gYXNzaWdu KHhfLHlfLCAwLCBwc2lfKTsgfQogIFN0YXRlJiBhc3NpZ24gICAgIChodHlwZSB4XywgaHR5cGUg eV8sIHp0eXBlIHpfLCBhdHlwZSBwc2lfKTsKICBTdGF0ZSYgb3BlcmF0b3I9KGNvbnN0IFN0YXRl ICZzKTsKCiAgYm9vbCBpc0luUmFuZ2UoY29uc3QgR3JpZFN0YXRlRGltZW5zaW9ucyAmZCkgY29u c3Q7CiAgdm9pZCBjbGVhclB0cigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg eyBwPTA7IH0KfTsKCmNsYXNzIEdyaWRTdGF0ZURpbWVuc2lvbnMgewogcHVibGljOgogIHNob3J0 IHg7CiAgc2hvcnQgeTsKICBzaG9ydCB6OwogIHNob3J0IHBzaTsKCiAgR3JpZFN0YXRlRGltZW5z aW9ucygpICAgICAgICAgICAgICAgIDogeCgwKSwgeSgwKSwgeigwKSwgcHNpKDApIHt9CiAgR3Jp ZFN0YXRlRGltZW5zaW9ucyhzaG9ydCB4XywKICAgICAgICAgICAgICAgICAgICAgIHNob3J0IHlf LAogICAgICAgICAgICAgICAgICAgICAgc2hvcnQgel8sCiAgICAgICAgICAgICAgICAgICAgICBz aG9ydCBwc2lfKSAgICAgIDogeCh4XyksIHkoeV8pLCB6KHpfKSwgcHNpKHBzaV8pIHt9CgogIHZv aWQgYXNzaWduWFkgIChzaG9ydCB4Xywgc2hvcnQgeV8pICAgICAgICAgICAgICAgICAgICAgICB7 IHg9eF87IHk9eV87IH0KICB2b2lkIGFzc2lnblpZYXcoc2hvcnQgel8sIHNob3J0IHlhd18pICAg ICAgICAgICAgICAgICAgICAgeyB6PXpfOyBwc2k9eWF3XzsgfQogIHZvaWQgYXNzaWduICAgIChz aG9ydCB4Xywgc2hvcnQgeV8sIHNob3J0IHpfLCBzaG9ydCBwc2lfKSB7IHg9eF87IHk9eV87IHo9 el87IHBzaT1wc2lfOyB9CgogIGxvbmcgbnVtU3RhdGVzKCkgY29uc3QgeyByZXR1cm4geCp5Knoq cHNpOyB9Cn07Cgpvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG9zLCBjb25zdCBTdGF0ZSYg cyk7CgoKaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdGF0ZSAmYSwgY29uc3QgU3RhdGUg JmIpCnsKICByZXR1cm4oYS54ID09IGIueCAmJiBhLnkgPT0gYi55ICYmIGEueiA9PSBiLnogJiYg YS5wc2kgPT0gYi5wc2kpOwp9CgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0YXRlICZh LCBjb25zdCBTdGF0ZSAmYikKewogIHJldHVybighKGE9PWIpKTsgCn0KCgogCiAKIApib29sIG9w ZXJhdG9yPChjb25zdCBTdGF0ZSAmYSwgY29uc3QgU3RhdGUgJmIpOwoKDAogCiAKCmlubGluZSBT dGF0ZSYgU3RhdGU6OmFzc2lnbihTdGF0ZTo6aHR5cGUgeF8sIFN0YXRlOjpodHlwZSB5XywgU3Rh dGU6Onp0eXBlIHpfLCBTdGF0ZTo6YXR5cGUgcHNpXykKewogIHggID14XzsKICB5ICA9eV87CiAg eiAgPXpfOwogIHBzaT1wc2lfOwogIHAgID0wOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIFN0 YXRlJiBTdGF0ZTo6b3BlcmF0b3I9KGNvbnN0IFN0YXRlICZzKQp7CiAgeSA9IHMueTsKICB4ID0g cy54OwogIHogPSBzLno7CiAgcHNpID0gcy5wc2k7CiAgcCA9IHMucDsKICByZXR1cm4gKnRoaXM7 Cn0KCmlubGluZSBib29sIFN0YXRlOjppc0luUmFuZ2UoY29uc3QgR3JpZFN0YXRlRGltZW5zaW9u cyAmZCkgY29uc3QKewogIHJldHVybiAoMDw9eCAgICYmIHg8ZC54ICYmCiAgICAgICAgICAwPD15 ICAgJiYgeTxkLnkgJiYKICAgICAgICAgIDA8PXogICAmJiB6PGQueiAmJgogICAgICAgICAgMDw9 cHNpICYmIHBzaTxkLnBzaSk7Cn0KCmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBTdGF0ZSAm YSwgY29uc3QgU3RhdGUgJmIpCnsKICBpZiAoYS54ICE9IGIueCkgICAgICAgcmV0dXJuIChhLngg PCBiLngpOwogIGVsc2UgaWYgKGEueSAhPSBiLnkpICByZXR1cm4gKGEueSA8IGIueSk7CiAgZWxz ZSBpZiAoYS56ICE9IGIueikgIHJldHVybiAoYS56IDwgYi56KTsKICByZXR1cm4gKGEucHNpIDwg Yi5wc2kpOwp9ICAgICAgCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKIyAyMSAiTW92ZURCLmgiIDIKCiMgMSAiL3UvbHBhZ2Uvd29ya2FyZWEvcm9vdC91 c3Ivc2ltbGFiL3JlbGVhc2UvYXV0b25vbW91c1N5c3RlbXMxLjEuMS9pbmNsdWRlL0FuZ2xlLmgi IDEKIAogCiAKIAoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgv Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY21hdGgiIDEgMwogCiAKCgoKCgoKCiNw cmFnbWEgaW50ZXJmYWNlICJjbWF0aCIKCgpleHRlcm4gIkMrKyIgewojIDM4ICIvdXNyL2xpYi9n Y2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr LTMvY21hdGgiIDMKCgppbmxpbmUgZmxvYXQgIGFicyAoZmxvYXQgIHgpIHsgcmV0dXJuIGZhYnMg KHgpOyB9CgppbmxpbmUgZG91YmxlIGFicyAoZG91YmxlIHgpIHsgcmV0dXJuIGZhYnMgKHgpOyB9 CgoKIyA3MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8u Li8uLi8uLi9pbmNsdWRlL2crKy0zL2NtYXRoIiAzCgppbmxpbmUgbG9uZyBkb3VibGUgYWJzIChs b25nIGRvdWJsZSB4KSB7IHJldHVybiBmYWJzICh4KTsgfQoKfSAgCgoKIyA5ICIvdS9scGFnZS93 b3JrYXJlYS9yb290L3Vzci9zaW1sYWIvcmVsZWFzZS9hdXRvbm9tb3VzU3lzdGVtczEuMS4xL2lu Y2x1ZGUvQW5nbGUuaCIgMgoKCiMgMSAiL3UvbHBhZ2Uvd29ya2FyZWEvcm9vdC91c3Ivc2ltbGFi L3JlbGVhc2UvYXV0b25vbW91c1N5c3RlbXMxLjEuMS9pbmNsdWRlL0NvbnZlcnRVbml0cy5oIiAx CiAKIAogCiAKCgoKCgoKCgoKCmNsYXNzIENvbnZlcnRVbml0cyB7CiAgIAogcHVibGljOgoKICAg CiAgc3RhdGljIGRvdWJsZSBkZWdyZWVzVG9SYWRpYW5zKGRvdWJsZSBkKTsKICBzdGF0aWMgZG91 YmxlIHJhZGlhbnNUb0RlZ3JlZXMoZG91YmxlIHIpOwogIAogICAKICBzdGF0aWMgZG91YmxlIG1l dGVyc1RvRmVldChkb3VibGUgbSk7CiAgc3RhdGljIGRvdWJsZSBmZWV0VG9NZXRlcnMoZG91Ymxl IGZ0KTsKCiAgc3RhdGljIGRvdWJsZSBtZXRlcnNUb0luY2hlcyhkb3VibGUgbSk7CiAgc3RhdGlj IGRvdWJsZSBpbmNoZXNUb01ldGVycyhkb3VibGUgaW4pOwoKICBzdGF0aWMgZG91YmxlIGZlZXRU b0luY2hlcyhkb3VibGUgZnQpOwogIHN0YXRpYyBkb3VibGUgaW5jaGVzVG9GZWV0KGRvdWJsZSBp bik7Cgp9OwoKDAogCiAKCmlubGluZSBkb3VibGUgQ29udmVydFVuaXRzOjpkZWdyZWVzVG9SYWRp YW5zKGRvdWJsZSBkKSB7CiAgcmV0dXJuIGQgKiAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2ICAvIDE4 MC47IH0KCmlubGluZSBkb3VibGUgQ29udmVydFVuaXRzOjpyYWRpYW5zVG9EZWdyZWVzKGRvdWJs ZSByKSB7CiAgcmV0dXJuIHIgKiAxODAuIC8gMy4xNDE1OTI2NTM1ODk3OTMyMzg0NiA7IH0KCmlu bGluZSBkb3VibGUgQ29udmVydFVuaXRzOjptZXRlcnNUb0luY2hlcyhkb3VibGUgbSkgewogIHJl dHVybiBtIC8gLjAyNTQ7IH0KCmlubGluZSBkb3VibGUgQ29udmVydFVuaXRzOjppbmNoZXNUb01l dGVycyhkb3VibGUgaW4pIHsKICByZXR1cm4gaW4gKiAuMDI1NDsgfQoKaW5saW5lIGRvdWJsZSBD b252ZXJ0VW5pdHM6Om1ldGVyc1RvRmVldChkb3VibGUgbSkgewogIHJldHVybiBtZXRlcnNUb0lu Y2hlcyhtKSAvIDEyLiA7IH0KCmlubGluZSBkb3VibGUgQ29udmVydFVuaXRzOjpmZWV0VG9NZXRl cnMoZG91YmxlIGZ0KSB7CiAgcmV0dXJuIGluY2hlc1RvTWV0ZXJzKDEyLiAqIGZ0KTsgfQoKaW5s aW5lIGRvdWJsZSBDb252ZXJ0VW5pdHM6OmZlZXRUb0luY2hlcyhkb3VibGUgdikgewogIHJldHVy biAxMip2OyB9CgppbmxpbmUgZG91YmxlIENvbnZlcnRVbml0czo6aW5jaGVzVG9GZWV0KGRvdWJs ZSB2KSB7CiAgcmV0dXJuIHYvMTIuOyB9CgoKIyAxMSAiL3UvbHBhZ2Uvd29ya2FyZWEvcm9vdC91 c3Ivc2ltbGFiL3JlbGVhc2UvYXV0b25vbW91c1N5c3RlbXMxLjEuMS9pbmNsdWRlL0FuZ2xlLmgi IDIKCgpjbGFzcyBBbmdsZSB7CiBwcml2YXRlOgogIGRvdWJsZSBkX3ZhbHVlOwogcHJvdGVjdGVk OgogIHN0YXRpYyBkb3VibGUgaW50b1JhbmdlT25lU3RlcCAoZG91YmxlIGEpOwogIHN0YXRpYyBk b3VibGUgaW50b1JhbmdlKGRvdWJsZSBhKSB7IAogICAgcmV0dXJuIGludG9SYW5nZU9uZVN0ZXAo Zm1vZChhLCAyKiAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2ICkpOyAKICB9CiAgY2xhc3MgUHJpdmF0 ZSB7fTsKICBBbmdsZShQcml2YXRlIHAsIGRvdWJsZSByYWQpIDogZF92YWx1ZShyYWQpIHt9IAoK IHB1YmxpYzoKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAK ICAgCgogIGVudW0gVW5pdHMgeyBSQURJQU5TLCBERUdSRUVTIH07CiAgc3RhdGljIGNvbnN0IEFu Z2xlIHplcm87CgogIEFuZ2xlKCk7ICAKICBBbmdsZShVbml0cyB1LCBkb3VibGUgdmFsKTsKICBB bmdsZShjb25zdCBBbmdsZSAmZnJvbSk7CiAgZXhwbGljaXQgQW5nbGUoY29uc3QgVmVjdG9yMiAm dik7CgogIEFuZ2xlJiBvcGVyYXRvcj0oY29uc3QgQW5nbGUgJmZyb20pOwogIHZvaWQgc2V0UmFk aWFucyhkb3VibGUgcmFkKTsKICB2b2lkIHNldERlZ3JlZXMoZG91YmxlIGRlZyk7CiAgdm9pZCBz ZXQoVW5pdHMgdSwgZG91YmxlIHZhbCk7CgogIGRvdWJsZSBpblJhZGlhbnMoKSBjb25zdDsKICBk b3VibGUgaW5EZWdyZWVzKCkgY29uc3Q7CiAgZG91YmxlIGluVW5pdHMoVW5pdHMgdSkgY29uc3Q7 CgogICAKICBkb3VibGUgcG9zTmVnKFVuaXRzIHUpICAgY29uc3Q7ICAgCiAgZG91YmxlIHBvc05l Z1JhZGlhbnMoKSAgIGNvbnN0OwogIGRvdWJsZSBwb3NpdGl2ZShVbml0cyB1KSBjb25zdDsgICAK ICBkb3VibGUgcG9zaXRpdmVSYWRpYW5zKCkgY29uc3Q7CgogIFZlY3RvcjIgdW5pdFZlY3Rvcigp ICAgICBjb25zdDsKCiAgQW5nbGUgIGFicygpICAgICAgICAgICAgICAgY29uc3Q7ICAKICBBbmds ZSAgb3BlcmF0b3ItKCkgICAgICAgICBjb25zdDsKICBBbmdsZSAgb3BlcmF0b3IrKEFuZ2xlIGIp ICBjb25zdDsKICBBbmdsZSAgb3BlcmF0b3ItKEFuZ2xlIGIpICBjb25zdDsKICBBbmdsZSAgb3Bl cmF0b3IqKGRvdWJsZSBiKSBjb25zdDsKICBBbmdsZSAgb3BlcmF0b3IvKGRvdWJsZSBiKSBjb25z dDsKCiAgQW5nbGUgJm9wZXJhdG9yKz0oQW5nbGUgYik7CiAgQW5nbGUgJm9wZXJhdG9yLT0oQW5n bGUgYik7CiAgQW5nbGUgJm9wZXJhdG9yKj0oZG91YmxlIGIpOwogIEFuZ2xlICZvcGVyYXRvci89 KGRvdWJsZSBiKTsKCiAgYm9vbCAgICAgICBvcGVyYXRvcj09KEFuZ2xlIGIpIGNvbnN0OwogIGJv b2wgICAgICAgb3BlcmF0b3IhPShBbmdsZSBiKSBjb25zdDsKCiAgdm9pZCB0b1N0cmVhbShzdGQ6 Om9zdHJlYW0gJm9zLCBVbml0cyB1LCBib29sIGZsYWdTaG93VW5pdHM9dHJ1ZSkgY29uc3Q7CiAg IAp9OwoKY29uc3QgY2hhciAqdG9TdHJpbmcoQW5nbGU6OlVuaXRzIHUsIGJvb2wgbG9uZ2Zvcm09 ZmFsc2UpOwogCiAKIAogCgpkb3VibGUgc2luKEFuZ2xlIGEpOwpkb3VibGUgY29zKEFuZ2xlIGEp Owpkb3VibGUgdGFuKEFuZ2xlIGEpOwoKQW5nbGUgb3BlcmF0b3IqKGRvdWJsZSBhLCBBbmdsZSBi KTsKCgogCiAKIAogCiAKY2xhc3MgQW5nbGVSYWRpYW5zIDogcHVibGljIEFuZ2xlIHsKIHB1Ymxp YzoKICBBbmdsZVJhZGlhbnMoZG91YmxlIGEpICAgeyBzZXRSYWRpYW5zKGEpOyB9ICAgCiAgZXhw bGljaXQgQW5nbGVSYWRpYW5zKGNvbnN0IEFuZ2xlICZhKSA6IEFuZ2xlKGEpIHt9Cn07CgpjbGFz cyBBbmdsZURlZ3JlZXMgOiBwdWJsaWMgQW5nbGUgewogcHVibGljOgogIEFuZ2xlRGVncmVlcyhk b3VibGUgYSkgICB7IHNldERlZ3JlZXMoYSk7IH0gICAKICBleHBsaWNpdCBBbmdsZURlZ3JlZXMo Y29uc3QgQW5nbGUgJmEpIDogQW5nbGUoYSkge30KfTsKCmJvb2wgZXF1YWxzV2l0aGluKEFuZ2xl IGExLCBBbmdsZSBhMiwgQW5nbGUgdG9sKTsgIAogCiAKIAogCiAKCnN0ZDo6b3N0cmVhbSAmb3Bl cmF0b3I8PChzdGQ6Om9zdHJlYW0gJm9zLCBBbmdsZVJhZGlhbnMgYSk7CnN0ZDo6b3N0cmVhbSAm b3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0gJm9zLCBBbmdsZURlZ3JlZXMgYSk7CgoMCiAKIAoKaW5s aW5lIEFuZ2xlOjpBbmdsZSgpIAogIDogZF92YWx1ZSgwLikge30gIAoKaW5saW5lIEFuZ2xlOjpB bmdsZShVbml0cyB1LCBkb3VibGUgdmFsKSB7CiAgc2V0KHUsIHZhbCk7IH0KCmlubGluZSBBbmds ZTo6QW5nbGUoY29uc3QgQW5nbGUgJmZyb20pCiAgOiBkX3ZhbHVlKGZyb20uZF92YWx1ZSkge30K CmlubGluZSBBbmdsZTo6QW5nbGUoY29uc3QgVmVjdG9yMiAmdikKICA6IGRfdmFsdWUoYXRhbjIo di55LHYueCkpIHt9CgppbmxpbmUgQW5nbGUmIEFuZ2xlOjpvcGVyYXRvcj0oY29uc3QgQW5nbGUg JmZyb20pIHsKICBkX3ZhbHVlID0gZnJvbS5kX3ZhbHVlOyAKICByZXR1cm4gKnRoaXM7IH0KCmlu bGluZSBkb3VibGUgQW5nbGU6OmluUmFkaWFucygpIGNvbnN0IHsKICByZXR1cm4gZF92YWx1ZTsg fQoKaW5saW5lIGRvdWJsZSBBbmdsZTo6aW5EZWdyZWVzKCkgY29uc3QgewogIHJldHVybiBDb252 ZXJ0VW5pdHM6OnJhZGlhbnNUb0RlZ3JlZXMoZF92YWx1ZSk7IH0KCmlubGluZSB2b2lkIEFuZ2xl OjpzZXRSYWRpYW5zKGRvdWJsZSBhKSB7CiAgZF92YWx1ZSA9IGludG9SYW5nZShhKTsgfQoKaW5s aW5lIHZvaWQgQW5nbGU6OnNldERlZ3JlZXMoZG91YmxlIGEpIHsKICBkX3ZhbHVlID0gaW50b1Jh bmdlKENvbnZlcnRVbml0czo6ZGVncmVlc1RvUmFkaWFucyhhKSk7IH0KCmlubGluZSBkb3VibGUg QW5nbGU6OnBvc05lZyhVbml0cyB1KSBjb25zdCB7CiAgcmV0dXJuIGluVW5pdHModSk7IH0KCmlu bGluZSBkb3VibGUgQW5nbGU6OnBvc05lZ1JhZGlhbnMoKSBjb25zdCB7CiAgcmV0dXJuIGRfdmFs dWU7IH0KCmlubGluZSBkb3VibGUgQW5nbGU6OnBvc2l0aXZlUmFkaWFucygpIGNvbnN0IHsKICBy ZXR1cm4gKChkX3ZhbHVlID49IDApID8gZF92YWx1ZSA6IGRfdmFsdWUrMiogMy4xNDE1OTI2NTM1 ODk3OTMyMzg0NiApOyB9CgppbmxpbmUgVmVjdG9yMiBBbmdsZTo6dW5pdFZlY3RvcigpIGNvbnN0 IHsKICByZXR1cm4gVmVjdG9yMihjb3MoZF92YWx1ZSksIHNpbihkX3ZhbHVlKSk7IH0KCmlubGlu ZSBBbmdsZSBBbmdsZTo6YWJzKCkgY29uc3QgeyByZXR1cm4gQW5nbGUoUHJpdmF0ZSgpLCBmYWJz KGRfdmFsdWUpKTsgfQppbmxpbmUgZG91YmxlICAgIHNpbihBbmdsZSBhKSB7IHJldHVybiA6OnNp bihhLmluUmFkaWFucygpKTsgfQppbmxpbmUgZG91YmxlICAgIGNvcyhBbmdsZSBhKSB7IHJldHVy biA6OmNvcyhhLmluUmFkaWFucygpKTsgfQppbmxpbmUgZG91YmxlICAgIHRhbihBbmdsZSBhKSB7 IHJldHVybiA6OnRhbihhLmluUmFkaWFucygpKTsgfQoKaW5saW5lIEFuZ2xlICBBbmdsZTo6b3Bl cmF0b3ItKCkgY29uc3QgewogIHJldHVybiBBbmdsZShQcml2YXRlKCksIC1kX3ZhbHVlKTsgfQoK aW5saW5lIEFuZ2xlICBBbmdsZTo6b3BlcmF0b3IrKEFuZ2xlIGIpICBjb25zdCB7CiAgcmV0dXJu IEFuZ2xlKFByaXZhdGUoKSwgaW50b1JhbmdlT25lU3RlcChkX3ZhbHVlICsgYi5kX3ZhbHVlKSk7 IH0KCmlubGluZSBBbmdsZSAgQW5nbGU6Om9wZXJhdG9yLShBbmdsZSBiKSAgY29uc3QgewogIHJl dHVybiBBbmdsZShQcml2YXRlKCksIGludG9SYW5nZU9uZVN0ZXAoZF92YWx1ZSAtIGIuZF92YWx1 ZSkpOyB9CgppbmxpbmUgQW5nbGUgIEFuZ2xlOjpvcGVyYXRvciooZG91YmxlIGIpICAgICAgICAg ICAgY29uc3QgewogIHJldHVybiBBbmdsZShQcml2YXRlKCksIGludG9SYW5nZShkX3ZhbHVlICog YikpOyB9CgppbmxpbmUgQW5nbGUgIEFuZ2xlOjpvcGVyYXRvci8oZG91YmxlIGIpICAgICAgICAg ICAgY29uc3QgewogIHJldHVybiBBbmdsZShQcml2YXRlKCksIGludG9SYW5nZShkX3ZhbHVlIC8g YikpOyB9CgppbmxpbmUgQW5nbGUgJkFuZ2xlOjpvcGVyYXRvcis9KEFuZ2xlIGIpIHsKICAqdGhp cyA9ICgqdGhpcyArIGIpOwogIHJldHVybiAqdGhpczsgfQoKaW5saW5lIEFuZ2xlICZBbmdsZTo6 b3BlcmF0b3ItPShBbmdsZSBiKSB7CiAgKnRoaXMgPSAoKnRoaXMgLSBiKTsKICByZXR1cm4gKnRo aXM7IH0KCmlubGluZSBBbmdsZSAmQW5nbGU6Om9wZXJhdG9yKj0oZG91YmxlIGIpIHsKICAqdGhp cyA9ICgqdGhpcyAqIGIpOwogIHJldHVybiAqdGhpczsgfQoKaW5saW5lIEFuZ2xlICZBbmdsZTo6 b3BlcmF0b3IvPShkb3VibGUgYikgewogICp0aGlzID0gKCp0aGlzIC8gYik7CiAgcmV0dXJuICp0 aGlzOyB9CgppbmxpbmUgYm9vbCBBbmdsZTo6b3BlcmF0b3I9PShBbmdsZSBiKSBjb25zdCB7IAog IHJldHVybiBkX3ZhbHVlID09IGIuZF92YWx1ZTsgfQoKaW5saW5lIGJvb2wgQW5nbGU6Om9wZXJh dG9yIT0oQW5nbGUgYikgY29uc3QgewogIHJldHVybiBkX3ZhbHVlICE9IGIuZF92YWx1ZTsgfQoK aW5saW5lIEFuZ2xlIG9wZXJhdG9yKiAoZG91YmxlIGEsIEFuZ2xlIGIpIHsKICByZXR1cm4gYiph OyB9CgppbmxpbmUgc3RkOjpvc3RyZWFtICZvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSAmb3MsIEFu Z2xlUmFkaWFucyBhKSB7CiAgYS50b1N0cmVhbShvcywgQW5nbGU6OlJBRElBTlMpOwogIHJldHVy biBvczsgfQoKaW5saW5lIHN0ZDo6b3N0cmVhbSAmb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0gJm9z LCBBbmdsZURlZ3JlZXMgYSkgewogIGEudG9TdHJlYW0ob3MsIEFuZ2xlOjpERUdSRUVTKTsKICBy ZXR1cm4gb3M7IH0KCgojIDIyICJNb3ZlREIuaCIgMgoKCmNsYXNzIE1vdmVSZWMgCnsKcHVibGlj OgogIHN0cnVjdCBUcmFuc2xhdGlvbiB7CiAgICBTdGF0ZTo6aHR5cGUgZHg7CiAgICBTdGF0ZTo6 aHR5cGUgZHk7CiAgICBUcmFuc2xhdGlvbigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB7fQogICAgVHJhbnNsYXRpb24oU3RhdGU6Omh0eXBlIGR4XywgU3RhdGU6Omh0eXBlIGR5 XykgOiBkeChkeF8pLCBkeShkeV8pIHt9CiAgfTsKCiAgTW92ZVJlYygpIHt9OwogIFN0YXRlOjp6 dHlwZSBzdGFydF96OwogIFN0YXRlOjp6dHlwZSBlbmRfejsKICBTdGF0ZTo6YXR5cGUgc3RhcnRf cHNpOwogIFN0YXRlOjphdHlwZSBlbmRfcHNpOwogIFN0YXRlOjpodHlwZSBkeDsKICBTdGF0ZTo6 aHR5cGUgZHk7CiAgZmxvYXQgICAgICAgIGNvc3Q7CgogIHN0ZDo6dmVjdG9yPFRyYW5zbGF0aW9u PiB0cmFuc2l0UG9pbnRzOyAgCiAgIAogICAKICAgCiAgIAoKICAgCiAgYm9vbCBoYXNIb3JpelRy YW5zbGF0aW9uKCkgY29uc3Q7CiAgYm9vbCBoYXNWZXJ0aWNhbFRyYW5zbGF0aW9uKCkgY29uc3Q7 CiAgYm9vbCBoYXNUcmFuc2xhdGlvbigpICAgICAgY29uc3Q7CiAgYm9vbCBoYXNSb3RhdGlvbigp ICAgICAgICAgY29uc3Q7CiAgYm9vbCBpc1B1cmVUcmFuc2xhdGlvbigpICAgY29uc3Q7CiAgYm9v bCBpc1B1cmVIb3JpelRyYW5zbGF0aW9uKCkgY29uc3Q7CiAgYm9vbCBpc1B1cmVWZXJ0VHJhbnNs YXRpb24oKSBjb25zdDsKICBib29sIGlzUHVyZVJvdGF0aW9uKCkgICAgICBjb25zdDsKfTsKCnN0 ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBNb3ZlUmVjOjpU cmFuc2xhdGlvbiAmdCk7CnN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9z LCBjb25zdCBNb3ZlUmVjICZtKTsKCgpjbGFzcyBNb3ZlREIKewogcHVibGljOgogIE1vdmVEQigp OwogIHZpcnR1YWwgfk1vdmVEQigpOwoKICAgCiAgc2l6ZV90ICAgICAgICAgICAgICAgbnVtUHNp KCkgY29uc3QgICAgICAgICAgICAgICAgICB7IHJldHVybiBfbnVtUHNpOyB9CiAgdmlydHVhbCBT dGF0ZTo6YXR5cGUgcHNpQW5nbGVUb0luZGV4KGNvbnN0IEFuZ2xlICZhKSBjb25zdD0wOwogIHZp cnR1YWwgQW5nbGUgICAgICAgIHBzaUluZGV4VG9BbmdsZShTdGF0ZTo6YXR5cGUgYSkgY29uc3Q9 MDsKCiAgIAogIHNpemVfdCAgICAgICAgICAgICAgIG51bVooKSBjb25zdCAgICAgICAgICAgICAg ICAgICAgeyByZXR1cm4gX251bVo7IH0KICB2aXJ0dWFsIFN0YXRlOjp6dHlwZSB6VmFsdWVUb0lu ZGV4KGRvdWJsZSB6KSAgICAgICAgIGNvbnN0PTA7CiAgdmlydHVhbCBkb3VibGUgICAgICAgeklu ZGV4VG9WYWx1ZShTdGF0ZTo6enR5cGUgaSkgICBjb25zdD0wOwoKIHByb3RlY3RlZDoKICAgCiAg IAogICAKICAgCiAgIAogIHN0cnVjdCBDb25maWd1cmF0aW9uUmVjIHsKICAgIHZlY3RvcjxNb3Zl UmVjPiAgIHJldjsgIAogICAgdmVjdG9yPE1vdmVSZWMgKj4gZndkOyAgCiAgfTsKICB2ZWN0b3I8 IHZlY3RvcjxDb25maWd1cmF0aW9uUmVjPiA+IF9tb3ZlczsgIAoKICAgCiAgIAogICAKICAgCiAg IAogICAKICAgCiAgc3RkOjpzZXQ8U3RhdGU+IF94eU9ic3RhY2xlTGlzdDsKCiAgZnJpZW5kIGNs YXNzIEZvcndhcmROZWlnaGJvcmhvb2Q7CiAgZnJpZW5kIGNsYXNzIFJldmVyc2VOZWlnaGJvcmhv b2Q7CgogcHVibGljOgogIGNvbnN0IHN0ZDo6c2V0PFN0YXRlPiAmZ2V0WFlPYnN0YWNsZUxpc3Qo KSBjb25zdCB7IHJldHVybiBfeHlPYnN0YWNsZUxpc3Q7IH0KCiBwcm90ZWN0ZWQ6CiAgdmlydHVh bCB2b2lkIGNsZWFyKCk7CiAgIAogICAKICAgCiAgIAoKICAgCiAgdm9pZCBzZXREaW1zKHNpemVf dCBudW1aXywgc2l6ZV90IG51bVBzaV8sCiAgICAgICAgICAgICAgIHNpemVfdCByZXNlcnZlTW92 ZXNQZXJDb25maWc9MCk7CiAgIAogICAKICAgCiAgIAogICAKCiAgdm9pZCBhZGRNb3ZlKGNvbnN0 IE1vdmVSZWMgJm1vdmUpOwogICAKCiAgdm9pZCBjb21wdXRlRndkTW92ZXMoKTsKICAgCgogIHN0 cnVjdCBNb3ZlU3RhdHMgewogICAgc2l6ZV90IGN0TW92ZXM7CiAgICBzaXplX3QgY3RQdXJlUm90 OwogICAgc2l6ZV90IGN0UHVyZVRyYW5zOwogICAgc2l6ZV90IGN0UHVyZUhUcmFuczsKICAgIHNp emVfdCBjdFB1cmVWVHJhbnM7CiAgICB2ZWN0b3I8c2l6ZV90PiBjdE1vdmVzT25aOwogICAgaW50 ICAgIG1heFhEaXN0YW5jZTsKICB9OwogIHZvaWQgY29tcHV0ZU1vdmVTdGF0cyhNb3ZlU3RhdHMg JnN0YXRzKTsKICB2b2lkIHByaW50U3RhdHMoY29uc3QgTW92ZVN0YXRzICZzdGF0cywgc3RkOjpv c3RyZWFtICZvcyk7CiAgdm9pZCBjb21wdXRlQW5kUHJpbnRTdGF0cyhzdGQ6Om9zdHJlYW0gJm9z KTsKCiBwcml2YXRlOgogIHNpemVfdCBfbnVtWjsKICBzaXplX3QgX251bVBzaTsKfTsgIAoKCgwK IAogCmlubGluZQpib29sIE1vdmVSZWM6Omhhc0hvcml6VHJhbnNsYXRpb24oKSBjb25zdCB7CiAg cmV0dXJuIChkeCB8fCBkeSk7Cn0KaW5saW5lCmJvb2wgTW92ZVJlYzo6aGFzVmVydGljYWxUcmFu c2xhdGlvbigpIGNvbnN0IHsKICByZXR1cm4gKGVuZF96ICE9IHN0YXJ0X3opOwp9CmlubGluZQpi b29sIE1vdmVSZWM6Omhhc1RyYW5zbGF0aW9uKCkgY29uc3QgewogIHJldHVybiAoaGFzSG9yaXpU cmFuc2xhdGlvbigpIHx8IGhhc1ZlcnRpY2FsVHJhbnNsYXRpb24oKSk7Cn0KaW5saW5lCmJvb2wg TW92ZVJlYzo6aGFzUm90YXRpb24oKSBjb25zdCB7CiAgcmV0dXJuIChlbmRfcHNpICE9IHN0YXJ0 X3BzaSk7Cn0KaW5saW5lCmJvb2wgTW92ZVJlYzo6aXNQdXJlVHJhbnNsYXRpb24oKSBjb25zdCB7 CiAgcmV0dXJuIChoYXNUcmFuc2xhdGlvbigpICYmICFoYXNSb3RhdGlvbigpKTsKfQppbmxpbmUK Ym9vbCBNb3ZlUmVjOjppc1B1cmVIb3JpelRyYW5zbGF0aW9uKCkgY29uc3QgewogIHJldHVybiAo aGFzSG9yaXpUcmFuc2xhdGlvbigpICYmICFoYXNWZXJ0aWNhbFRyYW5zbGF0aW9uKCkgJiYgIWhh c1JvdGF0aW9uKCkpOyAKfQppbmxpbmUKYm9vbCBNb3ZlUmVjOjppc1B1cmVWZXJ0VHJhbnNsYXRp b24oKSBjb25zdCB7CiAgcmV0dXJuICghaGFzSG9yaXpUcmFuc2xhdGlvbigpICYmIGhhc1ZlcnRp Y2FsVHJhbnNsYXRpb24oKSAmJiAhaGFzUm90YXRpb24oKSk7IAp9CmlubGluZQpib29sIE1vdmVS ZWM6OmlzUHVyZVJvdGF0aW9uKCkgY29uc3QgewogIHJldHVybiAoaGFzUm90YXRpb24oKSAmJiAh aGFzVHJhbnNsYXRpb24oKSk7Cn0KDAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMyAiYnVnLmNjIiAyCgoj IDEgIi91L2xwYWdlL3dvcmthcmVhL3Jvb3QvdXNyL3NpbWxhYi9yZWxlYXNlL2F1dG9ub21vdXNT eXN0ZW1zMS4xLjEvaW5jbHVkZS9WZWN0b3IzLmgiIDEKCgogCiAKIAogCiAKIAogCiAKIAogCiAK IAoKCgoKY2xhc3MgVmVjdG9yMyB7CiBwdWJsaWM6CiAgZG91YmxlIHg7CiAgZG91YmxlIHk7CiAg ZG91YmxlIHo7CgogcHVibGljOgogICAKICBjbGFzcyBOb3JtYWxpemVaZXJvTGVuZ3RoRXhjZXB0 aW9uIHt9OwogIAogICAKICBzdGF0aWMgY29uc3QgVmVjdG9yMyB6ZXJvOwogIHN0YXRpYyBjb25z dCBWZWN0b3IzIGVsZW1bM107ICAKCiAgIAogIFZlY3RvcjMoKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB7fSAgIAogIFZlY3RvcjMoZG91YmxlIHhfLCBkb3VibGUgeV8sIGRvdWJs ZSB6XykgICB7IHNldCh4Xyx5Xyx6Xyk7IH0KICBWZWN0b3IzKGNvbnN0IFZlY3RvcjIgJnh5LCAg ICBkb3VibGUgel8pICAgeyBzZXQoeHkueCwgeHkueSwgel8pOyB9CiAgZXhwbGljaXQgVmVjdG9y Myhjb25zdCBkb3VibGUgKnZhbHMpICAgICAgIHsgc2V0KHZhbHMpOyB9CgogIFZlY3RvcjMgJnNl dChkb3VibGUgeF8sIGRvdWJsZSB5XywgZG91YmxlIHpfKSB7CiAgICB4PXhfOyB5PXlfOyB6PXpf OyAKICAgIHJldHVybiAqdGhpczsgfQogIFZlY3RvcjMgJnNldChjb25zdCBWZWN0b3IyICZ4eSwg ZG91YmxlIHpfKSAgICB7IHJldHVybiBzZXQoeHkueCwgeHkueSwgel8pOyB9CiAgVmVjdG9yMyAm c2V0KGNvbnN0IGRvdWJsZSAqdmFscykgICAgIHsgcmV0dXJuIHNldCh2YWxzWzBdLHZhbHNbMV0s dmFsc1syXSk7IH0KCiAgdm9pZCAgICBzZXRYWShjb25zdCBWZWN0b3IyICZ4eSkgICAgICAgICAg ICAgIHsgeD14eS54OyB5PXh5Lnk7IH0KICBWZWN0b3IyIGdldFhZKCkgY29uc3QgICAgICAgICAg ICAgICAgICAgICAgICAgeyByZXR1cm4gVmVjdG9yMih4LHkpOyB9CgoKICAgCiAgZG91YmxlICAg ICAgICpiZWdpbigpICAgICAgICAgeyByZXR1cm4gJng7IH0KICBjb25zdCBkb3VibGUgKmJlZ2lu KCkgICBjb25zdCB7IHJldHVybiAmeDsgfQogIGRvdWJsZSAgICAgICAqZW5kKCkgICAgICAgICAg IHsgcmV0dXJuICgmeCkrMzsgfQogIGNvbnN0IGRvdWJsZSAqZW5kKCkgICAgIGNvbnN0IHsgcmV0 dXJuICgmeCkrMzsgfQoKICAgCiAgIAoKICBkb3VibGUgJm9wZXJhdG9yW10oaW50IGkpICAgICAg IHsgcmV0dXJuICooJnggKyBpKTsgfQogIGRvdWJsZSAgb3BlcmF0b3JbXShpbnQgaSkgY29uc3Qg eyByZXR1cm4gKigmeCArIGkpOyB9CgogICAKICBkb3VibGUgIG1hZ25pdHVkZSgpIGNvbnN0Owog IGRvdWJsZSAgbWFnbml0dWRlU3F1YXJlZCgpIGNvbnN0OwogIFZlY3RvcjMgdW5pdFZlY3Rvcigp IGNvbnN0CiAgICB0aHJvdyAoTm9ybWFsaXplWmVyb0xlbmd0aEV4Y2VwdGlvbik7CgogIHZvaWQg ICAgZ2V0T3J0aG9ub3JtYWxWZWN0b3JzKFZlY3RvcjMgJm4xLCBWZWN0b3IzICZuMikgY29uc3QK ICAgIHRocm93IChOb3JtYWxpemVaZXJvTGVuZ3RoRXhjZXB0aW9uKTsKICAgCiAgIAogIAogIHZv aWQgICAgZ2V0T3J0aG9ub3JtYWxWZWN0b3JzTm9ybWFsKFZlY3RvcjMgJm4xLCBWZWN0b3IzICZu MikgY29uc3Q7CiAgIAoKICBWZWN0b3IzIG9wZXJhdG9yLSgpIGNvbnN0OwogIFZlY3RvcjMgb3Bl cmF0b3IrKGNvbnN0IFZlY3RvcjMgJnYpIGNvbnN0OwogIFZlY3RvcjMgb3BlcmF0b3ItKGNvbnN0 IFZlY3RvcjMgJnYpIGNvbnN0OwogIFZlY3RvcjMgb3BlcmF0b3IqKGRvdWJsZSBhKSBjb25zdDsK ICBWZWN0b3IzIG9wZXJhdG9yLyhkb3VibGUgYSkgY29uc3Q7CgogIGJvb2wgICAgb3BlcmF0b3I9 PShjb25zdCBWZWN0b3IzICZ2KSBjb25zdDsKCiAgIAogIHZvaWQgbm9ybWFsaXplKCkgdGhyb3cg KE5vcm1hbGl6ZVplcm9MZW5ndGhFeGNlcHRpb24pOwogIHZvaWQgc2NhbGUoZG91YmxlIHMpOwoK ICBWZWN0b3IzICZvcGVyYXRvcio9KGRvdWJsZSBhKTsKICBWZWN0b3IzICZvcGVyYXRvci89KGRv dWJsZSBhKTsKICBWZWN0b3IzICZvcGVyYXRvcis9KGNvbnN0IFZlY3RvcjMgJnYpOwogIFZlY3Rv cjMgJm9wZXJhdG9yLT0oY29uc3QgVmVjdG9yMyAmdik7Cn07CgpWZWN0b3IzIG9wZXJhdG9yKihk b3VibGUgYSwgY29uc3QgVmVjdG9yMyAmdik7CgpWZWN0b3IzIGNyb3NzUHJvZHVjdChjb25zdCBW ZWN0b3IzICZ2MSwgY29uc3QgVmVjdG9yMyAmdjIpOwpkb3VibGUgIGlubmVyUHJvZHVjdChjb25z dCBWZWN0b3IzICZ2MSwgY29uc3QgVmVjdG9yMyAmdjIpOwogCgpib29sIGVxdWFsc1dpdGhpbihj b25zdCBWZWN0b3IzICZ2MSwgY29uc3QgVmVjdG9yMyAmdjIsIGRvdWJsZSB0b2wpOyAKCnN0ZDo6 b3N0cmVhbSAmb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0gJm9zLCBjb25zdCBWZWN0b3IzICZ2KTsK c3RkOjppc3RyZWFtICZvcGVyYXRvcj4+KHN0ZDo6aXN0cmVhbSAmaXMsIFZlY3RvcjMgJnYpOwoK CgwKIAogCgppbmxpbmUgZG91YmxlICBWZWN0b3IzOjptYWduaXR1ZGUoKSBjb25zdAp7CiAgcmV0 dXJuIHNxcnQoeCp4ICsgeSp5ICsgeip6KTsKfQoKaW5saW5lIGRvdWJsZSAgVmVjdG9yMzo6bWFn bml0dWRlU3F1YXJlZCgpIGNvbnN0CnsKICByZXR1cm4gKHgqeCArIHkqeSArIHoqeik7Cn0KCmlu bGluZSBWZWN0b3IzIFZlY3RvcjM6OnVuaXRWZWN0b3IoKSBjb25zdAp0aHJvdyAoTm9ybWFsaXpl WmVyb0xlbmd0aEV4Y2VwdGlvbikKewogIGRvdWJsZSBtYWcobWFnbml0dWRlKCkpOwogIGlmICht YWcgPT0gMC4pIHRocm93IE5vcm1hbGl6ZVplcm9MZW5ndGhFeGNlcHRpb24oKTsKICByZXR1cm4g KCp0aGlzIC8gbWFnKTsKfQoKaW5saW5lIFZlY3RvcjMgVmVjdG9yMzo6b3BlcmF0b3ItKCkgY29u c3QKeyByZXR1cm4gVmVjdG9yMygteCwgLXksIC16KTsgfQoKaW5saW5lIFZlY3RvcjMgVmVjdG9y Mzo6b3BlcmF0b3IrKGNvbnN0IFZlY3RvcjMgJnYpIGNvbnN0CnsgcmV0dXJuIFZlY3RvcjMoeCt2 LngsICB5K3YueSwgIHordi56KTsgfQoKaW5saW5lIFZlY3RvcjMgVmVjdG9yMzo6b3BlcmF0b3It KGNvbnN0IFZlY3RvcjMgJnYpIGNvbnN0CnsgcmV0dXJuIFZlY3RvcjMoeC12LngsICB5LXYueSwg IHotdi56KTsgfQoKaW5saW5lIFZlY3RvcjMgVmVjdG9yMzo6b3BlcmF0b3IqKGRvdWJsZSBhKSBj b25zdAp7IHJldHVybiBWZWN0b3IzKHgqYSwgeSphLCB6KmEpOyB9CgppbmxpbmUgVmVjdG9yMyBW ZWN0b3IzOjpvcGVyYXRvci8oZG91YmxlIGEpIGNvbnN0CnsgcmV0dXJuIFZlY3RvcjMoeC9hLCB5 L2EsIHovYSk7IH0KCmlubGluZSBib29sIFZlY3RvcjM6Om9wZXJhdG9yPT0oY29uc3QgVmVjdG9y MyAmdikgY29uc3QKeyByZXR1cm4gKCh4PT12LngpICYmICh5PT12LnkpICYmICh6PT12LnopKTsg fQoKaW5saW5lIHZvaWQgVmVjdG9yMzo6bm9ybWFsaXplKCkgdGhyb3cgKE5vcm1hbGl6ZVplcm9M ZW5ndGhFeGNlcHRpb24pCnsKICBkb3VibGUgbWFnKG1hZ25pdHVkZSgpKTsKICBpZiAobWFnID09 IDAuKSB0aHJvdyBOb3JtYWxpemVaZXJvTGVuZ3RoRXhjZXB0aW9uKCk7CiAgc2NhbGUoMSAvIG1h Zyk7Cn0KCmlubGluZSB2b2lkIFZlY3RvcjM6OnNjYWxlKGRvdWJsZSBzKQp7CiAgeCAqPSBzOwog IHkgKj0gczsKICB6ICo9IHM7Cn0KCmlubGluZSBWZWN0b3IzICZWZWN0b3IzOjpvcGVyYXRvcio9 KGRvdWJsZSBhKSAKeyAKICBzY2FsZShhKTsgCiAgcmV0dXJuICp0aGlzOyAKfQoKaW5saW5lIFZl Y3RvcjMgJlZlY3RvcjM6Om9wZXJhdG9yLz0oZG91YmxlIGEpCnsKICBzY2FsZSgxL2EpOwogIHJl dHVybiAqdGhpczsgCn0KCmlubGluZSBWZWN0b3IzICZWZWN0b3IzOjpvcGVyYXRvcis9KGNvbnN0 IFZlY3RvcjMgJnYpCnsKICB4ICs9IHYueDsKICB5ICs9IHYueTsKICB6ICs9IHYuejsKICByZXR1 cm4gKnRoaXM7IAp9CgppbmxpbmUgVmVjdG9yMyAmVmVjdG9yMzo6b3BlcmF0b3ItPShjb25zdCBW ZWN0b3IzICZ2KQp7CiAgeCAtPSB2Lng7CiAgeSAtPSB2Lnk7CiAgeiAtPSB2Lno7CiAgcmV0dXJu ICp0aGlzOyAKfQoKaW5saW5lIFZlY3RvcjMgb3BlcmF0b3IqKGRvdWJsZSBhLCBjb25zdCBWZWN0 b3IzICZ2KSAKeyByZXR1cm4gdiphOyB9CgppbmxpbmUgZG91YmxlICBpbm5lclByb2R1Y3QoY29u c3QgVmVjdG9yMyAmdjEsIGNvbnN0IFZlY3RvcjMgJnYyKQp7IHJldHVybiB2MVswXSp2MlswXSAr IHYxWzFdKnYyWzFdICsgdjFbMl0qdjJbMl07IH0KCgoKCiMgNCAiYnVnLmNjIiAyCgoKdm9pZCBi bGFoKCkKewogIFBvc2VUb1N0YXRlWGZvcm0gICAgICB4Zm9ybTsKICBNb3ZlREIgICAgICAgICAg ICAgICAqbW92ZURCOwoKICB2ZWN0b3I8U3RhdGU+IHJhd3BhdGg7CiAgdmVjdG9yPFZlY3RvcjM+ IG5lZHBhdGg7CiAgbmVkcGF0aC5yZXNpemUocmF3cGF0aC5zaXplKCkpOwogIGZvciAoc2l6ZV90 IHA9MDsgcDxyYXdwYXRoLnNpemUoKTsgKytwKSB7CiAgICByYXdwYXRoW3BdLnNldCh4Zm9ybS5p bmRleFRvTm9ydGgocmF3cGF0aFtwXS54KSwKICAgICAgICAgICAgICAgICAgIHhmb3JtLmluZGV4 VG9FYXN0KHJhd3BhdGhbcF0ueSksCiAgICAgICAgICAgICAgICAgICBtb3ZlREItPnpJbmRleFRv VmFsdWUocmF3cGF0aFtwXS56KSk7CiAgfQogIHJldHVybiAxOwp9Cg==
next reply other threads:[~2001-06-13 15:36 UTC|newest] Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top 2001-06-13 15:36 lpage [this message] 2001-08-11 13:11 gdr
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20010613222748.24752.qmail@sourceware.cygnus.com \ --to=lpage@draper.com \ --cc=gcc-gnats@gcc.gnu.org \ --cc=lance.page@ieee.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).