From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8428 invoked by alias); 7 Aug 2002 10:16:07 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 8409 invoked by uid 71); 7 Aug 2002 10:16:06 -0000 Resent-Date: 7 Aug 2002 10:16:06 -0000 Resent-Message-ID: <20020807101606.8408.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, chr-breitkopf@magrathea.de Received: (qmail 6559 invoked by uid 61); 7 Aug 2002 10:06:55 -0000 Message-Id: <20020807100654.6558.qmail@sources.redhat.com> Date: Wed, 07 Aug 2002 03:26:00 -0000 From: chr-breitkopf@magrathea.de Reply-To: chr-breitkopf@magrathea.de To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: optimization/7520: internal compiler error in verify_local_live_at_start X-SW-Source: 2002-08/txt/msg00131.txt.bz2 List-Id: >Number: 7520 >Category: optimization >Synopsis: internal compiler error in verify_local_live_at_start >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Wed Aug 07 03:16:03 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Christoph Breitkopf >Release: 3.1.1 >Organization: >Environment: Linux 2.4.19 on Intel Pentium II >Description: rv2.c:418: Internal compiler error in verify_local_live_at_start, at flow.c:583 >How-To-Repeat: Run gcc on attached proprocessed file. Here is a log of gcc -v, contains the flags used: Reading specs from /usr/local/gcc-3.1.1/lib/gcc-lib/i686-pc-linux-gnu/3.1.1/specs Configured with: ../gcc-3.1.1/configure --prefix=/usr/local/gcc-3.1.1 --enable-languages=c Thread model: single gcc version 3.1.1 /usr/local/gcc-3.1.1/lib/gcc-lib/i686-pc-linux-gnu/3.1.1/cpp0 -lang-c -v -I../common -I/usr/include/X11 -iprefix /usr/local/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.1.1/ -D__GNUC__=3 -D__GNUC_MINOR__=1 -D__GNUC_PATCHLEVEL__=1 -D__ELF__ -Dunix -D__gnu_linux__ -Dlinux -D__ELF__ -D__unix__ -D__gnu_linux__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__OPTIMIZE__ -D__FAST_MATH__ -D__STDC_HOSTED__=1 -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__MMX__ -DSPEED=200 -DBSD -Dlinux -Dtracktime=0 -DDCL_ATOF -DNOSTEREO -DBIGMEM rv2.c rv2.i GNU CPP version 3.1.1 (cpplib) (i386 Linux/ELF) ignoring nonexistent directory "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1.1/include" ignoring nonexistent directory "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1.1/../../../../i686-pc-linux-gnu/include" ignoring nonexistent directory "/usr/local/gcc-3.1.1/i686-pc-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: ../common /usr/include/X11 /usr/local/include /usr/local/gcc-3.1.1/include /usr/local/gcc-3.1.1/lib/gcc-lib/i686-pc-linux-gnu/3.1.1/include /usr/include End of search list. /usr/local/gcc-3.1.1/lib/gcc-lib/i686-pc-linux-gnu/3.1.1/cc1 -fpreprocessed rv2.i -quiet -dumpbase rv2.c -march=pentium2 -malign-double -mno-ieee-fp -O3 -version -ffast-math -fomit-frame-pointer -fstrict-aliasing -o rv2.s GNU CPP version 3.1.1 (cpplib) (i386 Linux/ELF) GNU C version 3.1.1 (i686-pc-linux-gnu) compiled by GNU C version 3.1.1. rv2.c: In function `getexposure': rv2.c:418: Internal compiler error in verify_local_live_at_start, at flow.c:583 Please submit a full bug report, with preprocessed source if appropriate. See for instructions. >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="rv2.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="rv2.i" IyAxICJydjIuYyIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21tYW5kIGxpbmU+IgojIDEgInJ2 Mi5jIgoKCgpzdGF0aWMgY2hhciBTQ0NTaWRbXSA9ICJAKCMpcnYyLmMgMi4zNyAzLzE4Lzk3IExC TCI7CiMgMTMgInJ2Mi5jIgojIDEgInJheS5oIiAxCiMgMTEgInJheS5oIgojIDEgIi4uL2NvbW1v bi9zdGFuZGFyZC5oIiAxCiMgOSAiLi4vY29tbW9uL3N0YW5kYXJkLmgiCiMgMSAiL3Vzci9pbmNs dWRlL3N0ZGlvLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNTAgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMKIyAyNTEgIi91c3IvaW5jbHVkZS9m ZWF0dXJlcy5oIiAyIDMKIyAyNzggIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAyNzkgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o IiAyIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKCiMgMSAiL3Vzci9sb2Nh bC9nY2MtMy4xLjEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9z dGRkZWYuaCIgMSAzCiMgMjAxICIvdXNyL2xvY2FsL2djYy0zLjEuMS9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQg aW50IHNpemVfdDsKIyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKIyAxICIvdXNy L2xvY2FsL2djYy0zLjEuMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNs dWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9nY2MtMy4xLjEvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fYnVp bHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDM5ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg MiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1 ZGUvYml0cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4xLjEvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi91c3Iv aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VfY2hh cjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50 IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9fZXh0ZW5zaW9uX18g dHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9fZXh0ZW5zaW9uX18g dHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5ICIvdXNyL2luY2x1ZGUvYml0cy90 eXBlcy5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQg Y2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVk ZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2lu dDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5 cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVk ZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAq X19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVkZWYgX191X2ludCBf X3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190 Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7CnR5 cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xvZmZfdDsKdHlwZWRl ZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVmIGxvbmcgaW50IF9f cmxpbV90Owp0eXBlZGVmIF9fcXVhZF90IF9fcmxpbTY0X3Q7CnR5cGVkZWYgX191X2ludCBfX2lk X3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9IF9fZnNpZF90OwoK CnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CnR5cGVkZWYg bG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190OwoKdHlwZWRlZiBs b25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2ZkX21hc2s7 CiMgMTAwICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCnR5cGVkZWYgc3RydWN0CiAgewoK CgoKCgogICAgX19mZF9tYXNrIF9fZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21h c2spKV07CgoKICB9IF9fZmRfc2V0OwoKCnR5cGVkZWYgaW50IF9fa2V5X3Q7CgoKdHlwZWRlZiB1 bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Js a2NudF90Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25n IF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVk ZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0 X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29m ZjY0X3Q7CgoKdHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQg bG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwojIDQxICIv dXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBG SUxFOwojIDU3ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saWJp by5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv X0dfY29uZmlnLmgiIDEgMwojIDE0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIv dXNyL2xvY2FsL2djYy0zLjEuMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9p bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyOTQgIi91c3IvbG9jYWwvZ2NjLTMuMS4xL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBs b25nIGludCB3Y2hhcl90OwojIDMyMSAiL3Vzci9sb2NhbC9nY2MtMy4xLjEvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2ln bmVkIGludCB3aW50X3Q7CiMgMTUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCiMgMzUg Ii91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0 cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9f YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBf R191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1 bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18p KSk7CiMgMzEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2xp YmlvLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjEuMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL2xp YmlvLmgiIDIgMwojIDE1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19qdW1w X3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAxNjQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVk ZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lP X21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsKCgoKICBpbnQgX3BvczsK IyAxODcgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCn07CgpzdHJ1Y3QgX0lPX0ZJTEUgewogIGlu dCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9JT19yZWFkX3B0cjsKICBjaGFyKiBfSU9fcmVhZF9lbmQ7 CiAgY2hhciogX0lPX3JlYWRfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsKICBjaGFyKiBf SU9fd3JpdGVfcHRyOwogIGNoYXIqIF9JT193cml0ZV9lbmQ7CiAgY2hhciogX0lPX2J1Zl9iYXNl OwogIGNoYXIqIF9JT19idWZfZW5kOwoKICBjaGFyICpfSU9fc2F2ZV9iYXNlOwogIGNoYXIgKl9J T19iYWNrdXBfYmFzZTsKICBjaGFyICpfSU9fc2F2ZV9lbmQ7CgogIHN0cnVjdCBfSU9fbWFya2Vy ICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpfY2hhaW47CgogIGludCBfZmlsZW5vOwog IGludCBfYmxrc2l6ZTsKICBfX29mZl90IF9vbGRfb2Zmc2V0OwoKCgogIHVuc2lnbmVkIHNob3J0 IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIgX3Nob3J0 YnVmWzFdOwoKCgogIF9JT19sb2NrX3QgKl9sb2NrOwojIDIzMyAiL3Vzci9pbmNsdWRlL2xpYmlv LmgiIDMKICBfX29mZjY0X3QgX29mZnNldDsKCiAgaW50IF91bnVzZWQyWzE2XTsKCn07CgoKdHlw ZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgX0lPX0ZJTEU7CgoKc3RydWN0IF9JT19GSUxFX3BsdXM7CmV4 dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBf SU9fRklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVz IF9JT18yXzFfc3RkZXJyXzsKIyAyNjIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYg X19zc2l6ZV90IF9faW9fcmVhZF9mbiAodm9pZCAqIF9fY29va2llLCBjaGFyICpfX2J1Ziwgc2l6 ZV90IF9fbmJ5dGVzKTsKIyAyNzEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgX19z c2l6ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKiBfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1 Ziwgc2l6ZV90IF9fbik7CiMgMjgwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIGlu dCBfX2lvX3NlZWtfZm4gKHZvaWQgKiBfX2Nvb2tpZSwgX19vZmZfdCBfX3BvcywgaW50IF9fdyk7 CgoKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9mbiAodm9pZCAqIF9fY29va2llKTsKIyAzMTggIi91 c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX191bmRlcmZsb3cgKF9JT19GSUxFICop IDsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX19vdmVyZmxv dyAoX0lPX0ZJTEUgKiwgaW50KSA7CiMgMzM3ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRl cm4gaW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkgOwpleHRlcm4gaW50IF9JT19wdXRjIChp bnQgX19jLCBfSU9fRklMRSAqX19mcCkgOwpleHRlcm4gaW50IF9JT19mZW9mIChfSU9fRklMRSAq X19mcCkgOwpleHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19GSUxFICpfX2ZwKSA7CgpleHRlcm4g aW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpfX2ZwKSA7CgoKCgoKZXh0ZXJuIHZvaWQg X0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikgOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUg KF9JT19GSUxFICopIDsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSA7 CiMgMzYzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192ZnNjYW5mIChf SU9fRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LCBfX2dudWNfdmFf bGlzdCwgaW50ICpfX3Jlc3RyaWN0KSA7CgpleHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJ TEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsIF9fZ251Y192YV9saXN0KSA7 CgpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCkg OwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QpIDsK CmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtvZmYgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50 LCBpbnQpIDsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2 NF90LCBpbnQpIDsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChfSU9fRklMRSAq KSA7CiMgNTggIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKdHlwZWRlZiBfX29mZl90IGZw b3NfdDsKIyAxMTAgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvc3RkaW9fbGltLmgiIDEgMwojIDExMSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgpl eHRlcm4gRklMRSAqc3RkaW47CmV4dGVybiBGSUxFICpzdGRvdXQ7CmV4dGVybiBGSUxFICpzdGRl cnI7CgoKCgoKCgpleHRlcm4gaW50IHJlbW92ZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSA7 CgpleHRlcm4gaW50IHJlbmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpf X25ldykgOwoKCgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGUgKHZvaWQpIDsKIyAxNDMgIi91c3IvaW5j bHVkZS9zdGRpby5oIiAzCmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9fcykgOwoKCgoKZXh0 ZXJuIGNoYXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIDsKIyAxNjAgIi91c3IvaW5jbHVkZS9zdGRp by5oIiAzCmV4dGVybiBjaGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0 IGNoYXIgKl9fcGZ4KSA7CgoKCgpleHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIDsK CmV4dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gaW50IGZmbHVz aF91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKIyAxODIgIi91c3IvaW5jbHVkZS9zdGRpby5o IiAzCmV4dGVybiBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5h bWUsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzKSA7CgoKZXh0ZXJuIEZJTEUgKmZy ZW9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLCBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19tb2RlcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwojIDIxMiAi L3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9f Y29uc3QgY2hhciAqX19tb2RlcykgOwojIDIzMiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0 ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3Ry aWN0IF9fYnVmKSA7CgoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0 cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwgaW50IF9fbW9kZXMsIHNpemVfdCBfX24pIDsK CgoKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNo YXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX3NpemUpIDsKCgoKZXh0ZXJuIHZvaWQgc2V0 bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgZnByaW50ZiAoRklMRSAq X19yZXN0cmljdCBfX3N0cmVhbSwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAu Li4pIDsKCgpleHRlcm4gaW50IHByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y bWF0LCAuLi4pIDsKCmV4dGVybiBpbnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgoKCmV4dGVybiBpbnQgdmZw cmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m b3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSA7CgoKCmV4dGVybiBpbnQgdnByaW50ZiAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgOwoK CmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSA7CgoKCgoKZXh0ZXJu IGludCBzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCgogICAgIF9fYXR0cmlidXRlX18g KChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOwoKZXh0ZXJuIGludCBfX3ZzbnByaW50 ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKCgogICAgIF9fYXR0cmli dXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOwpleHRlcm4gaW50IHZzbnBy aW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKCgogICAgIF9fYXR0 cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOwojIDMxMCAiL3Vzci9p bmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19z dHJlYW0sIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgoKZXh0ZXJu IGludCBzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCmV4 dGVybiBpbnQgc3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwojIDMzOCAiL3Vzci9pbmNsdWRlL3N0ZGlv LmgiIDMKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBnZXRj IChGSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiBpbnQgZ2V0Y2hhciAodm9pZCkgOwoKCgoKCgoK ZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGdl dGNoYXJfdW5sb2NrZWQgKHZvaWQpIDsKCgoKCmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJ TEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0 cmVhbSkgOwpleHRlcm4gaW50IHB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0 ZXJuIGludCBwdXRjaGFyIChpbnQgX19jKSA7CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9j a2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9j a2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IHB1dGNoYXJfdW5sb2Nr ZWQgKGludCBfX2MpIDsKCgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSA7CgoK ZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGNo YXIgKmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0cmlj dCBfX3N0cmVhbSkgOwojIDQwNCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIg KmdldHMgKGNoYXIgKl9fcykgOwojIDQyOCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJu IGludCBmcHV0cyAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmlj dCBfX3N0cmVhbSkgOwojIDQzOCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBw dXRzIChfX2NvbnN0IGNoYXIgKl9fcykgOwoKCgpleHRlcm4gaW50IHVuZ2V0YyAoaW50IF9fYywg RklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAodm9pZCAqX19yZXN0cmlj dCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0 cmVhbSkgOwoKCmV4dGVybiBzaXplX3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3Qg X19wdHIsIHNpemVfdCBfX3NpemUsIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSA7 CgoKCgpleHRlcm4gc2l6ZV90IGZyZWFkX3VubG9ja2VkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRy LCBzaXplX3QgX19zaXplLCBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7 CgpleHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0 IF9fcHRyLCBzaXplX3QgX19zaXplLCBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry ZWFtKSA7CgoKCgoKCmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBf X29mZiwgaW50IF9fd2hlbmNlKSA7CgpleHRlcm4gbG9uZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3Ry ZWFtKSA7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9fc3RyZWFtKSA7CiMgNDc3ICIvdXNy L2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CiMgNDk5ICIvdXNyL2lu Y2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19z dHJlYW0sIGZwb3NfdCAqX19yZXN0cmljdCBfX3BvcykgOwoKCmV4dGVybiBpbnQgZnNldHBvcyAo RklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3BvcykgOwojIDUzNiAiL3Vzci9pbmNs dWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSA7Cgpl eHRlcm4gaW50IGZlb2YgKEZJTEUgKl9fc3RyZWFtKSA7CgpleHRlcm4gaW50IGZlcnJvciAoRklM RSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUgKl9f c3RyZWFtKSA7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKZXh0 ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gdm9p ZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSA7CgoKCgpleHRlcm4gaW50IHN5c19uZXJyOwpl eHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJsaXN0W107CiMgNTY3ICIvdXNyL2lu Y2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIDsKCgoK CmV4dGVybiBpbnQgZmlsZW5vX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKCgpleHRl cm4gRklMRSAqcG9wZW4gKF9fY29uc3QgY2hhciAqX19jb21tYW5kLCBfX2NvbnN0IGNoYXIgKl9f bW9kZXMpIDsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgpleHRl cm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSA7CiMgNjE0ICIvdXNyL2luY2x1ZGUvc3RkaW8u aCIgMwpleHRlcm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBp bnQgZnRyeWxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tm aWxlIChGSUxFICpfX3N0cmVhbSkgOwojIDYzNSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2JpdHMv c3RkaW8uaCIgMwpleHRlcm4gX19pbmxpbmUgaW50CnZwcmludGYgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2ZtdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCnsKICByZXR1cm4gdmZwcmludGYg KHN0ZG91dCwgX19mbXQsIF9fYXJnKTsKfQoKCmV4dGVybiBfX2lubGluZSBpbnQKZ2V0Y2hhciAo dm9pZCkKewogIHJldHVybiBfSU9fZ2V0YyAoc3RkaW4pOwp9CgoKCgpleHRlcm4gX19pbmxpbmUg aW50CmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fZnApCnsKICByZXR1cm4gKChfX2ZwKS0+X0lPX3Jl YWRfcHRyID49IChfX2ZwKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoX19mcCkgOiAqKHVuc2ln bmVkIGNoYXIgKikgKF9fZnApLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgpleHRlcm4gX19pbmxpbmUg aW50CmdldGNoYXJfdW5sb2NrZWQgKHZvaWQpCnsKICByZXR1cm4gKChzdGRpbiktPl9JT19yZWFk X3B0ciA+PSAoc3RkaW4pLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChzdGRpbikgOiAqKHVuc2ln bmVkIGNoYXIgKikgKHN0ZGluKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKCgpleHRlcm4gX19pbmxp bmUgaW50CnB1dGNoYXIgKGludCBfX2MpCnsKICByZXR1cm4gX0lPX3B1dGMgKF9fYywgc3Rkb3V0 KTsKfQoKCgoKZXh0ZXJuIF9faW5saW5lIGludApmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklM RSAqX19zdHJlYW0pCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyID49IChf X3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoX19zdHJlYW0sICh1bnNpZ25l ZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooX19zdHJlYW0pLT5fSU9fd3JpdGVf cHRyKysgPSAoX19jKSkpOwp9CgoKCgoKZXh0ZXJuIF9faW5saW5lIGludApwdXRjX3VubG9ja2Vk IChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9JT193 cml0ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChfX3N0 cmVhbSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVh bSktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgpleHRlcm4gX19pbmxpbmUgaW50CnB1 dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpCnsKICByZXR1cm4gKCgoc3Rkb3V0KS0+X0lPX3dyaXRl X3B0ciA+PSAoc3Rkb3V0KS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChzdGRvdXQsICh1 bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooc3Rkb3V0KS0+X0lPX3dy aXRlX3B0cisrID0gKF9fYykpKTsKfQojIDExMCAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIg MwpleHRlcm4gX19pbmxpbmUgaW50CmZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKQp7CiAg cmV0dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgxMCkgIT0gMCk7Cn0KCgpleHRlcm4gX19p bmxpbmUgaW50CmZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pCnsKICByZXR1cm4gKCgo X19zdHJlYW0pLT5fZmxhZ3MgJiAweDIwKSAhPSAwKTsKfQojIDYzNiAiL3Vzci9pbmNsdWRlL3N0 ZGlvLmgiIDIgMwoKCgojIDEwICIuLi9jb21tb24vc3RhbmRhcmQuaCIgMgoKIyAxICIvdXNyL2lu Y2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMK CgoKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsK dHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBf X3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2Zz aWRfdCBmc2lkX3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9f dCBpbm9fdDsKIyA1OCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19kZXZf dCBkZXZfdDsKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3Qg bW9kZV90OwoKCgoKdHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191aWRf dCB1aWRfdDsKIyA5NiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19waWRf dCBwaWRfdDsKCgoKCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCnR5cGVkZWYgX19zc2l6ZV90IHNz aXplX3Q7CgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBj YWRkcl90OwoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRl L3RpbWUuaCIgMSAzCiMgNzEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRlZiBfX3RpbWVf dCB0aW1lX3Q7CiMgMTIzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vz ci9sb2NhbC9nY2MtMy4xLjEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5j bHVkZS9zdGRkZWYuaCIgMSAzCiMgMTI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoK Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0 IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTY5ICIvdXNyL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21v ZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21v ZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21v ZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21v ZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmli dXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2 X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQg aW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRl ZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9f KSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f d29yZF9fKSkpOwojIDE5MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL2JpdHMvZW5kaWFuLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvZW5kaWFu LmgiIDIgMwojIDE5MiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3Iv aW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwojIDMyICIvdXNyL2luY2x1 ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAx IDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQgX19zaWdf YXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9f dmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2ln c2V0X3Q7CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgojIDEgIi91c3Iv aW5jbHVkZS90aW1lLmgiIDEgMwojIDgzICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnN0cnVjdCB0 aW1lc3BlYwogIHsKICAgIGxvbmcgaW50IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAg fTsKIyAzOSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCgoKCgpzdHJ1Y3QgdGlt ZXZhbDsKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CgoKdHlwZWRlZiBfX2ZkX3NldCBmZF9z ZXQ7CiMgNzQgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuIGludCBfX3NlbGVj dCAoaW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywgX19mZF9zZXQgKl9fd3JpdGVmZHMs IF9fZmRfc2V0ICpfX2V4Y2VwdGZkcywgc3RydWN0IHRpbWV2YWwgKl9fdGltZW91dCkgOwoKCmV4 dGVybiBpbnQgc2VsZWN0IChpbnQgX19uZmRzLCBfX2ZkX3NldCAqX19yZWFkZmRzLCBfX2ZkX3Nl dCAqX193cml0ZWZkcywgX19mZF9zZXQgKl9fZXhjZXB0ZmRzLCBzdHJ1Y3QgdGltZXZhbCAqX190 aW1lb3V0KSA7CiMgOTMgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKCiMgMTk1ICIvdXNy L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNy b3MuaCIgMSAzCiMgMTk4ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgoKCnR5cGVk ZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKdHlwZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsK dHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsKIyAyMTggIi91c3IvaW5jbHVkZS9zeXMv dHlwZXMuaCIgMwoKIyAxMiAiLi4vY29tbW9uL3N0YW5kYXJkLmgiIDIKCiMgMSAiL3Vzci9pbmNs dWRlL2ZjbnRsLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMwoKCgoKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9mY250bC5oIiAxIDMKIyAxMDggIi91c3IvaW5jbHVkZS9iaXRzL2Zj bnRsLmgiIDMKc3RydWN0IGZsb2NrCiAgewogICAgc2hvcnQgaW50IGxfdHlwZTsKICAgIHNob3J0 IGludCBsX3doZW5jZTsKCiAgICBfX29mZl90IGxfc3RhcnQ7CiAgICBfX29mZl90IGxfbGVuOwoK CgoKICAgIF9fcGlkX3QgbF9waWQ7CiAgfTsKIyAzNCAiL3Vzci9pbmNsdWRlL2ZjbnRsLmgiIDIg MwojIDYwICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMwpleHRlcm4gaW50IF9fZmNudGwgKGludCBf X2ZkLCBpbnQgX19jbWQsIC4uLikgOwpleHRlcm4gaW50IGZjbnRsIChpbnQgX19mZCwgaW50IF9f Y21kLCAuLi4pIDsKCgoKCmV4dGVybiBpbnQgX19vcGVuIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwg aW50IF9fb2ZsYWcsIC4uLikgOwoKZXh0ZXJuIGludCBvcGVuIChfX2NvbnN0IGNoYXIgKl9fZmls ZSwgaW50IF9fb2ZsYWcsIC4uLikgOwojIDg1ICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMwpleHRl cm4gaW50IGNyZWF0IChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19tb2RlX3QgX19tb2RlKSA7CiMg MTE0ICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMwpleHRlcm4gaW50IGxvY2tmIChpbnQgX19mZCwg aW50IF9fY21kLCBfX29mZl90IF9fbGVuKSA7CiMgMTI4ICIvdXNyL2luY2x1ZGUvZmNudGwuaCIg MwoKIyAxNCAiLi4vY29tbW9uL3N0YW5kYXJkLmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL21hdGgu aCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvaHVnZV92YWwuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCgoK CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMSAzCiMgNDEgIi91c3IvaW5jbHVk ZS9tYXRoLmgiIDIgMwojIDYzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2Fs bHMuaCIgMwpleHRlcm4gZG91YmxlIGFjb3MgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9f YWNvcyAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGFzaW4gKGRvdWJsZSBfX3gpOyBleHRl cm4gZG91YmxlIF9fYXNpbiAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGF0YW4gKGRvdWJs ZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fYXRhbiAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91Ymxl IGF0YW4yIChkb3VibGUgX195LCBkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4yIChk b3VibGUgX195LCBkb3VibGUgX194KTsKCgpleHRlcm4gZG91YmxlIGNvcyAoZG91YmxlIF9feCk7 IGV4dGVybiBkb3VibGUgX19jb3MgKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBzaW4gKGRv dWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fc2luIChkb3VibGUgX194KTsKCmV4dGVybiBkb3Vi bGUgdGFuIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX3RhbiAoZG91YmxlIF9feCk7CiMg NzggIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBkb3VibGUgY29zaCAo ZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19jb3NoIChkb3VibGUgX194KTsKCmV4dGVybiBk b3VibGUgc2luaCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19zaW5oIChkb3VibGUgX194 KTsKCmV4dGVybiBkb3VibGUgdGFuaCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX190YW5o IChkb3VibGUgX194KTsKCgoKZXh0ZXJuIGRvdWJsZSBhY29zaCAoZG91YmxlIF9feCk7IGV4dGVy biBkb3VibGUgX19hY29zaCAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGFzaW5oIChkb3Vi bGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2FzaW5oIChkb3VibGUgX194KTsKCmV4dGVybiBkb3Vi bGUgYXRhbmggKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fYXRhbmggKGRvdWJsZSBfX3gp OwoKCgoKCmV4dGVybiBkb3VibGUgZXhwIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2V4 cCAoZG91YmxlIF9feCk7CiMgMTA2ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpl eHRlcm4gZG91YmxlIGZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpOyBleHRlcm4g ZG91YmxlIF9fZnJleHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCk7CgoKZXh0ZXJuIGRv dWJsZSBsZGV4cCAoZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpOyBleHRlcm4gZG91YmxlIF9f bGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KTsKCgpleHRlcm4gZG91YmxlIGxvZyAo ZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19sb2cgKGRvdWJsZSBfX3gpOwoKCmV4dGVybiBk b3VibGUgbG9nMTAgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fbG9nMTAgKGRvdWJsZSBf X3gpOwoKCmV4dGVybiBkb3VibGUgbW9kZiAoZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpOyBl eHRlcm4gZG91YmxlIF9fbW9kZiAoZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpOwoKCgpleHRl cm4gZG91YmxlIGV4cG0xIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2V4cG0xIChkb3Vi bGUgX194KTsKCgpleHRlcm4gZG91YmxlIGxvZzFwIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJs ZSBfX2xvZzFwIChkb3VibGUgX194KTsKCgpleHRlcm4gZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gp OyBleHRlcm4gZG91YmxlIF9fbG9nYiAoZG91YmxlIF9feCk7CiMgMTQzICIvdXNyL2luY2x1ZGUv Yml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZG91YmxlIHBvdyAoZG91YmxlIF9feCwgZG91Ymxl IF9feSk7IGV4dGVybiBkb3VibGUgX19wb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOwoKCmV4 dGVybiBkb3VibGUgc3FydCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19zcXJ0IChkb3Vi bGUgX194KTsKCgoKZXh0ZXJuIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7 IGV4dGVybiBkb3VibGUgX19oeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7CgoKCgpleHRl cm4gZG91YmxlIGNicnQgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fY2JydCAoZG91Ymxl IF9feCk7CgoKCgoKCmV4dGVybiBkb3VibGUgY2VpbCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3Vi bGUgX19jZWlsIChkb3VibGUgX194KTsKCgpleHRlcm4gZG91YmxlIGZhYnMgKGRvdWJsZSBfX3gp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2ZhYnMgKGRvdWJs ZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGZsb29y IChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2Zsb29yIChkb3VibGUgX194KTsKCgpleHRl cm4gZG91YmxlIGZtb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOyBleHRlcm4gZG91YmxlIF9f Zm1vZCAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7CgoKCgpleHRlcm4gaW50IF9faXNpbmYgKGRv dWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBf X2Zpbml0ZSAoZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK CmV4dGVybiBpbnQgaXNpbmYgKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGluZm5hbiAoaW50IF9fZXJyb3Ip IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2luZm5hbiAoaW50 IF9fZXJyb3IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGRy ZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOyBleHRlcm4gZG91YmxlIF9fZHJlbSAoZG91Ymxl IF9feCwgZG91YmxlIF9feSk7CgoKCmV4dGVybiBkb3VibGUgc2lnbmlmaWNhbmQgKGRvdWJsZSBf X3gpOyBleHRlcm4gZG91YmxlIF9fc2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gpOwoKCgoKZXh0ZXJu IGRvdWJsZSBjb3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fY29weXNpZ24gKGRvdWJsZSBfX3gsIGRvdWJs ZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyAyMTcgIi91c3IvaW5jbHVkZS9i aXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBpbnQgX19pc25hbiAoZG91YmxlIF9fdmFsdWUpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbiAoZG91YmxlIF9f dmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGowIChk b3VibGUpOyBleHRlcm4gZG91YmxlIF9fajAgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgajEgKGRv dWJsZSk7IGV4dGVybiBkb3VibGUgX19qMSAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBqbiAoaW50 LCBkb3VibGUpOyBleHRlcm4gZG91YmxlIF9fam4gKGludCwgZG91YmxlKTsKZXh0ZXJuIGRvdWJs ZSB5MCAoZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX3kwIChkb3VibGUpOwpleHRlcm4gZG91Ymxl IHkxIChkb3VibGUpOyBleHRlcm4gZG91YmxlIF9feTEgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUg eW4gKGludCwgZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX3luIChpbnQsIGRvdWJsZSk7CgoKCgoK ZXh0ZXJuIGRvdWJsZSBlcmYgKGRvdWJsZSk7IGV4dGVybiBkb3VibGUgX19lcmYgKGRvdWJsZSk7 CmV4dGVybiBkb3VibGUgZXJmYyAoZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZmMgKGRvdWJs ZSk7CmV4dGVybiBkb3VibGUgbGdhbW1hIChkb3VibGUpOyBleHRlcm4gZG91YmxlIF9fbGdhbW1h IChkb3VibGUpOwpleHRlcm4gZG91YmxlIHRnYW1tYSAoZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBf X3RnYW1tYSAoZG91YmxlKTsKCgoKCmV4dGVybiBkb3VibGUgZ2FtbWEgKGRvdWJsZSk7IGV4dGVy biBkb3VibGUgX19nYW1tYSAoZG91YmxlKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBsZ2FtbWFfciAo ZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApOyBleHRlcm4gZG91YmxlIF9fbGdhbW1hX3IgKGRvdWJs ZSwgaW50ICpfX3NpZ25nYW1wKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSByaW50IChkb3VibGUgX194 KTsgZXh0ZXJuIGRvdWJsZSBfX3JpbnQgKGRvdWJsZSBfX3gpOwoKCmV4dGVybiBkb3VibGUgbmV4 dGFmdGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7IGV4dGVybiBkb3VibGUgX19uZXh0YWZ0ZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gZG91YmxlIHJlbWFpbmRlciAo ZG91YmxlIF9feCwgZG91YmxlIF9feSk7IGV4dGVybiBkb3VibGUgX19yZW1haW5kZXIgKGRvdWJs ZSBfX3gsIGRvdWJsZSBfX3kpOwoKCgpleHRlcm4gZG91YmxlIHNjYWxiIChkb3VibGUgX194LCBk b3VibGUgX19uKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxiIChkb3VibGUgX194LCBkb3VibGUgX19u KTsKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pOyBleHRlcm4g ZG91YmxlIF9fc2NhbGJuIChkb3VibGUgX194LCBpbnQgX19uKTsKCgpleHRlcm4gaW50IGlsb2di IChkb3VibGUgX194KTsgZXh0ZXJuIGludCBfX2lsb2diIChkb3VibGUgX194KTsKIyA2NCAiL3Vz ci9pbmNsdWRlL21hdGguaCIgMiAzCiMgODIgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVkZS9iaXRz L21hdGhjYWxscy5oIiAzCmV4dGVybiBmbG9hdCBhY29zZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZs b2F0IF9fYWNvc2YgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgYXNpbmYgKGZsb2F0IF9feCk7 IGV4dGVybiBmbG9hdCBfX2FzaW5mIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0IGF0YW5mIChm bG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19hdGFuZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9h dCBhdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fYXRhbjJmIChm bG9hdCBfX3ksIGZsb2F0IF9feCk7CgoKZXh0ZXJuIGZsb2F0IGNvc2YgKGZsb2F0IF9feCk7IGV4 dGVybiBmbG9hdCBfX2Nvc2YgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgc2luZiAoZmxvYXQg X194KTsgZXh0ZXJuIGZsb2F0IF9fc2luZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCB0YW5m IChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX190YW5mIChmbG9hdCBfX3gpOwojIDc4ICIvdXNy L2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZmxvYXQgY29zaGYgKGZsb2F0IF9f eCk7IGV4dGVybiBmbG9hdCBfX2Nvc2hmIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0IHNpbmhm IChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19zaW5oZiAoZmxvYXQgX194KTsKCmV4dGVybiBm bG9hdCB0YW5oZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fdGFuaGYgKGZsb2F0IF9feCk7 CgoKCmV4dGVybiBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2Fjb3No ZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBhc2luaGYgKGZsb2F0IF9feCk7IGV4dGVybiBm bG9hdCBfX2FzaW5oZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBhdGFuaGYgKGZsb2F0IF9f eCk7IGV4dGVybiBmbG9hdCBfX2F0YW5oZiAoZmxvYXQgX194KTsKCgoKCgpleHRlcm4gZmxvYXQg ZXhwZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fZXhwZiAoZmxvYXQgX194KTsKIyAxMDYg Ii91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBmbG9hdCBmcmV4cGYgKGZs b2F0IF9feCwgaW50ICpfX2V4cG9uZW50KTsgZXh0ZXJuIGZsb2F0IF9fZnJleHBmIChmbG9hdCBf X3gsIGludCAqX19leHBvbmVudCk7CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAoZmxvYXQgX194LCBp bnQgX19leHBvbmVudCk7IGV4dGVybiBmbG9hdCBfX2xkZXhwZiAoZmxvYXQgX194LCBpbnQgX19l eHBvbmVudCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2YgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBf X2xvZ2YgKGZsb2F0IF9feCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzEwZiAoZmxvYXQgX194KTsgZXh0 ZXJuIGZsb2F0IF9fbG9nMTBmIChmbG9hdCBfX3gpOwoKCmV4dGVybiBmbG9hdCBtb2RmZiAoZmxv YXQgX194LCBmbG9hdCAqX19pcHRyKTsgZXh0ZXJuIGZsb2F0IF9fbW9kZmYgKGZsb2F0IF9feCwg ZmxvYXQgKl9faXB0cik7CgoKCmV4dGVybiBmbG9hdCBleHBtMWYgKGZsb2F0IF9feCk7IGV4dGVy biBmbG9hdCBfX2V4cG0xZiAoZmxvYXQgX194KTsKCgpleHRlcm4gZmxvYXQgbG9nMXBmIChmbG9h dCBfX3gpOyBleHRlcm4gZmxvYXQgX19sb2cxcGYgKGZsb2F0IF9feCk7CgoKZXh0ZXJuIGZsb2F0 IGxvZ2JmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19sb2diZiAoZmxvYXQgX194KTsKIyAx NDMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBmbG9hdCBwb3dmIChm bG9hdCBfX3gsIGZsb2F0IF9feSk7IGV4dGVybiBmbG9hdCBfX3Bvd2YgKGZsb2F0IF9feCwgZmxv YXQgX195KTsKCgpleHRlcm4gZmxvYXQgc3FydGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBf X3NxcnRmIChmbG9hdCBfX3gpOwoKCgpleHRlcm4gZmxvYXQgaHlwb3RmIChmbG9hdCBfX3gsIGZs b2F0IF9feSk7IGV4dGVybiBmbG9hdCBfX2h5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOwoK CgoKZXh0ZXJuIGZsb2F0IGNicnRmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19jYnJ0ZiAo ZmxvYXQgX194KTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGNlaWxmIChmbG9hdCBfX3gpOyBleHRlcm4g ZmxvYXQgX19jZWlsZiAoZmxvYXQgX194KTsKCgpleHRlcm4gZmxvYXQgZmFic2YgKGZsb2F0IF9f eCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19mYWJzZiAoZmxv YXQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGZsb29y ZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fZmxvb3JmIChmbG9hdCBfX3gpOwoKCmV4dGVy biBmbG9hdCBmbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQgX19mbW9k ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mZiAoZmxvYXQg X192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5p dGVmIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRl cm4gaW50IGlzaW5mZiAoZmxvYXQgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwoKCmV4dGVybiBpbnQgZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGZsb2F0IGluZm5hbmYgKGludCBfX2Vycm9yKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2luZm5hbmYgKGludCBfX2Vy cm9yKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGRyZW1mIChm bG9hdCBfX3gsIGZsb2F0IF9feSk7IGV4dGVybiBmbG9hdCBfX2RyZW1mIChmbG9hdCBfX3gsIGZs b2F0IF9feSk7CgoKCmV4dGVybiBmbG9hdCBzaWduaWZpY2FuZGYgKGZsb2F0IF9feCk7IGV4dGVy biBmbG9hdCBfX3NpZ25pZmljYW5kZiAoZmxvYXQgX194KTsKCgoKCmV4dGVybiBmbG9hdCBjb3B5 c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 IGV4dGVybiBmbG9hdCBfX2NvcHlzaWduZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKIyAyMTcgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5o IiAzCmV4dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbmYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgajBmIChmbG9hdCk7IGV4dGVybiBm bG9hdCBfX2owZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgajFmIChmbG9hdCk7IGV4dGVybiBmbG9h dCBfX2oxZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgam5mIChpbnQsIGZsb2F0KTsgZXh0ZXJuIGZs b2F0IF9fam5mIChpbnQsIGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHkwZiAoZmxvYXQpOyBleHRlcm4g ZmxvYXQgX195MGYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHkxZiAoZmxvYXQpOyBleHRlcm4gZmxv YXQgX195MWYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHluZiAoaW50LCBmbG9hdCk7IGV4dGVybiBm bG9hdCBfX3luZiAoaW50LCBmbG9hdCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGVyZmYgKGZsb2F0KTsg ZXh0ZXJuIGZsb2F0IF9fZXJmZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgZXJmY2YgKGZsb2F0KTsg ZXh0ZXJuIGZsb2F0IF9fZXJmY2YgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IGxnYW1tYWYgKGZsb2F0 KTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgdGdhbW1hZiAo ZmxvYXQpOyBleHRlcm4gZmxvYXQgX190Z2FtbWFmIChmbG9hdCk7CgoKCgpleHRlcm4gZmxvYXQg Z2FtbWFmIChmbG9hdCk7IGV4dGVybiBmbG9hdCBfX2dhbW1hZiAoZmxvYXQpOwoKCgoKCgpleHRl cm4gZmxvYXQgbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKTsgZXh0ZXJuIGZsb2F0 IF9fbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKTsKCgoKCgoKZXh0ZXJuIGZsb2F0 IHJpbnRmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19yaW50ZiAoZmxvYXQgX194KTsKCgpl eHRlcm4gZmxvYXQgbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dGFmdGVyZiAoZmxvYXQgX194LCBm bG9hdCBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gZmxvYXQg cmVtYWluZGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQgX19yZW1haW5k ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSk7CgoKCmV4dGVybiBmbG9hdCBzY2FsYmYgKGZsb2F0 IF9feCwgZmxvYXQgX19uKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJmIChmbG9hdCBfX3gsIGZsb2F0 IF9fbik7CgoKCmV4dGVybiBmbG9hdCBzY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24pOyBleHRl cm4gZmxvYXQgX19zY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24pOwoKCmV4dGVybiBpbnQgaWxv Z2JmIChmbG9hdCBfX3gpOyBleHRlcm4gaW50IF9faWxvZ2JmIChmbG9hdCBfX3gpOwojIDgzICIv dXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA5OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2Jp dHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NsIChsb25nIGRvdWJsZSBf X3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hY29zbCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVy biBsb25nIGRvdWJsZSBhc2lubCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fYXNpbmwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbmwgKGxv bmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW5sIChsb25nIGRvdWJsZSBf X3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRv dWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFuMmwgKGxvbmcgZG91YmxlIF9feSwg bG9uZyBkb3VibGUgX194KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgY29zbCAobG9uZyBkb3VibGUg X194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zbCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVy biBsb25nIGRvdWJsZSBzaW5sIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUg X19zaW5sIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmwgKGxvbmcg ZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RhbmwgKGxvbmcgZG91YmxlIF9feCk7 CiMgNzggIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJs ZSBjb3NobCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zaGwgKGxv bmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2luaGwgKGxvbmcgZG91YmxlIF9f eCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpbmhsIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJu IGxvbmcgZG91YmxlIHRhbmhsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUg X190YW5obCAobG9uZyBkb3VibGUgX194KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NobCAo bG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2hsIChsb25nIGRvdWJs ZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5obCAobG9uZyBkb3VibGUgX194KTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcg ZG91YmxlIGF0YW5obCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRh bmhsIChsb25nIGRvdWJsZSBfX3gpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBsIChsb25n IGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBsIChsb25nIGRvdWJsZSBfX3gp OwojIDEwNiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcgZG91 YmxlIGZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpOyBleHRlcm4gbG9u ZyBkb3VibGUgX19mcmV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KTsKCgpl eHRlcm4gbG9uZyBkb3VibGUgbGRleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50 KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGRleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4 cG9uZW50KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nbCAobG9uZyBkb3VibGUgX194KTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fbG9nbCAobG9uZyBkb3VibGUgX194KTsKCgpleHRlcm4gbG9uZyBk b3VibGUgbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cx MGwgKGxvbmcgZG91YmxlIF9feCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG1vZGZsIChsb25nIGRv dWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpOyBleHRlcm4gbG9uZyBkb3VibGUgX19tb2Rm bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19pcHRyKTsKCgoKZXh0ZXJuIGxvbmcg ZG91YmxlIGV4cG0xbCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhw bTFsIChsb25nIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cxcGwgKGxvbmcg ZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzFwbCAobG9uZyBkb3VibGUgX194 KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nYmwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBs b25nIGRvdWJsZSBfX2xvZ2JsIChsb25nIGRvdWJsZSBfX3gpOwojIDE0MyAiL3Vzci9pbmNsdWRl L2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcgZG91YmxlIHBvd2wgKGxvbmcgZG91Ymxl IF9feCwgbG9uZyBkb3VibGUgX195KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93bCAobG9uZyBk b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBzcXJ0bCAo bG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91Ymxl IF9feCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9feCwgbG9u ZyBkb3VibGUgX195KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9faHlwb3RsIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY2JydGwgKGxvbmcg ZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NicnRsIChsb25nIGRvdWJsZSBfX3gp OwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY2VpbGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX2NlaWxsIChsb25nIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBsb25nIGRv dWJsZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmxvb3JsIChsb25nIGRvdWJs ZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbG9vcmwgKGxvbmcgZG91YmxlIF9feCk7CgoK ZXh0ZXJuIGxvbmcgZG91YmxlIGZtb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f eSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Ztb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91 YmxlIF9feSk7CgoKCgpleHRlcm4gaW50IF9faXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWwgKGxvbmcg ZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBp bnQgaXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKZXh0ZXJuIGludCBmaW5pdGVsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgaW5mbmFubCAoaW50 IF9fZXJyb3IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9faW5mbmFubCAoaW50IF9fZXJyb3IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl eHRlcm4gbG9uZyBkb3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195 KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi bGUgX195KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpZ25pZmljYW5kbCAobG9uZyBkb3VibGUg X194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2lnbmlmaWNhbmRsIChsb25nIGRvdWJsZSBfX3gp OwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvcHlzaWdubCAobG9uZyBkb3VibGUgX194LCBsb25n IGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fY29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDIxNyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxz LmgiIDMKZXh0ZXJuIGludCBfX2lzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFubCAobG9uZyBkb3VibGUgX192 YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBq MGwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajBsIChsb25nIGRvdWJsZSk7 CmV4dGVybiBsb25nIGRvdWJsZSBqMWwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fajFsIChsb25nIGRvdWJsZSk7CmV4dGVybiBsb25nIGRvdWJsZSBqbmwgKGludCwgbG9uZyBk b3VibGUpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qbmwgKGludCwgbG9uZyBkb3VibGUpOwpleHRl cm4gbG9uZyBkb3VibGUgeTBsIChsb25nIGRvdWJsZSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kw bCAobG9uZyBkb3VibGUpOwpleHRlcm4gbG9uZyBkb3VibGUgeTFsIChsb25nIGRvdWJsZSk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX3kxbCAobG9uZyBkb3VibGUpOwpleHRlcm4gbG9uZyBkb3VibGUg eW5sIChpbnQsIGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feW5sIChpbnQsIGxv bmcgZG91YmxlKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXJmbCAobG9uZyBkb3VibGUpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19lcmZsIChsb25nIGRvdWJsZSk7CmV4dGVybiBsb25nIGRvdWJs ZSBlcmZjbCAobG9uZyBkb3VibGUpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9uZyBk b3VibGUpOwpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbCAobG9uZyBkb3VibGUpOyBleHRlcm4g bG9uZyBkb3VibGUgX19sZ2FtbWFsIChsb25nIGRvdWJsZSk7CmV4dGVybiBsb25nIGRvdWJsZSB0 Z2FtbWFsIChsb25nIGRvdWJsZSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RnYW1tYWwgKGxvbmcg ZG91YmxlKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBnYW1tYWwgKGxvbmcgZG91YmxlKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fZ2FtbWFsIChsb25nIGRvdWJsZSk7CgoKCgoKCmV4dGVybiBsb25n IGRvdWJsZSBsZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApOyBleHRlcm4g bG9uZyBkb3VibGUgX19sZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApOwoK CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmludGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBs b25nIGRvdWJsZSBfX3JpbnRsIChsb25nIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBsb25nIGRvdWJs ZSBuZXh0YWZ0ZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0YWZ0ZXJsIChsb25n IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSByZW1haW5kZXJsIChsb25nIGRvdWJsZSBfX3gsIGxv bmcgZG91YmxlIF9feSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JlbWFpbmRlcmwgKGxvbmcgZG91 YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibCAo bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pOyBleHRlcm4gbG9uZyBkb3VibGUgX19z Y2FsYmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKTsKCgoKZXh0ZXJuIGxvbmcg ZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbik7IGV4dGVybiBsb25nIGRv dWJsZSBfX3NjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbik7CgoKZXh0ZXJuIGludCBp bG9nYmwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBpbnQgX19pbG9nYmwgKGxvbmcgZG91Ymxl IF9feCk7CiMgMTAwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyAxMTMgIi91c3IvaW5jbHVk ZS9tYXRoLmgiIDMKZXh0ZXJuIGludCBzaWduZ2FtOwojIDIzNiAiL3Vzci9pbmNsdWRlL21hdGgu aCIgMwp0eXBlZGVmIGVudW0KewogIF9JRUVFXyA9IC0xLAogIF9TVklEXywKICBfWE9QRU5fLAog IF9QT1NJWF8sCiAgX0lTT0NfCn0gX0xJQl9WRVJTSU9OX1RZUEU7CgoKCgpleHRlcm4gX0xJQl9W RVJTSU9OX1RZUEUgX0xJQl9WRVJTSU9OOwojIDI2MSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpz dHJ1Y3QgZXhjZXB0aW9uCgogIHsKICAgIGludCB0eXBlOwogICAgY2hhciAqbmFtZTsKICAgIGRv dWJsZSBhcmcxOwogICAgZG91YmxlIGFyZzI7CiAgICBkb3VibGUgcmV0dmFsOwogIH07CgoKCgpl eHRlcm4gaW50IG1hdGhlcnIgKHN0cnVjdCBleGNlcHRpb24gKl9fZXhjKSA7CiMgMjg5ICIvdXNy L2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4xLjEvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9mbG9hdC5oIiAxIDMKIyAyOTAgIi91c3Iv aW5jbHVkZS9tYXRoLmgiIDIgMwojIDM0OCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMSAzCiMgMjM0ICIvdXNyL2luY2x1ZGUvYml0 cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBfX3NnbiAoZG91YmxlKTsg ZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBfX3NnbiAoZG91YmxlIF9feCkgeyByZXR1cm4gX194ID09 IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfSBleHRlcm4gX19pbmxpbmUg ZmxvYXQgX19zZ25mIChmbG9hdCk7IGV4dGVybiBfX2lubGluZSBmbG9hdCBfX3NnbmYgKGZsb2F0 IF9feCkgeyByZXR1cm4gX194ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4w KTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ25sIChsb25nIGRvdWJsZSk7IGV4 dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBfX3NnbmwgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1 cm4gX194ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfQoKCmV4dGVy biBfX2lubGluZSBkb3VibGUgX19wb3cyIChkb3VibGUpOyBleHRlcm4gX19pbmxpbmUgZG91Ymxl IF9fcG93MiAoZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdp c3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyBfX2V4dGVuc2lvbl9fIGxvbmcgbG9uZyBpbnQg X19wID0gKGxvbmcgbG9uZyBpbnQpIF9feDsgaWYgKF9feCA9PSAobG9uZyBkb3VibGUpIF9fcCkg eyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKDEu MCksICJ1IiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZs ZAklJXN0KDApXG5cdCIgImZybmRpbnQJCQkjIGludCh4KVxuXHQiICJmeGNoXG5cdCIgImZzdWIJ JSVzdCgxKQkJIyBmcmFjdCh4KVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCkpIC0gMVxuXHQi IDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX192YWx1 ZSArPSAxLjA7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6 ICIwIiAoX192YWx1ZSksICJ1IiAoX19leHBvbmVudCkpOyByZXR1cm4gX192YWx1ZTsgfSBleHRl cm4gX19pbmxpbmUgZmxvYXQgX19wb3cyZiAoZmxvYXQpOyBleHRlcm4gX19pbmxpbmUgZmxvYXQg X19wb3cyZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lz dGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7IF9fZXh0ZW5zaW9uX18gbG9uZyBsb25nIGludCBf X3AgPSAobG9uZyBsb25nIGludCkgX194OyBpZiAoX194ID09IChsb25nIGRvdWJsZSkgX19wKSB7 IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoMS4w KSwgInUiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19hc20gX192b2xhdGlsZV9fICgiZmxk CSUlc3QoMClcblx0IiAiZnJuZGludAkJCSMgaW50KHgpXG5cdCIgImZ4Y2hcblx0IiAiZnN1Ygkl JXN0KDEpCQkjIGZyYWN0KHgpXG5cdCIgImYyeG0xCQkJIyAyXihmcmFjdCh4KSkgLSAxXG5cdCIg OiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX3ZhbHVl ICs9IDEuMDsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDog IjAiIChfX3ZhbHVlKSwgInUiIChfX2V4cG9uZW50KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVy biBfX2lubGluZSBsb25nIGRvdWJsZSBfX3BvdzJsIChsb25nIGRvdWJsZSk7IGV4dGVybiBfX2lu bGluZSBsb25nIGRvdWJsZSBfX3BvdzJsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9u ZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsgX19leHRl bnNpb25fXyBsb25nIGxvbmcgaW50IF9fcCA9IChsb25nIGxvbmcgaW50KSBfX3g7IGlmIChfX3gg PT0gKGxvbmcgZG91YmxlKSBfX3ApIHsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9 dCIgKF9fdmFsdWUpIDogIjAiICgxLjApLCAidSIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBf X2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQJJSVzdCgwKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeClc blx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeClcblx0IiAiZjJ4bTEJCQkj IDJeKGZyYWN0KHgpKSAtIDFcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50 KSA6ICIwIiAoX194KSk7IF9fdmFsdWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2Nh bGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsg cmV0dXJuIF9fdmFsdWU7IH0KIyAyODMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIg MwpleHRlcm4gX19pbmxpbmUgdm9pZCBfX3NpbmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpfX3Np bngsIGRvdWJsZSAqX19jb3N4KTsKZXh0ZXJuIF9faW5saW5lIHZvaWQKX19zaW5jb3MgKGRvdWJs ZSBfX3gsIGRvdWJsZSAqX19zaW54LCBkb3VibGUgKl9fY29zeCkKewogIHJlZ2lzdGVyIGxvbmcg ZG91YmxlIF9fY29zcjsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19zaW5yOyBfX2FzbSBfX3ZvbGF0 aWxlX18gKCJmc2luY29zXG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInRlc3RsCSQweDQwMCwgJSVl YXhcblx0IiAianoJMWZcblx0IiAiZmxkcGlcblx0IiAiZmFkZAklJXN0KDApXG5cdCIgImZ4Y2gJ JSVzdCgxKVxuXHQiICIyOiBmcHJlbTFcblx0IiAiZm5zdHN3CSUlYXhcblx0IiAidGVzdGwJJDB4 NDAwLCAlJWVheFxuXHQiICJqbnoJMmJcblx0IiAiZnN0cAklJXN0KDEpXG5cdCIgImZzaW5jb3Nc blx0IiAiMToiIDogIj10IiAoX19jb3NyKSwgIj11IiAoX19zaW5yKSA6ICIwIiAoX194KSk7ICpf X3NpbnggPSBfX3NpbnI7ICpfX2Nvc3ggPSBfX2Nvc3I7Cn0KCmV4dGVybiBfX2lubGluZSB2b2lk IF9fc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4KTsKZXh0 ZXJuIF9faW5saW5lIHZvaWQKX19zaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZs b2F0ICpfX2Nvc3gpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX2Nvc3I7IHJlZ2lzdGVyIGxv bmcgZG91YmxlIF9fc2lucjsgX19hc20gX192b2xhdGlsZV9fICgiZnNpbmNvc1xuXHQiICJmbnN0 c3cJJSVheFxuXHQiICJ0ZXN0bAkkMHg0MDAsICUlZWF4XG5cdCIgImp6CTFmXG5cdCIgImZsZHBp XG5cdCIgImZhZGQJJSVzdCgwKVxuXHQiICJmeGNoCSUlc3QoMSlcblx0IiAiMjogZnByZW0xXG5c dCIgImZuc3RzdwklJWF4XG5cdCIgInRlc3RsCSQweDQwMCwgJSVlYXhcblx0IiAiam56CTJiXG5c dCIgImZzdHAJJSVzdCgxKVxuXHQiICJmc2luY29zXG5cdCIgIjE6IiA6ICI9dCIgKF9fY29zciks ICI9dSIgKF9fc2lucikgOiAiMCIgKF9feCkpOyAqX19zaW54ID0gX19zaW5yOyAqX19jb3N4ID0g X19jb3NyOwp9CgpleHRlcm4gX19pbmxpbmUgdm9pZCBfX3NpbmNvc2wgKGxvbmcgZG91YmxlIF9f eCwgbG9uZyBkb3VibGUgKl9fc2lueCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9u ZyBkb3VibGUgKl9fY29zeCk7CmV4dGVybiBfX2lubGluZSB2b2lkCl9fc2luY29zbCAobG9uZyBk b3VibGUgX194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KQp7CiAg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX19jb3NyOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3NpbnI7 IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzaW5jb3Ncblx0IiAiZm5zdHN3CSUlYXhcblx0IiAidGVz dGwJJDB4NDAwLCAlJWVheFxuXHQiICJqegkxZlxuXHQiICJmbGRwaVxuXHQiICJmYWRkCSUlc3Qo MClcblx0IiAiZnhjaAklJXN0KDEpXG5cdCIgIjI6IGZwcmVtMVxuXHQiICJmbnN0c3cJJSVheFxu XHQiICJ0ZXN0bAkkMHg0MDAsICUlZWF4XG5cdCIgImpuegkyYlxuXHQiICJmc3RwCSUlc3QoMSlc blx0IiAiZnNpbmNvc1xuXHQiICIxOiIgOiAiPXQiIChfX2Nvc3IpLCAiPXUiIChfX3NpbnIpIDog IjAiIChfX3gpKTsgKl9fc2lueCA9IF9fc2lucjsgKl9fY29zeCA9IF9fY29zcjsKfQojIDMyOCAi L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBsb25nIGRv dWJsZSBfX2V4cG0xbCAobG9uZyBkb3VibGUpOyBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUg X19leHBtMWwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVl OyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyByZWdpc3RlciBsb25nIGRvdWJsZSBf X3RlbXA7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGwyZQkJCSMgZV54IC0gMSA9IDJeKHggKiBs b2cyKGUpKSAtIDFcblx0IiAiZm11bAklJXN0KDEpCQkjIHggKiBsb2cyKGUpXG5cdCIgImZzdAkl JXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGludCh4ICogbG9nMihlKSlcblx0IiAiZnhjaFxuXHQi ICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5cdCIgImYyeG0xCQkJIyAyXihm cmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiICJmc2NhbGUJCQkjIDJeKHggKiBsb2cyKGUpKSAt IDJeKGludCh4ICogbG9nMihlKSkpXG5cdCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBv bmVudCkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUJCQkjIDJeaW50 KHggKiBsb2cyKGUpKVxuXHQiIDogIj10IiAoX190ZW1wKSA6ICIwIiAoMS4wKSwgInUiIChfX2V4 cG9uZW50KSk7IF9fdGVtcCAtPSAxLjA7IHJldHVybiBfX3RlbXAgKyBfX3ZhbHVlOyB9CiMgMzQ4 ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRvdWJs ZSBleHAgKGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBkb3VibGUgZXhwIChkb3VibGUgX194KSB7 IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhw b25lbnQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGwyZQkJCSMgZV54ID0gMl4oeCAqIGxvZzIo ZSkpXG5cdCIgImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQiICJmc3QJJSVzdCgxKVxu XHQiICJmcm5kaW50CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1Ygkl JXN0KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCAq IGxvZzIoZSkpKSAtIDFcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6 ICIwIiAoX194KSk7IF9fdmFsdWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUi IDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsgcmV0 dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGV4cGYgKGZsb2F0KTsgZXh0ZXJu IF9faW5saW5lIGZsb2F0IGV4cGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBf X3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyBfX2FzbSBfX3ZvbGF0aWxl X18gKCJmbGRsMmUJCQkjIGVeeCA9IDJeKHggKiBsb2cyKGUpKVxuXHQiICJmbXVsCSUlc3QoMSkJ CSMgeCAqIGxvZzIoZSlcblx0IiAiZnN0CSUlc3QoMSlcblx0IiAiZnJuZGludAkJCSMgaW50KHgg KiBsb2cyKGUpKVxuXHQiICJmeGNoXG5cdCIgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4ICogbG9n MihlKSlcblx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0KHggKiBsb2cyKGUpKSkgLSAxXG5cdCIgOiAi PXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX3ZhbHVlICs9 IDEuMDsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAi IChfX3ZhbHVlKSwgInUiIChfX2V4cG9uZW50KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBf X2lubGluZSBsb25nIGRvdWJsZSBleHBsIChsb25nIGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBs b25nIGRvdWJsZSBleHBsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg X192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsgX19hc20gX192b2xhdGls ZV9fICgiZmxkbDJlCQkJIyBlXnggPSAyXih4ICogbG9nMihlKSlcblx0IiAiZm11bAklJXN0KDEp CQkjIHggKiBsb2cyKGUpXG5cdCIgImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGludCh4 ICogbG9nMihlKSlcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxv ZzIoZSkpXG5cdCIgImYyeG0xCQkJIyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiIDog Ij10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX192YWx1ZSAr PSAxLjA7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIw IiAoX192YWx1ZSksICJ1IiAoX19leHBvbmVudCkpOyByZXR1cm4gX192YWx1ZTsgfQpleHRlcm4g X19pbmxpbmUgbG9uZyBkb3VibGUgX19leHBsIChsb25nIGRvdWJsZSk7IGV4dGVybiBfX2lubGlu ZSBsb25nIGRvdWJsZSBfX2V4cGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRv dWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyBfX2FzbSBfX3Zv bGF0aWxlX18gKCJmbGRsMmUJCQkjIGVeeCA9IDJeKHggKiBsb2cyKGUpKVxuXHQiICJmbXVsCSUl c3QoMSkJCSMgeCAqIGxvZzIoZSlcblx0IiAiZnN0CSUlc3QoMSlcblx0IiAiZnJuZGludAkJCSMg aW50KHggKiBsb2cyKGUpKVxuXHQiICJmeGNoXG5cdCIgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4 ICogbG9nMihlKSlcblx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0KHggKiBsb2cyKGUpKSkgLSAxXG5c dCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX3Zh bHVlICs9IDEuMDsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUp IDogIjAiIChfX3ZhbHVlKSwgInUiIChfX2V4cG9uZW50KSk7IHJldHVybiBfX3ZhbHVlOyB9CgoK ZXh0ZXJuIF9faW5saW5lIGRvdWJsZSB0YW4gKGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBkb3Vi bGUgdGFuIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lz dGVyIGxvbmcgZG91YmxlIF9fdmFsdWUyIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7IF9f YXNtIF9fdm9sYXRpbGVfXyAoImZwdGFuIiA6ICI9dCIgKF9fdmFsdWUyKSwgIj11IiAoX192YWx1 ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQg dGFuZiAoZmxvYXQpOyBleHRlcm4gX19pbmxpbmUgZmxvYXQgdGFuZiAoZmxvYXQgX194KSB7IHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWUy IF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwdGFu IiA6ICI9dCIgKF9fdmFsdWUyKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4g X192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgdGFubCAobG9uZyBkb3VibGUp OyBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgdGFubCAobG9uZyBkb3VibGUgX194KSB7IHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWUy IF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwdGFu IiA6ICI9dCIgKF9fdmFsdWUyKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4g X192YWx1ZTsgfQojIDM2NyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVy biBfX2lubGluZSBkb3VibGUgYXRhbjIgKGRvdWJsZSwgZG91YmxlKTsgZXh0ZXJuIF9faW5saW5l IGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRv dWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1 ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBl eHRlcm4gX19pbmxpbmUgZmxvYXQgYXRhbjJmIChmbG9hdCwgZmxvYXQpOyBleHRlcm4gX19pbmxp bmUgZmxvYXQgYXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRv dWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1 ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBl eHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbjJsIChsb25nIGRvdWJsZSwgbG9uZyBkb3Vi bGUpOyBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbjJsIChsb25nIGRvdWJsZSBfX3ks IGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBf X3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAo X195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfQpleHRlcm4gX19pbmxpbmUgbG9uZyBk b3VibGUgX19hdGFuMmwgKGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSk7IGV4dGVybiBfX2lubGlu ZSBsb25nIGRvdWJsZSBfX2F0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gp IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnBh dGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSkiKTsg cmV0dXJuIF9fdmFsdWU7IH0KCgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGZtb2QgKGRvdWJsZSwg ZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBmbW9kIChkb3VibGUgX194LCBkb3VibGUg X195KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAo IjE6CWZwcmVtXG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10 IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4g X192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgZm1vZGYgKGZsb2F0LCBmbG9hdCk7IGV4 dGVybiBfX2lubGluZSBmbG9hdCBmbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmVnaXN0 ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW1cblx0 IiAiZm5zdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSA6 ICIwIiAoX194KSwgInUiIChfX3kpIDogImF4IiwgImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IGV4 dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBmbW9kbCAobG9uZyBkb3VibGUsIGxvbmcgZG91Ymxl KTsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGZtb2RsIChsb25nIGRvdWJsZSBfX3gsIGxv bmcgZG91YmxlIF9feSkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3Zv bGF0aWxlX18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpw CTFiIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2Mi KTsgcmV0dXJuIF9fdmFsdWU7IH0KIyAzODIgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUu aCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlIHBvdyAoZG91YmxlLCBkb3VibGUpOyBleHRlcm4g X19pbmxpbmUgZG91YmxlIHBvdyAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgeyByZWdpc3RlciBs b25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyBfX2V4 dGVuc2lvbl9fIGxvbmcgbG9uZyBpbnQgX19wID0gKGxvbmcgbG9uZyBpbnQpIF9feTsgaWYgKF9f eCA9PSAwLjAgJiYgX195ID4gMC4wKSByZXR1cm4gMC4wOyBpZiAoX195ID09IChkb3VibGUpIF9f cCkgeyBsb25nIGRvdWJsZSBfX3IgPSAxLjA7IGlmIChfX3AgPT0gMCkgcmV0dXJuIDEuMDsgaWYg KF9fcCA8IDApIHsgX19wID0gLV9fcDsgX194ID0gMS4wIC8gX194OyB9IHdoaWxlICgxKSB7IGlm IChfX3AgJiAxKSBfX3IgKj0gX194OyBfX3AgPj49IDE7IGlmIChfX3AgPT0gMCkgcmV0dXJuIF9f cjsgX194ICo9IF9feDsgfSB9IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZ5bDJ4IiA6ICI9dCIgKF9f dmFsdWUpIDogIjAiIChfX3gpLCAidSIgKDEuMCkgOiAic3QoMSkiKTsgX19hc20gX192b2xhdGls ZV9fICgiZm11bAklJXN0KDEpCQkjIHkgKiBsb2cyKHgpXG5cdCIgImZzdAklJXN0KDEpXG5cdCIg ImZybmRpbnQJCQkjIGludCh5ICogbG9nMih4KSlcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3Qo MSkJCSMgZnJhY3QoeSAqIGxvZzIoeCkpXG5cdCIgImYyeG0xCQkJIyAyXihmcmFjdCh5ICogbG9n Mih4KSkpIC0gMVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAi IChfX3kpLCAiMSIgKF9fdmFsdWUpKTsgX192YWx1ZSArPSAxLjA7IF9fYXNtIF9fdm9sYXRpbGVf XyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX192YWx1ZSksICJ1IiAoX19leHBv bmVudCkpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgcG93ZiAoZmxv YXQsIGZsb2F0KTsgZXh0ZXJuIF9faW5saW5lIGZsb2F0IHBvd2YgKGZsb2F0IF9feCwgZmxvYXQg X195KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fZXhwb25lbnQ7IF9fZXh0ZW5zaW9uX18gbG9uZyBsb25nIGludCBfX3AgPSAobG9uZyBsb25n IGludCkgX195OyBpZiAoX194ID09IDAuMCAmJiBfX3kgPiAwLjApIHJldHVybiAwLjA7IGlmIChf X3kgPT0gKGRvdWJsZSkgX19wKSB7IGxvbmcgZG91YmxlIF9fciA9IDEuMDsgaWYgKF9fcCA9PSAw KSByZXR1cm4gMS4wOyBpZiAoX19wIDwgMCkgeyBfX3AgPSAtX19wOyBfX3ggPSAxLjAgLyBfX3g7 IH0gd2hpbGUgKDEpIHsgaWYgKF9fcCAmIDEpIF9fciAqPSBfX3g7IF9fcCA+Pj0gMTsgaWYgKF9f cCA9PSAwKSByZXR1cm4gX19yOyBfX3ggKj0gX194OyB9IH0gX19hc20gX192b2xhdGlsZV9fICgi ZnlsMngiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoMS4wKSA6ICJzdCgxKSIp OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbXVsCSUlc3QoMSkJCSMgeSAqIGxvZzIoeClcblx0IiAi ZnN0CSUlc3QoMSlcblx0IiAiZnJuZGludAkJCSMgaW50KHkgKiBsb2cyKHgpKVxuXHQiICJmeGNo XG5cdCIgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh5ICogbG9nMih4KSlcblx0IiAiZjJ4bTEJCQkj IDJeKGZyYWN0KHkgKiBsb2cyKHgpKSkgLSAxXG5cdCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAo X19leHBvbmVudCkgOiAiMCIgKF9feSksICIxIiAoX192YWx1ZSkpOyBfX3ZhbHVlICs9IDEuMDsg X19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3Zh bHVlKSwgInUiIChfX2V4cG9uZW50KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGlu ZSBsb25nIGRvdWJsZSBwb3dsIChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUpOyBleHRlcm4gX19p bmxpbmUgbG9uZyBkb3VibGUgcG93bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19l eHBvbmVudDsgX19leHRlbnNpb25fXyBsb25nIGxvbmcgaW50IF9fcCA9IChsb25nIGxvbmcgaW50 KSBfX3k7IGlmIChfX3ggPT0gMC4wICYmIF9feSA+IDAuMCkgcmV0dXJuIDAuMDsgaWYgKF9feSA9 PSAoZG91YmxlKSBfX3ApIHsgbG9uZyBkb3VibGUgX19yID0gMS4wOyBpZiAoX19wID09IDApIHJl dHVybiAxLjA7IGlmIChfX3AgPCAwKSB7IF9fcCA9IC1fX3A7IF9feCA9IDEuMCAvIF9feDsgfSB3 aGlsZSAoMSkgeyBpZiAoX19wICYgMSkgX19yICo9IF9feDsgX19wID4+PSAxOyBpZiAoX19wID09 IDApIHJldHVybiBfX3I7IF9feCAqPSBfX3g7IH0gfSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeWwy eCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiICgxLjApIDogInN0KDEpIik7IF9f YXNtIF9fdm9sYXRpbGVfXyAoImZtdWwJJSVzdCgxKQkJIyB5ICogbG9nMih4KVxuXHQiICJmc3QJ JSVzdCgxKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeSAqIGxvZzIoeCkpXG5cdCIgImZ4Y2hcblx0 IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHkgKiBsb2cyKHgpKVxuXHQiICJmMnhtMQkJCSMgMl4o ZnJhY3QoeSAqIGxvZzIoeCkpKSAtIDFcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4 cG9uZW50KSA6ICIwIiAoX195KSwgIjEiIChfX3ZhbHVlKSk7IF9fdmFsdWUgKz0gMS4wOyBfX2Fz bSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUp LCAidSIgKF9fZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA0MjYgIi91c3IvaW5jbHVk ZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlIHNxcnQgKGRvdWJs ZSk7IGV4dGVybiBfX2lubGluZSBkb3VibGUgc3FydCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBk b3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVz dWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgZmxv YXQgc3FydGYgKGZsb2F0KTsgZXh0ZXJuIF9faW5saW5lIGZsb2F0IHNxcnRmIChmbG9hdCBfX3gp IHsgcmVnaXN0ZXIgZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6 ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4g X19pbmxpbmUgbG9uZyBkb3VibGUgc3FydGwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIF9faW5saW5l IGxvbmcgZG91YmxlIHNxcnRsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0 KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfQpleHRlcm4gX19pbmxpbmUgbG9uZyBk b3VibGUgX19zcXJ0bCAobG9uZyBkb3VibGUpOyBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUg X19zcXJ0bCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0 OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9f eCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KCgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGZhYnMgKGRv dWJsZSk7IGV4dGVybiBfX2lubGluZSBkb3VibGUgZmFicyAoZG91YmxlIF9feCkgeyByZXR1cm4g X19idWlsdGluX2ZhYnMgKF9feCk7IH0KZXh0ZXJuIF9faW5saW5lIGZsb2F0IGZhYnNmIChmbG9h dCk7IGV4dGVybiBfX2lubGluZSBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSB7IHJldHVybiBfX2J1 aWx0aW5fZmFic2YgKF9feCk7IH0KZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGZhYnNsIChs b25nIGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBmYWJzbCAobG9uZyBkb3Vi bGUgX194KSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2wgKF9feCk7IH0KZXh0ZXJuIF9faW5saW5l IGxvbmcgZG91YmxlIF9fZmFic2wgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGxvbmcg ZG91YmxlIF9fZmFic2wgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnNs IChfX3gpOyB9CgoKCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgc2luIChkb3VibGUpOyBleHRl cm4gX19pbmxpbmUgZG91YmxlIHNpbiAoZG91YmxlIF9feCkgeyByZWdpc3RlciBkb3VibGUgX19y ZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzaW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAi IChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBzaW5mIChm bG9hdCk7IGV4dGVybiBfX2lubGluZSBmbG9hdCBzaW5mIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIg ZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzaW4iIDogIj10IiAoX19yZXN1 bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IGV4dGVybiBfX2lubGluZSBsb25n IGRvdWJsZSBzaW5sIChsb25nIGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBz aW5sIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9f YXNtIF9fdm9sYXRpbGVfXyAoImZzaW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsg cmV0dXJuIF9fcmVzdWx0OyB9CgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGNvcyAoZG91YmxlKTsg ZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBjb3MgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgZG91Ymxl IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmY29zIiA6ICI9dCIgKF9fcmVzdWx0KSA6 ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgY29z ZiAoZmxvYXQpOyBleHRlcm4gX19pbmxpbmUgZmxvYXQgY29zZiAoZmxvYXQgX194KSB7IHJlZ2lz dGVyIGZsb2F0IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmY29zIiA6ICI9dCIgKF9f cmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUg bG9uZyBkb3VibGUgY29zbCAobG9uZyBkb3VibGUpOyBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3Vi bGUgY29zbCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0 OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmY29zIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194 KSk7IHJldHVybiBfX3Jlc3VsdDsgfQoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBhdGFuIChkb3Vi bGUpOyBleHRlcm4gX19pbmxpbmUgZG91YmxlIGF0YW4gKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIg ZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQxOyBmcGF0YW4iIDogIj10 IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfSBl eHRlcm4gX19pbmxpbmUgZmxvYXQgYXRhbmYgKGZsb2F0KTsgZXh0ZXJuIF9faW5saW5lIGZsb2F0 IGF0YW5mIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9s YXRpbGVfXyAoImZsZDE7IGZwYXRhbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAi c3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBh dGFubCAobG9uZyBkb3VibGUpOyBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbmwgKGxv bmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192 b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6 ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0KZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBsb2cg KGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBkb3VibGUgbG9nIChkb3VibGUgX194KSB7IHJlZ2lz dGVyIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbG4yOyBmeGNoOyBm eWwyeCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9f cmVzdWx0OyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBsb2dmIChmbG9hdCk7IGV4dGVybiBfX2lu bGluZSBmbG9hdCBsb2dmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgZmxvYXQgX19yZXN1bHQ7IF9f YXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMjsgZnhjaDsgZnlsMngiIDogIj10IiAoX19yZXN1bHQp IDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxp bmUgbG9uZyBkb3VibGUgbG9nbCAobG9uZyBkb3VibGUpOyBleHRlcm4gX19pbmxpbmUgbG9uZyBk b3VibGUgbG9nbCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVz dWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsbjI7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9f cmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0KZXh0ZXJu IF9faW5saW5lIGRvdWJsZSBsb2cxMCAoZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBs b2cxMCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9s YXRpbGVfXyAoImZsZGxnMjsgZnhjaDsgZnlsMngiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChf X3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQg bG9nMTBmIChmbG9hdCk7IGV4dGVybiBfX2lubGluZSBmbG9hdCBsb2cxMGYgKGZsb2F0IF9feCkg eyByZWdpc3RlciBmbG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbGcyOyBm eGNoOyBmeWwyeCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0 dXJuIF9fcmVzdWx0OyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBsb2cxMGwgKGxvbmcg ZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGxvZzEwbCAobG9uZyBkb3VibGUg X194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18g KCJmbGRsZzI7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJz dCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0KCmV4dGVybiBfX2lubGluZSBkb3VibGUgYXNpbiAo ZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBhc2luIChkb3VibGUgX194KSB7IHJldHVy biBfX2F0YW4ybCAoX194LCBfX3NxcnRsICgxLjAgLSBfX3ggKiBfX3gpKTsgfSBleHRlcm4gX19p bmxpbmUgZmxvYXQgYXNpbmYgKGZsb2F0KTsgZXh0ZXJuIF9faW5saW5lIGZsb2F0IGFzaW5mIChm bG9hdCBfX3gpIHsgcmV0dXJuIF9fYXRhbjJsIChfX3gsIF9fc3FydGwgKDEuMCAtIF9feCAqIF9f eCkpOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBhc2lubCAobG9uZyBkb3VibGUpOyBl eHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgYXNpbmwgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1 cm4gX19hdGFuMmwgKF9feCwgX19zcXJ0bCAoMS4wIC0gX194ICogX194KSk7IH0KZXh0ZXJuIF9f aW5saW5lIGRvdWJsZSBhY29zIChkb3VibGUpOyBleHRlcm4gX19pbmxpbmUgZG91YmxlIGFjb3Mg KGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9fYXRhbjJsIChfX3NxcnRsICgxLjAgLSBfX3ggKiBfX3gp LCBfX3gpOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBhY29zZiAoZmxvYXQpOyBleHRlcm4gX19p bmxpbmUgZmxvYXQgYWNvc2YgKGZsb2F0IF9feCkgeyByZXR1cm4gX19hdGFuMmwgKF9fc3FydGwg KDEuMCAtIF9feCAqIF9feCksIF9feCk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGFj b3NsIChsb25nIGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBhY29zbCAobG9u ZyBkb3VibGUgX194KSB7IHJldHVybiBfX2F0YW4ybCAoX19zcXJ0bCAoMS4wIC0gX194ICogX194 KSwgX194KTsgfQoKZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxvbmcgZG91 YmxlKTsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxvbmcgZG91YmxlIF9f eCkgeyByZXR1cm4gX194ID49IDAuMCA/IDEuMCA6IC0xLjA7IH0KCgoKZXh0ZXJuIF9faW5saW5l IGRvdWJsZSBzaW5oIChkb3VibGUpOyBleHRlcm4gX19pbmxpbmUgZG91YmxlIHNpbmggKGRvdWJs ZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKF9fZmFic2wg KF9feCkpOyByZXR1cm4gMC41ICogKF9fZXhtMSAvIChfX2V4bTEgKyAxLjApICsgX19leG0xKSAq IF9fc2duMWwgKF9feCk7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IHNpbmhmIChmbG9hdCk7IGV4 dGVybiBfX2lubGluZSBmbG9hdCBzaW5oZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91 YmxlIF9fZXhtMSA9IF9fZXhwbTFsIChfX2ZhYnNsIChfX3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4 bTEgLyAoX19leG0xICsgMS4wKSArIF9fZXhtMSkgKiBfX3NnbjFsIChfX3gpOyB9IGV4dGVybiBf X2lubGluZSBsb25nIGRvdWJsZSBzaW5obCAobG9uZyBkb3VibGUpOyBleHRlcm4gX19pbmxpbmUg bG9uZyBkb3VibGUgc2luaGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJs ZSBfX2V4bTEgPSBfX2V4cG0xbCAoX19mYWJzbCAoX194KSk7IHJldHVybiAwLjUgKiAoX19leG0x IC8gKF9fZXhtMSArIDEuMCkgKyBfX2V4bTEpICogX19zZ24xbCAoX194KTsgfQoKCgpleHRlcm4g X19pbmxpbmUgZG91YmxlIGNvc2ggKGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBkb3VibGUgY29z aCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4ID0gX19leHBsIChfX3gp OyByZXR1cm4gMC41ICogKF9fZXggKyAxLjAgLyBfX2V4KTsgfSBleHRlcm4gX19pbmxpbmUgZmxv YXQgY29zaGYgKGZsb2F0KTsgZXh0ZXJuIF9faW5saW5lIGZsb2F0IGNvc2hmIChmbG9hdCBfX3gp IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leCA9IF9fZXhwbCAoX194KTsgcmV0dXJuIDAuNSAq IChfX2V4ICsgMS4wIC8gX19leCk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGNvc2hs IChsb25nIGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBjb3NobCAobG9uZyBk b3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXggPSBfX2V4cGwgKF9feCk7IHJl dHVybiAwLjUgKiAoX19leCArIDEuMCAvIF9fZXgpOyB9CgoKCmV4dGVybiBfX2lubGluZSBkb3Vi bGUgdGFuaCAoZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGRvdWJsZSB0YW5oIChkb3VibGUgX194 KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsICgtX19mYWJzbCAoX194 ICsgX194KSk7IHJldHVybiBfX2V4bTEgLyAoX19leG0xICsgMi4wKSAqIF9fc2duMWwgKC1fX3gp OyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCB0YW5oZiAoZmxvYXQpOyBleHRlcm4gX19pbmxpbmUg ZmxvYXQgdGFuaGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4bTEgPSBf X2V4cG0xbCAoLV9fZmFic2wgKF9feCArIF9feCkpOyByZXR1cm4gX19leG0xIC8gKF9fZXhtMSAr IDIuMCkgKiBfX3NnbjFsICgtX194KTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgdGFu aGwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIHRhbmhsIChsb25n IGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKC1f X2ZhYnNsIChfX3ggKyBfX3gpKTsgcmV0dXJuIF9fZXhtMSAvIChfX2V4bTEgKyAyLjApICogX19z Z24xbCAoLV9feCk7IH0KCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgZmxvb3IgKGRvdWJsZSk7 IGV4dGVybiBfX2lubGluZSBkb3VibGUgZmxvb3IgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9u ZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192 b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZu c3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0 MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2Fz bSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9f YXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1 ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgZmxvb3JmIChmbG9hdCk7IGV4dGVybiBfX2lubGlu ZSBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVl OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVk IHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIg KF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDQwMDsgX19hc20gX192b2xh dGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJm cm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAo ImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lu bGluZSBsb25nIGRvdWJsZSBmbG9vcmwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGxv bmcgZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUg dW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAi IDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2Fz bSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xh dGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3Zv bGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA0 NzkgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91 YmxlIGNlaWwgKGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBkb3VibGUgY2VpbCAoZG91YmxlIF9f eCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNo b3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2Fz bSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3 ICYgMHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0i IChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUp IDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3 KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBjZWlsZiAoZmxvYXQp OyBleHRlcm4gX19pbmxpbmUgZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25n IGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3Zv bGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5z dGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgw MDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNt IF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19h c20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVl OyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBjZWlsbCAobG9uZyBkb3VibGUpOyBleHRl cm4gX19pbmxpbmUgbG9uZyBkb3VibGUgY2VpbGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3Rl ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3 OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxl ICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8 IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7 IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gp KTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBf X3ZhbHVlOyB9CiMgNDk3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJu IF9faW5saW5lIGRvdWJsZSBsZGV4cCAoZG91YmxlIF9feCwgaW50IF9feSk7CmV4dGVybiBfX2lu bGluZSBkb3VibGUKbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX3kpCnsKICByZWdpc3RlciBsb25n IGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192 YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFs dWU7Cn0KCgoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGV4cG0xIChkb3VibGUpOyBleHRlcm4g X19pbmxpbmUgZG91YmxlIGV4cG0xIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7IHJlZ2lzdGVyIGxvbmcg ZG91YmxlIF9fdGVtcDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbDJlCQkJIyBlXnggLSAxID0g Ml4oeCAqIGxvZzIoZSkpIC0gMVxuXHQiICJmbXVsCSUlc3QoMSkJCSMgeCAqIGxvZzIoZSlcblx0 IiAiZnN0CSUlc3QoMSlcblx0IiAiZnJuZGludAkJCSMgaW50KHggKiBsb2cyKGUpKVxuXHQiICJm eGNoXG5cdCIgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4ICogbG9nMihlKSlcblx0IiAiZjJ4bTEJ CQkjIDJeKGZyYWN0KHggKiBsb2cyKGUpKSkgLSAxXG5cdCIgImZzY2FsZQkJCSMgMl4oeCAqIGxv ZzIoZSkpIC0gMl4oaW50KHggKiBsb2cyKGUpKSlcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUi IChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZQkJ CSMgMl5pbnQoeCAqIGxvZzIoZSkpXG5cdCIgOiAiPXQiIChfX3RlbXApIDogIjAiICgxLjApLCAi dSIgKF9fZXhwb25lbnQpKTsgX190ZW1wIC09IDEuMDsgcmV0dXJuIF9fdGVtcCArIF9fdmFsdWU7 IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGV4cG0xZiAoZmxvYXQpOyBleHRlcm4gX19pbmxpbmUg ZmxvYXQgZXhwbTFmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX190 ZW1wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsMmUJCQkjIGVeeCAtIDEgPSAyXih4ICogbG9n MihlKSkgLSAxXG5cdCIgImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQiICJmc3QJJSVz dCgxKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAi ZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJh Y3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0IiAiZnNjYWxlCQkJIyAyXih4ICogbG9nMihlKSkgLSAy XihpbnQoeCAqIGxvZzIoZSkpKVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25l bnQpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlCQkJIyAyXmludCh4 ICogbG9nMihlKSlcblx0IiA6ICI9dCIgKF9fdGVtcCkgOiAiMCIgKDEuMCksICJ1IiAoX19leHBv bmVudCkpOyBfX3RlbXAgLT0gMS4wOyByZXR1cm4gX190ZW1wICsgX192YWx1ZTsgfSBleHRlcm4g X19pbmxpbmUgbG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSk7IGV4dGVybiBfX2lubGlu ZSBsb25nIGRvdWJsZSBleHBtMWwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRv dWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyByZWdpc3RlciBs b25nIGRvdWJsZSBfX3RlbXA7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGwyZQkJCSMgZV54IC0g MSA9IDJeKHggKiBsb2cyKGUpKSAtIDFcblx0IiAiZm11bAklJXN0KDEpCQkjIHggKiBsb2cyKGUp XG5cdCIgImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGludCh4ICogbG9nMihlKSlcblx0 IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5cdCIgImYy eG0xCQkJIyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiICJmc2NhbGUJCQkjIDJeKHgg KiBsb2cyKGUpKSAtIDJeKGludCh4ICogbG9nMihlKSkpXG5cdCIgOiAiPXQiIChfX3ZhbHVlKSwg Ij11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2Nh bGUJCQkjIDJeaW50KHggKiBsb2cyKGUpKVxuXHQiIDogIj10IiAoX190ZW1wKSA6ICIwIiAoMS4w KSwgInUiIChfX2V4cG9uZW50KSk7IF9fdGVtcCAtPSAxLjA7IHJldHVybiBfX3RlbXAgKyBfX3Zh bHVlOyB9CgoKCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBsb2cxcCAoZG91YmxlKTsgZXh0ZXJu IF9faW5saW5lIGRvdWJsZSBsb2cxcCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJs ZSBfX3ZhbHVlOyBpZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAwLjUgKiAxLjQxNDIxMzU2MjM3 MzA5NTA0ODgwTCkgX192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7IGVsc2UgX19hc20gX192b2xh dGlsZV9fICgiZmxkbG4yXG5cdCIgImZ4Y2hcblx0IiAiZnlsMnhwMSIgOiAiPXQiIChfX3ZhbHVl KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxp bmUgZmxvYXQgbG9nMXBmIChmbG9hdCk7IGV4dGVybiBfX2lubGluZSBmbG9hdCBsb2cxcGYgKGZs b2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBpZiAoX19mYWJzbCAoX194 KSA+PSAxLjAgLSAwLjUgKiAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwTCkgX192YWx1ZSA9IGxvZ2wg KDEuMCArIF9feCk7IGVsc2UgX19hc20gX192b2xhdGlsZV9fICgiZmxkbG4yXG5cdCIgImZ4Y2hc blx0IiAiZnlsMnhwMSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyBy ZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nMXBsIChsb25n IGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBsb2cxcGwgKGxvbmcgZG91Ymxl IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBpZiAoX19mYWJzbCAoX194KSA+ PSAxLjAgLSAwLjUgKiAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwTCkgX192YWx1ZSA9IGxvZ2wgKDEu MCArIF9feCk7IGVsc2UgX19hc20gX192b2xhdGlsZV9fICgiZmxkbG4yXG5cdCIgImZ4Y2hcblx0 IiAiZnlsMnhwMSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1 cm4gX192YWx1ZTsgfQojIDUyOCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4 dGVybiBfX2lubGluZSBkb3VibGUgYXNpbmggKGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBkb3Vi bGUgYXNpbmggKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJz bCAoX194KTsgcmV0dXJuIChsb2cxcGwgKF9feSAqIF9feSAvIChfX3NxcnRsIChfX3kgKiBfX3kg KyAxLjApICsgMS4wKSArIF9feSkgKiBfX3NnbjFsIChfX3gpKTsgfSBleHRlcm4gX19pbmxpbmUg ZmxvYXQgYXNpbmhmIChmbG9hdCk7IGV4dGVybiBfX2lubGluZSBmbG9hdCBhc2luaGYgKGZsb2F0 IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4g KGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsg X195KSAqIF9fc2duMWwgKF9feCkpOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBhc2lu aGwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGFzaW5obCAobG9u ZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7 IHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAoX195ICogX195ICsgMS4wKSAr IDEuMCkgKyBfX3kpICogX19zZ24xbCAoX194KSk7IH0KCgoKCmV4dGVybiBfX2lubGluZSBkb3Vi bGUgYWNvc2ggKGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBkb3VibGUgYWNvc2ggKGRvdWJsZSBf X3gpIHsgcmV0dXJuIGxvZ2wgKF9feCArIF9fc3FydGwgKF9feCAtIDEuMCkgKiBfX3NxcnRsIChf X3ggKyAxLjApKTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgYWNvc2hmIChmbG9hdCk7IGV4dGVy biBfX2lubGluZSBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCkgeyByZXR1cm4gbG9nbCAoX194ICsg X19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkpOyB9IGV4dGVybiBfX2lu bGluZSBsb25nIGRvdWJsZSBhY29zaGwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGxv bmcgZG91YmxlIGFjb3NobCAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiBsb2dsIChfX3ggKyBf X3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7IH0KCgpleHRlcm4gX19p bmxpbmUgZG91YmxlIGF0YW5oIChkb3VibGUpOyBleHRlcm4gX19pbmxpbmUgZG91YmxlIGF0YW5o IChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7 IHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195KSkgKiBfX3Nn bjFsIChfX3gpOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBhdGFuaGYgKGZsb2F0KTsgZXh0ZXJu IF9faW5saW5lIGZsb2F0IGF0YW5oZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkg LyAoMS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gpOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRv dWJsZSBhdGFuaGwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGF0 YW5obCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFi c2wgKF9feCk7IHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195 KSkgKiBfX3NnbjFsIChfX3gpOyB9CgoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGh5cG90IChk b3VibGUsIGRvdWJsZSk7IGV4dGVybiBfX2lubGluZSBkb3VibGUgaHlwb3QgKGRvdWJsZSBfX3gs IGRvdWJsZSBfX3kpIHsgcmV0dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9feSAqIF9feSk7IH0g ZXh0ZXJuIF9faW5saW5lIGZsb2F0IGh5cG90ZiAoZmxvYXQsIGZsb2F0KTsgZXh0ZXJuIF9faW5s aW5lIGZsb2F0IGh5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIF9fc3FydGwg KF9feCAqIF9feCArIF9feSAqIF9feSk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGh5 cG90bCAobG9uZyBkb3VibGUsIGxvbmcgZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91 YmxlIGh5cG90bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIF9f c3FydGwgKF9feCAqIF9feCArIF9feSAqIF9feSk7IH0KCmV4dGVybiBfX2lubGluZSBkb3VibGUg bG9nYiAoZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBsb2diIChkb3VibGUgX194KSB7 IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fanVu azsgX19hc20gX192b2xhdGlsZV9fICgiZnh0cmFjdFxuXHQiIDogIj10IiAoX19qdW5rKSwgIj11 IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxp bmUgZmxvYXQgbG9nYmYgKGZsb2F0KTsgZXh0ZXJuIF9faW5saW5lIGZsb2F0IGxvZ2JmIChmbG9h dCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1 bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVy biBfX2lubGluZSBsb25nIGRvdWJsZSBsb2dibCAobG9uZyBkb3VibGUpOyBleHRlcm4gX19pbmxp bmUgbG9uZyBkb3VibGUgbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRv dWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2p1bms7IF9fYXNtIF9fdm9sYXRp bGVfXyAoImZ4dHJhY3Rcblx0IiA6ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFsdWUpIDogIjAi IChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA2MjUgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhp bmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlIGRyZW0gKGRvdWJsZSwgZG91YmxlKTsg ZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBkcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB7IHJl Z2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBpbnQgX19jbG9iYmVyZWQ7IF9fYXNtIF9f dm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQiICJmc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAi anAJMWIiIDogIj10IiAoX192YWx1ZSksICI9JmEiIChfX2Nsb2JiZXJlZCkgOiAiMCIgKF9feCks ICJ1IiAoX195KSA6ICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxv YXQgZHJlbWYgKGZsb2F0LCBmbG9hdCk7IGV4dGVybiBfX2lubGluZSBmbG9hdCBkcmVtZiAoZmxv YXQgX194LCBmbG9hdCBfX3kpIHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGlu dCBfX2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW0xXG5cdCIgImZzdHN3 CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSwgIj0mYSIgKF9f Y2xvYmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7IHJldHVybiBfX3ZhbHVl OyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3VibGUsIGxvbmcg ZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSkgeyByZWdpc3RlciBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIg aW50IF9fY2xvYmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbTFcblx0IiAiZnN0 c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpLCAiPSZhIiAo X19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2MiKTsgcmV0dXJuIF9fdmFs dWU7IH0KIyA2MzggIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19p bmxpbmUgaW50IF9fZmluaXRlIChkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CmV4dGVybiBfX2lubGluZSBpbnQKX19maW5pdGUgKGRvdWJsZSBfX3gpCnsKICByZXR1cm4g KF9fZXh0ZW5zaW9uX18KICAgICAgICAgICgoKCgodW5pb24geyBkb3VibGUgX19kOyBpbnQgX19p WzJdOyB9KSB7X19kOiBfX3h9KS5fX2lbMV0KICAgICAgICAgICAgIHwgMHg4MDBmZmZmZnUpICsg MSkgPj4gMzEpKTsKfQoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlIF9fY29zaG0xIChkb3VibGUp OyBleHRlcm4gX19pbmxpbmUgZG91YmxlIF9fY29zaG0xIChkb3VibGUgX194KSB7IHJlZ2lzdGVy IGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsIChfX2ZhYnNsIChfX3gpKTsgcmV0dXJuIDAu NSAqIChfX2V4bTEgLyAoX19leG0xICsgMS4wKSkgKiBfX2V4bTE7IH0gZXh0ZXJuIF9faW5saW5l IGZsb2F0IF9fY29zaG0xZiAoZmxvYXQpOyBleHRlcm4gX19pbmxpbmUgZmxvYXQgX19jb3NobTFm IChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKF9f ZmFic2wgKF9feCkpOyByZXR1cm4gMC41ICogKF9fZXhtMSAvIChfX2V4bTEgKyAxLjApKSAqIF9f ZXhtMTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19jb3NobTFsIChsb25nIGRvdWJs ZSk7IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBfX2Nvc2htMWwgKGxvbmcgZG91YmxlIF9f eCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAoX19mYWJzbCAoX194 KSk7IHJldHVybiAwLjUgKiAoX19leG0xIC8gKF9fZXhtMSArIDEuMCkpICogX19leG0xOyB9CgoK CmV4dGVybiBfX2lubGluZSBkb3VibGUgX19hY29zaDFwIChkb3VibGUpOyBleHRlcm4gX19pbmxp bmUgZG91YmxlIF9fYWNvc2gxcCAoZG91YmxlIF9feCkgeyByZXR1cm4gbG9nMXBsIChfX3ggKyBf X3NxcnRsIChfX3gpICogX19zcXJ0bCAoX194ICsgMi4wKSk7IH0gZXh0ZXJuIF9faW5saW5lIGZs b2F0IF9fYWNvc2gxcGYgKGZsb2F0KTsgZXh0ZXJuIF9faW5saW5lIGZsb2F0IF9fYWNvc2gxcGYg KGZsb2F0IF9feCkgeyByZXR1cm4gbG9nMXBsIChfX3ggKyBfX3NxcnRsIChfX3gpICogX19zcXJ0 bCAoX194ICsgMi4wKSk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9fYWNvc2gxcGwg KGxvbmcgZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9fYWNvc2gxcGwgKGxv bmcgZG91YmxlIF9feCkgeyByZXR1cm4gbG9nMXBsIChfX3ggKyBfX3NxcnRsIChfX3gpICogX19z cXJ0bCAoX194ICsgMi4wKSk7IH0KIyAzNDkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDQw OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwoKIyAxNiAiLi4vY29tbW9uL3N0YW5kYXJkLmgiIDIK CiMgMSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvZXJybm8u aCIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAxIDMKIyAyNSAiL3Vzci9p bmNsdWRlL2JpdHMvZXJybm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW51eC9lcnJuby5oIiAx IDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYXNtL2Vycm5vLmgiIDEgMwojIDUgIi91c3IvaW5jbHVk ZS9saW51eC9lcnJuby5oIiAyIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMiAz CiMgMzYgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMKZXh0ZXJuIGludCBlcnJubzsKCgpl eHRlcm4gaW50ICpfX2Vycm5vX2xvY2F0aW9uICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CiMgMzcgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAyIDMKIyA1OSAiL3Vzci9pbmNsdWRl L2Vycm5vLmgiIDMKCiMgMTggIi4uL2NvbW1vbi9zdGFuZGFyZC5oIiAyCgojIDEgIi4uL2NvbW1v bi9tYXQ0LmgiIDEKIyA5ICIuLi9jb21tb24vbWF0NC5oIgojIDEgIi4uL2NvbW1vbi9mdmVjdC5o IiAxCiMgMTQgIi4uL2NvbW1vbi9mdmVjdC5oIgp0eXBlZGVmIGRvdWJsZSBGVkVDVFszXTsKIyAz MyAiLi4vY29tbW9uL2Z2ZWN0LmgiCmV4dGVybiBkb3VibGUgZmRvdCgpLCBkaXN0MigpLCBkaXN0 MmxzZWcoKSwgZGlzdDJsaW5lKCksIG5vcm1hbGl6ZSgpOwojIDEwICIuLi9jb21tb24vbWF0NC5o IiAyCgp0eXBlZGVmIGRvdWJsZSBNQVQ0WzRdWzRdOwojIDIyICIuLi9jb21tb24vbWF0NC5oIgpl eHRlcm4gTUFUNCBtNGlkZW50OwojIDIwICIuLi9jb21tb24vc3RhbmRhcmQuaCIgMgoKdHlwZWRl ZiBzdHJ1Y3QgewogICAgICAgIE1BVDQgeGZtOwogICAgICAgIGRvdWJsZSBzY2E7Cn0gWEY7Cgp0 eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgWEYgZjsKICAgICAgICBYRiBiOwp9IEZVTExYRjsKIyA1 MyAiLi4vY29tbW9uL3N0YW5kYXJkLmgiCmV4dGVybiBpbnQgZXB1dHMoKSwgd3B1dHMoKTsKIyA2 NCAiLi4vY29tbW9uL3N0YW5kYXJkLmgiCmV4dGVybiBzdHJ1Y3QgZXJyYWN0IHsKICAgICAgICBj aGFyIHByZVsxNl07CiAgICAgICAgaW50ICgqcGYpKCk7CiAgICAgICAgaW50IGVjOwp9IGVycmFj dFs2XTsKIyA3NyAiLi4vY29tbW9uL3N0YW5kYXJkLmgiCmV4dGVybiBjaGFyIGVycm1zZ1tdOwoK CgoKCgpleHRlcm4gZG91YmxlIHRjb3MoKTsKIyAxMDkgIi4uL2NvbW1vbi9zdGFuZGFyZC5oIgpl eHRlcm4gb2ZmX3QgbHNlZWsoKTsKZXh0ZXJuIGxvbmcgZnRlbGwoKTsKCmV4dGVybiBjaGFyICpu ZXh0d29yZCgpLCAqc3NraXAoKSwgKnNza2lwMigpOwpleHRlcm4gY2hhciAqZ2V0cGF0aCgpLCAq Z2V0ZW52KCk7CgpleHRlcm4gY2hhciAqbWFsbG9jKCksICpjYWxsb2MoKSwgKnJlYWxsb2MoKTsK CmV4dGVybiBjaGFyICpibWFsbG9jKCksICpzYXZlc3RyKCksICpzYXZxc3RyKCk7CgoKZXh0ZXJu IGRvdWJsZSBhdG9mKCk7CiMgMTIgInJheS5oIiAyCgojIDEgIi4uL2NvbW1vbi9vYmplY3QuaCIg MQojIDE4ICIuLi9jb21tb24vb2JqZWN0LmgiCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBzaG9y dCBuc2FyZ3M7CiAgICAgICAgc2hvcnQgbmZhcmdzOwogICAgICAgIGNoYXIgKipzYXJnOwogICAg ICAgIGRvdWJsZSAqZmFyZzsKCgoKCn0gRlVOQVJHUzsKIyA0NSAiLi4vY29tbW9uL29iamVjdC5o Igp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IG9tb2Q7CiAgICAgICAgc2hvcnQgb3R5cGU7 CiAgICAgICAgY2hhciAqb25hbWU7CiAgICAgICAgRlVOQVJHUyBvYXJnczsKICAgICAgICBjaGFy ICpvczsKfSBPQkpSRUM7CiMgNjEgIi4uL2NvbW1vbi9vYmplY3QuaCIKZXh0ZXJuIE9CSlJFQyAq b2JqYmxvY2tbNjU1MzVdOwpleHRlcm4gaW50IG5vYmplY3RzOwojIDc4ICIuLi9jb21tb24vb2Jq ZWN0LmgiCmludCAqc2V0c2F2ZSgpOwojIDE0ICJyYXkuaCIgMgoKIyAxICIuLi9jb21tb24vY29s b3IuaCIgMQojIDI5ICIuLi9jb21tb24vY29sb3IuaCIKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIENP TFJbNF07Cgp0eXBlZGVmIGZsb2F0IENPTE9SWzNdOwoKdHlwZWRlZiBmbG9hdCBSR0JQUklNU1s0 XVsyXTsKdHlwZWRlZiBmbG9hdCAoKlJHQlBSSU1QKVsyXTsKCnR5cGVkZWYgZmxvYXQgQ09MT1JN QVRbM11bM107CiMgMTc5ICIuLi9jb21tb24vY29sb3IuaCIKZXh0ZXJuIGRvdWJsZSBhdG9mKCks IGxkZXhwKCksIGZyZXhwKCk7CiMgMTg4ICIuLi9jb21tb24vY29sb3IuaCIKZXh0ZXJuIFJHQlBS SU1TIHN0ZHByaW1zOwpleHRlcm4gQ09MT1JNQVQgcmdiMnh5em1hdDsKZXh0ZXJuIENPTE9STUFU IHh5ejJyZ2JtYXQ7CmV4dGVybiBDT0xPUiBjYmxhY2ssIGN3aGl0ZTsKIyAxNiAicmF5LmgiIDIK IyAzMSAicmF5LmgiCnR5cGVkZWYgc3RydWN0IHJheSB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBy bm87CiAgICAgICAgaW50IHJsdmw7CiAgICAgICAgZmxvYXQgcndlaWdodDsKICAgICAgICBzaG9y dCBydHlwZTsKICAgICAgICBzaG9ydCBjcnR5cGU7CiAgICAgICAgc3RydWN0IHJheSAqcGFyZW50 OwogICAgICAgIEZWRUNUIHJvcmc7CiAgICAgICAgRlZFQ1QgcmRpcjsKICAgICAgICBkb3VibGUg cm1heDsKICAgICAgICBpbnQgcnNyYzsKICAgICAgICBpbnQgKmNsaXBzZXQ7CiAgICAgICAgaW50 ICpuZXdjc2V0OwogICAgICAgIGludCAoKnJldmYpKCk7CiAgICAgICAgaW50IHJvYmo7CiAgICAg ICAgT0JKUkVDICpybzsKICAgICAgICBkb3VibGUgcm90OwogICAgICAgIEZWRUNUIHJvcDsKICAg ICAgICBGVkVDVCByb247CiAgICAgICAgZG91YmxlIHJvZDsKICAgICAgICBGVUxMWEYgKnJveDsK ICAgICAgICBGVkVDVCBwZXJ0OwogICAgICAgIENPTE9SIHBjb2w7CiAgICAgICAgQ09MT1IgcmNv bDsKICAgICAgICBkb3VibGUgcnQ7CiAgICAgICAgQ09MT1IgY2V4dDsKICAgICAgICBDT0xPUiBh bGJlZG87CiAgICAgICAgZmxvYXQgZ2VjYzsKICAgICAgICBpbnQgKnNsaWdodHM7Cn0gUkFZOwoK ZXh0ZXJuIGludCByYXl0cmFjZSgpOwoKZXh0ZXJuIGRvdWJsZSByYXlub3JtYWwoKTsKCmV4dGVy biBkb3VibGUgcmF5ZGlzdCgpOwoKZXh0ZXJuIGludCBkaW1saXN0W107CmV4dGVybiBpbnQgbmRp bXM7CmV4dGVybiBpbnQgc2FtcGxlbmR4OwojIDE0ICJydjIuYyIgMgoKIyAxICIuLi9jb21tb24v b2N0cmVlLmgiIDEKIyA0NiAiLi4vY29tbW9uL29jdHJlZS5oIgpleHRlcm4gaW50ICpvY3RibG9j a1szMjc2N107CgoKCmV4dGVybiBpbnQgb2N0YWxsb2MoKSwgY29tYmluZSgpLCBmdWxsbm9kZSgp OwoKCgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IGN1dHJlZTsKICAgICAgICBGVkVD VCBjdW9yZzsKICAgICAgICBkb3VibGUgY3VzaXplOwp9IENVQkU7CgpleHRlcm4gQ1VCRSB0aGVz Y2VuZTsKIyAxNiAicnYyLmMiIDIKCiMgMSAiLi4vY29tbW9uL290eXBlcy5oIiAxCiMgMTEgIi4u L2NvbW1vbi9vdHlwZXMuaCIKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGNoYXIgKmZ1bmFtZTsK ICAgICAgICBpbnQgZmxhZ3M7CiAgICAgICAgaW50ICgqZnVucCkoKTsKfSBGVU47CiMgODUgIi4u L2NvbW1vbi9vdHlwZXMuaCIKZXh0ZXJuIEZVTiBvZnVuW107CiMgOTggIi4uL2NvbW1vbi9vdHlw ZXMuaCIKZXh0ZXJuIGludCBvX2RlZmF1bHQoKTsKIyAxOCAicnYyLmMiIDIKCiMgMSAicnBhaW50 LmgiIDEKIyAxMSAicnBhaW50LmgiCiMgMSAiZHJpdmVyLmgiIDEKIyAxMSAiZHJpdmVyLmgiCnN0 cnVjdCBkcml2ZXIgewogICAgICAgIGludCAoKmNsb3NlKSgpOwogICAgICAgIGludCAoKmNsZWFy KSgpOwogICAgICAgIGludCAoKnBhaW50cikoKTsKICAgICAgICBpbnQgKCpnZXRjdXIpKCk7CiAg ICAgICAgaW50ICgqY29tb3V0KSgpOwogICAgICAgIGludCAoKmNvbWluKSgpOwogICAgICAgIGlu dCAoKmZsdXNoKSgpOwogICAgICAgIGRvdWJsZSBwaXhhc3BlY3Q7CiAgICAgICAgaW50IHhzaXos IHlzaXo7CiAgICAgICAgaW50IGlucHJlYWR5Owp9OwoKZXh0ZXJuIHN0cnVjdCBkcml2ZXIgKmNv bW1faW5pdCgpLCAqc2xhdmVfaW5pdCgpOwojIDM3ICJkcml2ZXIuaCIKZXh0ZXJuIHN0cnVjdCBk ZXZpY2UgewogICAgICAgIGNoYXIgKm5hbWU7CiAgICAgICAgY2hhciAqZGVzY3JpcDsKICAgICAg ICBzdHJ1Y3QgZHJpdmVyICooKmluaXQpKCk7Cn0gZGV2dGFibGVbXTsKCmV4dGVybiBjaGFyIGRl dl9kZWZhdWx0W107CiMgMTIgInJwYWludC5oIiAyCgojIDEgIi4uL2NvbW1vbi92aWV3LmgiIDEK IyAxOCAiLi4vY29tbW9uL3ZpZXcuaCIKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0eXBl OwogICAgICAgIEZWRUNUIHZwOwogICAgICAgIEZWRUNUIHZkaXI7CiAgICAgICAgRlZFQ1QgdnVw OwogICAgICAgIGRvdWJsZSBob3JpejsKICAgICAgICBkb3VibGUgdmVydDsKICAgICAgICBkb3Vi bGUgaG9mZjsKICAgICAgICBkb3VibGUgdm9mZjsKICAgICAgICBkb3VibGUgdmZvcmU7CiAgICAg ICAgZG91YmxlIHZhZnQ7CiAgICAgICAgRlZFQ1QgaHZlYzsKICAgICAgICBGVkVDVCB2dmVjOwog ICAgICAgIGRvdWJsZSBobjI7CiAgICAgICAgZG91YmxlIHZuMjsKfSBWSUVXOwoKZXh0ZXJuIFZJ RVcgc3RkdmlldzsKCmV4dGVybiBjaGFyICpzZXR2aWV3KCk7CgpleHRlcm4gZG91YmxlIHZpZXdy YXkoKTsKCmV4dGVybiBjaGFyICp2aWV3b3B0KCk7CiMgMTQgInJwYWludC5oIiAyCgp0eXBlZGVm IHNob3J0IENPT1JEOwoKdHlwZWRlZiBzdHJ1Y3QgcG5vZGUgewogICAgICAgIHN0cnVjdCBwbm9k ZSAqa2lkOwogICAgICAgIENPT1JEIHgsIHk7CiAgICAgICAgQ09MT1IgdjsKfSBQTk9ERTsKIyAz MSAicnBhaW50LmgiCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBDT09SRCBsLCBkLCByLCB1Owp9 IFJFQ1Q7CgpleHRlcm4gUE5PREUgcHRydW5rOwoKZXh0ZXJuIFZJRVcgb3VydmlldzsKZXh0ZXJu IFZJRVcgb2xkdmlldzsKZXh0ZXJuIGludCBocmVzb2x1LCB2cmVzb2x1OwoKZXh0ZXJuIGludCBn cmV5c2NhbGU7CgpleHRlcm4gaW50IHBkZXB0aDsKZXh0ZXJuIFJFQ1QgcGZyYW1lOwoKZXh0ZXJu IGRvdWJsZSBleHBvc3VyZTsKCmV4dGVybiBzdHJ1Y3QgZHJpdmVyICpkZXY7CgpleHRlcm4gUE5P REUgKmZpbmRyZWN0KCk7CiMgMjAgInJ2Mi5jIiAyCgojIDEgIi4uL2NvbW1vbi9yZXNvbHUuaCIg MQojIDI4ICIuLi9jb21tb24vcmVzb2x1LmgiCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQg b3I7CiAgICAgICAgaW50IHhyLCB5cjsKfSBSRVNPTFU7CgoKCgoKCgpleHRlcm4gY2hhciByZXNv bHVfYnVmWzMyXTsKIyA1MCAiLi4vY29tbW9uL3Jlc29sdS5oIgpleHRlcm4gY2hhciAqcmVzb2x1 MnN0cigpOwojIDIyICJydjIuYyIgMgoKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzCiMg MjkgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCgojIDQ3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIg MwplbnVtCnsKICBfSVN1cHBlciA9ICgoMCkgPCA4ID8gKCgxIDw8ICgwKSkgPDwgOCkgOiAoKDEg PDwgKDApKSA+PiA4KSksCiAgX0lTbG93ZXIgPSAoKDEpIDwgOCA/ICgoMSA8PCAoMSkpIDw8IDgp IDogKCgxIDw8ICgxKSkgPj4gOCkpLAogIF9JU2FscGhhID0gKCgyKSA8IDggPyAoKDEgPDwgKDIp KSA8PCA4KSA6ICgoMSA8PCAoMikpID4+IDgpKSwKICBfSVNkaWdpdCA9ICgoMykgPCA4ID8gKCgx IDw8ICgzKSkgPDwgOCkgOiAoKDEgPDwgKDMpKSA+PiA4KSksCiAgX0lTeGRpZ2l0ID0gKCg0KSA8 IDggPyAoKDEgPDwgKDQpKSA8PCA4KSA6ICgoMSA8PCAoNCkpID4+IDgpKSwKICBfSVNzcGFjZSA9 ICgoNSkgPCA4ID8gKCgxIDw8ICg1KSkgPDwgOCkgOiAoKDEgPDwgKDUpKSA+PiA4KSksCiAgX0lT cHJpbnQgPSAoKDYpIDwgOCA/ICgoMSA8PCAoNikpIDw8IDgpIDogKCgxIDw8ICg2KSkgPj4gOCkp LAogIF9JU2dyYXBoID0gKCg3KSA8IDggPyAoKDEgPDwgKDcpKSA8PCA4KSA6ICgoMSA8PCAoNykp ID4+IDgpKSwKICBfSVNibGFuayA9ICgoOCkgPCA4ID8gKCgxIDw8ICg4KSkgPDwgOCkgOiAoKDEg PDwgKDgpKSA+PiA4KSksCiAgX0lTY250cmwgPSAoKDkpIDwgOCA/ICgoMSA8PCAoOSkpIDw8IDgp IDogKCgxIDw8ICg5KSkgPj4gOCkpLAogIF9JU3B1bmN0ID0gKCgxMCkgPCA4ID8gKCgxIDw8ICgx MCkpIDw8IDgpIDogKCgxIDw8ICgxMCkpID4+IDgpKSwKICBfSVNhbG51bSA9ICgoMTEpIDwgOCA/ ICgoMSA8PCAoMTEpKSA8PCA4KSA6ICgoMSA8PCAoMTEpKSA+PiA4KSkKfTsKIyA3NSAiL3Vzci9p bmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIF9fY29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICpfX2N0 eXBlX2I7CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b2xvd2VyOwpleHRlcm4g X19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG91cHBlcjsKIyA5MSAiL3Vzci9pbmNsdWRlL2N0 eXBlLmgiIDMKZXh0ZXJuIGludCBpc2FsbnVtIChpbnQpIDsKZXh0ZXJuIGludCBpc2FscGhhIChp bnQpIDsKZXh0ZXJuIGludCBpc2NudHJsIChpbnQpIDsKZXh0ZXJuIGludCBpc2RpZ2l0IChpbnQp IDsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQpIDsKZXh0ZXJuIGludCBpc2dyYXBoIChpbnQpIDsK ZXh0ZXJuIGludCBpc3ByaW50IChpbnQpIDsKZXh0ZXJuIGludCBpc3B1bmN0IChpbnQpIDsKZXh0 ZXJuIGludCBpc3NwYWNlIChpbnQpIDsKZXh0ZXJuIGludCBpc3VwcGVyIChpbnQpIDsKZXh0ZXJu IGludCBpc3hkaWdpdCAoaW50KSA7CgoKCgoKCgpleHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2Mp IDsKCgpleHRlcm4gaW50IHRvdXBwZXIgKGludCBfX2MpIDsKCgoKCgoKZXh0ZXJuIGludCBpc2Fz Y2lpIChpbnQgX19jKSA7CgoKCmV4dGVybiBpbnQgdG9hc2NpaSAoaW50IF9fYykgOwoKCgoKCgpl eHRlcm4gaW50IF90b3VwcGVyIChpbnQpIDsKZXh0ZXJuIGludCBfdG9sb3dlciAoaW50KSA7CiMg MTUzICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gX19pbmxpbmUgaW50CnRvbG93ZXIg KGludCBfX2MpCnsKICByZXR1cm4gX19jID49IC0xMjggJiYgX19jIDwgMjU2ID8gX19jdHlwZV90 b2xvd2VyW19fY10gOiBfX2M7Cn0KCmV4dGVybiBfX2lubGluZSBpbnQKdG91cHBlciAoaW50IF9f YykKewogIHJldHVybiBfX2MgPj0gLTEyOCAmJiBfX2MgPCAyNTYgPyBfX2N0eXBlX3RvdXBwZXJb X19jXSA6IF9fYzsKfQojIDI3NSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKCiMgMjQgInJ2Mi5j IiAyCiMgMzMgInJ2Mi5jIgpleHRlcm4gY2hhciAqYXRvcygpOwoKZXh0ZXJuIEZJTEUgKnBvcGVu KCk7CgpleHRlcm4gY2hhciByaWZuYW1lWzEyOF07CgpleHRlcm4gY2hhciBWZXJzaW9uSURbXTsK ZXh0ZXJuIGNoYXIgKnByb2duYW1lOwpleHRlcm4gY2hhciAqb2N0bmFtZTsKCgpnZXRmcmFtZShz KQpjaGFyICpzOwp7CiAgICAgICAgaWYgKGdldHJlY3QocywgJnBmcmFtZSkgPCAwKQogICAgICAg ICAgICAgICAgcmV0dXJuOwogICAgICAgIHBkZXB0aCA9IDA7Cn0KCgpnZXRyZXBhaW50KHMpCmNo YXIgKnM7CnsKICAgICAgICBSRUNUIGJveDsKCiAgICAgICAgaWYgKGdldHJlY3QocywgJmJveCkg PCAwKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHBhaW50cmVjdCgmcHRydW5rLCAw LCAwLCBocmVzb2x1LCB2cmVzb2x1LCAmYm94KTsKfQoKCmdldHZpZXcocykKY2hhciAqczsKewog ICAgICAgIEZJTEUgKmZwOwogICAgICAgIGNoYXIgYnVmWzEyOF07CiAgICAgICAgY2hhciAqZm5h bWU7CiAgICAgICAgaW50IGNoYW5nZSA9IDA7CiAgICAgICAgVklFVyBudjsKCiAgICAgICAgd2hp bGUgKChfX2N0eXBlX2JbKGludCkgKCgqcykpXSAmICh1bnNpZ25lZCBzaG9ydCBpbnQpIF9JU3Nw YWNlKSkKICAgICAgICAgICAgICAgIHMrKzsKICAgICAgICBpZiAoKnMgPT0gJy0nKSB7CiAgICAg ICAgICAgICAgICAoKigmbnYpID0gKigmb3VydmlldykpOwogICAgICAgICAgICAgICAgaWYgKHNz Y2FudmlldygmbnYsIHMpKQogICAgICAgICAgICAgICAgICAgICAgICBuZXd2aWV3KCZudik7CiAg ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKDUsICJiYWQg dmlldyBvcHRpb24ocykiKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAg ICAgaWYgKHNzY2FuZihzLCAiJXMiLCBidWYpID09IDEpIHsKICAgICAgICAgICAgICAgIGlmICgo Zm5hbWUgPSBnZXRwYXRoKGJ1ZiwgKCh2b2lkICopMCksIDApKSA9PSAoKHZvaWQgKikwKSB8fAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcCA9IGZvcGVuKGZuYW1lLCAiYSIpKSA9 PSAoKHZvaWQgKikwKSkgewogICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGVycm1zZywg ImNhbm5vdCBvcGVuIFwiJXNcIiIsIGJ1Zik7CiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9y KDUsIGVycm1zZyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgIGZwdXRzKHByb2duYW1lLCBmcCk7CiAgICAgICAgICAgICAg ICBmcHJpbnR2aWV3KCZvdXJ2aWV3LCBmcCk7CiAgICAgICAgICAgICAgICBmcHV0cyhzc2tpcChz KSwgZnApOwogICAgICAgICAgICAgICAgX0lPX3B1dGMgKCdcbicsIGZwKTsKICAgICAgICAgICAg ICAgIGZjbG9zZShmcCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAg IHNwcmludGYoYnVmLCAidmlldyB0eXBlICglYyk6ICIsIG91cnZpZXcudHlwZSk7CiAgICAgICAg KCpkZXYtPmNvbW91dCkoYnVmKTsKICAgICAgICAoKmRldi0+Y29taW4pKGJ1ZiwgKCh2b2lkICop MCkpOwogICAgICAgIGlmIChidWZbMF0gPT0gKCgnQycpLSdAJykpIHJldHVybjsKICAgICAgICBp ZiAoYnVmWzBdICYmIGJ1ZlswXSAhPSBvdXJ2aWV3LnR5cGUpIHsKICAgICAgICAgICAgICAgIG52 LnR5cGUgPSBidWZbMF07CiAgICAgICAgICAgICAgICBjaGFuZ2UrKzsKICAgICAgICB9IGVsc2UK ICAgICAgICAgICAgICAgIG52LnR5cGUgPSBvdXJ2aWV3LnR5cGU7CiAgICAgICAgc3ByaW50Zihi dWYsICJ2aWV3IHBvaW50ICglLjZnICUuNmcgJS42Zyk6ICIsCiAgICAgICAgICAgICAgICAgICAg ICAgIG91cnZpZXcudnBbMF0sIG91cnZpZXcudnBbMV0sIG91cnZpZXcudnBbMl0pOwogICAgICAg ICgqZGV2LT5jb21vdXQpKGJ1Zik7CiAgICAgICAgKCpkZXYtPmNvbWluKShidWYsICgodm9pZCAq KTApKTsKICAgICAgICBpZiAoYnVmWzBdID09ICgoJ0MnKS0nQCcpKSByZXR1cm47CiAgICAgICAg aWYgKChzc2NhbmYoYnVmLCIlbGYgJWxmICVsZiIsbnYudnAsbnYudnArMSxudi52cCsyKT09Mykp CiAgICAgICAgICAgICAgICBjaGFuZ2UrKzsKICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAo KG52LnZwKVswXT0ob3Vydmlldy52cClbMF0sKG52LnZwKVsxXT0ob3Vydmlldy52cClbMV0sKG52 LnZwKVsyXT0ob3Vydmlldy52cClbMl0pOwogICAgICAgIHNwcmludGYoYnVmLCAidmlldyBkaXJl Y3Rpb24gKCUuNmcgJS42ZyAlLjZnKTogIiwKICAgICAgICAgICAgICAgICAgICAgICAgb3Vydmll dy52ZGlyWzBdLCBvdXJ2aWV3LnZkaXJbMV0sIG91cnZpZXcudmRpclsyXSk7CiAgICAgICAgKCpk ZXYtPmNvbW91dCkoYnVmKTsKICAgICAgICAoKmRldi0+Y29taW4pKGJ1ZiwgKCh2b2lkICopMCkp OwogICAgICAgIGlmIChidWZbMF0gPT0gKCgnQycpLSdAJykpIHJldHVybjsKICAgICAgICBpZiAo KHNzY2FuZihidWYsIiVsZiAlbGYgJWxmIixudi52ZGlyLG52LnZkaXIrMSxudi52ZGlyKzIpPT0z KSkKICAgICAgICAgICAgICAgIGNoYW5nZSsrOwogICAgICAgIGVsc2UKICAgICAgICAgICAgICAg ICgobnYudmRpcilbMF09KG91cnZpZXcudmRpcilbMF0sKG52LnZkaXIpWzFdPShvdXJ2aWV3LnZk aXIpWzFdLChudi52ZGlyKVsyXT0ob3Vydmlldy52ZGlyKVsyXSk7CiAgICAgICAgc3ByaW50Zihi dWYsICJ2aWV3IHVwICglLjZnICUuNmcgJS42Zyk6ICIsCiAgICAgICAgICAgICAgICAgICAgICAg IG91cnZpZXcudnVwWzBdLCBvdXJ2aWV3LnZ1cFsxXSwgb3Vydmlldy52dXBbMl0pOwogICAgICAg ICgqZGV2LT5jb21vdXQpKGJ1Zik7CiAgICAgICAgKCpkZXYtPmNvbWluKShidWYsICgodm9pZCAq KTApKTsKICAgICAgICBpZiAoYnVmWzBdID09ICgoJ0MnKS0nQCcpKSByZXR1cm47CiAgICAgICAg aWYgKChzc2NhbmYoYnVmLCIlbGYgJWxmICVsZiIsbnYudnVwLG52LnZ1cCsxLG52LnZ1cCsyKT09 MykpCiAgICAgICAgICAgICAgICBjaGFuZ2UrKzsKICAgICAgICBlbHNlCiAgICAgICAgICAgICAg ICAoKG52LnZ1cClbMF09KG91cnZpZXcudnVwKVswXSwobnYudnVwKVsxXT0ob3Vydmlldy52dXAp WzFdLChudi52dXApWzJdPShvdXJ2aWV3LnZ1cClbMl0pOwogICAgICAgIHNwcmludGYoYnVmLCAi dmlldyBob3JpeiBhbmQgdmVydCBzaXplICglLjZnICUuNmcpOiAiLAogICAgICAgICAgICAgICAg ICAgICAgICBvdXJ2aWV3Lmhvcml6LCBvdXJ2aWV3LnZlcnQpOwogICAgICAgICgqZGV2LT5jb21v dXQpKGJ1Zik7CiAgICAgICAgKCpkZXYtPmNvbWluKShidWYsICgodm9pZCAqKTApKTsKICAgICAg ICBpZiAoYnVmWzBdID09ICgoJ0MnKS0nQCcpKSByZXR1cm47CiAgICAgICAgaWYgKHNzY2FuZihi dWYsICIlbGYgJWxmIiwgJm52Lmhvcml6LCAmbnYudmVydCkgPT0gMikKICAgICAgICAgICAgICAg IGNoYW5nZSsrOwogICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgbnYuaG9yaXogPSBvdXJ2 aWV3Lmhvcml6OyBudi52ZXJ0ID0gb3Vydmlldy52ZXJ0OwogICAgICAgIH0KICAgICAgICBzcHJp bnRmKGJ1ZiwgImZvcmUgYW5kIGFmdCBjbGlwcGluZyBwbGFuZSAoJS42ZyAlLjZnKTogIiwKICAg ICAgICAgICAgICAgICAgICAgICAgb3Vydmlldy52Zm9yZSwgb3Vydmlldy52YWZ0KTsKICAgICAg ICAoKmRldi0+Y29tb3V0KShidWYpOwogICAgICAgICgqZGV2LT5jb21pbikoYnVmLCAoKHZvaWQg KikwKSk7CiAgICAgICAgaWYgKGJ1ZlswXSA9PSAoKCdDJyktJ0AnKSkgcmV0dXJuOwogICAgICAg IGlmIChzc2NhbmYoYnVmLCAiJWxmICVsZiIsICZudi52Zm9yZSwgJm52LnZhZnQpID09IDIpCiAg ICAgICAgICAgICAgICBjaGFuZ2UrKzsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIG52 LnZmb3JlID0gb3Vydmlldy52Zm9yZTsgbnYudmFmdCA9IG91cnZpZXcudmFmdDsKICAgICAgICB9 CiAgICAgICAgc3ByaW50ZihidWYsICJ2aWV3IHNoaWZ0IGFuZCBsaWZ0ICglLjZnICUuNmcpOiAi LAogICAgICAgICAgICAgICAgICAgICAgICBvdXJ2aWV3LmhvZmYsIG91cnZpZXcudm9mZik7CiAg ICAgICAgKCpkZXYtPmNvbW91dCkoYnVmKTsKICAgICAgICAoKmRldi0+Y29taW4pKGJ1ZiwgKCh2 b2lkICopMCkpOwogICAgICAgIGlmIChidWZbMF0gPT0gKCgnQycpLSdAJykpIHJldHVybjsKICAg ICAgICBpZiAoc3NjYW5mKGJ1ZiwgIiVsZiAlbGYiLCAmbnYuaG9mZiwgJm52LnZvZmYpID09IDIp CiAgICAgICAgICAgICAgICBjaGFuZ2UrKzsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAg IG52LmhvZmYgPSBvdXJ2aWV3LmhvZmY7IG52LnZvZmYgPSBvdXJ2aWV3LnZvZmY7CiAgICAgICAg fQogICAgICAgIGlmIChjaGFuZ2UpCiAgICAgICAgICAgICAgICBuZXd2aWV3KCZudik7Cn0KCgps YXN0dmlldyhzKQpjaGFyICpzOwp7CiAgICAgICAgY2hhciBidWZbMTI4XTsKICAgICAgICBjaGFy ICpmbmFtZTsKICAgICAgICBpbnQgc3VjY2VzczsKICAgICAgICBWSUVXIG52OwoKICAgICAgICBp ZiAoc3NjYW5mKHMsICIlcyIsIGJ1ZikgPT0gMSkgewogICAgICAgICAgICAgICAgKCooJm52KSA9 ICooJnN0ZHZpZXcpKTsKICAgICAgICAgICAgICAgIGlmICgoZm5hbWUgPSBnZXRwYXRoKGJ1Ziwg IiIsIDQpKSA9PSAoKHZvaWQgKikwKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChzdWNjZXNzID0gdmlld2ZpbGUoZm5hbWUsICZudiwgKCh2b2lkICopMCkpKSA9PSAtMSkgewog ICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGVycm1zZywgImNhbm5vdCBvcGVuIFwiJXNc IiIsIGJ1Zik7CiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKDUsIGVycm1zZyk7CiAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgIGlmICghc3VjY2VzcykKICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoNSwgIndyb25n IGZpbGUgZm9ybWF0Iik7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg ICAgIG5ld3ZpZXcoJm52KTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAg ICAgaWYgKG9sZHZpZXcudHlwZSA9PSAwKSB7CiAgICAgICAgICAgICAgICBlcnJvcig1LCAibm8g cHJldmlvdXMgdmlldyIpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAg ICAoKigmbnYpID0gKigmb3VydmlldykpOwogICAgICAgICgqKCZvdXJ2aWV3KSA9ICooJm9sZHZp ZXcpKTsKICAgICAgICAoKigmb2xkdmlldykgPSAqKCZudikpOwogICAgICAgIG5ld2ltYWdlKCk7 Cn0KCgpzYXZldmlldyhzKQpjaGFyICpzOwp7CiAgICAgICAgY2hhciB2aWV3WzY0XTsKICAgICAg ICBjaGFyICpmbmFtZTsKICAgICAgICBGSUxFICpmcDsKCiAgICAgICAgaWYgKCphdG9zKHZpZXcs IHNpemVvZih2aWV3KSwgcykpIHsKICAgICAgICAgICAgICAgIGlmIChpc2ludCh2aWV3KSkgewog ICAgICAgICAgICAgICAgICAgICAgICBlcnJvcig1LCAiY2Fubm90IHdyaXRlIHZpZXcgYnkgbnVt YmVyIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgIHMgPSBzc2tpcChzKTsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKChf X2N0eXBlX2JbKGludCkgKCgqcykpXSAmICh1bnNpZ25lZCBzaG9ydCBpbnQpIF9JU3NwYWNlKSkK ICAgICAgICAgICAgICAgIHMrKzsKICAgICAgICBpZiAoKnMpCiAgICAgICAgICAgICAgICBhdG9z KHJpZm5hbWUsIHNpemVvZihyaWZuYW1lKSwgcyk7CiAgICAgICAgZWxzZSBpZiAocmlmbmFtZVsw XSA9PSAnXDAnKSB7CiAgICAgICAgICAgICAgICBlcnJvcig1LCAibm8gcHJldmlvdXMgcmFkIGZp bGUiKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKChmbmFt ZSA9IGdldHBhdGgocmlmbmFtZSwgKCh2b2lkICopMCksIDApKSA9PSAoKHZvaWQgKikwKSB8fAog ICAgICAgICAgICAgICAgICAgICAgICAoZnAgPSBmb3BlbihmbmFtZSwgImEiKSkgPT0gKCh2b2lk ICopMCkpIHsKICAgICAgICAgICAgICAgIHNwcmludGYoZXJybXNnLCAiY2Fubm90IG9wZW4gXCIl c1wiIiwgcmlmbmFtZSk7CiAgICAgICAgICAgICAgICBlcnJvcig1LCBlcnJtc2cpOwogICAgICAg ICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBmcHV0cygidmlldz0gIiwgZnApOwog ICAgICAgIGZwdXRzKHZpZXcsIGZwKTsKICAgICAgICBmcHJpbnR2aWV3KCZvdXJ2aWV3LCBmcCk7 CiAgICAgICAgX0lPX3B1dGMgKCdcbicsIGZwKTsKICAgICAgICBmY2xvc2UoZnApOwp9CgoKbG9h ZHZpZXcocykKY2hhciAqczsKewogICAgICAgIGNoYXIgYnVmWzUxMl07CiAgICAgICAgY2hhciAq Zm5hbWU7CiAgICAgICAgRklMRSAqZnA7CiAgICAgICAgVklFVyBudjsKCiAgICAgICAgc3RyY3B5 KGJ1ZiwgInJhZCAtbiAtcyAtViAtdiAiKTsKICAgICAgICBpZiAoc3NjYW5mKHMsICIlcyIsIGJ1 ZitzdHJsZW4oYnVmKSkgPT0gMSkKICAgICAgICAgICAgICAgIHMgPSBzc2tpcChzKTsKICAgICAg ICBlbHNlCiAgICAgICAgICAgICAgICBzdHJjYXQoYnVmLCAiMSIpOwogICAgICAgIGlmICgqcykK ICAgICAgICAgICAgICAgIGF0b3MocmlmbmFtZSwgc2l6ZW9mKHJpZm5hbWUpLCBzKTsKICAgICAg ICBlbHNlIGlmIChyaWZuYW1lWzBdID09ICdcMCcpIHsKICAgICAgICAgICAgICAgIGVycm9yKDUs ICJubyBwcmV2aW91cyByYWQgZmlsZSIpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg IH0KICAgICAgICBpZiAoKGZuYW1lID0gZ2V0cGF0aChyaWZuYW1lLCAiIiwgNCkpID09ICgodm9p ZCAqKTApKSB7CiAgICAgICAgICAgICAgICBzcHJpbnRmKGVycm1zZywgImNhbm5vdCBhY2Nlc3Mg XCIlc1wiIiwgcmlmbmFtZSk7CiAgICAgICAgICAgICAgICBlcnJvcig1LCBlcnJtc2cpOwogICAg ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBzcHJpbnRmKGJ1ZitzdHJsZW4o YnVmKSwgIiAlcyIsIGZuYW1lKTsKICAgICAgICBpZiAoKGZwID0gcG9wZW4oYnVmLCAiciIpKSA9 PSAoKHZvaWQgKikwKSkgewogICAgICAgICAgICAgICAgZXJyb3IoNSwgImNhbm5vdCBydW4gcmFk Iik7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGJ1ZlswXSA9ICdc MCc7CiAgICAgICAgZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApOwogICAgICAgIHBjbG9zZShm cCk7CiAgICAgICAgKCooJm52KSA9ICooJnN0ZHZpZXcpKTsKICAgICAgICBpZiAoIXNzY2Fudmll dygmbnYsIGJ1ZikpIHsKICAgICAgICAgICAgICAgIGVycm9yKDUsICJyYWQgZXJyb3IgLS0gbm8g c3VjaCB2aWV3PyIpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBu ZXd2aWV3KCZudik7Cn0KCgpnZXRhaW0ocykKY2hhciAqczsKewogICAgICAgIGRvdWJsZSB6ZmFj dDsKICAgICAgICBWSUVXIG52OwoKICAgICAgICBpZiAoZ2V0aW50ZXJlc3QocywgMSwgbnYudmRp ciwgJnpmYWN0KSA8IDApCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgbnYudHlwZSA9 IG91cnZpZXcudHlwZTsKICAgICAgICAoKG52LnZwKVswXT0ob3Vydmlldy52cClbMF0sKG52LnZw KVsxXT0ob3Vydmlldy52cClbMV0sKG52LnZwKVsyXT0ob3Vydmlldy52cClbMl0pOwogICAgICAg ICgobnYudnVwKVswXT0ob3Vydmlldy52dXApWzBdLChudi52dXApWzFdPShvdXJ2aWV3LnZ1cClb MV0sKG52LnZ1cClbMl09KG91cnZpZXcudnVwKVsyXSk7CiAgICAgICAgbnYuaG9yaXogPSBvdXJ2 aWV3Lmhvcml6OyBudi52ZXJ0ID0gb3Vydmlldy52ZXJ0OwogICAgICAgIG52LnZmb3JlID0gb3Vy dmlldy52Zm9yZTsgbnYudmFmdCA9IG91cnZpZXcudmFmdDsKICAgICAgICBudi5ob2ZmID0gb3Vy dmlldy5ob2ZmOyBudi52b2ZmID0gb3Vydmlldy52b2ZmOwogICAgICAgIHpvb212aWV3KCZudiwg emZhY3QpOwogICAgICAgIG5ld3ZpZXcoJm52KTsKfQoKCmdldG1vdmUocykKY2hhciAqczsKewog ICAgICAgIEZWRUNUIHZjOwogICAgICAgIGRvdWJsZSBtYWc7CgogICAgICAgIGlmIChnZXRpbnRl cmVzdChzLCAwLCB2YywgJm1hZykgPCAwKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg IG1vdmV2aWV3KDAuMCwgMC4wLCBtYWcsIHZjKTsKfQoKCmdldHJvdGF0ZShzKQpjaGFyICpzOwp7 CiAgICAgICAgVklFVyBudjsKICAgICAgICBGVkVDVCB2MTsKICAgICAgICBkb3VibGUgYW5nbGUs IGVsZXYsIHpmYWN0OwoKICAgICAgICBlbGV2ID0gMC4wOyB6ZmFjdCA9IDEuMDsKICAgICAgICBp ZiAoc3NjYW5mKHMsICIlbGYgJWxmICVsZiIsICZhbmdsZSwgJmVsZXYsICZ6ZmFjdCkgPCAxKSB7 CiAgICAgICAgICAgICAgICBlcnJvcig1LCAibWlzc2luZyBhbmdsZSIpOwogICAgICAgICAgICAg ICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBudi50eXBlID0gb3Vydmlldy50eXBlOwogICAg ICAgICgobnYudnApWzBdPShvdXJ2aWV3LnZwKVswXSwobnYudnApWzFdPShvdXJ2aWV3LnZwKVsx XSwobnYudnApWzJdPShvdXJ2aWV3LnZwKVsyXSk7CiAgICAgICAgKChudi52dXApWzBdPShvdXJ2 aWV3LnZ1cClbMF0sKG52LnZ1cClbMV09KG91cnZpZXcudnVwKVsxXSwobnYudnVwKVsyXT0ob3Vy dmlldy52dXApWzJdKTsKICAgICAgICBudi5ob2ZmID0gb3Vydmlldy5ob2ZmOyBudi52b2ZmID0g b3Vydmlldy52b2ZmOwogICAgICAgIG52LnZmb3JlID0gb3Vydmlldy52Zm9yZTsgbnYudmFmdCA9 IG91cnZpZXcudmFmdDsKICAgICAgICBzcGludmVjdG9yKG52LnZkaXIsIG91cnZpZXcudmRpciwg b3Vydmlldy52dXAsIGFuZ2xlKigoKGRvdWJsZSkzLjE0MTU5MjY1MzU4OTc5MzIzODQ2KS8xODAu KSk7CiAgICAgICAgaWYgKGVsZXYgIT0gMC4wKSB7CiAgICAgICAgICAgICAgICBmY3Jvc3ModjEs IG52LnZkaXIsIG91cnZpZXcudnVwKTsKICAgICAgICAgICAgICAgIG5vcm1hbGl6ZSh2MSk7CiAg ICAgICAgICAgICAgICBzcGludmVjdG9yKG52LnZkaXIsIG52LnZkaXIsIHYxLCBlbGV2KigoKGRv dWJsZSkzLjE0MTU5MjY1MzU4OTc5MzIzODQ2KS8xODAuKSk7CiAgICAgICAgfQogICAgICAgIG52 Lmhvcml6ID0gb3Vydmlldy5ob3JpejsgbnYudmVydCA9IG91cnZpZXcudmVydDsKICAgICAgICB6 b29tdmlldygmbnYsIHpmYWN0KTsKICAgICAgICBuZXd2aWV3KCZudik7Cn0KCgpnZXRwaXZvdChz KQpyZWdpc3RlciBjaGFyICpzOwp7CiAgICAgICAgRlZFQ1QgdmM7CiAgICAgICAgZG91YmxlIGFu Z2xlLCBlbGV2LCBtYWc7CgogICAgICAgIGVsZXYgPSAwLjA7CiAgICAgICAgaWYgKHNzY2FuZihz LCAiJWxmICVsZiIsICZhbmdsZSwgJmVsZXYpIDwgMSkgewogICAgICAgICAgICAgICAgZXJyb3Io NSwgIm1pc3NpbmcgYW5nbGUiKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAg ICAgICAgaWYgKGdldGludGVyZXN0KHNza2lwMihzLDIpLCAwLCB2YywgJm1hZykgPCAwKQogICAg ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIG1vdmV2aWV3KGFuZ2xlLCBlbGV2LCBtYWcsIHZj KTsKfQoKCmdldGV4cG9zdXJlKHMpCmNoYXIgKnM7CnsKICAgICAgICBjaGFyIGJ1ZlsxMjhdOwog ICAgICAgIHJlZ2lzdGVyIGNoYXIgKmNwOwogICAgICAgIFJFQ1QgcjsKICAgICAgICBpbnQgeCwg eTsKICAgICAgICByZWdpc3RlciBQTk9ERSAqcCA9ICZwdHJ1bms7CiAgICAgICAgaW50IGFkYXB0 ID0gMDsKICAgICAgICBkb3VibGUgZSA9IDEuMDsKCiAgICAgICAgZm9yIChjcCA9IHM7IChfX2N0 eXBlX2JbKGludCkgKCgqY3ApKV0gJiAodW5zaWduZWQgc2hvcnQgaW50KSBfSVNzcGFjZSk7IGNw KyspCiAgICAgICAgICAgICAgICA7CiAgICAgICAgaWYgKCpjcCA9PSAnQCcpIHsKICAgICAgICAg ICAgICAgIGFkYXB0Kys7CiAgICAgICAgICAgICAgICB3aGlsZSAoKF9fY3R5cGVfYlsoaW50KSAo KCorK2NwKSldICYgKHVuc2lnbmVkIHNob3J0IGludCkgX0lTc3BhY2UpKQogICAgICAgICAgICAg ICAgICAgICAgICA7CiAgICAgICAgfQogICAgICAgIGlmICgqY3AgPT0gJ1wwJykgewogICAgICAg ICAgICAgICAgaWYgKGRldi0+Z2V0Y3VyID09ICgodm9pZCAqKTApKQogICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAoKmRldi0+Y29tb3V0KSgiUGljayBwb2lu dCBmb3IgZXhwb3N1cmVcbiIpOwogICAgICAgICAgICAgICAgaWYgKCgqZGV2LT5nZXRjdXIpKCZ4 LCAmeSkgPT0gKCdDJy0nQCcpKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg ICAgICAgICAgICByLmwgPSByLmQgPSAwOwogICAgICAgICAgICAgICAgci5yID0gaHJlc29sdTsg ci51ID0gdnJlc29sdTsKICAgICAgICAgICAgICAgIHAgPSBmaW5kcmVjdCh4LCB5LCAmcHRydW5r LCAmciwgLTEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoKmNwID09ICc9 JykgewogICAgICAgICAgICAgICAgICAgICAgICBwID0gKCh2b2lkICopMCk7CiAgICAgICAgICAg ICAgICAgICAgICAgIGUgPSAxLjAvZXhwb3N1cmU7CiAgICAgICAgICAgICAgICAgICAgICAgIGZv ciAoY3ArKzsgKF9fY3R5cGVfYlsoaW50KSAoKCpjcCkpXSAmICh1bnNpZ25lZCBzaG9ydCBpbnQp IF9JU3NwYWNlKTsgY3ArKykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg ICAgICAgICAgICAgICAgICAgIGlmICgqY3AgPT0gJ1wwJykgewogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNwcmludGYoYnVmLCAiZXhwb3N1cmUgKCVmKTogIiwgZXhwb3N1cmUpOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqZGV2LT5jb21vdXQpKGJ1Zik7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpkZXYtPmNvbWluKShidWYsICgodm9pZCAqKTAp KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNwID0gYnVmOyAoX19jdHlw ZV9iWyhpbnQpICgoKmNwKSldICYgKHVuc2lnbmVkIHNob3J0IGludCkgX0lTc3BhY2UpOyBjcCsr KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmICgqY3AgPT0gJ1wwJykKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCpjcCA9PSAnKycgfHwgKmNwID09ICct JykKICAgICAgICAgICAgICAgICAgICAgICAgZSAqPSBwb3coMi4wLCBhdG9mKGNwKSk7CiAgICAg ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGUgKj0gYXRvZihjcCk7CiAg ICAgICAgfQogICAgICAgIGlmIChwICE9ICgodm9pZCAqKTApKSB7CiAgICAgICAgICAgICAgICBp ZiAoKCgwLjMzMCooICgxLi8wLjMzMzMpICogKCAwLjMzMzMqKDAuNjAwIC0gMC4wNjApIC0gMC4z MzMzKigwLjI5MCAtIDAuMTUwKSArIDAuMjkwKjAuMDYwIC0gMC4xNTAqMC42MDAgKSApLyggMC42 NDAqKDAuNjAwIC0gMC4wNjApICsgMC4yOTAqKDAuMDYwIC0gMC4zMzApICsgMC4xNTAqKDAuMzMw IC0gMC42MDApICkpKihwLT52KVswXSsoMC42MDAqKCAoMS4vMC4zMzMzKSAqICggMC4zMzMzKigw LjA2MCAtIDAuMzMwKSAtIDAuMzMzMyooMC4xNTAgLSAwLjY0MCkgLSAwLjY0MCowLjA2MCArIDAu MTUwKjAuMzMwICkgKS8oIDAuNjQwKigwLjYwMCAtIDAuMDYwKSArIDAuMjkwKigwLjA2MCAtIDAu MzMwKSArIDAuMTUwKigwLjMzMCAtIDAuNjAwKSApKSoocC0+dilbMV0rKDAuMDYwKiggKDEuLzAu MzMzMykgKiAoIDAuMzMzMyooMC4zMzAgLSAwLjYwMCkgLSAwLjMzMzMqKDAuNjQwIC0gMC4yOTAp ICsgMC42NDAqMC42MDAgLSAwLjI5MCowLjMzMCApICkvKCAwLjY0MCooMC42MDAgLSAwLjA2MCkg KyAwLjI5MCooMC4wNjAgLSAwLjMzMCkgKyAwLjE1MCooMC4zMzAgLSAwLjYwMCkgKSkqKHAtPnYp WzJdKSA8IDFlLTE1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKDUsICJjYW5ub3Qg bm9ybWFsaXplIHRvIHplcm8iKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGFkYXB0KQogICAgICAgICAgICAgICAg ICAgICAgICBlICo9IDEwNi4vcG93KDEuMjE5K3BvdygoMTc5LiAqICgoMC4zMzAqKCAoMS4vMC4z MzMzKSAqICggMC4zMzMzKigwLjYwMCAtIDAuMDYwKSAtIDAuMzMzMyooMC4yOTAgLSAwLjE1MCkg KyAwLjI5MCowLjA2MCAtIDAuMTUwKjAuNjAwICkgKS8oIDAuNjQwKigwLjYwMCAtIDAuMDYwKSAr IDAuMjkwKigwLjA2MCAtIDAuMzMwKSArIDAuMTUwKigwLjMzMCAtIDAuNjAwKSApKSoocC0+dilb MF0rKDAuNjAwKiggKDEuLzAuMzMzMykgKiAoIDAuMzMzMyooMC4wNjAgLSAwLjMzMCkgLSAwLjMz MzMqKDAuMTUwIC0gMC42NDApIC0gMC42NDAqMC4wNjAgKyAwLjE1MCowLjMzMCApICkvKCAwLjY0 MCooMC42MDAgLSAwLjA2MCkgKyAwLjI5MCooMC4wNjAgLSAwLjMzMCkgKyAwLjE1MCooMC4zMzAg LSAwLjYwMCkgKSkqKHAtPnYpWzFdKygwLjA2MCooICgxLi8wLjMzMzMpICogKCAwLjMzMzMqKDAu MzMwIC0gMC42MDApIC0gMC4zMzMzKigwLjY0MCAtIDAuMjkwKSArIDAuNjQwKjAuNjAwIC0gMC4y OTAqMC4zMzAgKSApLyggMC42NDAqKDAuNjAwIC0gMC4wNjApICsgMC4yOTAqKDAuMDYwIC0gMC4z MzApICsgMC4xNTAqKDAuMzMwIC0gMC42MDApICkpKihwLT52KVsyXSkpL2V4cG9zdXJlLC40KSwy LjUpL2V4cG9zdXJlOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAg ICBlICo9IDAuNSAvICgoMC4zMzAqKCAoMS4vMC4zMzMzKSAqICggMC4zMzMzKigwLjYwMCAtIDAu MDYwKSAtIDAuMzMzMyooMC4yOTAgLSAwLjE1MCkgKyAwLjI5MCowLjA2MCAtIDAuMTUwKjAuNjAw ICkgKS8oIDAuNjQwKigwLjYwMCAtIDAuMDYwKSArIDAuMjkwKigwLjA2MCAtIDAuMzMwKSArIDAu MTUwKigwLjMzMCAtIDAuNjAwKSApKSoocC0+dilbMF0rKDAuNjAwKiggKDEuLzAuMzMzMykgKiAo IDAuMzMzMyooMC4wNjAgLSAwLjMzMCkgLSAwLjMzMzMqKDAuMTUwIC0gMC42NDApIC0gMC42NDAq MC4wNjAgKyAwLjE1MCowLjMzMCApICkvKCAwLjY0MCooMC42MDAgLSAwLjA2MCkgKyAwLjI5MCoo MC4wNjAgLSAwLjMzMCkgKyAwLjE1MCooMC4zMzAgLSAwLjYwMCkgKSkqKHAtPnYpWzFdKygwLjA2 MCooICgxLi8wLjMzMzMpICogKCAwLjMzMzMqKDAuMzMwIC0gMC42MDApIC0gMC4zMzMzKigwLjY0 MCAtIDAuMjkwKSArIDAuNjQwKjAuNjAwIC0gMC4yOTAqMC4zMzAgKSApLyggMC42NDAqKDAuNjAw IC0gMC4wNjApICsgMC4yOTAqKDAuMDYwIC0gMC4zMzApICsgMC4xNTAqKDAuMzMwIC0gMC42MDAp ICkpKihwLT52KVsyXSk7CiAgICAgICAgfQogICAgICAgIGlmIChlIDw9ICgxZS02KSB8fCBmYWJz KDEuMCAtIGUpIDw9ICgxZS02KSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICBzY2Fs ZXBpY3QoJnB0cnVuaywgZSk7CiAgICAgICAgZXhwb3N1cmUgKj0gZTsKICAgICAgICByZWRyYXco KTsKfQoKCmdldHBhcmFtKHN0ciwgZHNjLCB0eXAsIHB0cikKY2hhciAqc3RyLCAqZHNjOwppbnQg dHlwOwpyZWdpc3RlciB1bmlvbiB7aW50IGk7IGRvdWJsZSBkOyBDT0xPUiBDO30gKnB0cjsKewog ICAgICAgIGV4dGVybiBjaGFyICppbmRleCgpOwogICAgICAgIGludCBpMDsKICAgICAgICBkb3Vi bGUgZDAsIGQxLCBkMjsKICAgICAgICBjaGFyIGJ1Zls0OF07CgogICAgICAgIHN3aXRjaCAodHlw KSB7CiAgICAgICAgY2FzZSAnaSc6CiAgICAgICAgICAgICAgICBpZiAoc3NjYW5mKHN0ciwgIiVk IiwgJmkwKSAhPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICgqZGV2LT5jb21vdXQpKGRz Yyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCAiICglZCk6ICIsIHB0ci0+ aSk7CiAgICAgICAgICAgICAgICAgICAgICAgICgqZGV2LT5jb21vdXQpKGJ1Zik7CiAgICAgICAg ICAgICAgICAgICAgICAgICgqZGV2LT5jb21pbikoYnVmLCAoKHZvaWQgKikwKSk7CiAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChzc2NhbmYoYnVmLCAiJWQiLCAmaTApICE9IDEpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOwogICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgcHRyLT5pID0gaTA7CiAgICAgICAgICAgICAgICByZXR1cm4oMSk7CiAgICAg ICAgY2FzZSAncic6CiAgICAgICAgICAgICAgICBpZiAoc3NjYW5mKHN0ciwgIiVsZiIsICZkMCkg IT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAoKmRldi0+Y29tb3V0KShkc2MpOwogICAg ICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgIiAoJS42Zyk6ICIsIHB0ci0+ZCk7CiAg ICAgICAgICAgICAgICAgICAgICAgICgqZGV2LT5jb21vdXQpKGJ1Zik7CiAgICAgICAgICAgICAg ICAgICAgICAgICgqZGV2LT5jb21pbikoYnVmLCAoKHZvaWQgKikwKSk7CiAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChzc2NhbmYoYnVmLCAiJWxmIiwgJmQwKSAhPSAxKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybigwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgIHB0ci0+ZCA9IGQwOwogICAgICAgICAgICAgICAgcmV0dXJuKDEpOwogICAgICAgIGNh c2UgJ2InOgogICAgICAgICAgICAgICAgaWYgKHNzY2FuZihzdHIsICIlMXMiLCBidWYpICE9IDEp IHsKICAgICAgICAgICAgICAgICAgICAgICAgKCpkZXYtPmNvbW91dCkoZHNjKTsKICAgICAgICAg ICAgICAgICAgICAgICAgc3ByaW50ZihidWYsICI/ICglYyk6ICIsIHB0ci0+aSA/ICd5JyA6ICdu Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICgqZGV2LT5jb21vdXQpKGJ1Zik7CiAgICAgICAg ICAgICAgICAgICAgICAgICgqZGV2LT5jb21pbikoYnVmLCAoKHZvaWQgKikwKSk7CiAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChidWZbMF0gPT0gJ1wwJyB8fAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW5kZXgoInlZKzF0VG5OLTBmRiIsIGJ1ZlswXSkgPT0gKCh2 b2lkICopMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOwogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcHRyLT5pID0gaW5kZXgoInlZKzF0VCIsIGJ1 ZlswXSkgIT0gKCh2b2lkICopMCk7CiAgICAgICAgICAgICAgICByZXR1cm4oMSk7CiAgICAgICAg Y2FzZSAnQyc6CiAgICAgICAgICAgICAgICBpZiAoc3NjYW5mKHN0ciwgIiVsZiAlbGYgJWxmIiwg JmQwLCAmZDEsICZkMikgIT0gMykgewogICAgICAgICAgICAgICAgICAgICAgICAoKmRldi0+Y29t b3V0KShkc2MpOwogICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgIiAoJS42ZyAl LjZnICUuNmcpOiAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChw dHItPkMpWzBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocHRy LT5DKVsxXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHB0ci0+ QylbMl0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgKCpkZXYtPmNvbW91dCkoYnVmKTsKICAg ICAgICAgICAgICAgICAgICAgICAgKCpkZXYtPmNvbWluKShidWYsICgodm9pZCAqKTApKTsKICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKHNzY2FuZihidWYsICIlbGYgJWxmICVsZiIsICZkMCwg JmQxLCAmZDIpICE9IDMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDAp OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKChwdHItPkMpWzBdPShkMCksKHB0 ci0+QylbMV09KGQxKSwocHRyLT5DKVsyXT0oZDIpKTsKICAgICAgICAgICAgICAgIHJldHVybigx KTsKICAgICAgICB9Cn0KCgpzZXRwYXJhbShzKQpyZWdpc3RlciBjaGFyICpzOwp7CiAgICAgICAg ZXh0ZXJuIGludCBwc2FtcGxlOwogICAgICAgIGV4dGVybiBkb3VibGUgbWF4ZGlmZjsKICAgICAg ICBleHRlcm4gZG91YmxlIG1pbndlaWdodDsKICAgICAgICBleHRlcm4gaW50IG1heGRlcHRoOwog ICAgICAgIGV4dGVybiBkb3VibGUgZHN0cnNyYzsKICAgICAgICBleHRlcm4gZG91YmxlIHNoYWR0 aHJlc2g7CiAgICAgICAgZXh0ZXJuIGRvdWJsZSBzaGFkY2VydDsKICAgICAgICBleHRlcm4gQ09M T1IgYW1idmFsOwogICAgICAgIGV4dGVybiBpbnQgYW1idnd0OwogICAgICAgIGV4dGVybiBkb3Vi bGUgYW1iYWNjOwogICAgICAgIGV4dGVybiBpbnQgYW1icmVzOwogICAgICAgIGV4dGVybiBpbnQg YW1iZGl2OwogICAgICAgIGV4dGVybiBpbnQgYW1ic3NhbXA7CiAgICAgICAgZXh0ZXJuIGludCBh bWJvdW5jZTsKICAgICAgICBleHRlcm4gQ09MT1IgY2V4dGluY3Rpb247CiAgICAgICAgZXh0ZXJu IENPTE9SIHNhbGJlZG87CiAgICAgICAgZXh0ZXJuIGRvdWJsZSBzZWNjZzsKICAgICAgICBleHRl cm4gZG91YmxlIHNzYW1wZGlzdDsKICAgICAgICBleHRlcm4gaW50IGRpcmVjdHZpczsKICAgICAg ICBleHRlcm4gZG91YmxlIHNyY3NpemVyYXQ7CiAgICAgICAgZXh0ZXJuIGludCBkb19pcnJhZDsK ICAgICAgICBleHRlcm4gZG91YmxlIHNwZWNqaXR0ZXI7CiAgICAgICAgZXh0ZXJuIGRvdWJsZSBz cGVjdGhyZXNoOwogICAgICAgIGV4dGVybiBpbnQgYmFja3ZpczsKICAgICAgICBjaGFyIGJ1Zlsx MjhdOwoKICAgICAgICBpZiAoc1swXSA9PSAnXDAnKSB7CiAgICAgICAgICAgICAgICAoKmRldi0+ Y29tb3V0KSgKICAgICAgICAgICAgICAgICJhYSBhYiBhZCBhciBhcyBhdiBhdyBiIGRjIGR2IGRq IGRzIGR0IGkgbHIgbHcgbWUgbWEgbWcgbXMgcHMgcHQgc2ogc3QgYnY6ICIpOwogICAgICAgICAg ICAgICAgKCpkZXYtPmNvbWluKShidWYsICgodm9pZCAqKTApKTsKICAgICAgICAgICAgICAgIHMg PSBidWY7CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAoc1swXSkgewogICAgICAgIGNhc2UgJ2wn OgogICAgICAgICAgICAgICAgc3dpdGNoIChzWzFdKSB7CiAgICAgICAgICAgICAgICBjYXNlICd3 JzoKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0cGFyYW0ocysyLCAibGltaXQgd2VpZ2h0Iiwg J3InLCAmbWlud2VpZ2h0KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICAgICAgICBjYXNlICdyJzoKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0cGFyYW0ocysyLCAi bGltaXQgcmVmbGVjdGlvbiIsICdpJywgJm1heGRlcHRoKTsKICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAg ICBnb3RvIGJhZHBhcmFtOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgY2FzZSAnZCc6CiAgICAgICAgICAgICAgICBzd2l0Y2ggKHNbMV0pIHsKICAgICAg ICAgICAgICAgIGNhc2UgJ2onOgogICAgICAgICAgICAgICAgICAgICAgICBnZXRwYXJhbShzKzIs ICJkaXJlY3Qgaml0dGVyIiwgJ3InLCAmZHN0cnNyYyk7CiAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnYyc6CiAgICAgICAgICAgICAgICAgICAgICAg IGdldHBhcmFtKHMrMiwgImRpcmVjdCBjZXJ0YWludHkiLCAncicsICZzaGFkY2VydCk7CiAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAndCc6CiAgICAg ICAgICAgICAgICAgICAgICAgIGdldHBhcmFtKHMrMiwgImRpcmVjdCB0aHJlc2hvbGQiLCAncics ICZzaGFkdGhyZXNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg ICAgICBjYXNlICd2JzoKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0cGFyYW0ocysyLCAiZGly ZWN0IHZpc2liaWxpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg J2InLCAmZGlyZWN0dmlzKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICAgICAgICBjYXNlICdzJzoKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0cGFyYW0ocysyLCAi ZGlyZWN0IHNhbXBsaW5nIiwgJ3InLCAmc3Jjc2l6ZXJhdCk7CiAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAg ICAgZ290byBiYWRwYXJhbTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgIGNhc2UgJ2InOgogICAgICAgICAgICAgICAgc3dpdGNoIChzWzFdKSB7CiAgICAg ICAgICAgICAgICBjYXNlICd2JzoKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0cGFyYW0ocysy LCAiYmFjayBmYWNlIHZpc2liaWxpdHkiLCAnYicsICZiYWNrdmlzKTsKICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdcMCc6CiAgICAgICAgICAgICAg ICBjYXNlICcgJzoKICAgICAgICAgICAgICAgIGNhc2UgJ3knOiBjYXNlICdZJzogY2FzZSAndCc6 IGNhc2UgJ1QnOiBjYXNlICcxJzogY2FzZSAnKyc6CiAgICAgICAgICAgICAgICBjYXNlICduJzog Y2FzZSAnTic6IGNhc2UgJ2YnOiBjYXNlICdGJzogY2FzZSAnMCc6IGNhc2UgJy0nOgogICAgICAg ICAgICAgICAgICAgICAgICBnZXRwYXJhbShzKzEsICJibGFjayBhbmQgd2hpdGUiLCAnYicsICZn cmV5c2NhbGUpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFkcGFyYW07CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdpJzoKICAgICAg ICAgICAgICAgIGdldHBhcmFtKHMrMSwgImlycmFkaWFuY2UiLCAnYicsICZkb19pcnJhZCk7CiAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdhJzoKICAgICAgICAgICAgICAgIHN3 aXRjaCAoc1sxXSkgewogICAgICAgICAgICAgICAgY2FzZSAndic6CiAgICAgICAgICAgICAgICAg ICAgICAgIGdldHBhcmFtKHMrMiwgImFtYmllbnQgdmFsdWUiLCAnQycsIChDT0xPUiAqKWFtYnZh bCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAn dyc6CiAgICAgICAgICAgICAgICAgICAgICAgIGdldHBhcmFtKHMrMiwgImFtYmllbnQgdmFsdWUg d2VpZ2h0IiwgJ2knLCAmYW1idnd0KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICAgICAgICBjYXNlICdhJzoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdldHBh cmFtKHMrMiwgImFtYmllbnQgYWNjdXJhY3kiLCAncicsICZhbWJhY2MpKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNldGFtYmFjYyhhbWJhY2MpOwogICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2QnOgogICAgICAgICAgICAgICAgICAg ICAgICBnZXRwYXJhbShzKzIsICJhbWJpZW50IGRpdmlzaW9ucyIsICdpJywgJmFtYmRpdik7CiAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAncyc6CiAg ICAgICAgICAgICAgICAgICAgICAgIGdldHBhcmFtKHMrMiwgImFtYmllbnQgc3VwZXItc2FtcGxl cyIsICdpJywgJmFtYnNzYW1wKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICAgICBjYXNlICdiJzoKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0cGFyYW0ocysy LCAiYW1iaWVudCBib3VuY2VzIiwgJ2knLCAmYW1ib3VuY2UpOwogICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3InOgogICAgICAgICAgICAgICAgICAg ICAgICBpZiAoZ2V0cGFyYW0ocysyLCAiYW1iaWVudCByZXNvbHV0aW9uIiwgJ2knLCAmYW1icmVz KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRhbWJyZXMoYW1icmVzKTsKICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAg ICAgICAgICAgICAgICAgICAgICBnb3RvIGJhZHBhcmFtOwogICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnbSc6CiAgICAgICAgICAgICAgICBzd2l0 Y2ggKHNbMV0pIHsKICAgICAgICAgICAgICAgIGNhc2UgJ2UnOgogICAgICAgICAgICAgICAgICAg ICAgICBnZXRwYXJhbShzKzIsICJleHRpbmN0aW9uIGNvZWZmaWNpZW50IiwgJ0MnLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENPTE9SICopY2V4dGluY3Rpb24pOwog ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2EnOgog ICAgICAgICAgICAgICAgICAgICAgICBnZXRwYXJhbShzKzIsICJzY2F0dGVyaW5nIGFsYmVkbyIs ICdDJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDT0xPUiAqKXNh bGJlZG8pOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNh c2UgJ2cnOgogICAgICAgICAgICAgICAgICAgICAgICBnZXRwYXJhbShzKzIsICJzY2F0dGVyaW5n IGVjY2VudHJpY2l0eSIsICdyJywgJnNlY2NnKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgICAgICAgICBjYXNlICdzJzoKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0 cGFyYW0ocysyLCAibWlzdCBzYW1wbGluZyBkaXN0YW5jZSIsICdyJywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZzc2FtcGRpc3QpOwogICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAg ICAgIGdvdG8gYmFkcGFyYW07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICBjYXNlICdwJzoKICAgICAgICAgICAgICAgIHN3aXRjaCAoc1sxXSkgewogICAg ICAgICAgICAgICAgY2FzZSAncyc6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRwYXJh bShzKzIsICJwaXhlbCBzYW1wbGUiLCAnaScsICZwc2FtcGxlKSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwZGVwdGggPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICAgIGNhc2UgJ3QnOgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0 cGFyYW0ocysyLCAicGl4ZWwgdGhyZXNob2xkIiwgJ3InLCAmbWF4ZGlmZikpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGRlcHRoID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICBn b3RvIGJhZHBhcmFtOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgY2FzZSAncyc6CiAgICAgICAgICAgICAgICBzd2l0Y2ggKHNbMV0pIHsKICAgICAgICAg ICAgICAgIGNhc2UgJ2onOgogICAgICAgICAgICAgICAgICAgICAgICBnZXRwYXJhbShzKzIsICJz cGVjdWxhciBqaXR0ZXIiLCAncicsICZzcGVjaml0dGVyKTsKICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICd0JzoKICAgICAgICAgICAgICAgICAgICAg ICAgZ2V0cGFyYW0ocysyLCAic3BlY3VsYXIgdGhyZXNob2xkIiwgJ3InLCAmc3BlY3RocmVzaCk7 CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoK ICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWRwYXJhbTsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ1wwJzoKICAgICAgICAgICAgICAg IGJyZWFrOwogICAgICAgIGRlZmF1bHQ6OwpiYWRwYXJhbToKICAgICAgICAgICAgICAgICpzc2tp cChzKSA9ICdcMCc7CiAgICAgICAgICAgICAgICBzcHJpbnRmKGVycm1zZywgIiVzOiB1bmtub3du IHZhcmlhYmxlIiwgcyk7CiAgICAgICAgICAgICAgICBlcnJvcig1LCBlcnJtc2cpOwogICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgfQp9CgoKdHJhY2VyYXkocykKY2hhciAqczsKewogICAg ICAgIGNoYXIgYnVmWzEyOF07CiAgICAgICAgaW50IHgsIHk7CiAgICAgICAgT0JKUkVDICppbm87 CiAgICAgICAgUkFZIHRoaXNyYXk7CgogICAgICAgIHRoaXNyYXkucm1heCA9IDAuMDsKCiAgICAg ICAgaWYgKCEoc3NjYW5mKHMsIiVsZiAlbGYgJWxmIix0aGlzcmF5LnJvcmcsdGhpc3JheS5yb3Jn KzEsdGhpc3JheS5yb3JnKzIpPT0zKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAhKHNzY2Fu Zihzc2tpcDIocywzKSwiJWxmICVsZiAlbGYiLHRoaXNyYXkucmRpcix0aGlzcmF5LnJkaXIrMSx0 aGlzcmF5LnJkaXIrMik9PTMpKSB7CgogICAgICAgICAgICAgICAgaWYgKGRldi0+Z2V0Y3VyID09 ICgodm9pZCAqKTApKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg ICAgICAoKmRldi0+Y29tb3V0KSgiUGljayByYXlcbiIpOwogICAgICAgICAgICAgICAgaWYgKCgq ZGV2LT5nZXRjdXIpKCZ4LCAmeSkgPT0gKCdDJy0nQCcpKQogICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm47CgogICAgICAgICAgICAgICAgaWYgKCh0aGlzcmF5LnJtYXggPSB2aWV3cmF5KHRo aXNyYXkucm9yZywgdGhpc3JheS5yZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAmb3Vydmll dywgKHgrLjUpL2hyZXNvbHUsICh5Ky41KS92cmVzb2x1KSkgPCAtKDFlLTYpKSB7CiAgICAgICAg ICAgICAgICAgICAgICAgIGVycm9yKDUsICJub3Qgb24gaW1hZ2UiKTsKICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICB9IGVsc2UgaWYgKG5v cm1hbGl6ZSh0aGlzcmF5LnJkaXIpID09IDAuMCkgewogICAgICAgICAgICAgICAgZXJyb3IoNSwg Inplcm8gcmF5IGRpcmVjdGlvbiIpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0K CiAgICAgICAgcmF5b3JpZ2luKCZ0aGlzcmF5LCAoKHZvaWQgKikwKSwgMDEsIDEuMCk7CgogICAg ICAgICgqKCZ0aGlzcmF5KS0+cmV2ZikoJnRoaXNyYXkpOwoKICAgICAgICBpZiAodGhpc3JheS5y byA9PSAoKHZvaWQgKikwKSkKICAgICAgICAgICAgICAgICgqZGV2LT5jb21vdXQpKCJyYXkgaGl0 IG5vdGhpbmciKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCAi cmF5IGhpdCAlcyVzICVzIFwiJXNcIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGhpc3JheS5yb2QgPCAwLjAgPyAiYmFjayBvZiAiIDogIiIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGhpc3JheS5yby0+b21vZCA9PSAoLTEpID8gInZvaWQiIDoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvYmpibG9ja1sodGhpc3JheS5yby0+b21v ZCk+PjldKygodGhpc3JheS5yby0+b21vZCkmKCgxPDw5KS0xKSkpLT5vbmFtZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvZnVuW3RoaXNyYXkucm8tPm90eXBlXS5mdW5hbWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc3JheS5yby0+b25hbWUpOwogICAgICAg ICAgICAgICAgaWYgKChpbm8gPSAob2JqYmxvY2tbKHRoaXNyYXkucm9iaik+PjldKygodGhpc3Jh eS5yb2JqKSYoKDE8PDkpLTEpKSkpICE9IHRoaXNyYXkucm8pCiAgICAgICAgICAgICAgICAgICAg ICAgIHNwcmludGYoYnVmK3N0cmxlbihidWYpLCAiIGluICVzIFwiJXNcIiIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZnVuW2luby0+b3R5cGVdLmZ1bmFtZSwgaW5v LT5vbmFtZSk7CiAgICAgICAgICAgICAgICAoKmRldi0+Y29tb3V0KShidWYpOwogICAgICAgICAg ICAgICAgKCpkZXYtPmNvbWluKShidWYsICgodm9pZCAqKTApKTsKICAgICAgICAgICAgICAgIGlm ICh0aGlzcmF5LnJvdCA+PSAoMWUxMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICgqZGV2LT5j b21vdXQpKCJhdCBpbmZpbml0eSIpOwogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg ICAgICAgICAgICAgIHNwcmludGYoYnVmLCAiYXQgKCUuNmcgJS42ZyAlLjZnKSAoJS42ZykiLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc3JheS5yb3BbMF0sIHRo aXNyYXkucm9wWzFdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp c3JheS5yb3BbMl0sIHRoaXNyYXkucnQpOwogICAgICAgICAgICAgICAgICAgICAgICAoKmRldi0+ Y29tb3V0KShidWYpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKCpkZXYtPmNv bWluKShidWYsICgodm9pZCAqKTApKTsKICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCAidmFs dWUgKCUuNWcgJS41ZyAlLjVnKSAoJS4xZkwpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoKHRoaXNyYXkucmNvbClbMF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICgodGhpc3JheS5yY29sKVsxXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh0 aGlzcmF5LnJjb2wpWzJdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTc5LiAq ICgoMC4zMzAqKCAoMS4vMC4zMzMzKSAqICggMC4zMzMzKigwLjYwMCAtIDAuMDYwKSAtIDAuMzMz MyooMC4yOTAgLSAwLjE1MCkgKyAwLjI5MCowLjA2MCAtIDAuMTUwKjAuNjAwICkgKS8oIDAuNjQw KigwLjYwMCAtIDAuMDYwKSArIDAuMjkwKigwLjA2MCAtIDAuMzMwKSArIDAuMTUwKigwLjMzMCAt IDAuNjAwKSApKSoodGhpc3JheS5yY29sKVswXSsoMC42MDAqKCAoMS4vMC4zMzMzKSAqICggMC4z MzMzKigwLjA2MCAtIDAuMzMwKSAtIDAuMzMzMyooMC4xNTAgLSAwLjY0MCkgLSAwLjY0MCowLjA2 MCArIDAuMTUwKjAuMzMwICkgKS8oIDAuNjQwKigwLjYwMCAtIDAuMDYwKSArIDAuMjkwKigwLjA2 MCAtIDAuMzMwKSArIDAuMTUwKigwLjMzMCAtIDAuNjAwKSApKSoodGhpc3JheS5yY29sKVsxXSso MC4wNjAqKCAoMS4vMC4zMzMzKSAqICggMC4zMzMzKigwLjMzMCAtIDAuNjAwKSAtIDAuMzMzMyoo MC42NDAgLSAwLjI5MCkgKyAwLjY0MCowLjYwMCAtIDAuMjkwKjAuMzMwICkgKS8oIDAuNjQwKigw LjYwMCAtIDAuMDYwKSArIDAuMjkwKigwLjA2MCAtIDAuMzMwKSArIDAuMTUwKigwLjMzMCAtIDAu NjAwKSApKSoodGhpc3JheS5yY29sKVsyXSkpKTsKICAgICAgICAgICAgICAgICgqZGV2LT5jb21v dXQpKGJ1Zik7CiAgICAgICAgfQogICAgICAgICgqZGV2LT5jb21pbikoYnVmLCAoKHZvaWQgKikw KSk7Cn0KCgp3cml0ZXBpY3QocykKY2hhciAqczsKewogICAgICAgIHN0YXRpYyBjaGFyIGJ1Zlsx MjhdOwogICAgICAgIGNoYXIgKmZuYW1lOwogICAgICAgIEZJTEUgKmZwOwogICAgICAgIENPTFIg KnNjYW5saW5lOwogICAgICAgIGludCB5OwoKICAgICAgICB3aGlsZSAoKF9fY3R5cGVfYlsoaW50 KSAoKCpzKSldICYgKHVuc2lnbmVkIHNob3J0IGludCkgX0lTc3BhY2UpKQogICAgICAgICAgICAg ICAgcysrOwogICAgICAgIGlmICgqcykKICAgICAgICAgICAgICAgIGF0b3MoYnVmLCBzaXplb2Yo YnVmKSwgcyk7CiAgICAgICAgZWxzZSBpZiAoYnVmWzBdID09ICdcMCcpIHsKICAgICAgICAgICAg ICAgIGVycm9yKDUsICJubyBmaWxlIik7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg fQogICAgICAgIGlmICgoZm5hbWUgPSBnZXRwYXRoKGJ1ZiwgKCh2b2lkICopMCksIDApKSA9PSAo KHZvaWQgKikwKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAoZnAgPSBmb3BlbihmbmFtZSwg InciKSkgPT0gKCh2b2lkICopMCkpIHsKICAgICAgICAgICAgICAgIHNwcmludGYoZXJybXNnLCAi Y2Fubm90IG9wZW4gXCIlc1wiIiwgYnVmKTsKICAgICAgICAgICAgICAgIGVycm9yKDUsIGVycm1z Zyk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKCgogICAgICAgICgqZGV2LT5j b21vdXQpKCJ3cml0aW5nIFwiIik7CiAgICAgICAgKCpkZXYtPmNvbW91dCkoZm5hbWUpOwogICAg ICAgICgqZGV2LT5jb21vdXQpKCJcIi4uLlxuIik7CgogICAgICAgIG5ld2hlYWRlcigiUkFESUFO Q0UiLCBmcCk7CiAgICAgICAgZnB1dHMocHJvZ25hbWUsIGZwKTsKICAgICAgICBmcHJpbnR2aWV3 KCZvdXJ2aWV3LCBmcCk7CiAgICAgICAgaWYgKG9jdG5hbWUgIT0gKCh2b2lkICopMCkpCiAgICAg ICAgICAgICAgICBmcHJpbnRmKGZwLCAiICVzXG4iLCBvY3RuYW1lKTsKICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICBfSU9fcHV0YyAoJ1xuJywgZnApOwogICAgICAgIGZwcmludGYoZnAsICJT T0ZUV0FSRT0gJXNcbiIsIFZlcnNpb25JRCk7CiAgICAgICAgZnB1dG5vdyhmcCk7CiAgICAgICAg aWYgKGV4cG9zdXJlICE9IDEuMCkKICAgICAgICAgICAgICAgIGZwcmludGYoZnAsIiVzJWVcbiIs IkVYUE9TVVJFPSIsZXhwb3N1cmUpOwogICAgICAgIGlmIChkZXYtPnBpeGFzcGVjdCAhPSAxLjAp CiAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCIlcyVmXG4iLCJQSVhBU1BFQ1Q9IixkZXYtPnBp eGFzcGVjdCk7CiAgICAgICAgZnB1dGZvcm1hdCgiMzItYml0X3JsZV9yZ2JlIiwgZnApOwogICAg ICAgIF9JT19wdXRjICgnXG4nLCBmcCk7CiAgICAgICAgZnByaW50ZihmcCwiLVkgJWQgK1ggJWRc biIsdnJlc29sdSxocmVzb2x1KTsKCiAgICAgICAgc2NhbmxpbmUgPSAoQ09MUiAqKW1hbGxvYyho cmVzb2x1KnNpemVvZihDT0xSKSk7CiAgICAgICAgaWYgKHNjYW5saW5lID09ICgodm9pZCAqKTAp KSB7CiAgICAgICAgICAgICAgICBlcnJvcig1LCAibm90IGVub3VnaCBtZW1vcnkhIik7CiAgICAg ICAgICAgICAgICBmY2xvc2UoZnApOwogICAgICAgICAgICAgICAgdW5saW5rKGZuYW1lKTsKICAg ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZm9yICh5ID0gdnJlc29sdS0x OyB5ID49IDA7IHktLSkgewogICAgICAgICAgICAgICAgZ2V0cGljdGNvbHJzKHksIHNjYW5saW5l LCAmcHRydW5rLCBocmVzb2x1LCB2cmVzb2x1KTsKICAgICAgICAgICAgICAgIGlmIChmd3JpdGVj b2xycyhzY2FubGluZSwgaHJlc29sdSwgZnApIDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgfQogICAgICAgIGZyZWUoKGNoYXIgKilzY2FubGluZSk7CiAgICAgICAg aWYgKGZjbG9zZShmcCkgPCAwKQogICAgICAgICAgICAgICAgZXJyb3IoNSwgIndyaXRlIGVycm9y Iik7Cn0K