From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2418 invoked by alias); 21 Aug 2002 10:06:02 -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 2400 invoked by uid 71); 21 Aug 2002 10:06:01 -0000 Resent-Date: 21 Aug 2002 10:06:01 -0000 Resent-Message-ID: <20020821100601.2399.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, sowhat@amnis.co.jp Received: (qmail 855 invoked by uid 61); 21 Aug 2002 09:57:25 -0000 Message-Id: <20020821095725.854.qmail@sources.redhat.com> Date: Wed, 21 Aug 2002 03:46:00 -0000 From: sowhat@amnis.co.jp Reply-To: sowhat@amnis.co.jp To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c/7675: Internal compiler error in fixup_var_refs_1 X-SW-Source: 2002-08/txt/msg00439.txt.bz2 List-Id: >Number: 7675 >Category: c >Synopsis: Internal compiler error in fixup_var_refs_1 >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Wed Aug 21 03:06:01 PDT 2002 >Closed-Date: >Last-Modified: >Originator: sowhat@amnis.co.jp >Release: 3.2.1 20020819 (prerelease) >Organization: >Environment: Configured with: ./configure --enable-languages=c,c++,objc --disable-shared --enable-threads --without-cvs --prefix=/usr/local/snap/gcc-20020819 i686-pc-linux-gnu Thread model: posix gcc version 3.2.1 20020819 (prerelease) >Description: Reading specs from /usr/local/snap/gcc-20020819/lib/gcc-lib/i686-pc-linux-gnu/3.2.1/specs Configured with: ./configure --enable-languages=c,c++,objc --disable-shared --enable-threads --without-cvs --prefix=/usr/local/snap/gcc-20020819 i686-pc-linux-gnu Thread model: posix gcc version 3.2.1 20020819 (prerelease) /usr/local/snap/gcc-20020819/lib/gcc-lib/i686-pc-linux-gnu/3.2.1/cpp0 -lang-c -v -I. -I. -I../../src/sdbm.v0 -iprefix /usr/local/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.2.1/ -D__GNUC__=3 -D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=1 -D__GXX_ABI_VERSION=102 -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__STDC_HOSTED__=1 -dD -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__i586 -D__i586__ -D__pentium -D__pentium__ -D__tune_i586__ -D__tune_pentium__ -DAXIS_LIBOBJ -DcCompo=cCompoSdbmV0 ../../src/sdbm.v0/sdbmfldu.c -Wall -Wcast-align -Wno-format -Werror sdbmfldu.i GNU CPP version 3.2.1 20020819 (prerelease) (cpplib) (i386 Linux/ELF) ignoring nonexistent directory "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.2.1/include" ignoring nonexistent directory "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.2.1/../../../../i686-pc-linux-gnu/include" ignoring nonexistent directory "/usr/local/snap/gcc-20020819/i686-pc-linux-gnu/include" ignoring duplicate directory "." #include "..." search starts here: #include <...> search starts here: . ../../src/sdbm.v0 /usr/local/include /usr/local/snap/gcc-20020819/include /usr/local/snap/gcc-20020819/lib/gcc-lib/i686-pc-linux-gnu/3.2.1/include /usr/include End of search list. /usr/local/snap/gcc-20020819/lib/gcc-lib/i686-pc-linux-gnu/3.2.1/cc1 -fpreprocessed sdbmfldu.i -quiet -dumpbase sdbmfldu.c -mcpu=pentium -march=pentium -malign-double -g3 -O2 -Wall -Wcast-align -Wno-format -Werror -version -fexceptions -o sdbmfldu.s GNU CPP version 3.2.1 20020819 (prerelease) (cpplib) (i386 Linux/ELF) GNU C version 3.2.1 20020819 (prerelease) (i686-pc-linux-gnu) compiled by GNU C version 2.95.4 20011002 (Debian prerelease). ../../src/sdbm.v0/sdbmfldu.c: In function `SdbmListData': ../../src/sdbm.v0/sdbmfldu.c:1590: Internal compiler error in fixup_var_refs_1, at function.c:1964 Please submit a full bug report, with preprocessed source if appropriate. See for instructions. >How-To-Repeat: It reappears only in this specific source file. It does not reappear in GCC-2.95. It reappears in any GCC-3.x(3.0.0/3.1/3.1.1/3.2) >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="sdbmfldu.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="sdbmfldu.i" IyAxICIuLi8uLi9zcmMvc2RibS52MC9zZGJtZmxkdS5jIgojIDEgIjxidWlsdC1pbj4iCiNkZWZp bmUgX19WRVJTSU9OX18gIjMuMi4xIDIwMDIwODE5IChwcmVyZWxlYXNlKSIKI2RlZmluZSBfX1VT RVJfTEFCRUxfUFJFRklYX18gCiNkZWZpbmUgX19SRUdJU1RFUl9QUkVGSVhfXyAKI2RlZmluZSBf X0hBVkVfQlVJTFRJTl9TRVRKTVBfXyAxCiNkZWZpbmUgX19TSVpFX1RZUEVfXyB1bnNpZ25lZCBp bnQKI2RlZmluZSBfX1BUUkRJRkZfVFlQRV9fIGludAojZGVmaW5lIF9fV0NIQVJfVFlQRV9fIGxv bmcgaW50CiNkZWZpbmUgX19XSU5UX1RZUEVfXyB1bnNpZ25lZCBpbnQKI2RlZmluZSBfX1NURENf XyAxCiMgMSAiPGNvbW1hbmQgbGluZT4iCiNkZWZpbmUgX19HTlVDX18gMwojIDEgIjxjb21tYW5k IGxpbmU+IgojZGVmaW5lIF9fR05VQ19NSU5PUl9fIDIKIyAxICI8Y29tbWFuZCBsaW5lPiIKI2Rl ZmluZSBfX0dOVUNfUEFUQ0hMRVZFTF9fIDEKIyAxICI8Y29tbWFuZCBsaW5lPiIKI2RlZmluZSBf X0dYWF9BQklfVkVSU0lPTiAxMDIKIyAxICI8Y29tbWFuZCBsaW5lPiIKI2RlZmluZSBfX0VMRl9f IDEKIyAxICI8Y29tbWFuZCBsaW5lPiIKI2RlZmluZSB1bml4IDEKIyAxICI8Y29tbWFuZCBsaW5l PiIKI2RlZmluZSBfX2dudV9saW51eF9fIDEKIyAxICI8Y29tbWFuZCBsaW5lPiIKI2RlZmluZSBs aW51eCAxCiMgMSAiPGNvbW1hbmQgbGluZT4iCiNkZWZpbmUgX19FTEZfXyAxCiMgMSAiPGNvbW1h bmQgbGluZT4iCiNkZWZpbmUgX191bml4X18gMQojIDEgIjxjb21tYW5kIGxpbmU+IgojZGVmaW5l IF9fZ251X2xpbnV4X18gMQojIDEgIjxjb21tYW5kIGxpbmU+IgojZGVmaW5lIF9fbGludXhfXyAx CiMgMSAiPGNvbW1hbmQgbGluZT4iCiNkZWZpbmUgX191bml4IDEKIyAxICI8Y29tbWFuZCBsaW5l PiIKI2RlZmluZSBfX2xpbnV4IDEKIyAxICI8Y29tbWFuZCBsaW5lPiIKI2RlZmluZSBfX09QVElN SVpFX18gMQojIDEgIjxjb21tYW5kIGxpbmU+IgojZGVmaW5lIF9fU1REQ19IT1NURURfXyAxCiMg MSAiPGNvbW1hbmQgbGluZT4iCiNkZWZpbmUgaTM4NiAxCiMgMSAiPGNvbW1hbmQgbGluZT4iCiNk ZWZpbmUgX19pMzg2IDEKIyAxICI8Y29tbWFuZCBsaW5lPiIKI2RlZmluZSBfX2kzODZfXyAxCiMg MSAiPGNvbW1hbmQgbGluZT4iCiNkZWZpbmUgX19pNTg2IDEKIyAxICI8Y29tbWFuZCBsaW5lPiIK I2RlZmluZSBfX2k1ODZfXyAxCiMgMSAiPGNvbW1hbmQgbGluZT4iCiNkZWZpbmUgX19wZW50aXVt IDEKIyAxICI8Y29tbWFuZCBsaW5lPiIKI2RlZmluZSBfX3BlbnRpdW1fXyAxCiMgMSAiPGNvbW1h bmQgbGluZT4iCiNkZWZpbmUgX190dW5lX2k1ODZfXyAxCiMgMSAiPGNvbW1hbmQgbGluZT4iCiNk ZWZpbmUgX190dW5lX3BlbnRpdW1fXyAxCiMgMSAiPGNvbW1hbmQgbGluZT4iCiNkZWZpbmUgQVhJ U19MSUJPQkogMQojIDEgIjxjb21tYW5kIGxpbmU+IgojZGVmaW5lIGNDb21wbyBjQ29tcG9TZGJt VjAKIyAxICIuLi8uLi9zcmMvc2RibS52MC9zZGJtZmxkdS5jIgojIDEzICIuLi8uLi9zcmMvc2Ri bS52MC9zZGJtZmxkdS5jIgojZGVmaW5lIF9BWElTX1NEQk1GTERVX0NfIApzdGF0aWMgY2hhciBj b25zdCByY3NpZFtdID0gIiRJZDogc2RibWZsZHUuYyx2IDAuODQgMjAwMS0wOC0yNyAyMTozMDox MSswOSBzb3doYXQgRXhwICQiCiIkQ29weXJpZ2h0OiAoQykgMTk5OCwxOTk5LDIwMDAsMjAwMSBB bW5pcyBDb3JwLiAkIjsKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAyNCAi L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiNkZWZpbmUgX1NZU19UWVBFU19IIDEKCiMgMSAi L3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIwICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu aCIgMwojZGVmaW5lIF9GRUFUVVJFU19IIDEKIyAxMDkgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o IiAzCiNkZWZpbmUgX19LRVJORUxfU1RSSUNUX05BTUVTIAoKCgojZGVmaW5lIF9fVVNFX0FOU0kg MQojIDE1MCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKI2RlZmluZSBfQlNEX1NPVVJDRSAx CiNkZWZpbmUgX1NWSURfU09VUkNFIDEKIyAxNjcgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAz CiNkZWZpbmUgX1BPU0lYX1NPVVJDRSAxCgoKCiNkZWZpbmUgX1BPU0lYX0NfU09VUkNFIDE5OTUw NkwKCgoKCiNkZWZpbmUgX19VU0VfUE9TSVggMQoKCgojZGVmaW5lIF9fVVNFX1BPU0lYMiAxCgoK CiNkZWZpbmUgX19VU0VfUE9TSVgxOTkzMDkgMQoKCgojZGVmaW5lIF9fVVNFX1BPU0lYMTk5NTA2 IDEKIyAyMjMgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiNkZWZpbmUgX19VU0VfTUlTQyAx CgoKCiNkZWZpbmUgX19VU0VfQlNEIDEKCgoKI2RlZmluZSBfX1VTRV9TVklEIDEKIyAyNDMgIi91 c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiNkZWZpbmUgX19TVERDX0lFQ181NTlfXyAxCiNkZWZp bmUgX19TVERDX0lFQ181NTlfQ09NUExFWF9fIDEKCgojZGVmaW5lIF9fU1REQ19JU09fMTA2NDZf XyAyMDAwMDlMCiMgMjU2ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojZGVmaW5lIF9fR05V X0xJQlJBUllfXyA2CgoKCiNkZWZpbmUgX19HTElCQ19fIDIKI2RlZmluZSBfX0dMSUJDX01JTk9S X18gMgojIDI3MSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKI2RlZmluZSBfX0dOVUNfUFJF UkVRKG1haixtaW4pICgoX19HTlVDX18gPDwgMTYpICsgX19HTlVDX01JTk9SX18gPj0gKChtYWop IDw8IDE2KSArIChtaW4pKQoKCgoKCiNkZWZpbmUgX19HTElCQ19QUkVSRVEobWFqLG1pbikgKChf X0dMSUJDX18gPDwgMTYpICsgX19HTElCQ19NSU5PUl9fID49ICgobWFqKSA8PCAxNikgKyAobWlu KSkKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiMgMjAgIi91c3IvaW5j bHVkZS9zeXMvY2RlZnMuaCIgMwojZGVmaW5lIF9TWVNfQ0RFRlNfSCAxCiMgNDYgIi91c3IvaW5j bHVkZS9zeXMvY2RlZnMuaCIgMwojZGVmaW5lIF9fVEhST1cgCgojZGVmaW5lIF9fUChhcmdzKSBh cmdzIF9fVEhST1cKCgojZGVmaW5lIF9fUE1UKGFyZ3MpIGFyZ3MKIyA3MCAiL3Vzci9pbmNsdWRl L3N5cy9jZGVmcy5oIiAzCiNkZWZpbmUgX19DT05DQVQoeCx5KSB4ICMjIHkKI2RlZmluZSBfX1NU UklORyh4KSAjeAoKCiNkZWZpbmUgX19wdHJfdCB2b2lkICoKI2RlZmluZSBfX2xvbmdfZG91Ymxl X3QgbG9uZyBkb3VibGUKCgoKCgoKCiNkZWZpbmUgX19CRUdJTl9ERUNMUyAKI2RlZmluZSBfX0VO RF9ERUNMUyAKCgoKCgojZGVmaW5lIF9fYm91bmRlZCAKI2RlZmluZSBfX3VuYm91bmRlZCAKI2Rl ZmluZSBfX3B0cnZhbHVlIAoKCgoKCgojZGVmaW5lIF9fZmxleGFyciBbXQojIDEyNiAiL3Vzci9p bmNsdWRlL3N5cy9jZGVmcy5oIiAzCiNkZWZpbmUgX19SRURJUkVDVChuYW1lLHByb3RvLGFsaWFz KSBuYW1lIHByb3RvIF9fYXNtX18gKF9fQVNNTkFNRSAoI2FsaWFzKSkKI2RlZmluZSBfX0FTTU5B TUUoY25hbWUpIF9fQVNNTkFNRTIgKF9fVVNFUl9MQUJFTF9QUkVGSVhfXywgY25hbWUpCiNkZWZp bmUgX19BU01OQU1FMihwcmVmaXgsY25hbWUpIF9fU1RSSU5HIChwcmVmaXgpIGNuYW1lCiMgMTQ5 ICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZzLmgiIDMKI2RlZmluZSBfX2F0dHJpYnV0ZV9tYWxsb2Nf XyBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpCiMgMTU4ICIvdXNyL2luY2x1ZGUvc3lzL2Nk ZWZzLmgiIDMKI2RlZmluZSBfX2F0dHJpYnV0ZV9wdXJlX18gX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSkKIyAxNjcgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMwojZGVmaW5lIF9fYXR0cmli dXRlX3VzZWRfXyBfX2F0dHJpYnV0ZV9fICgoX191c2VkX18pKQojIDE3OSAiL3Vzci9pbmNsdWRl L3N5cy9jZGVmcy5oIiAzCiNkZWZpbmUgX19hdHRyaWJ1dGVfZm9ybWF0X2FyZ19fKHgpIF9fYXR0 cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoeCkpKQojIDE4OSAiL3Vzci9pbmNsdWRlL3N5cy9j ZGVmcy5oIiAzCiNkZWZpbmUgX19hdHRyaWJ1dGVfZm9ybWF0X3N0cmZtb25fXyhhLGIpIF9fYXR0 cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3N0cmZtb25fXywgYSwgYikpKQojIDIxMiAiL3Vzci9p bmNsdWRlL3N5cy9jZGVmcy5oIiAzCiNkZWZpbmUgX19yZXN0cmljdF9hcnIgX19yZXN0cmljdAoj IDI4NCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDI5OCAiL3Vzci9pbmNsdWRlL2Zl YXR1cmVzLmgiIDMKI2RlZmluZSBfX1VTRV9FWFRFUk5fSU5MSU5FUyAxCiMgMzEyICIvdXNyL2lu Y2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzCgoK CgojZGVmaW5lIF9fc3R1Yl9fX2tlcm5lbF9jb3NsIAojZGVmaW5lIF9fc3R1Yl9fX2tlcm5lbF9z aW5sIAojZGVmaW5lIF9fc3R1Yl9fX2tlcm5lbF90YW5sIAojZGVmaW5lIF9fc3R1Yl9jaGZsYWdz IAojZGVmaW5lIF9fc3R1Yl9mYXR0YWNoIAojZGVmaW5lIF9fc3R1Yl9mY2hmbGFncyAKI2RlZmlu ZSBfX3N0dWJfZmRldGFjaCAKI2RlZmluZSBfX3N0dWJfZmV4ZWN2ZSAKI2RlZmluZSBfX3N0dWJf Z3R0eSAKI2RlZmluZSBfX3N0dWJfcG9zaXhfZmFkdmlzZSAKI2RlZmluZSBfX3N0dWJfcG9zaXhf ZmFkdmlzZTY0IAojZGVmaW5lIF9fc3R1Yl9yZXZva2UgCiNkZWZpbmUgX19zdHViX3NldGxvZ2lu IAojZGVmaW5lIF9fc3R1Yl9zaWdyZXR1cm4gCiNkZWZpbmUgX19zdHViX3NzdGsgCiNkZWZpbmUg X19zdHViX3N0dHkgCiMgMzEzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMjcgIi91 c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw ZXMuaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKI2RlZmluZSBfQklU U19UWVBFU19IIDEKCgoKI2RlZmluZSBfX25lZWRfc2l6ZV90IAojIDEgIi91c3IvbG9jYWwvc25h cC9nY2MtMjAwMjA4MTkvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjEvaW5jbHVk ZS9zdGRkZWYuaCIgMSAzCiMgMTgyICIvdXNyL2xvY2FsL3NuYXAvZ2NjLTIwMDIwODE5L2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKI2RlZmlu ZSBfX3NpemVfdF9fIAojZGVmaW5lIF9fU0laRV9UX18gCiNkZWZpbmUgX1NJWkVfVCAKI2RlZmlu ZSBfU1lTX1NJWkVfVF9IIAojZGVmaW5lIF9UX1NJWkVfIAojZGVmaW5lIF9UX1NJWkUgCiNkZWZp bmUgX19TSVpFX1QgCiNkZWZpbmUgX1NJWkVfVF8gCiNkZWZpbmUgX0JTRF9TSVpFX1RfIAojZGVm aW5lIF9TSVpFX1RfREVGSU5FRF8gCiNkZWZpbmUgX1NJWkVfVF9ERUZJTkVEIAojZGVmaW5lIF9f X2ludF9zaXplX3RfaCAKI2RlZmluZSBfR0NDX1NJWkVfVCAKI2RlZmluZSBfU0laRVRfIAojZGVm aW5lIF9fc2l6ZV90IAoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDIyMSAiL3Vz ci9sb2NhbC9zbmFwL2djYy0yMDAyMDgxOS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjIuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCiN1bmRlZiBfX25lZWRfc2l6ZV90CiMgMzAgIi91c3Iv aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VfY2hh cjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50 IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9fZXh0ZW5zaW9uX18g dHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9fZXh0ZW5zaW9uX18g dHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5ICIvdXNyL2luY2x1ZGUvYml0cy90 eXBlcy5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQg Y2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVk ZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2lu dDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5 cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVk ZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAq X19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVkZWYgX191X2ludCBf X3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190 Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7CnR5 cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xvZmZfdDsKdHlwZWRl ZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVmIF9fdV9sb25nIF9f cmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRlZiBfX3VfaW50IF9f aWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7 CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRl ZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190Owp0 eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190 OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiBpbnQgX19jbG9ja2lkX3Q7 CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgojZGVmaW5lIF9fRkRfU0VUU0laRSAxMDI0CgoK dHlwZWRlZiBpbnQgX19rZXlfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19w aWRfdDsKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa3NpemVfdDsKCgoKCnR5cGVkZWYgbG9uZyBp bnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBf X3VfbG9uZyBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsK Cgp0eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNm aWxjbnQ2NF90OwoKCnR5cGVkZWYgX191X3F1YWRfdCBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xv ZmZfdCBfX29mZjY0X3Q7CgoKdHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYg dW5zaWduZWQgbG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90 OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90OwoKCgoKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMgMjAgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJl YWR0eXBlcy5oIiAzCiNkZWZpbmUgX0JJVFNfUFRIUkVBRFRZUEVTX0ggMQoKI2RlZmluZSBfX25l ZWRfc2NoZWRwYXJhbSAKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2NiAi L3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwojZGVmaW5lIF9fZGVmaW5lZF9zY2hlZHBhcmFt IDEKCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7CiAg fTsKI3VuZGVmIF9fbmVlZF9zY2hlZHBhcmFtCiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJl YWR0eXBlcy5oIiAyIDMKCnR5cGVkZWYgaW50IF9fYXRvbWljX2xvY2tfdDsKCgpzdHJ1Y3QgX3B0 aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIF9fYXRvbWljX2xvY2tfdCBf X3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpf cHRocmVhZF9kZXNjcjsKI2RlZmluZSBfUFRIUkVBRF9ERVNDUl9ERUZJTkVEIAoKCgoKdHlwZWRl ZiBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfcwp7CiAgaW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9f c2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRfcGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBf X2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsKICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50 IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3Np emU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJl YWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRo cmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFk X2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0 eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZlZDsKICBpbnQgX19tX2NvdW50OwogIF9w dGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQgX19tX2tpbmQ7CiAgc3RydWN0IF9wdGhyZWFk X2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRfbXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QK ewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4YXR0cl90OwoKCgp0eXBlZGVmIGlu dCBwdGhyZWFkX29uY2VfdDsKIyAxNDIgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5o IiAzCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcHRocmVhZF90OwojIDE0NCAiL3Vzci9pbmNs dWRlL2JpdHMvdHlwZXMuaCIgMiAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAz CgoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0 eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9f cXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNp ZF90IGZzaWRfdDsKI2RlZmluZSBfX3VfY2hhcl9kZWZpbmVkIAoKCgp0eXBlZGVmIF9fbG9mZl90 IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlub190OwoKCgojZGVmaW5lIF9faW5vX3RfZGVm aW5lZCAKCgoKCgoKCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKI2RlZmluZSBfX2Rldl90X2RlZmlu ZWQgCgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsKI2RlZmluZSBfX2dpZF90X2RlZmluZWQgCgoK CnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwojZGVmaW5lIF9fbW9kZV90X2RlZmluZWQgCgoKCnR5 cGVkZWYgX19ubGlua190IG5saW5rX3Q7CiNkZWZpbmUgX19ubGlua190X2RlZmluZWQgCgoKCnR5 cGVkZWYgX191aWRfdCB1aWRfdDsKI2RlZmluZSBfX3VpZF90X2RlZmluZWQgCgoKCgp0eXBlZGVm IF9fb2ZmX3Qgb2ZmX3Q7CgoKCiNkZWZpbmUgX19vZmZfdF9kZWZpbmVkIAoKCgoKCgoKdHlwZWRl ZiBfX3BpZF90IHBpZF90OwojZGVmaW5lIF9fcGlkX3RfZGVmaW5lZCAKCgoKdHlwZWRlZiBfX2lk X3QgaWRfdDsKI2RlZmluZSBfX2lkX3RfZGVmaW5lZCAKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3Np emVfdDsKI2RlZmluZSBfX3NzaXplX3RfZGVmaW5lZCAKCgoKCnR5cGVkZWYgX19kYWRkcl90IGRh ZGRyX3Q7CnR5cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CiNkZWZpbmUgX19kYWRkcl90X2RlZmlu ZWQgCgoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiNkZWZpbmUgX19rZXlfdF9kZWZpbmVkIAoK CgoKCiNkZWZpbmUgX19uZWVkX3RpbWVfdCAKI2RlZmluZSBfX25lZWRfdGltZXJfdCAKI2RlZmlu ZSBfX25lZWRfY2xvY2tpZF90IAojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDY1ICIv dXNyL2luY2x1ZGUvdGltZS5oIiAzCiNkZWZpbmUgX190aW1lX3RfZGVmaW5lZCAxCgoKCgp0eXBl ZGVmIF9fdGltZV90IHRpbWVfdDsKCgojdW5kZWYgX19uZWVkX3RpbWVfdAoKCgojZGVmaW5lIF9f Y2xvY2tpZF90X2RlZmluZWQgMQoKCgoKdHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7CgoK CgoKCiNkZWZpbmUgX190aW1lcl90X2RlZmluZWQgMQoKCgoKdHlwZWRlZiBfX3RpbWVyX3QgdGlt ZXJfdDsKCgojdW5kZWYgX19uZWVkX3RpbWVyX3QKIyAxMzMgIi91c3IvaW5jbHVkZS9zeXMvdHlw ZXMuaCIgMiAzCiMgMTQ1ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKI2RlZmluZSBfX25l ZWRfc2l6ZV90IAojIDEgIi91c3IvbG9jYWwvc25hcC9nY2MtMjAwMjA4MTkvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4yLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjIxICIvdXNy L2xvY2FsL3NuYXAvZ2NjLTIwMDIwODE5L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu Mi4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKI3VuZGVmIF9fbmVlZF9zaXplX3QKIyAxNDcgIi91c3Iv aW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWxv bmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBp bnQgdWludDsKIyAxODMgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojZGVmaW5lIF9faW50 Tl90KE4sTU9ERSkgdHlwZWRlZiBpbnQgaW50ICMjTiAjI190IF9fYXR0cmlidXRlX18gKChfX21v ZGVfXyAoTU9ERSkpKQoKI2RlZmluZSBfX3VfaW50Tl90KE4sTU9ERSkgdHlwZWRlZiB1bnNpZ25l ZCBpbnQgdV9pbnQgIyNOICMjX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChNT0RFKSkpCgoK CiNkZWZpbmUgX19pbnQ4X3RfZGVmaW5lZCAKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90 IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGlu dCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYg dW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykp KTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVf XyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19t b2RlX18gKF9fd29yZF9fKSkpOwoKCgoKCiNkZWZpbmUgX19CSVRfVFlQRVNfREVGSU5FRF9fIDEK CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAyMCAiL3Vzci9pbmNsdWRlL2Vu ZGlhbi5oIiAzCiNkZWZpbmUgX0VORElBTl9IIDEKIyAzMiAiL3Vzci9pbmNsdWRlL2VuZGlhbi5o IiAzCiNkZWZpbmUgX19MSVRUTEVfRU5ESUFOIDEyMzQKI2RlZmluZSBfX0JJR19FTkRJQU4gNDMy MQojZGVmaW5lIF9fUERQX0VORElBTiAzNDEyCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRp YW4uaCIgMSAzCgoKCgoKCiNkZWZpbmUgX19CWVRFX09SREVSIF9fTElUVExFX0VORElBTgojIDM4 ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwoKCgoKI2RlZmluZSBfX0ZMT0FUX1dPUkRfT1JE RVIgX19CWVRFX09SREVSCgoKCiNkZWZpbmUgTElUVExFX0VORElBTiBfX0xJVFRMRV9FTkRJQU4K I2RlZmluZSBCSUdfRU5ESUFOIF9fQklHX0VORElBTgojZGVmaW5lIFBEUF9FTkRJQU4gX19QRFBf RU5ESUFOCiNkZWZpbmUgQllURV9PUkRFUiBfX0JZVEVfT1JERVIKCgoKI2RlZmluZSBfX0xPTkdf TE9OR19QQUlSKEhJLExPKSBMTywgSEkKIyAyMTMgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg MiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNs dWRlL3N5cy9zZWxlY3QuaCIgMwojZGVmaW5lIF9TWVNfU0VMRUNUX0ggMQoKCgoKCgoKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Nl bGVjdC5oIiAzCiNkZWZpbmUgX19GRF9aRVJPKGZkc3ApIGRvIHsgaW50IF9fZDAsIF9fZDE7IF9f YXNtX18gX192b2xhdGlsZV9fICgiY2xkOyByZXA7IHN0b3NsIiA6ICI9YyIgKF9fZDApLCAiPUQi IChfX2QxKSA6ICJhIiAoMCksICIwIiAoc2l6ZW9mIChmZF9zZXQpIC8gc2l6ZW9mIChfX2ZkX21h c2spKSwgIjEiICgmX19GRFNfQklUUyAoZmRzcClbMF0pIDogIm1lbW9yeSIpOyB9IHdoaWxlICgw KQojIDM3ICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMwojZGVmaW5lIF9fRkRfU0VUKGZk LGZkc3ApIF9fYXNtX18gX192b2xhdGlsZV9fICgiYnRzbCAlMSwlMCIgOiAiPW0iIChfX0ZEU19C SVRTIChmZHNwKVtfX0ZERUxUIChmZCldKSA6ICJyIiAoKChpbnQpIChmZCkpICUgX19ORkRCSVRT KSA6ICJjYyIsIm1lbW9yeSIpCgoKCgojZGVmaW5lIF9fRkRfQ0xSKGZkLGZkc3ApIF9fYXNtX18g X192b2xhdGlsZV9fICgiYnRybCAlMSwlMCIgOiAiPW0iIChfX0ZEU19CSVRTIChmZHNwKVtfX0ZE RUxUIChmZCldKSA6ICJyIiAoKChpbnQpIChmZCkpICUgX19ORkRCSVRTKSA6ICJjYyIsIm1lbW9y eSIpCgoKCgojZGVmaW5lIF9fRkRfSVNTRVQoZmQsZmRzcCkgKF9fZXh0ZW5zaW9uX18gKHtyZWdp c3RlciBjaGFyIF9fcmVzdWx0OyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImJ0bCAlMSwlMiA7IHNl dGNiICViMCIgOiAiPXEiIChfX3Jlc3VsdCkgOiAiciIgKCgoaW50KSAoZmQpKSAlIF9fTkZEQklU UyksICJtIiAoX19GRFNfQklUUyAoZmRzcClbX19GREVMVCAoZmQpXSkgOiAiY2MiKTsgX19yZXN1 bHQ7IH0pKQojIDMyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3Iv aW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAyMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0 LmgiIDMKI2RlZmluZSBfU0lHU0VUX0hfdHlwZXMgMQoKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWlj X3Q7CgoKCiNkZWZpbmUgX1NJR1NFVF9OV09SRFMgKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWdu ZWQgbG9uZyBpbnQpKSkKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25nIGludCBf X3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKV07CiAgfSBfX3Np Z3NldF90OwojIDM1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgojZGVmaW5lIF9f c2lnc2V0X3RfZGVmaW5lZCAKdHlwZWRlZiBfX3NpZ3NldF90IHNpZ3NldF90OwoKCgojZGVmaW5l IF9fbmVlZF90aW1lX3QgCiNkZWZpbmUgX19uZWVkX3RpbWVzcGVjIAojIDEgIi91c3IvaW5jbHVk ZS90aW1lLmgiIDEgMwojIDczICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCiN1bmRlZiBfX25lZWRf dGltZV90CiMgMTAyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCiNkZWZpbmUgX190aW1lc3BlY19k ZWZpbmVkIDEKCgoKc3RydWN0IHRpbWVzcGVjCiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAg bG9uZyBpbnQgdHZfbnNlYzsKICB9OwoKCiN1bmRlZiBfX25lZWRfdGltZXNwZWMKIyA0NSAiL3Vz ci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCiNkZWZpbmUgX19uZWVkX3RpbWV2YWwgCiMgMSAi L3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA2MCAiL3Vzci9pbmNsdWRlL2JpdHMvdGlt ZS5oIiAzCiN1bmRlZiBfX25lZWRfdGltZXZhbAoKI2RlZmluZSBfU1RSVUNUX1RJTUVWQUwgMQoK CgoKc3RydWN0IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBfX3N1c2Vjb25k c190IHR2X3VzZWM7CiAgfTsKIyA0NyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoK dHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwojZGVmaW5lIF9fc3VzZWNvbmRzX3Rf ZGVmaW5lZCAKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwoKCiNkZWZpbmUgX19ORkRC SVRTICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKQojZGVmaW5lIF9fRkRFTFQoZCkgKChkKSAvIF9f TkZEQklUUykKI2RlZmluZSBfX0ZETUFTSyhkKSAoKF9fZmRfbWFzaykgMSA8PCAoKGQpICUgX19O RkRCSVRTKSkKCgp0eXBlZGVmIHN0cnVjdAogIHsKCgoKCgoKICAgIF9fZmRfbWFzayBfX2Zkc19i aXRzWzEwMjQgLyAoOCAqIHNpemVvZiAoX19mZF9tYXNrKSldOwojZGVmaW5lIF9fRkRTX0JJVFMo c2V0KSAoKHNldCktPl9fZmRzX2JpdHMpCgogIH0gZmRfc2V0OwoKCiNkZWZpbmUgRkRfU0VUU0la RSBfX0ZEX1NFVFNJWkUKCgoKdHlwZWRlZiBfX2ZkX21hc2sgZmRfbWFzazsKCgojZGVmaW5lIE5G REJJVFMgX19ORkRCSVRTCgoKCgojZGVmaW5lIEZEX1NFVChmZCxmZHNldHApIF9fRkRfU0VUIChm ZCwgZmRzZXRwKQojZGVmaW5lIEZEX0NMUihmZCxmZHNldHApIF9fRkRfQ0xSIChmZCwgZmRzZXRw KQojZGVmaW5lIEZEX0lTU0VUKGZkLGZkc2V0cCkgX19GRF9JU1NFVCAoZmQsIGZkc2V0cCkKI2Rl ZmluZSBGRF9aRVJPKGZkc2V0cCkgX19GRF9aRVJPIChmZHNldHApCgoKCgoKCgoKCmV4dGVybiBp bnQgc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAg ICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAg ICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCiAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCBfX3RpbWVvdXQpIDsKIyAxMTggIi91c3IvaW5j bHVkZS9zeXMvc2VsZWN0LmgiIDMKCiMgMjE2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIg MwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAzCiMgMjEgIi91c3IvaW5j bHVkZS9zeXMvc3lzbWFjcm9zLmgiIDMKI2RlZmluZSBfU1lTX1NZU01BQ1JPU19IIDEKCgoKCgoK I2RlZmluZSBtYWpvcihkZXYpICgoaW50KSgoKGRldikgPj4gOCkgJiAweGZmKSkKI2RlZmluZSBt aW5vcihkZXYpICgoaW50KSgoZGV2KSAmIDB4ZmYpKQojZGVmaW5lIG1ha2VkZXYobWFqb3IsbWlu b3IpICgoKCh1bnNpZ25lZCBpbnQpIChtYWpvcikpIDw8IDgpIHwgKCh1bnNpZ25lZCBpbnQpICht aW5vcikpKQojIDIxOSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKIyAyMzAgIi91c3Iv aW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CiNkZWZp bmUgX19ibGtjbnRfdF9kZWZpbmVkIAoKCnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7 CiNkZWZpbmUgX19mc2Jsa2NudF90X2RlZmluZWQgCgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNm aWxjbnRfdDsKI2RlZmluZSBfX2ZzZmlsY250X3RfZGVmaW5lZCAKIyAyNjIgIi91c3IvaW5jbHVk ZS9zeXMvdHlwZXMuaCIgMwoKIyAxOCAiLi4vLi4vc3JjL3NkYm0udjAvc2RibWZsZHUuYyIgMgoj IDEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS91bmlzdGQu aCIgMwojZGVmaW5lIF9VTklTVERfSCAxCgoKCgoKCgoKCgojZGVmaW5lIF9QT1NJWF9WRVJTSU9O IDE5OTUwNkwKCgoKCgojZGVmaW5lIF9QT1NJWDJfQ19WRVJTSU9OIDE5OTIwOUwKCgojZGVmaW5l IF9QT1NJWDJfVkVSU0lPTiAxOTkyMDlMCgoKCiNkZWZpbmUgX1BPU0lYMl9DX0JJTkQgMQoKCgoj ZGVmaW5lIF9QT1NJWDJfQ19ERVYgMQoKCgojZGVmaW5lIF9QT1NJWDJfU1dfREVWIDEKCgoKI2Rl ZmluZSBfUE9TSVgyX0xPQ0FMRURFRiAxCgoKCgoKI2RlZmluZSBfWE9QRU5fVkVSU0lPTiA0CgoK CiNkZWZpbmUgX1hPUEVOX1hDVV9WRVJTSU9OIDQKCgojZGVmaW5lIF9YT1BFTl9YUEcyIDEKI2Rl ZmluZSBfWE9QRU5fWFBHMyAxCiNkZWZpbmUgX1hPUEVOX1hQRzQgMQoKCiNkZWZpbmUgX1hPUEVO X1VOSVggMQoKCiNkZWZpbmUgX1hPUEVOX0NSWVBUIDEKCgoKI2RlZmluZSBfWE9QRU5fRU5IX0kx OE4gMQoKCiNkZWZpbmUgX1hPUEVOX0xFR0FDWSAxCiMgMTc1ICIvdXNyL2luY2x1ZGUvdW5pc3Rk LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeF9vcHQuaCIgMSAzCiMgMjEgIi91c3Iv aW5jbHVkZS9iaXRzL3Bvc2l4X29wdC5oIiAzCiNkZWZpbmUgX1BPU0lYX09QVF9IIDEKCgojZGVm aW5lIF9QT1NJWF9KT0JfQ09OVFJPTCAxCgoKI2RlZmluZSBfUE9TSVhfU0FWRURfSURTIDEKCgoj ZGVmaW5lIF9QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HIDEKCgojZGVmaW5lIF9QT1NJWF9TWU5D SFJPTklaRURfSU8gMQoKCiNkZWZpbmUgX1BPU0lYX0ZTWU5DIDEKCgojZGVmaW5lIF9QT1NJWF9N QVBQRURfRklMRVMgMQoKCiNkZWZpbmUgX1BPU0lYX01FTUxPQ0sgMQoKCiNkZWZpbmUgX1BPU0lY X01FTUxPQ0tfUkFOR0UgMQoKCiNkZWZpbmUgX1BPU0lYX01FTU9SWV9QUk9URUNUSU9OIDEKCgoj ZGVmaW5lIF9QT1NJWF9QT0xMIDEKCgojZGVmaW5lIF9QT1NJWF9TRUxFQ1QgMQoKCiNkZWZpbmUg X1BPU0lYX0NIT1dOX1JFU1RSSUNURUQgMQoKCgojZGVmaW5lIF9QT1NJWF9WRElTQUJMRSAnXDAn CgoKI2RlZmluZSBfUE9TSVhfTk9fVFJVTkMgMQoKCiNkZWZpbmUgX1hPUEVOX1JFQUxUSU1FIDEK CgojZGVmaW5lIF9YT1BFTl9SRUFMVElNRV9USFJFQURTIDEKCgojZGVmaW5lIF9YT1BFTl9TSE0g MQoKCiNkZWZpbmUgX1BPU0lYX1RIUkVBRFMgMQoKCiNkZWZpbmUgX1BPU0lYX1JFRU5UUkFOVF9G VU5DVElPTlMgMQojZGVmaW5lIF9QT1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlMgMQoKCiNkZWZp bmUgX1BPU0lYX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HIDEKCgojZGVmaW5lIF9QT1NJWF9U SFJFQURfQVRUUl9TVEFDS1NJWkUgMQoKCiNkZWZpbmUgX1BPU0lYX1RIUkVBRF9BVFRSX1NUQUNL QUREUiAxCgoKI2RlZmluZSBfUE9TSVhfU0VNQVBIT1JFUyAxCgoKI2RlZmluZSBfUE9TSVhfUkVB TFRJTUVfU0lHTkFMUyAxCgoKI2RlZmluZSBfUE9TSVhfQVNZTkNIUk9OT1VTX0lPIDEKI2RlZmlu ZSBfUE9TSVhfQVNZTkNfSU8gMQoKI2RlZmluZSBfTEZTX0FTWU5DSFJPTk9VU19JTyAxCgoKI2Rl ZmluZSBfTEZTNjRfQVNZTkNIUk9OT1VTX0lPIDEKCgojZGVmaW5lIF9MRlNfTEFSR0VGSUxFIDEK I2RlZmluZSBfTEZTNjRfTEFSR0VGSUxFIDEKI2RlZmluZSBfTEZTNjRfU1RESU8gMQoKCiNkZWZp bmUgX1BPU0lYX1NIQVJFRF9NRU1PUllfT0JKRUNUUyAxCgoKI2RlZmluZSBfUE9TSVhfQ1BVVElN RSAyMDA5MTJMCgoKI2RlZmluZSBfUE9TSVhfVEhSRUFEX0NQVVRJTUUgMjAwOTEyTAoKCiNkZWZp bmUgX1BPU0lYX1JFR0VYUCAxCgoKI2RlZmluZSBfUE9TSVhfUkVBREVSX1dSSVRFUl9MT0NLUyAy MDA5MTJMCgoKI2RlZmluZSBfUE9TSVhfU0hFTEwgMQoKCiNkZWZpbmUgX1BPU0lYX1RJTUVPVVRT IDIwMDkxMkwKCgojZGVmaW5lIF9QT1NJWF9TUElOX0xPQ0tTIDIwMDkxMkwKCgojZGVmaW5lIF9Q T1NJWF9TUEFXTiAyMDA5MTJMCgoKI2RlZmluZSBfUE9TSVhfVElNRVJTIDEKCgojZGVmaW5lIF9Q T1NJWF9CQVJSSUVSUyAyMDA5MTJMCiMgMTc2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoK CgoKCgoKI2RlZmluZSBTVERJTl9GSUxFTk8gMAojZGVmaW5lIFNURE9VVF9GSUxFTk8gMQojZGVm aW5lIFNUREVSUl9GSUxFTk8gMgojIDE5NyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiNkZWZp bmUgX19uZWVkX3NpemVfdCAKI2RlZmluZSBfX25lZWRfTlVMTCAKIyAxICIvdXNyL2xvY2FsL3Nu YXAvZ2NjLTIwMDIwODE5L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4xL2luY2x1 ZGUvc3RkZGVmLmgiIDEgMwojIDIyMSAiL3Vzci9sb2NhbC9zbmFwL2djYy0yMDAyMDgxOS9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCiN1bmRl ZiBfX25lZWRfc2l6ZV90CiMgMzY5ICIvdXNyL2xvY2FsL3NuYXAvZ2NjLTIwMDIwODE5L2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKI2RlZmlu ZSBOVUxMICgodm9pZCAqKTApCgoKCgoKI3VuZGVmIF9fbmVlZF9OVUxMCiMgMjAwICIvdXNyL2lu Y2x1ZGUvdW5pc3RkLmgiIDIgMwojIDI0MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCnR5cGVk ZWYgX19pbnRwdHJfdCBpbnRwdHJfdDsKI2RlZmluZSBfX2ludHB0cl90X2RlZmluZWQgCgoKCgoK dHlwZWRlZiBfX3NvY2tsZW5fdCBzb2NrbGVuX3Q7CiNkZWZpbmUgX19zb2NrbGVuX3RfZGVmaW5l ZCAKCgoKCgojZGVmaW5lIFJfT0sgNAojZGVmaW5lIFdfT0sgMgojZGVmaW5lIFhfT0sgMQojZGVm aW5lIEZfT0sgMAoKCmV4dGVybiBpbnQgYWNjZXNzIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgaW50 IF9fdHlwZSkgOwojIDI3MSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiNkZWZpbmUgU0VFS19T RVQgMAojZGVmaW5lIFNFRUtfQ1VSIDEKI2RlZmluZSBTRUVLX0VORCAyCgoKCgojZGVmaW5lIExf U0VUIFNFRUtfU0VUCiNkZWZpbmUgTF9JTkNSIFNFRUtfQ1VSCiNkZWZpbmUgTF9YVE5EIFNFRUtf RU5ECiMgMjkwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIF9fb2ZmX3QgbHNlZWsg KGludCBfX2ZkLCBfX29mZl90IF9fb2Zmc2V0LCBpbnQgX193aGVuY2UpIDsKIyAzMDYgIi91c3Iv aW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGNsb3NlIChpbnQgX19mZCkgOwoKCgpleHRl cm4gc3NpemVfdCByZWFkIChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcykg OwoKCmV4dGVybiBzc2l6ZV90IHdyaXRlIChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1Ziwg c2l6ZV90IF9fbikgOwojIDM1MyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQg cGlwZSAoaW50IF9fcGlwZWRlc1syXSkgOwojIDM2MiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAz CmV4dGVybiB1bnNpZ25lZCBpbnQgYWxhcm0gKHVuc2lnbmVkIGludCBfX3NlY29uZHMpIDsKIyAz NzEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gdW5zaWduZWQgaW50IHNsZWVwICh1 bnNpZ25lZCBpbnQgX19zZWNvbmRzKSA7CgoKCgoKCmV4dGVybiBfX3VzZWNvbmRzX3QgdWFsYXJt IChfX3VzZWNvbmRzX3QgX192YWx1ZSwgX191c2Vjb25kc190IF9faW50ZXJ2YWwpCiAgICAgOwoK CgpleHRlcm4gaW50IHVzbGVlcCAoX191c2Vjb25kc190IF9fdXNlY29uZHMpIDsKCgoKCgpleHRl cm4gaW50IHBhdXNlICh2b2lkKSA7CgoKCmV4dGVybiBpbnQgY2hvd24gKF9fY29uc3QgY2hhciAq X19maWxlLCBfX3VpZF90IF9fb3duZXIsIF9fZ2lkX3QgX19ncm91cCkKICAgICA7CgoKCmV4dGVy biBpbnQgZmNob3duIChpbnQgX19mZCwgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3JvdXAp IDsKCgoKCmV4dGVybiBpbnQgbGNob3duIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBf X293bmVyLCBfX2dpZF90IF9fZ3JvdXApCiAgICAgOwoKCgoKZXh0ZXJuIGludCBjaGRpciAoX19j b25zdCBjaGFyICpfX3BhdGgpIDsKCgoKZXh0ZXJuIGludCBmY2hkaXIgKGludCBfX2ZkKSA7CiMg NDIzICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGNoYXIgKmdldGN3ZCAoY2hhciAq X19idWYsIHNpemVfdCBfX3NpemUpIDsKIyA0MzYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpl eHRlcm4gY2hhciAqZ2V0d2QgKGNoYXIgKl9fYnVmKSA7CgoKCgpleHRlcm4gaW50IGR1cCAoaW50 IF9fZmQpIDsKCgpleHRlcm4gaW50IGR1cDIgKGludCBfX2ZkLCBpbnQgX19mZDIpIDsKCgpleHRl cm4gY2hhciAqKl9fZW52aXJvbjsKCgoKCgoKCmV4dGVybiBpbnQgZXhlY3ZlIChfX2NvbnN0IGNo YXIgKl9fcGF0aCwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSwKICAgICAgICAgICAgICAgICAgIGNo YXIgKl9fY29uc3QgX19lbnZwW10pIDsKIyA0NjcgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpl eHRlcm4gaW50IGV4ZWN2IChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqX19jb25zdCBfX2Fy Z3ZbXSkgOwoKCgpleHRlcm4gaW50IGV4ZWNsZSAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fY29u c3QgY2hhciAqX19hcmcsIC4uLikgOwoKCgpleHRlcm4gaW50IGV4ZWNsIChfX2NvbnN0IGNoYXIg Kl9fcGF0aCwgX19jb25zdCBjaGFyICpfX2FyZywgLi4uKSA7CgoKCmV4dGVybiBpbnQgZXhlY3Zw IChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSkgOwoKCgoKZXh0 ZXJuIGludCBleGVjbHAgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX2NvbnN0IGNoYXIgKl9fYXJn LCAuLi4pIDsKCgoKCmV4dGVybiBpbnQgbmljZSAoaW50IF9faW5jKSA7CgoKCgpleHRlcm4gdm9p ZCBfZXhpdCAoaW50IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoK CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9jb25mbmFtZS5oIiAxIDMKIyAyNSAiL3Vzci9pbmNs dWRlL2JpdHMvY29uZm5hbWUuaCIgMwplbnVtCiAgewogICAgX1BDX0xJTktfTUFYLAojZGVmaW5l IF9QQ19MSU5LX01BWCBfUENfTElOS19NQVgKICAgIF9QQ19NQVhfQ0FOT04sCiNkZWZpbmUgX1BD X01BWF9DQU5PTiBfUENfTUFYX0NBTk9OCiAgICBfUENfTUFYX0lOUFVULAojZGVmaW5lIF9QQ19N QVhfSU5QVVQgX1BDX01BWF9JTlBVVAogICAgX1BDX05BTUVfTUFYLAojZGVmaW5lIF9QQ19OQU1F X01BWCBfUENfTkFNRV9NQVgKICAgIF9QQ19QQVRIX01BWCwKI2RlZmluZSBfUENfUEFUSF9NQVgg X1BDX1BBVEhfTUFYCiAgICBfUENfUElQRV9CVUYsCiNkZWZpbmUgX1BDX1BJUEVfQlVGIF9QQ19Q SVBFX0JVRgogICAgX1BDX0NIT1dOX1JFU1RSSUNURUQsCiNkZWZpbmUgX1BDX0NIT1dOX1JFU1RS SUNURUQgX1BDX0NIT1dOX1JFU1RSSUNURUQKICAgIF9QQ19OT19UUlVOQywKI2RlZmluZSBfUENf Tk9fVFJVTkMgX1BDX05PX1RSVU5DCiAgICBfUENfVkRJU0FCTEUsCiNkZWZpbmUgX1BDX1ZESVNB QkxFIF9QQ19WRElTQUJMRQogICAgX1BDX1NZTkNfSU8sCiNkZWZpbmUgX1BDX1NZTkNfSU8gX1BD X1NZTkNfSU8KICAgIF9QQ19BU1lOQ19JTywKI2RlZmluZSBfUENfQVNZTkNfSU8gX1BDX0FTWU5D X0lPCiAgICBfUENfUFJJT19JTywKI2RlZmluZSBfUENfUFJJT19JTyBfUENfUFJJT19JTwogICAg X1BDX1NPQ0tfTUFYQlVGLAojZGVmaW5lIF9QQ19TT0NLX01BWEJVRiBfUENfU09DS19NQVhCVUYK ICAgIF9QQ19GSUxFU0laRUJJVFMsCiNkZWZpbmUgX1BDX0ZJTEVTSVpFQklUUyBfUENfRklMRVNJ WkVCSVRTCiAgICBfUENfUkVDX0lOQ1JfWEZFUl9TSVpFLAojZGVmaW5lIF9QQ19SRUNfSU5DUl9Y RkVSX1NJWkUgX1BDX1JFQ19JTkNSX1hGRVJfU0laRQogICAgX1BDX1JFQ19NQVhfWEZFUl9TSVpF LAojZGVmaW5lIF9QQ19SRUNfTUFYX1hGRVJfU0laRSBfUENfUkVDX01BWF9YRkVSX1NJWkUKICAg IF9QQ19SRUNfTUlOX1hGRVJfU0laRSwKI2RlZmluZSBfUENfUkVDX01JTl9YRkVSX1NJWkUgX1BD X1JFQ19NSU5fWEZFUl9TSVpFCiAgICBfUENfUkVDX1hGRVJfQUxJR04sCiNkZWZpbmUgX1BDX1JF Q19YRkVSX0FMSUdOIF9QQ19SRUNfWEZFUl9BTElHTgogICAgX1BDX0FMTE9DX1NJWkVfTUlOLAoj ZGVmaW5lIF9QQ19BTExPQ19TSVpFX01JTiBfUENfQUxMT0NfU0laRV9NSU4KICAgIF9QQ19TWU1M SU5LX01BWAojZGVmaW5lIF9QQ19TWU1MSU5LX01BWCBfUENfU1lNTElOS19NQVgKICB9OwoKCmVu dW0KICB7CiAgICBfU0NfQVJHX01BWCwKI2RlZmluZSBfU0NfQVJHX01BWCBfU0NfQVJHX01BWAog ICAgX1NDX0NISUxEX01BWCwKI2RlZmluZSBfU0NfQ0hJTERfTUFYIF9TQ19DSElMRF9NQVgKICAg IF9TQ19DTEtfVENLLAojZGVmaW5lIF9TQ19DTEtfVENLIF9TQ19DTEtfVENLCiAgICBfU0NfTkdS T1VQU19NQVgsCiNkZWZpbmUgX1NDX05HUk9VUFNfTUFYIF9TQ19OR1JPVVBTX01BWAogICAgX1ND X09QRU5fTUFYLAojZGVmaW5lIF9TQ19PUEVOX01BWCBfU0NfT1BFTl9NQVgKICAgIF9TQ19TVFJF QU1fTUFYLAojZGVmaW5lIF9TQ19TVFJFQU1fTUFYIF9TQ19TVFJFQU1fTUFYCiAgICBfU0NfVFpO QU1FX01BWCwKI2RlZmluZSBfU0NfVFpOQU1FX01BWCBfU0NfVFpOQU1FX01BWAogICAgX1NDX0pP Ql9DT05UUk9MLAojZGVmaW5lIF9TQ19KT0JfQ09OVFJPTCBfU0NfSk9CX0NPTlRST0wKICAgIF9T Q19TQVZFRF9JRFMsCiNkZWZpbmUgX1NDX1NBVkVEX0lEUyBfU0NfU0FWRURfSURTCiAgICBfU0Nf UkVBTFRJTUVfU0lHTkFMUywKI2RlZmluZSBfU0NfUkVBTFRJTUVfU0lHTkFMUyBfU0NfUkVBTFRJ TUVfU0lHTkFMUwogICAgX1NDX1BSSU9SSVRZX1NDSEVEVUxJTkcsCiNkZWZpbmUgX1NDX1BSSU9S SVRZX1NDSEVEVUxJTkcgX1NDX1BSSU9SSVRZX1NDSEVEVUxJTkcKICAgIF9TQ19USU1FUlMsCiNk ZWZpbmUgX1NDX1RJTUVSUyBfU0NfVElNRVJTCiAgICBfU0NfQVNZTkNIUk9OT1VTX0lPLAojZGVm aW5lIF9TQ19BU1lOQ0hST05PVVNfSU8gX1NDX0FTWU5DSFJPTk9VU19JTwogICAgX1NDX1BSSU9S SVRJWkVEX0lPLAojZGVmaW5lIF9TQ19QUklPUklUSVpFRF9JTyBfU0NfUFJJT1JJVElaRURfSU8K ICAgIF9TQ19TWU5DSFJPTklaRURfSU8sCiNkZWZpbmUgX1NDX1NZTkNIUk9OSVpFRF9JTyBfU0Nf U1lOQ0hST05JWkVEX0lPCiAgICBfU0NfRlNZTkMsCiNkZWZpbmUgX1NDX0ZTWU5DIF9TQ19GU1lO QwogICAgX1NDX01BUFBFRF9GSUxFUywKI2RlZmluZSBfU0NfTUFQUEVEX0ZJTEVTIF9TQ19NQVBQ RURfRklMRVMKICAgIF9TQ19NRU1MT0NLLAojZGVmaW5lIF9TQ19NRU1MT0NLIF9TQ19NRU1MT0NL CiAgICBfU0NfTUVNTE9DS19SQU5HRSwKI2RlZmluZSBfU0NfTUVNTE9DS19SQU5HRSBfU0NfTUVN TE9DS19SQU5HRQogICAgX1NDX01FTU9SWV9QUk9URUNUSU9OLAojZGVmaW5lIF9TQ19NRU1PUllf UFJPVEVDVElPTiBfU0NfTUVNT1JZX1BST1RFQ1RJT04KICAgIF9TQ19NRVNTQUdFX1BBU1NJTkcs CiNkZWZpbmUgX1NDX01FU1NBR0VfUEFTU0lORyBfU0NfTUVTU0FHRV9QQVNTSU5HCiAgICBfU0Nf U0VNQVBIT1JFUywKI2RlZmluZSBfU0NfU0VNQVBIT1JFUyBfU0NfU0VNQVBIT1JFUwogICAgX1ND X1NIQVJFRF9NRU1PUllfT0JKRUNUUywKI2RlZmluZSBfU0NfU0hBUkVEX01FTU9SWV9PQkpFQ1RT IF9TQ19TSEFSRURfTUVNT1JZX09CSkVDVFMKICAgIF9TQ19BSU9fTElTVElPX01BWCwKI2RlZmlu ZSBfU0NfQUlPX0xJU1RJT19NQVggX1NDX0FJT19MSVNUSU9fTUFYCiAgICBfU0NfQUlPX01BWCwK I2RlZmluZSBfU0NfQUlPX01BWCBfU0NfQUlPX01BWAogICAgX1NDX0FJT19QUklPX0RFTFRBX01B WCwKI2RlZmluZSBfU0NfQUlPX1BSSU9fREVMVEFfTUFYIF9TQ19BSU9fUFJJT19ERUxUQV9NQVgK ICAgIF9TQ19ERUxBWVRJTUVSX01BWCwKI2RlZmluZSBfU0NfREVMQVlUSU1FUl9NQVggX1NDX0RF TEFZVElNRVJfTUFYCiAgICBfU0NfTVFfT1BFTl9NQVgsCiNkZWZpbmUgX1NDX01RX09QRU5fTUFY IF9TQ19NUV9PUEVOX01BWAogICAgX1NDX01RX1BSSU9fTUFYLAojZGVmaW5lIF9TQ19NUV9QUklP X01BWCBfU0NfTVFfUFJJT19NQVgKICAgIF9TQ19WRVJTSU9OLAojZGVmaW5lIF9TQ19WRVJTSU9O IF9TQ19WRVJTSU9OCiAgICBfU0NfUEFHRVNJWkUsCiNkZWZpbmUgX1NDX1BBR0VTSVpFIF9TQ19Q QUdFU0laRQojZGVmaW5lIF9TQ19QQUdFX1NJWkUgX1NDX1BBR0VTSVpFCiAgICBfU0NfUlRTSUdf TUFYLAojZGVmaW5lIF9TQ19SVFNJR19NQVggX1NDX1JUU0lHX01BWAogICAgX1NDX1NFTV9OU0VN U19NQVgsCiNkZWZpbmUgX1NDX1NFTV9OU0VNU19NQVggX1NDX1NFTV9OU0VNU19NQVgKICAgIF9T Q19TRU1fVkFMVUVfTUFYLAojZGVmaW5lIF9TQ19TRU1fVkFMVUVfTUFYIF9TQ19TRU1fVkFMVUVf TUFYCiAgICBfU0NfU0lHUVVFVUVfTUFYLAojZGVmaW5lIF9TQ19TSUdRVUVVRV9NQVggX1NDX1NJ R1FVRVVFX01BWAogICAgX1NDX1RJTUVSX01BWCwKI2RlZmluZSBfU0NfVElNRVJfTUFYIF9TQ19U SU1FUl9NQVgKCgoKICAgIF9TQ19CQ19CQVNFX01BWCwKI2RlZmluZSBfU0NfQkNfQkFTRV9NQVgg X1NDX0JDX0JBU0VfTUFYCiAgICBfU0NfQkNfRElNX01BWCwKI2RlZmluZSBfU0NfQkNfRElNX01B WCBfU0NfQkNfRElNX01BWAogICAgX1NDX0JDX1NDQUxFX01BWCwKI2RlZmluZSBfU0NfQkNfU0NB TEVfTUFYIF9TQ19CQ19TQ0FMRV9NQVgKICAgIF9TQ19CQ19TVFJJTkdfTUFYLAojZGVmaW5lIF9T Q19CQ19TVFJJTkdfTUFYIF9TQ19CQ19TVFJJTkdfTUFYCiAgICBfU0NfQ09MTF9XRUlHSFRTX01B WCwKI2RlZmluZSBfU0NfQ09MTF9XRUlHSFRTX01BWCBfU0NfQ09MTF9XRUlHSFRTX01BWAogICAg X1NDX0VRVUlWX0NMQVNTX01BWCwKI2RlZmluZSBfU0NfRVFVSVZfQ0xBU1NfTUFYIF9TQ19FUVVJ Vl9DTEFTU19NQVgKICAgIF9TQ19FWFBSX05FU1RfTUFYLAojZGVmaW5lIF9TQ19FWFBSX05FU1Rf TUFYIF9TQ19FWFBSX05FU1RfTUFYCiAgICBfU0NfTElORV9NQVgsCiNkZWZpbmUgX1NDX0xJTkVf TUFYIF9TQ19MSU5FX01BWAogICAgX1NDX1JFX0RVUF9NQVgsCiNkZWZpbmUgX1NDX1JFX0RVUF9N QVggX1NDX1JFX0RVUF9NQVgKICAgIF9TQ19DSEFSQ0xBU1NfTkFNRV9NQVgsCiNkZWZpbmUgX1ND X0NIQVJDTEFTU19OQU1FX01BWCBfU0NfQ0hBUkNMQVNTX05BTUVfTUFYCgogICAgX1NDXzJfVkVS U0lPTiwKI2RlZmluZSBfU0NfMl9WRVJTSU9OIF9TQ18yX1ZFUlNJT04KICAgIF9TQ18yX0NfQklO RCwKI2RlZmluZSBfU0NfMl9DX0JJTkQgX1NDXzJfQ19CSU5ECiAgICBfU0NfMl9DX0RFViwKI2Rl ZmluZSBfU0NfMl9DX0RFViBfU0NfMl9DX0RFVgogICAgX1NDXzJfRk9SVF9ERVYsCiNkZWZpbmUg X1NDXzJfRk9SVF9ERVYgX1NDXzJfRk9SVF9ERVYKICAgIF9TQ18yX0ZPUlRfUlVOLAojZGVmaW5l IF9TQ18yX0ZPUlRfUlVOIF9TQ18yX0ZPUlRfUlVOCiAgICBfU0NfMl9TV19ERVYsCiNkZWZpbmUg X1NDXzJfU1dfREVWIF9TQ18yX1NXX0RFVgogICAgX1NDXzJfTE9DQUxFREVGLAojZGVmaW5lIF9T Q18yX0xPQ0FMRURFRiBfU0NfMl9MT0NBTEVERUYKCiAgICBfU0NfUElJLAojZGVmaW5lIF9TQ19Q SUkgX1NDX1BJSQogICAgX1NDX1BJSV9YVEksCiNkZWZpbmUgX1NDX1BJSV9YVEkgX1NDX1BJSV9Y VEkKICAgIF9TQ19QSUlfU09DS0VULAojZGVmaW5lIF9TQ19QSUlfU09DS0VUIF9TQ19QSUlfU09D S0VUCiAgICBfU0NfUElJX0lOVEVSTkVULAojZGVmaW5lIF9TQ19QSUlfSU5URVJORVQgX1NDX1BJ SV9JTlRFUk5FVAogICAgX1NDX1BJSV9PU0ksCiNkZWZpbmUgX1NDX1BJSV9PU0kgX1NDX1BJSV9P U0kKICAgIF9TQ19QT0xMLAojZGVmaW5lIF9TQ19QT0xMIF9TQ19QT0xMCiAgICBfU0NfU0VMRUNU LAojZGVmaW5lIF9TQ19TRUxFQ1QgX1NDX1NFTEVDVAogICAgX1NDX1VJT19NQVhJT1YsCiNkZWZp bmUgX1NDX1VJT19NQVhJT1YgX1NDX1VJT19NQVhJT1YKICAgIF9TQ19JT1ZfTUFYID0gX1NDX1VJ T19NQVhJT1YsCiNkZWZpbmUgX1NDX0lPVl9NQVggX1NDX0lPVl9NQVgKICAgIF9TQ19QSUlfSU5U RVJORVRfU1RSRUFNLAojZGVmaW5lIF9TQ19QSUlfSU5URVJORVRfU1RSRUFNIF9TQ19QSUlfSU5U RVJORVRfU1RSRUFNCiAgICBfU0NfUElJX0lOVEVSTkVUX0RHUkFNLAojZGVmaW5lIF9TQ19QSUlf SU5URVJORVRfREdSQU0gX1NDX1BJSV9JTlRFUk5FVF9ER1JBTQogICAgX1NDX1BJSV9PU0lfQ09U UywKI2RlZmluZSBfU0NfUElJX09TSV9DT1RTIF9TQ19QSUlfT1NJX0NPVFMKICAgIF9TQ19QSUlf T1NJX0NMVFMsCiNkZWZpbmUgX1NDX1BJSV9PU0lfQ0xUUyBfU0NfUElJX09TSV9DTFRTCiAgICBf U0NfUElJX09TSV9NLAojZGVmaW5lIF9TQ19QSUlfT1NJX00gX1NDX1BJSV9PU0lfTQogICAgX1ND X1RfSU9WX01BWCwKI2RlZmluZSBfU0NfVF9JT1ZfTUFYIF9TQ19UX0lPVl9NQVgKCgogICAgX1ND X1RIUkVBRFMsCiNkZWZpbmUgX1NDX1RIUkVBRFMgX1NDX1RIUkVBRFMKICAgIF9TQ19USFJFQURf U0FGRV9GVU5DVElPTlMsCiNkZWZpbmUgX1NDX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUyBfU0NfVEhS RUFEX1NBRkVfRlVOQ1RJT05TCiAgICBfU0NfR0VUR1JfUl9TSVpFX01BWCwKI2RlZmluZSBfU0Nf R0VUR1JfUl9TSVpFX01BWCBfU0NfR0VUR1JfUl9TSVpFX01BWAogICAgX1NDX0dFVFBXX1JfU0la RV9NQVgsCiNkZWZpbmUgX1NDX0dFVFBXX1JfU0laRV9NQVggX1NDX0dFVFBXX1JfU0laRV9NQVgK ICAgIF9TQ19MT0dJTl9OQU1FX01BWCwKI2RlZmluZSBfU0NfTE9HSU5fTkFNRV9NQVggX1NDX0xP R0lOX05BTUVfTUFYCiAgICBfU0NfVFRZX05BTUVfTUFYLAojZGVmaW5lIF9TQ19UVFlfTkFNRV9N QVggX1NDX1RUWV9OQU1FX01BWAogICAgX1NDX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMs CiNkZWZpbmUgX1NDX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMgX1NDX1RIUkVBRF9ERVNU UlVDVE9SX0lURVJBVElPTlMKICAgIF9TQ19USFJFQURfS0VZU19NQVgsCiNkZWZpbmUgX1NDX1RI UkVBRF9LRVlTX01BWCBfU0NfVEhSRUFEX0tFWVNfTUFYCiAgICBfU0NfVEhSRUFEX1NUQUNLX01J TiwKI2RlZmluZSBfU0NfVEhSRUFEX1NUQUNLX01JTiBfU0NfVEhSRUFEX1NUQUNLX01JTgogICAg X1NDX1RIUkVBRF9USFJFQURTX01BWCwKI2RlZmluZSBfU0NfVEhSRUFEX1RIUkVBRFNfTUFYIF9T Q19USFJFQURfVEhSRUFEU19NQVgKICAgIF9TQ19USFJFQURfQVRUUl9TVEFDS0FERFIsCiNkZWZp bmUgX1NDX1RIUkVBRF9BVFRSX1NUQUNLQUREUiBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tBRERSCiAg ICBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tTSVpFLAojZGVmaW5lIF9TQ19USFJFQURfQVRUUl9TVEFD S1NJWkUgX1NDX1RIUkVBRF9BVFRSX1NUQUNLU0laRQogICAgX1NDX1RIUkVBRF9QUklPUklUWV9T Q0hFRFVMSU5HLAojZGVmaW5lIF9TQ19USFJFQURfUFJJT1JJVFlfU0NIRURVTElORyBfU0NfVEhS RUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcKICAgIF9TQ19USFJFQURfUFJJT19JTkhFUklULAojZGVm aW5lIF9TQ19USFJFQURfUFJJT19JTkhFUklUIF9TQ19USFJFQURfUFJJT19JTkhFUklUCiAgICBf U0NfVEhSRUFEX1BSSU9fUFJPVEVDVCwKI2RlZmluZSBfU0NfVEhSRUFEX1BSSU9fUFJPVEVDVCBf U0NfVEhSRUFEX1BSSU9fUFJPVEVDVAogICAgX1NDX1RIUkVBRF9QUk9DRVNTX1NIQVJFRCwKI2Rl ZmluZSBfU0NfVEhSRUFEX1BST0NFU1NfU0hBUkVEIF9TQ19USFJFQURfUFJPQ0VTU19TSEFSRUQK CiAgICBfU0NfTlBST0NFU1NPUlNfQ09ORiwKI2RlZmluZSBfU0NfTlBST0NFU1NPUlNfQ09ORiBf U0NfTlBST0NFU1NPUlNfQ09ORgogICAgX1NDX05QUk9DRVNTT1JTX09OTE4sCiNkZWZpbmUgX1ND X05QUk9DRVNTT1JTX09OTE4gX1NDX05QUk9DRVNTT1JTX09OTE4KICAgIF9TQ19QSFlTX1BBR0VT LAojZGVmaW5lIF9TQ19QSFlTX1BBR0VTIF9TQ19QSFlTX1BBR0VTCiAgICBfU0NfQVZQSFlTX1BB R0VTLAojZGVmaW5lIF9TQ19BVlBIWVNfUEFHRVMgX1NDX0FWUEhZU19QQUdFUwogICAgX1NDX0FU RVhJVF9NQVgsCiNkZWZpbmUgX1NDX0FURVhJVF9NQVggX1NDX0FURVhJVF9NQVgKICAgIF9TQ19Q QVNTX01BWCwKI2RlZmluZSBfU0NfUEFTU19NQVggX1NDX1BBU1NfTUFYCgogICAgX1NDX1hPUEVO X1ZFUlNJT04sCiNkZWZpbmUgX1NDX1hPUEVOX1ZFUlNJT04gX1NDX1hPUEVOX1ZFUlNJT04KICAg IF9TQ19YT1BFTl9YQ1VfVkVSU0lPTiwKI2RlZmluZSBfU0NfWE9QRU5fWENVX1ZFUlNJT04gX1ND X1hPUEVOX1hDVV9WRVJTSU9OCiAgICBfU0NfWE9QRU5fVU5JWCwKI2RlZmluZSBfU0NfWE9QRU5f VU5JWCBfU0NfWE9QRU5fVU5JWAogICAgX1NDX1hPUEVOX0NSWVBULAojZGVmaW5lIF9TQ19YT1BF Tl9DUllQVCBfU0NfWE9QRU5fQ1JZUFQKICAgIF9TQ19YT1BFTl9FTkhfSTE4TiwKI2RlZmluZSBf U0NfWE9QRU5fRU5IX0kxOE4gX1NDX1hPUEVOX0VOSF9JMThOCiAgICBfU0NfWE9QRU5fU0hNLAoj ZGVmaW5lIF9TQ19YT1BFTl9TSE0gX1NDX1hPUEVOX1NITQoKICAgIF9TQ18yX0NIQVJfVEVSTSwK I2RlZmluZSBfU0NfMl9DSEFSX1RFUk0gX1NDXzJfQ0hBUl9URVJNCiAgICBfU0NfMl9DX1ZFUlNJ T04sCiNkZWZpbmUgX1NDXzJfQ19WRVJTSU9OIF9TQ18yX0NfVkVSU0lPTgogICAgX1NDXzJfVVBF LAojZGVmaW5lIF9TQ18yX1VQRSBfU0NfMl9VUEUKCiAgICBfU0NfWE9QRU5fWFBHMiwKI2RlZmlu ZSBfU0NfWE9QRU5fWFBHMiBfU0NfWE9QRU5fWFBHMgogICAgX1NDX1hPUEVOX1hQRzMsCiNkZWZp bmUgX1NDX1hPUEVOX1hQRzMgX1NDX1hPUEVOX1hQRzMKICAgIF9TQ19YT1BFTl9YUEc0LAojZGVm aW5lIF9TQ19YT1BFTl9YUEc0IF9TQ19YT1BFTl9YUEc0CgogICAgX1NDX0NIQVJfQklULAojZGVm aW5lIF9TQ19DSEFSX0JJVCBfU0NfQ0hBUl9CSVQKICAgIF9TQ19DSEFSX01BWCwKI2RlZmluZSBf U0NfQ0hBUl9NQVggX1NDX0NIQVJfTUFYCiAgICBfU0NfQ0hBUl9NSU4sCiNkZWZpbmUgX1NDX0NI QVJfTUlOIF9TQ19DSEFSX01JTgogICAgX1NDX0lOVF9NQVgsCiNkZWZpbmUgX1NDX0lOVF9NQVgg X1NDX0lOVF9NQVgKICAgIF9TQ19JTlRfTUlOLAojZGVmaW5lIF9TQ19JTlRfTUlOIF9TQ19JTlRf TUlOCiAgICBfU0NfTE9OR19CSVQsCiNkZWZpbmUgX1NDX0xPTkdfQklUIF9TQ19MT05HX0JJVAog ICAgX1NDX1dPUkRfQklULAojZGVmaW5lIF9TQ19XT1JEX0JJVCBfU0NfV09SRF9CSVQKICAgIF9T Q19NQl9MRU5fTUFYLAojZGVmaW5lIF9TQ19NQl9MRU5fTUFYIF9TQ19NQl9MRU5fTUFYCiAgICBf U0NfTlpFUk8sCiNkZWZpbmUgX1NDX05aRVJPIF9TQ19OWkVSTwogICAgX1NDX1NTSVpFX01BWCwK I2RlZmluZSBfU0NfU1NJWkVfTUFYIF9TQ19TU0laRV9NQVgKICAgIF9TQ19TQ0hBUl9NQVgsCiNk ZWZpbmUgX1NDX1NDSEFSX01BWCBfU0NfU0NIQVJfTUFYCiAgICBfU0NfU0NIQVJfTUlOLAojZGVm aW5lIF9TQ19TQ0hBUl9NSU4gX1NDX1NDSEFSX01JTgogICAgX1NDX1NIUlRfTUFYLAojZGVmaW5l IF9TQ19TSFJUX01BWCBfU0NfU0hSVF9NQVgKICAgIF9TQ19TSFJUX01JTiwKI2RlZmluZSBfU0Nf U0hSVF9NSU4gX1NDX1NIUlRfTUlOCiAgICBfU0NfVUNIQVJfTUFYLAojZGVmaW5lIF9TQ19VQ0hB Ul9NQVggX1NDX1VDSEFSX01BWAogICAgX1NDX1VJTlRfTUFYLAojZGVmaW5lIF9TQ19VSU5UX01B WCBfU0NfVUlOVF9NQVgKICAgIF9TQ19VTE9OR19NQVgsCiNkZWZpbmUgX1NDX1VMT05HX01BWCBf U0NfVUxPTkdfTUFYCiAgICBfU0NfVVNIUlRfTUFYLAojZGVmaW5lIF9TQ19VU0hSVF9NQVggX1ND X1VTSFJUX01BWAoKICAgIF9TQ19OTF9BUkdNQVgsCiNkZWZpbmUgX1NDX05MX0FSR01BWCBfU0Nf TkxfQVJHTUFYCiAgICBfU0NfTkxfTEFOR01BWCwKI2RlZmluZSBfU0NfTkxfTEFOR01BWCBfU0Nf TkxfTEFOR01BWAogICAgX1NDX05MX01TR01BWCwKI2RlZmluZSBfU0NfTkxfTVNHTUFYIF9TQ19O TF9NU0dNQVgKICAgIF9TQ19OTF9OTUFYLAojZGVmaW5lIF9TQ19OTF9OTUFYIF9TQ19OTF9OTUFY CiAgICBfU0NfTkxfU0VUTUFYLAojZGVmaW5lIF9TQ19OTF9TRVRNQVggX1NDX05MX1NFVE1BWAog ICAgX1NDX05MX1RFWFRNQVgsCiNkZWZpbmUgX1NDX05MX1RFWFRNQVggX1NDX05MX1RFWFRNQVgK CiAgICBfU0NfWEJTNV9JTFAzMl9PRkYzMiwKI2RlZmluZSBfU0NfWEJTNV9JTFAzMl9PRkYzMiBf U0NfWEJTNV9JTFAzMl9PRkYzMgogICAgX1NDX1hCUzVfSUxQMzJfT0ZGQklHLAojZGVmaW5lIF9T Q19YQlM1X0lMUDMyX09GRkJJRyBfU0NfWEJTNV9JTFAzMl9PRkZCSUcKICAgIF9TQ19YQlM1X0xQ NjRfT0ZGNjQsCiNkZWZpbmUgX1NDX1hCUzVfTFA2NF9PRkY2NCBfU0NfWEJTNV9MUDY0X09GRjY0 CiAgICBfU0NfWEJTNV9MUEJJR19PRkZCSUcsCiNkZWZpbmUgX1NDX1hCUzVfTFBCSUdfT0ZGQklH IF9TQ19YQlM1X0xQQklHX09GRkJJRwoKICAgIF9TQ19YT1BFTl9MRUdBQ1ksCiNkZWZpbmUgX1ND X1hPUEVOX0xFR0FDWSBfU0NfWE9QRU5fTEVHQUNZCiAgICBfU0NfWE9QRU5fUkVBTFRJTUUsCiNk ZWZpbmUgX1NDX1hPUEVOX1JFQUxUSU1FIF9TQ19YT1BFTl9SRUFMVElNRQogICAgX1NDX1hPUEVO X1JFQUxUSU1FX1RIUkVBRFMsCiNkZWZpbmUgX1NDX1hPUEVOX1JFQUxUSU1FX1RIUkVBRFMgX1ND X1hPUEVOX1JFQUxUSU1FX1RIUkVBRFMKCiAgICBfU0NfQURWSVNPUllfSU5GTywKI2RlZmluZSBf U0NfQURWSVNPUllfSU5GTyBfU0NfQURWSVNPUllfSU5GTwogICAgX1NDX0JBUlJJRVJTLAojZGVm aW5lIF9TQ19CQVJSSUVSUyBfU0NfQkFSUklFUlMKICAgIF9TQ19CQVNFLAojZGVmaW5lIF9TQ19C QVNFIF9TQ19CQVNFCiAgICBfU0NfQ19MQU5HX1NVUFBPUlQsCiNkZWZpbmUgX1NDX0NfTEFOR19T VVBQT1JUIF9TQ19DX0xBTkdfU1VQUE9SVAogICAgX1NDX0NfTEFOR19TVVBQT1JUX1IsCiNkZWZp bmUgX1NDX0NfTEFOR19TVVBQT1JUX1IgX1NDX0NfTEFOR19TVVBQT1JUX1IKICAgIF9TQ19DTE9D S19TRUxFQ1RJT04sCiNkZWZpbmUgX1NDX0NMT0NLX1NFTEVDVElPTiBfU0NfQ0xPQ0tfU0VMRUNU SU9OCiAgICBfU0NfQ1BVVElNRSwKI2RlZmluZSBfU0NfQ1BVVElNRSBfU0NfQ1BVVElNRQogICAg X1NDX1RIUkVBRF9DUFVUSU1FLAojZGVmaW5lIF9TQ19USFJFQURfQ1BVVElNRSBfU0NfVEhSRUFE X0NQVVRJTUUKICAgIF9TQ19ERVZJQ0VfSU8sCiNkZWZpbmUgX1NDX0RFVklDRV9JTyBfU0NfREVW SUNFX0lPCiAgICBfU0NfREVWSUNFX1NQRUNJRklDLAojZGVmaW5lIF9TQ19ERVZJQ0VfU1BFQ0lG SUMgX1NDX0RFVklDRV9TUEVDSUZJQwogICAgX1NDX0RFVklDRV9TUEVDSUZJQ19SLAojZGVmaW5l IF9TQ19ERVZJQ0VfU1BFQ0lGSUNfUiBfU0NfREVWSUNFX1NQRUNJRklDX1IKICAgIF9TQ19GRF9N R01ULAojZGVmaW5lIF9TQ19GRF9NR01UIF9TQ19GRF9NR01UCiAgICBfU0NfRklGTywKI2RlZmlu ZSBfU0NfRklGTyBfU0NfRklGTwogICAgX1NDX1BJUEUsCiNkZWZpbmUgX1NDX1BJUEUgX1NDX1BJ UEUKICAgIF9TQ19GSUxFX0FUVFJJQlVURVMsCiNkZWZpbmUgX1NDX0ZJTEVfQVRUUklCVVRFUyBf U0NfRklMRV9BVFRSSUJVVEVTCiAgICBfU0NfRklMRV9MT0NLSU5HLAojZGVmaW5lIF9TQ19GSUxF X0xPQ0tJTkcgX1NDX0ZJTEVfTE9DS0lORwogICAgX1NDX0ZJTEVfU1lTVEVNLAojZGVmaW5lIF9T Q19GSUxFX1NZU1RFTSBfU0NfRklMRV9TWVNURU0KICAgIF9TQ19NT05PVE9OSUNfQ0xPQ0ssCiNk ZWZpbmUgX1NDX01PTk9UT05JQ19DTE9DSyBfU0NfTU9OT1RPTklDX0NMT0NLCiAgICBfU0NfTVVM VElfUFJPQ0VTUywKI2RlZmluZSBfU0NfTVVMVElfUFJPQ0VTUyBfU0NfTVVMVElfUFJPQ0VTUwog ICAgX1NDX1NJTkdMRV9QUk9DRVNTLAojZGVmaW5lIF9TQ19TSU5HTEVfUFJPQ0VTUyBfU0NfU0lO R0xFX1BST0NFU1MKICAgIF9TQ19ORVRXT1JLSU5HLAojZGVmaW5lIF9TQ19ORVRXT1JLSU5HIF9T Q19ORVRXT1JLSU5HCiAgICBfU0NfUkVBREVSX1dSSVRFUl9MT0NLUywKI2RlZmluZSBfU0NfUkVB REVSX1dSSVRFUl9MT0NLUyBfU0NfUkVBREVSX1dSSVRFUl9MT0NLUwogICAgX1NDX1NQSU5fTE9D S1MsCiNkZWZpbmUgX1NDX1NQSU5fTE9DS1MgX1NDX1NQSU5fTE9DS1MKICAgIF9TQ19SRUdFWFAs CiNkZWZpbmUgX1NDX1JFR0VYUCBfU0NfUkVHRVhQCiAgICBfU0NfUkVHRVhfVkVSU0lPTiwKI2Rl ZmluZSBfU0NfUkVHRVhfVkVSU0lPTiBfU0NfUkVHRVhfVkVSU0lPTgogICAgX1NDX1NIRUxMLAoj ZGVmaW5lIF9TQ19TSEVMTCBfU0NfU0hFTEwKICAgIF9TQ19TSUdOQUxTLAojZGVmaW5lIF9TQ19T SUdOQUxTIF9TQ19TSUdOQUxTCiAgICBfU0NfU1BBV04sCiNkZWZpbmUgX1NDX1NQQVdOIF9TQ19T UEFXTgogICAgX1NDX1NQT1JBRElDX1NFUlZFUiwKI2RlZmluZSBfU0NfU1BPUkFESUNfU0VSVkVS IF9TQ19TUE9SQURJQ19TRVJWRVIKICAgIF9TQ19USFJFQURfU1BPUkFESUNfU0VSVkVSLAojZGVm aW5lIF9TQ19USFJFQURfU1BPUkFESUNfU0VSVkVSIF9TQ19USFJFQURfU1BPUkFESUNfU0VSVkVS CiAgICBfU0NfU1lTVEVNX0RBVEFCQVNFLAojZGVmaW5lIF9TQ19TWVNURU1fREFUQUJBU0UgX1ND X1NZU1RFTV9EQVRBQkFTRQogICAgX1NDX1NZU1RFTV9EQVRBQkFTRV9SLAojZGVmaW5lIF9TQ19T WVNURU1fREFUQUJBU0VfUiBfU0NfU1lTVEVNX0RBVEFCQVNFX1IKICAgIF9TQ19USU1FT1VUUywK I2RlZmluZSBfU0NfVElNRU9VVFMgX1NDX1RJTUVPVVRTCiAgICBfU0NfVFlQRURfTUVNT1JZX09C SkVDVFMsCiNkZWZpbmUgX1NDX1RZUEVEX01FTU9SWV9PQkpFQ1RTIF9TQ19UWVBFRF9NRU1PUllf T0JKRUNUUwogICAgX1NDX1VTRVJfR1JPVVBTLAojZGVmaW5lIF9TQ19VU0VSX0dST1VQUyBfU0Nf VVNFUl9HUk9VUFMKICAgIF9TQ19VU0VSX0dST1VQU19SLAojZGVmaW5lIF9TQ19VU0VSX0dST1VQ U19SIF9TQ19VU0VSX0dST1VQU19SCiAgICBfU0NfMl9QQlMsCiNkZWZpbmUgX1NDXzJfUEJTIF9T Q18yX1BCUwogICAgX1NDXzJfUEJTX0FDQ09VTlRJTkcsCiNkZWZpbmUgX1NDXzJfUEJTX0FDQ09V TlRJTkcgX1NDXzJfUEJTX0FDQ09VTlRJTkcKICAgIF9TQ18yX1BCU19MT0NBVEUsCiNkZWZpbmUg X1NDXzJfUEJTX0xPQ0FURSBfU0NfMl9QQlNfTE9DQVRFCiAgICBfU0NfMl9QQlNfTUVTU0FHRSwK I2RlZmluZSBfU0NfMl9QQlNfTUVTU0FHRSBfU0NfMl9QQlNfTUVTU0FHRQogICAgX1NDXzJfUEJT X1RSQUNLLAojZGVmaW5lIF9TQ18yX1BCU19UUkFDSyBfU0NfMl9QQlNfVFJBQ0sKICAgIF9TQ19T WU1MT09QX01BWCwKI2RlZmluZSBfU0NfU1lNTE9PUF9NQVggX1NDX1NZTUxPT1BfTUFYCiAgICBf U0NfU1RSRUFNUywKI2RlZmluZSBfU0NfU1RSRUFNUyBfU0NfU1RSRUFNUwogICAgX1NDXzJfUEJT X0NIRUNLUE9JTlQsCiNkZWZpbmUgX1NDXzJfUEJTX0NIRUNLUE9JTlQgX1NDXzJfUEJTX0NIRUNL UE9JTlQKCiAgICBfU0NfVjZfSUxQMzJfT0ZGMzIsCiNkZWZpbmUgX1NDX1Y2X0lMUDMyX09GRjMy IF9TQ19WNl9JTFAzMl9PRkYzMgogICAgX1NDX1Y2X0lMUDMyX09GRkJJRywKI2RlZmluZSBfU0Nf VjZfSUxQMzJfT0ZGQklHIF9TQ19WNl9JTFAzMl9PRkZCSUcKICAgIF9TQ19WNl9MUDY0X09GRjY0 LAojZGVmaW5lIF9TQ19WNl9MUDY0X09GRjY0IF9TQ19WNl9MUDY0X09GRjY0CiAgICBfU0NfVjZf TFBCSUdfT0ZGQklHLAojZGVmaW5lIF9TQ19WNl9MUEJJR19PRkZCSUcgX1NDX1Y2X0xQQklHX09G RkJJRwoKICAgIF9TQ19IT1NUX05BTUVfTUFYLAojZGVmaW5lIF9TQ19IT1NUX05BTUVfTUFYIF9T Q19IT1NUX05BTUVfTUFYCiAgICBfU0NfVFJBQ0UsCiNkZWZpbmUgX1NDX1RSQUNFIF9TQ19UUkFD RQogICAgX1NDX1RSQUNFX0VWRU5UX0ZJTFRFUiwKI2RlZmluZSBfU0NfVFJBQ0VfRVZFTlRfRklM VEVSIF9TQ19UUkFDRV9FVkVOVF9GSUxURVIKICAgIF9TQ19UUkFDRV9JTkhFUklULAojZGVmaW5l IF9TQ19UUkFDRV9JTkhFUklUIF9TQ19UUkFDRV9JTkhFUklUCiAgICBfU0NfVFJBQ0VfTE9HCiNk ZWZpbmUgX1NDX1RSQUNFX0xPRyBfU0NfVFJBQ0VfTE9HCiAgfTsKCgoKCgplbnVtCiAgewogICAg X0NTX1BBVEgsCiNkZWZpbmUgX0NTX1BBVEggX0NTX1BBVEgKIyA1NjMgIi91c3IvaW5jbHVkZS9i aXRzL2NvbmZuYW1lLmgiIDMKICAgIF9DU19WNl9XSURUSF9SRVNUUklDVEVEX0VOVlMKI2RlZmlu ZSBfQ1NfVjZfV0lEVEhfUkVTVFJJQ1RFRF9FTlZTIF9DU19WNl9XSURUSF9SRVNUUklDVEVEX0VO VlMKICB9OwojIDUwMSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgpleHRlcm4gbG9uZyBp bnQgcGF0aGNvbmYgKF9fY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19uYW1lKSA7CgoKZXh0ZXJu IGxvbmcgaW50IGZwYXRoY29uZiAoaW50IF9fZmQsIGludCBfX25hbWUpIDsKCgpleHRlcm4gbG9u ZyBpbnQgc3lzY29uZiAoaW50IF9fbmFtZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK CgpleHRlcm4gc2l6ZV90IGNvbmZzdHIgKGludCBfX25hbWUsIGNoYXIgKl9fYnVmLCBzaXplX3Qg X19sZW4pIDsKCgoKCmV4dGVybiBfX3BpZF90IGdldHBpZCAodm9pZCkgOwoKCmV4dGVybiBfX3Bp ZF90IGdldHBwaWQgKHZvaWQpIDsKCgoKCmV4dGVybiBfX3BpZF90IGdldHBncnAgKHZvaWQpIDsK IyA1MzYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19waWRfdCBfX2dldHBnaWQg KF9fcGlkX3QgX19waWQpIDsKIyA1NDUgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4g aW50IHNldHBnaWQgKF9fcGlkX3QgX19waWQsIF9fcGlkX3QgX19wZ2lkKSA7CiMgNTYyICIvdXNy L2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBzZXRwZ3JwICh2b2lkKSA7CiMgNTgwICIv dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIF9fcGlkX3Qgc2V0c2lkICh2b2lkKSA7CgoK CgoKCgpleHRlcm4gX191aWRfdCBnZXR1aWQgKHZvaWQpIDsKCgpleHRlcm4gX191aWRfdCBnZXRl dWlkICh2b2lkKSA7CgoKZXh0ZXJuIF9fZ2lkX3QgZ2V0Z2lkICh2b2lkKSA7CgoKZXh0ZXJuIF9f Z2lkX3QgZ2V0ZWdpZCAodm9pZCkgOwoKCgoKZXh0ZXJuIGludCBnZXRncm91cHMgKGludCBfX3Np emUsIF9fZ2lkX3QgX19saXN0W10pIDsKIyA2MTMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpl eHRlcm4gaW50IHNldHVpZCAoX191aWRfdCBfX3VpZCkgOwoKCgoKZXh0ZXJuIGludCBzZXRyZXVp ZCAoX191aWRfdCBfX3J1aWQsIF9fdWlkX3QgX19ldWlkKSA7CgoKCgpleHRlcm4gaW50IHNldGV1 aWQgKF9fdWlkX3QgX191aWQpIDsKCgoKCgoKZXh0ZXJuIGludCBzZXRnaWQgKF9fZ2lkX3QgX19n aWQpIDsKCgoKCmV4dGVybiBpbnQgc2V0cmVnaWQgKF9fZ2lkX3QgX19yZ2lkLCBfX2dpZF90IF9f ZWdpZCkgOwoKCgoKZXh0ZXJuIGludCBzZXRlZ2lkIChfX2dpZF90IF9fZ2lkKSA7CgoKCgoKCmV4 dGVybiBfX3BpZF90IGZvcmsgKHZvaWQpIDsKCgoKCgoKZXh0ZXJuIF9fcGlkX3QgdmZvcmsgKHZv aWQpIDsKCgoKCgpleHRlcm4gY2hhciAqdHR5bmFtZSAoaW50IF9fZmQpIDsKCgoKZXh0ZXJuIGlu dCB0dHluYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSA7CgoK CmV4dGVybiBpbnQgaXNhdHR5IChpbnQgX19mZCkgOwoKCgoKCmV4dGVybiBpbnQgdHR5c2xvdCAo dm9pZCkgOwoKCgoKZXh0ZXJuIGludCBsaW5rIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19jb25z dCBjaGFyICpfX3RvKSA7CgoKCmV4dGVybiBpbnQgc3ltbGluayAoX19jb25zdCBjaGFyICpfX2Zy b20sIF9fY29uc3QgY2hhciAqX190bykgOwoKCgoKZXh0ZXJuIGludCByZWFkbGluayAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fcGF0aCwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSA7CgoKCmV4dGVybiBpbnQgdW5saW5rIChfX2Nv bnN0IGNoYXIgKl9fbmFtZSkgOwoKCmV4dGVybiBpbnQgcm1kaXIgKF9fY29uc3QgY2hhciAqX19w YXRoKSA7CgoKCmV4dGVybiBfX3BpZF90IHRjZ2V0cGdycCAoaW50IF9fZmQpIDsKCgpleHRlcm4g aW50IHRjc2V0cGdycCAoaW50IF9fZmQsIF9fcGlkX3QgX19wZ3JwX2lkKSA7CgoKCmV4dGVybiBj aGFyICpnZXRsb2dpbiAodm9pZCkgOwojIDcxNyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4 dGVybiBpbnQgc2V0bG9naW4gKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKCgoKCgojZGVmaW5l IF9fbmVlZF9nZXRvcHQgCiMgMSAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAxIDMKIyA0NyAiL3Vz ci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiBjaGFyICpvcHRhcmc7CiMgNjEgIi91c3IvaW5j bHVkZS9nZXRvcHQuaCIgMwpleHRlcm4gaW50IG9wdGluZDsKCgoKCmV4dGVybiBpbnQgb3B0ZXJy OwoKCgpleHRlcm4gaW50IG9wdG9wdDsKIyAxNDUgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMwpl eHRlcm4gaW50IGdldG9wdCAoaW50IF9fX2FyZ2MsIGNoYXIgKmNvbnN0ICpfX19hcmd2LCBjb25z dCBjaGFyICpfX3Nob3J0b3B0cyk7CiMgMTc5ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKI3Vu ZGVmIF9fbmVlZF9nZXRvcHQKIyA3MjcgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoKCgoK CgpleHRlcm4gaW50IGdldGhvc3RuYW1lIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgOwoK CgoKCgpleHRlcm4gaW50IHNldGhvc3RuYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgc2l6ZV90 IF9fbGVuKSA7CgoKCmV4dGVybiBpbnQgc2V0aG9zdGlkIChsb25nIGludCBfX2lkKSA7CgoKCgoK ZXh0ZXJuIGludCBnZXRkb21haW5uYW1lIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgOwpl eHRlcm4gaW50IHNldGRvbWFpbm5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lLCBzaXplX3QgX19s ZW4pIDsKCgoKCgpleHRlcm4gaW50IHZoYW5ndXAgKHZvaWQpIDsKCgpleHRlcm4gaW50IHJldm9r ZSAoX19jb25zdCBjaGFyICpfX2ZpbGUpIDsKCgoKCgoKCmV4dGVybiBpbnQgcHJvZmlsICh1bnNp Z25lZCBzaG9ydCBpbnQgKl9fc2FtcGxlX2J1ZmZlciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAg ICAgICAgICAgIHNpemVfdCBfX29mZnNldCwgdW5zaWduZWQgaW50IF9fc2NhbGUpIDsKCgoKCgpl eHRlcm4gaW50IGFjY3QgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKCmV4dGVybiBjaGFyICpn ZXR1c2Vyc2hlbGwgKHZvaWQpIDsKZXh0ZXJuIHZvaWQgZW5kdXNlcnNoZWxsICh2b2lkKSA7CmV4 dGVybiB2b2lkIHNldHVzZXJzaGVsbCAodm9pZCkgOwoKCgoKCmV4dGVybiBpbnQgZGFlbW9uIChp bnQgX19ub2NoZGlyLCBpbnQgX19ub2Nsb3NlKSA7CgoKCgoKCmV4dGVybiBpbnQgY2hyb290IChf X2NvbnN0IGNoYXIgKl9fcGF0aCkgOwoKCgpleHRlcm4gY2hhciAqZ2V0cGFzcyAoX19jb25zdCBj aGFyICpfX3Byb21wdCkgOwoKCgoKCmV4dGVybiBpbnQgZnN5bmMgKGludCBfX2ZkKSA7CgoKCgoK CmV4dGVybiBsb25nIGludCBnZXRob3N0aWQgKHZvaWQpIDsKCgpleHRlcm4gdm9pZCBzeW5jICh2 b2lkKSA7CgoKCgpleHRlcm4gaW50IGdldHBhZ2VzaXplICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHRydW5jYXRlIChfX2NvbnN0IGNoYXIgKl9fZmls ZSwgX19vZmZfdCBfX2xlbmd0aCkgOwojIDg0MSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4 dGVybiBpbnQgZnRydW5jYXRlIChpbnQgX19mZCwgX19vZmZfdCBfX2xlbmd0aCkgOwojIDg1NyAi L3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgZ2V0ZHRhYmxlc2l6ZSAodm9pZCkg OwojIDg2NiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgYnJrICh2b2lkICpf X2FkZHIpIDsKCgoKCgpleHRlcm4gdm9pZCAqc2JyayAoaW50cHRyX3QgX19kZWx0YSkgOwojIDg4 NyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBsb25nIGludCBzeXNjYWxsIChsb25n IGludCBfX3N5c25vLCAuLi4pIDsKIyA5MDEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwojZGVm aW5lIEZfVUxPQ0sgMAojZGVmaW5lIEZfTE9DSyAxCiNkZWZpbmUgRl9UTE9DSyAyCiNkZWZpbmUg Rl9URVNUIDMKCgpleHRlcm4gaW50IGxvY2tmIChpbnQgX19mZCwgaW50IF9fY21kLCBfX29mZl90 IF9fbGVuKSA7CiMgOTM4ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBmZGF0 YXN5bmMgKGludCBfX2ZpbGRlcykgOwojIDk4MyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4 dGVybiBpbnQgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcGFyZW50KSAodm9pZCksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIDsKCgoKIyAxOSAiLi4vLi4v c3JjL3NkYm0udjAvc2RibWZsZHUuYyIgMgojIDEgIi91c3IvaW5jbHVkZS9zeXMvbW1hbi5oIiAx IDMKIyAyMSAiL3Vzci9pbmNsdWRlL3N5cy9tbWFuLmgiIDMKI2RlZmluZSBfU1lTX01NQU5fSCAx CgoKCiNkZWZpbmUgX19uZWVkX3NpemVfdCAKIyAxICIvdXNyL2xvY2FsL3NuYXAvZ2NjLTIwMDIw ODE5L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4xL2luY2x1ZGUvc3RkZGVmLmgi IDEgMwojIDIyMSAiL3Vzci9sb2NhbC9zbmFwL2djYy0yMDAyMDgxOS9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjIuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCiN1bmRlZiBfX25lZWRfc2l6 ZV90CiMgMjcgIi91c3IvaW5jbHVkZS9zeXMvbW1hbi5oIiAyIDMKIyA0MiAiL3Vzci9pbmNsdWRl L3N5cy9tbWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tbWFuLmgiIDEgMwojIDMzICIv dXNyL2luY2x1ZGUvYml0cy9tbWFuLmgiIDMKI2RlZmluZSBQUk9UX1JFQUQgMHgxCiNkZWZpbmUg UFJPVF9XUklURSAweDIKI2RlZmluZSBQUk9UX0VYRUMgMHg0CiNkZWZpbmUgUFJPVF9OT05FIDB4 MAoKCiNkZWZpbmUgTUFQX1NIQVJFRCAweDAxCiNkZWZpbmUgTUFQX1BSSVZBVEUgMHgwMgoKI2Rl ZmluZSBNQVBfVFlQRSAweDBmCgoKCiNkZWZpbmUgTUFQX0ZJWEVEIDB4MTAKCiNkZWZpbmUgTUFQ X0ZJTEUgMAojZGVmaW5lIE1BUF9BTk9OWU1PVVMgMHgyMAojZGVmaW5lIE1BUF9BTk9OIE1BUF9B Tk9OWU1PVVMKCgoKCiNkZWZpbmUgTUFQX0dST1dTRE9XTiAweDAxMDAKI2RlZmluZSBNQVBfREVO WVdSSVRFIDB4MDgwMAojZGVmaW5lIE1BUF9FWEVDVVRBQkxFIDB4MTAwMAojZGVmaW5lIE1BUF9M T0NLRUQgMHgyMDAwCiNkZWZpbmUgTUFQX05PUkVTRVJWRSAweDQwMDAKCgoKI2RlZmluZSBNU19B U1lOQyAxCiNkZWZpbmUgTVNfU1lOQyA0CiNkZWZpbmUgTVNfSU5WQUxJREFURSAyCgoKI2RlZmlu ZSBNQ0xfQ1VSUkVOVCAxCiNkZWZpbmUgTUNMX0ZVVFVSRSAyCiMgNzkgIi91c3IvaW5jbHVkZS9i aXRzL21tYW4uaCIgMwojZGVmaW5lIE1BRFZfTk9STUFMIDAKI2RlZmluZSBNQURWX1JBTkRPTSAx CiNkZWZpbmUgTUFEVl9TRVFVRU5USUFMIDIKI2RlZmluZSBNQURWX1dJTExORUVEIDMKI2RlZmlu ZSBNQURWX0RPTlRORUVEIDQKIyA0MyAiL3Vzci9pbmNsdWRlL3N5cy9tbWFuLmgiIDIgMwoKCiNk ZWZpbmUgTUFQX0ZBSUxFRCAoKHZvaWQgKikgLTEpCgoKIyA1OCAiL3Vzci9pbmNsdWRlL3N5cy9t bWFuLmgiIDMKZXh0ZXJuIHZvaWQgKm1tYXAgKHZvaWQgKl9fYWRkciwgc2l6ZV90IF9fbGVuLCBp bnQgX19wcm90LAogICAgICAgICAgICAgICAgICAgaW50IF9fZmxhZ3MsIGludCBfX2ZkLCBfX29m Zl90IF9fb2Zmc2V0KSA7CiMgNzcgIi91c3IvaW5jbHVkZS9zeXMvbW1hbi5oIiAzCmV4dGVybiBp bnQgbXVubWFwICh2b2lkICpfX2FkZHIsIHNpemVfdCBfX2xlbikgOwoKCgoKZXh0ZXJuIGludCBt cHJvdGVjdCAodm9pZCAqX19hZGRyLCBzaXplX3QgX19sZW4sIGludCBfX3Byb3QpIDsKCgoKCmV4 dGVybiBpbnQgbXN5bmMgKHZvaWQgKl9fYWRkciwgc2l6ZV90IF9fbGVuLCBpbnQgX19mbGFncykg OwoKCgoKZXh0ZXJuIGludCBtYWR2aXNlICh2b2lkICpfX2FkZHIsIHNpemVfdCBfX2xlbiwgaW50 IF9fYWR2aWNlKSA7CiMgMTAxICIvdXNyL2luY2x1ZGUvc3lzL21tYW4uaCIgMwpleHRlcm4gaW50 IG1sb2NrIChfX2NvbnN0IHZvaWQgKl9fYWRkciwgc2l6ZV90IF9fbGVuKSA7CgoKZXh0ZXJuIGlu dCBtdW5sb2NrIChfX2NvbnN0IHZvaWQgKl9fYWRkciwgc2l6ZV90IF9fbGVuKSA7CgoKCgpleHRl cm4gaW50IG1sb2NrYWxsIChpbnQgX19mbGFncykgOwoKCgpleHRlcm4gaW50IG11bmxvY2thbGwg KHZvaWQpIDsKCgoKCgpleHRlcm4gdm9pZCAqbXJlbWFwICh2b2lkICpfX2FkZHIsIHNpemVfdCBf X29sZF9sZW4sIHNpemVfdCBfX25ld19sZW4sCiAgICAgICAgICAgICAgICAgICAgIGludCBfX21h eV9tb3ZlKSA7CgoKCgoKCmV4dGVybiBpbnQgbWluY29yZSAodm9pZCAqX19zdGFydCwgc2l6ZV90 IF9fbGVuLCB1bnNpZ25lZCBjaGFyICpfX3ZlYyk7CgoKCgpleHRlcm4gaW50IHNobV9vcGVuIChf X2NvbnN0IGNoYXIgKl9fbmFtZSwgaW50IF9fb2ZsYWcsIG1vZGVfdCBfX21vZGUpOwoKCmV4dGVy biBpbnQgc2htX3VubGluayAoX19jb25zdCBjaGFyICpfX25hbWUpOwoKCiMgMjAgIi4uLy4uL3Ny Yy9zZGJtLnYwL3NkYm1mbGR1LmMiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwoj IDI0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKI2RlZmluZSBfU1RSSU5HX0ggMQoKCgoKCgoj ZGVmaW5lIF9fbmVlZF9zaXplX3QgCiNkZWZpbmUgX19uZWVkX05VTEwgCiMgMSAiL3Vzci9sb2Nh bC9zbmFwL2djYy0yMDAyMDgxOS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMS9p bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMjEgIi91c3IvbG9jYWwvc25hcC9nY2MtMjAwMjA4MTkv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjEvaW5jbHVkZS9zdGRkZWYuaCIgMwoj dW5kZWYgX19uZWVkX3NpemVfdAojIDM2NCAiL3Vzci9sb2NhbC9zbmFwL2djYy0yMDAyMDgxOS9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCiN1 bmRlZiBOVUxMCgoKCgojZGVmaW5lIE5VTEwgKCh2b2lkICopMCkKCgoKCgojdW5kZWYgX19uZWVk X05VTEwKIyAzNCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZvaWQgKm1l bWNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29u c3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiB2b2lkICpt ZW1tb3ZlICh2b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAg ICAgOwoKCgoKCmV4dGVybiB2b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwg X19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgaW50 IF9fYywgc2l6ZV90IF9fbikKICAgICA7CgoKCgpleHRlcm4gdm9pZCAqbWVtc2V0ICh2b2lkICpf X3MsIGludCBfX2MsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2 b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbWNociAoX19jb25zdCB2b2lkICpf X3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwojIDc3ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmNweSAoY2hh ciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAg ICA7CgpleHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBf X24pIDsKCgpleHRlcm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIDsKCmV4dGVybiBjaGFyICpzdHJuY2F0 IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Jj LAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgc3RyY21w IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3Mx LCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29u c3QgY2hhciAqX19zMikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBz aXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CiMgMTIw ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmR1cCAoX19jb25zdCBj aGFyICpfX3MpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMgMTU1ICIvdXNyL2luY2x1 ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmNociAoX19jb25zdCBjaGFyICpfX3MsIGlu dCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnJjaHIg KF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK IyAxNjcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9f Y29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KQogICAgIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIgKl9f cywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCmV4dGVybiBjaGFyICpzdHJwYnJrIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFy ICpfX2FjY2VwdCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFy ICpzdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRs ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKIyAxODcgIi91c3IvaW5jbHVkZS9z dHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgOwoKCgpleHRlcm4gY2hhciAqX19z dHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIDsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAo Y2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAog ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIDsKIyAy MTggIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25z dCBjaGFyICpfX3MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwojIDIyOSAiL3Vzci9pbmNs dWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50IF9fZXJybnVtKSA7CgoK CmV4dGVybiBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXpl X3QgX19idWZsZW4pIDsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90 IF9fbikgOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9pZCAq X19kZXN0LCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQgKl9fcywgc2l6 ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0 IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFy ICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gaW50 IGZmcyAoaW50IF9faSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDI3MiAiL3Vzci9p bmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBpbnQgc3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpf X3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo YXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CiMg Mjk0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAq Kl9fcmVzdHJpY3QgX19zdHJpbmdwLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19kZWxpbSkgOwojIDM1NyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0 cy9zdHJpbmcuaCIgMwojZGVmaW5lIF9TVFJJTkdfQVJDSF91bmFsaWduZWQgMQojIDM1OCAiL3Vz ci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIu aCIgMSAzCiMgNDYgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwojZGVmaW5lIF9fU1RS SU5HX0lOTElORSBleHRlcm4gX19pbmxpbmUKIyA1NiAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5n Mi5oIiAzCiNkZWZpbmUgX19TVFJJTkcyX1NNQUxMX0dFVDE2KHNyYyxpZHgpICgoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzcmMpKVtpZHggKyAxXSA8PCA4IHwg KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbaWR4XSkK CgojZGVmaW5lIF9fU1RSSU5HMl9TTUFMTF9HRVQzMihzcmMsaWR4KSAoKCgoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzcmMpKVtpZHggKyAzXSA8PCA4IHwgKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoc3JjKSlbaWR4ICsgMl0p IDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzcmMp KVtpZHggKyAxXSkgPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKHNyYykpW2lkeF0pCiMgOTMgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwoj ZGVmaW5lIF9fc3RyaW5nMl8xYnB0cl9wKF9feCkgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKF9f eCkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoX194KSA9PSAxKQoKCgoKCiNkZWZpbmUg bWVtc2V0KHMsYyxuKSAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKG4pICYm IChuKSA8PSAxNiA/ICgobikgPT0gMSA/IF9fbWVtc2V0XzEgKHMsIGMpIDogX19tZW1zZXRfZ2Mg KHMsIGMsIG4pKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYykgJiYgKGMpID09ICdcMCcgPyAo eyB2b2lkICpfX3MgPSAocyk7IF9fYnplcm8gKF9fcywgbik7IF9fczsgfSkgOiBtZW1zZXQgKHMs IGMsIG4pKSkpCiMgMTA4ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKI2RlZmluZSBf X21lbXNldF8xKHMsYykgKHsgdm9pZCAqX19zID0gKHMpOyAqKChfX3VpbnQ4X3QgKikgX19zKSA9 IChfX3VpbnQ4X3QpIGM7IF9fczsgfSkKCgojZGVmaW5lIF9fbWVtc2V0X2djKHMsYyxuKSAoeyB2 b2lkICpfX3MgPSAocyk7IHVuaW9uIHsgdW5zaWduZWQgaW50IF9fdWk7IHVuc2lnbmVkIHNob3J0 IGludCBfX3VzaTsgdW5zaWduZWQgY2hhciBfX3VjOyB9ICpfX3UgPSBfX3M7IF9fdWludDhfdCBf X2MgPSAoX191aW50OF90KSAoYyk7IHN3aXRjaCAoKHVuc2lnbmVkIGludCkgKG4pKSB7IGNhc2Ug MTU6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZv aWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgMTE6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEw MTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNh c2UgNzogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAo dm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSAzOiBfX3UtPl9fdXNpID0gKHVuc2lnbmVk IHNob3J0IGludCkgX19jICogMHgwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChj aGFyICopIF9fdSArIDIpOyBfX3UtPl9fdWMgPSAodW5zaWduZWQgY2hhcikgX19jOyBicmVhazsg Y2FzZSAxNDogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25f XyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSAxMDogX191LT5fX3VpID0gX19jICog MHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0 KTsgY2FzZSA2OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lv bl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDI6IF9fdS0+X191c2kgPSAodW5z aWduZWQgc2hvcnQgaW50KSBfX2MgKiAweDAxMDE7IGJyZWFrOyBjYXNlIDEzOiBfX3UtPl9fdWkg PSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICop IF9fdSArIDQpOyBjYXNlIDk6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9f ZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgNTogX191LT5fX3Vp ID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAq KSBfX3UgKyA0KTsgY2FzZSAxOiBfX3UtPl9fdWMgPSAodW5zaWduZWQgY2hhcikgX19jOyBicmVh azsgY2FzZSAxNjogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNp b25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSAxMjogX191LT5fX3VpID0gX19j ICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3Ug KyA0KTsgY2FzZSA4OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVu c2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDQ6IF9fdS0+X191aSA9IF9f YyAqIDB4MDEwMTAxMDE7IGNhc2UgMDogYnJlYWs7IH0gX19zOyB9KQojIDE5MCAiL3Vzci9pbmNs dWRlL2JpdHMvc3RyaW5nMi5oIiAzCiNkZWZpbmUgX19iemVybyhzLG4pIF9fYnVpbHRpbl9tZW1z ZXQgKHMsICdcMCcsIG4pCiMgMzg3ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0 ZXJuIHZvaWQgKl9fcmF3bWVtY2hyIChjb25zdCB2b2lkICpfX3MsIGludCBfX2MpOwojZGVmaW5l IHN0cmNocihzLGMpIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYykgJiYg KGMpID09ICdcMCcgPyAoY2hhciAqKSBfX3Jhd21lbWNociAocywgYykgOiBzdHJjaHIgKHMsIGMp KSkKIyA3NTQgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwojZGVmaW5lIHN0cm5jcHko ZGVzdCxzcmMsbikgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChzcmMpICYm IF9fYnVpbHRpbl9jb25zdGFudF9wIChuKSA/IChzdHJsZW4gKHNyYykgKyAxID49ICgoc2l6ZV90 KSAobikpID8gKGNoYXIgKikgbWVtY3B5IChkZXN0LCBzcmMsIG4pIDogc3RybmNweSAoZGVzdCwg c3JjLCBuKSkgOiBzdHJuY3B5IChkZXN0LCBzcmMsIG4pKSkKIyA3NzYgIi91c3IvaW5jbHVkZS9i aXRzL3N0cmluZzIuaCIgMwojZGVmaW5lIHN0cm5jYXQoZGVzdCxzcmMsbikgKF9fZXh0ZW5zaW9u X18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChzcmMpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wIChu KSA/IChzdHJsZW4gKHNyYykgPCAoKHNpemVfdCkgKG4pKSA/IHN0cmNhdCAoZGVzdCwgc3JjKSA6 IHN0cm5jYXQgKGRlc3QsIHNyYywgbikpIDogc3RybmNhdCAoZGVzdCwgc3JjLCBuKSkpCiMgNzg4 ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKI2RlZmluZSBzdHJjbXAoczEsczIpIF9f ZXh0ZW5zaW9uX18gKHsgc2l6ZV90IF9fczFfbGVuLCBfX3MyX2xlbjsgKF9fYnVpbHRpbl9jb25z dGFudF9wIChzMSkgJiYgX19idWlsdGluX2NvbnN0YW50X3AgKHMyKSAmJiAoX19zMV9sZW4gPSBz dHJsZW4gKHMxKSwgX19zMl9sZW4gPSBzdHJsZW4gKHMyKSwgKCFfX3N0cmluZzJfMWJwdHJfcCAo czEpIHx8IF9fczFfbGVuID49IDQpICYmICghX19zdHJpbmcyXzFicHRyX3AgKHMyKSB8fCBfX3My X2xlbiA+PSA0KSkgPyBtZW1jbXAgKChfX2NvbnN0IGNoYXIgKikgKHMxKSwgKF9fY29uc3QgY2hh ciAqKSAoczIpLCAoX19zMV9sZW4gPCBfX3MyX2xlbiA/IF9fczFfbGVuIDogX19zMl9sZW4pICsg MSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKHMxKSAmJiBfX3N0cmluZzJfMWJwdHJfcCAoczEp ICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoczEpLCBfX3MxX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9j b25zdGFudF9wIChzMikgJiYgX19zdHJpbmcyXzFicHRyX3AgKHMyKSA/IF9fc3RyY21wX2NjIChz MSwgczIsIF9fczFfbGVuKSA6IF9fc3RyY21wX2NnIChzMSwgczIsIF9fczFfbGVuKSkgOiAoX19i dWlsdGluX2NvbnN0YW50X3AgKHMyKSAmJiBfX3N0cmluZzJfMWJwdHJfcCAoczIpICYmIChfX3My X2xlbiA9IHN0cmxlbiAoczIpLCBfX3MyX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9w IChzMSkgJiYgX19zdHJpbmcyXzFicHRyX3AgKHMxKSA/IF9fc3RyY21wX2NjIChzMSwgczIsIF9f czJfbGVuKSA6IF9fc3RyY21wX2djIChzMSwgczIsIF9fczJfbGVuKSkgOiBzdHJjbXAgKHMxLCBz MikpKSk7IH0pCiMgODA5ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKI2RlZmluZSBf X3N0cmNtcF9jYyhzMSxzMixsKSAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1 bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoczEpKVsw XSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoczIpKVswXSk7 IGlmIChsID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHMxKSlbMV0gLSAoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzMikpWzFdKTsgaWYgKGwgPiAxICYmIF9fcmVz dWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoczEpKVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKHMyKSlbMl0pOyBpZiAobCA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQg PSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoczEpKVszXSAt ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHMyKSlbM10pOyB9 IH0gX19yZXN1bHQ7IH0pKQojIDgzNiAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCiNk ZWZpbmUgX19zdHJjbXBfY2coczEsczIsbDEpIChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5z aWduZWQgY2hhciAqX19zMiA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoczIpOyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAoczEpKVswXSAtIF9fczJbMF0pOyBpZiAobDEgPiAwICYm IF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoczEpKVsxXSAtIF9fczJbMV0pOyBpZiAobDEgPiAxICYmIF9fcmVz dWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoczEpKVsyXSAtIF9fczJbMl0pOyBpZiAobDEgPiAyICYmIF9fcmVzdWx0ID09 IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKHMxKSlbM10gLSBfX3MyWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkKIyA4NTggIi91c3IvaW5j bHVkZS9iaXRzL3N0cmluZzIuaCIgMwojZGVmaW5lIF9fc3RyY21wX2djKHMxLHMyLGwyKSAoX19l eHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczEgPSAoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHMxKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0 ID0gX19zMVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KHMyKSlbMF07IGlmIChsMiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3Mx WzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoczIpKVsx XSk7IGlmIChsMiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzJdIC0g KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoczIpKVsyXSk7IGlm IChsMiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoX19zMVszXSAtICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHMyKSlbM10pOyB9IH0gX19yZXN1 bHQ7IH0pKQojIDg4NyAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCiNkZWZpbmUgc3Ry bmNtcChzMSxzMixuKSAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKG4pICYm ICgoX19idWlsdGluX2NvbnN0YW50X3AgKHMxKSAmJiBzdHJsZW4gKHMxKSA8ICgoc2l6ZV90KSAo bikpKSB8fCAoX19idWlsdGluX2NvbnN0YW50X3AgKHMyKSAmJiBzdHJsZW4gKHMyKSA8ICgoc2l6 ZV90KSAobikpKSkgPyBzdHJjbXAgKHMxLCBzMikgOiBzdHJuY21wIChzMSwgczIsIG4pKSkKIyA5 MDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwojZGVmaW5lIHN0cmNzcG4ocyxyZWpl Y3QpIF9fZXh0ZW5zaW9uX18gKHsgY2hhciBfX3IwLCBfX3IxLCBfX3IyOyAoX19idWlsdGluX2Nv bnN0YW50X3AgKHJlamVjdCkgJiYgX19zdHJpbmcyXzFicHRyX3AgKHJlamVjdCkgPyAoKF9fcjAg PSAoKF9fY29uc3QgY2hhciAqKSAocmVqZWN0KSlbMF0sIF9fcjAgPT0gJ1wwJykgPyBzdHJsZW4g KHMpIDogKChfX3IxID0gKChfX2NvbnN0IGNoYXIgKikgKHJlamVjdCkpWzFdLCBfX3IxID09ICdc MCcpID8gX19zdHJjc3BuX2MxIChzLCBfX3IwKSA6ICgoX19yMiA9ICgoX19jb25zdCBjaGFyICop IChyZWplY3QpKVsyXSwgX19yMiA9PSAnXDAnKSA/IF9fc3RyY3Nwbl9jMiAocywgX19yMCwgX19y MSkgOiAoKChfX2NvbnN0IGNoYXIgKikgKHJlamVjdCkpWzNdID09ICdcMCcgPyBfX3N0cmNzcG5f YzMgKHMsIF9fcjAsIF9fcjEsIF9fcjIpIDogc3RyY3NwbiAocywgcmVqZWN0KSkpKSkgOiBzdHJj c3BuIChzLCByZWplY3QpKTsgfSkKIyA5MTcgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIg MwpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3RyY3Nwbl9jMSAoX19jb25zdCBjaGFyICpfX3Ms IGludCBfX3JlamVjdCk7CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJjc3BuX2MxIChfX2Nv bnN0IGNoYXIgKl9fcywgaW50IF9fcmVqZWN0KQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0 ID0gMDsKICB3aGlsZSAoX19zW19fcmVzdWx0XSAhPSAnXDAnICYmIF9fc1tfX3Jlc3VsdF0gIT0g X19yZWplY3QpCiAgICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9f aW5saW5lIHNpemVfdCBfX3N0cmNzcG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19yZWpl Y3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcmVqZWN0Mik7 CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJjc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywg aW50IF9fcmVqZWN0MSwgaW50IF9fcmVqZWN0MikKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3Vs dCA9IDA7CiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gIT0gJ1wwJyAmJiBfX3NbX19yZXN1bHRdICE9 IF9fcmVqZWN0MQogICAgICAgICAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MikKICAgICsr X19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9f c3RyY3Nwbl9jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX3JlamVjdDEsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19yZWplY3QyLCBpbnQgX19yZWplY3QzKTsK ZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cmNzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBp bnQgX19yZWplY3QxLCBpbnQgX19yZWplY3QyLAogICAgICAgICAgICAgIGludCBfX3JlamVjdDMp CnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwogIHdoaWxlIChfX3NbX19yZXN1bHRd ICE9ICdcMCcgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDEKICAgICAgICAgJiYgX19zW19f cmVzdWx0XSAhPSBfX3JlamVjdDIgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDMpCiAgICAr K19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKCgoKCgoKI2RlZmluZSBzdHJzcG4ocyxh Y2NlcHQpIF9fZXh0ZW5zaW9uX18gKHsgY2hhciBfX2EwLCBfX2ExLCBfX2EyOyAoX19idWlsdGlu X2NvbnN0YW50X3AgKGFjY2VwdCkgJiYgX19zdHJpbmcyXzFicHRyX3AgKGFjY2VwdCkgPyAoKF9f YTAgPSAoKF9fY29uc3QgY2hhciAqKSAoYWNjZXB0KSlbMF0sIF9fYTAgPT0gJ1wwJykgPyAoKHZv aWQpIChzKSwgMCkgOiAoKF9fYTEgPSAoKF9fY29uc3QgY2hhciAqKSAoYWNjZXB0KSlbMV0sIF9f YTEgPT0gJ1wwJykgPyBfX3N0cnNwbl9jMSAocywgX19hMCkgOiAoKF9fYTIgPSAoKF9fY29uc3Qg Y2hhciAqKSAoYWNjZXB0KSlbMl0sIF9fYTIgPT0gJ1wwJykgPyBfX3N0cnNwbl9jMiAocywgX19h MCwgX19hMSkgOiAoKChfX2NvbnN0IGNoYXIgKikgKGFjY2VwdCkpWzNdID09ICdcMCcgPyBfX3N0 cnNwbl9jMyAocywgX19hMCwgX19hMSwgX19hMikgOiBzdHJzcG4gKHMsIGFjY2VwdCkpKSkpIDog c3Ryc3BuIChzLCBhY2NlcHQpKTsgfSkKIyA5NzQgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIu aCIgMwpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3Ryc3BuX2MxIChfX2NvbnN0IGNoYXIgKl9f cywgaW50IF9fYWNjZXB0KTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cnNwbl9jMSAoX19j b25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdCkKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3Vs dCA9IDA7CgogIHdoaWxlIChfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0KQogICAgKytfX3Jlc3Vs dDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJzcG5f YzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQxLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgX19hY2NlcHQyKTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApf X3N0cnNwbl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2FjY2Vw dDIpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwoKICB3aGlsZSAoX19zW19fcmVz dWx0XSA9PSBfX2FjY2VwdDEgfHwgX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDIpCiAgICArK19f cmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0 cnNwbl9jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2FjY2VwdDIsIGludCBfX2FjY2VwdDMpOwpleHRl cm4gX19pbmxpbmUgc2l6ZV90Cl9fc3Ryc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f YWNjZXB0MSwgaW50IF9fYWNjZXB0MiwgaW50IF9fYWNjZXB0MykKewogIHJlZ2lzdGVyIHNpemVf dCBfX3Jlc3VsdCA9IDA7CgogIHdoaWxlIChfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MSB8fCBf X3NbX19yZXN1bHRdID09IF9fYWNjZXB0MgogICAgICAgICB8fCBfX3NbX19yZXN1bHRdID09IF9f YWNjZXB0MykKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCgoKCiNkZWZp bmUgc3RycGJyayhzLGFjY2VwdCkgX19leHRlbnNpb25fXyAoeyBjaGFyIF9fYTAsIF9fYTEsIF9f YTI7IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYWNjZXB0KSAmJiBfX3N0cmluZzJfMWJwdHJfcCAo YWNjZXB0KSA/ICgoX19hMCA9ICgoX19jb25zdCBjaGFyICopIChhY2NlcHQpKVswXSwgX19hMCA9 PSAnXDAnKSA/ICgodm9pZCkgKHMpLCBOVUxMKSA6ICgoX19hMSA9ICgoX19jb25zdCBjaGFyICop IChhY2NlcHQpKVsxXSwgX19hMSA9PSAnXDAnKSA/IHN0cmNociAocywgX19hMCkgOiAoKF9fYTIg PSAoKF9fY29uc3QgY2hhciAqKSAoYWNjZXB0KSlbMl0sIF9fYTIgPT0gJ1wwJykgPyBfX3N0cnBi cmtfYzIgKHMsIF9fYTAsIF9fYTEpIDogKCgoX19jb25zdCBjaGFyICopIChhY2NlcHQpKVszXSA9 PSAnXDAnID8gX19zdHJwYnJrX2MzIChzLCBfX2EwLCBfX2ExLCBfX2EyKSA6IHN0cnBicmsgKHMs IGFjY2VwdCkpKSkpIDogc3RycGJyayAocywgYWNjZXB0KSk7IH0pCiMgMTAzMSAiL3Vzci9pbmNs dWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnBicmtfYzIg KF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQxLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IF9fYWNjZXB0Mik7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19z dHJwYnJrX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwgaW50IF9fYWNjZXB0 MikKewoKICB3aGlsZSAoKl9fcyAhPSAnXDAnICYmICpfX3MgIT0gX19hY2NlcHQxICYmICpfX3Mg IT0gX19hY2NlcHQyKQogICAgKytfX3M7CiAgcmV0dXJuICpfX3MgPT0gJ1wwJyA/ICgodm9pZCAq KTApIDogKGNoYXIgKikgKHNpemVfdCkgX19zOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19z dHJwYnJrX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2FjY2VwdDIsIGludCBfX2FjY2VwdDMpOwpl eHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RycGJya19jMyAoX19jb25zdCBjaGFyICpfX3MsIGlu dCBfX2FjY2VwdDEsIGludCBfX2FjY2VwdDIsCiAgICAgICAgICAgICAgaW50IF9fYWNjZXB0MykK ewoKICB3aGlsZSAoKl9fcyAhPSAnXDAnICYmICpfX3MgIT0gX19hY2NlcHQxICYmICpfX3MgIT0g X19hY2NlcHQyCiAgICAgICAgICYmICpfX3MgIT0gX19hY2NlcHQzKQogICAgKytfX3M7CiAgcmV0 dXJuICpfX3MgPT0gJ1wwJyA/ICgodm9pZCAqKTApIDogKGNoYXIgKikgKHNpemVfdCkgX19zOwp9 CiMgMTA3NCAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCiNkZWZpbmUgX19zdHJ0b2tf cihzLHNlcCxuZXh0cCkgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChzZXAp ICYmIF9fc3RyaW5nMl8xYnB0cl9wIChzZXApID8gKCgoX19jb25zdCBjaGFyICopIChzZXApKVsw XSAhPSAnXDAnICYmICgoX19jb25zdCBjaGFyICopIChzZXApKVsxXSA9PSAnXDAnID8gX19zdHJ0 b2tfcl8xYyAocywgKChfX2NvbnN0IGNoYXIgKikgKHNlcCkpWzBdLCBuZXh0cCkgOiBfX3N0cnRv a19yIChzLCBzZXAsIG5leHRwKSkgOiBfX3N0cnRva19yIChzLCBzZXAsIG5leHRwKSkpCiMgMTA4 MyAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSBjaGFyICpf X3N0cnRva19yXzFjIChjaGFyICpfX3MsIGNoYXIgX19zZXAsIGNoYXIgKipfX25leHRwKTsKZXh0 ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnRva19yXzFjIChjaGFyICpfX3MsIGNoYXIgX19zZXAs IGNoYXIgKipfX25leHRwKQp7CiAgY2hhciAqX19yZXN1bHQ7CiAgaWYgKF9fcyA9PSAoKHZvaWQg KikwKSkKICAgIF9fcyA9ICpfX25leHRwOwogIHdoaWxlICgqX19zID09IF9fc2VwKQogICAgKytf X3M7CiAgX19yZXN1bHQgPSAoKHZvaWQgKikwKTsKICBpZiAoKl9fcyAhPSAnXDAnKQogICAgewog ICAgICBfX3Jlc3VsdCA9IF9fcysrOwogICAgICB3aGlsZSAoKl9fcyAhPSAnXDAnKQogICAgICAg IGlmICgqX19zKysgPT0gX19zZXApCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fc1stMV0gPSAn XDAnOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgKl9fbmV4dHAgPSBfX3M7 CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgojZGVmaW5lIHN0cnRva19yKHMsc2VwLG5leHRw KSBfX3N0cnRva19yIChzLCBzZXAsIG5leHRwKQoKCgoKCgoKZXh0ZXJuIGNoYXIgKl9fc3Ryc2Vw X2cgKGNoYXIgKipfX3N0cmluZ3AsIF9fY29uc3QgY2hhciAqX19kZWxpbSk7CiNkZWZpbmUgX19z dHJzZXAocyxyZWplY3QpIF9fZXh0ZW5zaW9uX18gKHsgY2hhciBfX3IwLCBfX3IxLCBfX3IyOyAo X19idWlsdGluX2NvbnN0YW50X3AgKHJlamVjdCkgJiYgX19zdHJpbmcyXzFicHRyX3AgKHJlamVj dCkgJiYgKF9fcjAgPSAoKF9fY29uc3QgY2hhciAqKSAocmVqZWN0KSlbMF0sICgoX19jb25zdCBj aGFyICopIChyZWplY3QpKVswXSAhPSAnXDAnKSA/ICgoX19yMSA9ICgoX19jb25zdCBjaGFyICop IChyZWplY3QpKVsxXSwgKChfX2NvbnN0IGNoYXIgKikgKHJlamVjdCkpWzFdID09ICdcMCcpID8g X19zdHJzZXBfMWMgKHMsIF9fcjApIDogKChfX3IyID0gKChfX2NvbnN0IGNoYXIgKikgKHJlamVj dCkpWzJdLCBfX3IyID09ICdcMCcpID8gX19zdHJzZXBfMmMgKHMsIF9fcjAsIF9fcjEpIDogKCgo X19jb25zdCBjaGFyICopIChyZWplY3QpKVszXSA9PSAnXDAnID8gX19zdHJzZXBfM2MgKHMsIF9f cjAsIF9fcjEsIF9fcjIpIDogX19zdHJzZXBfZyAocywgcmVqZWN0KSkpKSA6IF9fc3Ryc2VwX2cg KHMsIHJlamVjdCkpOyB9KQojIDExMzMgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpl eHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBfMWMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWpl Y3QpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3Ryc2VwXzFjIChjaGFyICoqX19zLCBjaGFy IF9fcmVqZWN0KQp7CiAgcmVnaXN0ZXIgY2hhciAqX19yZXR2YWwgPSAqX19zOwogIGlmIChfX3Jl dHZhbCAhPSAoKHZvaWQgKikwKSAmJiAoKl9fcyA9IChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5f Y29uc3RhbnRfcCAoX19yZWplY3QpICYmIChfX3JlamVjdCkgPT0gJ1wwJyA/IChjaGFyICopIF9f cmF3bWVtY2hyIChfX3JldHZhbCwgX19yZWplY3QpIDogc3RyY2hyIChfX3JldHZhbCwgX19yZWpl Y3QpKSkpICE9ICgodm9pZCAqKTApKQogICAgKigqX19zKSsrID0gJ1wwJzsKICByZXR1cm4gX19y ZXR2YWw7Cn0KCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnNlcF8yYyAoY2hhciAqKl9fcywg Y2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyKTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpf X3N0cnNlcF8yYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyKQp7 CiAgcmVnaXN0ZXIgY2hhciAqX19yZXR2YWwgPSAqX19zOwogIGlmIChfX3JldHZhbCAhPSAoKHZv aWQgKikwKSkKICAgIHsKICAgICAgcmVnaXN0ZXIgY2hhciAqX19jcCA9IF9fcmV0dmFsOwogICAg ICB3aGlsZSAoMSkKICAgICAgICB7CiAgICAgICAgICBpZiAoKl9fY3AgPT0gJ1wwJykKICAgICAg ICAgICAgewogICAgICAgICAgICAgIF9fY3AgPSAoKHZvaWQgKikwKTsKICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoKl9fY3AgPT0gX19yZWplY3QxIHx8ICpfX2Nw ID09IF9fcmVqZWN0MikKICAgICAgICAgICAgewogICAgICAgICAgICAgICpfX2NwKysgPSAnXDAn OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICArK19fY3A7CiAg ICAgICAgfQogICAgICAqX19zID0gX19jcDsKICAgIH0KICByZXR1cm4gX19yZXR2YWw7Cn0KCmV4 dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnNlcF8zYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVj dDEsIGNoYXIgX19yZWplY3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgX19yZWplY3QzKTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnNlcF8zYyAoY2hhciAq Kl9fcywgY2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyLCBjaGFyIF9fcmVqZWN0MykKewog IHJlZ2lzdGVyIGNoYXIgKl9fcmV0dmFsID0gKl9fczsKICBpZiAoX19yZXR2YWwgIT0gKCh2b2lk ICopMCkpCiAgICB7CiAgICAgIHJlZ2lzdGVyIGNoYXIgKl9fY3AgPSBfX3JldHZhbDsKICAgICAg d2hpbGUgKDEpCiAgICAgICAgewogICAgICAgICAgaWYgKCpfX2NwID09ICdcMCcpCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBfX2NwID0gKCh2b2lkICopMCk7CiAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCpfX2NwID09IF9fcmVqZWN0MSB8fCAqX19jcCA9 PSBfX3JlamVjdDIgfHwgKl9fY3AgPT0gX19yZWplY3QzKQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgKl9fY3ArKyA9ICdcMCc7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0K ICAgICAgICAgICsrX19jcDsKICAgICAgICB9CiAgICAgICpfX3MgPSBfX2NwOwogICAgfQogIHJl dHVybiBfX3JldHZhbDsKfQoKI2RlZmluZSBzdHJzZXAocyxyZWplY3QpIF9fc3Ryc2VwIChzLCBy ZWplY3QpCiMgMTIwOCAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCiNkZWZpbmUgX19u ZWVkX21hbGxvY19hbmRfY2FsbG9jIAojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzCiMg MjggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojZGVmaW5lIF9fbmVlZF9zaXplX3QgCgoKCgoj IDEgIi91c3IvbG9jYWwvc25hcC9nY2MtMjAwMjA4MTkvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4yLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjIxICIvdXNyL2xvY2FsL3NuYXAv Z2NjLTIwMDIwODE5L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4xL2luY2x1ZGUv c3RkZGVmLmgiIDMKI3VuZGVmIF9fbmVlZF9zaXplX3QKIyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGxp Yi5oIiAyIDMKCgojIDUyNSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiNkZWZpbmUgX19tYWxs b2NfYW5kX2NhbGxvY19kZWZpbmVkIAoKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9fc2l6 ZSkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkICpjYWxsb2MgKHNp emVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxv Y19fKSk7CiMgODYyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKI3VuZGVmIF9fbmVlZF9tYWxs b2NfYW5kX2NhbGxvYwoKCiMgMTIxMCAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAyIDMK CgoKCmV4dGVybiBjaGFyICpfX3N0cmR1cCAoX19jb25zdCBjaGFyICpfX3N0cmluZykgX19hdHRy aWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKI2RlZmluZSBfX3N0cmR1cChzKSAoX19leHRlbnNpb25f XyAoX19idWlsdGluX2NvbnN0YW50X3AgKHMpICYmIF9fc3RyaW5nMl8xYnB0cl9wIChzKSA/ICgo KF9fY29uc3QgY2hhciAqKSAocykpWzBdID09ICdcMCcgPyAoY2hhciAqKSBjYWxsb2MgKDEsIDEp IDogKHsgc2l6ZV90IF9fbGVuID0gc3RybGVuIChzKSArIDE7IGNoYXIgKl9fcmV0dmFsID0gKGNo YXIgKikgbWFsbG9jIChfX2xlbik7IGlmIChfX3JldHZhbCAhPSBOVUxMKSBfX3JldHZhbCA9IChj aGFyICopIG1lbWNweSAoX19yZXR2YWwsIHMsIF9fbGVuKTsgX19yZXR2YWw7IH0pKSA6IF9fc3Ry ZHVwIChzKSkpCiMgMTIyNyAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCiNkZWZpbmUg c3RyZHVwKHMpIF9fc3RyZHVwIChzKQoKCgoKCmV4dGVybiBjaGFyICpfX3N0cm5kdXAgKF9fY29u c3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFs bG9jX18pKTsKI2RlZmluZSBfX3N0cm5kdXAocyxuKSAoX19leHRlbnNpb25fXyAoX19idWlsdGlu X2NvbnN0YW50X3AgKHMpICYmIF9fc3RyaW5nMl8xYnB0cl9wIChzKSA/ICgoKF9fY29uc3QgY2hh ciAqKSAocykpWzBdID09ICdcMCcgPyAoY2hhciAqKSBjYWxsb2MgKDEsIDEpIDogKHsgc2l6ZV90 IF9fbGVuID0gc3RybGVuIChzKSArIDE7IHNpemVfdCBfX24gPSAobik7IGNoYXIgKl9fcmV0dmFs OyBpZiAoX19uIDwgX19sZW4pIF9fbGVuID0gX19uICsgMTsgX19yZXR2YWwgPSAoY2hhciAqKSBt YWxsb2MgKF9fbGVuKTsgaWYgKF9fcmV0dmFsICE9IE5VTEwpIHsgX19yZXR2YWxbX19sZW4gLSAx XSA9ICdcMCc7IF9fcmV0dmFsID0gKGNoYXIgKikgbWVtY3B5IChfX3JldHZhbCwgcywgX19sZW4g LSAxKTsgfSBfX3JldHZhbDsgfSkpIDogX19zdHJuZHVwIChzLCBuKSkpCiMgMTI2MiAiL3Vzci9p bmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCiN1bmRlZiBfX1NUUklOR19JTkxJTkUKIyAzNjEgIi91 c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCgojIDIxICIuLi8uLi9zcmMvc2RibS52MC9zZGJt ZmxkdS5jIiAyCgojIDEgImF4aXMvYXhpc3R5cGVzLmgiIDEKIyAyNyAiYXhpcy9heGlzdHlwZXMu aCIKI2RlZmluZSBfQVhJU19BWElTVFlQRVNfSF8gCiMgMSAiYXhpcy9jb25maWcuaCIgMQoKCgoK CiNkZWZpbmUgX19BWElTX0NPTkZJR19IXyAKIyAyOCAiYXhpcy9jb25maWcuaCIKI2RlZmluZSBf X1ZFUlMoeCx5LHopICgoKHgpKjEwMDAwMDApKygoeSkqMTAwMCkrKHopKQoKI2RlZmluZSBfX01B Sk9SX1ZFUlModikgKCh2KS8xMDAwMDAwKQojZGVmaW5lIF9fTUlOT1JfVkVSUyh2KSAoKCh2KS8x MDAwKSUxMDAwKQojZGVmaW5lIF9fTUlDUk9fVkVSUyh2KSAoKHYpJTEwMDApCgoKCgoKCiNkZWZp bmUgX19BWElTX09TX0xJTlVYIDEKI2RlZmluZSBfX0FYSVNfT1NfU09MQVJJUyAyCiNkZWZpbmUg X19BWElTX09TX0hQVVggMwojIDU3ICJheGlzL2NvbmZpZy5oIgojZGVmaW5lIF9fQVhJU19BUkNI X3g4NiAxCiNkZWZpbmUgX19BWElTX0FSQ0hfU1BBUkMgMgojZGVmaW5lIF9fQVhJU19BUkNIX1BB UklTQyAzCgojZGVmaW5lIF9fQVJDSF9UWVBFKHYpICgodikvMTAwMDAwMCkKI2RlZmluZSBfX0FS Q0hfTUFKT1IodikgKCgodikvMTAwMCklMTAwMCkKI2RlZmluZSBfX0FSQ0hfTUlOT1IodikgKCh2 KSUxMDAwKQoKI2RlZmluZSBfX0FYSVNfQVJDSF9JMzg2IF9fVkVSUyhfX0FYSVNfQVJDSF94ODYs MywwKQojZGVmaW5lIF9fQVhJU19BUkNIX0k1ODYgX19WRVJTKF9fQVhJU19BUkNIX3g4Niw1LDAp CiNkZWZpbmUgX19BWElTX0FSQ0hfSTY4NiBfX1ZFUlMoX19BWElTX0FSQ0hfeDg2LDYsMCkKI2Rl ZmluZSBfX0FYSVNfQVJDSF9JNzg2IF9fVkVSUyhfX0FYSVNfQVJDSF94ODYsNiwwKQojZGVmaW5l IF9fQVhJU19BUkNIX1BFTlRJVU0gX19WRVJTKF9fQVhJU19BUkNIX3g4Niw1LDApCiNkZWZpbmUg X19BWElTX0FSQ0hfUEVOVElVTVBSTyBfX1ZFUlMoX19BWElTX0FSQ0hfeDg2LDYsMCkKI2RlZmlu ZSBfX0FYSVNfQVJDSF9BVEhMT04gX19WRVJTKF9fQVhJU19BUkNIX3g4Niw3LDApCgojZGVmaW5l IF9fQVhJU19BUkNIX1NQQVJDX1Y4IF9fVkVSUyhfX0FYSVNfQVJDSF9TUEFSQyw4LDApCiNkZWZp bmUgX19BWElTX0FSQ0hfU1BBUkNfVjkgX19WRVJTKF9fQVhJU19BUkNIX1NQQVJDLDksMCkKCiNk ZWZpbmUgX19BWElTX0FSQ0hfSFBQQV8xXzEgX19WRVJTKF9fQVhJU19BUkNIX1BBUklTQywxLDEp CiNkZWZpbmUgX19BWElTX0FSQ0hfSFBQQV8yIF9fVkVSUyhfX0FYSVNfQVJDSF9QQVJJU0MsMiww KQojIDk0ICJheGlzL2NvbmZpZy5oIgojZGVmaW5lIF9fQVhJU19DT05GSUdfR0NDX1ZFUlMgX19W RVJTKDMsMCwwKQojZGVmaW5lIF9fQVhJU19DT05GSUdfR0NDX1ZFUlNfTUFKT1IgMwojZGVmaW5l IF9fQVhJU19DT05GSUdfR0NDX1ZFUlNfTUlOT1IgMAojZGVmaW5lIF9fQVhJU19DT05GSUdfR0ND X1ZFUlNfTUlDUk8gMAoKI2RlZmluZSBfX0FYSVNfQ09ORklHX09TX1ZFUlMgX19WRVJTKDIsMiww KQojZGVmaW5lIF9fQVhJU19DT05GSUdfT1NfVkVSU19NQUpPUiAyCiNkZWZpbmUgX19BWElTX0NP TkZJR19PU19WRVJTX01JTk9SIDIKI2RlZmluZSBfX0FYSVNfQ09ORklHX09TX1ZFUlNfTUlDUk8g MAoKI2RlZmluZSBfX1dJVEhfQVhJU19Db21tb24gMQojZGVmaW5lIF9fV0lUSF9BWElTX1V0aWwg MQojZGVmaW5lIF9fV0lUSF9BWElTX0F0aW1lIDEKI2RlZmluZSBfX1dJVEhfQVhJU19SYzUgMQoj ZGVmaW5lIF9fV0lUSF9BWElTX0NwcGNvbSAxCiNkZWZpbmUgX19XSVRIX0FYSVNfQWRhbVYwIDEK I2RlZmluZSBfX1dJVEhfQVhJU19TZGJtVjAgMQojZGVmaW5lIF9fV0lUSF9BWElTX0h0aWYgMQoj ZGVmaW5lIF9fV0lUSF9BWElTX05ldCAxCiNkZWZpbmUgX19XSVRIX0FYSVNfUFNNX3Nvd2hhdCAx CiNkZWZpbmUgX19XSVRIX0FYSVNfRXhwU293aGF0XzEgMQojZGVmaW5lIF9fV0lUSF9BWElTX1Ro ck5ldFRlc3QgMQojZGVmaW5lIF9fV0lUSF9BWElTX1ZsYSAxCiNkZWZpbmUgX19XSVRIX0FYSVNf U3lzVXRsIDEKI2RlZmluZSBfX1dJVEhfQVhJU19NZDUgMQojZGVmaW5lIF9fV0lUSF9BWElTX010 YWIgMQojZGVmaW5lIF9fV0lUSF9BWElTX0FuYWxOdGZzIDEKI2RlZmluZSBfX1dJVEhfQVhJU19C bG93ZmlzaCAxCiNkZWZpbmUgX19XSVRIX0FYSVNfUGVyZlRlc3QwMSAxCiMgMTM3ICJheGlzL2Nv bmZpZy5oIgojZGVmaW5lIF9MSU5VWCBfX0FYSVNfQ09ORklHX09TX1ZFUlMKI2RlZmluZSBfX0FY SVNfQ09ORklHX09TIF9fQVhJU19PU19MSU5VWAoKCgojZGVmaW5lIF9SRUVOVFJBTlQgMQoKCgoK I2RlZmluZSBfR05VX1NPVVJDRSAxCiMgMTYyICJheGlzL2NvbmZpZy5oIgojZGVmaW5lIF9fQVhJ U19DT05GSUdfQVJDSCBfX0FYSVNfQVJDSF9QRU5USVVNCgoKI3VuZGVmIF9faTM4NgoKCgoKI2Rl ZmluZSBfX2kzODYgX19BWElTX0NPTkZJR19BUkNICiNkZWZpbmUgSTM4NiBfX0FYSVNfQ09ORklH X0FSQ0gKCgoKCgojZGVmaW5lIGNBeGlzV29yZExlbiAzMgojZGVmaW5lIGNBeGlzUmVnaXN0ZXJM ZW4gMzIKI2RlZmluZSBjQXhpc1B0ckxlbiAzMgojZGVmaW5lIGNBeGlzTFNCaXRObyAwCiNkZWZp bmUgY0F4aXNNU0JpdE5vIDMxCiNkZWZpbmUgY0F4aXNMU0JpdFZhbHVlICgweDAwMDAwMDAxVUwp CiNkZWZpbmUgY0F4aXNNU0JpdFZhbHVlICgweDgwMDAwMDAwVUwpCiNkZWZpbmUgY0F4aXNGaXJz dEJpdE5vIGNBeGlzTFNCaXRObwojZGVmaW5lIGNBeGlzTGFzdEJpdE5vIGNBeGlzTVNCaXRObwoj ZGVmaW5lIGNBeGlzU2hvcnRCb3VuZGFyeSAweDEKI2RlZmluZSBjQXhpc0ludEJvdW5kYXJ5IDB4 MwojZGVmaW5lIGNBeGlzTG9uZ0JvdW5kYXJ5IDB4MwojZGVmaW5lIGNBeGlzTG9uZ0xvbmdCb3Vu ZGFyeSAweDMKI2RlZmluZSBBeGlzRGVjbGFyZVN0YWNrUHRyIGFzbSgiJWVzcCIpCiNkZWZpbmUg QXhpc0RlY2xhcmVGcmFtZVB0ciBhc20oIiVlYnAiKQoKCgoKI2RlZmluZSBBWElTX1NUQUNLX0RJ UkVDVElPTiAoLTEpCiNkZWZpbmUgQVhJU19WQVJBUkdfRElSRUNUSU9OICgrMSkKCgoKCgojIDEg ImF4aXMvY29uZmlnX2xvY2FsLmgiIDEKIyA5ICJheGlzL2NvbmZpZ19sb2NhbC5oIgojZGVmaW5l IF9MQVJHRUZJTEVfU09VUkNFIDEKI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIDEKCgoKCiNk ZWZpbmUgQVhJU19SVU5USU1FX0RFQlVHIDEKIyAyMDQgImF4aXMvY29uZmlnLmgiIDIKIyAyOSAi YXhpcy9heGlzdHlwZXMuaCIgMgoKCiNkZWZpbmUgSW5saW5lIGV4dGVybiBpbmxpbmUKIyA3NiAi YXhpcy9heGlzdHlwZXMuaCIKI2RlZmluZSBfX0JFR0lOX0RFQ0xTIAojZGVmaW5lIF9fRU5EX0RF Q0xTIAojIDEyOSAiYXhpcy9heGlzdHlwZXMuaCIKI2RlZmluZSBfX0JFR0lOX0NQUERFQ0xTIAoj ZGVmaW5lIF9fRU5EX0NQUERFQ0xTIAoKI2RlZmluZSBfX0JFR0lOX05TX0FYSVMgCiNkZWZpbmUg X19FTkRfTlNfQVhJUyAKCgoKCgojZGVmaW5lIGNBeGlzTFNCOGJJbjE2YiAwCiNkZWZpbmUgY0F4 aXMxc3Q4YkluMTZiIDAKI2RlZmluZSBjQXhpczJuZDhiSW4xNmIgMQojZGVmaW5lIGNBeGlzTVNC OGJJbjE2YiAxCgojZGVmaW5lIGNBeGlzTFNCMTZiSW4zMmIgMAojZGVmaW5lIGNBeGlzMXN0MTZi SW4zMmIgMAojZGVmaW5lIGNBeGlzMm5kMTZiSW4zMmIgMQojZGVmaW5lIGNBeGlzTVNCMTZiSW4z MmIgMQoKI2RlZmluZSBjQXhpc0xTQjhiSW4zMmIgMAojZGVmaW5lIGNBeGlzMXN0OGJJbjMyYiAw CiNkZWZpbmUgY0F4aXMybmQ4YkluMzJiIDEKI2RlZmluZSBjQXhpczNyZDhiSW4zMmIgMgojZGVm aW5lIGNBeGlzNHRoOGJJbjMyYiAzCiNkZWZpbmUgY0F4aXNNU0I4YkluMzJiIDMKCiNkZWZpbmUg Y0F4aXNMU0IzMmJJbjY0YiAwCiNkZWZpbmUgY0F4aXMxc3QzMmJJbjY0YiAwCiNkZWZpbmUgY0F4 aXMybmQzMmJJbjY0YiAxCiNkZWZpbmUgY0F4aXNNU0IzMmJJbjY0YiAxCgojZGVmaW5lIGNBeGlz TFNCMTZiSW42NGIgMAojZGVmaW5lIGNBeGlzMXN0MTZiSW42NGIgMAojZGVmaW5lIGNBeGlzMm5k MTZiSW42NGIgMQojZGVmaW5lIGNBeGlzM3JkMTZiSW42NGIgMgojZGVmaW5lIGNBeGlzNHRoMTZi SW42NGIgMwojZGVmaW5lIGNBeGlzTVNCMTZiSW42NGIgMwoKI2RlZmluZSBjQXhpc0xTQjhiSW42 NGIgMAojZGVmaW5lIGNBeGlzMXN0OGJJbjY0YiAwCiNkZWZpbmUgY0F4aXMybmQ4YkluNjRiIDEK I2RlZmluZSBjQXhpczNyZDhiSW42NGIgMgojZGVmaW5lIGNBeGlzNHRoOGJJbjY0YiAzCiNkZWZp bmUgY0F4aXM1dGg4YkluNjRiIDQKI2RlZmluZSBjQXhpczZ0aDhiSW42NGIgNQojZGVmaW5lIGNB eGlzN3RoOGJJbjY0YiA2CiNkZWZpbmUgY0F4aXM4dGg4YkluNjRiIDcKI2RlZmluZSBjQXhpc01T QjhiSW42NGIgNwojIDIyMCAiYXhpcy9heGlzdHlwZXMuaCIKI2RlZmluZSBjTmV0T3JkZXJMU0I4 YkluMTZiIDEKI2RlZmluZSBjTmV0T3JkZXIxc3Q4YkluMTZiIDEKI2RlZmluZSBjTmV0T3JkZXIy bmQ4YkluMTZiIDAKI2RlZmluZSBjTmV0T3JkZXJNU0I4YkluMTZiIDAKCiNkZWZpbmUgY05ldE9y ZGVyTFNCMTZiSW4zMmIgMQojZGVmaW5lIGNOZXRPcmRlcjFzdDE2YkluMzJiIDEKI2RlZmluZSBj TmV0T3JkZXIybmQxNmJJbjMyYiAwCiNkZWZpbmUgY05ldE9yZGVyTVNCMTZiSW4zMmIgMAoKI2Rl ZmluZSBjTmV0T3JkZXJMU0I4YkluMzJiIDMKI2RlZmluZSBjTmV0T3JkZXIxc3Q4YkluMzJiIDMK I2RlZmluZSBjTmV0T3JkZXIybmQ4YkluMzJiIDIKI2RlZmluZSBjTmV0T3JkZXIzcmQ4YkluMzJi IDEKI2RlZmluZSBjTmV0T3JkZXI0dGg4YkluMzJiIDAKI2RlZmluZSBjTmV0T3JkZXJNU0I4Yklu MzJiIDAKCiNkZWZpbmUgY05ldE9yZGVyTFNCMzJiSW42NGIgMQojZGVmaW5lIGNOZXRPcmRlcjFz dDMyYkluNjRiIDEKI2RlZmluZSBjTmV0T3JkZXIybmQzMmJJbjY0YiAwCiNkZWZpbmUgY05ldE9y ZGVyTVNCMzJiSW42NGIgMAoKI2RlZmluZSBjTmV0T3JkZXJMU0IxNmJJbjY0YiAzCiNkZWZpbmUg Y05ldE9yZGVyMXN0MTZiSW42NGIgMwojZGVmaW5lIGNOZXRPcmRlcjJuZDE2YkluNjRiIDIKI2Rl ZmluZSBjTmV0T3JkZXIzcmQxNmJJbjY0YiAxCiNkZWZpbmUgY05ldE9yZGVyNHRoMTZiSW42NGIg MAojZGVmaW5lIGNOZXRPcmRlck1TQjE2YkluNjRiIDAKCiNkZWZpbmUgY05ldE9yZGVyTFNCOGJJ bjY0YiA3CiNkZWZpbmUgY05ldE9yZGVyMXN0OGJJbjY0YiA3CiNkZWZpbmUgY05ldE9yZGVyMm5k OGJJbjY0YiA2CiNkZWZpbmUgY05ldE9yZGVyM3JkOGJJbjY0YiA1CiNkZWZpbmUgY05ldE9yZGVy NHRoOGJJbjY0YiA0CiNkZWZpbmUgY05ldE9yZGVyNXRoOGJJbjY0YiAzCiNkZWZpbmUgY05ldE9y ZGVyNnRoOGJJbjY0YiAyCiNkZWZpbmUgY05ldE9yZGVyN3RoOGJJbjY0YiAxCiNkZWZpbmUgY05l dE9yZGVyOHRoOGJJbjY0YiAwCiNkZWZpbmUgY05ldE9yZGVyTVNCOGJJbjY0YiAwCgp0eXBlZGVm IHVuc2lnbmVkIGNoYXIgdTg7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdTE2OwoKCgp0eXBlZGVm IHVuc2lnbmVkIGludCB1MzI7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdTY0OwoK CnR5cGVkZWYgc2lnbmVkIGNoYXIgczg7CnR5cGVkZWYgc2lnbmVkIHNob3J0IHMxNjsKCgoKdHlw ZWRlZiBzaWduZWQgaW50IHMzMjsKCgoKCgp0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgczY0OwoK CnR5cGVkZWYgdW5zaWduZWQgY2hhciBDaHI7CnR5cGVkZWYgc2lnbmVkIGxvbmcgTnVtOwp0eXBl ZGVmIHNpZ25lZCBsb25nIExlbjsKdHlwZWRlZiBzaWduZWQgbG9uZyBTejsKCnVuaW9uIEFyZWFQ dHI7Cgp0eXBlZGVmIHVuaW9uIEFyZWEzMiB7CiAgICB1MzIgdTMyVmFsOwogICAgdTE2IHUxNlZh bDsKICAgIHU4IHU4VmFsOwogICAgdTE2IHUxNlZhbHNbc2l6ZW9mKHUzMikvMl07CiAgICB1OCB1 OFZhbHNbc2l6ZW9mKHUzMildOwogICAgdTMyIHVXaG9sZTsKICAgIHMzMiBzMzJWYWw7CiAgICBz MTYgczE2VmFsOwogICAgczggczhWYWw7CiAgICBzMTYgczE2VmFsc1tzaXplb2YoczMyKS8yXTsK ICAgIHM4IHM4VmFsc1tzaXplb2YoczMyKV07CiAgICBzMzIgc1dob2xlOwogICAgQ2hyIGNocjsK ICAgIENociBjaHJzW3NpemVvZihzMzIpXTsKCiAgICB1MzIgdmFsOwogICAgczMyIHN2YWw7CiAg ICB1MzIgcHRyVmFsOwogICAgdm9pZCogcHRyOwogICAgY29uc3Qgdm9pZCogcHRyQ25zdDsKICAg IHVuaW9uIEFyZWFQdHIqIGFQdHI7CgoKCn0gQXJlYTMyIF9fYXR0cmlidXRlX18gKCh0cmFuc3Bh cmVudF91bmlvbikpOwoKdHlwZWRlZiB1bmlvbiBBcmVhNjQgewogICAgdTY0IHU2NFZhbDsKICAg IHUzMiB1MzJWYWw7CiAgICB1MTYgdTE2VmFsOwogICAgdTggdThWYWw7CiAgICB1MzIgdTMyVmFs c1tzaXplb2YodTY0KS80XTsKICAgIHUxNiB1MTZWYWxzW3NpemVvZih1NjQpLzJdOwogICAgdTgg dThWYWxzW3NpemVvZih1NjQpXTsKICAgIHU2NCB1V2hvbGU7CiAgICBzNjQgczY0VmFsOwogICAg czMyIHMzMlZhbDsKICAgIHMxNiBzMTZWYWw7CiAgICBzOCBzOFZhbDsKICAgIHMzMiBzMzJWYWxz W3NpemVvZihzNjQpLzRdOwogICAgczE2IHMxNlZhbHNbc2l6ZW9mKHM2NCkvMl07CiAgICBzOCBz OFZhbHNbc2l6ZW9mKHM2NCldOwogICAgczY0IHNXaG9sZTsKICAgIENociBjaHI7CiAgICBDaHIg Y2hyc1tzaXplb2YoczY0KV07CiAgICBkb3VibGUgZGJsOwoKICAgIHUzMiB2YWw7CiAgICB1MzIg cHRyVmFsOwogICAgczMyIHN2YWw7CiAgICB1bmlvbiBBcmVhUHRyKiBhUHRyOwogICAgdW5pb24g QXJlYVB0ciogYVB0cnNbMl07CgoKCgoKCgogICAgdm9pZCogcHRyOwogICAgY29uc3Qgdm9pZCog cHRyQ25zdDsKfSBBcmVhNjQgX19hdHRyaWJ1dGVfXyAoKHRyYW5zcGFyZW50X3VuaW9uKSk7CgoK dHlwZWRlZiB1MzIgV29yZDsKCgoKCnR5cGVkZWYgQXJlYTMyIEFyZWE7CgoKCgp0eXBlZGVmIHVu aW9uIEFyZWExMjggewogICAgdTY0IHU2NFZhbHNbMl07CiAgICB1MzIgdTMyVmFsc1s0XTsKICAg IHUxNiB1MTZWYWxzWzhdOwogICAgdTggdThWYWxzWzE2XTsKICAgIHM2NCBzNjRWYWxzWzJdOwog ICAgczMyIHMzMlZhbHNbNF07CiAgICBzMTYgczE2VmFsc1s4XTsKICAgIHM4IHM4VmFsc1sxNl07 CiAgICBDaHIgY2hyc1sxNl07CgogICAgdm9pZCogcHRyc1s0XTsKICAgIHVuaW9uIEFyZWFQdHIq IGFQdHJzWzRdOwoKCgoKfSBBcmVhMTI4IF9fYXR0cmlidXRlX18gKCh0cmFuc3BhcmVudF91bmlv bikpOwoKdHlwZWRlZiB1bmlvbiBBcmVhMjU2IHsKICAgIHU2NCB1NjRWYWxzWzRdOwogICAgdTMy IHUzMlZhbHNbOF07CiAgICB1MTYgdTE2VmFsc1sxNl07CiAgICB1OCB1OFZhbHNbMzJdOwogICAg czY0IHM2NFZhbHNbNF07CiAgICBzMzIgczMyVmFsc1s4XTsKICAgIHMxNiBzMTZWYWxzWzE2XTsK ICAgIHM4IHM4VmFsc1szMl07CiAgICBDaHIgY2hyc1szMl07CgogICAgdm9pZCogcHRyc1s4XTsK ICAgIHVuaW9uIEFyZWFQdHIqIGFQdHJzWzhdOwoKCgoKfSBBcmVhMjU2IF9fYXR0cmlidXRlX18g KCh0cmFuc3BhcmVudF91bmlvbikpOwoKdHlwZWRlZiB1bmlvbiBBcmVhUHRyewogICAgdTgqIHU4 cDsKICAgIHUxNiogdTE2cDsKICAgIHUzMiogdTMycDsKICAgIHU2NCogdTY0cDsKICAgIHM4KiBz OHA7CiAgICBzMTYqIHMxNnA7CiAgICBzMzIqIHMzMnA7CiAgICBzNjQqIHM2NHA7CiAgICBDaHIq IGNocnA7CiAgICB2b2lkKiBwdHI7CiAgICBjb25zdCB2b2lkKiBwdHJDbnN0OwogICAgdm9pZCoq IHB0clZlYzsKICAgIGNvbnN0IHZvaWQqKnB0ckNuc3RWZWM7CiAgICBBcmVhKiBhcDsKICAgIEFy ZWEzMiogYTMycDsKICAgIEFyZWE2NCogYTY0cDsKICAgIEFyZWExMjgqIGExMjhwOwogICAgQXJl YTI1NiogYTI1NnA7CiAgICBjaGFyKiBjaGFycDsKCiAgICBzMzIgc3ZhbDsKICAgIHUzMiB1dmFs OwogICAgczMyKiBzdmFscDsKICAgIHUzMiogdXZhbHA7CiMgNDQ2ICJheGlzL2F4aXN0eXBlcy5o Igp9IEFyZWFQdHI7CgoKI2RlZmluZSBvZmZzZXRvZih0eXBlLGZsZCkgKChXb3JkKSgmKCgodHlw ZSAqKTApLT5mbGQpKSkKCgoKI2RlZmluZSBlbGVtZW50b2YoYXJyYXkpIChzaXplb2YoYXJyYXkp L3NpemVvZigoYXJyYXkpWzBdKSkKCgoKI2RlZmluZSBtZW1zaXplb2YodHlwZSxtZW1iZXIpIChz aXplb2YoKCh0eXBlKikwKS0+bWVtYmVyKSkKCgoKCgoKdHlwZWRlZiBzMzIgQm9vbDsKCiNkZWZp bmUgVHJ1ZSAxCgoKI2RlZmluZSBGYWxzZSAwCiMgNDgwICJheGlzL2F4aXN0eXBlcy5oIgojZGVm aW5lIERvIGRvCiNkZWZpbmUgRG9uZSB3aGlsZSgwKQoKI2RlZmluZSBSb3VuZFVwMTZCaXQoeCkg KCgoKFdvcmQpKHgpKSArIDEpICYgfjEpCiNkZWZpbmUgUm91bmREb3duMTZCaXQoeCkgKCgoV29y ZCkoeCkpICYgfjEpCiNkZWZpbmUgUm91bmRVcDMyQml0KHgpICgoKChXb3JkKSh4KSkgKyAzKSAm IH4zKQojZGVmaW5lIFJvdW5kRG93bjMyQml0KHgpICgoKFdvcmQpKHgpKSAmIH4zKQojZGVmaW5l IFJvdW5kVXA2NEJpdCh4KSAoKCgoV29yZCkoeCkpICsgNykgJiB+NykKI2RlZmluZSBSb3VuZERv d242NEJpdCh4KSAoKChXb3JkKSh4KSkgJiB+NykKI2RlZmluZSBSb3VuZFVwMTI4Qml0KHgpICgo KChXb3JkKSh4KSkgKyAxNSkgJiB+MTUpCiNkZWZpbmUgUm91bmREb3duMTI4Qml0KHgpICgoKFdv cmQpKHgpKSAmIH4xNSkKI2RlZmluZSBSb3VuZFVwMjU2Qml0KHgpICgoKChXb3JkKSh4KSkgKyAz MSkgJiB+MzEpCiNkZWZpbmUgUm91bmREb3duMjU2Qml0KHgpICgoKFdvcmQpKHgpKSAmIH4zMSkK CgojZGVmaW5lIFJvdW5kVXBXb3JkU3ooeCkgUm91bmRVcDMyQml0KHgpCiNkZWZpbmUgUm91bmRE b3duV29yZFN6KHgpIFJvdW5kRG93bjMyQml0KHgpCgoKCgojZGVmaW5lIFJvdW5kVXBMb25nRG91 YmxlU3ooeCkgUm91bmRVcDEyOEJpdCh4KQojZGVmaW5lIFJvdW5kRG93bkxvbmdEb3VibGVTeih4 KSBSb3VuZERvd24xMjhCaXQoeCkKCmV4dGVybiBpbmxpbmUgQm9vbApJc1Nob3J0Qm91bmRhcnko dm9pZCogeCkKewogICAgQXJlYVB0ciB5OwogICAgeS5wdHIgPSB4OwogICAgcmV0dXJuICh5LnV2 YWwgJiAweDEpID09IDA7Cn0KCmV4dGVybiBpbmxpbmUgQm9vbApJc0ludEJvdW5kYXJ5KHZvaWQq IHgpCnsKICAgIEFyZWFQdHIgeTsKICAgIHkucHRyID0geDsKICAgIHJldHVybiAoeS51dmFsICYg MHgzKSA9PSAwOwp9CgpleHRlcm4gaW5saW5lIEJvb2wKSXNMb25nQm91bmRhcnkodm9pZCogeCkK ewogICAgQXJlYVB0ciB5OwogICAgeS5wdHIgPSB4OwogICAgcmV0dXJuICh5LnV2YWwgJiAweDMp ID09IDA7Cn0KCmV4dGVybiBpbmxpbmUgQm9vbApJc0xvbmdMb25nQm91bmRhcnkodm9pZCogeCkK ewogICAgQXJlYVB0ciB5OwogICAgeS5wdHIgPSB4OwogICAgcmV0dXJuICh5LnV2YWwgJiAweDMp ID09IDA7Cn0KCmV4dGVybiBpbmxpbmUgczY0ClNpZ25SZXZlcnNlNjQoczY0IHgpCnsKICAgIHU2 NCB2ID0gKHU2NCl4OwoKICAgIHJldHVybiB+diArIDE7Cn0KCgoKI2RlZmluZSBBeGlzTGliUmVm KE5hbWUpIGFzbSgiX18iICNOYW1lKQojZGVmaW5lIEF4aXNMaWJEZWYoTmFtZSkgYXNtKCIud2Vh ayAiICNOYW1lICJcblx0IiAjTmFtZSAiID0gX18iICNOYW1lKQojIDU2MiAiYXhpcy9heGlzdHlw ZXMuaCIKZXh0ZXJuIGlubGluZSB1NjQKTG9hZFVBNjQoY29uc3QgdTgqIHApCnsKICAgIHU2NCB4 ID0gcFs3XTsKICAgIHggPDw9IDg7CiAgICB4IHw9IHBbNl07CiAgICB4IDw8PSA4OwogICAgeCB8 PSBwWzVdOwogICAgeCA8PD0gODsKICAgIHggfD0gcFs0XTsKICAgIHggPDw9IDg7CiAgICB4IHw9 IHBbM107CiAgICB4IDw8PSA4OwogICAgeCB8PSBwWzJdOwogICAgeCA8PD0gODsKICAgIHggfD0g cFsxXTsKICAgIHggPDw9IDg7CiAgICB4IHw9IHBbMF07CiAgICByZXR1cm4geDsKfQoKZXh0ZXJu IGlubGluZSB1MzIKTG9hZFVBMzIoY29uc3QgdTgqIHApCnsKICAgIHUzMiB4ID0gcFszXTsKICAg IHggPDw9IDg7CiAgICB4IHw9IHBbMl07CiAgICB4IDw8PSA4OwogICAgeCB8PSBwWzFdOwogICAg eCA8PD0gODsKICAgIHggfD0gcFswXTsKICAgIHJldHVybiB4Owp9CgpleHRlcm4gaW5saW5lIHUx NgpMb2FkVUExNihjb25zdCB1OCogcCkKewogICAgdTE2IHggPSBwWzFdOwogICAgeCA8PD0gODsK ICAgIHggfD0gcFswXTsKICAgIHJldHVybiB4Owp9CgpleHRlcm4gaW5saW5lIHZvaWQKU3RvcmVV QTY0KHU4KiBwLCB1NjQgeCkKewogICAgcFswXSA9IHg7CiAgICB4ID4+PSA4OwogICAgcFsxXSA9 IHg7CiAgICB4ID4+PSA4OwogICAgcFsyXSA9IHg7CiAgICB4ID4+PSA4OwogICAgcFszXSA9IHg7 CiAgICB4ID4+PSA4OwogICAgcFs0XSA9IHg7CiAgICB4ID4+PSA4OwogICAgcFs1XSA9IHg7CiAg ICB4ID4+PSA4OwogICAgcFs2XSA9IHg7CiAgICB4ID4+PSA4OwogICAgcFs3XSA9IHg7CiAgICBy ZXR1cm47Cn0KCmV4dGVybiBpbmxpbmUgdm9pZApTdG9yZVVBMzIodTgqIHAsIHUzMiB4KQp7CiAg ICBwWzBdID0geDsKICAgIHggPj49IDg7CiAgICBwWzFdID0geDsKICAgIHggPj49IDg7CiAgICBw WzJdID0geDsKICAgIHggPj49IDg7CiAgICBwWzNdID0geDsKICAgIHJldHVybjsKfQoKZXh0ZXJu IGlubGluZSB2b2lkClN0b3JlVUExNih1OCogcCwgdTE2IHgpCnsKICAgIHBbMF0gPSB4OwogICAg eCA+Pj0gODsKICAgIHBbMV0gPSB4OwogICAgcmV0dXJuOwp9CgoKIyA2NjUgImF4aXMvYXhpc3R5 cGVzLmgiCiNkZWZpbmUgTXV0ZXhMb2NrKGwpIHB0aHJlYWRfbXV0ZXhfbG9jayhsKQojZGVmaW5l IE11dGV4VW5sb2NrKGwpIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKGwpCiNkZWZpbmUgTXV0ZXhEZXN0 cm95KGwpIHB0aHJlYWRfbXV0ZXhfZGVzdHJveShsKQojZGVmaW5lIENvbmRXYWl0KGMsbCkgcHRo cmVhZF9jb25kX3dhaXQoYywgbCkKI2RlZmluZSBDb25kVGltZWRXYWl0KGMsbCx0KSBwdGhyZWFk X2NvbmRfdGltZWR3YWl0KGMsIGwsIHQpCiNkZWZpbmUgQ29uZFNpZ25hbChjKSBwdGhyZWFkX2Nv bmRfc2lnbmFsKGMpCiNkZWZpbmUgQ29uZEJyb2FkY2FzdChjKSBwdGhyZWFkX2NvbmRfYnJvYWRj YXN0KGMpCiNkZWZpbmUgQ29uZERlc3Ryb3koYykgcHRocmVhZF9jb25kX2Rlc3Ryb3koYykKI2Rl ZmluZSBUaHJlYWRJZFR5cGUgcHRocmVhZF90CiMgNjg4ICJheGlzL2F4aXN0eXBlcy5oIgojZGVm aW5lIEF4aXNWYXJBcmdQcmVGd2QoYSx4KSAKI2RlZmluZSBBeGlzVmFyQXJnUG9zdEZ3ZChhLHgp ICgoYSkgKz0gKHgpKQojIDIzICIuLi8uLi9zcmMvc2RibS52MC9zZGJtZmxkdS5jIiAyCiMgMSAi YXhpcy9heGlzLmgiIDEKIyAyNyAiYXhpcy9heGlzLmgiCiNkZWZpbmUgX0FYSVNfQVhJU19IXyAK CgoKCgoKCiMgMSAiYXhpcy9heGlzZGJnLmgiIDEKIyAyNyAiYXhpcy9heGlzZGJnLmgiCiNkZWZp bmUgX0FYSVNfQVhJU0RCR19IXyAKIyA2MCAiYXhpcy9heGlzZGJnLmgiCiNkZWZpbmUgQVhJU19E RUJVR19WQUxJRCAxCiMgMTA4ICJheGlzL2F4aXNkYmcuaCIKI2RlZmluZSBOREJHKC4uLikgCiNk ZWZpbmUgTkRCKC4uLikgCiNkZWZpbmUgTkRiZyguLi4pIAojZGVmaW5lIE5iZyguLi4pIAojZGVm aW5lIE5YRGJnKC4uLikgCgoKI2RlZmluZSBORGJnVjEobGV2ZSxmb3JtMSx2YXIxKSAKI2RlZmlu ZSBORGJnVjIobGV2ZSxmb3JtMSx2YXIxLGZvcm0yLHZhcjIpIAojZGVmaW5lIE5EYmdWMyhsZXZl LGZvcm0xLHZhcjEsZm9ybTIsdmFyMixmb3JtMyx2YXIzKSAKI2RlZmluZSBORGJnVjQobGV2ZSxm b3JtMSx2YXIxLGZvcm0yLHZhcjIsZm9ybTMsdmFyMyxmb3JtNCx2YXI0KSAKCiNkZWZpbmUgTkRi Z1ZhcjEoZm9ybTEsdmFyMSkgCiNkZWZpbmUgTkRiZ1ZhcjIoZm9ybTEsdmFyMSxmb3JtMix2YXIy KSAKI2RlZmluZSBORGJnVmFyMyhmb3JtMSx2YXIxLGZvcm0yLHZhcjIsZm9ybTMsdmFyMykgCiNk ZWZpbmUgTkRiZ1ZhcjQoZm9ybTEsdmFyMSxmb3JtMix2YXIyLGZvcm0zLHZhcjMsZm9ybTQsdmFy NCkgCgojZGVmaW5lIE5YRGJnVmFyMShmb3JtMSx2YXIxKSAKI2RlZmluZSBOWERiZ1ZhcjIoZm9y bTEsdmFyMSxmb3JtMix2YXIyKSAKI2RlZmluZSBOWERiZ1ZhcjMoZm9ybTEsdmFyMSxmb3JtMix2 YXIyLGZvcm0zLHZhcjMpIAojZGVmaW5lIE5YRGJnVmFyNChmb3JtMSx2YXIxLGZvcm0yLHZhcjIs Zm9ybTMsdmFyMyxmb3JtNCx2YXI0KSAKCgoKCiNkZWZpbmUgTkRiZ0xvZyguLi4pIAoKCiNkZWZp bmUgTkRiZ0xvZ1ZhcjEoZm9ybTEsdmFyMSkgCiNkZWZpbmUgTkRiZ0xvZ1ZhcjIoZm9ybTEsdmFy MSxmb3JtMix2YXIyKSAKI2RlZmluZSBORGJnTG9nVmFyMyhmb3JtMSx2YXIxLGZvcm0yLHZhcjIs Zm9ybTMsdmFyMykgCiNkZWZpbmUgTkRiZ0xvZ1ZhcjQoZm9ybTEsdmFyMSxmb3JtMix2YXIyLGZv cm0zLHZhcjMsZm9ybTQsdmFyNCkgCgoKCgoKCiNkZWZpbmUgQXhpc0RlYnVnTGV2ZWxWYWxpZChl LGwpICgoKigoZSktPm1hc2tQdHIpKSAmICgxVSA8PCAobCkpKQojIDE1NyAiYXhpcy9heGlzZGJn LmgiCiNkZWZpbmUgRGJnKGxldmVsLC4uLikgZG97aWYoQXhpc0RlYnVnTGV2ZWxWYWxpZCgmKERl YnVnT2JqKSwgbGV2ZWwpKSBBeGlzRGVidWdPdXRwdXQoKERlYnVnT2JqKS5kZWJ1Z0lkLCBsZXZl bCwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18sIF9fVkFfQVJHU19fKTsgfXdoaWxl KDApCgoKCiNkZWZpbmUgRGJnWChkYmdwLGxldmVsLC4uLikgZG97aWYoQXhpc0RlYnVnTGV2ZWxW YWxpZChkYmdwLCBsZXZlbCkpIEF4aXNEZWJ1Z091dHB1dCgoRGVidWdPYmopLmRlYnVnSWQsIGxl dmVsLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXywgX19WQV9BUkdTX18pOyB9d2hp bGUoMCkKIyAxODIgImF4aXMvYXhpc2RiZy5oIgojZGVmaW5lIERiZ1YxKGxldmVsLGZvcm0xLHZh cjEpIERiZyhsZXZlbCwgI3ZhcjEgIj0iIGZvcm0xICJcbiIsIHZhcjEpCgojZGVmaW5lIERiZ1Yy KGxldmVsLGZvcm0xLHZhcjEsZm9ybTIsdmFyMikgRGJnKGxldmVsLCAjdmFyMSAiPSIgZm9ybTEg IiwgIiAjdmFyMiAiPSIgZm9ybTIgIlxuIiwgdmFyMSwgdmFyMikKCiNkZWZpbmUgRGJnVjMobGV2 ZWwsZm9ybTEsdmFyMSxmb3JtMix2YXIyLGZvcm0zLHZhcjMpIERiZyhsZXZlbCwgI3ZhcjEgIj0i IGZvcm0xICIsICIgI3ZhcjIgIj0iIGZvcm0yICIsICIgI3ZhcjMgIj0iIGZvcm0zICJcbiIsIHZh cjEsIHZhcjIsIHZhcjMpCgoKI2RlZmluZSBEYmdWNChsZXZlbCxmb3JtMSx2YXIxLGZvcm0yLHZh cjIsZm9ybTMsdmFyMyxmb3JtNCx2YXI0KSBEYmcobGV2ZWwsICN2YXIxICI9IiBmb3JtMSAiLCAi ICN2YXIyICI9IiBmb3JtMiAiLCAiICN2YXIzICI9IiBmb3JtMyAiLCAiICN2YXI0ICI9IiBmb3Jt NCAiXG4iLCB2YXIxLCB2YXIyLCB2YXIzLCB2YXI0KQojIDIwMSAiYXhpcy9heGlzZGJnLmgiCiNk ZWZpbmUgRGJnVHIoLi4uKSBEYmcoVHJhY2VfLCBfX1ZBX0FSR1NfXykKI2RlZmluZSBEYmdWYXIo Li4uKSBEYmcoVHJhY2VWXywgX19WQV9BUkdTX18pCgoKI2RlZmluZSBEYmdWYXIxKGZvcm0xLHZh cjEpIERiZ1ZhcigjdmFyMSAiPSIgZm9ybTEgIlxuIiwgdmFyMSkKCiNkZWZpbmUgRGJnVmFyMihm b3JtMSx2YXIxLGZvcm0yLHZhcjIpIERiZ1ZhcigjdmFyMSAiPSIgZm9ybTEgIiwgIiAjdmFyMiAi PSIgZm9ybTIgIlxuIiwgdmFyMSwgdmFyMikKCiNkZWZpbmUgRGJnVmFyMyhmb3JtMSx2YXIxLGZv cm0yLHZhcjIsZm9ybTMsdmFyMykgRGJnVmFyKCN2YXIxICI9IiBmb3JtMSAiLCAiICN2YXIyICI9 IiBmb3JtMiAiLCAiICN2YXIzICI9IiBmb3JtMyAiXG4iLCB2YXIxLCB2YXIyLCB2YXIzKQoKCiNk ZWZpbmUgRGJnVmFyNChmb3JtMSx2YXIxLGZvcm0yLHZhcjIsZm9ybTMsdmFyMyxmb3JtNCx2YXI0 KSBEYmdWYXIoI3ZhcjEgIj0iIGZvcm0xICIsICIgI3ZhcjIgIj0iIGZvcm0yICIsICIgI3ZhcjMg Ij0iIGZvcm0zICIsICIgI3ZhcjQgIj0iIGZvcm00ICJcbiIsIHZhcjEsIHZhcjIsIHZhcjMsIHZh cjQpCiMgMjQ3ICJheGlzL2F4aXNkYmcuaCIKI2RlZmluZSBYRGJnKC4uLikgCgojZGVmaW5lIFhE YmdWYXIxKGYxLHYxKSAKI2RlZmluZSBYRGJnVmFyMihmMSx2MSxmMix2MikgCiNkZWZpbmUgWERi Z1ZhcjMoZjEsdjEsZjIsdjIsZjMsdjMpIAojZGVmaW5lIFhEYmdWYXI0KGYxLHYxLGYyLHYyLGYz LHYzLGY0LHY0KSAKCgoKCgoKI2RlZmluZSBEYmdQcmZ4ICIlczolZDolczwlczoldT46ICUkIiwg Z0NtZE5hbWUsIGdNeVBpZCwgX19GVU5DVElPTl9fLCBBeGlzRGVidWdGaWxlTmFtZShfX0ZJTEVf XyksIF9fTElORV9fCgoKCgojZGVmaW5lIERiZ0xvZyhmbXQsLi4uKSBMb2dQdXQoY0xvZ0RiZywg RGJnUHJmeCwgZm10LCBfX1ZBX0FSR1NfXykKCgoKI2RlZmluZSBEYmdMb2dWYXIxKGZvcm0xLHZh cjEpIERiZ0xvZygjdmFyMSAiPSIgZm9ybTEgIlxuIiwgdmFyMSkKCiNkZWZpbmUgRGJnTG9nVmFy Mihmb3JtMSx2YXIxLGZvcm0yLHZhcjIpIERiZ0xvZygjdmFyMSAiPSIgZm9ybTEgIiwgIiAjdmFy MiAiPSIgZm9ybTIgIlxuIiwgdmFyMSwgdmFyMikKCiNkZWZpbmUgRGJnTG9nVmFyMyhmb3JtMSx2 YXIxLGZvcm0yLHZhcjIsZm9ybTMsdmFyMykgRGJnTG9nKCN2YXIxICI9IiBmb3JtMSAiLCAiICN2 YXIyICI9IiBmb3JtMiAiLCAiICN2YXIzICI9IiBmb3JtMyAiXG4iLCB2YXIxLCB2YXIyLCB2YXIz KQoKCiNkZWZpbmUgRGJnTG9nVmFyNChmb3JtMSx2YXIxLGZvcm0yLHZhcjIsZm9ybTMsdmFyMyxm b3JtNCx2YXI0KSBEYmdMb2coI3ZhcjEgIj0iIGZvcm0xICIsICIgI3ZhcjIgIj0iIGZvcm0yICIs ICIgI3ZhcjMgIj0iIGZvcm0zICJcbiIgI3ZhcjQgIj0iIGZvcm00ICJcbiIsIHZhcjEsIHZhcjIs IHZhcjMsIHZhcjQpCiMgMzQ5ICJheGlzL2F4aXNkYmcuaCIKI2RlZmluZSBEYmdNYXNrKGxldmVs KSAoMVUgPDwgKGxldmVsKSkKCgoKCiNkZWZpbmUgRmF0YWxfIDAKI2RlZmluZSBXYXJuXyAxCiNk ZWZpbmUgQWxhcm1fIDIKI2RlZmluZSBJbmZvXyAzCiNkZWZpbmUgVHJhY2VfIDQKI2RlZmluZSBU cmFjZVNfIDUKI2RlZmluZSBUcmFjZURfIDYKI2RlZmluZSBUcmFjZVhfIDcKI2RlZmluZSBUcmFj ZUFfIDgKI2RlZmluZSBUcmFjZUJfIDkKI2RlZmluZSBUcmFjZUNfIDEwCiNkZWZpbmUgVHJhY2VW XyAxMQojZGVmaW5lIFRyYWNlQXhpc18gMTIKI2RlZmluZSBUcmFjZUF4aXNTXyAxMwojZGVmaW5l IFRyYWNlQXhpc0RfIDE0CiNkZWZpbmUgVHJhY2VBeGlzWF8gMTUKCgoKCgojZGVmaW5lIERiZ0x2 bEFwbDAgMTYKI2RlZmluZSBEYmdMdmxBcGwxIDE3CiNkZWZpbmUgRGJnTHZsQXBsMiAxOAojZGVm aW5lIERiZ0x2bEFwbDMgMTkKI2RlZmluZSBEYmdMdmxBcGw0IDIwCiNkZWZpbmUgRGJnTHZsQXBs NSAyMQojZGVmaW5lIERiZ0x2bEFwbDYgMjIKI2RlZmluZSBEYmdMdmxBcGw3IDIzCiNkZWZpbmUg RGJnTHZsQXBsOCAyNAojZGVmaW5lIERiZ0x2bEFwbDkgMjUKI2RlZmluZSBEYmdMdmxBcGwxMCAy NgojZGVmaW5lIERiZ0x2bEFwbDExIDI3CiNkZWZpbmUgRGJnTHZsQXBsMTIgMjgKI2RlZmluZSBE YmdMdmxBcGwxMyAyOQojZGVmaW5lIERiZ0x2bEFwbDE0IDMwCiNkZWZpbmUgRGJnTHZsQXBsMTUg MzEKCgoKCgoKI2RlZmluZSBjQ29tcG9BcGwwICJBUFBMLTAiCiNkZWZpbmUgY0NvbXBvQXBsMSAi QVBQTC0xIgojZGVmaW5lIGNDb21wb0FwbDIgIkFQUEwtMiIKI2RlZmluZSBjQ29tcG9BcGwzICJB UFBMLTMiCiNkZWZpbmUgY0NvbXBvQXBsNCAiQVBQTC00IgojZGVmaW5lIGNDb21wb0FwbDUgIkFQ UEwtNSIKI2RlZmluZSBjQ29tcG9BcGw2ICJBUFBMLTYiCiNkZWZpbmUgY0NvbXBvQXBsNyAiQVBQ TC03IgojZGVmaW5lIGNDb21wb0FwbDggIkFQUEwtOCIKI2RlZmluZSBjQ29tcG9BcGw5ICJBUFBM LTkiCiNkZWZpbmUgY0NvbXBvQXBsMTAgIkFQUEwtMTAiCiNkZWZpbmUgY0NvbXBvQXBsMTEgIkFQ UEwtMTEiCiNkZWZpbmUgY0NvbXBvQXBsMTIgIkFQUEwtMTIiCiNkZWZpbmUgY0NvbXBvQXBsMTMg IkFQUEwtMTMiCiNkZWZpbmUgY0NvbXBvQXBsMTQgIkFQUEwtMTQiCiNkZWZpbmUgY0NvbXBvQXBs MTUgIkFQUEwtMTUiCgojZGVmaW5lIGNDb21wb0h0aWYgImF4aXMuaHRpZiIKI2RlZmluZSBjQ29t cG9TZGJtICJheGlzLnNkYm0iCiNkZWZpbmUgY0NvbXBvQWRhbSAiYXhpcy5hZGFtIgojZGVmaW5l IGNDb21wb1NkYm1WMCAiYXhpcy5zZGJtIgojZGVmaW5lIGNDb21wb1NkYm1WMSAiYXhpcy5zZGJt IgojZGVmaW5lIGNDb21wb1NkYm1WMiAiYXhpcy5zZGJtIgojZGVmaW5lIGNDb21wb1NkYm1WMyAi YXhpcy5zZGJtIgojZGVmaW5lIGNDb21wb1NkYm1WNCAiYXhpcy5zZGJtIgojZGVmaW5lIGNDb21w b1NkYm1WNSAiYXhpcy5zZGJtIgojZGVmaW5lIGNDb21wb0FkYW1WMCAiYXhpcy5hZGFtIgojZGVm aW5lIGNDb21wb0FkYW1WMSAiYXhpcy5hZGFtIgojZGVmaW5lIGNDb21wb0FkYW1WMiAiYXhpcy5h ZGFtIgojZGVmaW5lIGNDb21wb0FkYW1WMyAiYXhpcy5hZGFtIgojZGVmaW5lIGNDb21wb0FkYW1W NCAiYXhpcy5hZGFtIgojZGVmaW5lIGNDb21wb0FkYW1WNSAiYXhpcy5hZGFtIgojZGVmaW5lIGND b21wb0F0aW1lICJheGlzLmF0aW1lIgojZGVmaW5lIGNDb21wb0NvbW1vbiAiYXhpcy5jb21tb24i CiNkZWZpbmUgY0NvbXBvVXRpbCAiYXhpcy51dGlsIgojZGVmaW5lIGNDb21wb1Nlc3MgImF4aXMu c2VzcyIKI2RlZmluZSBjQ29tcG9BbGwgImFsbCIKIyA0NDUgImF4aXMvYXhpc2RiZy5oIgojZGVm aW5lIGNBeGlzRGVidWdNb2RlSW5pdGlhbEFyZWFDaGVja01hc2sgMHgwMDAwMDAwMQojZGVmaW5l IGNBeGlzRGVidWdNb2RlRXhwbGljaXRJbml0aWFsQXJlYSAweDAwMDAwMDAxCiNkZWZpbmUgY0F4 aXNEZWJ1Z01vZGVJbXBsaWNpdEluaXRpYWxBcmVhIDB4MDAwMDAwMDAKCiNkZWZpbmUgY0F4aXNE ZWJ1Z091dHB1dENoZWNrTWFzayAweDAwMDAwMDAyCiNkZWZpbmUgY0F4aXNEZWJ1Z091dHB1dEV4 cGxpY2l0IDB4MDAwMDAwMDIKI2RlZmluZSBjQXhpc0RlYnVnT3V0cHV0SW1wbGljaXQgMHgwMDAw MDAwMAoKI2RlZmluZSBjQXhpc0RlYnVnU3RhcnRDaGVja01hc2sgMHgwMDAwMDAwNAojZGVmaW5l IGNBeGlzRGVidWdTdGFydEV4cGxpY2l0IDB4MDAwMDAwMDQKI2RlZmluZSBjQXhpc0RlYnVnU3Rh cnRJbXBsaWNpdCAweDAwMDAwMDAwCgoKI2RlZmluZSBjQXhpc0RlYnVnU3RhcnRGYWlsQ2hlY2tN YXNrIDB4MDA4MDAwMDAKI2RlZmluZSBjQXhpc0RlYnVnU3RhcnRGYWlsQWJvcnQgMHgwMDgwMDAw MAojZGVmaW5lIGNBeGlzRGVidWdTdGFydEZhaWxJZ25vcmUgMHgwMDAwMDAwMAoKCiNkZWZpbmUg Y0F4aXNEZWJ1Z0Zvck10YWJBcHBsIDB4NDAwMDAwMDAKCgojZGVmaW5lIGNBeGlzRGVidWdEZWZh dWx0TW9kZVNldCAoY0F4aXNEZWJ1Z01vZGVJbXBsaWNpdEluaXRpYWxBcmVhfCBjQXhpc0RlYnVn T3V0cHV0SW1wbGljaXR8IGNBeGlzRGVidWdTdGFydEZhaWxJZ25vcmV8IGNBeGlzRGVidWdTdGFy dEltcGxpY2l0KQoKCgoKZXh0ZXJuIHVuc2lnbmVkIGdBeGlzRGVidWdEZWZhdWx0TWFzazsKZXh0 ZXJuIHVuc2lnbmVkIGdBeGlzRGVidWdEZWZhdWx0TW9kZTsKZXh0ZXJuIHVuc2lnbmVkIGdBeGlz RGVidWdNdGFiRGVmYXVsdE1vZGU7CiMgNDg3ICJheGlzL2F4aXNkYmcuaCIKIyAxICJheGlzL2Nx dWV1ZXAuaCIgMQojIDI3ICJheGlzL2NxdWV1ZXAuaCIKI2RlZmluZSBfQVhJU19DUVVFVUVQX0hf IAoKCgp0eXBlZGVmIHN0cnVjdCBDcXVldWVQdHJMaW5rIHsKICAgIHZvaWQqIGJrd2Q7CiAgICB2 b2lkKiBmcndkOwp9IENxdWV1ZVB0ckxpbms7CiMgOTUgImF4aXMvY3F1ZXVlcC5oIgpleHRlcm4g aW5saW5lIHZvaWQqCkNxdWV1ZVB0clRvcEFkZHIoQ3F1ZXVlUHRyTGluayogdGd0TGlua1AsIHUz MiBsaW5rT2Zmc2V0KQp7CiAgICBBcmVhIHg7CgogICAgeC5wdHIgPSB0Z3RMaW5rUDsKICAgIHgu dmFsIC09IGxpbmtPZmZzZXQ7CiAgICByZXR1cm4geC5wdHI7Cn0KCmV4dGVybiBpbmxpbmUgQ3F1 ZXVlUHRyTGluayoKQ3F1ZXVlUHRyTGlua0FkZHIodm9pZCogdGd0LCB1MzIgbGlua09mZnNldCkK ewogICAgQXJlYSB4OwoKICAgIHgucHRyID0gdGd0OwogICAgeC52YWwgKz0gbGlua09mZnNldDsK ICAgIHJldHVybiAoQ3F1ZXVlUHRyTGluayopKHgucHRyKTsKfQoKZXh0ZXJuIGlubGluZSB2b2lk CkNxdWV1ZVB0ckluaXQodm9pZCogdGFyZ2V0LCB1MzIgbGlua09mZnNldCkKewogICAgQ3F1ZXVl UHRyTGluayogdGFyZ2V0TDsKCiAgICB0YXJnZXRMID0gQ3F1ZXVlUHRyTGlua0FkZHIodGFyZ2V0 LCBsaW5rT2Zmc2V0KTsKCiAgICB0YXJnZXRMLT5mcndkID0gdGFyZ2V0OwogICAgdGFyZ2V0TC0+ Ymt3ZCA9IHRhcmdldDsKfQoKZXh0ZXJuIGlubGluZSB2b2lkCkNxdWV1ZVB0ckluc2VydFF1ZXVl KHZvaWQqIHF1ZXVlLCB2b2lkKiB0YXJnZXQsIHUzMiBsaW5rT2Zmc2V0KQp7CiAgICBDcXVldWVQ dHJMaW5rKiBxdWV1ZUw7CiAgICBDcXVldWVQdHJMaW5rKiB0YXJnZXRMOwogICAgQ3F1ZXVlUHRy TGluayogZnJ3ZEw7CgogICAgcXVldWVMID0gQ3F1ZXVlUHRyTGlua0FkZHIocXVldWUsIGxpbmtP ZmZzZXQpOwogICAgdGFyZ2V0TCA9IENxdWV1ZVB0ckxpbmtBZGRyKHRhcmdldCwgbGlua09mZnNl dCk7CiAgICBmcndkTCA9IENxdWV1ZVB0ckxpbmtBZGRyKHF1ZXVlTC0+ZnJ3ZCwgbGlua09mZnNl dCk7CgogICAgdGFyZ2V0TC0+ZnJ3ZCA9IHF1ZXVlTC0+ZnJ3ZDsKICAgIGZyd2RMLT5ia3dkID0g dGFyZ2V0OwogICAgdGFyZ2V0TC0+Ymt3ZCA9IHF1ZXVlOwogICAgcXVldWVMLT5mcndkID0gdGFy Z2V0Owp9CgpleHRlcm4gaW5saW5lIHZvaWQKQ3F1ZXVlUHRyQXBwZW5kUXVldWUodm9pZCogcXVl dWUsIHZvaWQqIHRhcmdldCwgdTMyIGxpbmtPZmZzZXQpCnsKICAgIENxdWV1ZVB0ckxpbmsqIHF1 ZXVlTDsKICAgIENxdWV1ZVB0ckxpbmsqIHRhcmdldEw7CiAgICBDcXVldWVQdHJMaW5rKiBia3dk TDsKCiAgICBxdWV1ZUwgPSBDcXVldWVQdHJMaW5rQWRkcihxdWV1ZSwgbGlua09mZnNldCk7CiAg ICB0YXJnZXRMID0gQ3F1ZXVlUHRyTGlua0FkZHIodGFyZ2V0LCBsaW5rT2Zmc2V0KTsKICAgIGJr d2RMID0gQ3F1ZXVlUHRyTGlua0FkZHIocXVldWVMLT5ia3dkLCBsaW5rT2Zmc2V0KTsKCiAgICA7 CiAgICB0YXJnZXRMLT5ia3dkID0gcXVldWVMLT5ia3dkOwogICAgYmt3ZEwtPmZyd2QgPSB0YXJn ZXQ7CiAgICB0YXJnZXRMLT5mcndkID0gcXVldWU7CiAgICBxdWV1ZUwtPmJrd2QgPSB0YXJnZXQ7 Cn0KCmV4dGVybiBpbmxpbmUgdm9pZCoKQ3F1ZXVlUHRyRGVsZXRlUXVldWUodm9pZCogdGFyZ2V0 LCB1MzIgbGlua09mZnNldCkKewogICAgQ3F1ZXVlUHRyTGluayogdGFyZ2V0TDsKICAgIENxdWV1 ZVB0ckxpbmsqIGZyd2RMOwogICAgQ3F1ZXVlUHRyTGluayogYmt3ZEw7CiAgICB2b2lkKiBvbGRG cndkOwoKICAgIHRhcmdldEwgPSBDcXVldWVQdHJMaW5rQWRkcih0YXJnZXQsIGxpbmtPZmZzZXQp OwogICAgZnJ3ZEwgPSBDcXVldWVQdHJMaW5rQWRkcih0YXJnZXRMLT5mcndkLCBsaW5rT2Zmc2V0 KTsKICAgIGJrd2RMID0gQ3F1ZXVlUHRyTGlua0FkZHIodGFyZ2V0TC0+Ymt3ZCwgbGlua09mZnNl dCk7CgogICAgYmt3ZEwtPmZyd2QgPSB0YXJnZXRMLT5mcndkOwogICAgZnJ3ZEwtPmJrd2QgPSB0 YXJnZXRMLT5ia3dkOwoKICAgIG9sZEZyd2QgPSB0YXJnZXRMLT5mcndkOwogICAgdGFyZ2V0TC0+ ZnJ3ZCA9IHRhcmdldDsKICAgIHRhcmdldEwtPmJrd2QgPSB0YXJnZXQ7CgogICAgcmV0dXJuIChv bGRGcndkICE9IHRhcmdldCkgPyBvbGRGcndkIDogKCh2b2lkICopMCk7Cn0KCiNkZWZpbmUgQ3F1 ZXVlUHRyRGVmSW5pdChwcmVmaXgsdHlwZU5hbWUsbGlua0ZpZWxkKSBleHRlcm4gaW5saW5lIHZv aWQgcHJlZml4ICMjIEluaXQodHlwZU5hbWUqIHRndCkgeyBDcXVldWVQdHJJbml0KHRndCwgb2Zm c2V0b2YodHlwZU5hbWUsIGxpbmtGaWVsZCkpO30KCgoKI2RlZmluZSBDcXVldWVQdHJEZWZJbnNl cnQocHJlZml4LHR5cGVOYW1lLGxpbmtGaWVsZCkgZXh0ZXJuIGlubGluZSB2b2lkIHByZWZpeCAj IyBJbnNlcnQodHlwZU5hbWUqIHRvcCwgdHlwZU5hbWUqIHRndCkgeyBDcXVldWVQdHJJbnNlcnRR dWV1ZSh0b3AsIHRndCwgb2Zmc2V0b2YodHlwZU5hbWUsIGxpbmtGaWVsZCkpO30KCgoKI2RlZmlu ZSBDcXVldWVQdHJEZWZBcHBlbmQocHJlZml4LHR5cGVOYW1lLGxpbmtGaWVsZCkgZXh0ZXJuIGlu bGluZSB2b2lkIHByZWZpeCAjIyBBcHBlbmQodHlwZU5hbWUqIHRvcCwgdHlwZU5hbWUqIHRndCkg eyBDcXVldWVQdHJBcHBlbmRRdWV1ZSh0b3AsIHRndCwgb2Zmc2V0b2YodHlwZU5hbWUsIGxpbmtG aWVsZCkpO30KCgoKI2RlZmluZSBDcXVldWVQdHJEZWZEZWxldGUocHJlZml4LHR5cGVOYW1lLGxp bmtGaWVsZCkgZXh0ZXJuIGlubGluZSB0eXBlTmFtZSogcHJlZml4ICMjIERlbGV0ZSh0eXBlTmFt ZSogdGd0KSB7IHJldHVybiBDcXVldWVQdHJEZWxldGVRdWV1ZSh0Z3QsIG9mZnNldG9mKHR5cGVO YW1lLCBsaW5rRmllbGQpKTt9CgoKCiNkZWZpbmUgQ3F1ZXVlUHRyRGVmTmV4dChwcmVmaXgsdHlw ZU5hbWUsbGlua0ZpZWxkKSBleHRlcm4gaW5saW5lIHR5cGVOYW1lKiBwcmVmaXggIyMgTmV4dCh0 eXBlTmFtZSogdG9wLCB0eXBlTmFtZSogdGd0KSB7IGlmKHRndCAhPSBOVUxMKSB7IHR5cGVOYW1l KiBuZXh0ID0gdGd0LT5saW5rRmllbGQuZnJ3ZDsgcmV0dXJuIChuZXh0ICE9IHRvcCkgPyBuZXh0 IDogTlVMTDsgfSBlbHNlIHJldHVybiB0b3A7fQoKCgoKCgoKI2RlZmluZSBDcXVldWVQdHJEZWZQ cmV2KHByZWZpeCx0eXBlTmFtZSxsaW5rRmllbGQpIGV4dGVybiBpbmxpbmUgdHlwZU5hbWUqIHBy ZWZpeCAjIyBQcmV2KHR5cGVOYW1lKiB0b3AsIHR5cGVOYW1lKiB0Z3QpIHsgaWYodGd0ICE9IE5V TEwpIHsgdHlwZU5hbWUqIHByZXYgPSB0Z3QtPmxpbmtGaWVsZC5ia3dkOyByZXR1cm4gKHByZXYg IT0gdG9wKSA/IHByZXYgOiBOVUxMOyB9IGVsc2UgcmV0dXJuIHRvcDt9CiMgMjE2ICJheGlzL2Nx dWV1ZXAuaCIKI2RlZmluZSBDcXVldWVQdHJEZWZGdW5jdGlvblNldChwcmVmaXgsdHlwZU5hbWUs bGlua0ZpZWxkKSBDcXVldWVQdHJEZWZJbml0KHByZWZpeCwgdHlwZU5hbWUsIGxpbmtGaWVsZCkg Q3F1ZXVlUHRyRGVmSW5zZXJ0KHByZWZpeCwgdHlwZU5hbWUsIGxpbmtGaWVsZCkgQ3F1ZXVlUHRy RGVmQXBwZW5kKHByZWZpeCwgdHlwZU5hbWUsIGxpbmtGaWVsZCkgQ3F1ZXVlUHRyRGVmRGVsZXRl KHByZWZpeCwgdHlwZU5hbWUsIGxpbmtGaWVsZCkgQ3F1ZXVlUHRyRGVmTmV4dChwcmVmaXgsIHR5 cGVOYW1lLCBsaW5rRmllbGQpIENxdWV1ZVB0ckRlZlByZXYocHJlZml4LCB0eXBlTmFtZSwgbGlu a0ZpZWxkKQoKCgoKCgoKCiMgNDg4ICJheGlzL2F4aXNkYmcuaCIgMgojIDEgImF4aXMvbG9nZ2lu Zy5oIiAxCiMgMjcgImF4aXMvbG9nZ2luZy5oIgojZGVmaW5lIF9BWElTX0xPR0dJTkdfSF8gCgoK CgoKCiNkZWZpbmUgY0xvZ0luZm8gMQojZGVmaW5lIGNMb2dTdGF0aXMgMgoKI2RlZmluZSBjTG9n V2FybiAzCiNkZWZpbmUgY0xvZ0VyciA0CiNkZWZpbmUgY0xvZ0ZhdGFsIDUKI2RlZmluZSBjTG9n UmVjb3ZlciA2CgojZGVmaW5lIGNMb2dEYmcgNwoKCgoKI2RlZmluZSBjTG9nQ250bEJlZ2luIDB4 MDAwMTAwMDAKI2RlZmluZSBjTG9nQ250bE91dHB1dCAweDAwMDIwMDAwCiNkZWZpbmUgY0xvZ0Nu dGxTdXBwcmVzcyAweDAwMDMwMDAwCgp0eXBlZGVmIHZvaWQgKCpMb2dXcml0ZUZ1bmMpKGNvbnN0 IHZvaWQqIG1zZywgaW50IG1zZ0xlbik7CnR5cGVkZWYgdm9pZCAoKkxvZ1B1dEZ1bmMpKGludCBs b2dUeXBlLCBjb25zdCB2b2lkKiBtc2csIHZvaWQqIGFyZ3MpOwoKCgoKZXh0ZXJuIGludCBMb2dS ZWdpc3RXcml0ZUZ1bmMoTG9nV3JpdGVGdW5jIHdydEZ1bmMpIGFzbSgiX18iICJMb2dSZWdpc3RX cml0ZUZ1bmMiKTsKZXh0ZXJuIGludCBMb2dSZWdpc3RQdXRGdW5jKExvZ1B1dEZ1bmMgcHV0RnVu YykgYXNtKCJfXyIgIkxvZ1JlZ2lzdFB1dEZ1bmMiKTsKZXh0ZXJuIGludCBMb2dJbml0KHZvaWQp IGFzbSgiX18iICJMb2dJbml0Iik7CmV4dGVybiBpbnQgTG9nUHV0KGludCBsb2dUeXBlLCBjb25z dCB2b2lkKiBmb3JtLCAuLi4pIGFzbSgiX18iICJMb2dQdXQiKTsKCgojIDQ4OSAiYXhpcy9heGlz ZGJnLmgiIDIKCnR5cGVkZWYgc3RydWN0IEF4aXNEZWJ1Z0VudHJ5IHsKICAgIENxdWV1ZVB0ckxp bmsgbGluazsKCiAgICBjb25zdCBjaGFyKiBuYW1lOwogICAgY29uc3QgdW5zaWduZWQqIG1hc2tQ dHI7CgogICAgdTMyIGRlYnVnSWQ7CiMgNTEwICJheGlzL2F4aXNkYmcuaCIKfSBBeGlzRGVidWdF bnRyeTsKCgoKCgoKCgojZGVmaW5lIGNBeGlzRGVidWdNaW5MZXZlbCAwVQojZGVmaW5lIGNBeGlz RGVidWdNYXhMZXZlbCAzMVUKI2RlZmluZSBjQXhpc0RlYnVnTmFtZU1heCAyNTQKI2RlZmluZSBj QXhpc0RlYnVnTGV2ZWxOYW1lIDNVCgpleHRlcm4gdm9pZCBBeGlzRGVidWdFbnRyeVJlZ2lzdChB eGlzRGVidWdFbnRyeSogZW50cnkpIGFzbSgiX18iICJBeGlzRGVidWdFbnRyeVJlZ2lzdCIpOwpl eHRlcm4gdm9pZCBBeGlzRGVidWdPdXRwdXQodW5zaWduZWQgZGVidWdJZCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxldmVsLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciogZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg bGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZ1bmNuYW1lLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZm10LCAuLi4pIGFzbSgiX18i ICJBeGlzRGVidWdPdXRwdXQiKTsKZXh0ZXJuIHZvaWQgQXhpc0RlYnVnU3RhcnQodm9pZCkKICAg IGFzbSgiX18iICJBeGlzRGVidWdTdGFydCIpOwpleHRlcm4gdm9pZCBBeGlzRGVidWdTZXREZWZh dWx0TWFzayh1MzIgbWFzaykKICAgIGFzbSgiX18iICJBeGlzRGVidWdTZXREZWZhdWx0TWFzayIp OwpleHRlcm4gaW50IEF4aXNEZWJ1Z1NldE91dHB1dE1hcHBlZEZpbGUoY29uc3QgY2hhciogbmFt ZSwgdW5zaWduZWQgc2l6ZSkKICAgIGFzbSgiX18iICJBeGlzRGVidWdTZXRPdXRwdXRNYXBwZWRG aWxlIik7CmV4dGVybiBpbnQgQXhpc0RlYnVnU2V0T3V0cHV0U2l6ZSh1bnNpZ25lZCBzaXplKQog ICAgYXNtKCJfXyIgIkF4aXNEZWJ1Z1NldE91dHB1dFNpemUiKTsKZXh0ZXJuIGludCBBeGlzRGVi dWdTZXRPdXRwdXRBcmVhKHZvaWQqIG91dHB1dEFyZWEsIHVuc2lnbmVkIHNpemUpCiAgICBhc20o Il9fIiAiQXhpc0RlYnVnU2V0T3V0cHV0QXJlYSIpOwpleHRlcm4gaW50IEF4aXNEZWJ1Z1NldE91 dHB1dEFwcGVuZEZpbGVCeU5hbWUoY29uc3QgY2hhciogZmlsZW5hbWUpCiAgICBhc20oIl9fIiAi QXhpc0RlYnVnU2V0T3V0cHV0QXBwZW5kRmlsZUJ5TmFtZSIpOwpleHRlcm4gaW50IEF4aXNEZWJ1 Z1NldE91dHB1dEFwcGVuZEZpbGUoaW50IGZkKQogICAgYXNtKCJfXyIgIkF4aXNEZWJ1Z1NldE91 dHB1dEFwcGVuZEZpbGUiKTsKZXh0ZXJuIEF4aXNEZWJ1Z0VudHJ5KiBBeGlzRGVidWdFbnRyeUZp bmQoY29uc3QgY2hhciogdGFyZ2V0TmFtZSkKICAgIGFzbSgiX18iICJBeGlzRGVidWdFbnRyeUZp bmQiKTsKZXh0ZXJuIEF4aXNEZWJ1Z0VudHJ5KiBBeGlzRGVidWdHZXRFbnRyeU5leHQoQXhpc0Rl YnVnRW50cnkqIG5leHQpCiAgICBhc20oIl9fIiAiQXhpc0RlYnVnR2V0RW50cnlOZXh0Iik7CmV4 dGVybiB2b2lkIEF4aXNEZWJ1Z1NldE1hc2soY29uc3QgY2hhciogdGFyZ2V0TmFtZSwgY29uc3Qg Y2hhciogdmFsdWVTdHIpCiAgICBhc20oIl9fIiAiQXhpc0RlYnVnU2V0TWFzayIpOwpleHRlcm4g dm9pZCBBeGlzRGVidWdDbGVhck1hc2soY29uc3QgY2hhciogdGFyZ2V0TmFtZSwgY29uc3QgY2hh ciogdmFsdWVTdHIpCiAgICBhc20oIl9fIiAiQXhpc0RlYnVnQ2xlYXJNYXNrIik7CmV4dGVybiB2 b2lkIEF4aXNEZWJ1Z0dldExldmVsTmFtZShjb25zdCBBeGlzRGVidWdFbnRyeSogZW50cnksIGlu dCBsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGRlc3ROYW1l QXJlYSwgY2hhciogZGVzdFByZWZpeEFyZWEpCiAgICBhc20oIl9fIiAiQXhpc0RlYnVnR2V0TGV2 ZWxOYW1lIik7CmV4dGVybiBjb25zdCBjaGFyKiBBeGlzRGVidWdGaWxlTmFtZShjb25zdCBjaGFy KiBmaWxlTmFtZSkgYXNtKCJfXyIgIkF4aXNEZWJ1Z0ZpbGVOYW1lIik7CgpleHRlcm4gaW50IEF4 aXNDb21tb25Db3JyZWN0TmFtZUxldHRlcihpbnQgY2gpIGFzbSgiX18iICJBeGlzQ29tbW9uQ29y cmVjdE5hbWVMZXR0ZXIiKTsKZXh0ZXJuIGludCBBeGlzQ29tbW9uQ29ycmVjdE5hbWVTdHIoY29u c3Qgdm9pZCogeCkgYXNtKCJfXyIgIkF4aXNDb21tb25Db3JyZWN0TmFtZVN0ciIpOwojIDU4NiAi YXhpcy9heGlzZGJnLmgiCnN0YXRpYyBBeGlzRGVidWdFbnRyeSBzTG9jYWxEZWJ1Z09iaiA9IHsg ezAsIDB9LCAiYXhpcy5hbnkiLCAmZ0F4aXNEZWJ1Z0RlZmF1bHRNYXNrIH07CgoKCiNkZWZpbmUg RGVidWdPYmogc0xvY2FsRGVidWdPYmoKIyA2MTUgImF4aXMvYXhpc2RiZy5oIgpfX2F0dHJpYnV0 ZV9fKChjb25zdHJ1Y3RvcikpIHN0YXRpYyB2b2lkCnNBeGlzRGVidWdPYmplY3RSZWdpc3Qodm9p ZCkKewogICAgQXhpc0RlYnVnRW50cnlSZWdpc3QoJiBzTG9jYWxEZWJ1Z09iaik7Cn0KIyA2Mjkg ImF4aXMvYXhpc2RiZy5oIgoKZXh0ZXJuIGludCBnQXhpc0RlYnVnQWJvcnRPdXRwdXRGZDsKZXh0 ZXJuIHZvaWQgQXhpc0RlYnVnQWJvcnRFcnJvcihjb25zdCBjaGFyKiBtc2csIHVuc2lnbmVkIG1z Z0wpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CgoKCgoKCiMgNzE5ICJheGlzL2F4aXNkYmcu aCIKI2RlZmluZSBjQXhpc0RlYnVnTGV2ZWxOYW1lTWF4IDE1Cgp0eXBlZGVmIHN0cnVjdCBBeGlz RGVidWdMZXZlbE5hbWUgewogICAgQ3F1ZXVlUHRyTGluayBsaW5rOwogICAgdW5zaWduZWQgbGV2 ZWw7CiAgICBjb25zdCBjaGFyKiBuYW1lOwogICAgY29uc3QgY2hhciogcHJlZml4OwogICAgQXhp c0RlYnVnRW50cnkqIGVudHJ5OwoKCgoKCn0gQXhpc0RlYnVnTGV2ZWxOYW1lOwoKZXh0ZXJuIHZv aWQgQXhpc0RlYnVnTGV2ZWxOYW1lUmVnaXN0KEF4aXNEZWJ1Z0xldmVsTmFtZSogZGxuKSBhc20o Il9fIiAiQXhpc0RlYnVnTGV2ZWxOYW1lUmVnaXN0Iik7CgoKI2RlZmluZSBBeGlzRGVidWdMZXZl bE5hbWVEZWZpbmUobGV2ZWxWYWx1ZSxsZXZlbE5hbWUscHJlZml4KSBzdGF0aWMgQXhpc0RlYnVn TGV2ZWxOYW1lIHNMb2NhbERlYnVnTGV2ZWxOYW1lXyAjIyBsZXZlbFZhbHVlID0geyBsZXZlbFZh bHVlLCBsZXZlbE5hbWUsIHByZWZpeCwgJkRlYnVnT2JqIH07X19hdHRyaWJ1dGVfXygoY29uc3Ry dWN0b3IpKSBzdGF0aWMgdm9pZCBzTG9jYWxEZWJ1Z0xldmVsTmFtZVJlZ2lzdF8gIyMgbGV2ZWxW YWx1ZSB7IEF4aXNEZWJ1Z0xldmVsTmFtZVJlZ2lzdChBeGlzRGVidWdMZXZlbE5hbWUqIGRsbik7 fQojIDM2ICJheGlzL2F4aXMuaCIgMgoKCgoKCgoKCiMgODEgImF4aXMvYXhpcy5oIgojZGVmaW5l IEVudGVyKCkgCiNkZWZpbmUgUmV0dXJuKHgpIHJldHVybiAoeCkKI2RlZmluZSBSZXR1cm5Wb2lk KCkgcmV0dXJuCiNkZWZpbmUgQXNzZXJ0KGV4LGZvcm0uLi4pIAoKCgojZGVmaW5lIEFzc2VydFgo ZXgsZm9ybWF0Li4uKSBkbyB7aWYoIShleCkpIEF4aXNBYm9ydCgiJXM6JSRcbiIsICNleCwgZm9y bWF0KTt9IHdoaWxlKDApCiNkZWZpbmUgTkFzc2VydFgoZXgsZm9ybWF0Li4uKSAKCgojZGVmaW5l IGNTdGRpbiAwCiNkZWZpbmUgY1N0ZG91dCAxCiNkZWZpbmUgY1N0ZGVyciAyCgpleHRlcm4gQ2hy KiBnQ21kTmFtZSBhc20oIl9fIiAiZ0NtZE5hbWUiKTsKZXh0ZXJuIHMzMiBnTXlQaWQgYXNtKCJf XyIgImdNeVBpZCIpOwpleHRlcm4gV29yZCBnUGFnZVN6IGFzbSgiX18iICJnUGFnZVN6Iik7CmV4 dGVybiBXb3JkIGdQYWdlTWFzayBhc20oIl9fIiAiZ1BhZ2VNYXNrIik7CmV4dGVybiBXb3JkIGdQ YWdlT2Zmc2V0IGFzbSgiX18iICJnUGFnZU9mZnNldCIpOwoKZXh0ZXJuIHZvaWQgQXhpc0luaXRT eXNpbmZvKHZvaWQpIGFzbSgiX18iICJBeGlzSW5pdFN5c2luZm8iKTsKZXh0ZXJuIHZvaWQgQXhp c0luaXRQcm9jaW5mbyh2b2lkKSBhc20oIl9fIiAiQXhpc0luaXRQcm9jaW5mbyIpOwpleHRlcm4g aW50IEF4aXNJbml0KGludCBhcmdjLCBjaGFyKiBhcmd2W10pIGFzbSgiX18iICJBeGlzSW5pdCIp OwpleHRlcm4gdm9pZCBBeGlzRXhpdChpbnQgZXhpdENvZGUpIGFzbSgiX18iICJBeGlzRXhpdCIp IF9fYXR0cmlidXRlX18gKChub3JldHVybikpOwpleHRlcm4gdm9pZCBBeGlzVGhyRXhpdCh2b2lk ICpfX3JldHZhbCkgYXNtKCJfXyIgIkF4aXNUaHJFeGl0IikgX19hdHRyaWJ1dGVfXyAoKF9fbm9y ZXR1cm5fXykpOwpleHRlcm4gaW50IEF4aXNBYm9ydChjb25zdCB2b2lkKiBmb3JtLCAuLi4pIGFz bSgiX18iICJBeGlzQWJvcnQiKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKZXh0ZXJuIGlu dCBBeGlzUHJmKHZvaWQqIHAsIGNvbnN0IHZvaWQqIGZvcm0sIGludCBsLCB1bnNpZ25lZCBsb25n KiBhcmdzLCB1bnNpZ25lZCBsb25nKiBhcmducCkgYXNtKCJfXyIgIkF4aXNQcmYiKTsKZXh0ZXJu IExlbiBBeGlzU3ByaW50Zih2b2lkKiBidWYsIFN6IHN6LCBjb25zdCB2b2lkKiBmb3JtLCAuLi4p IGFzbSgiX18iICJBeGlzU3ByaW50ZiIpOwpleHRlcm4gTGVuIEF4aXNWc3ByaW50Zih2b2lkKiBi dWYsIFN6IHN6LCBjb25zdCB2b2lkKiBmb3JtLCB2b2lkKiBhcmdzKQogICAgYXNtKCJfXyIgIkF4 aXNWc3ByaW50ZiIpOwoKCnR5cGVkZWYgTGVuICgqIEF4aXNQcmZPdXRwdXRGdW5jKShjb25zdCB2 b2lkKiBzdHIpOwoKdHlwZWRlZiBMZW4gKCogQXhpc1ByZkNhbGxCYWNrRnVuYykoQXhpc1ByZk91 dHB1dEZ1bmMgb3V0cHV0LCBjb25zdCB2b2lkKiBvcHRzdHIsIHZvaWQqIGFyZyk7CiMgMjE2ICJh eGlzL2F4aXMuaCIKIyAxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAxIDMKIyAxNiAiL3Vzci9p bmNsdWRlL3B0aHJlYWQuaCIgMwojZGVmaW5lIF9QVEhSRUFEX0ggMQoKCgojIDEgIi91c3IvaW5j bHVkZS9zY2hlZC5oIiAxIDMKIyAyMSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDMKI2RlZmluZSBf U0NIRURfSCAxCgoKCgoKCiNkZWZpbmUgX19uZWVkX3RpbWVzcGVjIAojIDEgIi91c3IvaW5jbHVk ZS90aW1lLmgiIDEgMwojIDExMyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwojdW5kZWYgX19uZWVk X3RpbWVzcGVjCiMgMzAgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCgojIDEgIi91c3IvaW5j bHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAz CiNkZWZpbmUgU0NIRURfT1RIRVIgMAojZGVmaW5lIFNDSEVEX0ZJRk8gMQojZGVmaW5lIFNDSEVE X1JSIDIKCgoKI2RlZmluZSBDU0lHTkFMIDB4MDAwMDAwZmYKI2RlZmluZSBDTE9ORV9WTSAweDAw MDAwMTAwCiNkZWZpbmUgQ0xPTkVfRlMgMHgwMDAwMDIwMAojZGVmaW5lIENMT05FX0ZJTEVTIDB4 MDAwMDA0MDAKI2RlZmluZSBDTE9ORV9TSUdIQU5EIDB4MDAwMDA4MDAKI2RlZmluZSBDTE9ORV9Q SUQgMHgwMDAwMTAwMAojZGVmaW5lIENMT05FX1BUUkFDRSAweDAwMDAyMDAwCiNkZWZpbmUgQ0xP TkVfVkZPUksgMHgwMDAwNDAwMAoKCgoKc3RydWN0IHNjaGVkX3BhcmFtCiAgewogICAgaW50IF9f c2NoZWRfcHJpb3JpdHk7CiAgfTsKCgoKCgpleHRlcm4gaW50IGNsb25lIChpbnQgKCpfX2ZuKSAo dm9pZCAqX19hcmcpLCB2b2lkICpfX2NoaWxkX3N0YWNrLAogICAgICAgICAgICAgICAgICBpbnQg X19mbGFncywgdm9pZCAqX19hcmcpIDsKCgoKIyAzMyAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIg MwoKI2RlZmluZSBzY2hlZF9wcmlvcml0eSBfX3NjaGVkX3ByaW9yaXR5CgoKCgoKZXh0ZXJuIGlu dCBzY2hlZF9zZXRwYXJhbSAoX19waWRfdCBfX3BpZCwgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFy YW0gKl9fcGFyYW0pCiAgICAgOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0cGFyYW0gKF9fcGlkX3Qg X19waWQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgOwoKCmV4dGVybiBpbnQgc2NoZWRf c2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkLCBpbnQgX19wb2xpY3ksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgOwoK CmV4dGVybiBpbnQgc2NoZWRfZ2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkKSA7CgoKZXh0ZXJu IGludCBzY2hlZF95aWVsZCAodm9pZCkgOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5 X21heCAoaW50IF9fYWxnb3JpdGhtKSA7CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRfcHJpb3JpdHlf bWluIChpbnQgX19hbGdvcml0aG0pIDsKCgpleHRlcm4gaW50IHNjaGVkX3JyX2dldF9pbnRlcnZh bCAoX19waWRfdCBfX3BpZCwgc3RydWN0IHRpbWVzcGVjICpfX3QpIDsKCgojIDIxICIvdXNyL2lu Y2x1ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAyNyAi L3Vzci9pbmNsdWRlL3RpbWUuaCIgMwojZGVmaW5lIF9USU1FX0ggMQoKCgoKCgoKCiNkZWZpbmUg X19uZWVkX3NpemVfdCAKI2RlZmluZSBfX25lZWRfTlVMTCAKIyAxICIvdXNyL2xvY2FsL3NuYXAv Z2NjLTIwMDIwODE5L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4xL2luY2x1ZGUv c3RkZGVmLmgiIDEgMwojIDIyMSAiL3Vzci9sb2NhbC9zbmFwL2djYy0yMDAyMDgxOS9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCiN1bmRlZiBf X25lZWRfc2l6ZV90CiMgMzY0ICIvdXNyL2xvY2FsL3NuYXAvZ2NjLTIwMDIwODE5L2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKI3VuZGVmIE5V TEwKCgoKCiNkZWZpbmUgTlVMTCAoKHZvaWQgKikwKQoKCgoKCiN1bmRlZiBfX25lZWRfTlVMTAoj IDM5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90 aW1lLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDMKI2RlZmluZSBfQklU U19USU1FX0ggMQoKCgoKCgoKI2RlZmluZSBDTE9DS1NfUEVSX1NFQyAxMDAwMDAwbAoKCgoKCmV4 dGVybiBsb25nIGludCBfX3N5c2NvbmYgKGludCk7CiNkZWZpbmUgQ0xLX1RDSyAoKF9fY2xvY2tf dCkgX19zeXNjb25mICgyKSkKCgoKCiNkZWZpbmUgQ0xPQ0tfUkVBTFRJTUUgMAoKI2RlZmluZSBD TE9DS19QUk9DRVNTX0NQVVRJTUVfSUQgMgoKI2RlZmluZSBDTE9DS19USFJFQURfQ1BVVElNRV9J RCAzCgoKI2RlZmluZSBUSU1FUl9BQlNUSU1FIDEKIyA0MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg MiAzCiMgNTQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKI2RlZmluZSBfX2Nsb2NrX3RfZGVmaW5l ZCAxCgoKCgp0eXBlZGVmIF9fY2xvY2tfdCBjbG9ja190OwojIDExOCAiL3Vzci9pbmNsdWRlL3Rp bWUuaCIgMwpzdHJ1Y3QgdG0KewogIGludCB0bV9zZWM7CiAgaW50IHRtX21pbjsKICBpbnQgdG1f aG91cjsKICBpbnQgdG1fbWRheTsKICBpbnQgdG1fbW9uOwogIGludCB0bV95ZWFyOwogIGludCB0 bV93ZGF5OwogIGludCB0bV95ZGF5OwogIGludCB0bV9pc2RzdDsKCgogIGxvbmcgaW50IHRtX2dt dG9mZjsKICBfX2NvbnN0IGNoYXIgKnRtX3pvbmU7CgoKCgp9OwoKCgoKc3RydWN0IGl0aW1lcnNw ZWMKICB7CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7CiAgICBzdHJ1Y3QgdGltZXNw ZWMgaXRfdmFsdWU7CiAgfTsKCgpzdHJ1Y3Qgc2lnZXZlbnQ7CiMgMTYzICIvdXNyL2luY2x1ZGUv dGltZS5oIiAzCmV4dGVybiBjbG9ja190IGNsb2NrICh2b2lkKSA7CgoKZXh0ZXJuIHRpbWVfdCB0 aW1lICh0aW1lX3QgKl9fdGltZXIpIDsKCgpleHRlcm4gZG91YmxlIGRpZmZ0aW1lICh0aW1lX3Qg X190aW1lMSwgdGltZV90IF9fdGltZTApCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwoKCmV4dGVybiB0aW1lX3QgbWt0aW1lIChzdHJ1Y3QgdG0gKl9fdHApIDsKCgoKCgpleHRlcm4g c2l6ZV90IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwK ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0 LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBf X3RwKSA7CiMgMTk0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBzdHJ1Y3QgdG0gKmdt dGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIDsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9j YWx0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgOwoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAq Z210aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgOwoKCgpleHRlcm4g c3RydWN0IHRtICpsb2NhbHRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1l ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBf X3RwKSA7CgoKCgpleHRlcm4gY2hhciAqYXNjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHAp IDsKCgpleHRlcm4gY2hhciAqY3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSA7CgoKCgoK CmV4dGVybiBjaGFyICphc2N0aW1lX3IgKF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9f dHAsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIDsKCgpl eHRlcm4gY2hhciAqY3RpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwK ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIDsKCgoKCmV4dGVy biBjaGFyICpfX3R6bmFtZVsyXTsKZXh0ZXJuIGludCBfX2RheWxpZ2h0OwpleHRlcm4gbG9uZyBp bnQgX190aW1lem9uZTsKCgoKCmV4dGVybiBjaGFyICp0em5hbWVbMl07CgoKCmV4dGVybiB2b2lk IHR6c2V0ICh2b2lkKSA7CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCB0 aW1lem9uZTsKCgoKCgpleHRlcm4gaW50IHN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX193aGVuKSA7 CgoKCgoKI2RlZmluZSBfX2lzbGVhcCh5ZWFyKSAoKHllYXIpICUgNCA9PSAwICYmICgoeWVhcikg JSAxMDAgIT0gMCB8fCAoeWVhcikgJSA0MDAgPT0gMCkpCiMgMjcxICIvdXNyL2luY2x1ZGUvdGlt ZS5oIiAzCmV4dGVybiB0aW1lX3QgdGltZWdtIChzdHJ1Y3QgdG0gKl9fdHApIDsKCgpleHRlcm4g dGltZV90IHRpbWVsb2NhbCAoc3RydWN0IHRtICpfX3RwKSA7CgoKZXh0ZXJuIGludCBkeXNpemUg KGludCBfX3llYXIpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50 IG5hbm9zbGVlcCAoX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3RpbWUsCiAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSA7CgoKCmV4 dGVybiBpbnQgY2xvY2tfZ2V0cmVzIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVz cGVjICpfX3JlcykgOwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0dGltZSAoY2xvY2tpZF90IF9fY2xv Y2tfaWQsIHN0cnVjdCB0aW1lc3BlYyAqX190cCkgOwoKCmV4dGVybiBpbnQgY2xvY2tfc2V0dGlt ZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RwKQog ICAgIDsKIyAzMDkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIGludCB0aW1lcl9jcmVh dGUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHNpZ2V2ZW50ICpfX3Jlc3RyaWN0IF9fZXZwLAogICAgICAgICAgICAgICAgICAgICAgICAgdGlt ZXJfdCAqX19yZXN0cmljdCBfX3RpbWVyaWQpIDsKCgpleHRlcm4gaW50IHRpbWVyX2RlbGV0ZSAo dGltZXJfdCBfX3RpbWVyaWQpIDsKCgpleHRlcm4gaW50IHRpbWVyX3NldHRpbWUgKHRpbWVyX3Qg X190aW1lcmlkLCBpbnQgX19mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9fdmFsdWUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX19vdmFsdWUpIDsKCgpleHRl cm4gaW50IHRpbWVyX2dldHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBzdHJ1Y3QgaXRpbWVyc3Bl YyAqX192YWx1ZSkKICAgICA7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXRvdmVycnVuICh0aW1lcl90 IF9fdGltZXJpZCkgOwojIDM2MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKIyAyMiAiL3Vzci9p bmNsdWRlL3B0aHJlYWQuaCIgMiAzCgojZGVmaW5lIF9fbmVlZF9zaWdzZXRfdCAKIyAxICIvdXNy L2luY2x1ZGUvc2lnbmFsLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKCgoj IDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3Np Z25hbC5oIiAyIDMKIyA1MCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCiN1bmRlZiBfX25lZWRf c2lnc2V0X3QKIyAzNzEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwoKIyAyNSAiL3Vzci9pbmNs dWRlL3B0aHJlYWQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgi IDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy9pbml0c3Bpbi5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvaW5pdHNwaW4uaCIg MwojZGVmaW5lIF9fQVRPTUlDX0xPQ0tfSU5JVCAwCgoKI2RlZmluZSBfX0xPQ0tfSU5JVElBTEla RVIgeyAwLCAwIH0KI2RlZmluZSBfX0FUT01JQ19JTklUSUFMSVpFUiB7IDAsIDAgfQojIDI3ICIv dXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCgoKCgoKI2RlZmluZSBQVEhSRUFEX01VVEVYX0lO SVRJQUxJWkVSIHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCBfX0xPQ0tfSU5JVElB TElaRVJ9CiMgNDQgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKI2RlZmluZSBQVEhSRUFEX0NP TkRfSU5JVElBTElaRVIge19fTE9DS19JTklUSUFMSVpFUiwgMH0KIyA1OSAiL3Vzci9pbmNsdWRl L3B0aHJlYWQuaCIgMwplbnVtCnsKICBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSwKI2RlZmluZSBQ VEhSRUFEX0NSRUFURV9KT0lOQUJMRSBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRQogIFBUSFJFQURf Q1JFQVRFX0RFVEFDSEVECiNkZWZpbmUgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQgUFRIUkVBRF9D UkVBVEVfREVUQUNIRUQKfTsKCmVudW0KewogIFBUSFJFQURfSU5IRVJJVF9TQ0hFRCwKI2RlZmlu ZSBQVEhSRUFEX0lOSEVSSVRfU0NIRUQgUFRIUkVBRF9JTkhFUklUX1NDSEVECiAgUFRIUkVBRF9F WFBMSUNJVF9TQ0hFRAojZGVmaW5lIFBUSFJFQURfRVhQTElDSVRfU0NIRUQgUFRIUkVBRF9FWFBM SUNJVF9TQ0hFRAp9OwoKZW51bQp7CiAgUFRIUkVBRF9TQ09QRV9TWVNURU0sCiNkZWZpbmUgUFRI UkVBRF9TQ09QRV9TWVNURU0gUFRIUkVBRF9TQ09QRV9TWVNURU0KICBQVEhSRUFEX1NDT1BFX1BS T0NFU1MKI2RlZmluZSBQVEhSRUFEX1NDT1BFX1BST0NFU1MgUFRIUkVBRF9TQ09QRV9QUk9DRVNT Cn07CgplbnVtCnsKICBQVEhSRUFEX01VVEVYX1RJTUVEX05QLAogIFBUSFJFQURfTVVURVhfUkVD VVJTSVZFX05QLAogIFBUSFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQVEhSRUFEX01VVEVY X0FEQVBUSVZFX05QCiMgMTAwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCn07CgplbnVtCnsK ICBQVEhSRUFEX1BST0NFU1NfUFJJVkFURSwKI2RlZmluZSBQVEhSRUFEX1BST0NFU1NfUFJJVkFU RSBQVEhSRUFEX1BST0NFU1NfUFJJVkFURQogIFBUSFJFQURfUFJPQ0VTU19TSEFSRUQKI2RlZmlu ZSBQVEhSRUFEX1BST0NFU1NfU0hBUkVEIFBUSFJFQURfUFJPQ0VTU19TSEFSRUQKfTsKIyAxMjAg Ii91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKI2RlZmluZSBQVEhSRUFEX09OQ0VfSU5JVCAwCiMg MTMxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCnN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1 ZmZlcgp7CiAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKik7CiAgdm9pZCAqX19hcmc7CiAgaW50 IF9fY2FuY2VsdHlwZTsKICBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fcHJldjsK fTsKCgoKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfRU5BQkxFLAojZGVmaW5lIFBUSFJFQURfQ0FO Q0VMX0VOQUJMRSBQVEhSRUFEX0NBTkNFTF9FTkFCTEUKICBQVEhSRUFEX0NBTkNFTF9ESVNBQkxF CiNkZWZpbmUgUFRIUkVBRF9DQU5DRUxfRElTQUJMRSBQVEhSRUFEX0NBTkNFTF9ESVNBQkxFCn07 CmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0RFRkVSUkVELAojZGVmaW5lIFBUSFJFQURfQ0FOQ0VM X0RFRkVSUkVEIFBUSFJFQURfQ0FOQ0VMX0RFRkVSUkVECiAgUFRIUkVBRF9DQU5DRUxfQVNZTkNI Uk9OT1VTCiNkZWZpbmUgUFRIUkVBRF9DQU5DRUxfQVNZTkNIUk9OT1VTIFBUSFJFQURfQ0FOQ0VM X0FTWU5DSFJPTk9VUwp9OwojZGVmaW5lIFBUSFJFQURfQ0FOQ0VMRUQgKCh2b2lkICopIC0xKQoK CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0ZSAocHRocmVhZF90ICpfX3Jlc3RyaWN0IF9f dGhyZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRfYXR0cl90 ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKCpf X3N0YXJ0X3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk ICpfX3Jlc3RyaWN0IF9fYXJnKSA7CgoKZXh0ZXJuIHB0aHJlYWRfdCBwdGhyZWFkX3NlbGYgKHZv aWQpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfZXF1YWwgKHB0aHJlYWRfdCBfX3RocmVhZDEsIHB0 aHJlYWRfdCBfX3RocmVhZDIpIDsKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgKHZvaWQgKl9f cmV0dmFsKQogICAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiBp bnQgcHRocmVhZF9qb2luIChwdGhyZWFkX3QgX190aCwgdm9pZCAqKl9fdGhyZWFkX3JldHVybikg OwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2ggKHB0aHJlYWRfdCBfX3RoKSA7CgoKCgoK CgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9pbml0IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSA7 CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZGVzdHJveSAocHRocmVhZF9hdHRyX3QgKl9fYXR0 cikgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlIChwdGhyZWFkX2F0 dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IF9fZGV0YWNoc3RhdGUpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRkZXRhY2hzdGF0 ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50ICpfX2RldGFjaHN0YXRlKSA7CgoKZXh0ZXJuIGludCBwdGhy ZWFkX2F0dHJfc2V0c2NoZWRwYXJhbSAocHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBz Y2hlZF9wYXJhbSAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3BhcmFtKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwYXJhbSAo X19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0cmljdCBfX3BhcmFtKQogICAgIDsKCgpl eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeSAocHRocmVhZF9hdHRyX3QgKl9f YXR0ciwgaW50IF9fcG9saWN5KQogICAgIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRz Y2hlZHBvbGljeSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19w b2xpY3kpCiAgICAgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZCAo cHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgX19pbmhlcml0KSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0aW5o ZXJpdHNjaGVkIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19p bmhlcml0KQogICAgIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY29wZSAocHRocmVh ZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fc2NvcGUpCiAgICAgOwoKCmV4dGVybiBpbnQgcHRocmVh ZF9hdHRyX2dldHNjb3BlIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3Nj b3BlKSA7CiMgMjYwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVh ZF9hdHRyX3NldHN0YWNrYWRkciAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX3N0YWNrYWRkcikgOwoKCmV4dGVybiBp bnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkciAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19y ZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgdm9p ZCAqKl9fcmVzdHJpY3QgX19zdGFja2FkZHIpCiAgICAgOwojIDI4NCAiL3Vzci9pbmNsdWRlL3B0 aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUgKHB0aHJlYWRf YXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IF9fc3RhY2tzaXplKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2tzaXpl IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19hdHRyLCBzaXplX3QgKl9fcmVzdHJpY3QgX19zdGFja3NpemUp CiAgICAgOwojIDMwMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJl YWRfc2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwgaW50IF9fcG9saWN5 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRf cGFyYW0gKl9fcGFyYW0pCiAgICAgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRzY2hlZHBhcmFt IChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAgOwoj IDMzMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhf aW5pdCAocHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJpY3QK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbXV0ZXhfYXR0cikgOwoKCmV4dGVybiBp bnQgcHRocmVhZF9tdXRleF9kZXN0cm95IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIDsKCgpl eHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4 KSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2xvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19t dXRleCkgOwojIDM1MiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJl YWRfbXV0ZXhfdW5sb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIDsKCgoKCgoKZXh0ZXJu IGludCBwdGhyZWFkX211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIp IDsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhh dHRyX3QgKl9fYXR0cikgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cHNoYXJl ZCAoX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSA7CgoKZXh0ZXJu IGludCBwdGhyZWFkX211dGV4YXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX211dGV4YXR0cl90ICpf X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNo YXJlZCkgOwojIDM5MCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJl YWRfY29uZF9pbml0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICpfX3Jlc3Ry aWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uZF9hdHRyKSA7CgoKZXh0ZXJu IGludCBwdGhyZWFkX2NvbmRfZGVzdHJveSAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9jb25kX3NpZ25hbCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgOwoK CmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCAocHRocmVhZF9jb25kX3QgKl9fY29u ZCkgOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF93YWl0IChwdGhyZWFkX2NvbmRfdCAqX19y ZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0 ZXhfdCAqX19yZXN0cmljdCBfX211dGV4KSA7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRf dGltZWR3YWl0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0 ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGlt ZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fi c3RpbWUpIDsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9pbml0IChwdGhyZWFkX2Nv bmRhdHRyX3QgKl9fYXR0cikgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95 IChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25k YXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQp IDsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9jb25k YXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgX19wc2hhcmVkKSA7CiMgNTU2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBp bnQgcHRocmVhZF9rZXlfY3JlYXRlIChwdGhyZWFkX2tleV90ICpfX2tleSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX2Rlc3RyX2Z1bmN0aW9uKSAodm9pZCAqKSkgOwoK CmV4dGVybiBpbnQgcHRocmVhZF9rZXlfZGVsZXRlIChwdGhyZWFkX2tleV90IF9fa2V5KSA7CgoK ZXh0ZXJuIGludCBwdGhyZWFkX3NldHNwZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19wb2ludGVyKSA7CgoK ZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXkpIDsK IyA1NzYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX29uY2Ug KHB0aHJlYWRfb25jZV90ICpfX29uY2VfY29udHJvbCwKICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKCpfX2luaXRfcm91dGluZSkgKHZvaWQpKSA7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVh ZF9zZXRjYW5jZWxzdGF0ZSAoaW50IF9fc3RhdGUsIGludCAqX19vbGRzdGF0ZSkgOwoKCgpleHRl cm4gaW50IHB0aHJlYWRfc2V0Y2FuY2VsdHlwZSAoaW50IF9fdHlwZSwgaW50ICpfX29sZHR5cGUp IDsKCgpleHRlcm4gaW50IHB0aHJlYWRfY2FuY2VsIChwdGhyZWFkX3QgX190aHJlYWQpIDsKCgoK CmV4dGVybiB2b2lkIHB0aHJlYWRfdGVzdGNhbmNlbCAodm9pZCkgOwojIDYwNiAiL3Vzci9pbmNs dWRlL3B0aHJlYWQuaCIgMwojZGVmaW5lIHB0aHJlYWRfY2xlYW51cF9wdXNoKHJvdXRpbmUsYXJn KSB7IHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciBfYnVmZmVyOyBfcHRocmVhZF9jbGVh bnVwX3B1c2ggKCZfYnVmZmVyLCAocm91dGluZSksIChhcmcpKTsKCgoKZXh0ZXJuIHZvaWQgX3B0 aHJlYWRfY2xlYW51cF9wdXNoIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVm ZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX3JvdXRpbmUp ICh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fYXJn KSA7CgoKCgojZGVmaW5lIHB0aHJlYWRfY2xlYW51cF9wb3AoZXhlY3V0ZSkgX3B0aHJlYWRfY2xl YW51cF9wb3AgKCZfYnVmZmVyLCAoZXhlY3V0ZSkpOyB9CgoKZXh0ZXJuIHZvaWQgX3B0aHJlYWRf Y2xlYW51cF9wb3AgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19leGVjdXRlKSA7CiMgNjU1ICIv dXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lndGhyZWFk LmgiIDEgMwojIDIxICIvdXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaCIgMwojZGVmaW5lIF9C SVRTX1NJR1RIUkVBRF9IIDEKIyAzMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lndGhyZWFkLmgiIDMK ZXh0ZXJuIGludCBwdGhyZWFkX3NpZ21hc2sgKGludCBfX2hvdywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX25ld21hc2ssCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fb2xkbWFzayk7 CgoKZXh0ZXJuIGludCBwdGhyZWFkX2tpbGwgKHB0aHJlYWRfdCBfX3RocmVhZCwgaW50IF9fc2ln bm8pIDsKIyA2NTYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwojIDY3MSAiL3Vzci9pbmNs dWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVw YXJlKSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX3BhcmVudCkg KHZvaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19jaGlsZCkgKHZvaWQp KSA7CgoKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2tpbGxfb3RoZXJfdGhyZWFkc19ucCAodm9pZCkg OwoKCiMgMjE3ICJheGlzL2F4aXMuaCIgMgp0eXBlZGVmIHB0aHJlYWRfdCBBeGlzVGhyZWFkOwoj IDMxMCAiYXhpcy9heGlzLmgiCiNkZWZpbmUgdGhyX2V4aXQocCkgQXhpc1RockV4aXQocCkKI2Rl ZmluZSBwdGhyZWFkX2V4aXQocCkgQXhpc1RockV4aXQocCkKIyAzMzMgImF4aXMvYXhpcy5oIgoK IyAyNCAiLi4vLi4vc3JjL3NkYm0udjAvc2RibWZsZHUuYyIgMgojIDEgImF4aXMvYXRpbWUuaCIg MQojIDI3ICJheGlzL2F0aW1lLmgiCiNkZWZpbmUgX0FYSVNfQVRJTUVfSF8gCgoKCiMgMSAiL3Vz ci9pbmNsdWRlL3N5cy90aW1lLmgiIDEgMwojIDIwICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIg MwojZGVmaW5lIF9TWVNfVElNRV9IIDEKCgoKCiNkZWZpbmUgX19uZWVkX3RpbWVfdCAKCiNkZWZp bmUgX19uZWVkX3RpbWV2YWwgCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA2 MCAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAzCiN1bmRlZiBfX25lZWRfdGltZXZhbAojIDI5 ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzCiMgMzggIi91c3IvaW5jbHVkZS9zeXMvdGlt ZS5oIiAzCgojIDU2ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXpvbmUK ICB7CiAgICBpbnQgdHpfbWludXRlc3dlc3Q7CiAgICBpbnQgdHpfZHN0dGltZTsKICB9OwoKdHlw ZWRlZiBzdHJ1Y3QgdGltZXpvbmUgKl9fcmVzdHJpY3QgX190aW1lem9uZV9wdHJfdDsKIyA3MiAi L3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMKZXh0ZXJuIGludCBnZXR0aW1lb2ZkYXkgKHN0cnVj dCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdHYsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Rp bWV6b25lX3B0cl90IF9fdHopIDsKCgoKCmV4dGVybiBpbnQgc2V0dGltZW9mZGF5IChfX2NvbnN0 IHN0cnVjdCB0aW1ldmFsICpfX3R2LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBz dHJ1Y3QgdGltZXpvbmUgKl9fdHopIDsKCgoKCgpleHRlcm4gaW50IGFkanRpbWUgKF9fY29uc3Qg c3RydWN0IHRpbWV2YWwgKl9fZGVsdGEsCiAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2 YWwgKl9fb2xkZGVsdGEpIDsKCgoKCmVudW0gX19pdGltZXJfd2hpY2gKICB7CgogICAgSVRJTUVS X1JFQUwgPSAwLAojZGVmaW5lIElUSU1FUl9SRUFMIElUSU1FUl9SRUFMCgogICAgSVRJTUVSX1ZJ UlRVQUwgPSAxLAojZGVmaW5lIElUSU1FUl9WSVJUVUFMIElUSU1FUl9WSVJUVUFMCgoKICAgIElU SU1FUl9QUk9GID0gMgojZGVmaW5lIElUSU1FUl9QUk9GIElUSU1FUl9QUk9GCiAgfTsKCgoKc3Ry dWN0IGl0aW1lcnZhbAogIHsKCiAgICBzdHJ1Y3QgdGltZXZhbCBpdF9pbnRlcnZhbDsKCiAgICBz dHJ1Y3QgdGltZXZhbCBpdF92YWx1ZTsKICB9OwoKCgoKCgp0eXBlZGVmIGludCBfX2l0aW1lcl93 aGljaF90OwoKCgoKZXh0ZXJuIGludCBnZXRpdGltZXIgKF9faXRpbWVyX3doaWNoX3QgX193aGlj aCwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpdGltZXJ2YWwgKl9fdmFsdWUpIDsKCgoK CmV4dGVybiBpbnQgc2V0aXRpbWVyIChfX2l0aW1lcl93aGljaF90IF9fd2hpY2gsCiAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBpdGltZXJ2YWwgKl9fcmVzdHJpY3QgX19uZXcs CiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVydmFsICpfX3Jlc3RyaWN0IF9fb2xk KSA7CgoKCmV4dGVybiBpbnQgdXRpbWVzIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19jb25zdCBz dHJ1Y3QgdGltZXZhbCBfX3R2cFsyXSkKICAgICA7CgoKCgoKI2RlZmluZSB0aW1lcmlzc2V0KHR2 cCkgKCh0dnApLT50dl9zZWMgfHwgKHR2cCktPnR2X3VzZWMpCiNkZWZpbmUgdGltZXJjbGVhcih0 dnApICgodHZwKS0+dHZfc2VjID0gKHR2cCktPnR2X3VzZWMgPSAwKQojZGVmaW5lIHRpbWVyY21w KGEsYixDTVApICgoKGEpLT50dl9zZWMgPT0gKGIpLT50dl9zZWMpID8gKChhKS0+dHZfdXNlYyBD TVAgKGIpLT50dl91c2VjKSA6ICgoYSktPnR2X3NlYyBDTVAgKGIpLT50dl9zZWMpKQoKCgojZGVm aW5lIHRpbWVyYWRkKGEsYixyZXN1bHQpIGRvIHsgKHJlc3VsdCktPnR2X3NlYyA9IChhKS0+dHZf c2VjICsgKGIpLT50dl9zZWM7IChyZXN1bHQpLT50dl91c2VjID0gKGEpLT50dl91c2VjICsgKGIp LT50dl91c2VjOyBpZiAoKHJlc3VsdCktPnR2X3VzZWMgPj0gMTAwMDAwMCkgeyArKyhyZXN1bHQp LT50dl9zZWM7IChyZXN1bHQpLT50dl91c2VjIC09IDEwMDAwMDA7IH0gfSB3aGlsZSAoMCkKIyAx NjAgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzCiNkZWZpbmUgdGltZXJzdWIoYSxiLHJlc3Vs dCkgZG8geyAocmVzdWx0KS0+dHZfc2VjID0gKGEpLT50dl9zZWMgLSAoYiktPnR2X3NlYzsgKHJl c3VsdCktPnR2X3VzZWMgPSAoYSktPnR2X3VzZWMgLSAoYiktPnR2X3VzZWM7IGlmICgocmVzdWx0 KS0+dHZfdXNlYyA8IDApIHsgLS0ocmVzdWx0KS0+dHZfc2VjOyAocmVzdWx0KS0+dHZfdXNlYyAr PSAxMDAwMDAwOyB9IH0gd2hpbGUgKDApCiMgMTcxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIg MwoKIyAzMiAiYXhpcy9hdGltZS5oIiAyCgoKI2RlZmluZSBBdGltZUNhdGhvcmljQ2FsZW5kYXIg MQojZGVmaW5lIEF0aW1lTm9uZVByZXB0aWNDYWxlbmRhciAxCiNkZWZpbmUgQXRpbWVQcm90ZXN0 YW50Q2FsZW5kYXIgMAojZGVmaW5lIEF0aW1lUHJlcHRpY0NhbGVuZGFyIDAKIyA1NCAiYXhpcy9h dGltZS5oIgp0eXBlZGVmIHM2NCBBdGltZTsKCiNkZWZpbmUgY0F0aW1lTWF4IDQ2NDI2OTEwMzk5 OTk5OTk5OUxMCiNkZWZpbmUgY0F0aW1lSW5maW5pdHkgMHg3RkZGRkZGRkZGRkZGRkZGTEwKI2Rl ZmluZSBjQXRpbWVPcmlnaW5lVVRDIDIxMDg2NjgwMzIwMDAwMDAwMExMCgojZGVmaW5lIGNBdGlt ZTFTZWMgKDEwMDAwMDBMTCkKI2RlZmluZSBBdGltZVRvU2VjKGF0aW1lKSAoKGF0aW1lKS9jQXRp bWUxU2VjKQojZGVmaW5lIEF0aW1lRnJvbVNlYyhzZWMpICgoQXRpbWUpKChzZWMpKmNBdGltZTFT ZWMpKQojZGVmaW5lIGNBdGltZTFNaW5CeVNlYyAoNjBMTCkKI2RlZmluZSBjQXRpbWUxTWluIChj QXRpbWUxU2VjICogY0F0aW1lMU1pbkJ5U2VjKQojZGVmaW5lIEF0aW1lVG9NaW4oYXRpbWUpICgo YXRpbWUpL2NBdGltZTFNaW4pCiNkZWZpbmUgQXRpbWVGcm9tTWluKG1pbikgKChBdGltZSkoKG1p bikqY0F0aW1lMU1pbikpCiNkZWZpbmUgY0F0aW1lMUhvdXJCeVNlYyAoMzYwMExMKQojZGVmaW5l IGNBdGltZTFIb3VyQnlNaW4gKDYwTEwpCiNkZWZpbmUgY0F0aW1lMUhvdXIgKGNBdGltZTFTZWMg KiBjQXRpbWUxSG91ckJ5U2VjKQojZGVmaW5lIEF0aW1lVG9Ib3VyKGF0aW1lKSAoKGF0aW1lKS9j QXRpbWUxSG91cikKI2RlZmluZSBBdGltZUZyb21Ib3VyKGhvdXIpICgoQXRpbWUpKChob3VyKSpj QXRpbWUxSG91cikpCiNkZWZpbmUgY0F0aW1lMURheUJ5SG91ciAoMjRMTCkKI2RlZmluZSBjQXRp bWUxRGF5QnlNaW4gKDE0NDBMTCkKI2RlZmluZSBjQXRpbWUxRGF5QnlTZWMgKDg2NDAwTEwpCiNk ZWZpbmUgY0F0aW1lMURheSAoY0F0aW1lMURheUJ5U2VjKmNBdGltZTFTZWMpCiNkZWZpbmUgQXRp bWVUb0RheShhdGltZSkgKChBdGltZSkoKGF0aW1lKS9jQXRpbWUxRGF5KSkKI2RlZmluZSBBdGlt ZUZyb21EYXkoZGF5KSAoKEF0aW1lKSgoZGF5KSpjQXRpbWUxRGF5KSkKCiNkZWZpbmUgY0F0aW1l MU1pbGxTZWMgKDEwMDBMTCkKI2RlZmluZSBBdGltZVRvTWlsbFNlYyhhdGltZSkgKChhdGltZSkv Y0F0aW1lMU1pbGxTZWMpCiNkZWZpbmUgQXRpbWVGcm9tTWlsbFNlYyhtc2VjKSAoKEF0aW1lKSgo bXNlYykqY0F0aW1lMU1pbGxTZWMpKQoKI2RlZmluZSBBdGltZVB1bGxPdXRNaWNyb1NlYyhhdGlt ZSkgKChhdGltZSklY0F0aW1lMVNlYykKCiNkZWZpbmUgQXRpbWVQdWxsT3V0U2VjSW5EYXkoYXRp bWUpIChBdGltZVRvU2VjKGF0aW1lKSVjQXRpbWUxRGF5QnlTZWMpCiNkZWZpbmUgQXRpbWVQdWxs T3V0U2VjSW5Ib3VyKGF0aW1lKSAoQXRpbWVUb1NlYyhhdGltZSklY0F0aW1lMUhvdXJCeVNlYykK I2RlZmluZSBBdGltZVB1bGxPdXRTZWNJbk1pbihhdGltZSkgKEF0aW1lVG9TZWMoYXRpbWUpJWNB dGltZTFNaW5CeVNlYykKCiNkZWZpbmUgQXRpbWVQdWxsT3V0TWluSW5EYXkoYXRpbWUpIChBdGlt ZVRvTWluKGF0aW1lKSVjQXRpbWUxRGF5QnlNaW4pCiNkZWZpbmUgQXRpbWVQdWxsT3V0TWluSW5I b3VyKGF0aW1lKSAoQXRpbWVUb01pbihhdGltZSklY0F0aW1lMUhvdXJCeU1pbikKCiNkZWZpbmUg QXRpbWVQdWxsT3V0SG91ckluRGF5KGF0aW1lKSAoQXRpbWVUb0hvdXIoYXRpbWUpJWNBdGltZTFE YXlCeUhvdXIpCgojZGVmaW5lIGNBdGltZU5vVGltZSAoMExMKQoKI2RlZmluZSBjQXRpbWVTdW5k YXkgMAojZGVmaW5lIGNBdGltZU1vbmRheSAxCiNkZWZpbmUgY0F0aW1lVHVlc2RheSAyCiNkZWZp bmUgY0F0aW1lV2VkbmVzZGF5IDMKI2RlZmluZSBjQXRpbWVUaHVyc2RheSA0CiNkZWZpbmUgY0F0 aW1lRnJpZGF5IDUKI2RlZmluZSBjQXRpbWVTYXR1cmRheSA2CgpleHRlcm4gaW5saW5lIEF0aW1l CkF0aW1lQWRqdXN0VXBTZWMoQXRpbWUgdHgpCnsKICAgIHJldHVybiAoKEF0aW1lKSgoKCh0eCAr ICgxMDAwMDAwTEwpIC0gMSkvKDEwMDAwMDBMTCkpKSooMTAwMDAwMExMKSkpOwp9CgpleHRlcm4g aW5saW5lIEF0aW1lCkF0aW1lQWRqdXN0VXBNaW4oQXRpbWUgdHgpCnsKICAgIHJldHVybiAoKEF0 aW1lKSgoKCh0eCArICgoMTAwMDAwMExMKSAqICg2MExMKSkgLSAxKS8oKDEwMDAwMDBMTCkgKiAo NjBMTCkpKSkqKCgxMDAwMDAwTEwpICogKDYwTEwpKSkpOwp9CgpleHRlcm4gaW5saW5lIEF0aW1l CkF0aW1lQWRqdXN0VXBIb3VyKEF0aW1lIHR4KQp7CiAgICByZXR1cm4gKChBdGltZSkoKCgodHgg KyAoKDEwMDAwMDBMTCkgKiAoMzYwMExMKSkgLSAxKS8oKDEwMDAwMDBMTCkgKiAoMzYwMExMKSkp KSooKDEwMDAwMDBMTCkgKiAoMzYwMExMKSkpKTsKfQoKZXh0ZXJuIGlubGluZSBBdGltZQpBdGlt ZUFkanVzdFVwRGF5KEF0aW1lIHR4KQp7CiAgICByZXR1cm4gKChBdGltZSkoKCgoQXRpbWUpKCh0 eCArICgoODY0MDBMTCkqKDEwMDAwMDBMTCkpIC0gMSkvKCg4NjQwMExMKSooMTAwMDAwMExMKSkp KSkqKCg4NjQwMExMKSooMTAwMDAwMExMKSkpKTsKfQoKZXh0ZXJuIGlubGluZSBBdGltZQpBdGlt ZUFkanVzdERvd25TZWMoQXRpbWUgdHgpCnsKICAgIHJldHVybiAoKEF0aW1lKSgoKCh0eCkvKDEw MDAwMDBMTCkpKSooMTAwMDAwMExMKSkpOwp9CgpleHRlcm4gaW5saW5lIEF0aW1lCkF0aW1lQWRq dXN0RG93bk1pbihBdGltZSB0eCkKewogICAgcmV0dXJuICgoQXRpbWUpKCgoKHR4KS8oKDEwMDAw MDBMTCkgKiAoNjBMTCkpKSkqKCgxMDAwMDAwTEwpICogKDYwTEwpKSkpOwp9CgpleHRlcm4gaW5s aW5lIEF0aW1lCkF0aW1lQWRqdXN0RG93bkhvdXIoQXRpbWUgdHgpCnsKICAgIHJldHVybiAoKEF0 aW1lKSgoKCh0eCkvKCgxMDAwMDAwTEwpICogKDM2MDBMTCkpKSkqKCgxMDAwMDAwTEwpICogKDM2 MDBMTCkpKSk7Cn0KCmV4dGVybiBpbmxpbmUgQXRpbWUKQXRpbWVBZGp1c3REb3duRGF5KEF0aW1l IHR4KQp7CiAgICByZXR1cm4gKChBdGltZSkoKCgoQXRpbWUpKCh0eCkvKCg4NjQwMExMKSooMTAw MDAwMExMKSkpKSkqKCg4NjQwMExMKSooMTAwMDAwMExMKSkpKTsKfQoKdHlwZWRlZiBzdHJ1Y3Qg QXRpbWVZbWQgewogICAgczMyIHllYXI7CiAgICBzMTYgbW9udGg7CiAgICBzMTYgZGF5Owp9IEF0 aW1lWW1kOwoKdHlwZWRlZiBzdHJ1Y3QgQXRpbWVQcm9wZXJ0eSB7CiAgICB1MzIgYmVmb3JlUmVm b3JtRGF5OwogICAgQXRpbWVZbWQgYmVmb3JlUmVmb3JtRGF0ZTsKICAgIHUzMiBiZWZvcmVSZWZv cm1ZZGF5OwogICAgdTMyIGFmdGVyUmVmb3JtRGF5OwogICAgQXRpbWVZbWQgYWZ0ZXJSZWZvcm1E YXRlOwogICAgdTMyIGFmdGVyUmVmb3JtWWRheTsKICAgIHUzMiBjb3JyZWN0WWRheTsKICAgIHUz MiBlcmFEYXk7CiAgICBzMzIgYmlhczA7CiAgICB1MzIgd2RheTozLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlzUHJvbGVwdGljOjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaXNMZWFwWWVhcjoxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoyNzsK fSBBdGltZVByb3BlcnR5OwoKZXh0ZXJuIGNvbnN0IEF0aW1lUHJvcGVydHkqIGdBdGltZVByb3Bl cnR5IGFzbSgiX18iICJnQXRpbWVQcm9wZXJ0eSIpOwoKdHlwZWRlZiBzdHJ1Y3QgQXRpbWVEYXRl VGJsRW50cnkgewogICAgczggbW9udGg7CiAgICBzOCBkYXlJbk1vbnRoOwp9IEF0aW1lRGF0ZVRi bEVudHJ5OwoKCgoKI2RlZmluZSBjQXRpbWVOb3JtYWxZZWFyIDM2NQojZGVmaW5lIGNBdGltZUxl YXBZZWFyIDM2NgoKI2RlZmluZSBjQXRpbWU0WWVhcnNCbG9jayAxNDYxCiNkZWZpbmUgY0F0aW1l MXN0WWVhckluQmxvY2sgMzY2CiNkZWZpbmUgY0F0aW1lMm5kWWVhckluQmxvY2sgNzMxCiNkZWZp bmUgY0F0aW1lM3JkWWVhckluQmxvY2sgMTA5NgoKCgoKZXh0ZXJuIGNvbnN0IHMxNiBnQXRpbWVE YXlzT2ZOb3JtYWxZZWFyQnlNb250aFsxM10gYXNtKCJfXyIgImdBdGltZURheXNPZk5vcm1hbFll YXJCeU1vbnRoIik7CmV4dGVybiBjb25zdCBzMTYgZ0F0aW1lRGF5c09mTGVhcFllYXJCeU1vbnRo WzEzXSBhc20oIl9fIiAiZ0F0aW1lRGF5c09mTGVhcFllYXJCeU1vbnRoIik7CmV4dGVybiBjb25z dCBBdGltZURhdGVUYmxFbnRyeSBnQXRpbWU0WWVhcnNCbGtUb0RhdGVbMTQ2MV0gYXNtKCJfXyIg ImdBdGltZTRZZWFyc0Jsa1RvRGF0ZSIpOwpleHRlcm4gY29uc3QgczE2IGdBdGltZTRZZWFyc0Js a1RvRGF5SW5ZZWFyWzQ4XVszMV0gYXNtKCJfXyIgImdBdGltZTRZZWFyc0Jsa1RvRGF5SW5ZZWFy Iik7CmV4dGVybiBjb25zdCBBdGltZURhdGVUYmxFbnRyeSBnQXRpbWVOb3JtYWxZZWFyVG9EYXRl WzM2NV0gYXNtKCJfXyIgImdBdGltZU5vcm1hbFllYXJUb0RhdGUiKTsKZXh0ZXJuIGNvbnN0IHMx NiBnQXRpbWVOb3JtYWxZZWFyQmxrVG9EYXlJblllYXJbMTJdWzMxXSBhc20oIl9fIiAiZ0F0aW1l Tm9ybWFsWWVhckJsa1RvRGF5SW5ZZWFyIik7CmV4dGVybiBjb25zdCBBdGltZURhdGVUYmxFbnRy eSBnQXRpbWVMZWFwWWVhclRvRGF0ZVszNjZdIGFzbSgiX18iICJnQXRpbWVMZWFwWWVhclRvRGF0 ZSIpOwpleHRlcm4gY29uc3QgczE2IGdBdGltZUxlYXBZZWFyQmxrVG9EYXlJblllYXJbMTJdWzMx XSBhc20oIl9fIiAiZ0F0aW1lTGVhcFllYXJCbGtUb0RheUluWWVhciIpOwoKI2RlZmluZSBjQXRp bWVXZWVrTmFtZU51bSA3CmV4dGVybiBjb25zdCBDaHIgZ0F0aW1lRW5nbGlzaFdlZWtkYXlOYW1l WzddWzRdIGFzbSgiX18iICJnQXRpbWVFbmdsaXNoV2Vla2RheU5hbWUiKTsKZXh0ZXJuIGNvbnN0 IExlbiBnQXRpbWVFbmdsaXNoV2Vla2RheU5hbWVMZW5bN10gYXNtKCJfXyIgImdBdGltZUVuZ2xp c2hXZWVrZGF5TmFtZUxlbiIpOwpleHRlcm4gY29uc3QgQ2hyIGdBdGltZUVuZ2xpc2hXZWVrZGF5 RnVsbE5hbWVbN11bMTBdIGFzbSgiX18iICJnQXRpbWVFbmdsaXNoV2Vla2RheUZ1bGxOYW1lIik7 CmV4dGVybiBjb25zdCBMZW4gZ0F0aW1lRW5nbGlzaFdlZWtkYXlGdWxsTmFtZUxlbls3XSBhc20o Il9fIiAiZ0F0aW1lRW5nbGlzaFdlZWtkYXlGdWxsTmFtZUxlbiIpOwpleHRlcm4gY29uc3QgQ2hy IGdBdGltZUphcGFuZXNlV2Vla2RheU5hbWVbN11bM10gYXNtKCJfXyIgImdBdGltZUphcGFuZXNl V2Vla2RheU5hbWUiKTsKZXh0ZXJuIGNvbnN0IExlbiBnQXRpbWVKYXBhbmVzZVdlZWtkYXlOYW1l TGVuWzddIGFzbSgiX18iICJnQXRpbWVKYXBhbmVzZVdlZWtkYXlOYW1lTGVuIik7CmV4dGVybiBj b25zdCBDaHIgZ0F0aW1lSmFwYW5lc2VXZWVrZGF5RnVsbE5hbWVbN11bN10gYXNtKCJfXyIgImdB dGltZUphcGFuZXNlV2Vla2RheUZ1bGxOYW1lIik7CmV4dGVybiBjb25zdCBMZW4gZ0F0aW1lSmFw YW5lc2VXZWVrZGF5RnVsbE5hbWVMZW5bN10gYXNtKCJfXyIgImdBdGltZUphcGFuZXNlV2Vla2Rh eUZ1bGxOYW1lTGVuIik7CgojZGVmaW5lIGNBdGltZU1vbnRoTmFtZU51bSAxMgpleHRlcm4gY29u c3QgQ2hyIGdBdGltZUVuZ2xpc2hNb250aE5hbWVbMTJdWzRdIGFzbSgiX18iICJnQXRpbWVFbmds aXNoTW9udGhOYW1lIik7CmV4dGVybiBjb25zdCBMZW4gZ0F0aW1lRW5nbGlzaE1vbnRoTmFtZUxl blsxMl0gYXNtKCJfXyIgImdBdGltZUVuZ2xpc2hNb250aE5hbWVMZW4iKTsKZXh0ZXJuIGNvbnN0 IENociBnQXRpbWVFbmdsaXNoTW9udGhGdWxsTmFtZVsxMl1bMTBdIGFzbSgiX18iICJnQXRpbWVF bmdsaXNoTW9udGhGdWxsTmFtZSIpOwpleHRlcm4gY29uc3QgTGVuIGdBdGltZUVuZ2xpc2hNb250 aEZ1bGxOYW1lTGVuWzEyXSBhc20oIl9fIiAiZ0F0aW1lRW5nbGlzaE1vbnRoRnVsbE5hbWVMZW4i KTsKZXh0ZXJuIGNvbnN0IENociBnQXRpbWVKYXBhbmVzZU1vbnRoTmFtZVsxMl1bN10gYXNtKCJf XyIgImdBdGltZUphcGFuZXNlTW9udGhOYW1lIik7CmV4dGVybiBjb25zdCBMZW4gZ0F0aW1lSmFw YW5lc2VNb250aE5hbWVMZW5bMTJdIGFzbSgiX18iICJnQXRpbWVKYXBhbmVzZU1vbnRoTmFtZUxl biIpOwpleHRlcm4gY29uc3QgQ2hyIGdBdGltZUphcGFuZXNlTW9udGhGdWxsTmFtZVsxMl1bN10g YXNtKCJfXyIgImdBdGltZUphcGFuZXNlTW9udGhGdWxsTmFtZSIpOwpleHRlcm4gY29uc3QgTGVu IGdBdGltZUphcGFuZXNlTW9udGhGdWxsTmFtZUxlblsxMl0gYXNtKCJfXyIgImdBdGltZUphcGFu ZXNlTW9udGhGdWxsTmFtZUxlbiIpOwoKCgoKCnR5cGVkZWYgc3RydWN0IEF0aW1lSmFwYW5lc2VF cmEgewogICAgQXRpbWUgYmVnaW47CiAgICBBdGltZSBlbmQ7CiAgICBBdGltZSBlbmRPZjFzdFll YXI7CiAgICBBdGltZSB0b3BPZkxhc3RZZWFyOwogICAgczMyIHllYXJOb09mMXN0WWVhcjsKICAg IHMzMiBsYXN0WWVhcjsKICAgIENociBuYW1lWzEyXTsKICAgIENociBlbmdsaXNoTmFtZVsxNl07 CiAgICBzOCBuYW1lTGVuOwogICAgczggZW5nbGlzaE5hbWVMZW47CiAgICBBcmVhIHJzdnNbNF07 Cn0gQXRpbWVKYXBhbmVzZUVyYTsKCiNkZWZpbmUgY0F0aW1lSmFwYW5lc2VFcmFUYWJsZU51bSA4 CmV4dGVybiBjb25zdCBBdGltZUphcGFuZXNlRXJhIGdBdGltZUphcGFuZXNlRXJhVGFibGVbOF0g YXNtKCJfXyIgImdBdGltZUphcGFuZXNlRXJhVGFibGUiKTsKCmV4dGVybiBpbmxpbmUgY29uc3Qg QXRpbWVKYXBhbmVzZUVyYSoKQXRpbWVHZXRKYXBhbmVzZUVyYUluZGV4KEF0aW1lIHR4KQp7CiAg ICBpbnQgaTsKICAgIGZvcihpID0gMDsgKGkgPCA4KSAmJiAoZ0F0aW1lSmFwYW5lc2VFcmFUYWJs ZVtpXS5iZWdpbiA+IDApIDsgaSsrKSB7CiAgICAgICAgaWYoZ0F0aW1lSmFwYW5lc2VFcmFUYWJs ZVtpXS5iZWdpbiA8PSB0eCkgewogICAgICAgICAgICBpZigoZ0F0aW1lSmFwYW5lc2VFcmFUYWJs ZVtpXS5lbmQgPT0gMCkgfHwgKHR4IDw9IGdBdGltZUphcGFuZXNlRXJhVGFibGVbaV0uZW5kKSkg ewogICAgICAgICAgICAgICAgcmV0dXJuIGdBdGltZUphcGFuZXNlRXJhVGFibGUgKyBpOwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIChjb25zdCBBdGltZUphcGFuZXNl RXJhKikoKHZvaWQgKikwKTsKfQojIDI3NCAiYXhpcy9hdGltZS5oIgojZGVmaW5lIGNBdGltZVRt WWVhckZhY3RvciAxOTAwCiNkZWZpbmUgY0F0aW1lSW52YWxpZFRtWWVhciAoLTE5MDApCgojZGVm aW5lIGNBdGltZVllYXJOb01pbiAoLTQ3MTIpCgoKCgpleHRlcm4gY29uc3Qgc3RydWN0IHRtIGdB dGltZU5vbmVJbml0aWFsaXplZFRtIGFzbSgiX18iICJnQXRpbWVOb25lSW5pdGlhbGl6ZWRUbSIp OwoKZXh0ZXJuIGlubGluZSBpbnQKQXRpbWVUbVllYXJUb1llYXJObyhpbnQgdG1ZZWFyKQp7CiAg ICBpbnQgeWVhck5vOwogICAgeWVhck5vID0gdG1ZZWFyICsgMTkwMDsKICAgIGlmKHllYXJObyA8 PSAwKQogICAgICAgIHllYXJObyArKzsKICAgIHJldHVybiB5ZWFyTm87Cn0KCmV4dGVybiBpbmxp bmUgaW50CkF0aW1lWWVhck5vVG9UbVllYXIoaW50IHllYXJObykKewogICAgaW50IHRtWWVhcjsK CiAgICBpZih5ZWFyTm8gPD0gMCkgewogICAgICAgIHRtWWVhciA9IHllYXJObyAtICgxOTAwICsg MSk7CiAgICB9IGVsc2UgewogICAgICAgIHRtWWVhciA9IHllYXJObyAtIDE5MDA7CiAgICB9CiAg ICByZXR1cm4gdG1ZZWFyOwp9CiMgMzIwICJheGlzL2F0aW1lLmgiCiNkZWZpbmUgY0F0aW1lVG1E c3RJbnZhbGlkRGF5bGlnaHRTYXZpbmdPbkdNVCAoLTIpCiNkZWZpbmUgY0F0aW1lVG1Ec3RJbnZh bGlkRGF5bGlnaHRTYXZpbmdPbkxvY2FsICgtMSkKI2RlZmluZSBjQXRpbWVUbURzdE5vRGF5bGln aHRTYXZpbmdPbkxvY2FsIDAKI2RlZmluZSBjQXRpbWVUbURzdERheWxpZ2h0U2F2aW5nT25Mb2Nh bCAxCiNkZWZpbmUgY0F0aW1lVG1Ec3REYXlsaWdodFNhdmluZ09uR01UIDIKCgoKCgoKZXh0ZXJu IGlubGluZSBCb29sCkF0aW1lSXNMZWFwWWVhcihpbnQgeWVhck5vKQp7CiAgICBpZih5ZWFyTm8g PD0gZ0F0aW1lUHJvcGVydHktPmJlZm9yZVJlZm9ybURhdGUueWVhcikgewogICAgICAgIGlmKCh5 ZWFyTm8gJSA0KSA9PSAwKQogICAgICAgICAgICByZXR1cm4gMTsKICAgIH0gZWxzZSBpZigoKHll YXJObyAlIDQpID09IDApICYmCiAgICAgICAgICAgICAgKCgoeWVhck5vICUgMTAwKSAhPSAwKSB8 fAogICAgICAgICAgICAgICAoKHllYXJObyAlIDQwMCkgPT0gMCkpKSB7CiAgICAgICAgcmV0dXJu IDE7CiAgICB9CiAgICByZXR1cm4gMDsKfQoKI2RlZmluZSBjQXRpbWVBdG1BcnJheU51bSAyNAp0 eXBlZGVmIHVuaW9uIEF0bSB7CiAgICBzdHJ1Y3QgewogICAgICAgIHUzMiBpc0luaXQgOjEsCiAg ICAgICAgICAgICAgICBpc0xvY2FsOjEsCiAgICAgICAgICAgICAgICBpc1BNOjEsCiAgICAgICAg ICAgICAgICA6NSwKICAgICAgICAgICAgICAgIHNldFllYXI6MSwKICAgICAgICAgICAgICAgIHNl dE1vbnRoOjEsCiAgICAgICAgICAgICAgICBzZXRNRGF5OjEsCiAgICAgICAgICAgICAgICBzZXRI b3VyOjEsCiAgICAgICAgICAgICAgICBzZXRNaW46MSwKICAgICAgICAgICAgICAgIHNldFNlYzox LAogICAgICAgICAgICAgICAgc2V0TWljcm86MSwKICAgICAgICAgICAgICAgIHNldERpZmZ3ZXN0 OjEsCiAgICAgICAgICAgICAgICBzZXRZRGF5OjEsCiAgICAgICAgICAgICAgICBzZXRXRGF5OjEs CiAgICAgICAgICAgICAgICBzZXRKRXJhTmFtZToxLAogICAgICAgICAgICAgICAgc2V0SkVyYVll YXI6MSwKICAgICAgICAgICAgICAgIHNldE1XZWVrOjEsCiAgICAgICAgICAgICAgICBzZXRZV2Vl azoxLAogICAgICAgICAgICAgICAgc2V0WVdPcmQ6MSwKICAgICAgICAgICAgICAgIHNldE1XT3Jk OjEsCiAgICAgICAgICAgICAgICA6ODsKCgoKICAgICAgICBzMzIgeWVhcjsKICAgICAgICBzMzIg bW9udGg7CiAgICAgICAgczMyIG1kYXk7CiAgICAgICAgczMyIGhvdXI7CiAgICAgICAgczMyIG1p bjsKICAgICAgICBzMzIgc2VjOwogICAgICAgIHMzMiBtaWNybzsKICAgICAgICBzMzIgZGlmZndl c3Q7CiAgICAgICAgczMyIHlkYXk7CiAgICAgICAgczMyIHdkYXk7CiAgICAgICAgczMyIGpFcmFO YW1lOwogICAgICAgIHMzMiBqRXJhWWVhcjsKICAgICAgICBzMzIgbXdlZWs7CiAgICAgICAgczMy IHl3ZWVrOwogICAgICAgIHMzMiB5d29yZDsKICAgICAgICBzMzIgbXdvcmQ7CiAgICB9IHM7CiAg ICBzMzIgYVsyNF07Cn0gQXRtOwoKI2RlZmluZSBjQXRpbWVBdG1TZXRZZWFyIDB4MDAwMDAwMDQK I2RlZmluZSBjQXRpbWVBdG1TZXRNb250aCAweDAwMDAwMDA4CiNkZWZpbmUgY0F0aW1lQXRtU2V0 TURheSAweDAwMDAwMDEwCiNkZWZpbmUgY0F0aW1lQXRtU2V0SG91ciAweDAwMDAwMDIwCiNkZWZp bmUgY0F0aW1lQXRtU2V0TWluIDB4MDAwMDAwNDAKI2RlZmluZSBjQXRpbWVBdG1TZXRTZWMgMHgw MDAwMDA4MAojZGVmaW5lIGNBdGltZUF0bVNldE1pY3JvIDB4MDAwMDAxMDAKI2RlZmluZSBjQXRp bWVBdG1TZXREaWZmd2VzdCAweDAwMDAwMjAwCiNkZWZpbmUgY0F0aW1lQXRtU2V0WURheSAweDAw MDAwNDAwCiNkZWZpbmUgY0F0aW1lQXRtU2V0V0RheSAweDAwMDAwODAwCiNkZWZpbmUgY0F0aW1l QXRtU2V0SkVyYU5hbWUgMHgwMDAwMTAwMAojZGVmaW5lIGNBdGltZUF0bVNldEpFcmFZZWFyIDB4 MDAwMDIwMDAKI2RlZmluZSBjQXRpbWVBdG1TZXRNV2VlayAweDAwMDA0MDAwCiNkZWZpbmUgY0F0 aW1lQXRtU2V0WVdlZWsgMHgwMDAwODAwMAoKI2RlZmluZSBjQXRpbWVHbG9iYWxOdW0gMTYKdHlw ZWRlZiBzdHJ1Y3QgewogICAgbG9uZyBsb25nIGFyZWFzWzE2XTsKfSBBdGltZUdsb2JhbEFyZWE7 CgoKCgpleHRlcm4gdm9pZCBBdGltZUluaXQodm9pZCkgYXNtKCJfXyIgIkF0aW1lSW5pdCIpOwpl eHRlcm4gQXRpbWUgQXRpbWVHZXQodm9pZCkgYXNtKCJfXyIgIkF0aW1lR2V0Iik7CmV4dGVybiBB dGltZSBBdGltZUdldFRpbWVab25lKHZvaWQpIGFzbSgiX18iICJBdGltZUdldFRpbWVab25lIik7 CmV4dGVybiB2b2lkIEF0aW1lU2V0R2xvYmFsKEF0aW1lR2xvYmFsQXJlYSogZ2xvYmFsQXJlYSkg YXNtKCJfXyIgIkF0aW1lU2V0R2xvYmFsIik7CmV4dGVybiBBdGltZSBBdGltZUFkanVzdCgpIGFz bSgiX18iICJBdGltZUFkanVzdCIpOwoKdHlwZWRlZiBzNjQgQXRpbWVDbG9jazsKZXh0ZXJuIEF0 aW1lQ2xvY2sgQXRpbWVHZXRDcHVDbG9ja0NvdW50ZXIodm9pZCkgYXNtKCJfXyIgIkF0aW1lR2V0 Q3B1Q2xvY2tDb3VudGVyIik7CmV4dGVybiBBdGltZUNsb2NrIEF0aW1lU2FtcGxpbmdDbG9jayhB dGltZUNsb2NrKiBiaWFzKSBhc20oIl9fIiAiQXRpbWVTYW1wbGluZ0Nsb2NrIik7CmV4dGVybiBB dGltZSBBdGltZUZyb21DcHVDbG9ja0NvdW50ZXIoQXRpbWVDbG9jayBjbGspIGFzbSgiX18iICJB dGltZUZyb21DcHVDbG9ja0NvdW50ZXIiKTsKCmV4dGVybiBpbnQgQXRpbWVUb0F0bShBdGltZSBh dCwgQXRpbWUgdGltZVpvbmUsIEF0bSogYXRtUCkgYXNtKCJfXyIgIkF0aW1lVG9BdG0iKTsKZXh0 ZXJuIEF0aW1lIEF0aW1lRnJvbUF0bShBdG0qIGF0bVApIGFzbSgiX18iICJBdGltZUZyb21BdG0i KTsKZXh0ZXJuIGludCBBdGltZU5vcm1hbGl6ZUF0bShBdG0qIGF0bVApIGFzbSgiX18iICJBdGlt ZU5vcm1hbGl6ZUF0bSIpOwoKZXh0ZXJuIGludCBBdGltZUF0bVRvU3RyKENociogc3RyLCBMZW4g c3RyTGVuLCBjb25zdCBDaHIqIGZvcm1hdCwgQXRtKiBhdG1QKSBhc20oIl9fIiAiQXRpbWVBdG1U b1N0ciIpOwpleHRlcm4gaW50IEF0aW1lQXRtRnJvbVN0cihjb25zdCBDaHIqIHN0ciwgY29uc3Qg Q2hyKiBmb3JtYXQsIEF0bSogYXRtUCkgYXNtKCJfXyIgIkF0aW1lQXRtRnJvbVN0ciIpOwoKZXh0 ZXJuIGludCBBdGltZUF0bVRvVG0oQXRtKiBhdG1QLCBzdHJ1Y3QgdG0qIHRtUCwgczMyKiBtaWNy b1NlY1ApIGFzbSgiX18iICJBdGltZUF0bVRvVG0iKTsKZXh0ZXJuIGludCBBdGltZUF0bUZyb21U bShBdG0qIGF0bVAsIGNvbnN0IHN0cnVjdCB0bSogdG1QLCBzMzIgbWljcm9TZWMpIGFzbSgiX18i ICJBdGltZUF0bUZyb21UbSIpOwoKZXh0ZXJuIEF0aW1lIEF0aW1lRnJvbVN0cihjb25zdCBDaHIq IHN0ciwgY29uc3QgQ2hyKiBmb3JtYXQsIEF0aW1lIHRpbWVab25lKSBhc20oIl9fIiAiQXRpbWVG cm9tU3RyIik7CmV4dGVybiBpbnQgQXRpbWVUb1N0cihDaHIqIHN0ciwgTGVuIHN0ckxlbiwgY29u c3QgQ2hyKiBmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdGltZSBhdCwg QXRpbWUgdGltZVpvbmUpIGFzbSgiX18iICJBdGltZVRvU3RyIik7CgpleHRlcm4gQXRpbWUgQXRp bWVHZXRMb2NhbCh2b2lkKSBhc20oIl9fIiAiQXRpbWVHZXRMb2NhbCIpOwpleHRlcm4gdm9pZCBB dGltZU5vcm1hbGl6ZVRtKHN0cnVjdCB0bSogdG0pIGFzbSgiX18iICJBdGltZU5vcm1hbGl6ZVRt Iik7CgpleHRlcm4gdm9pZCBBdGltZVRvVG0oQXRpbWUgYXRpbWUsIHN0cnVjdCB0bSogdG1QLCB1 MzIqIG1pY3JvU2VjUCkgYXNtKCJfXyIgIkF0aW1lVG9UbSIpOwpleHRlcm4gdm9pZCBBdGltZVRv TG9jYWxUbShBdGltZSBhdGltZSwgc3RydWN0IHRtKiB0bVAsIHUzMiogbWljcm9TZWNQKSBhc20o Il9fIiAiQXRpbWVUb0xvY2FsVG0iKTsKZXh0ZXJuIEF0aW1lIEF0aW1lRnJvbVRtKHN0cnVjdCB0 bSogdG0sIHUzMiBtaWNyb1NlYykgYXNtKCJfXyIgIkF0aW1lRnJvbVRtIik7CmV4dGVybiBBdGlt ZSBBdGltZUZyb21Mb2NhbFRtKHN0cnVjdCB0bSogdG0sIHUzMiBtaWNyb1NlYykgYXNtKCJfXyIg IkF0aW1lRnJvbUxvY2FsVG0iKTsKZXh0ZXJuIGludCBBdGltZVN0clRvVG0oY29uc3QgQ2hyKiBz dHIsIGNvbnN0IENociogZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgdG0qIHRtUCwgdTMyKiBtaWNyb1NlY1ApIGFzbSgiX18iICJBdGltZVN0clRvVG0iKTsK ZXh0ZXJuIGludCBBdGltZVRtVG9TdHIoQ2hyKiBzdHIsIExlbiBzdHJMZW4sIGNvbnN0IENociog Zm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdG0q IHRtLCB1MzIgbWljcm9TZWMpIGFzbSgiX18iICJBdGltZVRtVG9TdHIiKTsKCgoKZXh0ZXJuIGNv bnN0IEF0aW1lIGdBdGltZVRpbWVab25lIGFzbSgiX18iICJnQXRpbWVUaW1lWm9uZSIpOwoKCgoK CmV4dGVybiBpbmxpbmUgQXRpbWUKQXRpbWVUb0xvY2FsVmFsdWUoQXRpbWUgb3JpZykKewogICAg cmV0dXJuIG9yaWcgLSBnQXRpbWVUaW1lWm9uZTsKfQoKZXh0ZXJuIGlubGluZSBBdGltZQpBdGlt ZUZyb21Mb2NhbFZhbHVlKEF0aW1lIGxvY2FsVmFsKQp7CiAgICByZXR1cm4gbG9jYWxWYWwgKyBn QXRpbWVUaW1lWm9uZTsKfQojIDQ4OCAiYXhpcy9hdGltZS5oIgpleHRlcm4gaW5saW5lIHZvaWQK QXRpbWVCdWlsZFRtKHN0cnVjdCB0bSogdG1QLCBzMzIgeWVhck5vLCBzMzIgbW9udGgsIHMzMiBt b250aEluRGF5LAogICAgICAgICAgICAgczMyIGhvdXIsIHMzMiBtaW4sIHMzMiBzZWMsIGludCBp c0xvY2FsKQp7CiAgICBtZW1jcHkodG1QLCAmZ0F0aW1lTm9uZUluaXRpYWxpemVkVG0sIHNpemVv ZihzdHJ1Y3QgdG0pKTsKICAgIHRtUC0+dG1feWVhciA9IEF0aW1lWWVhck5vVG9UbVllYXIoeWVh ck5vKTsKICAgIHRtUC0+dG1fbW9uID0gbW9udGggLSAxOwogICAgdG1QLT50bV9tZGF5ID0gbW9u dGhJbkRheTsKICAgIHRtUC0+dG1faG91ciA9IGhvdXI7CiAgICB0bVAtPnRtX21pbiA9IG1pbjsK ICAgIHRtUC0+dG1fc2VjID0gc2VjOwogICAgaWYoaXNMb2NhbCkKICAgICAgICB0bVAtPnRtX2lz ZHN0ID0gKC0xKTsKICAgIGVsc2UKICAgICAgICB0bVAtPnRtX2lzZHN0ID0gKC0yKTsKICAgIEF0 aW1lTm9ybWFsaXplVG0odG1QKTsKfQoKI2RlZmluZSBjQXRpbWVBdG1JbGxWYWwgKC0yMTQ3NDgz NjQ3KQoKCgoKCmV4dGVybiBpbmxpbmUgdm9pZApBdGltZUF0bUluaXQoQXRtKiBhdG1QLCBCb29s IGlzTG9jYWxUaW1lKQp7CiAgICBhdG1QLT5hWzBdID0gMDsKICAgIGF0bVAtPmFbMV0gPSAwOwog ICAgYXRtUC0+cy5pc0luaXQgPSAxOwogICAgYXRtUC0+cy5pc0xvY2FsID0gaXNMb2NhbFRpbWUg PyAxIDogMDsKICAgIGF0bVAtPnMuZGlmZndlc3QgPSAoKGdBdGltZVRpbWVab25lKS8oMTAwMDAw MExMKSk7CiAgICBhdG1QLT5zLnNldERpZmZ3ZXN0ID0gMTsKfQoKZXh0ZXJuIGlubGluZSB2b2lk CkF0aW1lQXRtU2V0WWVhcihBdG0qIGF0bVAsIHMzMiB5ZWFyKQp7CiAgICBhdG1QLT5zLnllYXIg PSB5ZWFyOwogICAgYXRtUC0+cy5zZXRZZWFyID0gMTsKfQoKZXh0ZXJuIGlubGluZSBzMzIKQXRp bWVBdG1HZXRZZWFyKEF0bSogYXRtUCkKewogICAgaWYoYXRtUC0+cy5zZXRZZWFyKQogICAgICAg IHJldHVybiBhdG1QLT5zLnllYXI7CiAgICBlbHNlCiAgICAgICAgcmV0dXJuICgtMjE0NzQ4MzY0 Nyk7Cn0KCmV4dGVybiBpbmxpbmUgdm9pZApBdGltZUF0bVNldE1vbnRoKEF0bSogYXRtUCwgczMy IG1vbnRoKQp7CiAgICBhdG1QLT5zLm1vbnRoID0gbW9udGg7CiAgICBhdG1QLT5zLnNldFlEYXkg PSAwOwogICAgYXRtUC0+cy5zZXRZV2VlayA9IDA7CiAgICBhdG1QLT5zLnNldE1vbnRoID0gMTsK fQoKZXh0ZXJuIGlubGluZSBzMzIKQXRpbWVBdG1HZXRNb250aChBdG0qIGF0bVApCnsKICAgIGlm KGF0bVAtPnMuc2V0TW9udGgpCiAgICAgICAgcmV0dXJuIGF0bVAtPnMubW9udGg7CiAgICBlbHNl CiAgICAgICAgcmV0dXJuICgtMjE0NzQ4MzY0Nyk7Cn0KCmV4dGVybiBpbmxpbmUgdm9pZApBdGlt ZUF0bVNldE1EYXkoQXRtKiBhdG1QLCBzMzIgbWRheSkKewogICAgYXRtUC0+cy5tZGF5ID0gbWRh eTsKICAgIGF0bVAtPnMuc2V0TURheSA9IDE7CiAgICBhdG1QLT5zLnNldFlEYXkgPSAwOwogICAg YXRtUC0+cy5zZXRNV2VlayA9IDA7CiAgICBhdG1QLT5zLnNldFlXZWVrID0gMDsKICAgIGF0bVAt PnMuc2V0WVdPcmQgPSAwOwogICAgYXRtUC0+cy5zZXRNV09yZCA9IDA7Cn0KCmV4dGVybiBpbmxp bmUgczMyCkF0aW1lQXRtR2V0TURheShBdG0qIGF0bVApCnsKICAgIGlmKGF0bVAtPnMuc2V0TURh eSkKICAgICAgICByZXR1cm4gYXRtUC0+cy5tZGF5OwogICAgZWxzZQogICAgICAgIHJldHVybiAo LTIxNDc0ODM2NDcpOwp9CgpleHRlcm4gaW5saW5lIHZvaWQKQXRpbWVBdG1TZXRIb3VyKEF0bSog YXRtUCwgczMyIGhvdXIpCnsKICAgIGF0bVAtPnMuaG91ciA9IGhvdXI7CiAgICBhdG1QLT5zLnNl dEhvdXIgPSAxOwp9CgpleHRlcm4gaW5saW5lIHMzMgpBdGltZUF0bUdldEhvdXIoQXRtKiBhdG1Q KQp7CiAgICBpZihhdG1QLT5zLnNldEhvdXIpCiAgICAgICAgcmV0dXJuIGF0bVAtPnMuaG91cjsK ICAgIGVsc2UKICAgICAgICByZXR1cm4gKC0yMTQ3NDgzNjQ3KTsKfQoKZXh0ZXJuIGlubGluZSB2 b2lkCkF0aW1lQXRtU2V0TWluKEF0bSogYXRtUCwgczMyIG1pbikKewogICAgYXRtUC0+cy5taW4g PSBtaW47CiAgICBhdG1QLT5zLnNldE1pbiA9IDE7Cn0KCmV4dGVybiBpbmxpbmUgczMyCkF0aW1l QXRtR2V0TWluKEF0bSogYXRtUCkKewogICAgaWYoYXRtUC0+cy5zZXRNaW4pCiAgICAgICAgcmV0 dXJuIGF0bVAtPnMubWluOwogICAgZWxzZQogICAgICAgIHJldHVybiAoLTIxNDc0ODM2NDcpOwp9 CgpleHRlcm4gaW5saW5lIHZvaWQKQXRpbWVBdG1TZXRTZWMoQXRtKiBhdG1QLCBzMzIgc2VjKQp7 CiAgICBhdG1QLT5zLnNlYyA9IHNlYzsKICAgIGF0bVAtPnMuc2V0U2VjID0gMTsKfQoKZXh0ZXJu IGlubGluZSBzMzIKQXRpbWVBdG1HZXRTZWMoQXRtKiBhdG1QKQp7CiAgICBpZihhdG1QLT5zLnNl dFNlYykKICAgICAgICByZXR1cm4gYXRtUC0+cy5zZWM7CiAgICBlbHNlCiAgICAgICAgcmV0dXJu ICgtMjE0NzQ4MzY0Nyk7Cn0KCmV4dGVybiBpbmxpbmUgdm9pZApBdGltZUF0bVNldE1pY3JvKEF0 bSogYXRtUCwgczMyIG1pY3JvKQp7CiAgICBhdG1QLT5zLm1pY3JvID0gbWljcm87CiAgICBhdG1Q LT5zLnNldE1pY3JvID0gMTsKfQoKZXh0ZXJuIGlubGluZSBzMzIKQXRpbWVBdG1HZXRNaWNybyhB dG0qIGF0bVApCnsKICAgIGlmKGF0bVAtPnMuc2V0TWljcm8pCiAgICAgICAgcmV0dXJuIGF0bVAt PnMubWljcm87CiAgICBlbHNlCiAgICAgICAgcmV0dXJuICgtMjE0NzQ4MzY0Nyk7Cn0KCmV4dGVy biBpbmxpbmUgdm9pZApBdGltZUF0bVNldERpZmZ3ZXN0KEF0bSogYXRtUCwgczMyIGRpZmZ3ZXN0 KQp7CiAgICBhdG1QLT5zLmRpZmZ3ZXN0ID0gZGlmZndlc3Q7CiAgICBhdG1QLT5zLnNldERpZmZ3 ZXN0ID0gMTsKfQoKZXh0ZXJuIGlubGluZSBzMzIKQXRpbWVBdG1HZXREaWZmd2VzdChBdG0qIGF0 bVApCnsKICAgIGlmKGF0bVAtPnMuc2V0RGlmZndlc3QpCiAgICAgICAgcmV0dXJuIGF0bVAtPnMu ZGlmZndlc3Q7CiAgICBlbHNlCiAgICAgICAgcmV0dXJuICgtMjE0NzQ4MzY0Nyk7Cn0KCmV4dGVy biBpbmxpbmUgdm9pZApBdGltZUF0bVNldFlEYXkoQXRtKiBhdG1QLCBzMzIgeWRheSkKewogICAg YXRtUC0+cy55ZGF5ID0geWRheTsKICAgIGF0bVAtPnMuc2V0WURheSA9IDE7CiAgICBhdG1QLT5z LnNldE1vbnRoID0gMDsKICAgIGF0bVAtPnMuc2V0TURheSA9IDA7CiAgICBhdG1QLT5zLnNldFdE YXkgPSAwOwogICAgYXRtUC0+cy5zZXRNV2VlayA9IDA7CiAgICBhdG1QLT5zLnNldFlXZWVrID0g MDsKICAgIGF0bVAtPnMuc2V0WVdPcmQgPSAwOwogICAgYXRtUC0+cy5zZXRNV09yZCA9IDA7Cn0K CmV4dGVybiBpbmxpbmUgczMyCkF0aW1lQXRtR2V0WURheShBdG0qIGF0bVApCnsKICAgIGlmKGF0 bVAtPnMuc2V0WURheSkKICAgICAgICByZXR1cm4gYXRtUC0+cy55ZGF5OwogICAgZWxzZQogICAg ICAgIHJldHVybiAoLTIxNDc0ODM2NDcpOwp9CgpleHRlcm4gaW5saW5lIHZvaWQKQXRpbWVBdG1T ZXRXRGF5KEF0bSogYXRtUCwgczMyIHdkYXkpCnsKICAgIGF0bVAtPnMud2RheSA9IHdkYXk7CiAg ICBhdG1QLT5zLnNldFdEYXkgPSAxOwogICAgYXRtUC0+cy5zZXRZRGF5ID0gMDsKICAgIGF0bVAt PnMuc2V0TURheSA9IDA7Cn0KCmV4dGVybiBpbmxpbmUgczMyCkF0aW1lQXRtR2V0V0RheShBdG0q IGF0bVApCnsKICAgIGlmKGF0bVAtPnMuc2V0V0RheSkKICAgICAgICByZXR1cm4gYXRtUC0+cy53 ZGF5OwogICAgZWxzZQogICAgICAgIHJldHVybiAoLTIxNDc0ODM2NDcpOwp9CgpleHRlcm4gaW5s aW5lIHZvaWQKQXRpbWVBdG1TZXRKRXJhTmFtZShBdG0qIGF0bVAsIHMzMiBqRXJhTmFtZSkKewog ICAgYXRtUC0+cy5qRXJhTmFtZSA9IGpFcmFOYW1lOwogICAgYXRtUC0+cy5zZXRKRXJhTmFtZSA9 IDE7Cn0KCmV4dGVybiBpbmxpbmUgczMyCkF0aW1lQXRtR2V0SkVyYU5hbWUoQXRtKiBhdG1QKQp7 CiAgICBpZihhdG1QLT5zLnNldEpFcmFOYW1lKQogICAgICAgIHJldHVybiBhdG1QLT5zLmpFcmFO YW1lOwogICAgZWxzZQogICAgICAgIHJldHVybiAoLTIxNDc0ODM2NDcpOwp9CgpleHRlcm4gaW5s aW5lIHZvaWQKQXRpbWVBdG1TZXRKRXJhWWVhcihBdG0qIGF0bVAsIHMzMiBqRXJhWWVhcikKewog ICAgYXRtUC0+cy5qRXJhWWVhciA9IGpFcmFZZWFyOwogICAgYXRtUC0+cy5zZXRKRXJhWWVhciA9 IDE7Cn0KCmV4dGVybiBpbmxpbmUgczMyCkF0aW1lQXRtR2V0SkVyYVllYXIoQXRtKiBhdG1QKQp7 CiAgICBpZihhdG1QLT5zLnNldEpFcmFZZWFyKQogICAgICAgIHJldHVybiBhdG1QLT5zLmpFcmFZ ZWFyOwogICAgZWxzZQogICAgICAgIHJldHVybiAoLTIxNDc0ODM2NDcpOwp9CgpleHRlcm4gaW5s aW5lIHZvaWQKQXRpbWVBdG1TZXRNV2VlayhBdG0qIGF0bVAsIHMzMiBtd2VlaykKewogICAgYXRt UC0+cy5td2VlayA9IG13ZWVrOwogICAgYXRtUC0+cy5zZXRNV2VlayA9IDE7CiAgICBhdG1QLT5z LnNldE1XT3JkID0gMDsKfQoKZXh0ZXJuIGlubGluZSBzMzIKQXRpbWVBdG1HZXRNV2VlayhBdG0q IGF0bVApCnsKICAgIGlmKGF0bVAtPnMuc2V0TVdlZWspCiAgICAgICAgcmV0dXJuIGF0bVAtPnMu bXdlZWs7CiAgICBlbHNlCiAgICAgICAgcmV0dXJuICgtMjE0NzQ4MzY0Nyk7Cn0KCmV4dGVybiBp bmxpbmUgdm9pZApBdGltZUF0bVNldFlXZWVrKEF0bSogYXRtUCwgczMyIHl3ZWVrKQp7CiAgICBh dG1QLT5zLnl3ZWVrID0geXdlZWs7CiAgICBhdG1QLT5zLnNldFlXZWVrID0gMTsKICAgIGF0bVAt PnMuc2V0WVdPcmQgPSAwOwp9CgpleHRlcm4gaW5saW5lIHMzMgpBdGltZUF0bUdldFlXZWVrKEF0 bSogYXRtUCkKewogICAgaWYoYXRtUC0+cy5zZXRZV2VlaykKICAgICAgICByZXR1cm4gYXRtUC0+ cy55d2VlazsKICAgIGVsc2UKICAgICAgICByZXR1cm4gKC0yMTQ3NDgzNjQ3KTsKfQoKZXh0ZXJu IGlubGluZSB2b2lkCkF0aW1lQXRtU2V0WVdPcmQoQXRtKiBhdG1QLCBzMzIgeXdvcmQpCnsKICAg IGF0bVAtPnMueXdvcmQgPSB5d29yZDsKICAgIGF0bVAtPnMuc2V0WVdPcmQgPSAxOwogICAgYXRt UC0+cy5zZXRZV2VlayA9IDA7Cn0KCmV4dGVybiBpbmxpbmUgczMyCkF0aW1lQXRtR2V0WVdPcmQo QXRtKiBhdG1QKQp7CgogICAgaWYoYXRtUC0+cy5zZXRZV09yZCkKICAgICAgICByZXR1cm4gYXRt UC0+cy55d29yZDsKICAgIGVsc2UKICAgICAgICByZXR1cm4gKC0yMTQ3NDgzNjQ3KTsKCn0KCmV4 dGVybiBpbmxpbmUgdm9pZApBdGltZUF0bVNldE1XT3JkKEF0bSogYXRtUCwgczMyIG13b3JkKQp7 CiAgICBhdG1QLT5zLm13b3JkID0gbXdvcmQ7CiAgICBhdG1QLT5zLnNldE1XT3JkID0gMTsKICAg IGF0bVAtPnMuc2V0TVdlZWsgPSAwOwp9CgpleHRlcm4gaW5saW5lIHMzMgpBdGltZUF0bUdldE1X T3JkKEF0bSogYXRtUCkKewoKICAgIGlmKGF0bVAtPnMuc2V0TVdPcmQpCiAgICAgICAgcmV0dXJu IGF0bVAtPnMubXdvcmQ7CiAgICBlbHNlCiAgICAgICAgcmV0dXJuICgtMjE0NzQ4MzY0Nyk7Cgp9 CgpleHRlcm4gaW5saW5lIHZvaWQKQXRpbWVBdG1TZXRZbWQoQXRtKiBhdG1QLCBzMzIgeWVhciwg czMyIG1vbnRoLCBzMzIgbWRheSkKewogICAgYXRtUC0+cy5zZXRZZWFyID0gMTsKICAgIGF0bVAt PnMuc2V0TW9udGggPSAxOwogICAgYXRtUC0+cy5zZXRNRGF5ID0gMTsKICAgIGF0bVAtPnMueWVh ciA9IHllYXI7CiAgICBhdG1QLT5zLm1vbnRoID0gbW9udGg7CiAgICBhdG1QLT5zLm1kYXkgPSBt ZGF5OwogICAgYXRtUC0+cy5zZXRZRGF5ID0gMDsKICAgIGF0bVAtPnMuc2V0WVdlZWsgPSAwOwog ICAgYXRtUC0+cy5zZXRNV2VlayA9IDA7CiAgICBhdG1QLT5zLnNldFlXT3JkID0gMDsKICAgIGF0 bVAtPnMuc2V0TVdPcmQgPSAwOwp9CgpleHRlcm4gaW5saW5lIHZvaWQKQXRpbWVBdG1TZXRZV0Qo QXRtKiBhdG1QLCBzMzIgeWVhciwgczMyIHl3ZWVrLCBzMzIgd2RheSkKewogICAgYXRtUC0+cy5z ZXRZZWFyID0gMTsKICAgIGF0bVAtPnMuc2V0WVdlZWsgPSAxOwogICAgYXRtUC0+cy5zZXRXRGF5 ID0gMTsKICAgIGF0bVAtPnMueWVhciA9IHllYXI7CiAgICBhdG1QLT5zLnl3ZWVrID0geXdlZWs7 CiAgICBhdG1QLT5zLndkYXkgPSB3ZGF5OwogICAgYXRtUC0+cy5zZXRZRGF5ID0gMDsKICAgIGF0 bVAtPnMuc2V0TVdlZWsgPSAwOwogICAgYXRtUC0+cy5zZXRNb250aCA9IDA7CiAgICBhdG1QLT5z LnNldFlXT3JkID0gMDsKICAgIGF0bVAtPnMuc2V0TVdPcmQgPSAwOwp9CgpleHRlcm4gaW5saW5l IHZvaWQKQXRpbWVBdG1TZXRZTVdEKEF0bSogYXRtUCwgczMyIHllYXIsIHMzMiBtb250aCwgczMy IG13ZWVrLCBzMzIgd2RheSkKewogICAgYXRtUC0+cy5zZXRZZWFyID0gMTsKICAgIGF0bVAtPnMu c2V0TW9udGggPSAxOwogICAgYXRtUC0+cy5zZXRNV2VlayA9IDE7CiAgICBhdG1QLT5zLnNldFdE YXkgPSAxOwogICAgYXRtUC0+cy55ZWFyID0geWVhcjsKICAgIGF0bVAtPnMubW9udGggPSBtb250 aDsKICAgIGF0bVAtPnMubXdlZWsgPSBtd2VlazsKICAgIGF0bVAtPnMud2RheSA9IHdkYXk7CiAg ICBhdG1QLT5zLnNldFlEYXkgPSAwOwogICAgYXRtUC0+cy5zZXRZV2VlayA9IDA7CiAgICBhdG1Q LT5zLnNldFlXT3JkID0gMDsKICAgIGF0bVAtPnMuc2V0TVdPcmQgPSAwOwp9CgpleHRlcm4gaW5s aW5lIHZvaWQKQXRpbWVBdG1TZXRZTVdPKEF0bSogYXRtUCwgczMyIHllYXIsIHMzMiBtb250aCwg czMyIG13b3JkLCBzMzIgd2RheSkKewogICAgYXRtUC0+cy5zZXRZZWFyID0gMTsKICAgIGF0bVAt PnMuc2V0TW9udGggPSAxOwogICAgYXRtUC0+cy5zZXRNV09yZCA9IDE7CiAgICBhdG1QLT5zLnNl dFdEYXkgPSAxOwogICAgYXRtUC0+cy55ZWFyID0geWVhcjsKICAgIGF0bVAtPnMubW9udGggPSBt b250aDsKICAgIGF0bVAtPnMubXdvcmQgPSBtd29yZDsKICAgIGF0bVAtPnMud2RheSA9IHdkYXk7 CiAgICBhdG1QLT5zLnNldFlEYXkgPSAwOwogICAgYXRtUC0+cy5zZXRZV2VlayA9IDA7CiAgICBh dG1QLT5zLnNldE1XZWVrID0gMDsKICAgIGF0bVAtPnMuc2V0WVdPcmQgPSAwOwp9CgpleHRlcm4g aW5saW5lIHZvaWQKQXRpbWVBdG1TZXRIbXMoQXRtKiBhdG1QLCBzMzIgaG91ciwgczMyIG1pbiwg czMyIHNlYykKewogICAgYXRtUC0+cy5zZXRIb3VyID0gMTsKICAgIGF0bVAtPnMuc2V0TWluID0g MTsKICAgIGF0bVAtPnMuc2V0U2VjID0gMTsKICAgIGF0bVAtPnMuaG91ciA9IGhvdXI7CiAgICBh dG1QLT5zLm1pbiA9IG1pbjsKICAgIGF0bVAtPnMuc2VjID0gc2VjOwp9CgpleHRlcm4gaW5saW5l IGludApBdGltZUF0bVllYXJUb1llYXJObyhBdG0qIGF0bVApCnsKICAgIHMzMiB5ZWFyID0gYXRt UC0+cy55ZWFyOwogICAgaWYoeWVhciA8IDApIHsKICAgICAgICB5ZWFyICsrOwogICAgfQogICAg cmV0dXJuIHllYXI7Cn0KCmV4dGVybiBpbmxpbmUgaW50CkF0aW1lQXRtWWVhckZyb21ZZWFyTm8o czMyIHllYXJObykKewogICAgaWYoeWVhck5vIDw9IDApIHsKICAgICAgICB5ZWFyTm8gLS07CiAg ICB9CiAgICByZXR1cm4geWVhck5vOwp9CgpleHRlcm4gaW5saW5lIEF0aW1lCkF0aW1lQWRkWWVh cihBdGltZSBhdCwgczMyIGRlbHRhKQp7CiAgICBBdG0gYXRteDsKCiAgICBBdGltZVRvQXRtKGF0 LCBnQXRpbWVUaW1lWm9uZSwgJmF0bXgpOwogICAgYXRteC5zLnllYXIgKz0gZGVsdGE7CiAgICBh dG14LnMuc2V0SkVyYVllYXIgPSAwOwogICAgYXRteC5zLnNldEpFcmFOYW1lID0gMDsKICAgIGF0 bXgucy5zZXRZRGF5ID0gMDsKICAgIGF0bXgucy5zZXRNV2VlayA9IDA7CiAgICBhdG14LnMuc2V0 WVdlZWsgPSAwOwogICAgYXRteC5zLnNldE1XT3JkID0gMDsKICAgIGF0bXgucy5zZXRZV09yZCA9 IDA7CiAgICBhdG14LnMuc2V0V0RheSA9IDA7CiAgICBhdCA9IEF0aW1lRnJvbUF0bSgmYXRteCk7 CiAgICByZXR1cm4gYXQ7Cn0KCmV4dGVybiBpbmxpbmUgQXRpbWUKQXRpbWVBZGRNb250aChBdGlt ZSBhdCwgczMyIGRlbHRhKQp7CiAgICBBdG0gYXRteDsKCiAgICBBdGltZVRvQXRtKGF0LCBnQXRp bWVUaW1lWm9uZSwgJmF0bXgpOwogICAgYXRteC5zLm1vbnRoICs9IGRlbHRhOwogICAgYXRteC5z LnNldFlEYXkgPSAwOwogICAgYXRteC5zLnNldE1XZWVrID0gMDsKICAgIGF0bXgucy5zZXRZV2Vl ayA9IDA7CiAgICBhdG14LnMuc2V0TVdPcmQgPSAwOwogICAgYXRteC5zLnNldFlXT3JkID0gMDsK ICAgIGF0bXgucy5zZXRXRGF5ID0gMDsKICAgIGF0ID0gQXRpbWVGcm9tQXRtKCZhdG14KTsKICAg IHJldHVybiBhdDsKfQoKZXh0ZXJuIGlubGluZSBBdGltZQpBdGltZUFkZERheShBdGltZSBhdCwg czMyIGRlbHRhKQp7CiAgICBhdCArPSAoKEF0aW1lKSgoZGVsdGEpKigoODY0MDBMTCkqKDEwMDAw MDBMTCkpKSk7CiAgICByZXR1cm4gYXQ7Cn0KCmV4dGVybiBpbmxpbmUgQXRpbWUKQXRpbWVBZGRN ZGF5KEF0aW1lIGF0LCBzMzIgZGVsdGEpCnsKICAgIEF0bSBhdG14OwoKICAgIEF0aW1lVG9BdG0o YXQsIGdBdGltZVRpbWVab25lLCAmYXRteCk7CiAgICBhdG14LnMubWRheSArPSBkZWx0YTsKICAg IGlmKChkZWx0YSA8IDApICYmIChhdG14LnMubWRheSA9PSAwKSkgewogICAgICAgIGF0bXgucy5t ZGF5IC09IDE7CiAgICB9IGVsc2UgaWYoKGRlbHRhID4gMCkgJiYgKGF0bXgucy5tZGF5ID09IDAp KSB7CiAgICAgICAgYXRteC5zLm1kYXkgKz0gMTsKICAgIH0KICAgIGF0bXgucy5zZXRZRGF5ID0g MDsKICAgIGF0bXgucy5zZXRNV2VlayA9IDA7CiAgICBhdG14LnMuc2V0WVdlZWsgPSAwOwogICAg YXRteC5zLnNldE1XT3JkID0gMDsKICAgIGF0bXgucy5zZXRZV09yZCA9IDA7CiAgICBhdG14LnMu c2V0V0RheSA9IDA7CiAgICBhdCA9IEF0aW1lRnJvbUF0bSgmYXRteCk7CiAgICByZXR1cm4gYXQ7 Cn0KCmV4dGVybiBpbmxpbmUgQXRpbWUKQXRpbWVBZGRXZWVrKEF0aW1lIGF0LCBzMzIgZGVsdGEp CnsKICAgIEF0bSBhdG14OwoKICAgIEF0aW1lVG9BdG0oYXQsIGdBdGltZVRpbWVab25lLCAmYXRt eCk7CiAgICBhdG14LnMueXdlZWsgKz0gZGVsdGE7CiAgICBhdG14LnMuc2V0WURheSA9IDA7CiAg ICBhdG14LnMuc2V0TW9udGggPSAwOwogICAgYXRteC5zLnNldE1EYXkgPSAwOwogICAgYXRteC5z LnNldE1XZWVrID0gMDsKICAgIGF0bXgucy5zZXRNV09yZCA9IDA7CiAgICBhdG14LnMuc2V0WVdP cmQgPSAwOwogICAgYXQgPSBBdGltZUZyb21BdG0oJmF0bXgpOwogICAgcmV0dXJuIGF0Owp9Cgpl eHRlcm4gaW5saW5lIEF0aW1lCkF0aW1lQWRkTVdlZWsoQXRpbWUgYXQsIHMzMiBkZWx0YSkKewog ICAgQXRtIGF0bXg7CgogICAgQXRpbWVUb0F0bShhdCwgZ0F0aW1lVGltZVpvbmUsICZhdG14KTsK ICAgIGF0bXgucy5td2VlayArPSBkZWx0YTsKICAgIGF0bXgucy5zZXRZRGF5ID0gMDsKICAgIGF0 bXgucy5zZXRNRGF5ID0gMDsKICAgIGF0bXgucy5zZXRZV2VlayA9IDA7CiAgICBhdG14LnMuc2V0 TVdPcmQgPSAwOwogICAgYXRteC5zLnNldFlXT3JkID0gMDsKICAgIGF0ID0gQXRpbWVGcm9tQXRt KCZhdG14KTsKICAgIHJldHVybiBhdDsKfQoKZXh0ZXJuIGlubGluZSBBdGltZQpBdGltZUFkZFdP cmQoQXRpbWUgYXQsIHMzMiBkZWx0YSkKewogICAgQXRtIGF0bXg7CgogICAgQXRpbWVUb0F0bShh dCwgZ0F0aW1lVGltZVpvbmUsICZhdG14KTsKICAgIGF0bXgucy55d29yZCArPSBkZWx0YTsKICAg IGF0bXgucy5zZXRZRGF5ID0gMDsKICAgIGF0bXgucy5zZXRNb250aCA9IDA7CiAgICBhdG14LnMu c2V0TURheSA9IDA7CiAgICBhdG14LnMuc2V0WVdlZWsgPSAwOwogICAgYXRteC5zLnNldE1XZWVr ID0gMDsKICAgIGF0bXgucy5zZXRNV09yZCA9IDA7CiAgICBhdCA9IEF0aW1lRnJvbUF0bSgmYXRt eCk7CiAgICByZXR1cm4gYXQ7Cn0KCmV4dGVybiBpbmxpbmUgQXRpbWUKQXRpbWVBZGRNV09yZChB dGltZSBhdCwgczMyIGRlbHRhKQp7CiAgICBBdG0gYXRteDsKCiAgICBBdGltZVRvQXRtKGF0LCBn QXRpbWVUaW1lWm9uZSwgJmF0bXgpOwogICAgYXRteC5zLm13b3JkICs9IGRlbHRhOwogICAgYXRt eC5zLnNldFlEYXkgPSAwOwogICAgYXRteC5zLnNldE1EYXkgPSAwOwogICAgYXRteC5zLnNldFlX ZWVrID0gMDsKICAgIGF0bXgucy5zZXRNV2VlayA9IDA7CiAgICBhdG14LnMuc2V0WVdPcmQgPSAw OwogICAgYXQgPSBBdGltZUZyb21BdG0oJmF0bXgpOwogICAgcmV0dXJuIGF0Owp9CgpleHRlcm4g aW5saW5lIEF0aW1lCkF0aW1lU2V0WWVhcihBdGltZSBhdCwgczMyIHZhbCkKewogICAgQXRtIGF0 bXg7CgogICAgQXRpbWVUb0F0bShhdCwgZ0F0aW1lVGltZVpvbmUsICZhdG14KTsKICAgIGF0bXgu cy55ZWFyID0gdmFsOwogICAgYXRteC5zLnNldEpFcmFZZWFyID0gMDsKICAgIGF0bXgucy5zZXRK RXJhTmFtZSA9IDA7CiAgICBhdCA9IEF0aW1lRnJvbUF0bSgmYXRteCk7CiAgICByZXR1cm4gYXQ7 Cn0KCmV4dGVybiBpbmxpbmUgQXRpbWUKQXRpbWVTZXRNb250aChBdGltZSBhdCwgczMyIHZhbCkK ewogICAgQXRtIGF0bXg7CgogICAgQXRpbWVUb0F0bShhdCwgZ0F0aW1lVGltZVpvbmUsICZhdG14 KTsKICAgIGF0bXgucy5tb250aCA9IHZhbDsKICAgIGF0bXgucy5zZXRZRGF5ID0gMDsKICAgIGF0 bXgucy5zZXRNV2VlayA9IDA7CiAgICBhdG14LnMuc2V0WVdlZWsgPSAwOwogICAgYXRteC5zLnNl dE1XT3JkID0gMDsKICAgIGF0bXgucy5zZXRZV09yZCA9IDA7CiAgICBhdG14LnMuc2V0V0RheSA9 IDA7CiAgICBhdCA9IEF0aW1lRnJvbUF0bSgmYXRteCk7CiAgICByZXR1cm4gYXQ7Cn0KCmV4dGVy biBpbmxpbmUgQXRpbWUKQXRpbWVTZXRZRGF5KEF0aW1lIGF0LCBzMzIgdmFsKQp7CiAgICBBdG0g YXRteDsKCiAgICBBdGltZVRvQXRtKGF0LCBnQXRpbWVUaW1lWm9uZSwgJmF0bXgpOwogICAgYXRt eC5zLnlkYXkgPSB2YWw7CiAgICBhdG14LnMuc2V0TW9udGggPSAwOwogICAgYXRteC5zLnNldE1E YXkgPSAwOwogICAgYXRteC5zLnNldE1XZWVrID0gMDsKICAgIGF0bXgucy5zZXRZV2VlayA9IDA7 CiAgICBhdG14LnMuc2V0TVdPcmQgPSAwOwogICAgYXRteC5zLnNldFlXT3JkID0gMDsKICAgIGF0 bXgucy5zZXRXRGF5ID0gMDsKICAgIGF0ID0gQXRpbWVGcm9tQXRtKCZhdG14KTsKICAgIHJldHVy biBhdDsKfQoKZXh0ZXJuIGlubGluZSBBdGltZQpBdGltZVNldE1EYXkoQXRpbWUgYXQsIHMzMiB2 YWwpCnsKICAgIEF0bSBhdG14OwoKICAgIEF0aW1lVG9BdG0oYXQsIGdBdGltZVRpbWVab25lLCAm YXRteCk7CiAgICBhdG14LnMubWRheSA9IHZhbDsKICAgIGF0bXgucy5zZXRZRGF5ID0gMDsKICAg IGF0bXgucy5zZXRNV2VlayA9IDA7CiAgICBhdG14LnMuc2V0WVdlZWsgPSAwOwogICAgYXRteC5z LnNldE1XT3JkID0gMDsKICAgIGF0bXgucy5zZXRZV09yZCA9IDA7CiAgICBhdG14LnMuc2V0V0Rh eSA9IDA7CiAgICBhdCA9IEF0aW1lRnJvbUF0bSgmYXRteCk7CiAgICByZXR1cm4gYXQ7Cn0KCmV4 dGVybiBpbmxpbmUgQXRpbWUKQXRpbWVTZXRZTUQoQXRpbWUgYXQsIHMzMiB5ZWFyLCBzMzIgbW9u dGgsIHMzMiBtZGF5KQp7CiAgICBBdG0gYXRteDsKCiAgICBBdGltZVRvQXRtKGF0LCBnQXRpbWVU aW1lWm9uZSwgJmF0bXgpOwogICAgaWYoeWVhciAhPSAwKQogICAgICAgIGF0bXgucy55ZWFyID0g eWVhcjsKICAgIGlmKG1vbnRoICE9IDApCiAgICAgICAgYXRteC5zLm1vbnRoID0gbW9udGg7CiAg ICBpZihtZGF5ICE9IDApCiAgICAgICAgYXRteC5zLm1kYXkgPSBtZGF5OwogICAgYXRteC5zLnNl dE1XZWVrID0gMDsKICAgIGF0bXgucy5zZXRZV2VlayA9IDA7CiAgICBhdG14LnMuc2V0WURheSA9 IDA7CiAgICBhdG14LnMuc2V0TVdPcmQgPSAwOwogICAgYXRteC5zLnNldFlXT3JkID0gMDsKICAg IGF0bXgucy5zZXRXRGF5ID0gMDsKICAgIGF0ID0gQXRpbWVGcm9tQXRtKCZhdG14KTsKICAgIHJl dHVybiBhdDsKfQoKZXh0ZXJuIGlubGluZSBBdGltZQpBdGltZVNldEhNUyhBdGltZSBhdCwgczMy IGhvdXIsIHMzMiBtaW4sIHMzMiBzZWMsIHMzMiBtaWNybykKewogICAgQXRtIGF0bXg7CgogICAg QXRpbWVUb0F0bShhdCwgZ0F0aW1lVGltZVpvbmUsICZhdG14KTsKICAgIGF0bXgucy5ob3VyID0g aG91cjsKICAgIGF0bXgucy5taW4gPSBtaW47CiAgICBhdG14LnMuc2VjID0gc2VjOwogICAgYXRt eC5zLm1pY3JvID0gbWljcm87CiAgICBhdCA9IEF0aW1lRnJvbUF0bSgmYXRteCk7CiAgICByZXR1 cm4gYXQ7Cn0KCmV4dGVybiBpbmxpbmUgQXRpbWUKQXRpbWVTZXRXZWVrKEF0aW1lIGF0LCBzMzIg dmFsKQp7CiAgICBBdG0gYXRteDsKCiAgICBBdGltZVRvQXRtKGF0LCBnQXRpbWVUaW1lWm9uZSwg JmF0bXgpOwogICAgYXRteC5zLnl3ZWVrID0gdmFsOwogICAgYXRteC5zLnNldFlEYXkgPSAwOwog ICAgYXRteC5zLnNldE1vbnRoID0gMDsKICAgIGF0bXgucy5zZXRNRGF5ID0gMDsKICAgIGF0bXgu cy5zZXRNV2VlayA9IDA7CiAgICBhdG14LnMuc2V0TVdPcmQgPSAwOwogICAgYXRteC5zLnNldFlX T3JkID0gMDsKICAgIGF0ID0gQXRpbWVGcm9tQXRtKCZhdG14KTsKICAgIHJldHVybiBhdDsKfQoK CgpleHRlcm4gdm9pZCBBdGltZUdldEFjY291bnRQZXJpb2QoQXRpbWUgYmFzZSwgczMyIGNsb3Nl RGF5LCBBdGltZSogc3RhcnRQZXJpb2QsIEF0aW1lKiBlbmRQZXJpb2QpIGFzbSgiX18iICJBdGlt ZUdldEFjY291bnRQZXJpb2QiKTsKZXh0ZXJuIEJvb2wgQXRpbWVDaGVja1lNRChzMzIgeWVhciwg czMyIG1vbnRoLCBzMzIgbWRheSkgYXNtKCJfXyIgIkF0aW1lQ2hlY2tZTUQiKTsKZXh0ZXJuIEJv b2wgQXRpbWVDaGVja0VZTUQoaW50IGVyYVR5cGUsIGNvbnN0IGNoYXIqIGVyYU5hbWUsIHMzMiB5 ZWFyLCBzMzIgbW9udGgsIHMzMiBtZGF5KSBhc20oIl9fIiAiQXRpbWVDaGVja0VZTUQiKTsKCmV4 dGVybiBpbmxpbmUgc3RydWN0IHRpbWVzcGVjKgpBdGltZVRvVGltZVNwZWMoQXRpbWUgYXQsIHN0 cnVjdCB0aW1lc3BlYyogdHMpCnsKICAgIGF0IC09IDIxMDg2NjgwMzIwMDAwMDAwMExMOwogICAg dHMtPnR2X3NlYyA9ICgoYXQpLygxMDAwMDAwTEwpKTsKICAgIHRzLT50dl9uc2VjID0gKChhdCkl KDEwMDAwMDBMTCkpICogMTAwMDsKICAgIHJldHVybiB0czsKfQoKZXh0ZXJuIGlubGluZSBzdHJ1 Y3QgdGltZXZhbCoKQXRpbWVUb1RpbWVWYWwoQXRpbWUgYXQsIHN0cnVjdCB0aW1ldmFsKiB0dikK ewogICAgYXQgLT0gMjEwODY2ODAzMjAwMDAwMDAwTEw7CiAgICB0di0+dHZfc2VjID0gKChhdCkv KDEwMDAwMDBMTCkpOwogICAgdHYtPnR2X3VzZWMgPSAoKGF0KSUoMTAwMDAwMExMKSk7CiAgICBy ZXR1cm4gdHY7Cn0KCmV4dGVybiBpbmxpbmUgQXRpbWUKQXRpbWVGcm9tVGltZVNwZWMoc3RydWN0 IHRpbWVzcGVjKiB0cykKewogICAgQXRpbWUgYXQgPSAoKEF0aW1lKSgodHMtPnR2X3NlYykqKDEw MDAwMDBMTCkpKSArICh0cy0+dHZfbnNlYyAvIDEwMDApOwogICAgYXQgKz0gMjEwODY2ODAzMjAw MDAwMDAwTEw7CiAgICByZXR1cm4gYXQ7Cn0KCmV4dGVybiBpbmxpbmUgQXRpbWUKQXRpbWVGcm9t VGltZVZhbChzdHJ1Y3QgdGltZXZhbCogdHYpCnsKICAgIEF0aW1lIGF0ID0gKChBdGltZSkoKHR2 LT50dl9zZWMpKigxMDAwMDAwTEwpKSkgKyB0di0+dHZfdXNlYzsKICAgIGF0ICs9IDIxMDg2Njgw MzIwMDAwMDAwMExMOwogICAgcmV0dXJuIGF0Owp9CgpleHRlcm4gaW5saW5lIEF0aW1lCkF0aW1l MEFtKEF0aW1lIHgpCnsKICAgIHggPSBBdGltZVRvTG9jYWxWYWx1ZSh4KTsKICAgIHggPSBBdGlt ZUFkanVzdERvd25EYXkoeCk7CiAgICByZXR1cm4gQXRpbWVGcm9tTG9jYWxWYWx1ZSh4KTsKfQoK ZXh0ZXJuIGlubGluZSBBdGltZQpBdGltZUZyb21UaW1lVCh0aW1lX3QgdCkKewogICAgQXRpbWUg dHggPSAoKEF0aW1lKSgodCkqKDEwMDAwMDBMTCkpKTsKICAgIHJldHVybiB0eCArIDIxMDg2Njgw MzIwMDAwMDAwMExMOwp9CgpleHRlcm4gaW5saW5lIHRpbWVfdApBdGltZVRvVGltZVQoQXRpbWUg dHgpCnsKICAgIGlmKCgyMTA4NjY4MDMyMDAwMDAwMDBMTCA8PSB0eCkgJiYgKHR4IDw9IDQ2NDI2 OTEwMzk5OTk5OTk5OUxMKSkgewogICAgICAgIHJldHVybiAodGltZV90KSgodHggLSAyMTA4NjY4 MDMyMDAwMDAwMDBMTCkvKDEwMDAwMDBMTCkpOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4g KHRpbWVfdCkoLTEpOwogICAgfQp9CgoKIyAyNSAiLi4vLi4vc3JjL3NkYm0udjAvc2RibWZsZHUu YyIgMgojIDEgImF4aXMvY3F1ZXVlLmgiIDEKIyAyNyAiYXhpcy9jcXVldWUuaCIKI2RlZmluZSBf QVhJU19DUVVFVUVfSF8gCgoKCnR5cGVkZWYgc3RydWN0IENxdWV1ZUxpbmsgewogICAgczMyIGJr d2Q7CiAgICBzMzIgZnJ3ZDsKfSBDcXVldWVMaW5rOwojIDExMCAiYXhpcy9jcXVldWUuaCIKZXh0 ZXJuIGlubGluZSB2b2lkKgpDcXVldWVUb3BBZGRyKENxdWV1ZUxpbmsqIHF1ZXVlUCwgczMyIHF1 ZXVlSWR4LCBzMzIgaWR4LCB1MzIgZWxlbWVudFNpemUsIHUzMiBsaW5rT2Zmc2V0KQp7CiAgICBB cmVhIHg7CgogICAgeC5wdHIgPSBxdWV1ZVA7CiAgICB4LnZhbCAtPSBsaW5rT2Zmc2V0OwogICAg eC5zdmFsICs9IChpZHggLSBxdWV1ZUlkeCkgKiBlbGVtZW50U2l6ZTsKICAgIHJldHVybiB4LnB0 cjsKfQoKZXh0ZXJuIGlubGluZSBDcXVldWVMaW5rKgpDcXVldWVMaW5rQWRkcihDcXVldWVMaW5r KiBxdWV1ZVAsIHMzMiBxdWV1ZUlkeCwgczMyIGlkeCwgdTMyIGVsZW1lbnRTaXplLCB1MzIgbGlu a09mZnNldCkKewogICAgQXJlYSB4OwoKICAgIHgucHRyID0gcXVldWVQOwogICAgeC52YWwgLT0g bGlua09mZnNldDsKICAgIHguc3ZhbCArPSAoaWR4IC0gcXVldWVJZHgpICogZWxlbWVudFNpemU7 CiAgICB4LnN2YWwgKz0gbGlua09mZnNldDsKICAgIHJldHVybiB4LnB0cjsKfQoKZXh0ZXJuIGlu bGluZSB2b2lkCkNxdWV1ZUluaXQoQ3F1ZXVlTGluayogcXVldWVQLCBzMzIgcXVldWVJZHgsIHMz MiB0YXJnZXRJZHgsCiAgICAgICAgICAgdTMyIGVsZW1lbnRTaXplLCB1MzIgbGlua09mZnNldCkK ewogICAgQ3F1ZXVlTGluayogdGFyZ2V0UDsKCiAgICB0YXJnZXRQID0gQ3F1ZXVlTGlua0FkZHIo cXVldWVQLCBxdWV1ZUlkeCwgdGFyZ2V0SWR4LCBlbGVtZW50U2l6ZSwgbGlua09mZnNldCk7Cgog ICAgdGFyZ2V0UC0+ZnJ3ZCA9IHRhcmdldElkeDsKICAgIHRhcmdldFAtPmJrd2QgPSB0YXJnZXRJ ZHg7Cn0KCmV4dGVybiBpbmxpbmUgdm9pZApDcXVldWVJbnNlcnRRdWV1ZShDcXVldWVMaW5rKiBx dWV1ZVAsIHMzMiBxdWV1ZUlkeCwgczMyIHRhcmdldElkeCwKICAgICAgICAgICAgIHUzMiBlbGVt ZW50U2l6ZSwgdTMyIGxpbmtPZmZzZXQpCnsKICAgIENxdWV1ZUxpbmsqIHRhcmdldFA7CiAgICBD cXVldWVMaW5rKiBmcndkUDsKCiAgICB0YXJnZXRQID0gQ3F1ZXVlTGlua0FkZHIocXVldWVQLCBx dWV1ZUlkeCwgdGFyZ2V0SWR4LCBlbGVtZW50U2l6ZSwgbGlua09mZnNldCk7CiAgICBmcndkUCA9 IENxdWV1ZUxpbmtBZGRyKHF1ZXVlUCwgcXVldWVJZHgsIHF1ZXVlUC0+ZnJ3ZCwgZWxlbWVudFNp emUsIGxpbmtPZmZzZXQpOwoKICAgIHRhcmdldFAtPmZyd2QgPSBxdWV1ZVAtPmZyd2Q7CiAgICBm cndkUC0+Ymt3ZCA9IHRhcmdldElkeDsKICAgIHRhcmdldFAtPmJrd2QgPSBxdWV1ZUlkeDsKICAg IHF1ZXVlUC0+ZnJ3ZCA9IHRhcmdldElkeDsKfQoKZXh0ZXJuIGlubGluZSB2b2lkCkNxdWV1ZUFw cGVuZFF1ZXVlKENxdWV1ZUxpbmsqIHF1ZXVlUCwgczMyIHF1ZXVlSWR4LCBzMzIgdGFyZ2V0SWR4 LAogICAgICAgICAgICAgICAgICB1MzIgZWxlbWVudFNpemUsIHUzMiBsaW5rT2Zmc2V0KQp7CiAg ICBDcXVldWVMaW5rKiB0YXJnZXRQOwogICAgQ3F1ZXVlTGluayogYmt3ZFA7CgogICAgdGFyZ2V0 UCA9IENxdWV1ZUxpbmtBZGRyKHF1ZXVlUCwgcXVldWVJZHgsIHRhcmdldElkeCwgZWxlbWVudFNp emUsIGxpbmtPZmZzZXQpOwogICAgYmt3ZFAgPSBDcXVldWVMaW5rQWRkcihxdWV1ZVAsIHF1ZXVl SWR4LCBxdWV1ZVAtPmJrd2QsIGVsZW1lbnRTaXplLCBsaW5rT2Zmc2V0KTsKCiAgICB0YXJnZXRQ LT5ia3dkID0gcXVldWVQLT5ia3dkOwogICAgYmt3ZFAtPmZyd2QgPSB0YXJnZXRJZHg7CiAgICB0 YXJnZXRQLT5mcndkID0gcXVldWVJZHg7CiAgICBxdWV1ZVAtPmJrd2QgPSB0YXJnZXRJZHg7Cn0K CmV4dGVybiBpbmxpbmUgczMyCkNxdWV1ZURlbGV0ZVF1ZXVlKENxdWV1ZUxpbmsqIHF1ZXVlUCwg czMyIHF1ZXVlSWR4LCBzMzIgdGFyZ2V0SWR4LCB1MzIgZWxlbWVudFNpemUsIHUzMiBsaW5rT2Zm c2V0KQp7CiAgICBDcXVldWVMaW5rKiB0YXJnZXRQOwogICAgQ3F1ZXVlTGluayogZnJ3ZFA7CiAg ICBDcXVldWVMaW5rKiBia3dkUDsKCiAgICB0YXJnZXRQID0gQ3F1ZXVlTGlua0FkZHIocXVldWVQ LCBxdWV1ZUlkeCwgdGFyZ2V0SWR4LCBlbGVtZW50U2l6ZSwgbGlua09mZnNldCk7CiAgICBmcndk UCA9IENxdWV1ZUxpbmtBZGRyKHF1ZXVlUCwgcXVldWVJZHgsIHRhcmdldFAtPmZyd2QsIGVsZW1l bnRTaXplLCBsaW5rT2Zmc2V0KTsKICAgIGJrd2RQID0gQ3F1ZXVlTGlua0FkZHIocXVldWVQLCBx dWV1ZUlkeCwgdGFyZ2V0UC0+Ymt3ZCwgZWxlbWVudFNpemUsIGxpbmtPZmZzZXQpOwoKICAgIGJr d2RQLT5mcndkID0gdGFyZ2V0UC0+ZnJ3ZDsKICAgIGZyd2RQLT5ia3dkID0gdGFyZ2V0UC0+Ymt3 ZDsKCiAgICByZXR1cm4gKHRhcmdldFAtPmZyd2QgIT0gdGFyZ2V0SWR4KSA/IHRhcmdldFAtPmZy d2QgOiB0YXJnZXRJZHg7Cn0KCiNkZWZpbmUgQ3F1ZXVlRGVmVG9wQWRkcihwcmVmaXgsdHlwZU5h bWUsbGlua0ZpZWxkKSBleHRlcm4gaW5saW5lIHR5cGVOYW1lKiBwcmVmaXggIyMgVG9wQWRkcih0 eXBlTmFtZSogdG9wLCBzMzIgdG9wSWR4LCBzMzIgdGd0SWR4KSB7IHJldHVybiAmKHRvcFt0Z3RJ ZHggLSB0b3BJZHhdKTsgfQoKCgojZGVmaW5lIENxdWV1ZURlZkluZGV4KHByZWZpeCx0eXBlTmFt ZSxsaW5rRmllbGQpIGV4dGVybiBpbmxpbmUgczMyIHByZWZpeCAjIyBJbmRleCh0eXBlTmFtZSog dG9wLCBzMzIgdG9wSWR4LCB0eXBlTmFtZSogdGd0KSB7IHJldHVybiAodGd0IC0gdG9wKSArIHRv cElkeDsgfQoKCgojZGVmaW5lIENxdWV1ZURlZkluaXQocHJlZml4LHR5cGVOYW1lLGxpbmtGaWVs ZCkgZXh0ZXJuIGlubGluZSB2b2lkIHByZWZpeCAjIyBJbml0KHR5cGVOYW1lKiB0b3AsIHMzMiB0 b3BJZHgsIHMzMiB0Z3RJZHgpIHsgQ3F1ZXVlSW5pdCgmKHRvcC0+bGlua0ZpZWxkKSwgdG9wSWR4 LCB0Z3RJZHgsIHNpemVvZih0eXBlTmFtZSksIG9mZnNldG9mKHR5cGVOYW1lLCBsaW5rRmllbGQp KTt9CgoKCgojZGVmaW5lIENxdWV1ZURlZkluc2VydChwcmVmaXgsdHlwZU5hbWUsbGlua0ZpZWxk KSBleHRlcm4gaW5saW5lIHZvaWQgcHJlZml4ICMjIEluc2VydCh0eXBlTmFtZSogdG9wLCBzMzIg dG9wSWR4LCBzMzIgdGd0SWR4KSB7IENxdWV1ZUluc2VydFF1ZXVlKCYodG9wLT5saW5rRmllbGQp LCB0b3BJZHgsIHRndElkeCwgc2l6ZW9mKHR5cGVOYW1lKSwgb2Zmc2V0b2YodHlwZU5hbWUsIGxp bmtGaWVsZCkpO30KCgoKCiNkZWZpbmUgQ3F1ZXVlRGVmQXBwZW5kKHByZWZpeCx0eXBlTmFtZSxs aW5rRmllbGQpIGV4dGVybiBpbmxpbmUgdm9pZCBwcmVmaXggIyMgQXBwZW5kKHR5cGVOYW1lKiB0 b3AsIHMzMiB0b3BJZHgsIHMzMiB0Z3RJZHgpIHsgQ3F1ZXVlQXBwZW5kUXVldWUoJih0b3AtPmxp bmtGaWVsZCksIHRvcElkeCwgdGd0SWR4LCBzaXplb2YodHlwZU5hbWUpLCBvZmZzZXRvZih0eXBl TmFtZSwgbGlua0ZpZWxkKSk7fQoKCgoKI2RlZmluZSBDcXVldWVEZWZEZWxldGUocHJlZml4LHR5 cGVOYW1lLGxpbmtGaWVsZCkgZXh0ZXJuIGlubGluZSBzMzIgcHJlZml4ICMjIERlbGV0ZSh0eXBl TmFtZSogdG9wLCBzMzIgdG9wSWR4LCBzMzIgdGd0SWR4KSB7IHMzMiByZXRhaW47IHJldGFpbiA9 IENxdWV1ZURlbGV0ZVF1ZXVlKCYodG9wLT5saW5rRmllbGQpLCB0b3BJZHgsIHRndElkeCwgc2l6 ZW9mKHR5cGVOYW1lKSwgb2Zmc2V0b2YodHlwZU5hbWUsIGxpbmtGaWVsZCkpOyByZXR1cm4gcmV0 YWluO30KCgoKCgoKI2RlZmluZSBDcXVldWVEZWZOZXh0KHByZWZpeCx0eXBlTmFtZSxsaW5rRmll bGQpIGV4dGVybiBpbmxpbmUgczMyIHByZWZpeCAjIyBOZXh0KHR5cGVOYW1lKiB0b3AsIHMzMiB0 b3BJZHgsIHMzMiBjdXIpIHsgczMyIG5leHQgPSB0b3BbY3VyIC0gdG9wSWR4XS5saW5rRmllbGQu ZnJ3ZDsgcmV0dXJuIG5leHQ7fQoKCgoKI2RlZmluZSBDcXVldWVEZWZQcmV2KHByZWZpeCx0eXBl TmFtZSxsaW5rRmllbGQpIGV4dGVybiBpbmxpbmUgczMyIHByZWZpeCAjIyBQcmV2KHR5cGVOYW1l KiB0b3AsIHMzMiB0b3BJZHgsIHMzMiBjdXIpIHsgczMyIHByZXYgPSB0b3BbY3VyIC0gdG9wSWR4 XS5saW5rRmllbGQuYmt3ZDsgcmV0dXJuIHByZXY7fQoKCgoKCiNkZWZpbmUgQ3F1ZXVlRGVmRnVu Y3Rpb25TZXQocHJlZml4LHR5cGVOYW1lLGxpbmtGaWVsZCkgQ3F1ZXVlRGVmVG9wQWRkcihwcmVm aXgsIHR5cGVOYW1lLCBsaW5rRmllbGQpIENxdWV1ZURlZkluZGV4KHByZWZpeCwgdHlwZU5hbWUs IGxpbmtGaWVsZCkgQ3F1ZXVlRGVmSW5pdChwcmVmaXgsIHR5cGVOYW1lLCBsaW5rRmllbGQpIENx dWV1ZURlZkluc2VydChwcmVmaXgsIHR5cGVOYW1lLCBsaW5rRmllbGQpIENxdWV1ZURlZkFwcGVu ZChwcmVmaXgsIHR5cGVOYW1lLCBsaW5rRmllbGQpIENxdWV1ZURlZkRlbGV0ZShwcmVmaXgsIHR5 cGVOYW1lLCBsaW5rRmllbGQpIENxdWV1ZURlZk5leHQocHJlZml4LCB0eXBlTmFtZSwgbGlua0Zp ZWxkKSBDcXVldWVEZWZQcmV2KHByZWZpeCwgdHlwZU5hbWUsIGxpbmtGaWVsZCkKIyAyNDYgImF4 aXMvY3F1ZXVlLmgiCiNkZWZpbmUgQ3F1ZXVlRGVmVG9wQWRkckJ5RHluU3oocHJlZml4LHR5cGVO YW1lLGxpbmtGaWVsZCkgZXh0ZXJuIGlubGluZSB0eXBlTmFtZSogcHJlZml4ICMjIFRvcEFkZHIo dHlwZU5hbWUqIHRvcCwgczMyIHRvcElkeCwgczMyIHRndElkeCwgdTMyIHN6KSB7IHJldHVybiBD cXVldWVUb3BBZGRyKCYodG9wLT5saW5rRmllbGQpLCB0b3BJZHgsIHRndElkeCwgc3osIG9mZnNl dG9mKHR5cGVOYW1lLCBsaW5rRmllbGQpKTsgfQoKCgojZGVmaW5lIENxdWV1ZURlZkluZGV4QnlE eW5TeihwcmVmaXgsdHlwZU5hbWUsbGlua0ZpZWxkKSBleHRlcm4gaW5saW5lIHMzMiBwcmVmaXgg IyMgSW5kZXgodHlwZU5hbWUqIHRvcCwgczMyIHRvcElkeCwgdHlwZU5hbWUqIHRndCwgdTMyIHN6 KSB7IHN0cnVjdCB7IGNoYXIgeFtzel07IH0gKnAxLCAqcDI7IHAxID0gKHZvaWQqKXRvcDsgcDIg PSAodm9pZCopdGd0OyByZXR1cm4gcDIgLSBwMSArIHRvcElkeDsgfQoKCgoKCgojZGVmaW5lIENx dWV1ZURlZkluaXRCeUR5blN6KHByZWZpeCx0eXBlTmFtZSxsaW5rRmllbGQpIGV4dGVybiBpbmxp bmUgdm9pZCBwcmVmaXggIyMgSW5pdCh0eXBlTmFtZSogdG9wLCBzMzIgdG9wSWR4LCBzMzIgdGd0 SWR4LCB1MzIgc3opIHsgQ3F1ZXVlSW5pdCgmKHRvcC0+bGlua0ZpZWxkKSwgdG9wSWR4LCB0Z3RJ ZHgsIHN6LCBvZmZzZXRvZih0eXBlTmFtZSwgbGlua0ZpZWxkKSk7fQoKCgoKI2RlZmluZSBDcXVl dWVEZWZJbnNlcnRCeUR5blN6KHByZWZpeCx0eXBlTmFtZSxsaW5rRmllbGQpIGV4dGVybiBpbmxp bmUgdm9pZCBwcmVmaXggIyMgSW5zZXJ0KHR5cGVOYW1lKiB0b3AsIHMzMiB0b3BJZHgsIHMzMiB0 Z3RJZHgsIHUzMiBzeikgeyBDcXVldWVJbnNlcnRRdWV1ZSgmKHRvcC0+bGlua0ZpZWxkKSwgdG9w SWR4LCB0Z3RJZHgsIHN6LCBvZmZzZXRvZih0eXBlTmFtZSwgbGlua0ZpZWxkKSk7fQoKCgoKI2Rl ZmluZSBDcXVldWVEZWZBcHBlbmRCeUR5blN6KHByZWZpeCx0eXBlTmFtZSxsaW5rRmllbGQpIGV4 dGVybiBpbmxpbmUgdm9pZCBwcmVmaXggIyMgQXBwZW5kKHR5cGVOYW1lKiB0b3AsIHMzMiB0b3BJ ZHgsIHMzMiB0Z3RJZHgsIHUzMiBzeikgeyBDcXVldWVBcHBlbmRRdWV1ZSgmKHRvcC0+bGlua0Zp ZWxkKSwgdG9wSWR4LCB0Z3RJZHgsIHN6LCBvZmZzZXRvZih0eXBlTmFtZSwgbGlua0ZpZWxkKSk7 fQoKCgoKI2RlZmluZSBDcXVldWVEZWZEZWxldGVCeUR5blN6KHByZWZpeCx0eXBlTmFtZSxsaW5r RmllbGQpIGV4dGVybiBpbmxpbmUgczMyIHByZWZpeCAjIyBEZWxldGUodHlwZU5hbWUqIHRvcCwg czMyIHRvcElkeCwgczMyIHRndElkeCwgdTMyIHN6KSB7IHMzMiByZXRhaW47IHJldGFpbiA9IENx dWV1ZURlbGV0ZVF1ZXVlKCYodG9wLT5saW5rRmllbGQpLCB0b3BJZHgsIHRndElkeCwgc3osIG9m ZnNldG9mKHR5cGVOYW1lLCBsaW5rRmllbGQpKTsgcmV0dXJuIHJldGFpbjt9CgoKCgoKCiNkZWZp bmUgQ3F1ZXVlRGVmTmV4dEJ5RHluU3oocHJlZml4LHR5cGVOYW1lLGxpbmtGaWVsZCkgZXh0ZXJu IGlubGluZSBzMzIgcHJlZml4ICMjIE5leHQodHlwZU5hbWUqIHRvcCwgczMyIHRvcElkeCwgczMy IGN1ciwgdTMyIHN6KSB7IHMzMiBuZXh0ID0gcHJlZml4ICMjIFRvcEFkZHIodG9wLCB0b3BJZHgs IGN1ciwgc3opLT5saW5rRmllbGQuZnJ3ZDsgcmV0dXJuIG5leHQ7fQoKCgoKI2RlZmluZSBDcXVl dWVEZWZQcmV2QnlEeW5TeihwcmVmaXgsdHlwZU5hbWUsbGlua0ZpZWxkKSBleHRlcm4gaW5saW5l IHMzMiBwcmVmaXggIyMgUHJldih0eXBlTmFtZSogdG9wLCBzMzIgdG9wSWR4LCBzMzIgY3VyLCB1 MzIgc3opIHsgczMyIHByZXYgPSBwcmVmaXggIyMgVG9wQWRkcih0b3AsIHRvcElkeCwgY3VyLCBz eiktPmxpbmtGaWVsZC5ia3dkOyByZXR1cm4gcHJldjt9CgoKCgoKI2RlZmluZSBDcXVldWVEZWZG dW5jdGlvblNldEJ5RHluU3oocHJlZml4LHR5cGVOYW1lLGxpbmtGaWVsZCkgQ3F1ZXVlRGVmVG9w QWRkckJ5RHluU3oocHJlZml4LCB0eXBlTmFtZSwgbGlua0ZpZWxkKSBDcXVldWVEZWZJbmRleEJ5 RHluU3oocHJlZml4LCB0eXBlTmFtZSwgbGlua0ZpZWxkKSBDcXVldWVEZWZJbml0QnlEeW5Teihw cmVmaXgsIHR5cGVOYW1lLCBsaW5rRmllbGQpIENxdWV1ZURlZkluc2VydEJ5RHluU3oocHJlZml4 LCB0eXBlTmFtZSwgbGlua0ZpZWxkKSBDcXVldWVEZWZBcHBlbmRCeUR5blN6KHByZWZpeCwgdHlw ZU5hbWUsIGxpbmtGaWVsZCkgQ3F1ZXVlRGVmRGVsZXRlQnlEeW5TeihwcmVmaXgsIHR5cGVOYW1l LCBsaW5rRmllbGQpIENxdWV1ZURlZk5leHRCeUR5blN6KHByZWZpeCwgdHlwZU5hbWUsIGxpbmtG aWVsZCkgQ3F1ZXVlRGVmUHJldkJ5RHluU3oocHJlZml4LCB0eXBlTmFtZSwgbGlua0ZpZWxkKQoj IDMwMCAiYXhpcy9jcXVldWUuaCIKCiMgMjYgIi4uLy4uL3NyYy9zZGJtLnYwL3NkYm1mbGR1LmMi IDIKIyAxICJheGlzL2Rlc2MuaCIgMQojIDI4ICJheGlzL2Rlc2MuaCIKI2RlZmluZSBfQVhJU19E RVNDX0hfIAoKCgojZGVmaW5lIGNEZXNjVmFsaWRNaW4gMgojZGVmaW5lIGNEZXNjVmFsaWRNYXgg MTMxMDcyCgojZGVmaW5lIGNEZXNjTWluIDEKI2RlZmluZSBjRGVzY01heCAyMTQ3NDgzNjQ3TAoj ZGVmaW5lIGNEZXNjSW52YWxpZCAwCgp0eXBlZGVmIHN0cnVjdCBEZXNjSW5mbyB7CiAgICBXb3Jk IHJzdnNbMTBdOwp9IERlc2NJbmZvOwoKCnR5cGVkZWYgczMyIERlc2NJZDsKI2RlZmluZSBjRGVz Y0Zvckh0aWYwIDEKI2RlZmluZSBjRGVzY0Zvckh0aWYxIDIKI2RlZmluZSBjRGVzY0ZvclNkYm0w IDMKI2RlZmluZSBjRGVzY0ZvckFkYW0wIDQKI2RlZmluZSBjRGVzY0ZvckhlYXAwIDUKCiNkZWZp bmUgY0Rlc2NSZXF1aXJlZE1heCA1CgojZGVmaW5lIE5vdEVyckRlc2MocmV0VmFsKSAoKChyZXRW YWwpID09IEVyclJldChlVXRpbERlc2NJbml0RHVwKSkgfHwgTm90RXJyKHJldFZhbCkpCiNkZWZp bmUgSXNFcnJEZXNjKHJldFZhbCkgKCgocmV0VmFsKSAhPSBFcnJSZXQoZVV0aWxEZXNjSW5pdER1 cCkpICYmIE5vdEVycihyZXRWYWwpKQoKZXh0ZXJuIGludCBEZXNjSW5pdChEZXNjSWQgaWQsIE51 bSBudW1WYWxpZERlc2NzKSBhc20oIl9fIiAiRGVzY0luaXQiKTsKZXh0ZXJuIHMzMiBEZXNjQWxs b2MoRGVzY0lkIGlkLCB2b2lkKiBlbnRpdHkpIGFzbSgiX18iICJEZXNjQWxsb2MiKTsKZXh0ZXJu IGludCBEZXNjQ2hnRW50aXR5KERlc2NJZCBpZCwgczMyIGRlc2MsIHZvaWQqIGVudGl0eSkgYXNt KCJfXyIgIkRlc2NDaGdFbnRpdHkiKTsKZXh0ZXJuIGludCBEZXNjR2V0RW50aXR5KERlc2NJZCBp ZCwgczMyIGRlc2MsIHZvaWQqKiBlbnRpdHlQKSBhc20oIl9fIiAiRGVzY0dldEVudGl0eSIpOwpl eHRlcm4gaW50IERlc2NGcmVlKERlc2NJZCBpZCwgczMyIGRlc2MpIGFzbSgiX18iICJEZXNjRnJl ZSIpOwpleHRlcm4gaW50IERlc2NHZXRJbmZvKERlc2NJZCBpZCwgRGVzY0luZm8qIGluZm8pIGFz bSgiX18iICJEZXNjR2V0SW5mbyIpOwoKCiMgMjcgIi4uLy4uL3NyYy9zZGJtLnYwL3NkYm1mbGR1 LmMiIDIKIyAxICJheGlzL2hlYXAuaCIgMQojIDI4ICJheGlzL2hlYXAuaCIKI2RlZmluZSBfQVhJ U19IRUFQX0hfIAoKCgoKdHlwZWRlZiBzMzIgSGVhcERlc2M7CgojZGVmaW5lIGNIZWFwTm9uZUZy ZWUgMQoKdHlwZWRlZiBzdHJ1Y3QgSGVhcEluZm8gewogICAgV29yZCByc3ZzWzE2XTsKCiAgICBX b3JkIGhlYXBTekN1cjsKICAgIFdvcmQgaGVhcFN6TWF4OwogICAgV29yZCBoZWFwTnVtQ3VyOwog ICAgV29yZCBoZWFwTnVtTWF4OwogICAgV29yZCBhbm9uU3pDdXI7CiAgICBXb3JkIGFub25Tek1h eDsKICAgIFdvcmQgYW5vbk51bUN1cjsKICAgIFdvcmQgYW5vbk51bU1heDsKICAgIFdvcmQgcnN2 czJbOF07Cn0gSGVhcEluZm87CgpleHRlcm4gSGVhcERlc2MgSGVhcEluaXQoU3ogaGVhcFN6LCB1 MzIgdHlwZSkgYXNtKCJfXyIgIkhlYXBJbml0Iik7CmV4dGVybiB2b2lkKiBIZWFwQWxsb2MoSGVh cERlc2MgZGVzYywgU3ogYWxsb2NTeikgYXNtKCJfXyIgIkhlYXBBbGxvYyIpOwpleHRlcm4gdm9p ZCBIZWFwRnJlZShIZWFwRGVzYyBkZXNjLCB2b2lkKiBwKSBhc20oIl9fIiAiSGVhcEZyZWUiKTsK ZXh0ZXJuIHZvaWQgSGVhcFJlbGUoSGVhcERlc2MgZGVzYykgYXNtKCJfXyIgIkhlYXBSZWxlIik7 CmV4dGVybiBpbnQgSGVhcEdldEluZm8oSGVhcERlc2MgZGVzYywgSGVhcEluZm8qIGluZm8pIGFz bSgiX18iICJIZWFwR2V0SW5mbyIpOwoKZXh0ZXJuIGludCBIZWFwR2V0TWVtb3J5QnlNbWFwKFN6 IHN6LCB2b2lkKiogcHRyKSBhc20oIl9fIiAiSGVhcEdldE1lbW9yeUJ5TW1hcCIpOwpleHRlcm4g aW50IEhlYXBGcmVlTWVtb3J5QnlVbm1hcCh2b2lkKiB0b3AsIFN6IHN6KSBhc20oIl9fIiAiSGVh cEZyZWVNZW1vcnlCeVVubWFwIik7CgoKIyAyOCAiLi4vLi4vc3JjL3NkYm0udjAvc2RibWZsZHUu YyIgMgojIDEgImF4aXMvYXRyZWUuaCIgMQojIDI3ICJheGlzL2F0cmVlLmgiCiNkZWZpbmUgX0FY SVNfQVRSRUVfSF8gCgoKCiNkZWZpbmUgY0F0cmVlTm9uZU5vZGUgMAoKdHlwZWRlZiB1MzIgQXRy ZWVJZHg7CgojZGVmaW5lIGNBdHJlZURlZXBlc3ROdW0gMzQKCiNkZWZpbmUgY0F0cmVlTm9uZVRy ZWVJZHggMAoKc3RydWN0IEF0cmVlUmVxOwojIDU3ICJheGlzL2F0cmVlLmgiCnR5cGVkZWYgaW50 ICgqQXRyZWVDb21wYXJlRnVuYykoQXJlYSBjb21wYXJlQXJnLCBBcmVhIGF1eEFyZywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBCb29sIGRhdGExSXNJbnRlcm5hbCwgQXJlYTY0IGRh dGExLCBBcmVhNjQgZGF0YTIpOwoKI2RlZmluZSBjQXRyZWVNYXRjaCAwCiNkZWZpbmUgY0F0cmVl Rm91bmQgMAojZGVmaW5lIGNBdHJlZUxvd2VyICgtMSkKI2RlZmluZSBjQXRyZWVIaWdoZXIgMQoj ZGVmaW5lIEF0cmVlSXNMb3dlcihyZXN1bHQpICgocmVzdWx0KSA8IDApCiNkZWZpbmUgQXRyZWVJ c0hpZ2hlcihyZXN1bHQpICgocmVzdWx0KSA+IDApCgojZGVmaW5lIEF0cmVlQXJlYVN6SGludChu dW1UcmVlLG51bU5vZGVzKSAoKG51bVRyZWUqNjQpKzY0KygzMioobnVtTm9kZXMpKSs2NCkKIyA4 NCAiYXhpcy9hdHJlZS5oIgp0eXBlZGVmIGludCAoKkF0cmVlQnVpbGRGdW5jKShBcmVhIGFyZzFz dCwgU3ogYnl0ZVNpemUsIHZvaWQqKiBwcCk7CiMgOTkgImF4aXMvYXRyZWUuaCIKdHlwZWRlZiBp bnQgKCpBdHJlZU9wZW5GdW5jKShBcmVhIGFyZzFzdCwgQXJlYSBhcmcybmQsIHZvaWQqKiBwcCk7 CiMgMTEzICJheGlzL2F0cmVlLmgiCnR5cGVkZWYgaW50ICgqQXRyZWVDbG9zZUZ1bmMpKEFyZWEg YXJnMXN0LCBBcmVhIGFyZzJuZCk7CiMgMTMxICJheGlzL2F0cmVlLmgiCnR5cGVkZWYgaW50ICgq QXRyZWVHcm93Tm9kZVNldCkoQXJlYSBhcmcxc3QsIEFyZWEgYXJnMm5kLCBTeiBieXRlU2l6ZSwg dm9pZCoqIHBwKTsKIyAxNDkgImF4aXMvYXRyZWUuaCIKdHlwZWRlZiBpbnQgKCpBdHJlZVJlZHVj ZU5vZGVTZXQpKEFyZWEgYXJnMXN0LCBBcmVhIGFyZzJuZCwgU3ogYnl0ZVNpemUsIHZvaWQqKiBw cCk7Cgp0eXBlZGVmIHN0cnVjdCBBdHJlZUNhbGxiYWNrcyB7CiAgICBBdHJlZUNvbXBhcmVGdW5j IGNvbXBhcmVGdW5jOwogICAgQXRyZWVPcGVuRnVuYyBvcGVuRnVuYzsKICAgIEF0cmVlQ2xvc2VG dW5jIGNsb3NlRnVuYzsKICAgIEF0cmVlR3Jvd05vZGVTZXQgZ3Jvd0Z1bmM7CiAgICBBdHJlZVJl ZHVjZU5vZGVTZXQgcmVkdWNlRnVuYzsKfSBBdHJlZUNhbGxiYWNrczsKCnR5cGVkZWYgc3RydWN0 IEF0cmVlUmVxIHsKICAgIGNvbnN0IEF0cmVlQ2FsbGJhY2tzKiBvcHJzOwogICAgQXJlYSBjb21w YXJlQXJnOwogICAgQXJlYSBvcGVuQXJnOwogICAgQXJlYSBjbG9zZUFyZzsKICAgIEFyZWEgZ3Jv d0FyZzsKICAgIEFyZWEgcmVkdWNlQXJnOwogICAgQXJlYSBhdXhBcmc7CiAgICBBcmVhIHJzdnNb M107CiAgICB2b2lkKiBhdHJlZUludGVybmFsVXNlOwogICAgdm9pZCogYXRyZWVIYW5kbGU7CiAg ICBBcmVhIGF0cmVlSW5mb3NbOF07Cn0gQXRyZWVSZXE7CgpleHRlcm4gaW50IEF0cmVlQnVpbGRO b2RlU2V0KEF0cmVlQnVpbGRGdW5jIGJ1aWxkRnVuYywgQXJlYSBhcmcsIHUzMiBudW1UcmVlLCB1 MzIgdHJlZUlkc1tdKSBhc20oIl9fIiAiQXRyZWVCdWlsZE5vZGVTZXQiKTsKZXh0ZXJuIGludCBB dHJlZUJ1aWxkTm9kZVNldFdpdGhOb2RlTnVtKEF0cmVlQnVpbGRGdW5jIGJ1aWxkRnVuYywgQXJl YSBhcmcsIHUzMiBpbml0Tm9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHUzMiBudW1UcmVlLCB1MzIgdHJlZUlkc1tdKSBhc20oIl9fIiAiQXRyZWVCdWls ZE5vZGVTZXRXaXRoTm9kZU51bSIpOwpleHRlcm4gaW50IEF0cmVlT3BlblRyZWUoQXRyZWVSZXEq IHJlcSwgdTMyIHRyZWVJZHgsIHUzMiB0cmVlSWQpIGFzbSgiX18iICJBdHJlZU9wZW5UcmVlIik7 CmV4dGVybiBpbnQgQXRyZWVSZWdpc3RBc3NvY1RyZWUoQXRyZWVSZXEqIHJlcTEsIEF0cmVlUmVx KiByZXEyKSBhc20oIl9fIiAiQXRyZWVSZWdpc3RBc3NvY1RyZWUiKTsKZXh0ZXJuIGludCBBdHJl ZUNsb3NlVHJlZShBdHJlZVJlcSogcmVxKSBhc20oIl9fIiAiQXRyZWVDbG9zZVRyZWUiKTsKZXh0 ZXJuIGludCBBdHJlZU5ld05vZGUoQXRyZWVSZXEqIHJlcSwgQXJlYTY0IGRhdGEsIEJvb2wgYWxs b3dEdXBsaWNhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHJlZUlkeCogbmV3 Tm9kZUlkeFApIGFzbSgiX18iICJBdHJlZU5ld05vZGUiKTsKZXh0ZXJuIGludCBBdHJlZURlbE5v ZGVCeUlkeChBdHJlZVJlcSogcmVxLCBBdHJlZUlkeCBub2RlKSBhc20oIl9fIiAiQXRyZWVEZWxO b2RlQnlJZHgiKTsKZXh0ZXJuIGludCBBdHJlZURlbE5vZGVCeURhdGEoQXRyZWVSZXEqIHJlcSwg QXJlYTY0IGRhdGEpIGFzbSgiX18iICJBdHJlZURlbE5vZGVCeURhdGEiKTsKZXh0ZXJuIEF0cmVl SWR4IEF0cmVlRmluZE5vZGUoQXRyZWVSZXEqIHJlcSwgQXJlYTY0IGRhdGEpIGFzbSgiX18iICJB dHJlZUZpbmROb2RlIik7CmV4dGVybiBpbnQgQXRyZWVTZWFyY2hOb2RlKEF0cmVlUmVxKiByZXEs IEF0cmVlSWR4KiBzZWFyY2hQbnRQLCBBcmVhNjQgZGF0YSkgYXNtKCJfXyIgIkF0cmVlU2VhcmNo Tm9kZSIpOwpleHRlcm4gQXRyZWVJZHggQXRyZWVOZXh0Tm9kZShBdHJlZVJlcSogcmVxLCBBdHJl ZUlkeCBjdXIpIGFzbSgiX18iICJBdHJlZU5leHROb2RlIik7CmV4dGVybiBBdHJlZUlkeCBBdHJl ZVByZXZOb2RlKEF0cmVlUmVxKiByZXEsIEF0cmVlSWR4IGN1cikgYXNtKCJfXyIgIkF0cmVlUHJl dk5vZGUiKTsKZXh0ZXJuIEF0cmVlSWR4IEF0cmVlUm9vdE5vZGUoQXRyZWVSZXEqIHJlcSkgYXNt KCJfXyIgIkF0cmVlUm9vdE5vZGUiKTsKZXh0ZXJuIEF0cmVlSWR4IEF0cmVlTGVmdE5vZGUoQXRy ZWVSZXEqIHJlcSwgQXRyZWVJZHggY3VyKSBhc20oIl9fIiAiQXRyZWVMZWZ0Tm9kZSIpOwpleHRl cm4gQXRyZWVJZHggQXRyZWVSaWdodE5vZGUoQXRyZWVSZXEqIHJlcSwgQXRyZWVJZHggY3VyKSBh c20oIl9fIiAiQXRyZWVSaWdodE5vZGUiKTsKZXh0ZXJuIGludCBBdHJlZUxlZnRIZWlnaHQoQXRy ZWVSZXEqIHJlcSwgQXRyZWVJZHggY3VyKSBhc20oIl9fIiAiQXRyZWVMZWZ0SGVpZ2h0Iik7CmV4 dGVybiBpbnQgQXRyZWVSaWdodEhlaWdodChBdHJlZVJlcSogcmVxLCBBdHJlZUlkeCBjdXIpIGFz bSgiX18iICJBdHJlZVJpZ2h0SGVpZ2h0Iik7CmV4dGVybiBpbnQgQXRyZWVOb2RlSGVpZ2h0KEF0 cmVlUmVxKiByZXEsIEF0cmVlSWR4IGN1cikgYXNtKCJfXyIgIkF0cmVlTm9kZUhlaWdodCIpOwpl eHRlcm4gQXRyZWVJZHggQXRyZWVBYm92ZU5vZGUoQXRyZWVSZXEqIHJlcSwgQXRyZWVJZHggY3Vy KSBhc20oIl9fIiAiQXRyZWVBYm92ZU5vZGUiKTsKZXh0ZXJuIGludCBBdHJlZUdldERhdGEoQXRy ZWVSZXEqIHJlcSwgQXRyZWVJZHggY3VyLCBBcmVhNjQqIGRhdGFQKSBhc20oIl9fIiAiQXRyZWVH ZXREYXRhIik7CmV4dGVybiBpbnQgQXRyZWVTZXREYXRhKEF0cmVlUmVxKiByZXEsIEF0cmVlSWR4 IGN1ciwgQXJlYTY0IGRhdGEpIGFzbSgiX18iICJBdHJlZVNldERhdGEiKTsKZXh0ZXJuIEF0cmVl SWR4IEF0cmVlTmV4dERhdGEoQXRyZWVSZXEqIHJlcSwgQXRyZWVJZHggY3VyLCBBcmVhNjQqIGRh dGFQKSBhc20oIl9fIiAiQXRyZWVOZXh0RGF0YSIpOwpleHRlcm4gQXRyZWVJZHggQXRyZWVQcmV2 RGF0YShBdHJlZVJlcSogcmVxLCBBdHJlZUlkeCBjdXIsIEFyZWE2NCogZGF0YVApIGFzbSgiX18i ICJBdHJlZVByZXZEYXRhIik7CmV4dGVybiBpbnQgQXRyZWVMb2FkTm9kZVNldEluZm8oQXRyZWVS ZXEqIHJlcSwgQXJlYTI1NiogaW5mbykgYXNtKCJfXyIgIkF0cmVlTG9hZE5vZGVTZXRJbmZvIik7 CmV4dGVybiBpbnQgQXRyZWVTdG9yZU5vZGVTZXRJbmZvKEF0cmVlUmVxKiByZXEsIEFyZWEyNTYq IGluZm8pIGFzbSgiX18iICJBdHJlZVN0b3JlTm9kZVNldEluZm8iKTsKZXh0ZXJuIGludCBBdHJl ZUxvYWRUcmVlSW5mbyhBdHJlZVJlcSogcmVxLCBBcmVhMjU2KiBpbmZvKSBhc20oIl9fIiAiQXRy ZWVMb2FkVHJlZUluZm8iKTsKZXh0ZXJuIGludCBBdHJlZVN0b3JlVHJlZUluZm8oQXRyZWVSZXEq IHJlcSwgQXJlYTI1NiogaW5mbykgYXNtKCJfXyIgIkF0cmVlU3RvcmVUcmVlSW5mbyIpOwpleHRl cm4gaW50IEF0cmVlQ2hlY2tUcmVlQ29uc2lzdGVuY3koQXRyZWVSZXEqIHJlcSkgYXNtKCJfXyIg IkF0cmVlQ2hlY2tUcmVlQ29uc2lzdGVuY3kiKTsKCmV4dGVybiBBdHJlZUlkeCBBdHJlZU5leHRV bmlxTm9kZShBdHJlZVJlcSogcmVxLCBBdHJlZUlkeCBjdXIpIGFzbSgiX18iICJBdHJlZU5leHRV bmlxTm9kZSIpOwpleHRlcm4gQXRyZWVJZHggQXRyZWVQcmV2VW5pcU5vZGUoQXRyZWVSZXEqIHJl cSwgQXRyZWVJZHggY3VyKSBhc20oIl9fIiAiQXRyZWVQcmV2VW5pcU5vZGUiKTsKZXh0ZXJuIEF0 cmVlSWR4IEF0cmVlTmV4dFVuaXFEYXRhKEF0cmVlUmVxKiByZXEsIEF0cmVlSWR4IGN1ciwgQXJl YTY0KiBkYXRhUCkgYXNtKCJfXyIgIkF0cmVlTmV4dFVuaXFEYXRhIik7CmV4dGVybiBBdHJlZUlk eCBBdHJlZVByZXZVbmlxRGF0YShBdHJlZVJlcSogcmVxLCBBdHJlZUlkeCBjdXIsIEFyZWE2NCog ZGF0YVApIGFzbSgiX18iICJBdHJlZVByZXZVbmlxRGF0YSIpOwoKZXh0ZXJuIEF0cmVlSWR4IEF0 cmVlU2FtZVRvcE5vZGUoQXRyZWVSZXEqIHJlcSwgQXRyZWVJZHggY3VyKSBhc20oIl9fIiAiQXRy ZWVTYW1lVG9wTm9kZSIpOwpleHRlcm4gQXRyZWVJZHggQXRyZWVTYW1lTGFzdE5vZGUoQXRyZWVS ZXEqIHJlcSwgQXRyZWVJZHggY3VyKSBhc20oIl9fIiAiQXRyZWVTYW1lTGFzdE5vZGUiKTsKZXh0 ZXJuIEF0cmVlSWR4IEF0cmVlU2FtZVRvcERhdGEoQXRyZWVSZXEqIHJlcSwgQXRyZWVJZHggY3Vy LCBBcmVhNjQqIGRhdGFQKSBhc20oIl9fIiAiQXRyZWVTYW1lVG9wRGF0YSIpOwpleHRlcm4gQXRy ZWVJZHggQXRyZWVTYW1lTGFzdERhdGEoQXRyZWVSZXEqIHJlcSwgQXRyZWVJZHggY3VyLCBBcmVh NjQqIGRhdGFQKSBhc20oIl9fIiAiQXRyZWVTYW1lTGFzdERhdGEiKTsKCmV4dGVybiBCb29sIEF0 cmVlSXNVbmlxdWVOb2RlKEF0cmVlUmVxKiByZXEsIEF0cmVlSWR4IGN1cikgYXNtKCJfXyIgIkF0 cmVlSXNVbmlxdWVOb2RlIik7CgpleHRlcm4gaW50IEF0cmVlR2V0Tm9kZU51bShBdHJlZVJlcSog cmVxKSBhc20oIl9fIiAiQXRyZWVHZXROb2RlTnVtIik7CmV4dGVybiBpbnQgQXRyZWVHZXRVbmlx Tm9kZU51bShBdHJlZVJlcSogcmVxKSBhc20oIl9fIiAiQXRyZWVHZXRVbmlxTm9kZU51bSIpOwpl eHRlcm4gaW50IEF0cmVlRmx1c2hOb2RlcyhBdHJlZVJlcSogcmVxKSBhc20oIl9fIiAiQXRyZWVG bHVzaE5vZGVzIik7Cgp0eXBlZGVmIHN0cnVjdCBBdHJlZVRyZWVIZWFkSW5mbyB7CiAgICBBdHJl ZUlkeCB0cmVlUm9vdDsKICAgIEF0cmVlSWR4IGxvd2VzdE5vZGU7CiAgICBBdHJlZUlkeCBoaWdo ZXN0Tm9kZTsKICAgIGludCBpbmRleDsKICAgIHUzMiB0cmVlSWQ7CiAgICBBcmVhMjU2IHVzZXJJ bmZvOwp9IEF0cmVlVHJlZUhlYWRJbmZvOwoKdHlwZWRlZiBzdHJ1Y3QgQXRyZWVOb2RlU2V0SW5m byB7CiAgICB1MzIgbnVtVHJlZTsKICAgIHUzMiB0b3RhbE5vZGVzOwogICAgdTMyIHRvdGFsRnJl ZTsKICAgIHUzMiB0b3BOb2RlSWR4OwogICAgdTMyIGxhc3RDaHVua1RvcDsKICAgIHUzMiBmcmVl Tm9kZTsKICAgIHUzMiByc3ZzWzJdOwp9IEF0cmVlTm9kZVNldEluZm87CgpleHRlcm4gaW50IEF0 cmVlR2V0VHJlZUluZm8oQXRyZWVSZXEqIG9uZU9mT3BlbmVkVHJlZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IG51bUluZm8sIEF0cmVlVHJlZUhlYWRJbmZvIGluZm9zW10p IGFzbSgiX18iICJBdHJlZUdldFRyZWVJbmZvIik7CmV4dGVybiBpbnQgQXRyZWVHZXROb2RlU2V0 SW5mbyhBdHJlZVJlcSogcmVxLCBBdHJlZU5vZGVTZXRJbmZvKiBpbmZvKSBhc20oIl9fIiAiQXRy ZWVHZXROb2RlU2V0SW5mbyIpOwoKCiNkZWZpbmUgQXRyZWVCdWlsZFJlcShyZXEsb3Byc0EsYXV4 QXJnQSxjb21wYXJlQXJnQSxvcGVuQXJnQSxjbG9zZUFyZ0EsZ3Jvd0FyZ0EscmVkdWNlQXJnQSkg eyAocmVxKS0+b3BycyA9IChjb25zdCBBdHJlZUNhbGxiYWNrcyopKG9wcnNBKTsgKHJlcSktPmF1 eEFyZy52YWwgPSAoYXV4QXJnQSk7IChyZXEpLT5jb21wYXJlQXJnLnZhbCA9IChjb21wYXJlQXJn QSk7IChyZXEpLT5vcGVuQXJnLnZhbCA9IChvcGVuQXJnQSk7IChyZXEpLT5jbG9zZUFyZy52YWwg PSAoY2xvc2VBcmdBKTsgKHJlcSktPmdyb3dBcmcudmFsID0gKGdyb3dBcmdBKTsgKHJlcSktPnJl ZHVjZUFyZy52YWwgPSAocmVkdWNlQXJnQSk7IH0KIyAyNzEgImF4aXMvYXRyZWUuaCIKZXh0ZXJu IF9faW5saW5lX18gQXRyZWVSZXEqCkF0cmVlU2V0QXV4QXJnKEF0cmVlUmVxKiByZXEsIEFyZWEg YXJnKQp7CiAgICByZXEtPmF1eEFyZyA9IGFyZzsKICAgIHJldHVybiByZXE7Cn0KCmV4dGVybiBf X2lubGluZV9fIEF0cmVlUmVxKgpBdHJlZVNldE9wZW5BcmcoQXRyZWVSZXEqIHJlcSwgQXJlYSBh cmcpCnsKICAgIHJlcS0+b3BlbkFyZyA9IGFyZzsKICAgIHJldHVybiByZXE7Cn0KCmV4dGVybiBf X2lubGluZV9fIEF0cmVlUmVxKgpBdHJlZVNldENsb3NlQXJnKEF0cmVlUmVxKiByZXEsIEFyZWEg YXJnKQp7CiAgICByZXEtPmNsb3NlQXJnID0gYXJnOwogICAgcmV0dXJuIHJlcTsKfQoKZXh0ZXJu IF9faW5saW5lX18gQXRyZWVSZXEqCkF0cmVlU2V0R3Jvd0FyZyhBdHJlZVJlcSogcmVxLCBBcmVh IGFyZykKewogICAgcmVxLT5ncm93QXJnID0gYXJnOwogICAgcmV0dXJuIHJlcTsKfQoKZXh0ZXJu IF9faW5saW5lX18gQXRyZWVSZXEqCkF0cmVlU2V0UmVkdWNlQXJnKEF0cmVlUmVxKiByZXEsIEFy ZWEgYXJnKQp7CiAgICByZXEtPnJlZHVjZUFyZyA9IGFyZzsKICAgIHJldHVybiByZXE7Cn0KIyAz MTkgImF4aXMvYXRyZWUuaCIKZXh0ZXJuIGludCBBdHJlZUNyZWF0ZVdvcmsoQXRyZWVSZXEqKiBu ZXdSZXFzLCBOdW0gblRyZWUsIE51bSB0b3RhbE5vZGVzLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgQXRyZWVDb21wYXJlRnVuYyBjb21wYXJlRnVuYywgdm9pZCogYXJnKSBhc20oIl9fIiAi QXRyZWVDcmVhdGVXb3JrIik7CmV4dGVybiBpbnQgQXRyZWVSZWxlYXNlV29yayhBdHJlZVJlcSog d29ya1JlcSwgTnVtIG5UcmVlLCBOdW0gdG90YWxOb2RlcykgYXNtKCJfXyIgIkF0cmVlUmVsZWFz ZVdvcmsiKTsKCgojIDI5ICIuLi8uLi9zcmMvc2RibS52MC9zZGJtZmxkdS5jIiAyCiMgMSAiYXhp cy9hZGFtLmgiIDEKIyAxNCAiYXhpcy9hZGFtLmgiCiNkZWZpbmUgX0FYSVNfQURBTV9IXyAKCgoK CiNkZWZpbmUgY0FkYW1GaWxlU3pNYXggMjE0NzQ4MzY0N0wKI2RlZmluZSBjQWRhbVN1YmZpbGVT ek1heCAxMDczNzQxODI0TAojZGVmaW5lIGNBZGFtRGVzY01heCAyMTQ3NDgzNjQ3TAoKCiNkZWZp bmUgY0FkYW1TdWJmaWxlSWRNYXggMTI3CgoKCgojZGVmaW5lIGNBZGFtTmlsIDAKCnR5cGVkZWYg czMyIEFkYW1EZXNjOwp0eXBlZGVmIHMzMiBBZGFtUG9zOwoKdHlwZWRlZiBBcmVhMTI4IEFkYW1N YWdpYzsKdHlwZWRlZiBBcmVhMjU2IEFkYW1Vc2VyTWFnaWM7CnR5cGVkZWYgQXJlYTEyOCBBZGFt VXNlckF0dHI7CnR5cGVkZWYgdTY0IEFkYW1TdWJmaWxlSWQ7CnR5cGVkZWYgQXRpbWUgQWRhbU1v ZFRpbWU7CgoKCgp0eXBlZGVmIHN0cnVjdCBBZGFtRmlsZVBhcmFtIHsKICAgIEFkYW1Vc2VyTWFn aWMgbWFnaWM7CgogICAgQXJlYSByc3ZzWzhdOwp9IEFkYW1GaWxlUGFyYW07CgoKCgoKdHlwZWRl ZiBzdHJ1Y3QgQWRhbVN1YmZpbGVQYXJhbSB7CiAgICBBZGFtVXNlckF0dHIgYXR0cjsKICAgIHUz MiB0eXBlOwogICAgdW5pb24gewogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgIFN6IHN1YmZp bGVTejsKICAgICAgICB9IHBsYWluOwogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgIE51bSBu dW1WYWxpZEJsazsKICAgICAgICAgICAgTnVtIG51bVRvdGFsQmxrOwogICAgICAgIH0gcmJhOwog ICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgIE51bSBudW1Ub3RhbEJsazsKICAgICAgICB9IHNi YTsKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICBOdW0gbnVtVG90YWxFbG1zOwogICAgICAg IH0gdmVsOwogICAgfSBlYWNoOwogICAgQXJlYSByc3ZzWzhdOwp9IEFkYW1TdWJmaWxlUGFyYW07 CgoKCgojZGVmaW5lIGNBZGFtUmRvbmx5IDAKI2RlZmluZSBjQWRhbVdydGFibGUgMQoKCgoKI2Rl ZmluZSBjQWRhbVN1YmZpbGVOb25lIDAKI2RlZmluZSBjQWRhbVN1YmZpbGVQbGFpbiAxCiNkZWZp bmUgY0FkYW1TdWJmaWxlUmFuZG9tQmxrQXJyYXkgMgojZGVmaW5lIGNBZGFtU3ViZmlsZVNvcnRl ZEJsa0FycmF5IDMKI2RlZmluZSBjQWRhbVN1YmZpbGVWYXJFbG1MaXN0IDQKCgoKCmV4dGVybiBB ZGFtRGVzYyBBZGFtQ3JlYXRlRmlsZShjb25zdCBDaHIqIHBhdGgsIHMzMiBtb2RlLCBBZGFtRmls ZVBhcmFtKiBwYXJhbSkKICAgIGFzbSgiX18iICJBZGFtQ3JlYXRlRmlsZSIpOwpleHRlcm4gQWRh bURlc2MgQWRhbU9wZW5GaWxlKGNvbnN0IENociogcGF0aCwgaW50IG9wZW5UeXBlLCBBZGFtVXNl ck1hZ2ljKiBtYWdpYykKICAgIGFzbSgiX18iICJBZGFtT3BlbkZpbGUiKTsKZXh0ZXJuIGludCBB ZGFtQ2xvc2VGaWxlKEFkYW1EZXNjIGRlc2MpCiAgICBhc20oIl9fIiAiQWRhbUNsb3NlRmlsZSIp OwpleHRlcm4gaW50IEFkYW1Mb2NrRmlsZShBZGFtRGVzYyBkZXNjKQogICAgYXNtKCJfXyIgIkFk YW1Mb2NrRmlsZSIpOwpleHRlcm4gaW50IEFkYW1VbmxvY2tGaWxlKEFkYW1EZXNjIGRlc2MpCiAg ICBhc20oIl9fIiAiQWRhbVVubG9ja0ZpbGUiKTsKCgoKCmV4dGVybiBBZGFtRGVzYyBBZGFtQ3Jl YXRlU3ViZmlsZShBZGFtRGVzYyBmaWxlRGVzYywgQWRhbVN1YmZpbGVJZCBpZCwgY29uc3QgQ2hy KiBsYWJlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZSwg QWRhbVN1YmZpbGVQYXJhbSogcGFyYW0pCiAgICBhc20oIl9fIiAiQWRhbUNyZWF0ZVN1YmZpbGUi KTsKZXh0ZXJuIEFkYW1EZXNjIEFkYW1PcGVuU3ViZmlsZShBZGFtRGVzYyBmaWxlRGVzYywgQWRh bVN1YmZpbGVJZCBpZCkKICAgIGFzbSgiX18iICJBZGFtT3BlblN1YmZpbGUiKTsKZXh0ZXJuIEFk YW1EZXNjIEFkYW1PcGVuU3ViZmlsZUJ5TGFiZWwoQWRhbURlc2MgZmlsZURlc2MsIGNvbnN0IENo ciogbGFiZWwpCiAgICBhc20oIl9fIiAiQWRhbU9wZW5TdWJmaWxlQnlMYWJlbCIpOwpleHRlcm4g aW50IEFkYW1DbG9zZVN1YmZpbGUoQWRhbURlc2MgZGVzYykKICAgIGFzbSgiX18iICJBZGFtQ2xv c2VTdWJmaWxlIik7CmV4dGVybiBpbnQgQWRhbUdldFN1YmZpbGVQYXJhbShBZGFtRGVzYyBkZXNj LCBBZGFtU3ViZmlsZVBhcmFtKiBwYXJhbSkKICAgIGFzbSgiX18iICJBZGFtR2V0U3ViZmlsZVBh cmFtIik7CmV4dGVybiBpbnQgQWRhbUNoYW5nZVN1YmZpbGVQYXJhbShBZGFtRGVzYyBkZXNjLCBB ZGFtU3ViZmlsZVBhcmFtKiBwYXJhbSkKICAgIGFzbSgiX18iICJBZGFtQ2hhbmdlU3ViZmlsZVBh cmFtIik7CmV4dGVybiBpbnQgQWRhbU1hcFN1YmZpbGUoQWRhbURlc2MgZGVzYywgaW50IG1hcFR5 cGUpCiAgICBhc20oIl9fIiAiQWRhbU1hcFN1YmZpbGUiKTsKZXh0ZXJuIGludCBBZGFtR2V0QWRk cihBZGFtRGVzYyBkZXNjLCB2b2lkKiogYWRkcikKICAgIGFzbSgiX18iICJBZGFtR2V0QWRkciIp OwpleHRlcm4gaW50IEFkYW1Vbm1hcFN1YmZpbGUoQWRhbURlc2MgZGVzYykKICAgIGFzbSgiX18i ICJBZGFtVW5tYXBTdWJmaWxlIik7CmV4dGVybiBpbnQgQWRhbVJlc2l6ZVN1YmZpbGUoQWRhbURl c2MgZGVzYywgU3ogbmV3U3opCiAgICBhc20oIl9fIiAiQWRhbVJlc2l6ZVN1YmZpbGUiKTsKZXh0 ZXJuIEFkYW1Qb3MgQWRhbUFsbG9jSXQoQWRhbURlc2MgZGVzYywgU3ogYWxsb2NTeikKICAgIGFz bSgiX18iICJBZGFtQWxsb2NJdCIpOwpleHRlcm4gaW50IEFkYW1GcmVlSXQoQWRhbURlc2MgZGVz YywgQWRhbVBvcyB0YXJnZXQpCiAgICBhc20oIl9fIiAiQWRhbUZyZWVJdCIpOwpleHRlcm4gQWRh bVBvcyBBZGFtR2V0TmV4dEl0KEFkYW1EZXNjIGRlc2MsIEFkYW1Qb3MgY3VyUG9zKQogICAgYXNt KCJfXyIgIkFkYW1HZXROZXh0SXQiKTsKZXh0ZXJuIGludCBBZGFtR2V0SXRzQWRkcihBZGFtRGVz YyBkZXNjLCBBZGFtUG9zIGN1clBvcywgdm9pZCoqIGFkZHIpCiAgICBhc20oIl9fIiAiQWRhbUdl dEl0c0FkZHIiKTsKZXh0ZXJuIE51bSBBZGFtR2V0VGhlbShBZGFtRGVzYyBkZXNjLCBBZGFtUG9z IHN0YXJ0UG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bSBudW0sIEFkYW1Q b3MgcG9zc1tdLCB2b2lkKiBhZGRyc1tdKQogICAgYXNtKCJfXyIgIkFkYW1HZXRUaGVtIik7CmV4 dGVybiBpbnQgQWRhbUxpc3RWYXJFbG0oQWRhbURlc2MgZGVzYywgaW50IG91dHB1dCwgY29uc3Qg Y2hhciogcHJlZml4KQogICAgYXNtKCJfXyIgIkFkYW1MaXN0VmFyRWxtIik7CgoKIyAzMCAiLi4v Li4vc3JjL3NkYm0udjAvc2RibWZsZHUuYyIgMgojIDEgImF4aXMvc2RibS5oIiAxCiMgMTQgImF4 aXMvc2RibS5oIgojZGVmaW5lIF9BWElTX1NEQk1fSF8gCgoKCgoKCgp0eXBlZGVmIHMzMiBTZGJt RGVzYzsKCgoKCgp0eXBlZGVmIGxvbmcgbG9uZyBTZGJtUmVjSWQ7CiNkZWZpbmUgY1NkYm1SZWNv cmRNYXhOdW0gNTM2ODcwOTEyCgoKCgoKdHlwZWRlZiBzMzIgU2RibUZsZE5vOwojZGVmaW5lIGNT ZGJtRmxkTm9NaW4gMQojZGVmaW5lIGNTZGJtRmxkTm9NYXggMjA0NwoKCgoKCgp0eXBlZGVmIHMz MiBTZGJtVmVjRmxkSWR4OwojZGVmaW5lIGNTZGJtVmVjSWR4QW55IDAKI2RlZmluZSBjU2RibVZl Y0lkeE1pbiAxCiNkZWZpbmUgY1NkYm1WZWNJZHhNYXggMTY3NzcyMTYKI2RlZmluZSBTZGJtVmVj SWR4VG9SZWZJZHgodmVjSWR4KSAoKHZlY0lkeCktMSkKI2RlZmluZSBTZGJtUmVmSWR4VG9WZWNJ ZHgocmVmSWR4KSAoKHJlZklkeCkrMSkKCgoKCgp0eXBlZGVmIHMzMiBTZGJtVGFibGVObzsKI2Rl ZmluZSBjU2RibVRhYmxlTm9NaW4gMQojZGVmaW5lIGNTZGJtVGFibGVOb01heCAxMDIzCgoKCgp0 eXBlZGVmIHMzMiBTZGJtRW51bVNldElkOwojZGVmaW5lIGNTZGJtRW51bVNldElkTWluIDEKI2Rl ZmluZSBjU2RibUVudW1TZXRJZE1heCAxMDIzCgoKCgp0eXBlZGVmIHMzMiBTZGJtRW51bVVuaXRJ ZDsKI2RlZmluZSBjU2RibUVudW1Vbml0SWRNaW4gMQoKCgoKI2RlZmluZSBjU2RibVZhckRhdGFM ZW5NYXggMTY3NzcyMTUKCgoKCnR5cGVkZWYgc3RydWN0IFNkYm1QYXJhbSB7CiAgICBOdW0gbnVt RmxkczsKICAgIEFyZWEgcnN2c1s3XTsKfSBTZGJtUGFyYW07CgoKCgp0eXBlZGVmIHN0cnVjdCBT ZGJtU3RhdGlzIHsKICAgIEF0aW1lIGxhc3RVcGRhdGU7CiAgICBBcmVhIHJzdnNbNl07Cn0gU2Ri bVN0YXRpczsKCgoKCnR5cGVkZWYgc3RydWN0IFNkYm1GbGREZWYgewogICAgQ2hyKiBmbGROYW1l OwogICAgU2RibUZsZE5vIGZsZE5vOwogICAgdTMyIGZsZFR5cGU7CiAgICB1MzIgZmxkQXV4VHlw ZTsKICAgIHUzMiBmbGRBdHRyczsKICAgIEFyZWExMjggdXNlckluZm87CiAgICB1MzIgdXNlcklu Zm9QYXR0ZXJuOwogICAgQXJlYSByc3ZzWzJdOwp9IFNkYm1GbGREZWY7CiNkZWZpbmUgY1NkYm1G bGRJc0tleSAweDAwMDAwMDAxCgp0eXBlZGVmIHVuaW9uIFNkYm1GbGREZWZMaW5rSW5mbyB7CiAg ICB1MzIgd2hvbGU7CiAgICBzdHJ1Y3QgewogICAgICAgIHUzMiBpc0NvcHlPbldyaXRlIDoxLAog ICAgICAgICAgICAgICAgOjMsCiAgICAgICAgICAgICAgICBsaW5rVG9UYWJsZToxMiwKICAgICAg ICAgICAgICAgIGxpbmtUb0ZsZE5vOjE2OwogICAgfSBkZXRhaWw7Cn0gU2RibUZsZERlZkxpbmtJ bmZvOwoKZXh0ZXJuIGlubGluZSB1MzIKU2RibU1ha2VGbGRBdXhUeXBlRm9yTGlua1NoYXJlZChT ZGJtVGFibGVObyB0YWJsZU5vLCBTZGJtRmxkTm8gZmxkTm8pCnsKICAgIFNkYm1GbGREZWZMaW5r SW5mbyBhdXhUeXBlOwogICAgYXV4VHlwZS53aG9sZSA9IDA7CiAgICBhdXhUeXBlLmRldGFpbC5s aW5rVG9UYWJsZSA9IHRhYmxlTm87CiAgICBhdXhUeXBlLmRldGFpbC5saW5rVG9GbGRObyA9IHRh YmxlTm87CiAgICByZXR1cm4gYXV4VHlwZS53aG9sZTsKfQoKCgoKdHlwZWRlZiBzdHJ1Y3QgU2Ri bUZsZFJlZiB7CiAgICB1MzIgZmxkVHlwZSA6OCwKICAgICAgICAgICAgICAgIHZlY0lkeCA6MjQ7 CiAgICB1MzIgZmxkU2l6ZTsKICAgIHVuaW9uIHsKICAgICAgICBBcmVhNjQgdmFsdWU7CiAgICAg ICAgdm9pZCogcmVhZFB0cjsKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICBTZGJtRW51bVNl dElkIGVudW1TZXRJZDsKICAgICAgICAgICAgU2RibUVudW1Vbml0SWQgZW51bVVuaXRJZDsKICAg ICAgICB9IGVudW1WYWx1ZTsKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICBDaHIqIHN0cjsK ICAgICAgICB9IHN0cjsKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICBjb25zdCB2b2lkKiBk YXRhOwogICAgICAgICAgICBMZW4gZGF0YUxlbjsKICAgICAgICB9IG9wYXE7CiAgICAgICAgU2Ri bVJlY0lkIHJlY0lkOwogICAgfSB2Owp9IFNkYm1GbGRSZWY7Cgp0eXBlZGVmIHN0cnVjdCBTZGJt RmxkRWxtUHRyIHsKICAgIFNkYm1SZWNJZCByZWNvcmQ7CiAgICBTZGJtVmVjRmxkSWR4IHZlY0lk eDsKfSBTZGJtRmxkRWxtUHRyOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgU2RibVF1ZXJ5Q29uZCB7CiAg ICBTZGJtRmxkTm8gZmxkTm87CiAgICB1MzIgY29uZFR5cGU7CiAgICBTZGJtRmxkUmVmIGNvbmRW YWx1ZTsKfSBTZGJtUXVlcnlDb25kOwoKCgoKI2RlZmluZSBjU2RibUZsZE5vbmVUeXBlIDB4MDAK I2RlZmluZSBjU2RibUZsZE51bWVyaWMgMHgwMQojZGVmaW5lIGNTZGJtRmxkU3RyIDB4MDIKI2Rl ZmluZSBjU2RibUZsZEJpdG1hcCAweDAzCiNkZWZpbmUgY1NkYm1GbGRGbG9hdCAweDA0CiNkZWZp bmUgY1NkYm1GbGRFbnVtIDB4MTAKI2RlZmluZSBjU2RibUZsZEVudW1WYWwgMHgxMQojZGVmaW5l IGNTZGJtRmxkRW51bU5hbWUgMHgxMgojZGVmaW5lIGNTZGJtRmxkTGluayAweDgwCiNkZWZpbmUg Y1NkYm1GbGRVbmljb2RlIDB4MjEKI2RlZmluZSBjU2RibUZsZE9wYXF1ZSAweDMwCgojZGVmaW5l IGNTZGJtRmxkVHlwZU1heCAyNTUKCgoKCiNkZWZpbmUgY1NkYm1OdW1lcmljTWluICgtOTIyMzM3 MjAzNjg1NDc3NTgwOExMKQojZGVmaW5lIGNTZGJtTnVtZXJpY01heCA5MjIzMzcyMDM2ODU0Nzc1 ODA3TEwKCiNkZWZpbmUgY1NkYm1CaXRtYXBOdW1CaXRzIDY0CgoKCgoKI2RlZmluZSBjU2RibVF1 ZXJ5TnVtZXJpY01hc2sgMHhGMDAwMDAwNwojZGVmaW5lIGNTZGJtUXVlcnlFcSAweDAwMDAwMDAx CiNkZWZpbmUgY1NkYm1RdWVyeUxvIDB4MDAwMDAwMDIKI2RlZmluZSBjU2RibVF1ZXJ5SGkgMHgw MDAwMDAwNAojZGVmaW5lIGNTZGJtUXVlcnlOb3RFcSAweDAwMDAwMDA2CgojZGVmaW5lIGNTZGJt UXVlcnlNYXRjaE1hc2sgMHhGMDAwMDBGOAojZGVmaW5lIGNTZGJtUXVlcnlNYXRjaCAweDAwMDAw MDA4CiNkZWZpbmUgY1NkYm1RdWVyeUZyd2RNYXRjaCAweDAwMDAwMDEwCiNkZWZpbmUgY1NkYm1R dWVyeUJrd2RNYXRjaCAweDAwMDAwMDIwCiNkZWZpbmUgY1NkYm1RdWVyeVVubWF0Y2ggMHgwMDAw MDAzMAojZGVmaW5lIGNTZGJtUXVlcnlIZWFkTWF0Y2ggMHgwMDAwMDA0MAoKI2RlZmluZSBjU2Ri bVF1ZXJ5Qml0bWFwTWFzayAweEYwMDAwRjAwCiNkZWZpbmUgY1NkYm1RdWVyeUFuZE1hdGNoIDB4 MDAwMDAxMDAKI2RlZmluZSBjU2RibVF1ZXJ5QW5kWmVybyAweDAwMDAwMjAwCiNkZWZpbmUgY1Nk Ym1RdWVyeUFuZFVubWF0Y2ggMHgwMDAwMDMwMAojZGVmaW5lIGNTZGJtUXVlcnlPck1hdGNoIDB4 MDAwMDA0MDAKI2RlZmluZSBjU2RibVF1ZXJ5T3JaZXJvIDB4MDAwMDA1MDAKI2RlZmluZSBjU2Ri bVF1ZXJ5T3JVbm1hdGNoIDB4MDAwMDA2MDAKI2RlZmluZSBjU2RibVF1ZXJ5WG9yTWF0Y2ggMHgw MDAwMDcwMAojZGVmaW5lIGNTZGJtUXVlcnlYb3JaZXJvIDB4MDAwMDA4MDAKI2RlZmluZSBjU2Ri bVF1ZXJ5WG9yVW5tYXRjaCAweDAwMDAwOTAwCgojZGVmaW5lIGNTZGJtUXVlcnlFbnVtTWFzayAw eEYwMDA3MDAwCiNkZWZpbmUgY1NkYm1RdWVyeUVudW1WYWxFcSAweDAwMDAxMDAwCiNkZWZpbmUg Y1NkYm1RdWVyeUVudW1WYWxOb3RFcSAweDAwMDA1MDAwCiNkZWZpbmUgY1NkYm1RdWVyeUVudW1O YW1lRXEgMHgwMDAwMjAwMAojZGVmaW5lIGNTZGJtUXVlcnlFbnVtTmFtZU5vdEVxIDB4MDAwMDYw MDAKCgojZGVmaW5lIGNTZGJtUXVlcnlBbGwgMHgxMDAwMDAwMAoKZXh0ZXJuIGludCBTZGJtRXh0 cmFjdFJlY29yZE5vKFNkYm1SZWNJZCByZWNJZCkKICAgIGFzbSgiX18iICJTZGJtRXh0cmFjdFJl Y29yZE5vIik7CmV4dGVybiBpbnQgU2RibVJlY0lkRXEoU2RibVJlY0lkIHJlY0lkMSwgU2RibVJl Y0lkIHJlY0lkMikKICAgIGFzbSgiX18iICJTZGJtUmVjSWRFcSIpOwoKCgoKZXh0ZXJuIFNkYm1E ZXNjIFNkYm1CdWlsZERiKGNvbnN0IENociogZGJQYXRoTmFtZSwgY29uc3QgQ2hyKiBkYk5hbWUp CiAgICBhc20oIl9fIiAiU2RibUJ1aWxkRGIiKTsKZXh0ZXJuIFNkYm1EZXNjIFNkYm1PcGVuRGIo Y29uc3QgQ2hyKiBkYlBhdGhOYW1lLCBjb25zdCBDaHIqIGRiTmFtZSwgQm9vbCB3cml0YWJsZSkK ICAgIGFzbSgiX18iICJTZGJtT3BlbkRiIik7CmV4dGVybiBpbnQgU2RibUNsb3NlRGIoU2RibURl c2MgZGJEZXNjKQogICAgYXNtKCJfXyIgIlNkYm1DbG9zZURiIik7CmV4dGVybiBpbnQgU2RibUxv Y2tEYihTZGJtRGVzYyBkYkRlc2MpCiAgICBhc20oIl9fIiAiU2RibUxvY2tEYiIpOwpleHRlcm4g aW50IFNkYm1VbmxvY2tEYihTZGJtRGVzYyBkYkRlc2MpCiAgICBhc20oIl9fIiAiU2RibVVubG9j a0RiIik7CmV4dGVybiBpbnQgU2RibUR1bXBEYihjb25zdCBDaHIqIGRiUGF0aE5hbWUsIGNvbnN0 IENociogZGJOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpbGVEZXNj LCBpbnQgZHVtcE1vZGUpCiAgICBhc20oIl9fIiAiU2RibUR1bXBEYiIpOwpleHRlcm4gaW50IFNk Ym1SZXN0b3JlRGIoY29uc3QgQ2hyKiBkYlBhdGhOYW1lLCBpbnQgZmlsZURlc2MsIGludCByc3Ry TW9kZSkKICAgIGFzbSgiX18iICJTZGJtUmVzdG9yZURiIik7CmV4dGVybiBpbnQgU2RibVVwZGF0 ZURiKGNvbnN0IENociogZGJQYXRoTmFtZSwgaW50IGZpbGVEZXNjLCBpbnQgcnN0ck1vZGUpCiAg ICBhc20oIl9fIiAiU2RibVVwZGF0ZURiIik7CmV4dGVybiBpbnQgU2RibUxpc3RUYWJsZXMoU2Ri bURlc2MgZGJEZXNjLCBOdW0gbnVtQXJlYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBDaHIqIHRhYmxlTmFtZXNbXSwgaW50IHRhYmxlTm9zW10pCiAgICBhc20oIl9fIiAiU2Ri bUxpc3RUYWJsZXMiKTsKZXh0ZXJuIGludCBTZGJtUHJpbnRGaWVsZChTZGJtRGVzYyB0YWJsZURl c2MsIFNkYm1SZWNJZCByZWNJZCwgU2RibUZsZE5vIGZsZE5vLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBvdXRwdXREZXNjKQogICAgYXNtKCJfXyIgIlNkYm1QcmludEZp ZWxkIik7CgoKCgpleHRlcm4gaW50IFNkYm1DcmVhdGVFbnVtU2V0KFNkYm1EZXNjIGRiRGVzYywg U2RibUVudW1TZXRJZCBpZCwgY29uc3QgQ2hyKiBlbnVtU2V0TmFtZSkKICAgIGFzbSgiX18iICJT ZGJtQ3JlYXRlRW51bVNldCIpOwpleHRlcm4gaW50IFNkYm1EZWxldGVFbnVtU2V0KFNkYm1EZXNj IGRiRGVzYywgU2RibUVudW1TZXRJZCBpZCwgY29uc3QgQ2hyKiBlbnVtU2V0TmFtZSkKICAgIGFz bSgiX18iICJTZGJtRGVsZXRlRW51bVNldCIpOwpleHRlcm4gaW50IFNkYm1BZGRFbnVtVW5pdChT ZGJtRGVzYyBkYkRlc2MsIFNkYm1FbnVtU2V0SWQgaWQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IENociogZW51bVVuaXROYW1lLCBBcmVhNjQgZW51bVVuaXRWYWwp CiAgICBhc20oIl9fIiAiU2RibUFkZEVudW1Vbml0Iik7CmV4dGVybiBpbnQgU2RibURlbGV0ZUVu dW1Vbml0KFNkYm1EZXNjIGRiRGVzYywgU2RibUVudW1TZXRJZCBpZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2hyKiBlbnVtVW5pdE5hbWUsIEFyZWE2NCBl bnVtVW5pdFZhbCkKICAgIGFzbSgiX18iICJTZGJtRGVsZXRlRW51bVVuaXQiKTsKZXh0ZXJuIGlu dCBTZGJtR2V0RW51bVNldEJ5TmFtZShTZGJtRGVzYyBkYkRlc2MsIGNvbnN0IENociogZW51bVNl dE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2RibUVudW1T ZXRJZCogaWRQKQogICAgYXNtKCJfXyIgIlNkYm1HZXRFbnVtU2V0QnlOYW1lIik7CmV4dGVybiBp bnQgU2RibUdldEVudW1TZXRCeUlkKFNkYm1EZXNjIGRiRGVzYywgQ2hyKiogZW51bVNldE5hbWVQ LCBTZGJtRW51bVNldElkIGlkKQogICAgYXNtKCJfXyIgIlNkYm1HZXRFbnVtU2V0QnlJZCIpOwpl eHRlcm4gTnVtIFNkYm1HZXRFbnVtVW5pdE51bUJ5TmFtZShTZGJtRGVzYyBkYkRlc2MsIGNvbnN0 IENociogZW51bVNldE5hbWUpCiAgICBhc20oIl9fIiAiU2RibUdldEVudW1Vbml0TnVtQnlOYW1l Iik7CmV4dGVybiBOdW0gU2RibUdldEVudW1Vbml0TnVtKFNkYm1EZXNjIGRiRGVzYywgU2RibUVu dW1TZXRJZCBpZCkKICAgIGFzbSgiX18iICJTZGJtR2V0RW51bVVuaXROdW0iKTsKZXh0ZXJuIE51 bSBTZGJtTGlzdEVudW1Vbml0KFNkYm1EZXNjIGRiRGVzYywgU2RibUVudW1TZXRJZCBpZCwgTnVt IGVudW1Vbml0TnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hyKiBl bnVtVW5pdE5hbWVzW10sIEFyZWE2NCBlbnVtVW5pdFZhbHNbXSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFNkYm1FbnVtVW5pdElkIGVudW1Vbml0SWRzW10pCiAgICBhc20o Il9fIiAiU2RibUxpc3RFbnVtVW5pdCIpOwpleHRlcm4gaW50IFNkYm1HZXRFbnVtVW5pdEJ5TmFt ZShTZGJtRGVzYyBkYkRlc2MsIFNkYm1FbnVtU2V0SWQgaWQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENociogZW51bVVuaXROYW1lLCBzNjQqIGVudW1V bml0VmFsUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2RibUVu dW1Vbml0SWQqIGVudW1Vbml0SWRQKQogICAgYXNtKCJfXyIgIlNkYm1HZXRFbnVtVW5pdEJ5TmFt ZSIpOwpleHRlcm4gaW50IFNkYm1HZXRFbnVtVW5pdEJ5VmFsKFNkYm1EZXNjIGRiRGVzYywgU2Ri bUVudW1TZXRJZCBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD aHIqKiBlbnVtVW5pdE5hbWVQLCBzNjQgZW51bVVuaXRWYWwsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU2RibUVudW1Vbml0SWQqIGVudW1Vbml0SWRQKQogICAgYXNt KCJfXyIgIlNkYm1HZXRFbnVtVW5pdEJ5VmFsIik7CmV4dGVybiBpbnQgU2RibUdldEVudW1Vbml0 QnlJZChTZGJtRGVzYyBkYkRlc2MsIFNkYm1FbnVtU2V0SWQgaWQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBDaHIqKiBlbnVtVW5pdE5hbWVQLCBzNjQqIGVudW1Vbml0 VmFsUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNkYm1FbnVtVW5p dElkIGVudW1Vbml0SWQpCiAgICBhc20oIl9fIiAiU2RibUdldEVudW1Vbml0QnlJZCIpOwoKCgoK CmV4dGVybiBTZGJtRGVzYyBTZGJtQnVpbGRUYWJsZShTZGJtRGVzYyBkYkRlc2MsIFNkYm1UYWJs ZU5vIHRibE5vLCBjb25zdCBDaHIqIHRibE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTnVtIG51bUZsZHMsIFNkYm1GbGREZWYqIGZsZHMpCiAgICBhc20oIl9fIiAiU2Ri bUJ1aWxkVGFibGUiKTsKZXh0ZXJuIFNkYm1EZXNjIFNkYm1PcGVuVGFibGUoU2RibURlc2MgZGJE ZXNjLCBTZGJtVGFibGVObyB0YWJsZU5vKQogICAgYXNtKCJfXyIgIlNkYm1PcGVuVGFibGUiKTsK ZXh0ZXJuIFNkYm1EZXNjIFNkYm1PcGVuVGFibGVCeU5hbWUoU2RibURlc2MgZGJEZXNjLCBjb25z dCBDaHIqIHRibE5hbWUpCiAgICBhc20oIl9fIiAiU2RibU9wZW5UYWJsZUJ5TmFtZSIpOwpleHRl cm4gaW50IFNkYm1DbG9zZVRhYmxlKFNkYm1EZXNjIHRhYmxlRGVzYykKICAgIGFzbSgiX18iICJT ZGJtQ2xvc2VUYWJsZSIpOwoKCgoKZXh0ZXJuIE51bSBTZGJtR2V0UmVjTnVtKFNkYm1EZXNjIHRh YmxlRGVzYykKICAgIGFzbSgiX18iICJTZGJtR2V0UmVjTnVtIik7CmV4dGVybiBOdW0gU2RibUdl dEZsZE1heChTZGJtRGVzYyB0YWJsZURlc2MpCiAgICBhc20oIl9fIiAiU2RibUdldEZsZE1heCIp OwpleHRlcm4gTnVtIFNkYm1MaXN0RmxkRGVmKFNkYm1EZXNjIHRhYmxlRGVzYywgTnVtIG51bUZs ZHMsIFNkYm1GbGREZWYgZmxkc1tdKQogICAgYXNtKCJfXyIgIlNkYm1MaXN0RmxkRGVmIik7CmV4 dGVybiBOdW0gU2RibUxpc3RMaW5rRmxkRGVmKFNkYm1EZXNjIHRhYmxlRGVzYywgTnVtIG51bUZs ZHMsIFNkYm1GbGREZWYgZmxkc1tdKQogICAgYXNtKCJfXyIgIlNkYm1MaXN0TGlua0ZsZERlZiIp OwpleHRlcm4gaW50IFNkYm1HZXRUYWJsZUluZm8oU2RibURlc2MgdGFibGVEZXNjLCBDaHIqKiB0 YWJsZU5hbWUsIFNkYm1UYWJsZU5vKiB0YWJsZU5vKQogICAgYXNtKCJfXyIgIlNkYm1HZXRUYWJs ZUluZm8iKTsKCgoKCmV4dGVybiBTZGJtUmVjSWQgU2RibUFkZFJlYyhTZGJtRGVzYyB0YWJsZURl c2MpCiAgICBhc20oIl9fIiAiU2RibUFkZFJlYyIpOwpleHRlcm4gaW50IFNkYm1EZWxldGVSZWMo U2RibURlc2MgdGFibGVEZXNjLCBTZGJtUmVjSWQgcmVjKQogICAgYXNtKCJfXyIgIlNkYm1EZWxl dGVSZWMiKTsKZXh0ZXJuIE51bSBTZGJtUXVlcnlSZWMoU2RibURlc2MgdGFibGVEZXNjLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW0gbnVtUXVlcmllcywgU2RibVF1ZXJ5Q29u ZCBxdWVyaWVzW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bSBudW1Tb3J0 RmxkcywgU2RibUZsZE5vIHNvcnRGbGRzW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE51bSBudW1SZWNzLCBTZGJtUmVjSWQgcmVjc1tdKQogICAgYXNtKCJfXyIgIlNkYm1RdWVy eVJlYyIpOwpleHRlcm4gTnVtIFNkYm1MaXN0UmVjKFNkYm1EZXNjIHRhYmxlRGVzYywgTnVtIG51 bVJlY3MsIFNkYm1SZWNJZCByZWNzW10pCiAgICBhc20oIl9fIiAiU2RibUxpc3RSZWMiKTsKZXh0 ZXJuIE51bSBTZGJtTGlzdFJlY1NvcnQoU2RibURlc2MgdGFibGVEZXNjLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBOdW0gbnVtU29ydEZsZHMsIFNkYm1GbGRObyBzb3J0Rmxk c1tdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW0gbnVtUmVjcywgU2Ri bVJlY0lkIHJlY3NbXSkKICAgIGFzbSgiX18iICJTZGJtTGlzdFJlY1NvcnQiKTsKZXh0ZXJuIE51 bSBTZGJtTGlzdFJlY1NvcnRCeU5hbWUoU2RibURlc2MgdGFibGVEZXNjLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW0gbnVtU29ydEZsZHMsIENociogc29ydEZs ZE5hbWVzW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bSBu dW1SZWNzLCBTZGJtUmVjSWQgcmVjc1tdKQogICAgYXNtKCJfXyIgIlNkYm1MaXN0UmVjU29ydEJ5 TmFtZSIpOwpleHRlcm4gTnVtIFNkYm1MaXN0UmVjV2l0aFZhbGlkRmxkKFNkYm1EZXNjIHRhYmxl RGVzYywgU2RibUZsZE5vIGZsZE5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE51bSBudW1SZWNzLCBTZGJtUmVjSWQgcmVjc1tdKQogICAgYXNtKCJfXyIgIlNk Ym1MaXN0UmVjV2l0aFZhbGlkRmxkIik7CmV4dGVybiBOdW0gU2RibUxpc3RSZWNXaXRoVmFsaWRG bGRCeU5hbWUoU2RibURlc2MgdGFibGVEZXNjLCBjb25zdCBDaHIqIG5hbWUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtIG51bVJlY3MsIFNkYm1S ZWNJZCByZWNzW10pCiAgICBhc20oIl9fIiAiU2RibUxpc3RSZWNXaXRoVmFsaWRGbGRCeU5hbWUi KTsKCgoKCmV4dGVybiBOdW0gU2RibUdldEZsZChTZGJtRGVzYyB0YWJsZURlc2MsIFNkYm1SZWNJ ZCByZWMsIFNkYm1GbGRObyBub0ZsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51 bSBudW1GbGRSZWYsIFNkYm1GbGRSZWYgZmxkUmVmW10pCiAgICBhc20oIl9fIiAiU2RibUdldEZs ZCIpOwpleHRlcm4gTnVtIFNkYm1DaGFuZ2VGbGQoU2RibURlc2MgdGFibGVEZXNjLCBTZGJtUmVj SWQgcmVjLCBTZGJtRmxkTm8gbm9GbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBOdW0gbnVtRmxkUmVmLCBTZGJtRmxkUmVmIGZsZFJlZltdKQogICAgYXNtKCJfXyIgIlNkYm1D aGFuZ2VGbGQiKTsKZXh0ZXJuIE51bSBTZGJtR2V0TGlua0ZsZChTZGJtRGVzYyB0YWJsZURlc2Ms IFNkYm1SZWNJZCByZWMsIFNkYm1GbGRObyBub0ZsZCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOdW0gbnVtRmxkUmVmLCBTZGJtRmxkUmVmIGZsZFJlZltdKQogICAgYXNtKCJf XyIgIlNkYm1HZXRMaW5rRmxkIik7CmV4dGVybiBOdW0gU2RibUNoYW5nZUxpbmtGbGQoU2RibURl c2MgdGFibGVEZXNjLCBTZGJtUmVjSWQgcmVjLCBTZGJtRmxkTm8gbm9GbGQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtIG51bUZsZFJlZiwgU2RibUZsZFJlZiBmbGRS ZWZbXSkKICAgIGFzbSgiX18iICJTZGJtQ2hhbmdlTGlua0ZsZCIpOwpleHRlcm4gTnVtIFNkYm1F cmFzZUZsZChTZGJtRGVzYyB0YWJsZURlc2MsIFNkYm1SZWNJZCByZWMsIFNkYm1GbGRObyBub0Zs ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtIG51bUluZGV4LCBTZGJtVmVj RmxkSWR4IGluZGV4aWVzW10pCiAgICBhc20oIl9fIiAiU2RibUVyYXNlRmxkIik7CmV4dGVybiBO dW0gU2RibUVyYXNlTGlua0ZsZChTZGJtRGVzYyB0YWJsZURlc2MsIFNkYm1SZWNJZCByZWMsIFNk Ym1GbGRObyBub0ZsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bSBu dW1JbmRleCwgU2RibVZlY0ZsZElkeCBpbmRleGllc1tdKQogICAgYXNtKCJfXyIgIlNkYm1FcmFz ZUxpbmtGbGQiKTsKZXh0ZXJuIE51bSBTZGJtQ2xlYXJGbGQoU2RibURlc2MgdGFibGVEZXNjLCBT ZGJtUmVjSWQgcmVjLCBTZGJtRmxkTm8gbm9GbGQpCiAgICBhc20oIl9fIiAiU2RibUNsZWFyRmxk Iik7CmV4dGVybiBOdW0gU2RibUNsZWFyTGlua0ZsZChTZGJtRGVzYyB0YWJsZURlc2MsIFNkYm1S ZWNJZCByZWMsIFNkYm1GbGRObyBub0ZsZCkKICAgIGFzbSgiX18iICJTZGJtQ2xlYXJMaW5rRmxk Iik7CmV4dGVybiBOdW0gU2RibUdldEZsZEVsbU51bShTZGJtRGVzYyB0YWJsZURlc2MsIFNkYm1S ZWNJZCByZWMsIFNkYm1GbGRObyBub0ZsZCkKICAgIGFzbSgiX18iICJTZGJtR2V0RmxkRWxtTnVt Iik7CmV4dGVybiBOdW0gU2RibUdldEZsZEVsbU1heChTZGJtRGVzYyB0YWJsZURlc2MsIFNkYm1S ZWNJZCByZWMsIFNkYm1GbGRObyBub0ZsZCkKICAgIGFzbSgiX18iICJTZGJtR2V0RmxkRWxtTWF4 Iik7CmV4dGVybiBOdW0gU2RibUdldEZsZEVsbShTZGJtRGVzYyB0YWJsZURlc2MsIFNkYm1SZWNJ ZCByZWMsIFNkYm1GbGRObyBub0ZsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFNkYm1WZWNGbGRJZHggdmVjSWR4LCBTZGJtRmxkUmVmKiBmbGRSZWYpCiAgICBhc20oIl9fIiAi U2RibUdldEZsZEVsbSIpOwpleHRlcm4gTnVtIFNkYm1HZXRMaW5rRmxkRWxtKFNkYm1EZXNjIHRh YmxlRGVzYywgU2RibVJlY0lkIHJlY0lkLCBTZGJtRmxkTm8gZmxkTm8sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgU2RibVZlY0ZsZElkeCB2ZWNJZHgsIFNkYm1GbGRSZWYq IGZsZFJlZikKICAgIGFzbSgiX18iICJTZGJtR2V0TGlua0ZsZEVsbSIpOwpleHRlcm4gTnVtIFNk Ym1HZXRGbGRCeU5hbWUoU2RibURlc2MgdGFibGVEZXNjLCBTZGJtUmVjSWQgcmVjLCBjb25zdCBD aHIqIGZsZE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW0gbnVt RmxkUmVmLCBTZGJtRmxkUmVmIGZsZFJlZltdKQogICAgYXNtKCJfXyIgIlNkYm1HZXRGbGRCeU5h bWUiKTsKZXh0ZXJuIE51bSBTZGJtQ2hhbmdlRmxkQnlOYW1lKFNkYm1EZXNjIHRhYmxlRGVzYywg U2RibVJlY0lkIHJlYywgY29uc3QgQ2hyKiBmbGROYW1lLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTnVtIG51bUZsZFJlZiwgU2RibUZsZFJlZiBmbGRSZWZbXSkKICAgIGFzbSgi X18iICJTZGJtQ2hhbmdlRmxkQnlOYW1lIik7CmV4dGVybiBOdW0gU2RibUdldExpbmtGbGRCeU5h bWUoU2RibURlc2MgdGFibGVEZXNjLCBTZGJtUmVjSWQgcmVjLCBjb25zdCBDaHIqIGZsZE5hbWUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtIG51bUZsZFJlZiwgU2RibUZs ZFJlZiBmbGRSZWZbXSkKICAgIGFzbSgiX18iICJTZGJtR2V0TGlua0ZsZEJ5TmFtZSIpOwpleHRl cm4gTnVtIFNkYm1DaGFuZ2VMaW5rRmxkQnlOYW1lKFNkYm1EZXNjIHRhYmxlRGVzYywgU2RibVJl Y0lkIHJlYywgY29uc3QgQ2hyKiBmbGROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE51bSBudW1GbGRSZWYsIFNkYm1GbGRSZWYgZmxkUmVmW10pCiAgICBhc20oIl9f IiAiU2RibUNoYW5nZUxpbmtGbGRCeU5hbWUiKTsKZXh0ZXJuIE51bSBTZGJtRXJhc2VGbGRCeU5h bWUoU2RibURlc2MgdGFibGVEZXNjLCBTZGJtUmVjSWQgcmVjLCBjb25zdCBDaHIqIGZsZE5hbWUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bSBudW1JbmRleCwgU2RibVZlY0Zs ZElkeCBpbmRleGllc1tdKQogICAgYXNtKCJfXyIgIlNkYm1FcmFzZUZsZEJ5TmFtZSIpOwpleHRl cm4gTnVtIFNkYm1FcmFzZUxpbmtGbGRCeU5hbWUoU2RibURlc2MgdGFibGVEZXNjLCBTZGJtUmVj SWQgcmVjLCBjb25zdCBDaHIqIGZsZE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBOdW0gbnVtSW5kZXgsIFNkYm1WZWNGbGRJZHggaW5kZXhpZXNbXSkKICAgIGFzbSgi X18iICJTZGJtRXJhc2VMaW5rRmxkQnlOYW1lIik7CmV4dGVybiBOdW0gU2RibUNsZWFyRmxkQnlO YW1lKFNkYm1EZXNjIHRhYmxlRGVzYywgU2RibVJlY0lkIHJlYywgY29uc3QgQ2hyKiBmbGROYW1l KQogICAgYXNtKCJfXyIgIlNkYm1DbGVhckZsZEJ5TmFtZSIpOwpleHRlcm4gTnVtIFNkYm1DbGVh ckxpbmtGbGRCeU5hbWUoU2RibURlc2MgdGFibGVEZXNjLCBTZGJtUmVjSWQgcmVjLCBjb25zdCBD aHIqIGZsZE5hbWUpCiAgICBhc20oIl9fIiAiU2RibUNsZWFyTGlua0ZsZEJ5TmFtZSIpOwpleHRl cm4gTnVtIFNkYm1HZXRGbGRFbG1OdW1CeU5hbWUoU2RibURlc2MgdGFibGVEZXNjLCBTZGJtUmVj SWQgcmVjLCBjb25zdCBDaHIqIGZsZE5hbWUpCiAgICBhc20oIl9fIiAiU2RibUdldEZsZEVsbU51 bUJ5TmFtZSIpOwpleHRlcm4gTnVtIFNkYm1HZXRGbGRFbG1NYXhCeU5hbWUoU2RibURlc2MgdGFi bGVEZXNjLCBTZGJtUmVjSWQgcmVjLCBjb25zdCBDaHIqIGZsZE5hbWUpCiAgICBhc20oIl9fIiAi U2RibUdldEZsZEVsbU1heEJ5TmFtZSIpOwoKZXh0ZXJuIE51bSBTZGJtR2V0RmxkRWxtQnlOYW1l KFNkYm1EZXNjIHRhYmxlRGVzYywgU2RibVJlY0lkIHJlYywgY29uc3QgQ2hyKiBmbGROYW1lLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2RibVZlY0ZsZElkeCB2ZWNJ ZHgsIFNkYm1GbGRSZWYqIGZsZFJlZikKICAgIGFzbSgiX18iICJTZGJtR2V0RmxkRWxtQnlOYW1l Iik7CmV4dGVybiBOdW0gU2RibUdldExpbmtGbGRFbG1CeU5hbWUoU2RibURlc2MgdGFibGVEZXNj LCBTZGJtUmVjSWQgcmVjLCBjb25zdCBDaHIqIGZsZE5hbWUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgU2RibVZlY0ZsZElkeCB2ZWNJZHgsIFNkYm1GbGRSZWYq IGZsZFJlZikKICAgIGFzbSgiX18iICJTZGJtR2V0TGlua0ZsZEVsbUJ5TmFtZSIpOwpleHRlcm4g TnVtIFNkYm1HZXRMaW5rRmxkRWxtcyhTZGJtRGVzYyB0YWJsZURlc2MsIFNkYm1SZWNJZCByZWNz W10sIE51bSBudW1SZWNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT ZGJtRmxkTm8gbm9GbGQsIFNkYm1WZWNGbGRJZHggdmVjSWR4LCBTZGJtRmxkUmVmIGZsZFJlZltd KQogICAgYXNtKCJfXyIgIlNkYm1HZXRMaW5rRmxkRWxtcyIpOwpleHRlcm4gTnVtIFNkYm1HZXRM aW5rRmxkRWxtc0J5TmFtZShTZGJtRGVzYyB0YWJsZURlc2MsIFNkYm1SZWNJZCByZWNzW10sIE51 bSBudW1SZWNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyKiBmbGROYW1lLCBTZGJtVmVjRmxkSWR4IHZlY0lkeCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2RibUZsZFJlZiBmbGRSZWZbXSkKICAgIGFz bSgiX18iICJTZGJtR2V0TGlua0ZsZEVsbXNCeU5hbWUiKTsKZXh0ZXJuIE51bSBTZGJtR2V0Rmxk RWxtcyhTZGJtRGVzYyB0YWJsZURlc2MsIFNkYm1SZWNJZCByZWNzW10sIE51bSBudW1SZWNzLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNkYm1GbGRObyBub0ZsZCwgU2RibVZl Y0ZsZElkeCB2ZWNJZHgsIFNkYm1GbGRSZWYgZmxkUmVmW10pCiAgICBhc20oIl9fIiAiU2RibUdl dEZsZEVsbXMiKTsKZXh0ZXJuIE51bSBTZGJtR2V0RmxkRWxtc0J5TmFtZShTZGJtRGVzYyB0YWJs ZURlc2MsIFNkYm1SZWNJZCByZWNzW10sIE51bSBudW1SZWNzLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZsZE5hbWUsIFNkYm1WZWNGbGRJZHgg dmVjSWR4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNkYm1GbGRS ZWYgZmxkUmVmW10pCiAgICBhc20oIl9fIiAiU2RibUdldEZsZEVsbXNCeU5hbWUiKTsKCgpleHRl cm4gaW50IFNkYm1HZXRGbGREZWZCeU5hbWUoU2RibURlc2MgdGFibGVEZXNjLCBjb25zdCBDaHIq IG5hbWUsIFNkYm1GbGREZWYqIGZsZERlZikKICAgIGFzbSgiX18iICJTZGJtR2V0RmxkRGVmQnlO YW1lIik7CmV4dGVybiBpbnQgU2RibUdldEZsZERlZihTZGJtRGVzYyB0YWJsZURlc2MsIFNkYm1G bGRObyBmbGRObywgU2RibUZsZERlZiogZmxkRGVmKQogICAgYXNtKCJfXyIgIlNkYm1HZXRGbGRE ZWYiKTsKCmV4dGVybiBpbnQgU2RibUdldExpbmtGbGREZWZCeU5hbWUoU2RibURlc2MgdGFibGVE ZXNjLCBjb25zdCBDaHIqIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU2RibUZsZERlZiogZmxkRGVmKQogICAgYXNtKCJfXyIgIlNkYm1HZXRMaW5rRmxk RGVmQnlOYW1lIik7CmV4dGVybiBpbnQgU2RibUdldExpbmtGbGREZWYoU2RibURlc2MgdGFibGVE ZXNjLCBTZGJtRmxkTm8gZmxkTm8sIFNkYm1GbGREZWYqIGZsZERlZikKICAgIGFzbSgiX18iICJT ZGJtR2V0TGlua0ZsZERlZiIpOwoKZXh0ZXJuIExlbiBTZGJtUmVhZEZsZEVsbShTZGJtRGVzYyB0 YWJsZURlc2MsIFNkYm1SZWNJZCByZWMsIFNkYm1GbGRObyBub0ZsZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTZGJtVmVjRmxkSWR4IHZlY0lkeCwgaW50IGZsZFR5cGUsIHZv aWQqIGJ1ZmYsIExlbiBidWZmTGVuKQogICAgYXNtKCJfXyIgIlNkYm1SZWFkRmxkRWxtIik7CmV4 dGVybiBMZW4gU2RibVJlYWRMaW5rRmxkRWxtKFNkYm1EZXNjIHRhYmxlRGVzYywgU2RibVJlY0lk IHJlY0lkLCBTZGJtRmxkTm8gZmxkTm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFNkYm1WZWNGbGRJZHggdmVjSWR4LCBpbnQgZmxkVHlwZSwgdm9pZCogYnVmZiwgTGVu IGJ1ZmZMZW4pCiAgICBhc20oIl9fIiAiU2RibVJlYWRMaW5rRmxkRWxtIik7CmV4dGVybiBMZW4g U2RibVJlYWRGbGRFbG1CeU5hbWUoU2RibURlc2MgdGFibGVEZXNjLCBTZGJtUmVjSWQgcmVjLCBj b25zdCBDaHIqIGZsZE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgU2RibVZlY0ZsZElkeCB2ZWNJZHgsIGludCBmbGRUeXBlLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGJ1ZmYsIExlbiBidWZmTGVuKQogICAgYXNtKCJf XyIgIlNkYm1SZWFkRmxkRWxtQnlOYW1lIik7CmV4dGVybiBMZW4gU2RibVJlYWRMaW5rRmxkRWxt QnlOYW1lKFNkYm1EZXNjIHRhYmxlRGVzYywgU2RibVJlY0lkIHJlYywgY29uc3QgQ2hyKiBmbGRO YW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZGJtVmVj RmxkSWR4IHZlY0lkeCwgaW50IGZsZFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQqIGJ1ZmYsIExlbiBidWZmTGVuKQogICAgYXNtKCJfXyIgIlNk Ym1SZWFkTGlua0ZsZEVsbUJ5TmFtZSIpOwpleHRlcm4gTGVuIFNkYm1Xcml0ZUZsZEVsbShTZGJt RGVzYyB0YWJsZURlc2MsIFNkYm1SZWNJZCByZWMsIFNkYm1GbGRObyBub0ZsZCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2RibVZlY0ZsZElkeCB2ZWNJZHgsIGludCBmbGRU eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBidWZm LCBMZW4gYnVmZkxlbikKICAgIGFzbSgiX18iICJTZGJtV3JpdGVGbGRFbG0iKTsKZXh0ZXJuIExl biBTZGJtV3JpdGVMaW5rRmxkRWxtKFNkYm1EZXNjIHRhYmxlRGVzYywgU2RibVJlY0lkIHJlY0lk LCBTZGJtRmxkTm8gZmxkTm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBTZGJtVmVjRmxkSWR4IHZlY0lkeCwgaW50IGZsZFR5cGUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBidWZmLCBMZW4gYnVmZkxlbikKICAgIGFz bSgiX18iICJTZGJtV3JpdGVMaW5rRmxkRWxtIik7CmV4dGVybiBMZW4gU2RibVdyaXRlRmxkRWxt QnlOYW1lKFNkYm1EZXNjIHRhYmxlRGVzYywgU2RibVJlY0lkIHJlYywgY29uc3QgQ2hyKiBmbGRO YW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZGJtVmVjRmxk SWR4IHZlY0lkeCwgaW50IGZsZFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHZvaWQqIGJ1ZmYsIExlbiBidWZmTGVuKQogICAgYXNtKCJfXyIgIlNk Ym1Xcml0ZUZsZEVsbUJ5TmFtZSIpOwpleHRlcm4gTGVuIFNkYm1Xcml0ZUxpbmtGbGRFbG1CeU5h bWUoU2RibURlc2MgdGFibGVEZXNjLCBTZGJtUmVjSWQgcmVjLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2hyKiBmbGROYW1lLCBTZGJtVmVjRmxk SWR4IHZlY0lkeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBmbGRUeXBlLCBjb25zdCB2b2lkKiBidWZmLCBMZW4gYnVmZkxlbikKICAgIGFzbSgiX18i ICJTZGJtV3JpdGVMaW5rRmxkRWxtQnlOYW1lIik7CmV4dGVybiBpbnQgU2RibUZpbmRNaW5GbGRF bG0oU2RibURlc2MgdGFibGVEZXNjLCBTZGJtRmxkTm8gZmxkTm8sIFNkYm1GbGRFbG1QdHIqIGVs bVApCiAgICBhc20oIl9fIiAiU2RibUZpbmRNaW5GbGRFbG0iKTsKZXh0ZXJuIGludCBTZGJtRmlu ZE1heEZsZEVsbShTZGJtRGVzYyB0YWJsZURlc2MsIFNkYm1GbGRObyBmbGRObywgU2RibUZsZEVs bVB0ciogZWxtUCkKICAgIGFzbSgiX18iICJTZGJtRmluZE1heEZsZEVsbSIpOwpleHRlcm4gaW50 IFNkYm1GaW5kTWluRmxkRWxtQnlOYW1lKFNkYm1EZXNjIHRhYmxlRGVzYywgY29uc3QgQ2hyKiBm bGROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNkYm1G bGRFbG1QdHIqIGVsbVApCiAgICBhc20oIl9fIiAiU2RibUZpbmRNaW5GbGRFbG1CeU5hbWUiKTsK ZXh0ZXJuIGludCBTZGJtRmluZE1heEZsZEVsbUJ5TmFtZShTZGJtRGVzYyB0YWJsZURlc2MsIGNv bnN0IENociogZmxkTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTZGJtRmxkRWxtUHRyKiBlbG1QKQogICAgYXNtKCJfXyIgIlNkYm1GaW5kTWF4RmxkRWxt QnlOYW1lIik7CmV4dGVybiBpbnQgU2RibUxpc3RVbmlxdWVGbGRFbG0oU2RibURlc2MgdGFibGVE ZXNjLCBTZGJtRmxkTm8gZmxkTm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU2RibUZsZEVsbVB0ciBlbG1zW10sIE51bSBudW1FbG1zKQogICAgYXNtKCJfXyIgIlNk Ym1MaXN0VW5pcXVlRmxkRWxtIik7CmV4dGVybiBpbnQgU2RibUxpc3RVbmlxdWVGbGRFbG1CeU5h bWUoU2RibURlc2MgdGFibGVEZXNjLCBjb25zdCBDaHIqIGZsZE5hbWUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2RibUZsZEVsbVB0ciBlbG1zW10sIE51 bSBudW1FbG1zKQogICAgYXNtKCJfXyIgIlNkYm1MaXN0VW5pcXVlRmxkRWxtQnlOYW1lIik7CgoK ZXh0ZXJuIGludCBTZGJtUmVhZEZsZEVsbXNBc0FycmF5MShTZGJtRGVzYyB0YWJsZURlc2MsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2RibVJlY0lkIHJlY3Nb XSwgTnVtIG51bVJlY3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgU2RibUZsZE5vIG5vRmxkLCBTZGJtVmVjRmxkSWR4IHZlY0lkeCwgaW50IGZsZFR5cGUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYnVmZiwgTGVu IGFycmF5RWxlbUxlbikKICAgIGFzbSgiX18iICJTZGJtUmVhZEZsZEVsbXNBc0FycmF5MSIpOwpl eHRlcm4gaW50IFNkYm1SZWFkRmxkRWxtc0FzQXJyYXkxQnlOYW1lKFNkYm1EZXNjIHRhYmxlRGVz YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZGJt UmVjSWQgcmVjc1tdLCBOdW0gbnVtUmVjcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBDaHIqIGZsZE5hbWUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2RibVZlY0ZsZElkeCB2ZWNJZHgsIGlu dCBmbGRUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQqIGJ1ZmYsIExlbiBhcnJheUVsZW1MZW4pCiAgICBhc20oIl9fIiAiU2RibVJlYWRG bGRFbG1zQXNBcnJheTFCeU5hbWUiKTsKZXh0ZXJuIGludCBTZGJtUmVhZExpbmtGbGRFbG1zQXNB cnJheTEoU2RibURlc2MgdGFibGVEZXNjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTZGJtUmVjSWQgcmVjc1tdLCBOdW0gbnVtUmVjcywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2RibUZsZE5vIG5vRmxkLCBT ZGJtVmVjRmxkSWR4IHZlY0lkeCwgaW50IGZsZFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGJ1ZmYsIExlbiBhcnJheUVsZW1MZW4pCiAg ICBhc20oIl9fIiAiU2RibVJlYWRMaW5rRmxkRWxtc0FzQXJyYXkxIik7CmV4dGVybiBpbnQgU2Ri bVJlYWRMaW5rRmxkRWxtc0FzQXJyYXkxQnlOYW1lKFNkYm1EZXNjIHRhYmxlRGVzYywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2RibVJlY0lk IHJlY3NbXSwgTnVtIG51bVJlY3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IENociogZmxkTmFtZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2RibVZlY0ZsZElkeCB2ZWNJZHgs IGludCBmbGRUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkKiBidWZmLCBMZW4gYXJyYXlFbGVtTGVuKQogICAgYXNtKCJfXyIgIlNk Ym1SZWFkTGlua0ZsZEVsbXNBc0FycmF5MUJ5TmFtZSIpOwpleHRlcm4gaW50IFNkYm1SZWFkRmxk RWxtc0FzQXJyYXkyKFNkYm1EZXNjIHRhYmxlRGVzYywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTZGJtUmVjSWQgcmVjc1tdLCBOdW0gbnVtUmVjcywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZGJtRmxkTm8gbm9GbGQsIFNk Ym1WZWNGbGRJZHggdmVjSWR4LCBpbnQgZmxkVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkKiBidWZmLCBMZW4gdG90YWxBcmVhTGVuLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGRhdGFWZWNbXSwgTGVu IGxlblZlY1tdKQogICAgYXNtKCJfXyIgIlNkYm1SZWFkRmxkRWxtc0FzQXJyYXkyIik7CmV4dGVy biBpbnQgU2RibVJlYWRGbGRFbG1zQXNBcnJheTJCeU5hbWUoU2RibURlc2MgdGFibGVEZXNjLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNkYm1SZWNJ ZCByZWNzW10sIE51bSBudW1SZWNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IENociogZmxkTmFtZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZGJtVmVjRmxkSWR4IHZlY0lkeCwgaW50IGZs ZFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCogYnVmZiwgTGVuIHRvdGFsQXJlYUxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBkYXRhVmVjW10sIExlbiBsZW5WZWNbXSkKICAg IGFzbSgiX18iICJTZGJtUmVhZEZsZEVsbXNBc0FycmF5MkJ5TmFtZSIpOwpleHRlcm4gaW50IFNk Ym1SZWFkTGlua0ZsZEVsbXNBc0FycmF5MihTZGJtRGVzYyB0YWJsZURlc2MsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNkYm1SZWNJZCByZWNzW10sIE51 bSBudW1SZWNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBTZGJtRmxkTm8gbm9GbGQsIFNkYm1WZWNGbGRJZHggdmVjSWR4LCBpbnQgZmxkVHlwZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYnVmZiwg TGVuIHRvdGFsQXJlYUxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdm9pZCogZGF0YVZlY1tdLCBMZW4gbGVuVmVjW10pCiAgICBhc20oIl9fIiAiU2Ri bVJlYWRMaW5rRmxkRWxtc0FzQXJyYXkyIik7CmV4dGVybiBpbnQgU2RibVJlYWRMaW5rRmxkRWxt c0FzQXJyYXkyQnlOYW1lKFNkYm1EZXNjIHRhYmxlRGVzYywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2RibVJlY0lkIHJlY3NbXSwgTnVtIG51 bVJlY3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IENociogZmxkTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU2RibVZlY0ZsZElkeCB2ZWNJZHgsIGludCBmbGRUeXBlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk KiBidWZmLCBMZW4gdG90YWxBcmVhTGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBkYXRhVmVjW10sIExlbiBsZW5WZWNbXSkKICAg IGFzbSgiX18iICJTZGJtUmVhZExpbmtGbGRFbG1zQXNBcnJheTJCeU5hbWUiKTsKCgojIDMxICIu Li8uLi9zcmMvc2RibS52MC9zZGJtZmxkdS5jIiAyCgojIDEgIi4uLy4uL3NyYy9zZGJtLnYwL3Nk Ym1mbXQuaCIgMQojIDE0ICIuLi8uLi9zcmMvc2RibS52MC9zZGJtZm10LmgiCiNkZWZpbmUgX0FY SVNfU0RCTUZNVF9IXyAKCgojIDEgImF4aXMvYml0b3BzLmgiIDEKIyAyNyAiYXhpcy9iaXRvcHMu aCIKI2RlZmluZSBfQVhJU19CSVRPUFNfSF8gCgoKCiNkZWZpbmUgQml0TnVtT2ZJdChlbnRpdHkp IChzaXplb2YoZW50aXR5KSA8PCAzKQojZGVmaW5lIEJpdE51bU9mVGhhdChieXRlc2l6ZSkgKChi eXRlc2l6ZSkgKiA4KQoKI2RlZmluZSBjQml0T2Zmc2V0SW5Xb3JkIDB4MUYKI2RlZmluZSBjQml0 Q291bnRJbldvcmQgNQojZGVmaW5lIEJpdE51bVRvQ2VpbFdvcmROdW0oYml0TnVtKSAoKChiaXRO dW0pICsgMzEpID4+IDUpCiNkZWZpbmUgQml0TnVtVG9GbG9vcldvcmROdW0oYml0TnVtKSAoKChi aXROdW0pKSA+PiA1KQojZGVmaW5lIEJpdE51bVRvV29yZE51bShiaXROdW0pIEJpdE51bVRvQ2Vp bFdvcmROdW0oYml0TnVtKQojZGVmaW5lIEJpdE51bUZyb21Xb3JkTnVtKHdvcmROdW0pICgod29y ZE51bSkgPDwgNSkKIyAxMzQgImF4aXMvYml0b3BzLmgiCiMgMSAiYXhpcy9iaXRvcHNfaTM4Ni5o IiAxCiMgMjcgImF4aXMvYml0b3BzX2kzODYuaCIKI2RlZmluZSBfQVhJU19CSVRPUFNfSTM4Nl9I XyAKI2RlZmluZSBfQVhJU19CSVRPUFNfQVJDSF9IXyAKIyA0MiAiYXhpcy9iaXRvcHNfaTM4Ni5o IgpzdHJ1Y3QgX19kdW1teSB7IHVuc2lnbmVkIGxvbmcgYVsxMDBdOyB9OwojZGVmaW5lIEFERFIg KCooc3RydWN0IF9fZHVtbXkgKikgYWRkcikKI2RlZmluZSBDT05TVF9BRERSICgqKGNvbnN0IHN0 cnVjdCBfX2R1bW15ICopIGFkZHIpCgpleHRlcm4gX19pbmxpbmVfXyBXb3JkCkF4aXNHZXRXb3Jk Rmlyc3ROMChXb3JkIGJpdHMwKQp7CiAgICBXb3JkIHg7CgogICAgeCA9IChXb3JkKSgtMSk7CiAg ICB4IDw8PSBiaXRzMDsKCiAgICByZXR1cm4geDsKfQoKZXh0ZXJuIF9faW5saW5lX18gV29yZApB eGlzU2V0Qml0KFdvcmQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7CiAgICBXb3JkIG9sZGJp dDsKCiAgICBhZGRyID0gJigoKihzdHJ1Y3QgX19kdW1teSAqKSBhZGRyKS5hWyhucikgPj4gNV0p OwogICAgbnIgJj0gMHgxRjsKICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJsb2NrIDsgIgogICAg ICAgICAgICAgICAgICAgICAgICAgImJ0c2wgJTIsJTFcblx0c2JibCAlMCwlMCIKICAgICAgICAg ICAgICAgICAgICAgICAgIDoiPXIiIChvbGRiaXQpLCI9bSIgKCgqKHN0cnVjdCBfX2R1bW15ICop IGFkZHIpKQogICAgICAgICAgICAgICAgICAgICAgICAgOiJpciIgKG5yKSk7CiAgICByZXR1cm4g b2xkYml0Owp9CgpleHRlcm4gX19pbmxpbmVfXyBXb3JkCkF4aXNDbGVhckJpdChXb3JkIG5yLCB2 b2xhdGlsZSB2b2lkICogYWRkcikKewogICAgV29yZCBvbGRiaXQ7CgogICAgYWRkciA9ICYoKCoo c3RydWN0IF9fZHVtbXkgKikgYWRkcikuYVsobnIpID4+IDVdKTsKICAgIG5yICY9IDB4MUY7CiAg ICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibG9jayA7ICIKICAgICAgICAgICAgICAgICAgICAgICAg ICJidHJsICUyLCUxXG5cdHNiYmwgJTAsJTAiCiAgICAgICAgICAgICAgICAgICAgICAgICA6Ij1y IiAob2xkYml0KSwiPW0iICgoKihzdHJ1Y3QgX19kdW1teSAqKSBhZGRyKSkKICAgICAgICAgICAg ICAgICAgICAgICAgIDoiaXIiIChucikpOwogICAgcmV0dXJuIG9sZGJpdDsKfQoKZXh0ZXJuIF9f aW5saW5lX18gV29yZApBeGlzQ2hhbmdlQml0KFdvcmQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRy KQp7CiAgICBXb3JkIG9sZGJpdDsKCiAgICBhZGRyID0gJigoKihzdHJ1Y3QgX19kdW1teSAqKSBh ZGRyKS5hWyhucikgPj4gNV0pOwogICAgbnIgJj0gMHgxRjsKICAgIF9fYXNtX18gX192b2xhdGls ZV9fKCJsb2NrIDsgIgogICAgICAgICAgICAgICAgICAgICAgICAgImJ0Y2wgJTIsJTFcblx0c2Ji bCAlMCwlMCIKICAgICAgICAgICAgICAgICAgICAgICAgIDoiPXIiIChvbGRiaXQpLCI9bSIgKCgq KHN0cnVjdCBfX2R1bW15ICopIGFkZHIpKQogICAgICAgICAgICAgICAgICAgICAgICAgOiJpciIg KG5yKSk7CiAgICByZXR1cm4gb2xkYml0Owp9CgoKCgpleHRlcm4gX19pbmxpbmVfXyBCb29sCkF4 aXNUZXN0Qml0KFdvcmQgbnIsIGNvbnN0IHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7CiAgICByZXR1 cm4gKCgxVUwgPDwgKG5yICYgMzEpKSAmICgoKGNvbnN0IFdvcmQgKikgYWRkcilbbnIgPj4gNV0p KSAhPSAwOwp9CgoKCgpleHRlcm4gX19pbmxpbmVfXyBXb3JkCkF4aXNGaW5kRmlyc3QwKHZvaWQg KiBhZGRyLCBXb3JkIHNpemUpCnsKICAgIFdvcmQgcmVzID0gMHhGRkZGRkZGRlVMIDsKCiAgICBp ZiAoIXNpemUpCiAgICAgICAgcmV0dXJuIDA7CgogICAgc2l6ZSA9ICgoc2l6ZSArIDMxKSA+PiA1 KTsKICAgIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAgICAgKCJjbGRcblx0IgogICAgICAgICAi cmVwZTsgc2Nhc2xcblx0IgogICAgICAgICAiamUgMWZcblx0IgogICAgICAgICAic3VibCAkNCwl JWVkaVxuXHQiCiAgICAgICAgICJ4b3JsICglJWVkaSksJSVlYXhcblx0IgogICAgICAgICAiYnNm bCAlJWVheCwlJWVheFxuIgogICAgICAgICAiMTpcdHN1YmwgJSVlYngsJSVlZGlcblx0IgogICAg ICAgICAic2hsbCAkMywlJWVkaVxuXHQiCiAgICAgICAgICJhZGRsICUlZWRpLCUlZWF4IgogICAg ICAgICA6IitEIiAoYWRkciksICIrYSIgKHJlcyksICIrYyIgKHNpemUpCiAgICAgICAgIDogImIi IChhZGRyKSk7CiAgICByZXR1cm4gcmVzOwp9CgpleHRlcm4gX19pbmxpbmVfXyBXb3JkCkF4aXNG aW5kTGFzdDAodm9pZCAqIGFkZHIsIFdvcmQgc2l6ZSkKewogICAgV29yZCByZXMgPSAwOwogICAg V29yZCB4ID0gMHhGRkZGRkZGRlVMOwogICAgdm9pZCogcDsKCiAgICBpZiAoIXNpemUpCiAgICAg ICAgcmV0dXJuIDA7CgogICAgc2l6ZSA9IChzaXplICsgMzEpID4+IDU7CiAgICBwID0gKChDaHIq KWFkZHIpICsgKChzaXplIC0gMSkgPDwgMik7CiAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXwogICAg ICAgICgic3RkXG5cdCIKICAgICAgICAgInJlcGU7IHNjYXNsXG5cdCIKICAgICAgICAgImplIDFm XG5cdCIKICAgICAgICAgIm1vdmwgJC0xLCUlZWF4XG5cdCIKICAgICAgICAgImFkZGwgJDQsJSVl ZGlcblx0IgogICAgICAgICAieG9ybCAoJSVlZGkpLCUlZWF4XG5cdCIKICAgICAgICAgImJzcmwg JSVlYXgsJSVlZHhcbiIKICAgICAgICAgIjE6XHRzdWJsICUlZWJ4LCUlZWRpXG5cdCIKICAgICAg ICAgInNobGwgJDMsJSVlZGlcblx0IgogICAgICAgICAiYWRkbCAlJWVkaSwlJWVkeCIKICAgICAg ICAgOiIrRCIgKHApLCAiK2QiIChyZXMpLCAiK2MiIChzaXplKSwgIithIiAoeCkKICAgICAgICAg OiAiYiIgKGFkZHIpKTsKICAgIHJldHVybiByZXM7Cn0KCmV4dGVybiBfX2lubGluZV9fIFdvcmQK QXhpc0ZpbmRGcndkMCh2b2lkICogYWRkciwgV29yZCBzaXplLCBXb3JkIG9mZnNldCkKewogICAg V29yZCAqIHAgPSAoKFdvcmQgKikgYWRkcikgKyAob2Zmc2V0ID4+IDUpOwogICAgV29yZCBzZXQg PSAwLCBiaXQgPSBvZmZzZXQgJiAzMSwgcmVzOwoKICAgIGlmIChiaXQpIHsKCgoKICAgICAgICBf X2FzbV9fIF9fdm9sYXRpbGVfXwogICAgICAgICAgICAoImJzZmwgJTEsJTBcblx0IgogICAgICAg ICAgICAgImpuZSAxZlxuXHQiCiAgICAgICAgICAgICAibW92bCAkMzIsICUwXG4iCiAgICAgICAg ICAgICAiMToiCiAgICAgICAgICAgICA6ICI9ciIgKHNldCkKICAgICAgICAgICAgIDogInIiICh+ KCpwID4+IGJpdCkpKTsKICAgICAgICBpZiAoc2V0IDwgKDMyIC0gYml0KSkKICAgICAgICAgICAg cmV0dXJuIHNldCArIG9mZnNldDsKICAgICAgICBzZXQgPSAzMiAtIGJpdDsKICAgICAgICBwKys7 CiAgICB9CgoKCiAgICByZXMgPSBBeGlzRmluZEZpcnN0MChwLCBzaXplIC0gMzIgKiAocCAtIChX b3JkICopIGFkZHIpKTsKICAgIHJldHVybiAob2Zmc2V0ICsgc2V0ICsgcmVzKTsKfQoKZXh0ZXJu IF9faW5saW5lX18gV29yZApBeGlzRmluZEJrd2QwKHZvaWQgKiBhZGRyLCBXb3JkIHNpemUsIFdv cmQgb2Zmc2V0KQp7CiAgICBXb3JkICogcCA9ICgoV29yZCAqKSBhZGRyKSArIChvZmZzZXQgPj4g NSk7CiAgICBXb3JkIGJpdCA9IG9mZnNldCAmIDMxLCByZXM7CgogICAgaWYgKGJpdCkgewogICAg ICAgIFdvcmQgeCwgeTsKICAgICAgICB5ID0gKDB4RkZGRkZGRkZVTCA+PiAoMzEgLSBiaXQpKTsK ICAgICAgICB4ID0gKnA7CiAgICAgICAgeCA9IHkgJiB+eDsKCgoKCiAgICAgICAgX19hc21fXyBf X3ZvbGF0aWxlX18KICAgICAgICAgICAgKCJic3JsICUxLCUwXG5cdCIKICAgICAgICAgICAgICJq bmUgMWZcblx0IgogICAgICAgICAgICAgIm1vdmwgJDMyLCAlMFxuIgogICAgICAgICAgICAgIjE6 IgogICAgICAgICAgICAgOiAiPXIiIChyZXMpCiAgICAgICAgICAgICA6ICJyIiAoeCkpOwoKICAg ICAgICBpZiAocmVzIDwgMzIpCiAgICAgICAgICAgIHJldHVybiAob2Zmc2V0ICYgfjMxKSArIHJl czsKICAgICAgICBwLS07CiAgICB9CgoKCiAgICByZXMgPSBBeGlzRmluZExhc3QwKGFkZHIsIG9m ZnNldCAmIH4zMSk7CiAgICByZXR1cm4gcmVzOwp9CgpleHRlcm4gX19pbmxpbmVfXyBXb3JkCkF4 aXNGaW5kRmlyc3QxKHZvaWQgKiBhZGRyLCBXb3JkIHNpemUpCnsKICAgIFdvcmQgcmVzID0gMCA7 CgogICAgaWYgKCFzaXplKQogICAgICAgIHJldHVybiAwOwogICAgc2l6ZSA9ICgoc2l6ZSArIDMx KSA+PiA1KTsKICAgIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAgICAgKCJjbGRcblx0IgogICAg ICAgICAicmVwZTsgc2Nhc2xcblx0IgogICAgICAgICAiamUgMWZcblx0IgogICAgICAgICAic3Vi bCAkNCwlJWVkaVxuXHQiCiAgICAgICAgICJtb3ZsICglJWVkaSksJSVlYXhcblx0IgogICAgICAg ICAiYnNmbCAlJWVheCwlJWVheFxuIgogICAgICAgICAiMTpcdHN1YmwgJSVlYngsJSVlZGlcblx0 IgogICAgICAgICAic2hsbCAkMywlJWVkaVxuXHQiCiAgICAgICAgICJhZGRsICUlZWRpLCUlZWF4 IgogICAgICAgICA6IitEIiAoYWRkciksICIrYSIgKHJlcyksICIrYyIgKHNpemUpCiAgICAgICAg IDogImIiIChhZGRyKSk7CiAgICByZXR1cm4gcmVzOwp9CgpleHRlcm4gX19pbmxpbmVfXyBXb3Jk CkF4aXNGaW5kTGFzdDEodm9pZCAqIGFkZHIsIFdvcmQgc2l6ZSkKewogICAgV29yZCByZXMgPSAw OwogICAgdm9pZCogcDsKCiAgICBpZiAoIXNpemUpCiAgICAgICAgcmV0dXJuIDA7CgogICAgc2l6 ZSA9IChzaXplICsgMzEpID4+IDU7CiAgICBwID0gKChDaHIqKWFkZHIpICsgKChzaXplIC0gMSkg PDwgMik7CiAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXwogICAgICAgICgic3RkXG5cdCIKICAgICAg ICAgInJlcGU7IHNjYXNsXG5cdCIKICAgICAgICAgImplIDFmXG5cdCIKICAgICAgICAgImFkZGwg JDQsJSVlZGlcblx0IgogICAgICAgICAibW92bCAoJSVlZGkpLCUlZWF4XG5cdCIKICAgICAgICAg ImJzcmwgJSVlYXgsJSVlYXhcbiIKICAgICAgICAgIjE6XHRzdWJsICUlZWJ4LCUlZWRpXG5cdCIK ICAgICAgICAgInNobGwgJDMsJSVlZGlcblx0IgogICAgICAgICAiYWRkbCAlJWVkaSwlJWVheCIK ICAgICAgICAgOiIrRCIgKHApLCAiK2EiIChyZXMpLCAiK2MiIChzaXplKQogICAgICAgICA6ICJi IiAoYWRkcikpOwogICAgcmV0dXJuIHJlczsKfQoKZXh0ZXJuIF9faW5saW5lX18gV29yZApBeGlz RmluZEZyd2QxKHZvaWQgKiBhZGRyLCBXb3JkIHNpemUsIFdvcmQgb2Zmc2V0KQp7CiAgICBXb3Jk ICogcCA9ICgoV29yZCAqKSBhZGRyKSArIChvZmZzZXQgPj4gNSk7CiAgICBXb3JkIHNldCA9IDAs IGJpdCA9IG9mZnNldCAmIDMxLCByZXM7CgogICAgaWYgKGJpdCkgewoKCgogICAgICAgIF9fYXNt X18gX192b2xhdGlsZV9fCiAgICAgICAgICAgICgiYnNmbCAlMSwlMFxuXHQiCiAgICAgICAgICAg ICAiam5lIDFmXG5cdCIKICAgICAgICAgICAgICJtb3ZsICQzMiwgJTBcbiIKICAgICAgICAgICAg ICIxOiIKICAgICAgICAgICAgIDogIj1yIiAoc2V0KQogICAgICAgICAgICAgOiAiciIgKCgqcCA+ PiBiaXQpKSk7CiAgICAgICAgaWYgKHNldCA8ICgzMiAtIGJpdCkpCiAgICAgICAgICAgIHJldHVy biBzZXQgKyBvZmZzZXQ7CiAgICAgICAgc2V0ID0gMzIgLSBiaXQ7CiAgICAgICAgcCsrOwogICAg fQoKCgogICAgcmVzID0gQXhpc0ZpbmRGaXJzdDEocCwgc2l6ZSAtIDMyICogKHAgLSAoV29yZCAq KSBhZGRyKSk7CiAgICByZXR1cm4gKG9mZnNldCArIHNldCArIHJlcyk7Cn0KCmV4dGVybiBfX2lu bGluZV9fIFdvcmQKQXhpc0ZpbmRCa3dkMSh2b2lkICogYWRkciwgV29yZCBzaXplLCBXb3JkIG9m ZnNldCkKewogICAgV29yZCAqIHAgPSAoKFdvcmQgKikgYWRkcikgKyAob2Zmc2V0ID4+IDUpOwog ICAgV29yZCBiaXQgPSBvZmZzZXQgJiAzMSwgcmVzOwoKICAgIGlmIChiaXQpIHsKICAgICAgICBX b3JkIHgsIHk7CiAgICAgICAgeSA9ICgweEZGRkZGRkZGVUwgPj4gKDMxIC0gYml0KSk7CiAgICAg ICAgeCA9ICpwOwogICAgICAgIHggPSB5ICYgeDsKCgoKCiAgICAgICAgX19hc21fXyBfX3ZvbGF0 aWxlX18KICAgICAgICAgICAgKCJic3JsICUxLCUwXG5cdCIKICAgICAgICAgICAgICJqbmUgMWZc blx0IgogICAgICAgICAgICAgIm1vdmwgJDMyLCAlMFxuIgogICAgICAgICAgICAgIjE6IgogICAg ICAgICAgICAgOiAiPXIiIChyZXMpCiAgICAgICAgICAgICA6ICJyIiAoeCkpOwoKICAgICAgICBp ZiAocmVzIDwgMzIpCiAgICAgICAgICAgIHJldHVybiAob2Zmc2V0ICYgfjMxKSArIHJlczsKICAg ICAgICBwLS07CiAgICB9CgoKCiAgICByZXMgPSBBeGlzRmluZExhc3QxKGFkZHIsIG9mZnNldCAm IH4zMSk7CiAgICByZXR1cm4gcmVzOwp9CgojdW5kZWYgQUREUgojdW5kZWYgQ09OU1RfQUREUgoj IDEzNSAiYXhpcy9iaXRvcHMuaCIgMgoKCgoKCgojIDE4ICIuLi8uLi9zcmMvc2RibS52MC9zZGJt Zm10LmgiIDIKCgoKCgoKI2RlZmluZSBjU2RibUN1ck1haW5WZXIgMAojZGVmaW5lIGNTZGJtQ3Vy TWlub3JWZXIgMQoKCgoKdHlwZWRlZiBzdHJ1Y3QgU2RibURiTWFpbiB7CiAgICBBcmVhMjU2IGRi TWFnaWM7CiAgICB1OCBtYWluVmVyczsKICAgIHU4IG1pbm9yVmVyczsKICAgIHUxNiBkYk5hbWVM ZW47CiAgICB1MzIgbnVtVGFibGU7CiAgICBBdGltZSBjcmVhdGVkVGltZTsKICAgIFdvcmQgdGFi bGVJZE1hcFsoKCgxMDIzKSArIDMxKSA+PiA1KV0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDgp KSk7CiAgICB1MzIgcnN2c1sxNl07CiAgICBDaHIgZGJMb2dpY2FsTmFtZVswXTsKfSBTZGJtRGJN YWluOwoKCgoKCnR5cGVkZWYgc3RydWN0IFNkYm1FbnVtU2V0QXR0ciB7CiAgICB1MzIgbnVtRW51 bVNldDsKICAgIHUzMiByc3ZzWzNdOwp9IFNkYm1FbnVtU2V0QXR0cjsKCgoKCgp0eXBlZGVmIHN0 cnVjdCBTZGJtRW51bVNldEVudCB7CiAgICBTZGJtRW51bVNldElkIGVudW1TZXRJZDsKICAgIEFk YW1Qb3MgZW51bVNldE5hbWU7CiAgICB1MzIgbmFtZVRyZWU7CiAgICB1MzIgdmFsVHJlZTsKICAg IHMzMiBlbnVtVW5pdHM7CiAgICB1MzIgcnN2c1szXTsKfSBTZGJtRW51bVNldEVudDsKCgoKCgp0 eXBlZGVmIHN0cnVjdCBTZGJtRW51bVVuaXRBdHRyIHsKICAgIHUzMiBudW1FbnVtVW5pdDsKICAg IHMzMiBlbnVtRnJlZUxpc3Q7CiAgICB1MzIgcnN2c1syXTsKfSBTZGJtRW51bVVuaXRBdHRyOwoK CgoKdHlwZWRlZiBzdHJ1Y3QgU2RibUVudW1Vbml0IHsKICAgIENxdWV1ZUxpbmsgbGlzdDsKICAg IFNkYm1FbnVtVW5pdElkIHVuaXRJZDsKICAgIFNkYm1FbnVtU2V0SWQgZW51bVNldDsKICAgIHUz MiBudW1Vc2VkOwogICAgQWRhbVBvcyB1bml0TmFtZVB0cjsKICAgIEF0cmVlSWR4IHVuaXROYW1l SWR4OwogICAgQXRyZWVJZHggdW5pdFZhbElkeDsKICAgIEFyZWEzMiByc3ZbMl07CiAgICBBcmVh NjQgdW5pdFZhbDsKfSBTZGJtRW51bVVuaXQ7CgoKCgp0eXBlZGVmIHVuaW9uIFNkYm1GbGROYW1l SWR4RGF0YSB7CiAgICBBcmVhNjQgdmFsdWU7CiAgICBzdHJ1Y3QgewogICAgICAgIEFkYW1Qb3Mg bmFtZVB0cjsKICAgICAgICBTZGJtRmxkTm8gZmxkTm87CiAgICB9IHg7Cn0gU2RibUZsZE5hbWVJ ZHhEYXRhOwoKCgoKCnR5cGVkZWYgc3RydWN0IFNkYm1GbGRTcGVjIHsKICAgIFNkYm1GbGRObyBm bGRObzsKICAgIHUzMiBmbGRUeXBlOwogICAgdTMyIGZsZEF1eFR5cGU7CiAgICBBZGFtUG9zIGZs ZE5hbWVQdHI7CiAgICBBdHJlZUlkeCBmbGROYW1lSWR4OwogICAgdTMyIGZsZEF0dHJzOwogICAg dTMyIGZsZEluZGV4VHJlZTsKICAgIEFyZWExMjggZmxkVXNlckluZm87CiAgICB1MzIgZmxkVXNl ckluZm9QYXR0ZXJuOwp9IFNkYm1GbGRTcGVjOwoKCgoKCnR5cGVkZWYgc3RydWN0IFNkYm1UYWJs ZU1haW4gewogICAgdTMyIHRhYmxlTm87CiAgICBBZGFtUG9zIHRhYmxlTmFtZTsKICAgIHUzMiBu dW1GbGRzOwogICAgQXRyZWVJZHggdGFibGVOYW1lTm9kZTsKICAgIFNkYm1GbGRTcGVjIGZsZFNw ZWNzWzBdOwp9IFNkYm1UYWJsZU1haW47CgoKCgoKCnR5cGVkZWYgczMyIFNkYm1GbGREYXRhSWR4 OwojZGVmaW5lIFNkYm1GbGREYXRhSWR4VG9SSWR4KGRhdGFJZHgpICgoZGF0YUlkeCktMSkKI2Rl ZmluZSBjU2RibUZsZERhdGFJZHhNaW4gMQoKCgoKdHlwZWRlZiBzMzIgU2RibVJlY0lkeDsKI2Rl ZmluZSBTZGJtUmVjSWR4VG9SSWR4KHJlY0lkeCkgKChyZWNJZHgpLTEpCiNkZWZpbmUgY1NkYm1S ZWNJZHhNaW4gMQoKCgoKdHlwZWRlZiBzdHJ1Y3QgU2RibVJlY0F0dHIgewogICAgTnVtIG51bVJl Y3M7CiAgICBTZGJtUmVjSWR4IGFjdGl2ZXM7CiAgICBTZGJtUmVjSWR4IGZyZWVzOwogICAgTnVt IG51bUFjdGl2ZXM7Cn0gU2RibVJlY0F0dHI7Cgp0eXBlZGVmIHVuaW9uIFNkYm1EYXRhSWQgewog ICAgU2RibVJlY0lkIGV4dGVybmFsOwogICAgc3RydWN0IHsKICAgICAgICB1NjQgaW52YWxpZDox LAogICAgICAgICAgICAgICAgdGFibGVObzoxMCwKICAgICAgICAgICAgICAgIGZsZE5vOjExLAog ICAgICAgICAgICAgICAgcmV2aXNpb246MTAsCiAgICAgICAgICAgICAgICByZWNJZHg6MzA7CiAg ICB9IGk7Cn0gU2RibURhdGFJZDsKCnR5cGVkZWYgc3RydWN0IFNkYm1GbGRQdHIgewogICAgU2Ri bUZsZERhdGFJZHggdmVjSWR4TGlzdDsKICAgIFNkYm1GbGREYXRhSWR4IHNvcnRlZExpc3Q7CiAg ICBTZGJtRmxkRGF0YUlkeCBsaW5rZWRJZHg7CiAgICBOdW0gbnVtRWxtczsKfSBTZGJtRmxkUHRy OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgU2RibVJlY0VudHkgewogICAgU2RibURhdGFJZCByZWNJZDsK ICAgIENxdWV1ZUxpbmsgbGlzdDsKICAgIHVuaW9uIHsKICAgICAgICB1NjQgd2hvbGU7CiAgICAg ICAgc3RydWN0IHsKICAgICAgICAgICAgdTMyIGRlbGV0ZWQ6IDE7CiAgICAgICAgICAgIHUzMiA6 MzE7CiAgICAgICAgICAgIHUzMiB0aWNrZWRObzsKICAgICAgICB9IHY7CiAgICB9IGF0dHJzOwog ICAgU2RibUZsZFB0ciBmbGRQdHJzWzBdOwp9IFNkYm1SZWNFbnR5OwoKCgoKdHlwZWRlZiBzdHJ1 Y3QgU2RibVRhYmxlRmxkQXR0ciB7CiAgICB1MzIgbnVtRmxkczsKICAgIFNkYm1GbGREYXRhSWR4 IGZyZWVMaXN0OwogICAgdTMyIHJzdnNbMl07Cn0gU2RibVRhYmxlRmxkQXR0cjsKCgoKCnR5cGVk ZWYgdW5pb24gU2RibUZsZEVudHkgewogICAgQXJlYTY0IHZhbHVlOwogICAgc3RydWN0IHsKICAg ICAgICBBZGFtUG9zIHB0cjsKICAgICAgICBTeiBzejsKICAgIH0gdmFyOwogICAgc3RydWN0IHsK ICAgICAgICBTZGJtRW51bVNldElkIGVudW1TZXRJZDsKICAgICAgICBTZGJtRW51bVVuaXRJZCBl bnVtVW5pdElkOwogICAgfSBlbnVtVmFsOwogICAgc3RydWN0IHsKICAgICAgICBTZGJtRmxkRGF0 YUlkeCBkYXRhSWR4OwogICAgICAgIHMzMiBsaW5rZWRJZHg7CiAgICB9IGxpbms7Cn0gU2RibUZs ZEVudHk7CgoKCgp0eXBlZGVmIHVuaW9uIFNkYm1GbGRJZHhEYXRhIHsKICAgIEFyZWE2NCB2YWx1 ZTsKICAgIHN0cnVjdCB7CiAgICAgICAgU2RibUZsZERhdGFJZHggZmxkOwogICAgICAgIHUzMiBy c3Y7CiAgICB9IHZhbDsKICAgIHN0cnVjdCB7CiAgICAgICAgU2RibUZsZERhdGFJZHggZmxkOwog ICAgICAgIEFkYW1Qb3MgcHRyOwogICAgfSBzdHI7CiAgICBzdHJ1Y3QgewogICAgICAgIFNkYm1G bGREYXRhSWR4IGZsZDsKICAgICAgICBTZGJtRW51bVVuaXRJZCBpZDsKICAgIH0gZW51bVVuaXQ7 Cn0gU2RibUZsZElkeERhdGE7CgoKCgp0eXBlZGVmIHN0cnVjdCBTZGJtRmxkQm9keSB7CiAgICBT ZGJtUmVjSWR4IHJlY0lkeDsKICAgIFNkYm1GbGRObyBmbGRObzsKICAgIHUzMiBmcmVlemVkIDox LAogICAgICAgICAgICAgICAgICAgIDo3LAogICAgICAgICAgICAgICAgICAgIHZlY3RvcklkeDoy NDsKICAgIEF0cmVlSWR4IGluZGV4Tm9kZTsKICAgIHMzMiBsaW5rZWRJbmZvOwogICAgdTMyIHJz dnNbM107CiAgICBDcXVldWVMaW5rIHZlY0lkeExpc3Q7CiAgICBDcXVldWVMaW5rIHNvcnRMaXN0 OwogICAgQXRpbWUgbW9kaWZ5VGltZTsKICAgIFNkYm1GbGRFbnR5IGNvbnRlbnQ7Cn0gU2RibUZs ZEJvZHk7CgoKCgp0eXBlZGVmIHN0cnVjdCBTZGJtTGlua2VkRmxkSW5mb0F0dHIgewogICAgdTMy IG51bUxpbmtlZDsKICAgIFNkYm1GbGREYXRhSWR4IGZyZWVMaXN0OwogICAgdTMyIHJzdnNbMl07 Cn0gU2RibUxpbmtlZEZsZEluZm9BdHRyOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgU2RibUxpbmtlZEZs ZEluZm8gewogICAgU2RibURhdGFJZCBsaW5rRnJvbTsKICAgIFNkYm1EYXRhSWQgbGlua1RvOwog ICAgQ3F1ZXVlTGluayBsaXN0OwogICAgdTMyIHJzdnNbM107Cn0gU2RibUxpbmtlZEZsZEluZm87 CgoKI2RlZmluZSBjU2RibVN1YmZpbGVEYk1haW4gMQojZGVmaW5lIGNTZGJtU3ViZmlsZUVudW1T ZXQgMgojZGVmaW5lIGNTZGJtU3ViZmlsZUVudW1Vbml0IDMKI2RlZmluZSBjU2RibVN1YmZpbGVE Yk1haW5JbmRleCA0CiNkZWZpbmUgY1NkYm1TdWJmaWxlRGJWYXJEYXRhQ29udG5yIDUKCiNkZWZp bmUgY1NkYm1UYWJsZU5hbWVUcmVlIDEKI2RlZmluZSBFbnVtU2V0SWRUb1ZhbFRyZWUoZXNJZCkg KChlc0lkKTw8MSkKI2RlZmluZSBFbnVtU2V0SWRUb05hbWVUcmVlKGVzSWQpICgoKGVzSWQpPDwx KSsxKQoKI2RlZmluZSBjU2RibU51bVN1YmZpbGVQZXJEQiA4CgojZGVmaW5lIGNTZGJtU3ViZmls ZVRhYmxlTWFpbklkeCAxCiNkZWZpbmUgY1NkYm1TdWJmaWxlUmVjc0NvbnRucklkeCAyCiNkZWZp bmUgY1NkYm1TdWJmaWxlRmxkc0NvbnRucklkeCAzCiNkZWZpbmUgY1NkYm1TdWJmaWxlVmFyRGF0 YUNvbnRucklkeCA0CiNkZWZpbmUgY1NkYm1TdWJmaWxlSW5kZXhDb250bnJJZHggNQojZGVmaW5l IGNTZGJtU3ViZmlsZUxpbmtlZEZsZHNDb250bnJJZHggNgoKI2RlZmluZSBTZGJtU3ViZmlsZVRh YmxlQmFzZSh0YmxObykgKCh0YmxObyk8PDMpCiNkZWZpbmUgU2RibVN1YmZpbGVUYWJsZU1haW4o dGJsTm8pICgoKHRibE5vKTw8MykrY1NkYm1TdWJmaWxlVGFibGVNYWluSWR4KQojZGVmaW5lIFNk Ym1TdWJmaWxlUmVjc0NvbnRucih0YmxObykgKCgodGJsTm8pPDwzKStjU2RibVN1YmZpbGVSZWNz Q29udG5ySWR4KQojZGVmaW5lIFNkYm1TdWJmaWxlRmxkc0NvbnRucih0YmxObykgKCgodGJsTm8p PDwzKStjU2RibVN1YmZpbGVGbGRzQ29udG5ySWR4KQojZGVmaW5lIFNkYm1TdWJmaWxlVmFyRGF0 YUNvbnRucih0YmxObykgKCgodGJsTm8pPDwzKStjU2RibVN1YmZpbGVWYXJEYXRhQ29udG5ySWR4 KQojZGVmaW5lIFNkYm1TdWJmaWxlSW5kZXhDb250bnIodGJsTm8pICgoKHRibE5vKTw8MykrY1Nk Ym1TdWJmaWxlSW5kZXhDb250bnJJZHgpCiNkZWZpbmUgU2RibVN1YmZpbGVMaW5rZWRGbGRzQ29u dG5yKHRibE5vKSAoKCh0YmxObyk8PDMpK2NTZGJtU3ViZmlsZUxpbmtlZEZsZHNDb250bnJJZHgp CgojZGVmaW5lIFNkYm1TdWJmaWxlSWRUb1RibE5vKHN1YmZpbGVJZCkgKCgoc3ViZmlsZUlkKT4+ MykmMHg3KQoKI2RlZmluZSBjU2RibU51bVN1YmZpbGVQZXJUYWJsZSA4CgojZGVmaW5lIGNTZGJt RmxkTmFtZVRyZWVJZHggMQojZGVmaW5lIGNTZGJtRmxkSWR4VHJlZUlkeE1pbiAyCiNkZWZpbmUg U2RibUZsZElkeFRyZWVJZHgoZmxkTm8pICgoZmxkTm8pLTErY1NkYm1GbGRJZHhUcmVlSWR4TWlu KQoKZXh0ZXJuIGlubGluZSBTZGJtRmxkQm9keSogU2RibUZsZHNPcHJUb3BBZGRyKFNkYm1GbGRC b2R5KiB0b3AsIHMzMiB0b3BJZHgsIHMzMiB0Z3RJZHgpIHsgcmV0dXJuICYodG9wW3RndElkeCAt IHRvcElkeF0pOyB9IGV4dGVybiBpbmxpbmUgczMyIFNkYm1GbGRzT3BySW5kZXgoU2RibUZsZEJv ZHkqIHRvcCwgczMyIHRvcElkeCwgU2RibUZsZEJvZHkqIHRndCkgeyByZXR1cm4gKHRndCAtIHRv cCkgKyB0b3BJZHg7IH0gZXh0ZXJuIGlubGluZSB2b2lkIFNkYm1GbGRzT3BySW5pdChTZGJtRmxk Qm9keSogdG9wLCBzMzIgdG9wSWR4LCBzMzIgdGd0SWR4KSB7IENxdWV1ZUluaXQoJih0b3AtPnZl Y0lkeExpc3QpLCB0b3BJZHgsIHRndElkeCwgc2l6ZW9mKFNkYm1GbGRCb2R5KSwgKChXb3JkKSgm KCgoU2RibUZsZEJvZHkgKikwKS0+dmVjSWR4TGlzdCkpKSk7fSBleHRlcm4gaW5saW5lIHZvaWQg U2RibUZsZHNPcHJJbnNlcnQoU2RibUZsZEJvZHkqIHRvcCwgczMyIHRvcElkeCwgczMyIHRndElk eCkgeyBDcXVldWVJbnNlcnRRdWV1ZSgmKHRvcC0+dmVjSWR4TGlzdCksIHRvcElkeCwgdGd0SWR4 LCBzaXplb2YoU2RibUZsZEJvZHkpLCAoKFdvcmQpKCYoKChTZGJtRmxkQm9keSAqKTApLT52ZWNJ ZHhMaXN0KSkpKTt9IGV4dGVybiBpbmxpbmUgdm9pZCBTZGJtRmxkc09wckFwcGVuZChTZGJtRmxk Qm9keSogdG9wLCBzMzIgdG9wSWR4LCBzMzIgdGd0SWR4KSB7IENxdWV1ZUFwcGVuZFF1ZXVlKCYo dG9wLT52ZWNJZHhMaXN0KSwgdG9wSWR4LCB0Z3RJZHgsIHNpemVvZihTZGJtRmxkQm9keSksICgo V29yZCkoJigoKFNkYm1GbGRCb2R5ICopMCktPnZlY0lkeExpc3QpKSkpO30gZXh0ZXJuIGlubGlu ZSBzMzIgU2RibUZsZHNPcHJEZWxldGUoU2RibUZsZEJvZHkqIHRvcCwgczMyIHRvcElkeCwgczMy IHRndElkeCkgeyBzMzIgcmV0YWluOyByZXRhaW4gPSBDcXVldWVEZWxldGVRdWV1ZSgmKHRvcC0+ dmVjSWR4TGlzdCksIHRvcElkeCwgdGd0SWR4LCBzaXplb2YoU2RibUZsZEJvZHkpLCAoKFdvcmQp KCYoKChTZGJtRmxkQm9keSAqKTApLT52ZWNJZHhMaXN0KSkpKTsgcmV0dXJuIHJldGFpbjt9IGV4 dGVybiBpbmxpbmUgczMyIFNkYm1GbGRzT3ByTmV4dChTZGJtRmxkQm9keSogdG9wLCBzMzIgdG9w SWR4LCBzMzIgY3VyKSB7IHMzMiBuZXh0ID0gdG9wW2N1ciAtIHRvcElkeF0udmVjSWR4TGlzdC5m cndkOyByZXR1cm4gbmV4dDt9IGV4dGVybiBpbmxpbmUgczMyIFNkYm1GbGRzT3ByUHJldihTZGJt RmxkQm9keSogdG9wLCBzMzIgdG9wSWR4LCBzMzIgY3VyKSB7IHMzMiBwcmV2ID0gdG9wW2N1ciAt IHRvcElkeF0udmVjSWR4TGlzdC5ia3dkOyByZXR1cm4gcHJldjt9OwpleHRlcm4gaW5saW5lIFNk Ym1GbGRCb2R5KiBTZGJtRmxkc1NvcnRPcHJUb3BBZGRyKFNkYm1GbGRCb2R5KiB0b3AsIHMzMiB0 b3BJZHgsIHMzMiB0Z3RJZHgpIHsgcmV0dXJuICYodG9wW3RndElkeCAtIHRvcElkeF0pOyB9IGV4 dGVybiBpbmxpbmUgczMyIFNkYm1GbGRzU29ydE9wckluZGV4KFNkYm1GbGRCb2R5KiB0b3AsIHMz MiB0b3BJZHgsIFNkYm1GbGRCb2R5KiB0Z3QpIHsgcmV0dXJuICh0Z3QgLSB0b3ApICsgdG9wSWR4 OyB9IGV4dGVybiBpbmxpbmUgdm9pZCBTZGJtRmxkc1NvcnRPcHJJbml0KFNkYm1GbGRCb2R5KiB0 b3AsIHMzMiB0b3BJZHgsIHMzMiB0Z3RJZHgpIHsgQ3F1ZXVlSW5pdCgmKHRvcC0+c29ydExpc3Qp LCB0b3BJZHgsIHRndElkeCwgc2l6ZW9mKFNkYm1GbGRCb2R5KSwgKChXb3JkKSgmKCgoU2RibUZs ZEJvZHkgKikwKS0+c29ydExpc3QpKSkpO30gZXh0ZXJuIGlubGluZSB2b2lkIFNkYm1GbGRzU29y dE9wckluc2VydChTZGJtRmxkQm9keSogdG9wLCBzMzIgdG9wSWR4LCBzMzIgdGd0SWR4KSB7IENx dWV1ZUluc2VydFF1ZXVlKCYodG9wLT5zb3J0TGlzdCksIHRvcElkeCwgdGd0SWR4LCBzaXplb2Yo U2RibUZsZEJvZHkpLCAoKFdvcmQpKCYoKChTZGJtRmxkQm9keSAqKTApLT5zb3J0TGlzdCkpKSk7 fSBleHRlcm4gaW5saW5lIHZvaWQgU2RibUZsZHNTb3J0T3ByQXBwZW5kKFNkYm1GbGRCb2R5KiB0 b3AsIHMzMiB0b3BJZHgsIHMzMiB0Z3RJZHgpIHsgQ3F1ZXVlQXBwZW5kUXVldWUoJih0b3AtPnNv cnRMaXN0KSwgdG9wSWR4LCB0Z3RJZHgsIHNpemVvZihTZGJtRmxkQm9keSksICgoV29yZCkoJigo KFNkYm1GbGRCb2R5ICopMCktPnNvcnRMaXN0KSkpKTt9IGV4dGVybiBpbmxpbmUgczMyIFNkYm1G bGRzU29ydE9wckRlbGV0ZShTZGJtRmxkQm9keSogdG9wLCBzMzIgdG9wSWR4LCBzMzIgdGd0SWR4 KSB7IHMzMiByZXRhaW47IHJldGFpbiA9IENxdWV1ZURlbGV0ZVF1ZXVlKCYodG9wLT5zb3J0TGlz dCksIHRvcElkeCwgdGd0SWR4LCBzaXplb2YoU2RibUZsZEJvZHkpLCAoKFdvcmQpKCYoKChTZGJt RmxkQm9keSAqKTApLT5zb3J0TGlzdCkpKSk7IHJldHVybiByZXRhaW47fSBleHRlcm4gaW5saW5l IHMzMiBTZGJtRmxkc1NvcnRPcHJOZXh0KFNkYm1GbGRCb2R5KiB0b3AsIHMzMiB0b3BJZHgsIHMz MiBjdXIpIHsgczMyIG5leHQgPSB0b3BbY3VyIC0gdG9wSWR4XS5zb3J0TGlzdC5mcndkOyByZXR1 cm4gbmV4dDt9IGV4dGVybiBpbmxpbmUgczMyIFNkYm1GbGRzU29ydE9wclByZXYoU2RibUZsZEJv ZHkqIHRvcCwgczMyIHRvcElkeCwgczMyIGN1cikgeyBzMzIgcHJldiA9IHRvcFtjdXIgLSB0b3BJ ZHhdLnNvcnRMaXN0LmJrd2Q7IHJldHVybiBwcmV2O307CmV4dGVybiBpbmxpbmUgU2RibUxpbmtl ZEZsZEluZm8qIFNkYm1MaW5rZWRGbGRzT3ByVG9wQWRkcihTZGJtTGlua2VkRmxkSW5mbyogdG9w LCBzMzIgdG9wSWR4LCBzMzIgdGd0SWR4KSB7IHJldHVybiAmKHRvcFt0Z3RJZHggLSB0b3BJZHhd KTsgfSBleHRlcm4gaW5saW5lIHMzMiBTZGJtTGlua2VkRmxkc09wckluZGV4KFNkYm1MaW5rZWRG bGRJbmZvKiB0b3AsIHMzMiB0b3BJZHgsIFNkYm1MaW5rZWRGbGRJbmZvKiB0Z3QpIHsgcmV0dXJu ICh0Z3QgLSB0b3ApICsgdG9wSWR4OyB9IGV4dGVybiBpbmxpbmUgdm9pZCBTZGJtTGlua2VkRmxk c09wckluaXQoU2RibUxpbmtlZEZsZEluZm8qIHRvcCwgczMyIHRvcElkeCwgczMyIHRndElkeCkg eyBDcXVldWVJbml0KCYodG9wLT5saXN0KSwgdG9wSWR4LCB0Z3RJZHgsIHNpemVvZihTZGJtTGlu a2VkRmxkSW5mbyksICgoV29yZCkoJigoKFNkYm1MaW5rZWRGbGRJbmZvICopMCktPmxpc3QpKSkp O30gZXh0ZXJuIGlubGluZSB2b2lkIFNkYm1MaW5rZWRGbGRzT3BySW5zZXJ0KFNkYm1MaW5rZWRG bGRJbmZvKiB0b3AsIHMzMiB0b3BJZHgsIHMzMiB0Z3RJZHgpIHsgQ3F1ZXVlSW5zZXJ0UXVldWUo Jih0b3AtPmxpc3QpLCB0b3BJZHgsIHRndElkeCwgc2l6ZW9mKFNkYm1MaW5rZWRGbGRJbmZvKSwg KChXb3JkKSgmKCgoU2RibUxpbmtlZEZsZEluZm8gKikwKS0+bGlzdCkpKSk7fSBleHRlcm4gaW5s aW5lIHZvaWQgU2RibUxpbmtlZEZsZHNPcHJBcHBlbmQoU2RibUxpbmtlZEZsZEluZm8qIHRvcCwg czMyIHRvcElkeCwgczMyIHRndElkeCkgeyBDcXVldWVBcHBlbmRRdWV1ZSgmKHRvcC0+bGlzdCks IHRvcElkeCwgdGd0SWR4LCBzaXplb2YoU2RibUxpbmtlZEZsZEluZm8pLCAoKFdvcmQpKCYoKChT ZGJtTGlua2VkRmxkSW5mbyAqKTApLT5saXN0KSkpKTt9IGV4dGVybiBpbmxpbmUgczMyIFNkYm1M aW5rZWRGbGRzT3ByRGVsZXRlKFNkYm1MaW5rZWRGbGRJbmZvKiB0b3AsIHMzMiB0b3BJZHgsIHMz MiB0Z3RJZHgpIHsgczMyIHJldGFpbjsgcmV0YWluID0gQ3F1ZXVlRGVsZXRlUXVldWUoJih0b3At Pmxpc3QpLCB0b3BJZHgsIHRndElkeCwgc2l6ZW9mKFNkYm1MaW5rZWRGbGRJbmZvKSwgKChXb3Jk KSgmKCgoU2RibUxpbmtlZEZsZEluZm8gKikwKS0+bGlzdCkpKSk7IHJldHVybiByZXRhaW47fSBl eHRlcm4gaW5saW5lIHMzMiBTZGJtTGlua2VkRmxkc09wck5leHQoU2RibUxpbmtlZEZsZEluZm8q IHRvcCwgczMyIHRvcElkeCwgczMyIGN1cikgeyBzMzIgbmV4dCA9IHRvcFtjdXIgLSB0b3BJZHhd Lmxpc3QuZnJ3ZDsgcmV0dXJuIG5leHQ7fSBleHRlcm4gaW5saW5lIHMzMiBTZGJtTGlua2VkRmxk c09wclByZXYoU2RibUxpbmtlZEZsZEluZm8qIHRvcCwgczMyIHRvcElkeCwgczMyIGN1cikgeyBz MzIgcHJldiA9IHRvcFtjdXIgLSB0b3BJZHhdLmxpc3QuYmt3ZDsgcmV0dXJuIHByZXY7fTsKZXh0 ZXJuIGlubGluZSBTZGJtRW51bVVuaXQqIFNkYm1FbnVtVW5pdHNPcHJUb3BBZGRyKFNkYm1FbnVt VW5pdCogdG9wLCBzMzIgdG9wSWR4LCBzMzIgdGd0SWR4KSB7IHJldHVybiAmKHRvcFt0Z3RJZHgg LSB0b3BJZHhdKTsgfSBleHRlcm4gaW5saW5lIHMzMiBTZGJtRW51bVVuaXRzT3BySW5kZXgoU2Ri bUVudW1Vbml0KiB0b3AsIHMzMiB0b3BJZHgsIFNkYm1FbnVtVW5pdCogdGd0KSB7IHJldHVybiAo dGd0IC0gdG9wKSArIHRvcElkeDsgfSBleHRlcm4gaW5saW5lIHZvaWQgU2RibUVudW1Vbml0c09w ckluaXQoU2RibUVudW1Vbml0KiB0b3AsIHMzMiB0b3BJZHgsIHMzMiB0Z3RJZHgpIHsgQ3F1ZXVl SW5pdCgmKHRvcC0+bGlzdCksIHRvcElkeCwgdGd0SWR4LCBzaXplb2YoU2RibUVudW1Vbml0KSwg KChXb3JkKSgmKCgoU2RibUVudW1Vbml0ICopMCktPmxpc3QpKSkpO30gZXh0ZXJuIGlubGluZSB2 b2lkIFNkYm1FbnVtVW5pdHNPcHJJbnNlcnQoU2RibUVudW1Vbml0KiB0b3AsIHMzMiB0b3BJZHgs IHMzMiB0Z3RJZHgpIHsgQ3F1ZXVlSW5zZXJ0UXVldWUoJih0b3AtPmxpc3QpLCB0b3BJZHgsIHRn dElkeCwgc2l6ZW9mKFNkYm1FbnVtVW5pdCksICgoV29yZCkoJigoKFNkYm1FbnVtVW5pdCAqKTAp LT5saXN0KSkpKTt9IGV4dGVybiBpbmxpbmUgdm9pZCBTZGJtRW51bVVuaXRzT3ByQXBwZW5kKFNk Ym1FbnVtVW5pdCogdG9wLCBzMzIgdG9wSWR4LCBzMzIgdGd0SWR4KSB7IENxdWV1ZUFwcGVuZFF1 ZXVlKCYodG9wLT5saXN0KSwgdG9wSWR4LCB0Z3RJZHgsIHNpemVvZihTZGJtRW51bVVuaXQpLCAo KFdvcmQpKCYoKChTZGJtRW51bVVuaXQgKikwKS0+bGlzdCkpKSk7fSBleHRlcm4gaW5saW5lIHMz MiBTZGJtRW51bVVuaXRzT3ByRGVsZXRlKFNkYm1FbnVtVW5pdCogdG9wLCBzMzIgdG9wSWR4LCBz MzIgdGd0SWR4KSB7IHMzMiByZXRhaW47IHJldGFpbiA9IENxdWV1ZURlbGV0ZVF1ZXVlKCYodG9w LT5saXN0KSwgdG9wSWR4LCB0Z3RJZHgsIHNpemVvZihTZGJtRW51bVVuaXQpLCAoKFdvcmQpKCYo KChTZGJtRW51bVVuaXQgKikwKS0+bGlzdCkpKSk7IHJldHVybiByZXRhaW47fSBleHRlcm4gaW5s aW5lIHMzMiBTZGJtRW51bVVuaXRzT3ByTmV4dChTZGJtRW51bVVuaXQqIHRvcCwgczMyIHRvcElk eCwgczMyIGN1cikgeyBzMzIgbmV4dCA9IHRvcFtjdXIgLSB0b3BJZHhdLmxpc3QuZnJ3ZDsgcmV0 dXJuIG5leHQ7fSBleHRlcm4gaW5saW5lIHMzMiBTZGJtRW51bVVuaXRzT3ByUHJldihTZGJtRW51 bVVuaXQqIHRvcCwgczMyIHRvcElkeCwgczMyIGN1cikgeyBzMzIgcHJldiA9IHRvcFtjdXIgLSB0 b3BJZHhdLmxpc3QuYmt3ZDsgcmV0dXJuIHByZXY7fTsKCgojIDMzICIuLi8uLi9zcmMvc2RibS52 MC9zZGJtZmxkdS5jIiAyCiMgMSAiLi4vLi4vc3JjL3NkYm0udjAvc2RibWRlZnMuaCIgMQojIDE0 ICIuLi8uLi9zcmMvc2RibS52MC9zZGJtZGVmcy5oIgojZGVmaW5lIF9BWElTX1NEQk1ERUZTX0hf IAoKIyAxICJheGlzL2F4aXN0aHIuaCIgMQojIDI3ICJheGlzL2F4aXN0aHIuaCIKI2RlZmluZSBf QVhJU19BWElTVEhSX0hfIAojIDM3ICJheGlzL2F4aXN0aHIuaCIKCgoKCmV4dGVybiBpbnQgQXhp c1RockNyZWF0ZShwdGhyZWFkX3QgKl9fdGhyZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICB2b2lkICooKl9fc3RhcnRfcm91dGluZSkgKHZvaWQgKiksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgdm9pZCAqX19hcmcpIGFzbSgiX18iICJBeGlzVGhyQ3JlYXRlIik7CiMgNjcgImF4aXMv YXhpc3Roci5oIgojZGVmaW5lIEF4aXNUaHJTZWxmKCkgcHRocmVhZF9zZWxmKCkKI2RlZmluZSBB eGlzVGhyRXF1YWwodGhyMSx0aHIyKSBwdGhyZWFkX2VxdWFsKHRocjEsIHRocjIpCiNkZWZpbmUg QXhpc1RockpvaW4odGhyLHRocl9yZXQpIHB0aHJlYWRfam9pbih0aHIsIHRocl9yZXQpCiNkZWZp bmUgQXhpc1RockRldGFjaCh0aHIpIHB0aHJlYWRfZGV0YWNoKHRocikKI2RlZmluZSBBeGlzVGhy QXR0ckluaXQoYXR0cikgcHRocmVhZF9hdHRyX2luaXQoYXR0cikKI2RlZmluZSBBeGlzVGhyQXR0 ckRlc3Ryb3koYXR0cikgcHRocmVhZF9hdHRyX2Rlc3Ryb3koYXR0cikKI2RlZmluZSBBeGlzVGhy QXR0clNldGRldGFjaHN0YXRlKGF0dHIsc3RhdGUpIHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0 ZShhdHRyLCBzdGF0ZSkKI2RlZmluZSBBeGlzVGhyQXR0ckdldGRldGFjaHN0YXRlKGF0dHIsc3Rh dGVQKSBwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUoYXR0ciwgc3RhdGVQKQojZGVmaW5lIEF4 aXNUaHJBdHRyU2V0c2NoZWRwYXJhbShhdHRyLHBhcmFtKSBwdGhyZWFkX2F0dHJfc2V0c2NoZWRw YXJhbShhdHRyLCBwYXJhbSkKI2RlZmluZSBBeGlzVGhyQXR0ckdldHNjaGVkcGFyYW0oYXR0cixw YXJhbVApIHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtKGF0dHIsIHBhcmFtUCkKI2RlZmluZSBB eGlzVGhyQXR0clNldHNjaGVkcG9saWN5KGF0dHIscG9saWN5KSBwdGhyZWFkX2F0dHJfc2V0c2No ZWRwb2xpY3koYXR0ciwgcG9saWN5KQojZGVmaW5lIEF4aXNUaHJBdHRyR2V0c2NoZWRwb2xpY3ko YXR0cixwb2xpY3lQKSBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwb2xpY3koYXR0ciwgcG9saWN5UCkK I2RlZmluZSBBeGlzVGhyQXR0clNldGluaGVyaXRzY2hlZChhdHRyLGluaGVyaXQpIHB0aHJlYWRf YXR0cl9zZXRzY2hlZGluaGVyaXQoYXR0ciwgaW5oZXJpdCkKI2RlZmluZSBBeGlzVGhyQXR0ckdl dGluaGVyaXRzY2hlZChhdHRyLGluaGVyaXRQKSBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRpbmhlcml0 KGF0dHIsIGluaGVyaXRQKQojZGVmaW5lIEF4aXNUaHJBdHRyU2V0c2NvcGUoYXR0cixzY29wZSkg cHRocmVhZF9hdHRyX3NldHNjb3BlKGF0dHIsIHNjb3BlKQojZGVmaW5lIEF4aXNUaHJBdHRyR2V0 c2NvcGUoYXR0cixzY29wZVApIHB0aHJlYWRfYXR0cl9nZXRzY29wZShhdHRyLCBzY29wZVApCiNk ZWZpbmUgQXhpc1RoclNldHNjaGVkcGFyYW0odGhyLHBvbGljeSxwYXJhbSkgcHRocmVhZF9zZXRz Y2hlZHBhcmFtKHRociwgcG9saWN5LCBwYXJhbSkKI2RlZmluZSBBeGlzVGhyR2V0c2NoZWRwYXJh bSh0aHIscG9saWN5UCxwYXJhbVApIHB0aHJlYWRfZ2V0c2NoZWRwYXJhbSh0aHIsIHBvbGljeVAs IHBhcmFtUCkKI2RlZmluZSBBeGlzVGhyTXV0ZXhJbml0KG11dGV4LG11dGV4QXR0cikgcHRocmVh ZF9tdXRleF9pbml0KG11dGV4LCBtdXRleEF0dHIpCiNkZWZpbmUgQXhpc1Rock11dGV4RGVzdHJv eShtdXRleCkgcHRocmVhZF9tdXRleF9kZXN0cm95KG11dGV4KQojZGVmaW5lIEF4aXNUaHJNdXRl eFRyeWxvY2sobXV0ZXgpIHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayhtdXRleCkKI2RlZmluZSBBeGlz VGhyTXV0ZXhMb2NrKG11dGV4KSBwdGhyZWFkX211dGV4X2xvY2sobXV0ZXgpCiNkZWZpbmUgQXhp c1Rock11dGV4VW5sb2NrKG11dGV4KSBwdGhyZWFkX211dGV4X3VubG9jayhtdXRleCkKI2RlZmlu ZSBBeGlzVGhyTXV0ZXhhdHRySW5pdChtdXRleEF0dHIpIHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQo bXV0ZXhBdHRyKQojZGVmaW5lIEF4aXNUaHJNdXRleGF0dHJEZXN0cm95KG11dGV4QXR0cikgcHRo cmVhZF9tdXRleGF0dHJfZGVzdHJveShtdXRleEF0dHIpCiNkZWZpbmUgQXhpc1Rock11dGV4YXR0 clNldGtpbmROcChtdXRleEF0dHIsa2luZCkgcHRocmVhZF9tdXRleGF0dHJfc2V0a2luZF9ucCht dXRleEF0dHIsIGtpbmQpCiNkZWZpbmUgQXhpc1Rock11dGV4YXR0ckdldGtpbmROcChtdXRleEF0 dHIsa2luZFApIHB0aHJlYWRfbXV0ZXhhdHRyX3NldGtpbmRfbnAobXV0ZXhBdHRyLCBraW5kUCkK I2RlZmluZSBBeGlzVGhyQ29uZEluaXQoY29uZCxjb25kQXR0cikgcHRocmVhZF9jb25kX2luaXQo Y29uZCwgY29uZEF0dHIpCiNkZWZpbmUgQXhpc1RockNvbmREZXN0cm95KGNvbmQpIHB0aHJlYWRf Y29uZF9kZXN0cm95KGNvbmQpCiNkZWZpbmUgQXhpc1RockNvbmRTaWduYWwoY29uZCkgcHRocmVh ZF9jb25kX3NpZ25hbChjb25kKQojZGVmaW5lIEF4aXNUaHJDb25kV2FpdChjb25kLG11dGV4KSBw dGhyZWFkX2NvbmRfd2FpdChjb25kLCBtdXRleCkKI2RlZmluZSBBeGlzVGhyQ29uZFRpbWVkd2Fp dChjb25kLG11dGV4LHdhaXRUKSBwdGhyZWFkX2NvbmRfdGltZWR3YWl0KGNvbmQsIG11dGV4LCB3 YWl0VCkKI2RlZmluZSBBeGlzVGhyQ29uZGF0dHJJbml0KGNvbmRBdHRyKSBwdGhyZWFkX2NvbmRh dHRyX2luaXQoY29uZEF0dHIpCiNkZWZpbmUgQXhpc1RockNvbmRhdHRyRGVzdHJveShjb25kQXR0 cikgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95KGNvbmRBdHRyKQojZGVmaW5lIEF4aXNUaHJLZXlD cmVhdGUoa2V5LGRlc3RyRnVuYykgcHRocmVhZF9rZXlfY3JlYXRlKGtleSwgZGVzdHJGdW5jKQoj ZGVmaW5lIEF4aXNUaHJLZXlEZWxldGUoa2V5KSBwdGhyZWFkX2tleV9kZWxldGUoa2V5KQojZGVm aW5lIEF4aXNUaHJTZXRTcGVjaWZpYyhrZXkscHRyKSBwdGhyZWFkX3NldHNwZWNpZmljKGtleSwg cHRyKQojZGVmaW5lIEF4aXNUaHJHZXRTcGVjaWZpYyhrZXkscHRyKSBwdGhyZWFkX2dldHNwZWNp ZmljKGtleSwgcHRyKQojZGVmaW5lIEF4aXNUaHJPbmNlKG9uY2UsaW5pdFJ0bikgcHRocmVhZF9v bmNlKG9uY2UsIGluaXRSdG4pCiNkZWZpbmUgQXhpc1RoclNldGNhbmNlbHN0YXRlKHN0YXRlLG9s ZFN0YXRlKSBwdGhyZWFkX3NldGNhbmNlbHN0YXRlKHN0YXRlLCBvbGRTdGF0ZSkKI2RlZmluZSBB eGlzVGhyU2V0Y2FuY2VsdHlwZSh0eXBlLG9sZFR5cGUpIHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUo dHlwZSwgb2xkVHlwZSkKI2RlZmluZSBBeGlzVGhyQ2FuY2VsKHRocikgcHRocmVhZF9jYW5jZWwo dGhyKQojZGVmaW5lIEF4aXNUaHJUZXN0Y2FuY2VsKCkgcHRocmVhZF90ZXN0Y2FuY2VsKCkKI2Rl ZmluZSBBeGlzVGhyQ2xlYW51cFB1c2gocnRuLGFyZykgcHRocmVhZF9jbGVhbnVwX3B1c2gocnRu LGFyZykKI2RlZmluZSBBeGlzVGhyQ2xlYW51cFBvcChleGVjdXRlKSBwdGhyZWFkX2NsZWFudXBf cG9wKGV4ZWN1dGUpCiNkZWZpbmUgQXhpc1RockNsZWFudXBQdXNoRGVmZXJOcChydG4sYXJnKSBw dGhyZWFkX2NsZWFudXBfcHVzaF9kZWZlcl9ucChydG4sYXJnKQojZGVmaW5lIEF4aXNUaHJDbGVh bnVwUG9wUmVzdG9yZU5wKGV4ZWN1dGUpIHB0aHJlYWRfY2xlYW51cF9wb3BfcmVzdG9yZV9ucChl eGVjdXRlKQojZGVmaW5lIEF4aXNUaHJTaWdtYXNrKGhvdyxuZXdtYXNrLG9sZG1hc2spIHB0aHJl YWRfc2lnbWFzayhob3csIG5ld21hc2ssIG9sZG1hc2spCiNkZWZpbmUgQXhpc1RocktpbGwodGhy LHNpZ25vKSBwdGhyZWFkX2tpbGwodGhyLCBzaWdubykKI2RlZmluZSBBeGlzVGhyQXRmb3JrKHBy ZXBhcmUscGFyZW50LGNoaWxkKSBwdGhyZWFkX2F0Zm9yayhwcmVwYXJlLCBwYXJlbnQsIGNoaWxk KQojZGVmaW5lIEF4aXNUaHJLaWxsT3RoZXJUaHJlYWRzTnAoKSBwdGhyZWFkX2tpbGxfb3RoZXJf dGhyZWFkc19ucCgpCiNkZWZpbmUgQXhpc1RockluaXRpYWxpemUoKSBwdGhyZWFkX2luaXRpYWxp emUoKQoKCnR5cGVkZWYgc3RydWN0IEF4aXNUaHJMb2NrIHsKICAgIHUzMiBzaGFyZWRDb3VudDsK ICAgIHUzMiBleGNsdXNpdmVDb3VudDsKCgoKCgogICAgcHRocmVhZF90IGV4Y2x1c2l2ZU93bmVy OwogICAgcHRocmVhZF9tdXRleF90IG11dGV4OwogICAgcHRocmVhZF9jb25kX3QgbG9ja0ZyZWU7 Cgp9IEF4aXNUaHJMb2NrOwp0eXBlZGVmIHZvaWQqIEF4aXNUaHJMb2NrQXR0cjsKIyAyMzYgImF4 aXMvYXhpc3Roci5oIgoKIyAxNyAiLi4vLi4vc3JjL3NkYm0udjAvc2RibWRlZnMuaCIgMgojIDI2 ICIuLi8uLi9zcmMvc2RibS52MC9zZGJtZGVmcy5oIgoKCiNkZWZpbmUgY1NkYm1Mb2dQcmZ4ICIl czolJCIsIF9fRlVOQ1RJT05fXwoKdHlwZWRlZiBzdHJ1Y3QgU2RibVdvcmtQb29sIHsKICAgIENx dWV1ZVB0ckxpbmsgbGlzdDsKICAgIEhlYXBEZXNjIGRlc2M7Cn0gU2RibVdvcmtQb29sOwpleHRl cm4gaW5saW5lIHZvaWQgU2RibVdvcmtQb29sc0luaXQoU2RibVdvcmtQb29sKiB0Z3QpIHsgQ3F1 ZXVlUHRySW5pdCh0Z3QsICgoV29yZCkoJigoKFNkYm1Xb3JrUG9vbCAqKTApLT5saXN0KSkpKTt9 IGV4dGVybiBpbmxpbmUgdm9pZCBTZGJtV29ya1Bvb2xzSW5zZXJ0KFNkYm1Xb3JrUG9vbCogdG9w LCBTZGJtV29ya1Bvb2wqIHRndCkgeyBDcXVldWVQdHJJbnNlcnRRdWV1ZSh0b3AsIHRndCwgKChX b3JkKSgmKCgoU2RibVdvcmtQb29sICopMCktPmxpc3QpKSkpO30gZXh0ZXJuIGlubGluZSB2b2lk IFNkYm1Xb3JrUG9vbHNBcHBlbmQoU2RibVdvcmtQb29sKiB0b3AsIFNkYm1Xb3JrUG9vbCogdGd0 KSB7IENxdWV1ZVB0ckFwcGVuZFF1ZXVlKHRvcCwgdGd0LCAoKFdvcmQpKCYoKChTZGJtV29ya1Bv b2wgKikwKS0+bGlzdCkpKSk7fSBleHRlcm4gaW5saW5lIFNkYm1Xb3JrUG9vbCogU2RibVdvcmtQ b29sc0RlbGV0ZShTZGJtV29ya1Bvb2wqIHRndCkgeyByZXR1cm4gQ3F1ZXVlUHRyRGVsZXRlUXVl dWUodGd0LCAoKFdvcmQpKCYoKChTZGJtV29ya1Bvb2wgKikwKS0+bGlzdCkpKSk7fSBleHRlcm4g aW5saW5lIFNkYm1Xb3JrUG9vbCogU2RibVdvcmtQb29sc05leHQoU2RibVdvcmtQb29sKiB0b3As IFNkYm1Xb3JrUG9vbCogdGd0KSB7IGlmKHRndCAhPSAoKHZvaWQgKikwKSkgeyBTZGJtV29ya1Bv b2wqIG5leHQgPSB0Z3QtPmxpc3QuZnJ3ZDsgcmV0dXJuIChuZXh0ICE9IHRvcCkgPyBuZXh0IDog KCh2b2lkICopMCk7IH0gZWxzZSByZXR1cm4gdG9wO30gZXh0ZXJuIGlubGluZSBTZGJtV29ya1Bv b2wqIFNkYm1Xb3JrUG9vbHNQcmV2KFNkYm1Xb3JrUG9vbCogdG9wLCBTZGJtV29ya1Bvb2wqIHRn dCkgeyBpZih0Z3QgIT0gKCh2b2lkICopMCkpIHsgU2RibVdvcmtQb29sKiBwcmV2ID0gdGd0LT5s aXN0LmJrd2Q7IHJldHVybiAocHJldiAhPSB0b3ApID8gcHJldiA6ICgodm9pZCAqKTApOyB9IGVs c2UgcmV0dXJuIHRvcDt9OwojZGVmaW5lIGNTZGJtV29ya1Bvb2xTaXplIDQxOTQzMDQKI2RlZmlu ZSBjU2RibVdvcmtEYXRhTGltaXQgMjA5NzE1MgojZGVmaW5lIGNTZGJtU3RyTGltaXQgMTA0ODU3 NQoKdHlwZWRlZiBzdHJ1Y3QgU2RibUhhbmRsZUNvbW1vbiB7CiAgICBTZGJtRGVzYyBkZXNjOwog ICAgQ3F1ZXVlUHRyTGluayBsaXN0OwogICAgdTMyIHZhckRhdGFNYXBwZWQ6MSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlzVGFibGVIYW5kbGU6MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHdyaXRhYmxlOjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Mjk7CiAgICBz MzIgcmVmOwogICAgQWRhbURlc2MgdmFyRGF0YURlc2M7Cn0gU2RibUhhbmRsZUNvbW1vbjsKCnN0 cnVjdCBTZGJtVGFibGVIYW5kbGU7CnR5cGVkZWYgc3RydWN0IFNkYm1EYkhhbmRsZSB7CiAgICBT ZGJtSGFuZGxlQ29tbW9uIGNvbW1vbjsKICAgIEF4aXNUaHJMb2NrIGxvY2s7CiAgICB1MzIgcnN2 IDoxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgOjMxOwoKICAgIFNkYm1UYWJsZU5vIHRi bE5vOwogICAgc3RydWN0IFNkYm1UYWJsZUhhbmRsZSogdGFibGVzOwogICAgQWRhbURlc2MgZGJG aWxlOwogICAgQWRhbURlc2Mgc3ViZmlsZXNbOF07CiAgICBBZGFtU3ViZmlsZVBhcmFtIHBhcmFt c1s4XTsKICAgIEFkYW1GaWxlUGFyYW0gZGJQYXJhbTsKCiAgICBTZGJtRGJNYWluKiBkYk1haW47 CiAgICBTZGJtRW51bVNldEF0dHIqIGVudW1TZXRBdHRyOwogICAgU2RibUVudW1TZXRFbnQqIGVu dW1TZXRzOwogICAgU2RibUVudW1Vbml0QXR0ciogZW51bVVuaXRBdHRyOwogICAgU2RibUVudW1V bml0KiBlbnVtVW5pdHM7CiAgICB2b2lkKiBkYk1haW5JZHg7CgogICAgY29uc3QgQXRyZWVDYWxs YmFja3MqIGVudW1OYW1lU2VhcmNoT3ByczsKICAgIGNvbnN0IEF0cmVlQ2FsbGJhY2tzKiBlbnVt VmFsU2VhcmNoT3ByczsKCiAgICBTZGJtV29ya1Bvb2wgd29ya1Bvb2xzOwogICAgU2RibVdvcmtQ b29sKiBjdXJQb29sOwoKICAgIGludCB1cGRhdGVMb2c7CgogICAgdTMyIGRiTmFtZUxlbjsKICAg IENociBkYk5hbWVbMF07Cn0gU2RibURiSGFuZGxlOwoKdHlwZWRlZiBzdHJ1Y3QgU2RibVRhYmxl SGFuZGxlIHsKICAgIFNkYm1IYW5kbGVDb21tb24gY29tbW9uOwogICAgdTMyIG9wZW5lZCA6MSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDozMTsKICAgIFNkYm1UYWJsZU5vIHRibE5vOwog ICAgU2RibURiSGFuZGxlKiBkYkg7CiAgICBBZGFtRmlsZVBhcmFtIGRiUGFyYW07CgogICAgQWRh bURlc2Mgc3ViZmlsZXNbOF07CiAgICBBZGFtU3ViZmlsZVBhcmFtIHBhcmFtc1s4XTsKCiAgICBT ZGJtVGFibGVNYWluKiB0YWJsZU1haW47CiAgICBTZGJtUmVjQXR0ciogcmVjc0NvbnRuckF0dHI7 CiAgICBTZGJtUmVjRW50eSogcmVjczsKICAgIFNkYm1UYWJsZUZsZEF0dHIqIGZsZHNDb250bnJB dHRyOwogICAgU2RibUZsZEJvZHkqIGZsZHM7CiAgICBTZGJtTGlua2VkRmxkSW5mb0F0dHIqIGxp bmtlZEZsZHNBdHRyOwogICAgU2RibUxpbmtlZEZsZEluZm8qIGxpbmtlZEZsZHM7CiAgICB2b2lk KiBpbmRleEFyZWE7CgogICAgU3ogcmVjU3o7CiAgICBzdHJ1Y3QgU2RibVRhYmxlSGFuZGxlKiog bGlua1RvVGFibGVzOwp9IFNkYm1UYWJsZUhhbmRsZTsKCnR5cGVkZWYgdW5pb24gU2RibUhhbmRs ZSB7CiAgICBTZGJtSGFuZGxlQ29tbW9uIGNvbW1vbjsKICAgIFNkYm1EYkhhbmRsZSBkYjsKICAg IFNkYm1UYWJsZUhhbmRsZSB0YWJsZTsKfSBTZGJtSGFuZGxlOwoKZXh0ZXJuIGlubGluZSB2b2lk IFNkYm1EYkhhbmRsZXNJbml0KFNkYm1EYkhhbmRsZSogdGd0KSB7IENxdWV1ZVB0ckluaXQodGd0 LCAoKFdvcmQpKCYoKChTZGJtRGJIYW5kbGUgKikwKS0+Y29tbW9uLmxpc3QpKSkpO30gZXh0ZXJu IGlubGluZSB2b2lkIFNkYm1EYkhhbmRsZXNJbnNlcnQoU2RibURiSGFuZGxlKiB0b3AsIFNkYm1E YkhhbmRsZSogdGd0KSB7IENxdWV1ZVB0ckluc2VydFF1ZXVlKHRvcCwgdGd0LCAoKFdvcmQpKCYo KChTZGJtRGJIYW5kbGUgKikwKS0+Y29tbW9uLmxpc3QpKSkpO30gZXh0ZXJuIGlubGluZSB2b2lk IFNkYm1EYkhhbmRsZXNBcHBlbmQoU2RibURiSGFuZGxlKiB0b3AsIFNkYm1EYkhhbmRsZSogdGd0 KSB7IENxdWV1ZVB0ckFwcGVuZFF1ZXVlKHRvcCwgdGd0LCAoKFdvcmQpKCYoKChTZGJtRGJIYW5k bGUgKikwKS0+Y29tbW9uLmxpc3QpKSkpO30gZXh0ZXJuIGlubGluZSBTZGJtRGJIYW5kbGUqIFNk Ym1EYkhhbmRsZXNEZWxldGUoU2RibURiSGFuZGxlKiB0Z3QpIHsgcmV0dXJuIENxdWV1ZVB0ckRl bGV0ZVF1ZXVlKHRndCwgKChXb3JkKSgmKCgoU2RibURiSGFuZGxlICopMCktPmNvbW1vbi5saXN0 KSkpKTt9IGV4dGVybiBpbmxpbmUgU2RibURiSGFuZGxlKiBTZGJtRGJIYW5kbGVzTmV4dChTZGJt RGJIYW5kbGUqIHRvcCwgU2RibURiSGFuZGxlKiB0Z3QpIHsgaWYodGd0ICE9ICgodm9pZCAqKTAp KSB7IFNkYm1EYkhhbmRsZSogbmV4dCA9IHRndC0+Y29tbW9uLmxpc3QuZnJ3ZDsgcmV0dXJuIChu ZXh0ICE9IHRvcCkgPyBuZXh0IDogKCh2b2lkICopMCk7IH0gZWxzZSByZXR1cm4gdG9wO30gZXh0 ZXJuIGlubGluZSBTZGJtRGJIYW5kbGUqIFNkYm1EYkhhbmRsZXNQcmV2KFNkYm1EYkhhbmRsZSog dG9wLCBTZGJtRGJIYW5kbGUqIHRndCkgeyBpZih0Z3QgIT0gKCh2b2lkICopMCkpIHsgU2RibURi SGFuZGxlKiBwcmV2ID0gdGd0LT5jb21tb24ubGlzdC5ia3dkOyByZXR1cm4gKHByZXYgIT0gdG9w KSA/IHByZXYgOiAoKHZvaWQgKikwKTsgfSBlbHNlIHJldHVybiB0b3A7fTsKCmV4dGVybiBpbmxp bmUgdm9pZCBTZGJtVGFibGVIYW5kbGVzSW5pdChTZGJtVGFibGVIYW5kbGUqIHRndCkgeyBDcXVl dWVQdHJJbml0KHRndCwgKChXb3JkKSgmKCgoU2RibVRhYmxlSGFuZGxlICopMCktPmNvbW1vbi5s aXN0KSkpKTt9IGV4dGVybiBpbmxpbmUgdm9pZCBTZGJtVGFibGVIYW5kbGVzSW5zZXJ0KFNkYm1U YWJsZUhhbmRsZSogdG9wLCBTZGJtVGFibGVIYW5kbGUqIHRndCkgeyBDcXVldWVQdHJJbnNlcnRR dWV1ZSh0b3AsIHRndCwgKChXb3JkKSgmKCgoU2RibVRhYmxlSGFuZGxlICopMCktPmNvbW1vbi5s aXN0KSkpKTt9IGV4dGVybiBpbmxpbmUgdm9pZCBTZGJtVGFibGVIYW5kbGVzQXBwZW5kKFNkYm1U YWJsZUhhbmRsZSogdG9wLCBTZGJtVGFibGVIYW5kbGUqIHRndCkgeyBDcXVldWVQdHJBcHBlbmRR dWV1ZSh0b3AsIHRndCwgKChXb3JkKSgmKCgoU2RibVRhYmxlSGFuZGxlICopMCktPmNvbW1vbi5s aXN0KSkpKTt9IGV4dGVybiBpbmxpbmUgU2RibVRhYmxlSGFuZGxlKiBTZGJtVGFibGVIYW5kbGVz RGVsZXRlKFNkYm1UYWJsZUhhbmRsZSogdGd0KSB7IHJldHVybiBDcXVldWVQdHJEZWxldGVRdWV1 ZSh0Z3QsICgoV29yZCkoJigoKFNkYm1UYWJsZUhhbmRsZSAqKTApLT5jb21tb24ubGlzdCkpKSk7 fSBleHRlcm4gaW5saW5lIFNkYm1UYWJsZUhhbmRsZSogU2RibVRhYmxlSGFuZGxlc05leHQoU2Ri bVRhYmxlSGFuZGxlKiB0b3AsIFNkYm1UYWJsZUhhbmRsZSogdGd0KSB7IGlmKHRndCAhPSAoKHZv aWQgKikwKSkgeyBTZGJtVGFibGVIYW5kbGUqIG5leHQgPSB0Z3QtPmNvbW1vbi5saXN0LmZyd2Q7 IHJldHVybiAobmV4dCAhPSB0b3ApID8gbmV4dCA6ICgodm9pZCAqKTApOyB9IGVsc2UgcmV0dXJu IHRvcDt9IGV4dGVybiBpbmxpbmUgU2RibVRhYmxlSGFuZGxlKiBTZGJtVGFibGVIYW5kbGVzUHJl dihTZGJtVGFibGVIYW5kbGUqIHRvcCwgU2RibVRhYmxlSGFuZGxlKiB0Z3QpIHsgaWYodGd0ICE9 ICgodm9pZCAqKTApKSB7IFNkYm1UYWJsZUhhbmRsZSogcHJldiA9IHRndC0+Y29tbW9uLmxpc3Qu Ymt3ZDsgcmV0dXJuIChwcmV2ICE9IHRvcCkgPyBwcmV2IDogKCh2b2lkICopMCk7IH0gZWxzZSBy ZXR1cm4gdG9wO307CgpleHRlcm4gaW50IFNkYm1VcGRhdGVMb2dTZXQoU2RibVRhYmxlSGFuZGxl KiB0YmxILCBTZGJtUmVjRW50eSogcmVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNk Ym1GbGRTcGVjKiBmU3BlYywgU2RibUZsZEJvZHkqIGZsZCk7CmV4dGVybiBpbnQgU2RibVVwZGF0 ZUxvZ0VyYXNlKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgU2RibVJlY0VudHkqIHJlYywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFNkYm1GbGRTcGVjKiBmU3BlYywgU2RibVZlY0ZsZElk eCB2ZWNJZHgpOwpleHRlcm4gaW50IFNkYm1VcGRhdGVMb2dDbGVhcihTZGJtVGFibGVIYW5kbGUq IHRibEgsIFNkYm1SZWNFbnR5KiByZWMsIFNkYm1GbGRTcGVjKiBmU3BlYyk7CmV4dGVybiBpbnQg U2RibVVwZGF0ZUxvZ0RlbChTZGJtVGFibGVIYW5kbGUqIHRibEgsIFNkYm1EYXRhSWQgZGF0YUlk KTsKZXh0ZXJuIGludCBTZGJtVXBkYXRlTG9nTmV3UmVjKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwg U2RibURhdGFJZCBkYXRhSWQpOwpleHRlcm4gaW50IFNkYm1EdW1wRmxkQ29udGVudChTZGJtVGFi bGVIYW5kbGUqIHRibEgsIFNkYm1SZWNFbnR5KiByZWMsIFNkYm1GbGRObyBmbGRObywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvdXRwdXQsIGludCBtb2RlKTsKCmV4dGVybiBp bmxpbmUgaW50ClNkYm1TdHJjbXAoY29uc3Qgdm9pZCogc3RyMSwgY29uc3Qgdm9pZCogc3RyMikK ewogICAgTGVuIGxlbjEgPSBzdHJsZW4oc3RyMSk7CiAgICBMZW4gbGVuMiA9IHN0cmxlbihzdHIy KTsKICAgIExlbiBsZW47CiAgICBpbnQgY2M7CgogICAgbGVuID0gKGxlbjEgPCBsZW4yKSA/IGxl bjEgOiBsZW4yOwogICAgY2MgPSBtZW1jbXAoc3RyMSwgc3RyMiwgbGVuKTsKICAgIGlmKGNjID09 IDApIHsKICAgICAgICBpZihsZW4xIDwgbGVuMikgewogICAgICAgICAgICBjYyA9IC0xOwogICAg ICAgIH0gZWxzZSBpZihsZW4xID4gbGVuMikgewogICAgICAgICAgICBjYyA9IDE7CiAgICAgICAg fQogICAgfQogICAgcmV0dXJuIGNjOwp9CgoKIyAzNCAiLi4vLi4vc3JjL3NkYm0udjAvc2RibWZs ZHUuYyIgMgojIDEgIi4uLy4uL3NyYy9zZGJtLnYwL3NkYm12ZHUuaCIgMQojIDE0ICIuLi8uLi9z cmMvc2RibS52MC9zZGJtdmR1LmgiCiNkZWZpbmUgX0FYSVNfU0RCTVZEVV9IXyAKCgojIDEgImF4 aXMvYXhpc2Vyci5oIiAxCiMgMjggImF4aXMvYXhpc2Vyci5oIgojZGVmaW5lIF9BWElTX0FYSVNF UlJfSF8gCgoKIyA4NyAiYXhpcy9heGlzZXJyLmgiCiNkZWZpbmUgZU9LIDAKI2RlZmluZSBOb3RF cnIoZXJyKSAoKGVycikgPj0gZU9LKQojZGVmaW5lIElzRXJyKGVycikgKChlcnIpIDwgZU9LKQoj ZGVmaW5lIEVyclJldChlcnIpICgtKGVycikpCgojZGVmaW5lIGVTeXNNaW4gMQojZGVmaW5lIGVT eXNNYXggMTAyMwoKI2RlZmluZSBlQ21uTWluIDEwMjQKI2RlZmluZSBlQ21uSWxsZWdhbEV4Y2Vw dGlvbiAxMDI1CiNkZWZpbmUgZUNtblN0YW5kYXJkRXhjZXB0aW9uIDEwMjYKI2RlZmluZSBlQ21u Q2hyUHRyRmF1bHQgMTAyNwojZGVmaW5lIGVDbW5FbmRPZkRhdGEgMTAyOAojZGVmaW5lIGVDbW5U aHJQcml2VGhyZWFkSWRVbm1hdGNoIDEwMjkKI2RlZmluZSBlQ21uVGhyUHJpdkltcG9zc2libGVT ZXQgMTAzMAojZGVmaW5lIGVDbW5UaHJQcml2QWxyZWFkeVJlc2VydmVkIDEwMzEKI2RlZmluZSBl Q21uVGhyUHJpdklsbGVnYWxQcmVzZXQgMTAzMgojZGVmaW5lIGVDbW5NYXggMjA0NwoKI2RlZmlu ZSBlVXRpbE1pbiAyMDQ4CiNkZWZpbmUgZVV0aWxEZXNjSWRFcnIgMjA0OQojZGVmaW5lIGVVdGls RGVzY0luaXREdXAgMjA1MAojZGVmaW5lIGVVdGlsRGVzY0lsbFZhbGlkTnVtIDIwNTEKI2RlZmlu ZSBlVXRpbERlc2NOb3RZZXRJbml0IDIwNTIKI2RlZmluZSBlVXRpbERlc2NPdmVyTGltaXQgMjA1 MwojZGVmaW5lIGVVdGlsRGVzY0lsbERlc2MgMjA1NAojZGVmaW5lIGVVdGlsSGVhcE5vTW5nIDIw NjAKI2RlZmluZSBlVXRpbEhlYXBJbGxEZXNjIDIwNjEKI2RlZmluZSBlVXRpbEhlYXBJbGxUeXBl IDIwNjIKI2RlZmluZSBlVXRpbEluZXROb0FkZHIgMjA2MwojZGVmaW5lIGVBdGltZVN0ckludmFs aWQgMjA5NgojZGVmaW5lIGVBdGltZUZvcm1hdE5vdE1hdGNoIDIwOTcKI2RlZmluZSBlQXRpbWVV bnN1cHBvcnRlZEZvcm1hdCAyMDk4CiNkZWZpbmUgZVV0aWxBdHJlZUR1cGxpY2F0aW9uIDIxMTIK I2RlZmluZSBlVXRpbEF0cmVlSW52YWxpZFJlcSAyMTEzCiNkZWZpbmUgZVV0aWxBdHJlZU5vdEZv dW5kIDIxMTQKI2RlZmluZSBlVXRpbEF0cmVlTm9UcmVlIDIxMTUKI2RlZmluZSBlVXRpbEF0cmVl Q29uZnVzaW9uIDIxMTYKI2RlZmluZSBlQXhpc1RocklsbEV4Y2x1c2l2ZUxvY2sgMjE3NgojZGVm aW5lIGVUc2FtTm9IYW5kbGUgMjE3NwojZGVmaW5lIGVUc2FtTm9GcmVlTmVpZ2hub3VyIDIxNzgK I2RlZmluZSBlVkxBQXJlYVNpemVVbm1hdGNoIDIyMDAKI2RlZmluZSBlVkxBSW50ZXJuYWxCdWcg MjIwMQojZGVmaW5lIGVWTEFCcm9rZW4gMjIwMgojZGVmaW5lIGVWTEFOb3RTdXBwb3J0IDIyMDMK I2RlZmluZSBlVkxBTm90U2V0T3B0aW9uIDIyMDQKI2RlZmluZSBlWGZTb2NrVGltZWRPdXQgMjMw MAojZGVmaW5lIGVYZlNvY2tFcnIgMjMwMQojZGVmaW5lIGVYZkhlYWRlclRvb0xhcmdlIDIzMDIK I2RlZmluZSBlWGZCYWRIZWFkZXIgMjMwMwojZGVmaW5lIGVYZkJhZFJlcXVlc3QgMjMwNAojZGVm aW5lIGVYZk5vQ2h1bmtIZWFkZXIgMjMwNQojZGVmaW5lIGVVdGlsQkFTRTY0TWFsZm9ybWVkIDIz MTAKI2RlZmluZSBlTWFpbFF1b3RlZE5vbkFzY2lpIDIzMjAKI2RlZmluZSBlTWFpbExpbmVUb29M b25nIDIzMjEKI2RlZmluZSBlTWFpbE5vdFN1cHBvcnRlZCAyMzIzCiNkZWZpbmUgZUNvZGVDb252 U3JjRGF0YUVuZCAyMzQwCiNkZWZpbmUgZUNvZGVDb252RHN0RGF0YUVuZCAyMzQxCiNkZWZpbmUg ZUNvZGVDb252U3JjRGF0YUVyciAyMzQyCiNkZWZpbmUgZUNvZGVDb252RHN0RGF0YUVyciAyMzQz CiNkZWZpbmUgZUNvZGVDb252SW52YWxpZCAyMzQ0CgojZGVmaW5lIGVBZGFtTWluIDMwNzIKI2Rl ZmluZSBlQWRhbUlzTm90RmlsZSAzMDczCiNkZWZpbmUgZUFkYW1JbGxTdWJmaWxlSWQgMzA3NAoj ZGVmaW5lIGVBZGFtSWxsU3ViZmlsZVR5cGUgMzA3NQojZGVmaW5lIGVBZGFtRm9ya0V4aXN0IDMw NzYKI2RlZmluZSBlQWRhbVN1YmZpbGVFeGlzdCAzMDc3CiNkZWZpbmUgZUFkYW1JbGxGb3JrSWQg MzA3OAojZGVmaW5lIGVBZGFtTm90U3VwcG9ydGVkIDMwNzkKI2RlZmluZSBlQWRhbUlsbFBvc0Zv clZhckVsbUxpc3QgMzA4MAojZGVmaW5lIGVBZGFtVG9vTGFyZ2VEYXRhIDMwODEKCiNkZWZpbmUg ZVNkYm1NaW4gNDA5NgojZGVmaW5lIGVTZGJtQnVpbGRJbGxFbnVtSWQgNDEwMAojZGVmaW5lIGVT ZGJtQnVpbGREdXBsaWNhdGVFbnVtIDQxMDEKI2RlZmluZSBlU2RibUJ1aWxkSWxsRmxkTm8gNDEw MgojZGVmaW5lIGVTZGJtQnVpbGREdXBsaWNhdGVGbGQgNDEwMwojZGVmaW5lIGVTZGJtTm9FbnVt IDQxNDAKI2RlZmluZSBlU2RibU5vRmxkIDQxNDEKI2RlZmluZSBlU2RibVVubWF0Y2hEYkRlc2Mg NDE0MgojZGVmaW5lIGVTZGJtRHVwRW51bVNldElkIDQxNDMKI2RlZmluZSBlU2RibU5vdEVudW1V bml0TmFtZSA0MTQ0CiNkZWZpbmUgZVNkYm1Ob3RFbnVtVW5pdFZhbCA0MTQ1CiNkZWZpbmUgZVNk Ym1Ub29MYXJnZURhdGEgNDE0NgojZGVmaW5lIGVTZGJtVG9vTG9uZ0RiTmFtZSA0MTQ3CiNkZWZp bmUgZVNkYm1Ub29Mb25nVGFibGVOYW1lIDQxNDgKI2RlZmluZSBlU2RibVRvb0xvbmdFbnVtU2V0 TmFtZSA0MTQ5CiNkZWZpbmUgZVNkYm1Ub29Mb25nRW51bVVuaXROYW1lIDQxNTAKI2RlZmluZSBl U2RibVRvb0xvbmdGaWVsZE5hbWUgNDE1MQojZGVmaW5lIGVTZGJtSWxsRmxkRGF0YUlkeCA0MTUy CiNkZWZpbmUgZVNkYm1JbGxSZWNJZHggNDE1MwojZGVmaW5lIGVTZGJtSWxsUmVjUmV2aXNpb24g NDE1NAojZGVmaW5lIGVTZGJtSWxsUmVjSWQgNDE1NQojZGVmaW5lIGVTZGJtSWxsUmVjSWRJblRh YmxlTm8gNDE1NgojZGVmaW5lIGVTZGJtSWxsRmxkTm8gNDE1NwojZGVmaW5lIGVTZGJtTm9uZUZs ZE5hbWUgNDE1OAojZGVmaW5lIGVTZGJtRHVwRmxkTmFtZSA0MTU5CiNkZWZpbmUgZVNkYm1JbGxT ZWFyY2hUYXJnZXQgNDE2MAojZGVmaW5lIGVTZGJtTm9TdWNoRGF0YSA0MTYxCiNkZWZpbmUgZVNk Ym1Ob1dvcmtBcmVhIDQxNzEKI2RlZmluZSBlU2RibUlsbFZhckRhdGEgNDE3MgojZGVmaW5lIGVT ZGJtSWxsUXVlcnlDb25kIDQxNzMKI2RlZmluZSBlU2RibUJ1aWxkSWxsRmxkVHlwZSA0MTc0CiNk ZWZpbmUgZVNkYm1CdWlsZE5vdFN1cHB0RmxkVHlwZSA0MTc1CiNkZWZpbmUgZVNkYm1JbGxUYWJs ZURlc2MgNDE3NgojZGVmaW5lIGVTZGJtSWxsVGJsTm9Gb3JMaW5rRmxkIDQxNzcKI2RlZmluZSBl U2RibUlsbEZsZE5vRm9yTGlua0ZsZCA0MTc4CiNkZWZpbmUgZVNkYm1NdWx0aXBsZUxpbmtGbGQg NDE3OQojZGVmaW5lIGVTZGJtSWxsUmVjTnVtRm9yRXhwYW5kIDQxODAKI2RlZmluZSBlU2RibUZv dW5kSW5jb25zaXN0ZW5jeUZvclJlY0VudHkgNDE4MQojZGVmaW5lIGVTZGJtVW5tYXRjaEZsZFR5 cGUgNDE4MgojZGVmaW5lIGVTZGJtSWxsRW51bVNldE5hbWUgNDE4MwojZGVmaW5lIGVTZGJtSWxs RW51bVNldElkIDQxODQKI2RlZmluZSBlU2RibUlsbFRibE5vIDQxODUKI2RlZmluZSBlU2RibUls bERhdGFMZW4gNDE4NgojZGVmaW5lIGVTZGJtRHVwbGljYXRlRGF0YSA0MTg3CiNkZWZpbmUgZVNk Ym1Vbm1hdGNoTGlua2VkRGF0YSA0MTg4CiNkZWZpbmUgZVNkYm1PdmVyTGltaXRRdWVyeUNvbmRp dGlvbnMgNDE4OQoKI2RlZmluZSBlSHRpZk1pbiA1MTIwCiNkZWZpbmUgZUh0aWZSZWVudGVyIDUx MjEKI2RlZmluZSBlSHRpZk5vRW52VmFyIDUxMjIKI2RlZmluZSBlSHRpZlRodG1sRW9mIDUxMjMK I2RlZmluZSBlSHRpZlRodG1sRW9iIDUxMjQKI2RlZmluZSBlSHRpZlRtcEJ1Zk92ciA1MTI1CiNk ZWZpbmUgZUh0aWZQYXJhbVJhbmdlT3ZyIDUxMjYKI2RlZmluZSBlSHRpZlVua25vd25DYWxsYmFj ayA1MTI3CiNkZWZpbmUgZUh0aWZVbmtub3duVGFibGUgNTEyOAojZGVmaW5lIGVIdGlmSWxsRmxk VHlwZSA1MTI5CiNkZWZpbmUgZUh0aWZOb1JlY1NlbGVjdGVkIDUxMzAKI2RlZmluZSBlSHRpZkls bERhdGUgNTEzMQojZGVmaW5lIGVIdGlmU2hvcnREYXRhIDUxMzIKCgojZGVmaW5lIGVTZXNzTWlu IDYxNDQKI2RlZmluZSBlU2Vzc0lsbFBsYWluQ1JDaW5Db29raWUgNjE0NQojZGVmaW5lIGVTZXNz SWxsQ2lwaGVyQ1JDaW5Db29raWUgNjE0NgojZGVmaW5lIGVTZXNzSWxsVGV4dENvb2tpZSA2MTQ3 CiNkZWZpbmUgZVNlc3NJbGxDYWNoZUZpbGUgNjE0OAojZGVmaW5lIGVTZXNzSWxsQ29va2llIDYx NDkKI2RlZmluZSBlU2Vzc0lsbENhcGFiaWxpdHkgNjE1MAojZGVmaW5lIGVTZXNzVG9vTWFueVNl c3Npb24gNjE1MQojZGVmaW5lIGVTZXNzSWxsUGFzc0NvZGVTdHIgNjE1MgojZGVmaW5lIGVTZXNz UGFzc0NvZGVVbm1hdGNoIDYxNTMKI2RlZmluZSBlU2Vzc0lsbFNlc3NJRCA2MTU0CiNkZWZpbmUg ZVNlc3NOb0Nvb2tpZSA2MTU1CiNkZWZpbmUgZVNlc3NEdXAgNjE1NgoKI2RlZmluZSBlU2xtTWlu IDY2NTYKI2RlZmluZSBlU2xtTWF4IDcxNjcKCiNkZWZpbmUgZUNwcE1pbiA3MTY4CiNkZWZpbmUg ZUNwcERiZ0lsbGVnYWxOYW1lIDcxNjgKI2RlZmluZSBlQ3BwRGJnTm9NZW0gNzE2OQojZGVmaW5l IGVDcHBEYmdPdXRUb29TbWFsbCA3MTcwCiNkZWZpbmUgZUNwcE1heCA4MTkxCgojZGVmaW5lIGVD cHBTeXNVdGxNaW4gODE5MgojZGVmaW5lIGVDcHBTeXNUZWxuZXRNaW4gODE5MgojZGVmaW5lIGVD cHBTeXNUZWxuZXRVbnN1cHBvcnRlZE9wdGlvbiA4MTkyCiNkZWZpbmUgZUNwcFN5c1RlbG5ldENv bm5DbG9zZWQgODE5MwojZGVmaW5lIGVDcHBTeXNUZWxuZXRVbnN1cHBvcnRlZENtZCA4MTk0CiNk ZWZpbmUgZUNwcFN5c1RlbG5ldElsbFN1Yk9wdGlvblNlcXVlbmNlIDgxOTUKI2RlZmluZSBlQ3Bw U3lzVGVsbmV0TmVnb3RpYXRpb25GYWlsIDgxOTYKI2RlZmluZSBlQ3BwU3lzVGVsbmV0TWF4IDgy NTUKI2RlZmluZSBlQ3BwU3lzU3RyQnVmZk1pbiA4MjU2CiNkZWZpbmUgZUNwcFN5c1N0ckJ1ZmZJ bnZhbGlkIDgyNTYKI2RlZmluZSBlQ3BwU3lzU3RyQnVmZk1heCA4Mjg4CiNkZWZpbmUgZWNwcFN5 c1V0bE1heCA5MjE1CgojZGVmaW5lIGVNdGFiTWluIDkyMTYKI2RlZmluZSBlTXRhYlBhcmFtTWlu IDkyMTYKI2RlZmluZSBlTXRhYlBhcmFtVHlwZU1pc3NNYXRjaCA5MjE2CiNkZWZpbmUgZU10YWJQ YXJhbUNob2ljZVJhbmdlT3ZlciA5MjE3CiNkZWZpbmUgZU10YWJQYXJhbVN5bnRheEVycm9yIDky MTgKI2RlZmluZSBlTXRhYlBhcmFtUmFuZ2VPdmVyIDkyMTkKI2RlZmluZSBlTXRhYlBhcmFtQXBw bENoZWNrRmFpbCA5MjIwCiNkZWZpbmUgZU10YWJQYXJhbVN0cmluZ1Rvb0xvbmcgOTIyMQojZGVm aW5lIGVNdGFiUGFyYW1DaG9pY2VVbm1hdGNoIDkyMjIKI2RlZmluZSBlTXRhYlBhcmFtSXBWNEFk ZHJJbGxlZ2FsIDkyMjMKI2RlZmluZSBlTXRhYlBhcmFtRWxlbUluZGV4UmFuZ2VPdmVyIDkyMjQK I2RlZmluZSBlTXRhYlBhcmFtVHJlZUZhdGFsIDkyMjUKI2RlZmluZSBlTXRhYlBhcmFtVHlwZVVu a25vd24gOTIyNgojZGVmaW5lIGVNdGFiUGFyYW1Qcm9mSW5kZXhSYW5nZU92ZXIgOTIyNwojZGVm aW5lIGVNdGFiUGFyYW1Ob01lbSA5MjI4CiNkZWZpbmUgZU10YWJQYXJhbVRvb01hbnlSZWdpc3Qg OTIyOQojZGVmaW5lIGVNdGFiUGFyYW1Xcm90ZVNoYWRvdyA5MjMwCiNkZWZpbmUgZU10YWJQYXJh bVdyb3RlUGVyc2lzdGVudCA5MjMxCiNkZWZpbmUgZU10YWJQYXJhbUFzc29jRmV3RGF0YSA5MjMy CiNkZWZpbmUgZU10YWJQYXJhbUlsbGVnYWxOYW1lUmVnaXN0IDkyMzMKI2RlZmluZSBlTXRhYlBh cmFtTm9QZXJtaXNzaW9uIDkyMzQKI2RlZmluZSBlTXRhYlBhcmFtTWF4IDkyNzkKI2RlZmluZSBl TXRhYkNtZE1pbiA5MjgwCiNkZWZpbmUgZU10YWJDbWRUcmVlRmF0YWwgOTI4MAojZGVmaW5lIGVN dGFiQ21kSW5kZXhSYW5nZU92ZXIgOTI4MQojZGVmaW5lIGVNdGFiQ21kVHJlZVJlZ2lzdEZhaWwg OTI4MgojZGVmaW5lIGVNdGFiQ21kTm9NZW0gOTI4MwojZGVmaW5lIGVNdGFiQ21kVG9vTWFueVJl Z2lzdCA5Mjg0CiNkZWZpbmUgZU10YWJDbWRJbGxlZ2FsTmFtZVJlZ2lzdCA5Mjg1CiNkZWZpbmUg ZU10YWJDbWRSdW5SZXN1bHRORyA5Mjg2CiNkZWZpbmUgZU10YWJDbWRNYXggOTM0MwojZGVmaW5l IGVNdGFiTW9kTWluIDkzNDQKI2RlZmluZSBlTXRhYk1vZE5vTWVtIDkzNDQKI2RlZmluZSBlTXRh Yk1vZFByb2ZWZWNJZHhSYW5nZU92ZXIgOTM0NQojZGVmaW5lIGVNdGFiTW9kUHJvZk5vRXhpdCA5 MzQ2CiNkZWZpbmUgZU10YWJNb2RQcm9mSWxsZWdhbFJlZ2lzdCA5MzQ3CiNkZWZpbmUgZU10YWJN b2RQcm9mRHVwbGljYXRlUmVnaXN0IDkzNDgKI2RlZmluZSBlTXRhYk1vZEludGVyZmFjZU5hbWVE dXBsaWNhdGUgOTM0OQojZGVmaW5lIGVNdGFiTW9kSW50ZXJmYWNlRnVsbCA5MzUwCiNkZWZpbmUg ZU10YWJNb2RJbnRlcmZhY2VSZWdpc3RJbGxlZ2FsIDkzNTEKI2RlZmluZSBlTXRhYk1vZE1heCA5 NDA3CiNkZWZpbmUgZU10YWJNYWluTWluIDk0MDgKI2RlZmluZSBlTXRhYk1haW5NYXggOTQ3MQoj ZGVmaW5lIGVNdGFiVXNlck1pbiA5NDcyCiNkZWZpbmUgZU10YWJVc2VySWxsZWdhbFBhc3NwaGFy ZURpZ2VzdFN0ciA5NDcyCiNkZWZpbmUgZU10YWJVc2VyTWF4IDk0ODcKI2RlZmluZSBlTXRhYlN0 YXRNaW4gOTQ4OAojZGVmaW5lIGVNdGFiU3RhdElsbGVnYWxTdGF0SXRlbU5hbWUgOTQ4OAojZGVm aW5lIGVNdGFiU3RhdER1cGxpY2F0ZVN0YXRJdGVtTmFtZSA5NDg5CiNkZWZpbmUgZU10YWJTdGF0 SWxsZWdhbFN0YXRSZWNTaXplIDk0OTAKI2RlZmluZSBlTXRhYlN0YXRJbGxlZ2FsU3RhdEl0ZW1U eXBlIDk0OTEKI2RlZmluZSBlTXRhYlN0YXRNYXggOTUxOQojZGVmaW5lIGVNdGFiTWF4IDEwMjM5 CgoKIyAxOCAiLi4vLi4vc3JjL3NkYm0udjAvc2RibXZkdS5oIiAyCiMgMjYgIi4uLy4uL3NyYy9z ZGJtLnYwL3NkYm12ZHUuaCIKCgpleHRlcm4gaW5saW5lIGludApTZGJtTWFwVmFyRGF0YShTZGJt SGFuZGxlQ29tbW9uKiBjb21IKQp7CiAgICBpbnQgZXJyID0gMDsKCiAgICA7CiAgICBpZighIGNv bUgtPnZhckRhdGFNYXBwZWQpIHsKICAgICAgICBlcnIgPSBBZGFtTWFwU3ViZmlsZShjb21ILT52 YXJEYXRhRGVzYywgY29tSC0+d3JpdGFibGUgPyAxIDogMCk7CiAgICAgICAgaWYoKChlcnIpID49 IDApKSB7CiAgICAgICAgICAgIGNvbUgtPnZhckRhdGFNYXBwZWQgPSAxOwogICAgICAgIH0KICAg IH0KICAgIHJldHVybiAoZXJyKTsKfQoKZXh0ZXJuIGlubGluZSBpbnQKU2RibVVubWFwVmFyRGF0 YShTZGJtSGFuZGxlQ29tbW9uKiBjb21IKQp7CiAgICBpbnQgZXJyID0gMDsKCiAgICA7CiAgICBp Zihjb21ILT52YXJEYXRhTWFwcGVkKSB7CiAgICAgICAgQWRhbVVubWFwU3ViZmlsZShjb21ILT52 YXJEYXRhRGVzYyk7CiAgICAgICAgY29tSC0+dmFyRGF0YU1hcHBlZCA9IDA7CiAgICB9CiAgICBy ZXR1cm4gKGVycik7Cn0KCmV4dGVybiBpbmxpbmUgdm9pZCoKU2RibUdldEFkZHJPZlZhckRhdGEo U2RibUhhbmRsZUNvbW1vbiogY29tSCwgQWRhbVBvcyBwb3MpCnsKICAgIHZvaWQqIHB0ciA9ICgo dm9pZCAqKTApOwogICAgaW50IGVycjsKICAgIGVyciA9IEFkYW1HZXRJdHNBZGRyKGNvbUgtPnZh ckRhdGFEZXNjLCBwb3MsICZwdHIpOwogICAgaWYoKChlcnIpID49IDApKSB7CiAgICAgICAgcmV0 dXJuIHB0cjsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuICgodm9pZCAqKTApOwogICAgfQp9 CgpleHRlcm4gaW5saW5lIEFkYW1Qb3MKU2RibU5ld1ZhckRhdGEoU2RibUhhbmRsZUNvbW1vbiog Y29tSCwgU3ogZGF0YVNpemUpCnsKICAgIEFkYW1Qb3MgcG9zOwogICAgOwoKICAgIGlmKGRhdGFT aXplID4gMTY3NzcyMTUpIHsKICAgICAgICByZXR1cm4gKCgtKDQxNDYpKSk7CiAgICB9CgogICAg U2RibVVubWFwVmFyRGF0YShjb21IKTsKICAgIHBvcyA9IEFkYW1BbGxvY0l0KGNvbUgtPnZhckRh dGFEZXNjLCBkYXRhU2l6ZSk7CiAgICByZXR1cm4gKHBvcyk7Cn0KCmV4dGVybiBpbmxpbmUgaW50 ClNkYm1GcmVlVmFyRGF0YShTZGJtSGFuZGxlQ29tbW9uKiBjb21ILCBBZGFtUG9zIHBvcykKewog ICAgaW50IHJldFZhbCA9IDA7CiAgICA7CgogICAgU2RibVVubWFwVmFyRGF0YShjb21IKTsKICAg IHJldFZhbCA9IEFkYW1GcmVlSXQoY29tSC0+dmFyRGF0YURlc2MsIHBvcyk7CiAgICByZXR1cm4g KHJldFZhbCk7Cn0KCmV4dGVybiBpbmxpbmUgQWRhbVBvcwpTZGJtUHV0TmV3VmFyRGF0YShTZGJt SGFuZGxlQ29tbW9uKiBjb21ILCBTeiBkYXRhU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKewogICAg dm9pZCogcHRyID0gKCh2b2lkICopMCk7CiAgICBBZGFtUG9zIHBvczsKICAgIDsKCiAgICBpZihk YXRhU2l6ZSA+IDApIHsKICAgICAgICBwb3MgPSBTZGJtTmV3VmFyRGF0YShjb21ILCBkYXRhU2l6 ZSk7CiAgICAgICAgaWYoKChwb3MpID49IDApKSB7CiAgICAgICAgICAgIGludCBlcnIgPSBTZGJt TWFwVmFyRGF0YShjb21IKTsKICAgICAgICAgICAgaWYoKChlcnIpID49IDApKSB7CiAgICAgICAg ICAgICAgICBlcnIgPSBBZGFtR2V0SXRzQWRkcihjb21ILT52YXJEYXRhRGVzYywgcG9zLCAmcHRy KTsKICAgICAgICAgICAgICAgIGlmKCgoZXJyKSA+PSAwKSkgewogICAgICAgICAgICAgICAgICAg IG1lbWNweShwdHIsIGRhdGEsIGRhdGFTaXplKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgfQogICAgICAgICAgICBpZigoKGVycikgPCAwKSkgewogICAgICAgICAgICAgICAgQWRhbUZy ZWVJdChjb21ILT52YXJEYXRhRGVzYywgcG9zKTsKICAgICAgICAgICAgICAgIHBvcyA9IGVycjsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgcG9zID0gMDsKICAg IH0KICAgIHJldHVybiAocG9zKTsKfQoKZXh0ZXJuIGlubGluZSBBZGFtUG9zClNkYm1QdXROZXdT dHJpbmcoU2RibUhhbmRsZUNvbW1vbiogY29tSCwgY29uc3QgQ2hyKiBzdHIpCnsKICAgIHZvaWQq IHB0ciA9ICgodm9pZCAqKTApOwogICAgU3ogbDsKICAgIEFkYW1Qb3MgcG9zOwogICAgOwoKICAg IGlmKHN0cikgewogICAgICAgIGwgPSBzdHJsZW4oc3RyKSArIDE7CiAgICAgICAgcG9zID0gU2Ri bU5ld1ZhckRhdGEoY29tSCwgbCk7CiAgICAgICAgaWYoKChwb3MpID49IDApKSB7CiAgICAgICAg ICAgIGludCBlcnIgPSBTZGJtTWFwVmFyRGF0YShjb21IKTsKICAgICAgICAgICAgaWYoKChlcnIp ID49IDApKSB7CiAgICAgICAgICAgICAgICBlcnIgPSBBZGFtR2V0SXRzQWRkcihjb21ILT52YXJE YXRhRGVzYywgcG9zLCAmcHRyKTsKICAgICAgICAgICAgICAgIGlmKCgoZXJyKSA+PSAwKSkgewog ICAgICAgICAgICAgICAgICAgIG1lbWNweShwdHIsIHN0ciwgbCk7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoKChlcnIpIDwgMCkpIHsKICAgICAgICAgICAg ICAgIEFkYW1GcmVlSXQoY29tSC0+dmFyRGF0YURlc2MsIHBvcyk7CiAgICAgICAgICAgICAgICBw b3MgPSBlcnI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIHBv cyA9IDA7CiAgICB9CiAgICByZXR1cm4gKHBvcyk7Cn0KCgojIDM1ICIuLi8uLi9zcmMvc2RibS52 MC9zZGJtZmxkdS5jIiAyCiMgMSAiLi4vLi4vc3JjL3NkYm0udjAvc2RibXBsbi5oIiAxCiMgMTQg Ii4uLy4uL3NyYy9zZGJtLnYwL3NkYm1wbG4uaCIKI2RlZmluZSBfQVhJU19TREJNUExOX0hfIAoj IDI2ICIuLi8uLi9zcmMvc2RibS52MC9zZGJtcGxuLmgiCgoKZXh0ZXJuIGlubGluZSBpbnQKU2Ri bU1hcERiUGxhaW4oU2RibURiSGFuZGxlKiBkYkgsIEFkYW1TdWJmaWxlSWQgc3ViZmlsZUlkKQp7 CiAgICBpbnQgZXJyID0gMDsKCiAgICBzd2l0Y2goc3ViZmlsZUlkKSB7CiAgICBjYXNlIDE6IGlm KGRiSC0+ZGJNYWluKSByZXR1cm4gMDsgYnJlYWs7CiAgICBjYXNlIDI6IGlmKGRiSC0+ZW51bVNl dHMpIHJldHVybiAwOyBicmVhazsKICAgIGNhc2UgMzogaWYoZGJILT5lbnVtVW5pdHMpIHJldHVy biAwOyBicmVhazsKICAgIGNhc2UgNDogaWYoZGJILT5kYk1haW5JZHgpIHJldHVybiAwOyBicmVh azsKICAgIH0KCiAgICBlcnIgPSBBZGFtTWFwU3ViZmlsZShkYkgtPnN1YmZpbGVzW3N1YmZpbGVJ ZF0sCiAgICAgICAgICAgICAgICAgICAgICAgICBkYkgtPmNvbW1vbi53cml0YWJsZSA/IDEgOiAw KTsKICAgIGlmKCgoZXJyKSA+PSAwKSkgewogICAgICAgIHZvaWQqIHB0ciA9ICgodm9pZCAqKTAp OwogICAgICAgIGVyciA9IEFkYW1HZXRBZGRyKGRiSC0+c3ViZmlsZXNbc3ViZmlsZUlkXSwgJnB0 cik7CiAgICAgICAgc3dpdGNoKHN1YmZpbGVJZCkgewogICAgICAgIGNhc2UgMTogZGJILT5kYk1h aW4gPSBwdHI7IGJyZWFrOwogICAgICAgIGNhc2UgMjogZGJILT5lbnVtU2V0cyA9IHB0cjsgYnJl YWs7CiAgICAgICAgY2FzZSAzOiBkYkgtPmVudW1Vbml0cyA9IHB0cjsgYnJlYWs7CiAgICAgICAg Y2FzZSA0OiBkYkgtPmRiTWFpbklkeCA9IHB0cjsgYnJlYWs7CiAgICAgICAgfQogICAgfQoKICAg IHJldHVybiBlcnI7Cn0KCmV4dGVybiBpbmxpbmUgaW50ClNkYm1Vbm1hcERiUGxhaW4oU2RibURi SGFuZGxlKiBkYkgsIEFkYW1TdWJmaWxlSWQgc3ViZmlsZUlkKQp7CiAgICBpbnQgZXJyID0gMDsK CiAgICBzd2l0Y2goc3ViZmlsZUlkKSB7CiAgICBjYXNlIDE6IGlmKCEgZGJILT5kYk1haW4pIHJl dHVybiAwOyBicmVhazsKICAgIGNhc2UgMjogaWYoISBkYkgtPmVudW1TZXRzKSByZXR1cm4gMDsg YnJlYWs7CiAgICBjYXNlIDM6IGlmKCEgZGJILT5lbnVtVW5pdHMpIHJldHVybiAwOyBicmVhazsK ICAgIGNhc2UgNDogaWYoISBkYkgtPmRiTWFpbklkeCkgcmV0dXJuIDA7IGJyZWFrOwogICAgfQoK ICAgIGVyciA9IEFkYW1Vbm1hcFN1YmZpbGUoZGJILT5zdWJmaWxlc1tzdWJmaWxlSWRdKTsKICAg IGlmKCgoZXJyKSA+PSAwKSkgewogICAgICAgIHN3aXRjaChzdWJmaWxlSWQpIHsKICAgICAgICBj YXNlIDE6IGRiSC0+ZGJNYWluID0gKCh2b2lkICopMCk7IGJyZWFrOwogICAgICAgIGNhc2UgMjog ZGJILT5lbnVtU2V0cyA9ICgodm9pZCAqKTApOyBicmVhazsKICAgICAgICBjYXNlIDM6IGRiSC0+ ZW51bVVuaXRzID0gKCh2b2lkICopMCk7IGJyZWFrOwogICAgICAgIGNhc2UgNDogZGJILT5kYk1h aW5JZHggPSAoKHZvaWQgKikwKTsgYnJlYWs7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBl cnI7Cn0KCmV4dGVybiBpbmxpbmUgaW50ClNkYm1SZXNpemVEYlBsYWluKFNkYm1EYkhhbmRsZSog ZGJILCBBZGFtU3ViZmlsZUlkIHN1YmZpbGVJZCwgU3ogbmV3U3opCnsKICAgIGludCBlcnIgPSAw OwoKICAgIGVyciA9IFNkYm1Vbm1hcERiUGxhaW4oZGJILCBzdWJmaWxlSWQpOwogICAgaWYoKChl cnIpID49IDApKSB7CiAgICAgICAgZXJyID0gQWRhbVJlc2l6ZVN1YmZpbGUoZGJILT5zdWJmaWxl c1tzdWJmaWxlSWRdLCBuZXdTeik7CiAgICB9CiAgICByZXR1cm4gZXJyOwp9CgpleHRlcm4gaW5s aW5lIGludApTZGJtU2hpZnREYlBsYWluU2l6ZShTZGJtRGJIYW5kbGUqIGRiSCwgQWRhbVN1YmZp bGVJZCBzdWJmaWxlSWQsIFN6IGRpZmYpCnsKICAgIGludCByZXRWYWwgPSAwOwogICAgQWRhbVN1 YmZpbGVQYXJhbSogcGFyYW07CiAgICBTeiBuZXdTejsKCiAgICBwYXJhbSA9IGRiSC0+cGFyYW1z ICsgc3ViZmlsZUlkOwogICAgcmV0VmFsID0gQWRhbUdldFN1YmZpbGVQYXJhbShkYkgtPnN1YmZp bGVzW3N1YmZpbGVJZF0sIHBhcmFtKTsKICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAg IG5ld1N6ID0gcGFyYW0tPmVhY2gucGxhaW4uc3ViZmlsZVN6OwogICAgICAgIG5ld1N6ICs9IGRp ZmY7CiAgICAgICAgcmV0VmFsID0gU2RibVVubWFwRGJQbGFpbihkYkgsIHN1YmZpbGVJZCk7CiAg ICAgICAgaWYoKChyZXRWYWwpID49IDApKSB7CiAgICAgICAgICAgIHJldFZhbCA9IEFkYW1SZXNp emVTdWJmaWxlKGRiSC0+c3ViZmlsZXNbc3ViZmlsZUlkXSwgbmV3U3opOwogICAgICAgIH0KICAg IH0KICAgIHJldHVybiAocmV0VmFsKTsKfQoKZXh0ZXJuIGlubGluZSBpbnQKU2RibU1hcFRibFBs YWluKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgczMyIHN1YmZpbGVJZHgpCnsKICAgIGludCBlcnIg PSAwOwoKICAgIHN3aXRjaChzdWJmaWxlSWR4KSB7CiAgICBjYXNlIDE6IGlmKHRibEgtPnRhYmxl TWFpbikgcmV0dXJuIDA7IGJyZWFrOwogICAgY2FzZSAyOiBpZih0YmxILT5yZWNzKSByZXR1cm4g MDsgYnJlYWs7CiAgICBjYXNlIDM6IGlmKHRibEgtPmZsZHMpIHJldHVybiAwOyBicmVhazsKICAg IGNhc2UgNTogaWYodGJsSC0+aW5kZXhBcmVhKSByZXR1cm4gMDsgYnJlYWs7CiAgICBjYXNlIDY6 IGlmKHRibEgtPmxpbmtlZEZsZHMpIHJldHVybiAwOyBicmVhazsKICAgIH0KCiAgICBlcnIgPSBB ZGFtTWFwU3ViZmlsZSh0YmxILT5zdWJmaWxlc1tzdWJmaWxlSWR4XSwKICAgICAgICAgICAgICAg ICAgICAgICAgIHRibEgtPmNvbW1vbi53cml0YWJsZSA/IDEgOiAwKTsKICAgIGlmKCgoZXJyKSA+ PSAwKSkgewogICAgICAgIHZvaWQqIHB0ciA9ICgodm9pZCAqKTApOwogICAgICAgIGVyciA9IEFk YW1HZXRBZGRyKHRibEgtPnN1YmZpbGVzW3N1YmZpbGVJZHhdLCAmcHRyKTsKICAgICAgICBzd2l0 Y2goc3ViZmlsZUlkeCkgewogICAgICAgIGNhc2UgMTogdGJsSC0+dGFibGVNYWluID0gcHRyOyBi cmVhazsKICAgICAgICBjYXNlIDI6IHRibEgtPnJlY3MgPSBwdHI7IGJyZWFrOwogICAgICAgIGNh c2UgMzogdGJsSC0+ZmxkcyA9IHB0cjsgYnJlYWs7CiAgICAgICAgY2FzZSA1OiB0YmxILT5pbmRl eEFyZWEgPSBwdHI7IGJyZWFrOwogICAgICAgIGNhc2UgNjogdGJsSC0+bGlua2VkRmxkcyA9IHB0 cjsgYnJlYWs7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBlcnI7Cn0KCmV4dGVybiBpbmxp bmUgaW50ClNkYm1Vbm1hcFRibFBsYWluKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgQWRhbVN1YmZp bGVJZCBzdWJmaWxlSWR4KQp7CiAgICBpbnQgZXJyID0gMDsKCiAgICBzd2l0Y2goc3ViZmlsZUlk eCkgewogICAgY2FzZSAxOiBpZighIHRibEgtPnRhYmxlTWFpbikgcmV0dXJuIDA7IGJyZWFrOwog ICAgY2FzZSAyOiBpZighIHRibEgtPnJlY3MpIHJldHVybiAwOyBicmVhazsKICAgIGNhc2UgMzog aWYoISB0YmxILT5mbGRzKSByZXR1cm4gMDsgYnJlYWs7CiAgICBjYXNlIDU6IGlmKCEgdGJsSC0+ aW5kZXhBcmVhKSByZXR1cm4gMDsgYnJlYWs7CiAgICBjYXNlIDY6IGlmKCEgdGJsSC0+bGlua2Vk RmxkcykgcmV0dXJuIDA7IGJyZWFrOwogICAgfQoKICAgIGVyciA9IEFkYW1Vbm1hcFN1YmZpbGUo dGJsSC0+c3ViZmlsZXNbc3ViZmlsZUlkeF0pOwogICAgaWYoKChlcnIpID49IDApKSB7CiAgICAg ICAgc3dpdGNoKHN1YmZpbGVJZHgpIHsKICAgICAgICBjYXNlIDE6IHRibEgtPnRhYmxlTWFpbiA9 ICgodm9pZCAqKTApOyBicmVhazsKICAgICAgICBjYXNlIDI6IHRibEgtPnJlY3MgPSAoKHZvaWQg KikwKTsgYnJlYWs7CiAgICAgICAgY2FzZSAzOiB0YmxILT5mbGRzID0gKCh2b2lkICopMCk7IGJy ZWFrOwogICAgICAgIGNhc2UgNTogdGJsSC0+aW5kZXhBcmVhID0gKCh2b2lkICopMCk7IGJyZWFr OwogICAgICAgIGNhc2UgNjogdGJsSC0+bGlua2VkRmxkcyA9ICgodm9pZCAqKTApOyBicmVhazsK ICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIGVycjsKfQoKZXh0ZXJuIGlubGluZSBpbnQKU2Ri bVJlc2l6ZVRibFBsYWluKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgczMyIHN1YmZpbGVJZHgsIFN6 IG5ld1N6KQp7CiAgICBpbnQgZXJyID0gMDsKCiAgICBlcnIgPSBTZGJtVW5tYXBUYmxQbGFpbih0 YmxILCBzdWJmaWxlSWR4KTsKICAgIGlmKCgoZXJyKSA+PSAwKSkgewogICAgICAgIGVyciA9IEFk YW1SZXNpemVTdWJmaWxlKHRibEgtPnN1YmZpbGVzW3N1YmZpbGVJZHhdLCBuZXdTeik7CiAgICB9 CiAgICByZXR1cm4gZXJyOwp9CgpleHRlcm4gaW5saW5lIGludApTZGJtU2hpZnRUYmxQbGFpblNp emUoU2RibVRhYmxlSGFuZGxlKiB0YmxILCBzMzIgc3ViZmlsZUlkeCwgU3ogZGlmZikKewogICAg aW50IHJldFZhbCA9IDA7CiAgICBBZGFtU3ViZmlsZVBhcmFtKiBwYXJhbTsKICAgIFN6IG5ld1N6 OwoKICAgIHBhcmFtID0gdGJsSC0+cGFyYW1zICsgc3ViZmlsZUlkeDsKICAgIHJldFZhbCA9IEFk YW1HZXRTdWJmaWxlUGFyYW0odGJsSC0+c3ViZmlsZXNbc3ViZmlsZUlkeF0sIHBhcmFtKTsKICAg IGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgIG5ld1N6ID0gcGFyYW0tPmVhY2gucGxhaW4u c3ViZmlsZVN6OwogICAgICAgIG5ld1N6ICs9IGRpZmY7CiAgICAgICAgcmV0VmFsID0gU2RibVVu bWFwVGJsUGxhaW4odGJsSCwgc3ViZmlsZUlkeCk7CiAgICAgICAgaWYoKChyZXRWYWwpID49IDAp KSB7CiAgICAgICAgICAgIHJldFZhbCA9IEFkYW1SZXNpemVTdWJmaWxlKHRibEgtPnN1YmZpbGVz W3N1YmZpbGVJZHhdLCBuZXdTeik7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIChyZXRWYWwp Owp9CgoKIyAzNiAiLi4vLi4vc3JjL3NkYm0udjAvc2RibWZsZHUuYyIgMgojIDEgIi4uLy4uL3Ny Yy9zZGJtLnYwL3NkYm1oZGx1LmgiIDEKIyAxNCAiLi4vLi4vc3JjL3NkYm0udjAvc2RibWhkbHUu aCIKI2RlZmluZSBfQVhJU19TREJNSERMVV9IXyAKIyAyOCAiLi4vLi4vc3JjL3NkYm0udjAvc2Ri bWhkbHUuaCIKCgpleHRlcm4gaW50IFNkYm1BbGxvY0hhbmRsZShTZGJtSGFuZGxlKiogaFAsIEJv b2wgbmVlZERlc2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZGJtRGJIYW5kbGUqIGRi SCwgU2RibVRhYmxlSGFuZGxlKiBsaW5rVGJsSCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IENociogZGJOYW1lLCBTZGJtVGFibGVObyB0YmxObyk7CmV4dGVybiBpbnQgU2RibVJl bGVhc2VIYW5kbGUoU2RibUhhbmRsZSogaCwgQm9vbCB1bmxvY2spOwpleHRlcm4gaW5saW5lIGlu dApTZGJtUmVsZWFzZURiSGFuZGxlKFNkYm1EYkhhbmRsZSogZGJILCBCb29sIHVubG9jaykKewog ICAgcmV0dXJuIFNkYm1SZWxlYXNlSGFuZGxlKChTZGJtSGFuZGxlKilkYkgsIHVubG9jayk7Cn0K ZXh0ZXJuIGlubGluZSBpbnQKU2RibVJlbGVhc2VUYWJsZUhhbmRsZShTZGJtVGFibGVIYW5kbGUq IHRibEgsIEJvb2wgdW5sb2NrKQp7CiAgICByZXR1cm4gU2RibVJlbGVhc2VIYW5kbGUoKFNkYm1I YW5kbGUqKXRibEgsIHVubG9jayk7Cn0KCmV4dGVybiBpbmxpbmUgaW50ClNkYm1HZXRUYWJsZU5h bWUoU2RibVRhYmxlSGFuZGxlKiB0YmxILCB2b2lkKiogbmFtZVB0cikKewogICAgaW50IHJldFZh bDsKICAgIHJldFZhbCA9IFNkYm1NYXBUYmxQbGFpbih0YmxILCAxKTsKICAgIGlmKCgocmV0VmFs KSA+PSAwKSkgewogICAgICAgIHJldFZhbCA9IFNkYm1NYXBWYXJEYXRhKCYodGJsSC0+ZGJILT5j b21tb24pKTsKICAgICAgICBpZigoKHJldFZhbCkgPj0gMCkpIHsKICAgICAgICAgICAgdm9pZCog cCA9IFNkYm1HZXRBZGRyT2ZWYXJEYXRhKCYodGJsSC0+ZGJILT5jb21tb24pLCB0YmxILT50YWJs ZU1haW4tPnRhYmxlTmFtZSk7CiAgICAgICAgICAgIGlmKG5hbWVQdHIpCiAgICAgICAgICAgICAg ICAqbmFtZVB0ciA9IHA7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHJldFZhbDsKfQoKZXh0 ZXJuIGludCBTZGJtR2V0SGFuZGxlKFNkYm1EZXNjIGRlc2MsIFNkYm1IYW5kbGUqKiBoUCwgQm9v bCBmb3JDbG9zZSk7CgpleHRlcm4gaW50IFNkYm1HZXRXb3JrKFNkYm1EYkhhbmRsZSogZGJILCBT eiBhbGxvY1N6LCB2b2lkKiogcHApOwoKZXh0ZXJuIGludCBTZGJtT3BlbkRiRmlsZShTZGJtRGJI YW5kbGUqIGRiSCwgY29uc3QgQ2hyKiBkYlBhdGhOYW1lKTsKZXh0ZXJuIGludCBTZGJtQ3JlYXRl RGJGaWxlKFNkYm1EYkhhbmRsZSogZGJILCBjb25zdCBDaHIqIGRiUGF0aE5hbWUpOwoKZXh0ZXJu IGludCBTZGJtT3BlblRhYmxlSW50ZXJuYWwoU2RibVRhYmxlSGFuZGxlKiB0YmxIKTsKZXh0ZXJu IGludCBTZGJtQ3JlYXRlVGFibGUoU2RibVRhYmxlSGFuZGxlKiB0YmxILCBTZGJtVGFibGVObyB0 YmxObywgY29uc3QgQ2hyKiB0YmxOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVt IG51bUZsZHMsIFNkYm1GbGREZWYqIGZsZHMpOwpleHRlcm4gU2RibVRhYmxlTm8gU2RibVNlYXJj aFRhYmxlQnlOYW1lKFNkYm1EYkhhbmRsZSogZGJILCBjb25zdCBDaHIqIG5hbWUpOwpleHRlcm4g aW50IFNkYm1EdW1wVGFibGVOYW1lTm9kZShTZGJtRGJIYW5kbGUqIGRiSCwgQXRyZWVJZHggbmFt ZU5vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHJlZUlkeCBwbnRyc1s1 XSwgQXJlYTY0KiBkYXRhUCk7CmV4dGVybiBpbnQgU2RibU9wZW5UcmVlRm9yVGFibGVOYW1lKFNk Ym1EYkhhbmRsZSogZGJILCBBdHJlZVJlcSogcmVxKTsKCmV4dGVybiBpbnQgU2RibU9wZW5UYWJs ZUJ5QW5vdGhlclRhYmxlKFNkYm1UYWJsZUhhbmRsZSogb3BlbmVkVGJsSCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNkYm1UYWJsZU5vIHRibE5vLCBTZGJtVGFibGVI YW5kbGUqKiBuZXdUYmxIUCk7CmV4dGVybiBpbnQgU2RibUxvY2tEYkgoU2RibURiSGFuZGxlKiBk YkgpOwpleHRlcm4gaW50IFNkYm1VbmxvY2tEYkgoU2RibURiSGFuZGxlKiBkYkgpOwoKZXh0ZXJu IGlubGluZSBpbnQKU2RibUxvY2tEYkJ5VGFibGUoU2RibVRhYmxlSGFuZGxlKiB0YmxIKQp7CiAg ICByZXR1cm4gU2RibUxvY2tEYkgodGJsSC0+ZGJIKTsKfQoKZXh0ZXJuIGlubGluZSBpbnQKU2Ri bVVubG9ja0RiQnlUYWJsZShTZGJtVGFibGVIYW5kbGUqIHRibEgpCnsKICAgIHJldHVybiBTZGJt VW5sb2NrRGJIKHRibEgtPmRiSCk7Cn0KCgojZGVmaW5lIGNTZGJtRHVtcEludGVybmFsVmVyYm9z ZU1vZGUgMHgxMDAwMDAwMAojZGVmaW5lIGNTZGJtRHVtcEludGVybmFsVGVzdE1vZGUgMHgwODAw MDAwMAojZGVmaW5lIGNTZGJtRHVtcE5vUmVjSURNb2RlIDB4MDAwMDAwMDEKCgojIDM3ICIuLi8u Li9zcmMvc2RibS52MC9zZGJtZmxkdS5jIiAyCiMgMSAiLi4vLi4vc3JjL3NkYm0udjAvc2RibWVu dW0uaCIgMQojIDE0ICIuLi8uLi9zcmMvc2RibS52MC9zZGJtZW51bS5oIgojZGVmaW5lIF9BWElT X1NEQk1FTlVNX0hfIAojIDI4ICIuLi8uLi9zcmMvc2RibS52MC9zZGJtZW51bS5oIgoKCgpleHRl cm4gaW5saW5lIHMzMgpTZGJtRW51bUlkVG9FbnVtSWR4KFNkYm1EYkhhbmRsZSogZGJILCBzMzIg ZW51bUlkKQp7CiAgICBpZigoMCA8IGVudW1JZCkgJiYgKGVudW1JZCA8PSBkYkgtPmVudW1TZXRB dHRyLT5udW1FbnVtU2V0KSkgewogICAgICAgIHJldHVybiBlbnVtSWQgLSAxOwogICAgfSBlbHNl IHsKICAgICAgICBMb2dQdXQoNCwgIiVzOiUkIiwgX19GVU5DVElPTl9fLCAiSWxsZWdhbCBFbnVt U2V0IElEWyVkOjB4JXhdIiwgZW51bUlkLCBlbnVtSWQpOwogICAgICAgIHJldHVybiAoLSg0MTAw KSk7CiAgICB9Cn0KCmV4dGVybiBpbmxpbmUgU2RibUVudW1TZXRFbnQqClNkYm1FbnVtSWRUb0Vu dW1TZXRFbnQoU2RibURiSGFuZGxlKiBkYkgsIHMzMiBlbnVtSWQpCnsKICAgIHMzMiBpID0gU2Ri bUVudW1JZFRvRW51bUlkeChkYkgsIGVudW1JZCk7CgogICAgaWYoKChpKSA+PSAwKSkgewogICAg ICAgIHJldHVybiBkYkgtPmVudW1TZXRzICsgaTsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJu ICgodm9pZCAqKTApOwogICAgfQp9CgpleHRlcm4gaW5saW5lIFNkYm1FbnVtU2V0RW50KgpTZGJt U2VhcmNoRW51bUJ5TmFtZShTZGJtRGJIYW5kbGUqIGRiSCwgY29uc3QgQ2hyKiBuYW1lVGd0KQp7 CiAgICBpbnQgaSwgZXJyPTA7CiAgICBpbnQgbnVtRW51bSA9IGRiSC0+ZW51bVNldEF0dHItPm51 bUVudW1TZXQ7CgogICAgaWYoKChlcnIgPSBTZGJtTWFwVmFyRGF0YSgmKGRiSC0+Y29tbW9uKSkp ID49IDApKSB7CiAgICAgICAgZm9yKGkgPSAwOyBpIDwgbnVtRW51bSA7IGkrKykgewogICAgICAg ICAgICBBZGFtUG9zIHggPSBkYkgtPmVudW1TZXRzW2ldLmVudW1TZXROYW1lOwogICAgICAgICAg ICBpZih4ICE9IDApIHsKICAgICAgICAgICAgICAgIGNvbnN0IENociogbmFtZSA9IFNkYm1HZXRB ZGRyT2ZWYXJEYXRhKCYoZGJILT5jb21tb24pLCB4KTsKICAgICAgICAgICAgICAgIGlmKG5hbWUp IHsKICAgICAgICAgICAgICAgICAgICBpZihTZGJtU3RyY21wKG5hbWUsIG5hbWVUZ3QpID09IDAp IHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICYoZGJILT5lbnVtU2V0c1tpXSk7CiAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg ICAgfQogICAgfQogICAgcmV0dXJuICgodm9pZCAqKTApOwp9CgpleHRlcm4gaW50IFNkYm1DcmVh dGVFbnVtU2V0SW50ZXJuYWwoU2RibURiSGFuZGxlKiBkYkgsIFNkYm1FbnVtU2V0SWQgaWQsIGNv bnN0IENociogZW51bVNldE5hbWUpOwoKZXh0ZXJuIGlubGluZSBTZGJtRW51bVVuaXQqClNkYm1F bnVtVW5pdElkVG9FbnVtVW5pdChTZGJtRGJIYW5kbGUqIGRiSCwgU2RibUVudW1Vbml0SWQgdW5p dElkKQp7CiAgICBTZGJtRW51bVVuaXQqIGV1ID0gKCh2b2lkICopMCk7CiAgICBpbnQgcmV0VmFs OwoKICAgIGlmKHVuaXRJZCA+IDApIHsKICAgICAgICByZXRWYWwgPSBTZGJtTWFwRGJQbGFpbihk YkgsIDMpOwogICAgICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgICAgICBldSA9IGRi SC0+ZW51bVVuaXRzICsgKHVuaXRJZCAtIDEpOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBl dTsKfQoKZXh0ZXJuIGludCBTZGJtR2V0RW51bVVuaXROYW1lKFNkYm1EYkhhbmRsZSogZGJILCBT ZGJtRW51bVNldElkIGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNkYm1FbnVt VW5pdElkIGVudW1Vbml0SWQsIENocioqIGVudW1Vbml0TmFtZVApOwpleHRlcm4gaW50IFNkYm1H ZXRFbnVtVW5pdFZhbChTZGJtRGJIYW5kbGUqIGRiSCwgU2RibUVudW1TZXRJZCBpZCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFNkYm1FbnVtVW5pdElkIGVudW1Vbml0SWQsIEFyZWE2 NCogdmFsUCk7CgojZGVmaW5lIFNkYm1FbnVtVW5pdHNUb3BBZGRyKGRiSCx0Z3QpIFNkYm1FbnVt VW5pdHNPcHJUb3BBZGRyKChkYkgpLT5lbnVtVW5pdHMsIDEsIHRndCkKI2RlZmluZSBTZGJtRW51 bVVuaXRzSW5kZXgoZGJILHRndFApIFNkYm1FbnVtVW5pdHNPcHJJbmRleCgoZGJIKS0+ZW51bVVu aXRzLCAxLCB0Z3RQKQojZGVmaW5lIFNkYm1FbnVtVW5pdHNJbml0KGRiSCx0Z3QpIFNkYm1FbnVt VW5pdHNPcHJJbml0KChkYkgpLT5lbnVtVW5pdHMsIDEsIHRndCkKCmV4dGVybiBpbmxpbmUgczMy ClNkYm1FbnVtVW5pdHNOZXh0RnJvbUZyZWVMaXN0KFNkYm1EYkhhbmRsZSogZGJILCBzMzIgdGd0 SWR4KQp7CiAgICBzMzIgcG50SWR4OwogICAgaWYodGd0SWR4KSB7CiAgICAgICAgcG50SWR4ID0g U2RibUVudW1Vbml0c09wck5leHQoZGJILT5lbnVtVW5pdHMsIDEsIHRndElkeCk7CiAgICB9IGVs c2UgewogICAgICAgIHBudElkeCA9IGRiSC0+ZW51bVVuaXRBdHRyLT5lbnVtRnJlZUxpc3Q7CiAg ICB9CiAgICByZXR1cm4gcG50SWR4Owp9CgpleHRlcm4gaW5saW5lIHMzMgpTZGJtRW51bVVuaXRz UHJldkZyb21GcmVlTGlzdChTZGJtRGJIYW5kbGUqIGRiSCwgczMyIHRndElkeCkKewogICAgczMy IHBudElkeDsKICAgIGlmKHRndElkeCkgewogICAgICAgIHBudElkeCA9IFNkYm1FbnVtVW5pdHNP cHJQcmV2KGRiSC0+ZW51bVVuaXRzLCAxLCB0Z3RJZHgpOwogICAgfSBlbHNlIHsKICAgICAgICBw bnRJZHggPSBkYkgtPmVudW1Vbml0QXR0ci0+ZW51bUZyZWVMaXN0OwogICAgfQogICAgcmV0dXJu IHBudElkeDsKfQoKZXh0ZXJuIGlubGluZSB2b2lkClNkYm1FbnVtVW5pdHNJbnNlcnRUb0ZyZWVM aXN0KFNkYm1EYkhhbmRsZSogZGJILCBzMzIgdGd0SWR4KQp7CiAgICBzMzIgcG50SWR4ID0gZGJI LT5lbnVtVW5pdEF0dHItPmVudW1GcmVlTGlzdDsKICAgIGlmKHBudElkeCkgewogICAgICAgIFNk Ym1FbnVtVW5pdCogZXUgPSBTZGJtRW51bVVuaXRJZFRvRW51bVVuaXQoZGJILCBwbnRJZHgpOwog ICAgICAgIFNkYm1FbnVtVW5pdHNPcHJJbnNlcnQoZXUsIHBudElkeCwgdGd0SWR4KTsKICAgIH0g ZWxzZSB7CiAgICAgICAgZGJILT5lbnVtVW5pdEF0dHItPmVudW1GcmVlTGlzdCA9IHRndElkeDsK ICAgIH0KfQoKZXh0ZXJuIGlubGluZSB2b2lkClNkYm1FbnVtVW5pdHNBcHBlbmRUb0ZyZWVMaXN0 KFNkYm1EYkhhbmRsZSogZGJILCBzMzIgdGd0SWR4KQp7CiAgICBzMzIgcG50SWR4ID0gZGJILT5l bnVtVW5pdEF0dHItPmVudW1GcmVlTGlzdDsKICAgIGlmKHBudElkeCkgewogICAgICAgIFNkYm1F bnVtVW5pdCogZXUgPSBTZGJtRW51bVVuaXRJZFRvRW51bVVuaXQoZGJILCBwbnRJZHgpOwogICAg ICAgIFNkYm1FbnVtVW5pdHNPcHJBcHBlbmQoZXUsIHBudElkeCwgdGd0SWR4KTsKICAgIH0gZWxz ZSB7CiAgICAgICAgZGJILT5lbnVtVW5pdEF0dHItPmVudW1GcmVlTGlzdCA9IHRndElkeDsKICAg IH0KfQoKZXh0ZXJuIGlubGluZSB2b2lkClNkYm1FbnVtVW5pdHNEZWxldGVGcm9tRnJlZUxpc3Qo U2RibURiSGFuZGxlKiBkYkgsIHMzMiB0Z3RJZHgpCnsKICAgIHMzMiBwbnRJZHggPSBkYkgtPmVu dW1Vbml0QXR0ci0+ZW51bUZyZWVMaXN0OwogICAgaWYocG50SWR4KSB7CiAgICAgICAgU2RibUVu dW1Vbml0KiBldSA9IFNkYm1FbnVtVW5pdElkVG9FbnVtVW5pdChkYkgsIHBudElkeCk7CiAgICAg ICAgczMyIGRlbE5leHQ7CiAgICAgICAgZGVsTmV4dCA9IFNkYm1FbnVtVW5pdHNPcHJEZWxldGUo ZXUsIHBudElkeCwgdGd0SWR4KTsKICAgICAgICBpZih0Z3RJZHggPT0gZGVsTmV4dCkKICAgICAg ICAgICAgZGVsTmV4dCA9IDA7CiAgICAgICAgaWYodGd0SWR4ID09IHBudElkeCkKICAgICAgICAg ICAgZGJILT5lbnVtVW5pdEF0dHItPmVudW1GcmVlTGlzdCA9IGRlbE5leHQ7CiAgICB9Cn0KCmV4 dGVybiBpbmxpbmUgczMyClNkYm1FbnVtVW5pdHNOZXh0RnJvbUVudW1TZXQoU2RibURiSGFuZGxl KiBkYkgsIFNkYm1FbnVtU2V0SWQgZW51bVNldCwgczMyIHRndElkeCkKewogICAgczMyIHBudElk eDsKICAgIGlmKHRndElkeCkgewogICAgICAgIHBudElkeCA9IFNkYm1FbnVtVW5pdHNPcHJOZXh0 KGRiSC0+ZW51bVVuaXRzLCAxLCB0Z3RJZHgpOwogICAgfSBlbHNlIHsKICAgICAgICBTZGJtRW51 bVNldEVudCogZXNlID0gU2RibUVudW1JZFRvRW51bVNldEVudChkYkgsIGVudW1TZXQpOwogICAg ICAgIHBudElkeCA9IGVzZS0+ZW51bVVuaXRzOwogICAgfQogICAgcmV0dXJuIHBudElkeDsKfQoK ZXh0ZXJuIGlubGluZSBzMzIKU2RibUVudW1Vbml0c1ByZXZGcm9tRW51bVNldChTZGJtRGJIYW5k bGUqIGRiSCwgU2RibUVudW1TZXRJZCBlbnVtU2V0LCBzMzIgdGd0SWR4KQp7CiAgICBzMzIgcG50 SWR4OwogICAgaWYodGd0SWR4KSB7CiAgICAgICAgcG50SWR4ID0gU2RibUVudW1Vbml0c09wclBy ZXYoZGJILT5lbnVtVW5pdHMsIDEsIHRndElkeCk7CiAgICB9IGVsc2UgewogICAgICAgIFNkYm1F bnVtU2V0RW50KiBlc2UgPSBTZGJtRW51bUlkVG9FbnVtU2V0RW50KGRiSCwgZW51bVNldCk7CiAg ICAgICAgcG50SWR4ID0gZXNlLT5lbnVtVW5pdHM7CiAgICB9CiAgICByZXR1cm4gcG50SWR4Owp9 CgpleHRlcm4gaW5saW5lIHZvaWQKU2RibUVudW1Vbml0c0luc2VydFRvRW51bVNldChTZGJtRGJI YW5kbGUqIGRiSCwgU2RibUVudW1TZXRJZCBlbnVtU2V0LCBzMzIgdGd0SWR4KQp7CiAgICBTZGJt RW51bVNldEVudCogZXNlID0gU2RibUVudW1JZFRvRW51bVNldEVudChkYkgsIGVudW1TZXQpOwog ICAgaWYoZXNlKSB7CiAgICAgICAgczMyIHBudElkeCA9IGVzZS0+ZW51bVVuaXRzOwogICAgICAg IGlmKHBudElkeCkgewogICAgICAgICAgICBTZGJtRW51bVVuaXQqIGV1ID0gU2RibUVudW1Vbml0 SWRUb0VudW1Vbml0KGRiSCwgcG50SWR4KTsKICAgICAgICAgICAgU2RibUVudW1Vbml0c09wcklu c2VydChldSwgcG50SWR4LCB0Z3RJZHgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVz ZS0+ZW51bVVuaXRzID0gdGd0SWR4OwogICAgICAgIH0KICAgIH0KfQoKZXh0ZXJuIGlubGluZSB2 b2lkClNkYm1FbnVtVW5pdHNBcHBlbmRUb0VudW1TZXQoU2RibURiSGFuZGxlKiBkYkgsIFNkYm1F bnVtU2V0SWQgZW51bVNldCwgczMyIHRndElkeCkKewogICAgU2RibUVudW1TZXRFbnQqIGVzZSA9 IFNkYm1FbnVtSWRUb0VudW1TZXRFbnQoZGJILCBlbnVtU2V0KTsKICAgIGlmKGVzZSkgewogICAg ICAgIHMzMiBwbnRJZHggPSBlc2UtPmVudW1Vbml0czsKICAgICAgICBpZihwbnRJZHgpIHsKICAg ICAgICAgICAgU2RibUVudW1Vbml0KiBldSA9IFNkYm1FbnVtVW5pdElkVG9FbnVtVW5pdChkYkgs IHBudElkeCk7CiAgICAgICAgICAgIFNkYm1FbnVtVW5pdHNPcHJBcHBlbmQoZXUsIHBudElkeCwg dGd0SWR4KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBlc2UtPmVudW1Vbml0cyA9IHRn dElkeDsKICAgICAgICB9CiAgICB9Cn0KCmV4dGVybiBpbmxpbmUgdm9pZApTZGJtRW51bVVuaXRz RGVsZXRlRnJvbUVudW1TZXQoU2RibURiSGFuZGxlKiBkYkgsIFNkYm1FbnVtU2V0SWQgZW51bVNl dCwgczMyIHRndElkeCkKewogICAgU2RibUVudW1TZXRFbnQqIGVzZSA9IFNkYm1FbnVtSWRUb0Vu dW1TZXRFbnQoZGJILCBlbnVtU2V0KTsKICAgIGlmKGVzZSkgewogICAgICAgIHMzMiBwbnRJZHgg PSBlc2UtPmVudW1Vbml0czsKICAgICAgICBpZihwbnRJZHgpIHsKICAgICAgICAgICAgU2RibUVu dW1Vbml0KiBldSA9IFNkYm1FbnVtVW5pdElkVG9FbnVtVW5pdChkYkgsIHBudElkeCk7CiAgICAg ICAgICAgIHMzMiBkZWxOZXh0OwogICAgICAgICAgICBwbnRJZHggPSBTZGJtRW51bVVuaXRzT3By RGVsZXRlKGV1LCBwbnRJZHgsIHRndElkeCk7CiAgICAgICAgICAgIGlmKHRndElkeCA9PSBkZWxO ZXh0KQogICAgICAgICAgICAgICAgZGVsTmV4dCA9IDA7CiAgICAgICAgICAgIGlmKHRndElkeCA9 PSBwbnRJZHgpCiAgICAgICAgICAgICAgICBlc2UtPmVudW1Vbml0cyA9IGRlbE5leHQ7CiAgICAg ICAgfQogICAgfQp9CgpleHRlcm4gU2RibUVudW1Vbml0SWQgU2RibVNlYXJjaEVudW1Vbml0QnlO YW1lKFNkYm1EYkhhbmRsZSogZGJILCBTZGJtRW51bVNldElkIGlkLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2hyKiBuYW1lKTsKZXh0ZXJu IFNkYm1FbnVtVW5pdElkIFNkYm1TZWFyY2hFbnVtVW5pdEJ5VmFsKFNkYm1EYkhhbmRsZSogZGJI LCBTZGJtRW51bVNldElkIGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBcmVhNjQgdmFsKTsKCmV4dGVybiBpbnQgU2RibUFkZEVudW1Vbml0SW50ZXJu YWwoU2RibURiSGFuZGxlKiBkYkgsIFNkYm1FbnVtU2V0SWQgaWQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgQ2hyKiBlbnVtVW5pdE5hbWUsIEFyZWE2NCBlbnVtVW5p dFZhbCk7CmV4dGVybiBpbnQgU2RibU9wZW5UcmVlRm9yRW51bVVuaXRWYWwoU2RibURiSGFuZGxl KiBkYkgsIFNkYm1FbnVtU2V0RW50KiBlc2UsIEF0cmVlUmVxKiByZXEpOwpleHRlcm4gaW50IFNk Ym1PcGVuVHJlZUZvckVudW1Vbml0TmFtZShTZGJtRGJIYW5kbGUqIGRiSCwgU2RibUVudW1TZXRF bnQqIGVzZSwgQXRyZWVSZXEqIHJlcSk7CgoKZXh0ZXJuIGludCBTZGJtRW51bVVuaXREdW1wQXRy ZWVOb2RlKFNkYm1EYkhhbmRsZSogZGJILCBTZGJtRW51bVNldEVudCogZXNlLCBTZGJtRW51bVVu aXQqIGV1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0cmVlSWR4IHBu dHJzVmFsWzVdLCBBcmVhNjQqIGRhdGFWYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQXRyZWVJZHggcG50cnNOYW1lWzVdLCBBcmVhNjQqIGRhdGFOYW1lKTsKCgojIDM4 ICIuLi8uLi9zcmMvc2RibS52MC9zZGJtZmxkdS5jIiAyCiMgMSAiLi4vLi4vc3JjL3NkYm0udjAv c2RibWZsZHUuaCIgMQojIDE0ICIuLi8uLi9zcmMvc2RibS52MC9zZGJtZmxkdS5oIgojZGVmaW5l IF9BWElTX1NEQk1GTERVX0hfIAojIDI4ICIuLi8uLi9zcmMvc2RibS52MC9zZGJtZmxkdS5oIgoK CmV4dGVybiBpbmxpbmUgczMyClNkYm1GbGROb1RvRmxkSWR4KFNkYm1UYWJsZUhhbmRsZSogdGJs SCwgU2RibUZsZE5vIGZsZE5vKQp7CiAgICBpZigoMCA8IGZsZE5vKSAmJiAoZmxkTm8gPD0gdGJs SC0+dGFibGVNYWluLT5udW1GbGRzKSkgewogICAgICAgIHJldHVybiBmbGRObyAtIDE7CiAgICB9 IGVsc2UgewogICAgICAgIExvZ1B1dCg0LCAiJXM6JSQiLCBfX0ZVTkNUSU9OX18sICJJbGxlZ2Fs IEZpZWxkIE5vIFslZDoweCV4XSB0YWJsZVslZF0iLAogICAgICAgICAgICAgICBmbGRObywgZmxk Tm8sIHRibEgtPnRibE5vKTsKICAgICAgICByZXR1cm4gKC0oNDEwMikpOwogICAgfQp9CgpleHRl cm4gaW5saW5lIGludApTZGJtR2V0RmxkU3BlYyhTZGJtVGFibGVIYW5kbGUqIHRibEgsIFNkYm1G bGRObyBmbGRObywgU2RibUZsZFNwZWMqKiBmbGRTcGVjUCkKewogICAgaW50IHJldFZhbDsKICAg IHMzMiBpZHggPSBTZGJtRmxkTm9Ub0ZsZElkeCh0YmxILCBmbGRObyk7CiAgICBTZGJtRmxkU3Bl YyogZmxkU3BlYzsKICAgIGlmKGlkeCA+PSAwKSB7CiAgICAgICAgZmxkU3BlYyA9IHRibEgtPnRh YmxlTWFpbi0+ZmxkU3BlY3MgKyBpZHg7CiAgICAgICAgcmV0VmFsID0gMDsKICAgIH0gZWxzZSB7 CiAgICAgICAgZmxkU3BlYyA9ICgodm9pZCAqKTApOwogICAgICAgIExvZ1B1dCg0LCAiJXM6JSQi LCBfX0ZVTkNUSU9OX18sICJJbGxlZ2FsIEZpZWxkIE5vIFslZDoweCV4XSIsIGlkeCwgaWR4KTsK ICAgICAgICByZXRWYWwgPSAoLSg0MTU3KSk7CiAgICB9CiAgICAqZmxkU3BlY1AgPSBmbGRTcGVj OwogICAgcmV0dXJuIHJldFZhbDsKfQoKZXh0ZXJuIGludCBTZGJtR2V0RmxkU3BlY0J5TmFtZShT ZGJtVGFibGVIYW5kbGUqIHRibEgsIGNvbnN0IENociogbmFtZSwgU2RibUZsZFNwZWMqKiBmbGRT cGVjUCk7CmV4dGVybiBpbnQgU2RibVNldEZsZERlZihTZGJtVGFibGVIYW5kbGUqIHRibEgsIFNk Ym1GbGREZWYqIGZsZERlZik7CmV4dGVybiBpbnQgU2RibUR1bXBGbGROYW1lTm9kZShTZGJtVGFi bGVIYW5kbGUqIHRibEgsIEF0cmVlSWR4IG5hbWVOb2RlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEF0cmVlSWR4IHBudHJzWzVdLCBBcmVhNjQqIGRhdGFQKTsKCmV4dGVybiBpbmxp bmUgaW50ClNkYm1HZXRGbGROYW1lKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgU2RibUZsZE5vIGZs ZE5vLCB2b2lkKiogZmxkTmFtZVApCnsKICAgIGludCByZXRWYWw7CiAgICBTZGJtRmxkU3BlYyog ZmxkU3BlYzsKCiAgICByZXRWYWwgPSBTZGJtR2V0RmxkU3BlYyh0YmxILCBmbGRObywgJmZsZFNw ZWMpOwogICAgaWYoKChyZXRWYWwpID49IDApKSB7CiAgICAgICAgcmV0VmFsID0gU2RibU1hcFZh ckRhdGEoJih0YmxILT5jb21tb24pKTsKICAgICAgICBpZigoKHJldFZhbCkgPj0gMCkpIHsKICAg ICAgICAgICAgdm9pZCogcCA9IFNkYm1HZXRBZGRyT2ZWYXJEYXRhKCYodGJsSC0+Y29tbW9uKSwg ZmxkU3BlYy0+ZmxkTmFtZVB0cik7CiAgICAgICAgICAgIGlmKGZsZE5hbWVQKQogICAgICAgICAg ICAgICAgKmZsZE5hbWVQID0gcDsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gcmV0VmFsOwp9 CgpleHRlcm4gaW5saW5lIGludApTZGJtR2V0RmxkQm9keShTZGJtVGFibGVIYW5kbGUqIHRibEgs IFNkYm1GbGREYXRhSWR4IGRhdGFJZHgsIFNkYm1GbGRCb2R5KiogZmxkUCkKewogICAgaW50IHJl dFZhbCA9IDA7CgogICAgaWYoKDEgPD0gZGF0YUlkeCkgJiYgKGRhdGFJZHggPD0gdGJsSC0+Zmxk c0NvbnRuckF0dHItPm51bUZsZHMpKSB7CiAgICAgICAgcmV0VmFsID0gU2RibU1hcFRibFBsYWlu KHRibEgsIDMpOwogICAgICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgICAgICBTZGJt RmxkQm9keSogZmxkID0gdGJsSC0+ZmxkcyArICgoZGF0YUlkeCktMSk7CiAgICAgICAgICAgICpm bGRQID0gZmxkOwogICAgICAgIH0KICAgIH0gZWxzZSB7CgoKCgogICAgICAgIHJldFZhbCA9ICgt KDQxNTIpKTsKICAgIH0KICAgIHJldHVybiByZXRWYWw7Cn0KCmV4dGVybiBpbmxpbmUgaW50ClNk Ym1HZXRGbGRDb250ZW50KFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgU2RibUZsZERhdGFJZHggZGF0 YUlkeCwgU2RibUZsZEVudHkqIGNvbnRlbnRQKQp7CiAgICBpbnQgcmV0VmFsID0gMDsKICAgIFNk Ym1GbGRCb2R5KiBmbGQgPSAoKHZvaWQgKikwKTsKCiAgICByZXRWYWwgPSBTZGJtR2V0RmxkQm9k eSh0YmxILCBkYXRhSWR4LCAmZmxkKTsKICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAg ICpjb250ZW50UCA9IGZsZC0+Y29udGVudDsKICAgIH0KICAgIHJldHVybiByZXRWYWw7Cn0KCmV4 dGVybiBpbmxpbmUgaW50ClNkYm1HZXRMaW5rZWRGbGRJbmZvKFNkYm1UYWJsZUhhbmRsZSogdGJs SCwgU2RibUZsZERhdGFJZHggZGF0YUlkeCwgU2RibUxpbmtlZEZsZEluZm8qKiBsZmlQKQp7CiAg ICBpbnQgcmV0VmFsID0gMDsKCiAgICBpZigoMSA8PSBkYXRhSWR4KSAmJiAoZGF0YUlkeCA8PSB0 YmxILT5saW5rZWRGbGRzQXR0ci0+bnVtTGlua2VkKSkgewogICAgICAgIHJldFZhbCA9IFNkYm1N YXBUYmxQbGFpbih0YmxILCA2KTsKICAgICAgICBpZigoKHJldFZhbCkgPj0gMCkpIHsKICAgICAg ICAgICAgU2RibUxpbmtlZEZsZEluZm8qIGxmaSA9IHRibEgtPmxpbmtlZEZsZHMgKyAoKGRhdGFJ ZHgpLTEpOwogICAgICAgICAgICAqbGZpUCA9IGxmaTsKICAgICAgICB9CiAgICB9IGVsc2Ugewog ICAgICAgIExvZ1B1dCg0LCAiJXM6JSQiLCBfX0ZVTkNUSU9OX18sICJJbGxlZ2FsIGRhdGEgaW5k ZXhbJWQ6MHgleF0iLCBkYXRhSWR4LCBkYXRhSWR4KTsKICAgICAgICByZXRWYWwgPSAoLSg0MTUy KSk7CiAgICB9CiAgICByZXR1cm4gcmV0VmFsOwp9CgpleHRlcm4gaW50IFNkYm1GbGRJZHhJbml0 KFNkYm1UYWJsZUhhbmRsZSogdGJsSCk7CmV4dGVybiBpbnQgU2RibUZsZElkeEluaXQyKFNkYm1U YWJsZUhhbmRsZSogdGJsSCk7CgojZGVmaW5lIFNkYm1GbGRzVG9wQWRkcih0YmxILHRndCkgU2Ri bUZsZHNPcHJUb3BBZGRyKCh0YmxIKS0+ZmxkcywgY1NkYm1GbGREYXRhSWR4TWluLCB0Z3QpCiNk ZWZpbmUgU2RibUZsZHNJbmRleCh0YmxILHRndFApIFNkYm1GbGRzT3BySW5kZXgoKHRibEgpLT5m bGRzLCBjU2RibUZsZERhdGFJZHhNaW4sIHRndFApCiNkZWZpbmUgU2RibUZsZHNJbml0KHRibEgs dGd0KSBTZGJtRmxkc09wckluaXQoKHRibEgpLT5mbGRzLCBjU2RibUZsZERhdGFJZHhNaW4sIHRn dCkKCmV4dGVybiBpbmxpbmUgU2RibUZsZERhdGFJZHgKU2RibUZsZHNOZXh0RnJvbUZyZWVMaXN0 KFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgU2RibUZsZERhdGFJZHggdGd0SWR4KQp7CiAgICBTZGJt RmxkRGF0YUlkeCBwbnRJZHg7CiAgICBpZih0Z3RJZHgpIHsKICAgICAgICBwbnRJZHggPSBTZGJt Rmxkc09wck5leHQoKHRibEgpLT5mbGRzLCAxLCB0Z3RJZHgpOwogICAgfSBlbHNlIHsKICAgICAg ICBwbnRJZHggPSB0YmxILT5mbGRzQ29udG5yQXR0ci0+ZnJlZUxpc3Q7CiAgICB9CiAgICByZXR1 cm4gcG50SWR4Owp9CgpleHRlcm4gaW5saW5lIFNkYm1GbGREYXRhSWR4ClNkYm1GbGRzUHJldkZy b21GcmVlTGlzdChTZGJtVGFibGVIYW5kbGUqIHRibEgsIFNkYm1GbGREYXRhSWR4IHRndElkeCkK ewogICAgU2RibUZsZERhdGFJZHggcG50SWR4OwogICAgaWYodGd0SWR4KSB7CiAgICAgICAgcG50 SWR4ID0gU2RibUZsZHNPcHJQcmV2KCh0YmxIKS0+ZmxkcywgMSwgdGd0SWR4KTsKICAgIH0gZWxz ZSB7CiAgICAgICAgcG50SWR4ID0gdGJsSC0+Zmxkc0NvbnRuckF0dHItPmZyZWVMaXN0OwogICAg fQogICAgcmV0dXJuIHBudElkeDsKfQoKZXh0ZXJuIGlubGluZSB2b2lkClNkYm1GbGRzSW5zZXJ0 VG9GcmVlTGlzdChTZGJtVGFibGVIYW5kbGUqIHRibEgsIFNkYm1GbGREYXRhSWR4IHRndElkeCkK ewogICAgU2RibUZsZERhdGFJZHggcG50SWR4ID0gdGJsSC0+Zmxkc0NvbnRuckF0dHItPmZyZWVM aXN0OwogICAgaWYocG50SWR4KSB7CiAgICAgICAgU2RibUZsZEJvZHkqIGZsZCA9ICgodm9pZCAq KTApOwogICAgICAgIFNkYm1HZXRGbGRCb2R5KHRibEgsIHBudElkeCwgJmZsZCk7CiAgICAgICAg U2RibUZsZHNPcHJJbnNlcnQoZmxkLCBwbnRJZHgsIHRndElkeCk7CiAgICB9IGVsc2UgewogICAg ICAgIHRibEgtPmZsZHNDb250bnJBdHRyLT5mcmVlTGlzdCA9IHBudElkeDsKICAgIH0KfQoKZXh0 ZXJuIGlubGluZSB2b2lkClNkYm1GbGRzQXBwZW5kVG9GcmVlTGlzdChTZGJtVGFibGVIYW5kbGUq IHRibEgsIFNkYm1GbGREYXRhSWR4IHRndElkeCkKewogICAgU2RibUZsZERhdGFJZHggcG50SWR4 ID0gdGJsSC0+Zmxkc0NvbnRuckF0dHItPmZyZWVMaXN0OwogICAgaWYocG50SWR4KSB7CiAgICAg ICAgU2RibUZsZEJvZHkqIGZsZCA9ICgodm9pZCAqKTApOwogICAgICAgIFNkYm1HZXRGbGRCb2R5 KHRibEgsIHBudElkeCwgJmZsZCk7CiAgICAgICAgU2RibUZsZHNPcHJBcHBlbmQoZmxkLCBwbnRJ ZHgsIHRndElkeCk7CiAgICB9IGVsc2UgewogICAgICAgIHRibEgtPmZsZHNDb250bnJBdHRyLT5m cmVlTGlzdCA9IHBudElkeDsKICAgIH0KfQoKZXh0ZXJuIGlubGluZSB2b2lkClNkYm1GbGRzRGVs ZXRlRnJvbUZyZWVMaXN0KFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgU2RibUZsZERhdGFJZHggdGd0 SWR4KQp7CiAgICBTZGJtRmxkRGF0YUlkeCBwbnRJZHggPSB0YmxILT5mbGRzQ29udG5yQXR0ci0+ ZnJlZUxpc3Q7CiAgICBpZihwbnRJZHgpIHsKICAgICAgICBTZGJtRmxkQm9keSogZmxkID0gKCh2 b2lkICopMCk7CiAgICAgICAgU2RibUZsZERhdGFJZHggZGVsTmV4dDsKICAgICAgICBTZGJtR2V0 RmxkQm9keSh0YmxILCBwbnRJZHgsICZmbGQpOwogICAgICAgIGRlbE5leHQgPSBTZGJtRmxkc09w ckRlbGV0ZShmbGQsIHBudElkeCwgdGd0SWR4KTsKICAgICAgICBpZih0Z3RJZHggPT0gZGVsTmV4 dCkKICAgICAgICAgICAgZGVsTmV4dCA9IDA7CiAgICAgICAgaWYodGd0SWR4ID09IHBudElkeCkK ICAgICAgICAgICAgdGJsSC0+Zmxkc0NvbnRuckF0dHItPmZyZWVMaXN0ID0gZGVsTmV4dDsKICAg IH0KfQoKZXh0ZXJuIGlubGluZSBTZGJtRmxkRGF0YUlkeApTZGJtRmxkc05leHRGcm9tUmVjKFNk Ym1UYWJsZUhhbmRsZSogdGJsSCwKICAgICAgICAgICAgICAgICAgICBTZGJtUmVjRW50eSogcmVj LCBTZGJtRmxkTm8gZmxkTm8sIFNkYm1GbGREYXRhSWR4IHRndElkeCkKewogICAgU2RibUZsZERh dGFJZHggcG50SWR4OwogICAgaWYodGd0SWR4KSB7CiAgICAgICAgcG50SWR4ID0gU2RibUZsZHNP cHJOZXh0KCh0YmxIKS0+ZmxkcywgMSwgdGd0SWR4KTsKICAgIH0gZWxzZSB7CiAgICAgICAgcG50 SWR4ID0gcmVjLT5mbGRQdHJzW2ZsZE5vLTFdLnZlY0lkeExpc3Q7CiAgICB9CiAgICByZXR1cm4g cG50SWR4Owp9CgpleHRlcm4gaW5saW5lIFNkYm1GbGREYXRhSWR4ClNkYm1GbGRzUHJldkZyb21S ZWMoU2RibVRhYmxlSGFuZGxlKiB0YmxILAogICAgICAgICAgICAgICAgICAgIFNkYm1SZWNFbnR5 KiByZWMsIFNkYm1GbGRObyBmbGRObywgU2RibUZsZERhdGFJZHggdGd0SWR4KQp7CiAgICBTZGJt RmxkRGF0YUlkeCBwbnRJZHg7CiAgICBpZih0Z3RJZHgpIHsKICAgICAgICBwbnRJZHggPSBTZGJt Rmxkc09wclByZXYoKHRibEgpLT5mbGRzLCAxLCB0Z3RJZHgpOwogICAgfSBlbHNlIHsKICAgICAg ICBwbnRJZHggPSByZWMtPmZsZFB0cnNbZmxkTm8tMV0udmVjSWR4TGlzdDsKICAgIH0KICAgIHJl dHVybiBwbnRJZHg7Cn0KCmV4dGVybiBpbmxpbmUgdm9pZApTZGJtRmxkc0luc2VydFRvUmVjKFNk Ym1UYWJsZUhhbmRsZSogdGJsSCwKICAgICAgICAgICAgICAgICAgICBTZGJtUmVjRW50eSogcmVj LCBTZGJtRmxkTm8gZmxkTm8sIFNkYm1GbGREYXRhSWR4IHRndElkeCkKewogICAgU2RibUZsZERh dGFJZHggcG50SWR4ID0gcmVjLT5mbGRQdHJzW2ZsZE5vLTFdLnZlY0lkeExpc3Q7CiAgICBpZihw bnRJZHgpIHsKICAgICAgICBTZGJtRmxkQm9keSogZmxkID0gKCh2b2lkICopMCk7CiAgICAgICAg U2RibUdldEZsZEJvZHkodGJsSCwgcG50SWR4LCAmZmxkKTsKICAgICAgICBTZGJtRmxkc09wcklu c2VydChmbGQsIHBudElkeCwgdGd0SWR4KTsKICAgIH0gZWxzZSB7CiAgICAgICAgcmVjLT5mbGRQ dHJzW2ZsZE5vLTFdLnZlY0lkeExpc3QgPSBwbnRJZHg7CiAgICB9CiAgICByZWMtPmZsZFB0cnNb ZmxkTm8tMV0ubnVtRWxtcyArKzsKfQoKZXh0ZXJuIGlubGluZSB2b2lkClNkYm1GbGRzQXBwZW5k VG9SZWMoU2RibVRhYmxlSGFuZGxlKiB0YmxILAogICAgICAgICAgICAgICAgICAgIFNkYm1SZWNF bnR5KiByZWMsIFNkYm1GbGRObyBmbGRObywgU2RibUZsZERhdGFJZHggdGd0SWR4KQp7CiAgICBT ZGJtRmxkRGF0YUlkeCBwbnRJZHggPSByZWMtPmZsZFB0cnNbZmxkTm8tMV0udmVjSWR4TGlzdDsK ICAgIGlmKHBudElkeCkgewogICAgICAgIFNkYm1GbGRCb2R5KiBmbGQgPSAoKHZvaWQgKikwKTsK ICAgICAgICBTZGJtR2V0RmxkQm9keSh0YmxILCBwbnRJZHgsICZmbGQpOwogICAgICAgIFNkYm1G bGRzT3ByQXBwZW5kKGZsZCwgcG50SWR4LCB0Z3RJZHgpOwogICAgfSBlbHNlIHsKICAgICAgICBy ZWMtPmZsZFB0cnNbZmxkTm8tMV0udmVjSWR4TGlzdCA9IHBudElkeDsKICAgIH0KICAgIHJlYy0+ ZmxkUHRyc1tmbGROby0xXS5udW1FbG1zICsrOwp9CgpleHRlcm4gaW5saW5lIHZvaWQKU2RibUZs ZHNEZWxldGVGcm9tUmVjKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwKICAgICAgICAgICAgICAgICAg ICAgIFNkYm1SZWNFbnR5KiByZWMsIFNkYm1GbGRObyBmbGRObywgU2RibUZsZERhdGFJZHggdGd0 SWR4KQp7CiAgICBTZGJtRmxkRGF0YUlkeCBwbnRJZHggPSByZWMtPmZsZFB0cnNbZmxkTm8tMV0u dmVjSWR4TGlzdDsKICAgIGlmKHBudElkeCkgewogICAgICAgIFNkYm1GbGRCb2R5KiBmbGQgPSAo KHZvaWQgKikwKTsKICAgICAgICBTZGJtRmxkRGF0YUlkeCBkZWxOZXh0OwogICAgICAgIFNkYm1H ZXRGbGRCb2R5KHRibEgsIHBudElkeCwgJmZsZCk7CiAgICAgICAgZGVsTmV4dCA9IFNkYm1GbGRz T3ByRGVsZXRlKGZsZCwgcG50SWR4LCB0Z3RJZHgpOwogICAgICAgIHJlYy0+ZmxkUHRyc1tmbGRO by0xXS5udW1FbG1zIC0tOwogICAgICAgIGlmKHJlYy0+ZmxkUHRyc1tmbGROby0xXS5udW1FbG1z IDwgMCkKICAgICAgICAgICAgcmVjLT5mbGRQdHJzW2ZsZE5vLTFdLm51bUVsbXMgPSAwOwogICAg ICAgIGlmKHRndElkeCA9PSBkZWxOZXh0KQogICAgICAgICAgICBkZWxOZXh0ID0gMDsKICAgICAg ICBpZih0Z3RJZHggPT0gcG50SWR4KQogICAgICAgICAgICByZWMtPmZsZFB0cnNbZmxkTm8tMV0u dmVjSWR4TGlzdCA9IGRlbE5leHQ7CiAgICB9Cn0KCmV4dGVybiBpbmxpbmUgU2RibUZsZERhdGFJ ZHgKU2RibUdldEZsZFdpdGhWZWNJZHgoU2RibVRhYmxlSGFuZGxlKiB0YmxILCBTZGJtUmVjRW50 eSogcmVjLAogICAgICAgICAgICAgICAgICAgICBTZGJtRmxkTm8gZmxkTm8sIFNkYm1WZWNGbGRJ ZHggdmVjSWR4LCBTZGJtRmxkRGF0YUlkeCogaW5zUG50UCkKewogICAgU2RibUZsZERhdGFJZHgg dG9wSWR4ID0gU2RibUZsZHNOZXh0RnJvbVJlYyh0YmxILCByZWMsIGZsZE5vLCAwKTsKICAgIFNk Ym1GbGREYXRhSWR4IGRhdGFJZHggPSB0b3BJZHg7CiAgICBTZGJtRmxkRGF0YUlkeCByZXRJZHgg PSAwOwogICAgU2RibUZsZERhdGFJZHggaW5zUG50ID0gMDsKICAgIGRvIHsKICAgICAgICBTZGJt RmxkQm9keSogZmxkOwogICAgICAgIGludCByZXRDb2RlOwogICAgICAgIHJldENvZGUgPSBTZGJt R2V0RmxkQm9keSh0YmxILCBkYXRhSWR4LCAmZmxkKTsKICAgICAgICBpZigoKHJldENvZGUpID49 IDApKSB7CiAgICAgICAgICAgIDsKICAgICAgICAgICAgaWYoZmxkLT52ZWN0b3JJZHggPT0gdmVj SWR4KSB7CiAgICAgICAgICAgICAgICByZXRJZHggPSBkYXRhSWR4OwogICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoZmxkLT52ZWN0b3JJZHggPiB2ZWNJ ZHgpIHsKCgoKICAgICAgICAgICAgICAgIGluc1BudCA9IGRhdGFJZHg7CgogICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW5zUG50ID0gZGF0YUlkeDsKICAg ICAgICAgICAgZGF0YUlkeCA9IFNkYm1GbGRzTmV4dEZyb21SZWModGJsSCwgcmVjLCBmbGRObywg ZGF0YUlkeCk7CiAgICAgICAgICAgIDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBicmVh azsKICAgICAgICB9CiAgICB9IHdoaWxlKHRvcElkeCAhPSBkYXRhSWR4KTsKICAgICppbnNQbnRQ ID0gaW5zUG50OwogICAgcmV0dXJuIHJldElkeDsKfQoKZXh0ZXJuIGlubGluZSBTZGJtRmxkRGF0 YUlkeApTZGJtR2V0TWF4VmVjSWR4KFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgU2RibVJlY0VudHkq IHJlYywgU2RibUZsZE5vIGZsZE5vLAogICAgICAgICAgICAgICAgIFNkYm1GbGREYXRhSWR4KiBp bnNQbnRQKQp7CiAgICBTZGJtRmxkRGF0YUlkeCBkYXRhSWR4ID0gU2RibUZsZHNQcmV2RnJvbVJl Yyh0YmxILCByZWMsIGZsZE5vLCAwKTsKICAgIFNkYm1WZWNGbGRJZHggdmVjSWR4ID0gMDsKCiAg ICAqaW5zUG50UCA9IDA7CiAgICBpZihkYXRhSWR4KSB7CiAgICAgICAgU2RibUZsZEJvZHkqIGZs ZDsKICAgICAgICBpbnQgcmV0Q29kZTsKICAgICAgICBkYXRhSWR4ID0gU2RibUZsZHNQcmV2RnJv bVJlYyh0YmxILCByZWMsIGZsZE5vLCBkYXRhSWR4KTsKICAgICAgICByZXRDb2RlID0gU2RibUdl dEZsZEJvZHkodGJsSCwgZGF0YUlkeCwgJmZsZCk7CiAgICAgICAgaWYoKChyZXRDb2RlKSA+PSAw KSkgewogICAgICAgICAgICB2ZWNJZHggPSBmbGQtPnZlY3RvcklkeDsKICAgICAgICAgICAgKmlu c1BudFAgPSBkYXRhSWR4OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZlY0lkeCA9IHJl dENvZGU7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHZlY0lkeDsKfQoKZXh0ZXJuIGlubGlu ZSBTZGJtRmxkRGF0YUlkeApTZGJtR2V0TmV3VmVjSWR4KFNkYm1UYWJsZUhhbmRsZSogdGJsSCwg U2RibVJlY0VudHkqIHJlYywgU2RibUZsZE5vIGZsZE5vLAogICAgICAgICAgICAgICAgIFNkYm1G bGREYXRhSWR4KiBpbnNQbnRQKQp7CiAgICBTZGJtRmxkRGF0YUlkeCB0b3AgPSBTZGJtRmxkc05l eHRGcm9tUmVjKHRibEgsIHJlYywgZmxkTm8sIDApOwogICAgU2RibVZlY0ZsZElkeCB2ZWNJZHgg PSAwOwoKICAgICppbnNQbnRQID0gMDsKICAgIGlmKHRvcCkgewogICAgICAgIHZlY0lkeCA9IFNk Ym1HZXRNYXhWZWNJZHgodGJsSCwgcmVjLCBmbGRObywgaW5zUG50UCk7CiAgICAgICAgaWYodmVj SWR4ID49IDE2Nzc3MjE2KSB7CiAgICAgICAgICAgIFNkYm1WZWNGbGRJZHggcHJldklkeCA9IDA7 CiAgICAgICAgICAgIFNkYm1GbGREYXRhSWR4IGRhdGFJZHggPSB0b3A7CiAgICAgICAgICAgIFNk Ym1GbGREYXRhSWR4IHByZXZEYXRhID0gMDsKICAgICAgICAgICAgU2RibUZsZEJvZHkqIGZsZDsK ICAgICAgICAgICAgaW50IHJldENvZGU7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAg IHJldENvZGUgPSBTZGJtR2V0RmxkQm9keSh0YmxILCBkYXRhSWR4LCAmZmxkKTsKICAgICAgICAg ICAgICAgIGlmKCgocmV0Q29kZSkgPj0gMCkpIHsKICAgICAgICAgICAgICAgICAgICA7CgogICAg ICAgICAgICAgICAgICAgIGlmKChwcmV2SWR4KzEpIDwgZmxkLT52ZWN0b3JJZHgpIHsKICAgICAg ICAgICAgICAgICAgICAgICAgdmVjSWR4ID0gcHJldklkeCArIDE7CiAgICAgICAgICAgICAgICAg ICAgICAgICppbnNQbnRQID0gZGF0YUlkeDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHByZXZJZHggPSBmbGQt PnZlY3RvcklkeDsKICAgICAgICAgICAgICAgICAgICBwcmV2RGF0YSA9IGRhdGFJZHg7CiAgICAg ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGRhdGFJZHggPSAwOwogICAg ICAgICAgICAgICAgICAgIHZlY0lkeCA9IHJldENvZGU7CiAgICAgICAgICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkYXRhSWR4ID0gU2RibUZsZHNO ZXh0RnJvbVJlYyh0YmxILCByZWMsIGZsZE5vLCBkYXRhSWR4KTsKICAgICAgICAgICAgfSB3aGls ZSh0b3AgIT0gZGF0YUlkeCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmVjSWR4ICsr OwogICAgICAgIH0KICAgIH0KICAgIGlmKHZlY0lkeCA9PSAwKSB7CiAgICAgICAgdmVjSWR4ID0g MTsKICAgIH0KICAgIHJldHVybiB2ZWNJZHg7Cn0KCiNkZWZpbmUgU2RibUZsZHNTb3J0VG9wQWRk cih0YmxILHRndCkgU2RibUZsZHNTb3J0T3ByVG9wQWRkcigodGJsSCktPmZsZHMsIGNTZGJtRmxk RGF0YUlkeE1pbiwgdGd0KQoKI2RlZmluZSBTZGJtRmxkc1NvcnRJbmRleCh0YmxILHRndFApIFNk Ym1GbGRzU29ydE9wckluZGV4KCh0YmxIKS0+ZmxkcywgY1NkYm1GbGREYXRhSWR4TWluLCB0Z3RQ KQoKI2RlZmluZSBTZGJtRmxkc1NvcnRJbml0KHRibEgsdGd0KSBTZGJtRmxkc1NvcnRPcHJJbml0 KCh0YmxIKS0+ZmxkcywgY1NkYm1GbGREYXRhSWR4TWluLCB0Z3QpCgoKZXh0ZXJuIGlubGluZSBT ZGJtRmxkRGF0YUlkeApTZGJtRmxkc1NvcnROZXh0RnJvbVJlYyhTZGJtVGFibGVIYW5kbGUqIHRi bEgsCiAgICAgICAgICAgICAgICAgICAgICAgIFNkYm1SZWNFbnR5KiByZWMsIFNkYm1GbGRObyBm bGRObywgU2RibUZsZERhdGFJZHggdGd0SWR4KQp7CiAgICBTZGJtRmxkRGF0YUlkeCBwbnRJZHg7 CiAgICBpZih0Z3RJZHgpIHsKICAgICAgICBwbnRJZHggPSBTZGJtRmxkc1NvcnRPcHJOZXh0KCh0 YmxIKS0+ZmxkcywgMSwgdGd0SWR4KTsKICAgIH0gZWxzZSB7CiAgICAgICAgcG50SWR4ID0gcmVj LT5mbGRQdHJzW2ZsZE5vLTFdLnNvcnRlZExpc3Q7CiAgICB9CiAgICByZXR1cm4gcG50SWR4Owp9 CgpleHRlcm4gaW5saW5lIFNkYm1GbGREYXRhSWR4ClNkYm1GbGRzU29ydFByZXZGcm9tUmVjKFNk Ym1UYWJsZUhhbmRsZSogdGJsSCwKICAgICAgICAgICAgICAgICAgICAgICAgU2RibVJlY0VudHkq IHJlYywgU2RibUZsZE5vIGZsZE5vLCBTZGJtRmxkRGF0YUlkeCB0Z3RJZHgpCnsKICAgIFNkYm1G bGREYXRhSWR4IHBudElkeDsKICAgIGlmKHRndElkeCkgewogICAgICAgIHBudElkeCA9IFNkYm1G bGRzU29ydE9wclByZXYoKHRibEgpLT5mbGRzLCAxLCB0Z3RJZHgpOwogICAgfSBlbHNlIHsKICAg ICAgICBwbnRJZHggPSByZWMtPmZsZFB0cnNbZmxkTm8tMV0uc29ydGVkTGlzdDsKICAgIH0KICAg IHJldHVybiBwbnRJZHg7Cn0KCmV4dGVybiBpbmxpbmUgdm9pZApTZGJtRmxkc1NvcnRJbnNlcnRU b1JlYyhTZGJtVGFibGVIYW5kbGUqIHRibEgsCiAgICAgICAgICAgICAgICAgICAgICAgIFNkYm1S ZWNFbnR5KiByZWMsIFNkYm1GbGRObyBmbGRObywgU2RibUZsZERhdGFJZHggdGd0SWR4KQp7CiAg ICBTZGJtRmxkRGF0YUlkeCBwbnRJZHggPSByZWMtPmZsZFB0cnNbZmxkTm8tMV0uc29ydGVkTGlz dDsKICAgIGlmKHBudElkeCkgewogICAgICAgIFNkYm1GbGRCb2R5KiBmbGQgPSAoKHZvaWQgKikw KTsKICAgICAgICBTZGJtR2V0RmxkQm9keSh0YmxILCBwbnRJZHgsICZmbGQpOwogICAgICAgIFNk Ym1GbGRzU29ydE9wckluc2VydChmbGQsIHBudElkeCwgdGd0SWR4KTsKICAgIH0gZWxzZSB7CiAg ICAgICAgcmVjLT5mbGRQdHJzW2ZsZE5vLTFdLnNvcnRlZExpc3QgPSB0Z3RJZHg7CiAgICB9Cn0K CmV4dGVybiBpbmxpbmUgdm9pZApTZGJtRmxkc1NvcnRBcHBlbmRUb1JlYyhTZGJtVGFibGVIYW5k bGUqIHRibEgsCiAgICAgICAgICAgICAgICAgICAgICAgIFNkYm1SZWNFbnR5KiByZWMsIFNkYm1G bGRObyBmbGRObywgU2RibUZsZERhdGFJZHggdGd0SWR4KQp7CiAgICBTZGJtRmxkRGF0YUlkeCBw bnRJZHggPSByZWMtPmZsZFB0cnNbZmxkTm8tMV0uc29ydGVkTGlzdDsKICAgIGlmKHBudElkeCkg ewogICAgICAgIFNkYm1GbGRCb2R5KiBmbGQgPSAoKHZvaWQgKikwKTsKICAgICAgICBTZGJtR2V0 RmxkQm9keSh0YmxILCBwbnRJZHgsICZmbGQpOwogICAgICAgIFNkYm1GbGRzU29ydE9wckFwcGVu ZChmbGQsIHBudElkeCwgdGd0SWR4KTsKICAgIH0gZWxzZSB7CiAgICAgICAgcmVjLT5mbGRQdHJz W2ZsZE5vLTFdLnNvcnRlZExpc3QgPSB0Z3RJZHg7CiAgICB9Cn0KCmV4dGVybiBpbmxpbmUgdm9p ZApTZGJtRmxkc1NvcnREZWxldGVGcm9tUmVjKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwKICAgICAg ICAgICAgICAgICAgICAgIFNkYm1SZWNFbnR5KiByZWMsIFNkYm1GbGRObyBmbGRObywgU2RibUZs ZERhdGFJZHggdGd0SWR4KQp7CiAgICBTZGJtRmxkRGF0YUlkeCBwbnRJZHggPSByZWMtPmZsZFB0 cnNbZmxkTm8tMV0uc29ydGVkTGlzdDsKICAgIGlmKHBudElkeCkgewogICAgICAgIFNkYm1GbGRC b2R5KiBmbGQgPSAoKHZvaWQgKikwKTsKICAgICAgICBTZGJtRmxkRGF0YUlkeCBkZWxOZXh0Owog ICAgICAgIFNkYm1HZXRGbGRCb2R5KHRibEgsIHBudElkeCwgJmZsZCk7CiAgICAgICAgZGVsTmV4 dCA9IFNkYm1GbGRzU29ydE9wckRlbGV0ZShmbGQsIHBudElkeCwgdGd0SWR4KTsKICAgICAgICBp Zih0Z3RJZHggPT0gZGVsTmV4dCkKICAgICAgICAgICAgZGVsTmV4dCA9IDA7CiAgICAgICAgaWYo dGd0SWR4ID09IHBudElkeCkKICAgICAgICAgICAgcmVjLT5mbGRQdHJzW2ZsZE5vLTFdLnNvcnRl ZExpc3QgPSBkZWxOZXh0OwogICAgfQp9CgojZGVmaW5lIFNkYm1MaW5rZWRGbGRzVG9wQWRkcih0 YmxILHRndCkgU2RibUxpbmtlZEZsZHNPcHJUb3BBZGRyKCh0YmxIKS0+bGlua2VkRmxkcywgY1Nk Ym1GbGREYXRhSWR4TWluLCB0Z3QpCgojZGVmaW5lIFNkYm1MaW5rZWRGbGRzSW5kZXgodGJsSCx0 Z3RQKSBTZGJtTGlua2VkRmxkc09wckluZGV4KCh0YmxIKS0+bGlua2VkRmxkcywgY1NkYm1GbGRE YXRhSWR4TWluLCB0Z3RQKQoKI2RlZmluZSBTZGJtTGlua2VkRmxkc0luaXQodGJsSCx0Z3QpIFNk Ym1MaW5rZWRGbGRzT3BySW5pdCgodGJsSCktPmxpbmtlZEZsZHMsIGNTZGJtRmxkRGF0YUlkeE1p biwgdGd0KQoKCmV4dGVybiBpbmxpbmUgU2RibUZsZERhdGFJZHgKU2RibUxpbmtlZEZsZHNOZXh0 RnJvbUZyZWVMaXN0KFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgU2RibUZsZERhdGFJZHggdGd0SWR4 KQp7CiAgICBTZGJtRmxkRGF0YUlkeCBwbnRJZHg7CiAgICBpZih0Z3RJZHgpIHsKICAgICAgICBw bnRJZHggPSBTZGJtTGlua2VkRmxkc09wck5leHQoKHRibEgpLT5saW5rZWRGbGRzLCAxLCB0Z3RJ ZHgpOwogICAgfSBlbHNlIHsKICAgICAgICBwbnRJZHggPSB0YmxILT5saW5rZWRGbGRzQXR0ci0+ ZnJlZUxpc3Q7CiAgICB9CiAgICByZXR1cm4gcG50SWR4Owp9CgpleHRlcm4gaW5saW5lIFNkYm1G bGREYXRhSWR4ClNkYm1MaW5rZWRGbGRzUHJldkZyb21GcmVlTGlzdChTZGJtVGFibGVIYW5kbGUq IHRibEgsIFNkYm1GbGREYXRhSWR4IHRndElkeCkKewogICAgU2RibUZsZERhdGFJZHggcG50SWR4 OwogICAgaWYodGd0SWR4KSB7CiAgICAgICAgcG50SWR4ID0gU2RibUxpbmtlZEZsZHNPcHJQcmV2 KCh0YmxIKS0+bGlua2VkRmxkcywgMSwgdGd0SWR4KTsKICAgIH0gZWxzZSB7CiAgICAgICAgcG50 SWR4ID0gdGJsSC0+bGlua2VkRmxkc0F0dHItPmZyZWVMaXN0OwogICAgfQogICAgcmV0dXJuIHBu dElkeDsKfQoKZXh0ZXJuIGlubGluZSB2b2lkClNkYm1MaW5rZWRGbGRzSW5zZXJ0VG9GcmVlTGlz dChTZGJtVGFibGVIYW5kbGUqIHRibEgsIFNkYm1GbGREYXRhSWR4IHRndElkeCkKewogICAgczMy IHBudElkeCA9IHRibEgtPmxpbmtlZEZsZHNBdHRyLT5mcmVlTGlzdDsKICAgIGlmKHBudElkeCkg ewogICAgICAgIFNkYm1MaW5rZWRGbGRJbmZvKiBsZmkgPSAoKHZvaWQgKikwKTsKICAgICAgICBT ZGJtR2V0TGlua2VkRmxkSW5mbyh0YmxILCBwbnRJZHgsICZsZmkpOwogICAgICAgIFNkYm1MaW5r ZWRGbGRzT3BySW5zZXJ0KGxmaSwgcG50SWR4LCB0Z3RJZHgpOwogICAgfSBlbHNlIHsKICAgICAg ICB0YmxILT5saW5rZWRGbGRzQXR0ci0+ZnJlZUxpc3QgPSB0Z3RJZHg7CiAgICB9Cn0KCmV4dGVy biBpbmxpbmUgdm9pZApTZGJtTGlua2VkRmxkc0FwcGVuZFRvRnJlZUxpc3QoU2RibVRhYmxlSGFu ZGxlKiB0YmxILCBTZGJtRmxkRGF0YUlkeCB0Z3RJZHgpCnsKICAgIHMzMiBwbnRJZHggPSB0YmxI LT5saW5rZWRGbGRzQXR0ci0+ZnJlZUxpc3Q7CiAgICBpZihwbnRJZHgpIHsKICAgICAgICBTZGJt TGlua2VkRmxkSW5mbyogbGZpID0gKCh2b2lkICopMCk7CiAgICAgICAgU2RibUdldExpbmtlZEZs ZEluZm8odGJsSCwgcG50SWR4LCAmbGZpKTsKICAgICAgICBTZGJtTGlua2VkRmxkc09wckFwcGVu ZChsZmksIHBudElkeCwgdGd0SWR4KTsKICAgIH0gZWxzZSB7CiAgICAgICAgdGJsSC0+bGlua2Vk Rmxkc0F0dHItPmZyZWVMaXN0ID0gdGd0SWR4OwogICAgfQp9CgpleHRlcm4gaW5saW5lIHZvaWQK U2RibUxpbmtlZEZsZHNEZWxldGVGcm9tRnJlZUxpc3QoU2RibVRhYmxlSGFuZGxlKiB0YmxILCBT ZGJtRmxkRGF0YUlkeCB0Z3RJZHgpCnsKICAgIHMzMiBwbnRJZHggPSB0YmxILT5saW5rZWRGbGRz QXR0ci0+ZnJlZUxpc3Q7CiAgICBpZihwbnRJZHgpIHsKICAgICAgICBTZGJtTGlua2VkRmxkSW5m byogbGZpID0gKCh2b2lkICopMCk7CiAgICAgICAgU2RibUZsZERhdGFJZHggZGVsTmV4dDsKICAg ICAgICBTZGJtR2V0TGlua2VkRmxkSW5mbyh0YmxILCBwbnRJZHgsICZsZmkpOwogICAgICAgIGRl bE5leHQgPSBTZGJtTGlua2VkRmxkc09wckRlbGV0ZShsZmksIHBudElkeCwgdGd0SWR4KTsKICAg ICAgICBpZih0Z3RJZHggPT0gZGVsTmV4dCkKICAgICAgICAgICAgZGVsTmV4dCA9IDA7CiAgICAg ICAgaWYodGd0SWR4ID09IHBudElkeCkKICAgICAgICAgICAgdGJsSC0+bGlua2VkRmxkc0F0dHIt PmZyZWVMaXN0ID0gZGVsTmV4dDsKICAgIH0KfQpleHRlcm4gaW5saW5lIFNkYm1GbGREYXRhSWR4 ClNkYm1MaW5rZWRGbGRzTmV4dEZyb21SZWMoU2RibVRhYmxlSGFuZGxlKiB0YmxILAogICAgICAg ICAgICAgICAgICAgICAgU2RibVJlY0VudHkqIHJlYywgU2RibUZsZE5vIGZsZE5vLCBTZGJtRmxk RGF0YUlkeCB0Z3RJZHgpCnsKICAgIFNkYm1GbGREYXRhSWR4IHBudElkeDsKICAgIGlmKHRndElk eCkgewogICAgICAgIHBudElkeCA9IFNkYm1MaW5rZWRGbGRzT3ByTmV4dCgodGJsSCktPmxpbmtl ZEZsZHMsIDEsIHRndElkeCk7CiAgICB9IGVsc2UgewogICAgICAgIHBudElkeCA9IHJlYy0+Zmxk UHRyc1tmbGROby0xXS5saW5rZWRJZHg7CiAgICB9CiAgICByZXR1cm4gcG50SWR4Owp9CgpleHRl cm4gaW5saW5lIFNkYm1GbGREYXRhSWR4ClNkYm1MaW5rZWRGbGRzUHJldkZyb21SZWMoU2RibVRh YmxlSGFuZGxlKiB0YmxILAogICAgICAgICAgICAgICAgICAgICAgU2RibVJlY0VudHkqIHJlYywg U2RibUZsZE5vIGZsZE5vLCBTZGJtRmxkRGF0YUlkeCB0Z3RJZHgpCnsKICAgIFNkYm1GbGREYXRh SWR4IHBudElkeDsKICAgIGlmKHRndElkeCkgewogICAgICAgIHBudElkeCA9IFNkYm1MaW5rZWRG bGRzT3ByUHJldigodGJsSCktPmxpbmtlZEZsZHMsIDEsIHRndElkeCk7CiAgICB9IGVsc2Ugewog ICAgICAgIHBudElkeCA9IHJlYy0+ZmxkUHRyc1tmbGROby0xXS5saW5rZWRJZHg7CiAgICB9CiAg ICByZXR1cm4gcG50SWR4Owp9CgpleHRlcm4gaW5saW5lIHZvaWQKU2RibUxpbmtlZEZsZHNJbnNl cnRUb1JlYyhTZGJtVGFibGVIYW5kbGUqIHRibEgsCiAgICAgICAgICAgICAgICAgICAgICBTZGJt UmVjRW50eSogcmVjLCBTZGJtRmxkTm8gZmxkTm8sIFNkYm1GbGREYXRhSWR4IHRndElkeCkKewog ICAgczMyIHBudElkeCA9IHJlYy0+ZmxkUHRyc1tmbGROby0xXS5saW5rZWRJZHg7CiAgICBpZihw bnRJZHgpIHsKICAgICAgICBTZGJtTGlua2VkRmxkSW5mbyogbGZpID0gKCh2b2lkICopMCk7CiAg ICAgICAgU2RibUdldExpbmtlZEZsZEluZm8odGJsSCwgcG50SWR4LCAmbGZpKTsKICAgICAgICBT ZGJtTGlua2VkRmxkc09wckluc2VydChsZmksIHBudElkeCwgdGd0SWR4KTsKICAgIH0gZWxzZSB7 CiAgICAgICAgcmVjLT5mbGRQdHJzW2ZsZE5vLTFdLmxpbmtlZElkeCA9IHRndElkeDsKICAgIH0K fQoKZXh0ZXJuIGlubGluZSB2b2lkClNkYm1MaW5rZWRGbGRzQXBwZW5kVG9SZWMoU2RibVRhYmxl SGFuZGxlKiB0YmxILAogICAgICAgICAgICAgICAgICAgICAgU2RibVJlY0VudHkqIHJlYywgU2Ri bUZsZE5vIGZsZE5vLCBTZGJtRmxkRGF0YUlkeCB0Z3RJZHgpCnsKICAgIHMzMiBwbnRJZHggPSBy ZWMtPmZsZFB0cnNbZmxkTm8tMV0ubGlua2VkSWR4OwogICAgaWYocG50SWR4KSB7CiAgICAgICAg U2RibUxpbmtlZEZsZEluZm8qIGxmaSA9ICgodm9pZCAqKTApOwogICAgICAgIFNkYm1HZXRMaW5r ZWRGbGRJbmZvKHRibEgsIHBudElkeCwgJmxmaSk7CiAgICAgICAgU2RibUxpbmtlZEZsZHNPcHJB cHBlbmQobGZpLCBwbnRJZHgsIHRndElkeCk7CiAgICB9IGVsc2UgewogICAgICAgIHJlYy0+Zmxk UHRyc1tmbGROby0xXS5saW5rZWRJZHggPSB0Z3RJZHg7CiAgICB9Cn0KCmV4dGVybiBpbmxpbmUg dm9pZApTZGJtTGlua2VkRmxkc0RlbGV0ZUZyb21SZWMoU2RibVRhYmxlSGFuZGxlKiB0YmxILAog ICAgICAgICAgICAgICAgICAgICAgU2RibVJlY0VudHkqIHJlYywgU2RibUZsZE5vIGZsZE5vLCBT ZGJtRmxkRGF0YUlkeCB0Z3RJZHgpCnsKICAgIHMzMiBwbnRJZHggPSByZWMtPmZsZFB0cnNbZmxk Tm8tMV0ubGlua2VkSWR4OwogICAgaWYocG50SWR4KSB7CiAgICAgICAgU2RibUxpbmtlZEZsZElu Zm8qIGxmaSA9ICgodm9pZCAqKTApOwogICAgICAgIFNkYm1GbGREYXRhSWR4IGRlbE5leHQ7CiAg ICAgICAgU2RibUdldExpbmtlZEZsZEluZm8odGJsSCwgcG50SWR4LCAmbGZpKTsKICAgICAgICBk ZWxOZXh0ID0gU2RibUxpbmtlZEZsZHNPcHJEZWxldGUobGZpLCBwbnRJZHgsIHRndElkeCk7CiAg ICAgICAgaWYodGd0SWR4ID09IGRlbE5leHQpCiAgICAgICAgICAgIGRlbE5leHQgPSAwOwogICAg ICAgIGlmKHRndElkeCA9PSBwbnRJZHgpCiAgICAgICAgICAgIHJlYy0+ZmxkUHRyc1tmbGROby0x XS5saW5rZWRJZHggPSBkZWxOZXh0OwogICAgfQp9CgpzdHJ1Y3QgU2RibUZsZFR5cGVJbmZvOwp0 eXBlZGVmIGludCAoKlNkYm1TZWFyY2hEYXRhRnVuYykoU2RibVRhYmxlSGFuZGxlKiB0YmxILCBj b25zdCBTZGJtRmxkU3BlYyogZlNwZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBzdHJ1Y3QgU2RibUZsZFR5cGVJbmZvKiB0aSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IFNkYm1RdWVyeUNvbmQqIHF1ZXJ5LCBTZGJtRmxkRGF0YUlkeCog ZGF0YUlkeFAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZGJtRmxkRGF0YUlk eCogc3ViRGF0YUlkeFApOwp0eXBlZGVmIGludCAoKlNkYm1Db21wYXJlRGF0YUludGVybmFsRnVu YykoU2RibVRhYmxlSGFuZGxlKiB0YmxILCBTZGJtRmxkRGF0YUlkeCBkYXRhSWR4MSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNkYm1GbGREYXRhSWR4IGRhdGFJ ZHgyKTsKdHlwZWRlZiBpbnQgKCpTZGJtQ29tcGFyZURhdGFFeHRlcm5hbEZ1bmMpKFNkYm1UYWJs ZUhhbmRsZSogdGJsSCwgY29uc3QgU2RibUZsZFNwZWMqIGZTcGVjLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2RibUZsZFJlZiogdGd0RGF0YSwgU2RibUZsZERh dGFJZHggZGF0YUlkeCk7CnR5cGVkZWYgaW50ICgqU2RibU1ha2VEYXRhRnVuYykoU2RibVRhYmxl SGFuZGxlKiB0YmxILCBTZGJtRmxkUmVmKiB0Z3REYXRhLCBTZGJtRmxkU3BlYyogZlNwZWMsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2RibURhdGFJZCBkYXRhSWQsIFNkYm1GbGRE YXRhSWR4IGRhdGFJZHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2RibUZsZEVu dHkqIGNvbnRlbnRQLCBTZGJtRmxkSWR4RGF0YSogaWR4RGF0YVApOwp0eXBlZGVmIGludCAoKlNk Ym1LaWxsRGF0YUZ1bmMpKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgU2RibUZsZFNwZWMqIGZTcGVj LCBTZGJtRmxkRW50eSogY29udGVudFApOwp0eXBlZGVmIGludCAoKlNkYm1TdG9yZURhdGFGdW5j KShTZGJtVGFibGVIYW5kbGUqIHRibEgsIFNkYm1GbGRTcGVjKiBmU3BlYywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU2RibUZsZEVudHkqIGNvbnRlbnRQLCBTZGJtRmxkUmVmKiBm UmVmLCBCb29sIGluc2lkZUFsbG9jYXRpb24pOwp0eXBlZGVmIGludCAoKlNkYm1JbnF1aXJ5RGF0 YUZ1bmMpKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgY29uc3Qgc3RydWN0IFNkYm1GbGRUeXBlSW5m byogdGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2RibUZsZFNw ZWMqIGZTcGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNkYm1R dWVyeUNvbmQqIHF1ZXJ5LCBTZGJtRmxkRGF0YUlkeCBkYXRhSWR4KTsKdHlwZWRlZiBpbnQgKCpT ZGJtTmV4dERhdGFGdW5jKShTZGJtVGFibGVIYW5kbGUqIHRibEgsIGNvbnN0IHN0cnVjdCBTZGJt RmxkVHlwZUluZm8qIHRpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNk Ym1RdWVyeUNvbmQqIHF1ZXJ5LCBjb25zdCBTZGJtRmxkU3BlYyogZlNwZWMsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU2RibUZsZERhdGFJZHggZnJvbURhdGFJZHgsIFNkYm1GbGRE YXRhSWR4KiBuZXh0RGF0YUlkeFAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Ri bUZsZERhdGFJZHggc3ViRGF0YUlkeCwgU2RibUZsZERhdGFJZHgqIG5leHRTdWJEYXRhSWR4UCk7 Cgp0eXBlZGVmIHN0cnVjdCBTZGJtRmxkVHlwZUluZm8gewogICAgdTMyIGZsZFR5cGU6OCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXRUeXBlOjgsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaXNTdXBwb3J0ZWQ6MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBoYXNBdHJlZUlkeDoxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBh cmVCeVZhbHVlOjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uZVNvcnRlZDox LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlRGF0YToxLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDoxMTsKICAgIHUzMiBjb25kTWFzazsKICAgIGNvbnN0 IEF0cmVlQ2FsbGJhY2tzKiBhdHJlZU9wcnM7CiAgICBTZGJtU2VhcmNoRGF0YUZ1bmMgc2VhcmNo RGF0YTsKICAgIFNkYm1Db21wYXJlRGF0YUludGVybmFsRnVuYyBjb21wYXJlRGF0YUludGVybmFs OwogICAgU2RibUNvbXBhcmVEYXRhRXh0ZXJuYWxGdW5jIGNvbXBhcmVEYXRhRXh0ZXJuYWw7CiAg ICBTZGJtTWFrZURhdGFGdW5jIG1ha2VEYXRhOwogICAgU2RibUtpbGxEYXRhRnVuYyBraWxsRGF0 YTsKICAgIFNkYm1TdG9yZURhdGFGdW5jIHN0b3JlRGF0YTsKICAgIFNkYm1JbnF1aXJ5RGF0YUZ1 bmMgaW5xdWlyeURhdGE7CiAgICBTZGJtTmV4dERhdGFGdW5jIG5leHREYXRhOwogICAgQXJlYSBy c3J2WzddOwp9IFNkYm1GbGRUeXBlSW5mbzsKCmV4dGVybiBjb25zdCBTZGJtRmxkVHlwZUluZm8q IGdTZGJtRmxkVHlwZXNbMjU1ICsxXTsKCiNkZWZpbmUgU2RibUdldFR5cGVJbmZvKGZsZFR5cGUp IChnU2RibUZsZFR5cGVzW2ZsZFR5cGVdKQojZGVmaW5lIFNkYm1GbGRUeXBlQ29ycmVjdChmbGRU eXBlKSAoKGZsZFR5cGUpICYgMHhGRikKCiNkZWZpbmUgY1NkYm1EYXRhTG93IDEKI2RlZmluZSBj U2RibURhdGFFcXVhbCAyCiNkZWZpbmUgY1NkYm1EYXRhSGlnaCAzCgojZGVmaW5lIGNTZGJtSW5x dWlyeUhpdCAxCiNkZWZpbmUgY1NkYm1JbnF1aXJ5Tm9IaXQgMAoKI2RlZmluZSBjU2RibUNvcnJl Y3ROZXh0RGF0YSAxCiNkZWZpbmUgY1NkYm1Ob21vcmVOZXh0RGF0YSAwCgpleHRlcm4gaW50IFNk Ym1TZWFyY2hEYXRhKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgY29uc3QgU2RibVF1ZXJ5Q29uZCog cXVlcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNkYm1GbGREYXRhSWR4KiBkYXRhSWR4 UCwgU2RibURhdGFJZCogZGF0YVAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNkYm1GbGRE YXRhSWR4KiBzdWJEYXRhSWR4UCk7CmV4dGVybiBpbnQgU2RibUlucXVpcnlEYXRhcyhTZGJtVGFi bGVIYW5kbGUqIHRibEgsIGNvbnN0IFNkYm1RdWVyeUNvbmQqIHF1ZXJ5LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFNkYm1EYXRhSWQgZGF0YUlkKTsKZXh0ZXJuIGludCBTZGJtTmV4dFF1 ZXJ5RGF0YShTZGJtVGFibGVIYW5kbGUqIHRibEgsIE51bSBudW1RdWVyaWVzLCBjb25zdCBTZGJt UXVlcnlDb25kKiBxdWVyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2RibURhdGFJ ZCBmcm9tSWQsIFNkYm1GbGREYXRhSWR4IGZyb21EYXRhSWR4LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTZGJtRmxkRGF0YUlkeCBzdWJEYXRhSWR4LCBTZGJtRGF0YUlkKiBuZXh0SWRQ LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZGJtRmxkRGF0YUlkeCogbmV4dERhdGFJ ZHhQLCBTZGJtRmxkRGF0YUlkeCogbmV4dFN1YkRhdGFJZHhQKTsKZXh0ZXJuIGludCBTZGJtQ29t cGFyZURhdGFJbnRlcm5hbChTZGJtVGFibGVIYW5kbGUqIHRibEgsIFNkYm1GbGRObyBmbGRObywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2RibUZsZERhdGFJZHggZGF0YTEs IFNkYm1GbGREYXRhSWR4IGRhdGEyKTsKZXh0ZXJuIGludCBTZGJtS2lsbERhdGEoU2RibVRhYmxl SGFuZGxlKiB0YmxILCBTZGJtRGF0YUlkIGRhdGFJZCwgU2RibVZlY0ZsZElkeCB2ZWNJZHgpOwpl eHRlcm4gaW50IFNkYm1TZXREYXRhKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgU2RibURhdGFJZCBk YXRhSWQsIFNkYm1GbGRSZWYqIHRndERhdGEpOwpleHRlcm4gaW50IFNkYm1HZXREYXRhcyhTZGJt VGFibGVIYW5kbGUqIHRibEgsIFNkYm1EYXRhSWQgZGF0YUlkLAogICAgICAgICAgICAgICAgICAg ICAgICAgTnVtIG51bURhdGFBcmVhcywgU2RibUZsZFJlZiBmbGREYXRhc1tdLCBCb29sIGluc2lk ZUFsbG9jYXRpb24pOwpleHRlcm4gaW50IFNkYm1HZXRBRGF0YShTZGJtVGFibGVIYW5kbGUqIHRi bEgsIFNkYm1EYXRhSWQgZGF0YUlkLAogICAgICAgICAgICAgICAgICAgICAgICAgU2RibVZlY0Zs ZElkeCB2ZWNJZHgsIFNkYm1GbGRSZWYqIGZsZERhdGEsIEJvb2wgaW5zaWRlQWxsb2NhdGlvbik7 CmV4dGVybiBpbnQgU2RibUtpbGxBbGxEYXRhKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgU2RibURh dGFJZCBkYXRhSWQpOwpleHRlcm4gaW50IFNkYm1LaWxsRGF0YShTZGJtVGFibGVIYW5kbGUqIHRi bEgsIFNkYm1EYXRhSWQgZGF0YUlkLCBTZGJtVmVjRmxkSWR4IHZlY0lkeCk7CmV4dGVybiBpbnQg U2RibUdldEZsZEJvZHlCeUZsZE5vKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgU2RibURhdGFJZCBk YXRhSWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZGJtVmVjRmxkSWR4IHZl Y0lkeCwgU2RibUZsZEJvZHkqKiBmbGRCb2R5UCk7CmV4dGVybiBpbnQgU2RibUdldE1pbkFuZE1h eEZsZEVsbShTZGJtVGFibGVIYW5kbGUqIHRibEgsIFNkYm1SZWNFbnR5KiByZWMsIFNkYm1GbGRO byBmbGRObywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZGJtRmxkRGF0YUlk eCogbWluUCwgU2RibUZsZERhdGFJZHgqIG1heFAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU2RibVRhYmxlSGFuZGxlKiogZm9yTGlua1RibFAsIFNkYm1GbGRObyogZmxkTm9Q KTsKZXh0ZXJuIGludCBTZGJtRmluZEVkZ2VEYXRhKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgU2Ri bUZsZFNwZWMqIGZTcGVjLCBCb29sIGxvd2VyRWRnZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTZGJtRmxkRWxtUHRyKiBlbG1QKTsKZXh0ZXJuIGludCBTZGJtTGlzdERhdGEoU2RibVRh YmxlSGFuZGxlKiB0YmxILCBTZGJtRmxkU3BlYyogZlNwZWMsCiAgICAgICAgICAgICAgICAgICAg ICAgICBTZGJtUmVjSWQgcmVjc1tdLCBOdW0gbnVtUmVjcywgTnVtKiByZWFsUmVjcywKICAgICAg ICAgICAgICAgICAgICAgICAgIFNkYm1GbGRFbG1QdHIgYWxsTGlzdFtdLCBOdW0gbnVtQWxsLCBO dW0qIHJlYWxBbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICBTZGJtRmxkRWxtUHRyIHVuaXFM aXN0W10sIE51bSBudW1VbmlxLCBOdW0qIHJlYWxVbmlxKTsKCgoKCgpleHRlcm4gU2RibUZsZERh dGFJZHggU2RibUFsbG9jTmV3RmxkKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgU2RibUZsZEJvZHkq KiBmYlApOwpleHRlcm4gaW50IFNkYm1GbGRJZHhBdHJlZU9wZW4oQXJlYSBvcGVuQXJnLCBBcmVh IGF1eEFyZywgdm9pZCoqIHBwKTsKZXh0ZXJuIGludCBTZGJtRmxkSWR4QXRyZWVDbG9zZShBcmVh IG9wZW5BcmcsIEFyZWEgYXV4QXJnKTsKZXh0ZXJuIGludCBTZGJtRmxkSWR4QXRyZWVHcm93KEFy ZWEgb3BlbkFyZywgQXJlYSBhdXhBcmcsIFN6IGJ5dGVTaXplLCB2b2lkKiogcHApOwpleHRlcm4g aW50IFNkYm1GbGRJZHhBdHJlZVJlZHVjZShBcmVhIG9wZW5BcmcsIEFyZWEgYXV4QXJnLCBTeiBi eXRlU2l6ZSwgdm9pZCoqIHBwKTsKZXh0ZXJuIGludCBTZGJtRmxkTmFtZUF0cmVlQ29tcGFyZUJ5 TmFtZShBcmVhIGNvbXBhcmVBcmcsIEFyZWEgYXV4QXJnLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb29sIGRhdGExSXNJbnRlcm5hbCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJlYTY0 IGRhdGExLCBBcmVhNjQgZGF0YTIpOwoKZXh0ZXJuIGludCBTZGJtT3BlblRyZWVGb3JGbGROYW1l KFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgQXRyZWVSZXEqIHJlcSk7CmV4dGVybiBpbnQgU2RibU9w ZW5UcmVlRm9yRmxkKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgU2RibUZsZE5vIGZsZE5vLCBBdHJl ZVJlcSogcmVxKTsKCmV4dGVybiBTZGJtRmxkRGF0YUlkeCBTZGJtTmV3TGlua0luZm8oU2RibVRh YmxlSGFuZGxlKiBmcm9tVGJsSCwgU2RibUZsZERhdGFJZHggZnJvbURhdGEsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZGJtRGF0YUlkIGxpbmtGcm9tLCBTZGJtRGF0 YUlkIGxpbmtUbyk7CmV4dGVybiBpbnQgU2RibURlbExpbmtlZEluZm8oU2RibVRhYmxlSGFuZGxl KiBsaW5rVG9UYmxILCBTZGJtRmxkRGF0YUlkeCBpZHgpOwoKCgojIDM5ICIuLi8uLi9zcmMvc2Ri bS52MC9zZGJtZmxkdS5jIiAyCiMgMSAiLi4vLi4vc3JjL3NkYm0udjAvc2RibXJlY2MuaCIgMQoj IDE0ICIuLi8uLi9zcmMvc2RibS52MC9zZGJtcmVjYy5oIgojZGVmaW5lIF9BWElTX1NEQk1SRUND X0hfIAojIDI5ICIuLi8uLi9zcmMvc2RibS52MC9zZGJtcmVjYy5oIgoKCmV4dGVybiBpbmxpbmUg aW50ClNkYm1HZXRSZWNFbnR5UHRyKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgU2RibVJlY0lkeCBy ZWNJZHgsIFNkYm1SZWNFbnR5KiogcmVjUCkKewogICAgaW50IHJldFZhbCA9IDA7CgogICAgaWYo KDEgPD0gcmVjSWR4KSAmJiAocmVjSWR4IDw9IHRibEgtPnJlY3NDb250bnJBdHRyLT5udW1SZWNz KSkgewogICAgICAgIHJldFZhbCA9IFNkYm1NYXBUYmxQbGFpbih0YmxILCAyKTsKICAgICAgICBp ZigoKHJldFZhbCkgPj0gMCkpIHsKICAgICAgICAgICAgQXJlYSB4cDsKICAgICAgICAgICAgU2Ri bVJlY0VudHkqIHJlYzsKICAgICAgICAgICAgeHAucHRyID0gdGJsSC0+cmVjczsKICAgICAgICAg ICAgeHAudmFsICs9ICgocmVjSWR4KS0xKSAqIHRibEgtPnJlY1N6OwogICAgICAgICAgICByZWMg PSB4cC5wdHI7CiAgICAgICAgICAgIDsKICAgICAgICAgICAgKnJlY1AgPSByZWM7CiAgICAgICAg fQogICAgfSBlbHNlIHsKICAgICAgICA7CiAgICAgICAgTG9nUHV0KDQsICIlczolJCIsIF9fRlVO Q1RJT05fXywgIklsbGVnYWwgUmVjb3JkIEluZGV4IFslZDoweCV4XSIsIHJlY0lkeCwgcmVjSWR4 KTsKICAgICAgICByZXRWYWwgPSAoLSg0MTUzKSk7CiAgICB9CiAgICByZXR1cm4gcmV0VmFsOwp9 CgpleHRlcm4gaW5saW5lIGludApTZGJtR2V0UmVjRW50eVB0cldpdGhDaGVjayhTZGJtVGFibGVI YW5kbGUqIHRibEgsIFNkYm1SZWNJZHggcmVjSWR4LCBTZGJtUmVjRW50eSoqIHJlY1ApCnsKICAg IGludCByZXRWYWwgPSAwOwogICAgU2RibVJlY0VudHkqIHJlYyA9ICgodm9pZCAqKTApOwoKICAg IHJldFZhbCA9IFNkYm1HZXRSZWNFbnR5UHRyKHRibEgsIHJlY0lkeCwgJnJlYyk7CiAgICBpZigo KHJldFZhbCkgPj0gMCkpIHsKICAgICAgICBpZighIHJlYy0+cmVjSWQuaS5pbnZhbGlkKSB7CiAg ICAgICAgICAgIGlmKChyZWMtPnJlY0lkLmkudGFibGVObyA9PSAwKSB8fCAodGJsSC0+dGJsTm8g PT0gcmVjLT5yZWNJZC5pLnRhYmxlTm8pKSB7CiAgICAgICAgICAgICAgICBpZihyZWNQKQogICAg ICAgICAgICAgICAgICAgICpyZWNQID0gcmVjOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAg ICAgICAgICAgTG9nUHV0KDQsICIlczolJCIsIF9fRlVOQ1RJT05fXywgIklsbGVnYWwgUmVjb3Jk IElEIFtSZWMoMHgleCwweCV4KVRibCglZCldIiwKICAgICAgICAgICAgICAgICAgICAgICByZWMt PnJlY0lkLmkucmVjSWR4LCByZWMtPnJlY0lkLmkucmV2aXNpb24sIHJlYy0+cmVjSWQuaS50YWJs ZU5vKTsKICAgICAgICAgICAgICAgIHJldFZhbCA9ICgtKDQxNTYpKTsKICAgICAgICAgICAgfQog ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIExvZ1B1dCg0LCAiJXM6JSQiLCBfX0ZVTkNUSU9O X18sICJJbGxlZ2FsIFJlY29yZCBJRCAiCiAgICAgICAgICAgICAgICAgICAiW1JlYygweCV4LDB4 JXgpVGJsKCVkKV0iLAogICAgICAgICAgICAgICAgICAgcmVjLT5yZWNJZC5pLnJlY0lkeCwgcmVj LT5yZWNJZC5pLnJldmlzaW9uLCByZWMtPnJlY0lkLmkudGFibGVObyk7CiAgICAgICAgICAgIHJl dFZhbCA9ICgtKDQxNTUpKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gcmV0VmFsOwp9Cgpl eHRlcm4gaW5saW5lIFNkYm1SZWNFbnR5KiBTZGJtUmVjc09wclRvcEFkZHIoU2RibVJlY0VudHkq IHRvcCwgczMyIHRvcElkeCwgczMyIHRndElkeCwgdTMyIHN6KSB7IHJldHVybiBDcXVldWVUb3BB ZGRyKCYodG9wLT5saXN0KSwgdG9wSWR4LCB0Z3RJZHgsIHN6LCAoKFdvcmQpKCYoKChTZGJtUmVj RW50eSAqKTApLT5saXN0KSkpKTsgfSBleHRlcm4gaW5saW5lIHMzMiBTZGJtUmVjc09wckluZGV4 KFNkYm1SZWNFbnR5KiB0b3AsIHMzMiB0b3BJZHgsIFNkYm1SZWNFbnR5KiB0Z3QsIHUzMiBzeikg eyBzdHJ1Y3QgeyBjaGFyIHhbc3pdOyB9ICpwMSwgKnAyOyBwMSA9ICh2b2lkKil0b3A7IHAyID0g KHZvaWQqKXRndDsgcmV0dXJuIHAyIC0gcDEgKyB0b3BJZHg7IH0gZXh0ZXJuIGlubGluZSB2b2lk IFNkYm1SZWNzT3BySW5pdChTZGJtUmVjRW50eSogdG9wLCBzMzIgdG9wSWR4LCBzMzIgdGd0SWR4 LCB1MzIgc3opIHsgQ3F1ZXVlSW5pdCgmKHRvcC0+bGlzdCksIHRvcElkeCwgdGd0SWR4LCBzeiwg KChXb3JkKSgmKCgoU2RibVJlY0VudHkgKikwKS0+bGlzdCkpKSk7fSBleHRlcm4gaW5saW5lIHZv aWQgU2RibVJlY3NPcHJJbnNlcnQoU2RibVJlY0VudHkqIHRvcCwgczMyIHRvcElkeCwgczMyIHRn dElkeCwgdTMyIHN6KSB7IENxdWV1ZUluc2VydFF1ZXVlKCYodG9wLT5saXN0KSwgdG9wSWR4LCB0 Z3RJZHgsIHN6LCAoKFdvcmQpKCYoKChTZGJtUmVjRW50eSAqKTApLT5saXN0KSkpKTt9IGV4dGVy biBpbmxpbmUgdm9pZCBTZGJtUmVjc09wckFwcGVuZChTZGJtUmVjRW50eSogdG9wLCBzMzIgdG9w SWR4LCBzMzIgdGd0SWR4LCB1MzIgc3opIHsgQ3F1ZXVlQXBwZW5kUXVldWUoJih0b3AtPmxpc3Qp LCB0b3BJZHgsIHRndElkeCwgc3osICgoV29yZCkoJigoKFNkYm1SZWNFbnR5ICopMCktPmxpc3Qp KSkpO30gZXh0ZXJuIGlubGluZSBzMzIgU2RibVJlY3NPcHJEZWxldGUoU2RibVJlY0VudHkqIHRv cCwgczMyIHRvcElkeCwgczMyIHRndElkeCwgdTMyIHN6KSB7IHMzMiByZXRhaW47IHJldGFpbiA9 IENxdWV1ZURlbGV0ZVF1ZXVlKCYodG9wLT5saXN0KSwgdG9wSWR4LCB0Z3RJZHgsIHN6LCAoKFdv cmQpKCYoKChTZGJtUmVjRW50eSAqKTApLT5saXN0KSkpKTsgcmV0dXJuIHJldGFpbjt9IGV4dGVy biBpbmxpbmUgczMyIFNkYm1SZWNzT3ByTmV4dChTZGJtUmVjRW50eSogdG9wLCBzMzIgdG9wSWR4 LCBzMzIgY3VyLCB1MzIgc3opIHsgczMyIG5leHQgPSBTZGJtUmVjc09wclRvcEFkZHIodG9wLCB0 b3BJZHgsIGN1ciwgc3opLT5saXN0LmZyd2Q7IHJldHVybiBuZXh0O30gZXh0ZXJuIGlubGluZSBz MzIgU2RibVJlY3NPcHJQcmV2KFNkYm1SZWNFbnR5KiB0b3AsIHMzMiB0b3BJZHgsIHMzMiBjdXIs IHUzMiBzeikgeyBzMzIgcHJldiA9IFNkYm1SZWNzT3ByVG9wQWRkcih0b3AsIHRvcElkeCwgY3Vy LCBzeiktPmxpc3QuYmt3ZDsgcmV0dXJuIHByZXY7fTsKCiNkZWZpbmUgU2RibVJlY3NUb3BBZGRy KHRibEgsdGd0KSBTZGJtUmVjc09wclRvcEFkZHIoKHRibEgpLT5yZWNzLCBjU2RibVJlY0lkeE1p biwgdGd0LCB0YmxILT5yZWNTeikKCiNkZWZpbmUgU2RibVJlY3NJbmRleCh0YmxILHRndFApIFNk Ym1SZWNzT3BySW5kZXgoKHRibEgpLT5yZWNzLCBjU2RibVJlY0lkeE1pbiwgdGd0UCwgdGJsSC0+ cmVjU3opCgojZGVmaW5lIFNkYm1SZWNzSW5pdCh0YmxILHRndCkgU2RibVJlY3NPcHJJbml0KCh0 YmxIKS0+cmVjcywgY1NkYm1SZWNJZHhNaW4sIHRndCwgdGJsSC0+cmVjU3opCgoKZXh0ZXJuIGlu bGluZSBTZGJtUmVjSWR4ClNkYm1SZWNzTmV4dEZyb21GcmVlTGlzdChTZGJtVGFibGVIYW5kbGUq IHRibEgsIFNkYm1SZWNJZHggdGd0SWR4KQp7CiAgICBTZGJtUmVjSWR4IHBudElkeDsKICAgIGlm KHRndElkeCkgewogICAgICAgIHBudElkeCA9IFNkYm1SZWNzT3ByTmV4dCgodGJsSCktPnJlY3Ms IDEsIHRndElkeCwgdGJsSC0+cmVjU3opOwogICAgfSBlbHNlIHsKICAgICAgICBwbnRJZHggPSB0 YmxILT5yZWNzQ29udG5yQXR0ci0+ZnJlZXM7CiAgICB9CiAgICByZXR1cm4gcG50SWR4Owp9Cgpl eHRlcm4gaW5saW5lIFNkYm1SZWNJZHgKU2RibVJlY3NQcmV2RnJvbUZyZWVMaXN0KFNkYm1UYWJs ZUhhbmRsZSogdGJsSCwgU2RibVJlY0lkeCB0Z3RJZHgpCnsKICAgIFNkYm1SZWNJZHggcG50SWR4 OwogICAgaWYodGd0SWR4KSB7CiAgICAgICAgcG50SWR4ID0gU2RibVJlY3NPcHJQcmV2KCh0YmxI KS0+cmVjcywgMSwgdGd0SWR4LCB0YmxILT5yZWNTeik7CiAgICB9IGVsc2UgewogICAgICAgIHBu dElkeCA9IHRibEgtPnJlY3NDb250bnJBdHRyLT5mcmVlczsKICAgIH0KICAgIHJldHVybiBwbnRJ ZHg7Cn0KCmV4dGVybiBpbmxpbmUgdm9pZApTZGJtUmVjc0luc2VydFRvRnJlZUxpc3QoU2RibVRh YmxlSGFuZGxlKiB0YmxILCBTZGJtUmVjSWR4IHRndElkeCkKewogICAgU2RibVJlY0lkeCBwbnRJ ZHggPSB0YmxILT5yZWNzQ29udG5yQXR0ci0+ZnJlZXM7CiAgICBpZihwbnRJZHgpIHsKICAgICAg ICBTZGJtUmVjRW50eSogcmVjID0gKCh2b2lkICopMCk7CiAgICAgICAgU2RibUdldFJlY0VudHlQ dHIodGJsSCwgcG50SWR4LCAmcmVjKTsKICAgICAgICBTZGJtUmVjc09wckluc2VydChyZWMsIHBu dElkeCwgdGd0SWR4LCB0YmxILT5yZWNTeik7CiAgICB9IGVsc2UgewogICAgICAgIHRibEgtPnJl Y3NDb250bnJBdHRyLT5mcmVlcyA9IHRndElkeDsKICAgIH0KfQoKZXh0ZXJuIGlubGluZSB2b2lk ClNkYm1SZWNzQXBwZW5kVG9GcmVlTGlzdChTZGJtVGFibGVIYW5kbGUqIHRibEgsIFNkYm1SZWNJ ZHggdGd0SWR4KQp7CiAgICBTZGJtUmVjSWR4IHBudElkeCA9IHRibEgtPnJlY3NDb250bnJBdHRy LT5mcmVlczsKCiAgICA7CiAgICBpZihwbnRJZHgpIHsKICAgICAgICBTZGJtUmVjRW50eSogcmVj ID0gKCh2b2lkICopMCk7CiAgICAgICAgU2RibUdldFJlY0VudHlQdHIodGJsSCwgcG50SWR4LCAm cmVjKTsKICAgICAgICBTZGJtUmVjc09wckFwcGVuZChyZWMsIHBudElkeCwgdGd0SWR4LCB0YmxI LT5yZWNTeik7CiAgICB9IGVsc2UgewogICAgICAgIHRibEgtPnJlY3NDb250bnJBdHRyLT5mcmVl cyA9IHRndElkeDsKICAgIH0KfQoKZXh0ZXJuIGlubGluZSB2b2lkClNkYm1SZWNzRGVsZXRlRnJv bUZyZWVMaXN0KFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgU2RibVJlY0lkeCB0Z3RJZHgpCnsKICAg IFNkYm1SZWNJZHggcG50SWR4ID0gdGJsSC0+cmVjc0NvbnRuckF0dHItPmZyZWVzOwogICAgaWYo cG50SWR4KSB7CiAgICAgICAgU2RibVJlY0VudHkqIHJlYyA9ICgodm9pZCAqKTApOwogICAgICAg IFNkYm1SZWNJZHggZGVsTmV4dDsKICAgICAgICBTZGJtR2V0UmVjRW50eVB0cih0YmxILCBwbnRJ ZHgsICZyZWMpOwogICAgICAgIGRlbE5leHQgPSBTZGJtUmVjc09wckRlbGV0ZShyZWMsIHBudElk eCwgdGd0SWR4LCB0YmxILT5yZWNTeik7CiAgICAgICAgOwogICAgICAgIGlmKHRndElkeCA9PSBk ZWxOZXh0KQogICAgICAgICAgICBkZWxOZXh0ID0gMDsKICAgICAgICBpZih0Z3RJZHggPT0gcG50 SWR4KQogICAgICAgICAgICB0YmxILT5yZWNzQ29udG5yQXR0ci0+ZnJlZXMgPSBkZWxOZXh0Owog ICAgICAgIDsKICAgIH0KfQoKZXh0ZXJuIGlubGluZSBTZGJtUmVjSWR4ClNkYm1SZWNzTmV4dEZy b21BY3RpdmUoU2RibVRhYmxlSGFuZGxlKiB0YmxILCBTZGJtUmVjSWR4IHRndElkeCkKewogICAg U2RibVJlY0lkeCBwbnRJZHg7CiAgICBpZih0Z3RJZHgpIHsKICAgICAgICBwbnRJZHggPSBTZGJt UmVjc09wck5leHQoKHRibEgpLT5yZWNzLCAxLCB0Z3RJZHgsIHRibEgtPnJlY1N6KTsKICAgIH0g ZWxzZSB7CiAgICAgICAgcG50SWR4ID0gdGJsSC0+cmVjc0NvbnRuckF0dHItPmFjdGl2ZXM7CiAg ICB9CiAgICA7CiAgICByZXR1cm4gcG50SWR4Owp9CgpleHRlcm4gaW5saW5lIFNkYm1SZWNJZHgK U2RibVJlY3NQcmV2RnJvbUFjdGl2ZShTZGJtVGFibGVIYW5kbGUqIHRibEgsIFNkYm1SZWNJZHgg dGd0SWR4KQp7CiAgICBTZGJtUmVjSWR4IHBudElkeDsKICAgIGlmKHRndElkeCkgewogICAgICAg IHBudElkeCA9IFNkYm1SZWNzT3ByUHJldigodGJsSCktPnJlY3MsIDEsIHRndElkeCwgdGJsSC0+ cmVjU3opOwogICAgfSBlbHNlIHsKICAgICAgICBwbnRJZHggPSB0YmxILT5yZWNzQ29udG5yQXR0 ci0+YWN0aXZlczsKICAgIH0KICAgIHJldHVybiBwbnRJZHg7Cn0KCmV4dGVybiBpbmxpbmUgdm9p ZApTZGJtUmVjc0luc2VydFRvQWN0aXZlKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgU2RibVJlY0lk eCB0Z3RJZHgpCnsKICAgIFNkYm1SZWNJZHggcG50SWR4ID0gdGJsSC0+cmVjc0NvbnRuckF0dHIt PmFjdGl2ZXM7CiAgICBpZihwbnRJZHgpIHsKICAgICAgICBTZGJtUmVjRW50eSogcmVjID0gKCh2 b2lkICopMCk7CiAgICAgICAgU2RibUdldFJlY0VudHlQdHIodGJsSCwgcG50SWR4LCAmcmVjKTsK ICAgICAgICBTZGJtUmVjc09wckluc2VydChyZWMsIHBudElkeCwgdGd0SWR4LCB0YmxILT5yZWNT eik7CiAgICB9IGVsc2UgewogICAgICAgIHRibEgtPnJlY3NDb250bnJBdHRyLT5hY3RpdmVzID0g dGd0SWR4OwogICAgfQogICAgdGJsSC0+cmVjc0NvbnRuckF0dHItPm51bUFjdGl2ZXMgKys7Cn0K CmV4dGVybiBpbmxpbmUgdm9pZApTZGJtUmVjc0FwcGVuZFRvQWN0aXZlKFNkYm1UYWJsZUhhbmRs ZSogdGJsSCwgU2RibVJlY0lkeCB0Z3RJZHgpCnsKICAgIFNkYm1SZWNJZHggcG50SWR4ID0gdGJs SC0+cmVjc0NvbnRuckF0dHItPmFjdGl2ZXM7CiAgICBpZihwbnRJZHgpIHsKICAgICAgICBTZGJt UmVjRW50eSogcmVjID0gKCh2b2lkICopMCk7CiAgICAgICAgU2RibUdldFJlY0VudHlQdHIodGJs SCwgcG50SWR4LCAmcmVjKTsKICAgICAgICBTZGJtUmVjc09wckFwcGVuZChyZWMsIHBudElkeCwg dGd0SWR4LCB0YmxILT5yZWNTeik7CiAgICB9IGVsc2UgewogICAgICAgIHRibEgtPnJlY3NDb250 bnJBdHRyLT5hY3RpdmVzID0gdGd0SWR4OwogICAgfQogICAgdGJsSC0+cmVjc0NvbnRuckF0dHIt Pm51bUFjdGl2ZXMgKys7Cn0KCmV4dGVybiBpbmxpbmUgdm9pZApTZGJtUmVjc0RlbGV0ZUZyb21B Y3RpdmUoU2RibVRhYmxlSGFuZGxlKiB0YmxILCBTZGJtUmVjSWR4IHRndElkeCkKewogICAgU2Ri bVJlY0lkeCBwbnRJZHggPSB0YmxILT5yZWNzQ29udG5yQXR0ci0+YWN0aXZlczsKICAgIGlmKHBu dElkeCkgewogICAgICAgIFNkYm1SZWNFbnR5KiByZWMgPSAoKHZvaWQgKikwKTsKICAgICAgICBT ZGJtUmVjSWR4IGRlbE5leHQ7CiAgICAgICAgU2RibUdldFJlY0VudHlQdHIodGJsSCwgcG50SWR4 LCAmcmVjKTsKICAgICAgICBkZWxOZXh0ID0gU2RibVJlY3NPcHJEZWxldGUocmVjLCBwbnRJZHgs IHRndElkeCwgdGJsSC0+cmVjU3opOwogICAgICAgIGlmKHRndElkeCA9PSBkZWxOZXh0KQogICAg ICAgICAgICBkZWxOZXh0ID0gMDsKICAgICAgICBpZih0Z3RJZHggPT0gcG50SWR4KQogICAgICAg ICAgICB0YmxILT5yZWNzQ29udG5yQXR0ci0+YWN0aXZlcyA9IGRlbE5leHQ7CiAgICAgICAgdGJs SC0+cmVjc0NvbnRuckF0dHItPm51bUFjdGl2ZXMgLS07CiAgICB9Cn0KCmV4dGVybiBpbnQgU2Ri bUV4cGFuZFJlY0FyZWEoU2RibVRhYmxlSGFuZGxlKiB0YmxILCBOdW0gbmV3TnVtUmVjKTsKZXh0 ZXJuIGludCBTZGJtQWN0aXZlUmVjKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgU2RibVJlY0lkeCBp ZHgsIFNkYm1SZWNFbnR5KiogcmVjUCk7CmV4dGVybiBpbnQgU2RibU5ld1JlYyhTZGJtVGFibGVI YW5kbGUqIHRibEgsIFNkYm1SZWNFbnR5KiogcmVjUCk7CmV4dGVybiBpbnQgU2RibURlbFJlYyhT ZGJtVGFibGVIYW5kbGUqIHRibEgsIFNkYm1SZWNFbnR5KiByZWMpOwpleHRlcm4gaW50IFNkYm1H ZXRSZWNFbnR5KFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgU2RibURhdGFJZCByZWNJZCwgU2RibVJl Y0VudHkqKiByZWNQKTsKZXh0ZXJuIE51bSBTZGJtTGlzdFJlY0ludGVybmFsKFNkYm1UYWJsZUhh bmRsZSogdGJsSCwgTnVtIG51bVJlY3MsIFNkYm1SZWNJZCByZWNzW10pOwoKCiMgNDAgIi4uLy4u L3NyYy9zZGJtLnYwL3NkYm1mbGR1LmMiIDIKCnN0YXRpYyBpbnQKU2RibUZsZElkeEF0cmVlQnVp bGQoQXJlYSBhcmcxc3QsIFN6IGJ5dGVTaXplLCB2b2lkKiogcHApCnsKICAgIGludCByZXRWYWw7 CiAgICBTZGJtVGFibGVIYW5kbGUqIHRibEg7CgogICAgOwogICAgdGJsSCA9IGFyZzFzdC5wdHI7 CgogICAgcmV0VmFsID0gU2RibVVubWFwVGJsUGxhaW4odGJsSCwgNSk7CiAgICBpZigoKHJldFZh bCkgPj0gMCkpIHsKICAgICAgICByZXRWYWwgPSBTZGJtUmVzaXplVGJsUGxhaW4odGJsSCwgNSwg Ynl0ZVNpemUpOwogICAgICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgICAgICByZXRW YWwgPSBTZGJtTWFwVGJsUGxhaW4odGJsSCwgNSk7CiAgICAgICAgICAgIGlmKHBwKSB7CiAgICAg ICAgICAgICAgICAqcHAgPSB0YmxILT5pbmRleEFyZWE7CiAgICAgICAgICAgIH0KICAgICAgICB9 CiAgICB9CiAgICByZXR1cm4gKHJldFZhbCk7Cn0KCmludApTZGJtRmxkSWR4SW5pdChTZGJtVGFi bGVIYW5kbGUqIHRibEgpCnsKICAgIGludCByZXRWYWwgPSAwOwogICAgQXJlYSBhcmc7CgogICAg OwogICAgcmV0VmFsID0gU2RibU1hcFRibFBsYWluKHRibEgsIDEpOwogICAgaWYoKChyZXRWYWwp ID49IDApKSB7CiAgICAgICAgdTMyIG51bUZsZHMgPSB0YmxILT50YWJsZU1haW4tPm51bUZsZHM7 CiAgICAgICAgaW50IGkgPSAwLCBqOwogICAgICAgIE51bSBudW1UcmVlID0gbnVtRmxkcyArIDE7 CiAgICAgICAgdTMyIHRyZWVJZHNbbnVtVHJlZV07CgogICAgICAgIHRyZWVJZHNbaSsrXSA9IDE7 CiAgICAgICAgZm9yKGogPSAxOyBqIDw9IG51bUZsZHM7IGorKykgewogICAgICAgICAgICB0cmVl SWRzW2krK10gPSAoKGopLTErMik7CiAgICAgICAgfQogICAgICAgIGFyZy5wdHIgPSB0YmxIOwog ICAgICAgIHJldFZhbCA9IEF0cmVlQnVpbGROb2RlU2V0KFNkYm1GbGRJZHhBdHJlZUJ1aWxkLCBh cmcsIG51bVRyZWUsIHRyZWVJZHMpOwogICAgfQogICAgcmV0dXJuIChyZXRWYWwpOwp9CgppbnQK U2RibUZsZElkeEluaXQyKFNkYm1UYWJsZUhhbmRsZSogdGJsSCkKewogICAgaW50IHJldFZhbCA9 IDA7CgogICAgOwogICAgcmV0VmFsID0gU2RibU1hcFRibFBsYWluKHRibEgsIDEpOwogICAgaWYo KChyZXRWYWwpID49IDApKSB7CiAgICAgICAgdTMyIG51bUZsZHMgPSB0YmxILT50YWJsZU1haW4t Pm51bUZsZHM7CiAgICAgICAgaW50IGk7CiAgICAgICAgZm9yKGkgPSAxOyBpIDw9IG51bUZsZHM7 IGkrKykgewogICAgICAgICAgICBTZGJtRmxkU3BlYyogZlNwZWMgPSAoKHZvaWQgKikwKTsKICAg ICAgICAgICAgY29uc3QgU2RibUZsZFR5cGVJbmZvKiB0aTsKICAgICAgICAgICAgcmV0VmFsID0g U2RibUdldEZsZFNwZWModGJsSCwgaSwgJmZTcGVjKTsKICAgICAgICAgICAgaWYoKChyZXRWYWwp IDwgMCkpIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAg IHRpID0gKGdTZGJtRmxkVHlwZXNbZlNwZWMtPmZsZFR5cGVdKTsKICAgICAgICAgICAgaWYodGkt Pmhhc0F0cmVlSWR4KSB7CiAgICAgICAgICAgICAgICBmU3BlYy0+ZmxkSW5kZXhUcmVlID0gKChp KS0xKzIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIChyZXRWYWwp Owp9CgpTZGJtRmxkRGF0YUlkeApTZGJtQWxsb2NOZXdGbGQoU2RibVRhYmxlSGFuZGxlKiB0YmxI LCBTZGJtRmxkQm9keSoqIGZiUCkKewogICAgaW50IHJldFZhbCA9IDA7CiAgICBTZGJtVGFibGVG bGRBdHRyKiBmYSA9IHRibEgtPmZsZHNDb250bnJBdHRyOwogICAgU2RibUZsZERhdGFJZHggaWR4 ID0gMDsKICAgIFNkYm1GbGRCb2R5KiBmYjsKCiAgICA7CiAgICBpZigoaWR4ID0gU2RibUZsZHNO ZXh0RnJvbUZyZWVMaXN0KHRibEgsIDApKSA9PSAwKSB7CiAgICAgICAgTnVtIG51bUZsZHMgPSBm YS0+bnVtRmxkcyArIDE7CgogICAgICAgIHJldFZhbCA9IFNkYm1SZXNpemVUYmxQbGFpbih0YmxI LCAzLCBudW1GbGRzICogc2l6ZW9mKCpmYikpOwogICAgICAgIGlmKCgocmV0VmFsKSA+PSAwKSkg ewogICAgICAgICAgICBmYS0+bnVtRmxkcyA9IG51bUZsZHM7CiAgICAgICAgICAgIGlkeCA9IG51 bUZsZHM7CiAgICAgICAgICAgIHJldFZhbCA9IEFkYW1DaGFuZ2VTdWJmaWxlUGFyYW0odGJsSC0+ c3ViZmlsZXNbM10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGJsSC0+cGFyYW1zICsgMyk7CiAgICAgICAgICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAg ICAgICAgICAgICAgcmV0VmFsID0gU2RibU1hcFRibFBsYWluKHRibEgsIDMpOwogICAgICAgICAg ICB9CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICByZXRWYWwgPSBTZGJtTWFwVGJsUGxh aW4odGJsSCwgMyk7CiAgICAgICAgaWYoKChyZXRWYWwpID49IDApKSB7CiAgICAgICAgICAgIFNk Ym1GbGRzRGVsZXRlRnJvbUZyZWVMaXN0KHRibEgsIGlkeCk7CiAgICAgICAgICAgIHJldFZhbCA9 IEFkYW1DaGFuZ2VTdWJmaWxlUGFyYW0odGJsSC0+c3ViZmlsZXNbM10sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJsSC0+cGFyYW1zICsgMyk7CgogICAgICAg IH0KICAgIH0KICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgIFNkYm1GbGRzT3BySW5p dCgodGJsSCktPmZsZHMsIDEsIGlkeCk7CiAgICAgICAgcmV0VmFsID0gU2RibUdldEZsZEJvZHko dGJsSCwgaWR4LCAmZmIpOwogICAgICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgICAg ICByZXRWYWwgPSBpZHg7CiAgICAgICAgICAgICpmYlAgPSBmYjsKICAgICAgICB9CiAgICB9CiAg ICByZXR1cm4gKHJldFZhbCk7Cn0KIyAxNzUgIi4uLy4uL3NyYy9zZGJtLnYwL3NkYm1mbGR1LmMi CmludApTZGJtRmxkSWR4QXRyZWVPcGVuKEFyZWEgb3BlbkFyZywgQXJlYSBhdXhBcmcsIHZvaWQq KiBwcCkKewogICAgaW50IHJldFZhbCA9IDA7CiAgICBTZGJtVGFibGVIYW5kbGUqIHRibEg7CiAg ICA7CiAgICB0YmxIID0gYXV4QXJnLnB0cjsKICAgIHJldFZhbCA9IFNkYm1NYXBUYmxQbGFpbih0 YmxILCA1KTsKICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgIHJldFZhbCA9IFNkYm1N YXBUYmxQbGFpbih0YmxILCAzKTsKICAgICAgICBpZigoKHJldFZhbCkgPj0gMCkpIHsKICAgICAg ICAgICAgaWYob3BlbkFyZy52YWwpIHsKICAgICAgICAgICAgICAgIHJldFZhbCA9IFNkYm1NYXBW YXJEYXRhKCYodGJsSC0+Y29tbW9uKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoKChy ZXRWYWwpID49IDApKSB7CiAgICAgICAgICAgICAgICBpZihwcCkgewogICAgICAgICAgICAgICAg ICAgIDsKCgogICAgICAgICAgICAgICAgICAgICpwcCA9IHRibEgtPmluZGV4QXJlYTsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAocmV0 VmFsKTsKfQoKaW50ClNkYm1GbGRJZHhBdHJlZUNsb3NlKEFyZWEgb3BlbkFyZywgQXJlYSBhdXhB cmcpCnsKICAgIGludCByZXRWYWwgPSAwOwoKICAgIDsKCgogICAgcmV0dXJuIChyZXRWYWwpOwp9 CgppbnQKU2RibUZsZElkeEF0cmVlR3JvdyhBcmVhIG9wZW5BcmcsIEFyZWEgYXV4QXJnLCBTeiBi eXRlU2l6ZSwgdm9pZCoqIHBwKQp7CiAgICBpbnQgcmV0VmFsID0gMDsKICAgIFNkYm1UYWJsZUhh bmRsZSogdGJsSDsKCiAgICA7CiAgICB0YmxIID0gYXV4QXJnLnB0cjsKCiAgICByZXRWYWwgPSBT ZGJtU2hpZnRUYmxQbGFpblNpemUodGJsSCwgNSwgYnl0ZVNpemUpOwogICAgaWYoKChyZXRWYWwp ID49IDApKSB7CiAgICAgICAgcmV0VmFsID0gU2RibU1hcFRibFBsYWluKHRibEgsIDUpOwogICAg ICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgICAgICBpZihwcCkgewogICAgICAgICAg ICAgICAgKnBwID0gdGJsSC0+aW5kZXhBcmVhOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg fQogICAgcmV0dXJuIChyZXRWYWwpOwp9CgppbnQKU2RibUZsZElkeEF0cmVlUmVkdWNlKEFyZWEg b3BlbkFyZywgQXJlYSBhdXhBcmcsIFN6IGJ5dGVTaXplLCB2b2lkKiogcHApCnsKICAgIGludCBy ZXRWYWwgPSAwOwogICAgU2RibVRhYmxlSGFuZGxlKiB0YmxIOwoKICAgIDsKICAgIHRibEggPSBh dXhBcmcucHRyOwoKICAgIHJldFZhbCA9IFNkYm1TaGlmdFRibFBsYWluU2l6ZSh0YmxILCA1LCAt Ynl0ZVNpemUpOwogICAgaWYoKChyZXRWYWwpID49IDApKSB7CiAgICAgICAgcmV0VmFsID0gU2Ri bU1hcFRibFBsYWluKHRibEgsIDUpOwogICAgICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAg ICAgICAgICBpZihwcCkgewogICAgICAgICAgICAgICAgKnBwID0gdGJsSC0+aW5kZXhBcmVhOwog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIChyZXRWYWwpOwp9CgppbnQK U2RibUZsZE5hbWVBdHJlZUNvbXBhcmVCeU5hbWUoQXJlYSBjb21wYXJlQXJnLCBBcmVhIGF1eEFy ZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvb2wgZGF0YTFJc0ludGVybmFsLCBB cmVhNjQgZGF0YTEsIEFyZWE2NCBkYXRhMikKewogICAgU2RibVRhYmxlSGFuZGxlKiB0YmxIOwog ICAgU2RibUZsZE5hbWVJZHhEYXRhIG5hbWUxOwogICAgU2RibUZsZE5hbWVJZHhEYXRhIG5hbWUy OwogICAgY29uc3QgQ2hyKiBzdHIxOwogICAgY29uc3QgQ2hyKiBzdHIyOwogICAgaW50IHg7Cgog ICAgOwogICAgdGJsSCA9IGF1eEFyZy5wdHI7CiAgICBpZihkYXRhMUlzSW50ZXJuYWwpIHsKICAg ICAgICBuYW1lMS52YWx1ZSA9IGRhdGExOwogICAgICAgIHN0cjEgPSBTZGJtR2V0QWRkck9mVmFy RGF0YSgmKHRibEgtPmNvbW1vbiksIG5hbWUxLngubmFtZVB0cik7CiAgICB9IGVsc2UgewogICAg ICAgIHN0cjEgPSBkYXRhMS5wdHI7CiAgICB9CiAgICBuYW1lMi52YWx1ZSA9IGRhdGEyOwogICAg c3RyMiA9IFNkYm1HZXRBZGRyT2ZWYXJEYXRhKCYodGJsSC0+Y29tbW9uKSwgbmFtZTIueC5uYW1l UHRyKTsKICAgIHggPSBTZGJtU3RyY21wKHN0cjEsIHN0cjIpOwogICAgOwogICAgaWYoeCA+IDAp IHsKICAgICAgICByZXR1cm4gKDEpOwogICAgfSBlbHNlIGlmKHggPCAwKSB7CiAgICAgICAgcmV0 dXJuICgoLTEpKTsKICAgIH0KICAgIHJldHVybiAoMCk7Cn0KCmNvbnN0IEF0cmVlQ2FsbGJhY2tz IHNTZGJtRmxkTm9CeU5hbWVPcHJzID0gewogICAgLmNvbXBhcmVGdW5jID0gU2RibUZsZE5hbWVB dHJlZUNvbXBhcmVCeU5hbWUsCiAgICAub3BlbkZ1bmMgPSBTZGJtRmxkSWR4QXRyZWVPcGVuLAog ICAgLmNsb3NlRnVuYyA9IFNkYm1GbGRJZHhBdHJlZUNsb3NlLAogICAgLmdyb3dGdW5jID0gU2Ri bUZsZElkeEF0cmVlR3JvdywKICAgIC5yZWR1Y2VGdW5jID0gU2RibUZsZElkeEF0cmVlUmVkdWNl LAp9OwoKCmludApTZGJtRHVtcEZsZE5hbWVOb2RlKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgQXRy ZWVJZHggbm9kZSwKICAgICAgICAgICAgICAgICAgICAgIEF0cmVlSWR4IHBudHJzWzVdLCBBcmVh NjQqIGRhdGFQKQp7CiAgICBpbnQgcmV0VmFsID0gMDsKICAgIEF0cmVlUmVxIHJlcTsKCiAgICA7 CiAgICAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKHNpemVvZihyZXEpKSAm JiAoc2l6ZW9mKHJlcSkpIDw9IDE2ID8gKChzaXplb2YocmVxKSkgPT0gMSA/ICh7IHZvaWQgKl9f cyA9ICgmcmVxKTsgKigoX191aW50OF90ICopIF9fcykgPSAoX191aW50OF90KSAwOyBfX3M7IH0p IDogKHsgdm9pZCAqX19zID0gKCZyZXEpOyB1bmlvbiB7IHVuc2lnbmVkIGludCBfX3VpOyB1bnNp Z25lZCBzaG9ydCBpbnQgX191c2k7IHVuc2lnbmVkIGNoYXIgX191YzsgfSAqX191ID0gX19zOyBf X3VpbnQ4X3QgX19jID0gKF9fdWludDhfdCkgKDApOyBzd2l0Y2ggKCh1bnNpZ25lZCBpbnQpIChz aXplb2YocmVxKSkpIHsgY2FzZSAxNTogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191 ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSAxMTogX191 LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgo Y2hhciAqKSBfX3UgKyA0KTsgY2FzZSA3OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBf X3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDM6IF9f dS0+X191c2kgPSAodW5zaWduZWQgc2hvcnQgaW50KSBfX2MgKiAweDAxMDE7IF9fdSA9IF9fZXh0 ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgMik7IF9fdS0+X191YyA9ICh1bnNpZ25l ZCBjaGFyKSBfX2M7IGJyZWFrOyBjYXNlIDE0OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAx OyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDEw OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lk ICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDY6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAx MDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2Ug MjogX191LT5fX3VzaSA9ICh1bnNpZ25lZCBzaG9ydCBpbnQpIF9fYyAqIDB4MDEwMTsgYnJlYWs7 IGNhc2UgMTM6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9u X18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgOTogX191LT5fX3VpID0gX19jICog MHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0 KTsgY2FzZSA1OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lv bl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDE6IF9fdS0+X191YyA9ICh1bnNp Z25lZCBjaGFyKSBfX2M7IGJyZWFrOyBjYXNlIDE2OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEw MTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNl IDEyOiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2 b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDg6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEw MTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNh c2UgNDogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgY2FzZSAwOiBicmVhazsgfSBfX3M7 IH0pKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoMCkgJiYgKDApID09ICdcMCcgPyAoeyB2b2lk ICpfX3MgPSAoJnJlcSk7IF9fYnVpbHRpbl9tZW1zZXQgKF9fcywgJ1wwJywgc2l6ZW9mKHJlcSkp OyBfX3M7IH0pIDogbWVtc2V0ICgmcmVxLCAwLCBzaXplb2YocmVxKSkpKSk7CiAgICByZXEub3By cyA9ICZzU2RibUZsZE5vQnlOYW1lT3ByczsKICAgIHJlcS5vcGVuQXJnLnZhbCA9IDE7CiAgICBy ZXEuYXV4QXJnLnB0ciA9IHRibEg7CiAgICByZXRWYWwgPSBBdHJlZU9wZW5UcmVlKCZyZXEsIDEs IDApOwogICAgaWYoKChyZXRWYWwpID49IDApKSB7CiAgICAgICAgcG50cnNbMF0gPSBBdHJlZUFi b3ZlTm9kZSgmcmVxLCBub2RlKTsKICAgICAgICBwbnRyc1sxXSA9IEF0cmVlTGVmdE5vZGUoJnJl cSwgbm9kZSk7CiAgICAgICAgcG50cnNbMl0gPSBBdHJlZVJpZ2h0Tm9kZSgmcmVxLCBub2RlKTsK ICAgICAgICBwbnRyc1szXSA9IEF0cmVlUHJldk5vZGUoJnJlcSwgbm9kZSk7CiAgICAgICAgcG50 cnNbNF0gPSBBdHJlZU5leHROb2RlKCZyZXEsIG5vZGUpOwogICAgICAgIEF0cmVlR2V0RGF0YSgm cmVxLCBub2RlLCBkYXRhUCk7CiAgICAgICAgQXRyZWVDbG9zZVRyZWUoJnJlcSk7CiAgICB9CiAg ICByZXR1cm4gKHJldFZhbCk7Cn0KCmludApTZGJtR2V0RmxkU3BlY0J5TmFtZShTZGJtVGFibGVI YW5kbGUqIHRibEgsIGNvbnN0IENociogbmFtZSwgU2RibUZsZFNwZWMqKiBmbGRTcGVjUCkKewog ICAgaW50IHJldFZhbCA9IDA7CiAgICBTZGJtRmxkTmFtZUlkeERhdGEgbmFtZURhdGE7CgogICAg OwogICAgcmV0VmFsID0gU2RibU1hcFRibFBsYWluKHRibEgsIDEpOwogICAgaWYoKChyZXRWYWwp ID49IDApKSB7CiAgICAgICAgcmV0VmFsID0gU2RibU1hcFRibFBsYWluKHRibEgsIDUpOwogICAg ICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgICAgICByZXRWYWwgPSBTZGJtTWFwVmFy RGF0YSgmKHRibEgtPmNvbW1vbikpOwogICAgICAgICAgICBpZigoKHJldFZhbCkgPj0gMCkpIHsK ICAgICAgICAgICAgICAgIEF0cmVlUmVxIHJlcTsKICAgICAgICAgICAgICAgIChfX2V4dGVuc2lv bl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoc2l6ZW9mKHJlcSkpICYmIChzaXplb2YocmVxKSkg PD0gMTYgPyAoKHNpemVvZihyZXEpKSA9PSAxID8gKHsgdm9pZCAqX19zID0gKCZyZXEpOyAqKChf X3VpbnQ4X3QgKikgX19zKSA9IChfX3VpbnQ4X3QpIDA7IF9fczsgfSkgOiAoeyB2b2lkICpfX3Mg PSAoJnJlcSk7IHVuaW9uIHsgdW5zaWduZWQgaW50IF9fdWk7IHVuc2lnbmVkIHNob3J0IGludCBf X3VzaTsgdW5zaWduZWQgY2hhciBfX3VjOyB9ICpfX3UgPSBfX3M7IF9fdWludDhfdCBfX2MgPSAo X191aW50OF90KSAoMCk7IHN3aXRjaCAoKHVuc2lnbmVkIGludCkgKHNpemVvZihyZXEpKSkgeyBj YXNlIDE1OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9f ICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDExOiBfX3UtPl9fdWkgPSBfX2MgKiAw eDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQp OyBjYXNlIDc6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9u X18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgMzogX191LT5fX3VzaSA9ICh1bnNp Z25lZCBzaG9ydCBpbnQpIF9fYyAqIDB4MDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAq KSgoY2hhciAqKSBfX3UgKyAyKTsgX191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsgYnJl YWs7IGNhc2UgMTQ6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5z aW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgMTA6IF9fdS0+X191aSA9IF9f YyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191 ICsgNCk7IGNhc2UgNjogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRl bnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSAyOiBfX3UtPl9fdXNpID0g KHVuc2lnbmVkIHNob3J0IGludCkgX19jICogMHgwMTAxOyBicmVhazsgY2FzZSAxMzogX191LT5f X3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hh ciAqKSBfX3UgKyA0KTsgY2FzZSA5OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3Ug PSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDU6IF9fdS0+ X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNo YXIgKikgX191ICsgNCk7IGNhc2UgMTogX191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsg YnJlYWs7IGNhc2UgMTY6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0 ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgMTI6IF9fdS0+X191aSA9 IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikg X191ICsgNCk7IGNhc2UgODogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19l eHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSA0OiBfX3UtPl9fdWkg PSBfX2MgKiAweDAxMDEwMTAxOyBjYXNlIDA6IGJyZWFrOyB9IF9fczsgfSkpIDogKF9fYnVpbHRp bl9jb25zdGFudF9wICgwKSAmJiAoMCkgPT0gJ1wwJyA/ICh7IHZvaWQgKl9fcyA9ICgmcmVxKTsg X19idWlsdGluX21lbXNldCAoX19zLCAnXDAnLCBzaXplb2YocmVxKSk7IF9fczsgfSkgOiBtZW1z ZXQgKCZyZXEsIDAsIHNpemVvZihyZXEpKSkpKTsKICAgICAgICAgICAgICAgIHJlcS5vcHJzID0g JnNTZGJtRmxkTm9CeU5hbWVPcHJzOwogICAgICAgICAgICAgICAgcmVxLm9wZW5BcmcudmFsID0g MTsKICAgICAgICAgICAgICAgIHJlcS5hdXhBcmcucHRyID0gdGJsSDsKICAgICAgICAgICAgICAg IHJldFZhbCA9IEF0cmVlT3BlblRyZWUoJnJlcSwgMSwgMCk7CiAgICAgICAgICAgICAgICBpZigo KHJldFZhbCkgPj0gMCkpIHsKICAgICAgICAgICAgICAgICAgICBBcmVhNjQgZGF0YTsKICAgICAg ICAgICAgICAgICAgICBBdHJlZUlkeCBoaXQ7CiAgICAgICAgICAgICAgICAgICAgZGF0YS5wdHJD bnN0ID0gbmFtZTsKICAgICAgICAgICAgICAgICAgICBoaXQgPSBBdHJlZUZpbmROb2RlKCZyZXEs IGRhdGEpOwogICAgICAgICAgICAgICAgICAgIGlmKGhpdCAhPSAwKSB7CiAgICAgICAgICAgICAg ICAgICAgICAgIEF0cmVlR2V0RGF0YSgmcmVxLCBoaXQsICYobmFtZURhdGEudmFsdWUpKTsKICAg ICAgICAgICAgICAgICAgICAgICAgcmV0VmFsID0gU2RibUdldEZsZFNwZWModGJsSCwgbmFtZURh dGEueC5mbGRObywgZmxkU3BlY1ApOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg ICAgICAgICAgICAgICAgICAgIExvZ1B1dCg0LCAiJXM6JSQiLCBfX0ZVTkNUSU9OX18sICJObyBz dWNoIEZpZWxkIE5hbWUgWyVzXSIsIG5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXRW YWwgPSAoLSg0MTU4KSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg IEF0cmVlQ2xvc2VUcmVlKCZyZXEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgfQogICAgcmV0dXJuIChyZXRWYWwpOwp9CgppbnQKU2RibVNldEZsZERlZihT ZGJtVGFibGVIYW5kbGUqIHRibEgsIFNkYm1GbGREZWYqIGZsZERlZikKewogICAgaW50IHJldFZh bCA9IDA7CiAgICBBZGFtUG9zIHg7CiAgICBTZGJtRmxkU3BlYyogZlNwZWM7CiAgICBTZGJtRmxk U3BlYyogY2hlY2s7CiAgICA7CgogICAgaWYoZmxkRGVmLT5mbGRUeXBlID09IDB4ODApIHsKICAg ICAgICBTZGJtRmxkRGVmTGlua0luZm8gbGk7CiAgICAgICAgU2RibVRhYmxlSGFuZGxlKiBsaW5r VG87CiAgICAgICAgbGkud2hvbGUgPSBmbGREZWYtPmZsZEF1eFR5cGU7CiAgICAgICAgaWYobGku ZGV0YWlsLmxpbmtUb1RhYmxlID49IHRibEgtPnRibE5vKSB7CiAgICAgICAgICAgIExvZ1B1dCg0 LCAiJXM6JSQiLCBfX0ZVTkNUSU9OX18sICJJbGxlZ2FsIHRhYmxlIE5vIEZvciBMaW5rIEZpZWxk IFslZF0iLAogICAgICAgICAgICAgICAgICAgbGkuZGV0YWlsLmxpbmtUb1RhYmxlKTsKICAgICAg ICAgICAgcmV0dXJuICgoLSg0MTc3KSkpOwogICAgICAgIH0KICAgICAgICBpZihsaS5kZXRhaWwu bGlua1RvRmxkTm8gPD0gMCkgewogICAgICAgICAgICBMb2dQdXQoNCwgIiVzOiUkIiwgX19GVU5D VElPTl9fLCAiSWxsZWdhbCBmaWVsZCBObyBGb3IgTGluayBGaWVsZCBbJWRdIiwKICAgICAgICAg ICAgICAgICAgIGxpLmRldGFpbC5saW5rVG9GbGRObyk7CiAgICAgICAgICAgIHJldHVybiAoKC0o NDE3OCkpKTsKICAgICAgICB9CiAgICAgICAgcmV0VmFsID0gU2RibU9wZW5UYWJsZUJ5QW5vdGhl clRhYmxlKHRibEgsIGxpLmRldGFpbC5saW5rVG9UYWJsZSwgJmxpbmtUbyk7CiAgICAgICAgaWYo KChyZXRWYWwpIDwgMCkpIHsKICAgICAgICAgICAgcmV0dXJuIChyZXRWYWwpOwogICAgICAgIH0K ICAgICAgICByZXRWYWwgPSBTZGJtTWFwVGJsUGxhaW4obGlua1RvLCAxKTsKICAgICAgICBpZigo KHJldFZhbCkgPCAwKSkgewogICAgICAgICAgICByZXR1cm4gKHJldFZhbCk7CiAgICAgICAgfQog ICAgICAgIGlmKGxpLmRldGFpbC5saW5rVG9GbGRObyA8PSBsaW5rVG8tPnRhYmxlTWFpbi0+bnVt RmxkcykgewogICAgICAgICAgICByZXRWYWwgPSBTZGJtR2V0RmxkU3BlYyhsaW5rVG8sIGxpLmRl dGFpbC5saW5rVG9GbGRObywgJmNoZWNrKTsKICAgICAgICAgICAgaWYoKChyZXRWYWwpID49IDAp KSB7CiAgICAgICAgICAgICAgICBpZihjaGVjay0+ZmxkVHlwZSA9PSAweDgwKSB7CiAgICAgICAg ICAgICAgICAgICAgTG9nUHV0KDQsICIlczolJCIsIF9fRlVOQ1RJT05fXywgIk11bHRpcGxlIExp bmsgRmllbGQgRmxkTm9bJWRdIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGkuZGV0YWls LmxpbmtUb0ZsZE5vKTsKICAgICAgICAgICAgICAgICAgICByZXRWYWwgPSAoLSg0MTc5KSk7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAg ICBMb2dQdXQoNCwgIiVzOiUkIiwgX19GVU5DVElPTl9fLCAiSWxsZWdhbCBGbGQgTm8gRm9yIExp bmsgRmllbGQgRmxkTm9bJWRdIiwKICAgICAgICAgICAgICAgICAgIGxpLmRldGFpbC5saW5rVG9G bGRObyk7CiAgICAgICAgICAgIHJldFZhbCA9ICgtKDQxNzgpKTsKICAgICAgICB9CiAgICAgICAg U2RibVVubWFwVGJsUGxhaW4obGlua1RvLCAxKTsKICAgICAgICBpZigoKHJldFZhbCkgPCAwKSkg ewogICAgICAgICAgICByZXR1cm4gKHJldFZhbCk7CiAgICAgICAgfQogICAgfQogICAgcmV0VmFs ID0gU2RibUdldEZsZFNwZWModGJsSCwgZmxkRGVmLT5mbGRObywgJmZTcGVjKTsKICAgIGlmKCgo cmV0VmFsKSA+PSAwKSkgewogICAgICAgIGZTcGVjLT5mbGRObyA9IGZsZERlZi0+ZmxkTm87CiAg ICAgICAgY2hlY2sgPSAoKHZvaWQgKikwKTsKICAgICAgICByZXRWYWwgPSBTZGJtR2V0RmxkU3Bl Y0J5TmFtZSh0YmxILCBmbGREZWYtPmZsZE5hbWUsICZjaGVjayk7CiAgICAgICAgaWYocmV0VmFs ID09ICgtKDQxNTgpKSkgewogICAgICAgICAgICB4ID0gU2RibVB1dE5ld1N0cmluZygmKHRibEgt PmNvbW1vbiksIGZsZERlZi0+ZmxkTmFtZSk7CiAgICAgICAgICAgIGlmKCgoeCkgPj0gMCkpIHsK ICAgICAgICAgICAgICAgIEF0cmVlUmVxIHJlcTsKICAgICAgICAgICAgICAgIChfX2V4dGVuc2lv bl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoc2l6ZW9mKHJlcSkpICYmIChzaXplb2YocmVxKSkg PD0gMTYgPyAoKHNpemVvZihyZXEpKSA9PSAxID8gKHsgdm9pZCAqX19zID0gKCZyZXEpOyAqKChf X3VpbnQ4X3QgKikgX19zKSA9IChfX3VpbnQ4X3QpIDA7IF9fczsgfSkgOiAoeyB2b2lkICpfX3Mg PSAoJnJlcSk7IHVuaW9uIHsgdW5zaWduZWQgaW50IF9fdWk7IHVuc2lnbmVkIHNob3J0IGludCBf X3VzaTsgdW5zaWduZWQgY2hhciBfX3VjOyB9ICpfX3UgPSBfX3M7IF9fdWludDhfdCBfX2MgPSAo X191aW50OF90KSAoMCk7IHN3aXRjaCAoKHVuc2lnbmVkIGludCkgKHNpemVvZihyZXEpKSkgeyBj YXNlIDE1OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9f ICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDExOiBfX3UtPl9fdWkgPSBfX2MgKiAw eDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQp OyBjYXNlIDc6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9u X18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgMzogX191LT5fX3VzaSA9ICh1bnNp Z25lZCBzaG9ydCBpbnQpIF9fYyAqIDB4MDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAq KSgoY2hhciAqKSBfX3UgKyAyKTsgX191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsgYnJl YWs7IGNhc2UgMTQ6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5z aW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgMTA6IF9fdS0+X191aSA9IF9f YyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191 ICsgNCk7IGNhc2UgNjogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRl bnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSAyOiBfX3UtPl9fdXNpID0g KHVuc2lnbmVkIHNob3J0IGludCkgX19jICogMHgwMTAxOyBicmVhazsgY2FzZSAxMzogX191LT5f X3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hh ciAqKSBfX3UgKyA0KTsgY2FzZSA5OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3Ug PSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDU6IF9fdS0+ X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNo YXIgKikgX191ICsgNCk7IGNhc2UgMTogX191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsg YnJlYWs7IGNhc2UgMTY6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0 ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgMTI6IF9fdS0+X191aSA9 IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikg X191ICsgNCk7IGNhc2UgODogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19l eHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSA0OiBfX3UtPl9fdWkg PSBfX2MgKiAweDAxMDEwMTAxOyBjYXNlIDA6IGJyZWFrOyB9IF9fczsgfSkpIDogKF9fYnVpbHRp bl9jb25zdGFudF9wICgwKSAmJiAoMCkgPT0gJ1wwJyA/ICh7IHZvaWQgKl9fcyA9ICgmcmVxKTsg X19idWlsdGluX21lbXNldCAoX19zLCAnXDAnLCBzaXplb2YocmVxKSk7IF9fczsgfSkgOiBtZW1z ZXQgKCZyZXEsIDAsIHNpemVvZihyZXEpKSkpKTsKICAgICAgICAgICAgICAgIHJlcS5vcHJzID0g JnNTZGJtRmxkTm9CeU5hbWVPcHJzOwogICAgICAgICAgICAgICAgcmVxLm9wZW5BcmcudmFsID0g MTsKICAgICAgICAgICAgICAgIHJlcS5hdXhBcmcucHRyID0gdGJsSDsKICAgICAgICAgICAgICAg IHJldFZhbCA9IEF0cmVlT3BlblRyZWUoJnJlcSwgMSwgMSk7CiAgICAgICAgICAgICAgICBpZigo KHJldFZhbCkgPj0gMCkpIHsKICAgICAgICAgICAgICAgICAgICBTZGJtRmxkTmFtZUlkeERhdGEg bmFtZURhdGE7CiAgICAgICAgICAgICAgICAgICAgQXRyZWVJZHggYXRJZHg7CiAgICAgICAgICAg ICAgICAgICAgbmFtZURhdGEueC5uYW1lUHRyID0geDsKICAgICAgICAgICAgICAgICAgICBuYW1l RGF0YS54LmZsZE5vID0gZmxkRGVmLT5mbGRObzsKICAgICAgICAgICAgICAgICAgICByZXRWYWwg PSBBdHJlZU5ld05vZGUoJnJlcSwgbmFtZURhdGEudmFsdWUsIDAsICZhdElkeCk7CiAgICAgICAg ICAgICAgICAgICAgaWYoKChyZXRWYWwpID49IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAg IGZTcGVjLT5mbGROYW1lUHRyID0geDsKICAgICAgICAgICAgICAgICAgICAgICAgZlNwZWMtPmZs ZFR5cGUgPSBmbGREZWYtPmZsZFR5cGU7CiAgICAgICAgICAgICAgICAgICAgICAgIGZTcGVjLT5m bGRBdXhUeXBlID0gZmxkRGVmLT5mbGRBdXhUeXBlOwogICAgICAgICAgICAgICAgICAgICAgICBm U3BlYy0+ZmxkQXR0cnMgPSBmbGREZWYtPmZsZEF0dHJzOwogICAgICAgICAgICAgICAgICAgICAg ICBmU3BlYy0+ZmxkTmFtZUlkeCA9IGF0SWR4OwogICAgICAgICAgICAgICAgICAgICAgICBmU3Bl Yy0+ZmxkVXNlckluZm8gPSBmbGREZWYtPnVzZXJJbmZvOwogICAgICAgICAgICAgICAgICAgICAg ICBmU3BlYy0+ZmxkVXNlckluZm9QYXR0ZXJuID0gZmxkRGVmLT51c2VySW5mb1BhdHRlcm47CiAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIEF0cmVlQ2xvc2VUcmVlKCZy ZXEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmKCgo cmV0VmFsKSA+PSAwKSkgewogICAgICAgICAgICBMb2dQdXQoNCwgIiVzOiUkIiwgX19GVU5DVElP Tl9fLCAiRHVwbGljYXRpb24gRmllbGQgTmFtZSBbJXNdIiwgZmxkRGVmLT5mbGROYW1lKTsKICAg ICAgICAgICAgcmV0VmFsID0gKC0oNDE1OSkpOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAo cmV0VmFsKTsKfQoKZXh0ZXJuIGlubGluZSBpbnQKU2RibUdldFJlY0Zyb21EYXRhSWR4KFNkYm1U YWJsZUhhbmRsZSogdGJsSCwgU2RibUZsZFNwZWMqIGZTcGVjLAogICAgICAgICAgICAgICAgICAg ICAgU2RibUZsZERhdGFJZHggZGF0YUlkeCwgU2RibUZsZERhdGFJZHggc3ViRGF0YUlkeCwKICAg ICAgICAgICAgICAgICAgICAgIFNkYm1EYXRhSWQqIGRhdGFJZFApCnsKICAgIGludCByZXRWYWwg PSAwOwoKICAgIDsKCiAgICBpZihmU3BlYy0+ZmxkVHlwZSAhPSAweDgwKSB7CiAgICAgICAgU2Ri bUZsZEJvZHkqIGZsZDsKICAgICAgICByZXRWYWwgPSBTZGJtR2V0RmxkQm9keSh0YmxILCBkYXRh SWR4LCAmZmxkKTsKICAgICAgICBpZigoKHJldFZhbCkgPj0gMCkpIHsKICAgICAgICAgICAgU2Ri bVJlY0VudHkqIHJlYzsKICAgICAgICAgICAgcmV0VmFsID0gU2RibUdldFJlY0VudHlQdHJXaXRo Q2hlY2sodGJsSCwgZmxkLT5yZWNJZHgsICZyZWMpOwogICAgICAgICAgICBpZigoKHJldFZhbCkg Pj0gMCkpIHsKICAgICAgICAgICAgICAgIGlmKGRhdGFJZFApIHsKICAgICAgICAgICAgICAgICAg ICBTZGJtRGF0YUlkIGRhdGFJZCA9IHJlYy0+cmVjSWQ7CiAgICAgICAgICAgICAgICAgICAgZGF0 YUlkLmkudGFibGVObyA9IHRibEgtPnRibE5vOwogICAgICAgICAgICAgICAgICAgIGRhdGFJZC5p LmZsZE5vID0gZlNwZWMtPmZsZE5vOwogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg ICAgICAgICAqZGF0YUlkUCA9IGRhdGFJZDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg fQogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgU2RibVRhYmxlSGFuZGxlKiB0b1RibCA9 ICgodm9pZCAqKTApOwogICAgICAgIFNkYm1GbGREZWZMaW5rSW5mbyBsaURlZjsKCiAgICAgICAg bGlEZWYud2hvbGUgPSBmU3BlYy0+ZmxkQXV4VHlwZTsKICAgICAgICByZXRWYWwgPSBTZGJtT3Bl blRhYmxlQnlBbm90aGVyVGFibGUodGJsSCwgbGlEZWYuZGV0YWlsLmxpbmtUb1RhYmxlLCAmdG9U YmwpOwogICAgICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgICAgICBTZGJtTGlua2Vk RmxkSW5mbyogbGZpID0gKCh2b2lkICopMCk7CgogICAgICAgICAgICByZXRWYWwgPSBTZGJtTWFw VGJsUGxhaW4odG9UYmwsIDYpOwogICAgICAgICAgICBpZigoKHJldFZhbCkgPj0gMCkpIHsKICAg ICAgICAgICAgICAgIFNkYm1HZXRMaW5rZWRGbGRJbmZvKHRvVGJsLCBzdWJEYXRhSWR4LCAmbGZp KTsKICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIGlmKGxmaSkgewogICAgICAgICAg ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAqZGF0YUlkUCA9IGxmaS0+bGlua0Zyb207 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgU2RibVJlbGVhc2VU YWJsZUhhbmRsZSh0b1RibCwgMCk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIChyZXRWYWwp Owp9CgppbnQKU2RibVNlYXJjaERhdGEoU2RibVRhYmxlSGFuZGxlKiB0YmxILCBjb25zdCBTZGJt UXVlcnlDb25kKiBxdWVyeSwKICAgICAgICAgICAgICAgU2RibUZsZERhdGFJZHgqIGRhdGFJZHhQ LCBTZGJtRGF0YUlkKiBkYXRhUCwgU2RibUZsZERhdGFJZHgqIHN1YkRhdGFJZHhQKQp7CiAgICBp bnQgcmV0VmFsID0gMDsKICAgIFNkYm1GbGRTcGVjKiBmU3BlYyA9ICgodm9pZCAqKTApOwogICAg U2RibUZsZE5vIGZsZE5vID0gcXVlcnktPmZsZE5vOwogICAgOwogICAgcmV0VmFsID0gU2RibUdl dEZsZFNwZWModGJsSCwgZmxkTm8sICZmU3BlYyk7CiAgICBpZigoKHJldFZhbCkgPj0gMCkpIHsK ICAgICAgICBjb25zdCBTZGJtRmxkVHlwZUluZm8qIHRpOwogICAgICAgIGlmKGZTcGVjLT5mbGRU eXBlICE9IDB4ODApIHsKICAgICAgICAgICAgaWYocXVlcnktPmNvbmRWYWx1ZS5mbGRUeXBlID09 IDApIHsKICAgICAgICAgICAgICAgIHRpID0gKGdTZGJtRmxkVHlwZXNbZlNwZWMtPmZsZFR5cGVd KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRpID0gKGdTZGJtRmxkVHlw ZXNbcXVlcnktPmNvbmRWYWx1ZS5mbGRUeXBlXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVs c2UgewogICAgICAgICAgICB0aSA9IChnU2RibUZsZFR5cGVzW2ZTcGVjLT5mbGRUeXBlXSk7CiAg ICAgICAgfQogICAgICAgIDsKICAgICAgICBpZigodGkpICYmCiAgICAgICAgICAgKChmU3BlYy0+ ZmxkVHlwZSA9PSAweDgwKSB8fAogICAgICAgICAgICAoKHRpLT5mbXRUeXBlID09IGZTcGVjLT5m bGRUeXBlKSAmJiAodGktPnNlYXJjaERhdGEpICYmICghIHRpLT5ub25lU29ydGVkKSkpKSB7CiAg ICAgICAgICAgIGlmKChxdWVyeS0+Y29uZFR5cGUgJiB0aS0+Y29uZE1hc2spICE9IDApIHsKICAg ICAgICAgICAgICAgIGlmKHRpLT5zZWFyY2hEYXRhICE9ICgodm9pZCAqKTApKSB7CiAgICAgICAg ICAgICAgICAgICAgU2RibUZsZERhdGFJZHggZGF0YUlkeDsKICAgICAgICAgICAgICAgICAgICBT ZGJtRmxkRGF0YUlkeCBzdWJEYXRhSWR4OwogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg ICAgICAgICAgICByZXRWYWwgPSAoKih0aS0+c2VhcmNoRGF0YSkpKHRibEgsIGZTcGVjLCB0aSwg cXVlcnksICZkYXRhSWR4LCAmc3ViRGF0YUlkeCk7CiAgICAgICAgICAgICAgICAgICAgaWYoKChy ZXRWYWwpID49IDApICYmIChyZXRWYWwgPT0gMSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg cmV0VmFsID0gU2RibUdldFJlY0Zyb21EYXRhSWR4KHRibEgsIGZTcGVjLCBkYXRhSWR4LCBzdWJE YXRhSWR4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGF0YVApOwogICAgICAgICAgICAgICAgICAgICAgICBpZigoKHJldFZhbCkgPj0gMCkp IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGFJZHhQKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICpkYXRhSWR4UCA9IGRhdGFJZHg7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZihzdWJEYXRhSWR4UCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqc3ViRGF0YUlkeFAgPSBzdWJEYXRhSWR4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAg cmV0VmFsID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgTG9nUHV0KDQs ICIlczolJCIsIF9fRlVOQ1RJT05fXywgIklsbGVnYWwgU2VhcmNoIFRhcmdldCIpOwogICAgICAg ICAgICAgICAgICAgIHJldFZhbCA9ICgtKDQxNjApKTsKICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIExvZ1B1dCg0LCAiJXM6JSQiLCBfX0ZVTkNU SU9OX18sICJJbGxlZ2FsIFF1ZXJyeSBDb25kaXRpb24iKTsKICAgICAgICAgICAgICAgIHJldFZh bCA9ICgtKDQxNzMpKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg IExvZ1B1dCg0LCAiJXM6JSQiLCBfX0ZVTkNUSU9OX18sICJJbGxlZ2FsIFNlYXJjaCBUYXJnZXQi KTsKICAgICAgICAgICAgcmV0VmFsID0gKC0oNDE2MCkpOwogICAgICAgIH0KICAgIH0KICAgIHJl dHVybiAocmV0VmFsKTsKfQoKaW50ClNkYm1LaWxsQWxsRGF0YShTZGJtVGFibGVIYW5kbGUqIHRi bEgsIFNkYm1EYXRhSWQgZGF0YUlkKQp7CiAgICBpbnQgcmV0VmFsID0gMDsKICAgIFNkYm1GbGRT cGVjKiBmU3BlYyA9ICgodm9pZCAqKTApOwogICAgU2RibUZsZE5vIGZsZE5vID0gZGF0YUlkLmku ZmxkTm87CiAgICA7CgogICAgZGF0YUlkLmkuZmxkTm8gPSAwOwogICAgcmV0VmFsID0gU2RibUdl dEZsZFNwZWModGJsSCwgZmxkTm8sICZmU3BlYyk7CiAgICBpZigoKHJldFZhbCkgPj0gMCkpIHsK ICAgICAgICBjb25zdCBTZGJtRmxkVHlwZUluZm8qIHRpID0gKGdTZGJtRmxkVHlwZXNbZlNwZWMt PmZsZFR5cGVdKTsKICAgICAgICBTZGJtUmVjRW50eSogcmVjID0gKCh2b2lkICopMCk7CiAgICAg ICAgU2RibUZsZEJvZHkqIGZsZDsKCiAgICAgICAgcmV0VmFsID0gU2RibUdldFJlY0VudHkodGJs SCwgZGF0YUlkLCAmcmVjKTsKICAgICAgICBpZigoKHJldFZhbCkgPj0gMCkpIHsKICAgICAgICAg ICAgQXRyZWVSZXEgcmVxOwogICAgICAgICAgICAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2Nv bnN0YW50X3AgKHNpemVvZihyZXEpKSAmJiAoc2l6ZW9mKHJlcSkpIDw9IDE2ID8gKChzaXplb2Yo cmVxKSkgPT0gMSA/ICh7IHZvaWQgKl9fcyA9ICgmcmVxKTsgKigoX191aW50OF90ICopIF9fcykg PSAoX191aW50OF90KSAwOyBfX3M7IH0pIDogKHsgdm9pZCAqX19zID0gKCZyZXEpOyB1bmlvbiB7 IHVuc2lnbmVkIGludCBfX3VpOyB1bnNpZ25lZCBzaG9ydCBpbnQgX191c2k7IHVuc2lnbmVkIGNo YXIgX191YzsgfSAqX191ID0gX19zOyBfX3VpbnQ4X3QgX19jID0gKF9fdWludDhfdCkgKDApOyBz d2l0Y2ggKCh1bnNpZ25lZCBpbnQpIChzaXplb2YocmVxKSkpIHsgY2FzZSAxNTogX191LT5fX3Vp ID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAq KSBfX3UgKyA0KTsgY2FzZSAxMTogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0g X19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSA3OiBfX3UtPl9f dWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFy ICopIF9fdSArIDQpOyBjYXNlIDM6IF9fdS0+X191c2kgPSAodW5zaWduZWQgc2hvcnQgaW50KSBf X2MgKiAweDAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsg Mik7IF9fdS0+X191YyA9ICh1bnNpZ25lZCBjaGFyKSBfX2M7IGJyZWFrOyBjYXNlIDE0OiBfX3Ut Pl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChj aGFyICopIF9fdSArIDQpOyBjYXNlIDEwOiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBf X3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDY6IF9f dS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKiko KGNoYXIgKikgX191ICsgNCk7IGNhc2UgMjogX191LT5fX3VzaSA9ICh1bnNpZ25lZCBzaG9ydCBp bnQpIF9fYyAqIDB4MDEwMTsgYnJlYWs7IGNhc2UgMTM6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEw MTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNh c2UgOTogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAo dm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSA1OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAx MDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBj YXNlIDE6IF9fdS0+X191YyA9ICh1bnNpZ25lZCBjaGFyKSBfX2M7IGJyZWFrOyBjYXNlIDE2OiBf X3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICop KChjaGFyICopIF9fdSArIDQpOyBjYXNlIDEyOiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAx OyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDg6 IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQg KikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgNDogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEw MTsgY2FzZSAwOiBicmVhazsgfSBfX3M7IH0pKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoMCkg JiYgKDApID09ICdcMCcgPyAoeyB2b2lkICpfX3MgPSAoJnJlcSk7IF9fYnVpbHRpbl9tZW1zZXQg KF9fcywgJ1wwJywgc2l6ZW9mKHJlcSkpOyBfX3M7IH0pIDogbWVtc2V0ICgmcmVxLCAwLCBzaXpl b2YocmVxKSkpKSk7CiAgICAgICAgICAgIGlmKGZTcGVjLT5mbGRJbmRleFRyZWUpIHsKICAgICAg ICAgICAgICAgIHJlcS5hdXhBcmcucHRyID0gdGJsSDsKICAgICAgICAgICAgICAgIHJlcS5vcHJz ID0gdGktPmF0cmVlT3ByczsKICAgICAgICAgICAgICAgIHJldFZhbCA9IEF0cmVlT3BlblRyZWUo JnJlcSwgZlNwZWMtPmZsZEluZGV4VHJlZSwgZlNwZWMtPmZsZEluZGV4VHJlZSk7CiAgICAgICAg ICAgIH0KICAgICAgICAgICAgaWYoKChyZXRWYWwpID49IDApKSB7CiAgICAgICAgICAgICAgICBT ZGJtRmxkRGF0YUlkeCB4aTsKICAgICAgICAgICAgICAgIHdoaWxlKCh4aSA9IFNkYm1GbGRzTmV4 dEZyb21SZWModGJsSCwgcmVjLCBmbGRObywgMCkpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0 VmFsID0gU2RibUdldEZsZEJvZHkodGJsSCwgeGksICZmbGQpOwogICAgICAgICAgICAgICAgICAg IGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZihmU3BlYy0+ ZmxkSW5kZXhUcmVlKSB7CgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsID0g QXRyZWVEZWxOb2RlQnlJZHgoJnJlcSwgZmxkLT5pbmRleE5vZGUpOwogICAgICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewog ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsID0gKCoodGktPmtpbGxEYXRhKSkodGJs SCwgZlNwZWMsICYoZmxkLT5jb250ZW50KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZigoKHJldFZhbCkgPj0gMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZGJt Rmxkc0RlbGV0ZUZyb21SZWModGJsSCwgcmVjLCBmbGRObywgeGkpOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFNkYm1GbGRzT3BySW5pdCgodGJsSCktPmZsZHMsIDEsIHhpKTsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZGJtRmxkc0FwcGVuZFRvRnJlZUxpc3QodGJs SCwgeGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNkYm1GbGRzU29ydERlbGV0 ZUZyb21SZWModGJsSCwgcmVjLCBmbGRObywgeGkpOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFNkYm1GbGRzU29ydE9wckluaXQoKHRibEgpLT5mbGRzLCAxLCB4aSk7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYoKChyZXRWYWwpIDwgMCkpIHsKICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYoZlNwZWMtPmZsZEluZGV4VHJlZSkgewogICAg ICAgICAgICAgICAgICAgIEF0cmVlQ2xvc2VUcmVlKCZyZXEpOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgU2RibVVwZGF0ZUxvZ0NsZWFyKHRibEgsIHJlYywgZlNwZWMpOwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIChyZXRWYWwpOwp9CgppbnQKU2Ri bUtpbGxEYXRhKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgU2RibURhdGFJZCBkYXRhSWQsIFNkYm1W ZWNGbGRJZHggdmVjSWR4KQp7CiAgICBpbnQgcmV0VmFsID0gMDsKICAgIFNkYm1GbGRTcGVjKiBm U3BlYyA9ICgodm9pZCAqKTApOwogICAgU2RibUZsZE5vIGZsZE5vID0gZGF0YUlkLmkuZmxkTm87 CiAgICA7CgogICAgZGF0YUlkLmkuZmxkTm8gPSAwOwogICAgcmV0VmFsID0gU2RibUdldEZsZFNw ZWModGJsSCwgZmxkTm8sICZmU3BlYyk7CiAgICBpZigoKHJldFZhbCkgPj0gMCkpIHsKICAgICAg ICBjb25zdCBTZGJtRmxkVHlwZUluZm8qIHRpID0gKGdTZGJtRmxkVHlwZXNbZlNwZWMtPmZsZFR5 cGVdKTsKICAgICAgICBTZGJtUmVjRW50eSogcmVjOwogICAgICAgIFNkYm1GbGRCb2R5KiBmbGQ7 CgogICAgICAgIHJldFZhbCA9IFNkYm1HZXRSZWNFbnR5KHRibEgsIGRhdGFJZCwgJnJlYyk7CiAg ICAgICAgaWYoKChyZXRWYWwpID49IDApKSB7CiAgICAgICAgICAgIFNkYm1GbGREYXRhSWR4IHhp OwogICAgICAgICAgICBTZGJtRmxkRGF0YUlkeCBkaSA9IFNkYm1HZXRGbGRXaXRoVmVjSWR4KHRi bEgsIHJlYywgZmxkTm8sIHZlY0lkeCwgJnhpKTsKICAgICAgICAgICAgaWYoKChkaSkgPj0gMCkp IHsKICAgICAgICAgICAgICAgIGlmKGRpICE9IDApIHsKICAgICAgICAgICAgICAgICAgICByZXRW YWwgPSBTZGJtR2V0RmxkQm9keSh0YmxILCBkaSwgJmZsZCk7CiAgICAgICAgICAgICAgICAgICAg aWYoKChyZXRWYWwpID49IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEF0cmVlUmVxIHJl cTsKICAgICAgICAgICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25z dGFudF9wIChzaXplb2YocmVxKSkgJiYgKHNpemVvZihyZXEpKSA8PSAxNiA/ICgoc2l6ZW9mKHJl cSkpID09IDEgPyAoeyB2b2lkICpfX3MgPSAoJnJlcSk7ICooKF9fdWludDhfdCAqKSBfX3MpID0g KF9fdWludDhfdCkgMDsgX19zOyB9KSA6ICh7IHZvaWQgKl9fcyA9ICgmcmVxKTsgdW5pb24geyB1 bnNpZ25lZCBpbnQgX191aTsgdW5zaWduZWQgc2hvcnQgaW50IF9fdXNpOyB1bnNpZ25lZCBjaGFy IF9fdWM7IH0gKl9fdSA9IF9fczsgX191aW50OF90IF9fYyA9IChfX3VpbnQ4X3QpICgwKTsgc3dp dGNoICgodW5zaWduZWQgaW50KSAoc2l6ZW9mKHJlcSkpKSB7IGNhc2UgMTU6IF9fdS0+X191aSA9 IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikg X191ICsgNCk7IGNhc2UgMTE6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9f ZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgNzogX191LT5fX3Vp ID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAq KSBfX3UgKyA0KTsgY2FzZSAzOiBfX3UtPl9fdXNpID0gKHVuc2lnbmVkIHNob3J0IGludCkgX19j ICogMHgwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDIp OyBfX3UtPl9fdWMgPSAodW5zaWduZWQgY2hhcikgX19jOyBicmVhazsgY2FzZSAxNDogX191LT5f X3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hh ciAqKSBfX3UgKyA0KTsgY2FzZSAxMDogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191 ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSA2OiBfX3Ut Pl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChj aGFyICopIF9fdSArIDQpOyBjYXNlIDI6IF9fdS0+X191c2kgPSAodW5zaWduZWQgc2hvcnQgaW50 KSBfX2MgKiAweDAxMDE7IGJyZWFrOyBjYXNlIDEzOiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEw MTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNl IDk6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZv aWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgNTogX191LT5fX3VpID0gX19jICogMHgwMTAx MDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2Fz ZSAxOiBfX3UtPl9fdWMgPSAodW5zaWduZWQgY2hhcikgX19jOyBicmVhazsgY2FzZSAxNjogX191 LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgo Y2hhciAqKSBfX3UgKyA0KTsgY2FzZSAxMjogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsg X191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSA4OiBf X3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICop KChjaGFyICopIF9fdSArIDQpOyBjYXNlIDQ6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7 IGNhc2UgMDogYnJlYWs7IH0gX19zOyB9KSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKDApICYm ICgwKSA9PSAnXDAnID8gKHsgdm9pZCAqX19zID0gKCZyZXEpOyBfX2J1aWx0aW5fbWVtc2V0IChf X3MsICdcMCcsIHNpemVvZihyZXEpKTsgX19zOyB9KSA6IG1lbXNldCAoJnJlcSwgMCwgc2l6ZW9m KHJlcSkpKSkpOwogICAgICAgICAgICAgICAgICAgICAgICBpZihmU3BlYy0+ZmxkSW5kZXhUcmVl KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEuYXV4QXJnLnB0ciA9IHRibEg7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXEub3BycyA9IHRpLT5hdHJlZU9wcnM7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwgPSBBdHJlZU9wZW5UcmVlKCZyZXEsIGZTcGVj LT5mbGRJbmRleFRyZWUsIGZTcGVjLT5mbGRJbmRleFRyZWUpOwogICAgICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYoZlNwZWMtPmZsZEluZGV4VHJlZSkgewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbCA9IEF0cmVlRGVsTm9kZUJ5SWR4KCZyZXEs IGZsZC0+aW5kZXhOb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHJlZUNs b3NlVHJlZSgmcmVxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJldFZhbCA9ICgqKHRpLT5raWxsRGF0YSkpKHRibEgsIGZTcGVjLCAm KGZsZC0+Y29udGVudCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoKChyZXRWYWwp ID49IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2RibUZsZHNEZWxldGVG cm9tUmVjKHRibEgsIHJlYywgZmxkTm8sIGRpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTZGJtRmxkc09wckluaXQoKHRibEgpLT5mbGRzLCAxLCBkaSk7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgU2RibUZsZHNBcHBlbmRUb0ZyZWVMaXN0KHRibEgsIGRpKTsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZGJtRmxkc1NvcnREZWxldGVGcm9tUmVjKHRi bEgsIHJlYywgZmxkTm8sIGRpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZGJt Rmxkc1NvcnRPcHJJbml0KCh0YmxIKS0+ZmxkcywgMSwgZGkpOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2RibVVwZGF0ZUxvZ0VyYXNl KHRibEgsIHJlYywgZlNwZWMsIHZlY0lkeCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7 CiAgICAgICAgICAgICAgICByZXRWYWwgPSBkaTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg IH0KICAgIHJldHVybiAocmV0VmFsKTsKfQoKaW50ClNkYm1TZXREYXRhKFNkYm1UYWJsZUhhbmRs ZSogdGJsSCwgU2RibURhdGFJZCBkYXRhSWQsIFNkYm1GbGRSZWYqIHRndERhdGFQKQp7CiAgICBp bnQgcmV0VmFsID0gMDsKICAgIFNkYm1GbGRTcGVjKiBmU3BlYyA9ICgodm9pZCAqKTApOwogICAg U2RibUZsZE5vIGZsZE5vID0gZGF0YUlkLmkuZmxkTm87CiAgICBTZGJtRmxkUmVmIHRndERhdGEg PSAqdGd0RGF0YVA7CiAgICBzMzIgZlR5cGUgPSB0Z3REYXRhLmZsZFR5cGU7CgogICAgOwogICAg ZGF0YUlkLmkuZmxkTm8gPSAwOwogICAgcmV0VmFsID0gU2RibUdldEZsZFNwZWModGJsSCwgZmxk Tm8sICZmU3BlYyk7CiAgICBpZigoKHJldFZhbCkgPj0gMCkpIHsKICAgICAgICBjb25zdCBTZGJt RmxkVHlwZUluZm8qIHRpOwogICAgICAgIFNkYm1SZWNFbnR5KiByZWM7CiAgICAgICAgQXRyZWVS ZXEgcmVxOwogICAgICAgIGlmKGZUeXBlID09IDApIHsKICAgICAgICAgICAgZlR5cGUgPSBmU3Bl Yy0+ZmxkVHlwZTsKICAgICAgICB9CiAgICAgICAgdGkgPSAoZ1NkYm1GbGRUeXBlc1tmVHlwZV0p OwogICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoc2l6ZW9mKHJl cSkpICYmIChzaXplb2YocmVxKSkgPD0gMTYgPyAoKHNpemVvZihyZXEpKSA9PSAxID8gKHsgdm9p ZCAqX19zID0gKCZyZXEpOyAqKChfX3VpbnQ4X3QgKikgX19zKSA9IChfX3VpbnQ4X3QpIDA7IF9f czsgfSkgOiAoeyB2b2lkICpfX3MgPSAoJnJlcSk7IHVuaW9uIHsgdW5zaWduZWQgaW50IF9fdWk7 IHVuc2lnbmVkIHNob3J0IGludCBfX3VzaTsgdW5zaWduZWQgY2hhciBfX3VjOyB9ICpfX3UgPSBf X3M7IF9fdWludDhfdCBfX2MgPSAoX191aW50OF90KSAoMCk7IHN3aXRjaCAoKHVuc2lnbmVkIGlu dCkgKHNpemVvZihyZXEpKSkgeyBjYXNlIDE1OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAx OyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDEx OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lk ICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDc6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAx MDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2Ug MzogX191LT5fX3VzaSA9ICh1bnNpZ25lZCBzaG9ydCBpbnQpIF9fYyAqIDB4MDEwMTsgX191ID0g X19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyAyKTsgX191LT5fX3VjID0gKHVu c2lnbmVkIGNoYXIpIF9fYzsgYnJlYWs7IGNhc2UgMTQ6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEw MTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNh c2UgMTA6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18g KHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgNjogX191LT5fX3VpID0gX19jICogMHgw MTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsg Y2FzZSAyOiBfX3UtPl9fdXNpID0gKHVuc2lnbmVkIHNob3J0IGludCkgX19jICogMHgwMTAxOyBi cmVhazsgY2FzZSAxMzogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRl bnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSA5OiBfX3UtPl9fdWkgPSBf X2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9f dSArIDQpOyBjYXNlIDU6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0 ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgMTogX191LT5fX3VjID0g KHVuc2lnbmVkIGNoYXIpIF9fYzsgYnJlYWs7IGNhc2UgMTY6IF9fdS0+X191aSA9IF9fYyAqIDB4 MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7 IGNhc2UgMTI6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9u X18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgODogX191LT5fX3VpID0gX19jICog MHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0 KTsgY2FzZSA0OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBjYXNlIDA6IGJyZWFrOyB9 IF9fczsgfSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wICgwKSAmJiAoMCkgPT0gJ1wwJyA/ICh7 IHZvaWQgKl9fcyA9ICgmcmVxKTsgX19idWlsdGluX21lbXNldCAoX19zLCAnXDAnLCBzaXplb2Yo cmVxKSk7IF9fczsgfSkgOiBtZW1zZXQgKCZyZXEsIDAsIHNpemVvZihyZXEpKSkpKTsKICAgICAg ICBpZihmU3BlYy0+ZmxkSW5kZXhUcmVlKSB7CiAgICAgICAgICAgIHJlcS5hdXhBcmcucHRyID0g dGJsSDsKICAgICAgICAgICAgcmVxLm9wcnMgPSB0aS0+YXRyZWVPcHJzOwogICAgICAgICAgICBy ZXRWYWwgPSBBdHJlZU9wZW5UcmVlKCZyZXEsIGZTcGVjLT5mbGRJbmRleFRyZWUsIDApOwogICAg ICAgIH0KICAgICAgICBpZigoKHJldFZhbCkgPj0gMCkpIHsKICAgICAgICAgICAgcmV0VmFsID0g U2RibUdldFJlY0VudHkodGJsSCwgZGF0YUlkLCAmcmVjKTsKICAgICAgICAgICAgaWYoKChyZXRW YWwpID49IDApKSB7CiAgICAgICAgICAgICAgICBTZGJtRmxkRGF0YUlkeCBkaSA9IDAsIG5ldyA9 IDAsIGluc0lkeCA9IDA7CiAgICAgICAgICAgICAgICBTZGJtVmVjRmxkSWR4IHZpID0gdGd0RGF0 YS52ZWNJZHg7CiAgICAgICAgICAgICAgICBTZGJtRmxkQm9keSogZmxkOwogICAgICAgICAgICAg ICAgaWYodmkpIHsKICAgICAgICAgICAgICAgICAgICBkaSA9IFNkYm1HZXRGbGRXaXRoVmVjSWR4 KHRibEgsIHJlYywgZmxkTm8sIHZpLCAmaW5zSWR4KTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7 CiAgICAgICAgICAgICAgICAgICAgdmkgPSBTZGJtR2V0TmV3VmVjSWR4KHRibEgsIHJlYywgZmxk Tm8sICZpbnNJZHgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgOwogICAgICAg ICAgICAgICAgaWYoISBkaSkgewogICAgICAgICAgICAgICAgICAgIGRpID0gbmV3ID0gU2RibUFs bG9jTmV3RmxkKHRibEgsICZmbGQpOwogICAgICAgICAgICAgICAgICAgIGlmKCgoZGkpID49IDAp KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFNkYm1GbGRzT3BySW5pdCgodGJsSCktPmZsZHMs IDEsIGRpKTsKICAgICAgICAgICAgICAgICAgICAgICAgZmxkLT5yZWNJZHggPSBkYXRhSWQuaS5y ZWNJZHg7CiAgICAgICAgICAgICAgICAgICAgICAgIGZsZC0+ZmxkTm8gPSBmbGRObzsKICAgICAg ICAgICAgICAgICAgICAgICAgZmxkLT52ZWN0b3JJZHggPSB2aTsKICAgICAgICAgICAgICAgICAg ICAgICAgOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg ICAgIHJldFZhbCA9IGRpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0g ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0VmFsID0gU2RibUdldEZsZEJvZHkodGJsSCwg ZGksICZmbGQpOwogICAgICAgICAgICAgICAgICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAg ICAgICAgICAgICAgICAgICAgICByZXRWYWwgPSAoKih0aS0+Y29tcGFyZURhdGFFeHRlcm5hbCkp KHRibEgsIGZTcGVjLCAmdGd0RGF0YSwgZGkpOwogICAgICAgICAgICAgICAgICAgICAgICA7CiAg ICAgICAgICAgICAgICAgICAgICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYocmV0VmFsID09IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZihmU3BlYy0+ZmxkSW5kZXhUcmVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEF0cmVlQ2xvc2VUcmVlKCZyZXEpOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihuZXcpIHsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2RibUZsZHNBcHBlbmRUb0ZyZWVMaXN0 KHRibEgsIG5ldyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocmV0VmFsKTsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJldFZhbCAhPSAyKSB7 CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihmU3BlYy0+ZmxkSW5kZXhUcmVl KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbCA9IEF0cmVlRGVs Tm9kZUJ5SWR4KCZyZXEsIGZsZC0+aW5kZXhOb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoKChyZXRWYWwpID49 IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbCA9ICgqKHRp LT5raWxsRGF0YSkpKHRibEgsIGZTcGVjLCAmKGZsZC0+Y29udGVudCkpOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZGJt Rmxkc1NvcnREZWxldGVGcm9tUmVjKHRibEgsIHJlYywgZmxkTm8sIGRpKTsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKCgocmV0VmFsKSA+ PSAwKSkgewogICAgICAgICAgICAgICAgICAgIFNkYm1GbGRJZHhEYXRhIGlkeERhdGE7CiAgICAg ICAgICAgICAgICAgICAgaWYoZlNwZWMtPmZsZEluZGV4VHJlZSkgewogICAgICAgICAgICAgICAg ICAgICAgICBBdHJlZUNsb3NlVHJlZSgmcmVxKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgICAgcmV0VmFsID0gKCoodGktPm1ha2VEYXRhKSkodGJsSCwgJnRndERhdGEs IGZTcGVjLCBkYXRhSWQsIGRpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICYoZmxkLT5jb250ZW50KSwgJmlkeERhdGEpOwogICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgICAgICAgICAgICBpZigoKHJldFZhbCkgPj0gMCkpIHsKICAgICAgICAgICAg ICAgICAgICAgICAgaWYoZlNwZWMtPmZsZEluZGV4VHJlZSkgewogICAgICAgICAgICAgICAgICAg ICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChzaXplb2YocmVx KSkgJiYgKHNpemVvZihyZXEpKSA8PSAxNiA/ICgoc2l6ZW9mKHJlcSkpID09IDEgPyAoeyB2b2lk ICpfX3MgPSAoJnJlcSk7ICooKF9fdWludDhfdCAqKSBfX3MpID0gKF9fdWludDhfdCkgMDsgX19z OyB9KSA6ICh7IHZvaWQgKl9fcyA9ICgmcmVxKTsgdW5pb24geyB1bnNpZ25lZCBpbnQgX191aTsg dW5zaWduZWQgc2hvcnQgaW50IF9fdXNpOyB1bnNpZ25lZCBjaGFyIF9fdWM7IH0gKl9fdSA9IF9f czsgX191aW50OF90IF9fYyA9IChfX3VpbnQ4X3QpICgwKTsgc3dpdGNoICgodW5zaWduZWQgaW50 KSAoc2l6ZW9mKHJlcSkpKSB7IGNhc2UgMTU6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7 IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgMTE6 IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQg KikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgNzogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEw MTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSAz OiBfX3UtPl9fdXNpID0gKHVuc2lnbmVkIHNob3J0IGludCkgX19jICogMHgwMTAxOyBfX3UgPSBf X2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDIpOyBfX3UtPl9fdWMgPSAodW5z aWduZWQgY2hhcikgX19jOyBicmVhazsgY2FzZSAxNDogX191LT5fX3VpID0gX19jICogMHgwMTAx MDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2Fz ZSAxMDogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAo dm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSA2OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAx MDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBj YXNlIDI6IF9fdS0+X191c2kgPSAodW5zaWduZWQgc2hvcnQgaW50KSBfX2MgKiAweDAxMDE7IGJy ZWFrOyBjYXNlIDEzOiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVu c2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDk6IF9fdS0+X191aSA9IF9f YyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191 ICsgNCk7IGNhc2UgNTogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRl bnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSAxOiBfX3UtPl9fdWMgPSAo dW5zaWduZWQgY2hhcikgX19jOyBicmVhazsgY2FzZSAxNjogX191LT5fX3VpID0gX19jICogMHgw MTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsg Y2FzZSAxMjogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25f XyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSA4OiBfX3UtPl9fdWkgPSBfX2MgKiAw eDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQp OyBjYXNlIDQ6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IGNhc2UgMDogYnJlYWs7IH0g X19zOyB9KSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKDApICYmICgwKSA9PSAnXDAnID8gKHsg dm9pZCAqX19zID0gKCZyZXEpOyBfX2J1aWx0aW5fbWVtc2V0IChfX3MsICdcMCcsIHNpemVvZihy ZXEpKTsgX19zOyB9KSA6IG1lbXNldCAoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpKSkpOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVxLmF1eEFyZy5wdHIgPSB0YmxIOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmVxLm9wcnMgPSB0aS0+YXRyZWVPcHJzOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmV0VmFsID0gQXRyZWVPcGVuVHJlZSgmcmVxLCBmU3BlYy0+ZmxkSW5kZXhU cmVlLCBmU3BlYy0+ZmxkSW5kZXhUcmVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm KCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZh bCA9IEF0cmVlTmV3Tm9kZSgmcmVxLCBpZHhEYXRhLnZhbHVlLCAxLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKGZsZC0+aW5kZXhOb2RlKSk7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYoKChyZXRWYWwpID49 IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGluc0lkeCkgewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgU2RibUZsZEJvZHkqIGZsZHggPSAoKHZvaWQgKikwKTsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJldFZhbCA9IFNkYm1HZXRGbGRCb2R5KHRibEgsIGluc0lkeCwg JmZsZHgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoKChyZXRWYWwpID49IDApKSB7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2RibUZsZERhdGFJZHggc29ydFRvcDsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZGJtVXBkYXRlTG9nU2V0KHRibEgsIHJl YywgZlNwZWMsIGZsZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobmV3KSB7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZsZHgtPnZlY3RvcklkeCA8 IHZpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZGJtRmxkc09w ckluc2VydChmbGR4LCBpbnNJZHgsIGRpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNk Ym1GbGRzT3ByQXBwZW5kKGZsZHgsIGluc0lkeCwgZGkpOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9CgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmVjLT5mbGRQdHJzW2ZsZE5vLTFdLm51bUVsbXMgKys7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZihyZWMtPmZsZFB0cnNbZmxkTm8tMV0udmVjSWR4TGlzdCA9 PSBpbnNJZHgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZmxkeC0+dmVjdG9ySWR4ID4gdmkpIHsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYy0+ZmxkUHRyc1tmbGRO by0xXS52ZWNJZHhMaXN0ID0gZGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgU2RibUZsZHNTb3J0T3BySW5pdCgodGJsSCktPmZsZHMsIDEsIGRpKTsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0VG9wID0gU2RibUZsZHNTb3J0TmV4dEZy b21SZWModGJsSCwgcmVjLCBmbGRObywgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNvcnRUb3ApIHsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zSWR4ID0gc29ydFRvcDsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IGNjID0gKCoodGktPmNvbXBhcmVEYXRhSW50ZXJuYWwpKSh0YmxI LCBkaSwgaW5zSWR4KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNjID09IDMpIHsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNJZHggPSBTZGJtRmxk c1NvcnROZXh0RnJvbVJlYyh0YmxILCByZWMsIGZsZE5vLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu c0lkeCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9IHdoaWxlIChzb3J0VG9wICE9IGluc0lkeCk7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFNkYm1HZXRGbGRCb2R5KHRibEgsIGluc0lkeCwgJmZsZHgp OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZGJtRmxkc1NvcnRPcHJBcHBl bmQoZmxkeCwgaW5zSWR4LCBkaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBTZGJtRmxkc1NvcnRJbnNlcnRUb1JlYyh0YmxILCByZWMs IGZsZE5vLCBkaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVjLT5mbGRQdHJzW2ZsZE5vLTFdLnZlY0lkeExpc3Qg PSBkaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYy0+ZmxkUHRyc1tmbGROby0xXS5z b3J0ZWRMaXN0ID0gZGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWMtPmZsZFB0cnNb ZmxkTm8tMV0ubnVtRWxtcyArKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNkYm1VcGRh dGVMb2dTZXQodGJsSCwgcmVjLCBmU3BlYywgZmxkKTsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFNkYm1GbGRzU29ydE9wckluaXQoKHRibEgpLT5mbGRzLCAxLCBkaSk7CiAgICAgICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZmxkLT5tb2RpZnlUaW1lID0g QXRpbWVHZXQoKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg ICAgICAgICBpZihuZXcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNkYm1GbGRzQXBw ZW5kVG9GcmVlTGlzdCh0YmxILCBuZXcpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAg ICAgIGlmKGZTcGVjLT5mbGRJbmRleFRyZWUpIHsKICAgICAgICAgICAgICAgIEF0cmVlQ2xvc2VU cmVlKCZyZXEpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgaWYoKChyZXRWYWwp IDwgMCkpIHsKICAgICAgICBMb2dQdXQoNCwgIlNkYm1TZXREYXRhOiBmYWlsZWQoJWQpIGluIFRh YmxlKCV1KSBSZWNvcmQoMHgleCwweCV4KSBGaWVsZCgldSlcbiIsCiAgICAgICAgICAgICAgIHJl dFZhbCwgdGJsSC0+dGJsTm8sIGRhdGFJZC5pLnJlY0lkeCwgZGF0YUlkLmkucmV2aXNpb24sIGZs ZE5vKTsKICAgIH0KICAgIHJldHVybiAocmV0VmFsKTsKfQoKaW50ClNkYm1HZXREYXRhcyhTZGJt VGFibGVIYW5kbGUqIHRibEgsIFNkYm1EYXRhSWQgZGF0YUlkLAogICAgICAgICAgICAgTnVtIG51 bURhdGFBcmVhcywgU2RibUZsZFJlZiBmbGREYXRhc1tdLCBCb29sIGluc2lkZUFsbG9jYXRpb24p CnsKICAgIE51bSByZXRWYWwgPSAwOwogICAgczMyIG1heElkeCA9IDA7CiAgICBTZGJtRmxkU3Bl YyogZlNwZWMgPSAoKHZvaWQgKikwKTsKICAgIFNkYm1GbGRObyBmbGRObyA9IGRhdGFJZC5pLmZs ZE5vOwoKICAgIDsKICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoc2l6 ZW9mKFNkYm1GbGRSZWYpICogbnVtRGF0YUFyZWFzKSAmJiAoc2l6ZW9mKFNkYm1GbGRSZWYpICog bnVtRGF0YUFyZWFzKSA8PSAxNiA/ICgoc2l6ZW9mKFNkYm1GbGRSZWYpICogbnVtRGF0YUFyZWFz KSA9PSAxID8gKHsgdm9pZCAqX19zID0gKGZsZERhdGFzKTsgKigoX191aW50OF90ICopIF9fcykg PSAoX191aW50OF90KSAwOyBfX3M7IH0pIDogKHsgdm9pZCAqX19zID0gKGZsZERhdGFzKTsgdW5p b24geyB1bnNpZ25lZCBpbnQgX191aTsgdW5zaWduZWQgc2hvcnQgaW50IF9fdXNpOyB1bnNpZ25l ZCBjaGFyIF9fdWM7IH0gKl9fdSA9IF9fczsgX191aW50OF90IF9fYyA9IChfX3VpbnQ4X3QpICgw KTsgc3dpdGNoICgodW5zaWduZWQgaW50KSAoc2l6ZW9mKFNkYm1GbGRSZWYpICogbnVtRGF0YUFy ZWFzKSkgeyBjYXNlIDE1OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4 dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDExOiBfX3UtPl9fdWkg PSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICop IF9fdSArIDQpOyBjYXNlIDc6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9f ZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgMzogX191LT5fX3Vz aSA9ICh1bnNpZ25lZCBzaG9ydCBpbnQpIF9fYyAqIDB4MDEwMTsgX191ID0gX19leHRlbnNpb25f XyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyAyKTsgX191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIp IF9fYzsgYnJlYWs7IGNhc2UgMTQ6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9 IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgMTA6IF9fdS0+ X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNo YXIgKikgX191ICsgNCk7IGNhc2UgNjogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191 ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSAyOiBfX3Ut Pl9fdXNpID0gKHVuc2lnbmVkIHNob3J0IGludCkgX19jICogMHgwMTAxOyBicmVhazsgY2FzZSAx MzogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9p ZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSA5OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEw MTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNl IDU6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZv aWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgMTogX191LT5fX3VjID0gKHVuc2lnbmVkIGNo YXIpIF9fYzsgYnJlYWs7IGNhc2UgMTY6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9f dSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgMTI6IF9f dS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKiko KGNoYXIgKikgX191ICsgNCk7IGNhc2UgODogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsg X191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSA0OiBf X3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBjYXNlIDA6IGJyZWFrOyB9IF9fczsgfSkpIDog KF9fYnVpbHRpbl9jb25zdGFudF9wICgwKSAmJiAoMCkgPT0gJ1wwJyA/ICh7IHZvaWQgKl9fcyA9 IChmbGREYXRhcyk7IF9fYnVpbHRpbl9tZW1zZXQgKF9fcywgJ1wwJywgc2l6ZW9mKFNkYm1GbGRS ZWYpICogbnVtRGF0YUFyZWFzKTsgX19zOyB9KSA6IG1lbXNldCAoZmxkRGF0YXMsIDAsIHNpemVv ZihTZGJtRmxkUmVmKSAqIG51bURhdGFBcmVhcykpKSk7CiAgICBkYXRhSWQuaS5mbGRObyA9IDA7 CiAgICByZXRWYWwgPSBTZGJtR2V0RmxkU3BlYyh0YmxILCBmbGRObywgJmZTcGVjKTsKICAgIGlm KCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgIGNvbnN0IFNkYm1GbGRUeXBlSW5mbyogdGkgPSAo Z1NkYm1GbGRUeXBlc1tmU3BlYy0+ZmxkVHlwZV0pOwogICAgICAgIFNkYm1SZWNFbnR5KiByZWM7 CgogICAgICAgIGlmKGluc2lkZUFsbG9jYXRpb24pIHsKICAgICAgICAgICAgdGkgPSAoZ1NkYm1G bGRUeXBlc1tmU3BlYy0+ZmxkVHlwZV0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlu dCBmdCA9IGZsZERhdGFzWzBdLmZsZFR5cGU7CiAgICAgICAgICAgIHRpID0gKGdTZGJtRmxkVHlw ZXNbKChmdCkgJiAweEZGKV0pOwogICAgICAgICAgICBpZighIHRpKSB7CiAgICAgICAgICAgICAg ICB0aSA9IChnU2RibUZsZFR5cGVzW2ZTcGVjLT5mbGRUeXBlXSk7CiAgICAgICAgICAgIH0gZWxz ZSBpZih0aS0+Zm10VHlwZSAhPSBmU3BlYy0+ZmxkVHlwZSkgewogICAgICAgICAgICAgICAgcmV0 VmFsID0gKC0oNDE2MCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKCgocmV0 VmFsKSA+PSAwKSkgewogICAgICAgICAgICByZXRWYWwgPSBTZGJtR2V0UmVjRW50eSh0YmxILCBk YXRhSWQsICZyZWMpOwogICAgICAgICAgICBpZigoKHJldFZhbCkgPj0gMCkpIHsKICAgICAgICAg ICAgICAgIHJldFZhbCA9IFNkYm1NYXBUYmxQbGFpbih0YmxILCAzKTsKICAgICAgICAgICAgICAg IGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgICAgICAgICAgICAgIFNkYm1GbGREYXRhSWR4 IGRhdGFJZHggPSBTZGJtRmxkc05leHRGcm9tUmVjKHRibEgsIHJlYywgZmxkTm8sIDApOwogICAg ICAgICAgICAgICAgICAgIGlmKGluc2lkZUFsbG9jYXRpb24pIHsKICAgICAgICAgICAgICAgICAg ICAgICAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChzaXplb2YoKmZsZERh dGFzKSpudW1EYXRhQXJlYXMpICYmIChzaXplb2YoKmZsZERhdGFzKSpudW1EYXRhQXJlYXMpIDw9 IDE2ID8gKChzaXplb2YoKmZsZERhdGFzKSpudW1EYXRhQXJlYXMpID09IDEgPyAoeyB2b2lkICpf X3MgPSAoZmxkRGF0YXMpOyAqKChfX3VpbnQ4X3QgKikgX19zKSA9IChfX3VpbnQ4X3QpIDA7IF9f czsgfSkgOiAoeyB2b2lkICpfX3MgPSAoZmxkRGF0YXMpOyB1bmlvbiB7IHVuc2lnbmVkIGludCBf X3VpOyB1bnNpZ25lZCBzaG9ydCBpbnQgX191c2k7IHVuc2lnbmVkIGNoYXIgX191YzsgfSAqX191 ID0gX19zOyBfX3VpbnQ4X3QgX19jID0gKF9fdWludDhfdCkgKDApOyBzd2l0Y2ggKCh1bnNpZ25l ZCBpbnQpIChzaXplb2YoKmZsZERhdGFzKSpudW1EYXRhQXJlYXMpKSB7IGNhc2UgMTU6IF9fdS0+ X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNo YXIgKikgX191ICsgNCk7IGNhc2UgMTE6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9f dSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgNzogX191 LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgo Y2hhciAqKSBfX3UgKyA0KTsgY2FzZSAzOiBfX3UtPl9fdXNpID0gKHVuc2lnbmVkIHNob3J0IGlu dCkgX19jICogMHgwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9f dSArIDIpOyBfX3UtPl9fdWMgPSAodW5zaWduZWQgY2hhcikgX19jOyBicmVhazsgY2FzZSAxNDog X191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAq KSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSAxMDogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEw MTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSA2 OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lk ICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDI6IF9fdS0+X191c2kgPSAodW5zaWduZWQgc2hv cnQgaW50KSBfX2MgKiAweDAxMDE7IGJyZWFrOyBjYXNlIDEzOiBfX3UtPl9fdWkgPSBfX2MgKiAw eDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQp OyBjYXNlIDk6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9u X18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgNTogX191LT5fX3VpID0gX19jICog MHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0 KTsgY2FzZSAxOiBfX3UtPl9fdWMgPSAodW5zaWduZWQgY2hhcikgX19jOyBicmVhazsgY2FzZSAx NjogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9p ZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSAxMjogX191LT5fX3VpID0gX19jICogMHgwMTAx MDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2Fz ZSA4OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2 b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDQ6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEw MTAxMDE7IGNhc2UgMDogYnJlYWs7IH0gX19zOyB9KSkgOiAoX19idWlsdGluX2NvbnN0YW50X3Ag KDApICYmICgwKSA9PSAnXDAnID8gKHsgdm9pZCAqX19zID0gKGZsZERhdGFzKTsgX19idWlsdGlu X21lbXNldCAoX19zLCAnXDAnLCBzaXplb2YoKmZsZERhdGFzKSpudW1EYXRhQXJlYXMpOyBfX3M7 IH0pIDogbWVtc2V0IChmbGREYXRhcywgMCwgc2l6ZW9mKCpmbGREYXRhcykqbnVtRGF0YUFyZWFz KSkpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YUlk eCkgewogICAgICAgICAgICAgICAgICAgICAgICBTZGJtRmxkRGF0YUlkeCB0b3BJZHggPSBkYXRh SWR4OwogICAgICAgICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTZGJtRmxkQm9keSogZmxkID0gKCh2b2lkICopMCk7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXRWYWwgPSBTZGJtR2V0RmxkQm9keSh0YmxILCBkYXRhSWR4LCAmZmxkKTsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmKGZsZC0+dmVjdG9ySWR4IDw9IG51bURhdGFBcmVhcykg ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZGJtRmxkUmVmKiBmUmVmOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmUmVmID0gZmxkRGF0YXMgKyAoKGZs ZC0+dmVjdG9ySWR4KS0xKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZlJl Zi0+dmVjSWR4ID0gZmxkLT52ZWN0b3JJZHg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZSZWYtPmZsZFR5cGUgPSBmU3BlYy0+ZmxkVHlwZTsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0VmFsID0gKCoodGktPnN0b3JlRGF0YSkpKHRibEgsIGZTcGVj LCAmKGZsZC0+Y29udGVudCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmUmVmLCBpbnNpZGVBbGxvY2F0aW9uKTsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoKChyZXRWYWwpID49IDApKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihtYXhJZHggPCBmbGQtPnZlY3Rv cklkeCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heElk eCA9IGZsZC0+dmVjdG9ySWR4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYoKChyZXRWYWwpIDwgMCkpIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFJZHggPSBTZGJtRmxkc05leHRGcm9tUmVjKHRi bEgsIHJlYywgZmxkTm8sIGRhdGFJZHgpOwogICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxl KHRvcElkeCAhPSBkYXRhSWR4KTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoKChyZXRWYWwp ID49IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwgPSBtYXhJZHg7CiAg ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg ICAgICAgICAgICAgICAgICAgICByZXRWYWwgPSAwOwogICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAo cmV0VmFsKTsKfQoKaW50ClNkYm1HZXRBRGF0YShTZGJtVGFibGVIYW5kbGUqIHRibEgsIFNkYm1E YXRhSWQgZGF0YUlkLAogICAgICAgICAgICAgU2RibVZlY0ZsZElkeCB2ZWNJZHgsIFNkYm1GbGRS ZWYqIGZsZERhdGEsIEJvb2wgaW5zaWRlQWxsb2NhdGlvbikKewogICAgTnVtIHJldFZhbCA9IDA7 CiAgICBTZGJtRmxkU3BlYyogZlNwZWMgPSAoKHZvaWQgKikwKTsKICAgIFNkYm1GbGRObyBmbGRO byA9IGRhdGFJZC5pLmZsZE5vOwoKICAgIDsKICAgIGRhdGFJZC5pLmZsZE5vID0gMDsKICAgIHJl dFZhbCA9IFNkYm1HZXRGbGRTcGVjKHRibEgsIGZsZE5vLCAmZlNwZWMpOwogICAgaWYoKChyZXRW YWwpID49IDApKSB7CiAgICAgICAgY29uc3QgU2RibUZsZFR5cGVJbmZvKiB0aTsKICAgICAgICBT ZGJtUmVjRW50eSogcmVjOwoKICAgICAgICBpZihpbnNpZGVBbGxvY2F0aW9uKSB7CiAgICAgICAg ICAgIHRpID0gKGdTZGJtRmxkVHlwZXNbZlNwZWMtPmZsZFR5cGVdKTsKICAgICAgICB9IGVsc2Ug ewogICAgICAgICAgICBpbnQgZnQgPSBmbGREYXRhLT5mbGRUeXBlOwogICAgICAgICAgICB0aSA9 IChnU2RibUZsZFR5cGVzWygoZnQpICYgMHhGRildKTsKICAgICAgICAgICAgaWYoISB0aSkgewog ICAgICAgICAgICAgICAgdGkgPSAoZ1NkYm1GbGRUeXBlc1tmU3BlYy0+ZmxkVHlwZV0pOwogICAg ICAgICAgICB9IGVsc2UgaWYodGktPmZtdFR5cGUgIT0gZlNwZWMtPmZsZFR5cGUpIHsKICAgICAg ICAgICAgICAgIHJldFZhbCA9ICgtKDQxNjApKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgICBpZigoKHJldFZhbCkgPj0gMCkpIHsKICAgICAgICAgICAgcmV0VmFsID0gU2RibUdldFJl Y0VudHkodGJsSCwgZGF0YUlkLCAmcmVjKTsKICAgICAgICAgICAgaWYoKChyZXRWYWwpID49IDAp KSB7CiAgICAgICAgICAgICAgICByZXRWYWwgPSBTZGJtTWFwVGJsUGxhaW4odGJsSCwgMyk7CiAg ICAgICAgICAgICAgICBpZigoKHJldFZhbCkgPj0gMCkpIHsKICAgICAgICAgICAgICAgICAgICBT ZGJtRmxkRGF0YUlkeCBkYXRhSWR4ID0gU2RibUZsZHNOZXh0RnJvbVJlYyh0YmxILCByZWMsIGZs ZE5vLCAwKTsKICAgICAgICAgICAgICAgICAgICBpZihpbnNpZGVBbGxvY2F0aW9uKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAo c2l6ZW9mKCpmbGREYXRhKSkgJiYgKHNpemVvZigqZmxkRGF0YSkpIDw9IDE2ID8gKChzaXplb2Yo KmZsZERhdGEpKSA9PSAxID8gKHsgdm9pZCAqX19zID0gKGZsZERhdGEpOyAqKChfX3VpbnQ4X3Qg KikgX19zKSA9IChfX3VpbnQ4X3QpIDA7IF9fczsgfSkgOiAoeyB2b2lkICpfX3MgPSAoZmxkRGF0 YSk7IHVuaW9uIHsgdW5zaWduZWQgaW50IF9fdWk7IHVuc2lnbmVkIHNob3J0IGludCBfX3VzaTsg dW5zaWduZWQgY2hhciBfX3VjOyB9ICpfX3UgPSBfX3M7IF9fdWludDhfdCBfX2MgPSAoX191aW50 OF90KSAoMCk7IHN3aXRjaCAoKHVuc2lnbmVkIGludCkgKHNpemVvZigqZmxkRGF0YSkpKSB7IGNh c2UgMTU6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18g KHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgMTE6IF9fdS0+X191aSA9IF9fYyAqIDB4 MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7 IGNhc2UgNzogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25f XyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSAzOiBfX3UtPl9fdXNpID0gKHVuc2ln bmVkIHNob3J0IGludCkgX19jICogMHgwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICop KChjaGFyICopIF9fdSArIDIpOyBfX3UtPl9fdWMgPSAodW5zaWduZWQgY2hhcikgX19jOyBicmVh azsgY2FzZSAxNDogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNp b25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSAxMDogX191LT5fX3VpID0gX19j ICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3Ug KyA0KTsgY2FzZSA2OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVu c2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDI6IF9fdS0+X191c2kgPSAo dW5zaWduZWQgc2hvcnQgaW50KSBfX2MgKiAweDAxMDE7IGJyZWFrOyBjYXNlIDEzOiBfX3UtPl9f dWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFy ICopIF9fdSArIDQpOyBjYXNlIDk6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9 IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgNTogX191LT5f X3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hh ciAqKSBfX3UgKyA0KTsgY2FzZSAxOiBfX3UtPl9fdWMgPSAodW5zaWduZWQgY2hhcikgX19jOyBi cmVhazsgY2FzZSAxNjogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRl bnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSAxMjogX191LT5fX3VpID0g X19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBf X3UgKyA0KTsgY2FzZSA4OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4 dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDQ6IF9fdS0+X191aSA9 IF9fYyAqIDB4MDEwMTAxMDE7IGNhc2UgMDogYnJlYWs7IH0gX19zOyB9KSkgOiAoX19idWlsdGlu X2NvbnN0YW50X3AgKDApICYmICgwKSA9PSAnXDAnID8gKHsgdm9pZCAqX19zID0gKGZsZERhdGEp OyBfX2J1aWx0aW5fbWVtc2V0IChfX3MsICdcMCcsIHNpemVvZigqZmxkRGF0YSkpOyBfX3M7IH0p IDogbWVtc2V0IChmbGREYXRhLCAwLCBzaXplb2YoKmZsZERhdGEpKSkpKTsKICAgICAgICAgICAg ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBmbGREYXRhLT52ZWNJZHgg PSAwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZihkYXRhSWR4 KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFNkYm1GbGRCb2R5KiBmbGQgPSAoKHZvaWQgKikw KTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYodmVjSWR4ID4gMCkgewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgU2RibUZsZERhdGFJZHggdG9wSWR4ID0gZGF0YUlkeDsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXRWYWwgPSBTZGJtR2V0RmxkQm9keSh0YmxILCBkYXRhSWR4LCAmZmxkKTsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZigoKHJldFZhbCkgPj0gMCkpIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYoZmxkLT52ZWN0b3JJZHggPT0gdmVjSWR4KSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGREYXRhLT52ZWNJZHggPSBmbGQt PnZlY3RvcklkeDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZERh dGEtPmZsZFR5cGUgPSBmU3BlYy0+ZmxkVHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJldFZhbCA9ICgqKHRpLT5zdG9yZURhdGEpKSh0YmxILCBmU3BlYywgJihm bGQtPmNvbnRlbnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZsZERhdGEsIGluc2lkZUFsbG9jYXRpb24pOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoKChyZXRWYWwpID49IDApKSB7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsID0gMTsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmKCgocmV0VmFsKSA8IDApKSB7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhSWR4ID0gU2RibUZsZHNO ZXh0RnJvbVJlYyh0YmxILCByZWMsIGZsZE5vLCBkYXRhSWR4KTsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0gd2hpbGUodG9wSWR4ICE9IGRhdGFJZHgpOwoKICAgICAgICAgICAgICAgICAg ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbCA9IFNkYm1H ZXRGbGRCb2R5KHRibEgsIGRhdGFJZHgsICZmbGQpOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYoKChyZXRWYWwpID49IDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZmxkRGF0YS0+dmVjSWR4ID0gZmxkLT52ZWN0b3JJZHg7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZmxkRGF0YS0+ZmxkVHlwZSA9IGZTcGVjLT5mbGRUeXBlOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJldFZhbCA9ICgqKHRpLT5zdG9yZURhdGEpKSh0YmxILCBmU3Bl YywgJihmbGQtPmNvbnRlbnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmbGREYXRhLCBpbnNpZGVBbGxvY2F0aW9uKTsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZigoKHJldFZhbCkgPj0gMCkpIHsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsID0gMTsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg ICAgICAgICAgICByZXRWYWwgPSAwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAocmV0VmFsKTsK fQoKaW50ClNkYm1JbnF1aXJ5RGF0YXMoU2RibVRhYmxlSGFuZGxlKiB0YmxILCBjb25zdCBTZGJt UXVlcnlDb25kKiBxdWVyeSwKICAgICAgICAgICAgICAgICBTZGJtRGF0YUlkIGRhdGFJZCkKewog ICAgaW50IHJldFZhbCA9IDA7CiAgICBTZGJtRmxkU3BlYyogZlNwZWMgPSAoKHZvaWQgKikwKTsK ICAgIFNkYm1GbGRObyBmbGRObzsKICAgIDsKCiAgICBmbGRObyA9IHF1ZXJ5LT5mbGRObzsKICAg IHJldFZhbCA9IFNkYm1HZXRGbGRTcGVjKHRibEgsIGZsZE5vLCAmZlNwZWMpOwogICAgaWYoKChy ZXRWYWwpID49IDApKSB7CiAgICAgICAgY29uc3QgU2RibUZsZFR5cGVJbmZvKiB0aTsKICAgICAg ICBpZihmU3BlYy0+ZmxkVHlwZSAhPSAweDgwKSB7CiAgICAgICAgICAgIGlmKHF1ZXJ5LT5jb25k VmFsdWUuZmxkVHlwZSA9PSAwKSB7CiAgICAgICAgICAgICAgICB0aSA9IChnU2RibUZsZFR5cGVz W2ZTcGVjLT5mbGRUeXBlXSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0 aSA9IChnU2RibUZsZFR5cGVzW3F1ZXJ5LT5jb25kVmFsdWUuZmxkVHlwZV0pOwogICAgICAgICAg ICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGkgPSAoZ1NkYm1GbGRUeXBlc1tmU3Bl Yy0+ZmxkVHlwZV0pOwogICAgICAgIH0KICAgICAgICBpZigocXVlcnktPmNvbmRUeXBlICYgdGkt PmNvbmRNYXNrKSAmJiAodGktPmlucXVpcnlEYXRhKSAmJiAoISB0aS0+bm9uZVNvcnRlZCkpIHsK ICAgICAgICAgICAgU2RibVJlY0VudHkqIHJlYyA9ICgodm9pZCAqKTApOwogICAgICAgICAgICA7 CiAgICAgICAgICAgIHJldFZhbCA9IFNkYm1HZXRSZWNFbnR5KHRibEgsIGRhdGFJZCwgJnJlYyk7 CiAgICAgICAgICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgICAgICAgICAgcmV0VmFs ID0gU2RibU1hcFRibFBsYWluKHRibEgsIDMpOwogICAgICAgICAgICAgICAgaWYoKChyZXRWYWwp ID49IDApKSB7CiAgICAgICAgICAgICAgICAgICAgU2RibUZsZERhdGFJZHggZGF0YUlkeCA9IFNk Ym1GbGRzTmV4dEZyb21SZWModGJsSCwgcmVjLCBmbGRObywgMCk7CiAgICAgICAgICAgICAgICAg ICAgOwogICAgICAgICAgICAgICAgICAgIGlmKGRhdGFJZHgpIHsKICAgICAgICAgICAgICAgICAg ICAgICAgU2RibUZsZERhdGFJZHggdG9wSWR4ID0gZGF0YUlkeDsKICAgICAgICAgICAgICAgICAg ICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmV0VmFsID0gKCoodGktPmlucXVpcnlEYXRhKSkodGJsSCwgdGksIGZTcGVj LCBxdWVyeSwgZGF0YUlkeCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigoKHJldFZh bCkgPCAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHJldFZhbCA9PSAxKSB7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhSWR4ID0gU2RibUZsZHNOZXh0RnJvbVJl Yyh0YmxILCByZWMsIGZsZE5vLCBkYXRhSWR4KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSB3 aGlsZSh0b3BJZHggIT0gZGF0YUlkeCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg ICAgICAgICAgICAgICAgICAgICAgcmV0VmFsID0gMDsKICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAg ICByZXRWYWwgPSAoLSg0MTczKSk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIChyZXRWYWwp Owp9CgppbnQKU2RibU5leHRRdWVyeURhdGEoU2RibVRhYmxlSGFuZGxlKiB0YmxILCBOdW0gbnVt UXVlcmllcywgY29uc3QgU2RibVF1ZXJ5Q29uZCogcXVlcnksCiAgICAgICAgICAgICAgICAgIFNk Ym1EYXRhSWQgZnJvbUlkLCBTZGJtRmxkRGF0YUlkeCBmcm9tRGF0YUlkeCwgU2RibUZsZERhdGFJ ZHggc3ViRGF0YUlkeCwKICAgICAgICAgICAgICAgICAgU2RibURhdGFJZCogbmV4dElkUCwgU2Ri bUZsZERhdGFJZHgqIG5leHREYXRhSWR4UCwKICAgICAgICAgICAgICAgICAgU2RibUZsZERhdGFJ ZHgqIG5leHRTdWJEYXRhSWR4UCkKewogICAgaW50IHJldFZhbCA9IDA7CiAgICBTZGJtRmxkU3Bl YyogZlNwZWMgPSAoKHZvaWQgKikwKTsKICAgIFNkYm1GbGRObyBmbGRObzsKICAgIFNkYm1GbGRE YXRhSWR4IG5leHRJZHg7CiAgICBTZGJtRmxkRGF0YUlkeCBuZXh0U3ViSWR4OwogICAgOwoKICAg IGZsZE5vID0gZnJvbUlkLmkuZmxkTm87CiAgICByZXRWYWwgPSBTZGJtR2V0RmxkU3BlYyh0YmxI LCBmbGRObywgJmZTcGVjKTsKICAgIDsKICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAg IGNvbnN0IFNkYm1GbGRUeXBlSW5mbyogdGk7CiAgICAgICAgaWYoZlNwZWMtPmZsZFR5cGUgIT0g MHg4MCkgewogICAgICAgICAgICBpZihxdWVyeS0+Y29uZFZhbHVlLmZsZFR5cGUgPT0gMCkgewog ICAgICAgICAgICAgICAgdGkgPSAoZ1NkYm1GbGRUeXBlc1tmU3BlYy0+ZmxkVHlwZV0pOwogICAg ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGkgPSAoZ1NkYm1GbGRUeXBlc1txdWVy eS0+Y29uZFZhbHVlLmZsZFR5cGVdKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAg ICAgICAgICAgIHRpID0gKGdTZGJtRmxkVHlwZXNbZlNwZWMtPmZsZFR5cGVdKTsKICAgICAgICB9 CiAgICAgICAgaWYoKHF1ZXJ5LT5jb25kVHlwZSAmIHRpLT5jb25kTWFzaykgJiYgKHRpLT5uZXh0 RGF0YSkgJiYgKCEgdGktPm5vbmVTb3J0ZWQpKSB7CiAgICAgICAgICAgIFNkYm1SZWNFbnR5KiBy ZWM7CiAgICAgICAgICAgIHJldFZhbCA9IFNkYm1HZXRSZWNFbnR5KHRibEgsIGZyb21JZCwgJnJl Yyk7CiAgICAgICAgICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgICAgICAgICAgcmV0 VmFsID0gU2RibU1hcFRibFBsYWluKHRibEgsIDMpOwogICAgICAgICAgICAgICAgaWYoKChyZXRW YWwpID49IDApKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yKDs7KSB7CiAgICAgICAgICAgICAg ICAgICAgICAgIHJldFZhbCA9ICgqKHRpLT5uZXh0RGF0YSkpKHRibEgsIHRpLCBxdWVyeSwgZlNw ZWMsIGZyb21EYXRhSWR4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmbmV4dElkeCwgc3ViRGF0YUlkeCwgJm5leHRTdWJJZHgpOwogICAgICAgICAg ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJldFZhbCA9PSAxKSB7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwgPSBTZGJtR2V0UmVjRnJvbURhdGFJ ZHgodGJsSCwgZlNwZWMsIG5leHRJZHgsIG5leHRTdWJJZHgsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dElkUCk7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZigoKHJldFZhbCkgPj0gMCkpIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZihuZXh0RGF0YUlkeFApIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKm5leHREYXRhSWR4UCA9IG5leHRJZHg7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG5leHRT dWJEYXRhSWR4UCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmV4dFN1 YkRhdGFJZHhQID0gbmV4dFN1YklkeDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsID0gMTsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXRWYWwgPSAoLSg0 MTczKSk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIChyZXRWYWwpOwp9CgppbnQKU2RibUNv bXBhcmVEYXRhSW50ZXJuYWwoU2RibVRhYmxlSGFuZGxlKiB0YmxILCBTZGJtRmxkTm8gZmxkTm8s CiAgICAgICAgICAgICAgICAgICAgICAgIFNkYm1GbGREYXRhSWR4IGRhdGExLCBTZGJtRmxkRGF0 YUlkeCBkYXRhMikKewogICAgaW50IHJldFZhbCA9IDA7CiAgICBTZGJtRmxkU3BlYyogZlNwZWMg PSAoKHZvaWQgKikwKTsKICAgIDsKCiAgICByZXRWYWwgPSBTZGJtR2V0RmxkU3BlYyh0YmxILCBm bGRObywgJmZTcGVjKTsKICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgIGNvbnN0IFNk Ym1GbGRUeXBlSW5mbyogdGkgPSAoZ1NkYm1GbGRUeXBlc1tmU3BlYy0+ZmxkVHlwZV0pOwogICAg ICAgIHJldFZhbCA9ICgqKHRpLT5jb21wYXJlRGF0YUludGVybmFsKSkodGJsSCwgZGF0YTEsIGRh dGEyKTsKICAgIH0KICAgIHJldHVybiAocmV0VmFsKTsKfQoKZXh0ZXJuIGNvbnN0IFNkYm1GbGRU eXBlSW5mbyBnU2RibUZsZFR5cGVOdW1lcmljOwpleHRlcm4gY29uc3QgU2RibUZsZFR5cGVJbmZv IGdTZGJtRmxkVHlwZVN0cjsKZXh0ZXJuIGNvbnN0IFNkYm1GbGRUeXBlSW5mbyBnU2RibUZsZFR5 cGVFbnVtOwpleHRlcm4gY29uc3QgU2RibUZsZFR5cGVJbmZvIGdTZGJtRmxkVHlwZUVudW1WYWw7 CmV4dGVybiBjb25zdCBTZGJtRmxkVHlwZUluZm8gZ1NkYm1GbGRUeXBlRW51bU5hbWU7CmV4dGVy biBjb25zdCBTZGJtRmxkVHlwZUluZm8gZ1NkYm1GbGRUeXBlTGluazsKZXh0ZXJuIGNvbnN0IFNk Ym1GbGRUeXBlSW5mbyBnU2RibUZsZFR5cGVPcGFxdWU7Cgpjb25zdCBTZGJtRmxkVHlwZUluZm8q IGdTZGJtRmxkVHlwZXNbMjU1ICsxXSA9IHsKICAgIFsweDAxXSA9ICZnU2RibUZsZFR5cGVOdW1l cmljLAogICAgWzB4MDJdID0gJmdTZGJtRmxkVHlwZVN0ciwKICAgIFsweDEwXSA9ICZnU2RibUZs ZFR5cGVFbnVtLAogICAgWzB4MTFdID0gJmdTZGJtRmxkVHlwZUVudW1WYWwsCiAgICBbMHgxMl0g PSAmZ1NkYm1GbGRUeXBlRW51bU5hbWUsCiAgICBbMHg4MF0gPSAmZ1NkYm1GbGRUeXBlTGluaywK ICAgIFsweDMwXSA9ICZnU2RibUZsZFR5cGVPcGFxdWUsCn07CgppbnQKU2RibUdldEZsZEJvZHlC eUZsZE5vKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgU2RibURhdGFJZCBkYXRhSWQsCiAgICAgICAg ICAgICAgICAgICAgICBTZGJtVmVjRmxkSWR4IHZlY0lkeCwgU2RibUZsZEJvZHkqKiBmbGRCb2R5 UCkKewogICAgTnVtIHJldFZhbCA9IDA7CiAgICBTZGJtRmxkU3BlYyogZlNwZWMgPSAoKHZvaWQg KikwKTsKICAgIFNkYm1GbGRObyBmbGRObyA9IGRhdGFJZC5pLmZsZE5vOwoKICAgIDsKICAgIGRh dGFJZC5pLmZsZE5vID0gMDsKICAgIHJldFZhbCA9IFNkYm1HZXRGbGRTcGVjKHRibEgsIGZsZE5v LCAmZlNwZWMpOwogICAgaWYoKChyZXRWYWwpID49IDApKSB7CiAgICAgICAgU2RibVJlY0VudHkq IHJlYzsKICAgICAgICByZXRWYWwgPSBTZGJtR2V0UmVjRW50eSh0YmxILCBkYXRhSWQsICZyZWMp OwogICAgICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgICAgICByZXRWYWwgPSBTZGJt TWFwVGJsUGxhaW4odGJsSCwgMyk7CiAgICAgICAgICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewog ICAgICAgICAgICAgICAgU2RibUZsZERhdGFJZHggZGF0YUlkeCA9IFNkYm1GbGRzTmV4dEZyb21S ZWModGJsSCwgcmVjLCBmbGRObywgMCk7CiAgICAgICAgICAgICAgICBpZihkYXRhSWR4KSB7CiAg ICAgICAgICAgICAgICAgICAgU2RibUZsZEJvZHkqIGZsZCA9ICgodm9pZCAqKTApOwogICAgICAg ICAgICAgICAgICAgIGlmKHZlY0lkeCA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgU2Ri bUZsZERhdGFJZHggdG9wSWR4ID0gZGF0YUlkeDsKICAgICAgICAgICAgICAgICAgICAgICAgZG8g ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsID0gU2RibUdldEZsZEJvZHkodGJs SCwgZGF0YUlkeCwgJmZsZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigoKHJldFZh bCkgPj0gMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihmbGQtPnZlY3Rv cklkeCA9PSB2ZWNJZHgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmZs ZEJvZHlQID0gZmxkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZmxkID0gKCh2b2lkICopMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUlkeCA9 IFNkYm1GbGRzTmV4dEZyb21SZWModGJsSCwgcmVjLCBmbGRObywgZGF0YUlkeCk7CiAgICAgICAg ICAgICAgICAgICAgICAgIH0gd2hpbGUodG9wSWR4ICE9IGRhdGFJZHgpOwogICAgICAgICAgICAg ICAgICAgICAgICBpZighIGZsZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nUHV0 KDQsICIlczolJCIsIF9fRlVOQ1RJT05fXywgIk5vIHN1Y2ggZGF0YSIpOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0VmFsID0gKC0oNDE2MSkpOwogICAgICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg cmV0VmFsID0gU2RibUdldEZsZEJvZHkodGJsSCwgZGF0YUlkeCwgJmZsZCk7CiAgICAgICAgICAg ICAgICAgICAgICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgICAgICAgICAgICAgICAg ICAgICAgKmZsZEJvZHlQID0gZmxkOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg ICBMb2dQdXQoNCwgIiVzOiUkIiwgX19GVU5DVElPTl9fLCAiTm8gc3VjaCBkYXRhIik7CiAgICAg ICAgICAgICAgICAgICAgcmV0VmFsID0gKC0oNDE2MSkpOwogICAgICAgICAgICAgICAgfQogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIChyZXRWYWwpOwp9CgppbnQKU2Ri bU9wZW5UcmVlRm9yRmxkTmFtZShTZGJtVGFibGVIYW5kbGUqIHRibEgsIEF0cmVlUmVxKiByZXEp CnsKICAgIGludCByZXRWYWwgPSAwOwoKICAgIDsKICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0 aW5fY29uc3RhbnRfcCAoc2l6ZW9mKHJlcSkpICYmIChzaXplb2YocmVxKSkgPD0gMTYgPyAoKHNp emVvZihyZXEpKSA9PSAxID8gKHsgdm9pZCAqX19zID0gKHJlcSk7ICooKF9fdWludDhfdCAqKSBf X3MpID0gKF9fdWludDhfdCkgMDsgX19zOyB9KSA6ICh7IHZvaWQgKl9fcyA9IChyZXEpOyB1bmlv biB7IHVuc2lnbmVkIGludCBfX3VpOyB1bnNpZ25lZCBzaG9ydCBpbnQgX191c2k7IHVuc2lnbmVk IGNoYXIgX191YzsgfSAqX191ID0gX19zOyBfX3VpbnQ4X3QgX19jID0gKF9fdWludDhfdCkgKDAp OyBzd2l0Y2ggKCh1bnNpZ25lZCBpbnQpIChzaXplb2YocmVxKSkpIHsgY2FzZSAxNTogX191LT5f X3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hh ciAqKSBfX3UgKyA0KTsgY2FzZSAxMTogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191 ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSA3OiBfX3Ut Pl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChj aGFyICopIF9fdSArIDQpOyBjYXNlIDM6IF9fdS0+X191c2kgPSAodW5zaWduZWQgc2hvcnQgaW50 KSBfX2MgKiAweDAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191 ICsgMik7IF9fdS0+X191YyA9ICh1bnNpZ25lZCBjaGFyKSBfX2M7IGJyZWFrOyBjYXNlIDE0OiBf X3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICop KChjaGFyICopIF9fdSArIDQpOyBjYXNlIDEwOiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAx OyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDY6 IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQg KikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgMjogX191LT5fX3VzaSA9ICh1bnNpZ25lZCBzaG9y dCBpbnQpIF9fYyAqIDB4MDEwMTsgYnJlYWs7IGNhc2UgMTM6IF9fdS0+X191aSA9IF9fYyAqIDB4 MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7 IGNhc2UgOTogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25f XyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSA1OiBfX3UtPl9fdWkgPSBfX2MgKiAw eDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQp OyBjYXNlIDE6IF9fdS0+X191YyA9ICh1bnNpZ25lZCBjaGFyKSBfX2M7IGJyZWFrOyBjYXNlIDE2 OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lk ICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDEyOiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEw MTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNl IDg6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZv aWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgNDogX191LT5fX3VpID0gX19jICogMHgwMTAx MDEwMTsgY2FzZSAwOiBicmVhazsgfSBfX3M7IH0pKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAo MCkgJiYgKDApID09ICdcMCcgPyAoeyB2b2lkICpfX3MgPSAocmVxKTsgX19idWlsdGluX21lbXNl dCAoX19zLCAnXDAnLCBzaXplb2YocmVxKSk7IF9fczsgfSkgOiBtZW1zZXQgKHJlcSwgMCwgc2l6 ZW9mKHJlcSkpKSkpOwogICAgcmVxLT5vcHJzID0gJnNTZGJtRmxkTm9CeU5hbWVPcHJzOwogICAg cmVxLT5hdXhBcmcucHRyID0gdGJsSDsKICAgIHJldFZhbCA9IEF0cmVlT3BlblRyZWUocmVxLCAx LCAwKTsKICAgIHJldHVybiAocmV0VmFsKTsKfQoKaW50ClNkYm1PcGVuVHJlZUZvckZsZChTZGJt VGFibGVIYW5kbGUqIHRibEgsIFNkYm1GbGRObyBmbGRObywgQXRyZWVSZXEqIHJlcSkKewogICAg aW50IHJldFZhbCA9IDA7CgogICAgOwogICAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25z dGFudF9wIChzaXplb2YocmVxKSkgJiYgKHNpemVvZihyZXEpKSA8PSAxNiA/ICgoc2l6ZW9mKHJl cSkpID09IDEgPyAoeyB2b2lkICpfX3MgPSAocmVxKTsgKigoX191aW50OF90ICopIF9fcykgPSAo X191aW50OF90KSAwOyBfX3M7IH0pIDogKHsgdm9pZCAqX19zID0gKHJlcSk7IHVuaW9uIHsgdW5z aWduZWQgaW50IF9fdWk7IHVuc2lnbmVkIHNob3J0IGludCBfX3VzaTsgdW5zaWduZWQgY2hhciBf X3VjOyB9ICpfX3UgPSBfX3M7IF9fdWludDhfdCBfX2MgPSAoX191aW50OF90KSAoMCk7IHN3aXRj aCAoKHVuc2lnbmVkIGludCkgKHNpemVvZihyZXEpKSkgeyBjYXNlIDE1OiBfX3UtPl9fdWkgPSBf X2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9f dSArIDQpOyBjYXNlIDExOiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4 dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDc6IF9fdS0+X191aSA9 IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikg X191ICsgNCk7IGNhc2UgMzogX191LT5fX3VzaSA9ICh1bnNpZ25lZCBzaG9ydCBpbnQpIF9fYyAq IDB4MDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyAyKTsg X191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsgYnJlYWs7IGNhc2UgMTQ6IF9fdS0+X191 aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIg KikgX191ICsgNCk7IGNhc2UgMTA6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9 IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgNjogX191LT5f X3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hh ciAqKSBfX3UgKyA0KTsgY2FzZSAyOiBfX3UtPl9fdXNpID0gKHVuc2lnbmVkIHNob3J0IGludCkg X19jICogMHgwMTAxOyBicmVhazsgY2FzZSAxMzogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEw MTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSA5 OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lk ICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDU6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAx MDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2Ug MTogX191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsgYnJlYWs7IGNhc2UgMTY6IF9fdS0+ X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNo YXIgKikgX191ICsgNCk7IGNhc2UgMTI6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9f dSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgODogX191 LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgo Y2hhciAqKSBfX3UgKyA0KTsgY2FzZSA0OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBj YXNlIDA6IGJyZWFrOyB9IF9fczsgfSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wICgwKSAmJiAo MCkgPT0gJ1wwJyA/ICh7IHZvaWQgKl9fcyA9IChyZXEpOyBfX2J1aWx0aW5fbWVtc2V0IChfX3Ms ICdcMCcsIHNpemVvZihyZXEpKTsgX19zOyB9KSA6IG1lbXNldCAocmVxLCAwLCBzaXplb2YocmVx KSkpKSk7CiAgICByZXEtPm9wcnMgPSAmc1NkYm1GbGROb0J5TmFtZU9wcnM7CiAgICByZXEtPmF1 eEFyZy5wdHIgPSB0YmxIOwogICAgcmV0VmFsID0gQXRyZWVPcGVuVHJlZShyZXEsICgoZmxkTm8p LTErMiksIDApOwogICAgcmV0dXJuIChyZXRWYWwpOwp9CgpTZGJtRmxkRGF0YUlkeApTZGJtQWxs b2NOZXdMaW5rZWRJbmZvKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgU2RibUxpbmtlZEZsZEluZm8q KiBsZmlQKQp7CiAgICBpbnQgcmV0VmFsID0gMDsKICAgIFNkYm1MaW5rZWRGbGRJbmZvQXR0ciog bGZhID0gdGJsSC0+bGlua2VkRmxkc0F0dHI7CiAgICBTZGJtRmxkRGF0YUlkeCBpZHggPSAwOwog ICAgU2RibUxpbmtlZEZsZEluZm8qIGxmaSA9ICgodm9pZCAqKTApOwoKICAgIDsKICAgIGlmKChp ZHggPSBTZGJtTGlua2VkRmxkc05leHRGcm9tRnJlZUxpc3QodGJsSCwgMCkpID09IDApIHsKICAg ICAgICBOdW0gbnVtTGlua2VkID0gbGZhLT5udW1MaW5rZWQgKyAxOwoKICAgICAgICByZXRWYWwg PSBTZGJtUmVzaXplVGJsUGxhaW4odGJsSCwgNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnVtTGlua2VkICogc2l6ZW9mKCpsZmkpKTsKICAgICAgICBpZigoKHJldFZhbCkg Pj0gMCkpIHsKICAgICAgICAgICAgbGZhLT5udW1MaW5rZWQgPSBudW1MaW5rZWQ7CiAgICAgICAg ICAgIGlkeCA9IG51bUxpbmtlZDsKICAgICAgICAgICAgcmV0VmFsID0gQWRhbUNoYW5nZVN1YmZp bGVQYXJhbSh0YmxILT5zdWJmaWxlc1s2XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0YmxILT5wYXJhbXMgKyA2KTsKICAgICAgICAgICAgaWYoKChyZXRWYWwp ID49IDApKSB7CiAgICAgICAgICAgICAgICByZXRWYWwgPSBTZGJtTWFwVGJsUGxhaW4odGJsSCwg Nik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIHJldFZhbCA9 IFNkYm1NYXBUYmxQbGFpbih0YmxILCA2KTsKICAgICAgICBpZigoKHJldFZhbCkgPj0gMCkpIHsK ICAgICAgICAgICAgU2RibUxpbmtlZEZsZHNEZWxldGVGcm9tRnJlZUxpc3QodGJsSCwgaWR4KTsK ICAgICAgICAgICAgZG8ge2lmKCEodGJsSC0+bGlua2VkRmxkc0F0dHItPmZyZWVMaXN0ICE9IGlk eCkpIEF4aXNBYm9ydCgiJXM6JSRcbiIsICJ0YmxILT5saW5rZWRGbGRzQXR0ci0+ZnJlZUxpc3Qg IT0gaWR4IiwgImZyZWVMaXN0PTB4JXggaWR4PTB4JXhcbiIsIHRibEgtPmZsZHNDb250bnJBdHRy LT5mcmVlTGlzdCwgaWR4KTt9IHdoaWxlKDApOwoKICAgICAgICAgICAgcmV0VmFsID0gQWRhbUNo YW5nZVN1YmZpbGVQYXJhbSh0YmxILT5zdWJmaWxlc1s2XSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0YmxILT5wYXJhbXMgKyA2KTsKICAgICAgICB9CiAgICB9 CiAgICBpZigoKHJldFZhbCkgPj0gMCkpIHsKICAgICAgICBTZGJtTGlua2VkRmxkc09wckluaXQo KHRibEgpLT5saW5rZWRGbGRzLCAxLCBpZHgpOwogICAgICAgIHJldFZhbCA9IFNkYm1HZXRMaW5r ZWRGbGRJbmZvKHRibEgsIGlkeCwgJmxmaSk7CiAgICAgICAgaWYoKChyZXRWYWwpID49IDApKSB7 CiAgICAgICAgICAgIGRvIHtpZighKChsZmktPmxpc3QuYmt3ZCA9PSBpZHgpICYmIChsZmktPmxp c3QuZnJ3ZCA9PSBpZHgpKSkgQXhpc0Fib3J0KCIlczolJFxuIiwgIihsZmktPmxpc3QuYmt3ZCA9 PSBpZHgpICYmIChsZmktPmxpc3QuZnJ3ZCA9PSBpZHgpIiwgImlkeD0weCV4ICgweCV4LCAweCV4 KVxuIiwgaWR4LCBsZmktPmxpc3QuYmt3ZCwgbGZpLT5saXN0LmZyd2QpO30gd2hpbGUoMCk7Cgog ICAgICAgICAgICByZXRWYWwgPSBpZHg7CiAgICAgICAgfQogICAgfQogICAgaWYobGZpUCkgewog ICAgICAgICpsZmlQID0gbGZpOwogICAgfQogICAgcmV0dXJuIChyZXRWYWwpOwp9CgpTZGJtRmxk RGF0YUlkeApTZGJtTmV3TGlua0luZm8oU2RibVRhYmxlSGFuZGxlKiBmcm9tVGJsSCwgU2RibUZs ZERhdGFJZHggZnJvbURhdGEsCiAgICAgICAgICAgICAgICBTZGJtRGF0YUlkIGxpbmtGcm9tLCBT ZGJtRGF0YUlkIGxpbmtUbykKewogICAgaW50IHJldFZhbDsKICAgIFNkYm1UYWJsZUhhbmRsZSog dG9UYmxIID0gKCh2b2lkICopMCk7CiAgICBTZGJtTGlua2VkRmxkSW5mbyogbGZpID0gKCh2b2lk ICopMCk7CgogICAgOwogICAgcmV0VmFsID0gU2RibU9wZW5UYWJsZUJ5QW5vdGhlclRhYmxlKGZy b21UYmxILCBsaW5rVG8uaS50YWJsZU5vLCAmdG9UYmxIKTsKICAgIGlmKCgocmV0VmFsKSA+PSAw KSkgewogICAgICAgIFNkYm1SZWNFbnR5KiB0b1JlYyA9ICgodm9pZCAqKTApOwogICAgICAgIHJl dFZhbCA9IFNkYm1HZXRSZWNFbnR5UHRyV2l0aENoZWNrKHRvVGJsSCwgbGlua1RvLmkucmVjSWR4 LCAmdG9SZWMpOwogICAgICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgICAgICBTZGJt UmVjRW50eSogciA9ICgodm9pZCAqKTApOwogICAgICAgICAgICBpbnQgY2hlY2s7CiAgICAgICAg ICAgIGNoZWNrID0gU2RibUdldFJlY0VudHkoZnJvbVRibEgsIGxpbmtGcm9tLCAmcik7CiAgICAg ICAgICAgIGlmKCgoY2hlY2spID49IDApKSB7CiAgICAgICAgICAgICAgICBjaGVjayA9IFNkYm1H ZXRSZWNFbnR5KHRvVGJsSCwgbGlua1RvLCAmcik7CiAgICAgICAgICAgICAgICBpZigoKGNoZWNr KSA8IDApKSB7CiAgICAgICAgICAgICAgICAgICAgTG9nUHV0KDEsICJJbGxlZ2FsIGxpbmtUbyBy ZWNvcmQ9MHglbGx4XG4iLCBsaW5rVG8pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9 IGVsc2UgewogICAgICAgICAgICAgICAgTG9nUHV0KDEsICJJbGxlZ2FsIGxpbmtGcm9tIHJlY29y ZD0weCVsbHhcbiIsIGxpbmtGcm9tKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXRWYWwg PSBjaGVjazsKICAgICAgICAgICAgaWYoKChyZXRWYWwpID49IDApKSB7CiAgICAgICAgICAgIHJl dFZhbCA9IFNkYm1BbGxvY05ld0xpbmtlZEluZm8odG9UYmxILCAmbGZpKTsKICAgICAgICAgICAg aWYoKChyZXRWYWwpID49IDApKSB7CiAgICAgICAgICAgICAgICBTZGJtRmxkRGF0YUlkeCBsaSA9 IHJldFZhbDsKCiAgICAgICAgICAgICAgICBTZGJtTGlua2VkRmxkc0FwcGVuZFRvUmVjKHRvVGJs SCwgdG9SZWMsIGxpbmtUby5pLmZsZE5vLCBsaSk7CgoKCgogICAgICAgICAgICAgICAgbGZpLT5s aW5rRnJvbS5leHRlcm5hbCA9IDBMTDsKICAgICAgICAgICAgICAgIGxmaS0+bGlua0Zyb20uaS50 YWJsZU5vID0gZnJvbVRibEgtPnRibE5vOwogICAgICAgICAgICAgICAgbGZpLT5saW5rRnJvbS5p LnJlY0lkeCA9IGxpbmtGcm9tLmkucmVjSWR4OwogICAgICAgICAgICAgICAgbGZpLT5saW5rRnJv bS5pLnJldmlzaW9uID0gbGlua0Zyb20uaS5yZXZpc2lvbjsKICAgICAgICAgICAgICAgIGxmaS0+ bGlua0Zyb20uaS5mbGRObyA9IGxpbmtGcm9tLmkuZmxkTm87CgogICAgICAgICAgICAgICAgbGZp LT5saW5rVG8uZXh0ZXJuYWwgPSAwTEw7CiAgICAgICAgICAgICAgICBsZmktPmxpbmtUby5pLnRh YmxlTm8gPSB0b1RibEgtPnRibE5vOwogICAgICAgICAgICAgICAgbGZpLT5saW5rVG8uaS5yZWNJ ZHggPSBsaW5rVG8uaS5yZWNJZHg7CiAgICAgICAgICAgICAgICBsZmktPmxpbmtUby5pLnJldmlz aW9uID0gbGlua1RvLmkucmV2aXNpb247CiAgICAgICAgICAgICAgICBsZmktPmxpbmtUby5pLmZs ZE5vID0gbGlua1RvLmkuZmxkTm87CgogICAgICAgICAgICAgICAgICAgIGRvIHtpZighKHRvVGJs SC0+bGlua2VkRmxkc0F0dHItPmZyZWVMaXN0ICE9IGxpKSkgQXhpc0Fib3J0KCIlczolJFxuIiwg InRvVGJsSC0+bGlua2VkRmxkc0F0dHItPmZyZWVMaXN0ICE9IGxpIiwgImZyZWVMaXN0PTB4JXgg aWR4PTB4JXhcbiIsIHRvVGJsSC0+Zmxkc0NvbnRuckF0dHItPmZyZWVMaXN0LCBsaSk7fSB3aGls ZSgwKTsKCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAg U2RibVJlbGVhc2VUYWJsZUhhbmRsZSh0b1RibEgsIDEpOwogICAgfQogICAgcmV0dXJuIChyZXRW YWwpOwp9CgppbnQKU2RibURlbExpbmtlZEluZm8oU2RibVRhYmxlSGFuZGxlKiB0YmxILCBTZGJt RmxkRGF0YUlkeCBpZHgpCnsKICAgIGludCByZXRWYWwgPSAwOwogICAgU2RibUxpbmtlZEZsZElu Zm8qIGxmaTsKICAgIFNkYm1SZWNFbnR5KiByZWMgPSAoKHZvaWQgKikwKTsKICAgIDsKCiAgICBy ZXRWYWwgPSBTZGJtTWFwVGJsUGxhaW4odGJsSCwgNik7CiAgICBpZigoKHJldFZhbCkgPj0gMCkp IHsKICAgICAgICByZXRWYWwgPSBTZGJtR2V0TGlua2VkRmxkSW5mbyh0YmxILCBpZHgsICZsZmkp OwogICAgICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgICAgICByZXRWYWwgPSBTZGJt R2V0UmVjRW50eSh0YmxILCBsZmktPmxpbmtUbywgJnJlYyk7CiAgICAgICAgICAgIGlmKCgocmV0 VmFsKSA+PSAwKSkgewogICAgICAgICAgICAgICAgOwoKCgoKCgogICAgICAgICAgICAgICAgU2Ri bUxpbmtlZEZsZHNEZWxldGVGcm9tUmVjKHRibEgsIHJlYywgbGZpLT5saW5rVG8uaS5mbGRObywg aWR4KTsKICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgU2RibUxpbmtlZEZsZHNP cHJJbml0KCh0YmxIKS0+bGlua2VkRmxkcywgMSwgaWR4KTsKICAgICAgICAgICAgICAgIDsKCgog ICAgICAgICAgICAgICAgU2RibUxpbmtlZEZsZHNBcHBlbmRUb0ZyZWVMaXN0KHRibEgsIGlkeCk7 CiAgICAgICAgICAgICAgICA7CgoKCgoKCiAgICAgICAgICAgICAgICByZXRWYWwgPSBBZGFtQ2hh bmdlU3ViZmlsZVBhcmFtKHRibEgtPnN1YmZpbGVzWzZdLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0YmxILT5wYXJhbXMgKyA2KTsKICAgICAgICAgICAg ICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgICAgICAgICAgaWYocmVjLT5hdHRycy52 LmRlbGV0ZWQpIHsKICAgICAgICAgICAgICAgICAgICByZXRWYWwgPSBTZGJtRGVsUmVjKHRibEgs IHJlYyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAg ICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIChyZXRWYWwpOwp9CgppbnQKU2RibUdldE1p bkFuZE1heEZsZEVsbShTZGJtVGFibGVIYW5kbGUqIHRibEgsIFNkYm1SZWNFbnR5KiByZWMsIFNk Ym1GbGRObyBmbGRObywKICAgICAgICAgICAgICAgICAgICAgICBTZGJtRmxkRGF0YUlkeCogbWlu UCwgU2RibUZsZERhdGFJZHgqIG1heFAsCiAgICAgICAgICAgICAgICAgICAgICAgU2RibVRhYmxl SGFuZGxlKiogZm9yTGlua1RibFAsIFNkYm1GbGRObyogZmxkTm9QKQp7CiAgICBTZGJtRmxkRGF0 YUlkeCBtaW4gPSAwLCBtYXggPSAwOwogICAgaW50IHJldFZhbCA9IDA7CiAgICBTZGJtRmxkU3Bl YyogZlNwZWM7CgogICAgOwoKICAgIDsKICAgIHJldFZhbCA9IFNkYm1HZXRGbGRTcGVjKHRibEgs IGZsZE5vLCAmZlNwZWMpOwogICAgaWYoKChyZXRWYWwpID49IDApKSB7CiAgICAgICAgaWYoZlNw ZWMtPmZsZFR5cGUgPT0gMHg4MCkgewogICAgICAgICAgICBTZGJtRmxkUmVmIGZSZWY7CiAgICAg ICAgICAgIFNkYm1EYXRhSWQgcmVjSWQ7CiAgICAgICAgICAgIHJlY0lkID0gcmVjLT5yZWNJZDsK ICAgICAgICAgICAgcmVjSWQuaS5mbGRObyA9IGZsZE5vOwogICAgICAgICAgICA7CiAgICAgICAg ICAgIHJldFZhbCA9IFNkYm1HZXRBRGF0YSh0YmxILCByZWNJZCwgMSwgJmZSZWYsIDEpOwogICAg ICAgICAgICBpZigoKHJldFZhbCkgPj0gMCkpIHsKICAgICAgICAgICAgICAgIFNkYm1UYWJsZUhh bmRsZSogdG9UYmxIID0gKCh2b2lkICopMCk7CiAgICAgICAgICAgICAgICBTZGJtRmxkRGVmTGlu a0luZm8gbGlEZWY7CgogICAgICAgICAgICAgICAgbGlEZWYud2hvbGUgPSBmU3BlYy0+ZmxkQXV4 VHlwZTsKICAgICAgICAgICAgICAgIHJlY0lkLmV4dGVybmFsID0gZlJlZi52LnJlY0lkOwogICAg ICAgICAgICAgICAgcmV0VmFsID0gU2RibU9wZW5UYWJsZUJ5QW5vdGhlclRhYmxlKHRibEgsIGxp RGVmLmRldGFpbC5saW5rVG9UYWJsZSwgJnRvVGJsSCk7CiAgICAgICAgICAgICAgICBpZigoKHJl dFZhbCkgPj0gMCkpIHsKICAgICAgICAgICAgICAgICAgICByZXRWYWwgPSBTZGJtR2V0UmVjRW50 eSh0b1RibEgsIHJlY0lkLCAmcmVjKTsKICAgICAgICAgICAgICAgICAgICBpZigoKHJldFZhbCkg Pj0gMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGJsSCA9IHRvVGJsSDsKICAgICAgICAg ICAgICAgICAgICAgICAgZmxkTm8gPSByZWNJZC5pLmZsZE5vOwogICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYo KChyZXRWYWwpID49IDApKSB7CiAgICAgICAgICAgIHJldFZhbCA9IFNkYm1NYXBUYmxQbGFpbih0 YmxILCAzKTsKICAgICAgICAgICAgaWYoKChyZXRWYWwpID49IDApKSB7CiAgICAgICAgICAgICAg ICBtaW4gPSBTZGJtRmxkc1NvcnROZXh0RnJvbVJlYyh0YmxILCByZWMsIGZsZE5vLCAwKTsKICAg ICAgICAgICAgICAgIGlmKG1pbiA+IDApIHsKICAgICAgICAgICAgICAgICAgICBtYXggPSBTZGJt Rmxkc1NvcnRQcmV2RnJvbVJlYyh0YmxILCByZWMsIGZsZE5vLCBtaW4pOwogICAgICAgICAgICAg ICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgaWYobWluUCkKICAgICAgICAq bWluUCA9IG1pbjsKICAgIGlmKG1heFApCiAgICAgICAgKm1heFAgPSBtYXg7CiAgICBpZihmb3JM aW5rVGJsUCkKICAgICAgICAqZm9yTGlua1RibFAgPSB0YmxIOwogICAgaWYoZmxkTm9QKQogICAg ICAgICpmbGROb1AgPSBmbGRObzsKICAgIHJldHVybiAocmV0VmFsKTsKfQoKaW50ClNkYm1GaW5k RWRnZURhdGEoU2RibVRhYmxlSGFuZGxlKiB0YmxILCBTZGJtRmxkU3BlYyogZlNwZWMsIEJvb2wg bG93ZXJFZGdlLCBTZGJtRmxkRWxtUHRyKiBlbG1QKQp7CiAgICBpbnQgcmV0VmFsID0gMDsKICAg IFNkYm1UYWJsZUhhbmRsZSogb3JpZ1RibEggPSB0YmxIOwogICAgU2RibUZsZFNwZWMqIG9yaWdT cGVjID0gZlNwZWM7CiAgICBTZGJtRmxkRGF0YUlkeCB0YXJnZXREYXRhID0gMDsKICAgIFNkYm1S ZWNJZCByZXRSZWMgPSAwTEw7CiAgICBTZGJtVmVjRmxkSWR4IHJldFZlY0lkeCA9IDA7CiAgICBT ZGJtRmxkQm9keSogdGFyZ2V0ID0gKCh2b2lkICopMCk7CiAgICBTZGJtVGFibGVIYW5kbGUqIHRv VGJsSCA9ICgodm9pZCAqKTApOwoKICAgIDsKCiAgICBpZihmU3BlYy0+ZmxkVHlwZSA9PSAweDgw KSB7CiAgICAgICAgU2RibUZsZERlZkxpbmtJbmZvIGxpRGVmOwoKICAgICAgICBsaURlZi53aG9s ZSA9IGZTcGVjLT5mbGRBdXhUeXBlOwogICAgICAgIHJldFZhbCA9IFNkYm1PcGVuVGFibGVCeUFu b3RoZXJUYWJsZSh0YmxILCBsaURlZi5kZXRhaWwubGlua1RvVGFibGUsICZ0b1RibEgpOwogICAg ICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgICAgICByZXRWYWwgPSBTZGJtR2V0Rmxk U3BlYyh0b1RibEgsIGxpRGVmLmRldGFpbC5saW5rVG9GbGRObywgJmZTcGVjKTsKICAgICAgICAg ICAgaWYoKChyZXRWYWwpID49IDApKSB7CiAgICAgICAgICAgICAgICB0YmxIID0gdG9UYmxIOwog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgaWYoKChyZXRWYWwpID49IDApKSB7CiAg ICAgICAgY29uc3QgU2RibUZsZFR5cGVJbmZvKiB0aTsKICAgICAgICB0aSA9IChnU2RibUZsZFR5 cGVzW2ZTcGVjLT5mbGRUeXBlXSk7CiAgICAgICAgaWYoKHRpKSAmJiAodGktPmZtdFR5cGUgPT0g ZlNwZWMtPmZsZFR5cGUpICYmICh0aS0+c2VhcmNoRGF0YSkgJiYgKCEgdGktPm5vbmVTb3J0ZWQp KSB7CiAgICAgICAgICAgIEF0cmVlUmVxIHJlcTsKCiAgICAgICAgICAgIChfX2V4dGVuc2lvbl9f IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoc2l6ZW9mKHJlcSkpICYmIChzaXplb2YocmVxKSkgPD0g MTYgPyAoKHNpemVvZihyZXEpKSA9PSAxID8gKHsgdm9pZCAqX19zID0gKCZyZXEpOyAqKChfX3Vp bnQ4X3QgKikgX19zKSA9IChfX3VpbnQ4X3QpIDA7IF9fczsgfSkgOiAoeyB2b2lkICpfX3MgPSAo JnJlcSk7IHVuaW9uIHsgdW5zaWduZWQgaW50IF9fdWk7IHVuc2lnbmVkIHNob3J0IGludCBfX3Vz aTsgdW5zaWduZWQgY2hhciBfX3VjOyB9ICpfX3UgPSBfX3M7IF9fdWludDhfdCBfX2MgPSAoX191 aW50OF90KSAoMCk7IHN3aXRjaCAoKHVuc2lnbmVkIGludCkgKHNpemVvZihyZXEpKSkgeyBjYXNl IDE1OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2 b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDExOiBfX3UtPl9fdWkgPSBfX2MgKiAweDAx MDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBj YXNlIDc6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18g KHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgMzogX191LT5fX3VzaSA9ICh1bnNpZ25l ZCBzaG9ydCBpbnQpIF9fYyAqIDB4MDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgo Y2hhciAqKSBfX3UgKyAyKTsgX191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsgYnJlYWs7 IGNhc2UgMTQ6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9u X18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgMTA6IF9fdS0+X191aSA9IF9fYyAq IDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsg NCk7IGNhc2UgNjogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNp b25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSAyOiBfX3UtPl9fdXNpID0gKHVu c2lnbmVkIHNob3J0IGludCkgX19jICogMHgwMTAxOyBicmVhazsgY2FzZSAxMzogX191LT5fX3Vp ID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAq KSBfX3UgKyA0KTsgY2FzZSA5OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBf X2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDU6IF9fdS0+X191 aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIg KikgX191ICsgNCk7IGNhc2UgMTogX191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsgYnJl YWs7IGNhc2UgMTY6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5z aW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgMTI6IF9fdS0+X191aSA9IF9f YyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191 ICsgNCk7IGNhc2UgODogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRl bnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSA0OiBfX3UtPl9fdWkgPSBf X2MgKiAweDAxMDEwMTAxOyBjYXNlIDA6IGJyZWFrOyB9IF9fczsgfSkpIDogKF9fYnVpbHRpbl9j b25zdGFudF9wICgwKSAmJiAoMCkgPT0gJ1wwJyA/ICh7IHZvaWQgKl9fcyA9ICgmcmVxKTsgX19i dWlsdGluX21lbXNldCAoX19zLCAnXDAnLCBzaXplb2YocmVxKSk7IF9fczsgfSkgOiBtZW1zZXQg KCZyZXEsIDAsIHNpemVvZihyZXEpKSkpKTsKICAgICAgICAgICAgcmVxLmF1eEFyZy5wdHIgPSB0 YmxIOwogICAgICAgICAgICByZXEub3BycyA9IHRpLT5hdHJlZU9wcnM7CiAgICAgICAgICAgIHJl dFZhbCA9IEF0cmVlT3BlblRyZWUoJnJlcSwgZlNwZWMtPmZsZEluZGV4VHJlZSwgMCk7CiAgICAg ICAgICAgIGlmKCgocmV0VmFsKSA+PSAwKSkgewogICAgICAgICAgICAgICAgQXRyZWVJZHggbm9k ZTsKICAgICAgICAgICAgICAgIFNkYm1GbGRJZHhEYXRhIG5vZGVEYXRhOwogICAgICAgICAgICAg ICAgaWYobG93ZXJFZGdlKSB7CiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IEF0cmVlTmV4dE5v ZGUoJnJlcSwgMCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg IG5vZGUgPSBBdHJlZVByZXZOb2RlKCZyZXEsIDApOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgaWYobm9kZSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgQXRyZWVHZXREYXRh KCZyZXEsIG5vZGUsICYobm9kZURhdGEudmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICB0YXJn ZXREYXRhID0gbm9kZURhdGEudmFsLmZsZDsKICAgICAgICAgICAgICAgICAgICByZXRWYWwgPSBT ZGJtR2V0RmxkQm9keSh0YmxILCB0YXJnZXREYXRhLCAmdGFyZ2V0KTsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgIEF0cmVlQ2xvc2VUcmVlKCZyZXEpOwogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgfQogICAgaWYoKChyZXRWYWwpID49IDApICYmICh0YXJnZXQgIT0gKCh2b2lk ICopMCkpKSB7CiAgICAgICAgU2RibURhdGFJZCBkYXRhSWQ7CiAgICAgICAgU2RibUZsZERhdGFJ ZHggc3ViRGF0YUlkeCA9IDA7CiAgICAgICAgZGF0YUlkLmV4dGVybmFsID0gMExMOwogICAgICAg IHJldFZlY0lkeCA9IHRhcmdldC0+dmVjdG9ySWR4OwoKICAgICAgICBpZihvcmlnU3BlYy0+Zmxk VHlwZSA9PSAweDgwKSB7CiAgICAgICAgICAgIHJldFZhbCA9IFNkYm1NYXBUYmxQbGFpbih0YmxI LCA2KTsKICAgICAgICAgICAgaWYoKChyZXRWYWwpID49IDApKSB7CiAgICAgICAgICAgICAgICBT ZGJtUmVjRW50eSogdG9SZWMgPSAoKHZvaWQgKikwKTsKICAgICAgICAgICAgICAgIHJldFZhbCA9 IFNkYm1HZXRSZWNFbnR5UHRyKHRibEgsIHRhcmdldC0+cmVjSWR4LCAmdG9SZWMpOwogICAgICAg ICAgICAgICAgaWYoKChyZXRWYWwpID49IDApKSB7CiAgICAgICAgICAgICAgICAgICAgU2RibUZs ZERhdGFJZHggbGkgPSAwOwogICAgICAgICAgICAgICAgICAgIFNkYm1GbGREYXRhSWR4IGxpVG9w ID0gMDsKICAgICAgICAgICAgICAgICAgICBTZGJtVGFibGVObyBvcmlnVGJsTm8gPSBvcmlnVGJs SC0+dGJsTm87CiAgICAgICAgICAgICAgICAgICAgU2RibUZsZE5vIG9yaWdGbGRObyA9IG9yaWdT cGVjLT5mbGRObzsKICAgICAgICAgICAgICAgICAgICBTZGJtRmxkTm8gdG9GbGRObyA9IGZTcGVj LT5mbGRObzsKCiAgICAgICAgICAgICAgICAgICAgbGlUb3AgPSBsaSA9IFNkYm1MaW5rZWRGbGRz TmV4dEZyb21SZWModGJsSCwgdG9SZWMsIHRvRmxkTm8sIDApOwogICAgICAgICAgICAgICAgICAg IGlmKGxpVG9wKSBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAgIFNkYm1MaW5rZWRGbGRJbmZv KiBsZmkgPSAoKHZvaWQgKikwKTsKICAgICAgICAgICAgICAgICAgICAgICAgU2RibUdldExpbmtl ZEZsZEluZm8odGJsSCwgbGksICZsZmkpOwogICAgICAgICAgICAgICAgICAgICAgICBpZigobGZp LT5saW5rRnJvbS5pLnRhYmxlTm8gPT0gb3JpZ1RibE5vKSAmJgogICAgICAgICAgICAgICAgICAg ICAgICAgICAobGZpLT5saW5rRnJvbS5pLmZsZE5vID09IG9yaWdGbGRObykpIHsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN1YkRhdGFJZHggPSBsaTsKICAgICAgICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgICAgICAgICBsaSA9IFNkYm1MaW5rZWRGbGRzTmV4dEZyb21S ZWModGJsSCwgdG9SZWMsIHRvRmxkTm8sIGxpKTsKICAgICAgICAgICAgICAgICAgICB9IHdoaWxl IChsaSAhPSBsaVRvcCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9 CiAgICAgICAgcmV0VmFsID0gU2RibUdldFJlY0Zyb21EYXRhSWR4KG9yaWdUYmxILCBvcmlnU3Bl YywgdGFyZ2V0RGF0YSwgc3ViRGF0YUlkeCwgJmRhdGFJZCk7CiAgICAgICAgcmV0UmVjID0gZGF0 YUlkLmV4dGVybmFsOwogICAgfQogICAgaWYodG9UYmxIKSB7CiAgICAgICAgU2RibVJlbGVhc2VU YWJsZUhhbmRsZSh0b1RibEgsIDEpOwogICAgfQogICAgZWxtUC0+cmVjb3JkID0gcmV0UmVjOwog ICAgZWxtUC0+dmVjSWR4ID0gcmV0VmVjSWR4OwogICAgcmV0dXJuIChyZXRWYWwpOwp9CgppbnQK U2RibUxpc3REYXRhKFNkYm1UYWJsZUhhbmRsZSogdGJsSCwgU2RibUZsZFNwZWMqIGZTcGVjLAog ICAgICAgICAgICAgU2RibVJlY0lkIHJlY3NbXSwgTnVtIG51bVJlY3MsIE51bSogcmVhbFJlY3Ms CiAgICAgICAgICAgICBTZGJtRmxkRWxtUHRyIGFsbExpc3RbXSwgTnVtIG51bUFsbCwgTnVtKiBy ZWFsQWxsLAogICAgICAgICAgICAgU2RibUZsZEVsbVB0ciB1bmlxTGlzdFtdLCBOdW0gbnVtVW5p cSwgTnVtKiByZWFsVW5pcSkKewogICAgaW50IHJldFZhbCA9IDA7CiAgICBTZGJtRmxkU3BlYyog b3JpZ1NwZWMgPSBmU3BlYzsKICAgIFNkYm1UYWJsZUhhbmRsZSogb3JpZ1RibEggPSB0YmxIOwog ICAgU2RibVRhYmxlSGFuZGxlKiB0b1RibEggPSAoKHZvaWQgKikwKTsKICAgIE51bSBpZHhSZWM9 MCwgaWR4QWxsPTAsIGlkeFVuaXE9MDsKCiAgICBzdGF0aWMgaW50IEdldERhdGFJZChTZGJtRmxk Qm9keSogdGFyZ2V0LCBTZGJtRmxkRGF0YUlkeCB0YXJnZXREYXRhLCBTZGJtRGF0YUlkKiBkYXRh SWRQKSB7CiAgICAgICAgaW50IHJldENvZGUgPSAwOwogICAgICAgIFNkYm1EYXRhSWQgZGF0YUlk OwogICAgICAgIFNkYm1GbGREYXRhSWR4IHN1YkRhdGFJZHggPSAwOwoKICAgICAgICA7CiAgICAg ICAgZGF0YUlkLmV4dGVybmFsID0gMExMOwogICAgICAgIHJldENvZGUgPSBTZGJtTWFwVGJsUGxh aW4odGJsSCwgNik7CiAgICAgICAgaWYoKChyZXRDb2RlKSA+PSAwKSkgewogICAgICAgICAgICBT ZGJtUmVjRW50eSogdG9SZWMgPSAoKHZvaWQgKikwKTsKICAgICAgICAgICAgcmV0Q29kZSA9IFNk Ym1HZXRSZWNFbnR5UHRyKHRibEgsIHRhcmdldC0+cmVjSWR4LCAmdG9SZWMpOwogICAgICAgICAg ICBpZigoKHJldENvZGUpID49IDApKSB7CiAgICAgICAgICAgICAgICBTZGJtRmxkRGF0YUlkeCBs aSA9IDA7CiAgICAgICAgICAgICAgICBTZGJtRmxkRGF0YUlkeCBsaVRvcCA9IDA7CiAgICAgICAg ICAgICAgICBTZGJtVGFibGVObyBvcmlnVGJsTm8gPSBvcmlnVGJsSC0+dGJsTm87CiAgICAgICAg ICAgICAgICBTZGJtRmxkTm8gb3JpZ0ZsZE5vID0gb3JpZ1NwZWMtPmZsZE5vOwogICAgICAgICAg ICAgICAgU2RibUZsZE5vIHRvRmxkTm8gPSBmU3BlYy0+ZmxkTm87CgogICAgICAgICAgICAgICAg bGlUb3AgPSBsaSA9IFNkYm1MaW5rZWRGbGRzTmV4dEZyb21SZWModGJsSCwgdG9SZWMsIHRvRmxk Tm8sIDApOwogICAgICAgICAgICAgICAgaWYobGlUb3ApIGRvIHsKICAgICAgICAgICAgICAgICAg ICBTZGJtTGlua2VkRmxkSW5mbyogbGZpID0gKCh2b2lkICopMCk7CiAgICAgICAgICAgICAgICAg ICAgU2RibUdldExpbmtlZEZsZEluZm8odGJsSCwgbGksICZsZmkpOwogICAgICAgICAgICAgICAg ICAgIGlmKChsZmktPmxpbmtGcm9tLmkudGFibGVObyA9PSBvcmlnVGJsTm8pICYmCiAgICAgICAg ICAgICAgICAgICAgICAgKGxmaS0+bGlua0Zyb20uaS5mbGRObyA9PSBvcmlnRmxkTm8pKSB7CiAg ICAgICAgICAgICAgICAgICAgICAgIHN1YkRhdGFJZHggPSBsaTsKICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAgICAgbGkgPSBTZGJtTGlua2VkRmxkc05leHRGcm9tUmVjKHRi bEgsIHRvUmVjLCB0b0ZsZE5vLCBsaSk7CiAgICAgICAgICAgICAgICB9IHdoaWxlIChsaSAhPSBs aVRvcCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0VmFsID0gU2RibUdldFJl Y0Zyb21EYXRhSWR4KG9yaWdUYmxILCBvcmlnU3BlYywgdGFyZ2V0RGF0YSwgc3ViRGF0YUlkeCwg JmRhdGFJZCk7CiAgICAgICAgKmRhdGFJZFAgPSBkYXRhSWQ7CiAgICAgICAgcmV0dXJuIChyZXRD b2RlKTsKICAgIH0KCiAgICBzdGF0aWMgaW50IFN0b3JlRGF0YShBdHJlZVJlcSogcmVxUCwgQXRy ZWVJZHggbm9kZSkgewogICAgICAgIFNkYm1GbGRCb2R5KiB0YXJnZXQgPSAoKHZvaWQgKikwKTsK ICAgICAgICBpbnQgcmV0Q29kZSA9IDA7CiAgICAgICAgU2RibUZsZElkeERhdGEgbm9kZURhdGE7 CiAgICAgICAgU2RibUZsZERhdGFJZHggdGFyZ2V0RGF0YSA9IDA7CiAgICAgICAgU2RibURhdGFJ ZCBkYXRhSWQ7CgogICAgICAgIDsKICAgICAgICBBdHJlZUdldERhdGEocmVxUCwgbm9kZSwgJihu b2RlRGF0YS52YWx1ZSkpOwogICAgICAgIHRhcmdldERhdGEgPSBub2RlRGF0YS52YWwuZmxkOwog ICAgICAgIHJldENvZGUgPSBTZGJtR2V0RmxkQm9keSh0YmxILCB0YXJnZXREYXRhLCAmdGFyZ2V0 KTsKICAgICAgICBpZigoKHJldENvZGUpID49IDApKSB7CiAgICAgICAgICAgIHJldENvZGUgPSBH ZXREYXRhSWQodGFyZ2V0LCB0YXJnZXREYXRhLCAmZGF0YUlkKTsKICAgICAgICAgICAgaWYoKChy ZXRDb2RlKSA+PSAwKSkgewogICAgICAgICAgICAgICAgaWYoaWR4QWxsIDwgbnVtQWxsKSB7CiAg ICAgICAgICAgICAgICAgICAgYWxsTGlzdFtpZHhBbGxdLnJlY29yZCA9IGRhdGFJZC5leHRlcm5h bDsKICAgICAgICAgICAgICAgICAgICBhbGxMaXN0W2lkeEFsbF0udmVjSWR4ID0gdGFyZ2V0LT52 ZWN0b3JJZHg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZHhBbGwgKys7CiAg ICAgICAgICAgICAgICBpZihBdHJlZUlzVW5pcXVlTm9kZShyZXFQLCBub2RlKSkgewogICAgICAg ICAgICAgICAgICAgIGlmKGlkeFVuaXEgPCBudW1VbmlxKSB7CiAgICAgICAgICAgICAgICAgICAg ICAgIHVuaXFMaXN0W2lkeFVuaXFdLnJlY29yZCA9IGRhdGFJZC5leHRlcm5hbDsKICAgICAgICAg ICAgICAgICAgICAgICAgdW5pcUxpc3RbaWR4VW5pcV0udmVjSWR4ID0gdGFyZ2V0LT52ZWN0b3JJ ZHg7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlkeFVuaXEgKys7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZih0YXJnZXQtPnNvcnRMaXN0LmJr d2QgPT0gMCkgewogICAgICAgICAgICAgICAgICAgIGlmKGlkeFJlYyA8IG51bVJlY3MpIHsKICAg ICAgICAgICAgICAgICAgICAgICAgcmVjc1tpZHhSZWNdID0gZGF0YUlkLmV4dGVybmFsOwogICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZHhSZWMgKys7CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIChyZXRDb2Rl KTsKICAgIH0KCiAgICBzdGF0aWMgaW50IExpc3REYXRhcyhjb25zdCBTZGJtRmxkVHlwZUluZm8q IHRpKSB7CiAgICAgICAgaW50IHJldENvZGUgPSAwOwogICAgICAgIEF0cmVlUmVxIHJlcTsKCiAg ICAgICAgOwogICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoc2l6 ZW9mKHJlcSkpICYmIChzaXplb2YocmVxKSkgPD0gMTYgPyAoKHNpemVvZihyZXEpKSA9PSAxID8g KHsgdm9pZCAqX19zID0gKCZyZXEpOyAqKChfX3VpbnQ4X3QgKikgX19zKSA9IChfX3VpbnQ4X3Qp IDA7IF9fczsgfSkgOiAoeyB2b2lkICpfX3MgPSAoJnJlcSk7IHVuaW9uIHsgdW5zaWduZWQgaW50 IF9fdWk7IHVuc2lnbmVkIHNob3J0IGludCBfX3VzaTsgdW5zaWduZWQgY2hhciBfX3VjOyB9ICpf X3UgPSBfX3M7IF9fdWludDhfdCBfX2MgPSAoX191aW50OF90KSAoMCk7IHN3aXRjaCAoKHVuc2ln bmVkIGludCkgKHNpemVvZihyZXEpKSkgeyBjYXNlIDE1OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAx MDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBj YXNlIDExOiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9f ICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOyBjYXNlIDc6IF9fdS0+X191aSA9IF9fYyAqIDB4 MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7 IGNhc2UgMzogX191LT5fX3VzaSA9ICh1bnNpZ25lZCBzaG9ydCBpbnQpIF9fYyAqIDB4MDEwMTsg X191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyAyKTsgX191LT5fX3Vj ID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsgYnJlYWs7IGNhc2UgMTQ6IF9fdS0+X191aSA9IF9fYyAq IDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsg NCk7IGNhc2UgMTA6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5z aW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgNjogX191LT5fX3VpID0gX19j ICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3Ug KyA0KTsgY2FzZSAyOiBfX3UtPl9fdXNpID0gKHVuc2lnbmVkIHNob3J0IGludCkgX19jICogMHgw MTAxOyBicmVhazsgY2FzZSAxMzogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0g X19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsgY2FzZSA5OiBfX3UtPl9f dWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFy ICopIF9fdSArIDQpOyBjYXNlIDU6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9 IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgMTogX191LT5f X3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsgYnJlYWs7IGNhc2UgMTY6IF9fdS0+X191aSA9IF9f YyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191 ICsgNCk7IGNhc2UgMTI6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0 ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7IGNhc2UgODogX191LT5fX3VpID0g X19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBf X3UgKyA0KTsgY2FzZSA0OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBjYXNlIDA6IGJy ZWFrOyB9IF9fczsgfSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wICgwKSAmJiAoMCkgPT0gJ1ww JyA/ICh7IHZvaWQgKl9fcyA9ICgmcmVxKTsgX19idWlsdGluX21lbXNldCAoX19zLCAnXDAnLCBz aXplb2YocmVxKSk7IF9fczsgfSkgOiBtZW1zZXQgKCZyZXEsIDAsIHNpemVvZihyZXEpKSkpKTsK ICAgICAgICByZXEuYXV4QXJnLnB0ciA9IHRibEg7CiAgICAgICAgcmVxLm9wcnMgPSB0aS0+YXRy ZWVPcHJzOwogICAgICAgIHJldENvZGUgPSBBdHJlZU9wZW5UcmVlKCZyZXEsIGZTcGVjLT5mbGRJ bmRleFRyZWUsIDApOwogICAgICAgIGlmKCgocmV0Q29kZSkgPj0gMCkpIHsKICAgICAgICAgICAg QXRyZWVJZHggbm9kZSA9IDA7CgogICAgICAgICAgICB3aGlsZSgobm9kZSA9IEF0cmVlTmV4dE5v ZGUoJnJlcSwgbm9kZSkpKSB7CiAgICAgICAgICAgICAgICBTdG9yZURhdGEoJnJlcSwgbm9kZSk7 CiAgICAgICAgICAgIH0KICAgICAgICAgICAgQXRyZWVDbG9zZVRyZWUoJnJlcSk7CiAgICAgICAg fQogICAgICAgIHJldHVybiAocmV0Q29kZSk7CiAgICB9CgogICAgOwogICAgaWYocmVjcyA9PSAo KHZvaWQgKikwKSkgewogICAgICAgIG51bVJlY3MgPSAwOwogICAgfSBlbHNlIGlmKG51bVJlY3Mg PD0gMCkgewogICAgICAgIG51bVJlY3MgPSAwOwogICAgICAgIHJlY3MgPSAoKHZvaWQgKikwKTsK ICAgIH0KICAgIGlmKGFsbExpc3QgPT0gKCh2b2lkICopMCkpIHsKICAgICAgICBudW1BbGwgPSAw OwogICAgfSBlbHNlIGlmKG51bUFsbCA8PSAwKSB7CiAgICAgICAgbnVtQWxsID0gMDsKICAgICAg ICBhbGxMaXN0ID0gKCh2b2lkICopMCk7CiAgICB9CiAgICBpZih1bmlxTGlzdCA9PSAoKHZvaWQg KikwKSkgewogICAgICAgIG51bVVuaXEgPSAwOwogICAgfSBlbHNlIGlmKG51bVVuaXEgPD0gMCkg ewogICAgICAgIG51bVVuaXEgPSAwOwogICAgICAgIHVuaXFMaXN0ID0gKCh2b2lkICopMCk7CiAg ICB9CiAgICBpZihmU3BlYy0+ZmxkVHlwZSA9PSAweDgwKSB7CiAgICAgICAgU2RibUZsZERlZkxp bmtJbmZvIGxpRGVmOwoKICAgICAgICBsaURlZi53aG9sZSA9IGZTcGVjLT5mbGRBdXhUeXBlOwog ICAgICAgIHJldFZhbCA9IFNkYm1PcGVuVGFibGVCeUFub3RoZXJUYWJsZSh0YmxILCBsaURlZi5k ZXRhaWwubGlua1RvVGFibGUsICZ0b1RibEgpOwogICAgICAgIGlmKCgocmV0VmFsKSA+PSAwKSkg ewogICAgICAgICAgICByZXRWYWwgPSBTZGJtR2V0RmxkU3BlYyh0b1RibEgsIGxpRGVmLmRldGFp bC5saW5rVG9GbGRObywgJmZTcGVjKTsKICAgICAgICAgICAgaWYoKChyZXRWYWwpID49IDApKSB7 CiAgICAgICAgICAgICAgICB0YmxIID0gdG9UYmxIOwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgfQogICAgaWYoKChyZXRWYWwpID49IDApKSB7CiAgICAgICAgY29uc3QgU2RibUZsZFR5cGVJ bmZvKiB0aTsKICAgICAgICB0aSA9IChnU2RibUZsZFR5cGVzW2ZTcGVjLT5mbGRUeXBlXSk7CiAg ICAgICAgaWYoKHRpKSAmJiAodGktPmZtdFR5cGUgPT0gZlNwZWMtPmZsZFR5cGUpICYmICh0aS0+ c2VhcmNoRGF0YSkgJiYgKCEgdGktPm5vbmVTb3J0ZWQpKSB7CiAgICAgICAgICAgIHJldFZhbCA9 IExpc3REYXRhcyh0aSk7CiAgICAgICAgfQogICAgfQogICAgaWYodG9UYmxIKSB7CiAgICAgICAg U2RibVJlbGVhc2VUYWJsZUhhbmRsZSh0b1RibEgsIDEpOwogICAgfQogICAgaWYocmVhbFJlY3Mp CiAgICAgICAgKnJlYWxSZWNzID0gaWR4UmVjOwogICAgaWYocmVhbEFsbCkKICAgICAgICAqcmVh bEFsbCA9IGlkeEFsbDsKICAgIGlmKHJlYWxVbmlxKQogICAgICAgICpyZWFsVW5pcSA9IGlkeFVu aXE7CgogICAgcmV0dXJuIChyZXRWYWwpOwp9Cg==